@datagrok/peptides 1.17.2 → 1.17.4

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/.eslintrc.json CHANGED
@@ -10,15 +10,14 @@
10
10
  "parserOptions": {
11
11
  "ecmaVersion": 12,
12
12
  "sourceType": "module",
13
- "project": [
14
- "tsconfig.json"
15
- ]
13
+ "project" : "./packages/Peptides/tsconfig.json"
16
14
  },
17
15
  "plugins": [
18
16
  "@typescript-eslint"
19
17
  ],
20
18
  "rules": {
21
19
  "require-jsdoc": "off",
20
+ "valid-jsdoc": "off",
22
21
  "indent": [
23
22
  "error",
24
23
  2
package/CHANGELOG.md CHANGED
@@ -1,6 +1,11 @@
1
1
  # Peptides changelog
2
2
 
3
- ## 1.17.2 (2023-10-26)
3
+ ## 1.17.3 (WIP)
4
+
5
+ * Sequence space random seeding for reproducibility.
6
+ * Use of generated clusters for summery web logo table.
7
+
8
+ ## 1.17.2 (2023-12-26)
4
9
 
5
10
  * Improved dimensionality reduction (sequence space).
6
11
 
package/dist/356.js ADDED
@@ -0,0 +1,2 @@
1
+ var peptides;(()=>{"use strict";var t,e={138:(t,e,r)=>{r.d(e,{W:()=>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 W(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=B()),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 F,H={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}},B=(function(){var t,e,n,o,a={a:H};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(B=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(){F||(F=!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=W,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 W(t,e,r,arguments)}},E=function t(){F||N(),F||(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)},63:(t,e,r)=>{t.exports=r.p+"8473fcbfb6e85ca6c852.wasm"}},r={};function n(t){var i=r[t];if(void 0!==i)return i.exports;var o=r[t]={id:t,loaded:!1,exports:{}};return e[t](o,o.exports,n),o.loaded=!0,o.exports}n.m=e,n.amdO={},n.d=(t,e)=>{for(var r in e)n.o(e,r)&&!n.o(t,r)&&Object.defineProperty(t,r,{enumerable:!0,get:e[r]})},n.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(t){if("object"==typeof window)return window}}(),n.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),n.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),(()=>{var t;n.g.importScripts&&(t=n.g.location+"");var e=n.g.document;if(!t&&e&&(e.currentScript&&(t=e.currentScript.src),!t)){var r=e.getElementsByTagName("script");if(r.length)for(var i=r.length-1;i>-1&&!t;)t=r[i--].src}if(!t)throw new Error("Automatic publicPath is not supported in this browser");t=t.replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/"),n.p=t})(),n.b=self.location+"",t=n(138),onmessage=e=>{const{distMatArray:r,n:i,methodCode:o}=e.data,a={};try{(async function(e,r,i){const o=new URL(n(63),n.b).href,a=o.substring(0,o.lastIndexOf("/")+1)+"wasmCluster.wasm";let s;try{s=await(0,t.W)({locateFile:()=>a,printErr:t=>{}})}catch(e){try{s=await(0,t.W)({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*e.length,f=s._malloc(c),l=new Uint8Array(s.HEAPU8.buffer,f,c);l.set(new Uint8Array(e.buffer));const p=Int32Array.BYTES_PER_ELEMENT*(r-1)*2,h=s._malloc(p),d=new Uint8Array(s.HEAPU8.buffer,h,p),m=Float32Array.BYTES_PER_ELEMENT*(r-1),y=s._malloc(m),b=new Uint8Array(s.HEAPU8.buffer,y,m);u(f,r,i,h,y);const g=new Int32Array(d.buffer,d.byteOffset,2*(r-1)),w=new Float32Array(b.buffer,b.byteOffset,r-1).slice(0,r-1),v=g.slice(0,r-1),A=g.slice(r-1,2*r-2);return s._free(l.byteOffset),s._free(d.byteOffset),s._free(b.byteOffset),{mergeRow1:v,mergeRow2:A,heightsResult:w}})(r,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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SCxXQUFXeU4sRUFBUXhNLFNBR25DLE1BQU0wTixFQUFxQnZOLFdBQVdtTixtQkFBcUJsQixFQUFJLEdBQUssRUFDOUR1QixFQUFXYixFQUFhVSxRQUFRRSxHQUNoQ0UsRUFBWSxJQUFJN08sV0FBVytOLEVBQWFuTixPQUFPSyxPQUFRMk4sRUFBVUQsR0FHakVHLEVBQXVCdk4sYUFBYWdOLG1CQUFxQmxCLEVBQUksR0FDN0QwQixFQUFhaEIsRUFBYVUsUUFBUUssR0FDbENFLEVBQWMsSUFBSWhQLFdBQVcrTixFQUFhbk4sT0FBT0ssT0FBUThOLEVBQVlELEdBRzNFVixFQUFrQkksRUFBU25CLEVBQUdLLEVBQVFrQixFQUFVRyxHQUVoRCxNQUFNRSxFQUFjLElBQUk3TixXQUFXeU4sRUFBVTVOLE9BQVE0TixFQUFVSyxXQUFvQixHQUFQN0IsRUFBRSxJQUN4RThCLEVBQWdCLElBQUs1TixhQUFheU4sRUFBWS9OLE9BQVErTixFQUFZRSxXQUFZN0IsRUFBRSxHQUFJK0IsTUFBTSxFQUFHL0IsRUFBRSxHQUUvRmdDLEVBQVlKLEVBQVlHLE1BQU0sRUFBRy9CLEVBQUUsR0FDbkNpQyxFQUFZTCxFQUFZRyxNQUFNL0IsRUFBRSxFQUFHLEVBQUVBLEVBQUksR0FLL0MsT0FIQVUsRUFBYXdCLE1BQU1iLEVBQVFRLFlBQzNCbkIsRUFBYXdCLE1BQU1WLEVBQVVLLFlBQzdCbkIsRUFBYXdCLE1BQU1QLEVBQVlFLFlBQ3hCLENBQUNHLFlBQVdDLFlBQVdILGdCQUNoQyxFRHREUUssQ0FBMkJwQyxFQUFjQyxFQUFHQyxHQUN2Q3hLLE1BQU0yTSxJQUNQbEMsRUFBS2tDLGNBQWdCQSxFQUNyQkMsWUFBWW5DLEVBQUssR0FFekIsQ0FDQSxNQUFPdkwsR0FDSHVMLEVBQUtZLE1BQVFuTSxFQUNiME4sWUFBWW5DLEVBQ2hCLEciLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9wZXB0aWRlcy8uL25vZGVfbW9kdWxlcy9AZGF0YWdyb2stbGlicmFyaWVzL21hdGgvc3JjL2hpZXJhcmNoaWNhbC1jbHVzdGVyaW5nL3dhc20vd2FzbUNsdXN0ZXIuanMiLCJ3ZWJwYWNrOi8vcGVwdGlkZXMvd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vcGVwdGlkZXMvd2VicGFjay9ydW50aW1lL2FtZCBvcHRpb25zIiwid2VicGFjazovL3BlcHRpZGVzL3dlYnBhY2svcnVudGltZS9kZWZpbmUgcHJvcGVydHkgZ2V0dGVycyIsIndlYnBhY2s6Ly9wZXB0aWRlcy93ZWJwYWNrL3J1bnRpbWUvZ2xvYmFsIiwid2VicGFjazovL3BlcHRpZGVzL3dlYnBhY2svcnVudGltZS9oYXJtb255IG1vZHVsZSBkZWNvcmF0b3IiLCJ3ZWJwYWNrOi8vcGVwdGlkZXMvd2VicGFjay9ydW50aW1lL2hhc093blByb3BlcnR5IHNob3J0aGFuZCIsIndlYnBhY2s6Ly9wZXB0aWRlcy93ZWJwYWNrL3J1bnRpbWUvcHVibGljUGF0aCIsIndlYnBhY2s6Ly9wZXB0aWRlcy93ZWJwYWNrL3J1bnRpbWUvaW1wb3J0U2NyaXB0cyBjaHVuayBsb2FkaW5nIiwid2VicGFjazovL3BlcHRpZGVzLy4vbm9kZV9tb2R1bGVzL0BkYXRhZ3Jvay1saWJyYXJpZXMvbWF0aC9zcmMvaGllcmFyY2hpY2FsLWNsdXN0ZXJpbmcvd2FzbS9jbHVzdGVyaW5nLXdvcmtlci5qcyIsIndlYnBhY2s6Ly9wZXB0aWRlcy8uL25vZGVfbW9kdWxlcy9AZGF0YWdyb2stbGlicmFyaWVzL21hdGgvc3JjL2hpZXJhcmNoaWNhbC1jbHVzdGVyaW5nL3dhc20vY2x1c3Rlcml6ZXJXYXNtLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB2YXIgZXhwb3J0Q3BwTGliID0gKCgpID0+IHtcbiAgdmFyIF9zY3JpcHREaXIgPVxuICAgIHR5cGVvZiBkb2N1bWVudCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBkb2N1bWVudC5jdXJyZW50U2NyaXB0XG4gICAgICA/IGRvY3VtZW50LmN1cnJlbnRTY3JpcHQuc3JjXG4gICAgICA6IHVuZGVmaW5lZDtcblxuICByZXR1cm4gZnVuY3Rpb24gKGV4cG9ydENwcExpYiA9IHt9KSB7XG4gICAgdmFyIE1vZHVsZSA9IHR5cGVvZiBleHBvcnRDcHBMaWIgIT0gXCJ1bmRlZmluZWRcIiA/IGV4cG9ydENwcExpYiA6IHt9O1xuICAgIHZhciByZWFkeVByb21pc2VSZXNvbHZlLCByZWFkeVByb21pc2VSZWplY3Q7XG4gICAgTW9kdWxlW1wicmVhZHlcIl0gPSBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICByZWFkeVByb21pc2VSZXNvbHZlID0gcmVzb2x2ZTtcbiAgICAgIHJlYWR5UHJvbWlzZVJlamVjdCA9IHJlamVjdDtcbiAgICB9KTtcbiAgICB2YXIgbW9kdWxlT3ZlcnJpZGVzID0gT2JqZWN0LmFzc2lnbih7fSwgTW9kdWxlKTtcbiAgICB2YXIgYXJndW1lbnRzXyA9IFtdO1xuICAgIHZhciB0aGlzUHJvZ3JhbSA9IFwiLi90aGlzLnByb2dyYW1cIjtcbiAgICB2YXIgcXVpdF8gPSAoc3RhdHVzLCB0b1Rocm93KSA9PiB7XG4gICAgICB0aHJvdyB0b1Rocm93O1xuICAgIH07XG4gICAgdmFyIEVOVklST05NRU5UX0lTX1dFQiA9IHR5cGVvZiB3aW5kb3cgPT0gXCJvYmplY3RcIjtcbiAgICB2YXIgRU5WSVJPTk1FTlRfSVNfV09SS0VSID0gdHlwZW9mIGltcG9ydFNjcmlwdHMgPT0gXCJmdW5jdGlvblwiO1xuICAgIHZhciBFTlZJUk9OTUVOVF9JU19OT0RFID1cbiAgICAgIHR5cGVvZiBwcm9jZXNzID09IFwib2JqZWN0XCIgJiZcbiAgICAgIHR5cGVvZiBwcm9jZXNzLnZlcnNpb25zID09IFwib2JqZWN0XCIgJiZcbiAgICAgIHR5cGVvZiBwcm9jZXNzLnZlcnNpb25zLm5vZGUgPT0gXCJzdHJpbmdcIjtcbiAgICB2YXIgc2NyaXB0RGlyZWN0b3J5ID0gXCJcIjtcbiAgICBmdW5jdGlvbiBsb2NhdGVGaWxlKHBhdGgpIHtcbiAgICAgIGlmIChNb2R1bGVbXCJsb2NhdGVGaWxlXCJdKSB7XG4gICAgICAgIHJldHVybiBNb2R1bGVbXCJsb2NhdGVGaWxlXCJdKHBhdGgsIHNjcmlwdERpcmVjdG9yeSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gc2NyaXB0RGlyZWN0b3J5ICsgcGF0aDtcbiAgICB9XG4gICAgdmFyIHJlYWRfLCByZWFkQXN5bmMsIHJlYWRCaW5hcnksIHNldFdpbmRvd1RpdGxlO1xuICAgIGlmIChFTlZJUk9OTUVOVF9JU19XRUIgfHwgRU5WSVJPTk1FTlRfSVNfV09SS0VSKSB7XG4gICAgICBpZiAoRU5WSVJPTk1FTlRfSVNfV09SS0VSKSB7XG4gICAgICAgIHNjcmlwdERpcmVjdG9yeSA9IHNlbGYubG9jYXRpb24uaHJlZjtcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGRvY3VtZW50ICE9IFwidW5kZWZpbmVkXCIgJiYgZG9jdW1lbnQuY3VycmVudFNjcmlwdCkge1xuICAgICAgICBzY3JpcHREaXJlY3RvcnkgPSBkb2N1bWVudC5jdXJyZW50U2NyaXB0LnNyYztcbiAgICAgIH1cbiAgICAgIGlmIChfc2NyaXB0RGlyKSB7XG4gICAgICAgIHNjcmlwdERpcmVjdG9yeSA9IF9zY3JpcHREaXI7XG4gICAgICB9XG4gICAgICBpZiAoc2NyaXB0RGlyZWN0b3J5LmluZGV4T2YoXCJibG9iOlwiKSAhPT0gMCkge1xuICAgICAgICBzY3JpcHREaXJlY3RvcnkgPSBzY3JpcHREaXJlY3Rvcnkuc3Vic3RyKFxuICAgICAgICAgIDAsXG4gICAgICAgICAgc2NyaXB0RGlyZWN0b3J5LnJlcGxhY2UoL1s/I10uKi8sIFwiXCIpLmxhc3RJbmRleE9mKFwiL1wiKSArIDFcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNjcmlwdERpcmVjdG9yeSA9IFwiXCI7XG4gICAgICB9XG4gICAgICB7XG4gICAgICAgIHJlYWRfID0gKHVybCkgPT4ge1xuICAgICAgICAgIHZhciB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcbiAgICAgICAgICB4aHIub3BlbihcIkdFVFwiLCB1cmwsIGZhbHNlKTtcbiAgICAgICAgICB4aHIuc2VuZChudWxsKTtcbiAgICAgICAgICByZXR1cm4geGhyLnJlc3BvbnNlVGV4dDtcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKEVOVklST05NRU5UX0lTX1dPUktFUikge1xuICAgICAgICAgIHJlYWRCaW5hcnkgPSAodXJsKSA9PiB7XG4gICAgICAgICAgICB2YXIgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG4gICAgICAgICAgICB4aHIub3BlbihcIkdFVFwiLCB1cmwsIGZhbHNlKTtcbiAgICAgICAgICAgIHhoci5yZXNwb25zZVR5cGUgPSBcImFycmF5YnVmZmVyXCI7XG4gICAgICAgICAgICB4aHIuc2VuZChudWxsKTtcbiAgICAgICAgICAgIHJldHVybiBuZXcgVWludDhBcnJheSh4aHIucmVzcG9uc2UpO1xuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgcmVhZEFzeW5jID0gKHVybCwgb25sb2FkLCBvbmVycm9yKSA9PiB7XG4gICAgICAgICAgdmFyIHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuICAgICAgICAgIHhoci5vcGVuKFwiR0VUXCIsIHVybCwgdHJ1ZSk7XG4gICAgICAgICAgeGhyLnJlc3BvbnNlVHlwZSA9IFwiYXJyYXlidWZmZXJcIjtcbiAgICAgICAgICB4aHIub25sb2FkID0gKCkgPT4ge1xuICAgICAgICAgICAgaWYgKHhoci5zdGF0dXMgPT0gMjAwIHx8ICh4aHIuc3RhdHVzID09IDAgJiYgeGhyLnJlc3BvbnNlKSkge1xuICAgICAgICAgICAgICBvbmxvYWQoeGhyLnJlc3BvbnNlKTtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgb25lcnJvcigpO1xuICAgICAgICAgIH07XG4gICAgICAgICAgeGhyLm9uZXJyb3IgPSBvbmVycm9yO1xuICAgICAgICAgIHhoci5zZW5kKG51bGwpO1xuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgc2V0V2luZG93VGl0bGUgPSAodGl0bGUpID0+IChkb2N1bWVudC50aXRsZSA9IHRpdGxlKTtcbiAgICB9IGVsc2Uge1xuICAgIH1cbiAgICB2YXIgb3V0ID0gTW9kdWxlW1wicHJpbnRcIl0gfHwgY29uc29sZS5sb2cuYmluZChjb25zb2xlKTtcbiAgICB2YXIgZXJyID0gTW9kdWxlW1wicHJpbnRFcnJcIl0gfHwgY29uc29sZS53YXJuLmJpbmQoY29uc29sZSk7XG4gICAgT2JqZWN0LmFzc2lnbihNb2R1bGUsIG1vZHVsZU92ZXJyaWRlcyk7XG4gICAgbW9kdWxlT3ZlcnJpZGVzID0gbnVsbDtcbiAgICBpZiAoTW9kdWxlW1wiYXJndW1lbnRzXCJdKSBhcmd1bWVudHNfID0gTW9kdWxlW1wiYXJndW1lbnRzXCJdO1xuICAgIGlmIChNb2R1bGVbXCJ0aGlzUHJvZ3JhbVwiXSkgdGhpc1Byb2dyYW0gPSBNb2R1bGVbXCJ0aGlzUHJvZ3JhbVwiXTtcbiAgICBpZiAoTW9kdWxlW1wicXVpdFwiXSkgcXVpdF8gPSBNb2R1bGVbXCJxdWl0XCJdO1xuICAgIHZhciB3YXNtQmluYXJ5O1xuICAgIGlmIChNb2R1bGVbXCJ3YXNtQmluYXJ5XCJdKSB3YXNtQmluYXJ5ID0gTW9kdWxlW1wid2FzbUJpbmFyeVwiXTtcbiAgICB2YXIgbm9FeGl0UnVudGltZSA9IE1vZHVsZVtcIm5vRXhpdFJ1bnRpbWVcIl0gfHwgdHJ1ZTtcbiAgICBpZiAodHlwZW9mIFdlYkFzc2VtYmx5ICE9IFwib2JqZWN0XCIpIHtcbiAgICAgIGFib3J0KFwibm8gbmF0aXZlIHdhc20gc3VwcG9ydCBkZXRlY3RlZFwiKTtcbiAgICB9XG4gICAgdmFyIHdhc21NZW1vcnk7XG4gICAgdmFyIEFCT1JUID0gZmFsc2U7XG4gICAgdmFyIEVYSVRTVEFUVVM7XG4gICAgdmFyIEhFQVA4LCBIRUFQVTgsIEhFQVAxNiwgSEVBUFUxNiwgSEVBUDMyLCBIRUFQVTMyLCBIRUFQRjMyLCBIRUFQRjY0O1xuICAgIGZ1bmN0aW9uIHVwZGF0ZU1lbW9yeVZpZXdzKCkge1xuICAgICAgdmFyIGIgPSB3YXNtTWVtb3J5LmJ1ZmZlcjtcbiAgICAgIE1vZHVsZVtcIkhFQVA4XCJdID0gSEVBUDggPSBuZXcgSW50OEFycmF5KGIpO1xuICAgICAgTW9kdWxlW1wiSEVBUDE2XCJdID0gSEVBUDE2ID0gbmV3IEludDE2QXJyYXkoYik7XG4gICAgICBNb2R1bGVbXCJIRUFQMzJcIl0gPSBIRUFQMzIgPSBuZXcgSW50MzJBcnJheShiKTtcbiAgICAgIE1vZHVsZVtcIkhFQVBVOFwiXSA9IEhFQVBVOCA9IG5ldyBVaW50OEFycmF5KGIpO1xuICAgICAgTW9kdWxlW1wiSEVBUFUxNlwiXSA9IEhFQVBVMTYgPSBuZXcgVWludDE2QXJyYXkoYik7XG4gICAgICBNb2R1bGVbXCJIRUFQVTMyXCJdID0gSEVBUFUzMiA9IG5ldyBVaW50MzJBcnJheShiKTtcbiAgICAgIE1vZHVsZVtcIkhFQVBGMzJcIl0gPSBIRUFQRjMyID0gbmV3IEZsb2F0MzJBcnJheShiKTtcbiAgICAgIE1vZHVsZVtcIkhFQVBGNjRcIl0gPSBIRUFQRjY0ID0gbmV3IEZsb2F0NjRBcnJheShiKTtcbiAgICB9XG4gICAgdmFyIHdhc21UYWJsZTtcbiAgICB2YXIgX19BVFBSRVJVTl9fID0gW107XG4gICAgdmFyIF9fQVRJTklUX18gPSBbXTtcbiAgICB2YXIgX19BVFBPU1RSVU5fXyA9IFtdO1xuICAgIHZhciBydW50aW1lSW5pdGlhbGl6ZWQgPSBmYWxzZTtcbiAgICBmdW5jdGlvbiBwcmVSdW4oKSB7XG4gICAgICBpZiAoTW9kdWxlW1wicHJlUnVuXCJdKSB7XG4gICAgICAgIGlmICh0eXBlb2YgTW9kdWxlW1wicHJlUnVuXCJdID09IFwiZnVuY3Rpb25cIilcbiAgICAgICAgICBNb2R1bGVbXCJwcmVSdW5cIl0gPSBbTW9kdWxlW1wicHJlUnVuXCJdXTtcbiAgICAgICAgd2hpbGUgKE1vZHVsZVtcInByZVJ1blwiXS5sZW5ndGgpIHtcbiAgICAgICAgICBhZGRPblByZVJ1bihNb2R1bGVbXCJwcmVSdW5cIl0uc2hpZnQoKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGNhbGxSdW50aW1lQ2FsbGJhY2tzKF9fQVRQUkVSVU5fXyk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGluaXRSdW50aW1lKCkge1xuICAgICAgcnVudGltZUluaXRpYWxpemVkID0gdHJ1ZTtcbiAgICAgIGNhbGxSdW50aW1lQ2FsbGJhY2tzKF9fQVRJTklUX18pO1xuICAgIH1cbiAgICBmdW5jdGlvbiBwb3N0UnVuKCkge1xuICAgICAgaWYgKE1vZHVsZVtcInBvc3RSdW5cIl0pIHtcbiAgICAgICAgaWYgKHR5cGVvZiBNb2R1bGVbXCJwb3N0UnVuXCJdID09IFwiZnVuY3Rpb25cIilcbiAgICAgICAgICBNb2R1bGVbXCJwb3N0UnVuXCJdID0gW01vZHVsZVtcInBvc3RSdW5cIl1dO1xuICAgICAgICB3aGlsZSAoTW9kdWxlW1wicG9zdFJ1blwiXS5sZW5ndGgpIHtcbiAgICAgICAgICBhZGRPblBvc3RSdW4oTW9kdWxlW1wicG9zdFJ1blwiXS5zaGlmdCgpKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgY2FsbFJ1bnRpbWVDYWxsYmFja3MoX19BVFBPU1RSVU5fXyk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGFkZE9uUHJlUnVuKGNiKSB7XG4gICAgICBfX0FUUFJFUlVOX18udW5zaGlmdChjYik7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGFkZE9uSW5pdChjYikge1xuICAgICAgX19BVElOSVRfXy51bnNoaWZ0KGNiKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gYWRkT25Qb3N0UnVuKGNiKSB7XG4gICAgICBfX0FUUE9TVFJVTl9fLnVuc2hpZnQoY2IpO1xuICAgIH1cbiAgICB2YXIgcnVuRGVwZW5kZW5jaWVzID0gMDtcbiAgICB2YXIgcnVuRGVwZW5kZW5jeVdhdGNoZXIgPSBudWxsO1xuICAgIHZhciBkZXBlbmRlbmNpZXNGdWxmaWxsZWQgPSBudWxsO1xuICAgIGZ1bmN0aW9uIGFkZFJ1bkRlcGVuZGVuY3koaWQpIHtcbiAgICAgIHJ1bkRlcGVuZGVuY2llcysrO1xuICAgICAgaWYgKE1vZHVsZVtcIm1vbml0b3JSdW5EZXBlbmRlbmNpZXNcIl0pIHtcbiAgICAgICAgTW9kdWxlW1wibW9uaXRvclJ1bkRlcGVuZGVuY2llc1wiXShydW5EZXBlbmRlbmNpZXMpO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiByZW1vdmVSdW5EZXBlbmRlbmN5KGlkKSB7XG4gICAgICBydW5EZXBlbmRlbmNpZXMtLTtcbiAgICAgIGlmIChNb2R1bGVbXCJtb25pdG9yUnVuRGVwZW5kZW5jaWVzXCJdKSB7XG4gICAgICAgIE1vZHVsZVtcIm1vbml0b3JSdW5EZXBlbmRlbmNpZXNcIl0ocnVuRGVwZW5kZW5jaWVzKTtcbiAgICAgIH1cbiAgICAgIGlmIChydW5EZXBlbmRlbmNpZXMgPT0gMCkge1xuICAgICAgICBpZiAocnVuRGVwZW5kZW5jeVdhdGNoZXIgIT09IG51bGwpIHtcbiAgICAgICAgICBjbGVhckludGVydmFsKHJ1bkRlcGVuZGVuY3lXYXRjaGVyKTtcbiAgICAgICAgICBydW5EZXBlbmRlbmN5V2F0Y2hlciA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGRlcGVuZGVuY2llc0Z1bGZpbGxlZCkge1xuICAgICAgICAgIHZhciBjYWxsYmFjayA9IGRlcGVuZGVuY2llc0Z1bGZpbGxlZDtcbiAgICAgICAgICBkZXBlbmRlbmNpZXNGdWxmaWxsZWQgPSBudWxsO1xuICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gYWJvcnQod2hhdCkge1xuICAgICAgaWYgKE1vZHVsZVtcIm9uQWJvcnRcIl0pIHtcbiAgICAgICAgTW9kdWxlW1wib25BYm9ydFwiXSh3aGF0KTtcbiAgICAgIH1cbiAgICAgIHdoYXQgPSBcIkFib3J0ZWQoXCIgKyB3aGF0ICsgXCIpXCI7XG4gICAgICBlcnIod2hhdCk7XG4gICAgICBBQk9SVCA9IHRydWU7XG4gICAgICBFWElUU1RBVFVTID0gMTtcbiAgICAgIHdoYXQgKz0gXCIuIEJ1aWxkIHdpdGggLXNBU1NFUlRJT05TIGZvciBtb3JlIGluZm8uXCI7XG4gICAgICB2YXIgZSA9IG5ldyBXZWJBc3NlbWJseS5SdW50aW1lRXJyb3Iod2hhdCk7XG4gICAgICByZWFkeVByb21pc2VSZWplY3QoZSk7XG4gICAgICB0aHJvdyBlO1xuICAgIH1cbiAgICB2YXIgZGF0YVVSSVByZWZpeCA9IFwiZGF0YTphcHBsaWNhdGlvbi9vY3RldC1zdHJlYW07YmFzZTY0LFwiO1xuICAgIGZ1bmN0aW9uIGlzRGF0YVVSSShmaWxlbmFtZSkge1xuICAgICAgcmV0dXJuIGZpbGVuYW1lLnN0YXJ0c1dpdGgoZGF0YVVSSVByZWZpeCk7XG4gICAgfVxuICAgIHZhciB3YXNtQmluYXJ5RmlsZTtcbiAgICB3YXNtQmluYXJ5RmlsZSA9IFwid2FzbUNsdXN0ZXIud2FzbVwiO1xuICAgIGlmICghaXNEYXRhVVJJKHdhc21CaW5hcnlGaWxlKSkge1xuICAgICAgd2FzbUJpbmFyeUZpbGUgPSBsb2NhdGVGaWxlKHdhc21CaW5hcnlGaWxlKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZ2V0QmluYXJ5KGZpbGUpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGlmIChmaWxlID09IHdhc21CaW5hcnlGaWxlICYmIHdhc21CaW5hcnkpIHtcbiAgICAgICAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkod2FzbUJpbmFyeSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJlYWRCaW5hcnkpIHtcbiAgICAgICAgICByZXR1cm4gcmVhZEJpbmFyeShmaWxlKTtcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBcImJvdGggYXN5bmMgYW5kIHN5bmMgZmV0Y2hpbmcgb2YgdGhlIHdhc20gZmFpbGVkXCI7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgYWJvcnQoZXJyKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gZ2V0QmluYXJ5UHJvbWlzZShiaW5hcnlGaWxlKSB7XG4gICAgICBpZiAoIXdhc21CaW5hcnkgJiYgKEVOVklST05NRU5UX0lTX1dFQiB8fCBFTlZJUk9OTUVOVF9JU19XT1JLRVIpKSB7XG4gICAgICAgIGlmICh0eXBlb2YgZmV0Y2ggPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgcmV0dXJuIGZldGNoKGJpbmFyeUZpbGUsIHsgY3JlZGVudGlhbHM6IFwic2FtZS1vcmlnaW5cIiB9KVxuICAgICAgICAgICAgLnRoZW4oZnVuY3Rpb24gKHJlc3BvbnNlKSB7XG4gICAgICAgICAgICAgIGlmICghcmVzcG9uc2VbXCJva1wiXSkge1xuICAgICAgICAgICAgICAgIHRocm93IFwiZmFpbGVkIHRvIGxvYWQgd2FzbSBiaW5hcnkgZmlsZSBhdCAnXCIgKyBiaW5hcnlGaWxlICsgXCInXCI7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlW1wiYXJyYXlCdWZmZXJcIl0oKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuY2F0Y2goZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICByZXR1cm4gZ2V0QmluYXJ5KGJpbmFyeUZpbGUpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIGdldEJpbmFyeShiaW5hcnlGaWxlKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICBmdW5jdGlvbiBpbnN0YW50aWF0ZUFycmF5QnVmZmVyKGJpbmFyeUZpbGUsIGltcG9ydHMsIHJlY2VpdmVyKSB7XG4gICAgICByZXR1cm4gZ2V0QmluYXJ5UHJvbWlzZShiaW5hcnlGaWxlKVxuICAgICAgICAudGhlbihmdW5jdGlvbiAoYmluYXJ5KSB7XG4gICAgICAgICAgcmV0dXJuIFdlYkFzc2VtYmx5Lmluc3RhbnRpYXRlKGJpbmFyeSwgaW1wb3J0cyk7XG4gICAgICAgIH0pXG4gICAgICAgIC50aGVuKGZ1bmN0aW9uIChpbnN0YW5jZSkge1xuICAgICAgICAgIHJldHVybiBpbnN0YW5jZTtcbiAgICAgICAgfSlcbiAgICAgICAgLnRoZW4ocmVjZWl2ZXIsIGZ1bmN0aW9uIChyZWFzb24pIHtcbiAgICAgICAgICBlcnIoXCJmYWlsZWQgdG8gYXN5bmNocm9ub3VzbHkgcHJlcGFyZSB3YXNtOiBcIiArIHJlYXNvbik7XG4gICAgICAgICAgYWJvcnQocmVhc29uKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGluc3RhbnRpYXRlQXN5bmMoYmluYXJ5LCBiaW5hcnlGaWxlLCBpbXBvcnRzLCBjYWxsYmFjaykge1xuICAgICAgaWYgKFxuICAgICAgICAhYmluYXJ5ICYmXG4gICAgICAgIHR5cGVvZiBXZWJBc3NlbWJseS5pbnN0YW50aWF0ZVN0cmVhbWluZyA9PSBcImZ1bmN0aW9uXCIgJiZcbiAgICAgICAgIWlzRGF0YVVSSShiaW5hcnlGaWxlKSAmJlxuICAgICAgICB0eXBlb2YgZmV0Y2ggPT0gXCJmdW5jdGlvblwiXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuIGZldGNoKGJpbmFyeUZpbGUsIHsgY3JlZGVudGlhbHM6IFwic2FtZS1vcmlnaW5cIiB9KS50aGVuKGZ1bmN0aW9uIChcbiAgICAgICAgICByZXNwb25zZVxuICAgICAgICApIHtcbiAgICAgICAgICB2YXIgcmVzdWx0ID0gV2ViQXNzZW1ibHkuaW5zdGFudGlhdGVTdHJlYW1pbmcocmVzcG9uc2UsIGltcG9ydHMpO1xuICAgICAgICAgIHJldHVybiByZXN1bHQudGhlbihjYWxsYmFjaywgZnVuY3Rpb24gKHJlYXNvbikge1xuICAgICAgICAgICAgZXJyKFwid2FzbSBzdHJlYW1pbmcgY29tcGlsZSBmYWlsZWQ6IFwiICsgcmVhc29uKTtcbiAgICAgICAgICAgIGVycihcImZhbGxpbmcgYmFjayB0byBBcnJheUJ1ZmZlciBpbnN0YW50aWF0aW9uXCIpO1xuICAgICAgICAgICAgcmV0dXJuIGluc3RhbnRpYXRlQXJyYXlCdWZmZXIoYmluYXJ5RmlsZSwgaW1wb3J0cywgY2FsbGJhY2spO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBpbnN0YW50aWF0ZUFycmF5QnVmZmVyKGJpbmFyeUZpbGUsIGltcG9ydHMsIGNhbGxiYWNrKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gY3JlYXRlV2FzbSgpIHtcbiAgICAgIHZhciBpbmZvID0geyBhOiB3YXNtSW1wb3J0cyB9O1xuICAgICAgZnVuY3Rpb24gcmVjZWl2ZUluc3RhbmNlKGluc3RhbmNlLCBtb2R1bGUpIHtcbiAgICAgICAgdmFyIGV4cG9ydHMgPSBpbnN0YW5jZS5leHBvcnRzO1xuICAgICAgICBNb2R1bGVbXCJhc21cIl0gPSBleHBvcnRzO1xuICAgICAgICB3YXNtTWVtb3J5ID0gTW9kdWxlW1wiYXNtXCJdW1wiZVwiXTtcbiAgICAgICAgdXBkYXRlTWVtb3J5Vmlld3MoKTtcbiAgICAgICAgd2FzbVRhYmxlID0gTW9kdWxlW1wiYXNtXCJdW1wiaVwiXTtcbiAgICAgICAgYWRkT25Jbml0KE1vZHVsZVtcImFzbVwiXVtcImZcIl0pO1xuICAgICAgICByZW1vdmVSdW5EZXBlbmRlbmN5KFwid2FzbS1pbnN0YW50aWF0ZVwiKTtcbiAgICAgICAgcmV0dXJuIGV4cG9ydHM7XG4gICAgICB9XG4gICAgICBhZGRSdW5EZXBlbmRlbmN5KFwid2FzbS1pbnN0YW50aWF0ZVwiKTtcbiAgICAgIGZ1bmN0aW9uIHJlY2VpdmVJbnN0YW50aWF0aW9uUmVzdWx0KHJlc3VsdCkge1xuICAgICAgICByZWNlaXZlSW5zdGFuY2UocmVzdWx0W1wiaW5zdGFuY2VcIl0pO1xuICAgICAgfVxuICAgICAgaWYgKE1vZHVsZVtcImluc3RhbnRpYXRlV2FzbVwiXSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHJldHVybiBNb2R1bGVbXCJpbnN0YW50aWF0ZVdhc21cIl0oaW5mbywgcmVjZWl2ZUluc3RhbmNlKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIGVycihcIk1vZHVsZS5pbnN0YW50aWF0ZVdhc20gY2FsbGJhY2sgZmFpbGVkIHdpdGggZXJyb3I6IFwiICsgZSk7XG4gICAgICAgICAgcmVhZHlQcm9taXNlUmVqZWN0KGUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpbnN0YW50aWF0ZUFzeW5jKFxuICAgICAgICB3YXNtQmluYXJ5LFxuICAgICAgICB3YXNtQmluYXJ5RmlsZSxcbiAgICAgICAgaW5mbyxcbiAgICAgICAgcmVjZWl2ZUluc3RhbnRpYXRpb25SZXN1bHRcbiAgICAgICkuY2F0Y2gocmVhZHlQcm9taXNlUmVqZWN0KTtcbiAgICAgIHJldHVybiB7fTtcbiAgICB9XG4gICAgZnVuY3Rpb24gY2FsbFJ1bnRpbWVDYWxsYmFja3MoY2FsbGJhY2tzKSB7XG4gICAgICB3aGlsZSAoY2FsbGJhY2tzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgY2FsbGJhY2tzLnNoaWZ0KCkoTW9kdWxlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gRXhjZXB0aW9uSW5mbyhleGNQdHIpIHtcbiAgICAgIHRoaXMuZXhjUHRyID0gZXhjUHRyO1xuICAgICAgdGhpcy5wdHIgPSBleGNQdHIgLSAyNDtcbiAgICAgIHRoaXMuc2V0X3R5cGUgPSBmdW5jdGlvbiAodHlwZSkge1xuICAgICAgICBIRUFQVTMyWyh0aGlzLnB0ciArIDQpID4+IDJdID0gdHlwZTtcbiAgICAgIH07XG4gICAgICB0aGlzLmdldF90eXBlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gSEVBUFUzMlsodGhpcy5wdHIgKyA0KSA+PiAyXTtcbiAgICAgIH07XG4gICAgICB0aGlzLnNldF9kZXN0cnVjdG9yID0gZnVuY3Rpb24gKGRlc3RydWN0b3IpIHtcbiAgICAgICAgSEVBUFUzMlsodGhpcy5wdHIgKyA4KSA+PiAyXSA9IGRlc3RydWN0b3I7XG4gICAgICB9O1xuICAgICAgdGhpcy5nZXRfZGVzdHJ1Y3RvciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIEhFQVBVMzJbKHRoaXMucHRyICsgOCkgPj4gMl07XG4gICAgICB9O1xuICAgICAgdGhpcy5zZXRfY2F1Z2h0ID0gZnVuY3Rpb24gKGNhdWdodCkge1xuICAgICAgICBjYXVnaHQgPSBjYXVnaHQgPyAxIDogMDtcbiAgICAgICAgSEVBUDhbKHRoaXMucHRyICsgMTIpID4+IDBdID0gY2F1Z2h0O1xuICAgICAgfTtcbiAgICAgIHRoaXMuZ2V0X2NhdWdodCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIEhFQVA4Wyh0aGlzLnB0ciArIDEyKSA+PiAwXSAhPSAwO1xuICAgICAgfTtcbiAgICAgIHRoaXMuc2V0X3JldGhyb3duID0gZnVuY3Rpb24gKHJldGhyb3duKSB7XG4gICAgICAgIHJldGhyb3duID0gcmV0aHJvd24gPyAxIDogMDtcbiAgICAgICAgSEVBUDhbKHRoaXMucHRyICsgMTMpID4+IDBdID0gcmV0aHJvd247XG4gICAgICB9O1xuICAgICAgdGhpcy5nZXRfcmV0aHJvd24gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBIRUFQOFsodGhpcy5wdHIgKyAxMykgPj4gMF0gIT0gMDtcbiAgICAgIH07XG4gICAgICB0aGlzLmluaXQgPSBmdW5jdGlvbiAodHlwZSwgZGVzdHJ1Y3Rvcikge1xuICAgICAgICB0aGlzLnNldF9hZGp1c3RlZF9wdHIoMCk7XG4gICAgICAgIHRoaXMuc2V0X3R5cGUodHlwZSk7XG4gICAgICAgIHRoaXMuc2V0X2Rlc3RydWN0b3IoZGVzdHJ1Y3Rvcik7XG4gICAgICB9O1xuICAgICAgdGhpcy5zZXRfYWRqdXN0ZWRfcHRyID0gZnVuY3Rpb24gKGFkanVzdGVkUHRyKSB7XG4gICAgICAgIEhFQVBVMzJbKHRoaXMucHRyICsgMTYpID4+IDJdID0gYWRqdXN0ZWRQdHI7XG4gICAgICB9O1xuICAgICAgdGhpcy5nZXRfYWRqdXN0ZWRfcHRyID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gSEVBUFUzMlsodGhpcy5wdHIgKyAxNikgPj4gMl07XG4gICAgICB9O1xuICAgICAgdGhpcy5nZXRfZXhjZXB0aW9uX3B0ciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGlzUG9pbnRlciA9IF9fX2N4YV9pc19wb2ludGVyX3R5cGUodGhpcy5nZXRfdHlwZSgpKTtcbiAgICAgICAgaWYgKGlzUG9pbnRlcikge1xuICAgICAgICAgIHJldHVybiBIRUFQVTMyW3RoaXMuZXhjUHRyID4+IDJdO1xuICAgICAgICB9XG4gICAgICAgIHZhciBhZGp1c3RlZCA9IHRoaXMuZ2V0X2FkanVzdGVkX3B0cigpO1xuICAgICAgICBpZiAoYWRqdXN0ZWQgIT09IDApIHJldHVybiBhZGp1c3RlZDtcbiAgICAgICAgcmV0dXJuIHRoaXMuZXhjUHRyO1xuICAgICAgfTtcbiAgICB9XG4gICAgdmFyIGV4Y2VwdGlvbkxhc3QgPSAwO1xuICAgIHZhciB1bmNhdWdodEV4Y2VwdGlvbkNvdW50ID0gMDtcbiAgICBmdW5jdGlvbiBfX19jeGFfdGhyb3cocHRyLCB0eXBlLCBkZXN0cnVjdG9yKSB7XG4gICAgICB2YXIgaW5mbyA9IG5ldyBFeGNlcHRpb25JbmZvKHB0cik7XG4gICAgICBpbmZvLmluaXQodHlwZSwgZGVzdHJ1Y3Rvcik7XG4gICAgICBleGNlcHRpb25MYXN0ID0gcHRyO1xuICAgICAgdW5jYXVnaHRFeGNlcHRpb25Db3VudCsrO1xuICAgICAgdGhyb3cgZXhjZXB0aW9uTGFzdDtcbiAgICB9XG4gICAgZnVuY3Rpb24gX2Fib3J0KCkge1xuICAgICAgYWJvcnQoXCJcIik7XG4gICAgfVxuICAgIGZ1bmN0aW9uIF9lbXNjcmlwdGVuX21lbWNweV9iaWcoZGVzdCwgc3JjLCBudW0pIHtcbiAgICAgIEhFQVBVOC5jb3B5V2l0aGluKGRlc3QsIHNyYywgc3JjICsgbnVtKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZ2V0SGVhcE1heCgpIHtcbiAgICAgIHJldHVybiAyMTQ3NDgzNjQ4O1xuICAgIH1cbiAgICBmdW5jdGlvbiBlbXNjcmlwdGVuX3JlYWxsb2NfYnVmZmVyKHNpemUpIHtcbiAgICAgIHZhciBiID0gd2FzbU1lbW9yeS5idWZmZXI7XG4gICAgICB0cnkge1xuICAgICAgICB3YXNtTWVtb3J5Lmdyb3coKHNpemUgLSBiLmJ5dGVMZW5ndGggKyA2NTUzNSkgPj4+IDE2KTtcbiAgICAgICAgdXBkYXRlTWVtb3J5Vmlld3MoKTtcbiAgICAgICAgcmV0dXJuIDE7XG4gICAgICB9IGNhdGNoIChlKSB7fVxuICAgIH1cbiAgICBmdW5jdGlvbiBfZW1zY3JpcHRlbl9yZXNpemVfaGVhcChyZXF1ZXN0ZWRTaXplKSB7XG4gICAgICB2YXIgb2xkU2l6ZSA9IEhFQVBVOC5sZW5ndGg7XG4gICAgICByZXF1ZXN0ZWRTaXplID0gcmVxdWVzdGVkU2l6ZSA+Pj4gMDtcbiAgICAgIHZhciBtYXhIZWFwU2l6ZSA9IGdldEhlYXBNYXgoKTtcbiAgICAgIGlmIChyZXF1ZXN0ZWRTaXplID4gbWF4SGVhcFNpemUpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgbGV0IGFsaWduVXAgPSAoeCwgbXVsdGlwbGUpID0+XG4gICAgICAgIHggKyAoKG11bHRpcGxlIC0gKHggJSBtdWx0aXBsZSkpICUgbXVsdGlwbGUpO1xuICAgICAgZm9yICh2YXIgY3V0RG93biA9IDE7IGN1dERvd24gPD0gNDsgY3V0RG93biAqPSAyKSB7XG4gICAgICAgIHZhciBvdmVyR3Jvd25IZWFwU2l6ZSA9IG9sZFNpemUgKiAoMSArIDAuMiAvIGN1dERvd24pO1xuICAgICAgICBvdmVyR3Jvd25IZWFwU2l6ZSA9IE1hdGgubWluKFxuICAgICAgICAgIG92ZXJHcm93bkhlYXBTaXplLFxuICAgICAgICAgIHJlcXVlc3RlZFNpemUgKyAxMDA2NjMyOTZcbiAgICAgICAgKTtcbiAgICAgICAgdmFyIG5ld1NpemUgPSBNYXRoLm1pbihcbiAgICAgICAgICBtYXhIZWFwU2l6ZSxcbiAgICAgICAgICBhbGlnblVwKE1hdGgubWF4KHJlcXVlc3RlZFNpemUsIG92ZXJHcm93bkhlYXBTaXplKSwgNjU1MzYpXG4gICAgICAgICk7XG4gICAgICAgIHZhciByZXBsYWNlbWVudCA9IGVtc2NyaXB0ZW5fcmVhbGxvY19idWZmZXIobmV3U2l6ZSk7XG4gICAgICAgIGlmIChyZXBsYWNlbWVudCkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGdldENGdW5jKGlkZW50KSB7XG4gICAgICB2YXIgZnVuYyA9IE1vZHVsZVtcIl9cIiArIGlkZW50XTtcbiAgICAgIHJldHVybiBmdW5jO1xuICAgIH1cbiAgICBmdW5jdGlvbiB3cml0ZUFycmF5VG9NZW1vcnkoYXJyYXksIGJ1ZmZlcikge1xuICAgICAgSEVBUDguc2V0KGFycmF5LCBidWZmZXIpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBsZW5ndGhCeXRlc1VURjgoc3RyKSB7XG4gICAgICB2YXIgbGVuID0gMDtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3RyLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIHZhciBjID0gc3RyLmNoYXJDb2RlQXQoaSk7XG4gICAgICAgIGlmIChjIDw9IDEyNykge1xuICAgICAgICAgIGxlbisrO1xuICAgICAgICB9IGVsc2UgaWYgKGMgPD0gMjA0Nykge1xuICAgICAgICAgIGxlbiArPSAyO1xuICAgICAgICB9IGVsc2UgaWYgKGMgPj0gNTUyOTYgJiYgYyA8PSA1NzM0Mykge1xuICAgICAgICAgIGxlbiArPSA0O1xuICAgICAgICAgICsraTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBsZW4gKz0gMztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGxlbjtcbiAgICB9XG4gICAgZnVuY3Rpb24gc3RyaW5nVG9VVEY4QXJyYXkoc3RyLCBoZWFwLCBvdXRJZHgsIG1heEJ5dGVzVG9Xcml0ZSkge1xuICAgICAgaWYgKCEobWF4Qnl0ZXNUb1dyaXRlID4gMCkpIHJldHVybiAwO1xuICAgICAgdmFyIHN0YXJ0SWR4ID0gb3V0SWR4O1xuICAgICAgdmFyIGVuZElkeCA9IG91dElkeCArIG1heEJ5dGVzVG9Xcml0ZSAtIDE7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN0ci5sZW5ndGg7ICsraSkge1xuICAgICAgICB2YXIgdSA9IHN0ci5jaGFyQ29kZUF0KGkpO1xuICAgICAgICBpZiAodSA+PSA1NTI5NiAmJiB1IDw9IDU3MzQzKSB7XG4gICAgICAgICAgdmFyIHUxID0gc3RyLmNoYXJDb2RlQXQoKytpKTtcbiAgICAgICAgICB1ID0gKDY1NTM2ICsgKCh1ICYgMTAyMykgPDwgMTApKSB8ICh1MSAmIDEwMjMpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh1IDw9IDEyNykge1xuICAgICAgICAgIGlmIChvdXRJZHggPj0gZW5kSWR4KSBicmVhaztcbiAgICAgICAgICBoZWFwW291dElkeCsrXSA9IHU7XG4gICAgICAgIH0gZWxzZSBpZiAodSA8PSAyMDQ3KSB7XG4gICAgICAgICAgaWYgKG91dElkeCArIDEgPj0gZW5kSWR4KSBicmVhaztcbiAgICAgICAgICBoZWFwW291dElkeCsrXSA9IDE5MiB8ICh1ID4+IDYpO1xuICAgICAgICAgIGhlYXBbb3V0SWR4KytdID0gMTI4IHwgKHUgJiA2Myk7XG4gICAgICAgIH0gZWxzZSBpZiAodSA8PSA2NTUzNSkge1xuICAgICAgICAgIGlmIChvdXRJZHggKyAyID49IGVuZElkeCkgYnJlYWs7XG4gICAgICAgICAgaGVhcFtvdXRJZHgrK10gPSAyMjQgfCAodSA+PiAxMik7XG4gICAgICAgICAgaGVhcFtvdXRJZHgrK10gPSAxMjggfCAoKHUgPj4gNikgJiA2Myk7XG4gICAgICAgICAgaGVhcFtvdXRJZHgrK10gPSAxMjggfCAodSAmIDYzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAob3V0SWR4ICsgMyA+PSBlbmRJZHgpIGJyZWFrO1xuICAgICAgICAgIGhlYXBbb3V0SWR4KytdID0gMjQwIHwgKHUgPj4gMTgpO1xuICAgICAgICAgIGhlYXBbb3V0SWR4KytdID0gMTI4IHwgKCh1ID4+IDEyKSAmIDYzKTtcbiAgICAgICAgICBoZWFwW291dElkeCsrXSA9IDEyOCB8ICgodSA+PiA2KSAmIDYzKTtcbiAgICAgICAgICBoZWFwW291dElkeCsrXSA9IDEyOCB8ICh1ICYgNjMpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBoZWFwW291dElkeF0gPSAwO1xuICAgICAgcmV0dXJuIG91dElkeCAtIHN0YXJ0SWR4O1xuICAgIH1cbiAgICBmdW5jdGlvbiBzdHJpbmdUb1VURjgoc3RyLCBvdXRQdHIsIG1heEJ5dGVzVG9Xcml0ZSkge1xuICAgICAgcmV0dXJuIHN0cmluZ1RvVVRGOEFycmF5KHN0ciwgSEVBUFU4LCBvdXRQdHIsIG1heEJ5dGVzVG9Xcml0ZSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHN0cmluZ1RvVVRGOE9uU3RhY2soc3RyKSB7XG4gICAgICB2YXIgc2l6ZSA9IGxlbmd0aEJ5dGVzVVRGOChzdHIpICsgMTtcbiAgICAgIHZhciByZXQgPSBzdGFja0FsbG9jKHNpemUpO1xuICAgICAgc3RyaW5nVG9VVEY4KHN0ciwgcmV0LCBzaXplKTtcbiAgICAgIHJldHVybiByZXQ7XG4gICAgfVxuICAgIHZhciBVVEY4RGVjb2RlciA9XG4gICAgICB0eXBlb2YgVGV4dERlY29kZXIgIT0gXCJ1bmRlZmluZWRcIiA/IG5ldyBUZXh0RGVjb2RlcihcInV0ZjhcIikgOiB1bmRlZmluZWQ7XG4gICAgZnVuY3Rpb24gVVRGOEFycmF5VG9TdHJpbmcoaGVhcE9yQXJyYXksIGlkeCwgbWF4Qnl0ZXNUb1JlYWQpIHtcbiAgICAgIHZhciBlbmRJZHggPSBpZHggKyBtYXhCeXRlc1RvUmVhZDtcbiAgICAgIHZhciBlbmRQdHIgPSBpZHg7XG4gICAgICB3aGlsZSAoaGVhcE9yQXJyYXlbZW5kUHRyXSAmJiAhKGVuZFB0ciA+PSBlbmRJZHgpKSArK2VuZFB0cjtcbiAgICAgIGlmIChlbmRQdHIgLSBpZHggPiAxNiAmJiBoZWFwT3JBcnJheS5idWZmZXIgJiYgVVRGOERlY29kZXIpIHtcbiAgICAgICAgcmV0dXJuIFVURjhEZWNvZGVyLmRlY29kZShoZWFwT3JBcnJheS5zdWJhcnJheShpZHgsIGVuZFB0cikpO1xuICAgICAgfVxuICAgICAgdmFyIHN0ciA9IFwiXCI7XG4gICAgICB3aGlsZSAoaWR4IDwgZW5kUHRyKSB7XG4gICAgICAgIHZhciB1MCA9IGhlYXBPckFycmF5W2lkeCsrXTtcbiAgICAgICAgaWYgKCEodTAgJiAxMjgpKSB7XG4gICAgICAgICAgc3RyICs9IFN0cmluZy5mcm9tQ2hhckNvZGUodTApO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIHZhciB1MSA9IGhlYXBPckFycmF5W2lkeCsrXSAmIDYzO1xuICAgICAgICBpZiAoKHUwICYgMjI0KSA9PSAxOTIpIHtcbiAgICAgICAgICBzdHIgKz0gU3RyaW5nLmZyb21DaGFyQ29kZSgoKHUwICYgMzEpIDw8IDYpIHwgdTEpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIHZhciB1MiA9IGhlYXBPckFycmF5W2lkeCsrXSAmIDYzO1xuICAgICAgICBpZiAoKHUwICYgMjQwKSA9PSAyMjQpIHtcbiAgICAgICAgICB1MCA9ICgodTAgJiAxNSkgPDwgMTIpIHwgKHUxIDw8IDYpIHwgdTI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdTAgPVxuICAgICAgICAgICAgKCh1MCAmIDcpIDw8IDE4KSB8XG4gICAgICAgICAgICAodTEgPDwgMTIpIHxcbiAgICAgICAgICAgICh1MiA8PCA2KSB8XG4gICAgICAgICAgICAoaGVhcE9yQXJyYXlbaWR4KytdICYgNjMpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh1MCA8IDY1NTM2KSB7XG4gICAgICAgICAgc3RyICs9IFN0cmluZy5mcm9tQ2hhckNvZGUodTApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhciBjaCA9IHUwIC0gNjU1MzY7XG4gICAgICAgICAgc3RyICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoNTUyOTYgfCAoY2ggPj4gMTApLCA1NjMyMCB8IChjaCAmIDEwMjMpKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHN0cjtcbiAgICB9XG4gICAgZnVuY3Rpb24gVVRGOFRvU3RyaW5nKHB0ciwgbWF4Qnl0ZXNUb1JlYWQpIHtcbiAgICAgIHJldHVybiBwdHIgPyBVVEY4QXJyYXlUb1N0cmluZyhIRUFQVTgsIHB0ciwgbWF4Qnl0ZXNUb1JlYWQpIDogXCJcIjtcbiAgICB9XG4gICAgZnVuY3Rpb24gY2NhbGwoaWRlbnQsIHJldHVyblR5cGUsIGFyZ1R5cGVzLCBhcmdzLCBvcHRzKSB7XG4gICAgICB2YXIgdG9DID0ge1xuICAgICAgICBzdHJpbmc6IChzdHIpID0+IHtcbiAgICAgICAgICB2YXIgcmV0ID0gMDtcbiAgICAgICAgICBpZiAoc3RyICE9PSBudWxsICYmIHN0ciAhPT0gdW5kZWZpbmVkICYmIHN0ciAhPT0gMCkge1xuICAgICAgICAgICAgcmV0ID0gc3RyaW5nVG9VVEY4T25TdGFjayhzdHIpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gcmV0O1xuICAgICAgICB9LFxuICAgICAgICBhcnJheTogKGFycikgPT4ge1xuICAgICAgICAgIHZhciByZXQgPSBzdGFja0FsbG9jKGFyci5sZW5ndGgpO1xuICAgICAgICAgIHdyaXRlQXJyYXlUb01lbW9yeShhcnIsIHJldCk7XG4gICAgICAgICAgcmV0dXJuIHJldDtcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgICBmdW5jdGlvbiBjb252ZXJ0UmV0dXJuVmFsdWUocmV0KSB7XG4gICAgICAgIGlmIChyZXR1cm5UeXBlID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgcmV0dXJuIFVURjhUb1N0cmluZyhyZXQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChyZXR1cm5UeXBlID09PSBcImJvb2xlYW5cIikgcmV0dXJuIEJvb2xlYW4ocmV0KTtcbiAgICAgICAgcmV0dXJuIHJldDtcbiAgICAgIH1cbiAgICAgIHZhciBmdW5jID0gZ2V0Q0Z1bmMoaWRlbnQpO1xuICAgICAgdmFyIGNBcmdzID0gW107XG4gICAgICB2YXIgc3RhY2sgPSAwO1xuICAgICAgaWYgKGFyZ3MpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmdzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgdmFyIGNvbnZlcnRlciA9IHRvQ1thcmdUeXBlc1tpXV07XG4gICAgICAgICAgaWYgKGNvbnZlcnRlcikge1xuICAgICAgICAgICAgaWYgKHN0YWNrID09PSAwKSBzdGFjayA9IHN0YWNrU2F2ZSgpO1xuICAgICAgICAgICAgY0FyZ3NbaV0gPSBjb252ZXJ0ZXIoYXJnc1tpXSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNBcmdzW2ldID0gYXJnc1tpXTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHZhciByZXQgPSBmdW5jLmFwcGx5KG51bGwsIGNBcmdzKTtcbiAgICAgIGZ1bmN0aW9uIG9uRG9uZShyZXQpIHtcbiAgICAgICAgaWYgKHN0YWNrICE9PSAwKSBzdGFja1Jlc3RvcmUoc3RhY2spO1xuICAgICAgICByZXR1cm4gY29udmVydFJldHVyblZhbHVlKHJldCk7XG4gICAgICB9XG4gICAgICByZXQgPSBvbkRvbmUocmV0KTtcbiAgICAgIHJldHVybiByZXQ7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGN3cmFwKGlkZW50LCByZXR1cm5UeXBlLCBhcmdUeXBlcywgb3B0cykge1xuICAgICAgdmFyIG51bWVyaWNBcmdzID1cbiAgICAgICAgIWFyZ1R5cGVzIHx8XG4gICAgICAgIGFyZ1R5cGVzLmV2ZXJ5KCh0eXBlKSA9PiB0eXBlID09PSBcIm51bWJlclwiIHx8IHR5cGUgPT09IFwiYm9vbGVhblwiKTtcbiAgICAgIHZhciBudW1lcmljUmV0ID0gcmV0dXJuVHlwZSAhPT0gXCJzdHJpbmdcIjtcbiAgICAgIGlmIChudW1lcmljUmV0ICYmIG51bWVyaWNBcmdzICYmICFvcHRzKSB7XG4gICAgICAgIHJldHVybiBnZXRDRnVuYyhpZGVudCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gY2NhbGwoaWRlbnQsIHJldHVyblR5cGUsIGFyZ1R5cGVzLCBhcmd1bWVudHMsIG9wdHMpO1xuICAgICAgfTtcbiAgICB9XG4gICAgdmFyIHdhc21JbXBvcnRzID0ge1xuICAgICAgZDogX19fY3hhX3Rocm93LFxuICAgICAgYTogX2Fib3J0LFxuICAgICAgYzogX2Vtc2NyaXB0ZW5fbWVtY3B5X2JpZyxcbiAgICAgIGI6IF9lbXNjcmlwdGVuX3Jlc2l6ZV9oZWFwLFxuICAgIH07XG4gICAgdmFyIGFzbSA9IGNyZWF0ZVdhc20oKTtcbiAgICB2YXIgX19fd2FzbV9jYWxsX2N0b3JzID0gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIChfX193YXNtX2NhbGxfY3RvcnMgPSBNb2R1bGVbXCJhc21cIl1bXCJmXCJdKS5hcHBseShudWxsLCBhcmd1bWVudHMpO1xuICAgIH07XG4gICAgdmFyIF9nZXREZW5kcm9ncmFtID0gKE1vZHVsZVtcIl9nZXREZW5kcm9ncmFtXCJdID0gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIChfZ2V0RGVuZHJvZ3JhbSA9IE1vZHVsZVtcIl9nZXREZW5kcm9ncmFtXCJdID1cbiAgICAgICAgTW9kdWxlW1wiYXNtXCJdW1wiZ1wiXSkuYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICB9KTtcbiAgICB2YXIgX2ZyZWUgPSAoTW9kdWxlW1wiX2ZyZWVcIl0gPSBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gKF9mcmVlID0gTW9kdWxlW1wiX2ZyZWVcIl0gPSBNb2R1bGVbXCJhc21cIl1bXCJoXCJdKS5hcHBseShcbiAgICAgICAgbnVsbCxcbiAgICAgICAgYXJndW1lbnRzXG4gICAgICApO1xuICAgIH0pO1xuICAgIHZhciBfX19lcnJub19sb2NhdGlvbiA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiAoX19fZXJybm9fbG9jYXRpb24gPSBNb2R1bGVbXCJhc21cIl1bXCJfX2Vycm5vX2xvY2F0aW9uXCJdKS5hcHBseShcbiAgICAgICAgbnVsbCxcbiAgICAgICAgYXJndW1lbnRzXG4gICAgICApO1xuICAgIH07XG4gICAgdmFyIF9tYWxsb2MgPSAoTW9kdWxlW1wiX21hbGxvY1wiXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiAoX21hbGxvYyA9IE1vZHVsZVtcIl9tYWxsb2NcIl0gPSBNb2R1bGVbXCJhc21cIl1bXCJqXCJdKS5hcHBseShcbiAgICAgICAgbnVsbCxcbiAgICAgICAgYXJndW1lbnRzXG4gICAgICApO1xuICAgIH0pO1xuICAgIHZhciBzdGFja1NhdmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gKHN0YWNrU2F2ZSA9IE1vZHVsZVtcImFzbVwiXVtcImtcIl0pLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG4gICAgfTtcbiAgICB2YXIgc3RhY2tSZXN0b3JlID0gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIChzdGFja1Jlc3RvcmUgPSBNb2R1bGVbXCJhc21cIl1bXCJsXCJdKS5hcHBseShudWxsLCBhcmd1bWVudHMpO1xuICAgIH07XG4gICAgdmFyIHN0YWNrQWxsb2MgPSBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gKHN0YWNrQWxsb2MgPSBNb2R1bGVbXCJhc21cIl1bXCJtXCJdKS5hcHBseShudWxsLCBhcmd1bWVudHMpO1xuICAgIH07XG4gICAgdmFyIF9fX2N4YV9pc19wb2ludGVyX3R5cGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gKF9fX2N4YV9pc19wb2ludGVyX3R5cGUgPSBNb2R1bGVbXCJhc21cIl1bXCJuXCJdKS5hcHBseShcbiAgICAgICAgbnVsbCxcbiAgICAgICAgYXJndW1lbnRzXG4gICAgICApO1xuICAgIH07XG4gICAgTW9kdWxlW1wiY2NhbGxcIl0gPSBjY2FsbDtcbiAgICBNb2R1bGVbXCJjd3JhcFwiXSA9IGN3cmFwO1xuICAgIHZhciBjYWxsZWRSdW47XG4gICAgZGVwZW5kZW5jaWVzRnVsZmlsbGVkID0gZnVuY3Rpb24gcnVuQ2FsbGVyKCkge1xuICAgICAgaWYgKCFjYWxsZWRSdW4pIHJ1bigpO1xuICAgICAgaWYgKCFjYWxsZWRSdW4pIGRlcGVuZGVuY2llc0Z1bGZpbGxlZCA9IHJ1bkNhbGxlcjtcbiAgICB9O1xuICAgIGZ1bmN0aW9uIHJ1bigpIHtcbiAgICAgIGlmIChydW5EZXBlbmRlbmNpZXMgPiAwKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHByZVJ1bigpO1xuICAgICAgaWYgKHJ1bkRlcGVuZGVuY2llcyA+IDApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gZG9SdW4oKSB7XG4gICAgICAgIGlmIChjYWxsZWRSdW4pIHJldHVybjtcbiAgICAgICAgY2FsbGVkUnVuID0gdHJ1ZTtcbiAgICAgICAgTW9kdWxlW1wiY2FsbGVkUnVuXCJdID0gdHJ1ZTtcbiAgICAgICAgaWYgKEFCT1JUKSByZXR1cm47XG4gICAgICAgIGluaXRSdW50aW1lKCk7XG4gICAgICAgIHJlYWR5UHJvbWlzZVJlc29sdmUoTW9kdWxlKTtcbiAgICAgICAgaWYgKE1vZHVsZVtcIm9uUnVudGltZUluaXRpYWxpemVkXCJdKSBNb2R1bGVbXCJvblJ1bnRpbWVJbml0aWFsaXplZFwiXSgpO1xuICAgICAgICBwb3N0UnVuKCk7XG4gICAgICB9XG4gICAgICBpZiAoTW9kdWxlW1wic2V0U3RhdHVzXCJdKSB7XG4gICAgICAgIE1vZHVsZVtcInNldFN0YXR1c1wiXShcIlJ1bm5pbmcuLi5cIik7XG4gICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgTW9kdWxlW1wic2V0U3RhdHVzXCJdKFwiXCIpO1xuICAgICAgICAgIH0sIDEpO1xuICAgICAgICAgIGRvUnVuKCk7XG4gICAgICAgIH0sIDEpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZG9SdW4oKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKE1vZHVsZVtcInByZUluaXRcIl0pIHtcbiAgICAgIGlmICh0eXBlb2YgTW9kdWxlW1wicHJlSW5pdFwiXSA9PSBcImZ1bmN0aW9uXCIpXG4gICAgICAgIE1vZHVsZVtcInByZUluaXRcIl0gPSBbTW9kdWxlW1wicHJlSW5pdFwiXV07XG4gICAgICB3aGlsZSAoTW9kdWxlW1wicHJlSW5pdFwiXS5sZW5ndGggPiAwKSB7XG4gICAgICAgIE1vZHVsZVtcInByZUluaXRcIl0ucG9wKCkoKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcnVuKCk7XG5cbiAgICByZXR1cm4gZXhwb3J0Q3BwTGliLnJlYWR5O1xuICB9O1xufSkoKTtcbmlmICh0eXBlb2YgZXhwb3J0cyA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgbW9kdWxlID09PSBcIm9iamVjdFwiKVxuICBtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydENwcExpYjtcbmVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT09IFwiZnVuY3Rpb25cIiAmJiBkZWZpbmVbXCJhbWRcIl0pXG4gIGRlZmluZShbXSwgZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBleHBvcnRDcHBMaWI7XG4gIH0pO1xuZWxzZSBpZiAodHlwZW9mIGV4cG9ydHMgPT09IFwib2JqZWN0XCIpIGV4cG9ydHNbXCJleHBvcnRDcHBMaWJcIl0gPSBleHBvcnRDcHBMaWI7XG4iLCIvLyBUaGUgbW9kdWxlIGNhY2hlXG52YXIgX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fID0ge307XG5cbi8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG5mdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuXHR2YXIgY2FjaGVkTW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXTtcblx0aWYgKGNhY2hlZE1vZHVsZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0cmV0dXJuIGNhY2hlZE1vZHVsZS5leHBvcnRzO1xuXHR9XG5cdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG5cdHZhciBtb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdID0ge1xuXHRcdGlkOiBtb2R1bGVJZCxcblx0XHRsb2FkZWQ6IGZhbHNlLFxuXHRcdGV4cG9ydHM6IHt9XG5cdH07XG5cblx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG5cdF9fd2VicGFja19tb2R1bGVzX19bbW9kdWxlSWRdKG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG5cdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcblx0bW9kdWxlLmxvYWRlZCA9IHRydWU7XG5cblx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcblx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xufVxuXG4vLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuX193ZWJwYWNrX3JlcXVpcmVfXy5tID0gX193ZWJwYWNrX21vZHVsZXNfXztcblxuIiwiX193ZWJwYWNrX3JlcXVpcmVfXy5hbWRPID0ge307IiwiLy8gZGVmaW5lIGdldHRlciBmdW5jdGlvbnMgZm9yIGhhcm1vbnkgZXhwb3J0c1xuX193ZWJwYWNrX3JlcXVpcmVfXy5kID0gKGV4cG9ydHMsIGRlZmluaXRpb24pID0+IHtcblx0Zm9yKHZhciBrZXkgaW4gZGVmaW5pdGlvbikge1xuXHRcdGlmKF9fd2VicGFja19yZXF1aXJlX18ubyhkZWZpbml0aW9uLCBrZXkpICYmICFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywga2V5KSkge1xuXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIGtleSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGRlZmluaXRpb25ba2V5XSB9KTtcblx0XHR9XG5cdH1cbn07IiwiX193ZWJwYWNrX3JlcXVpcmVfXy5nID0gKGZ1bmN0aW9uKCkge1xuXHRpZiAodHlwZW9mIGdsb2JhbFRoaXMgPT09ICdvYmplY3QnKSByZXR1cm4gZ2xvYmFsVGhpcztcblx0dHJ5IHtcblx0XHRyZXR1cm4gdGhpcyB8fCBuZXcgRnVuY3Rpb24oJ3JldHVybiB0aGlzJykoKTtcblx0fSBjYXRjaCAoZSkge1xuXHRcdGlmICh0eXBlb2Ygd2luZG93ID09PSAnb2JqZWN0JykgcmV0dXJuIHdpbmRvdztcblx0fVxufSkoKTsiLCJfX3dlYnBhY2tfcmVxdWlyZV9fLmhtZCA9IChtb2R1bGUpID0+IHtcblx0bW9kdWxlID0gT2JqZWN0LmNyZWF0ZShtb2R1bGUpO1xuXHRpZiAoIW1vZHVsZS5jaGlsZHJlbikgbW9kdWxlLmNoaWxkcmVuID0gW107XG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShtb2R1bGUsICdleHBvcnRzJywge1xuXHRcdGVudW1lcmFibGU6IHRydWUsXG5cdFx0c2V0OiAoKSA9PiB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoJ0VTIE1vZHVsZXMgbWF5IG5vdCBhc3NpZ24gbW9kdWxlLmV4cG9ydHMgb3IgZXhwb3J0cy4qLCBVc2UgRVNNIGV4cG9ydCBzeW50YXgsIGluc3RlYWQ6ICcgKyBtb2R1bGUuaWQpO1xuXHRcdH1cblx0fSk7XG5cdHJldHVybiBtb2R1bGU7XG59OyIsIl9fd2VicGFja19yZXF1aXJlX18ubyA9IChvYmosIHByb3ApID0+IChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBwcm9wKSkiLCJ2YXIgc2NyaXB0VXJsO1xuaWYgKF9fd2VicGFja19yZXF1aXJlX18uZy5pbXBvcnRTY3JpcHRzKSBzY3JpcHRVcmwgPSBfX3dlYnBhY2tfcmVxdWlyZV9fLmcubG9jYXRpb24gKyBcIlwiO1xudmFyIGRvY3VtZW50ID0gX193ZWJwYWNrX3JlcXVpcmVfXy5nLmRvY3VtZW50O1xuaWYgKCFzY3JpcHRVcmwgJiYgZG9jdW1lbnQpIHtcblx0aWYgKGRvY3VtZW50LmN1cnJlbnRTY3JpcHQpXG5cdFx0c2NyaXB0VXJsID0gZG9jdW1lbnQuY3VycmVudFNjcmlwdC5zcmM7XG5cdGlmICghc2NyaXB0VXJsKSB7XG5cdFx0dmFyIHNjcmlwdHMgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZShcInNjcmlwdFwiKTtcblx0XHRpZihzY3JpcHRzLmxlbmd0aCkge1xuXHRcdFx0dmFyIGkgPSBzY3JpcHRzLmxlbmd0aCAtIDE7XG5cdFx0XHR3aGlsZSAoaSA+IC0xICYmICFzY3JpcHRVcmwpIHNjcmlwdFVybCA9IHNjcmlwdHNbaS0tXS5zcmM7XG5cdFx0fVxuXHR9XG59XG4vLyBXaGVuIHN1cHBvcnRpbmcgYnJvd3NlcnMgd2hlcmUgYW4gYXV0b21hdGljIHB1YmxpY1BhdGggaXMgbm90IHN1cHBvcnRlZCB5b3UgbXVzdCBzcGVjaWZ5IGFuIG91dHB1dC5wdWJsaWNQYXRoIG1hbnVhbGx5IHZpYSBjb25maWd1cmF0aW9uXG4vLyBvciBwYXNzIGFuIGVtcHR5IHN0cmluZyAoXCJcIikgYW5kIHNldCB0aGUgX193ZWJwYWNrX3B1YmxpY19wYXRoX18gdmFyaWFibGUgZnJvbSB5b3VyIGNvZGUgdG8gdXNlIHlvdXIgb3duIGxvZ2ljLlxuaWYgKCFzY3JpcHRVcmwpIHRocm93IG5ldyBFcnJvcihcIkF1dG9tYXRpYyBwdWJsaWNQYXRoIGlzIG5vdCBzdXBwb3J0ZWQgaW4gdGhpcyBicm93c2VyXCIpO1xuc2NyaXB0VXJsID0gc2NyaXB0VXJsLnJlcGxhY2UoLyMuKiQvLCBcIlwiKS5yZXBsYWNlKC9cXD8uKiQvLCBcIlwiKS5yZXBsYWNlKC9cXC9bXlxcL10rJC8sIFwiL1wiKTtcbl9fd2VicGFja19yZXF1aXJlX18ucCA9IHNjcmlwdFVybDsiLCJfX3dlYnBhY2tfcmVxdWlyZV9fLmIgPSBzZWxmLmxvY2F0aW9uICsgXCJcIjtcblxuLy8gb2JqZWN0IHRvIHN0b3JlIGxvYWRlZCBjaHVua3Ncbi8vIFwiMVwiIG1lYW5zIFwiYWxyZWFkeSBsb2FkZWRcIlxudmFyIGluc3RhbGxlZENodW5rcyA9IHtcblx0MzU2OiAxXG59O1xuXG4vLyBubyBjaHVuayBpbnN0YWxsIGZ1bmN0aW9uIG5lZWRlZFxuLy8gbm8gY2h1bmsgbG9hZGluZ1xuXG4vLyBubyBITVJcblxuLy8gbm8gSE1SIG1hbmlmZXN0IiwiaW1wb3J0IHsgZ2V0Q2x1c3RlcnNGcm9tRGlzdE1hdFdhc20gfSBmcm9tICcuL2NsdXN0ZXJpemVyV2FzbSc7XG5vbm1lc3NhZ2UgPSAoZXZlbnQpID0+IHtcbiAgICBjb25zdCB7IGRpc3RNYXRBcnJheSwgbiwgbWV0aG9kQ29kZSB9ID0gZXZlbnQuZGF0YTtcbiAgICBjb25zdCBkYXRhID0ge307XG4gICAgdHJ5IHtcbiAgICAgICAgZ2V0Q2x1c3RlcnNGcm9tRGlzdE1hdFdhc20oZGlzdE1hdEFycmF5LCBuLCBtZXRob2RDb2RlKVxuICAgICAgICAgICAgLnRoZW4oKGNsdXN0ZXJNYXRyaXgpID0+IHtcbiAgICAgICAgICAgIGRhdGEuY2x1c3Rlck1hdHJpeCA9IGNsdXN0ZXJNYXRyaXg7XG4gICAgICAgICAgICBwb3N0TWVzc2FnZShkYXRhKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGNhdGNoIChlKSB7XG4gICAgICAgIGRhdGEuZXJyb3IgPSBlO1xuICAgICAgICBwb3N0TWVzc2FnZShkYXRhKTtcbiAgICB9XG59O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y2x1c3RlcmluZy13b3JrZXIuanMubWFwIiwiaW1wb3J0IHtleHBvcnRDcHBMaWJ9IGZyb20gJy4vd2FzbUNsdXN0ZXIuanMnO1xuXG4vKipcbiBjYWxscyB3YXNtIGZ1bmN0aW9uIHRvIGdldCBjbHVzdGVyaW5nIG1lcmdlcyBhbmQgaGVpZ2h0cyBmcm9tIGRpc3RhbmNlIG1hdHJpeFxuIGRpc3RtYXQ6IGRpc3RhbmNlIG1hdHJpeCBhcyBhbiBhcnJheSBvZiBmbG9hdHMgY29tcHJpc2luZyB0aGUgdG9wIHJpZ2h0IHRyaWFuZ2xlIG9mIHRoZSBtYXRyaXhcbiBuOiBudW1iZXIgb2Ygb2JzZXJ2YWJsZXNcbiBtZXRob2Q6IDAgPSBzaW5nbGUgbGlua2FnZSwgMSA9IGNvbXBsZXRlIGxpbmthZ2UsIDIgPSBhdmVyYWdlIGxpbmthZ2UsIDMgPSBtZWRpYW4gbGlua2FnZVxuIHJlc3VsdDogeyBtZXJnZVJlc3VsdDogSW50MzJBcnJheSwgaGVpZ2h0c1Jlc3VsdDogRmxvYXQzMkFycmF5IH1cbiBtZXJnZVJlc3VsdCBoYXMgbGVuZ3RoIG9mIChuLTEpKjIgYW5kIGhlaWdodFJlc3VsdCBoYXMgbGVuZ3RoIG9mIG4tMVxuIHRvZ2V0aGVyIHRoZXkgZGVzY3JpYmUgdGhlIGNsdXN0ZXJpbmcgYXMgYSBkZW5kcm9ncmFtIGFzIGEgbWF0cml4IG9mIChuLTEpIFggM1xuIGVhY2ggcm93IGluIHRoZSBnaXZlbiBtYXRyaXggY29tcHJpc2VzIHRoZSBtZXJnZSBldmVudCBhdCBzdGVwIGkgYW5kIGxhc3QgY29sdW1uIGlzIHRoZSBoZWlnaHQgZnJvbSB0aGUgbGVhdmVzLlxuKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRDbHVzdGVyc0Zyb21EaXN0TWF0V2FzbShkaXN0bWF0LCBuLCBtZXRob2QpIHtcbiAgY29uc3Qgd2FzbVVybCA9IG5ldyBVUkwoJy4vd2FzbUNsdXN0ZXIud2FzbScsIGltcG9ydC5tZXRhLnVybCkuaHJlZjtcbiAgY29uc3Qgd2FzbVBhdGggPSB3YXNtVXJsLnN1YnN0cmluZygwLCB3YXNtVXJsLmxhc3RJbmRleE9mKCcvJykgKyAxKSArICd3YXNtQ2x1c3Rlci53YXNtJztcbiAgbGV0IHdhc21JbnN0YW5jZTtcbiAgdHJ5IHtcbiAgICAgIHdhc21JbnN0YW5jZSA9IGF3YWl0IGV4cG9ydENwcExpYih7bG9jYXRlRmlsZTogKCkgPT4gd2FzbVBhdGgsIHByaW50RXJyOiAoXykgPT4ge319KTtcbiAgfSBjYXRjaCAoZSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgICB3YXNtSW5zdGFuY2UgPSBhd2FpdCBleHBvcnRDcHBMaWIoe2xvY2F0ZUZpbGU6ICgpID0+IHdhc21VcmwsIHByaW50RXJyOiAoXykgPT4ge319KTtcbiAgICAgIH1cbiAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihlKTtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VuYWJsZSB0byBsb2FkIHdhc20gZmlsZSBmb3IgaGllcmFyY2hpY2FsIGNsdXN0ZXJpbmcnKTtcbiAgICAgIH1cbiAgfVxuXG4gIGNvbnN0IGdldERlbmRyb2dyYW1XYXNtID1cbiAgICB3YXNtSW5zdGFuY2UuY3dyYXAoJ2dldERlbmRyb2dyYW0nLCAnbnVsbCcsIFsnbnVtYmVyJywgJ251bWJlcicsICdudW1iZXInLCAnbnVtYmVyJywgJ251bWJlciddKTtcbiAgLy8gYWxsb2NhdGUgYSBtZW1vcnkgYmxvY2sgb24gdGhlIHdhc20gaGVhcCBmb3IgdGhlIGRpc3RhbmNlIG1hdHJpeFxuICBjb25zdCBieXRlc0ZvckRpc3RNYXQgPSBGbG9hdDMyQXJyYXkuQllURVNfUEVSX0VMRU1FTlQgKiBkaXN0bWF0Lmxlbmd0aDtcbiAgY29uc3QgZGF0YVB0ciA9IHdhc21JbnN0YW5jZS5fbWFsbG9jKGJ5dGVzRm9yRGlzdE1hdCk7XG4gIGNvbnN0IG1hdEhlYXAgPSBuZXcgVWludDhBcnJheSh3YXNtSW5zdGFuY2UuSEVBUFU4LmJ1ZmZlciwgZGF0YVB0ciwgYnl0ZXNGb3JEaXN0TWF0KTtcbiAgbWF0SGVhcC5zZXQobmV3IFVpbnQ4QXJyYXkoZGlzdG1hdC5idWZmZXIpKTtcblxuICAvL2FsbG9jYXRlIGEgbWVtb3J5IGJsb2NrIG9uIHRoZSB3YXNtIGhlYXAgZm9yIHRoZSBtZXJnZXMgYXJyYXlcbiAgY29uc3QgYnl0ZXNGb3JNZXJnZUFycmF5ID0gSW50MzJBcnJheS5CWVRFU19QRVJfRUxFTUVOVCAqIChuIC0gMSkgKiAyO1xuICBjb25zdCBtZXJnZVB0ciA9IHdhc21JbnN0YW5jZS5fbWFsbG9jKGJ5dGVzRm9yTWVyZ2VBcnJheSk7XG4gIGNvbnN0IG1lcmdlSGVhcCA9IG5ldyBVaW50OEFycmF5KHdhc21JbnN0YW5jZS5IRUFQVTguYnVmZmVyLCBtZXJnZVB0ciwgYnl0ZXNGb3JNZXJnZUFycmF5KTtcblxuICAvL2FsbG9jYXRlIGEgbWVtb3J5IGJsb2NrIG9uIHRoZSB3YXNtIGhlYXAgZm9yIHRoZSBoZWlndCBhcnJheVxuICBjb25zdCBieXRlc0ZvckhlaWdodHNBcnJheSA9IEZsb2F0MzJBcnJheS5CWVRFU19QRVJfRUxFTUVOVCAqIChuIC0gMSk7XG4gIGNvbnN0IGhlaWdodHNQdHIgPSB3YXNtSW5zdGFuY2UuX21hbGxvYyhieXRlc0ZvckhlaWdodHNBcnJheSk7XG4gIGNvbnN0IGhlaWdodHNIZWFwID0gbmV3IFVpbnQ4QXJyYXkod2FzbUluc3RhbmNlLkhFQVBVOC5idWZmZXIsIGhlaWdodHNQdHIsIGJ5dGVzRm9ySGVpZ2h0c0FycmF5KTtcblxuICAvLyBjYWxsIHRoZSB3YXNtIGZ1bmN0aW9uXG4gIGdldERlbmRyb2dyYW1XYXNtKGRhdGFQdHIsIG4sIG1ldGhvZCwgbWVyZ2VQdHIsIGhlaWdodHNQdHIpO1xuICAvLyBnZXQgdGhlIG1lcmdlcyBhbmQgaGVpZ2h0cyBmcm9tIHRoZSB3YXNtIGhlYXBcbiAgY29uc3QgbWVyZ2VSZXN1bHQgPSBuZXcgSW50MzJBcnJheShtZXJnZUhlYXAuYnVmZmVyLCBtZXJnZUhlYXAuYnl0ZU9mZnNldCwgKG4tMSkgKiAyKTtcbiAgY29uc3QgaGVpZ2h0c1Jlc3VsdCA9IChuZXcgRmxvYXQzMkFycmF5KGhlaWdodHNIZWFwLmJ1ZmZlciwgaGVpZ2h0c0hlYXAuYnl0ZU9mZnNldCwgbi0xKSkuc2xpY2UoMCwgbi0xKTtcblxuICBjb25zdCBtZXJnZVJvdzEgPSBtZXJnZVJlc3VsdC5zbGljZSgwLCBuLTEpO1xuICBjb25zdCBtZXJnZVJvdzIgPSBtZXJnZVJlc3VsdC5zbGljZShuLTEsIDIqbiAtIDIpO1xuICAvLyBmcmVlIHRoZSBtZW1vcnkgYmxvY2tzIG9uIHRoZSB3YXNtIGhlYXBcbiAgd2FzbUluc3RhbmNlLl9mcmVlKG1hdEhlYXAuYnl0ZU9mZnNldCk7XG4gIHdhc21JbnN0YW5jZS5fZnJlZShtZXJnZUhlYXAuYnl0ZU9mZnNldCk7XG4gIHdhc21JbnN0YW5jZS5fZnJlZShoZWlnaHRzSGVhcC5ieXRlT2Zmc2V0KTtcbiAgcmV0dXJuIHttZXJnZVJvdzEsIG1lcmdlUm93MiwgaGVpZ2h0c1Jlc3VsdH07XG59XG4iXSwibmFtZXMiOlsiX3NjcmlwdERpciIsImV4cG9ydENwcExpYiIsImRvY3VtZW50IiwiY3VycmVudFNjcmlwdCIsInNyYyIsInVuZGVmaW5lZCIsInJlYWR5UHJvbWlzZVJlc29sdmUiLCJyZWFkeVByb21pc2VSZWplY3QiLCJNb2R1bGUiLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsInJlYWRCaW5hcnkiLCJtb2R1bGVPdmVycmlkZXMiLCJPYmplY3QiLCJhc3NpZ24iLCJFTlZJUk9OTUVOVF9JU19XRUIiLCJ3aW5kb3ciLCJFTlZJUk9OTUVOVF9JU19XT1JLRVIiLCJpbXBvcnRTY3JpcHRzIiwic2NyaXB0RGlyZWN0b3J5IiwicHJvY2VzcyIsInZlcnNpb25zIiwibm9kZSIsInNlbGYiLCJsb2NhdGlvbiIsImhyZWYiLCJpbmRleE9mIiwic3Vic3RyIiwicmVwbGFjZSIsImxhc3RJbmRleE9mIiwidXJsIiwieGhyIiwiWE1MSHR0cFJlcXVlc3QiLCJvcGVuIiwicmVzcG9uc2VUeXBlIiwic2VuZCIsIlVpbnQ4QXJyYXkiLCJyZXNwb25zZSIsImNvbnNvbGUiLCJsb2ciLCJiaW5kIiwid2FzbUJpbmFyeSIsIndhc21NZW1vcnkiLCJlcnIiLCJ3YXJuIiwiV2ViQXNzZW1ibHkiLCJhYm9ydCIsIkhFQVA4IiwiSEVBUFU4IiwiSEVBUFUzMiIsIkFCT1JUIiwidXBkYXRlTWVtb3J5Vmlld3MiLCJiIiwiYnVmZmVyIiwiSW50OEFycmF5IiwiSW50MTZBcnJheSIsIkludDMyQXJyYXkiLCJVaW50MTZBcnJheSIsIlVpbnQzMkFycmF5IiwiRmxvYXQzMkFycmF5IiwiRmxvYXQ2NEFycmF5IiwiX19BVFBSRVJVTl9fIiwiX19BVElOSVRfXyIsIl9fQVRQT1NUUlVOX18iLCJydW5EZXBlbmRlbmNpZXMiLCJydW5EZXBlbmRlbmN5V2F0Y2hlciIsImRlcGVuZGVuY2llc0Z1bGZpbGxlZCIsIndoYXQiLCJlIiwiUnVudGltZUVycm9yIiwid2FzbUJpbmFyeUZpbGUiLCJwYXRoIiwiaXNEYXRhVVJJIiwiZmlsZW5hbWUiLCJzdGFydHNXaXRoIiwiZ2V0QmluYXJ5IiwiZmlsZSIsImluc3RhbnRpYXRlQXJyYXlCdWZmZXIiLCJiaW5hcnlGaWxlIiwiaW1wb3J0cyIsInJlY2VpdmVyIiwiZmV0Y2giLCJ0aGVuIiwiY3JlZGVudGlhbHMiLCJjYXRjaCIsImdldEJpbmFyeVByb21pc2UiLCJiaW5hcnkiLCJpbnN0YW50aWF0ZSIsImluc3RhbmNlIiwicmVhc29uIiwiY2FsbFJ1bnRpbWVDYWxsYmFja3MiLCJjYWxsYmFja3MiLCJsZW5ndGgiLCJzaGlmdCIsIkV4Y2VwdGlvbkluZm8iLCJleGNQdHIiLCJ0aGlzIiwicHRyIiwic2V0X3R5cGUiLCJ0eXBlIiwiZ2V0X3R5cGUiLCJzZXRfZGVzdHJ1Y3RvciIsImRlc3RydWN0b3IiLCJnZXRfZGVzdHJ1Y3RvciIsInNldF9jYXVnaHQiLCJjYXVnaHQiLCJnZXRfY2F1Z2h0Iiwic2V0X3JldGhyb3duIiwicmV0aHJvd24iLCJnZXRfcmV0aHJvd24iLCJpbml0Iiwic2V0X2FkanVzdGVkX3B0ciIsImFkanVzdGVkUHRyIiwiZ2V0X2FkanVzdGVkX3B0ciIsImdldF9leGNlcHRpb25fcHRyIiwiX19fY3hhX2lzX3BvaW50ZXJfdHlwZSIsImFkanVzdGVkIiwiZW1zY3JpcHRlbl9yZWFsbG9jX2J1ZmZlciIsInNpemUiLCJncm93IiwiYnl0ZUxlbmd0aCIsImdldENGdW5jIiwiaWRlbnQiLCJVVEY4RGVjb2RlciIsIlRleHREZWNvZGVyIiwiY2NhbGwiLCJyZXR1cm5UeXBlIiwiYXJnVHlwZXMiLCJhcmdzIiwib3B0cyIsInRvQyIsInN0cmluZyIsInN0ciIsInJldCIsImxlbiIsImkiLCJjIiwiY2hhckNvZGVBdCIsImxlbmd0aEJ5dGVzVVRGOCIsInN0YWNrQWxsb2MiLCJvdXRQdHIiLCJtYXhCeXRlc1RvV3JpdGUiLCJoZWFwIiwib3V0SWR4IiwiZW5kSWR4IiwidSIsInN0cmluZ1RvVVRGOEFycmF5Iiwic3RyaW5nVG9VVEY4Iiwic3RyaW5nVG9VVEY4T25TdGFjayIsImFycmF5IiwiYXJyIiwic2V0IiwiZnVuYyIsImNBcmdzIiwic3RhY2siLCJjb252ZXJ0ZXIiLCJzdGFja1NhdmUiLCJhcHBseSIsInN0YWNrUmVzdG9yZSIsImhlYXBPckFycmF5IiwiaWR4IiwibWF4Qnl0ZXNUb1JlYWQiLCJlbmRQdHIiLCJkZWNvZGUiLCJzdWJhcnJheSIsInUwIiwidTEiLCJ1MiIsIlN0cmluZyIsImZyb21DaGFyQ29kZSIsImNoIiwiVVRGOEFycmF5VG9TdHJpbmciLCJCb29sZWFuIiwiY29udmVydFJldHVyblZhbHVlIiwib25Eb25lIiwiY2FsbGVkUnVuIiwid2FzbUltcG9ydHMiLCJkIiwiYSIsImRlc3QiLCJudW0iLCJjb3B5V2l0aGluIiwicmVxdWVzdGVkU2l6ZSIsIngiLCJvbGRTaXplIiwibWF4SGVhcFNpemUiLCJjdXREb3duIiwib3Zlckdyb3duSGVhcFNpemUiLCJNYXRoIiwibWluIiwibWF4IiwiY2FsbGJhY2siLCJpbmZvIiwicmVjZWl2ZUluc3RhbmNlIiwibW9kdWxlIiwiY2IiLCJleHBvcnRzIiwidW5zaGlmdCIsImlkIiwiY2xlYXJJbnRlcnZhbCIsInJlbW92ZVJ1bkRlcGVuZGVuY3kiLCJyZXN1bHQiLCJpbnN0YW50aWF0ZVN0cmVhbWluZyIsImNyZWF0ZVdhc20iLCJhcmd1bWVudHMiLCJydW4iLCJkb1J1biIsInBvc3RSdW4iLCJwcmVSdW4iLCJzZXRUaW1lb3V0IiwibnVtZXJpY0FyZ3MiLCJldmVyeSIsInJ1bkNhbGxlciIsInBvcCIsInJlYWR5IiwiZGVmaW5lIiwiX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fIiwiX193ZWJwYWNrX3JlcXVpcmVfXyIsIm1vZHVsZUlkIiwiY2FjaGVkTW9kdWxlIiwibG9hZGVkIiwiX193ZWJwYWNrX21vZHVsZXNfXyIsIm0iLCJhbWRPIiwiZGVmaW5pdGlvbiIsImtleSIsIm8iLCJkZWZpbmVQcm9wZXJ0eSIsImVudW1lcmFibGUiLCJnZXQiLCJnIiwiZ2xvYmFsVGhpcyIsIkZ1bmN0aW9uIiwiaG1kIiwiY3JlYXRlIiwiY2hpbGRyZW4iLCJFcnJvciIsIm9iaiIsInByb3AiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJzY3JpcHRVcmwiLCJzY3JpcHRzIiwiZ2V0RWxlbWVudHNCeVRhZ05hbWUiLCJwIiwib25tZXNzYWdlIiwiZXZlbnQiLCJkaXN0TWF0QXJyYXkiLCJuIiwibWV0aG9kQ29kZSIsImRhdGEiLCJhc3luYyIsImRpc3RtYXQiLCJtZXRob2QiLCJ3YXNtVXJsIiwiVVJMIiwid2FzbVBhdGgiLCJzdWJzdHJpbmciLCJ3YXNtSW5zdGFuY2UiLCJsb2NhdGVGaWxlIiwicHJpbnRFcnIiLCJfIiwiZXJyb3IiLCJnZXREZW5kcm9ncmFtV2FzbSIsImN3cmFwIiwiYnl0ZXNGb3JEaXN0TWF0IiwiQllURVNfUEVSX0VMRU1FTlQiLCJkYXRhUHRyIiwiX21hbGxvYyIsIm1hdEhlYXAiLCJieXRlc0Zvck1lcmdlQXJyYXkiLCJtZXJnZVB0ciIsIm1lcmdlSGVhcCIsImJ5dGVzRm9ySGVpZ2h0c0FycmF5IiwiaGVpZ2h0c1B0ciIsImhlaWdodHNIZWFwIiwibWVyZ2VSZXN1bHQiLCJieXRlT2Zmc2V0IiwiaGVpZ2h0c1Jlc3VsdCIsInNsaWNlIiwibWVyZ2VSb3cxIiwibWVyZ2VSb3cyIiwiX2ZyZWUiLCJnZXRDbHVzdGVyc0Zyb21EaXN0TWF0V2FzbSIsImNsdXN0ZXJNYXRyaXgiLCJwb3N0TWVzc2FnZSJdLCJzb3VyY2VSb290IjoiIn0=
package/dist/436.js CHANGED
@@ -1,2 +1,2 @@
1
- var peptides;(()=>{"use strict";({8436:function(){var t=this&&this.__awaiter||function(t,n,e,a){return new(e||(e=Promise))((function(o,r){function i(t){try{c(a.next(t))}catch(t){r(t)}}function s(t){try{c(a.throw(t))}catch(t){r(t)}}function c(t){var n;t.done?o(t.value):(n=t.value,n instanceof e?n:new e((function(t){t(n)}))).then(i,s)}c((a=a.apply(t,n||[])).next())}))};onmessage=n=>t(void 0,void 0,void 0,(function*(){var t,e;const{startIdx:a,endIdx:o,activityArray:r,monomerInfoArray:i,settings:s,currentTargetIdx:c}=n.data,l=[],f=[],d=[],h=o-a;let u=0;const v=r.length-2-Math.floor(Math.sqrt(-8*a+4*r.length*(r.length-1)-7)/2-.5);let p=v,g=a-r.length*v+Math.floor((v+1)*(v+2)/2);const w=new Array(i.length);for(;u<h;){if(-1===c||(null===(t=s.targetCol)||void 0===t?void 0:t.rawData[p])===c&&(null===(e=s.targetCol)||void 0===e?void 0:e.rawData[g])===c){let t=0;const n=r[p]-r[g];if(Math.abs(n)>=s.minActivityDelta){let n=!1,e=0;for(const a of i)if(a.rawData[p]!==a.rawData[g]){if(t++,n=t>s.maxMutations,n)break;w[e++]={pos:a.name,seq1Idx:p,seq2Idx:g}}if(!n&&0!==t)for(let t=0;t<e;t++){const n=w[t].pos;l.push(n),f.push(p),d.push(g)}}}u++,g++,g===r.length&&(p++,g=p+1)}postMessage({pos:l,seq1Idxs:new Uint32Array(f),seq2Idxs:new Uint32Array(d)})}))}})[8436](),peptides={}})();
2
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,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MUJDLFNBQVUsSUFBSTJCLFlBQVkzQixJQUVsQyxHLElDbkVvQixRLFNBRE0sQ0FBQyxDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcGVwdGlkZXMvLi9zcmMvd29ya2Vycy9tdXRhdGlvbi1jbGlmZnMtd29ya2VyLnRzIiwid2VicGFjazovL3BlcHRpZGVzL3dlYnBhY2svc3RhcnR1cCJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2F3YWl0ZXIgPSAodGhpcyAmJiB0aGlzLl9fYXdhaXRlcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gICAgfSk7XG59O1xub25tZXNzYWdlID0gKGV2ZW50KSA9PiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICB2YXIgX2EsIF9iO1xuICAgIGNvbnN0IHsgc3RhcnRJZHgsIGVuZElkeCwgYWN0aXZpdHlBcnJheSwgbW9ub21lckluZm9BcnJheSwgc2V0dGluZ3MsIGN1cnJlbnRUYXJnZXRJZHggfSA9IGV2ZW50LmRhdGE7XG4gICAgY29uc3QgcG9zID0gW107XG4gICAgY29uc3Qgc2VxMUlkeHMgPSBbXTtcbiAgICBjb25zdCBzZXEySWR4cyA9IFtdO1xuICAgIGNvbnN0IGNodW5rU2l6ZSA9IGVuZElkeCAtIHN0YXJ0SWR4O1xuICAgIGxldCBjbnQgPSAwO1xuICAgIGNvbnN0IHN0YXJ0Um93ID0gYWN0aXZpdHlBcnJheS5sZW5ndGggLSAyIC0gTWF0aC5mbG9vcihNYXRoLnNxcnQoLTggKiBzdGFydElkeCArIDQgKiBhY3Rpdml0eUFycmF5Lmxlbmd0aCAqIChhY3Rpdml0eUFycmF5Lmxlbmd0aCAtIDEpIC0gNykgLyAyIC0gMC41KTtcbiAgICBjb25zdCBzdGFydENvbCA9IHN0YXJ0SWR4IC0gYWN0aXZpdHlBcnJheS5sZW5ndGggKiBzdGFydFJvdyArIE1hdGguZmxvb3IoKHN0YXJ0Um93ICsgMSkgKiAoc3RhcnRSb3cgKyAyKSAvIDIpO1xuICAgIGxldCBzZXExSWR4ID0gc3RhcnRSb3c7XG4gICAgbGV0IHNlcTJJZHggPSBzdGFydENvbDtcbiAgICBjb25zdCB0ZW1wRGF0YSA9IG5ldyBBcnJheShtb25vbWVySW5mb0FycmF5Lmxlbmd0aCk7XG4gICAgd2hpbGUgKGNudCA8IGNodW5rU2l6ZSkge1xuICAgICAgICBpZiAoIShjdXJyZW50VGFyZ2V0SWR4ICE9PSAtMSAmJiAoKChfYSA9IHNldHRpbmdzLnRhcmdldENvbCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnJhd0RhdGFbc2VxMUlkeF0pICE9PSBjdXJyZW50VGFyZ2V0SWR4IHx8XG4gICAgICAgICAgICAoKF9iID0gc2V0dGluZ3MudGFyZ2V0Q29sKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IucmF3RGF0YVtzZXEySWR4XSkgIT09IGN1cnJlbnRUYXJnZXRJZHgpKSkge1xuICAgICAgICAgICAgbGV0IHN1YnN0Q291bnRlciA9IDA7XG4gICAgICAgICAgICBjb25zdCBhY3Rpdml0eVZhbFNlcTEgPSBhY3Rpdml0eUFycmF5W3NlcTFJZHhdO1xuICAgICAgICAgICAgY29uc3QgYWN0aXZpdHlWYWxTZXEyID0gYWN0aXZpdHlBcnJheVtzZXEySWR4XTtcbiAgICAgICAgICAgIGNvbnN0IGRlbHRhID0gYWN0aXZpdHlWYWxTZXExIC0gYWN0aXZpdHlWYWxTZXEyO1xuICAgICAgICAgICAgaWYgKE1hdGguYWJzKGRlbHRhKSA+PSBzZXR0aW5ncy5taW5BY3Rpdml0eURlbHRhKSB7XG4gICAgICAgICAgICAgICAgbGV0IHN1YnN0Q291bnRlckZsYWcgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBsZXQgdGVtcERhdGFJZHggPSAwO1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgbW9ub21lckluZm8gb2YgbW9ub21lckluZm9BcnJheSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBzZXExY2F0ZWdvcnlJZHggPSBtb25vbWVySW5mby5yYXdEYXRhW3NlcTFJZHhdO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBzZXEyY2F0ZWdvcnlJZHggPSBtb25vbWVySW5mby5yYXdEYXRhW3NlcTJJZHhdO1xuICAgICAgICAgICAgICAgICAgICBpZiAoc2VxMWNhdGVnb3J5SWR4ID09PSBzZXEyY2F0ZWdvcnlJZHgpXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgc3Vic3RDb3VudGVyKys7XG4gICAgICAgICAgICAgICAgICAgIHN1YnN0Q291bnRlckZsYWcgPSBzdWJzdENvdW50ZXIgPiBzZXR0aW5ncy5tYXhNdXRhdGlvbnM7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzdWJzdENvdW50ZXJGbGFnKVxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIHRlbXBEYXRhW3RlbXBEYXRhSWR4KytdID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcG9zOiBtb25vbWVySW5mby5uYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgc2VxMUlkeDogc2VxMUlkeCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlcTJJZHg6IHNlcTJJZHgsXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICghKHN1YnN0Q291bnRlckZsYWcgfHwgc3Vic3RDb3VudGVyID09PSAwKSkge1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRlbXBEYXRhSWR4OyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHRlbXBEYXRhRWxlbWVudCA9IHRlbXBEYXRhW2ldO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcG9zaXRpb24gPSB0ZW1wRGF0YUVsZW1lbnQucG9zO1xuICAgICAgICAgICAgICAgICAgICAgICAgcG9zLnB1c2gocG9zaXRpb24pO1xuICAgICAgICAgICAgICAgICAgICAgICAgc2VxMUlkeHMucHVzaChzZXExSWR4KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlcTJJZHhzLnB1c2goc2VxMklkeCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY250Kys7XG4gICAgICAgIHNlcTJJZHgrKztcbiAgICAgICAgaWYgKHNlcTJJZHggPT09IGFjdGl2aXR5QXJyYXkubGVuZ3RoKSB7XG4gICAgICAgICAgICBzZXExSWR4Kys7XG4gICAgICAgICAgICBzZXEySWR4ID0gc2VxMUlkeCArIDE7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcG9zdE1lc3NhZ2Uoe1xuICAgICAgICBwb3M6IHBvcyxcbiAgICAgICAgc2VxMUlkeHM6IG5ldyBVaW50MzJBcnJheShzZXExSWR4cyksXG4gICAgICAgIHNlcTJJZHhzOiBuZXcgVWludDMyQXJyYXkoc2VxMklkeHMpLFxuICAgIH0pO1xufSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2liWFYwWVhScGIyNHRZMnhwWm1aekxYZHZjbXRsY2k1cWN5SXNJbk52ZFhKalpWSnZiM1FpT2lJaUxDSnpiM1Z5WTJWeklqcGJJbTExZEdGMGFXOXVMV05zYVdabWN5MTNiM0pyWlhJdWRITWlYU3dpYm1GdFpYTWlPbHRkTENKdFlYQndhVzVuY3lJNklqczdPenM3T3pzN096dEJRVUZCTEZOQlFWTXNSMEZCUnl4RFFVRlBMRXRCUVVzc1JVRkJhVUlzUlVGQlJUczdTVUZEZWtNc1RVRkJUU3hGUVVGRExGRkJRVkVzUlVGQlJTeE5RVUZOTEVWQlFVVXNZVUZCWVN4RlFVRkZMR2RDUVVGblFpeEZRVUZGTEZGQlFWRXNSVUZCUlN4blFrRkJaMElzUlVGQlF5eEhRVUZITEV0QlFVc3NRMEZCUXl4SlFVRkpMRU5CUVVNN1NVRkRia2NzVFVGQlRTeEhRVUZITEVkQlFXRXNSVUZCUlN4RFFVRkRPMGxCUTNwQ0xFMUJRVTBzVVVGQlVTeEhRVUZoTEVWQlFVVXNRMEZCUXp0SlFVTTVRaXhOUVVGTkxGRkJRVkVzUjBGQllTeEZRVUZGTEVOQlFVTTdTVUZET1VJc1RVRkJUU3hUUVVGVExFZEJRVWNzVFVGQlRTeEhRVUZITEZGQlFWRXNRMEZCUXp0SlFVTndReXhKUVVGSkxFZEJRVWNzUjBGQlJ5eERRVUZETEVOQlFVTTdTVUZEV2l4TlFVRk5MRkZCUVZFc1IwRkJSeXhoUVVGaExFTkJRVU1zVFVGQlRTeEhRVUZITEVOQlFVTXNSMEZCUnl4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVOd1JDeEpRVUZKTEVOQlFVTXNTVUZCU1N4RFFVRkRMRU5CUVVNc1EwRkJReXhIUVVGSExGRkJRVkVzUjBGQlJ5eERRVUZETEVkQlFVY3NZVUZCWVN4RFFVRkRMRTFCUVUwc1IwRkJSeXhEUVVGRExHRkJRV0VzUTBGQlF5eE5RVUZOTEVkQlFVY3NRMEZCUXl4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRExFZEJRVWNzUTBGQlF5eEhRVUZITEVkQlFVY3NRMEZCUXl4RFFVRkRPMGxCUTJ4SExFMUJRVTBzVVVGQlVTeEhRVUZITEZGQlFWRXNSMEZCUnl4aFFVRmhMRU5CUVVNc1RVRkJUU3hIUVVGSExGRkJRVkVzUjBGQlJ5eEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRU5CUVVNc1VVRkJVU3hIUVVGSExFTkJRVU1zUTBGQlF5eEhRVUZITEVOQlFVTXNVVUZCVVN4SFFVRkhMRU5CUVVNc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF5eERRVUZETzBsQlF6bEhMRWxCUVVrc1QwRkJUeXhIUVVGSExGRkJRVkVzUTBGQlF6dEpRVU4yUWl4SlFVRkpMRTlCUVU4c1IwRkJSeXhSUVVGUkxFTkJRVU03U1VGRGRrSXNUVUZCVFN4UlFVRlJMRWRCUVVjc1NVRkJTU3hMUVVGTExFTkJRVU1zWjBKQlFXZENMRU5CUVVNc1RVRkJUU3hEUVVGRExFTkJRVU03U1VGRGNFUXNUMEZCVHl4SFFVRkhMRWRCUVVjc1UwRkJVeXhGUVVGRk8xRkJRM1JDTEVsQlFVa3NRMEZCUXl4RFFVRkRMR2RDUVVGblFpeExRVUZMTEVOQlFVTXNRMEZCUXl4SlFVRkpMRU5CUVVNc1EwRkJRU3hOUVVGQkxGRkJRVkVzUTBGQlF5eFRRVUZUTERCRFFVRkZMRTlCUVU4c1EwRkJReXhQUVVGUExFTkJRVU1zVFVGQlN5eG5Ra0ZCWjBJN1dVRkRla1lzUTBGQlFTeE5RVUZCTEZGQlFWRXNRMEZCUXl4VFFVRlRMREJEUVVGRkxFOUJRVThzUTBGQlF5eFBRVUZQTEVOQlFVTXNUVUZCU3l4blFrRkJaMElzUTBGQlF5eERRVUZETEVWQlFVVTdXVUZETjBRc1NVRkJTU3haUVVGWkxFZEJRVWNzUTBGQlF5eERRVUZETzFsQlEzSkNMRTFCUVUwc1pVRkJaU3hIUVVGSExHRkJRV0VzUTBGQlF5eFBRVUZQTEVOQlFVTXNRMEZCUXp0WlFVTXZReXhOUVVGTkxHVkJRV1VzUjBGQlJ5eGhRVUZoTEVOQlFVTXNUMEZCVHl4RFFVRkRMRU5CUVVNN1dVRkRMME1zVFVGQlRTeExRVUZMTEVkQlFVY3NaVUZCWlN4SFFVRkhMR1ZCUVdVc1EwRkJRenRaUVVOb1JDeEpRVUZKTEVsQlFVa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1MwRkJTeXhEUVVGRExFbEJRVWtzVVVGQlVTeERRVUZETEdkQ1FVRm5RaXhGUVVGRk8yZENRVU5vUkN4SlFVRkpMR2RDUVVGblFpeEhRVUZITEV0QlFVc3NRMEZCUXp0blFrRkROMElzU1VGQlNTeFhRVUZYTEVkQlFVY3NRMEZCUXl4RFFVRkRPMmRDUVVOd1FpeExRVUZMTEUxQlFVMHNWMEZCVnl4SlFVRkpMR2RDUVVGblFpeEZRVUZGTzI5Q1FVTXhReXhOUVVGTkxHVkJRV1VzUjBGQlJ5eFhRVUZYTEVOQlFVTXNUMEZCVHl4RFFVRkRMRTlCUVU4c1EwRkJReXhEUVVGRE8yOUNRVU55UkN4TlFVRk5MR1ZCUVdVc1IwRkJSeXhYUVVGWExFTkJRVU1zVDBGQlR5eERRVUZETEU5QlFVOHNRMEZCUXl4RFFVRkRPMjlDUVVOeVJDeEpRVUZKTEdWQlFXVXNTMEZCU3l4bFFVRmxPM2RDUVVOeVF5eFRRVUZUTzI5Q1FVVllMRmxCUVZrc1JVRkJSU3hEUVVGRE8yOUNRVU5tTEdkQ1FVRm5RaXhIUVVGSExGbEJRVmtzUjBGQlJ5eFJRVUZSTEVOQlFVTXNXVUZCV1N4RFFVRkRPMjlDUVVONFJDeEpRVUZKTEdkQ1FVRm5RanQzUWtGRGJFSXNUVUZCVFR0dlFrRkZVaXhSUVVGUkxFTkJRVU1zVjBGQlZ5eEZRVUZGTEVOQlFVTXNSMEZCUnp0M1FrRkRlRUlzUjBGQlJ5eEZRVUZGTEZkQlFWY3NRMEZCUXl4SlFVRkpPM2RDUVVOeVFpeFBRVUZQTEVWQlFVVXNUMEZCVHp0M1FrRkRhRUlzVDBGQlR5eEZRVUZGTEU5QlFVODdjVUpCUTJwQ0xFTkJRVU03YVVKQlEwZzdaMEpCUTBRc1NVRkJTU3hEUVVGRExFTkJRVU1zWjBKQlFXZENMRWxCUVVrc1dVRkJXU3hMUVVGTExFTkJRVU1zUTBGQlF5eEZRVUZGTzI5Q1FVTTNReXhMUVVGTExFbEJRVWtzUTBGQlF5eEhRVUZITEVOQlFVTXNSVUZCUlN4RFFVRkRMRWRCUVVjc1YwRkJWeXhGUVVGRkxFTkJRVU1zUlVGQlJTeEZRVUZGTzNkQ1FVTndReXhOUVVGTkxHVkJRV1VzUjBGQlJ5eFJRVUZSTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN2QwSkJRM0JETEUxQlFVMHNVVUZCVVN4SFFVRkhMR1ZCUVdVc1EwRkJReXhIUVVGSExFTkJRVU03ZDBKQlEzSkRMRWRCUVVjc1EwRkJReXhKUVVGSkxFTkJRVU1zVVVGQlVTeERRVUZETEVOQlFVTTdkMEpCUTI1Q0xGRkJRVkVzUTBGQlF5eEpRVUZKTEVOQlFVTXNUMEZCVHl4RFFVRkRMRU5CUVVNN2QwSkJRM1pDTEZGQlFWRXNRMEZCUXl4SlFVRkpMRU5CUVVNc1QwRkJUeXhEUVVGRExFTkJRVU03Y1VKQlEzaENPMmxDUVVOR08yRkJRMFk3VTBGRFJqdFJRVU5FTEVkQlFVY3NSVUZCUlN4RFFVRkRPMUZCUTA0c1QwRkJUeXhGUVVGRkxFTkJRVU03VVVGRFZpeEpRVUZKTEU5QlFVOHNTMEZCU3l4aFFVRmhMRU5CUVVNc1RVRkJUU3hGUVVGRk8xbEJRM0JETEU5QlFVOHNSVUZCUlN4RFFVRkRPMWxCUTFZc1QwRkJUeXhIUVVGSExFOUJRVThzUjBGQlJ5eERRVUZETEVOQlFVTTdVMEZEZGtJN1MwRkRSanRKUVVORUxGZEJRVmNzUTBGQlF6dFJRVU5XTEVkQlFVY3NSVUZCUlN4SFFVRkhPMUZCUTFJc1VVRkJVU3hGUVVGRkxFbEJRVWtzVjBGQlZ5eERRVUZETEZGQlFWRXNRMEZCUXp0UlFVTnVReXhSUVVGUkxFVkJRVVVzU1VGQlNTeFhRVUZYTEVOQlFVTXNVVUZCVVN4RFFVRkRPMHRCUTNCRExFTkJRVU1zUTBGQlF6dEJRVU5NTEVOQlFVTXNRMEZCUVN4RFFVRkRJaXdpYzI5MWNtTmxjME52Ym5SbGJuUWlPbHNpYjI1dFpYTnpZV2RsSUQwZ1lYTjVibU1nS0dWMlpXNTBLVG9nVUhKdmJXbHpaVHgyYjJsa1BpQTlQaUI3WEc0Z0lHTnZibk4wSUh0emRHRnlkRWxrZUN3Z1pXNWtTV1I0TENCaFkzUnBkbWwwZVVGeWNtRjVMQ0J0YjI1dmJXVnlTVzVtYjBGeWNtRjVMQ0J6WlhSMGFXNW5jeXdnWTNWeWNtVnVkRlJoY21kbGRFbGtlSDBnUFNCbGRtVnVkQzVrWVhSaE8xeHVJQ0JqYjI1emRDQndiM002SUhOMGNtbHVaMXRkSUQwZ1cxMDdYRzRnSUdOdmJuTjBJSE5sY1RGSlpIaHpPaUJ1ZFcxaVpYSmJYU0E5SUZ0ZE8xeHVJQ0JqYjI1emRDQnpaWEV5U1dSNGN6b2diblZ0WW1WeVcxMGdQU0JiWFR0Y2JpQWdZMjl1YzNRZ1kyaDFibXRUYVhwbElEMGdaVzVrU1dSNElDMGdjM1JoY25SSlpIZzdYRzRnSUd4bGRDQmpiblFnUFNBd08xeHVJQ0JqYjI1emRDQnpkR0Z5ZEZKdmR5QTlJR0ZqZEdsMmFYUjVRWEp5WVhrdWJHVnVaM1JvSUMwZ01pQXRJRTFoZEdndVpteHZiM0lvWEc0Z0lDQWdUV0YwYUM1emNYSjBLQzA0SUNvZ2MzUmhjblJKWkhnZ0t5QTBJQ29nWVdOMGFYWnBkSGxCY25KaGVTNXNaVzVuZEdnZ0tpQW9ZV04wYVhacGRIbEJjbkpoZVM1c1pXNW5kR2dnTFNBeEtTQXRJRGNwSUM4Z01pQXRJREF1TlNrN1hHNGdJR052Ym5OMElITjBZWEowUTI5c0lEMGdjM1JoY25SSlpIZ2dMU0JoWTNScGRtbDBlVUZ5Y21GNUxteGxibWQwYUNBcUlITjBZWEowVW05M0lDc2dUV0YwYUM1bWJHOXZjaWdvYzNSaGNuUlNiM2NnS3lBeEtTQXFJQ2h6ZEdGeWRGSnZkeUFySURJcElDOGdNaWs3WEc0Z0lHeGxkQ0J6WlhFeFNXUjRJRDBnYzNSaGNuUlNiM2M3WEc0Z0lHeGxkQ0J6WlhFeVNXUjRJRDBnYzNSaGNuUkRiMnc3WEc0Z0lHTnZibk4wSUhSbGJYQkVZWFJoSUQwZ2JtVjNJRUZ5Y21GNUtHMXZibTl0WlhKSmJtWnZRWEp5WVhrdWJHVnVaM1JvS1R0Y2JpQWdkMmhwYkdVZ0tHTnVkQ0E4SUdOb2RXNXJVMmw2WlNrZ2UxeHVJQ0FnSUdsbUlDZ2hLR04xY25KbGJuUlVZWEpuWlhSSlpIZ2dJVDA5SUMweElDWW1JQ2h6WlhSMGFXNW5jeTUwWVhKblpYUkRiMncvTG5KaGQwUmhkR0ZiYzJWeE1VbGtlRjBnSVQwOUlHTjFjbkpsYm5SVVlYSm5aWFJKWkhnZ2ZIeGNiaUFnSUNBZ0lITmxkSFJwYm1kekxuUmhjbWRsZEVOdmJEOHVjbUYzUkdGMFlWdHpaWEV5U1dSNFhTQWhQVDBnWTNWeWNtVnVkRlJoY21kbGRFbGtlQ2twS1NCN1hHNGdJQ0FnSUNCc1pYUWdjM1ZpYzNSRGIzVnVkR1Z5SUQwZ01EdGNiaUFnSUNBZ0lHTnZibk4wSUdGamRHbDJhWFI1Vm1Gc1UyVnhNU0E5SUdGamRHbDJhWFI1UVhKeVlYbGJjMlZ4TVVsa2VGMDdYRzRnSUNBZ0lDQmpiMjV6ZENCaFkzUnBkbWwwZVZaaGJGTmxjVElnUFNCaFkzUnBkbWwwZVVGeWNtRjVXM05sY1RKSlpIaGRPMXh1SUNBZ0lDQWdZMjl1YzNRZ1pHVnNkR0VnUFNCaFkzUnBkbWwwZVZaaGJGTmxjVEVnTFNCaFkzUnBkbWwwZVZaaGJGTmxjVEk3WEc0Z0lDQWdJQ0JwWmlBb1RXRjBhQzVoWW5Nb1pHVnNkR0VwSUQ0OUlITmxkSFJwYm1kekxtMXBia0ZqZEdsMmFYUjVSR1ZzZEdFcElIdGNiaUFnSUNBZ0lDQWdiR1YwSUhOMVluTjBRMjkxYm5SbGNrWnNZV2NnUFNCbVlXeHpaVHRjYmlBZ0lDQWdJQ0FnYkdWMElIUmxiWEJFWVhSaFNXUjRJRDBnTUR0Y2JpQWdJQ0FnSUNBZ1ptOXlJQ2hqYjI1emRDQnRiMjV2YldWeVNXNW1ieUJ2WmlCdGIyNXZiV1Z5U1c1bWIwRnljbUY1S1NCN1hHNGdJQ0FnSUNBZ0lDQWdZMjl1YzNRZ2MyVnhNV05oZEdWbmIzSjVTV1I0SUQwZ2JXOXViMjFsY2tsdVptOHVjbUYzUkdGMFlWdHpaWEV4U1dSNFhUdGNiaUFnSUNBZ0lDQWdJQ0JqYjI1emRDQnpaWEV5WTJGMFpXZHZjbmxKWkhnZ1BTQnRiMjV2YldWeVNXNW1ieTV5WVhkRVlYUmhXM05sY1RKSlpIaGRPMXh1SUNBZ0lDQWdJQ0FnSUdsbUlDaHpaWEV4WTJGMFpXZHZjbmxKWkhnZ1BUMDlJSE5sY1RKallYUmxaMjl5ZVVsa2VDbGNiaUFnSUNBZ0lDQWdJQ0FnSUdOdmJuUnBiblZsTzF4dVhHNGdJQ0FnSUNBZ0lDQWdjM1ZpYzNSRGIzVnVkR1Z5S3lzN1hHNGdJQ0FnSUNBZ0lDQWdjM1ZpYzNSRGIzVnVkR1Z5Um14aFp5QTlJSE4xWW5OMFEyOTFiblJsY2lBK0lITmxkSFJwYm1kekxtMWhlRTExZEdGMGFXOXVjenRjYmlBZ0lDQWdJQ0FnSUNCcFppQW9jM1ZpYzNSRGIzVnVkR1Z5Um14aFp5bGNiaUFnSUNBZ0lDQWdJQ0FnSUdKeVpXRnJPMXh1WEc0Z0lDQWdJQ0FnSUNBZ2RHVnRjRVJoZEdGYmRHVnRjRVJoZEdGSlpIZ3JLMTBnUFNCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0J3YjNNNklHMXZibTl0WlhKSmJtWnZMbTVoYldVc1hHNGdJQ0FnSUNBZ0lDQWdJQ0J6WlhFeFNXUjRPaUJ6WlhFeFNXUjRMRnh1SUNBZ0lDQWdJQ0FnSUNBZ2MyVnhNa2xrZURvZ2MyVnhNa2xrZUN4Y2JpQWdJQ0FnSUNBZ0lDQjlPMXh1SUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0FnSUdsbUlDZ2hLSE4xWW5OMFEyOTFiblJsY2tac1lXY2dmSHdnYzNWaWMzUkRiM1Z1ZEdWeUlEMDlQU0F3S1NrZ2UxeHVJQ0FnSUNBZ0lDQWdJR1p2Y2lBb2JHVjBJR2tnUFNBd095QnBJRHdnZEdWdGNFUmhkR0ZKWkhnN0lHa3JLeWtnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdZMjl1YzNRZ2RHVnRjRVJoZEdGRmJHVnRaVzUwSUQwZ2RHVnRjRVJoZEdGYmFWMDdYRzRnSUNBZ0lDQWdJQ0FnSUNCamIyNXpkQ0J3YjNOcGRHbHZiaUE5SUhSbGJYQkVZWFJoUld4bGJXVnVkQzV3YjNNN1hHNGdJQ0FnSUNBZ0lDQWdJQ0J3YjNNdWNIVnphQ2h3YjNOcGRHbHZiaWs3WEc0Z0lDQWdJQ0FnSUNBZ0lDQnpaWEV4U1dSNGN5NXdkWE5vS0hObGNURkpaSGdwTzF4dUlDQWdJQ0FnSUNBZ0lDQWdjMlZ4TWtsa2VITXVjSFZ6YUNoelpYRXlTV1I0S1R0Y2JpQWdJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJSDFjYmlBZ0lDQjlYRzRnSUNBZ1kyNTBLeXM3WEc0Z0lDQWdjMlZ4TWtsa2VDc3JPMXh1SUNBZ0lHbG1JQ2h6WlhFeVNXUjRJRDA5UFNCaFkzUnBkbWwwZVVGeWNtRjVMbXhsYm1kMGFDa2dlMXh1SUNBZ0lDQWdjMlZ4TVVsa2VDc3JPMXh1SUNBZ0lDQWdjMlZ4TWtsa2VDQTlJSE5sY1RGSlpIZ2dLeUF4TzF4dUlDQWdJSDFjYmlBZ2ZWeHVJQ0J3YjNOMFRXVnpjMkZuWlNoN1hHNGdJQ0FnY0c5ek9pQndiM01zWEc0Z0lDQWdjMlZ4TVVsa2VITTZJRzVsZHlCVmFXNTBNekpCY25KaGVTaHpaWEV4U1dSNGN5a3NYRzRnSUNBZ2MyVnhNa2xrZUhNNklHNWxkeUJWYVc1ME16SkJjbkpoZVNoelpYRXlTV1I0Y3lrc1hHNGdJSDBwTzF4dWZUdGNiaUpkZlE9PSIsIi8vIHN0YXJ0dXBcbi8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuLy8gVGhpcyBlbnRyeSBtb2R1bGUgaXMgcmVmZXJlbmNlZCBieSBvdGhlciBtb2R1bGVzIHNvIGl0IGNhbid0IGJlIGlubGluZWRcbnZhciBfX3dlYnBhY2tfZXhwb3J0c19fID0ge307XG5fX3dlYnBhY2tfbW9kdWxlc19fWzg0MzZdKCk7XG4iXSwibmFtZXMiOlsiX19hd2FpdGVyIiwidGhpcyIsInRoaXNBcmciLCJfYXJndW1lbnRzIiwiUCIsImdlbmVyYXRvciIsIlByb21pc2UiLCJyZXNvbHZlIiwicmVqZWN0IiwiZnVsZmlsbGVkIiwidmFsdWUiLCJzdGVwIiwibmV4dCIsImUiLCJyZWplY3RlZCIsInJlc3VsdCIsImRvbmUiLCJ0aGVuIiwiYXBwbHkiLCJvbm1lc3NhZ2UiLCJldmVudCIsIl9hIiwiX2IiLCJzdGFydElkeCIsImVuZElkeCIsImFjdGl2aXR5QXJyYXkiLCJtb25vbWVySW5mb0FycmF5Iiwic2V0dGluZ3MiLCJjdXJyZW50VGFyZ2V0SWR4IiwiZGF0YSIsInBvcyIsInNlcTFJZHhzIiwic2VxMklkeHMiLCJjaHVua1NpemUiLCJjbnQiLCJzdGFydFJvdyIsImxlbmd0aCIsIk1hdGgiLCJmbG9vciIsInNxcnQiLCJzZXExSWR4Iiwic2VxMklkeCIsInRlbXBEYXRhIiwiQXJyYXkiLCJ0YXJnZXRDb2wiLCJyYXdEYXRhIiwic3Vic3RDb3VudGVyIiwiZGVsdGEiLCJhYnMiLCJtaW5BY3Rpdml0eURlbHRhIiwic3Vic3RDb3VudGVyRmxhZyIsInRlbXBEYXRhSWR4IiwibW9ub21lckluZm8iLCJtYXhNdXRhdGlvbnMiLCJuYW1lIiwiaSIsInBvc2l0aW9uIiwicHVzaCIsInBvc3RNZXNzYWdlIiwiVWludDMyQXJyYXkiXSwic291cmNlUm9vdCI6IiJ9
1
+ var peptides;(()=>{"use strict";({436:function(){var t=this&&this.__awaiter||function(t,n,e,a){return new(e||(e=Promise))((function(o,r){function i(t){try{c(a.next(t))}catch(t){r(t)}}function s(t){try{c(a.throw(t))}catch(t){r(t)}}function c(t){var n;t.done?o(t.value):(n=t.value,n instanceof e?n:new e((function(t){t(n)}))).then(i,s)}c((a=a.apply(t,n||[])).next())}))};onmessage=n=>t(void 0,void 0,void 0,(function*(){var t,e;const{startIdx:a,endIdx:o,activityArray:r,monomerInfoArray:i,settings:s,currentTargetIdx:c}=n.data,l=[],f=[],d=[],h=o-a;let u=0;const v=r.length-2-Math.floor(Math.sqrt(-8*a+4*r.length*(r.length-1)-7)/2-.5);let p=v,g=a-r.length*v+Math.floor((v+1)*(v+2)/2);const w=new Array(i.length);for(;u<h;){if(-1===c||(null===(t=s.targetCol)||void 0===t?void 0:t.rawData[p])===c&&(null===(e=s.targetCol)||void 0===e?void 0:e.rawData[g])===c){let t=0;const n=r[p]-r[g];if(Math.abs(n)>=s.minActivityDelta){let n=!1,e=0;for(const a of i)if(a.rawData[p]!==a.rawData[g]){if(t++,n=t>s.maxMutations,n)break;w[e++]={pos:a.name,seq1Idx:p,seq2Idx:g}}if(!n&&0!==t)for(let t=0;t<e;t++){const n=w[t].pos;l.push(n),f.push(p),d.push(g)}}}u++,g++,g===r.length&&(p++,g=p+1)}postMessage({pos:l,seq1Idxs:new Uint32Array(f),seq2Idxs:new Uint32Array(d)})}))}})[436](),peptides={}})();
2
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,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MUJDLFNBQVUsSUFBSTJCLFlBQVkzQixJQUVsQyxHLElDbkVvQixPLFNBRE0sQ0FBQyxDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcGVwdGlkZXMvLi9zcmMvd29ya2Vycy9tdXRhdGlvbi1jbGlmZnMtd29ya2VyLnRzIiwid2VicGFjazovL3BlcHRpZGVzL3dlYnBhY2svc3RhcnR1cCJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2F3YWl0ZXIgPSAodGhpcyAmJiB0aGlzLl9fYXdhaXRlcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gICAgfSk7XG59O1xub25tZXNzYWdlID0gKGV2ZW50KSA9PiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICB2YXIgX2EsIF9iO1xuICAgIGNvbnN0IHsgc3RhcnRJZHgsIGVuZElkeCwgYWN0aXZpdHlBcnJheSwgbW9ub21lckluZm9BcnJheSwgc2V0dGluZ3MsIGN1cnJlbnRUYXJnZXRJZHggfSA9IGV2ZW50LmRhdGE7XG4gICAgY29uc3QgcG9zID0gW107XG4gICAgY29uc3Qgc2VxMUlkeHMgPSBbXTtcbiAgICBjb25zdCBzZXEySWR4cyA9IFtdO1xuICAgIGNvbnN0IGNodW5rU2l6ZSA9IGVuZElkeCAtIHN0YXJ0SWR4O1xuICAgIGxldCBjbnQgPSAwO1xuICAgIGNvbnN0IHN0YXJ0Um93ID0gYWN0aXZpdHlBcnJheS5sZW5ndGggLSAyIC0gTWF0aC5mbG9vcihNYXRoLnNxcnQoLTggKiBzdGFydElkeCArIDQgKiBhY3Rpdml0eUFycmF5Lmxlbmd0aCAqIChhY3Rpdml0eUFycmF5Lmxlbmd0aCAtIDEpIC0gNykgLyAyIC0gMC41KTtcbiAgICBjb25zdCBzdGFydENvbCA9IHN0YXJ0SWR4IC0gYWN0aXZpdHlBcnJheS5sZW5ndGggKiBzdGFydFJvdyArIE1hdGguZmxvb3IoKHN0YXJ0Um93ICsgMSkgKiAoc3RhcnRSb3cgKyAyKSAvIDIpO1xuICAgIGxldCBzZXExSWR4ID0gc3RhcnRSb3c7XG4gICAgbGV0IHNlcTJJZHggPSBzdGFydENvbDtcbiAgICBjb25zdCB0ZW1wRGF0YSA9IG5ldyBBcnJheShtb25vbWVySW5mb0FycmF5Lmxlbmd0aCk7XG4gICAgd2hpbGUgKGNudCA8IGNodW5rU2l6ZSkge1xuICAgICAgICBpZiAoIShjdXJyZW50VGFyZ2V0SWR4ICE9PSAtMSAmJiAoKChfYSA9IHNldHRpbmdzLnRhcmdldENvbCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnJhd0RhdGFbc2VxMUlkeF0pICE9PSBjdXJyZW50VGFyZ2V0SWR4IHx8XG4gICAgICAgICAgICAoKF9iID0gc2V0dGluZ3MudGFyZ2V0Q29sKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IucmF3RGF0YVtzZXEySWR4XSkgIT09IGN1cnJlbnRUYXJnZXRJZHgpKSkge1xuICAgICAgICAgICAgbGV0IHN1YnN0Q291bnRlciA9IDA7XG4gICAgICAgICAgICBjb25zdCBhY3Rpdml0eVZhbFNlcTEgPSBhY3Rpdml0eUFycmF5W3NlcTFJZHhdO1xuICAgICAgICAgICAgY29uc3QgYWN0aXZpdHlWYWxTZXEyID0gYWN0aXZpdHlBcnJheVtzZXEySWR4XTtcbiAgICAgICAgICAgIGNvbnN0IGRlbHRhID0gYWN0aXZpdHlWYWxTZXExIC0gYWN0aXZpdHlWYWxTZXEyO1xuICAgICAgICAgICAgaWYgKE1hdGguYWJzKGRlbHRhKSA+PSBzZXR0aW5ncy5taW5BY3Rpdml0eURlbHRhKSB7XG4gICAgICAgICAgICAgICAgbGV0IHN1YnN0Q291bnRlckZsYWcgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBsZXQgdGVtcERhdGFJZHggPSAwO1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgbW9ub21lckluZm8gb2YgbW9ub21lckluZm9BcnJheSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBzZXExY2F0ZWdvcnlJZHggPSBtb25vbWVySW5mby5yYXdEYXRhW3NlcTFJZHhdO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBzZXEyY2F0ZWdvcnlJZHggPSBtb25vbWVySW5mby5yYXdEYXRhW3NlcTJJZHhdO1xuICAgICAgICAgICAgICAgICAgICBpZiAoc2VxMWNhdGVnb3J5SWR4ID09PSBzZXEyY2F0ZWdvcnlJZHgpXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgc3Vic3RDb3VudGVyKys7XG4gICAgICAgICAgICAgICAgICAgIHN1YnN0Q291bnRlckZsYWcgPSBzdWJzdENvdW50ZXIgPiBzZXR0aW5ncy5tYXhNdXRhdGlvbnM7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzdWJzdENvdW50ZXJGbGFnKVxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIHRlbXBEYXRhW3RlbXBEYXRhSWR4KytdID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcG9zOiBtb25vbWVySW5mby5uYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgc2VxMUlkeDogc2VxMUlkeCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlcTJJZHg6IHNlcTJJZHgsXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICghKHN1YnN0Q291bnRlckZsYWcgfHwgc3Vic3RDb3VudGVyID09PSAwKSkge1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRlbXBEYXRhSWR4OyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHRlbXBEYXRhRWxlbWVudCA9IHRlbXBEYXRhW2ldO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcG9zaXRpb24gPSB0ZW1wRGF0YUVsZW1lbnQucG9zO1xuICAgICAgICAgICAgICAgICAgICAgICAgcG9zLnB1c2gocG9zaXRpb24pO1xuICAgICAgICAgICAgICAgICAgICAgICAgc2VxMUlkeHMucHVzaChzZXExSWR4KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlcTJJZHhzLnB1c2goc2VxMklkeCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY250Kys7XG4gICAgICAgIHNlcTJJZHgrKztcbiAgICAgICAgaWYgKHNlcTJJZHggPT09IGFjdGl2aXR5QXJyYXkubGVuZ3RoKSB7XG4gICAgICAgICAgICBzZXExSWR4Kys7XG4gICAgICAgICAgICBzZXEySWR4ID0gc2VxMUlkeCArIDE7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcG9zdE1lc3NhZ2Uoe1xuICAgICAgICBwb3M6IHBvcyxcbiAgICAgICAgc2VxMUlkeHM6IG5ldyBVaW50MzJBcnJheShzZXExSWR4cyksXG4gICAgICAgIHNlcTJJZHhzOiBuZXcgVWludDMyQXJyYXkoc2VxMklkeHMpLFxuICAgIH0pO1xufSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2liWFYwWVhScGIyNHRZMnhwWm1aekxYZHZjbXRsY2k1cWN5SXNJbk52ZFhKalpWSnZiM1FpT2lJaUxDSnpiM1Z5WTJWeklqcGJJbTExZEdGMGFXOXVMV05zYVdabWN5MTNiM0pyWlhJdWRITWlYU3dpYm1GdFpYTWlPbHRkTENKdFlYQndhVzVuY3lJNklqczdPenM3T3pzN096dEJRVUZCTEZOQlFWTXNSMEZCUnl4RFFVRlBMRXRCUVVzc1JVRkJhVUlzUlVGQlJUczdTVUZEZWtNc1RVRkJUU3hGUVVGRExGRkJRVkVzUlVGQlJTeE5RVUZOTEVWQlFVVXNZVUZCWVN4RlFVRkZMR2RDUVVGblFpeEZRVUZGTEZGQlFWRXNSVUZCUlN4blFrRkJaMElzUlVGQlF5eEhRVUZITEV0QlFVc3NRMEZCUXl4SlFVRkpMRU5CUVVNN1NVRkRia2NzVFVGQlRTeEhRVUZITEVkQlFXRXNSVUZCUlN4RFFVRkRPMGxCUTNwQ0xFMUJRVTBzVVVGQlVTeEhRVUZoTEVWQlFVVXNRMEZCUXp0SlFVTTVRaXhOUVVGTkxGRkJRVkVzUjBGQllTeEZRVUZGTEVOQlFVTTdTVUZET1VJc1RVRkJUU3hUUVVGVExFZEJRVWNzVFVGQlRTeEhRVUZITEZGQlFWRXNRMEZCUXp0SlFVTndReXhKUVVGSkxFZEJRVWNzUjBGQlJ5eERRVUZETEVOQlFVTTdTVUZEV2l4TlFVRk5MRkZCUVZFc1IwRkJSeXhoUVVGaExFTkJRVU1zVFVGQlRTeEhRVUZITEVOQlFVTXNSMEZCUnl4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVOd1JDeEpRVUZKTEVOQlFVTXNTVUZCU1N4RFFVRkRMRU5CUVVNc1EwRkJReXhIUVVGSExGRkJRVkVzUjBGQlJ5eERRVUZETEVkQlFVY3NZVUZCWVN4RFFVRkRMRTFCUVUwc1IwRkJSeXhEUVVGRExHRkJRV0VzUTBGQlF5eE5RVUZOTEVkQlFVY3NRMEZCUXl4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRExFZEJRVWNzUTBGQlF5eEhRVUZITEVkQlFVY3NRMEZCUXl4RFFVRkRPMGxCUTJ4SExFMUJRVTBzVVVGQlVTeEhRVUZITEZGQlFWRXNSMEZCUnl4aFFVRmhMRU5CUVVNc1RVRkJUU3hIUVVGSExGRkJRVkVzUjBGQlJ5eEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRU5CUVVNc1VVRkJVU3hIUVVGSExFTkJRVU1zUTBGQlF5eEhRVUZITEVOQlFVTXNVVUZCVVN4SFFVRkhMRU5CUVVNc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF5eERRVUZETzBsQlF6bEhMRWxCUVVrc1QwRkJUeXhIUVVGSExGRkJRVkVzUTBGQlF6dEpRVU4yUWl4SlFVRkpMRTlCUVU4c1IwRkJSeXhSUVVGUkxFTkJRVU03U1VGRGRrSXNUVUZCVFN4UlFVRlJMRWRCUVVjc1NVRkJTU3hMUVVGTExFTkJRVU1zWjBKQlFXZENMRU5CUVVNc1RVRkJUU3hEUVVGRExFTkJRVU03U1VGRGNFUXNUMEZCVHl4SFFVRkhMRWRCUVVjc1UwRkJVeXhGUVVGRk8xRkJRM1JDTEVsQlFVa3NRMEZCUXl4RFFVRkRMR2RDUVVGblFpeExRVUZMTEVOQlFVTXNRMEZCUXl4SlFVRkpMRU5CUVVNc1EwRkJRU3hOUVVGQkxGRkJRVkVzUTBGQlF5eFRRVUZUTERCRFFVRkZMRTlCUVU4c1EwRkJReXhQUVVGUExFTkJRVU1zVFVGQlN5eG5Ra0ZCWjBJN1dVRkRla1lzUTBGQlFTeE5RVUZCTEZGQlFWRXNRMEZCUXl4VFFVRlRMREJEUVVGRkxFOUJRVThzUTBGQlF5eFBRVUZQTEVOQlFVTXNUVUZCU3l4blFrRkJaMElzUTBGQlF5eERRVUZETEVWQlFVVTdXVUZETjBRc1NVRkJTU3haUVVGWkxFZEJRVWNzUTBGQlF5eERRVUZETzFsQlEzSkNMRTFCUVUwc1pVRkJaU3hIUVVGSExHRkJRV0VzUTBGQlF5eFBRVUZQTEVOQlFVTXNRMEZCUXp0WlFVTXZReXhOUVVGTkxHVkJRV1VzUjBGQlJ5eGhRVUZoTEVOQlFVTXNUMEZCVHl4RFFVRkRMRU5CUVVNN1dVRkRMME1zVFVGQlRTeExRVUZMTEVkQlFVY3NaVUZCWlN4SFFVRkhMR1ZCUVdVc1EwRkJRenRaUVVOb1JDeEpRVUZKTEVsQlFVa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1MwRkJTeXhEUVVGRExFbEJRVWtzVVVGQlVTeERRVUZETEdkQ1FVRm5RaXhGUVVGRk8yZENRVU5vUkN4SlFVRkpMR2RDUVVGblFpeEhRVUZITEV0QlFVc3NRMEZCUXp0blFrRkROMElzU1VGQlNTeFhRVUZYTEVkQlFVY3NRMEZCUXl4RFFVRkRPMmRDUVVOd1FpeExRVUZMTEUxQlFVMHNWMEZCVnl4SlFVRkpMR2RDUVVGblFpeEZRVUZGTzI5Q1FVTXhReXhOUVVGTkxHVkJRV1VzUjBGQlJ5eFhRVUZYTEVOQlFVTXNUMEZCVHl4RFFVRkRMRTlCUVU4c1EwRkJReXhEUVVGRE8yOUNRVU55UkN4TlFVRk5MR1ZCUVdVc1IwRkJSeXhYUVVGWExFTkJRVU1zVDBGQlR5eERRVUZETEU5QlFVOHNRMEZCUXl4RFFVRkRPMjlDUVVOeVJDeEpRVUZKTEdWQlFXVXNTMEZCU3l4bFFVRmxPM2RDUVVOeVF5eFRRVUZUTzI5Q1FVVllMRmxCUVZrc1JVRkJSU3hEUVVGRE8yOUNRVU5tTEdkQ1FVRm5RaXhIUVVGSExGbEJRVmtzUjBGQlJ5eFJRVUZSTEVOQlFVTXNXVUZCV1N4RFFVRkRPMjlDUVVONFJDeEpRVUZKTEdkQ1FVRm5RanQzUWtGRGJFSXNUVUZCVFR0dlFrRkZVaXhSUVVGUkxFTkJRVU1zVjBGQlZ5eEZRVUZGTEVOQlFVTXNSMEZCUnp0M1FrRkRlRUlzUjBGQlJ5eEZRVUZGTEZkQlFWY3NRMEZCUXl4SlFVRkpPM2RDUVVOeVFpeFBRVUZQTEVWQlFVVXNUMEZCVHp0M1FrRkRhRUlzVDBGQlR5eEZRVUZGTEU5QlFVODdjVUpCUTJwQ0xFTkJRVU03YVVKQlEwZzdaMEpCUTBRc1NVRkJTU3hEUVVGRExFTkJRVU1zWjBKQlFXZENMRWxCUVVrc1dVRkJXU3hMUVVGTExFTkJRVU1zUTBGQlF5eEZRVUZGTzI5Q1FVTTNReXhMUVVGTExFbEJRVWtzUTBGQlF5eEhRVUZITEVOQlFVTXNSVUZCUlN4RFFVRkRMRWRCUVVjc1YwRkJWeXhGUVVGRkxFTkJRVU1zUlVGQlJTeEZRVUZGTzNkQ1FVTndReXhOUVVGTkxHVkJRV1VzUjBGQlJ5eFJRVUZSTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN2QwSkJRM0JETEUxQlFVMHNVVUZCVVN4SFFVRkhMR1ZCUVdVc1EwRkJReXhIUVVGSExFTkJRVU03ZDBKQlEzSkRMRWRCUVVjc1EwRkJReXhKUVVGSkxFTkJRVU1zVVVGQlVTeERRVUZETEVOQlFVTTdkMEpCUTI1Q0xGRkJRVkVzUTBGQlF5eEpRVUZKTEVOQlFVTXNUMEZCVHl4RFFVRkRMRU5CUVVNN2QwSkJRM1pDTEZGQlFWRXNRMEZCUXl4SlFVRkpMRU5CUVVNc1QwRkJUeXhEUVVGRExFTkJRVU03Y1VKQlEzaENPMmxDUVVOR08yRkJRMFk3VTBGRFJqdFJRVU5FTEVkQlFVY3NSVUZCUlN4RFFVRkRPMUZCUTA0c1QwRkJUeXhGUVVGRkxFTkJRVU03VVVGRFZpeEpRVUZKTEU5QlFVOHNTMEZCU3l4aFFVRmhMRU5CUVVNc1RVRkJUU3hGUVVGRk8xbEJRM0JETEU5QlFVOHNSVUZCUlN4RFFVRkRPMWxCUTFZc1QwRkJUeXhIUVVGSExFOUJRVThzUjBGQlJ5eERRVUZETEVOQlFVTTdVMEZEZGtJN1MwRkRSanRKUVVORUxGZEJRVmNzUTBGQlF6dFJRVU5XTEVkQlFVY3NSVUZCUlN4SFFVRkhPMUZCUTFJc1VVRkJVU3hGUVVGRkxFbEJRVWtzVjBGQlZ5eERRVUZETEZGQlFWRXNRMEZCUXp0UlFVTnVReXhSUVVGUkxFVkJRVVVzU1VGQlNTeFhRVUZYTEVOQlFVTXNVVUZCVVN4RFFVRkRPMHRCUTNCRExFTkJRVU1zUTBGQlF6dEJRVU5NTEVOQlFVTXNRMEZCUVN4RFFVRkRJaXdpYzI5MWNtTmxjME52Ym5SbGJuUWlPbHNpYjI1dFpYTnpZV2RsSUQwZ1lYTjVibU1nS0dWMlpXNTBLVG9nVUhKdmJXbHpaVHgyYjJsa1BpQTlQaUI3WEc0Z0lHTnZibk4wSUh0emRHRnlkRWxrZUN3Z1pXNWtTV1I0TENCaFkzUnBkbWwwZVVGeWNtRjVMQ0J0YjI1dmJXVnlTVzVtYjBGeWNtRjVMQ0J6WlhSMGFXNW5jeXdnWTNWeWNtVnVkRlJoY21kbGRFbGtlSDBnUFNCbGRtVnVkQzVrWVhSaE8xeHVJQ0JqYjI1emRDQndiM002SUhOMGNtbHVaMXRkSUQwZ1cxMDdYRzRnSUdOdmJuTjBJSE5sY1RGSlpIaHpPaUJ1ZFcxaVpYSmJYU0E5SUZ0ZE8xeHVJQ0JqYjI1emRDQnpaWEV5U1dSNGN6b2diblZ0WW1WeVcxMGdQU0JiWFR0Y2JpQWdZMjl1YzNRZ1kyaDFibXRUYVhwbElEMGdaVzVrU1dSNElDMGdjM1JoY25SSlpIZzdYRzRnSUd4bGRDQmpiblFnUFNBd08xeHVJQ0JqYjI1emRDQnpkR0Z5ZEZKdmR5QTlJR0ZqZEdsMmFYUjVRWEp5WVhrdWJHVnVaM1JvSUMwZ01pQXRJRTFoZEdndVpteHZiM0lvWEc0Z0lDQWdUV0YwYUM1emNYSjBLQzA0SUNvZ2MzUmhjblJKWkhnZ0t5QTBJQ29nWVdOMGFYWnBkSGxCY25KaGVTNXNaVzVuZEdnZ0tpQW9ZV04wYVhacGRIbEJjbkpoZVM1c1pXNW5kR2dnTFNBeEtTQXRJRGNwSUM4Z01pQXRJREF1TlNrN1hHNGdJR052Ym5OMElITjBZWEowUTI5c0lEMGdjM1JoY25SSlpIZ2dMU0JoWTNScGRtbDBlVUZ5Y21GNUxteGxibWQwYUNBcUlITjBZWEowVW05M0lDc2dUV0YwYUM1bWJHOXZjaWdvYzNSaGNuUlNiM2NnS3lBeEtTQXFJQ2h6ZEdGeWRGSnZkeUFySURJcElDOGdNaWs3WEc0Z0lHeGxkQ0J6WlhFeFNXUjRJRDBnYzNSaGNuUlNiM2M3WEc0Z0lHeGxkQ0J6WlhFeVNXUjRJRDBnYzNSaGNuUkRiMnc3WEc0Z0lHTnZibk4wSUhSbGJYQkVZWFJoSUQwZ2JtVjNJRUZ5Y21GNUtHMXZibTl0WlhKSmJtWnZRWEp5WVhrdWJHVnVaM1JvS1R0Y2JpQWdkMmhwYkdVZ0tHTnVkQ0E4SUdOb2RXNXJVMmw2WlNrZ2UxeHVJQ0FnSUdsbUlDZ2hLR04xY25KbGJuUlVZWEpuWlhSSlpIZ2dJVDA5SUMweElDWW1JQ2h6WlhSMGFXNW5jeTUwWVhKblpYUkRiMncvTG5KaGQwUmhkR0ZiYzJWeE1VbGtlRjBnSVQwOUlHTjFjbkpsYm5SVVlYSm5aWFJKWkhnZ2ZIeGNiaUFnSUNBZ0lITmxkSFJwYm1kekxuUmhjbWRsZEVOdmJEOHVjbUYzUkdGMFlWdHpaWEV5U1dSNFhTQWhQVDBnWTNWeWNtVnVkRlJoY21kbGRFbGtlQ2twS1NCN1hHNGdJQ0FnSUNCc1pYUWdjM1ZpYzNSRGIzVnVkR1Z5SUQwZ01EdGNiaUFnSUNBZ0lHTnZibk4wSUdGamRHbDJhWFI1Vm1Gc1UyVnhNU0E5SUdGamRHbDJhWFI1UVhKeVlYbGJjMlZ4TVVsa2VGMDdYRzRnSUNBZ0lDQmpiMjV6ZENCaFkzUnBkbWwwZVZaaGJGTmxjVElnUFNCaFkzUnBkbWwwZVVGeWNtRjVXM05sY1RKSlpIaGRPMXh1SUNBZ0lDQWdZMjl1YzNRZ1pHVnNkR0VnUFNCaFkzUnBkbWwwZVZaaGJGTmxjVEVnTFNCaFkzUnBkbWwwZVZaaGJGTmxjVEk3WEc0Z0lDQWdJQ0JwWmlBb1RXRjBhQzVoWW5Nb1pHVnNkR0VwSUQ0OUlITmxkSFJwYm1kekxtMXBia0ZqZEdsMmFYUjVSR1ZzZEdFcElIdGNiaUFnSUNBZ0lDQWdiR1YwSUhOMVluTjBRMjkxYm5SbGNrWnNZV2NnUFNCbVlXeHpaVHRjYmlBZ0lDQWdJQ0FnYkdWMElIUmxiWEJFWVhSaFNXUjRJRDBnTUR0Y2JpQWdJQ0FnSUNBZ1ptOXlJQ2hqYjI1emRDQnRiMjV2YldWeVNXNW1ieUJ2WmlCdGIyNXZiV1Z5U1c1bWIwRnljbUY1S1NCN1hHNGdJQ0FnSUNBZ0lDQWdZMjl1YzNRZ2MyVnhNV05oZEdWbmIzSjVTV1I0SUQwZ2JXOXViMjFsY2tsdVptOHVjbUYzUkdGMFlWdHpaWEV4U1dSNFhUdGNiaUFnSUNBZ0lDQWdJQ0JqYjI1emRDQnpaWEV5WTJGMFpXZHZjbmxKWkhnZ1BTQnRiMjV2YldWeVNXNW1ieTV5WVhkRVlYUmhXM05sY1RKSlpIaGRPMXh1SUNBZ0lDQWdJQ0FnSUdsbUlDaHpaWEV4WTJGMFpXZHZjbmxKWkhnZ1BUMDlJSE5sY1RKallYUmxaMjl5ZVVsa2VDbGNiaUFnSUNBZ0lDQWdJQ0FnSUdOdmJuUnBiblZsTzF4dVhHNGdJQ0FnSUNBZ0lDQWdjM1ZpYzNSRGIzVnVkR1Z5S3lzN1hHNGdJQ0FnSUNBZ0lDQWdjM1ZpYzNSRGIzVnVkR1Z5Um14aFp5QTlJSE4xWW5OMFEyOTFiblJsY2lBK0lITmxkSFJwYm1kekxtMWhlRTExZEdGMGFXOXVjenRjYmlBZ0lDQWdJQ0FnSUNCcFppQW9jM1ZpYzNSRGIzVnVkR1Z5Um14aFp5bGNiaUFnSUNBZ0lDQWdJQ0FnSUdKeVpXRnJPMXh1WEc0Z0lDQWdJQ0FnSUNBZ2RHVnRjRVJoZEdGYmRHVnRjRVJoZEdGSlpIZ3JLMTBnUFNCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0J3YjNNNklHMXZibTl0WlhKSmJtWnZMbTVoYldVc1hHNGdJQ0FnSUNBZ0lDQWdJQ0J6WlhFeFNXUjRPaUJ6WlhFeFNXUjRMRnh1SUNBZ0lDQWdJQ0FnSUNBZ2MyVnhNa2xrZURvZ2MyVnhNa2xrZUN4Y2JpQWdJQ0FnSUNBZ0lDQjlPMXh1SUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0FnSUdsbUlDZ2hLSE4xWW5OMFEyOTFiblJsY2tac1lXY2dmSHdnYzNWaWMzUkRiM1Z1ZEdWeUlEMDlQU0F3S1NrZ2UxeHVJQ0FnSUNBZ0lDQWdJR1p2Y2lBb2JHVjBJR2tnUFNBd095QnBJRHdnZEdWdGNFUmhkR0ZKWkhnN0lHa3JLeWtnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdZMjl1YzNRZ2RHVnRjRVJoZEdGRmJHVnRaVzUwSUQwZ2RHVnRjRVJoZEdGYmFWMDdYRzRnSUNBZ0lDQWdJQ0FnSUNCamIyNXpkQ0J3YjNOcGRHbHZiaUE5SUhSbGJYQkVZWFJoUld4bGJXVnVkQzV3YjNNN1hHNGdJQ0FnSUNBZ0lDQWdJQ0J3YjNNdWNIVnphQ2h3YjNOcGRHbHZiaWs3WEc0Z0lDQWdJQ0FnSUNBZ0lDQnpaWEV4U1dSNGN5NXdkWE5vS0hObGNURkpaSGdwTzF4dUlDQWdJQ0FnSUNBZ0lDQWdjMlZ4TWtsa2VITXVjSFZ6YUNoelpYRXlTV1I0S1R0Y2JpQWdJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJSDFjYmlBZ0lDQjlYRzRnSUNBZ1kyNTBLeXM3WEc0Z0lDQWdjMlZ4TWtsa2VDc3JPMXh1SUNBZ0lHbG1JQ2h6WlhFeVNXUjRJRDA5UFNCaFkzUnBkbWwwZVVGeWNtRjVMbXhsYm1kMGFDa2dlMXh1SUNBZ0lDQWdjMlZ4TVVsa2VDc3JPMXh1SUNBZ0lDQWdjMlZ4TWtsa2VDQTlJSE5sY1RGSlpIZ2dLeUF4TzF4dUlDQWdJSDFjYmlBZ2ZWeHVJQ0J3YjNOMFRXVnpjMkZuWlNoN1hHNGdJQ0FnY0c5ek9pQndiM01zWEc0Z0lDQWdjMlZ4TVVsa2VITTZJRzVsZHlCVmFXNTBNekpCY25KaGVTaHpaWEV4U1dSNGN5a3NYRzRnSUNBZ2MyVnhNa2xrZUhNNklHNWxkeUJWYVc1ME16SkJjbkpoZVNoelpYRXlTV1I0Y3lrc1hHNGdJSDBwTzF4dWZUdGNiaUpkZlE9PSIsIi8vIHN0YXJ0dXBcbi8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuLy8gVGhpcyBlbnRyeSBtb2R1bGUgaXMgcmVmZXJlbmNlZCBieSBvdGhlciBtb2R1bGVzIHNvIGl0IGNhbid0IGJlIGlubGluZWRcbnZhciBfX3dlYnBhY2tfZXhwb3J0c19fID0ge307XG5fX3dlYnBhY2tfbW9kdWxlc19fWzQzNl0oKTtcbiJdLCJuYW1lcyI6WyJfX2F3YWl0ZXIiLCJ0aGlzIiwidGhpc0FyZyIsIl9hcmd1bWVudHMiLCJQIiwiZ2VuZXJhdG9yIiwiUHJvbWlzZSIsInJlc29sdmUiLCJyZWplY3QiLCJmdWxmaWxsZWQiLCJ2YWx1ZSIsInN0ZXAiLCJuZXh0IiwiZSIsInJlamVjdGVkIiwicmVzdWx0IiwiZG9uZSIsInRoZW4iLCJhcHBseSIsIm9ubWVzc2FnZSIsImV2ZW50IiwiX2EiLCJfYiIsInN0YXJ0SWR4IiwiZW5kSWR4IiwiYWN0aXZpdHlBcnJheSIsIm1vbm9tZXJJbmZvQXJyYXkiLCJzZXR0aW5ncyIsImN1cnJlbnRUYXJnZXRJZHgiLCJkYXRhIiwicG9zIiwic2VxMUlkeHMiLCJzZXEySWR4cyIsImNodW5rU2l6ZSIsImNudCIsInN0YXJ0Um93IiwibGVuZ3RoIiwiTWF0aCIsImZsb29yIiwic3FydCIsInNlcTFJZHgiLCJzZXEySWR4IiwidGVtcERhdGEiLCJBcnJheSIsInRhcmdldENvbCIsInJhd0RhdGEiLCJzdWJzdENvdW50ZXIiLCJkZWx0YSIsImFicyIsIm1pbkFjdGl2aXR5RGVsdGEiLCJzdWJzdENvdW50ZXJGbGFnIiwidGVtcERhdGFJZHgiLCJtb25vbWVySW5mbyIsIm1heE11dGF0aW9ucyIsIm5hbWUiLCJpIiwicG9zaXRpb24iLCJwdXNoIiwicG9zdE1lc3NhZ2UiLCJVaW50MzJBcnJheSJdLCJzb3VyY2VSb290IjoiIn0=
package/dist/796.js ADDED
@@ -0,0 +1,2 @@
1
+ var peptides;(()=>{"use strict";var t,n,e={905:(t,n,e)=>{e.d(n,{g:()=>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 w=[],v=[],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,v.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(v),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(),w.unshift(t);var t;O(w)}(),_>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)},962:(t,n,e)=>{t.exports=e.p+"9a8fbf37666e32487835.wasm"}},r={};function i(t){var n=r[t];if(void 0!==n)return n.exports;var o=r[t]={id:t,loaded:!1,exports:{}};return e[t](o,o.exports,i),o.loaded=!0,o.exports}i.m=e,i.amdO={},i.d=(t,n)=>{for(var e in n)i.o(n,e)&&!i.o(t,e)&&Object.defineProperty(t,e,{enumerable:!0,get:n[e]})},i.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(t){if("object"==typeof window)return window}}(),i.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),i.o=(t,n)=>Object.prototype.hasOwnProperty.call(t,n),(()=>{var t;i.g.importScripts&&(t=i.g.location+"");var n=i.g.document;if(!t&&n&&(n.currentScript&&(t=n.currentScript.src),!t)){var e=n.getElementsByTagName("script");if(e.length)for(var r=e.length-1;r>-1&&!t;)t=e[r--].src}if(!t)throw new Error("Automatic publicPath is not supported in this browser");t=t.replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/"),i.p=t})(),i.b=self.location+"",t=i(905),n=function(t,n,e,r){return new(e||(e=Promise))((function(i,o){function a(t){try{u(r.next(t))}catch(t){o(t)}}function s(t){try{u(r.throw(t))}catch(t){o(t)}}function u(t){var n;t.done?i(t.value):(n=t.value,n instanceof e?n:new e((function(t){t(n)}))).then(a,s)}u((r=r.apply(t,n||[])).next())}))},onmessage=e=>{const{embedX:r,embedY:o,epsilon:a,minPts:s}=e.data,u={};n(void 0,void 0,void 0,(function*(){try{const n=yield async function(n,e,r,o){const a=new URL(i(962),i.b).href,s=a.substring(0,a.lastIndexOf("/")+1)+"wasmDbscan.wasm";let u;try{u=await(0,t.g)({locateFile:()=>a,printErr:t=>{}})}catch(n){try{u=await(0,t.g)({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*n.length,l=u._malloc(f),p=u._malloc(f),h=new Uint8Array(u.HEAPU8.buffer,l,f);h.set(new Uint8Array(n.buffer));const d=new Uint8Array(u.HEAPU8.buffer,p,f);d.set(new Uint8Array(e.buffer));const m=u._malloc(f),y=new Uint8Array(u.HEAPU8.buffer,m,f);c(l,p,n.length,r,o,m);const b=new Int32Array(y.buffer,y.byteOffset,n.length);return u._free(h.byteOffset),u._free(d.byteOffset),u._free(y.byteOffset),b}(r,o,a,s);u.clusters=n,postMessage(u)}catch(t){u.error=t,postMessage(u)}}))},peptides={}})();
2
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,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QixJQUFJcE8sV0FBV21PLEVBQVl0TyxPQUFRc08sRUFBWUUsV0FBWTVCLEVBQU9wSyxRQUl4RixPQUhBK0ssRUFBYWtCLE1BQU1OLEVBQU1LLFlBQ3pCakIsRUFBYWtCLE1BQU1MLEVBQU1JLFlBQ3pCakIsRUFBYWtCLE1BQU1ILEVBQVlFLFlBQ3hCRCxDQUNYLENWckJtQ0csQ0FBTzlCLEVBQVFDLEVBQVFDLEVBQVNDLEdBQ3ZEQyxFQUFLQyxTQUFXQSxFQUNoQjBCLFlBQVkzQixFQUNoQixDQUNBLE1BQU9qTSxHQUNIaU0sRUFBS1csTUFBUTVNLEVBQ2I0TixZQUFZM0IsRUFDaEIsQ0FDSixHQUFLLEUiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9wZXB0aWRlcy8uL25vZGVfbW9kdWxlcy9AZGF0YWdyb2stbGlicmFyaWVzL21hdGgvc3JjL2Ric2Nhbi93YXNtL2NsdXN0ZXJpbmctd29ya2VyLmpzIiwid2VicGFjazovL3BlcHRpZGVzLy4vbm9kZV9tb2R1bGVzL0BkYXRhZ3Jvay1saWJyYXJpZXMvbWF0aC9zcmMvZGJzY2FuL3dhc20vd2FzbURic2Nhbi5qcyIsIndlYnBhY2s6Ly9wZXB0aWRlcy93ZWJwYWNrL2Jvb3RzdHJhcCIsIndlYnBhY2s6Ly9wZXB0aWRlcy93ZWJwYWNrL3J1bnRpbWUvYW1kIG9wdGlvbnMiLCJ3ZWJwYWNrOi8vcGVwdGlkZXMvd2VicGFjay9ydW50aW1lL2RlZmluZSBwcm9wZXJ0eSBnZXR0ZXJzIiwid2VicGFjazovL3BlcHRpZGVzL3dlYnBhY2svcnVudGltZS9nbG9iYWwiLCJ3ZWJwYWNrOi8vcGVwdGlkZXMvd2VicGFjay9ydW50aW1lL2hhcm1vbnkgbW9kdWxlIGRlY29yYXRvciIsIndlYnBhY2s6Ly9wZXB0aWRlcy93ZWJwYWNrL3J1bnRpbWUvaGFzT3duUHJvcGVydHkgc2hvcnRoYW5kIiwid2VicGFjazovL3BlcHRpZGVzL3dlYnBhY2svcnVudGltZS9wdWJsaWNQYXRoIiwid2VicGFjazovL3BlcHRpZGVzL3dlYnBhY2svcnVudGltZS9pbXBvcnRTY3JpcHRzIGNodW5rIGxvYWRpbmciLCJ3ZWJwYWNrOi8vcGVwdGlkZXMvLi9ub2RlX21vZHVsZXMvQGRhdGFncm9rLWxpYnJhcmllcy9tYXRoL3NyYy9kYnNjYW4vd2FzbS9kYnNjYW4uanMiXSwic291cmNlc0NvbnRlbnQiOlsidmFyIF9fYXdhaXRlciA9ICh0aGlzICYmIHRoaXMuX19hd2FpdGVyKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcbiAgICB9KTtcbn07XG5pbXBvcnQgeyBkYnNjYW4gfSBmcm9tICcuL2Ric2Nhbic7XG5vbm1lc3NhZ2UgPSAoZXZlbnQpID0+IHtcbiAgICBjb25zdCB7IGVtYmVkWCwgZW1iZWRZLCBlcHNpbG9uLCBtaW5QdHMgfSA9IGV2ZW50LmRhdGE7XG4gICAgY29uc3QgZGF0YSA9IHt9O1xuICAgICgoKSA9PiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IGNsdXN0ZXJzID0geWllbGQgZGJzY2FuKGVtYmVkWCwgZW1iZWRZLCBlcHNpbG9uLCBtaW5QdHMpO1xuICAgICAgICAgICAgZGF0YS5jbHVzdGVycyA9IGNsdXN0ZXJzO1xuICAgICAgICAgICAgcG9zdE1lc3NhZ2UoZGF0YSk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGRhdGEuZXJyb3IgPSBlO1xuICAgICAgICAgICAgcG9zdE1lc3NhZ2UoZGF0YSk7XG4gICAgICAgIH1cbiAgICB9KSkoKTtcbn07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jbHVzdGVyaW5nLXdvcmtlci5qcy5tYXAiLCJcclxuZXhwb3J0IHZhciBleHBvcnRDcHBEYnNjYW5MaWIgPSAoKCkgPT4ge1xyXG4gIHZhciBfc2NyaXB0RGlyID0gdHlwZW9mIGRvY3VtZW50ICE9PSAndW5kZWZpbmVkJyAmJiBkb2N1bWVudC5jdXJyZW50U2NyaXB0ID8gZG9jdW1lbnQuY3VycmVudFNjcmlwdC5zcmMgOiB1bmRlZmluZWQ7XHJcbiAgXHJcbiAgcmV0dXJuIChcclxuZnVuY3Rpb24oZXhwb3J0Q3BwRGJzY2FuTGliID0ge30pICB7XHJcblxyXG4vLyBpbmNsdWRlOiBzaGVsbC5qc1xyXG4vLyBUaGUgTW9kdWxlIG9iamVjdDogT3VyIGludGVyZmFjZSB0byB0aGUgb3V0c2lkZSB3b3JsZC4gV2UgaW1wb3J0XHJcbi8vIGFuZCBleHBvcnQgdmFsdWVzIG9uIGl0LiBUaGVyZSBhcmUgdmFyaW91cyB3YXlzIE1vZHVsZSBjYW4gYmUgdXNlZDpcclxuLy8gMS4gTm90IGRlZmluZWQuIFdlIGNyZWF0ZSBpdCBoZXJlXHJcbi8vIDIuIEEgZnVuY3Rpb24gcGFyYW1ldGVyLCBmdW5jdGlvbihNb2R1bGUpIHsgLi5nZW5lcmF0ZWQgY29kZS4uIH1cclxuLy8gMy4gcHJlLXJ1biBhcHBlbmRlZCBpdCwgdmFyIE1vZHVsZSA9IHt9OyAuLmdlbmVyYXRlZCBjb2RlLi5cclxuLy8gNC4gRXh0ZXJuYWwgc2NyaXB0IHRhZyBkZWZpbmVzIHZhciBNb2R1bGUuXHJcbi8vIFdlIG5lZWQgdG8gY2hlY2sgaWYgTW9kdWxlIGFscmVhZHkgZXhpc3RzIChlLmcuIGNhc2UgMyBhYm92ZSkuXHJcbi8vIFN1YnN0aXR1dGlvbiB3aWxsIGJlIHJlcGxhY2VkIHdpdGggYWN0dWFsIGNvZGUgb24gbGF0ZXIgc3RhZ2Ugb2YgdGhlIGJ1aWxkLFxyXG4vLyB0aGlzIHdheSBDbG9zdXJlIENvbXBpbGVyIHdpbGwgbm90IG1hbmdsZSBpdCAoZS5nLiBjYXNlIDQuIGFib3ZlKS5cclxuLy8gTm90ZSB0aGF0IGlmIHlvdSB3YW50IHRvIHJ1biBjbG9zdXJlLCBhbmQgYWxzbyB0byB1c2UgTW9kdWxlXHJcbi8vIGFmdGVyIHRoZSBnZW5lcmF0ZWQgY29kZSwgeW91IHdpbGwgbmVlZCB0byBkZWZpbmUgICB2YXIgTW9kdWxlID0ge307XHJcbi8vIGJlZm9yZSB0aGUgY29kZS4gVGhlbiB0aGF0IG9iamVjdCB3aWxsIGJlIHVzZWQgaW4gdGhlIGNvZGUsIGFuZCB5b3VcclxuLy8gY2FuIGNvbnRpbnVlIHRvIHVzZSBNb2R1bGUgYWZ0ZXJ3YXJkcyBhcyB3ZWxsLlxyXG52YXIgTW9kdWxlID0gdHlwZW9mIGV4cG9ydENwcERic2NhbkxpYiAhPSAndW5kZWZpbmVkJyA/IGV4cG9ydENwcERic2NhbkxpYiA6IHt9O1xyXG5cclxuLy8gU2V0IHVwIHRoZSBwcm9taXNlIHRoYXQgaW5kaWNhdGVzIHRoZSBNb2R1bGUgaXMgaW5pdGlhbGl6ZWRcclxudmFyIHJlYWR5UHJvbWlzZVJlc29sdmUsIHJlYWR5UHJvbWlzZVJlamVjdDtcclxuTW9kdWxlWydyZWFkeSddID0gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XHJcbiAgcmVhZHlQcm9taXNlUmVzb2x2ZSA9IHJlc29sdmU7XHJcbiAgcmVhZHlQcm9taXNlUmVqZWN0ID0gcmVqZWN0O1xyXG59KTtcclxuXHJcbi8vIC0tcHJlLWpzZXMgYXJlIGVtaXR0ZWQgYWZ0ZXIgdGhlIE1vZHVsZSBpbnRlZ3JhdGlvbiBjb2RlLCBzbyB0aGF0IHRoZXkgY2FuXHJcbi8vIHJlZmVyIHRvIE1vZHVsZSAoaWYgdGhleSBjaG9vc2U7IHRoZXkgY2FuIGFsc28gZGVmaW5lIE1vZHVsZSlcclxuXHJcblxyXG4vLyBTb21ldGltZXMgYW4gZXhpc3RpbmcgTW9kdWxlIG9iamVjdCBleGlzdHMgd2l0aCBwcm9wZXJ0aWVzXHJcbi8vIG1lYW50IHRvIG92ZXJ3cml0ZSB0aGUgZGVmYXVsdCBtb2R1bGUgZnVuY3Rpb25hbGl0eS4gSGVyZVxyXG4vLyB3ZSBjb2xsZWN0IHRob3NlIHByb3BlcnRpZXMgYW5kIHJlYXBwbHkgX2FmdGVyXyB3ZSBjb25maWd1cmVcclxuLy8gdGhlIGN1cnJlbnQgZW52aXJvbm1lbnQncyBkZWZhdWx0cyB0byBhdm9pZCBoYXZpbmcgdG8gYmUgc29cclxuLy8gZGVmZW5zaXZlIGR1cmluZyBpbml0aWFsaXphdGlvbi5cclxudmFyIG1vZHVsZU92ZXJyaWRlcyA9IE9iamVjdC5hc3NpZ24oe30sIE1vZHVsZSk7XHJcblxyXG52YXIgYXJndW1lbnRzXyA9IFtdO1xyXG52YXIgdGhpc1Byb2dyYW0gPSAnLi90aGlzLnByb2dyYW0nO1xyXG52YXIgcXVpdF8gPSAoc3RhdHVzLCB0b1Rocm93KSA9PiB7XHJcbiAgdGhyb3cgdG9UaHJvdztcclxufTtcclxuXHJcbi8vIERldGVybWluZSB0aGUgcnVudGltZSBlbnZpcm9ubWVudCB3ZSBhcmUgaW4uIFlvdSBjYW4gY3VzdG9taXplIHRoaXMgYnlcclxuLy8gc2V0dGluZyB0aGUgRU5WSVJPTk1FTlQgc2V0dGluZyBhdCBjb21waWxlIHRpbWUgKHNlZSBzZXR0aW5ncy5qcykuXHJcblxyXG4vLyBBdHRlbXB0IHRvIGF1dG8tZGV0ZWN0IHRoZSBlbnZpcm9ubWVudFxyXG52YXIgRU5WSVJPTk1FTlRfSVNfV0VCID0gdHlwZW9mIHdpbmRvdyA9PSAnb2JqZWN0JztcclxudmFyIEVOVklST05NRU5UX0lTX1dPUktFUiA9IHR5cGVvZiBpbXBvcnRTY3JpcHRzID09ICdmdW5jdGlvbic7XHJcbi8vIE4uYi4gRWxlY3Ryb24uanMgZW52aXJvbm1lbnQgaXMgc2ltdWx0YW5lb3VzbHkgYSBOT0RFLWVudmlyb25tZW50LCBidXRcclxuLy8gYWxzbyBhIHdlYiBlbnZpcm9ubWVudC5cclxudmFyIEVOVklST05NRU5UX0lTX05PREUgPSB0eXBlb2YgcHJvY2VzcyA9PSAnb2JqZWN0JyAmJiB0eXBlb2YgcHJvY2Vzcy52ZXJzaW9ucyA9PSAnb2JqZWN0JyAmJiB0eXBlb2YgcHJvY2Vzcy52ZXJzaW9ucy5ub2RlID09ICdzdHJpbmcnO1xyXG52YXIgRU5WSVJPTk1FTlRfSVNfU0hFTEwgPSAhRU5WSVJPTk1FTlRfSVNfV0VCICYmICFFTlZJUk9OTUVOVF9JU19OT0RFICYmICFFTlZJUk9OTUVOVF9JU19XT1JLRVI7XHJcblxyXG4vLyBgL2Agc2hvdWxkIGJlIHByZXNlbnQgYXQgdGhlIGVuZCBpZiBgc2NyaXB0RGlyZWN0b3J5YCBpcyBub3QgZW1wdHlcclxudmFyIHNjcmlwdERpcmVjdG9yeSA9ICcnO1xyXG5mdW5jdGlvbiBsb2NhdGVGaWxlKHBhdGgpIHtcclxuICBpZiAoTW9kdWxlWydsb2NhdGVGaWxlJ10pIHtcclxuICAgIHJldHVybiBNb2R1bGVbJ2xvY2F0ZUZpbGUnXShwYXRoLCBzY3JpcHREaXJlY3RvcnkpO1xyXG4gIH1cclxuICByZXR1cm4gc2NyaXB0RGlyZWN0b3J5ICsgcGF0aDtcclxufVxyXG5cclxuLy8gSG9va3MgdGhhdCBhcmUgaW1wbGVtZW50ZWQgZGlmZmVyZW50bHkgaW4gZGlmZmVyZW50IHJ1bnRpbWUgZW52aXJvbm1lbnRzLlxyXG52YXIgcmVhZF8sXHJcbiAgICByZWFkQXN5bmMsXHJcbiAgICByZWFkQmluYXJ5LFxyXG4gICAgc2V0V2luZG93VGl0bGU7XHJcblxyXG4vLyBOb3RlIHRoYXQgdGhpcyBpbmNsdWRlcyBOb2RlLmpzIHdvcmtlcnMgd2hlbiByZWxldmFudCAocHRocmVhZHMgaXMgZW5hYmxlZCkuXHJcbi8vIE5vZGUuanMgd29ya2VycyBhcmUgZGV0ZWN0ZWQgYXMgYSBjb21iaW5hdGlvbiBvZiBFTlZJUk9OTUVOVF9JU19XT1JLRVIgYW5kXHJcbi8vIEVOVklST05NRU5UX0lTX05PREUuXHJcbmlmIChFTlZJUk9OTUVOVF9JU19XRUIgfHwgRU5WSVJPTk1FTlRfSVNfV09SS0VSKSB7XHJcbiAgaWYgKEVOVklST05NRU5UX0lTX1dPUktFUikgeyAvLyBDaGVjayB3b3JrZXIsIG5vdCB3ZWIsIHNpbmNlIHdpbmRvdyBjb3VsZCBiZSBwb2x5ZmlsbGVkXHJcbiAgICBzY3JpcHREaXJlY3RvcnkgPSBzZWxmLmxvY2F0aW9uLmhyZWY7XHJcbiAgfSBlbHNlIGlmICh0eXBlb2YgZG9jdW1lbnQgIT0gJ3VuZGVmaW5lZCcgJiYgZG9jdW1lbnQuY3VycmVudFNjcmlwdCkgeyAvLyB3ZWJcclxuICAgIHNjcmlwdERpcmVjdG9yeSA9IGRvY3VtZW50LmN1cnJlbnRTY3JpcHQuc3JjO1xyXG4gIH1cclxuICAvLyBXaGVuIE1PRFVMQVJJWkUsIHRoaXMgSlMgbWF5IGJlIGV4ZWN1dGVkIGxhdGVyLCBhZnRlciBkb2N1bWVudC5jdXJyZW50U2NyaXB0XHJcbiAgLy8gaXMgZ29uZSwgc28gd2Ugc2F2ZWQgaXQsIGFuZCB3ZSB1c2UgaXQgaGVyZSBpbnN0ZWFkIG9mIGFueSBvdGhlciBpbmZvLlxyXG4gIGlmIChfc2NyaXB0RGlyKSB7XHJcbiAgICBzY3JpcHREaXJlY3RvcnkgPSBfc2NyaXB0RGlyO1xyXG4gIH1cclxuICAvLyBibG9iIHVybHMgbG9vayBsaWtlIGJsb2I6aHR0cDovL3NpdGUuY29tL2V0Yy9ldGMgYW5kIHdlIGNhbm5vdCBpbmZlciBhbnl0aGluZyBmcm9tIHRoZW0uXHJcbiAgLy8gb3RoZXJ3aXNlLCBzbGljZSBvZmYgdGhlIGZpbmFsIHBhcnQgb2YgdGhlIHVybCB0byBmaW5kIHRoZSBzY3JpcHQgZGlyZWN0b3J5LlxyXG4gIC8vIGlmIHNjcmlwdERpcmVjdG9yeSBkb2VzIG5vdCBjb250YWluIGEgc2xhc2gsIGxhc3RJbmRleE9mIHdpbGwgcmV0dXJuIC0xLFxyXG4gIC8vIGFuZCBzY3JpcHREaXJlY3Rvcnkgd2lsbCBjb3JyZWN0bHkgYmUgcmVwbGFjZWQgd2l0aCBhbiBlbXB0eSBzdHJpbmcuXHJcbiAgLy8gSWYgc2NyaXB0RGlyZWN0b3J5IGNvbnRhaW5zIGEgcXVlcnkgKHN0YXJ0aW5nIHdpdGggPykgb3IgYSBmcmFnbWVudCAoc3RhcnRpbmcgd2l0aCAjKSxcclxuICAvLyB0aGV5IGFyZSByZW1vdmVkIGJlY2F1c2UgdGhleSBjb3VsZCBjb250YWluIGEgc2xhc2guXHJcbiAgaWYgKHNjcmlwdERpcmVjdG9yeS5pbmRleE9mKCdibG9iOicpICE9PSAwKSB7XHJcbiAgICBzY3JpcHREaXJlY3RvcnkgPSBzY3JpcHREaXJlY3Rvcnkuc3Vic3RyKDAsIHNjcmlwdERpcmVjdG9yeS5yZXBsYWNlKC9bPyNdLiovLCBcIlwiKS5sYXN0SW5kZXhPZignLycpKzEpO1xyXG4gIH0gZWxzZSB7XHJcbiAgICBzY3JpcHREaXJlY3RvcnkgPSAnJztcclxuICB9XHJcblxyXG4gIC8vIERpZmZlcmVudGlhdGUgdGhlIFdlYiBXb3JrZXIgZnJvbSB0aGUgTm9kZSBXb3JrZXIgY2FzZSwgYXMgcmVhZGluZyBtdXN0XHJcbiAgLy8gYmUgZG9uZSBkaWZmZXJlbnRseS5cclxuICB7XHJcbi8vIGluY2x1ZGU6IHdlYl9vcl93b3JrZXJfc2hlbGxfcmVhZC5qc1xyXG5yZWFkXyA9ICh1cmwpID0+IHtcclxuICAgICAgdmFyIHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xyXG4gICAgICB4aHIub3BlbignR0VUJywgdXJsLCBmYWxzZSk7XHJcbiAgICAgIHhoci5zZW5kKG51bGwpO1xyXG4gICAgICByZXR1cm4geGhyLnJlc3BvbnNlVGV4dDtcclxuICB9XHJcblxyXG4gIGlmIChFTlZJUk9OTUVOVF9JU19XT1JLRVIpIHtcclxuICAgIHJlYWRCaW5hcnkgPSAodXJsKSA9PiB7XHJcbiAgICAgICAgdmFyIHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xyXG4gICAgICAgIHhoci5vcGVuKCdHRVQnLCB1cmwsIGZhbHNlKTtcclxuICAgICAgICB4aHIucmVzcG9uc2VUeXBlID0gJ2FycmF5YnVmZmVyJztcclxuICAgICAgICB4aHIuc2VuZChudWxsKTtcclxuICAgICAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoLyoqIEB0eXBleyFBcnJheUJ1ZmZlcn0gKi8oeGhyLnJlc3BvbnNlKSk7XHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgcmVhZEFzeW5jID0gKHVybCwgb25sb2FkLCBvbmVycm9yKSA9PiB7XHJcbiAgICB2YXIgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XHJcbiAgICB4aHIub3BlbignR0VUJywgdXJsLCB0cnVlKTtcclxuICAgIHhoci5yZXNwb25zZVR5cGUgPSAnYXJyYXlidWZmZXInO1xyXG4gICAgeGhyLm9ubG9hZCA9ICgpID0+IHtcclxuICAgICAgaWYgKHhoci5zdGF0dXMgPT0gMjAwIHx8ICh4aHIuc3RhdHVzID09IDAgJiYgeGhyLnJlc3BvbnNlKSkgeyAvLyBmaWxlIFVSTHMgY2FuIHJldHVybiAwXHJcbiAgICAgICAgb25sb2FkKHhoci5yZXNwb25zZSk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIG9uZXJyb3IoKTtcclxuICAgIH07XHJcbiAgICB4aHIub25lcnJvciA9IG9uZXJyb3I7XHJcbiAgICB4aHIuc2VuZChudWxsKTtcclxuICB9XHJcblxyXG4vLyBlbmQgaW5jbHVkZTogd2ViX29yX3dvcmtlcl9zaGVsbF9yZWFkLmpzXHJcbiAgfVxyXG5cclxuICBzZXRXaW5kb3dUaXRsZSA9ICh0aXRsZSkgPT4gZG9jdW1lbnQudGl0bGUgPSB0aXRsZTtcclxufSBlbHNlXHJcbntcclxufVxyXG5cclxudmFyIG91dCA9IE1vZHVsZVsncHJpbnQnXSB8fCBjb25zb2xlLmxvZy5iaW5kKGNvbnNvbGUpO1xyXG52YXIgZXJyID0gTW9kdWxlWydwcmludEVyciddIHx8IGNvbnNvbGUud2Fybi5iaW5kKGNvbnNvbGUpO1xyXG5cclxuLy8gTWVyZ2UgYmFjayBpbiB0aGUgb3ZlcnJpZGVzXHJcbk9iamVjdC5hc3NpZ24oTW9kdWxlLCBtb2R1bGVPdmVycmlkZXMpO1xyXG4vLyBGcmVlIHRoZSBvYmplY3QgaGllcmFyY2h5IGNvbnRhaW5lZCBpbiB0aGUgb3ZlcnJpZGVzLCB0aGlzIGxldHMgdGhlIEdDXHJcbi8vIHJlY2xhaW0gZGF0YSB1c2VkIGUuZy4gaW4gbWVtb3J5SW5pdGlhbGl6ZXJSZXF1ZXN0LCB3aGljaCBpcyBhIGxhcmdlIHR5cGVkIGFycmF5LlxyXG5tb2R1bGVPdmVycmlkZXMgPSBudWxsO1xyXG5cclxuLy8gRW1pdCBjb2RlIHRvIGhhbmRsZSBleHBlY3RlZCB2YWx1ZXMgb24gdGhlIE1vZHVsZSBvYmplY3QuIFRoaXMgYXBwbGllcyBNb2R1bGUueFxyXG4vLyB0byB0aGUgcHJvcGVyIGxvY2FsIHguIFRoaXMgaGFzIHR3byBiZW5lZml0czogZmlyc3QsIHdlIG9ubHkgZW1pdCBpdCBpZiBpdCBpc1xyXG4vLyBleHBlY3RlZCB0byBhcnJpdmUsIGFuZCBzZWNvbmQsIGJ5IHVzaW5nIGEgbG9jYWwgZXZlcnl3aGVyZSBlbHNlIHRoYXQgY2FuIGJlXHJcbi8vIG1pbmlmaWVkLlxyXG5cclxuaWYgKE1vZHVsZVsnYXJndW1lbnRzJ10pIGFyZ3VtZW50c18gPSBNb2R1bGVbJ2FyZ3VtZW50cyddO1xyXG5cclxuaWYgKE1vZHVsZVsndGhpc1Byb2dyYW0nXSkgdGhpc1Byb2dyYW0gPSBNb2R1bGVbJ3RoaXNQcm9ncmFtJ107XHJcblxyXG5pZiAoTW9kdWxlWydxdWl0J10pIHF1aXRfID0gTW9kdWxlWydxdWl0J107XHJcblxyXG4vLyBwZXJmb3JtIGFzc2VydGlvbnMgaW4gc2hlbGwuanMgYWZ0ZXIgd2Ugc2V0IHVwIG91dCgpIGFuZCBlcnIoKSwgYXMgb3RoZXJ3aXNlIGlmIGFuIGFzc2VydGlvbiBmYWlscyBpdCBjYW5ub3QgcHJpbnQgdGhlIG1lc3NhZ2VcclxuXHJcblxyXG4vLyBlbmQgaW5jbHVkZTogc2hlbGwuanNcclxuLy8gaW5jbHVkZTogcHJlYW1ibGUuanNcclxuLy8gPT09IFByZWFtYmxlIGxpYnJhcnkgc3R1ZmYgPT09XHJcblxyXG4vLyBEb2N1bWVudGF0aW9uIGZvciB0aGUgcHVibGljIEFQSXMgZGVmaW5lZCBpbiB0aGlzIGZpbGUgbXVzdCBiZSB1cGRhdGVkIGluOlxyXG4vLyAgICBzaXRlL3NvdXJjZS9kb2NzL2FwaV9yZWZlcmVuY2UvcHJlYW1ibGUuanMucnN0XHJcbi8vIEEgcHJlYnVpbHQgbG9jYWwgdmVyc2lvbiBvZiB0aGUgZG9jdW1lbnRhdGlvbiBpcyBhdmFpbGFibGUgYXQ6XHJcbi8vICAgIHNpdGUvYnVpbGQvdGV4dC9kb2NzL2FwaV9yZWZlcmVuY2UvcHJlYW1ibGUuanMudHh0XHJcbi8vIFlvdSBjYW4gYWxzbyBidWlsZCBkb2NzIGxvY2FsbHkgYXMgSFRNTCBvciBvdGhlciBmb3JtYXRzIGluIHNpdGUvXHJcbi8vIEFuIG9ubGluZSBIVE1MIHZlcnNpb24gKHdoaWNoIG1heSBiZSBvZiBhIGRpZmZlcmVudCB2ZXJzaW9uIG9mIEVtc2NyaXB0ZW4pXHJcbi8vICAgIGlzIHVwIGF0IGh0dHA6Ly9rcmlwa2VuLmdpdGh1Yi5pby9lbXNjcmlwdGVuLXNpdGUvZG9jcy9hcGlfcmVmZXJlbmNlL3ByZWFtYmxlLmpzLmh0bWxcclxuXHJcbnZhciB3YXNtQmluYXJ5O1xyXG5pZiAoTW9kdWxlWyd3YXNtQmluYXJ5J10pIHdhc21CaW5hcnkgPSBNb2R1bGVbJ3dhc21CaW5hcnknXTtcclxudmFyIG5vRXhpdFJ1bnRpbWUgPSBNb2R1bGVbJ25vRXhpdFJ1bnRpbWUnXSB8fCB0cnVlO1xyXG5cclxuaWYgKHR5cGVvZiBXZWJBc3NlbWJseSAhPSAnb2JqZWN0Jykge1xyXG4gIGFib3J0KCdubyBuYXRpdmUgd2FzbSBzdXBwb3J0IGRldGVjdGVkJyk7XHJcbn1cclxuXHJcbi8vIFdhc20gZ2xvYmFsc1xyXG5cclxudmFyIHdhc21NZW1vcnk7XHJcblxyXG4vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cclxuLy8gUnVudGltZSBlc3NlbnRpYWxzXHJcbi8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxyXG5cclxuLy8gd2hldGhlciB3ZSBhcmUgcXVpdHRpbmcgdGhlIGFwcGxpY2F0aW9uLiBubyBjb2RlIHNob3VsZCBydW4gYWZ0ZXIgdGhpcy5cclxuLy8gc2V0IGluIGV4aXQoKSBhbmQgYWJvcnQoKVxyXG52YXIgQUJPUlQgPSBmYWxzZTtcclxuXHJcbi8vIHNldCBieSBleGl0KCkgYW5kIGFib3J0KCkuICBQYXNzZWQgdG8gJ29uRXhpdCcgaGFuZGxlci5cclxuLy8gTk9URTogVGhpcyBpcyBhbHNvIHVzZWQgYXMgdGhlIHByb2Nlc3MgcmV0dXJuIGNvZGUgY29kZSBpbiBzaGVsbCBlbnZpcm9ubWVudHNcclxuLy8gYnV0IG9ubHkgd2hlbiBub0V4aXRSdW50aW1lIGlzIGZhbHNlLlxyXG52YXIgRVhJVFNUQVRVUztcclxuXHJcbi8qKiBAdHlwZSB7ZnVuY3Rpb24oKiwgc3RyaW5nPSl9ICovXHJcbmZ1bmN0aW9uIGFzc2VydChjb25kaXRpb24sIHRleHQpIHtcclxuICBpZiAoIWNvbmRpdGlvbikge1xyXG4gICAgLy8gVGhpcyBidWlsZCB3YXMgY3JlYXRlZCB3aXRob3V0IEFTU0VSVElPTlMgZGVmaW5lZC4gIGBhc3NlcnQoKWAgc2hvdWxkIG5vdFxyXG4gICAgLy8gZXZlciBiZSBjYWxsZWQgaW4gdGhpcyBjb25maWd1cmF0aW9uIGJ1dCBpbiBjYXNlIHRoZXJlIGFyZSBjYWxsZXJzIGluXHJcbiAgICAvLyB0aGUgd2lsZCBsZWF2ZSB0aGlzIHNpbXBsZSBhYm9ydCgpIGltcGxlbWVuYXRpb24gaGVyZSBmb3Igbm93LlxyXG4gICAgYWJvcnQodGV4dCk7XHJcbiAgfVxyXG59XHJcblxyXG4vLyBNZW1vcnkgbWFuYWdlbWVudFxyXG5cclxudmFyIEhFQVAsXHJcbi8qKiBAdHlwZSB7IUludDhBcnJheX0gKi9cclxuICBIRUFQOCxcclxuLyoqIEB0eXBlIHshVWludDhBcnJheX0gKi9cclxuICBIRUFQVTgsXHJcbi8qKiBAdHlwZSB7IUludDE2QXJyYXl9ICovXHJcbiAgSEVBUDE2LFxyXG4vKiogQHR5cGUgeyFVaW50MTZBcnJheX0gKi9cclxuICBIRUFQVTE2LFxyXG4vKiogQHR5cGUgeyFJbnQzMkFycmF5fSAqL1xyXG4gIEhFQVAzMixcclxuLyoqIEB0eXBlIHshVWludDMyQXJyYXl9ICovXHJcbiAgSEVBUFUzMixcclxuLyoqIEB0eXBlIHshRmxvYXQzMkFycmF5fSAqL1xyXG4gIEhFQVBGMzIsXHJcbi8qKiBAdHlwZSB7IUZsb2F0NjRBcnJheX0gKi9cclxuICBIRUFQRjY0O1xyXG5cclxuZnVuY3Rpb24gdXBkYXRlTWVtb3J5Vmlld3MoKSB7XHJcbiAgdmFyIGIgPSB3YXNtTWVtb3J5LmJ1ZmZlcjtcclxuICBNb2R1bGVbJ0hFQVA4J10gPSBIRUFQOCA9IG5ldyBJbnQ4QXJyYXkoYik7XHJcbiAgTW9kdWxlWydIRUFQMTYnXSA9IEhFQVAxNiA9IG5ldyBJbnQxNkFycmF5KGIpO1xyXG4gIE1vZHVsZVsnSEVBUDMyJ10gPSBIRUFQMzIgPSBuZXcgSW50MzJBcnJheShiKTtcclxuICBNb2R1bGVbJ0hFQVBVOCddID0gSEVBUFU4ID0gbmV3IFVpbnQ4QXJyYXkoYik7XHJcbiAgTW9kdWxlWydIRUFQVTE2J10gPSBIRUFQVTE2ID0gbmV3IFVpbnQxNkFycmF5KGIpO1xyXG4gIE1vZHVsZVsnSEVBUFUzMiddID0gSEVBUFUzMiA9IG5ldyBVaW50MzJBcnJheShiKTtcclxuICBNb2R1bGVbJ0hFQVBGMzInXSA9IEhFQVBGMzIgPSBuZXcgRmxvYXQzMkFycmF5KGIpO1xyXG4gIE1vZHVsZVsnSEVBUEY2NCddID0gSEVBUEY2NCA9IG5ldyBGbG9hdDY0QXJyYXkoYik7XHJcbn1cclxuXHJcbi8vIGluY2x1ZGU6IHJ1bnRpbWVfaW5pdF90YWJsZS5qc1xyXG4vLyBJbiByZWd1bGFyIG5vbi1SRUxPQ0FUQUJMRSBtb2RlIHRoZSB0YWJsZSBpcyBleHBvcnRlZFxyXG4vLyBmcm9tIHRoZSB3YXNtIG1vZHVsZSBhbmQgdGhpcyB3aWxsIGJlIGFzc2lnbmVkIG9uY2VcclxuLy8gdGhlIGV4cG9ydHMgYXJlIGF2YWlsYWJsZS5cclxudmFyIHdhc21UYWJsZTtcclxuXHJcbi8vIGVuZCBpbmNsdWRlOiBydW50aW1lX2luaXRfdGFibGUuanNcclxuLy8gaW5jbHVkZTogcnVudGltZV9zdGFja19jaGVjay5qc1xyXG4vLyBlbmQgaW5jbHVkZTogcnVudGltZV9zdGFja19jaGVjay5qc1xyXG4vLyBpbmNsdWRlOiBydW50aW1lX2Fzc2VydGlvbnMuanNcclxuLy8gZW5kIGluY2x1ZGU6IHJ1bnRpbWVfYXNzZXJ0aW9ucy5qc1xyXG52YXIgX19BVFBSRVJVTl9fICA9IFtdOyAvLyBmdW5jdGlvbnMgY2FsbGVkIGJlZm9yZSB0aGUgcnVudGltZSBpcyBpbml0aWFsaXplZFxyXG52YXIgX19BVElOSVRfXyAgICA9IFtdOyAvLyBmdW5jdGlvbnMgY2FsbGVkIGR1cmluZyBzdGFydHVwXHJcbnZhciBfX0FURVhJVF9fICAgID0gW107IC8vIGZ1bmN0aW9ucyBjYWxsZWQgZHVyaW5nIHNodXRkb3duXHJcbnZhciBfX0FUUE9TVFJVTl9fID0gW107IC8vIGZ1bmN0aW9ucyBjYWxsZWQgYWZ0ZXIgdGhlIG1haW4oKSBpcyBjYWxsZWRcclxuXHJcbnZhciBydW50aW1lSW5pdGlhbGl6ZWQgPSBmYWxzZTtcclxuXHJcbnZhciBydW50aW1lS2VlcGFsaXZlQ291bnRlciA9IDA7XHJcblxyXG5mdW5jdGlvbiBrZWVwUnVudGltZUFsaXZlKCkge1xyXG4gIHJldHVybiBub0V4aXRSdW50aW1lIHx8IHJ1bnRpbWVLZWVwYWxpdmVDb3VudGVyID4gMDtcclxufVxyXG5cclxuZnVuY3Rpb24gcHJlUnVuKCkge1xyXG4gIGlmIChNb2R1bGVbJ3ByZVJ1biddKSB7XHJcbiAgICBpZiAodHlwZW9mIE1vZHVsZVsncHJlUnVuJ10gPT0gJ2Z1bmN0aW9uJykgTW9kdWxlWydwcmVSdW4nXSA9IFtNb2R1bGVbJ3ByZVJ1biddXTtcclxuICAgIHdoaWxlIChNb2R1bGVbJ3ByZVJ1biddLmxlbmd0aCkge1xyXG4gICAgICBhZGRPblByZVJ1bihNb2R1bGVbJ3ByZVJ1biddLnNoaWZ0KCkpO1xyXG4gICAgfVxyXG4gIH1cclxuICBjYWxsUnVudGltZUNhbGxiYWNrcyhfX0FUUFJFUlVOX18pO1xyXG59XHJcblxyXG5mdW5jdGlvbiBpbml0UnVudGltZSgpIHtcclxuICBydW50aW1lSW5pdGlhbGl6ZWQgPSB0cnVlO1xyXG5cclxuICBcclxuICBjYWxsUnVudGltZUNhbGxiYWNrcyhfX0FUSU5JVF9fKTtcclxufVxyXG5cclxuZnVuY3Rpb24gcG9zdFJ1bigpIHtcclxuXHJcbiAgaWYgKE1vZHVsZVsncG9zdFJ1biddKSB7XHJcbiAgICBpZiAodHlwZW9mIE1vZHVsZVsncG9zdFJ1biddID09ICdmdW5jdGlvbicpIE1vZHVsZVsncG9zdFJ1biddID0gW01vZHVsZVsncG9zdFJ1biddXTtcclxuICAgIHdoaWxlIChNb2R1bGVbJ3Bvc3RSdW4nXS5sZW5ndGgpIHtcclxuICAgICAgYWRkT25Qb3N0UnVuKE1vZHVsZVsncG9zdFJ1biddLnNoaWZ0KCkpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY2FsbFJ1bnRpbWVDYWxsYmFja3MoX19BVFBPU1RSVU5fXyk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGFkZE9uUHJlUnVuKGNiKSB7XHJcbiAgX19BVFBSRVJVTl9fLnVuc2hpZnQoY2IpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBhZGRPbkluaXQoY2IpIHtcclxuICBfX0FUSU5JVF9fLnVuc2hpZnQoY2IpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBhZGRPbkV4aXQoY2IpIHtcclxufVxyXG5cclxuZnVuY3Rpb24gYWRkT25Qb3N0UnVuKGNiKSB7XHJcbiAgX19BVFBPU1RSVU5fXy51bnNoaWZ0KGNiKTtcclxufVxyXG5cclxuLy8gaW5jbHVkZTogcnVudGltZV9tYXRoLmpzXHJcbi8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL01hdGgvaW11bFxyXG5cclxuLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvTWF0aC9mcm91bmRcclxuXHJcbi8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL01hdGgvY2x6MzJcclxuXHJcbi8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL01hdGgvdHJ1bmNcclxuXHJcbi8vIGVuZCBpbmNsdWRlOiBydW50aW1lX21hdGguanNcclxuLy8gQSBjb3VudGVyIG9mIGRlcGVuZGVuY2llcyBmb3IgY2FsbGluZyBydW4oKS4gSWYgd2UgbmVlZCB0b1xyXG4vLyBkbyBhc3luY2hyb25vdXMgd29yayBiZWZvcmUgcnVubmluZywgaW5jcmVtZW50IHRoaXMgYW5kXHJcbi8vIGRlY3JlbWVudCBpdC4gSW5jcmVtZW50aW5nIG11c3QgaGFwcGVuIGluIGEgcGxhY2UgbGlrZVxyXG4vLyBNb2R1bGUucHJlUnVuICh1c2VkIGJ5IGVtY2MgdG8gYWRkIGZpbGUgcHJlbG9hZGluZykuXHJcbi8vIE5vdGUgdGhhdCB5b3UgY2FuIGFkZCBkZXBlbmRlbmNpZXMgaW4gcHJlUnVuLCBldmVuIHRob3VnaFxyXG4vLyBpdCBoYXBwZW5zIHJpZ2h0IGJlZm9yZSBydW4gLSBydW4gd2lsbCBiZSBwb3N0cG9uZWQgdW50aWxcclxuLy8gdGhlIGRlcGVuZGVuY2llcyBhcmUgbWV0LlxyXG52YXIgcnVuRGVwZW5kZW5jaWVzID0gMDtcclxudmFyIHJ1bkRlcGVuZGVuY3lXYXRjaGVyID0gbnVsbDtcclxudmFyIGRlcGVuZGVuY2llc0Z1bGZpbGxlZCA9IG51bGw7IC8vIG92ZXJyaWRkZW4gdG8gdGFrZSBkaWZmZXJlbnQgYWN0aW9ucyB3aGVuIGFsbCBydW4gZGVwZW5kZW5jaWVzIGFyZSBmdWxmaWxsZWRcclxuXHJcbmZ1bmN0aW9uIGdldFVuaXF1ZVJ1bkRlcGVuZGVuY3koaWQpIHtcclxuICByZXR1cm4gaWQ7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGFkZFJ1bkRlcGVuZGVuY3koaWQpIHtcclxuICBydW5EZXBlbmRlbmNpZXMrKztcclxuXHJcbiAgaWYgKE1vZHVsZVsnbW9uaXRvclJ1bkRlcGVuZGVuY2llcyddKSB7XHJcbiAgICBNb2R1bGVbJ21vbml0b3JSdW5EZXBlbmRlbmNpZXMnXShydW5EZXBlbmRlbmNpZXMpO1xyXG4gIH1cclxuXHJcbn1cclxuXHJcbmZ1bmN0aW9uIHJlbW92ZVJ1bkRlcGVuZGVuY3koaWQpIHtcclxuICBydW5EZXBlbmRlbmNpZXMtLTtcclxuXHJcbiAgaWYgKE1vZHVsZVsnbW9uaXRvclJ1bkRlcGVuZGVuY2llcyddKSB7XHJcbiAgICBNb2R1bGVbJ21vbml0b3JSdW5EZXBlbmRlbmNpZXMnXShydW5EZXBlbmRlbmNpZXMpO1xyXG4gIH1cclxuXHJcbiAgaWYgKHJ1bkRlcGVuZGVuY2llcyA9PSAwKSB7XHJcbiAgICBpZiAocnVuRGVwZW5kZW5jeVdhdGNoZXIgIT09IG51bGwpIHtcclxuICAgICAgY2xlYXJJbnRlcnZhbChydW5EZXBlbmRlbmN5V2F0Y2hlcik7XHJcbiAgICAgIHJ1bkRlcGVuZGVuY3lXYXRjaGVyID0gbnVsbDtcclxuICAgIH1cclxuICAgIGlmIChkZXBlbmRlbmNpZXNGdWxmaWxsZWQpIHtcclxuICAgICAgdmFyIGNhbGxiYWNrID0gZGVwZW5kZW5jaWVzRnVsZmlsbGVkO1xyXG4gICAgICBkZXBlbmRlbmNpZXNGdWxmaWxsZWQgPSBudWxsO1xyXG4gICAgICBjYWxsYmFjaygpOyAvLyBjYW4gYWRkIGFub3RoZXIgZGVwZW5kZW5jaWVzRnVsZmlsbGVkXHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG4vKiogQHBhcmFtIHtzdHJpbmd8bnVtYmVyPX0gd2hhdCAqL1xyXG5mdW5jdGlvbiBhYm9ydCh3aGF0KSB7XHJcbiAgaWYgKE1vZHVsZVsnb25BYm9ydCddKSB7XHJcbiAgICBNb2R1bGVbJ29uQWJvcnQnXSh3aGF0KTtcclxuICB9XHJcblxyXG4gIHdoYXQgPSAnQWJvcnRlZCgnICsgd2hhdCArICcpJztcclxuICAvLyBUT0RPKHNiYyk6IFNob3VsZCB3ZSByZW1vdmUgcHJpbnRpbmcgYW5kIGxlYXZlIGl0IHVwIHRvIHdob2V2ZXJcclxuICAvLyBjYXRjaGVzIHRoZSBleGNlcHRpb24/XHJcbiAgZXJyKHdoYXQpO1xyXG5cclxuICBBQk9SVCA9IHRydWU7XHJcbiAgRVhJVFNUQVRVUyA9IDE7XHJcblxyXG4gIHdoYXQgKz0gJy4gQnVpbGQgd2l0aCAtc0FTU0VSVElPTlMgZm9yIG1vcmUgaW5mby4nO1xyXG5cclxuICAvLyBVc2UgYSB3YXNtIHJ1bnRpbWUgZXJyb3IsIGJlY2F1c2UgYSBKUyBlcnJvciBtaWdodCBiZSBzZWVuIGFzIGEgZm9yZWlnblxyXG4gIC8vIGV4Y2VwdGlvbiwgd2hpY2ggbWVhbnMgd2UnZCBydW4gZGVzdHJ1Y3RvcnMgb24gaXQuIFdlIG5lZWQgdGhlIGVycm9yIHRvXHJcbiAgLy8gc2ltcGx5IG1ha2UgdGhlIHByb2dyYW0gc3RvcC5cclxuICAvLyBGSVhNRSBUaGlzIGFwcHJvYWNoIGRvZXMgbm90IHdvcmsgaW4gV2FzbSBFSCBiZWNhdXNlIGl0IGN1cnJlbnRseSBkb2VzIG5vdCBhc3N1bWVcclxuICAvLyBhbGwgUnVudGltZUVycm9ycyBhcmUgZnJvbSB0cmFwczsgaXQgZGVjaWRlcyB3aGV0aGVyIGEgUnVudGltZUVycm9yIGlzIGZyb21cclxuICAvLyBhIHRyYXAgb3Igbm90IGJhc2VkIG9uIGEgaGlkZGVuIGZpZWxkIHdpdGhpbiB0aGUgb2JqZWN0LiBTbyBhdCB0aGUgbW9tZW50XHJcbiAgLy8gd2UgZG9uJ3QgaGF2ZSBhIHdheSBvZiB0aHJvd2luZyBhIHdhc20gdHJhcCBmcm9tIEpTLiBUT0RPIE1ha2UgYSBKUyBBUEkgdGhhdFxyXG4gIC8vIGFsbG93cyB0aGlzIGluIHRoZSB3YXNtIHNwZWMuXHJcblxyXG4gIC8vIFN1cHByZXNzIGNsb3N1cmUgY29tcGlsZXIgd2FybmluZyBoZXJlLiBDbG9zdXJlIGNvbXBpbGVyJ3MgYnVpbHRpbiBleHRlcm5cclxuICAvLyBkZWZpbnRpb24gZm9yIFdlYkFzc2VtYmx5LlJ1bnRpbWVFcnJvciBjbGFpbXMgaXQgdGFrZXMgbm8gYXJndW1lbnRzIGV2ZW5cclxuICAvLyB0aG91Z2ggaXQgY2FuLlxyXG4gIC8vIFRPRE8oaHR0cHM6Ly9naXRodWIuY29tL2dvb2dsZS9jbG9zdXJlLWNvbXBpbGVyL3B1bGwvMzkxMyk6IFJlbW92ZSBpZi93aGVuIHVwc3RyZWFtIGNsb3N1cmUgZ2V0cyBmaXhlZC5cclxuICAvKiogQHN1cHByZXNzIHtjaGVja1R5cGVzfSAqL1xyXG4gIHZhciBlID0gbmV3IFdlYkFzc2VtYmx5LlJ1bnRpbWVFcnJvcih3aGF0KTtcclxuXHJcbiAgcmVhZHlQcm9taXNlUmVqZWN0KGUpO1xyXG4gIC8vIFRocm93IHRoZSBlcnJvciB3aGV0aGVyIG9yIG5vdCBNT0RVTEFSSVpFIGlzIHNldCBiZWNhdXNlIGFib3J0IGlzIHVzZWRcclxuICAvLyBpbiBjb2RlIHBhdGhzIGFwYXJ0IGZyb20gaW5zdGFudGlhdGlvbiB3aGVyZSBhbiBleGNlcHRpb24gaXMgZXhwZWN0ZWRcclxuICAvLyB0byBiZSB0aHJvd24gd2hlbiBhYm9ydCBpcyBjYWxsZWQuXHJcbiAgdGhyb3cgZTtcclxufVxyXG5cclxuLy8gaW5jbHVkZTogbWVtb3J5cHJvZmlsZXIuanNcclxuLy8gZW5kIGluY2x1ZGU6IG1lbW9yeXByb2ZpbGVyLmpzXHJcbi8vIGluY2x1ZGU6IFVSSVV0aWxzLmpzXHJcbi8vIFByZWZpeCBvZiBkYXRhIFVSSXMgZW1pdHRlZCBieSBTSU5HTEVfRklMRSBhbmQgcmVsYXRlZCBvcHRpb25zLlxyXG52YXIgZGF0YVVSSVByZWZpeCA9ICdkYXRhOmFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbTtiYXNlNjQsJztcclxuXHJcbi8vIEluZGljYXRlcyB3aGV0aGVyIGZpbGVuYW1lIGlzIGEgYmFzZTY0IGRhdGEgVVJJLlxyXG5mdW5jdGlvbiBpc0RhdGFVUkkoZmlsZW5hbWUpIHtcclxuICAvLyBQcmVmaXggb2YgZGF0YSBVUklzIGVtaXR0ZWQgYnkgU0lOR0xFX0ZJTEUgYW5kIHJlbGF0ZWQgb3B0aW9ucy5cclxuICByZXR1cm4gZmlsZW5hbWUuc3RhcnRzV2l0aChkYXRhVVJJUHJlZml4KTtcclxufVxyXG5cclxuLy8gSW5kaWNhdGVzIHdoZXRoZXIgZmlsZW5hbWUgaXMgZGVsaXZlcmVkIHZpYSBmaWxlIHByb3RvY29sIChhcyBvcHBvc2VkIHRvIGh0dHAvaHR0cHMpXHJcbmZ1bmN0aW9uIGlzRmlsZVVSSShmaWxlbmFtZSkge1xyXG4gIHJldHVybiBmaWxlbmFtZS5zdGFydHNXaXRoKCdmaWxlOi8vJyk7XHJcbn1cclxuXHJcbi8vIGVuZCBpbmNsdWRlOiBVUklVdGlscy5qc1xyXG4vLyBpbmNsdWRlOiBydW50aW1lX2V4Y2VwdGlvbnMuanNcclxuLy8gZW5kIGluY2x1ZGU6IHJ1bnRpbWVfZXhjZXB0aW9ucy5qc1xyXG52YXIgd2FzbUJpbmFyeUZpbGU7XHJcbiAgd2FzbUJpbmFyeUZpbGUgPSAnd2FzbURic2Nhbi53YXNtJztcclxuICBpZiAoIWlzRGF0YVVSSSh3YXNtQmluYXJ5RmlsZSkpIHtcclxuICAgIHdhc21CaW5hcnlGaWxlID0gbG9jYXRlRmlsZSh3YXNtQmluYXJ5RmlsZSk7XHJcbiAgfVxyXG5cclxuZnVuY3Rpb24gZ2V0QmluYXJ5KGZpbGUpIHtcclxuICB0cnkge1xyXG4gICAgaWYgKGZpbGUgPT0gd2FzbUJpbmFyeUZpbGUgJiYgd2FzbUJpbmFyeSkge1xyXG4gICAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkod2FzbUJpbmFyeSk7XHJcbiAgICB9XHJcbiAgICBpZiAocmVhZEJpbmFyeSkge1xyXG4gICAgICByZXR1cm4gcmVhZEJpbmFyeShmaWxlKTtcclxuICAgIH1cclxuICAgIHRocm93IFwiYm90aCBhc3luYyBhbmQgc3luYyBmZXRjaGluZyBvZiB0aGUgd2FzbSBmYWlsZWRcIjtcclxuICB9XHJcbiAgY2F0Y2ggKGVycikge1xyXG4gICAgYWJvcnQoZXJyKTtcclxuICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGdldEJpbmFyeVByb21pc2UoYmluYXJ5RmlsZSkge1xyXG4gIC8vIElmIHdlIGRvbid0IGhhdmUgdGhlIGJpbmFyeSB5ZXQsIHRyeSB0byBsb2FkIGl0IGFzeW5jaHJvbm91c2x5LlxyXG4gIC8vIEZldGNoIGhhcyBzb21lIGFkZGl0aW9uYWwgcmVzdHJpY3Rpb25zIG92ZXIgWEhSLCBsaWtlIGl0IGNhbid0IGJlIHVzZWQgb24gYSBmaWxlOi8vIHVybC5cclxuICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2dpdGh1Yi9mZXRjaC9wdWxsLzkyI2lzc3VlY29tbWVudC0xNDA2NjU5MzJcclxuICAvLyBDb3Jkb3ZhIG9yIEVsZWN0cm9uIGFwcHMgYXJlIHR5cGljYWxseSBsb2FkZWQgZnJvbSBhIGZpbGU6Ly8gdXJsLlxyXG4gIC8vIFNvIHVzZSBmZXRjaCBpZiBpdCBpcyBhdmFpbGFibGUgYW5kIHRoZSB1cmwgaXMgbm90IGEgZmlsZSwgb3RoZXJ3aXNlIGZhbGwgYmFjayB0byBYSFIuXHJcbiAgaWYgKCF3YXNtQmluYXJ5ICYmIChFTlZJUk9OTUVOVF9JU19XRUIgfHwgRU5WSVJPTk1FTlRfSVNfV09SS0VSKSkge1xyXG4gICAgaWYgKHR5cGVvZiBmZXRjaCA9PSAnZnVuY3Rpb24nXHJcbiAgICApIHtcclxuICAgICAgcmV0dXJuIGZldGNoKGJpbmFyeUZpbGUsIHsgY3JlZGVudGlhbHM6ICdzYW1lLW9yaWdpbicgfSkudGhlbihmdW5jdGlvbihyZXNwb25zZSkge1xyXG4gICAgICAgIGlmICghcmVzcG9uc2VbJ29rJ10pIHtcclxuICAgICAgICAgIHRocm93IFwiZmFpbGVkIHRvIGxvYWQgd2FzbSBiaW5hcnkgZmlsZSBhdCAnXCIgKyBiaW5hcnlGaWxlICsgXCInXCI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXNwb25zZVsnYXJyYXlCdWZmZXInXSgpO1xyXG4gICAgICB9KS5jYXRjaChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICByZXR1cm4gZ2V0QmluYXJ5KGJpbmFyeUZpbGUpO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIE90aGVyd2lzZSwgZ2V0QmluYXJ5IHNob3VsZCBiZSBhYmxlIHRvIGdldCBpdCBzeW5jaHJvbm91c2x5XHJcbiAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oZnVuY3Rpb24oKSB7IHJldHVybiBnZXRCaW5hcnkoYmluYXJ5RmlsZSk7IH0pO1xyXG59XHJcblxyXG5mdW5jdGlvbiBpbnN0YW50aWF0ZUFycmF5QnVmZmVyKGJpbmFyeUZpbGUsIGltcG9ydHMsIHJlY2VpdmVyKSB7XHJcbiAgcmV0dXJuIGdldEJpbmFyeVByb21pc2UoYmluYXJ5RmlsZSkudGhlbihmdW5jdGlvbihiaW5hcnkpIHtcclxuICAgIHJldHVybiBXZWJBc3NlbWJseS5pbnN0YW50aWF0ZShiaW5hcnksIGltcG9ydHMpO1xyXG4gIH0pLnRoZW4oZnVuY3Rpb24gKGluc3RhbmNlKSB7XHJcbiAgICByZXR1cm4gaW5zdGFuY2U7XHJcbiAgfSkudGhlbihyZWNlaXZlciwgZnVuY3Rpb24ocmVhc29uKSB7XHJcbiAgICBlcnIoJ2ZhaWxlZCB0byBhc3luY2hyb25vdXNseSBwcmVwYXJlIHdhc206ICcgKyByZWFzb24pO1xyXG5cclxuICAgIGFib3J0KHJlYXNvbik7XHJcbiAgfSk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGluc3RhbnRpYXRlQXN5bmMoYmluYXJ5LCBiaW5hcnlGaWxlLCBpbXBvcnRzLCBjYWxsYmFjaykge1xyXG4gIGlmICghYmluYXJ5ICYmXHJcbiAgICAgIHR5cGVvZiBXZWJBc3NlbWJseS5pbnN0YW50aWF0ZVN0cmVhbWluZyA9PSAnZnVuY3Rpb24nICYmXHJcbiAgICAgICFpc0RhdGFVUkkoYmluYXJ5RmlsZSkgJiZcclxuICAgICAgdHlwZW9mIGZldGNoID09ICdmdW5jdGlvbicpIHtcclxuICAgIHJldHVybiBmZXRjaChiaW5hcnlGaWxlLCB7IGNyZWRlbnRpYWxzOiAnc2FtZS1vcmlnaW4nIH0pLnRoZW4oZnVuY3Rpb24ocmVzcG9uc2UpIHtcclxuICAgICAgLy8gU3VwcHJlc3MgY2xvc3VyZSB3YXJuaW5nIGhlcmUgc2luY2UgdGhlIHVwc3RyZWFtIGRlZmluaXRpb24gZm9yXHJcbiAgICAgIC8vIGluc3RhbnRpYXRlU3RyZWFtaW5nIG9ubHkgYWxsb3dzIFByb21pc2U8UmVwc3BvbnNlPiByYXRoZXIgdGhhblxyXG4gICAgICAvLyBhbiBhY3R1YWwgUmVzcG9uc2UuXHJcbiAgICAgIC8vIFRPRE8oaHR0cHM6Ly9naXRodWIuY29tL2dvb2dsZS9jbG9zdXJlLWNvbXBpbGVyL3B1bGwvMzkxMyk6IFJlbW92ZSBpZi93aGVuIHVwc3RyZWFtIGNsb3N1cmUgaXMgZml4ZWQuXHJcbiAgICAgIC8qKiBAc3VwcHJlc3Mge2NoZWNrVHlwZXN9ICovXHJcbiAgICAgIHZhciByZXN1bHQgPSBXZWJBc3NlbWJseS5pbnN0YW50aWF0ZVN0cmVhbWluZyhyZXNwb25zZSwgaW1wb3J0cyk7XHJcblxyXG4gICAgICByZXR1cm4gcmVzdWx0LnRoZW4oXHJcbiAgICAgICAgY2FsbGJhY2ssXHJcbiAgICAgICAgZnVuY3Rpb24ocmVhc29uKSB7XHJcbiAgICAgICAgICAvLyBXZSBleHBlY3QgdGhlIG1vc3QgY29tbW9uIGZhaWx1cmUgY2F1c2UgdG8gYmUgYSBiYWQgTUlNRSB0eXBlIGZvciB0aGUgYmluYXJ5LFxyXG4gICAgICAgICAgLy8gaW4gd2hpY2ggY2FzZSBmYWxsaW5nIGJhY2sgdG8gQXJyYXlCdWZmZXIgaW5zdGFudGlhdGlvbiBzaG91bGQgd29yay5cclxuICAgICAgICAgIGVycignd2FzbSBzdHJlYW1pbmcgY29tcGlsZSBmYWlsZWQ6ICcgKyByZWFzb24pO1xyXG4gICAgICAgICAgZXJyKCdmYWxsaW5nIGJhY2sgdG8gQXJyYXlCdWZmZXIgaW5zdGFudGlhdGlvbicpO1xyXG4gICAgICAgICAgcmV0dXJuIGluc3RhbnRpYXRlQXJyYXlCdWZmZXIoYmluYXJ5RmlsZSwgaW1wb3J0cywgY2FsbGJhY2spO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfSk7XHJcbiAgfSBlbHNlIHtcclxuICAgIHJldHVybiBpbnN0YW50aWF0ZUFycmF5QnVmZmVyKGJpbmFyeUZpbGUsIGltcG9ydHMsIGNhbGxiYWNrKTtcclxuICB9XHJcbn1cclxuXHJcbi8vIENyZWF0ZSB0aGUgd2FzbSBpbnN0YW5jZS5cclxuLy8gUmVjZWl2ZXMgdGhlIHdhc20gaW1wb3J0cywgcmV0dXJucyB0aGUgZXhwb3J0cy5cclxuZnVuY3Rpb24gY3JlYXRlV2FzbSgpIHtcclxuICAvLyBwcmVwYXJlIGltcG9ydHNcclxuICB2YXIgaW5mbyA9IHtcclxuICAgICdlbnYnOiB3YXNtSW1wb3J0cyxcclxuICAgICd3YXNpX3NuYXBzaG90X3ByZXZpZXcxJzogd2FzbUltcG9ydHMsXHJcbiAgfTtcclxuICAvLyBMb2FkIHRoZSB3YXNtIG1vZHVsZSBhbmQgY3JlYXRlIGFuIGluc3RhbmNlIG9mIHVzaW5nIG5hdGl2ZSBzdXBwb3J0IGluIHRoZSBKUyBlbmdpbmUuXHJcbiAgLy8gaGFuZGxlIGEgZ2VuZXJhdGVkIHdhc20gaW5zdGFuY2UsIHJlY2VpdmluZyBpdHMgZXhwb3J0cyBhbmRcclxuICAvLyBwZXJmb3JtaW5nIG90aGVyIG5lY2Vzc2FyeSBzZXR1cFxyXG4gIC8qKiBAcGFyYW0ge1dlYkFzc2VtYmx5Lk1vZHVsZT19IG1vZHVsZSovXHJcbiAgZnVuY3Rpb24gcmVjZWl2ZUluc3RhbmNlKGluc3RhbmNlLCBtb2R1bGUpIHtcclxuICAgIHZhciBleHBvcnRzID0gaW5zdGFuY2UuZXhwb3J0cztcclxuXHJcbiAgICBNb2R1bGVbJ2FzbSddID0gZXhwb3J0cztcclxuXHJcbiAgICB3YXNtTWVtb3J5ID0gTW9kdWxlWydhc20nXVsnbWVtb3J5J107XHJcbiAgICB1cGRhdGVNZW1vcnlWaWV3cygpO1xyXG5cclxuICAgIHdhc21UYWJsZSA9IE1vZHVsZVsnYXNtJ11bJ19faW5kaXJlY3RfZnVuY3Rpb25fdGFibGUnXTtcclxuXHJcbiAgICBhZGRPbkluaXQoTW9kdWxlWydhc20nXVsnX193YXNtX2NhbGxfY3RvcnMnXSk7XHJcblxyXG4gICAgcmVtb3ZlUnVuRGVwZW5kZW5jeSgnd2FzbS1pbnN0YW50aWF0ZScpO1xyXG5cclxuICAgIHJldHVybiBleHBvcnRzO1xyXG4gIH1cclxuICAvLyB3YWl0IGZvciB0aGUgcHRocmVhZCBwb29sIChpZiBhbnkpXHJcbiAgYWRkUnVuRGVwZW5kZW5jeSgnd2FzbS1pbnN0YW50aWF0ZScpO1xyXG5cclxuICAvLyBQcmVmZXIgc3RyZWFtaW5nIGluc3RhbnRpYXRpb24gaWYgYXZhaWxhYmxlLlxyXG4gIGZ1bmN0aW9uIHJlY2VpdmVJbnN0YW50aWF0aW9uUmVzdWx0KHJlc3VsdCkge1xyXG4gICAgLy8gJ3Jlc3VsdCcgaXMgYSBSZXN1bHRPYmplY3Qgb2JqZWN0IHdoaWNoIGhhcyBib3RoIHRoZSBtb2R1bGUgYW5kIGluc3RhbmNlLlxyXG4gICAgLy8gcmVjZWl2ZUluc3RhbmNlKCkgd2lsbCBzd2FwIGluIHRoZSBleHBvcnRzICh0byBNb2R1bGUuYXNtKSBzbyB0aGV5IGNhbiBiZSBjYWxsZWRcclxuICAgIC8vIFRPRE86IER1ZSB0byBDbG9zdXJlIHJlZ3Jlc3Npb24gaHR0cHM6Ly9naXRodWIuY29tL2dvb2dsZS9jbG9zdXJlLWNvbXBpbGVyL2lzc3Vlcy8zMTkzLCB0aGUgYWJvdmUgbGluZSBubyBsb25nZXIgb3B0aW1pemVzIG91dCBkb3duIHRvIHRoZSBmb2xsb3dpbmcgbGluZS5cclxuICAgIC8vIFdoZW4gdGhlIHJlZ3Jlc3Npb24gaXMgZml4ZWQsIGNhbiByZXN0b3JlIHRoZSBhYm92ZSBQVEhSRUFEUy1lbmFibGVkIHBhdGguXHJcbiAgICByZWNlaXZlSW5zdGFuY2UocmVzdWx0WydpbnN0YW5jZSddKTtcclxuICB9XHJcblxyXG4gIC8vIFVzZXIgc2hlbGwgcGFnZXMgY2FuIHdyaXRlIHRoZWlyIG93biBNb2R1bGUuaW5zdGFudGlhdGVXYXNtID0gZnVuY3Rpb24oaW1wb3J0cywgc3VjY2Vzc0NhbGxiYWNrKSBjYWxsYmFja1xyXG4gIC8vIHRvIG1hbnVhbGx5IGluc3RhbnRpYXRlIHRoZSBXYXNtIG1vZHVsZSB0aGVtc2VsdmVzLiBUaGlzIGFsbG93cyBwYWdlcyB0b1xyXG4gIC8vIHJ1biB0aGUgaW5zdGFudGlhdGlvbiBwYXJhbGxlbCB0byBhbnkgb3RoZXIgYXN5bmMgc3RhcnR1cCBhY3Rpb25zIHRoZXkgYXJlXHJcbiAgLy8gcGVyZm9ybWluZy5cclxuICAvLyBBbHNvIHB0aHJlYWRzIGFuZCB3YXNtIHdvcmtlcnMgaW5pdGlhbGl6ZSB0aGUgd2FzbSBpbnN0YW5jZSB0aHJvdWdoIHRoaXNcclxuICAvLyBwYXRoLlxyXG4gIGlmIChNb2R1bGVbJ2luc3RhbnRpYXRlV2FzbSddKSB7XHJcblxyXG4gICAgdHJ5IHtcclxuICAgICAgcmV0dXJuIE1vZHVsZVsnaW5zdGFudGlhdGVXYXNtJ10oaW5mbywgcmVjZWl2ZUluc3RhbmNlKTtcclxuICAgIH0gY2F0Y2goZSkge1xyXG4gICAgICBlcnIoJ01vZHVsZS5pbnN0YW50aWF0ZVdhc20gY2FsbGJhY2sgZmFpbGVkIHdpdGggZXJyb3I6ICcgKyBlKTtcclxuICAgICAgICAvLyBJZiBpbnN0YW50aWF0aW9uIGZhaWxzLCByZWplY3QgdGhlIG1vZHVsZSByZWFkeSBwcm9taXNlLlxyXG4gICAgICAgIHJlYWR5UHJvbWlzZVJlamVjdChlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIElmIGluc3RhbnRpYXRpb24gZmFpbHMsIHJlamVjdCB0aGUgbW9kdWxlIHJlYWR5IHByb21pc2UuXHJcbiAgaW5zdGFudGlhdGVBc3luYyh3YXNtQmluYXJ5LCB3YXNtQmluYXJ5RmlsZSwgaW5mbywgcmVjZWl2ZUluc3RhbnRpYXRpb25SZXN1bHQpLmNhdGNoKHJlYWR5UHJvbWlzZVJlamVjdCk7XHJcbiAgcmV0dXJuIHt9OyAvLyBubyBleHBvcnRzIHlldDsgd2UnbGwgZmlsbCB0aGVtIGluIGxhdGVyXHJcbn1cclxuXHJcbi8vIEdsb2JhbHMgdXNlZCBieSBKUyBpNjQgY29udmVyc2lvbnMgKHNlZSBtYWtlU2V0VmFsdWUpXHJcbnZhciB0ZW1wRG91YmxlO1xyXG52YXIgdGVtcEk2NDtcclxuXHJcbi8vIGluY2x1ZGU6IHJ1bnRpbWVfZGVidWcuanNcclxuLy8gZW5kIGluY2x1ZGU6IHJ1bnRpbWVfZGVidWcuanNcclxuLy8gPT09IEJvZHkgPT09XHJcblxyXG5cclxuLy8gZW5kIGluY2x1ZGU6IHByZWFtYmxlLmpzXHJcblxyXG4gIC8qKiBAY29uc3RydWN0b3IgKi9cclxuICBmdW5jdGlvbiBFeGl0U3RhdHVzKHN0YXR1cykge1xyXG4gICAgICB0aGlzLm5hbWUgPSAnRXhpdFN0YXR1cyc7XHJcbiAgICAgIHRoaXMubWVzc2FnZSA9ICdQcm9ncmFtIHRlcm1pbmF0ZWQgd2l0aCBleGl0KCcgKyBzdGF0dXMgKyAnKSc7XHJcbiAgICAgIHRoaXMuc3RhdHVzID0gc3RhdHVzO1xyXG4gICAgfVxyXG5cclxuICBmdW5jdGlvbiBjYWxsUnVudGltZUNhbGxiYWNrcyhjYWxsYmFja3MpIHtcclxuICAgICAgd2hpbGUgKGNhbGxiYWNrcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgLy8gUGFzcyB0aGUgbW9kdWxlIGFzIHRoZSBmaXJzdCBhcmd1bWVudC5cclxuICAgICAgICBjYWxsYmFja3Muc2hpZnQoKShNb2R1bGUpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gIFxyXG4gICAgLyoqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gcHRyXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gdHlwZVxyXG4gICAgICovXHJcbiAgZnVuY3Rpb24gZ2V0VmFsdWUocHRyLCB0eXBlID0gJ2k4Jykge1xyXG4gICAgaWYgKHR5cGUuZW5kc1dpdGgoJyonKSkgdHlwZSA9ICcqJztcclxuICAgIHN3aXRjaCAodHlwZSkge1xyXG4gICAgICBjYXNlICdpMSc6IHJldHVybiBIRUFQOFsoKHB0cik+PjApXTtcclxuICAgICAgY2FzZSAnaTgnOiByZXR1cm4gSEVBUDhbKChwdHIpPj4wKV07XHJcbiAgICAgIGNhc2UgJ2kxNic6IHJldHVybiBIRUFQMTZbKChwdHIpPj4xKV07XHJcbiAgICAgIGNhc2UgJ2kzMic6IHJldHVybiBIRUFQMzJbKChwdHIpPj4yKV07XHJcbiAgICAgIGNhc2UgJ2k2NCc6IHJldHVybiBIRUFQMzJbKChwdHIpPj4yKV07XHJcbiAgICAgIGNhc2UgJ2Zsb2F0JzogcmV0dXJuIEhFQVBGMzJbKChwdHIpPj4yKV07XHJcbiAgICAgIGNhc2UgJ2RvdWJsZSc6IHJldHVybiBIRUFQRjY0WygocHRyKT4+MyldO1xyXG4gICAgICBjYXNlICcqJzogcmV0dXJuIEhFQVBVMzJbKChwdHIpPj4yKV07XHJcbiAgICAgIGRlZmF1bHQ6IGFib3J0KCdpbnZhbGlkIHR5cGUgZm9yIGdldFZhbHVlOiAnICsgdHlwZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBcclxuICAgIC8qKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHB0clxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gdHlwZVxyXG4gICAgICovXHJcbiAgZnVuY3Rpb24gc2V0VmFsdWUocHRyLCB2YWx1ZSwgdHlwZSA9ICdpOCcpIHtcclxuICAgIGlmICh0eXBlLmVuZHNXaXRoKCcqJykpIHR5cGUgPSAnKic7XHJcbiAgICBzd2l0Y2ggKHR5cGUpIHtcclxuICAgICAgY2FzZSAnaTEnOiBIRUFQOFsoKHB0cik+PjApXSA9IHZhbHVlOyBicmVhaztcclxuICAgICAgY2FzZSAnaTgnOiBIRUFQOFsoKHB0cik+PjApXSA9IHZhbHVlOyBicmVhaztcclxuICAgICAgY2FzZSAnaTE2JzogSEVBUDE2WygocHRyKT4+MSldID0gdmFsdWU7IGJyZWFrO1xyXG4gICAgICBjYXNlICdpMzInOiBIRUFQMzJbKChwdHIpPj4yKV0gPSB2YWx1ZTsgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ2k2NCc6ICh0ZW1wSTY0ID0gW3ZhbHVlPj4+MCwodGVtcERvdWJsZT12YWx1ZSwoKyhNYXRoLmFicyh0ZW1wRG91YmxlKSkpID49IDEuMCA/ICh0ZW1wRG91YmxlID4gMC4wID8gKChNYXRoLm1pbigoKyhNYXRoLmZsb29yKCh0ZW1wRG91YmxlKS80Mjk0OTY3Mjk2LjApKSksIDQyOTQ5NjcyOTUuMCkpfDApPj4+MCA6ICh+figoKyhNYXRoLmNlaWwoKHRlbXBEb3VibGUgLSArKCgofn4odGVtcERvdWJsZSkpKT4+PjApKS80Mjk0OTY3Mjk2LjApKSkpKT4+PjApIDogMCldLEhFQVAzMlsoKHB0cik+PjIpXSA9IHRlbXBJNjRbMF0sSEVBUDMyWygoKHB0cikrKDQpKT4+MildID0gdGVtcEk2NFsxXSk7IGJyZWFrO1xyXG4gICAgICBjYXNlICdmbG9hdCc6IEhFQVBGMzJbKChwdHIpPj4yKV0gPSB2YWx1ZTsgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ2RvdWJsZSc6IEhFQVBGNjRbKChwdHIpPj4zKV0gPSB2YWx1ZTsgYnJlYWs7XHJcbiAgICAgIGNhc2UgJyonOiBIRUFQVTMyWygocHRyKT4+MildID0gdmFsdWU7IGJyZWFrO1xyXG4gICAgICBkZWZhdWx0OiBhYm9ydCgnaW52YWxpZCB0eXBlIGZvciBzZXRWYWx1ZTogJyArIHR5cGUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqIEBjb25zdHJ1Y3RvciAqL1xyXG4gIGZ1bmN0aW9uIEV4Y2VwdGlvbkluZm8oZXhjUHRyKSB7XHJcbiAgICAgIHRoaXMuZXhjUHRyID0gZXhjUHRyO1xyXG4gICAgICB0aGlzLnB0ciA9IGV4Y1B0ciAtIDI0O1xyXG4gIFxyXG4gICAgICB0aGlzLnNldF90eXBlID0gZnVuY3Rpb24odHlwZSkge1xyXG4gICAgICAgIEhFQVBVMzJbKCgodGhpcy5wdHIpKyg0KSk+PjIpXSA9IHR5cGU7XHJcbiAgICAgIH07XHJcbiAgXHJcbiAgICAgIHRoaXMuZ2V0X3R5cGUgPSBmdW5jdGlvbigpIHtcclxuICAgICAgICByZXR1cm4gSEVBUFUzMlsoKCh0aGlzLnB0cikrKDQpKT4+MildO1xyXG4gICAgICB9O1xyXG4gIFxyXG4gICAgICB0aGlzLnNldF9kZXN0cnVjdG9yID0gZnVuY3Rpb24oZGVzdHJ1Y3Rvcikge1xyXG4gICAgICAgIEhFQVBVMzJbKCgodGhpcy5wdHIpKyg4KSk+PjIpXSA9IGRlc3RydWN0b3I7XHJcbiAgICAgIH07XHJcbiAgXHJcbiAgICAgIHRoaXMuZ2V0X2Rlc3RydWN0b3IgPSBmdW5jdGlvbigpIHtcclxuICAgICAgICByZXR1cm4gSEVBUFUzMlsoKCh0aGlzLnB0cikrKDgpKT4+MildO1xyXG4gICAgICB9O1xyXG4gIFxyXG4gICAgICB0aGlzLnNldF9jYXVnaHQgPSBmdW5jdGlvbiAoY2F1Z2h0KSB7XHJcbiAgICAgICAgY2F1Z2h0ID0gY2F1Z2h0ID8gMSA6IDA7XHJcbiAgICAgICAgSEVBUDhbKCgodGhpcy5wdHIpKygxMikpPj4wKV0gPSBjYXVnaHQ7XHJcbiAgICAgIH07XHJcbiAgXHJcbiAgICAgIHRoaXMuZ2V0X2NhdWdodCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gSEVBUDhbKCgodGhpcy5wdHIpKygxMikpPj4wKV0gIT0gMDtcclxuICAgICAgfTtcclxuICBcclxuICAgICAgdGhpcy5zZXRfcmV0aHJvd24gPSBmdW5jdGlvbiAocmV0aHJvd24pIHtcclxuICAgICAgICByZXRocm93biA9IHJldGhyb3duID8gMSA6IDA7XHJcbiAgICAgICAgSEVBUDhbKCgodGhpcy5wdHIpKygxMykpPj4wKV0gPSByZXRocm93bjtcclxuICAgICAgfTtcclxuICBcclxuICAgICAgdGhpcy5nZXRfcmV0aHJvd24gPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIEhFQVA4WygoKHRoaXMucHRyKSsoMTMpKT4+MCldICE9IDA7XHJcbiAgICAgIH07XHJcbiAgXHJcbiAgICAgIC8vIEluaXRpYWxpemUgbmF0aXZlIHN0cnVjdHVyZSBmaWVsZHMuIFNob3VsZCBiZSBjYWxsZWQgb25jZSBhZnRlciBhbGxvY2F0ZWQuXHJcbiAgICAgIHRoaXMuaW5pdCA9IGZ1bmN0aW9uKHR5cGUsIGRlc3RydWN0b3IpIHtcclxuICAgICAgICB0aGlzLnNldF9hZGp1c3RlZF9wdHIoMCk7XHJcbiAgICAgICAgdGhpcy5zZXRfdHlwZSh0eXBlKTtcclxuICAgICAgICB0aGlzLnNldF9kZXN0cnVjdG9yKGRlc3RydWN0b3IpO1xyXG4gICAgICB9XHJcbiAgXHJcbiAgICAgIHRoaXMuc2V0X2FkanVzdGVkX3B0ciA9IGZ1bmN0aW9uKGFkanVzdGVkUHRyKSB7XHJcbiAgICAgICAgSEVBUFUzMlsoKCh0aGlzLnB0cikrKDE2KSk+PjIpXSA9IGFkanVzdGVkUHRyO1xyXG4gICAgICB9O1xyXG4gIFxyXG4gICAgICB0aGlzLmdldF9hZGp1c3RlZF9wdHIgPSBmdW5jdGlvbigpIHtcclxuICAgICAgICByZXR1cm4gSEVBUFUzMlsoKCh0aGlzLnB0cikrKDE2KSk+PjIpXTtcclxuICAgICAgfTtcclxuICBcclxuICAgICAgLy8gR2V0IHBvaW50ZXIgd2hpY2ggaXMgZXhwZWN0ZWQgdG8gYmUgcmVjZWl2ZWQgYnkgY2F0Y2ggY2xhdXNlIGluIEMrKyBjb2RlLiBJdCBtYXkgYmUgYWRqdXN0ZWRcclxuICAgICAgLy8gd2hlbiB0aGUgcG9pbnRlciBpcyBjYXN0ZWQgdG8gc29tZSBvZiB0aGUgZXhjZXB0aW9uIG9iamVjdCBiYXNlIGNsYXNzZXMgKGUuZy4gd2hlbiB2aXJ0dWFsXHJcbiAgICAgIC8vIGluaGVyaXRhbmNlIGlzIHVzZWQpLiBXaGVuIGEgcG9pbnRlciBpcyB0aHJvd24gdGhpcyBtZXRob2Qgc2hvdWxkIHJldHVybiB0aGUgdGhyb3duIHBvaW50ZXJcclxuICAgICAgLy8gaXRzZWxmLlxyXG4gICAgICB0aGlzLmdldF9leGNlcHRpb25fcHRyID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgLy8gV29yayBhcm91bmQgYSBmYXN0Y29tcCBidWcsIHRoaXMgY29kZSBpcyBzdGlsbCBpbmNsdWRlZCBmb3Igc29tZSByZWFzb24gaW4gYSBidWlsZCB3aXRob3V0XHJcbiAgICAgICAgLy8gZXhjZXB0aW9ucyBzdXBwb3J0LlxyXG4gICAgICAgIHZhciBpc1BvaW50ZXIgPSBfX19jeGFfaXNfcG9pbnRlcl90eXBlKHRoaXMuZ2V0X3R5cGUoKSk7XHJcbiAgICAgICAgaWYgKGlzUG9pbnRlcikge1xyXG4gICAgICAgICAgcmV0dXJuIEhFQVBVMzJbKCh0aGlzLmV4Y1B0cik+PjIpXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIGFkanVzdGVkID0gdGhpcy5nZXRfYWRqdXN0ZWRfcHRyKCk7XHJcbiAgICAgICAgaWYgKGFkanVzdGVkICE9PSAwKSByZXR1cm4gYWRqdXN0ZWQ7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZXhjUHRyO1xyXG4gICAgICB9O1xyXG4gICAgfVxyXG4gIFxyXG4gIHZhciBleGNlcHRpb25MYXN0ID0gMDtcclxuICBcclxuICB2YXIgdW5jYXVnaHRFeGNlcHRpb25Db3VudCA9IDA7XHJcbiAgZnVuY3Rpb24gX19fY3hhX3Rocm93KHB0ciwgdHlwZSwgZGVzdHJ1Y3Rvcikge1xyXG4gICAgICB2YXIgaW5mbyA9IG5ldyBFeGNlcHRpb25JbmZvKHB0cik7XHJcbiAgICAgIC8vIEluaXRpYWxpemUgRXhjZXB0aW9uSW5mbyBjb250ZW50IGFmdGVyIGl0IHdhcyBhbGxvY2F0ZWQgaW4gX19jeGFfYWxsb2NhdGVfZXhjZXB0aW9uLlxyXG4gICAgICBpbmZvLmluaXQodHlwZSwgZGVzdHJ1Y3Rvcik7XHJcbiAgICAgIGV4Y2VwdGlvbkxhc3QgPSBwdHI7XHJcbiAgICAgIHVuY2F1Z2h0RXhjZXB0aW9uQ291bnQrKztcclxuICAgICAgdGhyb3cgZXhjZXB0aW9uTGFzdDtcclxuICAgIH1cclxuXHJcbiAgZnVuY3Rpb24gX2Fib3J0KCkge1xyXG4gICAgICBhYm9ydCgnJyk7XHJcbiAgICB9XHJcblxyXG4gIGZ1bmN0aW9uIF9lbXNjcmlwdGVuX21lbWNweV9iaWcoZGVzdCwgc3JjLCBudW0pIHtcclxuICAgICAgSEVBUFU4LmNvcHlXaXRoaW4oZGVzdCwgc3JjLCBzcmMgKyBudW0pO1xyXG4gICAgfVxyXG5cclxuICBmdW5jdGlvbiBnZXRIZWFwTWF4KCkge1xyXG4gICAgICAvLyBTdGF5IG9uZSBXYXNtIHBhZ2Ugc2hvcnQgb2YgNEdCOiB3aGlsZSBlLmcuIENocm9tZSBpcyBhYmxlIHRvIGFsbG9jYXRlXHJcbiAgICAgIC8vIGZ1bGwgNEdCIFdhc20gbWVtb3JpZXMsIHRoZSBzaXplIHdpbGwgd3JhcCBiYWNrIHRvIDAgYnl0ZXMgaW4gV2FzbSBzaWRlXHJcbiAgICAgIC8vIGZvciBhbnkgY29kZSB0aGF0IGRlYWxzIHdpdGggaGVhcCBzaXplcywgd2hpY2ggd291bGQgcmVxdWlyZSBzcGVjaWFsXHJcbiAgICAgIC8vIGNhc2luZyBhbGwgaGVhcCBzaXplIHJlbGF0ZWQgY29kZSB0byB0cmVhdCAwIHNwZWNpYWxseS5cclxuICAgICAgcmV0dXJuIDIxNDc0ODM2NDg7XHJcbiAgICB9XHJcbiAgXHJcbiAgZnVuY3Rpb24gZW1zY3JpcHRlbl9yZWFsbG9jX2J1ZmZlcihzaXplKSB7XHJcbiAgICAgIHZhciBiID0gd2FzbU1lbW9yeS5idWZmZXI7XHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgLy8gcm91bmQgc2l6ZSBncm93IHJlcXVlc3QgdXAgdG8gd2FzbSBwYWdlIHNpemUgKGZpeGVkIDY0S0IgcGVyIHNwZWMpXHJcbiAgICAgICAgd2FzbU1lbW9yeS5ncm93KChzaXplIC0gYi5ieXRlTGVuZ3RoICsgNjU1MzUpID4+PiAxNik7IC8vIC5ncm93KCkgdGFrZXMgYSBkZWx0YSBjb21wYXJlZCB0byB0aGUgcHJldmlvdXMgc2l6ZVxyXG4gICAgICAgIHVwZGF0ZU1lbW9yeVZpZXdzKCk7XHJcbiAgICAgICAgcmV0dXJuIDEgLypzdWNjZXNzKi87XHJcbiAgICAgIH0gY2F0Y2goZSkge1xyXG4gICAgICB9XHJcbiAgICAgIC8vIGltcGxpY2l0IDAgcmV0dXJuIHRvIHNhdmUgY29kZSBzaXplIChjYWxsZXIgd2lsbCBjYXN0IFwidW5kZWZpbmVkXCIgaW50byAwXHJcbiAgICAgIC8vIGFueWhvdylcclxuICAgIH1cclxuICBmdW5jdGlvbiBfZW1zY3JpcHRlbl9yZXNpemVfaGVhcChyZXF1ZXN0ZWRTaXplKSB7XHJcbiAgICAgIHZhciBvbGRTaXplID0gSEVBUFU4Lmxlbmd0aDtcclxuICAgICAgcmVxdWVzdGVkU2l6ZSA9IHJlcXVlc3RlZFNpemUgPj4+IDA7XHJcbiAgICAgIC8vIFdpdGggbXVsdGl0aHJlYWRlZCBidWlsZHMsIHJhY2VzIGNhbiBoYXBwZW4gKGFub3RoZXIgdGhyZWFkIG1pZ2h0IGluY3JlYXNlIHRoZSBzaXplXHJcbiAgICAgIC8vIGluIGJldHdlZW4pLCBzbyByZXR1cm4gYSBmYWlsdXJlLCBhbmQgbGV0IHRoZSBjYWxsZXIgcmV0cnkuXHJcbiAgXHJcbiAgICAgIC8vIE1lbW9yeSByZXNpemUgcnVsZXM6XHJcbiAgICAgIC8vIDEuICBBbHdheXMgaW5jcmVhc2UgaGVhcCBzaXplIHRvIGF0IGxlYXN0IHRoZSByZXF1ZXN0ZWQgc2l6ZSwgcm91bmRlZCB1cFxyXG4gICAgICAvLyAgICAgdG8gbmV4dCBwYWdlIG11bHRpcGxlLlxyXG4gICAgICAvLyAyYS4gSWYgTUVNT1JZX0dST1dUSF9MSU5FQVJfU1RFUCA9PSAtMSwgZXhjZXNzaXZlbHkgcmVzaXplIHRoZSBoZWFwXHJcbiAgICAgIC8vICAgICBnZW9tZXRyaWNhbGx5OiBpbmNyZWFzZSB0aGUgaGVhcCBzaXplIGFjY29yZGluZyB0b1xyXG4gICAgICAvLyAgICAgTUVNT1JZX0dST1dUSF9HRU9NRVRSSUNfU1RFUCBmYWN0b3IgKGRlZmF1bHQgKzIwJSksIEF0IG1vc3RcclxuICAgICAgLy8gICAgIG92ZXJyZXNlcnZlIGJ5IE1FTU9SWV9HUk9XVEhfR0VPTUVUUklDX0NBUCBieXRlcyAoZGVmYXVsdCA5Nk1CKS5cclxuICAgICAgLy8gMmIuIElmIE1FTU9SWV9HUk9XVEhfTElORUFSX1NURVAgIT0gLTEsIGV4Y2Vzc2l2ZWx5IHJlc2l6ZSB0aGUgaGVhcFxyXG4gICAgICAvLyAgICAgbGluZWFybHk6IGluY3JlYXNlIHRoZSBoZWFwIHNpemUgYnkgYXQgbGVhc3RcclxuICAgICAgLy8gICAgIE1FTU9SWV9HUk9XVEhfTElORUFSX1NURVAgYnl0ZXMuXHJcbiAgICAgIC8vIDMuICBNYXggc2l6ZSBmb3IgdGhlIGhlYXAgaXMgY2FwcGVkIGF0IDIwNDhNQi1XQVNNX1BBR0VfU0laRSwgb3IgYnlcclxuICAgICAgLy8gICAgIE1BWElNVU1fTUVNT1JZLCBvciBieSBBU0FOIGxpbWl0LCBkZXBlbmRpbmcgb24gd2hpY2ggaXMgc21hbGxlc3RcclxuICAgICAgLy8gNC4gIElmIHdlIHdlcmUgdW5hYmxlIHRvIGFsbG9jYXRlIGFzIG11Y2ggbWVtb3J5LCBpdCBtYXkgYmUgZHVlIHRvXHJcbiAgICAgIC8vICAgICBvdmVyLWVhZ2VyIGRlY2lzaW9uIHRvIGV4Y2Vzc2l2ZWx5IHJlc2VydmUgZHVlIHRvICgzKSBhYm92ZS5cclxuICAgICAgLy8gICAgIEhlbmNlIGlmIGFuIGFsbG9jYXRpb24gZmFpbHMsIGN1dCBkb3duIG9uIHRoZSBhbW91bnQgb2YgZXhjZXNzXHJcbiAgICAgIC8vICAgICBncm93dGgsIGluIGFuIGF0dGVtcHQgdG8gc3VjY2VlZCB0byBwZXJmb3JtIGEgc21hbGxlciBhbGxvY2F0aW9uLlxyXG4gIFxyXG4gICAgICAvLyBBIGxpbWl0IGlzIHNldCBmb3IgaG93IG11Y2ggd2UgY2FuIGdyb3cuIFdlIHNob3VsZCBub3QgZXhjZWVkIHRoYXRcclxuICAgICAgLy8gKHRoZSB3YXNtIGJpbmFyeSBzcGVjaWZpZXMgaXQsIHNvIGlmIHdlIHRyaWVkLCB3ZSdkIGZhaWwgYW55aG93KS5cclxuICAgICAgdmFyIG1heEhlYXBTaXplID0gZ2V0SGVhcE1heCgpO1xyXG4gICAgICBpZiAocmVxdWVzdGVkU2l6ZSA+IG1heEhlYXBTaXplKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICB9XHJcbiAgXHJcbiAgICAgIGxldCBhbGlnblVwID0gKHgsIG11bHRpcGxlKSA9PiB4ICsgKG11bHRpcGxlIC0geCAlIG11bHRpcGxlKSAlIG11bHRpcGxlO1xyXG4gIFxyXG4gICAgICAvLyBMb29wIHRocm91Z2ggcG90ZW50aWFsIGhlYXAgc2l6ZSBpbmNyZWFzZXMuIElmIHdlIGF0dGVtcHQgYSB0b28gZWFnZXJcclxuICAgICAgLy8gcmVzZXJ2YXRpb24gdGhhdCBmYWlscywgY3V0IGRvd24gb24gdGhlIGF0dGVtcHRlZCBzaXplIGFuZCByZXNlcnZlIGFcclxuICAgICAgLy8gc21hbGxlciBidW1wIGluc3RlYWQuIChtYXggMyB0aW1lcywgY2hvc2VuIHNvbWV3aGF0IGFyYml0cmFyaWx5KVxyXG4gICAgICBmb3IgKHZhciBjdXREb3duID0gMTsgY3V0RG93biA8PSA0OyBjdXREb3duICo9IDIpIHtcclxuICAgICAgICB2YXIgb3Zlckdyb3duSGVhcFNpemUgPSBvbGRTaXplICogKDEgKyAwLjIgLyBjdXREb3duKTsgLy8gZW5zdXJlIGdlb21ldHJpYyBncm93dGhcclxuICAgICAgICAvLyBidXQgbGltaXQgb3ZlcnJlc2VydmluZyAoZGVmYXVsdCB0byBjYXBwaW5nIGF0ICs5Nk1CIG92ZXJncm93dGggYXQgbW9zdClcclxuICAgICAgICBvdmVyR3Jvd25IZWFwU2l6ZSA9IE1hdGgubWluKG92ZXJHcm93bkhlYXBTaXplLCByZXF1ZXN0ZWRTaXplICsgMTAwNjYzMjk2ICk7XHJcbiAgXHJcbiAgICAgICAgdmFyIG5ld1NpemUgPSBNYXRoLm1pbihtYXhIZWFwU2l6ZSwgYWxpZ25VcChNYXRoLm1heChyZXF1ZXN0ZWRTaXplLCBvdmVyR3Jvd25IZWFwU2l6ZSksIDY1NTM2KSk7XHJcbiAgXHJcbiAgICAgICAgdmFyIHJlcGxhY2VtZW50ID0gZW1zY3JpcHRlbl9yZWFsbG9jX2J1ZmZlcihuZXdTaXplKTtcclxuICAgICAgICBpZiAocmVwbGFjZW1lbnQpIHtcclxuICBcclxuICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gIGZ1bmN0aW9uIGdldENGdW5jKGlkZW50KSB7XHJcbiAgICAgIHZhciBmdW5jID0gTW9kdWxlWydfJyArIGlkZW50XTsgLy8gY2xvc3VyZSBleHBvcnRlZCBmdW5jdGlvblxyXG4gICAgICByZXR1cm4gZnVuYztcclxuICAgIH1cclxuICBcclxuICBcclxuICBmdW5jdGlvbiB3cml0ZUFycmF5VG9NZW1vcnkoYXJyYXksIGJ1ZmZlcikge1xyXG4gICAgICBIRUFQOC5zZXQoYXJyYXksIGJ1ZmZlcik7XHJcbiAgICB9XHJcbiAgXHJcbiAgZnVuY3Rpb24gbGVuZ3RoQnl0ZXNVVEY4KHN0cikge1xyXG4gICAgICB2YXIgbGVuID0gMDtcclxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdHIubGVuZ3RoOyArK2kpIHtcclxuICAgICAgICAvLyBHb3RjaGE6IGNoYXJDb2RlQXQgcmV0dXJucyBhIDE2LWJpdCB3b3JkIHRoYXQgaXMgYSBVVEYtMTYgZW5jb2RlZCBjb2RlXHJcbiAgICAgICAgLy8gdW5pdCwgbm90IGEgVW5pY29kZSBjb2RlIHBvaW50IG9mIHRoZSBjaGFyYWN0ZXIhIFNvIGRlY29kZVxyXG4gICAgICAgIC8vIFVURjE2LT5VVEYzMi0+VVRGOC5cclxuICAgICAgICAvLyBTZWUgaHR0cDovL3VuaWNvZGUub3JnL2ZhcS91dGZfYm9tLmh0bWwjdXRmMTYtM1xyXG4gICAgICAgIHZhciBjID0gc3RyLmNoYXJDb2RlQXQoaSk7IC8vIHBvc3NpYmx5IGEgbGVhZCBzdXJyb2dhdGVcclxuICAgICAgICBpZiAoYyA8PSAweDdGKSB7XHJcbiAgICAgICAgICBsZW4rKztcclxuICAgICAgICB9IGVsc2UgaWYgKGMgPD0gMHg3RkYpIHtcclxuICAgICAgICAgIGxlbiArPSAyO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoYyA+PSAweEQ4MDAgJiYgYyA8PSAweERGRkYpIHtcclxuICAgICAgICAgIGxlbiArPSA0OyArK2k7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGxlbiArPSAzO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gbGVuO1xyXG4gICAgfVxyXG4gIFxyXG4gIGZ1bmN0aW9uIHN0cmluZ1RvVVRGOEFycmF5KHN0ciwgaGVhcCwgb3V0SWR4LCBtYXhCeXRlc1RvV3JpdGUpIHtcclxuICAgICAgLy8gUGFyYW1ldGVyIG1heEJ5dGVzVG9Xcml0ZSBpcyBub3Qgb3B0aW9uYWwuIE5lZ2F0aXZlIHZhbHVlcywgMCwgbnVsbCxcclxuICAgICAgLy8gdW5kZWZpbmVkIGFuZCBmYWxzZSBlYWNoIGRvbid0IHdyaXRlIG91dCBhbnkgYnl0ZXMuXHJcbiAgICAgIGlmICghKG1heEJ5dGVzVG9Xcml0ZSA+IDApKVxyXG4gICAgICAgIHJldHVybiAwO1xyXG4gIFxyXG4gICAgICB2YXIgc3RhcnRJZHggPSBvdXRJZHg7XHJcbiAgICAgIHZhciBlbmRJZHggPSBvdXRJZHggKyBtYXhCeXRlc1RvV3JpdGUgLSAxOyAvLyAtMSBmb3Igc3RyaW5nIG51bGwgdGVybWluYXRvci5cclxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdHIubGVuZ3RoOyArK2kpIHtcclxuICAgICAgICAvLyBHb3RjaGE6IGNoYXJDb2RlQXQgcmV0dXJucyBhIDE2LWJpdCB3b3JkIHRoYXQgaXMgYSBVVEYtMTYgZW5jb2RlZCBjb2RlXHJcbiAgICAgICAgLy8gdW5pdCwgbm90IGEgVW5pY29kZSBjb2RlIHBvaW50IG9mIHRoZSBjaGFyYWN0ZXIhIFNvIGRlY29kZVxyXG4gICAgICAgIC8vIFVURjE2LT5VVEYzMi0+VVRGOC5cclxuICAgICAgICAvLyBTZWUgaHR0cDovL3VuaWNvZGUub3JnL2ZhcS91dGZfYm9tLmh0bWwjdXRmMTYtM1xyXG4gICAgICAgIC8vIEZvciBVVEY4IGJ5dGUgc3RydWN0dXJlLCBzZWUgaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9VVEYtOCNEZXNjcmlwdGlvblxyXG4gICAgICAgIC8vIGFuZCBodHRwczovL3d3dy5pZXRmLm9yZy9yZmMvcmZjMjI3OS50eHRcclxuICAgICAgICAvLyBhbmQgaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzM2MjlcclxuICAgICAgICB2YXIgdSA9IHN0ci5jaGFyQ29kZUF0KGkpOyAvLyBwb3NzaWJseSBhIGxlYWQgc3Vycm9nYXRlXHJcbiAgICAgICAgaWYgKHUgPj0gMHhEODAwICYmIHUgPD0gMHhERkZGKSB7XHJcbiAgICAgICAgICB2YXIgdTEgPSBzdHIuY2hhckNvZGVBdCgrK2kpO1xyXG4gICAgICAgICAgdSA9IDB4MTAwMDAgKyAoKHUgJiAweDNGRikgPDwgMTApIHwgKHUxICYgMHgzRkYpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodSA8PSAweDdGKSB7XHJcbiAgICAgICAgICBpZiAob3V0SWR4ID49IGVuZElkeCkgYnJlYWs7XHJcbiAgICAgICAgICBoZWFwW291dElkeCsrXSA9IHU7XHJcbiAgICAgICAgfSBlbHNlIGlmICh1IDw9IDB4N0ZGKSB7XHJcbiAgICAgICAgICBpZiAob3V0SWR4ICsgMSA+PSBlbmRJZHgpIGJyZWFrO1xyXG4gICAgICAgICAgaGVhcFtvdXRJZHgrK10gPSAweEMwIHwgKHUgPj4gNik7XHJcbiAgICAgICAgICBoZWFwW291dElkeCsrXSA9IDB4ODAgfCAodSAmIDYzKTtcclxuICAgICAgICB9IGVsc2UgaWYgKHUgPD0gMHhGRkZGKSB7XHJcbiAgICAgICAgICBpZiAob3V0SWR4ICsgMiA+PSBlbmRJZHgpIGJyZWFrO1xyXG4gICAgICAgICAgaGVhcFtvdXRJZHgrK10gPSAweEUwIHwgKHUgPj4gMTIpO1xyXG4gICAgICAgICAgaGVhcFtvdXRJZHgrK10gPSAweDgwIHwgKCh1ID4+IDYpICYgNjMpO1xyXG4gICAgICAgICAgaGVhcFtvdXRJZHgrK10gPSAweDgwIHwgKHUgJiA2Myk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGlmIChvdXRJZHggKyAzID49IGVuZElkeCkgYnJlYWs7XHJcbiAgICAgICAgICBoZWFwW291dElkeCsrXSA9IDB4RjAgfCAodSA+PiAxOCk7XHJcbiAgICAgICAgICBoZWFwW291dElkeCsrXSA9IDB4ODAgfCAoKHUgPj4gMTIpICYgNjMpO1xyXG4gICAgICAgICAgaGVhcFtvdXRJZHgrK10gPSAweDgwIHwgKCh1ID4+IDYpICYgNjMpO1xyXG4gICAgICAgICAgaGVhcFtvdXRJZHgrK10gPSAweDgwIHwgKHUgJiA2Myk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIC8vIE51bGwtdGVybWluYXRlIHRoZSBwb2ludGVyIHRvIHRoZSBidWZmZXIuXHJcbiAgICAgIGhlYXBbb3V0SWR4XSA9IDA7XHJcbiAgICAgIHJldHVybiBvdXRJZHggLSBzdGFydElkeDtcclxuICAgIH1cclxuICBmdW5jdGlvbiBzdHJpbmdUb1VURjgoc3RyLCBvdXRQdHIsIG1heEJ5dGVzVG9Xcml0ZSkge1xyXG4gICAgICByZXR1cm4gc3RyaW5nVG9VVEY4QXJyYXkoc3RyLCBIRUFQVTgsb3V0UHRyLCBtYXhCeXRlc1RvV3JpdGUpO1xyXG4gICAgfVxyXG4gIGZ1bmN0aW9uIHN0cmluZ1RvVVRGOE9uU3RhY2soc3RyKSB7XHJcbiAgICAgIHZhciBzaXplID0gbGVuZ3RoQnl0ZXNVVEY4KHN0cikgKyAxO1xyXG4gICAgICB2YXIgcmV0ID0gc3RhY2tBbGxvYyhzaXplKTtcclxuICAgICAgc3RyaW5nVG9VVEY4KHN0ciwgcmV0LCBzaXplKTtcclxuICAgICAgcmV0dXJuIHJldDtcclxuICAgIH1cclxuICBcclxuICB2YXIgVVRGOERlY29kZXIgPSB0eXBlb2YgVGV4dERlY29kZXIgIT0gJ3VuZGVmaW5lZCcgPyBuZXcgVGV4dERlY29kZXIoJ3V0ZjgnKSA6IHVuZGVmaW5lZDtcclxuICBcclxuICAgIC8qKlxyXG4gICAgICogR2l2ZW4gYSBwb2ludGVyICdpZHgnIHRvIGEgbnVsbC10ZXJtaW5hdGVkIFVURjgtZW5jb2RlZCBzdHJpbmcgaW4gdGhlIGdpdmVuXHJcbiAgICAgKiBhcnJheSB0aGF0IGNvbnRhaW5zIHVpbnQ4IHZhbHVlcywgcmV0dXJucyBhIGNvcHkgb2YgdGhhdCBzdHJpbmcgYXMgYVxyXG4gICAgICogSmF2YXNjcmlwdCBTdHJpbmcgb2JqZWN0LlxyXG4gICAgICogaGVhcE9yQXJyYXkgaXMgZWl0aGVyIGEgcmVndWxhciBhcnJheSwgb3IgYSBKYXZhU2NyaXB0IHR5cGVkIGFycmF5IHZpZXcuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gaWR4XHJcbiAgICAgKiBAcGFyYW0ge251bWJlcj19IG1heEJ5dGVzVG9SZWFkXHJcbiAgICAgKiBAcmV0dXJuIHtzdHJpbmd9XHJcbiAgICAgKi9cclxuICBmdW5jdGlvbiBVVEY4QXJyYXlUb1N0cmluZyhoZWFwT3JBcnJheSwgaWR4LCBtYXhCeXRlc1RvUmVhZCkge1xyXG4gICAgICB2YXIgZW5kSWR4ID0gaWR4ICsgbWF4Qnl0ZXNUb1JlYWQ7XHJcbiAgICAgIHZhciBlbmRQdHIgPSBpZHg7XHJcbiAgICAgIC8vIFRleHREZWNvZGVyIG5lZWRzIHRvIGtub3cgdGhlIGJ5dGUgbGVuZ3RoIGluIGFkdmFuY2UsIGl0IGRvZXNuJ3Qgc3RvcCBvblxyXG4gICAgICAvLyBudWxsIHRlcm1pbmF0b3IgYnkgaXRzZWxmLiAgQWxzbywgdXNlIHRoZSBsZW5ndGggaW5mbyB0byBhdm9pZCBydW5uaW5nIHRpbnlcclxuICAgICAgLy8gc3RyaW5ncyB0aHJvdWdoIFRleHREZWNvZGVyLCBzaW5jZSAuc3ViYXJyYXkoKSBhbGxvY2F0ZXMgZ2FyYmFnZS5cclxuICAgICAgLy8gKEFzIGEgdGlueSBjb2RlIHNhdmUgdHJpY2ssIGNvbXBhcmUgZW5kUHRyIGFnYWluc3QgZW5kSWR4IHVzaW5nIGEgbmVnYXRpb24sXHJcbiAgICAgIC8vIHNvIHRoYXQgdW5kZWZpbmVkIG1lYW5zIEluZmluaXR5KVxyXG4gICAgICB3aGlsZSAoaGVhcE9yQXJyYXlbZW5kUHRyXSAmJiAhKGVuZFB0ciA+PSBlbmRJZHgpKSArK2VuZFB0cjtcclxuICBcclxuICAgICAgaWYgKGVuZFB0ciAtIGlkeCA+IDE2ICYmIGhlYXBPckFycmF5LmJ1ZmZlciAmJiBVVEY4RGVjb2Rlcikge1xyXG4gICAgICAgIHJldHVybiBVVEY4RGVjb2Rlci5kZWNvZGUoaGVhcE9yQXJyYXkuc3ViYXJyYXkoaWR4LCBlbmRQdHIpKTtcclxuICAgICAgfVxyXG4gICAgICB2YXIgc3RyID0gJyc7XHJcbiAgICAgIC8vIElmIGJ1aWxkaW5nIHdpdGggVGV4dERlY29kZXIsIHdlIGhhdmUgYWxyZWFkeSBjb21wdXRlZCB0aGUgc3RyaW5nIGxlbmd0aFxyXG4gICAgICAvLyBhYm92ZSwgc28gdGVzdCBsb29wIGVuZCBjb25kaXRpb24gYWdhaW5zdCB0aGF0XHJcbiAgICAgIHdoaWxlIChpZHggPCBlbmRQdHIpIHtcclxuICAgICAgICAvLyBGb3IgVVRGOCBieXRlIHN0cnVjdHVyZSwgc2VlOlxyXG4gICAgICAgIC8vIGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvVVRGLTgjRGVzY3JpcHRpb25cclxuICAgICAgICAvLyBodHRwczovL3d3dy5pZXRmLm9yZy9yZmMvcmZjMjI3OS50eHRcclxuICAgICAgICAvLyBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMzYyOVxyXG4gICAgICAgIHZhciB1MCA9IGhlYXBPckFycmF5W2lkeCsrXTtcclxuICAgICAgICBpZiAoISh1MCAmIDB4ODApKSB7IHN0ciArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKHUwKTsgY29udGludWU7IH1cclxuICAgICAgICB2YXIgdTEgPSBoZWFwT3JBcnJheVtpZHgrK10gJiA2MztcclxuICAgICAgICBpZiAoKHUwICYgMHhFMCkgPT0gMHhDMCkgeyBzdHIgKz0gU3RyaW5nLmZyb21DaGFyQ29kZSgoKHUwICYgMzEpIDw8IDYpIHwgdTEpOyBjb250aW51ZTsgfVxyXG4gICAgICAgIHZhciB1MiA9IGhlYXBPckFycmF5W2lkeCsrXSAmIDYzO1xyXG4gICAgICAgIGlmICgodTAgJiAweEYwKSA9PSAweEUwKSB7XHJcbiAgICAgICAgICB1MCA9ICgodTAgJiAxNSkgPDwgMTIpIHwgKHUxIDw8IDYpIHwgdTI7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHUwID0gKCh1MCAmIDcpIDw8IDE4KSB8ICh1MSA8PCAxMikgfCAodTIgPDwgNikgfCAoaGVhcE9yQXJyYXlbaWR4KytdICYgNjMpO1xyXG4gICAgICAgIH1cclxuICBcclxuICAgICAgICBpZiAodTAgPCAweDEwMDAwKSB7XHJcbiAgICAgICAgICBzdHIgKz0gU3RyaW5nLmZyb21DaGFyQ29kZSh1MCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHZhciBjaCA9IHUwIC0gMHgxMDAwMDtcclxuICAgICAgICAgIHN0ciArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKDB4RDgwMCB8IChjaCA+PiAxMCksIDB4REMwMCB8IChjaCAmIDB4M0ZGKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBzdHI7XHJcbiAgICB9XHJcbiAgXHJcbiAgXHJcbiAgICAvKipcclxuICAgICAqIEdpdmVuIGEgcG9pbnRlciAncHRyJyB0byBhIG51bGwtdGVybWluYXRlZCBVVEY4LWVuY29kZWQgc3RyaW5nIGluIHRoZVxyXG4gICAgICogZW1zY3JpcHRlbiBIRUFQLCByZXR1cm5zIGEgY29weSBvZiB0aGF0IHN0cmluZyBhcyBhIEphdmFzY3JpcHQgU3RyaW5nIG9iamVjdC5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gcHRyXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcj19IG1heEJ5dGVzVG9SZWFkIC0gQW4gb3B0aW9uYWwgbGVuZ3RoIHRoYXQgc3BlY2lmaWVzIHRoZVxyXG4gICAgICogICBtYXhpbXVtIG51bWJlciBvZiBieXRlcyB0byByZWFkLiBZb3UgY2FuIG9taXQgdGhpcyBwYXJhbWV0ZXIgdG8gc2NhbiB0aGVcclxuICAgICAqICAgc3RyaW5nIHVudGlsIHRoZSBmaXJzdCBcdTAwMDAgYnl0ZS4gSWYgbWF4Qnl0ZXNUb1JlYWQgaXMgcGFzc2VkLCBhbmQgdGhlIHN0cmluZ1xyXG4gICAgICogICBhdCBbcHRyLCBwdHIrbWF4Qnl0ZXNUb1JlYWRyWyBjb250YWlucyBhIG51bGwgYnl0ZSBpbiB0aGUgbWlkZGxlLCB0aGVuIHRoZVxyXG4gICAgICogICBzdHJpbmcgd2lsbCBjdXQgc2hvcnQgYXQgdGhhdCBieXRlIGluZGV4IChpLmUuIG1heEJ5dGVzVG9SZWFkIHdpbGwgbm90XHJcbiAgICAgKiAgIHByb2R1Y2UgYSBzdHJpbmcgb2YgZXhhY3QgbGVuZ3RoIFtwdHIsIHB0cittYXhCeXRlc1RvUmVhZFspIE4uQi4gbWl4aW5nXHJcbiAgICAgKiAgIGZyZXF1ZW50IHVzZXMgb2YgVVRGOFRvU3RyaW5nKCkgd2l0aCBhbmQgd2l0aG91dCBtYXhCeXRlc1RvUmVhZCBtYXkgdGhyb3dcclxuICAgICAqICAgSlMgSklUIG9wdGltaXphdGlvbnMgb2ZmLCBzbyBpdCBpcyB3b3J0aCB0byBjb25zaWRlciBjb25zaXN0ZW50bHkgdXNpbmcgb25lXHJcbiAgICAgKiBAcmV0dXJuIHtzdHJpbmd9XHJcbiAgICAgKi9cclxuICBmdW5jdGlvbiBVVEY4VG9TdHJpbmcocHRyLCBtYXhCeXRlc1RvUmVhZCkge1xyXG4gICAgICByZXR1cm4gcHRyID8gVVRGOEFycmF5VG9TdHJpbmcoSEVBUFU4LCBwdHIsIG1heEJ5dGVzVG9SZWFkKSA6ICcnO1xyXG4gICAgfVxyXG4gIFxyXG4gICAgLyoqXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ3xudWxsPX0gcmV0dXJuVHlwZVxyXG4gICAgICogQHBhcmFtIHtBcnJheT19IGFyZ1R5cGVzXHJcbiAgICAgKiBAcGFyYW0ge0FyZ3VtZW50c3xBcnJheT19IGFyZ3NcclxuICAgICAqIEBwYXJhbSB7T2JqZWN0PX0gb3B0c1xyXG4gICAgICovXHJcbiAgZnVuY3Rpb24gY2NhbGwoaWRlbnQsIHJldHVyblR5cGUsIGFyZ1R5cGVzLCBhcmdzLCBvcHRzKSB7XHJcbiAgICAgIC8vIEZvciBmYXN0IGxvb2t1cCBvZiBjb252ZXJzaW9uIGZ1bmN0aW9uc1xyXG4gICAgICB2YXIgdG9DID0ge1xyXG4gICAgICAgICdzdHJpbmcnOiAoc3RyKSA9PiB7XHJcbiAgICAgICAgICB2YXIgcmV0ID0gMDtcclxuICAgICAgICAgIGlmIChzdHIgIT09IG51bGwgJiYgc3RyICE9PSB1bmRlZmluZWQgJiYgc3RyICE9PSAwKSB7IC8vIG51bGwgc3RyaW5nXHJcbiAgICAgICAgICAgIC8vIGF0IG1vc3QgNCBieXRlcyBwZXIgVVRGLTggY29kZSBwb2ludCwgKzEgZm9yIHRoZSB0cmFpbGluZyAnXFwwJ1xyXG4gICAgICAgICAgICByZXQgPSBzdHJpbmdUb1VURjhPblN0YWNrKHN0cik7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXR1cm4gcmV0O1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgJ2FycmF5JzogKGFycikgPT4ge1xyXG4gICAgICAgICAgdmFyIHJldCA9IHN0YWNrQWxsb2MoYXJyLmxlbmd0aCk7XHJcbiAgICAgICAgICB3cml0ZUFycmF5VG9NZW1vcnkoYXJyLCByZXQpO1xyXG4gICAgICAgICAgcmV0dXJuIHJldDtcclxuICAgICAgICB9XHJcbiAgICAgIH07XHJcbiAgXHJcbiAgICAgIGZ1bmN0aW9uIGNvbnZlcnRSZXR1cm5WYWx1ZShyZXQpIHtcclxuICAgICAgICBpZiAocmV0dXJuVHlwZSA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgIFxyXG4gICAgICAgICAgcmV0dXJuIFVURjhUb1N0cmluZyhyZXQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAocmV0dXJuVHlwZSA9PT0gJ2Jvb2xlYW4nKSByZXR1cm4gQm9vbGVhbihyZXQpO1xyXG4gICAgICAgIHJldHVybiByZXQ7XHJcbiAgICAgIH1cclxuICBcclxuICAgICAgdmFyIGZ1bmMgPSBnZXRDRnVuYyhpZGVudCk7XHJcbiAgICAgIHZhciBjQXJncyA9IFtdO1xyXG4gICAgICB2YXIgc3RhY2sgPSAwO1xyXG4gICAgICBpZiAoYXJncykge1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJncy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgdmFyIGNvbnZlcnRlciA9IHRvQ1thcmdUeXBlc1tpXV07XHJcbiAgICAgICAgICBpZiAoY29udmVydGVyKSB7XHJcbiAgICAgICAgICAgIGlmIChzdGFjayA9PT0gMCkgc3RhY2sgPSBzdGFja1NhdmUoKTtcclxuICAgICAgICAgICAgY0FyZ3NbaV0gPSBjb252ZXJ0ZXIoYXJnc1tpXSk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjQXJnc1tpXSA9IGFyZ3NbaV07XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHZhciByZXQgPSBmdW5jLmFwcGx5KG51bGwsIGNBcmdzKTtcclxuICAgICAgZnVuY3Rpb24gb25Eb25lKHJldCkge1xyXG4gICAgICAgIGlmIChzdGFjayAhPT0gMCkgc3RhY2tSZXN0b3JlKHN0YWNrKTtcclxuICAgICAgICByZXR1cm4gY29udmVydFJldHVyblZhbHVlKHJldCk7XHJcbiAgICAgIH1cclxuICBcclxuICAgICAgcmV0ID0gb25Eb25lKHJldCk7XHJcbiAgICAgIHJldHVybiByZXQ7XHJcbiAgICB9XHJcbiAgXHJcbiAgICAvKipcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nPX0gcmV0dXJuVHlwZVxyXG4gICAgICogQHBhcmFtIHtBcnJheT19IGFyZ1R5cGVzXHJcbiAgICAgKiBAcGFyYW0ge09iamVjdD19IG9wdHNcclxuICAgICAqL1xyXG4gIGZ1bmN0aW9uIGN3cmFwKGlkZW50LCByZXR1cm5UeXBlLCBhcmdUeXBlcywgb3B0cykge1xyXG4gICAgICAvLyBXaGVuIHRoZSBmdW5jdGlvbiB0YWtlcyBudW1iZXJzIGFuZCByZXR1cm5zIGEgbnVtYmVyLCB3ZSBjYW4ganVzdCByZXR1cm5cclxuICAgICAgLy8gdGhlIG9yaWdpbmFsIGZ1bmN0aW9uXHJcbiAgICAgIHZhciBudW1lcmljQXJncyA9ICFhcmdUeXBlcyB8fCBhcmdUeXBlcy5ldmVyeSgodHlwZSkgPT4gdHlwZSA9PT0gJ251bWJlcicgfHwgdHlwZSA9PT0gJ2Jvb2xlYW4nKTtcclxuICAgICAgdmFyIG51bWVyaWNSZXQgPSByZXR1cm5UeXBlICE9PSAnc3RyaW5nJztcclxuICAgICAgaWYgKG51bWVyaWNSZXQgJiYgbnVtZXJpY0FyZ3MgJiYgIW9wdHMpIHtcclxuICAgICAgICByZXR1cm4gZ2V0Q0Z1bmMoaWRlbnQpO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcclxuICAgICAgICByZXR1cm4gY2NhbGwoaWRlbnQsIHJldHVyblR5cGUsIGFyZ1R5cGVzLCBhcmd1bWVudHMsIG9wdHMpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG52YXIgd2FzbUltcG9ydHMgPSB7XHJcbiAgXCJfX2N4YV90aHJvd1wiOiBfX19jeGFfdGhyb3csXHJcbiAgXCJhYm9ydFwiOiBfYWJvcnQsXHJcbiAgXCJlbXNjcmlwdGVuX21lbWNweV9iaWdcIjogX2Vtc2NyaXB0ZW5fbWVtY3B5X2JpZyxcclxuICBcImVtc2NyaXB0ZW5fcmVzaXplX2hlYXBcIjogX2Vtc2NyaXB0ZW5fcmVzaXplX2hlYXBcclxufTtcclxudmFyIGFzbSA9IGNyZWF0ZVdhc20oKTtcclxuLyoqIEB0eXBlIHtmdW5jdGlvbiguLi4qKTo/fSAqL1xyXG52YXIgX19fd2FzbV9jYWxsX2N0b3JzID0gZnVuY3Rpb24oKSB7XHJcbiAgcmV0dXJuIChfX193YXNtX2NhbGxfY3RvcnMgPSBNb2R1bGVbXCJhc21cIl1bXCJfX3dhc21fY2FsbF9jdG9yc1wiXSkuYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcclxufTtcclxuXHJcbi8qKiBAdHlwZSB7ZnVuY3Rpb24oLi4uKik6P30gKi9cclxudmFyIF9kYnNjYW4gPSBNb2R1bGVbXCJfZGJzY2FuXCJdID0gZnVuY3Rpb24oKSB7XHJcbiAgcmV0dXJuIChfZGJzY2FuID0gTW9kdWxlW1wiX2Ric2NhblwiXSA9IE1vZHVsZVtcImFzbVwiXVtcImRic2NhblwiXSkuYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcclxufTtcclxuXHJcbi8qKiBAdHlwZSB7ZnVuY3Rpb24oLi4uKik6P30gKi9cclxudmFyIF9fX2Vycm5vX2xvY2F0aW9uID0gZnVuY3Rpb24oKSB7XHJcbiAgcmV0dXJuIChfX19lcnJub19sb2NhdGlvbiA9IE1vZHVsZVtcImFzbVwiXVtcIl9fZXJybm9fbG9jYXRpb25cIl0pLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XHJcbn07XHJcblxyXG4vKiogQHR5cGUge2Z1bmN0aW9uKC4uLiopOj99ICovXHJcbnZhciBfbWFsbG9jID0gTW9kdWxlW1wiX21hbGxvY1wiXSA9IGZ1bmN0aW9uKCkge1xyXG4gIHJldHVybiAoX21hbGxvYyA9IE1vZHVsZVtcIl9tYWxsb2NcIl0gPSBNb2R1bGVbXCJhc21cIl1bXCJtYWxsb2NcIl0pLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XHJcbn07XHJcblxyXG4vKiogQHR5cGUge2Z1bmN0aW9uKC4uLiopOj99ICovXHJcbnZhciBfZnJlZSA9IE1vZHVsZVtcIl9mcmVlXCJdID0gZnVuY3Rpb24oKSB7XHJcbiAgcmV0dXJuIChfZnJlZSA9IE1vZHVsZVtcIl9mcmVlXCJdID0gTW9kdWxlW1wiYXNtXCJdW1wiZnJlZVwiXSkuYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcclxufTtcclxuXHJcbi8qKiBAdHlwZSB7ZnVuY3Rpb24oLi4uKik6P30gKi9cclxudmFyIHN0YWNrU2F2ZSA9IGZ1bmN0aW9uKCkge1xyXG4gIHJldHVybiAoc3RhY2tTYXZlID0gTW9kdWxlW1wiYXNtXCJdW1wic3RhY2tTYXZlXCJdKS5hcHBseShudWxsLCBhcmd1bWVudHMpO1xyXG59O1xyXG5cclxuLyoqIEB0eXBlIHtmdW5jdGlvbiguLi4qKTo/fSAqL1xyXG52YXIgc3RhY2tSZXN0b3JlID0gZnVuY3Rpb24oKSB7XHJcbiAgcmV0dXJuIChzdGFja1Jlc3RvcmUgPSBNb2R1bGVbXCJhc21cIl1bXCJzdGFja1Jlc3RvcmVcIl0pLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XHJcbn07XHJcblxyXG4vKiogQHR5cGUge2Z1bmN0aW9uKC4uLiopOj99ICovXHJcbnZhciBzdGFja0FsbG9jID0gZnVuY3Rpb24oKSB7XHJcbiAgcmV0dXJuIChzdGFja0FsbG9jID0gTW9kdWxlW1wiYXNtXCJdW1wic3RhY2tBbGxvY1wiXSkuYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcclxufTtcclxuXHJcbi8qKiBAdHlwZSB7ZnVuY3Rpb24oLi4uKik6P30gKi9cclxudmFyIF9fX2N4YV9pc19wb2ludGVyX3R5cGUgPSBmdW5jdGlvbigpIHtcclxuICByZXR1cm4gKF9fX2N4YV9pc19wb2ludGVyX3R5cGUgPSBNb2R1bGVbXCJhc21cIl1bXCJfX2N4YV9pc19wb2ludGVyX3R5cGVcIl0pLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XHJcbn07XHJcblxyXG5cclxuXHJcbi8vIGluY2x1ZGU6IHBvc3RhbWJsZS5qc1xyXG4vLyA9PT0gQXV0by1nZW5lcmF0ZWQgcG9zdGFtYmxlIHNldHVwIGVudHJ5IHN0dWZmID09PVxyXG5cclxuTW9kdWxlW1wiY2NhbGxcIl0gPSBjY2FsbDtcclxuTW9kdWxlW1wiY3dyYXBcIl0gPSBjd3JhcDtcclxuXHJcblxyXG52YXIgY2FsbGVkUnVuO1xyXG5cclxuZGVwZW5kZW5jaWVzRnVsZmlsbGVkID0gZnVuY3Rpb24gcnVuQ2FsbGVyKCkge1xyXG4gIC8vIElmIHJ1biBoYXMgbmV2ZXIgYmVlbiBjYWxsZWQsIGFuZCB3ZSBzaG91bGQgY2FsbCBydW4gKElOVk9LRV9SVU4gaXMgdHJ1ZSwgYW5kIE1vZHVsZS5ub0luaXRpYWxSdW4gaXMgbm90IGZhbHNlKVxyXG4gIGlmICghY2FsbGVkUnVuKSBydW4oKTtcclxuICBpZiAoIWNhbGxlZFJ1bikgZGVwZW5kZW5jaWVzRnVsZmlsbGVkID0gcnVuQ2FsbGVyOyAvLyB0cnkgdGhpcyBhZ2FpbiBsYXRlciwgYWZ0ZXIgbmV3IGRlcHMgYXJlIGZ1bGZpbGxlZFxyXG59O1xyXG5cclxuZnVuY3Rpb24gcnVuKCkge1xyXG5cclxuICBpZiAocnVuRGVwZW5kZW5jaWVzID4gMCkge1xyXG4gICAgcmV0dXJuO1xyXG4gIH1cclxuXHJcbiAgcHJlUnVuKCk7XHJcblxyXG4gIC8vIGEgcHJlUnVuIGFkZGVkIGEgZGVwZW5kZW5jeSwgcnVuIHdpbGwgYmUgY2FsbGVkIGxhdGVyXHJcbiAgaWYgKHJ1bkRlcGVuZGVuY2llcyA+IDApIHtcclxuICAgIHJldHVybjtcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIGRvUnVuKCkge1xyXG4gICAgLy8gcnVuIG1heSBoYXZlIGp1c3QgYmVlbiBjYWxsZWQgdGhyb3VnaCBkZXBlbmRlbmNpZXMgYmVpbmcgZnVsZmlsbGVkIGp1c3QgaW4gdGhpcyB2ZXJ5IGZyYW1lLFxyXG4gICAgLy8gb3Igd2hpbGUgdGhlIGFzeW5jIHNldFN0YXR1cyB0aW1lIGJlbG93IHdhcyBoYXBwZW5pbmdcclxuICAgIGlmIChjYWxsZWRSdW4pIHJldHVybjtcclxuICAgIGNhbGxlZFJ1biA9IHRydWU7XHJcbiAgICBNb2R1bGVbJ2NhbGxlZFJ1biddID0gdHJ1ZTtcclxuXHJcbiAgICBpZiAoQUJPUlQpIHJldHVybjtcclxuXHJcbiAgICBpbml0UnVudGltZSgpO1xyXG5cclxuICAgIHJlYWR5UHJvbWlzZVJlc29sdmUoTW9kdWxlKTtcclxuICAgIGlmIChNb2R1bGVbJ29uUnVudGltZUluaXRpYWxpemVkJ10pIE1vZHVsZVsnb25SdW50aW1lSW5pdGlhbGl6ZWQnXSgpO1xyXG5cclxuICAgIHBvc3RSdW4oKTtcclxuICB9XHJcblxyXG4gIGlmIChNb2R1bGVbJ3NldFN0YXR1cyddKSB7XHJcbiAgICBNb2R1bGVbJ3NldFN0YXR1cyddKCdSdW5uaW5nLi4uJyk7XHJcbiAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xyXG4gICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIE1vZHVsZVsnc2V0U3RhdHVzJ10oJycpO1xyXG4gICAgICB9LCAxKTtcclxuICAgICAgZG9SdW4oKTtcclxuICAgIH0sIDEpO1xyXG4gIH0gZWxzZVxyXG4gIHtcclxuICAgIGRvUnVuKCk7XHJcbiAgfVxyXG59XHJcblxyXG5pZiAoTW9kdWxlWydwcmVJbml0J10pIHtcclxuICBpZiAodHlwZW9mIE1vZHVsZVsncHJlSW5pdCddID09ICdmdW5jdGlvbicpIE1vZHVsZVsncHJlSW5pdCddID0gW01vZHVsZVsncHJlSW5pdCddXTtcclxuICB3aGlsZSAoTW9kdWxlWydwcmVJbml0J10ubGVuZ3RoID4gMCkge1xyXG4gICAgTW9kdWxlWydwcmVJbml0J10ucG9wKCkoKTtcclxuICB9XHJcbn1cclxuXHJcbnJ1bigpO1xyXG5cclxuXHJcbi8vIGVuZCBpbmNsdWRlOiBwb3N0YW1ibGUuanNcclxuXHJcblxyXG4gIHJldHVybiBleHBvcnRDcHBEYnNjYW5MaWIucmVhZHlcclxufVxyXG5cclxuKTtcclxufSkoKTtcclxuaWYgKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlID09PSAnb2JqZWN0JylcclxuICBtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydENwcERic2NhbkxpYjtcclxuZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmVbJ2FtZCddKVxyXG4gIGRlZmluZShbXSwgZnVuY3Rpb24oKSB7IHJldHVybiBleHBvcnRDcHBEYnNjYW5MaWI7IH0pO1xyXG5lbHNlIGlmICh0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcpXHJcbiAgZXhwb3J0c1tcImV4cG9ydENwcERic2NhbkxpYlwiXSA9IGV4cG9ydENwcERic2NhbkxpYjtcclxuIiwiLy8gVGhlIG1vZHVsZSBjYWNoZVxudmFyIF9fd2VicGFja19tb2R1bGVfY2FjaGVfXyA9IHt9O1xuXG4vLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcblx0dmFyIGNhY2hlZE1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF07XG5cdGlmIChjYWNoZWRNb2R1bGUgIT09IHVuZGVmaW5lZCkge1xuXHRcdHJldHVybiBjYWNoZWRNb2R1bGUuZXhwb3J0cztcblx0fVxuXHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuXHR2YXIgbW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXSA9IHtcblx0XHRpZDogbW9kdWxlSWQsXG5cdFx0bG9hZGVkOiBmYWxzZSxcblx0XHRleHBvcnRzOiB7fVxuXHR9O1xuXG5cdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuXHRfX3dlYnBhY2tfbW9kdWxlc19fW21vZHVsZUlkXShtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuXHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG5cdG1vZHVsZS5sb2FkZWQgPSB0cnVlO1xuXG5cdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG5cdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbn1cblxuLy8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbl9fd2VicGFja19yZXF1aXJlX18ubSA9IF9fd2VicGFja19tb2R1bGVzX187XG5cbiIsIl9fd2VicGFja19yZXF1aXJlX18uYW1kTyA9IHt9OyIsIi8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb25zIGZvciBoYXJtb255IGV4cG9ydHNcbl9fd2VicGFja19yZXF1aXJlX18uZCA9IChleHBvcnRzLCBkZWZpbml0aW9uKSA9PiB7XG5cdGZvcih2YXIga2V5IGluIGRlZmluaXRpb24pIHtcblx0XHRpZihfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZGVmaW5pdGlvbiwga2V5KSAmJiAhX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIGtleSkpIHtcblx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBrZXksIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBkZWZpbml0aW9uW2tleV0gfSk7XG5cdFx0fVxuXHR9XG59OyIsIl9fd2VicGFja19yZXF1aXJlX18uZyA9IChmdW5jdGlvbigpIHtcblx0aWYgKHR5cGVvZiBnbG9iYWxUaGlzID09PSAnb2JqZWN0JykgcmV0dXJuIGdsb2JhbFRoaXM7XG5cdHRyeSB7XG5cdFx0cmV0dXJuIHRoaXMgfHwgbmV3IEZ1bmN0aW9uKCdyZXR1cm4gdGhpcycpKCk7XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHRpZiAodHlwZW9mIHdpbmRvdyA9PT0gJ29iamVjdCcpIHJldHVybiB3aW5kb3c7XG5cdH1cbn0pKCk7IiwiX193ZWJwYWNrX3JlcXVpcmVfXy5obWQgPSAobW9kdWxlKSA9PiB7XG5cdG1vZHVsZSA9IE9iamVjdC5jcmVhdGUobW9kdWxlKTtcblx0aWYgKCFtb2R1bGUuY2hpbGRyZW4pIG1vZHVsZS5jaGlsZHJlbiA9IFtdO1xuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkobW9kdWxlLCAnZXhwb3J0cycsIHtcblx0XHRlbnVtZXJhYmxlOiB0cnVlLFxuXHRcdHNldDogKCkgPT4ge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKCdFUyBNb2R1bGVzIG1heSBub3QgYXNzaWduIG1vZHVsZS5leHBvcnRzIG9yIGV4cG9ydHMuKiwgVXNlIEVTTSBleHBvcnQgc3ludGF4LCBpbnN0ZWFkOiAnICsgbW9kdWxlLmlkKTtcblx0XHR9XG5cdH0pO1xuXHRyZXR1cm4gbW9kdWxlO1xufTsiLCJfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSAob2JqLCBwcm9wKSA9PiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgcHJvcCkpIiwidmFyIHNjcmlwdFVybDtcbmlmIChfX3dlYnBhY2tfcmVxdWlyZV9fLmcuaW1wb3J0U2NyaXB0cykgc2NyaXB0VXJsID0gX193ZWJwYWNrX3JlcXVpcmVfXy5nLmxvY2F0aW9uICsgXCJcIjtcbnZhciBkb2N1bWVudCA9IF9fd2VicGFja19yZXF1aXJlX18uZy5kb2N1bWVudDtcbmlmICghc2NyaXB0VXJsICYmIGRvY3VtZW50KSB7XG5cdGlmIChkb2N1bWVudC5jdXJyZW50U2NyaXB0KVxuXHRcdHNjcmlwdFVybCA9IGRvY3VtZW50LmN1cnJlbnRTY3JpcHQuc3JjO1xuXHRpZiAoIXNjcmlwdFVybCkge1xuXHRcdHZhciBzY3JpcHRzID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJzY3JpcHRcIik7XG5cdFx0aWYoc2NyaXB0cy5sZW5ndGgpIHtcblx0XHRcdHZhciBpID0gc2NyaXB0cy5sZW5ndGggLSAxO1xuXHRcdFx0d2hpbGUgKGkgPiAtMSAmJiAhc2NyaXB0VXJsKSBzY3JpcHRVcmwgPSBzY3JpcHRzW2ktLV0uc3JjO1xuXHRcdH1cblx0fVxufVxuLy8gV2hlbiBzdXBwb3J0aW5nIGJyb3dzZXJzIHdoZXJlIGFuIGF1dG9tYXRpYyBwdWJsaWNQYXRoIGlzIG5vdCBzdXBwb3J0ZWQgeW91IG11c3Qgc3BlY2lmeSBhbiBvdXRwdXQucHVibGljUGF0aCBtYW51YWxseSB2aWEgY29uZmlndXJhdGlvblxuLy8gb3IgcGFzcyBhbiBlbXB0eSBzdHJpbmcgKFwiXCIpIGFuZCBzZXQgdGhlIF9fd2VicGFja19wdWJsaWNfcGF0aF9fIHZhcmlhYmxlIGZyb20geW91ciBjb2RlIHRvIHVzZSB5b3VyIG93biBsb2dpYy5cbmlmICghc2NyaXB0VXJsKSB0aHJvdyBuZXcgRXJyb3IoXCJBdXRvbWF0aWMgcHVibGljUGF0aCBpcyBub3Qgc3VwcG9ydGVkIGluIHRoaXMgYnJvd3NlclwiKTtcbnNjcmlwdFVybCA9IHNjcmlwdFVybC5yZXBsYWNlKC8jLiokLywgXCJcIikucmVwbGFjZSgvXFw/LiokLywgXCJcIikucmVwbGFjZSgvXFwvW15cXC9dKyQvLCBcIi9cIik7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBzY3JpcHRVcmw7IiwiX193ZWJwYWNrX3JlcXVpcmVfXy5iID0gc2VsZi5sb2NhdGlvbiArIFwiXCI7XG5cbi8vIG9iamVjdCB0byBzdG9yZSBsb2FkZWQgY2h1bmtzXG4vLyBcIjFcIiBtZWFucyBcImFscmVhZHkgbG9hZGVkXCJcbnZhciBpbnN0YWxsZWRDaHVua3MgPSB7XG5cdDc5NjogMVxufTtcblxuLy8gbm8gY2h1bmsgaW5zdGFsbCBmdW5jdGlvbiBuZWVkZWRcbi8vIG5vIGNodW5rIGxvYWRpbmdcblxuLy8gbm8gSE1SXG5cbi8vIG5vIEhNUiBtYW5pZmVzdCIsImltcG9ydCB7IGV4cG9ydENwcERic2NhbkxpYiB9IGZyb20gXCIuL3dhc21EYnNjYW4uanNcIjtcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGRic2NhbihlbWJlZFgsIGVtYmVkWSwgZXBzaWxvbiwgbWluUHRzKSB7XG4gICAgY29uc3Qgd2FzbVVybCA9IG5ldyBVUkwoJy4vd2FzbURic2Nhbi53YXNtJywgaW1wb3J0Lm1ldGEudXJsKS5ocmVmO1xuICAgIGNvbnN0IHdhc21QYXRoID0gd2FzbVVybC5zdWJzdHJpbmcoMCwgd2FzbVVybC5sYXN0SW5kZXhPZignLycpICsgMSkgKyAnd2FzbURic2Nhbi53YXNtJztcbiAgICBsZXQgd2FzbUluc3RhbmNlO1xuICAgIHRyeSB7XG4gICAgICAgIHdhc21JbnN0YW5jZSA9IGF3YWl0IGV4cG9ydENwcERic2NhbkxpYih7bG9jYXRlRmlsZTogKCkgPT4gd2FzbVVybCwgcHJpbnRFcnI6IChfKSA9PiB7fX0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHdhc21JbnN0YW5jZSA9IGF3YWl0IGV4cG9ydENwcERic2NhbkxpYih7bG9jYXRlRmlsZTogKCkgPT4gd2FzbVBhdGgsIHByaW50RXJyOiAoXykgPT4ge319KTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihlKTtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVW5hYmxlIHRvIGxvYWQgd2FzbSBmaWxlIGZvciBkYnNjYW4nKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBnZXREYnNjYW5XYXNtID1cbiAgICB3YXNtSW5zdGFuY2UuY3dyYXAoJ2Ric2NhbicsICdudWxsJywgWydudW1iZXInLCAnbnVtYmVyJywgJ251bWJlcicsICdudW1iZXInLCAnbnVtYmVyJywgJ251bWJlciddKTtcbiAgICBjb25zdCBieXRlc0ZvckVtYmVkWCA9IEZsb2F0MzJBcnJheS5CWVRFU19QRVJfRUxFTUVOVCAqIGVtYmVkWC5sZW5ndGg7XG4gICAgY29uc3QgZGF0YVB0clggPSB3YXNtSW5zdGFuY2UuX21hbGxvYyhieXRlc0ZvckVtYmVkWCk7IC8vIGFsbG9jYXRlIGEgbWVtb3J5IGJsb2NrIG9uIHRoZSB3YXNtIGhlYXAgZm9yIHRoZSBlbWJlZFhcbiAgICBjb25zdCBkYXRhUHRyWSA9IHdhc21JbnN0YW5jZS5fbWFsbG9jKGJ5dGVzRm9yRW1iZWRYKTsgLy8gYWxsb2NhdGUgYSBtZW1vcnkgYmxvY2sgb24gdGhlIHdhc20gaGVhcCBmb3IgdGhlIGVtYmVkWVxuICAgIGNvbnN0IHhIZWFwID0gbmV3IFVpbnQ4QXJyYXkod2FzbUluc3RhbmNlLkhFQVBVOC5idWZmZXIsIGRhdGFQdHJYLCBieXRlc0ZvckVtYmVkWCk7XG4gICAgeEhlYXAuc2V0KG5ldyBVaW50OEFycmF5KGVtYmVkWC5idWZmZXIpKTsgLy8gY29weSBlbWJlZFggdG8gdGhlIHdhc20gaGVhcFxuICAgIGNvbnN0IHlIZWFwID0gbmV3IFVpbnQ4QXJyYXkod2FzbUluc3RhbmNlLkhFQVBVOC5idWZmZXIsIGRhdGFQdHJZLCBieXRlc0ZvckVtYmVkWCk7XG4gICAgeUhlYXAuc2V0KG5ldyBVaW50OEFycmF5KGVtYmVkWS5idWZmZXIpKTsgLy8gY29weSBlbWJlZFkgdG8gdGhlIHdhc20gaGVhcFxuICAgIFxuICAgIGNvbnN0IGNsdXN0ZXJQdHIgPSB3YXNtSW5zdGFuY2UuX21hbGxvYyhieXRlc0ZvckVtYmVkWCk7XG4gICAgY29uc3QgY2x1c3RlckhlYXAgPSBuZXcgVWludDhBcnJheSh3YXNtSW5zdGFuY2UuSEVBUFU4LmJ1ZmZlciwgY2x1c3RlclB0ciwgYnl0ZXNGb3JFbWJlZFgpO1xuXG4gICAgZ2V0RGJzY2FuV2FzbShkYXRhUHRyWCwgZGF0YVB0clksIGVtYmVkWC5sZW5ndGgsIGVwc2lsb24sIG1pblB0cywgY2x1c3RlclB0cik7XG4gICAgY29uc3QgY2x1c3RlclJlc3VsdCA9IG5ldyBJbnQzMkFycmF5KGNsdXN0ZXJIZWFwLmJ1ZmZlciwgY2x1c3RlckhlYXAuYnl0ZU9mZnNldCwgZW1iZWRYLmxlbmd0aCk7XG4gICAgd2FzbUluc3RhbmNlLl9mcmVlKHhIZWFwLmJ5dGVPZmZzZXQpO1xuICAgIHdhc21JbnN0YW5jZS5fZnJlZSh5SGVhcC5ieXRlT2Zmc2V0KTtcbiAgICB3YXNtSW5zdGFuY2UuX2ZyZWUoY2x1c3RlckhlYXAuYnl0ZU9mZnNldCk7XG4gICAgcmV0dXJuIGNsdXN0ZXJSZXN1bHQ7XG59Il0sIm5hbWVzIjpbIl9fYXdhaXRlciIsIl9zY3JpcHREaXIiLCJleHBvcnRDcHBEYnNjYW5MaWIiLCJkb2N1bWVudCIsImN1cnJlbnRTY3JpcHQiLCJzcmMiLCJ1bmRlZmluZWQiLCJyZWFkeVByb21pc2VSZXNvbHZlIiwicmVhZHlQcm9taXNlUmVqZWN0IiwiTW9kdWxlIiwiUHJvbWlzZSIsInJlc29sdmUiLCJyZWplY3QiLCJyZWFkQmluYXJ5IiwibW9kdWxlT3ZlcnJpZGVzIiwiT2JqZWN0IiwiYXNzaWduIiwiRU5WSVJPTk1FTlRfSVNfV0VCIiwid2luZG93IiwiRU5WSVJPTk1FTlRfSVNfV09SS0VSIiwiaW1wb3J0U2NyaXB0cyIsInNjcmlwdERpcmVjdG9yeSIsInByb2Nlc3MiLCJ2ZXJzaW9ucyIsIm5vZGUiLCJzZWxmIiwibG9jYXRpb24iLCJocmVmIiwiaW5kZXhPZiIsInN1YnN0ciIsInJlcGxhY2UiLCJsYXN0SW5kZXhPZiIsInVybCIsInhociIsIlhNTEh0dHBSZXF1ZXN0Iiwib3BlbiIsInJlc3BvbnNlVHlwZSIsInNlbmQiLCJVaW50OEFycmF5IiwiY29uc29sZSIsImxvZyIsImJpbmQiLCJ3YXNtQmluYXJ5Iiwid2FzbU1lbW9yeSIsImVyciIsIndhcm4iLCJXZWJBc3NlbWJseSIsImFib3J0IiwiSEVBUDgiLCJIRUFQVTgiLCJIRUFQVTMyIiwiQUJPUlQiLCJ1cGRhdGVNZW1vcnlWaWV3cyIsImIiLCJidWZmZXIiLCJJbnQ4QXJyYXkiLCJJbnQxNkFycmF5IiwiSW50MzJBcnJheSIsIlVpbnQxNkFycmF5IiwiVWludDMyQXJyYXkiLCJGbG9hdDMyQXJyYXkiLCJGbG9hdDY0QXJyYXkiLCJfX0FUUFJFUlVOX18iLCJfX0FUSU5JVF9fIiwiX19BVFBPU1RSVU5fXyIsInJ1bkRlcGVuZGVuY2llcyIsInJ1bkRlcGVuZGVuY3lXYXRjaGVyIiwiZGVwZW5kZW5jaWVzRnVsZmlsbGVkIiwid2hhdCIsImUiLCJSdW50aW1lRXJyb3IiLCJ3YXNtQmluYXJ5RmlsZSIsInBhdGgiLCJpc0RhdGFVUkkiLCJmaWxlbmFtZSIsInN0YXJ0c1dpdGgiLCJnZXRCaW5hcnkiLCJmaWxlIiwiaW5zdGFudGlhdGVBcnJheUJ1ZmZlciIsImJpbmFyeUZpbGUiLCJpbXBvcnRzIiwicmVjZWl2ZXIiLCJmZXRjaCIsInRoZW4iLCJjcmVkZW50aWFscyIsInJlc3BvbnNlIiwiY2F0Y2giLCJnZXRCaW5hcnlQcm9taXNlIiwiYmluYXJ5IiwiaW5zdGFudGlhdGUiLCJpbnN0YW5jZSIsInJlYXNvbiIsImNhbGxSdW50aW1lQ2FsbGJhY2tzIiwiY2FsbGJhY2tzIiwibGVuZ3RoIiwic2hpZnQiLCJFeGNlcHRpb25JbmZvIiwiZXhjUHRyIiwidGhpcyIsInB0ciIsInNldF90eXBlIiwidHlwZSIsImdldF90eXBlIiwic2V0X2Rlc3RydWN0b3IiLCJkZXN0cnVjdG9yIiwiZ2V0X2Rlc3RydWN0b3IiLCJzZXRfY2F1Z2h0IiwiY2F1Z2h0IiwiZ2V0X2NhdWdodCIsInNldF9yZXRocm93biIsInJldGhyb3duIiwiZ2V0X3JldGhyb3duIiwiaW5pdCIsInNldF9hZGp1c3RlZF9wdHIiLCJhZGp1c3RlZFB0ciIsImdldF9hZGp1c3RlZF9wdHIiLCJnZXRfZXhjZXB0aW9uX3B0ciIsIl9fX2N4YV9pc19wb2ludGVyX3R5cGUiLCJhZGp1c3RlZCIsImVtc2NyaXB0ZW5fcmVhbGxvY19idWZmZXIiLCJzaXplIiwiZ3JvdyIsImJ5dGVMZW5ndGgiLCJnZXRDRnVuYyIsImlkZW50IiwiVVRGOERlY29kZXIiLCJUZXh0RGVjb2RlciIsImNjYWxsIiwicmV0dXJuVHlwZSIsImFyZ1R5cGVzIiwiYXJncyIsIm9wdHMiLCJ0b0MiLCJzdHIiLCJyZXQiLCJsZW4iLCJpIiwiYyIsImNoYXJDb2RlQXQiLCJsZW5ndGhCeXRlc1VURjgiLCJzdGFja0FsbG9jIiwib3V0UHRyIiwibWF4Qnl0ZXNUb1dyaXRlIiwiaGVhcCIsIm91dElkeCIsImVuZElkeCIsInUiLCJzdHJpbmdUb1VURjhBcnJheSIsInN0cmluZ1RvVVRGOCIsInN0cmluZ1RvVVRGOE9uU3RhY2siLCJhcnIiLCJhcnJheSIsInNldCIsImZ1bmMiLCJjQXJncyIsInN0YWNrIiwiY29udmVydGVyIiwic3RhY2tTYXZlIiwiYXBwbHkiLCJzdGFja1Jlc3RvcmUiLCJoZWFwT3JBcnJheSIsImlkeCIsIm1heEJ5dGVzVG9SZWFkIiwiZW5kUHRyIiwiZGVjb2RlIiwic3ViYXJyYXkiLCJ1MCIsInUxIiwidTIiLCJTdHJpbmciLCJmcm9tQ2hhckNvZGUiLCJjaCIsIlVURjhBcnJheVRvU3RyaW5nIiwiQm9vbGVhbiIsImNvbnZlcnRSZXR1cm5WYWx1ZSIsIm9uRG9uZSIsImNhbGxlZFJ1biIsIndhc21JbXBvcnRzIiwiZGVzdCIsIm51bSIsImNvcHlXaXRoaW4iLCJyZXF1ZXN0ZWRTaXplIiwieCIsIm9sZFNpemUiLCJtYXhIZWFwU2l6ZSIsImN1dERvd24iLCJvdmVyR3Jvd25IZWFwU2l6ZSIsIk1hdGgiLCJtaW4iLCJtYXgiLCJjYWxsYmFjayIsImluZm8iLCJyZWNlaXZlSW5zdGFuY2UiLCJtb2R1bGUiLCJjYiIsImV4cG9ydHMiLCJ1bnNoaWZ0IiwiaWQiLCJjbGVhckludGVydmFsIiwicmVtb3ZlUnVuRGVwZW5kZW5jeSIsInJlc3VsdCIsImluc3RhbnRpYXRlU3RyZWFtaW5nIiwiY3JlYXRlV2FzbSIsImFyZ3VtZW50cyIsInJ1biIsImRvUnVuIiwicG9zdFJ1biIsInByZVJ1biIsInNldFRpbWVvdXQiLCJudW1lcmljQXJncyIsImV2ZXJ5IiwicnVuQ2FsbGVyIiwicG9wIiwicmVhZHkiLCJkZWZpbmUiLCJfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX18iLCJfX3dlYnBhY2tfcmVxdWlyZV9fIiwibW9kdWxlSWQiLCJjYWNoZWRNb2R1bGUiLCJsb2FkZWQiLCJfX3dlYnBhY2tfbW9kdWxlc19fIiwibSIsImFtZE8iLCJkIiwiZGVmaW5pdGlvbiIsImtleSIsIm8iLCJkZWZpbmVQcm9wZXJ0eSIsImVudW1lcmFibGUiLCJnZXQiLCJnIiwiZ2xvYmFsVGhpcyIsIkZ1bmN0aW9uIiwiaG1kIiwiY3JlYXRlIiwiY2hpbGRyZW4iLCJFcnJvciIsIm9iaiIsInByb3AiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJzY3JpcHRVcmwiLCJzY3JpcHRzIiwiZ2V0RWxlbWVudHNCeVRhZ05hbWUiLCJwIiwidGhpc0FyZyIsIl9hcmd1bWVudHMiLCJQIiwiZ2VuZXJhdG9yIiwiZnVsZmlsbGVkIiwidmFsdWUiLCJzdGVwIiwibmV4dCIsInJlamVjdGVkIiwiZG9uZSIsIm9ubWVzc2FnZSIsImV2ZW50IiwiZW1iZWRYIiwiZW1iZWRZIiwiZXBzaWxvbiIsIm1pblB0cyIsImRhdGEiLCJjbHVzdGVycyIsImFzeW5jIiwid2FzbVVybCIsIlVSTCIsIndhc21QYXRoIiwic3Vic3RyaW5nIiwid2FzbUluc3RhbmNlIiwibG9jYXRlRmlsZSIsInByaW50RXJyIiwiXyIsImVycm9yIiwiZ2V0RGJzY2FuV2FzbSIsImN3cmFwIiwiYnl0ZXNGb3JFbWJlZFgiLCJCWVRFU19QRVJfRUxFTUVOVCIsImRhdGFQdHJYIiwiX21hbGxvYyIsImRhdGFQdHJZIiwieEhlYXAiLCJ5SGVhcCIsImNsdXN0ZXJQdHIiLCJjbHVzdGVySGVhcCIsImNsdXN0ZXJSZXN1bHQiLCJieXRlT2Zmc2V0IiwiX2ZyZWUiLCJkYnNjYW4iLCJwb3N0TWVzc2FnZSJdLCJzb3VyY2VSb290IjoiIn0=
Binary file
Binary file