// ==UserScript== // @name AtCoder Limit Colorizer // @description Colorize AtCoder constraints based on their values // @version 0.1.0 // @homepage https://github.com/sevenc-nanashi/atcoder-limit-colorizer // @author Nanashi. // @match https://atcoder.jp/contests/*/tasks/* // @updateURL https://raw.githubusercontent.com/sevenc-nanashi/atcoder-limit-colorizer/built/index.user.js // @downloadURL https://raw.githubusercontent.com/sevenc-nanashi/atcoder-limit-colorizer/built/index.user.js // @sandbox MAIN_WORLD // ==/UserScript== "use strict";(()=>{function c(n){return n<0n?-n:n}var L="#804000",T="#008000",C="#00a0a0",S="#0000ff",A="#a0a000",H="#ff8000",M="#ff0000",V="#0dcaf0",b=n=>{let e=c(n);return e===998244353n||e===1000000007n?V:e>=10n**10n?M:e>=10n**8n?H:e>=10n**5n?A:e>=1000n?S:e>=100n?C:e>=10n?T:L};var d=n=>{let e="";for(let t of n)if(t.classList.contains("mord"))if(t.childElementCount>0){let r=d(Array.from(t.children));if(r===void 0)return;e+=r}else t.textContent==="\u2212"?e+="-":e+=t.textContent;else if(t.classList.contains("mbin"))e+=t.textContent;else if(t.classList.contains("msupsub")){let r=t.querySelector(".mtight");if(!r){console.warn("msupsub without mtight",t);return}let o=Array.from(r.querySelectorAll(":scope > span")),a=d(o);if(a===void 0)return;e+=`^(${a})`}return e},y=n=>{let e=0,t=[],r="";for(let o of n){if(o==="("){if(e++,e===1)continue}else if(o===")"&&(e--,e===0)){t.push(y(r)),r="";continue}e===0&&o==="\xD7"?(t.push(r),r="",t.push("*")):e===0&&o==="^"?(t.push(r),r="",t.push("^")):r+=o}return r.length>0&&t.push(r),t},m=n=>{let e=structuredClone(n);if(typeof e=="string"||typeof e=="bigint")return BigInt(e);if(e.length===1)return BigInt(e[0]);for(let t=1;t{let t=b(e);for(let r of Array.isArray(n)?n:[n])r.style.color=t},w=n=>{let e=d(n);if(e===void 0||!e.match(/^[0-9\-×\^()]+$/))return;let t=y(e),r=m(t);return g(n,r),r},u=n=>{if(n.classList.contains("mord")){if(n.classList.contains("mathnormal"))return n.textContent??void 0;if(n.children[0]?.classList?.contains("mathnormal"))return n.children[0].textContent??void 0}},z=["mpunct","mrel","mopen","mclose","mop"],I=()=>{let n=Array.from(document.getElementsByTagName("h3")).filter(e=>e.textContent==="\u5236\u7D04"||e.textContent==="Constraints");for(let e of n){let t=e.nextElementSibling;if(!t)return;v(t)}},v=n=>{let e={},t=Array.from(n.querySelectorAll(".katex-html:not([data-alc-colorized])"));for(let r of t){r.setAttribute("data-alc-colorized","true");let o=Array.from(r.querySelectorAll(".base > span")).filter(l=>!!l.textContent),a=[],i={elements:[],maxValue:0n},h=()=>{for(let l of i.elements.filter(s=>u(s))){let s=u(l);s&&(g(l,i.maxValue),e[s]=c(i.maxValue))}i.elements.length=0,i.maxValue=0n},x=()=>{let l=w(a);l!==void 0&&c(l)>i.maxValue&&(i.maxValue=c(l)),a.length=0},p=!1;for(let[l,s]of o.entries()){if(p&&(p=!1,(!u(o[l-2])||!u(s))&&(i.elements.pop(),h())),s.classList.contains("mpunct")&&(p=!0),Array.from(s.classList).some(E=>z.includes(E))){a.length>0&&x(),i.elements.push(s);continue}let f=u(s);f&&e[f]&&(g(s,e[f]),i.maxValue0&&(x(),h())}};setInterval(()=>{I()},100);})(); //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL21hdGgudHMiLCAiLi4vc3JjL2NvbG9ycy50cyIsICIuLi9zcmMvaW5kZXgudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImV4cG9ydCBmdW5jdGlvbiBhYnModmFsdWU6IGJpZ2ludCk6IGJpZ2ludCB7XG4gIHJldHVybiB2YWx1ZSA8IDBuID8gLXZhbHVlIDogdmFsdWU7XG59XG4iLCAiaW1wb3J0IHsgYWJzIH0gZnJvbSBcIi4vbWF0aFwiO1xuXG5leHBvcnQgY29uc3QgZ3JheSA9IFwiIzgwODA4MFwiO1xuZXhwb3J0IGNvbnN0IGJyb3duID0gXCIjODA0MDAwXCI7XG5leHBvcnQgY29uc3QgZ3JlZW4gPSBcIiMwMDgwMDBcIjtcbmV4cG9ydCBjb25zdCBjeWFuID0gXCIjMDBhMGEwXCI7XG5leHBvcnQgY29uc3QgYmx1ZSA9IFwiIzAwMDBmZlwiO1xuZXhwb3J0IGNvbnN0IHllbGxvdyA9IFwiI2EwYTAwMFwiO1xuZXhwb3J0IGNvbnN0IG9yYW5nZSA9IFwiI2ZmODAwMFwiO1xuZXhwb3J0IGNvbnN0IHJlZCA9IFwiI2ZmMDAwMFwiO1xuXG5leHBvcnQgY29uc3Qgc3BlY2lhbCA9IFwiIzBkY2FmMFwiO1xuXG5leHBvcnQgY29uc3QgZ2V0Q29sb3JGcm9tTnVtYmVyID0gKHZhbHVlOiBiaWdpbnQpID0+IHtcbiAgY29uc3QgYVZhbHVlID0gYWJzKHZhbHVlKTtcbiAgaWYgKGFWYWx1ZSA9PT0gOTk4MjQ0MzUzbiB8fCBhVmFsdWUgPT09IDEwMDAwMDAwMDduKSB7XG4gICAgcmV0dXJuIHNwZWNpYWw7XG4gIH1cbiAgaWYgKGFWYWx1ZSA+PSAxMG4gKiogMTBuKSB7XG4gICAgcmV0dXJuIHJlZDtcbiAgfVxuICBpZiAoYVZhbHVlID49IDEwbiAqKiA4bikge1xuICAgIHJldHVybiBvcmFuZ2U7XG4gIH1cbiAgaWYgKGFWYWx1ZSA+PSAxMG4gKiogNW4pIHtcbiAgICByZXR1cm4geWVsbG93O1xuICB9XG4gIGlmIChhVmFsdWUgPj0gMTAwMG4pIHtcbiAgICByZXR1cm4gYmx1ZTtcbiAgfVxuICBpZiAoYVZhbHVlID49IDEwMG4pIHtcbiAgICByZXR1cm4gY3lhbjtcbiAgfVxuICBpZiAoYVZhbHVlID49IDEwbikge1xuICAgIHJldHVybiBncmVlbjtcbiAgfVxuICByZXR1cm4gYnJvd247XG59O1xuIiwgImltcG9ydCB7IGdldENvbG9yRnJvbU51bWJlciB9IGZyb20gXCIuL2NvbG9ycy50c1wiO1xuaW1wb3J0IHsgYWJzIH0gZnJvbSBcIi4vbWF0aC50c1wiO1xuXG5jb25zdCBrYXRleEh0bWxUb0V4cHIgPSAoaHRtbDogSFRNTEVsZW1lbnRbXSk6IHN0cmluZyB8IHVuZGVmaW5lZCA9PiB7XG4gIGxldCB0ZXh0ID0gXCJcIjtcbiAgZm9yIChjb25zdCBlbGVtZW50IG9mIGh0bWwpIHtcbiAgICBpZiAoZWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoXCJtb3JkXCIpKSB7XG4gICAgICBpZiAoZWxlbWVudC5jaGlsZEVsZW1lbnRDb3VudCA+IDApIHtcbiAgICAgICAgY29uc3QgZGF0YSA9IGthdGV4SHRtbFRvRXhwcihcbiAgICAgICAgICBBcnJheS5mcm9tKGVsZW1lbnQuY2hpbGRyZW4pIGFzIEhUTUxTcGFuRWxlbWVudFtdLFxuICAgICAgICApO1xuICAgICAgICBpZiAoZGF0YSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICB0ZXh0ICs9IGRhdGE7XG4gICAgICB9IGVsc2UgaWYgKGVsZW1lbnQudGV4dENvbnRlbnQgPT09IFwiXFx1MjIxMlwiKSB7XG4gICAgICAgIC8vIG1pbnVzIHNpZ25cbiAgICAgICAgdGV4dCArPSBcIi1cIjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRleHQgKz0gZWxlbWVudC50ZXh0Q29udGVudDtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKFwibWJpblwiKSkge1xuICAgICAgdGV4dCArPSBlbGVtZW50LnRleHRDb250ZW50O1xuICAgIH0gZWxzZSBpZiAoZWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoXCJtc3Vwc3ViXCIpKSB7XG4gICAgICBjb25zdCByb290ID0gZWxlbWVudC5xdWVyeVNlbGVjdG9yKFwiLm10aWdodFwiKTtcbiAgICAgIGlmICghcm9vdCkge1xuICAgICAgICBjb25zb2xlLndhcm4oXCJtc3Vwc3ViIHdpdGhvdXQgbXRpZ2h0XCIsIGVsZW1lbnQpO1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgY29uc3QgZWxlbWVudHMgPSBBcnJheS5mcm9tKFxuICAgICAgICByb290LnF1ZXJ5U2VsZWN0b3JBbGw8SFRNTFNwYW5FbGVtZW50PihcIjpzY29wZSA+IHNwYW5cIiksXG4gICAgICApO1xuICAgICAgY29uc3QgcGFyc2VkID0ga2F0ZXhIdG1sVG9FeHByKGVsZW1lbnRzKTtcbiAgICAgIGlmIChwYXJzZWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgdGV4dCArPSBgXigke3BhcnNlZH0pYDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdGV4dDtcbn07XG5cbnR5cGUgVHJlZSA9IHN0cmluZyB8IGJpZ2ludCB8IFRyZWVbXTtcbmNvbnN0IHBhcnNlRXhwciA9IChleHByOiBzdHJpbmcpOiBUcmVlID0+IHtcbiAgbGV0IGJyYWNrZXQgPSAwO1xuICBjb25zdCByZXN1bHQgPSBbXTtcbiAgbGV0IGN1cnJlbnQgPSBcIlwiO1xuICBmb3IgKGNvbnN0IGMgb2YgZXhwcikge1xuICAgIGlmIChjID09PSBcIihcIikge1xuICAgICAgYnJhY2tldCsrO1xuICAgICAgaWYgKGJyYWNrZXQgPT09IDEpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChjID09PSBcIilcIikge1xuICAgICAgYnJhY2tldC0tO1xuICAgICAgaWYgKGJyYWNrZXQgPT09IDApIHtcbiAgICAgICAgcmVzdWx0LnB1c2gocGFyc2VFeHByKGN1cnJlbnQpKTtcbiAgICAgICAgY3VycmVudCA9IFwiXCI7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChicmFja2V0ID09PSAwICYmIGMgPT09IFwiXHUwMEQ3XCIpIHtcbiAgICAgIHJlc3VsdC5wdXNoKGN1cnJlbnQpO1xuICAgICAgY3VycmVudCA9IFwiXCI7XG4gICAgICByZXN1bHQucHVzaChcIipcIik7XG4gICAgfSBlbHNlIGlmIChicmFja2V0ID09PSAwICYmIGMgPT09IFwiXlwiKSB7XG4gICAgICByZXN1bHQucHVzaChjdXJyZW50KTtcbiAgICAgIGN1cnJlbnQgPSBcIlwiO1xuICAgICAgcmVzdWx0LnB1c2goXCJeXCIpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjdXJyZW50ICs9IGM7XG4gICAgfVxuICB9XG4gIGlmIChjdXJyZW50Lmxlbmd0aCA+IDApIHtcbiAgICByZXN1bHQucHVzaChjdXJyZW50KTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufTtcblxuY29uc3QgY2FsY3VsYXRlVHJlZSA9ICh0cmVlXzogVHJlZSk6IGJpZ2ludCA9PiB7XG4gIGNvbnN0IHRyZWUgPSBzdHJ1Y3R1cmVkQ2xvbmUodHJlZV8pO1xuICBpZiAodHlwZW9mIHRyZWUgPT09IFwic3RyaW5nXCIpIHtcbiAgICAvLyByZXR1cm4gTnVtYmVyLnBhcnNlSW50KHRyZWUpO1xuICAgIHJldHVybiBCaWdJbnQodHJlZSk7XG4gIH1cbiAgaWYgKHR5cGVvZiB0cmVlID09PSBcImJpZ2ludFwiKSB7XG4gICAgcmV0dXJuIEJpZ0ludCh0cmVlKTtcbiAgfVxuICBpZiAodHJlZS5sZW5ndGggPT09IDEpIHtcbiAgICAvLyByZXR1cm4gTnVtYmVyLnBhcnNlSW50KHRyZWVbMF0gYXMgc3RyaW5nKTtcbiAgICByZXR1cm4gQmlnSW50KHRyZWVbMF0gYXMgc3RyaW5nKTtcbiAgfVxuXG4gIGZvciAobGV0IGkgPSAxOyBpIDwgdHJlZS5sZW5ndGg7IGkgKz0gMikge1xuICAgIGlmICh0cmVlW2ldID09PSBcIl5cIikge1xuICAgICAgY29uc3QgYmFzZSA9IGNhbGN1bGF0ZVRyZWUodHJlZVtpIC0gMV0pO1xuICAgICAgY29uc3QgcG93ZXIgPSBjYWxjdWxhdGVUcmVlKHRyZWVbaSArIDFdKTtcbiAgICAgIHRyZWUuc3BsaWNlKGkgLSAxLCAzLCBiYXNlICoqIHBvd2VyKTtcblxuICAgICAgaSAtPSAyO1xuICAgIH1cbiAgfVxuICBmb3IgKGxldCBpID0gMTsgaSA8IHRyZWUubGVuZ3RoOyBpICs9IDIpIHtcbiAgICBpZiAodHJlZVtpXSA9PT0gXCIqXCIpIHtcbiAgICAgIGNvbnN0IGxlZnQgPSBjYWxjdWxhdGVUcmVlKHRyZWVbaSAtIDFdKTtcbiAgICAgIGNvbnN0IHJpZ2h0ID0gY2FsY3VsYXRlVHJlZSh0cmVlW2kgKyAxXSk7XG4gICAgICB0cmVlLnNwbGljZShpIC0gMSwgMywgbGVmdCAqIHJpZ2h0KTtcblxuICAgICAgaSAtPSAyO1xuICAgIH1cbiAgfVxuICBpZiAodHJlZS5sZW5ndGggIT09IDEpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgdHJlZSwgJHt0cmVlfWApO1xuICB9XG4gIGlmICh0eXBlb2YgdHJlZVswXSAhPT0gXCJiaWdpbnRcIikge1xuICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCB0cmVlLCAke3RyZWV9YCk7XG4gIH1cbiAgcmV0dXJuIHRyZWVbMF07XG59O1xuXG5jb25zdCBwYWludCA9IChlbGVtZW50czogSFRNTEVsZW1lbnQgfCBIVE1MRWxlbWVudFtdLCB2YWx1ZTogYmlnaW50KSA9PiB7XG4gIGNvbnN0IGNvbG9yID0gZ2V0Q29sb3JGcm9tTnVtYmVyKHZhbHVlKTtcbiAgZm9yIChjb25zdCBlIG9mIEFycmF5LmlzQXJyYXkoZWxlbWVudHMpID8gZWxlbWVudHMgOiBbZWxlbWVudHNdKSB7XG4gICAgZS5zdHlsZS5jb2xvciA9IGNvbG9yO1xuICB9XG59O1xuXG5jb25zdCBjYWxjdWxhdGVBbmRDb2xvcml6ZSA9IChlbGVtZW50czogSFRNTEVsZW1lbnRbXSk6IGJpZ2ludCB8IHVuZGVmaW5lZCA9PiB7XG4gIGNvbnN0IG1hdGggPSBrYXRleEh0bWxUb0V4cHIoZWxlbWVudHMpO1xuICBpZiAobWF0aCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGlmICghbWF0aC5tYXRjaCgvXlswLTlcXC1cdTAwRDdcXF4oKV0rJC8pKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGNvbnN0IHBhcnNlZCA9IHBhcnNlRXhwcihtYXRoKTtcbiAgY29uc3QgcmVzdWx0ID0gY2FsY3VsYXRlVHJlZShwYXJzZWQpO1xuICBwYWludChlbGVtZW50cywgcmVzdWx0KTtcblxuICByZXR1cm4gcmVzdWx0O1xufTtcblxuY29uc3QgZ2V0VmFyaWFibGUgPSAoZWxlbWVudDogSFRNTFNwYW5FbGVtZW50KTogc3RyaW5nIHwgdW5kZWZpbmVkID0+IHtcbiAgaWYgKCFlbGVtZW50LmNsYXNzTGlzdC5jb250YWlucyhcIm1vcmRcIikpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGlmIChlbGVtZW50LmNsYXNzTGlzdC5jb250YWlucyhcIm1hdGhub3JtYWxcIikpIHtcbiAgICByZXR1cm4gZWxlbWVudC50ZXh0Q29udGVudCA/PyB1bmRlZmluZWQ7XG4gIH1cbiAgaWYgKGVsZW1lbnQuY2hpbGRyZW5bMF0/LmNsYXNzTGlzdD8uY29udGFpbnMoXCJtYXRobm9ybWFsXCIpKSB7XG4gICAgcmV0dXJuIGVsZW1lbnQuY2hpbGRyZW5bMF0udGV4dENvbnRlbnQgPz8gdW5kZWZpbmVkO1xuICB9XG4gIHJldHVybiB1bmRlZmluZWQ7XG59O1xuXG5jb25zdCBzZXBhcmF0b3JzID0gW1wibXB1bmN0XCIsIFwibXJlbFwiLCBcIm1vcGVuXCIsIFwibWNsb3NlXCIsIFwibW9wXCJdO1xudHlwZSBTdGF0ZW1lbnQgPSB7IGVsZW1lbnRzOiBIVE1MU3BhbkVsZW1lbnRbXTsgbWF4VmFsdWU6IGJpZ2ludCB9O1xuXG5jb25zdCBjb2xvcml6ZUFsbCA9ICgpID0+IHtcbiAgY29uc3QgY29uc3RyYWludEhlYWRlcnMgPSBBcnJheS5mcm9tKFxuICAgIGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKFwiaDNcIiksXG4gICkuZmlsdGVyKChlKSA9PiBlLnRleHRDb250ZW50ID09PSBcIlx1NTIzNlx1N0QwNFwiIHx8IGUudGV4dENvbnRlbnQgPT09IFwiQ29uc3RyYWludHNcIik7XG4gIGZvciAoY29uc3QgaGVhZGVyIG9mIGNvbnN0cmFpbnRIZWFkZXJzKSB7XG4gICAgY29uc3QgY29uc3RyYWludFJvb3QgPSBoZWFkZXIubmV4dEVsZW1lbnRTaWJsaW5nO1xuICAgIGlmICghY29uc3RyYWludFJvb3QpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29sb3JpemVTZWN0aW9uKGNvbnN0cmFpbnRSb290IGFzIEhUTUxFbGVtZW50KTtcbiAgfVxufTtcbmNvbnN0IGNvbG9yaXplU2VjdGlvbiA9IChjb25zdHJhaW50Um9vdDogSFRNTEVsZW1lbnQpID0+IHtcbiAgY29uc3QgdmFyaWFibGVNYXhlczogUmVjb3JkPHN0cmluZywgYmlnaW50PiA9IHt9O1xuXG4gIGNvbnN0IG1hdGhzID0gQXJyYXkuZnJvbShcbiAgICBjb25zdHJhaW50Um9vdC5xdWVyeVNlbGVjdG9yQWxsKFwiLmthdGV4LWh0bWw6bm90KFtkYXRhLWFsYy1jb2xvcml6ZWRdKVwiKSxcbiAgKTtcbiAgZm9yIChjb25zdCBtYXRoIG9mIG1hdGhzKSB7XG4gICAgbWF0aC5zZXRBdHRyaWJ1dGUoXCJkYXRhLWFsYy1jb2xvcml6ZWRcIiwgXCJ0cnVlXCIpO1xuXG4gICAgY29uc3QgZWxlbWVudHMgPSBBcnJheS5mcm9tKFxuICAgICAgbWF0aC5xdWVyeVNlbGVjdG9yQWxsPEhUTUxTcGFuRWxlbWVudD4oXCIuYmFzZSA+IHNwYW5cIiksXG4gICAgKS5maWx0ZXIoKGUpID0+ICEhZS50ZXh0Q29udGVudCk7XG5cbiAgICBjb25zdCBjdXJyZW50RWxlbWVudHM6IEhUTUxTcGFuRWxlbWVudFtdID0gW107XG4gICAgY29uc3QgY3VycmVudFN0YXRlbWVudDogU3RhdGVtZW50ID0geyBlbGVtZW50czogW10sIG1heFZhbHVlOiAwbiB9O1xuICAgIGNvbnN0IGNvbG9yaXplQ3VycmVudFN0YXRlbWVudCA9ICgpID0+IHtcbiAgICAgIGZvciAoY29uc3QgZSBvZiBjdXJyZW50U3RhdGVtZW50LmVsZW1lbnRzLmZpbHRlcigoZSkgPT4gZ2V0VmFyaWFibGUoZSkpKSB7XG4gICAgICAgIGNvbnN0IHZhcmlhYmxlID0gZ2V0VmFyaWFibGUoZSk7XG4gICAgICAgIGlmICghdmFyaWFibGUpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBwYWludChlLCBjdXJyZW50U3RhdGVtZW50Lm1heFZhbHVlKTtcbiAgICAgICAgdmFyaWFibGVNYXhlc1t2YXJpYWJsZV0gPSBhYnMoY3VycmVudFN0YXRlbWVudC5tYXhWYWx1ZSk7XG4gICAgICB9XG4gICAgICBjdXJyZW50U3RhdGVtZW50LmVsZW1lbnRzLmxlbmd0aCA9IDA7XG4gICAgICBjdXJyZW50U3RhdGVtZW50Lm1heFZhbHVlID0gMG47XG4gICAgfTtcbiAgICBjb25zdCBjb2xvcml6ZUN1cnJlbnRFbGVtZW50ID0gKCkgPT4ge1xuICAgICAgY29uc3QgdmFsdWUgPSBjYWxjdWxhdGVBbmRDb2xvcml6ZShjdXJyZW50RWxlbWVudHMpO1xuICAgICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQgJiYgYWJzKHZhbHVlKSA+IGN1cnJlbnRTdGF0ZW1lbnQubWF4VmFsdWUpIHtcbiAgICAgICAgY3VycmVudFN0YXRlbWVudC5tYXhWYWx1ZSA9IGFicyh2YWx1ZSk7XG4gICAgICB9XG4gICAgICBjdXJyZW50RWxlbWVudHMubGVuZ3RoID0gMDtcbiAgICB9O1xuXG4gICAgbGV0IHdpbGxDaGVja1NlcGFyYXRvciA9IGZhbHNlO1xuXG4gICAgZm9yIChjb25zdCBbaSwgZWxlbWVudF0gb2YgZWxlbWVudHMuZW50cmllcygpKSB7XG4gICAgICBpZiAod2lsbENoZWNrU2VwYXJhdG9yKSB7XG4gICAgICAgIHdpbGxDaGVja1NlcGFyYXRvciA9IGZhbHNlO1xuICAgICAgICBpZiAoIWdldFZhcmlhYmxlKGVsZW1lbnRzW2kgLSAyXSkgfHwgIWdldFZhcmlhYmxlKGVsZW1lbnQpKSB7XG4gICAgICAgICAgY3VycmVudFN0YXRlbWVudC5lbGVtZW50cy5wb3AoKTtcbiAgICAgICAgICBjb2xvcml6ZUN1cnJlbnRTdGF0ZW1lbnQoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKFwibXB1bmN0XCIpKSB7XG4gICAgICAgIHdpbGxDaGVja1NlcGFyYXRvciA9IHRydWU7XG4gICAgICB9XG4gICAgICBpZiAoQXJyYXkuZnJvbShlbGVtZW50LmNsYXNzTGlzdCkuc29tZSgoYykgPT4gc2VwYXJhdG9ycy5pbmNsdWRlcyhjKSkpIHtcbiAgICAgICAgaWYgKGN1cnJlbnRFbGVtZW50cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgY29sb3JpemVDdXJyZW50RWxlbWVudCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgY3VycmVudFN0YXRlbWVudC5lbGVtZW50cy5wdXNoKGVsZW1lbnQpO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHZhcmlhYmxlID0gZ2V0VmFyaWFibGUoZWxlbWVudCk7XG4gICAgICBpZiAodmFyaWFibGUpIHtcbiAgICAgICAgaWYgKHZhcmlhYmxlTWF4ZXNbdmFyaWFibGVdKSB7XG4gICAgICAgICAgcGFpbnQoZWxlbWVudCwgdmFyaWFibGVNYXhlc1t2YXJpYWJsZV0pO1xuICAgICAgICAgIGlmIChjdXJyZW50U3RhdGVtZW50Lm1heFZhbHVlIDwgdmFyaWFibGVNYXhlc1t2YXJpYWJsZV0pIHtcbiAgICAgICAgICAgIGN1cnJlbnRTdGF0ZW1lbnQubWF4VmFsdWUgPSB2YXJpYWJsZU1heGVzW3ZhcmlhYmxlXTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY3VycmVudEVsZW1lbnRzLnB1c2goZWxlbWVudCk7XG4gICAgICBjdXJyZW50U3RhdGVtZW50LmVsZW1lbnRzLnB1c2goZWxlbWVudCk7XG4gICAgfVxuICAgIGlmIChjdXJyZW50RWxlbWVudHMubGVuZ3RoID4gMCkge1xuICAgICAgY29sb3JpemVDdXJyZW50RWxlbWVudCgpO1xuICAgICAgY29sb3JpemVDdXJyZW50U3RhdGVtZW50KCk7XG4gICAgfVxuICB9XG59O1xuXG5zZXRJbnRlcnZhbCgoKSA9PiB7XG4gIGNvbG9yaXplQWxsKCk7XG59LCAxMDApO1xuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7O21CQUFPLFNBQVNBLEVBQUlDLEVBQXVCLENBQ3pDLE9BQU9BLEVBQVEsR0FBSyxDQUFDQSxFQUFRQSxDQUMvQixDQ0NPLElBQU1DLEVBQVEsVUFDUkMsRUFBUSxVQUNSQyxFQUFPLFVBQ1BDLEVBQU8sVUFDUEMsRUFBUyxVQUNUQyxFQUFTLFVBQ1RDLEVBQU0sVUFFTkMsRUFBVSxVQUVWQyxFQUFzQkMsR0FBa0IsQ0FDbkQsSUFBTUMsRUFBU0MsRUFBSUYsQ0FBSyxFQUN4QixPQUFJQyxJQUFXLFlBQWNBLElBQVcsWUFDL0JILEVBRUxHLEdBQVUsS0FBTyxJQUNaSixFQUVMSSxHQUFVLEtBQU8sR0FDWkwsRUFFTEssR0FBVSxLQUFPLEdBQ1pOLEVBRUxNLEdBQVUsTUFDTFAsRUFFTE8sR0FBVSxLQUNMUixFQUVMUSxHQUFVLElBQ0xULEVBRUZELENBQ1QsRUNsQ0EsSUFBTVksRUFBbUJDLEdBQTRDLENBQ25FLElBQUlDLEVBQU8sR0FDWCxRQUFXQyxLQUFXRixFQUNwQixHQUFJRSxFQUFRLFVBQVUsU0FBUyxNQUFNLEVBQ25DLEdBQUlBLEVBQVEsa0JBQW9CLEVBQUcsQ0FDakMsSUFBTUMsRUFBT0osRUFDWCxN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QWlCLFNBQVdILEVBQWNLLENBQVEsSUFDcERGLEVBQWlCLFNBQVdILEVBQWNLLENBQVEsSUFLeERILEVBQWdCLEtBQUtuQyxDQUFPLEVBQzVCb0MsRUFBaUIsU0FBUyxLQUFLcEMsQ0FBTyxDQUN4QyxDQUNJbUMsRUFBZ0IsT0FBUyxJQUMzQkssRUFBdUIsRUFDdkJILEVBQXlCLEVBRTdCLENBQ0YsRUFFQSxZQUFZLElBQU0sQ0FDaEJULEVBQVksQ0FDZCxFQUFHLEdBQUciLAogICJuYW1lcyI6IFsiYWJzIiwgInZhbHVlIiwgImJyb3duIiwgImdyZWVuIiwgImN5YW4iLCAiYmx1ZSIsICJ5ZWxsb3ciLCAib3JhbmdlIiwgInJlZCIsICJzcGVjaWFsIiwgImdldENvbG9yRnJvbU51bWJlciIsICJ2YWx1ZSIsICJhVmFsdWUiLCAiYWJzIiwgImthdGV4SHRtbFRvRXhwciIsICJodG1sIiwgInRleHQiLCAiZWxlbWVudCIsICJkYXRhIiwgInJvb3QiLCAiZWxlbWVudHMiLCAicGFyc2VkIiwgInBhcnNlRXhwciIsICJleHByIiwgImJyYWNrZXQiLCAicmVzdWx0IiwgImN1cnJlbnQiLCAiYyIsICJjYWxjdWxhdGVUcmVlIiwgInRyZWVfIiwgInRyZWUiLCAiaSIsICJiYXNlIiwgInBvd2VyIiwgImxlZnQiLCAicmlnaHQiLCAicGFpbnQiLCAidmFsdWUiLCAiY29sb3IiLCAiZ2V0Q29sb3JGcm9tTnVtYmVyIiwgImUiLCAiY2FsY3VsYXRlQW5kQ29sb3JpemUiLCAibWF0aCIsICJnZXRWYXJpYWJsZSIsICJzZXBhcmF0b3JzIiwgImNvbG9yaXplQWxsIiwgImNvbnN0cmFpbnRIZWFkZXJzIiwgImhlYWRlciIsICJjb25zdHJhaW50Um9vdCIsICJjb2xvcml6ZVNlY3Rpb24iLCAidmFyaWFibGVNYXhlcyIsICJtYXRocyIsICJjdXJyZW50RWxlbWVudHMiLCAiY3VycmVudFN0YXRlbWVudCIsICJjb2xvcml6ZUN1cnJlbnRTdGF0ZW1lbnQiLCAidmFyaWFibGUiLCAiYWJzIiwgImNvbG9yaXplQ3VycmVudEVsZW1lbnQiLCAid2lsbENoZWNrU2VwYXJhdG9yIl0KfQo=