@datagrok/peptides 1.17.19 → 1.17.21

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/603.js ADDED
@@ -0,0 +1,2 @@
1
+ var peptides;(()=>{"use strict";var e,t,r={603:(e,t,r)=>{var n=r(6066);const a=e=>null==e;var o=r(7114),s=r(8774);onmessage=async e=>{const{values:t,startIdx:r,endIdx:l,fnNames:i,opts:p,threshold:c,weights:h,aggregationMethod:u}=e.data;try{const e=new Array(t[0].length).fill(null).map((()=>new Array(0))),f=new Array(t[0].length).fill(null).map((()=>new Array(0))),g=function(e,t){return e===n.G.MANHATTAN?e=>e.reduce(((e,r,n)=>e+r*t[n]),0):e=>{const r=e.reduce(((e,r,n)=>e+(r*t[n])**2),0);return Math.sqrt(r)}}(u,h),v=l-r;t.forEach(((e,r)=>{if((0,o.lW)(i[r]))for(let n=0;n<e.length;++n)a(e[n])||(t[r][n]=new s.A(t[r][n]._data,t[r][n]._length))}));let d=0;const w=new Array(i.length).fill(null).map(((e,t)=>new o.t$(i[t]).getMeasure(p[t]))),y=t[0].length-2-Math.floor(Math.sqrt(-8*r+4*t[0].length*(t[0].length-1)-7)/2-.5),m=r-t[0].length*y+Math.floor((y+1)*(y+2)/2);let b=y,x=m;for(;d<v;){const r=w.map(((e,r)=>a(t[r][b])||a(t[r][x])?1:e(t[r][b],t[r][x]))),n=1===r.length?r[0]:g(r);1-n>c&&(f[b].push(n),e[b].push(x),f[x].push(n),e[x].push(b)),d++,x++,x===t[0].length&&(b++,x=b+1)}postMessage({knnDistances:f,knnIndexes:e})}catch(e){postMessage({error:e})}}}},n={};function a(e){var t=n[e];if(void 0!==t)return t.exports;var o=n[e]={exports:{}};return r[e](o,o.exports,a),o.exports}a.m=r,a.x=()=>{var e=a.O(void 0,[501],(()=>a(603)));return a.O(e)},e=[],a.O=(t,r,n,o)=>{if(!r){var s=1/0;for(c=0;c<e.length;c++){for(var[r,n,o]=e[c],l=!0,i=0;i<r.length;i++)(!1&o||s>=o)&&Object.keys(a.O).every((e=>a.O[e](r[i])))?r.splice(i--,1):(l=!1,o<s&&(s=o));if(l){e.splice(c--,1);var p=n();void 0!==p&&(t=p)}}return t}o=o||0;for(var c=e.length;c>0&&e[c-1][2]>o;c--)e[c]=e[c-1];e[c]=[r,n,o]},a.d=(e,t)=>{for(var r in t)a.o(t,r)&&!a.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},a.f={},a.e=e=>Promise.all(Object.keys(a.f).reduce(((t,r)=>(a.f[r](e,t),t)),[])),a.u=e=>e+".js",a.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),a.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),(()=>{var e;a.g.importScripts&&(e=a.g.location+"");var t=a.g.document;if(!e&&t&&(t.currentScript&&(e=t.currentScript.src),!e)){var r=t.getElementsByTagName("script");if(r.length)for(var n=r.length-1;n>-1&&(!e||!/^http(s?):/.test(e));)e=r[n--].src}if(!e)throw new Error("Automatic publicPath is not supported in this browser");e=e.replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/"),a.p=e})(),(()=>{var e={603:1};a.f.i=(t,r)=>{e[t]||importScripts(a.p+a.u(t))};var t=self.webpackChunkpeptides=self.webpackChunkpeptides||[],r=t.push.bind(t);t.push=t=>{var[n,o,s]=t;for(var l in o)a.o(o,l)&&(a.m[l]=o[l]);for(s&&s(a);n.length;)e[n.pop()]=1;r(t)}})(),t=a.x,a.x=()=>a.e(501).then(t);var o=a.x();peptides=o})();
2
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,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QVMsRUFDbEJtQixHQUFLLEtBQU9pRSxJQUFjLGFBQWFRLEtBQUtSLEtBQWFBLEVBQVlNLEVBQVF2RSxLQUFLc0UsR0FFM0YsQ0FJRCxJQUFLTCxFQUFXLE1BQU0sSUFBSVMsTUFBTSx5REFDaENULEVBQVlBLEVBQVVVLFFBQVEsT0FBUSxJQUFJQSxRQUFRLFFBQVMsSUFBSUEsUUFBUSxZQUFhLEtBQ3BGdkQsRUFBb0J3RCxFQUFJWCxDLFdDZHhCLElBQUlZLEVBQWtCLENBQ3JCLElBQUssR0FnQk56RCxFQUFvQjZCLEVBQUVqRCxFQUFJLENBQUNrRCxFQUFTRyxLQUUvQndCLEVBQWdCM0IsSUFFbEJnQixjQUFjOUMsRUFBb0J3RCxFQUFJeEQsRUFBb0JrQyxFQUFFSixHQUU5RCxFQUdELElBQUk0QixFQUFxQkMsS0FBMkIscUJBQUlBLEtBQTJCLHNCQUFLLEdBQ3BGQyxFQUE2QkYsRUFBbUIvRCxLQUFLa0UsS0FBS0gsR0FDOURBLEVBQW1CL0QsS0F2QkNyQyxJQUNuQixJQUFLcUQsRUFBVW1ELEVBQWFDLEdBQVd6RyxFQUN2QyxJQUFJLElBQUkyQyxLQUFZNkQsRUFDaEI5RCxFQUFvQnlCLEVBQUVxQyxFQUFhN0QsS0FDckNELEVBQW9CTyxFQUFFTixHQUFZNkQsRUFBWTdELElBSWhELElBREc4RCxHQUFTQSxFQUFRL0QsR0FDZFcsRUFBU2xELFFBQ2RnRyxFQUFnQjlDLEVBQVNxRCxPQUFTLEVBQ25DSixFQUEyQnRHLEVBQUssQyxLVm5CN0JkLEVBQU93RCxFQUFvQnRELEVBQy9Cc0QsRUFBb0J0RCxFQUFJLElBQ2hCc0QsRUFBb0JILEVBQUUsS0FBS29FLEtBQUt6SCxHV0R4QyxJQUFJZ0UsRUFBc0JSLEVBQW9CdEQsSSIsInNvdXJjZXMiOlsid2VicGFjazovL3BlcHRpZGVzL3dlYnBhY2svcnVudGltZS9jaHVuayBsb2FkZWQiLCJ3ZWJwYWNrOi8vcGVwdGlkZXMvd2VicGFjay9ydW50aW1lL3N0YXJ0dXAgY2h1bmsgZGVwZW5kZW5jaWVzIiwid2VicGFjazovL3BlcHRpZGVzLy4vbm9kZV9tb2R1bGVzL0BkYXRhZ3Jvay1saWJyYXJpZXMvbWwvc3JjL2Rpc3RhbmNlLW1hdHJpeC91dGlscy5qcyIsIndlYnBhY2s6Ly9wZXB0aWRlcy8uL25vZGVfbW9kdWxlcy9AZGF0YWdyb2stbGlicmFyaWVzL21sL3NyYy9kaXN0YW5jZS1tYXRyaXgva25uLXRocmVzaG9sZC13b3JrZXIuanMiLCJ3ZWJwYWNrOi8vcGVwdGlkZXMvd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vcGVwdGlkZXMvd2VicGFjay9ydW50aW1lL2RlZmluZSBwcm9wZXJ0eSBnZXR0ZXJzIiwid2VicGFjazovL3BlcHRpZGVzL3dlYnBhY2svcnVudGltZS9lbnN1cmUgY2h1bmsiLCJ3ZWJwYWNrOi8vcGVwdGlkZXMvd2VicGFjay9ydW50aW1lL2dldCBqYXZhc2NyaXB0IGNodW5rIGZpbGVuYW1lIiwid2VicGFjazovL3BlcHRpZGVzL3dlYnBhY2svcnVudGltZS9nbG9iYWwiLCJ3ZWJwYWNrOi8vcGVwdGlkZXMvd2VicGFjay9ydW50aW1lL2hhc093blByb3BlcnR5IHNob3J0aGFuZCIsIndlYnBhY2s6Ly9wZXB0aWRlcy93ZWJwYWNrL3J1bnRpbWUvcHVibGljUGF0aCIsIndlYnBhY2s6Ly9wZXB0aWRlcy93ZWJwYWNrL3J1bnRpbWUvaW1wb3J0U2NyaXB0cyBjaHVuayBsb2FkaW5nIiwid2VicGFjazovL3BlcHRpZGVzL3dlYnBhY2svc3RhcnR1cCJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgZGVmZXJyZWQgPSBbXTtcbl9fd2VicGFja19yZXF1aXJlX18uTyA9IChyZXN1bHQsIGNodW5rSWRzLCBmbiwgcHJpb3JpdHkpID0+IHtcblx0aWYoY2h1bmtJZHMpIHtcblx0XHRwcmlvcml0eSA9IHByaW9yaXR5IHx8IDA7XG5cdFx0Zm9yKHZhciBpID0gZGVmZXJyZWQubGVuZ3RoOyBpID4gMCAmJiBkZWZlcnJlZFtpIC0gMV1bMl0gPiBwcmlvcml0eTsgaS0tKSBkZWZlcnJlZFtpXSA9IGRlZmVycmVkW2kgLSAxXTtcblx0XHRkZWZlcnJlZFtpXSA9IFtjaHVua0lkcywgZm4sIHByaW9yaXR5XTtcblx0XHRyZXR1cm47XG5cdH1cblx0dmFyIG5vdEZ1bGZpbGxlZCA9IEluZmluaXR5O1xuXHRmb3IgKHZhciBpID0gMDsgaSA8IGRlZmVycmVkLmxlbmd0aDsgaSsrKSB7XG5cdFx0dmFyIFtjaHVua0lkcywgZm4sIHByaW9yaXR5XSA9IGRlZmVycmVkW2ldO1xuXHRcdHZhciBmdWxmaWxsZWQgPSB0cnVlO1xuXHRcdGZvciAodmFyIGogPSAwOyBqIDwgY2h1bmtJZHMubGVuZ3RoOyBqKyspIHtcblx0XHRcdGlmICgocHJpb3JpdHkgJiAxID09PSAwIHx8IG5vdEZ1bGZpbGxlZCA+PSBwcmlvcml0eSkgJiYgT2JqZWN0LmtleXMoX193ZWJwYWNrX3JlcXVpcmVfXy5PKS5ldmVyeSgoa2V5KSA9PiAoX193ZWJwYWNrX3JlcXVpcmVfXy5PW2tleV0oY2h1bmtJZHNbal0pKSkpIHtcblx0XHRcdFx0Y2h1bmtJZHMuc3BsaWNlKGotLSwgMSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRmdWxmaWxsZWQgPSBmYWxzZTtcblx0XHRcdFx0aWYocHJpb3JpdHkgPCBub3RGdWxmaWxsZWQpIG5vdEZ1bGZpbGxlZCA9IHByaW9yaXR5O1xuXHRcdFx0fVxuXHRcdH1cblx0XHRpZihmdWxmaWxsZWQpIHtcblx0XHRcdGRlZmVycmVkLnNwbGljZShpLS0sIDEpXG5cdFx0XHR2YXIgciA9IGZuKCk7XG5cdFx0XHRpZiAociAhPT0gdW5kZWZpbmVkKSByZXN1bHQgPSByO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gcmVzdWx0O1xufTsiLCJ2YXIgbmV4dCA9IF9fd2VicGFja19yZXF1aXJlX18ueDtcbl9fd2VicGFja19yZXF1aXJlX18ueCA9ICgpID0+IHtcblx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18uZSg1MDEpLnRoZW4obmV4dCk7XG59OyIsImltcG9ydCB7IERpc3RhbmNlQWdncmVnYXRpb25NZXRob2RzIH0gZnJvbSAnLi90eXBlcyc7XG5leHBvcnQgY29uc3QgaXNOaWwgPSAoeCkgPT4geCA9PT0gbnVsbCB8fCB4ID09PSB1bmRlZmluZWQ7XG5leHBvcnQgZnVuY3Rpb24gaW5zZXJ0U21hbGxlcihkaXN0YW5jZXNBciwgaW5kZXhlcywgbnVtLCBpbmRleCkge1xuICAgIGlmIChudW0gPiBkaXN0YW5jZXNBcltkaXN0YW5jZXNBci5sZW5ndGggLSAxXSlcbiAgICAgICAgcmV0dXJuO1xuICAgIGNvbnN0IG5ld1Bvc2l0aW9uID0gZGlzdGFuY2VzQXIuZmluZEluZGV4KCh2KSA9PiBudW0gPCB2KTtcbiAgICBkaXN0YW5jZXNBci5wb3AoKTtcbiAgICBkaXN0YW5jZXNBci5zcGxpY2UobmV3UG9zaXRpb24sIDAsIG51bSk7XG4gICAgaW5kZXhlcy5wb3AoKTtcbiAgICBpbmRleGVzLnNwbGljZShuZXdQb3NpdGlvbiwgMCwgaW5kZXgpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGluc2VydExhcmdlcihkaXN0YW5jZXNBciwgaW5kZXhlcywgbnVtLCBpbmRleCkge1xuICAgIGlmIChudW0gPCBkaXN0YW5jZXNBcltkaXN0YW5jZXNBci5sZW5ndGggLSAxXSlcbiAgICAgICAgcmV0dXJuO1xuICAgIGNvbnN0IG5ld1Bvc2l0aW9uID0gZGlzdGFuY2VzQXIuZmluZEluZGV4KCh2KSA9PiBudW0gPiB2KTtcbiAgICBkaXN0YW5jZXNBci5wb3AoKTtcbiAgICBkaXN0YW5jZXNBci5zcGxpY2UobmV3UG9zaXRpb24sIDAsIG51bSk7XG4gICAgaW5kZXhlcy5wb3AoKTtcbiAgICBpbmRleGVzLnNwbGljZShuZXdQb3NpdGlvbiwgMCwgaW5kZXgpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGdldEFnZ3JlZ2F0aW9uRnVuY3Rpb24oYWdncmVnYXRpb25NZXRob2QsIHdlaWdodHMpIHtcbiAgICBzd2l0Y2ggKGFnZ3JlZ2F0aW9uTWV0aG9kKSB7XG4gICAgICAgIGNhc2UgRGlzdGFuY2VBZ2dyZWdhdGlvbk1ldGhvZHMuTUFOSEFUVEFOOlxuICAgICAgICAgICAgcmV0dXJuICh2cykgPT4gdnMucmVkdWNlKChhY2MsIHZhbCwgaWR4KSA9PiBhY2MgKyB2YWwgKiB3ZWlnaHRzW2lkeF0sIDApO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmV0dXJuICh2cykgPT4ge1xuICAgICAgICAgICAgICAgIC8vIGV1Y2xpZGVhblxuICAgICAgICAgICAgICAgIGNvbnN0IHN1bSA9IHZzLnJlZHVjZSgoYWNjLCB2YWwsIGlkeCkgPT4gYWNjICsgKHZhbCAqIHdlaWdodHNbaWR4XSkgKiogMiwgMCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIE1hdGguc3FydChzdW0pO1xuICAgICAgICAgICAgfTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2lkWFJwYkhNdWFuTWlMQ0p6YjNWeVkyVlNiMjkwSWpvaUlpd2ljMjkxY21ObGN5STZXeUoxZEdsc2N5NTBjeUpkTENKdVlXMWxjeUk2VzEwc0ltMWhjSEJwYm1keklqb2lRVUZCUVN4UFFVRlBMRVZCUVRSQ0xEQkNRVUV3UWl4RlFVRkRMRTFCUVUwc1UwRkJVeXhEUVVGRE8wRkJSVGxGTEUxQlFVMHNRMEZCUXl4TlFVRk5MRXRCUVVzc1IwRkJSeXhEUVVGRExFTkJRVTBzUlVGQlJTeEZRVUZGTEVOQlFVTXNRMEZCUXl4TFFVRkxMRWxCUVVrc1NVRkJTU3hEUVVGRExFdEJRVXNzVTBGQlV5eERRVUZETzBGQlJTOUVMRTFCUVUwc1ZVRkJWU3hoUVVGaExFTkJRVU1zVjBGQmNVSXNSVUZCUlN4UFFVRnBRaXhGUVVGRkxFZEJRVmNzUlVGQlJTeExRVUZoTzBsQlEyaEhMRWxCUVVrc1IwRkJSeXhIUVVGSExGZEJRVmNzUTBGQlF5eFhRVUZYTEVOQlFVTXNUVUZCVFN4SFFVRkRMRU5CUVVNc1EwRkJRenRSUVVONlF5eFBRVUZQTzBsQlJWUXNUVUZCVFN4WFFVRlhMRWRCUVVjc1YwRkJWeXhEUVVGRExGTkJRVk1zUTBGQlF5eERRVUZETEVOQlFVTXNSVUZCUlN4RlFVRkZMRU5CUVVNc1IwRkJSeXhIUVVGSExFTkJRVU1zUTBGQlF5eERRVUZETzBsQlF6RkVMRmRCUVZjc1EwRkJReXhIUVVGSExFVkJRVVVzUTBGQlF6dEpRVU5zUWl4WFFVRlhMRU5CUVVNc1RVRkJUU3hEUVVGRExGZEJRVmNzUlVGQlJTeERRVUZETEVWQlFVVXNSMEZCUnl4RFFVRkRMRU5CUVVNN1NVRkRlRU1zVDBGQlR5eERRVUZETEVkQlFVY3NSVUZCUlN4RFFVRkRPMGxCUTJRc1QwRkJUeXhEUVVGRExFMUJRVTBzUTBGQlF5eFhRVUZYTEVWQlFVVXNRMEZCUXl4RlFVRkZMRXRCUVVzc1EwRkJReXhEUVVGRE8wRkJRM2hETEVOQlFVTTdRVUZGUkN4TlFVRk5MRlZCUVZVc1dVRkJXU3hEUVVGRExGZEJRWEZDTEVWQlFVVXNUMEZCYVVJc1JVRkJSU3hIUVVGWExFVkJRVVVzUzBGQllUdEpRVU12Uml4SlFVRkpMRWRCUVVjc1IwRkJSeXhYUVVGWExFTkJRVU1zVjBGQlZ5eERRVUZETEUxQlFVMHNSMEZCUXl4RFFVRkRMRU5CUVVNN1VVRkRla01zVDBGQlR6dEpRVVZVTEUxQlFVMHNWMEZCVnl4SFFVRkhMRmRCUVZjc1EwRkJReXhUUVVGVExFTkJRVU1zUTBGQlF5eERRVUZETEVWQlFVVXNSVUZCUlN4RFFVRkRMRWRCUVVjc1IwRkJSeXhEUVVGRExFTkJRVU1zUTBGQlF6dEpRVU14UkN4WFFVRlhMRU5CUVVNc1IwRkJSeXhGUVVGRkxFTkJRVU03U1VGRGJFSXNWMEZCVnl4RFFVRkRMRTFCUVUwc1EwRkJReXhYUVVGWExFVkJRVVVzUTBGQlF5eEZRVUZGTEVkQlFVY3NRMEZCUXl4RFFVRkRPMGxCUTNoRExFOUJRVThzUTBGQlF5eEhRVUZITEVWQlFVVXNRMEZCUXp0SlFVTmtMRTlCUVU4c1EwRkJReXhOUVVGTkxFTkJRVU1zVjBGQlZ5eEZRVUZGTEVOQlFVTXNSVUZCUlN4TFFVRkxMRU5CUVVNc1EwRkJRenRCUVVONFF5eERRVUZETzBGQlJVUXNUVUZCVFN4VlFVRlZMSE5DUVVGelFpeERRVU53UXl4cFFrRkJORU1zUlVGQlJTeFBRVUZwUWp0SlFVVXZSQ3hSUVVGUkxHbENRVUZwUWl4RlFVRkZMRU5CUVVNN1VVRkRNVUlzUzBGQlN5d3dRa0ZCTUVJc1EwRkJReXhUUVVGVE8xbEJRM1pETEU5QlFVOHNRMEZCUXl4RlFVRlpMRVZCUVVVc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eE5RVUZOTEVOQlFVTXNRMEZCUXl4SFFVRkhMRVZCUVVVc1IwRkJSeXhGUVVGRkxFZEJRVWNzUlVGQlJTeEZRVUZGTEVOQlFVTXNSMEZCUnl4SFFVRkhMRWRCUVVjc1IwRkJSeXhQUVVGUExFTkJRVU1zUjBGQlJ5eERRVUZETEVWQlFVVXNRMEZCUXl4RFFVRkRMRU5CUVVNN1VVRkRja1k3V1VGRFJTeFBRVUZQTEVOQlFVTXNSVUZCV1N4RlFVRkZMRVZCUVVVN1owSkJRM1JDTEZsQlFWazdaMEpCUTFvc1RVRkJUU3hIUVVGSExFZEJRVWNzUlVGQlJTeERRVUZETEUxQlFVMHNRMEZCUXl4RFFVRkRMRWRCUVVjc1JVRkJSU3hIUVVGSExFVkJRVVVzUjBGQlJ5eEZRVUZGTEVWQlFVVXNRMEZCUXl4SFFVRkhMRWRCUVVjc1EwRkJReXhIUVVGSExFZEJRVWNzVDBGQlR5eERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRMRWxCUVVrc1EwRkJReXhGUVVGRkxFTkJRVU1zUTBGQlF5eERRVUZETzJkQ1FVTTNSU3hQUVVGUExFbEJRVWtzUTBGQlF5eEpRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNN1dVRkRlRUlzUTBGQlF5eERRVUZETzBsQlEwNHNRMEZCUXp0QlFVTklMRU5CUVVNaUxDSnpiM1Z5WTJWelEyOXVkR1Z1ZENJNld5SnBiWEJ2Y25RZ2UwUnBjM1JoYm1ObFFXZG5jbVZuWVhScGIyNU5aWFJvYjJRc0lFUnBjM1JoYm1ObFFXZG5jbVZuWVhScGIyNU5aWFJvYjJSemZTQm1jbTl0SUNjdUwzUjVjR1Z6Snp0Y2JseHVaWGh3YjNKMElHTnZibk4wSUdselRtbHNJRDBnS0hnNklHRnVlU2tnUFQ0Z2VDQTlQVDBnYm5Wc2JDQjhmQ0I0SUQwOVBTQjFibVJsWm1sdVpXUTdYRzVjYm1WNGNHOXlkQ0JtZFc1amRHbHZiaUJwYm5ObGNuUlRiV0ZzYkdWeUtHUnBjM1JoYm1ObGMwRnlPaUJ1ZFcxaVpYSmJYU3dnYVc1a1pYaGxjem9nYm5WdFltVnlXMTBzSUc1MWJUb2diblZ0WW1WeUxDQnBibVJsZURvZ2JuVnRZbVZ5S1NCN1hHNGdJR2xtSUNodWRXMGdQaUJrYVhOMFlXNWpaWE5CY2x0a2FYTjBZVzVqWlhOQmNpNXNaVzVuZEdndE1WMHBYRzRnSUNBZ2NtVjBkWEp1TzF4dVhHNGdJR052Ym5OMElHNWxkMUJ2YzJsMGFXOXVJRDBnWkdsemRHRnVZMlZ6UVhJdVptbHVaRWx1WkdWNEtDaDJLU0E5UGlCdWRXMGdQQ0IyS1R0Y2JpQWdaR2x6ZEdGdVkyVnpRWEl1Y0c5d0tDazdYRzRnSUdScGMzUmhibU5sYzBGeUxuTndiR2xqWlNodVpYZFFiM05wZEdsdmJpd2dNQ3dnYm5WdEtUdGNiaUFnYVc1a1pYaGxjeTV3YjNBb0tUdGNiaUFnYVc1a1pYaGxjeTV6Y0d4cFkyVW9ibVYzVUc5emFYUnBiMjRzSURBc0lHbHVaR1Y0S1R0Y2JuMWNibHh1Wlhod2IzSjBJR1oxYm1OMGFXOXVJR2x1YzJWeWRFeGhjbWRsY2loa2FYTjBZVzVqWlhOQmNqb2diblZ0WW1WeVcxMHNJR2x1WkdWNFpYTTZJRzUxYldKbGNsdGRMQ0J1ZFcwNklHNTFiV0psY2l3Z2FXNWtaWGc2SUc1MWJXSmxjaWtnZTF4dUlDQnBaaUFvYm5WdElEd2daR2x6ZEdGdVkyVnpRWEpiWkdsemRHRnVZMlZ6UVhJdWJHVnVaM1JvTFRGZEtWeHVJQ0FnSUhKbGRIVnlianRjYmx4dUlDQmpiMjV6ZENCdVpYZFFiM05wZEdsdmJpQTlJR1JwYzNSaGJtTmxjMEZ5TG1acGJtUkpibVJsZUNnb2Rpa2dQVDRnYm5WdElENGdkaWs3WEc0Z0lHUnBjM1JoYm1ObGMwRnlMbkJ2Y0NncE8xeHVJQ0JrYVhOMFlXNWpaWE5CY2k1emNHeHBZMlVvYm1WM1VHOXphWFJwYjI0c0lEQXNJRzUxYlNrN1hHNGdJR2x1WkdWNFpYTXVjRzl3S0NrN1hHNGdJR2x1WkdWNFpYTXVjM0JzYVdObEtHNWxkMUJ2YzJsMGFXOXVMQ0F3TENCcGJtUmxlQ2s3WEc1OVhHNWNibVY0Y0c5eWRDQm1kVzVqZEdsdmJpQm5aWFJCWjJkeVpXZGhkR2x2YmtaMWJtTjBhVzl1S0Z4dUlDQmhaMmR5WldkaGRHbHZiazFsZEdodlpEb2dSR2x6ZEdGdVkyVkJaMmR5WldkaGRHbHZiazFsZEdodlpDd2dkMlZwWjJoMGN6b2diblZ0WW1WeVcxMWNiaWs2SUNoMllXeDFaWE02SUc1MWJXSmxjbHRkS1NBOVBpQnVkVzFpWlhJZ2UxeHVJQ0J6ZDJsMFkyZ2dLR0ZuWjNKbFoyRjBhVzl1VFdWMGFHOWtLU0I3WEc0Z0lDQWdZMkZ6WlNCRWFYTjBZVzVqWlVGblozSmxaMkYwYVc5dVRXVjBhRzlrY3k1TlFVNUlRVlJVUVU0NlhHNGdJQ0FnSUNCeVpYUjFjbTRnS0haek9pQnVkVzFpWlhKYlhTa2dQVDRnZG5NdWNtVmtkV05sS0NoaFkyTXNJSFpoYkN3Z2FXUjRLU0E5UGlCaFkyTWdLeUIyWVd3Z0tpQjNaV2xuYUhSelcybGtlRjBzSURBcE8xeHVJQ0FnSUdSbFptRjFiSFE2WEc0Z0lDQWdJQ0J5WlhSMWNtNGdLSFp6T2lCdWRXMWlaWEpiWFNrZ1BUNGdlMXh1SUNBZ0lDQWdJQ0F2THlCbGRXTnNhV1JsWVc1Y2JpQWdJQ0FnSUNBZ1kyOXVjM1FnYzNWdElEMGdkbk11Y21Wa2RXTmxLQ2hoWTJNc0lIWmhiQ3dnYVdSNEtTQTlQaUJoWTJNZ0t5QW9kbUZzSUNvZ2QyVnBaMmgwYzF0cFpIaGRLU0FxS2lBeUxDQXdLVHRjYmlBZ0lDQWdJQ0FnY21WMGRYSnVJRTFoZEdndWMzRnlkQ2h6ZFcwcE8xeHVJQ0FnSUNBZ2ZUdGNiaUFnZlZ4dWZWeHVJbDE5IiwiaW1wb3J0IHsgZ2V0QWdncmVnYXRpb25GdW5jdGlvbiwgaXNOaWwgfSBmcm9tICcuL3V0aWxzJztcbmltcG9ydCB7IE1lYXN1cmUsIGlzQml0QXJyYXlNZXRyaWMgfSBmcm9tICcuLi90eXBlZC1tZXRyaWNzJztcbmltcG9ydCBCaXRBcnJheSBmcm9tICdAZGF0YWdyb2stbGlicmFyaWVzL3V0aWxzL3NyYy9iaXQtYXJyYXknO1xub25tZXNzYWdlID0gYXN5bmMgKGV2ZW50KSA9PiB7XG4gICAgY29uc3QgeyB2YWx1ZXMsIHN0YXJ0SWR4LCBlbmRJZHgsIGZuTmFtZXMsIG9wdHMsIHRocmVzaG9sZCwgd2VpZ2h0cywgYWdncmVnYXRpb25NZXRob2QgfSA9IGV2ZW50LmRhdGE7XG4gICAgdHJ5IHtcbiAgICAgICAgY29uc3Qga25uSW5kZXhlcyA9IG5ldyBBcnJheSh2YWx1ZXNbMF0ubGVuZ3RoKS5maWxsKG51bGwpLm1hcCgoKSA9PiBuZXcgQXJyYXkoMCkpO1xuICAgICAgICBjb25zdCBrbm5EaXN0YW5jZXMgPSBuZXcgQXJyYXkodmFsdWVzWzBdLmxlbmd0aCkuZmlsbChudWxsKS5tYXAoKCkgPT4gbmV3IEFycmF5KDApKTtcbiAgICAgICAgY29uc3QgYWdncmVnYXRlID0gZ2V0QWdncmVnYXRpb25GdW5jdGlvbihhZ2dyZWdhdGlvbk1ldGhvZCwgd2VpZ2h0cyk7XG4gICAgICAgIGNvbnN0IGNodW5rU2l6ZSA9IGVuZElkeCAtIHN0YXJ0SWR4O1xuICAgICAgICB2YWx1ZXMuZm9yRWFjaCgodiwgY29sSWR4KSA9PiB7XG4gICAgICAgICAgICBpZiAoaXNCaXRBcnJheU1ldHJpYyhmbk5hbWVzW2NvbElkeF0pKSB7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB2Lmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpc05pbCh2W2ldKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZXNbY29sSWR4XVtpXSA9IG5ldyBCaXRBcnJheSh2YWx1ZXNbY29sSWR4XVtpXS5fZGF0YSwgdmFsdWVzW2NvbElkeF1baV0uX2xlbmd0aCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgbGV0IGNudCA9IDA7XG4gICAgICAgIGNvbnN0IGRpc3RhbmNlRm5zID0gbmV3IEFycmF5KGZuTmFtZXMubGVuZ3RoKS5maWxsKG51bGwpLm1hcCgoXywgaSkgPT4gbmV3IE1lYXN1cmUoZm5OYW1lc1tpXSkuZ2V0TWVhc3VyZShvcHRzW2ldKSk7XG4gICAgICAgIGNvbnN0IHN0YXJ0Um93ID0gdmFsdWVzWzBdLmxlbmd0aCAtIDIgLSBNYXRoLmZsb29yKE1hdGguc3FydCgtOCAqIHN0YXJ0SWR4ICsgNCAqIHZhbHVlc1swXS5sZW5ndGggKiAodmFsdWVzWzBdLmxlbmd0aCAtIDEpIC0gNykgLyAyIC0gMC41KTtcbiAgICAgICAgY29uc3Qgc3RhcnRDb2wgPSBzdGFydElkeCAtIHZhbHVlc1swXS5sZW5ndGggKiBzdGFydFJvdyArIE1hdGguZmxvb3IoKHN0YXJ0Um93ICsgMSkgKiAoc3RhcnRSb3cgKyAyKSAvIDIpO1xuICAgICAgICBsZXQgbWkgPSBzdGFydFJvdztcbiAgICAgICAgbGV0IG1qID0gc3RhcnRDb2w7XG4gICAgICAgIHdoaWxlIChjbnQgPCBjaHVua1NpemUpIHtcbiAgICAgICAgICAgIC8vY29uc3QgdmFsdWUgPSBzZXExTGlzdFttaV0gJiYgc2VxMUxpc3RbbWpdID8gaGFtbWluZyhzZXExTGlzdFttaV0sIHNlcTFMaXN0W21qXSkgOiAwO1xuICAgICAgICAgICAgY29uc3QgZGlzdGFuY2VWYWx1ZXMgPSBkaXN0YW5jZUZucy5tYXAoKGZuLCBpZHgpID0+ICFpc05pbCh2YWx1ZXNbaWR4XVttaV0pICYmICFpc05pbCh2YWx1ZXNbaWR4XVttal0pID9cbiAgICAgICAgICAgICAgICBmbih2YWx1ZXNbaWR4XVttaV0sIHZhbHVlc1tpZHhdW21qXSkgOiAxKTtcbiAgICAgICAgICAgIC8vIGNvbnN0IHZhbHVlID0gIWlzTmlsKHZhbHVlc1ttaV0pICYmICFpc05pbCh2YWx1ZXNbbWpdKSA/XG4gICAgICAgICAgICAvLyAgIGRpc3RhbmNlRm4odmFsdWVzW21pXSwgdmFsdWVzW21qXSkgOiAxO1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBkaXN0YW5jZVZhbHVlcy5sZW5ndGggPT09IDEgPyBkaXN0YW5jZVZhbHVlc1swXSA6IGFnZ3JlZ2F0ZShkaXN0YW5jZVZhbHVlcyk7XG4gICAgICAgICAgICAvLyBpbnNlcnRTbWFsbGVyKGtubkRpc3RhbmNlc1ttaV0sIGtubkluZGV4ZXNbbWldLCB2YWx1ZSwgbWopO1xuICAgICAgICAgICAgLy8gaW5zZXJ0U21hbGxlcihrbm5EaXN0YW5jZXNbbWpdLCBrbm5JbmRleGVzW21qXSwgdmFsdWUsIG1pKTtcbiAgICAgICAgICAgIGlmICgxIC0gdmFsdWUgPiB0aHJlc2hvbGQpIHtcbiAgICAgICAgICAgICAgICBrbm5EaXN0YW5jZXNbbWldLnB1c2godmFsdWUpO1xuICAgICAgICAgICAgICAgIGtubkluZGV4ZXNbbWldLnB1c2gobWopO1xuICAgICAgICAgICAgICAgIGtubkRpc3RhbmNlc1ttal0ucHVzaCh2YWx1ZSk7XG4gICAgICAgICAgICAgICAga25uSW5kZXhlc1ttal0ucHVzaChtaSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjbnQrKztcbiAgICAgICAgICAgIG1qKys7XG4gICAgICAgICAgICBpZiAobWogPT09IHZhbHVlc1swXS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBtaSsrO1xuICAgICAgICAgICAgICAgIG1qID0gbWkgKyAxO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHBvc3RNZXNzYWdlKHsga25uRGlzdGFuY2VzLCBrbm5JbmRleGVzIH0pO1xuICAgIH1cbiAgICBjYXRjaCAoZSkge1xuICAgICAgICBwb3N0TWVzc2FnZSh7IGVycm9yOiBlIH0pO1xuICAgIH1cbn07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2lhMjV1TFhSb2NtVnphRzlzWkMxM2IzSnJaWEl1YW5NaUxDSnpiM1Z5WTJWU2IyOTBJam9pSWl3aWMyOTFjbU5sY3lJNld5SnJibTR0ZEdoeVpYTm9iMnhrTFhkdmNtdGxjaTUwY3lKZExDSnVZVzFsY3lJNlcxMHNJbTFoY0hCcGJtZHpJam9pUVVGQlFTeFBRVUZQTEVWQlFVTXNjMEpCUVhOQ0xFVkJRVVVzUzBGQlN5eEZRVUZETEUxQlFVMHNVMEZCVXl4RFFVRkRPMEZCUTNSRUxFOUJRVThzUlVGQlpTeFBRVUZQTEVWQlFVVXNaMEpCUVdkQ0xFVkJRVU1zVFVGQlRTeHJRa0ZCYTBJc1EwRkJRenRCUVVONlJTeFBRVUZQTEZGQlFWRXNUVUZCVFN4NVEwRkJlVU1zUTBGQlF6dEJRVWN2UkN4VFFVRlRMRWRCUVVjc1MwRkJTeXhGUVVGRkxFdEJRVXNzUlVGQlJTeEZRVUZGTzBsQlF6RkNMRTFCUVUwc1JVRkJReXhOUVVGTkxFVkJRVVVzVVVGQlVTeEZRVUZGTEUxQlFVMHNSVUZCUlN4UFFVRlBMRVZCUVVVc1NVRkJTU3hGUVVGRkxGTkJRVk1zUlVGQlJTeFBRVUZQTEVWQlFVVXNhVUpCUVdsQ0xFVkJRVU1zUjBGRmFVSXNTMEZCU3l4RFFVRkRMRWxCUVVrc1EwRkJRenRKUVVOc1NDeEpRVUZKTEVOQlFVTTdVVUZEU0N4TlFVRk5MRlZCUVZVc1IwRkJSeXhKUVVGSkxFdEJRVXNzUTBGQlF5eE5RVUZOTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1RVRkJUU3hEUVVGRExFTkJRVU1zU1VGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4RFFVRkRMRWRCUVVjc1EwRkJReXhIUVVGSExFVkJRVVVzUTBGQlF5eEpRVUZKTEV0QlFVc3NRMEZCVXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE8xRkJRekZHTEUxQlFVMHNXVUZCV1N4SFFVRkhMRWxCUVVrc1MwRkJTeXhEUVVGRExFMUJRVTBzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4TlFVRk5MRU5CUVVNc1EwRkJReXhKUVVGSkxFTkJRVU1zU1VGQlNTeERRVUZETEVOQlFVTXNSMEZCUnl4RFFVRkRMRWRCUVVjc1JVRkJSU3hEUVVGRExFbEJRVWtzUzBGQlN5eERRVUZUTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN1VVRkROVVlzVFVGQlRTeFRRVUZUTEVkQlFVY3NjMEpCUVhOQ0xFTkJRVU1zYVVKQlFXbENMRVZCUVVVc1QwRkJUeXhEUVVGRExFTkJRVU03VVVGRGNrVXNUVUZCVFN4VFFVRlRMRWRCUVVjc1RVRkJUU3hIUVVGSExGRkJRVkVzUTBGQlF6dFJRVU53UXl4TlFVRk5MRU5CUVVNc1QwRkJUeXhEUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZGTEUxQlFVMHNSVUZCUlN4RlFVRkZPMWxCUXpOQ0xFbEJRVWtzWjBKQlFXZENMRU5CUVVNc1QwRkJUeXhEUVVGRExFMUJRVTBzUTBGQlF5eERRVUZETEVWQlFVVXNRMEZCUXp0blFrRkRkRU1zUzBGQlN5eEpRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRVZCUVVVc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF5eE5RVUZOTEVWQlFVVXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJRenR2UWtGRGJFTXNTVUZCU1N4TFFVRkxMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETzNkQ1FVRkZMRk5CUVZNN2IwSkJRekZDTEUxQlFVMHNRMEZCUXl4TlFVRk5MRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUjBGQlJ5eEpRVUZKTEZGQlFWRXNRMEZCUXl4TlFVRk5MRU5CUVVNc1RVRkJUU3hEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNTMEZCU3l4RlFVRkZMRTFCUVUwc1EwRkJReXhOUVVGTkxFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4UFFVRlBMRU5CUVVNc1EwRkJRenRuUWtGRGRrWXNRMEZCUXp0WlFVTklMRU5CUVVNN1VVRkRTQ3hEUVVGRExFTkJRVU1zUTBGQlF6dFJRVU5JTEVsQlFVa3NSMEZCUnl4SFFVRkhMRU5CUVVNc1EwRkJRenRSUVVOYUxFMUJRVTBzVjBGQlZ5eEhRVUZITEVsQlFVa3NTMEZCU3l4RFFVRkRMRTlCUVU4c1EwRkJReXhOUVVGTkxFTkJRVU1zUTBGQlF5eEpRVUZKTEVOQlFVTXNTVUZCU1N4RFFVRkRMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RlFVRkZMRU5CUVVNc1NVRkJTU3hQUVVGUExFTkJRVU1zVDBGQlR5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1ZVRkJWU3hEUVVGRExFbEJRVWtzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN1VVRkRjRWdzVFVGQlRTeFJRVUZSTEVkQlFVY3NUVUZCVFN4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFMUJRVTBzUjBGQlJ5eERRVUZETEVkQlFVY3NTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkRhRVFzU1VGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4RFFVRkRMRU5CUVVNc1IwRkJSeXhSUVVGUkxFZEJRVWNzUTBGQlF5eEhRVUZITEUxQlFVMHNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhOUVVGTkxFZEJRVWNzUTBGQlF5eE5RVUZOTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1RVRkJUU3hIUVVGSExFTkJRVU1zUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXl4SFFVRkhMRU5CUVVNc1IwRkJSeXhIUVVGSExFTkJRVU1zUTBGQlF6dFJRVU14Uml4TlFVRk5MRkZCUVZFc1IwRkJSeXhSUVVGUkxFZEJRVWNzVFVGQlRTeERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRTFCUVUwc1IwRkJSeXhSUVVGUkxFZEJRVWNzU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4RFFVRkRMRkZCUVZFc1IwRkJSeXhEUVVGRExFTkJRVU1zUjBGQlJ5eERRVUZETEZGQlFWRXNSMEZCUnl4RFFVRkRMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU1zUTBGQlF6dFJRVU14Unl4SlFVRkpMRVZCUVVVc1IwRkJSeXhSUVVGUkxFTkJRVU03VVVGRGJFSXNTVUZCU1N4RlFVRkZMRWRCUVVjc1VVRkJVU3hEUVVGRE8xRkJRMnhDTEU5QlFVOHNSMEZCUnl4SFFVRkhMRk5CUVZNc1JVRkJSU3hEUVVGRE8xbEJRM1pDTEhWR1FVRjFSanRaUVVOMlJpeE5RVUZOTEdOQlFXTXNSMEZCUnl4WFFVRlhMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU1zUlVGQlJTeEZRVUZGTEVkQlFVY3NSVUZCUlN4RlFVRkZMRU5CUVVNc1EwRkJReXhMUVVGTExFTkJRVU1zVFVGQlRTeERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRMRVZCUVVVc1EwRkJReXhEUVVGRExFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNUVUZCVFN4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRExFVkJRVVVzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXp0blFrRkRkRWNzUlVGQlJTeERRVUZETEUxQlFVMHNRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeE5RVUZOTEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNc1JVRkJSU3hEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN1dVRkROVU1zTWtSQlFUSkVPMWxCUXpORUxEUkRRVUUwUXp0WlFVTTFReXhOUVVGTkxFdEJRVXNzUjBGQlJ5eGpRVUZqTEVOQlFVTXNUVUZCVFN4TFFVRkxMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zWTBGQll5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhUUVVGVExFTkJRVU1zWTBGQll5eERRVUZETEVOQlFVTTdXVUZETVVZc09FUkJRVGhFTzFsQlF6bEVMRGhFUVVFNFJEdFpRVU01UkN4SlFVRkpMRU5CUVVNc1IwRkJSeXhMUVVGTExFZEJRVWNzVTBGQlV5eEZRVUZGTEVOQlFVTTdaMEpCUXpGQ0xGbEJRVmtzUTBGQlF5eEZRVUZGTEVOQlFVTXNRMEZCUXl4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExFTkJRVU03WjBKQlF6ZENMRlZCUVZVc1EwRkJReXhGUVVGRkxFTkJRVU1zUTBGQlF5eEpRVUZKTEVOQlFVTXNSVUZCUlN4RFFVRkRMRU5CUVVNN1owSkJRM2hDTEZsQlFWa3NRMEZCUXl4RlFVRkZMRU5CUVVNc1EwRkJReXhKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEVOQlFVTTdaMEpCUXpkQ0xGVkJRVlVzUTBGQlF5eEZRVUZGTEVOQlFVTXNRMEZCUXl4SlFVRkpMRU5CUVVNc1JVRkJSU3hEUVVGRExFTkJRVU03V1VGRE1VSXNRMEZCUXp0WlFVTkVMRWRCUVVjc1JVRkJSU3hEUVVGRE8xbEJRMDRzUlVGQlJTeEZRVUZGTEVOQlFVTTdXVUZEVEN4SlFVRkpMRVZCUVVVc1MwRkJTeXhOUVVGTkxFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNUVUZCVFN4RlFVRkZMRU5CUVVNN1owSkJRelZDTEVWQlFVVXNSVUZCUlN4RFFVRkRPMmRDUVVOTUxFVkJRVVVzUjBGQlJ5eEZRVUZGTEVkQlFVY3NRMEZCUXl4RFFVRkRPMWxCUTJRc1EwRkJRenRSUVVOSUxFTkJRVU03VVVGRlJDeFhRVUZYTEVOQlFVTXNSVUZCUXl4WlFVRlpMRVZCUVVVc1ZVRkJWU3hGUVVGRExFTkJRVU1zUTBGQlF6dEpRVU14UXl4RFFVRkRPMGxCUVVNc1QwRkJUeXhEUVVGRExFVkJRVVVzUTBGQlF6dFJRVU5ZTEZkQlFWY3NRMEZCUXl4RlFVRkRMRXRCUVVzc1JVRkJSU3hEUVVGRExFVkJRVU1zUTBGQlF5eERRVUZETzBsQlF6RkNMRU5CUVVNN1FVRkRTQ3hEUVVGRExFTkJRVU1pTENKemIzVnlZMlZ6UTI5dWRHVnVkQ0k2V3lKcGJYQnZjblFnZTJkbGRFRm5aM0psWjJGMGFXOXVSblZ1WTNScGIyNHNJR2x6VG1sc2ZTQm1jbTl0SUNjdUwzVjBhV3h6Snp0Y2JtbHRjRzl5ZENCN1MyNXZkMjVOWlhSeWFXTnpMQ0JOWldGemRYSmxMQ0JwYzBKcGRFRnljbUY1VFdWMGNtbGpmU0JtY205dElDY3VMaTkwZVhCbFpDMXRaWFJ5YVdOekp6dGNibWx0Y0c5eWRDQkNhWFJCY25KaGVTQm1jbTl0SUNkQVpHRjBZV2R5YjJzdGJHbGljbUZ5YVdWekwzVjBhV3h6TDNOeVl5OWlhWFF0WVhKeVlYa25PMXh1YVcxd2IzSjBJSHRFYVhOMFlXNWpaVUZuWjNKbFoyRjBhVzl1VFdWMGFHOWtmU0JtY205dElDY3VMM1I1Y0dWekp6dGNibHh1YjI1dFpYTnpZV2RsSUQwZ1lYTjVibU1nS0dWMlpXNTBLU0E5UGlCN1hHNGdJR052Ym5OMElIdDJZV3gxWlhNc0lITjBZWEowU1dSNExDQmxibVJKWkhnc0lHWnVUbUZ0WlhNc0lHOXdkSE1zSUhSb2NtVnphRzlzWkN3Z2QyVnBaMmgwY3l3Z1lXZG5jbVZuWVhScGIyNU5aWFJvYjJSOU9seHVJQ0FnSUh0MllXeDFaWE02SUVGeWNtRjVQR0Z1ZVZ0ZFBpd2djM1JoY25SSlpIZzZJRzUxYldKbGNpd2daVzVrU1dSNE9pQnVkVzFpWlhJc0lHWnVUbUZ0WlhNNklFdHViM2R1VFdWMGNtbGpjMXRkTEZ4dUlDQWdJQ0FnYjNCMGN6b2dZVzU1VzEwc0lIUm9jbVZ6YUc5c1pEb2diblZ0WW1WeUxDQjNaV2xuYUhSek9pQnVkVzFpWlhKYlhTd2dZV2RuY21WbllYUnBiMjVOWlhSb2IyUTZJRVJwYzNSaGJtTmxRV2RuY21WbllYUnBiMjVOWlhSb2IyUjlJRDBnWlhabGJuUXVaR0YwWVR0Y2JpQWdkSEo1SUh0Y2JpQWdJQ0JqYjI1emRDQnJibTVKYm1SbGVHVnpJRDBnYm1WM0lFRnljbUY1S0haaGJIVmxjMXN3WFM1c1pXNW5kR2dwTG1acGJHd29iblZzYkNrdWJXRndLQ2dwSUQwK0lHNWxkeUJCY25KaGVUeHVkVzFpWlhJK0tEQXBLVHRjYmlBZ0lDQmpiMjV6ZENCcmJtNUVhWE4wWVc1alpYTWdQU0J1WlhjZ1FYSnlZWGtvZG1Gc2RXVnpXekJkTG14bGJtZDBhQ2t1Wm1sc2JDaHVkV3hzS1M1dFlYQW9LQ2tnUFQ0Z2JtVjNJRUZ5Y21GNVBHNTFiV0psY2o0b01Da3BPMXh1SUNBZ0lHTnZibk4wSUdGblozSmxaMkYwWlNBOUlHZGxkRUZuWjNKbFoyRjBhVzl1Um5WdVkzUnBiMjRvWVdkbmNtVm5ZWFJwYjI1TlpYUm9iMlFzSUhkbGFXZG9kSE1wTzF4dUlDQWdJR052Ym5OMElHTm9kVzVyVTJsNlpTQTlJR1Z1WkVsa2VDQXRJSE4wWVhKMFNXUjRPMXh1SUNBZ0lIWmhiSFZsY3k1bWIzSkZZV05vS0NoMkxDQmpiMnhKWkhncElEMCtJSHRjYmlBZ0lDQWdJR2xtSUNocGMwSnBkRUZ5Y21GNVRXVjBjbWxqS0dadVRtRnRaWE5iWTI5c1NXUjRYU2twSUh0Y2JpQWdJQ0FnSUNBZ1ptOXlJQ2hzWlhRZ2FTQTlJREE3SUdrZ1BDQjJMbXhsYm1kMGFEc2dLeXRwS1NCN1hHNGdJQ0FnSUNBZ0lDQWdhV1lnS0dselRtbHNLSFpiYVYwcEtTQmpiMjUwYVc1MVpUdGNiaUFnSUNBZ0lDQWdJQ0IyWVd4MVpYTmJZMjlzU1dSNFhWdHBYU0E5SUc1bGR5QkNhWFJCY25KaGVTaDJZV3gxWlhOYlkyOXNTV1I0WFZ0cFhTNWZaR0YwWVN3Z2RtRnNkV1Z6VzJOdmJFbGtlRjFiYVYwdVgyeGxibWQwYUNrN1hHNGdJQ0FnSUNBZ0lIMWNiaUFnSUNBZ0lIMWNiaUFnSUNCOUtUdGNiaUFnSUNCc1pYUWdZMjUwSUQwZ01EdGNiaUFnSUNCamIyNXpkQ0JrYVhOMFlXNWpaVVp1Y3lBOUlHNWxkeUJCY25KaGVTaG1iazVoYldWekxteGxibWQwYUNrdVptbHNiQ2h1ZFd4c0tTNXRZWEFvS0Y4c0lHa3BJRDArSUc1bGR5Qk5aV0Z6ZFhKbEtHWnVUbUZ0WlhOYmFWMHBMbWRsZEUxbFlYTjFjbVVvYjNCMGMxdHBYU2twTzF4dUlDQWdJR052Ym5OMElITjBZWEowVW05M0lEMGdkbUZzZFdWeld6QmRMbXhsYm1kMGFDQXRJRElnTFNCTllYUm9MbVpzYjI5eUtGeHVJQ0FnSUNBZ1RXRjBhQzV6Y1hKMEtDMDRJQ29nYzNSaGNuUkpaSGdnS3lBMElDb2dkbUZzZFdWeld6QmRMbXhsYm1kMGFDQXFJQ2gyWVd4MVpYTmJNRjB1YkdWdVozUm9JQzBnTVNrZ0xTQTNLU0F2SURJZ0xTQXdMalVwTzF4dUlDQWdJR052Ym5OMElITjBZWEowUTI5c0lEMGdjM1JoY25SSlpIZ2dMU0IyWVd4MVpYTmJNRjB1YkdWdVozUm9JQ29nYzNSaGNuUlNiM2NnS3lCTllYUm9MbVpzYjI5eUtDaHpkR0Z5ZEZKdmR5QXJJREVwSUNvZ0tITjBZWEowVW05M0lDc2dNaWtnTHlBeUtUdGNiaUFnSUNCc1pYUWdiV2tnUFNCemRHRnlkRkp2ZHp0Y2JpQWdJQ0JzWlhRZ2JXb2dQU0J6ZEdGeWRFTnZiRHRjYmlBZ0lDQjNhR2xzWlNBb1kyNTBJRHdnWTJoMWJtdFRhWHBsS1NCN1hHNGdJQ0FnSUNBdkwyTnZibk4wSUhaaGJIVmxJRDBnYzJWeE1VeHBjM1JiYldsZElDWW1JSE5sY1RGTWFYTjBXMjFxWFNBL0lHaGhiVzFwYm1jb2MyVnhNVXhwYzNSYmJXbGRMQ0J6WlhFeFRHbHpkRnR0YWwwcElEb2dNRHRjYmlBZ0lDQWdJR052Ym5OMElHUnBjM1JoYm1ObFZtRnNkV1Z6SUQwZ1pHbHpkR0Z1WTJWR2JuTXViV0Z3S0NobWJpd2dhV1I0S1NBOVBpQWhhWE5PYVd3b2RtRnNkV1Z6VzJsa2VGMWJiV2xkS1NBbUppQWhhWE5PYVd3b2RtRnNkV1Z6VzJsa2VGMWJiV3BkS1NBL1hHNGdJQ0FnSUNBZ0lHWnVLSFpoYkhWbGMxdHBaSGhkVzIxcFhTd2dkbUZzZFdWelcybGtlRjFiYldwZEtTQTZJREVwTzF4dUlDQWdJQ0FnTHk4Z1kyOXVjM1FnZG1Gc2RXVWdQU0FoYVhOT2FXd29kbUZzZFdWelcyMXBYU2tnSmlZZ0lXbHpUbWxzS0haaGJIVmxjMXR0YWwwcElEOWNiaUFnSUNBZ0lDOHZJQ0FnWkdsemRHRnVZMlZHYmloMllXeDFaWE5iYldsZExDQjJZV3gxWlhOYmJXcGRLU0E2SURFN1hHNGdJQ0FnSUNCamIyNXpkQ0IyWVd4MVpTQTlJR1JwYzNSaGJtTmxWbUZzZFdWekxteGxibWQwYUNBOVBUMGdNU0EvSUdScGMzUmhibU5sVm1Gc2RXVnpXekJkSURvZ1lXZG5jbVZuWVhSbEtHUnBjM1JoYm1ObFZtRnNkV1Z6S1R0Y2JpQWdJQ0FnSUM4dklHbHVjMlZ5ZEZOdFlXeHNaWElvYTI1dVJHbHpkR0Z1WTJWelcyMXBYU3dnYTI1dVNXNWtaWGhsYzF0dGFWMHNJSFpoYkhWbExDQnRhaWs3WEc0Z0lDQWdJQ0F2THlCcGJuTmxjblJUYldGc2JHVnlLR3R1YmtScGMzUmhibU5sYzF0dGFsMHNJR3R1YmtsdVpHVjRaWE5iYldwZExDQjJZV3gxWlN3Z2JXa3BPMXh1SUNBZ0lDQWdhV1lnS0RFZ0xTQjJZV3gxWlNBK0lIUm9jbVZ6YUc5c1pDa2dlMXh1SUNBZ0lDQWdJQ0JyYm01RWFYTjBZVzVqWlhOYmJXbGRMbkIxYzJnb2RtRnNkV1VwTzF4dUlDQWdJQ0FnSUNCcmJtNUpibVJsZUdWelcyMXBYUzV3ZFhOb0tHMXFLVHRjYmlBZ0lDQWdJQ0FnYTI1dVJHbHpkR0Z1WTJWelcyMXFYUzV3ZFhOb0tIWmhiSFZsS1R0Y2JpQWdJQ0FnSUNBZ2EyNXVTVzVrWlhobGMxdHRhbDB1Y0hWemFDaHRhU2s3WEc0Z0lDQWdJQ0I5WEc0Z0lDQWdJQ0JqYm5Rckt6dGNiaUFnSUNBZ0lHMXFLeXM3WEc0Z0lDQWdJQ0JwWmlBb2JXb2dQVDA5SUhaaGJIVmxjMXN3WFM1c1pXNW5kR2dwSUh0Y2JpQWdJQ0FnSUNBZ2JXa3JLenRjYmlBZ0lDQWdJQ0FnYldvZ1BTQnRhU0FySURFN1hHNGdJQ0FnSUNCOVhHNGdJQ0FnZlZ4dVhHNGdJQ0FnY0c5emRFMWxjM05oWjJVb2UydHVia1JwYzNSaGJtTmxjeXdnYTI1dVNXNWtaWGhsYzMwcE8xeHVJQ0I5SUdOaGRHTm9JQ2hsS1NCN1hHNGdJQ0FnY0c5emRFMWxjM05oWjJVb2UyVnljbTl5T2lCbGZTazdYRzRnSUgxY2JuMDdYRzRpWFgwPSIsIi8vIFRoZSBtb2R1bGUgY2FjaGVcbnZhciBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX18gPSB7fTtcblxuLy8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbmZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG5cdHZhciBjYWNoZWRNb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdO1xuXHRpZiAoY2FjaGVkTW9kdWxlICE9PSB1bmRlZmluZWQpIHtcblx0XHRyZXR1cm4gY2FjaGVkTW9kdWxlLmV4cG9ydHM7XG5cdH1cblx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcblx0dmFyIG1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF0gPSB7XG5cdFx0Ly8gbm8gbW9kdWxlLmlkIG5lZWRlZFxuXHRcdC8vIG5vIG1vZHVsZS5sb2FkZWQgbmVlZGVkXG5cdFx0ZXhwb3J0czoge31cblx0fTtcblxuXHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cblx0X193ZWJwYWNrX21vZHVsZXNfX1ttb2R1bGVJZF0obW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cblx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcblx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xufVxuXG4vLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuX193ZWJwYWNrX3JlcXVpcmVfXy5tID0gX193ZWJwYWNrX21vZHVsZXNfXztcblxuLy8gdGhlIHN0YXJ0dXAgZnVuY3Rpb25cbl9fd2VicGFja19yZXF1aXJlX18ueCA9ICgpID0+IHtcblx0Ly8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG5cdC8vIFRoaXMgZW50cnkgbW9kdWxlIGRlcGVuZHMgb24gb3RoZXIgbG9hZGVkIGNodW5rcyBhbmQgZXhlY3V0aW9uIG5lZWQgdG8gYmUgZGVsYXllZFxuXHR2YXIgX193ZWJwYWNrX2V4cG9ydHNfXyA9IF9fd2VicGFja19yZXF1aXJlX18uTyh1bmRlZmluZWQsIFs1MDFdLCAoKSA9PiAoX193ZWJwYWNrX3JlcXVpcmVfXyg2MDMpKSlcblx0X193ZWJwYWNrX2V4cG9ydHNfXyA9IF9fd2VicGFja19yZXF1aXJlX18uTyhfX3dlYnBhY2tfZXhwb3J0c19fKTtcblx0cmV0dXJuIF9fd2VicGFja19leHBvcnRzX187XG59O1xuXG4iLCIvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9ucyBmb3IgaGFybW9ueSBleHBvcnRzXG5fX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSAoZXhwb3J0cywgZGVmaW5pdGlvbikgPT4ge1xuXHRmb3IodmFyIGtleSBpbiBkZWZpbml0aW9uKSB7XG5cdFx0aWYoX193ZWJwYWNrX3JlcXVpcmVfXy5vKGRlZmluaXRpb24sIGtleSkgJiYgIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBrZXkpKSB7XG5cdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywga2V5LCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZGVmaW5pdGlvbltrZXldIH0pO1xuXHRcdH1cblx0fVxufTsiLCJfX3dlYnBhY2tfcmVxdWlyZV9fLmYgPSB7fTtcbi8vIFRoaXMgZmlsZSBjb250YWlucyBvbmx5IHRoZSBlbnRyeSBjaHVuay5cbi8vIFRoZSBjaHVuayBsb2FkaW5nIGZ1bmN0aW9uIGZvciBhZGRpdGlvbmFsIGNodW5rc1xuX193ZWJwYWNrX3JlcXVpcmVfXy5lID0gKGNodW5rSWQpID0+IHtcblx0cmV0dXJuIFByb21pc2UuYWxsKE9iamVjdC5rZXlzKF9fd2VicGFja19yZXF1aXJlX18uZikucmVkdWNlKChwcm9taXNlcywga2V5KSA9PiB7XG5cdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5mW2tleV0oY2h1bmtJZCwgcHJvbWlzZXMpO1xuXHRcdHJldHVybiBwcm9taXNlcztcblx0fSwgW10pKTtcbn07IiwiLy8gVGhpcyBmdW5jdGlvbiBhbGxvdyB0byByZWZlcmVuY2UgYXN5bmMgY2h1bmtzIGFuZCBzaWJsaW5nIGNodW5rcyBmb3IgdGhlIGVudHJ5cG9pbnRcbl9fd2VicGFja19yZXF1aXJlX18udSA9IChjaHVua0lkKSA9PiB7XG5cdC8vIHJldHVybiB1cmwgZm9yIGZpbGVuYW1lcyBiYXNlZCBvbiB0ZW1wbGF0ZVxuXHRyZXR1cm4gXCJcIiArIGNodW5rSWQgKyBcIi5qc1wiO1xufTsiLCJfX3dlYnBhY2tfcmVxdWlyZV9fLmcgPSAoZnVuY3Rpb24oKSB7XG5cdGlmICh0eXBlb2YgZ2xvYmFsVGhpcyA9PT0gJ29iamVjdCcpIHJldHVybiBnbG9iYWxUaGlzO1xuXHR0cnkge1xuXHRcdHJldHVybiB0aGlzIHx8IG5ldyBGdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpO1xuXHR9IGNhdGNoIChlKSB7XG5cdFx0aWYgKHR5cGVvZiB3aW5kb3cgPT09ICdvYmplY3QnKSByZXR1cm4gd2luZG93O1xuXHR9XG59KSgpOyIsIl9fd2VicGFja19yZXF1aXJlX18ubyA9IChvYmosIHByb3ApID0+IChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBwcm9wKSkiLCJ2YXIgc2NyaXB0VXJsO1xuaWYgKF9fd2VicGFja19yZXF1aXJlX18uZy5pbXBvcnRTY3JpcHRzKSBzY3JpcHRVcmwgPSBfX3dlYnBhY2tfcmVxdWlyZV9fLmcubG9jYXRpb24gKyBcIlwiO1xudmFyIGRvY3VtZW50ID0gX193ZWJwYWNrX3JlcXVpcmVfXy5nLmRvY3VtZW50O1xuaWYgKCFzY3JpcHRVcmwgJiYgZG9jdW1lbnQpIHtcblx0aWYgKGRvY3VtZW50LmN1cnJlbnRTY3JpcHQpXG5cdFx0c2NyaXB0VXJsID0gZG9jdW1lbnQuY3VycmVudFNjcmlwdC5zcmM7XG5cdGlmICghc2NyaXB0VXJsKSB7XG5cdFx0dmFyIHNjcmlwdHMgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZShcInNjcmlwdFwiKTtcblx0XHRpZihzY3JpcHRzLmxlbmd0aCkge1xuXHRcdFx0dmFyIGkgPSBzY3JpcHRzLmxlbmd0aCAtIDE7XG5cdFx0XHR3aGlsZSAoaSA+IC0xICYmICghc2NyaXB0VXJsIHx8ICEvXmh0dHAocz8pOi8udGVzdChzY3JpcHRVcmwpKSkgc2NyaXB0VXJsID0gc2NyaXB0c1tpLS1dLnNyYztcblx0XHR9XG5cdH1cbn1cbi8vIFdoZW4gc3VwcG9ydGluZyBicm93c2VycyB3aGVyZSBhbiBhdXRvbWF0aWMgcHVibGljUGF0aCBpcyBub3Qgc3VwcG9ydGVkIHlvdSBtdXN0IHNwZWNpZnkgYW4gb3V0cHV0LnB1YmxpY1BhdGggbWFudWFsbHkgdmlhIGNvbmZpZ3VyYXRpb25cbi8vIG9yIHBhc3MgYW4gZW1wdHkgc3RyaW5nIChcIlwiKSBhbmQgc2V0IHRoZSBfX3dlYnBhY2tfcHVibGljX3BhdGhfXyB2YXJpYWJsZSBmcm9tIHlvdXIgY29kZSB0byB1c2UgeW91ciBvd24gbG9naWMuXG5pZiAoIXNjcmlwdFVybCkgdGhyb3cgbmV3IEVycm9yKFwiQXV0b21hdGljIHB1YmxpY1BhdGggaXMgbm90IHN1cHBvcnRlZCBpbiB0aGlzIGJyb3dzZXJcIik7XG5zY3JpcHRVcmwgPSBzY3JpcHRVcmwucmVwbGFjZSgvIy4qJC8sIFwiXCIpLnJlcGxhY2UoL1xcPy4qJC8sIFwiXCIpLnJlcGxhY2UoL1xcL1teXFwvXSskLywgXCIvXCIpO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5wID0gc2NyaXB0VXJsOyIsIi8vIG5vIGJhc2VVUklcblxuLy8gb2JqZWN0IHRvIHN0b3JlIGxvYWRlZCBjaHVua3Ncbi8vIFwiMVwiIG1lYW5zIFwiYWxyZWFkeSBsb2FkZWRcIlxudmFyIGluc3RhbGxlZENodW5rcyA9IHtcblx0NjAzOiAxXG59O1xuXG4vLyBpbXBvcnRTY3JpcHRzIGNodW5rIGxvYWRpbmdcbnZhciBpbnN0YWxsQ2h1bmsgPSAoZGF0YSkgPT4ge1xuXHR2YXIgW2NodW5rSWRzLCBtb3JlTW9kdWxlcywgcnVudGltZV0gPSBkYXRhO1xuXHRmb3IodmFyIG1vZHVsZUlkIGluIG1vcmVNb2R1bGVzKSB7XG5cdFx0aWYoX193ZWJwYWNrX3JlcXVpcmVfXy5vKG1vcmVNb2R1bGVzLCBtb2R1bGVJZCkpIHtcblx0XHRcdF9fd2VicGFja19yZXF1aXJlX18ubVttb2R1bGVJZF0gPSBtb3JlTW9kdWxlc1ttb2R1bGVJZF07XG5cdFx0fVxuXHR9XG5cdGlmKHJ1bnRpbWUpIHJ1bnRpbWUoX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cdHdoaWxlKGNodW5rSWRzLmxlbmd0aClcblx0XHRpbnN0YWxsZWRDaHVua3NbY2h1bmtJZHMucG9wKCldID0gMTtcblx0cGFyZW50Q2h1bmtMb2FkaW5nRnVuY3Rpb24oZGF0YSk7XG59O1xuX193ZWJwYWNrX3JlcXVpcmVfXy5mLmkgPSAoY2h1bmtJZCwgcHJvbWlzZXMpID0+IHtcblx0Ly8gXCIxXCIgaXMgdGhlIHNpZ25hbCBmb3IgXCJhbHJlYWR5IGxvYWRlZFwiXG5cdGlmKCFpbnN0YWxsZWRDaHVua3NbY2h1bmtJZF0pIHtcblx0XHRpZih0cnVlKSB7IC8vIGFsbCBjaHVua3MgaGF2ZSBKU1xuXHRcdFx0aW1wb3J0U2NyaXB0cyhfX3dlYnBhY2tfcmVxdWlyZV9fLnAgKyBfX3dlYnBhY2tfcmVxdWlyZV9fLnUoY2h1bmtJZCkpO1xuXHRcdH1cblx0fVxufTtcblxudmFyIGNodW5rTG9hZGluZ0dsb2JhbCA9IHNlbGZbXCJ3ZWJwYWNrQ2h1bmtwZXB0aWRlc1wiXSA9IHNlbGZbXCJ3ZWJwYWNrQ2h1bmtwZXB0aWRlc1wiXSB8fCBbXTtcbnZhciBwYXJlbnRDaHVua0xvYWRpbmdGdW5jdGlvbiA9IGNodW5rTG9hZGluZ0dsb2JhbC5wdXNoLmJpbmQoY2h1bmtMb2FkaW5nR2xvYmFsKTtcbmNodW5rTG9hZGluZ0dsb2JhbC5wdXNoID0gaW5zdGFsbENodW5rO1xuXG4vLyBubyBITVJcblxuLy8gbm8gSE1SIG1hbmlmZXN0IiwiLy8gcnVuIHN0YXJ0dXBcbnZhciBfX3dlYnBhY2tfZXhwb3J0c19fID0gX193ZWJwYWNrX3JlcXVpcmVfXy54KCk7XG4iXSwibmFtZXMiOlsiZGVmZXJyZWQiLCJuZXh0IiwiaXNOaWwiLCJ4Iiwib25tZXNzYWdlIiwiYXN5bmMiLCJldmVudCIsInZhbHVlcyIsInN0YXJ0SWR4IiwiZW5kSWR4IiwiZm5OYW1lcyIsIm9wdHMiLCJ0aHJlc2hvbGQiLCJ3ZWlnaHRzIiwiYWdncmVnYXRpb25NZXRob2QiLCJkYXRhIiwia25uSW5kZXhlcyIsIkFycmF5IiwibGVuZ3RoIiwiZmlsbCIsIm1hcCIsImtubkRpc3RhbmNlcyIsImFnZ3JlZ2F0ZSIsIk1BTkhBVFRBTiIsInZzIiwicmVkdWNlIiwiYWNjIiwidmFsIiwiaWR4Iiwic3VtIiwiTWF0aCIsInNxcnQiLCJnZXRBZ2dyZWdhdGlvbkZ1bmN0aW9uIiwiY2h1bmtTaXplIiwiZm9yRWFjaCIsInYiLCJjb2xJZHgiLCJpIiwiX2RhdGEiLCJfbGVuZ3RoIiwiY250IiwiZGlzdGFuY2VGbnMiLCJfIiwiZ2V0TWVhc3VyZSIsInN0YXJ0Um93IiwiZmxvb3IiLCJzdGFydENvbCIsIm1pIiwibWoiLCJkaXN0YW5jZVZhbHVlcyIsImZuIiwidmFsdWUiLCJwdXNoIiwicG9zdE1lc3NhZ2UiLCJlIiwiZXJyb3IiLCJfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX18iLCJfX3dlYnBhY2tfcmVxdWlyZV9fIiwibW9kdWxlSWQiLCJjYWNoZWRNb2R1bGUiLCJ1bmRlZmluZWQiLCJleHBvcnRzIiwibW9kdWxlIiwiX193ZWJwYWNrX21vZHVsZXNfXyIsIm0iLCJfX3dlYnBhY2tfZXhwb3J0c19fIiwiTyIsInJlc3VsdCIsImNodW5rSWRzIiwicHJpb3JpdHkiLCJub3RGdWxmaWxsZWQiLCJJbmZpbml0eSIsImZ1bGZpbGxlZCIsImoiLCJPYmplY3QiLCJrZXlzIiwiZXZlcnkiLCJrZXkiLCJzcGxpY2UiLCJyIiwiZCIsImRlZmluaXRpb24iLCJvIiwiZGVmaW5lUHJvcGVydHkiLCJlbnVtZXJhYmxlIiwiZ2V0IiwiZiIsImNodW5rSWQiLCJQcm9taXNlIiwiYWxsIiwicHJvbWlzZXMiLCJ1IiwiZyIsImdsb2JhbFRoaXMiLCJ0aGlzIiwiRnVuY3Rpb24iLCJ3aW5kb3ciLCJvYmoiLCJwcm9wIiwicHJvdG90eXBlIiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwic2NyaXB0VXJsIiwiaW1wb3J0U2NyaXB0cyIsImxvY2F0aW9uIiwiZG9jdW1lbnQiLCJjdXJyZW50U2NyaXB0Iiwic3JjIiwic2NyaXB0cyIsImdldEVsZW1lbnRzQnlUYWdOYW1lIiwidGVzdCIsIkVycm9yIiwicmVwbGFjZSIsInAiLCJpbnN0YWxsZWRDaHVua3MiLCJjaHVua0xvYWRpbmdHbG9iYWwiLCJzZWxmIiwicGFyZW50Q2h1bmtMb2FkaW5nRnVuY3Rpb24iLCJiaW5kIiwibW9yZU1vZHVsZXMiLCJydW50aW1lIiwicG9wIiwidGhlbiJdLCJzb3VyY2VSb290IjoiIn0=
package/dist/682.js ADDED
@@ -0,0 +1,2 @@
1
+ var peptides;(()=>{"use strict";var t={5540:(t,n,e)=>{e.d(n,{K:()=>i}),t=e.hmd(t);var r,i=(r="undefined"!=typeof document&&document.currentScript?document.currentScript.src:void 0,function(t={}){var n,e,i=void 0!==t?t:{};i.ready=new Promise((function(t,r){n=t,e=r}));var o,a=Object.assign({},i),s="object"==typeof window,u="function"==typeof importScripts,c=("object"==typeof process&&"object"==typeof process.versions&&process.versions.node,"");(s||u)&&(u?c=self.location.href:"undefined"!=typeof document&&document.currentScript&&(c=document.currentScript.src),r&&(c=r),c=0!==c.indexOf("blob:")?c.substr(0,c.replace(/[?#].*/,"").lastIndexOf("/")+1):"",u&&(o=t=>{var n=new XMLHttpRequest;return n.open("GET",t,!1),n.responseType="arraybuffer",n.send(null),new Uint8Array(n.response)})),i.print||console.log.bind(console);var f,l,p=i.printErr||console.warn.bind(console);Object.assign(i,a),a=null,i.arguments&&i.arguments,i.thisProgram&&i.thisProgram,i.quit&&i.quit,i.wasmBinary&&(f=i.wasmBinary),i.noExitRuntime,"object"!=typeof WebAssembly&&E("no native wasm support detected");var h,d,m,y=!1;function b(){var t=l.buffer;i.HEAP8=h=new Int8Array(t),i.HEAP16=new Int16Array(t),i.HEAP32=new Int32Array(t),i.HEAPU8=d=new Uint8Array(t),i.HEAPU16=new Uint16Array(t),i.HEAPU32=m=new Uint32Array(t),i.HEAPF32=new Float32Array(t),i.HEAPF64=new Float64Array(t)}var v=[],w=[],g=[],_=0,A=null,x=null;function E(t){i.onAbort&&i.onAbort(t),p(t="Aborted("+t+")"),y=!0,t+=". Build with -sASSERTIONS for more info.";var n=new WebAssembly.RuntimeError(t);throw e(n),n}var R,P;function S(t){return t.startsWith("data:application/octet-stream;base64,")}function U(t){try{if(t==R&&f)return new Uint8Array(f);if(o)return o(t);throw"both async and sync fetching of the wasm failed"}catch(t){E(t)}}function j(t,n,e){return function(t){return f||!s&&!u||"function"!=typeof fetch?Promise.resolve().then((function(){return U(t)})):fetch(t,{credentials:"same-origin"}).then((function(n){if(!n.ok)throw"failed to load wasm binary file at '"+t+"'";return n.arrayBuffer()})).catch((function(){return U(t)}))}(t).then((function(t){return WebAssembly.instantiate(t,n)})).then((function(t){return t})).then(e,(function(t){p("failed to asynchronously prepare wasm: "+t),E(t)}))}function O(t){for(;t.length>0;)t.shift()(i)}function I(t){this.excPtr=t,this.ptr=t-24,this.set_type=function(t){m[this.ptr+4>>2]=t},this.get_type=function(){return m[this.ptr+4>>2]},this.set_destructor=function(t){m[this.ptr+8>>2]=t},this.get_destructor=function(){return m[this.ptr+8>>2]},this.set_caught=function(t){t=t?1:0,h[this.ptr+12|0]=t},this.get_caught=function(){return 0!=h[this.ptr+12|0]},this.set_rethrown=function(t){t=t?1:0,h[this.ptr+13|0]=t},this.get_rethrown=function(){return 0!=h[this.ptr+13|0]},this.init=function(t,n){this.set_adjusted_ptr(0),this.set_type(t),this.set_destructor(n)},this.set_adjusted_ptr=function(t){m[this.ptr+16>>2]=t},this.get_adjusted_ptr=function(){return m[this.ptr+16>>2]},this.get_exception_ptr=function(){if(L(this.get_type()))return m[this.excPtr>>2];var t=this.get_adjusted_ptr();return 0!==t?t:this.excPtr}}function C(t){var n=l.buffer;try{return l.grow(t-n.byteLength+65535>>>16),b(),1}catch(t){}}function H(t){return i["_"+t]}S(R="wasmDbscan.wasm")||(P=R,R=i.locateFile?i.locateFile(P,c):c+P);var T="undefined"!=typeof TextDecoder?new TextDecoder("utf8"):void 0;function k(t,n,e,r,i){var o={string:t=>{var n=0;return null!=t&&0!==t&&(n=function(t){var n=function(t){for(var n=0,e=0;e<t.length;++e){var r=t.charCodeAt(e);r<=127?n++:r<=2047?n+=2:r>=55296&&r<=57343?(n+=4,++e):n+=3}return n}(t)+1,e=B(n);return function(t,n,e){!function(t,n,e,r){if(!(r>0))return 0;for(var i=e+r-1,o=0;o<t.length;++o){var a=t.charCodeAt(o);if(a>=55296&&a<=57343&&(a=65536+((1023&a)<<10)|1023&t.charCodeAt(++o)),a<=127){if(e>=i)break;n[e++]=a}else if(a<=2047){if(e+1>=i)break;n[e++]=192|a>>6,n[e++]=128|63&a}else if(a<=65535){if(e+2>=i)break;n[e++]=224|a>>12,n[e++]=128|a>>6&63,n[e++]=128|63&a}else{if(e+3>=i)break;n[e++]=240|a>>18,n[e++]=128|a>>12&63,n[e++]=128|a>>6&63,n[e++]=128|63&a}}n[e]=0}(t,d,n,e)}(t,e,n),e}(t)),n},array:t=>{var n,e,r=B(t.length);return n=t,e=r,h.set(n,e),r}},a=H(t),s=[],u=0;if(r)for(var c=0;c<r.length;c++){var f=o[e[c]];f?(0===u&&(u=W()),s[c]=f(r[c])):s[c]=r[c]}var l=a.apply(null,s);return function(t){return 0!==u&&D(u),function(t){return"string"===n?(e=t)?function(t,n,e){for(var r=n+e,i=n;t[i]&&!(i>=r);)++i;if(i-n>16&&t.buffer&&T)return T.decode(t.subarray(n,i));for(var o="";n<i;){var a=t[n++];if(128&a){var s=63&t[n++];if(192!=(224&a)){var u=63&t[n++];if((a=224==(240&a)?(15&a)<<12|s<<6|u:(7&a)<<18|s<<12|u<<6|63&t[n++])<65536)o+=String.fromCharCode(a);else{var c=a-65536;o+=String.fromCharCode(55296|c>>10,56320|1023&c)}}else o+=String.fromCharCode((31&a)<<6|s)}else o+=String.fromCharCode(a)}return o}(d,e,r):"":"boolean"===n?Boolean(t):t;var e,r}(t)}(l)}var F,M={__cxa_throw:function(t,n,e){throw new I(t).init(n,e),t},abort:function(){E("")},emscripten_memcpy_big:function(t,n,e){d.copyWithin(t,n,n+e)},emscripten_resize_heap:function(t){var n,e=d.length,r=2147483648;if((t>>>=0)>r)return!1;for(var i=1;i<=4;i*=2){var o=e*(1+.2/i);if(o=Math.min(o,t+100663296),C(Math.min(r,(n=Math.max(t,o))+(65536-n%65536)%65536)))return!0}return!1}},W=(function(){var t,n,r,o,a={env:M,wasi_snapshot_preview1:M};function s(t,n){var e,r=t.exports;return i.asm=r,l=i.asm.memory,b(),i.asm.__indirect_function_table,e=i.asm.__wasm_call_ctors,w.unshift(e),function(t){if(_--,i.monitorRunDependencies&&i.monitorRunDependencies(_),0==_&&(null!==A&&(clearInterval(A),A=null),x)){var n=x;x=null,n()}}(),r}if(_++,i.monitorRunDependencies&&i.monitorRunDependencies(_),i.instantiateWasm)try{return i.instantiateWasm(a,s)}catch(t){p("Module.instantiateWasm callback failed with error: "+t),e(t)}(t=f,n=R,r=a,o=function(t){s(t.instance)},t||"function"!=typeof WebAssembly.instantiateStreaming||S(n)||"function"!=typeof fetch?j(n,r,o):fetch(n,{credentials:"same-origin"}).then((function(t){return WebAssembly.instantiateStreaming(t,r).then(o,(function(t){return p("wasm streaming compile failed: "+t),p("falling back to ArrayBuffer instantiation"),j(n,r,o)}))}))).catch(e)}(),i._dbscan=function(){return(i._dbscan=i.asm.dbscan).apply(null,arguments)},i._malloc=function(){return(i._malloc=i.asm.malloc).apply(null,arguments)},i._free=function(){return(i._free=i.asm.free).apply(null,arguments)},function(){return(W=i.asm.stackSave).apply(null,arguments)}),D=function(){return(D=i.asm.stackRestore).apply(null,arguments)},B=function(){return(B=i.asm.stackAlloc).apply(null,arguments)},L=function(){return(L=i.asm.__cxa_is_pointer_type).apply(null,arguments)};function q(){function t(){F||(F=!0,i.calledRun=!0,y||(O(w),n(i),i.onRuntimeInitialized&&i.onRuntimeInitialized(),function(){if(i.postRun)for("function"==typeof i.postRun&&(i.postRun=[i.postRun]);i.postRun.length;)t=i.postRun.shift(),g.unshift(t);var t;O(g)}()))}_>0||(function(){if(i.preRun)for("function"==typeof i.preRun&&(i.preRun=[i.preRun]);i.preRun.length;)t=i.preRun.shift(),v.unshift(t);var t;O(v)}(),_>0||(i.setStatus?(i.setStatus("Running..."),setTimeout((function(){setTimeout((function(){i.setStatus("")}),1),t()}),1)):t()))}if(i.ccall=k,i.cwrap=function(t,n,e,r){var i=!e||e.every((t=>"number"===t||"boolean"===t));return"string"!==n&&i&&!r?H(t):function(){return k(t,n,e,arguments)}},x=function t(){F||q(),F||(x=t)},i.preInit)for("function"==typeof i.preInit&&(i.preInit=[i.preInit]);i.preInit.length>0;)i.preInit.pop()();return q(),t.ready});"object"==typeof exports?t.exports=i:"function"==typeof define&&e.amdO?define([],(function(){return i})):"object"==typeof exports&&(exports.exportCppDbscanLib=i)},8396:(t,n,e)=>{t.exports=e.p+"9a8fbf37666e32487835.wasm"}},n={};function e(r){var i=n[r];if(void 0!==i)return i.exports;var o=n[r]={id:r,loaded:!1,exports:{}};return t[r](o,o.exports,e),o.loaded=!0,o.exports}e.m=t,e.amdO={},e.d=(t,n)=>{for(var r in n)e.o(n,r)&&!e.o(t,r)&&Object.defineProperty(t,r,{enumerable:!0,get:n[r]})},e.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(t){if("object"==typeof window)return window}}(),e.hmd=t=>((t=Object.create(t)).children||(t.children=[]),Object.defineProperty(t,"exports",{enumerable:!0,set:()=>{throw new Error("ES Modules may not assign module.exports or exports.*, Use ESM export syntax, instead: "+t.id)}}),t),e.o=(t,n)=>Object.prototype.hasOwnProperty.call(t,n),(()=>{var t;e.g.importScripts&&(t=e.g.location+"");var n=e.g.document;if(!t&&n&&(n.currentScript&&(t=n.currentScript.src),!t)){var r=n.getElementsByTagName("script");if(r.length)for(var i=r.length-1;i>-1&&(!t||!/^http(s?):/.test(t));)t=r[i--].src}if(!t)throw new Error("Automatic publicPath is not supported in this browser");t=t.replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/"),e.p=t})(),e.b=self.location+"";var r=e(5540);onmessage=t=>{const{embedX:n,embedY:i,epsilon:o,minPts:a}=t.data,s={};var u,c,f,l;u=void 0,c=void 0,l=function*(){try{const t=yield async function(t,n,i,o){const a=new URL(e(8396),e.b).href,s=a.substring(0,a.lastIndexOf("/")+1)+"wasmDbscan.wasm";let u;try{u=await(0,r.K)({locateFile:()=>a,printErr:t=>{}})}catch(t){try{u=await(0,r.K)({locateFile:()=>s,printErr:t=>{}})}catch(t){throw console.error(t),new Error("Unable to load wasm file for dbscan")}}const c=u.cwrap("dbscan","null",["number","number","number","number","number","number"]),f=Float32Array.BYTES_PER_ELEMENT*t.length,l=u._malloc(f),p=u._malloc(f),h=new Uint8Array(u.HEAPU8.buffer,l,f);h.set(new Uint8Array(t.buffer));const d=new Uint8Array(u.HEAPU8.buffer,p,f);d.set(new Uint8Array(n.buffer));const m=u._malloc(f),y=new Uint8Array(u.HEAPU8.buffer,m,f);c(l,p,t.length,i,o,m);const b=new Int32Array(y.buffer,y.byteOffset,t.length);return u._free(h.byteOffset),u._free(d.byteOffset),u._free(y.byteOffset),b}(n,i,o,a);s.clusters=t,postMessage(s)}catch(t){s.error=t,postMessage(s)}},new((f=void 0)||(f=Promise))((function(t,n){function e(t){try{i(l.next(t))}catch(t){n(t)}}function r(t){try{i(l.throw(t))}catch(t){n(t)}}function i(n){var i;n.done?t(n.value):(i=n.value,i instanceof f?i:new f((function(t){t(i)}))).then(e,r)}i((l=l.apply(u,c||[])).next())}))},peptides={}})();
2
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,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SzlCLEVBQWlCLE1BQUU2QixHQUFTLENBQUUsTUFBT3pOLEdBQUt6RCxFQUFPeUQsRUFBSSxDQUFFLENBQzdGLFNBQVMwTixFQUFLdkYsR0FKbEIsSUFBZXNGLEVBSWF0RixFQUFPMEYsS0FBT3ZSLEVBQVE2TCxFQUFPc0YsUUFKMUNBLEVBSXlEdEYsRUFBT3NGLE1BSmhEQSxhQUFpQjlCLEVBQUk4QixFQUFRLElBQUk5QixHQUFFLFNBQVVyUCxHQUFXQSxFQUFRbVIsRUFBUSxLQUlqQjNNLEtBQUswTSxFQUFXSSxFQUFXLENBQzdHRixHQUFNOUIsRUFBWUEsRUFBVW5HLE1BQU1nRyxFQUFTQyxHQUFjLEtBQUtpQyxPQUNsRSxHQWdCSyxFIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcGVwdGlkZXMvLi9ub2RlX21vZHVsZXMvQGRhdGFncm9rLWxpYnJhcmllcy9tYXRoL3NyYy9kYnNjYW4vd2FzbS93YXNtRGJzY2FuLmpzIiwid2VicGFjazovL3BlcHRpZGVzL3dlYnBhY2svYm9vdHN0cmFwIiwid2VicGFjazovL3BlcHRpZGVzL3dlYnBhY2svcnVudGltZS9hbWQgb3B0aW9ucyIsIndlYnBhY2s6Ly9wZXB0aWRlcy93ZWJwYWNrL3J1bnRpbWUvZGVmaW5lIHByb3BlcnR5IGdldHRlcnMiLCJ3ZWJwYWNrOi8vcGVwdGlkZXMvd2VicGFjay9ydW50aW1lL2dsb2JhbCIsIndlYnBhY2s6Ly9wZXB0aWRlcy93ZWJwYWNrL3J1bnRpbWUvaGFybW9ueSBtb2R1bGUgZGVjb3JhdG9yIiwid2VicGFjazovL3BlcHRpZGVzL3dlYnBhY2svcnVudGltZS9oYXNPd25Qcm9wZXJ0eSBzaG9ydGhhbmQiLCJ3ZWJwYWNrOi8vcGVwdGlkZXMvd2VicGFjay9ydW50aW1lL3B1YmxpY1BhdGgiLCJ3ZWJwYWNrOi8vcGVwdGlkZXMvd2VicGFjay9ydW50aW1lL2ltcG9ydFNjcmlwdHMgY2h1bmsgbG9hZGluZyIsIndlYnBhY2s6Ly9wZXB0aWRlcy8uL25vZGVfbW9kdWxlcy9AZGF0YWdyb2stbGlicmFyaWVzL21hdGgvc3JjL2Ric2Nhbi93YXNtL2NsdXN0ZXJpbmctd29ya2VyLmpzIiwid2VicGFjazovL3BlcHRpZGVzLy4vbm9kZV9tb2R1bGVzL0BkYXRhZ3Jvay1saWJyYXJpZXMvbWF0aC9zcmMvZGJzY2FuL3dhc20vZGJzY2FuLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlxyXG5leHBvcnQgdmFyIGV4cG9ydENwcERic2NhbkxpYiA9ICgoKSA9PiB7XHJcbiAgdmFyIF9zY3JpcHREaXIgPSB0eXBlb2YgZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnICYmIGRvY3VtZW50LmN1cnJlbnRTY3JpcHQgPyBkb2N1bWVudC5jdXJyZW50U2NyaXB0LnNyYyA6IHVuZGVmaW5lZDtcclxuICBcclxuICByZXR1cm4gKFxyXG5mdW5jdGlvbihleHBvcnRDcHBEYnNjYW5MaWIgPSB7fSkgIHtcclxuXHJcbi8vIGluY2x1ZGU6IHNoZWxsLmpzXHJcbi8vIFRoZSBNb2R1bGUgb2JqZWN0OiBPdXIgaW50ZXJmYWNlIHRvIHRoZSBvdXRzaWRlIHdvcmxkLiBXZSBpbXBvcnRcclxuLy8gYW5kIGV4cG9ydCB2YWx1ZXMgb24gaXQuIFRoZXJlIGFyZSB2YXJpb3VzIHdheXMgTW9kdWxlIGNhbiBiZSB1c2VkOlxyXG4vLyAxLiBOb3QgZGVmaW5lZC4gV2UgY3JlYXRlIGl0IGhlcmVcclxuLy8gMi4gQSBmdW5jdGlvbiBwYXJhbWV0ZXIsIGZ1bmN0aW9uKE1vZHVsZSkgeyAuLmdlbmVyYXRlZCBjb2RlLi4gfVxyXG4vLyAzLiBwcmUtcnVuIGFwcGVuZGVkIGl0LCB2YXIgTW9kdWxlID0ge307IC4uZ2VuZXJhdGVkIGNvZGUuLlxyXG4vLyA0LiBFeHRlcm5hbCBzY3JpcHQgdGFnIGRlZmluZXMgdmFyIE1vZHVsZS5cclxuLy8gV2UgbmVlZCB0byBjaGVjayBpZiBNb2R1bGUgYWxyZWFkeSBleGlzdHMgKGUuZy4gY2FzZSAzIGFib3ZlKS5cclxuLy8gU3Vic3RpdHV0aW9uIHdpbGwgYmUgcmVwbGFjZWQgd2l0aCBhY3R1YWwgY29kZSBvbiBsYXRlciBzdGFnZSBvZiB0aGUgYnVpbGQsXHJcbi8vIHRoaXMgd2F5IENsb3N1cmUgQ29tcGlsZXIgd2lsbCBub3QgbWFuZ2xlIGl0IChlLmcuIGNhc2UgNC4gYWJvdmUpLlxyXG4vLyBOb3RlIHRoYXQgaWYgeW91IHdhbnQgdG8gcnVuIGNsb3N1cmUsIGFuZCBhbHNvIHRvIHVzZSBNb2R1bGVcclxuLy8gYWZ0ZXIgdGhlIGdlbmVyYXRlZCBjb2RlLCB5b3Ugd2lsbCBuZWVkIHRvIGRlZmluZSAgIHZhciBNb2R1bGUgPSB7fTtcclxuLy8gYmVmb3JlIHRoZSBjb2RlLiBUaGVuIHRoYXQgb2JqZWN0IHdpbGwgYmUgdXNlZCBpbiB0aGUgY29kZSwgYW5kIHlvdVxyXG4vLyBjYW4gY29udGludWUgdG8gdXNlIE1vZHVsZSBhZnRlcndhcmRzIGFzIHdlbGwuXHJcbnZhciBNb2R1bGUgPSB0eXBlb2YgZXhwb3J0Q3BwRGJzY2FuTGliICE9ICd1bmRlZmluZWQnID8gZXhwb3J0Q3BwRGJzY2FuTGliIDoge307XHJcblxyXG4vLyBTZXQgdXAgdGhlIHByb21pc2UgdGhhdCBpbmRpY2F0ZXMgdGhlIE1vZHVsZSBpcyBpbml0aWFsaXplZFxyXG52YXIgcmVhZHlQcm9taXNlUmVzb2x2ZSwgcmVhZHlQcm9taXNlUmVqZWN0O1xyXG5Nb2R1bGVbJ3JlYWR5J10gPSBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHtcclxuICByZWFkeVByb21pc2VSZXNvbHZlID0gcmVzb2x2ZTtcclxuICByZWFkeVByb21pc2VSZWplY3QgPSByZWplY3Q7XHJcbn0pO1xyXG5cclxuLy8gLS1wcmUtanNlcyBhcmUgZW1pdHRlZCBhZnRlciB0aGUgTW9kdWxlIGludGVncmF0aW9uIGNvZGUsIHNvIHRoYXQgdGhleSBjYW5cclxuLy8gcmVmZXIgdG8gTW9kdWxlIChpZiB0aGV5IGNob29zZTsgdGhleSBjYW4gYWxzbyBkZWZpbmUgTW9kdWxlKVxyXG5cclxuXHJcbi8vIFNvbWV0aW1lcyBhbiBleGlzdGluZyBNb2R1bGUgb2JqZWN0IGV4aXN0cyB3aXRoIHByb3BlcnRpZXNcclxuLy8gbWVhbnQgdG8gb3ZlcndyaXRlIHRoZSBkZWZhdWx0IG1vZHVsZSBmdW5jdGlvbmFsaXR5LiBIZXJlXHJcbi8vIHdlIGNvbGxlY3QgdGhvc2UgcHJvcGVydGllcyBhbmQgcmVhcHBseSBfYWZ0ZXJfIHdlIGNvbmZpZ3VyZVxyXG4vLyB0aGUgY3VycmVudCBlbnZpcm9ubWVudCdzIGRlZmF1bHRzIHRvIGF2b2lkIGhhdmluZyB0byBiZSBzb1xyXG4vLyBkZWZlbnNpdmUgZHVyaW5nIGluaXRpYWxpemF0aW9uLlxyXG52YXIgbW9kdWxlT3ZlcnJpZGVzID0gT2JqZWN0LmFzc2lnbih7fSwgTW9kdWxlKTtcclxuXHJcbnZhciBhcmd1bWVudHNfID0gW107XHJcbnZhciB0aGlzUHJvZ3JhbSA9ICcuL3RoaXMucHJvZ3JhbSc7XHJcbnZhciBxdWl0XyA9IChzdGF0dXMsIHRvVGhyb3cpID0+IHtcclxuICB0aHJvdyB0b1Rocm93O1xyXG59O1xyXG5cclxuLy8gRGV0ZXJtaW5lIHRoZSBydW50aW1lIGVudmlyb25tZW50IHdlIGFyZSBpbi4gWW91IGNhbiBjdXN0b21pemUgdGhpcyBieVxyXG4vLyBzZXR0aW5nIHRoZSBFTlZJUk9OTUVOVCBzZXR0aW5nIGF0IGNvbXBpbGUgdGltZSAoc2VlIHNldHRpbmdzLmpzKS5cclxuXHJcbi8vIEF0dGVtcHQgdG8gYXV0by1kZXRlY3QgdGhlIGVudmlyb25tZW50XHJcbnZhciBFTlZJUk9OTUVOVF9JU19XRUIgPSB0eXBlb2Ygd2luZG93ID09ICdvYmplY3QnO1xyXG52YXIgRU5WSVJPTk1FTlRfSVNfV09SS0VSID0gdHlwZW9mIGltcG9ydFNjcmlwdHMgPT0gJ2Z1bmN0aW9uJztcclxuLy8gTi5iLiBFbGVjdHJvbi5qcyBlbnZpcm9ubWVudCBpcyBzaW11bHRhbmVvdXNseSBhIE5PREUtZW52aXJvbm1lbnQsIGJ1dFxyXG4vLyBhbHNvIGEgd2ViIGVudmlyb25tZW50LlxyXG52YXIgRU5WSVJPTk1FTlRfSVNfTk9ERSA9IHR5cGVvZiBwcm9jZXNzID09ICdvYmplY3QnICYmIHR5cGVvZiBwcm9jZXNzLnZlcnNpb25zID09ICdvYmplY3QnICYmIHR5cGVvZiBwcm9jZXNzLnZlcnNpb25zLm5vZGUgPT0gJ3N0cmluZyc7XHJcbnZhciBFTlZJUk9OTUVOVF9JU19TSEVMTCA9ICFFTlZJUk9OTUVOVF9JU19XRUIgJiYgIUVOVklST05NRU5UX0lTX05PREUgJiYgIUVOVklST05NRU5UX0lTX1dPUktFUjtcclxuXHJcbi8vIGAvYCBzaG91bGQgYmUgcHJlc2VudCBhdCB0aGUgZW5kIGlmIGBzY3JpcHREaXJlY3RvcnlgIGlzIG5vdCBlbXB0eVxyXG52YXIgc2NyaXB0RGlyZWN0b3J5ID0gJyc7XHJcbmZ1bmN0aW9uIGxvY2F0ZUZpbGUocGF0aCkge1xyXG4gIGlmIChNb2R1bGVbJ2xvY2F0ZUZpbGUnXSkge1xyXG4gICAgcmV0dXJuIE1vZHVsZVsnbG9jYXRlRmlsZSddKHBhdGgsIHNjcmlwdERpcmVjdG9yeSk7XHJcbiAgfVxyXG4gIHJldHVybiBzY3JpcHREaXJlY3RvcnkgKyBwYXRoO1xyXG59XHJcblxyXG4vLyBIb29rcyB0aGF0IGFyZSBpbXBsZW1lbnRlZCBkaWZmZXJlbnRseSBpbiBkaWZmZXJlbnQgcnVudGltZSBlbnZpcm9ubWVudHMuXHJcbnZhciByZWFkXyxcclxuICAgIHJlYWRBc3luYyxcclxuICAgIHJlYWRCaW5hcnksXHJcbiAgICBzZXRXaW5kb3dUaXRsZTtcclxuXHJcbi8vIE5vdGUgdGhhdCB0aGlzIGluY2x1ZGVzIE5vZGUuanMgd29ya2VycyB3aGVuIHJlbGV2YW50IChwdGhyZWFkcyBpcyBlbmFibGVkKS5cclxuLy8gTm9kZS5qcyB3b3JrZXJzIGFyZSBkZXRlY3RlZCBhcyBhIGNvbWJpbmF0aW9uIG9mIEVOVklST05NRU5UX0lTX1dPUktFUiBhbmRcclxuLy8gRU5WSVJPTk1FTlRfSVNfTk9ERS5cclxuaWYgKEVOVklST05NRU5UX0lTX1dFQiB8fCBFTlZJUk9OTUVOVF9JU19XT1JLRVIpIHtcclxuICBpZiAoRU5WSVJPTk1FTlRfSVNfV09SS0VSKSB7IC8vIENoZWNrIHdvcmtlciwgbm90IHdlYiwgc2luY2Ugd2luZG93IGNvdWxkIGJlIHBvbHlmaWxsZWRcclxuICAgIHNjcmlwdERpcmVjdG9yeSA9IHNlbGYubG9jYXRpb24uaHJlZjtcclxuICB9IGVsc2UgaWYgKHR5cGVvZiBkb2N1bWVudCAhPSAndW5kZWZpbmVkJyAmJiBkb2N1bWVudC5jdXJyZW50U2NyaXB0KSB7IC8vIHdlYlxyXG4gICAgc2NyaXB0RGlyZWN0b3J5ID0gZG9jdW1lbnQuY3VycmVudFNjcmlwdC5zcmM7XHJcbiAgfVxyXG4gIC8vIFdoZW4gTU9EVUxBUklaRSwgdGhpcyBKUyBtYXkgYmUgZXhlY3V0ZWQgbGF0ZXIsIGFmdGVyIGRvY3VtZW50LmN1cnJlbnRTY3JpcHRcclxuICAvLyBpcyBnb25lLCBzbyB3ZSBzYXZlZCBpdCwgYW5kIHdlIHVzZSBpdCBoZXJlIGluc3RlYWQgb2YgYW55IG90aGVyIGluZm8uXHJcbiAgaWYgKF9zY3JpcHREaXIpIHtcclxuICAgIHNjcmlwdERpcmVjdG9yeSA9IF9zY3JpcHREaXI7XHJcbiAgfVxyXG4gIC8vIGJsb2IgdXJscyBsb29rIGxpa2UgYmxvYjpodHRwOi8vc2l0ZS5jb20vZXRjL2V0YyBhbmQgd2UgY2Fubm90IGluZmVyIGFueXRoaW5nIGZyb20gdGhlbS5cclxuICAvLyBvdGhlcndpc2UsIHNsaWNlIG9mZiB0aGUgZmluYWwgcGFydCBvZiB0aGUgdXJsIHRvIGZpbmQgdGhlIHNjcmlwdCBkaXJlY3RvcnkuXHJcbiAgLy8gaWYgc2NyaXB0RGlyZWN0b3J5IGRvZXMgbm90IGNvbnRhaW4gYSBzbGFzaCwgbGFzdEluZGV4T2Ygd2lsbCByZXR1cm4gLTEsXHJcbiAgLy8gYW5kIHNjcmlwdERpcmVjdG9yeSB3aWxsIGNvcnJlY3RseSBiZSByZXBsYWNlZCB3aXRoIGFuIGVtcHR5IHN0cmluZy5cclxuICAvLyBJZiBzY3JpcHREaXJlY3RvcnkgY29udGFpbnMgYSBxdWVyeSAoc3RhcnRpbmcgd2l0aCA/KSBvciBhIGZyYWdtZW50IChzdGFydGluZyB3aXRoICMpLFxyXG4gIC8vIHRoZXkgYXJlIHJlbW92ZWQgYmVjYXVzZSB0aGV5IGNvdWxkIGNvbnRhaW4gYSBzbGFzaC5cclxuICBpZiAoc2NyaXB0RGlyZWN0b3J5LmluZGV4T2YoJ2Jsb2I6JykgIT09IDApIHtcclxuICAgIHNjcmlwdERpcmVjdG9yeSA9IHNjcmlwdERpcmVjdG9yeS5zdWJzdHIoMCwgc2NyaXB0RGlyZWN0b3J5LnJlcGxhY2UoL1s/I10uKi8sIFwiXCIpLmxhc3RJbmRleE9mKCcvJykrMSk7XHJcbiAgfSBlbHNlIHtcclxuICAgIHNjcmlwdERpcmVjdG9yeSA9ICcnO1xyXG4gIH1cclxuXHJcbiAgLy8gRGlmZmVyZW50aWF0ZSB0aGUgV2ViIFdvcmtlciBmcm9tIHRoZSBOb2RlIFdvcmtlciBjYXNlLCBhcyByZWFkaW5nIG11c3RcclxuICAvLyBiZSBkb25lIGRpZmZlcmVudGx5LlxyXG4gIHtcclxuLy8gaW5jbHVkZTogd2ViX29yX3dvcmtlcl9zaGVsbF9yZWFkLmpzXHJcbnJlYWRfID0gKHVybCkgPT4ge1xyXG4gICAgICB2YXIgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XHJcbiAgICAgIHhoci5vcGVuKCdHRVQnLCB1cmwsIGZhbHNlKTtcclxuICAgICAgeGhyLnNlbmQobnVsbCk7XHJcbiAgICAgIHJldHVybiB4aHIucmVzcG9uc2VUZXh0O1xyXG4gIH1cclxuXHJcbiAgaWYgKEVOVklST05NRU5UX0lTX1dPUktFUikge1xyXG4gICAgcmVhZEJpbmFyeSA9ICh1cmwpID0+IHtcclxuICAgICAgICB2YXIgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XHJcbiAgICAgICAgeGhyLm9wZW4oJ0dFVCcsIHVybCwgZmFsc2UpO1xyXG4gICAgICAgIHhoci5yZXNwb25zZVR5cGUgPSAnYXJyYXlidWZmZXInO1xyXG4gICAgICAgIHhoci5zZW5kKG51bGwpO1xyXG4gICAgICAgIHJldHVybiBuZXcgVWludDhBcnJheSgvKiogQHR5cGV7IUFycmF5QnVmZmVyfSAqLyh4aHIucmVzcG9uc2UpKTtcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICByZWFkQXN5bmMgPSAodXJsLCBvbmxvYWQsIG9uZXJyb3IpID0+IHtcclxuICAgIHZhciB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcclxuICAgIHhoci5vcGVuKCdHRVQnLCB1cmwsIHRydWUpO1xyXG4gICAgeGhyLnJlc3BvbnNlVHlwZSA9ICdhcnJheWJ1ZmZlcic7XHJcbiAgICB4aHIub25sb2FkID0gKCkgPT4ge1xyXG4gICAgICBpZiAoeGhyLnN0YXR1cyA9PSAyMDAgfHwgKHhoci5zdGF0dXMgPT0gMCAmJiB4aHIucmVzcG9uc2UpKSB7IC8vIGZpbGUgVVJMcyBjYW4gcmV0dXJuIDBcclxuICAgICAgICBvbmxvYWQoeGhyLnJlc3BvbnNlKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgb25lcnJvcigpO1xyXG4gICAgfTtcclxuICAgIHhoci5vbmVycm9yID0gb25lcnJvcjtcclxuICAgIHhoci5zZW5kKG51bGwpO1xyXG4gIH1cclxuXHJcbi8vIGVuZCBpbmNsdWRlOiB3ZWJfb3Jfd29ya2VyX3NoZWxsX3JlYWQuanNcclxuICB9XHJcblxyXG4gIHNldFdpbmRvd1RpdGxlID0gKHRpdGxlKSA9PiBkb2N1bWVudC50aXRsZSA9IHRpdGxlO1xyXG59IGVsc2Vcclxue1xyXG59XHJcblxyXG52YXIgb3V0ID0gTW9kdWxlWydwcmludCddIHx8IGNvbnNvbGUubG9nLmJpbmQoY29uc29sZSk7XHJcbnZhciBlcnIgPSBNb2R1bGVbJ3ByaW50RXJyJ10gfHwgY29uc29sZS53YXJuLmJpbmQoY29uc29sZSk7XHJcblxyXG4vLyBNZXJnZSBiYWNrIGluIHRoZSBvdmVycmlkZXNcclxuT2JqZWN0LmFzc2lnbihNb2R1bGUsIG1vZHVsZU92ZXJyaWRlcyk7XHJcbi8vIEZyZWUgdGhlIG9iamVjdCBoaWVyYXJjaHkgY29udGFpbmVkIGluIHRoZSBvdmVycmlkZXMsIHRoaXMgbGV0cyB0aGUgR0NcclxuLy8gcmVjbGFpbSBkYXRhIHVzZWQgZS5nLiBpbiBtZW1vcnlJbml0aWFsaXplclJlcXVlc3QsIHdoaWNoIGlzIGEgbGFyZ2UgdHlwZWQgYXJyYXkuXHJcbm1vZHVsZU92ZXJyaWRlcyA9IG51bGw7XHJcblxyXG4vLyBFbWl0IGNvZGUgdG8gaGFuZGxlIGV4cGVjdGVkIHZhbHVlcyBvbiB0aGUgTW9kdWxlIG9iamVjdC4gVGhpcyBhcHBsaWVzIE1vZHVsZS54XHJcbi8vIHRvIHRoZSBwcm9wZXIgbG9jYWwgeC4gVGhpcyBoYXMgdHdvIGJlbmVmaXRzOiBmaXJzdCwgd2Ugb25seSBlbWl0IGl0IGlmIGl0IGlzXHJcbi8vIGV4cGVjdGVkIHRvIGFycml2ZSwgYW5kIHNlY29uZCwgYnkgdXNpbmcgYSBsb2NhbCBldmVyeXdoZXJlIGVsc2UgdGhhdCBjYW4gYmVcclxuLy8gbWluaWZpZWQuXHJcblxyXG5pZiAoTW9kdWxlWydhcmd1bWVudHMnXSkgYXJndW1lbnRzXyA9IE1vZHVsZVsnYXJndW1lbnRzJ107XHJcblxyXG5pZiAoTW9kdWxlWyd0aGlzUHJvZ3JhbSddKSB0aGlzUHJvZ3JhbSA9IE1vZHVsZVsndGhpc1Byb2dyYW0nXTtcclxuXHJcbmlmIChNb2R1bGVbJ3F1aXQnXSkgcXVpdF8gPSBNb2R1bGVbJ3F1aXQnXTtcclxuXHJcbi8vIHBlcmZvcm0gYXNzZXJ0aW9ucyBpbiBzaGVsbC5qcyBhZnRlciB3ZSBzZXQgdXAgb3V0KCkgYW5kIGVycigpLCBhcyBvdGhlcndpc2UgaWYgYW4gYXNzZXJ0aW9uIGZhaWxzIGl0IGNhbm5vdCBwcmludCB0aGUgbWVzc2FnZVxyXG5cclxuXHJcbi8vIGVuZCBpbmNsdWRlOiBzaGVsbC5qc1xyXG4vLyBpbmNsdWRlOiBwcmVhbWJsZS5qc1xyXG4vLyA9PT0gUHJlYW1ibGUgbGlicmFyeSBzdHVmZiA9PT1cclxuXHJcbi8vIERvY3VtZW50YXRpb24gZm9yIHRoZSBwdWJsaWMgQVBJcyBkZWZpbmVkIGluIHRoaXMgZmlsZSBtdXN0IGJlIHVwZGF0ZWQgaW46XHJcbi8vICAgIHNpdGUvc291cmNlL2RvY3MvYXBpX3JlZmVyZW5jZS9wcmVhbWJsZS5qcy5yc3RcclxuLy8gQSBwcmVidWlsdCBsb2NhbCB2ZXJzaW9uIG9mIHRoZSBkb2N1bWVudGF0aW9uIGlzIGF2YWlsYWJsZSBhdDpcclxuLy8gICAgc2l0ZS9idWlsZC90ZXh0L2RvY3MvYXBpX3JlZmVyZW5jZS9wcmVhbWJsZS5qcy50eHRcclxuLy8gWW91IGNhbiBhbHNvIGJ1aWxkIGRvY3MgbG9jYWxseSBhcyBIVE1MIG9yIG90aGVyIGZvcm1hdHMgaW4gc2l0ZS9cclxuLy8gQW4gb25saW5lIEhUTUwgdmVyc2lvbiAod2hpY2ggbWF5IGJlIG9mIGEgZGlmZmVyZW50IHZlcnNpb24gb2YgRW1zY3JpcHRlbilcclxuLy8gICAgaXMgdXAgYXQgaHR0cDovL2tyaXBrZW4uZ2l0aHViLmlvL2Vtc2NyaXB0ZW4tc2l0ZS9kb2NzL2FwaV9yZWZlcmVuY2UvcHJlYW1ibGUuanMuaHRtbFxyXG5cclxudmFyIHdhc21CaW5hcnk7XHJcbmlmIChNb2R1bGVbJ3dhc21CaW5hcnknXSkgd2FzbUJpbmFyeSA9IE1vZHVsZVsnd2FzbUJpbmFyeSddO1xyXG52YXIgbm9FeGl0UnVudGltZSA9IE1vZHVsZVsnbm9FeGl0UnVudGltZSddIHx8IHRydWU7XHJcblxyXG5pZiAodHlwZW9mIFdlYkFzc2VtYmx5ICE9ICdvYmplY3QnKSB7XHJcbiAgYWJvcnQoJ25vIG5hdGl2ZSB3YXNtIHN1cHBvcnQgZGV0ZWN0ZWQnKTtcclxufVxyXG5cclxuLy8gV2FzbSBnbG9iYWxzXHJcblxyXG52YXIgd2FzbU1lbW9yeTtcclxuXHJcbi8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxyXG4vLyBSdW50aW1lIGVzc2VudGlhbHNcclxuLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XHJcblxyXG4vLyB3aGV0aGVyIHdlIGFyZSBxdWl0dGluZyB0aGUgYXBwbGljYXRpb24uIG5vIGNvZGUgc2hvdWxkIHJ1biBhZnRlciB0aGlzLlxyXG4vLyBzZXQgaW4gZXhpdCgpIGFuZCBhYm9ydCgpXHJcbnZhciBBQk9SVCA9IGZhbHNlO1xyXG5cclxuLy8gc2V0IGJ5IGV4aXQoKSBhbmQgYWJvcnQoKS4gIFBhc3NlZCB0byAnb25FeGl0JyBoYW5kbGVyLlxyXG4vLyBOT1RFOiBUaGlzIGlzIGFsc28gdXNlZCBhcyB0aGUgcHJvY2VzcyByZXR1cm4gY29kZSBjb2RlIGluIHNoZWxsIGVudmlyb25tZW50c1xyXG4vLyBidXQgb25seSB3aGVuIG5vRXhpdFJ1bnRpbWUgaXMgZmFsc2UuXHJcbnZhciBFWElUU1RBVFVTO1xyXG5cclxuLyoqIEB0eXBlIHtmdW5jdGlvbigqLCBzdHJpbmc9KX0gKi9cclxuZnVuY3Rpb24gYXNzZXJ0KGNvbmRpdGlvbiwgdGV4dCkge1xyXG4gIGlmICghY29uZGl0aW9uKSB7XHJcbiAgICAvLyBUaGlzIGJ1aWxkIHdhcyBjcmVhdGVkIHdpdGhvdXQgQVNTRVJUSU9OUyBkZWZpbmVkLiAgYGFzc2VydCgpYCBzaG91bGQgbm90XHJcbiAgICAvLyBldmVyIGJlIGNhbGxlZCBpbiB0aGlzIGNvbmZpZ3VyYXRpb24gYnV0IGluIGNhc2UgdGhlcmUgYXJlIGNhbGxlcnMgaW5cclxuICAgIC8vIHRoZSB3aWxkIGxlYXZlIHRoaXMgc2ltcGxlIGFib3J0KCkgaW1wbGVtZW5hdGlvbiBoZXJlIGZvciBub3cuXHJcbiAgICBhYm9ydCh0ZXh0KTtcclxuICB9XHJcbn1cclxuXHJcbi8vIE1lbW9yeSBtYW5hZ2VtZW50XHJcblxyXG52YXIgSEVBUCxcclxuLyoqIEB0eXBlIHshSW50OEFycmF5fSAqL1xyXG4gIEhFQVA4LFxyXG4vKiogQHR5cGUgeyFVaW50OEFycmF5fSAqL1xyXG4gIEhFQVBVOCxcclxuLyoqIEB0eXBlIHshSW50MTZBcnJheX0gKi9cclxuICBIRUFQMTYsXHJcbi8qKiBAdHlwZSB7IVVpbnQxNkFycmF5fSAqL1xyXG4gIEhFQVBVMTYsXHJcbi8qKiBAdHlwZSB7IUludDMyQXJyYXl9ICovXHJcbiAgSEVBUDMyLFxyXG4vKiogQHR5cGUgeyFVaW50MzJBcnJheX0gKi9cclxuICBIRUFQVTMyLFxyXG4vKiogQHR5cGUgeyFGbG9hdDMyQXJyYXl9ICovXHJcbiAgSEVBUEYzMixcclxuLyoqIEB0eXBlIHshRmxvYXQ2NEFycmF5fSAqL1xyXG4gIEhFQVBGNjQ7XHJcblxyXG5mdW5jdGlvbiB1cGRhdGVNZW1vcnlWaWV3cygpIHtcclxuICB2YXIgYiA9IHdhc21NZW1vcnkuYnVmZmVyO1xyXG4gIE1vZHVsZVsnSEVBUDgnXSA9IEhFQVA4ID0gbmV3IEludDhBcnJheShiKTtcclxuICBNb2R1bGVbJ0hFQVAxNiddID0gSEVBUDE2ID0gbmV3IEludDE2QXJyYXkoYik7XHJcbiAgTW9kdWxlWydIRUFQMzInXSA9IEhFQVAzMiA9IG5ldyBJbnQzMkFycmF5KGIpO1xyXG4gIE1vZHVsZVsnSEVBUFU4J10gPSBIRUFQVTggPSBuZXcgVWludDhBcnJheShiKTtcclxuICBNb2R1bGVbJ0hFQVBVMTYnXSA9IEhFQVBVMTYgPSBuZXcgVWludDE2QXJyYXkoYik7XHJcbiAgTW9kdWxlWydIRUFQVTMyJ10gPSBIRUFQVTMyID0gbmV3IFVpbnQzMkFycmF5KGIpO1xyXG4gIE1vZHVsZVsnSEVBUEYzMiddID0gSEVBUEYzMiA9IG5ldyBGbG9hdDMyQXJyYXkoYik7XHJcbiAgTW9kdWxlWydIRUFQRjY0J10gPSBIRUFQRjY0ID0gbmV3IEZsb2F0NjRBcnJheShiKTtcclxufVxyXG5cclxuLy8gaW5jbHVkZTogcnVudGltZV9pbml0X3RhYmxlLmpzXHJcbi8vIEluIHJlZ3VsYXIgbm9uLVJFTE9DQVRBQkxFIG1vZGUgdGhlIHRhYmxlIGlzIGV4cG9ydGVkXHJcbi8vIGZyb20gdGhlIHdhc20gbW9kdWxlIGFuZCB0aGlzIHdpbGwgYmUgYXNzaWduZWQgb25jZVxyXG4vLyB0aGUgZXhwb3J0cyBhcmUgYXZhaWxhYmxlLlxyXG52YXIgd2FzbVRhYmxlO1xyXG5cclxuLy8gZW5kIGluY2x1ZGU6IHJ1bnRpbWVfaW5pdF90YWJsZS5qc1xyXG4vLyBpbmNsdWRlOiBydW50aW1lX3N0YWNrX2NoZWNrLmpzXHJcbi8vIGVuZCBpbmNsdWRlOiBydW50aW1lX3N0YWNrX2NoZWNrLmpzXHJcbi8vIGluY2x1ZGU6IHJ1bnRpbWVfYXNzZXJ0aW9ucy5qc1xyXG4vLyBlbmQgaW5jbHVkZTogcnVudGltZV9hc3NlcnRpb25zLmpzXHJcbnZhciBfX0FUUFJFUlVOX18gID0gW107IC8vIGZ1bmN0aW9ucyBjYWxsZWQgYmVmb3JlIHRoZSBydW50aW1lIGlzIGluaXRpYWxpemVkXHJcbnZhciBfX0FUSU5JVF9fICAgID0gW107IC8vIGZ1bmN0aW9ucyBjYWxsZWQgZHVyaW5nIHN0YXJ0dXBcclxudmFyIF9fQVRFWElUX18gICAgPSBbXTsgLy8gZnVuY3Rpb25zIGNhbGxlZCBkdXJpbmcgc2h1dGRvd25cclxudmFyIF9fQVRQT1NUUlVOX18gPSBbXTsgLy8gZnVuY3Rpb25zIGNhbGxlZCBhZnRlciB0aGUgbWFpbigpIGlzIGNhbGxlZFxyXG5cclxudmFyIHJ1bnRpbWVJbml0aWFsaXplZCA9IGZhbHNlO1xyXG5cclxudmFyIHJ1bnRpbWVLZWVwYWxpdmVDb3VudGVyID0gMDtcclxuXHJcbmZ1bmN0aW9uIGtlZXBSdW50aW1lQWxpdmUoKSB7XHJcbiAgcmV0dXJuIG5vRXhpdFJ1bnRpbWUgfHwgcnVudGltZUtlZXBhbGl2ZUNvdW50ZXIgPiAwO1xyXG59XHJcblxyXG5mdW5jdGlvbiBwcmVSdW4oKSB7XHJcbiAgaWYgKE1vZHVsZVsncHJlUnVuJ10pIHtcclxuICAgIGlmICh0eXBlb2YgTW9kdWxlWydwcmVSdW4nXSA9PSAnZnVuY3Rpb24nKSBNb2R1bGVbJ3ByZVJ1biddID0gW01vZHVsZVsncHJlUnVuJ11dO1xyXG4gICAgd2hpbGUgKE1vZHVsZVsncHJlUnVuJ10ubGVuZ3RoKSB7XHJcbiAgICAgIGFkZE9uUHJlUnVuKE1vZHVsZVsncHJlUnVuJ10uc2hpZnQoKSk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIGNhbGxSdW50aW1lQ2FsbGJhY2tzKF9fQVRQUkVSVU5fXyk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGluaXRSdW50aW1lKCkge1xyXG4gIHJ1bnRpbWVJbml0aWFsaXplZCA9IHRydWU7XHJcblxyXG4gIFxyXG4gIGNhbGxSdW50aW1lQ2FsbGJhY2tzKF9fQVRJTklUX18pO1xyXG59XHJcblxyXG5mdW5jdGlvbiBwb3N0UnVuKCkge1xyXG5cclxuICBpZiAoTW9kdWxlWydwb3N0UnVuJ10pIHtcclxuICAgIGlmICh0eXBlb2YgTW9kdWxlWydwb3N0UnVuJ10gPT0gJ2Z1bmN0aW9uJykgTW9kdWxlWydwb3N0UnVuJ10gPSBbTW9kdWxlWydwb3N0UnVuJ11dO1xyXG4gICAgd2hpbGUgKE1vZHVsZVsncG9zdFJ1biddLmxlbmd0aCkge1xyXG4gICAgICBhZGRPblBvc3RSdW4oTW9kdWxlWydwb3N0UnVuJ10uc2hpZnQoKSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjYWxsUnVudGltZUNhbGxiYWNrcyhfX0FUUE9TVFJVTl9fKTtcclxufVxyXG5cclxuZnVuY3Rpb24gYWRkT25QcmVSdW4oY2IpIHtcclxuICBfX0FUUFJFUlVOX18udW5zaGlmdChjYik7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGFkZE9uSW5pdChjYikge1xyXG4gIF9fQVRJTklUX18udW5zaGlmdChjYik7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGFkZE9uRXhpdChjYikge1xyXG59XHJcblxyXG5mdW5jdGlvbiBhZGRPblBvc3RSdW4oY2IpIHtcclxuICBfX0FUUE9TVFJVTl9fLnVuc2hpZnQoY2IpO1xyXG59XHJcblxyXG4vLyBpbmNsdWRlOiBydW50aW1lX21hdGguanNcclxuLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvTWF0aC9pbXVsXHJcblxyXG4vLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9NYXRoL2Zyb3VuZFxyXG5cclxuLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvTWF0aC9jbHozMlxyXG5cclxuLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvTWF0aC90cnVuY1xyXG5cclxuLy8gZW5kIGluY2x1ZGU6IHJ1bnRpbWVfbWF0aC5qc1xyXG4vLyBBIGNvdW50ZXIgb2YgZGVwZW5kZW5jaWVzIGZvciBjYWxsaW5nIHJ1bigpLiBJZiB3ZSBuZWVkIHRvXHJcbi8vIGRvIGFzeW5jaHJvbm91cyB3b3JrIGJlZm9yZSBydW5uaW5nLCBpbmNyZW1lbnQgdGhpcyBhbmRcclxuLy8gZGVjcmVtZW50IGl0LiBJbmNyZW1lbnRpbmcgbXVzdCBoYXBwZW4gaW4gYSBwbGFjZSBsaWtlXHJcbi8vIE1vZHVsZS5wcmVSdW4gKHVzZWQgYnkgZW1jYyB0byBhZGQgZmlsZSBwcmVsb2FkaW5nKS5cclxuLy8gTm90ZSB0aGF0IHlvdSBjYW4gYWRkIGRlcGVuZGVuY2llcyBpbiBwcmVSdW4sIGV2ZW4gdGhvdWdoXHJcbi8vIGl0IGhhcHBlbnMgcmlnaHQgYmVmb3JlIHJ1biAtIHJ1biB3aWxsIGJlIHBvc3Rwb25lZCB1bnRpbFxyXG4vLyB0aGUgZGVwZW5kZW5jaWVzIGFyZSBtZXQuXHJcbnZhciBydW5EZXBlbmRlbmNpZXMgPSAwO1xyXG52YXIgcnVuRGVwZW5kZW5jeVdhdGNoZXIgPSBudWxsO1xyXG52YXIgZGVwZW5kZW5jaWVzRnVsZmlsbGVkID0gbnVsbDsgLy8gb3ZlcnJpZGRlbiB0byB0YWtlIGRpZmZlcmVudCBhY3Rpb25zIHdoZW4gYWxsIHJ1biBkZXBlbmRlbmNpZXMgYXJlIGZ1bGZpbGxlZFxyXG5cclxuZnVuY3Rpb24gZ2V0VW5pcXVlUnVuRGVwZW5kZW5jeShpZCkge1xyXG4gIHJldHVybiBpZDtcclxufVxyXG5cclxuZnVuY3Rpb24gYWRkUnVuRGVwZW5kZW5jeShpZCkge1xyXG4gIHJ1bkRlcGVuZGVuY2llcysrO1xyXG5cclxuICBpZiAoTW9kdWxlWydtb25pdG9yUnVuRGVwZW5kZW5jaWVzJ10pIHtcclxuICAgIE1vZHVsZVsnbW9uaXRvclJ1bkRlcGVuZGVuY2llcyddKHJ1bkRlcGVuZGVuY2llcyk7XHJcbiAgfVxyXG5cclxufVxyXG5cclxuZnVuY3Rpb24gcmVtb3ZlUnVuRGVwZW5kZW5jeShpZCkge1xyXG4gIHJ1bkRlcGVuZGVuY2llcy0tO1xyXG5cclxuICBpZiAoTW9kdWxlWydtb25pdG9yUnVuRGVwZW5kZW5jaWVzJ10pIHtcclxuICAgIE1vZHVsZVsnbW9uaXRvclJ1bkRlcGVuZGVuY2llcyddKHJ1bkRlcGVuZGVuY2llcyk7XHJcbiAgfVxyXG5cclxuICBpZiAocnVuRGVwZW5kZW5jaWVzID09IDApIHtcclxuICAgIGlmIChydW5EZXBlbmRlbmN5V2F0Y2hlciAhPT0gbnVsbCkge1xyXG4gICAgICBjbGVhckludGVydmFsKHJ1bkRlcGVuZGVuY3lXYXRjaGVyKTtcclxuICAgICAgcnVuRGVwZW5kZW5jeVdhdGNoZXIgPSBudWxsO1xyXG4gICAgfVxyXG4gICAgaWYgKGRlcGVuZGVuY2llc0Z1bGZpbGxlZCkge1xyXG4gICAgICB2YXIgY2FsbGJhY2sgPSBkZXBlbmRlbmNpZXNGdWxmaWxsZWQ7XHJcbiAgICAgIGRlcGVuZGVuY2llc0Z1bGZpbGxlZCA9IG51bGw7XHJcbiAgICAgIGNhbGxiYWNrKCk7IC8vIGNhbiBhZGQgYW5vdGhlciBkZXBlbmRlbmNpZXNGdWxmaWxsZWRcclxuICAgIH1cclxuICB9XHJcbn1cclxuXHJcbi8qKiBAcGFyYW0ge3N0cmluZ3xudW1iZXI9fSB3aGF0ICovXHJcbmZ1bmN0aW9uIGFib3J0KHdoYXQpIHtcclxuICBpZiAoTW9kdWxlWydvbkFib3J0J10pIHtcclxuICAgIE1vZHVsZVsnb25BYm9ydCddKHdoYXQpO1xyXG4gIH1cclxuXHJcbiAgd2hhdCA9ICdBYm9ydGVkKCcgKyB3aGF0ICsgJyknO1xyXG4gIC8vIFRPRE8oc2JjKTogU2hvdWxkIHdlIHJlbW92ZSBwcmludGluZyBhbmQgbGVhdmUgaXQgdXAgdG8gd2hvZXZlclxyXG4gIC8vIGNhdGNoZXMgdGhlIGV4Y2VwdGlvbj9cclxuICBlcnIod2hhdCk7XHJcblxyXG4gIEFCT1JUID0gdHJ1ZTtcclxuICBFWElUU1RBVFVTID0gMTtcclxuXHJcbiAgd2hhdCArPSAnLiBCdWlsZCB3aXRoIC1zQVNTRVJUSU9OUyBmb3IgbW9yZSBpbmZvLic7XHJcblxyXG4gIC8vIFVzZSBhIHdhc20gcnVudGltZSBlcnJvciwgYmVjYXVzZSBhIEpTIGVycm9yIG1pZ2h0IGJlIHNlZW4gYXMgYSBmb3JlaWduXHJcbiAgLy8gZXhjZXB0aW9uLCB3aGljaCBtZWFucyB3ZSdkIHJ1biBkZXN0cnVjdG9ycyBvbiBpdC4gV2UgbmVlZCB0aGUgZXJyb3IgdG9cclxuICAvLyBzaW1wbHkgbWFrZSB0aGUgcHJvZ3JhbSBzdG9wLlxyXG4gIC8vIEZJWE1FIFRoaXMgYXBwcm9hY2ggZG9lcyBub3Qgd29yayBpbiBXYXNtIEVIIGJlY2F1c2UgaXQgY3VycmVudGx5IGRvZXMgbm90IGFzc3VtZVxyXG4gIC8vIGFsbCBSdW50aW1lRXJyb3JzIGFyZSBmcm9tIHRyYXBzOyBpdCBkZWNpZGVzIHdoZXRoZXIgYSBSdW50aW1lRXJyb3IgaXMgZnJvbVxyXG4gIC8vIGEgdHJhcCBvciBub3QgYmFzZWQgb24gYSBoaWRkZW4gZmllbGQgd2l0aGluIHRoZSBvYmplY3QuIFNvIGF0IHRoZSBtb21lbnRcclxuICAvLyB3ZSBkb24ndCBoYXZlIGEgd2F5IG9mIHRocm93aW5nIGEgd2FzbSB0cmFwIGZyb20gSlMuIFRPRE8gTWFrZSBhIEpTIEFQSSB0aGF0XHJcbiAgLy8gYWxsb3dzIHRoaXMgaW4gdGhlIHdhc20gc3BlYy5cclxuXHJcbiAgLy8gU3VwcHJlc3MgY2xvc3VyZSBjb21waWxlciB3YXJuaW5nIGhlcmUuIENsb3N1cmUgY29tcGlsZXIncyBidWlsdGluIGV4dGVyblxyXG4gIC8vIGRlZmludGlvbiBmb3IgV2ViQXNzZW1ibHkuUnVudGltZUVycm9yIGNsYWltcyBpdCB0YWtlcyBubyBhcmd1bWVudHMgZXZlblxyXG4gIC8vIHRob3VnaCBpdCBjYW4uXHJcbiAgLy8gVE9ETyhodHRwczovL2dpdGh1Yi5jb20vZ29vZ2xlL2Nsb3N1cmUtY29tcGlsZXIvcHVsbC8zOTEzKTogUmVtb3ZlIGlmL3doZW4gdXBzdHJlYW0gY2xvc3VyZSBnZXRzIGZpeGVkLlxyXG4gIC8qKiBAc3VwcHJlc3Mge2NoZWNrVHlwZXN9ICovXHJcbiAgdmFyIGUgPSBuZXcgV2ViQXNzZW1ibHkuUnVudGltZUVycm9yKHdoYXQpO1xyXG5cclxuICByZWFkeVByb21pc2VSZWplY3QoZSk7XHJcbiAgLy8gVGhyb3cgdGhlIGVycm9yIHdoZXRoZXIgb3Igbm90IE1PRFVMQVJJWkUgaXMgc2V0IGJlY2F1c2UgYWJvcnQgaXMgdXNlZFxyXG4gIC8vIGluIGNvZGUgcGF0aHMgYXBhcnQgZnJvbSBpbnN0YW50aWF0aW9uIHdoZXJlIGFuIGV4Y2VwdGlvbiBpcyBleHBlY3RlZFxyXG4gIC8vIHRvIGJlIHRocm93biB3aGVuIGFib3J0IGlzIGNhbGxlZC5cclxuICB0aHJvdyBlO1xyXG59XHJcblxyXG4vLyBpbmNsdWRlOiBtZW1vcnlwcm9maWxlci5qc1xyXG4vLyBlbmQgaW5jbHVkZTogbWVtb3J5cHJvZmlsZXIuanNcclxuLy8gaW5jbHVkZTogVVJJVXRpbHMuanNcclxuLy8gUHJlZml4IG9mIGRhdGEgVVJJcyBlbWl0dGVkIGJ5IFNJTkdMRV9GSUxFIGFuZCByZWxhdGVkIG9wdGlvbnMuXHJcbnZhciBkYXRhVVJJUHJlZml4ID0gJ2RhdGE6YXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtO2Jhc2U2NCwnO1xyXG5cclxuLy8gSW5kaWNhdGVzIHdoZXRoZXIgZmlsZW5hbWUgaXMgYSBiYXNlNjQgZGF0YSBVUkkuXHJcbmZ1bmN0aW9uIGlzRGF0YVVSSShmaWxlbmFtZSkge1xyXG4gIC8vIFByZWZpeCBvZiBkYXRhIFVSSXMgZW1pdHRlZCBieSBTSU5HTEVfRklMRSBhbmQgcmVsYXRlZCBvcHRpb25zLlxyXG4gIHJldHVybiBmaWxlbmFtZS5zdGFydHNXaXRoKGRhdGFVUklQcmVmaXgpO1xyXG59XHJcblxyXG4vLyBJbmRpY2F0ZXMgd2hldGhlciBmaWxlbmFtZSBpcyBkZWxpdmVyZWQgdmlhIGZpbGUgcHJvdG9jb2wgKGFzIG9wcG9zZWQgdG8gaHR0cC9odHRwcylcclxuZnVuY3Rpb24gaXNGaWxlVVJJKGZpbGVuYW1lKSB7XHJcbiAgcmV0dXJuIGZpbGVuYW1lLnN0YXJ0c1dpdGgoJ2ZpbGU6Ly8nKTtcclxufVxyXG5cclxuLy8gZW5kIGluY2x1ZGU6IFVSSVV0aWxzLmpzXHJcbi8vIGluY2x1ZGU6IHJ1bnRpbWVfZXhjZXB0aW9ucy5qc1xyXG4vLyBlbmQgaW5jbHVkZTogcnVudGltZV9leGNlcHRpb25zLmpzXHJcbnZhciB3YXNtQmluYXJ5RmlsZTtcclxuICB3YXNtQmluYXJ5RmlsZSA9ICd3YXNtRGJzY2FuLndhc20nO1xyXG4gIGlmICghaXNEYXRhVVJJKHdhc21CaW5hcnlGaWxlKSkge1xyXG4gICAgd2FzbUJpbmFyeUZpbGUgPSBsb2NhdGVGaWxlKHdhc21CaW5hcnlGaWxlKTtcclxuICB9XHJcblxyXG5mdW5jdGlvbiBnZXRCaW5hcnkoZmlsZSkge1xyXG4gIHRyeSB7XHJcbiAgICBpZiAoZmlsZSA9PSB3YXNtQmluYXJ5RmlsZSAmJiB3YXNtQmluYXJ5KSB7XHJcbiAgICAgIHJldHVybiBuZXcgVWludDhBcnJheSh3YXNtQmluYXJ5KTtcclxuICAgIH1cclxuICAgIGlmIChyZWFkQmluYXJ5KSB7XHJcbiAgICAgIHJldHVybiByZWFkQmluYXJ5KGZpbGUpO1xyXG4gICAgfVxyXG4gICAgdGhyb3cgXCJib3RoIGFzeW5jIGFuZCBzeW5jIGZldGNoaW5nIG9mIHRoZSB3YXNtIGZhaWxlZFwiO1xyXG4gIH1cclxuICBjYXRjaCAoZXJyKSB7XHJcbiAgICBhYm9ydChlcnIpO1xyXG4gIH1cclxufVxyXG5cclxuZnVuY3Rpb24gZ2V0QmluYXJ5UHJvbWlzZShiaW5hcnlGaWxlKSB7XHJcbiAgLy8gSWYgd2UgZG9uJ3QgaGF2ZSB0aGUgYmluYXJ5IHlldCwgdHJ5IHRvIGxvYWQgaXQgYXN5bmNocm9ub3VzbHkuXHJcbiAgLy8gRmV0Y2ggaGFzIHNvbWUgYWRkaXRpb25hbCByZXN0cmljdGlvbnMgb3ZlciBYSFIsIGxpa2UgaXQgY2FuJ3QgYmUgdXNlZCBvbiBhIGZpbGU6Ly8gdXJsLlxyXG4gIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vZ2l0aHViL2ZldGNoL3B1bGwvOTIjaXNzdWVjb21tZW50LTE0MDY2NTkzMlxyXG4gIC8vIENvcmRvdmEgb3IgRWxlY3Ryb24gYXBwcyBhcmUgdHlwaWNhbGx5IGxvYWRlZCBmcm9tIGEgZmlsZTovLyB1cmwuXHJcbiAgLy8gU28gdXNlIGZldGNoIGlmIGl0IGlzIGF2YWlsYWJsZSBhbmQgdGhlIHVybCBpcyBub3QgYSBmaWxlLCBvdGhlcndpc2UgZmFsbCBiYWNrIHRvIFhIUi5cclxuICBpZiAoIXdhc21CaW5hcnkgJiYgKEVOVklST05NRU5UX0lTX1dFQiB8fCBFTlZJUk9OTUVOVF9JU19XT1JLRVIpKSB7XHJcbiAgICBpZiAodHlwZW9mIGZldGNoID09ICdmdW5jdGlvbidcclxuICAgICkge1xyXG4gICAgICByZXR1cm4gZmV0Y2goYmluYXJ5RmlsZSwgeyBjcmVkZW50aWFsczogJ3NhbWUtb3JpZ2luJyB9KS50aGVuKGZ1bmN0aW9uKHJlc3BvbnNlKSB7XHJcbiAgICAgICAgaWYgKCFyZXNwb25zZVsnb2snXSkge1xyXG4gICAgICAgICAgdGhyb3cgXCJmYWlsZWQgdG8gbG9hZCB3YXNtIGJpbmFyeSBmaWxlIGF0ICdcIiArIGJpbmFyeUZpbGUgKyBcIidcIjtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlWydhcnJheUJ1ZmZlciddKCk7XHJcbiAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgIHJldHVybiBnZXRCaW5hcnkoYmluYXJ5RmlsZSk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gT3RoZXJ3aXNlLCBnZXRCaW5hcnkgc2hvdWxkIGJlIGFibGUgdG8gZ2V0IGl0IHN5bmNocm9ub3VzbHlcclxuICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCkudGhlbihmdW5jdGlvbigpIHsgcmV0dXJuIGdldEJpbmFyeShiaW5hcnlGaWxlKTsgfSk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGluc3RhbnRpYXRlQXJyYXlCdWZmZXIoYmluYXJ5RmlsZSwgaW1wb3J0cywgcmVjZWl2ZXIpIHtcclxuICByZXR1cm4gZ2V0QmluYXJ5UHJvbWlzZShiaW5hcnlGaWxlKS50aGVuKGZ1bmN0aW9uKGJpbmFyeSkge1xyXG4gICAgcmV0dXJuIFdlYkFzc2VtYmx5Lmluc3RhbnRpYXRlKGJpbmFyeSwgaW1wb3J0cyk7XHJcbiAgfSkudGhlbihmdW5jdGlvbiAoaW5zdGFuY2UpIHtcclxuICAgIHJldHVybiBpbnN0YW5jZTtcclxuICB9KS50aGVuKHJlY2VpdmVyLCBmdW5jdGlvbihyZWFzb24pIHtcclxuICAgIGVycignZmFpbGVkIHRvIGFzeW5jaHJvbm91c2x5IHByZXBhcmUgd2FzbTogJyArIHJlYXNvbik7XHJcblxyXG4gICAgYWJvcnQocmVhc29uKTtcclxuICB9KTtcclxufVxyXG5cclxuZnVuY3Rpb24gaW5zdGFudGlhdGVBc3luYyhiaW5hcnksIGJpbmFyeUZpbGUsIGltcG9ydHMsIGNhbGxiYWNrKSB7XHJcbiAgaWYgKCFiaW5hcnkgJiZcclxuICAgICAgdHlwZW9mIFdlYkFzc2VtYmx5Lmluc3RhbnRpYXRlU3RyZWFtaW5nID09ICdmdW5jdGlvbicgJiZcclxuICAgICAgIWlzRGF0YVVSSShiaW5hcnlGaWxlKSAmJlxyXG4gICAgICB0eXBlb2YgZmV0Y2ggPT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgcmV0dXJuIGZldGNoKGJpbmFyeUZpbGUsIHsgY3JlZGVudGlhbHM6ICdzYW1lLW9yaWdpbicgfSkudGhlbihmdW5jdGlvbihyZXNwb25zZSkge1xyXG4gICAgICAvLyBTdXBwcmVzcyBjbG9zdXJlIHdhcm5pbmcgaGVyZSBzaW5jZSB0aGUgdXBzdHJlYW0gZGVmaW5pdGlvbiBmb3JcclxuICAgICAgLy8gaW5zdGFudGlhdGVTdHJlYW1pbmcgb25seSBhbGxvd3MgUHJvbWlzZTxSZXBzcG9uc2U+IHJhdGhlciB0aGFuXHJcbiAgICAgIC8vIGFuIGFjdHVhbCBSZXNwb25zZS5cclxuICAgICAgLy8gVE9ETyhodHRwczovL2dpdGh1Yi5jb20vZ29vZ2xlL2Nsb3N1cmUtY29tcGlsZXIvcHVsbC8zOTEzKTogUmVtb3ZlIGlmL3doZW4gdXBzdHJlYW0gY2xvc3VyZSBpcyBmaXhlZC5cclxuICAgICAgLyoqIEBzdXBwcmVzcyB7Y2hlY2tUeXBlc30gKi9cclxuICAgICAgdmFyIHJlc3VsdCA9IFdlYkFzc2VtYmx5Lmluc3RhbnRpYXRlU3RyZWFtaW5nKHJlc3BvbnNlLCBpbXBvcnRzKTtcclxuXHJcbiAgICAgIHJldHVybiByZXN1bHQudGhlbihcclxuICAgICAgICBjYWxsYmFjayxcclxuICAgICAgICBmdW5jdGlvbihyZWFzb24pIHtcclxuICAgICAgICAgIC8vIFdlIGV4cGVjdCB0aGUgbW9zdCBjb21tb24gZmFpbHVyZSBjYXVzZSB0byBiZSBhIGJhZCBNSU1FIHR5cGUgZm9yIHRoZSBiaW5hcnksXHJcbiAgICAgICAgICAvLyBpbiB3aGljaCBjYXNlIGZhbGxpbmcgYmFjayB0byBBcnJheUJ1ZmZlciBpbnN0YW50aWF0aW9uIHNob3VsZCB3b3JrLlxyXG4gICAgICAgICAgZXJyKCd3YXNtIHN0cmVhbWluZyBjb21waWxlIGZhaWxlZDogJyArIHJlYXNvbik7XHJcbiAgICAgICAgICBlcnIoJ2ZhbGxpbmcgYmFjayB0byBBcnJheUJ1ZmZlciBpbnN0YW50aWF0aW9uJyk7XHJcbiAgICAgICAgICByZXR1cm4gaW5zdGFudGlhdGVBcnJheUJ1ZmZlcihiaW5hcnlGaWxlLCBpbXBvcnRzLCBjYWxsYmFjayk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9KTtcclxuICB9IGVsc2Uge1xyXG4gICAgcmV0dXJuIGluc3RhbnRpYXRlQXJyYXlCdWZmZXIoYmluYXJ5RmlsZSwgaW1wb3J0cywgY2FsbGJhY2spO1xyXG4gIH1cclxufVxyXG5cclxuLy8gQ3JlYXRlIHRoZSB3YXNtIGluc3RhbmNlLlxyXG4vLyBSZWNlaXZlcyB0aGUgd2FzbSBpbXBvcnRzLCByZXR1cm5zIHRoZSBleHBvcnRzLlxyXG5mdW5jdGlvbiBjcmVhdGVXYXNtKCkge1xyXG4gIC8vIHByZXBhcmUgaW1wb3J0c1xyXG4gIHZhciBpbmZvID0ge1xyXG4gICAgJ2Vudic6IHdhc21JbXBvcnRzLFxyXG4gICAgJ3dhc2lfc25hcHNob3RfcHJldmlldzEnOiB3YXNtSW1wb3J0cyxcclxuICB9O1xyXG4gIC8vIExvYWQgdGhlIHdhc20gbW9kdWxlIGFuZCBjcmVhdGUgYW4gaW5zdGFuY2Ugb2YgdXNpbmcgbmF0aXZlIHN1cHBvcnQgaW4gdGhlIEpTIGVuZ2luZS5cclxuICAvLyBoYW5kbGUgYSBnZW5lcmF0ZWQgd2FzbSBpbnN0YW5jZSwgcmVjZWl2aW5nIGl0cyBleHBvcnRzIGFuZFxyXG4gIC8vIHBlcmZvcm1pbmcgb3RoZXIgbmVjZXNzYXJ5IHNldHVwXHJcbiAgLyoqIEBwYXJhbSB7V2ViQXNzZW1ibHkuTW9kdWxlPX0gbW9kdWxlKi9cclxuICBmdW5jdGlvbiByZWNlaXZlSW5zdGFuY2UoaW5zdGFuY2UsIG1vZHVsZSkge1xyXG4gICAgdmFyIGV4cG9ydHMgPSBpbnN0YW5jZS5leHBvcnRzO1xyXG5cclxuICAgIE1vZHVsZVsnYXNtJ10gPSBleHBvcnRzO1xyXG5cclxuICAgIHdhc21NZW1vcnkgPSBNb2R1bGVbJ2FzbSddWydtZW1vcnknXTtcclxuICAgIHVwZGF0ZU1lbW9yeVZpZXdzKCk7XHJcblxyXG4gICAgd2FzbVRhYmxlID0gTW9kdWxlWydhc20nXVsnX19pbmRpcmVjdF9mdW5jdGlvbl90YWJsZSddO1xyXG5cclxuICAgIGFkZE9uSW5pdChNb2R1bGVbJ2FzbSddWydfX3dhc21fY2FsbF9jdG9ycyddKTtcclxuXHJcbiAgICByZW1vdmVSdW5EZXBlbmRlbmN5KCd3YXNtLWluc3RhbnRpYXRlJyk7XHJcblxyXG4gICAgcmV0dXJuIGV4cG9ydHM7XHJcbiAgfVxyXG4gIC8vIHdhaXQgZm9yIHRoZSBwdGhyZWFkIHBvb2wgKGlmIGFueSlcclxuICBhZGRSdW5EZXBlbmRlbmN5KCd3YXNtLWluc3RhbnRpYXRlJyk7XHJcblxyXG4gIC8vIFByZWZlciBzdHJlYW1pbmcgaW5zdGFudGlhdGlvbiBpZiBhdmFpbGFibGUuXHJcbiAgZnVuY3Rpb24gcmVjZWl2ZUluc3RhbnRpYXRpb25SZXN1bHQocmVzdWx0KSB7XHJcbiAgICAvLyAncmVzdWx0JyBpcyBhIFJlc3VsdE9iamVjdCBvYmplY3Qgd2hpY2ggaGFzIGJvdGggdGhlIG1vZHVsZSBhbmQgaW5zdGFuY2UuXHJcbiAgICAvLyByZWNlaXZlSW5zdGFuY2UoKSB3aWxsIHN3YXAgaW4gdGhlIGV4cG9ydHMgKHRvIE1vZHVsZS5hc20pIHNvIHRoZXkgY2FuIGJlIGNhbGxlZFxyXG4gICAgLy8gVE9ETzogRHVlIHRvIENsb3N1cmUgcmVncmVzc2lvbiBodHRwczovL2dpdGh1Yi5jb20vZ29vZ2xlL2Nsb3N1cmUtY29tcGlsZXIvaXNzdWVzLzMxOTMsIHRoZSBhYm92ZSBsaW5lIG5vIGxvbmdlciBvcHRpbWl6ZXMgb3V0IGRvd24gdG8gdGhlIGZvbGxvd2luZyBsaW5lLlxyXG4gICAgLy8gV2hlbiB0aGUgcmVncmVzc2lvbiBpcyBmaXhlZCwgY2FuIHJlc3RvcmUgdGhlIGFib3ZlIFBUSFJFQURTLWVuYWJsZWQgcGF0aC5cclxuICAgIHJlY2VpdmVJbnN0YW5jZShyZXN1bHRbJ2luc3RhbmNlJ10pO1xyXG4gIH1cclxuXHJcbiAgLy8gVXNlciBzaGVsbCBwYWdlcyBjYW4gd3JpdGUgdGhlaXIgb3duIE1vZHVsZS5pbnN0YW50aWF0ZVdhc20gPSBmdW5jdGlvbihpbXBvcnRzLCBzdWNjZXNzQ2FsbGJhY2spIGNhbGxiYWNrXHJcbiAgLy8gdG8gbWFudWFsbHkgaW5zdGFudGlhdGUgdGhlIFdhc20gbW9kdWxlIHRoZW1zZWx2ZXMuIFRoaXMgYWxsb3dzIHBhZ2VzIHRvXHJcbiAgLy8gcnVuIHRoZSBpbnN0YW50aWF0aW9uIHBhcmFsbGVsIHRvIGFueSBvdGhlciBhc3luYyBzdGFydHVwIGFjdGlvbnMgdGhleSBhcmVcclxuICAvLyBwZXJmb3JtaW5nLlxyXG4gIC8vIEFsc28gcHRocmVhZHMgYW5kIHdhc20gd29ya2VycyBpbml0aWFsaXplIHRoZSB3YXNtIGluc3RhbmNlIHRocm91Z2ggdGhpc1xyXG4gIC8vIHBhdGguXHJcbiAgaWYgKE1vZHVsZVsnaW5zdGFudGlhdGVXYXNtJ10pIHtcclxuXHJcbiAgICB0cnkge1xyXG4gICAgICByZXR1cm4gTW9kdWxlWydpbnN0YW50aWF0ZVdhc20nXShpbmZvLCByZWNlaXZlSW5zdGFuY2UpO1xyXG4gICAgfSBjYXRjaChlKSB7XHJcbiAgICAgIGVycignTW9kdWxlLmluc3RhbnRpYXRlV2FzbSBjYWxsYmFjayBmYWlsZWQgd2l0aCBlcnJvcjogJyArIGUpO1xyXG4gICAgICAgIC8vIElmIGluc3RhbnRpYXRpb24gZmFpbHMsIHJlamVjdCB0aGUgbW9kdWxlIHJlYWR5IHByb21pc2UuXHJcbiAgICAgICAgcmVhZHlQcm9taXNlUmVqZWN0KGUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gSWYgaW5zdGFudGlhdGlvbiBmYWlscywgcmVqZWN0IHRoZSBtb2R1bGUgcmVhZHkgcHJvbWlzZS5cclxuICBpbnN0YW50aWF0ZUFzeW5jKHdhc21CaW5hcnksIHdhc21CaW5hcnlGaWxlLCBpbmZvLCByZWNlaXZlSW5zdGFudGlhdGlvblJlc3VsdCkuY2F0Y2gocmVhZHlQcm9taXNlUmVqZWN0KTtcclxuICByZXR1cm4ge307IC8vIG5vIGV4cG9ydHMgeWV0OyB3ZSdsbCBmaWxsIHRoZW0gaW4gbGF0ZXJcclxufVxyXG5cclxuLy8gR2xvYmFscyB1c2VkIGJ5IEpTIGk2NCBjb252ZXJzaW9ucyAoc2VlIG1ha2VTZXRWYWx1ZSlcclxudmFyIHRlbXBEb3VibGU7XHJcbnZhciB0ZW1wSTY0O1xyXG5cclxuLy8gaW5jbHVkZTogcnVudGltZV9kZWJ1Zy5qc1xyXG4vLyBlbmQgaW5jbHVkZTogcnVudGltZV9kZWJ1Zy5qc1xyXG4vLyA9PT0gQm9keSA9PT1cclxuXHJcblxyXG4vLyBlbmQgaW5jbHVkZTogcHJlYW1ibGUuanNcclxuXHJcbiAgLyoqIEBjb25zdHJ1Y3RvciAqL1xyXG4gIGZ1bmN0aW9uIEV4aXRTdGF0dXMoc3RhdHVzKSB7XHJcbiAgICAgIHRoaXMubmFtZSA9ICdFeGl0U3RhdHVzJztcclxuICAgICAgdGhpcy5tZXNzYWdlID0gJ1Byb2dyYW0gdGVybWluYXRlZCB3aXRoIGV4aXQoJyArIHN0YXR1cyArICcpJztcclxuICAgICAgdGhpcy5zdGF0dXMgPSBzdGF0dXM7XHJcbiAgICB9XHJcblxyXG4gIGZ1bmN0aW9uIGNhbGxSdW50aW1lQ2FsbGJhY2tzKGNhbGxiYWNrcykge1xyXG4gICAgICB3aGlsZSAoY2FsbGJhY2tzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAvLyBQYXNzIHRoZSBtb2R1bGUgYXMgdGhlIGZpcnN0IGFyZ3VtZW50LlxyXG4gICAgICAgIGNhbGxiYWNrcy5zaGlmdCgpKE1vZHVsZSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgXHJcbiAgICAvKipcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBwdHJcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlXHJcbiAgICAgKi9cclxuICBmdW5jdGlvbiBnZXRWYWx1ZShwdHIsIHR5cGUgPSAnaTgnKSB7XHJcbiAgICBpZiAodHlwZS5lbmRzV2l0aCgnKicpKSB0eXBlID0gJyonO1xyXG4gICAgc3dpdGNoICh0eXBlKSB7XHJcbiAgICAgIGNhc2UgJ2kxJzogcmV0dXJuIEhFQVA4WygocHRyKT4+MCldO1xyXG4gICAgICBjYXNlICdpOCc6IHJldHVybiBIRUFQOFsoKHB0cik+PjApXTtcclxuICAgICAgY2FzZSAnaTE2JzogcmV0dXJuIEhFQVAxNlsoKHB0cik+PjEpXTtcclxuICAgICAgY2FzZSAnaTMyJzogcmV0dXJuIEhFQVAzMlsoKHB0cik+PjIpXTtcclxuICAgICAgY2FzZSAnaTY0JzogcmV0dXJuIEhFQVAzMlsoKHB0cik+PjIpXTtcclxuICAgICAgY2FzZSAnZmxvYXQnOiByZXR1cm4gSEVBUEYzMlsoKHB0cik+PjIpXTtcclxuICAgICAgY2FzZSAnZG91YmxlJzogcmV0dXJuIEhFQVBGNjRbKChwdHIpPj4zKV07XHJcbiAgICAgIGNhc2UgJyonOiByZXR1cm4gSEVBUFUzMlsoKHB0cik+PjIpXTtcclxuICAgICAgZGVmYXVsdDogYWJvcnQoJ2ludmFsaWQgdHlwZSBmb3IgZ2V0VmFsdWU6ICcgKyB0eXBlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIFxyXG4gICAgLyoqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gcHRyXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gdmFsdWVcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlXHJcbiAgICAgKi9cclxuICBmdW5jdGlvbiBzZXRWYWx1ZShwdHIsIHZhbHVlLCB0eXBlID0gJ2k4Jykge1xyXG4gICAgaWYgKHR5cGUuZW5kc1dpdGgoJyonKSkgdHlwZSA9ICcqJztcclxuICAgIHN3aXRjaCAodHlwZSkge1xyXG4gICAgICBjYXNlICdpMSc6IEhFQVA4WygocHRyKT4+MCldID0gdmFsdWU7IGJyZWFrO1xyXG4gICAgICBjYXNlICdpOCc6IEhFQVA4WygocHRyKT4+MCldID0gdmFsdWU7IGJyZWFrO1xyXG4gICAgICBjYXNlICdpMTYnOiBIRUFQMTZbKChwdHIpPj4xKV0gPSB2YWx1ZTsgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ2kzMic6IEhFQVAzMlsoKHB0cik+PjIpXSA9IHZhbHVlOyBicmVhaztcclxuICAgICAgY2FzZSAnaTY0JzogKHRlbXBJNjQgPSBbdmFsdWU+Pj4wLCh0ZW1wRG91YmxlPXZhbHVlLCgrKE1hdGguYWJzKHRlbXBEb3VibGUpKSkgPj0gMS4wID8gKHRlbXBEb3VibGUgPiAwLjAgPyAoKE1hdGgubWluKCgrKE1hdGguZmxvb3IoKHRlbXBEb3VibGUpLzQyOTQ5NjcyOTYuMCkpKSwgNDI5NDk2NzI5NS4wKSl8MCk+Pj4wIDogKH5+KCgrKE1hdGguY2VpbCgodGVtcERvdWJsZSAtICsoKCh+fih0ZW1wRG91YmxlKSkpPj4+MCkpLzQyOTQ5NjcyOTYuMCkpKSkpPj4+MCkgOiAwKV0sSEVBUDMyWygocHRyKT4+MildID0gdGVtcEk2NFswXSxIRUFQMzJbKCgocHRyKSsoNCkpPj4yKV0gPSB0ZW1wSTY0WzFdKTsgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ2Zsb2F0JzogSEVBUEYzMlsoKHB0cik+PjIpXSA9IHZhbHVlOyBicmVhaztcclxuICAgICAgY2FzZSAnZG91YmxlJzogSEVBUEY2NFsoKHB0cik+PjMpXSA9IHZhbHVlOyBicmVhaztcclxuICAgICAgY2FzZSAnKic6IEhFQVBVMzJbKChwdHIpPj4yKV0gPSB2YWx1ZTsgYnJlYWs7XHJcbiAgICAgIGRlZmF1bHQ6IGFib3J0KCdpbnZhbGlkIHR5cGUgZm9yIHNldFZhbHVlOiAnICsgdHlwZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKiogQGNvbnN0cnVjdG9yICovXHJcbiAgZnVuY3Rpb24gRXhjZXB0aW9uSW5mbyhleGNQdHIpIHtcclxuICAgICAgdGhpcy5leGNQdHIgPSBleGNQdHI7XHJcbiAgICAgIHRoaXMucHRyID0gZXhjUHRyIC0gMjQ7XHJcbiAgXHJcbiAgICAgIHRoaXMuc2V0X3R5cGUgPSBmdW5jdGlvbih0eXBlKSB7XHJcbiAgICAgICAgSEVBUFUzMlsoKCh0aGlzLnB0cikrKDQpKT4+MildID0gdHlwZTtcclxuICAgICAgfTtcclxuICBcclxuICAgICAgdGhpcy5nZXRfdHlwZSA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHJldHVybiBIRUFQVTMyWygoKHRoaXMucHRyKSsoNCkpPj4yKV07XHJcbiAgICAgIH07XHJcbiAgXHJcbiAgICAgIHRoaXMuc2V0X2Rlc3RydWN0b3IgPSBmdW5jdGlvbihkZXN0cnVjdG9yKSB7XHJcbiAgICAgICAgSEVBUFUzMlsoKCh0aGlzLnB0cikrKDgpKT4+MildID0gZGVzdHJ1Y3RvcjtcclxuICAgICAgfTtcclxuICBcclxuICAgICAgdGhpcy5nZXRfZGVzdHJ1Y3RvciA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHJldHVybiBIRUFQVTMyWygoKHRoaXMucHRyKSsoOCkpPj4yKV07XHJcbiAgICAgIH07XHJcbiAgXHJcbiAgICAgIHRoaXMuc2V0X2NhdWdodCA9IGZ1bmN0aW9uIChjYXVnaHQpIHtcclxuICAgICAgICBjYXVnaHQgPSBjYXVnaHQgPyAxIDogMDtcclxuICAgICAgICBIRUFQOFsoKCh0aGlzLnB0cikrKDEyKSk+PjApXSA9IGNhdWdodDtcclxuICAgICAgfTtcclxuICBcclxuICAgICAgdGhpcy5nZXRfY2F1Z2h0ID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiBIRUFQOFsoKCh0aGlzLnB0cikrKDEyKSk+PjApXSAhPSAwO1xyXG4gICAgICB9O1xyXG4gIFxyXG4gICAgICB0aGlzLnNldF9yZXRocm93biA9IGZ1bmN0aW9uIChyZXRocm93bikge1xyXG4gICAgICAgIHJldGhyb3duID0gcmV0aHJvd24gPyAxIDogMDtcclxuICAgICAgICBIRUFQOFsoKCh0aGlzLnB0cikrKDEzKSk+PjApXSA9IHJldGhyb3duO1xyXG4gICAgICB9O1xyXG4gIFxyXG4gICAgICB0aGlzLmdldF9yZXRocm93biA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gSEVBUDhbKCgodGhpcy5wdHIpKygxMykpPj4wKV0gIT0gMDtcclxuICAgICAgfTtcclxuICBcclxuICAgICAgLy8gSW5pdGlhbGl6ZSBuYXRpdmUgc3RydWN0dXJlIGZpZWxkcy4gU2hvdWxkIGJlIGNhbGxlZCBvbmNlIGFmdGVyIGFsbG9jYXRlZC5cclxuICAgICAgdGhpcy5pbml0ID0gZnVuY3Rpb24odHlwZSwgZGVzdHJ1Y3Rvcikge1xyXG4gICAgICAgIHRoaXMuc2V0X2FkanVzdGVkX3B0cigwKTtcclxuICAgICAgICB0aGlzLnNldF90eXBlKHR5cGUpO1xyXG4gICAgICAgIHRoaXMuc2V0X2Rlc3RydWN0b3IoZGVzdHJ1Y3Rvcik7XHJcbiAgICAgIH1cclxuICBcclxuICAgICAgdGhpcy5zZXRfYWRqdXN0ZWRfcHRyID0gZnVuY3Rpb24oYWRqdXN0ZWRQdHIpIHtcclxuICAgICAgICBIRUFQVTMyWygoKHRoaXMucHRyKSsoMTYpKT4+MildID0gYWRqdXN0ZWRQdHI7XHJcbiAgICAgIH07XHJcbiAgXHJcbiAgICAgIHRoaXMuZ2V0X2FkanVzdGVkX3B0ciA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHJldHVybiBIRUFQVTMyWygoKHRoaXMucHRyKSsoMTYpKT4+MildO1xyXG4gICAgICB9O1xyXG4gIFxyXG4gICAgICAvLyBHZXQgcG9pbnRlciB3aGljaCBpcyBleHBlY3RlZCB0byBiZSByZWNlaXZlZCBieSBjYXRjaCBjbGF1c2UgaW4gQysrIGNvZGUuIEl0IG1heSBiZSBhZGp1c3RlZFxyXG4gICAgICAvLyB3aGVuIHRoZSBwb2ludGVyIGlzIGNhc3RlZCB0byBzb21lIG9mIHRoZSBleGNlcHRpb24gb2JqZWN0IGJhc2UgY2xhc3NlcyAoZS5nLiB3aGVuIHZpcnR1YWxcclxuICAgICAgLy8gaW5oZXJpdGFuY2UgaXMgdXNlZCkuIFdoZW4gYSBwb2ludGVyIGlzIHRocm93biB0aGlzIG1ldGhvZCBzaG91bGQgcmV0dXJuIHRoZSB0aHJvd24gcG9pbnRlclxyXG4gICAgICAvLyBpdHNlbGYuXHJcbiAgICAgIHRoaXMuZ2V0X2V4Y2VwdGlvbl9wdHIgPSBmdW5jdGlvbigpIHtcclxuICAgICAgICAvLyBXb3JrIGFyb3VuZCBhIGZhc3Rjb21wIGJ1ZywgdGhpcyBjb2RlIGlzIHN0aWxsIGluY2x1ZGVkIGZvciBzb21lIHJlYXNvbiBpbiBhIGJ1aWxkIHdpdGhvdXRcclxuICAgICAgICAvLyBleGNlcHRpb25zIHN1cHBvcnQuXHJcbiAgICAgICAgdmFyIGlzUG9pbnRlciA9IF9fX2N4YV9pc19wb2ludGVyX3R5cGUodGhpcy5nZXRfdHlwZSgpKTtcclxuICAgICAgICBpZiAoaXNQb2ludGVyKSB7XHJcbiAgICAgICAgICByZXR1cm4gSEVBUFUzMlsoKHRoaXMuZXhjUHRyKT4+MildO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgYWRqdXN0ZWQgPSB0aGlzLmdldF9hZGp1c3RlZF9wdHIoKTtcclxuICAgICAgICBpZiAoYWRqdXN0ZWQgIT09IDApIHJldHVybiBhZGp1c3RlZDtcclxuICAgICAgICByZXR1cm4gdGhpcy5leGNQdHI7XHJcbiAgICAgIH07XHJcbiAgICB9XHJcbiAgXHJcbiAgdmFyIGV4Y2VwdGlvbkxhc3QgPSAwO1xyXG4gIFxyXG4gIHZhciB1bmNhdWdodEV4Y2VwdGlvbkNvdW50ID0gMDtcclxuICBmdW5jdGlvbiBfX19jeGFfdGhyb3cocHRyLCB0eXBlLCBkZXN0cnVjdG9yKSB7XHJcbiAgICAgIHZhciBpbmZvID0gbmV3IEV4Y2VwdGlvbkluZm8ocHRyKTtcclxuICAgICAgLy8gSW5pdGlhbGl6ZSBFeGNlcHRpb25JbmZvIGNvbnRlbnQgYWZ0ZXIgaXQgd2FzIGFsbG9jYXRlZCBpbiBfX2N4YV9hbGxvY2F0ZV9leGNlcHRpb24uXHJcbiAgICAgIGluZm8uaW5pdCh0eXBlLCBkZXN0cnVjdG9yKTtcclxuICAgICAgZXhjZXB0aW9uTGFzdCA9IHB0cjtcclxuICAgICAgdW5jYXVnaHRFeGNlcHRpb25Db3VudCsrO1xyXG4gICAgICB0aHJvdyBleGNlcHRpb25MYXN0O1xyXG4gICAgfVxyXG5cclxuICBmdW5jdGlvbiBfYWJvcnQoKSB7XHJcbiAgICAgIGFib3J0KCcnKTtcclxuICAgIH1cclxuXHJcbiAgZnVuY3Rpb24gX2Vtc2NyaXB0ZW5fbWVtY3B5X2JpZyhkZXN0LCBzcmMsIG51bSkge1xyXG4gICAgICBIRUFQVTguY29weVdpdGhpbihkZXN0LCBzcmMsIHNyYyArIG51bSk7XHJcbiAgICB9XHJcblxyXG4gIGZ1bmN0aW9uIGdldEhlYXBNYXgoKSB7XHJcbiAgICAgIC8vIFN0YXkgb25lIFdhc20gcGFnZSBzaG9ydCBvZiA0R0I6IHdoaWxlIGUuZy4gQ2hyb21lIGlzIGFibGUgdG8gYWxsb2NhdGVcclxuICAgICAgLy8gZnVsbCA0R0IgV2FzbSBtZW1vcmllcywgdGhlIHNpemUgd2lsbCB3cmFwIGJhY2sgdG8gMCBieXRlcyBpbiBXYXNtIHNpZGVcclxuICAgICAgLy8gZm9yIGFueSBjb2RlIHRoYXQgZGVhbHMgd2l0aCBoZWFwIHNpemVzLCB3aGljaCB3b3VsZCByZXF1aXJlIHNwZWNpYWxcclxuICAgICAgLy8gY2FzaW5nIGFsbCBoZWFwIHNpemUgcmVsYXRlZCBjb2RlIHRvIHRyZWF0IDAgc3BlY2lhbGx5LlxyXG4gICAgICByZXR1cm4gMjE0NzQ4MzY0ODtcclxuICAgIH1cclxuICBcclxuICBmdW5jdGlvbiBlbXNjcmlwdGVuX3JlYWxsb2NfYnVmZmVyKHNpemUpIHtcclxuICAgICAgdmFyIGIgPSB3YXNtTWVtb3J5LmJ1ZmZlcjtcclxuICAgICAgdHJ5IHtcclxuICAgICAgICAvLyByb3VuZCBzaXplIGdyb3cgcmVxdWVzdCB1cCB0byB3YXNtIHBhZ2Ugc2l6ZSAoZml4ZWQgNjRLQiBwZXIgc3BlYylcclxuICAgICAgICB3YXNtTWVtb3J5Lmdyb3coKHNpemUgLSBiLmJ5dGVMZW5ndGggKyA2NTUzNSkgPj4+IDE2KTsgLy8gLmdyb3coKSB0YWtlcyBhIGRlbHRhIGNvbXBhcmVkIHRvIHRoZSBwcmV2aW91cyBzaXplXHJcbiAgICAgICAgdXBkYXRlTWVtb3J5Vmlld3MoKTtcclxuICAgICAgICByZXR1cm4gMSAvKnN1Y2Nlc3MqLztcclxuICAgICAgfSBjYXRjaChlKSB7XHJcbiAgICAgIH1cclxuICAgICAgLy8gaW1wbGljaXQgMCByZXR1cm4gdG8gc2F2ZSBjb2RlIHNpemUgKGNhbGxlciB3aWxsIGNhc3QgXCJ1bmRlZmluZWRcIiBpbnRvIDBcclxuICAgICAgLy8gYW55aG93KVxyXG4gICAgfVxyXG4gIGZ1bmN0aW9uIF9lbXNjcmlwdGVuX3Jlc2l6ZV9oZWFwKHJlcXVlc3RlZFNpemUpIHtcclxuICAgICAgdmFyIG9sZFNpemUgPSBIRUFQVTgubGVuZ3RoO1xyXG4gICAgICByZXF1ZXN0ZWRTaXplID0gcmVxdWVzdGVkU2l6ZSA+Pj4gMDtcclxuICAgICAgLy8gV2l0aCBtdWx0aXRocmVhZGVkIGJ1aWxkcywgcmFjZXMgY2FuIGhhcHBlbiAoYW5vdGhlciB0aHJlYWQgbWlnaHQgaW5jcmVhc2UgdGhlIHNpemVcclxuICAgICAgLy8gaW4gYmV0d2VlbiksIHNvIHJldHVybiBhIGZhaWx1cmUsIGFuZCBsZXQgdGhlIGNhbGxlciByZXRyeS5cclxuICBcclxuICAgICAgLy8gTWVtb3J5IHJlc2l6ZSBydWxlczpcclxuICAgICAgLy8gMS4gIEFsd2F5cyBpbmNyZWFzZSBoZWFwIHNpemUgdG8gYXQgbGVhc3QgdGhlIHJlcXVlc3RlZCBzaXplLCByb3VuZGVkIHVwXHJcbiAgICAgIC8vICAgICB0byBuZXh0IHBhZ2UgbXVsdGlwbGUuXHJcbiAgICAgIC8vIDJhLiBJZiBNRU1PUllfR1JPV1RIX0xJTkVBUl9TVEVQID09IC0xLCBleGNlc3NpdmVseSByZXNpemUgdGhlIGhlYXBcclxuICAgICAgLy8gICAgIGdlb21ldHJpY2FsbHk6IGluY3JlYXNlIHRoZSBoZWFwIHNpemUgYWNjb3JkaW5nIHRvXHJcbiAgICAgIC8vICAgICBNRU1PUllfR1JPV1RIX0dFT01FVFJJQ19TVEVQIGZhY3RvciAoZGVmYXVsdCArMjAlKSwgQXQgbW9zdFxyXG4gICAgICAvLyAgICAgb3ZlcnJlc2VydmUgYnkgTUVNT1JZX0dST1dUSF9HRU9NRVRSSUNfQ0FQIGJ5dGVzIChkZWZhdWx0IDk2TUIpLlxyXG4gICAgICAvLyAyYi4gSWYgTUVNT1JZX0dST1dUSF9MSU5FQVJfU1RFUCAhPSAtMSwgZXhjZXNzaXZlbHkgcmVzaXplIHRoZSBoZWFwXHJcbiAgICAgIC8vICAgICBsaW5lYXJseTogaW5jcmVhc2UgdGhlIGhlYXAgc2l6ZSBieSBhdCBsZWFzdFxyXG4gICAgICAvLyAgICAgTUVNT1JZX0dST1dUSF9MSU5FQVJfU1RFUCBieXRlcy5cclxuICAgICAgLy8gMy4gIE1heCBzaXplIGZvciB0aGUgaGVhcCBpcyBjYXBwZWQgYXQgMjA0OE1CLVdBU01fUEFHRV9TSVpFLCBvciBieVxyXG4gICAgICAvLyAgICAgTUFYSU1VTV9NRU1PUlksIG9yIGJ5IEFTQU4gbGltaXQsIGRlcGVuZGluZyBvbiB3aGljaCBpcyBzbWFsbGVzdFxyXG4gICAgICAvLyA0LiAgSWYgd2Ugd2VyZSB1bmFibGUgdG8gYWxsb2NhdGUgYXMgbXVjaCBtZW1vcnksIGl0IG1heSBiZSBkdWUgdG9cclxuICAgICAgLy8gICAgIG92ZXItZWFnZXIgZGVjaXNpb24gdG8gZXhjZXNzaXZlbHkgcmVzZXJ2ZSBkdWUgdG8gKDMpIGFib3ZlLlxyXG4gICAgICAvLyAgICAgSGVuY2UgaWYgYW4gYWxsb2NhdGlvbiBmYWlscywgY3V0IGRvd24gb24gdGhlIGFtb3VudCBvZiBleGNlc3NcclxuICAgICAgLy8gICAgIGdyb3d0aCwgaW4gYW4gYXR0ZW1wdCB0byBzdWNjZWVkIHRvIHBlcmZvcm0gYSBzbWFsbGVyIGFsbG9jYXRpb24uXHJcbiAgXHJcbiAgICAgIC8vIEEgbGltaXQgaXMgc2V0IGZvciBob3cgbXVjaCB3ZSBjYW4gZ3Jvdy4gV2Ugc2hvdWxkIG5vdCBleGNlZWQgdGhhdFxyXG4gICAgICAvLyAodGhlIHdhc20gYmluYXJ5IHNwZWNpZmllcyBpdCwgc28gaWYgd2UgdHJpZWQsIHdlJ2QgZmFpbCBhbnlob3cpLlxyXG4gICAgICB2YXIgbWF4SGVhcFNpemUgPSBnZXRIZWFwTWF4KCk7XHJcbiAgICAgIGlmIChyZXF1ZXN0ZWRTaXplID4gbWF4SGVhcFNpemUpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgIH1cclxuICBcclxuICAgICAgbGV0IGFsaWduVXAgPSAoeCwgbXVsdGlwbGUpID0+IHggKyAobXVsdGlwbGUgLSB4ICUgbXVsdGlwbGUpICUgbXVsdGlwbGU7XHJcbiAgXHJcbiAgICAgIC8vIExvb3AgdGhyb3VnaCBwb3RlbnRpYWwgaGVhcCBzaXplIGluY3JlYXNlcy4gSWYgd2UgYXR0ZW1wdCBhIHRvbyBlYWdlclxyXG4gICAgICAvLyByZXNlcnZhdGlvbiB0aGF0IGZhaWxzLCBjdXQgZG93biBvbiB0aGUgYXR0ZW1wdGVkIHNpemUgYW5kIHJlc2VydmUgYVxyXG4gICAgICAvLyBzbWFsbGVyIGJ1bXAgaW5zdGVhZC4gKG1heCAzIHRpbWVzLCBjaG9zZW4gc29tZXdoYXQgYXJiaXRyYXJpbHkpXHJcbiAgICAgIGZvciAodmFyIGN1dERvd24gPSAxOyBjdXREb3duIDw9IDQ7IGN1dERvd24gKj0gMikge1xyXG4gICAgICAgIHZhciBvdmVyR3Jvd25IZWFwU2l6ZSA9IG9sZFNpemUgKiAoMSArIDAuMiAvIGN1dERvd24pOyAvLyBlbnN1cmUgZ2VvbWV0cmljIGdyb3d0aFxyXG4gICAgICAgIC8vIGJ1dCBsaW1pdCBvdmVycmVzZXJ2aW5nIChkZWZhdWx0IHRvIGNhcHBpbmcgYXQgKzk2TUIgb3Zlcmdyb3d0aCBhdCBtb3N0KVxyXG4gICAgICAgIG92ZXJHcm93bkhlYXBTaXplID0gTWF0aC5taW4ob3Zlckdyb3duSGVhcFNpemUsIHJlcXVlc3RlZFNpemUgKyAxMDA2NjMyOTYgKTtcclxuICBcclxuICAgICAgICB2YXIgbmV3U2l6ZSA9IE1hdGgubWluKG1heEhlYXBTaXplLCBhbGlnblVwKE1hdGgubWF4KHJlcXVlc3RlZFNpemUsIG92ZXJHcm93bkhlYXBTaXplKSwgNjU1MzYpKTtcclxuICBcclxuICAgICAgICB2YXIgcmVwbGFjZW1lbnQgPSBlbXNjcmlwdGVuX3JlYWxsb2NfYnVmZmVyKG5ld1NpemUpO1xyXG4gICAgICAgIGlmIChyZXBsYWNlbWVudCkge1xyXG4gIFxyXG4gICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgZnVuY3Rpb24gZ2V0Q0Z1bmMoaWRlbnQpIHtcclxuICAgICAgdmFyIGZ1bmMgPSBNb2R1bGVbJ18nICsgaWRlbnRdOyAvLyBjbG9zdXJlIGV4cG9ydGVkIGZ1bmN0aW9uXHJcbiAgICAgIHJldHVybiBmdW5jO1xyXG4gICAgfVxyXG4gIFxyXG4gIFxyXG4gIGZ1bmN0aW9uIHdyaXRlQXJyYXlUb01lbW9yeShhcnJheSwgYnVmZmVyKSB7XHJcbiAgICAgIEhFQVA4LnNldChhcnJheSwgYnVmZmVyKTtcclxuICAgIH1cclxuICBcclxuICBmdW5jdGlvbiBsZW5ndGhCeXRlc1VURjgoc3RyKSB7XHJcbiAgICAgIHZhciBsZW4gPSAwO1xyXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN0ci5sZW5ndGg7ICsraSkge1xyXG4gICAgICAgIC8vIEdvdGNoYTogY2hhckNvZGVBdCByZXR1cm5zIGEgMTYtYml0IHdvcmQgdGhhdCBpcyBhIFVURi0xNiBlbmNvZGVkIGNvZGVcclxuICAgICAgICAvLyB1bml0LCBub3QgYSBVbmljb2RlIGNvZGUgcG9pbnQgb2YgdGhlIGNoYXJhY3RlciEgU28gZGVjb2RlXHJcbiAgICAgICAgLy8gVVRGMTYtPlVURjMyLT5VVEY4LlxyXG4gICAgICAgIC8vIFNlZSBodHRwOi8vdW5pY29kZS5vcmcvZmFxL3V0Zl9ib20uaHRtbCN1dGYxNi0zXHJcbiAgICAgICAgdmFyIGMgPSBzdHIuY2hhckNvZGVBdChpKTsgLy8gcG9zc2libHkgYSBsZWFkIHN1cnJvZ2F0ZVxyXG4gICAgICAgIGlmIChjIDw9IDB4N0YpIHtcclxuICAgICAgICAgIGxlbisrO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoYyA8PSAweDdGRikge1xyXG4gICAgICAgICAgbGVuICs9IDI7XHJcbiAgICAgICAgfSBlbHNlIGlmIChjID49IDB4RDgwMCAmJiBjIDw9IDB4REZGRikge1xyXG4gICAgICAgICAgbGVuICs9IDQ7ICsraTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgbGVuICs9IDM7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBsZW47XHJcbiAgICB9XHJcbiAgXHJcbiAgZnVuY3Rpb24gc3RyaW5nVG9VVEY4QXJyYXkoc3RyLCBoZWFwLCBvdXRJZHgsIG1heEJ5dGVzVG9Xcml0ZSkge1xyXG4gICAgICAvLyBQYXJhbWV0ZXIgbWF4Qnl0ZXNUb1dyaXRlIGlzIG5vdCBvcHRpb25hbC4gTmVnYXRpdmUgdmFsdWVzLCAwLCBudWxsLFxyXG4gICAgICAvLyB1bmRlZmluZWQgYW5kIGZhbHNlIGVhY2ggZG9uJ3Qgd3JpdGUgb3V0IGFueSBieXRlcy5cclxuICAgICAgaWYgKCEobWF4Qnl0ZXNUb1dyaXRlID4gMCkpXHJcbiAgICAgICAgcmV0dXJuIDA7XHJcbiAgXHJcbiAgICAgIHZhciBzdGFydElkeCA9IG91dElkeDtcclxuICAgICAgdmFyIGVuZElkeCA9IG91dElkeCArIG1heEJ5dGVzVG9Xcml0ZSAtIDE7IC8vIC0xIGZvciBzdHJpbmcgbnVsbCB0ZXJtaW5hdG9yLlxyXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN0ci5sZW5ndGg7ICsraSkge1xyXG4gICAgICAgIC8vIEdvdGNoYTogY2hhckNvZGVBdCByZXR1cm5zIGEgMTYtYml0IHdvcmQgdGhhdCBpcyBhIFVURi0xNiBlbmNvZGVkIGNvZGVcclxuICAgICAgICAvLyB1bml0LCBub3QgYSBVbmljb2RlIGNvZGUgcG9pbnQgb2YgdGhlIGNoYXJhY3RlciEgU28gZGVjb2RlXHJcbiAgICAgICAgLy8gVVRGMTYtPlVURjMyLT5VVEY4LlxyXG4gICAgICAgIC8vIFNlZSBodHRwOi8vdW5pY29kZS5vcmcvZmFxL3V0Zl9ib20uaHRtbCN1dGYxNi0zXHJcbiAgICAgICAgLy8gRm9yIFVURjggYnl0ZSBzdHJ1Y3R1cmUsIHNlZSBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1VURi04I0Rlc2NyaXB0aW9uXHJcbiAgICAgICAgLy8gYW5kIGh0dHBzOi8vd3d3LmlldGYub3JnL3JmYy9yZmMyMjc5LnR4dFxyXG4gICAgICAgIC8vIGFuZCBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMzYyOVxyXG4gICAgICAgIHZhciB1ID0gc3RyLmNoYXJDb2RlQXQoaSk7IC8vIHBvc3NpYmx5IGEgbGVhZCBzdXJyb2dhdGVcclxuICAgICAgICBpZiAodSA+PSAweEQ4MDAgJiYgdSA8PSAweERGRkYpIHtcclxuICAgICAgICAgIHZhciB1MSA9IHN0ci5jaGFyQ29kZUF0KCsraSk7XHJcbiAgICAgICAgICB1ID0gMHgxMDAwMCArICgodSAmIDB4M0ZGKSA8PCAxMCkgfCAodTEgJiAweDNGRik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh1IDw9IDB4N0YpIHtcclxuICAgICAgICAgIGlmIChvdXRJZHggPj0gZW5kSWR4KSBicmVhaztcclxuICAgICAgICAgIGhlYXBbb3V0SWR4KytdID0gdTtcclxuICAgICAgICB9IGVsc2UgaWYgKHUgPD0gMHg3RkYpIHtcclxuICAgICAgICAgIGlmIChvdXRJZHggKyAxID49IGVuZElkeCkgYnJlYWs7XHJcbiAgICAgICAgICBoZWFwW291dElkeCsrXSA9IDB4QzAgfCAodSA+PiA2KTtcclxuICAgICAgICAgIGhlYXBbb3V0SWR4KytdID0gMHg4MCB8ICh1ICYgNjMpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAodSA8PSAweEZGRkYpIHtcclxuICAgICAgICAgIGlmIChvdXRJZHggKyAyID49IGVuZElkeCkgYnJlYWs7XHJcbiAgICAgICAgICBoZWFwW291dElkeCsrXSA9IDB4RTAgfCAodSA+PiAxMik7XHJcbiAgICAgICAgICBoZWFwW291dElkeCsrXSA9IDB4ODAgfCAoKHUgPj4gNikgJiA2Myk7XHJcbiAgICAgICAgICBoZWFwW291dElkeCsrXSA9IDB4ODAgfCAodSAmIDYzKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgaWYgKG91dElkeCArIDMgPj0gZW5kSWR4KSBicmVhaztcclxuICAgICAgICAgIGhlYXBbb3V0SWR4KytdID0gMHhGMCB8ICh1ID4+IDE4KTtcclxuICAgICAgICAgIGhlYXBbb3V0SWR4KytdID0gMHg4MCB8ICgodSA+PiAxMikgJiA2Myk7XHJcbiAgICAgICAgICBoZWFwW291dElkeCsrXSA9IDB4ODAgfCAoKHUgPj4gNikgJiA2Myk7XHJcbiAgICAgICAgICBoZWFwW291dElkeCsrXSA9IDB4ODAgfCAodSAmIDYzKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgLy8gTnVsbC10ZXJtaW5hdGUgdGhlIHBvaW50ZXIgdG8gdGhlIGJ1ZmZlci5cclxuICAgICAgaGVhcFtvdXRJZHhdID0gMDtcclxuICAgICAgcmV0dXJuIG91dElkeCAtIHN0YXJ0SWR4O1xyXG4gICAgfVxyXG4gIGZ1bmN0aW9uIHN0cmluZ1RvVVRGOChzdHIsIG91dFB0ciwgbWF4Qnl0ZXNUb1dyaXRlKSB7XHJcbiAgICAgIHJldHVybiBzdHJpbmdUb1VURjhBcnJheShzdHIsIEhFQVBVOCxvdXRQdHIsIG1heEJ5dGVzVG9Xcml0ZSk7XHJcbiAgICB9XHJcbiAgZnVuY3Rpb24gc3RyaW5nVG9VVEY4T25TdGFjayhzdHIpIHtcclxuICAgICAgdmFyIHNpemUgPSBsZW5ndGhCeXRlc1VURjgoc3RyKSArIDE7XHJcbiAgICAgIHZhciByZXQgPSBzdGFja0FsbG9jKHNpemUpO1xyXG4gICAgICBzdHJpbmdUb1VURjgoc3RyLCByZXQsIHNpemUpO1xyXG4gICAgICByZXR1cm4gcmV0O1xyXG4gICAgfVxyXG4gIFxyXG4gIHZhciBVVEY4RGVjb2RlciA9IHR5cGVvZiBUZXh0RGVjb2RlciAhPSAndW5kZWZpbmVkJyA/IG5ldyBUZXh0RGVjb2RlcigndXRmOCcpIDogdW5kZWZpbmVkO1xyXG4gIFxyXG4gICAgLyoqXHJcbiAgICAgKiBHaXZlbiBhIHBvaW50ZXIgJ2lkeCcgdG8gYSBudWxsLXRlcm1pbmF0ZWQgVVRGOC1lbmNvZGVkIHN0cmluZyBpbiB0aGUgZ2l2ZW5cclxuICAgICAqIGFycmF5IHRoYXQgY29udGFpbnMgdWludDggdmFsdWVzLCByZXR1cm5zIGEgY29weSBvZiB0aGF0IHN0cmluZyBhcyBhXHJcbiAgICAgKiBKYXZhc2NyaXB0IFN0cmluZyBvYmplY3QuXHJcbiAgICAgKiBoZWFwT3JBcnJheSBpcyBlaXRoZXIgYSByZWd1bGFyIGFycmF5LCBvciBhIEphdmFTY3JpcHQgdHlwZWQgYXJyYXkgdmlldy5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBpZHhcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyPX0gbWF4Qnl0ZXNUb1JlYWRcclxuICAgICAqIEByZXR1cm4ge3N0cmluZ31cclxuICAgICAqL1xyXG4gIGZ1bmN0aW9uIFVURjhBcnJheVRvU3RyaW5nKGhlYXBPckFycmF5LCBpZHgsIG1heEJ5dGVzVG9SZWFkKSB7XHJcbiAgICAgIHZhciBlbmRJZHggPSBpZHggKyBtYXhCeXRlc1RvUmVhZDtcclxuICAgICAgdmFyIGVuZFB0ciA9IGlkeDtcclxuICAgICAgLy8gVGV4dERlY29kZXIgbmVlZHMgdG8ga25vdyB0aGUgYnl0ZSBsZW5ndGggaW4gYWR2YW5jZSwgaXQgZG9lc24ndCBzdG9wIG9uXHJcbiAgICAgIC8vIG51bGwgdGVybWluYXRvciBieSBpdHNlbGYuICBBbHNvLCB1c2UgdGhlIGxlbmd0aCBpbmZvIHRvIGF2b2lkIHJ1bm5pbmcgdGlueVxyXG4gICAgICAvLyBzdHJpbmdzIHRocm91Z2ggVGV4dERlY29kZXIsIHNpbmNlIC5zdWJhcnJheSgpIGFsbG9jYXRlcyBnYXJiYWdlLlxyXG4gICAgICAvLyAoQXMgYSB0aW55IGNvZGUgc2F2ZSB0cmljaywgY29tcGFyZSBlbmRQdHIgYWdhaW5zdCBlbmRJZHggdXNpbmcgYSBuZWdhdGlvbixcclxuICAgICAgLy8gc28gdGhhdCB1bmRlZmluZWQgbWVhbnMgSW5maW5pdHkpXHJcbiAgICAgIHdoaWxlIChoZWFwT3JBcnJheVtlbmRQdHJdICYmICEoZW5kUHRyID49IGVuZElkeCkpICsrZW5kUHRyO1xyXG4gIFxyXG4gICAgICBpZiAoZW5kUHRyIC0gaWR4ID4gMTYgJiYgaGVhcE9yQXJyYXkuYnVmZmVyICYmIFVURjhEZWNvZGVyKSB7XHJcbiAgICAgICAgcmV0dXJuIFVURjhEZWNvZGVyLmRlY29kZShoZWFwT3JBcnJheS5zdWJhcnJheShpZHgsIGVuZFB0cikpO1xyXG4gICAgICB9XHJcbiAgICAgIHZhciBzdHIgPSAnJztcclxuICAgICAgLy8gSWYgYnVpbGRpbmcgd2l0aCBUZXh0RGVjb2Rlciwgd2UgaGF2ZSBhbHJlYWR5IGNvbXB1dGVkIHRoZSBzdHJpbmcgbGVuZ3RoXHJcbiAgICAgIC8vIGFib3ZlLCBzbyB0ZXN0IGxvb3AgZW5kIGNvbmRpdGlvbiBhZ2FpbnN0IHRoYXRcclxuICAgICAgd2hpbGUgKGlkeCA8IGVuZFB0cikge1xyXG4gICAgICAgIC8vIEZvciBVVEY4IGJ5dGUgc3RydWN0dXJlLCBzZWU6XHJcbiAgICAgICAgLy8gaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9VVEYtOCNEZXNjcmlwdGlvblxyXG4gICAgICAgIC8vIGh0dHBzOi8vd3d3LmlldGYub3JnL3JmYy9yZmMyMjc5LnR4dFxyXG4gICAgICAgIC8vIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMzNjI5XHJcbiAgICAgICAgdmFyIHUwID0gaGVhcE9yQXJyYXlbaWR4KytdO1xyXG4gICAgICAgIGlmICghKHUwICYgMHg4MCkpIHsgc3RyICs9IFN0cmluZy5mcm9tQ2hhckNvZGUodTApOyBjb250aW51ZTsgfVxyXG4gICAgICAgIHZhciB1MSA9IGhlYXBPckFycmF5W2lkeCsrXSAmIDYzO1xyXG4gICAgICAgIGlmICgodTAgJiAweEUwKSA9PSAweEMwKSB7IHN0ciArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKCgodTAgJiAzMSkgPDwgNikgfCB1MSk7IGNvbnRpbnVlOyB9XHJcbiAgICAgICAgdmFyIHUyID0gaGVhcE9yQXJyYXlbaWR4KytdICYgNjM7XHJcbiAgICAgICAgaWYgKCh1MCAmIDB4RjApID09IDB4RTApIHtcclxuICAgICAgICAgIHUwID0gKCh1MCAmIDE1KSA8PCAxMikgfCAodTEgPDwgNikgfCB1MjtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdTAgPSAoKHUwICYgNykgPDwgMTgpIHwgKHUxIDw8IDEyKSB8ICh1MiA8PCA2KSB8IChoZWFwT3JBcnJheVtpZHgrK10gJiA2Myk7XHJcbiAgICAgICAgfVxyXG4gIFxyXG4gICAgICAgIGlmICh1MCA8IDB4MTAwMDApIHtcclxuICAgICAgICAgIHN0ciArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKHUwKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdmFyIGNoID0gdTAgLSAweDEwMDAwO1xyXG4gICAgICAgICAgc3RyICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoMHhEODAwIHwgKGNoID4+IDEwKSwgMHhEQzAwIHwgKGNoICYgMHgzRkYpKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIHN0cjtcclxuICAgIH1cclxuICBcclxuICBcclxuICAgIC8qKlxyXG4gICAgICogR2l2ZW4gYSBwb2ludGVyICdwdHInIHRvIGEgbnVsbC10ZXJtaW5hdGVkIFVURjgtZW5jb2RlZCBzdHJpbmcgaW4gdGhlXHJcbiAgICAgKiBlbXNjcmlwdGVuIEhFQVAsIHJldHVybnMgYSBjb3B5IG9mIHRoYXQgc3RyaW5nIGFzIGEgSmF2YXNjcmlwdCBTdHJpbmcgb2JqZWN0LlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBwdHJcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyPX0gbWF4Qnl0ZXNUb1JlYWQgLSBBbiBvcHRpb25hbCBsZW5ndGggdGhhdCBzcGVjaWZpZXMgdGhlXHJcbiAgICAgKiAgIG1heGltdW0gbnVtYmVyIG9mIGJ5dGVzIHRvIHJlYWQuIFlvdSBjYW4gb21pdCB0aGlzIHBhcmFtZXRlciB0byBzY2FuIHRoZVxyXG4gICAgICogICBzdHJpbmcgdW50aWwgdGhlIGZpcnN0IFx1MDAwMCBieXRlLiBJZiBtYXhCeXRlc1RvUmVhZCBpcyBwYXNzZWQsIGFuZCB0aGUgc3RyaW5nXHJcbiAgICAgKiAgIGF0IFtwdHIsIHB0cittYXhCeXRlc1RvUmVhZHJbIGNvbnRhaW5zIGEgbnVsbCBieXRlIGluIHRoZSBtaWRkbGUsIHRoZW4gdGhlXHJcbiAgICAgKiAgIHN0cmluZyB3aWxsIGN1dCBzaG9ydCBhdCB0aGF0IGJ5dGUgaW5kZXggKGkuZS4gbWF4Qnl0ZXNUb1JlYWQgd2lsbCBub3RcclxuICAgICAqICAgcHJvZHVjZSBhIHN0cmluZyBvZiBleGFjdCBsZW5ndGggW3B0ciwgcHRyK21heEJ5dGVzVG9SZWFkWykgTi5CLiBtaXhpbmdcclxuICAgICAqICAgZnJlcXVlbnQgdXNlcyBvZiBVVEY4VG9TdHJpbmcoKSB3aXRoIGFuZCB3aXRob3V0IG1heEJ5dGVzVG9SZWFkIG1heSB0aHJvd1xyXG4gICAgICogICBKUyBKSVQgb3B0aW1pemF0aW9ucyBvZmYsIHNvIGl0IGlzIHdvcnRoIHRvIGNvbnNpZGVyIGNvbnNpc3RlbnRseSB1c2luZyBvbmVcclxuICAgICAqIEByZXR1cm4ge3N0cmluZ31cclxuICAgICAqL1xyXG4gIGZ1bmN0aW9uIFVURjhUb1N0cmluZyhwdHIsIG1heEJ5dGVzVG9SZWFkKSB7XHJcbiAgICAgIHJldHVybiBwdHIgPyBVVEY4QXJyYXlUb1N0cmluZyhIRUFQVTgsIHB0ciwgbWF4Qnl0ZXNUb1JlYWQpIDogJyc7XHJcbiAgICB9XHJcbiAgXHJcbiAgICAvKipcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfG51bGw9fSByZXR1cm5UeXBlXHJcbiAgICAgKiBAcGFyYW0ge0FycmF5PX0gYXJnVHlwZXNcclxuICAgICAqIEBwYXJhbSB7QXJndW1lbnRzfEFycmF5PX0gYXJnc1xyXG4gICAgICogQHBhcmFtIHtPYmplY3Q9fSBvcHRzXHJcbiAgICAgKi9cclxuICBmdW5jdGlvbiBjY2FsbChpZGVudCwgcmV0dXJuVHlwZSwgYXJnVHlwZXMsIGFyZ3MsIG9wdHMpIHtcclxuICAgICAgLy8gRm9yIGZhc3QgbG9va3VwIG9mIGNvbnZlcnNpb24gZnVuY3Rpb25zXHJcbiAgICAgIHZhciB0b0MgPSB7XHJcbiAgICAgICAgJ3N0cmluZyc6IChzdHIpID0+IHtcclxuICAgICAgICAgIHZhciByZXQgPSAwO1xyXG4gICAgICAgICAgaWYgKHN0ciAhPT0gbnVsbCAmJiBzdHIgIT09IHVuZGVmaW5lZCAmJiBzdHIgIT09IDApIHsgLy8gbnVsbCBzdHJpbmdcclxuICAgICAgICAgICAgLy8gYXQgbW9zdCA0IGJ5dGVzIHBlciBVVEYtOCBjb2RlIHBvaW50LCArMSBmb3IgdGhlIHRyYWlsaW5nICdcXDAnXHJcbiAgICAgICAgICAgIHJldCA9IHN0cmluZ1RvVVRGOE9uU3RhY2soc3RyKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiByZXQ7XHJcbiAgICAgICAgfSxcclxuICAgICAgICAnYXJyYXknOiAoYXJyKSA9PiB7XHJcbiAgICAgICAgICB2YXIgcmV0ID0gc3RhY2tBbGxvYyhhcnIubGVuZ3RoKTtcclxuICAgICAgICAgIHdyaXRlQXJyYXlUb01lbW9yeShhcnIsIHJldCk7XHJcbiAgICAgICAgICByZXR1cm4gcmV0O1xyXG4gICAgICAgIH1cclxuICAgICAgfTtcclxuICBcclxuICAgICAgZnVuY3Rpb24gY29udmVydFJldHVyblZhbHVlKHJldCkge1xyXG4gICAgICAgIGlmIChyZXR1cm5UeXBlID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgXHJcbiAgICAgICAgICByZXR1cm4gVVRGOFRvU3RyaW5nKHJldCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChyZXR1cm5UeXBlID09PSAnYm9vbGVhbicpIHJldHVybiBCb29sZWFuKHJldCk7XHJcbiAgICAgICAgcmV0dXJuIHJldDtcclxuICAgICAgfVxyXG4gIFxyXG4gICAgICB2YXIgZnVuYyA9IGdldENGdW5jKGlkZW50KTtcclxuICAgICAgdmFyIGNBcmdzID0gW107XHJcbiAgICAgIHZhciBzdGFjayA9IDA7XHJcbiAgICAgIGlmIChhcmdzKSB7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmdzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICB2YXIgY29udmVydGVyID0gdG9DW2FyZ1R5cGVzW2ldXTtcclxuICAgICAgICAgIGlmIChjb252ZXJ0ZXIpIHtcclxuICAgICAgICAgICAgaWYgKHN0YWNrID09PSAwKSBzdGFjayA9IHN0YWNrU2F2ZSgpO1xyXG4gICAgICAgICAgICBjQXJnc1tpXSA9IGNvbnZlcnRlcihhcmdzW2ldKTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGNBcmdzW2ldID0gYXJnc1tpXTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgdmFyIHJldCA9IGZ1bmMuYXBwbHkobnVsbCwgY0FyZ3MpO1xyXG4gICAgICBmdW5jdGlvbiBvbkRvbmUocmV0KSB7XHJcbiAgICAgICAgaWYgKHN0YWNrICE9PSAwKSBzdGFja1Jlc3RvcmUoc3RhY2spO1xyXG4gICAgICAgIHJldHVybiBjb252ZXJ0UmV0dXJuVmFsdWUocmV0KTtcclxuICAgICAgfVxyXG4gIFxyXG4gICAgICByZXQgPSBvbkRvbmUocmV0KTtcclxuICAgICAgcmV0dXJuIHJldDtcclxuICAgIH1cclxuICBcclxuICAgIC8qKlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmc9fSByZXR1cm5UeXBlXHJcbiAgICAgKiBAcGFyYW0ge0FycmF5PX0gYXJnVHlwZXNcclxuICAgICAqIEBwYXJhbSB7T2JqZWN0PX0gb3B0c1xyXG4gICAgICovXHJcbiAgZnVuY3Rpb24gY3dyYXAoaWRlbnQsIHJldHVyblR5cGUsIGFyZ1R5cGVzLCBvcHRzKSB7XHJcbiAgICAgIC8vIFdoZW4gdGhlIGZ1bmN0aW9uIHRha2VzIG51bWJlcnMgYW5kIHJldHVybnMgYSBudW1iZXIsIHdlIGNhbiBqdXN0IHJldHVyblxyXG4gICAgICAvLyB0aGUgb3JpZ2luYWwgZnVuY3Rpb25cclxuICAgICAgdmFyIG51bWVyaWNBcmdzID0gIWFyZ1R5cGVzIHx8IGFyZ1R5cGVzLmV2ZXJ5KCh0eXBlKSA9PiB0eXBlID09PSAnbnVtYmVyJyB8fCB0eXBlID09PSAnYm9vbGVhbicpO1xyXG4gICAgICB2YXIgbnVtZXJpY1JldCA9IHJldHVyblR5cGUgIT09ICdzdHJpbmcnO1xyXG4gICAgICBpZiAobnVtZXJpY1JldCAmJiBudW1lcmljQXJncyAmJiAhb3B0cykge1xyXG4gICAgICAgIHJldHVybiBnZXRDRnVuYyhpZGVudCk7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHJldHVybiBjY2FsbChpZGVudCwgcmV0dXJuVHlwZSwgYXJnVHlwZXMsIGFyZ3VtZW50cywgb3B0cyk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbnZhciB3YXNtSW1wb3J0cyA9IHtcclxuICBcIl9fY3hhX3Rocm93XCI6IF9fX2N4YV90aHJvdyxcclxuICBcImFib3J0XCI6IF9hYm9ydCxcclxuICBcImVtc2NyaXB0ZW5fbWVtY3B5X2JpZ1wiOiBfZW1zY3JpcHRlbl9tZW1jcHlfYmlnLFxyXG4gIFwiZW1zY3JpcHRlbl9yZXNpemVfaGVhcFwiOiBfZW1zY3JpcHRlbl9yZXNpemVfaGVhcFxyXG59O1xyXG52YXIgYXNtID0gY3JlYXRlV2FzbSgpO1xyXG4vKiogQHR5cGUge2Z1bmN0aW9uKC4uLiopOj99ICovXHJcbnZhciBfX193YXNtX2NhbGxfY3RvcnMgPSBmdW5jdGlvbigpIHtcclxuICByZXR1cm4gKF9fX3dhc21fY2FsbF9jdG9ycyA9IE1vZHVsZVtcImFzbVwiXVtcIl9fd2FzbV9jYWxsX2N0b3JzXCJdKS5hcHBseShudWxsLCBhcmd1bWVudHMpO1xyXG59O1xyXG5cclxuLyoqIEB0eXBlIHtmdW5jdGlvbiguLi4qKTo/fSAqL1xyXG52YXIgX2Ric2NhbiA9IE1vZHVsZVtcIl9kYnNjYW5cIl0gPSBmdW5jdGlvbigpIHtcclxuICByZXR1cm4gKF9kYnNjYW4gPSBNb2R1bGVbXCJfZGJzY2FuXCJdID0gTW9kdWxlW1wiYXNtXCJdW1wiZGJzY2FuXCJdKS5hcHBseShudWxsLCBhcmd1bWVudHMpO1xyXG59O1xyXG5cclxuLyoqIEB0eXBlIHtmdW5jdGlvbiguLi4qKTo/fSAqL1xyXG52YXIgX19fZXJybm9fbG9jYXRpb24gPSBmdW5jdGlvbigpIHtcclxuICByZXR1cm4gKF9fX2Vycm5vX2xvY2F0aW9uID0gTW9kdWxlW1wiYXNtXCJdW1wiX19lcnJub19sb2NhdGlvblwiXSkuYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcclxufTtcclxuXHJcbi8qKiBAdHlwZSB7ZnVuY3Rpb24oLi4uKik6P30gKi9cclxudmFyIF9tYWxsb2MgPSBNb2R1bGVbXCJfbWFsbG9jXCJdID0gZnVuY3Rpb24oKSB7XHJcbiAgcmV0dXJuIChfbWFsbG9jID0gTW9kdWxlW1wiX21hbGxvY1wiXSA9IE1vZHVsZVtcImFzbVwiXVtcIm1hbGxvY1wiXSkuYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcclxufTtcclxuXHJcbi8qKiBAdHlwZSB7ZnVuY3Rpb24oLi4uKik6P30gKi9cclxudmFyIF9mcmVlID0gTW9kdWxlW1wiX2ZyZWVcIl0gPSBmdW5jdGlvbigpIHtcclxuICByZXR1cm4gKF9mcmVlID0gTW9kdWxlW1wiX2ZyZWVcIl0gPSBNb2R1bGVbXCJhc21cIl1bXCJmcmVlXCJdKS5hcHBseShudWxsLCBhcmd1bWVudHMpO1xyXG59O1xyXG5cclxuLyoqIEB0eXBlIHtmdW5jdGlvbiguLi4qKTo/fSAqL1xyXG52YXIgc3RhY2tTYXZlID0gZnVuY3Rpb24oKSB7XHJcbiAgcmV0dXJuIChzdGFja1NhdmUgPSBNb2R1bGVbXCJhc21cIl1bXCJzdGFja1NhdmVcIl0pLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XHJcbn07XHJcblxyXG4vKiogQHR5cGUge2Z1bmN0aW9uKC4uLiopOj99ICovXHJcbnZhciBzdGFja1Jlc3RvcmUgPSBmdW5jdGlvbigpIHtcclxuICByZXR1cm4gKHN0YWNrUmVzdG9yZSA9IE1vZHVsZVtcImFzbVwiXVtcInN0YWNrUmVzdG9yZVwiXSkuYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcclxufTtcclxuXHJcbi8qKiBAdHlwZSB7ZnVuY3Rpb24oLi4uKik6P30gKi9cclxudmFyIHN0YWNrQWxsb2MgPSBmdW5jdGlvbigpIHtcclxuICByZXR1cm4gKHN0YWNrQWxsb2MgPSBNb2R1bGVbXCJhc21cIl1bXCJzdGFja0FsbG9jXCJdKS5hcHBseShudWxsLCBhcmd1bWVudHMpO1xyXG59O1xyXG5cclxuLyoqIEB0eXBlIHtmdW5jdGlvbiguLi4qKTo/fSAqL1xyXG52YXIgX19fY3hhX2lzX3BvaW50ZXJfdHlwZSA9IGZ1bmN0aW9uKCkge1xyXG4gIHJldHVybiAoX19fY3hhX2lzX3BvaW50ZXJfdHlwZSA9IE1vZHVsZVtcImFzbVwiXVtcIl9fY3hhX2lzX3BvaW50ZXJfdHlwZVwiXSkuYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcclxufTtcclxuXHJcblxyXG5cclxuLy8gaW5jbHVkZTogcG9zdGFtYmxlLmpzXHJcbi8vID09PSBBdXRvLWdlbmVyYXRlZCBwb3N0YW1ibGUgc2V0dXAgZW50cnkgc3R1ZmYgPT09XHJcblxyXG5Nb2R1bGVbXCJjY2FsbFwiXSA9IGNjYWxsO1xyXG5Nb2R1bGVbXCJjd3JhcFwiXSA9IGN3cmFwO1xyXG5cclxuXHJcbnZhciBjYWxsZWRSdW47XHJcblxyXG5kZXBlbmRlbmNpZXNGdWxmaWxsZWQgPSBmdW5jdGlvbiBydW5DYWxsZXIoKSB7XHJcbiAgLy8gSWYgcnVuIGhhcyBuZXZlciBiZWVuIGNhbGxlZCwgYW5kIHdlIHNob3VsZCBjYWxsIHJ1biAoSU5WT0tFX1JVTiBpcyB0cnVlLCBhbmQgTW9kdWxlLm5vSW5pdGlhbFJ1biBpcyBub3QgZmFsc2UpXHJcbiAgaWYgKCFjYWxsZWRSdW4pIHJ1bigpO1xyXG4gIGlmICghY2FsbGVkUnVuKSBkZXBlbmRlbmNpZXNGdWxmaWxsZWQgPSBydW5DYWxsZXI7IC8vIHRyeSB0aGlzIGFnYWluIGxhdGVyLCBhZnRlciBuZXcgZGVwcyBhcmUgZnVsZmlsbGVkXHJcbn07XHJcblxyXG5mdW5jdGlvbiBydW4oKSB7XHJcblxyXG4gIGlmIChydW5EZXBlbmRlbmNpZXMgPiAwKSB7XHJcbiAgICByZXR1cm47XHJcbiAgfVxyXG5cclxuICBwcmVSdW4oKTtcclxuXHJcbiAgLy8gYSBwcmVSdW4gYWRkZWQgYSBkZXBlbmRlbmN5LCBydW4gd2lsbCBiZSBjYWxsZWQgbGF0ZXJcclxuICBpZiAocnVuRGVwZW5kZW5jaWVzID4gMCkge1xyXG4gICAgcmV0dXJuO1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gZG9SdW4oKSB7XHJcbiAgICAvLyBydW4gbWF5IGhhdmUganVzdCBiZWVuIGNhbGxlZCB0aHJvdWdoIGRlcGVuZGVuY2llcyBiZWluZyBmdWxmaWxsZWQganVzdCBpbiB0aGlzIHZlcnkgZnJhbWUsXHJcbiAgICAvLyBvciB3aGlsZSB0aGUgYXN5bmMgc2V0U3RhdHVzIHRpbWUgYmVsb3cgd2FzIGhhcHBlbmluZ1xyXG4gICAgaWYgKGNhbGxlZFJ1bikgcmV0dXJuO1xyXG4gICAgY2FsbGVkUnVuID0gdHJ1ZTtcclxuICAgIE1vZHVsZVsnY2FsbGVkUnVuJ10gPSB0cnVlO1xyXG5cclxuICAgIGlmIChBQk9SVCkgcmV0dXJuO1xyXG5cclxuICAgIGluaXRSdW50aW1lKCk7XHJcblxyXG4gICAgcmVhZHlQcm9taXNlUmVzb2x2ZShNb2R1bGUpO1xyXG4gICAgaWYgKE1vZHVsZVsnb25SdW50aW1lSW5pdGlhbGl6ZWQnXSkgTW9kdWxlWydvblJ1bnRpbWVJbml0aWFsaXplZCddKCk7XHJcblxyXG4gICAgcG9zdFJ1bigpO1xyXG4gIH1cclxuXHJcbiAgaWYgKE1vZHVsZVsnc2V0U3RhdHVzJ10pIHtcclxuICAgIE1vZHVsZVsnc2V0U3RhdHVzJ10oJ1J1bm5pbmcuLi4nKTtcclxuICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XHJcbiAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgTW9kdWxlWydzZXRTdGF0dXMnXSgnJyk7XHJcbiAgICAgIH0sIDEpO1xyXG4gICAgICBkb1J1bigpO1xyXG4gICAgfSwgMSk7XHJcbiAgfSBlbHNlXHJcbiAge1xyXG4gICAgZG9SdW4oKTtcclxuICB9XHJcbn1cclxuXHJcbmlmIChNb2R1bGVbJ3ByZUluaXQnXSkge1xyXG4gIGlmICh0eXBlb2YgTW9kdWxlWydwcmVJbml0J10gPT0gJ2Z1bmN0aW9uJykgTW9kdWxlWydwcmVJbml0J10gPSBbTW9kdWxlWydwcmVJbml0J11dO1xyXG4gIHdoaWxlIChNb2R1bGVbJ3ByZUluaXQnXS5sZW5ndGggPiAwKSB7XHJcbiAgICBNb2R1bGVbJ3ByZUluaXQnXS5wb3AoKSgpO1xyXG4gIH1cclxufVxyXG5cclxucnVuKCk7XHJcblxyXG5cclxuLy8gZW5kIGluY2x1ZGU6IHBvc3RhbWJsZS5qc1xyXG5cclxuXHJcbiAgcmV0dXJuIGV4cG9ydENwcERic2NhbkxpYi5yZWFkeVxyXG59XHJcblxyXG4pO1xyXG59KSgpO1xyXG5pZiAodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgPT09ICdvYmplY3QnKVxyXG4gIG1vZHVsZS5leHBvcnRzID0gZXhwb3J0Q3BwRGJzY2FuTGliO1xyXG5lbHNlIGlmICh0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZVsnYW1kJ10pXHJcbiAgZGVmaW5lKFtdLCBmdW5jdGlvbigpIHsgcmV0dXJuIGV4cG9ydENwcERic2NhbkxpYjsgfSk7XHJcbmVsc2UgaWYgKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JylcclxuICBleHBvcnRzW1wiZXhwb3J0Q3BwRGJzY2FuTGliXCJdID0gZXhwb3J0Q3BwRGJzY2FuTGliO1xyXG4iLCIvLyBUaGUgbW9kdWxlIGNhY2hlXG52YXIgX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fID0ge307XG5cbi8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG5mdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuXHR2YXIgY2FjaGVkTW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXTtcblx0aWYgKGNhY2hlZE1vZHVsZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0cmV0dXJuIGNhY2hlZE1vZHVsZS5leHBvcnRzO1xuXHR9XG5cdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG5cdHZhciBtb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdID0ge1xuXHRcdGlkOiBtb2R1bGVJZCxcblx0XHRsb2FkZWQ6IGZhbHNlLFxuXHRcdGV4cG9ydHM6IHt9XG5cdH07XG5cblx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG5cdF9fd2VicGFja19tb2R1bGVzX19bbW9kdWxlSWRdKG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG5cdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcblx0bW9kdWxlLmxvYWRlZCA9IHRydWU7XG5cblx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcblx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xufVxuXG4vLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuX193ZWJwYWNrX3JlcXVpcmVfXy5tID0gX193ZWJwYWNrX21vZHVsZXNfXztcblxuIiwiX193ZWJwYWNrX3JlcXVpcmVfXy5hbWRPID0ge307IiwiLy8gZGVmaW5lIGdldHRlciBmdW5jdGlvbnMgZm9yIGhhcm1vbnkgZXhwb3J0c1xuX193ZWJwYWNrX3JlcXVpcmVfXy5kID0gKGV4cG9ydHMsIGRlZmluaXRpb24pID0+IHtcblx0Zm9yKHZhciBrZXkgaW4gZGVmaW5pdGlvbikge1xuXHRcdGlmKF9fd2VicGFja19yZXF1aXJlX18ubyhkZWZpbml0aW9uLCBrZXkpICYmICFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywga2V5KSkge1xuXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIGtleSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGRlZmluaXRpb25ba2V5XSB9KTtcblx0XHR9XG5cdH1cbn07IiwiX193ZWJwYWNrX3JlcXVpcmVfXy5nID0gKGZ1bmN0aW9uKCkge1xuXHRpZiAodHlwZW9mIGdsb2JhbFRoaXMgPT09ICdvYmplY3QnKSByZXR1cm4gZ2xvYmFsVGhpcztcblx0dHJ5IHtcblx0XHRyZXR1cm4gdGhpcyB8fCBuZXcgRnVuY3Rpb24oJ3JldHVybiB0aGlzJykoKTtcblx0fSBjYXRjaCAoZSkge1xuXHRcdGlmICh0eXBlb2Ygd2luZG93ID09PSAnb2JqZWN0JykgcmV0dXJuIHdpbmRvdztcblx0fVxufSkoKTsiLCJfX3dlYnBhY2tfcmVxdWlyZV9fLmhtZCA9IChtb2R1bGUpID0+IHtcblx0bW9kdWxlID0gT2JqZWN0LmNyZWF0ZShtb2R1bGUpO1xuXHRpZiAoIW1vZHVsZS5jaGlsZHJlbikgbW9kdWxlLmNoaWxkcmVuID0gW107XG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShtb2R1bGUsICdleHBvcnRzJywge1xuXHRcdGVudW1lcmFibGU6IHRydWUsXG5cdFx0c2V0OiAoKSA9PiB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoJ0VTIE1vZHVsZXMgbWF5IG5vdCBhc3NpZ24gbW9kdWxlLmV4cG9ydHMgb3IgZXhwb3J0cy4qLCBVc2UgRVNNIGV4cG9ydCBzeW50YXgsIGluc3RlYWQ6ICcgKyBtb2R1bGUuaWQpO1xuXHRcdH1cblx0fSk7XG5cdHJldHVybiBtb2R1bGU7XG59OyIsIl9fd2VicGFja19yZXF1aXJlX18ubyA9IChvYmosIHByb3ApID0+IChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBwcm9wKSkiLCJ2YXIgc2NyaXB0VXJsO1xuaWYgKF9fd2VicGFja19yZXF1aXJlX18uZy5pbXBvcnRTY3JpcHRzKSBzY3JpcHRVcmwgPSBfX3dlYnBhY2tfcmVxdWlyZV9fLmcubG9jYXRpb24gKyBcIlwiO1xudmFyIGRvY3VtZW50ID0gX193ZWJwYWNrX3JlcXVpcmVfXy5nLmRvY3VtZW50O1xuaWYgKCFzY3JpcHRVcmwgJiYgZG9jdW1lbnQpIHtcblx0aWYgKGRvY3VtZW50LmN1cnJlbnRTY3JpcHQpXG5cdFx0c2NyaXB0VXJsID0gZG9jdW1lbnQuY3VycmVudFNjcmlwdC5zcmM7XG5cdGlmICghc2NyaXB0VXJsKSB7XG5cdFx0dmFyIHNjcmlwdHMgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZShcInNjcmlwdFwiKTtcblx0XHRpZihzY3JpcHRzLmxlbmd0aCkge1xuXHRcdFx0dmFyIGkgPSBzY3JpcHRzLmxlbmd0aCAtIDE7XG5cdFx0XHR3aGlsZSAoaSA+IC0xICYmICghc2NyaXB0VXJsIHx8ICEvXmh0dHAocz8pOi8udGVzdChzY3JpcHRVcmwpKSkgc2NyaXB0VXJsID0gc2NyaXB0c1tpLS1dLnNyYztcblx0XHR9XG5cdH1cbn1cbi8vIFdoZW4gc3VwcG9ydGluZyBicm93c2VycyB3aGVyZSBhbiBhdXRvbWF0aWMgcHVibGljUGF0aCBpcyBub3Qgc3VwcG9ydGVkIHlvdSBtdXN0IHNwZWNpZnkgYW4gb3V0cHV0LnB1YmxpY1BhdGggbWFudWFsbHkgdmlhIGNvbmZpZ3VyYXRpb25cbi8vIG9yIHBhc3MgYW4gZW1wdHkgc3RyaW5nIChcIlwiKSBhbmQgc2V0IHRoZSBfX3dlYnBhY2tfcHVibGljX3BhdGhfXyB2YXJpYWJsZSBmcm9tIHlvdXIgY29kZSB0byB1c2UgeW91ciBvd24gbG9naWMuXG5pZiAoIXNjcmlwdFVybCkgdGhyb3cgbmV3IEVycm9yKFwiQXV0b21hdGljIHB1YmxpY1BhdGggaXMgbm90IHN1cHBvcnRlZCBpbiB0aGlzIGJyb3dzZXJcIik7XG5zY3JpcHRVcmwgPSBzY3JpcHRVcmwucmVwbGFjZSgvIy4qJC8sIFwiXCIpLnJlcGxhY2UoL1xcPy4qJC8sIFwiXCIpLnJlcGxhY2UoL1xcL1teXFwvXSskLywgXCIvXCIpO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5wID0gc2NyaXB0VXJsOyIsIl9fd2VicGFja19yZXF1aXJlX18uYiA9IHNlbGYubG9jYXRpb24gKyBcIlwiO1xuXG4vLyBvYmplY3QgdG8gc3RvcmUgbG9hZGVkIGNodW5rc1xuLy8gXCIxXCIgbWVhbnMgXCJhbHJlYWR5IGxvYWRlZFwiXG52YXIgaW5zdGFsbGVkQ2h1bmtzID0ge1xuXHQ2ODI6IDFcbn07XG5cbi8vIG5vIGNodW5rIGluc3RhbGwgZnVuY3Rpb24gbmVlZGVkXG4vLyBubyBjaHVuayBsb2FkaW5nXG5cbi8vIG5vIEhNUlxuXG4vLyBubyBITVIgbWFuaWZlc3QiLCJ2YXIgX19hd2FpdGVyID0gKHRoaXMgJiYgdGhpcy5fX2F3YWl0ZXIpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcbiAgICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xuICAgIH0pO1xufTtcbmltcG9ydCB7IGRic2NhbiB9IGZyb20gJy4vZGJzY2FuJztcbm9ubWVzc2FnZSA9IChldmVudCkgPT4ge1xuICAgIGNvbnN0IHsgZW1iZWRYLCBlbWJlZFksIGVwc2lsb24sIG1pblB0cyB9ID0gZXZlbnQuZGF0YTtcbiAgICBjb25zdCBkYXRhID0ge307XG4gICAgKCgpID0+IF9fYXdhaXRlcih2b2lkIDAsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgY2x1c3RlcnMgPSB5aWVsZCBkYnNjYW4oZW1iZWRYLCBlbWJlZFksIGVwc2lsb24sIG1pblB0cyk7XG4gICAgICAgICAgICBkYXRhLmNsdXN0ZXJzID0gY2x1c3RlcnM7XG4gICAgICAgICAgICBwb3N0TWVzc2FnZShkYXRhKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgZGF0YS5lcnJvciA9IGU7XG4gICAgICAgICAgICBwb3N0TWVzc2FnZShkYXRhKTtcbiAgICAgICAgfVxuICAgIH0pKSgpO1xufTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNsdXN0ZXJpbmctd29ya2VyLmpzLm1hcCIsImltcG9ydCB7IGV4cG9ydENwcERic2NhbkxpYiB9IGZyb20gXCIuL3dhc21EYnNjYW4uanNcIjtcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGRic2NhbihlbWJlZFgsIGVtYmVkWSwgZXBzaWxvbiwgbWluUHRzKSB7XG4gICAgY29uc3Qgd2FzbVVybCA9IG5ldyBVUkwoJy4vd2FzbURic2Nhbi53YXNtJywgaW1wb3J0Lm1ldGEudXJsKS5ocmVmO1xuICAgIGNvbnN0IHdhc21QYXRoID0gd2FzbVVybC5zdWJzdHJpbmcoMCwgd2FzbVVybC5sYXN0SW5kZXhPZignLycpICsgMSkgKyAnd2FzbURic2Nhbi53YXNtJztcbiAgICBsZXQgd2FzbUluc3RhbmNlO1xuICAgIHRyeSB7XG4gICAgICAgIHdhc21JbnN0YW5jZSA9IGF3YWl0IGV4cG9ydENwcERic2NhbkxpYih7bG9jYXRlRmlsZTogKCkgPT4gd2FzbVVybCwgcHJpbnRFcnI6IChfKSA9PiB7fX0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHdhc21JbnN0YW5jZSA9IGF3YWl0IGV4cG9ydENwcERic2NhbkxpYih7bG9jYXRlRmlsZTogKCkgPT4gd2FzbVBhdGgsIHByaW50RXJyOiAoXykgPT4ge319KTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihlKTtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVW5hYmxlIHRvIGxvYWQgd2FzbSBmaWxlIGZvciBkYnNjYW4nKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBnZXREYnNjYW5XYXNtID1cbiAgICB3YXNtSW5zdGFuY2UuY3dyYXAoJ2Ric2NhbicsICdudWxsJywgWydudW1iZXInLCAnbnVtYmVyJywgJ251bWJlcicsICdudW1iZXInLCAnbnVtYmVyJywgJ251bWJlciddKTtcbiAgICBjb25zdCBieXRlc0ZvckVtYmVkWCA9IEZsb2F0MzJBcnJheS5CWVRFU19QRVJfRUxFTUVOVCAqIGVtYmVkWC5sZW5ndGg7XG4gICAgY29uc3QgZGF0YVB0clggPSB3YXNtSW5zdGFuY2UuX21hbGxvYyhieXRlc0ZvckVtYmVkWCk7IC8vIGFsbG9jYXRlIGEgbWVtb3J5IGJsb2NrIG9uIHRoZSB3YXNtIGhlYXAgZm9yIHRoZSBlbWJlZFhcbiAgICBjb25zdCBkYXRhUHRyWSA9IHdhc21JbnN0YW5jZS5fbWFsbG9jKGJ5dGVzRm9yRW1iZWRYKTsgLy8gYWxsb2NhdGUgYSBtZW1vcnkgYmxvY2sgb24gdGhlIHdhc20gaGVhcCBmb3IgdGhlIGVtYmVkWVxuICAgIGNvbnN0IHhIZWFwID0gbmV3IFVpbnQ4QXJyYXkod2FzbUluc3RhbmNlLkhFQVBVOC5idWZmZXIsIGRhdGFQdHJYLCBieXRlc0ZvckVtYmVkWCk7XG4gICAgeEhlYXAuc2V0KG5ldyBVaW50OEFycmF5KGVtYmVkWC5idWZmZXIpKTsgLy8gY29weSBlbWJlZFggdG8gdGhlIHdhc20gaGVhcFxuICAgIGNvbnN0IHlIZWFwID0gbmV3IFVpbnQ4QXJyYXkod2FzbUluc3RhbmNlLkhFQVBVOC5idWZmZXIsIGRhdGFQdHJZLCBieXRlc0ZvckVtYmVkWCk7XG4gICAgeUhlYXAuc2V0KG5ldyBVaW50OEFycmF5KGVtYmVkWS5idWZmZXIpKTsgLy8gY29weSBlbWJlZFkgdG8gdGhlIHdhc20gaGVhcFxuICAgIFxuICAgIGNvbnN0IGNsdXN0ZXJQdHIgPSB3YXNtSW5zdGFuY2UuX21hbGxvYyhieXRlc0ZvckVtYmVkWCk7XG4gICAgY29uc3QgY2x1c3RlckhlYXAgPSBuZXcgVWludDhBcnJheSh3YXNtSW5zdGFuY2UuSEVBUFU4LmJ1ZmZlciwgY2x1c3RlclB0ciwgYnl0ZXNGb3JFbWJlZFgpO1xuXG4gICAgZ2V0RGJzY2FuV2FzbShkYXRhUHRyWCwgZGF0YVB0clksIGVtYmVkWC5sZW5ndGgsIGVwc2lsb24sIG1pblB0cywgY2x1c3RlclB0cik7XG4gICAgY29uc3QgY2x1c3RlclJlc3VsdCA9IG5ldyBJbnQzMkFycmF5KGNsdXN0ZXJIZWFwLmJ1ZmZlciwgY2x1c3RlckhlYXAuYnl0ZU9mZnNldCwgZW1iZWRYLmxlbmd0aCk7XG4gICAgd2FzbUluc3RhbmNlLl9mcmVlKHhIZWFwLmJ5dGVPZmZzZXQpO1xuICAgIHdhc21JbnN0YW5jZS5fZnJlZSh5SGVhcC5ieXRlT2Zmc2V0KTtcbiAgICB3YXNtSW5zdGFuY2UuX2ZyZWUoY2x1c3RlckhlYXAuYnl0ZU9mZnNldCk7XG4gICAgcmV0dXJuIGNsdXN0ZXJSZXN1bHQ7XG59Il0sIm5hbWVzIjpbIl9zY3JpcHREaXIiLCJleHBvcnRDcHBEYnNjYW5MaWIiLCJkb2N1bWVudCIsImN1cnJlbnRTY3JpcHQiLCJzcmMiLCJ1bmRlZmluZWQiLCJyZWFkeVByb21pc2VSZXNvbHZlIiwicmVhZHlQcm9taXNlUmVqZWN0IiwiTW9kdWxlIiwiUHJvbWlzZSIsInJlc29sdmUiLCJyZWplY3QiLCJyZWFkQmluYXJ5IiwibW9kdWxlT3ZlcnJpZGVzIiwiT2JqZWN0IiwiYXNzaWduIiwiRU5WSVJPTk1FTlRfSVNfV0VCIiwid2luZG93IiwiRU5WSVJPTk1FTlRfSVNfV09SS0VSIiwiaW1wb3J0U2NyaXB0cyIsInNjcmlwdERpcmVjdG9yeSIsInByb2Nlc3MiLCJ2ZXJzaW9ucyIsIm5vZGUiLCJzZWxmIiwibG9jYXRpb24iLCJocmVmIiwiaW5kZXhPZiIsInN1YnN0ciIsInJlcGxhY2UiLCJsYXN0SW5kZXhPZiIsInVybCIsInhociIsIlhNTEh0dHBSZXF1ZXN0Iiwib3BlbiIsInJlc3BvbnNlVHlwZSIsInNlbmQiLCJVaW50OEFycmF5IiwiY29uc29sZSIsImxvZyIsImJpbmQiLCJ3YXNtQmluYXJ5Iiwid2FzbU1lbW9yeSIsImVyciIsIndhcm4iLCJXZWJBc3NlbWJseSIsImFib3J0IiwiSEVBUDgiLCJIRUFQVTgiLCJIRUFQVTMyIiwiQUJPUlQiLCJ1cGRhdGVNZW1vcnlWaWV3cyIsImIiLCJidWZmZXIiLCJJbnQ4QXJyYXkiLCJJbnQxNkFycmF5IiwiSW50MzJBcnJheSIsIlVpbnQxNkFycmF5IiwiVWludDMyQXJyYXkiLCJGbG9hdDMyQXJyYXkiLCJGbG9hdDY0QXJyYXkiLCJfX0FUUFJFUlVOX18iLCJfX0FUSU5JVF9fIiwiX19BVFBPU1RSVU5fXyIsInJ1bkRlcGVuZGVuY2llcyIsInJ1bkRlcGVuZGVuY3lXYXRjaGVyIiwiZGVwZW5kZW5jaWVzRnVsZmlsbGVkIiwid2hhdCIsImUiLCJSdW50aW1lRXJyb3IiLCJ3YXNtQmluYXJ5RmlsZSIsInBhdGgiLCJpc0RhdGFVUkkiLCJmaWxlbmFtZSIsInN0YXJ0c1dpdGgiLCJnZXRCaW5hcnkiLCJmaWxlIiwiaW5zdGFudGlhdGVBcnJheUJ1ZmZlciIsImJpbmFyeUZpbGUiLCJpbXBvcnRzIiwicmVjZWl2ZXIiLCJmZXRjaCIsInRoZW4iLCJjcmVkZW50aWFscyIsInJlc3BvbnNlIiwiY2F0Y2giLCJnZXRCaW5hcnlQcm9taXNlIiwiYmluYXJ5IiwiaW5zdGFudGlhdGUiLCJpbnN0YW5jZSIsInJlYXNvbiIsImNhbGxSdW50aW1lQ2FsbGJhY2tzIiwiY2FsbGJhY2tzIiwibGVuZ3RoIiwic2hpZnQiLCJFeGNlcHRpb25JbmZvIiwiZXhjUHRyIiwidGhpcyIsInB0ciIsInNldF90eXBlIiwidHlwZSIsImdldF90eXBlIiwic2V0X2Rlc3RydWN0b3IiLCJkZXN0cnVjdG9yIiwiZ2V0X2Rlc3RydWN0b3IiLCJzZXRfY2F1Z2h0IiwiY2F1Z2h0IiwiZ2V0X2NhdWdodCIsInNldF9yZXRocm93biIsInJldGhyb3duIiwiZ2V0X3JldGhyb3duIiwiaW5pdCIsInNldF9hZGp1c3RlZF9wdHIiLCJhZGp1c3RlZFB0ciIsImdldF9hZGp1c3RlZF9wdHIiLCJnZXRfZXhjZXB0aW9uX3B0ciIsIl9fX2N4YV9pc19wb2ludGVyX3R5cGUiLCJhZGp1c3RlZCIsImVtc2NyaXB0ZW5fcmVhbGxvY19idWZmZXIiLCJzaXplIiwiZ3JvdyIsImJ5dGVMZW5ndGgiLCJnZXRDRnVuYyIsImlkZW50IiwiVVRGOERlY29kZXIiLCJUZXh0RGVjb2RlciIsImNjYWxsIiwicmV0dXJuVHlwZSIsImFyZ1R5cGVzIiwiYXJncyIsIm9wdHMiLCJ0b0MiLCJzdHIiLCJyZXQiLCJsZW4iLCJpIiwiYyIsImNoYXJDb2RlQXQiLCJsZW5ndGhCeXRlc1VURjgiLCJzdGFja0FsbG9jIiwib3V0UHRyIiwibWF4Qnl0ZXNUb1dyaXRlIiwiaGVhcCIsIm91dElkeCIsImVuZElkeCIsInUiLCJzdHJpbmdUb1VURjhBcnJheSIsInN0cmluZ1RvVVRGOCIsInN0cmluZ1RvVVRGOE9uU3RhY2siLCJhcnIiLCJhcnJheSIsInNldCIsImZ1bmMiLCJjQXJncyIsInN0YWNrIiwiY29udmVydGVyIiwic3RhY2tTYXZlIiwiYXBwbHkiLCJzdGFja1Jlc3RvcmUiLCJoZWFwT3JBcnJheSIsImlkeCIsIm1heEJ5dGVzVG9SZWFkIiwiZW5kUHRyIiwiZGVjb2RlIiwic3ViYXJyYXkiLCJ1MCIsInUxIiwidTIiLCJTdHJpbmciLCJmcm9tQ2hhckNvZGUiLCJjaCIsIlVURjhBcnJheVRvU3RyaW5nIiwiQm9vbGVhbiIsImNvbnZlcnRSZXR1cm5WYWx1ZSIsIm9uRG9uZSIsImNhbGxlZFJ1biIsIndhc21JbXBvcnRzIiwiZGVzdCIsIm51bSIsImNvcHlXaXRoaW4iLCJyZXF1ZXN0ZWRTaXplIiwieCIsIm9sZFNpemUiLCJtYXhIZWFwU2l6ZSIsImN1dERvd24iLCJvdmVyR3Jvd25IZWFwU2l6ZSIsIk1hdGgiLCJtaW4iLCJtYXgiLCJjYWxsYmFjayIsImluZm8iLCJyZWNlaXZlSW5zdGFuY2UiLCJtb2R1bGUiLCJjYiIsImV4cG9ydHMiLCJ1bnNoaWZ0IiwiaWQiLCJjbGVhckludGVydmFsIiwicmVtb3ZlUnVuRGVwZW5kZW5jeSIsInJlc3VsdCIsImluc3RhbnRpYXRlU3RyZWFtaW5nIiwiY3JlYXRlV2FzbSIsImFyZ3VtZW50cyIsInJ1biIsImRvUnVuIiwicG9zdFJ1biIsInByZVJ1biIsInNldFRpbWVvdXQiLCJudW1lcmljQXJncyIsImV2ZXJ5IiwicnVuQ2FsbGVyIiwicG9wIiwicmVhZHkiLCJkZWZpbmUiLCJfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX18iLCJfX3dlYnBhY2tfcmVxdWlyZV9fIiwibW9kdWxlSWQiLCJjYWNoZWRNb2R1bGUiLCJsb2FkZWQiLCJfX3dlYnBhY2tfbW9kdWxlc19fIiwibSIsImFtZE8iLCJkIiwiZGVmaW5pdGlvbiIsImtleSIsIm8iLCJkZWZpbmVQcm9wZXJ0eSIsImVudW1lcmFibGUiLCJnZXQiLCJnIiwiZ2xvYmFsVGhpcyIsIkZ1bmN0aW9uIiwiaG1kIiwiY3JlYXRlIiwiY2hpbGRyZW4iLCJFcnJvciIsIm9iaiIsInByb3AiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJzY3JpcHRVcmwiLCJzY3JpcHRzIiwiZ2V0RWxlbWVudHNCeVRhZ05hbWUiLCJ0ZXN0IiwicCIsIm9ubWVzc2FnZSIsImV2ZW50IiwiZW1iZWRYIiwiZW1iZWRZIiwiZXBzaWxvbiIsIm1pblB0cyIsImRhdGEiLCJ0aGlzQXJnIiwiX2FyZ3VtZW50cyIsIlAiLCJnZW5lcmF0b3IiLCJjbHVzdGVycyIsImFzeW5jIiwid2FzbVVybCIsIlVSTCIsIndhc21QYXRoIiwic3Vic3RyaW5nIiwid2FzbUluc3RhbmNlIiwibG9jYXRlRmlsZSIsInByaW50RXJyIiwiXyIsImVycm9yIiwiZ2V0RGJzY2FuV2FzbSIsImN3cmFwIiwiYnl0ZXNGb3JFbWJlZFgiLCJCWVRFU19QRVJfRUxFTUVOVCIsImRhdGFQdHJYIiwiX21hbGxvYyIsImRhdGFQdHJZIiwieEhlYXAiLCJ5SGVhcCIsImNsdXN0ZXJQdHIiLCJjbHVzdGVySGVhcCIsImNsdXN0ZXJSZXN1bHQiLCJieXRlT2Zmc2V0IiwiX2ZyZWUiLCJkYnNjYW4iLCJwb3N0TWVzc2FnZSIsImZ1bGZpbGxlZCIsInZhbHVlIiwic3RlcCIsIm5leHQiLCJyZWplY3RlZCIsImRvbmUiXSwic291cmNlUm9vdCI6IiJ9
package/dist/705.js ADDED
@@ -0,0 +1,2 @@
1
+ var peptides;(()=>{"use strict";var t={1096:(t,e,r)=>{r.d(e,{R:()=>i}),t=r.hmd(t);var n,i=(n="undefined"!=typeof document&&document.currentScript?document.currentScript.src:void 0,function(t={}){var e,r,i=void 0!==t?t:{};i.ready=new Promise((function(t,n){e=t,r=n}));var o,a=Object.assign({},i),s="object"==typeof window,u="function"==typeof importScripts,c=("object"==typeof process&&"object"==typeof process.versions&&process.versions.node,"");(s||u)&&(u?c=self.location.href:"undefined"!=typeof document&&document.currentScript&&(c=document.currentScript.src),n&&(c=n),c=0!==c.indexOf("blob:")?c.substr(0,c.replace(/[?#].*/,"").lastIndexOf("/")+1):"",u&&(o=t=>{var e=new XMLHttpRequest;return e.open("GET",t,!1),e.responseType="arraybuffer",e.send(null),new Uint8Array(e.response)})),i.print||console.log.bind(console);var f,l,p=i.printErr||console.warn.bind(console);Object.assign(i,a),a=null,i.arguments&&i.arguments,i.thisProgram&&i.thisProgram,i.quit&&i.quit,i.wasmBinary&&(f=i.wasmBinary),i.noExitRuntime,"object"!=typeof WebAssembly&&R("no native wasm support detected");var h,d,m,y=!1;function b(){var t=l.buffer;i.HEAP8=h=new Int8Array(t),i.HEAP16=new Int16Array(t),i.HEAP32=new Int32Array(t),i.HEAPU8=d=new Uint8Array(t),i.HEAPU16=new Uint16Array(t),i.HEAPU32=m=new Uint32Array(t),i.HEAPF32=new Float32Array(t),i.HEAPF64=new Float64Array(t)}var g=[],w=[],v=[],A=0,_=null,E=null;function R(t){i.onAbort&&i.onAbort(t),p(t="Aborted("+t+")"),y=!0,t+=". Build with -sASSERTIONS for more info.";var e=new WebAssembly.RuntimeError(t);throw r(e),e}var x,P;function S(t){return t.startsWith("data:application/octet-stream;base64,")}function j(t){try{if(t==x&&f)return new Uint8Array(f);if(o)return o(t);throw"both async and sync fetching of the wasm failed"}catch(t){R(t)}}function O(t,e,r){return function(t){return f||!s&&!u||"function"!=typeof fetch?Promise.resolve().then((function(){return j(t)})):fetch(t,{credentials:"same-origin"}).then((function(e){if(!e.ok)throw"failed to load wasm binary file at '"+t+"'";return e.arrayBuffer()})).catch((function(){return j(t)}))}(t).then((function(t){return WebAssembly.instantiate(t,e)})).then((function(t){return t})).then(r,(function(t){p("failed to asynchronously prepare wasm: "+t),R(t)}))}function U(t){for(;t.length>0;)t.shift()(i)}function I(t){this.excPtr=t,this.ptr=t-24,this.set_type=function(t){m[this.ptr+4>>2]=t},this.get_type=function(){return m[this.ptr+4>>2]},this.set_destructor=function(t){m[this.ptr+8>>2]=t},this.get_destructor=function(){return m[this.ptr+8>>2]},this.set_caught=function(t){t=t?1:0,h[this.ptr+12|0]=t},this.get_caught=function(){return 0!=h[this.ptr+12|0]},this.set_rethrown=function(t){t=t?1:0,h[this.ptr+13|0]=t},this.get_rethrown=function(){return 0!=h[this.ptr+13|0]},this.init=function(t,e){this.set_adjusted_ptr(0),this.set_type(t),this.set_destructor(e)},this.set_adjusted_ptr=function(t){m[this.ptr+16>>2]=t},this.get_adjusted_ptr=function(){return m[this.ptr+16>>2]},this.get_exception_ptr=function(){if(L(this.get_type()))return m[this.excPtr>>2];var t=this.get_adjusted_ptr();return 0!==t?t:this.excPtr}}function T(t){var e=l.buffer;try{return l.grow(t-e.byteLength+65535>>>16),b(),1}catch(t){}}function C(t){return i["_"+t]}S(x="wasmCluster.wasm")||(P=x,x=i.locateFile?i.locateFile(P,c):c+P);var M="undefined"!=typeof TextDecoder?new TextDecoder("utf8"):void 0;function F(t,e,r,n,i){var o={string:t=>{var e=0;return null!=t&&0!==t&&(e=function(t){var e=function(t){for(var e=0,r=0;r<t.length;++r){var n=t.charCodeAt(r);n<=127?e++:n<=2047?e+=2:n>=55296&&n<=57343?(e+=4,++r):e+=3}return e}(t)+1,r=k(e);return function(t,e,r){!function(t,e,r,n){if(!(n>0))return 0;for(var i=r+n-1,o=0;o<t.length;++o){var a=t.charCodeAt(o);if(a>=55296&&a<=57343&&(a=65536+((1023&a)<<10)|1023&t.charCodeAt(++o)),a<=127){if(r>=i)break;e[r++]=a}else if(a<=2047){if(r+1>=i)break;e[r++]=192|a>>6,e[r++]=128|63&a}else if(a<=65535){if(r+2>=i)break;e[r++]=224|a>>12,e[r++]=128|a>>6&63,e[r++]=128|63&a}else{if(r+3>=i)break;e[r++]=240|a>>18,e[r++]=128|a>>12&63,e[r++]=128|a>>6&63,e[r++]=128|63&a}}e[r]=0}(t,d,e,r)}(t,r,e),r}(t)),e},array:t=>{var e,r,n=k(t.length);return e=t,r=n,h.set(e,r),n}},a=C(t),s=[],u=0;if(n)for(var c=0;c<n.length;c++){var f=o[r[c]];f?(0===u&&(u=W()),s[c]=f(n[c])):s[c]=n[c]}var l=a.apply(null,s);return function(t){return 0!==u&&D(u),function(t){return"string"===e?(r=t)?function(t,e,r){for(var n=e+r,i=e;t[i]&&!(i>=n);)++i;if(i-e>16&&t.buffer&&M)return M.decode(t.subarray(e,i));for(var o="";e<i;){var a=t[e++];if(128&a){var s=63&t[e++];if(192!=(224&a)){var u=63&t[e++];if((a=224==(240&a)?(15&a)<<12|s<<6|u:(7&a)<<18|s<<12|u<<6|63&t[e++])<65536)o+=String.fromCharCode(a);else{var c=a-65536;o+=String.fromCharCode(55296|c>>10,56320|1023&c)}}else o+=String.fromCharCode((31&a)<<6|s)}else o+=String.fromCharCode(a)}return o}(d,r,n):"":"boolean"===e?Boolean(t):t;var r,n}(t)}(l)}var H,B={d:function(t,e,r){throw new I(t).init(e,r),t},a:function(){R("")},c:function(t,e,r){d.copyWithin(t,e,e+r)},b:function(t){var e,r=d.length,n=2147483648;if((t>>>=0)>n)return!1;for(var i=1;i<=4;i*=2){var o=r*(1+.2/i);if(o=Math.min(o,t+100663296),T(Math.min(n,(e=Math.max(t,o))+(65536-e%65536)%65536)))return!0}return!1}},W=(function(){var t,e,n,o,a={a:B};function s(t,e){var r,n=t.exports;return i.asm=n,l=i.asm.e,b(),i.asm.i,r=i.asm.f,w.unshift(r),function(t){if(A--,i.monitorRunDependencies&&i.monitorRunDependencies(A),0==A&&(null!==_&&(clearInterval(_),_=null),E)){var e=E;E=null,e()}}(),n}if(A++,i.monitorRunDependencies&&i.monitorRunDependencies(A),i.instantiateWasm)try{return i.instantiateWasm(a,s)}catch(t){p("Module.instantiateWasm callback failed with error: "+t),r(t)}(t=f,e=x,n=a,o=function(t){s(t.instance)},t||"function"!=typeof WebAssembly.instantiateStreaming||S(e)||"function"!=typeof fetch?O(e,n,o):fetch(e,{credentials:"same-origin"}).then((function(t){return WebAssembly.instantiateStreaming(t,n).then(o,(function(t){return p("wasm streaming compile failed: "+t),p("falling back to ArrayBuffer instantiation"),O(e,n,o)}))}))).catch(r)}(),i._getDendrogram=function(){return(i._getDendrogram=i.asm.g).apply(null,arguments)},i._free=function(){return(i._free=i.asm.h).apply(null,arguments)},i._malloc=function(){return(i._malloc=i.asm.j).apply(null,arguments)},function(){return(W=i.asm.k).apply(null,arguments)}),D=function(){return(D=i.asm.l).apply(null,arguments)},k=function(){return(k=i.asm.m).apply(null,arguments)},L=function(){return(L=i.asm.n).apply(null,arguments)};function N(){function t(){H||(H=!0,i.calledRun=!0,y||(U(w),e(i),i.onRuntimeInitialized&&i.onRuntimeInitialized(),function(){if(i.postRun)for("function"==typeof i.postRun&&(i.postRun=[i.postRun]);i.postRun.length;)t=i.postRun.shift(),v.unshift(t);var t;U(v)}()))}A>0||(function(){if(i.preRun)for("function"==typeof i.preRun&&(i.preRun=[i.preRun]);i.preRun.length;)t=i.preRun.shift(),g.unshift(t);var t;U(g)}(),A>0||(i.setStatus?(i.setStatus("Running..."),setTimeout((function(){setTimeout((function(){i.setStatus("")}),1),t()}),1)):t()))}if(i.ccall=F,i.cwrap=function(t,e,r,n){var i=!r||r.every((t=>"number"===t||"boolean"===t));return"string"!==e&&i&&!n?C(t):function(){return F(t,e,r,arguments)}},E=function t(){H||N(),H||(E=t)},i.preInit)for("function"==typeof i.preInit&&(i.preInit=[i.preInit]);i.preInit.length>0;)i.preInit.pop()();return N(),t.ready});"object"==typeof exports?t.exports=i:"function"==typeof define&&r.amdO?define([],(function(){return i})):"object"==typeof exports&&(exports.exportCppLib=i)},5024:(t,e,r)=>{t.exports=r.p+"8473fcbfb6e85ca6c852.wasm"}},e={};function r(n){var i=e[n];if(void 0!==i)return i.exports;var o=e[n]={id:n,loaded:!1,exports:{}};return t[n](o,o.exports,r),o.loaded=!0,o.exports}r.m=t,r.amdO={},r.d=(t,e)=>{for(var n in e)r.o(e,n)&&!r.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:e[n]})},r.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(t){if("object"==typeof window)return window}}(),r.hmd=t=>((t=Object.create(t)).children||(t.children=[]),Object.defineProperty(t,"exports",{enumerable:!0,set:()=>{throw new Error("ES Modules may not assign module.exports or exports.*, Use ESM export syntax, instead: "+t.id)}}),t),r.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),(()=>{var t;r.g.importScripts&&(t=r.g.location+"");var e=r.g.document;if(!t&&e&&(e.currentScript&&(t=e.currentScript.src),!t)){var n=e.getElementsByTagName("script");if(n.length)for(var i=n.length-1;i>-1&&(!t||!/^http(s?):/.test(t));)t=n[i--].src}if(!t)throw new Error("Automatic publicPath is not supported in this browser");t=t.replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/"),r.p=t})(),r.b=self.location+"";var n=r(1096);onmessage=t=>{const{distMatArray:e,n:i,methodCode:o}=t.data,a={};try{(async function(t,e,i){const o=new URL(r(5024),r.b).href,a=o.substring(0,o.lastIndexOf("/")+1)+"wasmCluster.wasm";let s;try{s=await(0,n.R)({locateFile:()=>a,printErr:t=>{}})}catch(t){try{s=await(0,n.R)({locateFile:()=>o,printErr:t=>{}})}catch(t){throw console.error(t),new Error("Unable to load wasm file for hierarchical clustering")}}const u=s.cwrap("getDendrogram","null",["number","number","number","number","number"]),c=Float32Array.BYTES_PER_ELEMENT*t.length,f=s._malloc(c),l=new Uint8Array(s.HEAPU8.buffer,f,c);l.set(new Uint8Array(t.buffer));const p=Int32Array.BYTES_PER_ELEMENT*(e-1)*2,h=s._malloc(p),d=new Uint8Array(s.HEAPU8.buffer,h,p),m=Float32Array.BYTES_PER_ELEMENT*(e-1),y=s._malloc(m),b=new Uint8Array(s.HEAPU8.buffer,y,m);u(f,e,i,h,y);const g=new Int32Array(d.buffer,d.byteOffset,2*(e-1)),w=new Float32Array(b.buffer,b.byteOffset,e-1).slice(0,e-1),v=g.slice(0,e-1),A=g.slice(e-1,2*e-2);return s._free(l.byteOffset),s._free(d.byteOffset),s._free(b.byteOffset),{mergeRow1:v,mergeRow2:A,heightsResult:w}})(e,i,o).then((t=>{a.clusterMatrix=t,postMessage(a)}))}catch(t){a.error=t,postMessage(a)}},peptides={}})();
2
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,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RUFBUXhILElBQUksSUFBSW5ILFdBQVcwTixFQUFRek0sU0FHbkMsTUFBTTJOLEVBQXFCeE4sV0FBV29OLG1CQUFxQmxCLEVBQUksR0FBSyxFQUM5RHVCLEVBQVdiLEVBQWFVLFFBQVFFLEdBQ2hDRSxFQUFZLElBQUk5TyxXQUFXZ08sRUFBYXBOLE9BQU9LLE9BQVE0TixFQUFVRCxHQUdqRUcsRUFBdUJ4TixhQUFhaU4sbUJBQXFCbEIsRUFBSSxHQUM3RDBCLEVBQWFoQixFQUFhVSxRQUFRSyxHQUNsQ0UsRUFBYyxJQUFJalAsV0FBV2dPLEVBQWFwTixPQUFPSyxPQUFRK04sRUFBWUQsR0FHM0VWLEVBQWtCSSxFQUFTbkIsRUFBR0ssRUFBUWtCLEVBQVVHLEdBRWhELE1BQU1FLEVBQWMsSUFBSTlOLFdBQVcwTixFQUFVN04sT0FBUTZOLEVBQVVLLFdBQW9CLEdBQVA3QixFQUFFLElBQ3hFOEIsRUFBZ0IsSUFBSzdOLGFBQWEwTixFQUFZaE8sT0FBUWdPLEVBQVlFLFdBQVk3QixFQUFFLEdBQUkrQixNQUFNLEVBQUcvQixFQUFFLEdBRS9GZ0MsRUFBWUosRUFBWUcsTUFBTSxFQUFHL0IsRUFBRSxHQUNuQ2lDLEVBQVlMLEVBQVlHLE1BQU0vQixFQUFFLEVBQUcsRUFBRUEsRUFBSSxHQUsvQyxPQUhBVSxFQUFhd0IsTUFBTWIsRUFBUVEsWUFDM0JuQixFQUFhd0IsTUFBTVYsRUFBVUssWUFDN0JuQixFQUFhd0IsTUFBTVAsRUFBWUUsWUFDeEIsQ0FBQ0csWUFBV0MsWUFBV0gsZ0JBQ2hDLEVEdERRSyxDQUEyQnBDLEVBQWNDLEVBQUdDLEdBQ3ZDekssTUFBTTRNLElBQ1BsQyxFQUFLa0MsY0FBZ0JBLEVBQ3JCQyxZQUFZbkMsRUFBSyxHQUV6QixDQUNBLE1BQU94TCxHQUNId0wsRUFBS1ksTUFBUXBNLEVBQ2IyTixZQUFZbkMsRUFDaEIsRyIsInNvdXJjZXMiOlsid2VicGFjazovL3BlcHRpZGVzLy4vbm9kZV9tb2R1bGVzL0BkYXRhZ3Jvay1saWJyYXJpZXMvbWF0aC9zcmMvaGllcmFyY2hpY2FsLWNsdXN0ZXJpbmcvd2FzbS93YXNtQ2x1c3Rlci5qcyIsIndlYnBhY2s6Ly9wZXB0aWRlcy93ZWJwYWNrL2Jvb3RzdHJhcCIsIndlYnBhY2s6Ly9wZXB0aWRlcy93ZWJwYWNrL3J1bnRpbWUvYW1kIG9wdGlvbnMiLCJ3ZWJwYWNrOi8vcGVwdGlkZXMvd2VicGFjay9ydW50aW1lL2RlZmluZSBwcm9wZXJ0eSBnZXR0ZXJzIiwid2VicGFjazovL3BlcHRpZGVzL3dlYnBhY2svcnVudGltZS9nbG9iYWwiLCJ3ZWJwYWNrOi8vcGVwdGlkZXMvd2VicGFjay9ydW50aW1lL2hhcm1vbnkgbW9kdWxlIGRlY29yYXRvciIsIndlYnBhY2s6Ly9wZXB0aWRlcy93ZWJwYWNrL3J1bnRpbWUvaGFzT3duUHJvcGVydHkgc2hvcnRoYW5kIiwid2VicGFjazovL3BlcHRpZGVzL3dlYnBhY2svcnVudGltZS9wdWJsaWNQYXRoIiwid2VicGFjazovL3BlcHRpZGVzL3dlYnBhY2svcnVudGltZS9pbXBvcnRTY3JpcHRzIGNodW5rIGxvYWRpbmciLCJ3ZWJwYWNrOi8vcGVwdGlkZXMvLi9ub2RlX21vZHVsZXMvQGRhdGFncm9rLWxpYnJhcmllcy9tYXRoL3NyYy9oaWVyYXJjaGljYWwtY2x1c3RlcmluZy93YXNtL2NsdXN0ZXJpbmctd29ya2VyLmpzIiwid2VicGFjazovL3BlcHRpZGVzLy4vbm9kZV9tb2R1bGVzL0BkYXRhZ3Jvay1saWJyYXJpZXMvbWF0aC9zcmMvaGllcmFyY2hpY2FsLWNsdXN0ZXJpbmcvd2FzbS9jbHVzdGVyaXplcldhc20uanMiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHZhciBleHBvcnRDcHBMaWIgPSAoKCkgPT4ge1xuICB2YXIgX3NjcmlwdERpciA9XG4gICAgdHlwZW9mIGRvY3VtZW50ICE9PSBcInVuZGVmaW5lZFwiICYmIGRvY3VtZW50LmN1cnJlbnRTY3JpcHRcbiAgICAgID8gZG9jdW1lbnQuY3VycmVudFNjcmlwdC5zcmNcbiAgICAgIDogdW5kZWZpbmVkO1xuXG4gIHJldHVybiBmdW5jdGlvbiAoZXhwb3J0Q3BwTGliID0ge30pIHtcbiAgICB2YXIgTW9kdWxlID0gdHlwZW9mIGV4cG9ydENwcExpYiAhPSBcInVuZGVmaW5lZFwiID8gZXhwb3J0Q3BwTGliIDoge307XG4gICAgdmFyIHJlYWR5UHJvbWlzZVJlc29sdmUsIHJlYWR5UHJvbWlzZVJlamVjdDtcbiAgICBNb2R1bGVbXCJyZWFkeVwiXSA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgIHJlYWR5UHJvbWlzZVJlc29sdmUgPSByZXNvbHZlO1xuICAgICAgcmVhZHlQcm9taXNlUmVqZWN0ID0gcmVqZWN0O1xuICAgIH0pO1xuICAgIHZhciBtb2R1bGVPdmVycmlkZXMgPSBPYmplY3QuYXNzaWduKHt9LCBNb2R1bGUpO1xuICAgIHZhciBhcmd1bWVudHNfID0gW107XG4gICAgdmFyIHRoaXNQcm9ncmFtID0gXCIuL3RoaXMucHJvZ3JhbVwiO1xuICAgIHZhciBxdWl0XyA9IChzdGF0dXMsIHRvVGhyb3cpID0+IHtcbiAgICAgIHRocm93IHRvVGhyb3c7XG4gICAgfTtcbiAgICB2YXIgRU5WSVJPTk1FTlRfSVNfV0VCID0gdHlwZW9mIHdpbmRvdyA9PSBcIm9iamVjdFwiO1xuICAgIHZhciBFTlZJUk9OTUVOVF9JU19XT1JLRVIgPSB0eXBlb2YgaW1wb3J0U2NyaXB0cyA9PSBcImZ1bmN0aW9uXCI7XG4gICAgdmFyIEVOVklST05NRU5UX0lTX05PREUgPVxuICAgICAgdHlwZW9mIHByb2Nlc3MgPT0gXCJvYmplY3RcIiAmJlxuICAgICAgdHlwZW9mIHByb2Nlc3MudmVyc2lvbnMgPT0gXCJvYmplY3RcIiAmJlxuICAgICAgdHlwZW9mIHByb2Nlc3MudmVyc2lvbnMubm9kZSA9PSBcInN0cmluZ1wiO1xuICAgIHZhciBzY3JpcHREaXJlY3RvcnkgPSBcIlwiO1xuICAgIGZ1bmN0aW9uIGxvY2F0ZUZpbGUocGF0aCkge1xuICAgICAgaWYgKE1vZHVsZVtcImxvY2F0ZUZpbGVcIl0pIHtcbiAgICAgICAgcmV0dXJuIE1vZHVsZVtcImxvY2F0ZUZpbGVcIl0ocGF0aCwgc2NyaXB0RGlyZWN0b3J5KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBzY3JpcHREaXJlY3RvcnkgKyBwYXRoO1xuICAgIH1cbiAgICB2YXIgcmVhZF8sIHJlYWRBc3luYywgcmVhZEJpbmFyeSwgc2V0V2luZG93VGl0bGU7XG4gICAgaWYgKEVOVklST05NRU5UX0lTX1dFQiB8fCBFTlZJUk9OTUVOVF9JU19XT1JLRVIpIHtcbiAgICAgIGlmIChFTlZJUk9OTUVOVF9JU19XT1JLRVIpIHtcbiAgICAgICAgc2NyaXB0RGlyZWN0b3J5ID0gc2VsZi5sb2NhdGlvbi5ocmVmO1xuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgZG9jdW1lbnQgIT0gXCJ1bmRlZmluZWRcIiAmJiBkb2N1bWVudC5jdXJyZW50U2NyaXB0KSB7XG4gICAgICAgIHNjcmlwdERpcmVjdG9yeSA9IGRvY3VtZW50LmN1cnJlbnRTY3JpcHQuc3JjO1xuICAgICAgfVxuICAgICAgaWYgKF9zY3JpcHREaXIpIHtcbiAgICAgICAgc2NyaXB0RGlyZWN0b3J5ID0gX3NjcmlwdERpcjtcbiAgICAgIH1cbiAgICAgIGlmIChzY3JpcHREaXJlY3RvcnkuaW5kZXhPZihcImJsb2I6XCIpICE9PSAwKSB7XG4gICAgICAgIHNjcmlwdERpcmVjdG9yeSA9IHNjcmlwdERpcmVjdG9yeS5zdWJzdHIoXG4gICAgICAgICAgMCxcbiAgICAgICAgICBzY3JpcHREaXJlY3RvcnkucmVwbGFjZSgvWz8jXS4qLywgXCJcIikubGFzdEluZGV4T2YoXCIvXCIpICsgMVxuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2NyaXB0RGlyZWN0b3J5ID0gXCJcIjtcbiAgICAgIH1cbiAgICAgIHtcbiAgICAgICAgcmVhZF8gPSAodXJsKSA9PiB7XG4gICAgICAgICAgdmFyIHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuICAgICAgICAgIHhoci5vcGVuKFwiR0VUXCIsIHVybCwgZmFsc2UpO1xuICAgICAgICAgIHhoci5zZW5kKG51bGwpO1xuICAgICAgICAgIHJldHVybiB4aHIucmVzcG9uc2VUZXh0O1xuICAgICAgICB9O1xuICAgICAgICBpZiAoRU5WSVJPTk1FTlRfSVNfV09SS0VSKSB7XG4gICAgICAgICAgcmVhZEJpbmFyeSA9ICh1cmwpID0+IHtcbiAgICAgICAgICAgIHZhciB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcbiAgICAgICAgICAgIHhoci5vcGVuKFwiR0VUXCIsIHVybCwgZmFsc2UpO1xuICAgICAgICAgICAgeGhyLnJlc3BvbnNlVHlwZSA9IFwiYXJyYXlidWZmZXJcIjtcbiAgICAgICAgICAgIHhoci5zZW5kKG51bGwpO1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KHhoci5yZXNwb25zZSk7XG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICByZWFkQXN5bmMgPSAodXJsLCBvbmxvYWQsIG9uZXJyb3IpID0+IHtcbiAgICAgICAgICB2YXIgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG4gICAgICAgICAgeGhyLm9wZW4oXCJHRVRcIiwgdXJsLCB0cnVlKTtcbiAgICAgICAgICB4aHIucmVzcG9uc2VUeXBlID0gXCJhcnJheWJ1ZmZlclwiO1xuICAgICAgICAgIHhoci5vbmxvYWQgPSAoKSA9PiB7XG4gICAgICAgICAgICBpZiAoeGhyLnN0YXR1cyA9PSAyMDAgfHwgKHhoci5zdGF0dXMgPT0gMCAmJiB4aHIucmVzcG9uc2UpKSB7XG4gICAgICAgICAgICAgIG9ubG9hZCh4aHIucmVzcG9uc2UpO1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBvbmVycm9yKCk7XG4gICAgICAgICAgfTtcbiAgICAgICAgICB4aHIub25lcnJvciA9IG9uZXJyb3I7XG4gICAgICAgICAgeGhyLnNlbmQobnVsbCk7XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBzZXRXaW5kb3dUaXRsZSA9ICh0aXRsZSkgPT4gKGRvY3VtZW50LnRpdGxlID0gdGl0bGUpO1xuICAgIH0gZWxzZSB7XG4gICAgfVxuICAgIHZhciBvdXQgPSBNb2R1bGVbXCJwcmludFwiXSB8fCBjb25zb2xlLmxvZy5iaW5kKGNvbnNvbGUpO1xuICAgIHZhciBlcnIgPSBNb2R1bGVbXCJwcmludEVyclwiXSB8fCBjb25zb2xlLndhcm4uYmluZChjb25zb2xlKTtcbiAgICBPYmplY3QuYXNzaWduKE1vZHVsZSwgbW9kdWxlT3ZlcnJpZGVzKTtcbiAgICBtb2R1bGVPdmVycmlkZXMgPSBudWxsO1xuICAgIGlmIChNb2R1bGVbXCJhcmd1bWVudHNcIl0pIGFyZ3VtZW50c18gPSBNb2R1bGVbXCJhcmd1bWVudHNcIl07XG4gICAgaWYgKE1vZHVsZVtcInRoaXNQcm9ncmFtXCJdKSB0aGlzUHJvZ3JhbSA9IE1vZHVsZVtcInRoaXNQcm9ncmFtXCJdO1xuICAgIGlmIChNb2R1bGVbXCJxdWl0XCJdKSBxdWl0XyA9IE1vZHVsZVtcInF1aXRcIl07XG4gICAgdmFyIHdhc21CaW5hcnk7XG4gICAgaWYgKE1vZHVsZVtcIndhc21CaW5hcnlcIl0pIHdhc21CaW5hcnkgPSBNb2R1bGVbXCJ3YXNtQmluYXJ5XCJdO1xuICAgIHZhciBub0V4aXRSdW50aW1lID0gTW9kdWxlW1wibm9FeGl0UnVudGltZVwiXSB8fCB0cnVlO1xuICAgIGlmICh0eXBlb2YgV2ViQXNzZW1ibHkgIT0gXCJvYmplY3RcIikge1xuICAgICAgYWJvcnQoXCJubyBuYXRpdmUgd2FzbSBzdXBwb3J0IGRldGVjdGVkXCIpO1xuICAgIH1cbiAgICB2YXIgd2FzbU1lbW9yeTtcbiAgICB2YXIgQUJPUlQgPSBmYWxzZTtcbiAgICB2YXIgRVhJVFNUQVRVUztcbiAgICB2YXIgSEVBUDgsIEhFQVBVOCwgSEVBUDE2LCBIRUFQVTE2LCBIRUFQMzIsIEhFQVBVMzIsIEhFQVBGMzIsIEhFQVBGNjQ7XG4gICAgZnVuY3Rpb24gdXBkYXRlTWVtb3J5Vmlld3MoKSB7XG4gICAgICB2YXIgYiA9IHdhc21NZW1vcnkuYnVmZmVyO1xuICAgICAgTW9kdWxlW1wiSEVBUDhcIl0gPSBIRUFQOCA9IG5ldyBJbnQ4QXJyYXkoYik7XG4gICAgICBNb2R1bGVbXCJIRUFQMTZcIl0gPSBIRUFQMTYgPSBuZXcgSW50MTZBcnJheShiKTtcbiAgICAgIE1vZHVsZVtcIkhFQVAzMlwiXSA9IEhFQVAzMiA9IG5ldyBJbnQzMkFycmF5KGIpO1xuICAgICAgTW9kdWxlW1wiSEVBUFU4XCJdID0gSEVBUFU4ID0gbmV3IFVpbnQ4QXJyYXkoYik7XG4gICAgICBNb2R1bGVbXCJIRUFQVTE2XCJdID0gSEVBUFUxNiA9IG5ldyBVaW50MTZBcnJheShiKTtcbiAgICAgIE1vZHVsZVtcIkhFQVBVMzJcIl0gPSBIRUFQVTMyID0gbmV3IFVpbnQzMkFycmF5KGIpO1xuICAgICAgTW9kdWxlW1wiSEVBUEYzMlwiXSA9IEhFQVBGMzIgPSBuZXcgRmxvYXQzMkFycmF5KGIpO1xuICAgICAgTW9kdWxlW1wiSEVBUEY2NFwiXSA9IEhFQVBGNjQgPSBuZXcgRmxvYXQ2NEFycmF5KGIpO1xuICAgIH1cbiAgICB2YXIgd2FzbVRhYmxlO1xuICAgIHZhciBfX0FUUFJFUlVOX18gPSBbXTtcbiAgICB2YXIgX19BVElOSVRfXyA9IFtdO1xuICAgIHZhciBfX0FUUE9TVFJVTl9fID0gW107XG4gICAgdmFyIHJ1bnRpbWVJbml0aWFsaXplZCA9IGZhbHNlO1xuICAgIGZ1bmN0aW9uIHByZVJ1bigpIHtcbiAgICAgIGlmIChNb2R1bGVbXCJwcmVSdW5cIl0pIHtcbiAgICAgICAgaWYgKHR5cGVvZiBNb2R1bGVbXCJwcmVSdW5cIl0gPT0gXCJmdW5jdGlvblwiKVxuICAgICAgICAgIE1vZHVsZVtcInByZVJ1blwiXSA9IFtNb2R1bGVbXCJwcmVSdW5cIl1dO1xuICAgICAgICB3aGlsZSAoTW9kdWxlW1wicHJlUnVuXCJdLmxlbmd0aCkge1xuICAgICAgICAgIGFkZE9uUHJlUnVuKE1vZHVsZVtcInByZVJ1blwiXS5zaGlmdCgpKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgY2FsbFJ1bnRpbWVDYWxsYmFja3MoX19BVFBSRVJVTl9fKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gaW5pdFJ1bnRpbWUoKSB7XG4gICAgICBydW50aW1lSW5pdGlhbGl6ZWQgPSB0cnVlO1xuICAgICAgY2FsbFJ1bnRpbWVDYWxsYmFja3MoX19BVElOSVRfXyk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHBvc3RSdW4oKSB7XG4gICAgICBpZiAoTW9kdWxlW1wicG9zdFJ1blwiXSkge1xuICAgICAgICBpZiAodHlwZW9mIE1vZHVsZVtcInBvc3RSdW5cIl0gPT0gXCJmdW5jdGlvblwiKVxuICAgICAgICAgIE1vZHVsZVtcInBvc3RSdW5cIl0gPSBbTW9kdWxlW1wicG9zdFJ1blwiXV07XG4gICAgICAgIHdoaWxlIChNb2R1bGVbXCJwb3N0UnVuXCJdLmxlbmd0aCkge1xuICAgICAgICAgIGFkZE9uUG9zdFJ1bihNb2R1bGVbXCJwb3N0UnVuXCJdLnNoaWZ0KCkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBjYWxsUnVudGltZUNhbGxiYWNrcyhfX0FUUE9TVFJVTl9fKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gYWRkT25QcmVSdW4oY2IpIHtcbiAgICAgIF9fQVRQUkVSVU5fXy51bnNoaWZ0KGNiKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gYWRkT25Jbml0KGNiKSB7XG4gICAgICBfX0FUSU5JVF9fLnVuc2hpZnQoY2IpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBhZGRPblBvc3RSdW4oY2IpIHtcbiAgICAgIF9fQVRQT1NUUlVOX18udW5zaGlmdChjYik7XG4gICAgfVxuICAgIHZhciBydW5EZXBlbmRlbmNpZXMgPSAwO1xuICAgIHZhciBydW5EZXBlbmRlbmN5V2F0Y2hlciA9IG51bGw7XG4gICAgdmFyIGRlcGVuZGVuY2llc0Z1bGZpbGxlZCA9IG51bGw7XG4gICAgZnVuY3Rpb24gYWRkUnVuRGVwZW5kZW5jeShpZCkge1xuICAgICAgcnVuRGVwZW5kZW5jaWVzKys7XG4gICAgICBpZiAoTW9kdWxlW1wibW9uaXRvclJ1bkRlcGVuZGVuY2llc1wiXSkge1xuICAgICAgICBNb2R1bGVbXCJtb25pdG9yUnVuRGVwZW5kZW5jaWVzXCJdKHJ1bkRlcGVuZGVuY2llcyk7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlbW92ZVJ1bkRlcGVuZGVuY3koaWQpIHtcbiAgICAgIHJ1bkRlcGVuZGVuY2llcy0tO1xuICAgICAgaWYgKE1vZHVsZVtcIm1vbml0b3JSdW5EZXBlbmRlbmNpZXNcIl0pIHtcbiAgICAgICAgTW9kdWxlW1wibW9uaXRvclJ1bkRlcGVuZGVuY2llc1wiXShydW5EZXBlbmRlbmNpZXMpO1xuICAgICAgfVxuICAgICAgaWYgKHJ1bkRlcGVuZGVuY2llcyA9PSAwKSB7XG4gICAgICAgIGlmIChydW5EZXBlbmRlbmN5V2F0Y2hlciAhPT0gbnVsbCkge1xuICAgICAgICAgIGNsZWFySW50ZXJ2YWwocnVuRGVwZW5kZW5jeVdhdGNoZXIpO1xuICAgICAgICAgIHJ1bkRlcGVuZGVuY3lXYXRjaGVyID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZGVwZW5kZW5jaWVzRnVsZmlsbGVkKSB7XG4gICAgICAgICAgdmFyIGNhbGxiYWNrID0gZGVwZW5kZW5jaWVzRnVsZmlsbGVkO1xuICAgICAgICAgIGRlcGVuZGVuY2llc0Z1bGZpbGxlZCA9IG51bGw7XG4gICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBhYm9ydCh3aGF0KSB7XG4gICAgICBpZiAoTW9kdWxlW1wib25BYm9ydFwiXSkge1xuICAgICAgICBNb2R1bGVbXCJvbkFib3J0XCJdKHdoYXQpO1xuICAgICAgfVxuICAgICAgd2hhdCA9IFwiQWJvcnRlZChcIiArIHdoYXQgKyBcIilcIjtcbiAgICAgIGVycih3aGF0KTtcbiAgICAgIEFCT1JUID0gdHJ1ZTtcbiAgICAgIEVYSVRTVEFUVVMgPSAxO1xuICAgICAgd2hhdCArPSBcIi4gQnVpbGQgd2l0aCAtc0FTU0VSVElPTlMgZm9yIG1vcmUgaW5mby5cIjtcbiAgICAgIHZhciBlID0gbmV3IFdlYkFzc2VtYmx5LlJ1bnRpbWVFcnJvcih3aGF0KTtcbiAgICAgIHJlYWR5UHJvbWlzZVJlamVjdChlKTtcbiAgICAgIHRocm93IGU7XG4gICAgfVxuICAgIHZhciBkYXRhVVJJUHJlZml4ID0gXCJkYXRhOmFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbTtiYXNlNjQsXCI7XG4gICAgZnVuY3Rpb24gaXNEYXRhVVJJKGZpbGVuYW1lKSB7XG4gICAgICByZXR1cm4gZmlsZW5hbWUuc3RhcnRzV2l0aChkYXRhVVJJUHJlZml4KTtcbiAgICB9XG4gICAgdmFyIHdhc21CaW5hcnlGaWxlO1xuICAgIHdhc21CaW5hcnlGaWxlID0gXCJ3YXNtQ2x1c3Rlci53YXNtXCI7XG4gICAgaWYgKCFpc0RhdGFVUkkod2FzbUJpbmFyeUZpbGUpKSB7XG4gICAgICB3YXNtQmluYXJ5RmlsZSA9IGxvY2F0ZUZpbGUod2FzbUJpbmFyeUZpbGUpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBnZXRCaW5hcnkoZmlsZSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKGZpbGUgPT0gd2FzbUJpbmFyeUZpbGUgJiYgd2FzbUJpbmFyeSkge1xuICAgICAgICAgIHJldHVybiBuZXcgVWludDhBcnJheSh3YXNtQmluYXJ5KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocmVhZEJpbmFyeSkge1xuICAgICAgICAgIHJldHVybiByZWFkQmluYXJ5KGZpbGUpO1xuICAgICAgICB9XG4gICAgICAgIHRocm93IFwiYm90aCBhc3luYyBhbmQgc3luYyBmZXRjaGluZyBvZiB0aGUgd2FzbSBmYWlsZWRcIjtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBhYm9ydChlcnIpO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBnZXRCaW5hcnlQcm9taXNlKGJpbmFyeUZpbGUpIHtcbiAgICAgIGlmICghd2FzbUJpbmFyeSAmJiAoRU5WSVJPTk1FTlRfSVNfV0VCIHx8IEVOVklST05NRU5UX0lTX1dPUktFUikpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBmZXRjaCA9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICByZXR1cm4gZmV0Y2goYmluYXJ5RmlsZSwgeyBjcmVkZW50aWFsczogXCJzYW1lLW9yaWdpblwiIH0pXG4gICAgICAgICAgICAudGhlbihmdW5jdGlvbiAocmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgaWYgKCFyZXNwb25zZVtcIm9rXCJdKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgXCJmYWlsZWQgdG8gbG9hZCB3YXNtIGJpbmFyeSBmaWxlIGF0ICdcIiArIGJpbmFyeUZpbGUgKyBcIidcIjtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXR1cm4gcmVzcG9uc2VbXCJhcnJheUJ1ZmZlclwiXSgpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5jYXRjaChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgIHJldHVybiBnZXRCaW5hcnkoYmluYXJ5RmlsZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gZ2V0QmluYXJ5KGJpbmFyeUZpbGUpO1xuICAgICAgfSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGluc3RhbnRpYXRlQXJyYXlCdWZmZXIoYmluYXJ5RmlsZSwgaW1wb3J0cywgcmVjZWl2ZXIpIHtcbiAgICAgIHJldHVybiBnZXRCaW5hcnlQcm9taXNlKGJpbmFyeUZpbGUpXG4gICAgICAgIC50aGVuKGZ1bmN0aW9uIChiaW5hcnkpIHtcbiAgICAgICAgICByZXR1cm4gV2ViQXNzZW1ibHkuaW5zdGFudGlhdGUoYmluYXJ5LCBpbXBvcnRzKTtcbiAgICAgICAgfSlcbiAgICAgICAgLnRoZW4oZnVuY3Rpb24gKGluc3RhbmNlKSB7XG4gICAgICAgICAgcmV0dXJuIGluc3RhbmNlO1xuICAgICAgICB9KVxuICAgICAgICAudGhlbihyZWNlaXZlciwgZnVuY3Rpb24gKHJlYXNvbikge1xuICAgICAgICAgIGVycihcImZhaWxlZCB0byBhc3luY2hyb25vdXNseSBwcmVwYXJlIHdhc206IFwiICsgcmVhc29uKTtcbiAgICAgICAgICBhYm9ydChyZWFzb24pO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgZnVuY3Rpb24gaW5zdGFudGlhdGVBc3luYyhiaW5hcnksIGJpbmFyeUZpbGUsIGltcG9ydHMsIGNhbGxiYWNrKSB7XG4gICAgICBpZiAoXG4gICAgICAgICFiaW5hcnkgJiZcbiAgICAgICAgdHlwZW9mIFdlYkFzc2VtYmx5Lmluc3RhbnRpYXRlU3RyZWFtaW5nID09IFwiZnVuY3Rpb25cIiAmJlxuICAgICAgICAhaXNEYXRhVVJJKGJpbmFyeUZpbGUpICYmXG4gICAgICAgIHR5cGVvZiBmZXRjaCA9PSBcImZ1bmN0aW9uXCJcbiAgICAgICkge1xuICAgICAgICByZXR1cm4gZmV0Y2goYmluYXJ5RmlsZSwgeyBjcmVkZW50aWFsczogXCJzYW1lLW9yaWdpblwiIH0pLnRoZW4oZnVuY3Rpb24gKFxuICAgICAgICAgIHJlc3BvbnNlXG4gICAgICAgICkge1xuICAgICAgICAgIHZhciByZXN1bHQgPSBXZWJBc3NlbWJseS5pbnN0YW50aWF0ZVN0cmVhbWluZyhyZXNwb25zZSwgaW1wb3J0cyk7XG4gICAgICAgICAgcmV0dXJuIHJlc3VsdC50aGVuKGNhbGxiYWNrLCBmdW5jdGlvbiAocmVhc29uKSB7XG4gICAgICAgICAgICBlcnIoXCJ3YXNtIHN0cmVhbWluZyBjb21waWxlIGZhaWxlZDogXCIgKyByZWFzb24pO1xuICAgICAgICAgICAgZXJyKFwiZmFsbGluZyBiYWNrIHRvIEFycmF5QnVmZmVyIGluc3RhbnRpYXRpb25cIik7XG4gICAgICAgICAgICByZXR1cm4gaW5zdGFudGlhdGVBcnJheUJ1ZmZlcihiaW5hcnlGaWxlLCBpbXBvcnRzLCBjYWxsYmFjayk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGluc3RhbnRpYXRlQXJyYXlCdWZmZXIoYmluYXJ5RmlsZSwgaW1wb3J0cywgY2FsbGJhY2spO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBjcmVhdGVXYXNtKCkge1xuICAgICAgdmFyIGluZm8gPSB7IGE6IHdhc21JbXBvcnRzIH07XG4gICAgICBmdW5jdGlvbiByZWNlaXZlSW5zdGFuY2UoaW5zdGFuY2UsIG1vZHVsZSkge1xuICAgICAgICB2YXIgZXhwb3J0cyA9IGluc3RhbmNlLmV4cG9ydHM7XG4gICAgICAgIE1vZHVsZVtcImFzbVwiXSA9IGV4cG9ydHM7XG4gICAgICAgIHdhc21NZW1vcnkgPSBNb2R1bGVbXCJhc21cIl1bXCJlXCJdO1xuICAgICAgICB1cGRhdGVNZW1vcnlWaWV3cygpO1xuICAgICAgICB3YXNtVGFibGUgPSBNb2R1bGVbXCJhc21cIl1bXCJpXCJdO1xuICAgICAgICBhZGRPbkluaXQoTW9kdWxlW1wiYXNtXCJdW1wiZlwiXSk7XG4gICAgICAgIHJlbW92ZVJ1bkRlcGVuZGVuY3koXCJ3YXNtLWluc3RhbnRpYXRlXCIpO1xuICAgICAgICByZXR1cm4gZXhwb3J0cztcbiAgICAgIH1cbiAgICAgIGFkZFJ1bkRlcGVuZGVuY3koXCJ3YXNtLWluc3RhbnRpYXRlXCIpO1xuICAgICAgZnVuY3Rpb24gcmVjZWl2ZUluc3RhbnRpYXRpb25SZXN1bHQocmVzdWx0KSB7XG4gICAgICAgIHJlY2VpdmVJbnN0YW5jZShyZXN1bHRbXCJpbnN0YW5jZVwiXSk7XG4gICAgICB9XG4gICAgICBpZiAoTW9kdWxlW1wiaW5zdGFudGlhdGVXYXNtXCJdKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgcmV0dXJuIE1vZHVsZVtcImluc3RhbnRpYXRlV2FzbVwiXShpbmZvLCByZWNlaXZlSW5zdGFuY2UpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgZXJyKFwiTW9kdWxlLmluc3RhbnRpYXRlV2FzbSBjYWxsYmFjayBmYWlsZWQgd2l0aCBlcnJvcjogXCIgKyBlKTtcbiAgICAgICAgICByZWFkeVByb21pc2VSZWplY3QoZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGluc3RhbnRpYXRlQXN5bmMoXG4gICAgICAgIHdhc21CaW5hcnksXG4gICAgICAgIHdhc21CaW5hcnlGaWxlLFxuICAgICAgICBpbmZvLFxuICAgICAgICByZWNlaXZlSW5zdGFudGlhdGlvblJlc3VsdFxuICAgICAgKS5jYXRjaChyZWFkeVByb21pc2VSZWplY3QpO1xuICAgICAgcmV0dXJuIHt9O1xuICAgIH1cbiAgICBmdW5jdGlvbiBjYWxsUnVudGltZUNhbGxiYWNrcyhjYWxsYmFja3MpIHtcbiAgICAgIHdoaWxlIChjYWxsYmFja3MubGVuZ3RoID4gMCkge1xuICAgICAgICBjYWxsYmFja3Muc2hpZnQoKShNb2R1bGUpO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBFeGNlcHRpb25JbmZvKGV4Y1B0cikge1xuICAgICAgdGhpcy5leGNQdHIgPSBleGNQdHI7XG4gICAgICB0aGlzLnB0ciA9IGV4Y1B0ciAtIDI0O1xuICAgICAgdGhpcy5zZXRfdHlwZSA9IGZ1bmN0aW9uICh0eXBlKSB7XG4gICAgICAgIEhFQVBVMzJbKHRoaXMucHRyICsgNCkgPj4gMl0gPSB0eXBlO1xuICAgICAgfTtcbiAgICAgIHRoaXMuZ2V0X3R5cGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBIRUFQVTMyWyh0aGlzLnB0ciArIDQpID4+IDJdO1xuICAgICAgfTtcbiAgICAgIHRoaXMuc2V0X2Rlc3RydWN0b3IgPSBmdW5jdGlvbiAoZGVzdHJ1Y3Rvcikge1xuICAgICAgICBIRUFQVTMyWyh0aGlzLnB0ciArIDgpID4+IDJdID0gZGVzdHJ1Y3RvcjtcbiAgICAgIH07XG4gICAgICB0aGlzLmdldF9kZXN0cnVjdG9yID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gSEVBUFUzMlsodGhpcy5wdHIgKyA4KSA+PiAyXTtcbiAgICAgIH07XG4gICAgICB0aGlzLnNldF9jYXVnaHQgPSBmdW5jdGlvbiAoY2F1Z2h0KSB7XG4gICAgICAgIGNhdWdodCA9IGNhdWdodCA/IDEgOiAwO1xuICAgICAgICBIRUFQOFsodGhpcy5wdHIgKyAxMikgPj4gMF0gPSBjYXVnaHQ7XG4gICAgICB9O1xuICAgICAgdGhpcy5nZXRfY2F1Z2h0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gSEVBUDhbKHRoaXMucHRyICsgMTIpID4+IDBdICE9IDA7XG4gICAgICB9O1xuICAgICAgdGhpcy5zZXRfcmV0aHJvd24gPSBmdW5jdGlvbiAocmV0aHJvd24pIHtcbiAgICAgICAgcmV0aHJvd24gPSByZXRocm93biA/IDEgOiAwO1xuICAgICAgICBIRUFQOFsodGhpcy5wdHIgKyAxMykgPj4gMF0gPSByZXRocm93bjtcbiAgICAgIH07XG4gICAgICB0aGlzLmdldF9yZXRocm93biA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIEhFQVA4Wyh0aGlzLnB0ciArIDEzKSA+PiAwXSAhPSAwO1xuICAgICAgfTtcbiAgICAgIHRoaXMuaW5pdCA9IGZ1bmN0aW9uICh0eXBlLCBkZXN0cnVjdG9yKSB7XG4gICAgICAgIHRoaXMuc2V0X2FkanVzdGVkX3B0cigwKTtcbiAgICAgICAgdGhpcy5zZXRfdHlwZSh0eXBlKTtcbiAgICAgICAgdGhpcy5zZXRfZGVzdHJ1Y3RvcihkZXN0cnVjdG9yKTtcbiAgICAgIH07XG4gICAgICB0aGlzLnNldF9hZGp1c3RlZF9wdHIgPSBmdW5jdGlvbiAoYWRqdXN0ZWRQdHIpIHtcbiAgICAgICAgSEVBUFUzMlsodGhpcy5wdHIgKyAxNikgPj4gMl0gPSBhZGp1c3RlZFB0cjtcbiAgICAgIH07XG4gICAgICB0aGlzLmdldF9hZGp1c3RlZF9wdHIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBIRUFQVTMyWyh0aGlzLnB0ciArIDE2KSA+PiAyXTtcbiAgICAgIH07XG4gICAgICB0aGlzLmdldF9leGNlcHRpb25fcHRyID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgaXNQb2ludGVyID0gX19fY3hhX2lzX3BvaW50ZXJfdHlwZSh0aGlzLmdldF90eXBlKCkpO1xuICAgICAgICBpZiAoaXNQb2ludGVyKSB7XG4gICAgICAgICAgcmV0dXJuIEhFQVBVMzJbdGhpcy5leGNQdHIgPj4gMl07XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGFkanVzdGVkID0gdGhpcy5nZXRfYWRqdXN0ZWRfcHRyKCk7XG4gICAgICAgIGlmIChhZGp1c3RlZCAhPT0gMCkgcmV0dXJuIGFkanVzdGVkO1xuICAgICAgICByZXR1cm4gdGhpcy5leGNQdHI7XG4gICAgICB9O1xuICAgIH1cbiAgICB2YXIgZXhjZXB0aW9uTGFzdCA9IDA7XG4gICAgdmFyIHVuY2F1Z2h0RXhjZXB0aW9uQ291bnQgPSAwO1xuICAgIGZ1bmN0aW9uIF9fX2N4YV90aHJvdyhwdHIsIHR5cGUsIGRlc3RydWN0b3IpIHtcbiAgICAgIHZhciBpbmZvID0gbmV3IEV4Y2VwdGlvbkluZm8ocHRyKTtcbiAgICAgIGluZm8uaW5pdCh0eXBlLCBkZXN0cnVjdG9yKTtcbiAgICAgIGV4Y2VwdGlvbkxhc3QgPSBwdHI7XG4gICAgICB1bmNhdWdodEV4Y2VwdGlvbkNvdW50Kys7XG4gICAgICB0aHJvdyBleGNlcHRpb25MYXN0O1xuICAgIH1cbiAgICBmdW5jdGlvbiBfYWJvcnQoKSB7XG4gICAgICBhYm9ydChcIlwiKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gX2Vtc2NyaXB0ZW5fbWVtY3B5X2JpZyhkZXN0LCBzcmMsIG51bSkge1xuICAgICAgSEVBUFU4LmNvcHlXaXRoaW4oZGVzdCwgc3JjLCBzcmMgKyBudW0pO1xuICAgIH1cbiAgICBmdW5jdGlvbiBnZXRIZWFwTWF4KCkge1xuICAgICAgcmV0dXJuIDIxNDc0ODM2NDg7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGVtc2NyaXB0ZW5fcmVhbGxvY19idWZmZXIoc2l6ZSkge1xuICAgICAgdmFyIGIgPSB3YXNtTWVtb3J5LmJ1ZmZlcjtcbiAgICAgIHRyeSB7XG4gICAgICAgIHdhc21NZW1vcnkuZ3Jvdygoc2l6ZSAtIGIuYnl0ZUxlbmd0aCArIDY1NTM1KSA+Pj4gMTYpO1xuICAgICAgICB1cGRhdGVNZW1vcnlWaWV3cygpO1xuICAgICAgICByZXR1cm4gMTtcbiAgICAgIH0gY2F0Y2ggKGUpIHt9XG4gICAgfVxuICAgIGZ1bmN0aW9uIF9lbXNjcmlwdGVuX3Jlc2l6ZV9oZWFwKHJlcXVlc3RlZFNpemUpIHtcbiAgICAgIHZhciBvbGRTaXplID0gSEVBUFU4Lmxlbmd0aDtcbiAgICAgIHJlcXVlc3RlZFNpemUgPSByZXF1ZXN0ZWRTaXplID4+PiAwO1xuICAgICAgdmFyIG1heEhlYXBTaXplID0gZ2V0SGVhcE1heCgpO1xuICAgICAgaWYgKHJlcXVlc3RlZFNpemUgPiBtYXhIZWFwU2l6ZSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICBsZXQgYWxpZ25VcCA9ICh4LCBtdWx0aXBsZSkgPT5cbiAgICAgICAgeCArICgobXVsdGlwbGUgLSAoeCAlIG11bHRpcGxlKSkgJSBtdWx0aXBsZSk7XG4gICAgICBmb3IgKHZhciBjdXREb3duID0gMTsgY3V0RG93biA8PSA0OyBjdXREb3duICo9IDIpIHtcbiAgICAgICAgdmFyIG92ZXJHcm93bkhlYXBTaXplID0gb2xkU2l6ZSAqICgxICsgMC4yIC8gY3V0RG93bik7XG4gICAgICAgIG92ZXJHcm93bkhlYXBTaXplID0gTWF0aC5taW4oXG4gICAgICAgICAgb3Zlckdyb3duSGVhcFNpemUsXG4gICAgICAgICAgcmVxdWVzdGVkU2l6ZSArIDEwMDY2MzI5NlxuICAgICAgICApO1xuICAgICAgICB2YXIgbmV3U2l6ZSA9IE1hdGgubWluKFxuICAgICAgICAgIG1heEhlYXBTaXplLFxuICAgICAgICAgIGFsaWduVXAoTWF0aC5tYXgocmVxdWVzdGVkU2l6ZSwgb3Zlckdyb3duSGVhcFNpemUpLCA2NTUzNilcbiAgICAgICAgKTtcbiAgICAgICAgdmFyIHJlcGxhY2VtZW50ID0gZW1zY3JpcHRlbl9yZWFsbG9jX2J1ZmZlcihuZXdTaXplKTtcbiAgICAgICAgaWYgKHJlcGxhY2VtZW50KSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZ2V0Q0Z1bmMoaWRlbnQpIHtcbiAgICAgIHZhciBmdW5jID0gTW9kdWxlW1wiX1wiICsgaWRlbnRdO1xuICAgICAgcmV0dXJuIGZ1bmM7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHdyaXRlQXJyYXlUb01lbW9yeShhcnJheSwgYnVmZmVyKSB7XG4gICAgICBIRUFQOC5zZXQoYXJyYXksIGJ1ZmZlcik7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGxlbmd0aEJ5dGVzVVRGOChzdHIpIHtcbiAgICAgIHZhciBsZW4gPSAwO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdHIubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgdmFyIGMgPSBzdHIuY2hhckNvZGVBdChpKTtcbiAgICAgICAgaWYgKGMgPD0gMTI3KSB7XG4gICAgICAgICAgbGVuKys7XG4gICAgICAgIH0gZWxzZSBpZiAoYyA8PSAyMDQ3KSB7XG4gICAgICAgICAgbGVuICs9IDI7XG4gICAgICAgIH0gZWxzZSBpZiAoYyA+PSA1NTI5NiAmJiBjIDw9IDU3MzQzKSB7XG4gICAgICAgICAgbGVuICs9IDQ7XG4gICAgICAgICAgKytpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGxlbiArPSAzO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gbGVuO1xuICAgIH1cbiAgICBmdW5jdGlvbiBzdHJpbmdUb1VURjhBcnJheShzdHIsIGhlYXAsIG91dElkeCwgbWF4Qnl0ZXNUb1dyaXRlKSB7XG4gICAgICBpZiAoIShtYXhCeXRlc1RvV3JpdGUgPiAwKSkgcmV0dXJuIDA7XG4gICAgICB2YXIgc3RhcnRJZHggPSBvdXRJZHg7XG4gICAgICB2YXIgZW5kSWR4ID0gb3V0SWR4ICsgbWF4Qnl0ZXNUb1dyaXRlIC0gMTtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3RyLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIHZhciB1ID0gc3RyLmNoYXJDb2RlQXQoaSk7XG4gICAgICAgIGlmICh1ID49IDU1Mjk2ICYmIHUgPD0gNTczNDMpIHtcbiAgICAgICAgICB2YXIgdTEgPSBzdHIuY2hhckNvZGVBdCgrK2kpO1xuICAgICAgICAgIHUgPSAoNjU1MzYgKyAoKHUgJiAxMDIzKSA8PCAxMCkpIHwgKHUxICYgMTAyMyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHUgPD0gMTI3KSB7XG4gICAgICAgICAgaWYgKG91dElkeCA+PSBlbmRJZHgpIGJyZWFrO1xuICAgICAgICAgIGhlYXBbb3V0SWR4KytdID0gdTtcbiAgICAgICAgfSBlbHNlIGlmICh1IDw9IDIwNDcpIHtcbiAgICAgICAgICBpZiAob3V0SWR4ICsgMSA+PSBlbmRJZHgpIGJyZWFrO1xuICAgICAgICAgIGhlYXBbb3V0SWR4KytdID0gMTkyIHwgKHUgPj4gNik7XG4gICAgICAgICAgaGVhcFtvdXRJZHgrK10gPSAxMjggfCAodSAmIDYzKTtcbiAgICAgICAgfSBlbHNlIGlmICh1IDw9IDY1NTM1KSB7XG4gICAgICAgICAgaWYgKG91dElkeCArIDIgPj0gZW5kSWR4KSBicmVhaztcbiAgICAgICAgICBoZWFwW291dElkeCsrXSA9IDIyNCB8ICh1ID4+IDEyKTtcbiAgICAgICAgICBoZWFwW291dElkeCsrXSA9IDEyOCB8ICgodSA+PiA2KSAmIDYzKTtcbiAgICAgICAgICBoZWFwW291dElkeCsrXSA9IDEyOCB8ICh1ICYgNjMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmIChvdXRJZHggKyAzID49IGVuZElkeCkgYnJlYWs7XG4gICAgICAgICAgaGVhcFtvdXRJZHgrK10gPSAyNDAgfCAodSA+PiAxOCk7XG4gICAgICAgICAgaGVhcFtvdXRJZHgrK10gPSAxMjggfCAoKHUgPj4gMTIpICYgNjMpO1xuICAgICAgICAgIGhlYXBbb3V0SWR4KytdID0gMTI4IHwgKCh1ID4+IDYpICYgNjMpO1xuICAgICAgICAgIGhlYXBbb3V0SWR4KytdID0gMTI4IHwgKHUgJiA2Myk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGhlYXBbb3V0SWR4XSA9IDA7XG4gICAgICByZXR1cm4gb3V0SWR4IC0gc3RhcnRJZHg7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHN0cmluZ1RvVVRGOChzdHIsIG91dFB0ciwgbWF4Qnl0ZXNUb1dyaXRlKSB7XG4gICAgICByZXR1cm4gc3RyaW5nVG9VVEY4QXJyYXkoc3RyLCBIRUFQVTgsIG91dFB0ciwgbWF4Qnl0ZXNUb1dyaXRlKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gc3RyaW5nVG9VVEY4T25TdGFjayhzdHIpIHtcbiAgICAgIHZhciBzaXplID0gbGVuZ3RoQnl0ZXNVVEY4KHN0cikgKyAxO1xuICAgICAgdmFyIHJldCA9IHN0YWNrQWxsb2Moc2l6ZSk7XG4gICAgICBzdHJpbmdUb1VURjgoc3RyLCByZXQsIHNpemUpO1xuICAgICAgcmV0dXJuIHJldDtcbiAgICB9XG4gICAgdmFyIFVURjhEZWNvZGVyID1cbiAgICAgIHR5cGVvZiBUZXh0RGVjb2RlciAhPSBcInVuZGVmaW5lZFwiID8gbmV3IFRleHREZWNvZGVyKFwidXRmOFwiKSA6IHVuZGVmaW5lZDtcbiAgICBmdW5jdGlvbiBVVEY4QXJyYXlUb1N0cmluZyhoZWFwT3JBcnJheSwgaWR4LCBtYXhCeXRlc1RvUmVhZCkge1xuICAgICAgdmFyIGVuZElkeCA9IGlkeCArIG1heEJ5dGVzVG9SZWFkO1xuICAgICAgdmFyIGVuZFB0ciA9IGlkeDtcbiAgICAgIHdoaWxlIChoZWFwT3JBcnJheVtlbmRQdHJdICYmICEoZW5kUHRyID49IGVuZElkeCkpICsrZW5kUHRyO1xuICAgICAgaWYgKGVuZFB0ciAtIGlkeCA+IDE2ICYmIGhlYXBPckFycmF5LmJ1ZmZlciAmJiBVVEY4RGVjb2Rlcikge1xuICAgICAgICByZXR1cm4gVVRGOERlY29kZXIuZGVjb2RlKGhlYXBPckFycmF5LnN1YmFycmF5KGlkeCwgZW5kUHRyKSk7XG4gICAgICB9XG4gICAgICB2YXIgc3RyID0gXCJcIjtcbiAgICAgIHdoaWxlIChpZHggPCBlbmRQdHIpIHtcbiAgICAgICAgdmFyIHUwID0gaGVhcE9yQXJyYXlbaWR4KytdO1xuICAgICAgICBpZiAoISh1MCAmIDEyOCkpIHtcbiAgICAgICAgICBzdHIgKz0gU3RyaW5nLmZyb21DaGFyQ29kZSh1MCk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHUxID0gaGVhcE9yQXJyYXlbaWR4KytdICYgNjM7XG4gICAgICAgIGlmICgodTAgJiAyMjQpID09IDE5Mikge1xuICAgICAgICAgIHN0ciArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKCgodTAgJiAzMSkgPDwgNikgfCB1MSk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHUyID0gaGVhcE9yQXJyYXlbaWR4KytdICYgNjM7XG4gICAgICAgIGlmICgodTAgJiAyNDApID09IDIyNCkge1xuICAgICAgICAgIHUwID0gKCh1MCAmIDE1KSA8PCAxMikgfCAodTEgPDwgNikgfCB1MjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB1MCA9XG4gICAgICAgICAgICAoKHUwICYgNykgPDwgMTgpIHxcbiAgICAgICAgICAgICh1MSA8PCAxMikgfFxuICAgICAgICAgICAgKHUyIDw8IDYpIHxcbiAgICAgICAgICAgIChoZWFwT3JBcnJheVtpZHgrK10gJiA2Myk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHUwIDwgNjU1MzYpIHtcbiAgICAgICAgICBzdHIgKz0gU3RyaW5nLmZyb21DaGFyQ29kZSh1MCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmFyIGNoID0gdTAgLSA2NTUzNjtcbiAgICAgICAgICBzdHIgKz0gU3RyaW5nLmZyb21DaGFyQ29kZSg1NTI5NiB8IChjaCA+PiAxMCksIDU2MzIwIHwgKGNoICYgMTAyMykpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gc3RyO1xuICAgIH1cbiAgICBmdW5jdGlvbiBVVEY4VG9TdHJpbmcocHRyLCBtYXhCeXRlc1RvUmVhZCkge1xuICAgICAgcmV0dXJuIHB0ciA/IFVURjhBcnJheVRvU3RyaW5nKEhFQVBVOCwgcHRyLCBtYXhCeXRlc1RvUmVhZCkgOiBcIlwiO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjY2FsbChpZGVudCwgcmV0dXJuVHlwZSwgYXJnVHlwZXMsIGFyZ3MsIG9wdHMpIHtcbiAgICAgIHZhciB0b0MgPSB7XG4gICAgICAgIHN0cmluZzogKHN0cikgPT4ge1xuICAgICAgICAgIHZhciByZXQgPSAwO1xuICAgICAgICAgIGlmIChzdHIgIT09IG51bGwgJiYgc3RyICE9PSB1bmRlZmluZWQgJiYgc3RyICE9PSAwKSB7XG4gICAgICAgICAgICByZXQgPSBzdHJpbmdUb1VURjhPblN0YWNrKHN0cik7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiByZXQ7XG4gICAgICAgIH0sXG4gICAgICAgIGFycmF5OiAoYXJyKSA9PiB7XG4gICAgICAgICAgdmFyIHJldCA9IHN0YWNrQWxsb2MoYXJyLmxlbmd0aCk7XG4gICAgICAgICAgd3JpdGVBcnJheVRvTWVtb3J5KGFyciwgcmV0KTtcbiAgICAgICAgICByZXR1cm4gcmV0O1xuICAgICAgICB9LFxuICAgICAgfTtcbiAgICAgIGZ1bmN0aW9uIGNvbnZlcnRSZXR1cm5WYWx1ZShyZXQpIHtcbiAgICAgICAgaWYgKHJldHVyblR5cGUgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICByZXR1cm4gVVRGOFRvU3RyaW5nKHJldCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJldHVyblR5cGUgPT09IFwiYm9vbGVhblwiKSByZXR1cm4gQm9vbGVhbihyZXQpO1xuICAgICAgICByZXR1cm4gcmV0O1xuICAgICAgfVxuICAgICAgdmFyIGZ1bmMgPSBnZXRDRnVuYyhpZGVudCk7XG4gICAgICB2YXIgY0FyZ3MgPSBbXTtcbiAgICAgIHZhciBzdGFjayA9IDA7XG4gICAgICBpZiAoYXJncykge1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyZ3MubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICB2YXIgY29udmVydGVyID0gdG9DW2FyZ1R5cGVzW2ldXTtcbiAgICAgICAgICBpZiAoY29udmVydGVyKSB7XG4gICAgICAgICAgICBpZiAoc3RhY2sgPT09IDApIHN0YWNrID0gc3RhY2tTYXZlKCk7XG4gICAgICAgICAgICBjQXJnc1tpXSA9IGNvbnZlcnRlcihhcmdzW2ldKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY0FyZ3NbaV0gPSBhcmdzW2ldO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdmFyIHJldCA9IGZ1bmMuYXBwbHkobnVsbCwgY0FyZ3MpO1xuICAgICAgZnVuY3Rpb24gb25Eb25lKHJldCkge1xuICAgICAgICBpZiAoc3RhY2sgIT09IDApIHN0YWNrUmVzdG9yZShzdGFjayk7XG4gICAgICAgIHJldHVybiBjb252ZXJ0UmV0dXJuVmFsdWUocmV0KTtcbiAgICAgIH1cbiAgICAgIHJldCA9IG9uRG9uZShyZXQpO1xuICAgICAgcmV0dXJuIHJldDtcbiAgICB9XG4gICAgZnVuY3Rpb24gY3dyYXAoaWRlbnQsIHJldHVyblR5cGUsIGFyZ1R5cGVzLCBvcHRzKSB7XG4gICAgICB2YXIgbnVtZXJpY0FyZ3MgPVxuICAgICAgICAhYXJnVHlwZXMgfHxcbiAgICAgICAgYXJnVHlwZXMuZXZlcnkoKHR5cGUpID0+IHR5cGUgPT09IFwibnVtYmVyXCIgfHwgdHlwZSA9PT0gXCJib29sZWFuXCIpO1xuICAgICAgdmFyIG51bWVyaWNSZXQgPSByZXR1cm5UeXBlICE9PSBcInN0cmluZ1wiO1xuICAgICAgaWYgKG51bWVyaWNSZXQgJiYgbnVtZXJpY0FyZ3MgJiYgIW9wdHMpIHtcbiAgICAgICAgcmV0dXJuIGdldENGdW5jKGlkZW50KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBjY2FsbChpZGVudCwgcmV0dXJuVHlwZSwgYXJnVHlwZXMsIGFyZ3VtZW50cywgb3B0cyk7XG4gICAgICB9O1xuICAgIH1cbiAgICB2YXIgd2FzbUltcG9ydHMgPSB7XG4gICAgICBkOiBfX19jeGFfdGhyb3csXG4gICAgICBhOiBfYWJvcnQsXG4gICAgICBjOiBfZW1zY3JpcHRlbl9tZW1jcHlfYmlnLFxuICAgICAgYjogX2Vtc2NyaXB0ZW5fcmVzaXplX2hlYXAsXG4gICAgfTtcbiAgICB2YXIgYXNtID0gY3JlYXRlV2FzbSgpO1xuICAgIHZhciBfX193YXNtX2NhbGxfY3RvcnMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gKF9fX3dhc21fY2FsbF9jdG9ycyA9IE1vZHVsZVtcImFzbVwiXVtcImZcIl0pLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG4gICAgfTtcbiAgICB2YXIgX2dldERlbmRyb2dyYW0gPSAoTW9kdWxlW1wiX2dldERlbmRyb2dyYW1cIl0gPSBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gKF9nZXREZW5kcm9ncmFtID0gTW9kdWxlW1wiX2dldERlbmRyb2dyYW1cIl0gPVxuICAgICAgICBNb2R1bGVbXCJhc21cIl1bXCJnXCJdKS5hcHBseShudWxsLCBhcmd1bWVudHMpO1xuICAgIH0pO1xuICAgIHZhciBfZnJlZSA9IChNb2R1bGVbXCJfZnJlZVwiXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiAoX2ZyZWUgPSBNb2R1bGVbXCJfZnJlZVwiXSA9IE1vZHVsZVtcImFzbVwiXVtcImhcIl0pLmFwcGx5KFxuICAgICAgICBudWxsLFxuICAgICAgICBhcmd1bWVudHNcbiAgICAgICk7XG4gICAgfSk7XG4gICAgdmFyIF9fX2Vycm5vX2xvY2F0aW9uID0gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIChfX19lcnJub19sb2NhdGlvbiA9IE1vZHVsZVtcImFzbVwiXVtcIl9fZXJybm9fbG9jYXRpb25cIl0pLmFwcGx5KFxuICAgICAgICBudWxsLFxuICAgICAgICBhcmd1bWVudHNcbiAgICAgICk7XG4gICAgfTtcbiAgICB2YXIgX21hbGxvYyA9IChNb2R1bGVbXCJfbWFsbG9jXCJdID0gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIChfbWFsbG9jID0gTW9kdWxlW1wiX21hbGxvY1wiXSA9IE1vZHVsZVtcImFzbVwiXVtcImpcIl0pLmFwcGx5KFxuICAgICAgICBudWxsLFxuICAgICAgICBhcmd1bWVudHNcbiAgICAgICk7XG4gICAgfSk7XG4gICAgdmFyIHN0YWNrU2F2ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiAoc3RhY2tTYXZlID0gTW9kdWxlW1wiYXNtXCJdW1wia1wiXSkuYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICB9O1xuICAgIHZhciBzdGFja1Jlc3RvcmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gKHN0YWNrUmVzdG9yZSA9IE1vZHVsZVtcImFzbVwiXVtcImxcIl0pLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG4gICAgfTtcbiAgICB2YXIgc3RhY2tBbGxvYyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiAoc3RhY2tBbGxvYyA9IE1vZHVsZVtcImFzbVwiXVtcIm1cIl0pLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG4gICAgfTtcbiAgICB2YXIgX19fY3hhX2lzX3BvaW50ZXJfdHlwZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiAoX19fY3hhX2lzX3BvaW50ZXJfdHlwZSA9IE1vZHVsZVtcImFzbVwiXVtcIm5cIl0pLmFwcGx5KFxuICAgICAgICBudWxsLFxuICAgICAgICBhcmd1bWVudHNcbiAgICAgICk7XG4gICAgfTtcbiAgICBNb2R1bGVbXCJjY2FsbFwiXSA9IGNjYWxsO1xuICAgIE1vZHVsZVtcImN3cmFwXCJdID0gY3dyYXA7XG4gICAgdmFyIGNhbGxlZFJ1bjtcbiAgICBkZXBlbmRlbmNpZXNGdWxmaWxsZWQgPSBmdW5jdGlvbiBydW5DYWxsZXIoKSB7XG4gICAgICBpZiAoIWNhbGxlZFJ1bikgcnVuKCk7XG4gICAgICBpZiAoIWNhbGxlZFJ1bikgZGVwZW5kZW5jaWVzRnVsZmlsbGVkID0gcnVuQ2FsbGVyO1xuICAgIH07XG4gICAgZnVuY3Rpb24gcnVuKCkge1xuICAgICAgaWYgKHJ1bkRlcGVuZGVuY2llcyA+IDApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgcHJlUnVuKCk7XG4gICAgICBpZiAocnVuRGVwZW5kZW5jaWVzID4gMCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBkb1J1bigpIHtcbiAgICAgICAgaWYgKGNhbGxlZFJ1bikgcmV0dXJuO1xuICAgICAgICBjYWxsZWRSdW4gPSB0cnVlO1xuICAgICAgICBNb2R1bGVbXCJjYWxsZWRSdW5cIl0gPSB0cnVlO1xuICAgICAgICBpZiAoQUJPUlQpIHJldHVybjtcbiAgICAgICAgaW5pdFJ1bnRpbWUoKTtcbiAgICAgICAgcmVhZHlQcm9taXNlUmVzb2x2ZShNb2R1bGUpO1xuICAgICAgICBpZiAoTW9kdWxlW1wib25SdW50aW1lSW5pdGlhbGl6ZWRcIl0pIE1vZHVsZVtcIm9uUnVudGltZUluaXRpYWxpemVkXCJdKCk7XG4gICAgICAgIHBvc3RSdW4oKTtcbiAgICAgIH1cbiAgICAgIGlmIChNb2R1bGVbXCJzZXRTdGF0dXNcIl0pIHtcbiAgICAgICAgTW9kdWxlW1wic2V0U3RhdHVzXCJdKFwiUnVubmluZy4uLlwiKTtcbiAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBNb2R1bGVbXCJzZXRTdGF0dXNcIl0oXCJcIik7XG4gICAgICAgICAgfSwgMSk7XG4gICAgICAgICAgZG9SdW4oKTtcbiAgICAgICAgfSwgMSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkb1J1bigpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoTW9kdWxlW1wicHJlSW5pdFwiXSkge1xuICAgICAgaWYgKHR5cGVvZiBNb2R1bGVbXCJwcmVJbml0XCJdID09IFwiZnVuY3Rpb25cIilcbiAgICAgICAgTW9kdWxlW1wicHJlSW5pdFwiXSA9IFtNb2R1bGVbXCJwcmVJbml0XCJdXTtcbiAgICAgIHdoaWxlIChNb2R1bGVbXCJwcmVJbml0XCJdLmxlbmd0aCA+IDApIHtcbiAgICAgICAgTW9kdWxlW1wicHJlSW5pdFwiXS5wb3AoKSgpO1xuICAgICAgfVxuICAgIH1cbiAgICBydW4oKTtcblxuICAgIHJldHVybiBleHBvcnRDcHBMaWIucmVhZHk7XG4gIH07XG59KSgpO1xuaWYgKHR5cGVvZiBleHBvcnRzID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBtb2R1bGUgPT09IFwib2JqZWN0XCIpXG4gIG1vZHVsZS5leHBvcnRzID0gZXhwb3J0Q3BwTGliO1xuZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PT0gXCJmdW5jdGlvblwiICYmIGRlZmluZVtcImFtZFwiXSlcbiAgZGVmaW5lKFtdLCBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGV4cG9ydENwcExpYjtcbiAgfSk7XG5lbHNlIGlmICh0eXBlb2YgZXhwb3J0cyA9PT0gXCJvYmplY3RcIikgZXhwb3J0c1tcImV4cG9ydENwcExpYlwiXSA9IGV4cG9ydENwcExpYjtcbiIsIi8vIFRoZSBtb2R1bGUgY2FjaGVcbnZhciBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX18gPSB7fTtcblxuLy8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbmZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG5cdHZhciBjYWNoZWRNb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdO1xuXHRpZiAoY2FjaGVkTW9kdWxlICE9PSB1bmRlZmluZWQpIHtcblx0XHRyZXR1cm4gY2FjaGVkTW9kdWxlLmV4cG9ydHM7XG5cdH1cblx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcblx0dmFyIG1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF0gPSB7XG5cdFx0aWQ6IG1vZHVsZUlkLFxuXHRcdGxvYWRlZDogZmFsc2UsXG5cdFx0ZXhwb3J0czoge31cblx0fTtcblxuXHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cblx0X193ZWJwYWNrX21vZHVsZXNfX1ttb2R1bGVJZF0obW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cblx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxuXHRtb2R1bGUubG9hZGVkID0gdHJ1ZTtcblxuXHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuXHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG59XG5cbi8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pXG5fX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBfX3dlYnBhY2tfbW9kdWxlc19fO1xuXG4iLCJfX3dlYnBhY2tfcmVxdWlyZV9fLmFtZE8gPSB7fTsiLCIvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9ucyBmb3IgaGFybW9ueSBleHBvcnRzXG5fX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSAoZXhwb3J0cywgZGVmaW5pdGlvbikgPT4ge1xuXHRmb3IodmFyIGtleSBpbiBkZWZpbml0aW9uKSB7XG5cdFx0aWYoX193ZWJwYWNrX3JlcXVpcmVfXy5vKGRlZmluaXRpb24sIGtleSkgJiYgIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBrZXkpKSB7XG5cdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywga2V5LCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZGVmaW5pdGlvbltrZXldIH0pO1xuXHRcdH1cblx0fVxufTsiLCJfX3dlYnBhY2tfcmVxdWlyZV9fLmcgPSAoZnVuY3Rpb24oKSB7XG5cdGlmICh0eXBlb2YgZ2xvYmFsVGhpcyA9PT0gJ29iamVjdCcpIHJldHVybiBnbG9iYWxUaGlzO1xuXHR0cnkge1xuXHRcdHJldHVybiB0aGlzIHx8IG5ldyBGdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpO1xuXHR9IGNhdGNoIChlKSB7XG5cdFx0aWYgKHR5cGVvZiB3aW5kb3cgPT09ICdvYmplY3QnKSByZXR1cm4gd2luZG93O1xuXHR9XG59KSgpOyIsIl9fd2VicGFja19yZXF1aXJlX18uaG1kID0gKG1vZHVsZSkgPT4ge1xuXHRtb2R1bGUgPSBPYmplY3QuY3JlYXRlKG1vZHVsZSk7XG5cdGlmICghbW9kdWxlLmNoaWxkcmVuKSBtb2R1bGUuY2hpbGRyZW4gPSBbXTtcblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG1vZHVsZSwgJ2V4cG9ydHMnLCB7XG5cdFx0ZW51bWVyYWJsZTogdHJ1ZSxcblx0XHRzZXQ6ICgpID0+IHtcblx0XHRcdHRocm93IG5ldyBFcnJvcignRVMgTW9kdWxlcyBtYXkgbm90IGFzc2lnbiBtb2R1bGUuZXhwb3J0cyBvciBleHBvcnRzLiosIFVzZSBFU00gZXhwb3J0IHN5bnRheCwgaW5zdGVhZDogJyArIG1vZHVsZS5pZCk7XG5cdFx0fVxuXHR9KTtcblx0cmV0dXJuIG1vZHVsZTtcbn07IiwiX193ZWJwYWNrX3JlcXVpcmVfXy5vID0gKG9iaiwgcHJvcCkgPT4gKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIHByb3ApKSIsInZhciBzY3JpcHRVcmw7XG5pZiAoX193ZWJwYWNrX3JlcXVpcmVfXy5nLmltcG9ydFNjcmlwdHMpIHNjcmlwdFVybCA9IF9fd2VicGFja19yZXF1aXJlX18uZy5sb2NhdGlvbiArIFwiXCI7XG52YXIgZG9jdW1lbnQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fLmcuZG9jdW1lbnQ7XG5pZiAoIXNjcmlwdFVybCAmJiBkb2N1bWVudCkge1xuXHRpZiAoZG9jdW1lbnQuY3VycmVudFNjcmlwdClcblx0XHRzY3JpcHRVcmwgPSBkb2N1bWVudC5jdXJyZW50U2NyaXB0LnNyYztcblx0aWYgKCFzY3JpcHRVcmwpIHtcblx0XHR2YXIgc2NyaXB0cyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKFwic2NyaXB0XCIpO1xuXHRcdGlmKHNjcmlwdHMubGVuZ3RoKSB7XG5cdFx0XHR2YXIgaSA9IHNjcmlwdHMubGVuZ3RoIC0gMTtcblx0XHRcdHdoaWxlIChpID4gLTEgJiYgKCFzY3JpcHRVcmwgfHwgIS9eaHR0cChzPyk6Ly50ZXN0KHNjcmlwdFVybCkpKSBzY3JpcHRVcmwgPSBzY3JpcHRzW2ktLV0uc3JjO1xuXHRcdH1cblx0fVxufVxuLy8gV2hlbiBzdXBwb3J0aW5nIGJyb3dzZXJzIHdoZXJlIGFuIGF1dG9tYXRpYyBwdWJsaWNQYXRoIGlzIG5vdCBzdXBwb3J0ZWQgeW91IG11c3Qgc3BlY2lmeSBhbiBvdXRwdXQucHVibGljUGF0aCBtYW51YWxseSB2aWEgY29uZmlndXJhdGlvblxuLy8gb3IgcGFzcyBhbiBlbXB0eSBzdHJpbmcgKFwiXCIpIGFuZCBzZXQgdGhlIF9fd2VicGFja19wdWJsaWNfcGF0aF9fIHZhcmlhYmxlIGZyb20geW91ciBjb2RlIHRvIHVzZSB5b3VyIG93biBsb2dpYy5cbmlmICghc2NyaXB0VXJsKSB0aHJvdyBuZXcgRXJyb3IoXCJBdXRvbWF0aWMgcHVibGljUGF0aCBpcyBub3Qgc3VwcG9ydGVkIGluIHRoaXMgYnJvd3NlclwiKTtcbnNjcmlwdFVybCA9IHNjcmlwdFVybC5yZXBsYWNlKC8jLiokLywgXCJcIikucmVwbGFjZSgvXFw/LiokLywgXCJcIikucmVwbGFjZSgvXFwvW15cXC9dKyQvLCBcIi9cIik7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBzY3JpcHRVcmw7IiwiX193ZWJwYWNrX3JlcXVpcmVfXy5iID0gc2VsZi5sb2NhdGlvbiArIFwiXCI7XG5cbi8vIG9iamVjdCB0byBzdG9yZSBsb2FkZWQgY2h1bmtzXG4vLyBcIjFcIiBtZWFucyBcImFscmVhZHkgbG9hZGVkXCJcbnZhciBpbnN0YWxsZWRDaHVua3MgPSB7XG5cdDcwNTogMVxufTtcblxuLy8gbm8gY2h1bmsgaW5zdGFsbCBmdW5jdGlvbiBuZWVkZWRcbi8vIG5vIGNodW5rIGxvYWRpbmdcblxuLy8gbm8gSE1SXG5cbi8vIG5vIEhNUiBtYW5pZmVzdCIsImltcG9ydCB7IGdldENsdXN0ZXJzRnJvbURpc3RNYXRXYXNtIH0gZnJvbSAnLi9jbHVzdGVyaXplcldhc20nO1xub25tZXNzYWdlID0gKGV2ZW50KSA9PiB7XG4gICAgY29uc3QgeyBkaXN0TWF0QXJyYXksIG4sIG1ldGhvZENvZGUgfSA9IGV2ZW50LmRhdGE7XG4gICAgY29uc3QgZGF0YSA9IHt9O1xuICAgIHRyeSB7XG4gICAgICAgIGdldENsdXN0ZXJzRnJvbURpc3RNYXRXYXNtKGRpc3RNYXRBcnJheSwgbiwgbWV0aG9kQ29kZSlcbiAgICAgICAgICAgIC50aGVuKChjbHVzdGVyTWF0cml4KSA9PiB7XG4gICAgICAgICAgICBkYXRhLmNsdXN0ZXJNYXRyaXggPSBjbHVzdGVyTWF0cml4O1xuICAgICAgICAgICAgcG9zdE1lc3NhZ2UoZGF0YSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBjYXRjaCAoZSkge1xuICAgICAgICBkYXRhLmVycm9yID0gZTtcbiAgICAgICAgcG9zdE1lc3NhZ2UoZGF0YSk7XG4gICAgfVxufTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNsdXN0ZXJpbmctd29ya2VyLmpzLm1hcCIsImltcG9ydCB7ZXhwb3J0Q3BwTGlifSBmcm9tICcuL3dhc21DbHVzdGVyLmpzJztcblxuLyoqXG4gY2FsbHMgd2FzbSBmdW5jdGlvbiB0byBnZXQgY2x1c3RlcmluZyBtZXJnZXMgYW5kIGhlaWdodHMgZnJvbSBkaXN0YW5jZSBtYXRyaXhcbiBkaXN0bWF0OiBkaXN0YW5jZSBtYXRyaXggYXMgYW4gYXJyYXkgb2YgZmxvYXRzIGNvbXByaXNpbmcgdGhlIHRvcCByaWdodCB0cmlhbmdsZSBvZiB0aGUgbWF0cml4XG4gbjogbnVtYmVyIG9mIG9ic2VydmFibGVzXG4gbWV0aG9kOiAwID0gc2luZ2xlIGxpbmthZ2UsIDEgPSBjb21wbGV0ZSBsaW5rYWdlLCAyID0gYXZlcmFnZSBsaW5rYWdlLCAzID0gbWVkaWFuIGxpbmthZ2VcbiByZXN1bHQ6IHsgbWVyZ2VSZXN1bHQ6IEludDMyQXJyYXksIGhlaWdodHNSZXN1bHQ6IEZsb2F0MzJBcnJheSB9XG4gbWVyZ2VSZXN1bHQgaGFzIGxlbmd0aCBvZiAobi0xKSoyIGFuZCBoZWlnaHRSZXN1bHQgaGFzIGxlbmd0aCBvZiBuLTFcbiB0b2dldGhlciB0aGV5IGRlc2NyaWJlIHRoZSBjbHVzdGVyaW5nIGFzIGEgZGVuZHJvZ3JhbSBhcyBhIG1hdHJpeCBvZiAobi0xKSBYIDNcbiBlYWNoIHJvdyBpbiB0aGUgZ2l2ZW4gbWF0cml4IGNvbXByaXNlcyB0aGUgbWVyZ2UgZXZlbnQgYXQgc3RlcCBpIGFuZCBsYXN0IGNvbHVtbiBpcyB0aGUgaGVpZ2h0IGZyb20gdGhlIGxlYXZlcy5cbiovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0Q2x1c3RlcnNGcm9tRGlzdE1hdFdhc20oZGlzdG1hdCwgbiwgbWV0aG9kKSB7XG4gIGNvbnN0IHdhc21VcmwgPSBuZXcgVVJMKCcuL3dhc21DbHVzdGVyLndhc20nLCBpbXBvcnQubWV0YS51cmwpLmhyZWY7XG4gIGNvbnN0IHdhc21QYXRoID0gd2FzbVVybC5zdWJzdHJpbmcoMCwgd2FzbVVybC5sYXN0SW5kZXhPZignLycpICsgMSkgKyAnd2FzbUNsdXN0ZXIud2FzbSc7XG4gIGxldCB3YXNtSW5zdGFuY2U7XG4gIHRyeSB7XG4gICAgICB3YXNtSW5zdGFuY2UgPSBhd2FpdCBleHBvcnRDcHBMaWIoe2xvY2F0ZUZpbGU6ICgpID0+IHdhc21QYXRoLCBwcmludEVycjogKF8pID0+IHt9fSk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgICAgd2FzbUluc3RhbmNlID0gYXdhaXQgZXhwb3J0Q3BwTGliKHtsb2NhdGVGaWxlOiAoKSA9PiB3YXNtVXJsLCBwcmludEVycjogKF8pID0+IHt9fSk7XG4gICAgICB9XG4gICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZSk7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbmFibGUgdG8gbG9hZCB3YXNtIGZpbGUgZm9yIGhpZXJhcmNoaWNhbCBjbHVzdGVyaW5nJyk7XG4gICAgICB9XG4gIH1cblxuICBjb25zdCBnZXREZW5kcm9ncmFtV2FzbSA9XG4gICAgd2FzbUluc3RhbmNlLmN3cmFwKCdnZXREZW5kcm9ncmFtJywgJ251bGwnLCBbJ251bWJlcicsICdudW1iZXInLCAnbnVtYmVyJywgJ251bWJlcicsICdudW1iZXInXSk7XG4gIC8vIGFsbG9jYXRlIGEgbWVtb3J5IGJsb2NrIG9uIHRoZSB3YXNtIGhlYXAgZm9yIHRoZSBkaXN0YW5jZSBtYXRyaXhcbiAgY29uc3QgYnl0ZXNGb3JEaXN0TWF0ID0gRmxvYXQzMkFycmF5LkJZVEVTX1BFUl9FTEVNRU5UICogZGlzdG1hdC5sZW5ndGg7XG4gIGNvbnN0IGRhdGFQdHIgPSB3YXNtSW5zdGFuY2UuX21hbGxvYyhieXRlc0ZvckRpc3RNYXQpO1xuICBjb25zdCBtYXRIZWFwID0gbmV3IFVpbnQ4QXJyYXkod2FzbUluc3RhbmNlLkhFQVBVOC5idWZmZXIsIGRhdGFQdHIsIGJ5dGVzRm9yRGlzdE1hdCk7XG4gIG1hdEhlYXAuc2V0KG5ldyBVaW50OEFycmF5KGRpc3RtYXQuYnVmZmVyKSk7XG5cbiAgLy9hbGxvY2F0ZSBhIG1lbW9yeSBibG9jayBvbiB0aGUgd2FzbSBoZWFwIGZvciB0aGUgbWVyZ2VzIGFycmF5XG4gIGNvbnN0IGJ5dGVzRm9yTWVyZ2VBcnJheSA9IEludDMyQXJyYXkuQllURVNfUEVSX0VMRU1FTlQgKiAobiAtIDEpICogMjtcbiAgY29uc3QgbWVyZ2VQdHIgPSB3YXNtSW5zdGFuY2UuX21hbGxvYyhieXRlc0Zvck1lcmdlQXJyYXkpO1xuICBjb25zdCBtZXJnZUhlYXAgPSBuZXcgVWludDhBcnJheSh3YXNtSW5zdGFuY2UuSEVBUFU4LmJ1ZmZlciwgbWVyZ2VQdHIsIGJ5dGVzRm9yTWVyZ2VBcnJheSk7XG5cbiAgLy9hbGxvY2F0ZSBhIG1lbW9yeSBibG9jayBvbiB0aGUgd2FzbSBoZWFwIGZvciB0aGUgaGVpZ3QgYXJyYXlcbiAgY29uc3QgYnl0ZXNGb3JIZWlnaHRzQXJyYXkgPSBGbG9hdDMyQXJyYXkuQllURVNfUEVSX0VMRU1FTlQgKiAobiAtIDEpO1xuICBjb25zdCBoZWlnaHRzUHRyID0gd2FzbUluc3RhbmNlLl9tYWxsb2MoYnl0ZXNGb3JIZWlnaHRzQXJyYXkpO1xuICBjb25zdCBoZWlnaHRzSGVhcCA9IG5ldyBVaW50OEFycmF5KHdhc21JbnN0YW5jZS5IRUFQVTguYnVmZmVyLCBoZWlnaHRzUHRyLCBieXRlc0ZvckhlaWdodHNBcnJheSk7XG5cbiAgLy8gY2FsbCB0aGUgd2FzbSBmdW5jdGlvblxuICBnZXREZW5kcm9ncmFtV2FzbShkYXRhUHRyLCBuLCBtZXRob2QsIG1lcmdlUHRyLCBoZWlnaHRzUHRyKTtcbiAgLy8gZ2V0IHRoZSBtZXJnZXMgYW5kIGhlaWdodHMgZnJvbSB0aGUgd2FzbSBoZWFwXG4gIGNvbnN0IG1lcmdlUmVzdWx0ID0gbmV3IEludDMyQXJyYXkobWVyZ2VIZWFwLmJ1ZmZlciwgbWVyZ2VIZWFwLmJ5dGVPZmZzZXQsIChuLTEpICogMik7XG4gIGNvbnN0IGhlaWdodHNSZXN1bHQgPSAobmV3IEZsb2F0MzJBcnJheShoZWlnaHRzSGVhcC5idWZmZXIsIGhlaWdodHNIZWFwLmJ5dGVPZmZzZXQsIG4tMSkpLnNsaWNlKDAsIG4tMSk7XG5cbiAgY29uc3QgbWVyZ2VSb3cxID0gbWVyZ2VSZXN1bHQuc2xpY2UoMCwgbi0xKTtcbiAgY29uc3QgbWVyZ2VSb3cyID0gbWVyZ2VSZXN1bHQuc2xpY2Uobi0xLCAyKm4gLSAyKTtcbiAgLy8gZnJlZSB0aGUgbWVtb3J5IGJsb2NrcyBvbiB0aGUgd2FzbSBoZWFwXG4gIHdhc21JbnN0YW5jZS5fZnJlZShtYXRIZWFwLmJ5dGVPZmZzZXQpO1xuICB3YXNtSW5zdGFuY2UuX2ZyZWUobWVyZ2VIZWFwLmJ5dGVPZmZzZXQpO1xuICB3YXNtSW5zdGFuY2UuX2ZyZWUoaGVpZ2h0c0hlYXAuYnl0ZU9mZnNldCk7XG4gIHJldHVybiB7bWVyZ2VSb3cxLCBtZXJnZVJvdzIsIGhlaWdodHNSZXN1bHR9O1xufVxuIl0sIm5hbWVzIjpbIl9zY3JpcHREaXIiLCJleHBvcnRDcHBMaWIiLCJkb2N1bWVudCIsImN1cnJlbnRTY3JpcHQiLCJzcmMiLCJ1bmRlZmluZWQiLCJyZWFkeVByb21pc2VSZXNvbHZlIiwicmVhZHlQcm9taXNlUmVqZWN0IiwiTW9kdWxlIiwiUHJvbWlzZSIsInJlc29sdmUiLCJyZWplY3QiLCJyZWFkQmluYXJ5IiwibW9kdWxlT3ZlcnJpZGVzIiwiT2JqZWN0IiwiYXNzaWduIiwiRU5WSVJPTk1FTlRfSVNfV0VCIiwid2luZG93IiwiRU5WSVJPTk1FTlRfSVNfV09SS0VSIiwiaW1wb3J0U2NyaXB0cyIsInNjcmlwdERpcmVjdG9yeSIsInByb2Nlc3MiLCJ2ZXJzaW9ucyIsIm5vZGUiLCJzZWxmIiwibG9jYXRpb24iLCJocmVmIiwiaW5kZXhPZiIsInN1YnN0ciIsInJlcGxhY2UiLCJsYXN0SW5kZXhPZiIsInVybCIsInhociIsIlhNTEh0dHBSZXF1ZXN0Iiwib3BlbiIsInJlc3BvbnNlVHlwZSIsInNlbmQiLCJVaW50OEFycmF5IiwicmVzcG9uc2UiLCJjb25zb2xlIiwibG9nIiwiYmluZCIsIndhc21CaW5hcnkiLCJ3YXNtTWVtb3J5IiwiZXJyIiwid2FybiIsIldlYkFzc2VtYmx5IiwiYWJvcnQiLCJIRUFQOCIsIkhFQVBVOCIsIkhFQVBVMzIiLCJBQk9SVCIsInVwZGF0ZU1lbW9yeVZpZXdzIiwiYiIsImJ1ZmZlciIsIkludDhBcnJheSIsIkludDE2QXJyYXkiLCJJbnQzMkFycmF5IiwiVWludDE2QXJyYXkiLCJVaW50MzJBcnJheSIsIkZsb2F0MzJBcnJheSIsIkZsb2F0NjRBcnJheSIsIl9fQVRQUkVSVU5fXyIsIl9fQVRJTklUX18iLCJfX0FUUE9TVFJVTl9fIiwicnVuRGVwZW5kZW5jaWVzIiwicnVuRGVwZW5kZW5jeVdhdGNoZXIiLCJkZXBlbmRlbmNpZXNGdWxmaWxsZWQiLCJ3aGF0IiwiZSIsIlJ1bnRpbWVFcnJvciIsIndhc21CaW5hcnlGaWxlIiwicGF0aCIsImlzRGF0YVVSSSIsImZpbGVuYW1lIiwic3RhcnRzV2l0aCIsImdldEJpbmFyeSIsImZpbGUiLCJpbnN0YW50aWF0ZUFycmF5QnVmZmVyIiwiYmluYXJ5RmlsZSIsImltcG9ydHMiLCJyZWNlaXZlciIsImZldGNoIiwidGhlbiIsImNyZWRlbnRpYWxzIiwiY2F0Y2giLCJnZXRCaW5hcnlQcm9taXNlIiwiYmluYXJ5IiwiaW5zdGFudGlhdGUiLCJpbnN0YW5jZSIsInJlYXNvbiIsImNhbGxSdW50aW1lQ2FsbGJhY2tzIiwiY2FsbGJhY2tzIiwibGVuZ3RoIiwic2hpZnQiLCJFeGNlcHRpb25JbmZvIiwiZXhjUHRyIiwidGhpcyIsInB0ciIsInNldF90eXBlIiwidHlwZSIsImdldF90eXBlIiwic2V0X2Rlc3RydWN0b3IiLCJkZXN0cnVjdG9yIiwiZ2V0X2Rlc3RydWN0b3IiLCJzZXRfY2F1Z2h0IiwiY2F1Z2h0IiwiZ2V0X2NhdWdodCIsInNldF9yZXRocm93biIsInJldGhyb3duIiwiZ2V0X3JldGhyb3duIiwiaW5pdCIsInNldF9hZGp1c3RlZF9wdHIiLCJhZGp1c3RlZFB0ciIsImdldF9hZGp1c3RlZF9wdHIiLCJnZXRfZXhjZXB0aW9uX3B0ciIsIl9fX2N4YV9pc19wb2ludGVyX3R5cGUiLCJhZGp1c3RlZCIsImVtc2NyaXB0ZW5fcmVhbGxvY19idWZmZXIiLCJzaXplIiwiZ3JvdyIsImJ5dGVMZW5ndGgiLCJnZXRDRnVuYyIsImlkZW50IiwiVVRGOERlY29kZXIiLCJUZXh0RGVjb2RlciIsImNjYWxsIiwicmV0dXJuVHlwZSIsImFyZ1R5cGVzIiwiYXJncyIsIm9wdHMiLCJ0b0MiLCJzdHJpbmciLCJzdHIiLCJyZXQiLCJsZW4iLCJpIiwiYyIsImNoYXJDb2RlQXQiLCJsZW5ndGhCeXRlc1VURjgiLCJzdGFja0FsbG9jIiwib3V0UHRyIiwibWF4Qnl0ZXNUb1dyaXRlIiwiaGVhcCIsIm91dElkeCIsImVuZElkeCIsInUiLCJzdHJpbmdUb1VURjhBcnJheSIsInN0cmluZ1RvVVRGOCIsInN0cmluZ1RvVVRGOE9uU3RhY2siLCJhcnJheSIsImFyciIsInNldCIsImZ1bmMiLCJjQXJncyIsInN0YWNrIiwiY29udmVydGVyIiwic3RhY2tTYXZlIiwiYXBwbHkiLCJzdGFja1Jlc3RvcmUiLCJoZWFwT3JBcnJheSIsImlkeCIsIm1heEJ5dGVzVG9SZWFkIiwiZW5kUHRyIiwiZGVjb2RlIiwic3ViYXJyYXkiLCJ1MCIsInUxIiwidTIiLCJTdHJpbmciLCJmcm9tQ2hhckNvZGUiLCJjaCIsIlVURjhBcnJheVRvU3RyaW5nIiwiQm9vbGVhbiIsImNvbnZlcnRSZXR1cm5WYWx1ZSIsIm9uRG9uZSIsImNhbGxlZFJ1biIsIndhc21JbXBvcnRzIiwiZCIsImEiLCJkZXN0IiwibnVtIiwiY29weVdpdGhpbiIsInJlcXVlc3RlZFNpemUiLCJ4Iiwib2xkU2l6ZSIsIm1heEhlYXBTaXplIiwiY3V0RG93biIsIm92ZXJHcm93bkhlYXBTaXplIiwiTWF0aCIsIm1pbiIsIm1heCIsImNhbGxiYWNrIiwiaW5mbyIsInJlY2VpdmVJbnN0YW5jZSIsIm1vZHVsZSIsImNiIiwiZXhwb3J0cyIsInVuc2hpZnQiLCJpZCIsImNsZWFySW50ZXJ2YWwiLCJyZW1vdmVSdW5EZXBlbmRlbmN5IiwicmVzdWx0IiwiaW5zdGFudGlhdGVTdHJlYW1pbmciLCJjcmVhdGVXYXNtIiwiYXJndW1lbnRzIiwicnVuIiwiZG9SdW4iLCJwb3N0UnVuIiwicHJlUnVuIiwic2V0VGltZW91dCIsIm51bWVyaWNBcmdzIiwiZXZlcnkiLCJydW5DYWxsZXIiLCJwb3AiLCJyZWFkeSIsImRlZmluZSIsIl9fd2VicGFja19tb2R1bGVfY2FjaGVfXyIsIl9fd2VicGFja19yZXF1aXJlX18iLCJtb2R1bGVJZCIsImNhY2hlZE1vZHVsZSIsImxvYWRlZCIsIl9fd2VicGFja19tb2R1bGVzX18iLCJtIiwiYW1kTyIsImRlZmluaXRpb24iLCJrZXkiLCJvIiwiZGVmaW5lUHJvcGVydHkiLCJlbnVtZXJhYmxlIiwiZ2V0IiwiZyIsImdsb2JhbFRoaXMiLCJGdW5jdGlvbiIsImhtZCIsImNyZWF0ZSIsImNoaWxkcmVuIiwiRXJyb3IiLCJvYmoiLCJwcm9wIiwicHJvdG90eXBlIiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwic2NyaXB0VXJsIiwic2NyaXB0cyIsImdldEVsZW1lbnRzQnlUYWdOYW1lIiwidGVzdCIsInAiLCJvbm1lc3NhZ2UiLCJldmVudCIsImRpc3RNYXRBcnJheSIsIm4iLCJtZXRob2RDb2RlIiwiZGF0YSIsImFzeW5jIiwiZGlzdG1hdCIsIm1ldGhvZCIsIndhc21VcmwiLCJVUkwiLCJ3YXNtUGF0aCIsInN1YnN0cmluZyIsIndhc21JbnN0YW5jZSIsImxvY2F0ZUZpbGUiLCJwcmludEVyciIsIl8iLCJlcnJvciIsImdldERlbmRyb2dyYW1XYXNtIiwiY3dyYXAiLCJieXRlc0ZvckRpc3RNYXQiLCJCWVRFU19QRVJfRUxFTUVOVCIsImRhdGFQdHIiLCJfbWFsbG9jIiwibWF0SGVhcCIsImJ5dGVzRm9yTWVyZ2VBcnJheSIsIm1lcmdlUHRyIiwibWVyZ2VIZWFwIiwiYnl0ZXNGb3JIZWlnaHRzQXJyYXkiLCJoZWlnaHRzUHRyIiwiaGVpZ2h0c0hlYXAiLCJtZXJnZVJlc3VsdCIsImJ5dGVPZmZzZXQiLCJoZWlnaHRzUmVzdWx0Iiwic2xpY2UiLCJtZXJnZVJvdzEiLCJtZXJnZVJvdzIiLCJfZnJlZSIsImdldENsdXN0ZXJzRnJvbURpc3RNYXRXYXNtIiwiY2x1c3Rlck1hdHJpeCIsInBvc3RNZXNzYWdlIl0sInNvdXJjZVJvb3QiOiIifQ==