32 lines
61 KiB
JavaScript
32 lines
61 KiB
JavaScript
/*
|
|
* ATTENTION: An "eval-source-map" devtool has been used.
|
|
* This devtool is neither made for production nor for readable output files.
|
|
* It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools.
|
|
* If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/)
|
|
* or disable the default devtool with "devtool: false".
|
|
* If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/).
|
|
*/
|
|
/******/ (() => { // webpackBootstrap
|
|
/******/ var __webpack_modules__ = ({
|
|
|
|
/***/ "./resources/js/service/vminfo.js":
|
|
/*!****************************************!*\
|
|
!*** ./resources/js/service/vminfo.js ***!
|
|
\****************************************/
|
|
/***/ (() => {
|
|
|
|
eval("$(document).ready(function () {\n // Initialize dropdown functionality\n function initializeDropdown() {\n // Toggle dropdown on click\n $(document).on(\"click\", \".dropdown-selected\", function (e) {\n e.stopPropagation();\n var $dropdown = $(this).closest(\".custom-dropdown\");\n var $options = $dropdown.find(\".dropdown-options\");\n var $selected = $(this);\n\n // Close other dropdowns\n $(\".custom-dropdown\").not($dropdown).find(\".dropdown-options\").removeClass(\"show\");\n $(\".custom-dropdown\").not($dropdown).find(\".dropdown-selected\").removeClass(\"active\");\n\n // Toggle current dropdown\n $options.toggleClass(\"show\");\n $selected.toggleClass(\"active\");\n });\n\n // Handle option selection\n $(document).on(\"click\", \".dropdown-option\", function (e) {\n e.stopPropagation();\n var $option = $(this);\n var $dropdown = $option.closest(\".custom-dropdown\");\n var $selected = $dropdown.find(\".dropdown-selected\");\n var $options = $dropdown.find(\".dropdown-options\");\n var $selectedText = $selected.find(\".selected-text\");\n\n // Get data from selected option\n var value = $option.data(\"value\");\n var months = $option.data(\"months\");\n var price = $option.data(\"price\");\n // Get text from the first span element to avoid getting badge text\n var text = $option.find('span').first().text();\n\n // Update selected text\n $selectedText.text(text);\n\n // Update hidden inputs\n $dropdown.closest(\"form\").find(\".hiddenMonths\").val(months);\n $dropdown.closest(\"form\").find(\".hiddenTotalPrice\").val(price);\n\n // Update selected state\n $options.find(\".dropdown-option\").removeClass(\"selected\");\n $option.addClass(\"selected\");\n\n // Close dropdown\n $options.removeClass(\"show\");\n $selected.removeClass(\"active\");\n\n // Trigger custom event for other components\n $dropdown.trigger(\"dropdown:changed\", {\n value: value,\n months: months,\n price: price,\n text: text\n });\n\n // Update price display using jQuery\n var $productContainer = $dropdown.closest('[data-product-id]');\n var basePrice = parseFloat($productContainer.data('base-price'));\n var selectedMonths = parseInt(months);\n console.log('Updating price display:', {\n basePrice: basePrice,\n selectedMonths: selectedMonths,\n productContainer: $productContainer.length\n });\n\n // Calculate prices\n var originalPrice = basePrice * selectedMonths;\n var savings = selectedMonths >= 12 ? Math.round(originalPrice * 0.1) : 0;\n var finalPrice = originalPrice - savings;\n\n // Update display\n $productContainer.find('.total-price-display').text('₫' + finalPrice.toLocaleString());\n $productContainer.find('.months-display').text(selectedMonths + ' tháng');\n $productContainer.find('.price-per-month').text('₫' + basePrice.toLocaleString() + '/tháng');\n $productContainer.find('.original-price').text('₫' + originalPrice.toLocaleString());\n $productContainer.find('.savings-amount').text('₫' + savings.toLocaleString());\n\n // Show/hide savings info\n if (savings > 0) {\n $productContainer.find('.savings-info').show();\n } else {\n $productContainer.find('.savings-info').hide();\n }\n });\n\n // Close dropdown when clicking outside\n $(document).on(\"click\", function (e) {\n if (!$(e.target).closest(\".custom-dropdown\").length) {\n $(\".dropdown-options\").removeClass(\"show\");\n $(\".dropdown-selected\").removeClass(\"active\");\n }\n });\n\n // Close dropdown on escape key\n $(document).on(\"keydown\", function (e) {\n if (e.key === \"Escape\") {\n $(\".dropdown-options\").removeClass(\"show\");\n $(\".dropdown-selected\").removeClass(\"active\");\n }\n });\n }\n\n // Initialize on page load\n initializeDropdown();\n\n // Optimize form submission to prevent blocking\n $(document).on('submit', 'form[action*=\"them-gio-hang\"]', function (e) {\n var $form = $(this);\n var $submitBtn = $form.find('button[type=\"submit\"]');\n\n // Disable submit button to prevent double submission\n $submitBtn.prop('disabled', true).text('Đang xử lý...');\n\n // Add loading state\n $form.addClass('submitting');\n\n // Re-enable button after 5 seconds as fallback\n setTimeout(function () {\n $submitBtn.prop('disabled', false).text('Đăng ký ngay');\n $form.removeClass('submitting');\n }, 5000);\n });\n\n // Cache utility functions - Single JSON approach\n var VM_INFO_CACHE_KEY = \"vm_info_cache\";\n function saveVMInfoToCache(templateId, data) {\n var ttl = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 30 * 60 * 1000;\n try {\n var now = new Date().getTime();\n var vmInfoCache = getVMInfoCache();\n if (!vmInfoCache) {\n vmInfoCache = {\n lastUpdated: now,\n data: {}\n };\n }\n vmInfoCache.data[templateId] = {\n value: data,\n expiry: now + ttl\n };\n vmInfoCache.lastUpdated = now;\n localStorage.setItem(VM_INFO_CACHE_KEY, JSON.stringify(vmInfoCache));\n } catch (e) {\n console.warn(\"VM Info cache save failed:\", e);\n }\n }\n function getVMInfoFromCache(templateId) {\n try {\n var vmInfoCache = getVMInfoCache();\n if (!vmInfoCache || !vmInfoCache.data[templateId]) {\n return null;\n }\n var item = vmInfoCache.data[templateId];\n var now = new Date().getTime();\n\n // Check if expired\n if (now > item.expiry) {\n removeVMInfoFromCache(templateId);\n return null;\n }\n return item.value;\n } catch (e) {\n console.warn(\"VM Info cache get failed:\", e);\n return null;\n }\n }\n function getVMInfoCache() {\n try {\n var cacheStr = localStorage.getItem(VM_INFO_CACHE_KEY);\n return cacheStr ? JSON.parse(cacheStr) : null;\n } catch (e) {\n console.warn(\"VM Info cache parse failed:\", e);\n return null;\n }\n }\n function removeVMInfoFromCache(templateId) {\n try {\n var vmInfoCache = getVMInfoCache();\n if (vmInfoCache && vmInfoCache.data[templateId]) {\n delete vmInfoCache.data[templateId];\n vmInfoCache.lastUpdated = new Date().getTime();\n localStorage.setItem(VM_INFO_CACHE_KEY, JSON.stringify(vmInfoCache));\n }\n } catch (e) {\n console.warn(\"VM Info cache remove failed:\", e);\n }\n }\n function clearExpiredVMInfoCache() {\n try {\n var vmInfoCache = getVMInfoCache();\n if (!vmInfoCache) {\n return;\n }\n var now = new Date().getTime();\n var hasExpired = false;\n Object.keys(vmInfoCache.data).forEach(function (templateId) {\n var item = vmInfoCache.data[templateId];\n if (now > item.expiry) {\n delete vmInfoCache.data[templateId];\n hasExpired = true;\n }\n });\n if (hasExpired) {\n vmInfoCache.lastUpdated = now;\n localStorage.setItem(VM_INFO_CACHE_KEY, JSON.stringify(vmInfoCache));\n }\n } catch (e) {\n console.warn(\"VM Info cache cleanup failed:\", e);\n }\n }\n\n // Re-initialize if content is dynamically loaded\n $(document).on(\"DOMContentLoaded\", initializeDropdown);\n\n // Load VM information for each product with caching (OS, CPU, RAM, Disk) - NON-BLOCKING\n function loadGuestOSInfo() {\n // Get unique template IDs to avoid duplicate API calls\n var templateIds = [];\n $(\".guest-os\").each(function () {\n var templateId = $(this).data(\"template-id\");\n if (templateId && !templateIds.includes(templateId)) {\n templateIds.push(templateId);\n }\n });\n\n // Load VM info in background without blocking form submission\n templateIds.forEach(function (templateId) {\n // Check cache first\n var cachedData = getVMInfoFromCache(templateId);\n if (cachedData) {\n // Use cached data\n updateVMInfoUI(templateId, cachedData);\n return;\n }\n\n // Add loading indicators\n addLoadingIndicators(templateId);\n\n // Call API to get complete VM info - with shorter timeout\n $.ajax({\n url: \"/api/v1/get-vm-info/\".concat(templateId, \"/guest_os,cpu_count,memory_size,disk_capacity\"),\n method: \"GET\",\n timeout: 5000,\n // Reduced timeout to 5 seconds\n headers: {\n \"X-CSRF-TOKEN\": $('meta[name=\"csrf-token\"]').attr(\"content\"),\n Accept: \"application/json\"\n },\n success: function success(response) {\n if (response.error === false && response.data) {\n var vmData = response.data;\n var processedData = processVMData(vmData);\n\n // Cache the result for 30 minutes\n saveVMInfoToCache(templateId, processedData);\n\n // Update UI\n updateVMInfoUI(templateId, processedData);\n } else {\n setFallbackValues(templateId);\n }\n },\n error: function error(xhr, status, _error) {\n console.warn(\"Failed to load VM info for template:\", templateId, _error);\n setFallbackValues(templateId);\n }\n });\n });\n }\n\n // Load VM info after a short delay to not block page load\n setTimeout(loadGuestOSInfo, 1000);\n\n // Process VM data from API response\n function processVMData(vmData) {\n var guestOS = vmData.guest_os || \"UNKNOWN\";\n var cpuCount = vmData.cpu_count || 0;\n var memoryMB = vmData.memory_size || 0;\n var diskBytes = vmData.disk_capacity || 0;\n return {\n guestOS: guestOS,\n formattedOS: formatOSName(guestOS),\n cpu: cpuCount,\n formattedCPU: \"\".concat(cpuCount, \" vCore\").concat(cpuCount > 1 ? \"s\" : \"\"),\n ram: Math.round(memoryMB / 1024 * 100) / 100,\n // Convert MB to GB, 2 decimal places\n formattedRAM: \"\".concat(Math.round(memoryMB / 1024 * 100) / 100, \" GB\"),\n disk: Math.round(diskBytes / (1024 * 1024 * 1024) * 100) / 100,\n // Convert bytes to GB\n formattedDisk: \"\".concat(Math.round(diskBytes / (1024 * 1024 * 1024) * 100) / 100, \" GB\")\n };\n }\n\n // Add loading indicators to all VM info elements\n function addLoadingIndicators(templateId) {\n var loadingIcon = '<i class=\"fas fa-spinner fa-spin text-orange-500 mr-1\"></i>Đang tải...';\n $(\".guest-os[data-template-id=\\\"\".concat(templateId, \"\\\"]\")).html(loadingIcon);\n $(\".vm-cpu[data-template-id=\\\"\".concat(templateId, \"\\\"]\")).html(loadingIcon);\n $(\".vm-ram[data-template-id=\\\"\".concat(templateId, \"\\\"]\")).html(loadingIcon);\n $(\".vm-disk[data-template-id=\\\"\".concat(templateId, \"\\\"]\")).html(loadingIcon);\n }\n\n // Update all VM info UI elements\n function updateVMInfoUI(templateId, data) {\n // Update OS\n $(\".guest-os[data-template-id=\\\"\".concat(templateId, \"\\\"]\")).html(data.formattedOS);\n updateOSIcon(templateId, data.guestOS);\n\n // Update hardware specs\n $(\".vm-cpu[data-template-id=\\\"\".concat(templateId, \"\\\"]\")).html(data.formattedCPU);\n $(\".vm-ram[data-template-id=\\\"\".concat(templateId, \"\\\"]\")).html(data.formattedRAM);\n $(\".vm-disk[data-template-id=\\\"\".concat(templateId, \"\\\"]\")).html(data.formattedDisk);\n }\n\n // Set fallback values when API fails\n function setFallbackValues(templateId) {\n $(\".guest-os[data-template-id=\\\"\".concat(templateId, \"\\\"]\")).html(\"Linux\");\n $(\".vm-cpu[data-template-id=\\\"\".concat(templateId, \"\\\"]\")).html(\"N/A\");\n $(\".vm-ram[data-template-id=\\\"\".concat(templateId, \"\\\"]\")).html(\"N/A\");\n $(\".vm-disk[data-template-id=\\\"\".concat(templateId, \"\\\"]\")).html(\"N/A\");\n }\n\n // Update OS icon based on detected OS\n function updateOSIcon(templateId, osName) {\n var $iconElement = $(\".os-icon[data-template-id=\\\"\".concat(templateId, \"\\\"]\"));\n if (osName && osName.toLowerCase().includes(\"windows\")) {\n $iconElement.removeClass(\"fab fa-linux\").addClass(\"fab fa-windows\");\n } else if (osName && osName.toLowerCase().includes(\"ubuntu\")) {\n $iconElement.removeClass(\"fab fa-linux\").addClass(\"fab fa-ubuntu\");\n } else if (osName && osName.toLowerCase().includes(\"centos\")) {\n $iconElement.removeClass(\"fab fa-linux\").addClass(\"fab fa-centos\");\n } else if (osName && osName.toLowerCase().includes(\"debian\")) {\n $iconElement.removeClass(\"fab fa-linux\").addClass(\"fab fa-debian\");\n } else {\n // Keep linux icon as default\n $iconElement.removeClass().addClass(\"fab fa-linux text-orange-600\");\n }\n }\n\n // Format OS name for better display\n function formatOSName(osName) {\n var osMap = {\n UBUNTU_64: \"Ubuntu 64-bit\",\n CENTOS_64: \"CentOS 64-bit\",\n CENTOS_7_64: \"CentOS 7 64-bit\",\n CENTOS_8_64: \"CentOS 8 64-bit\",\n ROCKY_LINUX_64: \"Rocky Linux 64-bit\",\n WINDOWS_10_64: \"Windows 10 64-bit\",\n WINDOWS_9_SERVER_64: \"Windows Server 2019\",\n WINDOWS_SERVER_2019: \"Windows Server 2019\",\n WINDOWS_SERVER_2022: \"Windows Server 2022\",\n WINDOWS_2019: \"Windows Server 2019\",\n WINDOWS_2022: \"Windows Server 2022\",\n DEBIAN_10_64: \"Debian 10 64-bit\",\n DEBIAN_11_64: \"Debian 11 64-bit\",\n OTHER_LINUX_64: \"Linux 64-bit\",\n OTHER_64: \"Other 64-bit\"\n };\n return osMap[osName] || osName || \"Linux\";\n }\n\n // Clean up expired cache entries\n clearExpiredVMInfoCache();\n\n // Load Guest OS info when page loads\n loadGuestOSInfo();\n\n // Debug: Show what data we have\n console.log(\"Template IDs available:\", $(\".guest-os\").map(function () {\n return {\n templateId: $(this).data(\"template-id\"),\n hasTemplateId: Boolean($(this).data(\"template-id\"))\n };\n }).get());\n\n // Expose cache management to global scope for debugging\n window.vmInfoCache = {\n clear: function clear() {\n localStorage.removeItem(VM_INFO_CACHE_KEY);\n console.log(\"VM Info cache cleared\");\n },\n refresh: function refresh() {\n this.clear();\n loadGuestOSInfo();\n console.log(\"VM Info cache refreshed\");\n },\n info: function info() {\n var vmInfoCache = getVMInfoCache();\n if (!vmInfoCache) {\n console.log(\"No VM Info cache found\");\n return;\n }\n var templateIds = Object.keys(vmInfoCache.data);\n console.log(\"VM Info cache entries: \".concat(templateIds.length));\n console.log(\"Last updated: \".concat(new Date(vmInfoCache.lastUpdated).toLocaleString()));\n templateIds.forEach(function (templateId) {\n var data = getVMInfoFromCache(templateId);\n console.log(\"\".concat(templateId, \": \").concat(data ? data.formattedOS : \"expired\"));\n });\n },\n get: function get(templateId) {\n return getVMInfoFromCache(templateId);\n },\n remove: function remove(templateId) {\n removeVMInfoFromCache(templateId);\n console.log(\"Removed \".concat(templateId, \" from cache\"));\n },\n raw: function raw() {\n return getVMInfoCache();\n }\n };\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyIkIiwiZG9jdW1lbnQiLCJyZWFkeSIsImluaXRpYWxpemVEcm9wZG93biIsIm9uIiwiZSIsInN0b3BQcm9wYWdhdGlvbiIsIiRkcm9wZG93biIsImNsb3Nlc3QiLCIkb3B0aW9ucyIsImZpbmQiLCIkc2VsZWN0ZWQiLCJub3QiLCJyZW1vdmVDbGFzcyIsInRvZ2dsZUNsYXNzIiwiJG9wdGlvbiIsIiRzZWxlY3RlZFRleHQiLCJ2YWx1ZSIsImRhdGEiLCJtb250aHMiLCJwcmljZSIsInRleHQiLCJmaXJzdCIsInZhbCIsImFkZENsYXNzIiwidHJpZ2dlciIsIiRwcm9kdWN0Q29udGFpbmVyIiwiYmFzZVByaWNlIiwicGFyc2VGbG9hdCIsInNlbGVjdGVkTW9udGhzIiwicGFyc2VJbnQiLCJjb25zb2xlIiwibG9nIiwicHJvZHVjdENvbnRhaW5lciIsImxlbmd0aCIsIm9yaWdpbmFsUHJpY2UiLCJzYXZpbmdzIiwiTWF0aCIsInJvdW5kIiwiZmluYWxQcmljZSIsInRvTG9jYWxlU3RyaW5nIiwic2hvdyIsImhpZGUiLCJ0YXJnZXQiLCJrZXkiLCIkZm9ybSIsIiRzdWJtaXRCdG4iLCJwcm9wIiwic2V0VGltZW91dCIsIlZNX0lORk9fQ0FDSEVfS0VZIiwic2F2ZVZNSW5mb1RvQ2FjaGUiLCJ0ZW1wbGF0ZUlkIiwidHRsIiwiYXJndW1lbnRzIiwidW5kZWZpbmVkIiwibm93IiwiRGF0ZSIsImdldFRpbWUiLCJ2bUluZm9DYWNoZSIsImdldFZNSW5mb0NhY2hlIiwibGFzdFVwZGF0ZWQiLCJleHBpcnkiLCJsb2NhbFN0b3JhZ2UiLCJzZXRJdGVtIiwiSlNPTiIsInN0cmluZ2lmeSIsIndhcm4iLCJnZXRWTUluZm9Gcm9tQ2FjaGUiLCJpdGVtIiwicmVtb3ZlVk1JbmZvRnJvbUNhY2hlIiwiY2FjaGVTdHIiLCJnZXRJdGVtIiwicGFyc2UiLCJjbGVhckV4cGlyZWRWTUluZm9DYWNoZSIsImhhc0V4cGlyZWQiLCJPYmplY3QiLCJrZXlzIiwiZm9yRWFjaCIsImxvYWRHdWVzdE9TSW5mbyIsInRlbXBsYXRlSWRzIiwiZWFjaCIsImluY2x1ZGVzIiwicHVzaCIsImNhY2hlZERhdGEiLCJ1cGRhdGVWTUluZm9VSSIsImFkZExvYWRpbmdJbmRpY2F0b3JzIiwiYWpheCIsInVybCIsImNvbmNhdCIsIm1ldGhvZCIsInRpbWVvdXQiLCJoZWFkZXJzIiwiYXR0ciIsIkFjY2VwdCIsInN1Y2Nlc3MiLCJyZXNwb25zZSIsImVycm9yIiwidm1EYXRhIiwicHJvY2Vzc2VkRGF0YSIsInByb2Nlc3NWTURhdGEiLCJzZXRGYWxsYmFja1ZhbHVlcyIsInhociIsInN0YXR1cyIsImd1ZXN0T1MiLCJndWVzdF9vcyIsImNwdUNvdW50IiwiY3B1X2NvdW50IiwibWVtb3J5TUIiLCJtZW1vcnlfc2l6ZSIsImRpc2tCeXRlcyIsImRpc2tfY2FwYWNpdHkiLCJmb3JtYXR0ZWRPUyIsImZvcm1hdE9TTmFtZSIsImNwdSIsImZvcm1hdHRlZENQVSIsInJhbSIsImZvcm1hdHRlZFJBTSIsImRpc2siLCJmb3JtYXR0ZWREaXNrIiwibG9hZGluZ0ljb24iLCJodG1sIiwidXBkYXRlT1NJY29uIiwib3NOYW1lIiwiJGljb25FbGVtZW50IiwidG9Mb3dlckNhc2UiLCJvc01hcCIsIlVCVU5UVV82NCIsIkNFTlRPU182NCIsIkNFTlRPU183XzY0IiwiQ0VOVE9TXzhfNjQiLCJST0NLWV9MSU5VWF82NCIsIldJTkRPV1NfMTBfNjQiLCJXSU5ET1dTXzlfU0VSVkVSXzY0IiwiV0lORE9XU19TRVJWRVJfMjAxOSIsIldJTkRPV1NfU0VSVkVSXzIwMjIiLCJXSU5ET1dTXzIwMTkiLCJXSU5ET1dTXzIwMjIiLCJERUJJQU5fMTBfNjQiLCJERUJJQU5fMTFfNjQiLCJPVEhFUl9MSU5VWF82NCIsIk9USEVSXzY0IiwibWFwIiwiaGFzVGVtcGxhdGVJZCIsIkJvb2xlYW4iLCJnZXQiLCJ3aW5kb3ciLCJjbGVhciIsInJlbW92ZUl0ZW0iLCJyZWZyZXNoIiwiaW5mbyIsInJlbW92ZSIsInJhdyJdLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvanMvc2VydmljZS92bWluZm8uanM/YzdlMyJdLCJzb3VyY2VzQ29udGVudCI6WyIkKGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbiAoKSB7XHJcbiAgICAvLyBJbml0aWFsaXplIGRyb3Bkb3duIGZ1bmN0aW9uYWxpdHlcclxuICAgIGZ1bmN0aW9uIGluaXRpYWxpemVEcm9wZG93bigpIHtcclxuICAgICAgICAvLyBUb2dnbGUgZHJvcGRvd24gb24gY2xpY2tcclxuICAgICAgICAkKGRvY3VtZW50KS5vbihcImNsaWNrXCIsIFwiLmRyb3Bkb3duLXNlbGVjdGVkXCIsIGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgICAgIGNvbnN0ICRkcm9wZG93biA9ICQodGhpcykuY2xvc2VzdChcIi5jdXN0b20tZHJvcGRvd25cIik7XHJcbiAgICAgICAgICAgIGNvbnN0ICRvcHRpb25zID0gJGRyb3Bkb3duLmZpbmQoXCIuZHJvcGRvd24tb3B0aW9uc1wiKTtcclxuICAgICAgICAgICAgY29uc3QgJHNlbGVjdGVkID0gJCh0aGlzKTtcclxuXHJcbiAgICAgICAgICAgIC8vIENsb3NlIG90aGVyIGRyb3Bkb3duc1xyXG4gICAgICAgICAgICAkKFwiLmN1c3RvbS1kcm9wZG93blwiKVxyXG4gICAgICAgICAgICAgICAgLm5vdCgkZHJvcGRvd24pXHJcbiAgICAgICAgICAgICAgICAuZmluZChcIi5kcm9wZG93bi1vcHRpb25zXCIpXHJcbiAgICAgICAgICAgICAgICAucmVtb3ZlQ2xhc3MoXCJzaG93XCIpO1xyXG4gICAgICAgICAgICAkKFwiLmN1c3RvbS1kcm9wZG93blwiKVxyXG4gICAgICAgICAgICAgICAgLm5vdCgkZHJvcGRvd24pXHJcbiAgICAgICAgICAgICAgICAuZmluZChcIi5kcm9wZG93bi1zZWxlY3RlZFwiKVxyXG4gICAgICAgICAgICAgICAgLnJlbW92ZUNsYXNzKFwiYWN0aXZlXCIpO1xyXG5cclxuICAgICAgICAgICAgLy8gVG9nZ2xlIGN1cnJlbnQgZHJvcGRvd25cclxuICAgICAgICAgICAgJG9wdGlvbnMudG9nZ2xlQ2xhc3MoXCJzaG93XCIpO1xyXG4gICAgICAgICAgICAkc2VsZWN0ZWQudG9nZ2xlQ2xhc3MoXCJhY3RpdmVcIik7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIC8vIEhhbmRsZSBvcHRpb24gc2VsZWN0aW9uXHJcbiAgICAgICAgJChkb2N1bWVudCkub24oXCJjbGlja1wiLCBcIi5kcm9wZG93bi1vcHRpb25cIiwgZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgICAgICAgY29uc3QgJG9wdGlvbiA9ICQodGhpcyk7XHJcbiAgICAgICAgICAgIGNvbnN0ICRkcm9wZG93biA9ICRvcHRpb24uY2xvc2VzdChcIi5jdXN0b20tZHJvcGRvd25cIik7XHJcbiAgICAgICAgICAgIGNvbnN0ICRzZWxlY3RlZCA9ICRkcm9wZG93bi5maW5kKFwiLmRyb3Bkb3duLXNlbGVjdGVkXCIpO1xyXG4gICAgICAgICAgICBjb25zdCAkb3B0aW9ucyA9ICRkcm9wZG93bi5maW5kKFwiLmRyb3Bkb3duLW9wdGlvbnNcIik7XHJcbiAgICAgICAgICAgIGNvbnN0ICRzZWxlY3RlZFRleHQgPSAkc2VsZWN0ZWQuZmluZChcIi5zZWxlY3RlZC10ZXh0XCIpO1xyXG5cclxuICAgICAgICAgICAgLy8gR2V0IGRhdGEgZnJvbSBzZWxlY3RlZCBvcHRpb25cclxuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSAkb3B0aW9uLmRhdGEoXCJ2YWx1ZVwiKTtcclxuICAgICAgICAgICAgY29uc3QgbW9udGhzID0gJG9wdGlvbi5kYXRhKFwibW9udGhzXCIpO1xyXG4gICAgICAgICAgICBjb25zdCBwcmljZSA9ICRvcHRpb24uZGF0YShcInByaWNlXCIpO1xyXG4gICAgICAgICAgICAvLyBHZXQgdGV4dCBmcm9tIHRoZSBmaXJzdCBzcGFuIGVsZW1lbnQgdG8gYXZvaWQgZ2V0dGluZyBiYWRnZSB0ZXh0XHJcbiAgICAgICAgICAgIGNvbnN0IHRleHQgPSAkb3B0aW9uLmZpbmQoJ3NwYW4nKS5maXJzdCgpLnRleHQoKTtcclxuXHJcbiAgICAgICAgICAgIC8vIFVwZGF0ZSBzZWxlY3RlZCB0ZXh0XHJcbiAgICAgICAgICAgICRzZWxlY3RlZFRleHQudGV4dCh0ZXh0KTtcclxuXHJcbiAgICAgICAgICAgIC8vIFVwZGF0ZSBoaWRkZW4gaW5wdXRzXHJcbiAgICAgICAgICAgICRkcm9wZG93bi5jbG9zZXN0KFwiZm9ybVwiKS5maW5kKFwiLmhpZGRlbk1vbnRoc1wiKS52YWwobW9udGhzKTtcclxuICAgICAgICAgICAgJGRyb3Bkb3duLmNsb3Nlc3QoXCJmb3JtXCIpLmZpbmQoXCIuaGlkZGVuVG90YWxQcmljZVwiKS52YWwocHJpY2UpO1xyXG5cclxuICAgICAgICAgICAgLy8gVXBkYXRlIHNlbGVjdGVkIHN0YXRlXHJcbiAgICAgICAgICAgICRvcHRpb25zLmZpbmQoXCIuZHJvcGRvd24tb3B0aW9uXCIpLnJlbW92ZUNsYXNzKFwic2VsZWN0ZWRcIik7XHJcbiAgICAgICAgICAgICRvcHRpb24uYWRkQ2xhc3MoXCJzZWxlY3RlZFwiKTtcclxuXHJcbiAgICAgICAgICAgIC8vIENsb3NlIGRyb3Bkb3duXHJcbiAgICAgICAgICAgICRvcHRpb25zLnJlbW92ZUNsYXNzKFwic2hvd1wiKTtcclxuICAgICAgICAgICAgJHNlbGVjdGVkLnJlbW92ZUNsYXNzKFwiYWN0aXZlXCIpO1xyXG5cclxuICAgICAgICAgICAgLy8gVHJpZ2dlciBjdXN0b20gZXZlbnQgZm9yIG90aGVyIGNvbXBvbmVudHNcclxuICAgICAgICAgICAgJGRyb3Bkb3duLnRyaWdnZXIoXCJkcm9wZG93bjpjaGFuZ2VkXCIsIHtcclxuICAgICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZSxcclxuICAgICAgICAgICAgICAgIG1vbnRoczogbW9udGhzLFxyXG4gICAgICAgICAgICAgICAgcHJpY2U6IHByaWNlLFxyXG4gICAgICAgICAgICAgICAgdGV4dDogdGV4dCxcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAvLyBVcGRhdGUgcHJpY2UgZGlzcGxheSB1c2luZyBqUXVlcnlcclxuICAgICAgICAgICAgY29uc3QgJHByb2R1Y3RDb250YWluZXIgPSAkZHJvcGRvd24uY2xvc2VzdCgnW2RhdGEtcHJvZHVjdC1pZF0nKTtcclxuICAgICAgICAgICAgY29uc3QgYmFzZVByaWNlID0gcGFyc2VGbG9hdCgkcHJvZHVjdENvbnRhaW5lci5kYXRhKCdiYXNlLXByaWNlJykpO1xyXG4gICAgICAgICAgICBjb25zdCBzZWxlY3RlZE1vbnRocyA9IHBhcnNlSW50KG1vbnRocyk7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBjb25zb2xlLmxvZygnVXBkYXRpbmcgcHJpY2UgZGlzcGxheTonLCB7XHJcbiAgICAgICAgICAgICAgICBiYXNlUHJpY2U6IGJhc2VQcmljZSxcclxuICAgICAgICAgICAgICAgIHNlbGVjdGVkTW9udGhzOiBzZWxlY3RlZE1vbnRocyxcclxuICAgICAgICAgICAgICAgIHByb2R1Y3RDb250YWluZXI6ICRwcm9kdWN0Q29udGFpbmVyLmxlbmd0aFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIC8vIENhbGN1bGF0ZSBwcmljZXNcclxuICAgICAgICAgICAgY29uc3Qgb3JpZ2luYWxQcmljZSA9IGJhc2VQcmljZSAqIHNlbGVjdGVkTW9udGhzO1xyXG4gICAgICAgICAgICBjb25zdCBzYXZpbmdzID0gc2VsZWN0ZWRNb250aHMgPj0gMTIgPyBNYXRoLnJvdW5kKG9yaWdpbmFsUHJpY2UgKiAwLjEpIDogMDtcclxuICAgICAgICAgICAgY29uc3QgZmluYWxQcmljZSA9IG9yaWdpbmFsUHJpY2UgLSBzYXZpbmdzO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgLy8gVXBkYXRlIGRpc3BsYXlcclxuICAgICAgICAgICAgJHByb2R1Y3RDb250YWluZXIuZmluZCgnLnRvdGFsLXByaWNlLWRpc3BsYXknKS50ZXh0KCfigqsnICsgZmluYWxQcmljZS50b0xvY2FsZVN0cmluZygpKTtcclxuICAgICAgICAgICAgJHByb2R1Y3RDb250YWluZXIuZmluZCgnLm1vbnRocy1kaXNwbGF5JykudGV4dChzZWxlY3RlZE1vbnRocyArICcgdGjDoW5nJyk7XHJcbiAgICAgICAgICAgICRwcm9kdWN0Q29udGFpbmVyLmZpbmQoJy5wcmljZS1wZXItbW9udGgnKS50ZXh0KCfigqsnICsgYmFzZVByaWNlLnRvTG9jYWxlU3RyaW5nKCkgKyAnL3Row6FuZycpO1xyXG4gICAgICAgICAgICAkcHJvZHVjdENvbnRhaW5lci5maW5kKCcub3JpZ2luYWwtcHJpY2UnKS50ZXh0KCfigqsnICsgb3JpZ2luYWxQcmljZS50b0xvY2FsZVN0cmluZygpKTtcclxuICAgICAgICAgICAgJHByb2R1Y3RDb250YWluZXIuZmluZCgnLnNhdmluZ3MtYW1vdW50JykudGV4dCgn4oKrJyArIHNhdmluZ3MudG9Mb2NhbGVTdHJpbmcoKSk7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAvLyBTaG93L2hpZGUgc2F2aW5ncyBpbmZvXHJcbiAgICAgICAgICAgIGlmIChzYXZpbmdzID4gMCkge1xyXG4gICAgICAgICAgICAgICAgJHByb2R1Y3RDb250YWluZXIuZmluZCgnLnNhdmluZ3MtaW5mbycpLnNob3coKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICRwcm9kdWN0Q29udGFpbmVyLmZpbmQoJy5zYXZpbmdzLWluZm8nKS5oaWRlKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgLy8gQ2xvc2UgZHJvcGRvd24gd2hlbiBjbGlja2luZyBvdXRzaWRlXHJcbiAgICAgICAgJChkb2N1bWVudCkub24oXCJjbGlja1wiLCBmdW5jdGlvbiAoZSkge1xyXG4gICAgICAgICAgICBpZiAoISQoZS50YXJnZXQpLmNsb3Nlc3QoXCIuY3VzdG9tLWRyb3Bkb3duXCIpLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgJChcIi5kcm9wZG93bi1vcHRpb25zXCIpLnJlbW92ZUNsYXNzKFwic2hvd1wiKTtcclxuICAgICAgICAgICAgICAgICQoXCIuZHJvcGRvd24tc2VsZWN0ZWRcIikucmVtb3ZlQ2xhc3MoXCJhY3RpdmVcIik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgLy8gQ2xvc2UgZHJvcGRvd24gb24gZXNjYXBlIGtleVxyXG4gICAgICAgICQoZG9jdW1lbnQpLm9uKFwia2V5ZG93blwiLCBmdW5jdGlvbiAoZSkge1xyXG4gICAgICAgICAgICBpZiAoZS5rZXkgPT09IFwiRXNjYXBlXCIpIHtcclxuICAgICAgICAgICAgICAgICQoXCIuZHJvcGRvd24tb3B0aW9uc1wiKS5yZW1vdmVDbGFzcyhcInNob3dcIik7XHJcbiAgICAgICAgICAgICAgICAkKFwiLmRyb3Bkb3duLXNlbGVjdGVkXCIpLnJlbW92ZUNsYXNzKFwiYWN0aXZlXCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gSW5pdGlhbGl6ZSBvbiBwYWdlIGxvYWRcclxuICAgIGluaXRpYWxpemVEcm9wZG93bigpO1xyXG5cclxuICAgIC8vIE9wdGltaXplIGZvcm0gc3VibWlzc2lvbiB0byBwcmV2ZW50IGJsb2NraW5nXHJcbiAgICAkKGRvY3VtZW50KS5vbignc3VibWl0JywgJ2Zvcm1bYWN0aW9uKj1cInRoZW0tZ2lvLWhhbmdcIl0nLCBmdW5jdGlvbihlKSB7XHJcbiAgICAgICAgY29uc3QgJGZvcm0gPSAkKHRoaXMpO1xyXG4gICAgICAgIGNvbnN0ICRzdWJtaXRCdG4gPSAkZm9ybS5maW5kKCdidXR0b25bdHlwZT1cInN1Ym1pdFwiXScpO1xyXG4gICAgICAgIFxyXG4gICAgICAgIC8vIERpc2FibGUgc3VibWl0IGJ1dHRvbiB0byBwcmV2ZW50IGRvdWJsZSBzdWJtaXNzaW9uXHJcbiAgICAgICAgJHN1Ym1pdEJ0bi5wcm9wKCdkaXNhYmxlZCcsIHRydWUpLnRleHQoJ8SQYW5nIHjhu60gbMO9Li4uJyk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgLy8gQWRkIGxvYWRpbmcgc3RhdGVcclxuICAgICAgICAkZm9ybS5hZGRDbGFzcygnc3VibWl0dGluZycpO1xyXG4gICAgICAgIFxyXG4gICAgICAgIC8vIFJlLWVuYWJsZSBidXR0b24gYWZ0ZXIgNSBzZWNvbmRzIGFzIGZhbGxiYWNrXHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICRzdWJtaXRCdG4ucHJvcCgnZGlzYWJsZWQnLCBmYWxzZSkudGV4dCgnxJDEg25nIGvDvSBuZ2F5Jyk7XHJcbiAgICAgICAgICAgICRmb3JtLnJlbW92ZUNsYXNzKCdzdWJtaXR0aW5nJyk7XHJcbiAgICAgICAgfSwgNTAwMCk7XHJcbiAgICB9KTtcclxuXHJcbiAgICAvLyBDYWNoZSB1dGlsaXR5IGZ1bmN0aW9ucyAtIFNpbmdsZSBKU09OIGFwcHJvYWNoXHJcbiAgICBjb25zdCBWTV9JTkZPX0NBQ0hFX0tFWSA9IFwidm1faW5mb19jYWNoZVwiO1xyXG5cclxuICAgIGZ1bmN0aW9uIHNhdmVWTUluZm9Ub0NhY2hlKHRlbXBsYXRlSWQsIGRhdGEsIHR0bCA9IDMwICogNjAgKiAxMDAwKSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgY29uc3Qgbm93ID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7XHJcbiAgICAgICAgICAgIGxldCB2bUluZm9DYWNoZSA9IGdldFZNSW5mb0NhY2hlKCk7XHJcblxyXG4gICAgICAgICAgICBpZiAoIXZtSW5mb0NhY2hlKSB7XHJcbiAgICAgICAgICAgICAgICB2bUluZm9DYWNoZSA9IHtcclxuICAgICAgICAgICAgICAgICAgICBsYXN0VXBkYXRlZDogbm93LFxyXG4gICAgICAgICAgICAgICAgICAgIGRhdGE6IHt9LFxyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdm1JbmZvQ2FjaGUuZGF0YVt0ZW1wbGF0ZUlkXSA9IHtcclxuICAgICAgICAgICAgICAgIHZhbHVlOiBkYXRhLFxyXG4gICAgICAgICAgICAgICAgZXhwaXJ5OiBub3cgKyB0dGwsXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIHZtSW5mb0NhY2hlLmxhc3RVcGRhdGVkID0gbm93O1xyXG5cclxuICAgICAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oXHJcbiAgICAgICAgICAgICAgICBWTV9JTkZPX0NBQ0hFX0tFWSxcclxuICAgICAgICAgICAgICAgIEpTT04uc3RyaW5naWZ5KHZtSW5mb0NhY2hlKVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgY29uc29sZS53YXJuKFwiVk0gSW5mbyBjYWNoZSBzYXZlIGZhaWxlZDpcIiwgZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIGdldFZNSW5mb0Zyb21DYWNoZSh0ZW1wbGF0ZUlkKSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgY29uc3Qgdm1JbmZvQ2FjaGUgPSBnZXRWTUluZm9DYWNoZSgpO1xyXG4gICAgICAgICAgICBpZiAoIXZtSW5mb0NhY2hlIHx8ICF2bUluZm9DYWNoZS5kYXRhW3RlbXBsYXRlSWRdKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY29uc3QgaXRlbSA9IHZtSW5mb0NhY2hlLmRhdGFbdGVtcGxhdGVJZF07XHJcbiAgICAgICAgICAgIGNvbnN0IG5vdyA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xyXG5cclxuICAgICAgICAgICAgLy8gQ2hlY2sgaWYgZXhwaXJlZFxyXG4gICAgICAgICAgICBpZiAobm93ID4gaXRlbS5leHBpcnkpIHtcclxuICAgICAgICAgICAgICAgIHJlbW92ZVZNSW5mb0Zyb21DYWNoZSh0ZW1wbGF0ZUlkKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gaXRlbS52YWx1ZTtcclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUud2FybihcIlZNIEluZm8gY2FjaGUgZ2V0IGZhaWxlZDpcIiwgZSk7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBnZXRWTUluZm9DYWNoZSgpIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBjb25zdCBjYWNoZVN0ciA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKFZNX0lORk9fQ0FDSEVfS0VZKTtcclxuICAgICAgICAgICAgcmV0dXJuIGNhY2hlU3RyID8gSlNPTi5wYXJzZShjYWNoZVN0cikgOiBudWxsO1xyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgY29uc29sZS53YXJuKFwiVk0gSW5mbyBjYWNoZSBwYXJzZSBmYWlsZWQ6XCIsIGUpO1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gcmVtb3ZlVk1JbmZvRnJvbUNhY2hlKHRlbXBsYXRlSWQpIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBjb25zdCB2bUluZm9DYWNoZSA9IGdldFZNSW5mb0NhY2hlKCk7XHJcbiAgICAgICAgICAgIGlmICh2bUluZm9DYWNoZSAmJiB2bUluZm9DYWNoZS5kYXRhW3RlbXBsYXRlSWRdKSB7XHJcbiAgICAgICAgICAgICAgICBkZWxldGUgdm1JbmZvQ2FjaGUuZGF0YVt0ZW1wbGF0ZUlkXTtcclxuICAgICAgICAgICAgICAgIHZtSW5mb0NhY2hlLmxhc3RVcGRhdGVkID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7XHJcbiAgICAgICAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShcclxuICAgICAgICAgICAgICAgICAgICBWTV9JTkZPX0NBQ0hFX0tFWSxcclxuICAgICAgICAgICAgICAgICAgICBKU09OLnN0cmluZ2lmeSh2bUluZm9DYWNoZSlcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUud2FybihcIlZNIEluZm8gY2FjaGUgcmVtb3ZlIGZhaWxlZDpcIiwgZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIGNsZWFyRXhwaXJlZFZNSW5mb0NhY2hlKCkge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHZtSW5mb0NhY2hlID0gZ2V0Vk1JbmZvQ2FjaGUoKTtcclxuICAgICAgICAgICAgaWYgKCF2bUluZm9DYWNoZSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjb25zdCBub3cgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcclxuICAgICAgICAgICAgbGV0IGhhc0V4cGlyZWQgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKHZtSW5mb0NhY2hlLmRhdGEpLmZvckVhY2goKHRlbXBsYXRlSWQpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSB2bUluZm9DYWNoZS5kYXRhW3RlbXBsYXRlSWRdO1xyXG4gICAgICAgICAgICAgICAgaWYgKG5vdyA+IGl0ZW0uZXhwaXJ5KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHZtSW5mb0NhY2hlLmRhdGFbdGVtcGxhdGVJZF07XHJcbiAgICAgICAgICAgICAgICAgICAgaGFzRXhwaXJlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgaWYgKGhhc0V4cGlyZWQpIHtcclxuICAgICAgICAgICAgICAgIHZtSW5mb0NhY2hlLmxhc3RVcGRhdGVkID0gbm93O1xyXG4gICAgICAgICAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oXHJcbiAgICAgICAgICAgICAgICAgICAgVk1fSU5GT19DQUNIRV9LRVksXHJcbiAgICAgICAgICAgICAgICAgICAgSlNPTi5zdHJpbmdpZnkodm1JbmZvQ2FjaGUpXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICBjb25zb2xlLndhcm4oXCJWTSBJbmZvIGNhY2hlIGNsZWFudXAgZmFpbGVkOlwiLCBlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gUmUtaW5pdGlhbGl6ZSBpZiBjb250ZW50IGlzIGR5bmFtaWNhbGx5IGxvYWRlZFxyXG4gICAgJChkb2N1bWVudCkub24oXCJET01Db250ZW50TG9hZGVkXCIsIGluaXRpYWxpemVEcm9wZG93bik7XHJcblxyXG4gICAgLy8gTG9hZCBWTSBpbmZvcm1hdGlvbiBmb3IgZWFjaCBwcm9kdWN0IHdpdGggY2FjaGluZyAoT1MsIENQVSwgUkFNLCBEaXNrKSAtIE5PTi1CTE9DS0lOR1xyXG4gICAgZnVuY3Rpb24gbG9hZEd1ZXN0T1NJbmZvKCkge1xyXG4gICAgICAgIC8vIEdldCB1bmlxdWUgdGVtcGxhdGUgSURzIHRvIGF2b2lkIGR1cGxpY2F0ZSBBUEkgY2FsbHNcclxuICAgICAgICBjb25zdCB0ZW1wbGF0ZUlkcyA9IFtdO1xyXG4gICAgICAgICQoXCIuZ3Vlc3Qtb3NcIikuZWFjaChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHRlbXBsYXRlSWQgPSAkKHRoaXMpLmRhdGEoXCJ0ZW1wbGF0ZS1pZFwiKTtcclxuICAgICAgICAgICAgaWYgKHRlbXBsYXRlSWQgJiYgIXRlbXBsYXRlSWRzLmluY2x1ZGVzKHRlbXBsYXRlSWQpKSB7XHJcbiAgICAgICAgICAgICAgICB0ZW1wbGF0ZUlkcy5wdXNoKHRlbXBsYXRlSWQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIC8vIExvYWQgVk0gaW5mbyBpbiBiYWNrZ3JvdW5kIHdpdGhvdXQgYmxvY2tpbmcgZm9ybSBzdWJtaXNzaW9uXHJcbiAgICAgICAgdGVtcGxhdGVJZHMuZm9yRWFjaCgodGVtcGxhdGVJZCkgPT4ge1xyXG4gICAgICAgICAgICAvLyBDaGVjayBjYWNoZSBmaXJzdFxyXG4gICAgICAgICAgICBjb25zdCBjYWNoZWREYXRhID0gZ2V0Vk1JbmZvRnJvbUNhY2hlKHRlbXBsYXRlSWQpO1xyXG5cclxuICAgICAgICAgICAgaWYgKGNhY2hlZERhdGEpIHtcclxuICAgICAgICAgICAgICAgIC8vIFVzZSBjYWNoZWQgZGF0YVxyXG4gICAgICAgICAgICAgICAgdXBkYXRlVk1JbmZvVUkodGVtcGxhdGVJZCwgY2FjaGVkRGF0YSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vIEFkZCBsb2FkaW5nIGluZGljYXRvcnNcclxuICAgICAgICAgICAgYWRkTG9hZGluZ0luZGljYXRvcnModGVtcGxhdGVJZCk7XHJcblxyXG4gICAgICAgICAgICAvLyBDYWxsIEFQSSB0byBnZXQgY29tcGxldGUgVk0gaW5mbyAtIHdpdGggc2hvcnRlciB0aW1lb3V0XHJcbiAgICAgICAgICAgICQuYWpheCh7XHJcbiAgICAgICAgICAgICAgICB1cmw6IGAvYXBpL3YxL2dldC12bS1pbmZvLyR7dGVtcGxhdGVJZH0vZ3Vlc3Rfb3MsY3B1X2NvdW50LG1lbW9yeV9zaXplLGRpc2tfY2FwYWNpdHlgLFxyXG4gICAgICAgICAgICAgICAgbWV0aG9kOiBcIkdFVFwiLFxyXG4gICAgICAgICAgICAgICAgdGltZW91dDogNTAwMCwgLy8gUmVkdWNlZCB0aW1lb3V0IHRvIDUgc2Vjb25kc1xyXG4gICAgICAgICAgICAgICAgaGVhZGVyczoge1xyXG4gICAgICAgICAgICAgICAgICAgIFwiWC1DU1JGLVRPS0VOXCI6ICQoJ21ldGFbbmFtZT1cImNzcmYtdG9rZW5cIl0nKS5hdHRyKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcImNvbnRlbnRcIlxyXG4gICAgICAgICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgICAgICAgICAgQWNjZXB0OiBcImFwcGxpY2F0aW9uL2pzb25cIixcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbiAocmVzcG9uc2UpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2UuZXJyb3IgPT09IGZhbHNlICYmIHJlc3BvbnNlLmRhdGEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm1EYXRhID0gcmVzcG9uc2UuZGF0YTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcHJvY2Vzc2VkRGF0YSA9IHByb2Nlc3NWTURhdGEodm1EYXRhKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIENhY2hlIHRoZSByZXN1bHQgZm9yIDMwIG1pbnV0ZXNcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2F2ZVZNSW5mb1RvQ2FjaGUodGVtcGxhdGVJZCwgcHJvY2Vzc2VkRGF0YSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBVcGRhdGUgVUlcclxuICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlVk1JbmZvVUkodGVtcGxhdGVJZCwgcHJvY2Vzc2VkRGF0YSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2V0RmFsbGJhY2tWYWx1ZXModGVtcGxhdGVJZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIGVycm9yOiBmdW5jdGlvbiAoeGhyLCBzdGF0dXMsIGVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcIkZhaWxlZCB0byBsb2FkIFZNIGluZm8gZm9yIHRlbXBsYXRlOlwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZW1wbGF0ZUlkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBlcnJvclxyXG4gICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgc2V0RmFsbGJhY2tWYWx1ZXModGVtcGxhdGVJZCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIExvYWQgVk0gaW5mbyBhZnRlciBhIHNob3J0IGRlbGF5IHRvIG5vdCBibG9jayBwYWdlIGxvYWRcclxuICAgIHNldFRpbWVvdXQobG9hZEd1ZXN0T1NJbmZvLCAxMDAwKTtcclxuXHJcbiAgICAvLyBQcm9jZXNzIFZNIGRhdGEgZnJvbSBBUEkgcmVzcG9uc2VcclxuICAgIGZ1bmN0aW9uIHByb2Nlc3NWTURhdGEodm1EYXRhKSB7XHJcbiAgICAgICAgY29uc3QgZ3Vlc3RPUyA9IHZtRGF0YS5ndWVzdF9vcyB8fCBcIlVOS05PV05cIjtcclxuICAgICAgICBjb25zdCBjcHVDb3VudCA9IHZtRGF0YS5jcHVfY291bnQgfHwgMDtcclxuICAgICAgICBjb25zdCBtZW1vcnlNQiA9IHZtRGF0YS5tZW1vcnlfc2l6ZSB8fCAwO1xyXG4gICAgICAgIGNvbnN0IGRpc2tCeXRlcyA9IHZtRGF0YS5kaXNrX2NhcGFjaXR5IHx8IDA7XHJcblxyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIGd1ZXN0T1M6IGd1ZXN0T1MsXHJcbiAgICAgICAgICAgIGZvcm1hdHRlZE9TOiBmb3JtYXRPU05hbWUoZ3Vlc3RPUyksXHJcbiAgICAgICAgICAgIGNwdTogY3B1Q291bnQsXHJcbiAgICAgICAgICAgIGZvcm1hdHRlZENQVTogYCR7Y3B1Q291bnR9IHZDb3JlJHtjcHVDb3VudCA+IDEgPyBcInNcIiA6IFwiXCJ9YCxcclxuICAgICAgICAgICAgcmFtOiBNYXRoLnJvdW5kKChtZW1vcnlNQiAvIDEwMjQpICogMTAwKSAvIDEwMCwgLy8gQ29udmVydCBNQiB0byBHQiwgMiBkZWNpbWFsIHBsYWNlc1xyXG4gICAgICAgICAgICBmb3JtYXR0ZWRSQU06IGAke01hdGgucm91bmQoKG1lbW9yeU1CIC8gMTAyNCkgKiAxMDApIC8gMTAwfSBHQmAsXHJcbiAgICAgICAgICAgIGRpc2s6IE1hdGgucm91bmQoKGRpc2tCeXRlcyAvICgxMDI0ICogMTAyNCAqIDEwMjQpKSAqIDEwMCkgLyAxMDAsIC8vIENvbnZlcnQgYnl0ZXMgdG8gR0JcclxuICAgICAgICAgICAgZm9ybWF0dGVkRGlzazogYCR7XHJcbiAgICAgICAgICAgICAgICBNYXRoLnJvdW5kKChkaXNrQnl0ZXMgLyAoMTAyNCAqIDEwMjQgKiAxMDI0KSkgKiAxMDApIC8gMTAwXHJcbiAgICAgICAgICAgIH0gR0JgLFxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgLy8gQWRkIGxvYWRpbmcgaW5kaWNhdG9ycyB0byBhbGwgVk0gaW5mbyBlbGVtZW50c1xyXG4gICAgZnVuY3Rpb24gYWRkTG9hZGluZ0luZGljYXRvcnModGVtcGxhdGVJZCkge1xyXG4gICAgICAgIGNvbnN0IGxvYWRpbmdJY29uID1cclxuICAgICAgICAgICAgJzxpIGNsYXNzPVwiZmFzIGZhLXNwaW5uZXIgZmEtc3BpbiB0ZXh0LW9yYW5nZS01MDAgbXItMVwiPjwvaT7EkGFuZyB04bqjaS4uLic7XHJcbiAgICAgICAgJChgLmd1ZXN0LW9zW2RhdGEtdGVtcGxhdGUtaWQ9XCIke3RlbXBsYXRlSWR9XCJdYCkuaHRtbChsb2FkaW5nSWNvbik7XHJcbiAgICAgICAgJChgLnZtLWNwdVtkYXRhLXRlbXBsYXRlLWlkPVwiJHt0ZW1wbGF0ZUlkfVwiXWApLmh0bWwobG9hZGluZ0ljb24pO1xyXG4gICAgICAgICQoYC52bS1yYW1bZGF0YS10ZW1wbGF0ZS1pZD1cIiR7dGVtcGxhdGVJZH1cIl1gKS5odG1sKGxvYWRpbmdJY29uKTtcclxuICAgICAgICAkKGAudm0tZGlza1tkYXRhLXRlbXBsYXRlLWlkPVwiJHt0ZW1wbGF0ZUlkfVwiXWApLmh0bWwobG9hZGluZ0ljb24pO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIFVwZGF0ZSBhbGwgVk0gaW5mbyBVSSBlbGVtZW50c1xyXG4gICAgZnVuY3Rpb24gdXBkYXRlVk1JbmZvVUkodGVtcGxhdGVJZCwgZGF0YSkge1xyXG4gICAgICAgIC8vIFVwZGF0ZSBPU1xyXG4gICAgICAgICQoYC5ndWVzdC1vc1tkYXRhLXRlbXBsYXRlLWlkPVwiJHt0ZW1wbGF0ZUlkfVwiXWApLmh0bWwoZGF0YS5mb3JtYXR0ZWRPUyk7XHJcbiAgICAgICAgdXBkYXRlT1NJY29uKHRlbXBsYXRlSWQsIGRhdGEuZ3Vlc3RPUyk7XHJcblxyXG4gICAgICAgIC8vIFVwZGF0ZSBoYXJkd2FyZSBzcGVjc1xyXG4gICAgICAgICQoYC52bS1jcHVbZGF0YS10ZW1wbGF0ZS1pZD1cIiR7dGVtcGxhdGVJZH1cIl1gKS5odG1sKGRhdGEuZm9ybWF0dGVkQ1BVKTtcclxuICAgICAgICAkKGAudm0tcmFtW2RhdGEtdGVtcGxhdGUtaWQ9XCIke3RlbXBsYXRlSWR9XCJdYCkuaHRtbChkYXRhLmZvcm1hdHRlZFJBTSk7XHJcbiAgICAgICAgJChgLnZtLWRpc2tbZGF0YS10ZW1wbGF0ZS1pZD1cIiR7dGVtcGxhdGVJZH1cIl1gKS5odG1sKFxyXG4gICAgICAgICAgICBkYXRhLmZvcm1hdHRlZERpc2tcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIFNldCBmYWxsYmFjayB2YWx1ZXMgd2hlbiBBUEkgZmFpbHNcclxuICAgIGZ1bmN0aW9uIHNldEZhbGxiYWNrVmFsdWVzKHRlbXBsYXRlSWQpIHtcclxuICAgICAgICAkKGAuZ3Vlc3Qtb3NbZGF0YS10ZW1wbGF0ZS1pZD1cIiR7dGVtcGxhdGVJZH1cIl1gKS5odG1sKFwiTGludXhcIik7XHJcbiAgICAgICAgJChgLnZtLWNwdVtkYXRhLXRlbXBsYXRlLWlkPVwiJHt0ZW1wbGF0ZUlkfVwiXWApLmh0bWwoXCJOL0FcIik7XHJcbiAgICAgICAgJChgLnZtLXJhbVtkYXRhLXRlbXBsYXRlLWlkPVwiJHt0ZW1wbGF0ZUlkfVwiXWApLmh0bWwoXCJOL0FcIik7XHJcbiAgICAgICAgJChgLnZtLWRpc2tbZGF0YS10ZW1wbGF0ZS1pZD1cIiR7dGVtcGxhdGVJZH1cIl1gKS5odG1sKFwiTi9BXCIpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIFVwZGF0ZSBPUyBpY29uIGJhc2VkIG9uIGRldGVjdGVkIE9TXHJcbiAgICBmdW5jdGlvbiB1cGRhdGVPU0ljb24odGVtcGxhdGVJZCwgb3NOYW1lKSB7XHJcbiAgICAgICAgY29uc3QgJGljb25FbGVtZW50ID0gJChgLm9zLWljb25bZGF0YS10ZW1wbGF0ZS1pZD1cIiR7dGVtcGxhdGVJZH1cIl1gKTtcclxuXHJcbiAgICAgICAgaWYgKG9zTmFtZSAmJiBvc05hbWUudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhcIndpbmRvd3NcIikpIHtcclxuICAgICAgICAgICAgJGljb25FbGVtZW50LnJlbW92ZUNsYXNzKFwiZmFiIGZhLWxpbnV4XCIpLmFkZENsYXNzKFwiZmFiIGZhLXdpbmRvd3NcIik7XHJcbiAgICAgICAgfSBlbHNlIGlmIChvc05hbWUgJiYgb3NOYW1lLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoXCJ1YnVudHVcIikpIHtcclxuICAgICAgICAgICAgJGljb25FbGVtZW50LnJlbW92ZUNsYXNzKFwiZmFiIGZhLWxpbnV4XCIpLmFkZENsYXNzKFwiZmFiIGZhLXVidW50dVwiKTtcclxuICAgICAgICB9IGVsc2UgaWYgKG9zTmFtZSAmJiBvc05hbWUudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhcImNlbnRvc1wiKSkge1xyXG4gICAgICAgICAgICAkaWNvbkVsZW1lbnQucmVtb3ZlQ2xhc3MoXCJmYWIgZmEtbGludXhcIikuYWRkQ2xhc3MoXCJmYWIgZmEtY2VudG9zXCIpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAob3NOYW1lICYmIG9zTmFtZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKFwiZGViaWFuXCIpKSB7XHJcbiAgICAgICAgICAgICRpY29uRWxlbWVudC5yZW1vdmVDbGFzcyhcImZhYiBmYS1saW51eFwiKS5hZGRDbGFzcyhcImZhYiBmYS1kZWJpYW5cIik7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgLy8gS2VlcCBsaW51eCBpY29uIGFzIGRlZmF1bHRcclxuICAgICAgICAgICAgJGljb25FbGVtZW50LnJlbW92ZUNsYXNzKCkuYWRkQ2xhc3MoXCJmYWIgZmEtbGludXggdGV4dC1vcmFuZ2UtNjAwXCIpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyBGb3JtYXQgT1MgbmFtZSBmb3IgYmV0dGVyIGRpc3BsYXlcclxuICAgIGZ1bmN0aW9uIGZvcm1hdE9TTmFtZShvc05hbWUpIHtcclxuICAgICAgICBjb25zdCBvc01hcCA9IHtcclxuICAgICAgICAgICAgVUJVTlRVXzY0OiBcIlVidW50dSA2NC1iaXRcIixcclxuICAgICAgICAgICAgQ0VOVE9TXzY0OiBcIkNlbnRPUyA2NC1iaXRcIixcclxuICAgICAgICAgICAgQ0VOVE9TXzdfNjQ6IFwiQ2VudE9TIDcgNjQtYml0XCIsXHJcbiAgICAgICAgICAgIENFTlRPU184XzY0OiBcIkNlbnRPUyA4IDY0LWJpdFwiLFxyXG4gICAgICAgICAgICBST0NLWV9MSU5VWF82NDogXCJSb2NreSBMaW51eCA2NC1iaXRcIixcclxuICAgICAgICAgICAgV0lORE9XU18xMF82NDogXCJXaW5kb3dzIDEwIDY0LWJpdFwiLFxyXG4gICAgICAgICAgICBXSU5ET1dTXzlfU0VSVkVSXzY0OiBcIldpbmRvd3MgU2VydmVyIDIwMTlcIixcclxuICAgICAgICAgICAgV0lORE9XU19TRVJWRVJfMjAxOTogXCJXaW5kb3dzIFNlcnZlciAyMDE5XCIsXHJcbiAgICAgICAgICAgIFdJTkRPV1NfU0VSVkVSXzIwMjI6IFwiV2luZG93cyBTZXJ2ZXIgMjAyMlwiLFxyXG4gICAgICAgICAgICBXSU5ET1dTXzIwMTk6IFwiV2luZG93cyBTZXJ2ZXIgMjAxOVwiLFxyXG4gICAgICAgICAgICBXSU5ET1dTXzIwMjI6IFwiV2luZG93cyBTZXJ2ZXIgMjAyMlwiLFxyXG4gICAgICAgICAgICBERUJJQU5fMTBfNjQ6IFwiRGViaWFuIDEwIDY0LWJpdFwiLFxyXG4gICAgICAgICAgICBERUJJQU5fMTFfNjQ6IFwiRGViaWFuIDExIDY0LWJpdFwiLFxyXG4gICAgICAgICAgICBPVEhFUl9MSU5VWF82NDogXCJMaW51eCA2NC1iaXRcIixcclxuICAgICAgICAgICAgT1RIRVJfNjQ6IFwiT3RoZXIgNjQtYml0XCIsXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgcmV0dXJuIG9zTWFwW29zTmFtZV0gfHwgb3NOYW1lIHx8IFwiTGludXhcIjtcclxuICAgIH1cclxuXHJcbiAgICAvLyBDbGVhbiB1cCBleHBpcmVkIGNhY2hlIGVudHJpZXNcclxuICAgIGNsZWFyRXhwaXJlZFZNSW5mb0NhY2hlKCk7XHJcblxyXG4gICAgLy8gTG9hZCBHdWVzdCBPUyBpbmZvIHdoZW4gcGFnZSBsb2Fkc1xyXG4gICAgbG9hZEd1ZXN0T1NJbmZvKCk7XHJcblxyXG4gICAgLy8gRGVidWc6IFNob3cgd2hhdCBkYXRhIHdlIGhhdmVcclxuICAgIGNvbnNvbGUubG9nKFxyXG4gICAgICAgIFwiVGVtcGxhdGUgSURzIGF2YWlsYWJsZTpcIixcclxuICAgICAgICAkKFwiLmd1ZXN0LW9zXCIpXHJcbiAgICAgICAgICAgIC5tYXAoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgICAgICB0ZW1wbGF0ZUlkOiAkKHRoaXMpLmRhdGEoXCJ0ZW1wbGF0ZS1pZFwiKSxcclxuICAgICAgICAgICAgICAgICAgICBoYXNUZW1wbGF0ZUlkOiBCb29sZWFuKCQodGhpcykuZGF0YShcInRlbXBsYXRlLWlkXCIpKSxcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIC5nZXQoKVxyXG4gICAgKTtcclxuXHJcbiAgICAvLyBFeHBvc2UgY2FjaGUgbWFuYWdlbWVudCB0byBnbG9iYWwgc2NvcGUgZm9yIGRlYnVnZ2luZ1xyXG4gICAgd2luZG93LnZtSW5mb0NhY2hlID0ge1xyXG4gICAgICAgIGNsZWFyOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKFZNX0lORk9fQ0FDSEVfS0VZKTtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coXCJWTSBJbmZvIGNhY2hlIGNsZWFyZWRcIik7XHJcbiAgICAgICAgfSxcclxuICAgICAgICByZWZyZXNoOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2xlYXIoKTtcclxuICAgICAgICAgICAgbG9hZEd1ZXN0T1NJbmZvKCk7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiVk0gSW5mbyBjYWNoZSByZWZyZXNoZWRcIik7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBpbmZvOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHZtSW5mb0NhY2hlID0gZ2V0Vk1JbmZvQ2FjaGUoKTtcclxuICAgICAgICAgICAgaWYgKCF2bUluZm9DYWNoZSkge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJObyBWTSBJbmZvIGNhY2hlIGZvdW5kXCIpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjb25zdCB0ZW1wbGF0ZUlkcyA9IE9iamVjdC5rZXlzKHZtSW5mb0NhY2hlLmRhdGEpO1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhgVk0gSW5mbyBjYWNoZSBlbnRyaWVzOiAke3RlbXBsYXRlSWRzLmxlbmd0aH1gKTtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coXHJcbiAgICAgICAgICAgICAgICBgTGFzdCB1cGRhdGVkOiAke25ldyBEYXRlKFxyXG4gICAgICAgICAgICAgICAgICAgIHZtSW5mb0NhY2hlLmxhc3RVcGRhdGVkXHJcbiAgICAgICAgICAgICAgICApLnRvTG9jYWxlU3RyaW5nKCl9YFxyXG4gICAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgICAgdGVtcGxhdGVJZHMuZm9yRWFjaCgodGVtcGxhdGVJZCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZGF0YSA9IGdldFZNSW5mb0Zyb21DYWNoZSh0ZW1wbGF0ZUlkKTtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFxyXG4gICAgICAgICAgICAgICAgICAgIGAke3RlbXBsYXRlSWR9OiAke2RhdGEgPyBkYXRhLmZvcm1hdHRlZE9TIDogXCJleHBpcmVkXCJ9YFxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICh0ZW1wbGF0ZUlkKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBnZXRWTUluZm9Gcm9tQ2FjaGUodGVtcGxhdGVJZCk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICByZW1vdmU6IGZ1bmN0aW9uICh0ZW1wbGF0ZUlkKSB7XHJcbiAgICAgICAgICAgIHJlbW92ZVZNSW5mb0Zyb21DYWNoZSh0ZW1wbGF0ZUlkKTtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coYFJlbW92ZWQgJHt0ZW1wbGF0ZUlkfSBmcm9tIGNhY2hlYCk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICByYXc6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGdldFZNSW5mb0NhY2hlKCk7XHJcbiAgICAgICAgfSxcclxuICAgIH07XHJcbn0pO1xyXG4iXSwibWFwcGluZ3MiOiJBQUFBQSxDQUFDLENBQUNDLFFBQVEsQ0FBQyxDQUFDQyxLQUFLLENBQUMsWUFBWTtFQUMxQjtFQUNBLFNBQVNDLGtCQUFrQkEsQ0FBQSxFQUFHO0lBQzFCO0lBQ0FILENBQUMsQ0FBQ0MsUUFBUSxDQUFDLENBQUNHLEVBQUUsQ0FBQyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsVUFBVUMsQ0FBQyxFQUFFO01BQ3ZEQSxDQUFDLENBQUNDLGVBQWUsQ0FBQyxDQUFDO01BQ25CLElBQU1DLFNBQVMsR0FBR1AsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDUSxPQUFPLENBQUMsa0JBQWtCLENBQUM7TUFDckQsSUFBTUMsUUFBUSxHQUFHRixTQUFTLENBQUNHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQztNQUNwRCxJQUFNQyxTQUFTLEdBQUdYLENBQUMsQ0FBQyxJQUFJLENBQUM7O01BRXpCO01BQ0FBLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxDQUNoQlksR0FBRyxDQUFDTCxTQUFTLENBQUMsQ0FDZEcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLENBQ3pCRyxXQUFXLENBQUMsTUFBTSxDQUFDO01BQ3hCYixDQUFDLENBQUMsa0JBQWtCLENBQUMsQ0FDaEJZLEdBQUcsQ0FBQ0wsU0FBUyxDQUFDLENBQ2RHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxDQUMxQkcsV0FBVyxDQUFDLFFBQVEsQ0FBQzs7TUFFMUI7TUFDQUosUUFBUSxDQUFDSyxXQUFXLENBQUMsTUFBTSxDQUFDO01BQzVCSCxTQUFTLENBQUNHLFdBQVcsQ0FBQyxRQUFRLENBQUM7SUFDbkMsQ0FBQyxDQUFDOztJQUVGO0lBQ0FkLENBQUMsQ0FBQ0MsUUFBUSxDQUFDLENBQUNHLEVBQUUsQ0FBQyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsVUFBVUMsQ0FBQyxFQUFFO01BQ3JEQSxDQUFDLENBQUND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\n//# sourceURL=webpack-internal:///./resources/js/service/vminfo.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/js/service/vminfo.js"]();
|
|
/******/
|
|
/******/ })()
|
|
; |