User:Eejit43/scripts/ajax-undo.js
Appearance
< User:Eejit43 | scripts
Code that you insert on this page could contain malicious content capable of compromising your account. If you import a script from another page with "importScript", "mw.loader.load", "iusc", or "lusc", take note that this causes you to dynamically load a remote script, which could be changed by others. Editors are responsible for all edits and actions they perform, including by scripts. User scripts are not centrally supported and may malfunction or become inoperable due to software changes. A guide to help you find broken scripts is available. If you are unsure whether code you are adding to this page is safe, you can ask at the appropriate village pump. This code will be executed when previewing this page. |
![]() | This user script seems to have a documentation page at User:Eejit43/scripts/ajax-undo. |
// <nowiki>
// Note: This script was compiled and minified from TypeScript. For a more readable version, see https://github.com/Eejit43/wikipedia-scripts/blob/main/scripts/ajax-undo.ts
"use strict";(()=>{var p=`#ajax-undo-loading{display:none;vertical-align:text-bottom;height:1.3em;overflow:hidden;line-height:1.5em}#ajax-undo-loading:after{display:inline-table;animation:ajax-undo-loading .8s steps(10) infinite;content:"\\280b\\a\\2819\\a\\2839\\a\\2838\\a\\283c\\a\\2834\\a\\2826\\a\\2827\\a\\2807\\a\\280f";color:gray;text-align:left;white-space:pre}#ajax-undo-loading:not(.is-diff){margin:-.3em 3px 0}#ajax-undo-loading.is-diff{height:1.55em}#ajax-undo-loading.is-minerva:not(.is-diff){float:right;margin-top:0}#ajax-undo-loading.is-minerva.is-diff{margin:-.2em 3px}@keyframes ajax-undo-loading{to{transform:translateY(-15em)}}#ajax-undo-reason{display:none;margin-left:3px}#ajax-undo-reason.is-minerva{border:revert;background:revert;padding:revert}#ajax-undo-reason.is-minerva:not(.is-diff){float:right;height:26px}
`;mw.loader.using(["mediawiki.util"],()=>{let n=mw.config.get("wgDiffOldId");if(mw.config.get("wgAction")!=="history"&&!n)return;mw.util.addCSS(p);let t=mw.config.get("skin")==="minerva",d={awaitingClick:0,awaitingConfirmation:1,awaitingReload:2};for(let o of document.querySelectorAll(".mw-history-undo, .mw-diff-undo")){let m=o.querySelector("a");if(!m?.href){mw.notify("ajax-undo: Could not find undo link for a diff!",{type:"error"});continue}let f=new URL(m.href),i=document.createElement("span"),s=d.awaitingClick,a=document.createElement("a");a.textContent="ajax undo",a.href=f.href,t&&!n&&(a.style.marginLeft="1em"),a.addEventListener("click",async c=>{if(c.preventDefault(),s===d.awaitingClick)s=d.awaitingConfirmation,e.style.display="inline",e.focus(),a.textContent="confirm ajax undo";else if(s===d.awaitingConfirmation){s=d.awaitingReload,r.style.display="inline-block",a.style.color="gray",e.disabled=!0,t&&a.append(r);let u=f.searchParams.get("undo"),g=f.searchParams.get("undoafter");if(!u||!g){mw.notify("Could not find undo parameters in URL!",{type:"error"});return}let l=o.closest(n?"td":"li")?.querySelector(".mw-userlink bdi")?.textContent;if(!l){mw.notify("Could not find revision user!",{type:"error"});return}if(!await new mw.Api().postWithEditToken({action:"edit",title:mw.config.get("wgPageName"),undo:u,undoafter:g,summary:`Undid revision ${u} by [[Special:Contributions/${l}|${l}]] ([[User talk:${l}|talk]])${e.value?`: ${e.value}`:""}`}).catch((w,y)=>(mw.notify(`Error undoing revision: ${y?.error?.code??"Unknown error"} (${w})`,{type:"error"}),setTimeout(()=>{window.location.reload()},2e3),!1)))return;mw.notify("Revision successfully undone, reloading...",{type:"success"}),window.location.reload()}}),n&&i.append(document.createTextNode("(")),i.append(a);let r=document.createElement("span");r.id="ajax-undo-loading",n&&r.classList.add("is-diff"),t&&r.classList.add("is-minerva"),t||i.append(r);let e=document.createElement("input");e.type="text",e.id="ajax-undo-reason",n&&e.classList.add("is-diff"),t&&e.classList.add("is-minerva"),e.placeholder="Insert reason here...",e.addEventListener("keydown",c=>{c.key==="Enter"&&a.click()}),t&&!n?i.prepend(e):i.append(e),n&&i.append(document.createTextNode(")")),n?(o.after(i),o.after(document.createTextNode(" "))):t?o.parentElement?.before(i):o.parentElement?.after(i)}});})();
// </nowiki>
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3R5bGVzL2FqYXgtdW5kby5jc3MiLCAiLi4vc2NyaXB0cy9hamF4LXVuZG8udHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIiNhamF4LXVuZG8tbG9hZGluZ3tkaXNwbGF5Om5vbmU7dmVydGljYWwtYWxpZ246dGV4dC1ib3R0b207aGVpZ2h0OjEuM2VtO292ZXJmbG93OmhpZGRlbjtsaW5lLWhlaWdodDoxLjVlbX0jYWpheC11bmRvLWxvYWRpbmc6YWZ0ZXJ7ZGlzcGxheTppbmxpbmUtdGFibGU7YW5pbWF0aW9uOmFqYXgtdW5kby1sb2FkaW5nIC44cyBzdGVwcygxMCkgaW5maW5pdGU7Y29udGVudDpcIlxcMjgwYlxcYVxcMjgxOVxcYVxcMjgzOVxcYVxcMjgzOFxcYVxcMjgzY1xcYVxcMjgzNFxcYVxcMjgyNlxcYVxcMjgyN1xcYVxcMjgwN1xcYVxcMjgwZlwiO2NvbG9yOmdyYXk7dGV4dC1hbGlnbjpsZWZ0O3doaXRlLXNwYWNlOnByZX0jYWpheC11bmRvLWxvYWRpbmc6bm90KC5pcy1kaWZmKXttYXJnaW46LS4zZW0gM3B4IDB9I2FqYXgtdW5kby1sb2FkaW5nLmlzLWRpZmZ7aGVpZ2h0OjEuNTVlbX0jYWpheC11bmRvLWxvYWRpbmcuaXMtbWluZXJ2YTpub3QoLmlzLWRpZmYpe2Zsb2F0OnJpZ2h0O21hcmdpbi10b3A6MH0jYWpheC11bmRvLWxvYWRpbmcuaXMtbWluZXJ2YS5pcy1kaWZme21hcmdpbjotLjJlbSAzcHh9QGtleWZyYW1lcyBhamF4LXVuZG8tbG9hZGluZ3t0b3t0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMTVlbSl9fSNhamF4LXVuZG8tcmVhc29ue2Rpc3BsYXk6bm9uZTttYXJnaW4tbGVmdDozcHh9I2FqYXgtdW5kby1yZWFzb24uaXMtbWluZXJ2YXtib3JkZXI6cmV2ZXJ0O2JhY2tncm91bmQ6cmV2ZXJ0O3BhZGRpbmc6cmV2ZXJ0fSNhamF4LXVuZG8tcmVhc29uLmlzLW1pbmVydmE6bm90KC5pcy1kaWZmKXtmbG9hdDpyaWdodDtoZWlnaHQ6MjZweH1cbiIsICJpbXBvcnQgdHlwZSB7IE1lZGlhV2lraURhdGFFcnJvciB9IGZyb20gJy4uL2dsb2JhbC10eXBlcyc7XG5pbXBvcnQgY3NzQ29udGVudCBmcm9tICcuLi9zdHlsZXMvYWpheC11bmRvLmNzcycgd2l0aCB7IHR5cGU6ICdjc3MnIH07XG5cbm13LmxvYWRlci51c2luZyhbJ21lZGlhd2lraS51dGlsJ10sICgpID0+IHtcbiAgICBjb25zdCBpc0RpZmYgPSBtdy5jb25maWcuZ2V0KCd3Z0RpZmZPbGRJZCcpO1xuXG4gICAgaWYgKG13LmNvbmZpZy5nZXQoJ3dnQWN0aW9uJykgIT09ICdoaXN0b3J5JyAmJiAhaXNEaWZmKSByZXR1cm47XG5cbiAgICBtdy51dGlsLmFkZENTUyhjc3NDb250ZW50KTtcblxuICAgIGNvbnN0IGlzTWluZXJ2YSA9IG13LmNvbmZpZy5nZXQoJ3NraW4nKSA9PT0gJ21pbmVydmEnO1xuXG4gICAgY29uc3QgU1RBR0VTID0ge1xuICAgICAgICBhd2FpdGluZ0NsaWNrOiAwLFxuICAgICAgICBhd2FpdGluZ0NvbmZpcm1hdGlvbjogMSxcbiAgICAgICAgYXdhaXRpbmdSZWxvYWQ6IDIsXG4gICAgfTtcblxuICAgIGZvciAoY29uc3QgdW5kb1NwYW4gb2YgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLm13LWhpc3RvcnktdW5kbywgLm13LWRpZmYtdW5kbycpKSB7XG4gICAgICAgIGNvbnN0IHVuZG9MaW5rID0gdW5kb1NwYW4ucXVlcnlTZWxlY3RvcignYScpO1xuXG4gICAgICAgIGlmICghdW5kb0xpbms/LmhyZWYpIHtcbiAgICAgICAgICAgIG13Lm5vdGlmeSgnYWpheC11bmRvOiBDb3VsZCBub3QgZmluZCB1bmRvIGxpbmsgZm9yIGEgZGlmZiEnLCB7IHR5cGU6ICdlcnJvcicgfSk7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHVuZG9VcmwgPSBuZXcgVVJMKHVuZG9MaW5rLmhyZWYpO1xuXG4gICAgICAgIGNvbnN0IHNwYW4gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJyk7XG5cbiAgICAgICAgbGV0IHN0YWdlID0gU1RBR0VTLmF3YWl0aW5nQ2xpY2s7XG5cbiAgICAgICAgY29uc3QgYWpheFVuZG9MaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xuICAgICAgICBhamF4VW5kb0xpbmsudGV4dENvbnRlbnQgPSAnYWpheCB1bmRvJztcbiAgICAgICAgYWpheFVuZG9MaW5rLmhyZWYgPSB1bmRvVXJsLmhyZWY7XG4gICAgICAgIGlmIChpc01pbmVydmEgJiYgIWlzRGlmZikgYWpheFVuZG9MaW5rLnN0eWxlLm1hcmdpbkxlZnQgPSAnMWVtJztcbiAgICAgICAgYWpheFVuZG9MaW5rLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgYXN5bmMgKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgICAgICAgICBpZiAoc3RhZ2UgPT09IFNUQUdFUy5hd2FpdGluZ0NsaWNrKSB7XG4gICAgICAgICAgICAgICAgc3RhZ2UgPSBTVEFHRVMuYXdhaXRpbmdDb25maXJtYXRpb247XG5cbiAgICAgICAgICAgICAgICByZWFzb25JbnB1dC5zdHlsZS5kaXNwbGF5ID0gJ2lubGluZSc7XG4gICAgICAgICAgICAgICAgcmVhc29uSW5wdXQuZm9jdXMoKTtcblxuICAgICAgICAgICAgICAgIGFqYXhVbmRvTGluay50ZXh0Q29udGVudCA9ICdjb25maXJtIGFqYXggdW5kbyc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHN0YWdlID09PSBTVEFHRVMuYXdhaXRpbmdDb25maXJtYXRpb24pIHtcbiAgICAgICAgICAgICAgICBzdGFnZSA9IFNUQUdFUy5hd2FpdGluZ1JlbG9hZDtcbiAgICAgICAgICAgICAgICBsb2FkaW5nU3Bpbm5lci5zdHlsZS5kaXNwbGF5ID0gJ2lubGluZS1ibG9jayc7XG4gICAgICAgICAgICAgICAgYWpheFVuZG9MaW5rLnN0eWxlLmNvbG9yID0gJ2dyYXknO1xuICAgICAgICAgICAgICAgIHJlYXNvbklucHV0LmRpc2FibGVkID0gdHJ1ZTtcblxuICAgICAgICAgICAgICAgIGlmIChpc01pbmVydmEpIGFqYXhVbmRvTGluay5hcHBlbmQobG9hZGluZ1NwaW5uZXIpO1xuXG4gICAgICAgICAgICAgICAgY29uc3QgdW5kb0lkID0gdW5kb1VybC5zZWFyY2hQYXJhbXMuZ2V0KCd1bmRvJyk7XG4gICAgICAgICAgICAgICAgY29uc3QgdW5kb0FmdGVyID0gdW5kb1VybC5zZWFyY2hQYXJhbXMuZ2V0KCd1bmRvYWZ0ZXInKTtcblxuICAgICAgICAgICAgICAgIGlmICghdW5kb0lkIHx8ICF1bmRvQWZ0ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgbXcubm90aWZ5KCdDb3VsZCBub3QgZmluZCB1bmRvIHBhcmFtZXRlcnMgaW4gVVJMIScsIHsgdHlwZTogJ2Vycm9yJyB9KTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNvbnN0IHJldmlzaW9uVXNlciA9IHVuZG9TcGFuLmNsb3Nlc3QoaXNEaWZmID8gJ3RkJyA6ICdsaScpPy5xdWVyeVNlbGVjdG9yKCcubXctdXNlcmxpbmsgYmRpJyk/LnRleHRDb250ZW50O1xuXG4gICAgICAgICAgICAgICAgaWYgKCFyZXZpc2lvblVzZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgbXcubm90aWZ5KCdDb3VsZCBub3QgZmluZCByZXZpc2lvbiB1c2VyIScsIHsgdHlwZTogJ2Vycm9yJyB9KTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNvbnN0IHN1Y2Nlc3MgPSBhd2FpdCBuZXcgbXcuQXBpKClcbiAgICAgICAgICAgICAgICAgICAgLnBvc3RXaXRoRWRpdFRva2VuKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbjogJ2VkaXQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IG13LmNvbmZpZy5nZXQoJ3dnUGFnZU5hbWUnKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHVuZG86IHVuZG9JZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHVuZG9hZnRlcjogdW5kb0FmdGVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgc3VtbWFyeTogYFVuZGlkIHJldmlzaW9uICR7dW5kb0lkfSBieSBbW1NwZWNpYWw6Q29udHJpYnV0aW9ucy8ke3JldmlzaW9uVXNlcn18JHtyZXZpc2lvblVzZXJ9XV0gKFtbVXNlciB0YWxrOiR7cmV2aXNpb25Vc2VyfXx0YWxrXV0pJHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFzb25JbnB1dC52YWx1ZSA/IGA6ICR7cmVhc29uSW5wdXQudmFsdWV9YCA6ICcnXG4gICAgICAgICAgICAgICAgICAgICAgICB9YCxcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgLmNhdGNoKChlcnJvckNvZGUsIGVycm9ySW5mbykgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgbXcubm90aWZ5KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBFcnJvciB1bmRvaW5nIHJldmlzaW9uOiAkeyhlcnJvckluZm8gYXMgTWVkaWFXaWtpRGF0YUVycm9yKT8uZXJyb3I/LmNvZGUgPz8gJ1Vua25vd24gZXJyb3InfSAoJHtlcnJvckNvZGV9KWAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnZXJyb3InLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLnJlbG9hZCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSwgMjAwMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgaWYgKCFzdWNjZXNzKSByZXR1cm47XG5cbiAgICAgICAgICAgICAgICBtdy5ub3RpZnkoJ1JldmlzaW9uIHN1Y2Nlc3NmdWxseSB1bmRvbmUsIHJlbG9hZGluZy4uLicsIHsgdHlwZTogJ3N1Y2Nlc3MnIH0pO1xuICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5yZWxvYWQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKGlzRGlmZikgc3Bhbi5hcHBlbmQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoJygnKSk7XG4gICAgICAgIHNwYW4uYXBwZW5kKGFqYXhVbmRvTGluayk7XG5cbiAgICAgICAgY29uc3QgbG9hZGluZ1NwaW5uZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJyk7XG4gICAgICAgIGxvYWRpbmdTcGlubmVyLmlkID0gJ2FqYXgtdW5kby1sb2FkaW5nJztcbiAgICAgICAgaWYgKGlzRGlmZikgbG9hZGluZ1NwaW5uZXIuY2xhc3NMaXN0LmFkZCgnaXMtZGlmZicpO1xuICAgICAgICBpZiAoaXNNaW5lcnZhKSBsb2FkaW5nU3Bpbm5lci5jbGFzc0xpc3QuYWRkKCdpcy1taW5lcnZhJyk7XG5cbiAgICAgICAgaWYgKCFpc01pbmVydmEpIHNwYW4uYXBwZW5kKGxvYWRpbmdTcGlubmVyKTtcblxuICAgICAgICBjb25zdCByZWFzb25JbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lucHV0Jyk7XG4gICAgICAgIHJlYXNvbklucHV0LnR5cGUgPSAndGV4dCc7XG4gICAgICAgIHJlYXNvbklucHV0LmlkID0gJ2FqYXgtdW5kby1yZWFzb24nO1xuICAgICAgICBpZiAoaXNEaWZmKSByZWFzb25JbnB1dC5jbGFzc0xpc3QuYWRkKCdpcy1kaWZmJyk7XG4gICAgICAgIGlmIChpc01pbmVydmEpIHJlYXNvbklucHV0LmNsYXNzTGlzdC5hZGQoJ2lzLW1pbmVydmEnKTtcbiAgICAgICAgcmVhc29uSW5wdXQucGxhY2Vob2xkZXIgPSAnSW5zZXJ0IHJlYXNvbiBoZXJlLi4uJztcbiAgICAgICAgcmVhc29uSW5wdXQuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIChldmVudCkgPT4ge1xuICAgICAgICAgICAgaWYgKGV2ZW50LmtleSA9PT0gJ0VudGVyJykgYWpheFVuZG9MaW5rLmNsaWNrKCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmIChpc01pbmVydmEgJiYgIWlzRGlmZikgc3Bhbi5wcmVwZW5kKHJlYXNvbklucHV0KTtcbiAgICAgICAgZWxzZSBzcGFuLmFwcGVuZChyZWFzb25JbnB1dCk7XG5cbiAgICAgICAgaWYgKGlzRGlmZikgc3Bhbi5hcHBlbmQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoJyknKSk7XG5cbiAgICAgICAgaWYgKGlzRGlmZikge1xuICAgICAgICAgICAgdW5kb1NwYW4uYWZ0ZXIoc3Bhbik7XG4gICAgICAgICAgICB1bmRvU3Bhbi5hZnRlcihkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgnICcpKTtcbiAgICAgICAgfSBlbHNlIGlmIChpc01pbmVydmEpIHVuZG9TcGFuLnBhcmVudEVsZW1lbnQ/LmJlZm9yZShzcGFuKTtcbiAgICAgICAgZWxzZSB1bmRvU3Bhbi5wYXJlbnRFbGVtZW50Py5hZnRlcihzcGFuKTtcbiAgICB9XG59KTtcbiJdLAogICJtYXBwaW5ncyI6ICI7OzttQkFBQSxJQUFBQSxFQUFBO0VDR0EsR0FBRyxPQUFPLE1BQU0sQ0FBQyxnQkFBZ0IsRUFBRyxJQUFNLENBQ3RDLElBQU1DLEVBQVMsR0FBRyxPQUFPLElBQUksYUFBYSxFQUUxQyxHQUFJLEdBQUcsT0FBTyxJQUFJLFVBQVUsSUFBTSxXQUFhLENBQUNBLEVB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QUNiWCxHQUFRVyxFQUFZLFVBQVUsSUFBSSxTQUFTLEVBQzNDVCxHQUFXUyxFQUFZLFVBQVUsSUFBSSxZQUFZLEVBQ3JEQSxFQUFZLFlBQWMsd0JBQzFCQSxFQUFZLGlCQUFpQixVQUFZRCxHQUFVLENBQzNDQSxFQUFNLE1BQVEsU0FBU0QsRUFBYSxNQUFNLENBQ2xELENBQUMsRUFFR1AsR0FBYSxDQUFDRixFQUFRTyxFQUFLLFFBQVFJLENBQVcsRUFDN0NKLEVBQUssT0FBT0ksQ0FBVyxFQUV4QlgsR0FBUU8sRUFBSyxPQUFPLFNBQVMsZUFBZSxHQUFHLENBQUMsRUFFaERQLEdBQ0FJLEVBQVMsTUFBTUcsQ0FBSSxFQUNuQkgsRUFBUyxNQUFNLFNBQVMsZUFBZSxHQUFHLENBQUMsR0FDcENGLEVBQVdFLEVBQVMsZUFBZSxPQUFPRyxDQUFJLEVBQ3BESCxFQUFTLGVBQWUsTUFBTUcsQ0FBSSxDQUMzQyxDQUNKLENBQUMiLAogICJuYW1lcyI6IFsiYWpheF91bmRvX2RlZmF1bHQiLCAiaXNEaWZmIiwgImFqYXhfdW5kb19kZWZhdWx0IiwgImlzTWluZXJ2YSIsICJTVEFHRVMiLCAidW5kb1NwYW4iLCAidW5kb0xpbmsiLCAidW5kb1VybCIsICJzcGFuIiwgInN0YWdlIiwgImFqYXhVbmRvTGluayIsICJldmVudCIsICJyZWFzb25JbnB1dCIsICJsb2FkaW5nU3Bpbm5lciIsICJ1bmRvSWQiLCAidW5kb0FmdGVyIiwgInJldmlzaW9uVXNlciIsICJlcnJvckNvZGUiLCAiZXJyb3JJbmZvIl0KfQo=