diff --git a/public/js/admin.js b/public/js/admin.js index 8957ce7..a600790 100644 --- a/public/js/admin.js +++ b/public/js/admin.js @@ -15,7 +15,7 @@ \*****************************************/ () { -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(\"Siekeres mentés!\", 'Új tartalom elmentve.', TOAST_STATUS.INFO, 5000);\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(' It\\'s my button! ');\r\n }});\r\n }\r\n */\n });\n };\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ3aW5kb3ciLCJEYXNoYm9hcmQiLCJPcHRzIiwiYWN0aXZlIiwiY29udGFpbmVyQ3NzU2VsZWN0b3IiLCJ0ZXN0RmlsZU1vZCIsImlzQWRtaW4iLCJVUkwiLCJjcmVhdGUiLCJzdG9yZSIsImdldERhdGFUYWJsZUNvbnRlbnQiLCJkZXN0cm95Iiwicm9vdCIsImNvbnN0cnVjdCIsIm9wdGlvbnMiLCJkZWJ1ZyIsIiQiLCJleHRlbmQiLCJnZXRPcHRzIiwiaW5pdCIsImNvbnNvbGUiLCJsb2ciLCJpbml0RWRpdG9yQnV0dG9ucyIsIm9mZiIsIm9uIiwiaW5pdEVkaXRvciIsInRvZ2dsZUNsYXNzIiwic2F2ZUN1c3RvbUNvbnRlbnQiLCJyZW1vdmVFZGl0b3IiLCJhamF4RGF0YSIsIkZvcm1EYXRhIiwiYXBwZW5kIiwidGlueW1jZSIsImFjdGl2ZUVkaXRvciIsImdldENvbnRlbnQiLCJhamF4VXJsIiwidXBkYXRlIiwicmVwbGFjZSIsImRhdGEiLCJhamF4IiwidXJsIiwidHlwZSIsImNvbnRlbnRUeXBlIiwicHJvY2Vzc0RhdGEiLCJiZWZvcmVTZW5kIiwic3VjY2VzcyIsIlRvYXN0IiwiVE9BU1RfU1RBVFVTIiwiSU5GTyIsImVycm9yIiwicmVzcG9uc2VKU09OIiwiYWpheEVycm9yRmllbGRIYW5kbGVyIiwibG9hZFRpbnltY2UiLCJnZXRTY3JpcHQiLCJyZW1vdmUiLCJzZWxlY3RvciIsImxhbmd1YWdlIiwicGx1Z2lucyIsInRvb2xiYXIiXSwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2pzL2FkbWluL2Rhc2hib2FyZC5qcz9lMGQ5Il0sInNvdXJjZXNDb250ZW50IjpbIndpbmRvdy5EYXNoYm9hcmQ9ZnVuY3Rpb24gKCkge1xyXG4gICAgbGV0IE9wdHMgPSB7XHJcbiAgICAgICAgYWN0aXZlOiBmYWxzZSxcclxuICAgICAgICBjb250YWluZXJDc3NTZWxlY3RvcjpcIi5kYXNoYm9hcmRcIixcclxuICAgICAgICB0ZXN0RmlsZU1vZDpmYWxzZSxcclxuICAgICAgICBpc0FkbWluOmZhbHNlLFxyXG4gICAgICAgIFVSTDp7XHJcbiAgICAgICAgICAgIGNyZWF0ZTonJyxcclxuICAgICAgICAgICAgc3RvcmU6JycsXHJcbiAgICAgICAgICAgIGdldERhdGFUYWJsZUNvbnRlbnQ6JycsXHJcbiAgICAgICAgICAgIGRlc3Ryb3k6JycsXHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIGxldCByb290ID0gdGhpcztcclxuICAgIC8qXHJcbiAgICAgKiBDb25zdHJ1Y3RvclxyXG4gICAgICovXHJcbiAgICB0aGlzLmNvbnN0cnVjdCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XHJcbiAgICAgICAgZGVidWcoJ0Rhc2hib2FyZCBjb25zdHJ1Y3RvciBjYWxsZWQnKTtcclxuICAgICAgICAkLmV4dGVuZChPcHRzLCBvcHRpb25zKTtcclxuICAgIH07XHJcbiAgICB0aGlzLmdldE9wdHM9ZnVuY3Rpb24gKCl7XHJcbiAgICAgICAgcmV0dXJuIE9wdHM7XHJcbiAgICB9XHJcbiAgICB0aGlzLmluaXQgPSBmdW5jdGlvbiAob3B0aW9ucykge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCdEYXNoYm9hcmQgaW5pdCBjYWxsZWQnKTtcclxuICAgICAgICAkLmV4dGVuZChPcHRzLCBvcHRpb25zKTtcclxuLypcclxuICAgICAgICBBUFAuc2V0T3B0cyh7XHJcbiAgICAgICAgICAgIGFmdGVyTG9hZE1haW5Db250ZW50OnJvb3QuaW5pdEVkaXRvcixcclxuICAgICAgICB9KVxyXG4qL1xyXG4gICAgICAgIC8qXHJcbiAgICAgICAgSW5pdCBsaXN0IHZpZXdcclxuICAgICAgICAqL1xyXG4gICAgICAgIHJvb3QuaW5pdEVkaXRvckJ1dHRvbnMoKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmluaXRFZGl0b3JCdXR0b25zPWZ1bmN0aW9uICgpe1xyXG4gICAgICAgICQoJy5EYXNoYm9hcmRFZGl0YWJsZSBidXR0b24uZWRpdCcpLm9mZignY2xpY2snKTtcclxuICAgICAgICAkKCcuRGFzaGJvYXJkRWRpdGFibGUgYnV0dG9uLmVkaXQnKS5vbignY2xpY2snLGZ1bmN0aW9uICgpe1xyXG4gICAgICAgICAgICByb290LmluaXRFZGl0b3IoKTtcclxuICAgICAgICAgICAgJCgnLmJ0bkdyb3VwRWRpdCcpLnRvZ2dsZUNsYXNzKCdkLW5vbmUnKTtcclxuICAgICAgICAgICAgJCgnLmJ0bkdyb3VwTW9kaWZ5JykudG9nZ2xlQ2xhc3MoJ2Qtbm9uZScpO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICAkKCcuRGFzaGJvYXJkRWRpdGFibGUgYnV0dG9uLmJ0blNhdmUnKS5vZmYoJ2NsaWNrJyk7XHJcbiAgICAgICAgJCgnLkRhc2hib2FyZEVkaXRhYmxlIGJ1dHRvbi5idG5TYXZlJykub24oJ2NsaWNrJyxmdW5jdGlvbiAoKXtcclxuICAgICAgICAgICAgLyokKCcuYnRuR3JvdXBFZGl0JykudG9nZ2xlQ2xhc3MoJ2Qtbm9uZScpO1xyXG4gICAgICAgICAgICAkKCcuYnRuR3JvdXBNb2RpZnknKS50b2dnbGVDbGFzcygnZC1ub25lJyk7XHJcbiAgICAgICAgICAgICovXHJcbiAgICAgICAgICAgIHJvb3Quc2F2ZUN1c3RvbUNvbnRlbnQoKTtcclxuICAgICAgICAgICAgLy90aW55bWNlLmFjdGl2ZUVkaXRvci5pc0RpcnR5KCkgLy90cnVlIHdoZW4gbW9kaWZpZWRcclxuICAgICAgICB9KTtcclxuXHJcblxyXG5cclxuICAgICAgICAkKCcuRGFzaGJvYXJkRWRpdGFibGUgYnV0dG9uLmJ0bkNhbmNlbCcpLm9mZignY2xpY2snKTtcclxuICAgICAgICAkKCcuRGFzaGJvYXJkRWRpdGFibGUgYnV0dG9uLmJ0bkNhbmNlbCcpLm9uKCdjbGljaycsZnVuY3Rpb24gKCl7XHJcblxyXG4gICAgICAgICAgICAkKCcuYnRuR3JvdXBFZGl0JykudG9nZ2xlQ2xhc3MoJ2Qtbm9uZScpO1xyXG4gICAgICAgICAgICAkKCcuYnRuR3JvdXBNb2RpZnknKS50b2dnbGVDbGFzcygnZC1ub25lJyk7XHJcbiAgICAgICAgICAgIHJvb3QucmVtb3ZlRWRpdG9yKCk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuc2F2ZUN1c3RvbUNvbnRlbnQ9ZnVuY3Rpb24gKCl7XHJcbiAgICAgICAgbGV0IGFqYXhEYXRhPSBuZXcgRm9ybURhdGEoJCgnLmRhc2hib2FyZEZvcm0nKVswXSk7XHJcbiAgICAgICAgYWpheERhdGEuYXBwZW5kKCdzdG9yZWRfZGF0YScsdGlueW1jZS5hY3RpdmVFZGl0b3IuZ2V0Q29udGVudCgpKTtcclxuICAgICAgICBsZXQgYWpheFVybD1PcHRzLlVSTC51cGRhdGUucmVwbGFjZSgnJWlkJScsJCgnZGl2LmRhc2hib2FyZEN1c3RvbUNvbnRlbnQnKS5kYXRhKCdpZCcpKTtcclxuICAgICAgICBhamF4RGF0YS5hcHBlbmQoJ19tZXRob2QnLCdQVVQnKTtcclxuICAgICAgICAkLmFqYXgoe1xyXG4gICAgICAgICAgICB1cmw6YWpheFVybCxcclxuICAgICAgICAgICAgZGF0YTphamF4RGF0YSxcclxuICAgICAgICAgICAgdHlwZTonUE9TVCcsXHJcbiAgICAgICAgICAgIGNvbnRlbnRUeXBlOmZhbHNlLFxyXG4gICAgICAgICAgICBwcm9jZXNzRGF0YTogZmFsc2UsXHJcbiAgICAgICAgICAgIGJlZm9yZVNlbmQ6IGZ1bmN0aW9uKCkge1xyXG5cclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24oZGF0YSkge1xyXG4gICAgICAgICAgICAgICAgVG9hc3QuY3JlYXRlKFwiU2lla2VyZXMgbWVudMOpcyFcIiwnw5pqIHRhcnRhbG9tIGVsbWVudHZlLicgLCBUT0FTVF9TVEFUVVMuSU5GTyw1MDAwKTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgZXJyb3I6IGZ1bmN0aW9uKGRhdGEpIHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGRhdGEucmVzcG9uc2VKU09OKTtcclxuICAgICAgICAgICAgICAgIGFqYXhFcnJvckZpZWxkSGFuZGxlcihkYXRhLnJlc3BvbnNlSlNPTi5lcnJvcik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG5cclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmxvYWRUaW55bWNlPSBmdW5jdGlvbiAoKXtcclxuICAgICAgICAkLmdldFNjcmlwdCgnaHR0cHM6Ly9jZG4udGlueS5jbG91ZC8xL25vLWFwaS1rZXkvdGlueW1jZS81L3RpbnltY2UubWluLmpzJyxmdW5jdGlvbiAoKXtcclxuICAgICAgICAgICByb290LmluaXRFZGl0b3IoKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIHRoaXMucmVtb3ZlRWRpdG9yID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcclxuICAgICAgICBpZih0eXBlb2YgdGlueW1jZSE9PVwidW5kZWZpbmVkXCIpe1xyXG4gICAgICAgICAgICB0aW55bWNlLnJlbW92ZSgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHRoaXMuaW5pdEVkaXRvciA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XHJcblxyXG4gICAgICAgIGlmKHR5cGVvZiB0aW55bWNlPT09XCJ1bmRlZmluZWRcIil7XHJcbiAgICAgICAgICAgIHJvb3QubG9hZFRpbnltY2UoKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGlueW1jZS5pbml0KHtcclxuICAgICAgICAgICAgc2VsZWN0b3I6ICdkaXYuZGFzaGJvYXJkQ3VzdG9tQ29udGVudCcsIC8vIFJlcGxhY2UgdGhpcyBDU1Mgc2VsZWN0b3IgdG8gbWF0Y2ggdGhlIHBsYWNlaG9sZGVyIGVsZW1lbnQgZm9yIFRpbnlNQ0VcclxuICAgICAgICAgICAgbGFuZ3VhZ2U6ICdodV9IVScsXHJcbiAgICAgICAgICAgIHBsdWdpbnM6ICdjb2RlIHRhYmxlIGxpc3RzJyxcclxuICAgICAgICAgICAgdG9vbGJhcjogJyB1bmRvIHJlZG8gfCBmb3JtYXRzZWxlY3R8IGJvbGQgaXRhbGljIHwgYWxpZ25sZWZ0IGFsaWduY2VudGVyIGFsaWducmlnaHQgfCBpbmRlbnQgb3V0ZGVudCB8IGJ1bGxpc3QgbnVtbGlzdCB8IGNvZGUgfCB0YWJsZScsXHJcblxyXG4vKlxyXG4gICAgICAgICAgICB0b29sYmFyOiAnY3VzdG9tSW5zZXJ0QnV0dG9uIHwgdW5kbyByZWRvIHwgZm9ybWF0c2VsZWN0fCBib2xkIGl0YWxpYyB8IGFsaWdubGVmdCBhbGlnbmNlbnRlciBhbGlnbnJpZ2h0IHwgaW5kZW50IG91dGRlbnQgfCBidWxsaXN0IG51bWxpc3QgfCBjb2RlIHwgdGFibGUnLFxyXG4gICAgICAgICAgICBzZXR1cDogZnVuY3Rpb24gKGVkaXRvcikge1xyXG4gICAgICAgICAgICAgICAgZWRpdG9yLnVpLnJlZ2lzdHJ5LmFkZEJ1dHRvbignY3VzdG9tSW5zZXJ0QnV0dG9uJywge1xyXG4gICAgICAgICAgICAgICAgICAgIHRleHQ6ICdNeSBCdXR0b24nLFxyXG4gICAgICAgICAgICAgICAgICAgIG9uQWN0aW9uOiBmdW5jdGlvbiAoXykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlZGl0b3IuaW5zZXJ0Q29udGVudCgnJm5ic3A7PHN0cm9uZz5JdFxcJ3MgbXkgYnV0dG9uITwvc3Ryb25nPiZuYnNwOycpO1xyXG4gICAgICAgICAgICAgICAgICAgIH19KTtcclxuICAgICAgICAgICAgfVxyXG4qL1xyXG5cclxuICAgICAgICB9KTtcclxuICAgIH1cclxufTtcclxuIl0sIm1hcHBpbmdzIjoiQUFBQUEsTUFBTSxDQUFDQyxTQUFTLEdBQUMsWUFBWTtFQUN6QixJQUFJQyxJQUFJLEdBQUc7SUFDUEMsTUFBTSxFQUFFLEtBQUs7SUFDYkMsb0JBQW9CLEVBQUMsWUFBWTtJQUNqQ0MsV0FBVyxFQUFDLEtBQUs7SUFDakJDLE9BQU8sRUFBQyxLQUFLO0lBQ2JDLEdBQUcsRUFBQztNQUNBQyxNQUFNLEVBQUMsRUFBRTtNQUNUQyxLQUFLLEVBQUMsRUFB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\n//# sourceURL=webpack-internal:///./resources/js/admin/dashboard.js\n\n}"); +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(' It\\'s my button! ');\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}"); /***/ }, @@ -25,7 +25,7 @@ eval("{window.Dashboard = function () {\n var Opts = {\n active: false,\n \*****************************************/ () { -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(\"Hiba!\", 'Adjon meg beszállítót!', TOAST_STATUS.DANGER, 10000);\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(\"Hiba!\", 'Vállaszon ki fájlt!', TOAST_STATUS.DANGER, 10000);\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(' Árlistát elmentettük.');\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,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ3aW5kb3ciLCJQcmljZUxpc3RBZG1pbiIsIm9wdGlvbnMiLCJQcm9maXRDZW50ZXJJdGVtIiwiT3B0cyIsImFjdGl2ZSIsImNvbnRhaW5lckNzc1NlbGVjdG9yIiwidGVzdEZpbGVNb2QiLCJVUkwiLCJjcmVhdGUiLCJzdG9yZSIsImdldERhdGFUYWJsZUNvbnRlbnQiLCJkZXN0cm95IiwiUHJpY2VMaXN0Iiwicm9vdCIsImRhdGFUYWJsZUNTU1NlbGVjdG9yIiwiY29uc3RydWN0IiwiZGVidWciLCIkIiwiZXh0ZW5kIiwiZXJyb3JSb3dQb2ludGVyIiwiZXJyb3JSb3dDb3VudCIsImluaXRFcnJvck5hdmlnYXRpb25CdXR0b24iLCJsZW5ndGgiLCJvZmYiLCJvbiIsInJlbW92ZUNsYXNzIiwic2Nyb2xsVG9wIiwicG9zaXRpb24iLCJ0b3AiLCJhZGRDbGFzcyIsInNlbGVjdGVkVXBsb2FkRmlsZVRvZ2dsZSIsImZpbGVJbnB1dCIsImZpbGVzIiwidGV4dCIsIm5hbWUiLCJlbXB0eSIsImNsaWNrTmV3UHJpY2VMaXN0Q2FsbEJhY2siLCJpbml0Vmlld0RldGFpbHMiLCJjbGlja05ld1ByaWNlTGlzdCIsIkFQUCIsImxvYWRNYWluQ29udGVudCIsImRhdGF0YWJsZVJvd0FjdGlvbkJ1dHRvbkNsaWNrIiwiZXZlbnQiLCJub2RlIiwiY3VycmVudFRhcmdldCIsInJvdyIsIkRhdGFUYWJsZSIsInBhcmVudHMiLCJyb3dEYXRhIiwiZGF0YSIsImFqYXhEYXRhIiwiYWpheFVybCIsInJlcGxhY2UiLCJpZCIsIl90b2tlbiIsInZhbCIsImFqYXgiLCJ1cmwiLCJtZXRob2QiLCJzdWNjZXNzIiwicmVtb3ZlIiwiZHJhdyIsImluaXRWaWV3TGlzdCIsImNvbE51bSIsInNldE9wdHMiLCJkYXRhdGFibGVBY3Rpb25CdXR0b25DbGlja0NhbGxCYWNrIiwiZGF0YXRhYmxlUm93QWN0aW9uQnV0dG9uQ2xpY2tDYWxsQmFjayIsImRhdGFUYWJsZVByaWNlTGlzdCIsImxhbmd1YWdlIiwicmVuZGVyIiwidHlwZSIsImJ1dHRvbnMiLCJkYXRhdGFibGVBZGRSb3dUcmFzaEJ1dHRvbiIsImFyZ3VtZW50cyIsImF1dG9QcmludCIsImNsYXNzTmFtZSIsImF0dHIiLCJpbml0IiwiYXBpIiwiY29uZmlnIiwiYWN0aW9uIiwiZSIsImR0IiwiZHJhd0NhbGxiYWNrIiwic2V0dGluZ3MiLCJkYXRhdGFibGVBZGRSb3dBY3Rpb24iLCJkYXRlcGlja2VyIiwiZGF0ZUZvcm1hdCIsIm9uU2VsZWN0IiwiZGF0ZVRleHQiLCJjb25zb2xlIiwibG9nIiwicmVwbGFjZUFsbCIsIkZvcm1EYXRhIiwiVG9hc3QiLCJUT0FTVF9TVEFUVVMiLCJEQU5HRVIiLCJhcHBlbmQiLCJjb250ZW50VHlwZSIsInByb2Nlc3NEYXRhIiwiYmVmb3JlU2VuZCIsInByb2Nlc3NDaGVja2VkUHJpY2VMaXN0UmVzcG9uc2UiLCJlcnJvciIsInJlc3BvbnNlSlNPTiIsImFqYXhFcnJvckZpZWxkSGFuZGxlciIsImhpZGUiLCJnZXRPcHRzIiwicHJpY2VMaXN0SGFzRXJyb3IiLCJyZXNwb25zZURhdGEiLCJwcm9jZXNzQ2hlY2tlZFByaWNlTGlzdFJlc3BvbnNlUm93cyIsInJvd3MiLCJzaG93IiwicmVzcG9uc2VSb3dzRGF0YSIsImtleSIsInRlbXBsYXRlRGF0YSIsIm9yaWdpbmFsRGF0YSIsInJvd051bSIsInRlbXBsYXRlIiwiaHRtbCIsIk11c3RhY2hlIiwidWNGaXJzdCIsInN0YXR1cyIsInByb2Nlc3NSZXNwb25zZVJvd0Vycm9ycyIsImNoYW5nZWQiLCJwcm9jZXNzUmVzcG9uc2VSb3dDaGFuZ2VkIiwiY2hhbmdlZEFycmF5IiwidHJOb2RlIiwidGROb2RlIiwiZmluZCIsImNoYW5nZWRUeHROb2RlIiwiZG9jdW1lbnQiLCJjcmVhdGVFbGVtZW50Iiwib2xkIiwiZXJyb3JBcnJheSIsImZpZWxkcyIsImVycm9yVHh0Tm9kZSJdLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvanMvYWRtaW4vcHJpY2VMaXN0LmpzP2NhZDYiXSwic291cmNlc0NvbnRlbnQiOlsid2luZG93LlByaWNlTGlzdEFkbWluPWZ1bmN0aW9uIChvcHRpb25zLFByb2ZpdENlbnRlckl0ZW0pIHtcclxuICAgIC8qXHJcbiAgICAgKiBWYXJpYWJsZXMgYWNjZXNzaWJsZVxyXG4gICAgICogaW4gdGhlIGNsYXNzXHJcbiAgICAgKi9cclxuICAgIGxldCBPcHRzID0ge1xyXG4gICAgICAgIGFjdGl2ZTogZmFsc2UsXHJcbiAgICAgICAgY29udGFpbmVyQ3NzU2VsZWN0b3I6XCIucHJpY2VMaXN0Rm9ybVwiLFxyXG4gICAgICAgIHRlc3RGaWxlTW9kOmZhbHNlLFxyXG4gICAgICAgIFVSTDp7XHJcbiAgICAgICAgICAgIGNyZWF0ZTonJyxcclxuICAgICAgICAgICAgc3RvcmU6JycsXHJcbiAgICAgICAgICAgIGdldERhdGFUYWJsZUNvbnRlbnQ6JycsXHJcbiAgICAgICAgICAgIGRlc3Ryb3k6JycsXHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIGxldCBQcmljZUxpc3QgPSB7fTtcclxuICAgIGxldCByb290ID0gdGhpcztcclxuICAgIGxldCBkYXRhVGFibGVDU1NTZWxlY3Rvcj1udWxsO1xyXG5cclxuXHJcblxyXG4gICAgLypcclxuICAgICAqIENvbnN0cnVjdG9yXHJcbiAgICAgKi9cclxuICAgIHRoaXMuY29uc3RydWN0ID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcclxuICAgICAgICBkZWJ1ZygnUHJpY2VMaXN0QWRtaW4gY29uc3RydWN0b3IgY2FsbGVkJyk7XHJcbiAgICAgICAgJC5leHRlbmQoT3B0cywgb3B0aW9ucyk7XHJcbiAgICB9O1xyXG5cclxuICAgIGxldCBlcnJvclJvd1BvaW50ZXI9bnVsbDtcclxuICAgIGxldCBlcnJvclJvd0NvdW50PTA7XHJcblxyXG4gICAgdGhpcy5pbml0RXJyb3JOYXZpZ2F0aW9uQnV0dG9uPWZ1bmN0aW9uICgpe1xyXG5cclxuICAgICAgICBlcnJvclJvd0NvdW50PSQoJy5zdGF0dXNFcnJvcicpLmxlbmd0aDtcclxuICAgICAgICBlcnJvclJvd1BvaW50ZXI9bnVsbDtcclxuICAgICAgICAkKCcucHJpY2VMaXN0Rm9ybSAuYnV0dG9uUHJldkVycm9yIC5idXR0b25OZXh0RXJyb3InKS5vZmYoJ2NsaWNrJylcclxuICAgICAgICAkKCcucHJpY2VMaXN0Rm9ybSAuYnV0dG9uUHJldkVycm9yJykub24oJ2NsaWNrJyxmdW5jdGlvbiAoKXtcclxuICAgICAgICAgICAgaWYoZXJyb3JSb3dQb2ludGVyPT1udWxsKXtcclxuICAgICAgICAgICAgICAgIGVycm9yUm93UG9pbnRlcj0wO1xyXG4gICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgIGlmKGVycm9yUm93UG9pbnRlcj4wKXtcclxuICAgICAgICAgICAgICAgICAgICBlcnJvclJvd1BvaW50ZXItLTtcclxuICAgICAgICAgICAgICAgIH1lbHNle3JldHVybjt9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgJCgnLnN0YXR1c0Vycm9yJykucmVtb3ZlQ2xhc3MoJ2hpZ2hsaWdodGVkRXJyb3JSb3cnKTtcclxuICAgICAgICAgICAgJCgnLnByaWNlTGlzdFRhYmxlV3JhcHBlcicpLnNjcm9sbFRvcCgkKCQoJy5zdGF0dXNFcnJvcicpW2Vycm9yUm93UG9pbnRlcl0pLnBvc2l0aW9uKCkudG9wKTtcclxuICAgICAgICAgICAgJCgkKCcuc3RhdHVzRXJyb3InKVtlcnJvclJvd1BvaW50ZXJdKS5hZGRDbGFzcygnaGlnaGxpZ2h0ZWRFcnJvclJvdycpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgICQoJy5wcmljZUxpc3RGb3JtIC5idXR0b25OZXh0RXJyb3InKS5vZmYoJ2NsaWNrJyk7XHJcbiAgICAgICAgJCgnLnByaWNlTGlzdEZvcm0gLmJ1dHRvbk5leHRFcnJvcicpLm9uKCdjbGljaycsZnVuY3Rpb24gKCl7XHJcbiAgICAgICAgICAgIGlmKGVycm9yUm93UG9pbnRlcj09bnVsbCl7XHJcbiAgICAgICAgICAgICAgICBlcnJvclJvd1BvaW50ZXI9MDtcclxuICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICBpZihlcnJvclJvd1BvaW50ZXI8ZXJyb3JSb3dDb3VudC0xKXtcclxuICAgICAgICAgICAgICAgICAgICBlcnJvclJvd1BvaW50ZXIrKztcclxuICAgICAgICAgICAgICAgIH1lbHNle3JldHVybjt9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgJCgnLnN0YXR1c0Vycm9yJykucmVtb3ZlQ2xhc3MoJ2hpZ2hsaWdodGVkRXJyb3JSb3cnKTtcclxuICAgICAgICAgICAgJCgnLnByaWNlTGlzdFRhYmxlV3JhcHBlcicpLnNjcm9sbFRvcCgkKCQoJy5zdGF0dXNFcnJvcicpW2Vycm9yUm93UG9pbnRlcl0pLnBvc2l0aW9uKCkudG9wKTtcclxuICAgICAgICAgICAgJCgkKCcuc3RhdHVzRXJyb3InKVtlcnJvclJvd1BvaW50ZXJdKS5hZGRDbGFzcygnaGlnaGxpZ2h0ZWRFcnJvclJvdycpO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnNlbGVjdGVkVXBsb2FkRmlsZVRvZ2dsZT1mdW5jdGlvbiAoZmlsZUlucHV0KXtcclxuICAgICAgICAvKlxyXG4gICAgICAgIGNvbnNvbGUubG9nKGZpbGVJbnB1dC5hdHRyKCduYW1lJykpO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKGZpbGVJbnB1dFswXS5maWxlc1swXSk7XHJcbiAgICAgICAgY29uc29sZS5sb2coZmlsZUlucHV0WzBdLmZpbGVzWzBdLm5hbWUpO1xyXG4gICAgICAgICovXHJcbiAgICAgICAgaWYoZmlsZUlucHV0KXtcclxuICAgICAgICAgICAgJCgnLmNvbnRhaW5lckZpbGVVcGxvYWQnKS5hZGRDbGFzcygnZC1ub25lJyk7XHJcbiAgICAgICAgICAgIGlmKGZpbGVJbnB1dFswXS5maWxlc1swXSl7XHJcbiAgICAgICAgICAgICAgICAkKCcuY29udGFpbmVyVXBsb2FkZWRGaWxlTmFtZScpLnRleHQoZmlsZUlucHV0WzBdLmZpbGVzWzBdLm5hbWUpO1xyXG5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAkKCcuY29udGFpbmVyRmlsZVVwbG9hZFN0YXJ0ZWQnKS5yZW1vdmVDbGFzcygnZC1ub25lJyk7XHJcbiAgICAgICAgICAgICQoJy5jb250YWluZXJVcGxvYWRlZFNwaW5uZXInKS5yZW1vdmVDbGFzcygnZC1ub25lJyk7XHJcbiAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICQoJy5jb250YWluZXJVcGxvYWRlZEZpbGVOYW1lJykudGV4dCgnJyk7XHJcbiAgICAgICAgICAgICQoJy5jb250YWluZXJGaWxlVXBsb2FkU3RhcnRlZCcpLmFkZENsYXNzKCdkLW5vbmUnKTtcclxuICAgICAgICAgICAgJCgnLnVwbG9hZFN0YXR1c1JvdycpLmFkZENsYXNzKCdkLW5vbmUnKTtcclxuXHJcbiAgICAgICAgICAgICQoJy5wcmljZUxpc3RUYWJsZSA+IHRib2R5JykuZW1wdHkoKTtcclxuICAgICAgICAgICAgJCgnLmNvbnRhaW5lckZpbGVVcGxvYWQnKS5yZW1vdmVDbGFzcygnZC1ub25lJyk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuY2xpY2tOZXdQcmljZUxpc3RDYWxsQmFjaz1mdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcm9vdC5pbml0Vmlld0RldGFpbHMoKTtcclxuICAgIH1cclxuICAgIHRoaXMuY2xpY2tOZXdQcmljZUxpc3Q9ZnVuY3Rpb24oKXtcclxuICAgICAgICBBUFAubG9hZE1haW5Db250ZW50KE9wdHMuVVJMLmNyZWF0ZSxyb290LmNsaWNrTmV3UHJpY2VMaXN0Q2FsbEJhY2spO1xyXG4gICAgfVxyXG4gICAgdGhpcy5kYXRhdGFibGVSb3dBY3Rpb25CdXR0b25DbGljaz1mdW5jdGlvbihldmVudCl7XHJcbiAgICAgICAgbGV0IG5vZGU9JChldmVudFswXS5jdXJyZW50VGFyZ2V0KTtcclxuICAgICAgICBsZXQgcm93PSQoZGF0YVRhYmxlQ1NTU2VsZWN0b3IpLkRhdGFUYWJsZSgpLnJvdyhub2RlLnBhcmVudHMoJ3RyJykpO1xyXG4gICAgICAgIGxldCByb3dEYXRhPXJvdy5kYXRhKCk7XHJcbiAgICAgICAgLy9fdG9rZW5cclxuICAgICAgICBsZXQgYWpheERhdGE9e307XHJcbiAgICAgICAgbGV0IGFqYXhVcmw9T3B0cy5VUkwuZGVzdHJveS5yZXBsYWNlKCclaWQlJyxyb3dEYXRhLmlkKTtcclxuICAgICAgICBhamF4RGF0YS5fdG9rZW49JCgnaW5wdXRbbmFtZT1fdG9rZW5dJykudmFsKCk7XHJcbiAgICAgICAgJC5hamF4KHtcclxuICAgICAgICAgICAgdXJsOmFqYXhVcmwsXHJcbiAgICAgICAgICAgIGRhdGE6YWpheERhdGEsXHJcbiAgICAgICAgICAgIG1ldGhvZDpcIkRFTEVURVwiLFxyXG4gICAgICAgICAgICBzdWNjZXNzOmZ1bmN0aW9uIChkYXRhKXtcclxuICAgICAgICAgICAgICAgIGlmKGRhdGEuc3VjY2Vzcz09dHJ1ZSl7XHJcbiAgICAgICAgICAgICAgICAgICAgcm93LnJlbW92ZSgpLmRyYXcoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgfSk7XHJcbi8qXHJcbiovXHJcblxyXG5cclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmluaXRWaWV3TGlzdCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XHJcbiAgICAgICAgZGVidWcoJ2xpc3R2aWV3IGluaWNpYWxpemF0aW9uJyk7XHJcbiAgICAgICAgZGF0YVRhYmxlQ1NTU2VsZWN0b3I9T3B0cy5jb250YWluZXJDc3NTZWxlY3RvcisnIC5kYXRhVGFibGUnOyAvL1xyXG5cclxuICAgICAgICBsZXQgY29sTnVtPSQoZGF0YVRhYmxlQ1NTU2VsZWN0b3IrJyB0aGVhZCB0aCcpLmxlbmd0aDsgLy9idXR0b25zIGluc2VydCBwb3NpdGlvbiBuZWVkXHJcbiAgICAgICAgQVBQLnNldE9wdHMoe1xyXG4gICAgICAgICAgICBkYXRhdGFibGVBY3Rpb25CdXR0b25DbGlja0NhbGxCYWNrOnJvb3QuY2xpY2tOZXdQcmljZUxpc3QsXHJcbiAgICAgICAgICAgIGRhdGF0YWJsZVJvd0FjdGlvbkJ1dHRvbkNsaWNrQ2FsbEJhY2s6cm9vdC5kYXRhdGFibGVSb3dBY3Rpb25CdXR0b25DbGljayxcclxuXHJcbiAgICAgICAgfSlcclxuXHJcblxyXG4gICAgICAgIEFQUC5kYXRhVGFibGVQcmljZUxpc3Q9JChkYXRhVGFibGVDU1NTZWxlY3RvcikuRGF0YVRhYmxlKCB7XHJcbiAgICAgICAgICAgIGxhbmd1YWdlOiB7XHJcbiAgICAgICAgICAgICAgICB1cmw6ICcvL2Nkbi5kYXRhdGFibGVzLm5ldC9wbHVnLWlucy8xLjEwLjI0L2kxOG4vSHVuZ2FyaWFuLmpzb24nXHJcbiAgICAgICAgICAgIH0sXHJcblxyXG4gICAgICAgICAgICAvL1wiYWpheFwiOiBcInt7YXNzZXQoJ2V4YXBtbGUyLmpzb24nKX19XCIsXHJcbiAgICAgICAgICAgIFwiYWpheFwiOiBPcHRzLlVSTC5nZXREYXRhVGFibGVDb250ZW50LFxyXG4gICAgICAgICAgICBcImNvbHVtbkRlZnNcIjogW1xyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIFwidGFyZ2V0c1wiOiBjb2xOdW0tMSxcclxuICAgICAgICAgICAgICAgICAgICBcInJlbmRlclwiOiBmdW5jdGlvbiAoIGRhdGEsIHR5cGUsIHJvdyApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGJ1dHRvbnM9QVBQLmRhdGF0YWJsZUFkZFJvd1RyYXNoQnV0dG9uKDAsYXJndW1lbnRzKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy9idXR0b25zKz1BUFAuZGF0YXRhYmxlQWRkUm93RWRpdEJ1dHRvbigwLGFyZ3VtZW50cyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBidXR0b25zO1xyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgLy97IFwidmlzaWJsZVwiOiBmYWxzZSwgIFwidGFyZ2V0c1wiOiBbIDAgXSB9XHJcbiAgICAgICAgICAgIF0sXHJcbiAgICAgICAgICAgIGJ1dHRvbnM6e1xyXG5cclxuICAgICAgICAgICAgICAgIGJ1dHRvbnM6IFtcclxuICAgICAgICAgICAgICAgICAgICAvLydjcmVhdGVTdGF0ZScsICdzYXZlZFN0YXRlcycsXHJcbiAgICAgICAgICAgICAgICAgICAgJ2V4Y2VsJywncGRmJyxcclxuICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4dGVuZDogJ3ByaW50JyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy90ZXh0OiAnUHJpbnQgY3VycmVudCBwYWdlJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgJ3RpdGxlJzogJ3RpdGxlIGN1c3RvbSB0ZXh0JyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgJ21lc3NhZ2VUb3AnOiAnTWVzc2FnZSBPbiBUb3AnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBhdXRvUHJpbnQ6IHRydWVcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIC8qKi9cclxuXHJcbiAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiAnw5pqIGZlbHZpdGVsZScsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogJ2J0biBidG4tc3VjY2VzcyBuZXdJdGVtJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXR0cjp7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhOjEsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGI6MlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2RhdGEnOiduZXdJdGVtJ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpbml0OiBmdW5jdGlvbihhcGksIG5vZGUsIGNvbmZpZykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJChub2RlKS5yZW1vdmVDbGFzcygndWktYnV0dG9uJylcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uOiBmdW5jdGlvbiAoIGUsIGR0LCBub2RlLCBjb25maWcgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBBUFAuZGF0YXRhYmxlQWN0aW9uQnV0dG9uQ2xpY2tDYWxsQmFjayhhcmd1bWVudHMpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogY29uc29sZS5sb2coZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coZHQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKG5vZGUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGNvbmZpZyk7Ki9cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBdXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIFwiY29sdW1uc1wiOiBbXHJcbiAgICAgICAgICAgICAgICB7IFwiZGF0YVwiOiBcImlkXCIgfSxcclxuICAgICAgICAgICAgICAgIHsgXCJkYXRhXCI6IFwic3VwcGxpZXJOYW1lXCIgfSxcclxuICAgICAgICAgICAgICAgIHsgXCJkYXRhXCI6IFwiYXZhaWxhYmxlXCIgfSxcclxuICAgICAgICAgICAgICAgIHsgXCJkYXRhXCI6IFwiY3JlYXRlZF9hdFwiIH0sXHJcbiAgICAgICAgICAgICAgICB7IFwiZGF0YVwiOiBcIm5vdGVcIiB9LFxyXG4gICAgICAgICAgICAgICAgbnVsbCxcclxuICAgICAgICAgICAgXSxcclxuICAgICAgICAgICAgXCJzdGF0ZVNhdmVcIjogdHJ1ZSxcclxuICAgICAgICAgICAgXCJkcmF3Q2FsbGJhY2tcIjogZnVuY3Rpb24oIHNldHRpbmdzICkge1xyXG4gICAgICAgICAgICAgICAgQVBQLmRhdGF0YWJsZUFkZFJvd0FjdGlvbihkYXRhVGFibGVDU1NTZWxlY3Rvcik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9ICk7XHJcblxyXG5cclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmluaXRWaWV3RGV0YWlscyA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XHJcbiAgICAgICAgJChPcHRzLmNvbnRhaW5lckNzc1NlbGVjdG9yKycgLmRhdGVQaWNrZXJDbGljaycpLm9mZignY2xpY2snKTtcclxuICAgICAgICAkKE9wdHMuY29udGFpbmVyQ3NzU2VsZWN0b3IrJyAuZGF0ZVBpY2tlckNsaWNrJykub24oJ2NsaWNrJyxmdW5jdGlvbigpe1xyXG4gICAgICAgICAgICAkKE9wdHMuY29udGFpbmVyQ3NzU2VsZWN0b3IrJyAuZGF0ZVBpY2tlcicpLmRhdGVwaWNrZXIoJ3Nob3cnKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgJChPcHRzLmNvbnRhaW5lckNzc1NlbGVjdG9yKycgLmRhdGVQaWNrZXInKS5kYXRlcGlja2VyKHtcclxuICAgICAgICAgICAgZGF0ZUZvcm1hdDogJ3l5LW1tLWRkJyxcclxuICAgICAgICAgICAgb25TZWxlY3Q6ZnVuY3Rpb24gKGRhdGVUZXh0KXtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGRhdGVUZXh0KTtcclxuICAgICAgICAgICAgICAgICQoJy5zZWxlY3RlZERhdGVUZXh0JykudGV4dChkYXRlVGV4dC5yZXBsYWNlQWxsKCctJywnLicpKTtcclxuXHJcbiAgICAgICAgICAgICAgICAkKCdpbnB1dFtuYW1lPVwiYXZhaWxhYmxlRGF0ZVwiXScpLnZhbChkYXRlVGV4dCk7XHJcblxyXG4gICAgICAgICAgICB9LFxyXG5cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgJChPcHRzLmNvbnRhaW5lckNzc1NlbGVjdG9yKycgLmJ1dHRvbk5ld1VwbG9hZCcpLm9mZignY2xpY2snKTtcclxuICAgICAgICAkKE9wdHMuY29udGFpbmVyQ3NzU2VsZWN0b3IrJyAuYnV0dG9uTmV3VXBsb2FkJykub24oJ2NsaWNrJyxmdW5jdGlvbiAoKXtcclxuICAgICAgICAgICAgcm9vdC5zZWxlY3RlZFVwbG9hZEZpbGVUb2dnbGUoKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICAkKE9wdHMuY29udGFpbmVyQ3NzU2VsZWN0b3IrJyAuYnV0dG9uVXBsb2FkJykub2ZmKCdjbGljaycpO1xyXG4gICAgICAgICQoT3B0cy5jb250YWluZXJDc3NTZWxlY3RvcisnIC5idXR0b25VcGxvYWQnKS5vbignY2xpY2snLGZ1bmN0aW9uICgpe1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZygnLS0tLS0tLS0tLS0tLS0tLS0tJyk7XHJcbiAgICAgICAgICAgIHJvb3Quc2VsZWN0ZWRVcGxvYWRGaWxlVG9nZ2xlKCk7XHJcblxyXG4gICAgICAgICAgICBsZXQgZGF0YT0gbmV3IEZvcm1EYXRhKCQoJy5wcmljZUxpc3RGb3JtJylbMF0pO1xyXG4gICAgICAgICAgICBpZigkKCcuc3VwcGxpZXJTZWxlY3QnKS52YWwoKS5sZW5ndGg8MSl7XHJcbiAgICAgICAgICAgICAgICBUb2FzdC5jcmVhdGUoXCJIaWJhIVwiLCAnQWRqb24gbWVnIGJlc3rDoWxsw610w7N0IScsIFRPQVNUX1NUQVRVUy5EQU5HRVIsIDEwMDAwKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBsZXQgZmlsZUlucHV0PSQoJyNpbnB1dEdyb3VwUHJpY2VMaXN0RmlsZScpO1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhmaWxlSW5wdXRbMF0uZmlsZXMubGVuZ3RoPDEpO1xyXG5cclxuICAgICAgICAgICAgLyogdGVzenRlbGVzIG1pYXR0IGtpa2FwY3NvbHZhIGEgZmFqbCBlbGxlbm9yemVzXHJcbiAgICAgICAgICAgICovXHJcbiAgICAgICAgICAgIGlmKCFPcHRzLnRlc3RGaWxlTW9kKXtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGZpbGVJbnB1dFswXS5maWxlcy5sZW5ndGg8MSk7XHJcbiAgICAgICAgICAgICAgICBpZihmaWxlSW5wdXRbMF0uZmlsZXMubGVuZ3RoPDEpe1xyXG4gICAgICAgICAgICAgICAgICAgIFRvYXN0LmNyZWF0ZShcIkhpYmEhXCIsICdWw6FsbGFzem9uIGtpIGbDoWpsdCEnLCBUT0FTVF9TVEFUVVMuREFOR0VSLCAxMDAwMCk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBkYXRhLmFwcGVuZChmaWxlSW5wdXQuYXR0cignbmFtZScpLGZpbGVJbnB1dFswXS5maWxlc1swXSk7XHJcbiAgICAgICAgICAgIHJvb3Quc2VsZWN0ZWRVcGxvYWRGaWxlVG9nZ2xlKGZpbGVJbnB1dCk7XHJcblxyXG4gICAgICAgICAgICAkLmFqYXgoe1xyXG4gICAgICAgICAgICAgICAgdXJsOk9wdHMuVVJMLnN0b3JlLFxyXG4gICAgICAgICAgICAgICAgZGF0YTpkYXRhLFxyXG4gICAgICAgICAgICAgICAgdHlwZTonUE9TVCcsXHJcbiAgICAgICAgICAgICAgICBjb250ZW50VHlwZTpmYWxzZSxcclxuICAgICAgICAgICAgICAgIHByb2Nlc3NEYXRhOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIGJlZm9yZVNlbmQ6IGZ1bmN0aW9uKCkge1xyXG5cclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbihkYXRhKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coZGF0YSk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYoZGF0YS5zdWNjZXNzPT10cnVlKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcm9vdC5wcm9jZXNzQ2hlY2tlZFByaWNlTGlzdFJlc3BvbnNlKGRhdGEpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBlcnJvcjogZnVuY3Rpb24oZGF0YSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGRhdGEucmVzcG9uc2VKU09OKTtcclxuICAgICAgICAgICAgICAgICAgICByb290LnNlbGVjdGVkVXBsb2FkRmlsZVRvZ2dsZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIGFqYXhFcnJvckZpZWxkSGFuZGxlcihkYXRhLnJlc3BvbnNlSlNPTi5lcnJvcik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICQoT3B0cy5jb250YWluZXJDc3NTZWxlY3RvcisnIC5idXR0b25GaW5hbGl6YXRpb24nKS5vbignY2xpY2snLGZ1bmN0aW9uICgpe1xyXG4gICAgICAgICAgICBsZXQgZGF0YT0gbmV3IEZvcm1EYXRhKCQoJy5wcmljZUxpc3RGb3JtJylbMF0pO1xyXG4gICAgICAgICAgICBsZXQgZmlsZUlucHV0PSQoJyNpbnB1dEdyb3VwUHJpY2VMaXN0RmlsZScpO1xyXG4gICAgICAgICAgICBkYXRhLmFwcGVuZChmaWxlSW5wdXQuYXR0cignbmFtZScpLGZpbGVJbnB1dFswXS5maWxlc1swXSk7XHJcbiAgICAgICAgICAgIGRhdGEuYXBwZW5kKCdmaW5hbGl6YXRpb24nLDEpO1xyXG4gICAgICAgICAgICAkLmFqYXgoe1xyXG4gICAgICAgICAgICAgICAgdXJsOk9wdHMuVVJMLnN0b3JlLFxyXG4gICAgICAgICAgICAgICAgZGF0YTpkYXRhLFxyXG4gICAgICAgICAgICAgICAgdHlwZTonUE9TVCcsXHJcbiAgICAgICAgICAgICAgICBjb250ZW50VHlwZTpmYWxzZSxcclxuICAgICAgICAgICAgICAgIHByb2Nlc3NEYXRhOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIGJlZm9yZVNlbmQ6IGZ1bmN0aW9uKCkge1xyXG5cclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbihkYXRhKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coZGF0YSk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYoZGF0YS5zdWNjZXNzKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgJCgnLnByaWNlTGlzdFRhYmxlIHRib2R5IHRyJykucmVtb3ZlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICQoJy51cGxvYWRTdGF0dXNSb3cgPi5jYW5GaW5pc2gnKS5oaWRlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICQoJy51cGxvYWRTdGF0dXNSb3cnKS5hZGRDbGFzcygnZC1ub25lJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICQoJy5wcmljZUxpc3RUYWJsZSB0Ym9keScpLmFwcGVuZCgnPHRyPjx0ZCBjb2xzcGFuPVwiOTlcIiBzdHlsZT1cInRleHQtYWxpZ246IGNlbnRlcjsnICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgICAgZm9udC1zaXplOiAyZW07XCI+IMOBcmxpc3TDoXQgZWxtZW50ZXR0w7xrLjwvdGQ+PC90cj4nKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgLypcclxuICAgICAgICAgICAgICAgICAgICBpZihkYXRhLnN1Y2Nlc3M9PTEpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByb290LnByb2Nlc3NDaGVja2VkUHJpY2VMaXN0UmVzcG9uc2UoZGF0YSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAqL1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIGVycm9yOiBmdW5jdGlvbihkYXRhKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coZGF0YS5yZXNwb25zZUpTT04pO1xyXG4gICAgICAgICAgICAgICAgICAgIGFqYXhFcnJvckZpZWxkSGFuZGxlcihkYXRhLnJlc3BvbnNlSlNPTi5lcnJvcik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuaW5pdCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ1ByaWNlTGlzdEFkbWluIGluaXQgY2FsbGVkJyk7XHJcbiAgICAgICAgJC5leHRlbmQoT3B0cywgb3B0aW9ucyk7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ09wdCBleHRlbmRlZCcpO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKE9wdHMpO1xyXG4gICAgICAgIC8qXHJcbiAgICAgICAgSW5pdCBsaXN0IHZpZXdcclxuICAgICAgICAqL1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCdjYWxsIGxpc3QgdmlldyBJbml0Jyk7XHJcbiAgICAgICAgcm9vdC5pbml0Vmlld0xpc3Qob3B0aW9ucyk7XHJcblxyXG5cclxuICAgIH1cclxuICAgIHRoaXMuZ2V0T3B0cz1mdW5jdGlvbiAoKXtcclxuICAgICAgICByZXR1cm4gT3B0cztcclxuICAgIH1cclxuICAgIGxldCBwcmljZUxpc3RIYXNFcnJvcj1mYWxzZTtcclxuXHJcbiAgICB0aGlzLnByb2Nlc3NDaGVja2VkUHJpY2VMaXN0UmVzcG9uc2U9ZnVuY3Rpb24gKHJlc3BvbnNlRGF0YSl7XHJcbiAgICAgICAgcHJpY2VMaXN0SGFzRXJyb3I9ZmFsc2U7XHJcbiAgICAgICAgcm9vdC5wcm9jZXNzQ2hlY2tlZFByaWNlTGlzdFJlc3BvbnNlUm93cyhyZXNwb25zZURhdGEucm93cyk7XHJcbiAgICAgICAgaWYocHJpY2VMaXN0SGFzRXJyb3Ipe1xyXG4gICAgICAgICAgICAkKCcudXBsb2FkU3RhdHVzUm93ID4uY2FuRmluaXNoJykuaGlkZSgpO1xyXG4gICAgICAgICAgICAkKCcudXBsb2FkU3RhdHVzUm93ID4uY2FuRmluaXNoRXJyb3InKS5zaG93KCk7XHJcbiAgICAgICAgICAgIHJvb3QuaW5pdEVycm9yTmF2aWdhdGlvbkJ1dHRvbigpO1xyXG4gICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAkKCcudXBsb2FkU3RhdHVzUm93ID4uY2FuRmluaXNoJykuc2hvdygpO1xyXG4gICAgICAgICAgICAkKCcudXBsb2FkU3RhdHVzUm93ID4uY2FuRmluaXNoRXJyb3InKS5oaWRlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgICQoJy51cGxvYWRTdGF0dXNSb3cnKS5yZW1vdmVDbGFzcygnZC1ub25lJyk7XHJcbiAgICAgICAgJCgnLmNvbnRhaW5lclVwbG9hZGVkU3Bpbm5lcicpLmFkZENsYXNzKCdkLW5vbmUnKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnByb2Nlc3NDaGVja2VkUHJpY2VMaXN0UmVzcG9uc2VSb3dzPWZ1bmN0aW9uIChyZXNwb25zZVJvd3NEYXRhKXtcclxuICAgICAgICBjb25zb2xlLmxvZygncHJvY2Vzc2luZ1Jvd3MnKTtcclxuICAgICAgICBmb3IgKGxldCBrZXkgaW4gcmVzcG9uc2VSb3dzRGF0YSkge1xyXG4gICAgICAgICAgICBsZXQgcm93RGF0YT1yZXNwb25zZVJvd3NEYXRhW2tleV07XHJcbiAgICAgICAgICAgIGxldCB0ZW1wbGF0ZURhdGE9cm93RGF0YS5vcmlnaW5hbERhdGE7XHJcbiAgICAgICAgICAgIHRlbXBsYXRlRGF0YS5yb3dOdW09cm93RGF0YS5yb3dOdW07XHJcbiAgICAgICAgICAgIGxldCB0ZW1wbGF0ZT0kKCd0ZW1wbGF0ZVtkYXRhLW5hbWU9XCJwcmljZUxpc3RUYWJsZVJvd1wiXScpLmh0bWwoKVxyXG4gICAgICAgICAgICBsZXQgcmVuZGVyPU11c3RhY2hlLnJlbmRlcih0ZW1wbGF0ZSx0ZW1wbGF0ZURhdGEpO1xyXG4gICAgICAgICAgICAkKCcucHJpY2VMaXN0VGFibGUgdGJvZHknKS5hcHBlbmQocmVuZGVyKTtcclxuICAgICAgICAgICAgJCgndHJbZGF0YS1yb3dudW09Jytyb3dEYXRhLnJvd051bSsnXScpLmFkZENsYXNzKCdzdGF0dXMnKyQudWNGaXJzdChyb3dEYXRhLnN0YXR1cykpO1xyXG4gICAgICAgICAgICByb290LnByb2Nlc3NSZXNwb25zZVJvd0Vycm9ycyhyb3dEYXRhLmVycm9yLHJvd0RhdGEucm93TnVtKTtcclxuICAgICAgICAgICAgaWYocm93RGF0YS5jaGFuZ2VkKXtcclxuICAgICAgICAgICAgICAgIHJvb3QucHJvY2Vzc1Jlc3BvbnNlUm93Q2hhbmdlZChyb3dEYXRhLmNoYW5nZWQscm93RGF0YS5yb3dOdW0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgdGhpcy5wcm9jZXNzUmVzcG9uc2VSb3dDaGFuZ2VkPWZ1bmN0aW9uIChjaGFuZ2VkQXJyYXkscm93TnVtKXtcclxuICAgICAgICBpZihjaGFuZ2VkQXJyYXkubGVuZ3RoPDEpe1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnNvbGUubG9nKGNoYW5nZWRBcnJheSk7XHJcbiAgICAgICAgLy9maWVsZHMgZXJyb3IgcmVzelxyXG4gICAgICAgIGxldCB0ck5vZGU9JCgndHJbZGF0YS1yb3dudW09Jytyb3dOdW0rJ10nKTtcclxuICAgICAgICBmb3IgKGxldCBrZXkgaW4gY2hhbmdlZEFycmF5KSB7XHJcbiAgICAgICAgICAgIGxldCB0ZE5vZGU9dHJOb2RlLmZpbmQoJ3RkW2RhdGEtcG9pbnRlcj1cIicra2V5KydcIl0nKTtcclxuICAgICAgICAgICAgdGROb2RlLmFkZENsYXNzKCdiZy1wcmltYXJ5Jyk7XHJcbiAgICAgICAgICAgIGxldCBjaGFuZ2VkVHh0Tm9kZT0kKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIpKS50ZXh0KGNoYW5nZWRBcnJheVtrZXldLm9sZCkuYWRkQ2xhc3MoJ2ZpZWxkQ2hhbmdlZCcpO1xyXG4gICAgICAgICAgICB0ZE5vZGUuYXBwZW5kKGNoYW5nZWRUeHROb2RlKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG4gICAgdGhpcy5wcm9jZXNzUmVzcG9uc2VSb3dFcnJvcnM9ZnVuY3Rpb24gKGVycm9yQXJyYXkscm93TnVtKXtcclxuICAgICAgICBpZihlcnJvckFycmF5Lmxlbmd0aDwxKXtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvL2dlbmVyYWwgZXJyb3IgcmVzelxyXG4gICAgICAgIGNvbnNvbGUubG9nKGVycm9yQXJyYXkpO1xyXG4gICAgICAgIHByaWNlTGlzdEhhc0Vycm9yID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgLy9maWVsZHMgZXJyb3IgcmVzelxyXG4gICAgICAgIGlmKHR5cGVvZiBlcnJvckFycmF5LmZpZWxkcyA9PSd1bmRlZmluZWQnKXtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgdHJOb2RlPSQoJ3RyW2RhdGEtcm93bnVtPScrcm93TnVtKyddJyk7XHJcbiAgICAgICAgZm9yIChsZXQga2V5IGluIGVycm9yQXJyYXkuZmllbGRzKSB7XHJcbiAgICAgICAgICAgIGxldCB0ZE5vZGU9dHJOb2RlLmZpbmQoJ3RkW2RhdGEtcG9pbnRlcj1cIicra2V5KydcIl0nKTtcclxuICAgICAgICAgICAgdGROb2RlLmFkZENsYXNzKCdiZy1kYW5nZXInKTtcclxuICAgICAgICAgICAgbGV0IGVycm9yVHh0Tm9kZT0kKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIpKS50ZXh0KGVycm9yQXJyYXkuZmllbGRzW2tleV0pLmFkZENsYXNzKCdmaWVsZEVycm9yJyk7XHJcbiAgICAgICAgICAgIHRkTm9kZS5hcHBlbmQoZXJyb3JUeHROb2RlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn07XHJcbiJdLCJtYXBwaW5ncyI6IkFBQUFBLE1BQU0sQ0FBQ0MsY0FBYyxHQUFDLFVBQVVDLE9BQU8sRUFBQ0MsZ0JBQWdCLEVBQUU7RUFDdEQ7QUFDSjtBQUNBO0FBQ0E7RUFDSSxJQUFJQyxJQUFJLEdBQUc7SUFDUEMsTUFBTSxFQUFFLEtBQUs7SUFDYkMsb0JBQW9CLEVBQUMsZ0JBQWdCO0lBQ3JDQyxXQUFXLEVBQUMsS0FBSztJQUNqQkMsR0FBRyxFQUFDO01BQ0FDLE1BQU0sRUFBQyxFQUFFO01BQ1RDLEtBQUssRUFBQyxFQUFFO01BQ1JDLG1CQUFtQixFQUFDLEVBQUU7TUFDdEJDLE9BQU8sRUFBQztJQUNaO0VBQ0osQ0FBQztFQUNELElBQUlDLFNBQVMsR0FBRyxDQUFDLENBQUM7RUFDbEIsSUFBSUMsSUFBSSxHQUFHLElBQUk7RUFDZixJQUFJQyxvQkFBb0IsR0FBQyxJQUFJOztFQUk3QjtBQUNKO0FBQ0E7RUFDSSxJQUFJLENBQUNDLFNBQVMsR0FBRyxVQUFVZCxPQUFPLEVBQUU7SUFDaENlLEtBQUssQ0FBQyxtQ0FBbUMsQ0FBQztJQUMxQ0MsQ0FBQyxDQUFDQyxNQUFNLENBQUNmLElBQUksRUFBRUYsT0FBTyxDQUFDO0VBQzNCLENBQUM7RUFFRCxJQUFJa0IsZUFBZSxHQUFDLElBQUk7RUFD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QztFQUVKLENBQUM7RUFDRCxJQUFJLENBQUNQLHdCQUF3QixHQUFDLFVBQVVXLFVBQVUsRUFBQ2pCLE1BQU0sRUFBQztJQUN0RCxJQUFHaUIsVUFBVSxDQUFDL0csTUFBTSxHQUFDLENBQUMsRUFBQztNQUNuQjtJQUNKO0lBQ0E7SUFDQW9FLE9BQU8sQ0FBQ0MsR0FBRyxDQUFDMEMsVUFBVSxDQUFDO0lBQ3ZCMUIsaUJBQWlCLEdBQUcsSUFBSTs7SUFFeEI7SUFDQSxJQUFHLE9BQU8wQixVQUFVLENBQUNDLE1BQU0sSUFBRyxXQUFXLEVBQUM7TUFDdEM7SUFDSjtJQUNBLElBQUlSLE1BQU0sR0FBQzdHLENBQUMsQ0FBQyxpQkFBaUIsR0FBQ21HLE1BQU0sR0FBQyxHQUFHLENBQUM7SUFDMUMsS0FBSyxJQUFJSCxHQUFHLElBQUlvQixVQUFVLENBQUNDLE1BQU0sRUFBRTtNQUMvQixJQUFJUCxNQUFNLEdBQUNELE1BQU0sQ0FBQ0UsSUFBSSxDQUFDLG1CQUFtQixHQUFDZixHQUFHLEdBQUMsSUFBSSxDQUFDO01BQ3BEYyxNQUFNLENBQUNsRyxRQUFRLENBQUMsV0FBVyxDQUFDO01BQzVCLElBQUkwRyxZQUFZLEdBQUN0SCxDQUFDLENBQUNpSCxRQUFRLENBQUNDLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDbEcsSUFBSSxDQUFDb0csVUFBVSxDQUFDQyxNQUFNLENBQUNyQixHQUFHLENBQUMsQ0FBQyxDQUFDcEYsUUFBUSxDQUFDLFlBQVksQ0FBQztNQUN0R2tHLE1BQU0sQ0FBQzlCLE1BQU0sQ0FBQ3NDLFlBQVksQ0FBQztJQUMvQjtFQUNKLENBQUM7QUFDTCxDQUFDIiwiaWdub3JlTGlzdCI6W10sImZpbGUiOiIuL3Jlc291cmNlcy9qcy9hZG1pbi9wcmljZUxpc3QuanMiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./resources/js/admin/priceList.js\n\n}"); +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(' Árlistát elmentettük.');\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}"); /***/ }, @@ -45,7 +45,7 @@ eval("{window.PriceListProfitCenterAdmin = function (options) {\n /*\r\n * Va \***************************************/ () { -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 /*\r\n * Constructor\r\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 /*\r\n * Variables accessible\r\n * in the class\r\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 /*\r\n * Constructor\r\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 /*\r\n root.container.find('.selectedDateText').text(dateText);\r\n $('.deliveryDatePlace').text(dateText.replaceAll('-', '.') + '.');\r\n root.container.find(' input[name=\"deliveryDate\"]').val(dateText);\r\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 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 /*\r\n let template=root.container.find('template[data-name=\"loading\"]').html()\r\n root.resultContainer.html(template);\r\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(\"Fájl hozzáadva!\", attachmentData.original_filename + \" fájl hozzáadva\", TOAST_STATUS.SUCCESS, 5000);\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 /*\r\n $(CSSSelectorForm + ' input[data-inputmask]').each(function () {\r\n let indexKey = $(this).attr('name');\r\n if (ajaxData.get(indexKey)) {\r\n ajaxData.set(indexKey, ajaxData.get(indexKey).replace(/[_ ]+$/g, \"\"));\r\n }\r\n });\r\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 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 /*\r\n if(typeof options['orderDirective']!='undefined'){\r\n orderDirective=options['orderDirective'];\r\n }\r\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 /*\r\n data: ajaxData,\r\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.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(\"Sikeres rögzítés!\", ajaxData.get('name') + \" nevű termék elmentve\", TOAST_STATUS.SUCCESS, 5000);\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,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJQcm9kdWN0IiwiX0RhdGFNb2RlbCIsIl9Qcm9kdWN0IiwiZGF0YSIsIm9wdGlvbnMiLCJfdGhpcyIsIl9jbGFzc0NhbGxDaGVjayIsIl9jYWxsU3VwZXIiLCJjb250YWN0IiwiY29uc29sZSIsImxvZyIsIl9pbmhlcml0cyIsIl9jcmVhdGVDbGFzcyIsIkRhdGFNb2RlbCIsIndpbmRvdyIsIlByb2R1Y3RBZG1pbiIsIlByb2R1Y3RJdGVtIiwiT3B0cyIsInRva2VuIiwiY29udGFpbmVyQ3NzU2VsZWN0b3IiLCJjb250YWluZXIiLCJyZXN1bHRDb250YWluZXJTZWxlY3RvciIsInJlc3VsdENvbnRhaW5lciIsInRlc3RNb2RlIiwiZmlsdGVycyIsIlVSTCIsImdldERhdGFUYWJsZUNvbnRlbnQiLCJpbmRleCIsInNob3ciLCJlZGl0IiwiY3JlYXRlIiwic3RvcmUiLCJ1cGRhdGUiLCJkZXN0cm95IiwiYXR0YWNoRmlsZSIsImRldGFjaEZpbGUiLCJkYXRhVGFibGUiLCJvcmRlckRpcmVjdGl2ZSIsIm9uQWZ0ZXJJbml0Vmlld0RldGFpbHMiLCJyb290IiwiY29udGFjdFBvcHVwV29ya2Zsb3ciLCJjb25zdHJ1Y3QiLCIkIiwiZXh0ZW5kIiwiQVBQIiwiZ2V0T3B0cyIsImRhdGF0YWJsZVJvd0FjdGlvbkJ1dHRvbkNsaWNrIiwiZXZlbnQiLCJkZWJ1ZyIsIm5vZGUiLCJjdXJyZW50VGFyZ2V0Iiwicm93IiwiZGF0YVRhYmxlQ1NTU2VsZWN0b3IiLCJEYXRhVGFibGUiLCJwYXJlbnRzIiwicm93RGF0YSIsImFjdGlvbk5hbWUiLCJjYXBpdGFsaXplIiwiZGF0YXRhYmxlUm93QWN0aW9uRWRpdCIsImFqYXhVcmwiLCJyZXBsYWNlIiwiaWQiLCJsb2FkTWFpbkNvbnRlbnQiLCJpbml0Vmlld0RldGFpbHMiLCJpbml0Vmlld0xpc3RPbGQiLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJ1bmRlZmluZWQiLCJjb2xOdW0iLCJzZXRPcHRzIiwiZGF0YXRhYmxlUm93QWN0aW9uQnV0dG9uQ2xpY2tDYWxsQmFjayIsImxhbmd1YWdlIiwidXJsIiwic2VydmVyU2lkZSIsIm9yZGVyYWJsZSIsInJlbmRlciIsInR5cGUiLCJidXR0b25zIiwiZGF0YXRhYmxlQWRkUm93RWRpdEJ1dHRvbiIsImxhdGluaXNlIiwiYXV0b1ByaW50IiwiZHJhd0NhbGxiYWNrIiwic2V0dGluZ3MiLCJkYXRhdGFibGVBZGRSb3dBY3Rpb24iLCJpbml0Vmlld0xpc3QiLCJmaW5kIiwic2VsZWN0MiIsInBsYWNlaG9sZGVyIiwiYWxsb3dDbGVhciIsImFqYXgiLCJnZXRQcm9kdWN0U2VhcmNoIiwiZGF0YVR5cGUiLCJwYXJhbXMiLCJ0ZXJtIiwicGFnZSIsInN1cHBsaWVySWQiLCJ2YWwiLCJjYWNoZSIsImRhdGVwaWNrZXIiLCJkYXRlRm9ybWF0Iiwib25TZWxlY3QiLCJkYXRlVGV4dCIsIm9iaiIsImlucHV0IiwiY2xpY2siLCJidXR0b24iLCJvZmYiLCJvbiIsImxvYWRpbmdSZXN1bHRDb250YWluZXIiLCJyZXF1ZXN0UHJvZHVjdHMiLCJzZXRWaXNpYmxlRmlsdGVycyIsImhpZGVSZXN1bHRDb250YWluZXIiLCJoaWRlIiwic2hvd1Jlc3VsdENvbnRhaW5lciIsImluaXQiLCJDU1NTZWxlY3RvckZvcm0iLCJwaWN0dXJlIiwicGljVXJsIiwiUHVibGljVXJsIiwiZmlsZW5hbWUiLCJhdHRyIiwic3BlY2lmaWNhdGlvbiIsImRvY1VybCIsImFkZEF0dGFjaG1lbnQiLCJGb3JtU2F2ZUJ1dHRvbiIsImNsaWNrU2F2ZUJ1dHRvbiIsImF0dGFjaG1lbnREYXRhIiwicm93TnVtIiwiZGF0ZVN0ciIsIkRhdGUiLCJ1cGRhdGVkX2F0IiwidG9Mb2NhbGVTdHJpbmciLCJkYXRlIiwibGluayIsInRlbXBsYXRlIiwiaHRtbCIsIk11c3RhY2hlIiwiYXBwZW5kIiwiVG9hc3QiLCJlbmFibGVUaW1lcnMiLCJvcmlnaW5hbF9maWxlbmFtZSIsIlRPQVNUX1NUQVRVUyIsIlNVQ0NFU1MiLCJ0eXBlSW5kZXgiLCJ0eXBlTmFtZSIsImMiLCJmb3JtRGF0YVRvRGF0YU9iamVjdEFQSUNhbGwiLCJhamF4RGF0YSIsIkZvcm1EYXRhIiwiZWFjaCIsImdldEFsbCIsImtleSIsInZhbHVlIiwiZ2V0QWpheERhdGFKc29uIiwiX2l0ZXJhdG9yIiwiX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIiLCJlbnRyaWVzIiwiX3N0ZXAiLCJzIiwibiIsImRvbmUiLCJwYWlyIiwiZXJyIiwiZSIsImYiLCJvYmplY3QiLCJmb3JFYWNoIiwiUmVmbGVjdCIsImhhcyIsIkFycmF5IiwiaXNBcnJheSIsInB1c2giLCJhamF4RGF0YUpzb24iLCJKU09OIiwic3RyaW5naWZ5IiwiYWpheE1ldGhvZCIsImQiLCJkcmF3IiwicHJvY2Vzc1Jlc3BvbnNlIiwicHJldmVudERlZmF1bHQiLCJjaGVja1ZhbGlkaXR5Iiwic3RvcFByb3BhZ2F0aW9uIiwiY29udGVudFR5cGUiLCJwcm9jZXNzRGF0YSIsImhlYWRlcnMiLCJzdWNjZXNzIiwiZ2V0Il0sInNvdXJjZXMiOlsid2VicGFjazovLy8uL3Jlc291cmNlcy9qcy9hZG1pbi9wcm9kdWN0LmpzPzliNTIiXSwic291cmNlc0NvbnRlbnQiOlsiaWYodHlwZW9mIFByb2R1Y3Q9PT0ndW5kZWZpbmVkJyl7XHJcbiAgICBjbGFzcyBQcm9kdWN0IGV4dGVuZHMgRGF0YU1vZGVse1xyXG5cclxuICAgICAgICAvKlxyXG4gICAgICAgICAqIENvbnN0cnVjdG9yXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgY29uc3RydWN0b3IgKGRhdGEsb3B0aW9ucykge1xyXG4gICAgICAgICAgICBzdXBlcihkYXRhLG9wdGlvbnMpXHJcbiAgICAgICAgICAgIGlmKHR5cGVvZiB0aGlzLmNvbnRhY3QgPT09XCJ1bmRlZmluZWRcIil7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvbnRhY3Q9W107XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc29sZS5sb2coJ1Byb2R1Y3QgY29uc3RydWN0b3IgY2FsbGVkJyk7XHJcbiAgICAgICAgfTtcclxuICAgIH07XHJcbiAgICB3aW5kb3cuUHJvZHVjdD1Qcm9kdWN0O1xyXG59XHJcbndpbmRvdy5Qcm9kdWN0QWRtaW49ZnVuY3Rpb24gKG9wdGlvbnMsUHJvZHVjdEl0ZW0pIHtcclxuICAgIC8qXHJcbiAgICAgKiBWYXJpYWJsZXMgYWNjZXNzaWJsZVxyXG4gICAgICogaW4gdGhlIGNsYXNzXHJcbiAgICAgKi9cclxuICAgIGxldCBPcHRzID0ge1xyXG4gICAgICAgIHRva2VuOiBudWxsLFxyXG4gICAgICAgIGNvbnRhaW5lckNzc1NlbGVjdG9yOiAnLmNvbnRhaW5lclByb2R1Y3QnLFxyXG4gICAgICAgIGNvbnRhaW5lcjpudWxsLFxyXG4gICAgICAgIHJlc3VsdENvbnRhaW5lclNlbGVjdG9yOicuY29udGFpbmVyUHJvZHVjdCAuY29udGFpbmVyUmVzdWx0JyxcclxuICAgICAgICByZXN1bHRDb250YWluZXI6bnVsbCxcclxuXHJcbiAgICAgICAgdGVzdE1vZGU6IGZhbHNlLFxyXG4gICAgICAgIGZpbHRlcnM6e1xyXG4gICAgICAgICAgICBQcm9kdWN0Ont9LFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgVVJMOiB7XHJcbiAgICAgICAgICAgIGdldERhdGFUYWJsZUNvbnRlbnQ6ICcnLFxyXG4gICAgICAgICAgICBpbmRleDogJycsXHJcbiAgICAgICAgICAgIHNob3c6ICcnLFxyXG4gICAgICAgICAgICBlZGl0OiAnJyxcclxuICAgICAgICAgICAgY3JlYXRlOiAnJyxcclxuICAgICAgICAgICAgc3RvcmU6ICcnLFxyXG4gICAgICAgICAgICB1cGRhdGU6ICcnLFxyXG4gICAgICAgICAgICBkZXN0cm95OiAnJyxcclxuICAgICAgICAgICAgYXR0YWNoRmlsZTogJycsXHJcbiAgICAgICAgICAgIGRldGFjaEZpbGU6ICcnLFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZGF0YVRhYmxlOiB7XHJcbiAgICAgICAgICAgIG9yZGVyRGlyZWN0aXZlOiBbMSwgJ2FzYyddLFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgb25BZnRlckluaXRWaWV3RGV0YWlsczogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICBsZXQgUHJvZHVjdCA9IHt9O1xyXG4gICAgbGV0IHJvb3QgPSB0aGlzO1xyXG4gICAgbGV0IGNvbnRhY3RQb3B1cFdvcmtmbG93ID0gJ25ldyc7XHJcbiAgICBsZXQgZGF0YVRhYmxlPW51bGw7XHJcbiAgICAvKlxyXG4gICAgICogQ29uc3RydWN0b3JcclxuICAgICAqL1xyXG4gICAgdGhpcy5jb25zdHJ1Y3QgPSBmdW5jdGlvbiAob3B0aW9ucywgUHJvZHVjdEl0ZW0pIHtcclxuICAgICAgICBjb25zb2xlLmxvZygnUHJvZHVjdEFkbWluIGNvbnN0cnVjdG9yIGNhbGxlZCcpO1xyXG4gICAgICAgICQuZXh0ZW5kKE9wdHMsIG9wdGlvbnMpO1xyXG4gICAgICAgIGlmICghUHJvZHVjdEl0ZW0pIHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coJ1Byb2R1Y3QgbGV0cmUga2VsbGV0IGhvem5pICcpO1xyXG4gICAgICAgICAgICBpZiAoIUFQUC5Qcm9kdWN0KSB7XHJcbiAgICAgICAgICAgICAgICBBUFAuUHJvZHVjdCA9IG5ldyB3aW5kb3cuUHJvZHVjdCgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJvb3QuUHJvZHVjdCA9IEFQUC5Qcm9kdWN0O1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICB0aGlzLmdldE9wdHMgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIE9wdHM7XHJcbiAgICB9XHJcbiAgICB0aGlzLmRhdGF0YWJsZVJvd0FjdGlvbkJ1dHRvbkNsaWNrPWZ1bmN0aW9uIChldmVudCl7XHJcbiAgICAgICAgZGVidWcoJ2RhdGF0YWJsZVJvd0FjdGlvbkJ1dHRvbkNsaWNrJyk7XHJcbiAgICAgICAgbGV0IG5vZGU9JChldmVudFswXS5jdXJyZW50VGFyZ2V0KTtcclxuICAgICAgICBsZXQgcm93PSQoZGF0YVRhYmxlQ1NTU2VsZWN0b3IpLkRhdGFUYWJsZSgpLnJvdyhub2RlLnBhcmVudHMoJ3RyJykpO1xyXG4gICAgICAgIGxldCByb3dEYXRhPXJvdy5kYXRhKCk7XHJcbiAgICAgICAgbGV0IGFjdGlvbk5hbWU9J2RhdGF0YWJsZVJvd0FjdGlvbicrbm9kZS5kYXRhKCdidXR0b250eXBlJykuY2FwaXRhbGl6ZSgpO1xyXG4gICAgICAgIGlmICh0eXBlb2Ygcm9vdFthY3Rpb25OYW1lXSA9PT0gXCJmdW5jdGlvblwiKSB7XHJcbiAgICAgICAgICAgIHJldHVybiByb290W2FjdGlvbk5hbWVdKHJvd0RhdGEsbm9kZSlcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICB0aGlzLmRhdGF0YWJsZVJvd0FjdGlvbkVkaXQ9ZnVuY3Rpb24gKHJvd0RhdGEsbm9kZSkge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCdkYXRhdGFibGVSb3dBY3Rpb25FZGl0IENhbGxlZCcpO1xyXG4gICAgICAgIC8vT3B0cy5vbkFmdGVySW5pdFZpZXdEZXRhaWxzPXJvb3QuYXV0b2ZpbGxEZXRhaWxzO1xyXG4gICAgICAgIGxldCBhamF4VXJsPU9wdHMuVVJMLmVkaXQucmVwbGFjZSgnJWlkJScscm93RGF0YS5pZCk7XHJcbiAgICAgICAgQVBQLmxvYWRNYWluQ29udGVudChhamF4VXJsLHJvb3QuaW5pdFZpZXdEZXRhaWxzKTtcclxuICAgICAgICBjb25zb2xlLmxvZygnZGF0YXRhYmxlUm93QWN0aW9uRWRpdCBFbmQnKTtcclxuICAgIH1cclxuICAgIHRoaXMuaW5pdFZpZXdMaXN0T2xkID0gZnVuY3Rpb24gKG9wdGlvbnM9e30pIHtcclxuICAgICAgICBkZWJ1ZygnbGlzdHZpZXcgaW5pY2lhbGl6YXRpb24nKTtcclxuICAgICAgICBkYXRhVGFibGVDU1NTZWxlY3Rvcj1PcHRzLmNvbnRhaW5lckNzc1NlbGVjdG9yKycgLmRhdGFUYWJsZSc7IC8vXHJcblxyXG4gICAgICAgIGxldCBjb2xOdW09JChkYXRhVGFibGVDU1NTZWxlY3RvcisnIHRoZWFkIHRoJykubGVuZ3RoOyAvL2J1dHRvbnMgaW5zZXJ0IHBvc2l0aW9uIG5lZWRcclxuICAgICAgICBBUFAuc2V0T3B0cyh7XHJcbiAgICAgICAgICAgIGRhdGF0YWJsZVJvd0FjdGlvbkJ1dHRvbkNsaWNrQ2FsbEJhY2s6cm9vdC5kYXRhdGFibGVSb3dBY3Rpb25CdXR0b25DbGljayxcclxuICAgICAgICB9KVxyXG4gICAgICAgIGxldCBvcmRlckRpcmVjdGl2ZT1PcHRzLmRhdGFUYWJsZS5vcmRlckRpcmVjdGl2ZTtcclxuICAgICAgICBpZih0eXBlb2Ygb3B0aW9uc1snb3JkZXJEaXJlY3RpdmUnXSE9J3VuZGVmaW5lZCcpe1xyXG4gICAgICAgICAgICBvcmRlckRpcmVjdGl2ZT1vcHRpb25zWydvcmRlckRpcmVjdGl2ZSddO1xyXG4gICAgICAgIH1cclxuICAgICAgICAkKGRhdGFUYWJsZUNTU1NlbGVjdG9yKS5EYXRhVGFibGUoIHtcclxuICAgICAgICAgICAgbGFuZ3VhZ2U6IHtcclxuICAgICAgICAgICAgICAgIHVybDogJy8vY2RuLmRhdGF0YWJsZXMubmV0L3BsdWctaW5zLzEuMTAuMjQvaTE4bi9IdW5nYXJpYW4uanNvbidcclxuICAgICAgICAgICAgfSxcclxuXHJcbiAgICAgICAgICAgIC8vXCJhamF4XCI6IFwie3thc3NldCgnZXhhcG1sZTIuanNvbicpfX1cIixcclxuICAgICAgICAgICAgXCJhamF4XCI6IE9wdHMuVVJMLmdldERhdGFUYWJsZUNvbnRlbnQsXHJcbiAgICAgICAgICAgIHNlcnZlclNpZGU6IHRydWUsXHJcbiAgICAgICAgICAgIFwiY29sdW1uRGVmc1wiOiBbXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgXCJ0YXJnZXRzXCI6IGNvbE51bS0xLFxyXG4gICAgICAgICAgICAgICAgICAgIG9yZGVyYWJsZTogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgXCJyZW5kZXJcIjogZnVuY3Rpb24gKCBkYXRhLCB0eXBlLCByb3cgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnV0dG9ucz1BUFAuZGF0YXRhYmxlQWRkUm93RWRpdEJ1dHRvbigwLGFyZ3VtZW50cyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBidXR0b25zO1xyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIFwidGFyZ2V0c1wiOiAxLFxyXG4gICAgICAgICAgICAgICAgICAgIFwicmVuZGVyXCI6IGZ1bmN0aW9uICggZGF0YSwgdHlwZSwgcm93ICkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHlwZSA9PT0gXCJzb3J0XCIgPyBkYXRhLmxhdGluaXNlKCkgOiBkYXRhO1xyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgLy97IFwidmlzaWJsZVwiOiBmYWxzZSwgIFwidGFyZ2V0c1wiOiBbIDAgXSB9XHJcbiAgICAgICAgICAgIF0sXHJcbiAgICAgICAgICAgIGJ1dHRvbnM6e1xyXG4gICAgICAgICAgICAgICAgYnV0dG9uczogW1xyXG4gICAgICAgICAgICAgICAgICAgICdleGNlbCcsJ3BkZicsXHJcbiAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBleHRlbmQ6ICdwcmludCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vdGV4dDogJ1ByaW50IGN1cnJlbnQgcGFnZScsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICd0aXRsZSc6ICd0aXRsZSBjdXN0b20gdGV4dCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICdtZXNzYWdlVG9wJzogJ01lc3NhZ2UgT24gVG9wJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXV0b1ByaW50OiB0cnVlXHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIF1cclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgXCJjb2x1bW5zXCI6IFtcclxuICAgICAgICAgICAgICAgIHsgXCJkYXRhXCI6IFwiaWRcIn0sXHJcbiAgICAgICAgICAgICAgICB7IFwiZGF0YVwiOiBcIm5hbWVcIiB9LFxyXG4gICAgICAgICAgICAgICAgeyBcImRhdGFcIjogXCJob29yZXljYUlkXCIgfSxcclxuICAgICAgICAgICAgICAgIHtcImRhdGFcIjogXCJwcm9kdWN0R3JvdXBcIn0sXHJcbiAgICAgICAgICAgICAgICB7XCJkYXRhXCI6IFwic3VwcGxpZXJOYW1lXCJ9LFxyXG4gICAgICAgICAgICAgICAgeyBcImRhdGFcIjogXCJwcmljZVwiIH0sXHJcbiAgICAgICAgICAgICAgICB7IFwiZGF0YVwiOiBcImNyZWF0ZWRfYXRcIiB9LFxyXG4gICAgICAgICAgICAgICAgbnVsbCxcclxuICAgICAgICAgICAgXSxcclxuICAgICAgICAgICAgXCJvcmRlclwiOiBvcmRlckRpcmVjdGl2ZSxcclxuICAgICAgICAgICAgXCJzdGF0ZVNhdmVcIjogdHJ1ZSxcclxuICAgICAgICAgICAgXCJkcmF3Q2FsbGJhY2tcIjogZnVuY3Rpb24oIHNldHRpbmdzICkge1xyXG4gICAgICAgICAgICAgICAgQVBQLmRhdGF0YWJsZUFkZFJvd0FjdGlvbihkYXRhVGFibGVDU1NTZWxlY3Rvcik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9ICk7XHJcbiAgICAgICAgZGVidWcoJ2xpc3R2aWV3IGVuZCcpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuaW5pdFZpZXdMaXN0PWZ1bmN0aW9uIChvcHRpb25zPXt9KSB7XHJcbiAgICAgICAgZGVidWcoJ2luaXRWaWV3U2VhcmNoIGluaWNpYWxpemF0aW9uIDEnKTtcclxuXHJcbiAgICAgICAgcm9vdC5jb250YWluZXIuZmluZCgnc2VsZWN0LnN1cHBsaWVyU2VsZWN0LCBzZWxlY3QucHJvZml0Q2VudGVyU2VsZWN0LCBzZWxlY3QucHJvZHVjdEdyb3VwU2VsZWN0LCBzZWxlY3QucHJvZHVjZXJTZWxlY3QsIHNlbGVjdC5ob29yZXljYU5hbWVzU2VsZWN0LCBzZWxlY3Quc3BlY2lhbE9mZmVyU2VsZWN0Jykuc2VsZWN0MigpO1xyXG4gICAgICAgIHJvb3QuY29udGFpbmVyLmZpbmQoJ3NlbGVjdC5wcm9kdWN0U2VsZWN0Jykuc2VsZWN0Mih7XHJcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyOiAnLi4uJyxcclxuICAgICAgICAgICAgYWxsb3dDbGVhcjogdHJ1ZSxcclxuICAgICAgICAgICAgYWpheDoge1xyXG4gICAgICAgICAgICAgICAgdXJsOiBPcHRzLlVSTC5nZXRQcm9kdWN0U2VhcmNoLFxyXG4gICAgICAgICAgICAgICAgZGF0YVR5cGU6ICdqc29uJyxcclxuICAgICAgICAgICAgICAgIGRhdGE6IGZ1bmN0aW9uKHBhcmFtcykge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRlcm06IHBhcmFtcy50ZXJtIHx8ICcnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwYWdlOiBwYXJhbXMucGFnZSB8fCAxLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdXBwbGllcklkOiByb290LmNvbnRhaW5lci5maW5kKCdzZWxlY3Quc3VwcGxpZXJTZWxlY3QnKS52YWwoKSxcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgY2FjaGU6IHRydWVcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJvb3QuY29udGFpbmVyLmZpbmQoJy5kYXRlUGlja2VyRnJvbSwgLmRhdGVQaWNrZXJUbycpLmRhdGVwaWNrZXIoe1xyXG4gICAgICAgICAgICBkYXRlRm9ybWF0OiAneXktbW0tZGQnLFxyXG5cclxuICAgICAgICAgICAgb25TZWxlY3Q6IGZ1bmN0aW9uIChkYXRlVGV4dCxvYmopIHtcclxuICAgICAgICAgICAgICAgIGRlYnVnKHRoaXMpO1xyXG4gICAgICAgICAgICAgICAgZGVidWcob2JqLmlucHV0KTtcclxuICAgICAgICAgICAgICAgIC8qXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb290LmNvbnRhaW5lci5maW5kKCcuc2VsZWN0ZWREYXRlVGV4dCcpLnRleHQoZGF0ZVRleHQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCgnLmRlbGl2ZXJ5RGF0ZVBsYWNlJykudGV4dChkYXRlVGV4dC5yZXBsYWNlQWxsKCctJywgJy4nKSArICcuJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb290LmNvbnRhaW5lci5maW5kKCcgaW5wdXRbbmFtZT1cImRlbGl2ZXJ5RGF0ZVwiXScpLnZhbChkYXRlVGV4dCk7XHJcbiAgICAgICAgICAgICAgICAqL1xyXG4gICAgICAgICAgICAgICAgLy9yb290LmNoYW5nZVByaWNlTGlzdFByb2ZpdENlbnRlclBhcmFtZXRlcihudWxsLCQob2JqLmlucHV0KSk7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcm9vdC5jb250YWluZXIuZmluZCgnLmRhdGVQaWNrZXJDbGljaycpLmNsaWNrKGZ1bmN0aW9uKCl7XHJcbiAgICAgICAgICAgIGRlYnVnKCQodGhpcykuZGF0YSgnYWN0aW9uJykpO1xyXG4gICAgICAgICAgICByb290LmNvbnRhaW5lci5maW5kKCdpbnB1dFtuYW1lPVwiJyskKHRoaXMpLmRhdGEoJ2FjdGlvbicpKydcIl0nKS5kYXRlcGlja2VyKCdzaG93Jyk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgbGV0IGJ1dHRvbj1yb290LmNvbnRhaW5lci5maW5kKCcuRm9ybVNlbmRCdXR0b24nKTtcclxuICAgICAgICBidXR0b24ub2ZmKCdjbGljaycpO1xyXG4gICAgICAgIGJ1dHRvbi5vbignY2xpY2snLGZ1bmN0aW9uICgpe1xyXG4gICAgICAgICAgICBkZWJ1ZyAoJ0Zvcm1TZW5kQnV0dG9uIGNsaWNrJyk7XHJcbiAgICAgICAgICAgIHJvb3QubG9hZGluZ1Jlc3VsdENvbnRhaW5lcigpO1xyXG4gICAgICAgICAgICByb290LnJlcXVlc3RQcm9kdWN0cygpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJvb3Quc2V0VmlzaWJsZUZpbHRlcnMoJ1Byb2R1Y3QnKTtcclxuXHJcbiAgICAgICAgZGVidWcoJ2luaXRWaWV3U2VhcmNoIGVuZCcpO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICB0aGlzLmxvYWRpbmdSZXN1bHRDb250YWluZXI9ZnVuY3Rpb24gKCl7XHJcbiAgICAgICAgZGVidWcoJ2NsZWFyUmVzdWx0Q29udGFpbmVyJyk7XHJcbiAgICAgICAgZGVidWcocm9vdC5yZXN1bHRDb250YWluZXIpO1xyXG4gICAgICAgIHJvb3QuaGlkZVJlc3VsdENvbnRhaW5lcigpO1xyXG4gICAgICAgIHJvb3QuY29udGFpbmVyLmZpbmQoJy5jb250YWluZXJMb2FkaW5nJykuc2hvdygpO1xyXG4gICAgICAgIC8qXHJcbiAgICAgICAgbGV0IHRlbXBsYXRlPXJvb3QuY29udGFpbmVyLmZpbmQoJ3RlbXBsYXRlW2RhdGEtbmFtZT1cImxvYWRpbmdcIl0nKS5odG1sKClcclxuICAgICAgICByb290LnJlc3VsdENvbnRhaW5lci5odG1sKHRlbXBsYXRlKTtcclxuXHJcbiAgICAgICAgICovXHJcbiAgICB9XHJcbiAgICB0aGlzLmhpZGVSZXN1bHRDb250YWluZXI9ZnVuY3Rpb24gKCl7XHJcbiAgICAgICAgZGVidWcoJ2hpZGUgY29udGFpbmVyUmVzdWx0Jyk7XHJcbiAgICAgICAgZGVidWcocm9vdC5yZXN1bHRDb250YWluZXIpO1xyXG4gICAgICAgIHJvb3QucmVzdWx0Q29udGFpbmVyLmhpZGUoKTtcclxuICAgIH1cclxuICAgIHRoaXMuc2hvd1Jlc3VsdENvbnRhaW5lcj1mdW5jdGlvbiAoKXtcclxuICAgICAgICByb290LmNvbnRhaW5lci5maW5kKCcuY29udGFpbmVyTG9hZGluZycpLmhpZGUoKTtcclxuICAgICAgICByb290LnJlc3VsdENvbnRhaW5lci5zaG93KCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5pbml0PWZ1bmN0aW9uIChvcHRpb25zLFByb2R1Y3RJdGVtKXtcclxuICAgICAgICBjb25zb2xlLmxvZygnUHJvZHVjdEFkbWluIGluaXQnKTtcclxuICAgICAgICAkLmV4dGVuZChPcHRzLCBvcHRpb25zKTtcclxuXHJcbiAgICAgICAgaWYoT3B0cy50ZXN0TW9kZSl7XHJcbiAgICAgICAgICAgIHJldHVybiByb290LnRlc3RNb2RlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmKFByb2R1Y3RJdGVtKXtcclxuICAgICAgICAgICAgcm9vdC5Qcm9kdWN0PVByb2R1Y3RJdGVtXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJvb3QuZGF0YVRhYmxlPW51bGw7XHJcbiAgICAgICAgcm9vdC5jb250YWluZXI9JChPcHRzLmNvbnRhaW5lckNzc1NlbGVjdG9yKTtcclxuICAgICAgICByb290LnJlc3VsdENvbnRhaW5lcj0kKE9wdHMucmVzdWx0Q29udGFpbmVyU2VsZWN0b3IpO1xyXG4gICAgICAgIHJvb3QuaW5pdFZpZXdMaXN0KCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmluaXRWaWV3RGV0YWlscz1mdW5jdGlvbiAob3B0aW9ucyxQcm9kdWN0SXRlbSl7XHJcbiAgICAgICAgZGVidWcoJyoqY2FsbCBpbml0Vmlld0RldGFpbHMgJyk7XHJcbiAgICAgICAgbGV0IENTU1NlbGVjdG9yRm9ybT1PcHRzLmNvbnRhaW5lckNzc1NlbGVjdG9yKycgLnByb2R1Y3RGb3JtJztcclxuICAgICAgICBpZihyb290LlByb2R1Y3QucGljdHVyZSl7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCcqKioqKi8vLy8vLy8vLy8vLy8vLy8vLyoqKioqKioqKioqKioqKionKTtcclxuICAgICAgICAgICAgY29uc29sZS5sb2cocm9vdC5Qcm9kdWN0LnBpY3R1cmUpO1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhDU1NTZWxlY3RvckZvcm0pO1xyXG4gICAgICAgICAgICBsZXQgcGljVXJsPXJvb3QuUHJvZHVjdC5waWN0dXJlLlB1YmxpY1VybCsnLycrcm9vdC5Qcm9kdWN0LnBpY3R1cmUuZmlsZW5hbWU7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKHBpY1VybCk7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCQoQ1NTU2VsZWN0b3JGb3JtKycgaW1nLmltYWdlUHJvZHVjdCcpKTtcclxuICAgICAgICAgICAgJChDU1NTZWxlY3RvckZvcm0rJyBpbWcuaW1hZ2VQcm9kdWN0JykuYXR0cignc3JjJyxwaWNVcmwpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZihyb290LlByb2R1Y3Quc3BlY2lmaWNhdGlvbil7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCcqKioqKi8vLy8vLy8vLy8vLy8vLy8vLyoqKioqKioqKioqKioqKionKTtcclxuICAgICAgICAgICAgY29uc29sZS5sb2cocm9vdC5Qcm9kdWN0LnNwZWNpZmljYXRpb24pO1xyXG4gICAgICAgICAgICBsZXQgZG9jVXJsPXJvb3QuUHJvZHVjdC5zcGVjaWZpY2F0aW9uLlB1YmxpY1VybCsnLycrcm9vdC5Qcm9kdWN0LnNwZWNpZmljYXRpb24uZmlsZW5hbWU7XHJcbiAgICAgICAgICAgIHJvb3QuYWRkQXR0YWNobWVudChyb290LlByb2R1Y3Quc3BlY2lmaWNhdGlvbik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCBGb3JtU2F2ZUJ1dHRvbj0kKENTU1NlbGVjdG9yRm9ybSsnIGJ1dHRvbi5Gb3JtU2F2ZUJ1dHRvbicpO1xyXG4gICAgICAgIEZvcm1TYXZlQnV0dG9uLm9mZignY2xpY2snKTtcclxuICAgICAgICBGb3JtU2F2ZUJ1dHRvbi5vbignY2xpY2snLHJvb3QuY2xpY2tTYXZlQnV0dG9uKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5hZGRBdHRhY2htZW50PWZ1bmN0aW9uIChhdHRhY2htZW50RGF0YSl7XHJcbiAgICAgICAgY29uc29sZS5sb2coYXR0YWNobWVudERhdGEpO1xyXG4gICAgICAgIGxldCBDU1NTZWxlY3RvckZvcm09T3B0cy5jb250YWluZXJDc3NTZWxlY3RvcisnIC5wcm9kdWN0Rm9ybSc7XHJcbiAgICAgICAgLy9yb290LlN1cHBsaWVyLmF0dGFjaG1lbnQucHVzaChhdHRhY2htZW50RGF0YSk7XHJcbiAgICAgICAgLy9hdHRhY2htZW50RGF0YS5yb3dOdW09cm9vdC5TdXBwbGllci5hdHRhY2htZW50Lmxlbmd0aDtcclxuICAgICAgICBhdHRhY2htZW50RGF0YS5yb3dOdW09MTtcclxuICAgICAgICBsZXQgZGF0ZVN0cj1uZXcgRGF0ZShhdHRhY2htZW50RGF0YS51cGRhdGVkX2F0KTtcclxuICAgICAgICBkYXRlU3RyPWRhdGVTdHIudG9Mb2NhbGVTdHJpbmcoJ2h1LUhVJywge30pO1xyXG4gICAgICAgIGF0dGFjaG1lbnREYXRhLmRhdGU9ZGF0ZVN0cjtcclxuICAgICAgICBhdHRhY2htZW50RGF0YS5saW5rPWF0dGFjaG1lbnREYXRhLlB1YmxpY1VybCsnLycrYXR0YWNobWVudERhdGEuZmlsZW5hbWU7XHJcbiAgICAgICAgbGV0IHRlbXBsYXRlPSQoJ3RlbXBsYXRlW2RhdGEtbmFtZT1cInByb2R1Y3RBdHRhY2htZW50VGFibGVSb3dcIl0nKS5odG1sKClcclxuICAgICAgICBsZXQgcmVuZGVyPU11c3RhY2hlLnJlbmRlcih0ZW1wbGF0ZSxhdHRhY2htZW50RGF0YSk7XHJcbiAgICAgICAgJChDU1NTZWxlY3RvckZvcm0rJyAuYXR0YWNobWVudFRhYmxlIHRib2R5JykuYXBwZW5kKHJlbmRlcik7XHJcbiAgICAgICAgLy9yb290LmJpbmRDb250YWN0Q2xpY2tBY3Rpb24oKTtcclxuICAgICAgICBUb2FzdC5lbmFibGVUaW1lcnMoZmFsc2UpO1xyXG4gICAgICAgIFRvYXN0LmNyZWF0ZShcIkbDoWpsIGhvenrDoWFkdmEhXCIsIGF0dGFjaG1lbnREYXRhLm9yaWdpbmFsX2ZpbGVuYW1lK1wiIGbDoWpsIGhvenrDoWFkdmFcIiwgVE9BU1RfU1RBVFVTLlNVQ0NFU1MsNTAwMCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5zZXRWaXNpYmxlRmlsdGVycz1mdW5jdGlvbiAodHlwZSl7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ3NldFZpc2libGVGaWx0ZXJzJyk7XHJcbiAgICAgICAgY29uc29sZS5sb2coT3B0cy5maWx0ZXJzW3R5cGVdKTtcclxuICAgICAgICBjb25zb2xlLmxvZyhyb290LmNvbnRhaW5lcik7XHJcbiAgICAgICAgJChyb290LmNvbnRhaW5lcikuZmluZCgnZGl2W2NsYXNzKj1cImZpbHRlclwiXScpLmhpZGUoKVxyXG4gICAgICAgIGZvciAoY29uc3QgdHlwZUluZGV4IGluIE9wdHMuZmlsdGVyc1t0eXBlXSkge1xyXG4gICAgICAgICAgICBjb25zdCB0eXBlTmFtZT1PcHRzLmZpbHRlcnNbdHlwZV1bdHlwZUluZGV4XTtcclxuICAgICAgICAgICAgZGVidWcodHlwZU5hbWUpO1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZygkKHJvb3QuY29udGFpbmVyKS5maW5kKCcuZmlsdGVyXycrdHlwZU5hbWUpKTtcclxuICAgICAgICAgICAgJChyb290LmNvbnRhaW5lcikuZmluZCgnLmZpbHRlcl8nK3R5cGVOYW1lKS5zaG93KCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgdGhpcy5jPWZ1bmN0aW9uIChDU1NTZWxlY3RvckZvcm0pe1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCdjIGNhbGxlZCcpO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKENTU1NlbGVjdG9yRm9ybSk7XHJcbiAgICAgICAgY29uc29sZS5sb2cocm9vdC5jb250YWluZXIpO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKHJvb3QuY29udGFpbmVyLmZpbmQoJ2Zvcm0nKSk7XHJcbiAgICAgICAgY29uc29sZS5sb2cocm9vdC5jb250YWluZXIuZmluZChDU1NTZWxlY3RvckZvcm0pKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5mb3JtRGF0YVRvRGF0YU9iamVjdEFQSUNhbGwgPSBmdW5jdGlvbiAoQ1NTU2VsZWN0b3JGb3JtKSB7XHJcblxyXG4gICAgICAgIGNvbnNvbGUubG9nKENTU1NlbGVjdG9yRm9ybSk7XHJcbiAgICAgICAgY29uc29sZS5sb2cocm9vdC5jb250YWluZXIpO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKHJvb3QuY29udGFpbmVyLmZpbmQoQ1NTU2VsZWN0b3JGb3JtKSk7XHJcbiAgICAgICAgY29uc29sZS5sb2cocm9vdC5jb250YWluZXIuZmluZCgnZm9ybScpKTtcclxuICAgICAgICBjb25zb2xlLmxvZyhyb290LmNvbnRhaW5lci5maW5kKCdmb3JtJytDU1NTZWxlY3RvckZvcm0pWzBdKTtcclxuICAgICAgICAvL3JldHVybjtcclxuICAgICAgICBsZXQgYWpheERhdGEgPSBuZXcgRm9ybURhdGEocm9vdC5jb250YWluZXIuZmluZCgnZm9ybScrQ1NTU2VsZWN0b3JGb3JtKVswXSk7XHJcbiAgICAgICAgJC5lYWNoKGFqYXhEYXRhLmdldEFsbCgnc3VwcGxpZXInKSwgZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcclxuICAgICAgICAgICAgYWpheERhdGEuYXBwZW5kKCdzdXBwbGllcnNbXScsIHZhbHVlKTtcclxuICAgICAgICB9KVxyXG4gICAgICAgIGFqYXhEYXRhLmRlbGV0ZSgnc3VwcGxpZXInKTtcclxuICAgICAgICAkLmVhY2goYWpheERhdGEuZ2V0QWxsKCdwcm9maXRDZW50ZXInKSwgZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcclxuICAgICAgICAgICAgYWpheERhdGEuYXBwZW5kKCdwcm9maXRDZW50ZXJzW10nLCB2YWx1ZSk7XHJcbiAgICAgICAgfSlcclxuICAgICAgICBhamF4RGF0YS5kZWxldGUoJ3Byb2ZpdENlbnRlcicpO1xyXG4gICAgICAgICQuZWFjaChhamF4RGF0YS5nZXRBbGwoJ3Byb2R1Y3RHcm91cCcpLCBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xyXG4gICAgICAgICAgICBhamF4RGF0YS5hcHBlbmQoJ3Byb2R1Y3RHcm91cHNbXScsIHZhbHVlKTtcclxuICAgICAgICB9KVxyXG4gICAgICAgIGFqYXhEYXRhLmRlbGV0ZSgncHJvZHVjdEdyb3VwJyk7XHJcbiAgICAgICAgJC5lYWNoKGFqYXhEYXRhLmdldEFsbCgncHJvZHVjdCcpLCBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xyXG4gICAgICAgICAgICBhamF4RGF0YS5hcHBlbmQoJ3Byb2R1Y3RzW10nLCB2YWx1ZSk7XHJcbiAgICAgICAgfSlcclxuICAgICAgICBhamF4RGF0YS5kZWxldGUoJ3Byb2R1Y3QnKTtcclxuICAgICAgICAkLmVhY2goYWpheERhdGEuZ2V0QWxsKCdwcm9kdWNlcicpLCBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xyXG4gICAgICAgICAgICBhamF4RGF0YS5hcHBlbmQoJ3Byb2R1Y2Vyc1tdJywgdmFsdWUpO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgYWpheERhdGEuZGVsZXRlKCdwcm9kdWNlcicpO1xyXG4gICAgICAgICQuZWFjaChhamF4RGF0YS5nZXRBbGwoJ2hvb3JleWNhTmFtZScpLCBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xyXG4gICAgICAgICAgICBhamF4RGF0YS5hcHBlbmQoJ2hvb3JleWNhTmFtZXNbXScsIHZhbHVlKTtcclxuICAgICAgICB9KVxyXG4gICAgICAgIGFqYXhEYXRhLmRlbGV0ZSgnaG9vcmV5Y2FOYW1lJyk7XHJcblxyXG4gICAgICAgIC8vYWpheERhdGEuYXBwZW5kKCdfdG9rZW4nLCByb290LmNvbnRhaW5lci5maW5kKCdpbnB1dFtuYW1lPV90b2tlbl0nKS52YWwoKSk7XHJcblxyXG4gICAgICAgIC8qXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICQoQ1NTU2VsZWN0b3JGb3JtICsgJyBpbnB1dFtkYXRhLWlucHV0bWFza10nKS5lYWNoKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBpbmRleEtleSA9ICQodGhpcykuYXR0cignbmFtZScpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFqYXhEYXRhLmdldChpbmRleEtleSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhamF4RGF0YS5zZXQoaW5kZXhLZXksIGFqYXhEYXRhLmdldChpbmRleEtleSkucmVwbGFjZSgvW18gXSskL2csIFwiXCIpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgKi9cclxuICAgICAgICByZXR1cm4gYWpheERhdGE7XHJcblxyXG4gICAgfVxyXG4gICAgdGhpcy5nZXRBamF4RGF0YUpzb249ZnVuY3Rpb24oKXtcclxuXHJcbiAgICAgICAgbGV0IGFqYXhEYXRhPXJvb3QuZm9ybURhdGFUb0RhdGFPYmplY3RBUElDYWxsKCcuUHJvZHVjdExpc3RGb3JtJyk7XHJcbiAgICAgICAgY29uc29sZS5sb2coJz09PT09PT09PT09PT09PT09PT09PT0nKTtcclxuICAgICAgICBmb3IgKGxldCBwYWlyIG9mIGFqYXhEYXRhLmVudHJpZXMoKSkge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhwYWlyWzBdKyAnLCAnICsgcGFpclsxXSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgb2JqZWN0ID0ge307XHJcbiAgICAgICAgYWpheERhdGEuZm9yRWFjaCgodmFsdWUsIGtleSkgPT4ge1xyXG4gICAgICAgICAgICAvLyBSZWZsZWN0LmhhcyBpbiBmYXZvciBvZjogb2JqZWN0Lmhhc093blByb3BlcnR5KGtleSlcclxuICAgICAgICAgICAgaWYoIVJlZmxlY3QuaGFzKG9iamVjdCwga2V5KSl7XHJcbiAgICAgICAgICAgICAgICBvYmplY3Rba2V5XSA9IHZhbHVlO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmKCFBcnJheS5pc0FycmF5KG9iamVjdFtrZXldKSl7XHJcbiAgICAgICAgICAgICAgICBvYmplY3Rba2V5XSA9IFtvYmplY3Rba2V5XV07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgb2JqZWN0W2tleV0ucHVzaCh2YWx1ZSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgbGV0IGFqYXhEYXRhSnNvbiA9IEpTT04uc3RyaW5naWZ5KG9iamVjdCk7XHJcbiAgICAgICAgcmV0dXJuIGFqYXhEYXRhSnNvbjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnJlcXVlc3RQcm9kdWN0cz1mdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgbGV0IGFqYXhVcmw9T3B0cy5VUkwuZ2V0RGF0YVRhYmxlQ29udGVudDtcclxuICAgICAgICBsZXQgYWpheE1ldGhvZD0nR0VUJztcclxuICAgICAgICAvL3Rva2VuIGZvcm1kYXRhYmEhXHJcbiAgICAgICAgZGVidWcoYWpheFVybCk7XHJcblxyXG4gICAgICAgIGFqYXhEYXRhSnNvbj1yb290LmdldEFqYXhEYXRhSnNvbigpO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKGFqYXhEYXRhSnNvbik7XHJcblxyXG4gICAgICAgIGRhdGFUYWJsZUNTU1NlbGVjdG9yPU9wdHMuY29udGFpbmVyQ3NzU2VsZWN0b3IrJyAuZGF0YVRhYmxlJzsgLy9cclxuICAgICAgICBjb25zb2xlLmxvZyhkYXRhVGFibGVDU1NTZWxlY3RvciApO1xyXG5cclxuICAgICAgICBsZXQgY29sTnVtPSQoZGF0YVRhYmxlQ1NTU2VsZWN0b3IrJyB0aGVhZCB0aCcpLmxlbmd0aDsgLy9idXR0b25zIGluc2VydCBwb3NpdGlvbiBuZWVkXHJcbiAgICAgICAgQVBQLnNldE9wdHMoe1xyXG4gICAgICAgICAgICBkYXRhdGFibGVSb3dBY3Rpb25CdXR0b25DbGlja0NhbGxCYWNrOnJvb3QuZGF0YXRhYmxlUm93QWN0aW9uQnV0dG9uQ2xpY2ssXHJcbiAgICAgICAgfSlcclxuICAgICAgICBsZXQgb3JkZXJEaXJlY3RpdmU9T3B0cy5kYXRhVGFibGUub3JkZXJEaXJlY3RpdmU7XHJcbiAgICAgICAgLypcclxuICAgICAgICBpZih0eXBlb2Ygb3B0aW9uc1snb3JkZXJEaXJlY3RpdmUnXSE9J3VuZGVmaW5lZCcpe1xyXG4gICAgICAgICAgICBvcmRlckRpcmVjdGl2ZT1vcHRpb25zWydvcmRlckRpcmVjdGl2ZSddO1xyXG4gICAgICAgIH1cclxuICAgICAgICAqL1xyXG5cclxuICAgICAgICBpZighcm9vdC5kYXRhVGFibGUpe1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZygnWFhYWFhYWFhYWFhYWFhYWFhYWFggTmluY3MgRGF0YXRhYmxlJyk7XHJcbiAgICAgICAgICAgIHJvb3QuZGF0YVRhYmxlPVxyXG4gICAgICAgICAgICAgICAgJChkYXRhVGFibGVDU1NTZWxlY3RvcikuRGF0YVRhYmxlKCB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGFuZ3VhZ2U6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiAnLy9jZG4uZGF0YXRhYmxlcy5uZXQvcGx1Zy1pbnMvMS4xMC4yNC9pMThuL0h1bmdhcmlhbi5qc29uJ1xyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcblxyXG4gICAgICAgICAgICAgICAgICAgIC8vXCJhamF4XCI6IFwie3thc3NldCgnZXhhcG1sZTIuanNvbicpfX1cIixcclxuICAgICAgICAgICAgICAgICAgICBcImFqYXhcIjp7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHVybDogT3B0cy5VUkwuZ2V0RGF0YVRhYmxlQ29udGVudCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YTogZnVuY3Rpb24gKGQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCctLS0qKioqKiotLS0tJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhBUFAuUHJvZHVjdEFkbWluLmdldEFqYXhEYXRhSnNvbigpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAkLmV4dGVuZCh7fSwgZCwge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFqYXhEYXRhOiBBUFAuUHJvZHVjdEFkbWluLmdldEFqYXhEYXRhSnNvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IGFqYXhNZXRob2RcclxuICAgICAgICAgICAgICAgICAgICAgICAgLypcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiBhamF4RGF0YSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgKi9cclxuICAgICAgICAgICAgICAgICAgICB9ICxcclxuICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJTaWRlOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICAgIFwiY29sdW1uRGVmc1wiOiBbXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwidGFyZ2V0c1wiOiBjb2xOdW0tMSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZGVyYWJsZTogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInJlbmRlclwiOiBmdW5jdGlvbiAoIGRhdGEsIHR5cGUsIHJvdyApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnV0dG9ucz1BUFAuZGF0YXRhYmxlQWRkUm93RWRpdEJ1dHRvbigwLGFyZ3VtZW50cyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGJ1dHRvbnM7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInRhcmdldHNcIjogMSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwicmVuZGVyXCI6IGZ1bmN0aW9uICggZGF0YSwgdHlwZSwgcm93ICkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0eXBlID09PSBcInNvcnRcIiA/IGRhdGEubGF0aW5pc2UoKSA6IGRhdGE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvL3sgXCJ2aXNpYmxlXCI6IGZhbHNlLCAgXCJ0YXJnZXRzXCI6IFsgMCBdIH1cclxuICAgICAgICAgICAgICAgICAgICBdLFxyXG4gICAgICAgICAgICAgICAgICAgIGJ1dHRvbnM6e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBidXR0b25zOiBbXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZXhjZWwnLCdwZGYnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dGVuZDogJ3ByaW50JyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL3RleHQ6ICdQcmludCBjdXJyZW50IHBhZ2UnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0aXRsZSc6ICd0aXRsZSBjdXN0b20gdGV4dCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21lc3NhZ2VUb3AnOiAnTWVzc2FnZSBPbiBUb3AnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG9QcmludDogdHJ1ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgXVxyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgXCJjb2x1bW5zXCI6IFtcclxuICAgICAgICAgICAgICAgICAgICAgICAgeyBcImRhdGFcIjogXCJpZFwifSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgeyBcImRhdGFcIjogXCJuYW1lXCIgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgeyBcImRhdGFcIjogXCJob29yZXljYUlkXCIgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAge1wiZGF0YVwiOiBcInByb2R1Y3RHcm91cFwifSxcclxuICAgICAgICAgICAgICAgICAgICAgICAge1wiZGF0YVwiOiBcInN1cHBsaWVyTmFtZVwifSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgeyBcImRhdGFcIjogXCJwcmljZVwiIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHsgXCJkYXRhXCI6IFwiY3JlYXRlZF9hdFwiIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgXSxcclxuICAgICAgICAgICAgICAgICAgICBcIm9yZGVyXCI6IG9yZGVyRGlyZWN0aXZlLFxyXG4gICAgICAgICAgICAgICAgICAgIFwic3RhdGVTYXZlXCI6IHRydWUsXHJcbiAgICAgICAgICAgICAgICAgICAgXCJkcmF3Q2FsbGJhY2tcIjogZnVuY3Rpb24oIHNldHRpbmdzICkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBBUFAuZGF0YXRhYmxlQWRkUm93QWN0aW9uKGRhdGFUYWJsZUNTU1NlbGVjdG9yKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcm9vdC5zaG93UmVzdWx0Q29udGFpbmVyKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdkcmF3Q2FsbGJhY2snKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9ICk7XHJcblxyXG5cclxuICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coJ1hYWFhYWFhYWFhYWFhYWFhYWFhYIHZhbiBEYXRhdGFibGUnKTtcclxuICAgICAgICAgICAgLy9yb290LmRhdGFUYWJsZS5hamF4LnJlbG9hZCgpO1xyXG4gICAgICAgICAgICByb290LmRhdGFUYWJsZS5kcmF3KCk7XHJcbiAgICAgICAgfVxyXG5cclxuXHJcbiAgICB9XHJcbiAgICB0aGlzLnByb2Nlc3NSZXNwb25zZT1mdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuY2xpY2tTYXZlQnV0dG9uPWZ1bmN0aW9uIChldmVudCkge1xyXG4gICAgICAgIGRlYnVnKCdTYXZlIGNsaWNrZWQnKTtcclxuXHJcbiAgICAgICAgbGV0IENTU1NlbGVjdG9yRm9ybT1PcHRzLmNvbnRhaW5lckNzc1NlbGVjdG9yKycgLnByb2R1Y3RGb3JtJztcclxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgIGlmICgkKENTU1NlbGVjdG9yRm9ybSlbMF0uY2hlY2tWYWxpZGl0eSgpID09PSBmYWxzZSkge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZygndmFsaWRhdG9uIGZhbHNlJyk7XHJcbiAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coJ3ZhbGlkYXRvbiBvaycpO1xyXG4gICAgICAgICAgICAvL2RvIHlvdXIgYWpheCBzdWJtaXRpb24gaGVyZVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IGFqYXhEYXRhPXJvb3QuZm9ybURhdGFUb0RhdGFPYmplY3RBUElDYWxsKCcucHJvZHVjdEZvcm0nKTtcclxuICAgICAgICBsZXQgYWpheFVybD1PcHRzLlVSTC5zdG9yZTtcclxuICAgICAgICBsZXQgYWpheE1ldGhvZD1cIlBPU1RcIjtcclxuICAgICAgICBpZihyb290LlByb2R1Y3QuaWQpe1xyXG4gICAgICAgICAgICBhamF4VXJsPU9wdHMuVVJMLnVwZGF0ZS5yZXBsYWNlKCclaWQlJyxyb290LlByb2R1Y3QuaWQpO1xyXG4gICAgICAgICAgICAvL2FqYXhNZXRob2Q9XCJQVVRcIjtcclxuICAgICAgICAgICAgLy9hamF4RGF0YT1uZXcgRm9ybURhdGEoJChDU1NTZWxlY3RvckZvcm0pWzBdKTtcclxuICAgICAgICAgICAgYWpheERhdGEuYXBwZW5kKCdfbWV0aG9kJywnUFVUJyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBkZWJ1ZyhhamF4TWV0aG9kKTtcclxuICAgICAgICBkZWJ1ZyhhamF4RGF0YSk7XHJcblxyXG4gICAgICAgICQuYWpheCh7XHJcbiAgICAgICAgICAgIHVybDphamF4VXJsLFxyXG4gICAgICAgICAgICBkYXRhOmFqYXhEYXRhLFxyXG4gICAgICAgICAgICB0eXBlOmFqYXhNZXRob2QsXHJcbiAgICAgICAgICAgIGNvbnRlbnRUeXBlOmZhbHNlLFxyXG4gICAgICAgICAgICBwcm9jZXNzRGF0YTogZmFsc2UsXHJcbiAgICAgICAgICAgIGhlYWRlcnM6IHtcclxuICAgICAgICAgICAgICAgIC8vJ1gtQ1NSRi1UT0tFTic6ICQoJ2lucHV0W25hbWU9XCJfdG9rZW5cIl0nKS52YWwoKVxyXG4gICAgICAgICAgICAgICAgJ1gtQ1NSRi1UT0tFTic6IE9wdHMudG9rZW5cclxuICAgICAgICAgICAgfSxcclxuXHJcbiAgICAgICAgICAgIHN1Y2Nlc3M6ZnVuY3Rpb24gKGRhdGEpe1xyXG4gICAgICAgICAgICAgICAgZGVidWcoZGF0YSk7XHJcbiAgICAgICAgICAgICAgICBpZihkYXRhLnN1Y2Nlc3M9PXRydWUpe1xyXG4gICAgICAgICAgICAgICAgICAgIC8vT3B0cy5vbkFmdGVySW5pdFZpZXdEZXRhaWxzPXJvb3QuYXV0b2ZpbGxEZXRhaWxzO1xyXG4gICAgICAgICAgICAgICAgICAgIE9wdHMuZGF0YVRhYmxlLm9yZGVyRGlyZWN0aXZlPVswLCAnZGVzYyddO1xyXG4gICAgICAgICAgICAgICAgICAgIFRvYXN0LmNyZWF0ZShcIlNpa2VyZXMgcsO2Z3rDrXTDqXMhXCIsIGFqYXhEYXRhLmdldCgnbmFtZScpK1wiIG5ldsWxIHRlcm3DqWsgZWxtZW50dmVcIiwgVE9BU1RfU1RBVFVTLlNVQ0NFU1MsNTAwMCk7XHJcbi8vICAgICAgICAgICAgICAgICAgICAgICAgQVBQLmxvYWRNYWluQ29udGVudChPcHRzLlVSTC5pbmRleCsnP2luaXQ9MCcscm9vdC5pbml0Vmlld0xpc3QpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG59XHJcblxyXG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxJQUFHLE9BQU9BLE9BQU8sS0FBRyxXQUFXLEVBQUM7RUFBQSxJQUN0QkEsUUFBTywwQkFBQUMsVUFBQTtJQUVUO0FBQ1I7QUFDQTtJQUNRLFNBQUFDLFNBQWFDLElBQUksRUFBQ0MsT0FBTyxFQUFFO01BQUEsSUFBQUMsS0FBQTtNQUFBQyxlQUFBLE9BQUFKLFFBQUE7TUFDdkJHLEtBQUEsR0FBQUUsVUFBQSxPQUFBTCxRQUFBLEdBQU1DLElBQUksRUFBQ0MsT0FBTztNQUNsQixJQUFHLE9BQU9DLEtBQUEsQ0FBS0csT0FBTyxLQUFJLFdBQVcsRUFBQztRQUNsQ0gsS0FBQSxDQUFLRyxPQUFPLEdBQUMsRUFBRTtNQUNuQjtNQUNBQyxPQUFP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\n//# sourceURL=webpack-internal:///./resources/js/admin/product.js\n\n}"); +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 /*\r\n * Constructor\r\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 /*\r\n * Variables accessible\r\n * in the class\r\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 /*\r\n * Constructor\r\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 /*\r\n root.container.find('.selectedDateText').text(dateText);\r\n $('.deliveryDatePlace').text(dateText.replaceAll('-', '.') + '.');\r\n root.container.find(' input[name=\"deliveryDate\"]').val(dateText);\r\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 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 /*\r\n let template=root.container.find('template[data-name=\"loading\"]').html()\r\n root.resultContainer.html(template);\r\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 /*\r\n $(CSSSelectorForm + ' input[data-inputmask]').each(function () {\r\n let indexKey = $(this).attr('name');\r\n if (ajaxData.get(indexKey)) {\r\n ajaxData.set(indexKey, ajaxData.get(indexKey).replace(/[_ ]+$/g, \"\"));\r\n }\r\n });\r\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 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 /*\r\n if(typeof options['orderDirective']!='undefined'){\r\n orderDirective=options['orderDirective'];\r\n }\r\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 /*\r\n data: ajaxData,\r\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.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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9yZXNvdXJjZXMvanMvYWRtaW4vcHJvZHVjdC5qcyIsIm5hbWVzIjpbIlByb2R1Y3QiLCJfRGF0YU1vZGVsIiwiX1Byb2R1Y3QiLCJkYXRhIiwib3B0aW9ucyIsIl90aGlzIiwiX2NsYXNzQ2FsbENoZWNrIiwiX2NhbGxTdXBlciIsImNvbnRhY3QiLCJjb25zb2xlIiwibG9nIiwiX2luaGVyaXRzIiwiX2NyZWF0ZUNsYXNzIiwiRGF0YU1vZGVsIiwid2luZG93IiwiUHJvZHVjdEFkbWluIiwiUHJvZHVjdEl0ZW0iLCJPcHRzIiwidG9rZW4iLCJjb250YWluZXJDc3NTZWxlY3RvciIsImNvbnRhaW5lciIsInJlc3VsdENvbnRhaW5lclNlbGVjdG9yIiwicmVzdWx0Q29udGFpbmVyIiwidGVzdE1vZGUiLCJmaWx0ZXJzIiwiVVJMIiwiZ2V0RGF0YVRhYmxlQ29udGVudCIsImluZGV4Iiwic2hvdyIsImVkaXQiLCJjcmVhdGUiLCJzdG9yZSIsInVwZGF0ZSIsImRlc3Ryb3kiLCJhdHRhY2hGaWxlIiwiZGV0YWNoRmlsZSIsImRhdGFUYWJsZSIsIm9yZGVyRGlyZWN0aXZlIiwib25BZnRlckluaXRWaWV3RGV0YWlscyIsInJvb3QiLCJjb250YWN0UG9wdXBXb3JrZmxvdyIsImNvbnN0cnVjdCIsIiQiLCJleHRlbmQiLCJBUFAiLCJnZXRPcHRzIiwiZGF0YXRhYmxlUm93QWN0aW9uQnV0dG9uQ2xpY2siLCJldmVudCIsImRlYnVnIiwibm9kZSIsImN1cnJlbnRUYXJnZXQiLCJyb3ciLCJkYXRhVGFibGVDU1NTZWxlY3RvciIsIkRhdGFUYWJsZSIsInBhcmVudHMiLCJyb3dEYXRhIiwiYWN0aW9uTmFtZSIsImNhcGl0YWxpemUiLCJkYXRhdGFibGVSb3dBY3Rpb25FZGl0IiwiYWpheFVybCIsInJlcGxhY2UiLCJpZCIsImxvYWRNYWluQ29udGVudCIsImluaXRWaWV3RGV0YWlscyIsImluaXRWaWV3TGlzdE9sZCIsImFyZ3VtZW50cyIsImxlbmd0aCIsInVuZGVmaW5lZCIsImNvbE51bSIsInNldE9wdHMiLCJkYXRhdGFibGVSb3dBY3Rpb25CdXR0b25DbGlja0NhbGxCYWNrIiwibGFuZ3VhZ2UiLCJ1cmwiLCJzZXJ2ZXJTaWRlIiwib3JkZXJhYmxlIiwicmVuZGVyIiwidHlwZSIsImJ1dHRvbnMiLCJkYXRhdGFibGVBZGRSb3dFZGl0QnV0dG9uIiwibGF0aW5pc2UiLCJhdXRvUHJpbnQiLCJkcmF3Q2FsbGJhY2siLCJzZXR0aW5ncyIsImRhdGF0YWJsZUFkZFJvd0FjdGlvbiIsImluaXRWaWV3TGlzdCIsImZpbmQiLCJzZWxlY3QyIiwicGxhY2Vob2xkZXIiLCJhbGxvd0NsZWFyIiwiYWpheCIsImdldFByb2R1Y3RTZWFyY2giLCJkYXRhVHlwZSIsInBhcmFtcyIsInRlcm0iLCJwYWdlIiwic3VwcGxpZXJJZCIsInZhbCIsImNhY2hlIiwiZGF0ZXBpY2tlciIsImRhdGVGb3JtYXQiLCJvblNlbGVjdCIsImRhdGVUZXh0Iiwib2JqIiwiaW5wdXQiLCJjbGljayIsImJ1dHRvbiIsIm9mZiIsIm9uIiwibG9hZGluZ1Jlc3VsdENvbnRhaW5lciIsInJlcXVlc3RQcm9kdWN0cyIsInNldFZpc2libGVGaWx0ZXJzIiwiaGlkZVJlc3VsdENvbnRhaW5lciIsImhpZGUiLCJzaG93UmVzdWx0Q29udGFpbmVyIiwiaW5pdCIsIkNTU1NlbGVjdG9yRm9ybSIsInBpY3R1cmUiLCJwaWNVcmwiLCJQdWJsaWNVcmwiLCJmaWxlbmFtZSIsImF0dHIiLCJzcGVjaWZpY2F0aW9uIiwiZG9jVXJsIiwiYWRkQXR0YWNobWVudCIsIkZvcm1TYXZlQnV0dG9uIiwiY2xpY2tTYXZlQnV0dG9uIiwiYXR0YWNobWVudERhdGEiLCJyb3dOdW0iLCJkYXRlU3RyIiwiRGF0ZSIsInVwZGF0ZWRfYXQiLCJ0b0xvY2FsZVN0cmluZyIsImRhdGUiLCJsaW5rIiwidGVtcGxhdGUiLCJodG1sIiwiTXVzdGFjaGUiLCJhcHBlbmQiLCJUb2FzdCIsImVuYWJsZVRpbWVycyIsInRpdGxlIiwibWVzc2FnZSIsIm9yaWdpbmFsX2ZpbGVuYW1lIiwic3RhdHVzIiwiVE9BU1RfU1RBVFVTIiwiU1VDQ0VTUyIsInRpbWVvdXQiLCJ0eXBlSW5kZXgiLCJ0eXBlTmFtZSIsImMiLCJmb3JtRGF0YVRvRGF0YU9iamVjdEFQSUNhbGwiLCJhamF4RGF0YSIsIkZvcm1EYXRhIiwiZWFjaCIsImdldEFsbCIsImtleSIsInZhbHVlIiwiZ2V0QWpheERhdGFKc29uIiwiX2l0ZXJhdG9yIiwiX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIiLCJlbnRyaWVzIiwiX3N0ZXAiLCJzIiwibiIsImRvbmUiLCJwYWlyIiwiZXJyIiwiZSIsImYiLCJvYmplY3QiLCJmb3JFYWNoIiwiUmVmbGVjdCIsImhhcyIsIkFycmF5IiwiaXNBcnJheSIsInB1c2giLCJhamF4RGF0YUpzb24iLCJKU09OIiwic3RyaW5naWZ5IiwiYWpheE1ldGhvZCIsImQiLCJkcmF3IiwicHJvY2Vzc1Jlc3BvbnNlIiwicHJldmVudERlZmF1bHQiLCJjaGVja1ZhbGlkaXR5Iiwic3RvcFByb3BhZ2F0aW9uIiwiY29udGVudFR5cGUiLCJwcm9jZXNzRGF0YSIsImhlYWRlcnMiLCJzdWNjZXNzIiwiZ2V0Il0sInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvanMvYWRtaW4vcHJvZHVjdC5qcz85YjUyIl0sInNvdXJjZXNDb250ZW50IjpbImlmKHR5cGVvZiBQcm9kdWN0PT09J3VuZGVmaW5lZCcpe1xyXG4gICAgY2xhc3MgUHJvZHVjdCBleHRlbmRzIERhdGFNb2RlbHtcclxuXHJcbiAgICAgICAgLypcclxuICAgICAgICAgKiBDb25zdHJ1Y3RvclxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGNvbnN0cnVjdG9yIChkYXRhLG9wdGlvbnMpIHtcclxuICAgICAgICAgICAgc3VwZXIoZGF0YSxvcHRpb25zKVxyXG4gICAgICAgICAgICBpZih0eXBlb2YgdGhpcy5jb250YWN0ID09PVwidW5kZWZpbmVkXCIpe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jb250YWN0PVtdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdQcm9kdWN0IGNvbnN0cnVjdG9yIGNhbGxlZCcpO1xyXG4gICAgICAgIH07XHJcbiAgICB9O1xyXG4gICAgd2luZG93LlByb2R1Y3Q9UHJvZHVjdDtcclxufVxyXG53aW5kb3cuUHJvZHVjdEFkbWluPWZ1bmN0aW9uIChvcHRpb25zLFByb2R1Y3RJdGVtKSB7XHJcbiAgICAvKlxyXG4gICAgICogVmFyaWFibGVzIGFjY2Vzc2libGVcclxuICAgICAqIGluIHRoZSBjbGFzc1xyXG4gICAgICovXHJcbiAgICBsZXQgT3B0cyA9IHtcclxuICAgICAgICB0b2tlbjogbnVsbCxcclxuICAgICAgICBjb250YWluZXJDc3NTZWxlY3RvcjogJy5jb250YWluZXJQcm9kdWN0JyxcclxuICAgICAgICBjb250YWluZXI6bnVsbCxcclxuICAgICAgICByZXN1bHRDb250YWluZXJTZWxlY3RvcjonLmNvbnRhaW5lclByb2R1Y3QgLmNvbnRhaW5lclJlc3VsdCcsXHJcbiAgICAgICAgcmVzdWx0Q29udGFpbmVyOm51bGwsXHJcblxyXG4gICAgICAgIHRlc3RNb2RlOiBmYWxzZSxcclxuICAgICAgICBmaWx0ZXJzOntcclxuICAgICAgICAgICAgUHJvZHVjdDp7fSxcclxuICAgICAgICB9LFxyXG4gICAgICAgIFVSTDoge1xyXG4gICAgICAgICAgICBnZXREYXRhVGFibGVDb250ZW50OiAnJyxcclxuICAgICAgICAgICAgaW5kZXg6ICcnLFxyXG4gICAgICAgICAgICBzaG93OiAnJyxcclxuICAgICAgICAgICAgZWRpdDogJycsXHJcbiAgICAgICAgICAgIGNyZWF0ZTogJycsXHJcbiAgICAgICAgICAgIHN0b3JlOiAnJyxcclxuICAgICAgICAgICAgdXBkYXRlOiAnJyxcclxuICAgICAgICAgICAgZGVzdHJveTogJycsXHJcbiAgICAgICAgICAgIGF0dGFjaEZpbGU6ICcnLFxyXG4gICAgICAgICAgICBkZXRhY2hGaWxlOiAnJyxcclxuICAgICAgICB9LFxyXG4gICAgICAgIGRhdGFUYWJsZToge1xyXG4gICAgICAgICAgICBvcmRlckRpcmVjdGl2ZTogWzEsICdhc2MnXSxcclxuICAgICAgICB9LFxyXG4gICAgICAgIG9uQWZ0ZXJJbml0Vmlld0RldGFpbHM6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgbGV0IFByb2R1Y3QgPSB7fTtcclxuICAgIGxldCByb290ID0gdGhpcztcclxuICAgIGxldCBjb250YWN0UG9wdXBXb3JrZmxvdyA9ICduZXcnO1xyXG4gICAgbGV0IGRhdGFUYWJsZT1udWxsO1xyXG4gICAgLypcclxuICAgICAqIENvbnN0cnVjdG9yXHJcbiAgICAgKi9cclxuICAgIHRoaXMuY29uc3RydWN0ID0gZnVuY3Rpb24gKG9wdGlvbnMsIFByb2R1Y3RJdGVtKSB7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ1Byb2R1Y3RBZG1pbiBjb25zdHJ1Y3RvciBjYWxsZWQnKTtcclxuICAgICAgICAkLmV4dGVuZChPcHRzLCBvcHRpb25zKTtcclxuICAgICAgICBpZiAoIVByb2R1Y3RJdGVtKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdQcm9kdWN0IGxldHJlIGtlbGxldCBob3puaSAnKTtcclxuICAgICAgICAgICAgaWYgKCFBUFAuUHJvZHVjdCkge1xyXG4gICAgICAgICAgICAgICAgQVBQLlByb2R1Y3QgPSBuZXcgd2luZG93LlByb2R1Y3QoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByb290LlByb2R1Y3QgPSBBUFAuUHJvZHVjdDtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgdGhpcy5nZXRPcHRzID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiBPcHRzO1xyXG4gICAgfVxyXG4gICAgdGhpcy5kYXRhdGFibGVSb3dBY3Rpb25CdXR0b25DbGljaz1mdW5jdGlvbiAoZXZlbnQpe1xyXG4gICAgICAgIGRlYnVnKCdkYXRhdGFibGVSb3dBY3Rpb25CdXR0b25DbGljaycpO1xyXG4gICAgICAgIGxldCBub2RlPSQoZXZlbnRbMF0uY3VycmVudFRhcmdldCk7XHJcbiAgICAgICAgbGV0IHJvdz0kKGRhdGFUYWJsZUNTU1NlbGVjdG9yKS5EYXRhVGFibGUoKS5yb3cobm9kZS5wYXJlbnRzKCd0cicpKTtcclxuICAgICAgICBsZXQgcm93RGF0YT1yb3cuZGF0YSgpO1xyXG4gICAgICAgIGxldCBhY3Rpb25OYW1lPSdkYXRhdGFibGVSb3dBY3Rpb24nK25vZGUuZGF0YSgnYnV0dG9udHlwZScpLmNhcGl0YWxpemUoKTtcclxuICAgICAgICBpZiAodHlwZW9mIHJvb3RbYWN0aW9uTmFtZV0gPT09IFwiZnVuY3Rpb25cIikge1xyXG4gICAgICAgICAgICByZXR1cm4gcm9vdFthY3Rpb25OYW1lXShyb3dEYXRhLG5vZGUpXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgdGhpcy5kYXRhdGFibGVSb3dBY3Rpb25FZGl0PWZ1bmN0aW9uIChyb3dEYXRhLG5vZGUpIHtcclxuICAgICAgICBjb25zb2xlLmxvZygnZGF0YXRhYmxlUm93QWN0aW9uRWRpdCBDYWxsZWQnKTtcclxuICAgICAgICAvL09wdHMub25BZnRlckluaXRWaWV3RGV0YWlscz1yb290LmF1dG9maWxsRGV0YWlscztcclxuICAgICAgICBsZXQgYWpheFVybD1PcHRzLlVSTC5lZGl0LnJlcGxhY2UoJyVpZCUnLHJvd0RhdGEuaWQpO1xyXG4gICAgICAgIEFQUC5sb2FkTWFpbkNvbnRlbnQoYWpheFVybCxyb290LmluaXRWaWV3RGV0YWlscyk7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ2RhdGF0YWJsZVJvd0FjdGlvbkVkaXQgRW5kJyk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmluaXRWaWV3TGlzdE9sZCA9IGZ1bmN0aW9uIChvcHRpb25zPXt9KSB7XHJcbiAgICAgICAgZGVidWcoJ2xpc3R2aWV3IGluaWNpYWxpemF0aW9uJyk7XHJcbiAgICAgICAgZGF0YVRhYmxlQ1NTU2VsZWN0b3I9T3B0cy5jb250YWluZXJDc3NTZWxlY3RvcisnIC5kYXRhVGFibGUnOyAvL1xyXG5cclxuICAgICAgICBsZXQgY29sTnVtPSQoZGF0YVRhYmxlQ1NTU2VsZWN0b3IrJyB0aGVhZCB0aCcpLmxlbmd0aDsgLy9idXR0b25zIGluc2VydCBwb3NpdGlvbiBuZWVkXHJcbiAgICAgICAgQVBQLnNldE9wdHMoe1xyXG4gICAgICAgICAgICBkYXRhdGFibGVSb3dBY3Rpb25CdXR0b25DbGlja0NhbGxCYWNrOnJvb3QuZGF0YXRhYmxlUm93QWN0aW9uQnV0dG9uQ2xpY2ssXHJcbiAgICAgICAgfSlcclxuICAgICAgICBsZXQgb3JkZXJEaXJlY3RpdmU9T3B0cy5kYXRhVGFibGUub3JkZXJEaXJlY3RpdmU7XHJcbiAgICAgICAgaWYodHlwZW9mIG9wdGlvbnNbJ29yZGVyRGlyZWN0aXZlJ10hPSd1bmRlZmluZWQnKXtcclxuICAgICAgICAgICAgb3JkZXJEaXJlY3RpdmU9b3B0aW9uc1snb3JkZXJEaXJlY3RpdmUnXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgJChkYXRhVGFibGVDU1NTZWxlY3RvcikuRGF0YVRhYmxlKCB7XHJcbiAgICAgICAgICAgIGxhbmd1YWdlOiB7XHJcbiAgICAgICAgICAgICAgICB1cmw6ICcvL2Nkbi5kYXRhdGFibGVzLm5ldC9wbHVnLWlucy8xLjEwLjI0L2kxOG4vSHVuZ2FyaWFuLmpzb24nXHJcbiAgICAgICAgICAgIH0sXHJcblxyXG4gICAgICAgICAgICAvL1wiYWpheFwiOiBcInt7YXNzZXQoJ2V4YXBtbGUyLmpzb24nKX19XCIsXHJcbiAgICAgICAgICAgIFwiYWpheFwiOiBPcHRzLlVSTC5nZXREYXRhVGFibGVDb250ZW50LFxyXG4gICAgICAgICAgICBzZXJ2ZXJTaWRlOiB0cnVlLFxyXG4gICAgICAgICAgICBcImNvbHVtbkRlZnNcIjogW1xyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIFwidGFyZ2V0c1wiOiBjb2xOdW0tMSxcclxuICAgICAgICAgICAgICAgICAgICBvcmRlcmFibGU6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgIFwicmVuZGVyXCI6IGZ1bmN0aW9uICggZGF0YSwgdHlwZSwgcm93ICkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1dHRvbnM9QVBQLmRhdGF0YWJsZUFkZFJvd0VkaXRCdXR0b24oMCxhcmd1bWVudHMpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYnV0dG9ucztcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBcInRhcmdldHNcIjogMSxcclxuICAgICAgICAgICAgICAgICAgICBcInJlbmRlclwiOiBmdW5jdGlvbiAoIGRhdGEsIHR5cGUsIHJvdyApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHR5cGUgPT09IFwic29ydFwiID8gZGF0YS5sYXRpbmlzZSgpIDogZGF0YTtcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIC8veyBcInZpc2libGVcIjogZmFsc2UsICBcInRhcmdldHNcIjogWyAwIF0gfVxyXG4gICAgICAgICAgICBdLFxyXG4gICAgICAgICAgICBidXR0b25zOntcclxuICAgICAgICAgICAgICAgIGJ1dHRvbnM6IFtcclxuICAgICAgICAgICAgICAgICAgICAnZXhjZWwnLCdwZGYnLFxyXG4gICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZXh0ZW5kOiAncHJpbnQnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvL3RleHQ6ICdQcmludCBjdXJyZW50IHBhZ2UnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAndGl0bGUnOiAndGl0bGUgY3VzdG9tIHRleHQnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAnbWVzc2FnZVRvcCc6ICdNZXNzYWdlIE9uIFRvcCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF1dG9QcmludDogdHJ1ZVxyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBdXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIFwiY29sdW1uc1wiOiBbXHJcbiAgICAgICAgICAgICAgICB7IFwiZGF0YVwiOiBcImlkXCJ9LFxyXG4gICAgICAgICAgICAgICAgeyBcImRhdGFcIjogXCJuYW1lXCIgfSxcclxuICAgICAgICAgICAgICAgIHsgXCJkYXRhXCI6IFwiaG9vcmV5Y2FJZFwiIH0sXHJcbiAgICAgICAgICAgICAgICB7XCJkYXRhXCI6IFwicHJvZHVjdEdyb3VwXCJ9LFxyXG4gICAgICAgICAgICAgICAge1wiZGF0YVwiOiBcInN1cHBsaWVyTmFtZVwifSxcclxuICAgICAgICAgICAgICAgIHsgXCJkYXRhXCI6IFwicHJpY2VcIiB9LFxyXG4gICAgICAgICAgICAgICAgeyBcImRhdGFcIjogXCJjcmVhdGVkX2F0XCIgfSxcclxuICAgICAgICAgICAgICAgIG51bGwsXHJcbiAgICAgICAgICAgIF0sXHJcbiAgICAgICAgICAgIFwib3JkZXJcIjogb3JkZXJEaXJlY3RpdmUsXHJcbiAgICAgICAgICAgIFwic3RhdGVTYXZlXCI6IHRydWUsXHJcbiAgICAgICAgICAgIFwiZHJhd0NhbGxiYWNrXCI6IGZ1bmN0aW9uKCBzZXR0aW5ncyApIHtcclxuICAgICAgICAgICAgICAgIEFQUC5kYXRhdGFibGVBZGRSb3dBY3Rpb24oZGF0YVRhYmxlQ1NTU2VsZWN0b3IpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSApO1xyXG4gICAgICAgIGRlYnVnKCdsaXN0dmlldyBlbmQnKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmluaXRWaWV3TGlzdD1mdW5jdGlvbiAob3B0aW9ucz17fSkge1xyXG4gICAgICAgIGRlYnVnKCdpbml0Vmlld1NlYXJjaCBpbmljaWFsaXphdGlvbiAxJyk7XHJcblxyXG4gICAgICAgIHJvb3QuY29udGFpbmVyLmZpbmQoJ3NlbGVjdC5zdXBwbGllclNlbGVjdCwgc2VsZWN0LnByb2ZpdENlbnRlclNlbGVjdCwgc2VsZWN0LnByb2R1Y3RHcm91cFNlbGVjdCwgc2VsZWN0LnByb2R1Y2VyU2VsZWN0LCBzZWxlY3QuaG9vcmV5Y2FOYW1lc1NlbGVjdCwgc2VsZWN0LnNwZWNpYWxPZmZlclNlbGVjdCcpLnNlbGVjdDIoKTtcclxuICAgICAgICByb290LmNvbnRhaW5lci5maW5kKCdzZWxlY3QucHJvZHVjdFNlbGVjdCcpLnNlbGVjdDIoe1xyXG4gICAgICAgICAgICBwbGFjZWhvbGRlcjogJy4uLicsXHJcbiAgICAgICAgICAgIGFsbG93Q2xlYXI6IHRydWUsXHJcbiAgICAgICAgICAgIGFqYXg6IHtcclxuICAgICAgICAgICAgICAgIHVybDogT3B0cy5VUkwuZ2V0UHJvZHVjdFNlYXJjaCxcclxuICAgICAgICAgICAgICAgIGRhdGFUeXBlOiAnanNvbicsXHJcbiAgICAgICAgICAgICAgICBkYXRhOiBmdW5jdGlvbihwYXJhbXMpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXJtOiBwYXJhbXMudGVybSB8fCAnJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgcGFnZTogcGFyYW1zLnBhZ2UgfHwgMSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3VwcGxpZXJJZDogcm9vdC5jb250YWluZXIuZmluZCgnc2VsZWN0LnN1cHBsaWVyU2VsZWN0JykudmFsKCksXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIGNhY2hlOiB0cnVlXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICByb290LmNvbnRhaW5lci5maW5kKCcuZGF0ZVBpY2tlckZyb20sIC5kYXRlUGlja2VyVG8nKS5kYXRlcGlja2VyKHtcclxuICAgICAgICAgICAgZGF0ZUZvcm1hdDogJ3l5LW1tLWRkJyxcclxuXHJcbiAgICAgICAgICAgIG9uU2VsZWN0OiBmdW5jdGlvbiAoZGF0ZVRleHQsb2JqKSB7XHJcbiAgICAgICAgICAgICAgICBkZWJ1Zyh0aGlzKTtcclxuICAgICAgICAgICAgICAgIGRlYnVnKG9iai5pbnB1dCk7XHJcbiAgICAgICAgICAgICAgICAvKlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm9vdC5jb250YWluZXIuZmluZCgnLnNlbGVjdGVkRGF0ZVRleHQnKS50ZXh0KGRhdGVUZXh0KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoJy5kZWxpdmVyeURhdGVQbGFjZScpLnRleHQoZGF0ZVRleHQucmVwbGFjZUFsbCgnLScsICcuJykgKyAnLicpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm9vdC5jb250YWluZXIuZmluZCgnIGlucHV0W25hbWU9XCJkZWxpdmVyeURhdGVcIl0nKS52YWwoZGF0ZVRleHQpO1xyXG4gICAgICAgICAgICAgICAgKi9cclxuICAgICAgICAgICAgICAgIC8vcm9vdC5jaGFuZ2VQcmljZUxpc3RQcm9maXRDZW50ZXJQYXJhbWV0ZXIobnVsbCwkKG9iai5pbnB1dCkpO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJvb3QuY29udGFpbmVyLmZpbmQoJy5kYXRlUGlja2VyQ2xpY2snKS5jbGljayhmdW5jdGlvbigpe1xyXG4gICAgICAgICAgICBkZWJ1ZygkKHRoaXMpLmRhdGEoJ2FjdGlvbicpKTtcclxuICAgICAgICAgICAgcm9vdC5jb250YWluZXIuZmluZCgnaW5wdXRbbmFtZT1cIicrJCh0aGlzKS5kYXRhKCdhY3Rpb24nKSsnXCJdJykuZGF0ZXBpY2tlcignc2hvdycpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGxldCBidXR0b249cm9vdC5jb250YWluZXIuZmluZCgnLkZvcm1TZW5kQnV0dG9uJyk7XHJcbiAgICAgICAgYnV0dG9uLm9mZignY2xpY2snKTtcclxuICAgICAgICBidXR0b24ub24oJ2NsaWNrJyxmdW5jdGlvbiAoKXtcclxuICAgICAgICAgICAgZGVidWcgKCdGb3JtU2VuZEJ1dHRvbiBjbGljaycpO1xyXG4gICAgICAgICAgICByb290LmxvYWRpbmdSZXN1bHRDb250YWluZXIoKTtcclxuICAgICAgICAgICAgcm9vdC5yZXF1ZXN0UHJvZHVjdHMoKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICByb290LnNldFZpc2libGVGaWx0ZXJzKCdQcm9kdWN0Jyk7XHJcblxyXG4gICAgICAgIGRlYnVnKCdpbml0Vmlld1NlYXJjaCBlbmQnKTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgdGhpcy5sb2FkaW5nUmVzdWx0Q29udGFpbmVyPWZ1bmN0aW9uICgpe1xyXG4gICAgICAgIGRlYnVnKCdjbGVhclJlc3VsdENvbnRhaW5lcicpO1xyXG4gICAgICAgIGRlYnVnKHJvb3QucmVzdWx0Q29udGFpbmVyKTtcclxuICAgICAgICByb290LmhpZGVSZXN1bHRDb250YWluZXIoKTtcclxuICAgICAgICByb290LmNvbnRhaW5lci5maW5kKCcuY29udGFpbmVyTG9hZGluZycpLnNob3coKTtcclxuICAgICAgICAvKlxyXG4gICAgICAgIGxldCB0ZW1wbGF0ZT1yb290LmNvbnRhaW5lci5maW5kKCd0ZW1wbGF0ZVtkYXRhLW5hbWU9XCJsb2FkaW5nXCJdJykuaHRtbCgpXHJcbiAgICAgICAgcm9vdC5yZXN1bHRDb250YWluZXIuaHRtbCh0ZW1wbGF0ZSk7XHJcblxyXG4gICAgICAgICAqL1xyXG4gICAgfVxyXG4gICAgdGhpcy5oaWRlUmVzdWx0Q29udGFpbmVyPWZ1bmN0aW9uICgpe1xyXG4gICAgICAgIGRlYnVnKCdoaWRlIGNvbnRhaW5lclJlc3VsdCcpO1xyXG4gICAgICAgIGRlYnVnKHJvb3QucmVzdWx0Q29udGFpbmVyKTtcclxuICAgICAgICByb290LnJlc3VsdENvbnRhaW5lci5oaWRlKCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLnNob3dSZXN1bHRDb250YWluZXI9ZnVuY3Rpb24gKCl7XHJcbiAgICAgICAgcm9vdC5jb250YWluZXIuZmluZCgnLmNvbnRhaW5lckxvYWRpbmcnKS5oaWRlKCk7XHJcbiAgICAgICAgcm9vdC5yZXN1bHRDb250YWluZXIuc2hvdygpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuaW5pdD1mdW5jdGlvbiAob3B0aW9ucyxQcm9kdWN0SXRlbSl7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ1Byb2R1Y3RBZG1pbiBpbml0Jyk7XHJcbiAgICAgICAgJC5leHRlbmQoT3B0cywgb3B0aW9ucyk7XHJcblxyXG4gICAgICAgIGlmKE9wdHMudGVzdE1vZGUpe1xyXG4gICAgICAgICAgICByZXR1cm4gcm9vdC50ZXN0TW9kZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZihQcm9kdWN0SXRlbSl7XHJcbiAgICAgICAgICAgIHJvb3QuUHJvZHVjdD1Qcm9kdWN0SXRlbVxyXG4gICAgICAgIH1cclxuICAgICAgICByb290LmRhdGFUYWJsZT1udWxsO1xyXG4gICAgICAgIHJvb3QuY29udGFpbmVyPSQoT3B0cy5jb250YWluZXJDc3NTZWxlY3Rvcik7XHJcbiAgICAgICAgcm9vdC5yZXN1bHRDb250YWluZXI9JChPcHRzLnJlc3VsdENvbnRhaW5lclNlbGVjdG9yKTtcclxuICAgICAgICByb290LmluaXRWaWV3TGlzdCgpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5pbml0Vmlld0RldGFpbHM9ZnVuY3Rpb24gKG9wdGlvbnMsUHJvZHVjdEl0ZW0pe1xyXG4gICAgICAgIGRlYnVnKCcqKmNhbGwgaW5pdFZpZXdEZXRhaWxzICcpO1xyXG4gICAgICAgIGxldCBDU1NTZWxlY3RvckZvcm09T3B0cy5jb250YWluZXJDc3NTZWxlY3RvcisnIC5wcm9kdWN0Rm9ybSc7XHJcbiAgICAgICAgaWYocm9vdC5Qcm9kdWN0LnBpY3R1cmUpe1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZygnKioqKiovLy8vLy8vLy8vLy8vLy8vLy8qKioqKioqKioqKioqKioqJyk7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKHJvb3QuUHJvZHVjdC5waWN0dXJlKTtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coQ1NTU2VsZWN0b3JGb3JtKTtcclxuICAgICAgICAgICAgbGV0IHBpY1VybD1yb290LlByb2R1Y3QucGljdHVyZS5QdWJsaWNVcmwrJy8nK3Jvb3QuUHJvZHVjdC5waWN0dXJlLmZpbGVuYW1lO1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhwaWNVcmwpO1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZygkKENTU1NlbGVjdG9yRm9ybSsnIGltZy5pbWFnZVByb2R1Y3QnKSk7XHJcbiAgICAgICAgICAgICQoQ1NTU2VsZWN0b3JGb3JtKycgaW1nLmltYWdlUHJvZHVjdCcpLmF0dHIoJ3NyYycscGljVXJsKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYocm9vdC5Qcm9kdWN0LnNwZWNpZmljYXRpb24pe1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZygnKioqKiovLy8vLy8vLy8vLy8vLy8vLy8qKioqKioqKioqKioqKioqJyk7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKHJvb3QuUHJvZHVjdC5zcGVjaWZpY2F0aW9uKTtcclxuICAgICAgICAgICAgbGV0IGRvY1VybD1yb290LlByb2R1Y3Quc3BlY2lmaWNhdGlvbi5QdWJsaWNVcmwrJy8nK3Jvb3QuUHJvZHVjdC5zcGVjaWZpY2F0aW9uLmZpbGVuYW1lO1xyXG4gICAgICAgICAgICByb290LmFkZEF0dGFjaG1lbnQocm9vdC5Qcm9kdWN0LnNwZWNpZmljYXRpb24pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgRm9ybVNhdmVCdXR0b249JChDU1NTZWxlY3RvckZvcm0rJyBidXR0b24uRm9ybVNhdmVCdXR0b24nKTtcclxuICAgICAgICBGb3JtU2F2ZUJ1dHRvbi5vZmYoJ2NsaWNrJyk7XHJcbiAgICAgICAgRm9ybVNhdmVCdXR0b24ub24oJ2NsaWNrJyxyb290LmNsaWNrU2F2ZUJ1dHRvbik7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuYWRkQXR0YWNobWVudD1mdW5jdGlvbiAoYXR0YWNobWVudERhdGEpe1xyXG4gICAgICAgIGNvbnNvbGUubG9nKGF0dGFjaG1lbnREYXRhKTtcclxuICAgICAgICBsZXQgQ1NTU2VsZWN0b3JGb3JtPU9wdHMuY29udGFpbmVyQ3NzU2VsZWN0b3IrJyAucHJvZHVjdEZvcm0nO1xyXG4gICAgICAgIC8vcm9vdC5TdXBwbGllci5hdHRhY2htZW50LnB1c2goYXR0YWNobWVudERhdGEpO1xyXG4gICAgICAgIC8vYXR0YWNobWVudERhdGEucm93TnVtPXJvb3QuU3VwcGxpZXIuYXR0YWNobWVudC5sZW5ndGg7XHJcbiAgICAgICAgYXR0YWNobWVudERhdGEucm93TnVtPTE7XHJcbiAgICAgICAgbGV0IGRhdGVTdHI9bmV3IERhdGUoYXR0YWNobWVudERhdGEudXBkYXRlZF9hdCk7XHJcbiAgICAgICAgZGF0ZVN0cj1kYXRlU3RyLnRvTG9jYWxlU3RyaW5nKCdodS1IVScsIHt9KTtcclxuICAgICAgICBhdHRhY2htZW50RGF0YS5kYXRlPWRhdGVTdHI7XHJcbiAgICAgICAgYXR0YWNobWVudERhdGEubGluaz1hdHRhY2htZW50RGF0YS5QdWJsaWNVcmwrJy8nK2F0dGFjaG1lbnREYXRhLmZpbGVuYW1lO1xyXG4gICAgICAgIGxldCB0ZW1wbGF0ZT0kKCd0ZW1wbGF0ZVtkYXRhLW5hbWU9XCJwcm9kdWN0QXR0YWNobWVudFRhYmxlUm93XCJdJykuaHRtbCgpXHJcbiAgICAgICAgbGV0IHJlbmRlcj1NdXN0YWNoZS5yZW5kZXIodGVtcGxhdGUsYXR0YWNobWVudERhdGEpO1xyXG4gICAgICAgICQoQ1NTU2VsZWN0b3JGb3JtKycgLmF0dGFjaG1lbnRUYWJsZSB0Ym9keScpLmFwcGVuZChyZW5kZXIpO1xyXG4gICAgICAgIC8vcm9vdC5iaW5kQ29udGFjdENsaWNrQWN0aW9uKCk7XHJcbiAgICAgICAgVG9hc3QuZW5hYmxlVGltZXJzKGZhbHNlKTtcclxuICAgICAgICBUb2FzdC5jcmVhdGUoeyB0aXRsZTogXCJGw6FqbCBob3p6w6FhZHZhIVwiLCBtZXNzYWdlOiBhdHRhY2htZW50RGF0YS5vcmlnaW5hbF9maWxlbmFtZStcIiBmw6FqbCBob3p6w6FhZHZhXCIsIHN0YXR1czogVE9BU1RfU1RBVFVTLlNVQ0NFU1MsIHRpbWVvdXQ6IDUwMDAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5zZXRWaXNpYmxlRmlsdGVycz1mdW5jdGlvbiAodHlwZSl7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ3NldFZpc2libGVGaWx0ZXJzJyk7XHJcbiAgICAgICAgY29uc29sZS5sb2coT3B0cy5maWx0ZXJzW3R5cGVdKTtcclxuICAgICAgICBjb25zb2xlLmxvZyhyb290LmNvbnRhaW5lcik7XHJcbiAgICAgICAgJChyb290LmNvbnRhaW5lcikuZmluZCgnZGl2W2NsYXNzKj1cImZpbHRlclwiXScpLmhpZGUoKVxyXG4gICAgICAgIGZvciAoY29uc3QgdHlwZUluZGV4IGluIE9wdHMuZmlsdGVyc1t0eXBlXSkge1xyXG4gICAgICAgICAgICBjb25zdCB0eXBlTmFtZT1PcHRzLmZpbHRlcnNbdHlwZV1bdHlwZUluZGV4XTtcclxuICAgICAgICAgICAgZGVidWcodHlwZU5hbWUpO1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZygkKHJvb3QuY29udGFpbmVyKS5maW5kKCcuZmlsdGVyXycrdHlwZU5hbWUpKTtcclxuICAgICAgICAgICAgJChyb290LmNvbnRhaW5lcikuZmluZCgnLmZpbHRlcl8nK3R5cGVOYW1lKS5zaG93KCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgdGhpcy5jPWZ1bmN0aW9uIChDU1NTZWxlY3RvckZvcm0pe1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCdjIGNhbGxlZCcpO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKENTU1NlbGVjdG9yRm9ybSk7XHJcbiAgICAgICAgY29uc29sZS5sb2cocm9vdC5jb250YWluZXIpO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKHJvb3QuY29udGFpbmVyLmZpbmQoJ2Zvcm0nKSk7XHJcbiAgICAgICAgY29uc29sZS5sb2cocm9vdC5jb250YWluZXIuZmluZChDU1NTZWxlY3RvckZvcm0pKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5mb3JtRGF0YVRvRGF0YU9iamVjdEFQSUNhbGwgPSBmdW5jdGlvbiAoQ1NTU2VsZWN0b3JGb3JtKSB7XHJcblxyXG4gICAgICAgIGNvbnNvbGUubG9nKENTU1NlbGVjdG9yRm9ybSk7XHJcbiAgICAgICAgY29uc29sZS5sb2cocm9vdC5jb250YWluZXIpO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKHJvb3QuY29udGFpbmVyLmZpbmQoQ1NTU2VsZWN0b3JGb3JtKSk7XHJcbiAgICAgICAgY29uc29sZS5sb2cocm9vdC5jb250YWluZXIuZmluZCgnZm9ybScpKTtcclxuICAgICAgICBjb25zb2xlLmxvZyhyb290LmNvbnRhaW5lci5maW5kKCdmb3JtJytDU1NTZWxlY3RvckZvcm0pWzBdKTtcclxuICAgICAgICAvL3JldHVybjtcclxuICAgICAgICBsZXQgYWpheERhdGEgPSBuZXcgRm9ybURhdGEocm9vdC5jb250YWluZXIuZmluZCgnZm9ybScrQ1NTU2VsZWN0b3JGb3JtKVswXSk7XHJcbiAgICAgICAgJC5lYWNoKGFqYXhEYXRhLmdldEFsbCgnc3VwcGxpZXInKSwgZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcclxuICAgICAgICAgICAgYWpheERhdGEuYXBwZW5kKCdzdXBwbGllcnNbXScsIHZhbHVlKTtcclxuICAgICAgICB9KVxyXG4gICAgICAgIGFqYXhEYXRhLmRlbGV0ZSgnc3VwcGxpZXInKTtcclxuICAgICAgICAkLmVhY2goYWpheERhdGEuZ2V0QWxsKCdwcm9maXRDZW50ZXInKSwgZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcclxuICAgICAgICAgICAgYWpheERhdGEuYXBwZW5kKCdwcm9maXRDZW50ZXJzW10nLCB2YWx1ZSk7XHJcbiAgICAgICAgfSlcclxuICAgICAgICBhamF4RGF0YS5kZWxldGUoJ3Byb2ZpdENlbnRlcicpO1xyXG4gICAgICAgICQuZWFjaChhamF4RGF0YS5nZXRBbGwoJ3Byb2R1Y3RHcm91cCcpLCBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xyXG4gICAgICAgICAgICBhamF4RGF0YS5hcHBlbmQoJ3Byb2R1Y3RHcm91cHNbXScsIHZhbHVlKTtcclxuICAgICAgICB9KVxyXG4gICAgICAgIGFqYXhEYXRhLmRlbGV0ZSgncHJvZHVjdEdyb3VwJyk7XHJcbiAgICAgICAgJC5lYWNoKGFqYXhEYXRhLmdldEFsbCgncHJvZHVjdCcpLCBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xyXG4gICAgICAgICAgICBhamF4RGF0YS5hcHBlbmQoJ3Byb2R1Y3RzW10nLCB2YWx1ZSk7XHJcbiAgICAgICAgfSlcclxuICAgICAgICBhamF4RGF0YS5kZWxldGUoJ3Byb2R1Y3QnKTtcclxuICAgICAgICAkLmVhY2goYWpheERhdGEuZ2V0QWxsKCdwcm9kdWNlcicpLCBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xyXG4gICAgICAgICAgICBhamF4RGF0YS5hcHBlbmQoJ3Byb2R1Y2Vyc1tdJywgdmFsdWUpO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgYWpheERhdGEuZGVsZXRlKCdwcm9kdWNlcicpO1xyXG4gICAgICAgICQuZWFjaChhamF4RGF0YS5nZXRBbGwoJ2hvb3JleWNhTmFtZScpLCBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xyXG4gICAgICAgICAgICBhamF4RGF0YS5hcHBlbmQoJ2hvb3JleWNhTmFtZXNbXScsIHZhbHVlKTtcclxuICAgICAgICB9KVxyXG4gICAgICAgIGFqYXhEYXRhLmRlbGV0ZSgnaG9vcmV5Y2FOYW1lJyk7XHJcblxyXG4gICAgICAgIC8vYWpheERhdGEuYXBwZW5kKCdfdG9rZW4nLCByb290LmNvbnRhaW5lci5maW5kKCdpbnB1dFtuYW1lPV90b2tlbl0nKS52YWwoKSk7XHJcblxyXG4gICAgICAgIC8qXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICQoQ1NTU2VsZWN0b3JGb3JtICsgJyBpbnB1dFtkYXRhLWlucHV0bWFza10nKS5lYWNoKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBpbmRleEtleSA9ICQodGhpcykuYXR0cignbmFtZScpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFqYXhEYXRhLmdldChpbmRleEtleSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhamF4RGF0YS5zZXQoaW5kZXhLZXksIGFqYXhEYXRhLmdldChpbmRleEtleSkucmVwbGFjZSgvW18gXSskL2csIFwiXCIpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgKi9cclxuICAgICAgICByZXR1cm4gYWpheERhdGE7XHJcblxyXG4gICAgfVxyXG4gICAgdGhpcy5nZXRBamF4RGF0YUpzb249ZnVuY3Rpb24oKXtcclxuXHJcbiAgICAgICAgbGV0IGFqYXhEYXRhPXJvb3QuZm9ybURhdGFUb0RhdGFPYmplY3RBUElDYWxsKCcuUHJvZHVjdExpc3RGb3JtJyk7XHJcbiAgICAgICAgY29uc29sZS5sb2coJz09PT09PT09PT09PT09PT09PT09PT0nKTtcclxuICAgICAgICBmb3IgKGxldCBwYWlyIG9mIGFqYXhEYXRhLmVudHJpZXMoKSkge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhwYWlyWzBdKyAnLCAnICsgcGFpclsxXSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgb2JqZWN0ID0ge307XHJcbiAgICAgICAgYWpheERhdGEuZm9yRWFjaCgodmFsdWUsIGtleSkgPT4ge1xyXG4gICAgICAgICAgICAvLyBSZWZsZWN0LmhhcyBpbiBmYXZvciBvZjogb2JqZWN0Lmhhc093blByb3BlcnR5KGtleSlcclxuICAgICAgICAgICAgaWYoIVJlZmxlY3QuaGFzKG9iamVjdCwga2V5KSl7XHJcbiAgICAgICAgICAgICAgICBvYmplY3Rba2V5XSA9IHZhbHVlO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmKCFBcnJheS5pc0FycmF5KG9iamVjdFtrZXldKSl7XHJcbiAgICAgICAgICAgICAgICBvYmplY3Rba2V5XSA9IFtvYmplY3Rba2V5XV07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgb2JqZWN0W2tleV0ucHVzaCh2YWx1ZSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgbGV0IGFqYXhEYXRhSnNvbiA9IEpTT04uc3RyaW5naWZ5KG9iamVjdCk7XHJcbiAgICAgICAgcmV0dXJuIGFqYXhEYXRhSnNvbjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnJlcXVlc3RQcm9kdWN0cz1mdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgbGV0IGFqYXhVcmw9T3B0cy5VUkwuZ2V0RGF0YVRhYmxlQ29udGVudDtcclxuICAgICAgICBsZXQgYWpheE1ldGhvZD0nR0VUJztcclxuICAgICAgICAvL3Rva2VuIGZvcm1kYXRhYmEhXHJcbiAgICAgICAgZGVidWcoYWpheFVybCk7XHJcblxyXG4gICAgICAgIGFqYXhEYXRhSnNvbj1yb290LmdldEFqYXhEYXRhSnNvbigpO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKGFqYXhEYXRhSnNvbik7XHJcblxyXG4gICAgICAgIGRhdGFUYWJsZUNTU1NlbGVjdG9yPU9wdHMuY29udGFpbmVyQ3NzU2VsZWN0b3IrJyAuZGF0YVRhYmxlJzsgLy9cclxuICAgICAgICBjb25zb2xlLmxvZyhkYXRhVGFibGVDU1NTZWxlY3RvciApO1xyXG5cclxuICAgICAgICBsZXQgY29sTnVtPSQoZGF0YVRhYmxlQ1NTU2VsZWN0b3IrJyB0aGVhZCB0aCcpLmxlbmd0aDsgLy9idXR0b25zIGluc2VydCBwb3NpdGlvbiBuZWVkXHJcbiAgICAgICAgQVBQLnNldE9wdHMoe1xyXG4gICAgICAgICAgICBkYXRhdGFibGVSb3dBY3Rpb25CdXR0b25DbGlja0NhbGxCYWNrOnJvb3QuZGF0YXRhYmxlUm93QWN0aW9uQnV0dG9uQ2xpY2ssXHJcbiAgICAgICAgfSlcclxuICAgICAgICBsZXQgb3JkZXJEaXJlY3RpdmU9T3B0cy5kYXRhVGFibGUub3JkZXJEaXJlY3RpdmU7XHJcbiAgICAgICAgLypcclxuICAgICAgICBpZih0eXBlb2Ygb3B0aW9uc1snb3JkZXJEaXJlY3RpdmUnXSE9J3VuZGVmaW5lZCcpe1xyXG4gICAgICAgICAgICBvcmRlckRpcmVjdGl2ZT1vcHRpb25zWydvcmRlckRpcmVjdGl2ZSddO1xyXG4gICAgICAgIH1cclxuICAgICAgICAqL1xyXG5cclxuICAgICAgICBpZighcm9vdC5kYXRhVGFibGUpe1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZygnWFhYWFhYWFhYWFhYWFhYWFhYWFggTmluY3MgRGF0YXRhYmxlJyk7XHJcbiAgICAgICAgICAgIHJvb3QuZGF0YVRhYmxlPVxyXG4gICAgICAgICAgICAgICAgJChkYXRhVGFibGVDU1NTZWxlY3RvcikuRGF0YVRhYmxlKCB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGFuZ3VhZ2U6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiAnLy9jZG4uZGF0YXRhYmxlcy5uZXQvcGx1Zy1pbnMvMS4xMC4yNC9pMThuL0h1bmdhcmlhbi5qc29uJ1xyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcblxyXG4gICAgICAgICAgICAgICAgICAgIC8vXCJhamF4XCI6IFwie3thc3NldCgnZXhhcG1sZTIuanNvbicpfX1cIixcclxuICAgICAgICAgICAgICAgICAgICBcImFqYXhcIjp7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHVybDogT3B0cy5VUkwuZ2V0RGF0YVRhYmxlQ29udGVudCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YTogZnVuY3Rpb24gKGQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCctLS0qKioqKiotLS0tJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhBUFAuUHJvZHVjdEFkbWluLmdldEFqYXhEYXRhSnNvbigpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAkLmV4dGVuZCh7fSwgZCwge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFqYXhEYXRhOiBBUFAuUHJvZHVjdEFkbWluLmdldEFqYXhEYXRhSnNvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IGFqYXhNZXRob2RcclxuICAgICAgICAgICAgICAgICAgICAgICAgLypcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiBhamF4RGF0YSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgKi9cclxuICAgICAgICAgICAgICAgICAgICB9ICxcclxuICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJTaWRlOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICAgIFwiY29sdW1uRGVmc1wiOiBbXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwidGFyZ2V0c1wiOiBjb2xOdW0tMSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZGVyYWJsZTogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInJlbmRlclwiOiBmdW5jdGlvbiAoIGRhdGEsIHR5cGUsIHJvdyApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnV0dG9ucz1BUFAuZGF0YXRhYmxlQWRkUm93RWRpdEJ1dHRvbigwLGFyZ3VtZW50cyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGJ1dHRvbnM7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInRhcmdldHNcIjogMSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwicmVuZGVyXCI6IGZ1bmN0aW9uICggZGF0YSwgdHlwZSwgcm93ICkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0eXBlID09PSBcInNvcnRcIiA/IGRhdGEubGF0aW5pc2UoKSA6IGRhdGE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvL3sgXCJ2aXNpYmxlXCI6IGZhbHNlLCAgXCJ0YXJnZXRzXCI6IFsgMCBdIH1cclxuICAgICAgICAgICAgICAgICAgICBdLFxyXG4gICAgICAgICAgICAgICAgICAgIGJ1dHRvbnM6e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBidXR0b25zOiBbXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZXhjZWwnLCdwZGYnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dGVuZDogJ3ByaW50JyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL3RleHQ6ICdQcmludCBjdXJyZW50IHBhZ2UnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0aXRsZSc6ICd0aXRsZSBjdXN0b20gdGV4dCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21lc3NhZ2VUb3AnOiAnTWVzc2FnZSBPbiBUb3AnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG9QcmludDogdHJ1ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgXVxyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgXCJjb2x1bW5zXCI6IFtcclxuICAgICAgICAgICAgICAgICAgICAgICAgeyBcImRhdGFcIjogXCJpZFwifSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgeyBcImRhdGFcIjogXCJuYW1lXCIgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgeyBcImRhdGFcIjogXCJob29yZXljYUlkXCIgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAge1wiZGF0YVwiOiBcInByb2R1Y3RHcm91cFwifSxcclxuICAgICAgICAgICAgICAgICAgICAgICAge1wiZGF0YVwiOiBcInN1cHBsaWVyTmFtZVwifSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgeyBcImRhdGFcIjogXCJwcmljZVwiIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHsgXCJkYXRhXCI6IFwiY3JlYXRlZF9hdFwiIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgXSxcclxuICAgICAgICAgICAgICAgICAgICBcIm9yZGVyXCI6IG9yZGVyRGlyZWN0aXZlLFxyXG4gICAgICAgICAgICAgICAgICAgIFwic3RhdGVTYXZlXCI6IHRydWUsXHJcbiAgICAgICAgICAgICAgICAgICAgXCJkcmF3Q2FsbGJhY2tcIjogZnVuY3Rpb24oIHNldHRpbmdzICkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBBUFAuZGF0YXRhYmxlQWRkUm93QWN0aW9uKGRhdGFUYWJsZUNTU1NlbGVjdG9yKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcm9vdC5zaG93UmVzdWx0Q29udGFpbmVyKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdkcmF3Q2FsbGJhY2snKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9ICk7XHJcblxyXG5cclxuICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coJ1hYWFhYWFhYWFhYWFhYWFhYWFhYIHZhbiBEYXRhdGFibGUnKTtcclxuICAgICAgICAgICAgLy9yb290LmRhdGFUYWJsZS5hamF4LnJlbG9hZCgpO1xyXG4gICAgICAgICAgICByb290LmRhdGFUYWJsZS5kcmF3KCk7XHJcbiAgICAgICAgfVxyXG5cclxuXHJcbiAgICB9XHJcbiAgICB0aGlzLnByb2Nlc3NSZXNwb25zZT1mdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuY2xpY2tTYXZlQnV0dG9uPWZ1bmN0aW9uIChldmVudCkge1xyXG4gICAgICAgIGRlYnVnKCdTYXZlIGNsaWNrZWQnKTtcclxuXHJcbiAgICAgICAgbGV0IENTU1NlbGVjdG9yRm9ybT1PcHRzLmNvbnRhaW5lckNzc1NlbGVjdG9yKycgLnByb2R1Y3RGb3JtJztcclxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgIGlmICgkKENTU1NlbGVjdG9yRm9ybSlbMF0uY2hlY2tWYWxpZGl0eSgpID09PSBmYWxzZSkge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZygndmFsaWRhdG9uIGZhbHNlJyk7XHJcbiAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coJ3ZhbGlkYXRvbiBvaycpO1xyXG4gICAgICAgICAgICAvL2RvIHlvdXIgYWpheCBzdWJtaXRpb24gaGVyZVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IGFqYXhEYXRhPXJvb3QuZm9ybURhdGFUb0RhdGFPYmplY3RBUElDYWxsKCcucHJvZHVjdEZvcm0nKTtcclxuICAgICAgICBsZXQgYWpheFVybD1PcHRzLlVSTC5zdG9yZTtcclxuICAgICAgICBsZXQgYWpheE1ldGhvZD1cIlBPU1RcIjtcclxuICAgICAgICBpZihyb290LlByb2R1Y3QuaWQpe1xyXG4gICAgICAgICAgICBhamF4VXJsPU9wdHMuVVJMLnVwZGF0ZS5yZXBsYWNlKCclaWQlJyxyb290LlByb2R1Y3QuaWQpO1xyXG4gICAgICAgICAgICAvL2FqYXhNZXRob2Q9XCJQVVRcIjtcclxuICAgICAgICAgICAgLy9hamF4RGF0YT1uZXcgRm9ybURhdGEoJChDU1NTZWxlY3RvckZvcm0pWzBdKTtcclxuICAgICAgICAgICAgYWpheERhdGEuYXBwZW5kKCdfbWV0aG9kJywnUFVUJyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBkZWJ1ZyhhamF4TWV0aG9kKTtcclxuICAgICAgICBkZWJ1ZyhhamF4RGF0YSk7XHJcblxyXG4gICAgICAgICQuYWpheCh7XHJcbiAgICAgICAgICAgIHVybDphamF4VXJsLFxyXG4gICAgICAgICAgICBkYXRhOmFqYXhEYXRhLFxyXG4gICAgICAgICAgICB0eXBlOmFqYXhNZXRob2QsXHJcbiAgICAgICAgICAgIGNvbnRlbnRUeXBlOmZhbHNlLFxyXG4gICAgICAgICAgICBwcm9jZXNzRGF0YTogZmFsc2UsXHJcbiAgICAgICAgICAgIGhlYWRlcnM6IHtcclxuICAgICAgICAgICAgICAgIC8vJ1gtQ1NSRi1UT0tFTic6ICQoJ2lucHV0W25hbWU9XCJfdG9rZW5cIl0nKS52YWwoKVxyXG4gICAgICAgICAgICAgICAgJ1gtQ1NSRi1UT0tFTic6IE9wdHMudG9rZW5cclxuICAgICAgICAgICAgfSxcclxuXHJcbiAgICAgICAgICAgIHN1Y2Nlc3M6ZnVuY3Rpb24gKGRhdGEpe1xyXG4gICAgICAgICAgICAgICAgZGVidWcoZGF0YSk7XHJcbiAgICAgICAgICAgICAgICBpZihkYXRhLnN1Y2Nlc3M9PXRydWUpe1xyXG4gICAgICAgICAgICAgICAgICAgIC8vT3B0cy5vbkFmdGVySW5pdFZpZXdEZXRhaWxzPXJvb3QuYXV0b2ZpbGxEZXRhaWxzO1xyXG4gICAgICAgICAgICAgICAgICAgIE9wdHMuZGF0YVRhYmxlLm9yZGVyRGlyZWN0aXZlPVswLCAnZGVzYyddO1xyXG4gICAgICAgICAgICAgICAgICAgIFRvYXN0LmNyZWF0ZSh7IHRpdGxlOiBcIlNpa2VyZXMgcsO2Z3rDrXTDqXMhXCIsIG1lc3NhZ2U6IGFqYXhEYXRhLmdldCgnbmFtZScpK1wiIG5ldsWxIHRlcm3DqWsgZWxtZW50dmVcIiwgc3RhdHVzOiBUT0FTVF9TVEFUVVMuU1VDQ0VTUywgdGltZW91dDogNTAwMCB9KTtcclxuLy8gICAgICAgICAgICAgICAgICAgICAgICBBUFAubG9hZE1haW5Db250ZW50KE9wdHMuVVJMLmluZGV4Kyc/aW5pdD0wJyxyb290LmluaXRWaWV3TGlzdCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbn1cclxuXHJcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLElBQUcsT0FBT0EsT0FBTyxLQUFHLFdBQVcsRUFBQztFQUFBLElBQ3RCQSxRQUFPLDBCQUFBQyxVQUFBO0lBRVQ7QUFDUjtBQUNBO0lBQ1EsU0FBQUMsU0FBYUMsSUFBSSxFQUFDQyxPQUFPLEVBQUU7TUFBQSxJQUFBQyxLQUFBO01BQUFD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\n//# sourceURL=webpack-internal:///./resources/js/admin/product.js\n\n}"); /***/ }, @@ -55,7 +55,7 @@ eval("{function _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"fun \********************************************/ () { -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(\"Kapcsolat tartó hozzáadva!\", contactData.name + \" nevű kapocsolattartó hozzáadva\", TOAST_STATUS.SUCCESS, 5000);\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(\"Kapcsolat adatai módosítva!\", contactData.name + \" nevű kapocsolattartó módosítva\", TOAST_STATUS.SUCCESS, 5000);\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(\"Cím hozzáadva!\", ItemData.street + \" hozzáadva\", TOAST_STATUS.SUCCESS, 5000);\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(\"cím adatai módosítva!\", itemData.street + \" módosítva\", TOAST_STATUS.SUCCESS, 5000);\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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9yZXNvdXJjZXMvanMvYWRtaW4vcHJvZml0Q2VudGVyLmpzIiwibmFtZXMiOlsiRGF0YU1vZGVsUHJvZml0Q2VudGVyIiwiX0RhdGFNb2RlbCIsIl9EYXRhTW9kZWxQcm9maXRDZW50ZXIiLCJkYXRhIiwib3B0aW9ucyIsIl90aGlzIiwiX2NsYXNzQ2FsbENoZWNrIiwiX2NhbGxTdXBlciIsImNvbnRhY3QiLCJhZGRyZXNzIiwiY29uc29sZSIsImxvZyIsImNvbnN0cnVjdG9yIiwibmFtZSIsIl9pbmhlcml0cyIsIl9jcmVhdGVDbGFzcyIsIkRhdGFNb2RlbCIsIndpbmRvdyIsIlByb2ZpdENlbnRlckFkbWluIiwiUHJvZml0Q2VudGVySXRlbSIsIk9wdHMiLCJ0b2tlbiIsImNvbnRhaW5lckNzc1NlbGVjdG9yIiwidGVzdE1vZGUiLCJVUkwiLCJnZXREYXRhVGFibGVDb250ZW50IiwiaW5kZXgiLCJzaG93IiwiZWRpdCIsImNyZWF0ZSIsInN0b3JlIiwidXBkYXRlIiwiZGVzdHJveSIsImRhdGFUYWJsZSIsIm9yZGVyRGlyZWN0aXZlIiwib25BZnRlckluaXRWaWV3RGV0YWlscyIsIlByb2ZpdENlbnRlciIsInJvb3QiLCJjb250YWN0UG9wdXBXb3JrZmxvdyIsImFkZHJlc3NQb3B1cFdvcmtmbG93IiwiQ1NTU2VsZWN0b3JGb3JtIiwiZGF0YVRhYmxlQ1NTU2VsZWN0b3IiLCJjb25zdHJ1Y3QiLCIkIiwiZXh0ZW5kIiwiQVBQIiwiZ2V0T3B0cyIsImdldERhdGEiLCJpbml0IiwiaW5pdFZpZXdMaXN0IiwiY2xpY2tOZXciLCJkZWJ1ZyIsImxvYWRNYWluQ29udGVudCIsImNsaWNrTmV3Q2FsbEJhY2siLCJpbml0Vmlld0RldGFpbHMiLCJTdXBwbGllckl0ZW0iLCJDb250YWN0UG9wVXAiLCJhY3RpdmUiLCJvbkFmdGVyU2F2ZSIsImNvbnRhY3RBY3Rpb24iLCJyZW5kZXJDb250YWN0IiwiYmluZCIsInNldENvbnRhY3RQb3B1cFdvcmtmbG93IiwiY2xlYXJEYXRhIiwiQWRkcmVzc1BvcFVwIiwiYWRkcmVzc0FjdGlvbiIsInJlbmRlckFkZHJlc3MiLCJzZXRBZGRyZXNzUG9wdXBXb3JrZmxvdyIsInRvb2x0aXAiLCJpbml0UmFkaW9CdXR0b25zIiwib25DaGFuZ2UiLCJ2YWx1ZSIsIm5vZGUiLCJhZGRDbGFzcyIsInJlbW92ZUNsYXNzIiwiaW5wdXRtYXNrIiwib25pbmNvbXBsZXRlIiwidmFsIiwibGVuZ3RoIiwib25jb21wbGV0ZSIsIm9uY2xlYXJlZCIsIm9mZiIsIm9uIiwiY2xpY2tTYXZlQnV0dG9uIiwic2V0RGV0YWlsc1ZpZXdEYXRhIiwibmVlZFRvU2V0IiwiZWFjaCIsIm5vdGUiLCJjYW5TZWUiLCJjbGljayIsImhvb3JleWNhRGF0YUFjdGl2ZSIsImF0dHIiLCJhZGRyZXNzRXF1YWwiLCJtdWx0aUFkZHJlc3MiLCJzdXBwbGllciIsInN1cHBsaWVycyIsInB1c2giLCJlc2NhcGVTZWxlY3RvciIsInByb3AiLCJyZXNldENvbnRhY3RUYWJsZSIsInJlbW92ZSIsInJvd051bSIsImNvbnRhY3REYXRhIiwidGVtcGxhdGUiLCJodG1sIiwicmVuZGVyIiwiTXVzdGFjaGUiLCJhcHBlbmQiLCJiaW5kQ29udGFjdENsaWNrQWN0aW9uIiwidW5iaW5kIiwiY29udGFjdERlbGV0ZUNsaWNrIiwiY29udGFjdEVkaXRDbGljayIsImV2ZW50Iiwicm93IiwiY2xvc2VzdCIsImlkIiwiZmluZCIsImZpbHRlciIsImFyciIsImdldENvbnRhY3RQb3B1cFdvcmtmbG93Iiwic3RhdHVzIiwibG9hZERhdGEiLCJhZGRDb250YWN0IiwiZWRpdENvbnRhY3QiLCJUb2FzdCIsImVuYWJsZVRpbWVycyIsIlRPQVNUX1NUQVRVUyIsIlNVQ0NFU1MiLCJuZXdDb250YWN0cyIsInJlc2V0QWRkcmVzc1RhYmxlIiwiaXRlbURhdGEiLCJiaW5kQWRkcmVzc0NsaWNrQWN0aW9uIiwiYWRkcmVzc0RlbGV0ZUNsaWNrIiwiYWRkcmVzc0VkaXRDbGljayIsImdldEFkZHJlc3NQb3B1cFdvcmtmbG93IiwiYWRkQWRkcmVzcyIsImVkaXRBZGRyZXNzIiwiSXRlbURhdGEiLCJzdHJlZXQiLCJuZXdJdGVtIiwiYXJndW1lbnRzIiwidW5kZWZpbmVkIiwiY29sTnVtIiwic2V0T3B0cyIsImRhdGF0YWJsZUFjdGlvbkJ1dHRvbkNsaWNrQ2FsbEJhY2siLCJkYXRhdGFibGVSb3dBY3Rpb25CdXR0b25DbGlja0NhbGxCYWNrIiwiZGF0YXRhYmxlUm93QWN0aW9uQnV0dG9uQ2xpY2siLCJEYXRhVGFibGUiLCJsYW5ndWFnZSIsInVybCIsInR5cGUiLCJidXR0b25zIiwiZGF0YXRhYmxlQWRkUm93VHJhc2hCdXR0b24iLCJkYXRhdGFibGVBZGRSb3dFZGl0QnV0dG9uIiwibGF0aW5pc2UiLCJhdXRvUHJpbnQiLCJ0ZXh0IiwiY2xhc3NOYW1lIiwiYXBpIiwiY29uZmlnIiwiYWN0aW9uIiwiZSIsImR0IiwiZHJhd0NhbGxiYWNrIiwic2V0dGluZ3MiLCJkYXRhdGFibGVBZGRSb3dBY3Rpb24iLCJjdXJyZW50VGFyZ2V0IiwicGFyZW50cyIsInJvd0RhdGEiLCJhY3Rpb25OYW1lIiwiY2FwaXRhbGl6ZSIsImRhdGF0YWJsZVJvd0FjdGlvbkVkaXQiLCJhamF4VXJsIiwicmVwbGFjZSIsImRhdGF0YWJsZVJvd0FjdGlvbkRlbGV0ZSIsImFqYXhEYXRhIiwiX3Rva2VuIiwiYWpheCIsIm1ldGhvZCIsInN1Y2Nlc3MiLCJkcmF3IiwicHJldmVudERlZmF1bHQiLCJjaGVja1ZhbGlkaXR5IiwicmVwb3J0VmFsaWRpdHkiLCJ0aXRsZSIsIm1lc3NhZ2UiLCJEQU5HRVIiLCJ0aW1lb3V0Iiwic3RvcFByb3BhZ2F0aW9uIiwiZm9ybURhdGFUb0RhdGFPYmplY3RBUElDYWxsIiwiYWpheE1ldGhvZCIsInRhYmxlIiwiT2JqZWN0IiwiZnJvbUVudHJpZXMiLCJjb250ZW50VHlwZSIsInByb2Nlc3NEYXRhIiwiaGVhZGVycyIsImdldCIsIkZvcm1EYXRhIiwiZ2V0QWxsIiwia2V5IiwiaW5kZXhLZXkiLCJzZXQiXSwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL3Jlc291cmNlcy9qcy9hZG1pbi9wcm9maXRDZW50ZXIuanM/Y2QxNSJdLCJzb3VyY2VzQ29udGVudCI6WyJpZih0eXBlb2YgRGF0YU1vZGVsUHJvZml0Q2VudGVyPT09J3VuZGVmaW5lZCcpe1xyXG4gICAgY2xhc3MgRGF0YU1vZGVsUHJvZml0Q2VudGVyIGV4dGVuZHMgRGF0YU1vZGVse1xyXG5cclxuICAgICAgICAvKlxyXG4gICAgICAgICAqIENvbnN0cnVjdG9yXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgY29uc3RydWN0b3IgKGRhdGEsb3B0aW9ucykge1xyXG4gICAgICAgICAgICBzdXBlcihkYXRhLG9wdGlvbnMpXHJcbiAgICAgICAgICAgIGlmKHR5cGVvZiB0aGlzLmNvbnRhY3QgPT09XCJ1bmRlZmluZWRcIil7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvbnRhY3Q9W107XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYodHlwZW9mIHRoaXMuYWRkcmVzcyA9PT1cInVuZGVmaW5lZFwiKXtcclxuICAgICAgICAgICAgICAgIHRoaXMuYWRkcmVzcz1bXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyh0aGlzLmNvbnN0cnVjdG9yLm5hbWUrJyBjb25zdHJ1Y3RvciBjYWxsZWQnKTtcclxuICAgICAgICB9O1xyXG4gICAgfTtcclxuICAgIHdpbmRvdy5EYXRhTW9kZWxQcm9maXRDZW50ZXI9RGF0YU1vZGVsUHJvZml0Q2VudGVyO1xyXG59XHJcblxyXG53aW5kb3cuUHJvZml0Q2VudGVyQWRtaW49ZnVuY3Rpb24gKG9wdGlvbnMsUHJvZml0Q2VudGVySXRlbSkge1xyXG4gICAgLypcclxuICAgICAqIFZhcmlhYmxlcyBhY2Nlc3NpYmxlXHJcbiAgICAgKiBpbiB0aGUgY2xhc3NcclxuICAgICAqL1xyXG4gICAgbGV0IE9wdHMgPSB7XHJcbiAgICAgICAgdG9rZW46IG51bGwsXHJcbiAgICAgICAgY29udGFpbmVyQ3NzU2VsZWN0b3I6ICcuY29udGFpbmVyUHJvZml0Q2VudGVyJyxcclxuICAgICAgICB0ZXN0TW9kZTogZmFsc2UsXHJcbiAgICAgICAgVVJMOiB7XHJcbiAgICAgICAgICAgIGdldERhdGFUYWJsZUNvbnRlbnQ6ICcnLFxyXG4gICAgICAgICAgICBpbmRleDogJycsXHJcbiAgICAgICAgICAgIHNob3c6ICcnLFxyXG4gICAgICAgICAgICBlZGl0OiAnJyxcclxuICAgICAgICAgICAgY3JlYXRlOiAnJyxcclxuICAgICAgICAgICAgc3RvcmU6ICcnLFxyXG4gICAgICAgICAgICB1cGRhdGU6ICcnLFxyXG4gICAgICAgICAgICBkZXN0cm95OiAnJyxcclxuICAgICAgICB9LFxyXG4gICAgICAgIGRhdGFUYWJsZToge1xyXG4gICAgICAgICAgICBvcmRlckRpcmVjdGl2ZTogWzEsICdhc2MnXVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgb25BZnRlckluaXRWaWV3RGV0YWlsczogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICBsZXQgUHJvZml0Q2VudGVyID0ge307XHJcbiAgICBsZXQgcm9vdCA9IHRoaXM7XHJcbiAgICBsZXQgY29udGFjdFBvcHVwV29ya2Zsb3cgPSAnbmV3JztcclxuICAgIGxldCBhZGRyZXNzUG9wdXBXb3JrZmxvdyA9ICduZXcnO1xyXG4gICAgbGV0IENTU1NlbGVjdG9yRm9ybT0nJztcclxuICAgIGxldCBkYXRhVGFibGVDU1NTZWxlY3Rvcj0nJztcclxuICAgIC8qXHJcbiAgICAgKiBDb25zdHJ1Y3RvclxyXG4gICAgICovXHJcbiAgICB0aGlzLmNvbnN0cnVjdCA9IGZ1bmN0aW9uIChvcHRpb25zLCBQcm9maXRDZW50ZXJJdGVtKSB7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ1Byb2ZpdENlbnRlckFkbWluIGNvbnN0cnVjdG9yIGNhbGxlZCcpO1xyXG4gICAgICAgICQuZXh0ZW5kKE9wdHMsIG9wdGlvbnMpO1xyXG4gICAgICAgIGlmICghUHJvZml0Q2VudGVySXRlbSkge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZygnUHJvZml0Q2VudGVydCBsZXRyZSBrZWxsZXQgaG96bmkgJyk7XHJcbiAgICAgICAgICAgIGlmICghQVBQLlByb2ZpdENlbnRlcikge1xyXG4gICAgICAgICAgICAgICAgQVBQLlByb2ZpdENlbnRlciA9IG5ldyB3aW5kb3cuRGF0YU1vZGVsUHJvZml0Q2VudGVyKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcm9vdC5Qcm9maXRDZW50ZXIgPSBBUFAuUHJvZml0Q2VudGVyO1xyXG4gICAgICAgIH1cclxuICAgICAgICBDU1NTZWxlY3RvckZvcm09T3B0cy5jb250YWluZXJDc3NTZWxlY3RvcisnIC5wcm9maXRDZW50ZXJGb3JtJztcclxuICAgIH07XHJcbiAgICB0aGlzLmdldE9wdHMgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIE9wdHM7XHJcbiAgICB9XHJcbiAgICB0aGlzLmdldERhdGE9ZnVuY3Rpb24gKCl7XHJcbiAgICAgICAgcmV0dXJuIHJvb3QuUHJvZml0Q2VudGVyO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuaW5pdD1mdW5jdGlvbiAob3B0aW9ucyxQcm9maXRDZW50ZXJJdGVtKXtcclxuICAgICAgICAkLmV4dGVuZChPcHRzLCBvcHRpb25zKTtcclxuXHJcbiAgICAgICAgaWYoT3B0cy50ZXN0TW9kZSl7XHJcbiAgICAgICAgICAgIHJldHVybiByb290LnRlc3RNb2RlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmKFByb2ZpdENlbnRlckl0ZW0pe1xyXG4gICAgICAgICAgICByb290LlByb2ZpdENlbnRlcj1Qcm9maXRDZW50ZXJJdGVtXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJvb3QuaW5pdFZpZXdMaXN0KCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmNsaWNrTmV3PWZ1bmN0aW9uICgpIHtcclxuICAgICAgICBkZWJ1ZygnY2xpY2tOZXcnKTtcclxuICAgICAgICBBUFAubG9hZE1haW5Db250ZW50KE9wdHMuVVJMLmNyZWF0ZSxyb290LmNsaWNrTmV3Q2FsbEJhY2spO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuY2xpY2tOZXdDYWxsQmFjaz1mdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgZGVidWcoJ2NhbGxiYWNrTmV3Jyk7XHJcbiAgICAgICAgcm9vdC5Qcm9maXRDZW50ZXI9bmV3IHdpbmRvdy5EYXRhTW9kZWxQcm9maXRDZW50ZXIoKTtcclxuICAgICAgICByb290LmluaXRWaWV3RGV0YWlscygpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuaW5pdFZpZXdEZXRhaWxzPWZ1bmN0aW9uIChvcHRpb25zLFN1cHBsaWVySXRlbSl7XHJcbiAgICAgICAgZGVidWcoJyoqY2FsbCBpbml0Vmlld0RldGFpbHMgJyk7XHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQ29udGFjdCBQb3B1cCBzZXR1cFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGlmKCFBUFAuQ29udGFjdFBvcFVwKXtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coJ25pbmNzIEFQUC5Db250YWN0UG9wVXAnKVxyXG4gICAgICAgICAgICBBUFAuQ29udGFjdFBvcFVwID0gbmV3IHdpbmRvdy5Db250YWN0UG9wVXAoKTtcclxuICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coJ21hciB2YW4gIEFQUC5Db250YWN0UG9wVXAnKVxyXG4gICAgICAgIH1cclxuICAgICAgICBBUFAuQ29udGFjdFBvcFVwLmluaXQoe1xyXG4gICAgICAgICAgICBhY3RpdmU6dHJ1ZSxcclxuICAgICAgICAgICAgb25BZnRlclNhdmU6cm9vdC5jb250YWN0QWN0aW9uXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcm9vdC5yZW5kZXJDb250YWN0KCk7XHJcbiAgICAgICAgJChDU1NTZWxlY3RvckZvcm0rJyAuYnV0dG9uTmV3Q29udGFjdCcpLmJpbmQoJ2NsaWNrJyxmdW5jdGlvbiAoKXtcclxuICAgICAgICAgICAgQVBQLlByb2ZpdENlbnRlckFkbWluLnNldENvbnRhY3RQb3B1cFdvcmtmbG93KCduZXcnKTtcclxuICAgICAgICAgICAgQVBQLkNvbnRhY3RQb3BVcC5jbGVhckRhdGEoKTtcclxuICAgICAgICAgICAgQVBQLkNvbnRhY3RQb3BVcC5zaG93KCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQWRkcmVzcyBQb3B1cCBzZXR1cFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGlmKCFBUFAuQWRkcmVzc1BvcFVwKXtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coJ25pbmNzIEFQUC5BZGRyZXNzUG9wVXAnKVxyXG4gICAgICAgICAgICBBUFAuQWRkcmVzc1BvcFVwID0gbmV3IHdpbmRvdy5BZGRyZXNzUG9wVXAoKTtcclxuICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coJ21hciB2YW4gIEFQUC5BZGRyZXNzUG9wVXAnKVxyXG4gICAgICAgIH1cclxuICAgICAgICBBUFAuQWRkcmVzc1BvcFVwLmluaXQoe1xyXG4gICAgICAgICAgICBhY3RpdmU6dHJ1ZSxcclxuICAgICAgICAgICAgb25BZnRlclNhdmU6cm9vdC5hZGRyZXNzQWN0aW9uXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcm9vdC5yZW5kZXJBZGRyZXNzKCk7XHJcbiAgICAgICAgJChDU1NTZWxlY3RvckZvcm0rJyAuYnV0dG9uTmV3QWRkcmVzcycpLmJpbmQoJ2NsaWNrJyxmdW5jdGlvbiAoKXtcclxuICAgICAgICAgICAgQVBQLlByb2ZpdENlbnRlckFkbWluLnNldEFkZHJlc3NQb3B1cFdvcmtmbG93KCduZXcnKTtcclxuICAgICAgICAgICAgQVBQLkFkZHJlc3NQb3BVcC5jbGVhckRhdGEoKTtcclxuICAgICAgICAgICAgQVBQLkFkZHJlc3NQb3BVcC5zaG93KCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKi9cclxuXHJcbiAgICAgICAgJCgnW2RhdGEtdG9nZ2xlPVwidG9vbHRpcFwiXScpLnRvb2x0aXAoKTtcclxuICAgICAgICBpbml0UmFkaW9CdXR0b25zKHtcclxuICAgICAgICAgICAgb25DaGFuZ2U6IGZ1bmN0aW9uICh2YWx1ZSxub2RlKSB7XHJcbiAgICAgICAgICAgICAgICBkZWJ1Zyh2YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICBkZWJ1Zyhub2RlKTtcclxuICAgICAgICAgICAgICAgIC8qXHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihub2RlPT09J3Byb2ZpdENlbnRlck11bHRpQWRkcmVzcycpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYodmFsdWU9PTEpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoJy5jb250YWluZXJNdWx0aUFkZHJlc3MnKS5yZW1vdmVDbGFzcygnZC1ub25lJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKCcuY29udGFpbmVyTXVsdGlBZGRyZXNzJykuYWRkQ2xhc3MoJ2Qtbm9uZScpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgKi9cclxuICAgICAgICAgICAgICAgIGlmKG5vZGU9PT0nYWRkcmVzc0VxdWFsJyl7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYodmFsdWU9PTEpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAkKENTU1NlbGVjdG9yRm9ybSsnIC5jb250YWluZXJNdWx0aUFkZHJlc3MnKS5hZGRDbGFzcygnZC1ub25lJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICQoQ1NTU2VsZWN0b3JGb3JtKycgLmNvbnRhaW5lck11bHRpQWRkcmVzc1N3aXRjaCcpLmFkZENsYXNzKCdkLW5vbmUnKTtcclxuICAgICAgICAgICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgJChDU1NTZWxlY3RvckZvcm0rJyAuY29udGFpbmVyTXVsdGlBZGRyZXNzJykucmVtb3ZlQ2xhc3MoJ2Qtbm9uZScpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAkKENTU1NlbGVjdG9yRm9ybSsnIC5jb250YWluZXJNdWx0aUFkZHJlc3NTd2l0Y2gnKS5yZW1vdmVDbGFzcygnZC1ub25lJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgICQoQ1NTU2VsZWN0b3JGb3JtK1wiIDppbnB1dFwiKS5pbnB1dG1hc2soe1xyXG4gICAgICAgICAgICBcIm9uaW5jb21wbGV0ZVwiOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygkKHRoaXMpLmRhdGEoJ3JlcXVpcmVkJykpO1xyXG4gICAgICAgICAgICAgICAgaWYgKCQodGhpcykudmFsKCkubGVuZ3RoID4gMCB8fCAkKHRoaXMpLmRhdGEoJ3JlcXVpcmVkJykgPT09IHRydWUpIHtcclxuICAgICAgICAgICAgICAgICAgICAkKHRoaXMpLmFkZENsYXNzKCdpcy1pbnZhbGlkJyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIFwib25jb21wbGV0ZVwiOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAkKHRoaXMpLnJlbW92ZUNsYXNzKCdpcy1pbnZhbGlkJyk7XHJcbiAgICAgICAgICAgICAgICAkKHRoaXMpLmFkZENsYXNzKCdpcy12YWxpZCcpO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBcIm9uY2xlYXJlZFwiOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnY2xlYXJlZCcpO1xyXG4gICAgICAgICAgICAgICAgJCh0aGlzKS5yZW1vdmVDbGFzcygnaXMtaW52YWxpZCcpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICQoQ1NTU2VsZWN0b3JGb3JtKycgYnV0dG9uLkZvcm1TYXZlQnV0dG9uJykub2ZmKCdjbGljaycpO1xyXG4gICAgICAgICQoQ1NTU2VsZWN0b3JGb3JtKycgYnV0dG9uLkZvcm1TYXZlQnV0dG9uJykub24oJ2NsaWNrJyxyb290LmNsaWNrU2F2ZUJ1dHRvbik7XHJcbi8qXHJcbiAgICAgICAgJChcImlucHV0W25hbWU9bG9nb0ZpbGVdXCIpLmNoYW5nZShmdW5jdGlvbigpe1xyXG4gICAgICAgICAgICBzZXRJbWFnZUZyb21Mb2NhbCh0aGlzLE9wdHMuY29udGFpbmVyQ3NzU2VsZWN0b3IrJyAuaW1hZ2VMb2dvJyk7XHJcbiAgICAgICAgfSk7XHJcbiovXHJcblxyXG4gICAgICAgIC8vT3B0cy5vbkFmdGVySW5pdFZpZXdEZXRhaWxzKCk7XHJcbiAgICAgICAgZGVidWcoJyoqZW5kIGluaXRWaWV3RGV0YWlscyAnKTtcclxuICAgIH1cclxuICAgIHRoaXMuc2V0RGV0YWlsc1ZpZXdEYXRhPWZ1bmN0aW9uICgpIHtcclxuICAgICAgICBkZWJ1Zygnc2V0RGV0YWlsc1ZpZXdEYXRhJyk7XHJcbiAgICAgICAgbGV0IENTU1NlbGVjdG9yRm9ybT1PcHRzLmNvbnRhaW5lckNzc1NlbGVjdG9yKycgLnByb2ZpdENlbnRlckZvcm0nO1xyXG4gICAgICAgIGxldCBuZWVkVG9TZXQ9W1xyXG4gICAgICAgICAgICAnbmFtZScsJ2hvb3JleWNhSWQnLCduYW1lSWQnLFxyXG4gICAgICAgICAgICAnZW1haWwnLCdwb3N0Q29kZScsJ2NpdHknLCdzdHJlZXQnLCdwaG9uZScsJ21vYmlsJ1xyXG4gICAgICAgIF07XHJcbiAgICAgICAgJC5lYWNoKG5lZWRUb1NldCxmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIC8vIGRlYnVnKHRoaXMpOyAvL2FsYXBhZGF0b2sgYmVhbGxpdGFzYW5hayBsb2dvbGFzYVxyXG4gICAgICAgICAgICBpZih0eXBlb2Ygcm9vdC5Qcm9maXRDZW50ZXJbdGhpc10hPSd1bmRlZmluZWQnKXtcclxuLyogLy9hbGFwYWRhdG9rIGJlYWxsaXRhc2FuYWsgbG9nb2xhc2FcclxuICAgICAgICAgICAgICAgIGRlYnVnKHJvb3QuUHJvZml0Q2VudGVyW3RoaXNdKTtcclxuICAgICAgICAgICAgICAgIGRlYnVnKENTU1NlbGVjdG9yRm9ybSsnIGlucHV0W25hbWU9Jyt0aGlzKyddJyk7XHJcbiAgICAgICAgICAgICAgICBkZWJ1ZygkKENTU1NlbGVjdG9yRm9ybSsnIGlucHV0W25hbWU9Jyt0aGlzKyddJykpO1xyXG4qL1xyXG4gICAgICAgICAgICAgICAgJChDU1NTZWxlY3RvckZvcm0rJyBpbnB1dFtuYW1lPScrdGhpcysnXScpLnZhbChyb290LlByb2ZpdENlbnRlclt0aGlzXSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgICAgIGlmKHR5cGVvZiByb290LlByb2ZpdENlbnRlclsnbm90ZSddIT0ndW5kZWZpbmVkJyl7XHJcbiAgICAgICAgICAgICQoQ1NTU2VsZWN0b3JGb3JtKycgdGV4dGFyZWFbbmFtZT1ub3RlXScpLnZhbChyb290LlByb2ZpdENlbnRlci5ub3RlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgJChDU1NTZWxlY3RvckZvcm0rJyAqW2RhdGEtdG9nZ2xlPWNhblNlZV1bZGF0YS10aXRsZT0nK3Jvb3QuUHJvZml0Q2VudGVyLmNhblNlZSsnXScpLmNsaWNrKCk7XHJcbiAgICAgICAgJChDU1NTZWxlY3RvckZvcm0rJyAqW2RhdGEtdG9nZ2xlPWhvb3JleWNhRGF0YUFjdGl2ZV1bZGF0YS10aXRsZT0nK3Jvb3QuUHJvZml0Q2VudGVyLmhvb3JleWNhRGF0YUFjdGl2ZSsnXScpLmNsaWNrKCk7XHJcblxyXG4gICAgICAgIGlmKHR5cGVvZiByb290LlByb2ZpdENlbnRlclsnbG9nb0ZpbGUnXSE9J3VuZGVmaW5lZCcgJiYgKHJvb3QuUHJvZml0Q2VudGVyWydsb2dvRmlsZSddKSl7XHJcbiAgICAgICAgICAgICQoQ1NTU2VsZWN0b3JGb3JtKycgaW1nLmltYWdlTG9nbycpLmF0dHIoJ3NyYycscm9vdC5Qcm9maXRDZW50ZXJbJ2xvZ29GaWxlJ10pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgJChDU1NTZWxlY3RvckZvcm0rJyAqW2RhdGEtdG9nZ2xlPWFkZHJlc3NFcXVhbF1bZGF0YS10aXRsZT0nK3Jvb3QuUHJvZml0Q2VudGVyLmFkZHJlc3NFcXVhbCsnXScpLmNsaWNrKCk7XHJcbiAgICAgICAgJChDU1NTZWxlY3RvckZvcm0rJyAqW2RhdGEtdG9nZ2xlPW11bHRpQWRkcmVzc11bZGF0YS10aXRsZT0nK3Jvb3QuUHJvZml0Q2VudGVyLm11bHRpQWRkcmVzcysnXScpLmNsaWNrKCk7XHJcbiAgICAgICAgLypkZWJ1Zyhyb290LlByb2ZpdENlbnRlci5hZGRyZXNzLmxlbmd0aCk7XHJcbiAgICAgICAgaWYocm9vdC5Qcm9maXRDZW50ZXIuYWRkcmVzcy5sZW5ndGg+MCl7XHJcbiAgICAgICAgICAgICQoQ1NTU2VsZWN0b3JGb3JtKycgKltkYXRhLXRvZ2dsZT1hZGRyZXNzRXF1YWxdW2RhdGEtdGl0bGU9MF0nKS5jbGljaygpO1xyXG4gICAgICAgICAgICBpZihyb290LlByb2ZpdENlbnRlci5hZGRyZXNzLmxlbmd0aD4xKXtcclxuICAgICAgICAgICAgICAgICQoQ1NTU2VsZWN0b3JGb3JtKycgKltkYXRhLXRvZ2dsZT1tdWx0aUFkZHJlc3NdW2RhdGEtdGl0bGU9MV0nKS5jbGljaygpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgICovXHJcbiAgICAgICAgbGV0IHN1cHBsaWVyPVtdO1xyXG4gICAgICAgICQuZWFjaChyb290LlByb2ZpdENlbnRlci5zdXBwbGllcnMsZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBzdXBwbGllci5wdXNoKHRoaXMubmFtZSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgLy8kKENTU1NlbGVjdG9yRm9ybSsnIC5wcm9maXRDZW50ZXJTZWxlY3QnKS52YWwocHJvZml0Q2VudGVyKS5jaGFuZ2UoKTtcclxuICAgICAgICAkLmVhY2goc3VwcGxpZXIsZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAkKCdpbnB1dFt2YWx1ZT1cIicrJC5lc2NhcGVTZWxlY3Rvcih0aGlzKSsnXCJdJykucHJvcCggXCJjaGVja2VkXCIsIHRydWUgKTtcclxuICAgICAgICB9KVxyXG5cclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnJlc2V0Q29udGFjdFRhYmxlPWZ1bmN0aW9uICgpe1xyXG4gICAgICAgICQoQ1NTU2VsZWN0b3JGb3JtKycgLmNvbnRhY3RUYWJsZSB0Ym9keSB0cicpLnJlbW92ZSgpO1xyXG4gICAgICAgIHJvb3QucmVuZGVyQ29udGFjdCgpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5yZW5kZXJDb250YWN0PWZ1bmN0aW9uICgpe1xyXG4gICAgICAgIGxldCByb3dOdW09MTtcclxuICAgICAgICBjb25zb2xlLmxvZygncmVuZGVyaW5nQ29udGFjdHMnKTtcclxuICAgICAgICAkLmVhY2gocm9vdC5Qcm9maXRDZW50ZXIuZ2V0RGF0YSgnY29udGFjdCcpLGZ1bmN0aW9uICgpe1xyXG4gICAgICAgICAgICBsZXQgY29udGFjdERhdGE9dGhpcztcclxuICAgICAgICAgICAgY29udGFjdERhdGEucm93TnVtPXJvd051bTtcclxuICAgICAgICAgICAgbGV0IHRlbXBsYXRlPSQoJ3RlbXBsYXRlW2RhdGEtbmFtZT1cInByb2ZpdENlbnRlckNvbnRhY3RUYWJsZVJvd1wiXScpLmh0bWwoKVxyXG4gICAgICAgICAgICBsZXQgcmVuZGVyPU11c3RhY2hlLnJlbmRlcih0ZW1wbGF0ZSxjb250YWN0RGF0YSk7XHJcbiAgICAgICAgICAgICQoJy5jb250YWN0VGFibGUgdGJvZHknKS5hcHBlbmQocmVuZGVyKTtcclxuICAgICAgICAgICAgcm93TnVtKys7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcm9vdC5iaW5kQ29udGFjdENsaWNrQWN0aW9uKCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5iaW5kQ29udGFjdENsaWNrQWN0aW9uID1mdW5jdGlvbiAoKXtcclxuICAgICAgICAkKCcuY29udGFjdFRhYmxlIC5idXR0b25EZWxldGUnKS51bmJpbmQoJ2NsaWNrJyk7XHJcbiAgICAgICAgJCgnLmNvbnRhY3RUYWJsZSAuYnV0dG9uRGVsZXRlJykuYmluZCgnY2xpY2snLHJvb3QuY29udGFjdERlbGV0ZUNsaWNrKTtcclxuICAgICAgICAkKCcuY29udGFjdFRhYmxlIC5idXR0b25FZGl0JykudW5iaW5kKCdjbGljaycpO1xyXG4gICAgICAgICQoJy5jb250YWN0VGFibGUgLmJ1dHRvbkVkaXQnKS5iaW5kKCdjbGljaycscm9vdC5jb250YWN0RWRpdENsaWNrKTtcclxuXHJcbiAgICB9XHJcbiAgICB0aGlzLmNvbnRhY3REZWxldGVDbGljaz1mdW5jdGlvbiAoZXZlbnQpe1xyXG4gICAgICAgIGxldCByb3c9JCh0aGlzKS5jbG9zZXN0KCd0cicpO1xyXG4gICAgICAgIGxldCBpZD1yb3cuZmluZCgnaW5wdXRbbmFtZT1jb250YWN0SWRdJykudmFsKCk7XHJcbiAgICAgICAgY29uc29sZS5sb2coaWQpO1xyXG4gICAgICAgIHJvb3QuUHJvZml0Q2VudGVyLmNvbnRhY3Q9cm9vdC5Qcm9maXRDZW50ZXIuY29udGFjdC5maWx0ZXIoXHJcbiAgICAgICAgICAgIGZ1bmN0aW9uICh2YWx1ZSxpbmRleCxhcnIpe1xyXG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlLmlkIT09aWQqMSl7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgKTtcclxuICAgICAgICBjb25zb2xlLmxvZyhyb290LlByb2ZpdENlbnRlci5jb250YWN0KTtcclxuICAgICAgICByb3cucmVtb3ZlKCk7XHJcbiAgICAgICAgcm9vdC5yZXNldENvbnRhY3RUYWJsZSgpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5nZXRDb250YWN0UG9wdXBXb3JrZmxvdyA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gY29udGFjdFBvcHVwV29ya2Zsb3c7XHJcbiAgICB9XHJcbiAgICB0aGlzLnNldENvbnRhY3RQb3B1cFdvcmtmbG93ID0gZnVuY3Rpb24gKHN0YXR1cykge1xyXG4gICAgICAgIGNvbnRhY3RQb3B1cFdvcmtmbG93PXN0YXR1cztcclxuICAgIH1cclxuXHJcblxyXG4gICAgdGhpcy5jb250YWN0RWRpdENsaWNrPWZ1bmN0aW9uIChldmVudCl7XHJcbiAgICAgICAgY29uc29sZS5sb2codGhpcyk7XHJcbiAgICAgICAgbGV0IHJvdz0kKHRoaXMpLmNsb3Nlc3QoJ3RyJyk7XHJcbiAgICAgICAgbGV0IGlkPXJvdy5maW5kKCdpbnB1dFtuYW1lPWNvbnRhY3RJZF0nKS52YWwoKTtcclxuICAgICAgICBjb25zb2xlLmxvZyhpZCk7XHJcbiAgICAgICAgcm9vdC5zZXRDb250YWN0UG9wdXBXb3JrZmxvdygnZWRpdCcpO1xyXG4gICAgICAgIEFQUC5Db250YWN0UG9wVXAubG9hZERhdGEoaWQpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5jb250YWN0QWN0aW9uPWZ1bmN0aW9uIChjb250YWN0RGF0YSl7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ25haCBtb3N0IGtlbGxlbmUgbWVnIHZhbGFtaXQgY3NpbmFsbmkuJylcclxuICAgICAgICBpZihyb290LmdldENvbnRhY3RQb3B1cFdvcmtmbG93KCk9PSduZXcnKXtcclxuICAgICAgICAgICAgcm9vdC5hZGRDb250YWN0KGNvbnRhY3REYXRhKTtcclxuICAgICAgICB9ZWxzZSBpZihyb290LmdldENvbnRhY3RQb3B1cFdvcmtmbG93KCk9PSdlZGl0Jyl7XHJcbiAgICAgICAgICAgIHJvb3QuZWRpdENvbnRhY3QoY29udGFjdERhdGEuaWQsY29udGFjdERhdGEpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHRoaXMuYWRkQ29udGFjdD1mdW5jdGlvbiAoY29udGFjdERhdGEpe1xyXG4gICAgICAgIC8qXHJcbiAgICAgICAgZmVsIGtlbGwgdmVubmkgYSBzb3JiYVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHJvb3QuUHJvZml0Q2VudGVyLmNvbnRhY3QucHVzaChjb250YWN0RGF0YSk7XHJcbiAgICAgICAgY29udGFjdERhdGEucm93TnVtPXJvb3QuUHJvZml0Q2VudGVyLmNvbnRhY3QubGVuZ3RoO1xyXG4gICAgICAgIGxldCB0ZW1wbGF0ZT0kKCd0ZW1wbGF0ZVtkYXRhLW5hbWU9XCJwcm9maXRDZW50ZXJDb250YWN0VGFibGVSb3dcIl0nKS5odG1sKClcclxuICAgICAgICBsZXQgcmVuZGVyPU11c3RhY2hlLnJlbmRlcih0ZW1wbGF0ZSxjb250YWN0RGF0YSk7XHJcbiAgICAgICAgJChDU1NTZWxlY3RvckZvcm0rJyAuY29udGFjdFRhYmxlIHRib2R5JykuYXBwZW5kKHJlbmRlcik7XHJcbiAgICAgICAgcm9vdC5iaW5kQ29udGFjdENsaWNrQWN0aW9uKCk7XHJcbiAgICAgICAgVG9hc3QuZW5hYmxlVGltZXJzKGZhbHNlKTtcclxuICAgICAgICBUb2FzdC5jcmVhdGUoXCJLYXBjc29sYXQgdGFydMOzIGhvenrDoWFkdmEhXCIsIGNvbnRhY3REYXRhLm5hbWUrXCIgbmV2xbEga2Fwb2Nzb2xhdHRhcnTDsyBob3p6w6FhZHZhXCIsIFRPQVNUX1NUQVRVUy5TVUNDRVNTLDUwMDApO1xyXG4gICAgfVxyXG4gICAgdGhpcy5lZGl0Q29udGFjdD1mdW5jdGlvbiAoaWQsY29udGFjdERhdGEpe1xyXG5cclxuICAgICAgICBsZXQgbmV3Q29udGFjdHM9W107XHJcbiAgICAgICAgJC5lYWNoKHJvb3QuUHJvZml0Q2VudGVyLmdldERhdGEoJ2NvbnRhY3QnKSxmdW5jdGlvbiAoaW5kZXgpe1xyXG4gICAgICAgICAgICBpZih0aGlzLmlkPT1pZCl7XHJcbiAgICAgICAgICAgICAgICBuZXdDb250YWN0cy5wdXNoKGNvbnRhY3REYXRhKTtcclxuICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICBuZXdDb250YWN0cy5wdXNoKHRoaXMpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcm9vdC5Qcm9maXRDZW50ZXIuY29udGFjdD1uZXdDb250YWN0cztcclxuICAgICAgICByb290LnJlc2V0Q29udGFjdFRhYmxlKCk7XHJcbiAgICAgICAgVG9hc3QuY3JlYXRlKFwiS2FwY3NvbGF0IGFkYXRhaSBtw7Nkb3PDrXR2YSFcIiwgY29udGFjdERhdGEubmFtZStcIiBuZXbFsSBrYXBvY3NvbGF0dGFydMOzIG3Ds2Rvc8OtdHZhXCIsIFRPQVNUX1NUQVRVUy5TVUNDRVNTLDUwMDApO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvKioqKioqKioqKioqKioqXHJcbiAgICAgKlxyXG4gICAgICogQWRkcmVzcyBmdW5jdGlvblxyXG4gICAgICpcclxuICAgICAqL1xyXG4gICAgdGhpcy5yZXNldEFkZHJlc3NUYWJsZT1mdW5jdGlvbiAoKXtcclxuICAgICAgICAkKENTU1NlbGVjdG9yRm9ybSsnIC5hZGRyZXNzVGFibGUgdGJvZHkgdHInKS5yZW1vdmUoKTtcclxuICAgICAgICByb290LnJlbmRlckFkZHJlc3MoKTtcclxuICAgIH1cclxuICAgIHRoaXMucmVuZGVyQWRkcmVzcz1mdW5jdGlvbiAoKXtcclxuICAgICAgICBsZXQgcm93TnVtPTE7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ3JlbmRlcmluZ0FkZHJlc3MnKTtcclxuICAgICAgICAkLmVhY2gocm9vdC5Qcm9maXRDZW50ZXIuZ2V0RGF0YSgnYWRkcmVzcycpLGZ1bmN0aW9uICgpe1xyXG4gICAgICAgICAgICBsZXQgaXRlbURhdGE9dGhpcztcclxuICAgICAgICAgICAgaXRlbURhdGEucm93TnVtPXJvd051bTtcclxuICAgICAgICAgICAgbGV0IHRlbXBsYXRlPSQoJ3RlbXBsYXRlW2RhdGEtbmFtZT1cInByb2ZpdENlbnRlckFkZHJlc3NUYWJsZVJvd1wiXScpLmh0bWwoKVxyXG4gICAgICAgICAgICBkZWJ1ZyhpdGVtRGF0YSk7XHJcbiAgICAgICAgICAgIGxldCByZW5kZXI9TXVzdGFjaGUucmVuZGVyKHRlbXBsYXRlLGl0ZW1EYXRhKTtcclxuICAgICAgICAgICAgJCgnLmFkZHJlc3NUYWJsZSB0Ym9keScpLmFwcGVuZChyZW5kZXIpO1xyXG4gICAgICAgICAgICByb3dOdW0rKztcclxuICAgICAgICB9KTtcclxuICAgICAgICByb290LmJpbmRBZGRyZXNzQ2xpY2tBY3Rpb24oKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmJpbmRBZGRyZXNzQ2xpY2tBY3Rpb24gPWZ1bmN0aW9uICgpe1xyXG4gICAgICAgICQoJy5hZGRyZXNzVGFibGUgLmJ1dHRvbkRlbGV0ZScpLnVuYmluZCgnY2xpY2snKTtcclxuICAgICAgICAkKCcuYWRkcmVzc1RhYmxlIC5idXR0b25EZWxldGUnKS5iaW5kKCdjbGljaycscm9vdC5hZGRyZXNzRGVsZXRlQ2xpY2spO1xyXG4gICAgICAgICQoJy5hZGRyZXNzVGFibGUgLmJ1dHRvbkVkaXQnKS51bmJpbmQoJ2NsaWNrJyk7XHJcbiAgICAgICAgJCgnLmFkZHJlc3NUYWJsZSAuYnV0dG9uRWRpdCcpLmJpbmQoJ2NsaWNrJyxyb290LmFkZHJlc3NFZGl0Q2xpY2spO1xyXG5cclxuICAgIH1cclxuICAgIHRoaXMuYWRkcmVzc0RlbGV0ZUNsaWNrPWZ1bmN0aW9uIChldmVudCl7XHJcbiAgICAgICAgbGV0IHJvdz0kKHRoaXMpLmNsb3Nlc3QoJ3RyJyk7XHJcbiAgICAgICAgbGV0IGlkPXJvdy5maW5kKCdpbnB1dFtuYW1lPVwiYWRkcmVzc0lkW11cIl0nKS52YWwoKTtcclxuICAgICAgICBjb25zb2xlLmxvZyhpZCk7XHJcbiAgICAgICAgcm9vdC5Qcm9maXRDZW50ZXIuYWRkcmVzcz1yb290LlByb2ZpdENlbnRlci5hZGRyZXNzLmZpbHRlcihcclxuICAgICAgICAgICAgZnVuY3Rpb24gKHZhbHVlLGluZGV4LGFycil7XHJcbiAgICAgICAgICAgICAgICBpZiAodmFsdWUuaWQhPWlkKSByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgY29uc29sZS5sb2cocm9vdC5Qcm9maXRDZW50ZXIuYWRkcmVzcyk7XHJcbiAgICAgICAgcm93LnJlbW92ZSgpO1xyXG4gICAgICAgIHJvb3QucmVzZXRBZGRyZXNzVGFibGUoKTtcclxuICAgIH1cclxuICAgIHRoaXMuZ2V0QWRkcmVzc1BvcHVwV29ya2Zsb3cgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIGFkZHJlc3NQb3B1cFdvcmtmbG93O1xyXG4gICAgfVxyXG4gICAgdGhpcy5zZXRBZGRyZXNzUG9wdXBXb3JrZmxvdyA9IGZ1bmN0aW9uIChzdGF0dXMpIHtcclxuICAgICAgICBhZGRyZXNzUG9wdXBXb3JrZmxvdz1zdGF0dXM7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIHRoaXMuYWRkcmVzc0VkaXRDbGljaz1mdW5jdGlvbiAoZXZlbnQpe1xyXG4gICAgICAgIGNvbnNvbGUubG9nKHRoaXMpO1xyXG4gICAgICAgIGxldCByb3c9JCh0aGlzKS5jbG9zZXN0KCd0cicpO1xyXG4gICAgICAgIGxldCBpZD1yb3cuZmluZCgnaW5wdXRbbmFtZT1cImFkZHJlc3NJZFtdXCJdJykudmFsKCk7XHJcbiAgICAgICAgY29uc29sZS5sb2coaWQpO1xyXG4gICAgICAgIHJvb3Quc2V0QWRkcmVzc1BvcHVwV29ya2Zsb3coJ2VkaXQnKTtcclxuICAgICAgICBBUFAuQWRkcmVzc1BvcFVwLmxvYWREYXRhKGlkKTtcclxuICAgIH1cclxuICAgIHRoaXMuYWRkcmVzc0FjdGlvbj1mdW5jdGlvbiAoaXRlbURhdGEpe1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCduYWggbW9zdCBrZWxsZW5lIG1lZyB2YWxhbWl0IGNzaW5hbG5pLicpXHJcbiAgICAgICAgaWYocm9vdC5nZXRBZGRyZXNzUG9wdXBXb3JrZmxvdygpPT0nbmV3Jyl7XHJcbiAgICAgICAgICAgIHJvb3QuYWRkQWRkcmVzcyhpdGVtRGF0YSk7XHJcbiAgICAgICAgfWVsc2UgaWYocm9vdC5nZXRBZGRyZXNzUG9wdXBXb3JrZmxvdygpPT0nZWRpdCcpe1xyXG4gICAgICAgICAgICByb290LmVkaXRBZGRyZXNzKGl0ZW1EYXRhLmlkLGl0ZW1EYXRhKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICB0aGlzLmFkZEFkZHJlc3M9ZnVuY3Rpb24gKEl0ZW1EYXRhKXtcclxuICAgICAgICAvKlxyXG4gICAgICAgIGZlbCBrZWxsIHZlbm5pIGEgc29yYmFcclxuICAgICAgICAgKi9cclxuICAgICAgICByb290LlByb2ZpdENlbnRlci5hZGRyZXNzLnB1c2goSXRlbURhdGEpO1xyXG4gICAgICAgIEl0ZW1EYXRhLnJvd051bT1yb290LlByb2ZpdENlbnRlci5hZGRyZXNzLmxlbmd0aDtcclxuICAgICAgICBsZXQgdGVtcGxhdGU9JCgndGVtcGxhdGVbZGF0YS1uYW1lPVwicHJvZml0Q2VudGVyQWRkcmVzc1RhYmxlUm93XCJdJykuaHRtbCgpXHJcbiAgICAgICAgbGV0IHJlbmRlcj1NdXN0YWNoZS5yZW5kZXIodGVtcGxhdGUsSXRlbURhdGEpO1xyXG4gICAgICAgICQoQ1NTU2VsZWN0b3JGb3JtKycgLmFkZHJlc3NUYWJsZSB0Ym9keScpLmFwcGVuZChyZW5kZXIpO1xyXG4gICAgICAgIHJvb3QuYmluZEFkZHJlc3NDbGlja0FjdGlvbigpO1xyXG4gICAgICAgIFRvYXN0LmVuYWJsZVRpbWVycyhmYWxzZSk7XHJcbiAgICAgICAgVG9hc3QuY3JlYXRlKFwiQ8OtbSBob3p6w6FhZHZhIVwiLCBJdGVtRGF0YS5zdHJlZXQrXCIgaG96esOhYWR2YVwiLCBUT0FTVF9TVEFUVVMuU1VDQ0VTUyw1MDAwKTtcclxuICAgIH1cclxuICAgIHRoaXMuZWRpdEFkZHJlc3M9ZnVuY3Rpb24gKGlkLGl0ZW1EYXRhKXtcclxuXHJcbiAgICAgICAgbGV0IG5ld0l0ZW09W107XHJcbiAgICAgICAgJC5lYWNoKHJvb3QuUHJvZml0Q2VudGVyLmdldERhdGEoJ2FkZHJlc3MnKSxmdW5jdGlvbiAoaW5kZXgpe1xyXG4gICAgICAgICAgICBpZih0aGlzLmlkPT1pZCl7XHJcbiAgICAgICAgICAgICAgICBuZXdJdGVtLnB1c2goaXRlbURhdGEpO1xyXG4gICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgIG5ld0l0ZW0ucHVzaCh0aGlzKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJvb3QuUHJvZml0Q2VudGVyLmFkZHJlc3M9bmV3SXRlbTtcclxuICAgICAgICByb290LnJlc2V0QWRkcmVzc1RhYmxlKCk7XHJcbiAgICAgICAgVG9hc3QuY3JlYXRlKFwiY8OtbSBhZGF0YWkgbcOzZG9zw610dmEhXCIsIGl0ZW1EYXRhLnN0cmVldCtcIiBtw7Nkb3PDrXR2YVwiLCBUT0FTVF9TVEFUVVMuU1VDQ0VTUyw1MDAwKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmluaXRWaWV3TGlzdCA9IGZ1bmN0aW9uIChvcHRpb25zPXt9KSB7XHJcbiAgICAgICAgZGVidWcoJ2xpc3R2aWV3IGluaWNpYWxpemF0aW9uJyk7XHJcbiAgICAgICAgZGF0YVRhYmxlQ1NTU2VsZWN0b3I9T3B0cy5jb250YWluZXJDc3NTZWxlY3RvcisnIC5kYXRhVGFibGUnOyAvL1xyXG5cclxuICAgICAgICBsZXQgY29sTnVtPSQoZGF0YVRhYmxlQ1NTU2VsZWN0b3IrJyB0aGVhZCB0aCcpLmxlbmd0aDsgLy9idXR0b25zIGluc2VydCBwb3NpdGlvbiBuZWVkXHJcbiAgICAgICAgQVBQLnNldE9wdHMoe1xyXG4gICAgICAgICAgICBkYXRhdGFibGVBY3Rpb25CdXR0b25DbGlja0NhbGxCYWNrOnJvb3QuY2xpY2tOZXcsXHJcbiAgICAgICAgICAgIGRhdGF0YWJsZVJvd0FjdGlvbkJ1dHRvbkNsaWNrQ2FsbEJhY2s6cm9vdC5kYXRhdGFibGVSb3dBY3Rpb25CdXR0b25DbGljayxcclxuXHJcbiAgICAgICAgfSlcclxuICAgICAgICBsZXQgb3JkZXJEaXJlY3RpdmU9T3B0cy5kYXRhVGFibGUub3JkZXJEaXJlY3RpdmU7XHJcbiAgICAgICAgaWYodHlwZW9mIG9wdGlvbnNbJ29yZGVyRGlyZWN0aXZlJ10hPSd1bmRlZmluZWQnKXtcclxuICAgICAgICAgICAgb3JkZXJEaXJlY3RpdmU9b3B0aW9uc1snb3JkZXJEaXJlY3RpdmUnXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgJChkYXRhVGFibGVDU1NTZWxlY3RvcikuRGF0YVRhYmxlKCB7XHJcbiAgICAgICAgICAgIGxhbmd1YWdlOiB7XHJcbiAgICAgICAgICAgICAgICB1cmw6ICcvL2Nkbi5kYXRhdGFibGVzLm5ldC9wbHVnLWlucy8xLjEwLjI0L2kxOG4vSHVuZ2FyaWFuLmpzb24nXHJcbiAgICAgICAgICAgIH0sXHJcblxyXG4gICAgICAgICAgICAvL1wiYWpheFwiOiBcInt7YXNzZXQoJ2V4YXBtbGUyLmpzb24nKX19XCIsXHJcbiAgICAgICAgICAgIFwiYWpheFwiOiBPcHRzLlVSTC5nZXREYXRhVGFibGVDb250ZW50LFxyXG4gICAgICAgICAgICBcImNvbHVtbkRlZnNcIjogW1xyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIFwidGFyZ2V0c1wiOiBjb2xOdW0tMSxcclxuICAgICAgICAgICAgICAgICAgICBcInJlbmRlclwiOiBmdW5jdGlvbiAoIGRhdGEsIHR5cGUsIHJvdyApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGJ1dHRvbnM9QVBQLmRhdGF0YWJsZUFkZFJvd1RyYXNoQnV0dG9uKDAsYXJndW1lbnRzKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnV0dG9ucys9QVBQLmRhdGF0YWJsZUFkZFJvd0VkaXRCdXR0b24oMCxhcmd1bWVudHMpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYnV0dG9ucztcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBcInRhcmdldHNcIjogMSxcclxuICAgICAgICAgICAgICAgICAgICBcInJlbmRlclwiOiBmdW5jdGlvbiAoIGRhdGEsIHR5cGUsIHJvdyApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHR5cGUgPT09IFwic29ydFwiID8gZGF0YS5sYXRpbmlzZSgpIDogZGF0YTtcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIC8veyBcInZpc2libGVcIjogZmFsc2UsICBcInRhcmdldHNcIjogWyAwIF0gfVxyXG4gICAgICAgICAgICBdLFxyXG4gICAgICAgICAgICBidXR0b25zOntcclxuICAgICAgICAgICAgICAgIGJ1dHRvbnM6IFtcclxuICAgICAgICAgICAgICAgICAgICAnZXhjZWwnLCdwZGYnLFxyXG4gICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZXh0ZW5kOiAncHJpbnQnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvL3RleHQ6ICdQcmludCBjdXJyZW50IHBhZ2UnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAndGl0bGUnOiAndGl0bGUgY3VzdG9tIHRleHQnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAnbWVzc2FnZVRvcCc6ICdNZXNzYWdlIE9uIFRvcCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF1dG9QcmludDogdHJ1ZVxyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgLyoqL1xyXG5cclxuICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRleHQ6ICfDmmogZmVsdml0ZWxlJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiAnYnRuIGJ0bi1zdWNjZXNzIG5ld0l0ZW0nLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBhdHRyOntcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YTp7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGE6MSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYjoyXHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZGF0YSc6J25ld0l0ZW0nXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGluaXQ6IGZ1bmN0aW9uKGFwaSwgbm9kZSwgY29uZmlnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKG5vZGUpLnJlbW92ZUNsYXNzKCd1aS1idXR0b24nKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb246IGZ1bmN0aW9uICggZSwgZHQsIG5vZGUsIGNvbmZpZyApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFQUC5kYXRhdGFibGVBY3Rpb25CdXR0b25DbGlja0NhbGxCYWNrKGFyZ3VtZW50cyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBjb25zb2xlLmxvZyhlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhkdCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2cobm9kZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coY29uZmlnKTsqL1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIF1cclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgXCJjb2x1bW5zXCI6IFtcclxuICAgICAgICAgICAgICAgIHsgXCJkYXRhXCI6IFwiaWRcIiB9LFxyXG4gICAgICAgICAgICAgICAgeyBcImRhdGFcIjogXCJuYW1lXCIgfSxcclxuICAgICAgICAgICAgICAgIHsgXCJkYXRhXCI6IFwiaG9vcmV5Y2FJZFwiIH0sXHJcbiAgICAgICAgICAgICAgICB7IFwiZGF0YVwiOiBcIm5hbWVJZFwiIH0sXHJcbiAgICAgICAgICAgICAgICB7IFwiZGF0YVwiOiBcImNyZWF0ZWRfYXRcIiB9LFxyXG4gICAgICAgICAgICAgICAgbnVsbCxcclxuICAgICAgICAgICAgXSxcclxuICAgICAgICAgICAgXCJvcmRlclwiOiBvcmRlckRpcmVjdGl2ZSxcclxuICAgICAgICAgICAgLy9cInN0YXRlU2F2ZVwiOiB0cnVlLFxyXG4gICAgICAgICAgICBcImRyYXdDYWxsYmFja1wiOiBmdW5jdGlvbiggc2V0dGluZ3MgKSB7XHJcbiAgICAgICAgICAgICAgICBBUFAuZGF0YXRhYmxlQWRkUm93QWN0aW9uKGRhdGFUYWJsZUNTU1NlbGVjdG9yKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gKTtcclxuICAgICAgICBkZWJ1ZygnbGlzdHZpZXcgZW5kJyk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmRhdGF0YWJsZVJvd0FjdGlvbkJ1dHRvbkNsaWNrPWZ1bmN0aW9uIChldmVudCl7XHJcbiAgICAgICAgZGVidWcoJ2RhdGF0YWJsZVJvd0FjdGlvbkJ1dHRvbkNsaWNrJyk7XHJcbiAgICAgICAgbGV0IG5vZGU9JChldmVudFswXS5jdXJyZW50VGFyZ2V0KTtcclxuICAgICAgICBsZXQgcm93PSQoZGF0YVRhYmxlQ1NTU2VsZWN0b3IpLkRhdGFUYWJsZSgpLnJvdyhub2RlLnBhcmVudHMoJ3RyJykpO1xyXG4gICAgICAgIGxldCByb3dEYXRhPXJvdy5kYXRhKCk7XHJcbiAgICAgICAgbGV0IGFjdGlvbk5hbWU9J2RhdGF0YWJsZVJvd0FjdGlvbicrbm9kZS5kYXRhKCdidXR0b250eXBlJykuY2FwaXRhbGl6ZSgpO1xyXG4gICAgICAgIGlmICh0eXBlb2Ygcm9vdFthY3Rpb25OYW1lXSA9PT0gXCJmdW5jdGlvblwiKSB7XHJcbiAgICAgICAgICAgIHJldHVybiByb290W2FjdGlvbk5hbWVdKHJvd0RhdGEsbm9kZSlcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICB0aGlzLmRhdGF0YWJsZVJvd0FjdGlvbkVkaXQ9ZnVuY3Rpb24gKHJvd0RhdGEsbm9kZSkge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCdkYXRhdGFibGVSb3dBY3Rpb25FZGl0IENhbGxlZCcpO1xyXG4gICAgICAgIC8vT3B0cy5vbkFmdGVySW5pdFZpZXdEZXRhaWxzPXJvb3QuYXV0b2ZpbGxEZXRhaWxzO1xyXG4gICAgICAgIGxldCBhamF4VXJsPU9wdHMuVVJMLmVkaXQucmVwbGFjZSgnJWlkJScscm93RGF0YS5pZCk7XHJcbiAgICAgICAgLypcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKE9wdHMuVVJMKTtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGFqYXhVcmwpO1xyXG4gICAgICAgICovXHJcbiAgICAgICAgQVBQLmxvYWRNYWluQ29udGVudChhamF4VXJsLHJvb3QuaW5pdFZpZXdEZXRhaWxzKTtcclxuICAgICAgICBjb25zb2xlLmxvZygnZGF0YXRhYmxlUm93QWN0aW9uRWRpdCBFbmQnKTtcclxuICAgIH1cclxuICAgIHRoaXMuZGF0YXRhYmxlUm93QWN0aW9uRGVsZXRlPWZ1bmN0aW9uIChyb3dEYXRhLG5vZGUpIHtcclxuICAgICAgICBjb25zb2xlLmxvZygnZGF0YXRhYmxlUm93QWN0aW9uRGVsZXRlIENhbGxlZCcpO1xyXG4gICAgICAgIGxldCByb3c9JChkYXRhVGFibGVDU1NTZWxlY3RvcikuRGF0YVRhYmxlKCkucm93KG5vZGUucGFyZW50cygndHInKSk7XHJcbiAgICAgICAgbGV0IGFqYXhEYXRhPXt9O1xyXG4gICAgICAgIGxldCBhamF4VXJsPU9wdHMuVVJMLmRlc3Ryb3kucmVwbGFjZSgnJWlkJScscm93RGF0YS5pZCk7XHJcbiAgICAgICAgYWpheERhdGEuX3Rva2VuPSQoJ2lucHV0W25hbWU9X3Rva2VuXScpLnZhbCgpO1xyXG4gICAgICAgICQuYWpheCh7XHJcbiAgICAgICAgICAgIHVybDphamF4VXJsLFxyXG4gICAgICAgICAgICBkYXRhOmFqYXhEYXRhLFxyXG4gICAgICAgICAgICBtZXRob2Q6XCJERUxFVEVcIixcclxuICAgICAgICAgICAgc3VjY2VzczpmdW5jdGlvbiAoZGF0YSl7XHJcbiAgICAgICAgICAgICAgICBpZihkYXRhLnN1Y2Nlc3M9PXRydWUpe1xyXG4gICAgICAgICAgICAgICAgICAgIHJvdy5yZW1vdmUoKS5kcmF3KCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5jbGlja1NhdmVCdXR0b249ZnVuY3Rpb24gKGV2ZW50KSB7XHJcbiAgICAgICAgZGVidWcoJ1NhdmUgY2xpY2tlZCcpO1xyXG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgZGVidWcoQ1NTU2VsZWN0b3JGb3JtKTtcclxuICAgICAgICBkZWJ1ZygkKENTU1NlbGVjdG9yRm9ybSkpO1xyXG4gICAgICAgIGlmICgkKENTU1NlbGVjdG9yRm9ybSlbMF0uY2hlY2tWYWxpZGl0eSgpID09PSBmYWxzZSkge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZygndmFsaWRhdG9uIGZhbHNlJyk7XHJcbiAgICAgICAgICAgICQoQ1NTU2VsZWN0b3JGb3JtKS5hZGRDbGFzcygnd2FzLXZhbGlkYXRlZCcpO1xyXG4gICAgICAgICAgICAkKENTU1NlbGVjdG9yRm9ybSlbMF0ucmVwb3J0VmFsaWRpdHkoKTtcclxuICAgICAgICAgICAgVG9hc3QuY3JlYXRlKHsgdGl0bGU6IFwiVmFsaWTDoWNpw7NzIGhpYmEhXCIsIG1lc3NhZ2U6IFwiS8OpcmrDvGssIHTDtmx0c2Uga2kgYSBrw7Z0ZWxlesWRIG1lesWRa2V0IVwiLCBzdGF0dXM6IFRPQVNUX1NUQVRVUy5EQU5HRVIsIHRpbWVvdXQ6IDUwMDAgfSk7XHJcbiAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coJ3ZhbGlkYXRvbiBvaycpO1xyXG4gICAgICAgICAgICAkKENTU1NlbGVjdG9yRm9ybSkucmVtb3ZlQ2xhc3MoJ3dhcy12YWxpZGF0ZWQnKTtcclxuICAgICAgICAgICAgLy9kbyB5b3VyIGFqYXggc3VibWl0aW9uIGhlcmVcclxuICAgICAgICB9XHJcbiAgICAgICAgbGV0IGFqYXhEYXRhPXJvb3QuZm9ybURhdGFUb0RhdGFPYmplY3RBUElDYWxsKENTU1NlbGVjdG9yRm9ybSk7XHJcblxyXG4gICAgICAgIGxldCBhamF4VXJsPU9wdHMuVVJMLnN0b3JlO1xyXG4gICAgICAgIGxldCBhamF4TWV0aG9kPVwiUE9TVFwiO1xyXG4gICAgICAgIGlmKHJvb3QuUHJvZml0Q2VudGVyLmlkKXtcclxuICAgICAgICAgICAgYWpheFVybD1PcHRzLlVSTC51cGRhdGUucmVwbGFjZSgnJWlkJScscm9vdC5Qcm9maXRDZW50ZXIuaWQpO1xyXG4gICAgICAgICAgICAvL2FqYXhNZXRob2Q9XCJQVVRcIjtcclxuICAgICAgICAgICAgLy9hamF4RGF0YT1uZXcgRm9ybURhdGEoJChDU1NTZWxlY3RvckZvcm0pWzBdKTtcclxuICAgICAgICAgICAgYWpheERhdGEuYXBwZW5kKCdfbWV0aG9kJywnUFVUJyk7XHJcbiAgICAgICAgfVxyXG4vKlxyXG4gICAgICAgIGRlYnVnKGFqYXhVcmwpO1xyXG4gICAgICAgIGRlYnVnKGFqYXhNZXRob2QpO1xyXG4gICAgICAgIGRlYnVnKGFqYXhEYXRhLmVudHJpZXMoKSk7XHJcbiAgICAgICAgZm9yICh2YXIgcGFpciBvZiBhamF4RGF0YS5lbnRyaWVzKCkpIHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2cocGFpclswXSsgJywgJyArIHBhaXJbMV0pO1xyXG4gICAgICAgIH1cclxuKi9cclxuXHJcbiAgICAgICAgY29uc29sZS50YWJsZShPYmplY3QuZnJvbUVudHJpZXMoYWpheERhdGEpKTtcclxuXHJcbiAgICAgICAgJC5hamF4KHtcclxuICAgICAgICAgICAgdXJsOmFqYXhVcmwsXHJcbiAgICAgICAgICAgIGRhdGE6YWpheERhdGEsXHJcbiAgICAgICAgICAgIHR5cGU6YWpheE1ldGhvZCxcclxuICAgICAgICAgICAgY29udGVudFR5cGU6ZmFsc2UsXHJcbiAgICAgICAgICAgIHByb2Nlc3NEYXRhOiBmYWxzZSxcclxuICAgICAgICAgICAgaGVhZGVyczoge1xyXG4gICAgICAgICAgICAgICAgJ1gtQ1NSRi1UT0tFTic6ICQoJ2lucHV0W25hbWU9XCJfdG9rZW5cIl0nKS52YWwoKVxyXG4gICAgICAgICAgICB9LFxyXG5cclxuICAgICAgICAgICAgc3VjY2VzczpmdW5jdGlvbiAoZGF0YSl7XHJcbiAgICAgICAgICAgICAgICBkZWJ1ZyhkYXRhKTtcclxuICAgICAgICAgICAgICAgIGlmKGRhdGEuc3VjY2Vzcz09dHJ1ZSl7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIC8vT3B0cy5vbkFmdGVySW5pdFZpZXdEZXRhaWxzPXJvb3QuYXV0b2ZpbGxEZXRhaWxzO1xyXG4gICAgICAgICAgICAgICAgICAgIE9wdHMuZGF0YVRhYmxlLm9yZGVyRGlyZWN0aXZlPVswLCAnZGVzYyddO1xyXG4gICAgICAgICAgICAgICAgICAgIFRvYXN0LmNyZWF0ZSh7IHRpdGxlOiBcIlNpa2VyZXMgcsO2Z3rDrXTDqXMhXCIsIG1lc3NhZ2U6IGFqYXhEYXRhLmdldCgnbmFtZScpK1wiIG5ldsWxIHByb2ZpdGNlbnRlciBlbG1lbnR2ZVwiLCBzdGF0dXM6IFRPQVNUX1NUQVRVUy5TVUNDRVNTLCB0aW1lb3V0OiA1MDAwIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIEFQUC5sb2FkTWFpbkNvbnRlbnQoT3B0cy5VUkwuaW5kZXgrJz9pbml0PTAnLHJvb3QuaW5pdFZpZXdMaXN0KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuZm9ybURhdGFUb0RhdGFPYmplY3RBUElDYWxsID0gZnVuY3Rpb24gKENTU1NlbGVjdG9yRm9ybSkge1xyXG4gICAgICAgIGxldCBhamF4RGF0YT1uZXcgRm9ybURhdGEoJChDU1NTZWxlY3RvckZvcm0pWzBdKTtcclxuLypcclxuICAgICAgICAkLmVhY2goYWpheERhdGEuZ2V0QWxsKCdwcm9kdWN0R3JvdXAnKSxmdW5jdGlvbihrZXksdmFsdWUpe1xyXG4gICAgICAgICAgICBhamF4RGF0YS5hcHBlbmQoJ3Byb2R1Y3RHcm91cFtdJyx2YWx1ZSk7XHJcbiAgICAgICAgfSlcclxuKi9cclxuICAgICAgICAkLmVhY2goYWpheERhdGEuZ2V0QWxsKCdjb250YWN0SWQnKSxmdW5jdGlvbihrZXksdmFsdWUpe1xyXG4gICAgICAgICAgICBhamF4RGF0YS5hcHBlbmQoJ2NvbnRhY3RJZFtdJyx2YWx1ZSk7XHJcbiAgICAgICAgfSlcclxuXHJcbiAgICAgICAgYWpheERhdGEuYXBwZW5kKCdfdG9rZW4nLCQoJ2lucHV0W25hbWU9X3Rva2VuXScpLnZhbCgpKTtcclxuXHJcbiAgICAgICAgJChDU1NTZWxlY3RvckZvcm0rJyBpbnB1dFtkYXRhLWlucHV0bWFza10nKS5lYWNoKGZ1bmN0aW9uICgpe1xyXG4gICAgICAgICAgICBsZXQgaW5kZXhLZXk9JCh0aGlzKS5hdHRyKCduYW1lJyk7XHJcbiAgICAgICAgICAgIGlmKGFqYXhEYXRhLmdldChpbmRleEtleSkpe1xyXG4gICAgICAgICAgICAgICAgYWpheERhdGEuc2V0KGluZGV4S2V5LGFqYXhEYXRhLmdldChpbmRleEtleSkucmVwbGFjZSgvW18gXSskL2csXCJcIikpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgJC5lYWNoKGFqYXhEYXRhLmdldEFsbCgnc3VwcGxpZXInKSxmdW5jdGlvbihrZXksdmFsdWUpe1xyXG4gICAgICAgICAgICBhamF4RGF0YS5hcHBlbmQoJ3N1cHBsaWVyW10nLHZhbHVlKTtcclxuICAgICAgICB9KVxyXG4gICAgICAgIHJldHVybiBhamF4RGF0YTtcclxuICAgIH1cclxuICAgIHRoaXMuY29uc3RydWN0KG9wdGlvbnMsIFByb2ZpdENlbnRlckl0ZW0pO1xyXG5cclxufVxyXG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7QUFBQSxJQUFHLE9BQU9BLHFCQUFxQixLQUFHLFdBQVcsRUFBQztFQUFBLElBQ3BDQSxzQkFBcUIsMEJBQUFDLFVBQUE7SUFFdkI7QUFDUjtBQUNBO0lBQ1EsU0FBQUMsdUJBQWFDLElBQUksRUFBQ0MsT0FBTyxFQUFFO01BQUEsSUFBQUMs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\n//# sourceURL=webpack-internal:///./resources/js/admin/profitCenter.js\n\n}"); +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}"); /***/ }, @@ -65,7 +65,7 @@ eval("{function _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"fun \****************************************/ () { -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 /*\r\n * Constructor\r\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 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 /*\r\n * Variables accessible\r\n * in the class\r\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 },\n dataTable: {\n orderDirective: [1, 'asc']\n },\n onAfterInitViewDetails: function onAfterInitViewDetails() {}\n };\n var Supplier = {};\n var root = this;\n var contactPopupWorkflow = 'new';\n /*\r\n * Constructor\r\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:\r\n ajaxData['productGroup']=$(\".productCategorySelect\").select2().val();\r\n formJSON.multiselectName = data.getAll('multiselectName');\r\n $.each(formJSON, function (item, value) {\r\n formJSON[$.lcFirst(item.replace('contact', ''))] = value;\r\n delete formJSON[item];\r\n });\r\n if(formJSON.phone){\r\n formJSON.phone=formJSON.phone.replaceAll('_','');\r\n }\r\n if(formJSON.email){\r\n formJSON.email=formJSON.email.replaceAll('_','');\r\n }\r\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 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\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 $(\".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 debug('**end initViewDetails ');\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 $('.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(\"Hiba!\", 'Vállaszon ki fájlt!', TOAST_STATUS.DANGER, 10000);\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 /*\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.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 /*\r\n {\r\n id:3,\r\n name:'Kósa Veronika',\r\n email:'szamlazas4@funkcio.hu',\r\n phone:'{{formatterPhoneNumber(\"+36204589180\")}}'\r\n }\r\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(\"Fájl hozzáadva!\", attachmentData.original_filename + \" fájl hozzáadva\", TOAST_STATUS.SUCCESS, 5000);\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 /*\r\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 /*\r\n fel kell venni a sorba\r\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.construct(options, SupplierItem);\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9yZXNvdXJjZXMvanMvYWRtaW4vc3VwcGxpZXIuanMiLCJuYW1lcyI6WyJTdXBwbGllciIsIl9EYXRhTW9kZWwiLCJfU3VwcGxpZXIiLCJkYXRhIiwib3B0aW9ucyIsIl90aGlzIiwiX2NsYXNzQ2FsbENoZWNrIiwiX2NhbGxTdXBlciIsImNvbnRhY3QiLCJjYW5TZWUiLCJjYW5TZWVJbk9yZGVyIiwiY29uc29sZSIsImxvZyIsIl9pbmhlcml0cyIsIl9jcmVhdGVDbGFzcyIsIkRhdGFNb2RlbCIsIndpbmRvdyIsIlN1cHBsaWVyQWRtaW4iLCJTdXBwbGllckl0ZW0iLCJPcHRzIiwidG9rZW4iLCJjb250YWluZXJDc3NTZWxlY3RvciIsInRlc3RNb2RlIiwiVVJMIiwiZ2V0RGF0YVRhYmxlQ29udGVudCIsImluZGV4Iiwic2hvdyIsImVkaXQiLCJjcmVhdGUiLCJzdG9yZSIsInVwZGF0ZSIsImRlc3Ryb3kiLCJhdHRhY2hGaWxlIiwiZGV0YWNoRmlsZSIsImRhdGFUYWJsZSIsIm9yZGVyRGlyZWN0aXZlIiwib25BZnRlckluaXRWaWV3RGV0YWlscyIsInJvb3QiLCJjb250YWN0UG9wdXBXb3JrZmxvdyIsImNvbnN0cnVjdCIsIiQiLCJleHRlbmQiLCJBUFAiLCJnZXRPcHRzIiwiZm9ybURhdGFUb0RhdGFPYmplY3RBUElDYWxsT2xkIiwiQ1NTU2VsZWN0b3IiLCJGb3JtRGF0YSIsImRvY3VtZW50IiwicXVlcnlTZWxlY3RvciIsImZvcm1KU09OIiwiZm9yRWFjaCIsInZhbHVlIiwia2V5IiwiUmVmbGVjdCIsImhhcyIsIkFycmF5IiwiaXNBcnJheSIsInB1c2giLCJlYWNoIiwiYXR0ciIsInJlcGxhY2UiLCJmb3JtRGF0YVRvRGF0YU9iamVjdEFQSUNhbGwiLCJDU1NTZWxlY3RvckZvcm0iLCJhamF4RGF0YSIsImdldEFsbCIsImFwcGVuZCIsInZhbCIsImluZGV4S2V5IiwiZ2V0Iiwic2V0IiwiY2xpY2tTYXZlQnV0dG9uIiwiZXZlbnQiLCJkZWJ1ZyIsInByZXZlbnREZWZhdWx0IiwiY2hlY2tWYWxpZGl0eSIsImFkZENsYXNzIiwicmVwb3J0VmFsaWRpdHkiLCJUb2FzdCIsInRpdGxlIiwibWVzc2FnZSIsInN0YXR1cyIsIlRPQVNUX1NUQVRVUyIsIkRBTkdFUiIsInRpbWVvdXQiLCJzdG9wUHJvcGFnYXRpb24iLCJyZW1vdmVDbGFzcyIsImFqYXhVcmwiLCJhamF4TWV0aG9kIiwiaWQiLCJhamF4IiwidXJsIiwidHlwZSIsImNvbnRlbnRUeXBlIiwicHJvY2Vzc0RhdGEiLCJoZWFkZXJzIiwic3VjY2VzcyIsIlNVQ0NFU1MiLCJsb2FkTWFpbkNvbnRlbnQiLCJpbml0Vmlld0xpc3QiLCJzZXREZXRhaWxzVmlld0RhdGEiLCJuZWVkVG9TZXQiLCJub3RlIiwicHJvcCIsImNsaWNrIiwiaG9vcmV5Y2FEYXRhQWN0aXZlIiwicHJvZHVjdEdyb3VwIiwicHJvZHVjdF9ncm91cCIsIm5hbWUiLCJjaGFuZ2UiLCJzZXJ2aWNlIiwicHJvZml0Q2VudGVyIiwicHJvZml0X2NlbnRlciIsImVzY2FwZVNlbGVjdG9yIiwiaW5pdFZpZXdEZXRhaWxzIiwiQ29udGFjdFBvcFVwIiwiaW5pdCIsImFjdGl2ZSIsIm9uQWZ0ZXJTYXZlIiwiY29udGFjdEFjdGlvbiIsInJlbmRlckNvbnRhY3QiLCJiaW5kIiwic2V0Q29udGFjdFBvcHVwV29ya2Zsb3ciLCJjbGVhckRhdGEiLCJ0b29sdGlwIiwiaW5pdFJhZGlvQnV0dG9ucyIsImlucHV0bWFzayIsIm9uaW5jb21wbGV0ZSIsImxlbmd0aCIsIm9uY29tcGxldGUiLCJvbmNsZWFyZWQiLCJvZmYiLCJvbiIsInNlbGVjdDIiLCJ0YWdzIiwiY3JlYXRlVGFnIiwicGFyYW1zIiwidGVybSIsInRyaW0iLCJ0ZXh0IiwibmV3VGFnIiwic2V0SW1hZ2VGcm9tTG9jYWwiLCJpcyIsInJlbmRlckF0dGFjaG1lbnQiLCJpbml0RmlsZUF0dGFjaG1lbnRGZWF0dXJlIiwic2VsZWN0ZWRVcGxvYWRGaWxlVG9nZ2xlIiwiZmlsZUlucHV0IiwiZmlsZXMiLCJncm91cCIsImZpbmQiLCJncm91cEVuZCIsImJlZm9yZVNlbmQiLCJhZGRBdHRhY2htZW50IiwiYXR0YWNobWVudCIsImVycm9yIiwicmVzcG9uc2VKU09OIiwiYWpheEVycm9yRmllbGRIYW5kbGVyIiwiY2xpY2tOZXciLCJjbGlja05ld0NhbGxCYWNrIiwiZGF0YXRhYmxlUm93QWN0aW9uRWRpdCIsInJvd0RhdGEiLCJub2RlIiwiY2xpY2tPcmRlckRlbGV0ZUNvbmZpcm1lZCIsIm1vZGFsIiwiX3Rva2VuIiwicm93IiwiZGF0YVRhYmxlQ1NTU2VsZWN0b3IiLCJEYXRhVGFibGUiLCJkYWRhdGF0YWJsZVJvd0FjdGlvbkNhbGxlck5vZGUiLCJwYXJlbnRzIiwibWV0aG9kIiwicmVtb3ZlIiwiZHJhdyIsImRhdGF0YWJsZVJvd0FjdGlvbkNhbGxlck5vZGUiLCJkYXRhdGFibGVSb3dBY3Rpb25EZWxldGUiLCJkYXRhdGFibGVSb3dBY3Rpb25CdXR0b25DbGljayIsImN1cnJlbnRUYXJnZXQiLCJhY3Rpb25OYW1lIiwiY2FwaXRhbGl6ZSIsImFyZ3VtZW50cyIsInVuZGVmaW5lZCIsImNvbE51bSIsInNldE9wdHMiLCJkYXRhdGFibGVBY3Rpb25CdXR0b25DbGlja0NhbGxCYWNrIiwiZGF0YXRhYmxlUm93QWN0aW9uQnV0dG9uQ2xpY2tDYWxsQmFjayIsImxhbmd1YWdlIiwicmVuZGVyIiwiYnV0dG9ucyIsImRhdGF0YWJsZUFkZFJvd1RyYXNoQnV0dG9uIiwiZGF0YXRhYmxlQWRkUm93RWRpdEJ1dHRvbiIsImxhdGluaXNlIiwiYXV0b1ByaW50IiwiY2xhc3NOYW1lIiwiYXBpIiwiY29uZmlnIiwiYWN0aW9uIiwiZSIsImR0IiwiZHJhd0NhbGxiYWNrIiwic2V0dGluZ3MiLCJkYXRhdGFibGVBZGRSb3dBY3Rpb24iLCJhdXRvZmlsbERldGFpbHMiLCJyYW5kb21OdW1iZXIiLCJnZXRSYW5kb21JbnQiLCJyb3dOdW0iLCJnZXREYXRhIiwiYXR0YWNobWVudERhdGEiLCJkYXRlIiwiRGF0ZSIsImNyZWF0ZWRfYXQiLCJ0b0xvY2FsZVN0cmluZyIsImxpbmsiLCJQdWJsaWNVcmwiLCJmaWxlbmFtZSIsInRlbXBsYXRlIiwiaHRtbCIsIk11c3RhY2hlIiwiYmluZEF0dGFjaG1lbnRDbGlja0FjdGlvbiIsImJpbmRDb250YWN0Q2xpY2tBY3Rpb24iLCJlbmFibGVUaW1lcnMiLCJvcmlnaW5hbF9maWxlbmFtZSIsInJlc2V0Q29udGFjdFRhYmxlIiwiY29udGFjdERhdGEiLCJ1bmJpbmQiLCJjb250YWN0RGVsZXRlQ2xpY2siLCJjb250YWN0RWRpdENsaWNrIiwiYXR0YWNobWVudERlbGV0ZUNsaWNrIiwiY3VycmVudEF0dGFjaG1lbnRSb3ciLCJjbG9zZXN0IiwiYXR0YWNoZW1udElkIiwiZmlsdGVyIiwiYXJyIiwicmVzZXRBdHRhY2htZW50VGFibGUiLCJnZXRDb250YWN0UG9wdXBXb3JrZmxvdyIsImxvYWREYXRhIiwiZ2V0U3VwcGxpZXIiLCJhZGRDb250YWN0IiwiZWRpdENvbnRhY3QiLCJuZXdDb250YWN0cyJdLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2pzL2FkbWluL3N1cHBsaWVyLmpzP2E3YzQiXSwic291cmNlc0NvbnRlbnQiOlsiaWYodHlwZW9mIFN1cHBsaWVyPT09J3VuZGVmaW5lZCcpe1xyXG4gICAgY2xhc3MgU3VwcGxpZXIgZXh0ZW5kcyBEYXRhTW9kZWx7XHJcblxyXG4gICAgICAgIC8qXHJcbiAgICAgICAgICogQ29uc3RydWN0b3JcclxuICAgICAgICAgKi9cclxuICAgICAgICBjb25zdHJ1Y3RvciAoZGF0YSxvcHRpb25zKSB7XHJcbiAgICAgICAgICAgIHN1cGVyKGRhdGEsb3B0aW9ucylcclxuICAgICAgICAgICAgaWYodHlwZW9mIHRoaXMuY29udGFjdCA9PT1cInVuZGVmaW5lZFwiKXtcclxuICAgICAgICAgICAgICAgIHRoaXMuY29udGFjdD1bXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZih0eXBlb2YgdGhpcy5jYW5TZWUgPT09XCJ1bmRlZmluZWRcIil7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhblNlZT0xO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmKHR5cGVvZiB0aGlzLmNhblNlZUluT3JkZXIgPT09XCJ1bmRlZmluZWRcIil7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhblNlZUluT3JkZXI9MTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zb2xlLmxvZygnU3VwcGxpZXIgY29uc3RydWN0b3IgY2FsbGVkJyk7XHJcbiAgICAgICAgfTtcclxuICAgIH07XHJcbiAgICB3aW5kb3cuU3VwcGxpZXI9U3VwcGxpZXI7XHJcbn1cclxuXHJcblxyXG53aW5kb3cuU3VwcGxpZXJBZG1pbj1mdW5jdGlvbiAob3B0aW9ucyxTdXBwbGllckl0ZW0pIHtcclxuICAgIC8qXHJcbiAgICAgKiBWYXJpYWJsZXMgYWNjZXNzaWJsZVxyXG4gICAgICogaW4gdGhlIGNsYXNzXHJcbiAgICAgKi9cclxuICAgIGxldCBPcHRzID0ge1xyXG4gICAgICAgIHRva2VuOm51bGwsXHJcbiAgICAgICAgY29udGFpbmVyQ3NzU2VsZWN0b3I6ICcuY29udGFpbmVyU3VwcGxpZXInLFxyXG4gICAgICAgIHRlc3RNb2RlOmZhbHNlLFxyXG4gICAgICAgIFVSTDp7XHJcbiAgICAgICAgICAgIGdldERhdGFUYWJsZUNvbnRlbnQ6JycsXHJcbiAgICAgICAgICAgIGluZGV4OicnLFxyXG4gICAgICAgICAgICBzaG93OicnLFxyXG4gICAgICAgICAgICBlZGl0OicnLFxyXG4gICAgICAgICAgICBjcmVhdGU6JycsXHJcbiAgICAgICAgICAgIHN0b3JlOicnLFxyXG4gICAgICAgICAgICB1cGRhdGU6JycsXHJcbiAgICAgICAgICAgIGRlc3Ryb3k6JycsXHJcbiAgICAgICAgICAgIGF0dGFjaEZpbGU6JycsXHJcbiAgICAgICAgICAgIGRldGFjaEZpbGU6JycsXHJcbiAgICAgICAgfSxcclxuICAgICAgICBkYXRhVGFibGU6e1xyXG4gICAgICAgICAgICBvcmRlckRpcmVjdGl2ZTpbMSwgJ2FzYyddXHJcbiAgICAgICAgfSxcclxuICAgICAgICBvbkFmdGVySW5pdFZpZXdEZXRhaWxzOmZ1bmN0aW9uICgpe31cclxuICAgIH07XHJcbiAgICBsZXQgU3VwcGxpZXIgPSB7fTtcclxuICAgIGxldCByb290ID0gdGhpcztcclxuICAgIGxldCBjb250YWN0UG9wdXBXb3JrZmxvdz0nbmV3JztcclxuICAgIC8qXHJcbiAgICAgKiBDb25zdHJ1Y3RvclxyXG4gICAgICovXHJcbiAgICB0aGlzLmNvbnN0cnVjdCA9IGZ1bmN0aW9uIChvcHRpb25zLFN1cHBsaWVySXRlbSkge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCdTdXBwbGllckFkbWluIGNvbnN0cnVjdG9yIGNhbGxlZCcpO1xyXG4gICAgICAgICQuZXh0ZW5kKE9wdHMsIG9wdGlvbnMpO1xyXG4gICAgICAgIGlmKCFTdXBwbGllckl0ZW0pe1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZygnc3VwcGxpZXIgbGV0cmUga2VsbGV0IGhvem5pICcpO1xyXG4gICAgICAgICAgICBpZighQVBQLlN1cHBsaWVyKXtcclxuICAgICAgICAgICAgICAgIEFQUC5TdXBwbGllcj1uZXcgd2luZG93LlN1cHBsaWVyKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcm9vdC5TdXBwbGllcj1BUFAuU3VwcGxpZXI7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIHRoaXMuZ2V0T3B0cz1mdW5jdGlvbiAoKXtcclxuICAgICAgICByZXR1cm4gT3B0cztcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmZvcm1EYXRhVG9EYXRhT2JqZWN0QVBJQ2FsbE9sZD0gZnVuY3Rpb24gKENTU1NlbGVjdG9yKSB7XHJcbiAgICAgICAgbGV0IGRhdGEgPSBuZXcgRm9ybURhdGEoZG9jdW1lbnQucXVlcnlTZWxlY3RvcihDU1NTZWxlY3RvcikpO1xyXG4gICAgICAgIC8vbGV0IGZvcm1KU09OID0gT2JqZWN0LmZyb21FbnRyaWVzKGRhdGEuZW50cmllcygpKTtcclxuICAgICAgICB2YXIgZm9ybUpTT04gPSB7fTtcclxuICAgICAgICBkYXRhLmZvckVhY2goKHZhbHVlLCBrZXkpID0+IHtcclxuICAgICAgICAgICAgLy8gUmVmbGVjdC5oYXMgaW4gZmF2b3Igb2Y6IGZvcm1KU09OLmhhc093blByb3BlcnR5KGtleSlcclxuICAgICAgICAgICAgaWYoIVJlZmxlY3QuaGFzKGZvcm1KU09OLCBrZXkpKXtcclxuICAgICAgICAgICAgICAgIGZvcm1KU09OW2tleV0gPSB2YWx1ZTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZighQXJyYXkuaXNBcnJheShmb3JtSlNPTltrZXldKSl7XHJcbiAgICAgICAgICAgICAgICBmb3JtSlNPTltrZXldID0gW2Zvcm1KU09OW2tleV1dO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGZvcm1KU09OW2tleV0ucHVzaCh2YWx1ZSk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICQoQ1NTU2VsZWN0b3IrJyBpbnB1dFtkYXRhLWlucHV0bWFza10nKS5lYWNoKGZ1bmN0aW9uICgpe1xyXG4gICAgICAgICAgICBpZihmb3JtSlNPTlskKHRoaXMpLmF0dHIoJ25hbWUnKV0pe1xyXG4gICAgICAgICAgICAgICAgZm9ybUpTT05bJCh0aGlzKS5hdHRyKCduYW1lJyldPWZvcm1KU09OWyQodGhpcykuYXR0cignbmFtZScpXS5yZXBsYWNlKC9bXyBdKyQvZyxcIlwiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIC8vZm9ybUpTT04ucHJvZHVjdEdyb3Vwcz0kKFwiLnByb2R1Y3RDYXRlZ29yeVNlbGVjdFwiKS5zZWxlY3QyKCkudmFsKCk7XHJcblxyXG5cclxuICAgICAgICAvKk11bHRpc2VsZWN0IG9yIGNoZWNrYm94IHRvIGFycmF5OlxyXG4gICAgICAgIGFqYXhEYXRhWydwcm9kdWN0R3JvdXAnXT0kKFwiLnByb2R1Y3RDYXRlZ29yeVNlbGVjdFwiKS5zZWxlY3QyKCkudmFsKCk7XHJcblxyXG4gICAgICAgIGZvcm1KU09OLm11bHRpc2VsZWN0TmFtZSA9IGRhdGEuZ2V0QWxsKCdtdWx0aXNlbGVjdE5hbWUnKTtcclxuICAgICAgICAkLmVhY2goZm9ybUpTT04sIGZ1bmN0aW9uIChpdGVtLCB2YWx1ZSkge1xyXG4gICAgICAgICAgICBmb3JtSlNPTlskLmxjRmlyc3QoaXRlbS5yZXBsYWNlKCdjb250YWN0JywgJycpKV0gPSB2YWx1ZTtcclxuICAgICAgICAgICAgZGVsZXRlIGZvcm1KU09OW2l0ZW1dO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGlmKGZvcm1KU09OLnBob25lKXtcclxuICAgICAgICAgICAgZm9ybUpTT04ucGhvbmU9Zm9ybUpTT04ucGhvbmUucmVwbGFjZUFsbCgnXycsJycpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZihmb3JtSlNPTi5lbWFpbCl7XHJcbiAgICAgICAgICAgIGZvcm1KU09OLmVtYWlsPWZvcm1KU09OLmVtYWlsLnJlcGxhY2VBbGwoJ18nLCcnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgKi9cclxuICAgICAgICByZXR1cm4gZm9ybUpTT047XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5mb3JtRGF0YVRvRGF0YU9iamVjdEFQSUNhbGwgPSBmdW5jdGlvbiAoQ1NTU2VsZWN0b3JGb3JtKSB7XHJcbiAgICAgICAgbGV0IGFqYXhEYXRhPW5ldyBGb3JtRGF0YSgkKENTU1NlbGVjdG9yRm9ybSlbMF0pO1xyXG4gICAgICAgICQuZWFjaChhamF4RGF0YS5nZXRBbGwoJ3Byb2ZpdENlbnRlcicpLGZ1bmN0aW9uKGtleSx2YWx1ZSl7XHJcbiAgICAgICAgICAgIGFqYXhEYXRhLmFwcGVuZCgncHJvZml0Q2VudGVyW10nLHZhbHVlKTtcclxuICAgICAgICB9KVxyXG4gICAgICAgICQuZWFjaChhamF4RGF0YS5nZXRBbGwoJ3Byb2R1Y3RHcm91cCcpLGZ1bmN0aW9uKGtleSx2YWx1ZSl7XHJcbiAgICAgICAgICAgIGFqYXhEYXRhLmFwcGVuZCgncHJvZHVjdEdyb3VwW10nLHZhbHVlKTtcclxuICAgICAgICB9KVxyXG4gICAgICAgICQuZWFjaChhamF4RGF0YS5nZXRBbGwoJ3N1cHBsaWVyU2VydmljZScpLGZ1bmN0aW9uKGtleSx2YWx1ZSl7XHJcbiAgICAgICAgICAgIGFqYXhEYXRhLmFwcGVuZCgnc3VwcGxpZXJTZXJ2aWNlW10nLHZhbHVlKTtcclxuICAgICAgICB9KVxyXG4gICAgICAgICQuZWFjaChhamF4RGF0YS5nZXRBbGwoJ2NvbnRhY3RJZCcpLGZ1bmN0aW9uKGtleSx2YWx1ZSl7XHJcbiAgICAgICAgICAgIGFqYXhEYXRhLmFwcGVuZCgnY29udGFjdElkW10nLHZhbHVlKTtcclxuICAgICAgICB9KVxyXG5cclxuICAgICAgICBhamF4RGF0YS5hcHBlbmQoJ190b2tlbicsJCgnaW5wdXRbbmFtZT1fdG9rZW5dJykudmFsKCkpO1xyXG5cclxuICAgICAgICAkKENTU1NlbGVjdG9yRm9ybSsnIGlucHV0W2RhdGEtaW5wdXRtYXNrXScpLmVhY2goZnVuY3Rpb24gKCl7XHJcbiAgICAgICAgICAgIGxldCBpbmRleEtleT0kKHRoaXMpLmF0dHIoJ25hbWUnKTtcclxuICAgICAgICAgICAgaWYoYWpheERhdGEuZ2V0KGluZGV4S2V5KSl7XHJcbiAgICAgICAgICAgICAgICBhamF4RGF0YS5zZXQoaW5kZXhLZXksYWpheERhdGEuZ2V0KGluZGV4S2V5KS5yZXBsYWNlKC9bXyBdKyQvZyxcIlwiKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGFqYXhEYXRhO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuY2xpY2tTYXZlQnV0dG9uPWZ1bmN0aW9uIChldmVudCkge1xyXG4gICAgICAgIGRlYnVnKCdTYXZlIGNsaWNrZWQnKTtcclxuICAgICAgICBsZXQgQ1NTU2VsZWN0b3JGb3JtPU9wdHMuY29udGFpbmVyQ3NzU2VsZWN0b3IrJyAuc3VwcGxpZXJGb3JtJztcclxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgaWYgKCQoQ1NTU2VsZWN0b3JGb3JtKycgaW5wdXRbbmFtZT1cImNhblNlZUluT3JkZXJcIl0nKS52YWwoKT09MSAmJiAkKENTU1NlbGVjdG9yRm9ybSlbMF0uY2hlY2tWYWxpZGl0eSgpID09PSBmYWxzZSkge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZygndmFsaWRhdG9uIGZhbHNlJyk7XHJcbiAgICAgICAgICAgICQoQ1NTU2VsZWN0b3JGb3JtKS5hZGRDbGFzcygnd2FzLXZhbGlkYXRlZCcpO1xyXG4gICAgICAgICAgICAkKENTU1NlbGVjdG9yRm9ybSlbMF0ucmVwb3J0VmFsaWRpdHkoKTtcclxuICAgICAgICAgICAgVG9hc3QuY3JlYXRlKHsgdGl0bGU6IFwiVmFsaWTDoWNpw7NzIGhpYmEhXCIsIG1lc3NhZ2U6IFwiS8OpcmrDvGssIHTDtmx0c2Uga2kgYSBrw7Z0ZWxlesWRIG1lesWRa2V0IVwiLCBzdGF0dXM6IFRPQVNUX1NUQVRVUy5EQU5HRVIsIHRpbWVvdXQ6IDUwMDAgfSk7XHJcbiAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coJ3ZhbGlkYXRvbiBvaycpO1xyXG4gICAgICAgICAgICAkKENTU1NlbGVjdG9yRm9ybSkucmVtb3ZlQ2xhc3MoJ3dhcy12YWxpZGF0ZWQnKTtcclxuICAgICAgICAgICAgLy9kbyB5b3VyIGFqYXggc3VibWl0aW9uIGhlcmVcclxuICAgICAgICB9XHJcbiAgICAgICAgbGV0IGFqYXhEYXRhPXJvb3QuZm9ybURhdGFUb0RhdGFPYmplY3RBUElDYWxsKENTU1NlbGVjdG9yRm9ybSk7XHJcblxyXG5cclxuXHJcbiAgICAgICAgbGV0IGFqYXhVcmw9T3B0cy5VUkwuc3RvcmU7XHJcbiAgICAgICAgbGV0IGFqYXhNZXRob2Q9XCJQT1NUXCI7XHJcbiAgICAgICAgaWYocm9vdC5TdXBwbGllci5pZCl7XHJcbiAgICAgICAgICAgIGFqYXhVcmw9T3B0cy5VUkwudXBkYXRlLnJlcGxhY2UoJyVpZCUnLHJvb3QuU3VwcGxpZXIuaWQpO1xyXG4gICAgICAgICAgICAvL2FqYXhNZXRob2Q9XCJQVVRcIjtcclxuICAgICAgICAgICAgLy9hamF4RGF0YT1uZXcgRm9ybURhdGEoJChDU1NTZWxlY3RvckZvcm0pWzBdKTtcclxuICAgICAgICAgICAgYWpheERhdGEuYXBwZW5kKCdfbWV0aG9kJywnUFVUJyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBkZWJ1ZyhhamF4TWV0aG9kKTtcclxuICAgICAgICBkZWJ1ZyhhamF4RGF0YSk7XHJcblxyXG4gICAgICAgICQuYWpheCh7XHJcbiAgICAgICAgICAgIHVybDphamF4VXJsLFxyXG4gICAgICAgICAgICBkYXRhOmFqYXhEYXRhLFxyXG4gICAgICAgICAgICB0eXBlOmFqYXhNZXRob2QsXHJcbiAgICAgICAgICAgIGNvbnRlbnRUeXBlOmZhbHNlLFxyXG4gICAgICAgICAgICBwcm9jZXNzRGF0YTogZmFsc2UsXHJcbiAgICAgICAgICAgIGhlYWRlcnM6IHtcclxuICAgICAgICAgICAgICAgICdYLUNTUkYtVE9LRU4nOiAkKCdpbnB1dFtuYW1lPVwiX3Rva2VuXCJdJykudmFsKClcclxuICAgICAgICAgICAgfSxcclxuXHJcbiAgICAgICAgICAgIHN1Y2Nlc3M6ZnVuY3Rpb24gKGRhdGEpe1xyXG4gICAgICAgICAgICAgICAgZGVidWcoJ2QxOiBTYXZlIHN1Y2Nlc3MgJyk7XHJcbiAgICAgICAgICAgICAgICBkZWJ1ZyhkYXRhKTtcclxuICAgICAgICAgICAgICAgIGlmKGRhdGEuc3VjY2Vzcz09dHJ1ZSl7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIC8vT3B0cy5vbkFmdGVySW5pdFZpZXdEZXRhaWxzPXJvb3QuYXV0b2ZpbGxEZXRhaWxzO1xyXG4gICAgICAgICAgICAgICAgICAgIE9wdHMuZGF0YVRhYmxlLm9yZGVyRGlyZWN0aXZlPVswLCAnZGVzYyddO1xyXG4gICAgICAgICAgICAgICAgICAgIFRvYXN0LmNyZWF0ZSh7IHRpdGxlOiBcIlNpa2VyZXMgcsO2Z3rDrXTDqXMhXCIsIG1lc3NhZ2U6IGFqYXhEYXRhLmdldCgnbmFtZScpK1wiIG5ldsWxIGJlc3rDoWxsbMOtdMOzIGVsbWVudHZlXCIsIHN0YXR1czogVE9BU1RfU1RBVFVTLlNVQ0NFU1MsIHRpbWVvdXQ6IDUwMDAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgQVBQLmxvYWRNYWluQ29udGVudChPcHRzLlVSTC5pbmRleCsnP2luaXQ9MCcscm9vdC5pbml0Vmlld0xpc3QpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICB0aGlzLnNldERldGFpbHNWaWV3RGF0YT1mdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgZGVidWcoJ3NldERldGFpbHNWaWV3RGF0YScpO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKFN1cHBsaWVyKTtcclxuICAgICAgICBsZXQgQ1NTU2VsZWN0b3JGb3JtPU9wdHMuY29udGFpbmVyQ3NzU2VsZWN0b3IrJyAuc3VwcGxpZXJGb3JtJztcclxuICAgICAgICBsZXQgbmVlZFRvU2V0PVtcclxuICAgICAgICAgICAgJ25hbWUnLCdob29yZXljYUlkJywnbmFtZUlkJyxcclxuICAgICAgICAgICAgJ29yZGVyRW1haWwnLCdvcmRlckVtYWlsMicsJ2FkZHJlc3MnLCdtYWlsaW5nQWRkcmVzcycsJ3Bob25lJywnZmF4JywnY3VzdG9tZXJTZXJ2aWNlUGhvbmUnLFxyXG4gICAgICAgICAgICAnbmFtZTIyJyxcclxuICAgICAgICAgICAgJ29wZW5Ib3VycycsICdvcmRlcnNEZWFkbGluZScsICdtaW5PcmRlclZhbHVlJyxcclxuICAgICAgICBdO1xyXG4gICAgICAgICQuZWFjaChuZWVkVG9TZXQsZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBpZih0eXBlb2Ygcm9vdC5TdXBwbGllclt0aGlzXSE9J3VuZGVmaW5lZCcpe1xyXG4gICAgICAgICAgICAgICAgJChDU1NTZWxlY3RvckZvcm0rJyBpbnB1dFtuYW1lPScrdGhpcysnXScpLnZhbChyb290LlN1cHBsaWVyW3RoaXNdKTtcclxuICAgICAgICAgICAgICAgICQoQ1NTU2VsZWN0b3JGb3JtKycgdGV4dGFyZWFbbmFtZT0nK3RoaXMrJ10nKS52YWwocm9vdC5TdXBwbGllclt0aGlzXSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgICAgIGlmKHR5cGVvZiByb290LlN1cHBsaWVyWydub3RlJ10hPSd1bmRlZmluZWQnKXtcclxuICAgICAgICAgICAgJChDU1NTZWxlY3RvckZvcm0rJyB0ZXh0YXJlYVtuYW1lPW5vdGVdJykudmFsKHJvb3QuU3VwcGxpZXIubm90ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmKHR5cGVvZiByb290LlN1cHBsaWVyWydlbWFpbEF0dGFjaG1lbnRUeXBlJ10hPSd1bmRlZmluZWQnKXtcclxuICAgICAgICAgICAgJChDU1NTZWxlY3RvckZvcm0rJyBpbnB1dFtuYW1lPWVtYWlsQXR0YWNobWVudFR5cGVdW3ZhbHVlPScrcm9vdC5TdXBwbGllclsnZW1haWxBdHRhY2htZW50VHlwZSddKyddJykucHJvcCgnY2hlY2tlZCcsdHJ1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgICQoQ1NTU2VsZWN0b3JGb3JtKycgKltkYXRhLXRvZ2dsZT1jYW5TZWVdW2RhdGEtdGl0bGU9Jytyb290LlN1cHBsaWVyLmNhblNlZSsnXScpLmNsaWNrKCk7XHJcbiAgICAgICAgJChDU1NTZWxlY3RvckZvcm0rJyAqW2RhdGEtdG9nZ2xlPWNhblNlZUluT3JkZXJdW2RhdGEtdGl0bGU9Jytyb290LlN1cHBsaWVyLmNhblNlZUluT3JkZXIrJ10nKS5jbGljaygpO1xyXG4gICAgICAgICQoQ1NTU2VsZWN0b3JGb3JtKycgKltkYXRhLXRvZ2dsZT1ob29yZXljYURhdGFBY3RpdmVdW2RhdGEtdGl0bGU9Jytyb290LlN1cHBsaWVyLmhvb3JleWNhRGF0YUFjdGl2ZSsnXScpLmNsaWNrKCk7XHJcbiAgICAgICAgbGV0IHByb2R1Y3RHcm91cD1bXTtcclxuICAgICAgICAkLmVhY2gocm9vdC5TdXBwbGllci5wcm9kdWN0X2dyb3VwLGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgcHJvZHVjdEdyb3VwLnB1c2godGhpcy5uYW1lKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICAkKENTU1NlbGVjdG9yRm9ybSsnIC5wcm9kdWN0Q2F0ZWdvcnlTZWxlY3QnKS52YWwocHJvZHVjdEdyb3VwKS5jaGFuZ2UoKTtcclxuXHJcbiAgICAgICAgbGV0IHNlcnZpY2U9W107XHJcbiAgICAgICAgJC5lYWNoKHJvb3QuU3VwcGxpZXIuc2VydmljZSxmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHNlcnZpY2UucHVzaCh0aGlzLm5hbWUpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgICQoQ1NTU2VsZWN0b3JGb3JtKycgLnNlcnZpY2VTZWxlY3QnKS52YWwoc2VydmljZSkuY2hhbmdlKCk7XHJcblxyXG4gICAgICAgIGxldCBwcm9maXRDZW50ZXI9W107XHJcbiAgICAgICAgJC5lYWNoKHJvb3QuU3VwcGxpZXIucHJvZml0X2NlbnRlcixmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHByb2ZpdENlbnRlci5wdXNoKHRoaXMubmFtZSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgLy8kKENTU1NlbGVjdG9yRm9ybSsnIC5wcm9maXRDZW50ZXJTZWxlY3QnKS52YWwocHJvZml0Q2VudGVyKS5jaGFuZ2UoKTtcclxuICAgICAgICAvL2RlYnVnKHByb2ZpdENlbnRlcik7XHJcbiAgICAgICAgJC5lYWNoKHByb2ZpdENlbnRlcixmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICQoJ2lucHV0W3ZhbHVlPVwiJyskLmVzY2FwZVNlbGVjdG9yKHRoaXMpKydcIl0nKS5wcm9wKCBcImNoZWNrZWRcIiwgdHJ1ZSApO1xyXG4gICAgICAgIH0pXHJcblxyXG4gICAgICAgIGlmKHR5cGVvZiByb290LlN1cHBsaWVyWydsb2dvRmlsZSddIT0ndW5kZWZpbmVkJyAmJiAocm9vdC5TdXBwbGllclsnbG9nb0ZpbGUnXSkpe1xyXG4gICAgICAgICAgICAkKENTU1NlbGVjdG9yRm9ybSsnIGltZy5pbWFnZUxvZ28nKS5hdHRyKCdzcmMnLHJvb3QuU3VwcGxpZXJbJ2xvZ29GaWxlJ10pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy9kZWJ1ZyhBUFAuU3VwcGxpZXJBZG1pbi5mb3JtRGF0YVRvRGF0YU9iamVjdEFQSUNhbGwoJy5zdXBwbGllckZvcm0nKVsncHJvZHVjdEdyb3VwJ10pO1xyXG4gICAgICAgIC8vJCgnW25hbWU9cHJvZHVjdEdyb3VwXScpLnZhbChbJ0LDvGbDqcOhcnVfw6lkZXNpcGFyaV90ZXJtw6lrZWsnLCdUb2rDoXMnXSkuY2hhbmdlKCk7XHJcbiAgICAgICAgLy9yb290LnNldERldGFpbHNWaWV3RGF0YSgpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5pbml0Vmlld0RldGFpbHM9ZnVuY3Rpb24gKG9wdGlvbnMsU3VwcGxpZXJJdGVtKXtcclxuICAgICAgICBkZWJ1ZygnKipjYWxsIGluaXRWaWV3RGV0YWlscyAnKTtcclxuICAgICAgICBpZighQVBQLkNvbnRhY3RQb3BVcCl7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCduaW5jcyBBUFAuQ29udGFjdFBvcFVwJylcclxuICAgICAgICAgICAgQVBQLkNvbnRhY3RQb3BVcCA9IG5ldyB3aW5kb3cuQ29udGFjdFBvcFVwKCk7XHJcbiAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdtYXIgdmFuICBBUFAuQ29udGFjdFBvcFVwJylcclxuICAgICAgICB9XHJcbiAgICAgICAgQVBQLkNvbnRhY3RQb3BVcC5pbml0KHtcclxuICAgICAgICAgICAgYWN0aXZlOnRydWUsXHJcbiAgICAgICAgICAgIG9uQWZ0ZXJTYXZlOnJvb3QuY29udGFjdEFjdGlvblxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJvb3QucmVuZGVyQ29udGFjdCgpO1xyXG4gICAgICAgICQoJy5zdXBwbGllckZvcm0gLmJ1dHRvbk5ld0NvbnRhY3QnKS5iaW5kKCdjbGljaycsZnVuY3Rpb24gKCl7XHJcbiAgICAgICAgICAgIEFQUC5TdXBwbGllckFkbWluLnNldENvbnRhY3RQb3B1cFdvcmtmbG93KCduZXcnKTtcclxuICAgICAgICAgICAgQVBQLkNvbnRhY3RQb3BVcC5jbGVhckRhdGEoKTtcclxuICAgICAgICAgICAgQVBQLkNvbnRhY3RQb3BVcC5zaG93KCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgJCgnW2RhdGEtdG9nZ2xlPVwidG9vbHRpcFwiXScpLnRvb2x0aXAoKTtcclxuICAgICAgICBpbml0UmFkaW9CdXR0b25zKCk7XHJcbiAgICAgICAgJChcIjppbnB1dFwiKS5pbnB1dG1hc2soe1xyXG4gICAgICAgICAgICBcIm9uaW5jb21wbGV0ZVwiOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygkKHRoaXMpLmRhdGEoJ3JlcXVpcmVkJykpO1xyXG4gICAgICAgICAgICAgICAgaWYgKCQodGhpcykudmFsKCkubGVuZ3RoID4gMCB8fCAkKHRoaXMpLmRhdGEoJ3JlcXVpcmVkJykgPT09IHRydWUpIHtcclxuICAgICAgICAgICAgICAgICAgICAkKHRoaXMpLmFkZENsYXNzKCdpcy1pbnZhbGlkJyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIFwib25jb21wbGV0ZVwiOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAkKHRoaXMpLnJlbW92ZUNsYXNzKCdpcy1pbnZhbGlkJyk7XHJcbiAgICAgICAgICAgICAgICAkKHRoaXMpLmFkZENsYXNzKCdpcy12YWxpZCcpO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBcIm9uY2xlYXJlZFwiOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnY2xlYXJlZCcpO1xyXG4gICAgICAgICAgICAgICAgJCh0aGlzKS5yZW1vdmVDbGFzcygnaXMtaW52YWxpZCcpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICQoJ2Zvcm0uc3VwcGxpZXJGb3JtIGJ1dHRvbi5Gb3JtU2F2ZUJ1dHRvbicpLm9mZignY2xpY2snKTtcclxuICAgICAgICAkKCdmb3JtLnN1cHBsaWVyRm9ybSBidXR0b24uRm9ybVNhdmVCdXR0b24nKS5vbignY2xpY2snLHJvb3QuY2xpY2tTYXZlQnV0dG9uKTtcclxuICAgICAgICByb290LnNldERldGFpbHNWaWV3RGF0YSgpO1xyXG4gICAgICAgICQoXCIucHJvZHVjdENhdGVnb3J5U2VsZWN0XCIpLnNlbGVjdDIoKTtcclxuICAgICAgICAkKFwiLnNlcnZpY2VTZWxlY3RcIikuc2VsZWN0Mih7XHJcbiAgICAgICAgICAgIHRhZ3M6IHRydWUsXHJcbiAgICAgICAgICAgIGNyZWF0ZVRhZzogZnVuY3Rpb24gKHBhcmFtcykge1xyXG4gICAgICAgICAgICAgICAgbGV0IHRlcm0gPSAkLnRyaW0ocGFyYW1zLnRlcm0pO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmICh0ZXJtID09PSAnJykge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWQ6IHRlcm0sXHJcbiAgICAgICAgICAgICAgICAgICAgdGV4dDogdGVybSxcclxuICAgICAgICAgICAgICAgICAgICBuZXdUYWc6IHRydWUgLy8gYWRkIGFkZGl0aW9uYWwgcGFyYW1ldGVyc1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIC8vJChcIi5wcm9maXRDZW50ZXJTZWxlY3RcIikuc2VsZWN0MigpO1xyXG4gICAgICAgICQoXCJpbnB1dFtuYW1lPWxvZ29GaWxlXVwiKS5jaGFuZ2UoZnVuY3Rpb24oKXtcclxuICAgICAgICAgICAgc2V0SW1hZ2VGcm9tTG9jYWwodGhpcyxPcHRzLmNvbnRhaW5lckNzc1NlbGVjdG9yKycgLmltYWdlTG9nbycpO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICAkKCdmb3JtLnN1cHBsaWVyRm9ybSAucHJvZml0Q2VudGVyU2VsZWN0Q2hlY2tib3hBbGwnKS5vZmYoJ2NsaWNrJyk7XHJcbiAgICAgICAgJCgnZm9ybS5zdXBwbGllckZvcm0gLnByb2ZpdENlbnRlclNlbGVjdENoZWNrYm94QWxsJykub24oJ2NsaWNrJyxmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIC8vY29uc29sZS5sb2coKTtcclxuICAgICAgICAgICAgLy9sZXQgY2hlY2tlZD0kKHRoaXMpLmlzKFwiOmNoZWNrZWRcIilcclxuICAgICAgICAgICAgJCgnZm9ybS5zdXBwbGllckZvcm0gaW5wdXQucHJvZml0Q2VudGVyU2VsZWN0Q2hlY2tib3gnKS5wcm9wKCdjaGVja2VkJywkKHRoaXMpLmlzKFwiOmNoZWNrZWRcIikpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJvb3QucmVuZGVyQXR0YWNobWVudCgpO1xyXG4gICAgICAgIC8vT3B0cy5vbkFmdGVySW5pdFZpZXdEZXRhaWxzKCk7XHJcbiAgICAgICAgcm9vdC5pbml0RmlsZUF0dGFjaG1lbnRGZWF0dXJlKCk7XHJcbiAgICAgICAgZGVidWcoJyoqZW5kIGluaXRWaWV3RGV0YWlscyAnKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnNlbGVjdGVkVXBsb2FkRmlsZVRvZ2dsZT1mdW5jdGlvbiAoZmlsZUlucHV0KXtcclxuICAgICAgICAvKlxyXG4gICAgICAgIGNvbnNvbGUubG9nKGZpbGVJbnB1dC5hdHRyKCduYW1lJykpO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKGZpbGVJbnB1dFswXS5maWxlc1swXSk7XHJcbiAgICAgICAgY29uc29sZS5sb2coZmlsZUlucHV0WzBdLmZpbGVzWzBdLm5hbWUpO1xyXG4gICAgICAgICovXHJcbiAgICAgICAgaWYoZmlsZUlucHV0KXtcclxuICAgICAgICAgICAgJCgnLmNvbnRhaW5lckZpbGVVcGxvYWQnKS5hZGRDbGFzcygnZC1ub25lJyk7XHJcbiAgICAgICAgICAgIGlmKGZpbGVJbnB1dFswXS5maWxlc1swXSl7XHJcbiAgICAgICAgICAgICAgICAkKCcuY29udGFpbmVyVXBsb2FkZWRGaWxlTmFtZScpLnRleHQoZmlsZUlucHV0WzBdLmZpbGVzWzBdLm5hbWUpO1xyXG5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAkKCcuY29udGFpbmVyRmlsZVVwbG9hZFN0YXJ0ZWQnKS5yZW1vdmVDbGFzcygnZC1ub25lJyk7XHJcbiAgICAgICAgICAgICQoJy5jb250YWluZXJVcGxvYWRlZFNwaW5uZXInKS5yZW1vdmVDbGFzcygnZC1ub25lJyk7XHJcbiAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICQoJy5jb250YWluZXJVcGxvYWRlZEZpbGVOYW1lJykudGV4dCgnJyk7XHJcbiAgICAgICAgICAgICQoJy5jdXN0b20tZmlsZS1sYWJlbC5zZWxlY3RlZCcpLnRleHQoJycpO1xyXG4gICAgICAgICAgICAkKCcuY29udGFpbmVyRmlsZVVwbG9hZFN0YXJ0ZWQnKS5hZGRDbGFzcygnZC1ub25lJyk7XHJcbiAgICAgICAgICAgICQoJy51cGxvYWRTdGF0dXNSb3cnKS5hZGRDbGFzcygnZC1ub25lJyk7XHJcbiAgICAgICAgICAgICQoJy5jb250YWluZXJGaWxlVXBsb2FkJykucmVtb3ZlQ2xhc3MoJ2Qtbm9uZScpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmluaXRGaWxlQXR0YWNobWVudEZlYXR1cmU9ZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCctLS0tLS0taW5pdEZpbGVBdHRhY2htZW50RmVhdHVyZS0tLS0tLS0tLS0tJyk7XHJcbiAgICAgICAgaWYocm9vdC5TdXBwbGllci5pZCl7XHJcbiAgICAgICAgICAgICQoJy5jb250YWluZXJGaWxlVXBsb2FkJykucmVtb3ZlQ2xhc3MoJ2Qtbm9uZScpO1xyXG4gICAgICAgICAgICAkKCcuY29udGFpbmVyRmlsZVVwbG9hZE5vbmUnKS5hZGRDbGFzcygnZC1ub25lJyk7XHJcbiAgICAgICAgfVxyXG5cclxuXHJcbiAgICAgICAgJChPcHRzLmNvbnRhaW5lckNzc1NlbGVjdG9yKycgLmJ1dHRvblVwbG9hZCcpLm9mZignY2xpY2snKTtcclxuICAgICAgICAkKE9wdHMuY29udGFpbmVyQ3NzU2VsZWN0b3IrJyAuYnV0dG9uVXBsb2FkJykub24oJ2NsaWNrJyxmdW5jdGlvbiAoKXtcclxuICAgICAgICAgICAgY29uc29sZS5ncm91cCgnLS0tLS0tLWJ1dHRvblVwbG9hZC0tLS0tLS0tLS0tJyk7XHJcbiAgICAgICAgICAgIGxldCBmaWxlSW5wdXQ9JCgnI2lucHV0R3JvdXBBdHRhY2hlRmlsZScpO1xyXG4gICAgICAgICAgICBpZihmaWxlSW5wdXRbMF0uZmlsZXMubGVuZ3RoPDEpe1xyXG4gICAgICAgICAgICAgICAgVG9hc3QuY3JlYXRlKFwiSGliYSFcIiwgJ1bDoWxsYXN6b24ga2kgZsOhamx0IScsIFRPQVNUX1NUQVRVUy5EQU5HRVIsIDEwMDAwKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zb2xlLmxvZygkKE9wdHMuY29udGFpbmVyQ3NzU2VsZWN0b3IpLmZpbmQoJ2Zvcm0uc3VwcGxpZXJGb3JtJylbMF0pO1xyXG4gICAgICAgICAgICBsZXQgZGF0YT0gbmV3IEZvcm1EYXRhKCQoT3B0cy5jb250YWluZXJDc3NTZWxlY3RvcikuZmluZCgnZm9ybS5zdXBwbGllckZvcm0nKVswXSk7XHJcbiAgICAgICAgICAgIGRhdGEuYXBwZW5kKGZpbGVJbnB1dC5hdHRyKCduYW1lJyksZmlsZUlucHV0WzBdLmZpbGVzWzBdKTtcclxuXHJcbiAgICAgICAgICAgIHJvb3Quc2VsZWN0ZWRVcGxvYWRGaWxlVG9nZ2xlKGZpbGVJbnB1dCk7XHJcbiAgICAgICAgICAgIGxldCBhamF4VXJsPU9wdHMuVVJMLmF0dGFjaEZpbGUucmVwbGFjZSgnJWlkJScscm9vdC5TdXBwbGllci5pZCk7XHJcblxyXG4gICAgICAgICAgICBjb25zb2xlLmdyb3VwRW5kKCk7XHJcbiAgICAgICAgICAgICQuYWpheCh7XHJcbiAgICAgICAgICAgICAgICB1cmw6YWpheFVybCxcclxuICAgICAgICAgICAgICAgIGRhdGE6ZGF0YSxcclxuICAgICAgICAgICAgICAgIHR5cGU6J1BPU1QnLFxyXG4gICAgICAgICAgICAgICAgY29udGVudFR5cGU6ZmFsc2UsXHJcbiAgICAgICAgICAgICAgICBwcm9jZXNzRGF0YTogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICBiZWZvcmVTZW5kOiBmdW5jdGlvbigpIHtcclxuXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24oZGF0YSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGRhdGEpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmKGRhdGEuc3VjY2Vzcz09dHJ1ZSl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvb3QuYWRkQXR0YWNobWVudChkYXRhLmRhdGEuYXR0YWNobWVudCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvb3Quc2VsZWN0ZWRVcGxvYWRGaWxlVG9nZ2xlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIGVycm9yOiBmdW5jdGlvbihkYXRhKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coZGF0YS5yZXNwb25zZUpTT04pO1xyXG4gICAgICAgICAgICAgICAgICAgIHJvb3Quc2VsZWN0ZWRVcGxvYWRGaWxlVG9nZ2xlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgYWpheEVycm9yRmllbGRIYW5kbGVyKGRhdGEucmVzcG9uc2VKU09OLmVycm9yKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSlcclxuXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuY2xpY2tOZXc9ZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGRlYnVnKCdjbGlja05ldycpO1xyXG4gICAgICAgIEFQUC5sb2FkTWFpbkNvbnRlbnQoT3B0cy5VUkwuY3JlYXRlLHJvb3QuY2xpY2tOZXdDYWxsQmFjayk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5jbGlja05ld0NhbGxCYWNrPWZ1bmN0aW9uICgpIHtcclxuICAgICAgICBkZWJ1ZygnY2FsbGJhY2tOZXcnKTtcclxuICAgICAgICByb290LlN1cHBsaWVyPW5ldyB3aW5kb3cuU3VwcGxpZXIoKTtcclxuICAgICAgICByb290LmluaXRWaWV3RGV0YWlscygpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5kYXRhdGFibGVSb3dBY3Rpb25FZGl0PWZ1bmN0aW9uIChyb3dEYXRhLG5vZGUpIHtcclxuICAgICAgICBjb25zb2xlLmxvZygnZGF0YXRhYmxlUm93QWN0aW9uRWRpdCBDYWxsZWQnKTtcclxuICAgICAgICAvL09wdHMub25BZnRlckluaXRWaWV3RGV0YWlscz1yb290LmF1dG9maWxsRGV0YWlscztcclxuICAgICAgICBsZXQgYWpheFVybD1PcHRzLlVSTC5lZGl0LnJlcGxhY2UoJyVpZCUnLHJvd0RhdGEuaWQpO1xyXG4gICAgICAgIEFQUC5sb2FkTWFpbkNvbnRlbnQoYWpheFVybCxyb290LmluaXRWaWV3RGV0YWlscyk7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ2RhdGF0YWJsZVJvd0FjdGlvbkVkaXQgRW5kJyk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5jbGlja09yZGVyRGVsZXRlQ29uZmlybWVkPWZ1bmN0aW9uIChldmVudCl7XHJcbiAgICAgICAgZGVidWcoJ2NsaWNrU3VwcGxpZXJEZWxldGVDb25maXJtZWQnKTtcclxuICAgICAgICBkZWJ1ZyhldmVudCk7XHJcbiAgICAgICAgZGVidWcoZXZlbnQuZGF0YSk7XHJcbiAgICAgICAgJCgnI2RpYWxvZ01vZGFsJykubW9kYWwoJ2hpZGUnKTtcclxuICAgICAgICBsZXQgYWpheERhdGE9e307XHJcbiAgICAgICAgYWpheERhdGEuX3Rva2VuPU9wdHMudG9rZW47XHJcbiAgICAgICAgbGV0IGFqYXhVcmw9T3B0cy5VUkwuZGVzdHJveS5yZXBsYWNlKCclaWQlJyxldmVudC5kYXRhLmlkKTtcclxuICAgICAgICBhamF4RGF0YS5fdG9rZW49JCgnaW5wdXRbbmFtZT1fdG9rZW5dJykudmFsKCk7XHJcbiAgICAgICAgY29uc29sZS5sb2coYWpheFVybCk7XHJcbiAgICAgICAgY29uc29sZS5sb2coYWpheERhdGEpO1xyXG4gICAgICAgIGxldCByb3c9JChkYXRhVGFibGVDU1NTZWxlY3RvcikuRGF0YVRhYmxlKCkucm93KHJvb3QuZGFkYXRhdGFibGVSb3dBY3Rpb25DYWxsZXJOb2RlLnBhcmVudHMoJ3RyJykpO1xyXG4gICAgICAgICQuYWpheCh7XHJcbiAgICAgICAgICAgIHVybDphamF4VXJsLFxyXG4gICAgICAgICAgICBkYXRhOmFqYXhEYXRhLFxyXG4gICAgICAgICAgICBtZXRob2Q6XCJERUxFVEVcIixcclxuICAgICAgICAgICAgc3VjY2VzczpmdW5jdGlvbiAoZGF0YSl7XHJcbiAgICAgICAgICAgICAgICBpZihkYXRhLnN1Y2Nlc3M9PXRydWUpe1xyXG4gICAgICAgICAgICAgICAgICAgIHJvdy5yZW1vdmUoKS5kcmF3KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgcm9vdC5kYWRhdGF0YWJsZVJvd0FjdGlvbkNhbGxlck5vZGU9ZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICB9XHJcbiAgICBsZXQgZGF0YXRhYmxlUm93QWN0aW9uQ2FsbGVyTm9kZT1mYWxzZTtcclxuXHJcbiAgICB0aGlzLmRhdGF0YWJsZVJvd0FjdGlvbkRlbGV0ZT1mdW5jdGlvbiAocm93RGF0YSxub2RlKSB7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ2RhdGF0YWJsZVJvd0FjdGlvbkRlbGV0ZSBDYWxsZWQnKTtcclxuICAgICAgICByb290LmRhZGF0YXRhYmxlUm93QWN0aW9uQ2FsbGVyTm9kZT1ub2RlO1xyXG4gICAgICAgICQoJyNkaWFsb2dNb2RhbCcpLm9uKCdzaG93LmJzLm1vZGFsJywgZnVuY3Rpb24gKGV2ZW50KSB7XHJcbiAgICAgICAgICAgIC8vIElmIG5lY2Vzc2FyeSwgeW91IGNvdWxkIGluaXRpYXRlIGFuIEFKQVggcmVxdWVzdCBoZXJlIChhbmQgdGhlbiBkbyB0aGUgdXBkYXRpbmcgaW4gYSBjYWxsYmFjaykuXHJcbiAgICAgICAgICAgIC8vIFVwZGF0ZSB0aGUgbW9kYWwncyBjb250ZW50LiBXZSdsbCB1c2UgalF1ZXJ5IGhlcmUsIGJ1dCB5b3UgY291bGQgdXNlIGEgZGF0YSBiaW5kaW5nIGxpYnJhcnkgb3Igb3RoZXIgbWV0aG9kcyBpbnN0ZWFkLlxyXG4gICAgICAgICAgICB2YXIgbW9kYWwgPSAkKHRoaXMpO1xyXG4gICAgICAgICAgICBtb2RhbC5maW5kKCcubW9kYWwtdGl0bGUnKS50ZXh0KCdNZWdlcsWRc8OtdMOpcyAnKTtcclxuICAgICAgICAgICAgbW9kYWwuZmluZCgnLm1vZGFsLWJvZHknKS50ZXh0KCdCaXp0b3NhbiB0w7ZybGkgYSBiZXN6w6FsbMOtdMOzdD8nKTtcclxuICAgICAgICAgICAgbW9kYWwuZmluZCgnLmJ1dHRvblllcycpLm9mZignY2xpY2snKTtcclxuICAgICAgICAgICAgbW9kYWwuZmluZCgnLmJ1dHRvblllcycpLm9uKCdjbGljaycse2lkOnJvd0RhdGEuaWR9LHJvb3QuY2xpY2tPcmRlckRlbGV0ZUNvbmZpcm1lZCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgJCgnI2RpYWxvZ01vZGFsJykubW9kYWwoJ3Nob3cnKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmRhdGF0YWJsZVJvd0FjdGlvbkJ1dHRvbkNsaWNrPWZ1bmN0aW9uIChldmVudCl7XHJcbiAgICAgICAgZGVidWcoJ2RhdGF0YWJsZVJvd0FjdGlvbkJ1dHRvbkNsaWNrJyk7XHJcbiAgICAgICAgbGV0IG5vZGU9JChldmVudFswXS5jdXJyZW50VGFyZ2V0KTtcclxuICAgICAgICBsZXQgcm93PSQoZGF0YVRhYmxlQ1NTU2VsZWN0b3IpLkRhdGFUYWJsZSgpLnJvdyhub2RlLnBhcmVudHMoJ3RyJykpO1xyXG4gICAgICAgIGxldCByb3dEYXRhPXJvdy5kYXRhKCk7XHJcbiAgICAgICAgbGV0IGFjdGlvbk5hbWU9J2RhdGF0YWJsZVJvd0FjdGlvbicrbm9kZS5kYXRhKCdidXR0b250eXBlJykuY2FwaXRhbGl6ZSgpO1xyXG4gICAgICAgIGlmICh0eXBlb2Ygcm9vdFthY3Rpb25OYW1lXSA9PT0gXCJmdW5jdGlvblwiKSB7XHJcbiAgICAgICAgICAgIHJldHVybiByb290W2FjdGlvbk5hbWVdKHJvd0RhdGEsbm9kZSlcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5pbml0Vmlld0xpc3QgPSBmdW5jdGlvbiAob3B0aW9ucz17fSkge1xyXG4gICAgICAgIGRlYnVnKCdsaXN0dmlldyBpbmljaWFsaXphdGlvbicpO1xyXG4gICAgICAgIGRhdGFUYWJsZUNTU1NlbGVjdG9yPU9wdHMuY29udGFpbmVyQ3NzU2VsZWN0b3IrJyAuZGF0YVRhYmxlJzsgLy9cclxuXHJcbiAgICAgICAgbGV0IGNvbE51bT0kKGRhdGFUYWJsZUNTU1NlbGVjdG9yKycgdGhlYWQgdGgnKS5sZW5ndGg7IC8vYnV0dG9ucyBpbnNlcnQgcG9zaXRpb24gbmVlZFxyXG4gICAgICAgIEFQUC5zZXRPcHRzKHtcclxuICAgICAgICAgICAgZGF0YXRhYmxlQWN0aW9uQnV0dG9uQ2xpY2tDYWxsQmFjazpyb290LmNsaWNrTmV3LFxyXG4gICAgICAgICAgICBkYXRhdGFibGVSb3dBY3Rpb25CdXR0b25DbGlja0NhbGxCYWNrOnJvb3QuZGF0YXRhYmxlUm93QWN0aW9uQnV0dG9uQ2xpY2ssXHJcblxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgbGV0IG9yZGVyRGlyZWN0aXZlPU9wdHMuZGF0YVRhYmxlLm9yZGVyRGlyZWN0aXZlO1xyXG4gICAgICAgIGlmKHR5cGVvZiBvcHRpb25zWydvcmRlckRpcmVjdGl2ZSddIT0ndW5kZWZpbmVkJyl7XHJcbiAgICAgICAgICAgIG9yZGVyRGlyZWN0aXZlPW9wdGlvbnNbJ29yZGVyRGlyZWN0aXZlJ107XHJcbiAgICAgICAgfVxyXG4gICAgICAgICQoZGF0YVRhYmxlQ1NTU2VsZWN0b3IpLkRhdGFUYWJsZSgge1xyXG4gICAgICAgICAgICBsYW5ndWFnZToge1xyXG4gICAgICAgICAgICAgICAgdXJsOiAnLy9jZG4uZGF0YXRhYmxlcy5uZXQvcGx1Zy1pbnMvMS4xMC4yNC9pMThuL0h1bmdhcmlhbi5qc29uJ1xyXG4gICAgICAgICAgICB9LFxyXG5cclxuICAgICAgICAgICAgLy9cImFqYXhcIjogXCJ7e2Fzc2V0KCdleGFwbWxlMi5qc29uJyl9fVwiLFxyXG4gICAgICAgICAgICBcImFqYXhcIjogT3B0cy5VUkwuZ2V0RGF0YVRhYmxlQ29udGVudCxcclxuICAgICAgICAgICAgXCJjb2x1bW5EZWZzXCI6IFtcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBcInRhcmdldHNcIjogY29sTnVtLTEsXHJcbiAgICAgICAgICAgICAgICAgICAgXCJyZW5kZXJcIjogZnVuY3Rpb24gKCBkYXRhLCB0eXBlLCByb3cgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBidXR0b25zPUFQUC5kYXRhdGFibGVBZGRSb3dUcmFzaEJ1dHRvbigwLGFyZ3VtZW50cyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJ1dHRvbnMrPUFQUC5kYXRhdGFibGVBZGRSb3dFZGl0QnV0dG9uKDAsYXJndW1lbnRzKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGJ1dHRvbnM7XHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgXCJ0YXJnZXRzXCI6IDEsXHJcbiAgICAgICAgICAgICAgICAgICAgXCJyZW5kZXJcIjogZnVuY3Rpb24gKCBkYXRhLCB0eXBlLCByb3cgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0eXBlID09PSBcInNvcnRcIiA/IGRhdGEubGF0aW5pc2UoKSA6IGRhdGE7XHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAvL3sgXCJ2aXNpYmxlXCI6IGZhbHNlLCAgXCJ0YXJnZXRzXCI6IFsgMCBdIH1cclxuICAgICAgICAgICAgXSxcclxuICAgICAgICAgICAgYnV0dG9uczp7XHJcbiAgICAgICAgICAgICAgICBidXR0b25zOiBbXHJcbiAgICAgICAgICAgICAgICAgICAgJ2V4Y2VsJywncGRmJyxcclxuICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4dGVuZDogJ3ByaW50JyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy90ZXh0OiAnUHJpbnQgY3VycmVudCBwYWdlJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgJ3RpdGxlJzogJ3RpdGxlIGN1c3RvbSB0ZXh0JyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgJ21lc3NhZ2VUb3AnOiAnTWVzc2FnZSBPbiBUb3AnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBhdXRvUHJpbnQ6IHRydWVcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIC8qKi9cclxuXHJcbiAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiAnw5pqIGZlbHZpdGVsZScsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogJ2J0biBidG4tc3VjY2VzcyBuZXdJdGVtJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXR0cjp7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhOjEsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGI6MlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2RhdGEnOiduZXdJdGVtJ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpbml0OiBmdW5jdGlvbihhcGksIG5vZGUsIGNvbmZpZykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJChub2RlKS5yZW1vdmVDbGFzcygndWktYnV0dG9uJylcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uOiBmdW5jdGlvbiAoIGUsIGR0LCBub2RlLCBjb25maWcgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBBUFAuZGF0YXRhYmxlQWN0aW9uQnV0dG9uQ2xpY2tDYWxsQmFjayhhcmd1bWVudHMpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogY29uc29sZS5sb2coZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coZHQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKG5vZGUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGNvbmZpZyk7Ki9cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBdXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIFwiY29sdW1uc1wiOiBbXHJcbiAgICAgICAgICAgICAgICB7IFwiZGF0YVwiOiBcImlkXCIgfSxcclxuICAgICAgICAgICAgICAgIHsgXCJkYXRhXCI6IFwibmFtZVwiIH0sXHJcbiAgICAgICAgICAgICAgICB7IFwiZGF0YVwiOiBcImhvb3JleWNhSWRcIiB9LFxyXG4gICAgICAgICAgICAgICAgeyBcImRhdGFcIjogXCJuYW1lSWRcIiB9LFxyXG4gICAgICAgICAgICAgICAgeyBcImRhdGFcIjogXCJjcmVhdGVkX2F0XCIgfSxcclxuICAgICAgICAgICAgICAgIG51bGwsXHJcbiAgICAgICAgICAgIF0sXHJcbiAgICAgICAgICAgIFwib3JkZXJcIjogb3JkZXJEaXJlY3RpdmUsXHJcbiAgICAgICAgICAgIFwic3RhdGVTYXZlXCI6IHRydWUsXHJcbiAgICAgICAgICAgIFwiZHJhd0NhbGxiYWNrXCI6IGZ1bmN0aW9uKCBzZXR0aW5ncyApIHtcclxuICAgICAgICAgICAgICAgIEFQUC5kYXRhdGFibGVBZGRSb3dBY3Rpb24oZGF0YVRhYmxlQ1NTU2VsZWN0b3IpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSApO1xyXG4gICAgICAgIGRlYnVnKCdsaXN0dmlldyBlbmQnKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmF1dG9maWxsRGV0YWlscz1mdW5jdGlvbiAoKXtcclxuICAgICAgICBkZWJ1ZygnbnllcmVzcmUgYWxsdW5rJyk7XHJcbiAgICAgICAgbGV0IHJhbmRvbU51bWJlcj1nZXRSYW5kb21JbnQoOTk5OSk7XHJcbiAgICAgICAgJCgnaW5wdXRbbmFtZT1uYW1lXScpLnZhbCgnQmVzemFsw610w7MnK3JhbmRvbU51bWJlcik7XHJcbiAgICAgICAgJCgnaW5wdXRbbmFtZT1ob29yZXljYUlkXScpLnZhbCgnaGInK3JhbmRvbU51bWJlcik7XHJcbiAgICAgICAgJCgnaW5wdXRbbmFtZT1uYW1lSWRdJykudmFsKCdiZScrcmFuZG9tTnVtYmVyKTtcclxuICAgICAgICAkKCdpbnB1dFtuYW1lPW9yZGVyRW1haWxdJykudmFsKCdrYXBjc29sYXQnK3JhbmRvbU51bWJlcisnQGJlc3phbGxpdG8uaHUnKTtcclxuICAgICAgICAkKCdpbnB1dFtuYW1lPW9yZGVyRW1haWwyXScpLnZhbCgnaW5mb3JtYWNpbycrcmFuZG9tTnVtYmVyKydAYmVzemFsbGl0by5odScpO1xyXG4gICAgICAgICQoJ2lucHV0W25hbWU9YWRkcmVzc10nKS52YWwoJzg5ODkgU3VwcGxpZXIgdXRjYSAnK3JhbmRvbU51bWJlcik7XHJcbiAgICAgICAgJCgnaW5wdXRbbmFtZT1tYWlsaW5nQWRkcmVzc10nKS52YWwoJzg5ODkgUG9zdGFpIMO6dCcrcmFuZG9tTnVtYmVyKTtcclxuICAgICAgICAkKCdpbnB1dFtuYW1lPXBob25lXScpLnZhbCgnKzM2MzAxMjM0NTY3Jyk7XHJcbiAgICAgICAgJCgnaW5wdXRbbmFtZT1mYXhdJykudmFsKCczNjMwODg4OTk5OScpO1xyXG4gICAgICAgICQoJ2lucHV0W25hbWU9Y3VzdG9tZXJTZXJ2aWNlUGhvbmVdJykudmFsKCcrMzY3NjEyMzQ0NDQnKTtcclxuICAgICAgICAkKCd0ZXh0YXJlYVtuYW1lPW5vdGVdJykudmFsKCdNZWdqZWd5emVtICcrcmFuZG9tTnVtYmVyKTtcclxuXHJcbiAgICB9XHJcbiAgICB0aGlzLnRlc3RNb2RlPWZ1bmN0aW9uICgpIHtcclxuICAgICAgICBjb25zb2xlLmRlYnVnKCchISEhdGVzdG1vZGUgISEhIScpO1xyXG4gICAgICAgIHJvb3QuU3VwcGxpZXIgPSBuZXcgd2luZG93LlN1cHBsaWVyKHtcclxuICAgICAgICAgICAgJ2NvbnRhY3QnOltcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBpZDoyLFxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBpZDozLFxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIC8qXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDozLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOidLw7NzYSBWZXJvbmlrYScsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVtYWlsOidzemFtbGF6YXM0QGZ1bmtjaW8uaHUnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaG9uZTone3tmb3JtYXR0ZXJQaG9uZU51bWJlcihcIiszNjIwNDU4OTE4MFwiKX19J1xyXG4gICAgICAgICAgICB9XHJcbiovXHJcblxyXG4gICAgICAgICAgICBdXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgT3B0cy5vbkFmdGVySW5pdFZpZXdEZXRhaWxzPXJvb3QuYXV0b2ZpbGxEZXRhaWxzO1xyXG4gICAgICAgIEFQUC5sb2FkTWFpbkNvbnRlbnQoT3B0cy5VUkwuY3JlYXRlLHJvb3QuaW5pdFZpZXdEZXRhaWxzKTtcclxuICAgIH1cclxuICAgIHRoaXMuaW5pdD1mdW5jdGlvbiAob3B0aW9ucyxTdXBwbGllckl0ZW0pe1xyXG4gICAgICAgICQuZXh0ZW5kKE9wdHMsIG9wdGlvbnMpO1xyXG5cclxuICAgICAgICBpZihPcHRzLnRlc3RNb2RlKXtcclxuICAgICAgICAgICAgcmV0dXJuIHJvb3QudGVzdE1vZGUoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYoU3VwcGxpZXJJdGVtKXtcclxuICAgICAgICAgICAgcm9vdC5TdXBwbGllcj1TdXBwbGllckl0ZW1cclxuICAgICAgICB9XHJcbiAgICAgICAgcm9vdC5pbml0Vmlld0xpc3QoKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnJlbmRlckF0dGFjaG1lbnQ9ZnVuY3Rpb24gKCl7XHJcbiAgICAgICAgbGV0IHJvd051bT0xO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCdyZW5kZXJpbmdBdHRhY2htZW50Jyk7XHJcbiAgICAgICAgJC5lYWNoKHJvb3QuU3VwcGxpZXIuZ2V0RGF0YSgnYXR0YWNobWVudCcpLGZ1bmN0aW9uICgpe1xyXG4gICAgICAgICAgICBsZXQgYXR0YWNobWVudERhdGE9dGhpcztcclxuICAgICAgICAgICAgYXR0YWNobWVudERhdGEucm93TnVtPXJvd051bTtcclxuICAgICAgICAgICAgZGF0ZT1uZXcgRGF0ZShhdHRhY2htZW50RGF0YS5jcmVhdGVkX2F0KTtcclxuICAgICAgICAgICAgYXR0YWNobWVudERhdGEuZGF0ZT1kYXRlLnRvTG9jYWxlU3RyaW5nKCk7XHJcbiAgICAgICAgICAgIGF0dGFjaG1lbnREYXRhLmxpbms9YXR0YWNobWVudERhdGEuUHVibGljVXJsKycvJythdHRhY2htZW50RGF0YS5maWxlbmFtZTtcclxuICAgICAgICAgICAgbGV0IHRlbXBsYXRlPSQoJ3RlbXBsYXRlW2RhdGEtbmFtZT1cInN1cHBsaWVyQXR0YWNobWVudFRhYmxlUm93XCJdJykuaHRtbCgpXHJcbiAgICAgICAgICAgIGxldCByZW5kZXI9TXVzdGFjaGUucmVuZGVyKHRlbXBsYXRlLGF0dGFjaG1lbnREYXRhKTtcclxuICAgICAgICAgICAgJCgnLmF0dGFjaG1lbnRUYWJsZSB0Ym9keScpLmFwcGVuZChyZW5kZXIpO1xyXG4gICAgICAgICAgICByb3dOdW0rKztcclxuICAgICAgICB9KTtcclxuICAgICAgICByb290LmJpbmRBdHRhY2htZW50Q2xpY2tBY3Rpb24oKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmFkZEF0dGFjaG1lbnQ9ZnVuY3Rpb24gKGF0dGFjaG1lbnREYXRhKXtcclxuICAgICAgICBjb25zb2xlLmxvZyhhdHRhY2htZW50RGF0YSk7XHJcbiAgICAgICAgbGV0IENTU1NlbGVjdG9yRm9ybT1PcHRzLmNvbnRhaW5lckNzc1NlbGVjdG9yKycgLnN1cHBsaWVyRm9ybSc7XHJcbiAgICAgICAgcm9vdC5TdXBwbGllci5hdHRhY2htZW50LnB1c2goYXR0YWNobWVudERhdGEpO1xyXG4gICAgICAgIGF0dGFjaG1lbnREYXRhLnJvd051bT1yb290LlN1cHBsaWVyLmF0dGFjaG1lbnQubGVuZ3RoO1xyXG4gICAgICAgIGxldCB0ZW1wbGF0ZT0kKCd0ZW1wbGF0ZVtkYXRhLW5hbWU9XCJzdXBwbGllckF0dGFjaG1lbnRUYWJsZVJvd1wiXScpLmh0bWwoKVxyXG4gICAgICAgIGxldCByZW5kZXI9TXVzdGFjaGUucmVuZGVyKHRlbXBsYXRlLGF0dGFjaG1lbnREYXRhKTtcclxuICAgICAgICAkKENTU1NlbGVjdG9yRm9ybSsnIC5hdHRhY2htZW50VGFibGUgdGJvZHknKS5hcHBlbmQocmVuZGVyKTtcclxuICAgICAgICByb290LmJpbmRDb250YWN0Q2xpY2tBY3Rpb24oKTtcclxuICAgICAgICBUb2FzdC5lbmFibGVUaW1lcnMoZmFsc2UpO1xyXG4gICAgICAgIFRvYXN0LmNyZWF0ZShcIkbDoWpsIGhvenrDoWFkdmEhXCIsIGF0dGFjaG1lbnREYXRhLm9yaWdpbmFsX2ZpbGVuYW1lK1wiIGbDoWpsIGhvenrDoWFkdmFcIiwgVE9BU1RfU1RBVFVTLlNVQ0NFU1MsNTAwMCk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIHRoaXMucmVzZXRDb250YWN0VGFibGU9ZnVuY3Rpb24gKCl7XHJcbiAgICAgICAgJCgnLmNvbnRhY3RUYWJsZSB0Ym9keSB0cicpLnJlbW92ZSgpO1xyXG4gICAgICAgIHJvb3QucmVuZGVyQ29udGFjdCgpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5yZW5kZXJDb250YWN0PWZ1bmN0aW9uICgpe1xyXG4gICAgICAgIGxldCByb3dOdW09MTtcclxuICAgICAgICBjb25zb2xlLmxvZygncmVuZGVyaW5nQ29udGFjdHMnKTtcclxuICAgICAgICAkLmVhY2gocm9vdC5TdXBwbGllci5nZXREYXRhKCdjb250YWN0JyksZnVuY3Rpb24gKCl7XHJcbiAgICAgICAgICAgIGxldCBjb250YWN0RGF0YT10aGlzO1xyXG4gICAgICAgICAgICBjb250YWN0RGF0YS5yb3dOdW09cm93TnVtO1xyXG4gICAgICAgICAgICAvL2NvbnNvbGUubG9nKGNvbnRhY3REYXRhKTtcclxuICAgICAgICAgICAgbGV0IHRlbXBsYXRlPSQoJ3RlbXBsYXRlW2RhdGEtbmFtZT1cInN1cHBsaWVyQ29udGFjdFRhYmxlUm93XCJdJykuaHRtbCgpXHJcbiAgICAgICAgICAgIGxldCByZW5kZXI9TXVzdGFjaGUucmVuZGVyKHRlbXBsYXRlLGNvbnRhY3REYXRhKTtcclxuICAgICAgICAgICAgJCgnLmNvbnRhY3RUYWJsZSB0Ym9keScpLmFwcGVuZChyZW5kZXIpO1xyXG4gICAgICAgICAgICByb3dOdW0rKztcclxuICAgICAgICB9KTtcclxuICAgICAgICByb290LmJpbmRDb250YWN0Q2xpY2tBY3Rpb24oKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmJpbmRDb250YWN0Q2xpY2tBY3Rpb24gPWZ1bmN0aW9uICgpe1xyXG4gICAgICAgIGxldCBub2RlPSQoJy5jb250YWN0VGFibGUgLmJ1dHRvbkRlbGV0ZScpO1xyXG4gICAgICAgIG5vZGUudW5iaW5kKCdjbGljaycpO1xyXG4gICAgICAgIG5vZGUuYmluZCgnY2xpY2snLHJvb3QuY29udGFjdERlbGV0ZUNsaWNrKTtcclxuXHJcbiAgICAgICAgbm9kZT0kKCcuY29udGFjdFRhYmxlIC5idXR0b25FZGl0Jyk7XHJcbiAgICAgICAgbm9kZS51bmJpbmQoJ2NsaWNrJyk7XHJcbiAgICAgICAgbm9kZS5iaW5kKCdjbGljaycscm9vdC5jb250YWN0RWRpdENsaWNrKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5iaW5kQXR0YWNobWVudENsaWNrQWN0aW9uPWZ1bmN0aW9uICgpe1xyXG4gICAgICAgIGxldCBub2RlPSQoJy5hdHRhY2htZW50VGFibGUgLmJ1dHRvbkRlbGV0ZScpO1xyXG4gICAgICAgIG5vZGUudW5iaW5kKCdjbGljaycpO1xyXG4gICAgICAgIG5vZGUuYmluZCgnY2xpY2snLHJvb3QuYXR0YWNobWVudERlbGV0ZUNsaWNrKTtcclxuICAgIH1cclxuICAgIGxldCBjdXJyZW50QXR0YWNobWVudFJvdz1mYWxzZTtcclxuICAgIHRoaXMuYXR0YWNobWVudERlbGV0ZUNsaWNrPWZ1bmN0aW9uIChldmVudCl7XHJcbiAgICAgICAgbGV0IHJvdz0kKHRoaXMpLmNsb3Nlc3QoJ3RyJyk7XHJcbiAgICAgICAgbGV0IGlkPXJvdy5maW5kKCdpbnB1dFtuYW1lPWF0dGFjaG1lbnRJZF0nKS52YWwoKTtcclxuICAgICAgICBsZXQgYWpheFVybD1PcHRzLlVSTC5kZXRhY2hGaWxlLnJlcGxhY2UoJyVpZCUnLHJvb3QuU3VwcGxpZXIuaWQpO1xyXG4gICAgICAgIC8vbGV0IGRhdGE9IG5ldyBGb3JtRGF0YSgkKE9wdHMuY29udGFpbmVyQ3NzU2VsZWN0b3IpLmZpbmQoJ2Zvcm0uc3VwcGxpZXJGb3JtJylbMF0pO1xyXG4gICAgICAgIC8vZGF0YS5hcHBlbmQoZmlsZUlucHV0LmF0dHIoJ25hbWUnKSxmaWxlSW5wdXRbMF0uZmlsZXNbMF0pO1xyXG4gICAgICAgIGxldCBkYXRhPXt9O1xyXG4gICAgICAgIGRhdGEuX3Rva2VuPSQoJ2lucHV0W25hbWU9XCJfdG9rZW5cIl0nKS52YWwoKTtcclxuICAgICAgICBkYXRhLmF0dGFjaGVtbnRJZD1pZDtcclxuICAgICAgICAkLmFqYXgoe1xyXG4gICAgICAgICAgICB1cmw6YWpheFVybCxcclxuICAgICAgICAgICAgZGF0YTpkYXRhLFxyXG4gICAgICAgICAgICB0eXBlOidQT1NUJyxcclxuICAgICAgICAgICAgLy9jb250ZW50VHlwZTpmYWxzZSxcclxuICAgICAgICAgICAgLy9wcm9jZXNzRGF0YTogZmFsc2UsXHJcbiAgICAgICAgICAgIGJlZm9yZVNlbmQ6IGZ1bmN0aW9uKCkge1xyXG5cclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24oZGF0YSkge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coZGF0YSk7XHJcbiAgICAgICAgICAgICAgICBpZihkYXRhLnN1Y2Nlc3M9PXRydWUpe1xyXG4gICAgICAgICAgICAgICAgICAgIHJvb3QuU3VwcGxpZXIuYXR0YWNobWVudD1yb290LlN1cHBsaWVyLmF0dGFjaG1lbnQuZmlsdGVyKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiAodmFsdWUsaW5kZXgsYXJyKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5pZCE9PWRhdGEuZGF0YS4gICBhdHRhY2htZW50LmlkKjEpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAgdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgLypcclxuICAgICAgICAgICAgICAgICAgICAqL1xyXG4gICAgICAgICAgICAgICAgICAgIC8vcm93LnJlbW92ZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJvb3QucmVzZXRBdHRhY2htZW50VGFibGUoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgZXJyb3I6IGZ1bmN0aW9uKGRhdGEpIHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGRhdGEucmVzcG9uc2VKU09OKTtcclxuICAgICAgICAgICAgICAgIHJvb3Quc2VsZWN0ZWRVcGxvYWRGaWxlVG9nZ2xlKCk7XHJcbiAgICAgICAgICAgICAgICBhamF4RXJyb3JGaWVsZEhhbmRsZXIoZGF0YS5yZXNwb25zZUpTT04uZXJyb3IpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuXHJcbiAgICB9XHJcblxyXG5cclxuICAgIHRoaXMucmVzZXRBdHRhY2htZW50VGFibGU9ZnVuY3Rpb24gKCl7XHJcbiAgICAgICAgJCgnLmF0dGFjaG1lbnRUYWJsZSB0Ym9keSB0cicpLnJlbW92ZSgpO1xyXG4gICAgICAgIHJvb3QucmVuZGVyQXR0YWNobWVudCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuY29udGFjdERlbGV0ZUNsaWNrPWZ1bmN0aW9uIChldmVudCl7XHJcbiAgICAgICAgbGV0IHJvdz0kKHRoaXMpLmNsb3Nlc3QoJ3RyJyk7XHJcbiAgICAgICAgbGV0IGlkPXJvdy5maW5kKCdpbnB1dFtuYW1lPWNvbnRhY3RJZF0nKS52YWwoKTtcclxuICAgICAgICByb290LlN1cHBsaWVyLmNvbnRhY3Q9cm9vdC5TdXBwbGllci5jb250YWN0LmZpbHRlcihcclxuICAgICAgICAgICAgZnVuY3Rpb24gKHZhbHVlLGluZGV4LGFycil7XHJcbiAgICAgICAgICAgICAgICBpZiAodmFsdWUuaWQhPT1pZCoxKXtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gIHRydWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICApO1xyXG4gICAgICAgIHJvdy5yZW1vdmUoKTtcclxuICAgICAgICByb290LnJlc2V0Q29udGFjdFRhYmxlKCk7XHJcbiAgICB9XHJcbiAgICByb290LmdldENvbnRhY3RQb3B1cFdvcmtmbG93ID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiBjb250YWN0UG9wdXBXb3JrZmxvdztcclxuICAgIH1cclxuICAgIHJvb3Quc2V0Q29udGFjdFBvcHVwV29ya2Zsb3cgPSBmdW5jdGlvbiAoc3RhdHVzKSB7XHJcbiAgICAgICAgY29udGFjdFBvcHVwV29ya2Zsb3c9c3RhdHVzO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICB0aGlzLmNvbnRhY3RFZGl0Q2xpY2s9ZnVuY3Rpb24gKGV2ZW50KXtcclxuICAgICAgICAvL2NvbnNvbGUubG9nKHRoaXMpO1xyXG4gICAgICAgIGxldCByb3c9JCh0aGlzKS5jbG9zZXN0KCd0cicpO1xyXG4gICAgICAgIGxldCBpZD1yb3cuZmluZCgnaW5wdXRbbmFtZT1jb250YWN0SWRdJykudmFsKCk7XHJcbiAgICAgICAgcm9vdC5zZXRDb250YWN0UG9wdXBXb3JrZmxvdygnZWRpdCcpO1xyXG4gICAgICAgIEFQUC5Db250YWN0UG9wVXAubG9hZERhdGEoaWQpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuZ2V0U3VwcGxpZXI9ZnVuY3Rpb24gKCl7XHJcbiAgICAgICAgcmV0dXJuIHJvb3QuU3VwcGxpZXI7XHJcbiAgICB9XHJcbiAgICB0aGlzLmNvbnRhY3RBY3Rpb249ZnVuY3Rpb24gKGNvbnRhY3REYXRhKXtcclxuICAgICAgICBjb25zb2xlLmxvZygnbmFoIG1vc3Qga2VsbGVuZSBtZWcgdmFsYW1pdCBjc2luYWxuaS4nKVxyXG4gICAgICAgIGlmKHJvb3QuZ2V0Q29udGFjdFBvcHVwV29ya2Zsb3coKT09J25ldycpe1xyXG4gICAgICAgICAgICByb290LmFkZENvbnRhY3QoY29udGFjdERhdGEpO1xyXG4gICAgICAgIH1lbHNlIGlmKHJvb3QuZ2V0Q29udGFjdFBvcHVwV29ya2Zsb3coKT09J2VkaXQnKXtcclxuICAgICAgICAgICAgcm9vdC5lZGl0Q29udGFjdChjb250YWN0RGF0YS5pZCxjb250YWN0RGF0YSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuZWRpdENvbnRhY3Q9ZnVuY3Rpb24gKGlkLGNvbnRhY3REYXRhKXtcclxuXHJcbiAgICAgICAgbGV0IG5ld0NvbnRhY3RzPVtdO1xyXG4gICAgICAgICQuZWFjaChyb290LlN1cHBsaWVyLmdldERhdGEoJ2NvbnRhY3QnKSxmdW5jdGlvbiAoaW5kZXgpe1xyXG4gICAgICAgICAgICBpZih0aGlzLmlkPT1pZCl7XHJcbiAgICAgICAgICAgICAgICBuZXdDb250YWN0cy5wdXNoKGNvbnRhY3REYXRhKTtcclxuICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICBuZXdDb250YWN0cy5wdXNoKHRoaXMpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcm9vdC5TdXBwbGllci5jb250YWN0PW5ld0NvbnRhY3RzO1xyXG4gICAgICAgIHJvb3QucmVzZXRDb250YWN0VGFibGUoKTtcclxuICAgICAgICBUb2FzdC5jcmVhdGUoeyB0aXRsZTogXCJLYXBjc29sYXQgYWRhdGFpIG3Ds2Rvc8OtdHZhIVwiLCBtZXNzYWdlOiBjb250YWN0RGF0YS5uYW1lK1wiIG5ldsWxIGthcGNzb2xhdHRhcnTDsyBtw7Nkb3PDrXR2YVwiLCBzdGF0dXM6IFRPQVNUX1NUQVRVUy5TVUNDRVNTLCB0aW1lb3V0OiA1MDAwIH0pO1xyXG4gICAgfVxyXG4gICAgdGhpcy5hZGRDb250YWN0PWZ1bmN0aW9uIChjb250YWN0RGF0YSl7XHJcbiAgICAgICAgLypcclxuICAgICAgICBmZWwga2VsbCB2ZW5uaSBhIHNvcmJhXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgcm9vdC5TdXBwbGllci5jb250YWN0LnB1c2goY29udGFjdERhdGEpO1xyXG4gICAgICAgIGNvbnRhY3REYXRhLnJvd051bT1yb290LlN1cHBsaWVyLmNvbnRhY3QubGVuZ3RoO1xyXG4gICAgICAgIGxldCB0ZW1wbGF0ZT0kKCd0ZW1wbGF0ZVtkYXRhLW5hbWU9XCJzdXBwbGllckNvbnRhY3RUYWJsZVJvd1wiXScpLmh0bWwoKVxyXG4gICAgICAgIGxldCByZW5kZXI9TXVzdGFjaGUucmVuZGVyKHRlbXBsYXRlLGNvbnRhY3REYXRhKTtcclxuICAgICAgICAkKCcuY29udGFjdFRhYmxlIHRib2R5JykuYXBwZW5kKHJlbmRlcik7XHJcbiAgICAgICAgcm9vdC5iaW5kQ29udGFjdENsaWNrQWN0aW9uKCk7XHJcbiAgICAgICAgVG9hc3QuZW5hYmxlVGltZXJzKGZhbHNlKTtcclxuICAgICAgICBUb2FzdC5jcmVhdGUoeyB0aXRsZTogXCJLYXBjc29sYXR0YXJ0w7MgaG96esOhYWR2YSFcIiwgbWVzc2FnZTogY29udGFjdERhdGEubmFtZStcIiBuZXbFsSBrYXBjc29sYXR0YXJ0w7MgaG96esOhYWR2YVwiLCBzdGF0dXM6IFRPQVNUX1NUQVRVUy5TVUNDRVNTLCB0aW1lb3V0OiA1MDAwIH0pO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICB0aGlzLmNvbnN0cnVjdChvcHRpb25zLFN1cHBsaWVySXRlbSk7XHJcbn07XHJcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7OztBQUFBLElBQUcsT0FBT0EsUUFBUSxLQUFHLFdBQVcsRUFBQztFQUFBLElBQ3ZCQSxTQUFRLDBCQUFBQyxVQUFBO0lBRVY7QUFDUjtBQUNBO0lBQ1EsU0FBQUMsVUFBYUMsSUFBSSxFQUFDQyxPQUFPLEVBQUU7TUFBQSxJQUFBQyxLQUFBO01BQUFDLGVBQUEsT0FBQUosU0FBQTtNQUN2QkcsS0FBQSxHQUFBRSxVQUFB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\n//# sourceURL=webpack-internal:///./resources/js/admin/supplier.js\n\n}"); +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 /*\r\n * Constructor\r\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 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 /*\r\n * Variables accessible\r\n * in the class\r\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 },\n dataTable: {\n orderDirective: [1, 'asc']\n },\n onAfterInitViewDetails: function onAfterInitViewDetails() {}\n };\n var Supplier = {};\n var root = this;\n var contactPopupWorkflow = 'new';\n /*\r\n * Constructor\r\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:\r\n ajaxData['productGroup']=$(\".productCategorySelect\").select2().val();\r\n formJSON.multiselectName = data.getAll('multiselectName');\r\n $.each(formJSON, function (item, value) {\r\n formJSON[$.lcFirst(item.replace('contact', ''))] = value;\r\n delete formJSON[item];\r\n });\r\n if(formJSON.phone){\r\n formJSON.phone=formJSON.phone.replaceAll('_','');\r\n }\r\n if(formJSON.email){\r\n formJSON.email=formJSON.email.replaceAll('_','');\r\n }\r\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 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\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 $(\".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 debug('**end initViewDetails ');\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 $('.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 /*\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.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 /*\r\n {\r\n id:3,\r\n name:'Kósa Veronika',\r\n email:'szamlazas4@funkcio.hu',\r\n phone:'{{formatterPhoneNumber(\"+36204589180\")}}'\r\n }\r\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 /*\r\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 /*\r\n fel kell venni a sorba\r\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.construct(options, SupplierItem);\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJTdXBwbGllciIsIl9EYXRhTW9kZWwiLCJfU3VwcGxpZXIiLCJkYXRhIiwib3B0aW9ucyIsIl90aGlzIiwiX2NsYXNzQ2FsbENoZWNrIiwiX2NhbGxTdXBlciIsImNvbnRhY3QiLCJjYW5TZWUiLCJjYW5TZWVJbk9yZGVyIiwiY29uc29sZSIsImxvZyIsIl9pbmhlcml0cyIsIl9jcmVhdGVDbGFzcyIsIkRhdGFNb2RlbCIsIndpbmRvdyIsIlN1cHBsaWVyQWRtaW4iLCJTdXBwbGllckl0ZW0iLCJPcHRzIiwidG9rZW4iLCJjb250YWluZXJDc3NTZWxlY3RvciIsInRlc3RNb2RlIiwiVVJMIiwiZ2V0RGF0YVRhYmxlQ29udGVudCIsImluZGV4Iiwic2hvdyIsImVkaXQiLCJjcmVhdGUiLCJzdG9yZSIsInVwZGF0ZSIsImRlc3Ryb3kiLCJhdHRhY2hGaWxlIiwiZGV0YWNoRmlsZSIsImRhdGFUYWJsZSIsIm9yZGVyRGlyZWN0aXZlIiwib25BZnRlckluaXRWaWV3RGV0YWlscyIsInJvb3QiLCJjb250YWN0UG9wdXBXb3JrZmxvdyIsImNvbnN0cnVjdCIsIiQiLCJleHRlbmQiLCJBUFAiLCJnZXRPcHRzIiwiZm9ybURhdGFUb0RhdGFPYmplY3RBUElDYWxsT2xkIiwiQ1NTU2VsZWN0b3IiLCJGb3JtRGF0YSIsImRvY3VtZW50IiwicXVlcnlTZWxlY3RvciIsImZvcm1KU09OIiwiZm9yRWFjaCIsInZhbHVlIiwia2V5IiwiUmVmbGVjdCIsImhhcyIsIkFycmF5IiwiaXNBcnJheSIsInB1c2giLCJlYWNoIiwiYXR0ciIsInJlcGxhY2UiLCJmb3JtRGF0YVRvRGF0YU9iamVjdEFQSUNhbGwiLCJDU1NTZWxlY3RvckZvcm0iLCJhamF4RGF0YSIsImdldEFsbCIsImFwcGVuZCIsInZhbCIsImluZGV4S2V5IiwiZ2V0Iiwic2V0IiwiY2xpY2tTYXZlQnV0dG9uIiwiZXZlbnQiLCJkZWJ1ZyIsInByZXZlbnREZWZhdWx0IiwiY2hlY2tWYWxpZGl0eSIsImFkZENsYXNzIiwicmVwb3J0VmFsaWRpdHkiLCJUb2FzdCIsInRpdGxlIiwibWVzc2FnZSIsInN0YXR1cyIsIlRPQVNUX1NUQVRVUyIsIkRBTkdFUiIsInRpbWVvdXQiLCJzdG9wUHJvcGFnYXRpb24iLCJyZW1vdmVDbGFzcyIsImFqYXhVcmwiLCJhamF4TWV0aG9kIiwiaWQiLCJhamF4IiwidXJsIiwidHlwZSIsImNvbnRlbnRUeXBlIiwicHJvY2Vzc0RhdGEiLCJoZWFkZXJzIiwic3VjY2VzcyIsIlNVQ0NFU1MiLCJsb2FkTWFpbkNvbnRlbnQiLCJpbml0Vmlld0xpc3QiLCJzZXREZXRhaWxzVmlld0RhdGEiLCJuZWVkVG9TZXQiLCJub3RlIiwicHJvcCIsImNsaWNrIiwiaG9vcmV5Y2FEYXRhQWN0aXZlIiwicHJvZHVjdEdyb3VwIiwicHJvZHVjdF9ncm91cCIsIm5hbWUiLCJjaGFuZ2UiLCJzZXJ2aWNlIiwicHJvZml0Q2VudGVyIiwicHJvZml0X2NlbnRlciIsImVzY2FwZVNlbGVjdG9yIiwiaW5pdFZpZXdEZXRhaWxzIiwiQ29udGFjdFBvcFVwIiwiaW5pdCIsImFjdGl2ZSIsIm9uQWZ0ZXJTYXZlIiwiY29udGFjdEFjdGlvbiIsInJlbmRlckNvbnRhY3QiLCJiaW5kIiwic2V0Q29udGFjdFBvcHVwV29ya2Zsb3ciLCJjbGVhckRhdGEiLCJ0b29sdGlwIiwiaW5pdFJhZGlvQnV0dG9ucyIsImlucHV0bWFzayIsIm9uaW5jb21wbGV0ZSIsImxlbmd0aCIsIm9uY29tcGxldGUiLCJvbmNsZWFyZWQiLCJvZmYiLCJvbiIsInNlbGVjdDIiLCJ0YWdzIiwiY3JlYXRlVGFnIiwicGFyYW1zIiwidGVybSIsInRyaW0iLCJ0ZXh0IiwibmV3VGFnIiwic2V0SW1hZ2VGcm9tTG9jYWwiLCJpcyIsInJlbmRlckF0dGFjaG1lbnQiLCJpbml0RmlsZUF0dGFjaG1lbnRGZWF0dXJlIiwic2VsZWN0ZWRVcGxvYWRGaWxlVG9nZ2xlIiwiZmlsZUlucHV0IiwiZmlsZXMiLCJncm91cCIsImZpbmQiLCJncm91cEVuZCIsImJlZm9yZVNlbmQiLCJhZGRBdHRhY2htZW50IiwiYXR0YWNobWVudCIsImVycm9yIiwicmVzcG9uc2VKU09OIiwiYWpheEVycm9yRmllbGRIYW5kbGVyIiwiY2xpY2tOZXciLCJjbGlja05ld0NhbGxCYWNrIiwiZGF0YXRhYmxlUm93QWN0aW9uRWRpdCIsInJvd0RhdGEiLCJub2RlIiwiY2xpY2tPcmRlckRlbGV0ZUNvbmZpcm1lZCIsIm1vZGFsIiwiX3Rva2VuIiwicm93IiwiZGF0YVRhYmxlQ1NTU2VsZWN0b3IiLCJEYXRhVGFibGUiLCJkYWRhdGF0YWJsZVJvd0FjdGlvbkNhbGxlck5vZGUiLCJwYXJlbnRzIiwibWV0aG9kIiwicmVtb3ZlIiwiZHJhdyIsImRhdGF0YWJsZVJvd0FjdGlvbkNhbGxlck5vZGUiLCJkYXRhdGFibGVSb3dBY3Rpb25EZWxldGUiLCJkYXRhdGFibGVSb3dBY3Rpb25CdXR0b25DbGljayIsImN1cnJlbnRUYXJnZXQiLCJhY3Rpb25OYW1lIiwiY2FwaXRhbGl6ZSIsImFyZ3VtZW50cyIsInVuZGVmaW5lZCIsImNvbE51bSIsInNldE9wdHMiLCJkYXRhdGFibGVBY3Rpb25CdXR0b25DbGlja0NhbGxCYWNrIiwiZGF0YXRhYmxlUm93QWN0aW9uQnV0dG9uQ2xpY2tDYWxsQmFjayIsImxhbmd1YWdlIiwicmVuZGVyIiwiYnV0dG9ucyIsImRhdGF0YWJsZUFkZFJvd1RyYXNoQnV0dG9uIiwiZGF0YXRhYmxlQWRkUm93RWRpdEJ1dHRvbiIsImxhdGluaXNlIiwiYXV0b1ByaW50IiwiY2xhc3NOYW1lIiwiYXBpIiwiY29uZmlnIiwiYWN0aW9uIiwiZSIsImR0IiwiZHJhd0NhbGxiYWNrIiwic2V0dGluZ3MiLCJkYXRhdGFibGVBZGRSb3dBY3Rpb24iLCJhdXRvZmlsbERldGFpbHMiLCJyYW5kb21OdW1iZXIiLCJnZXRSYW5kb21JbnQiLCJyb3dOdW0iLCJnZXREYXRhIiwiYXR0YWNobWVudERhdGEiLCJkYXRlIiwiRGF0ZSIsImNyZWF0ZWRfYXQiLCJ0b0xvY2FsZVN0cmluZyIsImxpbmsiLCJQdWJsaWNVcmwiLCJmaWxlbmFtZSIsInRlbXBsYXRlIiwiaHRtbCIsIk11c3RhY2hlIiwiYmluZEF0dGFjaG1lbnRDbGlja0FjdGlvbiIsImJpbmRDb250YWN0Q2xpY2tBY3Rpb24iLCJlbmFibGVUaW1lcnMiLCJvcmlnaW5hbF9maWxlbmFtZSIsInJlc2V0Q29udGFjdFRhYmxlIiwiY29udGFjdERhdGEiLCJ1bmJpbmQiLCJjb250YWN0RGVsZXRlQ2xpY2siLCJjb250YWN0RWRpdENsaWNrIiwiYXR0YWNobWVudERlbGV0ZUNsaWNrIiwiY3VycmVudEF0dGFjaG1lbnRSb3ciLCJjbG9zZXN0IiwiYXR0YWNoZW1udElkIiwiZmlsdGVyIiwiYXJyIiwicmVzZXRBdHRhY2htZW50VGFibGUiLCJnZXRDb250YWN0UG9wdXBXb3JrZmxvdyIsImxvYWREYXRhIiwiZ2V0U3VwcGxpZXIiLCJhZGRDb250YWN0IiwiZWRpdENvbnRhY3QiLCJuZXdDb250YWN0cyJdLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvanMvYWRtaW4vc3VwcGxpZXIuanM/YTdjNCJdLCJzb3VyY2VzQ29udGVudCI6WyJpZih0eXBlb2YgU3VwcGxpZXI9PT0ndW5kZWZpbmVkJyl7XHJcbiAgICBjbGFzcyBTdXBwbGllciBleHRlbmRzIERhdGFNb2RlbHtcclxuXHJcbiAgICAgICAgLypcclxuICAgICAgICAgKiBDb25zdHJ1Y3RvclxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGNvbnN0cnVjdG9yIChkYXRhLG9wdGlvbnMpIHtcclxuICAgICAgICAgICAgc3VwZXIoZGF0YSxvcHRpb25zKVxyXG4gICAgICAgICAgICBpZih0eXBlb2YgdGhpcy5jb250YWN0ID09PVwidW5kZWZpbmVkXCIpe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jb250YWN0PVtdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmKHR5cGVvZiB0aGlzLmNhblNlZSA9PT1cInVuZGVmaW5lZFwiKXtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2FuU2VlPTE7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYodHlwZW9mIHRoaXMuY2FuU2VlSW5PcmRlciA9PT1cInVuZGVmaW5lZFwiKXtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2FuU2VlSW5PcmRlcj0xO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdTdXBwbGllciBjb25zdHJ1Y3RvciBjYWxsZWQnKTtcclxuICAgICAgICB9O1xyXG4gICAgfTtcclxuICAgIHdpbmRvdy5TdXBwbGllcj1TdXBwbGllcjtcclxufVxyXG5cclxuXHJcbndpbmRvdy5TdXBwbGllckFkbWluPWZ1bmN0aW9uIChvcHRpb25zLFN1cHBsaWVySXRlbSkge1xyXG4gICAgLypcclxuICAgICAqIFZhcmlhYmxlcyBhY2Nlc3NpYmxlXHJcbiAgICAgKiBpbiB0aGUgY2xhc3NcclxuICAgICAqL1xyXG4gICAgbGV0IE9wdHMgPSB7XHJcbiAgICAgICAgdG9rZW46bnVsbCxcclxuICAgICAgICBjb250YWluZXJDc3NTZWxlY3RvcjogJy5jb250YWluZXJTdXBwbGllcicsXHJcbiAgICAgICAgdGVzdE1vZGU6ZmFsc2UsXHJcbiAgICAgICAgVVJMOntcclxuICAgICAgICAgICAgZ2V0RGF0YVRhYmxlQ29udGVudDonJyxcclxuICAgICAgICAgICAgaW5kZXg6JycsXHJcbiAgICAgICAgICAgIHNob3c6JycsXHJcbiAgICAgICAgICAgIGVkaXQ6JycsXHJcbiAgICAgICAgICAgIGNyZWF0ZTonJyxcclxuICAgICAgICAgICAgc3RvcmU6JycsXHJcbiAgICAgICAgICAgIHVwZGF0ZTonJyxcclxuICAgICAgICAgICAgZGVzdHJveTonJyxcclxuICAgICAgICAgICAgYXR0YWNoRmlsZTonJyxcclxuICAgICAgICAgICAgZGV0YWNoRmlsZTonJyxcclxuICAgICAgICB9LFxyXG4gICAgICAgIGRhdGFUYWJsZTp7XHJcbiAgICAgICAgICAgIG9yZGVyRGlyZWN0aXZlOlsxLCAnYXNjJ11cclxuICAgICAgICB9LFxyXG4gICAgICAgIG9uQWZ0ZXJJbml0Vmlld0RldGFpbHM6ZnVuY3Rpb24gKCl7fVxyXG4gICAgfTtcclxuICAgIGxldCBTdXBwbGllciA9IHt9O1xyXG4gICAgbGV0IHJvb3QgPSB0aGlzO1xyXG4gICAgbGV0IGNvbnRhY3RQb3B1cFdvcmtmbG93PSduZXcnO1xyXG4gICAgLypcclxuICAgICAqIENvbnN0cnVjdG9yXHJcbiAgICAgKi9cclxuICAgIHRoaXMuY29uc3RydWN0ID0gZnVuY3Rpb24gKG9wdGlvbnMsU3VwcGxpZXJJdGVtKSB7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ1N1cHBsaWVyQWRtaW4gY29uc3RydWN0b3IgY2FsbGVkJyk7XHJcbiAgICAgICAgJC5leHRlbmQoT3B0cywgb3B0aW9ucyk7XHJcbiAgICAgICAgaWYoIVN1cHBsaWVySXRlbSl7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdzdXBwbGllciBsZXRyZSBrZWxsZXQgaG96bmkgJyk7XHJcbiAgICAgICAgICAgIGlmKCFBUFAuU3VwcGxpZXIpe1xyXG4gICAgICAgICAgICAgICAgQVBQLlN1cHBsaWVyPW5ldyB3aW5kb3cuU3VwcGxpZXIoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByb290LlN1cHBsaWVyPUFQUC5TdXBwbGllcjtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgdGhpcy5nZXRPcHRzPWZ1bmN0aW9uICgpe1xyXG4gICAgICAgIHJldHVybiBPcHRzO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuZm9ybURhdGFUb0RhdGFPYmplY3RBUElDYWxsT2xkPSBmdW5jdGlvbiAoQ1NTU2VsZWN0b3IpIHtcclxuICAgICAgICBsZXQgZGF0YSA9IG5ldyBGb3JtRGF0YShkb2N1bWVudC5xdWVyeVNlbGVjdG9yKENTU1NlbGVjdG9yKSk7XHJcbiAgICAgICAgLy9sZXQgZm9ybUpTT04gPSBPYmplY3QuZnJvbUVudHJpZXMoZGF0YS5lbnRyaWVzKCkpO1xyXG4gICAgICAgIHZhciBmb3JtSlNPTiA9IHt9O1xyXG4gICAgICAgIGRhdGEuZm9yRWFjaCgodmFsdWUsIGtleSkgPT4ge1xyXG4gICAgICAgICAgICAvLyBSZWZsZWN0LmhhcyBpbiBmYXZvciBvZjogZm9ybUpTT04uaGFzT3duUHJvcGVydHkoa2V5KVxyXG4gICAgICAgICAgICBpZighUmVmbGVjdC5oYXMoZm9ybUpTT04sIGtleSkpe1xyXG4gICAgICAgICAgICAgICAgZm9ybUpTT05ba2V5XSA9IHZhbHVlO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmKCFBcnJheS5pc0FycmF5KGZvcm1KU09OW2tleV0pKXtcclxuICAgICAgICAgICAgICAgIGZvcm1KU09OW2tleV0gPSBbZm9ybUpTT05ba2V5XV07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZm9ybUpTT05ba2V5XS5wdXNoKHZhbHVlKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgJChDU1NTZWxlY3RvcisnIGlucHV0W2RhdGEtaW5wdXRtYXNrXScpLmVhY2goZnVuY3Rpb24gKCl7XHJcbiAgICAgICAgICAgIGlmKGZvcm1KU09OWyQodGhpcykuYXR0cignbmFtZScpXSl7XHJcbiAgICAgICAgICAgICAgICBmb3JtSlNPTlskKHRoaXMpLmF0dHIoJ25hbWUnKV09Zm9ybUpTT05bJCh0aGlzKS5hdHRyKCduYW1lJyldLnJlcGxhY2UoL1tfIF0rJC9nLFwiXCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgLy9mb3JtSlNPTi5wcm9kdWN0R3JvdXBzPSQoXCIucHJvZHVjdENhdGVnb3J5U2VsZWN0XCIpLnNlbGVjdDIoKS52YWwoKTtcclxuXHJcblxyXG4gICAgICAgIC8qTXVsdGlzZWxlY3Qgb3IgY2hlY2tib3ggdG8gYXJyYXk6XHJcbiAgICAgICAgYWpheERhdGFbJ3Byb2R1Y3RHcm91cCddPSQoXCIucHJvZHVjdENhdGVnb3J5U2VsZWN0XCIpLnNlbGVjdDIoKS52YWwoKTtcclxuXHJcbiAgICAgICAgZm9ybUpTT04ubXVsdGlzZWxlY3ROYW1lID0gZGF0YS5nZXRBbGwoJ211bHRpc2VsZWN0TmFtZScpO1xyXG4gICAgICAgICQuZWFjaChmb3JtSlNPTiwgZnVuY3Rpb24gKGl0ZW0sIHZhbHVlKSB7XHJcbiAgICAgICAgICAgIGZvcm1KU09OWyQubGNGaXJzdChpdGVtLnJlcGxhY2UoJ2NvbnRhY3QnLCAnJykpXSA9IHZhbHVlO1xyXG4gICAgICAgICAgICBkZWxldGUgZm9ybUpTT05baXRlbV07XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgaWYoZm9ybUpTT04ucGhvbmUpe1xyXG4gICAgICAgICAgICBmb3JtSlNPTi5waG9uZT1mb3JtSlNPTi5waG9uZS5yZXBsYWNlQWxsKCdfJywnJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmKGZvcm1KU09OLmVtYWlsKXtcclxuICAgICAgICAgICAgZm9ybUpTT04uZW1haWw9Zm9ybUpTT04uZW1haWwucmVwbGFjZUFsbCgnXycsJycpO1xyXG4gICAgICAgIH1cclxuICAgICAgICAqL1xyXG4gICAgICAgIHJldHVybiBmb3JtSlNPTjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmZvcm1EYXRhVG9EYXRhT2JqZWN0QVBJQ2FsbCA9IGZ1bmN0aW9uIChDU1NTZWxlY3RvckZvcm0pIHtcclxuICAgICAgICBsZXQgYWpheERhdGE9bmV3IEZvcm1EYXRhKCQoQ1NTU2VsZWN0b3JGb3JtKVswXSk7XHJcbiAgICAgICAgJC5lYWNoKGFqYXhEYXRhLmdldEFsbCgncHJvZml0Q2VudGVyJyksZnVuY3Rpb24oa2V5LHZhbHVlKXtcclxuICAgICAgICAgICAgYWpheERhdGEuYXBwZW5kKCdwcm9maXRDZW50ZXJbXScsdmFsdWUpO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgJC5lYWNoKGFqYXhEYXRhLmdldEFsbCgncHJvZHVjdEdyb3VwJyksZnVuY3Rpb24oa2V5LHZhbHVlKXtcclxuICAgICAgICAgICAgYWpheERhdGEuYXBwZW5kKCdwcm9kdWN0R3JvdXBbXScsdmFsdWUpO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgJC5lYWNoKGFqYXhEYXRhLmdldEFsbCgnc3VwcGxpZXJTZXJ2aWNlJyksZnVuY3Rpb24oa2V5LHZhbHVlKXtcclxuICAgICAgICAgICAgYWpheERhdGEuYXBwZW5kKCdzdXBwbGllclNlcnZpY2VbXScsdmFsdWUpO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgJC5lYWNoKGFqYXhEYXRhLmdldEFsbCgnY29udGFjdElkJyksZnVuY3Rpb24oa2V5LHZhbHVlKXtcclxuICAgICAgICAgICAgYWpheERhdGEuYXBwZW5kKCdjb250YWN0SWRbXScsdmFsdWUpO1xyXG4gICAgICAgIH0pXHJcblxyXG4gICAgICAgIGFqYXhEYXRhLmFwcGVuZCgnX3Rva2VuJywkKCdpbnB1dFtuYW1lPV90b2tlbl0nKS52YWwoKSk7XHJcblxyXG4gICAgICAgICQoQ1NTU2VsZWN0b3JGb3JtKycgaW5wdXRbZGF0YS1pbnB1dG1hc2tdJykuZWFjaChmdW5jdGlvbiAoKXtcclxuICAgICAgICAgICAgbGV0IGluZGV4S2V5PSQodGhpcykuYXR0cignbmFtZScpO1xyXG4gICAgICAgICAgICBpZihhamF4RGF0YS5nZXQoaW5kZXhLZXkpKXtcclxuICAgICAgICAgICAgICAgIGFqYXhEYXRhLnNldChpbmRleEtleSxhamF4RGF0YS5nZXQoaW5kZXhLZXkpLnJlcGxhY2UoL1tfIF0rJC9nLFwiXCIpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICByZXR1cm4gYWpheERhdGE7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5jbGlja1NhdmVCdXR0b249ZnVuY3Rpb24gKGV2ZW50KSB7XHJcbiAgICAgICAgZGVidWcoJ1NhdmUgY2xpY2tlZCcpO1xyXG4gICAgICAgIGxldCBDU1NTZWxlY3RvckZvcm09T3B0cy5jb250YWluZXJDc3NTZWxlY3RvcisnIC5zdXBwbGllckZvcm0nO1xyXG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICBpZiAoJChDU1NTZWxlY3RvckZvcm0rJyBpbnB1dFtuYW1lPVwiY2FuU2VlSW5PcmRlclwiXScpLnZhbCgpPT0xICYmICQoQ1NTU2VsZWN0b3JGb3JtKVswXS5jaGVja1ZhbGlkaXR5KCkgPT09IGZhbHNlKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCd2YWxpZGF0b24gZmFsc2UnKTtcclxuICAgICAgICAgICAgJChDU1NTZWxlY3RvckZvcm0pLmFkZENsYXNzKCd3YXMtdmFsaWRhdGVkJyk7XHJcbiAgICAgICAgICAgICQoQ1NTU2VsZWN0b3JGb3JtKVswXS5yZXBvcnRWYWxpZGl0eSgpO1xyXG4gICAgICAgICAgICBUb2FzdC5jcmVhdGUoeyB0aXRsZTogXCJWYWxpZMOhY2nDs3MgaGliYSFcIiwgbWVzc2FnZTogXCJLw6lyasO8aywgdMO2bHRzZSBraSBhIGvDtnRlbGV6xZEgbWV6xZFrZXQhXCIsIHN0YXR1czogVE9BU1RfU1RBVFVTLkRBTkdFUiwgdGltZW91dDogNTAwMCB9KTtcclxuICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZygndmFsaWRhdG9uIG9rJyk7XHJcbiAgICAgICAgICAgICQoQ1NTU2VsZWN0b3JGb3JtKS5yZW1vdmVDbGFzcygnd2FzLXZhbGlkYXRlZCcpO1xyXG4gICAgICAgICAgICAvL2RvIHlvdXIgYWpheCBzdWJtaXRpb24gaGVyZVxyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgYWpheERhdGE9cm9vdC5mb3JtRGF0YVRvRGF0YU9iamVjdEFQSUNhbGwoQ1NTU2VsZWN0b3JGb3JtKTtcclxuXHJcblxyXG5cclxuICAgICAgICBsZXQgYWpheFVybD1PcHRzLlVSTC5zdG9yZTtcclxuICAgICAgICBsZXQgYWpheE1ldGhvZD1cIlBPU1RcIjtcclxuICAgICAgICBpZihyb290LlN1cHBsaWVyLmlkKXtcclxuICAgICAgICAgICAgYWpheFVybD1PcHRzLlVSTC51cGRhdGUucmVwbGFjZSgnJWlkJScscm9vdC5TdXBwbGllci5pZCk7XHJcbiAgICAgICAgICAgIC8vYWpheE1ldGhvZD1cIlBVVFwiO1xyXG4gICAgICAgICAgICAvL2FqYXhEYXRhPW5ldyBGb3JtRGF0YSgkKENTU1NlbGVjdG9yRm9ybSlbMF0pO1xyXG4gICAgICAgICAgICBhamF4RGF0YS5hcHBlbmQoJ19tZXRob2QnLCdQVVQnKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGRlYnVnKGFqYXhNZXRob2QpO1xyXG4gICAgICAgIGRlYnVnKGFqYXhEYXRhKTtcclxuXHJcbiAgICAgICAgJC5hamF4KHtcclxuICAgICAgICAgICAgdXJsOmFqYXhVcmwsXHJcbiAgICAgICAgICAgIGRhdGE6YWpheERhdGEsXHJcbiAgICAgICAgICAgIHR5cGU6YWpheE1ldGhvZCxcclxuICAgICAgICAgICAgY29udGVudFR5cGU6ZmFsc2UsXHJcbiAgICAgICAgICAgIHByb2Nlc3NEYXRhOiBmYWxzZSxcclxuICAgICAgICAgICAgaGVhZGVyczoge1xyXG4gICAgICAgICAgICAgICAgJ1gtQ1NSRi1UT0tFTic6ICQoJ2lucHV0W25hbWU9XCJfdG9rZW5cIl0nKS52YWwoKVxyXG4gICAgICAgICAgICB9LFxyXG5cclxuICAgICAgICAgICAgc3VjY2VzczpmdW5jdGlvbiAoZGF0YSl7XHJcbiAgICAgICAgICAgICAgICBkZWJ1ZygnZDE6IFNhdmUgc3VjY2VzcyAnKTtcclxuICAgICAgICAgICAgICAgIGRlYnVnKGRhdGEpO1xyXG4gICAgICAgICAgICAgICAgaWYoZGF0YS5zdWNjZXNzPT10cnVlKXtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgLy9PcHRzLm9uQWZ0ZXJJbml0Vmlld0RldGFpbHM9cm9vdC5hdXRvZmlsbERldGFpbHM7XHJcbiAgICAgICAgICAgICAgICAgICAgT3B0cy5kYXRhVGFibGUub3JkZXJEaXJlY3RpdmU9WzAsICdkZXNjJ107XHJcbiAgICAgICAgICAgICAgICAgICAgVG9hc3QuY3JlYXRlKHsgdGl0bGU6IFwiU2lrZXJlcyByw7ZnesOtdMOpcyFcIiwgbWVzc2FnZTogYWpheERhdGEuZ2V0KCduYW1lJykrXCIgbmV2xbEgYmVzesOhbGxsw610w7MgZWxtZW50dmVcIiwgc3RhdHVzOiBUT0FTVF9TVEFUVVMuU1VDQ0VTUywgdGltZW91dDogNTAwMCB9KTtcclxuICAgICAgICAgICAgICAgICAgICBBUFAubG9hZE1haW5Db250ZW50KE9wdHMuVVJMLmluZGV4Kyc/aW5pdD0wJyxyb290LmluaXRWaWV3TGlzdCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIHRoaXMuc2V0RGV0YWlsc1ZpZXdEYXRhPWZ1bmN0aW9uICgpIHtcclxuICAgICAgICBkZWJ1Zygnc2V0RGV0YWlsc1ZpZXdEYXRhJyk7XHJcbiAgICAgICAgY29uc29sZS5sb2coU3VwcGxpZXIpO1xyXG4gICAgICAgIGxldCBDU1NTZWxlY3RvckZvcm09T3B0cy5jb250YWluZXJDc3NTZWxlY3RvcisnIC5zdXBwbGllckZvcm0nO1xyXG4gICAgICAgIGxldCBuZWVkVG9TZXQ9W1xyXG4gICAgICAgICAgICAnbmFtZScsJ2hvb3JleWNhSWQnLCduYW1lSWQnLFxyXG4gICAgICAgICAgICAnb3JkZXJFbWFpbCcsJ29yZGVyRW1haWwyJywnYWRkcmVzcycsJ21haWxpbmdBZGRyZXNzJywncGhvbmUnLCdmYXgnLCdjdXN0b21lclNlcnZpY2VQaG9uZScsXHJcbiAgICAgICAgICAgICduYW1lMjInLFxyXG4gICAgICAgICAgICAnb3BlbkhvdXJzJywgJ29yZGVyc0RlYWRsaW5lJywgJ21pbk9yZGVyVmFsdWUnLFxyXG4gICAgICAgIF07XHJcbiAgICAgICAgJC5lYWNoKG5lZWRUb1NldCxmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGlmKHR5cGVvZiByb290LlN1cHBsaWVyW3RoaXNdIT0ndW5kZWZpbmVkJyl7XHJcbiAgICAgICAgICAgICAgICAkKENTU1NlbGVjdG9yRm9ybSsnIGlucHV0W25hbWU9Jyt0aGlzKyddJykudmFsKHJvb3QuU3VwcGxpZXJbdGhpc10pO1xyXG4gICAgICAgICAgICAgICAgJChDU1NTZWxlY3RvckZvcm0rJyB0ZXh0YXJlYVtuYW1lPScrdGhpcysnXScpLnZhbChyb290LlN1cHBsaWVyW3RoaXNdKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgaWYodHlwZW9mIHJvb3QuU3VwcGxpZXJbJ25vdGUnXSE9J3VuZGVmaW5lZCcpe1xyXG4gICAgICAgICAgICAkKENTU1NlbGVjdG9yRm9ybSsnIHRleHRhcmVhW25hbWU9bm90ZV0nKS52YWwocm9vdC5TdXBwbGllci5ub3RlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYodHlwZW9mIHJvb3QuU3VwcGxpZXJbJ2VtYWlsQXR0YWNobWVudFR5cGUnXSE9J3VuZGVmaW5lZCcpe1xyXG4gICAgICAgICAgICAkKENTU1NlbGVjdG9yRm9ybSsnIGlucHV0W25hbWU9ZW1haWxBdHRhY2htZW50VHlwZV1bdmFsdWU9Jytyb290LlN1cHBsaWVyWydlbWFpbEF0dGFjaG1lbnRUeXBlJ10rJ10nKS5wcm9wKCdjaGVja2VkJyx0cnVlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgJChDU1NTZWxlY3RvckZvcm0rJyAqW2RhdGEtdG9nZ2xlPWNhblNlZV1bZGF0YS10aXRsZT0nK3Jvb3QuU3VwcGxpZXIuY2FuU2VlKyddJykuY2xpY2soKTtcclxuICAgICAgICAkKENTU1NlbGVjdG9yRm9ybSsnICpbZGF0YS10b2dnbGU9Y2FuU2VlSW5PcmRlcl1bZGF0YS10aXRsZT0nK3Jvb3QuU3VwcGxpZXIuY2FuU2VlSW5PcmRlcisnXScpLmNsaWNrKCk7XHJcbiAgICAgICAgJChDU1NTZWxlY3RvckZvcm0rJyAqW2RhdGEtdG9nZ2xlPWhvb3JleWNhRGF0YUFjdGl2ZV1bZGF0YS10aXRsZT0nK3Jvb3QuU3VwcGxpZXIuaG9vcmV5Y2FEYXRhQWN0aXZlKyddJykuY2xpY2soKTtcclxuICAgICAgICBsZXQgcHJvZHVjdEdyb3VwPVtdO1xyXG4gICAgICAgICQuZWFjaChyb290LlN1cHBsaWVyLnByb2R1Y3RfZ3JvdXAsZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBwcm9kdWN0R3JvdXAucHVzaCh0aGlzLm5hbWUpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgICQoQ1NTU2VsZWN0b3JGb3JtKycgLnByb2R1Y3RDYXRlZ29yeVNlbGVjdCcpLnZhbChwcm9kdWN0R3JvdXApLmNoYW5nZSgpO1xyXG5cclxuICAgICAgICBsZXQgc2VydmljZT1bXTtcclxuICAgICAgICAkLmVhY2gocm9vdC5TdXBwbGllci5zZXJ2aWNlLGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgc2VydmljZS5wdXNoKHRoaXMubmFtZSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgJChDU1NTZWxlY3RvckZvcm0rJyAuc2VydmljZVNlbGVjdCcpLnZhbChzZXJ2aWNlKS5jaGFuZ2UoKTtcclxuXHJcbiAgICAgICAgbGV0IHByb2ZpdENlbnRlcj1bXTtcclxuICAgICAgICAkLmVhY2gocm9vdC5TdXBwbGllci5wcm9maXRfY2VudGVyLGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgcHJvZml0Q2VudGVyLnB1c2godGhpcy5uYW1lKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICAvLyQoQ1NTU2VsZWN0b3JGb3JtKycgLnByb2ZpdENlbnRlclNlbGVjdCcpLnZhbChwcm9maXRDZW50ZXIpLmNoYW5nZSgpO1xyXG4gICAgICAgIC8vZGVidWcocHJvZml0Q2VudGVyKTtcclxuICAgICAgICAkLmVhY2gocHJvZml0Q2VudGVyLGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgJCgnaW5wdXRbdmFsdWU9XCInKyQuZXNjYXBlU2VsZWN0b3IodGhpcykrJ1wiXScpLnByb3AoIFwiY2hlY2tlZFwiLCB0cnVlICk7XHJcbiAgICAgICAgfSlcclxuXHJcbiAgICAgICAgaWYodHlwZW9mIHJvb3QuU3VwcGxpZXJbJ2xvZ29GaWxlJ10hPSd1bmRlZmluZWQnICYmIChyb290LlN1cHBsaWVyWydsb2dvRmlsZSddKSl7XHJcbiAgICAgICAgICAgICQoQ1NTU2VsZWN0b3JGb3JtKycgaW1nLmltYWdlTG9nbycpLmF0dHIoJ3NyYycscm9vdC5TdXBwbGllclsnbG9nb0ZpbGUnXSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvL2RlYnVnKEFQUC5TdXBwbGllckFkbWluLmZvcm1EYXRhVG9EYXRhT2JqZWN0QVBJQ2FsbCgnLnN1cHBsaWVyRm9ybScpWydwcm9kdWN0R3JvdXAnXSk7XHJcbiAgICAgICAgLy8kKCdbbmFtZT1wcm9kdWN0R3JvdXBdJykudmFsKFsnQsO8ZsOpw6FydV/DqWRlc2lwYXJpX3Rlcm3DqWtlaycsJ1RvasOhcyddKS5jaGFuZ2UoKTtcclxuICAgICAgICAvL3Jvb3Quc2V0RGV0YWlsc1ZpZXdEYXRhKCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmluaXRWaWV3RGV0YWlscz1mdW5jdGlvbiAob3B0aW9ucyxTdXBwbGllckl0ZW0pe1xyXG4gICAgICAgIGRlYnVnKCcqKmNhbGwgaW5pdFZpZXdEZXRhaWxzICcpO1xyXG4gICAgICAgIGlmKCFBUFAuQ29udGFjdFBvcFVwKXtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coJ25pbmNzIEFQUC5Db250YWN0UG9wVXAnKVxyXG4gICAgICAgICAgICBBUFAuQ29udGFjdFBvcFVwID0gbmV3IHdpbmRvdy5Db250YWN0UG9wVXAoKTtcclxuICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coJ21hciB2YW4gIEFQUC5Db250YWN0UG9wVXAnKVxyXG4gICAgICAgIH1cclxuICAgICAgICBBUFAuQ29udGFjdFBvcFVwLmluaXQoe1xyXG4gICAgICAgICAgICBhY3RpdmU6dHJ1ZSxcclxuICAgICAgICAgICAgb25BZnRlclNhdmU6cm9vdC5jb250YWN0QWN0aW9uXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcm9vdC5yZW5kZXJDb250YWN0KCk7XHJcbiAgICAgICAgJCgnLnN1cHBsaWVyRm9ybSAuYnV0dG9uTmV3Q29udGFjdCcpLmJpbmQoJ2NsaWNrJyxmdW5jdGlvbiAoKXtcclxuICAgICAgICAgICAgQVBQLlN1cHBsaWVyQWRtaW4uc2V0Q29udGFjdFBvcHVwV29ya2Zsb3coJ25ldycpO1xyXG4gICAgICAgICAgICBBUFAuQ29udGFjdFBvcFVwLmNsZWFyRGF0YSgpO1xyXG4gICAgICAgICAgICBBUFAuQ29udGFjdFBvcFVwLnNob3coKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICAkKCdbZGF0YS10b2dnbGU9XCJ0b29sdGlwXCJdJykudG9vbHRpcCgpO1xyXG4gICAgICAgIGluaXRSYWRpb0J1dHRvbnMoKTtcclxuICAgICAgICAkKFwiOmlucHV0XCIpLmlucHV0bWFzayh7XHJcbiAgICAgICAgICAgIFwib25pbmNvbXBsZXRlXCI6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCQodGhpcykuZGF0YSgncmVxdWlyZWQnKSk7XHJcbiAgICAgICAgICAgICAgICBpZiAoJCh0aGlzKS52YWwoKS5sZW5ndGggPiAwIHx8ICQodGhpcykuZGF0YSgncmVxdWlyZWQnKSA9PT0gdHJ1ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICQodGhpcykuYWRkQ2xhc3MoJ2lzLWludmFsaWQnKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgXCJvbmNvbXBsZXRlXCI6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICQodGhpcykucmVtb3ZlQ2xhc3MoJ2lzLWludmFsaWQnKTtcclxuICAgICAgICAgICAgICAgICQodGhpcykuYWRkQ2xhc3MoJ2lzLXZhbGlkJyk7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIFwib25jbGVhcmVkXCI6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdjbGVhcmVkJyk7XHJcbiAgICAgICAgICAgICAgICAkKHRoaXMpLnJlbW92ZUNsYXNzKCdpcy1pbnZhbGlkJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgJCgnZm9ybS5zdXBwbGllckZvcm0gYnV0dG9uLkZvcm1TYXZlQnV0dG9uJykub2ZmKCdjbGljaycpO1xyXG4gICAgICAgICQoJ2Zvcm0uc3VwcGxpZXJGb3JtIGJ1dHRvbi5Gb3JtU2F2ZUJ1dHRvbicpLm9uKCdjbGljaycscm9vdC5jbGlja1NhdmVCdXR0b24pO1xyXG4gICAgICAgIHJvb3Quc2V0RGV0YWlsc1ZpZXdEYXRhKCk7XHJcbiAgICAgICAgJChcIi5wcm9kdWN0Q2F0ZWdvcnlTZWxlY3RcIikuc2VsZWN0MigpO1xyXG4gICAgICAgICQoXCIuc2VydmljZVNlbGVjdFwiKS5zZWxlY3QyKHtcclxuICAgICAgICAgICAgdGFnczogdHJ1ZSxcclxuICAgICAgICAgICAgY3JlYXRlVGFnOiBmdW5jdGlvbiAocGFyYW1zKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgdGVybSA9ICQudHJpbShwYXJhbXMudGVybSk7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKHRlcm0gPT09ICcnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgICAgICBpZDogdGVybSxcclxuICAgICAgICAgICAgICAgICAgICB0ZXh0OiB0ZXJtLFxyXG4gICAgICAgICAgICAgICAgICAgIG5ld1RhZzogdHJ1ZSAvLyBhZGQgYWRkaXRpb25hbCBwYXJhbWV0ZXJzXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgLy8kKFwiLnByb2ZpdENlbnRlclNlbGVjdFwiKS5zZWxlY3QyKCk7XHJcbiAgICAgICAgJChcImlucHV0W25hbWU9bG9nb0ZpbGVdXCIpLmNoYW5nZShmdW5jdGlvbigpe1xyXG4gICAgICAgICAgICBzZXRJbWFnZUZyb21Mb2NhbCh0aGlzLE9wdHMuY29udGFpbmVyQ3NzU2VsZWN0b3IrJyAuaW1hZ2VMb2dvJyk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICQoJ2Zvcm0uc3VwcGxpZXJGb3JtIC5wcm9maXRDZW50ZXJTZWxlY3RDaGVja2JveEFsbCcpLm9mZignY2xpY2snKTtcclxuICAgICAgICAkKCdmb3JtLnN1cHBsaWVyRm9ybSAucHJvZml0Q2VudGVyU2VsZWN0Q2hlY2tib3hBbGwnKS5vbignY2xpY2snLGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgLy9jb25zb2xlLmxvZygpO1xyXG4gICAgICAgICAgICAvL2xldCBjaGVja2VkPSQodGhpcykuaXMoXCI6Y2hlY2tlZFwiKVxyXG4gICAgICAgICAgICAkKCdmb3JtLnN1cHBsaWVyRm9ybSBpbnB1dC5wcm9maXRDZW50ZXJTZWxlY3RDaGVja2JveCcpLnByb3AoJ2NoZWNrZWQnLCQodGhpcykuaXMoXCI6Y2hlY2tlZFwiKSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcm9vdC5yZW5kZXJBdHRhY2htZW50KCk7XHJcbiAgICAgICAgLy9PcHRzLm9uQWZ0ZXJJbml0Vmlld0RldGFpbHMoKTtcclxuICAgICAgICByb290LmluaXRGaWxlQXR0YWNobWVudEZlYXR1cmUoKTtcclxuICAgICAgICBkZWJ1ZygnKiplbmQgaW5pdFZpZXdEZXRhaWxzICcpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuc2VsZWN0ZWRVcGxvYWRGaWxlVG9nZ2xlPWZ1bmN0aW9uIChmaWxlSW5wdXQpe1xyXG4gICAgICAgIC8qXHJcbiAgICAgICAgY29uc29sZS5sb2coZmlsZUlucHV0LmF0dHIoJ25hbWUnKSk7XHJcbiAgICAgICAgY29uc29sZS5sb2coZmlsZUlucHV0WzBdLmZpbGVzWzBdKTtcclxuICAgICAgICBjb25zb2xlLmxvZyhmaWxlSW5wdXRbMF0uZmlsZXNbMF0ubmFtZSk7XHJcbiAgICAgICAgKi9cclxuICAgICAgICBpZihmaWxlSW5wdXQpe1xyXG4gICAgICAgICAgICAkKCcuY29udGFpbmVyRmlsZVVwbG9hZCcpLmFkZENsYXNzKCdkLW5vbmUnKTtcclxuICAgICAgICAgICAgaWYoZmlsZUlucHV0WzBdLmZpbGVzWzBdKXtcclxuICAgICAgICAgICAgICAgICQoJy5jb250YWluZXJVcGxvYWRlZEZpbGVOYW1lJykudGV4dChmaWxlSW5wdXRbMF0uZmlsZXNbMF0ubmFtZSk7XHJcblxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICQoJy5jb250YWluZXJGaWxlVXBsb2FkU3RhcnRlZCcpLnJlbW92ZUNsYXNzKCdkLW5vbmUnKTtcclxuICAgICAgICAgICAgJCgnLmNvbnRhaW5lclVwbG9hZGVkU3Bpbm5lcicpLnJlbW92ZUNsYXNzKCdkLW5vbmUnKTtcclxuICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgJCgnLmNvbnRhaW5lclVwbG9hZGVkRmlsZU5hbWUnKS50ZXh0KCcnKTtcclxuICAgICAgICAgICAgJCgnLmN1c3RvbS1maWxlLWxhYmVsLnNlbGVjdGVkJykudGV4dCgnJyk7XHJcbiAgICAgICAgICAgICQoJy5jb250YWluZXJGaWxlVXBsb2FkU3RhcnRlZCcpLmFkZENsYXNzKCdkLW5vbmUnKTtcclxuICAgICAgICAgICAgJCgnLnVwbG9hZFN0YXR1c1JvdycpLmFkZENsYXNzKCdkLW5vbmUnKTtcclxuICAgICAgICAgICAgJCgnLmNvbnRhaW5lckZpbGVVcGxvYWQnKS5yZW1vdmVDbGFzcygnZC1ub25lJyk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuaW5pdEZpbGVBdHRhY2htZW50RmVhdHVyZT1mdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgY29uc29sZS5sb2coJy0tLS0tLS1pbml0RmlsZUF0dGFjaG1lbnRGZWF0dXJlLS0tLS0tLS0tLS0nKTtcclxuICAgICAgICBpZihyb290LlN1cHBsaWVyLmlkKXtcclxuICAgICAgICAgICAgJCgnLmNvbnRhaW5lckZpbGVVcGxvYWQnKS5yZW1vdmVDbGFzcygnZC1ub25lJyk7XHJcbiAgICAgICAgICAgICQoJy5jb250YWluZXJGaWxlVXBsb2FkTm9uZScpLmFkZENsYXNzKCdkLW5vbmUnKTtcclxuICAgICAgICB9XHJcblxyXG5cclxuICAgICAgICAkKE9wdHMuY29udGFpbmVyQ3NzU2VsZWN0b3IrJyAuYnV0dG9uVXBsb2FkJykub2ZmKCdjbGljaycpO1xyXG4gICAgICAgICQoT3B0cy5jb250YWluZXJDc3NTZWxlY3RvcisnIC5idXR0b25VcGxvYWQnKS5vbignY2xpY2snLGZ1bmN0aW9uICgpe1xyXG4gICAgICAgICAgICBjb25zb2xlLmdyb3VwKCctLS0tLS0tYnV0dG9uVXBsb2FkLS0tLS0tLS0tLS0nKTtcclxuICAgICAgICAgICAgbGV0IGZpbGVJbnB1dD0kKCcjaW5wdXRHcm91cEF0dGFjaGVGaWxlJyk7XHJcbiAgICAgICAgICAgIGlmKGZpbGVJbnB1dFswXS5maWxlcy5sZW5ndGg8MSl7XHJcbiAgICAgICAgICAgICAgICBUb2FzdC5jcmVhdGUoeyB0aXRsZTogXCJIaWJhIVwiLCBtZXNzYWdlOiAnVsOhbGxhc3pvbiBraSBmw6FqbHQhJywgc3RhdHVzOiBUT0FTVF9TVEFUVVMuREFOR0VSLCB0aW1lb3V0OiAxMDAwMCB9KTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zb2xlLmxvZygkKE9wdHMuY29udGFpbmVyQ3NzU2VsZWN0b3IpLmZpbmQoJ2Zvcm0uc3VwcGxpZXJGb3JtJylbMF0pO1xyXG4gICAgICAgICAgICBsZXQgZGF0YT0gbmV3IEZvcm1EYXRhKCQoT3B0cy5jb250YWluZXJDc3NTZWxlY3RvcikuZmluZCgnZm9ybS5zdXBwbGllckZvcm0nKVswXSk7XHJcbiAgICAgICAgICAgIGRhdGEuYXBwZW5kKGZpbGVJbnB1dC5hdHRyKCduYW1lJyksZmlsZUlucHV0WzBdLmZpbGVzWzBdKTtcclxuXHJcbiAgICAgICAgICAgIHJvb3Quc2VsZWN0ZWRVcGxvYWRGaWxlVG9nZ2xlKGZpbGVJbnB1dCk7XHJcbiAgICAgICAgICAgIGxldCBhamF4VXJsPU9wdHMuVVJMLmF0dGFjaEZpbGUucmVwbGFjZSgnJWlkJScscm9vdC5TdXBwbGllci5pZCk7XHJcblxyXG4gICAgICAgICAgICBjb25zb2xlLmdyb3VwRW5kKCk7XHJcbiAgICAgICAgICAgICQuYWpheCh7XHJcbiAgICAgICAgICAgICAgICB1cmw6YWpheFVybCxcclxuICAgICAgICAgICAgICAgIGRhdGE6ZGF0YSxcclxuICAgICAgICAgICAgICAgIHR5cGU6J1BPU1QnLFxyXG4gICAgICAgICAgICAgICAgY29udGVudFR5cGU6ZmFsc2UsXHJcbiAgICAgICAgICAgICAgICBwcm9jZXNzRGF0YTogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICBiZWZvcmVTZW5kOiBmdW5jdGlvbigpIHtcclxuXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24oZGF0YSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGRhdGEpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmKGRhdGEuc3VjY2Vzcz09dHJ1ZSl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvb3QuYWRkQXR0YWNobWVudChkYXRhLmRhdGEuYXR0YWNobWVudCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvb3Quc2VsZWN0ZWRVcGxvYWRGaWxlVG9nZ2xlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIGVycm9yOiBmdW5jdGlvbihkYXRhKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coZGF0YS5yZXNwb25zZUpTT04pO1xyXG4gICAgICAgICAgICAgICAgICAgIHJvb3Quc2VsZWN0ZWRVcGxvYWRGaWxlVG9nZ2xlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgYWpheEVycm9yRmllbGRIYW5kbGVyKGRhdGEucmVzcG9uc2VKU09OLmVycm9yKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSlcclxuXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuY2xpY2tOZXc9ZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGRlYnVnKCdjbGlja05ldycpO1xyXG4gICAgICAgIEFQUC5sb2FkTWFpbkNvbnRlbnQoT3B0cy5VUkwuY3JlYXRlLHJvb3QuY2xpY2tOZXdDYWxsQmFjayk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5jbGlja05ld0NhbGxCYWNrPWZ1bmN0aW9uICgpIHtcclxuICAgICAgICBkZWJ1ZygnY2FsbGJhY2tOZXcnKTtcclxuICAgICAgICByb290LlN1cHBsaWVyPW5ldyB3aW5kb3cuU3VwcGxpZXIoKTtcclxuICAgICAgICByb290LmluaXRWaWV3RGV0YWlscygpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5kYXRhdGFibGVSb3dBY3Rpb25FZGl0PWZ1bmN0aW9uIChyb3dEYXRhLG5vZGUpIHtcclxuICAgICAgICBjb25zb2xlLmxvZygnZGF0YXRhYmxlUm93QWN0aW9uRWRpdCBDYWxsZWQnKTtcclxuICAgICAgICAvL09wdHMub25BZnRlckluaXRWaWV3RGV0YWlscz1yb290LmF1dG9maWxsRGV0YWlscztcclxuICAgICAgICBsZXQgYWpheFVybD1PcHRzLlVSTC5lZGl0LnJlcGxhY2UoJyVpZCUnLHJvd0RhdGEuaWQpO1xyXG4gICAgICAgIEFQUC5sb2FkTWFpbkNvbnRlbnQoYWpheFVybCxyb290LmluaXRWaWV3RGV0YWlscyk7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ2RhdGF0YWJsZVJvd0FjdGlvbkVkaXQgRW5kJyk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5jbGlja09yZGVyRGVsZXRlQ29uZmlybWVkPWZ1bmN0aW9uIChldmVudCl7XHJcbiAgICAgICAgZGVidWcoJ2NsaWNrU3VwcGxpZXJEZWxldGVDb25maXJtZWQnKTtcclxuICAgICAgICBkZWJ1ZyhldmVudCk7XHJcbiAgICAgICAgZGVidWcoZXZlbnQuZGF0YSk7XHJcbiAgICAgICAgJCgnI2RpYWxvZ01vZGFsJykubW9kYWwoJ2hpZGUnKTtcclxuICAgICAgICBsZXQgYWpheERhdGE9e307XHJcbiAgICAgICAgYWpheERhdGEuX3Rva2VuPU9wdHMudG9rZW47XHJcbiAgICAgICAgbGV0IGFqYXhVcmw9T3B0cy5VUkwuZGVzdHJveS5yZXBsYWNlKCclaWQlJyxldmVudC5kYXRhLmlkKTtcclxuICAgICAgICBhamF4RGF0YS5fdG9rZW49JCgnaW5wdXRbbmFtZT1fdG9rZW5dJykudmFsKCk7XHJcbiAgICAgICAgY29uc29sZS5sb2coYWpheFVybCk7XHJcbiAgICAgICAgY29uc29sZS5sb2coYWpheERhdGEpO1xyXG4gICAgICAgIGxldCByb3c9JChkYXRhVGFibGVDU1NTZWxlY3RvcikuRGF0YVRhYmxlKCkucm93KHJvb3QuZGFkYXRhdGFibGVSb3dBY3Rpb25DYWxsZXJOb2RlLnBhcmVudHMoJ3RyJykpO1xyXG4gICAgICAgICQuYWpheCh7XHJcbiAgICAgICAgICAgIHVybDphamF4VXJsLFxyXG4gICAgICAgICAgICBkYXRhOmFqYXhEYXRhLFxyXG4gICAgICAgICAgICBtZXRob2Q6XCJERUxFVEVcIixcclxuICAgICAgICAgICAgc3VjY2VzczpmdW5jdGlvbiAoZGF0YSl7XHJcbiAgICAgICAgICAgICAgICBpZihkYXRhLnN1Y2Nlc3M9PXRydWUpe1xyXG4gICAgICAgICAgICAgICAgICAgIHJvdy5yZW1vdmUoKS5kcmF3KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgcm9vdC5kYWRhdGF0YWJsZVJvd0FjdGlvbkNhbGxlck5vZGU9ZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICB9XHJcbiAgICBsZXQgZGF0YXRhYmxlUm93QWN0aW9uQ2FsbGVyTm9kZT1mYWxzZTtcclxuXHJcbiAgICB0aGlzLmRhdGF0YWJsZVJvd0FjdGlvbkRlbGV0ZT1mdW5jdGlvbiAocm93RGF0YSxub2RlKSB7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ2RhdGF0YWJsZVJvd0FjdGlvbkRlbGV0ZSBDYWxsZWQnKTtcclxuICAgICAgICByb290LmRhZGF0YXRhYmxlUm93QWN0aW9uQ2FsbGVyTm9kZT1ub2RlO1xyXG4gICAgICAgICQoJyNkaWFsb2dNb2RhbCcpLm9uKCdzaG93LmJzLm1vZGFsJywgZnVuY3Rpb24gKGV2ZW50KSB7XHJcbiAgICAgICAgICAgIC8vIElmIG5lY2Vzc2FyeSwgeW91IGNvdWxkIGluaXRpYXRlIGFuIEFKQVggcmVxdWVzdCBoZXJlIChhbmQgdGhlbiBkbyB0aGUgdXBkYXRpbmcgaW4gYSBjYWxsYmFjaykuXHJcbiAgICAgICAgICAgIC8vIFVwZGF0ZSB0aGUgbW9kYWwncyBjb250ZW50LiBXZSdsbCB1c2UgalF1ZXJ5IGhlcmUsIGJ1dCB5b3UgY291bGQgdXNlIGEgZGF0YSBiaW5kaW5nIGxpYnJhcnkgb3Igb3RoZXIgbWV0aG9kcyBpbnN0ZWFkLlxyXG4gICAgICAgICAgICB2YXIgbW9kYWwgPSAkKHRoaXMpO1xyXG4gICAgICAgICAgICBtb2RhbC5maW5kKCcubW9kYWwtdGl0bGUnKS50ZXh0KCdNZWdlcsWRc8OtdMOpcyAnKTtcclxuICAgICAgICAgICAgbW9kYWwuZmluZCgnLm1vZGFsLWJvZHknKS50ZXh0KCdCaXp0b3NhbiB0w7ZybGkgYSBiZXN6w6FsbMOtdMOzdD8nKTtcclxuICAgICAgICAgICAgbW9kYWwuZmluZCgnLmJ1dHRvblllcycpLm9mZignY2xpY2snKTtcclxuICAgICAgICAgICAgbW9kYWwuZmluZCgnLmJ1dHRvblllcycpLm9uKCdjbGljaycse2lkOnJvd0RhdGEuaWR9LHJvb3QuY2xpY2tPcmRlckRlbGV0ZUNvbmZpcm1lZCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgJCgnI2RpYWxvZ01vZGFsJykubW9kYWwoJ3Nob3cnKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmRhdGF0YWJsZVJvd0FjdGlvbkJ1dHRvbkNsaWNrPWZ1bmN0aW9uIChldmVudCl7XHJcbiAgICAgICAgZGVidWcoJ2RhdGF0YWJsZVJvd0FjdGlvbkJ1dHRvbkNsaWNrJyk7XHJcbiAgICAgICAgbGV0IG5vZGU9JChldmVudFswXS5jdXJyZW50VGFyZ2V0KTtcclxuICAgICAgICBsZXQgcm93PSQoZGF0YVRhYmxlQ1NTU2VsZWN0b3IpLkRhdGFUYWJsZSgpLnJvdyhub2RlLnBhcmVudHMoJ3RyJykpO1xyXG4gICAgICAgIGxldCByb3dEYXRhPXJvdy5kYXRhKCk7XHJcbiAgICAgICAgbGV0IGFjdGlvbk5hbWU9J2RhdGF0YWJsZVJvd0FjdGlvbicrbm9kZS5kYXRhKCdidXR0b250eXBlJykuY2FwaXRhbGl6ZSgpO1xyXG4gICAgICAgIGlmICh0eXBlb2Ygcm9vdFthY3Rpb25OYW1lXSA9PT0gXCJmdW5jdGlvblwiKSB7XHJcbiAgICAgICAgICAgIHJldHVybiByb290W2FjdGlvbk5hbWVdKHJvd0RhdGEsbm9kZSlcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5pbml0Vmlld0xpc3QgPSBmdW5jdGlvbiAob3B0aW9ucz17fSkge1xyXG4gICAgICAgIGRlYnVnKCdsaXN0dmlldyBpbmljaWFsaXphdGlvbicpO1xyXG4gICAgICAgIGRhdGFUYWJsZUNTU1NlbGVjdG9yPU9wdHMuY29udGFpbmVyQ3NzU2VsZWN0b3IrJyAuZGF0YVRhYmxlJzsgLy9cclxuXHJcbiAgICAgICAgbGV0IGNvbE51bT0kKGRhdGFUYWJsZUNTU1NlbGVjdG9yKycgdGhlYWQgdGgnKS5sZW5ndGg7IC8vYnV0dG9ucyBpbnNlcnQgcG9zaXRpb24gbmVlZFxyXG4gICAgICAgIEFQUC5zZXRPcHRzKHtcclxuICAgICAgICAgICAgZGF0YXRhYmxlQWN0aW9uQnV0dG9uQ2xpY2tDYWxsQmFjazpyb290LmNsaWNrTmV3LFxyXG4gICAgICAgICAgICBkYXRhdGFibGVSb3dBY3Rpb25CdXR0b25DbGlja0NhbGxCYWNrOnJvb3QuZGF0YXRhYmxlUm93QWN0aW9uQnV0dG9uQ2xpY2ssXHJcblxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgbGV0IG9yZGVyRGlyZWN0aXZlPU9wdHMuZGF0YVRhYmxlLm9yZGVyRGlyZWN0aXZlO1xyXG4gICAgICAgIGlmKHR5cGVvZiBvcHRpb25zWydvcmRlckRpcmVjdGl2ZSddIT0ndW5kZWZpbmVkJyl7XHJcbiAgICAgICAgICAgIG9yZGVyRGlyZWN0aXZlPW9wdGlvbnNbJ29yZGVyRGlyZWN0aXZlJ107XHJcbiAgICAgICAgfVxyXG4gICAgICAgICQoZGF0YVRhYmxlQ1NTU2VsZWN0b3IpLkRhdGFUYWJsZSgge1xyXG4gICAgICAgICAgICBsYW5ndWFnZToge1xyXG4gICAgICAgICAgICAgICAgdXJsOiAnLy9jZG4uZGF0YXRhYmxlcy5uZXQvcGx1Zy1pbnMvMS4xMC4yNC9pMThuL0h1bmdhcmlhbi5qc29uJ1xyXG4gICAgICAgICAgICB9LFxyXG5cclxuICAgICAgICAgICAgLy9cImFqYXhcIjogXCJ7e2Fzc2V0KCdleGFwbWxlMi5qc29uJyl9fVwiLFxyXG4gICAgICAgICAgICBcImFqYXhcIjogT3B0cy5VUkwuZ2V0RGF0YVRhYmxlQ29udGVudCxcclxuICAgICAgICAgICAgXCJjb2x1bW5EZWZzXCI6IFtcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBcInRhcmdldHNcIjogY29sTnVtLTEsXHJcbiAgICAgICAgICAgICAgICAgICAgXCJyZW5kZXJcIjogZnVuY3Rpb24gKCBkYXRhLCB0eXBlLCByb3cgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBidXR0b25zPUFQUC5kYXRhdGFibGVBZGRSb3dUcmFzaEJ1dHRvbigwLGFyZ3VtZW50cyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJ1dHRvbnMrPUFQUC5kYXRhdGFibGVBZGRSb3dFZGl0QnV0dG9uKDAsYXJndW1lbnRzKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGJ1dHRvbnM7XHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgXCJ0YXJnZXRzXCI6IDEsXHJcbiAgICAgICAgICAgICAgICAgICAgXCJyZW5kZXJcIjogZnVuY3Rpb24gKCBkYXRhLCB0eXBlLCByb3cgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0eXBlID09PSBcInNvcnRcIiA/IGRhdGEubGF0aW5pc2UoKSA6IGRhdGE7XHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAvL3sgXCJ2aXNpYmxlXCI6IGZhbHNlLCAgXCJ0YXJnZXRzXCI6IFsgMCBdIH1cclxuICAgICAgICAgICAgXSxcclxuICAgICAgICAgICAgYnV0dG9uczp7XHJcbiAgICAgICAgICAgICAgICBidXR0b25zOiBbXHJcbiAgICAgICAgICAgICAgICAgICAgJ2V4Y2VsJywncGRmJyxcclxuICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4dGVuZDogJ3ByaW50JyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy90ZXh0OiAnUHJpbnQgY3VycmVudCBwYWdlJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgJ3RpdGxlJzogJ3RpdGxlIGN1c3RvbSB0ZXh0JyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgJ21lc3NhZ2VUb3AnOiAnTWVzc2FnZSBPbiBUb3AnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBhdXRvUHJpbnQ6IHRydWVcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIC8qKi9cclxuXHJcbiAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiAnw5pqIGZlbHZpdGVsZScsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogJ2J0biBidG4tc3VjY2VzcyBuZXdJdGVtJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXR0cjp7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhOjEsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGI6MlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2RhdGEnOiduZXdJdGVtJ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpbml0OiBmdW5jdGlvbihhcGksIG5vZGUsIGNvbmZpZykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJChub2RlKS5yZW1vdmVDbGFzcygndWktYnV0dG9uJylcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uOiBmdW5jdGlvbiAoIGUsIGR0LCBub2RlLCBjb25maWcgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBBUFAuZGF0YXRhYmxlQWN0aW9uQnV0dG9uQ2xpY2tDYWxsQmFjayhhcmd1bWVudHMpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogY29uc29sZS5sb2coZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coZHQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKG5vZGUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGNvbmZpZyk7Ki9cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBdXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIFwiY29sdW1uc1wiOiBbXHJcbiAgICAgICAgICAgICAgICB7IFwiZGF0YVwiOiBcImlkXCIgfSxcclxuICAgICAgICAgICAgICAgIHsgXCJkYXRhXCI6IFwibmFtZVwiIH0sXHJcbiAgICAgICAgICAgICAgICB7IFwiZGF0YVwiOiBcImhvb3JleWNhSWRcIiB9LFxyXG4gICAgICAgICAgICAgICAgeyBcImRhdGFcIjogXCJuYW1lSWRcIiB9LFxyXG4gICAgICAgICAgICAgICAgeyBcImRhdGFcIjogXCJjcmVhdGVkX2F0XCIgfSxcclxuICAgICAgICAgICAgICAgIG51bGwsXHJcbiAgICAgICAgICAgIF0sXHJcbiAgICAgICAgICAgIFwib3JkZXJcIjogb3JkZXJEaXJlY3RpdmUsXHJcbiAgICAgICAgICAgIFwic3RhdGVTYXZlXCI6IHRydWUsXHJcbiAgICAgICAgICAgIFwiZHJhd0NhbGxiYWNrXCI6IGZ1bmN0aW9uKCBzZXR0aW5ncyApIHtcclxuICAgICAgICAgICAgICAgIEFQUC5kYXRhdGFibGVBZGRSb3dBY3Rpb24oZGF0YVRhYmxlQ1NTU2VsZWN0b3IpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSApO1xyXG4gICAgICAgIGRlYnVnKCdsaXN0dmlldyBlbmQnKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmF1dG9maWxsRGV0YWlscz1mdW5jdGlvbiAoKXtcclxuICAgICAgICBkZWJ1ZygnbnllcmVzcmUgYWxsdW5rJyk7XHJcbiAgICAgICAgbGV0IHJhbmRvbU51bWJlcj1nZXRSYW5kb21JbnQoOTk5OSk7XHJcbiAgICAgICAgJCgnaW5wdXRbbmFtZT1uYW1lXScpLnZhbCgnQmVzemFsw610w7MnK3JhbmRvbU51bWJlcik7XHJcbiAgICAgICAgJCgnaW5wdXRbbmFtZT1ob29yZXljYUlkXScpLnZhbCgnaGInK3JhbmRvbU51bWJlcik7XHJcbiAgICAgICAgJCgnaW5wdXRbbmFtZT1uYW1lSWRdJykudmFsKCdiZScrcmFuZG9tTnVtYmVyKTtcclxuICAgICAgICAkKCdpbnB1dFtuYW1lPW9yZGVyRW1haWxdJykudmFsKCdrYXBjc29sYXQnK3JhbmRvbU51bWJlcisnQGJlc3phbGxpdG8uaHUnKTtcclxuICAgICAgICAkKCdpbnB1dFtuYW1lPW9yZGVyRW1haWwyXScpLnZhbCgnaW5mb3JtYWNpbycrcmFuZG9tTnVtYmVyKydAYmVzemFsbGl0by5odScpO1xyXG4gICAgICAgICQoJ2lucHV0W25hbWU9YWRkcmVzc10nKS52YWwoJzg5ODkgU3VwcGxpZXIgdXRjYSAnK3JhbmRvbU51bWJlcik7XHJcbiAgICAgICAgJCgnaW5wdXRbbmFtZT1tYWlsaW5nQWRkcmVzc10nKS52YWwoJzg5ODkgUG9zdGFpIMO6dCcrcmFuZG9tTnVtYmVyKTtcclxuICAgICAgICAkKCdpbnB1dFtuYW1lPXBob25lXScpLnZhbCgnKzM2MzAxMjM0NTY3Jyk7XHJcbiAgICAgICAgJCgnaW5wdXRbbmFtZT1mYXhdJykudmFsKCczNjMwODg4OTk5OScpO1xyXG4gICAgICAgICQoJ2lucHV0W25hbWU9Y3VzdG9tZXJTZXJ2aWNlUGhvbmVdJykudmFsKCcrMzY3NjEyMzQ0NDQnKTtcclxuICAgICAgICAkKCd0ZXh0YXJlYVtuYW1lPW5vdGVdJykudmFsKCdNZWdqZWd5emVtICcrcmFuZG9tTnVtYmVyKTtcclxuXHJcbiAgICB9XHJcbiAgICB0aGlzLnRlc3RNb2RlPWZ1bmN0aW9uICgpIHtcclxuICAgICAgICBjb25zb2xlLmRlYnVnKCchISEhdGVzdG1vZGUgISEhIScpO1xyXG4gICAgICAgIHJvb3QuU3VwcGxpZXIgPSBuZXcgd2luZG93LlN1cHBsaWVyKHtcclxuICAgICAgICAgICAgJ2NvbnRhY3QnOltcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBpZDoyLFxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBpZDozLFxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIC8qXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDozLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOidLw7NzYSBWZXJvbmlrYScsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVtYWlsOidzemFtbGF6YXM0QGZ1bmtjaW8uaHUnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaG9uZTone3tmb3JtYXR0ZXJQaG9uZU51bWJlcihcIiszNjIwNDU4OTE4MFwiKX19J1xyXG4gICAgICAgICAgICB9XHJcbiovXHJcblxyXG4gICAgICAgICAgICBdXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgT3B0cy5vbkFmdGVySW5pdFZpZXdEZXRhaWxzPXJvb3QuYXV0b2ZpbGxEZXRhaWxzO1xyXG4gICAgICAgIEFQUC5sb2FkTWFpbkNvbnRlbnQoT3B0cy5VUkwuY3JlYXRlLHJvb3QuaW5pdFZpZXdEZXRhaWxzKTtcclxuICAgIH1cclxuICAgIHRoaXMuaW5pdD1mdW5jdGlvbiAob3B0aW9ucyxTdXBwbGllckl0ZW0pe1xyXG4gICAgICAgICQuZXh0ZW5kKE9wdHMsIG9wdGlvbnMpO1xyXG5cclxuICAgICAgICBpZihPcHRzLnRlc3RNb2RlKXtcclxuICAgICAgICAgICAgcmV0dXJuIHJvb3QudGVzdE1vZGUoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYoU3VwcGxpZXJJdGVtKXtcclxuICAgICAgICAgICAgcm9vdC5TdXBwbGllcj1TdXBwbGllckl0ZW1cclxuICAgICAgICB9XHJcbiAgICAgICAgcm9vdC5pbml0Vmlld0xpc3QoKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnJlbmRlckF0dGFjaG1lbnQ9ZnVuY3Rpb24gKCl7XHJcbiAgICAgICAgbGV0IHJvd051bT0xO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCdyZW5kZXJpbmdBdHRhY2htZW50Jyk7XHJcbiAgICAgICAgJC5lYWNoKHJvb3QuU3VwcGxpZXIuZ2V0RGF0YSgnYXR0YWNobWVudCcpLGZ1bmN0aW9uICgpe1xyXG4gICAgICAgICAgICBsZXQgYXR0YWNobWVudERhdGE9dGhpcztcclxuICAgICAgICAgICAgYXR0YWNobWVudERhdGEucm93TnVtPXJvd051bTtcclxuICAgICAgICAgICAgZGF0ZT1uZXcgRGF0ZShhdHRhY2htZW50RGF0YS5jcmVhdGVkX2F0KTtcclxuICAgICAgICAgICAgYXR0YWNobWVudERhdGEuZGF0ZT1kYXRlLnRvTG9jYWxlU3RyaW5nKCk7XHJcbiAgICAgICAgICAgIGF0dGFjaG1lbnREYXRhLmxpbms9YXR0YWNobWVudERhdGEuUHVibGljVXJsKycvJythdHRhY2htZW50RGF0YS5maWxlbmFtZTtcclxuICAgICAgICAgICAgbGV0IHRlbXBsYXRlPSQoJ3RlbXBsYXRlW2RhdGEtbmFtZT1cInN1cHBsaWVyQXR0YWNobWVudFRhYmxlUm93XCJdJykuaHRtbCgpXHJcbiAgICAgICAgICAgIGxldCByZW5kZXI9TXVzdGFjaGUucmVuZGVyKHRlbXBsYXRlLGF0dGFjaG1lbnREYXRhKTtcclxuICAgICAgICAgICAgJCgnLmF0dGFjaG1lbnRUYWJsZSB0Ym9keScpLmFwcGVuZChyZW5kZXIpO1xyXG4gICAgICAgICAgICByb3dOdW0rKztcclxuICAgICAgICB9KTtcclxuICAgICAgICByb290LmJpbmRBdHRhY2htZW50Q2xpY2tBY3Rpb24oKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmFkZEF0dGFjaG1lbnQ9ZnVuY3Rpb24gKGF0dGFjaG1lbnREYXRhKXtcclxuICAgICAgICBjb25zb2xlLmxvZyhhdHRhY2htZW50RGF0YSk7XHJcbiAgICAgICAgbGV0IENTU1NlbGVjdG9yRm9ybT1PcHRzLmNvbnRhaW5lckNzc1NlbGVjdG9yKycgLnN1cHBsaWVyRm9ybSc7XHJcbiAgICAgICAgcm9vdC5TdXBwbGllci5hdHRhY2htZW50LnB1c2goYXR0YWNobWVudERhdGEpO1xyXG4gICAgICAgIGF0dGFjaG1lbnREYXRhLnJvd051bT1yb290LlN1cHBsaWVyLmF0dGFjaG1lbnQubGVuZ3RoO1xyXG4gICAgICAgIGxldCB0ZW1wbGF0ZT0kKCd0ZW1wbGF0ZVtkYXRhLW5hbWU9XCJzdXBwbGllckF0dGFjaG1lbnRUYWJsZVJvd1wiXScpLmh0bWwoKVxyXG4gICAgICAgIGxldCByZW5kZXI9TXVzdGFjaGUucmVuZGVyKHRlbXBsYXRlLGF0dGFjaG1lbnREYXRhKTtcclxuICAgICAgICAkKENTU1NlbGVjdG9yRm9ybSsnIC5hdHRhY2htZW50VGFibGUgdGJvZHknKS5hcHBlbmQocmVuZGVyKTtcclxuICAgICAgICByb290LmJpbmRDb250YWN0Q2xpY2tBY3Rpb24oKTtcclxuICAgICAgICBUb2FzdC5lbmFibGVUaW1lcnMoZmFsc2UpO1xyXG4gICAgICAgIFRvYXN0LmNyZWF0ZSh7IHRpdGxlOiBcIkbDoWpsIGhvenrDoWFkdmEhXCIsIG1lc3NhZ2U6IGF0dGFjaG1lbnREYXRhLm9yaWdpbmFsX2ZpbGVuYW1lK1wiIGbDoWpsIGhvenrDoWFkdmFcIiwgc3RhdHVzOiBUT0FTVF9TVEFUVVMuU1VDQ0VTUywgdGltZW91dDogNTAwMCB9KTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgdGhpcy5yZXNldENvbnRhY3RUYWJsZT1mdW5jdGlvbiAoKXtcclxuICAgICAgICAkKCcuY29udGFjdFRhYmxlIHRib2R5IHRyJykucmVtb3ZlKCk7XHJcbiAgICAgICAgcm9vdC5yZW5kZXJDb250YWN0KCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLnJlbmRlckNvbnRhY3Q9ZnVuY3Rpb24gKCl7XHJcbiAgICAgICAgbGV0IHJvd051bT0xO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCdyZW5kZXJpbmdDb250YWN0cycpO1xyXG4gICAgICAgICQuZWFjaChyb290LlN1cHBsaWVyLmdldERhdGEoJ2NvbnRhY3QnKSxmdW5jdGlvbiAoKXtcclxuICAgICAgICAgICAgbGV0IGNvbnRhY3REYXRhPXRoaXM7XHJcbiAgICAgICAgICAgIGNvbnRhY3REYXRhLnJvd051bT1yb3dOdW07XHJcbiAgICAgICAgICAgIC8vY29uc29sZS5sb2coY29udGFjdERhdGEpO1xyXG4gICAgICAgICAgICBsZXQgdGVtcGxhdGU9JCgndGVtcGxhdGVbZGF0YS1uYW1lPVwic3VwcGxpZXJDb250YWN0VGFibGVSb3dcIl0nKS5odG1sKClcclxuICAgICAgICAgICAgbGV0IHJlbmRlcj1NdXN0YWNoZS5yZW5kZXIodGVtcGxhdGUsY29udGFjdERhdGEpO1xyXG4gICAgICAgICAgICAkKCcuY29udGFjdFRhYmxlIHRib2R5JykuYXBwZW5kKHJlbmRlcik7XHJcbiAgICAgICAgICAgIHJvd051bSsrO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJvb3QuYmluZENvbnRhY3RDbGlja0FjdGlvbigpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuYmluZENvbnRhY3RDbGlja0FjdGlvbiA9ZnVuY3Rpb24gKCl7XHJcbiAgICAgICAgbGV0IG5vZGU9JCgnLmNvbnRhY3RUYWJsZSAuYnV0dG9uRGVsZXRlJyk7XHJcbiAgICAgICAgbm9kZS51bmJpbmQoJ2NsaWNrJyk7XHJcbiAgICAgICAgbm9kZS5iaW5kKCdjbGljaycscm9vdC5jb250YWN0RGVsZXRlQ2xpY2spO1xyXG5cclxuICAgICAgICBub2RlPSQoJy5jb250YWN0VGFibGUgLmJ1dHRvbkVkaXQnKTtcclxuICAgICAgICBub2RlLnVuYmluZCgnY2xpY2snKTtcclxuICAgICAgICBub2RlLmJpbmQoJ2NsaWNrJyxyb290LmNvbnRhY3RFZGl0Q2xpY2spO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmJpbmRBdHRhY2htZW50Q2xpY2tBY3Rpb249ZnVuY3Rpb24gKCl7XHJcbiAgICAgICAgbGV0IG5vZGU9JCgnLmF0dGFjaG1lbnRUYWJsZSAuYnV0dG9uRGVsZXRlJyk7XHJcbiAgICAgICAgbm9kZS51bmJpbmQoJ2NsaWNrJyk7XHJcbiAgICAgICAgbm9kZS5iaW5kKCdjbGljaycscm9vdC5hdHRhY2htZW50RGVsZXRlQ2xpY2spO1xyXG4gICAgfVxyXG4gICAgbGV0IGN1cnJlbnRBdHRhY2htZW50Um93PWZhbHNlO1xyXG4gICAgdGhpcy5hdHRhY2htZW50RGVsZXRlQ2xpY2s9ZnVuY3Rpb24gKGV2ZW50KXtcclxuICAgICAgICBsZXQgcm93PSQodGhpcykuY2xvc2VzdCgndHInKTtcclxuICAgICAgICBsZXQgaWQ9cm93LmZpbmQoJ2lucHV0W25hbWU9YXR0YWNobWVudElkXScpLnZhbCgpO1xyXG4gICAgICAgIGxldCBhamF4VXJsPU9wdHMuVVJMLmRldGFjaEZpbGUucmVwbGFjZSgnJWlkJScscm9vdC5TdXBwbGllci5pZCk7XHJcbiAgICAgICAgLy9sZXQgZGF0YT0gbmV3IEZvcm1EYXRhKCQoT3B0cy5jb250YWluZXJDc3NTZWxlY3RvcikuZmluZCgnZm9ybS5zdXBwbGllckZvcm0nKVswXSk7XHJcbiAgICAgICAgLy9kYXRhLmFwcGVuZChmaWxlSW5wdXQuYXR0cignbmFtZScpLGZpbGVJbnB1dFswXS5maWxlc1swXSk7XHJcbiAgICAgICAgbGV0IGRhdGE9e307XHJcbiAgICAgICAgZGF0YS5fdG9rZW49JCgnaW5wdXRbbmFtZT1cIl90b2tlblwiXScpLnZhbCgpO1xyXG4gICAgICAgIGRhdGEuYXR0YWNoZW1udElkPWlkO1xyXG4gICAgICAgICQuYWpheCh7XHJcbiAgICAgICAgICAgIHVybDphamF4VXJsLFxyXG4gICAgICAgICAgICBkYXRhOmRhdGEsXHJcbiAgICAgICAgICAgIHR5cGU6J1BPU1QnLFxyXG4gICAgICAgICAgICAvL2NvbnRlbnRUeXBlOmZhbHNlLFxyXG4gICAgICAgICAgICAvL3Byb2Nlc3NEYXRhOiBmYWxzZSxcclxuICAgICAgICAgICAgYmVmb3JlU2VuZDogZnVuY3Rpb24oKSB7XHJcblxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbihkYXRhKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhkYXRhKTtcclxuICAgICAgICAgICAgICAgIGlmKGRhdGEuc3VjY2Vzcz09dHJ1ZSl7XHJcbiAgICAgICAgICAgICAgICAgICAgcm9vdC5TdXBwbGllci5hdHRhY2htZW50PXJvb3QuU3VwcGxpZXIuYXR0YWNobWVudC5maWx0ZXIoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uICh2YWx1ZSxpbmRleCxhcnIpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlLmlkIT09ZGF0YS5kYXRhLiAgIGF0dGFjaG1lbnQuaWQqMSl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICAvKlxyXG4gICAgICAgICAgICAgICAgICAgICovXHJcbiAgICAgICAgICAgICAgICAgICAgLy9yb3cucmVtb3ZlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgcm9vdC5yZXNldEF0dGFjaG1lbnRUYWJsZSgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBlcnJvcjogZnVuY3Rpb24oZGF0YSkge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coZGF0YS5yZXNwb25zZUpTT04pO1xyXG4gICAgICAgICAgICAgICAgcm9vdC5zZWxlY3RlZFVwbG9hZEZpbGVUb2dnbGUoKTtcclxuICAgICAgICAgICAgICAgIGFqYXhFcnJvckZpZWxkSGFuZGxlcihkYXRhLnJlc3BvbnNlSlNPTi5lcnJvcik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG5cclxuICAgIH1cclxuXHJcblxyXG4gICAgdGhpcy5yZXNldEF0dGFjaG1lbnRUYWJsZT1mdW5jdGlvbiAoKXtcclxuICAgICAgICAkKCcuYXR0YWNobWVudFRhYmxlIHRib2R5IHRyJykucmVtb3ZlKCk7XHJcbiAgICAgICAgcm9vdC5yZW5kZXJBdHRhY2htZW50KCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5jb250YWN0RGVsZXRlQ2xpY2s9ZnVuY3Rpb24gKGV2ZW50KXtcclxuICAgICAgICBsZXQgcm93PSQodGhpcykuY2xvc2VzdCgndHInKTtcclxuICAgICAgICBsZXQgaWQ9cm93LmZpbmQoJ2lucHV0W25hbWU9Y29udGFjdElkXScpLnZhbCgpO1xyXG4gICAgICAgIHJvb3QuU3VwcGxpZXIuY29udGFjdD1yb290LlN1cHBsaWVyLmNvbnRhY3QuZmlsdGVyKFxyXG4gICAgICAgICAgICBmdW5jdGlvbiAodmFsdWUsaW5kZXgsYXJyKXtcclxuICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5pZCE9PWlkKjEpe1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAgdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgcm93LnJlbW92ZSgpO1xyXG4gICAgICAgIHJvb3QucmVzZXRDb250YWN0VGFibGUoKTtcclxuICAgIH1cclxuICAgIHJvb3QuZ2V0Q29udGFjdFBvcHVwV29ya2Zsb3cgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIGNvbnRhY3RQb3B1cFdvcmtmbG93O1xyXG4gICAgfVxyXG4gICAgcm9vdC5zZXRDb250YWN0UG9wdXBXb3JrZmxvdyA9IGZ1bmN0aW9uIChzdGF0dXMpIHtcclxuICAgICAgICBjb250YWN0UG9wdXBXb3JrZmxvdz1zdGF0dXM7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIHRoaXMuY29udGFjdEVkaXRDbGljaz1mdW5jdGlvbiAoZXZlbnQpe1xyXG4gICAgICAgIC8vY29uc29sZS5sb2codGhpcyk7XHJcbiAgICAgICAgbGV0IHJvdz0kKHRoaXMpLmNsb3Nlc3QoJ3RyJyk7XHJcbiAgICAgICAgbGV0IGlkPXJvdy5maW5kKCdpbnB1dFtuYW1lPWNvbnRhY3RJZF0nKS52YWwoKTtcclxuICAgICAgICByb290LnNldENvbnRhY3RQb3B1cFdvcmtmbG93KCdlZGl0Jyk7XHJcbiAgICAgICAgQVBQLkNvbnRhY3RQb3BVcC5sb2FkRGF0YShpZCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5nZXRTdXBwbGllcj1mdW5jdGlvbiAoKXtcclxuICAgICAgICByZXR1cm4gcm9vdC5TdXBwbGllcjtcclxuICAgIH1cclxuICAgIHRoaXMuY29udGFjdEFjdGlvbj1mdW5jdGlvbiAoY29udGFjdERhdGEpe1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCduYWggbW9zdCBrZWxsZW5lIG1lZyB2YWxhbWl0IGNzaW5hbG5pLicpXHJcbiAgICAgICAgaWYocm9vdC5nZXRDb250YWN0UG9wdXBXb3JrZmxvdygpPT0nbmV3Jyl7XHJcbiAgICAgICAgICAgIHJvb3QuYWRkQ29udGFjdChjb250YWN0RGF0YSk7XHJcbiAgICAgICAgfWVsc2UgaWYocm9vdC5nZXRDb250YWN0UG9wdXBXb3JrZmxvdygpPT0nZWRpdCcpe1xyXG4gICAgICAgICAgICByb290LmVkaXRDb250YWN0KGNvbnRhY3REYXRhLmlkLGNvbnRhY3REYXRhKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5lZGl0Q29udGFjdD1mdW5jdGlvbiAoaWQsY29udGFjdERhdGEpe1xyXG5cclxuICAgICAgICBsZXQgbmV3Q29udGFjdHM9W107XHJcbiAgICAgICAgJC5lYWNoKHJvb3QuU3VwcGxpZXIuZ2V0RGF0YSgnY29udGFjdCcpLGZ1bmN0aW9uIChpbmRleCl7XHJcbiAgICAgICAgICAgIGlmKHRoaXMuaWQ9PWlkKXtcclxuICAgICAgICAgICAgICAgIG5ld0NvbnRhY3RzLnB1c2goY29udGFjdERhdGEpO1xyXG4gICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgIG5ld0NvbnRhY3RzLnB1c2godGhpcyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICByb290LlN1cHBsaWVyLmNvbnRhY3Q9bmV3Q29udGFjdHM7XHJcbiAgICAgICAgcm9vdC5yZXNldENvbnRhY3RUYWJsZSgpO1xyXG4gICAgICAgIFRvYXN0LmNyZWF0ZSh7IHRpdGxlOiBcIkthcGNzb2xhdCBhZGF0YWkgbcOzZG9zw610dmEhXCIsIG1lc3NhZ2U6IGNvbnRhY3REYXRhLm5hbWUrXCIgbmV2xbEga2FwY3NvbGF0dGFydMOzIG3Ds2Rvc8OtdHZhXCIsIHN0YXR1czogVE9BU1RfU1RBVFVTLlNVQ0NFU1MsIHRpbWVvdXQ6IDUwMDAgfSk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmFkZENvbnRhY3Q9ZnVuY3Rpb24gKGNvbnRhY3REYXRhKXtcclxuICAgICAgICAvKlxyXG4gICAgICAgIGZlbCBrZWxsIHZlbm5pIGEgc29yYmFcclxuICAgICAgICAgKi9cclxuICAgICAgICByb290LlN1cHBsaWVyLmNvbnRhY3QucHVzaChjb250YWN0RGF0YSk7XHJcbiAgICAgICAgY29udGFjdERhdGEucm93TnVtPXJvb3QuU3VwcGxpZXIuY29udGFjdC5sZW5ndGg7XHJcbiAgICAgICAgbGV0IHRlbXBsYXRlPSQoJ3RlbXBsYXRlW2RhdGEtbmFtZT1cInN1cHBsaWVyQ29udGFjdFRhYmxlUm93XCJdJykuaHRtbCgpXHJcbiAgICAgICAgbGV0IHJlbmRlcj1NdXN0YWNoZS5yZW5kZXIodGVtcGxhdGUsY29udGFjdERhdGEpO1xyXG4gICAgICAgICQoJy5jb250YWN0VGFibGUgdGJvZHknKS5hcHBlbmQocmVuZGVyKTtcclxuICAgICAgICByb290LmJpbmRDb250YWN0Q2xpY2tBY3Rpb24oKTtcclxuICAgICAgICBUb2FzdC5lbmFibGVUaW1lcnMoZmFsc2UpO1xyXG4gICAgICAgIFRvYXN0LmNyZWF0ZSh7IHRpdGxlOiBcIkthcGNzb2xhdHRhcnTDsyBob3p6w6FhZHZhIVwiLCBtZXNzYWdlOiBjb250YWN0RGF0YS5uYW1lK1wiIG5ldsWxIGthcGNzb2xhdHRhcnTDsyBob3p6w6FhZHZhXCIsIHN0YXR1czogVE9BU1RfU1RBVFVTLlNVQ0NFU1MsIHRpbWVvdXQ6IDUwMDAgfSk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIHRoaXMuY29uc3RydWN0KG9wdGlvbnMsU3VwcGxpZXJJdGVtKTtcclxufTtcclxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7O0FBQUEsSUFBRyxPQUFPQSxRQUFRLEtBQUcsV0FBVyxFQUFDO0VBQUEsSUFDdkJBLFNBQVEsMEJBQUFDLFVBQUE7SUFFVjtBQUNSO0FBQ0E7SUFDUSxTQUFBQyxVQUFhQyxJQUFJLEVBQUNDLE9BQU8sRUFBRTtNQUFBLElBQUFDLEtBQUE7TUFBQUMsZUFBQSxPQUFBSixTQUFBO01BQ3ZC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QWdDO01BQUUzQixNQUFNLEVBQUVDLFlBQVksQ0FBQ2UsT0FBTztNQUFFYixPQUFPLEVBQUU7SUFBSyxDQUFDLENBQUM7RUFDbkssQ0FBQztFQUNELElBQUksQ0FBQ3dKLFVBQVUsR0FBQyxVQUFVZCxXQUFXLEVBQUM7SUFDbEM7QUFDUjtBQUNBO0lBQ1F4TCxJQUFJLENBQUNyQyxRQUFRLENBQUNRLE9BQU8sQ0FBQ2lELElBQUksQ0FBQ29LLFdBQVcsQ0FBQztJQUN2Q0EsV0FBVyxDQUFDbEIsTUFBTSxHQUFDdEssSUFBSSxDQUFDckMsUUFBUSxDQUFDUSxPQUFPLENBQUN1SCxNQUFNO0lBQy9DLElBQUlzRixRQUFRLEdBQUM3SyxDQUFDLENBQUMsK0NBQStDLENBQUMsQ0FBQzhLLElBQUksQ0FBQyxDQUFDO0lBQ3RFLElBQUk3QixNQUFNLEdBQUM4QixRQUFRLENBQUM5QixNQUFNLENBQUM0QixRQUFRLEVBQUNRLFdBQVcsQ0FBQztJQUNoRHJMLENBQUMsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDeUIsTUFBTSxDQUFDd0gsTUFBTSxDQUFDO0lBQ3ZDcEosSUFBSSxDQUFDb0wsc0JBQXNCLENBQUMsQ0FBQztJQUM3QjVJLEtBQUssQ0FBQzZJLFlBQVksQ0FBQyxLQUFLLENBQUM7SUFDekI3SSxLQUFLLENBQUNqRCxNQUFNLENBQUM7TUFBRWtELEtBQUssRUFBRSwyQkFBMkI7TUFBRUMsT0FBTyxFQUFFOEksV0FBVyxDQUFDbEgsSUFBSSxHQUFDLGdDQUFnQztNQUFFM0IsTUFBTSxFQUFFQyxZQUFZLENBQUNlLE9BQU87TUFBRWIsT0FBTyxFQUFFO0lBQUssQ0FBQyxDQUFDO0VBQ2pLLENBQUM7RUFHRCxJQUFJLENBQUM1QyxTQUFTLENBQUNuQyxPQUFPLEVBQUNjLFlBQVksQ0FBQztBQUN4QyxDQUFDIiwiaWdub3JlTGlzdCI6W10sImZpbGUiOiIuL3Jlc291cmNlcy9qcy9hZG1pbi9zdXBwbGllci5qcyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./resources/js/admin/supplier.js\n\n}"); /***/ } diff --git a/public/js/module.js b/public/js/module.js index e60ab20..5e4ed96 100644 --- a/public/js/module.js +++ b/public/js/module.js @@ -15,7 +15,7 @@ \*********************************************/ () { -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 _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\"); }\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 _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, 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); }\nvar ModuleBase = /*#__PURE__*/function () {\n function ModuleBase(options, data) {\n _classCallCheck(this, ModuleBase);\n _defineProperty(this, \"Opts\", {\n testMode: false,\n CSSSelectorContainer: '',\n CSSSelectorForm: '',\n token: null,\n URL: {\n getDataTableContent: null,\n checkReadyToSend: null,\n index: null,\n show: null,\n edit: null,\n create: null,\n store: null,\n update: null,\n destroy: null\n },\n dataTable: {\n orderDirective: [1, 'asc'],\n CSSSelector: null,\n advanceSearchParameter: {}\n }\n });\n _defineProperty(this, \"data\", null);\n _defineProperty(this, \"root\", this);\n this.Opts.CSSSelectorContainer = '.container' + this.constructor.name;\n this.Opts.CSSSelectorForm = '.' + this.constructor.name + 'Form';\n this.Opts.dataTable.CSSSelector = this.Opts.CSSSelectorContainer + ' .dataTable';\n this.root = this;\n if (data !== \"undefined\" || data != null) {\n this.data = data;\n }\n if (options != null) {\n $.extend(this.Opts, options);\n }\n }\n return _createClass(ModuleBase, [{\n key: \"init\",\n value: function init(options, data) {\n if (data !== \"undefined\" || data != null) {\n this.data = data;\n }\n if (options != null) {\n $.extend(this.Opts, options);\n }\n }\n }, {\n key: \"datatableRowActionButtonClick\",\n value: function datatableRowActionButtonClick(event, rootObj, options) {\n debug('call ModuleBase.datatableRowActionButtonClick');\n debug(rootObj);\n var node = $(event[0].currentTarget);\n var row = $(rootObj.Opts.dataTable.CSSSelector).DataTable().row(node.parents('tr'));\n var rowData = row.data();\n var actionName = 'datatableRowAction' + node.data('buttontype').capitalize();\n if (typeof rootObj[actionName] === \"function\") {\n return rootObj[actionName](rowData, node);\n }\n }\n }, {\n key: \"datatableRowActionAttachment\",\n value: function datatableRowActionAttachment(rowData, node, options) {\n debug('call ModuleBase.datatableRowActionAttachment ');\n var fileName = 'downloadedFile';\n if (typeof options.defaultFileName !== \"undefined\") {\n fileName = options.defaultFileName;\n }\n if (rowData.fileUrl) {\n if (rowData.fileName) {\n fileName = rowData.fileName;\n }\n $.ajax({\n url: rowData.fileUrl,\n method: 'GET',\n xhrFields: {\n responseType: 'blob'\n },\n success: function success(data) {\n var a = document.createElement('a');\n var url = window.URL.createObjectURL(data);\n a.href = url;\n a.download = fileName;\n document.body.append(a);\n a.click();\n a.remove();\n window.URL.revokeObjectURL(url);\n }\n });\n } else {\n Toast.create(\"Hiba!\", 'Nincs csatolt fájl!', TOAST_STATUS.DANGER, 10000);\n }\n }\n }, {\n key: \"datatableRowActionView\",\n value: function datatableRowActionView(rowData, node, rootObj, options) {\n debug('call ModuleBase.datatableRowActionView');\n var ajaxUrl = rootObj.Opts.URL.show.replace('%id%', rowData.id);\n /*\r\n console.log(Opts.URL);\r\n */\n console.log(ajaxUrl);\n APP.loadMainContent(ajaxUrl, rootObj.initViewShow);\n console.log('ModuleBase.datatableRowActionEdit End');\n }\n }]);\n}();\nwindow.ModuleBase = ModuleBase;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJNb2R1bGVCYXNlIiwib3B0aW9ucyIsImRhdGEiLCJfY2xhc3NDYWxsQ2hlY2siLCJfZGVmaW5lUHJvcGVydHkiLCJ0ZXN0TW9kZSIsIkNTU1NlbGVjdG9yQ29udGFpbmVyIiwiQ1NTU2VsZWN0b3JGb3JtIiwidG9rZW4iLCJVUkwiLCJnZXREYXRhVGFibGVDb250ZW50IiwiY2hlY2tSZWFkeVRvU2VuZCIsImluZGV4Iiwic2hvdyIsImVkaXQiLCJjcmVhdGUiLCJzdG9yZSIsInVwZGF0ZSIsImRlc3Ryb3kiLCJkYXRhVGFibGUiLCJvcmRlckRpcmVjdGl2ZSIsIkNTU1NlbGVjdG9yIiwiYWR2YW5jZVNlYXJjaFBhcmFtZXRlciIsIk9wdHMiLCJjb25zdHJ1Y3RvciIsIm5hbWUiLCJyb290IiwiJCIsImV4dGVuZCIsIl9jcmVhdGVDbGFzcyIsImtleSIsInZhbHVlIiwiaW5pdCIsImRhdGF0YWJsZVJvd0FjdGlvbkJ1dHRvbkNsaWNrIiwiZXZlbnQiLCJyb290T2JqIiwiZGVidWciLCJub2RlIiwiY3VycmVudFRhcmdldCIsInJvdyIsIkRhdGFUYWJsZSIsInBhcmVudHMiLCJyb3dEYXRhIiwiYWN0aW9uTmFtZSIsImNhcGl0YWxpemUiLCJkYXRhdGFibGVSb3dBY3Rpb25BdHRhY2htZW50IiwiZmlsZU5hbWUiLCJkZWZhdWx0RmlsZU5hbWUiLCJmaWxlVXJsIiwiYWpheCIsInVybCIsIm1ldGhvZCIsInhockZpZWxkcyIsInJlc3BvbnNlVHlwZSIsInN1Y2Nlc3MiLCJhIiwiZG9jdW1lbnQiLCJjcmVhdGVFbGVtZW50Iiwid2luZG93IiwiY3JlYXRlT2JqZWN0VVJMIiwiaHJlZiIsImRvd25sb2FkIiwiYm9keSIsImFwcGVuZCIsImNsaWNrIiwicmVtb3ZlIiwicmV2b2tlT2JqZWN0VVJMIiwiVG9hc3QiLCJUT0FTVF9TVEFUVVMiLCJEQU5HRVIiLCJkYXRhdGFibGVSb3dBY3Rpb25WaWV3IiwiYWpheFVybCIsInJlcGxhY2UiLCJpZCIsImNvbnNvbGUiLCJsb2ciLCJBUFAiLCJsb2FkTWFpbkNvbnRlbnQiLCJpbml0Vmlld1Nob3ciXSwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2pzL21vZHVsZUpzL21vZHVsZUJhc2UuanM/YzIwYiJdLCJzb3VyY2VzQ29udGVudCI6WyJjbGFzcyBNb2R1bGVCYXNlIHtcclxuICAgIE9wdHMgPSB7XHJcbiAgICAgICAgdGVzdE1vZGU6IGZhbHNlLFxyXG4gICAgICAgIENTU1NlbGVjdG9yQ29udGFpbmVyOiAnJyxcclxuICAgICAgICBDU1NTZWxlY3RvckZvcm06ICcnLFxyXG4gICAgICAgIHRva2VuOiBudWxsLFxyXG4gICAgICAgIFVSTDoge1xyXG4gICAgICAgICAgICBnZXREYXRhVGFibGVDb250ZW50OiBudWxsLFxyXG4gICAgICAgICAgICBjaGVja1JlYWR5VG9TZW5kOiBudWxsLFxyXG4gICAgICAgICAgICBpbmRleDogbnVsbCxcclxuICAgICAgICAgICAgc2hvdzogbnVsbCxcclxuICAgICAgICAgICAgZWRpdDogbnVsbCxcclxuICAgICAgICAgICAgY3JlYXRlOiBudWxsLFxyXG4gICAgICAgICAgICBzdG9yZTogbnVsbCxcclxuICAgICAgICAgICAgdXBkYXRlOiBudWxsLFxyXG4gICAgICAgICAgICBkZXN0cm95OiBudWxsLFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZGF0YVRhYmxlOiB7XHJcbiAgICAgICAgICAgIG9yZGVyRGlyZWN0aXZlOiBbMSwgJ2FzYyddLFxyXG4gICAgICAgICAgICBDU1NTZWxlY3RvcjogbnVsbCxcclxuICAgICAgICAgICAgYWR2YW5jZVNlYXJjaFBhcmFtZXRlcjp7fVxyXG4gICAgICAgIH0sXHJcbiAgICB9O1xyXG4gICAgZGF0YSA9IG51bGw7XHJcbiAgICByb290ID0gdGhpcztcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zLCBkYXRhKSB7XHJcbiAgICAgICAgdGhpcy5PcHRzLkNTU1NlbGVjdG9yQ29udGFpbmVyID0gJy5jb250YWluZXInICsgdGhpcy5jb25zdHJ1Y3Rvci5uYW1lO1xyXG4gICAgICAgIHRoaXMuT3B0cy5DU1NTZWxlY3RvckZvcm0gPSAnLicgKyB0aGlzLmNvbnN0cnVjdG9yLm5hbWUgKyAnRm9ybSc7XHJcbiAgICAgICAgdGhpcy5PcHRzLmRhdGFUYWJsZS5DU1NTZWxlY3RvciA9IHRoaXMuT3B0cy5DU1NTZWxlY3RvckNvbnRhaW5lciArICcgLmRhdGFUYWJsZSc7XHJcbiAgICAgICAgdGhpcy5yb290ID0gdGhpcztcclxuICAgICAgICBpZiAoZGF0YSAhPT0gXCJ1bmRlZmluZWRcIiB8fCBkYXRhICE9IG51bGwpIHtcclxuICAgICAgICAgICAgdGhpcy5kYXRhID0gZGF0YTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG9wdGlvbnMgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAkLmV4dGVuZCh0aGlzLk9wdHMsIG9wdGlvbnMpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpbml0KG9wdGlvbnMsIGRhdGEpIHtcclxuICAgICAgICBpZiAoZGF0YSAhPT0gXCJ1bmRlZmluZWRcIiB8fCBkYXRhICE9IG51bGwpIHtcclxuICAgICAgICAgICAgdGhpcy5kYXRhID0gZGF0YTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG9wdGlvbnMgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAkLmV4dGVuZCh0aGlzLk9wdHMsIG9wdGlvbnMpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBkYXRhdGFibGVSb3dBY3Rpb25CdXR0b25DbGljayhldmVudCxyb290T2JqLG9wdGlvbnMpIHtcclxuICAgICAgICBkZWJ1ZygnY2FsbCBNb2R1bGVCYXNlLmRhdGF0YWJsZVJvd0FjdGlvbkJ1dHRvbkNsaWNrJyk7XHJcbiAgICAgICAgZGVidWcocm9vdE9iaik7XHJcbiAgICAgICAgbGV0IG5vZGUgPSAkKGV2ZW50WzBdLmN1cnJlbnRUYXJnZXQpO1xyXG4gICAgICAgIGxldCByb3cgPSAkKHJvb3RPYmouT3B0cy5kYXRhVGFibGUuQ1NTU2VsZWN0b3IpLkRhdGFUYWJsZSgpLnJvdyhub2RlLnBhcmVudHMoJ3RyJykpO1xyXG4gICAgICAgIGxldCByb3dEYXRhID0gcm93LmRhdGEoKTtcclxuICAgICAgICBsZXQgYWN0aW9uTmFtZSA9ICdkYXRhdGFibGVSb3dBY3Rpb24nICsgbm9kZS5kYXRhKCdidXR0b250eXBlJykuY2FwaXRhbGl6ZSgpO1xyXG4gICAgICAgIGlmICh0eXBlb2Ygcm9vdE9ialthY3Rpb25OYW1lXSA9PT0gXCJmdW5jdGlvblwiKSB7XHJcbiAgICAgICAgICAgIHJldHVybiByb290T2JqW2FjdGlvbk5hbWVdKHJvd0RhdGEsIG5vZGUpXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGRhdGF0YWJsZVJvd0FjdGlvbkF0dGFjaG1lbnQocm93RGF0YSxub2RlLG9wdGlvbnMpIHtcclxuICAgICAgICBkZWJ1ZygnY2FsbCBNb2R1bGVCYXNlLmRhdGF0YWJsZVJvd0FjdGlvbkF0dGFjaG1lbnQgJyk7XHJcbiAgICAgICAgbGV0IGZpbGVOYW1lPSdkb3dubG9hZGVkRmlsZSc7XHJcbiAgICAgICAgaWYodHlwZW9mIG9wdGlvbnMuZGVmYXVsdEZpbGVOYW1lIT09IFwidW5kZWZpbmVkXCIpe1xyXG4gICAgICAgICAgICBmaWxlTmFtZT1vcHRpb25zLmRlZmF1bHRGaWxlTmFtZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYocm93RGF0YS5maWxlVXJsKXtcclxuICAgICAgICAgICAgaWYocm93RGF0YS5maWxlTmFtZSl7XHJcbiAgICAgICAgICAgICAgICBmaWxlTmFtZT1yb3dEYXRhLmZpbGVOYW1lO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICQuYWpheCh7XHJcbiAgICAgICAgICAgICAgICB1cmw6IHJvd0RhdGEuZmlsZVVybCxcclxuICAgICAgICAgICAgICAgIG1ldGhvZDogJ0dFVCcsXHJcbiAgICAgICAgICAgICAgICB4aHJGaWVsZHM6IHtcclxuICAgICAgICAgICAgICAgICAgICByZXNwb25zZVR5cGU6ICdibG9iJ1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uIChkYXRhKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHVybCA9IHdpbmRvdy5VUkwuY3JlYXRlT2JqZWN0VVJMKGRhdGEpO1xyXG4gICAgICAgICAgICAgICAgICAgIGEuaHJlZiA9IHVybDtcclxuICAgICAgICAgICAgICAgICAgICBhLmRvd25sb2FkID0gZmlsZU5hbWU7XHJcbiAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmQoYSk7XHJcbiAgICAgICAgICAgICAgICAgICAgYS5jbGljaygpO1xyXG4gICAgICAgICAgICAgICAgICAgIGEucmVtb3ZlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgd2luZG93LlVSTC5yZXZva2VPYmplY3RVUkwodXJsKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICBUb2FzdC5jcmVhdGUoXCJIaWJhIVwiLCAnTmluY3MgY3NhdG9sdCBmw6FqbCEnLCBUT0FTVF9TVEFUVVMuREFOR0VSLCAxMDAwMCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBkYXRhdGFibGVSb3dBY3Rpb25WaWV3KHJvd0RhdGEsbm9kZSxyb290T2JqLG9wdGlvbnMpIHtcclxuICAgICAgICBkZWJ1ZygnY2FsbCBNb2R1bGVCYXNlLmRhdGF0YWJsZVJvd0FjdGlvblZpZXcnKTtcclxuICAgICAgICBsZXQgYWpheFVybCA9IHJvb3RPYmouT3B0cy5VUkwuc2hvdy5yZXBsYWNlKCclaWQlJywgcm93RGF0YS5pZCk7XHJcbiAgICAgICAgLypcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKE9wdHMuVVJMKTtcclxuICAgICAgICAqL1xyXG4gICAgICAgIGNvbnNvbGUubG9nKGFqYXhVcmwpO1xyXG4gICAgICAgIEFQUC5sb2FkTWFpbkNvbnRlbnQoYWpheFVybCwgcm9vdE9iai5pbml0Vmlld1Nob3cpO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCdNb2R1bGVCYXNlLmRhdGF0YWJsZVJvd0FjdGlvbkVkaXQgRW5kJyk7XHJcbiAgICB9XHJcblxyXG59XHJcbndpbmRvdy5Nb2R1bGVCYXNlPU1vZHVsZUJhc2U7XHJcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztJQUFNQSxVQUFVO0VBMEJaLFNBQUFBLFdBQVlDLE9BQU8sRUFBRUMsSUFBSSxFQUFFO0lBQUFDLGVBQUEsT0FBQUgsVUFBQTtJQUFBSSxlQUFBLGVBekJwQjtNQUNIQyxRQUFRLEVBQUUsS0FBSztNQUNmQyxvQkFBb0IsRUFBRSxFQUFFO01BQ3hCQyxlQUFlLEVBQUUsRUFBRTtNQUNuQkMsS0FBSyxFQUFFLElBQUk7TUFDWEMsR0FBRyxFQUFFO1FBQ0RDLG1CQUFtQixFQUFFLElBQUk7UUFDekJDLGdCQUFnQixFQUFFLElBQUk7UUFDdEJDLEtBQUssRUFBRSxJQUFJO1FBQ1hDLElBQUksRUFBRSxJQUFJO1FBQ1ZDLElBQUksRUFBRSxJQUFJO1FBQ1ZDLE1BQU0sRUFBRSxJQUFJO1FBQ1pDLEtBQUssRUFBRSxJQUFJO1FBQ1hDLE1BQU0sRUFBRSxJQUFJO1FBQ1pDLE9BQU8sRUFBRTtNQUNiLENBQUM7TUFDREMsU0FBUyxFQUFFO1FBQ1BDLGNBQWMsRUFBRSxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUM7UUFDMUJDLFdBQVcsRUFBRSxJQUFJO1FBQ2pCQyxzQkFBc0IsRUFBQyxDQUFDO01BQzVCO0lBQ0osQ0FBQztJQUFBbEIsZUFBQSxlQUNNLElBQUk7SUFBQUEsZUFBQSxlQUNKLElBQUk7SUFHUCxJQUFJLENBQUNtQixJQUFJLENBQUNqQixvQkFBb0IsR0FBRyxZQUFZLEdBQUcsSUFBSSxDQUFD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QUU7VUFDbEIsQ0FBQztVQUNEQyxPQUFPLEVBQUUsU0FBVEEsT0FBT0EsQ0FBWXBELElBQUksRUFBRTtZQUNyQixJQUFJcUQsQ0FBQyxHQUFHQyxRQUFRLENBQUNDLGFBQWEsQ0FBQyxHQUFHLENBQUM7WUFDbkMsSUFBSVAsR0FBRyxHQUFHUSxNQUFNLENBQUNqRCxHQUFHLENBQUNrRCxlQUFlLENBQUN6RCxJQUFJLENBQUM7WUFDMUNxRCxDQUFDLENBQUNLLElBQUksR0FBR1YsR0FBRztZQUNaSyxDQUFDLENBQUNNLFFBQVEsR0FBR2YsUUFBUTtZQUNyQlUsUUFBUSxDQUFDTSxJQUFJLENBQUNDLE1BQU0sQ0FBQ1IsQ0FBQyxDQUFDO1lBQ3ZCQSxDQUFDLENBQUNTLEtBQUssQ0FBQyxDQUFDO1lBQ1RULENBQUMsQ0FBQ1UsTUFBTSxDQUFDLENBQUM7WUFDVlAsTUFBTSxDQUFDakQsR0FBRyxDQUFDeUQsZUFBZSxDQUFDaEIsR0FBRyxDQUFDO1VBQ25DO1FBQ0osQ0FBQyxDQUFDO01BRU4sQ0FBQyxNQUFJO1FBQ0RpQixLQUFLLENBQUNwRCxNQUFNLENBQUMsT0FBTyxFQUFFLHFCQUFxQixFQUFFcUQsWUFBWSxDQUFDQyxNQUFNLEVBQUUsS0FBSyxDQUFDO01BQzVFO0lBRUo7RUFBQztJQUFBdkMsR0FBQTtJQUFBQyxLQUFBLEVBRUQsU0FBQXVDLHNCQUFzQkEsQ0FBQzVCLE9BQU8sRUFBQ0wsSUFBSSxFQUFDRixPQUFPLEVBQUNsQyxPQUFPLEVBQUU7TUFDakRtQyxLQUFLLENBQUMsd0NBQXdDLENBQUM7TUFDL0MsSUFBSW1DLE9BQU8sR0FBR3BDLE9BQU8sQ0FBQ1osSUFBSSxDQUFDZCxHQUFHLENBQUNJLElBQUksQ0FBQzJELE9BQU8sQ0FBQyxNQUFNLEVBQUU5QixPQUFPLENBQUMrQixFQUFFLENBQUM7TUFDL0Q7QUFDUjtBQUNBO01BQ1FDLE9BQU8sQ0FBQ0MsR0FBRyxDQUFDSixPQUFPLENBQUM7TUFDcEJLLEdBQUcsQ0FBQ0MsZUFBZSxDQUFDTixPQUFPLEVBQUVwQyxPQUFPLENBQUMyQyxZQUFZLENBQUM7TUFDbERKLE9BQU8sQ0FBQ0MsR0FBRyxDQUFDLHVDQUF1QyxDQUFDO0lBQ3hEO0VBQUM7QUFBQTtBQUdMakIsTUFBTSxDQUFDMUQsVUFBVSxHQUFDQSxVQUFVIiwiaWdub3JlTGlzdCI6W10sImZpbGUiOiIuL3Jlc291cmNlcy9qcy9tb2R1bGVKcy9tb2R1bGVCYXNlLmpzIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./resources/js/moduleJs/moduleBase.js\n\n}"); +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 _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\"); }\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 _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, 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); }\nvar ModuleBase = /*#__PURE__*/function () {\n function ModuleBase(options, data) {\n _classCallCheck(this, ModuleBase);\n _defineProperty(this, \"Opts\", {\n testMode: false,\n CSSSelectorContainer: '',\n CSSSelectorForm: '',\n token: null,\n URL: {\n getDataTableContent: null,\n checkReadyToSend: null,\n index: null,\n show: null,\n edit: null,\n create: null,\n store: null,\n update: null,\n destroy: null\n },\n dataTable: {\n orderDirective: [1, 'asc'],\n CSSSelector: null,\n advanceSearchParameter: {}\n }\n });\n _defineProperty(this, \"data\", null);\n _defineProperty(this, \"root\", this);\n this.Opts.CSSSelectorContainer = '.container' + this.constructor.name;\n this.Opts.CSSSelectorForm = '.' + this.constructor.name + 'Form';\n this.Opts.dataTable.CSSSelector = this.Opts.CSSSelectorContainer + ' .dataTable';\n this.root = this;\n if (data !== \"undefined\" || data != null) {\n this.data = data;\n }\n if (options != null) {\n $.extend(this.Opts, options);\n }\n }\n return _createClass(ModuleBase, [{\n key: \"init\",\n value: function init(options, data) {\n if (data !== \"undefined\" || data != null) {\n this.data = data;\n }\n if (options != null) {\n $.extend(this.Opts, options);\n }\n }\n }, {\n key: \"datatableRowActionButtonClick\",\n value: function datatableRowActionButtonClick(event, rootObj, options) {\n debug('call ModuleBase.datatableRowActionButtonClick');\n debug(rootObj);\n var node = $(event[0].currentTarget);\n var row = $(rootObj.Opts.dataTable.CSSSelector).DataTable().row(node.parents('tr'));\n var rowData = row.data();\n var actionName = 'datatableRowAction' + node.data('buttontype').capitalize();\n if (typeof rootObj[actionName] === \"function\") {\n return rootObj[actionName](rowData, node);\n }\n }\n }, {\n key: \"datatableRowActionAttachment\",\n value: function datatableRowActionAttachment(rowData, node, options) {\n debug('call ModuleBase.datatableRowActionAttachment ');\n var fileName = 'downloadedFile';\n if (typeof options.defaultFileName !== \"undefined\") {\n fileName = options.defaultFileName;\n }\n if (rowData.fileUrl) {\n if (rowData.fileName) {\n fileName = rowData.fileName;\n }\n $.ajax({\n url: rowData.fileUrl,\n method: 'GET',\n xhrFields: {\n responseType: 'blob'\n },\n success: function success(data) {\n var a = document.createElement('a');\n var url = window.URL.createObjectURL(data);\n a.href = url;\n a.download = fileName;\n document.body.append(a);\n a.click();\n a.remove();\n window.URL.revokeObjectURL(url);\n }\n });\n } else {\n Toast.create({\n title: \"Hiba!\",\n message: 'Nincs csatolt fájl!',\n status: TOAST_STATUS.DANGER,\n timeout: 10000\n });\n }\n }\n }, {\n key: \"datatableRowActionView\",\n value: function datatableRowActionView(rowData, node, rootObj, options) {\n debug('call ModuleBase.datatableRowActionView');\n var ajaxUrl = rootObj.Opts.URL.show.replace('%id%', rowData.id);\n /*\r\n console.log(Opts.URL);\r\n */\n console.log(ajaxUrl);\n APP.loadMainContent(ajaxUrl, rootObj.initViewShow);\n console.log('ModuleBase.datatableRowActionEdit End');\n }\n }]);\n}();\nwindow.ModuleBase = ModuleBase;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJNb2R1bGVCYXNlIiwib3B0aW9ucyIsImRhdGEiLCJfY2xhc3NDYWxsQ2hlY2siLCJfZGVmaW5lUHJvcGVydHkiLCJ0ZXN0TW9kZSIsIkNTU1NlbGVjdG9yQ29udGFpbmVyIiwiQ1NTU2VsZWN0b3JGb3JtIiwidG9rZW4iLCJVUkwiLCJnZXREYXRhVGFibGVDb250ZW50IiwiY2hlY2tSZWFkeVRvU2VuZCIsImluZGV4Iiwic2hvdyIsImVkaXQiLCJjcmVhdGUiLCJzdG9yZSIsInVwZGF0ZSIsImRlc3Ryb3kiLCJkYXRhVGFibGUiLCJvcmRlckRpcmVjdGl2ZSIsIkNTU1NlbGVjdG9yIiwiYWR2YW5jZVNlYXJjaFBhcmFtZXRlciIsIk9wdHMiLCJjb25zdHJ1Y3RvciIsIm5hbWUiLCJyb290IiwiJCIsImV4dGVuZCIsIl9jcmVhdGVDbGFzcyIsImtleSIsInZhbHVlIiwiaW5pdCIsImRhdGF0YWJsZVJvd0FjdGlvbkJ1dHRvbkNsaWNrIiwiZXZlbnQiLCJyb290T2JqIiwiZGVidWciLCJub2RlIiwiY3VycmVudFRhcmdldCIsInJvdyIsIkRhdGFUYWJsZSIsInBhcmVudHMiLCJyb3dEYXRhIiwiYWN0aW9uTmFtZSIsImNhcGl0YWxpemUiLCJkYXRhdGFibGVSb3dBY3Rpb25BdHRhY2htZW50IiwiZmlsZU5hbWUiLCJkZWZhdWx0RmlsZU5hbWUiLCJmaWxlVXJsIiwiYWpheCIsInVybCIsIm1ldGhvZCIsInhockZpZWxkcyIsInJlc3BvbnNlVHlwZSIsInN1Y2Nlc3MiLCJhIiwiZG9jdW1lbnQiLCJjcmVhdGVFbGVtZW50Iiwid2luZG93IiwiY3JlYXRlT2JqZWN0VVJMIiwiaHJlZiIsImRvd25sb2FkIiwiYm9keSIsImFwcGVuZCIsImNsaWNrIiwicmVtb3ZlIiwicmV2b2tlT2JqZWN0VVJMIiwiVG9hc3QiLCJ0aXRsZSIsIm1lc3NhZ2UiLCJzdGF0dXMiLCJUT0FTVF9TVEFUVVMiLCJEQU5HRVIiLCJ0aW1lb3V0IiwiZGF0YXRhYmxlUm93QWN0aW9uVmlldyIsImFqYXhVcmwiLCJyZXBsYWNlIiwiaWQiLCJjb25zb2xlIiwibG9nIiwiQVBQIiwibG9hZE1haW5Db250ZW50IiwiaW5pdFZpZXdTaG93Il0sInNvdXJjZXMiOlsid2VicGFjazovLy8uL3Jlc291cmNlcy9qcy9tb2R1bGVKcy9tb2R1bGVCYXNlLmpzP2MyMGIiXSwic291cmNlc0NvbnRlbnQiOlsiY2xhc3MgTW9kdWxlQmFzZSB7XHJcbiAgICBPcHRzID0ge1xyXG4gICAgICAgIHRlc3RNb2RlOiBmYWxzZSxcclxuICAgICAgICBDU1NTZWxlY3RvckNvbnRhaW5lcjogJycsXHJcbiAgICAgICAgQ1NTU2VsZWN0b3JGb3JtOiAnJyxcclxuICAgICAgICB0b2tlbjogbnVsbCxcclxuICAgICAgICBVUkw6IHtcclxuICAgICAgICAgICAgZ2V0RGF0YVRhYmxlQ29udGVudDogbnVsbCxcclxuICAgICAgICAgICAgY2hlY2tSZWFkeVRvU2VuZDogbnVsbCxcclxuICAgICAgICAgICAgaW5kZXg6IG51bGwsXHJcbiAgICAgICAgICAgIHNob3c6IG51bGwsXHJcbiAgICAgICAgICAgIGVkaXQ6IG51bGwsXHJcbiAgICAgICAgICAgIGNyZWF0ZTogbnVsbCxcclxuICAgICAgICAgICAgc3RvcmU6IG51bGwsXHJcbiAgICAgICAgICAgIHVwZGF0ZTogbnVsbCxcclxuICAgICAgICAgICAgZGVzdHJveTogbnVsbCxcclxuICAgICAgICB9LFxyXG4gICAgICAgIGRhdGFUYWJsZToge1xyXG4gICAgICAgICAgICBvcmRlckRpcmVjdGl2ZTogWzEsICdhc2MnXSxcclxuICAgICAgICAgICAgQ1NTU2VsZWN0b3I6IG51bGwsXHJcbiAgICAgICAgICAgIGFkdmFuY2VTZWFyY2hQYXJhbWV0ZXI6e31cclxuICAgICAgICB9LFxyXG4gICAgfTtcclxuICAgIGRhdGEgPSBudWxsO1xyXG4gICAgcm9vdCA9IHRoaXM7XHJcblxyXG4gICAgY29uc3RydWN0b3Iob3B0aW9ucywgZGF0YSkge1xyXG4gICAgICAgIHRoaXMuT3B0cy5DU1NTZWxlY3RvckNvbnRhaW5lciA9ICcuY29udGFpbmVyJyArIHRoaXMuY29uc3RydWN0b3IubmFtZTtcclxuICAgICAgICB0aGlzLk9wdHMuQ1NTU2VsZWN0b3JGb3JtID0gJy4nICsgdGhpcy5jb25zdHJ1Y3Rvci5uYW1lICsgJ0Zvcm0nO1xyXG4gICAgICAgIHRoaXMuT3B0cy5kYXRhVGFibGUuQ1NTU2VsZWN0b3IgPSB0aGlzLk9wdHMuQ1NTU2VsZWN0b3JDb250YWluZXIgKyAnIC5kYXRhVGFibGUnO1xyXG4gICAgICAgIHRoaXMucm9vdCA9IHRoaXM7XHJcbiAgICAgICAgaWYgKGRhdGEgIT09IFwidW5kZWZpbmVkXCIgfHwgZGF0YSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZGF0YSA9IGRhdGE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChvcHRpb25zICE9IG51bGwpIHtcclxuICAgICAgICAgICAgJC5leHRlbmQodGhpcy5PcHRzLCBvcHRpb25zKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaW5pdChvcHRpb25zLCBkYXRhKSB7XHJcbiAgICAgICAgaWYgKGRhdGEgIT09IFwidW5kZWZpbmVkXCIgfHwgZGF0YSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZGF0YSA9IGRhdGE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChvcHRpb25zICE9IG51bGwpIHtcclxuICAgICAgICAgICAgJC5leHRlbmQodGhpcy5PcHRzLCBvcHRpb25zKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZGF0YXRhYmxlUm93QWN0aW9uQnV0dG9uQ2xpY2soZXZlbnQscm9vdE9iaixvcHRpb25zKSB7XHJcbiAgICAgICAgZGVidWcoJ2NhbGwgTW9kdWxlQmFzZS5kYXRhdGFibGVSb3dBY3Rpb25CdXR0b25DbGljaycpO1xyXG4gICAgICAgIGRlYnVnKHJvb3RPYmopO1xyXG4gICAgICAgIGxldCBub2RlID0gJChldmVudFswXS5jdXJyZW50VGFyZ2V0KTtcclxuICAgICAgICBsZXQgcm93ID0gJChyb290T2JqLk9wdHMuZGF0YVRhYmxlLkNTU1NlbGVjdG9yKS5EYXRhVGFibGUoKS5yb3cobm9kZS5wYXJlbnRzKCd0cicpKTtcclxuICAgICAgICBsZXQgcm93RGF0YSA9IHJvdy5kYXRhKCk7XHJcbiAgICAgICAgbGV0IGFjdGlvbk5hbWUgPSAnZGF0YXRhYmxlUm93QWN0aW9uJyArIG5vZGUuZGF0YSgnYnV0dG9udHlwZScpLmNhcGl0YWxpemUoKTtcclxuICAgICAgICBpZiAodHlwZW9mIHJvb3RPYmpbYWN0aW9uTmFtZV0gPT09IFwiZnVuY3Rpb25cIikge1xyXG4gICAgICAgICAgICByZXR1cm4gcm9vdE9ialthY3Rpb25OYW1lXShyb3dEYXRhLCBub2RlKVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBkYXRhdGFibGVSb3dBY3Rpb25BdHRhY2htZW50KHJvd0RhdGEsbm9kZSxvcHRpb25zKSB7XHJcbiAgICAgICAgZGVidWcoJ2NhbGwgTW9kdWxlQmFzZS5kYXRhdGFibGVSb3dBY3Rpb25BdHRhY2htZW50ICcpO1xyXG4gICAgICAgIGxldCBmaWxlTmFtZT0nZG93bmxvYWRlZEZpbGUnO1xyXG4gICAgICAgIGlmKHR5cGVvZiBvcHRpb25zLmRlZmF1bHRGaWxlTmFtZSE9PSBcInVuZGVmaW5lZFwiKXtcclxuICAgICAgICAgICAgZmlsZU5hbWU9b3B0aW9ucy5kZWZhdWx0RmlsZU5hbWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmKHJvd0RhdGEuZmlsZVVybCl7XHJcbiAgICAgICAgICAgIGlmKHJvd0RhdGEuZmlsZU5hbWUpe1xyXG4gICAgICAgICAgICAgICAgZmlsZU5hbWU9cm93RGF0YS5maWxlTmFtZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAkLmFqYXgoe1xyXG4gICAgICAgICAgICAgICAgdXJsOiByb3dEYXRhLmZpbGVVcmwsXHJcbiAgICAgICAgICAgICAgICBtZXRob2Q6ICdHRVQnLFxyXG4gICAgICAgICAgICAgICAgeGhyRmllbGRzOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2VUeXBlOiAnYmxvYidcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbiAoZGF0YSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCB1cmwgPSB3aW5kb3cuVVJMLmNyZWF0ZU9iamVjdFVSTChkYXRhKTtcclxuICAgICAgICAgICAgICAgICAgICBhLmhyZWYgPSB1cmw7XHJcbiAgICAgICAgICAgICAgICAgICAgYS5kb3dubG9hZCA9IGZpbGVOYW1lO1xyXG4gICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kKGEpO1xyXG4gICAgICAgICAgICAgICAgICAgIGEuY2xpY2soKTtcclxuICAgICAgICAgICAgICAgICAgICBhLnJlbW92ZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIHdpbmRvdy5VUkwucmV2b2tlT2JqZWN0VVJMKHVybCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgVG9hc3QuY3JlYXRlKHsgdGl0bGU6IFwiSGliYSFcIiwgbWVzc2FnZTogJ05pbmNzIGNzYXRvbHQgZsOhamwhJywgc3RhdHVzOiBUT0FTVF9TVEFUVVMuREFOR0VSLCB0aW1lb3V0OiAxMDAwMCB9KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGRhdGF0YWJsZVJvd0FjdGlvblZpZXcocm93RGF0YSxub2RlLHJvb3RPYmosb3B0aW9ucykge1xyXG4gICAgICAgIGRlYnVnKCdjYWxsIE1vZHVsZUJhc2UuZGF0YXRhYmxlUm93QWN0aW9uVmlldycpO1xyXG4gICAgICAgIGxldCBhamF4VXJsID0gcm9vdE9iai5PcHRzLlVSTC5zaG93LnJlcGxhY2UoJyVpZCUnLCByb3dEYXRhLmlkKTtcclxuICAgICAgICAvKlxyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coT3B0cy5VUkwpO1xyXG4gICAgICAgICovXHJcbiAgICAgICAgY29uc29sZS5sb2coYWpheFVybCk7XHJcbiAgICAgICAgQVBQLmxvYWRNYWluQ29udGVudChhamF4VXJsLCByb290T2JqLmluaXRWaWV3U2hvdyk7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ01vZHVsZUJhc2UuZGF0YXRhYmxlUm93QWN0aW9uRWRpdCBFbmQnKTtcclxuICAgIH1cclxuXHJcbn1cclxud2luZG93Lk1vZHVsZUJhc2U9TW9kdWxlQmFzZTtcclxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0lBQU1BLFVBQVU7RUEwQlosU0FBQUEsV0FBWUMsT0FBTyxFQUFFQyxJQUFJLEVBQUU7SUFBQUMsZUFBQSxPQUFBSCxVQUFBO0lBQUFJLGVBQUEsZUF6QnBCO01BQ0hDLFFBQVEsRUFBRSxLQUFLO01BQ2ZDLG9CQUFvQixFQUFFLEVBQUU7TUFDeEJDLGVBQWUsRUFBRSxFQUFFO01BQ25CQyxLQUFLLEVBQUUsSUFBSTtNQUNYQyxHQUFHLEVBQUU7UUFDREMsbUJBQW1CLEVBQUUsSUFBSTtRQUN6QkMsZ0JBQWdCLEVBQUUsSUFBSTtRQUN0QkMsS0FBSyxFQUFFLElBQUk7UUFDWEMsSUFBSSxFQUFFLElBQUk7UUFDVkMsSUFBSSxFQUFFLElBQUk7UUFDVkMsTUFBTSxFQUFFLElBQUk7UUFDWkMsS0FBSyxFQUFFLElBQUk7UUFDWEMsTUFBTSxFQUFFLElBQUk7UUFDWkMsT0FBTyxFQUFFO01BQ2IsQ0FBQztNQUNEQyxTQUFTLEVBQUU7UUFDUEMsY0FBYyxFQUFFLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQztRQUMxQkMsV0FBVyxFQUFFLElBQUk7UUFDakJDLHNCQUFzQixFQUFDLENBQUM7TUFDNUI7SUFDSixDQUFDO0lBQUFsQixlQUFBLGVBQ00sSUFBSTtJQUFBQSxl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LEVBQUVSLE9BQU8sQ0FBQ00sT0FBTztVQUNwQkcsTUFBTSxFQUFFLEtBQUs7VUFDYkMsU0FBUyxFQUFFO1lBQ1BDLFlBQVksRUFBRTtVQUNsQixDQUFDO1VBQ0RDLE9BQU8sRUFBRSxTQUFUQSxPQUFPQSxDQUFZcEQsSUFBSSxFQUFFO1lBQ3JCLElBQUlxRCxDQUFDLEdBQUdDLFFBQVEsQ0FBQ0MsYUFBYSxDQUFDLEdBQUcsQ0FBQztZQUNuQyxJQUFJUCxHQUFHLEdBQUdRLE1BQU0sQ0FBQ2pELEdBQUcsQ0FBQ2tELGVBQWUsQ0FBQ3pELElBQUksQ0FBQztZQUMxQ3FELENBQUMsQ0FBQ0ssSUFBSSxHQUFHVixHQUFHO1lBQ1pLLENBQUMsQ0FBQ00sUUFBUSxHQUFHZixRQUFRO1lBQ3JCVSxRQUFRLENBQUNNLElBQUksQ0FBQ0MsTUFBTSxDQUFDUixDQUFDLENBQUM7WUFDdkJBLENBQUMsQ0FBQ1MsS0FBSyxDQUFDLENBQUM7WUFDVFQsQ0FBQyxDQUFDVSxNQUFNLENBQUMsQ0FBQztZQUNWUCxNQUFNLENBQUNqRCxHQUFHLENBQUN5RCxlQUFlLENBQUNoQixHQUFHLENBQUM7VUFDbkM7UUFDSixDQUFDLENBQUM7TUFFTixDQUFDLE1BQUk7UUFDRGlCLEtBQUssQ0FBQ3BELE1BQU0sQ0FBQztVQUFFcUQsS0FBSyxFQUFFLE9BQU87VUFBRUMsT0FBTyxFQUFFLHFCQUFxQjtVQUFFQyxNQUFNLEVBQUVDLFlBQVksQ0FBQ0MsTUFBTTtVQUFFQyxPQUFPLEVBQUU7UUFBTSxDQUFDLENBQUM7TUFDakg7SUFFSjtFQUFDO0lBQUEzQyxHQUFBO0lBQUFDLEtBQUEsRUFFRCxTQUFBMkMsc0JBQXNCQSxDQUFDaEMsT0FBTyxFQUFDTCxJQUFJLEVBQUNGLE9BQU8sRUFBQ2xDLE9BQU8sRUFBRTtNQUNqRG1DLEtBQUssQ0FBQyx3Q0FBd0MsQ0FBQztNQUMvQyxJQUFJdUMsT0FBTyxHQUFHeEMsT0FBTyxDQUFDWixJQUFJLENBQUNkLEdBQUcsQ0FBQ0ksSUFBSSxDQUFDK0QsT0FBTyxDQUFDLE1BQU0sRUFBRWxDLE9BQU8sQ0FBQ21DLEVBQUUsQ0FBQztNQUMvRDtBQUNSO0FBQ0E7TUFDUUMsT0FBTyxDQUFDQyxHQUFHLENBQUNKLE9BQU8sQ0FBQztNQUNwQkssR0FBRyxDQUFDQyxlQUFlLENBQUNOLE9BQU8sRUFBRXhDLE9BQU8sQ0FBQytDLFlBQVksQ0FBQztNQUNsREosT0FBTyxDQUFDQyxHQUFHLENBQUMsdUNBQXVDLENBQUM7SUFDeEQ7RUFBQztBQUFBO0FBR0xyQixNQUFNLENBQUMxRCxVQUFVLEdBQUNBLFVBQVUiLCJpZ25vcmVMaXN0IjpbXSwiZmlsZSI6Ii4vcmVzb3VyY2VzL2pzL21vZHVsZUpzL21vZHVsZUJhc2UuanMiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./resources/js/moduleJs/moduleBase.js\n\n}"); /***/ }, @@ -25,7 +25,7 @@ eval("{function _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"fun \****************************************/ () { -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); }\nwindow.OrderModulDefault = {\n actionFunction: function actionFunction() {}\n};\nvar DataModelOrder = /*#__PURE__*/function (_DataModel) {\n /*\r\n * Constructor\r\n */\n function DataModelOrder(data, options) {\n var _this;\n _classCallCheck(this, DataModelOrder);\n _this = _callSuper(this, DataModelOrder, [data, options]);\n if (typeof _this.productSelected === \"undefined\") {\n _this.productSelected = {};\n }\n if (typeof _this.productComment === \"undefined\") {\n _this.productComment = {};\n }\n console.log(_this.constructor.name + ' constructor called');\n return _this;\n }\n _inherits(DataModelOrder, _DataModel);\n return _createClass(DataModelOrder);\n}(DataModel);\n;\nwindow.DataModelOrder = DataModelOrder;\nwindow.Stepper = function () {\n /*\r\n * Variables accessible\r\n * in the class\r\n */\n var Opts = {\n complete: ['supplier'],\n available: ['supplier', 'parameter', 'productSelect', 'invoice', 'send'],\n enable: ['supplier', 'invoice'],\n load: [],\n excludeLoaded: ['invoice', 'send'],\n loaded: [],\n active: false,\n URL: {\n create: ''\n },\n UrlData: false,\n onAfterLoad: function onAfterLoad() {},\n onAfterActivate: function onAfterActivate() {},\n autoCallback: {\n 'invoice': {\n onAfterActivate: function onAfterActivate() {}\n },\n 'send': {\n onAfterActivate: function onAfterActivate() {}\n }\n },\n nowLoaded: false\n };\n var root = this;\n /*\r\n * Constructor\r\n */\n this.construct = function (options) {\n $.extend(Opts, options);\n };\n this.getOpts = function () {\n return Opts;\n };\n this.setOpts = function (options) {\n $.extend(Opts, options);\n };\n this.init = function (options) {\n $.extend(Opts, options);\n debug(Opts);\n $('.step').each(function () {\n var stepName = $(this).data('stepname');\n if (Opts.complete.includes(stepName)) {\n root.setCompleted(stepName);\n }\n if (Opts.enable.includes(stepName)) {\n root.setEnabled(stepName);\n }\n if (Opts.load.includes(stepName)) {\n root.loadStepContent(stepName);\n }\n if (Opts.active === stepName) {\n root.setActive(stepName);\n }\n });\n root.bindClickAction();\n };\n this.bindClickAction = function () {\n var stepClickButtons = $('.stepClick');\n stepClickButtons.off('click');\n stepClickButtons.on('click', root.stepClick);\n };\n this.setCompleted = function (stepName) {\n console.log(stepName + ' completed');\n $('.step[data-stepName=\"' + stepName + '\"]').addClass('completed');\n };\n this.unsetCompleted = function (stepName) {\n console.log(stepName + ' Uncompleted');\n $('.step[data-stepName=\"' + stepName + '\"]').removeClass('completed');\n Opts.complete = arrayRemove(Opts.complete, stepName);\n };\n this.unsetEnabled = function (stepName) {\n console.log(stepName + ' Un enabled');\n $('.click' + stepName).contents().unwrap();\n Opts.enable = arrayRemove(Opts.enable, stepName);\n };\n this.setEnabled = function (stepName) {\n console.log(stepName + ' enabled');\n var stepItem = $('.step[data-stepName=\"' + stepName + '\"]');\n stepItem.html('' + stepItem.html() + '');\n root.bindClickAction();\n //$('.stepClick').click(root.stepClick);\n };\n this.addEnabled = function (stepName) {\n if (!Opts.enable.includes(stepName)) {\n Opts.enable.push(stepName);\n }\n root.setEnabled(stepName);\n };\n this.addCompleted = function (stepName) {\n if (!Opts.complete.includes(stepName)) {\n Opts.complete.push(stepName);\n }\n root.setCompleted(stepName);\n root.bindClickAction();\n };\n this.loadStepContent = function (stepName) {\n var data = {\n 'type': stepName\n };\n $.extend(data, Opts.UrlData);\n $.ajax({\n async: true,\n type: \"GET\",\n url: Opts.URL.create,\n data: data,\n cache: false,\n success: function success(result) {\n var container = $('.SC' + stepName.capitalize());\n if ($.inArray(stepName, Opts.excludeLoaded) == -1) {\n Opts.loaded.push(stepName);\n } else {\n console.log('excluded View');\n }\n container.html(result);\n if (Opts.nowLoaded) {\n Opts.nowLoaded(stepName);\n }\n Opts.onAfterLoad();\n }\n });\n };\n this.clearLoaded = function () {\n Opts.loaded = ['supplier'];\n $('.stepContainer').each(function () {\n /*\r\n console.log(this.classList);\r\n console.log(this.classList.contains('SCSupplier'));\r\n console.log($(this).attr('class'));\r\n */\n if (!this.classList.contains('SCSupplier')) {\n $(this).html('');\n }\n });\n };\n this.setActiveFinish = function (stepName) {\n var container = $('.SC' + stepName.capitalize());\n if (stepName === 'productSelect') {\n $('.containerStepper').addClass('activeSideBar');\n } else {\n $('.containerStepper').removeClass('activeSideBar');\n }\n debug('setActiveFinish show:' + stepName);\n container.show();\n Opts.nowLoaded = false;\n root.active = stepName;\n Opts.onAfterActivate();\n if (typeof Opts.autoCallback[stepName] !== 'undefined') {\n Opts.autoCallback[stepName].onAfterActivate();\n }\n };\n this.setActive = function (stepName) {\n $('.stepContainer').hide();\n if (!Opts.loaded.includes(stepName)) {\n root.loadStepContent(stepName);\n Opts.nowLoaded = this.setActiveFinish;\n } else {\n this.setActiveFinish(stepName);\n }\n };\n this.stepClick = function (event) {\n event.preventDefault();\n var stepName = $(event.currentTarget).data('stepname');\n console.log('setActive:' + stepName);\n root.setActive(stepName);\n };\n};\nwindow.OrderModule = function () {\n /*\r\n * Variables accessible\r\n * in the class\r\n */\n var Opts = {\n testMode: false,\n needStepper: true,\n CSSSelectorForm: '.orderParameterForm',\n defaultDeliveryDate: '',\n dataSyncPauseTime: 500,\n token: null,\n URL: {\n root: null,\n getDataTableContentProductList: null,\n checkReadyToSend: null,\n index: null,\n show: null,\n edit: null,\n create: null,\n store: null,\n update: null,\n destroy: null,\n toggleFavorites: null\n }\n };\n var PublicVar = {};\n var PublicVar2 = {\n 'asd': '21'\n };\n var ApiToken = null;\n var Order = null;\n var root = this;\n var viewInicialized = [];\n this.setOpts = function (options) {\n $.extend(Opts, options);\n };\n this.getOpts = function () {\n return Opts;\n };\n this.clickOrderEdit = function (data) {\n debug('clickEdit');\n debug(data);\n var ajaxUrl = Opts.URL.edit.replace('%id%', data.id);\n APP.loadMainContent(ajaxUrl);\n /* let ajaxData={};\r\n ajaxData._token=Opts.token;\r\n $.extend(ajaxData,Order);\r\n let ajaxUrl=Opts.URL.edit.replace('%id%',data.id);\r\n $.ajax({\r\n url: ajaxUrl,\r\n method:'GET',\r\n data:ajaxData,\r\n success:function (response) {\r\n if(response.success){\r\n let orderData=response.data;\r\n orderData.supplierId=orderData.supplier_id;\r\n delete(orderData.supplier_id);\r\n root.initOrder(orderData);\r\n root.initStepper();\r\n //root.afterOrderSetSupplierOk(data.data);\r\n }\r\n }\r\n });*/\n };\n this.afterOrderDeleted = function (data) {\n if (data.success == true) {\n debug('Order delete success');\n APP.loadMainContent(Opts.URL.index);\n } else {\n Toast.create(\"Error deleted !\", '', TOAST_STATUS.DANGER, 5000);\n }\n };\n this.clickOrderDeleteConfirmed = function (event) {\n debug('clickOrderDeleteConfirmed');\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 $.ajax({\n url: ajaxUrl,\n data: ajaxData,\n method: \"DELETE\",\n success: root.afterOrderDeleted\n //error:ajaxErrorHandler\n });\n };\n this.initViewOrderSelect = function () {\n debug('called initViewOrderSelect ');\n $('.ordersSelectTable button').off('click');\n $('.ordersSelectTable button').on('click', function () {\n var action = $(this).data('action');\n var orderId = $($(this).closest('tr')[0]).data('orderid');\n debug(action);\n debug(orderId);\n if (action == 'delete') {\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 megrendelést?');\n modal.find('.buttonYes').off('click');\n modal.find('.buttonYes').on('click', {\n id: orderId\n }, root.clickOrderDeleteConfirmed);\n });\n $('#dialogModal').modal('show');\n } else {\n root.clickOrderEdit({\n id: orderId\n });\n }\n });\n $('.buttonNew').off('click');\n $('.buttonNew').on('click', function () {\n APP.loadMainContent(Opts.URL.index, 'force=true');\n });\n };\n this.initStepper = function () {\n debug(Order.getData());\n viewInicialized = [];\n $('.statusNamePlace').text('Nincs elküldve');\n $('.statusNamePlace').addClass('statusBlink');\n root.setDeliveryDate('-');\n root.setSupplier('-');\n var unEnabled = ['parameter', 'productSelect', 'invoice', 'send'];\n $.each(unEnabled, function (index, value) {\n root.Stepper.unsetEnabled(value);\n root.Stepper.unsetCompleted(value);\n });\n debug(root.Stepper.getOpts()['available']);\n debug(Order.getData()['orderStatus']);\n var stepActive = 'supplier';\n var stepComplete = ['supplier'];\n var stepEnable = [];\n var stepOnAfterActivate = function stepOnAfterActivate() {};\n var avalaibleSteps = root.Stepper.getOpts()['available'];\n var stepUrlData = false;\n var stepAutoCallback = [];\n var _iterator = _createForOfIteratorHelper(avalaibleSteps),\n _step;\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var _stepName = _step.value;\n stepOnAfterActivate = this['initView' + _stepName.capitalize()];\n var item = {};\n item['onAfterActivate'] = stepOnAfterActivate;\n stepAutoCallback[_stepName] = item;\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n debug(stepAutoCallback);\n debug(Order.getData()['id']);\n if (Order.getData()['id'] > 0) {\n debug('hajra');\n debug(Order.getData());\n if (Order.getData()['deliveryDate']) {\n root.setDeliveryDate(Order.getData()['deliveryDate']);\n /*\r\n @todo: weekly-t beallitani\r\n */\n }\n if (Order.getData()['supplierName']) {\n root.setSupplier(Order.getData()['supplierName']);\n }\n stepUrlData = {\n 'supplierId': Order.supplierId,\n id: Order.id\n };\n var _iterator2 = _createForOfIteratorHelper(avalaibleSteps),\n _step2;\n try {\n for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n var stepName = _step2.value;\n console.log(stepName);\n stepComplete.push(stepName);\n stepEnable.push(stepName);\n if (Order.getData()['orderStatus'] == stepName) {\n stepActive = stepName;\n /*\r\n debug('initView'+stepName.capitalize());\r\n if(stepName!=='invoice' && stepName!=='send'){\r\n stepOnAfterActivate=this['initView'+stepName.capitalize()];\r\n }else{\r\n stepOnAfterActivate=function (){};\r\n }\r\n */\n break;\n }\n }\n\n /*\r\n //refactored for loop\r\n var BreakException = {};\r\n try {\r\n avalaibleSteps.forEach(function(stepName) {\r\n console.log(stepName);\r\n stepComplete.push(stepName);\r\n stepEnable.push(stepName);\r\n if(Order.getData()['orderStatus']==stepName){\r\n stepActive=stepName;\r\n throw BreakException;\r\n }\r\n \r\n });\r\n } catch (e) {\r\n if (e !== BreakException) throw e;\r\n }*/\n } catch (err) {\n _iterator2.e(err);\n } finally {\n _iterator2.f();\n }\n }\n root.Stepper.init({\n complete: stepComplete,\n enable: stepEnable,\n loaded: [],\n active: stepActive,\n URL: {\n create: Opts.URL.create\n },\n UrlData: stepUrlData,\n onAfterActivate: stepOnAfterActivate,\n autoCallback: stepAutoCallback\n /*{\r\n invoice: {\r\n onAfterActivate:root.initViewInvoice\r\n },\r\n send: {\r\n onAfterActivate:root.initViewSend\r\n },\r\n }*/\n });\n };\n this.initOrder = function (data) {\n Order = new DataModelOrder(data);\n };\n this.init = function (options) {\n debug('OrderModul init called');\n $.extend(Opts, window.OrderModulDefault, options);\n Order = new DataModelOrder();\n if (Opts.needStepper) {\n if (typeof this.Stepper == 'undefined') {\n this.Stepper = new Stepper();\n }\n }\n if (Opts.testMode) {\n return root.testMode();\n }\n };\n this.setSupplier = function (supplierName, supplierId) {\n if (supplierName) {\n $('.supplierNamePlace').text(supplierName);\n }\n if (supplierId) {\n Order.setData({\n supplierId: supplierId\n });\n root.Stepper.setOpts({\n 'UrlData': {\n 'supplierId': supplierId\n }\n });\n }\n };\n this.setDeliveryDate = function (dateText, dateTextTo) {\n var dateTextHuman = dateText.replaceAll('-', '.') + '.';\n if (dateTextHuman.length < 5) {\n $('.deliveryDatePlace').text(dateText);\n return;\n }\n if (dateTextTo) {\n dateTextHuman += ' - ' + dateTextTo.replaceAll('-', '.') + '.';\n }\n $(Opts.CSSSelectorForm + ' .selectedDateText').text(dateTextHuman);\n $('.deliveryDatePlace').text(dateTextHuman);\n $(Opts.CSSSelectorForm + ' input[name=\"deliveryDate\"]').val(dateText);\n };\n this.getData = function () {\n return Order;\n };\n this.setSupplierCompleted = function () {\n console.log('bingo');\n root.initViewParameter();\n };\n this.afterOrderSetSupplierOk = function (data) {\n Toast.create(\"Supplier selected !\", data.supplier.name, TOAST_STATUS.INFO, 5000);\n root.setSupplier(data.supplier.name, data.supplier.id);\n Order.setData({\n id: data.id\n });\n root.Stepper.setOpts({\n 'UrlData': {\n 'supplierId': Order.supplierId,\n id: Order.id\n }\n });\n //root.Stepper.setOpts({onAfterLoad:root.setSupplierCompleted})\n root.Stepper.setEnabled('parameter');\n root.Stepper.addCompleted('parameter');\n root.Stepper.setCompleted('parameter');\n root.Stepper.setActive('parameter');\n };\n this.initViewSupplier = function () {\n debug('call initViewSupplier');\n root.Stepper.setOpts({\n onAfterLoad: function onAfterLoad() {}\n });\n $('.supplierItem').off('click');\n $('.supplierItem').on('click', function (event) {\n console.log(Order.getData());\n event.preventDefault();\n var supplierId = $(event.currentTarget).data('id');\n var supplierName = $(event.currentTarget).find('h5.card-title').text();\n if (typeof Order.supplierId == 'undefined') {\n //new order\n\n var ajaxData = {};\n ajaxData._token = Opts.token;\n ajaxData.supplierId = supplierId;\n ajaxData.storeType = 'supplierSelect';\n $.extend(ajaxData, Order);\n $.ajax({\n url: Opts.URL.store,\n method: 'POST',\n data: ajaxData,\n success: function success(data) {\n if (data.success) {\n root.afterOrderSetSupplierOk(data.data);\n }\n }\n });\n //Order.setData({supplierId:supplierId});\n } else {\n //ide kellene egy jo kis kerdes\n if (Order.supplierId != supplierId) {\n Toast.create(\"Supplier change to!\", supplierName, TOAST_STATUS.WARNING, 5000);\n root.Stepper.clearLoaded();\n Order = new DataModelOrder();\n //Order.setData({supplierId:supplierId});\n }\n }\n return;\n // removed by dead control flow\n\n // removed by dead control flow\n\n // removed by dead control flow\n\n\n //$('.supplierNamePlace').text(supplierName);\n // removed by dead control flow\n\n // removed by dead control flow\n\n //@todo:ide kell egy mentes!\n //@todo:mentes eredemenyekeppen lehet valtani\n // removed by dead control flow\n\n // removed by dead control flow\n\n // removed by dead control flow\n\n // removed by dead control flow\n\n // removed by dead control flow\n\n // removed by dead control flow\n\n });\n };\n this.checkContactNameField = function () {\n var CSSSelectorForm = '.orderParameterForm';\n var node = $(CSSSelectorForm + ' input[name=contactName]');\n if (node.val().length < 2) {\n node.removeClass('is-valid');\n node.addClass('is-invalid');\n return false;\n } else {\n node.addClass('is-valid');\n node.removeClass('is-invalid');\n return true;\n }\n };\n this.sendOrderDataToServer = function (updateType, callback, errorCallback) {\n var ajaxData = {};\n var ajaxUrl = Opts.URL.store;\n var ajaxMethod = \"POST\";\n if (Order.id) {\n ajaxUrl = Opts.URL.update.replace('%id%', Order.id);\n //ajaxMethod=\"PUT\";\n //ajaxData=new FormData($(CSSSelectorForm)[0]);\n ajaxData._method = 'PUT';\n }\n ajaxData._token = Opts.token;\n ajaxData.updateType = updateType;\n $.extend(ajaxData, Order);\n debug(Order);\n debug(ajaxData);\n debug('ajaxUrl:' + ajaxUrl);\n ajaxData = jsonToFormData(ajaxData);\n $.ajax({\n url: ajaxUrl,\n data: ajaxData,\n type: ajaxMethod,\n contentType: false,\n processData: false,\n success: function success(data) {\n debug('ajax returned data');\n debug(data);\n if (data.success) {\n //root.afterOrderSetSupplierOk(data.data);\n callback(data);\n }\n },\n error: function error(xhr, ajaxOptions, thrownError) {\n ajaxErrorHandler(xhr, ajaxOptions, thrownError);\n if (typeof errorCallback != 'undefined') {\n errorCallback(xhr.responseJSON);\n }\n }\n });\n };\n this.afterOrderSetParameterOk = function (data) {\n debug('called afterOrderSetParameterOk');\n root.Stepper.setOpts({\n 'UrlData': {\n 'supplierId': Order.supplierId,\n 'id': Order.id\n }\n });\n //root.Stepper.setOpts({onAfterLoad:root.setParameterCompleted})\n root.Stepper.setEnabled('productSelect');\n root.Stepper.addCompleted('productSelect');\n root.Stepper.setCompleted('productSelect');\n root.Stepper.setActive('productSelect');\n };\n this.selectCurrentWeek = function () {\n console.error('selectCurrentWeek');\n console.error($('.ui-datepicker').find('.ui-datepicker-current-day a'));\n $('.ui-datepicker').find('.ui-datepicker-current-selected-weekday a').addClass('ui-state-active');\n };\n this.weekHover = function () {\n console.error('hover Active');\n $('.ui-datepicker-calendar tr').off('mousemove');\n $('.ui-datepicker-calendar tr').off('mouseleave');\n $('.ui-datepicker-calendar tr').on('mousemove', function () {\n $(this).find('td a').addClass('ui-state-hover');\n });\n $('.ui-datepicker-calendar tr').on('mouseleave', function () {\n $(this).find('td a').removeClass('ui-state-hover');\n });\n };\n this.weekHoverSlow = function () {\n console.error('weekHoverSlow');\n if ($('.ui-datepicker-calendar tr').length < 1) {\n setTimeout(root.weekHoverSlow, 1);\n return;\n }\n root.weekHover();\n };\n this.initDatePicker = function (type) {\n console.error('asdasdadad');\n console.log('tipus' + type);\n var CSSSelectorForm = '.orderParameterForm';\n var startDate = new Date('1900-01-01');\n var endDate = new Date('1900-01-02');\n $(CSSSelectorForm + ' .datePicker').datepicker(\"destroy\");\n if (type == 'weekly') {\n $(CSSSelectorForm + ' .datePicker').datepicker({\n showOtherMonths: true,\n selectOtherMonths: true,\n showWeek: true,\n dateFormat: 'yy-mm-dd',\n firstDay: 1,\n minDate: new Date(),\n afterShow: function afterShow(dateText, inst) {\n root.weekHover();\n root.selectCurrentWeek();\n },\n onSelect: function onSelect(dateText, inst) {\n var date = $(this).datepicker('getDate');\n startDate = new getMonday(date);\n endDate = new Date(date.getFullYear(), date.getMonth(), date.getDate() - date.getDay() + 7);\n root.setDeliveryDate($.datepicker.formatDate('yy-mm-dd', startDate), $.datepicker.formatDate('yy-mm-dd', endDate));\n },\n beforeShow: function beforeShow() {\n console.group('beforeShow');\n console.log(startDate);\n console.log(endDate);\n //root.weekHoverSlow();\n console.groupEnd();\n },\n beforeShowDay: function beforeShowDay(date) {\n console.group('beforeShowDay');\n console.log(date.toLocaleDateString('hu-Hu'));\n var cssClass = '';\n if (date >= startDate && date <= endDate) {\n console.error(date.toLocaleDateString('hu-Hu'));\n cssClass = 'ui-datepicker-current-selected-weekday';\n //cssClass = 'ui-state-active';\n }\n console.log(cssClass);\n console.groupEnd();\n return [true, cssClass];\n },\n onChangeMonthYear: function onChangeMonthYear(year, month, inst) {\n //root.selectCurrentWeek();\n }\n });\n } else {\n $(CSSSelectorForm + ' .datePicker').datepicker({\n dateFormat: 'yy-mm-dd',\n minDate: new Date(),\n onSelect: function onSelect(dateText) {\n $(CSSSelectorForm + ' .selectedDateText').text(dateText);\n $('.deliveryDatePlace').text(dateText.replaceAll('-', '.') + '.');\n $(CSSSelectorForm + ' input[name=\"deliveryDate\"]').val(dateText);\n }\n });\n }\n };\n this.callChangeOrderType = function () {\n console.log(this);\n console.log(this.value);\n root.initDatePicker(this.value);\n //enum('daily', 'weekly')\n /*let CSSSelectorForm='.orderParameterForm';\r\n let node=$(CSSSelectorForm+' input[name=contactName]');\r\n if(node.val().length<2){\r\n node.removeClass('is-valid');\r\n node.addClass('is-invalid');\r\n return false;\r\n }else{\r\n node.addClass('is-valid');\r\n node.removeClass('is-invalid');\r\n return true;\r\n }\r\n */\n };\n this.initViewParameter = function () {\n debug('call initViewParameter');\n root.Stepper.setOpts({\n onAfterLoad: function onAfterLoad() {}\n });\n var CSSSelectorForm = '.orderParameterForm';\n $(CSSSelectorForm + ' .datePickerClick').click(function () {\n $(CSSSelectorForm + ' .datePicker').datepicker('show');\n });\n $(CSSSelectorForm + ' .orderParameterDeliveryAddress').select2({}).show();\n $(CSSSelectorForm + ' input[name=contactName]').off('blur');\n $(CSSSelectorForm + ' input[name=contactName]').off('keyup');\n $(CSSSelectorForm + ' input[name=contactName]').on('blur', root.checkContactNameField);\n $(CSSSelectorForm + ' input[name=contactName]').on('keyup', root.checkContactNameField);\n $(CSSSelectorForm + ' input[name=orderType]').off('change');\n $(CSSSelectorForm + ' input[name=orderType]').on('change', root.callChangeOrderType);\n $(CSSSelectorForm + ' .orderParameterNextButton').off('click');\n if (Order.getData()['id'] > 0) {\n if (Order.getData()['orderType'] == 'weekly') {\n root.initDatePicker(Order.getData()['orderType']);\n $(CSSSelectorForm + \" input[name=orderType][value=\" + Order.getData()['orderType'] + \"]\").prop('checked', true);\n var endDate = new Date(Order.getData()['deliveryDate']);\n endDate.setDate(endDate.getDate() + 6);\n root.setDeliveryDate(Order.getData()['deliveryDate'], $.datepicker.formatDate('yy-mm-dd', endDate));\n root.initDatePicker('weekly');\n } else {\n if (Order.getData()['deliveryDate']) {\n root.setDeliveryDate(Order.getData()['deliveryDate']);\n }\n root.initDatePicker('daily');\n }\n if (Order.getData()['contactName']) {\n $(CSSSelectorForm + ' input[name=contactName]').val(Order.getData()['contactName']);\n }\n if (Order.getData()['note']) {\n $(CSSSelectorForm + ' textarea[name=note]').val(Order.getData()['note']);\n }\n if (Order.getData()['deliveryAddressId']) {\n console.log($(CSSSelectorForm + ' select[name=deliveryAddressId]'));\n $(CSSSelectorForm + ' select[name=deliveryAddressId]').val(Order.getData()['deliveryAddressId']);\n }\n if (Order.getData()['customNotificationEmail']) {\n console.log($(CSSSelectorForm + ' select[name=customNotificationEmail]'));\n $(CSSSelectorForm + ' select[name=customNotificationEmail]').val(Order.getData()['customNotificationEmail']);\n }\n } else {\n root.initDatePicker('daily');\n }\n $(CSSSelectorForm + ' .orderParameterDeliveryAddress').select2({}).show();\n $(CSSSelectorForm + ' .orderParameterCustomNotificationEmail').select2({}).show();\n $(CSSSelectorForm).submit(function (event) {\n event.preventDefault();\n if ($(CSSSelectorForm)[0].checkValidity() === false) {\n debug('validaton false');\n event.stopPropagation();\n return;\n } else {\n debug('validaton ok');\n //do your ajax submition here\n }\n $('.deliveryDatePlace').text($(CSSSelectorForm + ' input[name=deliveryDate]').val().replaceAll('-', '.') + '.');\n Order.setData({\n contactName: $(CSSSelectorForm + ' input[name=contactName]').val(),\n note: $(CSSSelectorForm + ' textarea[name=note]').val(),\n orderType: $(CSSSelectorForm + ' input:checked[name=orderType]').val(),\n deliveryDate: $(CSSSelectorForm + ' input[name=deliveryDate]').val(),\n deliveryAddressId: $(CSSSelectorForm + ' select[name=deliveryAddressId]').val(),\n deliveryAddress: $(CSSSelectorForm + ' select[name=deliveryAddress]').val(),\n customNotificationEmail: $(CSSSelectorForm + ' select[name=customNotificationEmail]').val()\n });\n console.group('parameter form submit');\n console.error($(CSSSelectorForm + ' input:checked[name=orderType]').val());\n console.error($(CSSSelectorForm + ' input[name=deliveryDate]').val());\n debug(Order.getData());\n console.groupEnd();\n root.sendOrderDataToServer('parameter', root.afterOrderSetParameterOk);\n });\n };\n this.blank = function () {};\n this.setParameterCompleted = function () {\n console.log('setParameterCompleted called');\n root.Stepper.setOpts({\n onAfterLoad: function onAfterLoad() {}\n });\n //root.initViewProductSelect()\n };\n this.bindRowFavoritesAction = function () {\n $('.buttonItemFavorites').off('click');\n $('.buttonItemFavorites').on('click', function () {\n var productId = $(this).data('id');\n console.log(productId);\n var ajaxUrl = Opts.URL.toggleFavorites.replace('%id%', productId);\n var ajaxData = {};\n ajaxData._token = Opts.token;\n var button = this;\n console.log(ajaxUrl);\n $.ajax({\n url: ajaxUrl,\n method: 'POST',\n data: ajaxData,\n success: function success(response) {\n if (response.success) {\n if (response.status) {\n console.log('true');\n $(button).addClass('btn-warning');\n $(button).removeClass('btn-light');\n } else {\n $(button).removeClass('btn-warning');\n $(button).addClass('btn-light');\n console.log('false');\n }\n }\n }\n });\n /*\r\n $(this).toggleClass('btn-warning');\r\n $(this).toggleClass('btn-light');\r\n */\n });\n };\n this.bindRowDescriptionAction = function () {\n $('textarea.orderItemComment').on('change', function () {\n var comment = $(this).val();\n var productId = $(this).data('id');\n var productComment = Order.getData('productComment');\n if (productComment !== null) {\n if (typeof productComment[productId] == 'undefined' && comment.length === 0) {\n return;\n }\n if (productComment[productId] === comment) {\n return;\n }\n }\n productComment[productId] = comment;\n if (comment.length === 0) {\n delete Order.productComment[productId];\n }\n Order.productComment = productComment;\n queueAjax.push(Date.now());\n root.syncOrderDataToServer();\n });\n };\n this.productSelectDatatablesRowFormatter = function (d) {\n // `d` is the original data object for the row\n /**\r\n @todo: felszedni es updatelni az adott termek memojat az orderban\r\n */\n console.group('productSelectDatatablesRowFormatter');\n console.log(d);\n var templateData = d;\n templateData.comment = '';\n // debug(Order);\n if (Order.productComment && Order.productComment !== null) {\n debug(_typeof(Order.productComment[d.id]));\n if (typeof Order.productComment[d.id] != 'undefined' && Order.productComment[d.id].length > 0) {\n templateData.comment = Order.productComment[d.id];\n }\n }\n /** @typedef {boolean} d.favorites */\n if (d.favorites === true) {\n templateData.btnFavoritesClass = 'btn-warning';\n } else {\n templateData.btnFavoritesClass = 'btn-light';\n }\n var template = $('template[data-name=\"orderProductSelectDetails\"]').html();\n templateData.weekly = false;\n if (Order.getData().orderType === 'weekly') {\n templateData.weekly = true;\n /*\r\n \r\n templateData.weeklyDay=[\r\n {\"index\":1,\"name\":\"Hétfő\"},\r\n {\"index\":2,\"name\":\"Kedd\"},\r\n {\"index\":3,\"name\":\"Szerda\"},\r\n {\"index\":4,\"name\":\"Csütörtök\"},\r\n {\"index\":5,\"name\":\"Péntek\"},\r\n {\"index\":6,\"name\":\"Szombat\"},\r\n {\"index\":7,\"name\":\"Vasárnap\"},\r\n ];\r\n \r\n templateData.weeklyDay=[\r\n {\"index\":2,\"name\":\"Hétfő\" },\r\n {\"name\":\"Kedd\"},\r\n {\"name\":\"Szerda\"},\r\n {\"name\":\"Csütörtök\"},\r\n {\"name\":\"Péntek\"},\r\n {\"name\":\"Szombat\"},\r\n {\"name\":\"Vasárnap\"}\r\n ];\r\n */\n }\n var productSelected = Order.getData('productSelected');\n if (typeof productSelected[d.id] != 'undefined') {\n templateData.itemQuantity = productSelected[d.id];\n }\n console.log(['templateData', templateData]);\n var oldTags = Mustache.tags;\n Mustache.tags = [\"~!\", \"!~\"];\n if (templateData['specification'] == 'false' || templateData['specification'] == false) {\n templateData.specificationClass = 'd-none';\n }\n templateData.pictureImg = '';\n if (templateData['picture'] == 'false' || templateData['picture'] == false) {\n templateData.pictureClass = 'd-none';\n } else {\n templateData.pictureImg = '';\n }\n console.log('templateData', templateData);\n //templateData['aa_specification']=false;\n var render = Mustache.render(template, templateData);\n Mustache.tags = oldTags;\n console.groupEnd();\n return render;\n /*\r\n solution before template\r\n return ''+\r\n ''+\r\n ''+\r\n ''+\r\n ''+\r\n ''+\r\n ''+\r\n ''+\r\n ''+\r\n /!*\r\n ''+\r\n ''+\r\n ''+\r\n ''+\r\n *!/\r\n ''+\r\n ''+\r\n ''+\r\n ''+\r\n ''+\r\n ''+\r\n ''+\r\n ''+\r\n /!*\r\n *!/\r\n '
Info:'+d.note+'
hooreyca :'+d.hooreycaId+'' +\r\n \r\n '' +\r\n '
Extension number:'+d.extn+'
Info:'+d.note+'
Megjegyzés:
';\r\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 console.log($(items[item]).children('a.categoryItem'));\n if ($(items[item]).children('a.categoryItem').length > 0) {\n res += $(items[item]).children('a.categoryItem').text() + '/';\n }\n }\n res += $(node).text();\n console.log(res);\n return res;\n };\n var selectedProductGroup = null;\n var dataTableSearchStr = null;\n var dataTableSearchKrel = false;\n this.searchProductByString = function (filterStr) {\n root.setDatatableHeaderText('Termékek szűrve:' + filterStr);\n dataTableSearchStr = filterStr;\n $('.dataTableOrderProductSelect').DataTable().ajax.reload();\n };\n this.clickSearchProduct = function () {\n debug(this);\n var filterStr = $('.sidebar-search input[name=searchValue]').val();\n debug(filterStr);\n root.searchProductByString(filterStr);\n };\n this.clickFavoritesProduct = function () {\n debug('clickFavoritesProduct');\n root.setDatatableHeaderText('Termékek szűrve: kedvencek');\n dataTableSearchStr = '**favorites**';\n $('.dataTableOrderProductSelect').DataTable().ajax.reload();\n };\n this.clickOftenProduct = function () {\n debug('clickOftenProduct');\n root.setDatatableHeaderText('Termékek szűrve: gyakran vásárolt');\n dataTableSearchStr = '**often**';\n $('.dataTableOrderProductSelect').DataTable().ajax.reload();\n };\n this.clickSpecialOffer = function () {\n debug('clickSpecialOffer');\n root.setDatatableHeaderText('Termékek szűrve: Akciós termékek');\n dataTableSearchStr = '**specialOffer**';\n $('.dataTableOrderProductSelect').DataTable().ajax.reload();\n };\n this.clickLastProduct = function () {\n debug('clickLastProduct');\n root.setDatatableHeaderText('Termékek szűrve: utoljára vásárolt');\n dataTableSearchStr = '**last**';\n $('.dataTableOrderProductSelect').DataTable().ajax.reload();\n };\n this.clickWeeklyProduct = function () {\n debug('clickWeeklyProduct');\n root.setDatatableHeaderText('Termékek szűrve: Heti termékek');\n dataTableSearchStr = '**weekly**';\n $('.dataTableOrderProductSelect').DataTable().ajax.reload();\n };\n this.clickKrelProduct = function () {\n debug('clickKrelProduct');\n //root.setDatatableHeaderText('Termékek szűrve: Heti termékek');\n //dataTableSearchStr='**weekly**';\n //$('.dataTableOrderProductSelect').DataTable().ajax.reload();\n $(this).parent().toggleClass('krelActive');\n dataTableSearchKrel = !dataTableSearchKrel;\n $('.dataTableOrderProductSelect').DataTable().ajax.reload();\n };\n this.productSelectDataTableColumnDefs = function () {\n return [{\n \"width\": \"10px\",\n \"targets\": 0\n }, {\n \"className\": \"dt-left\",\n \"targets\": 1\n },\n // { \"width\": \"120px\", \"targets\": 1 },\n {\n \"width\": \"28px\",\n \"targets\": 2\n }, {\n \"width\": \"41px\",\n \"targets\": 3\n }, {\n \"width\": \"76px\",\n \"targets\": 4\n }, {\n \"width\": \"55px\",\n \"targets\": 5\n }, {\n \"width\": \"70px\",\n \"targets\": 6\n }, {\n \"width\": \"54px\",\n \"targets\": 7\n }, {\n \"width\": \"57px\",\n \"targets\": 8\n }, {\n \"width\": \"42px\",\n \"targets\": 9\n }, {\n \"width\": \"100px\",\n \"targets\": 10\n }, {\n \"className\": \"dt-center\",\n \"targets\": \"_all\"\n }];\n };\n this.productSelectDataTableColumn = function () {\n var columnData = [{\n \"className\": 'details-control',\n \"orderable\": false,\n \"data\": null,\n \"defaultContent\": ''\n }, {\n \"data\": \"name\"\n }, {\n \"data\": \"krel\"\n }, {\n \"data\": \"packing\"\n }, {\n \"data\": \"unitValue\"\n }, {\n \"data\": \"productUnit\"\n }, {\n \"data\": \"sellerUnit\"\n }, {\n \"data\": \"unitMultiplier\"\n }, {\n \"data\": \"amountUnit\"\n }, {\n \"data\": \"price\"\n }];\n var actionColumn = {\n \"className\": 'details-control2',\n \"orderable\": false,\n \"data\": null,\n \"width\": \"80px\",\n \"defaultContent\": ''\n };\n if (Order.getData('orderType') == 'daily') {\n actionColumn.defaultContent = ''\n /*\r\n \"defaultContent\":'
' +\r\n '' +\r\n '' +\r\n '' +\r\n '
'\r\n */;\n }\n columnData.push(actionColumn);\n return columnData;\n };\n this.getDatatables = function (orderType) {\n console.error(orderType);\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.getDataTableContentProductList,\n data: function data(_data) {\n _data.searchStr = dataTableSearchStr;\n _data.krel = dataTableSearchKrel;\n _data.groupId = selectedProductGroup;\n _data.supplierId = Order.supplierId;\n _data.deliveryDate = Order.deliveryDate;\n }\n },\n buttons: {\n buttons: []\n },\n \"columnDefs\": root.productSelectDataTableColumnDefs(),\n \"columns\": root.productSelectDataTableColumn(),\n \"order\": [[1, 'asc']]\n });\n return table;\n };\n this.productSelectDataTableDrawDT = function (e) {\n //debug( 'Table draw complete: '+new Date().getTime() );\n\n //$('td:contains(\"*\")').html('');\n $(\"td\").filter(function () {\n return $(this).text() === '*';\n }).html('');\n if (Order.getData().orderType == 'daily') {\n $(\"input[type='number'].inputNumberSpinner\").inputSpinner({\n template: '
' + '' +\n //'' +\n '' + '' + '
',\n buttonsWidth: \"0.5rem\",\n groupClass: \"\",\n // css class of the resulting input-group\n buttonsClass: \"btn-outline-secondary\"\n });\n }\n root.bindWeakUserHelper();\n /*\r\n ----------------------------------------------------------\r\n change order quantity\r\n */\n $(\".dataTableOrderProductSelect .details-control2 input[type=text]\").off('change');\n $(\".dataTableOrderProductSelect .details-control2 input[type=text]\").on('change', function (e) {\n var quantity = $(this).val();\n quantity = quantity.replace(',', '.');\n quantity = parseFloat(quantity);\n var rowData = $('.dataTableOrderProductSelect').DataTable().row($(this).closest('tr')).data();\n root.orderItemsChange(rowData, quantity);\n });\n $(\".dataTableOrderProductSelect .details-control2 input[type=text]\").each(function () {\n //debug('ez a function2')\n var quantity = $(this).val();\n var rowData = $('.dataTableOrderProductSelect').DataTable().row($(this).closest('tr')).data();\n if (Order.productSelected[rowData.id]) {\n debug(rowData);\n debug($($(this).closest('tr').find('input[type=number]')[0]));\n debug(Order.productSelected[rowData.id]);\n var quantityCurrent = Order.productSelected[rowData.id];\n if (typeof quantityCurrent != 'string') {\n quantityCurrent += '';\n }\n $($(this).closest('tr').find('input[type=number]')[0]).val(quantityCurrent.replace(',', '.'));\n }\n });\n $(\".dataTableOrderProductSelect .details-control2 button\").off('click');\n $(\".dataTableOrderProductSelect .details-control2 button\").on('click', function () {\n // debug('.details-control2 button click ')\n // debug(this);\n $(this).parent().find('input[type=text]').trigger('change');\n });\n };\n this.initViewProductSelect = function () {\n var functionName = 'initViewProductSelect';\n console.log(functionName + ' called');\n if (viewInicialized.includes(functionName)) {\n return;\n }\n //debug(Object.getOwnPropertyNames(root));\n root.setDatatableHeaderText('');\n root.Stepper.setOpts({\n onAfterActivate: function onAfterActivate() {}\n });\n //@note: be kell kapcsolni az elonezetet\n root.Stepper.addCompleted('invoice');\n root.Stepper.addEnabled('invoice');\n var CSSSelectorForm = '.orderParameterForm';\n //console.log(Opts.URL.getDataTableContentProductList);change\n debug(CSSSelectorForm + ' .fa-search');\n $('.sidebar-search .fa-search').off('click');\n $('.sidebar-search .fa-search').on('click', root.clickSearchProduct);\n $('a.sidebar.favorites').off('click');\n $('a.sidebar.favorites').on('click', root.clickFavoritesProduct);\n $('a.sidebar.often').off('click');\n $('a.sidebar.often').on('click', root.clickOftenProduct);\n $('a.sidebar.last').off('click');\n $('a.sidebar.last').on('click', root.clickLastProduct);\n $('a.sidebar.weekly').off('click');\n $('a.sidebar.weekly').on('click', root.clickWeeklyProduct);\n $('a.sidebar.krel').off('click');\n $('a.sidebar.krel').on('click', root.clickKrelProduct);\n $('a.sidebar.specialOffer').off('click');\n $('a.sidebar.specialOffer').on('click', root.clickSpecialOffer);\n $('.sidebar-search input[name=searchValue]').off('keypress');\n $('.sidebar-search input[name=searchValue]').on('keypress', function (event) {\n if (event.which == 13) {\n event.preventDefault();\n }\n if ($(this).val().length >= 2) {\n root.searchProductByString($(this).val() + event.key);\n }\n });\n $('.sidebar-wrapper .sidebar-menu .sidebar-dropdown .sidebar-submenu li a.categoryItem.clickable').off('click');\n $('.sidebar-wrapper .sidebar-menu .sidebar-dropdown .sidebar-submenu li a.categoryItem.clickable').on('click', function () {\n var groupId = $(this).data('id');\n selectedProductGroup = groupId;\n dataTableSearchStr = null;\n console.log(groupId);\n console.log(root.getTreePathName(this));\n root.setDatatableHeaderText(root.getTreePathName(this));\n /*\r\n let ajaxData={\r\n 'groupId':groupId,\r\n 'supplier_id':Order.supplierId,\r\n };\r\n //$('.dataTableOrderProductSelect').DataTable().ajax.data(ajaxData).load();\r\n \r\n */\n /*\r\n let ajaxUrl=Opts.URL.getDataTableContentProductList+'?groupId='+groupId+'&supplier_id='+Order.supplierId;\r\n $('.dataTableOrderProductSelect').DataTable().ajax.url(ajaxUrl).load();\r\n */\n $('.dataTableOrderProductSelect').DataTable().ajax.reload();\n });\n var table = root.getDatatables(Order.getData('orderType'));\n $('.dataTableOrderProductSelect').on('init.dt', function () {\n console.log('Table initialisation complete: ' + new Date().getTime());\n }).dataTable();\n $('.dataTableOrderProductSelect').on('draw.dt', root.productSelectDataTableDrawDT).dataTable();\n\n //$('.dataTableOrderProductSelect').on( 'draw.dt', ).dataTable();\n\n $('.dataTableOrderProductSelect').on('xhr.dt', function () {\n debug('Table xhr complete: ' + new Date().getTime());\n }).dataTable();\n\n //$(\"input[type='number'].inputNumberSpinner\").inputSpinner();\n\n /*\r\n ----------------------------------------------------------\r\n Add event listener for opening and closing details\r\n */\n\n $('.dataTableOrderProductSelect tbody').on('click', 'td.details-control', function () {\n var tr = $(this).closest('tr');\n var 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 } else {\n // Open this row\n row.child(root.productSelectDatatablesRowFormatter(row.data())).show();\n tr.addClass('shown');\n root.bindProductDetailsAction();\n }\n });\n viewInicialized.push(functionName);\n };\n this.bindProductDetailsAction = function () {\n root.bindRowDescriptionAction();\n root.bindRowFavoritesAction();\n if (Order.getData()['orderType'] == 'weekly') {\n root.bindOrderItemWeekQuantity();\n }\n };\n this.bindWeakUserHelper = function () {\n $(\"input.inputNumberSpinner\").off(\"focus\");\n $(\"input.inputNumberSpinner\").on(\"focus\", function () {\n var quantity = $(this).val();\n quantity = quantity.replace(',', '.');\n quantity = parseFloat(quantity);\n if (quantity === 0) {\n $(this).val('');\n }\n });\n $(\"input[type=text].inputNumberSpinner\").off(\"keypress\");\n $(\"input[type=text].inputNumberSpinner\").on(\"keypress\", function (event) {\n if (event.which == 13) {\n // console.error('enter pressed');\n var actualItem = this;\n var items = $(\"input[type=text].inputNumberSpinner\");\n items.each(function (item) {\n // console.log(this);\n if (this == actualItem) {\n // console.error(item);\n if (item + 1 <= items.length) {\n // console.error(items[item+1]);\n $(items[item + 1]).focus();\n }\n return false;\n }\n });\n }\n });\n };\n this.bindOrderItemWeekQuantity = function () {\n $(\"input.productSelectDayQuantity\").off('change');\n $(\"input.productSelectDayQuantity\").on('change', function () {\n console.log(this.name);\n console.log(this.value);\n console.log($(this).data('dayindex'));\n var rowData = null;\n var rowNode = $($(this).closest('table.orderProductSelectRowDetailsTable').closest('tr')).prev();\n rowData = $('.dataTableOrderProductSelect').DataTable().row(rowNode).data();\n console.log(rowData);\n var quantity = $(this).val();\n quantity = quantity.replace(',', '.');\n quantity = parseFloat(quantity);\n console.log(rowData.id);\n root.orderItemsChange(rowData, quantity, $(this).data('dayindex'));\n // root.orderItemsChange\n //orderItemsChange\n //quantity[1683][1]\n });\n };\n this.afterSyncOrderDataToServer = function (data) {\n //root.toggleEnableSend();\n //console.log('most vegzett. ennyit kiszed'+batchNum);\n for (var i = 0; i < queueAjax.length; i++) {\n console.log('shiftel');\n queueAjax.shift();\n }\n //console.log('remaining left '+queueAjax.length);\n setTimeout(function () {\n syncDoing = false;\n root.syncOrderDataToServer();\n }, Opts.dataSyncPauseTime);\n };\n var queueAjax = [];\n var syncDoing = false;\n this.syncOrderDataToServer = function () {\n //debug(queueAjax);\n if (syncDoing) {\n //debug('sync in progress....');\n return false;\n }\n if (queueAjax.length < 1) {\n return;\n }\n syncDoing = true;\n root.sendOrderDataToServer('productSelect', root.afterSyncOrderDataToServer);\n return;\n };\n this.orderItemsChange = function (ItemData, quantity, dayIndex) {\n /*\r\n debug('-----------------');\r\n debug(ItemData);\r\n debug(quantity);\r\n debug(Order.getData('productSelected'));\r\n debug('-----------------');\r\n \r\n */\n if (isNaN(quantity)) {\n quantity = 0;\n }\n var productSelected = Order.getData('productSelected');\n console.group('orderItemsChange');\n console.log(['productSelected', productSelected]);\n console.log(['ItemData', ItemData]);\n console.log(['ItemData.id', ItemData.id]);\n console.log(['quantity', quantity]);\n console.log(['dayIndex', dayIndex]);\n console.log(productSelected[ItemData.id]);\n var productSelectedItem = productSelected[ItemData.id];\n /*\r\n ha 0 ertek jon es nem is volt akkor hamar kiugratjuk\r\n */\n if (quantity == 0) {\n console.error('quantity==0');\n if (typeof productSelectedItem == 'undefined') {\n console.error('itt lep1');\n console.groupEnd();\n return;\n }\n if (dayIndex) {\n console.log('van dayIndex');\n if (typeof productSelected[ItemData.id][dayIndex] == 'undefined') {\n console.log(['productSelectedItem', productSelectedItem]);\n console.error('itt lep2');\n console.groupEnd();\n return;\n }\n }\n }\n /*\r\n ha azonos az ertek kiugrunk\r\n */\n if (dayIndex) {\n if (typeof productSelected[ItemData.id] != 'undefined' && typeof productSelected[ItemData.id][dayIndex] != 'undefined') {\n if (productSelected[ItemData.id][dayIndex] == quantity) {\n console.error('azonos napi');\n console.groupEnd();\n return;\n }\n }\n } else {\n if (productSelected[ItemData.id] == quantity) {\n console.error('azonos');\n console.groupEnd();\n return;\n }\n }\n if (quantity == 0) {\n if (dayIndex) {\n delete Order.productSelected[ItemData.id][dayIndex];\n delete productSelected[ItemData.id][dayIndex];\n } else {\n delete Order.productSelected[ItemData.id];\n delete productSelected[ItemData.id];\n }\n } else {\n /*\r\n ha van ertek erteket adunk!\r\n */\n if (dayIndex) {\n if (typeof productSelected[ItemData.id] == 'undefined') {\n productSelected[ItemData.id] = [];\n }\n console.log('set quantity productSelected[ItemData.id][dayIndex]', quantity);\n productSelected[ItemData.id][dayIndex] = quantity;\n } else {\n productSelected[ItemData.id] = quantity;\n console.log('set quantity productSelected[ItemData.id]', quantity);\n }\n }\n console.log(['productSelected', productSelected]);\n Order.productSelected = productSelected;\n console.groupEnd();\n queueAjax.push(Date.now());\n root.syncOrderDataToServer();\n return;\n // removed by dead control flow\n\n // removed by dead control flow\n\n // removed by dead control flow\n\n // removed by dead control flow\n\n // removed by dead control flow\n\n // removed by dead control flow\n\n // removed by dead control flow\n\n // removed by dead control flow\n\n\n /*\r\n debug(Order.getData('productSelected'));\r\n debug('*******************');\r\n */\n };\n this.initViewInvoice = function () {\n root.Stepper.setOpts({\n onAfterLoad: function onAfterLoad() {}\n });\n if (Object.keys(Order.productSelected).length > 0) {\n root.Stepper.addCompleted('send');\n root.Stepper.addEnabled('send');\n }\n var styleStr = '';\n $('table.invoice button.printButton').off('click');\n $('table.invoice button.printButton').on('click', function () {\n window.print();\n return;\n // removed by dead control flow\n var newWin; \n // removed by dead control flow\n\n // removed by dead control flow\n var print; \n // removed by dead control flow\n\n // newWin.document.write($('table.invoice').prop('outerHTML'));\n // removed by dead control flow\n\n // removed by dead control flow\n\n // removed by dead control flow\n\n });\n };\n this.resetOrder = function () {\n root.init();\n root.setDeliveryDate('-');\n root.setSupplier('-');\n };\n this.afterOrderSendOk = function (data) {\n Toast.create(\"Sent!\", 'Order Sent', TOAST_STATUS.INFO, 5000);\n $('.buttonOrderSend').off('click');\n $('.buttonOrderSend').prop('disabled', true);\n $('.statusNamePlace').removeClass('statusBlink');\n $('.statusNamePlace').text('elküldve');\n $('.buttonOrderSending').toggleClass('d-none');\n $('.buttonOrderSendOk').toggleClass('d-none');\n $('div.invoiceContainer').html(data.retHTML);\n //root.resetOrder();\n };\n this.afterOrderSendError = function (data) {\n $('.buttonOrderSend').toggleClass('d-none');\n $('.buttonOrderSending').toggleClass('d-none');\n $.each(APP.OrderModule.Stepper.getOpts().available, function (index, value) {\n APP.OrderModule.Stepper.setEnabled(value);\n APP.OrderModule.Stepper.setCompleted(value);\n });\n };\n this.initViewSend = function () {\n console.log('initViewSend called 2');\n root.Stepper.setOpts({\n onAfterLoad: function onAfterLoad() {}\n });\n $('.buttonOrderSend').off('click');\n $('.buttonOrderSend').on('click', function () {\n console.log('Send buton clicked');\n //@todo: datasynchere and callback\n $('.buttonOrderSend').toggleClass('d-none');\n $('.buttonOrderSending').toggleClass('d-none');\n /**\r\n * PM158\r\n */\n $.each(APP.OrderModule.Stepper.getOpts().available, function (index, value) {\n root.Stepper.unsetEnabled(value);\n root.Stepper.unsetCompleted(value);\n });\n /**\r\n */\n root.sendOrderDataToServer('send', root.afterOrderSendOk, root.afterOrderSendError);\n\n /* let ajaxData={};\r\n ajaxData._token=Opts.token;\r\n ajaxData.send=true;\r\n $.extend(ajaxData,Order);\r\n $.ajax({\r\n url: Opts.URL.store,\r\n method:'POST',\r\n data:ajaxData,\r\n success:function (data) {\r\n if(data.success){\r\n root.afterOrderSendOk(data);\r\n }\r\n }\r\n });*/\n });\n };\n this.testModeSend = function () {};\n this.testMode = function () {\n console.log('testMode called ');\n Order.setData({\n id: 234,\n supplierId: 7,\n productSelected: {\n 116: 3,\n 293: 2\n },\n contactName: 'Contact Name',\n note: 'Note',\n type: 'daily',\n deliveryDate: Opts.defaultDeliveryDate,\n deliveryAddress: 12\n });\n console.log(Order.getData());\n console.log('*******************');\n //root.Stepper.setOpts({'UrlData':{'supplierId':supplierId}});\n root.Stepper.setOpts({\n 'UrlData': {\n 'supplierId': Order.supplierId,\n id: Order.id\n }\n });\n this.Stepper.init({\n URL: {\n create: Opts.URL.create\n },\n /*\r\n csupasz az elejerol\r\n complete:['supplier'],\r\n enable: ['supplier'],\r\n active: 'supplier',\r\n onAfterActivate:this.initViewSupplier,\r\n \r\n product select\r\n complete:['supplier','parameter','productSelect'],\r\n enable: ['supplier','parameter','productSelect'],\r\n active: 'productSelect',\r\n onAfterActivate:this.initViewProductSelect,\r\n \r\n fullos\r\n complete:['supplier','parameter','productSelect','invoice'],\r\n enable: ['supplier','parameter','productSelect','invoice','send'],\r\n active: 'productSelect',\r\n onAfterActivate:this.initViewProductSelect,\r\n \r\n send\r\n complete:['supplier','parameter','productSelect','invoice','send'],\r\n enable: ['supplier','parameter','productSelect','invoice','send'],\r\n active: 'send',\r\n onAfterActivate:this.initViewProductSelect,\r\n \r\n */\n complete: ['supplier', 'parameter', 'productSelect'],\n enable: ['supplier', 'parameter', 'productSelect'],\n active: 'productSelect',\n onAfterActivate: this.initViewProductSelect,\n autoCallback: {\n invoice: {\n onAfterActivate: root.initViewInvoice\n },\n send: {\n onAfterActivate: root.initViewSend\n }\n }\n });\n console.log('*******************');\n };\n this.toggleEnableSend = function () {\n console.log('toggleEnableSend called');\n var ajaxUrl = Opts.URL.checkReadyToSend.replace('%id%', Order.id);\n $.ajax({\n url: ajaxUrl,\n success: function success(data) {\n if (data.success) {\n if (data.readyToSend) {\n root.Stepper.addCompleted('send');\n /*\r\n root.Stepper.addCompleted('invoice');\r\n root.Stepper.addEnabled('invoice');\r\n */\n root.Stepper.addEnabled('send');\n } else {\n root.Stepper.unsetCompleted('send');\n /*\r\n root.Stepper.unsetCompleted('invoice');\r\n root.Stepper.unsetEnabled('invoice');\r\n */\n root.Stepper.unsetEnabled('send');\n }\n }\n console.log(data);\n }\n });\n };\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QyxPQUFPO01BQ1huQyxPQUFPLEVBQUMsU0FBUkEsT0FBT0EsQ0FBV25FLElBQUksRUFBRTtRQUNwQixJQUFHQSxJQUFJLENBQUNtRSxPQUFPLEVBQUM7VUFDWixJQUFHbkUsSUFBSSxDQUFDa1csV0FBVyxFQUFDO1lBQ2hCcFUsSUFBSSxDQUFDaEIsT0FBTyxDQUFDK0MsWUFBWSxDQUFDLE1BQU0sQ0FBQztZQUN6RDtBQUNBO0FBQ0E7QUFDQTtZQUN3Qi9CLElBQUksQ0FBQ2hCLE9BQU8sQ0FBQzZDLFVBQVUsQ0FBQyxNQUFNLENBQUM7VUFDbkMsQ0FBQyxNQUFJO1lBQ0Q3QixJQUFJLENBQUNoQixPQUFPLENBQUNxQyxjQUFjLENBQUMsTUFBTSxDQUFDO1lBQzNEO0FBQ0E7QUFDQTtBQUNBO1lBQ3dCckIsSUFBSSxDQUFDaEIsT0FBTyxDQUFDd0MsWUFBWSxDQUFDLE1BQU0sQ0FBQztVQUNyQztRQUNKO1FBQ0EvQyxPQUFPLENBQUNDLEdBQUcsQ0FBQ1IsSUFBSSxDQUFDO01BQ3JCO0lBQ0osQ0FBQyxDQUFDO0VBQ04sQ0FBQztBQUVMLENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvanMvbW9kdWxlSnMvb3JkZXIuanM/NTYxZiJdLCJzb3VyY2VzQ29udGVudCI6WyJ3aW5kb3cuT3JkZXJNb2R1bERlZmF1bHQ9e1xyXG4gICAgYWN0aW9uRnVuY3Rpb246IGZ1bmN0aW9uICgpIHt9LFxyXG59XHJcbmNsYXNzIERhdGFNb2RlbE9yZGVyIGV4dGVuZHMgRGF0YU1vZGVse1xyXG5cclxuICAgIC8qXHJcbiAgICAgKiBDb25zdHJ1Y3RvclxyXG4gICAgICovXHJcbiAgICBjb25zdHJ1Y3RvciAoZGF0YSxvcHRpb25zKSB7XHJcbiAgICAgICAgc3VwZXIoZGF0YSxvcHRpb25zKVxyXG4gICAgICAgIGlmKHR5cGVvZiB0aGlzLnByb2R1Y3RTZWxlY3RlZCA9PT1cInVuZGVmaW5lZFwiKXtcclxuICAgICAgICAgICAgdGhpcy5wcm9kdWN0U2VsZWN0ZWQ9e307XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmKHR5cGVvZiB0aGlzLnByb2R1Y3RDb21tZW50ID09PVwidW5kZWZpbmVkXCIpe1xyXG4gICAgICAgICAgICB0aGlzLnByb2R1Y3RDb21tZW50PXt9O1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zb2xlLmxvZyh0aGlzLmNvbnN0cnVjdG9yLm5hbWUrJyBjb25zdHJ1Y3RvciBjYWxsZWQnKTtcclxuICAgIH07XHJcbn07XHJcbndpbmRvdy5EYXRhTW9kZWxPcmRlcj1EYXRhTW9kZWxPcmRlcjtcclxuXHJcbndpbmRvdy5TdGVwcGVyPWZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAvKlxyXG4gICAgICogVmFyaWFibGVzIGFjY2Vzc2libGVcclxuICAgICAqIGluIHRoZSBjbGFzc1xyXG4gICAgICovXHJcbiAgICBsZXQgT3B0cyA9IHtcclxuICAgICAgICBjb21wbGV0ZTogWydzdXBwbGllciddLFxyXG4gICAgICAgIGF2YWlsYWJsZTogWydzdXBwbGllcicsICdwYXJhbWV0ZXInLCAncHJvZHVjdFNlbGVjdCcsICdpbnZvaWNlJywgJ3NlbmQnXSxcclxuICAgICAgICBlbmFibGU6IFsnc3VwcGxpZXInLCAnaW52b2ljZSddLFxyXG4gICAgICAgIGxvYWQ6IFtdLFxyXG4gICAgICAgIGV4Y2x1ZGVMb2FkZWQ6WydpbnZvaWNlJywnc2VuZCddLFxyXG4gICAgICAgIGxvYWRlZDogW10sXHJcbiAgICAgICAgYWN0aXZlOiBmYWxzZSxcclxuICAgICAgICBVUkw6IHtcclxuICAgICAgICAgICAgY3JlYXRlOiAnJyxcclxuICAgICAgICB9LFxyXG4gICAgICAgIFVybERhdGE6ZmFsc2UsXHJcbiAgICAgICAgb25BZnRlckxvYWQ6ZnVuY3Rpb24gKCkge30sXHJcbiAgICAgICAgb25BZnRlckFjdGl2YXRlOmZ1bmN0aW9uICgpIHt9LFxyXG4gICAgICAgIGF1dG9DYWxsYmFjazp7XHJcbiAgICAgICAgICAgICdpbnZvaWNlJzp7XHJcbiAgICAgICAgICAgICAgICBvbkFmdGVyQWN0aXZhdGU6ZnVuY3Rpb24gKCkge30sXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICdzZW5kJzp7XHJcbiAgICAgICAgICAgICAgICBvbkFmdGVyQWN0aXZhdGU6ZnVuY3Rpb24gKCkge30sXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgfSxcclxuICAgICAgICBub3dMb2FkZWQ6ZmFsc2UsXHJcblxyXG4gICAgfTtcclxuXHJcbiAgICBsZXQgcm9vdD10aGlzO1xyXG4gICAgLypcclxuICAgICAqIENvbnN0cnVjdG9yXHJcbiAgICAgKi9cclxuICAgIHRoaXMuY29uc3RydWN0ID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcclxuICAgICAgICAkLmV4dGVuZChPcHRzLCBvcHRpb25zKTtcclxuICAgIH07XHJcblxyXG4gICAgdGhpcy5nZXRPcHRzPWZ1bmN0aW9uKCl7XHJcbiAgICAgICAgcmV0dXJuIE9wdHM7XHJcbiAgICB9XHJcbiAgICB0aGlzLnNldE9wdHM9ZnVuY3Rpb24ob3B0aW9ucyl7XHJcbiAgICAgICAgJC5leHRlbmQoT3B0cywgb3B0aW9ucyk7XHJcbiAgICB9XHJcblxyXG5cclxuXHJcbiAgICB0aGlzLmluaXQ9ZnVuY3Rpb24gKG9wdGlvbnMpe1xyXG4gICAgICAgICQuZXh0ZW5kKE9wdHMsIG9wdGlvbnMpO1xyXG5cclxuICAgICAgICBkZWJ1ZyhPcHRzKTtcclxuICAgICAgICAkKCcuc3RlcCcpLmVhY2goZnVuY3Rpb24oKXtcclxuICAgICAgICAgICAgbGV0IHN0ZXBOYW1lPSQodGhpcykuZGF0YSgnc3RlcG5hbWUnKTtcclxuICAgICAgICAgICAgaWYoT3B0cy5jb21wbGV0ZS5pbmNsdWRlcyhzdGVwTmFtZSkpe1xyXG4gICAgICAgICAgICAgICAgcm9vdC5zZXRDb21wbGV0ZWQoc3RlcE5hbWUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmKE9wdHMuZW5hYmxlLmluY2x1ZGVzKHN0ZXBOYW1lKSl7XHJcbiAgICAgICAgICAgICAgICByb290LnNldEVuYWJsZWQoc3RlcE5hbWUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmKE9wdHMubG9hZC5pbmNsdWRlcyhzdGVwTmFtZSkpe1xyXG4gICAgICAgICAgICAgICAgcm9vdC5sb2FkU3RlcENvbnRlbnQoc3RlcE5hbWUpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZihPcHRzLmFjdGl2ZT09PXN0ZXBOYW1lKXtcclxuICAgICAgICAgICAgICAgIHJvb3Quc2V0QWN0aXZlKHN0ZXBOYW1lKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJvb3QuYmluZENsaWNrQWN0aW9uKCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5iaW5kQ2xpY2tBY3Rpb249ZnVuY3Rpb24gKCl7XHJcbiAgICAgICAgbGV0IHN0ZXBDbGlja0J1dHRvbnM9JCgnLnN0ZXBDbGljaycpO1xyXG4gICAgICAgIHN0ZXBDbGlja0J1dHRvbnMub2ZmKCdjbGljaycpO1xyXG4gICAgICAgIHN0ZXBDbGlja0J1dHRvbnMub24oJ2NsaWNrJyxyb290LnN0ZXBDbGljayk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuc2V0Q29tcGxldGVkPWZ1bmN0aW9uIChzdGVwTmFtZSl7XHJcbiAgICAgICAgY29uc29sZS5sb2coc3RlcE5hbWUrJyBjb21wbGV0ZWQnKTtcclxuICAgICAgICAkKCcuc3RlcFtkYXRhLXN0ZXBOYW1lPVwiJytzdGVwTmFtZSsnXCJdJykuYWRkQ2xhc3MoJ2NvbXBsZXRlZCcpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMudW5zZXRDb21wbGV0ZWQ9ZnVuY3Rpb24gKHN0ZXBOYW1lKXtcclxuICAgICAgICBjb25zb2xlLmxvZyhzdGVwTmFtZSsnIFVuY29tcGxldGVkJyk7XHJcbiAgICAgICAgJCgnLnN0ZXBbZGF0YS1zdGVwTmFtZT1cIicrc3RlcE5hbWUrJ1wiXScpLnJlbW92ZUNsYXNzKCdjb21wbGV0ZWQnKTtcclxuICAgICAgICBPcHRzLmNvbXBsZXRlPWFycmF5UmVtb3ZlKE9wdHMuY29tcGxldGUsc3RlcE5hbWUpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMudW5zZXRFbmFibGVkPWZ1bmN0aW9uIChzdGVwTmFtZSl7XHJcbiAgICAgICAgY29uc29sZS5sb2coc3RlcE5hbWUrJyBVbiBlbmFibGVkJyk7XHJcbiAgICAgICAgJCgnLmNsaWNrJytzdGVwTmFtZSkuY29udGVudHMoKS51bndyYXAoKTtcclxuICAgICAgICBPcHRzLmVuYWJsZT1hcnJheVJlbW92ZShPcHRzLmVuYWJsZSxzdGVwTmFtZSk7XHJcbiAgICB9XHJcbiAgICB0aGlzLnNldEVuYWJsZWQ9ZnVuY3Rpb24gKHN0ZXBOYW1lKXtcclxuICAgICAgICBjb25zb2xlLmxvZyhzdGVwTmFtZSsnIGVuYWJsZWQnKTtcclxuICAgICAgICBsZXQgc3RlcEl0ZW09JCgnLnN0ZXBbZGF0YS1zdGVwTmFtZT1cIicrc3RlcE5hbWUrJ1wiXScpO1xyXG4gICAgICAgIHN0ZXBJdGVtLmh0bWwoJzxhIGNsYXNzPVwic3RlcENsaWNrIGNsaWNrJytzdGVwTmFtZSsnXCIgZGF0YS1zdGVwTmFtZT1cIicrc3RlcE5hbWUrJ1wiIGhyZWY9XCIjXCI+JytzdGVwSXRlbS5odG1sKCkrJzwvYT4nKTtcclxuICAgICAgICByb290LmJpbmRDbGlja0FjdGlvbigpO1xyXG4gICAgICAgIC8vJCgnLnN0ZXBDbGljaycpLmNsaWNrKHJvb3Quc3RlcENsaWNrKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5hZGRFbmFibGVkPWZ1bmN0aW9uKHN0ZXBOYW1lKXtcclxuICAgICAgICBpZighT3B0cy5lbmFibGUuaW5jbHVkZXMoc3RlcE5hbWUpKXtcclxuICAgICAgICAgICAgT3B0cy5lbmFibGUucHVzaChzdGVwTmFtZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJvb3Quc2V0RW5hYmxlZChzdGVwTmFtZSk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5hZGRDb21wbGV0ZWQ9ZnVuY3Rpb24oc3RlcE5hbWUpe1xyXG4gICAgICAgIGlmKCFPcHRzLmNvbXBsZXRlLmluY2x1ZGVzKHN0ZXBOYW1lKSl7XHJcbiAgICAgICAgICAgIE9wdHMuY29tcGxldGUucHVzaChzdGVwTmFtZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJvb3Quc2V0Q29tcGxldGVkKHN0ZXBOYW1lKTtcclxuICAgICAgICByb290LmJpbmRDbGlja0FjdGlvbigpO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICB0aGlzLmxvYWRTdGVwQ29udGVudD1mdW5jdGlvbiAoc3RlcE5hbWUpe1xyXG4gICAgICAgIGxldCBkYXRhPXsndHlwZSc6c3RlcE5hbWV9O1xyXG4gICAgICAgICQuZXh0ZW5kKGRhdGEsIE9wdHMuVXJsRGF0YSk7XHJcblxyXG4gICAgICAgICQuYWpheCh7XHJcbiAgICAgICAgICAgIGFzeW5jOiB0cnVlLFxyXG4gICAgICAgICAgICB0eXBlOiBcIkdFVFwiLFxyXG4gICAgICAgICAgICB1cmw6IE9wdHMuVVJMLmNyZWF0ZSxcclxuICAgICAgICAgICAgZGF0YTogZGF0YSxcclxuICAgICAgICAgICAgY2FjaGU6IGZhbHNlLFxyXG4gICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbihyZXN1bHQpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGxldCBjb250YWluZXI9JCgnLlNDJytzdGVwTmFtZS5jYXBpdGFsaXplKCkpO1xyXG4gICAgICAgICAgICAgICAgaWYoJC5pbkFycmF5KHN0ZXBOYW1lLE9wdHMuZXhjbHVkZUxvYWRlZCk9PS0xKXtcclxuICAgICAgICAgICAgICAgICAgICBPcHRzLmxvYWRlZC5wdXNoKHN0ZXBOYW1lKTtcclxuICAgICAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdleGNsdWRlZCBWaWV3Jyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBjb250YWluZXIuaHRtbChyZXN1bHQpO1xyXG4gICAgICAgICAgICAgICAgaWYoT3B0cy5ub3dMb2FkZWQpe1xyXG4gICAgICAgICAgICAgICAgICAgIE9wdHMubm93TG9hZGVkKHN0ZXBOYW1lKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIE9wdHMub25BZnRlckxvYWQoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuY2xlYXJMb2FkZWQ9ZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIE9wdHMubG9hZGVkPVsnc3VwcGxpZXInXTtcclxuICAgICAgICAkKCcuc3RlcENvbnRhaW5lcicpLmVhY2goZnVuY3Rpb24oKXtcclxuLypcclxuICAgICAgICAgICAgY29uc29sZS5sb2codGhpcy5jbGFzc0xpc3QpO1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyh0aGlzLmNsYXNzTGlzdC5jb250YWlucygnU0NTdXBwbGllcicpKTtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coJCh0aGlzKS5hdHRyKCdjbGFzcycpKTtcclxuKi9cclxuICAgICAgICAgICAgaWYoIXRoaXMuY2xhc3NMaXN0LmNvbnRhaW5zKCdTQ1N1cHBsaWVyJykpe1xyXG4gICAgICAgICAgICAgICAgJCh0aGlzKS5odG1sKCcnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuc2V0QWN0aXZlRmluaXNoPWZ1bmN0aW9uKHN0ZXBOYW1lKXtcclxuICAgICAgICBsZXQgY29udGFpbmVyPSQoJy5TQycrc3RlcE5hbWUuY2FwaXRhbGl6ZSgpKTtcclxuICAgICAgICBpZihzdGVwTmFtZT09PSdwcm9kdWN0U2VsZWN0Jyl7XHJcbiAgICAgICAgICAgICQoJy5jb250YWluZXJTdGVwcGVyJykuYWRkQ2xhc3MoJ2FjdGl2ZVNpZGVCYXInKTtcclxuICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgJCgnLmNvbnRhaW5lclN0ZXBwZXInKS5yZW1vdmVDbGFzcygnYWN0aXZlU2lkZUJhcicpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBkZWJ1Zygnc2V0QWN0aXZlRmluaXNoIHNob3c6JytzdGVwTmFtZSk7XHJcbiAgICAgICAgY29udGFpbmVyLnNob3coKTtcclxuICAgICAgICBPcHRzLm5vd0xvYWRlZD1mYWxzZTtcclxuICAgICAgICByb290LmFjdGl2ZT1zdGVwTmFtZTtcclxuICAgICAgICBPcHRzLm9uQWZ0ZXJBY3RpdmF0ZSgpO1xyXG4gICAgICAgIGlmKHR5cGVvZiBPcHRzLmF1dG9DYWxsYmFja1tzdGVwTmFtZV0hPT0ndW5kZWZpbmVkJyApe1xyXG4gICAgICAgICAgICBPcHRzLmF1dG9DYWxsYmFja1tzdGVwTmFtZV0ub25BZnRlckFjdGl2YXRlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgdGhpcy5zZXRBY3RpdmU9ZnVuY3Rpb24oc3RlcE5hbWUpe1xyXG4gICAgICAgICQoJy5zdGVwQ29udGFpbmVyJykuaGlkZSgpO1xyXG4gICAgICAgIGlmKCFPcHRzLmxvYWRlZC5pbmNsdWRlcyhzdGVwTmFtZSkpe1xyXG4gICAgICAgICAgICByb290LmxvYWRTdGVwQ29udGVudChzdGVwTmFtZSk7XHJcbiAgICAgICAgICAgIE9wdHMubm93TG9hZGVkPXRoaXMuc2V0QWN0aXZlRmluaXNoO1xyXG4gICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICB0aGlzLnNldEFjdGl2ZUZpbmlzaChzdGVwTmFtZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuc3RlcENsaWNrPWZ1bmN0aW9uKGV2ZW50KXtcclxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgIGxldCBzdGVwTmFtZT0kKGV2ZW50LmN1cnJlbnRUYXJnZXQpLmRhdGEoJ3N0ZXBuYW1lJyk7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ3NldEFjdGl2ZTonK3N0ZXBOYW1lKTtcclxuICAgICAgICByb290LnNldEFjdGl2ZShzdGVwTmFtZSk7XHJcbiAgICB9XHJcbn1cclxuXHJcbndpbmRvdy5PcmRlck1vZHVsZSA9IGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAvKlxyXG4gICAgICogVmFyaWFibGVzIGFjY2Vzc2libGVcclxuICAgICAqIGluIHRoZSBjbGFzc1xyXG4gICAgICovXHJcbiAgICBsZXQgT3B0cyA9IHtcclxuICAgICAgICB0ZXN0TW9kZTogZmFsc2UsXHJcbiAgICAgICAgbmVlZFN0ZXBwZXI6dHJ1ZSxcclxuICAgICAgICBDU1NTZWxlY3RvckZvcm06Jy5vcmRlclBhcmFtZXRlckZvcm0nLFxyXG4gICAgICAgIGRlZmF1bHREZWxpdmVyeURhdGU6JycsXHJcbiAgICAgICAgZGF0YVN5bmNQYXVzZVRpbWU6NTAwLFxyXG4gICAgICAgIHRva2VuOm51bGwsXHJcbiAgICAgICAgVVJMOiB7XHJcbiAgICAgICAgICAgIHJvb3Q6bnVsbCxcclxuICAgICAgICAgICAgZ2V0RGF0YVRhYmxlQ29udGVudFByb2R1Y3RMaXN0Om51bGwsXHJcbiAgICAgICAgICAgIGNoZWNrUmVhZHlUb1NlbmQ6bnVsbCxcclxuICAgICAgICAgICAgaW5kZXg6bnVsbCxcclxuICAgICAgICAgICAgc2hvdzpudWxsLFxyXG4gICAgICAgICAgICBlZGl0Om51bGwsXHJcbiAgICAgICAgICAgIGNyZWF0ZTogbnVsbCxcclxuICAgICAgICAgICAgc3RvcmU6IG51bGwsXHJcbiAgICAgICAgICAgIHVwZGF0ZTpudWxsLFxyXG4gICAgICAgICAgICBkZXN0cm95Om51bGwsXHJcbiAgICAgICAgICAgIHRvZ2dsZUZhdm9yaXRlczpudWxsLFxyXG4gICAgICAgIH0sXHJcbiAgICB9O1xyXG5cclxuICAgIGNvbnN0IFB1YmxpY1ZhciA9IHt9O1xyXG4gICAgbGV0IFB1YmxpY1ZhcjIgPSB7J2FzZCc6ICcyMSd9O1xyXG4gICAgbGV0IEFwaVRva2VuID0gbnVsbDtcclxuICAgIGxldCBPcmRlcj1udWxsO1xyXG4gICAgbGV0IHJvb3QgPSB0aGlzO1xyXG4gICAgbGV0IHZpZXdJbmljaWFsaXplZD1bXTtcclxuXHJcbiAgICB0aGlzLnNldE9wdHMgPSBmdW5jdGlvbiAob3B0aW9ucykge1xyXG4gICAgICAgICQuZXh0ZW5kKE9wdHMsIG9wdGlvbnMpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuZ2V0T3B0cyA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gT3B0cztcclxuICAgIH1cclxuICAgIHRoaXMuY2xpY2tPcmRlckVkaXQ9ZnVuY3Rpb24gKGRhdGEpe1xyXG4gICAgICAgIGRlYnVnKCdjbGlja0VkaXQnKTtcclxuICAgICAgICBkZWJ1ZyhkYXRhKTtcclxuICAgICAgICBsZXQgYWpheFVybD1PcHRzLlVSTC5lZGl0LnJlcGxhY2UoJyVpZCUnLGRhdGEuaWQpO1xyXG4gICAgICAgIEFQUC5sb2FkTWFpbkNvbnRlbnQoYWpheFVybCk7XHJcbi8qICAgICAgICBsZXQgYWpheERhdGE9e307XHJcbiAgICAgICAgYWpheERhdGEuX3Rva2VuPU9wdHMudG9rZW47XHJcbiAgICAgICAgJC5leHRlbmQoYWpheERhdGEsT3JkZXIpO1xyXG4gICAgICAgIGxldCBhamF4VXJsPU9wdHMuVVJMLmVkaXQucmVwbGFjZSgnJWlkJScsZGF0YS5pZCk7XHJcbiAgICAgICAgJC5hamF4KHtcclxuICAgICAgICAgICAgdXJsOiBhamF4VXJsLFxyXG4gICAgICAgICAgICBtZXRob2Q6J0dFVCcsXHJcbiAgICAgICAgICAgIGRhdGE6YWpheERhdGEsXHJcbiAgICAgICAgICAgIHN1Y2Nlc3M6ZnVuY3Rpb24gKHJlc3BvbnNlKSB7XHJcbiAgICAgICAgICAgICAgICBpZihyZXNwb25zZS5zdWNjZXNzKXtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgb3JkZXJEYXRhPXJlc3BvbnNlLmRhdGE7XHJcbiAgICAgICAgICAgICAgICAgICAgb3JkZXJEYXRhLnN1cHBsaWVySWQ9b3JkZXJEYXRhLnN1cHBsaWVyX2lkO1xyXG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZShvcmRlckRhdGEuc3VwcGxpZXJfaWQpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJvb3QuaW5pdE9yZGVyKG9yZGVyRGF0YSk7XHJcbiAgICAgICAgICAgICAgICAgICAgcm9vdC5pbml0U3RlcHBlcigpO1xyXG4gICAgICAgICAgICAgICAgICAgIC8vcm9vdC5hZnRlck9yZGVyU2V0U3VwcGxpZXJPayhkYXRhLmRhdGEpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7Ki9cclxuXHJcblxyXG4gICAgfVxyXG4gICAgdGhpcy5hZnRlck9yZGVyRGVsZXRlZD1mdW5jdGlvbiAoZGF0YSl7XHJcbiAgICAgICAgaWYoZGF0YS5zdWNjZXNzPT10cnVlKXtcclxuICAgICAgICAgICAgZGVidWcoJ09yZGVyIGRlbGV0ZSBzdWNjZXNzJyk7XHJcbiAgICAgICAgICAgIEFQUC5sb2FkTWFpbkNvbnRlbnQoT3B0cy5VUkwuaW5kZXgpO1xyXG4gICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICBUb2FzdC5jcmVhdGUoXCJFcnJvciBkZWxldGVkICFcIiwnJywgVE9BU1RfU1RBVFVTLkRBTkdFUiw1MDAwKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICB0aGlzLmNsaWNrT3JkZXJEZWxldGVDb25maXJtZWQ9ZnVuY3Rpb24gKGV2ZW50KXtcclxuICAgICAgICBkZWJ1ZygnY2xpY2tPcmRlckRlbGV0ZUNvbmZpcm1lZCcpO1xyXG4gICAgICAgIGRlYnVnKGV2ZW50KTtcclxuICAgICAgICBkZWJ1ZyhldmVudC5kYXRhKTtcclxuICAgICAgICAkKCcjZGlhbG9nTW9kYWwnKS5tb2RhbCgnaGlkZScpO1xyXG4gICAgICAgIGxldCBhamF4RGF0YT17fTtcclxuICAgICAgICBhamF4RGF0YS5fdG9rZW49T3B0cy50b2tlbjtcclxuICAgICAgICBsZXQgYWpheFVybD1PcHRzLlVSTC5kZXN0cm95LnJlcGxhY2UoJyVpZCUnLGV2ZW50LmRhdGEuaWQpO1xyXG4gICAgICAgICQuYWpheCh7XHJcbiAgICAgICAgICAgIHVybDphamF4VXJsLFxyXG4gICAgICAgICAgICBkYXRhOmFqYXhEYXRhLFxyXG4gICAgICAgICAgICBtZXRob2Q6XCJERUxFVEVcIixcclxuICAgICAgICAgICAgc3VjY2Vzczpyb290LmFmdGVyT3JkZXJEZWxldGVkLFxyXG4gICAgICAgICAgICAvL2Vycm9yOmFqYXhFcnJvckhhbmRsZXJcclxuICAgICAgICB9KTtcclxuXHJcbiAgICB9XHJcbiAgICB0aGlzLmluaXRWaWV3T3JkZXJTZWxlY3Q9ZnVuY3Rpb24gKCl7XHJcbiAgICAgICAgZGVidWcoJ2NhbGxlZCBpbml0Vmlld09yZGVyU2VsZWN0ICcpO1xyXG4gICAgICAgICQoJy5vcmRlcnNTZWxlY3RUYWJsZSBidXR0b24nKS5vZmYoJ2NsaWNrJyk7XHJcbiAgICAgICAgJCgnLm9yZGVyc1NlbGVjdFRhYmxlIGJ1dHRvbicpLm9uKCdjbGljaycsZnVuY3Rpb24gKCl7XHJcbiAgICAgICAgICAgIGxldCBhY3Rpb249JCh0aGlzKS5kYXRhKCdhY3Rpb24nKTtcclxuICAgICAgICAgICAgbGV0IG9yZGVySWQ9JCgkKHRoaXMpLmNsb3Nlc3QoJ3RyJylbMF0pLmRhdGEoJ29yZGVyaWQnKTtcclxuICAgICAgICAgICAgZGVidWcoYWN0aW9uKTtcclxuICAgICAgICAgICAgZGVidWcob3JkZXJJZCk7XHJcblxyXG4gICAgICAgICAgICBpZihhY3Rpb249PSdkZWxldGUnKXtcclxuICAgICAgICAgICAgICAgICQoJyNkaWFsb2dNb2RhbCcpLm9uKCdzaG93LmJzLm1vZGFsJywgZnVuY3Rpb24gKGV2ZW50KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gSWYgbmVjZXNzYXJ5LCB5b3UgY291bGQgaW5pdGlhdGUgYW4gQUpBWCByZXF1ZXN0IGhlcmUgKGFuZCB0aGVuIGRvIHRoZSB1cGRhdGluZyBpbiBhIGNhbGxiYWNrKS5cclxuICAgICAgICAgICAgICAgICAgICAvLyBVcGRhdGUgdGhlIG1vZGFsJ3MgY29udGVudC4gV2UnbGwgdXNlIGpRdWVyeSBoZXJlLCBidXQgeW91IGNvdWxkIHVzZSBhIGRhdGEgYmluZGluZyBsaWJyYXJ5IG9yIG90aGVyIG1ldGhvZHMgaW5zdGVhZC5cclxuICAgICAgICAgICAgICAgICAgICB2YXIgbW9kYWwgPSAkKHRoaXMpO1xyXG4gICAgICAgICAgICAgICAgICAgIG1vZGFsLmZpbmQoJy5tb2RhbC10aXRsZScpLnRleHQoJ01lZ2VyxZFzw610w6lzICcpO1xyXG4gICAgICAgICAgICAgICAgICAgIG1vZGFsLmZpbmQoJy5tb2RhbC1ib2R5JykudGV4dCgnQml6dG9zYW4gdMO2cmxpIGEgbWVncmVuZGVsw6lzdD8nKTtcclxuICAgICAgICAgICAgICAgICAgICBtb2RhbC5maW5kKCcuYnV0dG9uWWVzJykub2ZmKCdjbGljaycpO1xyXG4gICAgICAgICAgICAgICAgICAgIG1vZGFsLmZpbmQoJy5idXR0b25ZZXMnKS5vbignY2xpY2snLHtpZDpvcmRlcklkfSxyb290LmNsaWNrT3JkZXJEZWxldGVDb25maXJtZWQpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAkKCcjZGlhbG9nTW9kYWwnKS5tb2RhbCgnc2hvdycpO1xyXG4gICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgIHJvb3QuY2xpY2tPcmRlckVkaXQoe2lkOm9yZGVySWR9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgICQoJy5idXR0b25OZXcnKS5vZmYoJ2NsaWNrJyk7XHJcbiAgICAgICAgJCgnLmJ1dHRvbk5ldycpLm9uKCdjbGljaycsZnVuY3Rpb24gKCl7XHJcbiAgICAgICAgICAgIEFQUC5sb2FkTWFpbkNvbnRlbnQoT3B0cy5VUkwuaW5kZXgsJ2ZvcmNlPXRydWUnKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICB9XHJcbiAgICB0aGlzLmluaXRTdGVwcGVyPWZ1bmN0aW9uICgpe1xyXG4gICAgICAgIGRlYnVnKE9yZGVyLmdldERhdGEoKSk7XHJcbiAgICAgICAgdmlld0luaWNpYWxpemVkPVtdO1xyXG4gICAgICAgICQoJy5zdGF0dXNOYW1lUGxhY2UnKS50ZXh0KCdOaW5jcyBlbGvDvGxkdmUnKTtcclxuICAgICAgICAkKCcuc3RhdHVzTmFtZVBsYWNlJykuYWRkQ2xhc3MoJ3N0YXR1c0JsaW5rJyk7XHJcbiAgICAgICAgcm9vdC5zZXREZWxpdmVyeURhdGUoJy0nKTtcclxuICAgICAgICByb290LnNldFN1cHBsaWVyKCctJyk7XHJcblxyXG4gICAgICAgIGxldCB1bkVuYWJsZWQ9WydwYXJhbWV0ZXInLCAncHJvZHVjdFNlbGVjdCcsICdpbnZvaWNlJywgJ3NlbmQnXTtcclxuICAgICAgICAkLmVhY2godW5FbmFibGVkLGZ1bmN0aW9uIChpbmRleCx2YWx1ZSkge1xyXG4gICAgICAgICAgICByb290LlN0ZXBwZXIudW5zZXRFbmFibGVkKHZhbHVlKTtcclxuICAgICAgICAgICAgcm9vdC5TdGVwcGVyLnVuc2V0Q29tcGxldGVkKHZhbHVlKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgZGVidWcocm9vdC5TdGVwcGVyLmdldE9wdHMoKVsnYXZhaWxhYmxlJ10pO1xyXG4gICAgICAgIGRlYnVnKE9yZGVyLmdldERhdGEoKVsnb3JkZXJTdGF0dXMnXSk7XHJcblxyXG4gICAgICAgIGxldCBzdGVwQWN0aXZlPSdzdXBwbGllcic7XHJcbiAgICAgICAgbGV0IHN0ZXBDb21wbGV0ZT1bJ3N1cHBsaWVyJ107XHJcbiAgICAgICAgbGV0IHN0ZXBFbmFibGU9W107XHJcbiAgICAgICAgbGV0IHN0ZXBPbkFmdGVyQWN0aXZhdGU9ZnVuY3Rpb24gKCl7fTtcclxuXHJcbiAgICAgICAgbGV0IGF2YWxhaWJsZVN0ZXBzPXJvb3QuU3RlcHBlci5nZXRPcHRzKClbJ2F2YWlsYWJsZSddO1xyXG4gICAgICAgIGxldCBzdGVwVXJsRGF0YT1mYWxzZTtcclxuICAgICAgICBsZXQgc3RlcEF1dG9DYWxsYmFjaz1bXTtcclxuICAgICAgICBmb3IgKGxldCBzdGVwTmFtZSBvZiBhdmFsYWlibGVTdGVwcykge1xyXG4gICAgICAgICAgICBzdGVwT25BZnRlckFjdGl2YXRlPXRoaXNbJ2luaXRWaWV3JytzdGVwTmFtZS5jYXBpdGFsaXplKCldO1xyXG4gICAgICAgICAgICBsZXQgaXRlbT17fTtcclxuICAgICAgICAgICAgaXRlbVsnb25BZnRlckFjdGl2YXRlJ109c3RlcE9uQWZ0ZXJBY3RpdmF0ZTtcclxuICAgICAgICAgICAgc3RlcEF1dG9DYWxsYmFja1tzdGVwTmFtZV09aXRlbTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZGVidWcoc3RlcEF1dG9DYWxsYmFjayk7XHJcbiAgICAgICAgZGVidWcoT3JkZXIuZ2V0RGF0YSgpWydpZCddKTtcclxuICAgICAgICBpZihPcmRlci5nZXREYXRhKClbJ2lkJ10+MCl7XHJcbiAgICAgICAgICAgIGRlYnVnKCdoYWpyYScpO1xyXG4gICAgICAgICAgICBkZWJ1ZyhPcmRlci5nZXREYXRhKCkpO1xyXG4gICAgICAgICAgICBpZihPcmRlci5nZXREYXRhKClbJ2RlbGl2ZXJ5RGF0ZSddKXtcclxuICAgICAgICAgICAgICAgIHJvb3Quc2V0RGVsaXZlcnlEYXRlKE9yZGVyLmdldERhdGEoKVsnZGVsaXZlcnlEYXRlJ10pO1xyXG4gICAgICAgICAgICAgICAgLypcclxuICAgICAgICAgICAgICAgIEB0b2RvOiB3ZWVrbHktdCBiZWFsbGl0YW5pXHJcbiAgICAgICAgICAgICAgICAgKi9cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZihPcmRlci5nZXREYXRhKClbJ3N1cHBsaWVyTmFtZSddKXtcclxuICAgICAgICAgICAgICAgIHJvb3Quc2V0U3VwcGxpZXIoT3JkZXIuZ2V0RGF0YSgpWydzdXBwbGllck5hbWUnXSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgc3RlcFVybERhdGE9eydzdXBwbGllcklkJzpPcmRlci5zdXBwbGllcklkLGlkOk9yZGVyLmlkfTtcclxuICAgICAgICAgICAgZm9yIChsZXQgc3RlcE5hbWUgb2YgYXZhbGFpYmxlU3RlcHMpIHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKHN0ZXBOYW1lKTtcclxuICAgICAgICAgICAgICAgIHN0ZXBDb21wbGV0ZS5wdXNoKHN0ZXBOYW1lKTtcclxuICAgICAgICAgICAgICAgIHN0ZXBFbmFibGUucHVzaChzdGVwTmFtZSk7XHJcbiAgICAgICAgICAgICAgICBpZihPcmRlci5nZXREYXRhKClbJ29yZGVyU3RhdHVzJ109PXN0ZXBOYW1lKXtcclxuICAgICAgICAgICAgICAgICAgICBzdGVwQWN0aXZlPXN0ZXBOYW1lO1xyXG4gICAgICAgICAgICAgICAgICAgIC8qXHJcbiAgICAgICAgICAgICAgICAgICAgZGVidWcoJ2luaXRWaWV3JytzdGVwTmFtZS5jYXBpdGFsaXplKCkpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmKHN0ZXBOYW1lIT09J2ludm9pY2UnICYmIHN0ZXBOYW1lIT09J3NlbmQnKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3RlcE9uQWZ0ZXJBY3RpdmF0ZT10aGlzWydpbml0Vmlldycrc3RlcE5hbWUuY2FwaXRhbGl6ZSgpXTtcclxuICAgICAgICAgICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3RlcE9uQWZ0ZXJBY3RpdmF0ZT1mdW5jdGlvbiAoKXt9O1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAqL1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4vKlxyXG4gICAgICAgICAgICAvL3JlZmFjdG9yZWQgZm9yIGxvb3BcclxuICAgICAgICAgICAgdmFyIEJyZWFrRXhjZXB0aW9uID0ge307XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBhdmFsYWlibGVTdGVwcy5mb3JFYWNoKGZ1bmN0aW9uKHN0ZXBOYW1lKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coc3RlcE5hbWUpO1xyXG4gICAgICAgICAgICAgICAgICAgIHN0ZXBDb21wbGV0ZS5wdXNoKHN0ZXBOYW1lKTtcclxuICAgICAgICAgICAgICAgICAgICBzdGVwRW5hYmxlLnB1c2goc3RlcE5hbWUpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmKE9yZGVyLmdldERhdGEoKVsnb3JkZXJTdGF0dXMnXT09c3RlcE5hbWUpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGVwQWN0aXZlPXN0ZXBOYW1lO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBCcmVha0V4Y2VwdGlvbjtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIGlmIChlICE9PSBCcmVha0V4Y2VwdGlvbikgdGhyb3cgZTtcclxuICAgICAgICAgICAgfSovXHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcm9vdC5TdGVwcGVyLmluaXQoe1xyXG4gICAgICAgICAgICBjb21wbGV0ZTpzdGVwQ29tcGxldGUsXHJcbiAgICAgICAgICAgIGVuYWJsZTpzdGVwRW5hYmxlLFxyXG4gICAgICAgICAgICBsb2FkZWQ6W10sXHJcbiAgICAgICAgICAgIGFjdGl2ZTogc3RlcEFjdGl2ZSxcclxuICAgICAgICAgICAgVVJMOiB7XHJcbiAgICAgICAgICAgICAgICBjcmVhdGU6IE9wdHMuVVJMLmNyZWF0ZSxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgVXJsRGF0YTpzdGVwVXJsRGF0YSxcclxuICAgICAgICAgICAgb25BZnRlckFjdGl2YXRlOnN0ZXBPbkFmdGVyQWN0aXZhdGUsXHJcbiAgICAgICAgICAgIGF1dG9DYWxsYmFjazogc3RlcEF1dG9DYWxsYmFjayxcclxuICAgICAgICAgICAgLyp7XHJcbiAgICAgICAgICAgICAgICBpbnZvaWNlOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgb25BZnRlckFjdGl2YXRlOnJvb3QuaW5pdFZpZXdJbnZvaWNlXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgc2VuZDoge1xyXG4gICAgICAgICAgICAgICAgICAgIG9uQWZ0ZXJBY3RpdmF0ZTpyb290LmluaXRWaWV3U2VuZFxyXG4gICAgICAgICAgICAgICAgfSxcclxuXHJcbiAgICAgICAgICAgIH0qL1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuaW5pdE9yZGVyPWZ1bmN0aW9uIChkYXRhKXtcclxuICAgICAgICBPcmRlcj1uZXcgRGF0YU1vZGVsT3JkZXIoZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5pbml0ID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcclxuICAgICAgICBkZWJ1ZygnT3JkZXJNb2R1bCBpbml0IGNhbGxlZCcpO1xyXG4gICAgICAgICQuZXh0ZW5kKE9wdHMsIHdpbmRvdy5PcmRlck1vZHVsRGVmYXVsdCwgb3B0aW9ucyk7XHJcbiAgICAgICAgT3JkZXI9bmV3IERhdGFNb2RlbE9yZGVyKCk7XHJcbiAgICAgICAgaWYoT3B0cy5uZWVkU3RlcHBlcil7XHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdGhpcy5TdGVwcGVyID09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLlN0ZXBwZXI9bmV3IFN0ZXBwZXIoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZihPcHRzLnRlc3RNb2RlKXtcclxuICAgICAgICAgICAgcmV0dXJuIHJvb3QudGVzdE1vZGUoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5zZXRTdXBwbGllcj1mdW5jdGlvbiAoc3VwcGxpZXJOYW1lLHN1cHBsaWVySWQpe1xyXG4gICAgICAgaWYoc3VwcGxpZXJOYW1lKXtcclxuICAgICAgICAgICAkKCcuc3VwcGxpZXJOYW1lUGxhY2UnKS50ZXh0KHN1cHBsaWVyTmFtZSk7XHJcbiAgICAgICB9XHJcbiAgICAgICBpZihzdXBwbGllcklkKXtcclxuICAgICAgICAgICBPcmRlci5zZXREYXRhKHtzdXBwbGllcklkOnN1cHBsaWVySWR9KTtcclxuICAgICAgICAgICByb290LlN0ZXBwZXIuc2V0T3B0cyh7J1VybERhdGEnOnsnc3VwcGxpZXJJZCc6c3VwcGxpZXJJZH19KTtcclxuICAgICAgIH1cclxuICAgIH1cclxuICAgIHRoaXMuc2V0RGVsaXZlcnlEYXRlPWZ1bmN0aW9uIChkYXRlVGV4dCxkYXRlVGV4dFRvKXtcclxuICAgICAgICBsZXQgZGF0ZVRleHRIdW1hbj1kYXRlVGV4dC5yZXBsYWNlQWxsKCctJywnLicpKycuJztcclxuICAgICAgICBpZihkYXRlVGV4dEh1bWFuLmxlbmd0aDw1KXtcclxuICAgICAgICAgICAgJCgnLmRlbGl2ZXJ5RGF0ZVBsYWNlJykudGV4dChkYXRlVGV4dCk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYoZGF0ZVRleHRUbyl7XHJcbiAgICAgICAgICAgIGRhdGVUZXh0SHVtYW4rPScgLSAnK2RhdGVUZXh0VG8ucmVwbGFjZUFsbCgnLScsJy4nKSsnLic7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAkKE9wdHMuQ1NTU2VsZWN0b3JGb3JtKycgLnNlbGVjdGVkRGF0ZVRleHQnKS50ZXh0KGRhdGVUZXh0SHVtYW4pO1xyXG4gICAgICAgICQoJy5kZWxpdmVyeURhdGVQbGFjZScpLnRleHQoZGF0ZVRleHRIdW1hbik7XHJcbiAgICAgICAgJChPcHRzLkNTU1NlbGVjdG9yRm9ybSsnIGlucHV0W25hbWU9XCJkZWxpdmVyeURhdGVcIl0nKS52YWwoZGF0ZVRleHQpO1xyXG4gICAgfVxyXG5cclxuXHJcblxyXG4gICAgdGhpcy5nZXREYXRhPWZ1bmN0aW9uICgpe1xyXG4gICAgICAgIHJldHVybiBPcmRlcjtcclxuICAgIH1cclxuXHJcblxyXG4gICAgdGhpcy5zZXRTdXBwbGllckNvbXBsZXRlZD1mdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ2JpbmdvJyk7XHJcbiAgICAgICAgcm9vdC5pbml0Vmlld1BhcmFtZXRlcigpXHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5hZnRlck9yZGVyU2V0U3VwcGxpZXJPaz1mdW5jdGlvbiAoZGF0YSkge1xyXG4gICAgICAgIFRvYXN0LmNyZWF0ZShcIlN1cHBsaWVyIHNlbGVjdGVkICFcIixkYXRhLnN1cHBsaWVyLm5hbWUgLCBUT0FTVF9TVEFUVVMuSU5GTyw1MDAwKTtcclxuICAgICAgICByb290LnNldFN1cHBsaWVyKGRhdGEuc3VwcGxpZXIubmFtZSxkYXRhLnN1cHBsaWVyLmlkKTtcclxuICAgICAgICBPcmRlci5zZXREYXRhKHtpZDpkYXRhLmlkfSk7XHJcbiAgICAgICAgcm9vdC5TdGVwcGVyLnNldE9wdHMoeydVcmxEYXRhJzp7J3N1cHBsaWVySWQnOk9yZGVyLnN1cHBsaWVySWQsaWQ6T3JkZXIuaWR9fSk7XHJcbiAgICAgICAgLy9yb290LlN0ZXBwZXIuc2V0T3B0cyh7b25BZnRlckxvYWQ6cm9vdC5zZXRTdXBwbGllckNvbXBsZXRlZH0pXHJcbiAgICAgICAgcm9vdC5TdGVwcGVyLnNldEVuYWJsZWQoJ3BhcmFtZXRlcicpO1xyXG4gICAgICAgIHJvb3QuU3RlcHBlci5hZGRDb21wbGV0ZWQoJ3BhcmFtZXRlcicpO1xyXG4gICAgICAgIHJvb3QuU3RlcHBlci5zZXRDb21wbGV0ZWQoJ3BhcmFtZXRlcicpO1xyXG4gICAgICAgIHJvb3QuU3RlcHBlci5zZXRBY3RpdmUoJ3BhcmFtZXRlcicpO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICB0aGlzLmluaXRWaWV3U3VwcGxpZXI9ZnVuY3Rpb24gKCl7XHJcbiAgICAgICAgZGVidWcoJ2NhbGwgaW5pdFZpZXdTdXBwbGllcicpO1xyXG4gICAgICAgIHJvb3QuU3RlcHBlci5zZXRPcHRzKHtvbkFmdGVyTG9hZDpmdW5jdGlvbiAoKXt9fSk7XHJcbiAgICAgICAgJCgnLnN1cHBsaWVySXRlbScpLm9mZignY2xpY2snKTtcclxuICAgICAgICAkKCcuc3VwcGxpZXJJdGVtJykub24oJ2NsaWNrJyxmdW5jdGlvbihldmVudCl7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKE9yZGVyLmdldERhdGEoKSk7XHJcblxyXG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICBsZXQgc3VwcGxpZXJJZD0kKGV2ZW50LmN1cnJlbnRUYXJnZXQpLmRhdGEoJ2lkJyk7XHJcbiAgICAgICAgICAgIGxldCBzdXBwbGllck5hbWU9JChldmVudC5jdXJyZW50VGFyZ2V0KS5maW5kKCdoNS5jYXJkLXRpdGxlJykudGV4dCgpO1xyXG4gICAgICAgICAgICBpZih0eXBlb2YgT3JkZXIuc3VwcGxpZXJJZD09J3VuZGVmaW5lZCcpe1xyXG4gICAgICAgICAgICAgICAgLy9uZXcgb3JkZXJcclxuXHJcbiAgICAgICAgICAgICAgICBsZXQgYWpheERhdGE9e307XHJcbiAgICAgICAgICAgICAgICBhamF4RGF0YS5fdG9rZW49T3B0cy50b2tlbjtcclxuICAgICAgICAgICAgICAgIGFqYXhEYXRhLnN1cHBsaWVySWQ9c3VwcGxpZXJJZDtcclxuICAgICAgICAgICAgICAgIGFqYXhEYXRhLnN0b3JlVHlwZT0nc3VwcGxpZXJTZWxlY3QnO1xyXG4gICAgICAgICAgICAgICAgJC5leHRlbmQoYWpheERhdGEsT3JkZXIpO1xyXG4gICAgICAgICAgICAgICAgJC5hamF4KHtcclxuICAgICAgICAgICAgICAgICAgICB1cmw6IE9wdHMuVVJMLnN0b3JlLFxyXG4gICAgICAgICAgICAgICAgICAgIG1ldGhvZDonUE9TVCcsXHJcbiAgICAgICAgICAgICAgICAgICAgZGF0YTphamF4RGF0YSxcclxuICAgICAgICAgICAgICAgICAgICBzdWNjZXNzOmZ1bmN0aW9uIChkYXRhKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKGRhdGEuc3VjY2Vzcyl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByb290LmFmdGVyT3JkZXJTZXRTdXBwbGllck9rKGRhdGEuZGF0YSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIC8vT3JkZXIuc2V0RGF0YSh7c3VwcGxpZXJJZDpzdXBwbGllcklkfSk7XHJcbiAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgLy9pZGUga2VsbGVuZSBlZ3kgam8ga2lzIGtlcmRlc1xyXG4gICAgICAgICAgICAgICAgaWYoT3JkZXIuc3VwcGxpZXJJZCE9c3VwcGxpZXJJZCl7XHJcbiAgICAgICAgICAgICAgICAgICAgVG9hc3QuY3JlYXRlKFwiU3VwcGxpZXIgY2hhbmdlIHRvIVwiLCBzdXBwbGllck5hbWUsIFRPQVNUX1NUQVRVUy5XQVJOSU5HLDUwMDApO1xyXG4gICAgICAgICAgICAgICAgICAgIHJvb3QuU3RlcHBlci5jbGVhckxvYWRlZCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIE9yZGVyPW5ldyBEYXRhTW9kZWxPcmRlcigpO1xyXG4gICAgICAgICAgICAgICAgICAgIC8vT3JkZXIuc2V0RGF0YSh7c3VwcGxpZXJJZDpzdXBwbGllcklkfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coJy0tLS0tLS0tLS0tJyk7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKHJvb3QuU3RlcHBlci5nZXRPcHRzKCkpO1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZygnLS0tLS0tLS0tLS0nKTtcclxuXHJcbiAgICAgICAgICAgIC8vJCgnLnN1cHBsaWVyTmFtZVBsYWNlJykudGV4dChzdXBwbGllck5hbWUpO1xyXG4gICAgICAgICAgICByb290LnNldFN1cHBsaWVyKHN1cHBsaWVyTmFtZSxzdXBwbGllcklkKTtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coc3VwcGxpZXJOYW1lKVxyXG4gICAgICAgICAgICAvL0B0b2RvOmlkZSBrZWxsIGVneSBtZW50ZXMhXHJcbiAgICAgICAgICAgIC8vQHRvZG86bWVudGVzIGVyZWRlbWVueWVrZXBwZW4gbGVoZXQgdmFsdGFuaVxyXG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICByb290LlN0ZXBwZXIuc2V0T3B0cyh7b25BZnRlckxvYWQ6cm9vdC5zZXRTdXBwbGllckNvbXBsZXRlZH0pXHJcbiAgICAgICAgICAgIHJvb3QuU3RlcHBlci5zZXRFbmFibGVkKCdwYXJhbWV0ZXInKTtcclxuICAgICAgICAgICAgcm9vdC5TdGVwcGVyLmFkZENvbXBsZXRlZCgncGFyYW1ldGVyJyk7XHJcbiAgICAgICAgICAgIHJvb3QuU3RlcHBlci5zZXRDb21wbGV0ZWQoJ3BhcmFtZXRlcicpO1xyXG4gICAgICAgICAgICByb290LlN0ZXBwZXIuc2V0QWN0aXZlKCdwYXJhbWV0ZXInKTtcclxuXHJcblxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuY2hlY2tDb250YWN0TmFtZUZpZWxkPWZ1bmN0aW9uICgpIHtcclxuICAgICAgICBsZXQgQ1NTU2VsZWN0b3JGb3JtPScub3JkZXJQYXJhbWV0ZXJGb3JtJztcclxuICAgICAgICBsZXQgbm9kZT0kKENTU1NlbGVjdG9yRm9ybSsnIGlucHV0W25hbWU9Y29udGFjdE5hbWVdJyk7XHJcbiAgICAgICAgaWYobm9kZS52YWwoKS5sZW5ndGg8Mil7XHJcbiAgICAgICAgICAgIG5vZGUucmVtb3ZlQ2xhc3MoJ2lzLXZhbGlkJyk7XHJcbiAgICAgICAgICAgIG5vZGUuYWRkQ2xhc3MoJ2lzLWludmFsaWQnKTtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICBub2RlLmFkZENsYXNzKCdpcy12YWxpZCcpO1xyXG4gICAgICAgICAgICBub2RlLnJlbW92ZUNsYXNzKCdpcy1pbnZhbGlkJyk7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcblxyXG5cclxuICAgIHRoaXMuc2VuZE9yZGVyRGF0YVRvU2VydmVyPWZ1bmN0aW9uICh1cGRhdGVUeXBlLGNhbGxiYWNrLGVycm9yQ2FsbGJhY2spIHtcclxuICAgICAgICBsZXQgYWpheERhdGE9IHt9O1xyXG4gICAgICAgIGxldCBhamF4VXJsPU9wdHMuVVJMLnN0b3JlO1xyXG4gICAgICAgIGxldCBhamF4TWV0aG9kPVwiUE9TVFwiO1xyXG4gICAgICAgIGlmKE9yZGVyLmlkKXtcclxuICAgICAgICAgICAgYWpheFVybD1PcHRzLlVSTC51cGRhdGUucmVwbGFjZSgnJWlkJScsT3JkZXIuaWQpO1xyXG4gICAgICAgICAgICAvL2FqYXhNZXRob2Q9XCJQVVRcIjtcclxuICAgICAgICAgICAgLy9hamF4RGF0YT1uZXcgRm9ybURhdGEoJChDU1NTZWxlY3RvckZvcm0pWzBdKTtcclxuICAgICAgICAgICAgYWpheERhdGEuX21ldGhvZD0nUFVUJztcclxuICAgICAgICB9XHJcbiAgICAgICAgYWpheERhdGEuX3Rva2VuPU9wdHMudG9rZW47XHJcbiAgICAgICAgYWpheERhdGEudXBkYXRlVHlwZT11cGRhdGVUeXBlO1xyXG4gICAgICAgICQuZXh0ZW5kKGFqYXhEYXRhLE9yZGVyKTtcclxuICAgICAgICBkZWJ1ZyhPcmRlcik7XHJcbiAgICAgICAgZGVidWcoYWpheERhdGEpO1xyXG4gICAgICAgIGRlYnVnKCdhamF4VXJsOicrYWpheFVybCk7XHJcbiAgICAgICAgYWpheERhdGE9anNvblRvRm9ybURhdGEoYWpheERhdGEpO1xyXG4gICAgICAgICQuYWpheCh7XHJcbiAgICAgICAgICAgIHVybDphamF4VXJsLFxyXG4gICAgICAgICAgICBkYXRhOmFqYXhEYXRhLFxyXG4gICAgICAgICAgICB0eXBlOmFqYXhNZXRob2QsXHJcbiAgICAgICAgICAgIGNvbnRlbnRUeXBlOmZhbHNlLFxyXG4gICAgICAgICAgICBwcm9jZXNzRGF0YTogZmFsc2UsXHJcbiAgICAgICAgICAgIHN1Y2Nlc3M6ZnVuY3Rpb24gKGRhdGEpIHtcclxuICAgICAgICAgICAgICAgIGRlYnVnKCdhamF4IHJldHVybmVkIGRhdGEnKTtcclxuICAgICAgICAgICAgICAgIGRlYnVnKGRhdGEpO1xyXG4gICAgICAgICAgICAgICAgaWYoZGF0YS5zdWNjZXNzKXtcclxuICAgICAgICAgICAgICAgICAgICAvL3Jvb3QuYWZ0ZXJPcmRlclNldFN1cHBsaWVyT2soZGF0YS5kYXRhKTtcclxuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhkYXRhKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgZXJyb3I6IGZ1bmN0aW9uICh4aHIsIGFqYXhPcHRpb25zLCB0aHJvd25FcnJvcikge1xyXG4gICAgICAgICAgICAgICAgYWpheEVycm9ySGFuZGxlcih4aHIsIGFqYXhPcHRpb25zLCB0aHJvd25FcnJvcik7XHJcbiAgICAgICAgICAgICAgICBpZih0eXBlb2YgZXJyb3JDYWxsYmFjayE9J3VuZGVmaW5lZCcpe1xyXG4gICAgICAgICAgICAgICAgICAgIGVycm9yQ2FsbGJhY2soeGhyLnJlc3BvbnNlSlNPTik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0sXHJcblxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgIH1cclxuICAgIHRoaXMuYWZ0ZXJPcmRlclNldFBhcmFtZXRlck9rPWZ1bmN0aW9uIChkYXRhKSB7XHJcbiAgICAgICAgZGVidWcoJ2NhbGxlZCBhZnRlck9yZGVyU2V0UGFyYW1ldGVyT2snKTtcclxuICAgICAgICByb290LlN0ZXBwZXIuc2V0T3B0cyh7J1VybERhdGEnOnsnc3VwcGxpZXJJZCc6T3JkZXIuc3VwcGxpZXJJZCwnaWQnOk9yZGVyLmlkfX0pO1xyXG4gICAgICAgIC8vcm9vdC5TdGVwcGVyLnNldE9wdHMoe29uQWZ0ZXJMb2FkOnJvb3Quc2V0UGFyYW1ldGVyQ29tcGxldGVkfSlcclxuICAgICAgICByb290LlN0ZXBwZXIuc2V0RW5hYmxlZCgncHJvZHVjdFNlbGVjdCcpO1xyXG4gICAgICAgIHJvb3QuU3RlcHBlci5hZGRDb21wbGV0ZWQoJ3Byb2R1Y3RTZWxlY3QnKTtcclxuICAgICAgICByb290LlN0ZXBwZXIuc2V0Q29tcGxldGVkKCdwcm9kdWN0U2VsZWN0Jyk7XHJcbiAgICAgICAgcm9vdC5TdGVwcGVyLnNldEFjdGl2ZSgncHJvZHVjdFNlbGVjdCcpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5zZWxlY3RDdXJyZW50V2VlayA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ3NlbGVjdEN1cnJlbnRXZWVrJyk7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcigkKCcudWktZGF0ZXBpY2tlcicpLmZpbmQoJy51aS1kYXRlcGlja2VyLWN1cnJlbnQtZGF5IGEnKSk7XHJcbiAgICAgICAgJCgnLnVpLWRhdGVwaWNrZXInKS5maW5kKCcudWktZGF0ZXBpY2tlci1jdXJyZW50LXNlbGVjdGVkLXdlZWtkYXkgYScpLmFkZENsYXNzKCd1aS1zdGF0ZS1hY3RpdmUnKVxyXG4gICAgfVxyXG4gICAgdGhpcy53ZWVrSG92ZXIgPSBmdW5jdGlvbigpIHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKCdob3ZlciBBY3RpdmUnKTtcclxuICAgICAgICAkKCcudWktZGF0ZXBpY2tlci1jYWxlbmRhciB0cicpLm9mZignbW91c2Vtb3ZlJyk7XHJcbiAgICAgICAgJCgnLnVpLWRhdGVwaWNrZXItY2FsZW5kYXIgdHInKS5vZmYoJ21vdXNlbGVhdmUnKTtcclxuXHJcbiAgICAgICAgJCgnLnVpLWRhdGVwaWNrZXItY2FsZW5kYXIgdHInKS5vbignbW91c2Vtb3ZlJywgZnVuY3Rpb24oKSB7ICQodGhpcykuZmluZCgndGQgYScpLmFkZENsYXNzKCd1aS1zdGF0ZS1ob3ZlcicpOyB9KTtcclxuICAgICAgICAkKCcudWktZGF0ZXBpY2tlci1jYWxlbmRhciB0cicpLm9uKCdtb3VzZWxlYXZlJywgZnVuY3Rpb24oKSB7ICQodGhpcykuZmluZCgndGQgYScpLnJlbW92ZUNsYXNzKCd1aS1zdGF0ZS1ob3ZlcicpOyB9KTtcclxuXHJcbiAgICB9XHJcbiAgICB0aGlzLndlZWtIb3ZlclNsb3cgPSBmdW5jdGlvbigpIHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKCd3ZWVrSG92ZXJTbG93Jyk7XHJcbiAgICAgICAgaWYoJCgnLnVpLWRhdGVwaWNrZXItY2FsZW5kYXIgdHInKS5sZW5ndGg8MSl7XHJcbiAgICAgICAgICAgIHNldFRpbWVvdXQocm9vdC53ZWVrSG92ZXJTbG93LCAxKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICByb290LndlZWtIb3ZlcigpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5pbml0RGF0ZVBpY2tlcj1mdW5jdGlvbiAodHlwZSkge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ2FzZGFzZGFkYWQnKTtcclxuICAgICAgICBjb25zb2xlLmxvZygndGlwdXMnICsgdHlwZSk7XHJcbiAgICAgICAgbGV0IENTU1NlbGVjdG9yRm9ybSA9ICcub3JkZXJQYXJhbWV0ZXJGb3JtJztcclxuICAgICAgICBsZXQgc3RhcnREYXRlPW5ldyBEYXRlKCcxOTAwLTAxLTAxJyk7XHJcbiAgICAgICAgbGV0IGVuZERhdGU9bmV3IERhdGUoJzE5MDAtMDEtMDInKTtcclxuXHJcbiAgICAgICAgJChDU1NTZWxlY3RvckZvcm0gKyAnIC5kYXRlUGlja2VyJykuZGF0ZXBpY2tlcihcImRlc3Ryb3lcIik7XHJcblxyXG4gICAgICAgIGlmICh0eXBlID09ICd3ZWVrbHknKSB7XHJcbiAgICAgICAgICAgICQoQ1NTU2VsZWN0b3JGb3JtICsgJyAuZGF0ZVBpY2tlcicpLmRhdGVwaWNrZXIoe1xyXG4gICAgICAgICAgICAgICAgc2hvd090aGVyTW9udGhzOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgc2VsZWN0T3RoZXJNb250aHM6IHRydWUsXHJcbiAgICAgICAgICAgICAgICBzaG93V2VlazogdHJ1ZSxcclxuICAgICAgICAgICAgICAgIGRhdGVGb3JtYXQ6ICd5eS1tbS1kZCcsXHJcbiAgICAgICAgICAgICAgICBmaXJzdERheTogMSxcclxuICAgICAgICAgICAgICAgIG1pbkRhdGU6IG5ldyBEYXRlKCksXHJcbiAgICAgICAgICAgICAgICBhZnRlclNob3c6IGZ1bmN0aW9uIChkYXRlVGV4dCwgaW5zdCkge1xyXG4gICAgICAgICAgICAgICAgICByb290LndlZWtIb3ZlcigpO1xyXG4gICAgICAgICAgICAgICAgICByb290LnNlbGVjdEN1cnJlbnRXZWVrKCk7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgb25TZWxlY3Q6IGZ1bmN0aW9uIChkYXRlVGV4dCwgaW5zdCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBkYXRlID0gJCh0aGlzKS5kYXRlcGlja2VyKCdnZXREYXRlJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgc3RhcnREYXRlID0gbmV3IGdldE1vbmRheShkYXRlKTtcclxuICAgICAgICAgICAgICAgICAgICBlbmREYXRlID0gbmV3IERhdGUoZGF0ZS5nZXRGdWxsWWVhcigpLCBkYXRlLmdldE1vbnRoKCksIGRhdGUuZ2V0RGF0ZSgpIC0gZGF0ZS5nZXREYXkoKSArIDcpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJvb3Quc2V0RGVsaXZlcnlEYXRlKCQuZGF0ZXBpY2tlci5mb3JtYXREYXRlKCAneXktbW0tZGQnLHN0YXJ0RGF0ZSksJC5kYXRlcGlja2VyLmZvcm1hdERhdGUoICd5eS1tbS1kZCcsZW5kRGF0ZSkpXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgYmVmb3JlU2hvdzogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZ3JvdXAoJ2JlZm9yZVNob3cnKVxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKHN0YXJ0RGF0ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coZW5kRGF0ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgLy9yb290LndlZWtIb3ZlclNsb3coKTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmdyb3VwRW5kKCk7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgYmVmb3JlU2hvd0RheTogZnVuY3Rpb24oZGF0ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZ3JvdXAoJ2JlZm9yZVNob3dEYXknKTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhkYXRlLnRvTG9jYWxlRGF0ZVN0cmluZygnaHUtSHUnKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGNzc0NsYXNzID0gJyc7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYoZGF0ZSA+PSBzdGFydERhdGUgJiYgZGF0ZSA8PSBlbmREYXRlKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihkYXRlLnRvTG9jYWxlRGF0ZVN0cmluZygnaHUtSHUnKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNzc0NsYXNzID0gJ3VpLWRhdGVwaWNrZXItY3VycmVudC1zZWxlY3RlZC13ZWVrZGF5JztcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy9jc3NDbGFzcyA9ICd1aS1zdGF0ZS1hY3RpdmUnO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhjc3NDbGFzcyk7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5ncm91cEVuZCgpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gW3RydWUsIGNzc0NsYXNzXTtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBvbkNoYW5nZU1vbnRoWWVhcjogZnVuY3Rpb24oeWVhciwgbW9udGgsIGluc3QpIHtcclxuICAgICAgICAgICAgICAgICAgICAvL3Jvb3Quc2VsZWN0Q3VycmVudFdlZWsoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICQoQ1NTU2VsZWN0b3JGb3JtICsgJyAuZGF0ZVBpY2tlcicpLmRhdGVwaWNrZXIoe1xyXG4gICAgICAgICAgICAgICAgZGF0ZUZvcm1hdDogJ3l5LW1tLWRkJyxcclxuICAgICAgICAgICAgICAgIG1pbkRhdGU6IG5ldyBEYXRlKCksXHJcbiAgICAgICAgICAgICAgICBvblNlbGVjdDogZnVuY3Rpb24gKGRhdGVUZXh0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgJChDU1NTZWxlY3RvckZvcm0gKyAnIC5zZWxlY3RlZERhdGVUZXh0JykudGV4dChkYXRlVGV4dCk7XHJcbiAgICAgICAgICAgICAgICAgICAgJCgnLmRlbGl2ZXJ5RGF0ZVBsYWNlJykudGV4dChkYXRlVGV4dC5yZXBsYWNlQWxsKCctJywgJy4nKSArICcuJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgJChDU1NTZWxlY3RvckZvcm0gKyAnIGlucHV0W25hbWU9XCJkZWxpdmVyeURhdGVcIl0nKS52YWwoZGF0ZVRleHQpO1xyXG5cclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICB0aGlzLmNhbGxDaGFuZ2VPcmRlclR5cGU9ZnVuY3Rpb24oKXtcclxuICAgICAgICBjb25zb2xlLmxvZyh0aGlzKTtcclxuICAgICAgICBjb25zb2xlLmxvZyh0aGlzLnZhbHVlKTtcclxuICAgICAgICByb290LmluaXREYXRlUGlja2VyKHRoaXMudmFsdWUpO1xyXG4gICAgICAgIC8vZW51bSgnZGFpbHknLCAnd2Vla2x5JylcclxuICAgICAgICAvKmxldCBDU1NTZWxlY3RvckZvcm09Jy5vcmRlclBhcmFtZXRlckZvcm0nO1xyXG4gICAgICAgIGxldCBub2RlPSQoQ1NTU2VsZWN0b3JGb3JtKycgaW5wdXRbbmFtZT1jb250YWN0TmFtZV0nKTtcclxuICAgICAgICBpZihub2RlLnZhbCgpLmxlbmd0aDwyKXtcclxuICAgICAgICAgICAgbm9kZS5yZW1vdmVDbGFzcygnaXMtdmFsaWQnKTtcclxuICAgICAgICAgICAgbm9kZS5hZGRDbGFzcygnaXMtaW52YWxpZCcpO1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgIG5vZGUuYWRkQ2xhc3MoJ2lzLXZhbGlkJyk7XHJcbiAgICAgICAgICAgIG5vZGUucmVtb3ZlQ2xhc3MoJ2lzLWludmFsaWQnKTtcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgICovXHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5pbml0Vmlld1BhcmFtZXRlcj1mdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgZGVidWcoJ2NhbGwgaW5pdFZpZXdQYXJhbWV0ZXInKTtcclxuICAgICAgICByb290LlN0ZXBwZXIuc2V0T3B0cyh7b25BZnRlckxvYWQ6ZnVuY3Rpb24gKCl7fX0pO1xyXG4gICAgICAgIGxldCBDU1NTZWxlY3RvckZvcm09Jy5vcmRlclBhcmFtZXRlckZvcm0nO1xyXG4gICAgICAgICQoQ1NTU2VsZWN0b3JGb3JtKycgLmRhdGVQaWNrZXJDbGljaycpLmNsaWNrKGZ1bmN0aW9uKCl7XHJcbiAgICAgICAgICAgICQoQ1NTU2VsZWN0b3JGb3JtKycgLmRhdGVQaWNrZXInKS5kYXRlcGlja2VyKCdzaG93Jyk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICQoQ1NTU2VsZWN0b3JGb3JtKycgLm9yZGVyUGFyYW1ldGVyRGVsaXZlcnlBZGRyZXNzJykuc2VsZWN0Mih7fSkuc2hvdygpO1xyXG4gICAgICAgICQoQ1NTU2VsZWN0b3JGb3JtKycgaW5wdXRbbmFtZT1jb250YWN0TmFtZV0nKS5vZmYoJ2JsdXInKTtcclxuICAgICAgICAkKENTU1NlbGVjdG9yRm9ybSsnIGlucHV0W25hbWU9Y29udGFjdE5hbWVdJykub2ZmKCdrZXl1cCcpO1xyXG4gICAgICAgICQoQ1NTU2VsZWN0b3JGb3JtKycgaW5wdXRbbmFtZT1jb250YWN0TmFtZV0nKS5vbignYmx1cicscm9vdC5jaGVja0NvbnRhY3ROYW1lRmllbGQpO1xyXG4gICAgICAgICQoQ1NTU2VsZWN0b3JGb3JtKycgaW5wdXRbbmFtZT1jb250YWN0TmFtZV0nKS5vbigna2V5dXAnLHJvb3QuY2hlY2tDb250YWN0TmFtZUZpZWxkKTtcclxuXHJcbiAgICAgICAgJChDU1NTZWxlY3RvckZvcm0rJyBpbnB1dFtuYW1lPW9yZGVyVHlwZV0nKS5vZmYoJ2NoYW5nZScpO1xyXG4gICAgICAgICQoQ1NTU2VsZWN0b3JGb3JtKycgaW5wdXRbbmFtZT1vcmRlclR5cGVdJykub24oJ2NoYW5nZScscm9vdC5jYWxsQ2hhbmdlT3JkZXJUeXBlKTtcclxuXHJcblxyXG4gICAgICAgICQoQ1NTU2VsZWN0b3JGb3JtKycgLm9yZGVyUGFyYW1ldGVyTmV4dEJ1dHRvbicpLm9mZignY2xpY2snKTtcclxuICAgICAgICBpZihPcmRlci5nZXREYXRhKClbJ2lkJ10+MCl7XHJcbiAgICAgICAgICAgIGlmKE9yZGVyLmdldERhdGEoKVsnb3JkZXJUeXBlJ109PSd3ZWVrbHknKXtcclxuICAgICAgICAgICAgICAgIHJvb3QuaW5pdERhdGVQaWNrZXIoT3JkZXIuZ2V0RGF0YSgpWydvcmRlclR5cGUnXSk7XHJcbiAgICAgICAgICAgICAgICAkKENTU1NlbGVjdG9yRm9ybStcIiBpbnB1dFtuYW1lPW9yZGVyVHlwZV1bdmFsdWU9XCIgKyBPcmRlci5nZXREYXRhKClbJ29yZGVyVHlwZSddICsgXCJdXCIpLnByb3AoJ2NoZWNrZWQnLCB0cnVlKTtcclxuXHJcbiAgICAgICAgICAgICAgICBjb25zdCBlbmREYXRlID0gbmV3IERhdGUoT3JkZXIuZ2V0RGF0YSgpWydkZWxpdmVyeURhdGUnXSk7XHJcbiAgICAgICAgICAgICAgICBlbmREYXRlLnNldERhdGUoZW5kRGF0ZS5nZXREYXRlKCkgKyA2KTtcclxuICAgICAgICAgICAgICAgIHJvb3Quc2V0RGVsaXZlcnlEYXRlKE9yZGVyLmdldERhdGEoKVsnZGVsaXZlcnlEYXRlJ10sJC5kYXRlcGlja2VyLmZvcm1hdERhdGUoICd5eS1tbS1kZCcsZW5kRGF0ZSkpO1xyXG4gICAgICAgICAgICAgICAgcm9vdC5pbml0RGF0ZVBpY2tlcignd2Vla2x5Jyk7XHJcbiAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgaWYoT3JkZXIuZ2V0RGF0YSgpWydkZWxpdmVyeURhdGUnXSl7XHJcbiAgICAgICAgICAgICAgICAgICAgcm9vdC5zZXREZWxpdmVyeURhdGUoT3JkZXIuZ2V0RGF0YSgpWydkZWxpdmVyeURhdGUnXSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByb290LmluaXREYXRlUGlja2VyKCdkYWlseScpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG5cclxuXHJcbiAgICAgICAgICAgIGlmKE9yZGVyLmdldERhdGEoKVsnY29udGFjdE5hbWUnXSl7XHJcbiAgICAgICAgICAgICAgICAkKENTU1NlbGVjdG9yRm9ybSsnIGlucHV0W25hbWU9Y29udGFjdE5hbWVdJykudmFsKE9yZGVyLmdldERhdGEoKVsnY29udGFjdE5hbWUnXSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYoT3JkZXIuZ2V0RGF0YSgpWydub3RlJ10pe1xyXG4gICAgICAgICAgICAgICAgJChDU1NTZWxlY3RvckZvcm0rJyB0ZXh0YXJlYVtuYW1lPW5vdGVdJykudmFsKE9yZGVyLmdldERhdGEoKVsnbm90ZSddKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZihPcmRlci5nZXREYXRhKClbJ2RlbGl2ZXJ5QWRkcmVzc0lkJ10pe1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coJChDU1NTZWxlY3RvckZvcm0rJyBzZWxlY3RbbmFtZT1kZWxpdmVyeUFkZHJlc3NJZF0nKSk7XHJcbiAgICAgICAgICAgICAgICAkKENTU1NlbGVjdG9yRm9ybSsnIHNlbGVjdFtuYW1lPWRlbGl2ZXJ5QWRkcmVzc0lkXScpLnZhbChPcmRlci5nZXREYXRhKClbJ2RlbGl2ZXJ5QWRkcmVzc0lkJ10pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmKE9yZGVyLmdldERhdGEoKVsnY3VzdG9tTm90aWZpY2F0aW9uRW1haWwnXSl7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygkKENTU1NlbGVjdG9yRm9ybSsnIHNlbGVjdFtuYW1lPWN1c3RvbU5vdGlmaWNhdGlvbkVtYWlsXScpKTtcclxuICAgICAgICAgICAgICAgICQoQ1NTU2VsZWN0b3JGb3JtKycgc2VsZWN0W25hbWU9Y3VzdG9tTm90aWZpY2F0aW9uRW1haWxdJykudmFsKE9yZGVyLmdldERhdGEoKVsnY3VzdG9tTm90aWZpY2F0aW9uRW1haWwnXSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgcm9vdC5pbml0RGF0ZVBpY2tlcignZGFpbHknKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgICQoQ1NTU2VsZWN0b3JGb3JtKycgLm9yZGVyUGFyYW1ldGVyRGVsaXZlcnlBZGRyZXNzJykuc2VsZWN0Mih7fSkuc2hvdygpO1xyXG4gICAgICAgICQoQ1NTU2VsZWN0b3JGb3JtKycgLm9yZGVyUGFyYW1ldGVyQ3VzdG9tTm90aWZpY2F0aW9uRW1haWwnKS5zZWxlY3QyKHt9KS5zaG93KCk7XHJcblxyXG4gICAgICAgICQoQ1NTU2VsZWN0b3JGb3JtKS5zdWJtaXQoZnVuY3Rpb24oZXZlbnQpe1xyXG5cclxuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgaWYgKCQoQ1NTU2VsZWN0b3JGb3JtKVswXS5jaGVja1ZhbGlkaXR5KCkgPT09IGZhbHNlKSB7XHJcbiAgICAgICAgICAgICAgICBkZWJ1ZygndmFsaWRhdG9uIGZhbHNlJyk7XHJcbiAgICAgICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgZGVidWcoJ3ZhbGlkYXRvbiBvaycpO1xyXG4gICAgICAgICAgICAgICAgLy9kbyB5b3VyIGFqYXggc3VibWl0aW9uIGhlcmVcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAkKCcuZGVsaXZlcnlEYXRlUGxhY2UnKS50ZXh0KCQoQ1NTU2VsZWN0b3JGb3JtKycgaW5wdXRbbmFtZT1kZWxpdmVyeURhdGVdJykudmFsKCkucmVwbGFjZUFsbCgnLScsJy4nKSsnLicpO1xyXG5cclxuICAgICAgICAgICAgT3JkZXIuc2V0RGF0YSh7XHJcbiAgICAgICAgICAgICAgICBjb250YWN0TmFtZTokKENTU1NlbGVjdG9yRm9ybSsnIGlucHV0W25hbWU9Y29udGFjdE5hbWVdJykudmFsKCksXHJcbiAgICAgICAgICAgICAgICBub3RlOiQoQ1NTU2VsZWN0b3JGb3JtKycgdGV4dGFyZWFbbmFtZT1ub3RlXScpLnZhbCgpLFxyXG4gICAgICAgICAgICAgICAgb3JkZXJUeXBlOiQoQ1NTU2VsZWN0b3JGb3JtKycgaW5wdXQ6Y2hlY2tlZFtuYW1lPW9yZGVyVHlwZV0nKS52YWwoKSxcclxuICAgICAgICAgICAgICAgIGRlbGl2ZXJ5RGF0ZTokKENTU1NlbGVjdG9yRm9ybSsnIGlucHV0W25hbWU9ZGVsaXZlcnlEYXRlXScpLnZhbCgpLFxyXG4gICAgICAgICAgICAgICAgZGVsaXZlcnlBZGRyZXNzSWQ6JChDU1NTZWxlY3RvckZvcm0rJyBzZWxlY3RbbmFtZT1kZWxpdmVyeUFkZHJlc3NJZF0nKS52YWwoKSxcclxuICAgICAgICAgICAgICAgIGRlbGl2ZXJ5QWRkcmVzczokKENTU1NlbGVjdG9yRm9ybSsnIHNlbGVjdFtuYW1lPWRlbGl2ZXJ5QWRkcmVzc10nKS52YWwoKSxcclxuICAgICAgICAgICAgICAgIGN1c3RvbU5vdGlmaWNhdGlvbkVtYWlsOiQoQ1NTU2VsZWN0b3JGb3JtKycgc2VsZWN0W25hbWU9Y3VzdG9tTm90aWZpY2F0aW9uRW1haWxdJykudmFsKCksXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBjb25zb2xlLmdyb3VwKCdwYXJhbWV0ZXIgZm9ybSBzdWJtaXQnKVxyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCQoQ1NTU2VsZWN0b3JGb3JtKycgaW5wdXQ6Y2hlY2tlZFtuYW1lPW9yZGVyVHlwZV0nKS52YWwoKSk7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJChDU1NTZWxlY3RvckZvcm0rJyBpbnB1dFtuYW1lPWRlbGl2ZXJ5RGF0ZV0nKS52YWwoKSk7XHJcbiAgICAgICAgICAgIGRlYnVnKE9yZGVyLmdldERhdGEoKSk7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZ3JvdXBFbmQoKTtcclxuICAgICAgICAgICAgcm9vdC5zZW5kT3JkZXJEYXRhVG9TZXJ2ZXIoJ3BhcmFtZXRlcicscm9vdC5hZnRlck9yZGVyU2V0UGFyYW1ldGVyT2spO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgIH1cclxuICAgIHRoaXMuYmxhbms9ZnVuY3Rpb24gKCl7fTtcclxuICAgIHRoaXMuc2V0UGFyYW1ldGVyQ29tcGxldGVkPWZ1bmN0aW9uICgpIHtcclxuICAgICAgICBjb25zb2xlLmxvZygnc2V0UGFyYW1ldGVyQ29tcGxldGVkIGNhbGxlZCcpO1xyXG4gICAgICAgIHJvb3QuU3RlcHBlci5zZXRPcHRzKHtvbkFmdGVyTG9hZDpmdW5jdGlvbiAoKXt9fSk7XHJcbiAgICAgICAgLy9yb290LmluaXRWaWV3UHJvZHVjdFNlbGVjdCgpXHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5iaW5kUm93RmF2b3JpdGVzQWN0aW9uID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICQoJy5idXR0b25JdGVtRmF2b3JpdGVzJykub2ZmKCdjbGljaycpO1xyXG4gICAgICAgICQoJy5idXR0b25JdGVtRmF2b3JpdGVzJykub24oJ2NsaWNrJywgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBsZXQgcHJvZHVjdElkID0gJCh0aGlzKS5kYXRhKCdpZCcpO1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhwcm9kdWN0SWQpO1xyXG5cclxuICAgICAgICAgICAgbGV0IGFqYXhVcmw9T3B0cy5VUkwudG9nZ2xlRmF2b3JpdGVzLnJlcGxhY2UoJyVpZCUnLHByb2R1Y3RJZCk7XHJcbiAgICAgICAgICAgIGxldCBhamF4RGF0YT17fTtcclxuICAgICAgICAgICAgYWpheERhdGEuX3Rva2VuPU9wdHMudG9rZW47XHJcbiAgICAgICAgICAgIGxldCBidXR0b249dGhpcztcclxuICAgICAgICAgICAgY29uc29sZS5sb2coYWpheFVybCk7XHJcbiAgICAgICAgICAgICQuYWpheCh7XHJcbiAgICAgICAgICAgICAgICB1cmw6IGFqYXhVcmwsXHJcbiAgICAgICAgICAgICAgICBtZXRob2Q6J1BPU1QnLFxyXG4gICAgICAgICAgICAgICAgZGF0YTphamF4RGF0YSxcclxuICAgICAgICAgICAgICAgIHN1Y2Nlc3M6ZnVuY3Rpb24gKHJlc3BvbnNlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYocmVzcG9uc2Uuc3VjY2Vzcyl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKHJlc3BvbnNlLnN0YXR1cyl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygndHJ1ZScpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJChidXR0b24pLmFkZENsYXNzKCdidG4td2FybmluZycpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJChidXR0b24pLnJlbW92ZUNsYXNzKCdidG4tbGlnaHQnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKGJ1dHRvbikucmVtb3ZlQ2xhc3MoJ2J0bi13YXJuaW5nJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKGJ1dHRvbikuYWRkQ2xhc3MoJ2J0bi1saWdodCcpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ2ZhbHNlJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAvKlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQodGhpcykudG9nZ2xlQ2xhc3MoJ2J0bi13YXJuaW5nJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCh0aGlzKS50b2dnbGVDbGFzcygnYnRuLWxpZ2h0Jyk7XHJcbiAgICAgICAgICAgICovXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5iaW5kUm93RGVzY3JpcHRpb25BY3Rpb249ZnVuY3Rpb24gKCl7XHJcbiAgICAgICAgJCgndGV4dGFyZWEub3JkZXJJdGVtQ29tbWVudCcpLm9uKCdjaGFuZ2UnLGZ1bmN0aW9uICgpe1xyXG4gICAgICAgICAgICBsZXQgY29tbWVudD0kKHRoaXMpLnZhbCgpO1xyXG4gICAgICAgICAgICBsZXQgcHJvZHVjdElkPSQodGhpcykuZGF0YSgnaWQnKTtcclxuICAgICAgICAgICAgbGV0IHByb2R1Y3RDb21tZW50PU9yZGVyLmdldERhdGEoJ3Byb2R1Y3RDb21tZW50Jyk7XHJcbiAgICAgICAgICAgIGlmKHByb2R1Y3RDb21tZW50IT09bnVsbCl7XHJcbiAgICAgICAgICAgICAgICBpZih0eXBlb2YgcHJvZHVjdENvbW1lbnRbcHJvZHVjdElkXT09J3VuZGVmaW5lZCcgJiYgY29tbWVudC5sZW5ndGg9PT0wKXtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZihwcm9kdWN0Q29tbWVudFtwcm9kdWN0SWRdPT09Y29tbWVudCl7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHByb2R1Y3RDb21tZW50W3Byb2R1Y3RJZF09Y29tbWVudDtcclxuICAgICAgICAgICAgaWYoY29tbWVudC5sZW5ndGg9PT0wKXtcclxuICAgICAgICAgICAgICAgIGRlbGV0ZSBPcmRlci5wcm9kdWN0Q29tbWVudFtwcm9kdWN0SWRdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIE9yZGVyLnByb2R1Y3RDb21tZW50PXByb2R1Y3RDb21tZW50O1xyXG4gICAgICAgICAgICBxdWV1ZUFqYXgucHVzaChEYXRlLm5vdygpKTtcclxuICAgICAgICAgICAgcm9vdC5zeW5jT3JkZXJEYXRhVG9TZXJ2ZXIoKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnByb2R1Y3RTZWxlY3REYXRhdGFibGVzUm93Rm9ybWF0dGVyPWZ1bmN0aW9uIChkKSB7XHJcbiAgICAgICAgLy8gYGRgIGlzIHRoZSBvcmlnaW5hbCBkYXRhIG9iamVjdCBmb3IgdGhlIHJvd1xyXG4gICAgICAgIC8qKlxyXG4gICAgICAgIEB0b2RvOiBmZWxzemVkbmkgZXMgdXBkYXRlbG5pIGF6IGFkb3R0IHRlcm1layBtZW1vamF0IGF6IG9yZGVyYmFuXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgY29uc29sZS5ncm91cCgncHJvZHVjdFNlbGVjdERhdGF0YWJsZXNSb3dGb3JtYXR0ZXInKTtcclxuICAgICAgICBjb25zb2xlLmxvZyhkKTtcclxuICAgICAgICBsZXQgdGVtcGxhdGVEYXRhPWQ7XHJcbiAgICAgICAgdGVtcGxhdGVEYXRhLmNvbW1lbnQ9Jyc7XHJcbi8vICAgICAgICBkZWJ1ZyhPcmRlcik7XHJcbiAgICAgICAgaWYoT3JkZXIucHJvZHVjdENvbW1lbnQgJiYgT3JkZXIucHJvZHVjdENvbW1lbnQhPT1udWxsKXtcclxuICAgICAgICAgICAgZGVidWcodHlwZW9mIE9yZGVyLnByb2R1Y3RDb21tZW50W2QuaWRdKTtcclxuICAgICAgICAgICAgaWYodHlwZW9mIE9yZGVyLnByb2R1Y3RDb21tZW50W2QuaWRdIT0ndW5kZWZpbmVkJyAmJiBPcmRlci5wcm9kdWN0Q29tbWVudFtkLmlkXS5sZW5ndGg+MCl7XHJcbiAgICAgICAgICAgICAgICB0ZW1wbGF0ZURhdGEuY29tbWVudD1PcmRlci5wcm9kdWN0Q29tbWVudFtkLmlkXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICAvKiogQHR5cGVkZWYge2Jvb2xlYW59IGQuZmF2b3JpdGVzICovXHJcbiAgICAgICAgaWYoZC5mYXZvcml0ZXM9PT10cnVlKXtcclxuICAgICAgICAgICAgdGVtcGxhdGVEYXRhLmJ0bkZhdm9yaXRlc0NsYXNzPSdidG4td2FybmluZyc7XHJcbiAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgIHRlbXBsYXRlRGF0YS5idG5GYXZvcml0ZXNDbGFzcz0nYnRuLWxpZ2h0JztcclxuICAgICAgICB9XHJcbiAgICAgICAgbGV0IHRlbXBsYXRlPSQoJ3RlbXBsYXRlW2RhdGEtbmFtZT1cIm9yZGVyUHJvZHVjdFNlbGVjdERldGFpbHNcIl0nKS5odG1sKClcclxuICAgICAgICB0ZW1wbGF0ZURhdGEud2Vla2x5PWZhbHNlO1xyXG4gICAgICAgIGlmKE9yZGVyLmdldERhdGEoKS5vcmRlclR5cGU9PT0nd2Vla2x5Jyl7XHJcbiAgICAgICAgICAgIHRlbXBsYXRlRGF0YS53ZWVrbHk9dHJ1ZTtcclxuLypcclxuXHJcbiAgICAgICAgICAgIHRlbXBsYXRlRGF0YS53ZWVrbHlEYXk9W1xyXG4gICAgICAgICAgICAgICAge1wiaW5kZXhcIjoxLFwibmFtZVwiOlwiSMOpdGbFkVwifSxcclxuICAgICAgICAgICAge1wiaW5kZXhcIjoyLFwibmFtZVwiOlwiS2VkZFwifSxcclxuICAgICAgICAgICAge1wiaW5kZXhcIjozLFwibmFtZVwiOlwiU3plcmRhXCJ9LFxyXG4gICAgICAgICAgICB7XCJpbmRleFwiOjQsXCJuYW1lXCI6XCJDc8O8dMO2cnTDtmtcIn0sXHJcbiAgICAgICAgICAgIHtcImluZGV4XCI6NSxcIm5hbWVcIjpcIlDDqW50ZWtcIn0sXHJcbiAgICAgICAgICAgIHtcImluZGV4XCI6NixcIm5hbWVcIjpcIlN6b21iYXRcIn0sXHJcbiAgICAgICAgICAgIHtcImluZGV4XCI6NyxcIm5hbWVcIjpcIlZhc8Ohcm5hcFwifSxcclxuICAgICAgICAgICAgXTtcclxuXHJcbiAgICAgICAgICAgIHRlbXBsYXRlRGF0YS53ZWVrbHlEYXk9W1xyXG4gICAgICAgICAgICAgICAge1wiaW5kZXhcIjoyLFwibmFtZVwiOlwiSMOpdGbFkVwiIH0sXHJcbiAgICAgICAgICAgICAgICB7XCJuYW1lXCI6XCJLZWRkXCJ9LFxyXG4gICAgICAgICAgICAgICAge1wibmFtZVwiOlwiU3plcmRhXCJ9LFxyXG4gICAgICAgICAgICAgICAge1wibmFtZVwiOlwiQ3PDvHTDtnJ0w7ZrXCJ9LFxyXG4gICAgICAgICAgICAgICAge1wibmFtZVwiOlwiUMOpbnRla1wifSxcclxuICAgICAgICAgICAgICAgIHtcIm5hbWVcIjpcIlN6b21iYXRcIn0sXHJcbiAgICAgICAgICAgICAgICB7XCJuYW1lXCI6XCJWYXPDoXJuYXBcIn1cclxuICAgICAgICAgICAgXTtcclxuKi9cclxuICAgICAgICB9XHJcbiAgICAgICAgbGV0IHByb2R1Y3RTZWxlY3RlZD1PcmRlci5nZXREYXRhKCdwcm9kdWN0U2VsZWN0ZWQnKTtcclxuICAgICAgICBpZih0eXBlb2YgcHJvZHVjdFNlbGVjdGVkW2QuaWRdIT0ndW5kZWZpbmVkJyl7XHJcbiAgICAgICAgICAgIHRlbXBsYXRlRGF0YS5pdGVtUXVhbnRpdHk9cHJvZHVjdFNlbGVjdGVkW2QuaWRdO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zb2xlLmxvZyhbJ3RlbXBsYXRlRGF0YScsdGVtcGxhdGVEYXRhXSk7XHJcbiAgICAgICAgbGV0IG9sZFRhZ3M9TXVzdGFjaGUudGFncztcclxuICAgICAgICBNdXN0YWNoZS50YWdzID0gW1wifiFcIiwgXCIhflwiXTtcclxuICAgICAgICBpZih0ZW1wbGF0ZURhdGFbJ3NwZWNpZmljYXRpb24nXT09J2ZhbHNlJyB8fCB0ZW1wbGF0ZURhdGFbJ3NwZWNpZmljYXRpb24nXT09ZmFsc2Upe1xyXG4gICAgICAgICAgICB0ZW1wbGF0ZURhdGEuc3BlY2lmaWNhdGlvbkNsYXNzPSdkLW5vbmUnO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0ZW1wbGF0ZURhdGEucGljdHVyZUltZz0nJztcclxuICAgICAgICBpZih0ZW1wbGF0ZURhdGFbJ3BpY3R1cmUnXT09J2ZhbHNlJyB8fCB0ZW1wbGF0ZURhdGFbJ3BpY3R1cmUnXT09ZmFsc2Upe1xyXG4gICAgICAgICAgICB0ZW1wbGF0ZURhdGEucGljdHVyZUNsYXNzPSdkLW5vbmUnO1xyXG4gICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICB0ZW1wbGF0ZURhdGEucGljdHVyZUltZz0nPGltZyBzcmM9IFwiJyt0ZW1wbGF0ZURhdGFbJ3BpY3R1cmUnXSsnXCIgY2xhc3M9XCJwcm9kdWN0UGljdHVyZVwiID48L2ltZz4nO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zb2xlLmxvZygndGVtcGxhdGVEYXRhJyx0ZW1wbGF0ZURhdGEpO1xyXG4gICAgICAgIC8vdGVtcGxhdGVEYXRhWydhYV9zcGVjaWZpY2F0aW9uJ109ZmFsc2U7XHJcbiAgICAgICAgbGV0IHJlbmRlcj1NdXN0YWNoZS5yZW5kZXIodGVtcGxhdGUsdGVtcGxhdGVEYXRhKTtcclxuICAgICAgICBNdXN0YWNoZS50YWdzID1vbGRUYWdzO1xyXG4gICAgICAgIGNvbnNvbGUuZ3JvdXBFbmQoKTtcclxuICAgICAgICByZXR1cm4gcmVuZGVyO1xyXG4vKlxyXG5zb2x1dGlvbiBiZWZvcmUgdGVtcGxhdGVcclxuICAgICAgICByZXR1cm4gJzx0YWJsZSBjZWxscGFkZGluZz1cIjVcIiBjZWxsc3BhY2luZz1cIjBcIiBib3JkZXI9XCIwXCIgc3R5bGU9XCJwYWRkaW5nLWxlZnQ6NTBweDtcIj4nK1xyXG4gICAgICAgICAgICAnPHRyPicrXHJcbiAgICAgICAgICAgICc8dGQ+SW5mbzo8L3RkPicrXHJcbiAgICAgICAgICAgICc8dGQ+JytkLm5vdGUrJzwvdGQ+JytcclxuICAgICAgICAgICAgJzwvdHI+JytcclxuICAgICAgICAgICAgJzx0cj4nK1xyXG4gICAgICAgICAgICAnPHRkPmhvb3JleWNhIDo8L3RkPicrXHJcbiAgICAgICAgICAgICc8dGQ+PHNwYW4gc3R5bGU9XCJwYWRkaW5nLXJpZ2h0OiAyZW07XCI+JytkLmhvb3JleWNhSWQrJzwvc3Bhbj4nICtcclxuXHJcbiAgICAgICAgICAgICc8YnV0dG9uIHR5cGU9XCJidXR0b25cIlxcbicgK1xyXG4gICAgICAgICAgICAnICAgICAgICBkYXRhLWlkPVwiJytkLmlkKydcIlxcbicgK1xyXG4gICAgICAgICAgICAnICAgICAgICBjbGFzcz1cImJ1dHRvbkl0ZW1GYXZvcml0ZXMgYnRuICcrYnRuRmF2b3JpdGVzQ2xhc3MrJ1wiPlxcbicgK1xyXG4gICAgICAgICAgICAnICAgIDxpIGNsYXNzPVwiYmkgYmktc3Rhci1maWxsIHByLTJcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XFxuJyArXHJcbiAgICAgICAgICAgICcgICAgS2VkdmVuY1xcbicgK1xyXG4gICAgICAgICAgICAnPC9idXR0b24+JyArXHJcbiAgICAgICAgICAgICc8L3RkPicrXHJcbiAgICAgICAgICAgICc8L3RyPicrXHJcbiAgICAgICAgICAgIC8hKlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAnPHRyPicrXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICc8dGQ+RXh0ZW5zaW9uIG51bWJlcjo8L3RkPicrXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICc8dGQ+JytkLmV4dG4rJzwvdGQ+JytcclxuICAgICAgICAgICAgICAgICAgICAgICAgJzwvdHI+JytcclxuICAgICAgICAgICAgKiEvXHJcbiAgICAgICAgICAgICc8dHI+JytcclxuICAgICAgICAgICAgJzx0ZD5JbmZvOjwvdGQ+JytcclxuICAgICAgICAgICAgJzx0ZD4nK2Qubm90ZSsnPC90ZD4nK1xyXG4gICAgICAgICAgICAnPC90cj4nK1xyXG4gICAgICAgICAgICAnPHRyPicrXHJcbiAgICAgICAgICAgICc8dGQ+TWVnamVneXrDqXM6PC90ZD4nK1xyXG4gICAgICAgICAgICAnPHRkPjx0ZXh0YXJlYSBjbGFzcz1cIm9yZGVySXRlbUNvbW1lbnRcIiBkYXRhLWlkPVwiJytkLmlkKydcIj4nK2NvbW1lbnQrJzwvdGV4dGFyZWE+PC90ZD4nK1xyXG4gICAgICAgICAgICAnPC90cj4nK1xyXG4gICAgICAgICAgICAvISpcclxuICAgICAgICAgICAgKiEvXHJcbiAgICAgICAgICAgICc8L3RhYmxlPic7XHJcbiovXHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5zZXREYXRhdGFibGVIZWFkZXJUZXh0PWZ1bmN0aW9uKHRleHQpe1xyXG4gICAgICAgICQoJy50YWJsZUhlYWRlclRleHQnKS50ZXh0KHRleHQpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuZ2V0VHJlZVBhdGhOYW1lPWZ1bmN0aW9uIChub2RlKXtcclxuICAgICAgICBsZXQgcmVzPScnO1xyXG4gICAgICAgIGxldCBpdGVtcz0kKG5vZGUpLnBhcmVudHMoJ2xpJykudG9BcnJheSgpO1xyXG4gICAgICAgIGl0ZW1zLnNoaWZ0KCk7XHJcbiAgICAgICAgaXRlbXMucmV2ZXJzZSgpO1xyXG4gICAgICAgIGZvciAoY29uc3QgaXRlbSBpbiBpdGVtcykge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZygkKGl0ZW1zW2l0ZW1dKS5jaGlsZHJlbignYS5jYXRlZ29yeUl0ZW0nKSk7XHJcbiAgICAgICAgICAgIGlmKCQoaXRlbXNbaXRlbV0pLmNoaWxkcmVuKCdhLmNhdGVnb3J5SXRlbScpLmxlbmd0aD4wKXtcclxuICAgICAgICAgICAgICAgIHJlcys9JChpdGVtc1tpdGVtXSkuY2hpbGRyZW4oJ2EuY2F0ZWdvcnlJdGVtJykudGV4dCgpKycvJ1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJlcys9JChub2RlKS50ZXh0KCk7XHJcbiAgICAgICAgY29uc29sZS5sb2cocmVzKTtcclxuICAgICAgICByZXR1cm4gcmVzO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBzZWxlY3RlZFByb2R1Y3RHcm91cD1udWxsO1xyXG4gICAgbGV0IGRhdGFUYWJsZVNlYXJjaFN0cj1udWxsO1xyXG4gICAgbGV0IGRhdGFUYWJsZVNlYXJjaEtyZWw9ZmFsc2U7XHJcblxyXG4gICAgdGhpcy5zZWFyY2hQcm9kdWN0QnlTdHJpbmc9ZnVuY3Rpb24gKGZpbHRlclN0cil7XHJcbiAgICAgICAgcm9vdC5zZXREYXRhdGFibGVIZWFkZXJUZXh0KCdUZXJtw6lrZWsgc3rFsXJ2ZTonK2ZpbHRlclN0cik7XHJcbiAgICAgICAgZGF0YVRhYmxlU2VhcmNoU3RyPWZpbHRlclN0cjtcclxuICAgICAgICAkKCcuZGF0YVRhYmxlT3JkZXJQcm9kdWN0U2VsZWN0JykuRGF0YVRhYmxlKCkuYWpheC5yZWxvYWQoKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmNsaWNrU2VhcmNoUHJvZHVjdD1mdW5jdGlvbiAoKXtcclxuICAgICAgICBkZWJ1Zyh0aGlzKTtcclxuICAgICAgICBsZXQgZmlsdGVyU3RyPSQoJy5zaWRlYmFyLXNlYXJjaCBpbnB1dFtuYW1lPXNlYXJjaFZhbHVlXScpLnZhbCgpXHJcbiAgICAgICAgZGVidWcoZmlsdGVyU3RyKTtcclxuICAgICAgICByb290LnNlYXJjaFByb2R1Y3RCeVN0cmluZyhmaWx0ZXJTdHIpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuY2xpY2tGYXZvcml0ZXNQcm9kdWN0ID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGRlYnVnKCdjbGlja0Zhdm9yaXRlc1Byb2R1Y3QnKTtcclxuICAgICAgICByb290LnNldERhdGF0YWJsZUhlYWRlclRleHQoJ1Rlcm3DqWtlayBzesWxcnZlOiBrZWR2ZW5jZWsnKTtcclxuICAgICAgICBkYXRhVGFibGVTZWFyY2hTdHI9JyoqZmF2b3JpdGVzKionO1xyXG4gICAgICAgICQoJy5kYXRhVGFibGVPcmRlclByb2R1Y3RTZWxlY3QnKS5EYXRhVGFibGUoKS5hamF4LnJlbG9hZCgpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5jbGlja09mdGVuUHJvZHVjdCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBkZWJ1ZygnY2xpY2tPZnRlblByb2R1Y3QnKTtcclxuICAgICAgICByb290LnNldERhdGF0YWJsZUhlYWRlclRleHQoJ1Rlcm3DqWtlayBzesWxcnZlOiBneWFrcmFuIHbDoXPDoXJvbHQnKTtcclxuICAgICAgICBkYXRhVGFibGVTZWFyY2hTdHI9Jyoqb2Z0ZW4qKic7XHJcbiAgICAgICAgJCgnLmRhdGFUYWJsZU9yZGVyUHJvZHVjdFNlbGVjdCcpLkRhdGFUYWJsZSgpLmFqYXgucmVsb2FkKCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5jbGlja1NwZWNpYWxPZmZlciA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBkZWJ1ZygnY2xpY2tTcGVjaWFsT2ZmZXInKTtcclxuICAgICAgICByb290LnNldERhdGF0YWJsZUhlYWRlclRleHQoJ1Rlcm3DqWtlayBzesWxcnZlOiBBa2Npw7NzIHRlcm3DqWtlaycpO1xyXG4gICAgICAgIGRhdGFUYWJsZVNlYXJjaFN0cj0nKipzcGVjaWFsT2ZmZXIqKic7XHJcbiAgICAgICAgJCgnLmRhdGFUYWJsZU9yZGVyUHJvZHVjdFNlbGVjdCcpLkRhdGFUYWJsZSgpLmFqYXgucmVsb2FkKCk7XHJcbiAgICB9XHJcblxyXG5cclxuXHJcblxyXG4gICAgdGhpcy5jbGlja0xhc3RQcm9kdWN0ID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGRlYnVnKCdjbGlja0xhc3RQcm9kdWN0Jyk7XHJcbiAgICAgICAgcm9vdC5zZXREYXRhdGFibGVIZWFkZXJUZXh0KCdUZXJtw6lrZWsgc3rFsXJ2ZTogdXRvbGrDoXJhIHbDoXPDoXJvbHQnKTtcclxuICAgICAgICBkYXRhVGFibGVTZWFyY2hTdHI9JyoqbGFzdCoqJztcclxuICAgICAgICAkKCcuZGF0YVRhYmxlT3JkZXJQcm9kdWN0U2VsZWN0JykuRGF0YVRhYmxlKCkuYWpheC5yZWxvYWQoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5jbGlja1dlZWtseVByb2R1Y3QgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgZGVidWcoJ2NsaWNrV2Vla2x5UHJvZHVjdCcpO1xyXG4gICAgICAgIHJvb3Quc2V0RGF0YXRhYmxlSGVhZGVyVGV4dCgnVGVybcOpa2VrIHN6xbFydmU6IEhldGkgdGVybcOpa2VrJyk7XHJcbiAgICAgICAgZGF0YVRhYmxlU2VhcmNoU3RyPScqKndlZWtseSoqJztcclxuICAgICAgICAkKCcuZGF0YVRhYmxlT3JkZXJQcm9kdWN0U2VsZWN0JykuRGF0YVRhYmxlKCkuYWpheC5yZWxvYWQoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5jbGlja0tyZWxQcm9kdWN0ID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGRlYnVnKCdjbGlja0tyZWxQcm9kdWN0Jyk7XHJcbiAgICAgICAgLy9yb290LnNldERhdGF0YWJsZUhlYWRlclRleHQoJ1Rlcm3DqWtlayBzesWxcnZlOiBIZXRpIHRlcm3DqWtlaycpO1xyXG4gICAgICAgIC8vZGF0YVRhYmxlU2VhcmNoU3RyPScqKndlZWtseSoqJztcclxuICAgICAgICAvLyQoJy5kYXRhVGFibGVPcmRlclByb2R1Y3RTZWxlY3QnKS5EYXRhVGFibGUoKS5hamF4LnJlbG9hZCgpO1xyXG4gICAgICAgICQodGhpcykucGFyZW50KCkudG9nZ2xlQ2xhc3MoJ2tyZWxBY3RpdmUnKTtcclxuICAgICAgICBkYXRhVGFibGVTZWFyY2hLcmVsPSFkYXRhVGFibGVTZWFyY2hLcmVsO1xyXG4gICAgICAgICQoJy5kYXRhVGFibGVPcmRlclByb2R1Y3RTZWxlY3QnKS5EYXRhVGFibGUoKS5hamF4LnJlbG9hZCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMucHJvZHVjdFNlbGVjdERhdGFUYWJsZUNvbHVtbkRlZnM9ZnVuY3Rpb24gKCl7XHJcbiAgICAgICAgcmV0dXJuIFtcclxuICAgICAgICAgICAge1wid2lkdGhcIjogXCIxMHB4XCIsIFwidGFyZ2V0c1wiOiAwIH0sXHJcbiAgICAgICAgICAgIHsgXCJjbGFzc05hbWVcIjogXCJkdC1sZWZ0XCIsIFwidGFyZ2V0c1wiOiAxIH0sXHJcbi8vICAgICAgICAgICAgICAgIHsgXCJ3aWR0aFwiOiBcIjEyMHB4XCIsIFwidGFyZ2V0c1wiOiAxIH0sXHJcbiAgICAgICAgICAgIHsgXCJ3aWR0aFwiOiBcIjI4cHhcIiwgXCJ0YXJnZXRzXCI6IDIgfSxcclxuICAgICAgICAgICAgeyBcIndpZHRoXCI6IFwiNDFweFwiLCBcInRhcmdldHNcIjogMyB9LFxyXG4gICAgICAgICAgICB7IFwid2lkdGhcIjogXCI3NnB4XCIsIFwidGFyZ2V0c1wiOiA0IH0sXHJcbiAgICAgICAgICAgIHsgXCJ3aWR0aFwiOiBcIjU1cHhcIiwgXCJ0YXJnZXRzXCI6IDUgfSxcclxuICAgICAgICAgICAgeyBcIndpZHRoXCI6IFwiNzBweFwiLCBcInRhcmdldHNcIjogNiB9LFxyXG4gICAgICAgICAgICB7IFwid2lkdGhcIjogXCI1NHB4XCIsIFwidGFyZ2V0c1wiOiA3IH0sXHJcbiAgICAgICAgICAgIHsgXCJ3aWR0aFwiOiBcIjU3cHhcIiwgXCJ0YXJnZXRzXCI6IDggfSxcclxuICAgICAgICAgICAgeyBcIndpZHRoXCI6IFwiNDJweFwiLCBcInRhcmdldHNcIjogOSB9LFxyXG4gICAgICAgICAgICB7IFwid2lkdGhcIjogXCIxMDBweFwiLCBcInRhcmdldHNcIjogMTB9LFxyXG4gICAgICAgICAgICB7XCJjbGFzc05hbWVcIjogXCJkdC1jZW50ZXJcIiwgXCJ0YXJnZXRzXCI6IFwiX2FsbFwifSxcclxuICAgICAgICBdO1xyXG4gICAgfVxyXG4gICAgdGhpcy5wcm9kdWN0U2VsZWN0RGF0YVRhYmxlQ29sdW1uPWZ1bmN0aW9uICgpe1xyXG4gICAgICAgIGxldCBjb2x1bW5EYXRhPVtcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgXCJjbGFzc05hbWVcIjogICAgICAnZGV0YWlscy1jb250cm9sJyxcclxuICAgICAgICAgICAgICAgIFwib3JkZXJhYmxlXCI6ICAgICAgZmFsc2UsXHJcbiAgICAgICAgICAgICAgICBcImRhdGFcIjogICAgICAgICAgIG51bGwsXHJcbiAgICAgICAgICAgICAgICBcImRlZmF1bHRDb250ZW50XCI6ICcnXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHsgXCJkYXRhXCI6IFwibmFtZVwiIH0sXHJcbiAgICAgICAgICAgIHsgXCJkYXRhXCI6IFwia3JlbFwiIH0sXHJcbiAgICAgICAgICAgIHsgXCJkYXRhXCI6IFwicGFja2luZ1wifSxcclxuICAgICAgICAgICAgeyBcImRhdGFcIjogXCJ1bml0VmFsdWVcIiB9LFxyXG4gICAgICAgICAgICB7IFwiZGF0YVwiOiBcInByb2R1Y3RVbml0XCJ9LFxyXG4gICAgICAgICAgICB7IFwiZGF0YVwiOiBcInNlbGxlclVuaXRcIiB9LFxyXG4gICAgICAgICAgICB7IFwiZGF0YVwiOiBcInVuaXRNdWx0aXBsaWVyXCJ9LFxyXG4gICAgICAgICAgICB7IFwiZGF0YVwiOiBcImFtb3VudFVuaXRcIiB9LFxyXG4gICAgICAgICAgICB7IFwiZGF0YVwiOiBcInByaWNlXCIgfSxcclxuXHJcbiAgICAgICAgXTtcclxuXHJcbiAgICAgICAgbGV0IGFjdGlvbkNvbHVtbj17ICAgICAgICAgICAgICAgIFwiY2xhc3NOYW1lXCI6ICAgICAgJ2RldGFpbHMtY29udHJvbDInLFxyXG4gICAgICAgICAgICBcIm9yZGVyYWJsZVwiOiAgICAgIGZhbHNlLFxyXG4gICAgICAgICAgICBcImRhdGFcIjogICAgICAgICAgIG51bGwsXHJcbiAgICAgICAgICAgIFwid2lkdGhcIjogXCI4MHB4XCIsXHJcbiAgICAgICAgICAgIFwiZGVmYXVsdENvbnRlbnRcIjonJ1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgaWYoT3JkZXIuZ2V0RGF0YSgnb3JkZXJUeXBlJyk9PSdkYWlseScpe1xyXG4gICAgICAgICAgICBhY3Rpb25Db2x1bW4uZGVmYXVsdENvbnRlbnQ9JzxpbnB1dCB0eXBlPVwibnVtYmVyXCIgdmFsdWU9XCIwXCIgbWluPVwiMFwiIG1heD1cIjk5OTlcIiBzdGVwPVwiMVwiIGRhdGEtZGVjaW1hbHM9XCIxXCIgIGNsYXNzPVwiZm9ybS1jb250cm9sLXNtIGlucHV0TnVtYmVyU3Bpbm5lclwiIHN0eWxlPVwid2lkdGg6IDFlbTtcIiBcIi8+J1xyXG4gICAgICAgICAgICAgICAgLypcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJkZWZhdWx0Q29udGVudFwiOic8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXAgaW5wdXQtZ3JvdXAtc20gXCI+JyArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPGJ1dHRvbiBzdHlsZT1cIm1pbi13aWR0aDogMS41cmVtXCIgY2xhc3M9XCJidG4tc20gYnRuLWRlY3JlbWVudCBidG4tb3V0bGluZS1zZWNvbmRhcnkgYnRuLW1pbnVzXCIgdHlwZT1cImJ1dHRvblwiPicgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzxzdHJvbmc+4oiSPC9zdHJvbmc+PC9idXR0b24+JyArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPGlucHV0IHR5cGU9XCJ0ZXh0XCIgaW5wdXRtb2RlPVwiZGVjaW1hbFwiIHN0eWxlPVwidGV4dC1hbGlnbjogY2VudGVyXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2wgXCIgcGxhY2Vob2xkZXI9XCJcIj4nICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8YnV0dG9uIHN0eWxlPVwibWluLXdpZHRoOiAxLjVyZW1cIiBjbGFzcz1cImJ0bi1zbSBidG4taW5jcmVtZW50IGJ0bi1vdXRsaW5lLXNlY29uZGFyeSBidG4tcGx1c1wiIHR5cGU9XCJidXR0b25cIj4nICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8c3Ryb25nPis8L3N0cm9uZz48L2J1dHRvbj4nICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8L2Rpdj4nXHJcbiAgICAgICAgICAgICAgICAqL1xyXG5cclxuICAgICAgICAgICAgO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb2x1bW5EYXRhLnB1c2goYWN0aW9uQ29sdW1uKTtcclxuICAgICAgICByZXR1cm4gY29sdW1uRGF0YTtcclxuICAgIH1cclxuICAgIHRoaXMuZ2V0RGF0YXRhYmxlcz1mdW5jdGlvbiAob3JkZXJUeXBlKXtcclxuICAgICAgICBjb25zb2xlLmVycm9yKG9yZGVyVHlwZSk7XHJcbiAgICAgICAgdmFyIHRhYmxlID0gJCgnLmRhdGFUYWJsZU9yZGVyUHJvZHVjdFNlbGVjdCcpLkRhdGFUYWJsZSgge1xyXG4gICAgICAgICAgICBsYW5ndWFnZToge1xyXG4gICAgICAgICAgICAgICAgdXJsOiAnLy9jZG4uZGF0YXRhYmxlcy5uZXQvcGx1Zy1pbnMvMS4xMC4yNC9pMThuL0h1bmdhcmlhbi5qc29uJ1xyXG4gICAgICAgICAgICB9LFxyXG5cclxuICAgICAgICAgICAgLy9cImFqYXhcIjogXCJ7e2Fzc2V0KCdleGFwbWxlMi5qc29uJyl9fVwiLFxyXG4gICAgICAgICAgICBcImFqYXhcIjoge1xyXG4gICAgICAgICAgICAgICAgdXJsOk9wdHMuVVJMLmdldERhdGFUYWJsZUNvbnRlbnRQcm9kdWN0TGlzdCxcclxuICAgICAgICAgICAgICAgIGRhdGE6ZnVuY3Rpb24gKGRhdGEpIHtcclxuICAgICAgICAgICAgICAgICAgICBkYXRhLnNlYXJjaFN0cj1kYXRhVGFibGVTZWFyY2hTdHI7XHJcbiAgICAgICAgICAgICAgICAgICAgZGF0YS5rcmVsPWRhdGFUYWJsZVNlYXJjaEtyZWw7XHJcbiAgICAgICAgICAgICAgICAgICAgZGF0YS5ncm91cElkPXNlbGVjdGVkUHJvZHVjdEdyb3VwO1xyXG4gICAgICAgICAgICAgICAgICAgIGRhdGEuc3VwcGxpZXJJZD1PcmRlci5zdXBwbGllcklkO1xyXG4gICAgICAgICAgICAgICAgICAgIGRhdGEuZGVsaXZlcnlEYXRlPU9yZGVyLmRlbGl2ZXJ5RGF0ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgYnV0dG9uczoge1xyXG4gICAgICAgICAgICAgICAgYnV0dG9uczogW11cclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgXCJjb2x1bW5EZWZzXCI6IHJvb3QucHJvZHVjdFNlbGVjdERhdGFUYWJsZUNvbHVtbkRlZnMoKSxcclxuICAgICAgICAgICAgXCJjb2x1bW5zXCI6IHJvb3QucHJvZHVjdFNlbGVjdERhdGFUYWJsZUNvbHVtbigpLFxyXG4gICAgICAgICAgICBcIm9yZGVyXCI6IFtbMSwgJ2FzYyddXSxcclxuICAgICAgICB9ICk7XHJcbiAgICAgICAgcmV0dXJuIHRhYmxlO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMucHJvZHVjdFNlbGVjdERhdGFUYWJsZURyYXdEVD1mdW5jdGlvbiAoZSkge1xyXG4gICAgICAgIC8vZGVidWcoICdUYWJsZSBkcmF3IGNvbXBsZXRlOiAnK25ldyBEYXRlKCkuZ2V0VGltZSgpICk7XHJcblxyXG4gICAgICAgIC8vJCgndGQ6Y29udGFpbnMoXCIqXCIpJykuaHRtbCgnPGkgY2xhc3M9XCJiaSBiaS1jaGVjay1jaXJjbGUtZmlsbFwiPjwvaT4nKTtcclxuICAgICAgICAkKFwidGRcIikuZmlsdGVyKGZ1bmN0aW9uKCl7XHJcbiAgICAgICAgICAgIHJldHVybiAkKHRoaXMpLnRleHQoKSA9PT0gJyonO1xyXG4gICAgICAgIH0pLmh0bWwoJzxpIGNsYXNzPVwiYmkgYmktY2hlY2stY2lyY2xlLWZpbGxcIj48L2k+Jyk7XHJcbiAgICAgICAgaWYoT3JkZXIuZ2V0RGF0YSgpLm9yZGVyVHlwZT09J2RhaWx5Jyl7XHJcbiAgICAgICAgICAgICQoXCJpbnB1dFt0eXBlPSdudW1iZXInXS5pbnB1dE51bWJlclNwaW5uZXJcIikuaW5wdXRTcGlubmVyKHtcclxuICAgICAgICAgICAgICAgIHRlbXBsYXRlOlxyXG4gICAgICAgICAgICAgICAgICAgICc8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXAgJHtncm91cENsYXNzfVwiPicgK1xyXG4gICAgICAgICAgICAgICAgICAgICc8YnV0dG9uIHN0eWxlPVwibWluLXdpZHRoOiAke2J1dHRvbnNXaWR0aH1cIiBjbGFzcz1cImJ0biBidG4tc20gYnRuLWRlY3JlbWVudCAke2J1dHRvbnNDbGFzc31cIiB0eXBlPVwiYnV0dG9uXCI+JHtkZWNyZW1lbnRCdXR0b259PC9idXR0b24+JyArXHJcbiAgICAgICAgICAgICAgICAgICAgLy8nPGlucHV0IHR5cGU9XCJ0ZXh0XCIgaW5wdXRtb2RlPVwiZGVjaW1hbFwiIHN0eWxlPVwidGV4dC1hbGlnbjogJHt0ZXh0QWxpZ259XCIgY2xhc3M9XCJwcm9kdWN0UXVhbnRpdHkgZm9ybS1jb250cm9sXCIvPicgK1xyXG4gICAgICAgICAgICAgICAgICAgICc8aW5wdXQgdHlwZT1cInRleHRcIiBzdGVwPVwiMC4xXCIgZGF0YS1kZWNpbWFscz1cIjJcIiBzdHlsZT1cInRleHQtYWxpZ246ICR7dGV4dEFsaWdufVwiIGNsYXNzPVwicHJvZHVjdFF1YW50aXR5IGZvcm0tY29udHJvbFwiLz4nICtcclxuICAgICAgICAgICAgICAgICAgICAnPGJ1dHRvbiBzdHlsZT1cIm1pbi13aWR0aDogJHtidXR0b25zV2lkdGh9XCIgY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1pbmNyZW1lbnQgJHtidXR0b25zQ2xhc3N9XCIgdHlwZT1cImJ1dHRvblwiPiR7aW5jcmVtZW50QnV0dG9ufTwvYnV0dG9uPicgK1xyXG4gICAgICAgICAgICAgICAgICAgICc8L2Rpdj4nLFxyXG4gICAgICAgICAgICAgICAgYnV0dG9uc1dpZHRoOiBcIjAuNXJlbVwiLFxyXG4gICAgICAgICAgICAgICAgZ3JvdXBDbGFzczogXCJcIiwgLy8gY3NzIGNsYXNzIG9mIHRoZSByZXN1bHRpbmcgaW5wdXQtZ3JvdXBcclxuICAgICAgICAgICAgICAgIGJ1dHRvbnNDbGFzczogXCJidG4tb3V0bGluZS1zZWNvbmRhcnlcIixcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJvb3QuYmluZFdlYWtVc2VySGVscGVyKCk7XHJcbiAgICAgICAgLypcclxuICAgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAgICAgY2hhbmdlIG9yZGVyIHF1YW50aXR5XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgJChcIi5kYXRhVGFibGVPcmRlclByb2R1Y3RTZWxlY3QgLmRldGFpbHMtY29udHJvbDIgaW5wdXRbdHlwZT10ZXh0XVwiKS5vZmYoJ2NoYW5nZScpO1xyXG4gICAgICAgICQoXCIuZGF0YVRhYmxlT3JkZXJQcm9kdWN0U2VsZWN0IC5kZXRhaWxzLWNvbnRyb2wyIGlucHV0W3R5cGU9dGV4dF1cIikub24oJ2NoYW5nZScsZnVuY3Rpb24gKGUpe1xyXG4gICAgICAgICAgICBsZXQgcXVhbnRpdHk9JCh0aGlzKS52YWwoKTtcclxuICAgICAgICAgICAgcXVhbnRpdHk9cXVhbnRpdHkucmVwbGFjZSgnLCcsJy4nKTtcclxuICAgICAgICAgICAgcXVhbnRpdHk9cGFyc2VGbG9hdChxdWFudGl0eSk7XHJcbiAgICAgICAgICAgIGxldCByb3dEYXRhPSQoJy5kYXRhVGFibGVPcmRlclByb2R1Y3RTZWxlY3QnKS5EYXRhVGFibGUoKS5yb3coJCh0aGlzKS5jbG9zZXN0KCd0cicpKS5kYXRhKCk7XHJcbiAgICAgICAgICAgIHJvb3Qub3JkZXJJdGVtc0NoYW5nZShyb3dEYXRhLHF1YW50aXR5KVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICAkKFwiLmRhdGFUYWJsZU9yZGVyUHJvZHVjdFNlbGVjdCAuZGV0YWlscy1jb250cm9sMiBpbnB1dFt0eXBlPXRleHRdXCIpLmVhY2goZnVuY3Rpb24gKCl7XHJcbiAgICAgICAgICAgIC8vZGVidWcoJ2V6IGEgZnVuY3Rpb24yJylcclxuICAgICAgICAgICAgbGV0IHF1YW50aXR5PSQodGhpcykudmFsKCk7XHJcbiAgICAgICAgICAgIGxldCByb3dEYXRhPSQoJy5kYXRhVGFibGVPcmRlclByb2R1Y3RTZWxlY3QnKS5EYXRhVGFibGUoKS5yb3coJCh0aGlzKS5jbG9zZXN0KCd0cicpKS5kYXRhKCk7XHJcblxyXG4gICAgICAgICAgICBpZihPcmRlci5wcm9kdWN0U2VsZWN0ZWRbcm93RGF0YS5pZF0pe1xyXG4gICAgICAgICAgICAgICAgZGVidWcocm93RGF0YSk7XHJcbiAgICAgICAgICAgICAgICBkZWJ1ZygkKCQodGhpcykuY2xvc2VzdCgndHInKS5maW5kKCdpbnB1dFt0eXBlPW51bWJlcl0nKVswXSkpO1xyXG4gICAgICAgICAgICAgICAgZGVidWcoT3JkZXIucHJvZHVjdFNlbGVjdGVkW3Jvd0RhdGEuaWRdKTtcclxuICAgICAgICAgICAgICAgIGxldCBxdWFudGl0eUN1cnJlbnQ9T3JkZXIucHJvZHVjdFNlbGVjdGVkW3Jvd0RhdGEuaWRdO1xyXG4gICAgICAgICAgICAgICAgaWYodHlwZW9mIHF1YW50aXR5Q3VycmVudCE9J3N0cmluZycpe1xyXG4gICAgICAgICAgICAgICAgICAgIHF1YW50aXR5Q3VycmVudCs9Jyc7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAkKCQodGhpcykuY2xvc2VzdCgndHInKS5maW5kKCdpbnB1dFt0eXBlPW51bWJlcl0nKVswXSkudmFsKHF1YW50aXR5Q3VycmVudC5yZXBsYWNlKCcsJywnLicpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuXHJcbiAgICAgICAgJChcIi5kYXRhVGFibGVPcmRlclByb2R1Y3RTZWxlY3QgLmRldGFpbHMtY29udHJvbDIgYnV0dG9uXCIpLm9mZignY2xpY2snKTtcclxuICAgICAgICAkKFwiLmRhdGFUYWJsZU9yZGVyUHJvZHVjdFNlbGVjdCAuZGV0YWlscy1jb250cm9sMiBidXR0b25cIikub24oJ2NsaWNrJyxmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIC8vIGRlYnVnKCcuZGV0YWlscy1jb250cm9sMiBidXR0b24gY2xpY2sgJylcclxuICAgICAgICAgICAgLy8gZGVidWcodGhpcyk7XHJcbiAgICAgICAgICAgICQodGhpcykucGFyZW50KCkuZmluZCgnaW5wdXRbdHlwZT10ZXh0XScpLnRyaWdnZXIoJ2NoYW5nZScpO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmluaXRWaWV3UHJvZHVjdFNlbGVjdD1mdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgbGV0IGZ1bmN0aW9uTmFtZT0naW5pdFZpZXdQcm9kdWN0U2VsZWN0JztcclxuICAgICAgICBjb25zb2xlLmxvZyhmdW5jdGlvbk5hbWUrJyBjYWxsZWQnKTtcclxuICAgICAgICBpZih2aWV3SW5pY2lhbGl6ZWQuaW5jbHVkZXMoZnVuY3Rpb25OYW1lKSl7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy9kZWJ1ZyhPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhyb290KSk7XHJcbiAgICAgICAgcm9vdC5zZXREYXRhdGFibGVIZWFkZXJUZXh0KCcnKTtcclxuICAgICAgICByb290LlN0ZXBwZXIuc2V0T3B0cyh7b25BZnRlckFjdGl2YXRlOmZ1bmN0aW9uICgpe319KTtcclxuICAgICAgICAvL0Bub3RlOiBiZSBrZWxsIGthcGNzb2xuaSBheiBlbG9uZXpldGV0XHJcbiAgICAgICAgcm9vdC5TdGVwcGVyLmFkZENvbXBsZXRlZCgnaW52b2ljZScpO1xyXG4gICAgICAgIHJvb3QuU3RlcHBlci5hZGRFbmFibGVkKCdpbnZvaWNlJyk7XHJcbiAgICAgICAgbGV0IENTU1NlbGVjdG9yRm9ybT0nLm9yZGVyUGFyYW1ldGVyRm9ybSc7XHJcbiAgICAgICAgLy9jb25zb2xlLmxvZyhPcHRzLlVSTC5nZXREYXRhVGFibGVDb250ZW50UHJvZHVjdExpc3QpO2NoYW5nZVxyXG4gICAgICAgIGRlYnVnKChDU1NTZWxlY3RvckZvcm0rJyAuZmEtc2VhcmNoJykpO1xyXG5cclxuICAgICAgICAkKCcuc2lkZWJhci1zZWFyY2ggLmZhLXNlYXJjaCcpLm9mZignY2xpY2snKTtcclxuICAgICAgICAkKCcuc2lkZWJhci1zZWFyY2ggLmZhLXNlYXJjaCcpLm9uKCdjbGljaycscm9vdC5jbGlja1NlYXJjaFByb2R1Y3QpO1xyXG5cclxuICAgICAgICAkKCdhLnNpZGViYXIuZmF2b3JpdGVzJykub2ZmKCdjbGljaycpO1xyXG4gICAgICAgICQoJ2Euc2lkZWJhci5mYXZvcml0ZXMnKS5vbignY2xpY2snLHJvb3QuY2xpY2tGYXZvcml0ZXNQcm9kdWN0KTtcclxuXHJcbiAgICAgICAgJCgnYS5zaWRlYmFyLm9mdGVuJykub2ZmKCdjbGljaycpO1xyXG4gICAgICAgICQoJ2Euc2lkZWJhci5vZnRlbicpLm9uKCdjbGljaycscm9vdC5jbGlja09mdGVuUHJvZHVjdCk7XHJcblxyXG4gICAgICAgICQoJ2Euc2lkZWJhci5sYXN0Jykub2ZmKCdjbGljaycpO1xyXG4gICAgICAgICQoJ2Euc2lkZWJhci5sYXN0Jykub24oJ2NsaWNrJyxyb290LmNsaWNrTGFzdFByb2R1Y3QpO1xyXG5cclxuICAgICAgICAkKCdhLnNpZGViYXIud2Vla2x5Jykub2ZmKCdjbGljaycpO1xyXG4gICAgICAgICQoJ2Euc2lkZWJhci53ZWVrbHknKS5vbignY2xpY2snLHJvb3QuY2xpY2tXZWVrbHlQcm9kdWN0KTtcclxuXHJcbiAgICAgICAgJCgnYS5zaWRlYmFyLmtyZWwnKS5vZmYoJ2NsaWNrJyk7XHJcbiAgICAgICAgJCgnYS5zaWRlYmFyLmtyZWwnKS5vbignY2xpY2snLHJvb3QuY2xpY2tLcmVsUHJvZHVjdCk7XHJcblxyXG4gICAgICAgICQoJ2Euc2lkZWJhci5zcGVjaWFsT2ZmZXInKS5vZmYoJ2NsaWNrJyk7XHJcbiAgICAgICAgJCgnYS5zaWRlYmFyLnNwZWNpYWxPZmZlcicpLm9uKCdjbGljaycscm9vdC5jbGlja1NwZWNpYWxPZmZlcik7XHJcblxyXG5cclxuICAgICAgICAkKCcuc2lkZWJhci1zZWFyY2ggaW5wdXRbbmFtZT1zZWFyY2hWYWx1ZV0nKS5vZmYoJ2tleXByZXNzJyk7XHJcbiAgICAgICAgJCgnLnNpZGViYXItc2VhcmNoIGlucHV0W25hbWU9c2VhcmNoVmFsdWVdJykub24oJ2tleXByZXNzJyxmdW5jdGlvbiAoZXZlbnQpIHtcclxuICAgICAgICAgICAgaWYgKCBldmVudC53aGljaCA9PSAxMyApIHtcclxuICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYoJCh0aGlzKS52YWwoKS5sZW5ndGg+PTIpe1xyXG4gICAgICAgICAgICAgICAgcm9vdC5zZWFyY2hQcm9kdWN0QnlTdHJpbmcoJCh0aGlzKS52YWwoKStldmVudC5rZXkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcblxyXG5cclxuXHJcbiAgICAgICAgJCgnLnNpZGViYXItd3JhcHBlciAuc2lkZWJhci1tZW51IC5zaWRlYmFyLWRyb3Bkb3duIC5zaWRlYmFyLXN1Ym1lbnUgbGkgYS5jYXRlZ29yeUl0ZW0uY2xpY2thYmxlJykub2ZmKCdjbGljaycpO1xyXG4gICAgICAgICQoJy5zaWRlYmFyLXdyYXBwZXIgLnNpZGViYXItbWVudSAuc2lkZWJhci1kcm9wZG93biAuc2lkZWJhci1zdWJtZW51IGxpIGEuY2F0ZWdvcnlJdGVtLmNsaWNrYWJsZScpLm9uKCdjbGljaycsXHJcbiAgICAgICAgICAgIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIGxldCBncm91cElkPSQodGhpcykuZGF0YSgnaWQnKTtcclxuICAgICAgICAgICAgICAgIHNlbGVjdGVkUHJvZHVjdEdyb3VwPWdyb3VwSWQ7XHJcbiAgICAgICAgICAgICAgICBkYXRhVGFibGVTZWFyY2hTdHI9bnVsbDtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGdyb3VwSWQpO1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2cocm9vdC5nZXRUcmVlUGF0aE5hbWUodGhpcykpO1xyXG4gICAgICAgICAgICAgICAgcm9vdC5zZXREYXRhdGFibGVIZWFkZXJUZXh0KHJvb3QuZ2V0VHJlZVBhdGhOYW1lKHRoaXMpKTtcclxuLypcclxuICAgICAgICAgICAgICAgIGxldCBhamF4RGF0YT17XHJcbiAgICAgICAgICAgICAgICAgICAgJ2dyb3VwSWQnOmdyb3VwSWQsXHJcbiAgICAgICAgICAgICAgICAgICAgJ3N1cHBsaWVyX2lkJzpPcmRlci5zdXBwbGllcklkLFxyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgIC8vJCgnLmRhdGFUYWJsZU9yZGVyUHJvZHVjdFNlbGVjdCcpLkRhdGFUYWJsZSgpLmFqYXguZGF0YShhamF4RGF0YSkubG9hZCgpO1xyXG5cclxuKi9cclxuLypcclxuICAgICAgICAgICAgICAgIGxldCBhamF4VXJsPU9wdHMuVVJMLmdldERhdGFUYWJsZUNvbnRlbnRQcm9kdWN0TGlzdCsnP2dyb3VwSWQ9Jytncm91cElkKycmc3VwcGxpZXJfaWQ9JytPcmRlci5zdXBwbGllcklkO1xyXG4gICAgICAgICAgICAgICAgJCgnLmRhdGFUYWJsZU9yZGVyUHJvZHVjdFNlbGVjdCcpLkRhdGFUYWJsZSgpLmFqYXgudXJsKGFqYXhVcmwpLmxvYWQoKTtcclxuKi9cclxuICAgICAgICAgICAgICAgICQoJy5kYXRhVGFibGVPcmRlclByb2R1Y3RTZWxlY3QnKS5EYXRhVGFibGUoKS5hamF4LnJlbG9hZCgpO1xyXG4gICAgICAgICAgICB9KTtcclxuXHJcblxyXG4gICAgICAgIGxldCB0YWJsZSA9IHJvb3QuZ2V0RGF0YXRhYmxlcyhPcmRlci5nZXREYXRhKCdvcmRlclR5cGUnKSk7XHJcblxyXG4gICAgICAgICQoJy5kYXRhVGFibGVPcmRlclByb2R1Y3RTZWxlY3QnKS5vbiggJ2luaXQuZHQnLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCAnVGFibGUgaW5pdGlhbGlzYXRpb24gY29tcGxldGU6ICcrbmV3IERhdGUoKS5nZXRUaW1lKCkgKTtcclxuICAgICAgICB9ICkuZGF0YVRhYmxlKCk7XHJcblxyXG5cclxuXHJcbiAgICAgICAgJCgnLmRhdGFUYWJsZU9yZGVyUHJvZHVjdFNlbGVjdCcpLm9uKCAnZHJhdy5kdCcscm9vdC5wcm9kdWN0U2VsZWN0RGF0YVRhYmxlRHJhd0RUKS5kYXRhVGFibGUoKTtcclxuXHJcbiAgICAgICAgLy8kKCcuZGF0YVRhYmxlT3JkZXJQcm9kdWN0U2VsZWN0Jykub24oICdkcmF3LmR0JywgICkuZGF0YVRhYmxlKCk7XHJcblxyXG4gICAgICAgICQoJy5kYXRhVGFibGVPcmRlclByb2R1Y3RTZWxlY3QnKS5vbiggJ3hoci5kdCcsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgZGVidWcoICdUYWJsZSB4aHIgY29tcGxldGU6ICcrbmV3IERhdGUoKS5nZXRUaW1lKCkgKTtcclxuICAgICAgICB9ICkuZGF0YVRhYmxlKCk7XHJcblxyXG4gICAgICAgIC8vJChcImlucHV0W3R5cGU9J251bWJlciddLmlucHV0TnVtYmVyU3Bpbm5lclwiKS5pbnB1dFNwaW5uZXIoKTtcclxuXHJcbi8qXHJcbi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuIEFkZCBldmVudCBsaXN0ZW5lciBmb3Igb3BlbmluZyBhbmQgY2xvc2luZyBkZXRhaWxzXHJcbiAqL1xyXG5cclxuICAgICAgICAkKCcuZGF0YVRhYmxlT3JkZXJQcm9kdWN0U2VsZWN0IHRib2R5Jykub24oJ2NsaWNrJywgJ3RkLmRldGFpbHMtY29udHJvbCcsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgbGV0IHRyID0gJCh0aGlzKS5jbG9zZXN0KCd0cicpO1xyXG4gICAgICAgICAgICBsZXQgcm93ID0gdGFibGUucm93KCB0ciApO1xyXG5cclxuICAgICAgICAgICAgaWYgKCByb3cuY2hpbGQuaXNTaG93bigpICkge1xyXG4gICAgICAgICAgICAgICAgLy8gVGhpcyByb3cgaXMgYWxyZWFkeSBvcGVuIC0gY2xvc2UgaXRcclxuICAgICAgICAgICAgICAgIHJvdy5jaGlsZC5oaWRlKCk7XHJcbiAgICAgICAgICAgICAgICB0ci5yZW1vdmVDbGFzcygnc2hvd24nKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIC8vIE9wZW4gdGhpcyByb3dcclxuICAgICAgICAgICAgICAgIHJvdy5jaGlsZCggcm9vdC5wcm9kdWN0U2VsZWN0RGF0YXRhYmxlc1Jvd0Zvcm1hdHRlcihyb3cuZGF0YSgpKSApLnNob3coKTtcclxuICAgICAgICAgICAgICAgIHRyLmFkZENsYXNzKCdzaG93bicpO1xyXG4gICAgICAgICAgICAgICAgcm9vdC5iaW5kUHJvZHVjdERldGFpbHNBY3Rpb24oKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gKTtcclxuICAgICAgICB2aWV3SW5pY2lhbGl6ZWQucHVzaChmdW5jdGlvbk5hbWUpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuYmluZFByb2R1Y3REZXRhaWxzQWN0aW9uPWZ1bmN0aW9uICgpe1xyXG4gICAgICAgIHJvb3QuYmluZFJvd0Rlc2NyaXB0aW9uQWN0aW9uKCk7XHJcbiAgICAgICAgcm9vdC5iaW5kUm93RmF2b3JpdGVzQWN0aW9uKCk7XHJcbiAgICAgICAgaWYoT3JkZXIuZ2V0RGF0YSgpWydvcmRlclR5cGUnXT09J3dlZWtseScpe1xyXG4gICAgICAgICAgICByb290LmJpbmRPcmRlckl0ZW1XZWVrUXVhbnRpdHkoKTtcclxuICAgICAgICB9XHJcbiAgIH1cclxuXHJcbiAgICB0aGlzLmJpbmRXZWFrVXNlckhlbHBlcj1mdW5jdGlvbiAoKXtcclxuICAgICAgICAkKCBcImlucHV0LmlucHV0TnVtYmVyU3Bpbm5lclwiICkub2ZmKCBcImZvY3VzXCIpO1xyXG4gICAgICAgICQoIFwiaW5wdXQuaW5wdXROdW1iZXJTcGlubmVyXCIgKS5vbiggXCJmb2N1c1wiLCBmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgbGV0IHF1YW50aXR5PSQodGhpcykudmFsKCk7XHJcbiAgICAgICAgICAgIHF1YW50aXR5PXF1YW50aXR5LnJlcGxhY2UoJywnLCcuJyk7XHJcbiAgICAgICAgICAgIHF1YW50aXR5PXBhcnNlRmxvYXQocXVhbnRpdHkpO1xyXG4gICAgICAgICAgICBpZihxdWFudGl0eT09PTApe1xyXG4gICAgICAgICAgICAgICAgJCh0aGlzKS52YWwoJycpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICAkKCBcImlucHV0W3R5cGU9dGV4dF0uaW5wdXROdW1iZXJTcGlubmVyXCIgKS5vZmYoIFwia2V5cHJlc3NcIik7XHJcbiAgICAgICAgJCggXCJpbnB1dFt0eXBlPXRleHRdLmlucHV0TnVtYmVyU3Bpbm5lclwiICkub24oIFwia2V5cHJlc3NcIiwgZnVuY3Rpb24oZXZlbnQpIHtcclxuICAgICAgICAgICAgaWYgKCBldmVudC53aGljaCA9PSAxMyApIHtcclxuLy8gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignZW50ZXIgcHJlc3NlZCcpO1xyXG4gICAgICAgICAgICAgICAgbGV0IGFjdHVhbEl0ZW09dGhpcztcclxuICAgICAgICAgICAgICAgIGxldCBpdGVtcz0kKCBcImlucHV0W3R5cGU9dGV4dF0uaW5wdXROdW1iZXJTcGlubmVyXCIgKTtcclxuICAgICAgICAgICAgICAgIGl0ZW1zLmVhY2goZnVuY3Rpb24gKGl0ZW0pe1xyXG4vLyAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2codGhpcyk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYodGhpcz09YWN0dWFsSXRlbSl7XHJcbi8vICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihpdGVtKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYoaXRlbSsxPD1pdGVtcy5sZW5ndGgpe1xyXG4vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGl0ZW1zW2l0ZW0rMV0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJChpdGVtc1tpdGVtKzFdKS5mb2N1cygpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuYmluZE9yZGVySXRlbVdlZWtRdWFudGl0eT1mdW5jdGlvbiAoKXtcclxuICAgICAgICAkKFwiaW5wdXQucHJvZHVjdFNlbGVjdERheVF1YW50aXR5XCIpLm9mZignY2hhbmdlJyk7XHJcbiAgICAgICAgJChcImlucHV0LnByb2R1Y3RTZWxlY3REYXlRdWFudGl0eVwiKS5vbignY2hhbmdlJyxmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKHRoaXMubmFtZSk7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKHRoaXMudmFsdWUpO1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZygkKHRoaXMpLmRhdGEoJ2RheWluZGV4JykpO1xyXG5cclxuICAgICAgICAgICAgbGV0IHJvd0RhdGE9bnVsbDtcclxuICAgICAgICAgICAgbGV0IHJvd05vZGU9JCgkKHRoaXMpLmNsb3Nlc3QoJ3RhYmxlLm9yZGVyUHJvZHVjdFNlbGVjdFJvd0RldGFpbHNUYWJsZScpLmNsb3Nlc3QoJ3RyJykpLnByZXYoKTtcclxuICAgICAgICAgICAgcm93RGF0YT0kKCcuZGF0YVRhYmxlT3JkZXJQcm9kdWN0U2VsZWN0JykuRGF0YVRhYmxlKCkucm93KHJvd05vZGUpLmRhdGEoKTtcclxuICAgICAgICAgICAgY29uc29sZS5sb2cocm93RGF0YSk7XHJcbiAgICAgICAgICAgIGxldCBxdWFudGl0eT0kKHRoaXMpLnZhbCgpO1xyXG4gICAgICAgICAgICBxdWFudGl0eT1xdWFudGl0eS5yZXBsYWNlKCcsJywnLicpO1xyXG4gICAgICAgICAgICBxdWFudGl0eT1wYXJzZUZsb2F0KHF1YW50aXR5KTtcclxuICAgICAgICAgICAgY29uc29sZS5sb2cocm93RGF0YS5pZCk7XHJcbiAgICAgICAgICAgIHJvb3Qub3JkZXJJdGVtc0NoYW5nZShyb3dEYXRhLHF1YW50aXR5LCQodGhpcykuZGF0YSgnZGF5aW5kZXgnKSk7XHJcbi8vICAgICAgICAgICAgcm9vdC5vcmRlckl0ZW1zQ2hhbmdlXHJcbiAgICAgICAgICAgIC8vb3JkZXJJdGVtc0NoYW5nZVxyXG4gICAgICAgICAgICAvL3F1YW50aXR5WzE2ODNdWzFdXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuYWZ0ZXJTeW5jT3JkZXJEYXRhVG9TZXJ2ZXI9ZnVuY3Rpb24gKGRhdGEpIHtcclxuICAgICAgICAvL3Jvb3QudG9nZ2xlRW5hYmxlU2VuZCgpO1xyXG4gICAgICAgIC8vY29uc29sZS5sb2coJ21vc3QgdmVnemV0dC4gZW5ueWl0IGtpc3plZCcrYmF0Y2hOdW0pO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDxxdWV1ZUFqYXgubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coJ3NoaWZ0ZWwnKVxyXG4gICAgICAgICAgICBxdWV1ZUFqYXguc2hpZnQoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy9jb25zb2xlLmxvZygncmVtYWluaW5nIGxlZnQgJytxdWV1ZUFqYXgubGVuZ3RoKTtcclxuICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7XHJcbiAgICAgICAgICAgIHN5bmNEb2luZz1mYWxzZTtcclxuICAgICAgICAgICAgcm9vdC5zeW5jT3JkZXJEYXRhVG9TZXJ2ZXIoKTtcclxuICAgICAgICB9LCBPcHRzLmRhdGFTeW5jUGF1c2VUaW1lKTtcclxuICAgIH1cclxuICAgIGxldCBxdWV1ZUFqYXg9W107XHJcbiAgICBsZXQgc3luY0RvaW5nPWZhbHNlO1xyXG5cclxuICAgIHRoaXMuc3luY09yZGVyRGF0YVRvU2VydmVyPWZ1bmN0aW9uICgpIHtcclxuICAgICAgICAvL2RlYnVnKHF1ZXVlQWpheCk7XHJcbiAgICAgICAgaWYoc3luY0RvaW5nKXtcclxuICAgICAgICAgICAgLy9kZWJ1Zygnc3luYyBpbiBwcm9ncmVzcy4uLi4nKTtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZihxdWV1ZUFqYXgubGVuZ3RoPDEpe1xyXG4gICAgICAgICAgICByZXR1cm4gO1xyXG4gICAgICAgIH1cclxuICAgICAgICBzeW5jRG9pbmc9dHJ1ZTtcclxuXHJcbiAgICAgICAgcm9vdC5zZW5kT3JkZXJEYXRhVG9TZXJ2ZXIoJ3Byb2R1Y3RTZWxlY3QnLHJvb3QuYWZ0ZXJTeW5jT3JkZXJEYXRhVG9TZXJ2ZXIpO1xyXG4gICAgICAgIHJldHVybiA7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5vcmRlckl0ZW1zQ2hhbmdlPWZ1bmN0aW9uKEl0ZW1EYXRhLHF1YW50aXR5LGRheUluZGV4KXtcclxuXHJcbi8qXHJcbiAgICAgICAgZGVidWcoJy0tLS0tLS0tLS0tLS0tLS0tJyk7XHJcbiAgICAgICAgZGVidWcoSXRlbURhdGEpO1xyXG4gICAgICAgIGRlYnVnKHF1YW50aXR5KTtcclxuICAgICAgICBkZWJ1ZyhPcmRlci5nZXREYXRhKCdwcm9kdWN0U2VsZWN0ZWQnKSk7XHJcbiAgICAgICAgZGVidWcoJy0tLS0tLS0tLS0tLS0tLS0tJyk7XHJcblxyXG4qL1xyXG4gICAgICAgIGlmKGlzTmFOKHF1YW50aXR5KSl7XHJcbiAgICAgICAgICAgIHF1YW50aXR5PTA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCBwcm9kdWN0U2VsZWN0ZWQ9T3JkZXIuZ2V0RGF0YSgncHJvZHVjdFNlbGVjdGVkJyk7XHJcbiAgICAgICAgY29uc29sZS5ncm91cCgnb3JkZXJJdGVtc0NoYW5nZScpO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKFsncHJvZHVjdFNlbGVjdGVkJyxwcm9kdWN0U2VsZWN0ZWRdKTtcclxuICAgICAgICBjb25zb2xlLmxvZyhbJ0l0ZW1EYXRhJyxJdGVtRGF0YV0pO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKFsnSXRlbURhdGEuaWQnLEl0ZW1EYXRhLmlkXSk7XHJcbiAgICAgICAgY29uc29sZS5sb2coWydxdWFudGl0eScscXVhbnRpdHldKTtcclxuICAgICAgICBjb25zb2xlLmxvZyhbJ2RheUluZGV4JyxkYXlJbmRleF0pO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKHByb2R1Y3RTZWxlY3RlZFtJdGVtRGF0YS5pZF0pO1xyXG5cclxuICAgICAgICBsZXQgcHJvZHVjdFNlbGVjdGVkSXRlbT1wcm9kdWN0U2VsZWN0ZWRbSXRlbURhdGEuaWRdO1xyXG4gICAgICAgIC8qXHJcbiAgICAgICAgaGEgMCBlcnRlayBqb24gZXMgbmVtIGlzIHZvbHQgYWtrb3IgaGFtYXIga2l1Z3JhdGp1a1xyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGlmKHF1YW50aXR5PT0wKXtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcigncXVhbnRpdHk9PTAnKTtcclxuICAgICAgICAgICAgaWYodHlwZW9mIHByb2R1Y3RTZWxlY3RlZEl0ZW09PSd1bmRlZmluZWQnKXtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcignaXR0IGxlcDEnKTtcclxuICAgICAgICAgICAgY29uc29sZS5ncm91cEVuZCgpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmKGRheUluZGV4KXtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCd2YW4gZGF5SW5kZXgnKVxyXG4gICAgICAgICAgICAgICAgaWYodHlwZW9mIHByb2R1Y3RTZWxlY3RlZFtJdGVtRGF0YS5pZF1bZGF5SW5kZXhdPT0ndW5kZWZpbmVkJyl7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coWydwcm9kdWN0U2VsZWN0ZWRJdGVtJyxwcm9kdWN0U2VsZWN0ZWRJdGVtXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignaXR0IGxlcDInKTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmdyb3VwRW5kKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8qXHJcbiAgICAgICAgaGEgYXpvbm9zIGF6IGVydGVrIGtpdWdydW5rXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgaWYoZGF5SW5kZXgpe1xyXG4gICAgICAgICAgICBpZih0eXBlb2YgcHJvZHVjdFNlbGVjdGVkW0l0ZW1EYXRhLmlkXSE9J3VuZGVmaW5lZCdcclxuICAgICAgICAgICAgICAgICYmIHR5cGVvZiBwcm9kdWN0U2VsZWN0ZWRbSXRlbURhdGEuaWRdW2RheUluZGV4XSE9J3VuZGVmaW5lZCcpe1xyXG4gICAgICAgICAgICAgICAgaWYocHJvZHVjdFNlbGVjdGVkW0l0ZW1EYXRhLmlkXVtkYXlJbmRleF09PXF1YW50aXR5KXtcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdhem9ub3MgbmFwaScpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZ3JvdXBFbmQoKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgaWYocHJvZHVjdFNlbGVjdGVkW0l0ZW1EYXRhLmlkXT09cXVhbnRpdHkpe1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignYXpvbm9zJyk7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmdyb3VwRW5kKCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKHF1YW50aXR5PT0wKXtcclxuICAgICAgICAgICAgaWYoZGF5SW5kZXgpe1xyXG4gICAgICAgICAgICAgICAgZGVsZXRlIE9yZGVyLnByb2R1Y3RTZWxlY3RlZFtJdGVtRGF0YS5pZF1bZGF5SW5kZXhdO1xyXG4gICAgICAgICAgICAgICAgZGVsZXRlIHByb2R1Y3RTZWxlY3RlZFtJdGVtRGF0YS5pZF1bZGF5SW5kZXhdO1xyXG4gICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgIGRlbGV0ZSBPcmRlci5wcm9kdWN0U2VsZWN0ZWRbSXRlbURhdGEuaWRdO1xyXG4gICAgICAgICAgICAgICAgZGVsZXRlIHByb2R1Y3RTZWxlY3RlZFtJdGVtRGF0YS5pZF07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgLypcclxuICAgICAgICAgICAgaGEgdmFuIGVydGVrIGVydGVrZXQgYWR1bmshXHJcbiAgICAgICAgICAgICAqL1xyXG4gICAgICAgICAgICBpZihkYXlJbmRleCl7XHJcbiAgICAgICAgICAgICAgICBpZih0eXBlb2YgcHJvZHVjdFNlbGVjdGVkW0l0ZW1EYXRhLmlkXT09J3VuZGVmaW5lZCcpe1xyXG4gICAgICAgICAgICAgICAgICAgIHByb2R1Y3RTZWxlY3RlZFtJdGVtRGF0YS5pZF09W107XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnc2V0IHF1YW50aXR5IHByb2R1Y3RTZWxlY3RlZFtJdGVtRGF0YS5pZF1bZGF5SW5kZXhdJyxxdWFudGl0eSk7XHJcbiAgICAgICAgICAgICAgICBwcm9kdWN0U2VsZWN0ZWRbSXRlbURhdGEuaWRdW2RheUluZGV4XT1xdWFudGl0eTtcclxuICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICBwcm9kdWN0U2VsZWN0ZWRbSXRlbURhdGEuaWRdPXF1YW50aXR5O1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ3NldCBxdWFudGl0eSBwcm9kdWN0U2VsZWN0ZWRbSXRlbURhdGEuaWRdJyxxdWFudGl0eSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc29sZS5sb2coWydwcm9kdWN0U2VsZWN0ZWQnLHByb2R1Y3RTZWxlY3RlZF0pO1xyXG4gICAgICAgIE9yZGVyLnByb2R1Y3RTZWxlY3RlZD1wcm9kdWN0U2VsZWN0ZWQ7XHJcblxyXG4gICAgICAgIGNvbnNvbGUuZ3JvdXBFbmQoKTtcclxuICAgICAgICBxdWV1ZUFqYXgucHVzaChEYXRlLm5vdygpKTtcclxuICAgICAgICByb290LnN5bmNPcmRlckRhdGFUb1NlcnZlcigpO1xyXG5cclxuICAgICAgICByZXR1cm47XHJcblxyXG5cclxuICAgICAgICBpZihwcm9kdWN0U2VsZWN0ZWRbSXRlbURhdGEuaWRdPT1xdWFudGl0eSl7XHJcbiAgICAgICAgICAgIGRlYnVnKCdpdHQgbGVwMTInKTtcclxuICAgICAgICAgICAgY29uc29sZS5ncm91cEVuZCgpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHByb2R1Y3RTZWxlY3RlZFtJdGVtRGF0YS5pZF09cXVhbnRpdHk7XHJcbiAgICAgICAgaWYocXVhbnRpdHk9PTApe1xyXG4gICAgICAgICAgICBkZWxldGUgT3JkZXIucHJvZHVjdFNlbGVjdGVkW0l0ZW1EYXRhLmlkXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgT3JkZXIucHJvZHVjdFNlbGVjdGVkPXByb2R1Y3RTZWxlY3RlZDtcclxuICAgICAgICBjb25zb2xlLmdyb3VwRW5kKCk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG5cclxuICAgICAgICBxdWV1ZUFqYXgucHVzaChEYXRlLm5vdygpKTtcclxuICAgICAgICByb290LnN5bmNPcmRlckRhdGFUb1NlcnZlcigpO1xyXG5cclxuICAgICAgICAvKlxyXG4gICAgICAgIGRlYnVnKE9yZGVyLmdldERhdGEoJ3Byb2R1Y3RTZWxlY3RlZCcpKTtcclxuICAgICAgICBkZWJ1ZygnKioqKioqKioqKioqKioqKioqKicpO1xyXG4qL1xyXG4gICAgfVxyXG4gICAgdGhpcy5pbml0Vmlld0ludm9pY2U9ZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJvb3QuU3RlcHBlci5zZXRPcHRzKHtvbkFmdGVyTG9hZDpmdW5jdGlvbiAoKXt9fSk7XHJcblxyXG4gICAgICAgIGlmKE9iamVjdC5rZXlzKE9yZGVyLnByb2R1Y3RTZWxlY3RlZCkubGVuZ3RoPjApe1xyXG4gICAgICAgICAgICByb290LlN0ZXBwZXIuYWRkQ29tcGxldGVkKCdzZW5kJyk7XHJcbiAgICAgICAgICAgIHJvb3QuU3RlcHBlci5hZGRFbmFibGVkKCdzZW5kJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCBzdHlsZVN0cj0nPGxpbmsgcmVsPVwic3R5bGVzaGVldFwiIGhyZWY9XCInK09wdHMuVVJMLnJvb3QrJy9jc3MvaW52b2ljZS5jc3NcIj4nO1xyXG4gICAgICAgICQoJ3RhYmxlLmludm9pY2UgYnV0dG9uLnByaW50QnV0dG9uJykub2ZmKCdjbGljaycpO1xyXG4gICAgICAgICQoJ3RhYmxlLmludm9pY2UgYnV0dG9uLnByaW50QnV0dG9uJykub24oJ2NsaWNrJyxmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHdpbmRvdy5wcmludCgpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcblxyXG4gICAgICAgICAgICBsZXQgbmV3V2luPSB3aW5kb3cub3BlbihcIlwiKTtcclxuICAgICAgICAgICAgbmV3V2luLmRvY3VtZW50LndyaXRlKHN0eWxlU3RyKTtcclxuICAgICAgICAgICAgbGV0IHByaW50PSQoJ3RhYmxlLmludm9pY2UnKS5jbG9uZSgpO1xyXG4gICAgICAgICAgICBwcmludC5maW5kKCdidXR0b24ucHJpbnRCdXR0b24nKS5yZW1vdmUoKTtcclxuLy8gICAgICAgICAgICBuZXdXaW4uZG9jdW1lbnQud3JpdGUoJCgndGFibGUuaW52b2ljZScpLnByb3AoJ291dGVySFRNTCcpKTtcclxuICAgICAgICAgICAgbmV3V2luLmRvY3VtZW50LndyaXRlKHByaW50LnByb3AoJ291dGVySFRNTCcpKTtcclxuICAgICAgICAgICAgbmV3V2luLnByaW50KCk7XHJcbiAgICAgICAgICAgbmV3V2luLmNsb3NlKCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5yZXNldE9yZGVyPWZ1bmN0aW9uICgpIHtcclxuICAgICAgICByb290LmluaXQoKTtcclxuICAgICAgICByb290LnNldERlbGl2ZXJ5RGF0ZSgnLScpO1xyXG4gICAgICAgIHJvb3Quc2V0U3VwcGxpZXIoJy0nKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5hZnRlck9yZGVyU2VuZE9rPWZ1bmN0aW9uIChkYXRhKSB7XHJcbiAgICAgICAgVG9hc3QuY3JlYXRlKFwiU2VudCFcIiwnT3JkZXIgU2VudCcgLCBUT0FTVF9TVEFUVVMuSU5GTyw1MDAwKTtcclxuICAgICAgICAkKCcuYnV0dG9uT3JkZXJTZW5kJykub2ZmKCdjbGljaycpO1xyXG4gICAgICAgICQoJy5idXR0b25PcmRlclNlbmQnKS5wcm9wKCdkaXNhYmxlZCcsdHJ1ZSk7XHJcbiAgICAgICAgJCgnLnN0YXR1c05hbWVQbGFjZScpLnJlbW92ZUNsYXNzKCdzdGF0dXNCbGluaycpO1xyXG4gICAgICAgICQoJy5zdGF0dXNOYW1lUGxhY2UnKS50ZXh0KCdlbGvDvGxkdmUnKTtcclxuICAgICAgICAkKCcuYnV0dG9uT3JkZXJTZW5kaW5nJykudG9nZ2xlQ2xhc3MoJ2Qtbm9uZScpO1xyXG4gICAgICAgICQoJy5idXR0b25PcmRlclNlbmRPaycpLnRvZ2dsZUNsYXNzKCdkLW5vbmUnKTtcclxuICAgICAgICAkKCdkaXYuaW52b2ljZUNvbnRhaW5lcicpLmh0bWwoZGF0YS5yZXRIVE1MKTtcclxuICAgICAgICAvL3Jvb3QucmVzZXRPcmRlcigpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5hZnRlck9yZGVyU2VuZEVycm9yPWZ1bmN0aW9uIChkYXRhKSB7XHJcbiAgICAgICAgJCgnLmJ1dHRvbk9yZGVyU2VuZCcpLnRvZ2dsZUNsYXNzKCdkLW5vbmUnKTtcclxuICAgICAgICAkKCcuYnV0dG9uT3JkZXJTZW5kaW5nJykudG9nZ2xlQ2xhc3MoJ2Qtbm9uZScpO1xyXG4gICAgICAgICQuZWFjaChBUFAuT3JkZXJNb2R1bGUuU3RlcHBlci5nZXRPcHRzKCkuYXZhaWxhYmxlLGZ1bmN0aW9uIChpbmRleCx2YWx1ZSkge1xyXG4gICAgICAgICAgICBBUFAuT3JkZXJNb2R1bGUuU3RlcHBlci5zZXRFbmFibGVkKHZhbHVlKTtcclxuICAgICAgICAgICAgQVBQLk9yZGVyTW9kdWxlLlN0ZXBwZXIuc2V0Q29tcGxldGVkKHZhbHVlKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmluaXRWaWV3U2VuZD1mdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ2luaXRWaWV3U2VuZCBjYWxsZWQgMicpO1xyXG4gICAgICAgIHJvb3QuU3RlcHBlci5zZXRPcHRzKHtvbkFmdGVyTG9hZDpmdW5jdGlvbiAoKXt9fSk7XHJcbiAgICAgICAgJCgnLmJ1dHRvbk9yZGVyU2VuZCcpLm9mZignY2xpY2snKTtcclxuICAgICAgICAkKCcuYnV0dG9uT3JkZXJTZW5kJykub24oJ2NsaWNrJyxmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdTZW5kIGJ1dG9uIGNsaWNrZWQnKTtcclxuICAgICAgICAgICAgLy9AdG9kbzogZGF0YXN5bmNoZXJlIGFuZCBjYWxsYmFja1xyXG4gICAgICAgICAgICAkKCcuYnV0dG9uT3JkZXJTZW5kJykudG9nZ2xlQ2xhc3MoJ2Qtbm9uZScpO1xyXG4gICAgICAgICAgICAkKCcuYnV0dG9uT3JkZXJTZW5kaW5nJykudG9nZ2xlQ2xhc3MoJ2Qtbm9uZScpO1xyXG4gICAgICAgICAgICAvKipcclxuICAgICAgICAgICAgICogUE0xNThcclxuICAgICAgICAgICAgICovXHJcbiAgICAgICAgICAgICQuZWFjaChBUFAuT3JkZXJNb2R1bGUuU3RlcHBlci5nZXRPcHRzKCkuYXZhaWxhYmxlLGZ1bmN0aW9uIChpbmRleCx2YWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgcm9vdC5TdGVwcGVyLnVuc2V0RW5hYmxlZCh2YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICByb290LlN0ZXBwZXIudW5zZXRDb21wbGV0ZWQodmFsdWUpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgLyoqXHJcblxyXG4gICAgICAgICAgICAgKi9cclxuICAgICAgICAgICAgcm9vdC5zZW5kT3JkZXJEYXRhVG9TZXJ2ZXIoJ3NlbmQnLHJvb3QuYWZ0ZXJPcmRlclNlbmRPayxyb290LmFmdGVyT3JkZXJTZW5kRXJyb3IpO1xyXG5cclxuLyogICAgICAgICAgICBsZXQgYWpheERhdGE9e307XHJcbiAgICAgICAgICAgIGFqYXhEYXRhLl90b2tlbj1PcHRzLnRva2VuO1xyXG4gICAgICAgICAgICBhamF4RGF0YS5zZW5kPXRydWU7XHJcbiAgICAgICAgICAgICQuZXh0ZW5kKGFqYXhEYXRhLE9yZGVyKTtcclxuICAgICAgICAgICAgJC5hamF4KHtcclxuICAgICAgICAgICAgICAgdXJsOiBPcHRzLlVSTC5zdG9yZSxcclxuICAgICAgICAgICAgICAgIG1ldGhvZDonUE9TVCcsXHJcbiAgICAgICAgICAgICAgICBkYXRhOmFqYXhEYXRhLFxyXG4gICAgICAgICAgICAgICAgc3VjY2VzczpmdW5jdGlvbiAoZGF0YSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmKGRhdGEuc3VjY2Vzcyl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvb3QuYWZ0ZXJPcmRlclNlbmRPayhkYXRhKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pOyovXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMudGVzdE1vZGVTZW5kPWZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICB9XHJcblxyXG5cclxuICAgIHRoaXMudGVzdE1vZGU9ZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCd0ZXN0TW9kZSBjYWxsZWQgJylcclxuICAgICAgICBPcmRlci5zZXREYXRhKHtcclxuICAgICAgICAgICAgaWQ6MjM0LFxyXG4gICAgICAgICAgICBzdXBwbGllcklkOjcsXHJcbiAgICAgICAgICAgIHByb2R1Y3RTZWxlY3RlZDp7XHJcbiAgICAgICAgICAgICAgICAxMTYgOiAzLFxyXG4gICAgICAgICAgICAgICAgMjkzIDogMixcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgY29udGFjdE5hbWU6J0NvbnRhY3QgTmFtZScsXHJcbiAgICAgICAgICAgIG5vdGU6J05vdGUnLFxyXG4gICAgICAgICAgICB0eXBlOidkYWlseScsXHJcbiAgICAgICAgICAgIGRlbGl2ZXJ5RGF0ZTpPcHRzLmRlZmF1bHREZWxpdmVyeURhdGUsXHJcbiAgICAgICAgICAgIGRlbGl2ZXJ5QWRkcmVzczoxMixcclxuICAgICAgICB9KTtcclxuICAgICAgICBjb25zb2xlLmxvZyhPcmRlci5nZXREYXRhKCkpO1xyXG5cclxuICAgICAgICBjb25zb2xlLmxvZygnKioqKioqKioqKioqKioqKioqKicpO1xyXG4gICAgICAgIC8vcm9vdC5TdGVwcGVyLnNldE9wdHMoeydVcmxEYXRhJzp7J3N1cHBsaWVySWQnOnN1cHBsaWVySWR9fSk7XHJcbiAgICAgICAgcm9vdC5TdGVwcGVyLnNldE9wdHMoeydVcmxEYXRhJzp7J3N1cHBsaWVySWQnOk9yZGVyLnN1cHBsaWVySWQsaWQ6T3JkZXIuaWR9fSk7XHJcbiAgICAgICAgdGhpcy5TdGVwcGVyLmluaXQoe1xyXG4gICAgICAgICAgICBVUkw6IHtcclxuICAgICAgICAgICAgICAgIGNyZWF0ZTogT3B0cy5VUkwuY3JlYXRlLFxyXG4gICAgICAgICAgICB9LFxyXG4vKlxyXG5jc3VwYXN6IGF6IGVsZWplcm9sXHJcbiAgICAgICAgICAgIGNvbXBsZXRlOlsnc3VwcGxpZXInXSxcclxuICAgICAgICAgICAgZW5hYmxlOiBbJ3N1cHBsaWVyJ10sXHJcbiAgICAgICAgICAgIGFjdGl2ZTogJ3N1cHBsaWVyJyxcclxuICAgICAgICAgICAgb25BZnRlckFjdGl2YXRlOnRoaXMuaW5pdFZpZXdTdXBwbGllcixcclxuXHJcbnByb2R1Y3Qgc2VsZWN0XHJcbiAgICAgICAgICAgIGNvbXBsZXRlOlsnc3VwcGxpZXInLCdwYXJhbWV0ZXInLCdwcm9kdWN0U2VsZWN0J10sXHJcbiAgICAgICAgICAgIGVuYWJsZTogWydzdXBwbGllcicsJ3BhcmFtZXRlcicsJ3Byb2R1Y3RTZWxlY3QnXSxcclxuICAgICAgICAgICAgYWN0aXZlOiAncHJvZHVjdFNlbGVjdCcsXHJcbiAgICAgICAgICAgIG9uQWZ0ZXJBY3RpdmF0ZTp0aGlzLmluaXRWaWV3UHJvZHVjdFNlbGVjdCxcclxuXHJcbmZ1bGxvc1xyXG4gICAgICAgICAgICBjb21wbGV0ZTpbJ3N1cHBsaWVyJywncGFyYW1ldGVyJywncHJvZHVjdFNlbGVjdCcsJ2ludm9pY2UnXSxcclxuICAgICAgICAgICAgZW5hYmxlOiBbJ3N1cHBsaWVyJywncGFyYW1ldGVyJywncHJvZHVjdFNlbGVjdCcsJ2ludm9pY2UnLCdzZW5kJ10sXHJcbiAgICAgICAgICAgIGFjdGl2ZTogJ3Byb2R1Y3RTZWxlY3QnLFxyXG4gICAgICAgICAgICBvbkFmdGVyQWN0aXZhdGU6dGhpcy5pbml0Vmlld1Byb2R1Y3RTZWxlY3QsXHJcblxyXG5zZW5kXHJcbiAgICAgICAgICAgIGNvbXBsZXRlOlsnc3VwcGxpZXInLCdwYXJhbWV0ZXInLCdwcm9kdWN0U2VsZWN0JywnaW52b2ljZScsJ3NlbmQnXSxcclxuICAgICAgICAgICAgZW5hYmxlOiBbJ3N1cHBsaWVyJywncGFyYW1ldGVyJywncHJvZHVjdFNlbGVjdCcsJ2ludm9pY2UnLCdzZW5kJ10sXHJcbiAgICAgICAgICAgIGFjdGl2ZTogJ3NlbmQnLFxyXG4gICAgICAgICAgICBvbkFmdGVyQWN0aXZhdGU6dGhpcy5pbml0Vmlld1Byb2R1Y3RTZWxlY3QsXHJcblxyXG4qL1xyXG4gICAgICAgICAgICBjb21wbGV0ZTpbJ3N1cHBsaWVyJywncGFyYW1ldGVyJywncHJvZHVjdFNlbGVjdCddLFxyXG4gICAgICAgICAgICBlbmFibGU6IFsnc3VwcGxpZXInLCdwYXJhbWV0ZXInLCdwcm9kdWN0U2VsZWN0J10sXHJcbiAgICAgICAgICAgIGFjdGl2ZTogJ3Byb2R1Y3RTZWxlY3QnLFxyXG4gICAgICAgICAgICBvbkFmdGVyQWN0aXZhdGU6dGhpcy5pbml0Vmlld1Byb2R1Y3RTZWxlY3QsXHJcblxyXG5cclxuICAgICAgICAgICAgYXV0b0NhbGxiYWNrOiB7XHJcbiAgICAgICAgICAgICAgICBpbnZvaWNlOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgb25BZnRlckFjdGl2YXRlOnJvb3QuaW5pdFZpZXdJbnZvaWNlXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgc2VuZDoge1xyXG4gICAgICAgICAgICAgICAgICAgIG9uQWZ0ZXJBY3RpdmF0ZTpyb290LmluaXRWaWV3U2VuZFxyXG4gICAgICAgICAgICAgICAgfSxcclxuXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgY29uc29sZS5sb2coJyoqKioqKioqKioqKioqKioqKionKTtcclxuXHJcbiAgICB9XHJcbiAgICB0aGlzLnRvZ2dsZUVuYWJsZVNlbmQ9ZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCd0b2dnbGVFbmFibGVTZW5kIGNhbGxlZCcpO1xyXG4gICAgICAgIGxldCBhamF4VXJsPU9wdHMuVVJMLmNoZWNrUmVhZHlUb1NlbmQucmVwbGFjZSgnJWlkJScsT3JkZXIuaWQpO1xyXG4gICAgICAgICQuYWpheCh7XHJcbiAgICAgICAgICAgIHVybDphamF4VXJsLFxyXG4gICAgICAgICAgICBzdWNjZXNzOmZ1bmN0aW9uIChkYXRhKSB7XHJcbiAgICAgICAgICAgICAgICBpZihkYXRhLnN1Y2Nlc3Mpe1xyXG4gICAgICAgICAgICAgICAgICAgIGlmKGRhdGEucmVhZHlUb1NlbmQpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByb290LlN0ZXBwZXIuYWRkQ29tcGxldGVkKCdzZW5kJyk7XHJcbi8qXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvb3QuU3RlcHBlci5hZGRDb21wbGV0ZWQoJ2ludm9pY2UnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcm9vdC5TdGVwcGVyLmFkZEVuYWJsZWQoJ2ludm9pY2UnKTtcclxuKi9cclxuICAgICAgICAgICAgICAgICAgICAgICAgcm9vdC5TdGVwcGVyLmFkZEVuYWJsZWQoJ3NlbmQnKTtcclxuICAgICAgICAgICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcm9vdC5TdGVwcGVyLnVuc2V0Q29tcGxldGVkKCdzZW5kJyk7XHJcbi8qXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvb3QuU3RlcHBlci51bnNldENvbXBsZXRlZCgnaW52b2ljZScpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByb290LlN0ZXBwZXIudW5zZXRFbmFibGVkKCdpbnZvaWNlJyk7XHJcbiovXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvb3QuU3RlcHBlci51bnNldEVuYWJsZWQoJ3NlbmQnKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhkYXRhKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxufVxyXG4iXSwibmFtZXMiOlsid2luZG93IiwiT3JkZXJNb2R1bERlZmF1bHQiLCJhY3Rpb25GdW5jdGlvbiIsIkRhdGFNb2RlbE9yZGVyIiwiX0RhdGFNb2RlbCIsImRhdGEiLCJvcHRpb25zIiwiX3RoaXMiLCJfY2xhc3NDYWxsQ2hlY2siLCJfY2FsbFN1cGVyIiwicHJvZHVjdFNlbGVjdGVkIiwicHJvZHVjdENvbW1lbnQiLCJjb25zb2xlIiwibG9nIiwiY29uc3RydWN0b3IiLCJuYW1lIiwiX2luaGVyaXRzIiwiX2NyZWF0ZUNsYXNzIiwiRGF0YU1vZGVsIiwiU3RlcHBlciIsIk9wdHMiLCJjb21wbGV0ZSIsImF2YWlsYWJsZSIsImVuYWJsZSIsImxvYWQiLCJleGNsdWRlTG9hZGVkIiwibG9hZGVkIiwiYWN0aXZlIiwiVVJMIiwiY3JlYXRlIiwiVXJsRGF0YSIsIm9uQWZ0ZXJMb2FkIiwib25BZnRlckFjdGl2YXRlIiwiYXV0b0NhbGxiYWNrIiwibm93TG9hZGVkIiwicm9vdCIsImNvbnN0cnVjdCIsIiQiLCJleHRlbmQiLCJnZXRPcHRzIiwic2V0T3B0cyIsImluaXQiLCJkZWJ1ZyIsImVhY2giLCJzdGVwTmFtZSIsImluY2x1ZGVzIiwic2V0Q29tcGxldGVkIiwic2V0RW5hYmxlZCIsImxvYWRTdGVwQ29udGVudCIsInNldEFjdGl2ZSIsImJpbmRDbGlja0FjdGlvbiIsInN0ZXBDbGlja0J1dHRvbnMiLCJvZmYiLCJvbiIsInN0ZXBDbGljayIsImFkZENsYXNzIiwidW5zZXRDb21wbGV0ZWQiLCJyZW1vdmVDbGFzcyIsImFycmF5UmVtb3ZlIiwidW5zZXRFbmFibGVkIiwiY29udGVudHMiLCJ1bndyYXAiLCJzdGVwSXRlbSIsImh0bWwiLCJhZGRFbmFibGVkIiwicHVzaCIsImFkZENvbXBsZXRlZCIsImFqYXgiLCJhc3luYyIsInR5cGUiLCJ1cmwiLCJjYWNoZSIsInN1Y2Nlc3MiLCJyZXN1bHQiLCJjb250YWluZXIiLCJjYXBpdGFsaXplIiwiaW5BcnJheSIsImNsZWFyTG9hZGVkIiwiY2xhc3NMaXN0IiwiY29udGFpbnMiLCJzZXRBY3RpdmVGaW5pc2giLCJzaG93IiwiaGlkZSIsImV2ZW50IiwicHJldmVudERlZmF1bHQiLCJjdXJyZW50VGFyZ2V0IiwiT3JkZXJNb2R1bGUiLCJ0ZXN0TW9kZSIsIm5lZWRTdGVwcGVyIiwiQ1NTU2VsZWN0b3JGb3JtIiwiZGVmYXVsdERlbGl2ZXJ5RGF0ZSIsImRhdGFTeW5jUGF1c2VUaW1lIiwidG9rZW4iLCJnZXREYXRhVGFibGVDb250ZW50UHJvZHVjdExpc3QiLCJjaGVja1JlYWR5VG9TZW5kIiwiaW5kZXgiLCJlZGl0Iiwic3RvcmUiLCJ1cGRhdGUiLCJkZXN0cm95IiwidG9nZ2xlRmF2b3JpdGVzIiwiUHVibGljVmFyIiwiUHVibGljVmFyMiIsIkFwaVRva2VuIiwiT3JkZXIiLCJ2aWV3SW5pY2lhbGl6ZWQiLCJjbGlja09yZGVyRWRpdCIsImFqYXhVcmwiLCJyZXBsYWNlIiwiaWQiLCJBUFAiLCJsb2FkTWFpbkNvbnRlbnQiLCJhZnRlck9yZGVyRGVsZXRlZCIsIlRvYXN0IiwiVE9BU1RfU1RBVFVTIiwiREFOR0VSIiwiY2xpY2tPcmRlckRlbGV0ZUNvbmZpcm1lZCIsIm1vZGFsIiwiYWpheERhdGEiLCJfdG9rZW4iLCJtZXRob2QiLCJpbml0Vmlld09yZGVyU2VsZWN0IiwiYWN0aW9uIiwib3JkZXJJZCIsImNsb3Nlc3QiLCJmaW5kIiwidGV4dCIsImluaXRTdGVwcGVyIiwiZ2V0RGF0YSIsInNldERlbGl2ZXJ5RGF0ZSIsInNldFN1cHBsaWVyIiwidW5FbmFibGVkIiwidmFsdWUiLCJzdGVwQWN0aXZlIiwic3RlcENvbXBsZXRlIiwic3RlcEVuYWJsZSIsInN0ZXBPbkFmdGVyQWN0aXZhdGUiLCJhdmFsYWlibGVTdGVwcyIsInN0ZXBVcmxEYXRhIiwic3RlcEF1dG9DYWxsYmFjayIsIl9pdGVyYXRvciIsIl9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyIiwiX3N0ZXAiLCJzIiwibiIsImRvbmUiLCJpdGVtIiwiZXJyIiwiZSIsImYiLCJzdXBwbGllcklkIiwiX2l0ZXJhdG9yMiIsIl9zdGVwMiIsImluaXRPcmRlciIsInN1cHBsaWVyTmFtZSIsInNldERhdGEiLCJkYXRlVGV4dCIsImRhdGVUZXh0VG8iLCJkYXRlVGV4dEh1bWFuIiwicmVwbGFjZUFsbCIsImxlbmd0aCIsInZhbCIsInNldFN1cHBsaWVyQ29tcGxldGVkIiwiaW5pdFZpZXdQYXJhbWV0ZXIiLCJhZnRlck9yZGVyU2V0U3VwcGxpZXJPayIsInN1cHBsaWVyIiwiSU5GTyIsImluaXRWaWV3U3VwcGxpZXIiLCJzdG9yZVR5cGUiLCJXQVJOSU5HIiwiY2hlY2tDb250YWN0TmFtZUZpZWxkIiwibm9kZSIsInNlbmRPcmRlckRhdGFUb1NlcnZlciIsInVwZGF0ZVR5cGUiLCJjYWxsYmFjayIsImVycm9yQ2FsbGJhY2siLCJhamF4TWV0aG9kIiwiX21ldGhvZCIsImpzb25Ub0Zvcm1EYXRhIiwiY29udGVudFR5cGUiLCJwcm9jZXNzRGF0YSIsImVycm9yIiwieGhyIiwiYWpheE9wdGlvbnMiLCJ0aHJvd25FcnJvciIsImFqYXhFcnJvckhhbmRsZXIiLCJyZXNwb25zZUpTT04iLCJhZnRlck9yZGVyU2V0UGFyYW1ldGVyT2siLCJzZWxlY3RDdXJyZW50V2VlayIsIndlZWtIb3ZlciIsIndlZWtIb3ZlclNsb3ciLCJzZXRUaW1lb3V0IiwiaW5pdERhdGVQaWNrZXIiLCJzdGFydERhdGUiLCJEYXRlIiwiZW5kRGF0ZSIsImRhdGVwaWNrZXIiLCJzaG93T3RoZXJNb250aHMiLCJzZWxlY3RPdGhlck1vbnRocyIsInNob3dXZWVrIiwiZGF0ZUZvcm1hdCIsImZpcnN0RGF5IiwibWluRGF0ZSIsImFmdGVyU2hvdyIsImluc3QiLCJvblNlbGVjdCIsImRhdGUiLCJnZXRNb25kYXkiLCJnZXRGdWxsWWVhciIsImdldE1vbnRoIiwiZ2V0RGF0ZSIsImdldERheSIsImZvcm1hdERhdGUiLCJiZWZvcmVTaG93IiwiZ3JvdXAiLCJncm91cEVuZCIsImJlZm9yZVNob3dEYXkiLCJ0b0xvY2FsZURhdGVTdHJpbmciLCJjc3NDbGFzcyIsIm9uQ2hhbmdlTW9udGhZZWFyIiwieWVhciIsIm1vbnRoIiwiY2FsbENoYW5nZU9yZGVyVHlwZSIsImNsaWNrIiwic2VsZWN0MiIsInByb3AiLCJzZXREYXRlIiwic3VibWl0IiwiY2hlY2tWYWxpZGl0eSIsInN0b3BQcm9wYWdhdGlvbiIsImNvbnRhY3ROYW1lIiwibm90ZSIsIm9yZGVyVHlwZSIsImRlbGl2ZXJ5RGF0ZSIsImRlbGl2ZXJ5QWRkcmVzc0lkIiwiZGVsaXZlcnlBZGRyZXNzIiwiY3VzdG9tTm90aWZpY2F0aW9uRW1haWwiLCJibGFuayIsInNldFBhcmFtZXRlckNvbXBsZXRlZCIsImJpbmRSb3dGYXZvcml0ZXNBY3Rpb24iLCJwcm9kdWN0SWQiLCJidXR0b24iLCJyZXNwb25zZSIsInN0YXR1cyIsImJpbmRSb3dEZXNjcmlwdGlvbkFjdGlvbiIsImNvbW1lbnQiLCJxdWV1ZUFqYXgiLCJub3ciLCJzeW5jT3JkZXJEYXRhVG9TZXJ2ZXIiLCJwcm9kdWN0U2VsZWN0RGF0YXRhYmxlc1Jvd0Zvcm1hdHRlciIsImQiLCJ0ZW1wbGF0ZURhdGEiLCJfdHlwZW9mIiwiZmF2b3JpdGVzIiwiYnRuRmF2b3JpdGVzQ2xhc3MiLCJ0ZW1wbGF0ZSIsIndlZWtseSIsIml0ZW1RdWFudGl0eSIsIm9sZFRhZ3MiLCJNdXN0YWNoZSIsInRhZ3MiLCJzcGVjaWZpY2F0aW9uQ2xhc3MiLCJwaWN0dXJlSW1nIiwicGljdHVyZUNsYXNzIiwicmVuZGVyIiwic2V0RGF0YXRhYmxlSGVhZGVyVGV4dCIsImdldFRyZWVQYXRoTmFtZSIsInJlcyIsIml0ZW1zIiwicGFyZW50cyIsInRvQXJyYXkiLCJzaGlmdCIsInJldmVyc2UiLCJjaGlsZHJlbiIsInNlbGVjdGVkUHJvZHVjdEdyb3VwIiwiZGF0YVRhYmxlU2VhcmNoU3RyIiwiZGF0YVRhYmxlU2VhcmNoS3JlbCIsInNlYXJjaFByb2R1Y3RCeVN0cmluZyIsImZpbHRlclN0ciIsIkRhdGFUYWJsZSIsInJlbG9hZCIsImNsaWNrU2VhcmNoUHJvZHVjdCIsImNsaWNrRmF2b3JpdGVzUHJvZHVjdCIsImNsaWNrT2Z0ZW5Qcm9kdWN0IiwiY2xpY2tTcGVjaWFsT2ZmZXIiLCJjbGlja0xhc3RQcm9kdWN0IiwiY2xpY2tXZWVrbHlQcm9kdWN0IiwiY2xpY2tLcmVsUHJvZHVjdCIsInBhcmVudCIsInRvZ2dsZUNsYXNzIiwicHJvZHVjdFNlbGVjdERhdGFUYWJsZUNvbHVtbkRlZnMiLCJwcm9kdWN0U2VsZWN0RGF0YVRhYmxlQ29sdW1uIiwiY29sdW1uRGF0YSIsImFjdGlvbkNvbHVtbiIsImRlZmF1bHRDb250ZW50IiwiZ2V0RGF0YXRhYmxlcyIsInRhYmxlIiwibGFuZ3VhZ2UiLCJzZWFyY2hTdHIiLCJrcmVsIiwiZ3JvdXBJZCIsImJ1dHRvbnMiLCJwcm9kdWN0U2VsZWN0RGF0YVRhYmxlRHJhd0RUIiwiZmlsdGVyIiwiaW5wdXRTcGlubmVyIiwiYnV0dG9uc1dpZHRoIiwiZ3JvdXBDbGFzcyIsImJ1dHRvbnNDbGFzcyIsImJpbmRXZWFrVXNlckhlbHBlciIsInF1YW50aXR5IiwicGFyc2VGbG9hdCIsInJvd0RhdGEiLCJyb3ciLCJvcmRlckl0ZW1zQ2hhbmdlIiwicXVhbnRpdHlDdXJyZW50IiwidHJpZ2dlciIsImluaXRWaWV3UHJvZHVjdFNlbGVjdCIsImZ1bmN0aW9uTmFtZSIsIndoaWNoIiwia2V5IiwiZ2V0VGltZSIsImRhdGFUYWJsZSIsInRyIiwiY2hpbGQiLCJpc1Nob3duIiwiYmluZFByb2R1Y3REZXRhaWxzQWN0aW9uIiwiYmluZE9yZGVySXRlbVdlZWtRdWFudGl0eSIsImFjdHVhbEl0ZW0iLCJmb2N1cyIsInJvd05vZGUiLCJwcmV2IiwiYWZ0ZXJTeW5jT3JkZXJEYXRhVG9TZXJ2ZXIiLCJpIiwic3luY0RvaW5nIiwiSXRlbURhdGEiLCJkYXlJbmRleCIsImlzTmFOIiwicHJvZHVjdFNlbGVjdGVkSXRlbSIsImluaXRWaWV3SW52b2ljZSIsIk9iamVjdCIsImtleXMiLCJzdHlsZVN0ciIsInByaW50IiwibmV3V2luIiwib3BlbiIsImRvY3VtZW50Iiwid3JpdGUiLCJjbG9uZSIsInJlbW92ZSIsImNsb3NlIiwicmVzZXRPcmRlciIsImFmdGVyT3JkZXJTZW5kT2siLCJyZXRIVE1MIiwiYWZ0ZXJPcmRlclNlbmRFcnJvciIsImluaXRWaWV3U2VuZCIsInRlc3RNb2RlU2VuZCIsImludm9pY2UiLCJzZW5kIiwidG9nZ2xlRW5hYmxlU2VuZCIsInJlYWR5VG9TZW5kIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./resources/js/moduleJs/order.js\n\n}"); +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); }\nwindow.OrderModulDefault = {\n actionFunction: function actionFunction() {}\n};\nvar DataModelOrder = /*#__PURE__*/function (_DataModel) {\n /*\r\n * Constructor\r\n */\n function DataModelOrder(data, options) {\n var _this;\n _classCallCheck(this, DataModelOrder);\n _this = _callSuper(this, DataModelOrder, [data, options]);\n if (typeof _this.productSelected === \"undefined\") {\n _this.productSelected = {};\n }\n if (typeof _this.productComment === \"undefined\") {\n _this.productComment = {};\n }\n console.log(_this.constructor.name + ' constructor called');\n return _this;\n }\n _inherits(DataModelOrder, _DataModel);\n return _createClass(DataModelOrder);\n}(DataModel);\n;\nwindow.DataModelOrder = DataModelOrder;\nwindow.Stepper = function () {\n /*\r\n * Variables accessible\r\n * in the class\r\n */\n var Opts = {\n complete: ['supplier'],\n available: ['supplier', 'parameter', 'productSelect', 'invoice', 'send'],\n enable: ['supplier', 'invoice'],\n load: [],\n excludeLoaded: ['invoice', 'send'],\n loaded: [],\n active: false,\n URL: {\n create: ''\n },\n UrlData: false,\n onAfterLoad: function onAfterLoad() {},\n onAfterActivate: function onAfterActivate() {},\n autoCallback: {\n 'invoice': {\n onAfterActivate: function onAfterActivate() {}\n },\n 'send': {\n onAfterActivate: function onAfterActivate() {}\n }\n },\n nowLoaded: false\n };\n var root = this;\n /*\r\n * Constructor\r\n */\n this.construct = function (options) {\n $.extend(Opts, options);\n };\n this.getOpts = function () {\n return Opts;\n };\n this.setOpts = function (options) {\n $.extend(Opts, options);\n };\n this.init = function (options) {\n $.extend(Opts, options);\n debug(Opts);\n $('.step').each(function () {\n var stepName = $(this).data('stepname');\n if (Opts.complete.includes(stepName)) {\n root.setCompleted(stepName);\n }\n if (Opts.enable.includes(stepName)) {\n root.setEnabled(stepName);\n }\n if (Opts.load.includes(stepName)) {\n root.loadStepContent(stepName);\n }\n if (Opts.active === stepName) {\n root.setActive(stepName);\n }\n });\n root.bindClickAction();\n };\n this.bindClickAction = function () {\n var stepClickButtons = $('.stepClick');\n stepClickButtons.off('click');\n stepClickButtons.on('click', root.stepClick);\n };\n this.setCompleted = function (stepName) {\n console.log(stepName + ' completed');\n $('.step[data-stepName=\"' + stepName + '\"]').addClass('completed');\n };\n this.unsetCompleted = function (stepName) {\n console.log(stepName + ' Uncompleted');\n $('.step[data-stepName=\"' + stepName + '\"]').removeClass('completed');\n Opts.complete = arrayRemove(Opts.complete, stepName);\n };\n this.unsetEnabled = function (stepName) {\n console.log(stepName + ' Un enabled');\n $('.click' + stepName).contents().unwrap();\n Opts.enable = arrayRemove(Opts.enable, stepName);\n };\n this.setEnabled = function (stepName) {\n console.log(stepName + ' enabled');\n var stepItem = $('.step[data-stepName=\"' + stepName + '\"]');\n stepItem.html('' + stepItem.html() + '');\n root.bindClickAction();\n //$('.stepClick').click(root.stepClick);\n };\n this.addEnabled = function (stepName) {\n if (!Opts.enable.includes(stepName)) {\n Opts.enable.push(stepName);\n }\n root.setEnabled(stepName);\n };\n this.addCompleted = function (stepName) {\n if (!Opts.complete.includes(stepName)) {\n Opts.complete.push(stepName);\n }\n root.setCompleted(stepName);\n root.bindClickAction();\n };\n this.loadStepContent = function (stepName) {\n var data = {\n 'type': stepName\n };\n $.extend(data, Opts.UrlData);\n $.ajax({\n async: true,\n type: \"GET\",\n url: Opts.URL.create,\n data: data,\n cache: false,\n success: function success(result) {\n var container = $('.SC' + stepName.capitalize());\n if ($.inArray(stepName, Opts.excludeLoaded) == -1) {\n Opts.loaded.push(stepName);\n } else {\n console.log('excluded View');\n }\n container.html(result);\n if (Opts.nowLoaded) {\n Opts.nowLoaded(stepName);\n }\n Opts.onAfterLoad();\n }\n });\n };\n this.clearLoaded = function () {\n Opts.loaded = ['supplier'];\n $('.stepContainer').each(function () {\n /*\r\n console.log(this.classList);\r\n console.log(this.classList.contains('SCSupplier'));\r\n console.log($(this).attr('class'));\r\n */\n if (!this.classList.contains('SCSupplier')) {\n $(this).html('');\n }\n });\n };\n this.setActiveFinish = function (stepName) {\n var container = $('.SC' + stepName.capitalize());\n if (stepName === 'productSelect') {\n $('.containerStepper').addClass('activeSideBar');\n } else {\n $('.containerStepper').removeClass('activeSideBar');\n }\n debug('setActiveFinish show:' + stepName);\n container.show();\n Opts.nowLoaded = false;\n root.active = stepName;\n Opts.onAfterActivate();\n if (typeof Opts.autoCallback[stepName] !== 'undefined') {\n Opts.autoCallback[stepName].onAfterActivate();\n }\n };\n this.setActive = function (stepName) {\n $('.stepContainer').hide();\n if (!Opts.loaded.includes(stepName)) {\n root.loadStepContent(stepName);\n Opts.nowLoaded = this.setActiveFinish;\n } else {\n this.setActiveFinish(stepName);\n }\n };\n this.stepClick = function (event) {\n event.preventDefault();\n var stepName = $(event.currentTarget).data('stepname');\n console.log('setActive:' + stepName);\n root.setActive(stepName);\n };\n};\nwindow.OrderModule = function () {\n /*\r\n * Variables accessible\r\n * in the class\r\n */\n var Opts = {\n testMode: false,\n needStepper: true,\n CSSSelectorForm: '.orderParameterForm',\n defaultDeliveryDate: '',\n dataSyncPauseTime: 500,\n token: null,\n URL: {\n root: null,\n getDataTableContentProductList: null,\n checkReadyToSend: null,\n index: null,\n show: null,\n edit: null,\n create: null,\n store: null,\n update: null,\n destroy: null,\n toggleFavorites: null\n }\n };\n var PublicVar = {};\n var PublicVar2 = {\n 'asd': '21'\n };\n var ApiToken = null;\n var Order = null;\n var root = this;\n var viewInicialized = [];\n this.setOpts = function (options) {\n $.extend(Opts, options);\n };\n this.getOpts = function () {\n return Opts;\n };\n this.clickOrderEdit = function (data) {\n debug('clickEdit');\n debug(data);\n var ajaxUrl = Opts.URL.edit.replace('%id%', data.id);\n APP.loadMainContent(ajaxUrl);\n /* let ajaxData={};\r\n ajaxData._token=Opts.token;\r\n $.extend(ajaxData,Order);\r\n let ajaxUrl=Opts.URL.edit.replace('%id%',data.id);\r\n $.ajax({\r\n url: ajaxUrl,\r\n method:'GET',\r\n data:ajaxData,\r\n success:function (response) {\r\n if(response.success){\r\n let orderData=response.data;\r\n orderData.supplierId=orderData.supplier_id;\r\n delete(orderData.supplier_id);\r\n root.initOrder(orderData);\r\n root.initStepper();\r\n //root.afterOrderSetSupplierOk(data.data);\r\n }\r\n }\r\n });*/\n };\n this.afterOrderDeleted = function (data) {\n if (data.success == true) {\n debug('Order delete success');\n APP.loadMainContent(Opts.URL.index);\n } else {\n Toast.create({\n title: \"Error deleted !\",\n message: '',\n status: TOAST_STATUS.DANGER,\n timeout: 5000\n });\n }\n };\n this.clickOrderDeleteConfirmed = function (event) {\n debug('clickOrderDeleteConfirmed');\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 $.ajax({\n url: ajaxUrl,\n data: ajaxData,\n method: \"DELETE\",\n success: root.afterOrderDeleted\n //error:ajaxErrorHandler\n });\n };\n this.initViewOrderSelect = function () {\n debug('called initViewOrderSelect ');\n $('.ordersSelectTable button').off('click');\n $('.ordersSelectTable button').on('click', function () {\n var action = $(this).data('action');\n var orderId = $($(this).closest('tr')[0]).data('orderid');\n debug(action);\n debug(orderId);\n if (action == 'delete') {\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 megrendelést?');\n modal.find('.buttonYes').off('click');\n modal.find('.buttonYes').on('click', {\n id: orderId\n }, root.clickOrderDeleteConfirmed);\n });\n $('#dialogModal').modal('show');\n } else {\n root.clickOrderEdit({\n id: orderId\n });\n }\n });\n $('.buttonNew').off('click');\n $('.buttonNew').on('click', function () {\n APP.loadMainContent(Opts.URL.index, 'force=true');\n });\n };\n this.initStepper = function () {\n debug(Order.getData());\n viewInicialized = [];\n $('.statusNamePlace').text('Nincs elküldve');\n $('.statusNamePlace').addClass('statusBlink');\n root.setDeliveryDate('-');\n root.setSupplier('-');\n var unEnabled = ['parameter', 'productSelect', 'invoice', 'send'];\n $.each(unEnabled, function (index, value) {\n root.Stepper.unsetEnabled(value);\n root.Stepper.unsetCompleted(value);\n });\n debug(root.Stepper.getOpts()['available']);\n debug(Order.getData()['orderStatus']);\n var stepActive = 'supplier';\n var stepComplete = ['supplier'];\n var stepEnable = [];\n var stepOnAfterActivate = function stepOnAfterActivate() {};\n var avalaibleSteps = root.Stepper.getOpts()['available'];\n var stepUrlData = false;\n var stepAutoCallback = [];\n var _iterator = _createForOfIteratorHelper(avalaibleSteps),\n _step;\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var _stepName = _step.value;\n stepOnAfterActivate = this['initView' + _stepName.capitalize()];\n var item = {};\n item['onAfterActivate'] = stepOnAfterActivate;\n stepAutoCallback[_stepName] = item;\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n debug(stepAutoCallback);\n debug(Order.getData()['id']);\n if (Order.getData()['id'] > 0) {\n debug('hajra');\n debug(Order.getData());\n if (Order.getData()['deliveryDate']) {\n root.setDeliveryDate(Order.getData()['deliveryDate']);\n /*\r\n @todo: weekly-t beallitani\r\n */\n }\n if (Order.getData()['supplierName']) {\n root.setSupplier(Order.getData()['supplierName']);\n }\n stepUrlData = {\n 'supplierId': Order.supplierId,\n id: Order.id\n };\n var _iterator2 = _createForOfIteratorHelper(avalaibleSteps),\n _step2;\n try {\n for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n var stepName = _step2.value;\n console.log(stepName);\n stepComplete.push(stepName);\n stepEnable.push(stepName);\n if (Order.getData()['orderStatus'] == stepName) {\n stepActive = stepName;\n /*\r\n debug('initView'+stepName.capitalize());\r\n if(stepName!=='invoice' && stepName!=='send'){\r\n stepOnAfterActivate=this['initView'+stepName.capitalize()];\r\n }else{\r\n stepOnAfterActivate=function (){};\r\n }\r\n */\n break;\n }\n }\n\n /*\r\n //refactored for loop\r\n var BreakException = {};\r\n try {\r\n avalaibleSteps.forEach(function(stepName) {\r\n console.log(stepName);\r\n stepComplete.push(stepName);\r\n stepEnable.push(stepName);\r\n if(Order.getData()['orderStatus']==stepName){\r\n stepActive=stepName;\r\n throw BreakException;\r\n }\r\n \r\n });\r\n } catch (e) {\r\n if (e !== BreakException) throw e;\r\n }*/\n } catch (err) {\n _iterator2.e(err);\n } finally {\n _iterator2.f();\n }\n }\n root.Stepper.init({\n complete: stepComplete,\n enable: stepEnable,\n loaded: [],\n active: stepActive,\n URL: {\n create: Opts.URL.create\n },\n UrlData: stepUrlData,\n onAfterActivate: stepOnAfterActivate,\n autoCallback: stepAutoCallback\n /*{\r\n invoice: {\r\n onAfterActivate:root.initViewInvoice\r\n },\r\n send: {\r\n onAfterActivate:root.initViewSend\r\n },\r\n }*/\n });\n };\n this.initOrder = function (data) {\n Order = new DataModelOrder(data);\n };\n this.init = function (options) {\n debug('OrderModul init called');\n $.extend(Opts, window.OrderModulDefault, options);\n Order = new DataModelOrder();\n if (Opts.needStepper) {\n if (typeof this.Stepper == 'undefined') {\n this.Stepper = new Stepper();\n }\n }\n if (Opts.testMode) {\n return root.testMode();\n }\n };\n this.setSupplier = function (supplierName, supplierId) {\n if (supplierName) {\n $('.supplierNamePlace').text(supplierName);\n }\n if (supplierId) {\n Order.setData({\n supplierId: supplierId\n });\n root.Stepper.setOpts({\n 'UrlData': {\n 'supplierId': supplierId\n }\n });\n }\n };\n this.setDeliveryDate = function (dateText, dateTextTo) {\n var dateTextHuman = dateText.replaceAll('-', '.') + '.';\n if (dateTextHuman.length < 5) {\n $('.deliveryDatePlace').text(dateText);\n return;\n }\n if (dateTextTo) {\n dateTextHuman += ' - ' + dateTextTo.replaceAll('-', '.') + '.';\n }\n $(Opts.CSSSelectorForm + ' .selectedDateText').text(dateTextHuman);\n $('.deliveryDatePlace').text(dateTextHuman);\n $(Opts.CSSSelectorForm + ' input[name=\"deliveryDate\"]').val(dateText);\n };\n this.getData = function () {\n return Order;\n };\n this.setSupplierCompleted = function () {\n console.log('bingo');\n root.initViewParameter();\n };\n this.afterOrderSetSupplierOk = function (data) {\n Toast.create({\n title: \"Supplier selected !\",\n message: data.supplier.name,\n status: TOAST_STATUS.INFO,\n timeout: 5000\n });\n root.setSupplier(data.supplier.name, data.supplier.id);\n Order.setData({\n id: data.id\n });\n root.Stepper.setOpts({\n 'UrlData': {\n 'supplierId': Order.supplierId,\n id: Order.id\n }\n });\n //root.Stepper.setOpts({onAfterLoad:root.setSupplierCompleted})\n root.Stepper.setEnabled('parameter');\n root.Stepper.addCompleted('parameter');\n root.Stepper.setCompleted('parameter');\n root.Stepper.setActive('parameter');\n };\n this.initViewSupplier = function () {\n debug('call initViewSupplier');\n root.Stepper.setOpts({\n onAfterLoad: function onAfterLoad() {}\n });\n $('.supplierItem').off('click');\n $('.supplierItem').on('click', function (event) {\n console.log(Order.getData());\n event.preventDefault();\n var supplierId = $(event.currentTarget).data('id');\n var supplierName = $(event.currentTarget).find('h5.card-title').text();\n if (typeof Order.supplierId == 'undefined') {\n //new order\n\n var ajaxData = {};\n ajaxData._token = Opts.token;\n ajaxData.supplierId = supplierId;\n ajaxData.storeType = 'supplierSelect';\n $.extend(ajaxData, Order);\n $.ajax({\n url: Opts.URL.store,\n method: 'POST',\n data: ajaxData,\n success: function success(data) {\n if (data.success) {\n root.afterOrderSetSupplierOk(data.data);\n }\n }\n });\n //Order.setData({supplierId:supplierId});\n } else {\n //ide kellene egy jo kis kerdes\n if (Order.supplierId != supplierId) {\n Toast.create({\n title: \"Supplier change to!\",\n message: supplierName,\n status: TOAST_STATUS.WARNING,\n timeout: 5000\n });\n root.Stepper.clearLoaded();\n Order = new DataModelOrder();\n //Order.setData({supplierId:supplierId});\n }\n }\n return;\n // removed by dead control flow\n\n // removed by dead control flow\n\n // removed by dead control flow\n\n\n //$('.supplierNamePlace').text(supplierName);\n // removed by dead control flow\n\n // removed by dead control flow\n\n //@todo:ide kell egy mentes!\n //@todo:mentes eredemenyekeppen lehet valtani\n // removed by dead control flow\n\n // removed by dead control flow\n\n // removed by dead control flow\n\n // removed by dead control flow\n\n // removed by dead control flow\n\n // removed by dead control flow\n\n });\n };\n this.checkContactNameField = function () {\n var CSSSelectorForm = '.orderParameterForm';\n var node = $(CSSSelectorForm + ' input[name=contactName]');\n if (node.val().length < 2) {\n node.removeClass('is-valid');\n node.addClass('is-invalid');\n return false;\n } else {\n node.addClass('is-valid');\n node.removeClass('is-invalid');\n return true;\n }\n };\n this.sendOrderDataToServer = function (updateType, callback, errorCallback) {\n var ajaxData = {};\n var ajaxUrl = Opts.URL.store;\n var ajaxMethod = \"POST\";\n if (Order.id) {\n ajaxUrl = Opts.URL.update.replace('%id%', Order.id);\n //ajaxMethod=\"PUT\";\n //ajaxData=new FormData($(CSSSelectorForm)[0]);\n ajaxData._method = 'PUT';\n }\n ajaxData._token = Opts.token;\n ajaxData.updateType = updateType;\n $.extend(ajaxData, Order);\n debug(Order);\n debug(ajaxData);\n debug('ajaxUrl:' + ajaxUrl);\n ajaxData = jsonToFormData(ajaxData);\n $.ajax({\n url: ajaxUrl,\n data: ajaxData,\n type: ajaxMethod,\n contentType: false,\n processData: false,\n success: function success(data) {\n debug('ajax returned data');\n debug(data);\n if (data.success) {\n //root.afterOrderSetSupplierOk(data.data);\n callback(data);\n }\n },\n error: function error(xhr, ajaxOptions, thrownError) {\n ajaxErrorHandler(xhr, ajaxOptions, thrownError);\n if (typeof errorCallback != 'undefined') {\n errorCallback(xhr.responseJSON);\n }\n }\n });\n };\n this.afterOrderSetParameterOk = function (data) {\n debug('called afterOrderSetParameterOk');\n root.Stepper.setOpts({\n 'UrlData': {\n 'supplierId': Order.supplierId,\n 'id': Order.id\n }\n });\n //root.Stepper.setOpts({onAfterLoad:root.setParameterCompleted})\n root.Stepper.setEnabled('productSelect');\n root.Stepper.addCompleted('productSelect');\n root.Stepper.setCompleted('productSelect');\n root.Stepper.setActive('productSelect');\n };\n this.selectCurrentWeek = function () {\n console.error('selectCurrentWeek');\n console.error($('.ui-datepicker').find('.ui-datepicker-current-day a'));\n $('.ui-datepicker').find('.ui-datepicker-current-selected-weekday a').addClass('ui-state-active');\n };\n this.weekHover = function () {\n console.error('hover Active');\n $('.ui-datepicker-calendar tr').off('mousemove');\n $('.ui-datepicker-calendar tr').off('mouseleave');\n $('.ui-datepicker-calendar tr').on('mousemove', function () {\n $(this).find('td a').addClass('ui-state-hover');\n });\n $('.ui-datepicker-calendar tr').on('mouseleave', function () {\n $(this).find('td a').removeClass('ui-state-hover');\n });\n };\n this.weekHoverSlow = function () {\n console.error('weekHoverSlow');\n if ($('.ui-datepicker-calendar tr').length < 1) {\n setTimeout(root.weekHoverSlow, 1);\n return;\n }\n root.weekHover();\n };\n this.initDatePicker = function (type) {\n console.error('asdasdadad');\n console.log('tipus' + type);\n var CSSSelectorForm = '.orderParameterForm';\n var startDate = new Date('1900-01-01');\n var endDate = new Date('1900-01-02');\n $(CSSSelectorForm + ' .datePicker').datepicker(\"destroy\");\n if (type == 'weekly') {\n $(CSSSelectorForm + ' .datePicker').datepicker({\n showOtherMonths: true,\n selectOtherMonths: true,\n showWeek: true,\n dateFormat: 'yy-mm-dd',\n firstDay: 1,\n minDate: new Date(),\n afterShow: function afterShow(dateText, inst) {\n root.weekHover();\n root.selectCurrentWeek();\n },\n onSelect: function onSelect(dateText, inst) {\n var date = $(this).datepicker('getDate');\n startDate = new getMonday(date);\n endDate = new Date(date.getFullYear(), date.getMonth(), date.getDate() - date.getDay() + 7);\n root.setDeliveryDate($.datepicker.formatDate('yy-mm-dd', startDate), $.datepicker.formatDate('yy-mm-dd', endDate));\n },\n beforeShow: function beforeShow() {\n console.group('beforeShow');\n console.log(startDate);\n console.log(endDate);\n //root.weekHoverSlow();\n console.groupEnd();\n },\n beforeShowDay: function beforeShowDay(date) {\n console.group('beforeShowDay');\n console.log(date.toLocaleDateString('hu-Hu'));\n var cssClass = '';\n if (date >= startDate && date <= endDate) {\n console.error(date.toLocaleDateString('hu-Hu'));\n cssClass = 'ui-datepicker-current-selected-weekday';\n //cssClass = 'ui-state-active';\n }\n console.log(cssClass);\n console.groupEnd();\n return [true, cssClass];\n },\n onChangeMonthYear: function onChangeMonthYear(year, month, inst) {\n //root.selectCurrentWeek();\n }\n });\n } else {\n $(CSSSelectorForm + ' .datePicker').datepicker({\n dateFormat: 'yy-mm-dd',\n minDate: new Date(),\n onSelect: function onSelect(dateText) {\n $(CSSSelectorForm + ' .selectedDateText').text(dateText);\n $('.deliveryDatePlace').text(dateText.replaceAll('-', '.') + '.');\n $(CSSSelectorForm + ' input[name=\"deliveryDate\"]').val(dateText);\n }\n });\n }\n };\n this.callChangeOrderType = function () {\n console.log(this);\n console.log(this.value);\n root.initDatePicker(this.value);\n //enum('daily', 'weekly')\n /*let CSSSelectorForm='.orderParameterForm';\r\n let node=$(CSSSelectorForm+' input[name=contactName]');\r\n if(node.val().length<2){\r\n node.removeClass('is-valid');\r\n node.addClass('is-invalid');\r\n return false;\r\n }else{\r\n node.addClass('is-valid');\r\n node.removeClass('is-invalid');\r\n return true;\r\n }\r\n */\n };\n this.initViewParameter = function () {\n debug('call initViewParameter');\n root.Stepper.setOpts({\n onAfterLoad: function onAfterLoad() {}\n });\n var CSSSelectorForm = '.orderParameterForm';\n $(CSSSelectorForm + ' .datePickerClick').click(function () {\n $(CSSSelectorForm + ' .datePicker').datepicker('show');\n });\n $(CSSSelectorForm + ' .orderParameterDeliveryAddress').select2({}).show();\n $(CSSSelectorForm + ' input[name=contactName]').off('blur');\n $(CSSSelectorForm + ' input[name=contactName]').off('keyup');\n $(CSSSelectorForm + ' input[name=contactName]').on('blur', root.checkContactNameField);\n $(CSSSelectorForm + ' input[name=contactName]').on('keyup', root.checkContactNameField);\n $(CSSSelectorForm + ' input[name=orderType]').off('change');\n $(CSSSelectorForm + ' input[name=orderType]').on('change', root.callChangeOrderType);\n $(CSSSelectorForm + ' .orderParameterNextButton').off('click');\n if (Order.getData()['id'] > 0) {\n if (Order.getData()['orderType'] == 'weekly') {\n root.initDatePicker(Order.getData()['orderType']);\n $(CSSSelectorForm + \" input[name=orderType][value=\" + Order.getData()['orderType'] + \"]\").prop('checked', true);\n var endDate = new Date(Order.getData()['deliveryDate']);\n endDate.setDate(endDate.getDate() + 6);\n root.setDeliveryDate(Order.getData()['deliveryDate'], $.datepicker.formatDate('yy-mm-dd', endDate));\n root.initDatePicker('weekly');\n } else {\n if (Order.getData()['deliveryDate']) {\n root.setDeliveryDate(Order.getData()['deliveryDate']);\n }\n root.initDatePicker('daily');\n }\n if (Order.getData()['contactName']) {\n $(CSSSelectorForm + ' input[name=contactName]').val(Order.getData()['contactName']);\n }\n if (Order.getData()['note']) {\n $(CSSSelectorForm + ' textarea[name=note]').val(Order.getData()['note']);\n }\n if (Order.getData()['deliveryAddressId']) {\n console.log($(CSSSelectorForm + ' select[name=deliveryAddressId]'));\n $(CSSSelectorForm + ' select[name=deliveryAddressId]').val(Order.getData()['deliveryAddressId']);\n }\n if (Order.getData()['customNotificationEmail']) {\n console.log($(CSSSelectorForm + ' select[name=customNotificationEmail]'));\n $(CSSSelectorForm + ' select[name=customNotificationEmail]').val(Order.getData()['customNotificationEmail']);\n }\n } else {\n root.initDatePicker('daily');\n }\n $(CSSSelectorForm + ' .orderParameterDeliveryAddress').select2({}).show();\n $(CSSSelectorForm + ' .orderParameterCustomNotificationEmail').select2({}).show();\n $(CSSSelectorForm).submit(function (event) {\n event.preventDefault();\n if ($(CSSSelectorForm)[0].checkValidity() === false) {\n debug('validaton false');\n event.stopPropagation();\n return;\n } else {\n debug('validaton ok');\n //do your ajax submition here\n }\n $('.deliveryDatePlace').text($(CSSSelectorForm + ' input[name=deliveryDate]').val().replaceAll('-', '.') + '.');\n Order.setData({\n contactName: $(CSSSelectorForm + ' input[name=contactName]').val(),\n note: $(CSSSelectorForm + ' textarea[name=note]').val(),\n orderType: $(CSSSelectorForm + ' input:checked[name=orderType]').val(),\n deliveryDate: $(CSSSelectorForm + ' input[name=deliveryDate]').val(),\n deliveryAddressId: $(CSSSelectorForm + ' select[name=deliveryAddressId]').val(),\n deliveryAddress: $(CSSSelectorForm + ' select[name=deliveryAddress]').val(),\n customNotificationEmail: $(CSSSelectorForm + ' select[name=customNotificationEmail]').val()\n });\n console.group('parameter form submit');\n console.error($(CSSSelectorForm + ' input:checked[name=orderType]').val());\n console.error($(CSSSelectorForm + ' input[name=deliveryDate]').val());\n debug(Order.getData());\n console.groupEnd();\n root.sendOrderDataToServer('parameter', root.afterOrderSetParameterOk);\n });\n };\n this.blank = function () {};\n this.setParameterCompleted = function () {\n console.log('setParameterCompleted called');\n root.Stepper.setOpts({\n onAfterLoad: function onAfterLoad() {}\n });\n //root.initViewProductSelect()\n };\n this.bindRowFavoritesAction = function () {\n $('.buttonItemFavorites').off('click');\n $('.buttonItemFavorites').on('click', function () {\n var productId = $(this).data('id');\n console.log(productId);\n var ajaxUrl = Opts.URL.toggleFavorites.replace('%id%', productId);\n var ajaxData = {};\n ajaxData._token = Opts.token;\n var button = this;\n console.log(ajaxUrl);\n $.ajax({\n url: ajaxUrl,\n method: 'POST',\n data: ajaxData,\n success: function success(response) {\n if (response.success) {\n if (response.status) {\n console.log('true');\n $(button).addClass('btn-warning');\n $(button).removeClass('btn-light');\n } else {\n $(button).removeClass('btn-warning');\n $(button).addClass('btn-light');\n console.log('false');\n }\n }\n }\n });\n /*\r\n $(this).toggleClass('btn-warning');\r\n $(this).toggleClass('btn-light');\r\n */\n });\n };\n this.bindRowDescriptionAction = function () {\n $('textarea.orderItemComment').on('change', function () {\n var comment = $(this).val();\n var productId = $(this).data('id');\n var productComment = Order.getData('productComment');\n if (productComment !== null) {\n if (typeof productComment[productId] == 'undefined' && comment.length === 0) {\n return;\n }\n if (productComment[productId] === comment) {\n return;\n }\n }\n productComment[productId] = comment;\n if (comment.length === 0) {\n delete Order.productComment[productId];\n }\n Order.productComment = productComment;\n queueAjax.push(Date.now());\n root.syncOrderDataToServer();\n });\n };\n this.productSelectDatatablesRowFormatter = function (d) {\n // `d` is the original data object for the row\n /**\r\n @todo: felszedni es updatelni az adott termek memojat az orderban\r\n */\n console.group('productSelectDatatablesRowFormatter');\n console.log(d);\n var templateData = d;\n templateData.comment = '';\n // debug(Order);\n if (Order.productComment && Order.productComment !== null) {\n debug(_typeof(Order.productComment[d.id]));\n if (typeof Order.productComment[d.id] != 'undefined' && Order.productComment[d.id].length > 0) {\n templateData.comment = Order.productComment[d.id];\n }\n }\n /** @typedef {boolean} d.favorites */\n if (d.favorites === true) {\n templateData.btnFavoritesClass = 'btn-warning';\n } else {\n templateData.btnFavoritesClass = 'btn-light';\n }\n var template = $('template[data-name=\"orderProductSelectDetails\"]').html();\n templateData.weekly = false;\n if (Order.getData().orderType === 'weekly') {\n templateData.weekly = true;\n /*\r\n \r\n templateData.weeklyDay=[\r\n {\"index\":1,\"name\":\"Hétfő\"},\r\n {\"index\":2,\"name\":\"Kedd\"},\r\n {\"index\":3,\"name\":\"Szerda\"},\r\n {\"index\":4,\"name\":\"Csütörtök\"},\r\n {\"index\":5,\"name\":\"Péntek\"},\r\n {\"index\":6,\"name\":\"Szombat\"},\r\n {\"index\":7,\"name\":\"Vasárnap\"},\r\n ];\r\n \r\n templateData.weeklyDay=[\r\n {\"index\":2,\"name\":\"Hétfő\" },\r\n {\"name\":\"Kedd\"},\r\n {\"name\":\"Szerda\"},\r\n {\"name\":\"Csütörtök\"},\r\n {\"name\":\"Péntek\"},\r\n {\"name\":\"Szombat\"},\r\n {\"name\":\"Vasárnap\"}\r\n ];\r\n */\n }\n var productSelected = Order.getData('productSelected');\n if (typeof productSelected[d.id] != 'undefined') {\n templateData.itemQuantity = productSelected[d.id];\n }\n console.log(['templateData', templateData]);\n var oldTags = Mustache.tags;\n Mustache.tags = [\"~!\", \"!~\"];\n if (templateData['specification'] == 'false' || templateData['specification'] == false) {\n templateData.specificationClass = 'd-none';\n }\n templateData.pictureImg = '';\n if (templateData['picture'] == 'false' || templateData['picture'] == false) {\n templateData.pictureClass = 'd-none';\n } else {\n templateData.pictureImg = '';\n }\n console.log('templateData', templateData);\n //templateData['aa_specification']=false;\n var render = Mustache.render(template, templateData);\n Mustache.tags = oldTags;\n console.groupEnd();\n return render;\n /*\r\n solution before template\r\n return ''+\r\n ''+\r\n ''+\r\n ''+\r\n ''+\r\n ''+\r\n ''+\r\n ''+\r\n ''+\r\n /!*\r\n ''+\r\n ''+\r\n ''+\r\n ''+\r\n *!/\r\n ''+\r\n ''+\r\n ''+\r\n ''+\r\n ''+\r\n ''+\r\n ''+\r\n ''+\r\n /!*\r\n *!/\r\n '
Info:'+d.note+'
hooreyca :'+d.hooreycaId+'' +\r\n \r\n '' +\r\n '
Extension number:'+d.extn+'
Info:'+d.note+'
Megjegyzés:
';\r\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 console.log($(items[item]).children('a.categoryItem'));\n if ($(items[item]).children('a.categoryItem').length > 0) {\n res += $(items[item]).children('a.categoryItem').text() + '/';\n }\n }\n res += $(node).text();\n console.log(res);\n return res;\n };\n var selectedProductGroup = null;\n var dataTableSearchStr = null;\n var dataTableSearchKrel = false;\n this.searchProductByString = function (filterStr) {\n root.setDatatableHeaderText('Termékek szűrve:' + filterStr);\n dataTableSearchStr = filterStr;\n $('.dataTableOrderProductSelect').DataTable().ajax.reload();\n };\n this.clickSearchProduct = function () {\n debug(this);\n var filterStr = $('.sidebar-search input[name=searchValue]').val();\n debug(filterStr);\n root.searchProductByString(filterStr);\n };\n this.clickFavoritesProduct = function () {\n debug('clickFavoritesProduct');\n root.setDatatableHeaderText('Termékek szűrve: kedvencek');\n dataTableSearchStr = '**favorites**';\n $('.dataTableOrderProductSelect').DataTable().ajax.reload();\n };\n this.clickOftenProduct = function () {\n debug('clickOftenProduct');\n root.setDatatableHeaderText('Termékek szűrve: gyakran vásárolt');\n dataTableSearchStr = '**often**';\n $('.dataTableOrderProductSelect').DataTable().ajax.reload();\n };\n this.clickSpecialOffer = function () {\n debug('clickSpecialOffer');\n root.setDatatableHeaderText('Termékek szűrve: Akciós termékek');\n dataTableSearchStr = '**specialOffer**';\n $('.dataTableOrderProductSelect').DataTable().ajax.reload();\n };\n this.clickLastProduct = function () {\n debug('clickLastProduct');\n root.setDatatableHeaderText('Termékek szűrve: utoljára vásárolt');\n dataTableSearchStr = '**last**';\n $('.dataTableOrderProductSelect').DataTable().ajax.reload();\n };\n this.clickWeeklyProduct = function () {\n debug('clickWeeklyProduct');\n root.setDatatableHeaderText('Termékek szűrve: Heti termékek');\n dataTableSearchStr = '**weekly**';\n $('.dataTableOrderProductSelect').DataTable().ajax.reload();\n };\n this.clickKrelProduct = function () {\n debug('clickKrelProduct');\n //root.setDatatableHeaderText('Termékek szűrve: Heti termékek');\n //dataTableSearchStr='**weekly**';\n //$('.dataTableOrderProductSelect').DataTable().ajax.reload();\n $(this).parent().toggleClass('krelActive');\n dataTableSearchKrel = !dataTableSearchKrel;\n $('.dataTableOrderProductSelect').DataTable().ajax.reload();\n };\n this.productSelectDataTableColumnDefs = function () {\n return [{\n \"width\": \"10px\",\n \"targets\": 0\n }, {\n \"className\": \"dt-left\",\n \"targets\": 1\n },\n // { \"width\": \"120px\", \"targets\": 1 },\n {\n \"width\": \"28px\",\n \"targets\": 2\n }, {\n \"width\": \"41px\",\n \"targets\": 3\n }, {\n \"width\": \"76px\",\n \"targets\": 4\n }, {\n \"width\": \"55px\",\n \"targets\": 5\n }, {\n \"width\": \"70px\",\n \"targets\": 6\n }, {\n \"width\": \"54px\",\n \"targets\": 7\n }, {\n \"width\": \"57px\",\n \"targets\": 8\n }, {\n \"width\": \"42px\",\n \"targets\": 9\n }, {\n \"width\": \"100px\",\n \"targets\": 10\n }, {\n \"className\": \"dt-center\",\n \"targets\": \"_all\"\n }];\n };\n this.productSelectDataTableColumn = function () {\n var columnData = [{\n \"className\": 'details-control',\n \"orderable\": false,\n \"data\": null,\n \"defaultContent\": ''\n }, {\n \"data\": \"name\"\n }, {\n \"data\": \"krel\"\n }, {\n \"data\": \"packing\"\n }, {\n \"data\": \"unitValue\"\n }, {\n \"data\": \"productUnit\"\n }, {\n \"data\": \"sellerUnit\"\n }, {\n \"data\": \"unitMultiplier\"\n }, {\n \"data\": \"amountUnit\"\n }, {\n \"data\": \"price\"\n }];\n var actionColumn = {\n \"className\": 'details-control2',\n \"orderable\": false,\n \"data\": null,\n \"width\": \"80px\",\n \"defaultContent\": ''\n };\n if (Order.getData('orderType') == 'daily') {\n actionColumn.defaultContent = ''\n /*\r\n \"defaultContent\":'
' +\r\n '' +\r\n '' +\r\n '' +\r\n '
'\r\n */;\n }\n columnData.push(actionColumn);\n return columnData;\n };\n this.getDatatables = function (orderType) {\n console.error(orderType);\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.getDataTableContentProductList,\n data: function data(_data) {\n _data.searchStr = dataTableSearchStr;\n _data.krel = dataTableSearchKrel;\n _data.groupId = selectedProductGroup;\n _data.supplierId = Order.supplierId;\n _data.deliveryDate = Order.deliveryDate;\n }\n },\n buttons: {\n buttons: []\n },\n \"columnDefs\": root.productSelectDataTableColumnDefs(),\n \"columns\": root.productSelectDataTableColumn(),\n \"order\": [[1, 'asc']]\n });\n return table;\n };\n this.productSelectDataTableDrawDT = function (e) {\n //debug( 'Table draw complete: '+new Date().getTime() );\n\n //$('td:contains(\"*\")').html('');\n $(\"td\").filter(function () {\n return $(this).text() === '*';\n }).html('');\n if (Order.getData().orderType == 'daily') {\n $(\"input[type='number'].inputNumberSpinner\").inputSpinner({\n template: '
' + '' +\n //'' +\n '' + '' + '
',\n buttonsWidth: \"0.5rem\",\n groupClass: \"\",\n // css class of the resulting input-group\n buttonsClass: \"btn-outline-secondary\"\n });\n }\n root.bindWeakUserHelper();\n /*\r\n ----------------------------------------------------------\r\n change order quantity\r\n */\n $(\".dataTableOrderProductSelect .details-control2 input[type=text]\").off('change');\n $(\".dataTableOrderProductSelect .details-control2 input[type=text]\").on('change', function (e) {\n var quantity = $(this).val();\n quantity = quantity.replace(',', '.');\n quantity = parseFloat(quantity);\n var rowData = $('.dataTableOrderProductSelect').DataTable().row($(this).closest('tr')).data();\n root.orderItemsChange(rowData, quantity);\n });\n $(\".dataTableOrderProductSelect .details-control2 input[type=text]\").each(function () {\n //debug('ez a function2')\n var quantity = $(this).val();\n var rowData = $('.dataTableOrderProductSelect').DataTable().row($(this).closest('tr')).data();\n if (Order.productSelected[rowData.id]) {\n debug(rowData);\n debug($($(this).closest('tr').find('input[type=number]')[0]));\n debug(Order.productSelected[rowData.id]);\n var quantityCurrent = Order.productSelected[rowData.id];\n if (typeof quantityCurrent != 'string') {\n quantityCurrent += '';\n }\n $($(this).closest('tr').find('input[type=number]')[0]).val(quantityCurrent.replace(',', '.'));\n }\n });\n $(\".dataTableOrderProductSelect .details-control2 button\").off('click');\n $(\".dataTableOrderProductSelect .details-control2 button\").on('click', function () {\n // debug('.details-control2 button click ')\n // debug(this);\n $(this).parent().find('input[type=text]').trigger('change');\n });\n };\n this.initViewProductSelect = function () {\n var functionName = 'initViewProductSelect';\n console.log(functionName + ' called');\n if (viewInicialized.includes(functionName)) {\n return;\n }\n //debug(Object.getOwnPropertyNames(root));\n root.setDatatableHeaderText('');\n root.Stepper.setOpts({\n onAfterActivate: function onAfterActivate() {}\n });\n //@note: be kell kapcsolni az elonezetet\n root.Stepper.addCompleted('invoice');\n root.Stepper.addEnabled('invoice');\n var CSSSelectorForm = '.orderParameterForm';\n //console.log(Opts.URL.getDataTableContentProductList);change\n debug(CSSSelectorForm + ' .fa-search');\n $('.sidebar-search .fa-search').off('click');\n $('.sidebar-search .fa-search').on('click', root.clickSearchProduct);\n $('a.sidebar.favorites').off('click');\n $('a.sidebar.favorites').on('click', root.clickFavoritesProduct);\n $('a.sidebar.often').off('click');\n $('a.sidebar.often').on('click', root.clickOftenProduct);\n $('a.sidebar.last').off('click');\n $('a.sidebar.last').on('click', root.clickLastProduct);\n $('a.sidebar.weekly').off('click');\n $('a.sidebar.weekly').on('click', root.clickWeeklyProduct);\n $('a.sidebar.krel').off('click');\n $('a.sidebar.krel').on('click', root.clickKrelProduct);\n $('a.sidebar.specialOffer').off('click');\n $('a.sidebar.specialOffer').on('click', root.clickSpecialOffer);\n $('.sidebar-search input[name=searchValue]').off('keypress');\n $('.sidebar-search input[name=searchValue]').on('keypress', function (event) {\n if (event.which == 13) {\n event.preventDefault();\n }\n if ($(this).val().length >= 2) {\n root.searchProductByString($(this).val() + event.key);\n }\n });\n $('.sidebar-wrapper .sidebar-menu .sidebar-dropdown .sidebar-submenu li a.categoryItem.clickable').off('click');\n $('.sidebar-wrapper .sidebar-menu .sidebar-dropdown .sidebar-submenu li a.categoryItem.clickable').on('click', function () {\n var groupId = $(this).data('id');\n selectedProductGroup = groupId;\n dataTableSearchStr = null;\n console.log(groupId);\n console.log(root.getTreePathName(this));\n root.setDatatableHeaderText(root.getTreePathName(this));\n /*\r\n let ajaxData={\r\n 'groupId':groupId,\r\n 'supplier_id':Order.supplierId,\r\n };\r\n //$('.dataTableOrderProductSelect').DataTable().ajax.data(ajaxData).load();\r\n \r\n */\n /*\r\n let ajaxUrl=Opts.URL.getDataTableContentProductList+'?groupId='+groupId+'&supplier_id='+Order.supplierId;\r\n $('.dataTableOrderProductSelect').DataTable().ajax.url(ajaxUrl).load();\r\n */\n $('.dataTableOrderProductSelect').DataTable().ajax.reload();\n });\n var table = root.getDatatables(Order.getData('orderType'));\n $('.dataTableOrderProductSelect').on('init.dt', function () {\n console.log('Table initialisation complete: ' + new Date().getTime());\n }).dataTable();\n $('.dataTableOrderProductSelect').on('draw.dt', root.productSelectDataTableDrawDT).dataTable();\n\n //$('.dataTableOrderProductSelect').on( 'draw.dt', ).dataTable();\n\n $('.dataTableOrderProductSelect').on('xhr.dt', function () {\n debug('Table xhr complete: ' + new Date().getTime());\n }).dataTable();\n\n //$(\"input[type='number'].inputNumberSpinner\").inputSpinner();\n\n /*\r\n ----------------------------------------------------------\r\n Add event listener for opening and closing details\r\n */\n\n $('.dataTableOrderProductSelect tbody').on('click', 'td.details-control', function () {\n var tr = $(this).closest('tr');\n var 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 } else {\n // Open this row\n row.child(root.productSelectDatatablesRowFormatter(row.data())).show();\n tr.addClass('shown');\n root.bindProductDetailsAction();\n }\n });\n viewInicialized.push(functionName);\n };\n this.bindProductDetailsAction = function () {\n root.bindRowDescriptionAction();\n root.bindRowFavoritesAction();\n if (Order.getData()['orderType'] == 'weekly') {\n root.bindOrderItemWeekQuantity();\n }\n };\n this.bindWeakUserHelper = function () {\n $(\"input.inputNumberSpinner\").off(\"focus\");\n $(\"input.inputNumberSpinner\").on(\"focus\", function () {\n var quantity = $(this).val();\n quantity = quantity.replace(',', '.');\n quantity = parseFloat(quantity);\n if (quantity === 0) {\n $(this).val('');\n }\n });\n $(\"input[type=text].inputNumberSpinner\").off(\"keypress\");\n $(\"input[type=text].inputNumberSpinner\").on(\"keypress\", function (event) {\n if (event.which == 13) {\n // console.error('enter pressed');\n var actualItem = this;\n var items = $(\"input[type=text].inputNumberSpinner\");\n items.each(function (item) {\n // console.log(this);\n if (this == actualItem) {\n // console.error(item);\n if (item + 1 <= items.length) {\n // console.error(items[item+1]);\n $(items[item + 1]).focus();\n }\n return false;\n }\n });\n }\n });\n };\n this.bindOrderItemWeekQuantity = function () {\n $(\"input.productSelectDayQuantity\").off('change');\n $(\"input.productSelectDayQuantity\").on('change', function () {\n console.log(this.name);\n console.log(this.value);\n console.log($(this).data('dayindex'));\n var rowData = null;\n var rowNode = $($(this).closest('table.orderProductSelectRowDetailsTable').closest('tr')).prev();\n rowData = $('.dataTableOrderProductSelect').DataTable().row(rowNode).data();\n console.log(rowData);\n var quantity = $(this).val();\n quantity = quantity.replace(',', '.');\n quantity = parseFloat(quantity);\n console.log(rowData.id);\n root.orderItemsChange(rowData, quantity, $(this).data('dayindex'));\n // root.orderItemsChange\n //orderItemsChange\n //quantity[1683][1]\n });\n };\n this.afterSyncOrderDataToServer = function (data) {\n //root.toggleEnableSend();\n //console.log('most vegzett. ennyit kiszed'+batchNum);\n for (var i = 0; i < queueAjax.length; i++) {\n console.log('shiftel');\n queueAjax.shift();\n }\n //console.log('remaining left '+queueAjax.length);\n setTimeout(function () {\n syncDoing = false;\n root.syncOrderDataToServer();\n }, Opts.dataSyncPauseTime);\n };\n var queueAjax = [];\n var syncDoing = false;\n this.syncOrderDataToServer = function () {\n //debug(queueAjax);\n if (syncDoing) {\n //debug('sync in progress....');\n return false;\n }\n if (queueAjax.length < 1) {\n return;\n }\n syncDoing = true;\n root.sendOrderDataToServer('productSelect', root.afterSyncOrderDataToServer);\n return;\n };\n this.orderItemsChange = function (ItemData, quantity, dayIndex) {\n /*\r\n debug('-----------------');\r\n debug(ItemData);\r\n debug(quantity);\r\n debug(Order.getData('productSelected'));\r\n debug('-----------------');\r\n \r\n */\n if (isNaN(quantity)) {\n quantity = 0;\n }\n var productSelected = Order.getData('productSelected');\n console.group('orderItemsChange');\n console.log(['productSelected', productSelected]);\n console.log(['ItemData', ItemData]);\n console.log(['ItemData.id', ItemData.id]);\n console.log(['quantity', quantity]);\n console.log(['dayIndex', dayIndex]);\n console.log(productSelected[ItemData.id]);\n var productSelectedItem = productSelected[ItemData.id];\n /*\r\n ha 0 ertek jon es nem is volt akkor hamar kiugratjuk\r\n */\n if (quantity == 0) {\n console.error('quantity==0');\n if (typeof productSelectedItem == 'undefined') {\n console.error('itt lep1');\n console.groupEnd();\n return;\n }\n if (dayIndex) {\n console.log('van dayIndex');\n if (typeof productSelected[ItemData.id][dayIndex] == 'undefined') {\n console.log(['productSelectedItem', productSelectedItem]);\n console.error('itt lep2');\n console.groupEnd();\n return;\n }\n }\n }\n /*\r\n ha azonos az ertek kiugrunk\r\n */\n if (dayIndex) {\n if (typeof productSelected[ItemData.id] != 'undefined' && typeof productSelected[ItemData.id][dayIndex] != 'undefined') {\n if (productSelected[ItemData.id][dayIndex] == quantity) {\n console.error('azonos napi');\n console.groupEnd();\n return;\n }\n }\n } else {\n if (productSelected[ItemData.id] == quantity) {\n console.error('azonos');\n console.groupEnd();\n return;\n }\n }\n if (quantity == 0) {\n if (dayIndex) {\n delete Order.productSelected[ItemData.id][dayIndex];\n delete productSelected[ItemData.id][dayIndex];\n } else {\n delete Order.productSelected[ItemData.id];\n delete productSelected[ItemData.id];\n }\n } else {\n /*\r\n ha van ertek erteket adunk!\r\n */\n if (dayIndex) {\n if (typeof productSelected[ItemData.id] == 'undefined') {\n productSelected[ItemData.id] = [];\n }\n console.log('set quantity productSelected[ItemData.id][dayIndex]', quantity);\n productSelected[ItemData.id][dayIndex] = quantity;\n } else {\n productSelected[ItemData.id] = quantity;\n console.log('set quantity productSelected[ItemData.id]', quantity);\n }\n }\n console.log(['productSelected', productSelected]);\n Order.productSelected = productSelected;\n console.groupEnd();\n queueAjax.push(Date.now());\n root.syncOrderDataToServer();\n return;\n // removed by dead control flow\n\n // removed by dead control flow\n\n // removed by dead control flow\n\n // removed by dead control flow\n\n // removed by dead control flow\n\n // removed by dead control flow\n\n // removed by dead control flow\n\n // removed by dead control flow\n\n\n /*\r\n debug(Order.getData('productSelected'));\r\n debug('*******************');\r\n */\n };\n this.initViewInvoice = function () {\n root.Stepper.setOpts({\n onAfterLoad: function onAfterLoad() {}\n });\n if (Object.keys(Order.productSelected).length > 0) {\n root.Stepper.addCompleted('send');\n root.Stepper.addEnabled('send');\n }\n var styleStr = '';\n $('table.invoice button.printButton').off('click');\n $('table.invoice button.printButton').on('click', function () {\n window.print();\n return;\n // removed by dead control flow\n var newWin; \n // removed by dead control flow\n\n // removed by dead control flow\n var print; \n // removed by dead control flow\n\n // newWin.document.write($('table.invoice').prop('outerHTML'));\n // removed by dead control flow\n\n // removed by dead control flow\n\n // removed by dead control flow\n\n });\n };\n this.resetOrder = function () {\n root.init();\n root.setDeliveryDate('-');\n root.setSupplier('-');\n };\n this.afterOrderSendOk = function (data) {\n Toast.create({\n title: \"Sent!\",\n message: 'Order Sent',\n status: TOAST_STATUS.INFO,\n timeout: 5000\n });\n $('.buttonOrderSend').off('click');\n $('.buttonOrderSend').prop('disabled', true);\n $('.statusNamePlace').removeClass('statusBlink');\n $('.statusNamePlace').text('elküldve');\n $('.buttonOrderSending').toggleClass('d-none');\n $('.buttonOrderSendOk').toggleClass('d-none');\n $('div.invoiceContainer').html(data.retHTML);\n //root.resetOrder();\n };\n this.afterOrderSendError = function (data) {\n $('.buttonOrderSend').toggleClass('d-none');\n $('.buttonOrderSending').toggleClass('d-none');\n $.each(APP.OrderModule.Stepper.getOpts().available, function (index, value) {\n APP.OrderModule.Stepper.setEnabled(value);\n APP.OrderModule.Stepper.setCompleted(value);\n });\n };\n this.initViewSend = function () {\n console.log('initViewSend called 2');\n root.Stepper.setOpts({\n onAfterLoad: function onAfterLoad() {}\n });\n $('.buttonOrderSend').off('click');\n $('.buttonOrderSend').on('click', function () {\n console.log('Send buton clicked');\n //@todo: datasynchere and callback\n $('.buttonOrderSend').toggleClass('d-none');\n $('.buttonOrderSending').toggleClass('d-none');\n /**\r\n * PM158\r\n */\n $.each(APP.OrderModule.Stepper.getOpts().available, function (index, value) {\n root.Stepper.unsetEnabled(value);\n root.Stepper.unsetCompleted(value);\n });\n /**\r\n */\n root.sendOrderDataToServer('send', root.afterOrderSendOk, root.afterOrderSendError);\n\n /* let ajaxData={};\r\n ajaxData._token=Opts.token;\r\n ajaxData.send=true;\r\n $.extend(ajaxData,Order);\r\n $.ajax({\r\n url: Opts.URL.store,\r\n method:'POST',\r\n data:ajaxData,\r\n success:function (data) {\r\n if(data.success){\r\n root.afterOrderSendOk(data);\r\n }\r\n }\r\n });*/\n });\n };\n this.testModeSend = function () {};\n this.testMode = function () {\n console.log('testMode called ');\n Order.setData({\n id: 234,\n supplierId: 7,\n productSelected: {\n 116: 3,\n 293: 2\n },\n contactName: 'Contact Name',\n note: 'Note',\n type: 'daily',\n deliveryDate: Opts.defaultDeliveryDate,\n deliveryAddress: 12\n });\n console.log(Order.getData());\n console.log('*******************');\n //root.Stepper.setOpts({'UrlData':{'supplierId':supplierId}});\n root.Stepper.setOpts({\n 'UrlData': {\n 'supplierId': Order.supplierId,\n id: Order.id\n }\n });\n this.Stepper.init({\n URL: {\n create: Opts.URL.create\n },\n /*\r\n csupasz az elejerol\r\n complete:['supplier'],\r\n enable: ['supplier'],\r\n active: 'supplier',\r\n onAfterActivate:this.initViewSupplier,\r\n \r\n product select\r\n complete:['supplier','parameter','productSelect'],\r\n enable: ['supplier','parameter','productSelect'],\r\n active: 'productSelect',\r\n onAfterActivate:this.initViewProductSelect,\r\n \r\n fullos\r\n complete:['supplier','parameter','productSelect','invoice'],\r\n enable: ['supplier','parameter','productSelect','invoice','send'],\r\n active: 'productSelect',\r\n onAfterActivate:this.initViewProductSelect,\r\n \r\n send\r\n complete:['supplier','parameter','productSelect','invoice','send'],\r\n enable: ['supplier','parameter','productSelect','invoice','send'],\r\n active: 'send',\r\n onAfterActivate:this.initViewProductSelect,\r\n \r\n */\n complete: ['supplier', 'parameter', 'productSelect'],\n enable: ['supplier', 'parameter', 'productSelect'],\n active: 'productSelect',\n onAfterActivate: this.initViewProductSelect,\n autoCallback: {\n invoice: {\n onAfterActivate: root.initViewInvoice\n },\n send: {\n onAfterActivate: root.initViewSend\n }\n }\n });\n console.log('*******************');\n };\n this.toggleEnableSend = function () {\n console.log('toggleEnableSend called');\n var ajaxUrl = Opts.URL.checkReadyToSend.replace('%id%', Order.id);\n $.ajax({\n url: ajaxUrl,\n success: function success(data) {\n if (data.success) {\n if (data.readyToSend) {\n root.Stepper.addCompleted('send');\n /*\r\n root.Stepper.addCompleted('invoice');\r\n root.Stepper.addEnabled('invoice');\r\n */\n root.Stepper.addEnabled('send');\n } else {\n root.Stepper.unsetCompleted('send');\n /*\r\n root.Stepper.unsetCompleted('invoice');\r\n root.Stepper.unsetEnabled('invoice');\r\n */\n root.Stepper.unsetEnabled('send');\n }\n }\n console.log(data);\n }\n });\n };\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QUM7RUFDRCxJQUFJLENBQUM0VixnQkFBZ0IsR0FBQyxZQUFZO0lBQzlCN1YsT0FBTyxDQUFDQyxHQUFHLENBQUMseUJBQXlCLENBQUM7SUFDdEMsSUFBSThGLE9BQU8sR0FBQ3ZGLElBQUksQ0FBQ1EsR0FBRyxDQUFDa0UsZ0JBQWdCLENBQUNjLE9BQU8sQ0FBQyxNQUFNLEVBQUNKLEtBQUssQ0FBQ0ssRUFBRSxDQUFDO0lBQzlEeEUsQ0FBQyxDQUFDOEIsSUFBSSxDQUFDO01BQ0hHLEdBQUcsRUFBQ3FDLE9BQU87TUFDWG5DLE9BQU8sRUFBQyxTQUFSQSxPQUFPQSxDQUFXbkUsSUFBSSxFQUFFO1FBQ3BCLElBQUdBLElBQUksQ0FBQ21FLE9BQU8sRUFBQztVQUNaLElBQUduRSxJQUFJLENBQUNxVyxXQUFXLEVBQUM7WUFDaEJ2VSxJQUFJLENBQUNoQixPQUFPLENBQUMrQyxZQUFZLENBQUMsTUFBTSxDQUFDO1lBQ3pEO0FBQ0E7QUFDQTtBQUNBO1lBQ3dCL0IsSUFBSSxDQUFDaEIsT0FBTyxDQUFDNkMsVUFBVSxDQUFDLE1BQU0sQ0FBQztVQUNuQyxDQUFDLE1BQUk7WUFDRDdCLElBQUksQ0FBQ2hCLE9BQU8sQ0FBQ3FDLGNBQWMsQ0FBQyxNQUFNLENBQUM7WUFDM0Q7QUFDQTtBQUNBO0FBQ0E7WUFDd0JyQixJQUFJLENBQUNoQixPQUFPLENBQUN3QyxZQUFZLENBQUMsTUFBTSxDQUFDO1VBQ3JDO1FBQ0o7UUFDQS9DLE9BQU8sQ0FBQ0MsR0FBRyxDQUFDUixJQUFJLENBQUM7TUFDckI7SUFDSixDQUFDLENBQUM7RUFDTixDQUFDO0FBRUwsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL3Jlc291cmNlcy9qcy9tb2R1bGVKcy9vcmRlci5qcz81NjFmIl0sInNvdXJjZXNDb250ZW50IjpbIndpbmRvdy5PcmRlck1vZHVsRGVmYXVsdD17XHJcbiAgICBhY3Rpb25GdW5jdGlvbjogZnVuY3Rpb24gKCkge30sXHJcbn1cclxuY2xhc3MgRGF0YU1vZGVsT3JkZXIgZXh0ZW5kcyBEYXRhTW9kZWx7XHJcblxyXG4gICAgLypcclxuICAgICAqIENvbnN0cnVjdG9yXHJcbiAgICAgKi9cclxuICAgIGNvbnN0cnVjdG9yIChkYXRhLG9wdGlvbnMpIHtcclxuICAgICAgICBzdXBlcihkYXRhLG9wdGlvbnMpXHJcbiAgICAgICAgaWYodHlwZW9mIHRoaXMucHJvZHVjdFNlbGVjdGVkID09PVwidW5kZWZpbmVkXCIpe1xyXG4gICAgICAgICAgICB0aGlzLnByb2R1Y3RTZWxlY3RlZD17fTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYodHlwZW9mIHRoaXMucHJvZHVjdENvbW1lbnQgPT09XCJ1bmRlZmluZWRcIil7XHJcbiAgICAgICAgICAgIHRoaXMucHJvZHVjdENvbW1lbnQ9e307XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnNvbGUubG9nKHRoaXMuY29uc3RydWN0b3IubmFtZSsnIGNvbnN0cnVjdG9yIGNhbGxlZCcpO1xyXG4gICAgfTtcclxufTtcclxud2luZG93LkRhdGFNb2RlbE9yZGVyPURhdGFNb2RlbE9yZGVyO1xyXG5cclxud2luZG93LlN0ZXBwZXI9ZnVuY3Rpb24gKCkge1xyXG5cclxuICAgIC8qXHJcbiAgICAgKiBWYXJpYWJsZXMgYWNjZXNzaWJsZVxyXG4gICAgICogaW4gdGhlIGNsYXNzXHJcbiAgICAgKi9cclxuICAgIGxldCBPcHRzID0ge1xyXG4gICAgICAgIGNvbXBsZXRlOiBbJ3N1cHBsaWVyJ10sXHJcbiAgICAgICAgYXZhaWxhYmxlOiBbJ3N1cHBsaWVyJywgJ3BhcmFtZXRlcicsICdwcm9kdWN0U2VsZWN0JywgJ2ludm9pY2UnLCAnc2VuZCddLFxyXG4gICAgICAgIGVuYWJsZTogWydzdXBwbGllcicsICdpbnZvaWNlJ10sXHJcbiAgICAgICAgbG9hZDogW10sXHJcbiAgICAgICAgZXhjbHVkZUxvYWRlZDpbJ2ludm9pY2UnLCdzZW5kJ10sXHJcbiAgICAgICAgbG9hZGVkOiBbXSxcclxuICAgICAgICBhY3RpdmU6IGZhbHNlLFxyXG4gICAgICAgIFVSTDoge1xyXG4gICAgICAgICAgICBjcmVhdGU6ICcnLFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgVXJsRGF0YTpmYWxzZSxcclxuICAgICAgICBvbkFmdGVyTG9hZDpmdW5jdGlvbiAoKSB7fSxcclxuICAgICAgICBvbkFmdGVyQWN0aXZhdGU6ZnVuY3Rpb24gKCkge30sXHJcbiAgICAgICAgYXV0b0NhbGxiYWNrOntcclxuICAgICAgICAgICAgJ2ludm9pY2UnOntcclxuICAgICAgICAgICAgICAgIG9uQWZ0ZXJBY3RpdmF0ZTpmdW5jdGlvbiAoKSB7fSxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgJ3NlbmQnOntcclxuICAgICAgICAgICAgICAgIG9uQWZ0ZXJBY3RpdmF0ZTpmdW5jdGlvbiAoKSB7fSxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICB9LFxyXG4gICAgICAgIG5vd0xvYWRlZDpmYWxzZSxcclxuXHJcbiAgICB9O1xyXG5cclxuICAgIGxldCByb290PXRoaXM7XHJcbiAgICAvKlxyXG4gICAgICogQ29uc3RydWN0b3JcclxuICAgICAqL1xyXG4gICAgdGhpcy5jb25zdHJ1Y3QgPSBmdW5jdGlvbiAob3B0aW9ucykge1xyXG4gICAgICAgICQuZXh0ZW5kKE9wdHMsIG9wdGlvbnMpO1xyXG4gICAgfTtcclxuXHJcbiAgICB0aGlzLmdldE9wdHM9ZnVuY3Rpb24oKXtcclxuICAgICAgICByZXR1cm4gT3B0cztcclxuICAgIH1cclxuICAgIHRoaXMuc2V0T3B0cz1mdW5jdGlvbihvcHRpb25zKXtcclxuICAgICAgICAkLmV4dGVuZChPcHRzLCBvcHRpb25zKTtcclxuICAgIH1cclxuXHJcblxyXG5cclxuICAgIHRoaXMuaW5pdD1mdW5jdGlvbiAob3B0aW9ucyl7XHJcbiAgICAgICAgJC5leHRlbmQoT3B0cywgb3B0aW9ucyk7XHJcblxyXG4gICAgICAgIGRlYnVnKE9wdHMpO1xyXG4gICAgICAgICQoJy5zdGVwJykuZWFjaChmdW5jdGlvbigpe1xyXG4gICAgICAgICAgICBsZXQgc3RlcE5hbWU9JCh0aGlzKS5kYXRhKCdzdGVwbmFtZScpO1xyXG4gICAgICAgICAgICBpZihPcHRzLmNvbXBsZXRlLmluY2x1ZGVzKHN0ZXBOYW1lKSl7XHJcbiAgICAgICAgICAgICAgICByb290LnNldENvbXBsZXRlZChzdGVwTmFtZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYoT3B0cy5lbmFibGUuaW5jbHVkZXMoc3RlcE5hbWUpKXtcclxuICAgICAgICAgICAgICAgIHJvb3Quc2V0RW5hYmxlZChzdGVwTmFtZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYoT3B0cy5sb2FkLmluY2x1ZGVzKHN0ZXBOYW1lKSl7XHJcbiAgICAgICAgICAgICAgICByb290LmxvYWRTdGVwQ29udGVudChzdGVwTmFtZSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmKE9wdHMuYWN0aXZlPT09c3RlcE5hbWUpe1xyXG4gICAgICAgICAgICAgICAgcm9vdC5zZXRBY3RpdmUoc3RlcE5hbWUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcm9vdC5iaW5kQ2xpY2tBY3Rpb24oKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmJpbmRDbGlja0FjdGlvbj1mdW5jdGlvbiAoKXtcclxuICAgICAgICBsZXQgc3RlcENsaWNrQnV0dG9ucz0kKCcuc3RlcENsaWNrJyk7XHJcbiAgICAgICAgc3RlcENsaWNrQnV0dG9ucy5vZmYoJ2NsaWNrJyk7XHJcbiAgICAgICAgc3RlcENsaWNrQnV0dG9ucy5vbignY2xpY2snLHJvb3Quc3RlcENsaWNrKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5zZXRDb21wbGV0ZWQ9ZnVuY3Rpb24gKHN0ZXBOYW1lKXtcclxuICAgICAgICBjb25zb2xlLmxvZyhzdGVwTmFtZSsnIGNvbXBsZXRlZCcpO1xyXG4gICAgICAgICQoJy5zdGVwW2RhdGEtc3RlcE5hbWU9XCInK3N0ZXBOYW1lKydcIl0nKS5hZGRDbGFzcygnY29tcGxldGVkJyk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy51bnNldENvbXBsZXRlZD1mdW5jdGlvbiAoc3RlcE5hbWUpe1xyXG4gICAgICAgIGNvbnNvbGUubG9nKHN0ZXBOYW1lKycgVW5jb21wbGV0ZWQnKTtcclxuICAgICAgICAkKCcuc3RlcFtkYXRhLXN0ZXBOYW1lPVwiJytzdGVwTmFtZSsnXCJdJykucmVtb3ZlQ2xhc3MoJ2NvbXBsZXRlZCcpO1xyXG4gICAgICAgIE9wdHMuY29tcGxldGU9YXJyYXlSZW1vdmUoT3B0cy5jb21wbGV0ZSxzdGVwTmFtZSk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy51bnNldEVuYWJsZWQ9ZnVuY3Rpb24gKHN0ZXBOYW1lKXtcclxuICAgICAgICBjb25zb2xlLmxvZyhzdGVwTmFtZSsnIFVuIGVuYWJsZWQnKTtcclxuICAgICAgICAkKCcuY2xpY2snK3N0ZXBOYW1lKS5jb250ZW50cygpLnVud3JhcCgpO1xyXG4gICAgICAgIE9wdHMuZW5hYmxlPWFycmF5UmVtb3ZlKE9wdHMuZW5hYmxlLHN0ZXBOYW1lKTtcclxuICAgIH1cclxuICAgIHRoaXMuc2V0RW5hYmxlZD1mdW5jdGlvbiAoc3RlcE5hbWUpe1xyXG4gICAgICAgIGNvbnNvbGUubG9nKHN0ZXBOYW1lKycgZW5hYmxlZCcpO1xyXG4gICAgICAgIGxldCBzdGVwSXRlbT0kKCcuc3RlcFtkYXRhLXN0ZXBOYW1lPVwiJytzdGVwTmFtZSsnXCJdJyk7XHJcbiAgICAgICAgc3RlcEl0ZW0uaHRtbCgnPGEgY2xhc3M9XCJzdGVwQ2xpY2sgY2xpY2snK3N0ZXBOYW1lKydcIiBkYXRhLXN0ZXBOYW1lPVwiJytzdGVwTmFtZSsnXCIgaHJlZj1cIiNcIj4nK3N0ZXBJdGVtLmh0bWwoKSsnPC9hPicpO1xyXG4gICAgICAgIHJvb3QuYmluZENsaWNrQWN0aW9uKCk7XHJcbiAgICAgICAgLy8kKCcuc3RlcENsaWNrJykuY2xpY2socm9vdC5zdGVwQ2xpY2spO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmFkZEVuYWJsZWQ9ZnVuY3Rpb24oc3RlcE5hbWUpe1xyXG4gICAgICAgIGlmKCFPcHRzLmVuYWJsZS5pbmNsdWRlcyhzdGVwTmFtZSkpe1xyXG4gICAgICAgICAgICBPcHRzLmVuYWJsZS5wdXNoKHN0ZXBOYW1lKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcm9vdC5zZXRFbmFibGVkKHN0ZXBOYW1lKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmFkZENvbXBsZXRlZD1mdW5jdGlvbihzdGVwTmFtZSl7XHJcbiAgICAgICAgaWYoIU9wdHMuY29tcGxldGUuaW5jbHVkZXMoc3RlcE5hbWUpKXtcclxuICAgICAgICAgICAgT3B0cy5jb21wbGV0ZS5wdXNoKHN0ZXBOYW1lKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcm9vdC5zZXRDb21wbGV0ZWQoc3RlcE5hbWUpO1xyXG4gICAgICAgIHJvb3QuYmluZENsaWNrQWN0aW9uKCk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIHRoaXMubG9hZFN0ZXBDb250ZW50PWZ1bmN0aW9uIChzdGVwTmFtZSl7XHJcbiAgICAgICAgbGV0IGRhdGE9eyd0eXBlJzpzdGVwTmFtZX07XHJcbiAgICAgICAgJC5leHRlbmQoZGF0YSwgT3B0cy5VcmxEYXRhKTtcclxuXHJcbiAgICAgICAgJC5hamF4KHtcclxuICAgICAgICAgICAgYXN5bmM6IHRydWUsXHJcbiAgICAgICAgICAgIHR5cGU6IFwiR0VUXCIsXHJcbiAgICAgICAgICAgIHVybDogT3B0cy5VUkwuY3JlYXRlLFxyXG4gICAgICAgICAgICBkYXRhOiBkYXRhLFxyXG4gICAgICAgICAgICBjYWNoZTogZmFsc2UsXHJcbiAgICAgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uKHJlc3VsdClcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgbGV0IGNvbnRhaW5lcj0kKCcuU0MnK3N0ZXBOYW1lLmNhcGl0YWxpemUoKSk7XHJcbiAgICAgICAgICAgICAgICBpZigkLmluQXJyYXkoc3RlcE5hbWUsT3B0cy5leGNsdWRlTG9hZGVkKT09LTEpe1xyXG4gICAgICAgICAgICAgICAgICAgIE9wdHMubG9hZGVkLnB1c2goc3RlcE5hbWUpO1xyXG4gICAgICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ2V4Y2x1ZGVkIFZpZXcnKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGNvbnRhaW5lci5odG1sKHJlc3VsdCk7XHJcbiAgICAgICAgICAgICAgICBpZihPcHRzLm5vd0xvYWRlZCl7XHJcbiAgICAgICAgICAgICAgICAgICAgT3B0cy5ub3dMb2FkZWQoc3RlcE5hbWUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgT3B0cy5vbkFmdGVyTG9hZCgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5jbGVhckxvYWRlZD1mdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgT3B0cy5sb2FkZWQ9WydzdXBwbGllciddO1xyXG4gICAgICAgICQoJy5zdGVwQ29udGFpbmVyJykuZWFjaChmdW5jdGlvbigpe1xyXG4vKlxyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyh0aGlzLmNsYXNzTGlzdCk7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKHRoaXMuY2xhc3NMaXN0LmNvbnRhaW5zKCdTQ1N1cHBsaWVyJykpO1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZygkKHRoaXMpLmF0dHIoJ2NsYXNzJykpO1xyXG4qL1xyXG4gICAgICAgICAgICBpZighdGhpcy5jbGFzc0xpc3QuY29udGFpbnMoJ1NDU3VwcGxpZXInKSl7XHJcbiAgICAgICAgICAgICAgICAkKHRoaXMpLmh0bWwoJycpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5zZXRBY3RpdmVGaW5pc2g9ZnVuY3Rpb24oc3RlcE5hbWUpe1xyXG4gICAgICAgIGxldCBjb250YWluZXI9JCgnLlNDJytzdGVwTmFtZS5jYXBpdGFsaXplKCkpO1xyXG4gICAgICAgIGlmKHN0ZXBOYW1lPT09J3Byb2R1Y3RTZWxlY3QnKXtcclxuICAgICAgICAgICAgJCgnLmNvbnRhaW5lclN0ZXBwZXInKS5hZGRDbGFzcygnYWN0aXZlU2lkZUJhcicpO1xyXG4gICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAkKCcuY29udGFpbmVyU3RlcHBlcicpLnJlbW92ZUNsYXNzKCdhY3RpdmVTaWRlQmFyJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGRlYnVnKCdzZXRBY3RpdmVGaW5pc2ggc2hvdzonK3N0ZXBOYW1lKTtcclxuICAgICAgICBjb250YWluZXIuc2hvdygpO1xyXG4gICAgICAgIE9wdHMubm93TG9hZGVkPWZhbHNlO1xyXG4gICAgICAgIHJvb3QuYWN0aXZlPXN0ZXBOYW1lO1xyXG4gICAgICAgIE9wdHMub25BZnRlckFjdGl2YXRlKCk7XHJcbiAgICAgICAgaWYodHlwZW9mIE9wdHMuYXV0b0NhbGxiYWNrW3N0ZXBOYW1lXSE9PSd1bmRlZmluZWQnICl7XHJcbiAgICAgICAgICAgIE9wdHMuYXV0b0NhbGxiYWNrW3N0ZXBOYW1lXS5vbkFmdGVyQWN0aXZhdGUoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICB0aGlzLnNldEFjdGl2ZT1mdW5jdGlvbihzdGVwTmFtZSl7XHJcbiAgICAgICAgJCgnLnN0ZXBDb250YWluZXInKS5oaWRlKCk7XHJcbiAgICAgICAgaWYoIU9wdHMubG9hZGVkLmluY2x1ZGVzKHN0ZXBOYW1lKSl7XHJcbiAgICAgICAgICAgIHJvb3QubG9hZFN0ZXBDb250ZW50KHN0ZXBOYW1lKTtcclxuICAgICAgICAgICAgT3B0cy5ub3dMb2FkZWQ9dGhpcy5zZXRBY3RpdmVGaW5pc2g7XHJcbiAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0QWN0aXZlRmluaXNoKHN0ZXBOYW1lKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5zdGVwQ2xpY2s9ZnVuY3Rpb24oZXZlbnQpe1xyXG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgbGV0IHN0ZXBOYW1lPSQoZXZlbnQuY3VycmVudFRhcmdldCkuZGF0YSgnc3RlcG5hbWUnKTtcclxuICAgICAgICBjb25zb2xlLmxvZygnc2V0QWN0aXZlOicrc3RlcE5hbWUpO1xyXG4gICAgICAgIHJvb3Quc2V0QWN0aXZlKHN0ZXBOYW1lKTtcclxuICAgIH1cclxufVxyXG5cclxud2luZG93Lk9yZGVyTW9kdWxlID0gZnVuY3Rpb24gKCkge1xyXG5cclxuICAgIC8qXHJcbiAgICAgKiBWYXJpYWJsZXMgYWNjZXNzaWJsZVxyXG4gICAgICogaW4gdGhlIGNsYXNzXHJcbiAgICAgKi9cclxuICAgIGxldCBPcHRzID0ge1xyXG4gICAgICAgIHRlc3RNb2RlOiBmYWxzZSxcclxuICAgICAgICBuZWVkU3RlcHBlcjp0cnVlLFxyXG4gICAgICAgIENTU1NlbGVjdG9yRm9ybTonLm9yZGVyUGFyYW1ldGVyRm9ybScsXHJcbiAgICAgICAgZGVmYXVsdERlbGl2ZXJ5RGF0ZTonJyxcclxuICAgICAgICBkYXRhU3luY1BhdXNlVGltZTo1MDAsXHJcbiAgICAgICAgdG9rZW46bnVsbCxcclxuICAgICAgICBVUkw6IHtcclxuICAgICAgICAgICAgcm9vdDpudWxsLFxyXG4gICAgICAgICAgICBnZXREYXRhVGFibGVDb250ZW50UHJvZHVjdExpc3Q6bnVsbCxcclxuICAgICAgICAgICAgY2hlY2tSZWFkeVRvU2VuZDpudWxsLFxyXG4gICAgICAgICAgICBpbmRleDpudWxsLFxyXG4gICAgICAgICAgICBzaG93Om51bGwsXHJcbiAgICAgICAgICAgIGVkaXQ6bnVsbCxcclxuICAgICAgICAgICAgY3JlYXRlOiBudWxsLFxyXG4gICAgICAgICAgICBzdG9yZTogbnVsbCxcclxuICAgICAgICAgICAgdXBkYXRlOm51bGwsXHJcbiAgICAgICAgICAgIGRlc3Ryb3k6bnVsbCxcclxuICAgICAgICAgICAgdG9nZ2xlRmF2b3JpdGVzOm51bGwsXHJcbiAgICAgICAgfSxcclxuICAgIH07XHJcblxyXG4gICAgY29uc3QgUHVibGljVmFyID0ge307XHJcbiAgICBsZXQgUHVibGljVmFyMiA9IHsnYXNkJzogJzIxJ307XHJcbiAgICBsZXQgQXBpVG9rZW4gPSBudWxsO1xyXG4gICAgbGV0IE9yZGVyPW51bGw7XHJcbiAgICBsZXQgcm9vdCA9IHRoaXM7XHJcbiAgICBsZXQgdmlld0luaWNpYWxpemVkPVtdO1xyXG5cclxuICAgIHRoaXMuc2V0T3B0cyA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XHJcbiAgICAgICAgJC5leHRlbmQoT3B0cywgb3B0aW9ucyk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5nZXRPcHRzID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiBPcHRzO1xyXG4gICAgfVxyXG4gICAgdGhpcy5jbGlja09yZGVyRWRpdD1mdW5jdGlvbiAoZGF0YSl7XHJcbiAgICAgICAgZGVidWcoJ2NsaWNrRWRpdCcpO1xyXG4gICAgICAgIGRlYnVnKGRhdGEpO1xyXG4gICAgICAgIGxldCBhamF4VXJsPU9wdHMuVVJMLmVkaXQucmVwbGFjZSgnJWlkJScsZGF0YS5pZCk7XHJcbiAgICAgICAgQVBQLmxvYWRNYWluQ29udGVudChhamF4VXJsKTtcclxuLyogICAgICAgIGxldCBhamF4RGF0YT17fTtcclxuICAgICAgICBhamF4RGF0YS5fdG9rZW49T3B0cy50b2tlbjtcclxuICAgICAgICAkLmV4dGVuZChhamF4RGF0YSxPcmRlcik7XHJcbiAgICAgICAgbGV0IGFqYXhVcmw9T3B0cy5VUkwuZWRpdC5yZXBsYWNlKCclaWQlJyxkYXRhLmlkKTtcclxuICAgICAgICAkLmFqYXgoe1xyXG4gICAgICAgICAgICB1cmw6IGFqYXhVcmwsXHJcbiAgICAgICAgICAgIG1ldGhvZDonR0VUJyxcclxuICAgICAgICAgICAgZGF0YTphamF4RGF0YSxcclxuICAgICAgICAgICAgc3VjY2VzczpmdW5jdGlvbiAocmVzcG9uc2UpIHtcclxuICAgICAgICAgICAgICAgIGlmKHJlc3BvbnNlLnN1Y2Nlc3Mpe1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBvcmRlckRhdGE9cmVzcG9uc2UuZGF0YTtcclxuICAgICAgICAgICAgICAgICAgICBvcmRlckRhdGEuc3VwcGxpZXJJZD1vcmRlckRhdGEuc3VwcGxpZXJfaWQ7XHJcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlKG9yZGVyRGF0YS5zdXBwbGllcl9pZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgcm9vdC5pbml0T3JkZXIob3JkZXJEYXRhKTtcclxuICAgICAgICAgICAgICAgICAgICByb290LmluaXRTdGVwcGVyKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgLy9yb290LmFmdGVyT3JkZXJTZXRTdXBwbGllck9rKGRhdGEuZGF0YSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTsqL1xyXG5cclxuXHJcbiAgICB9XHJcbiAgICB0aGlzLmFmdGVyT3JkZXJEZWxldGVkPWZ1bmN0aW9uIChkYXRhKXtcclxuICAgICAgICBpZihkYXRhLnN1Y2Nlc3M9PXRydWUpe1xyXG4gICAgICAgICAgICBkZWJ1ZygnT3JkZXIgZGVsZXRlIHN1Y2Nlc3MnKTtcclxuICAgICAgICAgICAgQVBQLmxvYWRNYWluQ29udGVudChPcHRzLlVSTC5pbmRleCk7XHJcbiAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgIFRvYXN0LmNyZWF0ZSh7IHRpdGxlOiBcIkVycm9yIGRlbGV0ZWQgIVwiLCBtZXNzYWdlOiAnJywgc3RhdHVzOiBUT0FTVF9TVEFUVVMuREFOR0VSLCB0aW1lb3V0OiA1MDAwIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHRoaXMuY2xpY2tPcmRlckRlbGV0ZUNvbmZpcm1lZD1mdW5jdGlvbiAoZXZlbnQpe1xyXG4gICAgICAgIGRlYnVnKCdjbGlja09yZGVyRGVsZXRlQ29uZmlybWVkJyk7XHJcbiAgICAgICAgZGVidWcoZXZlbnQpO1xyXG4gICAgICAgIGRlYnVnKGV2ZW50LmRhdGEpO1xyXG4gICAgICAgICQoJyNkaWFsb2dNb2RhbCcpLm1vZGFsKCdoaWRlJyk7XHJcbiAgICAgICAgbGV0IGFqYXhEYXRhPXt9O1xyXG4gICAgICAgIGFqYXhEYXRhLl90b2tlbj1PcHRzLnRva2VuO1xyXG4gICAgICAgIGxldCBhamF4VXJsPU9wdHMuVVJMLmRlc3Ryb3kucmVwbGFjZSgnJWlkJScsZXZlbnQuZGF0YS5pZCk7XHJcbiAgICAgICAgJC5hamF4KHtcclxuICAgICAgICAgICAgdXJsOmFqYXhVcmwsXHJcbiAgICAgICAgICAgIGRhdGE6YWpheERhdGEsXHJcbiAgICAgICAgICAgIG1ldGhvZDpcIkRFTEVURVwiLFxyXG4gICAgICAgICAgICBzdWNjZXNzOnJvb3QuYWZ0ZXJPcmRlckRlbGV0ZWQsXHJcbiAgICAgICAgICAgIC8vZXJyb3I6YWpheEVycm9ySGFuZGxlclxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgIH1cclxuICAgIHRoaXMuaW5pdFZpZXdPcmRlclNlbGVjdD1mdW5jdGlvbiAoKXtcclxuICAgICAgICBkZWJ1ZygnY2FsbGVkIGluaXRWaWV3T3JkZXJTZWxlY3QgJyk7XHJcbiAgICAgICAgJCgnLm9yZGVyc1NlbGVjdFRhYmxlIGJ1dHRvbicpLm9mZignY2xpY2snKTtcclxuICAgICAgICAkKCcub3JkZXJzU2VsZWN0VGFibGUgYnV0dG9uJykub24oJ2NsaWNrJyxmdW5jdGlvbiAoKXtcclxuICAgICAgICAgICAgbGV0IGFjdGlvbj0kKHRoaXMpLmRhdGEoJ2FjdGlvbicpO1xyXG4gICAgICAgICAgICBsZXQgb3JkZXJJZD0kKCQodGhpcykuY2xvc2VzdCgndHInKVswXSkuZGF0YSgnb3JkZXJpZCcpO1xyXG4gICAgICAgICAgICBkZWJ1ZyhhY3Rpb24pO1xyXG4gICAgICAgICAgICBkZWJ1ZyhvcmRlcklkKTtcclxuXHJcbiAgICAgICAgICAgIGlmKGFjdGlvbj09J2RlbGV0ZScpe1xyXG4gICAgICAgICAgICAgICAgJCgnI2RpYWxvZ01vZGFsJykub24oJ3Nob3cuYnMubW9kYWwnLCBmdW5jdGlvbiAoZXZlbnQpIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBJZiBuZWNlc3NhcnksIHlvdSBjb3VsZCBpbml0aWF0ZSBhbiBBSkFYIHJlcXVlc3QgaGVyZSAoYW5kIHRoZW4gZG8gdGhlIHVwZGF0aW5nIGluIGEgY2FsbGJhY2spLlxyXG4gICAgICAgICAgICAgICAgICAgIC8vIFVwZGF0ZSB0aGUgbW9kYWwncyBjb250ZW50LiBXZSdsbCB1c2UgalF1ZXJ5IGhlcmUsIGJ1dCB5b3UgY291bGQgdXNlIGEgZGF0YSBiaW5kaW5nIGxpYnJhcnkgb3Igb3RoZXIgbWV0aG9kcyBpbnN0ZWFkLlxyXG4gICAgICAgICAgICAgICAgICAgIHZhciBtb2RhbCA9ICQodGhpcyk7XHJcbiAgICAgICAgICAgICAgICAgICAgbW9kYWwuZmluZCgnLm1vZGFsLXRpdGxlJykudGV4dCgnTWVnZXLFkXPDrXTDqXMgJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgbW9kYWwuZmluZCgnLm1vZGFsLWJvZHknKS50ZXh0KCdCaXp0b3NhbiB0w7ZybGkgYSBtZWdyZW5kZWzDqXN0PycpO1xyXG4gICAgICAgICAgICAgICAgICAgIG1vZGFsLmZpbmQoJy5idXR0b25ZZXMnKS5vZmYoJ2NsaWNrJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgbW9kYWwuZmluZCgnLmJ1dHRvblllcycpLm9uKCdjbGljaycse2lkOm9yZGVySWR9LHJvb3QuY2xpY2tPcmRlckRlbGV0ZUNvbmZpcm1lZCk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICQoJyNkaWFsb2dNb2RhbCcpLm1vZGFsKCdzaG93Jyk7XHJcbiAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgcm9vdC5jbGlja09yZGVyRWRpdCh7aWQ6b3JkZXJJZH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgJCgnLmJ1dHRvbk5ldycpLm9mZignY2xpY2snKTtcclxuICAgICAgICAkKCcuYnV0dG9uTmV3Jykub24oJ2NsaWNrJyxmdW5jdGlvbiAoKXtcclxuICAgICAgICAgICAgQVBQLmxvYWRNYWluQ29udGVudChPcHRzLlVSTC5pbmRleCwnZm9yY2U9dHJ1ZScpO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgIH1cclxuICAgIHRoaXMuaW5pdFN0ZXBwZXI9ZnVuY3Rpb24gKCl7XHJcbiAgICAgICAgZGVidWcoT3JkZXIuZ2V0RGF0YSgpKTtcclxuICAgICAgICB2aWV3SW5pY2lhbGl6ZWQ9W107XHJcbiAgICAgICAgJCgnLnN0YXR1c05hbWVQbGFjZScpLnRleHQoJ05pbmNzIGVsa8O8bGR2ZScpO1xyXG4gICAgICAgICQoJy5zdGF0dXNOYW1lUGxhY2UnKS5hZGRDbGFzcygnc3RhdHVzQmxpbmsnKTtcclxuICAgICAgICByb290LnNldERlbGl2ZXJ5RGF0ZSgnLScpO1xyXG4gICAgICAgIHJvb3Quc2V0U3VwcGxpZXIoJy0nKTtcclxuXHJcbiAgICAgICAgbGV0IHVuRW5hYmxlZD1bJ3BhcmFtZXRlcicsICdwcm9kdWN0U2VsZWN0JywgJ2ludm9pY2UnLCAnc2VuZCddO1xyXG4gICAgICAgICQuZWFjaCh1bkVuYWJsZWQsZnVuY3Rpb24gKGluZGV4LHZhbHVlKSB7XHJcbiAgICAgICAgICAgIHJvb3QuU3RlcHBlci51bnNldEVuYWJsZWQodmFsdWUpO1xyXG4gICAgICAgICAgICByb290LlN0ZXBwZXIudW5zZXRDb21wbGV0ZWQodmFsdWUpO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBkZWJ1Zyhyb290LlN0ZXBwZXIuZ2V0T3B0cygpWydhdmFpbGFibGUnXSk7XHJcbiAgICAgICAgZGVidWcoT3JkZXIuZ2V0RGF0YSgpWydvcmRlclN0YXR1cyddKTtcclxuXHJcbiAgICAgICAgbGV0IHN0ZXBBY3RpdmU9J3N1cHBsaWVyJztcclxuICAgICAgICBsZXQgc3RlcENvbXBsZXRlPVsnc3VwcGxpZXInXTtcclxuICAgICAgICBsZXQgc3RlcEVuYWJsZT1bXTtcclxuICAgICAgICBsZXQgc3RlcE9uQWZ0ZXJBY3RpdmF0ZT1mdW5jdGlvbiAoKXt9O1xyXG5cclxuICAgICAgICBsZXQgYXZhbGFpYmxlU3RlcHM9cm9vdC5TdGVwcGVyLmdldE9wdHMoKVsnYXZhaWxhYmxlJ107XHJcbiAgICAgICAgbGV0IHN0ZXBVcmxEYXRhPWZhbHNlO1xyXG4gICAgICAgIGxldCBzdGVwQXV0b0NhbGxiYWNrPVtdO1xyXG4gICAgICAgIGZvciAobGV0IHN0ZXBOYW1lIG9mIGF2YWxhaWJsZVN0ZXBzKSB7XHJcbiAgICAgICAgICAgIHN0ZXBPbkFmdGVyQWN0aXZhdGU9dGhpc1snaW5pdFZpZXcnK3N0ZXBOYW1lLmNhcGl0YWxpemUoKV07XHJcbiAgICAgICAgICAgIGxldCBpdGVtPXt9O1xyXG4gICAgICAgICAgICBpdGVtWydvbkFmdGVyQWN0aXZhdGUnXT1zdGVwT25BZnRlckFjdGl2YXRlO1xyXG4gICAgICAgICAgICBzdGVwQXV0b0NhbGxiYWNrW3N0ZXBOYW1lXT1pdGVtO1xyXG4gICAgICAgIH1cclxuICAgICAgICBkZWJ1ZyhzdGVwQXV0b0NhbGxiYWNrKTtcclxuICAgICAgICBkZWJ1ZyhPcmRlci5nZXREYXRhKClbJ2lkJ10pO1xyXG4gICAgICAgIGlmKE9yZGVyLmdldERhdGEoKVsnaWQnXT4wKXtcclxuICAgICAgICAgICAgZGVidWcoJ2hhanJhJyk7XHJcbiAgICAgICAgICAgIGRlYnVnKE9yZGVyLmdldERhdGEoKSk7XHJcbiAgICAgICAgICAgIGlmKE9yZGVyLmdldERhdGEoKVsnZGVsaXZlcnlEYXRlJ10pe1xyXG4gICAgICAgICAgICAgICAgcm9vdC5zZXREZWxpdmVyeURhdGUoT3JkZXIuZ2V0RGF0YSgpWydkZWxpdmVyeURhdGUnXSk7XHJcbiAgICAgICAgICAgICAgICAvKlxyXG4gICAgICAgICAgICAgICAgQHRvZG86IHdlZWtseS10IGJlYWxsaXRhbmlcclxuICAgICAgICAgICAgICAgICAqL1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmKE9yZGVyLmdldERhdGEoKVsnc3VwcGxpZXJOYW1lJ10pe1xyXG4gICAgICAgICAgICAgICAgcm9vdC5zZXRTdXBwbGllcihPcmRlci5nZXREYXRhKClbJ3N1cHBsaWVyTmFtZSddKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBzdGVwVXJsRGF0YT17J3N1cHBsaWVySWQnOk9yZGVyLnN1cHBsaWVySWQsaWQ6T3JkZXIuaWR9O1xyXG4gICAgICAgICAgICBmb3IgKGxldCBzdGVwTmFtZSBvZiBhdmFsYWlibGVTdGVwcykge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coc3RlcE5hbWUpO1xyXG4gICAgICAgICAgICAgICAgc3RlcENvbXBsZXRlLnB1c2goc3RlcE5hbWUpO1xyXG4gICAgICAgICAgICAgICAgc3RlcEVuYWJsZS5wdXNoKHN0ZXBOYW1lKTtcclxuICAgICAgICAgICAgICAgIGlmKE9yZGVyLmdldERhdGEoKVsnb3JkZXJTdGF0dXMnXT09c3RlcE5hbWUpe1xyXG4gICAgICAgICAgICAgICAgICAgIHN0ZXBBY3RpdmU9c3RlcE5hbWU7XHJcbiAgICAgICAgICAgICAgICAgICAgLypcclxuICAgICAgICAgICAgICAgICAgICBkZWJ1ZygnaW5pdFZpZXcnK3N0ZXBOYW1lLmNhcGl0YWxpemUoKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYoc3RlcE5hbWUhPT0naW52b2ljZScgJiYgc3RlcE5hbWUhPT0nc2VuZCcpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGVwT25BZnRlckFjdGl2YXRlPXRoaXNbJ2luaXRWaWV3JytzdGVwTmFtZS5jYXBpdGFsaXplKCldO1xyXG4gICAgICAgICAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGVwT25BZnRlckFjdGl2YXRlPWZ1bmN0aW9uICgpe307XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICovXHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbi8qXHJcbiAgICAgICAgICAgIC8vcmVmYWN0b3JlZCBmb3IgbG9vcFxyXG4gICAgICAgICAgICB2YXIgQnJlYWtFeGNlcHRpb24gPSB7fTtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIGF2YWxhaWJsZVN0ZXBzLmZvckVhY2goZnVuY3Rpb24oc3RlcE5hbWUpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhzdGVwTmFtZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgc3RlcENvbXBsZXRlLnB1c2goc3RlcE5hbWUpO1xyXG4gICAgICAgICAgICAgICAgICAgIHN0ZXBFbmFibGUucHVzaChzdGVwTmFtZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYoT3JkZXIuZ2V0RGF0YSgpWydvcmRlclN0YXR1cyddPT1zdGVwTmFtZSl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0ZXBBY3RpdmU9c3RlcE5hbWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IEJyZWFrRXhjZXB0aW9uO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGUgIT09IEJyZWFrRXhjZXB0aW9uKSB0aHJvdyBlO1xyXG4gICAgICAgICAgICB9Ki9cclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByb290LlN0ZXBwZXIuaW5pdCh7XHJcbiAgICAgICAgICAgIGNvbXBsZXRlOnN0ZXBDb21wbGV0ZSxcclxuICAgICAgICAgICAgZW5hYmxlOnN0ZXBFbmFibGUsXHJcbiAgICAgICAgICAgIGxvYWRlZDpbXSxcclxuICAgICAgICAgICAgYWN0aXZlOiBzdGVwQWN0aXZlLFxyXG4gICAgICAgICAgICBVUkw6IHtcclxuICAgICAgICAgICAgICAgIGNyZWF0ZTogT3B0cy5VUkwuY3JlYXRlLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBVcmxEYXRhOnN0ZXBVcmxEYXRhLFxyXG4gICAgICAgICAgICBvbkFmdGVyQWN0aXZhdGU6c3RlcE9uQWZ0ZXJBY3RpdmF0ZSxcclxuICAgICAgICAgICAgYXV0b0NhbGxiYWNrOiBzdGVwQXV0b0NhbGxiYWNrLFxyXG4gICAgICAgICAgICAvKntcclxuICAgICAgICAgICAgICAgIGludm9pY2U6IHtcclxuICAgICAgICAgICAgICAgICAgICBvbkFmdGVyQWN0aXZhdGU6cm9vdC5pbml0Vmlld0ludm9pY2VcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBzZW5kOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgb25BZnRlckFjdGl2YXRlOnJvb3QuaW5pdFZpZXdTZW5kXHJcbiAgICAgICAgICAgICAgICB9LFxyXG5cclxuICAgICAgICAgICAgfSovXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5pbml0T3JkZXI9ZnVuY3Rpb24gKGRhdGEpe1xyXG4gICAgICAgIE9yZGVyPW5ldyBEYXRhTW9kZWxPcmRlcihkYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmluaXQgPSBmdW5jdGlvbiAob3B0aW9ucykge1xyXG4gICAgICAgIGRlYnVnKCdPcmRlck1vZHVsIGluaXQgY2FsbGVkJyk7XHJcbiAgICAgICAgJC5leHRlbmQoT3B0cywgd2luZG93Lk9yZGVyTW9kdWxEZWZhdWx0LCBvcHRpb25zKTtcclxuICAgICAgICBPcmRlcj1uZXcgRGF0YU1vZGVsT3JkZXIoKTtcclxuICAgICAgICBpZihPcHRzLm5lZWRTdGVwcGVyKXtcclxuICAgICAgICAgICAgaWYgKHR5cGVvZiB0aGlzLlN0ZXBwZXIgPT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuU3RlcHBlcj1uZXcgU3RlcHBlcigpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmKE9wdHMudGVzdE1vZGUpe1xyXG4gICAgICAgICAgICByZXR1cm4gcm9vdC50ZXN0TW9kZSgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnNldFN1cHBsaWVyPWZ1bmN0aW9uIChzdXBwbGllck5hbWUsc3VwcGxpZXJJZCl7XHJcbiAgICAgICBpZihzdXBwbGllck5hbWUpe1xyXG4gICAgICAgICAgICQoJy5zdXBwbGllck5hbWVQbGFjZScpLnRleHQoc3VwcGxpZXJOYW1lKTtcclxuICAgICAgIH1cclxuICAgICAgIGlmKHN1cHBsaWVySWQpe1xyXG4gICAgICAgICAgIE9yZGVyLnNldERhdGEoe3N1cHBsaWVySWQ6c3VwcGxpZXJJZH0pO1xyXG4gICAgICAgICAgIHJvb3QuU3RlcHBlci5zZXRPcHRzKHsnVXJsRGF0YSc6eydzdXBwbGllcklkJzpzdXBwbGllcklkfX0pO1xyXG4gICAgICAgfVxyXG4gICAgfVxyXG4gICAgdGhpcy5zZXREZWxpdmVyeURhdGU9ZnVuY3Rpb24gKGRhdGVUZXh0LGRhdGVUZXh0VG8pe1xyXG4gICAgICAgIGxldCBkYXRlVGV4dEh1bWFuPWRhdGVUZXh0LnJlcGxhY2VBbGwoJy0nLCcuJykrJy4nO1xyXG4gICAgICAgIGlmKGRhdGVUZXh0SHVtYW4ubGVuZ3RoPDUpe1xyXG4gICAgICAgICAgICAkKCcuZGVsaXZlcnlEYXRlUGxhY2UnKS50ZXh0KGRhdGVUZXh0KTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZihkYXRlVGV4dFRvKXtcclxuICAgICAgICAgICAgZGF0ZVRleHRIdW1hbis9JyAtICcrZGF0ZVRleHRUby5yZXBsYWNlQWxsKCctJywnLicpKycuJztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgICQoT3B0cy5DU1NTZWxlY3RvckZvcm0rJyAuc2VsZWN0ZWREYXRlVGV4dCcpLnRleHQoZGF0ZVRleHRIdW1hbik7XHJcbiAgICAgICAgJCgnLmRlbGl2ZXJ5RGF0ZVBsYWNlJykudGV4dChkYXRlVGV4dEh1bWFuKTtcclxuICAgICAgICAkKE9wdHMuQ1NTU2VsZWN0b3JGb3JtKycgaW5wdXRbbmFtZT1cImRlbGl2ZXJ5RGF0ZVwiXScpLnZhbChkYXRlVGV4dCk7XHJcbiAgICB9XHJcblxyXG5cclxuXHJcbiAgICB0aGlzLmdldERhdGE9ZnVuY3Rpb24gKCl7XHJcbiAgICAgICAgcmV0dXJuIE9yZGVyO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICB0aGlzLnNldFN1cHBsaWVyQ29tcGxldGVkPWZ1bmN0aW9uICgpIHtcclxuICAgICAgICBjb25zb2xlLmxvZygnYmluZ28nKTtcclxuICAgICAgICByb290LmluaXRWaWV3UGFyYW1ldGVyKClcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmFmdGVyT3JkZXJTZXRTdXBwbGllck9rPWZ1bmN0aW9uIChkYXRhKSB7XHJcbiAgICAgICAgVG9hc3QuY3JlYXRlKHsgdGl0bGU6IFwiU3VwcGxpZXIgc2VsZWN0ZWQgIVwiLCBtZXNzYWdlOiBkYXRhLnN1cHBsaWVyLm5hbWUgLCBzdGF0dXM6IFRPQVNUX1NUQVRVUy5JTkZPLCB0aW1lb3V0OiA1MDAwIH0pO1xyXG4gICAgICAgIHJvb3Quc2V0U3VwcGxpZXIoZGF0YS5zdXBwbGllci5uYW1lLGRhdGEuc3VwcGxpZXIuaWQpO1xyXG4gICAgICAgIE9yZGVyLnNldERhdGEoe2lkOmRhdGEuaWR9KTtcclxuICAgICAgICByb290LlN0ZXBwZXIuc2V0T3B0cyh7J1VybERhdGEnOnsnc3VwcGxpZXJJZCc6T3JkZXIuc3VwcGxpZXJJZCxpZDpPcmRlci5pZH19KTtcclxuICAgICAgICAvL3Jvb3QuU3RlcHBlci5zZXRPcHRzKHtvbkFmdGVyTG9hZDpyb290LnNldFN1cHBsaWVyQ29tcGxldGVkfSlcclxuICAgICAgICByb290LlN0ZXBwZXIuc2V0RW5hYmxlZCgncGFyYW1ldGVyJyk7XHJcbiAgICAgICAgcm9vdC5TdGVwcGVyLmFkZENvbXBsZXRlZCgncGFyYW1ldGVyJyk7XHJcbiAgICAgICAgcm9vdC5TdGVwcGVyLnNldENvbXBsZXRlZCgncGFyYW1ldGVyJyk7XHJcbiAgICAgICAgcm9vdC5TdGVwcGVyLnNldEFjdGl2ZSgncGFyYW1ldGVyJyk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIHRoaXMuaW5pdFZpZXdTdXBwbGllcj1mdW5jdGlvbiAoKXtcclxuICAgICAgICBkZWJ1ZygnY2FsbCBpbml0Vmlld1N1cHBsaWVyJyk7XHJcbiAgICAgICAgcm9vdC5TdGVwcGVyLnNldE9wdHMoe29uQWZ0ZXJMb2FkOmZ1bmN0aW9uICgpe319KTtcclxuICAgICAgICAkKCcuc3VwcGxpZXJJdGVtJykub2ZmKCdjbGljaycpO1xyXG4gICAgICAgICQoJy5zdXBwbGllckl0ZW0nKS5vbignY2xpY2snLGZ1bmN0aW9uKGV2ZW50KXtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coT3JkZXIuZ2V0RGF0YSgpKTtcclxuXHJcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgIGxldCBzdXBwbGllcklkPSQoZXZlbnQuY3VycmVudFRhcmdldCkuZGF0YSgnaWQnKTtcclxuICAgICAgICAgICAgbGV0IHN1cHBsaWVyTmFtZT0kKGV2ZW50LmN1cnJlbnRUYXJnZXQpLmZpbmQoJ2g1LmNhcmQtdGl0bGUnKS50ZXh0KCk7XHJcbiAgICAgICAgICAgIGlmKHR5cGVvZiBPcmRlci5zdXBwbGllcklkPT0ndW5kZWZpbmVkJyl7XHJcbiAgICAgICAgICAgICAgICAvL25ldyBvcmRlclxyXG5cclxuICAgICAgICAgICAgICAgIGxldCBhamF4RGF0YT17fTtcclxuICAgICAgICAgICAgICAgIGFqYXhEYXRhLl90b2tlbj1PcHRzLnRva2VuO1xyXG4gICAgICAgICAgICAgICAgYWpheERhdGEuc3VwcGxpZXJJZD1zdXBwbGllcklkO1xyXG4gICAgICAgICAgICAgICAgYWpheERhdGEuc3RvcmVUeXBlPSdzdXBwbGllclNlbGVjdCc7XHJcbiAgICAgICAgICAgICAgICAkLmV4dGVuZChhamF4RGF0YSxPcmRlcik7XHJcbiAgICAgICAgICAgICAgICAkLmFqYXgoe1xyXG4gICAgICAgICAgICAgICAgICAgIHVybDogT3B0cy5VUkwuc3RvcmUsXHJcbiAgICAgICAgICAgICAgICAgICAgbWV0aG9kOidQT1NUJyxcclxuICAgICAgICAgICAgICAgICAgICBkYXRhOmFqYXhEYXRhLFxyXG4gICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3M6ZnVuY3Rpb24gKGRhdGEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYoZGF0YS5zdWNjZXNzKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvb3QuYWZ0ZXJPcmRlclNldFN1cHBsaWVyT2soZGF0YS5kYXRhKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgLy9PcmRlci5zZXREYXRhKHtzdXBwbGllcklkOnN1cHBsaWVySWR9KTtcclxuICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICAvL2lkZSBrZWxsZW5lIGVneSBqbyBraXMga2VyZGVzXHJcbiAgICAgICAgICAgICAgICBpZihPcmRlci5zdXBwbGllcklkIT1zdXBwbGllcklkKXtcclxuICAgICAgICAgICAgICAgICAgICBUb2FzdC5jcmVhdGUoeyB0aXRsZTogXCJTdXBwbGllciBjaGFuZ2UgdG8hXCIsIG1lc3NhZ2U6IHN1cHBsaWVyTmFtZSwgc3RhdHVzOiBUT0FTVF9TVEFUVVMuV0FSTklORywgdGltZW91dDogNTAwMCB9KTtcclxuICAgICAgICAgICAgICAgICAgICByb290LlN0ZXBwZXIuY2xlYXJMb2FkZWQoKTtcclxuICAgICAgICAgICAgICAgICAgICBPcmRlcj1uZXcgRGF0YU1vZGVsT3JkZXIoKTtcclxuICAgICAgICAgICAgICAgICAgICAvL09yZGVyLnNldERhdGEoe3N1cHBsaWVySWQ6c3VwcGxpZXJJZH0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCctLS0tLS0tLS0tLScpO1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhyb290LlN0ZXBwZXIuZ2V0T3B0cygpKTtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coJy0tLS0tLS0tLS0tJyk7XHJcblxyXG4gICAgICAgICAgICAvLyQoJy5zdXBwbGllck5hbWVQbGFjZScpLnRleHQoc3VwcGxpZXJOYW1lKTtcclxuICAgICAgICAgICAgcm9vdC5zZXRTdXBwbGllcihzdXBwbGllck5hbWUsc3VwcGxpZXJJZCk7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKHN1cHBsaWVyTmFtZSlcclxuICAgICAgICAgICAgLy9AdG9kbzppZGUga2VsbCBlZ3kgbWVudGVzIVxyXG4gICAgICAgICAgICAvL0B0b2RvOm1lbnRlcyBlcmVkZW1lbnlla2VwcGVuIGxlaGV0IHZhbHRhbmlcclxuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgcm9vdC5TdGVwcGVyLnNldE9wdHMoe29uQWZ0ZXJMb2FkOnJvb3Quc2V0U3VwcGxpZXJDb21wbGV0ZWR9KVxyXG4gICAgICAgICAgICByb290LlN0ZXBwZXIuc2V0RW5hYmxlZCgncGFyYW1ldGVyJyk7XHJcbiAgICAgICAgICAgIHJvb3QuU3RlcHBlci5hZGRDb21wbGV0ZWQoJ3BhcmFtZXRlcicpO1xyXG4gICAgICAgICAgICByb290LlN0ZXBwZXIuc2V0Q29tcGxldGVkKCdwYXJhbWV0ZXInKTtcclxuICAgICAgICAgICAgcm9vdC5TdGVwcGVyLnNldEFjdGl2ZSgncGFyYW1ldGVyJyk7XHJcblxyXG5cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmNoZWNrQ29udGFjdE5hbWVGaWVsZD1mdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgbGV0IENTU1NlbGVjdG9yRm9ybT0nLm9yZGVyUGFyYW1ldGVyRm9ybSc7XHJcbiAgICAgICAgbGV0IG5vZGU9JChDU1NTZWxlY3RvckZvcm0rJyBpbnB1dFtuYW1lPWNvbnRhY3ROYW1lXScpO1xyXG4gICAgICAgIGlmKG5vZGUudmFsKCkubGVuZ3RoPDIpe1xyXG4gICAgICAgICAgICBub2RlLnJlbW92ZUNsYXNzKCdpcy12YWxpZCcpO1xyXG4gICAgICAgICAgICBub2RlLmFkZENsYXNzKCdpcy1pbnZhbGlkJyk7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgbm9kZS5hZGRDbGFzcygnaXMtdmFsaWQnKTtcclxuICAgICAgICAgICAgbm9kZS5yZW1vdmVDbGFzcygnaXMtaW52YWxpZCcpO1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG5cclxuXHJcbiAgICB0aGlzLnNlbmRPcmRlckRhdGFUb1NlcnZlcj1mdW5jdGlvbiAodXBkYXRlVHlwZSxjYWxsYmFjayxlcnJvckNhbGxiYWNrKSB7XHJcbiAgICAgICAgbGV0IGFqYXhEYXRhPSB7fTtcclxuICAgICAgICBsZXQgYWpheFVybD1PcHRzLlVSTC5zdG9yZTtcclxuICAgICAgICBsZXQgYWpheE1ldGhvZD1cIlBPU1RcIjtcclxuICAgICAgICBpZihPcmRlci5pZCl7XHJcbiAgICAgICAgICAgIGFqYXhVcmw9T3B0cy5VUkwudXBkYXRlLnJlcGxhY2UoJyVpZCUnLE9yZGVyLmlkKTtcclxuICAgICAgICAgICAgLy9hamF4TWV0aG9kPVwiUFVUXCI7XHJcbiAgICAgICAgICAgIC8vYWpheERhdGE9bmV3IEZvcm1EYXRhKCQoQ1NTU2VsZWN0b3JGb3JtKVswXSk7XHJcbiAgICAgICAgICAgIGFqYXhEYXRhLl9tZXRob2Q9J1BVVCc7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGFqYXhEYXRhLl90b2tlbj1PcHRzLnRva2VuO1xyXG4gICAgICAgIGFqYXhEYXRhLnVwZGF0ZVR5cGU9dXBkYXRlVHlwZTtcclxuICAgICAgICAkLmV4dGVuZChhamF4RGF0YSxPcmRlcik7XHJcbiAgICAgICAgZGVidWcoT3JkZXIpO1xyXG4gICAgICAgIGRlYnVnKGFqYXhEYXRhKTtcclxuICAgICAgICBkZWJ1ZygnYWpheFVybDonK2FqYXhVcmwpO1xyXG4gICAgICAgIGFqYXhEYXRhPWpzb25Ub0Zvcm1EYXRhKGFqYXhEYXRhKTtcclxuICAgICAgICAkLmFqYXgoe1xyXG4gICAgICAgICAgICB1cmw6YWpheFVybCxcclxuICAgICAgICAgICAgZGF0YTphamF4RGF0YSxcclxuICAgICAgICAgICAgdHlwZTphamF4TWV0aG9kLFxyXG4gICAgICAgICAgICBjb250ZW50VHlwZTpmYWxzZSxcclxuICAgICAgICAgICAgcHJvY2Vzc0RhdGE6IGZhbHNlLFxyXG4gICAgICAgICAgICBzdWNjZXNzOmZ1bmN0aW9uIChkYXRhKSB7XHJcbiAgICAgICAgICAgICAgICBkZWJ1ZygnYWpheCByZXR1cm5lZCBkYXRhJyk7XHJcbiAgICAgICAgICAgICAgICBkZWJ1ZyhkYXRhKTtcclxuICAgICAgICAgICAgICAgIGlmKGRhdGEuc3VjY2Vzcyl7XHJcbiAgICAgICAgICAgICAgICAgICAgLy9yb290LmFmdGVyT3JkZXJTZXRTdXBwbGllck9rKGRhdGEuZGF0YSk7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZGF0YSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGVycm9yOiBmdW5jdGlvbiAoeGhyLCBhamF4T3B0aW9ucywgdGhyb3duRXJyb3IpIHtcclxuICAgICAgICAgICAgICAgIGFqYXhFcnJvckhhbmRsZXIoeGhyLCBhamF4T3B0aW9ucywgdGhyb3duRXJyb3IpO1xyXG4gICAgICAgICAgICAgICAgaWYodHlwZW9mIGVycm9yQ2FsbGJhY2shPSd1bmRlZmluZWQnKXtcclxuICAgICAgICAgICAgICAgICAgICBlcnJvckNhbGxiYWNrKHhoci5yZXNwb25zZUpTT04pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9LFxyXG5cclxuICAgICAgICB9KTtcclxuXHJcbiAgICB9XHJcbiAgICB0aGlzLmFmdGVyT3JkZXJTZXRQYXJhbWV0ZXJPaz1mdW5jdGlvbiAoZGF0YSkge1xyXG4gICAgICAgIGRlYnVnKCdjYWxsZWQgYWZ0ZXJPcmRlclNldFBhcmFtZXRlck9rJyk7XHJcbiAgICAgICAgcm9vdC5TdGVwcGVyLnNldE9wdHMoeydVcmxEYXRhJzp7J3N1cHBsaWVySWQnOk9yZGVyLnN1cHBsaWVySWQsJ2lkJzpPcmRlci5pZH19KTtcclxuICAgICAgICAvL3Jvb3QuU3RlcHBlci5zZXRPcHRzKHtvbkFmdGVyTG9hZDpyb290LnNldFBhcmFtZXRlckNvbXBsZXRlZH0pXHJcbiAgICAgICAgcm9vdC5TdGVwcGVyLnNldEVuYWJsZWQoJ3Byb2R1Y3RTZWxlY3QnKTtcclxuICAgICAgICByb290LlN0ZXBwZXIuYWRkQ29tcGxldGVkKCdwcm9kdWN0U2VsZWN0Jyk7XHJcbiAgICAgICAgcm9vdC5TdGVwcGVyLnNldENvbXBsZXRlZCgncHJvZHVjdFNlbGVjdCcpO1xyXG4gICAgICAgIHJvb3QuU3RlcHBlci5zZXRBY3RpdmUoJ3Byb2R1Y3RTZWxlY3QnKTtcclxuICAgIH1cclxuICAgIHRoaXMuc2VsZWN0Q3VycmVudFdlZWsgPSBmdW5jdGlvbigpIHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKCdzZWxlY3RDdXJyZW50V2VlaycpO1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJCgnLnVpLWRhdGVwaWNrZXInKS5maW5kKCcudWktZGF0ZXBpY2tlci1jdXJyZW50LWRheSBhJykpO1xyXG4gICAgICAgICQoJy51aS1kYXRlcGlja2VyJykuZmluZCgnLnVpLWRhdGVwaWNrZXItY3VycmVudC1zZWxlY3RlZC13ZWVrZGF5IGEnKS5hZGRDbGFzcygndWktc3RhdGUtYWN0aXZlJylcclxuICAgIH1cclxuICAgIHRoaXMud2Vla0hvdmVyID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcignaG92ZXIgQWN0aXZlJyk7XHJcbiAgICAgICAgJCgnLnVpLWRhdGVwaWNrZXItY2FsZW5kYXIgdHInKS5vZmYoJ21vdXNlbW92ZScpO1xyXG4gICAgICAgICQoJy51aS1kYXRlcGlja2VyLWNhbGVuZGFyIHRyJykub2ZmKCdtb3VzZWxlYXZlJyk7XHJcblxyXG4gICAgICAgICQoJy51aS1kYXRlcGlja2VyLWNhbGVuZGFyIHRyJykub24oJ21vdXNlbW92ZScsIGZ1bmN0aW9uKCkgeyAkKHRoaXMpLmZpbmQoJ3RkIGEnKS5hZGRDbGFzcygndWktc3RhdGUtaG92ZXInKTsgfSk7XHJcbiAgICAgICAgJCgnLnVpLWRhdGVwaWNrZXItY2FsZW5kYXIgdHInKS5vbignbW91c2VsZWF2ZScsIGZ1bmN0aW9uKCkgeyAkKHRoaXMpLmZpbmQoJ3RkIGEnKS5yZW1vdmVDbGFzcygndWktc3RhdGUtaG92ZXInKTsgfSk7XHJcblxyXG4gICAgfVxyXG4gICAgdGhpcy53ZWVrSG92ZXJTbG93ID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcignd2Vla0hvdmVyU2xvdycpO1xyXG4gICAgICAgIGlmKCQoJy51aS1kYXRlcGlja2VyLWNhbGVuZGFyIHRyJykubGVuZ3RoPDEpe1xyXG4gICAgICAgICAgICBzZXRUaW1lb3V0KHJvb3Qud2Vla0hvdmVyU2xvdywgMSk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgcm9vdC53ZWVrSG92ZXIoKTtcclxuICAgIH1cclxuICAgIHRoaXMuaW5pdERhdGVQaWNrZXI9ZnVuY3Rpb24gKHR5cGUpIHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKCdhc2Rhc2RhZGFkJyk7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ3RpcHVzJyArIHR5cGUpO1xyXG4gICAgICAgIGxldCBDU1NTZWxlY3RvckZvcm0gPSAnLm9yZGVyUGFyYW1ldGVyRm9ybSc7XHJcbiAgICAgICAgbGV0IHN0YXJ0RGF0ZT1uZXcgRGF0ZSgnMTkwMC0wMS0wMScpO1xyXG4gICAgICAgIGxldCBlbmREYXRlPW5ldyBEYXRlKCcxOTAwLTAxLTAyJyk7XHJcblxyXG4gICAgICAgICQoQ1NTU2VsZWN0b3JGb3JtICsgJyAuZGF0ZVBpY2tlcicpLmRhdGVwaWNrZXIoXCJkZXN0cm95XCIpO1xyXG5cclxuICAgICAgICBpZiAodHlwZSA9PSAnd2Vla2x5Jykge1xyXG4gICAgICAgICAgICAkKENTU1NlbGVjdG9yRm9ybSArICcgLmRhdGVQaWNrZXInKS5kYXRlcGlja2VyKHtcclxuICAgICAgICAgICAgICAgIHNob3dPdGhlck1vbnRoczogdHJ1ZSxcclxuICAgICAgICAgICAgICAgIHNlbGVjdE90aGVyTW9udGhzOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgc2hvd1dlZWs6IHRydWUsXHJcbiAgICAgICAgICAgICAgICBkYXRlRm9ybWF0OiAneXktbW0tZGQnLFxyXG4gICAgICAgICAgICAgICAgZmlyc3REYXk6IDEsXHJcbiAgICAgICAgICAgICAgICBtaW5EYXRlOiBuZXcgRGF0ZSgpLFxyXG4gICAgICAgICAgICAgICAgYWZ0ZXJTaG93OiBmdW5jdGlvbiAoZGF0ZVRleHQsIGluc3QpIHtcclxuICAgICAgICAgICAgICAgICAgcm9vdC53ZWVrSG92ZXIoKTtcclxuICAgICAgICAgICAgICAgICAgcm9vdC5zZWxlY3RDdXJyZW50V2VlaygpO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIG9uU2VsZWN0OiBmdW5jdGlvbiAoZGF0ZVRleHQsIGluc3QpIHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgZGF0ZSA9ICQodGhpcykuZGF0ZXBpY2tlcignZ2V0RGF0ZScpO1xyXG4gICAgICAgICAgICAgICAgICAgIHN0YXJ0RGF0ZSA9IG5ldyBnZXRNb25kYXkoZGF0ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgZW5kRGF0ZSA9IG5ldyBEYXRlKGRhdGUuZ2V0RnVsbFllYXIoKSwgZGF0ZS5nZXRNb250aCgpLCBkYXRlLmdldERhdGUoKSAtIGRhdGUuZ2V0RGF5KCkgKyA3KTtcclxuICAgICAgICAgICAgICAgICAgICByb290LnNldERlbGl2ZXJ5RGF0ZSgkLmRhdGVwaWNrZXIuZm9ybWF0RGF0ZSggJ3l5LW1tLWRkJyxzdGFydERhdGUpLCQuZGF0ZXBpY2tlci5mb3JtYXREYXRlKCAneXktbW0tZGQnLGVuZERhdGUpKVxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIGJlZm9yZVNob3c6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmdyb3VwKCdiZWZvcmVTaG93JylcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhzdGFydERhdGUpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGVuZERhdGUpO1xyXG4gICAgICAgICAgICAgICAgICAgIC8vcm9vdC53ZWVrSG92ZXJTbG93KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5ncm91cEVuZCgpO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIGJlZm9yZVNob3dEYXk6IGZ1bmN0aW9uKGRhdGUpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmdyb3VwKCdiZWZvcmVTaG93RGF5Jyk7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coZGF0ZS50b0xvY2FsZURhdGVTdHJpbmcoJ2h1LUh1JykpO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBjc3NDbGFzcyA9ICcnO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmKGRhdGUgPj0gc3RhcnREYXRlICYmIGRhdGUgPD0gZW5kRGF0ZSl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZGF0ZS50b0xvY2FsZURhdGVTdHJpbmcoJ2h1LUh1JykpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjc3NDbGFzcyA9ICd1aS1kYXRlcGlja2VyLWN1cnJlbnQtc2VsZWN0ZWQtd2Vla2RheSc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vY3NzQ2xhc3MgPSAndWktc3RhdGUtYWN0aXZlJztcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coY3NzQ2xhc3MpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZ3JvdXBFbmQoKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFt0cnVlLCBjc3NDbGFzc107XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgb25DaGFuZ2VNb250aFllYXI6IGZ1bmN0aW9uKHllYXIsIG1vbnRoLCBpbnN0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy9yb290LnNlbGVjdEN1cnJlbnRXZWVrKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAkKENTU1NlbGVjdG9yRm9ybSArICcgLmRhdGVQaWNrZXInKS5kYXRlcGlja2VyKHtcclxuICAgICAgICAgICAgICAgIGRhdGVGb3JtYXQ6ICd5eS1tbS1kZCcsXHJcbiAgICAgICAgICAgICAgICBtaW5EYXRlOiBuZXcgRGF0ZSgpLFxyXG4gICAgICAgICAgICAgICAgb25TZWxlY3Q6IGZ1bmN0aW9uIChkYXRlVGV4dCkge1xyXG4gICAgICAgICAgICAgICAgICAgICQoQ1NTU2VsZWN0b3JGb3JtICsgJyAuc2VsZWN0ZWREYXRlVGV4dCcpLnRleHQoZGF0ZVRleHQpO1xyXG4gICAgICAgICAgICAgICAgICAgICQoJy5kZWxpdmVyeURhdGVQbGFjZScpLnRleHQoZGF0ZVRleHQucmVwbGFjZUFsbCgnLScsICcuJykgKyAnLicpO1xyXG4gICAgICAgICAgICAgICAgICAgICQoQ1NTU2VsZWN0b3JGb3JtICsgJyBpbnB1dFtuYW1lPVwiZGVsaXZlcnlEYXRlXCJdJykudmFsKGRhdGVUZXh0KTtcclxuXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgdGhpcy5jYWxsQ2hhbmdlT3JkZXJUeXBlPWZ1bmN0aW9uKCl7XHJcbiAgICAgICAgY29uc29sZS5sb2codGhpcyk7XHJcbiAgICAgICAgY29uc29sZS5sb2codGhpcy52YWx1ZSk7XHJcbiAgICAgICAgcm9vdC5pbml0RGF0ZVBpY2tlcih0aGlzLnZhbHVlKTtcclxuICAgICAgICAvL2VudW0oJ2RhaWx5JywgJ3dlZWtseScpXHJcbiAgICAgICAgLypsZXQgQ1NTU2VsZWN0b3JGb3JtPScub3JkZXJQYXJhbWV0ZXJGb3JtJztcclxuICAgICAgICBsZXQgbm9kZT0kKENTU1NlbGVjdG9yRm9ybSsnIGlucHV0W25hbWU9Y29udGFjdE5hbWVdJyk7XHJcbiAgICAgICAgaWYobm9kZS52YWwoKS5sZW5ndGg8Mil7XHJcbiAgICAgICAgICAgIG5vZGUucmVtb3ZlQ2xhc3MoJ2lzLXZhbGlkJyk7XHJcbiAgICAgICAgICAgIG5vZGUuYWRkQ2xhc3MoJ2lzLWludmFsaWQnKTtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICBub2RlLmFkZENsYXNzKCdpcy12YWxpZCcpO1xyXG4gICAgICAgICAgICBub2RlLnJlbW92ZUNsYXNzKCdpcy1pbnZhbGlkJyk7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICAqL1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuaW5pdFZpZXdQYXJhbWV0ZXI9ZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGRlYnVnKCdjYWxsIGluaXRWaWV3UGFyYW1ldGVyJyk7XHJcbiAgICAgICAgcm9vdC5TdGVwcGVyLnNldE9wdHMoe29uQWZ0ZXJMb2FkOmZ1bmN0aW9uICgpe319KTtcclxuICAgICAgICBsZXQgQ1NTU2VsZWN0b3JGb3JtPScub3JkZXJQYXJhbWV0ZXJGb3JtJztcclxuICAgICAgICAkKENTU1NlbGVjdG9yRm9ybSsnIC5kYXRlUGlja2VyQ2xpY2snKS5jbGljayhmdW5jdGlvbigpe1xyXG4gICAgICAgICAgICAkKENTU1NlbGVjdG9yRm9ybSsnIC5kYXRlUGlja2VyJykuZGF0ZXBpY2tlcignc2hvdycpO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICAkKENTU1NlbGVjdG9yRm9ybSsnIC5vcmRlclBhcmFtZXRlckRlbGl2ZXJ5QWRkcmVzcycpLnNlbGVjdDIoe30pLnNob3coKTtcclxuICAgICAgICAkKENTU1NlbGVjdG9yRm9ybSsnIGlucHV0W25hbWU9Y29udGFjdE5hbWVdJykub2ZmKCdibHVyJyk7XHJcbiAgICAgICAgJChDU1NTZWxlY3RvckZvcm0rJyBpbnB1dFtuYW1lPWNvbnRhY3ROYW1lXScpLm9mZigna2V5dXAnKTtcclxuICAgICAgICAkKENTU1NlbGVjdG9yRm9ybSsnIGlucHV0W25hbWU9Y29udGFjdE5hbWVdJykub24oJ2JsdXInLHJvb3QuY2hlY2tDb250YWN0TmFtZUZpZWxkKTtcclxuICAgICAgICAkKENTU1NlbGVjdG9yRm9ybSsnIGlucHV0W25hbWU9Y29udGFjdE5hbWVdJykub24oJ2tleXVwJyxyb290LmNoZWNrQ29udGFjdE5hbWVGaWVsZCk7XHJcblxyXG4gICAgICAgICQoQ1NTU2VsZWN0b3JGb3JtKycgaW5wdXRbbmFtZT1vcmRlclR5cGVdJykub2ZmKCdjaGFuZ2UnKTtcclxuICAgICAgICAkKENTU1NlbGVjdG9yRm9ybSsnIGlucHV0W25hbWU9b3JkZXJUeXBlXScpLm9uKCdjaGFuZ2UnLHJvb3QuY2FsbENoYW5nZU9yZGVyVHlwZSk7XHJcblxyXG5cclxuICAgICAgICAkKENTU1NlbGVjdG9yRm9ybSsnIC5vcmRlclBhcmFtZXRlck5leHRCdXR0b24nKS5vZmYoJ2NsaWNrJyk7XHJcbiAgICAgICAgaWYoT3JkZXIuZ2V0RGF0YSgpWydpZCddPjApe1xyXG4gICAgICAgICAgICBpZihPcmRlci5nZXREYXRhKClbJ29yZGVyVHlwZSddPT0nd2Vla2x5Jyl7XHJcbiAgICAgICAgICAgICAgICByb290LmluaXREYXRlUGlja2VyKE9yZGVyLmdldERhdGEoKVsnb3JkZXJUeXBlJ10pO1xyXG4gICAgICAgICAgICAgICAgJChDU1NTZWxlY3RvckZvcm0rXCIgaW5wdXRbbmFtZT1vcmRlclR5cGVdW3ZhbHVlPVwiICsgT3JkZXIuZ2V0RGF0YSgpWydvcmRlclR5cGUnXSArIFwiXVwiKS5wcm9wKCdjaGVja2VkJywgdHJ1ZSk7XHJcblxyXG4gICAgICAgICAgICAgICAgY29uc3QgZW5kRGF0ZSA9IG5ldyBEYXRlKE9yZGVyLmdldERhdGEoKVsnZGVsaXZlcnlEYXRlJ10pO1xyXG4gICAgICAgICAgICAgICAgZW5kRGF0ZS5zZXREYXRlKGVuZERhdGUuZ2V0RGF0ZSgpICsgNik7XHJcbiAgICAgICAgICAgICAgICByb290LnNldERlbGl2ZXJ5RGF0ZShPcmRlci5nZXREYXRhKClbJ2RlbGl2ZXJ5RGF0ZSddLCQuZGF0ZXBpY2tlci5mb3JtYXREYXRlKCAneXktbW0tZGQnLGVuZERhdGUpKTtcclxuICAgICAgICAgICAgICAgIHJvb3QuaW5pdERhdGVQaWNrZXIoJ3dlZWtseScpO1xyXG4gICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgIGlmKE9yZGVyLmdldERhdGEoKVsnZGVsaXZlcnlEYXRlJ10pe1xyXG4gICAgICAgICAgICAgICAgICAgIHJvb3Quc2V0RGVsaXZlcnlEYXRlKE9yZGVyLmdldERhdGEoKVsnZGVsaXZlcnlEYXRlJ10pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcm9vdC5pbml0RGF0ZVBpY2tlcignZGFpbHknKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuXHJcblxyXG4gICAgICAgICAgICBpZihPcmRlci5nZXREYXRhKClbJ2NvbnRhY3ROYW1lJ10pe1xyXG4gICAgICAgICAgICAgICAgJChDU1NTZWxlY3RvckZvcm0rJyBpbnB1dFtuYW1lPWNvbnRhY3ROYW1lXScpLnZhbChPcmRlci5nZXREYXRhKClbJ2NvbnRhY3ROYW1lJ10pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmKE9yZGVyLmdldERhdGEoKVsnbm90ZSddKXtcclxuICAgICAgICAgICAgICAgICQoQ1NTU2VsZWN0b3JGb3JtKycgdGV4dGFyZWFbbmFtZT1ub3RlXScpLnZhbChPcmRlci5nZXREYXRhKClbJ25vdGUnXSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYoT3JkZXIuZ2V0RGF0YSgpWydkZWxpdmVyeUFkZHJlc3NJZCddKXtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCQoQ1NTU2VsZWN0b3JGb3JtKycgc2VsZWN0W25hbWU9ZGVsaXZlcnlBZGRyZXNzSWRdJykpO1xyXG4gICAgICAgICAgICAgICAgJChDU1NTZWxlY3RvckZvcm0rJyBzZWxlY3RbbmFtZT1kZWxpdmVyeUFkZHJlc3NJZF0nKS52YWwoT3JkZXIuZ2V0RGF0YSgpWydkZWxpdmVyeUFkZHJlc3NJZCddKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZihPcmRlci5nZXREYXRhKClbJ2N1c3RvbU5vdGlmaWNhdGlvbkVtYWlsJ10pe1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coJChDU1NTZWxlY3RvckZvcm0rJyBzZWxlY3RbbmFtZT1jdXN0b21Ob3RpZmljYXRpb25FbWFpbF0nKSk7XHJcbiAgICAgICAgICAgICAgICAkKENTU1NlbGVjdG9yRm9ybSsnIHNlbGVjdFtuYW1lPWN1c3RvbU5vdGlmaWNhdGlvbkVtYWlsXScpLnZhbChPcmRlci5nZXREYXRhKClbJ2N1c3RvbU5vdGlmaWNhdGlvbkVtYWlsJ10pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgIHJvb3QuaW5pdERhdGVQaWNrZXIoJ2RhaWx5Jyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAkKENTU1NlbGVjdG9yRm9ybSsnIC5vcmRlclBhcmFtZXRlckRlbGl2ZXJ5QWRkcmVzcycpLnNlbGVjdDIoe30pLnNob3coKTtcclxuICAgICAgICAkKENTU1NlbGVjdG9yRm9ybSsnIC5vcmRlclBhcmFtZXRlckN1c3RvbU5vdGlmaWNhdGlvbkVtYWlsJykuc2VsZWN0Mih7fSkuc2hvdygpO1xyXG5cclxuICAgICAgICAkKENTU1NlbGVjdG9yRm9ybSkuc3VibWl0KGZ1bmN0aW9uKGV2ZW50KXtcclxuXHJcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgIGlmICgkKENTU1NlbGVjdG9yRm9ybSlbMF0uY2hlY2tWYWxpZGl0eSgpID09PSBmYWxzZSkge1xyXG4gICAgICAgICAgICAgICAgZGVidWcoJ3ZhbGlkYXRvbiBmYWxzZScpO1xyXG4gICAgICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgIGRlYnVnKCd2YWxpZGF0b24gb2snKTtcclxuICAgICAgICAgICAgICAgIC8vZG8geW91ciBhamF4IHN1Ym1pdGlvbiBoZXJlXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgJCgnLmRlbGl2ZXJ5RGF0ZVBsYWNlJykudGV4dCgkKENTU1NlbGVjdG9yRm9ybSsnIGlucHV0W25hbWU9ZGVsaXZlcnlEYXRlXScpLnZhbCgpLnJlcGxhY2VBbGwoJy0nLCcuJykrJy4nKTtcclxuXHJcbiAgICAgICAgICAgIE9yZGVyLnNldERhdGEoe1xyXG4gICAgICAgICAgICAgICAgY29udGFjdE5hbWU6JChDU1NTZWxlY3RvckZvcm0rJyBpbnB1dFtuYW1lPWNvbnRhY3ROYW1lXScpLnZhbCgpLFxyXG4gICAgICAgICAgICAgICAgbm90ZTokKENTU1NlbGVjdG9yRm9ybSsnIHRleHRhcmVhW25hbWU9bm90ZV0nKS52YWwoKSxcclxuICAgICAgICAgICAgICAgIG9yZGVyVHlwZTokKENTU1NlbGVjdG9yRm9ybSsnIGlucHV0OmNoZWNrZWRbbmFtZT1vcmRlclR5cGVdJykudmFsKCksXHJcbiAgICAgICAgICAgICAgICBkZWxpdmVyeURhdGU6JChDU1NTZWxlY3RvckZvcm0rJyBpbnB1dFtuYW1lPWRlbGl2ZXJ5RGF0ZV0nKS52YWwoKSxcclxuICAgICAgICAgICAgICAgIGRlbGl2ZXJ5QWRkcmVzc0lkOiQoQ1NTU2VsZWN0b3JGb3JtKycgc2VsZWN0W25hbWU9ZGVsaXZlcnlBZGRyZXNzSWRdJykudmFsKCksXHJcbiAgICAgICAgICAgICAgICBkZWxpdmVyeUFkZHJlc3M6JChDU1NTZWxlY3RvckZvcm0rJyBzZWxlY3RbbmFtZT1kZWxpdmVyeUFkZHJlc3NdJykudmFsKCksXHJcbiAgICAgICAgICAgICAgICBjdXN0b21Ob3RpZmljYXRpb25FbWFpbDokKENTU1NlbGVjdG9yRm9ybSsnIHNlbGVjdFtuYW1lPWN1c3RvbU5vdGlmaWNhdGlvbkVtYWlsXScpLnZhbCgpLFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgY29uc29sZS5ncm91cCgncGFyYW1ldGVyIGZvcm0gc3VibWl0JylcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcigkKENTU1NlbGVjdG9yRm9ybSsnIGlucHV0OmNoZWNrZWRbbmFtZT1vcmRlclR5cGVdJykudmFsKCkpO1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCQoQ1NTU2VsZWN0b3JGb3JtKycgaW5wdXRbbmFtZT1kZWxpdmVyeURhdGVdJykudmFsKCkpO1xyXG4gICAgICAgICAgICBkZWJ1ZyhPcmRlci5nZXREYXRhKCkpO1xyXG4gICAgICAgICAgICBjb25zb2xlLmdyb3VwRW5kKCk7XHJcbiAgICAgICAgICAgIHJvb3Quc2VuZE9yZGVyRGF0YVRvU2VydmVyKCdwYXJhbWV0ZXInLHJvb3QuYWZ0ZXJPcmRlclNldFBhcmFtZXRlck9rKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICB9XHJcbiAgICB0aGlzLmJsYW5rPWZ1bmN0aW9uICgpe307XHJcbiAgICB0aGlzLnNldFBhcmFtZXRlckNvbXBsZXRlZD1mdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ3NldFBhcmFtZXRlckNvbXBsZXRlZCBjYWxsZWQnKTtcclxuICAgICAgICByb290LlN0ZXBwZXIuc2V0T3B0cyh7b25BZnRlckxvYWQ6ZnVuY3Rpb24gKCl7fX0pO1xyXG4gICAgICAgIC8vcm9vdC5pbml0Vmlld1Byb2R1Y3RTZWxlY3QoKVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuYmluZFJvd0Zhdm9yaXRlc0FjdGlvbiA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAkKCcuYnV0dG9uSXRlbUZhdm9yaXRlcycpLm9mZignY2xpY2snKTtcclxuICAgICAgICAkKCcuYnV0dG9uSXRlbUZhdm9yaXRlcycpLm9uKCdjbGljaycsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgbGV0IHByb2R1Y3RJZCA9ICQodGhpcykuZGF0YSgnaWQnKTtcclxuICAgICAgICAgICAgY29uc29sZS5sb2cocHJvZHVjdElkKTtcclxuXHJcbiAgICAgICAgICAgIGxldCBhamF4VXJsPU9wdHMuVVJMLnRvZ2dsZUZhdm9yaXRlcy5yZXBsYWNlKCclaWQlJyxwcm9kdWN0SWQpO1xyXG4gICAgICAgICAgICBsZXQgYWpheERhdGE9e307XHJcbiAgICAgICAgICAgIGFqYXhEYXRhLl90b2tlbj1PcHRzLnRva2VuO1xyXG4gICAgICAgICAgICBsZXQgYnV0dG9uPXRoaXM7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGFqYXhVcmwpO1xyXG4gICAgICAgICAgICAkLmFqYXgoe1xyXG4gICAgICAgICAgICAgICAgdXJsOiBhamF4VXJsLFxyXG4gICAgICAgICAgICAgICAgbWV0aG9kOidQT1NUJyxcclxuICAgICAgICAgICAgICAgIGRhdGE6YWpheERhdGEsXHJcbiAgICAgICAgICAgICAgICBzdWNjZXNzOmZ1bmN0aW9uIChyZXNwb25zZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmKHJlc3BvbnNlLnN1Y2Nlc3Mpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZihyZXNwb25zZS5zdGF0dXMpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ3RydWUnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoYnV0dG9uKS5hZGRDbGFzcygnYnRuLXdhcm5pbmcnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoYnV0dG9uKS5yZW1vdmVDbGFzcygnYnRuLWxpZ2h0Jyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJChidXR0b24pLnJlbW92ZUNsYXNzKCdidG4td2FybmluZycpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJChidXR0b24pLmFkZENsYXNzKCdidG4tbGlnaHQnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdmYWxzZScpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgLypcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKHRoaXMpLnRvZ2dsZUNsYXNzKCdidG4td2FybmluZycpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQodGhpcykudG9nZ2xlQ2xhc3MoJ2J0bi1saWdodCcpO1xyXG4gICAgICAgICAgICAqL1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuYmluZFJvd0Rlc2NyaXB0aW9uQWN0aW9uPWZ1bmN0aW9uICgpe1xyXG4gICAgICAgICQoJ3RleHRhcmVhLm9yZGVySXRlbUNvbW1lbnQnKS5vbignY2hhbmdlJyxmdW5jdGlvbiAoKXtcclxuICAgICAgICAgICAgbGV0IGNvbW1lbnQ9JCh0aGlzKS52YWwoKTtcclxuICAgICAgICAgICAgbGV0IHByb2R1Y3RJZD0kKHRoaXMpLmRhdGEoJ2lkJyk7XHJcbiAgICAgICAgICAgIGxldCBwcm9kdWN0Q29tbWVudD1PcmRlci5nZXREYXRhKCdwcm9kdWN0Q29tbWVudCcpO1xyXG4gICAgICAgICAgICBpZihwcm9kdWN0Q29tbWVudCE9PW51bGwpe1xyXG4gICAgICAgICAgICAgICAgaWYodHlwZW9mIHByb2R1Y3RDb21tZW50W3Byb2R1Y3RJZF09PSd1bmRlZmluZWQnICYmIGNvbW1lbnQubGVuZ3RoPT09MCl7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYocHJvZHVjdENvbW1lbnRbcHJvZHVjdElkXT09PWNvbW1lbnQpe1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBwcm9kdWN0Q29tbWVudFtwcm9kdWN0SWRdPWNvbW1lbnQ7XHJcbiAgICAgICAgICAgIGlmKGNvbW1lbnQubGVuZ3RoPT09MCl7XHJcbiAgICAgICAgICAgICAgICBkZWxldGUgT3JkZXIucHJvZHVjdENvbW1lbnRbcHJvZHVjdElkXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBPcmRlci5wcm9kdWN0Q29tbWVudD1wcm9kdWN0Q29tbWVudDtcclxuICAgICAgICAgICAgcXVldWVBamF4LnB1c2goRGF0ZS5ub3coKSk7XHJcbiAgICAgICAgICAgIHJvb3Quc3luY09yZGVyRGF0YVRvU2VydmVyKCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5wcm9kdWN0U2VsZWN0RGF0YXRhYmxlc1Jvd0Zvcm1hdHRlcj1mdW5jdGlvbiAoZCkge1xyXG4gICAgICAgIC8vIGBkYCBpcyB0aGUgb3JpZ2luYWwgZGF0YSBvYmplY3QgZm9yIHRoZSByb3dcclxuICAgICAgICAvKipcclxuICAgICAgICBAdG9kbzogZmVsc3plZG5pIGVzIHVwZGF0ZWxuaSBheiBhZG90dCB0ZXJtZWsgbWVtb2phdCBheiBvcmRlcmJhblxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGNvbnNvbGUuZ3JvdXAoJ3Byb2R1Y3RTZWxlY3REYXRhdGFibGVzUm93Rm9ybWF0dGVyJyk7XHJcbiAgICAgICAgY29uc29sZS5sb2coZCk7XHJcbiAgICAgICAgbGV0IHRlbXBsYXRlRGF0YT1kO1xyXG4gICAgICAgIHRlbXBsYXRlRGF0YS5jb21tZW50PScnO1xyXG4vLyAgICAgICAgZGVidWcoT3JkZXIpO1xyXG4gICAgICAgIGlmKE9yZGVyLnByb2R1Y3RDb21tZW50ICYmIE9yZGVyLnByb2R1Y3RDb21tZW50IT09bnVsbCl7XHJcbiAgICAgICAgICAgIGRlYnVnKHR5cGVvZiBPcmRlci5wcm9kdWN0Q29tbWVudFtkLmlkXSk7XHJcbiAgICAgICAgICAgIGlmKHR5cGVvZiBPcmRlci5wcm9kdWN0Q29tbWVudFtkLmlkXSE9J3VuZGVmaW5lZCcgJiYgT3JkZXIucHJvZHVjdENvbW1lbnRbZC5pZF0ubGVuZ3RoPjApe1xyXG4gICAgICAgICAgICAgICAgdGVtcGxhdGVEYXRhLmNvbW1lbnQ9T3JkZXIucHJvZHVjdENvbW1lbnRbZC5pZF07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgLyoqIEB0eXBlZGVmIHtib29sZWFufSBkLmZhdm9yaXRlcyAqL1xyXG4gICAgICAgIGlmKGQuZmF2b3JpdGVzPT09dHJ1ZSl7XHJcbiAgICAgICAgICAgIHRlbXBsYXRlRGF0YS5idG5GYXZvcml0ZXNDbGFzcz0nYnRuLXdhcm5pbmcnO1xyXG4gICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICB0ZW1wbGF0ZURhdGEuYnRuRmF2b3JpdGVzQ2xhc3M9J2J0bi1saWdodCc7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCB0ZW1wbGF0ZT0kKCd0ZW1wbGF0ZVtkYXRhLW5hbWU9XCJvcmRlclByb2R1Y3RTZWxlY3REZXRhaWxzXCJdJykuaHRtbCgpXHJcbiAgICAgICAgdGVtcGxhdGVEYXRhLndlZWtseT1mYWxzZTtcclxuICAgICAgICBpZihPcmRlci5nZXREYXRhKCkub3JkZXJUeXBlPT09J3dlZWtseScpe1xyXG4gICAgICAgICAgICB0ZW1wbGF0ZURhdGEud2Vla2x5PXRydWU7XHJcbi8qXHJcblxyXG4gICAgICAgICAgICB0ZW1wbGF0ZURhdGEud2Vla2x5RGF5PVtcclxuICAgICAgICAgICAgICAgIHtcImluZGV4XCI6MSxcIm5hbWVcIjpcIkjDqXRmxZFcIn0sXHJcbiAgICAgICAgICAgIHtcImluZGV4XCI6MixcIm5hbWVcIjpcIktlZGRcIn0sXHJcbiAgICAgICAgICAgIHtcImluZGV4XCI6MyxcIm5hbWVcIjpcIlN6ZXJkYVwifSxcclxuICAgICAgICAgICAge1wiaW5kZXhcIjo0LFwibmFtZVwiOlwiQ3PDvHTDtnJ0w7ZrXCJ9LFxyXG4gICAgICAgICAgICB7XCJpbmRleFwiOjUsXCJuYW1lXCI6XCJQw6ludGVrXCJ9LFxyXG4gICAgICAgICAgICB7XCJpbmRleFwiOjYsXCJuYW1lXCI6XCJTem9tYmF0XCJ9LFxyXG4gICAgICAgICAgICB7XCJpbmRleFwiOjcsXCJuYW1lXCI6XCJWYXPDoXJuYXBcIn0sXHJcbiAgICAgICAgICAgIF07XHJcblxyXG4gICAgICAgICAgICB0ZW1wbGF0ZURhdGEud2Vla2x5RGF5PVtcclxuICAgICAgICAgICAgICAgIHtcImluZGV4XCI6MixcIm5hbWVcIjpcIkjDqXRmxZFcIiB9LFxyXG4gICAgICAgICAgICAgICAge1wibmFtZVwiOlwiS2VkZFwifSxcclxuICAgICAgICAgICAgICAgIHtcIm5hbWVcIjpcIlN6ZXJkYVwifSxcclxuICAgICAgICAgICAgICAgIHtcIm5hbWVcIjpcIkNzw7x0w7ZydMO2a1wifSxcclxuICAgICAgICAgICAgICAgIHtcIm5hbWVcIjpcIlDDqW50ZWtcIn0sXHJcbiAgICAgICAgICAgICAgICB7XCJuYW1lXCI6XCJTem9tYmF0XCJ9LFxyXG4gICAgICAgICAgICAgICAge1wibmFtZVwiOlwiVmFzw6FybmFwXCJ9XHJcbiAgICAgICAgICAgIF07XHJcbiovXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCBwcm9kdWN0U2VsZWN0ZWQ9T3JkZXIuZ2V0RGF0YSgncHJvZHVjdFNlbGVjdGVkJyk7XHJcbiAgICAgICAgaWYodHlwZW9mIHByb2R1Y3RTZWxlY3RlZFtkLmlkXSE9J3VuZGVmaW5lZCcpe1xyXG4gICAgICAgICAgICB0ZW1wbGF0ZURhdGEuaXRlbVF1YW50aXR5PXByb2R1Y3RTZWxlY3RlZFtkLmlkXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc29sZS5sb2coWyd0ZW1wbGF0ZURhdGEnLHRlbXBsYXRlRGF0YV0pO1xyXG4gICAgICAgIGxldCBvbGRUYWdzPU11c3RhY2hlLnRhZ3M7XHJcbiAgICAgICAgTXVzdGFjaGUudGFncyA9IFtcIn4hXCIsIFwiIX5cIl07XHJcbiAgICAgICAgaWYodGVtcGxhdGVEYXRhWydzcGVjaWZpY2F0aW9uJ109PSdmYWxzZScgfHwgdGVtcGxhdGVEYXRhWydzcGVjaWZpY2F0aW9uJ109PWZhbHNlKXtcclxuICAgICAgICAgICAgdGVtcGxhdGVEYXRhLnNwZWNpZmljYXRpb25DbGFzcz0nZC1ub25lJztcclxuICAgICAgICB9XHJcbiAgICAgICAgdGVtcGxhdGVEYXRhLnBpY3R1cmVJbWc9Jyc7XHJcbiAgICAgICAgaWYodGVtcGxhdGVEYXRhWydwaWN0dXJlJ109PSdmYWxzZScgfHwgdGVtcGxhdGVEYXRhWydwaWN0dXJlJ109PWZhbHNlKXtcclxuICAgICAgICAgICAgdGVtcGxhdGVEYXRhLnBpY3R1cmVDbGFzcz0nZC1ub25lJztcclxuICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgdGVtcGxhdGVEYXRhLnBpY3R1cmVJbWc9JzxpbWcgc3JjPSBcIicrdGVtcGxhdGVEYXRhWydwaWN0dXJlJ10rJ1wiIGNsYXNzPVwicHJvZHVjdFBpY3R1cmVcIiA+PC9pbWc+JztcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc29sZS5sb2coJ3RlbXBsYXRlRGF0YScsdGVtcGxhdGVEYXRhKTtcclxuICAgICAgICAvL3RlbXBsYXRlRGF0YVsnYWFfc3BlY2lmaWNhdGlvbiddPWZhbHNlO1xyXG4gICAgICAgIGxldCByZW5kZXI9TXVzdGFjaGUucmVuZGVyKHRlbXBsYXRlLHRlbXBsYXRlRGF0YSk7XHJcbiAgICAgICAgTXVzdGFjaGUudGFncyA9b2xkVGFncztcclxuICAgICAgICBjb25zb2xlLmdyb3VwRW5kKCk7XHJcbiAgICAgICAgcmV0dXJuIHJlbmRlcjtcclxuLypcclxuc29sdXRpb24gYmVmb3JlIHRlbXBsYXRlXHJcbiAgICAgICAgcmV0dXJuICc8dGFibGUgY2VsbHBhZGRpbmc9XCI1XCIgY2VsbHNwYWNpbmc9XCIwXCIgYm9yZGVyPVwiMFwiIHN0eWxlPVwicGFkZGluZy1sZWZ0OjUwcHg7XCI+JytcclxuICAgICAgICAgICAgJzx0cj4nK1xyXG4gICAgICAgICAgICAnPHRkPkluZm86PC90ZD4nK1xyXG4gICAgICAgICAgICAnPHRkPicrZC5ub3RlKyc8L3RkPicrXHJcbiAgICAgICAgICAgICc8L3RyPicrXHJcbiAgICAgICAgICAgICc8dHI+JytcclxuICAgICAgICAgICAgJzx0ZD5ob29yZXljYSA6PC90ZD4nK1xyXG4gICAgICAgICAgICAnPHRkPjxzcGFuIHN0eWxlPVwicGFkZGluZy1yaWdodDogMmVtO1wiPicrZC5ob29yZXljYUlkKyc8L3NwYW4+JyArXHJcblxyXG4gICAgICAgICAgICAnPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCJcXG4nICtcclxuICAgICAgICAgICAgJyAgICAgICAgZGF0YS1pZD1cIicrZC5pZCsnXCJcXG4nICtcclxuICAgICAgICAgICAgJyAgICAgICAgY2xhc3M9XCJidXR0b25JdGVtRmF2b3JpdGVzIGJ0biAnK2J0bkZhdm9yaXRlc0NsYXNzKydcIj5cXG4nICtcclxuICAgICAgICAgICAgJyAgICA8aSBjbGFzcz1cImJpIGJpLXN0YXItZmlsbCBwci0yXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxcbicgK1xyXG4gICAgICAgICAgICAnICAgIEtlZHZlbmNcXG4nICtcclxuICAgICAgICAgICAgJzwvYnV0dG9uPicgK1xyXG4gICAgICAgICAgICAnPC90ZD4nK1xyXG4gICAgICAgICAgICAnPC90cj4nK1xyXG4gICAgICAgICAgICAvISpcclxuICAgICAgICAgICAgICAgICAgICAgICAgJzx0cj4nK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAnPHRkPkV4dGVuc2lvbiBudW1iZXI6PC90ZD4nK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAnPHRkPicrZC5leHRuKyc8L3RkPicrXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICc8L3RyPicrXHJcbiAgICAgICAgICAgICohL1xyXG4gICAgICAgICAgICAnPHRyPicrXHJcbiAgICAgICAgICAgICc8dGQ+SW5mbzo8L3RkPicrXHJcbiAgICAgICAgICAgICc8dGQ+JytkLm5vdGUrJzwvdGQ+JytcclxuICAgICAgICAgICAgJzwvdHI+JytcclxuICAgICAgICAgICAgJzx0cj4nK1xyXG4gICAgICAgICAgICAnPHRkPk1lZ2plZ3l6w6lzOjwvdGQ+JytcclxuICAgICAgICAgICAgJzx0ZD48dGV4dGFyZWEgY2xhc3M9XCJvcmRlckl0ZW1Db21tZW50XCIgZGF0YS1pZD1cIicrZC5pZCsnXCI+Jytjb21tZW50Kyc8L3RleHRhcmVhPjwvdGQ+JytcclxuICAgICAgICAgICAgJzwvdHI+JytcclxuICAgICAgICAgICAgLyEqXHJcbiAgICAgICAgICAgICohL1xyXG4gICAgICAgICAgICAnPC90YWJsZT4nO1xyXG4qL1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuc2V0RGF0YXRhYmxlSGVhZGVyVGV4dD1mdW5jdGlvbih0ZXh0KXtcclxuICAgICAgICAkKCcudGFibGVIZWFkZXJUZXh0JykudGV4dCh0ZXh0KTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmdldFRyZWVQYXRoTmFtZT1mdW5jdGlvbiAobm9kZSl7XHJcbiAgICAgICAgbGV0IHJlcz0nJztcclxuICAgICAgICBsZXQgaXRlbXM9JChub2RlKS5wYXJlbnRzKCdsaScpLnRvQXJyYXkoKTtcclxuICAgICAgICBpdGVtcy5zaGlmdCgpO1xyXG4gICAgICAgIGl0ZW1zLnJldmVyc2UoKTtcclxuICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gaW4gaXRlbXMpIHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coJChpdGVtc1tpdGVtXSkuY2hpbGRyZW4oJ2EuY2F0ZWdvcnlJdGVtJykpO1xyXG4gICAgICAgICAgICBpZigkKGl0ZW1zW2l0ZW1dKS5jaGlsZHJlbignYS5jYXRlZ29yeUl0ZW0nKS5sZW5ndGg+MCl7XHJcbiAgICAgICAgICAgICAgICByZXMrPSQoaXRlbXNbaXRlbV0pLmNoaWxkcmVuKCdhLmNhdGVnb3J5SXRlbScpLnRleHQoKSsnLydcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXMrPSQobm9kZSkudGV4dCgpO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKHJlcyk7XHJcbiAgICAgICAgcmV0dXJuIHJlcztcclxuICAgIH1cclxuXHJcbiAgICBsZXQgc2VsZWN0ZWRQcm9kdWN0R3JvdXA9bnVsbDtcclxuICAgIGxldCBkYXRhVGFibGVTZWFyY2hTdHI9bnVsbDtcclxuICAgIGxldCBkYXRhVGFibGVTZWFyY2hLcmVsPWZhbHNlO1xyXG5cclxuICAgIHRoaXMuc2VhcmNoUHJvZHVjdEJ5U3RyaW5nPWZ1bmN0aW9uIChmaWx0ZXJTdHIpe1xyXG4gICAgICAgIHJvb3Quc2V0RGF0YXRhYmxlSGVhZGVyVGV4dCgnVGVybcOpa2VrIHN6xbFydmU6JytmaWx0ZXJTdHIpO1xyXG4gICAgICAgIGRhdGFUYWJsZVNlYXJjaFN0cj1maWx0ZXJTdHI7XHJcbiAgICAgICAgJCgnLmRhdGFUYWJsZU9yZGVyUHJvZHVjdFNlbGVjdCcpLkRhdGFUYWJsZSgpLmFqYXgucmVsb2FkKCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5jbGlja1NlYXJjaFByb2R1Y3Q9ZnVuY3Rpb24gKCl7XHJcbiAgICAgICAgZGVidWcodGhpcyk7XHJcbiAgICAgICAgbGV0IGZpbHRlclN0cj0kKCcuc2lkZWJhci1zZWFyY2ggaW5wdXRbbmFtZT1zZWFyY2hWYWx1ZV0nKS52YWwoKVxyXG4gICAgICAgIGRlYnVnKGZpbHRlclN0cik7XHJcbiAgICAgICAgcm9vdC5zZWFyY2hQcm9kdWN0QnlTdHJpbmcoZmlsdGVyU3RyKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmNsaWNrRmF2b3JpdGVzUHJvZHVjdCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBkZWJ1ZygnY2xpY2tGYXZvcml0ZXNQcm9kdWN0Jyk7XHJcbiAgICAgICAgcm9vdC5zZXREYXRhdGFibGVIZWFkZXJUZXh0KCdUZXJtw6lrZWsgc3rFsXJ2ZToga2VkdmVuY2VrJyk7XHJcbiAgICAgICAgZGF0YVRhYmxlU2VhcmNoU3RyPScqKmZhdm9yaXRlcyoqJztcclxuICAgICAgICAkKCcuZGF0YVRhYmxlT3JkZXJQcm9kdWN0U2VsZWN0JykuRGF0YVRhYmxlKCkuYWpheC5yZWxvYWQoKTtcclxuICAgIH1cclxuICAgIHRoaXMuY2xpY2tPZnRlblByb2R1Y3QgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgZGVidWcoJ2NsaWNrT2Z0ZW5Qcm9kdWN0Jyk7XHJcbiAgICAgICAgcm9vdC5zZXREYXRhdGFibGVIZWFkZXJUZXh0KCdUZXJtw6lrZWsgc3rFsXJ2ZTogZ3lha3JhbiB2w6Fzw6Fyb2x0Jyk7XHJcbiAgICAgICAgZGF0YVRhYmxlU2VhcmNoU3RyPScqKm9mdGVuKionO1xyXG4gICAgICAgICQoJy5kYXRhVGFibGVPcmRlclByb2R1Y3RTZWxlY3QnKS5EYXRhVGFibGUoKS5hamF4LnJlbG9hZCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuY2xpY2tTcGVjaWFsT2ZmZXIgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgZGVidWcoJ2NsaWNrU3BlY2lhbE9mZmVyJyk7XHJcbiAgICAgICAgcm9vdC5zZXREYXRhdGFibGVIZWFkZXJUZXh0KCdUZXJtw6lrZWsgc3rFsXJ2ZTogQWtjacOzcyB0ZXJtw6lrZWsnKTtcclxuICAgICAgICBkYXRhVGFibGVTZWFyY2hTdHI9Jyoqc3BlY2lhbE9mZmVyKionO1xyXG4gICAgICAgICQoJy5kYXRhVGFibGVPcmRlclByb2R1Y3RTZWxlY3QnKS5EYXRhVGFibGUoKS5hamF4LnJlbG9hZCgpO1xyXG4gICAgfVxyXG5cclxuXHJcblxyXG5cclxuICAgIHRoaXMuY2xpY2tMYXN0UHJvZHVjdCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBkZWJ1ZygnY2xpY2tMYXN0UHJvZHVjdCcpO1xyXG4gICAgICAgIHJvb3Quc2V0RGF0YXRhYmxlSGVhZGVyVGV4dCgnVGVybcOpa2VrIHN6xbFydmU6IHV0b2xqw6FyYSB2w6Fzw6Fyb2x0Jyk7XHJcbiAgICAgICAgZGF0YVRhYmxlU2VhcmNoU3RyPScqKmxhc3QqKic7XHJcbiAgICAgICAgJCgnLmRhdGFUYWJsZU9yZGVyUHJvZHVjdFNlbGVjdCcpLkRhdGFUYWJsZSgpLmFqYXgucmVsb2FkKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuY2xpY2tXZWVrbHlQcm9kdWN0ID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGRlYnVnKCdjbGlja1dlZWtseVByb2R1Y3QnKTtcclxuICAgICAgICByb290LnNldERhdGF0YWJsZUhlYWRlclRleHQoJ1Rlcm3DqWtlayBzesWxcnZlOiBIZXRpIHRlcm3DqWtlaycpO1xyXG4gICAgICAgIGRhdGFUYWJsZVNlYXJjaFN0cj0nKip3ZWVrbHkqKic7XHJcbiAgICAgICAgJCgnLmRhdGFUYWJsZU9yZGVyUHJvZHVjdFNlbGVjdCcpLkRhdGFUYWJsZSgpLmFqYXgucmVsb2FkKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuY2xpY2tLcmVsUHJvZHVjdCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBkZWJ1ZygnY2xpY2tLcmVsUHJvZHVjdCcpO1xyXG4gICAgICAgIC8vcm9vdC5zZXREYXRhdGFibGVIZWFkZXJUZXh0KCdUZXJtw6lrZWsgc3rFsXJ2ZTogSGV0aSB0ZXJtw6lrZWsnKTtcclxuICAgICAgICAvL2RhdGFUYWJsZVNlYXJjaFN0cj0nKip3ZWVrbHkqKic7XHJcbiAgICAgICAgLy8kKCcuZGF0YVRhYmxlT3JkZXJQcm9kdWN0U2VsZWN0JykuRGF0YVRhYmxlKCkuYWpheC5yZWxvYWQoKTtcclxuICAgICAgICAkKHRoaXMpLnBhcmVudCgpLnRvZ2dsZUNsYXNzKCdrcmVsQWN0aXZlJyk7XHJcbiAgICAgICAgZGF0YVRhYmxlU2VhcmNoS3JlbD0hZGF0YVRhYmxlU2VhcmNoS3JlbDtcclxuICAgICAgICAkKCcuZGF0YVRhYmxlT3JkZXJQcm9kdWN0U2VsZWN0JykuRGF0YVRhYmxlKCkuYWpheC5yZWxvYWQoKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnByb2R1Y3RTZWxlY3REYXRhVGFibGVDb2x1bW5EZWZzPWZ1bmN0aW9uICgpe1xyXG4gICAgICAgIHJldHVybiBbXHJcbiAgICAgICAgICAgIHtcIndpZHRoXCI6IFwiMTBweFwiLCBcInRhcmdldHNcIjogMCB9LFxyXG4gICAgICAgICAgICB7IFwiY2xhc3NOYW1lXCI6IFwiZHQtbGVmdFwiLCBcInRhcmdldHNcIjogMSB9LFxyXG4vLyAgICAgICAgICAgICAgICB7IFwid2lkdGhcIjogXCIxMjBweFwiLCBcInRhcmdldHNcIjogMSB9LFxyXG4gICAgICAgICAgICB7IFwid2lkdGhcIjogXCIyOHB4XCIsIFwidGFyZ2V0c1wiOiAyIH0sXHJcbiAgICAgICAgICAgIHsgXCJ3aWR0aFwiOiBcIjQxcHhcIiwgXCJ0YXJnZXRzXCI6IDMgfSxcclxuICAgICAgICAgICAgeyBcIndpZHRoXCI6IFwiNzZweFwiLCBcInRhcmdldHNcIjogNCB9LFxyXG4gICAgICAgICAgICB7IFwid2lkdGhcIjogXCI1NXB4XCIsIFwidGFyZ2V0c1wiOiA1IH0sXHJcbiAgICAgICAgICAgIHsgXCJ3aWR0aFwiOiBcIjcwcHhcIiwgXCJ0YXJnZXRzXCI6IDYgfSxcclxuICAgICAgICAgICAgeyBcIndpZHRoXCI6IFwiNTRweFwiLCBcInRhcmdldHNcIjogNyB9LFxyXG4gICAgICAgICAgICB7IFwid2lkdGhcIjogXCI1N3B4XCIsIFwidGFyZ2V0c1wiOiA4IH0sXHJcbiAgICAgICAgICAgIHsgXCJ3aWR0aFwiOiBcIjQycHhcIiwgXCJ0YXJnZXRzXCI6IDkgfSxcclxuICAgICAgICAgICAgeyBcIndpZHRoXCI6IFwiMTAwcHhcIiwgXCJ0YXJnZXRzXCI6IDEwfSxcclxuICAgICAgICAgICAge1wiY2xhc3NOYW1lXCI6IFwiZHQtY2VudGVyXCIsIFwidGFyZ2V0c1wiOiBcIl9hbGxcIn0sXHJcbiAgICAgICAgXTtcclxuICAgIH1cclxuICAgIHRoaXMucHJvZHVjdFNlbGVjdERhdGFUYWJsZUNvbHVtbj1mdW5jdGlvbiAoKXtcclxuICAgICAgICBsZXQgY29sdW1uRGF0YT1bXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIFwiY2xhc3NOYW1lXCI6ICAgICAgJ2RldGFpbHMtY29udHJvbCcsXHJcbiAgICAgICAgICAgICAgICBcIm9yZGVyYWJsZVwiOiAgICAgIGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgXCJkYXRhXCI6ICAgICAgICAgICBudWxsLFxyXG4gICAgICAgICAgICAgICAgXCJkZWZhdWx0Q29udGVudFwiOiAnJ1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB7IFwiZGF0YVwiOiBcIm5hbWVcIiB9LFxyXG4gICAgICAgICAgICB7IFwiZGF0YVwiOiBcImtyZWxcIiB9LFxyXG4gICAgICAgICAgICB7IFwiZGF0YVwiOiBcInBhY2tpbmdcIn0sXHJcbiAgICAgICAgICAgIHsgXCJkYXRhXCI6IFwidW5pdFZhbHVlXCIgfSxcclxuICAgICAgICAgICAgeyBcImRhdGFcIjogXCJwcm9kdWN0VW5pdFwifSxcclxuICAgICAgICAgICAgeyBcImRhdGFcIjogXCJzZWxsZXJVbml0XCIgfSxcclxuICAgICAgICAgICAgeyBcImRhdGFcIjogXCJ1bml0TXVsdGlwbGllclwifSxcclxuICAgICAgICAgICAgeyBcImRhdGFcIjogXCJhbW91bnRVbml0XCIgfSxcclxuICAgICAgICAgICAgeyBcImRhdGFcIjogXCJwcmljZVwiIH0sXHJcblxyXG4gICAgICAgIF07XHJcblxyXG4gICAgICAgIGxldCBhY3Rpb25Db2x1bW49eyAgICAgICAgICAgICAgICBcImNsYXNzTmFtZVwiOiAgICAgICdkZXRhaWxzLWNvbnRyb2wyJyxcclxuICAgICAgICAgICAgXCJvcmRlcmFibGVcIjogICAgICBmYWxzZSxcclxuICAgICAgICAgICAgXCJkYXRhXCI6ICAgICAgICAgICBudWxsLFxyXG4gICAgICAgICAgICBcIndpZHRoXCI6IFwiODBweFwiLFxyXG4gICAgICAgICAgICBcImRlZmF1bHRDb250ZW50XCI6JydcclxuICAgICAgICB9O1xyXG4gICAgICAgIGlmKE9yZGVyLmdldERhdGEoJ29yZGVyVHlwZScpPT0nZGFpbHknKXtcclxuICAgICAgICAgICAgYWN0aW9uQ29sdW1uLmRlZmF1bHRDb250ZW50PSc8aW5wdXQgdHlwZT1cIm51bWJlclwiIHZhbHVlPVwiMFwiIG1pbj1cIjBcIiBtYXg9XCI5OTk5XCIgc3RlcD1cIjFcIiBkYXRhLWRlY2ltYWxzPVwiMVwiICBjbGFzcz1cImZvcm0tY29udHJvbC1zbSBpbnB1dE51bWJlclNwaW5uZXJcIiBzdHlsZT1cIndpZHRoOiAxZW07XCIgXCIvPidcclxuICAgICAgICAgICAgICAgIC8qXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZGVmYXVsdENvbnRlbnRcIjonPGRpdiBjbGFzcz1cImlucHV0LWdyb3VwIGlucHV0LWdyb3VwLXNtIFwiPicgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzxidXR0b24gc3R5bGU9XCJtaW4td2lkdGg6IDEuNXJlbVwiIGNsYXNzPVwiYnRuLXNtIGJ0bi1kZWNyZW1lbnQgYnRuLW91dGxpbmUtc2Vjb25kYXJ5IGJ0bi1taW51c1wiIHR5cGU9XCJidXR0b25cIj4nICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8c3Ryb25nPuKIkjwvc3Ryb25nPjwvYnV0dG9uPicgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzxpbnB1dCB0eXBlPVwidGV4dFwiIGlucHV0bW9kZT1cImRlY2ltYWxcIiBzdHlsZT1cInRleHQtYWxpZ246IGNlbnRlclwiIGNsYXNzPVwiZm9ybS1jb250cm9sIFwiIHBsYWNlaG9sZGVyPVwiXCI+JyArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPGJ1dHRvbiBzdHlsZT1cIm1pbi13aWR0aDogMS41cmVtXCIgY2xhc3M9XCJidG4tc20gYnRuLWluY3JlbWVudCBidG4tb3V0bGluZS1zZWNvbmRhcnkgYnRuLXBsdXNcIiB0eXBlPVwiYnV0dG9uXCI+JyArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPHN0cm9uZz4rPC9zdHJvbmc+PC9idXR0b24+JyArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPC9kaXY+J1xyXG4gICAgICAgICAgICAgICAgKi9cclxuXHJcbiAgICAgICAgICAgIDtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29sdW1uRGF0YS5wdXNoKGFjdGlvbkNvbHVtbik7XHJcbiAgICAgICAgcmV0dXJuIGNvbHVtbkRhdGE7XHJcbiAgICB9XHJcbiAgICB0aGlzLmdldERhdGF0YWJsZXM9ZnVuY3Rpb24gKG9yZGVyVHlwZSl7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcihvcmRlclR5cGUpO1xyXG4gICAgICAgIHZhciB0YWJsZSA9ICQoJy5kYXRhVGFibGVPcmRlclByb2R1Y3RTZWxlY3QnKS5EYXRhVGFibGUoIHtcclxuICAgICAgICAgICAgbGFuZ3VhZ2U6IHtcclxuICAgICAgICAgICAgICAgIHVybDogJy8vY2RuLmRhdGF0YWJsZXMubmV0L3BsdWctaW5zLzEuMTAuMjQvaTE4bi9IdW5nYXJpYW4uanNvbidcclxuICAgICAgICAgICAgfSxcclxuXHJcbiAgICAgICAgICAgIC8vXCJhamF4XCI6IFwie3thc3NldCgnZXhhcG1sZTIuanNvbicpfX1cIixcclxuICAgICAgICAgICAgXCJhamF4XCI6IHtcclxuICAgICAgICAgICAgICAgIHVybDpPcHRzLlVSTC5nZXREYXRhVGFibGVDb250ZW50UHJvZHVjdExpc3QsXHJcbiAgICAgICAgICAgICAgICBkYXRhOmZ1bmN0aW9uIChkYXRhKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZGF0YS5zZWFyY2hTdHI9ZGF0YVRhYmxlU2VhcmNoU3RyO1xyXG4gICAgICAgICAgICAgICAgICAgIGRhdGEua3JlbD1kYXRhVGFibGVTZWFyY2hLcmVsO1xyXG4gICAgICAgICAgICAgICAgICAgIGRhdGEuZ3JvdXBJZD1zZWxlY3RlZFByb2R1Y3RHcm91cDtcclxuICAgICAgICAgICAgICAgICAgICBkYXRhLnN1cHBsaWVySWQ9T3JkZXIuc3VwcGxpZXJJZDtcclxuICAgICAgICAgICAgICAgICAgICBkYXRhLmRlbGl2ZXJ5RGF0ZT1PcmRlci5kZWxpdmVyeURhdGU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGJ1dHRvbnM6IHtcclxuICAgICAgICAgICAgICAgIGJ1dHRvbnM6IFtdXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIFwiY29sdW1uRGVmc1wiOiByb290LnByb2R1Y3RTZWxlY3REYXRhVGFibGVDb2x1bW5EZWZzKCksXHJcbiAgICAgICAgICAgIFwiY29sdW1uc1wiOiByb290LnByb2R1Y3RTZWxlY3REYXRhVGFibGVDb2x1bW4oKSxcclxuICAgICAgICAgICAgXCJvcmRlclwiOiBbWzEsICdhc2MnXV0sXHJcbiAgICAgICAgfSApO1xyXG4gICAgICAgIHJldHVybiB0YWJsZTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnByb2R1Y3RTZWxlY3REYXRhVGFibGVEcmF3RFQ9ZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICAvL2RlYnVnKCAnVGFibGUgZHJhdyBjb21wbGV0ZTogJytuZXcgRGF0ZSgpLmdldFRpbWUoKSApO1xyXG5cclxuICAgICAgICAvLyQoJ3RkOmNvbnRhaW5zKFwiKlwiKScpLmh0bWwoJzxpIGNsYXNzPVwiYmkgYmktY2hlY2stY2lyY2xlLWZpbGxcIj48L2k+Jyk7XHJcbiAgICAgICAgJChcInRkXCIpLmZpbHRlcihmdW5jdGlvbigpe1xyXG4gICAgICAgICAgICByZXR1cm4gJCh0aGlzKS50ZXh0KCkgPT09ICcqJztcclxuICAgICAgICB9KS5odG1sKCc8aSBjbGFzcz1cImJpIGJpLWNoZWNrLWNpcmNsZS1maWxsXCI+PC9pPicpO1xyXG4gICAgICAgIGlmKE9yZGVyLmdldERhdGEoKS5vcmRlclR5cGU9PSdkYWlseScpe1xyXG4gICAgICAgICAgICAkKFwiaW5wdXRbdHlwZT0nbnVtYmVyJ10uaW5wdXROdW1iZXJTcGlubmVyXCIpLmlucHV0U3Bpbm5lcih7XHJcbiAgICAgICAgICAgICAgICB0ZW1wbGF0ZTpcclxuICAgICAgICAgICAgICAgICAgICAnPGRpdiBjbGFzcz1cImlucHV0LWdyb3VwICR7Z3JvdXBDbGFzc31cIj4nICtcclxuICAgICAgICAgICAgICAgICAgICAnPGJ1dHRvbiBzdHlsZT1cIm1pbi13aWR0aDogJHtidXR0b25zV2lkdGh9XCIgY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1kZWNyZW1lbnQgJHtidXR0b25zQ2xhc3N9XCIgdHlwZT1cImJ1dHRvblwiPiR7ZGVjcmVtZW50QnV0dG9ufTwvYnV0dG9uPicgK1xyXG4gICAgICAgICAgICAgICAgICAgIC8vJzxpbnB1dCB0eXBlPVwidGV4dFwiIGlucHV0bW9kZT1cImRlY2ltYWxcIiBzdHlsZT1cInRleHQtYWxpZ246ICR7dGV4dEFsaWdufVwiIGNsYXNzPVwicHJvZHVjdFF1YW50aXR5IGZvcm0tY29udHJvbFwiLz4nICtcclxuICAgICAgICAgICAgICAgICAgICAnPGlucHV0IHR5cGU9XCJ0ZXh0XCIgc3RlcD1cIjAuMVwiIGRhdGEtZGVjaW1hbHM9XCIyXCIgc3R5bGU9XCJ0ZXh0LWFsaWduOiAke3RleHRBbGlnbn1cIiBjbGFzcz1cInByb2R1Y3RRdWFudGl0eSBmb3JtLWNvbnRyb2xcIi8+JyArXHJcbiAgICAgICAgICAgICAgICAgICAgJzxidXR0b24gc3R5bGU9XCJtaW4td2lkdGg6ICR7YnV0dG9uc1dpZHRofVwiIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4taW5jcmVtZW50ICR7YnV0dG9uc0NsYXNzfVwiIHR5cGU9XCJidXR0b25cIj4ke2luY3JlbWVudEJ1dHRvbn08L2J1dHRvbj4nICtcclxuICAgICAgICAgICAgICAgICAgICAnPC9kaXY+JyxcclxuICAgICAgICAgICAgICAgIGJ1dHRvbnNXaWR0aDogXCIwLjVyZW1cIixcclxuICAgICAgICAgICAgICAgIGdyb3VwQ2xhc3M6IFwiXCIsIC8vIGNzcyBjbGFzcyBvZiB0aGUgcmVzdWx0aW5nIGlucHV0LWdyb3VwXHJcbiAgICAgICAgICAgICAgICBidXR0b25zQ2xhc3M6IFwiYnRuLW91dGxpbmUtc2Vjb25kYXJ5XCIsXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICByb290LmJpbmRXZWFrVXNlckhlbHBlcigpO1xyXG4gICAgICAgIC8qXHJcbiAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgICAgIGNoYW5nZSBvcmRlciBxdWFudGl0eVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgICQoXCIuZGF0YVRhYmxlT3JkZXJQcm9kdWN0U2VsZWN0IC5kZXRhaWxzLWNvbnRyb2wyIGlucHV0W3R5cGU9dGV4dF1cIikub2ZmKCdjaGFuZ2UnKTtcclxuICAgICAgICAkKFwiLmRhdGFUYWJsZU9yZGVyUHJvZHVjdFNlbGVjdCAuZGV0YWlscy1jb250cm9sMiBpbnB1dFt0eXBlPXRleHRdXCIpLm9uKCdjaGFuZ2UnLGZ1bmN0aW9uIChlKXtcclxuICAgICAgICAgICAgbGV0IHF1YW50aXR5PSQodGhpcykudmFsKCk7XHJcbiAgICAgICAgICAgIHF1YW50aXR5PXF1YW50aXR5LnJlcGxhY2UoJywnLCcuJyk7XHJcbiAgICAgICAgICAgIHF1YW50aXR5PXBhcnNlRmxvYXQocXVhbnRpdHkpO1xyXG4gICAgICAgICAgICBsZXQgcm93RGF0YT0kKCcuZGF0YVRhYmxlT3JkZXJQcm9kdWN0U2VsZWN0JykuRGF0YVRhYmxlKCkucm93KCQodGhpcykuY2xvc2VzdCgndHInKSkuZGF0YSgpO1xyXG4gICAgICAgICAgICByb290Lm9yZGVySXRlbXNDaGFuZ2Uocm93RGF0YSxxdWFudGl0eSlcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgJChcIi5kYXRhVGFibGVPcmRlclByb2R1Y3RTZWxlY3QgLmRldGFpbHMtY29udHJvbDIgaW5wdXRbdHlwZT10ZXh0XVwiKS5lYWNoKGZ1bmN0aW9uICgpe1xyXG4gICAgICAgICAgICAvL2RlYnVnKCdleiBhIGZ1bmN0aW9uMicpXHJcbiAgICAgICAgICAgIGxldCBxdWFudGl0eT0kKHRoaXMpLnZhbCgpO1xyXG4gICAgICAgICAgICBsZXQgcm93RGF0YT0kKCcuZGF0YVRhYmxlT3JkZXJQcm9kdWN0U2VsZWN0JykuRGF0YVRhYmxlKCkucm93KCQodGhpcykuY2xvc2VzdCgndHInKSkuZGF0YSgpO1xyXG5cclxuICAgICAgICAgICAgaWYoT3JkZXIucHJvZHVjdFNlbGVjdGVkW3Jvd0RhdGEuaWRdKXtcclxuICAgICAgICAgICAgICAgIGRlYnVnKHJvd0RhdGEpO1xyXG4gICAgICAgICAgICAgICAgZGVidWcoJCgkKHRoaXMpLmNsb3Nlc3QoJ3RyJykuZmluZCgnaW5wdXRbdHlwZT1udW1iZXJdJylbMF0pKTtcclxuICAgICAgICAgICAgICAgIGRlYnVnKE9yZGVyLnByb2R1Y3RTZWxlY3RlZFtyb3dEYXRhLmlkXSk7XHJcbiAgICAgICAgICAgICAgICBsZXQgcXVhbnRpdHlDdXJyZW50PU9yZGVyLnByb2R1Y3RTZWxlY3RlZFtyb3dEYXRhLmlkXTtcclxuICAgICAgICAgICAgICAgIGlmKHR5cGVvZiBxdWFudGl0eUN1cnJlbnQhPSdzdHJpbmcnKXtcclxuICAgICAgICAgICAgICAgICAgICBxdWFudGl0eUN1cnJlbnQrPScnO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgJCgkKHRoaXMpLmNsb3Nlc3QoJ3RyJykuZmluZCgnaW5wdXRbdHlwZT1udW1iZXJdJylbMF0pLnZhbChxdWFudGl0eUN1cnJlbnQucmVwbGFjZSgnLCcsJy4nKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcblxyXG4gICAgICAgICQoXCIuZGF0YVRhYmxlT3JkZXJQcm9kdWN0U2VsZWN0IC5kZXRhaWxzLWNvbnRyb2wyIGJ1dHRvblwiKS5vZmYoJ2NsaWNrJyk7XHJcbiAgICAgICAgJChcIi5kYXRhVGFibGVPcmRlclByb2R1Y3RTZWxlY3QgLmRldGFpbHMtY29udHJvbDIgYnV0dG9uXCIpLm9uKCdjbGljaycsZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAvLyBkZWJ1ZygnLmRldGFpbHMtY29udHJvbDIgYnV0dG9uIGNsaWNrICcpXHJcbiAgICAgICAgICAgIC8vIGRlYnVnKHRoaXMpO1xyXG4gICAgICAgICAgICAkKHRoaXMpLnBhcmVudCgpLmZpbmQoJ2lucHV0W3R5cGU9dGV4dF0nKS50cmlnZ2VyKCdjaGFuZ2UnKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5pbml0Vmlld1Byb2R1Y3RTZWxlY3Q9ZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGxldCBmdW5jdGlvbk5hbWU9J2luaXRWaWV3UHJvZHVjdFNlbGVjdCc7XHJcbiAgICAgICAgY29uc29sZS5sb2coZnVuY3Rpb25OYW1lKycgY2FsbGVkJyk7XHJcbiAgICAgICAgaWYodmlld0luaWNpYWxpemVkLmluY2x1ZGVzKGZ1bmN0aW9uTmFtZSkpe1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vZGVidWcoT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMocm9vdCkpO1xyXG4gICAgICAgIHJvb3Quc2V0RGF0YXRhYmxlSGVhZGVyVGV4dCgnJyk7XHJcbiAgICAgICAgcm9vdC5TdGVwcGVyLnNldE9wdHMoe29uQWZ0ZXJBY3RpdmF0ZTpmdW5jdGlvbiAoKXt9fSk7XHJcbiAgICAgICAgLy9Abm90ZTogYmUga2VsbCBrYXBjc29sbmkgYXogZWxvbmV6ZXRldFxyXG4gICAgICAgIHJvb3QuU3RlcHBlci5hZGRDb21wbGV0ZWQoJ2ludm9pY2UnKTtcclxuICAgICAgICByb290LlN0ZXBwZXIuYWRkRW5hYmxlZCgnaW52b2ljZScpO1xyXG4gICAgICAgIGxldCBDU1NTZWxlY3RvckZvcm09Jy5vcmRlclBhcmFtZXRlckZvcm0nO1xyXG4gICAgICAgIC8vY29uc29sZS5sb2coT3B0cy5VUkwuZ2V0RGF0YVRhYmxlQ29udGVudFByb2R1Y3RMaXN0KTtjaGFuZ2VcclxuICAgICAgICBkZWJ1ZygoQ1NTU2VsZWN0b3JGb3JtKycgLmZhLXNlYXJjaCcpKTtcclxuXHJcbiAgICAgICAgJCgnLnNpZGViYXItc2VhcmNoIC5mYS1zZWFyY2gnKS5vZmYoJ2NsaWNrJyk7XHJcbiAgICAgICAgJCgnLnNpZGViYXItc2VhcmNoIC5mYS1zZWFyY2gnKS5vbignY2xpY2snLHJvb3QuY2xpY2tTZWFyY2hQcm9kdWN0KTtcclxuXHJcbiAgICAgICAgJCgnYS5zaWRlYmFyLmZhdm9yaXRlcycpLm9mZignY2xpY2snKTtcclxuICAgICAgICAkKCdhLnNpZGViYXIuZmF2b3JpdGVzJykub24oJ2NsaWNrJyxyb290LmNsaWNrRmF2b3JpdGVzUHJvZHVjdCk7XHJcblxyXG4gICAgICAgICQoJ2Euc2lkZWJhci5vZnRlbicpLm9mZignY2xpY2snKTtcclxuICAgICAgICAkKCdhLnNpZGViYXIub2Z0ZW4nKS5vbignY2xpY2snLHJvb3QuY2xpY2tPZnRlblByb2R1Y3QpO1xyXG5cclxuICAgICAgICAkKCdhLnNpZGViYXIubGFzdCcpLm9mZignY2xpY2snKTtcclxuICAgICAgICAkKCdhLnNpZGViYXIubGFzdCcpLm9uKCdjbGljaycscm9vdC5jbGlja0xhc3RQcm9kdWN0KTtcclxuXHJcbiAgICAgICAgJCgnYS5zaWRlYmFyLndlZWtseScpLm9mZignY2xpY2snKTtcclxuICAgICAgICAkKCdhLnNpZGViYXIud2Vla2x5Jykub24oJ2NsaWNrJyxyb290LmNsaWNrV2Vla2x5UHJvZHVjdCk7XHJcblxyXG4gICAgICAgICQoJ2Euc2lkZWJhci5rcmVsJykub2ZmKCdjbGljaycpO1xyXG4gICAgICAgICQoJ2Euc2lkZWJhci5rcmVsJykub24oJ2NsaWNrJyxyb290LmNsaWNrS3JlbFByb2R1Y3QpO1xyXG5cclxuICAgICAgICAkKCdhLnNpZGViYXIuc3BlY2lhbE9mZmVyJykub2ZmKCdjbGljaycpO1xyXG4gICAgICAgICQoJ2Euc2lkZWJhci5zcGVjaWFsT2ZmZXInKS5vbignY2xpY2snLHJvb3QuY2xpY2tTcGVjaWFsT2ZmZXIpO1xyXG5cclxuXHJcbiAgICAgICAgJCgnLnNpZGViYXItc2VhcmNoIGlucHV0W25hbWU9c2VhcmNoVmFsdWVdJykub2ZmKCdrZXlwcmVzcycpO1xyXG4gICAgICAgICQoJy5zaWRlYmFyLXNlYXJjaCBpbnB1dFtuYW1lPXNlYXJjaFZhbHVlXScpLm9uKCdrZXlwcmVzcycsZnVuY3Rpb24gKGV2ZW50KSB7XHJcbiAgICAgICAgICAgIGlmICggZXZlbnQud2hpY2ggPT0gMTMgKSB7XHJcbiAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmKCQodGhpcykudmFsKCkubGVuZ3RoPj0yKXtcclxuICAgICAgICAgICAgICAgIHJvb3Quc2VhcmNoUHJvZHVjdEJ5U3RyaW5nKCQodGhpcykudmFsKCkrZXZlbnQua2V5KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuXHJcblxyXG4gICAgICAgICQoJy5zaWRlYmFyLXdyYXBwZXIgLnNpZGViYXItbWVudSAuc2lkZWJhci1kcm9wZG93biAuc2lkZWJhci1zdWJtZW51IGxpIGEuY2F0ZWdvcnlJdGVtLmNsaWNrYWJsZScpLm9mZignY2xpY2snKTtcclxuICAgICAgICAkKCcuc2lkZWJhci13cmFwcGVyIC5zaWRlYmFyLW1lbnUgLnNpZGViYXItZHJvcGRvd24gLnNpZGViYXItc3VibWVudSBsaSBhLmNhdGVnb3J5SXRlbS5jbGlja2FibGUnKS5vbignY2xpY2snLFxyXG4gICAgICAgICAgICBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgZ3JvdXBJZD0kKHRoaXMpLmRhdGEoJ2lkJyk7XHJcbiAgICAgICAgICAgICAgICBzZWxlY3RlZFByb2R1Y3RHcm91cD1ncm91cElkO1xyXG4gICAgICAgICAgICAgICAgZGF0YVRhYmxlU2VhcmNoU3RyPW51bGw7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhncm91cElkKTtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKHJvb3QuZ2V0VHJlZVBhdGhOYW1lKHRoaXMpKTtcclxuICAgICAgICAgICAgICAgIHJvb3Quc2V0RGF0YXRhYmxlSGVhZGVyVGV4dChyb290LmdldFRyZWVQYXRoTmFtZSh0aGlzKSk7XHJcbi8qXHJcbiAgICAgICAgICAgICAgICBsZXQgYWpheERhdGE9e1xyXG4gICAgICAgICAgICAgICAgICAgICdncm91cElkJzpncm91cElkLFxyXG4gICAgICAgICAgICAgICAgICAgICdzdXBwbGllcl9pZCc6T3JkZXIuc3VwcGxpZXJJZCxcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAvLyQoJy5kYXRhVGFibGVPcmRlclByb2R1Y3RTZWxlY3QnKS5EYXRhVGFibGUoKS5hamF4LmRhdGEoYWpheERhdGEpLmxvYWQoKTtcclxuXHJcbiovXHJcbi8qXHJcbiAgICAgICAgICAgICAgICBsZXQgYWpheFVybD1PcHRzLlVSTC5nZXREYXRhVGFibGVDb250ZW50UHJvZHVjdExpc3QrJz9ncm91cElkPScrZ3JvdXBJZCsnJnN1cHBsaWVyX2lkPScrT3JkZXIuc3VwcGxpZXJJZDtcclxuICAgICAgICAgICAgICAgICQoJy5kYXRhVGFibGVPcmRlclByb2R1Y3RTZWxlY3QnKS5EYXRhVGFibGUoKS5hamF4LnVybChhamF4VXJsKS5sb2FkKCk7XHJcbiovXHJcbiAgICAgICAgICAgICAgICAkKCcuZGF0YVRhYmxlT3JkZXJQcm9kdWN0U2VsZWN0JykuRGF0YVRhYmxlKCkuYWpheC5yZWxvYWQoKTtcclxuICAgICAgICAgICAgfSk7XHJcblxyXG5cclxuICAgICAgICBsZXQgdGFibGUgPSByb290LmdldERhdGF0YWJsZXMoT3JkZXIuZ2V0RGF0YSgnb3JkZXJUeXBlJykpO1xyXG5cclxuICAgICAgICAkKCcuZGF0YVRhYmxlT3JkZXJQcm9kdWN0U2VsZWN0Jykub24oICdpbml0LmR0JywgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyggJ1RhYmxlIGluaXRpYWxpc2F0aW9uIGNvbXBsZXRlOiAnK25ldyBEYXRlKCkuZ2V0VGltZSgpICk7XHJcbiAgICAgICAgfSApLmRhdGFUYWJsZSgpO1xyXG5cclxuXHJcblxyXG4gICAgICAgICQoJy5kYXRhVGFibGVPcmRlclByb2R1Y3RTZWxlY3QnKS5vbiggJ2RyYXcuZHQnLHJvb3QucHJvZHVjdFNlbGVjdERhdGFUYWJsZURyYXdEVCkuZGF0YVRhYmxlKCk7XHJcblxyXG4gICAgICAgIC8vJCgnLmRhdGFUYWJsZU9yZGVyUHJvZHVjdFNlbGVjdCcpLm9uKCAnZHJhdy5kdCcsICApLmRhdGFUYWJsZSgpO1xyXG5cclxuICAgICAgICAkKCcuZGF0YVRhYmxlT3JkZXJQcm9kdWN0U2VsZWN0Jykub24oICd4aHIuZHQnLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGRlYnVnKCAnVGFibGUgeGhyIGNvbXBsZXRlOiAnK25ldyBEYXRlKCkuZ2V0VGltZSgpICk7XHJcbiAgICAgICAgfSApLmRhdGFUYWJsZSgpO1xyXG5cclxuICAgICAgICAvLyQoXCJpbnB1dFt0eXBlPSdudW1iZXInXS5pbnB1dE51bWJlclNwaW5uZXJcIikuaW5wdXRTcGlubmVyKCk7XHJcblxyXG4vKlxyXG4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiBBZGQgZXZlbnQgbGlzdGVuZXIgZm9yIG9wZW5pbmcgYW5kIGNsb3NpbmcgZGV0YWlsc1xyXG4gKi9cclxuXHJcbiAgICAgICAgJCgnLmRhdGFUYWJsZU9yZGVyUHJvZHVjdFNlbGVjdCB0Ym9keScpLm9uKCdjbGljaycsICd0ZC5kZXRhaWxzLWNvbnRyb2wnLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGxldCB0ciA9ICQodGhpcykuY2xvc2VzdCgndHInKTtcclxuICAgICAgICAgICAgbGV0IHJvdyA9IHRhYmxlLnJvdyggdHIgKTtcclxuXHJcbiAgICAgICAgICAgIGlmICggcm93LmNoaWxkLmlzU2hvd24oKSApIHtcclxuICAgICAgICAgICAgICAgIC8vIFRoaXMgcm93IGlzIGFscmVhZHkgb3BlbiAtIGNsb3NlIGl0XHJcbiAgICAgICAgICAgICAgICByb3cuY2hpbGQuaGlkZSgpO1xyXG4gICAgICAgICAgICAgICAgdHIucmVtb3ZlQ2xhc3MoJ3Nob3duJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAvLyBPcGVuIHRoaXMgcm93XHJcbiAgICAgICAgICAgICAgICByb3cuY2hpbGQoIHJvb3QucHJvZHVjdFNlbGVjdERhdGF0YWJsZXNSb3dGb3JtYXR0ZXIocm93LmRhdGEoKSkgKS5zaG93KCk7XHJcbiAgICAgICAgICAgICAgICB0ci5hZGRDbGFzcygnc2hvd24nKTtcclxuICAgICAgICAgICAgICAgIHJvb3QuYmluZFByb2R1Y3REZXRhaWxzQWN0aW9uKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9ICk7XHJcbiAgICAgICAgdmlld0luaWNpYWxpemVkLnB1c2goZnVuY3Rpb25OYW1lKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmJpbmRQcm9kdWN0RGV0YWlsc0FjdGlvbj1mdW5jdGlvbiAoKXtcclxuICAgICAgICByb290LmJpbmRSb3dEZXNjcmlwdGlvbkFjdGlvbigpO1xyXG4gICAgICAgIHJvb3QuYmluZFJvd0Zhdm9yaXRlc0FjdGlvbigpO1xyXG4gICAgICAgIGlmKE9yZGVyLmdldERhdGEoKVsnb3JkZXJUeXBlJ109PSd3ZWVrbHknKXtcclxuICAgICAgICAgICAgcm9vdC5iaW5kT3JkZXJJdGVtV2Vla1F1YW50aXR5KCk7XHJcbiAgICAgICAgfVxyXG4gICB9XHJcblxyXG4gICAgdGhpcy5iaW5kV2Vha1VzZXJIZWxwZXI9ZnVuY3Rpb24gKCl7XHJcbiAgICAgICAgJCggXCJpbnB1dC5pbnB1dE51bWJlclNwaW5uZXJcIiApLm9mZiggXCJmb2N1c1wiKTtcclxuICAgICAgICAkKCBcImlucHV0LmlucHV0TnVtYmVyU3Bpbm5lclwiICkub24oIFwiZm9jdXNcIiwgZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgIGxldCBxdWFudGl0eT0kKHRoaXMpLnZhbCgpO1xyXG4gICAgICAgICAgICBxdWFudGl0eT1xdWFudGl0eS5yZXBsYWNlKCcsJywnLicpO1xyXG4gICAgICAgICAgICBxdWFudGl0eT1wYXJzZUZsb2F0KHF1YW50aXR5KTtcclxuICAgICAgICAgICAgaWYocXVhbnRpdHk9PT0wKXtcclxuICAgICAgICAgICAgICAgICQodGhpcykudmFsKCcnKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgJCggXCJpbnB1dFt0eXBlPXRleHRdLmlucHV0TnVtYmVyU3Bpbm5lclwiICkub2ZmKCBcImtleXByZXNzXCIpO1xyXG4gICAgICAgICQoIFwiaW5wdXRbdHlwZT10ZXh0XS5pbnB1dE51bWJlclNwaW5uZXJcIiApLm9uKCBcImtleXByZXNzXCIsIGZ1bmN0aW9uKGV2ZW50KSB7XHJcbiAgICAgICAgICAgIGlmICggZXZlbnQud2hpY2ggPT0gMTMgKSB7XHJcbi8vICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ2VudGVyIHByZXNzZWQnKTtcclxuICAgICAgICAgICAgICAgIGxldCBhY3R1YWxJdGVtPXRoaXM7XHJcbiAgICAgICAgICAgICAgICBsZXQgaXRlbXM9JCggXCJpbnB1dFt0eXBlPXRleHRdLmlucHV0TnVtYmVyU3Bpbm5lclwiICk7XHJcbiAgICAgICAgICAgICAgICBpdGVtcy5lYWNoKGZ1bmN0aW9uIChpdGVtKXtcclxuLy8gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKHRoaXMpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmKHRoaXM9PWFjdHVhbEl0ZW0pe1xyXG4vLyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoaXRlbSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKGl0ZW0rMTw9aXRlbXMubGVuZ3RoKXtcclxuLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihpdGVtc1tpdGVtKzFdKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoaXRlbXNbaXRlbSsxXSkuZm9jdXMoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmJpbmRPcmRlckl0ZW1XZWVrUXVhbnRpdHk9ZnVuY3Rpb24gKCl7XHJcbiAgICAgICAgJChcImlucHV0LnByb2R1Y3RTZWxlY3REYXlRdWFudGl0eVwiKS5vZmYoJ2NoYW5nZScpO1xyXG4gICAgICAgICQoXCJpbnB1dC5wcm9kdWN0U2VsZWN0RGF5UXVhbnRpdHlcIikub24oJ2NoYW5nZScsZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyh0aGlzLm5hbWUpO1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyh0aGlzLnZhbHVlKTtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coJCh0aGlzKS5kYXRhKCdkYXlpbmRleCcpKTtcclxuXHJcbiAgICAgICAgICAgIGxldCByb3dEYXRhPW51bGw7XHJcbiAgICAgICAgICAgIGxldCByb3dOb2RlPSQoJCh0aGlzKS5jbG9zZXN0KCd0YWJsZS5vcmRlclByb2R1Y3RTZWxlY3RSb3dEZXRhaWxzVGFibGUnKS5jbG9zZXN0KCd0cicpKS5wcmV2KCk7XHJcbiAgICAgICAgICAgIHJvd0RhdGE9JCgnLmRhdGFUYWJsZU9yZGVyUHJvZHVjdFNlbGVjdCcpLkRhdGFUYWJsZSgpLnJvdyhyb3dOb2RlKS5kYXRhKCk7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKHJvd0RhdGEpO1xyXG4gICAgICAgICAgICBsZXQgcXVhbnRpdHk9JCh0aGlzKS52YWwoKTtcclxuICAgICAgICAgICAgcXVhbnRpdHk9cXVhbnRpdHkucmVwbGFjZSgnLCcsJy4nKTtcclxuICAgICAgICAgICAgcXVhbnRpdHk9cGFyc2VGbG9hdChxdWFudGl0eSk7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKHJvd0RhdGEuaWQpO1xyXG4gICAgICAgICAgICByb290Lm9yZGVySXRlbXNDaGFuZ2Uocm93RGF0YSxxdWFudGl0eSwkKHRoaXMpLmRhdGEoJ2RheWluZGV4JykpO1xyXG4vLyAgICAgICAgICAgIHJvb3Qub3JkZXJJdGVtc0NoYW5nZVxyXG4gICAgICAgICAgICAvL29yZGVySXRlbXNDaGFuZ2VcclxuICAgICAgICAgICAgLy9xdWFudGl0eVsxNjgzXVsxXVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmFmdGVyU3luY09yZGVyRGF0YVRvU2VydmVyPWZ1bmN0aW9uIChkYXRhKSB7XHJcbiAgICAgICAgLy9yb290LnRvZ2dsZUVuYWJsZVNlbmQoKTtcclxuICAgICAgICAvL2NvbnNvbGUubG9nKCdtb3N0IHZlZ3pldHQuIGVubnlpdCBraXN6ZWQnK2JhdGNoTnVtKTtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8cXVldWVBamF4Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdzaGlmdGVsJylcclxuICAgICAgICAgICAgcXVldWVBamF4LnNoaWZ0KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vY29uc29sZS5sb2coJ3JlbWFpbmluZyBsZWZ0ICcrcXVldWVBamF4Lmxlbmd0aCk7XHJcbiAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpe1xyXG4gICAgICAgICAgICBzeW5jRG9pbmc9ZmFsc2U7XHJcbiAgICAgICAgICAgIHJvb3Quc3luY09yZGVyRGF0YVRvU2VydmVyKCk7XHJcbiAgICAgICAgfSwgT3B0cy5kYXRhU3luY1BhdXNlVGltZSk7XHJcbiAgICB9XHJcbiAgICBsZXQgcXVldWVBamF4PVtdO1xyXG4gICAgbGV0IHN5bmNEb2luZz1mYWxzZTtcclxuXHJcbiAgICB0aGlzLnN5bmNPcmRlckRhdGFUb1NlcnZlcj1mdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgLy9kZWJ1ZyhxdWV1ZUFqYXgpO1xyXG4gICAgICAgIGlmKHN5bmNEb2luZyl7XHJcbiAgICAgICAgICAgIC8vZGVidWcoJ3N5bmMgaW4gcHJvZ3Jlc3MuLi4uJyk7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYocXVldWVBamF4Lmxlbmd0aDwxKXtcclxuICAgICAgICAgICAgcmV0dXJuIDtcclxuICAgICAgICB9XHJcbiAgICAgICAgc3luY0RvaW5nPXRydWU7XHJcblxyXG4gICAgICAgIHJvb3Quc2VuZE9yZGVyRGF0YVRvU2VydmVyKCdwcm9kdWN0U2VsZWN0Jyxyb290LmFmdGVyU3luY09yZGVyRGF0YVRvU2VydmVyKTtcclxuICAgICAgICByZXR1cm4gO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMub3JkZXJJdGVtc0NoYW5nZT1mdW5jdGlvbihJdGVtRGF0YSxxdWFudGl0eSxkYXlJbmRleCl7XHJcblxyXG4vKlxyXG4gICAgICAgIGRlYnVnKCctLS0tLS0tLS0tLS0tLS0tLScpO1xyXG4gICAgICAgIGRlYnVnKEl0ZW1EYXRhKTtcclxuICAgICAgICBkZWJ1ZyhxdWFudGl0eSk7XHJcbiAgICAgICAgZGVidWcoT3JkZXIuZ2V0RGF0YSgncHJvZHVjdFNlbGVjdGVkJykpO1xyXG4gICAgICAgIGRlYnVnKCctLS0tLS0tLS0tLS0tLS0tLScpO1xyXG5cclxuKi9cclxuICAgICAgICBpZihpc05hTihxdWFudGl0eSkpe1xyXG4gICAgICAgICAgICBxdWFudGl0eT0wO1xyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgcHJvZHVjdFNlbGVjdGVkPU9yZGVyLmdldERhdGEoJ3Byb2R1Y3RTZWxlY3RlZCcpO1xyXG4gICAgICAgIGNvbnNvbGUuZ3JvdXAoJ29yZGVySXRlbXNDaGFuZ2UnKTtcclxuICAgICAgICBjb25zb2xlLmxvZyhbJ3Byb2R1Y3RTZWxlY3RlZCcscHJvZHVjdFNlbGVjdGVkXSk7XHJcbiAgICAgICAgY29uc29sZS5sb2coWydJdGVtRGF0YScsSXRlbURhdGFdKTtcclxuICAgICAgICBjb25zb2xlLmxvZyhbJ0l0ZW1EYXRhLmlkJyxJdGVtRGF0YS5pZF0pO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKFsncXVhbnRpdHknLHF1YW50aXR5XSk7XHJcbiAgICAgICAgY29uc29sZS5sb2coWydkYXlJbmRleCcsZGF5SW5kZXhdKTtcclxuICAgICAgICBjb25zb2xlLmxvZyhwcm9kdWN0U2VsZWN0ZWRbSXRlbURhdGEuaWRdKTtcclxuXHJcbiAgICAgICAgbGV0IHByb2R1Y3RTZWxlY3RlZEl0ZW09cHJvZHVjdFNlbGVjdGVkW0l0ZW1EYXRhLmlkXTtcclxuICAgICAgICAvKlxyXG4gICAgICAgIGhhIDAgZXJ0ZWsgam9uIGVzIG5lbSBpcyB2b2x0IGFra29yIGhhbWFyIGtpdWdyYXRqdWtcclxuICAgICAgICAgKi9cclxuICAgICAgICBpZihxdWFudGl0eT09MCl7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ3F1YW50aXR5PT0wJyk7XHJcbiAgICAgICAgICAgIGlmKHR5cGVvZiBwcm9kdWN0U2VsZWN0ZWRJdGVtPT0ndW5kZWZpbmVkJyl7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ2l0dCBsZXAxJyk7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZ3JvdXBFbmQoKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZihkYXlJbmRleCl7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygndmFuIGRheUluZGV4JylcclxuICAgICAgICAgICAgICAgIGlmKHR5cGVvZiBwcm9kdWN0U2VsZWN0ZWRbSXRlbURhdGEuaWRdW2RheUluZGV4XT09J3VuZGVmaW5lZCcpe1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFsncHJvZHVjdFNlbGVjdGVkSXRlbScscHJvZHVjdFNlbGVjdGVkSXRlbV0pO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ2l0dCBsZXAyJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5ncm91cEVuZCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICAvKlxyXG4gICAgICAgIGhhIGF6b25vcyBheiBlcnRlayBraXVncnVua1xyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGlmKGRheUluZGV4KXtcclxuICAgICAgICAgICAgaWYodHlwZW9mIHByb2R1Y3RTZWxlY3RlZFtJdGVtRGF0YS5pZF0hPSd1bmRlZmluZWQnXHJcbiAgICAgICAgICAgICAgICAmJiB0eXBlb2YgcHJvZHVjdFNlbGVjdGVkW0l0ZW1EYXRhLmlkXVtkYXlJbmRleF0hPSd1bmRlZmluZWQnKXtcclxuICAgICAgICAgICAgICAgIGlmKHByb2R1Y3RTZWxlY3RlZFtJdGVtRGF0YS5pZF1bZGF5SW5kZXhdPT1xdWFudGl0eSl7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignYXpvbm9zIG5hcGknKTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmdyb3VwRW5kKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgIGlmKHByb2R1Y3RTZWxlY3RlZFtJdGVtRGF0YS5pZF09PXF1YW50aXR5KXtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ2F6b25vcycpO1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5ncm91cEVuZCgpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZihxdWFudGl0eT09MCl7XHJcbiAgICAgICAgICAgIGlmKGRheUluZGV4KXtcclxuICAgICAgICAgICAgICAgIGRlbGV0ZSBPcmRlci5wcm9kdWN0U2VsZWN0ZWRbSXRlbURhdGEuaWRdW2RheUluZGV4XTtcclxuICAgICAgICAgICAgICAgIGRlbGV0ZSBwcm9kdWN0U2VsZWN0ZWRbSXRlbURhdGEuaWRdW2RheUluZGV4XTtcclxuICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICBkZWxldGUgT3JkZXIucHJvZHVjdFNlbGVjdGVkW0l0ZW1EYXRhLmlkXTtcclxuICAgICAgICAgICAgICAgIGRlbGV0ZSBwcm9kdWN0U2VsZWN0ZWRbSXRlbURhdGEuaWRdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgIC8qXHJcbiAgICAgICAgICAgIGhhIHZhbiBlcnRlayBlcnRla2V0IGFkdW5rIVxyXG4gICAgICAgICAgICAgKi9cclxuICAgICAgICAgICAgaWYoZGF5SW5kZXgpe1xyXG4gICAgICAgICAgICAgICAgaWYodHlwZW9mIHByb2R1Y3RTZWxlY3RlZFtJdGVtRGF0YS5pZF09PSd1bmRlZmluZWQnKXtcclxuICAgICAgICAgICAgICAgICAgICBwcm9kdWN0U2VsZWN0ZWRbSXRlbURhdGEuaWRdPVtdO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ3NldCBxdWFudGl0eSBwcm9kdWN0U2VsZWN0ZWRbSXRlbURhdGEuaWRdW2RheUluZGV4XScscXVhbnRpdHkpO1xyXG4gICAgICAgICAgICAgICAgcHJvZHVjdFNlbGVjdGVkW0l0ZW1EYXRhLmlkXVtkYXlJbmRleF09cXVhbnRpdHk7XHJcbiAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgcHJvZHVjdFNlbGVjdGVkW0l0ZW1EYXRhLmlkXT1xdWFudGl0eTtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdzZXQgcXVhbnRpdHkgcHJvZHVjdFNlbGVjdGVkW0l0ZW1EYXRhLmlkXScscXVhbnRpdHkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnNvbGUubG9nKFsncHJvZHVjdFNlbGVjdGVkJyxwcm9kdWN0U2VsZWN0ZWRdKTtcclxuICAgICAgICBPcmRlci5wcm9kdWN0U2VsZWN0ZWQ9cHJvZHVjdFNlbGVjdGVkO1xyXG5cclxuICAgICAgICBjb25zb2xlLmdyb3VwRW5kKCk7XHJcbiAgICAgICAgcXVldWVBamF4LnB1c2goRGF0ZS5ub3coKSk7XHJcbiAgICAgICAgcm9vdC5zeW5jT3JkZXJEYXRhVG9TZXJ2ZXIoKTtcclxuXHJcbiAgICAgICAgcmV0dXJuO1xyXG5cclxuXHJcbiAgICAgICAgaWYocHJvZHVjdFNlbGVjdGVkW0l0ZW1EYXRhLmlkXT09cXVhbnRpdHkpe1xyXG4gICAgICAgICAgICBkZWJ1ZygnaXR0IGxlcDEyJyk7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZ3JvdXBFbmQoKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBwcm9kdWN0U2VsZWN0ZWRbSXRlbURhdGEuaWRdPXF1YW50aXR5O1xyXG4gICAgICAgIGlmKHF1YW50aXR5PT0wKXtcclxuICAgICAgICAgICAgZGVsZXRlIE9yZGVyLnByb2R1Y3RTZWxlY3RlZFtJdGVtRGF0YS5pZF07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIE9yZGVyLnByb2R1Y3RTZWxlY3RlZD1wcm9kdWN0U2VsZWN0ZWQ7XHJcbiAgICAgICAgY29uc29sZS5ncm91cEVuZCgpO1xyXG4gICAgICAgIHJldHVybjtcclxuXHJcbiAgICAgICAgcXVldWVBamF4LnB1c2goRGF0ZS5ub3coKSk7XHJcbiAgICAgICAgcm9vdC5zeW5jT3JkZXJEYXRhVG9TZXJ2ZXIoKTtcclxuXHJcbiAgICAgICAgLypcclxuICAgICAgICBkZWJ1ZyhPcmRlci5nZXREYXRhKCdwcm9kdWN0U2VsZWN0ZWQnKSk7XHJcbiAgICAgICAgZGVidWcoJyoqKioqKioqKioqKioqKioqKionKTtcclxuKi9cclxuICAgIH1cclxuICAgIHRoaXMuaW5pdFZpZXdJbnZvaWNlPWZ1bmN0aW9uICgpIHtcclxuICAgICAgICByb290LlN0ZXBwZXIuc2V0T3B0cyh7b25BZnRlckxvYWQ6ZnVuY3Rpb24gKCl7fX0pO1xyXG5cclxuICAgICAgICBpZihPYmplY3Qua2V5cyhPcmRlci5wcm9kdWN0U2VsZWN0ZWQpLmxlbmd0aD4wKXtcclxuICAgICAgICAgICAgcm9vdC5TdGVwcGVyLmFkZENvbXBsZXRlZCgnc2VuZCcpO1xyXG4gICAgICAgICAgICByb290LlN0ZXBwZXIuYWRkRW5hYmxlZCgnc2VuZCcpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgc3R5bGVTdHI9JzxsaW5rIHJlbD1cInN0eWxlc2hlZXRcIiBocmVmPVwiJytPcHRzLlVSTC5yb290KycvY3NzL2ludm9pY2UuY3NzXCI+JztcclxuICAgICAgICAkKCd0YWJsZS5pbnZvaWNlIGJ1dHRvbi5wcmludEJ1dHRvbicpLm9mZignY2xpY2snKTtcclxuICAgICAgICAkKCd0YWJsZS5pbnZvaWNlIGJ1dHRvbi5wcmludEJ1dHRvbicpLm9uKCdjbGljaycsZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICB3aW5kb3cucHJpbnQoKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG5cclxuICAgICAgICAgICAgbGV0IG5ld1dpbj0gd2luZG93Lm9wZW4oXCJcIik7XHJcbiAgICAgICAgICAgIG5ld1dpbi5kb2N1bWVudC53cml0ZShzdHlsZVN0cik7XHJcbiAgICAgICAgICAgIGxldCBwcmludD0kKCd0YWJsZS5pbnZvaWNlJykuY2xvbmUoKTtcclxuICAgICAgICAgICAgcHJpbnQuZmluZCgnYnV0dG9uLnByaW50QnV0dG9uJykucmVtb3ZlKCk7XHJcbi8vICAgICAgICAgICAgbmV3V2luLmRvY3VtZW50LndyaXRlKCQoJ3RhYmxlLmludm9pY2UnKS5wcm9wKCdvdXRlckhUTUwnKSk7XHJcbiAgICAgICAgICAgIG5ld1dpbi5kb2N1bWVudC53cml0ZShwcmludC5wcm9wKCdvdXRlckhUTUwnKSk7XHJcbiAgICAgICAgICAgIG5ld1dpbi5wcmludCgpO1xyXG4gICAgICAgICAgIG5ld1dpbi5jbG9zZSgpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMucmVzZXRPcmRlcj1mdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcm9vdC5pbml0KCk7XHJcbiAgICAgICAgcm9vdC5zZXREZWxpdmVyeURhdGUoJy0nKTtcclxuICAgICAgICByb290LnNldFN1cHBsaWVyKCctJyk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuYWZ0ZXJPcmRlclNlbmRPaz1mdW5jdGlvbiAoZGF0YSkge1xyXG4gICAgICAgIFRvYXN0LmNyZWF0ZSh7IHRpdGxlOiBcIlNlbnQhXCIsIG1lc3NhZ2U6ICdPcmRlciBTZW50JyAsIHN0YXR1czogVE9BU1RfU1RBVFVTLklORk8sIHRpbWVvdXQ6IDUwMDAgfSk7XHJcbiAgICAgICAgJCgnLmJ1dHRvbk9yZGVyU2VuZCcpLm9mZignY2xpY2snKTtcclxuICAgICAgICAkKCcuYnV0dG9uT3JkZXJTZW5kJykucHJvcCgnZGlzYWJsZWQnLHRydWUpO1xyXG4gICAgICAgICQoJy5zdGF0dXNOYW1lUGxhY2UnKS5yZW1vdmVDbGFzcygnc3RhdHVzQmxpbmsnKTtcclxuICAgICAgICAkKCcuc3RhdHVzTmFtZVBsYWNlJykudGV4dCgnZWxrw7xsZHZlJyk7XHJcbiAgICAgICAgJCgnLmJ1dHRvbk9yZGVyU2VuZGluZycpLnRvZ2dsZUNsYXNzKCdkLW5vbmUnKTtcclxuICAgICAgICAkKCcuYnV0dG9uT3JkZXJTZW5kT2snKS50b2dnbGVDbGFzcygnZC1ub25lJyk7XHJcbiAgICAgICAgJCgnZGl2Lmludm9pY2VDb250YWluZXInKS5odG1sKGRhdGEucmV0SFRNTCk7XHJcbiAgICAgICAgLy9yb290LnJlc2V0T3JkZXIoKTtcclxuICAgIH1cclxuICAgIHRoaXMuYWZ0ZXJPcmRlclNlbmRFcnJvcj1mdW5jdGlvbiAoZGF0YSkge1xyXG4gICAgICAgICQoJy5idXR0b25PcmRlclNlbmQnKS50b2dnbGVDbGFzcygnZC1ub25lJyk7XHJcbiAgICAgICAgJCgnLmJ1dHRvbk9yZGVyU2VuZGluZycpLnRvZ2dsZUNsYXNzKCdkLW5vbmUnKTtcclxuICAgICAgICAkLmVhY2goQVBQLk9yZGVyTW9kdWxlLlN0ZXBwZXIuZ2V0T3B0cygpLmF2YWlsYWJsZSxmdW5jdGlvbiAoaW5kZXgsdmFsdWUpIHtcclxuICAgICAgICAgICAgQVBQLk9yZGVyTW9kdWxlLlN0ZXBwZXIuc2V0RW5hYmxlZCh2YWx1ZSk7XHJcbiAgICAgICAgICAgIEFQUC5PcmRlck1vZHVsZS5TdGVwcGVyLnNldENvbXBsZXRlZCh2YWx1ZSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5pbml0Vmlld1NlbmQ9ZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCdpbml0Vmlld1NlbmQgY2FsbGVkIDInKTtcclxuICAgICAgICByb290LlN0ZXBwZXIuc2V0T3B0cyh7b25BZnRlckxvYWQ6ZnVuY3Rpb24gKCl7fX0pO1xyXG4gICAgICAgICQoJy5idXR0b25PcmRlclNlbmQnKS5vZmYoJ2NsaWNrJyk7XHJcbiAgICAgICAgJCgnLmJ1dHRvbk9yZGVyU2VuZCcpLm9uKCdjbGljaycsZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZygnU2VuZCBidXRvbiBjbGlja2VkJyk7XHJcbiAgICAgICAgICAgIC8vQHRvZG86IGRhdGFzeW5jaGVyZSBhbmQgY2FsbGJhY2tcclxuICAgICAgICAgICAgJCgnLmJ1dHRvbk9yZGVyU2VuZCcpLnRvZ2dsZUNsYXNzKCdkLW5vbmUnKTtcclxuICAgICAgICAgICAgJCgnLmJ1dHRvbk9yZGVyU2VuZGluZycpLnRvZ2dsZUNsYXNzKCdkLW5vbmUnKTtcclxuICAgICAgICAgICAgLyoqXHJcbiAgICAgICAgICAgICAqIFBNMTU4XHJcbiAgICAgICAgICAgICAqL1xyXG4gICAgICAgICAgICAkLmVhY2goQVBQLk9yZGVyTW9kdWxlLlN0ZXBwZXIuZ2V0T3B0cygpLmF2YWlsYWJsZSxmdW5jdGlvbiAoaW5kZXgsdmFsdWUpIHtcclxuICAgICAgICAgICAgICAgIHJvb3QuU3RlcHBlci51bnNldEVuYWJsZWQodmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgcm9vdC5TdGVwcGVyLnVuc2V0Q29tcGxldGVkKHZhbHVlKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIC8qKlxyXG5cclxuICAgICAgICAgICAgICovXHJcbiAgICAgICAgICAgIHJvb3Quc2VuZE9yZGVyRGF0YVRvU2VydmVyKCdzZW5kJyxyb290LmFmdGVyT3JkZXJTZW5kT2sscm9vdC5hZnRlck9yZGVyU2VuZEVycm9yKTtcclxuXHJcbi8qICAgICAgICAgICAgbGV0IGFqYXhEYXRhPXt9O1xyXG4gICAgICAgICAgICBhamF4RGF0YS5fdG9rZW49T3B0cy50b2tlbjtcclxuICAgICAgICAgICAgYWpheERhdGEuc2VuZD10cnVlO1xyXG4gICAgICAgICAgICAkLmV4dGVuZChhamF4RGF0YSxPcmRlcik7XHJcbiAgICAgICAgICAgICQuYWpheCh7XHJcbiAgICAgICAgICAgICAgIHVybDogT3B0cy5VUkwuc3RvcmUsXHJcbiAgICAgICAgICAgICAgICBtZXRob2Q6J1BPU1QnLFxyXG4gICAgICAgICAgICAgICAgZGF0YTphamF4RGF0YSxcclxuICAgICAgICAgICAgICAgIHN1Y2Nlc3M6ZnVuY3Rpb24gKGRhdGEpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZihkYXRhLnN1Y2Nlc3Mpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByb290LmFmdGVyT3JkZXJTZW5kT2soZGF0YSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTsqL1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnRlc3RNb2RlU2VuZD1mdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgfVxyXG5cclxuXHJcbiAgICB0aGlzLnRlc3RNb2RlPWZ1bmN0aW9uICgpIHtcclxuICAgICAgICBjb25zb2xlLmxvZygndGVzdE1vZGUgY2FsbGVkICcpXHJcbiAgICAgICAgT3JkZXIuc2V0RGF0YSh7XHJcbiAgICAgICAgICAgIGlkOjIzNCxcclxuICAgICAgICAgICAgc3VwcGxpZXJJZDo3LFxyXG4gICAgICAgICAgICBwcm9kdWN0U2VsZWN0ZWQ6e1xyXG4gICAgICAgICAgICAgICAgMTE2IDogMyxcclxuICAgICAgICAgICAgICAgIDI5MyA6IDIsXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGNvbnRhY3ROYW1lOidDb250YWN0IE5hbWUnLFxyXG4gICAgICAgICAgICBub3RlOidOb3RlJyxcclxuICAgICAgICAgICAgdHlwZTonZGFpbHknLFxyXG4gICAgICAgICAgICBkZWxpdmVyeURhdGU6T3B0cy5kZWZhdWx0RGVsaXZlcnlEYXRlLFxyXG4gICAgICAgICAgICBkZWxpdmVyeUFkZHJlc3M6MTIsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgY29uc29sZS5sb2coT3JkZXIuZ2V0RGF0YSgpKTtcclxuXHJcbiAgICAgICAgY29uc29sZS5sb2coJyoqKioqKioqKioqKioqKioqKionKTtcclxuICAgICAgICAvL3Jvb3QuU3RlcHBlci5zZXRPcHRzKHsnVXJsRGF0YSc6eydzdXBwbGllcklkJzpzdXBwbGllcklkfX0pO1xyXG4gICAgICAgIHJvb3QuU3RlcHBlci5zZXRPcHRzKHsnVXJsRGF0YSc6eydzdXBwbGllcklkJzpPcmRlci5zdXBwbGllcklkLGlkOk9yZGVyLmlkfX0pO1xyXG4gICAgICAgIHRoaXMuU3RlcHBlci5pbml0KHtcclxuICAgICAgICAgICAgVVJMOiB7XHJcbiAgICAgICAgICAgICAgICBjcmVhdGU6IE9wdHMuVVJMLmNyZWF0ZSxcclxuICAgICAgICAgICAgfSxcclxuLypcclxuY3N1cGFzeiBheiBlbGVqZXJvbFxyXG4gICAgICAgICAgICBjb21wbGV0ZTpbJ3N1cHBsaWVyJ10sXHJcbiAgICAgICAgICAgIGVuYWJsZTogWydzdXBwbGllciddLFxyXG4gICAgICAgICAgICBhY3RpdmU6ICdzdXBwbGllcicsXHJcbiAgICAgICAgICAgIG9uQWZ0ZXJBY3RpdmF0ZTp0aGlzLmluaXRWaWV3U3VwcGxpZXIsXHJcblxyXG5wcm9kdWN0IHNlbGVjdFxyXG4gICAgICAgICAgICBjb21wbGV0ZTpbJ3N1cHBsaWVyJywncGFyYW1ldGVyJywncHJvZHVjdFNlbGVjdCddLFxyXG4gICAgICAgICAgICBlbmFibGU6IFsnc3VwcGxpZXInLCdwYXJhbWV0ZXInLCdwcm9kdWN0U2VsZWN0J10sXHJcbiAgICAgICAgICAgIGFjdGl2ZTogJ3Byb2R1Y3RTZWxlY3QnLFxyXG4gICAgICAgICAgICBvbkFmdGVyQWN0aXZhdGU6dGhpcy5pbml0Vmlld1Byb2R1Y3RTZWxlY3QsXHJcblxyXG5mdWxsb3NcclxuICAgICAgICAgICAgY29tcGxldGU6WydzdXBwbGllcicsJ3BhcmFtZXRlcicsJ3Byb2R1Y3RTZWxlY3QnLCdpbnZvaWNlJ10sXHJcbiAgICAgICAgICAgIGVuYWJsZTogWydzdXBwbGllcicsJ3BhcmFtZXRlcicsJ3Byb2R1Y3RTZWxlY3QnLCdpbnZvaWNlJywnc2VuZCddLFxyXG4gICAgICAgICAgICBhY3RpdmU6ICdwcm9kdWN0U2VsZWN0JyxcclxuICAgICAgICAgICAgb25BZnRlckFjdGl2YXRlOnRoaXMuaW5pdFZpZXdQcm9kdWN0U2VsZWN0LFxyXG5cclxuc2VuZFxyXG4gICAgICAgICAgICBjb21wbGV0ZTpbJ3N1cHBsaWVyJywncGFyYW1ldGVyJywncHJvZHVjdFNlbGVjdCcsJ2ludm9pY2UnLCdzZW5kJ10sXHJcbiAgICAgICAgICAgIGVuYWJsZTogWydzdXBwbGllcicsJ3BhcmFtZXRlcicsJ3Byb2R1Y3RTZWxlY3QnLCdpbnZvaWNlJywnc2VuZCddLFxyXG4gICAgICAgICAgICBhY3RpdmU6ICdzZW5kJyxcclxuICAgICAgICAgICAgb25BZnRlckFjdGl2YXRlOnRoaXMuaW5pdFZpZXdQcm9kdWN0U2VsZWN0LFxyXG5cclxuKi9cclxuICAgICAgICAgICAgY29tcGxldGU6WydzdXBwbGllcicsJ3BhcmFtZXRlcicsJ3Byb2R1Y3RTZWxlY3QnXSxcclxuICAgICAgICAgICAgZW5hYmxlOiBbJ3N1cHBsaWVyJywncGFyYW1ldGVyJywncHJvZHVjdFNlbGVjdCddLFxyXG4gICAgICAgICAgICBhY3RpdmU6ICdwcm9kdWN0U2VsZWN0JyxcclxuICAgICAgICAgICAgb25BZnRlckFjdGl2YXRlOnRoaXMuaW5pdFZpZXdQcm9kdWN0U2VsZWN0LFxyXG5cclxuXHJcbiAgICAgICAgICAgIGF1dG9DYWxsYmFjazoge1xyXG4gICAgICAgICAgICAgICAgaW52b2ljZToge1xyXG4gICAgICAgICAgICAgICAgICAgIG9uQWZ0ZXJBY3RpdmF0ZTpyb290LmluaXRWaWV3SW52b2ljZVxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIHNlbmQ6IHtcclxuICAgICAgICAgICAgICAgICAgICBvbkFmdGVyQWN0aXZhdGU6cm9vdC5pbml0Vmlld1NlbmRcclxuICAgICAgICAgICAgICAgIH0sXHJcblxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCcqKioqKioqKioqKioqKioqKioqJyk7XHJcblxyXG4gICAgfVxyXG4gICAgdGhpcy50b2dnbGVFbmFibGVTZW5kPWZ1bmN0aW9uICgpIHtcclxuICAgICAgICBjb25zb2xlLmxvZygndG9nZ2xlRW5hYmxlU2VuZCBjYWxsZWQnKTtcclxuICAgICAgICBsZXQgYWpheFVybD1PcHRzLlVSTC5jaGVja1JlYWR5VG9TZW5kLnJlcGxhY2UoJyVpZCUnLE9yZGVyLmlkKTtcclxuICAgICAgICAkLmFqYXgoe1xyXG4gICAgICAgICAgICB1cmw6YWpheFVybCxcclxuICAgICAgICAgICAgc3VjY2VzczpmdW5jdGlvbiAoZGF0YSkge1xyXG4gICAgICAgICAgICAgICAgaWYoZGF0YS5zdWNjZXNzKXtcclxuICAgICAgICAgICAgICAgICAgICBpZihkYXRhLnJlYWR5VG9TZW5kKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcm9vdC5TdGVwcGVyLmFkZENvbXBsZXRlZCgnc2VuZCcpO1xyXG4vKlxyXG4gICAgICAgICAgICAgICAgICAgICAgICByb290LlN0ZXBwZXIuYWRkQ29tcGxldGVkKCdpbnZvaWNlJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvb3QuU3RlcHBlci5hZGRFbmFibGVkKCdpbnZvaWNlJyk7XHJcbiovXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvb3QuU3RlcHBlci5hZGRFbmFibGVkKCdzZW5kJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvb3QuU3RlcHBlci51bnNldENvbXBsZXRlZCgnc2VuZCcpO1xyXG4vKlxyXG4gICAgICAgICAgICAgICAgICAgICAgICByb290LlN0ZXBwZXIudW5zZXRDb21wbGV0ZWQoJ2ludm9pY2UnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcm9vdC5TdGVwcGVyLnVuc2V0RW5hYmxlZCgnaW52b2ljZScpO1xyXG4qL1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByb290LlN0ZXBwZXIudW5zZXRFbmFibGVkKCdzZW5kJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coZGF0YSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbn1cclxuIl0sIm5hbWVzIjpbIndpbmRvdyIsIk9yZGVyTW9kdWxEZWZhdWx0IiwiYWN0aW9uRnVuY3Rpb24iLCJEYXRhTW9kZWxPcmRlciIsIl9EYXRhTW9kZWwiLCJkYXRhIiwib3B0aW9ucyIsIl90aGlzIiwiX2NsYXNzQ2FsbENoZWNrIiwiX2NhbGxTdXBlciIsInByb2R1Y3RTZWxlY3RlZCIsInByb2R1Y3RDb21tZW50IiwiY29uc29sZSIsImxvZyIsImNvbnN0cnVjdG9yIiwibmFtZSIsIl9pbmhlcml0cyIsIl9jcmVhdGVDbGFzcyIsIkRhdGFNb2RlbCIsIlN0ZXBwZXIiLCJPcHRzIiwiY29tcGxldGUiLCJhdmFpbGFibGUiLCJlbmFibGUiLCJsb2FkIiwiZXhjbHVkZUxvYWRlZCIsImxvYWRlZCIsImFjdGl2ZSIsIlVSTCIsImNyZWF0ZSIsIlVybERhdGEiLCJvbkFmdGVyTG9hZCIsIm9uQWZ0ZXJBY3RpdmF0ZSIsImF1dG9DYWxsYmFjayIsIm5vd0xvYWRlZCIsInJvb3QiLCJjb25zdHJ1Y3QiLCIkIiwiZXh0ZW5kIiwiZ2V0T3B0cyIsInNldE9wdHMiLCJpbml0IiwiZGVidWciLCJlYWNoIiwic3RlcE5hbWUiLCJpbmNsdWRlcyIsInNldENvbXBsZXRlZCIsInNldEVuYWJsZWQiLCJsb2FkU3RlcENvbnRlbnQiLCJzZXRBY3RpdmUiLCJiaW5kQ2xpY2tBY3Rpb24iLCJzdGVwQ2xpY2tCdXR0b25zIiwib2ZmIiwib24iLCJzdGVwQ2xpY2siLCJhZGRDbGFzcyIsInVuc2V0Q29tcGxldGVkIiwicmVtb3ZlQ2xhc3MiLCJhcnJheVJlbW92ZSIsInVuc2V0RW5hYmxlZCIsImNvbnRlbnRzIiwidW53cmFwIiwic3RlcEl0ZW0iLCJodG1sIiwiYWRkRW5hYmxlZCIsInB1c2giLCJhZGRDb21wbGV0ZWQiLCJhamF4IiwiYXN5bmMiLCJ0eXBlIiwidXJsIiwiY2FjaGUiLCJzdWNjZXNzIiwicmVzdWx0IiwiY29udGFpbmVyIiwiY2FwaXRhbGl6ZSIsImluQXJyYXkiLCJjbGVhckxvYWRlZCIsImNsYXNzTGlzdCIsImNvbnRhaW5zIiwic2V0QWN0aXZlRmluaXNoIiwic2hvdyIsImhpZGUiLCJldmVudCIsInByZXZlbnREZWZhdWx0IiwiY3VycmVudFRhcmdldCIsIk9yZGVyTW9kdWxlIiwidGVzdE1vZGUiLCJuZWVkU3RlcHBlciIsIkNTU1NlbGVjdG9yRm9ybSIsImRlZmF1bHREZWxpdmVyeURhdGUiLCJkYXRhU3luY1BhdXNlVGltZSIsInRva2VuIiwiZ2V0RGF0YVRhYmxlQ29udGVudFByb2R1Y3RMaXN0IiwiY2hlY2tSZWFkeVRvU2VuZCIsImluZGV4IiwiZWRpdCIsInN0b3JlIiwidXBkYXRlIiwiZGVzdHJveSIsInRvZ2dsZUZhdm9yaXRlcyIsIlB1YmxpY1ZhciIsIlB1YmxpY1ZhcjIiLCJBcGlUb2tlbiIsIk9yZGVyIiwidmlld0luaWNpYWxpemVkIiwiY2xpY2tPcmRlckVkaXQiLCJhamF4VXJsIiwicmVwbGFjZSIsImlkIiwiQVBQIiwibG9hZE1haW5Db250ZW50IiwiYWZ0ZXJPcmRlckRlbGV0ZWQiLCJUb2FzdCIsInRpdGxlIiwibWVzc2FnZSIsInN0YXR1cyIsIlRPQVNUX1NUQVRVUyIsIkRBTkdFUiIsInRpbWVvdXQiLCJjbGlja09yZGVyRGVsZXRlQ29uZmlybWVkIiwibW9kYWwiLCJhamF4RGF0YSIsIl90b2tlbiIsIm1ldGhvZCIsImluaXRWaWV3T3JkZXJTZWxlY3QiLCJhY3Rpb24iLCJvcmRlcklkIiwiY2xvc2VzdCIsImZpbmQiLCJ0ZXh0IiwiaW5pdFN0ZXBwZXIiLCJnZXREYXRhIiwic2V0RGVsaXZlcnlEYXRlIiwic2V0U3VwcGxpZXIiLCJ1bkVuYWJsZWQiLCJ2YWx1ZSIsInN0ZXBBY3RpdmUiLCJzdGVwQ29tcGxldGUiLCJzdGVwRW5hYmxlIiwic3RlcE9uQWZ0ZXJBY3RpdmF0ZSIsImF2YWxhaWJsZVN0ZXBzIiwic3RlcFVybERhdGEiLCJzdGVwQXV0b0NhbGxiYWNrIiwiX2l0ZXJhdG9yIiwiX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIiLCJfc3RlcCIsInMiLCJuIiwiZG9uZSIsIml0ZW0iLCJlcnIiLCJlIiwiZiIsInN1cHBsaWVySWQiLCJfaXRlcmF0b3IyIiwiX3N0ZXAyIiwiaW5pdE9yZGVyIiwic3VwcGxpZXJOYW1lIiwic2V0RGF0YSIsImRhdGVUZXh0IiwiZGF0ZVRleHRUbyIsImRhdGVUZXh0SHVtYW4iLCJyZXBsYWNlQWxsIiwibGVuZ3RoIiwidmFsIiwic2V0U3VwcGxpZXJDb21wbGV0ZWQiLCJpbml0Vmlld1BhcmFtZXRlciIsImFmdGVyT3JkZXJTZXRTdXBwbGllck9rIiwic3VwcGxpZXIiLCJJTkZPIiwiaW5pdFZpZXdTdXBwbGllciIsInN0b3JlVHlwZSIsIldBUk5JTkciLCJjaGVja0NvbnRhY3ROYW1lRmllbGQiLCJub2RlIiwic2VuZE9yZGVyRGF0YVRvU2VydmVyIiwidXBkYXRlVHlwZSIsImNhbGxiYWNrIiwiZXJyb3JDYWxsYmFjayIsImFqYXhNZXRob2QiLCJfbWV0aG9kIiwianNvblRvRm9ybURhdGEiLCJjb250ZW50VHlwZSIsInByb2Nlc3NEYXRhIiwiZXJyb3IiLCJ4aHIiLCJhamF4T3B0aW9ucyIsInRocm93bkVycm9yIiwiYWpheEVycm9ySGFuZGxlciIsInJlc3BvbnNlSlNPTiIsImFmdGVyT3JkZXJTZXRQYXJhbWV0ZXJPayIsInNlbGVjdEN1cnJlbnRXZWVrIiwid2Vla0hvdmVyIiwid2Vla0hvdmVyU2xvdyIsInNldFRpbWVvdXQiLCJpbml0RGF0ZVBpY2tlciIsInN0YXJ0RGF0ZSIsIkRhdGUiLCJlbmREYXRlIiwiZGF0ZXBpY2tlciIsInNob3dPdGhlck1vbnRocyIsInNlbGVjdE90aGVyTW9udGhzIiwic2hvd1dlZWsiLCJkYXRlRm9ybWF0IiwiZmlyc3REYXkiLCJtaW5EYXRlIiwiYWZ0ZXJTaG93IiwiaW5zdCIsIm9uU2VsZWN0IiwiZGF0ZSIsImdldE1vbmRheSIsImdldEZ1bGxZZWFyIiwiZ2V0TW9udGgiLCJnZXREYXRlIiwiZ2V0RGF5IiwiZm9ybWF0RGF0ZSIsImJlZm9yZVNob3ciLCJncm91cCIsImdyb3VwRW5kIiwiYmVmb3JlU2hvd0RheSIsInRvTG9jYWxlRGF0ZVN0cmluZyIsImNzc0NsYXNzIiwib25DaGFuZ2VNb250aFllYXIiLCJ5ZWFyIiwibW9udGgiLCJjYWxsQ2hhbmdlT3JkZXJUeXBlIiwiY2xpY2siLCJzZWxlY3QyIiwicHJvcCIsInNldERhdGUiLCJzdWJtaXQiLCJjaGVja1ZhbGlkaXR5Iiwic3RvcFByb3BhZ2F0aW9uIiwiY29udGFjdE5hbWUiLCJub3RlIiwib3JkZXJUeXBlIiwiZGVsaXZlcnlEYXRlIiwiZGVsaXZlcnlBZGRyZXNzSWQiLCJkZWxpdmVyeUFkZHJlc3MiLCJjdXN0b21Ob3RpZmljYXRpb25FbWFpbCIsImJsYW5rIiwic2V0UGFyYW1ldGVyQ29tcGxldGVkIiwiYmluZFJvd0Zhdm9yaXRlc0FjdGlvbiIsInByb2R1Y3RJZCIsImJ1dHRvbiIsInJlc3BvbnNlIiwiYmluZFJvd0Rlc2NyaXB0aW9uQWN0aW9uIiwiY29tbWVudCIsInF1ZXVlQWpheCIsIm5vdyIsInN5bmNPcmRlckRhdGFUb1NlcnZlciIsInByb2R1Y3RTZWxlY3REYXRhdGFibGVzUm93Rm9ybWF0dGVyIiwiZCIsInRlbXBsYXRlRGF0YSIsIl90eXBlb2YiLCJmYXZvcml0ZXMiLCJidG5GYXZvcml0ZXNDbGFzcyIsInRlbXBsYXRlIiwid2Vla2x5IiwiaXRlbVF1YW50aXR5Iiwib2xkVGFncyIsIk11c3RhY2hlIiwidGFncyIsInNwZWNpZmljYXRpb25DbGFzcyIsInBpY3R1cmVJbWciLCJwaWN0dXJlQ2xhc3MiLCJyZW5kZXIiLCJzZXREYXRhdGFibGVIZWFkZXJUZXh0IiwiZ2V0VHJlZVBhdGhOYW1lIiwicmVzIiwiaXRlbXMiLCJwYXJlbnRzIiwidG9BcnJheSIsInNoaWZ0IiwicmV2ZXJzZSIsImNoaWxkcmVuIiwic2VsZWN0ZWRQcm9kdWN0R3JvdXAiLCJkYXRhVGFibGVTZWFyY2hTdHIiLCJkYXRhVGFibGVTZWFyY2hLcmVsIiwic2VhcmNoUHJvZHVjdEJ5U3RyaW5nIiwiZmlsdGVyU3RyIiwiRGF0YVRhYmxlIiwicmVsb2FkIiwiY2xpY2tTZWFyY2hQcm9kdWN0IiwiY2xpY2tGYXZvcml0ZXNQcm9kdWN0IiwiY2xpY2tPZnRlblByb2R1Y3QiLCJjbGlja1NwZWNpYWxPZmZlciIsImNsaWNrTGFzdFByb2R1Y3QiLCJjbGlja1dlZWtseVByb2R1Y3QiLCJjbGlja0tyZWxQcm9kdWN0IiwicGFyZW50IiwidG9nZ2xlQ2xhc3MiLCJwcm9kdWN0U2VsZWN0RGF0YVRhYmxlQ29sdW1uRGVmcyIsInByb2R1Y3RTZWxlY3REYXRhVGFibGVDb2x1bW4iLCJjb2x1bW5EYXRhIiwiYWN0aW9uQ29sdW1uIiwiZGVmYXVsdENvbnRlbnQiLCJnZXREYXRhdGFibGVzIiwidGFibGUiLCJsYW5ndWFnZSIsInNlYXJjaFN0ciIsImtyZWwiLCJncm91cElkIiwiYnV0dG9ucyIsInByb2R1Y3RTZWxlY3REYXRhVGFibGVEcmF3RFQiLCJmaWx0ZXIiLCJpbnB1dFNwaW5uZXIiLCJidXR0b25zV2lkdGgiLCJncm91cENsYXNzIiwiYnV0dG9uc0NsYXNzIiwiYmluZFdlYWtVc2VySGVscGVyIiwicXVhbnRpdHkiLCJwYXJzZUZsb2F0Iiwicm93RGF0YSIsInJvdyIsIm9yZGVySXRlbXNDaGFuZ2UiLCJxdWFudGl0eUN1cnJlbnQiLCJ0cmlnZ2VyIiwiaW5pdFZpZXdQcm9kdWN0U2VsZWN0IiwiZnVuY3Rpb25OYW1lIiwid2hpY2giLCJrZXkiLCJnZXRUaW1lIiwiZGF0YVRhYmxlIiwidHIiLCJjaGlsZCIsImlzU2hvd24iLCJiaW5kUHJvZHVjdERldGFpbHNBY3Rpb24iLCJiaW5kT3JkZXJJdGVtV2Vla1F1YW50aXR5IiwiYWN0dWFsSXRlbSIsImZvY3VzIiwicm93Tm9kZSIsInByZXYiLCJhZnRlclN5bmNPcmRlckRhdGFUb1NlcnZlciIsImkiLCJzeW5jRG9pbmciLCJJdGVtRGF0YSIsImRheUluZGV4IiwiaXNOYU4iLCJwcm9kdWN0U2VsZWN0ZWRJdGVtIiwiaW5pdFZpZXdJbnZvaWNlIiwiT2JqZWN0Iiwia2V5cyIsInN0eWxlU3RyIiwicHJpbnQiLCJuZXdXaW4iLCJvcGVuIiwiZG9jdW1lbnQiLCJ3cml0ZSIsImNsb25lIiwicmVtb3ZlIiwiY2xvc2UiLCJyZXNldE9yZGVyIiwiYWZ0ZXJPcmRlclNlbmRPayIsInJldEhUTUwiLCJhZnRlck9yZGVyU2VuZEVycm9yIiwiaW5pdFZpZXdTZW5kIiwidGVzdE1vZGVTZW5kIiwiaW52b2ljZSIsInNlbmQiLCJ0b2dnbGVFbmFibGVTZW5kIiwicmVhZHlUb1NlbmQiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./resources/js/moduleJs/order.js\n\n}"); /***/ }, diff --git a/public/mix-manifest.json b/public/mix-manifest.json index 1439a84..836d5c4 100644 --- a/public/mix-manifest.json +++ b/public/mix-manifest.json @@ -1,7 +1,7 @@ { "/js/app.js": "/js/app.js?id=8eebbb7cc03522e40f2a774f36c0d6b0", - "/js/admin.js": "/js/admin.js?id=4b9d03c88a5090900218d5b5c5063a28", - "/js/module.js": "/js/module.js?id=9baa3aeb550477277796c6ebeff868c4", + "/js/admin.js": "/js/admin.js?id=7dc5528ae92206694e8180a8921427d3", + "/js/module.js": "/js/module.js?id=7fb473400984ae4331f82416fabdd009", "/js/components.js": "/js/components.js?id=34668cee8ac371c98657beffcff579b8", "/css/app.css": "/css/app.css?id=11474616a7ef31af1acf43a25d65f4b6", "/fonts/vendor/bootstrap-icons/bootstrap-icons.woff2?92ea18a81d737146ff044ddb52010366": "/fonts/vendor/bootstrap-icons/bootstrap-icons.woff2?92ea18a81d737146ff044ddb52010366?id=9ad5aa740d7d5e6a0191b309b9b1986c", diff --git a/resources/js/admin/dashboard.js b/resources/js/admin/dashboard.js index e3ded70..cd1b8a6 100644 --- a/resources/js/admin/dashboard.js +++ b/resources/js/admin/dashboard.js @@ -80,7 +80,7 @@ window.Dashboard=function () { }, success: function(data) { - Toast.create("Siekeres mentés!",'Új tartalom elmentve.' , TOAST_STATUS.INFO,5000); + Toast.create({ title: "Siekeres mentés!", message: 'Új tartalom elmentve.', status: TOAST_STATUS.INFO, timeout: 5000 }); }, error: function(data) { console.log(data.responseJSON); diff --git a/resources/js/admin/priceList.js b/resources/js/admin/priceList.js index cfc662a..1ad4959 100644 --- a/resources/js/admin/priceList.js +++ b/resources/js/admin/priceList.js @@ -235,7 +235,7 @@ window.PriceListAdmin=function (options,ProfitCenterItem) { let data= new FormData($('.priceListForm')[0]); if($('.supplierSelect').val().length<1){ - Toast.create("Hiba!", 'Adjon meg beszállítót!', TOAST_STATUS.DANGER, 10000); + Toast.create({ title: "Hiba!", message: 'Adjon meg beszállítót!', status: TOAST_STATUS.DANGER, timeout: 10000 }); return; } let fileInput=$('#inputGroupPriceListFile'); @@ -246,7 +246,7 @@ window.PriceListAdmin=function (options,ProfitCenterItem) { if(!Opts.testFileMod){ console.log(fileInput[0].files.length<1); if(fileInput[0].files.length<1){ - Toast.create("Hiba!", 'Vállaszon ki fájlt!', TOAST_STATUS.DANGER, 10000); + Toast.create({ title: "Hiba!", message: 'Vállaszon ki fájlt!', status: TOAST_STATUS.DANGER, timeout: 10000 }); return; } } diff --git a/resources/js/admin/product.js b/resources/js/admin/product.js index 24ebabb..db3941d 100644 --- a/resources/js/admin/product.js +++ b/resources/js/admin/product.js @@ -281,7 +281,7 @@ window.ProductAdmin=function (options,ProductItem) { $(CSSSelectorForm+' .attachmentTable tbody').append(render); //root.bindContactClickAction(); Toast.enableTimers(false); - Toast.create("Fájl hozzáadva!", attachmentData.original_filename+" fájl hozzáadva", TOAST_STATUS.SUCCESS,5000); + Toast.create({ title: "Fájl hozzáadva!", message: attachmentData.original_filename+" fájl hozzáadva", status: TOAST_STATUS.SUCCESS, timeout: 5000 }); } this.setVisibleFilters=function (type){ @@ -528,7 +528,7 @@ window.ProductAdmin=function (options,ProductItem) { if(data.success==true){ //Opts.onAfterInitViewDetails=root.autofillDetails; Opts.dataTable.orderDirective=[0, 'desc']; - Toast.create("Sikeres rögzítés!", ajaxData.get('name')+" nevű termék elmentve", TOAST_STATUS.SUCCESS,5000); + Toast.create({ title: "Sikeres rögzítés!", message: ajaxData.get('name')+" nevű termék elmentve", status: TOAST_STATUS.SUCCESS, timeout: 5000 }); // APP.loadMainContent(Opts.URL.index+'?init=0',root.initViewList); } } diff --git a/resources/js/admin/profitCenter.js b/resources/js/admin/profitCenter.js index be62a36..6842c97 100644 --- a/resources/js/admin/profitCenter.js +++ b/resources/js/admin/profitCenter.js @@ -318,7 +318,7 @@ window.ProfitCenterAdmin=function (options,ProfitCenterItem) { $(CSSSelectorForm+' .contactTable tbody').append(render); root.bindContactClickAction(); Toast.enableTimers(false); - Toast.create("Kapcsolat tartó hozzáadva!", contactData.name+" nevű kapocsolattartó hozzáadva", TOAST_STATUS.SUCCESS,5000); + Toast.create({ title: "Kapcsolat tartó hozzáadva!", message: contactData.name+" nevű kapocsolattartó hozzáadva", status: TOAST_STATUS.SUCCESS, timeout: 5000 }); } this.editContact=function (id,contactData){ @@ -332,7 +332,7 @@ window.ProfitCenterAdmin=function (options,ProfitCenterItem) { }); root.ProfitCenter.contact=newContacts; root.resetContactTable(); - Toast.create("Kapcsolat adatai módosítva!", contactData.name+" nevű kapocsolattartó módosítva", TOAST_STATUS.SUCCESS,5000); + Toast.create({ title: "Kapcsolat adatai módosítva!", message: contactData.name+" nevű kapocsolattartó módosítva", status: TOAST_STATUS.SUCCESS, timeout: 5000 }); } @@ -415,7 +415,7 @@ window.ProfitCenterAdmin=function (options,ProfitCenterItem) { $(CSSSelectorForm+' .addressTable tbody').append(render); root.bindAddressClickAction(); Toast.enableTimers(false); - Toast.create("Cím hozzáadva!", ItemData.street+" hozzáadva", TOAST_STATUS.SUCCESS,5000); + Toast.create({ title: "Cím hozzáadva!", message: ItemData.street+" hozzáadva", status: TOAST_STATUS.SUCCESS, timeout: 5000 }); } this.editAddress=function (id,itemData){ @@ -429,7 +429,7 @@ window.ProfitCenterAdmin=function (options,ProfitCenterItem) { }); root.ProfitCenter.address=newItem; root.resetAddressTable(); - Toast.create("cím adatai módosítva!", itemData.street+" módosítva", TOAST_STATUS.SUCCESS,5000); + Toast.create({ title: "cím adatai módosítva!", message: itemData.street+" módosítva", status: TOAST_STATUS.SUCCESS, timeout: 5000 }); } this.initViewList = function (options={}) { diff --git a/resources/js/admin/supplier.js b/resources/js/admin/supplier.js index 4edecfd..78897a5 100644 --- a/resources/js/admin/supplier.js +++ b/resources/js/admin/supplier.js @@ -359,7 +359,7 @@ window.SupplierAdmin=function (options,SupplierItem) { console.group('-------buttonUpload-----------'); let fileInput=$('#inputGroupAttacheFile'); if(fileInput[0].files.length<1){ - Toast.create("Hiba!", 'Vállaszon ki fájlt!', TOAST_STATUS.DANGER, 10000); + Toast.create({ title: "Hiba!", message: 'Vállaszon ki fájlt!', status: TOAST_STATUS.DANGER, timeout: 10000 }); return; } console.log($(Opts.containerCssSelector).find('form.supplierForm')[0]); @@ -641,7 +641,7 @@ window.SupplierAdmin=function (options,SupplierItem) { $(CSSSelectorForm+' .attachmentTable tbody').append(render); root.bindContactClickAction(); Toast.enableTimers(false); - Toast.create("Fájl hozzáadva!", attachmentData.original_filename+" fájl hozzáadva", TOAST_STATUS.SUCCESS,5000); + Toast.create({ title: "Fájl hozzáadva!", message: attachmentData.original_filename+" fájl hozzáadva", status: TOAST_STATUS.SUCCESS, timeout: 5000 }); } diff --git a/resources/js/moduleJs/moduleBase.js b/resources/js/moduleJs/moduleBase.js index a391b64..e3681de 100644 --- a/resources/js/moduleJs/moduleBase.js +++ b/resources/js/moduleJs/moduleBase.js @@ -87,7 +87,7 @@ class ModuleBase { }); }else{ - Toast.create("Hiba!", 'Nincs csatolt fájl!', TOAST_STATUS.DANGER, 10000); + Toast.create({ title: "Hiba!", message: 'Nincs csatolt fájl!', status: TOAST_STATUS.DANGER, timeout: 10000 }); } } diff --git a/resources/js/moduleJs/order.js b/resources/js/moduleJs/order.js index dc68c63..bda89ff 100644 --- a/resources/js/moduleJs/order.js +++ b/resources/js/moduleJs/order.js @@ -288,7 +288,7 @@ window.OrderModule = function () { debug('Order delete success'); APP.loadMainContent(Opts.URL.index); }else{ - Toast.create("Error deleted !",'', TOAST_STATUS.DANGER,5000); + Toast.create({ title: "Error deleted !", message: '', status: TOAST_STATUS.DANGER, timeout: 5000 }); } } this.clickOrderDeleteConfirmed=function (event){ @@ -500,7 +500,7 @@ window.OrderModule = function () { } this.afterOrderSetSupplierOk=function (data) { - Toast.create("Supplier selected !",data.supplier.name , TOAST_STATUS.INFO,5000); + Toast.create({ title: "Supplier selected !", message: data.supplier.name , status: TOAST_STATUS.INFO, timeout: 5000 }); root.setSupplier(data.supplier.name,data.supplier.id); Order.setData({id:data.id}); root.Stepper.setOpts({'UrlData':{'supplierId':Order.supplierId,id:Order.id}}); @@ -544,7 +544,7 @@ window.OrderModule = function () { }else{ //ide kellene egy jo kis kerdes if(Order.supplierId!=supplierId){ - Toast.create("Supplier change to!", supplierName, TOAST_STATUS.WARNING,5000); + Toast.create({ title: "Supplier change to!", message: supplierName, status: TOAST_STATUS.WARNING, timeout: 5000 }); root.Stepper.clearLoaded(); Order=new DataModelOrder(); //Order.setData({supplierId:supplierId}); @@ -1606,7 +1606,7 @@ solution before template } this.afterOrderSendOk=function (data) { - Toast.create("Sent!",'Order Sent' , TOAST_STATUS.INFO,5000); + Toast.create({ title: "Sent!", message: 'Order Sent' , status: TOAST_STATUS.INFO, timeout: 5000 }); $('.buttonOrderSend').off('click'); $('.buttonOrderSend').prop('disabled',true); $('.statusNamePlace').removeClass('statusBlink'); diff --git a/resources/views/admin/fileBatchController/index.blade.php b/resources/views/admin/fileBatchController/index.blade.php index b01b5ff..2c58be4 100644 --- a/resources/views/admin/fileBatchController/index.blade.php +++ b/resources/views/admin/fileBatchController/index.blade.php @@ -402,7 +402,7 @@ ajaxData.forEach((value, key) => object[key] = value); errorData+=JSON.stringify(object)+'
\n
\n'; errorData+='Response> '+JSON.stringify(data)+'
\n'; - Toast.create('Feldolgozási hiba!', 'Kérjük jelezze a fejlesztőknek az alábbi adatokat:
\n'+errorData, TOAST_STATUS.DANGER); + Toast.create({ title: 'Feldolgozási hiba!', message: 'Kérjük jelezze a fejlesztőknek az alábbi adatokat:
\n'+errorData, status: TOAST_STATUS.DANGER }); } } }); @@ -664,7 +664,7 @@ ajaxData.forEach((value, key) => object[key] = value); errorData+=JSON.stringify(object)+'
\n
\n'; errorData+='Response> '+JSON.stringify(data)+'
\n'; - Toast.create('Feldolgozási hiba!', 'Kérjük jelezze a fejlesztőknek az alábbi adatokat:
\n'+errorData, TOAST_STATUS.DANGER); + Toast.create({ title: 'Feldolgozási hiba!', message: 'Kérjük jelezze a fejlesztőknek az alábbi adatokat:
\n'+errorData, status: TOAST_STATUS.DANGER }); } } }); diff --git a/resources/views/admin/priceList/create.blade.php b/resources/views/admin/priceList/create.blade.php index f0a27c0..3ca0803 100644 --- a/resources/views/admin/priceList/create.blade.php +++ b/resources/views/admin/priceList/create.blade.php @@ -305,7 +305,7 @@