(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);throw new Error("Cannot find module '"+o+"'")}var f=n[o]={exports:{}};t[o][0].call(f.exports,function(e){var n=t[o][1][e];return s(n?n:e)},f,f.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o { toast.onmouseenter = Swal.stopTimer; toast.onmouseleave = Swal.resumeTimer; } }); function formatLabelPath(parts) { return parts.filter(Boolean).map(function (s) { return String(s).trim(); }).filter(Boolean).join(' → '); } function triggerSwalEmptyRequired(arg1, firstLabel, tab) { // Supports both old signature (fieldId, firstLabel, tab) // and new signature (object { id, tab, group, repeater, label, parent }) var path = ''; var p; if (typeof arg1 === 'object' && arg1 !== null) { p = arg1; // Include parent (repeater parent field label) when present path = formatLabelPath([p.tab, p.group, p.parent, p.repeater, p.label]); } else { // Fallback to old behavior if (firstLabel) { path = formatLabelPath([tab, firstLabel]); } } // Wider dialog for repeater breadcrumb to avoid wrapping var isRepeaterContext = (typeof p !== 'undefined') && (!!p.parent || !!p.repeater); Swal.fire({ icon: 'warning', title: 'Empty Required Field', html: path ? 'Check: ' + path + '' : '', width: isRepeaterContext ? '50em' : undefined, customClass: { confirmButton: 'btn text-bg-primary' }, didOpen: (popup) => { if (isRepeaterContext) { var htmlC = popup.querySelector('.swal2-html-container'); if (htmlC) { htmlC.style.whiteSpace = 'nowrap'; } } } }); } // === DeweBox/Nuxy required/visibility helpers (global) === function isBoxChildVisible($box, includeHidden) { if (includeHidden === true) return true; // scan *all* tabs/sections return $box.is(':visible'); } function readFieldValue($input) { const id = $input.attr('id'); const tag = $input.prop('tagName'); const type= ($input.attr('type') || '').toLowerCase(); // TinyMCE if (tag === 'TEXTAREA' && typeof window.tinymce !== 'undefined') { const ed = tinymce.get(id); if (ed) return ed.getContent(); } // CodeMirror via WP code editor (textarea sibling with .CodeMirror) if (tag === 'TEXTAREA' && window.wp && wp.codeEditor) { const cmWrap = $input.next('.CodeMirror'); if (cmWrap.length && cmWrap[0].CodeMirror) { return cmWrap[0].CodeMirror.getValue(); } } if (type === 'checkbox' || type === 'radio') { const name = $input.attr('name'); return !!$(`[name="${name}"]:checked`).length; } return $.trim($input.val() || ''); } function isRequiredEmpty($input) { if (!$input.is('[required]')) return false; const tag = $input.prop('tagName'); const type = ($input.attr('type') || '').toLowerCase(); if (type === 'checkbox' || type === 'radio') { const name = $input.attr('name'); return !$(`[name="${name}"]:checked`).length; } const v = readFieldValue($input); return v === '' || v === null || typeof v === 'undefined'; } function collectInvalidFields(includeHidden) { const invalid = []; // Ensure TinyMCE mirrors content back to textarea before reading values if (window.tinymce) tinymce.triggerSave(); $('.wpcfto-box-child').each(function () { const $boxChild = $(this); const fieldId = $boxChild.attr('data-field'); const $tab = $boxChild.closest('.wpcfto-tab'); const tabId = $tab.attr('id'); const tabTitle = $(`[data-section=${tabId}]`).text(); if (!isBoxChildVisible($boxChild, includeHidden)) return; // Try to find nearest group title before this field const groupLabel = ($boxChild.prevAll('.wpcfto_group_started:first') .find('.wpcfto-field-aside__label span:first-child').text() || '').trim(); if ($boxChild.hasClass('repeater')) { // Repeater parent label (the field label for the repeater itself) const parentLabel = ($boxChild.find('.wpcfto-field-aside__label span:first-child').first().text() || '').trim(); // checker for the parent itself if($boxChild.find('.wpcfto-repeater-single').length == 0){ invalid.push({ id: fieldId, tab: tabTitle, group: groupLabel, parent: parentLabel }); } $boxChild.find('.wpcfto-repeater-single').each(function (idx) { const $item = $(this); // Repeater item label heuristics (prefer the Vue-rendered title) const titleEl = $item.find('.wpcfto_group_title').first(); let repeaterLabel = (titleEl.text() || '').toString().trim(); if (!repeaterLabel) { repeaterLabel = ( $item.find('[data-repeater-label]').val() || $item.find('[name*="[label]"]').val() || $item.find('[name*="[title]"]').val() || $item.find('[name*="[name]"]').val() || $item.find('.wpcfto-repeater-title, .wpcfto-repeater-item-label').first().text() || '' ).toString().trim(); } if (!repeaterLabel) repeaterLabel = `Item #${idx+1}`; $item.find('input, textarea, select').filter('[required]').each(function () { const $f = $(this); if (isRequiredEmpty($f)) { const emptyLabel = $f.closest('.wpcfto_generic_field') .find('.wpcfto-field-aside__label span:first-child').text() || fieldId; invalid.push({ id: fieldId, tab: tabTitle, group: groupLabel, parent: parentLabel, repeater: repeaterLabel, label: emptyLabel }); } }); }); return; } $boxChild.find('input, textarea, select').filter('[required]').each(function () { const $f = $(this); if (isRequiredEmpty($f)) { const fieldLabel = $(`[data-field=${fieldId}] label > span:first-child`).text() || fieldId; invalid.push({ id: fieldId, tab: tabTitle, group: groupLabel, repeater: null, label: fieldLabel }); } }); }); return invalid; } function firstInvalidField(includeHidden) { const inv = collectInvalidFields(includeHidden); return inv.length ? inv[0] : null; } function focusFirstInvalid(invalid) { if (!invalid) return; const $targetTab = $(`[data-field=${invalid.id}]`).closest('.wpcfto-tab'); const tabId = $targetTab.attr('id'); if (tabId) { // try Vue's changeTab if available if (typeof vm !== 'undefined' && vm.changeTab) { vm.changeTab(tabId); } else { $('#' + tabId).addClass('active').siblings('.wpcfto-tab').removeClass('active'); $(`[data-section="${tabId}"]`).closest('.wpcfto-nav').addClass('active').siblings('.wpcfto-nav').removeClass('active'); } $('html, body').animate({ scrollTop: $(`[data-field=${invalid.id}]`).offset().top - 120 }, 'fast'); } } $('[data-vue]').each(function () { var $this = $(this); var data_var = $this.attr('data-vue'); var data_source = $this.attr('data-source'); Vue.mixin(window.validationMixin); new Vue({ el: $(this)[0], data: function data() { return { loading: false, data: '', settings_alert: { status: false, success: true }, invalidFields: new Set(), }; }, created() { // Listen for validation updates from fields this.$on('field-validation', ({ fieldId, isValid }) => { if (isValid) { this.invalidFields.delete(fieldId); } else { this.invalidFields.add(fieldId); } }); }, mounted: function mounted() { this.getSettings(); this.clearEmptyGroups(); // Intercept Classic Editor Publish/Save buttons const vm = this; vm.$nextTick(() => { $(document).off('click.deweboxPublish').on('click.deweboxPublish', '#publish, #save-post', function(e) { const invalidField = firstInvalidField(true); if (invalidField) { e.preventDefault(); if (typeof window.Swal === 'function') { triggerSwalEmptyRequired(invalidField); } else { alert('Please fill all required fields before saving.' + (invalidField.label ? '\nFirst missing: ' + invalidField.label : '')); } focusFirstInvalid(invalidField); return false; } }); }); // Gutenberg: lock publish when invalid and show SweetAlert on attempt if (window.wp && wp.data && wp.data.select('core/editor')) { const { subscribe, dispatch } = wp.data; const LOCK_KEY = 'wpcfto-required-lock'; const applyLock = () => { const invalid = firstInvalidField(true); if (invalid) { dispatch('core/editor').lockPostSaving(LOCK_KEY); } else { dispatch('core/editor').unlockPostSaving(LOCK_KEY); } }; applyLock(); subscribe(applyLock); $(document).off('click.deweboxGutenberg').on('click.deweboxGutenberg', '.editor-post-publish-button, .editor-post-publish-panel__toggle', function(e){ const invalid = firstInvalidField(true); if (invalid) { e.preventDefault(); triggerSwalEmptyRequired(invalid); focusFirstInvalid(invalid); return false; } }); } }, methods: { validateAllFields: function validateAllFields() { const invalid = firstInvalidField(true); return invalid ? invalid : null; }, getFieldLabelById(fieldId) { let label = ''; var parent = $('#'+fieldId).closest('.wpcfto-box-child'); var dataField = parent.attr('data-field'); var labelText = $('[data-field='+dataField+'] label span:first-child').text(); label = labelText; return label || fieldId; }, initSubmenu: function initSubmenu() { Vue.nextTick().then(function () { (function ($) { /*Hide all fields in submenu*/ var submenu_tab_fields = $('.wpcfto-tab.has-submenu-items [data-field], .wpcfto-tab.has-submenu-items .wpcfto_group_started'); submenu_tab_fields.css({ display: 'none' }); var $sub_menu = $('.wpcfto-submenus .active'); var sub_menu_section = $sub_menu.attr('data-submenu'); var $submenu_section = $('.' + sub_menu_section); $submenu_section.removeAttr('style'); submenu_tab_fields.parents('.wpcfto_group_started').css({ display: 'none' }); $submenu_section.parents('.wpcfto_group_started').removeAttr('style'); })(jQuery); }); }, changeTabFromAnchor: function changeTabFromAnchor() { var _this = this; var hash = window.location.hash; var hashParts = hash.split('#'); if (typeof hashParts[1] !== 'undefined') { Vue.nextTick(function () { _this.changeTab(hashParts[1]); }); } }, changeTab: function changeTab(tab) { var $tab = $('#' + tab); $tab.closest('.stm_metaboxes_grid__inner').find('.wpcfto-tab').removeClass('active'); $tab.addClass('active'); var $section = $('div[data-section="' + tab + '"]'); $tab.closest('.wpcfto-settings').find('.wpcfto-nav').removeClass('active'); $tab.closest('.stm_metaboxes_grid__inner').find('.wpcfto-nav').removeClass('active'); $section.closest('.wpcfto-nav').addClass('active'); history.pushState(null, null, '#' + tab); /*if has submenu*/ if ($section.closest('.wpcfto-nav').hasClass('has-submenu')) { var $submenu = $section.closest('.wpcfto-nav').find('.wpcfto-submenus [data-submenu]').eq(0); var urlParams = new URLSearchParams(window.location.search); var submenuParam = urlParams.get('submenu'); if (submenuParam) { var navSubmenu = $section.closest('.wpcfto-nav').find(".wpcfto-submenus [data-submenu=".concat(tab, "_").concat(submenuParam, "]")); $submenu = navSubmenu !== undefined && navSubmenu.length > 0 ? navSubmenu : $submenu; } this.changeSubMenu($submenu.attr('data-submenu')); } /*Scroll top*/ $("html, body").animate({ scrollTop: $tab.closest('.stm_metaboxes_grid__inner').offset().top - 100 }, "fast"); }, changeSubMenu: function changeSubMenu(sub_menu) { var $submenu = $('[data-submenu="' + sub_menu + '"]'); $('[data-submenu]').removeClass('active'); $submenu.addClass('active'); this.initSubmenu(); }, getSettings: function getSettings() { var _this = this; _this.loading = true; this.$http.get(stm_wpcfto_ajaxurl + '?action=stm_wpcfto_get_settings&source=' + data_source + '&name=' + data_var + '&nonce=' + wpcfto_global_settings['nonce']).then(function (r) { _this.$set(_this, 'data', r.body); _this.loading = false; this.changeTabFromAnchor(); this.initSubmenu(); }); }, saveSettings: function saveSettings(id) { // Ensure editors sync back to DOM before validation/post if (window.tinymce) tinymce.triggerSave(); const invalidField = firstInvalidField(true); if (invalidField) { if (typeof window.Swal === 'function') { triggerSwalEmptyRequired(invalidField); } else { alert('Please fill all required fields before saving.' + (invalidField.label ? '\nFirst missing: ' + invalidField.label : '')); } focusFirstInvalid(invalidField); return; } var vm = this; vm.loading = true; // Proceed with existing saveSettings logic this.$http.post(stm_wpcfto_ajaxurl + '?action=wpcfto_save_settings&nonce=' + stm_wpcfto_nonces['wpcfto_save_settings'] + '&name=' + id, JSON.stringify(vm.data)).then(function (response) { vm.loading = false; vm.settings_alert = { success: response.status === 200, status: true }; setTimeout(function () { vm.settings_alert.status = false; }, 1500); // location.reload(); if(response.status == 200 && response.ok) if (typeof window.Swal === 'function') { Toast.fire({ icon: "success", title: 'Successfully save any changes' }); } else { alert('Successfully save any changes'); } }); }, initOpen: function initOpen(field) { if (typeof field.opened === 'undefined') { this.$set(field, 'opened', !!field.value); } }, openField: function openField(field) { var opened = !field.opened; this.$set(field, 'opened', opened); if (!field.opened) { this.$set(field, 'value', ''); } }, enableAddon: function enableAddon($event, option) { var _this = this; Vue.nextTick(function () { (function ($) { var currentItem = $($event.target); currentItem.addClass('loading'); var url = stm_wpcfto_ajaxurl + '?action=stm_lms_enable_addon&addon=' + option; _this.$http.get(url).then(function (response) { currentItem.removeClass('loading'); var $container = $('.stm_lms_addon_group_settings_' + option); $container.each(function () { var $this = $(this); $this.removeClass('is_pro is_pro_in_addon'); $this.find('.field_overlay').remove(); $this.find('.pro-notice').remove(); }); }); })(jQuery); }); }, clearEmptyGroups: function clearEmptyGroups() { Vue.nextTick().then(function () { (function ($) { $('.wpcfto_group_started').each(function () { var $group = $(this); var $childs = $group.find('.wpcfto-box-child'); if (!$childs.length) { $group.addClass('no-childs-visible'); } else { $group.removeClass('no-childs-visible'); } }); })(jQuery); }); }, addRepeaterRow() { const invalid = firstInvalidField(true); if (invalid) { if (typeof window.Swal === 'function') { Toast.fire({ icon: "warning", title: 'Please fill all required fields before adding a new row.' }); } else { alert('Please fill all required fields before adding a new row.'); } focusFirstInvalid(invalid); return; } // TODO: your existing logic to actually add a repeater row goes here } }, watch: { data: { deep: true, handler: function handler() { var _this = this; setTimeout(function () { _this.clearEmptyGroups(); _this.initSubmenu(); }, 100); } } } }); }); }); })(jQuery); //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyIkIiwiZG9jdW1lbnQiLCJyZWFkeSIsImVhY2giLCIkdGhpcyIsImRhdGFfdmFyIiwiYXR0ciIsImRhdGFfc291cmNlIiwiVnVlIiwiZWwiLCJkYXRhIiwibG9hZGluZyIsInNldHRpbmdzX2FsZXJ0Iiwic3RhdHVzIiwic3VjY2VzcyIsIm1vdW50ZWQiLCJnZXRTZXR0aW5ncyIsImNsZWFyRW1wdHlHcm91cHMiLCJtZXRob2RzIiwiaW5pdFN1Ym1lbnUiLCJuZXh0VGljayIsInRoZW4iLCJzdWJtZW51X3RhYl9maWVsZHMiLCJjc3MiLCJkaXNwbGF5IiwiJHN1Yl9tZW51Iiwic3ViX21lbnVfc2VjdGlvbiIsIiRzdWJtZW51X3NlY3Rpb24iLCJyZW1vdmVBdHRyIiwicGFyZW50cyIsImpRdWVyeSIsImNoYW5nZVRhYkZyb21BbmNob3IiLCJfdGhpcyIsImhhc2giLCJ3aW5kb3ciLCJsb2NhdGlvbiIsImhhc2hQYXJ0cyIsInNwbGl0IiwiY2hhbmdlVGFiIiwidGFiIiwiJHRhYiIsImNsb3Nlc3QiLCJmaW5kIiwicmVtb3ZlQ2xhc3MiLCJhZGRDbGFzcyIsIiRzZWN0aW9uIiwiaGlzdG9yeSIsInB1c2hTdGF0ZSIsImhhc0NsYXNzIiwiJHN1Ym1lbnUiLCJlcSIsInVybFBhcmFtcyIsIlVSTFNlYXJjaFBhcmFtcyIsInNlYXJjaCIsInN1Ym1lbnVQYXJhbSIsImdldCIsIm5hdlN1Ym1lbnUiLCJjb25jYXQiLCJ1bmRlZmluZWQiLCJsZW5ndGgiLCJjaGFuZ2VTdWJNZW51IiwiYW5pbWF0ZSIsInNjcm9sbFRvcCIsIm9mZnNldCIsInRvcCIsInN1Yl9tZW51IiwiJGh0dHAiLCJzdG1fd3BjZnRvX2FqYXh1cmwiLCJ3cGNmdG9fZ2xvYmFsX3NldHRpbmdzIiwiciIsIiRzZXQiLCJib2R5Iiwic2F2ZVNldHRpbmdzIiwiaWQiLCJ2bSIsInBvc3QiLCJzdG1fd3BjZnRvX25vbmNlcyIsIkpTT04iLCJzdHJpbmdpZnkiLCJyZXNwb25zZSIsIl9yZXNwb25zZSRib2R5Iiwic2V0VGltZW91dCIsInJlbG9hZCIsImluaXRPcGVuIiwiZmllbGQiLCJvcGVuZWQiLCJ2YWx1ZSIsIm9wZW5GaWVsZCIsImVuYWJsZUFkZG9uIiwiJGV2ZW50Iiwib3B0aW9uIiwiY3VycmVudEl0ZW0iLCJ0YXJnZXQiLCJ1cmwiLCIkY29udGFpbmVyIiwicmVtb3ZlIiwiJGdyb3VwIiwiJGNoaWxkcyIsIndhdGNoIiwiZGVlcCIsImhhbmRsZXIiXSwic291cmNlcyI6WyJmYWtlXzMwNjNhYzRhLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG4oZnVuY3Rpb24gKCQpIHtcbiAgJChkb2N1bWVudCkucmVhZHkoZnVuY3Rpb24gKCkge1xuICAgICQoJ1tkYXRhLXZ1ZV0nKS5lYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciAkdGhpcyA9ICQodGhpcyk7XG4gICAgICB2YXIgZGF0YV92YXIgPSAkdGhpcy5hdHRyKCdkYXRhLXZ1ZScpO1xuICAgICAgdmFyIGRhdGFfc291cmNlID0gJHRoaXMuYXR0cignZGF0YS1zb3VyY2UnKTtcbiAgICAgIG5ldyBWdWUoe1xuICAgICAgICBlbDogJCh0aGlzKVswXSxcbiAgICAgICAgZGF0YTogZnVuY3Rpb24gZGF0YSgpIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbG9hZGluZzogZmFsc2UsXG4gICAgICAgICAgICBkYXRhOiAnJyxcbiAgICAgICAgICAgIHNldHRpbmdzX2FsZXJ0OiB7XG4gICAgICAgICAgICAgIHN0YXR1czogZmFsc2UsXG4gICAgICAgICAgICAgIHN1Y2Nlc3M6IHRydWVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9O1xuICAgICAgICB9LFxuICAgICAgICBtb3VudGVkOiBmdW5jdGlvbiBtb3VudGVkKCkge1xuICAgICAgICAgIHRoaXMuZ2V0U2V0dGluZ3MoKTtcbiAgICAgICAgICB0aGlzLmNsZWFyRW1wdHlHcm91cHMoKTtcbiAgICAgICAgfSxcbiAgICAgICAgbWV0aG9kczoge1xuICAgICAgICAgIGluaXRTdWJtZW51OiBmdW5jdGlvbiBpbml0U3VibWVudSgpIHtcbiAgICAgICAgICAgIFZ1ZS5uZXh0VGljaygpLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAoZnVuY3Rpb24gKCQpIHtcbiAgICAgICAgICAgICAgICAvKkhpZGUgYWxsIGZpZWxkcyBpbiBzdWJtZW51Ki9cbiAgICAgICAgICAgICAgICB2YXIgc3VibWVudV90YWJfZmllbGRzID0gJCgnLndwY2Z0by10YWIuaGFzLXN1Ym1lbnUtaXRlbXMgW2RhdGEtZmllbGRdLCAud3BjZnRvLXRhYi5oYXMtc3VibWVudS1pdGVtcyAud3BjZnRvX2dyb3VwX3N0YXJ0ZWQnKTtcbiAgICAgICAgICAgICAgICBzdWJtZW51X3RhYl9maWVsZHMuY3NzKHtcbiAgICAgICAgICAgICAgICAgIGRpc3BsYXk6ICdub25lJ1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHZhciAkc3ViX21lbnUgPSAkKCcud3BjZnRvLXN1Ym1lbnVzIC5hY3RpdmUnKTtcbiAgICAgICAgICAgICAgICB2YXIgc3ViX21lbnVfc2VjdGlvbiA9ICRzdWJfbWVudS5hdHRyKCdkYXRhLXN1Ym1lbnUnKTtcbiAgICAgICAgICAgICAgICB2YXIgJHN1Ym1lbnVfc2VjdGlvbiA9ICQoJy4nICsgc3ViX21lbnVfc2VjdGlvbik7XG4gICAgICAgICAgICAgICAgJHN1Ym1lbnVfc2VjdGlvbi5yZW1vdmVBdHRyKCdzdHlsZScpO1xuICAgICAgICAgICAgICAgIHN1Ym1lbnVfdGFiX2ZpZWxkcy5wYXJlbnRzKCcud3BjZnRvX2dyb3VwX3N0YXJ0ZWQnKS5jc3Moe1xuICAgICAgICAgICAgICAgICAgZGlzcGxheTogJ25vbmUnXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgJHN1Ym1lbnVfc2VjdGlvbi5wYXJlbnRzKCcud3BjZnRvX2dyb3VwX3N0YXJ0ZWQnKS5yZW1vdmVBdHRyKCdzdHlsZScpO1xuICAgICAgICAgICAgICB9KShqUXVlcnkpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBjaGFuZ2VUYWJGcm9tQW5jaG9yOiBmdW5jdGlvbiBjaGFuZ2VUYWJGcm9tQW5jaG9yKCkge1xuICAgICAgICAgICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgICAgICAgICAgdmFyIGhhc2ggPSB3aW5kb3cubG9jYXRpb24uaGFzaDtcbiAgICAgICAgICAgIHZhciBoYXNoUGFydHMgPSBoYXNoLnNwbGl0KCcjJyk7XG5cbiAgICAgICAgICAgIGlmICh0eXBlb2YgaGFzaFBhcnRzWzFdICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICBWdWUubmV4dFRpY2soZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIF90aGlzLmNoYW5nZVRhYihoYXNoUGFydHNbMV0pO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIGNoYW5nZVRhYjogZnVuY3Rpb24gY2hhbmdlVGFiKHRhYikge1xuICAgICAgICAgICAgdmFyICR0YWIgPSAkKCcjJyArIHRhYik7XG4gICAgICAgICAgICAkdGFiLmNsb3Nlc3QoJy5zdG1fbWV0YWJveGVzX2dyaWRfX2lubmVyJykuZmluZCgnLndwY2Z0by10YWInKS5yZW1vdmVDbGFzcygnYWN0aXZlJyk7XG4gICAgICAgICAgICAkdGFiLmFkZENsYXNzKCdhY3RpdmUnKTtcbiAgICAgICAgICAgIHZhciAkc2VjdGlvbiA9ICQoJ2RpdltkYXRhLXNlY3Rpb249XCInICsgdGFiICsgJ1wiXScpO1xuICAgICAgICAgICAgJHRhYi5jbG9zZXN0KCcud3BjZnRvLXNldHRpbmdzJykuZmluZCgnLndwY2Z0by1uYXYnKS5yZW1vdmVDbGFzcygnYWN0aXZlJyk7XG4gICAgICAgICAgICAkdGFiLmNsb3Nlc3QoJy5zdG1fbWV0YWJveGVzX2dyaWRfX2lubmVyJykuZmluZCgnLndwY2Z0by1uYXYnKS5yZW1vdmVDbGFzcygnYWN0aXZlJyk7XG4gICAgICAgICAgICAkc2VjdGlvbi5jbG9zZXN0KCcud3BjZnRvLW5hdicpLmFkZENsYXNzKCdhY3RpdmUnKTtcbiAgICAgICAgICAgIGhpc3RvcnkucHVzaFN0YXRlKG51bGwsIG51bGwsICcjJyArIHRhYik7XG4gICAgICAgICAgICAvKmlmIGhhcyBzdWJtZW51Ki9cblxuICAgICAgICAgICAgaWYgKCRzZWN0aW9uLmNsb3Nlc3QoJy53cGNmdG8tbmF2JykuaGFzQ2xhc3MoJ2hhcy1zdWJtZW51JykpIHtcbiAgICAgICAgICAgICAgdmFyICRzdWJtZW51ID0gJHNlY3Rpb24uY2xvc2VzdCgnLndwY2Z0by1uYXYnKS5maW5kKCcud3BjZnRvLXN1Ym1lbnVzIFtkYXRhLXN1Ym1lbnVdJykuZXEoMCk7XG4gICAgICAgICAgICAgIHZhciB1cmxQYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHdpbmRvdy5sb2NhdGlvbi5zZWFyY2gpO1xuICAgICAgICAgICAgICB2YXIgc3VibWVudVBhcmFtID0gdXJsUGFyYW1zLmdldCgnc3VibWVudScpO1xuXG4gICAgICAgICAgICAgIGlmIChzdWJtZW51UGFyYW0pIHtcbiAgICAgICAgICAgICAgICB2YXIgbmF2U3VibWVudSA9ICRzZWN0aW9uLmNsb3Nlc3QoJy53cGNmdG8tbmF2JykuZmluZChcIi53cGNmdG8tc3VibWVudXMgW2RhdGEtc3VibWVudT1cIi5jb25jYXQodGFiLCBcIl9cIikuY29uY2F0KHN1Ym1lbnVQYXJhbSwgXCJdXCIpKTtcbiAgICAgICAgICAgICAgICAkc3VibWVudSA9IG5hdlN1Ym1lbnUgIT09IHVuZGVmaW5lZCAmJiBuYXZTdWJtZW51Lmxlbmd0aCA+IDAgPyBuYXZTdWJtZW51IDogJHN1Ym1lbnU7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICB0aGlzLmNoYW5nZVN1Yk1lbnUoJHN1Ym1lbnUuYXR0cignZGF0YS1zdWJtZW51JykpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLypTY3JvbGwgdG9wKi9cblxuXG4gICAgICAgICAgICAkKFwiaHRtbCwgYm9keVwiKS5hbmltYXRlKHtcbiAgICAgICAgICAgICAgc2Nyb2xsVG9wOiAkdGFiLmNsb3Nlc3QoJy5zdG1fbWV0YWJveGVzX2dyaWRfX2lubmVyJykub2Zmc2V0KCkudG9wIC0gMTAwXG4gICAgICAgICAgICB9LCBcImZhc3RcIik7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBjaGFuZ2VTdWJNZW51OiBmdW5jdGlvbiBjaGFuZ2VTdWJNZW51KHN1Yl9tZW51KSB7XG4gICAgICAgICAgICB2YXIgJHN1Ym1lbnUgPSAkKCdbZGF0YS1zdWJtZW51PVwiJyArIHN1Yl9tZW51ICsgJ1wiXScpO1xuICAgICAgICAgICAgJCgnW2RhdGEtc3VibWVudV0nKS5yZW1vdmVDbGFzcygnYWN0aXZlJyk7XG4gICAgICAgICAgICAkc3VibWVudS5hZGRDbGFzcygnYWN0aXZlJyk7XG4gICAgICAgICAgICB0aGlzLmluaXRTdWJtZW51KCk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBnZXRTZXR0aW5nczogZnVuY3Rpb24gZ2V0U2V0dGluZ3MoKSB7XG4gICAgICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgICAgICAgICBfdGhpcy5sb2FkaW5nID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuJGh0dHAuZ2V0KHN0bV93cGNmdG9fYWpheHVybCArICc/YWN0aW9uPXN0bV93cGNmdG9fZ2V0X3NldHRpbmdzJnNvdXJjZT0nICsgZGF0YV9zb3VyY2UgKyAnJm5hbWU9JyArIGRhdGFfdmFyICsgJyZub25jZT0nICsgd3BjZnRvX2dsb2JhbF9zZXR0aW5nc1snbm9uY2UnXSkudGhlbihmdW5jdGlvbiAocikge1xuICAgICAgICAgICAgICBfdGhpcy4kc2V0KF90aGlzLCAnZGF0YScsIHIuYm9keSk7XG5cbiAgICAgICAgICAgICAgX3RoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgICB0aGlzLmNoYW5nZVRhYkZyb21BbmNob3IoKTtcbiAgICAgICAgICAgICAgdGhpcy5pbml0U3VibWVudSgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBzYXZlU2V0dGluZ3M6IGZ1bmN0aW9uIHNhdmVTZXR0aW5ncyhpZCkge1xuICAgICAgICAgICAgdmFyIHZtID0gdGhpcztcbiAgICAgICAgICAgIHZtLmxvYWRpbmcgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy4kaHR0cC5wb3N0KHN0bV93cGNmdG9fYWpheHVybCArICc/YWN0aW9uPXdwY2Z0b19zYXZlX3NldHRpbmdzJm5vbmNlPScgKyBzdG1fd3BjZnRvX25vbmNlc1snd3BjZnRvX3NhdmVfc2V0dGluZ3MnXSArICcmbmFtZT0nICsgaWQsIEpTT04uc3RyaW5naWZ5KHZtLmRhdGEpKS50aGVuKGZ1bmN0aW9uIChyZXNwb25zZSkge1xuICAgICAgICAgICAgICB2YXIgX3Jlc3BvbnNlJGJvZHk7XG5cbiAgICAgICAgICAgICAgdm0ubG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgICB2bS5zZXR0aW5nc19hbGVydCA9IHtcbiAgICAgICAgICAgICAgICBzdWNjZXNzOiByZXNwb25zZS5zdGF0dXMgPT09IDIwMCxcbiAgICAgICAgICAgICAgICBzdGF0dXM6IHRydWVcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgdm0uc2V0dGluZ3NfYWxlcnQuc3RhdHVzID0gZmFsc2U7XG4gICAgICAgICAgICAgIH0sIDE1MDApO1xuICAgICAgICAgICAgICBpZiAoKChfcmVzcG9uc2UkYm9keSA9IHJlc3BvbnNlLmJvZHkpID09PSBudWxsIHx8IF9yZXNwb25zZSRib2R5ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfcmVzcG9uc2UkYm9keS5yZWxvYWQpID09PSB0cnVlKSBsb2NhdGlvbi5yZWxvYWQoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgaW5pdE9wZW46IGZ1bmN0aW9uIGluaXRPcGVuKGZpZWxkKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGZpZWxkLm9wZW5lZCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgdGhpcy4kc2V0KGZpZWxkLCAnb3BlbmVkJywgISFmaWVsZC52YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBvcGVuRmllbGQ6IGZ1bmN0aW9uIG9wZW5GaWVsZChmaWVsZCkge1xuICAgICAgICAgICAgdmFyIG9wZW5lZCA9ICFmaWVsZC5vcGVuZWQ7XG4gICAgICAgICAgICB0aGlzLiRzZXQoZmllbGQsICdvcGVuZWQnLCBvcGVuZWQpO1xuXG4gICAgICAgICAgICBpZiAoIWZpZWxkLm9wZW5lZCkge1xuICAgICAgICAgICAgICB0aGlzLiRzZXQoZmllbGQsICd2YWx1ZScsICcnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIGVuYWJsZUFkZG9uOiBmdW5jdGlvbiBlbmFibGVBZGRvbigkZXZlbnQsIG9wdGlvbikge1xuICAgICAgICAgICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgICAgICAgICAgVnVlLm5leHRUaWNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgKGZ1bmN0aW9uICgkKSB7XG4gICAgICAgICAgICAgICAgdmFyIGN1cnJlbnRJdGVtID0gJCgkZXZlbnQudGFyZ2V0KTtcbiAgICAgICAgICAgICAgICBjdXJyZW50SXRlbS5hZGRDbGFzcygnbG9hZGluZycpO1xuICAgICAgICAgICAgICAgIHZhciB1cmwgPSBzdG1fd3BjZnRvX2FqYXh1cmwgKyAnP2FjdGlvbj1zdG1fbG1zX2VuYWJsZV9hZGRvbiZhZGRvbj0nICsgb3B0aW9uO1xuXG4gICAgICAgICAgICAgICAgX3RoaXMuJGh0dHAuZ2V0KHVybCkudGhlbihmdW5jdGlvbiAocmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICAgIGN1cnJlbnRJdGVtLnJlbW92ZUNsYXNzKCdsb2FkaW5nJyk7XG4gICAgICAgICAgICAgICAgICB2YXIgJGNvbnRhaW5lciA9ICQoJy5zdG1fbG1zX2FkZG9uX2dyb3VwX3NldHRpbmdzXycgKyBvcHRpb24pO1xuICAgICAgICAgICAgICAgICAgJGNvbnRhaW5lci5lYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyICR0aGlzID0gJCh0aGlzKTtcbiAgICAgICAgICAgICAgICAgICAgJHRoaXMucmVtb3ZlQ2xhc3MoJ2lzX3BybyBpc19wcm9faW5fYWRkb24nKTtcbiAgICAgICAgICAgICAgICAgICAgJHRoaXMuZmluZCgnLmZpZWxkX292ZXJsYXknKS5yZW1vdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgJHRoaXMuZmluZCgnLnByby1ub3RpY2UnKS5yZW1vdmUoKTtcbiAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9KShqUXVlcnkpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBjbGVhckVtcHR5R3JvdXBzOiBmdW5jdGlvbiBjbGVhckVtcHR5R3JvdXBzKCkge1xuICAgICAgICAgICAgVnVlLm5leHRUaWNrKCkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgIChmdW5jdGlvbiAoJCkge1xuICAgICAgICAgICAgICAgICQoJy53cGNmdG9fZ3JvdXBfc3RhcnRlZCcpLmVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgdmFyICRncm91cCA9ICQodGhpcyk7XG4gICAgICAgICAgICAgICAgICB2YXIgJGNoaWxkcyA9ICRncm91cC5maW5kKCcud3BjZnRvLWJveC1jaGlsZCcpO1xuXG4gICAgICAgICAgICAgICAgICBpZiAoISRjaGlsZHMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICRncm91cC5hZGRDbGFzcygnbm8tY2hpbGRzLXZpc2libGUnKTtcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICRncm91cC5yZW1vdmVDbGFzcygnbm8tY2hpbGRzLXZpc2libGUnKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfSkoalF1ZXJ5KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgd2F0Y2g6IHtcbiAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICBkZWVwOiB0cnVlLFxuICAgICAgICAgICAgaGFuZGxlcjogZnVuY3Rpb24gaGFuZGxlcigpIHtcbiAgICAgICAgICAgICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBfdGhpcy5jbGVhckVtcHR5R3JvdXBzKCk7XG5cbiAgICAgICAgICAgICAgICBfdGhpcy5pbml0U3VibWVudSgpO1xuICAgICAgICAgICAgICB9LCAxMDApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xufSkoalF1ZXJ5KTsiXSwibWFwcGluZ3MiOiJBQUFBOztBQUVBLENBQUMsVUFBVUEsQ0FBVixFQUFhO0VBQ1pBLENBQUMsQ0FBQ0MsUUFBRCxDQUFELENBQVlDLEtBQVosQ0FBa0IsWUFBWTtJQUM1QkYsQ0FBQyxDQUFDLFlBQUQsQ0FBRCxDQUFnQkcsSUFBaEIsQ0FBcUIsWUFBWTtNQUMvQixJQUFJQyxLQUFLLEdBQUdKLENBQUMsQ0FBQyxJQUFELENBQWI7TUFDQSxJQUFJSyxRQUFRLEdBQUdELEtBQUssQ0FBQ0UsSUFBTixDQUFXLFVBQVgsQ0FBZjtNQUNBLElBQUlDLFdBQVcsR0FBR0gsS0FBSyxDQUFDRSxJQUFOLENBQVcsYUFBWCxDQUFsQjtNQUNBLElBQUlFLEdBQUosQ0FBUTtRQUNOQyxFQUFFLEVBQUVU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 },{}]},{},[1])