(window["webpackJsonp"] = window["webpackJsonp"] || []).push([["bootstrap_env~dettagli-fe~documenti~jquery-ui_env"],{ /***/ "./include/js/utils.js": /*!*****************************!*\ !*** ./include/js/utils.js ***! \*****************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); } function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } __webpack_require__(/*! core-js/modules/es.date.to-string.js */ "./node_modules/core-js/modules/es.date.to-string.js"); __webpack_require__(/*! core-js/modules/es.object.to-string.js */ "./node_modules/core-js/modules/es.object.to-string.js"); __webpack_require__(/*! core-js/modules/es.regexp.to-string.js */ "./node_modules/core-js/modules/es.regexp.to-string.js"); __webpack_require__(/*! core-js/modules/es.array.index-of.js */ "./node_modules/core-js/modules/es.array.index-of.js"); __webpack_require__(/*! core-js/modules/es.regexp.exec.js */ "./node_modules/core-js/modules/es.regexp.exec.js"); __webpack_require__(/*! core-js/modules/es.string.split.js */ "./node_modules/core-js/modules/es.string.split.js"); __webpack_require__(/*! core-js/modules/es.parse-int.js */ "./node_modules/core-js/modules/es.parse-int.js"); __webpack_require__(/*! core-js/modules/es.parse-float.js */ "./node_modules/core-js/modules/es.parse-float.js"); __webpack_require__(/*! core-js/modules/es.number.to-fixed.js */ "./node_modules/core-js/modules/es.number.to-fixed.js"); __webpack_require__(/*! core-js/modules/es.string.replace.js */ "./node_modules/core-js/modules/es.string.replace.js"); __webpack_require__(/*! core-js/modules/es.array.slice.js */ "./node_modules/core-js/modules/es.array.slice.js"); __webpack_require__(/*! core-js/modules/es.regexp.constructor.js */ "./node_modules/core-js/modules/es.regexp.constructor.js"); __webpack_require__(/*! core-js/modules/web.timers.js */ "./node_modules/core-js/modules/web.timers.js"); __webpack_require__(/*! core-js/modules/es.array.find.js */ "./node_modules/core-js/modules/es.array.find.js"); __webpack_require__(/*! core-js/modules/es.number.constructor.js */ "./node_modules/core-js/modules/es.number.constructor.js"); __webpack_require__(/*! core-js/modules/es.string.starts-with.js */ "./node_modules/core-js/modules/es.string.starts-with.js"); __webpack_require__(/*! core-js/modules/es.array.map.js */ "./node_modules/core-js/modules/es.array.map.js"); __webpack_require__(/*! core-js/modules/es.string.trim.js */ "./node_modules/core-js/modules/es.string.trim.js"); __webpack_require__(/*! core-js/modules/es.symbol.js */ "./node_modules/core-js/modules/es.symbol.js"); __webpack_require__(/*! core-js/modules/es.symbol.description.js */ "./node_modules/core-js/modules/es.symbol.description.js"); __webpack_require__(/*! core-js/modules/es.symbol.iterator.js */ "./node_modules/core-js/modules/es.symbol.iterator.js"); __webpack_require__(/*! core-js/modules/es.array.iterator.js */ "./node_modules/core-js/modules/es.array.iterator.js"); __webpack_require__(/*! core-js/modules/es.string.iterator.js */ "./node_modules/core-js/modules/es.string.iterator.js"); __webpack_require__(/*! core-js/modules/web.dom-collections.iterator.js */ "./node_modules/core-js/modules/web.dom-collections.iterator.js"); __webpack_require__(/*! core-js/modules/es.array.is-array.js */ "./node_modules/core-js/modules/es.array.is-array.js"); __webpack_require__(/*! core-js/modules/es.function.name.js */ "./node_modules/core-js/modules/es.function.name.js"); __webpack_require__(/*! core-js/modules/es.array.from.js */ "./node_modules/core-js/modules/es.array.from.js"); function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } /** * Created by PhpStorm * User: daniele * Date: 15/05/20 * Time: 13.05 */ var interval_avanzamento; module.exports = { in_array: function in_array(myArray, element) { var res = false; for (var e = 0; e < myArray.length; e++) { if (myArray[e] == element) { res = true; break; } } return res; }, is_array: function is_array(mixed_var) { return mixed_var.isArray() || _typeof(mixed_var) === "object"; }, roundTo: function roundTo(decimalpositions) { var i = this * Math.pow(10, decimalpositions); i = Math.round(i); return i / Math.pow(10, decimalpositions); }, countDecimals: function countDecimals(value) { var text = value.toString(); // verify if number 0.000005 is represented as "5e-6" if (text.indexOf('e-') > -1) { var _text$split = text.split('e-'), _text$split2 = _slicedToArray(_text$split, 2), base = _text$split2[0], trail = _text$split2[1]; var deg = parseInt(trail, 10); return deg; } // count decimals for number in representation like "0.123456" if (Math.floor(value) !== value) { return value.toString().split(".")[1].length || 0; } return 0; }, round: function round(num, dec) { if (!dec) dec = 0; var num_sign = num >= 0 ? 1 : -1; return parseFloat((Math.round(num * Math.pow(10, dec) + num_sign * 0.0001) / Math.pow(10, dec)).toFixed(dec)); }, getFloat: function getFloat(s0, dec) { var s = new String(s0); trim(s); s = s.replace(",", "."); var f = parseFloat(s); if (typeof f === "undefined" || isNaN(f)) return 0; if (dec) return round(f, dec); return f; }, getFloat2: function getFloat2(s) { return round(getFloat(s), 2); }, openWindow: function openWindow(file, w, h, nomefinestra) { if (nomefinestra == null) nomefinestra = "_blank"; var l = (screen.width - w) / 2; var t = (screen.height - h) / 2 - 100; window.open(file, nomefinestra, "fullscreen=yes,toolbar=no,menubar=no,scrollbars=yes,resizable=yes,status=no,location=no,directories=no,copyhistory=no,height=" + h + ",width=" + w + ",left=" + l + ",top=" + t); }, checkKey: function checkKey(e, chars) { var keynum = e.keyCode; if (e.which) keynum = e.which; var is_keyfunction = false; if (keynum in [8, 37, 39, 9, 36, 35, 46]) is_keyfunction = true; var keychar = String.fromCharCode(keynum); if (keychar === '.') is_keyfunction = false; var check = false; for (var i = 0; i < chars.length; i++) { if (chars[i] === keychar) { check = true; break; } } if (is_keyfunction) return true;else return check; }, number_format: function number_format(a, b, c, d) { a = Math.round(a * Math.pow(10, b)) / Math.pow(10, b); e = a + ''; f = e.split('.'); if (!f[0]) f[0] = '0'; if (!f[1]) f[1] = ''; if (f[1].length < b) { g = f[1]; for (i = f[1].length + 1; i <= b; i++) { g += '0'; } f[1] = g; } if (d != '' && f[0].length > 3) { h = f[0]; f[0] = ''; for (j = 3; j < h.length; j += 3) { i = h.slice(h.length - j, h.length - j + 3); f[0] = d + i + f[0] + ''; } j = h.substr(0, h.length % 3 == 0 ? 3 : h.length % 3); f[0] = j + f[0]; } c = b <= 0 ? '' : c; return f[0] + c + f[1]; }, toEuro: function toEuro(n, decimals, se_zero_stringa_vuota) { if (se_zero_stringa_vuota == null) se_zero_stringa_vuota = false; n = getFloat2(n); var CURRENCY__DECIMAL_SEPARATOR = $("#CURRENCY__DECIMAL_SEPARATOR").val(); var CURRENCY__THOUSANDS_SEPARATOR = $("#CURRENCY__THOUSANDS_SEPARATOR").val(); if (!decimals) decimals = 2; var sign = n < 0 ? "- " : ""; var s = number_format(Math.abs(n), decimals, CURRENCY__DECIMAL_SEPARATOR, CURRENCY__THOUSANDS_SEPARATOR); if (se_zero_stringa_vuota && parseFloat(s) === 0) s = ""; return sign + s; }, trim: function trim(str, chars) { return ltrim(rtrim(str, chars), chars); }, ltrim: function ltrim(str, chars) { chars = chars || "\\s"; return str.replace(new RegExp("^[" + chars + "]+", "g"), ""); }, rtrim: function rtrim(str, chars) { chars = chars || "\\s"; return str.replace(new RegExp("[" + chars + "]+$", "g"), ""); }, waiting: function waiting(visibile) { waiting2(visibile); }, waiting2: function waiting2(visibile, view_progress) { if (visibile == null) visibile = true; if (view_progress == null) view_progress = false; if (visibile) { dialogShow("div_waiting2"); if (view_progress) { $("#span_perc_avanzamento").show(); $("#span_symbol_perc").show(); interval_avanzamento = setInterval("runAjaxAvanzamento()", 200); } } else { $("#div_waiting2").dialog("close"); clearInterval(interval_avanzamento); } }, runAjaxAvanzamento: function runAjaxAvanzamento() { $.ajax({ url: "ajax.php?JSON=1&object=IWRoot&tipoview=getProgressBar", dataType: "json", success: function success(json) { $("#span_perc_avanzamento").html(json.perc_avanzamento + "%"); } }); }, str_pad: function str_pad(input, pad_length, pad_string, pad_type) { var half = '', pad_to_go; var str_pad_repeater = function str_pad_repeater(s, len) { var collect = '', i; while (collect.length < len) { collect += s; } collect = collect.substr(0, len); return collect; }; input += ''; pad_string = pad_string != null ? pad_string : " "; if (pad_type != 'STR_PAD_LEFT' && pad_type != 'STR_PAD_RIGHT' && pad_type != 'STR_PAD_BOTH') { pad_type = 'STR_PAD_RIGHT'; } if ((pad_to_go = pad_length - input.length) > 0) { if (pad_type == 'STR_PAD_LEFT') { input = str_pad_repeater(pad_string, pad_to_go) + input; } else if (pad_type == 'STR_PAD_RIGHT') { input = input + str_pad_repeater(pad_string, pad_to_go); } else if (pad_type == 'STR_PAD_BOTH') { half = str_pad_repeater(pad_string, Math.ceil(pad_to_go / 2)); input = half + input + half; input = input.substr(0, pad_length); } } return input; }, //visualizza un messaggio nell footer footerMsg: function footerMsg(tipo, titolo, testo) { if ($("#no_footermsg").val() === 1 || $("#IWEnv").val() === "bootstrap") { if (tipo == 0) $.growl.notice({ title: $("#transaction_success").val(), message: '' }); if (tipo == 1) $.growl.error({ duration: 30000, title: $("#transaction_error").val(), message: testo }); return true; } //tipo=0 (yes=verde) 1=(no=rosso) 2=(alert, giallo) var $div = $("#divMsg"); $div.fadeOut(); $div.html(titolo); $div.removeClass("msgOK3").removeClass("msgERR3"); if (tipo == 0) $div.addClass("msgOK3"); if (tipo == 1) $div.addClass("msgERR3"); //testo=testo.replace(/
/gi,"\n"); $div.prop("messaggio", testo); $div.fadeIn(); setTimeout("$('#divMsg').fadeOut();", 3 * 60000); return true; }, get_ean13_checkdigit: function get_ean13_checkdigit(s) { if (s.length > 12) s = s.substr(0, 12); s = parseInt(s, 10); s = str_pad(s, 12, "0", "STR_PAD_LEFT"); var even_sum = parseInt(s.substr(1, 1), 10) + parseInt(s.substr(3, 1), 10) + parseInt(s.substr(5, 1), 10) + parseInt(s.substr(7, 1), 10) + parseInt(s.substr(9, 1), 10) + parseInt(s.substr(11, 1), 10); var even_sum_three = even_sum * 3; var odd_sum = parseInt(s.substr(0, 1), 10) + parseInt(s.substr(2, 1), 10) + parseInt(s.substr(4, 1), 10) + parseInt(s.substr(6, 1), 10) + parseInt(s.substr(8, 1), 10) + parseInt(s.substr(10, 1), 10); var total_sum = even_sum_three + odd_sum; var next_ten = Math.ceil(total_sum / 10) * 10; var check_digit = next_ten - total_sum; return check_digit; }, //visualizza o nasconde le altre voci nella combo del sian sian_combo_swap: function sian_combo_swap(idcombo) { for (var i = 0; i < $("#causalesian option").size(); i++) { var id = "#sian_option_" + i; if ($(id).prop("disabled") != "") { $(id).removeAttr("disabled"); $(id).show(); } else { $(id).prop("disabled", "disabled"); $(id).hide(); } } }, strpos: function strpos(haystack, needle, offset) { var i = (haystack + '').indexOf(needle, offset || 0); return i === -1 ? false : i; }, //sezione iva ivaGet: function ivaGet(idiva, campo) { if (idiva == null) idiva = 0; if (idiva == 0) return; var a = $("#hidden_idiva" + idiva).attr(campo); if (campo == "aliquota" || campo == "percindetraibilita") a = getFloat2(a); return a; }, getHtmlFromAjax: function getHtmlFromAjax(url, divname, is_async, show_waiting, callbackFunction) { var data = {}; if (_typeof(url) === "object") { divname = url["divname"]; is_async = url["is_async"]; show_waiting = url["show_waiting"]; callbackFunction = url["onSuccess"]; data = url["data"]; url = url["url"]; } if (typeof is_async === "undefined") is_async = true; if (typeof show_waiting === "undefined") show_waiting = false; if (show_waiting) waiting(); $.ajax({ url: url + "&JSON", type: "post", async: is_async, dataType: 'json', data: data, success: function success(json) { var text_to_print = json.text; $("#" + divname).html(text_to_print); if (show_waiting) waiting(false); $("#" + divname + " .IWDataTables").each(function () { IWDatatable.buildDatatables(this); }); if (typeof callbackFunction === "function") callbackFunction(json); } }); }, btnLoad_onclick: function btnLoad_onclick(action) { var $form = $("#form1"); if (action == "") $form.submit();else { $form.method = "get"; $form.target = "_blank"; $form.action = action; $form.submit(); } }, btnLoad2_onclick: function btnLoad2_onclick() { var $form = $("#form1"); $form.attr("action", ""); $form.removeAttr("target"); $form.submit(); }, PageChange: function PageChange(pagen) { $("#npage").val(pagen); btnLoad2_onclick(); }, deleteObject: function deleteObject(id, forza_eliminazione, parametri_aggiuntivi, reload, iddocumento, codicedocumento, reload_tablescroll) { IWConfirm($("#conferma_cancellazione1").val() + " (1/2)", function () { IWConfirm2($("#conferma_cancellazione2").val() + " (2/2)", function () { btnDel2_onclick(id, forza_eliminazione, parametri_aggiuntivi, reload, iddocumento, codicedocumento, reload_tablescroll); }); }); }, btnDel2_onclick: function (_btnDel2_onclick) { function btnDel2_onclick(_x, _x2, _x3, _x4, _x5, _x6, _x7) { return _btnDel2_onclick.apply(this, arguments); } btnDel2_onclick.toString = function () { return _btnDel2_onclick.toString(); }; return btnDel2_onclick; }(function (id, forza_eliminazione, parametri_aggiuntivi, reload, iddocumento, codicedocumento, reload_tablescroll) { if (typeof parametri_aggiuntivi === "undefined") parametri_aggiuntivi = ""; if (typeof reload === "undefined") reload = false; if (typeof iddocumento === "undefined") iddocumento = 0; if (typeof codicedocumento === "undefined") codicedocumento = ""; if (typeof reload_tablescroll === "undefined") reload_tablescroll = ""; var object = $("#object").val(); var tipoview = $("#tipoview").val(); //Procedo alla cancellazione var url = "view.php?DEL_FROM_AJAX&id=" + id + "&object=" + object + "&tipoview=" + tipoview; if (iddocumento > 0 && codicedocumento) url = "view.php?DEL_FROM_AJAX&iddocumento=" + iddocumento + "&codicedocumento=" + codicedocumento + "&tipoview=view"; if (parametri_aggiuntivi) url += "&" + parametri_aggiuntivi; if (forza_eliminazione) url += "&FORZA_ELIMINAZIONE"; waiting(true); $.ajax({ url: url, dataType: "xml", success: function success(xml) { waiting(false); var chiedi_conferma = $(xml).find("chiedi_conferma").text(); ajaxSubmitOnSuccessFunction(xml, false, chiedi_conferma); var ret = $(xml).find("ret").text(); if (ret) { if (reload) { if (iddocumento > 0) window.location.href = "?codicedocumento=" + codicedocumento + "&tipoview=view";else location.reload(); } if (reload_tablescroll) reloadTable(reload_tablescroll, "form1"); $("#tr_" + id).hideRow(); } else { if (chiedi_conferma) { IWConfirm(chiedi_conferma, function () { btnDel2_onclick(id, 1, parametri_aggiuntivi, reload, iddocumento, codicedocumento, reload_tablescroll); }); } } } }); return true; }), btnSave_onclick: function btnSave_onclick(reload, set_progress, url, on_complete, beforeSubmitCallback) { if (reload == "") reload = false; if (set_progress == "") set_progress = false; var $btns = $("button"); $btns.prop("disabled", true); if (set_progress) waiting2(true, true); if (typeof beforeSubmitCallback === "function") beforeSubmitCallback(); var $OP_FROM_AJAX = $("#OP_FROM_AJAX"); $OP_FROM_AJAX.val(1); $.ajax({ url: "view.php", type: "post", dataType: "xml", data: $("#form1 :input, :checkbox").serialize(), success: function success(res) { ajaxSubmitOnSuccessFunction(res); $OP_FROM_AJAX.val(""); var ret = $(res).find("ret").text(); var debug = $(res).find("debug").text(); var id = $(res).find("id").text(); if (ret) { $("#id").val(id); $btns.fadeIn(); $('#no_beforeunload').val(1); if (reload && !debug) window.location.reload(); //eventuale URL di destinazione. Accodo l'id generato o recuperato direttamente quindi l'url deve essere formattata bene lato php if (url != null && url != "" && !debug) window.location.href = url + id; if (typeof on_complete === "function") on_complete(true, res); } else { if (typeof on_complete === "function") on_complete(false, res); } $btns.prop("disabled", false); if (set_progress) waiting2(false); }, error: function error(xhr, ajaxOptions, thrownError) { $("#boxDebug").html("
" + xhr.status + "
" + thrownError + "
"); $btns.prop("disabled", false); } }); }, btnPrint_onclick: function btnPrint_onclick(is_senza_prezzi) { var page_print = $('#page_print').val(); var stringhe = page_print.split('iddocumento'); var iddocumento = $("#iddocumento").val(); var url = stringhe[0] + "&iddocumento=" + iddocumento; if (is_senza_prezzi == 1) url += "&NON_STAMPARE_PREZZI"; window.open(url, '_blank'); }, btnPrint2_onclick: function btnPrint2_onclick(tipostampa, id, codicedocumento, object, parametri, setfilename, is_excel, form, set_progress, on_complete) { if (form == null) form = "form1"; if (set_progress == null) set_progress = false; if (setfilename == "true") { if (id == "") id = 0; waiting2(true, set_progress); var $allarmi = $("#avvisi_footer_ul0"); $allarmi.hide(); var $form = $("#" + form); $("#tipostampa").val(tipostampa); var action = "print.php?setfilename&id=" + id; if (is_excel != "false") action += "&EXCEL"; $.post(action, $form.serialize(), function (xml) { var ret = $(xml).find("ret").text(); var outfile = $(xml).find("outfile").text(); if (typeof on_complete === "function") on_complete(); if (ret == "true") { if (is_excel == "false") window.open(outfile, '_blank');else window.location.href = outfile; } else alert("Errore. Impossibile stampare"); $allarmi.show(); waiting2(false); }); } else { var url = "print.php?tipostampa=" + tipostampa; var params = parametri.split(","); $.each(params, function (i) { url += "&" + params[i]; }); if (codicedocumento != "") url += "&iddocumento=" + id + "&codicedocumento=" + codicedocumento;else url += "&id=" + id + "&object=" + object; window.open(url, "_blank"); } }, btnPrintMultiple: function btnPrintMultiple(dati, set_progress) { if (set_progress) waiting2(true, true); dati.object = "IWPrintMultiple"; dati.tipoview = "printMultiple"; $.ajax({ url: "ajax.php?JSON", type: "post", dataType: "json", data: dati, success: function success(json) { var ret = json.ret; var outfile = json.outfile; if (set_progress) waiting2(false); if (ret) window.open("tmp/" + outfile);else alert($("#alert_no_stampa").val()); } }); }, btnPrint: function btnPrint(params, is_excel, callback) { $.ajax({ url: "print.php?setfilename", type: "post", dataType: "xml", data: params, success: function success(xml) { if (typeof callback === "function") { callback(xml); return; } var ret = $(xml).find("ret").text(); if (ret !== "true") { alert($("#alert_no_stampa").val()); return; } var outfile = $(xml).find("outfile").text(); if (!is_excel) window.open(outfile);else window.location.href = outfile; } }); }, setNewPassword: function setNewPassword(inputname, restapi) { if (typeof restapi === "undefined") restapi = false; $.ajax({ url: "ajax.php?JSON&object=IWUser&tipoview=getNewPassword&restapi=" + (restapi ? "1" : "0"), dataType: "json", success: function success(json) { $("#" + inputname).val(json.password); } }); }, btnNew_onclick: function btnNew_onclick() { var codicedocumento = $("#codicedocumento").val(); var object = $("#object").val(); var tipoview = $("#tipoview").val(); var reload = "?tipoview=" + tipoview; if (typeof codicedocumento === "undefined") reload += "&object=" + object;else { if ($("#page_controls").val() != "") reload = "?tipoview=controls"; reload += "&codicedocumento=" + codicedocumento; } window.location = reload; }, btnMail_onclick: function btnMail_onclick() { var iddocumento = $("#iddocumento").valFloat(); IWConfirm($("#conferma_prosegui").val(), function () { $.get("ajax.php?tipoview=inviaemaildoc&iddocumento=" + iddocumento + "&codicedocumento=" + $("#codicedocumento").val(), function (xml) { var ret = $(xml).find("ret").text(); if (ret) { footerMsg(0, "Email inviata", $(xml).find("msg").text()); $("#btnEmail").fadeOut(); } else footerMsg(1, "Errore nell'invio della email", $(xml).find("msg").text()); }); }); }, checkAll_onclick: function checkAll_onclick() { var val = ""; var $chk; var checked = $("#chk_0").is(':checked'); if (!checked) val = "checked"; var nrows = $("#i_count").valFloat(); if (nrows == 0) nrows = 1000; for (var i = 0; i < nrows; i++) { $chk = $("#chk_" + i); if (val == "") $chk.prop("checked", false);else $chk.prop("checked", val); } }, CurrencyOnBlur: function CurrencyOnBlur(objID) { var CURRENCY__SYMBOL = $("#CURRENCY__SYMBOL").val(); var CURRENCY__DECIMALS = $("#CURRENCY__DECIMALS").val(); var CURRENCY__DECIMAL_SEPARATOR = $("#CURRENCY__DECIMAL_SEPARATOR").val(); var CURRENCY__THOUSANDS_SEPARATOR = $("#CURRENCY__THOUSANDS_SEPARATOR").val(); var $objID = $("#" + objID); var $objID_hidden = $("#" + objID + "_hidden"); var if_zero_empty = false; var mCURRENCY__SYMBOL = CURRENCY__SYMBOL; var mCURRENCY__DECIMALS = CURRENCY__DECIMALS; //overload eventuali del simbolo e del numero di decimali if ($objID.attr("if_zero_empty") != undefined) if_zero_empty = true; if ($objID.attr("symbol") != undefined) mCURRENCY__SYMBOL = $objID.attr("symbol"); if ($objID.attr("decimals") != undefined) mCURRENCY__DECIMALS = $objID.attr("decimals"); var s = $objID.val(); s = s.replace(mCURRENCY__SYMBOL, '.'); //quando compilo il campo QUALSIASI SIA LA LINGUA COMPILO USANDO IL . COME SEPARATORE DECIMALE //s=s.replace(CURRENCY__THOUSANDS_SEPARATOR,''); //s=s.replace(CURRENCY__DECIMAL_SEPARATOR,'.'); var n = getFloat(s); $objID_hidden.val(n); //alert($objID_hidden.val()); var sign = n < 0 ? "- " : ""; var n2 = number_format(Math.abs(n), mCURRENCY__DECIMALS, CURRENCY__DECIMAL_SEPARATOR, CURRENCY__THOUSANDS_SEPARATOR); if (n == 0 && if_zero_empty) $objID.val("");else $objID.val(sign + mCURRENCY__SYMBOL + " " + n2); $objID_hidden.change(); }, CurrencyOnFocus: function CurrencyOnFocus(objID) { var objID_hidden = objID + "_hidden"; var $objID = $("#" + objID); var mCURRENCY__DECIMALS = $objID.attr("decimals"); var s = getFloat($("#" + objID_hidden).val()); var n = new Number(s); $objID.val(n.toFixed(mCURRENCY__DECIMALS)); $objID.select(); $objID.one('mouseup', function (e) { e.preventDefault(); }); }, showColumn: function showColumn(table, index, visible) { if (visible == null) visible = true; var t = $("#" + table).dataTable().api(); var c = t.column(index); c.visible(visible); }, hideColumn: function hideColumn(table, index) { showColumn(table, index, false); }, getCodiciIVA: function getCodiciIVA(attivitapassivita, data_limite) { var url = "ajax.php?object=CodiceIVA&tipoview=getCodici&attivitapassivita=" + attivitapassivita + "&data_limite=" + data_limite; var options = []; $.ajax({ url: url, dataType: "xml", async: false, success: function success(xml) { var codici_count = $(xml).find("codici_count").text(); var i; for (i = 0; i < codici_count; i++) { var id = $(xml).find("id" + i).text(); options[id] = $(xml).find("descrizione" + i).text(); } } }); return options; }, scorporaIva: function scorporaIva(importo, idiva) { var aliquota = ivaGet(idiva, "aliquota"); return getFloat2(importo / (1 + aliquota / 100)); }, IWAutocomplete: function IWAutocomplete(id, IWObject, filters, dinamic_search, iddialog, excelProcess, cssClass, callback) { if (iddialog == null) iddialog = ""; if (filters == null) filters = {}; if (cssClass == null) cssClass = ""; var $idAutocomplete = $("#" + id); if (cssClass) $idAutocomplete = $("." + cssClass); filters.cssClasses = $idAutocomplete.attr("class"); $idAutocomplete.autocomplete({ source: function source(request, response) { ajaxSourceIWAutocomplete(filters, IWObject, request, response, excelProcess, dinamic_search); }, minLength: 2, autoFocus: true, select: function select(event, ui) { if (cssClass) id = event.target.id; var $id = $("#" + id + "_hidden"); $id.val(ui.item.id); $id.change(); if (IWObject.startsWith("IWAutocompleteArticolo")) { checkArticoloDelFornitore(ui.item.id, id); if (ui.item.da_confermare) { showDialogArticoloDaConfermare(ui.item.id, id); return; } } if (typeof callback === "function") callback(ui.item); }, appendTo: iddialog ? "#" + iddialog : "" }); }, checkArticoloDelFornitore: function checkArticoloDelFornitore(idarticolo, id_field) { var $codicedocumento = $("#codicedocumento"); if (!$codicedocumento.val()) return; if ($("#is_passivita").valFloat() === 0) return; if (getFloat($codicedocumento.data("tipo_recupero_prezzi_passivita")) !== 2 && getFloat($codicedocumento.data("tipo_recupero_prezzi_passivita")) !== 4) return; var idfornitore = $("#anagrafica_hidden").valFloat(); if (idfornitore === 0) return; var object = $("#class_articolo").val(); $.ajax({ url: "ajax.php?JSON", data: { object: object, id: idarticolo, idfornitore: idfornitore, tipoview: "checkIfArticoloDelFornitore", codice_documento: $codicedocumento.val() }, type: "post", dataType: "json", success: function success(json) { if (json.ret) return; IWConfirmTrueFalse($codicedocumento.data("articolo_non_presente_in_fornitore"), function (ret) { if (ret) return; $("#" + id_field + "_hidden").val(0); $("#" + id_field).val(""); $("#" + id_field).change(); }); } }); }, showDialogArticoloDaConfermare: function showDialogArticoloDaConfermare(idarticolo, id_field) { var object = $("#class_articolo").val(); getHtmlFromAjax({ url: "ajax.php?JSON", data: { object: object, id_daconfermare: idarticolo, tipoview: "getDialogArticoloDaConfermare" }, divname: "dialog_articoli_da_confermare", onSuccess: function onSuccess() { dialogShow("dialog_articoli_da_confermare", function (res) { var $hidden = $("#" + id_field + "_hidden"); if (!res) { //se non confermo elimino articolo $hidden.val(0); $("#" + id_field).val(""); return false; } $.ajax({ url: "view.php", dataType: "json", type: "post", data: "JSON=1&OP_FROM_AJAX=1&tipoview=confermaArticolo&object=" + object + "&" + $("#dialog_articoli_da_confermare :input,:checkbox").serialize(), success: function success(json) { ajaxSubmitOnSuccessFunction(json, true); if (json.ret) { $hidden.val(json.idarticolo); $hidden.change(); } else { $hidden.val(0); $("#" + id_field).val(""); } } }); }); } }); }, ajaxSourceIWAutocomplete: function ajaxSourceIWAutocomplete(filters, IWObject, request, response, excelProcess, dinamic_search) { var term; if (excelProcess == null) term = request.term;else term = request; $.each(filters, function (k, v) { if (typeof v === "string" && v.startsWith("$('#")) filters[k] = eval(v);else filters[k] = v; }); filters.letters = term; $.each(dinamic_search, function (key, value) { if (value.startsWith("$('#")) filters[key] = value + '.val()';else filters[key] = $("#" + value).val(); }); $.ajax({ url: 'ajax.php?JSON&object=' + IWObject + "&tipoview=getAutocomplete", dataType: "json", type: 'POST', data: filters, success: function success(data) { if (excelProcess == null) { response($.map(data.objects, function (item) { return item; /*{ label: item.label, //visualizza la formattazione di ogni risultato, es. [codice] descrizione [codfiscale] [piva] value: item.value, //dopo la selezione del risultato compila il campo, ad es. solo descrizione oppure [codice] descrizione id: item.id, //l'id da salvare nel campo hidden che riconosce il valore nel database _raw: item }*/ })); } else { excelProcess($.map(data.objects, function (item) { return item.label; })); } } }); }, setKeywordsOnCKEditor: function setKeywordsOnCKEditor(e, editor) { if (editor == null) return false; var ckeditor = CKEDITOR.instances[editor]; ckeditor.insertText($(e.target).val().trim()); $(e.target).val('-1'); return true; }, IWConfirm: function IWConfirm(text, r) { $("#IWConfirm").html(text); dialogShow("IWConfirm", function (res) { if (res) r(res); }); }, IWConfirm2: function IWConfirm2(text, r) { $("#IWConfirm2").html(text); dialogShow("IWConfirm2", function (res) { if (res) r(res); }); }, IWConfirm3: function IWConfirm3(text, r) { $("#IWConfirm3").html(text); dialogShow("IWConfirm3", function (res) { if (res) r(res); }); }, IWConfirmTrueFalse: function IWConfirmTrueFalse(text, r) { $("#IWConfirm").html(text); dialogShow("IWConfirm", function (res) { r(res); }); }, reloadTable: function reloadTable(table_id, resetpaging, callback) { var $table = $('#' + table_id); if (typeof resetpaging === "undefined") resetpaging = true; var myCallback = null; if (typeof callback === "function") myCallback = function myCallback() { setTimeout(function () { callback(); }, 300); }; $table.DataTable().ajax.reload(myCallback, resetpaging); $(".ui-tooltip").hide(); }, ajaxSubmitOnSuccessFunction: function ajaxSubmitOnSuccessFunction(res, is_json, hide_okmessage) { if (typeof is_json === "undefined") is_json = false; if (typeof hide_okmessage === "undefined") hide_okmessage = false; var ret, debug, sdebug, msg; if (is_json) { ret = res.ret; debug = res.debug; sdebug = res.sdebug; msg = res.msg; } else { ret = $(res).find("ret").text(); debug = $(res).find("debug").text(); sdebug = $(res).find("sdebug").text(); msg = $(res).find("msg").text(); } if (ret) { if (!hide_okmessage) footerMsg(0, $("#transaction_success").val(), msg); } else { if (!hide_okmessage) footerMsg(1, $("#transaction_error").val(), msg); } if (debug) $("#boxDebug").html(sdebug); }, setDateFromPeriodoFiscale: function setDateFromPeriodoFiscale(id_periodofiscale, id_data_da, id_data_a, is_periodogestionale) { var $periodofiscale = $("#" + id_periodofiscale); var arr = Date__getIntervalloFromPeriodoFiscale($periodofiscale.val(), is_periodogestionale); if (arr === null) return false; $("#" + id_data_da).val(Date__it(arr[0])); $("#" + id_data_a).val(Date__it(arr[1])); return true; }, changeDateTrimestre: function changeDateTrimestre(trimestre_id, anno_id, data_da_id, data_a_id) { if (typeof trimestre_id === "undefined") trimestre_id = "trimestre"; if (typeof anno_id === "undefined") anno_id = "anno"; if (typeof data_da_id === "undefined") data_da_id = "data_da"; if (typeof data_a_id === "undefined") data_a_id = "data_a"; var trimestre = $('#' + trimestre_id).valFloat(); var anno = $('#' + anno_id).val(); if (trimestre === 1) { $('#' + data_da_id).val(Date__it(anno + '/01/01')); $('#' + data_a_id).val(Date__it(anno + '/03/31')); } if (trimestre === 2) { $('#' + data_da_id).val(Date__it(anno + '/04/01')); $('#' + data_a_id).val(Date__it(anno + '/06/30')); } if (trimestre === 3) { $('#' + data_da_id).val(Date__it(anno + '/07/01')); $('#' + data_a_id).val(Date__it(anno + '/09/30')); } if (trimestre === 4) { $('#' + data_da_id).val(Date__it(anno + '/10/01')); $('#' + data_a_id).val(Date__it(anno + '/12/31')); } }, changeDateBimestre: function changeDateBimestre(bimestre_id, anno_id, data_da_id, data_a_id) { if (typeof bimestre_id === "undefined") bimestre_id = "bimestre"; if (typeof anno_id === "undefined") anno_id = "anno"; if (typeof data_da_id === "undefined") data_da_id = "data_da"; if (typeof data_a_id === "undefined") data_a_id = "data_a"; var bimestre = $('#' + bimestre_id).valFloat(); var anno = $('#' + anno_id).val(); var d; if (bimestre === 1) { $('#' + data_da_id).val(Date__it(anno + '/01/01')); d = new Date(anno, 2, 0); } else if (bimestre === 2) { $('#' + data_da_id).val(Date__it(anno + '/03/01')); d = new Date(anno, 4, 0); } else if (bimestre === 3) { $('#' + data_da_id).val(Date__it(anno + '/05/01')); d = new Date(anno, 6, 0); } else if (bimestre === 4) { $('#' + data_da_id).val(Date__it(anno + '/07/01')); d = new Date(anno, 8, 0); } else if (bimestre === 5) { $('#' + data_da_id).val(Date__it(anno + '/09/01')); d = new Date(anno, 10, 0); } else { $('#' + data_da_id).val(Date__it(anno + '/10/01')); d = new Date(anno, 12, 0); } $('#' + data_a_id).val(Date__it(d.getFullYear() + "/" + str_pad(d.getMonth() + 1, 2, 0, "STR_PAD_LEFT") + "/" + str_pad(d.getDate(), 2, 0, "STR_PAD_LEFT"))); }, changeDateMese: function changeDateMese(mese_id, anno_id, data_da_id, data_a_id) { if (typeof mese_id === "undefined") mese_id = "nmese"; if (typeof anno_id === "undefined") anno_id = "anno"; if (typeof data_da_id === "undefined") data_da_id = "data_da"; if (typeof data_a_id === "undefined") data_a_id = "data_a"; var nmese = $('#' + mese_id).val(); var anno = $('#' + anno_id).valFloat(); var d = new Date(anno, nmese, 0); var last_day = d.getDate(); $('#' + data_da_id).val('01/' + nmese + '/' + anno); $('#' + data_a_id).val(last_day + '/' + nmese + '/' + anno); }, //da modificare quando sistemo registro saveFirmaDocumento: function saveFirmaDocumento(form_name) { var url = "ajax.php?object=AnagraficaOlma&tipoview=saveFirma"; $.ajax({ type: "POST", url: url, data: $("#" + form_name).serialize(), // serializes the form's elements. success: function success(xml) { alert("doc"); // show response from the php script. } }); }, getInfoTable: function getInfoTable(classname, id, onsuccess) { $.ajax({ type: "GET", url: "ajax.php", data: "object=" + $("#object").val() + "&tipoview=getInfoTable&id=" + id + "&classname=" + classname, success: function success(xml) { onsuccess(xml); } }); }, setReadonly: function setReadonly(elementid, exclude) { if (elementid == null) elementid = "form1"; if (exclude == null) exclude = ""; $("#" + elementid + " input,textarea").not($(exclude)).prop('readonly', true).off(); $("#" + elementid + " [type='checkbox'],[type='radio']").not($(exclude)).off().click(function () { return false; }); $("#" + elementid + " select option:not(:selected)").not($(exclude)).prop('disabled', true); }, setColumn: function setColumn(colname, azione) { $("td[colname='" + colname + "']").each(function () { if (azione == 'show') $(this).show(); if (azione == 'hide') $(this).hide(); }); $("th[colname='" + colname + "']").each(function () { if (azione == 'show') $(this).show(); if (azione == 'hide') $(this).hide(); }); }, forzaScreenwidthUtente: function forzaScreenwidthUtente(idutente) { var screenwidth = $("#screenwidth").valFloat(); if (screenwidth === 0) screenwidth = window.innerWidth; $.ajax({ url: "ajax.php?JSON&object=IWUser&tipoview=forzaScreenwidthUtente&id=" + idutente + "&screenwidth=" + screenwidth, success: function success() { location.reload(); } }); }, loadComboLotti: function loadComboLotti(nomecampo, show_combo, giacenzenegative, idmagazzino, proponi_lotto_piu_vecchio, is_asincrono, classArticolo, params) { if (is_asincrono == null) is_asincrono = true; if (idmagazzino == null) idmagazzino = 0; if (giacenzenegative == null) giacenzenegative = ""; if (giacenzenegative == true) giacenzenegative = "&conGiacenzeNegative"; if (proponi_lotto_piu_vecchio == null) proponi_lotto_piu_vecchio = false; if (classArticolo == null) classArticolo = "Articolo"; var $combo = $("#" + nomecampo + "_combo"); var $text = $("#" + nomecampo + "_text"); var idarticolo = $combo.attr("idarticolo"); var data = $combo.attr("data"); var orario = $combo.attr("orario"); if (orario == "") orario = $("#orario_movmagazzini").val(); if (orario == "" || typeof orario === "undefined") orario = $("#oraarrivo").val(); if (orario == "" || typeof orario === "undefined") orario = Date__OraNow(); //Se clicco dal bottone, e sto visualizzando la combo, mostro il campo text col valore selezionato nella combo //Se invece passo dall'onchange articolo o clicco sul bottone mentre visualizzo il campo text if (show_combo == true || !$combo.is(":visible")) { $text.hide(); $text.prop("disabled", "disabled"); $combo.removeAttr("disabled"); $combo.fadeIn(); //Recupero da DB le informazioni sui lotti if (idarticolo > 0) { $combo.removeOption(/./); $combo.css("background", "url('/images/loading1.gif') no-repeat"); $combo.attr("disabled", "disabled"); var min_data_primocarico = "9999/99/99"; var my_lotto = ""; var datescadenza = []; var lotti_disabled = []; $.ajax({ url: "ajax.php?object=" + classArticolo + "&tipoview=getLottiDatoArticolo&id=" + idarticolo + giacenzenegative + "&data=" + Date__it(data) + "&orario=" + orario + "&idmagazzino=" + idmagazzino, dataType: "xml", async: is_asincrono, type: "post", data: params, success: function success(xml) { var lotti_count = $(xml).find('lotti_count').text(); for (var i = 0; i < lotti_count; i++) { var lotto = $(xml).find('lotto' + i).text(); var datascadenza = $(xml).find('datascadenza' + i).text(); var data_primocarico = $(xml).find('data_primocarico' + i).text(); var lotto2 = $(xml).find('lotto2_' + i).text(); var q = $(xml).find('giacenza' + i).text(); lotti_disabled[lotto] = getFloat($(xml).find('DISABLED_' + i).text()); var descrizione = lotto; if (lotto2 != "") descrizione = descrizione + " - " + lotto2; descrizione = str_pad(descrizione, descrizione.length + 5); descrizione += str_pad("stock: " + q, 16); if (datascadenza != "") descrizione += " scad: " + datascadenza; if (lotto == '') { lotto = "_no_lotto_"; descrizione = str_pad("NO-LOTTO", 16) + str_pad("stock: " + q, 16); } $combo.addOption(lotto, descrizione.replace(/ /g, "\xA0"), false); datescadenza[lotto] = datascadenza; if (data_primocarico < min_data_primocarico) { min_data_primocarico = data_primocarico; my_lotto = lotto; } } //Imposto l'attributo delle scadenze sulle option $combo.find("option").each(function () { var $this = $(this); var key; for (key in datescadenza) { if ($this.attr("value") == key) { $this.attr("scadenza", datescadenza[key]); break; } } for (key in lotti_disabled) { if ($this.attr("value") == key) { $this.prop("disabled", lotti_disabled[key] == 1 ? "disabled" : ""); break; } } }); $combo.css("background", "url('#') no-repeat"); $combo.removeAttr("disabled"); $combo.selectOptions($text.val()); if (proponi_lotto_piu_vecchio) $combo.selectOptions(my_lotto); } }); } } else { var lotto = $combo.val(); $combo.hide(); $text.val(lotto); $combo.prop("disabled", "disabled"); $text.removeAttr("disabled"); $text.fadeIn(); } }, viewDialogNewPassword: function viewDialogNewPassword(iduser, _onSuccess) { getHtmlFromAjax({ url: "ajax.php?object=IWuser&tipoview=changePassword&id=" + iduser, divname: "dialogChangePassword", onSuccess: function onSuccess() { dialogShow("dialogChangePassword", function (r) { if (!r) return; $.ajax({ url: "view.php", type: "post", dataType: "json", data: "OP_FROM_AJAX=1&JSON=1&tipoview=changePassword&object=IWUser&id=" + iduser + "&" + $("#dialogChangePassword :input, :checkbox").serialize(), success: function success(json) { ajaxSubmitOnSuccessFunction(json, true); if (typeof _onSuccess === "function") _onSuccess(ret); } }); }); } }); }, /** * * @param periodofiscale * @param is_periodogestionale * @returns {null|string[]} * @constructor */ Date__getIntervalloFromPeriodoFiscale: function Date__getIntervalloFromPeriodoFiscale(periodofiscale, is_periodogestionale) { if (!periodofiscale) return null; var data_da = $("#data_da_fisc").val(); var data_a = $("#data_a_fisc").val(); if (getFloat2(is_periodogestionale) === 1) { data_da = $("#data_da_gest").val(); data_a = $("#data_a_gest").val(); } data_da = periodofiscale.substr(0, 4) + data_da.substr(4); if (periodofiscale.length > 5) data_a = periodofiscale.substr(5) + data_a.substr(4);else data_a = periodofiscale.substr(0) + data_a.substr(4); return [data_da, data_a]; }, noopLog: function noopLog() { $.get("include/noop-log.php", function (xml) {//noop }); }, switch_as_user: function switch_as_user() { var $switch = $("#switch_as_user"); dialogShow("confirm_dialog_switch", function (res) { if (!res) return false; var user = $switch.val(); waiting(); $.ajax({ url: "ajax.php?JSON&object=IWUser&tipoview=switchAsUser", type: 'post', data: { "user": user, "switch_pwd": $("#switch_password").val() }, dataType: "json", success: function success(json) { if (json.ret) window.location.reload();else { waiting(false); alert("Utente inesistente!"); } } }); return true; }); }, switch_to_azienda: function switch_to_azienda() { var codazienda = $("#switch_to_azienda").val(); waiting2(); $.get("ajax.php?object=IWUser&tipoview=switchAzienda&codicecliente=" + codazienda, function () { window.location = 'home.php?idmenu=0'; }); }, eanCheckDigit: function eanCheckDigit(s) { var result = 0; for (var counter = s.length - 1; counter >= 0; counter--) { result = result + parseInt(s.charAt(counter)) * (1 + 2 * (counter % 2)); } return (10 - result % 10) % 10; }, generaBarcode: function generaBarcode(value, elem_id, preview_id) { __webpack_require__(/*! jsbarcode */ "./node_modules/jsbarcode/bin/JsBarcode.js"); var bcode = ("000000000000" + value).slice(-12); bcode += eanCheckDigit(bcode); JsBarcode("#" + preview_id, bcode, { format: "EAN13", fontSize: 18, textMargin: 0, height: 120, width: 4, flat: true }).render(); $("#" + elem_id).val(bcode); }, calcolaCoordinate: function calcolaCoordinate(indirizzo, field_lat, field_long) { var url = "ajax.php?JSON&object=GoogleMapsObject&tipoview=calcolaCoordinate&indirizzo=" + indirizzo; $.ajax({ url: url, dataType: "json", async: false, success: function success(json) { var lat = json.lat; var _long = json["long"]; if (lat === null || _long === null) alert("Inserire l'indirizzo nel formato corretto");else { $("#" + field_lat).val(lat); $("#" + field_long).val(_long); } } }); }, getHtmlDialogCisterne: function getHtmlDialogCisterne(opts) { if (!opts) opts = { dialog: "dialog_cisterne" }; if (!opts.dialog) opts.dialog = "dialog_cisterne"; var $dialog = $("#" + opts.dialog); $dialog.html("
" + $("#div_waiting2").html() + "
"); if (!opts.object) opts.object = $dialog.data("object"); opts.tipoview = "getHtmlDialogCisterne"; if (opts.data) opts.data = $("#" + opts.data).val(); if (opts.orario) opts.orario = $("#" + opts.orario).val(); if (!opts.name_text) opts.name_text = "idcisterna"; var callback = opts.callback; opts.callback = null; getHtmlFromAjax({ url: "ajax.php?1", divname: opts.dialog, data: opts, onSuccess: function onSuccess() { if (typeof callback === "function") callback(); } }); }, showDialogSelectCisterne: function showDialogSelectCisterne(dialog, afterLoaded) { var $dialog = $("#" + dialog); var name_text = $dialog.data("name_text") ? $dialog.data("name_text") : "idcisterna"; var $selectCisterna = $(".selectCisterna_" + dialog); $selectCisterna.off(); $selectCisterna.on("click", function (event) { var $cisterna_text = $(this); var $cisterna_id = $("#" + $cisterna_text.attr("id").replace("_text_", "")); event.preventDefault(); dialogShow(dialog, function () {}, function () { var $cisterneElem = $(".cisternaElem"); $cisterneElem.off(); $cisterneElem.on("click", function () { var index = $(this).data("index"); var $href = $("#" + name_text + "_dialog_cisterna_codice_" + index); $cisterna_text.val($href.data("descrizione_cisterna")); $cisterna_id.val($href.data("cisterna_id")); $cisterna_id.data("dialog-index", index); $dialog.data('loaded', true); $("#" + dialog).dialog("close"); $cisterna_id.change(); }); $("#elenco_cisterne_" + name_text).DataTable().columns.adjust(); }); }); if (afterLoaded && typeof afterLoaded === "function") afterLoaded(); }, getDialogStandardCisterneFrantoio: function getDialogStandardCisterneFrantoio(opts) { if (!opts) opts = { dialog: "dialog_cisterne", idtiposfuso: 1, afterLoaded: null }; if (!opts.dialog) opts.dialog = "dialog_cisterne"; opts.callback = function () { showDialogSelectCisterne(opts.dialog, opts.afterLoaded); }; getHtmlDialogCisterne(opts); }, getDivDettaglioDichiarazione: function getDivDettaglioDichiarazione(opts) { if (!opts.object) opts.object = "DichiarazioniIntento"; opts.tipoview = "getDivDettaglioDichiarazione"; var callback = null; if (typeof opts.onSuccess === "function") callback = opts.onSuccess; opts.onSuccess = undefined; getHtmlFromAjax({ url: "ajax.php?1", data: opts, divname: opts.div, onSuccess: function onSuccess() { if (typeof callback === "function") callback(opts); } }); } }; jQuery.fn.exists = function () { return this.length > 0; }; //sostituisce il .val() nel jquery, e legge direttamente il valore numerico $.fn.valFloat = function () { return getFloat($(this).val()); }; $.fn.valFloat2 = function () { return getFloat2($(this).val()); }; //Footer Datatables $.fn.IWFooterDatatable = function () { try { this.datatable = eval("datatable_" + this.attr("id")); } catch (e) { this.datatable = $("#" + this.attr("id")).DataTable(); } this.setFooterText = function (text, col, row) { if (!row) row = 0; if (row === 0) $(this.datatable.column(col).footer()).html(text);else $("tr:eq(" + row + ") th:eq(" + col + ")", this.datatable.table().footer()).html(text); }; return this; }; /***/ }) }]); //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9pbmNsdWRlL2pzL3V0aWxzLmpzIl0sIm5hbWVzIjpbImludGVydmFsX2F2YW56YW1lbnRvIiwibW9kdWxlIiwiZXhwb3J0cyIsImluX2FycmF5IiwibXlBcnJheSIsImVsZW1lbnQiLCJyZXMiLCJlIiwibGVuZ3RoIiwiaXNfYXJyYXkiLCJtaXhlZF92YXIiLCJpc0FycmF5Iiwicm91bmRUbyIsImRlY2ltYWxwb3NpdGlvbnMiLCJpIiwiTWF0aCIsInBvdyIsInJvdW5kIiwiY291bnREZWNpbWFscyIsInZhbHVlIiwidGV4dCIsInRvU3RyaW5nIiwiaW5kZXhPZiIsInNwbGl0IiwiYmFzZSIsInRyYWlsIiwiZGVnIiwicGFyc2VJbnQiLCJmbG9vciIsIm51bSIsImRlYyIsIm51bV9zaWduIiwicGFyc2VGbG9hdCIsInRvRml4ZWQiLCJnZXRGbG9hdCIsInMwIiwicyIsIlN0cmluZyIsInRyaW0iLCJyZXBsYWNlIiwiZiIsImlzTmFOIiwiZ2V0RmxvYXQyIiwib3BlbldpbmRvdyIsImZpbGUiLCJ3IiwiaCIsIm5vbWVmaW5lc3RyYSIsImwiLCJzY3JlZW4iLCJ3aWR0aCIsInQiLCJoZWlnaHQiLCJ3aW5kb3ciLCJvcGVuIiwiY2hlY2tLZXkiLCJjaGFycyIsImtleW51bSIsImtleUNvZGUiLCJ3aGljaCIsImlzX2tleWZ1bmN0aW9uIiwia2V5Y2hhciIsImZyb21DaGFyQ29kZSIsImNoZWNrIiwibnVtYmVyX2Zvcm1hdCIsImEiLCJiIiwiYyIsImQiLCJnIiwiaiIsInNsaWNlIiwic3Vic3RyIiwidG9FdXJvIiwibiIsImRlY2ltYWxzIiwic2VfemVyb19zdHJpbmdhX3Z1b3RhIiwiQ1VSUkVOQ1lfX0RFQ0lNQUxfU0VQQVJBVE9SIiwiJCIsInZhbCIsIkNVUlJFTkNZX19USE9VU0FORFNfU0VQQVJBVE9SIiwic2lnbiIsImFicyIsInN0ciIsImx0cmltIiwicnRyaW0iLCJSZWdFeHAiLCJ3YWl0aW5nIiwidmlzaWJpbGUiLCJ3YWl0aW5nMiIsInZpZXdfcHJvZ3Jlc3MiLCJkaWFsb2dTaG93Iiwic2hvdyIsInNldEludGVydmFsIiwiZGlhbG9nIiwiY2xlYXJJbnRlcnZhbCIsInJ1bkFqYXhBdmFuemFtZW50byIsImFqYXgiLCJ1cmwiLCJkYXRhVHlwZSIsInN1Y2Nlc3MiLCJqc29uIiwiaHRtbCIsInBlcmNfYXZhbnphbWVudG8iLCJzdHJfcGFkIiwiaW5wdXQiLCJwYWRfbGVuZ3RoIiwicGFkX3N0cmluZyIsInBhZF90eXBlIiwiaGFsZiIsInBhZF90b19nbyIsInN0cl9wYWRfcmVwZWF0ZXIiLCJsZW4iLCJjb2xsZWN0IiwiY2VpbCIsImZvb3Rlck1zZyIsInRpcG8iLCJ0aXRvbG8iLCJ0ZXN0byIsImdyb3dsIiwibm90aWNlIiwidGl0bGUiLCJtZXNzYWdlIiwiZXJyb3IiLCJkdXJhdGlvbiIsIiRkaXYiLCJmYWRlT3V0IiwicmVtb3ZlQ2xhc3MiLCJhZGRDbGFzcyIsInByb3AiLCJmYWRlSW4iLCJzZXRUaW1lb3V0IiwiZ2V0X2VhbjEzX2NoZWNrZGlnaXQiLCJldmVuX3N1bSIsImV2ZW5fc3VtX3RocmVlIiwib2RkX3N1bSIsInRvdGFsX3N1bSIsIm5leHRfdGVuIiwiY2hlY2tfZGlnaXQiLCJzaWFuX2NvbWJvX3N3YXAiLCJpZGNvbWJvIiwic2l6ZSIsImlkIiwicmVtb3ZlQXR0ciIsImhpZGUiLCJzdHJwb3MiLCJoYXlzdGFjayIsIm5lZWRsZSIsIm9mZnNldCIsIml2YUdldCIsImlkaXZhIiwiY2FtcG8iLCJhdHRyIiwiZ2V0SHRtbEZyb21BamF4IiwiZGl2bmFtZSIsImlzX2FzeW5jIiwic2hvd193YWl0aW5nIiwiY2FsbGJhY2tGdW5jdGlvbiIsImRhdGEiLCJ0eXBlIiwiYXN5bmMiLCJ0ZXh0X3RvX3ByaW50IiwiZWFjaCIsIklXRGF0YXRhYmxlIiwiYnVpbGREYXRhdGFibGVzIiwiYnRuTG9hZF9vbmNsaWNrIiwiYWN0aW9uIiwiJGZvcm0iLCJzdWJtaXQiLCJtZXRob2QiLCJ0YXJnZXQiLCJidG5Mb2FkMl9vbmNsaWNrIiwiUGFnZUNoYW5nZSIsInBhZ2VuIiwiZGVsZXRlT2JqZWN0IiwiZm9yemFfZWxpbWluYXppb25lIiwicGFyYW1ldHJpX2FnZ2l1bnRpdmkiLCJyZWxvYWQiLCJpZGRvY3VtZW50byIsImNvZGljZWRvY3VtZW50byIsInJlbG9hZF90YWJsZXNjcm9sbCIsIklXQ29uZmlybSIsIklXQ29uZmlybTIiLCJidG5EZWwyX29uY2xpY2siLCJvYmplY3QiLCJ0aXBvdmlldyIsInhtbCIsImNoaWVkaV9jb25mZXJtYSIsImZpbmQiLCJhamF4U3VibWl0T25TdWNjZXNzRnVuY3Rpb24iLCJyZXQiLCJsb2NhdGlvbiIsImhyZWYiLCJyZWxvYWRUYWJsZSIsImhpZGVSb3ciLCJidG5TYXZlX29uY2xpY2siLCJzZXRfcHJvZ3Jlc3MiLCJvbl9jb21wbGV0ZSIsImJlZm9yZVN1Ym1pdENhbGxiYWNrIiwiJGJ0bnMiLCIkT1BfRlJPTV9BSkFYIiwic2VyaWFsaXplIiwiZGVidWciLCJ4aHIiLCJhamF4T3B0aW9ucyIsInRocm93bkVycm9yIiwic3RhdHVzIiwiYnRuUHJpbnRfb25jbGljayIsImlzX3NlbnphX3ByZXp6aSIsInBhZ2VfcHJpbnQiLCJzdHJpbmdoZSIsImJ0blByaW50Ml9vbmNsaWNrIiwidGlwb3N0YW1wYSIsInBhcmFtZXRyaSIsInNldGZpbGVuYW1lIiwiaXNfZXhjZWwiLCJmb3JtIiwiJGFsbGFybWkiLCJwb3N0Iiwib3V0ZmlsZSIsImFsZXJ0IiwicGFyYW1zIiwiYnRuUHJpbnRNdWx0aXBsZSIsImRhdGkiLCJidG5QcmludCIsImNhbGxiYWNrIiwic2V0TmV3UGFzc3dvcmQiLCJpbnB1dG5hbWUiLCJyZXN0YXBpIiwicGFzc3dvcmQiLCJidG5OZXdfb25jbGljayIsImJ0bk1haWxfb25jbGljayIsInZhbEZsb2F0IiwiZ2V0IiwiY2hlY2tBbGxfb25jbGljayIsIiRjaGsiLCJjaGVja2VkIiwiaXMiLCJucm93cyIsIkN1cnJlbmN5T25CbHVyIiwib2JqSUQiLCJDVVJSRU5DWV9fU1lNQk9MIiwiQ1VSUkVOQ1lfX0RFQ0lNQUxTIiwiJG9iaklEIiwiJG9iaklEX2hpZGRlbiIsImlmX3plcm9fZW1wdHkiLCJtQ1VSUkVOQ1lfX1NZTUJPTCIsIm1DVVJSRU5DWV9fREVDSU1BTFMiLCJ1bmRlZmluZWQiLCJuMiIsImNoYW5nZSIsIkN1cnJlbmN5T25Gb2N1cyIsIm9iaklEX2hpZGRlbiIsIk51bWJlciIsInNlbGVjdCIsIm9uZSIsInByZXZlbnREZWZhdWx0Iiwic2hvd0NvbHVtbiIsInRhYmxlIiwiaW5kZXgiLCJ2aXNpYmxlIiwiZGF0YVRhYmxlIiwiYXBpIiwiY29sdW1uIiwiaGlkZUNvbHVtbiIsImdldENvZGljaUlWQSIsImF0dGl2aXRhcGFzc2l2aXRhIiwiZGF0YV9saW1pdGUiLCJvcHRpb25zIiwiY29kaWNpX2NvdW50Iiwic2NvcnBvcmFJdmEiLCJpbXBvcnRvIiwiYWxpcXVvdGEiLCJJV0F1dG9jb21wbGV0ZSIsIklXT2JqZWN0IiwiZmlsdGVycyIsImRpbmFtaWNfc2VhcmNoIiwiaWRkaWFsb2ciLCJleGNlbFByb2Nlc3MiLCJjc3NDbGFzcyIsIiRpZEF1dG9jb21wbGV0ZSIsImNzc0NsYXNzZXMiLCJhdXRvY29tcGxldGUiLCJzb3VyY2UiLCJyZXF1ZXN0IiwicmVzcG9uc2UiLCJhamF4U291cmNlSVdBdXRvY29tcGxldGUiLCJtaW5MZW5ndGgiLCJhdXRvRm9jdXMiLCJldmVudCIsInVpIiwiJGlkIiwiaXRlbSIsInN0YXJ0c1dpdGgiLCJjaGVja0FydGljb2xvRGVsRm9ybml0b3JlIiwiZGFfY29uZmVybWFyZSIsInNob3dEaWFsb2dBcnRpY29sb0RhQ29uZmVybWFyZSIsImFwcGVuZFRvIiwiaWRhcnRpY29sbyIsImlkX2ZpZWxkIiwiJGNvZGljZWRvY3VtZW50byIsImlkZm9ybml0b3JlIiwiY29kaWNlX2RvY3VtZW50byIsIklXQ29uZmlybVRydWVGYWxzZSIsImlkX2RhY29uZmVybWFyZSIsIm9uU3VjY2VzcyIsIiRoaWRkZW4iLCJ0ZXJtIiwiayIsInYiLCJldmFsIiwibGV0dGVycyIsImtleSIsIm1hcCIsIm9iamVjdHMiLCJsYWJlbCIsInNldEtleXdvcmRzT25DS0VkaXRvciIsImVkaXRvciIsImNrZWRpdG9yIiwiQ0tFRElUT1IiLCJpbnN0YW5jZXMiLCJpbnNlcnRUZXh0IiwiciIsIklXQ29uZmlybTMiLCJ0YWJsZV9pZCIsInJlc2V0cGFnaW5nIiwiJHRhYmxlIiwibXlDYWxsYmFjayIsIkRhdGFUYWJsZSIsImlzX2pzb24iLCJoaWRlX29rbWVzc2FnZSIsInNkZWJ1ZyIsIm1zZyIsInNldERhdGVGcm9tUGVyaW9kb0Zpc2NhbGUiLCJpZF9wZXJpb2RvZmlzY2FsZSIsImlkX2RhdGFfZGEiLCJpZF9kYXRhX2EiLCJpc19wZXJpb2RvZ2VzdGlvbmFsZSIsIiRwZXJpb2RvZmlzY2FsZSIsImFyciIsIkRhdGVfX2dldEludGVydmFsbG9Gcm9tUGVyaW9kb0Zpc2NhbGUiLCJEYXRlX19pdCIsImNoYW5nZURhdGVUcmltZXN0cmUiLCJ0cmltZXN0cmVfaWQiLCJhbm5vX2lkIiwiZGF0YV9kYV9pZCIsImRhdGFfYV9pZCIsInRyaW1lc3RyZSIsImFubm8iLCJjaGFuZ2VEYXRlQmltZXN0cmUiLCJiaW1lc3RyZV9pZCIsImJpbWVzdHJlIiwiRGF0ZSIsImdldEZ1bGxZZWFyIiwiZ2V0TW9udGgiLCJnZXREYXRlIiwiY2hhbmdlRGF0ZU1lc2UiLCJtZXNlX2lkIiwibm1lc2UiLCJsYXN0X2RheSIsInNhdmVGaXJtYURvY3VtZW50byIsImZvcm1fbmFtZSIsImdldEluZm9UYWJsZSIsImNsYXNzbmFtZSIsIm9uc3VjY2VzcyIsInNldFJlYWRvbmx5IiwiZWxlbWVudGlkIiwiZXhjbHVkZSIsIm5vdCIsIm9mZiIsImNsaWNrIiwic2V0Q29sdW1uIiwiY29sbmFtZSIsImF6aW9uZSIsImZvcnphU2NyZWVud2lkdGhVdGVudGUiLCJpZHV0ZW50ZSIsInNjcmVlbndpZHRoIiwiaW5uZXJXaWR0aCIsImxvYWRDb21ib0xvdHRpIiwibm9tZWNhbXBvIiwic2hvd19jb21ibyIsImdpYWNlbnplbmVnYXRpdmUiLCJpZG1hZ2F6emlubyIsInByb3BvbmlfbG90dG9fcGl1X3ZlY2NoaW8iLCJpc19hc2luY3Jvbm8iLCJjbGFzc0FydGljb2xvIiwiJGNvbWJvIiwiJHRleHQiLCJvcmFyaW8iLCJEYXRlX19PcmFOb3ciLCJyZW1vdmVPcHRpb24iLCJjc3MiLCJtaW5fZGF0YV9wcmltb2NhcmljbyIsIm15X2xvdHRvIiwiZGF0ZXNjYWRlbnphIiwibG90dGlfZGlzYWJsZWQiLCJsb3R0aV9jb3VudCIsImxvdHRvIiwiZGF0YXNjYWRlbnphIiwiZGF0YV9wcmltb2NhcmljbyIsImxvdHRvMiIsInEiLCJkZXNjcml6aW9uZSIsImFkZE9wdGlvbiIsIiR0aGlzIiwic2VsZWN0T3B0aW9ucyIsInZpZXdEaWFsb2dOZXdQYXNzd29yZCIsImlkdXNlciIsInBlcmlvZG9maXNjYWxlIiwiZGF0YV9kYSIsImRhdGFfYSIsIm5vb3BMb2ciLCJzd2l0Y2hfYXNfdXNlciIsIiRzd2l0Y2giLCJ1c2VyIiwic3dpdGNoX3RvX2F6aWVuZGEiLCJjb2RhemllbmRhIiwiZWFuQ2hlY2tEaWdpdCIsInJlc3VsdCIsImNvdW50ZXIiLCJjaGFyQXQiLCJnZW5lcmFCYXJjb2RlIiwiZWxlbV9pZCIsInByZXZpZXdfaWQiLCJyZXF1aXJlIiwiYmNvZGUiLCJKc0JhcmNvZGUiLCJmb3JtYXQiLCJmb250U2l6ZSIsInRleHRNYXJnaW4iLCJmbGF0IiwicmVuZGVyIiwiY2FsY29sYUNvb3JkaW5hdGUiLCJpbmRpcml6em8iLCJmaWVsZF9sYXQiLCJmaWVsZF9sb25nIiwibGF0IiwibG9uZyIsImdldEh0bWxEaWFsb2dDaXN0ZXJuZSIsIm9wdHMiLCIkZGlhbG9nIiwibmFtZV90ZXh0Iiwic2hvd0RpYWxvZ1NlbGVjdENpc3Rlcm5lIiwiYWZ0ZXJMb2FkZWQiLCIkc2VsZWN0Q2lzdGVybmEiLCJvbiIsIiRjaXN0ZXJuYV90ZXh0IiwiJGNpc3Rlcm5hX2lkIiwiJGNpc3Rlcm5lRWxlbSIsIiRocmVmIiwiY29sdW1ucyIsImFkanVzdCIsImdldERpYWxvZ1N0YW5kYXJkQ2lzdGVybmVGcmFudG9pbyIsImlkdGlwb3NmdXNvIiwiZ2V0RGl2RGV0dGFnbGlvRGljaGlhcmF6aW9uZSIsImRpdiIsImpRdWVyeSIsImZuIiwiZXhpc3RzIiwidmFsRmxvYXQyIiwiSVdGb290ZXJEYXRhdGFibGUiLCJkYXRhdGFibGUiLCJzZXRGb290ZXJUZXh0IiwiY29sIiwicm93IiwiZm9vdGVyIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUlBLG9CQUFKO0FBRUFDLE1BQU0sQ0FBQ0MsT0FBUCxHQUFpQjtBQUViQyxVQUFRLEVBQUUsa0JBQVVDLE9BQVYsRUFBbUJDLE9BQW5CLEVBQ1Y7QUFDSSxRQUFJQyxHQUFHLEdBQUMsS0FBUjs7QUFDQSxTQUFJLElBQUlDLENBQUMsR0FBQyxDQUFWLEVBQVlBLENBQUMsR0FBQ0gsT0FBTyxDQUFDSSxNQUF0QixFQUE2QkQsQ0FBQyxFQUE5QixFQUNBO0FBQ0ksVUFBR0gsT0FBTyxDQUFDRyxDQUFELENBQVAsSUFBY0YsT0FBakIsRUFDQTtBQUNJQyxXQUFHLEdBQUMsSUFBSjtBQUNBO0FBQ0g7QUFDSjs7QUFDRCxXQUFPQSxHQUFQO0FBQ0gsR0FkWTtBQWdCYkcsVUFBUSxFQUFFLGtCQUFVQyxTQUFWLEVBQXFCO0FBQzNCLFdBQU9BLFNBQVMsQ0FBQ0MsT0FBVixNQUF1QixRQUFPRCxTQUFQLE1BQXFCLFFBQW5EO0FBQ0gsR0FsQlk7QUFvQmJFLFNBQU8sRUFBRSxpQkFBVUMsZ0JBQVYsRUFDVDtBQUNJLFFBQUlDLENBQUMsR0FBRyxPQUFPQyxJQUFJLENBQUNDLEdBQUwsQ0FBUyxFQUFULEVBQVlILGdCQUFaLENBQWY7QUFDQUMsS0FBQyxHQUFHQyxJQUFJLENBQUNFLEtBQUwsQ0FBV0gsQ0FBWCxDQUFKO0FBQ0EsV0FB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Q0g7O0FBRUQsT0FBS3NJLGFBQUwsR0FBcUIsVUFBVTFiLElBQVYsRUFBZ0IyYixHQUFoQixFQUFxQkMsR0FBckIsRUFBMEI7QUFDM0MsUUFBRyxDQUFDQSxHQUFKLEVBQVNBLEdBQUcsR0FBRyxDQUFOO0FBRVQsUUFBR0EsR0FBRyxLQUFLLENBQVgsRUFDSWxZLENBQUMsQ0FBRSxLQUFLK1gsU0FBTCxDQUFldE0sTUFBZixDQUF1QndNLEdBQXZCLEVBQTZCRSxNQUE3QixFQUFGLENBQUQsQ0FBMkMzVyxJQUEzQyxDQUFnRGxGLElBQWhELEVBREosS0FHSTBELENBQUMsQ0FBQyxXQUFXa1ksR0FBWCxHQUFpQixVQUFqQixHQUE4QkQsR0FBOUIsR0FBbUMsR0FBcEMsRUFBeUMsS0FBS0YsU0FBTCxDQUFlM00sS0FBZixHQUF1QitNLE1BQXZCLEVBQXpDLENBQUQsQ0FBMkUzVyxJQUEzRSxDQUFnRmxGLElBQWhGO0FBQ1AsR0FQRDs7QUFTQSxTQUFPLElBQVA7QUFDSCxDQWxCRCxDIiwiZmlsZSI6ImJvb3RzdHJhcF9lbnZ+ZGV0dGFnbGktZmV+ZG9jdW1lbnRpfmpxdWVyeS11aV9lbnYuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENyZWF0ZWQgYnkgUGhwU3Rvcm1cbiAqIFVzZXI6IGRhbmllbGVcbiAqIERhdGU6IDE1LzA1LzIwXG4gKiBUaW1lOiAxMy4wNVxuICovXG5sZXQgaW50ZXJ2YWxfYXZhbnphbWVudG87XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuXG4gICAgaW5fYXJyYXk6IGZ1bmN0aW9uIChteUFycmF5LCBlbGVtZW50KVxuICAgIHtcbiAgICAgICAgdmFyIHJlcz1mYWxzZTtcbiAgICAgICAgZm9yKHZhciBlPTA7ZTxteUFycmF5Lmxlbmd0aDtlKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmKG15QXJyYXlbZV0gPT0gZWxlbWVudClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICByZXM9dHJ1ZTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH0sXG5cbiAgICBpc19hcnJheTogZnVuY3Rpb24gKG1peGVkX3Zhcikge1xuICAgICAgICByZXR1cm4gbWl4ZWRfdmFyLmlzQXJyYXkoKSB8fCB0eXBlb2YgbWl4ZWRfdmFyID09PSBcIm9iamVjdFwiO1xuICAgIH0sXG5cbiAgICByb3VuZFRvOiBmdW5jdGlvbiAoZGVjaW1hbHBvc2l0aW9ucylcbiAgICB7XG4gICAgICAgIHZhciBpID0gdGhpcyAqIE1hdGgucG93KDEwLGRlY2ltYWxwb3NpdGlvbnMpO1xuICAgICAgICBpID0gTWF0aC5yb3VuZChpKTtcbiAgICAgICAgcmV0dXJuIGkgLyBNYXRoLnBvdygxMCxkZWNpbWFscG9zaXRpb25zKTtcbiAgICB9LFxuXG4gICAgY291bnREZWNpbWFsczogZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgICAgbGV0IHRleHQgPSB2YWx1ZS50b1N0cmluZygpXG4gICAgICAgIC8vIHZlcmlmeSBpZiBudW1iZXIgMC4wMDAwMDUgaXMgcmVwcmVzZW50ZWQgYXMgXCI1ZS02XCJcbiAgICAgICAgaWYgKHRleHQuaW5kZXhPZignZS0nKSA+IC0xKSB7XG4gICAgICAgICAgICBsZXQgW2Jhc2UsIHRyYWlsXSA9IHRleHQuc3BsaXQoJ2UtJyk7XG4gICAgICAgICAgICBsZXQgZGVnID0gcGFyc2VJbnQodHJhaWwsIDEwKTtcbiAgICAgICAgICAgIHJldHVybiBkZWc7XG4gICAgICAgIH1cbiAgICAgICAgLy8gY291bnQgZGVjaW1hbHMgZm9yIG51bWJlciBpbiByZXByZXNlbnRhdGlvbiBsaWtlIFwiMC4xMjM0NTZcIlxuICAgICAgICBpZiAoTWF0aC5mbG9vcih2YWx1ZSkgIT09IHZhbHVlKSB7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWUudG9TdHJpbmcoKS5zcGxpdChcIi5cIilbMV0ubGVuZ3RoIHx8IDA7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIDA7XG4gICAgfSxcblxuICAgIHJvdW5kOiBmdW5jdGlvbiAobnVtLCBkZWMpe1xuICAgICAgICBpZighZGVjKVxuICAgICAgICAgICAgZGVjID0gMDtcbiAgICAgICAgdmFyIG51bV9zaWduID0gbnVtID49IDAgPyAxIDogLTE7XG4gICAgICAgIHJldHVybiBwYXJzZUZsb2F0KChNYXRoLnJvdW5kKChudW0gKiBNYXRoLnBvdygxMCwgZGVjKSkgKyAobnVtX3NpZ24gKiAwLjAwMDEpKSAvIE1hdGgucG93KDEwLCBkZWMpKS50b0ZpeGVkKGRlYykpO1xuICAgIH0sXG5cbiAgICBnZXRGbG9hdDogZnVuY3Rpb24oczAsIGRlYylcbiAgICB7XG4gICAgICAgIHZhciBzPW5ldyBTdHJpbmcoczApO1xuICAgICAgICB0cmltKHMpO1xuICAgICAgICBzPXMucmVwbGFjZShcIixcIixcIi5cIik7XG4gICAgICAgIHZhciBmPXBhcnNlRmxvYXQocyk7XG4gICAgICAgIGlmKHR5cGVvZiBmID09PSBcInVuZGVmaW5lZFwiIHx8IGlzTmFOKGYpKVxuICAgICAgICAgICAgcmV0dXJuIDA7XG5cbiAgICAgICAgaWYoZGVjKSByZXR1cm4gcm91bmQoZiwgZGVjKTtcblxuICAgICAgICByZXR1cm4gZjtcbiAgICB9LFxuXG4gICAgZ2V0RmxvYXQyOiBmdW5jdGlvbihzKVxuICAgIHtcbiAgICAgICAgcmV0dXJuIHJvdW5kKGdldEZsb2F0KHMpLDIpO1xuICAgIH0sXG5cbiAgICBvcGVuV2luZG93OiBmdW5jdGlvbihmaWxlLHcsaCxub21lZmluZXN0cmEpXG4gICAge1xuICAgICAgICBpZihub21lZmluZXN0cmE9PW51bGwpIG5vbWVmaW5lc3RyYT1cIl9ibGFua1wiO1xuICAgICAgICBsZXQgbD0oc2NyZWVuLndpZHRoLXcpLzI7XG4gICAgICAgIGxldCB0PShzY3JlZW4uaGVpZ2h0LWgpLzItMTAwO1xuICAgICAgICB3aW5kb3cub3BlbihmaWxlLG5vbWVmaW5lc3RyYSxcImZ1bGxzY3JlZW49eWVzLHRvb2xiYXI9bm8sbWVudWJhcj1ubyxzY3JvbGxiYXJzPXllcyxyZXNpemFibGU9eWVzLHN0YXR1cz1ubyxsb2NhdGlvbj1ubyxkaXJlY3Rvcmllcz1ubyxjb3B5aGlzdG9yeT1ubyxoZWlnaHQ9XCIraCtcIix3aWR0aD1cIit3K1wiLGxlZnQ9XCIrbCtcIix0b3A9XCIrdCk7XG4gICAgfSxcblxuICAgIGNoZWNrS2V5OiBmdW5jdGlvbihlLGNoYXJzKVxuICAgIHtcbiAgICAgICAgdmFyIGtleW51bT1lLmtleUNvZGU7XG4gICAgICAgIGlmKGUud2hpY2gpXG4gICAgICAgICAgICBrZXludW09ZS53aGljaDtcblxuICAgICAgICB2YXIgaXNfa2V5ZnVuY3Rpb249ZmFsc2U7XG4gICAgICAgIGlmKGtleW51bSBpbiBbOCwgMzcsIDM5LCA5LCAzNiwgMzUsIDQ2XSlcbiAgICAgICAgICAgIGlzX2tleWZ1bmN0aW9uPXRydWU7XG5cbiAgICAgICAgdmFyIGtleWNoYXI9U3RyaW5nLmZyb21DaGFyQ29kZShrZXludW0pO1xuXG4gICAgICAgIGlmKCBrZXljaGFyID09PSAnLicgKSBpc19rZXlmdW5jdGlvbj1mYWxzZTtcbiAgICAgICAgdmFyIGNoZWNrPWZhbHNlO1xuICAgICAgICBmb3IodmFyIGk9MDtpPGNoYXJzLmxlbmd0aDtpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmKGNoYXJzW2ldID09PSBrZXljaGFyKSB7XG4gICAgICAgICAgICAgICAgY2hlY2s9dHJ1ZTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiggaXNfa2V5ZnVuY3Rpb24pXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgcmV0dXJuIGNoZWNrO1xuICAgIH0sXG5cbiAgICBudW1iZXJfZm9ybWF0OiBmdW5jdGlvbihhLCBiLCBjLCBkKSB7XG4gICAgICAgIGEgPSBNYXRoLnJvdW5kKGEgKiBNYXRoLnBvdygxMCwgYikpIC8gTWF0aC5wb3coMTAsIGIpO1xuICAgICAgICBlID0gYSArICcnO1xuICAgICAgICBmID0gZS5zcGxpdCgnLicpO1xuICAgICAgICBpZighZlswXSkgZlswXSA9ICcwJztcbiAgICAgICAgaWYoIWZbMV0pIGZbMV0gPSAnJztcbiAgICAgICAgaWYoZlsxXS5sZW5ndGggPCBiKXtcbiAgICAgICAgICAgIGcgPSBmWzFdO1xuICAgICAgICAgICAgZm9yKGkgPSBmWzFdLmxlbmd0aCArIDE7IGkgPD0gYjsgaSsrKSB7XG4gICAgICAgICAgICAgICAgZyArPSAnMCc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmWzFdID0gZztcbiAgICAgICAgfVxuICAgICAgICBpZihkICE9ICcnICYmIGZbMF0ubGVuZ3RoID4gMykge1xuICAgICAgICAgICAgaCA9IGZbMF07XG4gICAgICAgICAgICBmWzBdID0gJyc7XG4gICAgICAgICAgICBmb3IoaiA9IDM7IGogPCBoLmxlbmd0aDsgaiArPSAzKSB7XG4gICAgICAgICAgICAgICAgaSA9IGguc2xpY2UoaC5sZW5ndGggLSBqLCBoLmxlbmd0aCAtIGogKyAzKTtcbiAgICAgICAgICAgICAgICBmWzBdID0gZCArIGkgKyBmWzBdICsgJyc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBqID0gaC5zdWJzdHIoMCwgKGgubGVuZ3RoICUgMyA9PSAwKSA/IDMgOiAoaC5sZW5ndGggJSAzKSk7XG4gICAgICAgICAgICBmWzBdID0gaiArIGZbMF07XG4gICAgICAgIH1cbiAgICAgICAgYyA9IChiIDw9IDApID8gJyc6IGM7XG4gICAgICAgIHJldHVybiBmWzBdICsgYyArIGZbMV07XG4gICAgfSxcblxuICAgIHRvRXVybzogZnVuY3Rpb24obixkZWNpbWFscyxzZV96ZXJvX3N0cmluZ2FfdnVvdGEpXG4gICAge1xuICAgICAgICBpZihzZV96ZXJvX3N0cmluZ2FfdnVvdGE9PW51bGwpIHNlX3plcm9fc3RyaW5nYV92dW90YT1mYWxzZTtcbiAgICAgICAgbj1nZXRGbG9hdDIobik7XG4gICAgICAgIHZhciBDVVJSRU5DWV9fREVDSU1BTF9TRVBBUkFUT1I9JChcIiNDVVJSRU5DWV9fREVDSU1BTF9TRVBBUkFUT1JcIikudmFsKCk7XG4gICAgICAgIHZhciBDVVJSRU5DWV9fVEhPVVNBTkRTX1NFUEFSQVRPUj0kKFwiI0NVUlJFTkNZX19USE9VU0FORFNfU0VQQVJBVE9SXCIpLnZhbCgpO1xuICAgICAgICBpZighZGVjaW1hbHMpIGRlY2ltYWxzPTI7XG4gICAgICAgIHZhciBzaWduPShuPDAgPyBcIi0gXCIgOiBcIlwiKTtcbiAgICAgICAgdmFyIHM9bnVtYmVyX2Zvcm1hdChNYXRoLmFicyhuKSxkZWNpbWFscyxDVVJSRU5DWV9fREVDSU1BTF9TRVBBUkFUT1IsQ1VSUkVOQ1lfX1RIT1VTQU5EU19TRVBBUkFUT1IpO1xuXG4gICAgICAgIGlmKHNlX3plcm9fc3RyaW5nYV92dW90YSAmJiBwYXJzZUZsb2F0KHMpID09PSAwKSBzPVwiXCI7XG5cbiAgICAgICAgcmV0dXJuIHNpZ24gKyBzO1xuICAgIH0sXG5cbiAgICB0cmltOiBmdW5jdGlvbiAoc3RyLCBjaGFycykge1xuICAgICAgICByZXR1cm4gbHRyaW0ocnRyaW0oc3RyLCBjaGFycyksIGNoYXJzKTtcbiAgICB9LFxuXG4gICAgbHRyaW06IGZ1bmN0aW9uKHN0ciwgY2hhcnMpIHtcbiAgICAgICAgY2hhcnMgPSBjaGFycyB8fCBcIlxcXFxzXCI7XG4gICAgICAgIHJldHVybiBzdHIucmVwbGFjZShuZXcgUmVnRXhwKFwiXltcIiArIGNoYXJzICsgXCJdK1wiLCBcImdcIiksIFwiXCIpO1xuICAgIH0sXG5cbiAgICBydHJpbTogZnVuY3Rpb24oc3RyLCBjaGFycykge1xuICAgICAgICBjaGFycyA9IGNoYXJzIHx8IFwiXFxcXHNcIjtcbiAgICAgICAgcmV0dXJuIHN0ci5yZXBsYWNlKG5ldyBSZWdFeHAoXCJbXCIgKyBjaGFycyArIFwiXSskXCIsIFwiZ1wiKSwgXCJcIik7XG4gICAgfSxcblxuICAgIHdhaXRpbmc6IGZ1bmN0aW9uKHZpc2liaWxlKVxuICAgIHtcbiAgICAgICAgd2FpdGluZzIodmlzaWJpbGUpO1xuICAgIH0sXG5cbiAgICB3YWl0aW5nMjogZnVuY3Rpb24odmlzaWJpbGUsdmlld19wcm9ncmVzcylcbiAgICB7XG4gICAgICAgIGlmKHZpc2liaWxlPT1udWxsKSB2aXNpYmlsZT10cnVlO1xuICAgICAgICBpZih2aWV3X3Byb2dyZXNzPT1udWxsKSB2aWV3X3Byb2dyZXNzPWZhbHNlO1xuICAgICAgICBpZih2aXNpYmlsZSkge1xuICAgICAgICAgICAgZGlhbG9nU2hvdyhcImRpdl93YWl0aW5nMlwiKTtcbiAgICAgICAgICAgIGlmKHZpZXdfcHJvZ3Jlc3Mpe1xuICAgICAgICAgICAgICAgICQoXCIjc3Bhbl9wZXJjX2F2YW56YW1lbnRvXCIpLnNob3coKTtcbiAgICAgICAgICAgICAgICAkKFwiI3NwYW5fc3ltYm9sX3BlcmNcIikuc2hvdygpO1xuICAgICAgICAgICAgICAgIGludGVydmFsX2F2YW56YW1lbnRvPXNldEludGVydmFsKFwicnVuQWpheEF2YW56YW1lbnRvKClcIiwgMjAwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICQoXCIjZGl2X3dhaXRpbmcyXCIpLmRpYWxvZyhcImNsb3NlXCIpO1xuICAgICAgICAgICAgY2xlYXJJbnRlcnZhbChpbnRlcnZhbF9hdmFuemFtZW50byk7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgcnVuQWpheEF2YW56YW1lbnRvOiBmdW5jdGlvbigpe1xuICAgICAgICAkLmFqYXgoe1xuICAgICAgICAgICAgdXJsOiBcImFqYXgucGhwP0pTT049MSZvYmplY3Q9SVdSb290JnRpcG92aWV3PWdldFByb2dyZXNzQmFyXCIsXG4gICAgICAgICAgICBkYXRhVHlwZTogXCJqc29uXCIsXG4gICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbihqc29uKXtcbiAgICAgICAgICAgICAgICAkKFwiI3NwYW5fcGVyY19hdmFuemFtZW50b1wiKS5odG1sKCBqc29uLnBlcmNfYXZhbnphbWVudG8gKyBcIiVcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0sXG5cbiAgICBzdHJfcGFkOiBmdW5jdGlvbiAoaW5wdXQsIHBhZF9sZW5ndGgsIHBhZF9zdHJpbmcsIHBhZF90eXBlKSB7XG4gICAgICAgIHZhciBoYWxmID0gJycsIHBhZF90b19nbztcbiAgICAgICAgdmFyIHN0cl9wYWRfcmVwZWF0ZXIgPSBmdW5jdGlvbiAocywgbGVuKSB7XG4gICAgICAgICAgICB2YXIgY29sbGVjdCA9ICcnLCBpO1xuXG4gICAgICAgICAgICB3aGlsZSAoY29sbGVjdC5sZW5ndGggPCBsZW4pIHtjb2xsZWN0ICs9IHM7fVxuICAgICAgICAgICAgY29sbGVjdCA9IGNvbGxlY3Quc3Vic3RyKDAsbGVuKTtcbiAgICAgICAgICAgIHJldHVybiBjb2xsZWN0O1xuICAgICAgICB9O1xuXG4gICAgICAgIGlucHV0ICs9ICcnOyAgICBwYWRfc3RyaW5nID0gKHBhZF9zdHJpbmcgIT0gbnVsbCA/IHBhZF9zdHJpbmcgOiBcIiBcIik7XG5cbiAgICAgICAgaWYgKHBhZF90eXBlICE9ICdTVFJfUEFEX0xFRlQnICYmIHBhZF90eXBlICE9ICdTVFJfUEFEX1JJR0hUJyAmJiBwYWRfdHlwZSAhPSAnU1RSX1BBRF9CT1RIJykgeyBwYWRfdHlwZSA9ICdTVFJfUEFEX1JJR0hUJzsgfVxuICAgICAgICBpZiAoKHBhZF90b19nbyA9IHBhZF9sZW5ndGggLSBpbnB1dC5sZW5ndGgpID4gMCkge1xuICAgICAgICAgICAgaWYgKHBhZF90eXBlID09ICdTVFJfUEFEX0xFRlQnKSB7IGlucHV0ID0gc3RyX3BhZF9yZXBlYXRlcihwYWRfc3RyaW5nLCBwYWRfdG9fZ28pICsgaW5wdXQ7IH0gICAgICAgIGVsc2UgaWYgKHBhZF90eXBlID09ICdTVFJfUEFEX1JJR0hUJykgeyBpbnB1dCA9IGlucHV0ICsgc3RyX3BhZF9yZXBlYXRlcihwYWRfc3RyaW5nLCBwYWRfdG9fZ28pOyB9XG4gICAgICAgICAgICBlbHNlIGlmIChwYWRfdHlwZSA9PSAnU1RSX1BBRF9CT1RIJykge1xuICAgICAgICAgICAgICAgIGhhbGYgPSBzdHJfcGFkX3JlcGVhdGVyKHBhZF9zdHJpbmcsIE1hdGguY2VpbChwYWRfdG9fZ28vMikpO1xuICAgICAgICAgICAgICAgIGlucHV0ID0gaGFsZiArIGlucHV0ICsgaGFsZjtcbiAgICAgICAgICAgICAgICBpbnB1dCA9IGlucHV0LnN1YnN0cigwLCBwYWRfbGVuZ3RoKTsgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaW5wdXQ7XG4gICAgfSxcblxuICAgIC8vdmlzdWFsaXp6YSB1biBtZXNzYWdnaW8gbmVsbCBmb290ZXJcbiAgICBmb290ZXJNc2c6IGZ1bmN0aW9uKHRpcG8sdGl0b2xvLHRlc3RvKVxuICAgIHtcbiAgICAgICAgaWYoJChcIiNub19mb290ZXJtc2dcIikudmFsKCkgID09PSAxIHx8ICQoXCIjSVdFbnZcIikudmFsKCkgPT09IFwiYm9vdHN0cmFwXCIpe1xuICAgICAgICAgICAgaWYodGlwbz09MCkgJC5ncm93bC5ub3RpY2Uoe3RpdGxlOiAkKFwiI3RyYW5zYWN0aW9uX3N1Y2Nlc3NcIikudmFsKCksbWVzc2FnZTogJyd9KTtcbiAgICAgICAgICAgIGlmKHRpcG89PTEpICQuZ3Jvd2wuZXJyb3Ioe2R1cmF0aW9uOiAzMDAwMCx0aXRsZTogJChcIiN0cmFuc2FjdGlvbl9lcnJvclwiKS52YWwoKSxtZXNzYWdlOiB0ZXN0b30pO1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICAvL3RpcG89MCAoeWVzPXZlcmRlKSAxPShubz1yb3NzbykgMj0oYWxlcnQsIGdpYWxsbylcbiAgICAgICAgdmFyICRkaXY9JChcIiNkaXZNc2dcIik7XG4gICAgICAgICRkaXYuZmFkZU91dCgpO1xuICAgICAgICAkZGl2Lmh0bWwodGl0b2xvKTtcbiAgICAgICAgJGRpdi5yZW1vdmVDbGFzcyhcIm1zZ09LM1wiKS5yZW1vdmVDbGFzcyhcIm1zZ0VSUjNcIik7XG4gICAgICAgIGlmKHRpcG89PTApXG4gICAgICAgICAgICAkZGl2LmFkZENsYXNzKFwibXNnT0szXCIpO1xuICAgICAgICBpZih0aXBvPT0xKVxuICAgICAgICAgICAgJGRpdi5hZGRDbGFzcyhcIm1zZ0VSUjNcIik7XG5cbiAgICAgICAgLy90ZXN0bz10ZXN0by5yZXBsYWNlKC88YnI+L2dpLFwiXFxuXCIpO1xuICAgICAgICAkZGl2LnByb3AoXCJtZXNzYWdnaW9cIix0ZXN0byk7XG4gICAgICAgICRkaXYuZmFkZUluKCk7XG5cbiAgICAgICAgc2V0VGltZW91dChcIiQoJyNkaXZNc2cnKS5mYWRlT3V0KCk7XCIsMyo2MDAwMCk7XG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSxcblxuICAgIGdldF9lYW4xM19jaGVja2RpZ2l0OiBmdW5jdGlvbihzKVxuICAgIHtcbiAgICAgICAgaWYoIHMubGVuZ3RoPjEyICkgcz1zLnN1YnN0cigwLDEyKTtcbiAgICAgICAgcz1wYXJzZUludChzLDEwKTtcbiAgICAgICAgcz1zdHJfcGFkKHMsIDEyLCBcIjBcIiwgXCJTVFJfUEFEX0xFRlRcIik7XG4gICAgICAgIHZhciBldmVuX3N1bSA9IFx0cGFyc2VJbnQocy5zdWJzdHIoMSwxKSwxMCkgK1xuICAgICAgICAgICAgcGFyc2VJbnQocy5zdWJzdHIoMywxKSwxMCkgK1xuICAgICAgICAgICAgcGFyc2VJbnQocy5zdWJzdHIoNSwxKSwxMCkgK1xuICAgICAgICAgICAgcGFyc2VJbnQocy5zdWJzdHIoNywxKSwxMCkgK1xuICAgICAgICAgICAgcGFyc2VJbnQocy5zdWJzdHIoOSwxKSwxMCkgK1xuICAgICAgICAgICAgcGFyc2VJbnQocy5zdWJzdHIoMTEsMSksMTApO1xuXG4gICAgICAgIHZhciBldmVuX3N1bV90aHJlZSA9IGV2ZW5fc3VtICogMztcbiAgICAgICAgdmFyIG9kZF9zdW0gPSBcdHBhcnNlSW50KHMuc3Vic3RyKDAsMSksMTApICtcbiAgICAgICAgICAgIHBhcnNlSW50KHMuc3Vic3RyKDIsMSksMTApICtcbiAgICAgICAgICAgIHBhcnNlSW50KHMuc3Vic3RyKDQsMSksMTApICtcbiAgICAgICAgICAgIHBhcnNlSW50KHMuc3Vic3RyKDYsMSksMTApICtcbiAgICAgICAgICAgIHBhcnNlSW50KHMuc3Vic3RyKDgsMSksMTApICtcbiAgICAgICAgICAgIHBhcnNlSW50KHMuc3Vic3RyKDEwLDEpLDEwKTtcblxuICAgICAgICB2YXIgdG90YWxfc3VtID0gZXZlbl9zdW1fdGhyZWUgKyBvZGRfc3VtO1xuICAgICAgICB2YXIgbmV4dF90ZW4gPSAoTWF0aC5jZWlsKHRvdGFsX3N1bS8xMCkpKjEwO1xuICAgICAgICB2YXIgY2hlY2tfZGlnaXQgPSBuZXh0X3RlbiAtIHRvdGFsX3N1bTtcblxuICAgICAgICByZXR1cm4gY2hlY2tfZGlnaXQ7XG4gICAgfSxcblxuICAgIC8vdmlzdWFsaXp6YSBvIG5hc2NvbmRlIGxlIGFsdHJlIHZvY2kgbmVsbGEgY29tYm8gZGVsIHNpYW5cbiAgICBzaWFuX2NvbWJvX3N3YXA6IGZ1bmN0aW9uKGlkY29tYm8pXG4gICAge1xuXG4gICAgICAgIGZvcih2YXIgaT0wO2k8JChcIiNjYXVzYWxlc2lhbiBvcHRpb25cIikuc2l6ZSgpO2krKylcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIGlkPVwiI3NpYW5fb3B0aW9uX1wiK2k7XG4gICAgICAgICAgICBpZiggJChpZCkucHJvcChcImRpc2FibGVkXCIpIT1cIlwiIClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAkKGlkKS5yZW1vdmVBdHRyKFwiZGlzYWJsZWRcIik7XG4gICAgICAgICAgICAgICAgJChpZCkuc2hvdygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICQoaWQpLnByb3AoXCJkaXNhYmxlZFwiLFwiZGlzYWJsZWRcIik7XG4gICAgICAgICAgICAgICAgJChpZCkuaGlkZSgpO1xuXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgc3RycG9zOiBmdW5jdGlvbiAoaGF5c3RhY2ssIG5lZWRsZSwgb2Zmc2V0KSB7XG4gICAgICAgIHZhciBpID0gKGhheXN0YWNrICsgJycpLmluZGV4T2YobmVlZGxlLCAob2Zmc2V0IHx8IDApKTtcbiAgICAgICAgcmV0dXJuIGkgPT09IC0xID8gZmFsc2UgOiBpO1xuICAgIH0sXG5cblxuICAgIC8vc2V6aW9uZSBpdmFcbiAgICBpdmFHZXQ6IGZ1bmN0aW9uKGlkaXZhLGNhbXBvKVxuICAgIHtcbiAgICAgICAgaWYoaWRpdmE9PW51bGwpIGlkaXZhPTA7XG4gICAgICAgIGlmKCBpZGl2YT09MCApIHJldHVybjtcblxuICAgICAgICB2YXIgYT0kKFwiI2hpZGRlbl9pZGl2YVwiK2lkaXZhKS5hdHRyKGNhbXBvKTtcbiAgICAgICAgaWYoIGNhbXBvPT1cImFsaXF1b3RhXCIgfHwgY2FtcG89PVwicGVyY2luZGV0cmFpYmlsaXRhXCIgKSBhPWdldEZsb2F0MihhKTtcbiAgICAgICAgcmV0dXJuIGE7XG4gICAgfSxcblxuICAgIGdldEh0bWxGcm9tQWpheDogZnVuY3Rpb24odXJsLGRpdm5hbWUsaXNfYXN5bmMsc2hvd193YWl0aW5nLGNhbGxiYWNrRnVuY3Rpb24pIHtcbiAgICAgICAgdmFyIGRhdGEgPSB7fTtcbiAgICAgICAgaWYodHlwZW9mIHVybCA9PT0gXCJvYmplY3RcIil7XG4gICAgICAgICAgICBkaXZuYW1lID0gdXJsW1wiZGl2bmFtZVwiXTtcbiAgICAgICAgICAgIGlzX2FzeW5jID0gdXJsW1wiaXNfYXN5bmNcIl07XG4gICAgICAgICAgICBzaG93X3dhaXRpbmcgPSB1cmxbXCJzaG93X3dhaXRpbmdcIl07XG4gICAgICAgICAgICBjYWxsYmFja0Z1bmN0aW9uID0gdXJsW1wib25TdWNjZXNzXCJdO1xuICAgICAgICAgICAgZGF0YSA9IHVybFtcImRhdGFcIl07XG4gICAgICAgICAgICB1cmwgPSB1cmxbXCJ1cmxcIl07XG4gICAgICAgIH1cbiAgICAgICAgaWYodHlwZW9mIGlzX2FzeW5jID09PSBcInVuZGVmaW5lZFwiKSBpc19hc3luYz10cnVlO1xuICAgICAgICBpZih0eXBlb2Ygc2hvd193YWl0aW5nID09PSBcInVuZGVmaW5lZFwiKSBzaG93X3dhaXRpbmc9ZmFsc2U7XG5cblxuICAgICAgICBpZihzaG93X3dhaXRpbmcpIHdhaXRpbmcoKTtcblxuICAgICAgICAkLmFqYXgoe1xuICAgICAgICAgICAgdXJsOiB1cmwrXCImSlNPTlwiLFxuICAgICAgICAgICAgdHlwZTogXCJwb3N0XCIsXG4gICAgICAgICAgICBhc3luYzogaXNfYXN5bmMsXG4gICAgICAgICAgICBkYXRhVHlwZTogJ2pzb24nLFxuICAgICAgICAgICAgZGF0YTogZGF0YSxcbiAgICAgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uKGpzb24pe1xuICAgICAgICAgICAgICAgIHZhciB0ZXh0X3RvX3ByaW50PWpzb24udGV4dDtcbiAgICAgICAgICAgICAgICAkKFwiI1wiK2Rpdm5hbWUpLmh0bWwodGV4dF90b19wcmludCk7XG4gICAgICAgICAgICAgICAgaWYoc2hvd193YWl0aW5nKSB3YWl0aW5nKGZhbHNlKTtcblxuICAgICAgICAgICAgICAgICQoXCIjXCIgKyBkaXZuYW1lICsgXCIgLklXRGF0YVRhYmxlc1wiKS5lYWNoKGZ1bmN0aW9uKCl7IElXRGF0YXRhYmxlLmJ1aWxkRGF0YXRhYmxlcyh0aGlzKTsgfSk7XG5cbiAgICAgICAgICAgICAgICBpZih0eXBlb2YgY2FsbGJhY2tGdW5jdGlvbiA9PT0gXCJmdW5jdGlvblwiKSBjYWxsYmFja0Z1bmN0aW9uKGpzb24pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9LFxuXG4gICAgYnRuTG9hZF9vbmNsaWNrOiBmdW5jdGlvbihhY3Rpb24pXG4gICAge1xuICAgICAgICB2YXIgJGZvcm09JChcIiNmb3JtMVwiKTtcbiAgICAgICAgaWYoYWN0aW9uPT1cIlwiKSAkZm9ybS5zdWJtaXQoKTtcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAkZm9ybS5tZXRob2Q9XCJnZXRcIjtcbiAgICAgICAgICAgICRmb3JtLnRhcmdldD1cIl9ibGFua1wiO1xuICAgICAgICAgICAgJGZvcm0uYWN0aW9uPWFjdGlvbjtcbiAgICAgICAgICAgICRmb3JtLnN1Ym1pdCgpO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIGJ0bkxvYWQyX29uY2xpY2s6IGZ1bmN0aW9uKCl7XG4gICAgICAgIHZhciAkZm9ybT0kKFwiI2Zvcm0xXCIpO1xuICAgICAgICAkZm9ybS5hdHRyKFwiYWN0aW9uXCIsXCJcIik7XG4gICAgICAgICRmb3JtLnJlbW92ZUF0dHIoXCJ0YXJnZXRcIik7XG4gICAgICAgICRmb3JtLnN1Ym1pdCgpO1xuICAgIH0sXG5cbiAgICBQYWdlQ2hhbmdlOiBmdW5jdGlvbihwYWdlbilcbiAgICB7XG4gICAgICAgICQoXCIjbnBhZ2VcIikudmFsKHBhZ2VuKTtcbiAgICAgICAgYnRuTG9hZDJfb25jbGljaygpO1xuICAgIH0sXG5cbiAgICBkZWxldGVPYmplY3Q6IGZ1bmN0aW9uKGlkLGZvcnphX2VsaW1pbmF6aW9uZSxwYXJhbWV0cmlfYWdnaXVudGl2aSxyZWxvYWQsaWRkb2N1bWVudG8sY29kaWNlZG9jdW1lbnRvLHJlbG9hZF90YWJsZXNjcm9sbCl7XG4gICAgICAgIElXQ29uZmlybSgkKFwiI2NvbmZlcm1hX2NhbmNlbGxhemlvbmUxXCIpLnZhbCgpK1wiICgxLzIpXCIsZnVuY3Rpb24oKXtcbiAgICAgICAgICAgIElXQ29uZmlybTIoJChcIiNjb25mZXJtYV9jYW5jZWxsYXppb25lMlwiKS52YWwoKStcIiAoMi8yKVwiLGZ1bmN0aW9uKCl7XG4gICAgICAgICAgICAgICAgYnRuRGVsMl9vbmNsaWNrKGlkLGZvcnphX2VsaW1pbmF6aW9uZSxwYXJhbWV0cmlfYWdnaXVudGl2aSxyZWxvYWQsaWRkb2N1bWVudG8sY29kaWNlZG9jdW1lbnRvLHJlbG9hZF90YWJsZXNjcm9sbCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSlcbiAgICB9LFxuXG4gICAgYnRuRGVsMl9vbmNsaWNrOiBmdW5jdGlvbihpZCxmb3J6YV9lbGltaW5hemlvbmUscGFyYW1ldHJpX2FnZ2l1bnRpdmkscmVsb2FkLGlkZG9jdW1lbnRvLGNvZGljZWRvY3VtZW50byxyZWxvYWRfdGFibGVzY3JvbGwpe1xuICAgICAgICBpZih0eXBlb2YgcGFyYW1ldHJpX2FnZ2l1bnRpdmkgPT09IFwidW5kZWZpbmVkXCIpIHBhcmFtZXRyaV9hZ2dpdW50aXZpID0gXCJcIjtcbiAgICAgICAgaWYodHlwZW9mIHJlbG9hZCA9PT0gXCJ1bmRlZmluZWRcIikgcmVsb2FkID0gZmFsc2U7XG4gICAgICAgIGlmKHR5cGVvZiBpZGRvY3VtZW50byA9PT0gXCJ1bmRlZmluZWRcIikgaWRkb2N1bWVudG8gPSAwO1xuICAgICAgICBpZih0eXBlb2YgY29kaWNlZG9jdW1lbnRvID09PSBcInVuZGVmaW5lZFwiKSBjb2RpY2Vkb2N1bWVudG8gPSBcIlwiO1xuICAgICAgICBpZih0eXBlb2YgcmVsb2FkX3RhYmxlc2Nyb2xsID09PSBcInVuZGVmaW5lZFwiKSByZWxvYWRfdGFibGVzY3JvbGwgPSBcIlwiO1xuXG4gICAgICAgIHZhciBvYmplY3Q9JChcIiNvYmplY3RcIikudmFsKCk7XG4gICAgICAgIHZhciB0aXBvdmlldz0kKFwiI3RpcG92aWV3XCIpLnZhbCgpO1xuICAgICAgICAvL1Byb2NlZG8gYWxsYSBjYW5jZWxsYXppb25lXG4gICAgICAgIHZhciB1cmw9XCJ2aWV3LnBocD9ERUxfRlJPTV9BSkFYJmlkPVwiK2lkK1wiJm9iamVjdD1cIitvYmplY3QrXCImdGlwb3ZpZXc9XCIrdGlwb3ZpZXc7XG4gICAgICAgIGlmKGlkZG9jdW1lbnRvPjAgJiYgY29kaWNlZG9jdW1lbnRvKSB1cmw9XCJ2aWV3LnBocD9ERUxfRlJPTV9BSkFYJmlkZG9jdW1lbnRvPVwiK2lkZG9jdW1lbnRvK1wiJmNvZGljZWRvY3VtZW50bz1cIitjb2RpY2Vkb2N1bWVudG8rXCImdGlwb3ZpZXc9dmlld1wiO1xuICAgICAgICBpZihwYXJhbWV0cmlfYWdnaXVudGl2aSkgdXJsKz1cIiZcIitwYXJhbWV0cmlfYWdnaXVudGl2aTtcbiAgICAgICAgaWYgKGZvcnphX2VsaW1pbmF6aW9uZSkgdXJsKz1cIiZGT1JaQV9FTElNSU5BWklPTkVcIjtcbiAgICAgICAgd2FpdGluZyh0cnVlKTtcbiAgICAgICAgJC5hamF4KHtcbiAgICAgICAgICAgIHVybDogdXJsLFxuICAgICAgICAgICAgZGF0YVR5cGU6IFwieG1sXCIsXG4gICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbih4bWwpe1xuICAgICAgICAgICAgICAgIHdhaXRpbmcoZmFsc2UpO1xuICAgICAgICAgICAgICAgIHZhciBjaGllZGlfY29uZmVybWEgPSAkKHhtbCkuZmluZChcImNoaWVkaV9jb25mZXJtYVwiKS50ZXh0KCk7XG4gICAgICAgICAgICAgICAgYWpheFN1Ym1pdE9uU3VjY2Vzc0Z1bmN0aW9uKHhtbCwgZmFsc2UsIGNoaWVkaV9jb25mZXJtYSk7XG4gICAgICAgICAgICAgICAgdmFyIHJldCA9ICQoeG1sKS5maW5kKFwicmV0XCIpLnRleHQoKTtcbiAgICAgICAgICAgICAgICBpZihyZXQpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBpZihyZWxvYWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKGlkZG9jdW1lbnRvPjApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLmhyZWY9XCI/Y29kaWNlZG9jdW1lbnRvPVwiK2NvZGljZWRvY3VtZW50bytcIiZ0aXBvdmlldz12aWV3XCI7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGxvY2F0aW9uLnJlbG9hZCgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmKHJlbG9hZF90YWJsZXNjcm9sbCkgcmVsb2FkVGFibGUocmVsb2FkX3RhYmxlc2Nyb2xsLFwiZm9ybTFcIik7XG4gICAgICAgICAgICAgICAgICAgICQoXCIjdHJfXCIraWQpLmhpZGVSb3coKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgaWYoY2hpZWRpX2NvbmZlcm1hKVxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBJV0NvbmZpcm0oY2hpZWRpX2NvbmZlcm1hLGZ1bmN0aW9uKCl7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnRuRGVsMl9vbmNsaWNrKGlkLDEscGFyYW1ldHJpX2FnZ2l1bnRpdmkscmVsb2FkLGlkZG9jdW1lbnRvLGNvZGljZWRvY3VtZW50bywgcmVsb2FkX3RhYmxlc2Nyb2xsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgIH0pO1xuXG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSxcblxuICAgIGJ0blNhdmVfb25jbGljazogZnVuY3Rpb24ocmVsb2FkLHNldF9wcm9ncmVzcyx1cmwsb25fY29tcGxldGUsYmVmb3JlU3VibWl0Q2FsbGJhY2spXG4gICAge1xuICAgICAgICBpZihyZWxvYWQ9PVwiXCIpIHJlbG9hZD1mYWxzZTtcbiAgICAgICAgaWYoc2V0X3Byb2dyZXNzPT1cIlwiKSBzZXRfcHJvZ3Jlc3M9ZmFsc2U7XG5cbiAgICAgICAgdmFyICRidG5zID0gJChcImJ1dHRvblwiKTtcblxuICAgICAgICAkYnRucy5wcm9wKFwiZGlzYWJsZWRcIix0cnVlKTtcbiAgICAgICAgaWYoc2V0X3Byb2dyZXNzKSB3YWl0aW5nMih0cnVlLHRydWUpO1xuICAgICAgICBpZih0eXBlb2YgYmVmb3JlU3VibWl0Q2FsbGJhY2s9PT1cImZ1bmN0aW9uXCIpIGJlZm9yZVN1Ym1pdENhbGxiYWNrKCk7XG4gICAgICAgIHZhciAkT1BfRlJPTV9BSkFYID0gJChcIiNPUF9GUk9NX0FKQVhcIik7XG4gICAgICAgICRPUF9GUk9NX0FKQVgudmFsKDEpO1xuXG4gICAgICAgICQuYWpheCh7XG4gICAgICAgICAgICB1cmw6IFwidmlldy5waHBcIixcbiAgICAgICAgICAgIHR5cGU6IFwicG9zdFwiLFxuICAgICAgICAgICAgZGF0YVR5cGU6IFwieG1sXCIsXG4gICAgICAgICAgICBkYXRhOiAgJChcIiNmb3JtMSA6aW5wdXQsIDpjaGVja2JveFwiKS5zZXJpYWxpemUoKSxcbiAgICAgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uIChyZXMpIHtcbiAgICAgICAgICAgICAgICBhamF4U3VibWl0T25TdWNjZXNzRnVuY3Rpb24ocmVzKTtcbiAgICAgICAgICAgICAgICAkT1BfRlJPTV9BSkFYLnZhbChcIlwiKTtcbiAgICAgICAgICAgICAgICB2YXIgcmV0ID0gJChyZXMpLmZpbmQoXCJyZXRcIikudGV4dCgpO1xuICAgICAgICAgICAgICAgIHZhciBkZWJ1ZyA9ICQocmVzKS5maW5kKFwiZGVidWdcIikudGV4dCgpO1xuICAgICAgICAgICAgICAgIHZhciBpZCA9ICQocmVzKS5maW5kKFwiaWRcIikudGV4dCgpO1xuXG4gICAgICAgICAgICAgICAgaWYocmV0KVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgJChcIiNpZFwiKS52YWwoaWQpO1xuICAgICAgICAgICAgICAgICAgICAkYnRucy5mYWRlSW4oKTtcbiAgICAgICAgICAgICAgICAgICAgJCgnI25vX2JlZm9yZXVubG9hZCcpLnZhbCgxKTtcblxuICAgICAgICAgICAgICAgICAgICBpZihyZWxvYWQgJiYgIWRlYnVnKSB3aW5kb3cubG9jYXRpb24ucmVsb2FkKCk7XG4gICAgICAgICAgICAgICAgICAgIC8vZXZlbnR1YWxlIFVSTCBkaSBkZXN0aW5hemlvbmUuIEFjY29kbyBsJ2lkIGdlbmVyYXRvIG8gcmVjdXBlcmF0byBkaXJldHRhbWVudGUgcXVpbmRpIGwndXJsIGRldmUgZXNzZXJlIGZvcm1hdHRhdGEgYmVuZSBsYXRvIHBocFxuICAgICAgICAgICAgICAgICAgICBpZih1cmwhPW51bGwgJiYgdXJsIT1cIlwiICYmICFkZWJ1Zykgd2luZG93LmxvY2F0aW9uLmhyZWY9dXJsK2lkO1xuICAgICAgICAgICAgICAgICAgICBpZih0eXBlb2Ygb25fY29tcGxldGU9PT1cImZ1bmN0aW9uXCIpIG9uX2NvbXBsZXRlKHRydWUscmVzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgaWYodHlwZW9mIG9uX2NvbXBsZXRlPT09XCJmdW5jdGlvblwiKSBvbl9jb21wbGV0ZShmYWxzZSxyZXMpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICRidG5zLnByb3AoXCJkaXNhYmxlZFwiLGZhbHNlKTtcbiAgICAgICAgICAgICAgICBpZihzZXRfcHJvZ3Jlc3MpIHdhaXRpbmcyKGZhbHNlKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlcnJvcjogZnVuY3Rpb24gKHhociwgYWpheE9wdGlvbnMsIHRocm93bkVycm9yKSB7XG4gICAgICAgICAgICAgICAgJChcIiNib3hEZWJ1Z1wiKS5odG1sKFwiPHByZT5cIit4aHIuc3RhdHVzICsgXCI8YnI+XCIgKyB0aHJvd25FcnJvciArIFwiPC9wcmU+XCIpO1xuICAgICAgICAgICAgICAgICRidG5zLnByb3AoXCJkaXNhYmxlZFwiLGZhbHNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSxcblxuICAgIGJ0blByaW50X29uY2xpY2s6IGZ1bmN0aW9uKGlzX3NlbnphX3ByZXp6aSlcbiAgICB7XG4gICAgICAgIHZhciBwYWdlX3ByaW50PSQoJyNwYWdlX3ByaW50JykudmFsKCk7XG4gICAgICAgIHZhciBzdHJpbmdoZT1wYWdlX3ByaW50LnNwbGl0KCdpZGRvY3VtZW50bycpO1xuICAgICAgICB2YXIgaWRkb2N1bWVudG89JChcIiNpZGRvY3VtZW50b1wiKS52YWwoKTtcbiAgICAgICAgdmFyIHVybD1zdHJpbmdoZVswXStcIiZpZGRvY3VtZW50bz1cIitpZGRvY3VtZW50bztcbiAgICAgICAgaWYoaXNfc2VuemFfcHJlenppPT0xKVxuICAgICAgICAgICAgdXJsKz1cIiZOT05fU1RBTVBBUkVfUFJFWlpJXCI7XG4gICAgICAgIHdpbmRvdy5vcGVuKHVybCwgJ19ibGFuaycpO1xuICAgIH0sXG5cbiAgICBidG5QcmludDJfb25jbGljazogZnVuY3Rpb24odGlwb3N0YW1wYSxpZCxjb2RpY2Vkb2N1bWVudG8sb2JqZWN0LHBhcmFtZXRyaSxzZXRmaWxlbmFtZSxpc19leGNlbCxmb3JtLHNldF9wcm9ncmVzcyxvbl9jb21wbGV0ZSl7XG4gICAgICAgIGlmKGZvcm09PW51bGwpIGZvcm09XCJmb3JtMVwiO1xuICAgICAgICBpZihzZXRfcHJvZ3Jlc3M9PW51bGwpIHNldF9wcm9ncmVzcz1mYWxzZTtcbiAgICAgICAgaWYoc2V0ZmlsZW5hbWU9PVwidHJ1ZVwiKXtcbiAgICAgICAgICAgIGlmKGlkPT1cIlwiKSBpZD0wO1xuICAgICAgICAgICAgd2FpdGluZzIodHJ1ZSxzZXRfcHJvZ3Jlc3MpO1xuICAgICAgICAgICAgdmFyICRhbGxhcm1pPSQoXCIjYXZ2aXNpX2Zvb3Rlcl91bDBcIik7XG4gICAgICAgICAgICAkYWxsYXJtaS5oaWRlKCk7XG4gICAgICAgICAgICB2YXIgJGZvcm09JChcIiNcIitmb3JtKTtcbiAgICAgICAgICAgICQoXCIjdGlwb3N0YW1wYVwiKS52YWwodGlwb3N0YW1wYSk7XG4gICAgICAgICAgICB2YXIgYWN0aW9uPVwicHJpbnQucGhwP3NldGZpbGVuYW1lJmlkPVwiK2lkO1xuICAgICAgICAgICAgaWYoaXNfZXhjZWwhPVwiZmFsc2VcIikgYWN0aW9uKz1cIiZFWENFTFwiO1xuICAgICAgICAgICAgJC5wb3N0KGFjdGlvbiwkZm9ybS5zZXJpYWxpemUoKSxmdW5jdGlvbih4bWwpe1xuICAgICAgICAgICAgICAgIHZhciByZXQ9JCh4bWwpLmZpbmQoXCJyZXRcIikudGV4dCgpO1xuICAgICAgICAgICAgICAgIHZhciBvdXRmaWxlPSQoeG1sKS5maW5kKFwib3V0ZmlsZVwiKS50ZXh0KCk7XG4gICAgICAgICAgICAgICAgaWYodHlwZW9mIG9uX2NvbXBsZXRlPT09XCJmdW5jdGlvblwiKSBvbl9jb21wbGV0ZSgpO1xuICAgICAgICAgICAgICAgIGlmKHJldD09XCJ0cnVlXCIpe1xuICAgICAgICAgICAgICAgICAgICBpZihpc19leGNlbD09XCJmYWxzZVwiKSB3aW5kb3cub3BlbihvdXRmaWxlLCdfYmxhbmsnKTtcbiAgICAgICAgICAgICAgICAgICAgZWxzZSB3aW5kb3cubG9jYXRpb24uaHJlZj1vdXRmaWxlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgIGFsZXJ0KFwiRXJyb3JlLiBJbXBvc3NpYmlsZSBzdGFtcGFyZVwiKTtcblxuICAgICAgICAgICAgICAgICRhbGxhcm1pLnNob3coKTtcbiAgICAgICAgICAgICAgICB3YWl0aW5nMihmYWxzZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNle1xuICAgICAgICAgICAgdmFyIHVybD1cInByaW50LnBocD90aXBvc3RhbXBhPVwiK3RpcG9zdGFtcGE7XG5cbiAgICAgICAgICAgIHZhciBwYXJhbXMgPSBwYXJhbWV0cmkuc3BsaXQoXCIsXCIpO1xuXG4gICAgICAgICAgICAkLmVhY2gocGFyYW1zLGZ1bmN0aW9uKGkpIHtcbiAgICAgICAgICAgICAgICB1cmwrPVwiJlwiK3BhcmFtc1tpXTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBpZihjb2RpY2Vkb2N1bWVudG8hPVwiXCIpIHVybCs9XCImaWRkb2N1bWVudG89XCIraWQrXCImY29kaWNlZG9jdW1lbnRvPVwiK2NvZGljZWRvY3VtZW50bztcbiAgICAgICAgICAgIGVsc2UgdXJsKz1cIiZpZD1cIitpZCtcIiZvYmplY3Q9XCIrb2JqZWN0O1xuXG4gICAgICAgICAgICB3aW5kb3cub3Blbih1cmwsXCJfYmxhbmtcIik7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgYnRuUHJpbnRNdWx0aXBsZTogZnVuY3Rpb24oZGF0aSxzZXRfcHJvZ3Jlc3Mpe1xuICAgICAgICBpZihzZXRfcHJvZ3Jlc3MpIHdhaXRpbmcyKHRydWUsdHJ1ZSk7XG4gICAgICAgIGRhdGkub2JqZWN0PSBcIklXUHJpbnRNdWx0aXBsZVwiO1xuICAgICAgICBkYXRpLnRpcG92aWV3ID0gXCJwcmludE11bHRpcGxlXCI7XG4gICAgICAgICQuYWpheCh7XG4gICAgICAgICAgICB1cmw6IFwiYWpheC5waHA/SlNPTlwiLFxuICAgICAgICAgICAgdHlwZTogXCJwb3N0XCIsXG4gICAgICAgICAgICBkYXRhVHlwZTogXCJqc29uXCIsXG4gICAgICAgICAgICBkYXRhOiBkYXRpLFxuICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24gKGpzb24pIHtcbiAgICAgICAgICAgICAgICB2YXIgcmV0ID0ganNvbi5yZXQ7XG4gICAgICAgICAgICAgICAgdmFyIG91dGZpbGUgPSBqc29uLm91dGZpbGU7XG4gICAgICAgICAgICAgICAgaWYoc2V0X3Byb2dyZXNzKSB3YWl0aW5nMihmYWxzZSk7XG4gICAgICAgICAgICAgICAgaWYocmV0KVxuICAgICAgICAgICAgICAgICAgICB3aW5kb3cub3BlbihcInRtcC9cIitvdXRmaWxlKTtcbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgIGFsZXJ0KCQoXCIjYWxlcnRfbm9fc3RhbXBhXCIpLnZhbCgpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICB9LFxuXG4gICAgYnRuUHJpbnQ6IGZ1bmN0aW9uIChwYXJhbXMsIGlzX2V4Y2VsLCBjYWxsYmFjayl7XG4gICAgICAgICQuYWpheCh7XG4gICAgICAgICAgICB1cmw6IFwicHJpbnQucGhwP3NldGZpbGVuYW1lXCIsXG4gICAgICAgICAgICB0eXBlOiBcInBvc3RcIixcbiAgICAgICAgICAgIGRhdGFUeXBlOiBcInhtbFwiLFxuICAgICAgICAgICAgZGF0YTogcGFyYW1zLFxuICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24gKHhtbCl7XG4gICAgICAgICAgICAgICAgaWYodHlwZW9mIGNhbGxiYWNrID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soeG1sKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHZhciByZXQgPSAkKHhtbCkuZmluZChcInJldFwiKS50ZXh0KCk7XG4gICAgICAgICAgICAgICAgaWYocmV0ICE9PSBcInRydWVcIiApIHtcbiAgICAgICAgICAgICAgICAgICAgYWxlcnQoJChcIiNhbGVydF9ub19zdGFtcGFcIikudmFsKCkpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHZhciBvdXRmaWxlID0gJCh4bWwpLmZpbmQoXCJvdXRmaWxlXCIpLnRleHQoKTtcblxuICAgICAgICAgICAgICAgIGlmKCFpc19leGNlbCkgd2luZG93Lm9wZW4ob3V0ZmlsZSk7XG4gICAgICAgICAgICAgICAgZWxzZSB3aW5kb3cubG9jYXRpb24uaHJlZj1vdXRmaWxlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KVxuICAgIH0sXG5cbiAgICBzZXROZXdQYXNzd29yZDogZnVuY3Rpb24oaW5wdXRuYW1lLCByZXN0YXBpKXtcbiAgICAgICAgaWYodHlwZW9mIHJlc3RhcGkgPT09IFwidW5kZWZpbmVkXCIpIHJlc3RhcGkgPSBmYWxzZTtcblxuICAgICAgICAkLmFqYXgoe1xuICAgICAgICAgICAgdXJsOiBcImFqYXgucGhwP0pTT04mb2JqZWN0PUlXVXNlciZ0aXBvdmlldz1nZXROZXdQYXNzd29yZCZyZXN0YXBpPVwiICsgKHJlc3RhcGkgPyBcIjFcIiA6IFwiMFwiKSxcbiAgICAgICAgICAgIGRhdGFUeXBlOiBcImpzb25cIixcbiAgICAgICAgICAgIHN1Y2Nlc3M6ZnVuY3Rpb24oanNvbil7XG4gICAgICAgICAgICAgICAgJChcIiNcIitpbnB1dG5hbWUpLnZhbChqc29uLnBhc3N3b3JkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSxcblxuICAgIGJ0bk5ld19vbmNsaWNrOiBmdW5jdGlvbigpXG4gICAge1xuICAgICAgICB2YXIgY29kaWNlZG9jdW1lbnRvPSQoXCIjY29kaWNlZG9jdW1lbnRvXCIpLnZhbCgpO1xuICAgICAgICB2YXIgb2JqZWN0PSQoXCIjb2JqZWN0XCIpLnZhbCgpO1xuICAgICAgICB2YXIgdGlwb3ZpZXc9JChcIiN0aXBvdmlld1wiKS52YWwoKTtcbiAgICAgICAgdmFyIHJlbG9hZD1cIj90aXBvdmlldz1cIit0aXBvdmlldztcbiAgICAgICAgaWYodHlwZW9mIGNvZGljZWRvY3VtZW50bz09PVwidW5kZWZpbmVkXCIpIHJlbG9hZCs9XCImb2JqZWN0PVwiK29iamVjdDtcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBpZigkKFwiI3BhZ2VfY29udHJvbHNcIikudmFsKCkhPVwiXCIpIHJlbG9hZD1cIj90aXBvdmlldz1jb250cm9sc1wiO1xuICAgICAgICAgICAgcmVsb2FkKz1cIiZjb2RpY2Vkb2N1bWVudG89XCIrY29kaWNlZG9jdW1lbnRvO1xuICAgICAgICB9XG4gICAgICAgIHdpbmRvdy5sb2NhdGlvbj1yZWxvYWQ7XG4gICAgfSxcblxuICAgIGJ0bk1haWxfb25jbGljazogZnVuY3Rpb24oKVxuICAgIHtcbiAgICAgICAgdmFyIGlkZG9jdW1lbnRvPSQoXCIjaWRkb2N1bWVudG9cIikudmFsRmxvYXQoKTtcbiAgICAgICAgSVdDb25maXJtKCQoXCIjY29uZmVybWFfcHJvc2VndWlcIikudmFsKCksZnVuY3Rpb24oKXtcbiAgICAgICAgICAgICQuZ2V0KFwiYWpheC5waHA/dGlwb3ZpZXc9aW52aWFlbWFpbGRvYyZpZGRvY3VtZW50bz1cIitpZGRvY3VtZW50bytcIiZjb2RpY2Vkb2N1bWVudG89XCIrJChcIiNjb2RpY2Vkb2N1bWVudG9cIikudmFsKCksIGZ1bmN0aW9uKHhtbCkge1xuICAgICAgICAgICAgICAgIHZhciByZXQ9JCh4bWwpLmZpbmQoXCJyZXRcIikudGV4dCgpO1xuICAgICAgICAgICAgICAgIGlmKHJldClcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGZvb3Rlck1zZygwLFwiRW1haWwgaW52aWF0YVwiLCQoeG1sKS5maW5kKFwibXNnXCIpLnRleHQoKSk7XG4gICAgICAgICAgICAgICAgICAgICQoXCIjYnRuRW1haWxcIikuZmFkZU91dCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgIGZvb3Rlck1zZygxLFwiRXJyb3JlIG5lbGwnaW52aW8gZGVsbGEgZW1haWxcIiwkKHhtbCkuZmluZChcIm1zZ1wiKS50ZXh0KCkpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH0sXG5cbiAgICBjaGVja0FsbF9vbmNsaWNrOiBmdW5jdGlvbigpXG4gICAge1xuICAgICAgICB2YXIgdmFsPVwiXCI7dmFyICRjaGs7XG4gICAgICAgIHZhciBjaGVja2VkPSQoXCIjY2hrXzBcIikuaXMoJzpjaGVja2VkJyk7XG4gICAgICAgIGlmKCAhY2hlY2tlZCApIHZhbD1cImNoZWNrZWRcIjtcbiAgICAgICAgdmFyIG5yb3dzPSQoXCIjaV9jb3VudFwiKS52YWxGbG9hdCgpO1xuICAgICAgICBpZihucm93cz09MCkgbnJvd3M9MTAwMDtcblxuICAgICAgICBmb3IodmFyIGk9MDtpPG5yb3dzO2krKylcbiAgICAgICAge1xuICAgICAgICAgICAgJGNoaz0kKFwiI2Noa19cIitpKTtcbiAgICAgICAgICAgIGlmKHZhbD09XCJcIikgJGNoay5wcm9wKFwiY2hlY2tlZFwiLGZhbHNlKTtcbiAgICAgICAgICAgIGVsc2UgJGNoay5wcm9wKFwiY2hlY2tlZFwiLHZhbCk7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgQ3VycmVuY3lPbkJsdXI6IGZ1bmN0aW9uKG9iaklEKXtcbiAgICAgICAgdmFyIENVUlJFTkNZX19TWU1CT0w9JChcIiNDVVJSRU5DWV9fU1lNQk9MXCIpLnZhbCgpO1xuICAgICAgICB2YXIgQ1VSUkVOQ1lfX0RFQ0lNQUxTPSQoXCIjQ1VSUkVOQ1lfX0RFQ0lNQUxTXCIpLnZhbCgpO1xuICAgICAgICB2YXIgQ1VSUkVOQ1lfX0RFQ0lNQUxfU0VQQVJBVE9SPSQoXCIjQ1VSUkVOQ1lfX0RFQ0lNQUxfU0VQQVJBVE9SXCIpLnZhbCgpO1xuICAgICAgICB2YXIgQ1VSUkVOQ1lfX1RIT1VTQU5EU19TRVBBUkFUT1I9JChcIiNDVVJSRU5DWV9fVEhPVVNBTkRTX1NFUEFSQVRPUlwiKS52YWwoKTtcbiAgICAgICAgdmFyICRvYmpJRD0kKFwiI1wiK29iaklEKTt2YXIgJG9iaklEX2hpZGRlbj0kKFwiI1wiK29iaklEK1wiX2hpZGRlblwiKTtcblxuICAgICAgICB2YXIgaWZfemVyb19lbXB0eT1mYWxzZTtcbiAgICAgICAgdmFyIG1DVVJSRU5DWV9fU1lNQk9MPUNVUlJFTkNZX19TWU1CT0w7XG4gICAgICAgIHZhciBtQ1VSUkVOQ1lfX0RFQ0lNQUxTPUNVUlJFTkNZX19ERUNJTUFMUztcbiAgICAgICAgLy9vdmVybG9hZCBldmVudHVhbGkgZGVsIHNpbWJvbG8gZSBkZWwgbnVtZXJvIGRpIGRlY2ltYWxpXG4gICAgICAgIGlmKCAkb2JqSUQuYXR0cihcImlmX3plcm9fZW1wdHlcIikhPXVuZGVmaW5lZCApXG4gICAgICAgICAgICBpZl96ZXJvX2VtcHR5PXRydWU7XG4gICAgICAgIGlmKCAkb2JqSUQuYXR0cihcInN5bWJvbFwiKSE9dW5kZWZpbmVkIClcbiAgICAgICAgICAgIG1DVVJSRU5DWV9fU1lNQk9MPSRvYmpJRC5hdHRyKFwic3ltYm9sXCIpO1xuICAgICAgICBpZiggJG9iaklELmF0dHIoXCJkZWNpbWFsc1wiKSE9dW5kZWZpbmVkIClcbiAgICAgICAgICAgIG1DVVJSRU5DWV9fREVDSU1BTFM9JG9iaklELmF0dHIoXCJkZWNpbWFsc1wiKTtcblxuICAgICAgICB2YXIgcz0kb2JqSUQudmFsKCk7XG5cbiAgICAgICAgcz1zLnJlcGxhY2UobUNVUlJFTkNZX19TWU1CT0wsJy4nKTtcbiAgICAgICAgLy9xdWFuZG8gY29tcGlsbyBpbCBjYW1wbyBRVUFMU0lBU0kgU0lBIExBIExJTkdVQSBDT01QSUxPIFVTQU5ETyBJTCAuIENPTUUgU0VQQVJBVE9SRSBERUNJTUFMRVxuICAgICAgICAvL3M9cy5yZXBsYWNlKENVUlJFTkNZX19USE9VU0FORFNfU0VQQVJBVE9SLCcnKTtcbiAgICAgICAgLy9zPXMucmVwbGFjZShDVVJSRU5DWV9fREVDSU1BTF9TRVBBUkFUT1IsJy4nKTtcbiAgICAgICAgdmFyIG49Z2V0RmxvYXQoIHMgKTtcbiAgICAgICAgJG9iaklEX2hpZGRlbi52YWwoIG4gKTsvL2FsZXJ0KCRvYmpJRF9oaWRkZW4udmFsKCkpO1xuICAgICAgICB2YXIgc2lnbj0objwwID8gXCItIFwiIDogXCJcIik7XG4gICAgICAgIHZhciBuMj1udW1iZXJfZm9ybWF0KE1hdGguYWJzKG4pLG1DVVJSRU5DWV9fREVDSU1BTFMsQ1VSUkVOQ1lfX0RFQ0lNQUxfU0VQQVJBVE9SLENVUlJFTkNZX19USE9VU0FORFNfU0VQQVJBVE9SKTtcblxuICAgICAgICBpZiggbj09MCAmJiBpZl96ZXJvX2VtcHR5IClcbiAgICAgICAgICAgICRvYmpJRC52YWwoXCJcIik7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgICRvYmpJRC52YWwoc2lnbisgbUNVUlJFTkNZX19TWU1CT0wrXCIgXCIrbjIgKTtcblxuICAgICAgICAkb2JqSURfaGlkZGVuLmNoYW5nZSgpO1xuICAgIH0sXG5cbiAgICBDdXJyZW5jeU9uRm9jdXM6IGZ1bmN0aW9uKG9iaklEKXtcbiAgICAgICAgdmFyIG9iaklEX2hpZGRlbj1vYmpJRCtcIl9oaWRkZW5cIjtcbiAgICAgICAgdmFyICRvYmpJRD0kKFwiI1wiK29iaklEKTtcbiAgICAgICAgdmFyIG1DVVJSRU5DWV9fREVDSU1BTFM9JG9iaklELmF0dHIoXCJkZWNpbWFsc1wiKTtcblxuICAgICAgICB2YXIgcz1nZXRGbG9hdCggJChcIiNcIitvYmpJRF9oaWRkZW4pLnZhbCgpICk7XG4gICAgICAgIHZhciBuPW5ldyBOdW1iZXIocyk7XG4gICAgICAgICRvYmpJRC52YWwoIG4udG9GaXhlZChtQ1VSUkVOQ1lfX0RFQ0lNQUxTKSApO1xuICAgICAgICAkb2JqSUQuc2VsZWN0KCk7XG4gICAgICAgICRvYmpJRC5vbmUoJ21vdXNldXAnLCBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIH0pO1xuICAgIH0sXG5cbiAgICBzaG93Q29sdW1uOiBmdW5jdGlvbih0YWJsZSxpbmRleCx2aXNpYmxlKXtcbiAgICAgICAgaWYodmlzaWJsZT09bnVsbCkgdmlzaWJsZT10cnVlO1xuXG4gICAgICAgIHZhciB0PSQoXCIjXCIrdGFibGUpLmRhdGFUYWJsZSgpLmFwaSgpO1xuICAgICAgICB2YXIgYz10LmNvbHVtbihpbmRleCk7XG4gICAgICAgIGMudmlzaWJsZSggdmlzaWJsZSApO1xuXG4gICAgfSxcblxuICAgIGhpZGVDb2x1bW46IGZ1bmN0aW9uKHRhYmxlLGluZGV4KXtcbiAgICAgICAgc2hvd0NvbHVtbih0YWJsZSxpbmRleCxmYWxzZSk7XG4gICAgfSxcblxuICAgIGdldENvZGljaUlWQTogZnVuY3Rpb24oYXR0aXZpdGFwYXNzaXZpdGEsZGF0YV9saW1pdGUpe1xuICAgICAgICB2YXIgdXJsPVwiYWpheC5waHA/b2JqZWN0PUNvZGljZUlWQSZ0aXBvdmlldz1nZXRDb2RpY2kmYXR0aXZpdGFwYXNzaXZpdGE9XCIrYXR0aXZpdGFwYXNzaXZpdGErXCImZGF0YV9saW1pdGU9XCIrZGF0YV9saW1pdGU7XG4gICAgICAgIHZhciBvcHRpb25zPVtdO1xuICAgICAgICAkLmFqYXgoe1xuICAgICAgICAgICAgdXJsOiB1cmwsXG4gICAgICAgICAgICBkYXRhVHlwZTogXCJ4bWxcIixcbiAgICAgICAgICAgIGFzeW5jIDogZmFsc2UsXG4gICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbih4bWwpe1xuICAgICAgICAgICAgICAgIHZhciBjb2RpY2lfY291bnQ9JCh4bWwpLmZpbmQoXCJjb2RpY2lfY291bnRcIikudGV4dCgpO1xuICAgICAgICAgICAgICAgIHZhciBpO1xuICAgICAgICAgICAgICAgIGZvcihpPTA7aTxjb2RpY2lfY291bnQ7aSsrKXtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGlkPSQoeG1sKS5maW5kKFwiaWRcIitpKS50ZXh0KCk7XG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbnNbaWRdPSQoeG1sKS5maW5kKFwiZGVzY3JpemlvbmVcIitpKS50ZXh0KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIG9wdGlvbnM7XG4gICAgfSxcblxuICAgIHNjb3Jwb3JhSXZhOiBmdW5jdGlvbihpbXBvcnRvLCBpZGl2YSkge1xuICAgICAgICB2YXIgYWxpcXVvdGEgPSBpdmFHZXQoaWRpdmEsIFwiYWxpcXVvdGFcIik7XG4gICAgICAgIHJldHVybiBnZXRGbG9hdDIoaW1wb3J0by8oMSthbGlxdW90YS8xMDApKTtcbiAgICB9LFxuXG4gICAgSVdBdXRvY29tcGxldGU6IGZ1bmN0aW9uKGlkLElXT2JqZWN0LGZpbHRlcnMsZGluYW1pY19zZWFyY2gsaWRkaWFsb2csZXhjZWxQcm9jZXNzLGNzc0NsYXNzLGNhbGxiYWNrKXtcbiAgICAgICAgaWYoaWRkaWFsb2cgPT0gbnVsbCkgaWRkaWFsb2cgPSBcIlwiO1xuICAgICAgICBpZihmaWx0ZXJzID09IG51bGwpIGZpbHRlcnMgPSB7fTtcbiAgICAgICAgaWYoY3NzQ2xhc3MgPT0gbnVsbCkgY3NzQ2xhc3MgPSBcIlwiO1xuXG4gICAgICAgIHZhciAkaWRBdXRvY29tcGxldGUgPSAkKFwiI1wiK2lkKTtcbiAgICAgICAgaWYoY3NzQ2xhc3MpICRpZEF1dG9jb21wbGV0ZSA9ICQoXCIuXCIrY3NzQ2xhc3MpO1xuXG4gICAgICAgIGZpbHRlcnMuY3NzQ2xhc3NlcyA9ICRpZEF1dG9jb21wbGV0ZS5hdHRyKFwiY2xhc3NcIik7XG5cbiAgICAgICAgJGlkQXV0b2NvbXBsZXRlLmF1dG9jb21wbGV0ZSh7XG4gICAgICAgICAgICBzb3VyY2U6IGZ1bmN0aW9uKCByZXF1ZXN0LCByZXNwb25zZSApIHtcbiAgICAgICAgICAgICAgICBhamF4U291cmNlSVdBdXRvY29tcGxldGUoZmlsdGVycywgSVdPYmplY3QsIHJlcXVlc3QsIHJlc3BvbnNlLCBleGNlbFByb2Nlc3MsIGRpbmFtaWNfc2VhcmNoKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBtaW5MZW5ndGg6IDIsXG4gICAgICAgICAgICBhdXRvRm9jdXM6IHRydWUsXG4gICAgICAgICAgICBzZWxlY3Q6IGZ1bmN0aW9uKCBldmVudCwgdWkgKSB7XG4gICAgICAgICAgICAgICAgaWYoY3NzQ2xhc3MpIGlkID0gZXZlbnQudGFyZ2V0LmlkO1xuICAgICAgICAgICAgICAgIHZhciAkaWQ9JChcIiNcIitpZCtcIl9oaWRkZW5cIik7XG4gICAgICAgICAgICAgICAgJGlkLnZhbCh1aS5pdGVtLmlkKTtcbiAgICAgICAgICAgICAgICAkaWQuY2hhbmdlKCk7XG4gICAgICAgICAgICAgICAgaWYoSVdPYmplY3Quc3RhcnRzV2l0aChcIklXQXV0b2NvbXBsZXRlQXJ0aWNvbG9cIikpe1xuXG4gICAgICAgICAgICAgICAgICAgIGNoZWNrQXJ0aWNvbG9EZWxGb3JuaXRvcmUodWkuaXRlbS5pZCwgaWQpO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmKHVpLml0ZW0uZGFfY29uZmVybWFyZSl7XG4gICAgICAgICAgICAgICAgICAgICAgICBzaG93RGlhbG9nQXJ0aWNvbG9EYUNvbmZlcm1hcmUodWkuaXRlbS5pZCxpZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYodHlwZW9mIGNhbGxiYWNrID09PSBcImZ1bmN0aW9uXCIpIGNhbGxiYWNrKHVpLml0ZW0pO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGFwcGVuZFRvOiBpZGRpYWxvZyA/IFwiI1wiK2lkZGlhbG9nIDogXCJcIlxuICAgICAgICB9KTtcbiAgICB9LFxuXG4gICAgY2hlY2tBcnRpY29sb0RlbEZvcm5pdG9yZTogZnVuY3Rpb24oaWRhcnRpY29sbywgaWRfZmllbGQpe1xuICAgICAgICB2YXIgJGNvZGljZWRvY3VtZW50byA9ICQoXCIjY29kaWNlZG9jdW1lbnRvXCIpO1xuICAgICAgICBpZighJGNvZGljZWRvY3VtZW50by52YWwoKSkgcmV0dXJuO1xuXG4gICAgICAgIGlmKCQoXCIjaXNfcGFzc2l2aXRhXCIpLnZhbEZsb2F0KCkgPT09IDApIHJldHVybjtcbiAgICAgICAgaWYoZ2V0RmxvYXQoJGNvZGljZWRvY3VtZW50by5kYXRhKFwidGlwb19yZWN1cGVyb19wcmV6emlfcGFzc2l2aXRhXCIpKSAhPT0gMiAmJiBnZXRGbG9hdCgkY29kaWNlZG9jdW1lbnRvLmRhdGEoXCJ0aXBvX3JlY3VwZXJvX3ByZXp6aV9wYXNzaXZpdGFcIikpICE9PSA0KSByZXR1cm47XG5cbiAgICAgICAgdmFyIGlkZm9ybml0b3JlID0gJChcIiNhbmFncmFmaWNhX2hpZGRlblwiKS52YWxGbG9hdCgpO1xuICAgICAgICBpZihpZGZvcm5pdG9yZSA9PT0gMCkgcmV0dXJuO1xuXG4gICAgICAgIHZhciBvYmplY3QgPSAkKFwiI2NsYXNzX2FydGljb2xvXCIpLnZhbCgpO1xuICAgICAgICAkLmFqYXgoe1xuICAgICAgICAgICAgdXJsOiBcImFqYXgucGhwP0pTT05cIixcbiAgICAgICAgICAgIGRhdGE6IHsgb2JqZWN0OiBvYmplY3QsIGlkOiBpZGFydGljb2xvLCBpZGZvcm5pdG9yZTogaWRmb3JuaXRvcmUsIHRpcG92aWV3OiBcImNoZWNrSWZBcnRpY29sb0RlbEZvcm5pdG9yZVwiLCBjb2RpY2VfZG9jdW1lbnRvOiAkY29kaWNlZG9jdW1lbnRvLnZhbCgpIH0sXG4gICAgICAgICAgICB0eXBlOiBcInBvc3RcIixcbiAgICAgICAgICAgIGRhdGFUeXBlOiBcImpzb25cIixcbiAgICAgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uIChqc29uKXtcbiAgICAgICAgICAgICAgICBpZihqc29uLnJldCkgcmV0dXJuO1xuXG4gICAgICAgICAgICAgICAgSVdDb25maXJtVHJ1ZUZhbHNlKCRjb2RpY2Vkb2N1bWVudG8uZGF0YShcImFydGljb2xvX25vbl9wcmVzZW50ZV9pbl9mb3JuaXRvcmVcIiksIGZ1bmN0aW9uKHJldCl7XG4gICAgICAgICAgICAgICAgICAgIGlmKHJldCkgcmV0dXJuO1xuXG4gICAgICAgICAgICAgICAgICAgICQoXCIjXCIgKyBpZF9maWVsZCArIFwiX2hpZGRlblwiKS52YWwoMCk7XG4gICAgICAgICAgICAgICAgICAgICQoXCIjXCIgKyBpZF9maWVsZCkudmFsKFwiXCIpO1xuICAgICAgICAgICAgICAgICAgICAkKFwiI1wiICsgaWRfZmllbGQpLmNoYW5nZSgpO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgfSxcblxuICAgIHNob3dEaWFsb2dBcnRpY29sb0RhQ29uZmVybWFyZTogZnVuY3Rpb24gKGlkYXJ0aWNvbG8saWRfZmllbGQpIHtcbiAgICAgICAgbGV0IG9iamVjdCA9ICQoXCIjY2xhc3NfYXJ0aWNvbG9cIikudmFsKCk7XG4gICAgICAgIGdldEh0bWxGcm9tQWpheCh7XG4gICAgICAgICAgICB1cmw6IFwiYWpheC5waHA/SlNPTlwiLFxuICAgICAgICAgICAgZGF0YToge29iamVjdDogb2JqZWN0LCBpZF9kYWNvbmZlcm1hcmU6IGlkYXJ0aWNvbG8sIHRpcG92aWV3OiBcImdldERpYWxvZ0FydGljb2xvRGFDb25mZXJtYXJlXCJ9LFxuICAgICAgICAgICAgZGl2bmFtZTogXCJkaWFsb2dfYXJ0aWNvbGlfZGFfY29uZmVybWFyZVwiLFxuICAgICAgICAgICAgb25TdWNjZXNzOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgZGlhbG9nU2hvdyhcImRpYWxvZ19hcnRpY29saV9kYV9jb25mZXJtYXJlXCIsIGZ1bmN0aW9uIChyZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0ICRoaWRkZW4gPSAkKFwiI1wiICsgaWRfZmllbGQgKyBcIl9oaWRkZW5cIik7XG4gICAgICAgICAgICAgICAgICAgIGlmICghcmVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvL3NlIG5vbiBjb25mZXJtbyBlbGltaW5vIGFydGljb2xvXG4gICAgICAgICAgICAgICAgICAgICAgICAkaGlkZGVuLnZhbCgwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICQoXCIjXCIgKyBpZF9maWVsZCkudmFsKFwiXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICQuYWpheCh7XG4gICAgICAgICAgICAgICAgICAgICAgICB1cmw6IFwidmlldy5waHBcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFUeXBlOiBcImpzb25cIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwicG9zdFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YTogXCJKU09OPTEmT1BfRlJPTV9BSkFYPTEmdGlwb3ZpZXc9Y29uZmVybWFBcnRpY29sbyZvYmplY3Q9XCIgKyBvYmplY3QgKyBcIiZcIiArICQoXCIjZGlhbG9nX2FydGljb2xpX2RhX2NvbmZlcm1hcmUgOmlucHV0LDpjaGVja2JveFwiKS5zZXJpYWxpemUoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uIChqc29uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWpheFN1Ym1pdE9uU3VjY2Vzc0Z1bmN0aW9uKGpzb24sIHRydWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChqc29uLnJldCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaGlkZGVuLnZhbChqc29uLmlkYXJ0aWNvbG8pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaGlkZGVuLmNoYW5nZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRoaWRkZW4udmFsKDApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKFwiI1wiICsgaWRfZmllbGQpLnZhbChcIlwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICB9LFxuXG4gICAgYWpheFNvdXJjZUlXQXV0b2NvbXBsZXRlOiBmdW5jdGlvbihmaWx0ZXJzLCBJV09iamVjdCwgcmVxdWVzdCwgcmVzcG9uc2UsIGV4Y2VsUHJvY2VzcywgZGluYW1pY19zZWFyY2gpe1xuICAgICAgICB2YXIgdGVybTtcbiAgICAgICAgaWYgKGV4Y2VsUHJvY2VzcyA9PSBudWxsKSB0ZXJtID0gcmVxdWVzdC50ZXJtO1xuICAgICAgICBlbHNlIHRlcm0gPSByZXF1ZXN0O1xuXG4gICAgICAgICQuZWFjaChmaWx0ZXJzLCBmdW5jdGlvbiAoaywgdikge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiB2ID09PSBcInN0cmluZ1wiICYmIHYuc3RhcnRzV2l0aChcIiQoJyNcIikpXG4gICAgICAgICAgICAgICAgZmlsdGVyc1trXSA9IGV2YWwodik7XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgZmlsdGVyc1trXSA9IHY7XG4gICAgICAgIH0pO1xuICAgICAgICBmaWx0ZXJzLmxldHRlcnMgPSB0ZXJtO1xuXG4gICAgICAgICQuZWFjaChkaW5hbWljX3NlYXJjaCwgZnVuY3Rpb24oa2V5LCB2YWx1ZSkge1xuICAgICAgICAgICAgaWYgKHZhbHVlLnN0YXJ0c1dpdGgoXCIkKCcjXCIpKSBmaWx0ZXJzW2tleV0gPSB2YWx1ZSArICcudmFsKCknO1xuICAgICAgICAgICAgZWxzZSBmaWx0ZXJzW2tleV0gPSAkKFwiI1wiICsgdmFsdWUpLnZhbCgpO1xuICAgICAgICB9KTtcblxuICAgICAgICAkLmFqYXgoe1xuICAgICAgICAgICAgdXJsOiAnYWpheC5waHA/SlNPTiZvYmplY3Q9JytJV09iamVjdCtcIiZ0aXBvdmlldz1nZXRBdXRvY29tcGxldGVcIixcbiAgICAgICAgICAgIGRhdGFUeXBlOiBcImpzb25cIixcbiAgICAgICAgICAgIHR5cGU6ICdQT1NUJyxcbiAgICAgICAgICAgIGRhdGE6IGZpbHRlcnMsXG4gICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbiggZGF0YSApIHtcbiAgICAgICAgICAgICAgICBpZihleGNlbFByb2Nlc3MgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICByZXNwb25zZSggJC5tYXAoIGRhdGEub2JqZWN0cywgZnVuY3Rpb24oIGl0ZW0gKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaXRlbTsvKntcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiBpdGVtLmxhYmVsLCAvL3Zpc3VhbGl6emEgbGEgZm9ybWF0dGF6aW9uZSBkaSBvZ25pIHJpc3VsdGF0bywgZXMuIFtjb2RpY2VdIGRlc2NyaXppb25lIFtjb2RmaXNjYWxlXSBbcGl2YV1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogaXRlbS52YWx1ZSwgLy9kb3BvIGxhIHNlbGV6aW9uZSBkZWwgcmlzdWx0YXRvIGNvbXBpbGEgaWwgY2FtcG8sIGFkIGVzLiBzb2xvIGRlc2NyaXppb25lIG9wcHVyZSBbY29kaWNlXSBkZXNjcml6aW9uZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBpdGVtLmlkLCAvL2wnaWQgZGEgc2FsdmFyZSBuZWwgY2FtcG8gaGlkZGVuIGNoZSByaWNvbm9zY2UgaWwgdmFsb3JlIG5lbCBkYXRhYmFzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9yYXc6IGl0ZW1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0qL1xuICAgICAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2V7XG4gICAgICAgICAgICAgICAgICAgIGV4Y2VsUHJvY2VzcygkLm1hcCggZGF0YS5vYmplY3RzLCBmdW5jdGlvbiggaXRlbSApIHsgcmV0dXJuIGl0ZW0ubGFiZWwgfSkpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9LFxuXG4gICAgc2V0S2V5d29yZHNPbkNLRWRpdG9yOiBmdW5jdGlvbihlLGVkaXRvcil7XG4gICAgICAgIGlmKGVkaXRvcj09bnVsbCkgcmV0dXJuIGZhbHNlO1xuXG4gICAgICAgIHZhciBja2VkaXRvcj1DS0VESVRPUi5pbnN0YW5jZXNbZWRpdG9yXTtcbiAgICAgICAgY2tlZGl0b3IuaW5zZXJ0VGV4dCgkKGUudGFyZ2V0KS52YWwoKS50cmltKCkpO1xuICAgICAgICAkKGUudGFyZ2V0KS52YWwoJy0xJyk7XG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSxcblxuICAgIElXQ29uZmlybTogZnVuY3Rpb24odGV4dCxyKXtcbiAgICAgICAgJChcIiNJV0NvbmZpcm1cIikuaHRtbCh0ZXh0KTtcbiAgICAgICAgZGlhbG9nU2hvdyhcIklXQ29uZmlybVwiLGZ1bmN0aW9uKHJlcyl7aWYocmVzKSByKHJlcyk7fSk7XG4gICAgfSxcbiAgICBJV0NvbmZpcm0yOiBmdW5jdGlvbih0ZXh0LHIpe1xuICAgICAgICAkKFwiI0lXQ29uZmlybTJcIikuaHRtbCh0ZXh0KTtcbiAgICAgICAgZGlhbG9nU2hvdyhcIklXQ29uZmlybTJcIixmdW5jdGlvbihyZXMpe2lmKHJlcykgcihyZXMpO30pO1xuICAgIH0sXG4gICAgSVdDb25maXJtMzogZnVuY3Rpb24odGV4dCxyKXtcbiAgICAgICAgJChcIiNJV0NvbmZpcm0zXCIpLmh0bWwodGV4dCk7XG4gICAgICAgIGRpYWxvZ1Nob3coXCJJV0NvbmZpcm0zXCIsZnVuY3Rpb24ocmVzKXtpZihyZXMpIHIocmVzKTt9KTtcbiAgICB9LFxuXG4gICAgSVdDb25maXJtVHJ1ZUZhbHNlOiBmdW5jdGlvbih0ZXh0LHIpe1xuICAgICAgICAkKFwiI0lXQ29uZmlybVwiKS5odG1sKHRleHQpO1xuICAgICAgICBkaWFsb2dTaG93KFwiSVdDb25maXJtXCIsZnVuY3Rpb24ocmVzKXsgcihyZXMpOyB9KTtcbiAgICB9LFxuXG4gICAgcmVsb2FkVGFibGU6IGZ1bmN0aW9uKHRhYmxlX2lkLHJlc2V0cGFnaW5nLGNhbGxiYWNrKXtcbiAgICAgICAgdmFyICR0YWJsZT0kKCcjJyt0YWJsZV9pZCk7XG4gICAgICAgIGlmKHR5cGVvZiByZXNldHBhZ2luZyA9PT0gXCJ1bmRlZmluZWRcIikgcmVzZXRwYWdpbmcgPSB0cnVlO1xuXG4gICAgICAgIHZhciBteUNhbGxiYWNrID0gbnVsbDtcbiAgICAgICAgaWYodHlwZW9mIGNhbGxiYWNrID09PSBcImZ1bmN0aW9uXCIpIG15Q2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgfSwzMDApO1xuICAgICAgICB9O1xuICAgICAgICAkdGFibGUuRGF0YVRhYmxlKCkuYWpheC5yZWxvYWQobXlDYWxsYmFjayxyZXNldHBhZ2luZyk7XG4gICAgICAgICQoXCIudWktdG9vbHRpcFwiKS5oaWRlKCk7XG4gICAgfSxcblxuICAgIGFqYXhTdWJtaXRPblN1Y2Nlc3NGdW5jdGlvbjogZnVuY3Rpb24ocmVzLCBpc19qc29uLCBoaWRlX29rbWVzc2FnZSl7XG4gICAgICAgIGlmKHR5cGVvZiBpc19qc29uID09PSBcInVuZGVmaW5lZFwiKSBpc19qc29uID0gZmFsc2U7XG4gICAgICAgIGlmKHR5cGVvZiBoaWRlX29rbWVzc2FnZSA9PT0gXCJ1bmRlZmluZWRcIikgaGlkZV9va21lc3NhZ2UgPSBmYWxzZTtcbiAgICAgICAgdmFyIHJldCwgZGVidWcsIHNkZWJ1ZywgbXNnO1xuICAgICAgICBpZihpc19qc29uKXtcbiAgICAgICAgICAgIHJldCA9IHJlcy5yZXQ7XG4gICAgICAgICAgICBkZWJ1ZyA9IHJlcy5kZWJ1ZztcbiAgICAgICAgICAgIHNkZWJ1ZyA9IHJlcy5zZGVidWc7XG4gICAgICAgICAgICBtc2cgPSByZXMubXNnO1xuICAgICAgICB9XG4gICAgICAgIGVsc2V7XG4gICAgICAgICAgICByZXQgPSAkKHJlcykuZmluZChcInJldFwiKS50ZXh0KCk7XG4gICAgICAgICAgICBkZWJ1ZyA9ICQocmVzKS5maW5kKFwiZGVidWdcIikudGV4dCgpO1xuICAgICAgICAgICAgc2RlYnVnID0gJChyZXMpLmZpbmQoXCJzZGVidWdcIikudGV4dCgpO1xuICAgICAgICAgICAgbXNnID0gJChyZXMpLmZpbmQoXCJtc2dcIikudGV4dCgpO1xuICAgICAgICB9XG4gICAgICAgIGlmKHJldCl7XG4gICAgICAgICAgICBpZighaGlkZV9va21lc3NhZ2UpIGZvb3Rlck1zZygwLCQoXCIjdHJhbnNhY3Rpb25fc3VjY2Vzc1wiKS52YWwoKSxtc2cpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2V7XG4gICAgICAgICAgICBpZighaGlkZV9va21lc3NhZ2UpIGZvb3Rlck1zZygxLCQoXCIjdHJhbnNhY3Rpb25fZXJyb3JcIikudmFsKCksbXNnKTtcbiAgICAgICAgfVxuXG5cbiAgICAgICAgaWYoZGVidWcpICQoXCIjYm94RGVidWdcIikuaHRtbChzZGVidWcpO1xuICAgIH0sXG5cbiAgICBzZXREYXRlRnJvbVBlcmlvZG9GaXNjYWxlOiBmdW5jdGlvbihpZF9wZXJpb2RvZmlzY2FsZSxpZF9kYXRhX2RhLGlkX2RhdGFfYSxpc19wZXJpb2RvZ2VzdGlvbmFsZSl7XG4gICAgICAgIHZhciAkcGVyaW9kb2Zpc2NhbGU9JChcIiNcIitpZF9wZXJpb2RvZmlzY2FsZSk7XG4gICAgICAgIHZhciBhcnI9RGF0ZV9fZ2V0SW50ZXJ2YWxsb0Zyb21QZXJpb2RvRmlzY2FsZSgkcGVyaW9kb2Zpc2NhbGUudmFsKCksaXNfcGVyaW9kb2dlc3Rpb25hbGUpO1xuICAgICAgICBpZiggYXJyID09PSBudWxsKSByZXR1cm4gZmFsc2U7XG5cbiAgICAgICAgJChcIiNcIitpZF9kYXRhX2RhKS52YWwoIERhdGVfX2l0KGFyclswXSkgKTtcbiAgICAgICAgJChcIiNcIitpZF9kYXRhX2EpLnZhbCggIERhdGVfX2l0KGFyclsxXSkgKTtcblxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9LFxuXG4gICAgY2hhbmdlRGF0ZVRyaW1lc3RyZTogZnVuY3Rpb24odHJpbWVzdHJlX2lkLCBhbm5vX2lkLCBkYXRhX2RhX2lkLCBkYXRhX2FfaWQpe1xuICAgICAgICBpZih0eXBlb2YgdHJpbWVzdHJlX2lkID09PSBcInVuZGVmaW5lZFwiKSB0cmltZXN0cmVfaWQgPSBcInRyaW1lc3RyZVwiO1xuICAgICAgICBpZih0eXBlb2YgYW5ub19pZCA9PT0gXCJ1bmRlZmluZWRcIikgYW5ub19pZCA9IFwiYW5ub1wiO1xuICAgICAgICBpZih0eXBlb2YgZGF0YV9kYV9pZCA9PT0gXCJ1bmRlZmluZWRcIikgZGF0YV9kYV9pZCA9IFwiZGF0YV9kYVwiO1xuICAgICAgICBpZih0eXBlb2YgZGF0YV9hX2lkID09PSBcInVuZGVmaW5lZFwiKSBkYXRhX2FfaWQgPSBcImRhdGFfYVwiO1xuXG4gICAgICAgIHZhciB0cmltZXN0cmU9JCgnIycrdHJpbWVzdHJlX2lkKS52YWxGbG9hdCgpO1xuICAgICAgICB2YXIgYW5ubz0kKCcjJythbm5vX2lkKS52YWwoKTtcblxuICAgICAgICBpZih0cmltZXN0cmUgPT09IDEpe1xuICAgICAgICAgICAgJCgnIycrZGF0YV9kYV9pZCkudmFsKERhdGVfX2l0KGFubm8rJy8wMS8wMScpKTtcbiAgICAgICAgICAgICQoJyMnK2RhdGFfYV9pZCkudmFsKERhdGVfX2l0KGFubm8rJy8wMy8zMScpKTtcbiAgICAgICAgfVxuICAgICAgICBpZih0cmltZXN0cmUgPT09IDIpe1xuICAgICAgICAgICAgJCgnIycrZGF0YV9kYV9pZCkudmFsKERhdGVfX2l0KGFubm8rJy8wNC8wMScpKTtcbiAgICAgICAgICAgICQoJyMnK2RhdGFfYV9pZCkudmFsKERhdGVfX2l0KGFubm8rJy8wNi8zMCcpKTtcbiAgICAgICAgfVxuICAgICAgICBpZih0cmltZXN0cmUgPT09IDMpe1xuICAgICAgICAgICAgJCgnIycrZGF0YV9kYV9pZCkudmFsKERhdGVfX2l0KGFubm8rJy8wNy8wMScpKTtcbiAgICAgICAgICAgICQoJyMnK2RhdGFfYV9pZCkudmFsKERhdGVfX2l0KGFubm8rJy8wOS8zMCcpKTtcbiAgICAgICAgfVxuICAgICAgICBpZih0cmltZXN0cmUgPT09IDQpe1xuICAgICAgICAgICAgJCgnIycrZGF0YV9kYV9pZCkudmFsKERhdGVfX2l0KGFubm8rJy8xMC8wMScpKTtcbiAgICAgICAgICAgICQoJyMnK2RhdGFfYV9pZCkudmFsKERhdGVfX2l0KGFubm8rJy8xMi8zMScpKTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICBjaGFuZ2VEYXRlQmltZXN0cmU6IGZ1bmN0aW9uKGJpbWVzdHJlX2lkLCBhbm5vX2lkLCBkYXRhX2RhX2lkLCBkYXRhX2FfaWQpe1xuICAgICAgICBpZih0eXBlb2YgYmltZXN0cmVfaWQgPT09IFwidW5kZWZpbmVkXCIpIGJpbWVzdHJlX2lkID0gXCJiaW1lc3RyZVwiO1xuICAgICAgICBpZih0eXBlb2YgYW5ub19pZCA9PT0gXCJ1bmRlZmluZWRcIikgYW5ub19pZCA9IFwiYW5ub1wiO1xuICAgICAgICBpZih0eXBlb2YgZGF0YV9kYV9pZCA9PT0gXCJ1bmRlZmluZWRcIikgZGF0YV9kYV9pZCA9IFwiZGF0YV9kYVwiO1xuICAgICAgICBpZih0eXBlb2YgZGF0YV9hX2lkID09PSBcInVuZGVmaW5lZFwiKSBkYXRhX2FfaWQgPSBcImRhdGFfYVwiO1xuXG4gICAgICAgIHZhciBiaW1lc3RyZT0kKCcjJytiaW1lc3RyZV9pZCkudmFsRmxvYXQoKTtcbiAgICAgICAgdmFyIGFubm89JCgnIycrYW5ub19pZCkudmFsKCk7XG5cbiAgICAgICAgdmFyIGQ7XG4gICAgICAgIGlmKGJpbWVzdHJlID09PSAxKXtcbiAgICAgICAgICAgICQoJyMnK2RhdGFfZGFfaWQpLnZhbChEYXRlX19pdChhbm5vKycvMDEvMDEnKSk7XG4gICAgICAgICAgICBkID0gbmV3IERhdGUoYW5ubywyLDApO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYoYmltZXN0cmUgPT09IDIpe1xuICAgICAgICAgICAgJCgnIycrZGF0YV9kYV9pZCkudmFsKERhdGVfX2l0KGFubm8rJy8wMy8wMScpKTtcbiAgICAgICAgICAgIGQgPSBuZXcgRGF0ZShhbm5vLDQsMCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZihiaW1lc3RyZSA9PT0gMyl7XG4gICAgICAgICAgICAkKCcjJytkYXRhX2RhX2lkKS52YWwoRGF0ZV9faXQoYW5ubysnLzA1LzAxJykpO1xuICAgICAgICAgICAgZCA9IG5ldyBEYXRlKGFubm8sNiwwKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmKGJpbWVzdHJlID09PSA0KXtcbiAgICAgICAgICAgICQoJyMnK2RhdGFfZGFfaWQpLnZhbChEYXRlX19pdChhbm5vKycvMDcvMDEnKSk7XG4gICAgICAgICAgICBkID0gbmV3IERhdGUoYW5ubyw4LDApO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYoYmltZXN0cmUgPT09IDUpe1xuICAgICAgICAgICAgJCgnIycrZGF0YV9kYV9pZCkudmFsKERhdGVfX2l0KGFubm8rJy8wOS8wMScpKTtcbiAgICAgICAgICAgIGQgPSBuZXcgRGF0ZShhbm5vLDEwLDApO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgJCgnIycrZGF0YV9kYV9pZCkudmFsKERhdGVfX2l0KGFubm8rJy8xMC8wMScpKTtcbiAgICAgICAgICAgIGQgPSBuZXcgRGF0ZShhbm5vLDEyLDApO1xuICAgICAgICB9XG4gICAgICAgICQoJyMnK2RhdGFfYV9pZCkudmFsKERhdGVfX2l0KGQuZ2V0RnVsbFllYXIoKStcIi9cIitzdHJfcGFkKChkLmdldE1vbnRoKCkgKyAxKSwyLDAsXCJTVFJfUEFEX0xFRlRcIikrXCIvXCIgKyBzdHJfcGFkKGQuZ2V0RGF0ZSgpLDIsMCxcIlNUUl9QQURfTEVGVFwiKSkpO1xuICAgIH0sXG5cbiAgICBjaGFuZ2VEYXRlTWVzZTogZnVuY3Rpb24obWVzZV9pZCwgYW5ub19pZCwgZGF0YV9kYV9pZCwgZGF0YV9hX2lkKXtcbiAgICAgICAgaWYodHlwZW9mIG1lc2VfaWQgPT09IFwidW5kZWZpbmVkXCIpIG1lc2VfaWQgPSBcIm5tZXNlXCI7XG4gICAgICAgIGlmKHR5cGVvZiBhbm5vX2lkID09PSBcInVuZGVmaW5lZFwiKSBhbm5vX2lkID0gXCJhbm5vXCI7XG4gICAgICAgIGlmKHR5cGVvZiBkYXRhX2RhX2lkID09PSBcInVuZGVmaW5lZFwiKSBkYXRhX2RhX2lkID0gXCJkYXRhX2RhXCI7XG4gICAgICAgIGlmKHR5cGVvZiBkYXRhX2FfaWQgPT09IFwidW5kZWZpbmVkXCIpIGRhdGFfYV9pZCA9IFwiZGF0YV9hXCI7XG5cbiAgICAgICAgdmFyIG5tZXNlPSQoJyMnICsgbWVzZV9pZCkudmFsKCk7XG4gICAgICAgIHZhciBhbm5vPSQoJyMnICsgYW5ub19pZCkudmFsRmxvYXQoKTtcbiAgICAgICAgdmFyIGQ9bmV3IERhdGUoYW5ubyxubWVzZSwwKTtcbiAgICAgICAgdmFyIGxhc3RfZGF5PWQuZ2V0RGF0ZSgpO1xuICAgICAgICAkKCcjJyArIGRhdGFfZGFfaWQpLnZhbCgnMDEvJytubWVzZSsnLycrYW5ubyk7XG4gICAgICAgICQoJyMnICsgZGF0YV9hX2lkKS52YWwobGFzdF9kYXkrJy8nK25tZXNlKycvJythbm5vKTtcbiAgICB9LFxuXG4gICAgLy9kYSBtb2RpZmljYXJlIHF1YW5kbyBzaXN0ZW1vIHJlZ2lzdHJvXG4gICAgc2F2ZUZpcm1hRG9jdW1lbnRvOiBmdW5jdGlvbihmb3JtX25hbWUpXG4gICAge1xuICAgICAgICB2YXIgdXJsPVwiYWpheC5waHA/b2JqZWN0PUFuYWdyYWZpY2FPbG1hJnRpcG92aWV3PXNhdmVGaXJtYVwiO1xuICAgICAgICAkLmFqYXgoe1xuICAgICAgICAgICAgdHlwZTogXCJQT1NUXCIsXG4gICAgICAgICAgICB1cmw6IHVybCxcbiAgICAgICAgICAgIGRhdGE6ICQoXCIjXCIrZm9ybV9uYW1lKS5zZXJpYWxpemUoKSwgLy8gc2VyaWFsaXplcyB0aGUgZm9ybSdzIGVsZW1lbnRzLlxuICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24oeG1sKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGFsZXJ0KFwiZG9jXCIpOyAvLyBzaG93IHJlc3BvbnNlIGZyb20gdGhlIHBocCBzY3JpcHQuXG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0sXG5cbiAgICBnZXRJbmZvVGFibGU6IGZ1bmN0aW9uKGNsYXNzbmFtZSxpZCxvbnN1Y2Nlc3Mpe1xuICAgICAgICAkLmFqYXgoe1xuICAgICAgICAgICAgdHlwZTogXCJHRVRcIixcbiAgICAgICAgICAgIHVybDogXCJhamF4LnBocFwiLFxuICAgICAgICAgICAgZGF0YTogXCJvYmplY3Q9XCIrJChcIiNvYmplY3RcIikudmFsKCkrXCImdGlwb3ZpZXc9Z2V0SW5mb1RhYmxlJmlkPVwiK2lkK1wiJmNsYXNzbmFtZT1cIitjbGFzc25hbWUsXG4gICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbih4bWwpIHtcbiAgICAgICAgICAgICAgICBvbnN1Y2Nlc3MoeG1sKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSxcblxuICAgIHNldFJlYWRvbmx5OiBmdW5jdGlvbihlbGVtZW50aWQsZXhjbHVkZSl7XG5cbiAgICAgICAgaWYoZWxlbWVudGlkPT1udWxsKSBlbGVtZW50aWQ9XCJmb3JtMVwiO1xuICAgICAgICBpZihleGNsdWRlPT1udWxsKSBleGNsdWRlPVwiXCI7XG5cbiAgICAgICAgJChcIiNcIitlbGVtZW50aWQrXCIgaW5wdXQsdGV4dGFyZWFcIikubm90KCQoZXhjbHVkZSkpLnByb3AoJ3JlYWRvbmx5Jyx0cnVlKS5vZmYoKTtcbiAgICAgICAgJChcIiNcIitlbGVtZW50aWQrXCIgW3R5cGU9J2NoZWNrYm94J10sW3R5cGU9J3JhZGlvJ11cIikubm90KCQoZXhjbHVkZSkpLm9mZigpLmNsaWNrKGZ1bmN0aW9uKCl7cmV0dXJuIGZhbHNlfSk7XG4gICAgICAgICQoXCIjXCIrZWxlbWVudGlkK1wiIHNlbGVjdCBvcHRpb246bm90KDpzZWxlY3RlZClcIikubm90KCQoZXhjbHVkZSkpLnByb3AoJ2Rpc2FibGVkJywgdHJ1ZSk7XG5cbiAgICB9LFxuXG4gICAgc2V0Q29sdW1uOiBmdW5jdGlvbihjb2xuYW1lLGF6aW9uZSlcbiAgICB7XG4gICAgICAgICQoXCJ0ZFtjb2xuYW1lPSdcIitjb2xuYW1lK1wiJ11cIikuZWFjaChmdW5jdGlvbigpe1xuICAgICAgICAgICAgaWYoYXppb25lPT0nc2hvdycpXG4gICAgICAgICAgICAgICAgJCh0aGlzKS5zaG93KCk7XG4gICAgICAgICAgICBpZihhemlvbmU9PSdoaWRlJylcbiAgICAgICAgICAgICAgICAkKHRoaXMpLmhpZGUoKTtcblxuICAgICAgICB9KTtcbiAgICAgICAgJChcInRoW2NvbG5hbWU9J1wiK2NvbG5hbWUrXCInXVwiKS5lYWNoKGZ1bmN0aW9uKCl7XG4gICAgICAgICAgICBpZihhemlvbmU9PSdzaG93JylcbiAgICAgICAgICAgICAgICAkKHRoaXMpLnNob3coKTtcbiAgICAgICAgICAgIGlmKGF6aW9uZT09J2hpZGUnKVxuICAgICAgICAgICAgICAgICQodGhpcykuaGlkZSgpO1xuXG4gICAgICAgIH0pO1xuICAgIH0sXG5cbiAgICBmb3J6YVNjcmVlbndpZHRoVXRlbnRlOiBmdW5jdGlvbihpZHV0ZW50ZSl7XG4gICAgICAgIGxldCBzY3JlZW53aWR0aCA9ICQoXCIjc2NyZWVud2lkdGhcIikudmFsRmxvYXQoKTtcbiAgICAgICAgaWYoc2NyZWVud2lkdGggPT09IDApIHNjcmVlbndpZHRoID0gd2luZG93LmlubmVyV2lkdGg7XG4gICAgICAgICQuYWpheCh7XG4gICAgICAgICAgICB1cmw6IFwiYWpheC5waHA/SlNPTiZvYmplY3Q9SVdVc2VyJnRpcG92aWV3PWZvcnphU2NyZWVud2lkdGhVdGVudGUmaWQ9XCIgKyBpZHV0ZW50ZSArIFwiJnNjcmVlbndpZHRoPVwiICsgc2NyZWVud2lkdGgsXG4gICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgbG9jYXRpb24ucmVsb2FkKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfSlcbiAgICB9LFxuXG4gICAgbG9hZENvbWJvTG90dGk6IGZ1bmN0aW9uKG5vbWVjYW1wbyxzaG93X2NvbWJvLGdpYWNlbnplbmVnYXRpdmUsaWRtYWdhenppbm8scHJvcG9uaV9sb3R0b19waXVfdmVjY2hpbyxpc19hc2luY3Jvbm8sY2xhc3NBcnRpY29sbyxwYXJhbXMpXG4gICAge1xuICAgICAgICBpZihpc19hc2luY3Jvbm89PW51bGwpIGlzX2FzaW5jcm9ubz10cnVlO1xuICAgICAgICBpZihpZG1hZ2F6emlubz09bnVsbCkgaWRtYWdhenppbm89MDtcbiAgICAgICAgaWYoZ2lhY2VuemVuZWdhdGl2ZT09bnVsbCkgZ2lhY2VuemVuZWdhdGl2ZT1cIlwiO1xuICAgICAgICBpZihnaWFjZW56ZW5lZ2F0aXZlPT10cnVlKSBnaWFjZW56ZW5lZ2F0aXZlPVwiJmNvbkdpYWNlbnplTmVnYXRpdmVcIjtcbiAgICAgICAgaWYocHJvcG9uaV9sb3R0b19waXVfdmVjY2hpbz09bnVsbCkgcHJvcG9uaV9sb3R0b19waXVfdmVjY2hpbz1mYWxzZTtcbiAgICAgICAgaWYoY2xhc3NBcnRpY29sbz09bnVsbCkgY2xhc3NBcnRpY29sbz1cIkFydGljb2xvXCI7XG4gICAgICAgIHZhciAkY29tYm89JChcIiNcIitub21lY2FtcG8rXCJfY29tYm9cIik7XG4gICAgICAgIHZhciAkdGV4dD0kKFwiI1wiK25vbWVjYW1wbytcIl90ZXh0XCIpO1xuICAgICAgICB2YXIgaWRhcnRpY29sbz0kY29tYm8uYXR0cihcImlkYXJ0aWNvbG9cIik7XG4gICAgICAgIHZhciBkYXRhPSRjb21iby5hdHRyKFwiZGF0YVwiKTtcbiAgICAgICAgdmFyIG9yYXJpbz0kY29tYm8uYXR0cihcIm9yYXJpb1wiKTtcbiAgICAgICAgaWYob3JhcmlvPT1cIlwiKSBvcmFyaW8gPSAkKFwiI29yYXJpb19tb3ZtYWdhenppbmlcIikudmFsKCk7XG4gICAgICAgIGlmKG9yYXJpbz09XCJcIiB8fCB0eXBlb2Yob3JhcmlvKSA9PT0gXCJ1bmRlZmluZWRcIikgb3JhcmlvPSQoXCIjb3JhYXJyaXZvXCIpLnZhbCgpO1xuICAgICAgICBpZihvcmFyaW89PVwiXCIgfHwgdHlwZW9mKG9yYXJpbykgPT09IFwidW5kZWZpbmVkXCIpIG9yYXJpbz1EYXRlX19PcmFOb3coKTtcblxuICAgICAgICAvL1NlIGNsaWNjbyBkYWwgYm90dG9uZSwgZSBzdG8gdmlzdWFsaXp6YW5kbyBsYSBjb21ibywgbW9zdHJvIGlsIGNhbXBvIHRleHQgY29sIHZhbG9yZSBzZWxlemlvbmF0byBuZWxsYSBjb21ib1xuICAgICAgICAvL1NlIGludmVjZSBwYXNzbyBkYWxsJ29uY2hhbmdlIGFydGljb2xvIG8gY2xpY2NvIHN1bCBib3R0b25lIG1lbnRyZSB2aXN1YWxpenpvIGlsIGNhbXBvIHRleHRcbiAgICAgICAgaWYoc2hvd19jb21ibz09dHJ1ZSB8fCAhJGNvbWJvLmlzKFwiOnZpc2libGVcIikpXG4gICAgICAgIHtcbiAgICAgICAgICAgICR0ZXh0LmhpZGUoKTtcbiAgICAgICAgICAgICR0ZXh0LnByb3AoXCJkaXNhYmxlZFwiLFwiZGlzYWJsZWRcIik7XG4gICAgICAgICAgICAkY29tYm8ucmVtb3ZlQXR0cihcImRpc2FibGVkXCIpO1xuICAgICAgICAgICAgJGNvbWJvLmZhZGVJbigpO1xuICAgICAgICAgICAgLy9SZWN1cGVybyBkYSBEQiBsZSBpbmZvcm1hemlvbmkgc3VpIGxvdHRpXG4gICAgICAgICAgICBpZihpZGFydGljb2xvPjApXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgJGNvbWJvLnJlbW92ZU9wdGlvbigvLi8pO1xuICAgICAgICAgICAgICAgICRjb21iby5jc3MoXCJiYWNrZ3JvdW5kXCIsXCJ1cmwoJy9pbWFnZXMvbG9hZGluZzEuZ2lmJykgbm8tcmVwZWF0XCIpO1xuICAgICAgICAgICAgICAgICRjb21iby5hdHRyKFwiZGlzYWJsZWRcIixcImRpc2FibGVkXCIpO1xuXG4gICAgICAgICAgICAgICAgdmFyIG1pbl9kYXRhX3ByaW1vY2FyaWNvPVwiOTk5OS85OS85OVwiO1xuICAgICAgICAgICAgICAgIHZhciBteV9sb3R0bz1cIlwiO1xuICAgICAgICAgICAgICAgIHZhciBkYXRlc2NhZGVuemE9W107XG4gICAgICAgICAgICAgICAgdmFyIGxvdHRpX2Rpc2FibGVkPVtdO1xuICAgICAgICAgICAgICAgICQuYWpheCh7XG4gICAgICAgICAgICAgICAgICAgIHVybDogIFwiYWpheC5waHA/b2JqZWN0PVwiK2NsYXNzQXJ0aWNvbG8rXCImdGlwb3ZpZXc9Z2V0TG90dGlEYXRvQXJ0aWNvbG8maWQ9XCIraWRhcnRpY29sbytnaWFjZW56ZW5lZ2F0aXZlK1wiJmRhdGE9XCIrRGF0ZV9faXQoZGF0YSkrXCImb3JhcmlvPVwiK29yYXJpbytcIiZpZG1hZ2F6emlubz1cIitpZG1hZ2F6emlubyxcbiAgICAgICAgICAgICAgICAgICAgZGF0YVR5cGU6IFwieG1sXCIsXG4gICAgICAgICAgICAgICAgICAgIGFzeW5jOiBpc19hc2luY3Jvbm8sXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IFwicG9zdFwiLFxuICAgICAgICAgICAgICAgICAgICBkYXRhOiBwYXJhbXMsXG4gICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3M6ZnVuY3Rpb24oeG1sKXtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsb3R0aV9jb3VudD0kKHhtbCkuZmluZCgnbG90dGlfY291bnQnKS50ZXh0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IodmFyIGk9MDtpPGxvdHRpX2NvdW50O2krKyl7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxvdHRvPSQoeG1sKS5maW5kKCdsb3R0bycraSkudGV4dCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkYXRhc2NhZGVuemE9JCh4bWwpLmZpbmQoJ2RhdGFzY2FkZW56YScraSkudGV4dCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkYXRhX3ByaW1vY2FyaWNvPSQoeG1sKS5maW5kKCdkYXRhX3ByaW1vY2FyaWNvJytpKS50ZXh0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxvdHRvMj0kKHhtbCkuZmluZCgnbG90dG8yXycraSkudGV4dCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBxPSQoeG1sKS5maW5kKCdnaWFjZW56YScraSkudGV4dCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvdHRpX2Rpc2FibGVkW2xvdHRvXT1nZXRGbG9hdCgkKHhtbCkuZmluZCgnRElTQUJMRURfJytpKS50ZXh0KCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkZXNjcml6aW9uZT1sb3R0bztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihsb3R0bzIhPVwiXCIpIGRlc2NyaXppb25lID0gZGVzY3JpemlvbmUrXCIgLSBcIitsb3R0bzI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpemlvbmUgPSBzdHJfcGFkKGRlc2NyaXppb25lLGRlc2NyaXppb25lLmxlbmd0aCArIDUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXppb25lKz1zdHJfcGFkKFwic3RvY2s6IFwiK3EsMTYpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCBkYXRhc2NhZGVuemEhPVwiXCIgKSBkZXNjcml6aW9uZSs9XCIgICBzY2FkOiBcIitkYXRhc2NhZGVuemE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYobG90dG89PScnKXsgbG90dG89XCJfbm9fbG90dG9fXCI7IGRlc2NyaXppb25lPXN0cl9wYWQoXCJOTy1MT1RUT1wiLDE2KStzdHJfcGFkKFwic3RvY2s6IFwiK3EsMTYpOyB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJGNvbWJvLmFkZE9wdGlvbihsb3R0byxkZXNjcml6aW9uZS5yZXBsYWNlKC8gL2csXCJcXHUwMEEwXCIpLGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRlc2NhZGVuemFbbG90dG9dPWRhdGFzY2FkZW56YTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCBkYXRhX3ByaW1vY2FyaWNvPG1pbl9kYXRhX3ByaW1vY2FyaWNvIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pbl9kYXRhX3ByaW1vY2FyaWNvPWRhdGFfcHJpbW9jYXJpY287XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG15X2xvdHRvPWxvdHRvO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAvL0ltcG9zdG8gbCdhdHRyaWJ1dG8gZGVsbGUgc2NhZGVuemUgc3VsbGUgb3B0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICAkY29tYm8uZmluZChcIm9wdGlvblwiKS5lYWNoKCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgJHRoaXMgPSAkKHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBrZXk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yKGtleSBpbiBkYXRlc2NhZGVuemEpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZigkdGhpcy5hdHRyKFwidmFsdWVcIik9PWtleSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMuYXR0cihcInNjYWRlbnphXCIsZGF0ZXNjYWRlbnphW2tleV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3Ioa2V5IGluIGxvdHRpX2Rpc2FibGVkKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoJHRoaXMuYXR0cihcInZhbHVlXCIpPT1rZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0aGlzLnByb3AoXCJkaXNhYmxlZFwiLGxvdHRpX2Rpc2FibGVkW2tleV09PTE/XCJkaXNhYmxlZFwiOlwiXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICRjb21iby5jc3MoXCJiYWNrZ3JvdW5kXCIsXCJ1cmwoJyMnKSBuby1yZXBlYXRcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAkY29tYm8ucmVtb3ZlQXR0cihcImRpc2FibGVkXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgJGNvbWJvLnNlbGVjdE9wdGlvbnMoJHRleHQudmFsKCkpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiggcHJvcG9uaV9sb3R0b19waXVfdmVjY2hpbyApICRjb21iby5zZWxlY3RPcHRpb25zKG15X2xvdHRvKVxuXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2V7XG4gICAgICAgICAgICB2YXIgbG90dG89JGNvbWJvLnZhbCgpO1xuICAgICAgICAgICAgJGNvbWJvLmhpZGUoKTtcbiAgICAgICAgICAgICR0ZXh0LnZhbChsb3R0byk7XG4gICAgICAgICAgICAkY29tYm8ucHJvcChcImRpc2FibGVkXCIsXCJkaXNhYmxlZFwiKTtcbiAgICAgICAgICAgICR0ZXh0LnJlbW92ZUF0dHIoXCJkaXNhYmxlZFwiKTtcbiAgICAgICAgICAgICR0ZXh0LmZhZGVJbigpO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIHZpZXdEaWFsb2dOZXdQYXNzd29yZDogZnVuY3Rpb24oaWR1c2VyLCBvblN1Y2Nlc3Mpe1xuICAgICAgICBnZXRIdG1sRnJvbUFqYXgoe1xuICAgICAgICAgICAgdXJsOiBcImFqYXgucGhwP29iamVjdD1JV3VzZXImdGlwb3ZpZXc9Y2hhbmdlUGFzc3dvcmQmaWQ9XCIgKyBpZHVzZXIsXG4gICAgICAgICAgICBkaXZuYW1lOiBcImRpYWxvZ0NoYW5nZVBhc3N3b3JkXCIsXG4gICAgICAgICAgICBvblN1Y2Nlc3M6IGZ1bmN0aW9uICgpe1xuICAgICAgICAgICAgICAgIGRpYWxvZ1Nob3coXCJkaWFsb2dDaGFuZ2VQYXNzd29yZFwiLGZ1bmN0aW9uKHIpe1xuICAgICAgICAgICAgICAgICAgICBpZighcikgcmV0dXJuO1xuXG4gICAgICAgICAgICAgICAgICAgICQuYWpheCh7XG4gICAgICAgICAgICAgICAgICAgICAgICB1cmw6IFwidmlldy5waHBcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6XCJwb3N0XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhVHlwZTogXCJqc29uXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiBcIk9QX0ZST01fQUpBWD0xJkpTT049MSZ0aXBvdmlldz1jaGFuZ2VQYXNzd29yZCZvYmplY3Q9SVdVc2VyJmlkPVwiICsgaWR1c2VyICsgXCImXCIgKyAkKFwiI2RpYWxvZ0NoYW5nZVBhc3N3b3JkIDppbnB1dCwgOmNoZWNrYm94XCIpLnNlcmlhbGl6ZSgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24oanNvbil7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWpheFN1Ym1pdE9uU3VjY2Vzc0Z1bmN0aW9uKGpzb24sIHRydWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHR5cGVvZiBvblN1Y2Nlc3MgPT09IFwiZnVuY3Rpb25cIikgb25TdWNjZXNzKHJldCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqXG4gICAgICogQHBhcmFtIHBlcmlvZG9maXNjYWxlXG4gICAgICogQHBhcmFtIGlzX3BlcmlvZG9nZXN0aW9uYWxlXG4gICAgICogQHJldHVybnMge251bGx8c3RyaW5nW119XG4gICAgICogQGNvbnN0cnVjdG9yXG4gICAgICovXG4gICAgRGF0ZV9fZ2V0SW50ZXJ2YWxsb0Zyb21QZXJpb2RvRmlzY2FsZTogZnVuY3Rpb24ocGVyaW9kb2Zpc2NhbGUsIGlzX3BlcmlvZG9nZXN0aW9uYWxlKVxuICAgIHtcbiAgICAgICAgaWYoIXBlcmlvZG9maXNjYWxlKSByZXR1cm4gbnVsbDtcblxuICAgICAgICB2YXIgZGF0YV9kYSA9ICQoXCIjZGF0YV9kYV9maXNjXCIpLnZhbCgpO1xuICAgICAgICB2YXIgZGF0YV9hID0gJChcIiNkYXRhX2FfZmlzY1wiKS52YWwoKTtcblxuICAgICAgICBpZihnZXRGbG9hdDIoaXNfcGVyaW9kb2dlc3Rpb25hbGUpID09PSAxKXtcbiAgICAgICAgICAgIGRhdGFfZGEgPSAkKFwiI2RhdGFfZGFfZ2VzdFwiKS52YWwoKTtcbiAgICAgICAgICAgIGRhdGFfYSA9ICQoXCIjZGF0YV9hX2dlc3RcIikudmFsKCk7XG4gICAgICAgIH1cblxuICAgICAgICBkYXRhX2RhPXBlcmlvZG9maXNjYWxlLnN1YnN0cigwLDQpK2RhdGFfZGEuc3Vic3RyKDQpO1xuICAgICAgICBpZiggcGVyaW9kb2Zpc2NhbGUubGVuZ3RoPjUgKVxuICAgICAgICAgICAgZGF0YV9hPXBlcmlvZG9maXNjYWxlLnN1YnN0cig1KStkYXRhX2Euc3Vic3RyKDQpO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICBkYXRhX2E9cGVyaW9kb2Zpc2NhbGUuc3Vic3RyKDApK2RhdGFfYS5zdWJzdHIoNCk7XG5cbiAgICAgICAgcmV0dXJuIFtkYXRhX2RhLGRhdGFfYV07XG4gICAgfSxcblxuICAgIG5vb3BMb2c6IGZ1bmN0aW9uKCkge1xuICAgICAgICAkLmdldChcImluY2x1ZGUvbm9vcC1sb2cucGhwXCIsZnVuY3Rpb24oeG1sKXtcbiAgICAgICAgICAgIC8vbm9vcFxuICAgICAgICB9KTtcbiAgICB9LFxuXG4gICAgc3dpdGNoX2FzX3VzZXI6IGZ1bmN0aW9uKCl7XG4gICAgICAgIHZhciAkc3dpdGNoID0gJChcIiNzd2l0Y2hfYXNfdXNlclwiKTtcbiAgICAgICAgZGlhbG9nU2hvdyhcImNvbmZpcm1fZGlhbG9nX3N3aXRjaFwiLCBmdW5jdGlvbiAocmVzKSB7XG4gICAgICAgICAgICBpZighcmVzKSByZXR1cm4gZmFsc2U7XG5cbiAgICAgICAgICAgIHZhciB1c2VyID0gJHN3aXRjaC52YWwoKTtcbiAgICAgICAgICAgIHdhaXRpbmcoKTtcbiAgICAgICAgICAgICQuYWpheCh7XG4gICAgICAgICAgICAgICAgdXJsOiBcImFqYXgucGhwP0pTT04mb2JqZWN0PUlXVXNlciZ0aXBvdmlldz1zd2l0Y2hBc1VzZXJcIixcbiAgICAgICAgICAgICAgICB0eXBlOiAncG9zdCcsXG4gICAgICAgICAgICAgICAgZGF0YToge1widXNlclwiOiB1c2VyLFwic3dpdGNoX3B3ZFwiOiAkKFwiI3N3aXRjaF9wYXNzd29yZFwiKS52YWwoKX0sXG4gICAgICAgICAgICAgICAgZGF0YVR5cGU6IFwianNvblwiLFxuICAgICAgICAgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uKGpzb24pe1xuICAgICAgICAgICAgICAgICAgICBpZihqc29uLnJldCkgd2luZG93LmxvY2F0aW9uLnJlbG9hZCgpO1xuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdhaXRpbmcoZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYWxlcnQoXCJVdGVudGUgaW5lc2lzdGVudGUhXCIpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9KTtcbiAgICB9LFxuXG4gICAgc3dpdGNoX3RvX2F6aWVuZGE6IGZ1bmN0aW9uKClcbiAgICB7XG4gICAgICAgIHZhciBjb2RhemllbmRhPSQoXCIjc3dpdGNoX3RvX2F6aWVuZGFcIikudmFsKCk7XG4gICAgICAgIHdhaXRpbmcyKCk7XG4gICAgICAgICQuZ2V0KCBcImFqYXgucGhwP29iamVjdD1JV1VzZXImdGlwb3ZpZXc9c3dpdGNoQXppZW5kYSZjb2RpY2VjbGllbnRlPVwiK2NvZGF6aWVuZGEgLGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uPSdob21lLnBocD9pZG1lbnU9MCc7XG4gICAgICAgIH0pO1xuICAgIH0sXG5cbiAgICBlYW5DaGVja0RpZ2l0OiBmdW5jdGlvbihzKXtcbiAgICAgICAgdmFyIHJlc3VsdCA9IDA7XG4gICAgICAgIGZvciAodmFyIGNvdW50ZXIgPSBzLmxlbmd0aC0xOyBjb3VudGVyID49MDsgY291bnRlci0tKXtcbiAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdCArIHBhcnNlSW50KHMuY2hhckF0KGNvdW50ZXIpKSAqICgxKygyKihjb3VudGVyICUgMikpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gKDEwIC0gKHJlc3VsdCAlIDEwKSkgJSAxMDtcbiAgICB9LFxuXG4gICAgZ2VuZXJhQmFyY29kZTogZnVuY3Rpb24odmFsdWUsIGVsZW1faWQsIHByZXZpZXdfaWQpe1xuICAgICAgICByZXF1aXJlKFwianNiYXJjb2RlXCIpO1xuICAgICAgICB2YXIgYmNvZGUgPSAoXCIwMDAwMDAwMDAwMDBcIiArIHZhbHVlKS5zbGljZSgtMTIpO1xuICAgICAgICBiY29kZSArPSBlYW5DaGVja0RpZ2l0KGJjb2RlKTtcbiAgICAgICAgSnNCYXJjb2RlKFwiI1wiICsgcHJldmlld19pZCwgYmNvZGUsIHtcbiAgICAgICAgICAgIGZvcm1hdDogXCJFQU4xM1wiLFxuICAgICAgICAgICAgZm9udFNpemU6IDE4LFxuICAgICAgICAgICAgdGV4dE1hcmdpbjogMCxcbiAgICAgICAgICAgIGhlaWdodDogMTIwLFxuICAgICAgICAgICAgd2lkdGg6IDQsXG4gICAgICAgICAgICBmbGF0OiB0cnVlXG4gICAgICAgIH0pLnJlbmRlcigpO1xuXG4gICAgICAgICQoXCIjXCIgKyBlbGVtX2lkKS52YWwoYmNvZGUpO1xuICAgIH0sXG5cbiAgICBjYWxjb2xhQ29vcmRpbmF0ZTogZnVuY3Rpb24oaW5kaXJpenpvLGZpZWxkX2xhdCxmaWVsZF9sb25nKXtcbiAgICAgICAgdmFyIHVybD1cImFqYXgucGhwP0pTT04mb2JqZWN0PUdvb2dsZU1hcHNPYmplY3QmdGlwb3ZpZXc9Y2FsY29sYUNvb3JkaW5hdGUmaW5kaXJpenpvPVwiK2luZGlyaXp6bztcbiAgICAgICAgJC5hamF4KHtcbiAgICAgICAgICAgIHVybDogdXJsLFxuICAgICAgICAgICAgZGF0YVR5cGU6IFwianNvblwiLFxuICAgICAgICAgICAgYXN5bmM6IGZhbHNlLFxuICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24oanNvbil7XG4gICAgICAgICAgICAgICAgdmFyIGxhdD1qc29uLmxhdDtcbiAgICAgICAgICAgICAgICB2YXIgbG9uZz1qc29uLmxvbmc7XG4gICAgICAgICAgICAgICAgaWYobGF0PT09bnVsbCB8fCBsb25nPT09bnVsbClcbiAgICAgICAgICAgICAgICAgICAgYWxlcnQoXCJJbnNlcmlyZSBsJ2luZGlyaXp6byBuZWwgZm9ybWF0byBjb3JyZXR0b1wiKTtcbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAkKFwiI1wiK2ZpZWxkX2xhdCkudmFsKGxhdCk7XG4gICAgICAgICAgICAgICAgICAgICQoXCIjXCIrZmllbGRfbG9uZykudmFsKGxvbmcpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSxcblxuICAgIGdldEh0bWxEaWFsb2dDaXN0ZXJuZTogZnVuY3Rpb24gKG9wdHMpe1xuICAgICAgICBpZighb3B0cykgb3B0cyA9IHtkaWFsb2c6IFwiZGlhbG9nX2Npc3Rlcm5lXCJ9O1xuICAgICAgICBpZighb3B0cy5kaWFsb2cpIG9wdHMuZGlhbG9nID0gXCJkaWFsb2dfY2lzdGVybmVcIjtcblxuICAgICAgICBjb25zdCAkZGlhbG9nID0gJChcIiNcIiArIG9wdHMuZGlhbG9nKTtcbiAgICAgICAgJGRpYWxvZy5odG1sKFwiPGRpdiBzdHlsZT0nd2lkdGg6IDEwMCU7IHRleHQtYWxpZ246IGNlbnRlcjttYXJnaW4tdG9wOiAxNzBweCc+XCIgKyAkKFwiI2Rpdl93YWl0aW5nMlwiKS5odG1sKCkgKyBcIjwvZGl2PlwiKTtcbiAgICAgICAgaWYoIW9wdHMub2JqZWN0KSBvcHRzLm9iamVjdCA9ICRkaWFsb2cuZGF0YShcIm9iamVjdFwiKTtcbiAgICAgICAgb3B0cy50aXBvdmlldyA9IFwiZ2V0SHRtbERpYWxvZ0Npc3Rlcm5lXCI7XG4gICAgICAgIGlmKG9wdHMuZGF0YSkgb3B0cy5kYXRhID0gJChcIiNcIiArIG9wdHMuZGF0YSkudmFsKCk7XG4gICAgICAgIGlmKG9wdHMub3JhcmlvKSBvcHRzLm9yYXJpbyA9ICQoXCIjXCIgKyBvcHRzLm9yYXJpbykudmFsKCk7XG4gICAgICAgIGlmKCFvcHRzLm5hbWVfdGV4dCkgb3B0cy5uYW1lX3RleHQgPSBcImlkY2lzdGVybmFcIjtcbiAgICAgICAgY29uc3QgY2FsbGJhY2sgPSBvcHRzLmNhbGxiYWNrO1xuICAgICAgICBvcHRzLmNhbGxiYWNrID0gbnVsbDtcblxuICAgICAgICBnZXRIdG1sRnJvbUFqYXgoe1xuICAgICAgICAgICAgdXJsOiBcImFqYXgucGhwPzFcIixcbiAgICAgICAgICAgIGRpdm5hbWU6IG9wdHMuZGlhbG9nLFxuICAgICAgICAgICAgZGF0YTogb3B0cyxcbiAgICAgICAgICAgIG9uU3VjY2VzczogZnVuY3Rpb24gKCl7XG4gICAgICAgICAgICAgICAgaWYodHlwZW9mIGNhbGxiYWNrID09PSBcImZ1bmN0aW9uXCIpIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgfSxcblxuICAgIHNob3dEaWFsb2dTZWxlY3RDaXN0ZXJuZTogZnVuY3Rpb24gKGRpYWxvZywgYWZ0ZXJMb2FkZWQpe1xuICAgICAgICBjb25zdCAkZGlhbG9nID0gJChcIiNcIiArIGRpYWxvZyk7XG4gICAgICAgIGNvbnN0IG5hbWVfdGV4dCA9ICRkaWFsb2cuZGF0YShcIm5hbWVfdGV4dFwiKSA/ICRkaWFsb2cuZGF0YShcIm5hbWVfdGV4dFwiKSA6IFwiaWRjaXN0ZXJuYVwiO1xuICAgICAgICBjb25zdCAkc2VsZWN0Q2lzdGVybmEgPSAkKFwiLnNlbGVjdENpc3Rlcm5hX1wiICsgZGlhbG9nKTtcbiAgICAgICAgJHNlbGVjdENpc3Rlcm5hLm9mZigpO1xuICAgICAgICAkc2VsZWN0Q2lzdGVybmEub24oXCJjbGlja1wiLCBmdW5jdGlvbiAoZXZlbnQpe1xuICAgICAgICAgICAgY29uc3QgJGNpc3Rlcm5hX3RleHQgPSAkKHRoaXMpO1xuICAgICAgICAgICAgY29uc3QgJGNpc3Rlcm5hX2lkID0gJChcIiNcIiArICRjaXN0ZXJuYV90ZXh0LmF0dHIoXCJpZFwiKS5yZXBsYWNlKFwiX3RleHRfXCIsIFwiXCIpKTtcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICBkaWFsb2dTaG93KGRpYWxvZywgZnVuY3Rpb24gKCkge30sIGZ1bmN0aW9uKCl7XG4gICAgICAgICAgICAgICAgY29uc3QgJGNpc3Rlcm5lRWxlbSA9ICQoXCIuY2lzdGVybmFFbGVtXCIpO1xuICAgICAgICAgICAgICAgICRjaXN0ZXJuZUVsZW0ub2ZmKCk7XG4gICAgICAgICAgICAgICAgJGNpc3Rlcm5lRWxlbS5vbihcImNsaWNrXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5kZXggPSAkKHRoaXMpLmRhdGEoXCJpbmRleFwiKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgJGhyZWYgPSAkKFwiI1wiICsgbmFtZV90ZXh0ICsgXCJfZGlhbG9nX2Npc3Rlcm5hX2NvZGljZV9cIiArIGluZGV4KTtcblxuICAgICAgICAgICAgICAgICAgICAkY2lzdGVybmFfdGV4dC52YWwoJGhyZWYuZGF0YShcImRlc2NyaXppb25lX2Npc3Rlcm5hXCIpKTtcbiAgICAgICAgICAgICAgICAgICAgJGNpc3Rlcm5hX2lkLnZhbCgkaHJlZi5kYXRhKFwiY2lzdGVybmFfaWRcIikpO1xuICAgICAgICAgICAgICAgICAgICAkY2lzdGVybmFfaWQuZGF0YShcImRpYWxvZy1pbmRleFwiLCBpbmRleCk7XG4gICAgICAgICAgICAgICAgICAgICRkaWFsb2cuZGF0YSgnbG9hZGVkJywgdHJ1ZSk7XG5cblxuICAgICAgICAgICAgICAgICAgICAkKFwiI1wiICsgZGlhbG9nKS5kaWFsb2coXCJjbG9zZVwiKTtcbiAgICAgICAgICAgICAgICAgICAgJGNpc3Rlcm5hX2lkLmNoYW5nZSgpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICQoXCIjZWxlbmNvX2Npc3Rlcm5lX1wiICsgbmFtZV90ZXh0KS5EYXRhVGFibGUoKS5jb2x1bW5zLmFkanVzdCgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pXG4gICAgICAgIGlmKGFmdGVyTG9hZGVkICYmIHR5cGVvZiBhZnRlckxvYWRlZCA9PT0gXCJmdW5jdGlvblwiKVxuICAgICAgICAgICAgYWZ0ZXJMb2FkZWQoKTtcbiAgICB9LFxuXG4gICAgZ2V0RGlhbG9nU3RhbmRhcmRDaXN0ZXJuZUZyYW50b2lvOiBmdW5jdGlvbiAob3B0cyl7XG4gICAgICAgIGlmKCFvcHRzKSBvcHRzID0ge1xuICAgICAgICAgICAgZGlhbG9nOiBcImRpYWxvZ19jaXN0ZXJuZVwiLFxuICAgICAgICAgICAgaWR0aXBvc2Z1c286IDEsXG4gICAgICAgICAgICBhZnRlckxvYWRlZDogbnVsbFxuICAgICAgICB9XG4gICAgICAgIGlmKCFvcHRzLmRpYWxvZykgb3B0cy5kaWFsb2cgPSBcImRpYWxvZ19jaXN0ZXJuZVwiO1xuXG4gICAgICAgIG9wdHMuY2FsbGJhY2sgPSAoKSA9PiB7XG4gICAgICAgICAgICBzaG93RGlhbG9nU2VsZWN0Q2lzdGVybmUob3B0cy5kaWFsb2csIG9wdHMuYWZ0ZXJMb2FkZWQpO1xuICAgICAgICB9XG4gICAgICAgIGdldEh0bWxEaWFsb2dDaXN0ZXJuZShvcHRzKTtcblxuICAgIH0sXG5cbiAgICBnZXREaXZEZXR0YWdsaW9EaWNoaWFyYXppb25lKG9wdHMpe1xuICAgICAgICBpZighb3B0cy5vYmplY3QpIG9wdHMub2JqZWN0PSBcIkRpY2hpYXJhemlvbmlJbnRlbnRvXCI7XG4gICAgICAgIG9wdHMudGlwb3ZpZXcgPSBcImdldERpdkRldHRhZ2xpb0RpY2hpYXJhemlvbmVcIjtcbiAgICAgICAgbGV0IGNhbGxiYWNrID0gbnVsbDtcbiAgICAgICAgaWYodHlwZW9mIG9wdHMub25TdWNjZXNzID09PSBcImZ1bmN0aW9uXCIpIGNhbGxiYWNrID0gb3B0cy5vblN1Y2Nlc3M7XG4gICAgICAgIG9wdHMub25TdWNjZXNzID0gdW5kZWZpbmVkO1xuXG4gICAgICAgIGdldEh0bWxGcm9tQWpheCh7XG4gICAgICAgICAgICB1cmw6IFwiYWpheC5waHA/MVwiLFxuICAgICAgICAgICAgZGF0YTogb3B0cyxcbiAgICAgICAgICAgIGRpdm5hbWU6IG9wdHMuZGl2LFxuICAgICAgICAgICAgb25TdWNjZXNzOiBmdW5jdGlvbiAoKXtcbiAgICAgICAgICAgICAgICBpZih0eXBlb2YgY2FsbGJhY2sgPT09IFwiZnVuY3Rpb25cIikgY2FsbGJhY2sob3B0cyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgfVxufVxuXG5qUXVlcnkuZm4uZXhpc3RzID0gZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sZW5ndGg+MDt9O1xuXG4vL3Nvc3RpdHVpc2NlIGlsIC52YWwoKSBuZWwganF1ZXJ5LCBlIGxlZ2dlIGRpcmV0dGFtZW50ZSBpbCB2YWxvcmUgbnVtZXJpY29cbiQuZm4udmFsRmxvYXQgPSBmdW5jdGlvbigpXG57XG4gICAgcmV0dXJuIGdldEZsb2F0KCAkKHRoaXMpLnZhbCgpICk7XG59O1xuJC5mbi52YWxGbG9hdDIgPSBmdW5jdGlvbigpXG57XG4gICAgcmV0dXJuIGdldEZsb2F0MiggJCh0aGlzKS52YWwoKSApO1xufTtcblxuLy9Gb290ZXIgRGF0YXRhYmxlc1xuJC5mbi5JV0Zvb3RlckRhdGF0YWJsZSA9IGZ1bmN0aW9uKCl7XG4gICAgdHJ5e1xuICAgICAgICB0aGlzLmRhdGF0YWJsZSA9IGV2YWwoXCJkYXRhdGFibGVfXCIgKyB0aGlzLmF0dHIoXCJpZFwiKSk7XG4gICAgfVxuICAgIGNhdGNoIChlKSB7XG4gICAgICAgIHRoaXMuZGF0YXRhYmxlID0gJChcIiNcIiArIHRoaXMuYXR0cihcImlkXCIpKS5EYXRhVGFibGUoKTtcbiAgICB9XG5cbiAgICB0aGlzLnNldEZvb3RlclRleHQgPSBmdW5jdGlvbiAodGV4dCwgY29sLCByb3cpIHtcbiAgICAgICAgaWYoIXJvdykgcm93ID0gMDtcblxuICAgICAgICBpZihyb3cgPT09IDApXG4gICAgICAgICAgICAkKCB0aGlzLmRhdGF0YWJsZS5jb2x1bW4oIGNvbCApLmZvb3RlcigpICkuaHRtbCh0ZXh0KTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgJChcInRyOmVxKFwiICsgcm93ICsgXCIpIHRoOmVxKFwiICsgY29sICtcIilcIiwgdGhpcy5kYXRhdGFibGUudGFibGUoKS5mb290ZXIoKSkuaHRtbCh0ZXh0KTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIHRoaXM7XG59OyJdLCJzb3VyY2VSb290IjoiIn0=