File: /home/honghock/public_html/wp-content/plugins/ninja-tables/assets/js/fct_table_frontend.js
/*
* ATTENTION: An "eval-source-map" devtool has been used.
* This devtool is neither made for production nor for readable output files.
* It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools.
* If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/)
* or disable the default devtool with "devtool: false".
* If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/).
*/
/******/ (() => { // webpackBootstrap
/******/ var __webpack_modules__ = ({
/***/ "./resources/public/js/fct_table_frontend.js":
/*!***************************************************!*\
!*** ./resources/public/js/fct_table_frontend.js ***!
\***************************************************/
/***/ (() => {
eval("function _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction _regeneratorRuntime() { \"use strict\"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return r; }; var t, r = {}, e = Object.prototype, n = e.hasOwnProperty, o = \"function\" == typeof Symbol ? Symbol : {}, i = o.iterator || \"@@iterator\", a = o.asyncIterator || \"@@asyncIterator\", u = o.toStringTag || \"@@toStringTag\"; function c(t, r, e, n) { return Object.defineProperty(t, r, { value: e, enumerable: !n, configurable: !n, writable: !n }); } try { c({}, \"\"); } catch (t) { c = function c(t, r, e) { return t[r] = e; }; } function h(r, e, n, o) { var i = e && e.prototype instanceof Generator ? e : Generator, a = Object.create(i.prototype); return c(a, \"_invoke\", function (r, e, n) { var o = 1; return function (i, a) { if (3 === o) throw Error(\"Generator is already running\"); if (4 === o) { if (\"throw\" === i) throw a; return { value: t, done: !0 }; } for (n.method = i, n.arg = a;;) { var u = n.delegate; if (u) { var c = d(u, n); if (c) { if (c === f) continue; return c; } } if (\"next\" === n.method) n.sent = n._sent = n.arg;else if (\"throw\" === n.method) { if (1 === o) throw o = 4, n.arg; n.dispatchException(n.arg); } else \"return\" === n.method && n.abrupt(\"return\", n.arg); o = 3; var h = s(r, e, n); if (\"normal\" === h.type) { if (o = n.done ? 4 : 2, h.arg === f) continue; return { value: h.arg, done: n.done }; } \"throw\" === h.type && (o = 4, n.method = \"throw\", n.arg = h.arg); } }; }(r, n, new Context(o || [])), !0), a; } function s(t, r, e) { try { return { type: \"normal\", arg: t.call(r, e) }; } catch (t) { return { type: \"throw\", arg: t }; } } r.wrap = h; var f = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var l = {}; c(l, i, function () { return this; }); var p = Object.getPrototypeOf, y = p && p(p(x([]))); y && y !== e && n.call(y, i) && (l = y); var v = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(l); function g(t) { [\"next\", \"throw\", \"return\"].forEach(function (r) { c(t, r, function (t) { return this._invoke(r, t); }); }); } function AsyncIterator(t, r) { function e(o, i, a, u) { var c = s(t[o], t, i); if (\"throw\" !== c.type) { var h = c.arg, f = h.value; return f && \"object\" == _typeof(f) && n.call(f, \"__await\") ? r.resolve(f.__await).then(function (t) { e(\"next\", t, a, u); }, function (t) { e(\"throw\", t, a, u); }) : r.resolve(f).then(function (t) { h.value = t, a(h); }, function (t) { return e(\"throw\", t, a, u); }); } u(c.arg); } var o; c(this, \"_invoke\", function (t, n) { function i() { return new r(function (r, o) { e(t, n, r, o); }); } return o = o ? o.then(i, i) : i(); }, !0); } function d(r, e) { var n = e.method, o = r.i[n]; if (o === t) return e.delegate = null, \"throw\" === n && r.i[\"return\"] && (e.method = \"return\", e.arg = t, d(r, e), \"throw\" === e.method) || \"return\" !== n && (e.method = \"throw\", e.arg = new TypeError(\"The iterator does not provide a '\" + n + \"' method\")), f; var i = s(o, r.i, e.arg); if (\"throw\" === i.type) return e.method = \"throw\", e.arg = i.arg, e.delegate = null, f; var a = i.arg; return a ? a.done ? (e[r.r] = a.value, e.next = r.n, \"return\" !== e.method && (e.method = \"next\", e.arg = t), e.delegate = null, f) : a : (e.method = \"throw\", e.arg = new TypeError(\"iterator result is not an object\"), e.delegate = null, f); } function w(t) { this.tryEntries.push(t); } function m(r) { var e = r[4] || {}; e.type = \"normal\", e.arg = t, r[4] = e; } function Context(t) { this.tryEntries = [[-1]], t.forEach(w, this), this.reset(!0); } function x(r) { if (null != r) { var e = r[i]; if (e) return e.call(r); if (\"function\" == typeof r.next) return r; if (!isNaN(r.length)) { var o = -1, a = function e() { for (; ++o < r.length;) if (n.call(r, o)) return e.value = r[o], e.done = !1, e; return e.value = t, e.done = !0, e; }; return a.next = a; } } throw new TypeError(_typeof(r) + \" is not iterable\"); } return GeneratorFunction.prototype = GeneratorFunctionPrototype, c(v, \"constructor\", GeneratorFunctionPrototype), c(GeneratorFunctionPrototype, \"constructor\", GeneratorFunction), GeneratorFunction.displayName = c(GeneratorFunctionPrototype, u, \"GeneratorFunction\"), r.isGeneratorFunction = function (t) { var r = \"function\" == typeof t && t.constructor; return !!r && (r === GeneratorFunction || \"GeneratorFunction\" === (r.displayName || r.name)); }, r.mark = function (t) { return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, c(t, u, \"GeneratorFunction\")), t.prototype = Object.create(v), t; }, r.awrap = function (t) { return { __await: t }; }, g(AsyncIterator.prototype), c(AsyncIterator.prototype, a, function () { return this; }), r.AsyncIterator = AsyncIterator, r.async = function (t, e, n, o, i) { void 0 === i && (i = Promise); var a = new AsyncIterator(h(t, e, n, o), i); return r.isGeneratorFunction(e) ? a : a.next().then(function (t) { return t.done ? t.value : a.next(); }); }, g(v), c(v, u, \"Generator\"), c(v, i, function () { return this; }), c(v, \"toString\", function () { return \"[object Generator]\"; }), r.keys = function (t) { var r = Object(t), e = []; for (var n in r) e.unshift(n); return function t() { for (; e.length;) if ((n = e.pop()) in r) return t.value = n, t.done = !1, t; return t.done = !0, t; }; }, r.values = x, Context.prototype = { constructor: Context, reset: function reset(r) { if (this.prev = this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = \"next\", this.arg = t, this.tryEntries.forEach(m), !r) for (var e in this) \"t\" === e.charAt(0) && n.call(this, e) && !isNaN(+e.slice(1)) && (this[e] = t); }, stop: function stop() { this.done = !0; var t = this.tryEntries[0][4]; if (\"throw\" === t.type) throw t.arg; return this.rval; }, dispatchException: function dispatchException(r) { if (this.done) throw r; var e = this; function n(t) { a.type = \"throw\", a.arg = r, e.next = t; } for (var o = e.tryEntries.length - 1; o >= 0; --o) { var i = this.tryEntries[o], a = i[4], u = this.prev, c = i[1], h = i[2]; if (-1 === i[0]) return n(\"end\"), !1; if (!c && !h) throw Error(\"try statement without catch or finally\"); if (null != i[0] && i[0] <= u) { if (u < c) return this.method = \"next\", this.arg = t, n(c), !0; if (u < h) return n(h), !1; } } }, abrupt: function abrupt(t, r) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var n = this.tryEntries[e]; if (n[0] > -1 && n[0] <= this.prev && this.prev < n[2]) { var o = n; break; } } o && (\"break\" === t || \"continue\" === t) && o[0] <= r && r <= o[2] && (o = null); var i = o ? o[4] : {}; return i.type = t, i.arg = r, o ? (this.method = \"next\", this.next = o[2], f) : this.complete(i); }, complete: function complete(t, r) { if (\"throw\" === t.type) throw t.arg; return \"break\" === t.type || \"continue\" === t.type ? this.next = t.arg : \"return\" === t.type ? (this.rval = this.arg = t.arg, this.method = \"return\", this.next = \"end\") : \"normal\" === t.type && r && (this.next = r), f; }, finish: function finish(t) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var e = this.tryEntries[r]; if (e[2] === t) return this.complete(e[4], e[3]), m(e), f; } }, \"catch\": function _catch(t) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var e = this.tryEntries[r]; if (e[0] === t) { var n = e[4]; if (\"throw\" === n.type) { var o = n.arg; m(e); } return o; } } throw Error(\"illegal catch attempt\"); }, delegateYield: function delegateYield(r, e, n) { return this.delegate = { i: x(r), r: e, n: n }, \"next\" === this.method && (this.arg = t), f; } }, r; }\nfunction asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }\nfunction _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"next\", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"throw\", n); } _next(void 0); }); }; }\njQuery(document).ready(function ($) {\n jQuery(document).on('ninja_table_loaded', function (event, $table, settings) {\n if (settings.provider !== 'wp_fct') {\n return;\n }\n var tableId = settings === null || settings === void 0 ? void 0 : settings.table_id;\n if (!tableId) {\n return;\n }\n\n // Initialize bulk selection\n initBulkSelection($table, settings);\n\n // Triggered when the user change the variations.\n $table.on('change', '.nt_fct_variations_select', function (event) {\n var $el = $(this);\n var productId = $el.data('nt_variations_select');\n var variationId = $el.find(':selected').data('variation_id');\n var price = $el.find(':selected').data('formatted_price');\n var comparedPrice = $el.find(':selected').data('compared_price');\n $table.find('.nt_fct_add_to_cart_' + productId).attr('data-variation_id', variationId);\n $el.attr('data-current-variation-id', variationId);\n var $priceSpan = $el.closest('tr').find('.nt_fct_product_price');\n $priceSpan.attr('data-product_price', price);\n $priceSpan.text(price);\n var $comparedPriceSpan = $el.closest('tr').find('.nt-fct-compared-price');\n if (comparedPrice) {\n var formatedComparedPrice = '$' + (comparedPrice / 100).toFixed(2);\n $comparedPriceSpan.attr('data-compared_price', formatedComparedPrice);\n $comparedPriceSpan.text(formatedComparedPrice);\n } else {\n $comparedPriceSpan.hide();\n }\n var $image = $el.closest('tr').find('.fct_product_image');\n var imageSrc = $el.find(':selected').data('image_src');\n if (imageSrc) {\n $image.attr('src', imageSrc);\n $image.attr('data-image_src', imageSrc);\n }\n });\n\n // Triggered when the user changes the quantity.\n $table.on('change', '.nt_fct_quantity', function (event) {\n var $el = $(this);\n var productId = $el.data('product_id');\n $table.find('.nt_fct_add_to_cart_' + productId).attr('data-quantity', $el.val());\n });\n\n // Triggered when the user clicks on the add to cart button.\n $table.on('click', '.single_add_to_cart_button', /*#__PURE__*/function () {\n var _ref = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee(e) {\n var $thisbutton, productId, productQuantity, productVariationId;\n return _regeneratorRuntime().wrap(function _callee$(_context) {\n while (1) switch (_context.prev = _context.next) {\n case 0:\n e.preventDefault();\n $thisbutton = $(this);\n productId = $thisbutton.attr('data-product_id');\n productQuantity = $thisbutton.closest('tr').find('.nt_fct_quantity').val();\n productVariationId = $thisbutton.closest('tr').find('.nt_fct_variations_select').attr('data-current-variation-id');\n $.post(window.ninja_footables.ajax_url, {\n action: 'ninja_table_fct_add_to_cart',\n table_id: tableId,\n variation_id: productVariationId,\n quantity: productQuantity,\n ninja_table_public_nonce: window.ninja_footables.ninja_table_public_nonce\n }).then(function (response) {\n var _window;\n var $tableContainer = $('.ninja_table_wrapper');\n $tableContainer.find('.fluent-cart').show();\n $tableContainer.find('.fluent-cart').html(response.cart_html);\n if ((_window = window) !== null && _window !== void 0 && _window.fluentCartCart) {\n fluentCartCart.getCart();\n }\n })[\"catch\"](function (error) {\n console.error(error);\n });\n case 6:\n case \"end\":\n return _context.stop();\n }\n }, _callee, this);\n }));\n return function (_x) {\n return _ref.apply(this, arguments);\n };\n }());\n\n // Triggered when the user clicks on the Buy now button.\n $table.on('click', '.single_buy_now_button', /*#__PURE__*/function () {\n var _ref2 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee2(e) {\n var $thisbutton, productQuantity, productVariationId, checkOutUrl;\n return _regeneratorRuntime().wrap(function _callee2$(_context2) {\n while (1) switch (_context2.prev = _context2.next) {\n case 0:\n e.preventDefault();\n $thisbutton = $(this);\n productQuantity = parseInt($thisbutton.closest('tr').find('.nt_fct_quantity').val());\n productVariationId = $thisbutton.closest('tr').find('.nt_fct_variations_select').attr('data-current-variation-id');\n if (window.NinjaTablesFCTProducts) {\n checkOutUrl = window.NinjaTablesFCTProducts.checkOutUrl;\n window.location.href = checkOutUrl + '&fluent_cart_instant_checkout=' + productVariationId + '&quantity=' + productQuantity;\n }\n case 5:\n case \"end\":\n return _context2.stop();\n }\n }, _callee2, this);\n }));\n return function (_x2) {\n return _ref2.apply(this, arguments);\n };\n }());\n });\n\n // Bulk Selection Functions\n function initBulkSelection($table, settings) {\n var tableId = settings.table_id;\n addBulkActionsHeader($table, tableId);\n addCheckboxToMainHeader($table);\n addCheckboxesToRows($table);\n initBulkEventHandlers($table, settings);\n $table.on('postdraw.ft.table', function () {\n addCheckboxesToRows($table);\n });\n }\n function addBulkActionsHeader($table, tableId) {\n var $thead = $table.find('thead');\n var existingColumns = $table.find('thead tr.footable-header th').length;\n var bulkActionsHtml = \"\\n <tr class=\\\"footable_bulk_actions\\\">\\n <th colspan=\\\"\".concat(existingColumns + 1, \"\\\" style=\\\"padding: 8px 15px; background-color: #f8f9fa; border-bottom: 1px solid #dee2e6;\\\">\\n <div class=\\\"bulk_actions_container\\\">\\n <span class=\\\"selected_count\\\">0 selected</span>\\n <div class=\\\"bulk_actions_controls\\\">\\n <select class=\\\"bulk_action_select\\\">\\n <option value=\\\"\\\">Choose Action</option>\\n <option value=\\\"compare\\\">Compare Products</option>\\n <option value=\\\"add_to_cart\\\">Add to Cart</option>\\n </select>\\n <button class=\\\"bulk_action_apply\\\">Apply</button>\\n </div>\\n </div>\\n </th>\\n </tr>\\n \");\n $thead.prepend(bulkActionsHtml);\n }\n function addCheckboxToMainHeader($table) {\n var $headerRow = $table.find('thead tr.footable-header');\n $headerRow.prepend('<th class=\"bulk-select-header\"><input type=\"checkbox\" class=\"bulk_select_all\" title=\"Select All\"></th>');\n }\n function addCheckboxesToRows($table) {\n $table.find('tbody tr').each(function () {\n var $row = $(this);\n if ($row.find('.bulk_select_item').length > 0) {\n return;\n }\n var productId = extractProductId($row);\n var checkboxHtml = \"\\n <td class=\\\"bulk-select-cell\\\">\\n <input type=\\\"checkbox\\\" class=\\\"bulk_select_item\\\" \\n data-product-id=\\\"\".concat(productId, \"\\\"\\n title=\\\"Select Product\\\">\\n </td>\\n \");\n $row.prepend(checkboxHtml);\n });\n }\n function extractProductId($row) {\n var productId = null;\n var $addToCartBtn = $row.find('[data-product_id]');\n if ($addToCartBtn.length) {\n productId = $addToCartBtn.attr('data-product_id') || $addToCartBtn.data('product_id');\n }\n if (!productId) {\n var $variationsSelect = $row.find('.nt_fct_variations_select');\n if ($variationsSelect.length) {\n productId = $variationsSelect.data('nt_variations_select');\n }\n }\n if (!productId) {\n var $quantityInput = $row.find('.nt_fct_quantity');\n if ($quantityInput.length) {\n productId = $quantityInput.data('product_id');\n }\n }\n return productId || 'row_' + $row.index();\n }\n function initBulkEventHandlers($table, settings) {\n $table.on('change', '.bulk_select_all', function () {\n var isChecked = $(this).is(':checked');\n $table.find('.bulk_select_item').prop('checked', isChecked);\n updateSelectedCount($table);\n });\n $table.on('change', '.bulk_select_item', function () {\n updateSelectedCount($table);\n updateSelectAllState($table);\n });\n $table.on('click', '.bulk_action_apply', function () {\n var action = $table.find('.bulk_action_select').val();\n var selectedItems = getSelectedItems($table, settings);\n if (!action) {\n alert('Please select an action');\n return;\n }\n if (selectedItems.length === 0) {\n alert('Please select at least one item');\n return;\n }\n switch (action) {\n case 'compare':\n handleCompareProducts($table, selectedItems, settings);\n break;\n case 'add_to_cart':\n handleBulkAddToCart($table, selectedItems, settings);\n break;\n }\n });\n }\n function updateSelectedCount($table) {\n var selectedCount = $table.find('.bulk_select_item:checked').length;\n $table.find('.selected_count').text(\"\".concat(selectedCount, \" selected\"));\n }\n function updateSelectAllState($table) {\n var totalItems = $table.find('.bulk_select_item').length;\n var selectedItems = $table.find('.bulk_select_item:checked').length;\n var isAllSelected = totalItems > 0 && totalItems === selectedItems;\n $table.find('.bulk_select_all').prop('checked', isAllSelected);\n }\n function getSelectedItems($table, settings) {\n var selectedItems = [];\n var ft = FooTable.get($table);\n $table.find('.bulk_select_item:checked').each(function () {\n var $checkbox = $(this);\n var $row = $checkbox.closest('tr');\n var productId = $checkbox.data('product-id');\n var rowData = null;\n if (ft && ft.rows && ft.rows.all) {\n var ftRow = ft.rows.all.find(function (row) {\n if (row.$el && row.$el[0] === $row[0]) {\n return true;\n }\n return false;\n });\n rowData = ftRow ? ftRow.value : null;\n }\n selectedItems.push({\n productId: productId,\n $row: $row,\n rowData: rowData,\n checkbox: $checkbox\n });\n });\n return selectedItems;\n }\n function handleCompareProducts($table, selectedItems, settings) {\n if (selectedItems.length < 2) {\n alert('Please select at least 2 products to compare');\n return;\n }\n if (selectedItems.length > 5) {\n alert('You can compare maximum 5 products at a time');\n return;\n }\n createComparisonModal(selectedItems, settings);\n }\n function handleBulkAddToCart($table, selectedItems, settings) {\n var products = {};\n selectedItems.forEach(function (item) {\n var $row = item.$row;\n var productId = item.productId;\n var quantity = $row.find('.nt_fct_quantity').val() || 1;\n var variationId = $row.find('.nt_fct_variations_select').attr('data-current-variation-id') || '';\n products[productId] = {\n quantity: parseInt(quantity),\n variation_id: variationId\n };\n });\n $.post(window.ninja_footables.ajax_url, {\n action: 'ninja_table_fct_add_to_cart',\n table_id: settings.table_id,\n products: products,\n ninja_table_public_nonce: window.ninja_footables.ninja_table_public_nonce\n }).then(function (response) {\n var _window2;\n var $tableContainer = $('.ninja_table_wrapper');\n $tableContainer.find('.fluent-cart').show();\n if (response.cart_html) {\n $tableContainer.find('.fluent-cart').html(response.cart_html);\n }\n if ((_window2 = window) !== null && _window2 !== void 0 && _window2.fluentCartCart) {\n fluentCartCart.getCart();\n }\n clearSelections($table);\n })[\"catch\"](function (error) {\n alert('Failed to add items to cart. Please try again.');\n });\n }\n function createComparisonModal(selectedItems, settings) {\n var modalId = 'product_comparison_modal_' + settings.table_id;\n $('#' + modalId).remove();\n var modalHtml = \"\\n <div id=\\\"\".concat(modalId, \"\\\" class=\\\"nt_modal_overlay\\\">\\n <div class=\\\"nt_modal_content\\\">\\n <div class=\\\"nt_modal_header\\\">\\n <h3>Product Comparison (\").concat(selectedItems.length, \" products)</h3>\\n <button class=\\\"nt_modal_close\\\" type=\\\"button\\\">×</button>\\n </div>\\n <div class=\\\"nt_modal_body\\\">\\n <div id=\\\"comparison_table_container\\\">\\n <div class=\\\"loading\\\">Generating comparison...</div>\\n </div>\\n </div>\\n <div class=\\\"nt_modal_footer\\\">\\n <button class=\\\"nt_btn nt_btn_secondary\\\" id=\\\"close_comparison\\\">Close</button>\\n </div>\\n </div>\\n </div>\\n \");\n $('body').append(modalHtml);\n setTimeout(function () {\n generateComparisonTable(selectedItems, settings, modalId);\n }, 100);\n $('#' + modalId).fadeIn();\n $(\"#\".concat(modalId, \" .nt_modal_close, #close_comparison\")).on('click', function () {\n $('#' + modalId).fadeOut(function () {\n $(this).remove();\n });\n });\n $('#' + modalId).on('click', function (e) {\n if (e.target === this) {\n $(this).fadeOut(function () {\n $(this).remove();\n });\n }\n });\n $(document).on('keydown.comparison_modal', function (e) {\n if (e.keyCode === 27) {\n $('#' + modalId).fadeOut(function () {\n $(this).remove();\n });\n $(document).off('keydown.comparison_modal');\n }\n });\n }\n function generateComparisonTable(selectedItems, settings, modalId) {\n if (selectedItems.length === 0) return;\n var tableHtml = '<div class=\"comparison-table-wrapper\"><table class=\"nt_comparison_table\">';\n\n // Header row with product info\n tableHtml += '<thead><tr><th class=\"property-column\">Property</th>';\n selectedItems.forEach(function (item, index) {\n var title = extractProductTitle(item.rowData) || \"Product \".concat(index + 1);\n var image = extractProductImage(item.rowData);\n tableHtml += \"<th class=\\\"product-column\\\">\\n <div class=\\\"product-header\\\">\\n \".concat(image ? \"<img src=\\\"\".concat(image, \"\\\" alt=\\\"\").concat(title, \"\\\" class=\\\"product-thumb\\\">\") : '', \"\\n <div class=\\\"product-title\\\">\").concat(title, \"</div>\\n </div>\\n </th>\");\n });\n tableHtml += '</tr></thead><tbody>';\n\n // Use settings columns array to generate comparison rows\n if (settings.columns && Array.isArray(settings.columns)) {\n settings.columns.forEach(function (column) {\n // Skip editing column and hidden columns\n if (column.key === '____editing____' || !column.visible) {\n return;\n }\n\n // Check if any selected item has data for this column\n var hasData = selectedItems.some(function (item) {\n return item.rowData && item.rowData[column.key] !== undefined && item.rowData[column.key] !== '';\n });\n if (!hasData) {\n return;\n }\n tableHtml += \"<tr><td class=\\\"field-name\\\">\".concat(column.title || column.name, \"</td>\");\n selectedItems.forEach(function (item) {\n var value = item.rowData[column.key] || '';\n\n // For button type columns, render HTML directly\n if (column.original && column.original.data_type === 'button') {\n tableHtml += \"<td class=\\\"field-value field-button\\\">\".concat(value, \"</td>\");\n }\n // For image type columns, render HTML directly\n else if (column.original && column.original.data_type === 'image') {\n tableHtml += \"<td class=\\\"field-value field-image\\\">\".concat(value, \"</td>\");\n }\n // For other HTML content columns\n else if (column.original && column.original.enable_html_content === 'true') {\n tableHtml += \"<td class=\\\"field-value field-html\\\">\".concat(value, \"</td>\");\n }\n // For regular text columns, clean the HTML\n else {\n var cleanValue = cleanHtmlValue(value);\n tableHtml += \"<td class=\\\"field-value\\\">\".concat(cleanValue, \"</td>\");\n }\n });\n tableHtml += '</tr>';\n });\n }\n tableHtml += '</tbody></table></div>';\n $(\"#\".concat(modalId, \" #comparison_table_container\")).html(tableHtml);\n }\n function extractProductTitle(rowData) {\n if (!rowData) return '';\n var titleFields = ['fct_post_title', 'title', 'name', 'product_name'];\n for (var _i = 0, _titleFields = titleFields; _i < _titleFields.length; _i++) {\n var field = _titleFields[_i];\n if (rowData[field]) {\n return cleanHtmlValue(rowData[field]);\n }\n }\n return 'Product';\n }\n function extractProductImage(rowData) {\n if (!rowData || !rowData.fct_product_image) return '';\n var imgMatch = rowData.fct_product_image.match(/src=\"([^\"]+)\"/);\n return imgMatch ? imgMatch[1] : '';\n }\n function cleanHtmlValue(value) {\n if (!value) return '';\n var tempDiv = document.createElement('div');\n tempDiv.innerHTML = value;\n var text = tempDiv.textContent || tempDiv.innerText || '';\n text = text.replace(/\\s+/g, ' ').trim();\n if (text.length > 100) {\n text = text.substring(0, 97) + '...';\n }\n return text;\n }\n function clearSelections($table) {\n $table.find('.bulk_select_item').prop('checked', false);\n $table.find('.bulk_select_all').prop('checked', false);\n $table.find('.bulk_action_select').val('');\n updateSelectedCount($table);\n }\n\n // Add CSS styles\n var bulkSelectionStyles = \"\\n <style id=\\\"nt-bulk-selection-styles\\\">\\n .bulk-select-header {\\n width: 40px;\\n text-align: center;\\n padding: 8px !important;\\n }\\n \\n .bulk-select-cell {\\n width: 40px;\\n text-align: center;\\n padding: 8px !important;\\n }\\n \\n .bulk_actions_container {\\n display: flex;\\n justify-content: flex-start;\\n align-items: center;\\n width: 100%;\\n gap: 5px;\\n }\\n \\n .selected_count {\\n font-size: 12px;\\n color: #666;\\n font-weight: 500;\\n }\\n \\n .bulk_actions_controls {\\n display: flex;\\n align-items: center;\\n gap: 8px;\\n }\\n \\n .bulk_action_select {\\n padding: 4px 8px;\\n border: 1px solid #ddd;\\n border-radius: 3px;\\n font-size: 12px;\\n min-width: 130px;\\n }\\n \\n .bulk_action_apply {\\n padding: 4px 12px;\\n background: #007cba;\\n color: white;\\n border: none;\\n border-radius: 3px;\\n cursor: pointer;\\n font-size: 12px;\\n transition: background-color 0.2s;\\n }\\n \\n .bulk_action_apply:hover {\\n background: #005a87;\\n }\\n \\n .field-button {\\n text-align: center;\\n }\\n \\n .field-button a {\\n display: inline-block;\\n padding: 6px 12px;\\n text-decoration: none;\\n border-radius: 4px;\\n font-size: 12px;\\n }\\n \\n .field-image {\\n text-align: center;\\n }\\n \\n .field-image img {\\n max-width: 80px;\\n max-height: 80px;\\n object-fit: cover;\\n border-radius: 4px;\\n }\\n \\n .field-html {\\n max-width: 250px;\\n word-wrap: break-word;\\n }\\n \\n .field-html * {\\n font-size: 12px !important;\\n line-height: 1.2 !important;\\n }\\n \\n .nt_modal_overlay {\\n position: fixed;\\n top: 0;\\n left: 0;\\n width: 100%;\\n height: 100%;\\n background: rgba(0, 0, 0, 0.6);\\n display: none;\\n z-index: 10000;\\n overflow-y: auto;\\n }\\n \\n .nt_modal_content {\\n position: relative;\\n margin: 50px auto;\\n background: white;\\n border-radius: 8px;\\n max-width: 95%;\\n width: 1200px;\\n max-height: 90vh;\\n overflow: hidden;\\n box-shadow: 0 10px 30px rgba(0,0,0,0.3);\\n }\\n \\n .nt_modal_header {\\n padding: 20px 25px;\\n border-bottom: 1px solid #eee;\\n display: flex;\\n justify-content: space-between;\\n align-items: center;\\n background: #f8f9fa;\\n }\\n \\n .nt_modal_header h3 {\\n margin: 0;\\n font-size: 18px;\\n color: #333;\\n }\\n \\n .nt_modal_close {\\n background: none;\\n border: none;\\n font-size: 24px;\\n cursor: pointer;\\n color: #666;\\n padding: 0;\\n width: 30px;\\n height: 30px;\\n display: flex;\\n align-items: center;\\n justify-content: center;\\n }\\n \\n .nt_modal_close:hover {\\n color: #000;\\n }\\n \\n .nt_modal_body {\\n padding: 0;\\n max-height: calc(90vh - 140px);\\n overflow: auto;\\n }\\n \\n .nt_modal_footer {\\n padding: 15px 25px;\\n border-top: 1px solid #eee;\\n text-align: right;\\n background: #f8f9fa;\\n }\\n \\n .comparison-table-wrapper {\\n overflow: auto;\\n max-height: calc(90vh - 140px);\\n }\\n \\n .nt_comparison_table {\\n width: 100%;\\n border-collapse: collapse;\\n font-size: 14px;\\n }\\n \\n .nt_comparison_table th,\\n .nt_comparison_table td {\\n padding: 12px 15px;\\n border: 1px solid #ddd;\\n text-align: left;\\n vertical-align: top;\\n }\\n \\n .nt_comparison_table th {\\n background-color: #f5f5f5;\\n font-weight: 600;\\n position: sticky;\\n top: 0;\\n z-index: 10;\\n }\\n \\n .nt_comparison_table .property-column {\\n width: 150px;\\n background-color: #f8f9fa;\\n font-weight: 600;\\n position: sticky;\\n left: 0;\\n z-index: 11;\\n }\\n \\n .nt_comparison_table .product-column {\\n min-width: 200px;\\n text-align: center;\\n }\\n \\n .product-header {\\n display: flex;\\n flex-direction: column;\\n align-items: center;\\n gap: 8px;\\n }\\n \\n .product-thumb {\\n width: 60px;\\n height: 60px;\\n object-fit: cover;\\n border-radius: 4px;\\n }\\n \\n .product-title {\\n font-weight: 600;\\n font-size: 13px;\\n line-height: 1.3;\\n }\\n \\n .field-name {\\n background-color: #f8f9fa;\\n font-weight: 500;\\n position: sticky;\\n left: 0;\\n z-index: 5;\\n }\\n \\n .field-value {\\n max-width: 200px;\\n word-wrap: break-word;\\n }\\n \\n .nt_comparison_table tr:nth-child(even) {\\n background-color: #fdfdfd;\\n }\\n \\n .nt_btn {\\n padding: 10px 20px;\\n border: none;\\n border-radius: 4px;\\n cursor: pointer;\\n text-decoration: none;\\n display: inline-block;\\n font-size: 14px;\\n transition: all 0.2s;\\n }\\n \\n .nt_btn_secondary {\\n background: #6c757d;\\n color: white;\\n }\\n \\n .nt_btn_secondary:hover {\\n background: #545b62;\\n }\\n \\n .bulk_select_item, .bulk_select_all {\\n cursor: pointer;\\n transform: scale(1.1);\\n }\\n \\n .footable_bulk_actions {\\n border-bottom: 2px solid #007cba;\\n }\\n \\n .loading {\\n text-align: center;\\n padding: 40px;\\n color: #666;\\n }\\n \\n @media (max-width: 768px) {\\n .nt_modal_content {\\n margin: 20px;\\n width: calc(100% - 40px);\\n max-height: calc(100vh - 40px);\\n }\\n \\n .bulk_actions_container {\\n flex-direction: column;\\n align-items: flex-start;\\n gap: 8px;\\n }\\n \\n .nt_comparison_table th,\\n .nt_comparison_table td {\\n padding: 8px 10px;\\n font-size: 12px;\\n }\\n \\n .product-thumb {\\n width: 40px;\\n height: 40px;\\n }\\n }\\n </style>\\n \";\n if (!$('#nt-bulk-selection-styles').length) {\n $('head').append(bulkSelectionStyles);\n }\n\n // Cart update functionality\n document.addEventListener('click', function (e) {\n if (e.target.closest('.fluent-cart-cart-list-item-delete-button') || e.target.closest('.fluent-cart-cart-list-item-increase-button') || e.target.closest('.fluent-cart-cart-list-item-decrease-button')) {\n var _window3;\n var getTotal = function getTotal() {\n var _window4;\n var data = fluentCartCart.getState();\n var total = 0;\n for (var key in data) {\n total += data[key].line_total / 100;\n }\n var currencySymbol = ((_window4 = window) === null || _window4 === void 0 || (_window4 = _window4.fluentcart_drawer_vars) === null || _window4 === void 0 ? void 0 : _window4.currency_sign) || '$';\n return currencySymbol + total.toFixed(2);\n };\n if ((_window3 = window) !== null && _window3 !== void 0 && _window3.fluentCartCart) {\n var $tableContainer = window.jQuery('.ninja_table_wrapper');\n var item = Object.keys(fluentCartCart.getState()).length;\n var content = 'item';\n if (item > 1) {\n content = 'items';\n }\n $tableContainer.find('.fluent-cart .nt_fct_item_count').html(item + ' ' + content);\n setTimeout(function () {\n $tableContainer.find('.fluent-cart .nt_fct_amount').html(getTotal());\n }, 500);\n }\n }\n });\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9yZXNvdXJjZXMvcHVibGljL2pzL2ZjdF90YWJsZV9mcm9udGVuZC5qcyIsIm5hbWVzIjpbIl9yZWdlbmVyYXRvclJ1bnRpbWUiLCJyIiwidCIsImUiLCJPYmplY3QiLCJwcm90b3R5cGUiLCJuIiwiaGFzT3duUHJvcGVydHkiLCJvIiwiU3ltYm9sIiwiaSIsIml0ZXJhdG9yIiwiYSIsImFzeW5jSXRlcmF0b3IiLCJ1IiwidG9TdHJpbmdUYWciLCJjIiwiZGVmaW5lUHJvcGVydHkiLCJ2YWx1ZSIsImVudW1lcmFibGUiLCJjb25maWd1cmFibGUiLCJ3cml0YWJsZSIsImgiLCJHZW5lcmF0b3IiLCJjcmVhdGUiLCJFcnJvciIsImRvbmUiLCJtZXRob2QiLCJhcmciLCJkZWxlZ2F0ZSIsImQiLCJmIiwic2VudCIsIl9zZW50IiwiZGlzcGF0Y2hFeGNlcHRpb24iLCJhYnJ1cHQiLCJzIiwidHlwZSIsIkNvbnRleHQiLCJjYWxsIiwid3JhcCIsIkdlbmVyYXRvckZ1bmN0aW9uIiwiR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUiLCJsIiwicCIsImdldFByb3RvdHlwZU9mIiwieSIsIngiLCJ2IiwiZyIsImZvckVhY2giLCJfaW52b2tlIiwiQXN5bmNJdGVyYXRvciIsIl90eXBlb2YiLCJyZXNvbHZlIiwiX19hd2FpdCIsInRoZW4iLCJUeXBlRXJyb3IiLCJuZXh0IiwidyIsInRyeUVudHJpZXMiLCJwdXNoIiwibSIsInJlc2V0IiwiaXNOYU4iLCJsZW5ndGgiLCJkaXNwbGF5TmFtZSIsImlzR2VuZXJhdG9yRnVuY3Rpb24iLCJjb25zdHJ1Y3RvciIsIm5hbWUiLCJtYXJrIiwic2V0UHJvdG90eXBlT2YiLCJfX3Byb3RvX18iLCJhd3JhcCIsImFzeW5jIiwiUHJvbWlzZSIsImtleXMiLCJ1bnNoaWZ0IiwicG9wIiwidmFsdWVzIiwicHJldiIsImNoYXJBdCIsInNsaWNlIiwic3RvcCIsInJ2YWwiLCJjb21wbGV0ZSIsImZpbmlzaCIsIl9jYXRjaCIsImRlbGVnYXRlWWllbGQiLCJhc3luY0dlbmVyYXRvclN0ZXAiLCJfYXN5bmNUb0dlbmVyYXRvciIsImFyZ3VtZW50cyIsImFwcGx5IiwiX25leHQiLCJfdGhyb3ciLCJqUXVlcnkiLCJkb2N1bWVudCIsInJlYWR5IiwiJCIsIm9uIiwiZXZlbnQiLCIkdGFibGUiLCJzZXR0aW5ncyIsInByb3ZpZGVyIiwidGFibGVJZCIsInRhYmxlX2lkIiwiaW5pdEJ1bGtTZWxlY3Rpb24iLCIkZWwiLCJwcm9kdWN0SWQiLCJkYXRhIiwidmFyaWF0aW9uSWQiLCJmaW5kIiwicHJpY2UiLCJjb21wYXJlZFByaWNlIiwiYXR0ciIsIiRwcmljZVNwYW4iLCJjbG9zZXN0IiwidGV4dCIsIiRjb21wYXJlZFByaWNlU3BhbiIsImZvcm1hdGVkQ29tcGFyZWRQcmljZSIsInRvRml4ZWQiLCJoaWRlIiwiJGltYWdlIiwiaW1hZ2VTcmMiLCJ2YWwiLCJfcmVmIiwiX2NhbGxlZSIsIiR0aGlzYnV0dG9uIiwicHJvZHVjdFF1YW50aXR5IiwicHJvZHVjdFZhcmlhdGlvbklkIiwiX2NhbGxlZSQiLCJfY29udGV4dCIsInByZXZlbnREZWZhdWx0IiwicG9zdCIsIndpbmRvdyIsIm5pbmphX2Zvb3RhYmxlcyIsImFqYXhfdXJsIiwiYWN0aW9uIiwidmFyaWF0aW9uX2lkIiwicXVhbnRpdHkiLCJuaW5qYV90YWJsZV9wdWJsaWNfbm9uY2UiLCJyZXNwb25zZSIsIl93aW5kb3ciLCIkdGFibGVDb250YWluZXIiLCJzaG93IiwiaHRtbCIsImNhcnRfaHRtbCIsImZsdWVudENhcnRDYXJ0IiwiZ2V0Q2FydCIsImVycm9yIiwiY29uc29sZSIsIl94IiwiX3JlZjIiLCJfY2FsbGVlMiIsImNoZWNrT3V0VXJsIiwiX2NhbGxlZTIkIiwiX2NvbnRleHQyIiwicGFyc2VJbnQiLCJOaW5qYVRhYmxlc0ZDVFByb2R1Y3RzIiwibG9jYXRpb24iLCJocmVmIiwiX3gyIiwiYWRkQnVsa0FjdGlvbnNIZWFkZXIiLCJhZGRDaGVja2JveFRvTWFpbkhlYWRlciIsImFkZENoZWNrYm94ZXNUb1Jvd3MiLCJpbml0QnVsa0V2ZW50SGFuZGxlcnMiLCIkdGhlYWQiLCJleGlzdGluZ0NvbHVtbnMiLCJidWxrQWN0aW9uc0h0bWwiLCJjb25jYXQiLCJwcmVwZW5kIiwiJGhlYWRlclJvdyIsImVhY2giLCIkcm93IiwiZXh0cmFjdFByb2R1Y3RJZCIsImNoZWNrYm94SHRtbCIsIiRhZGRUb0NhcnRCdG4iLCIkdmFyaWF0aW9uc1NlbGVjdCIsIiRxdWFudGl0eUlucHV0IiwiaW5kZXgiLCJpc0NoZWNrZWQiLCJpcyIsInByb3AiLCJ1cGRhdGVTZWxlY3RlZENvdW50IiwidXBkYXRlU2VsZWN0QWxsU3RhdGUiLCJzZWxlY3RlZEl0ZW1zIiwiZ2V0U2VsZWN0ZWRJdGVtcyIsImFsZXJ0IiwiaGFuZGxlQ29tcGFyZVByb2R1Y3RzIiwiaGFuZGxlQnVsa0FkZFRvQ2FydCIsInNlbGVjdGVkQ291bnQiLCJ0b3RhbEl0ZW1zIiwiaXNBbGxTZWxlY3RlZCIsImZ0IiwiRm9vVGFibGUiLCJnZXQiLCIkY2hlY2tib3giLCJyb3dEYXRhIiwicm93cyIsImFsbCIsImZ0Um93Iiwicm93IiwiY2hlY2tib3giLCJjcmVhdGVDb21wYXJpc29uTW9kYWwiLCJwcm9kdWN0cyIsIml0ZW0iLCJfd2luZG93MiIsImNsZWFyU2VsZWN0aW9ucyIsIm1vZGFsSWQiLCJyZW1vdmUiLCJtb2RhbEh0bWwiLCJhcHBlbmQiLCJzZXRUaW1lb3V0IiwiZ2VuZXJhdGVDb21wYXJpc29uVGFibGUiLCJmYWRlSW4iLCJmYWRlT3V0IiwidGFyZ2V0Iiwia2V5Q29kZSIsIm9mZiIsInRhYmxlSHRtbCIsInRpdGxlIiwiZXh0cmFjdFByb2R1Y3RUaXRsZSIsImltYWdlIiwiZXh0cmFjdFByb2R1Y3RJbWFnZSIsImNvbHVtbnMiLCJBcnJheSIsImlzQXJyYXkiLCJjb2x1bW4iLCJrZXkiLCJ2aXNpYmxlIiwiaGFzRGF0YSIsInNvbWUiLCJ1bmRlZmluZWQiLCJvcmlnaW5hbCIsImRhdGFfdHlwZSIsImVuYWJsZV9odG1sX2NvbnRlbnQiLCJjbGVhblZhbHVlIiwiY2xlYW5IdG1sVmFsdWUiLCJ0aXRsZUZpZWxkcyIsIl9pIiwiX3RpdGxlRmllbGRzIiwiZmllbGQiLCJmY3RfcHJvZHVjdF9pbWFnZSIsImltZ01hdGNoIiwibWF0Y2giLCJ0ZW1wRGl2IiwiY3JlYXRlRWxlbWVudCIsImlubmVySFRNTCIsInRleHRDb250ZW50IiwiaW5uZXJUZXh0IiwicmVwbGFjZSIsInRyaW0iLCJzdWJzdHJpbmciLCJidWxrU2VsZWN0aW9uU3R5bGVzIiwiYWRkRXZlbnRMaXN0ZW5lciIsIl93aW5kb3czIiwiZ2V0VG90YWwiLCJfd2luZG93NCIsImdldFN0YXRlIiwidG90YWwiLCJsaW5lX3RvdGFsIiwiY3VycmVuY3lTeW1ib2wiLCJmbHVlbnRjYXJ0X2RyYXdlcl92YXJzIiwiY3VycmVuY3lfc2lnbiIsImNvbnRlbnQiXSwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL3Jlc291cmNlcy9wdWJsaWMvanMvZmN0X3RhYmxlX2Zyb250ZW5kLmpzPzZjMzkiXSwic291cmNlc0NvbnRlbnQiOlsialF1ZXJ5KGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbiAoJCkge1xuICAgIGpRdWVyeShkb2N1bWVudCkub24oJ25pbmphX3RhYmxlX2xvYWRlZCcsIGZ1bmN0aW9uIChldmVudCwgJHRhYmxlLCBzZXR0aW5ncykge1xuICAgICAgICBpZiAoc2V0dGluZ3MucHJvdmlkZXIgIT09ICd3cF9mY3QnKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB0YWJsZUlkID0gc2V0dGluZ3M/LnRhYmxlX2lkO1xuICAgICAgICBpZiAoIXRhYmxlSWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEluaXRpYWxpemUgYnVsayBzZWxlY3Rpb25cbiAgICAgICAgaW5pdEJ1bGtTZWxlY3Rpb24oJHRhYmxlLCBzZXR0aW5ncyk7XG5cbiAgICAgICAgLy8gVHJpZ2dlcmVkIHdoZW4gdGhlIHVzZXIgY2hhbmdlIHRoZSB2YXJpYXRpb25zLlxuICAgICAgICAkdGFibGUub24oJ2NoYW5nZScsICcubnRfZmN0X3ZhcmlhdGlvbnNfc2VsZWN0JywgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgICAgICBjb25zdCAkZWwgPSAkKHRoaXMpO1xuICAgICAgICAgICAgY29uc3QgcHJvZHVjdElkID0gJGVsLmRhdGEoJ250X3ZhcmlhdGlvbnNfc2VsZWN0Jyk7XG4gICAgICAgICAgICBjb25zdCB2YXJpYXRpb25JZCA9ICRlbC5maW5kKCc6c2VsZWN0ZWQnKS5kYXRhKCd2YXJpYXRpb25faWQnKTtcbiAgICAgICAgICAgIGNvbnN0IHByaWNlID0gJGVsLmZpbmQoJzpzZWxlY3RlZCcpLmRhdGEoJ2Zvcm1hdHRlZF9wcmljZScpO1xuICAgICAgICAgICAgY29uc3QgY29tcGFyZWRQcmljZSA9ICRlbC5maW5kKCc6c2VsZWN0ZWQnKS5kYXRhKCdjb21wYXJlZF9wcmljZScpO1xuXG4gICAgICAgICAgICAkdGFibGUuZmluZCgnLm50X2ZjdF9hZGRfdG9fY2FydF8nICsgcHJvZHVjdElkKS5hdHRyKCdkYXRhLXZhcmlhdGlvbl9pZCcsIHZhcmlhdGlvbklkKTtcbiAgICAgICAgICAgICRlbC5hdHRyKCdkYXRhLWN1cnJlbnQtdmFyaWF0aW9uLWlkJywgdmFyaWF0aW9uSWQpO1xuXG4gICAgICAgICAgICBjb25zdCAkcHJpY2VTcGFuID0gJGVsLmNsb3Nlc3QoJ3RyJykuZmluZCgnLm50X2ZjdF9wcm9kdWN0X3ByaWNlJylcbiAgICAgICAgICAgICRwcmljZVNwYW4uYXR0cignZGF0YS1wcm9kdWN0X3ByaWNlJywgcHJpY2UpO1xuICAgICAgICAgICAgJHByaWNlU3Bhbi50ZXh0KHByaWNlKTtcblxuICAgICAgICAgICAgY29uc3QgJGNvbXBhcmVkUHJpY2VTcGFuID0gJGVsLmNsb3Nlc3QoJ3RyJykuZmluZCgnLm50LWZjdC1jb21wYXJlZC1wcmljZScpO1xuICAgICAgICAgICAgaWYgKGNvbXBhcmVkUHJpY2UpIHtcbiAgICAgICAgICAgICAgICBsZXQgZm9ybWF0ZWRDb21wYXJlZFByaWNlID0gJyQnICsgKGNvbXBhcmVkUHJpY2UgLyAxMDApLnRvRml4ZWQoMik7XG4gICAgICAgICAgICAgICAgJGNvbXBhcmVkUHJpY2VTcGFuLmF0dHIoJ2RhdGEtY29tcGFyZWRfcHJpY2UnLCBmb3JtYXRlZENvbXBhcmVkUHJpY2UpO1xuICAgICAgICAgICAgICAgICRjb21wYXJlZFByaWNlU3Bhbi50ZXh0KGZvcm1hdGVkQ29tcGFyZWRQcmljZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICRjb21wYXJlZFByaWNlU3Bhbi5oaWRlKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0ICRpbWFnZSA9ICRlbC5jbG9zZXN0KCd0cicpLmZpbmQoJy5mY3RfcHJvZHVjdF9pbWFnZScpO1xuICAgICAgICAgICAgY29uc3QgaW1hZ2VTcmMgPSAkZWwuZmluZCgnOnNlbGVjdGVkJykuZGF0YSgnaW1hZ2Vfc3JjJyk7XG5cbiAgICAgICAgICAgIGlmIChpbWFnZVNyYykge1xuICAgICAgICAgICAgICAgICRpbWFnZS5hdHRyKCdzcmMnLCBpbWFnZVNyYyk7XG4gICAgICAgICAgICAgICAgJGltYWdlLmF0dHIoJ2RhdGEtaW1hZ2Vfc3JjJywgaW1hZ2VTcmMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICAvLyBUcmlnZ2VyZWQgd2hlbiB0aGUgdXNlciBjaGFuZ2VzIHRoZSBxdWFudGl0eS5cbiAgICAgICAgJHRhYmxlLm9uKCdjaGFuZ2UnLCAnLm50X2ZjdF9xdWFudGl0eScsIGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICAgICAgY29uc3QgJGVsID0gJCh0aGlzKTtcbiAgICAgICAgICAgIGNvbnN0IHByb2R1Y3RJZCA9ICRlbC5kYXRhKCdwcm9kdWN0X2lkJyk7XG4gICAgICAgICAgICAkdGFibGUuZmluZCgnLm50X2ZjdF9hZGRfdG9fY2FydF8nICsgcHJvZHVjdElkKS5hdHRyKCdkYXRhLXF1YW50aXR5JywgJGVsLnZhbCgpKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gVHJpZ2dlcmVkIHdoZW4gdGhlIHVzZXIgY2xpY2tzIG9uIHRoZSBhZGQgdG8gY2FydCBidXR0b24uXG4gICAgICAgICR0YWJsZS5vbignY2xpY2snLCAnLnNpbmdsZV9hZGRfdG9fY2FydF9idXR0b24nLCBhc3luYyBmdW5jdGlvbiAoZSkge1xuICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgY29uc3QgJHRoaXNidXR0b24gPSAkKHRoaXMpXG4gICAgICAgICAgICBjb25zdCBwcm9kdWN0SWQgPSAkdGhpc2J1dHRvbi5hdHRyKCdkYXRhLXByb2R1Y3RfaWQnKTtcbiAgICAgICAgICAgIGNvbnN0IHByb2R1Y3RRdWFudGl0eSA9ICR0aGlzYnV0dG9uLmNsb3Nlc3QoJ3RyJykuZmluZCgnLm50X2ZjdF9xdWFudGl0eScpLnZhbCgpO1xuICAgICAgICAgICAgY29uc3QgcHJvZHVjdFZhcmlhdGlvbklkID0gJHRoaXNidXR0b24uY2xvc2VzdCgndHInKS5maW5kKCcubnRfZmN0X3ZhcmlhdGlvbnNfc2VsZWN0JykuYXR0cignZGF0YS1jdXJyZW50LXZhcmlhdGlvbi1pZCcpO1xuXG4gICAgICAgICAgICAkLnBvc3Qod2luZG93Lm5pbmphX2Zvb3RhYmxlcy5hamF4X3VybCwge1xuICAgICAgICAgICAgICAgIGFjdGlvbjogJ25pbmphX3RhYmxlX2ZjdF9hZGRfdG9fY2FydCcsXG4gICAgICAgICAgICAgICAgdGFibGVfaWQ6IHRhYmxlSWQsXG4gICAgICAgICAgICAgICAgdmFyaWF0aW9uX2lkOiBwcm9kdWN0VmFyaWF0aW9uSWQsXG4gICAgICAgICAgICAgICAgcXVhbnRpdHk6IHByb2R1Y3RRdWFudGl0eSxcbiAgICAgICAgICAgICAgICBuaW5qYV90YWJsZV9wdWJsaWNfbm9uY2U6IHdpbmRvdy5uaW5qYV9mb290YWJsZXMubmluamFfdGFibGVfcHVibGljX25vbmNlXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC50aGVuKHJlc3BvbnNlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgJHRhYmxlQ29udGFpbmVyID0gJCgnLm5pbmphX3RhYmxlX3dyYXBwZXInKTtcbiAgICAgICAgICAgICAgICAgICAgJHRhYmxlQ29udGFpbmVyLmZpbmQoJy5mbHVlbnQtY2FydCcpLnNob3coKTtcbiAgICAgICAgICAgICAgICAgICAgJHRhYmxlQ29udGFpbmVyLmZpbmQoJy5mbHVlbnQtY2FydCcpLmh0bWwocmVzcG9uc2UuY2FydF9odG1sKTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAod2luZG93Py5mbHVlbnRDYXJ0Q2FydCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZmx1ZW50Q2FydENhcnQuZ2V0Q2FydCgpXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC5jYXRjaChlcnJvciA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgICAgICAvLyBUcmlnZ2VyZWQgd2hlbiB0aGUgdXNlciBjbGlja3Mgb24gdGhlIEJ1eSBub3cgYnV0dG9uLlxuICAgICAgICAkdGFibGUub24oJ2NsaWNrJywgJy5zaW5nbGVfYnV5X25vd19idXR0b24nLCBhc3luYyBmdW5jdGlvbiAoZSkge1xuICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgY29uc3QgJHRoaXNidXR0b24gPSAkKHRoaXMpXG4gICAgICAgICAgICBjb25zdCBwcm9kdWN0UXVhbnRpdHkgPSBwYXJzZUludCgkdGhpc2J1dHRvbi5jbG9zZXN0KCd0cicpLmZpbmQoJy5udF9mY3RfcXVhbnRpdHknKS52YWwoKSk7XG4gICAgICAgICAgICBjb25zdCBwcm9kdWN0VmFyaWF0aW9uSWQgPSAkdGhpc2J1dHRvbi5jbG9zZXN0KCd0cicpLmZpbmQoJy5udF9mY3RfdmFyaWF0aW9uc19zZWxlY3QnKS5hdHRyKCdkYXRhLWN1cnJlbnQtdmFyaWF0aW9uLWlkJyk7XG5cbiAgICAgICAgICAgIGlmICh3aW5kb3cuTmluamFUYWJsZXNGQ1RQcm9kdWN0cykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNoZWNrT3V0VXJsID0gd2luZG93Lk5pbmphVGFibGVzRkNUUHJvZHVjdHMuY2hlY2tPdXRVcmw7XG4gICAgICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSBjaGVja091dFVybCArICcmZmx1ZW50X2NhcnRfaW5zdGFudF9jaGVja291dD0nICsgcHJvZHVjdFZhcmlhdGlvbklkICsgJyZxdWFudGl0eT0nICsgcHJvZHVjdFF1YW50aXR5O1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9KTtcblxuICAgIC8vIEJ1bGsgU2VsZWN0aW9uIEZ1bmN0aW9uc1xuICAgIGZ1bmN0aW9uIGluaXRCdWxrU2VsZWN0aW9uKCR0YWJsZSwgc2V0dGluZ3MpIHtcbiAgICAgICAgY29uc3QgdGFibGVJZCA9IHNldHRpbmdzLnRhYmxlX2lkO1xuXG4gICAgICAgIGFkZEJ1bGtBY3Rpb25zSGVhZGVyKCR0YWJsZSwgdGFibGVJZCk7XG4gICAgICAgIGFkZENoZWNrYm94VG9NYWluSGVhZGVyKCR0YWJsZSk7XG4gICAgICAgIGFkZENoZWNrYm94ZXNUb1Jvd3MoJHRhYmxlKTtcbiAgICAgICAgaW5pdEJ1bGtFdmVudEhhbmRsZXJzKCR0YWJsZSwgc2V0dGluZ3MpO1xuXG4gICAgICAgICR0YWJsZS5vbigncG9zdGRyYXcuZnQudGFibGUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBhZGRDaGVja2JveGVzVG9Sb3dzKCR0YWJsZSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGFkZEJ1bGtBY3Rpb25zSGVhZGVyKCR0YWJsZSwgdGFibGVJZCkge1xuICAgICAgICBjb25zdCAkdGhlYWQgPSAkdGFibGUuZmluZCgndGhlYWQnKTtcbiAgICAgICAgY29uc3QgZXhpc3RpbmdDb2x1bW5zID0gJHRhYmxlLmZpbmQoJ3RoZWFkIHRyLmZvb3RhYmxlLWhlYWRlciB0aCcpLmxlbmd0aDtcblxuICAgICAgICBjb25zdCBidWxrQWN0aW9uc0h0bWwgPSBgXG4gICAgICAgICAgICA8dHIgY2xhc3M9XCJmb290YWJsZV9idWxrX2FjdGlvbnNcIj5cbiAgICAgICAgICAgICAgICA8dGggY29sc3Bhbj1cIiR7ZXhpc3RpbmdDb2x1bW5zICsgMX1cIiBzdHlsZT1cInBhZGRpbmc6IDhweCAxNXB4OyBiYWNrZ3JvdW5kLWNvbG9yOiAjZjhmOWZhOyBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2RlZTJlNjtcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJ1bGtfYWN0aW9uc19jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic2VsZWN0ZWRfY291bnRcIj4wIHNlbGVjdGVkPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJ1bGtfYWN0aW9uc19jb250cm9sc1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgY2xhc3M9XCJidWxrX2FjdGlvbl9zZWxlY3RcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIlwiPkNob29zZSBBY3Rpb248L29wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImNvbXBhcmVcIj5Db21wYXJlIFByb2R1Y3RzPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJhZGRfdG9fY2FydFwiPkFkZCB0byBDYXJ0PC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ1bGtfYWN0aW9uX2FwcGx5XCI+QXBwbHk8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L3RoPlxuICAgICAgICAgICAgPC90cj5cbiAgICAgICAgYDtcblxuICAgICAgICAkdGhlYWQucHJlcGVuZChidWxrQWN0aW9uc0h0bWwpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGFkZENoZWNrYm94VG9NYWluSGVhZGVyKCR0YWJsZSkge1xuICAgICAgICBjb25zdCAkaGVhZGVyUm93ID0gJHRhYmxlLmZpbmQoJ3RoZWFkIHRyLmZvb3RhYmxlLWhlYWRlcicpO1xuICAgICAgICAkaGVhZGVyUm93LnByZXBlbmQoJzx0aCBjbGFzcz1cImJ1bGstc2VsZWN0LWhlYWRlclwiPjxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBjbGFzcz1cImJ1bGtfc2VsZWN0X2FsbFwiIHRpdGxlPVwiU2VsZWN0IEFsbFwiPjwvdGg+Jyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYWRkQ2hlY2tib3hlc1RvUm93cygkdGFibGUpIHtcbiAgICAgICAgJHRhYmxlLmZpbmQoJ3Rib2R5IHRyJykuZWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBjb25zdCAkcm93ID0gJCh0aGlzKTtcblxuICAgICAgICAgICAgaWYgKCRyb3cuZmluZCgnLmJ1bGtfc2VsZWN0X2l0ZW0nKS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBwcm9kdWN0SWQgPSBleHRyYWN0UHJvZHVjdElkKCRyb3cpO1xuXG4gICAgICAgICAgICBjb25zdCBjaGVja2JveEh0bWwgPSBgXG4gICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiYnVsay1zZWxlY3QtY2VsbFwiPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgY2xhc3M9XCJidWxrX3NlbGVjdF9pdGVtXCIgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLXByb2R1Y3QtaWQ9XCIke3Byb2R1Y3RJZH1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU9XCJTZWxlY3QgUHJvZHVjdFwiPlxuICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICBgO1xuXG4gICAgICAgICAgICAkcm93LnByZXBlbmQoY2hlY2tib3hIdG1sKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZXh0cmFjdFByb2R1Y3RJZCgkcm93KSB7XG4gICAgICAgIGxldCBwcm9kdWN0SWQgPSBudWxsO1xuXG4gICAgICAgIGNvbnN0ICRhZGRUb0NhcnRCdG4gPSAkcm93LmZpbmQoJ1tkYXRhLXByb2R1Y3RfaWRdJyk7XG4gICAgICAgIGlmICgkYWRkVG9DYXJ0QnRuLmxlbmd0aCkge1xuICAgICAgICAgICAgcHJvZHVjdElkID0gJGFkZFRvQ2FydEJ0bi5hdHRyKCdkYXRhLXByb2R1Y3RfaWQnKSB8fCAkYWRkVG9DYXJ0QnRuLmRhdGEoJ3Byb2R1Y3RfaWQnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghcHJvZHVjdElkKSB7XG4gICAgICAgICAgICBjb25zdCAkdmFyaWF0aW9uc1NlbGVjdCA9ICRyb3cuZmluZCgnLm50X2ZjdF92YXJpYXRpb25zX3NlbGVjdCcpO1xuICAgICAgICAgICAgaWYgKCR2YXJpYXRpb25zU2VsZWN0Lmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHByb2R1Y3RJZCA9ICR2YXJpYXRpb25zU2VsZWN0LmRhdGEoJ250X3ZhcmlhdGlvbnNfc2VsZWN0Jyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXByb2R1Y3RJZCkge1xuICAgICAgICAgICAgY29uc3QgJHF1YW50aXR5SW5wdXQgPSAkcm93LmZpbmQoJy5udF9mY3RfcXVhbnRpdHknKTtcbiAgICAgICAgICAgIGlmICgkcXVhbnRpdHlJbnB1dC5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBwcm9kdWN0SWQgPSAkcXVhbnRpdHlJbnB1dC5kYXRhKCdwcm9kdWN0X2lkJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcHJvZHVjdElkIHx8ICdyb3dfJyArICRyb3cuaW5kZXgoKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpbml0QnVsa0V2ZW50SGFuZGxlcnMoJHRhYmxlLCBzZXR0aW5ncykge1xuICAgICAgICAkdGFibGUub24oJ2NoYW5nZScsICcuYnVsa19zZWxlY3RfYWxsJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgY29uc3QgaXNDaGVja2VkID0gJCh0aGlzKS5pcygnOmNoZWNrZWQnKTtcbiAgICAgICAgICAgICR0YWJsZS5maW5kKCcuYnVsa19zZWxlY3RfaXRlbScpLnByb3AoJ2NoZWNrZWQnLCBpc0NoZWNrZWQpO1xuICAgICAgICAgICAgdXBkYXRlU2VsZWN0ZWRDb3VudCgkdGFibGUpO1xuICAgICAgICB9KTtcblxuICAgICAgICAkdGFibGUub24oJ2NoYW5nZScsICcuYnVsa19zZWxlY3RfaXRlbScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHVwZGF0ZVNlbGVjdGVkQ291bnQoJHRhYmxlKTtcbiAgICAgICAgICAgIHVwZGF0ZVNlbGVjdEFsbFN0YXRlKCR0YWJsZSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgICR0YWJsZS5vbignY2xpY2snLCAnLmJ1bGtfYWN0aW9uX2FwcGx5JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgY29uc3QgYWN0aW9uID0gJHRhYmxlLmZpbmQoJy5idWxrX2FjdGlvbl9zZWxlY3QnKS52YWwoKTtcbiAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkSXRlbXMgPSBnZXRTZWxlY3RlZEl0ZW1zKCR0YWJsZSwgc2V0dGluZ3MpO1xuXG4gICAgICAgICAgICBpZiAoIWFjdGlvbikge1xuICAgICAgICAgICAgICAgIGFsZXJ0KCdQbGVhc2Ugc2VsZWN0IGFuIGFjdGlvbicpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHNlbGVjdGVkSXRlbXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgYWxlcnQoJ1BsZWFzZSBzZWxlY3QgYXQgbGVhc3Qgb25lIGl0ZW0nKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHN3aXRjaCAoYWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAnY29tcGFyZSc6XG4gICAgICAgICAgICAgICAgICAgIGhhbmRsZUNvbXBhcmVQcm9kdWN0cygkdGFibGUsIHNlbGVjdGVkSXRlbXMsIHNldHRpbmdzKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAnYWRkX3RvX2NhcnQnOlxuICAgICAgICAgICAgICAgICAgICBoYW5kbGVCdWxrQWRkVG9DYXJ0KCR0YWJsZSwgc2VsZWN0ZWRJdGVtcywgc2V0dGluZ3MpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdXBkYXRlU2VsZWN0ZWRDb3VudCgkdGFibGUpIHtcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRDb3VudCA9ICR0YWJsZS5maW5kKCcuYnVsa19zZWxlY3RfaXRlbTpjaGVja2VkJykubGVuZ3RoO1xuICAgICAgICAkdGFibGUuZmluZCgnLnNlbGVjdGVkX2NvdW50JykudGV4dChgJHtzZWxlY3RlZENvdW50fSBzZWxlY3RlZGApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHVwZGF0ZVNlbGVjdEFsbFN0YXRlKCR0YWJsZSkge1xuICAgICAgICBjb25zdCB0b3RhbEl0ZW1zID0gJHRhYmxlLmZpbmQoJy5idWxrX3NlbGVjdF9pdGVtJykubGVuZ3RoO1xuICAgICAgICBjb25zdCBzZWxlY3RlZEl0ZW1zID0gJHRhYmxlLmZpbmQoJy5idWxrX3NlbGVjdF9pdGVtOmNoZWNrZWQnKS5sZW5ndGg7XG5cbiAgICAgICAgY29uc3QgaXNBbGxTZWxlY3RlZCA9IHRvdGFsSXRlbXMgPiAwICYmIHRvdGFsSXRlbXMgPT09IHNlbGVjdGVkSXRlbXM7XG4gICAgICAgICR0YWJsZS5maW5kKCcuYnVsa19zZWxlY3RfYWxsJykucHJvcCgnY2hlY2tlZCcsIGlzQWxsU2VsZWN0ZWQpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldFNlbGVjdGVkSXRlbXMoJHRhYmxlLCBzZXR0aW5ncykge1xuICAgICAgICBjb25zdCBzZWxlY3RlZEl0ZW1zID0gW107XG4gICAgICAgIGNvbnN0IGZ0ID0gRm9vVGFibGUuZ2V0KCR0YWJsZSk7XG5cbiAgICAgICAgJHRhYmxlLmZpbmQoJy5idWxrX3NlbGVjdF9pdGVtOmNoZWNrZWQnKS5lYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGNvbnN0ICRjaGVja2JveCA9ICQodGhpcyk7XG4gICAgICAgICAgICBjb25zdCAkcm93ID0gJGNoZWNrYm94LmNsb3Nlc3QoJ3RyJyk7XG4gICAgICAgICAgICBjb25zdCBwcm9kdWN0SWQgPSAkY2hlY2tib3guZGF0YSgncHJvZHVjdC1pZCcpO1xuXG4gICAgICAgICAgICBsZXQgcm93RGF0YSA9IG51bGw7XG4gICAgICAgICAgICBpZiAoZnQgJiYgZnQucm93cyAmJiBmdC5yb3dzLmFsbCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZ0Um93ID0gZnQucm93cy5hbGwuZmluZChyb3cgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAocm93LiRlbCAmJiByb3cuJGVsWzBdID09PSAkcm93WzBdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgcm93RGF0YSA9IGZ0Um93ID8gZnRSb3cudmFsdWUgOiBudWxsO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBzZWxlY3RlZEl0ZW1zLnB1c2goe1xuICAgICAgICAgICAgICAgIHByb2R1Y3RJZDogcHJvZHVjdElkLFxuICAgICAgICAgICAgICAgICRyb3c6ICRyb3csXG4gICAgICAgICAgICAgICAgcm93RGF0YTogcm93RGF0YSxcbiAgICAgICAgICAgICAgICBjaGVja2JveDogJGNoZWNrYm94XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIHNlbGVjdGVkSXRlbXM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaGFuZGxlQ29tcGFyZVByb2R1Y3RzKCR0YWJsZSwgc2VsZWN0ZWRJdGVtcywgc2V0dGluZ3MpIHtcbiAgICAgICAgaWYgKHNlbGVjdGVkSXRlbXMubGVuZ3RoIDwgMikge1xuICAgICAgICAgICAgYWxlcnQoJ1BsZWFzZSBzZWxlY3QgYXQgbGVhc3QgMiBwcm9kdWN0cyB0byBjb21wYXJlJyk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc2VsZWN0ZWRJdGVtcy5sZW5ndGggPiA1KSB7XG4gICAgICAgICAgICBhbGVydCgnWW91IGNhbiBjb21wYXJlIG1heGltdW0gNSBwcm9kdWN0cyBhdCBhIHRpbWUnKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNyZWF0ZUNvbXBhcmlzb25Nb2RhbChzZWxlY3RlZEl0ZW1zLCBzZXR0aW5ncyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaGFuZGxlQnVsa0FkZFRvQ2FydCgkdGFibGUsIHNlbGVjdGVkSXRlbXMsIHNldHRpbmdzKSB7XG4gICAgICAgIGNvbnN0IHByb2R1Y3RzID0ge307XG5cbiAgICAgICAgc2VsZWN0ZWRJdGVtcy5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICAgICAgY29uc3QgJHJvdyA9IGl0ZW0uJHJvdztcbiAgICAgICAgICAgIGNvbnN0IHByb2R1Y3RJZCA9IGl0ZW0ucHJvZHVjdElkO1xuICAgICAgICAgICAgY29uc3QgcXVhbnRpdHkgPSAkcm93LmZpbmQoJy5udF9mY3RfcXVhbnRpdHknKS52YWwoKSB8fCAxO1xuICAgICAgICAgICAgY29uc3QgdmFyaWF0aW9uSWQgPSAkcm93LmZpbmQoJy5udF9mY3RfdmFyaWF0aW9uc19zZWxlY3QnKS5hdHRyKCdkYXRhLWN1cnJlbnQtdmFyaWF0aW9uLWlkJykgfHwgJyc7XG5cbiAgICAgICAgICAgIHByb2R1Y3RzW3Byb2R1Y3RJZF0gPSB7XG4gICAgICAgICAgICAgICAgcXVhbnRpdHk6IHBhcnNlSW50KHF1YW50aXR5KSxcbiAgICAgICAgICAgICAgICB2YXJpYXRpb25faWQ6IHZhcmlhdGlvbklkXG4gICAgICAgICAgICB9O1xuICAgICAgICB9KTtcblxuICAgICAgICAkLnBvc3Qod2luZG93Lm5pbmphX2Zvb3RhYmxlcy5hamF4X3VybCwge1xuICAgICAgICAgICAgYWN0aW9uOiAnbmluamFfdGFibGVfZmN0X2FkZF90b19jYXJ0JyxcbiAgICAgICAgICAgIHRhYmxlX2lkOiBzZXR0aW5ncy50YWJsZV9pZCxcbiAgICAgICAgICAgIHByb2R1Y3RzOiBwcm9kdWN0cyxcbiAgICAgICAgICAgIG5pbmphX3RhYmxlX3B1YmxpY19ub25jZTogd2luZG93Lm5pbmphX2Zvb3RhYmxlcy5uaW5qYV90YWJsZV9wdWJsaWNfbm9uY2VcbiAgICAgICAgfSlcbiAgICAgICAgICAgIC50aGVuKHJlc3BvbnNlID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCAkdGFibGVDb250YWluZXIgPSAkKCcubmluamFfdGFibGVfd3JhcHBlcicpO1xuICAgICAgICAgICAgICAgICR0YWJsZUNvbnRhaW5lci5maW5kKCcuZmx1ZW50LWNhcnQnKS5zaG93KCk7XG5cbiAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2UuY2FydF9odG1sKSB7XG4gICAgICAgICAgICAgICAgICAgICR0YWJsZUNvbnRhaW5lci5maW5kKCcuZmx1ZW50LWNhcnQnKS5odG1sKHJlc3BvbnNlLmNhcnRfaHRtbCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHdpbmRvdz8uZmx1ZW50Q2FydENhcnQpIHtcbiAgICAgICAgICAgICAgICAgICAgZmx1ZW50Q2FydENhcnQuZ2V0Q2FydCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjbGVhclNlbGVjdGlvbnMoJHRhYmxlKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuY2F0Y2goZXJyb3IgPT4ge1xuICAgICAgICAgICAgICAgIGFsZXJ0KCdGYWlsZWQgdG8gYWRkIGl0ZW1zIHRvIGNhcnQuIFBsZWFzZSB0cnkgYWdhaW4uJyk7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVDb21wYXJpc29uTW9kYWwoc2VsZWN0ZWRJdGVtcywgc2V0dGluZ3MpIHtcbiAgICAgICAgY29uc3QgbW9kYWxJZCA9ICdwcm9kdWN0X2NvbXBhcmlzb25fbW9kYWxfJyArIHNldHRpbmdzLnRhYmxlX2lkO1xuXG4gICAgICAgICQoJyMnICsgbW9kYWxJZCkucmVtb3ZlKCk7XG5cbiAgICAgICAgY29uc3QgbW9kYWxIdG1sID0gYFxuICAgICAgICAgICAgPGRpdiBpZD1cIiR7bW9kYWxJZH1cIiBjbGFzcz1cIm50X21vZGFsX292ZXJsYXlcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibnRfbW9kYWxfY29udGVudFwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibnRfbW9kYWxfaGVhZGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aDM+UHJvZHVjdCBDb21wYXJpc29uICgke3NlbGVjdGVkSXRlbXMubGVuZ3RofSBwcm9kdWN0cyk8L2gzPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cIm50X21vZGFsX2Nsb3NlXCIgdHlwZT1cImJ1dHRvblwiPiZ0aW1lczs8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJudF9tb2RhbF9ib2R5XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPVwiY29tcGFyaXNvbl90YWJsZV9jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibG9hZGluZ1wiPkdlbmVyYXRpbmcgY29tcGFyaXNvbi4uLjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibnRfbW9kYWxfZm9vdGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwibnRfYnRuIG50X2J0bl9zZWNvbmRhcnlcIiBpZD1cImNsb3NlX2NvbXBhcmlzb25cIj5DbG9zZTwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICBgO1xuXG4gICAgICAgICQoJ2JvZHknKS5hcHBlbmQobW9kYWxIdG1sKTtcblxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIGdlbmVyYXRlQ29tcGFyaXNvblRhYmxlKHNlbGVjdGVkSXRlbXMsIHNldHRpbmdzLCBtb2RhbElkKTtcbiAgICAgICAgfSwgMTAwKTtcblxuICAgICAgICAkKCcjJyArIG1vZGFsSWQpLmZhZGVJbigpO1xuXG4gICAgICAgICQoYCMke21vZGFsSWR9IC5udF9tb2RhbF9jbG9zZSwgI2Nsb3NlX2NvbXBhcmlzb25gKS5vbignY2xpY2snLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAkKCcjJyArIG1vZGFsSWQpLmZhZGVPdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICQodGhpcykucmVtb3ZlKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgJCgnIycgKyBtb2RhbElkKS5vbignY2xpY2snLCBmdW5jdGlvbiAoZSkge1xuICAgICAgICAgICAgaWYgKGUudGFyZ2V0ID09PSB0aGlzKSB7XG4gICAgICAgICAgICAgICAgJCh0aGlzKS5mYWRlT3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgJCh0aGlzKS5yZW1vdmUoKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgJChkb2N1bWVudCkub24oJ2tleWRvd24uY29tcGFyaXNvbl9tb2RhbCcsIGZ1bmN0aW9uIChlKSB7XG4gICAgICAgICAgICBpZiAoZS5rZXlDb2RlID09PSAyNykge1xuICAgICAgICAgICAgICAgICQoJyMnICsgbW9kYWxJZCkuZmFkZU91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICQodGhpcykucmVtb3ZlKCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgJChkb2N1bWVudCkub2ZmKCdrZXlkb3duLmNvbXBhcmlzb25fbW9kYWwnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2VuZXJhdGVDb21wYXJpc29uVGFibGUoc2VsZWN0ZWRJdGVtcywgc2V0dGluZ3MsIG1vZGFsSWQpIHtcbiAgICAgICAgaWYgKHNlbGVjdGVkSXRlbXMubGVuZ3RoID09PSAwKSByZXR1cm47XG5cbiAgICAgICAgbGV0IHRhYmxlSHRtbCA9ICc8ZGl2IGNsYXNzPVwiY29tcGFyaXNvbi10YWJsZS13cmFwcGVyXCI+PHRhYmxlIGNsYXNzPVwibnRfY29tcGFyaXNvbl90YWJsZVwiPic7XG5cbiAgICAgICAgLy8gSGVhZGVyIHJvdyB3aXRoIHByb2R1Y3QgaW5mb1xuICAgICAgICB0YWJsZUh0bWwgKz0gJzx0aGVhZD48dHI+PHRoIGNsYXNzPVwicHJvcGVydHktY29sdW1uXCI+UHJvcGVydHk8L3RoPic7XG4gICAgICAgIHNlbGVjdGVkSXRlbXMuZm9yRWFjaCgoaXRlbSwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHRpdGxlID0gZXh0cmFjdFByb2R1Y3RUaXRsZShpdGVtLnJvd0RhdGEpIHx8IGBQcm9kdWN0ICR7aW5kZXggKyAxfWA7XG4gICAgICAgICAgICBjb25zdCBpbWFnZSA9IGV4dHJhY3RQcm9kdWN0SW1hZ2UoaXRlbS5yb3dEYXRhKTtcblxuICAgICAgICAgICAgdGFibGVIdG1sICs9IGA8dGggY2xhc3M9XCJwcm9kdWN0LWNvbHVtblwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwcm9kdWN0LWhlYWRlclwiPlxuICAgICAgICAgICAgICAgICAgICAke2ltYWdlID8gYDxpbWcgc3JjPVwiJHtpbWFnZX1cIiBhbHQ9XCIke3RpdGxlfVwiIGNsYXNzPVwicHJvZHVjdC10aHVtYlwiPmAgOiAnJ31cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInByb2R1Y3QtdGl0bGVcIj4ke3RpdGxlfTwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC90aD5gO1xuICAgICAgICB9KTtcbiAgICAgICAgdGFibGVIdG1sICs9ICc8L3RyPjwvdGhlYWQ+PHRib2R5Pic7XG5cbiAgICAgICAgLy8gVXNlIHNldHRpbmdzIGNvbHVtbnMgYXJyYXkgdG8gZ2VuZXJhdGUgY29tcGFyaXNvbiByb3dzXG4gICAgICAgIGlmIChzZXR0aW5ncy5jb2x1bW5zICYmIEFycmF5LmlzQXJyYXkoc2V0dGluZ3MuY29sdW1ucykpIHtcbiAgICAgICAgICAgIHNldHRpbmdzLmNvbHVtbnMuZm9yRWFjaChjb2x1bW4gPT4ge1xuICAgICAgICAgICAgICAgIC8vIFNraXAgZWRpdGluZyBjb2x1bW4gYW5kIGhpZGRlbiBjb2x1bW5zXG4gICAgICAgICAgICAgICAgaWYgKGNvbHVtbi5rZXkgPT09ICdfX19fZWRpdGluZ19fX18nIHx8ICFjb2x1bW4udmlzaWJsZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLy8gQ2hlY2sgaWYgYW55IHNlbGVjdGVkIGl0ZW0gaGFzIGRhdGEgZm9yIHRoaXMgY29sdW1uXG4gICAgICAgICAgICAgICAgY29uc3QgaGFzRGF0YSA9IHNlbGVjdGVkSXRlbXMuc29tZShpdGVtID0+XG4gICAgICAgICAgICAgICAgICAgIGl0ZW0ucm93RGF0YSAmJiBpdGVtLnJvd0RhdGFbY29sdW1uLmtleV0gIT09IHVuZGVmaW5lZCAmJiBpdGVtLnJvd0RhdGFbY29sdW1uLmtleV0gIT09ICcnXG4gICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgIGlmICghaGFzRGF0YSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdGFibGVIdG1sICs9IGA8dHI+PHRkIGNsYXNzPVwiZmllbGQtbmFtZVwiPiR7Y29sdW1uLnRpdGxlIHx8IGNvbHVtbi5uYW1lfTwvdGQ+YDtcblxuICAgICAgICAgICAgICAgIHNlbGVjdGVkSXRlbXMuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBpdGVtLnJvd0RhdGFbY29sdW1uLmtleV0gfHwgJyc7XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gRm9yIGJ1dHRvbiB0eXBlIGNvbHVtbnMsIHJlbmRlciBIVE1MIGRpcmVjdGx5XG4gICAgICAgICAgICAgICAgICAgIGlmIChjb2x1bW4ub3JpZ2luYWwgJiYgY29sdW1uLm9yaWdpbmFsLmRhdGFfdHlwZSA9PT0gJ2J1dHRvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlSHRtbCArPSBgPHRkIGNsYXNzPVwiZmllbGQtdmFsdWUgZmllbGQtYnV0dG9uXCI+JHt2YWx1ZX08L3RkPmA7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgLy8gRm9yIGltYWdlIHR5cGUgY29sdW1ucywgcmVuZGVyIEhUTUwgZGlyZWN0bHlcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoY29sdW1uLm9yaWdpbmFsICYmIGNvbHVtbi5vcmlnaW5hbC5kYXRhX3R5cGUgPT09ICdpbWFnZScpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlSHRtbCArPSBgPHRkIGNsYXNzPVwiZmllbGQtdmFsdWUgZmllbGQtaW1hZ2VcIj4ke3ZhbHVlfTwvdGQ+YDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAvLyBGb3Igb3RoZXIgSFRNTCBjb250ZW50IGNvbHVtbnNcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoY29sdW1uLm9yaWdpbmFsICYmIGNvbHVtbi5vcmlnaW5hbC5lbmFibGVfaHRtbF9jb250ZW50ID09PSAndHJ1ZScpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlSHRtbCArPSBgPHRkIGNsYXNzPVwiZmllbGQtdmFsdWUgZmllbGQtaHRtbFwiPiR7dmFsdWV9PC90ZD5gO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIC8vIEZvciByZWd1bGFyIHRleHQgY29sdW1ucywgY2xlYW4gdGhlIEhUTUxcbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjbGVhblZhbHVlID0gY2xlYW5IdG1sVmFsdWUodmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGFibGVIdG1sICs9IGA8dGQgY2xhc3M9XCJmaWVsZC12YWx1ZVwiPiR7Y2xlYW5WYWx1ZX08L3RkPmA7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIHRhYmxlSHRtbCArPSAnPC90cj4nO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICB0YWJsZUh0bWwgKz0gJzwvdGJvZHk+PC90YWJsZT48L2Rpdj4nO1xuXG4gICAgICAgICQoYCMke21vZGFsSWR9ICNjb21wYXJpc29uX3RhYmxlX2NvbnRhaW5lcmApLmh0bWwodGFibGVIdG1sKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBleHRyYWN0UHJvZHVjdFRpdGxlKHJvd0RhdGEpIHtcbiAgICAgICAgaWYgKCFyb3dEYXRhKSByZXR1cm4gJyc7XG5cbiAgICAgICAgY29uc3QgdGl0bGVGaWVsZHMgPSBbJ2ZjdF9wb3N0X3RpdGxlJywgJ3RpdGxlJywgJ25hbWUnLCAncHJvZHVjdF9uYW1lJ107XG5cbiAgICAgICAgZm9yIChsZXQgZmllbGQgb2YgdGl0bGVGaWVsZHMpIHtcbiAgICAgICAgICAgIGlmIChyb3dEYXRhW2ZpZWxkXSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBjbGVhbkh0bWxWYWx1ZShyb3dEYXRhW2ZpZWxkXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gJ1Byb2R1Y3QnO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGV4dHJhY3RQcm9kdWN0SW1hZ2Uocm93RGF0YSkge1xuICAgICAgICBpZiAoIXJvd0RhdGEgfHwgIXJvd0RhdGEuZmN0X3Byb2R1Y3RfaW1hZ2UpIHJldHVybiAnJztcblxuICAgICAgICBjb25zdCBpbWdNYXRjaCA9IHJvd0RhdGEuZmN0X3Byb2R1Y3RfaW1hZ2UubWF0Y2goL3NyYz1cIihbXlwiXSspXCIvKTtcbiAgICAgICAgcmV0dXJuIGltZ01hdGNoID8gaW1nTWF0Y2hbMV0gOiAnJztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjbGVhbkh0bWxWYWx1ZSh2YWx1ZSkge1xuICAgICAgICBpZiAoIXZhbHVlKSByZXR1cm4gJyc7XG5cbiAgICAgICAgY29uc3QgdGVtcERpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICB0ZW1wRGl2LmlubmVySFRNTCA9IHZhbHVlO1xuXG4gICAgICAgIGxldCB0ZXh0ID0gdGVtcERpdi50ZXh0Q29udGVudCB8fCB0ZW1wRGl2LmlubmVyVGV4dCB8fCAnJztcbiAgICAgICAgdGV4dCA9IHRleHQucmVwbGFjZSgvXFxzKy9nLCAnICcpLnRyaW0oKTtcblxuICAgICAgICBpZiAodGV4dC5sZW5ndGggPiAxMDApIHtcbiAgICAgICAgICAgIHRleHQgPSB0ZXh0LnN1YnN0cmluZygwLCA5NykgKyAnLi4uJztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0ZXh0O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNsZWFyU2VsZWN0aW9ucygkdGFibGUpIHtcbiAgICAgICAgJHRhYmxlLmZpbmQoJy5idWxrX3NlbGVjdF9pdGVtJykucHJvcCgnY2hlY2tlZCcsIGZhbHNlKTtcbiAgICAgICAgJHRhYmxlLmZpbmQoJy5idWxrX3NlbGVjdF9hbGwnKS5wcm9wKCdjaGVja2VkJywgZmFsc2UpO1xuICAgICAgICAkdGFibGUuZmluZCgnLmJ1bGtfYWN0aW9uX3NlbGVjdCcpLnZhbCgnJyk7XG4gICAgICAgIHVwZGF0ZVNlbGVjdGVkQ291bnQoJHRhYmxlKTtcbiAgICB9XG5cbiAgICAvLyBBZGQgQ1NTIHN0eWxlc1xuICAgIGNvbnN0IGJ1bGtTZWxlY3Rpb25TdHlsZXMgPSBgXG4gICAgICAgIDxzdHlsZSBpZD1cIm50LWJ1bGstc2VsZWN0aW9uLXN0eWxlc1wiPlxuICAgICAgICAuYnVsay1zZWxlY3QtaGVhZGVyIHtcbiAgICAgICAgICAgIHdpZHRoOiA0MHB4O1xuICAgICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgICAgICAgcGFkZGluZzogOHB4ICFpbXBvcnRhbnQ7XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIC5idWxrLXNlbGVjdC1jZWxsIHtcbiAgICAgICAgICAgIHdpZHRoOiA0MHB4O1xuICAgICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgICAgICAgcGFkZGluZzogOHB4ICFpbXBvcnRhbnQ7XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIC5idWxrX2FjdGlvbnNfY29udGFpbmVyIHtcbiAgICAgICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7XG4gICAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgICAgICBnYXA6IDVweDtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgLnNlbGVjdGVkX2NvdW50IHtcbiAgICAgICAgICAgIGZvbnQtc2l6ZTogMTJweDtcbiAgICAgICAgICAgIGNvbG9yOiAjNjY2O1xuICAgICAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgLmJ1bGtfYWN0aW9uc19jb250cm9scyB7XG4gICAgICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgICAgICAgIGdhcDogOHB4O1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICAuYnVsa19hY3Rpb25fc2VsZWN0IHtcbiAgICAgICAgICAgIHBhZGRpbmc6IDRweCA4cHg7XG4gICAgICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAjZGRkO1xuICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogM3B4O1xuICAgICAgICAgICAgZm9udC1zaXplOiAxMnB4O1xuICAgICAgICAgICAgbWluLXdpZHRoOiAxMzBweDtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgLmJ1bGtfYWN0aW9uX2FwcGx5IHtcbiAgICAgICAgICAgIHBhZGRpbmc6IDRweCAxMnB4O1xuICAgICAgICAgICAgYmFja2dyb3VuZDogIzAwN2NiYTtcbiAgICAgICAgICAgIGNvbG9yOiB3aGl0ZTtcbiAgICAgICAgICAgIGJvcmRlcjogbm9uZTtcbiAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDNweDtcbiAgICAgICAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICAgICAgICAgIGZvbnQtc2l6ZTogMTJweDtcbiAgICAgICAgICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQtY29sb3IgMC4ycztcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgLmJ1bGtfYWN0aW9uX2FwcGx5OmhvdmVyIHtcbiAgICAgICAgICAgIGJhY2tncm91bmQ6ICMwMDVhODc7XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIC5maWVsZC1idXR0b24ge1xuICAgICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICAuZmllbGQtYnV0dG9uIGEge1xuICAgICAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgICAgICAgICAgcGFkZGluZzogNnB4IDEycHg7XG4gICAgICAgICAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gICAgICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7XG4gICAgICAgICAgICBmb250LXNpemU6IDEycHg7XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIC5maWVsZC1pbWFnZSB7XG4gICAgICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIC5maWVsZC1pbWFnZSBpbWcge1xuICAgICAgICAgICAgbWF4LXdpZHRoOiA4MHB4O1xuICAgICAgICAgICAgbWF4LWhlaWdodDogODBweDtcbiAgICAgICAgICAgIG9iamVjdC1maXQ6IGNvdmVyO1xuICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4O1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICAuZmllbGQtaHRtbCB7XG4gICAgICAgICAgICBtYXgtd2lkdGg6IDI1MHB4O1xuICAgICAgICAgICAgd29yZC13cmFwOiBicmVhay13b3JkO1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICAuZmllbGQtaHRtbCAqIHtcbiAgICAgICAgICAgIGZvbnQtc2l6ZTogMTJweCAhaW1wb3J0YW50O1xuICAgICAgICAgICAgbGluZS1oZWlnaHQ6IDEuMiAhaW1wb3J0YW50O1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICAubnRfbW9kYWxfb3ZlcmxheSB7XG4gICAgICAgICAgICBwb3NpdGlvbjogZml4ZWQ7XG4gICAgICAgICAgICB0b3A6IDA7XG4gICAgICAgICAgICBsZWZ0OiAwO1xuICAgICAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuNik7XG4gICAgICAgICAgICBkaXNwbGF5OiBub25lO1xuICAgICAgICAgICAgei1pbmRleDogMTAwMDA7XG4gICAgICAgICAgICBvdmVyZmxvdy15OiBhdXRvO1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICAubnRfbW9kYWxfY29udGVudCB7XG4gICAgICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICAgICAgICBtYXJnaW46IDUwcHggYXV0bztcbiAgICAgICAgICAgIGJhY2tncm91bmQ6IHdoaXRlO1xuICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogOHB4O1xuICAgICAgICAgICAgbWF4LXdpZHRoOiA5NSU7XG4gICAgICAgICAgICB3aWR0aDogMTIwMHB4O1xuICAgICAgICAgICAgbWF4LWhlaWdodDogOTB2aDtcbiAgICAgICAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICAgICAgICBib3gtc2hhZG93OiAwIDEwcHggMzBweCByZ2JhKDAsMCwwLDAuMyk7XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIC5udF9tb2RhbF9oZWFkZXIge1xuICAgICAgICAgICAgcGFkZGluZzogMjBweCAyNXB4O1xuICAgICAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNlZWU7XG4gICAgICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICAgICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgICAgICAgIGJhY2tncm91bmQ6ICNmOGY5ZmE7XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIC5udF9tb2RhbF9oZWFkZXIgaDMge1xuICAgICAgICAgICAgbWFyZ2luOiAwO1xuICAgICAgICAgICAgZm9udC1zaXplOiAxOHB4O1xuICAgICAgICAgICAgY29sb3I6ICMzMzM7XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIC5udF9tb2RhbF9jbG9zZSB7XG4gICAgICAgICAgICBiYWNrZ3JvdW5kOiBub25lO1xuICAgICAgICAgICAgYm9yZGVyOiBub25lO1xuICAgICAgICAgICAgZm9udC1zaXplOiAyNHB4O1xuICAgICAgICAgICAgY3Vyc29yOiBwb2ludGVyO1xuICAgICAgICAgICAgY29sb3I6ICM2NjY7XG4gICAgICAgICAgICBwYWRkaW5nOiAwO1xuICAgICAgICAgICAgd2lkdGg6IDMwcHg7XG4gICAgICAgICAgICBoZWlnaHQ6IDMwcHg7XG4gICAgICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICAubnRfbW9kYWxfY2xvc2U6aG92ZXIge1xuICAgICAgICAgICAgY29sb3I6ICMwMDA7XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIC5udF9tb2RhbF9ib2R5IHtcbiAgICAgICAgICAgIHBhZGRpbmc6IDA7XG4gICAgICAgICAgICBtYXgtaGVpZ2h0OiBjYWxjKDkwdmggLSAxNDBweCk7XG4gICAgICAgICAgICBvdmVyZmxvdzogYXV0bztcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgLm50X21vZGFsX2Zvb3RlciB7XG4gICAgICAgICAgICBwYWRkaW5nOiAxNXB4IDI1cHg7XG4gICAgICAgICAgICBib3JkZXItdG9wOiAxcHggc29saWQgI2VlZTtcbiAgICAgICAgICAgIHRleHQtYWxpZ246IHJpZ2h0O1xuICAgICAgICAgICAgYmFja2dyb3VuZDogI2Y4ZjlmYTtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgLmNvbXBhcmlzb24tdGFibGUtd3JhcHBlciB7XG4gICAgICAgICAgICBvdmVyZmxvdzogYXV0bztcbiAgICAgICAgICAgIG1heC1oZWlnaHQ6IGNhbGMoOTB2aCAtIDE0MHB4KTtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgLm50X2NvbXBhcmlzb25fdGFibGUge1xuICAgICAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgICAgICBib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlO1xuICAgICAgICAgICAgZm9udC1zaXplOiAxNHB4O1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICAubnRfY29tcGFyaXNvbl90YWJsZSB0aCxcbiAgICAgICAgLm50X2NvbXBhcmlzb25fdGFibGUgdGQge1xuICAgICAgICAgICAgcGFkZGluZzogMTJweCAxNXB4O1xuICAgICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgI2RkZDtcbiAgICAgICAgICAgIHRleHQtYWxpZ246IGxlZnQ7XG4gICAgICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogdG9wO1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICAubnRfY29tcGFyaXNvbl90YWJsZSB0aCB7XG4gICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjVmNWY1O1xuICAgICAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICAgICAgICAgIHBvc2l0aW9uOiBzdGlja3k7XG4gICAgICAgICAgICB0b3A6IDA7XG4gICAgICAgICAgICB6LWluZGV4OiAxMDtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgLm50X2NvbXBhcmlzb25fdGFibGUgLnByb3BlcnR5LWNvbHVtbiB7XG4gICAgICAgICAgICB3aWR0aDogMTUwcHg7XG4gICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjhmOWZhO1xuICAgICAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICAgICAgICAgIHBvc2l0aW9uOiBzdGlja3k7XG4gICAgICAgICAgICBsZWZ0OiAwO1xuICAgICAgICAgICAgei1pbmRleDogMTE7XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIC5udF9jb21wYXJpc29uX3RhYmxlIC5wcm9kdWN0LWNvbHVtbiB7XG4gICAgICAgICAgICBtaW4td2lkdGg6IDIwMHB4O1xuICAgICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICAucHJvZHVjdC1oZWFkZXIge1xuICAgICAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgICAgICAgZ2FwOiA4cHg7XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIC5wcm9kdWN0LXRodW1iIHtcbiAgICAgICAgICAgIHdpZHRoOiA2MHB4O1xuICAgICAgICAgICAgaGVpZ2h0OiA2MHB4O1xuICAgICAgICAgICAgb2JqZWN0LWZpdDogY292ZXI7XG4gICAgICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIC5wcm9kdWN0LXRpdGxlIHtcbiAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgICAgICAgICBmb250LXNpemU6IDEzcHg7XG4gICAgICAgICAgICBsaW5lLWhlaWdodDogMS4zO1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICAuZmllbGQtbmFtZSB7XG4gICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjhmOWZhO1xuICAgICAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgICAgICAgICAgIHBvc2l0aW9uOiBzdGlja3k7XG4gICAgICAgICAgICBsZWZ0OiAwO1xuICAgICAgICAgICAgei1pbmRleDogNTtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgLmZpZWxkLXZhbHVlIHtcbiAgICAgICAgICAgIG1heC13aWR0aDogMjAwcHg7XG4gICAgICAgICAgICB3b3JkLXdyYXA6IGJyZWFrLXdvcmQ7XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIC5udF9jb21wYXJpc29uX3RhYmxlIHRyOm50aC1jaGlsZChldmVuKSB7XG4gICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmRmZGZkO1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICAubnRfYnRuIHtcbiAgICAgICAgICAgIHBhZGRpbmc6IDEwcHggMjBweDtcbiAgICAgICAgICAgIGJvcmRlcjogbm9uZTtcbiAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDtcbiAgICAgICAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICAgICAgICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgICAgICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgICAgICAgIGZvbnQtc2l6ZTogMTRweDtcbiAgICAgICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjJzO1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICAubnRfYnRuX3NlY29uZGFyeSB7XG4gICAgICAgICAgICBiYWNrZ3JvdW5kOiAjNmM3NTdkO1xuICAgICAgICAgICAgY29sb3I6IHdoaXRlO1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICAubnRfYnRuX3NlY29uZGFyeTpob3ZlciB7XG4gICAgICAgICAgICBiYWNrZ3JvdW5kOiAjNTQ1YjYyO1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICAuYnVsa19zZWxlY3RfaXRlbSwgLmJ1bGtfc2VsZWN0X2FsbCB7XG4gICAgICAgICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDEuMSk7XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIC5mb290YWJsZV9idWxrX2FjdGlvbnMge1xuICAgICAgICAgICAgYm9yZGVyLWJvdHRvbTogMnB4IHNvbGlkICMwMDdjYmE7XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIC5sb2FkaW5nIHtcbiAgICAgICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICAgICAgICAgIHBhZGRpbmc6IDQwcHg7XG4gICAgICAgICAgICBjb2xvcjogIzY2NjtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgQG1lZGlhIChtYXgtd2lkdGg6IDc2OHB4KSB7XG4gICAgICAgICAgICAubnRfbW9kYWxfY29udGVudCB7XG4gICAgICAgICAgICAgICAgbWFyZ2luOiAyMHB4O1xuICAgICAgICAgICAgICAgIHdpZHRoOiBjYWxjKDEwMCUgLSA0MHB4KTtcbiAgICAgICAgICAgICAgICBtYXgtaGVpZ2h0OiBjYWxjKDEwMHZoIC0gNDBweCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIC5idWxrX2FjdGlvbnNfY29udGFpbmVyIHtcbiAgICAgICAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgICAgICAgICAgIGFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0O1xuICAgICAgICAgICAgICAgIGdhcDogOHB4O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgXG4gICAgICAgICAgICAubnRfY29tcGFyaXNvbl90YWJsZSB0aCxcbiAgICAgICAgICAgIC5udF9jb21wYXJpc29uX3RhYmxlIHRkIHtcbiAgICAgICAgICAgICAgICBwYWRkaW5nOiA4cHggMTBweDtcbiAgICAgICAgICAgICAgICBmb250LXNpemU6IDEycHg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIC5wcm9kdWN0LXRodW1iIHtcbiAgICAgICAgICAgICAgICB3aWR0aDogNDBweDtcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IDQwcHg7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgPC9zdHlsZT5cbiAgICBgO1xuXG4gICAgaWYgKCEkKCcjbnQtYnVsay1zZWxlY3Rpb24tc3R5bGVzJykubGVuZ3RoKSB7XG4gICAgICAgICQoJ2hlYWQnKS5hcHBlbmQoYnVsa1NlbGVjdGlvblN0eWxlcyk7XG4gICAgfVxuXG4gICAgLy8gQ2FydCB1cGRhdGUgZnVuY3Rpb25hbGl0eVxuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgaWYgKGUudGFyZ2V0LmNsb3Nlc3QoJy5mbHVlbnQtY2FydC1jYXJ0LWxpc3QtaXRlbS1kZWxldGUtYnV0dG9uJykgfHxcbiAgICAgICAgICAgIGUudGFyZ2V0LmNsb3Nlc3QoJy5mbHVlbnQtY2FydC1jYXJ0LWxpc3QtaXRlbS1pbmNyZWFzZS1idXR0b24nKSB8fFxuICAgICAgICAgICAgZS50YXJnZXQuY2xvc2VzdCgnLmZsdWVudC1jYXJ0LWNhcnQtbGlzdC1pdGVtLWRlY3JlYXNlLWJ1dHRvbicpKSB7XG5cbiAgICAgICAgICAgIGlmICh3aW5kb3c/LmZsdWVudENhcnRDYXJ0KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgJHRhYmxlQ29udGFpbmVyID0gd2luZG93LmpRdWVyeSgnLm5pbmphX3RhYmxlX3dyYXBwZXInKTtcbiAgICAgICAgICAgICAgICBjb25zdCBpdGVtID0gT2JqZWN0LmtleXMoZmx1ZW50Q2FydENhcnQuZ2V0U3RhdGUoKSkubGVuZ3RoO1xuICAgICAgICAgICAgICAgIGxldCBjb250ZW50ID0gJ2l0ZW0nO1xuXG4gICAgICAgICAgICAgICAgaWYgKGl0ZW0gPiAxKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRlbnQgPSAnaXRlbXMnO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICR0YWJsZUNvbnRhaW5lci5maW5kKCcuZmx1ZW50LWNhcnQgLm50X2ZjdF9pdGVtX2NvdW50JykuaHRtbChpdGVtICsgJyAnICsgY29udGVudCk7XG5cbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgJHRhYmxlQ29udGFpbmVyLmZpbmQoJy5mbHVlbnQtY2FydCAubnRfZmN0X2Ftb3VudCcpLmh0bWwoZ2V0VG90YWwoKSk7XG4gICAgICAgICAgICAgICAgfSwgNTAwKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZnVuY3Rpb24gZ2V0VG90YWwoKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZGF0YSA9IGZsdWVudENhcnRDYXJ0LmdldFN0YXRlKCk7XG4gICAgICAgICAgICAgICAgbGV0IHRvdGFsID0gMDtcblxuICAgICAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IGluIGRhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgdG90YWwgKz0gZGF0YVtrZXldLmxpbmVfdG90YWwgLyAxMDA7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgY29uc3QgY3VycmVuY3lTeW1ib2wgPSB3aW5kb3c/LmZsdWVudGNhcnRfZHJhd2VyX3ZhcnM/LmN1cnJlbmN5X3NpZ24gfHwgJyQnO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIGN1cnJlbmN5U3ltYm9sICsgdG90YWwudG9GaXhlZCgyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0pO1xufSk7XG4iXSwibWFwcGluZ3MiOiI7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QU0sQ0FBQ3BHLE9BQU8sQ0FBQyw2Q0FBNkMsQ0FBQyxFQUFFO01BQUEsSUFBQTJJLFFBQUE7TUFBQSxJQWtCeERDLFFBQVEsR0FBakIsU0FBU0EsUUFBUUEsQ0FBQSxFQUFHO1FBQUEsSUFBQUMsUUFBQTtRQUNoQixJQUFNcEosSUFBSSxHQUFHc0MsY0FBYyxDQUFDK0csUUFBUSxDQUFDLENBQUM7UUFDdEMsSUFBSUMsS0FBSyxHQUFHLENBQUM7UUFFYixLQUFLLElBQU0vQixHQUFHLElBQUl2SCxJQUFJLEVBQUU7VUFDcEJzSixLQUFLLElBQUl0SixJQUFJLENBQUN1SCxHQUFHLENBQUMsQ0FBQ2dDLFVBQVUsR0FBRyxHQUFHO1FBQ3ZDO1FBRUEsSUFBTUMsY0FBYyxHQUFHLEVBQUFKLFFBQUEsR0FBQTNILE1BQU0sY0FBQTJILFFBQUEsZ0JBQUFBLFFBQUEsR0FBTkEsUUFBQSxDQUFRSyxzQkFBc0IsY0FBQUwsUUFBQSx1QkFBOUJBLFFBQUEsQ0FBZ0NNLGFBQWEsS0FBSSxHQUFHO1FBRTNFLE9BQU9GLGNBQWMsR0FBR0YsS0FBSyxDQUFDM0ksT0FBTyxDQUFDLENBQUMsQ0FBQztNQUM1QyxDQUFDO01BM0JELEtBQUF1SSxRQUFBLEdBQUl6SCxNQUFNLGNBQUF5SCxRQUFBLGVBQU5BLFFBQUEsQ0FBUTVHLGNBQWMsRUFBRTtRQUN4QixJQUFNSixlQUFlLEdBQUdULE1BQU0sQ0FBQ3ZDLE1BQU0sQ0FBQyxzQkFBc0IsQ0FBQztRQUM3RCxJQUFNOEcsSUFBSSxHQUFHek0sTUFBTSxDQUFDd0UsSUFBSSxDQUFDdUUsY0FBYyxDQUFDK0csUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDak0sTUFBTTtRQUMxRCxJQUFJdU0sT0FBTyxHQUFHLE1BQU07UUFFcEIsSUFBSTNELElBQUksR0FBRyxDQUFDLEVBQUU7VUFDVjJELE9BQU8sR0FBRyxPQUFPO1FBQ3JCO1FBRUF6SCxlQUFlLENBQUNoQyxJQUFJLENBQUMsaUNBQWlDLENBQUMsQ0FBQ2tDLElBQUksQ0FBQzRELElBQUksR0FBRyxHQUFHLEdBQUcyRCxPQUFPLENBQUM7UUFFbEZwRCxVQUFVLENBQUMsWUFBTTtVQUNickUsZUFBZSxDQUFDaEMsSUFBSSxDQUFDLDZCQUE2QixDQUFDLENBQUNrQyxJQUFJLENBQUMrRyxRQUFRLENBQUMsQ0FBQyxDQUFDO1FBQ3hFLENBQUMsRUFBRSxHQUFHLENBQUM7TUFDWDtJQWNKO0VBQ0osQ0FBQyxDQUFDO0FBQ04sQ0FBQyxDQUFDIiwiaWdub3JlTGlzdCI6W119\n//# sourceURL=webpack-internal:///./resources/public/js/fct_table_frontend.js\n");
/***/ })
/******/ });
/************************************************************************/
/******/
/******/ // startup
/******/ // Load entry module and return exports
/******/ // This entry module can't be inlined because the eval-source-map devtool is used.
/******/ var __webpack_exports__ = {};
/******/ __webpack_modules__["./resources/public/js/fct_table_frontend.js"]();
/******/
/******/ })()
;