Verkaufen Sie Ihre Personalvermittlung richtig: Personalvermittlung und Zeitarbeit passen perfekt zusammen! | iGZ (2023)

Vikar-Job per E-Mail

Melden Sie sich jetzt für unseren Newsletter an und erhalten Sie

Wöchentlich die neuesten Brancheninformationen und Themen

'); group_wrapper.find('.loader-overlay').animate({"opacitet": 1}, 300); }, πλήρης: συνάρτηση (απόκριση) { group_wrapper.find('.loader-overlay').animate({"opacitet": 0}, 300); setTimeout(funktion () { group_wrapper.find('.loader-overlay').remove(); }, 300); }, Antworten: συνάρτηση (απάντηση) { show_notification(response.msg, answer.result); } }); }); body.find('input[navn=mainOfficeId]').val(body.find('input[name=prefill_mainOfficeId]').val()); body.find('input[navn=email]').each(function (i) { let email_field = $(this); lad γονείς = email_field.parents('.tab-profile-employees, .tab-profile-companies '); if (!parents.length) { email_field.val(body.find('input[navn=prefill_email]').val()); } }); body.find('input[navn=token]').val(body.find('input[navn=prefill_token]').val()); body.find('input[navn=unternehmen]').val(body.find('input[navn=prefill_firmanavn]').val()); body.find('input[navn=mitgliedsnummer]').val(body.find('input[navn=prefill_member_no]').val()); body.find('input[navn=brugerid]').val(+body.find('span#BrugerID').text()); body.on('click', '#upload-sepa-mandate .btn-sepa-mandate', function(e) { e.preventDefault(); lad btn = $(this); lad form = btn.parent() ; lad wrapper = form.parent(); lad fil = wrapper.find('input[type=fil]'); if (fil.længde > 0) { if (fil.val() !== "") { ας wrapper = form.parent(); . ]').val()); cf7.find('.wpcf7-submit').click(); show_notification('Datei wurde gesendet', 'success'); } else { show_notification('Bitte wählen Sie eine Datei aus !', 'σφάλμα'); } } else { let cf7 = wrapper.find('.wpcf7-form'); cf7.find('.wpcf7-submit').click(); } }); body.on('wpcf7mailsent', '#sepa-mandat-form', funktion (e) { show_notification('Mandat wurde gesendet', 'succes'); }); body.on('click', '.btn-save', function (e) { e.preventDefault(); lad btn = $(this); lad form = btn.parents('form'); lad sendEmails = [ ]; lad pass1 = form.find('input[navn=adgangscode]'); lad pass2 = form.find('input[navn=password_repeat]'); αφήστε hasPasswordFields = pass1 && pass2; lad email1 = form.find( 'input[navn=e-mail]'); lad email2 = form.find('input[navn=email_repeat]'); lad hasEmailFields = email1 && email2; lad firmanavn = form.find('input[navn=firmanavn] ') ; if (firmanavn.val() !== firmanavn.data('val')) { sendEmails.push('firmanavn'); } lad form_valid = form.valid(); lad pass_valid = !hasPasswordFields || hasPasswordFields .length === 0 || (hasPasswordFields && (pass1.next('p').hasClass('strong-password') && pass1.val() === pass2.val())); έστω mail_valid = ! hasEmailFields | | hasEmailFields.length === 0 || (hasEmailFields && email1.val() === email2.val()); if (btn.hasClass('btn-change-password')) { lad passwordOldField = form .find ('input[navn=password_old'); lad passwordNewField = form.find('input[navn=adgangskode'); Junge PasswortNewRepeatField = form.find('input[navn=password_repeat'); if (passwordOldField.val() === "") { passwordOldField.addClass('σφάλμα'); passwortOldField.parents('.ttr-input').addClass('σφάλμα'); form_valid = falsk; } andet { passwortNewField.removeClass('error'); passwortOldField.parents('.ttr-input').removeClass('error'); } if (passwordNewField.val() === "" || passwortNewField.next('.strength.strong-password').length === 0) { passwortNewField.addClass('error'); passwortNewField.parents('.ttr-input').addClass('σφάλμα'); passwortNewField.parents('.ttr-input').data('placeholder', 'Neues Passwort ist zu unsicher'); passwortNewField.parents('.ttr-input').attr('data-placeholder', 'Neues Passwort ist zu unsicher'); form_valid = falsk; } andet { passwortNewField.removeClass('error'); passwortNewField.parents('.ttr-input').removeClass('error'); } if (passwordNewRepeatField.val() === "" || passwortNewRepeatField.val() !== passwortNewField.val()) { passwortNewRepeatField.addClass('σφάλμα'); passwortNewRepeatField.parents('.ttr-input').addClass('σφάλμα'); passwordNewRepeatField.parents('.ttr-input').data('placeholder', 'Passwörter stimmen nicht überein'); passwortNewRepeatField.parents('.ttr-input').attr('data-placeholder', 'Passwörter stimmen nicht überein'); form_valid = falsk; } else { passwortNewRepeatField.removeClass('error'); passwortNewRepeatField.parents('.ttr-input').removeClass('error'); } ας error_txt = form.parents('.group-wrapper').find('> p'); if (!form_valid) { if (!error_txt.hasClass('error')) {error_txt.addClass('error'); } } andet { error_txt.removeClass('error'); } } if (form_valid) { Dashboard_save_data(btn, sendEmails); ας siblingForm = form.parent().find('#proof_of_business_form'); if (siblingForm.length === 1) { let mitgliedsnummer = siblingForm.find('input[navn=mitgliedsnummer]').val(); ας Proof_of_business = siblingForm.find('input[navn=bevis_for_business]').val(); if (mitgliedsnummer !== undefiniert && mitgliedsnummer !== "" && Proof_of_business !== undefiniert && Proof_of_business !== "") { siblingForm.find('.wpcf7-submit').κλικ(); } } } }); body.on('change','input[name=proof_of_business]', συνάρτηση (e) { e.preventDefault(); let input = $(this); let group_wrapper = input.parents('.group-wrapper') ; έστω btn = group_wrapper.find('.btn-save'); if (input.val() !== "") { btn.removeClass('btn-disabled'); btn.prop('disabled', false ); } andet {if (!btn.hasClass('btn-disabled')) {btn.addClass('btn-disabled'); } btn.prop('disabled', sand); } }); body.on('input cut paste', '.tab-profile-companies input', funktion (e) { let element = $(this); let tab = element.parents('.tab-profile-companies'); lad form = element.parents('form'); ας btn = form.find('.btn-save'); ας το firmanavn = $('.tab-profile-companies να εισέλθει[όνομα=firmanavn]'); Um firmanavn_ændret = firmanavn.val() !== firmanavn.data('værdi'); um firmanavn2 = $('.tab-profile-virksomheder να εισά]γεαιατιτή[navn 2]γεαιατεή; 2_ændret = firmanavn2.val () !== firmanavn2.data('value'); lad strasse = $('.tab-profile-companies input[name=strasse]'); lad strasse_changed = strasse.val() !== strasse.data( 'value '); $('.tab-profile-companies input[name=ort]'); ας ort_changed = ort.val() !== ort.data('value'); αφήστε bundesland = $ ('.tab-profile -εταιρείες input[navn=bundesland]'); lad bundesland_changed = bundesland.val() !== bundesland.data('værdi'); αφήστε την περιοχή = $('.tab-profile-companies να εισάγει[όνομα=περιοχή]'); ας region_changed = region.val() !== region.data('værdi'); lad land = $('.tab-profil-virksomheder input[navn=land]'); ας land_ændret = land.val() !== land.data('værdi'); let file_upload_form = $(this).parents('.tab-profile-companies').find('#proof_of_business_form'); ας file_upload_field = file_upload_form.find('.business-register-fil input[type=fil]'); if (!firmenname_changed && !firmenname2_changed && !strasse_changed && !postleitzahl_changed && !ort_changed && !bundesland_changed && !region_changed && !land_changed) {file_upload('hidden_form.ad.ad). file_upload_field.addClass('skjult-felt'); file_upload_field.prop('påkrævet', falsk); } else { let Memberno_field = file_upload_form.find('input[navn=mitgliedsnummer]'); Memberno_field.val($('.tab-profile-companies input[name=membershop_no]').val()); file_upload_form.removeClass('skjult-felt'); file_upload_field.removeClass('skjult-felt'); file_upload_field.prop('påkrævet', sand); } if ((!firmanavn_ændret && !firmanavn2_ændret && !strasse_ændret && !postleitzahl_ændret && !ort_ændret && !bundesland_ændret && !region_ændret && !land_ændret) |[όνοαμα_ανξλε](νν ν)(ννν) btn.removeClass('btn-deaktiveret '); btn .prop('disabled', false); } else { if (!btn.hasClass('btn-disabled')) { btn.addClass('btn-disabled'); } btn.prop('disabled ', rigtigt) ; } }); $('.crm-get-file').each(function (index) {let element = $(this); let btn_preview = element.find('a.btn.btn-primary.file-preview'); ας btn_download = element.find('a.btn.btn-primary.file-download'); $.ajax({ Typ: "POST", URL: Ajaxurl, Daten: { Aktion: "crm_get_file", crmGuid: element.data ("guide"), type: element.data("type") }, forSend: funktion () { }, komplet: funktion (svar) { }, succes: funktion (svar) { if (svar.kilde) { btn_preview .data('src', answer.src); btn_download.attr('href', answer.src); element.removeClass('hidden'); } andet { element.remove(); } } }); }) ; body.on('change', '.confirm-deactivation', function (e) { e.preventDefault(); let check = $(this); let actions = check.parents('.actions'); let btn = actions.find('.btn'); let info = actions.find('span'); if (check.is(':checked')) { info.removeClass('hidden'); btn.removeClass('disabled '); btn.removeClass('btn-disabled'); btn.removeClass('btn-deactivate-disabled'); btn.addClass('btn-deactivate'); } andet { info.addClass('hidden'); btn.removeClass('btn-deaktiver'); btn.addClass('deaktiveret'); btn.addClass('btn-deaktiveret'); btn.addClass('btn-deaktiveret-deaktiveret'); } }); body.on('click', '.btn-deactivate', function (e) { e.preventDefault(); let btn = $(this); let group_wrapper = btn.parents('.group_wrapper'); $.ajax ({ type: "POST", url: ajaxurl, data: { action: 'igz_crm_deactivate', crmGuid: btn.data('crmguid'), userEmail: btn.data('email') }, beforeSend: function () { group_wrapper.append('

Wird geladen...

'); group_wrapper.find('.loader-overlay').animate({"opacity": 1}, 300); }, komplett: function (response) { group_wrapper.find('.loader-overlay').animate({"opacity": 0}, 300); show_notification(response.responseJSON.msg, 'success'); setTimeout(function () { group_wrapper.find('.loader-overlay').remove(); }, 300); }, Erfolg: Funktion (Antwort) {}}); }); body.on('click', '.btn-invite', function (e) { e.preventDefault(); let element = $(this); let form = element.parents('form'); let formData = form .serializeArray(); let group_wrapper = form.parent(); $.ajax({ type: "POST", url: ajaxurl, data: { action: 'igz_send_invitations', formData: formData }, beforeSend: function () { group_wrapper .attach attachment('

Wird geladen...

'); group_wrapper.find('.loader-overlay').animate({"opacitet": 1}, 300); }, komplet: funktion (svar) { group_wrapper.find('.loader-overlay').animate({"opacitet": 0}, 300); lad is_only_button = element.is(':first-of-type') && element.is(':last-of-type'); element.attr("type") !== "checkbox" && !is_only_button ? element.css({"display": "ingen"}): false; show_notification(response.responseJSON.msg, 'succes'); setTimeout(funktion () { group_wrapper.find('.loader-overlay').remove(); }, 300); }, succes: funktion (svar) { } }); }); function dashboard_save_data(element) { let form = element.parents('form'); lad formData = form.serializeArray(); lad formDataChanged = []; lad args = []; lad group_wrapper = form.parent(); lad crmGuid = element.data("crmguid"); lad gruppe = element.data('gruppe'); lad dataType = ""; lad dataValue = ""; if (element.data('group') === 'medlem') { for (lad i = 0; i < formData.length; i++) { lad navn = formData[i].navn; lad værdi = formData[i].værdi; lad dataField = form.find('input[navn=' + navn + ']'); lad dataValue = dataField.data('værdi'); if (værdi !== dataVærdi) { formDataChanged.push(formData[i]); } } } lad firma = ""; lad anrede = ""; lad vorname = ""; lad efternavn = ""; lad street = ""; lad plz = ""; lad ort = ""; if (element.hasClass('btn-distributor')) { dataType = "setDistributor"; formData = ""; form.attr('id', 'temp-active-form'); form.find('input[type=checkbox]').each(funktion (indeks) { lad felt = $(dette); lad værdi = field.attr('værdi'); if (værdi !== udefineret) { if (field.is(':checked')) { formData += formData === '' ? værdi : ',' + værdi? } else { dataValue += dataValue === '' ? værdi : ',' + værdi? } } }); firma = form.find('input[navn=firma]').val(); anrede = form.find('input[navn=anrede]').val(); vornavn = form.find('input[navn=vornavn]').val(); nachnavn = form.find('input[navn=nachnavn]').val(); strasse = form.find('input[navn=strasse]').val(); plz = form.find('input[navn=postleitzahl]').val(); ort = form.find('input[navn=ort]').val(); } lad email = form.find('input[type=email]').val(); lad emailOld = form.find('input[type=email]').data('værdi'); email = email !== udefineret && email !== email Gammel ? E-MAIL: ""; let privacy = form.find('label.checkbox.accept-privacy').data('værdi'); lad action = "igz_crm_" + gruppe + "_update"; jQuery.ajax({ type: "POST", url: ajaxurl, data: { action: action, crmGuid: crmGuid, formData: formData, dataType: dataType, firma: firma, anrede: anrede, vorname: vorname, nachname: nachname, strasse: strasse, plz: plz, ort: ort, dataValue: dataValue, args: args, request: element.data('request'), email: email, privacy: privacy !== undefined ? privacy : "" }, beforeSend : function () { group_wrapper.append('

Wird geladen...

'); group_wrapper.find('.loader-overlay').animate({"opacity": 1}, 300); }, complete: function (response) { group_wrapper.find('.loader-overlay').animate({"opacity": 0}, 300); let is_only_button = element.is(':first-of-type') && element.is(':last-of-type'); element.attr("type") !== "checkbox" && !is_only_button ? element.css({"display": "none"}) : false; group_wrapper.find('.actions .btn-cancel').css({"display": "none"}); group_wrapper.find('.actions .btn-edit').css({"display": "inline-flex"}); group_wrapper.find('.ttr-input').each(function () { let input = $(this); input.hasClass('always-focused') ? input.removeClass('always-focused') : false; }); show_notification(response.responseJSON.msg, 'success'); setTimeout(function () { group_wrapper.find('.loader-overlay').remove(); }, 300); form.attr('id', ''); }, success: function (response) { } }); }});//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlcyI6WyJjb250ZW50LWRhc2hib2FyZC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJjb25zdCB1cmxQYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHdpbmRvdy5sb2NhdGlvbi5zZWFyY2gpO1xuXG5qUXVlcnkoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uICgkKSB7XG4gICAgbGV0IGJvZHkgPSAkKCdib2R5Jyk7XG5cbiAgICBpZiAoIWJvZHkuaGFzQ2xhc3MoJ2xvZ2dlZC1pbicpKSB7XG4gICAgICAgIGxldCBhY3Rpb24gPSB1cmxQYXJhbXMuZ2V0KCdhY3Rpb24nKTtcbiAgICAgICAgaWYgKGFjdGlvbiA9PT0gXCJyZXNldFwiKSB7XG4gICAgICAgICAgICBib2R5LmFwcGVuZCgnPHNwYW4gY2xhc3M9XCJoaWRkZW5cIj48YSBjbGFzcz1cImxpZ2h0Ym94IGxpZ2h0Ym94LXBhc3N3b3JkLXJlc2V0XCIgZGF0YS11c2VyPVwiJyArIHVybFBhcmFtcy5nZXQoJ3VzZXInKSArICdcIiBkYXRhLXRva2VuPVwiJyArIHVybFBhcmFtcy5nZXQoJ3Rva2VuJykgKyAnXCI+PC9hPjwvc3Bhbj4nKTtcbiAgICAgICAgICAgIGJvZHkuZmluZCgnLmxpZ2h0Ym94LmxpZ2h0Ym94LXBhc3N3b3JkLXJlc2V0JykuY2xpY2soKTtcbiAgICAgICAgfSBlbHNlIGlmIChhY3Rpb24gPT09ICdyZWdpc3RlcicpIHtcbiAgICAgICAgICAgIGxldCBoaWRkZW5fbm90aWZpY2F0aW9uID0gYm9keS5maW5kKCcuaGlkZGVuLW5vdGlmaWNhdGlvbicpO1xuICAgICAgICAgICAgaWYgKGhpZGRlbl9ub3RpZmljYXRpb24ubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgfSBlbHNlIGlmIChoaWRkZW5fbm90aWZpY2F0aW9uLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgICAgIHNob3dfbm90aWZpY2F0aW9uKGhpZGRlbl9ub3RpZmljYXRpb24udGV4dCgpLCBoaWRkZW5fbm90aWZpY2F0aW9uLmRhdGEoJ3R5cGUnKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9IGVsc2UgaWYoYm9keS5oYXNDbGFzcygncGFnZS10ZW1wbGF0ZS1teWlnei1kYXNoYm9hcmQnKSkge1xuICAgICAgICBjb25zdCBuYXZCdXR0b24gPSAkKCcubW9iaWxlLW5hdi1idXR0b246Zmlyc3QnKTtcbiAgICAgICAgY29uc3QgaWd6QnV0dG9uID0gbmF2QnV0dG9uLmNsb25lKCk7XG4gICAgICAgIGlnekJ1dHRvbi5hdHRyKCdpZCcsICdteWlnei1tb2JpbGUtYnV0dG9uJyk7XG4gICAgICAgIGlnekJ1dHRvbi5odG1sKCc8YSBocmVmPVwiI1wiPjxpIGNsYXNzPVwiZmEgZmEtcmVndWxhciBmYS1jaXJjbGUtdXNlclwiPjwvaT48L2E+Jyk7XG4gICAgICAgIGlnekJ1dHRvbi5pbnNlcnRCZWZvcmUobmF2QnV0dG9uKTtcbiAgICAgICAgaWd6QnV0dG9uLm9uKCdjbGljaycsIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICBib2R5LmFkZENsYXNzKCdteWlnei1tZW51LWFjdGl2ZScpO1xuICAgICAgICAgICAgJCgnLm92ZXJsYXktbW9iaWxlLW5hdicpLmFkZENsYXNzKCdhY3RpdmUnKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3QgbXlJR1pCdXR0b24gPSAkKCcjYnRuLW15aWd6LW1vYmlsZScpO1xuICAgICAgICBteUlHWkJ1dHRvbi5vbignY2xpY2snLCBmdW5jdGlvbihldmVudCkge1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgaWd6QnV0dG9uLnRyaWdnZXIoJ2NsaWNrJyk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgICQoJyNidG4tbXlpZ3otaGVhZGVyJykub24oJ2NsaWNrJywgZnVuY3Rpb24oZXZlbnQpIHtcbiAgICAgICAgICAgIGNvbnN0IHdpbmRvd1dpZHRoID0gJCh3aW5kb3cpLndpZHRoKCk7XG5cbiAgICAgICAgICAgIGlmKHdpbmRvd1dpZHRoIDwgMTAyNCB8fCBpZ3pCdXR0b24uaXMoXCI6dmlzaWJsZVwiKSkge1xuICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICAgICAgaWd6QnV0dG9uLnRyaWdnZXIoJ2NsaWNrJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IG5hdiA9ICQoJyNzZWN0aW9uLWRhc2hib2FyZCA+IC5jb250YWluZXIgPiBuYXYuY29sJyk7XG4gICAgICAgIG5hdi5vbignY2xpY2snLCBmdW5jdGlvbihldmVudCkge1xuICAgICAgICAgICAgY29uc3QgdGFyZ2V0ID0gJChldmVudC50YXJnZXQpO1xuICAgICAgICAgICAgaWYgKHRhcmdldC5oYXNDbGFzcygnaGFzLXN1Yi10YWJzJykpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXRhcmdldC5uZXh0KCkuaXMoXCI6dmlzaWJsZVwiKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYm9keS5yZW1vdmVDbGFzcygnbXlpZ3otbWVudS1hY3RpdmUgbW9iaWxlLW5hdi1hY3RpdmUnKTtcbiAgICAgICAgICAgICQoJy5vdmVybGF5LW1vYmlsZS1uYXYnKS5hZGQobmF2QnV0dG9uWzBdLmZpcnN0Q2hpbGQpLnJlbW92ZUNsYXNzKCdhY3RpdmUnKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdkYXNoYm9hcmQtdGFiJykpIHtcbiAgICAgICAgbGV0IHRhYmJlZCA9IGJvZHkuZmluZCgnI3NlY3Rpb24tZGFzaGJvYXJkID4gLnRhYmJlZCcpO1xuICAgICAgICBsZXQgdGFiYmVkX2NsYXNzZXMgPSB0YWJiZWQuYXR0cignY2xhc3MnKS5zcGxpdChcIiBcIik7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGFiYmVkX2NsYXNzZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmICh0YWJiZWRfY2xhc3Nlc1tpXS5pbmRleE9mKCd0YWItJykgPj0gMCkge1xuICAgICAgICAgICAgICAgIHRhYmJlZF9jbGFzc2VzW2ldID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2Rhc2hib2FyZC10YWInKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0YWJiZWQuYXR0cignY2xhc3MnLCB0YWJiZWRfY2xhc3Nlcy5qb2luKCcgJykpO1xuICAgIH1cblxuICAgIC8vIHJlZGlyZWN0cyBpZS4gL215aWd6LyN0YWItc2hvcC1jYXJ0IHRvIGNvcmVzcG9uZGluZyB0YWJcbiAgICBpZiAod2luZG93LmxvY2F0aW9uLmhhc2guc3Vic3RyKDEsMyk9PVwidGFiXCIpIHtcbiAgICAgICAgbGV0IHRhYj13aW5kb3cubG9jYXRpb24uaGFzaC5zdWJzdHIoMSk7XG4gICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgJChcIltkYXRhLXRhYj0nXCIrdGFiK1wiJ11cIikuY2xpY2soKTtcbiAgICAgICAgfSwgMzAwKTtcbiAgICB9XG5cbiAgICBib2R5Lm9uKCdjbGljaycsICcuYnRuLWVkaXQnLCBmdW5jdGlvbiAoZSkge1xuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGxldCBidG4gPSAkKHRoaXMpO1xuICAgICAgICBsZXQgZ3JvdXAgPSBidG4uZGF0YSgnZ3JvdXAnKTtcbiAgICAgICAgbGV0IGdyb3VwX3dyYXBwZXIgPSBidG4ucGFyZW50cygnLmdyb3VwLXdyYXBwZXInKTtcblxuICAgICAgICBncm91cF93cmFwcGVyLmZpbmQoJy50dHItaW5wdXQnKS5lYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxldCBpbnB1dCA9ICQodGhpcyk7XG4gICAgICAgICAgICAhaW5wdXQuaGFzQ2xhc3MoJ2Fsd2F5cy1mb2N1c2VkJykgPyBpbnB1dC5hZGRDbGFzcygnYWx3YXlzLWZvY3VzZWQnKSA6IGZhbHNlO1xuICAgICAgICB9KTtcblxuICAgICAgICBidG4uY3NzKHtcImRpc3BsYXlcIjogXCJub25lXCJ9KTtcbiAgICAgICAgZ3JvdXBfd3JhcHBlci5maW5kKCcuYWN0aW9ucyAuYnRuLXNhdmUnKS5jc3Moe1wiZGlzcGxheVwiOiBcImlubGluZS1mbGV4XCJ9KTtcbiAgICAgICAgZ3JvdXBfd3JhcHBlci5maW5kKCcuYWN0aW9ucyAuYnRuLWNhbmNlbCcpLmNzcyh7XCJkaXNwbGF5XCI6IFwiaW5saW5lLWZsZXhcIn0pO1xuICAgIH0pO1xuXG4gICAgYm9keS5vbignY2xpY2snLCAnLmJ0bi1jYW5jZWwnLCBmdW5jdGlvbiAoZSkge1xuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGxldCBidG4gPSAkKHRoaXMpO1xuICAgICAgICBsZXQgZ3JvdXAgPSBidG4uZGF0YSgnZ3JvdXAnKTtcbiAgICAgICAgbGV0IGdyb3VwX3dyYXBwZXIgPSBidG4ucGFyZW50cygnLmdyb3VwLXdyYXBwZXInKTtcblxuICAgICAgICBncm91cF93cmFwcGVyLmZpbmQoJy50dHItaW5wdXQnKS5lYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxldCBpbnB1dCA9ICQodGhpcyk7XG4gICAgICAgICAgICBpbnB1dC5yZW1vdmVDbGFzcygnYWx3YXlzLWZvY3VzZWQnKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgYnRuLmNzcyh7XCJkaXNwbGF5XCI6IFwibm9uZVwifSk7XG4gICAgICAgIGdyb3VwX3dyYXBwZXIuZmluZCgnLmFjdGlvbnMgLmJ0bi1zYXZlJykuY3NzKHtcImRpc3BsYXlcIjogXCJub25lXCJ9KTtcbiAgICAgICAgZ3JvdXBfd3JhcHBlci5maW5kKCcuYWN0aW9ucyAuYnRuLWVkaXQnKS5jc3Moe1wiZGlzcGxheVwiOiBcImlubGluZS1mbGV4XCJ9KTtcbiAgICB9KTtcblxuICAgIGJvZHkub24oJ2NsaWNrJywgJy50YWJiZWQgbmF2IC50YWInLCBmdW5jdGlvbiAoZSkge1xuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgICAgbGV0IG5ld190YWIgPSAkKHRoaXMpLmRhdGEoJ3RhYicpO1xuICAgICAgICBsZXQgdGFiYmVkID0gYm9keS5maW5kKCcjc2VjdGlvbi1kYXNoYm9hcmQgPiAudGFiYmVkJyk7XG4gICAgICAgIGxldCB0YWJiZWRfY2xhc3NlcyA9IHRhYmJlZC5hdHRyKCdjbGFzcycpLnNwbGl0KFwiIFwiKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0YWJiZWRfY2xhc3Nlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKHRhYmJlZF9jbGFzc2VzW2ldLmluZGV4T2YoJ3RhYi0nKSA+PSAwKSB7XG4gICAgICAgICAgICAgICAgdGFiYmVkX2NsYXNzZXNbaV0gPSBuZXdfdGFiO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRhYmJlZC5hdHRyKCdjbGFzcycsIHRhYmJlZF9jbGFzc2VzLmpvaW4oJyAnKSk7XG4gICAgfSk7XG5cbiAgICBib2R5Lm9uKCdpbnB1dCBjdXQgcGFzdGUnLCAnLmVtYWlsLWZpZWxkIGlucHV0W3R5cGU9ZW1haWxdJywgZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBsZXQgZmllbGQgPSAkKHRoaXMpO1xuICAgICAgICBsZXQgdmFsID0gZmllbGQudmFsKCk7XG4gICAgICAgIGxldCBvbGRWYWwgPSBmaWVsZC5kYXRhKCd2YWx1ZScpO1xuICAgICAgICBsZXQgd3JhcHBlciA9IGZpZWxkLnBhcmVudHMoJy5ncm91cC13cmFwcGVyJyk7XG4gICAgICAgIGxldCByZXBlYXRGaWVsZCA9IHdyYXBwZXIuZmluZCgnaW5wdXRbbmFtZT1lbWFpbF9yZXBlYXRdJyk7XG5cbiAgICAgICAgaWYgKHZhbCAhPT0gb2xkVmFsKSB7XG4gICAgICAgICAgICByZXBlYXRGaWVsZC5wcm9wKCdyZXF1aXJlZCcsdHJ1ZSk7XG4gICAgICAgICAgICByZXBlYXRGaWVsZC5wYXJlbnRzKCcudHRyLWlucHV0JykucmVtb3ZlQ2xhc3MoJ2hpZGRlbi1maWVsZCcpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVwZWF0RmllbGQucHJvcCgncmVxdWlyZWQnLCBmYWxzZSk7XG4gICAgICAgICAgICBsZXQgcmVwZWF0RmllbGRXcmFwcGVyID0gcmVwZWF0RmllbGQucGFyZW50cygnLnR0ci1pbnB1dCcpO1xuICAgICAgICAgICAgaWYgKCFyZXBlYXRGaWVsZFdyYXBwZXIuaGFzQ2xhc3MoJ2hpZGRlbi1maWVsZCcpKSB7XG4gICAgICAgICAgICAgICAgcmVwZWF0RmllbGRXcmFwcGVyLmFkZENsYXNzKCdoaWRkZW4tZmllbGQnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgYm9keS5vbignY2xpY2snLCAnLmJ0bi1ldmVudC1wYXJ0aWNpcGF0ZScsIGZ1bmN0aW9uIChlKSB7XG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgbGV0IGJ0biA9ICQodGhpcyk7XG4gICAgICAgIGxldCBncm91cF93cmFwcGVyID0gYnRuLnBhcmVudHMoJy5ncm91cF93cmFwcGVyJyk7XG4gICAgICAgIGxldCBldmVudF9pZCA9IGJ0bi5kYXRhKFwiZXZlbnQtaWRcIik7XG4gICAgICAgIGxldCBjb250YWN0X2lkID0gYnRuLmRhdGEoXCJjb250YWN0LWlkXCIpO1xuICAgICAgICBsZXQgcGFydGljaXBhbnRfaWQgPSBidG4uZGF0YShcImlkXCIpO1xuXG4gICAgICAgICQuYWpheCh7XG4gICAgICAgICAgICB0eXBlOiBcIlBPU1RcIixcbiAgICAgICAgICAgIHVybDogYWpheHVybCxcbiAgICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgICAgICBhY3Rpb246IFwiaWd6X2NybV9ldmVudHNfcGFydGljaXBhdGVcIixcbiAgICAgICAgICAgICAgICBldmVudF9pZDogZXZlbnRfaWQsXG4gICAgICAgICAgICAgICAgY29udGFjdF9pZDogY29udGFjdF9pZCxcbiAgICAgICAgICAgICAgICBwYXJ0aWNpcGFudF9pZDogcGFydGljaXBhbnRfaWRcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBiZWZvcmVTZW5kOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgZ3JvdXBfd3JhcHBlci5hcHBlbmQoJzxkaXYgY2xhc3M9XCJsb2FkZXItb3ZlcmxheVwiPjxkaXYgY2xhc3M9XCJsb2FkZXJcIj5Mb2FkaW5nLi4uPC9kaXY+PC9kaXY+Jyk7XG4gICAgICAgICAgICAgICAgZ3JvdXBfd3JhcHBlci5maW5kKCcubG9hZGVyLW92ZXJsYXknKS5hbmltYXRlKHtcIm9wYWNpdHlcIjogMX0sIDMwMCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29tcGxldGU6IGZ1bmN0aW9uIChyZXNwb25zZSkge1xuICAgICAgICAgICAgICAgIGdyb3VwX3dyYXBwZXIuZmluZCgnLmxvYWRlci1vdmVybGF5JykuYW5pbWF0ZSh7XCJvcGFjaXR5XCI6IDB9LCAzMDApO1xuXG4gICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIGdyb3VwX3dyYXBwZXIuZmluZCgnLmxvYWRlci1vdmVybGF5JykucmVtb3ZlKCk7XG4gICAgICAgICAgICAgICAgfSwgMzAwKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbiAocmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICBzaG93X25vdGlmaWNhdGlvbihyZXNwb25zZS5tc2csIHJlc3BvbnNlLnJlc3VsdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgYm9keS5maW5kKCdpbnB1dFtuYW1lPW1haW5PZmZpY2VJZF0nKS52YWwoYm9keS5maW5kKCdpbnB1dFtuYW1lPXByZWZpbGxfbWFpbk9mZmljZUlkXScpLnZhbCgpKTtcbiAgICBib2R5LmZpbmQoJ2lucHV0W25hbWU9ZW1haWxdJykuZWFjaChmdW5jdGlvbiAoaSkge1xuICAgICAgICBsZXQgZW1haWxfZmllbGQgPSAkKHRoaXMpO1xuICAgICAgICBsZXQgcGFyZW50cyA9IGVtYWlsX2ZpZWxkLnBhcmVudHMoJy50YWItcHJvZmlsZS1lbXBsb3llZXMsIC50YWItcHJvZmlsZS1jb21wYW5pZXMnKTtcbiAgICAgICAgaWYgKCFwYXJlbnRzLmxlbmd0aCkge1xuICAgICAgICAgICAgZW1haWxfZmllbGQudmFsKGJvZHkuZmluZCgnaW5wdXRbbmFtZT1wcmVmaWxsX2VtYWlsXScpLnZhbCgpKTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIGJvZHkuZmluZCgnaW5wdXRbbmFtZT10b2tlbl0nKS52YWwoYm9keS5maW5kKCdpbnB1dFtuYW1lPXByZWZpbGxfdG9rZW5dJykudmFsKCkpO1xuICAgIGJvZHkuZmluZCgnaW5wdXRbbmFtZT11bnRlcm5laG1lbl0nKS52YWwoYm9keS5maW5kKCdpbnB1dFtuYW1lPXByZWZpbGxfZmlybWVubmFtZV0nKS52YWwoKSk7XG4gICAgYm9keS5maW5kKCdpbnB1dFtuYW1lPW1pdGdsaWVkc251bW1lcl0nKS52YWwoYm9keS5maW5kKCdpbnB1dFtuYW1lPXByZWZpbGxfbWVtYmVyX25vXScpLnZhbCgpKTtcbiAgICBib2R5LmZpbmQoJ2lucHV0W25hbWU9dXNlcmlkXScpLnZhbCgrYm9keS5maW5kKCdzcGFuI1VzZXJJRCcpLnRleHQoKSk7XG5cbiAgICBib2R5Lm9uKCdjbGljaycsICcjdXBsb2FkLXNlcGEtbWFuZGF0ZSAuYnRuLXNlcGEtbWFuZGF0ZScsIGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBsZXQgYnRuID0gJCh0aGlzKTtcbiAgICAgICAgbGV0IGZvcm0gPSBidG4ucGFyZW50KCk7XG4gICAgICAgIGxldCB3cmFwcGVyID0gZm9ybS5wYXJlbnQoKTtcblxuICAgICAgICBsZXQgZmlsZSA9IHdyYXBwZXIuZmluZCgnaW5wdXRbdHlwZT1maWxlXScpO1xuICAgICAgICBpZiAoZmlsZS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBpZiAoZmlsZS52YWwoKSAhPT0gXCJcIikge1xuICAgICAgICAgICAgICAgIGxldCB3cmFwcGVyID0gZm9ybS5wYXJlbnQoKTtcbiAgICAgICAgICAgICAgICBsZXQgY2Y3ID0gd3JhcHBlci5maW5kKCcud3BjZjctZm9ybScpO1xuICAgICAgICAgICAgICAgIGNmNy5maW5kKCdpbnB1dFtuYW1lPW1pdGdsaWVkc251bW1lcl0nKS52YWwoZm9ybS5maW5kKCdpbnB1dFtuYW1lPW1lbWJlcl9ub10nKS52YWwoKSk7XG4gICAgICAgICAgICAgICAgY2Y3LmZpbmQoJy53cGNmNy1zdWJtaXQnKS5jbGljaygpO1xuICAgICAgICAgICAgICAgIHNob3dfbm90aWZpY2F0aW9uKCdEYXRlaSB3dXJkZSBnZXNlbmRldCcsICdzdWNjZXNzJyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHNob3dfbm90aWZpY2F0aW9uKCdCaXR0ZSB3w6RobGVuIFNpZSBlaW5lIERhdGVpIGF1cyEnLCAnZXJyb3InKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxldCBjZjcgPSB3cmFwcGVyLmZpbmQoJy53cGNmNy1mb3JtJyk7XG4gICAgICAgICAgICBjZjcuZmluZCgnLndwY2Y3LXN1Ym1pdCcpLmNsaWNrKCk7XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIGJvZHkub24oJ3dwY2Y3bWFpbHNlbnQnLCAnI3NlcGEtbWFuZGF0ZS1mb3JtJywgZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgc2hvd19ub3RpZmljYXRpb24oJ01hbmRhdCB3dXJkZSBnZXNlbmRldCcsICdzdWNjZXNzJyk7XG4gICAgfSk7XG5cbiAgICBib2R5Lm9uKCdjbGljaycsICcuYnRuLXNhdmUnLCBmdW5jdGlvbiAoZSkge1xuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGxldCBidG4gPSAkKHRoaXMpO1xuICAgICAgICBsZXQgZm9ybSA9IGJ0bi5wYXJlbnRzKCdmb3JtJyk7XG4gICAgICAgIGxldCBzZW5kRW1haWxzID0gW107XG5cbiAgICAgICAgbGV0IHBhc3MxID0gZm9ybS5maW5kKCdpbnB1dFtuYW1lPXBhc3N3b3JkXScpO1xuICAgICAgICBsZXQgcGFzczIgPSBmb3JtLmZpbmQoJ2lucHV0W25hbWU9cGFzc3dvcmRfcmVwZWF0XScpO1xuICAgICAgICBsZXQgaGFzUGFzc3dvcmRGaWVsZHMgPSBwYXNzMSAmJiBwYXNzMjtcblxuICAgICAgICBsZXQgZW1haWwxID0gZm9ybS5maW5kKCdpbnB1dFtuYW1lPWVtYWlsXScpO1xuICAgICAgICBsZXQgZW1haWwyID0gZm9ybS5maW5kKCdpbnB1dFtuYW1lPWVtYWlsX3JlcGVhdF0nKTtcbiAgICAgICAgbGV0IGhhc0VtYWlsRmllbGRzID0gZW1haWwxICYmIGVtYWlsMjtcblxuICAgICAgICBsZXQgZmlybWVubmFtZSA9IGZvcm0uZmluZCgnaW5wdXRbbmFtZT1maXJtZW5uYW1lXScpO1xuICAgICAgICBpZiAoZmlybWVubmFtZS52YWwoKSAhPT0gZmlybWVubmFtZS5kYXRhKCd2YWwnKSkge1xuICAgICAgICAgICAgc2VuZEVtYWlscy5wdXNoKCdmaXJtZW5uYW1lJyk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgZm9ybV92YWxpZCA9IGZvcm0udmFsaWQoKTtcbiAgICAgICAgbGV0IHBhc3NfdmFsaWQgPSAhaGFzUGFzc3dvcmRGaWVsZHMgfHwgaGFzUGFzc3dvcmRGaWVsZHMubGVuZ3RoID09PSAwIHx8IChoYXNQYXNzd29yZEZpZWxkcyAmJiAocGFzczEubmV4dCgncCcpLmhhc0NsYXNzKCdzdHJvbmctcGFzc3dvcmQnKSAmJiBwYXNzMS52YWwoKSA9PT0gcGFzczIudmFsKCkpKTtcbiAgICAgICAgbGV0IG1haWxfdmFsaWQgPSAhaGFzRW1haWxGaWVsZHMgfHwgaGFzRW1haWxGaWVsZHMubGVuZ3RoID09PSAwIHx8IChoYXNFbWFpbEZpZWxkcyAmJiBlbWFpbDEudmFsKCkgPT09IGVtYWlsMi52YWwoKSk7XG5cbiAgICAgICAgaWYgKGJ0bi5oYXNDbGFzcygnYnRuLWNoYW5nZS1wYXNzd29yZCcpKSB7XG4gICAgICAgICAgICBsZXQgcGFzc3dvcmRPbGRGaWVsZCA9IGZvcm0uZmluZCgnaW5wdXRbbmFtZT1wYXNzd29yZF9vbGQnKTtcbiAgICAgICAgICAgIGxldCBwYXNzd29yZE5ld0ZpZWxkID0gZm9ybS5maW5kKCdpbnB1dFtuYW1lPXBhc3N3b3JkJyk7XG4gICAgICAgICAgICBsZXQgcGFzc3dvcmROZXdSZXBlYXRGaWVsZCA9IGZvcm0uZmluZCgnaW5wdXRbbmFtZT1wYXNzd29yZF9yZXBlYXQnKTtcblxuICAgICAgICAgICAgaWYgKHBhc3N3b3JkT2xkRmllbGQudmFsKCkgPT09IFwiXCIpIHtcbiAgICAgICAgICAgICAgICBwYXNzd29yZE9sZEZpZWxkLmFkZENsYXNzKCdlcnJvcicpO1xuICAgICAgICAgICAgICAgIHBhc3N3b3JkT2xkRmllbGQucGFyZW50cygnLnR0ci1pbnB1dCcpLmFkZENsYXNzKCdlcnJvcicpO1xuICAgICAgICAgICAgICAgIGZvcm1fdmFsaWQgPSBmYWxzZTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcGFzc3dvcmROZXdGaWVsZC5yZW1vdmVDbGFzcygnZXJyb3InKTtcbiAgICAgICAgICAgICAgICBwYXNzd29yZE9sZEZpZWxkLnBhcmVudHMoJy50dHItaW5wdXQnKS5yZW1vdmVDbGFzcygnZXJyb3InKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHBhc3N3b3JkTmV3RmllbGQudmFsKCkgPT09IFwiXCIgfHwgcGFzc3dvcmROZXdGaWVsZC5uZXh0KCcuc3RyZW5ndGguc3Ryb25nLXBhc3N3b3JkJykubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgcGFzc3dvcmROZXdGaWVsZC5hZGRDbGFzcygnZXJyb3InKTtcbiAgICAgICAgICAgICAgICBwYXNzd29yZE5ld0ZpZWxkLnBhcmVudHMoJy50dHItaW5wdXQnKS5hZGRDbGFzcygnZXJyb3InKTtcbiAgICAgICAgICAgICAgICBwYXNzd29yZE5ld0ZpZWxkLnBhcmVudHMoJy50dHItaW5wdXQnKS5kYXRhKCdwbGFjZWhvbGRlcicsICdOZXVlcyBQYXNzd29ydCBpc3QgenUgdW5zaWNoZXInKTtcbiAgICAgICAgICAgICAgICBwYXNzd29yZE5ld0ZpZWxkLnBhcmVudHMoJy50dHItaW5wdXQnKS5hdHRyKCdkYXRhLXBsYWNlaG9sZGVyJywgJ05ldWVzIFBhc3N3b3J0IGlzdCB6dSB1bnNpY2hlcicpO1xuICAgICAgICAgICAgICAgIGZvcm1fdmFsaWQgPSBmYWxzZTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcGFzc3dvcmROZXdGaWVsZC5yZW1vdmVDbGFzcygnZXJyb3InKTtcbiAgICAgICAgICAgICAgICBwYXNzd29yZE5ld0ZpZWxkLnBhcmVudHMoJy50dHItaW5wdXQnKS5yZW1vdmVDbGFzcygnZXJyb3InKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHBhc3N3b3JkTmV3UmVwZWF0RmllbGQudmFsKCkgPT09IFwiXCIgfHwgcGFzc3dvcmROZXdSZXBlYXRGaWVsZC52YWwoKSAhPT0gcGFzc3dvcmROZXdGaWVsZC52YWwoKSkge1xuICAgICAgICAgICAgICAgIHBhc3N3b3JkTmV3UmVwZWF0RmllbGQuYWRkQ2xhc3MoJ2Vycm9yJyk7XG4gICAgICAgICAgICAgICAgcGFzc3dvcmROZXdSZXBlYXRGaWVsZC5wYXJlbnRzKCcudHRyLWlucHV0JykuYWRkQ2xhc3MoJ2Vycm9yJyk7XG4gICAgICAgICAgICAgICAgcGFzc3dvcmROZXdSZXBlYXRGaWVsZC5wYXJlbnRzKCcudHRyLWlucHV0JykuZGF0YSgncGxhY2Vob2xkZXInLCAnUGFzc3fDtnJ0ZXIgc3RpbW1lbiBuaWNodCDDvGJlcmVpbicpO1xuICAgICAgICAgICAgICAgIHBhc3N3b3JkTmV3UmVwZWF0RmllbGQucGFyZW50cygnLnR0ci1pbnB1dCcpLmF0dHIoJ2RhdGEtcGxhY2Vob2xkZXInLCAnUGFzc3fDtnJ0ZXIgc3RpbW1lbiBuaWNodCDDvGJlcmVpbicpO1xuICAgICAgICAgICAgICAgIGZvcm1fdmFsaWQgPSBmYWxzZTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcGFzc3dvcmROZXdSZXBlYXRGaWVsZC5yZW1vdmVDbGFzcygnZXJyb3InKTtcbiAgICAgICAgICAgICAgICBwYXNzd29yZE5ld1JlcGVhdEZpZWxkLnBhcmVudHMoJy50dHItaW5wdXQnKS5yZW1vdmVDbGFzcygnZXJyb3InKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbGV0IGVycm9yX3R4dCA9IGZvcm0ucGFyZW50cygnLmdyb3VwLXdyYXBwZXInKS5maW5kKCc+IHAnKTtcbiAgICAgICAgICAgIGlmICghZm9ybV92YWxpZCkge1xuICAgICAgICAgICAgICAgIGlmICghZXJyb3JfdHh0Lmhhc0NsYXNzKCdlcnJvcicpKSB7XG4gICAgICAgICAgICAgICAgICAgIGVycm9yX3R4dC5hZGRDbGFzcygnZXJyb3InKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGVycm9yX3R4dC5yZW1vdmVDbGFzcygnZXJyb3InKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChmb3JtX3ZhbGlkKSB7XG4gICAgICAgICAgICBkYXNoYm9hcmRfc2F2ZV9kYXRhKGJ0biwgc2VuZEVtYWlscyk7XG5cbiAgICAgICAgICAgIGxldCBzaWJsaW5nRm9ybSA9IGZvcm0ucGFyZW50KCkuZmluZCgnI3Byb29mX29mX2J1c2luZXNzX2Zvcm0nKTtcbiAgICAgICAgICAgIGlmIChzaWJsaW5nRm9ybS5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgICAgICBsZXQgbWl0Z2xpZWRzbnVtbWVyID0gc2libGluZ0Zvcm0uZmluZCgnaW5wdXRbbmFtZT1taXRnbGllZHNudW1tZXJdJykudmFsKCk7XG4gICAgICAgICAgICAgICAgbGV0IHByb29mX29mX2J1c2luZXNzID0gc2libGluZ0Zvcm0uZmluZCgnaW5wdXRbbmFtZT1wcm9vZl9vZl9idXNpbmVzc10nKS52YWwoKTtcbiAgICAgICAgICAgICAgICBpZiAobWl0Z2xpZWRzbnVtbWVyICE9PSB1bmRlZmluZWQgJiYgbWl0Z2xpZWRzbnVtbWVyICE9PSBcIlwiICYmIHByb29mX29mX2J1c2luZXNzICE9PSB1bmRlZmluZWQgJiYgcHJvb2Zfb2ZfYnVzaW5lc3MgIT09IFwiXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgc2libGluZ0Zvcm0uZmluZCgnLndwY2Y3LXN1Ym1pdCcpLmNsaWNrKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICBib2R5Lm9uKCdjaGFuZ2UnLCdpbnB1dFtuYW1lPXByb29mX29mX2J1c2luZXNzXScsIGZ1bmN0aW9uIChlKSB7XG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgbGV0IGlucHV0ID0gJCh0aGlzKTtcbiAgICAgICAgbGV0IGdyb3VwX3dyYXBwZXIgPSBpbnB1dC5wYXJlbnRzKCcuZ3JvdXAtd3JhcHBlcicpO1xuICAgICAgICBsZXQgYnRuID0gZ3JvdXBfd3JhcHBlci5maW5kKCcuYnRuLXNhdmUnKTtcblxuICAgICAgICBpZiAoaW5wdXQudmFsKCkgIT09IFwiXCIpIHtcbiAgICAgICAgICAgIGJ0bi5yZW1vdmVDbGFzcygnYnRuLWRpc2FibGVkJyk7XG4gICAgICAgICAgICBidG4ucHJvcCgnZGlzYWJsZWQnLCBmYWxzZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoIWJ0bi5oYXNDbGFzcygnYnRuLWRpc2FibGVkJykpIHtcbiAgICAgICAgICAgICAgICBidG4uYWRkQ2xhc3MoJ2J0bi1kaXNhYmxlZCcpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnRuLnByb3AoJ2Rpc2FibGVkJywgdHJ1ZSk7XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIGJvZHkub24oJ2lucHV0IGN1dCBwYXN0ZScsICcudGFiLXByb2ZpbGUtY29tcGFuaWVzIGlucHV0JywgZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgbGV0IGVsZW1lbnQgPSAkKHRoaXMpO1xuICAgICAgICBsZXQgdGFiID0gZWxlbWVudC5wYXJlbnRzKCcudGFiLXByb2ZpbGUtY29tcGFuaWVzJyk7XG4gICAgICAgIGxldCBmb3JtID0gZWxlbWVudC5wYXJlbnRzKCdmb3JtJyk7XG4gICAgICAgIGxldCBidG4gPSBmb3JtLmZpbmQoJy5idG4tc2F2ZScpO1xuICAgICAgICBsZXQgZmlybWVubmFtZSA9ICQoJy50YWItcHJvZmlsZS1jb21wYW5pZXMgaW5wdXRbbmFtZT1maXJtZW5uYW1lXScpO1xuICAgICAgICBsZXQgZmlybWVubmFtZV9jaGFuZ2VkID0gZmlybWVubmFtZS52YWwoKSAhPT0gZmlybWVubmFtZS5kYXRhKCd2YWx1ZScpO1xuICAgICAgICBsZXQgZmlybWVubmFtZTIgPSAkKCcudGFiLXByb2ZpbGUtY29tcGFuaWVzIGlucHV0W25hbWU9ZmlybWVubmFtZTJdJyk7XG4gICAgICAgIGxldCBmaXJtZW5uYW1lMl9jaGFuZ2VkID0gZmlybWVubmFtZTIudmFsKCkgIT09IGZpcm1lbm5hbWUyLmRhdGEoJ3ZhbHVlJyk7XG4gICAgICAgIGxldCBzdHJhc3NlID0gJCgnLnRhYi1wcm9maWxlLWNvbXBhbmllcyBpbnB1dFtuYW1lPXN0cmFzc2VdJyk7XG4gICAgICAgIGxldCBzdHJhc3NlX2NoYW5nZWQgPSBzdHJhc3NlLnZhbCgpICE9PSBzdHJhc3NlLmRhdGEoJ3ZhbHVlJyk7XG4gICAgICAgIGxldCBwb3N0bGVpdHphaGwgPSAkKCcudGFiLXByb2ZpbGUtY29tcGFuaWVzIGlucHV0W25hbWU9cG9zdGxlaXR6YWhsXScpO1xuICAgICAgICBsZXQgcG9zdGxlaXR6YWhsX2NoYW5nZWQgPSBwb3N0bGVpdHphaGwudmFsKCkudG9TdHJpbmcoKSAhPT0gcG9zdGxlaXR6YWhsLmRhdGEoJ3ZhbHVlJykudG9TdHJpbmcoKTtcbiAgICAgICAgbGV0IG9ydCA9ICQoJy50YWItcHJvZmlsZS1jb21wYW5pZXMgaW5wdXRbbmFtZT1vcnRdJyk7XG4gICAgICAgIGxldCBvcnRfY2hhbmdlZCA9IG9ydC52YWwoKSAhPT0gb3J0LmRhdGEoJ3ZhbHVlJyk7XG4gICAgICAgIGxldCBidW5kZXNsYW5kID0gJCgnLnRhYi1wcm9maWxlLWNvbXBhbmllcyBpbnB1dFtuYW1lPWJ1bmRlc2xhbmRdJyk7XG4gICAgICAgIGxldCBidW5kZXNsYW5kX2NoYW5nZWQgPSBidW5kZXNsYW5kLnZhbCgpICE9PSBidW5kZXNsYW5kLmRhdGEoJ3ZhbHVlJyk7XG4gICAgICAgIGxldCByZWdpb24gPSAkKCcudGFiLXByb2ZpbGUtY29tcGFuaWVzIGlucHV0W25hbWU9cmVnaW9uXScpO1xuICAgICAgICBsZXQgcmVnaW9uX2NoYW5nZWQgPSByZWdpb24udmFsKCkgIT09IHJlZ2lvbi5kYXRhKCd2YWx1ZScpO1xuICAgICAgICBsZXQgbGFuZCA9ICQoJy50YWItcHJvZmlsZS1jb21wYW5pZXMgaW5wdXRbbmFtZT1sYW5kXScpO1xuICAgICAgICBsZXQgbGFuZF9jaGFuZ2VkID0gbGFuZC52YWwoKSAhPT0gbGFuZC5kYXRhKCd2YWx1ZScpO1xuXG4gICAgICAgIGxldCBmaWxlX3VwbG9hZF9mb3JtID0gJCh0aGlzKS5wYXJlbnRzKCcudGFiLXByb2ZpbGUtY29tcGFuaWVzJykuZmluZCgnI3Byb29mX29mX2J1c2luZXNzX2Zvcm0nKTtcbiAgICAgICAgbGV0IGZpbGVfdXBsb2FkX2ZpZWxkID0gZmlsZV91cGxvYWRfZm9ybS5maW5kKCcuYnVzaW5lc3MtcmVnaXN0ZXItZmlsZSBpbnB1dFt0eXBlPWZpbGVdJyk7XG4gICAgICAgIGlmICghZmlybWVubmFtZV9jaGFuZ2VkICYmICFmaXJtZW5uYW1lMl9jaGFuZ2VkICYmICFzdHJhc3NlX2NoYW5nZWQgJiYgIXBvc3RsZWl0emFobF9jaGFuZ2VkICYmICFvcnRfY2hhbmdlZCAmJiAhYnVuZGVzbGFuZF9jaGFuZ2VkICYmICFyZWdpb25fY2hhbmdlZCAmJiAhbGFuZF9jaGFuZ2VkKSB7XG4gICAgICAgICAgICBmaWxlX3VwbG9hZF9mb3JtLmFkZENsYXNzKCdoaWRkZW4tZmllbGQnKTtcbiAgICAgICAgICAgIGZpbGVfdXBsb2FkX2ZpZWxkLmFkZENsYXNzKCdoaWRkZW4tZmllbGQnKTtcbiAgICAgICAgICAgIGZpbGVfdXBsb2FkX2ZpZWxkLnByb3AoJ3JlcXVpcmVkJywgZmFsc2UpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbGV0IG1lbWJlcm5vX2ZpZWxkID0gZmlsZV91cGxvYWRfZm9ybS5maW5kKCdpbnB1dFtuYW1lPW1pdGdsaWVkc251bW1lcl0nKTtcbiAgICAgICAgICAgIG1lbWJlcm5vX2ZpZWxkLnZhbCgkKCcudGFiLXByb2ZpbGUtY29tcGFuaWVzIGlucHV0W25hbWU9bWVtYmVyc2hvcF9ub10nKS52YWwoKSk7XG4gICAgICAgICAgICBmaWxlX3VwbG9hZF9mb3JtLnJlbW92ZUNsYXNzKCdoaWRkZW4tZmllbGQnKTtcbiAgICAgICAgICAgIGZpbGVfdXBsb2FkX2ZpZWxkLnJlbW92ZUNsYXNzKCdoaWRkZW4tZmllbGQnKTtcbiAgICAgICAgICAgIGZpbGVfdXBsb2FkX2ZpZWxkLnByb3AoJ3JlcXVpcmVkJywgdHJ1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoKCFmaXJtZW5uYW1lX2NoYW5nZWQgJiYgIWZpcm1lbm5hbWUyX2NoYW5nZWQgJiYgIXN0cmFzc2VfY2hhbmdlZCAmJiAhcG9zdGxlaXR6YWhsX2NoYW5nZWQgJiYgIW9ydF9jaGFuZ2VkICYmICFidW5kZXNsYW5kX2NoYW5nZWQgJiYgIXJlZ2lvbl9jaGFuZ2VkICYmICFsYW5kX2NoYW5nZWQpIHx8ICQoJ2lucHV0W25hbWU9cHJvb2Zfb2ZfYnVzaW5lc3NdJykudmFsKCkgIT09IFwiXCIpIHtcbiAgICAgICAgICAgIGJ0bi5yZW1vdmVDbGFzcygnYnRuLWRpc2FibGVkJyk7XG4gICAgICAgICAgICBidG4ucHJvcCgnZGlzYWJsZWQnLCBmYWxzZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoIWJ0bi5oYXNDbGFzcygnYnRuLWRpc2FibGVkJykpIHtcbiAgICAgICAgICAgICAgICBidG4uYWRkQ2xhc3MoJ2J0bi1kaXNhYmxlZCcpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnRuLnByb3AoJ2Rpc2FibGVkJywgdHJ1ZSk7XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgICQoJy5jcm0tZ2V0LWZpbGUnKS5lYWNoKGZ1bmN0aW9uIChpbmRleCkge1xuICAgICAgICBsZXQgZWxlbWVudCA9ICQodGhpcyk7XG4gICAgICAgIGxldCBidG5fcHJldmlldyA9IGVsZW1lbnQuZmluZCgnYS5idG4uYnRuLXByaW1hcnkuZmlsZS1wcmV2aWV3Jyk7XG4gICAgICAgIGxldCBidG5fZG93bmxvYWQgPSBlbGVtZW50LmZpbmQoJ2EuYnRuLmJ0bi1wcmltYXJ5LmZpbGUtZG93bmxvYWQnKTtcbiAgICAgICAgJC5hamF4KHtcbiAgICAgICAgICAgIHR5cGU6IFwiUE9TVFwiLFxuICAgICAgICAgICAgdXJsOiBhamF4dXJsLFxuICAgICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgICAgIGFjdGlvbjogXCJjcm1fZ2V0X2ZpbGVcIixcbiAgICAgICAgICAgICAgICBjcm1HdWlkOiBlbGVtZW50LmRhdGEoXCJndWlkXCIpLFxuICAgICAgICAgICAgICAgIHR5cGU6IGVsZW1lbnQuZGF0YShcInR5cGVcIilcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBiZWZvcmVTZW5kOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29tcGxldGU6IGZ1bmN0aW9uIChyZXNwb25zZSkge1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uIChyZXNwb25zZSkge1xuICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZS5zcmMpIHtcbiAgICAgICAgICAgICAgICAgICAgYnRuX3ByZXZpZXcuZGF0YSgnc3JjJywgcmVzcG9uc2Uuc3JjKTtcbiAgICAgICAgICAgICAgICAgICAgYnRuX2Rvd25sb2FkLmF0dHIoJ2hyZWYnLCByZXNwb25zZS5zcmMpO1xuXG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQucmVtb3ZlQ2xhc3MoJ2hpZGRlbicpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQucmVtb3ZlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9KTtcblxuICAgIGJvZHkub24oJ2NoYW5nZScsICcuY29uZmlybS1kZWFjdGl2YXRpb24nLCBmdW5jdGlvbiAoZSkge1xuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGxldCBjaGVjayA9ICQodGhpcyk7XG4gICAgICAgIGxldCBhY3Rpb25zID0gY2hlY2sucGFyZW50cygnLmFjdGlvbnMnKTtcbiAgICAgICAgbGV0IGJ0biA9IGFjdGlvbnMuZmluZCgnLmJ0bicpO1xuICAgICAgICBsZXQgaW5mbyA9IGFjdGlvbnMuZmluZCgnc3BhbicpO1xuICAgICAgICBpZiAoY2hlY2suaXMoJzpjaGVja2VkJykpIHtcbiAgICAgICAgICAgIGluZm8ucmVtb3ZlQ2xhc3MoJ2hpZGRlbicpO1xuICAgICAgICAgICAgYnRuLnJlbW92ZUNsYXNzKCdkaXNhYmxlZCcpO1xuICAgICAgICAgICAgYnRuLnJlbW92ZUNsYXNzKCdidG4tZGlzYWJsZWQnKTtcbiAgICAgICAgICAgIGJ0bi5yZW1vdmVDbGFzcygnYnRuLWRlYWN0aXZhdGUtZGlzYWJsZWQnKTtcbiAgICAgICAgICAgIGJ0bi5hZGRDbGFzcygnYnRuLWRlYWN0aXZhdGUnKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGluZm8uYWRkQ2xhc3MoJ2hpZGRlbicpO1xuICAgICAgICAgICAgYnRuLnJlbW92ZUNsYXNzKCdidG4tZGVhY3RpdmF0ZScpO1xuICAgICAgICAgICAgYnRuLmFkZENsYXNzKCdkaXNhYmxlZCcpO1xuICAgICAgICAgICAgYnRuLmFkZENsYXNzKCdidG4tZGlzYWJsZWQnKTtcbiAgICAgICAgICAgIGJ0bi5hZGRDbGFzcygnYnRuLWRlYWN0aXZhdGUtZGlzYWJsZWQnKTtcbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgYm9keS5vbignY2xpY2snLCAnLmJ0bi1kZWFjdGl2YXRlJywgZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBsZXQgYnRuID0gJCh0aGlzKTtcbiAgICAgICAgbGV0IGdyb3VwX3dyYXBwZXIgPSBidG4ucGFyZW50cygnLmdyb3VwX3dyYXBwZXInKTtcblxuICAgICAgICAkLmFqYXgoe1xuICAgICAgICAgICAgdHlwZTogXCJQT1NUXCIsXG4gICAgICAgICAgICB1cmw6IGFqYXh1cmwsXG4gICAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICAgICAgYWN0aW9uOiAnaWd6X2NybV9kZWFjdGl2YXRlJyxcbiAgICAgICAgICAgICAgICBjcm1HdWlkOiBidG4uZGF0YSgnY3JtZ3VpZCcpLFxuICAgICAgICAgICAgICAgIHVzZXJFbWFpbDogYnRuLmRhdGEoJ2VtYWlsJylcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBiZWZvcmVTZW5kOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgZ3JvdXBfd3JhcHBlci5hcHBlbmQoJzxkaXYgY2xhc3M9XCJsb2FkZXItb3ZlcmxheVwiPjxkaXYgY2xhc3M9XCJsb2FkZXJcIj5Mb2FkaW5nLi4uPC9kaXY+PC9kaXY+Jyk7XG4gICAgICAgICAgICAgICAgZ3JvdXBfd3JhcHBlci5maW5kKCcubG9hZGVyLW92ZXJsYXknKS5hbmltYXRlKHtcIm9wYWNpdHlcIjogMX0sIDMwMCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29tcGxldGU6IGZ1bmN0aW9uIChyZXNwb25zZSkge1xuICAgICAgICAgICAgICAgIGdyb3VwX3dyYXBwZXIuZmluZCgnLmxvYWRlci1vdmVybGF5JykuYW5pbWF0ZSh7XCJvcGFjaXR5XCI6IDB9LCAzMDApO1xuXG4gICAgICAgICAgICAgICAgc2hvd19ub3RpZmljYXRpb24ocmVzcG9uc2UucmVzcG9uc2VKU09OLm1zZywgJ3N1Y2Nlc3MnKTtcblxuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBncm91cF93cmFwcGVyLmZpbmQoJy5sb2FkZXItb3ZlcmxheScpLnJlbW92ZSgpO1xuICAgICAgICAgICAgICAgIH0sIDMwMCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24gKHJlc3BvbnNlKSB7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgYm9keS5vbignY2xpY2snLCAnLmJ0bi1pbnZpdGUnLCBmdW5jdGlvbiAoZSkge1xuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGxldCBlbGVtZW50ID0gJCh0aGlzKTtcbiAgICAgICAgbGV0IGZvcm0gPSBlbGVtZW50LnBhcmVudHMoJ2Zvcm0nKTtcbiAgICAgICAgbGV0IGZvcm1EYXRhID0gZm9ybS5zZXJpYWxpemVBcnJheSgpO1xuICAgICAgICBsZXQgZ3JvdXBfd3JhcHBlciA9IGZvcm0ucGFyZW50KCk7XG5cbiAgICAgICAgJC5hamF4KHtcbiAgICAgICAgICAgIHR5cGU6IFwiUE9TVFwiLFxuICAgICAgICAgICAgdXJsOiBhamF4dXJsLFxuICAgICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgICAgIGFjdGlvbjogJ2lnel9zZW5kX2ludml0YXRpb25zJyxcbiAgICAgICAgICAgICAgICBmb3JtRGF0YTogZm9ybURhdGFcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBiZWZvcmVTZW5kOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgZ3JvdXBfd3JhcHBlci5hcHBlbmQoJzxkaXYgY2xhc3M9XCJsb2FkZXItb3ZlcmxheVwiPjxkaXYgY2xhc3M9XCJsb2FkZXJcIj5Mb2FkaW5nLi4uPC9kaXY+PC9kaXY+Jyk7XG4gICAgICAgICAgICAgICAgZ3JvdXBfd3JhcHBlci5maW5kKCcubG9hZGVyLW92ZXJsYXknKS5hbmltYXRlKHtcIm9wYWNpdHlcIjogMX0sIDMwMCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29tcGxldGU6IGZ1bmN0aW9uIChyZXNwb25zZSkge1xuICAgICAgICAgICAgICAgIGdyb3VwX3dyYXBwZXIuZmluZCgnLmxvYWRlci1vdmVybGF5JykuYW5pbWF0ZSh7XCJvcGFjaXR5XCI6IDB9LCAzMDApO1xuXG4gICAgICAgICAgICAgICAgbGV0IGlzX29ubHlfYnV0dG9uID0gZWxlbWVudC5pcygnOmZpcnN0LW9mLXR5cGUnKSAmJiBlbGVtZW50LmlzKCc6bGFzdC1vZi10eXBlJyk7XG4gICAgICAgICAgICAgICAgZWxlbWVudC5hdHRyKFwidHlwZVwiKSAhPT0gXCJjaGVja2JveFwiICYmICFpc19vbmx5X2J1dHRvbiA/IGVsZW1lbnQuY3NzKHtcImRpc3BsYXlcIjogXCJub25lXCJ9KSA6IGZhbHNlO1xuXG4gICAgICAgICAgICAgICAgc2hvd19ub3RpZmljYXRpb24ocmVzcG9uc2UucmVzcG9uc2VKU09OLm1zZywgJ3N1Y2Nlc3MnKTtcblxuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBncm91cF93cmFwcGVyLmZpbmQoJy5sb2FkZXItb3ZlcmxheScpLnJlbW92ZSgpO1xuICAgICAgICAgICAgICAgIH0sIDMwMCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24gKHJlc3BvbnNlKSB7XG4gICAgICAgICAgICAgICAgLy9jb25zb2xlLmxvZyhyZXNwb25zZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZnVuY3Rpb24gZGFzaGJvYXJkX3NhdmVfZGF0YShlbGVtZW50KSB7XG4gICAgICAgIGxldCBmb3JtID0gZWxlbWVudC5wYXJlbnRzKCdmb3JtJyk7XG4gICAgICAgIGxldCBmb3JtRGF0YSA9IGZvcm0uc2VyaWFsaXplQXJyYXkoKTtcbiAgICAgICAgbGV0IGZvcm1EYXRhQ2hhbmdlZCA9IFtdO1xuICAgICAgICBsZXQgYXJncyA9IFtdO1xuICAgICAgICBsZXQgZ3JvdXBfd3JhcHBlciA9IGZvcm0ucGFyZW50KCk7XG4gICAgICAgIGxldCBjcm1HdWlkID0gZWxlbWVudC5kYXRhKFwiY3JtZ3VpZFwiKTtcbiAgICAgICAgbGV0IGdyb3VwID0gZWxlbWVudC5kYXRhKCdncm91cCcpO1xuICAgICAgICBsZXQgZGF0YVR5cGUgPSBcIlwiO1xuICAgICAgICBsZXQgZGF0YVZhbHVlID0gXCJcIjtcbiAgICAgICAgaWYgKGVsZW1lbnQuZGF0YSgnZ3JvdXAnKSA9PT0gJ21lbWJlcicpIHtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZm9ybURhdGEubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBsZXQgbmFtZSA9IGZvcm1EYXRhW2ldLm5hbWU7XG4gICAgICAgICAgICAgICAgbGV0IHZhbHVlID0gZm9ybURhdGFbaV0udmFsdWU7XG4gICAgICAgICAgICAgICAgbGV0IGRhdGFGaWVsZCA9IGZvcm0uZmluZCgnaW5wdXRbbmFtZT0nICsgbmFtZSArICddJyk7XG4gICAgICAgICAgICAgICAgbGV0IGRhdGFWYWx1ZSA9IGRhdGFGaWVsZC5kYXRhKCd2YWx1ZScpO1xuICAgICAgICAgICAgICAgIGlmICh2YWx1ZSAhPT0gZGF0YVZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIGZvcm1EYXRhQ2hhbmdlZC5wdXNoKGZvcm1EYXRhW2ldKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgZmlybWEgPSBcIlwiO1xuICAgICAgICBsZXQgYW5yZWRlID0gXCJcIjtcbiAgICAgICAgbGV0IHZvcm5hbWUgPSBcIlwiO1xuICAgICAgICBsZXQgbmFjaG5hbWUgPSBcIlwiO1xuICAgICAgICBsZXQgc3RyYXNzZSA9IFwiXCI7XG4gICAgICAgIGxldCBwbHogPSBcIlwiO1xuICAgICAgICBsZXQgb3J0ID0gXCJcIjtcbiAgICAgICAgaWYgKGVsZW1lbnQuaGFzQ2xhc3MoJ2J0bi1kaXN0cmlidXRvcicpKSB7XG4gICAgICAgICAgICBkYXRhVHlwZSA9IFwic2V0RGlzdHJpYnV0b3JcIjtcbiAgICAgICAgICAgIGZvcm1EYXRhID0gXCJcIjtcblxuICAgICAgICAgICAgZm9ybS5hdHRyKCdpZCcsICd0ZW1wLWFjdGl2ZS1mb3JtJyk7XG4gICAgICAgICAgICBmb3JtLmZpbmQoJ2lucHV0W3R5cGU9Y2hlY2tib3hdJykuZWFjaChmdW5jdGlvbiAoaW5kZXgpIHtcbiAgICAgICAgICAgICAgICBsZXQgZmllbGQgPSAkKHRoaXMpO1xuICAgICAgICAgICAgICAgIGxldCB2YWx1ZSA9IGZpZWxkLmF0dHIoJ3ZhbHVlJyk7XG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZpZWxkLmlzKCc6Y2hlY2tlZCcpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JtRGF0YSArPSBmb3JtRGF0YSA9PT0gJycgPyB2YWx1ZSA6ICcsJyArIHZhbHVlO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVZhbHVlICs9IGRhdGFWYWx1ZSA9PT0gJycgPyB2YWx1ZSA6ICcsJyArIHZhbHVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGZpcm1hID0gZm9ybS5maW5kKCdpbnB1dFtuYW1lPWZpcm1hXScpLnZhbCgpO1xuICAgICAgICAgICAgYW5yZWRlID0gZm9ybS5maW5kKCdpbnB1dFtuYW1lPWFucmVkZV0nKS52YWwoKTtcbiAgICAgICAgICAgIHZvcm5hbWUgPSBmb3JtLmZpbmQoJ2lucHV0W25hbWU9dm9ybmFtZV0nKS52YWwoKTtcbiAgICAgICAgICAgIG5hY2huYW1lID0gZm9ybS5maW5kKCdpbnB1dFtuYW1lPW5hY2huYW1lXScpLnZhbCgpO1xuICAgICAgICAgICAgc3RyYXNzZSA9IGZvcm0uZmluZCgnaW5wdXRbbmFtZT1zdHJhc3NlXScpLnZhbCgpO1xuICAgICAgICAgICAgcGx6ID0gZm9ybS5maW5kKCdpbnB1dFtuYW1lPXBvc3RsZWl0emFobF0nKS52YWwoKTtcbiAgICAgICAgICAgIG9ydCA9IGZvcm0uZmluZCgnaW5wdXRbbmFtZT1vcnRdJykudmFsKCk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgZW1haWwgPSBmb3JtLmZpbmQoJ2lucHV0W3R5cGU9ZW1haWxdJykudmFsKCk7XG4gICAgICAgIGxldCBlbWFpbE9sZCA9IGZvcm0uZmluZCgnaW5wdXRbdHlwZT1lbWFpbF0nKS5kYXRhKCd2YWx1ZScpO1xuICAgICAgICBlbWFpbCA9IGVtYWlsICE9PSB1bmRlZmluZWQgJiYgZW1haWwgIT09IGVtYWlsT2xkID8gZW1haWwgOiBcIlwiO1xuICAgICAgICBsZXQgcHJpdmFjeSA9IGZvcm0uZmluZCgnbGFiZWwuY2hlY2tib3guYWNjZXB0LXByaXZhY3knKS5kYXRhKCd2YWx1ZScpO1xuICAgICAgICBsZXQgYWN0aW9uID0gXCJpZ3pfY3JtX1wiICsgZ3JvdXAgKyBcIl91cGRhdGVcIjtcbiAgICAgICAgalF1ZXJ5LmFqYXgoe1xuICAgICAgICAgICAgdHlwZTogXCJQT1NUXCIsXG4gICAgICAgICAgICB1cmw6IGFqYXh1cmwsXG4gICAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICAgICAgYWN0aW9uOiBhY3Rpb24sXG4gICAgICAgICAgICAgICAgY3JtR3VpZDogY3JtR3VpZCxcbiAgICAgICAgICAgICAgICBmb3JtRGF0YTogZm9ybURhdGEsXG4gICAgICAgICAgICAgICAgZGF0YVR5cGU6IGRhdGFUeXBlLFxuICAgICAgICAgICAgICAgIGZpcm1hOiBmaXJtYSxcbiAgICAgICAgICAgICAgICBhbnJlZGU6IGFucmVkZSxcbiAgICAgICAgICAgICAgICB2b3JuYW1lOiB2b3JuYW1lLFxuICAgICAgICAgICAgICAgIG5hY2huYW1lOiBuYWNobmFtZSxcbiAgICAgICAgICAgICAgICBzdHJhc3NlOiBzdHJhc3NlLFxuICAgICAgICAgICAgICAgIHBsejogcGx6LFxuICAgICAgICAgICAgICAgIG9ydDogb3J0LFxuICAgICAgICAgICAgICAgIGRhdGFWYWx1ZTogZGF0YVZhbHVlLFxuICAgICAgICAgICAgICAgIGFyZ3M6IGFyZ3MsXG4gICAgICAgICAgICAgICAgcmVxdWVzdDogZWxlbWVudC5kYXRhKCdyZXF1ZXN0JyksXG4gICAgICAgICAgICAgICAgZW1haWw6IGVtYWlsLFxuICAgICAgICAgICAgICAgIHByaXZhY3k6IHByaXZhY3kgIT09IHVuZGVmaW5lZCA/IHByaXZhY3kgOiBcIlwiXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYmVmb3JlU2VuZDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGdyb3VwX3dyYXBwZXIuYXBwZW5kKCc8ZGl2IGNsYXNzPVwibG9hZGVyLW92ZXJsYXlcIj48ZGl2IGNsYXNzPVwibG9hZGVyXCI+TG9hZGluZy4uLjwvZGl2PjwvZGl2PicpO1xuICAgICAgICAgICAgICAgIGdyb3VwX3dyYXBwZXIuZmluZCgnLmxvYWRlci1vdmVybGF5JykuYW5pbWF0ZSh7XCJvcGFjaXR5XCI6IDF9LCAzMDApO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNvbXBsZXRlOiBmdW5jdGlvbiAocmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICBncm91cF93cmFwcGVyLmZpbmQoJy5sb2FkZXItb3ZlcmxheScpLmFuaW1hdGUoe1wib3BhY2l0eVwiOiAwfSwgMzAwKTtcblxuICAgICAgICAgICAgICAgIGxldCBpc19vbmx5X2J1dHRvbiA9IGVsZW1lbnQuaXMoJzpmaXJzdC1vZi10eXBlJykgJiYgZWxlbWVudC5pcygnOmxhc3Qtb2YtdHlwZScpO1xuICAgICAgICAgICAgICAgIGVsZW1lbnQuYXR0cihcInR5cGVcIikgIT09IFwiY2hlY2tib3hcIiAmJiAhaXNfb25seV9idXR0b24gPyBlbGVtZW50LmNzcyh7XCJkaXNwbGF5XCI6IFwibm9uZVwifSkgOiBmYWxzZTtcbiAgICAgICAgICAgICAgICBncm91cF93cmFwcGVyLmZpbmQoJy5hY3Rpb25zIC5idG4tY2FuY2VsJykuY3NzKHtcImRpc3BsYXlcIjogXCJub25lXCJ9KTtcbiAgICAgICAgICAgICAgICBncm91cF93cmFwcGVyLmZpbmQoJy5hY3Rpb25zIC5idG4tZWRpdCcpLmNzcyh7XCJkaXNwbGF5XCI6IFwiaW5saW5lLWZsZXhcIn0pO1xuXG4gICAgICAgICAgICAgICAgZ3JvdXBfd3JhcHBlci5maW5kKCcudHRyLWlucHV0JykuZWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBpbnB1dCA9ICQodGhpcyk7XG4gICAgICAgICAgICAgICAgICAgIGlucHV0Lmhhc0NsYXNzKCdhbHdheXMtZm9jdXNlZCcpID8gaW5wdXQucmVtb3ZlQ2xhc3MoJ2Fsd2F5cy1mb2N1c2VkJykgOiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBzaG93X25vdGlmaWNhdGlvbihyZXNwb25zZS5yZXNwb25zZUpTT04ubXNnLCAnc3VjY2VzcycpO1xuXG4gICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIGdyb3VwX3dyYXBwZXIuZmluZCgnLmxvYWRlci1vdmVybGF5JykucmVtb3ZlKCk7XG4gICAgICAgICAgICAgICAgfSwgMzAwKTtcbiAgICAgICAgICAgICAgICBmb3JtLmF0dHIoJ2lkJywgJycpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uIChyZXNwb25zZSkge1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG59KTtcbiJdLCJmaWxlIjoiY29udGVudC1kYXNoYm9hcmQubWluLmpzIn0=
Top Articles
Latest Posts
Article information

Author: Terence Hammes MD

Last Updated: 17/06/2023

Views: 5920

Rating: 4.9 / 5 (69 voted)

Reviews: 84% of readers found this page helpful

Author information

Name: Terence Hammes MD

Birthday: 1992-04-11

Address: Suite 408 9446 Mercy Mews, West Roxie, CT 04904

Phone: +50312511349175

Job: Product Consulting Liaison

Hobby: Jogging, Motor sports, Nordic skating, Jigsaw puzzles, Bird watching, Nordic skating, Sculpting

Introduction: My name is Terence Hammes MD, I am a inexpensive, energetic, jolly, faithful, cheerful, proud, rich person who loves writing and wants to share my knowledge and understanding with you.