@datagrok/eda 1.1.21 → 1.1.22
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/CHANGELOG.md +4 -0
- package/dist/231.js +2 -0
- package/dist/36.js +2 -2
- package/dist/package-test.js +2 -2
- package/dist/package.js +1 -1
- package/package.json +3 -3
- package/dist/246.js +0 -2
package/dist/package.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
var eda;(()=>{var t={7905:(t,n,e)=>{"use strict";t=e.hmd(t);var r,o=(r="undefined"!=typeof document&&document.currentScript?document.currentScript.src:void 0,function(t={}){var n,e,o=void 0!==t?t:{};o.ready=new Promise((function(t,r){n=t,e=r}));var i,s=Object.assign({},o),a="object"==typeof window,u="function"==typeof importScripts,l=("object"==typeof process&&"object"==typeof process.versions&&process.versions.node,"");(a||u)&&(u?l=self.location.href:"undefined"!=typeof document&&document.currentScript&&(l=document.currentScript.src),r&&(l=r),l=0!==l.indexOf("blob:")?l.substr(0,l.replace(/[?#].*/,"").lastIndexOf("/")+1):"",u&&(i=t=>{var n=new XMLHttpRequest;return n.open("GET",t,!1),n.responseType="arraybuffer",n.send(null),new Uint8Array(n.response)})),o.print||console.log.bind(console);var c,f,h=o.printErr||console.warn.bind(console);Object.assign(o,s),s=null,o.arguments&&o.arguments,o.thisProgram&&o.thisProgram,o.quit&&o.quit,o.wasmBinary&&(c=o.wasmBinary),o.noExitRuntime,"object"!=typeof WebAssembly&&C("no native wasm support detected");var m,d,p,g=!1;function v(){var t=f.buffer;o.HEAP8=m=new Int8Array(t),o.HEAP16=new Int16Array(t),o.HEAP32=new Int32Array(t),o.HEAPU8=d=new Uint8Array(t),o.HEAPU16=new Uint16Array(t),o.HEAPU32=p=new Uint32Array(t),o.HEAPF32=new Float32Array(t),o.HEAPF64=new Float64Array(t)}var y=[],w=[],E=[],A=0,_=null,I=null;function C(t){o.onAbort&&o.onAbort(t),h(t="Aborted("+t+")"),g=!0,t+=". Build with -sASSERTIONS for more info.";var n=new WebAssembly.RuntimeError(t);throw e(n),n}var N,b;function S(t){return t.startsWith("data:application/octet-stream;base64,")}function M(t){try{if(t==N&&c)return new Uint8Array(c);if(i)return i(t);throw"both async and sync fetching of the wasm failed"}catch(t){C(t)}}function T(t,n,e){return function(t){return c||!a&&!u||"function"!=typeof fetch?Promise.resolve().then((function(){return M(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 M(t)}))}(t).then((function(t){return WebAssembly.instantiate(t,n)})).then((function(t){return t})).then(e,(function(t){h("failed to asynchronously prepare wasm: "+t),C(t)}))}function O(t){for(;t.length>0;)t.shift()(o)}function P(t){this.excPtr=t,this.ptr=t-24,this.set_type=function(t){p[this.ptr+4>>2]=t},this.get_type=function(){return p[this.ptr+4>>2]},this.set_destructor=function(t){p[this.ptr+8>>2]=t},this.get_destructor=function(){return p[this.ptr+8>>2]},this.set_caught=function(t){t=t?1:0,m[this.ptr+12>>0]=t},this.get_caught=function(){return 0!=m[this.ptr+12>>0]},this.set_rethrown=function(t){t=t?1:0,m[this.ptr+13>>0]=t},this.get_rethrown=function(){return 0!=m[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){p[this.ptr+16>>2]=t},this.get_adjusted_ptr=function(){return p[this.ptr+16>>2]},this.get_exception_ptr=function(){if(G(this.get_type()))return p[this.excPtr>>2];var t=this.get_adjusted_ptr();return 0!==t?t:this.excPtr}}function x(t){var n=f.buffer;try{return f.grow(t-n.byteLength+65535>>>16),v(),1}catch(t){}}function L(t){return o["_"+t]}S(N="wasmDbscan.wasm")||(b=N,N=o.locateFile?o.locateFile(b,l):l+b);var R="undefined"!=typeof TextDecoder?new TextDecoder("utf8"):void 0;function F(t,n,e,r,o){var i={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=V(n);return function(t,n,e){!function(t,n,e,r){if(!(r>0))return 0;for(var o=e+r-1,i=0;i<t.length;++i){var s=t.charCodeAt(i);if(s>=55296&&s<=57343&&(s=65536+((1023&s)<<10)|1023&t.charCodeAt(++i)),s<=127){if(e>=o)break;n[e++]=s}else if(s<=2047){if(e+1>=o)break;n[e++]=192|s>>6,n[e++]=128|63&s}else if(s<=65535){if(e+2>=o)break;n[e++]=224|s>>12,n[e++]=128|s>>6&63,n[e++]=128|63&s}else{if(e+3>=o)break;n[e++]=240|s>>18,n[e++]=128|s>>12&63,n[e++]=128|s>>6&63,n[e++]=128|63&s}}n[e]=0}(t,d,n,e)}(t,e,n),e}(t)),n},array:t=>{var n,e,r=V(t.length);return n=t,e=r,m.set(n,e),r}},s=L(t),a=[],u=0;if(r)for(var l=0;l<r.length;l++){var c=i[e[l]];c?(0===u&&(u=k()),a[l]=c(r[l])):a[l]=r[l]}var f=s.apply(null,a);return function(t){return 0!==u&&B(u),function(t){return"string"===n?(e=t)?function(t,n,e){for(var r=n+e,o=n;t[o]&&!(o>=r);)++o;if(o-n>16&&t.buffer&&R)return R.decode(t.subarray(n,o));for(var i="";n<o;){var s=t[n++];if(128&s){var a=63&t[n++];if(192!=(224&s)){var u=63&t[n++];if((s=224==(240&s)?(15&s)<<12|a<<6|u:(7&s)<<18|a<<12|u<<6|63&t[n++])<65536)i+=String.fromCharCode(s);else{var l=s-65536;i+=String.fromCharCode(55296|l>>10,56320|1023&l)}}else i+=String.fromCharCode((31&s)<<6|a)}else i+=String.fromCharCode(s)}return i}(d,e,r):"":"boolean"===n?Boolean(t):t;var e,r}(t)}(f)}var U,D={__cxa_throw:function(t,n,e){throw new P(t).init(n,e),t},abort:function(){C("")},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 o=1;o<=4;o*=2){var i=e*(1+.2/o);if(i=Math.min(i,t+100663296),x(Math.min(r,(n=Math.max(t,i))+(65536-n%65536)%65536)))return!0}return!1}},k=(function(){var t,n,r,i,s={env:D,wasi_snapshot_preview1:D};function a(t,n){var e,r=t.exports;return o.asm=r,f=o.asm.memory,v(),o.asm.__indirect_function_table,e=o.asm.__wasm_call_ctors,w.unshift(e),function(t){if(A--,o.monitorRunDependencies&&o.monitorRunDependencies(A),0==A&&(null!==_&&(clearInterval(_),_=null),I)){var n=I;I=null,n()}}(),r}if(A++,o.monitorRunDependencies&&o.monitorRunDependencies(A),o.instantiateWasm)try{return o.instantiateWasm(s,a)}catch(t){h("Module.instantiateWasm callback failed with error: "+t),e(t)}(t=c,n=N,r=s,i=function(t){a(t.instance)},t||"function"!=typeof WebAssembly.instantiateStreaming||S(n)||"function"!=typeof fetch?T(n,r,i):fetch(n,{credentials:"same-origin"}).then((function(t){return WebAssembly.instantiateStreaming(t,r).then(i,(function(t){return h("wasm streaming compile failed: "+t),h("falling back to ArrayBuffer instantiation"),T(n,r,i)}))}))).catch(e)}(),o._dbscan=function(){return(o._dbscan=o.asm.dbscan).apply(null,arguments)},o._malloc=function(){return(o._malloc=o.asm.malloc).apply(null,arguments)},o._free=function(){return(o._free=o.asm.free).apply(null,arguments)},function(){return(k=o.asm.stackSave).apply(null,arguments)}),B=function(){return(B=o.asm.stackRestore).apply(null,arguments)},V=function(){return(V=o.asm.stackAlloc).apply(null,arguments)},G=function(){return(G=o.asm.__cxa_is_pointer_type).apply(null,arguments)};function q(){function t(){U||(U=!0,o.calledRun=!0,g||(O(w),n(o),o.onRuntimeInitialized&&o.onRuntimeInitialized(),function(){if(o.postRun)for("function"==typeof o.postRun&&(o.postRun=[o.postRun]);o.postRun.length;)t=o.postRun.shift(),E.unshift(t);var t;O(E)}()))}A>0||(function(){if(o.preRun)for("function"==typeof o.preRun&&(o.preRun=[o.preRun]);o.preRun.length;)t=o.preRun.shift(),y.unshift(t);var t;O(y)}(),A>0||(o.setStatus?(o.setStatus("Running..."),setTimeout((function(){setTimeout((function(){o.setStatus("")}),1),t()}),1)):t()))}if(o.ccall=F,o.cwrap=function(t,n,e,r){var o=!e||e.every((t=>"number"===t||"boolean"===t));return"string"!==n&&o&&!r?L(t):function(){return F(t,n,e,arguments)}},I=function t(){U||q(),U||(I=t)},o.preInit)for("function"==typeof o.preInit&&(o.preInit=[o.preInit]);o.preInit.length>0;)o.preInit.pop()();return q(),t.ready});"object"==typeof exports?t.exports=o:"function"==typeof define&&e.amdO?define([],(function(){return o})):"object"==typeof exports&&(exports.exportCppDbscanLib=o)},9414:(t,n,e)=>{"use strict";e.d(n,{Z:()=>a});var r=e(7537),o=e.n(r),i=e(3645),s=e.n(i)()(o());s.push([t.id,".scatter_plot_link {\n position: absolute!important;\n right: 10px;\n}\n\n.cliffs_grid {\n top: 10px;\n}\n\n.show_only_cliffs {\n top: 30px;\n}\n\n.ml-dim-reduction-settings-input i.grok-icon.grok-font-icon-settings {\n font-size: 18px;\n position: absolute;\n height: 28px;\n}\n\n.ml-dim-reduction-column-editor-input-root label {\n display: none !important;\n}\n\n.ml-dim-reduction-column-editor-input-root input, .ml-dim-reduction-column-editor-input-root select {\n margin-left: 20px !important;\n}\n\nh3.ml-dim-reduction-column-editor-input-root {\n margin: 0 !important;\n}\n\n.ml-dim-reduction-column-editor-root, .ml-dim-reduction-column-editor-header-root {\n display: flex;\n flex-direction: row;\n align-items: center;\n margin-bottom: 10px !important;\n width: 600px !important;\n}\n\n.ml-dim-reduction-column-editor-column-title {\n text-overflow: ellipsis;\n overflow: hidden;\n}\n\n.ml-dim-reduction-column-editor-header-root > h1:not(:first-child) {\n margin-left: 20px !important;\n}","",{version:3,sources:["webpack://./node_modules/@datagrok-libraries/ml/css/styles.css"],names:[],mappings:"AAAA;IACI,4BAA4B;IAC5B,WAAW;AACf;;AAEA;IACI,SAAS;AACb;;AAEA;IACI,SAAS;AACb;;AAEA;IACI,eAAe;IACf,kBAAkB;IAClB,YAAY;AAChB;;AAEA;IACI,wBAAwB;AAC5B;;AAEA;IACI,4BAA4B;AAChC;;AAEA;IACI,oBAAoB;AACxB;;AAEA;IACI,aAAa;IACb,mBAAmB;IACnB,mBAAmB;IACnB,8BAA8B;IAC9B,uBAAuB;AAC3B;;AAEA;IACI,uBAAuB;IACvB,gBAAgB;AACpB;;AAEA;IACI,4BAA4B;AAChC",sourcesContent:[".scatter_plot_link {\n position: absolute!important;\n right: 10px;\n}\n\n.cliffs_grid {\n top: 10px;\n}\n\n.show_only_cliffs {\n top: 30px;\n}\n\n.ml-dim-reduction-settings-input i.grok-icon.grok-font-icon-settings {\n font-size: 18px;\n position: absolute;\n height: 28px;\n}\n\n.ml-dim-reduction-column-editor-input-root label {\n display: none !important;\n}\n\n.ml-dim-reduction-column-editor-input-root input, .ml-dim-reduction-column-editor-input-root select {\n margin-left: 20px !important;\n}\n\nh3.ml-dim-reduction-column-editor-input-root {\n margin: 0 !important;\n}\n\n.ml-dim-reduction-column-editor-root, .ml-dim-reduction-column-editor-header-root {\n display: flex;\n flex-direction: row;\n align-items: center;\n margin-bottom: 10px !important;\n width: 600px !important;\n}\n\n.ml-dim-reduction-column-editor-column-title {\n text-overflow: ellipsis;\n overflow: hidden;\n}\n\n.ml-dim-reduction-column-editor-header-root > h1:not(:first-child) {\n margin-left: 20px !important;\n}"],sourceRoot:""}]);const a=s},3645:t=>{"use strict";t.exports=function(t){var n=[];return n.toString=function(){return this.map((function(n){var e="",r=void 0!==n[5];return n[4]&&(e+="@supports (".concat(n[4],") {")),n[2]&&(e+="@media ".concat(n[2]," {")),r&&(e+="@layer".concat(n[5].length>0?" ".concat(n[5]):""," {")),e+=t(n),r&&(e+="}"),n[2]&&(e+="}"),n[4]&&(e+="}"),e})).join("")},n.i=function(t,e,r,o,i){"string"==typeof t&&(t=[[null,t,void 0]]);var s={};if(r)for(var a=0;a<this.length;a++){var u=this[a][0];null!=u&&(s[u]=!0)}for(var l=0;l<t.length;l++){var c=[].concat(t[l]);r&&s[c[0]]||(void 0!==i&&(void 0===c[5]||(c[1]="@layer".concat(c[5].length>0?" ".concat(c[5]):""," {").concat(c[1],"}")),c[5]=i),e&&(c[2]?(c[1]="@media ".concat(c[2]," {").concat(c[1],"}"),c[2]=e):c[2]=e),o&&(c[4]?(c[1]="@supports (".concat(c[4],") {").concat(c[1],"}"),c[4]=o):c[4]="".concat(o)),n.push(c))}},n}},7537:t=>{"use strict";t.exports=function(t){var n=t[1],e=t[3];if(!e)return n;if("function"==typeof btoa){var r=btoa(unescape(encodeURIComponent(JSON.stringify(e)))),o="sourceMappingURL=data:application/json;charset=utf-8;base64,".concat(r),i="/*# ".concat(o," */");return[n].concat([i]).join("\n")}return[n].join("\n")}},2162:function(t){var n;t.exports=(n=function(t,n){var e=Array.prototype.concat,r=Array.prototype.slice,o=Object.prototype.toString;function i(n,e){var r=n>e?n:e;return t.pow(10,17-~~(t.log(r>0?r:-r)*t.LOG10E))}var s=Array.isArray||function(t){return"[object Array]"===o.call(t)};function a(t){return"[object Function]"===o.call(t)}function u(t){return"number"==typeof t&&t-t==0}function l(){return new l._init(arguments)}function c(){return 0}function f(){return 1}function h(t,n){return t===n?1:0}l.fn=l.prototype,l._init=function(t){if(s(t[0]))if(s(t[0][0])){a(t[1])&&(t[0]=l.map(t[0],t[1]));for(var n=0;n<t[0].length;n++)this[n]=t[0][n];this.length=t[0].length}else this[0]=a(t[1])?l.map(t[0],t[1]):t[0],this.length=1;else if(u(t[0]))this[0]=l.seq.apply(null,t),this.length=1;else{if(t[0]instanceof l)return l(t[0].toArray());this[0]=[],this.length=1}return this},l._init.prototype=l.prototype,l._init.constructor=l,l.utils={calcRdx:i,isArray:s,isFunction:a,isNumber:u,toVector:function(t){return e.apply([],t)}},l._random_fn=t.random,l.setRandom=function(t){if("function"!=typeof t)throw new TypeError("fn is not a function");l._random_fn=t},l.extend=function(t){var n,e;if(1===arguments.length){for(e in t)l[e]=t[e];return this}for(n=1;n<arguments.length;n++)for(e in arguments[n])t[e]=arguments[n][e];return t},l.rows=function(t){return t.length||1},l.cols=function(t){return t[0].length||1},l.dimensions=function(t){return{rows:l.rows(t),cols:l.cols(t)}},l.row=function(t,n){return s(n)?n.map((function(n){return l.row(t,n)})):t[n]},l.rowa=function(t,n){return l.row(t,n)},l.col=function(t,n){if(s(n)){var e=l.arange(t.length).map((function(){return new Array(n.length)}));return n.forEach((function(n,r){l.arange(t.length).forEach((function(o){e[o][r]=t[o][n]}))})),e}for(var r=new Array(t.length),o=0;o<t.length;o++)r[o]=[t[o][n]];return r},l.cola=function(t,n){return l.col(t,n).map((function(t){return t[0]}))},l.diag=function(t){for(var n=l.rows(t),e=new Array(n),r=0;r<n;r++)e[r]=[t[r][r]];return e},l.antidiag=function(t){for(var n=l.rows(t)-1,e=new Array(n),r=0;n>=0;n--,r++)e[r]=[t[r][n]];return e},l.transpose=function(t){var n,e,r,o,i,a=[];for(s(t[0])||(t=[t]),e=t.length,r=t[0].length,i=0;i<r;i++){for(n=new Array(e),o=0;o<e;o++)n[o]=t[o][i];a.push(n)}return 1===a.length?a[0]:a},l.map=function(t,n,e){var r,o,i,a,u;for(s(t[0])||(t=[t]),o=t.length,i=t[0].length,a=e?t:new Array(o),r=0;r<o;r++)for(a[r]||(a[r]=new Array(i)),u=0;u<i;u++)a[r][u]=n(t[r][u],r,u);return 1===a.length?a[0]:a},l.cumreduce=function(t,n,e){var r,o,i,a,u;for(s(t[0])||(t=[t]),o=t.length,i=t[0].length,a=e?t:new Array(o),r=0;r<o;r++)for(a[r]||(a[r]=new Array(i)),i>0&&(a[r][0]=t[r][0]),u=1;u<i;u++)a[r][u]=n(a[r][u-1],t[r][u]);return 1===a.length?a[0]:a},l.alter=function(t,n){return l.map(t,n,!0)},l.create=function(t,n,e){var r,o,i=new Array(t);for(a(n)&&(e=n,n=t),r=0;r<t;r++)for(i[r]=new Array(n),o=0;o<n;o++)i[r][o]=e(r,o);return i},l.zeros=function(t,n){return u(n)||(n=t),l.create(t,n,c)},l.ones=function(t,n){return u(n)||(n=t),l.create(t,n,f)},l.rand=function(t,n){return u(n)||(n=t),l.create(t,n,l._random_fn)},l.identity=function(t,n){return u(n)||(n=t),l.create(t,n,h)},l.symmetric=function(t){var n,e,r=t.length;if(t.length!==t[0].length)return!1;for(n=0;n<r;n++)for(e=0;e<r;e++)if(t[e][n]!==t[n][e])return!1;return!0},l.clear=function(t){return l.alter(t,c)},l.seq=function(t,n,e,r){a(r)||(r=!1);var o,s=[],u=i(t,n),l=(n*u-t*u)/((e-1)*u),c=t;for(o=0;c<=n&&o<e;c=(t*u+l*u*++o)/u)s.push(r?r(c,o):c);return s},l.arange=function(t,e,r){var o,i=[];if(r=r||1,e===n&&(e=t,t=0),t===e||0===r)return[];if(t<e&&r<0)return[];if(t>e&&r>0)return[];if(r>0)for(o=t;o<e;o+=r)i.push(o);else for(o=t;o>e;o+=r)i.push(o);return i},l.slice=function(){function t(t,e,r,o){var i,s=[],a=t.length;if(e===n&&r===n&&o===n)return l.copy(t);if(o=o||1,(e=(e=e||0)>=0?e:a+e)===(r=(r=r||t.length)>=0?r:a+r)||0===o)return[];if(e<r&&o<0)return[];if(e>r&&o>0)return[];if(o>0)for(i=e;i<r;i+=o)s.push(t[i]);else for(i=e;i>r;i+=o)s.push(t[i]);return s}return function(n,e){var r,o;return u((e=e||{}).row)?u(e.col)?n[e.row][e.col]:t(l.rowa(n,e.row),(r=e.col||{}).start,r.end,r.step):u(e.col)?t(l.cola(n,e.col),(o=e.row||{}).start,o.end,o.step):(o=e.row||{},r=e.col||{},t(n,o.start,o.end,o.step).map((function(n){return t(n,r.start,r.end,r.step)})))}}(),l.sliceAssign=function(e,r,o){var i,s;if(u(r.row)){if(u(r.col))return e[r.row][r.col]=o;r.col=r.col||{},r.col.start=r.col.start||0,r.col.end=r.col.end||e[0].length,r.col.step=r.col.step||1,i=l.arange(r.col.start,t.min(e.length,r.col.end),r.col.step);var a=r.row;return i.forEach((function(t,n){e[a][t]=o[n]})),e}if(u(r.col)){r.row=r.row||{},r.row.start=r.row.start||0,r.row.end=r.row.end||e.length,r.row.step=r.row.step||1,s=l.arange(r.row.start,t.min(e[0].length,r.row.end),r.row.step);var c=r.col;return s.forEach((function(t,n){e[t][c]=o[n]})),e}return o[0].length===n&&(o=[o]),r.row.start=r.row.start||0,r.row.end=r.row.end||e.length,r.row.step=r.row.step||1,r.col.start=r.col.start||0,r.col.end=r.col.end||e[0].length,r.col.step=r.col.step||1,s=l.arange(r.row.start,t.min(e.length,r.row.end),r.row.step),i=l.arange(r.col.start,t.min(e[0].length,r.col.end),r.col.step),s.forEach((function(t,n){i.forEach((function(r,i){e[t][r]=o[n][i]}))})),e},l.diagonal=function(t){var n=l.zeros(t.length,t.length);return t.forEach((function(t,e){n[e][e]=t})),n},l.copy=function(t){return t.map((function(t){return u(t)?t:t.map((function(t){return t}))}))};var m=l.prototype;return m.length=0,m.push=Array.prototype.push,m.sort=Array.prototype.sort,m.splice=Array.prototype.splice,m.slice=Array.prototype.slice,m.toArray=function(){return this.length>1?r.call(this):r.call(this)[0]},m.map=function(t,n){return l(l.map(this,t,n))},m.cumreduce=function(t,n){return l(l.cumreduce(this,t,n))},m.alter=function(t){return l.alter(this,t),this},function(t){for(var n=0;n<t.length;n++)!function(t){m[t]=function(n){var e,r=this;return n?(setTimeout((function(){n.call(r,m[t].call(r))})),this):(e=l[t](this),s(e)?l(e):e)}}(t[n])}("transpose clear symmetric rows cols dimensions diag antidiag".split(" ")),function(t){for(var n=0;n<t.length;n++)!function(t){m[t]=function(n,e){var r=this;return e?(setTimeout((function(){e.call(r,m[t].call(r,n))})),this):l(l[t](this,n))}}(t[n])}("row col".split(" ")),function(t){for(var n=0;n<t.length;n++)!function(t){m[t]=function(){return l(l[t].apply(null,arguments))}}(t[n])}("create zeros ones rand identity".split(" ")),l}(Math),function(t,n){var e=t.utils.isFunction;function r(t,n){return t-n}function o(t,e,r){return n.max(e,n.min(t,r))}t.sum=function(t){for(var n=0,e=t.length;--e>=0;)n+=t[e];return n},t.sumsqrd=function(t){for(var n=0,e=t.length;--e>=0;)n+=t[e]*t[e];return n},t.sumsqerr=function(n){for(var e,r=t.mean(n),o=0,i=n.length;--i>=0;)o+=(e=n[i]-r)*e;return o},t.sumrow=function(t){for(var n=0,e=t.length;--e>=0;)n+=t[e];return n},t.product=function(t){for(var n=1,e=t.length;--e>=0;)n*=t[e];return n},t.min=function(t){for(var n=t[0],e=0;++e<t.length;)t[e]<n&&(n=t[e]);return n},t.max=function(t){for(var n=t[0],e=0;++e<t.length;)t[e]>n&&(n=t[e]);return n},t.unique=function(t){for(var n={},e=[],r=0;r<t.length;r++)n[t[r]]||(n[t[r]]=!0,e.push(t[r]));return e},t.mean=function(n){return t.sum(n)/n.length},t.meansqerr=function(n){return t.sumsqerr(n)/n.length},t.geomean=function(e){var r=e.map(n.log),o=t.mean(r);return n.exp(o)},t.median=function(t){var n=t.length,e=t.slice().sort(r);return 1&n?e[n/2|0]:(e[n/2-1]+e[n/2])/2},t.cumsum=function(n){return t.cumreduce(n,(function(t,n){return t+n}))},t.cumprod=function(n){return t.cumreduce(n,(function(t,n){return t*n}))},t.diff=function(t){var n,e=[],r=t.length;for(n=1;n<r;n++)e.push(t[n]-t[n-1]);return e},t.rank=function(t){var n,e=[],o={};for(n=0;n<t.length;n++)o[u=t[n]]?o[u]++:(o[u]=1,e.push(u));var i=e.sort(r),s={},a=1;for(n=0;n<i.length;n++){var u,l=o[u=i[n]],c=(a+(a+l-1))/2;s[u]=c,a+=l}return t.map((function(t){return s[t]}))},t.mode=function(t){var n,e=t.length,o=t.slice().sort(r),i=1,s=0,a=0,u=[];for(n=0;n<e;n++)o[n]===o[n+1]?i++:(i>s?(u=[o[n]],s=i,a=0):i===s&&(u.push(o[n]),a++),i=1);return 0===a?u[0]:u},t.range=function(n){return t.max(n)-t.min(n)},t.variance=function(n,e){return t.sumsqerr(n)/(n.length-(e?1:0))},t.pooledvariance=function(n){return n.reduce((function(n,e){return n+t.sumsqerr(e)}),0)/(n.reduce((function(t,n){return t+n.length}),0)-n.length)},t.deviation=function(n){for(var e=t.mean(n),r=n.length,o=new Array(r),i=0;i<r;i++)o[i]=n[i]-e;return o},t.stdev=function(e,r){return n.sqrt(t.variance(e,r))},t.pooledstdev=function(e){return n.sqrt(t.pooledvariance(e))},t.meandev=function(e){for(var r=t.mean(e),o=[],i=e.length-1;i>=0;i--)o.push(n.abs(e[i]-r));return t.mean(o)},t.meddev=function(e){for(var r=t.median(e),o=[],i=e.length-1;i>=0;i--)o.push(n.abs(e[i]-r));return t.median(o)},t.coeffvar=function(n){return t.stdev(n)/t.mean(n)},t.quartiles=function(t){var e=t.length,o=t.slice().sort(r);return[o[n.round(e/4)-1],o[n.round(e/2)-1],o[n.round(3*e/4)-1]]},t.quantiles=function(t,e,i,s){var a,u,l,c,f,h=t.slice().sort(r),m=[e.length],d=t.length;for(void 0===i&&(i=3/8),void 0===s&&(s=3/8),a=0;a<e.length;a++)l=d*(u=e[a])+(i+u*(1-i-s)),c=n.floor(o(l,1,d-1)),f=o(l-c,0,1),m[a]=(1-f)*h[c-1]+f*h[c];return m},t.percentile=function(t,n,e){var o=t.slice().sort(r),i=n*(o.length+(e?1:-1))+(e?0:1),s=parseInt(i),a=i-s;return s+1<o.length?o[s-1]+a*(o[s]-o[s-1]):o[s-1]},t.percentileOfScore=function(t,n,e){var r,o,i=0,s=t.length,a=!1;for("strict"===e&&(a=!0),o=0;o<s;o++)r=t[o],(a&&r<n||!a&&r<=n)&&i++;return i/s},t.histogram=function(e,r){r=r||4;var o,i=t.min(e),s=(t.max(e)-i)/r,a=e.length,u=[];for(o=0;o<r;o++)u[o]=0;for(o=0;o<a;o++)u[n.min(n.floor((e[o]-i)/s),r-1)]+=1;return u},t.covariance=function(n,e){var r,o=t.mean(n),i=t.mean(e),s=n.length,a=new Array(s);for(r=0;r<s;r++)a[r]=(n[r]-o)*(e[r]-i);return t.sum(a)/(s-1)},t.corrcoeff=function(n,e){return t.covariance(n,e)/t.stdev(n,1)/t.stdev(e,1)},t.spearmancoeff=function(n,e){return n=t.rank(n),e=t.rank(e),t.corrcoeff(n,e)},t.stanMoment=function(e,r){for(var o=t.mean(e),i=t.stdev(e),s=e.length,a=0,u=0;u<s;u++)a+=n.pow((e[u]-o)/i,r);return a/e.length},t.skewness=function(n){return t.stanMoment(n,3)},t.kurtosis=function(n){return t.stanMoment(n,4)-3};var i=t.prototype;!function(n){for(var r=0;r<n.length;r++)!function(n){i[n]=function(r,o){var s=[],a=0,u=this;if(e(r)&&(o=r,r=!1),o)return setTimeout((function(){o.call(u,i[n].call(u,r))})),this;if(this.length>1){for(u=!0===r?this:this.transpose();a<u.length;a++)s[a]=t[n](u[a]);return s}return t[n](this[0],r)}}(n[r])}("cumsum cumprod".split(" ")),function(n){for(var r=0;r<n.length;r++)!function(n){i[n]=function(r,o){var s=[],a=0,u=this;if(e(r)&&(o=r,r=!1),o)return setTimeout((function(){o.call(u,i[n].call(u,r))})),this;if(this.length>1){for("sumrow"!==n&&(u=!0===r?this:this.transpose());a<u.length;a++)s[a]=t[n](u[a]);return!0===r?t[n](t.utils.toVector(s)):s}return t[n](this[0],r)}}(n[r])}("sum sumsqrd sumsqerr sumrow product min max unique mean meansqerr geomean median diff rank mode range variance deviation stdev meandev meddev coeffvar quartiles histogram skewness kurtosis".split(" ")),function(n){for(var r=0;r<n.length;r++)!function(n){i[n]=function(){var r,o=[],s=0,a=this,u=Array.prototype.slice.call(arguments);if(e(u[u.length-1])){r=u[u.length-1];var l=u.slice(0,u.length-1);return setTimeout((function(){r.call(a,i[n].apply(a,l))})),this}r=void 0;var c=function(e){return t[n].apply(a,[e].concat(u))};if(this.length>1){for(a=a.transpose();s<a.length;s++)o[s]=c(a[s]);return o}return c(this[0])}}(n[r])}("quantiles percentileOfScore".split(" "))}(n,Math),function(t,n){t.gammaln=function(t){var e,r,o,i=0,s=[76.18009172947146,-86.50532032941678,24.01409824083091,-1.231739572450155,.001208650973866179,-5395239384953e-18],a=1.000000000190015;for(o=(r=e=t)+5.5,o-=(e+.5)*n.log(o);i<6;i++)a+=s[i]/++r;return n.log(2.5066282746310007*a/e)-o},t.loggam=function(t){var e,r,o,i,s,a,u,l=[.08333333333333333,-.002777777777777778,.0007936507936507937,-.0005952380952380952,.0008417508417508418,-.001917526917526918,.00641025641025641,-.02955065359477124,.1796443723688307,-1.3924322169059];if(e=t,u=0,1==t||2==t)return 0;for(t<=7&&(e=t+(u=n.floor(7-t))),r=1/(e*e),o=2*n.PI,s=l[9],a=8;a>=0;a--)s*=r,s+=l[a];if(i=s/e+.5*n.log(o)+(e-.5)*n.log(e)-e,t<=7)for(a=1;a<=u;a++)i-=n.log(e-1),e-=1;return i},t.gammafn=function(t){var e,r,o,i,s=[-1.716185138865495,24.76565080557592,-379.80425647094563,629.3311553128184,866.9662027904133,-31451.272968848367,-36144.413418691176,66456.14382024054],a=[-30.8402300119739,315.35062697960416,-1015.1563674902192,-3107.771671572311,22538.11842098015,4755.846277527881,-134659.9598649693,-115132.2596755535],u=!1,l=0,c=0,f=0,h=t;if(t>171.6243769536076)return 1/0;if(h<=0){if(!(i=h%1+36e-17))return 1/0;u=(1&h?-1:1)*n.PI/n.sin(n.PI*i),h=1-h}for(o=h,r=h<1?h++:(h-=l=(0|h)-1)-1,e=0;e<8;++e)f=(f+s[e])*r,c=c*r+a[e];if(i=f/c+1,o<h)i/=o;else if(o>h)for(e=0;e<l;++e)i*=h,h++;return u&&(i=u/i),i},t.gammap=function(n,e){return t.lowRegGamma(n,e)*t.gammafn(n)},t.lowRegGamma=function(e,r){var o,i=t.gammaln(e),s=e,a=1/e,u=a,l=r+1-e,c=1/1e-30,f=1/l,h=f,m=1,d=-~(8.5*n.log(e>=1?e:1/e)+.4*e+17);if(r<0||e<=0)return NaN;if(r<e+1){for(;m<=d;m++)a+=u*=r/++s;return a*n.exp(-r+e*n.log(r)-i)}for(;m<=d;m++)h*=(f=1/(f=(o=-m*(m-e))*f+(l+=2)))*(c=l+o/c);return 1-h*n.exp(-r+e*n.log(r)-i)},t.factorialln=function(n){return n<0?NaN:t.gammaln(n+1)},t.factorial=function(n){return n<0?NaN:t.gammafn(n+1)},t.combination=function(e,r){return e>170||r>170?n.exp(t.combinationln(e,r)):t.factorial(e)/t.factorial(r)/t.factorial(e-r)},t.combinationln=function(n,e){return t.factorialln(n)-t.factorialln(e)-t.factorialln(n-e)},t.permutation=function(n,e){return t.factorial(n)/t.factorial(n-e)},t.betafn=function(e,r){if(!(e<=0||r<=0))return e+r>170?n.exp(t.betaln(e,r)):t.gammafn(e)*t.gammafn(r)/t.gammafn(e+r)},t.betaln=function(n,e){return t.gammaln(n)+t.gammaln(e)-t.gammaln(n+e)},t.betacf=function(t,e,r){var o,i,s,a,u=1e-30,l=1,c=e+r,f=e+1,h=e-1,m=1,d=1-c*t/f;for(n.abs(d)<u&&(d=u),a=d=1/d;l<=100&&(d=1+(i=l*(r-l)*t/((h+(o=2*l))*(e+o)))*d,n.abs(d)<u&&(d=u),m=1+i/m,n.abs(m)<u&&(m=u),a*=(d=1/d)*m,d=1+(i=-(e+l)*(c+l)*t/((e+o)*(f+o)))*d,n.abs(d)<u&&(d=u),m=1+i/m,n.abs(m)<u&&(m=u),a*=s=(d=1/d)*m,!(n.abs(s-1)<3e-7));l++);return a},t.gammapinv=function(e,r){var o,i,s,a,u,l,c=0,f=r-1,h=t.gammaln(r);if(e>=1)return n.max(100,r+100*n.sqrt(r));if(e<=0)return 0;for(r>1?(u=n.log(f),l=n.exp(f*(u-1)-h),a=e<.5?e:1-e,o=(2.30753+.27061*(i=n.sqrt(-2*n.log(a))))/(1+i*(.99229+.04481*i))-i,e<.5&&(o=-o),o=n.max(.001,r*n.pow(1-1/(9*r)-o/(3*n.sqrt(r)),3))):o=e<(i=1-r*(.253+.12*r))?n.pow(e/i,1/r):1-n.log(1-(e-i)/(1-i));c<12;c++){if(o<=0)return 0;if((o-=i=(s=(t.lowRegGamma(r,o)-e)/(i=r>1?l*n.exp(-(o-f)+f*(n.log(o)-u)):n.exp(-o+f*n.log(o)-h)))/(1-.5*n.min(1,s*((r-1)/o-1))))<=0&&(o=.5*(o+i)),n.abs(i)<1e-8*o)break}return o},t.erf=function(t){var e,r,o,i,s=[-1.3026537197817094,.6419697923564902,.019476473204185836,-.00956151478680863,-.000946595344482036,.000366839497852761,42523324806907e-18,-20278578112534e-18,-1624290004647e-18,130365583558e-17,1.5626441722e-8,-8.5238095915e-8,6.529054439e-9,5.059343495e-9,-9.91364156e-10,-2.27365122e-10,96467911e-18,2394038e-18,-6886027e-18,894487e-18,313092e-18,-112708e-18,381e-18,7106e-18,-1523e-18,-94e-18,121e-18,-28e-18],a=s.length-1,u=!1,l=0,c=0;for(t<0&&(t=-t,u=!0),r=4*(e=2/(2+t))-2;a>0;a--)o=l,l=r*l-c+s[a],c=o;return i=e*n.exp(-t*t+.5*(s[0]+r*l)-c),u?i-1:1-i},t.erfc=function(n){return 1-t.erf(n)},t.erfcinv=function(e){var r,o,i,s,a=0;if(e>=2)return-100;if(e<=0)return 100;for(s=e<1?e:2-e,r=-.70711*((2.30753+.27061*(i=n.sqrt(-2*n.log(s/2))))/(1+i*(.99229+.04481*i))-i);a<2;a++)r+=(o=t.erfc(r)-s)/(1.1283791670955126*n.exp(-r*r)-r*o);return e<1?r:-r},t.ibetainv=function(e,r,o){var i,s,a,u,l,c,f,h,m,d,p=r-1,g=o-1,v=0;if(e<=0)return 0;if(e>=1)return 1;for(r>=1&&o>=1?(a=e<.5?e:1-e,c=(2.30753+.27061*(u=n.sqrt(-2*n.log(a))))/(1+u*(.99229+.04481*u))-u,e<.5&&(c=-c),f=(c*c-3)/6,h=2/(1/(2*r-1)+1/(2*o-1)),m=c*n.sqrt(f+h)/h-(1/(2*o-1)-1/(2*r-1))*(f+5/6-2/(3*h)),c=r/(r+o*n.exp(2*m))):(i=n.log(r/(r+o)),s=n.log(o/(r+o)),c=e<(u=n.exp(r*i)/r)/(m=u+(l=n.exp(o*s)/o))?n.pow(r*m*e,1/r):1-n.pow(o*m*(1-e),1/o)),d=-t.gammaln(r)-t.gammaln(o)+t.gammaln(r+o);v<10;v++){if(0===c||1===c)return c;if((c-=u=(l=(t.ibeta(c,r,o)-e)/(u=n.exp(p*n.log(c)+g*n.log(1-c)+d)))/(1-.5*n.min(1,l*(p/c-g/(1-c)))))<=0&&(c=.5*(c+u)),c>=1&&(c=.5*(c+u+1)),n.abs(u)<1e-8*c&&v>0)break}return c},t.ibeta=function(e,r,o){var i=0===e||1===e?0:n.exp(t.gammaln(r+o)-t.gammaln(r)-t.gammaln(o)+r*n.log(e)+o*n.log(1-e));return!(e<0||e>1)&&(e<(r+1)/(r+o+2)?i*t.betacf(e,r,o)/r:1-i*t.betacf(1-e,o,r)/o)},t.randn=function(e,r){var o,i,s,a,u;if(r||(r=e),e)return t.create(e,r,(function(){return t.randn()}));do{o=t._random_fn(),i=1.7156*(t._random_fn()-.5),u=(s=o-.449871)*s+(a=n.abs(i)+.386595)*(.196*a-.25472*s)}while(u>.27597&&(u>.27846||i*i>-4*n.log(o)*o*o));return i/o},t.randg=function(e,r,o){var i,s,a,u,l,c,f=e;if(o||(o=r),e||(e=1),r)return(c=t.zeros(r,o)).alter((function(){return t.randg(e)})),c;e<1&&(e+=1),i=e-1/3,s=1/n.sqrt(9*i);do{do{u=1+s*(l=t.randn())}while(u<=0);u*=u*u,a=t._random_fn()}while(a>1-.331*n.pow(l,4)&&n.log(a)>.5*l*l+i*(1-u+n.log(u)));if(e==f)return i*u;do{a=t._random_fn()}while(0===a);return n.pow(a,1/f)*i*u},function(n){for(var e=0;e<n.length;e++)!function(n){t.fn[n]=function(){return t(t.map(this,(function(e){return t[n](e)})))}}(n[e])}("gammaln gammafn factorial factorialln".split(" ")),function(n){for(var e=0;e<n.length;e++)!function(n){t.fn[n]=function(){return t(t[n].apply(null,arguments))}}(n[e])}("randn".split(" "))}(n,Math),function(t,n){function e(t,e,r,o){for(var i,s=0,a=1,u=1,l=1,c=0,f=0;n.abs((u-f)/u)>o;)f=u,a=l+(i=-(e+c)*(e+r+c)*t/(e+2*c)/(e+2*c+1))*a,u=(s=u+i*s)+(i=(c+=1)*(r-c)*t/(e+2*c-1)/(e+2*c))*u,s/=l=a+i*l,a/=l,u/=l,l=1;return u/e}function r(e,r,o){var i=[.9815606342467192,.9041172563704749,.7699026741943047,.5873179542866175,.3678314989981802,.1252334085114689],s=[.04717533638651183,.10693932599531843,.16007832854334622,.20316742672306592,.2334925365383548,.24914704581340277],a=.5*e;if(a>=8)return 1;var u,l=2*t.normal.cdf(a,0,1,1,0)-1;l=l>=n.exp(-50/o)?n.pow(l,o):0;for(var c=a,f=(8-a)/(u=e>3?2:3),h=c+f,m=0,d=o-1,p=1;p<=u;p++){for(var g=0,v=.5*(h+c),y=.5*(h-c),w=1;w<=12;w++){var E,A=v+y*(6<w?i[(E=12-w+1)-1]:-i[(E=w)-1]),_=A*A;if(_>60)break;var I=2*t.normal.cdf(A,0,1,1,0)*.5-2*t.normal.cdf(A,e,1,1,0)*.5;I>=n.exp(-30/d)&&(g+=I=s[E-1]*n.exp(-.5*_)*n.pow(I,d))}m+=g*=2*y*o/n.sqrt(2*n.PI),c=h,h+=f}return(l+=m)<=n.exp(-30/r)?0:(l=n.pow(l,r))>=1?1:l}!function(n){for(var e=0;e<n.length;e++)!function(n){t[n]=function t(n,e,r){return this instanceof t?(this._a=n,this._b=e,this._c=r,this):new t(n,e,r)},t.fn[n]=function(e,r,o){var i=t[n](e,r,o);return i.data=this,i},t[n].prototype.sample=function(e){var r=this._a,o=this._b,i=this._c;return e?t.alter(e,(function(){return t[n].sample(r,o,i)})):t[n].sample(r,o,i)},function(e){for(var r=0;r<e.length;r++)!function(e){t[n].prototype[e]=function(r){var o=this._a,i=this._b,s=this._c;return r||0===r||(r=this.data),"number"!=typeof r?t.fn.map.call(r,(function(r){return t[n][e](r,o,i,s)})):t[n][e](r,o,i,s)}}(e[r])}("pdf cdf inv".split(" ")),function(e){for(var r=0;r<e.length;r++)!function(e){t[n].prototype[e]=function(){return t[n][e](this._a,this._b,this._c)}}(e[r])}("mean median mode variance".split(" "))}(n[e])}("beta centralF cauchy chisquare exponential gamma invgamma kumaraswamy laplace lognormal noncentralt normal pareto studentt weibull uniform binomial negbin hypgeom poisson triangular tukey arcsine".split(" ")),t.extend(t.beta,{pdf:function(e,r,o){return e>1||e<0?0:1==r&&1==o?1:r<512&&o<512?n.pow(e,r-1)*n.pow(1-e,o-1)/t.betafn(r,o):n.exp((r-1)*n.log(e)+(o-1)*n.log(1-e)-t.betaln(r,o))},cdf:function(n,e,r){return n>1||n<0?1*(n>1):t.ibeta(n,e,r)},inv:function(n,e,r){return t.ibetainv(n,e,r)},mean:function(t,n){return t/(t+n)},median:function(n,e){return t.ibetainv(.5,n,e)},mode:function(t,n){return(t-1)/(t+n-2)},sample:function(n,e){var r=t.randg(n);return r/(r+t.randg(e))},variance:function(t,e){return t*e/(n.pow(t+e,2)*(t+e+1))}}),t.extend(t.centralF,{pdf:function(e,r,o){var i;return e<0?0:r<=2?0===e&&r<2?1/0:0===e&&2===r?1:1/t.betafn(r/2,o/2)*n.pow(r/o,r/2)*n.pow(e,r/2-1)*n.pow(1+r/o*e,-(r+o)/2):(i=r*e/(o+e*r),r*(o/(o+e*r))/2*t.binomial.pdf((r-2)/2,(r+o-2)/2,i))},cdf:function(n,e,r){return n<0?0:t.ibeta(e*n/(e*n+r),e/2,r/2)},inv:function(n,e,r){return r/(e*(1/t.ibetainv(n,e/2,r/2)-1))},mean:function(t,n){return n>2?n/(n-2):void 0},mode:function(t,n){return t>2?n*(t-2)/(t*(n+2)):void 0},sample:function(n,e){return 2*t.randg(n/2)/n/(2*t.randg(e/2)/e)},variance:function(t,n){if(!(n<=4))return 2*n*n*(t+n-2)/(t*(n-2)*(n-2)*(n-4))}}),t.extend(t.cauchy,{pdf:function(t,e,r){return r<0?0:r/(n.pow(t-e,2)+n.pow(r,2))/n.PI},cdf:function(t,e,r){return n.atan((t-e)/r)/n.PI+.5},inv:function(t,e,r){return e+r*n.tan(n.PI*(t-.5))},median:function(t){return t},mode:function(t){return t},sample:function(e,r){return t.randn()*n.sqrt(1/(2*t.randg(.5)))*r+e}}),t.extend(t.chisquare,{pdf:function(e,r){return e<0?0:0===e&&2===r?.5:n.exp((r/2-1)*n.log(e)-e/2-r/2*n.log(2)-t.gammaln(r/2))},cdf:function(n,e){return n<0?0:t.lowRegGamma(e/2,n/2)},inv:function(n,e){return 2*t.gammapinv(n,.5*e)},mean:function(t){return t},median:function(t){return t*n.pow(1-2/(9*t),3)},mode:function(t){return t-2>0?t-2:0},sample:function(n){return 2*t.randg(n/2)},variance:function(t){return 2*t}}),t.extend(t.exponential,{pdf:function(t,e){return t<0?0:e*n.exp(-e*t)},cdf:function(t,e){return t<0?0:1-n.exp(-e*t)},inv:function(t,e){return-n.log(1-t)/e},mean:function(t){return 1/t},median:function(t){return 1/t*n.log(2)},mode:function(){return 0},sample:function(e){return-1/e*n.log(t._random_fn())},variance:function(t){return n.pow(t,-2)}}),t.extend(t.gamma,{pdf:function(e,r,o){return e<0?0:0===e&&1===r?1/o:n.exp((r-1)*n.log(e)-e/o-t.gammaln(r)-r*n.log(o))},cdf:function(n,e,r){return n<0?0:t.lowRegGamma(e,n/r)},inv:function(n,e,r){return t.gammapinv(n,e)*r},mean:function(t,n){return t*n},mode:function(t,n){if(t>1)return(t-1)*n},sample:function(n,e){return t.randg(n)*e},variance:function(t,n){return t*n*n}}),t.extend(t.invgamma,{pdf:function(e,r,o){return e<=0?0:n.exp(-(r+1)*n.log(e)-o/e-t.gammaln(r)+r*n.log(o))},cdf:function(n,e,r){return n<=0?0:1-t.lowRegGamma(e,r/n)},inv:function(n,e,r){return r/t.gammapinv(1-n,e)},mean:function(t,n){return t>1?n/(t-1):void 0},mode:function(t,n){return n/(t+1)},sample:function(n,e){return e/t.randg(n)},variance:function(t,n){if(!(t<=2))return n*n/((t-1)*(t-1)*(t-2))}}),t.extend(t.kumaraswamy,{pdf:function(t,e,r){return 0===t&&1===e?r:1===t&&1===r?e:n.exp(n.log(e)+n.log(r)+(e-1)*n.log(t)+(r-1)*n.log(1-n.pow(t,e)))},cdf:function(t,e,r){return t<0?0:t>1?1:1-n.pow(1-n.pow(t,e),r)},inv:function(t,e,r){return n.pow(1-n.pow(1-t,1/r),1/e)},mean:function(n,e){return e*t.gammafn(1+1/n)*t.gammafn(e)/t.gammafn(1+1/n+e)},median:function(t,e){return n.pow(1-n.pow(2,-1/e),1/t)},mode:function(t,e){if(t>=1&&e>=1&&1!==t&&1!==e)return n.pow((t-1)/(t*e-1),1/t)},variance:function(){throw new Error("variance not yet implemented")}}),t.extend(t.lognormal,{pdf:function(t,e,r){return t<=0?0:n.exp(-n.log(t)-.5*n.log(2*n.PI)-n.log(r)-n.pow(n.log(t)-e,2)/(2*r*r))},cdf:function(e,r,o){return e<0?0:.5+.5*t.erf((n.log(e)-r)/n.sqrt(2*o*o))},inv:function(e,r,o){return n.exp(-1.4142135623730951*o*t.erfcinv(2*e)+r)},mean:function(t,e){return n.exp(t+e*e/2)},median:function(t){return n.exp(t)},mode:function(t,e){return n.exp(t-e*e)},sample:function(e,r){return n.exp(t.randn()*r+e)},variance:function(t,e){return(n.exp(e*e)-1)*n.exp(2*t+e*e)}}),t.extend(t.noncentralt,{pdf:function(e,r,o){return n.abs(o)<1e-14?t.studentt.pdf(e,r):n.abs(e)<1e-14?n.exp(t.gammaln((r+1)/2)-o*o/2-.5*n.log(n.PI*r)-t.gammaln(r/2)):r/e*(t.noncentralt.cdf(e*n.sqrt(1+2/r),r+2,o)-t.noncentralt.cdf(e,r,o))},cdf:function(e,r,o){var i=1e-14;if(n.abs(o)<i)return t.studentt.cdf(e,r);var s=!1;e<0&&(s=!0,o=-o);for(var a=t.normal.cdf(-o,0,1),u=i+1,l=u,c=e*e/(e*e+r),f=0,h=n.exp(-o*o/2),m=n.exp(-o*o/2-.5*n.log(2)-t.gammaln(1.5))*o;f<200||l>i||u>i;)l=u,f>0&&(h*=o*o/(2*f),m*=o*o/(2*(f+.5))),a+=.5*(u=h*t.beta.cdf(c,f+.5,r/2)+m*t.beta.cdf(c,f+1,r/2)),f++;return s?1-a:a}}),t.extend(t.normal,{pdf:function(t,e,r){return n.exp(-.5*n.log(2*n.PI)-n.log(r)-n.pow(t-e,2)/(2*r*r))},cdf:function(e,r,o){return.5*(1+t.erf((e-r)/n.sqrt(2*o*o)))},inv:function(n,e,r){return-1.4142135623730951*r*t.erfcinv(2*n)+e},mean:function(t){return t},median:function(t){return t},mode:function(t){return t},sample:function(n,e){return t.randn()*e+n},variance:function(t,n){return n*n}}),t.extend(t.pareto,{pdf:function(t,e,r){return t<e?0:r*n.pow(e,r)/n.pow(t,r+1)},cdf:function(t,e,r){return t<e?0:1-n.pow(e/t,r)},inv:function(t,e,r){return e/n.pow(1-t,1/r)},mean:function(t,e){if(!(e<=1))return e*n.pow(t,e)/(e-1)},median:function(t,e){return t*(e*n.SQRT2)},mode:function(t){return t},variance:function(t,e){if(!(e<=2))return t*t*e/(n.pow(e-1,2)*(e-2))}}),t.extend(t.studentt,{pdf:function(e,r){return r=r>1e100?1e100:r,1/(n.sqrt(r)*t.betafn(.5,r/2))*n.pow(1+e*e/r,-(r+1)/2)},cdf:function(e,r){var o=r/2;return t.ibeta((e+n.sqrt(e*e+r))/(2*n.sqrt(e*e+r)),o,o)},inv:function(e,r){var o=t.ibetainv(2*n.min(e,1-e),.5*r,.5);return o=n.sqrt(r*(1-o)/o),e>.5?o:-o},mean:function(t){return t>1?0:void 0},median:function(){return 0},mode:function(){return 0},sample:function(e){return t.randn()*n.sqrt(e/(2*t.randg(e/2)))},variance:function(t){return t>2?t/(t-2):t>1?1/0:void 0}}),t.extend(t.weibull,{pdf:function(t,e,r){return t<0||e<0||r<0?0:r/e*n.pow(t/e,r-1)*n.exp(-n.pow(t/e,r))},cdf:function(t,e,r){return t<0?0:1-n.exp(-n.pow(t/e,r))},inv:function(t,e,r){return e*n.pow(-n.log(1-t),1/r)},mean:function(n,e){return n*t.gammafn(1+1/e)},median:function(t,e){return t*n.pow(n.log(2),1/e)},mode:function(t,e){return e<=1?0:t*n.pow((e-1)/e,1/e)},sample:function(e,r){return e*n.pow(-n.log(t._random_fn()),1/r)},variance:function(e,r){return e*e*t.gammafn(1+2/r)-n.pow(t.weibull.mean(e,r),2)}}),t.extend(t.uniform,{pdf:function(t,n,e){return t<n||t>e?0:1/(e-n)},cdf:function(t,n,e){return t<n?0:t<e?(t-n)/(e-n):1},inv:function(t,n,e){return n+t*(e-n)},mean:function(t,n){return.5*(t+n)},median:function(n,e){return t.mean(n,e)},mode:function(){throw new Error("mode is not yet implemented")},sample:function(n,e){return n/2+e/2+(e/2-n/2)*(2*t._random_fn()-1)},variance:function(t,e){return n.pow(e-t,2)/12}}),t.extend(t.binomial,{pdf:function(e,r,o){return 0===o||1===o?r*o===e?1:0:t.combination(r,e)*n.pow(o,e)*n.pow(1-o,r-e)},cdf:function(r,o,i){var s,a=1e-10;if(r<0)return 0;if(r>=o)return 1;if(i<0||i>1||o<=0)return NaN;var u=i,l=(r=n.floor(r))+1,c=o-r,f=l+c,h=n.exp(t.gammaln(f)-t.gammaln(c)-t.gammaln(l)+l*n.log(u)+c*n.log(1-u));return s=u<(l+1)/(f+2)?h*e(u,l,c,a):1-h*e(1-u,c,l,a),n.round(1/a*(1-s))/(1/a)}}),t.extend(t.negbin,{pdf:function(e,r,o){return e===e>>>0&&(e<0?0:t.combination(e+r-1,r-1)*n.pow(1-o,e)*n.pow(o,r))},cdf:function(n,e,r){var o=0,i=0;if(n<0)return 0;for(;i<=n;i++)o+=t.negbin.pdf(i,e,r);return o}}),t.extend(t.hypgeom,{pdf:function(e,r,o,i){if(e!=e|0)return!1;if(e<0||e<o-(r-i))return 0;if(e>i||e>o)return 0;if(2*o>r)return 2*i>r?t.hypgeom.pdf(r-o-i+e,r,r-o,r-i):t.hypgeom.pdf(i-e,r,r-o,i);if(2*i>r)return t.hypgeom.pdf(o-e,r,o,r-i);if(o<i)return t.hypgeom.pdf(e,r,i,o);for(var s=1,a=0,u=0;u<e;u++){for(;s>1&&a<i;)s*=1-o/(r-a),a++;s*=(i-u)*(o-u)/((u+1)*(r-o-i+u+1))}for(;a<i;a++)s*=1-o/(r-a);return n.min(1,n.max(0,s))},cdf:function(e,r,o,i){if(e<0||e<o-(r-i))return 0;if(e>=i||e>=o)return 1;if(2*o>r)return 2*i>r?t.hypgeom.cdf(r-o-i+e,r,r-o,r-i):1-t.hypgeom.cdf(i-e-1,r,r-o,i);if(2*i>r)return 1-t.hypgeom.cdf(o-e-1,r,o,r-i);if(o<i)return t.hypgeom.cdf(e,r,i,o);for(var s=1,a=1,u=0,l=0;l<e;l++){for(;s>1&&u<i;){var c=1-o/(r-u);a*=c,s*=c,u++}s+=a*=(i-l)*(o-l)/((l+1)*(r-o-i+l+1))}for(;u<i;u++)s*=1-o/(r-u);return n.min(1,n.max(0,s))}}),t.extend(t.poisson,{pdf:function(e,r){return r<0||e%1!=0||e<0?0:n.pow(r,e)*n.exp(-r)/t.factorial(e)},cdf:function(n,e){var r=[],o=0;if(n<0)return 0;for(;o<=n;o++)r.push(t.poisson.pdf(o,e));return t.sum(r)},mean:function(t){return t},variance:function(t){return t},sampleSmall:function(e){var r=1,o=0,i=n.exp(-e);do{o++,r*=t._random_fn()}while(r>i);return o-1},sampleLarge:function(e){var r,o,i,s,a,u,l,c,f,h,m=e;for(s=n.sqrt(m),a=n.log(m),u=.02483*(l=.931+2.53*s)-.059,c=1.1239+1.1328/(l-3.4),f=.9277-3.6224/(l-2);;){if(o=n.random()-.5,i=n.random(),h=.5-n.abs(o),r=n.floor((2*u/h+l)*o+m+.43),h>=.07&&i<=f)return r;if(!(r<0||h<.013&&i>h)&&n.log(i)+n.log(c)-n.log(u/(h*h)+l)<=r*a-m-t.loggam(r+1))return r}},sample:function(t){return t<10?this.sampleSmall(t):this.sampleLarge(t)}}),t.extend(t.triangular,{pdf:function(t,n,e,r){return e<=n||r<n||r>e?NaN:t<n||t>e?0:t<r?2*(t-n)/((e-n)*(r-n)):t===r?2/(e-n):2*(e-t)/((e-n)*(e-r))},cdf:function(t,e,r,o){return r<=e||o<e||o>r?NaN:t<=e?0:t>=r?1:t<=o?n.pow(t-e,2)/((r-e)*(o-e)):1-n.pow(r-t,2)/((r-e)*(r-o))},inv:function(t,e,r,o){return r<=e||o<e||o>r?NaN:t<=(o-e)/(r-e)?e+(r-e)*n.sqrt(t*((o-e)/(r-e))):e+(r-e)*(1-n.sqrt((1-t)*(1-(o-e)/(r-e))))},mean:function(t,n,e){return(t+n+e)/3},median:function(t,e,r){return r<=(t+e)/2?e-n.sqrt((e-t)*(e-r))/n.sqrt(2):r>(t+e)/2?t+n.sqrt((e-t)*(r-t))/n.sqrt(2):void 0},mode:function(t,n,e){return e},sample:function(e,r,o){var i=t._random_fn();return i<(o-e)/(r-e)?e+n.sqrt(i*(r-e)*(o-e)):r-n.sqrt((1-i)*(r-e)*(r-o))},variance:function(t,n,e){return(t*t+n*n+e*e-t*n-t*e-n*e)/18}}),t.extend(t.arcsine,{pdf:function(t,e,r){return r<=e?NaN:t<=e||t>=r?0:2/n.PI*n.pow(n.pow(r-e,2)-n.pow(2*t-e-r,2),-.5)},cdf:function(t,e,r){return t<e?0:t<r?2/n.PI*n.asin(n.sqrt((t-e)/(r-e))):1},inv:function(t,e,r){return e+(.5-.5*n.cos(n.PI*t))*(r-e)},mean:function(t,n){return n<=t?NaN:(t+n)/2},median:function(t,n){return n<=t?NaN:(t+n)/2},mode:function(){throw new Error("mode is not yet implemented")},sample:function(e,r){return(e+r)/2+(r-e)/2*n.sin(2*n.PI*t.uniform.sample(0,1))},variance:function(t,e){return e<=t?NaN:n.pow(e-t,2)/8}}),t.extend(t.laplace,{pdf:function(t,e,r){return r<=0?0:n.exp(-n.abs(t-e)/r)/(2*r)},cdf:function(t,e,r){return r<=0?0:t<e?.5*n.exp((t-e)/r):1-.5*n.exp(-(t-e)/r)},mean:function(t){return t},median:function(t){return t},mode:function(t){return t},variance:function(t,n){return 2*n*n},sample:function(e,r){var o,i=t._random_fn()-.5;return e-r*((o=i)/n.abs(o))*n.log(1-2*n.abs(i))}}),t.extend(t.tukey,{cdf:function(e,o,i){var s=o,a=[.9894009349916499,.9445750230732326,.8656312023878318,.755404408355003,.6178762444026438,.45801677765722737,.2816035507792589,.09501250983763744],u=[.027152459411754096,.062253523938647894,.09515851168249279,.12462897125553388,.14959598881657674,.16915651939500254,.18260341504492358,.1894506104550685];if(e<=0)return 0;if(i<2||s<2)return NaN;if(!Number.isFinite(e))return 1;if(i>25e3)return r(e,1,s);var l,c=.5*i,f=c*n.log(i)-i*n.log(2)-t.gammaln(c),h=c-1,m=.25*i;l=i<=100?1:i<=800?.5:i<=5e3?.25:.125,f+=n.log(l);for(var d=0,p=1;p<=50;p++){for(var g=0,v=(2*p-1)*l,y=1;y<=16;y++){var w,E;8<y?(w=y-8-1,E=f+h*n.log(v+a[w]*l)-(a[w]*l+v)*m):(w=y-1,E=f+h*n.log(v-a[w]*l)+(a[w]*l-v)*m),E>=-30&&(g+=r(8<y?e*n.sqrt(.5*(a[w]*l+v)):e*n.sqrt(.5*(-a[w]*l+v)),1,s)*u[w]*n.exp(E))}if(p*l>=1&&g<=1e-14)break;d+=g}if(g>1e-14)throw new Error("tukey.cdf failed to converge");return d>1&&(d=1),d},inv:function(e,r,o){if(o<2||r<2)return NaN;if(e<0||e>1)return NaN;if(0===e)return 0;if(1===e)return 1/0;var i,s=function(t,e,r){var o=.5-.5*t,i=n.sqrt(n.log(1/(o*o))),s=i+((((-453642210148e-16*i-.204231210125)*i-.342242088547)*i-1)*i+.322232421088)/((((.0038560700634*i+.10353775285)*i+.531103462366)*i+.588581570495)*i+.099348462606);r<120&&(s+=(s*s*s+s)/r/4);var a=.8832-.2368*s;return r<120&&(a+=-1.214/r+1.208*s/r),s*(a*n.log(e-1)+1.4142)}(e,r,o),a=t.tukey.cdf(s,r,o)-e;i=a>0?n.max(0,s-1):s+1;for(var u,l=t.tukey.cdf(i,r,o)-e,c=1;c<50;c++)if(u=i-l*(i-s)/(l-a),a=l,s=i,u<0&&(u=0,l=-e),l=t.tukey.cdf(u,r,o)-e,i=u,n.abs(i-s)<1e-4)return u;throw new Error("tukey.inv failed to converge")}})}(n,Math),function(t,n){var e,r,o=Array.prototype.push,i=t.utils.isArray;function s(n){return i(n)||n instanceof t}t.extend({add:function(n,e){return s(e)?(s(e[0])||(e=[e]),t.map(n,(function(t,n,r){return t+e[n][r]}))):t.map(n,(function(t){return t+e}))},subtract:function(n,e){return s(e)?(s(e[0])||(e=[e]),t.map(n,(function(t,n,r){return t-e[n][r]||0}))):t.map(n,(function(t){return t-e}))},divide:function(n,e){return s(e)?(s(e[0])||(e=[e]),t.multiply(n,t.inv(e))):t.map(n,(function(t){return t/e}))},multiply:function(n,e){var r,o,i,a,u,l,c,f;if(void 0===n.length&&void 0===e.length)return n*e;if(u=n.length,l=n[0].length,c=t.zeros(u,i=s(e)?e[0].length:l),f=0,s(e)){for(;f<i;f++)for(r=0;r<u;r++){for(a=0,o=0;o<l;o++)a+=n[r][o]*e[o][f];c[r][f]=a}return 1===u&&1===f?c[0][0]:c}return t.map(n,(function(t){return t*e}))},outer:function(n,e){return t.multiply(n.map((function(t){return[t]})),[e])},dot:function(n,e){s(n[0])||(n=[n]),s(e[0])||(e=[e]);for(var r,o,i=1===n[0].length&&1!==n.length?t.transpose(n):n,a=1===e[0].length&&1!==e.length?t.transpose(e):e,u=[],l=0,c=i.length,f=i[0].length;l<c;l++){for(u[l]=[],r=0,o=0;o<f;o++)r+=i[l][o]*a[l][o];u[l]=r}return 1===u.length?u[0]:u},pow:function(e,r){return t.map(e,(function(t){return n.pow(t,r)}))},exp:function(e){return t.map(e,(function(t){return n.exp(t)}))},log:function(e){return t.map(e,(function(t){return n.log(t)}))},abs:function(e){return t.map(e,(function(t){return n.abs(t)}))},norm:function(t,e){var r=0,o=0;for(isNaN(e)&&(e=2),s(t[0])&&(t=t[0]);o<t.length;o++)r+=n.pow(n.abs(t[o]),e);return n.pow(r,1/e)},angle:function(e,r){return n.acos(t.dot(e,r)/(t.norm(e)*t.norm(r)))},aug:function(t,n){var e,r=[];for(e=0;e<t.length;e++)r.push(t[e].slice());for(e=0;e<r.length;e++)o.apply(r[e],n[e]);return r},inv:function(n){for(var e,r=n.length,o=n[0].length,i=t.identity(r,o),s=t.gauss_jordan(n,i),a=[],u=0;u<r;u++)for(a[u]=[],e=o;e<s[0].length;e++)a[u][e-o]=s[u][e];return a},det:function t(n){if(2===n.length)return n[0][0]*n[1][1]-n[0][1]*n[1][0];for(var e=0,r=0;r<n.length;r++){for(var o=[],i=1;i<n.length;i++){o[i-1]=[];for(var s=0;s<n.length;s++)s<r?o[i-1][s]=n[i][s]:s>r&&(o[i-1][s-1]=n[i][s])}var a=r%2?-1:1;e+=t(o)*n[0][r]*a}return e},gauss_elimination:function(e,r){var o,i,s,a,u=0,l=0,c=e.length,f=e[0].length,h=1,m=0,d=[];for(o=(e=t.aug(e,r))[0].length,u=0;u<c;u++){for(i=e[u][u],l=u,a=u+1;a<f;a++)i<n.abs(e[a][u])&&(i=e[a][u],l=a);if(l!=u)for(a=0;a<o;a++)s=e[u][a],e[u][a]=e[l][a],e[l][a]=s;for(l=u+1;l<c;l++)for(h=e[l][u]/e[u][u],a=u;a<o;a++)e[l][a]=e[l][a]-h*e[u][a]}for(u=c-1;u>=0;u--){for(m=0,l=u+1;l<=c-1;l++)m+=d[l]*e[u][l];d[u]=(e[u][o-1]-m)/e[u][u]}return d},gauss_jordan:function(e,r){var o,i,s,a=t.aug(e,r),u=a.length,l=a[0].length,c=0;for(i=0;i<u;i++){var f=i;for(s=i+1;s<u;s++)n.abs(a[s][i])>n.abs(a[f][i])&&(f=s);var h=a[i];for(a[i]=a[f],a[f]=h,s=i+1;s<u;s++)for(c=a[s][i]/a[i][i],o=i;o<l;o++)a[s][o]-=a[i][o]*c}for(i=u-1;i>=0;i--){for(c=a[i][i],s=0;s<i;s++)for(o=l-1;o>i-1;o--)a[s][o]-=a[i][o]*a[s][i]/c;for(a[i][i]/=c,o=u;o<l;o++)a[i][o]/=c}return a},triaUpSolve:function(n,e){var r,o=n[0].length,i=t.zeros(1,o)[0],s=!1;return null!=e[0].length&&(e=e.map((function(t){return t[0]})),s=!0),t.arange(o-1,-1,-1).forEach((function(s){r=t.arange(s+1,o).map((function(t){return i[t]*n[s][t]})),i[s]=(e[s]-t.sum(r))/n[s][s]})),s?i.map((function(t){return[t]})):i},triaLowSolve:function(n,e){var r,o=n[0].length,i=t.zeros(1,o)[0],s=!1;return null!=e[0].length&&(e=e.map((function(t){return t[0]})),s=!0),t.arange(o).forEach((function(o){r=t.arange(o).map((function(t){return n[o][t]*i[t]})),i[o]=(e[o]-t.sum(r))/n[o][o]})),s?i.map((function(t){return[t]})):i},lu:function(n){var e,r=n.length,o=t.identity(r),i=t.zeros(n.length,n[0].length);return t.arange(r).forEach((function(t){i[0][t]=n[0][t]})),t.arange(1,r).forEach((function(s){t.arange(s).forEach((function(r){e=t.arange(r).map((function(t){return o[s][t]*i[t][r]})),o[s][r]=(n[s][r]-t.sum(e))/i[r][r]})),t.arange(s,r).forEach((function(r){e=t.arange(s).map((function(t){return o[s][t]*i[t][r]})),i[s][r]=n[e.length][r]-t.sum(e)}))})),[o,i]},cholesky:function(e){var r,o=e.length,i=t.zeros(e.length,e[0].length);return t.arange(o).forEach((function(s){r=t.arange(s).map((function(t){return n.pow(i[s][t],2)})),i[s][s]=n.sqrt(e[s][s]-t.sum(r)),t.arange(s+1,o).forEach((function(n){r=t.arange(s).map((function(t){return i[s][t]*i[n][t]})),i[n][s]=(e[s][n]-t.sum(r))/i[s][s]}))})),i},gauss_jacobi:function(e,r,o,i){for(var s,a,u,l,c=0,f=0,h=e.length,m=[],d=[],p=[];c<h;c++)for(m[c]=[],d[c]=[],p[c]=[],f=0;f<h;f++)c>f?(m[c][f]=e[c][f],d[c][f]=p[c][f]=0):c<f?(d[c][f]=e[c][f],m[c][f]=p[c][f]=0):(p[c][f]=e[c][f],m[c][f]=d[c][f]=0);for(u=t.multiply(t.multiply(t.inv(p),t.add(m,d)),-1),a=t.multiply(t.inv(p),r),s=o,l=t.add(t.multiply(u,o),a),c=2;n.abs(t.norm(t.subtract(l,s)))>i;)s=l,l=t.add(t.multiply(u,s),a),c++;return l},gauss_seidel:function(e,r,o,i){for(var s,a,u,l,c,f=0,h=e.length,m=[],d=[],p=[];f<h;f++)for(m[f]=[],d[f]=[],p[f]=[],s=0;s<h;s++)f>s?(m[f][s]=e[f][s],d[f][s]=p[f][s]=0):f<s?(d[f][s]=e[f][s],m[f][s]=p[f][s]=0):(p[f][s]=e[f][s],m[f][s]=d[f][s]=0);for(l=t.multiply(t.multiply(t.inv(t.add(p,m)),d),-1),u=t.multiply(t.inv(t.add(p,m)),r),a=o,c=t.add(t.multiply(l,o),u),f=2;n.abs(t.norm(t.subtract(c,a)))>i;)a=c,c=t.add(t.multiply(l,a),u),f+=1;return c},SOR:function(e,r,o,i,s){for(var a,u,l,c,f,h=0,m=e.length,d=[],p=[],g=[];h<m;h++)for(d[h]=[],p[h]=[],g[h]=[],a=0;a<m;a++)h>a?(d[h][a]=e[h][a],p[h][a]=g[h][a]=0):h<a?(p[h][a]=e[h][a],d[h][a]=g[h][a]=0):(g[h][a]=e[h][a],d[h][a]=p[h][a]=0);for(c=t.multiply(t.inv(t.add(g,t.multiply(d,s))),t.subtract(t.multiply(g,1-s),t.multiply(p,s))),l=t.multiply(t.multiply(t.inv(t.add(g,t.multiply(d,s))),r),s),u=o,f=t.add(t.multiply(c,o),l),h=2;n.abs(t.norm(t.subtract(f,u)))>i;)u=f,f=t.add(t.multiply(c,u),l),h++;return f},householder:function(e){for(var r,o,i,s,a=e.length,u=e[0].length,l=0,c=[],f=[];l<a-1;l++){for(r=0,s=l+1;s<u;s++)r+=e[s][l]*e[s][l];for(r=(e[l+1][l]>0?-1:1)*n.sqrt(r),o=n.sqrt((r*r-e[l+1][l]*r)/2),(c=t.zeros(a,1))[l+1][0]=(e[l+1][l]-r)/(2*o),i=l+2;i<a;i++)c[i][0]=e[i][l]/(2*o);f=t.subtract(t.identity(a,u),t.multiply(t.multiply(c,t.transpose(c)),2)),e=t.multiply(f,t.multiply(e,f))}return e},QR:(e=t.sum,r=t.arange,function(o){var i,s,a,u=o.length,l=o[0].length,c=t.zeros(l,l);for(o=t.copy(o),s=0;s<l;s++){for(c[s][s]=n.sqrt(e(r(u).map((function(t){return o[t][s]*o[t][s]})))),i=0;i<u;i++)o[i][s]=o[i][s]/c[s][s];for(a=s+1;a<l;a++)for(c[s][a]=e(r(u).map((function(t){return o[t][s]*o[t][a]}))),i=0;i<u;i++)o[i][a]=o[i][a]-o[i][s]*c[s][a]}return[o,c]}),lstsq:function(n,e){var r=!1;void 0===e[0].length&&(e=e.map((function(t){return[t]})),r=!0);var o=t.QR(n),i=o[0],s=o[1],a=n[0].length,u=t.slice(i,{col:{end:a}}),l=function(n){var e=(n=t.copy(n)).length,r=t.identity(e);return t.arange(e-1,-1,-1).forEach((function(e){t.sliceAssign(r,{row:e},t.divide(t.slice(r,{row:e}),n[e][e])),t.sliceAssign(n,{row:e},t.divide(t.slice(n,{row:e}),n[e][e])),t.arange(e).forEach((function(o){var i=t.multiply(n[o][e],-1),s=t.slice(n,{row:o}),a=t.multiply(t.slice(n,{row:e}),i);t.sliceAssign(n,{row:o},t.add(s,a));var u=t.slice(r,{row:o}),l=t.multiply(t.slice(r,{row:e}),i);t.sliceAssign(r,{row:o},t.add(u,l))}))})),r}(t.slice(s,{row:{end:a}})),c=t.transpose(u);void 0===c[0].length&&(c=[c]);var f=t.multiply(t.multiply(l,c),e);return void 0===f.length&&(f=[[f]]),r?f.map((function(t){return t[0]})):f},jacobi:function(e){for(var r,o,i,s,a,u,l,c=1,f=e.length,h=t.identity(f,f),m=[];1===c;){for(a=e[0][1],i=0,s=1,r=0;r<f;r++)for(o=0;o<f;o++)r!=o&&a<n.abs(e[r][o])&&(a=n.abs(e[r][o]),i=r,s=o);for(u=e[i][i]===e[s][s]?e[i][s]>0?n.PI/4:-n.PI/4:n.atan(2*e[i][s]/(e[i][i]-e[s][s]))/2,(l=t.identity(f,f))[i][i]=n.cos(u),l[i][s]=-n.sin(u),l[s][i]=n.sin(u),l[s][s]=n.cos(u),h=t.multiply(h,l),e=t.multiply(t.multiply(t.inv(l),e),l),c=0,r=1;r<f;r++)for(o=1;o<f;o++)r!=o&&n.abs(e[r][o])>.001&&(c=1)}for(r=0;r<f;r++)m.push(e[r][r]);return[h,m]},rungekutta:function(t,n,e,r,o,i){var s,a,u;if(2===i)for(;r<=e;)o+=((s=n*t(r,o))+(a=n*t(r+n,o+s)))/2,r+=n;if(4===i)for(;r<=e;)o+=((s=n*t(r,o))+2*(a=n*t(r+n/2,o+s/2))+2*(u=n*t(r+n/2,o+a/2))+n*t(r+n,o+u))/6,r+=n;return o},romberg:function(t,e,r,o){for(var i,s,a,u,l,c=0,f=(r-e)/2,h=[],m=[],d=[];c<o/2;){for(l=t(e),a=e,u=0;a<=r;a+=f,u++)h[u]=a;for(i=h.length,a=1;a<i-1;a++)l+=(a%2!=0?4:2)*t(h[a]);l=f/3*(l+t(r)),d[c]=l,f/=2,c++}for(s=d.length,i=1;1!==s;){for(a=0;a<s-1;a++)m[a]=(n.pow(4,i)*d[a+1]-d[a])/(n.pow(4,i)-1);s=m.length,d=m,m=[],i++}return d},richardson:function(t,e,r,o){function i(t,n){for(var e,r=0,o=t.length;r<o;r++)t[r]===n&&(e=r);return e}for(var s,a,u,l,c,f=n.abs(r-t[i(t,r)+1]),h=0,m=[],d=[];o>=f;)s=i(t,r+o),a=i(t,r),m[h]=(e[s]-2*e[a]+e[2*a-s])/(o*o),o/=2,h++;for(l=m.length,u=1;1!=l;){for(c=0;c<l-1;c++)d[c]=(n.pow(4,u)*m[c+1]-m[c])/(n.pow(4,u)-1);l=d.length,m=d,d=[],u++}return m},simpson:function(t,n,e,r){for(var o,i=(e-n)/r,s=t(n),a=[],u=n,l=0,c=1;u<=e;u+=i,l++)a[l]=u;for(o=a.length;c<o-1;c++)s+=(c%2!=0?4:2)*t(a[c]);return i/3*(s+t(e))},hermite:function(t,n,e,r){for(var o,i=t.length,s=0,a=0,u=[],l=[],c=[],f=[];a<i;a++){for(u[a]=1,o=0;o<i;o++)a!=o&&(u[a]*=(r-t[o])/(t[a]-t[o]));for(l[a]=0,o=0;o<i;o++)a!=o&&(l[a]+=1/(t[a]-t[o]));c[a]=(1-2*(r-t[a])*l[a])*(u[a]*u[a]),f[a]=(r-t[a])*(u[a]*u[a]),s+=c[a]*n[a]+f[a]*e[a]}return s},lagrange:function(t,n,e){for(var r,o,i=0,s=0,a=t.length;s<a;s++){for(o=n[s],r=0;r<a;r++)s!=r&&(o*=(e-t[r])/(t[s]-t[r]));i+=o}return i},cubic_spline:function(n,e,r){for(var o,i,s=n.length,a=0,u=[],l=[],c=[],f=[],h=[],m=[];a<s-1;a++)f[a]=n[a+1]-n[a];for(c[0]=0,a=1;a<s-1;a++)c[a]=3/f[a]*(e[a+1]-e[a])-3/f[a-1]*(e[a]-e[a-1]);for(a=1;a<s-1;a++)u[a]=[],l[a]=[],u[a][a-1]=f[a-1],u[a][a]=2*(f[a-1]+f[a]),u[a][a+1]=f[a],l[a][0]=c[a];for(i=t.multiply(t.inv(u),l),o=0;o<s-1;o++)h[o]=(e[o+1]-e[o])/f[o]-f[o]*(i[o+1][0]+2*i[o][0])/3,m[o]=(i[o+1][0]-i[o][0])/(3*f[o]);for(o=0;o<s&&!(n[o]>r);o++);return e[o-=1]+(r-n[o])*h[o]+t.sq(r-n[o])*i[o]+(r-n[o])*t.sq(r-n[o])*m[o]},gauss_quadrature:function(){throw new Error("gauss_quadrature not yet implemented")},PCA:function(n){var e,r,o,i,s,a=n.length,u=n[0].length,l=0,c=[],f=[],h=[],m=[],d=[],p=[],g=[];for(l=0;l<a;l++)c[l]=t.sum(n[l])/u;for(l=0;l<u;l++)for(d[l]=[],e=0;e<a;e++)d[l][e]=n[e][l]-c[e];for(d=t.transpose(d),l=0;l<a;l++)for(p[l]=[],e=0;e<a;e++)p[l][e]=t.dot([d[l]],[d[e]])/(u-1);for(s=(o=t.jacobi(p))[0],f=o[1],g=t.transpose(s),l=0;l<f.length;l++)for(e=l;e<f.length;e++)f[l]<f[e]&&(r=f[l],f[l]=f[e],f[e]=r,h=g[l],g[l]=g[e],g[e]=h);for(i=t.transpose(d),l=0;l<a;l++)for(m[l]=[],e=0;e<i.length;e++)m[l][e]=t.dot([g[l]],[i[e]]);return[n,f,g,m]}}),function(n){for(var e=0;e<n.length;e++)!function(n){t.fn[n]=function(e,r){var o=this;return r?(setTimeout((function(){r.call(o,t.fn[n].call(o,e))}),15),this):"number"==typeof t[n](this,e)?t[n](this,e):t(t[n](this,e))}}(n[e])}("add divide multiply subtract dot pow exp log abs norm angle".split(" "))}(n,Math),function(t,n){var e=[].slice,r=t.utils.isNumber,o=t.utils.isArray;function i(t,e,r,o){if(t>1||r>1||t<=0||r<=0)throw new Error("Proportions should be greater than 0 and less than 1");var i=(t*e+r*o)/(e+o);return(t-r)/n.sqrt(i*(1-i)*(1/e+1/o))}t.extend({zscore:function(){var n=e.call(arguments);return r(n[1])?(n[0]-n[1])/n[2]:(n[0]-t.mean(n[1]))/t.stdev(n[1],n[2])},ztest:function(){var r,i=e.call(arguments);return o(i[1])?(r=t.zscore(i[0],i[1],i[3]),1===i[2]?t.normal.cdf(-n.abs(r),0,1):2*t.normal.cdf(-n.abs(r),0,1)):i.length>2?(r=t.zscore(i[0],i[1],i[2]),1===i[3]?t.normal.cdf(-n.abs(r),0,1):2*t.normal.cdf(-n.abs(r),0,1)):(r=i[0],1===i[1]?t.normal.cdf(-n.abs(r),0,1):2*t.normal.cdf(-n.abs(r),0,1))}}),t.extend(t.fn,{zscore:function(t,n){return(t-this.mean())/this.stdev(n)},ztest:function(e,r,o){var i=n.abs(this.zscore(e,o));return 1===r?t.normal.cdf(-i,0,1):2*t.normal.cdf(-i,0,1)}}),t.extend({tscore:function(){var r=e.call(arguments);return 4===r.length?(r[0]-r[1])/(r[2]/n.sqrt(r[3])):(r[0]-t.mean(r[1]))/(t.stdev(r[1],!0)/n.sqrt(r[1].length))},ttest:function(){var o,i=e.call(arguments);return 5===i.length?(o=n.abs(t.tscore(i[0],i[1],i[2],i[3])),1===i[4]?t.studentt.cdf(-o,i[3]-1):2*t.studentt.cdf(-o,i[3]-1)):r(i[1])?(o=n.abs(i[0]),1==i[2]?t.studentt.cdf(-o,i[1]-1):2*t.studentt.cdf(-o,i[1]-1)):(o=n.abs(t.tscore(i[0],i[1])),1==i[2]?t.studentt.cdf(-o,i[1].length-1):2*t.studentt.cdf(-o,i[1].length-1))}}),t.extend(t.fn,{tscore:function(t){return(t-this.mean())/(this.stdev(!0)/n.sqrt(this.cols()))},ttest:function(e,r){return 1===r?1-t.studentt.cdf(n.abs(this.tscore(e)),this.cols()-1):2*t.studentt.cdf(-n.abs(this.tscore(e)),this.cols()-1)}}),t.extend({anovafscore:function(){var r,o,i,s,a,u,l,c,f=e.call(arguments);if(1===f.length){for(a=new Array(f[0].length),l=0;l<f[0].length;l++)a[l]=f[0][l];f=a}for(o=new Array,l=0;l<f.length;l++)o=o.concat(f[l]);for(i=t.mean(o),r=0,l=0;l<f.length;l++)r+=f[l].length*n.pow(t.mean(f[l])-i,2);for(r/=f.length-1,u=0,l=0;l<f.length;l++)for(s=t.mean(f[l]),c=0;c<f[l].length;c++)u+=n.pow(f[l][c]-s,2);return r/(u/(o.length-f.length))},anovaftest:function(){var n,o,i,s,a=e.call(arguments);if(r(a[0]))return 1-t.centralF.cdf(a[0],a[1],a[2]);var u=t.anovafscore(a);for(n=a.length-1,i=0,s=0;s<a.length;s++)i+=a[s].length;return o=i-n-1,1-t.centralF.cdf(u,n,o)},ftest:function(n,e,r){return 1-t.centralF.cdf(n,e,r)}}),t.extend(t.fn,{anovafscore:function(){return t.anovafscore(this.toArray())},anovaftes:function(){var n,e=0;for(n=0;n<this.length;n++)e+=this[n].length;return t.ftest(this.anovafscore(),this.length-1,e-this.length)}}),t.extend({qscore:function(){var o,i,s,a,u,l=e.call(arguments);return r(l[0])?(o=l[0],i=l[1],s=l[2],a=l[3],u=l[4]):(o=t.mean(l[0]),i=t.mean(l[1]),s=l[0].length,a=l[1].length,u=l[2]),n.abs(o-i)/(u*n.sqrt((1/s+1/a)/2))},qtest:function(){var n,r=e.call(arguments);3===r.length?(n=r[0],r=r.slice(1)):7===r.length?(n=t.qscore(r[0],r[1],r[2],r[3],r[4]),r=r.slice(5)):(n=t.qscore(r[0],r[1],r[2]),r=r.slice(3));var o=r[0],i=r[1];return 1-t.tukey.cdf(n,i,o-i)},tukeyhsd:function(n){for(var e=t.pooledstdev(n),r=n.map((function(n){return t.mean(n)})),o=n.reduce((function(t,n){return t+n.length}),0),i=[],s=0;s<n.length;++s)for(var a=s+1;a<n.length;++a){var u=t.qtest(r[s],r[a],n[s].length,n[a].length,e,o,n.length);i.push([[s,a],u])}return i}}),t.extend({normalci:function(){var r,o=e.call(arguments),i=new Array(2);return r=4===o.length?n.abs(t.normal.inv(o[1]/2,0,1)*o[2]/n.sqrt(o[3])):n.abs(t.normal.inv(o[1]/2,0,1)*t.stdev(o[2])/n.sqrt(o[2].length)),i[0]=o[0]-r,i[1]=o[0]+r,i},tci:function(){var r,o=e.call(arguments),i=new Array(2);return r=4===o.length?n.abs(t.studentt.inv(o[1]/2,o[3]-1)*o[2]/n.sqrt(o[3])):n.abs(t.studentt.inv(o[1]/2,o[2].length-1)*t.stdev(o[2],!0)/n.sqrt(o[2].length)),i[0]=o[0]-r,i[1]=o[0]+r,i},significant:function(t,n){return t<n}}),t.extend(t.fn,{normalci:function(n,e){return t.normalci(n,e,this.toArray())},tci:function(n,e){return t.tci(n,e,this.toArray())}}),t.extend(t.fn,{oneSidedDifferenceOfProportions:function(n,e,r,o){var s=i(n,e,r,o);return t.ztest(s,1)},twoSidedDifferenceOfProportions:function(n,e,r,o){var s=i(n,e,r,o);return t.ztest(s,2)}})}(n,Math),n.models=function(){function t(t,e){var r=t.length,o=e[0].length-1,i=r-o-1,s=n.lstsq(e,t),a=n.multiply(e,s.map((function(t){return[t]}))).map((function(t){return t[0]})),u=n.subtract(t,a),l=n.mean(t),c=n.sum(a.map((function(t){return Math.pow(t-l,2)}))),f=n.sum(t.map((function(t,n){return Math.pow(t-a[n],2)}))),h=c+f;return{exog:e,endog:t,nobs:r,df_model:o,df_resid:i,coef:s,predict:a,resid:u,ybar:l,SST:h,SSE:c,SSR:f,R2:c/h}}function e(e){var r,o,i=(r=e.exog,o=r[0].length,n.arange(o).map((function(e){var i=n.arange(o).filter((function(t){return t!==e}));return t(n.col(r,e).map((function(t){return t[0]})),n.col(r,i))}))),s=Math.sqrt(e.SSR/e.df_resid),a=i.map((function(t){var n=t.SST,e=t.R2;return s/Math.sqrt(n*(1-e))})),u=e.coef.map((function(t,n){return(t-0)/a[n]})),l=u.map((function(t){var r=n.studentt.cdf(t,e.df_resid);return 2*(r>.5?1-r:r)})),c=n.studentt.inv(.975,e.df_resid),f=e.coef.map((function(t,n){var e=c*a[n];return[t-e,t+e]}));return{se:a,t:u,p:l,sigmaHat:s,interval95:f}}return{ols:function(r,o){var i=t(r,o),s=e(i),a=function(t){var e,r,o,i=t.R2/t.df_model/((1-t.R2)/t.df_resid);return{F_statistic:i,pvalue:1-(e=i,r=t.df_model,o=t.df_resid,n.beta.cdf(e/(o/r+e),r/2,o/2))}}(i),u=1-(1-i.R2)*((i.nobs-1)/i.df_resid);return i.t=s,i.f=a,i.adjust_R2=u,i}}}(),n.extend({buildxmatrix:function(){for(var t=new Array(arguments.length),e=0;e<arguments.length;e++){t[e]=[1].concat(arguments[e])}return n(t)},builddxmatrix:function(){for(var t=new Array(arguments[0].length),e=0;e<arguments[0].length;e++){t[e]=[1].concat(arguments[0][e])}return n(t)},buildjxmatrix:function(t){for(var e=new Array(t.length),r=0;r<t.length;r++)e[r]=t[r];return n.builddxmatrix(e)},buildymatrix:function(t){return n(t).transpose()},buildjymatrix:function(t){return t.transpose()},matrixmult:function(t,e){var r,o,i,s,a;if(t.cols()==e.rows()){if(e.rows()>1){for(s=[],r=0;r<t.rows();r++)for(s[r]=[],o=0;o<e.cols();o++){for(a=0,i=0;i<t.cols();i++)a+=t.toArray()[r][i]*e.toArray()[i][o];s[r][o]=a}return n(s)}for(s=[],r=0;r<t.rows();r++)for(s[r]=[],o=0;o<e.cols();o++){for(a=0,i=0;i<t.cols();i++)a+=t.toArray()[r][i]*e.toArray()[o];s[r][o]=a}return n(s)}},regress:function(t,e){var r=n.xtranspxinv(t),o=t.transpose(),i=n.matrixmult(n(r),o);return n.matrixmult(i,e)},regresst:function(t,e,r){var o=n.regress(t,e),i={anova:{}},s=n.jMatYBar(t,o);i.yBar=s;var a=e.mean();i.anova.residuals=n.residuals(e,s),i.anova.ssr=n.ssr(s,a),i.anova.msr=i.anova.ssr/(t[0].length-1),i.anova.sse=n.sse(e,s),i.anova.mse=i.anova.sse/(e.length-(t[0].length-1)-1),i.anova.sst=n.sst(e,a),i.anova.mst=i.anova.sst/(e.length-1),i.anova.r2=1-i.anova.sse/i.anova.sst,i.anova.r2<0&&(i.anova.r2=0),i.anova.fratio=i.anova.msr/i.anova.mse,i.anova.pvalue=n.anovaftest(i.anova.fratio,t[0].length-1,e.length-(t[0].length-1)-1),i.anova.rmse=Math.sqrt(i.anova.mse),i.anova.r2adj=1-i.anova.mse/i.anova.mst,i.anova.r2adj<0&&(i.anova.r2adj=0),i.stats=new Array(t[0].length);for(var u,l,c,f=n.xtranspxinv(t),h=0;h<o.length;h++)u=Math.sqrt(i.anova.mse*Math.abs(f[h][h])),l=Math.abs(o[h]/u),c=n.ttest(l,e.length-t[0].length-1,r),i.stats[h]=[o[h],u,l,c];return i.regress=o,i},xtranspx:function(t){return n.matrixmult(t.transpose(),t)},xtranspxinv:function(t){var e=n.matrixmult(t.transpose(),t);return n.inv(e)},jMatYBar:function(t,e){var r=n.matrixmult(t,e);return new n(r)},residuals:function(t,e){return n.matrixsubtract(t,e)},ssr:function(t,n){for(var e=0,r=0;r<t.length;r++)e+=Math.pow(t[r]-n,2);return e},sse:function(t,n){for(var e=0,r=0;r<t.length;r++)e+=Math.pow(t[r]-n[r],2);return e},sst:function(t,n){for(var e=0,r=0;r<t.length;r++)e+=Math.pow(t[r]-n,2);return e},matrixsubtract:function(t,e){for(var r=new Array(t.length),o=0;o<t.length;o++){r[o]=new Array(t[o].length);for(var i=0;i<t[o].length;i++)r[o][i]=t[o][i]-e[o][i]}return n(r)}}),n.jStat=n,n)},3379:t=>{"use strict";var n=[];function e(t){for(var e=-1,r=0;r<n.length;r++)if(n[r].identifier===t){e=r;break}return e}function r(t,r){for(var i={},s=[],a=0;a<t.length;a++){var u=t[a],l=r.base?u[0]+r.base:u[0],c=i[l]||0,f="".concat(l," ").concat(c);i[l]=c+1;var h=e(f),m={css:u[1],media:u[2],sourceMap:u[3],supports:u[4],layer:u[5]};if(-1!==h)n[h].references++,n[h].updater(m);else{var d=o(m,r);r.byIndex=a,n.splice(a,0,{identifier:f,updater:d,references:1})}s.push(f)}return s}function o(t,n){var e=n.domAPI(n);return e.update(t),function(n){if(n){if(n.css===t.css&&n.media===t.media&&n.sourceMap===t.sourceMap&&n.supports===t.supports&&n.layer===t.layer)return;e.update(t=n)}else e.remove()}}t.exports=function(t,o){var i=r(t=t||[],o=o||{});return function(t){t=t||[];for(var s=0;s<i.length;s++){var a=e(i[s]);n[a].references--}for(var u=r(t,o),l=0;l<i.length;l++){var c=e(i[l]);0===n[c].references&&(n[c].updater(),n.splice(c,1))}i=u}}},569:t=>{"use strict";var n={};t.exports=function(t,e){var r=function(t){if(void 0===n[t]){var e=document.querySelector(t);if(window.HTMLIFrameElement&&e instanceof window.HTMLIFrameElement)try{e=e.contentDocument.head}catch(t){e=null}n[t]=e}return n[t]}(t);if(!r)throw new Error("Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.");r.appendChild(e)}},9216:t=>{"use strict";t.exports=function(t){var n=document.createElement("style");return t.setAttributes(n,t.attributes),t.insert(n,t.options),n}},3565:(t,n,e)=>{"use strict";t.exports=function(t){var n=e.nc;n&&t.setAttribute("nonce",n)}},7795:t=>{"use strict";t.exports=function(t){if("undefined"==typeof document)return{update:function(){},remove:function(){}};var n=t.insertStyleElement(t);return{update:function(e){!function(t,n,e){var r="";e.supports&&(r+="@supports (".concat(e.supports,") {")),e.media&&(r+="@media ".concat(e.media," {"));var o=void 0!==e.layer;o&&(r+="@layer".concat(e.layer.length>0?" ".concat(e.layer):""," {")),r+=e.css,o&&(r+="}"),e.media&&(r+="}"),e.supports&&(r+="}");var i=e.sourceMap;i&&"undefined"!=typeof btoa&&(r+="\n/*# sourceMappingURL=data:application/json;base64,".concat(btoa(unescape(encodeURIComponent(JSON.stringify(i))))," */")),n.styleTagTransform(r,t,n.options)}(n,t,e)},remove:function(){!function(t){if(null===t.parentNode)return!1;t.parentNode.removeChild(t)}(n)}}}},4589:t=>{"use strict";t.exports=function(t,n){if(n.styleSheet)n.styleSheet.cssText=t;else{for(;n.firstChild;)n.removeChild(n.firstChild);n.appendChild(document.createTextNode(t))}}}},n={};function e(r){var o=n[r];if(void 0!==o)return o.exports;var i=n[r]={id:r,loaded:!1,exports:{}};return t[r].call(i.exports,i,i.exports,e),i.loaded=!0,i.exports}e.m=t,e.amdO={},e.n=t=>{var n=t&&t.__esModule?()=>t.default:()=>t;return e.d(n,{a:n}),n},e.d=(t,n)=>{for(var r in n)e.o(n,r)&&!e.o(t,r)&&Object.defineProperty(t,r,{enumerable:!0,get:n[r]})},e.u=t=>t+".js",e.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(t){if("object"==typeof window)return window}}(),e.hmd=t=>((t=Object.create(t)).children||(t.children=[]),Object.defineProperty(t,"exports",{enumerable:!0,set:()=>{throw new Error("ES Modules may not assign module.exports or exports.*, Use ESM export syntax, instead: "+t.id)}}),t),e.o=(t,n)=>Object.prototype.hasOwnProperty.call(t,n),e.r=t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},(()=>{var t;e.g.importScripts&&(t=e.g.location+"");var n=e.g.document;if(!t&&n&&(n.currentScript&&(t=n.currentScript.src),!t)){var r=n.getElementsByTagName("script");if(r.length)for(var o=r.length-1;o>-1&&!t;)t=r[o--].src}if(!t)throw new Error("Automatic publicPath is not supported in this browser");t=t.replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/"),e.p=t})(),e.b=document.baseURI||self.location.href,e.nc=void 0;var r={};(()=>{"use strict";e.r(r),e.d(r,{GetMCLEditor:()=>cr,MCL:()=>fr,MVA:()=>dr,PCA:()=>ir,PLS:()=>hr,_package:()=>nr,anova:()=>br,applyLinearKernelSVM:()=>wr,applyPolynomialKernelSVM:()=>Ir,applyRBFkernelSVM:()=>Ar,applySigmoidKernelSVM:()=>Nr,dbScan:()=>or,dbscanPostProcessingFunction:()=>sr,demoMultivariateAnalysis:()=>pr,info:()=>er,init:()=>rr,kNNImputation:()=>Sr,numberPreprocessingFunction:()=>ar,reduceDimensionality:()=>lr,stringPreprocessingFunction:()=>ur,testDataLinearNonSeparable:()=>vr,testDataLinearSeparable:()=>gr,topMenuPLS:()=>mr,trainLinearKernelSVM:()=>yr,trainPolynomialKernelSVM:()=>_r,trainRBFkernelSVM:()=>Er,trainSigmoidKernelSVM:()=>Cr});const t=grok,n=ui,o=DG;Int32Array,Float32Array,DG.Column.fromInt32Array,DG.Column.fromFloat32Array;const i="num",s="floatColumn",a="intColumn",u="floatColumns",l="newFloatColumns",c="intColumns",f="newIntColumns",h="newFloatColumn",m="newIntColumn",d="column",p="_callResult",g="numOfRows",v="numOfColumns",y="ref",w="value",E="tableFromColumns",A="objects",_="int",I="double",C={intColumn:Int32Array,floatColumn:Float32Array,floatColumns:Float32Array,newFloatColumns:Float32Array,intColumns:Int32Array,newIntColumns:Int32Array,newFloatColumn:Float32Array,newIntColumn:Int32Array};function N(t,n){let e,r=[],o=0;for(const d in t){const E=t[d],A=E.type;if(d!==p){switch(A){case i:case _:case I:E.data=n[o],o++;break;case a:case s:let r,d=n[o];r=d.type===_&&A===a||d.type===I&&A===s?d.getRawData():new C[A](d.getRawData()),E.data={array:r,numOfRows:r.length},o++;break;case m:case h:let p=0;e=E[g][y],p=t[e].type===i?t[e].data:t[e].data[E[g][w]],E.data={numOfRows:p},o++;break;case c:case u:let N=[];for(let t of n[o].toList())t.type===_&&A===a||t.type===I&&A===s?N.push(t.getRawData()):N.push(new C[A](t.getRawData()));E.data={arrays:N,numOfRows:N[0].length,numOfColumns:N.length},o++;break;case f:case l:let b=0,S=0;e=E[g][y],b=t[e].type===i?t[e].data:t[e].data[E[g][w]],e=E[v][y],S=t[e].type===i?t[e].data:t[e].data[E[v][w]],E.data={numOfRows:b,numOfColumns:S},o++;break;default:return}r.push(E)}}return r}function b(t,n){t.arguments._callResult=n.callResult,function(t,n){const e={newFloatColumns:DG.Column.fromFloat32Array,newIntColumns:DG.Column.fromInt32Array,newFloatColumn:DG.Column.fromFloat32Array,newIntColumn:DG.Column.fromInt32Array};let r=0;for(const o in t){const d=t[o];switch(d.type){case i:case _:case I:case a:case s:case u:case c:break;case h:case m:let t;null==d.name?t=(0).toString():g=d.name,d.column=e[d.type](t,n[r].array);break;case f:case l:let o=[],p=n[r].arrays.length,g=[];if(null==d.names)for(let t=1;t<=p;t++)g.push(t.toString());else g=d.names;for(let t=0;t<p;t++)o.push(e[d.type](g[t],n[r].arrays[t]));d.columns=o}r++}}(t.arguments,n.args);let e=function(t){let n=t.output;const e={newFloatColumns:"columns",newIntColumns:"columns",newFloatColumn:"column",newIntColumn:"column"};switch(n.type){case i:case _:case I:return t.arguments[n.source];case d:return t.arguments[n.source].column;case E:return DG.DataFrame.fromColumns(t.arguments[n.source].columns);case A:let r=[];for(let o of n.source){let n=t.arguments[o];r.push(n[e[n.type]])}return r}}(t);return function(t){for(const n in t){const e=t[n];switch(e.type){case i:case _:case I:case a:case s:case c:case u:break;case m:case h:e.column=null;break;case f:case l:e.columns=null}}}(t.arguments),e}const S=1,M=1,T=1,O=0,P=100,x=1e8,L="components must be positive.",R="components must not be greater than features count.",F="min must be less than max.",U="features must be positive.",D="samples must be positive.",k="violators percentage must be from the range from 0 to 100.",B="dataframe is too big.",V="unsupported column type: ";function G(t){if(t.type!=o.COLUMN_TYPE.FLOAT&&t.type!=o.COLUMN_TYPE.INT)throw new Error(V+t.type)}function q(t){if(t.stats.missingValueCount>0)throw new Error(`The column '${t.name}' has missing values.`)}function W(t,n){if(function(t,n){if(n<S)throw new Error(L);if(n>t.length)throw new Error(R);for(const n of t)G(n),q(n)}(t,n),t.length*t.byIndex(0).length>x)throw new Error(B)}var Y=function(t,n,e,r){return new(e||(e=Promise))((function(o,i){function s(t){try{u(r.next(t))}catch(t){i(t)}}function a(t){try{u(r.throw(t))}catch(t){i(t)}}function u(t){var n;t.done?o(t.value):(n=t.value,n instanceof e?n:new e((function(t){t(n)}))).then(s,a)}u((r=r.apply(t,n||[])).next())}))};var H=function(t,n,e,r){return new(e||(e=Promise))((function(o,i){function s(t){try{u(r.next(t))}catch(t){i(t)}}function a(t){try{u(r.throw(t))}catch(t){i(t)}}function u(t){var n;t.done?o(t.value):(n=t.value,n instanceof e?n:new e((function(t){t(n)}))).then(s,a)}u((r=r.apply(t,n||[])).next())}))};const $=0,z=1,j="Feature #",K="Label";function X(t,n,r,i,s,a,u,l){return H(this,void 0,void 0,(function*(){!function(t,n,e,r,o){if(e>=r)throw new Error(F);if(n<T)throw new Error(U);if(t<M)throw new Error(D);if(o<O||o>P)throw new Error(k)}(i,s,a,u,l);const c=o.Column.fromList("double","kernelParams",n);let f;const h=async function(t,n,r,o,i,s,a){return new Promise(((u,l)=>{const c=new Worker(new URL(e.p+e.u(374),e.b));c.postMessage(N(EDA.generateDataset.arguments,[t,n,r,o,i,s,a])),c.onmessage=function(t){c.terminate(),u(b(EDA.generateDataset,t.data))}}))}(t,c,i,s,a,u,l);yield h.then((t=>{f=t}),(t=>{throw new Error(`Error: ${t}`)})),f[z].name=K;for(const t of f[$])t.name=j+t.name;const m=o.DataFrame.fromColumns(f[$]);return m.name=r,m.columns.add(f[z]),m}))}var Q=function(t,n,e,r){return new(e||(e=Promise))((function(o,i){function s(t){try{u(r.next(t))}catch(t){i(t)}}function a(t){try{u(r.throw(t))}catch(t){i(t)}}function u(t){var n;t.done?o(t.value):(n=t.value,n instanceof e?n:new e((function(t){t(n)}))).then(s,a)}u((r=r.apply(t,n||[])).next())}))};const Z=0,J=1,tt=2,nt=3,et=4,rt=0,ot=1,it=2,st=3,at=4,ut=5,lt=6,ct=7,ft=0,ht=1,mt=2,dt=3,pt=0,gt=0,vt=1,yt=0,wt=1,Et=0,At=0,_t=0,It=0,Ct="gamma must be strictly positive.",Nt="sigma must be strictly positive.",bt="c must be strictly positive.",St="d must be strictly positive.",Mt="incorrect kernel.",Tt="Labels",Ot="predicted",Pt="correctness",xt="Confusion matrix",Lt="mean",Rt="std dev",Ft="alpha",Ut="weight",Dt="gamma",kt="kernel",Bt="kernel params",Vt="kernel param 1",Gt="kernel param 2",qt="features count",Wt="train samples count",Yt="Train error,%",Ht=["linear","polynomial","RBF","sigmoid"],$t="positive (P)",zt="negative (N)",jt="predicted positive (PP)",Kt="predicted negative (PN)",Xt="Sensitivity",Qt="Specificity",Zt="Balanced accuracy",Jt="Positive predicitve value",tn="Negative predicitve value",nn="Model report",en="Predicted labels",rn="Train labels",on="Prediction correctness",sn="prediction",an=4,un=3,ln=2,cn=0,fn=1,hn=2,mn=0,dn=1;function pn(t,n,r){return Q(this,void 0,void 0,(function*(){const i=n.columns,s=i.byName(r);return i.remove(r),yield function(t,n,r){return Q(this,void 0,void 0,(function*(){!function(t){if(t.gamma<=Et)throw new Error(Ct);switch(t.kernel){case Z:return;case tt:if(t.sigma<=At)throw new Error(Nt);return;case J:if(t.cParam<=_t)throw new Error(bt);if(t.dParam<=It)throw new Error(St);return;case nt:return;default:throw new Error(Mt)}}(t);const i=[mn,mn];switch(t.kernel){case Z:break;case tt:i[pt]=t.sigma;break;case J:i[gt]=t.cParam,i[vt]=t.dParam;break;case nt:i[yt]=t.kappa,i[wt]=t.theta;break;default:throw new Error(Mt)}const s=o.Column.fromList("double",Bt,i),a=n.toList(),u=a[0].length+dn,l=a.length+dn,c=et;let f;const h=async function(t,n,r,o,i,s,a,u){return new Promise(((l,c)=>{const f=new Worker(new URL(e.p+e.u(467),e.b));f.postMessage(N(EDA.trainAndAnalyzeLSSVM.arguments,[t,n,r,o,i,s,a,u])),f.onmessage=function(t){f.terminate(),l(b(EDA.trainAndAnalyzeLSSVM,t.data))}}))}(t.gamma,t.kernel,s,u,l,c,n,r);yield h.then((t=>{f=t}),(t=>{throw new Error(`Error: ${t}`)})),f[ot].name=Lt,f[it].name=Rt,f[st].name=Ft,f[at].name=Ut,f[ut].name=Ot,f[lt].name=Pt,f[ct].name=xt;const m={trainGamma:t.gamma,kernelType:t.kernel,kernelParams:s,trainLabels:r,normalizedTrainData:o.DataFrame.fromColumns(f[rt]),means:f[ot],stdDevs:f[it],modelParams:f[st],modelWeights:f[at],predictedLabels:f[ut],correctness:f[lt],confusionMatrix:f[ct],trainError:void 0,featuresCount:a.length,trainSamplesCount:a[0].length};return function(t){const n=t.confusionMatrix.getRawData(),e=n[ft],r=n[dt],o=n[mt],i=n[ht],s=e+i,a=o+r,u=e/s,l=r/a,c=e/(e+o),f=r/(r+i),h=(e+r)/(s+a),m=(u+l)/2;t.sensitivity=u,t.specificity=l,t.balancedAccuracy=m,t.positivePredicitveValue=c,t.negativePredicitveValue=f,t.trainError=100*(1-h)}(m),m}))}(t,i,s)}))}function gn(n,e){n.name=nn,n.columns.add(e.trainLabels),n.columns.add(e.predictedLabels),n.columns.add(e.correctness);const r=t.shell.addTableView(n);r.addViewer(o.Viewer.form(function(t){const n=t.kernelParams.getRawData();return o.DataFrame.fromColumns([o.Column.fromList("double",Dt,[t.trainGamma]),o.Column.fromStrings(kt,[Ht[t.kernelType]]),o.Column.fromList("double",Vt,[n[0]]),o.Column.fromList("double",Gt,[n[1]]),o.Column.fromList("double",qt,[t.featuresCount]),o.Column.fromList("double",Wt,[t.trainSamplesCount]),o.Column.fromList("double",Yt,[t.trainError]),o.Column.fromList("double",Zt,[t.balancedAccuracy]),o.Column.fromList("double",Xt,[t.sensitivity]),o.Column.fromList("double",Qt,[t.specificity]),o.Column.fromList("double",Jt,[t.positivePredicitveValue]),o.Column.fromList("double",tn,[t.negativePredicitveValue])])}(e))),r.addViewer(o.Viewer.scatterPlot(n,{title:en,color:e.predictedLabels.name})),r.addViewer(o.Viewer.scatterPlot(n,{title:rn,color:e.trainLabels.name})),r.addViewer(o.Viewer.grid(function(t){const n=t.confusionMatrix.getRawData();return o.DataFrame.fromColumns([o.Column.fromStrings("",[$t,zt]),o.Column.fromList("int",jt,[n[ft],n[mt]]),o.Column.fromList("int",Kt,[n[ht],n[dt]])])}(e))),r.addViewer(o.Viewer.scatterPlot(n,{title:on,color:e.correctness.name}))}function vn(t){const n=t.normalizedTrainData.columns,e=t.trainSamplesCount,r=t.featuresCount,o=new Uint8Array(an*(un+ln+e+r+r+e+dn+r+dn+r*e)),i=o.buffer;let s=0;const a=new Int32Array(i,s,un);a[cn]=t.kernelType,a[fn]=e,a[hn]=r,s+=un*an;let u=new Float32Array(i,s,ln);u.set(t.kernelParams.getRawData()),s+=ln*an,u=new Float32Array(i,s,e),u.set(t.trainLabels.getRawData()),s+=e*an,u=new Float32Array(i,s,r),u.set(t.means.getRawData()),s+=r*an,u=new Float32Array(i,s,r),u.set(t.stdDevs.getRawData()),s+=r*an,u=new Float32Array(i,s,e+dn),u.set(t.modelParams.getRawData()),s+=(e+dn)*an,u=new Float32Array(i,s,r+dn),u.set(t.modelWeights.getRawData()),s+=(r+dn)*an;for(const t of n)u=new Float32Array(i,s,r),u.set(t.getRawData()),s+=r*an;return o}function yn(t,n){return Q(this,void 0,void 0,(function*(){const r=function(t){const n=t.buffer;let e=0;const r=new Int32Array(n,e,un);e+=un*an;const i=r[fn],s=r[hn],a=o.Column.fromFloat32Array(Bt,new Float32Array(n,e,ln));e+=ln*an;const u=o.Column.fromFloat32Array(Tt,new Float32Array(n,e,i));e+=i*an;const l=o.Column.fromFloat32Array(Lt,new Float32Array(n,e,s));e+=s*an;const c=o.Column.fromFloat32Array(Rt,new Float32Array(n,e,s));e+=s*an;const f=o.Column.fromFloat32Array(Ft,new Float32Array(n,e,i+dn));e+=(i+dn)*an;const h=o.Column.fromFloat32Array(Ut,new Float32Array(n,e,s+dn));e+=(s+dn)*an;const m=[];for(let t=0;t<i;t++)m.push(o.Column.fromFloat32Array(t.toString(),new Float32Array(n,e,s))),e+=s*an;const d=o.DataFrame.fromColumns(m);return{kernelType:r[cn],kernelParams:a,trainLabels:u,means:l,stdDevs:c,modelParams:f,modelWeights:h,normalizedTrainData:d}}(new Uint8Array(n)),i=yield function(t,n){return Q(this,void 0,void 0,(function*(){let r;const o=async function(t,n,r,o,i,s,a,u,l){return new Promise(((c,f)=>{const h=new Worker(new URL(e.p+e.u(367),e.b));h.postMessage(N(EDA.predictByLSSVM.arguments,[t,n,r,o,i,s,a,u,l])),h.onmessage=function(t){h.terminate(),c(b(EDA.predictByLSSVM,t.data))}}))}(t.kernelType,t.kernelParams,t.normalizedTrainData.columns,t.trainLabels,t.means,t.stdDevs,t.modelParams,t.modelWeights,n);return yield o.then((t=>{r=t}),(t=>{throw new Error(`Error: ${t}`)})),r}))}(r,t.columns);return i.name=sn,o.DataFrame.fromColumns([i])}))}var wn,En,An,_n,In,Cn,Nn,bn;!function(t){t[t.COMPUTE_COMPONENTS=0]="COMPUTE_COMPONENTS",t[t.PERFORM_MVA=1]="PERFORM_MVA",t[t.DEMO=2]="DEMO"}(wn||(wn={})),function(t){t.NO_DF="No dataframe is opened",t.NO_COLS="No numeric columns without missing values",t.ONE_COL="No columns to be used as features (just one numeric columns without missing values)",t.EMPTY_DF="Dataframe is empty"}(En||(En={})),function(t){t.PREDICT="Predict",t.USING="Using",t.COMPONENTS="Components",t.PLS="PLS",t.MVA="Multivariate Analysis (PLS)",t.RUN="RUN",t.NAMES="Names",t.MODEL="Observed vs. Predicted",t.FEATURE="Feature",t.REGR_COEFS="Regression Coefficients",t.XLOADING="x.loading.p",t.LOADINGS="Loadings",t.XSCORE="x.score.t",t.YSCORE="y.score.u",t.SCORES="Scores",t.EXPL_VAR="Explained Variance",t.EXPLORE="Explore"}(An||(An={})),function(t){t.PREDICT="Column with the response variable",t.FEATURES="Predictors (features)",t.COMPONENTS="Number of PLS components",t.PLS="Compute PLS components",t.MVA="Perform multivariate analysis",t.NAMES="Names of data samples"}(_n||(_n={})),function(t){t.PLS="https://datagrok.ai/help/explore/multivariate-analysis/pls#pls-components",t.MVA="https://datagrok.ai/help/explore/multivariate-analysis/pls",t.MODEL="https://datagrok.ai/help/explore/multivariate-analysis/plots/predicted-vs-reference",t.COEFFS="https://datagrok.ai/help/explore/multivariate-analysis/plots/regression-coefficients",t.LOADINGS="https://datagrok.ai/help/explore/multivariate-analysis/plots/loadings",t.EXPL_VARS="https://datagrok.ai/help/explore/multivariate-analysis/plots/explained-variance",t.SCORES="https://datagrok.ai/help/explore/multivariate-analysis/plots/scores"}(In||(In={})),function(t){t[t.DEFAULT=3]="DEFAULT",t[t.MIN=1]="MIN"}(Cn||(Cn={})),function(t){t.PREFIX="PLS",t.SUFFIX="(predicted)",t.COMP="component",t.COMPS="components"}(Nn||(Nn={})),function(t){t[t.PREDICTION=0]="PREDICTION",t[t.REGR_COEFFS=1]="REGR_COEFFS",t[t.T_SCORES=2]="T_SCORES",t[t.U_SCORES=3]="U_SCORES",t[t.X_LOADINGS=4]="X_LOADINGS",t[t.Y_LOADINGS=5]="Y_LOADINGS"}(bn||(bn={}));const Sn="Int",Mn=6,Tn=[.49,.79,.99],On=1,Pn=200,xn=200;var Ln;!function(t){t.AXIS="#838383",t.CIRCLE="#0000FF"}(Ln||(Ln={}));const Rn="# Data\nEach car has many features - patterns extraction is complicated.\n\n# Model\nPredict car price by its other features.\n\n# Try\nPress 'RUN' to perform multivariate analysis using partial least squares\n([PLS](https://en.wikipedia.org/wiki/Partial_least_squares_regression)) regression.\n\n# Essence\nThe method finds the latent factors that\n\n* capture the maximum variance in the features\n* maximize correlation with the response variable",Fn=[{caption:An.MODEL,text:"Closer to the line means better price prediction."},{caption:An.SCORES,text:"The latent factor values for each data sample reflect the similarities and dissimilarities among observations."},{caption:An.LOADINGS,text:"The impact of each feature on the latent factors: higher loading means stronger influence."},{caption:An.REGR_COEFS,text:"Parameters of the obtained linear model: features make different contribution to the prediction."},{caption:An.EXPL_VAR,text:"How well the latent components fit source data: closer to one means better fit."}],Un=Fn.map((t=>`# ${t.caption}\n\n${t.text}`)).join("\n\n")+`\n\n# Learn more\n \n * [Multivariate analysis](${In.MVA}),\n * [ANOVA](https://datagrok.ai/help/explore/anova)`;var Dn=function(t,n,e,r){return new(e||(e=Promise))((function(o,i){function s(t){try{u(r.next(t))}catch(t){i(t)}}function a(t){try{u(r.throw(t))}catch(t){i(t)}}function u(t){var n;t.done?o(t.value):(n=t.value,n instanceof e?n:new e((function(t){t(n)}))).then(s,a)}u((r=r.apply(t,n||[])).next())}))};const kn=Math.min,Bn=Math.max;function Vn(t){return Dn(this,void 0,void 0,(function*(){W(t.features,t.components),G(t.predict),q(t.predict);const n=yield async function(t,n,r,o){return new Promise(((t,i)=>{const s=new Worker(new URL(e.p+e.u(334),e.b));s.postMessage(N(EDA.partialLeastSquareRegression.arguments,[n,r,o])),s.onmessage=function(n){s.terminate(),t(b(EDA.partialLeastSquareRegression,n.data))}}))}(t.table,t.features,t.predict,t.components);return{prediction:n[bn.PREDICTION],regressionCoefficients:n[bn.REGR_COEFFS],tScores:n[bn.T_SCORES],uScores:n[bn.U_SCORES],xLoadings:n[bn.X_LOADINGS],yLoadings:n[bn.Y_LOADINGS]}}))}function Gn(e){return Dn(this,void 0,void 0,(function*(){const r=t.shell.t;if(null===r)return void t.shell.warning(En.NO_DF);if(0===r.rowCount)return void t.shell.warning(En.EMPTY_DF);const i=[],s=[],a=[],u=t=>(t.type===o.COLUMN_TYPE.INT||t.type===o.COLUMN_TYPE.FLOAT)&&0===t.stats.missingValueCount;if(r.columns.toList().forEach((t=>{u(t)?(i.push(t.name),s.push(t)):t.type===o.COLUMN_TYPE.STRING&&a.push(t)})),0===i.length)return void t.shell.warning(En.NO_COLS);if(1===i.length)return void t.shell.warning(En.ONE_COL);let l=s[s.length-1];const c=n.columnInput(An.PREDICT,r,l,(()=>{l=c.value,y()}),{filter:t=>u(t)});let f;c.setTooltip(_n.PREDICT);const h=n.columnsInput(An.USING,r,(()=>{}),{available:i});h.onInput((()=>y())),h.setTooltip(_n.FEATURES);let m=kn(i.length-1,Cn.DEFAULT);const d=n.input.forProperty(o.Property.fromOptions({name:An.COMPONENTS,inputType:Sn,defaultValue:m,showPlusMinus:!0,min:Cn.MIN}));let p,g,v;d.onInput((()=>y())),d.setTooltip(_n.COMPONENTS),e===wn.COMPUTE_COMPONENTS?(p=An.PLS,g=In.PLS,v=_n.PLS):(p=An.MVA,g=In.MVA,v=_n.MVA);const y=()=>{var t;h.value=h.value.filter((t=>t!==l)),f=h.value,d.value=kn(Bn(null!==(t=d.value)&&void 0!==t?t:m,Cn.MIN),f.length),m=d.value,A.getButton(An.RUN).disabled=0===f.length||m<=0};let w=a.length>0?a[0]:null;const E=n.columnInput(An.NAMES,r,w,(()=>w=c.value),{filter:t=>t.type===o.COLUMN_TYPE.STRING});E.setTooltip(_n.NAMES),E.root.hidden=0===a.length||e===wn.COMPUTE_COMPONENTS;const A=n.dialog({title:p,helpUrl:g}).add(n.form([c,h,d,E])).addButton(An.RUN,(()=>Dn(this,void 0,void 0,(function*(){A.close(),yield function(e,r){var i,s;return Dn(this,void 0,void 0,(function*(){const a=yield Vn(e),u=a.tScores,l=e.table.columns,c=e.features.names(),f=r===wn.COMPUTE_COMPONENTS?Nn.PREFIX:An.XSCORE;if(u.forEach(((t,n)=>{t.name=l.getUnusedName(`${f}${n+1}`),l.add(t)})),r===wn.COMPUTE_COMPONENTS)return;const h=t.shell.tableView(e.table.name),m=o.DataFrame.fromColumns([o.Column.fromStrings(An.FEATURE,c),a.regressionCoefficients]);a.xLoadings.forEach(((t,n)=>{t.name=m.columns.getUnusedName(`${An.XLOADING}${n+1}`),m.columns.add(t)}));const d=a.prediction;d.name=l.getUnusedName(`${e.predict.name} ${Nn.SUFFIX}`),l.add(d);const p=h.addViewer(o.Viewer.scatterPlot(e.table,{title:An.MODEL,xColumnName:e.predict.name,yColumnName:d.name,showRegressionLine:!0,markerType:o.MARKER_TYPE.CIRCLE,labels:null===(i=e.names)||void 0===i?void 0:i.name,help:In.MODEL}));a.regressionCoefficients.name=An.REGR_COEFS;const g=h.addViewer(o.Viewer.barChart(m,{title:An.REGR_COEFS,splitColumnName:An.FEATURE,valueColumnName:a.regressionCoefficients.name,valueAggrType:o.AGG.AVG,help:In.COEFFS,showValueSelector:!1,showStackSelector:!1}));a.xLoadings.forEach(((t,n)=>t.name=`${An.XLOADING}${n+1}`));const v=h.addViewer(o.Viewer.scatterPlot(m,{title:An.LOADINGS,xColumnName:`${An.XLOADING}1`,yColumnName:`${An.XLOADING}${a.xLoadings.length>1?"2":"1"}`,markerType:o.MARKER_TYPE.CIRCLE,labels:An.FEATURE,help:In.LOADINGS})),y=u.map((t=>t.name));a.uScores.forEach(((t,n)=>{t.name=l.getUnusedName(`${An.YSCORE}${n+1}`),l.add(t),y.push(t.name)}));const w=o.Viewer.scatterPlot(e.table,{title:An.SCORES,xColumnName:u[0].name,yColumnName:u.length>1?u[1].name:a.uScores[0],markerType:o.MARKER_TYPE.CIRCLE,labels:null===(s=e.names)||void 0===s?void 0:s.name,help:In.SCORES,showViewerFormulaLines:!0}),E=[],A=(t,n)=>{E.push({type:"line",formula:t,width:On,visible:!0,title:" ",min:-n,max:n,color:Ln.CIRCLE})};y.forEach((t=>{const n="${"+t+"}";E.push({type:"line",formula:`${n} = 0`,width:On,visible:!0,title:" ",color:Ln.AXIS}),y.forEach((t=>{const e="${"+t+"}";Tn.forEach((t=>{A(e+` = sqrt(${t*t} - ${n} * ${n})`,t),A(e+` = -sqrt(${t*t} - ${n} * ${n})`,t)}))}))})),w.meta.formulaLines.addAll(E),h.addViewer(w);const _=a.yLoadings.getRawData(),I=a.xLoadings.map((t=>t.getRawData())),C=e.table.rowCount,N=c.length,b=e.components,S=new Float32Array(b),M=[],T=[];for(let t=0;t<N;++t)T.push(new Float32Array(b));S[0]=Math.pow(_[0],2)/C,M.push(`1 ${Nn.COMP}`),T.forEach(((t,n)=>{t[0]=Math.pow(I[0][n],2)/C}));for(let t=1;t<b;++t)S[t]=S[t-1]+Math.pow(_[t],2)/C,T.forEach(((n,e)=>n[t]=n[t-1]+Math.pow(I[t][e],2)/C)),M.push(`${t+1} ${Nn.COMPS}`);const O=o.DataFrame.fromColumns([o.Column.fromStrings(An.COMPONENTS,M),o.Column.fromFloat32Array(e.predict.name,S)]);T.forEach(((t,n)=>O.columns.add(o.Column.fromFloat32Array(c[n],t))));const P=h.addViewer(o.Viewer.barChart(O,{title:An.EXPL_VAR,splitColumnName:An.COMPONENTS,valueColumnName:e.predict.name,valueAggrType:o.AGG.AVG,help:In.EXPL_VARS,showCategorySelector:!1,showStackSelector:!1}));if(r===wn.DEMO){const e=[p,w,v,g,P].map(((t,n)=>({text:Fn[n].text,showNextTo:t.root})));n.hints.addTextHint({title:An.EXPLORE,pages:e}).helpUrl=In.MVA,t.shell.windows.help.showHelp(n.markdown(Un))}}))}({table:r,features:o.DataFrame.fromColumns(f).columns,predict:l,components:m,names:w},e)}))),void 0,v).show({x:Pn,y:xn});setTimeout((()=>{h.value=s.filter((t=>t!==l)),f=h.value}),Mn),t.shell.v.append(A.root)}))}var qn,Wn=e(2162);function Yn(t){if(t<=0||t>=1)throw new Error(qn.INCORRECT_SIGNIFICANCE_LEVEL)}function Hn(t){const n=t.size;if(n<=0)throw new Error(qn.INCORRECT_SAMPLE_SIZE);return 1===n?0:(t.sumOfSquares-Math.pow(t.sum,2)/n)/(n-1)}function $n(t,n,e=.05){Yn(e);const r=Hn(t),o=Hn(n);return 0===o?r===o:r/o<Wn.centralF.inv(1-e,t.size-1,n.size-1)}!function(t){t.NON_EQUAL_FACTORS_VALUES_SIZE="non-equal sizes of factor and values arrays. INPUT ERROR.",t.INCORRECT_SIGNIFICANCE_LEVEL="incorrect significance level. It must be from the interval (0, 1). INPUT ERROR.",t.INCORRECT_SAMPLE_SIZE="incorrect size of sample. DATA FACTORIZAING ERROR.",t.NON_EQUAL_VARIANCES="variances are not equal.",t.NON_NORMAL_DISTRIB="non-normal distribution.",t.UNSUPPORTED_COLUMN_TYPE="unsupported column type.",t.INCORRECT_CATEGORIES_COL_TYPE="incorrect categories column type.",t.ANOVA_FAILED_JUST_ONE_CAT="ANOVA filed: there should be at least 2 categories."}(qn||(qn={}));class zn{constructor(t,n,e=!1,r=.05){if(this.isNormDistrib=void 0,this.categories=[],t.type!==o.COLUMN_TYPE.STRING)throw new Error;if(t.length!==n.length)throw new Error(qn.NON_EQUAL_FACTORS_VALUES_SIZE);this.setStats(t,n,e,r)}isNormal(){return!0}areVarsEqual(t=.05){const n=this.catCount;if(1===n)return!0;const e={sum:this.sums[0],sumOfSquares:this.sumsOfSquares[0],size:this.subSampleSizes[0]};for(let r=1;r<n;++r)if(!$n(e,{sum:this.sums[r],sumOfSquares:this.sumsOfSquares[r],size:this.subSampleSizes[r]},t))return!1;return!0}getOneWayAnova(){const t=this.catCount;if(1===t)throw new Error(qn.ANOVA_FAILED_JUST_ONE_CAT);let n=0,e=0;const r=this.size;let o=0;for(let r=0;r<t;++r)n+=this.sums[r],e+=this.sumsOfSquares[r],o+=Math.pow(this.sums[r],2)/this.subSampleSizes[r];const i=e-Math.pow(n,2)/r,s=o-Math.pow(n,2)/r,a=i-s,u=t-1,l=r-t,c=s/u,f=a/l,h=c/f;return{ssBn:s,ssWn:a,ssTot:i,dfBn:u,dfWn:l,dfTot:r-1,msBn:c,msWn:f,fStat:h,pValue:1-Wn.centralF.cdf(h,u,l)}}setStats(t,n,e=!1,r=.05){const i=n.type,s=n.length;switch(i){case o.COLUMN_TYPE.INT:case o.COLUMN_TYPE.FLOAT:this.categories=t.categories;const e=this.categories.length;this.catCount=e,this.size=s;const r=n.getRawData(),i=t.getRawData(),a=new Float64Array(e).fill(0),u=new Float64Array(e).fill(0),l=new Int32Array(e).fill(0);for(let t=0;t<s;++t){const n=i[t];a[n]+=r[t],u[n]+=Math.pow(r[t],2),++l[n]}this.sums=a,this.sumsOfSquares=u,this.subSampleSizes=l;break;default:throw new Error(qn.UNSUPPORTED_COLUMN_TYPE)}}}var jn=function(t,n,e,r){return new(e||(e=Promise))((function(o,i){function s(t){try{u(r.next(t))}catch(t){i(t)}}function a(t){try{u(r.throw(t))}catch(t){i(t)}}function u(t){var n;t.done?o(t.value):(n=t.value,n instanceof e?n:new e((function(t){t(n)}))).then(s,a)}u((r=r.apply(t,n||[])).next())}))};function Kn(t,n,r,o){return jn(this,void 0,void 0,(function*(){return new Promise((function(i,s){const a=new Worker(new URL(e.p+e.u(796),e.b));a.postMessage({embedX:t,embedY:n,minPts:o,epsilon:r}),a.onmessage=({data:{error:t,clusters:n}})=>{a.terminate(),t?s(t):i(n)}}))}))}e(7905);let Xn=null;function Qn(){return t=this,n=void 0,r=function*(){return Xn||(Xn=yield navigator.gpu.requestAdapter(),null!=Xn)?(yield Xn.requestAdapterInfo()).description:null},new((e=void 0)||(e=Promise))((function(o,i){function s(t){try{u(r.next(t))}catch(t){i(t)}}function a(t){try{u(r.throw(t))}catch(t){i(t)}}function u(t){var n;t.done?o(t.value):(n=t.value,n instanceof e?n:new e((function(t){t(n)}))).then(s,a)}u((r=r.apply(t,n||[])).next())}));var t,n,e,r}var Zn,Jn,te,ne,ee,re,oe,ie,se;(Jn=Zn||(Zn={})).EUCLIDEAN="EUCLIDEAN",Jn.MANHATTAN="MANHATTAN",Zn.EUCLIDEAN,Zn.MANHATTAN,(ne=te||(te={})).HAMMING="Hamming",ne.EUCLIDEAN="Euclidean",ne.MANHATTAN="Manhattan",ne.TANIMOTO="Tanimoto",ne.LEVENSTEIN="Levenshtein",ne.NEEDLEMAN_WUNSCH="Needlemann-Wunsch",ne.MONOMER_CHEMICAL_DISTANCE="Monomer chemical distance",ne.SOKAL="Sokal",ne.COSINE="Cosine",ne.ASYMMETRIC="Asymmetric",ne.Difference="Difference",ne.OneHot="One-Hot",te.HAMMING,te.EUCLIDEAN,te.MANHATTAN,te.TANIMOTO,te.LEVENSTEIN,te.NEEDLEMAN_WUNSCH,te.MONOMER_CHEMICAL_DISTANCE,te.SOKAL,te.COSINE,te.ASYMMETRIC,te.Difference,te.OneHot,te.HAMMING,te.EUCLIDEAN,te.MANHATTAN,te.TANIMOTO,te.SOKAL,te.COSINE,te.ASYMMETRIC,te.LEVENSTEIN,te.NEEDLEMAN_WUNSCH,te.MONOMER_CHEMICAL_DISTANCE,te.Difference,te.OneHot,new Set([te.HAMMING,te.LEVENSTEIN,te.NEEDLEMAN_WUNSCH,te.MONOMER_CHEMICAL_DISTANCE,te.OneHot]),new Set([te.HAMMING,te.EUCLIDEAN,te.MANHATTAN,te.MONOMER_CHEMICAL_DISTANCE,te.LEVENSTEIN,te.NEEDLEMAN_WUNSCH,te.TANIMOTO,te.COSINE,te.SOKAL,te.ASYMMETRIC,te.OneHot,te.Difference]),new Set([te.EUCLIDEAN,te.MANHATTAN,te.OneHot,te.Difference]),new Set([te.EUCLIDEAN,te.MANHATTAN,te.Difference]),new Set([te.EUCLIDEAN,te.MANHATTAN,te.Difference]),new Set([te.TANIMOTO,te.COSINE,te.SOKAL,te.ASYMMETRIC]),function(t){t.ADD="ADD",t.SUB="SUB",t.MULT="MULT"}(ee||(ee={})),function(t){t.SQUARE="SQUARE",t.INVERSE="INVERSE",t.TRANSPOSE="TRANSPOSE",t.NORM="NORM",t.COLUMN_NORM="COLUMN_NORM"}(re||(re={})),function(t){t.SCALARMULT="SCALARMULT",t.SCALARADD="SCALARADD",t.SCALARPOW="SCALARPOW"}(oe||(oe={})),Object.prototype.toString,(se=ie||(ie={})).UMAP="UMAP",se.T_SNE="t-SNE",o.SEMTYPE.MOLECULE,o.SEMTYPE.MACROMOLECULE;class ae{constructor(){this.epsilon={uiName:"Epsilon",value:.01,tooltip:"Minimum distance between cluster points",min:0,max:2,step:.005},this.minPts={uiName:"Minimum points",value:4,tooltip:"Minimum number of points in cluster",min:1,max:1e3,step:1}}}const ue="bypassLargeDataWarning",le="show-scatterplot-progress";var ce,fe;(fe=ce||(ce={})).EUCLIDEAN="EUCLIDEAN",fe.MANHATTAN="MANHATTAN";const he=rxjs;var me=e(3379),de=e.n(me),pe=e(7795),ge=e.n(pe),ve=e(569),ye=e.n(ve),we=e(3565),Ee=e.n(we),Ae=e(9216),_e=e.n(Ae),Ie=e(4589),Ce=e.n(Ie),Ne=e(9414),be={};be.styleTagTransform=Ce(),be.setAttributes=Ee(),be.insert=ye().bind(null,"head"),be.domAPI=ge(),be.insertStyleElement=_e(),de()(Ne.Z,be),Ne.Z&&Ne.Z.locals&&Ne.Z.locals;class Se{constructor(){this.learningRate={uiName:"Learninig rate",value:1,tooltip:"The initial learning rate for the embedding optimization"},this.nEpochs={uiName:"Epochs",value:0,tooltip:"The number of epochs to optimize embeddings via SGD. Computed automatically if set to 0"},this.nNeighbors={uiName:"Neighbors",value:15,tooltip:"The number of nearest neighbors to construct the fuzzy manifold"},this.spread={uiName:"Spread",value:1,tooltip:"The effective scale of embedded points, used with min distance to control \n the clumped/dispersed nature of the embedding"},this.minDist={uiName:"Min distance",value:.1,tooltip:"The effective minimum distance between embedded points, \n used with spread to control the clumped/dispersed nature of the embedding"},this.randomSeed={uiName:"Random seed",value:null,tooltip:"Random seed",type:"string"},this.useWebGPU={uiName:"Use WebGPU",value:!1,tooltip:"Use WebGPU for KNN computations",type:"boolean"},Qn().then((t=>{t?this.useWebGPU.tooltip+=` (${t})`:(this.useWebGPU.value=!1,this.useWebGPU.forceRemove=!0)}))}}class Me{constructor(){this.epsilon={uiName:"Epsilon",value:10,tooltip:"Epsilon is learning rate"},this.perplexity={uiName:"Perplexity",value:30,tooltip:"Roughly how many neighbors each point influences"}}}class Te{constructor(e={}){this.editorSettings={},this.columnOptEditors=[],this.columnOptEditorsRoot=n.div(),this.columnParamsEditorRoot=n.div(),this.weightsEditorRoot=n.div(),this.columnFunctionsMap={},this.methodsParams={[ie.UMAP]:new Se,[ie.T_SNE]:new Me},this.dbScanParams=new ae,this.methodSettingsDiv=n.inputs([]),this.dbScanSettingsDiv=n.inputs([]),this.supportedFunctions={},this.plotEmbeddingsInput=n.boolInput("Plot embeddings",!0),this.clusterEmbeddingsInput=n.boolInput("Cluster embeddings",!1),this.aggregationMethodInput=n.choiceInput("Aggregation",ce.EUCLIDEAN,[ce.EUCLIDEAN,ce.MANHATTAN]),this.aggregationMethodInput.setTooltip("Aggregation method for combining distances between columns"),this.onColumnsChanged=new he.Subject,this.editorSettings=e,this.columnParamsEditorAccordion=n.accordion(),o.Func.find({tags:["dim-red-preprocessing-function"]}).forEach((t=>{const n=t.options.get("supportedSemTypes")??"",e=t.friendlyName??t.name,r=t.options.get("supportedTypes")??"",o=t.options.get("supportedUnits")??"",i=t.options.get("supportedDistanceFunctions")??"";this.editorSettings.semtype&&!n.includes(this.editorSettings.semtype)||this.editorSettings.type&&!r.includes(this.editorSettings.type)||this.editorSettings.units&&!o.includes(this.editorSettings.units)||(this.supportedFunctions[e]={func:t,semTypes:n?n.split(","):[],types:r?r.split(","):[],units:o?o.split(","):[],distanceFunctions:i?i.split(","):[]})})),this.postProcessingEditor=new xe,this.tableInput=n.tableInput("Table",t.shell.tv.dataFrame,t.shell.tables,(()=>{this.onTableInputChanged()})),this.onTableInputChanged();let r=!1,i=!1;this.methodInput=n.choiceInput("Method",ie.UMAP,[ie.UMAP,ie.T_SNE],(()=>{r&&this.createAlgorithmSettingsDiv(this.methodSettingsDiv,this.methodsParams[this.methodInput.value])})),this.methodSettingsIcon=n.icons.settings((()=>{r=!r,r?this.createAlgorithmSettingsDiv(this.methodSettingsDiv,this.methodsParams[this.methodInput.value]):n.empty(this.methodSettingsDiv)}),"Modify methods parameters"),this.dbScanSettingsIcon=n.icons.settings((()=>{i=!i,i?this.createAlgorithmSettingsDiv(this.dbScanSettingsDiv,this.dbScanParams):n.empty(this.dbScanSettingsDiv)}),"Modify clustering parameters"),this.clusterEmbeddingsInput.classList.add("ml-dim-reduction-settings-input"),this.clusterEmbeddingsInput.root.prepend(this.dbScanSettingsIcon),this.methodInput.root.classList.add("ml-dim-reduction-settings-input"),this.methodInput.root.prepend(this.methodSettingsIcon),this.columnParamsEditorAccordion.addPane("Column options",(()=>this.columnOptEditorsRoot),!0,null,!1),this.columnParamsEditorAccordion.root.style.display="none",this.columnParamsEditorRoot.appendChild(this.columnParamsEditorAccordion.root),this.columnParamsEditorRoot.appendChild(this.weightsEditorRoot)}onTableInputChanged(){const t=this.tableInput.value;if(!t)return;n.empty(this.columnOptEditorsRoot),n.empty(this.weightsEditorRoot),this.columnFunctionsMap={},t.columns.toList().forEach((t=>{Object.keys(this.supportedFunctions).forEach((n=>{const e=this.supportedFunctions[n].semTypes,r=this.supportedFunctions[n].types,i=this.supportedFunctions[n].units,s=!e.length||t.semType&&e.includes(t.semType),a=!r.length||r.includes(t.type),u=!i.length||t.getTag(o.TAGS.UNITS)&&i.includes(t.getTag(o.TAGS.UNITS));s&&a&&u&&(this.columnFunctionsMap[t.name]||(this.columnFunctionsMap[t.name]=[]),this.columnFunctionsMap[t.name].push(n))}))}));const e=Object.keys(this.columnFunctionsMap),r=n.columnsInput("Columns",t,(()=>{this.onColumnsChanged.next(),n.empty(this.columnOptEditorsRoot),n.empty(this.weightsEditorRoot);const t=r.value;if(this.aggregationMethodInput.root.style.display=!t||t?.length<2?"none":"flex",!t||0===t.length)return void(this.columnParamsEditorAccordion.root.style.display="none");const e=[20,30,30,20];this.columnOptEditors=t.map((t=>new Oe(t,this.columnFunctionsMap[t.name].map((t=>this.supportedFunctions[t])),e)));const o=["Column","Encoding function","Similarity metric","Weight"].map(((t,r)=>n.h1(t,{style:{width:`${e[r]}%`,margin:0}})));n.tooltip.bind(o[1],"Encoding function for the column values"),n.tooltip.bind(o[2],"Distance/Similarity metric for the encoded column values"),n.tooltip.bind(o[3],"Weight of the column for combining distances between values");const i=n.divH(o,{classes:"ml-dim-reduction-column-editor-header-root"});this.columnOptEditorsRoot.appendChild(i);const s=n.divV([],{style:{maxHeight:"400px",overflow:"auto"}});this.columnOptEditors.forEach((t=>{s.appendChild(t.accordionDiv)})),this.columnOptEditorsRoot.appendChild(s),this.columnOptEditors.length>0&&(this.columnParamsEditorAccordion.root.style.display="flex")}),{available:e});r.fireChanged(),this.columnsInputRoot?(n.empty(this.columnsInputRoot),this.columnsInput=r,Array.from(this.columnsInput.root.children).forEach((t=>this.columnsInputRoot.appendChild(t)))):(this.columnsInputRoot=r.root,this.columnsInput=r)}createAlgorithmSettingsDiv(t,e){return n.empty(t),Object.keys(e).forEach((r=>{const o=e[r];if(!o.forceRemove){const e="string"===o.type?n.stringInput(o.uiName,o.value??"",(()=>{o.value=e.value})):"boolean"===o.type?n.boolInput(o.uiName,o.value??!1,(()=>{o.value=e.value})):n.floatInput(o.uiName,o.value,(()=>{o.value=e.value}));n.tooltip.bind(e.input??e.root,o.tooltip),t.append(e.root)}})),t}get algorithmOptions(){const t=this.methodsParams[this.methodInput.value],n={};return Object.keys(t).forEach((e=>{null!=t[e].value&&(n[e]=t[e].value)})),n}get dbScanOptions(){return{dbScanEpsilon:this.dbScanParams.epsilon.value??.01,dbScanMinPts:this.dbScanParams.minPts.value??4}}getEditor(){return n.div([this.tableInput.root,this.columnsInputRoot,this.columnParamsEditorRoot,this.aggregationMethodInput.root,this.methodInput.root,this.methodSettingsDiv,this.plotEmbeddingsInput,this.postProcessingEditor.root],{style:{minWidth:"420px"},classes:"ui-form"})}getParams(){return{table:this.tableInput.value,columns:this.columnsInput.value,methodName:this.methodInput.value,preprocessingFunctions:this.columnOptEditors.map((t=>t.preProcessingFunction)),distanceMetrics:this.columnOptEditors.map((t=>t.similarityMetricInput.value)),weights:this.columnOptEditors.map((t=>t.weight??1)),options:{...this.algorithmOptions,...this.dbScanOptions,preprocessingFuncArgs:this.columnOptEditors.map((t=>t.preprocessingFunctionSettings))},plotEmbeddings:this.plotEmbeddingsInput.value,clusterEmbeddings:!1,postProcessingFunction:this.postProcessingEditor.postProcessingFunction,postProcessingFunctionArgs:this.postProcessingEditor.args,aggreaggregationMethod:this.aggregationMethodInput.value}}}class Oe{constructor(t,e,r){this.preprocessingFuncSettingsDiv=n.div([]),this.preprocessingFunctionSettings={},this.editorDiv=n.div([]),this.hasExtraSettings=!0,this.functionsMap={},this.needsConfiguration=!1,this.weight=1,this.weightInput=n.floatInput("Weight",1,(()=>{this.weight=this.weightInput.value??1})),this.column=t,this.supportedFunctions=e.sort(((t,n)=>0!==t.units.length&&0!==n.units.length||t.units.length===n.units.length?t.units.length!==n.units.length?t.units.length-n.units.length:0===t.semTypes.length||0===n.semTypes.length?n.semTypes.length-t.semTypes.length:t.semTypes.length!==n.semTypes.length?t.semTypes.length-n.semTypes.length:t.types.length-n.types.length:n.units.length-t.units.length)),this.supportedFunctions.forEach((t=>{this.functionsMap[Pe(t.func)]=t.func})),this.preprocessingFunctionInput=n.choiceInput("Encoding function",Pe(this.supportedFunctions[0].func),this.supportedFunctions.map((t=>Pe(t.func))),(()=>{const t=this.preprocessingFunctionInput.value,e=this.functionsMap[t];this.preprocessingFunctionSettings={},this.hasExtraSettings=e.inputs.length>2;const r=this.supportedFunctions.find((n=>Pe(n.func)===t));this.getSimilarityMetricInput(r),n.empty(this.preprocessingFuncSettingsDiv),o=!1,this.hasExtraSettings?this.preprocessingFuncSettingsIcon.style.display="flex":this.preprocessingFuncSettingsIcon.style.display="none"})),this.preprocessingFunctionInput.root.style.display="flex",this.createSettingsDiv(this.preprocessingFuncSettingsDiv,this.supportedFunctions[0].func).then((()=>{n.empty(this.preprocessingFuncSettingsDiv)})),this.getSimilarityMetricInput(this.supportedFunctions[0]),this.hasExtraSettings=this.supportedFunctions[0].func.inputs.length>2;let o=!1;this.preprocessingFuncSettingsIcon=n.icons.settings((async()=>{o=!o,o?await this.createSettingsDiv(this.preprocessingFuncSettingsDiv,this.functionsMap[this.preprocessingFunctionInput.value]):n.empty(this.preprocessingFuncSettingsDiv)}),"Modify encoding function parameters"),this.preprocessingFunctionInput.root.classList.add("ml-dim-reduction-settings-input"),this.preprocessingFunctionInput.root.prepend(this.preprocessingFuncSettingsIcon),this.hasExtraSettings?this.preprocessingFuncSettingsIcon.style.display="flex":this.preprocessingFuncSettingsIcon.style.display="none",this.needsConfiguration=!(e.length<2&&!this.hasExtraSettings&&e[0].distanceFunctions.length<2);const i=n.h3(this.column.name,{classes:"ml-dim-reduction-column-editor-column-title"}),s=[i,this.preprocessingFunctionInput.root,this.similarityMetricInputRoot,this.weightInput.root];n.tooltip.bind(i,this.column.name),s.forEach(((t,n)=>{t.style.width=`${r[n]}%`})),s.forEach((t=>t.classList.add("ml-dim-reduction-column-editor-input-root")));const a=n.divH(s,{classes:"ml-dim-reduction-column-editor-root"});this.accordionDiv=n.divV([]),this.editorDiv.appendChild(a),this.editorDiv.appendChild(this.preprocessingFuncSettingsDiv),this.accordionDiv.appendChild(this.editorDiv)}getSimilarityMetricInput(t){const e=n.choiceInput("Similarity metric",t.distanceFunctions[0],t.distanceFunctions);this.similarityMetricInputRoot?(n.empty(this.similarityMetricInputRoot),this.similarityMetricInput=e,Array.from(this.similarityMetricInput.root.children).forEach((t=>this.similarityMetricInputRoot.appendChild(t)))):(this.similarityMetricInputRoot=e.root,this.similarityMetricInput=e)}get preProcessingFunction(){return this.functionsMap[this.preprocessingFunctionInput.value]}async createSettingsDiv(t,e){if(n.empty(t),e.inputs.length<3)return n.div();const r=e.prepare(),o=await r.buildEditor(n.div());for(let n=2;n<e.inputs.length;n++){const i=e.inputs[n],s=this.preprocessingFunctionSettings[i.name]||r.inputParams[e.inputs[n].name].value||i.defaultValue;s&&(this.preprocessingFunctionSettings[i.name]=s);const a=o.find((t=>t.property.name===i.name));a&&(null!==this.preprocessingFunctionSettings[i.name]&&void 0!==this.preprocessingFunctionSettings[i.name]&&(a.value=this.preprocessingFunctionSettings[i.name]),a.onChanged((()=>{this.preprocessingFunctionSettings[i.name]=a.value})),t.append(a.root))}return t.style.marginBottom="10px",t}}function Pe(t){return t.friendlyName??t.name}class xe{constructor(){this.postProcessingFunctionsMap={},this._root=n.div([]),this._postProcessingArgs={},this._argsElement=n.div([]),this._settingsOpened=!1,this._settingsIcon=n.icons.settings((async()=>{this._settingsOpened=!this._settingsOpened,this._settingsOpened?this._argsElement.style.display="block":this._argsElement.style.display="none"})),this._argsElement.style.display="none",o.Func.find({tags:["dim-red-postprocessing-function"]}).filter((t=>t.inputs.length>=2)).forEach((t=>{const n=t.friendlyName??t.name;this.postProcessingFunctionsMap[n]=t})),this.postProcessingFunctionsMap.None=null;const t=Object.keys(this.postProcessingFunctionsMap).find((t=>!!this.postProcessingFunctionsMap[t]?.options?.defaultPostProcessingFunction))??"None";this.postProcessingFunctionInput=n.choiceInput("Postprocessing",t,Object.keys(this.postProcessingFunctionsMap),(async()=>{await this.onFunctionChanged()}),{nullable:!1}),this.onFunctionChanged(),this.postProcessingFunctionInput.nullable=!1,this.postProcessingFunctionInput.classList.add("ml-dim-reduction-settings-input"),this.postProcessingFunctionInput.root.prepend(this._settingsIcon),this._root.appendChild(this.postProcessingFunctionInput.root),this._root.appendChild(this._argsElement)}get postProcessingFunction(){return this.postProcessingFunctionInput.value?this.postProcessingFunctionsMap[this.postProcessingFunctionInput.value]:null}async onFunctionChanged(){const t=this.postProcessingFunction;if(n.empty(this._argsElement),this._postProcessingArgs={},!t||t.inputs.length<3)return void(this._settingsIcon.style.display="none");this._settingsIcon.style.display="flex";const e=t.prepare(),r=await e.buildEditor(n.div());for(let n=2;n<t.inputs.length;n++){const o=t.inputs[n],i=this._postProcessingArgs[o.name]||e.inputParams[t.inputs[n].name].value||o.defaultValue;i&&(this._postProcessingArgs[o.name]=i);const s=r.find((t=>t.property.name===o.name));s&&(s.onChanged((()=>{this._postProcessingArgs[o.name]=s.value})),this._argsElement.append(s.root))}}get root(){return this._root}get args(){return this._postProcessingArgs}}const Le="dimensionality-reducer-terminate-event",Re=t=>null==t;class Fe extends Float32Array{}function Ue(t,n){return`${n} (${t.length>4?`${t.length} columns`:t.map((t=>t.name)).join(", ")})`}var De;!function(t){t.NO_DATAFRAME="No dataframe is opened",t.NO_MISSING_VALUES="No missing values",t.ONE_AVAILABLE_FEATURE="Not enough of feature columns to apply imputation using the KNN method",t.ONE_FEATURE_SELECTED="Imputation cannot be applied to",t.UNSUPPORTED_COLUMN_TYPE="Unsupported column type",t.UNSUPPORTED_IMPUTATION_STRATEGY="Unsupported imputation strategy",t.KNN_CANNOT_BE_APPLIED="KNN imputer cannot be applied: no columns to be used as features",t.KNN_NO_TARGET_COLUMNS="KNN imputer cannot be applied: no columns with missing values",t.KNN_NO_FEATURE_COLUMNS="KNN imputer cannot be applied: no feature columns",t.KNN_NOT_ENOUGH_OF_ROWS="KNN imputer cannot be applied: not enough of rows",t.KNN_IMPOSSIBLE_IMPUTATION="Imputation is impossible, no features can be used",t.INCORRECT_NEIGHBORS="Incorrect number of neighbors",t.KNN_FAILS="KNN IMPUTATION FAILS",t.CORE_ISSUE="Core issue",t.FAILED_TO_IMPUTE="Failed to impute",t.UNSUPPORTED_FILL_VALUE_TYPE="Unsupported fill value type",t.EMPTY_COLUMN="Column contains just null values",t.FAILS_TO_PREDICT_IMPUTATION_FAILS="Failed to predict imputation fails",t.WRONG_PREDICTIONS="wrong evaluation of KNN imputation fails"}(De||(De={}));const ke="copy";var Be;!function(t){t.KNN_IMPUTER="Impute",t.TABLE="Table",t.IN_PLACE="In-place",t.COLUMNS="Impute",t.FEATURES="Using",t.CANCEL="CANCEL",t.RUN="RUN",t.OK="OK",t.NEIGHBORS="Neighbors",t.DISTANCE="Distance",t.FILL="Fill",t.MARK="Mark",t.SIMPLE_IMPUTER="Simple impute",t.SETTINGS="Settings",t.KEEP_EMPTY="Keep empty"}(Be||(Be={}));const Ve="/help/transform/missing-values-imputation";var Ge;!function(t){t.TARGET="Columns with missing values that must be filled",t.FEATURES="Columns with features to be used for determining the 'nearest' elements in the KNN method",t.IN_PLACE="Defines whether to use in-place imputation or add a new column without missing values",t.METRIC="Type of metric between the feature values",t.WEIGHT="Weight",t.NEIGHBORS="Neighbors count used in the KNN method",t.DISTANCE="Type of distance between elements with the specified features",t.METRIC_SETTINGS="Show additional options",t.FILL_FAILED_ITEMS="Impute missing values using a simple approach: mean, median or most frequent",t.MARK_FAILED_ITEMS="Mark missing values cells with a color",t.FILL_VALUE="Fill value",t.IMPUTATION_SETTINGS="Simple imputation settings",t.KEEP_EMPTY="Defines whether to keep empty missing values failed to be imputed OR fill them using simple imputation"}(Ge||(Ge={}));const qe=[o.COLUMN_TYPE.INT,o.COLUMN_TYPE.FLOAT,o.COLUMN_TYPE.STRING,o.COLUMN_TYPE.DATE_TIME,o.COLUMN_TYPE.QNUM];function We(t){switch(t.type){case o.COLUMN_TYPE.INT:return o.INT_NULL;case o.COLUMN_TYPE.FLOAT:case o.COLUMN_TYPE.QNUM:case o.COLUMN_TYPE.DATE_TIME:return o.FLOAT_NULL;case o.COLUMN_TYPE.STRING:return t.max;default:throw new Error(De.UNSUPPORTED_COLUMN_TYPE)}}var Ye,He,$e;!function(t){t.ONE_HOT="One-hot",t.DIFFERENCE="Difference"}(Ye||(Ye={})),function(t){t.EUCLIDEAN="Euclidean",t.MANHATTAN="Manhattan"}(He||(He={})),function(t){t[t.WEIGHT=1]="WEIGHT",t[t.NEIGHBORS=4]="NEIGHBORS",t[t.IN_PLACE=1]="IN_PLACE",t[t.SELECTED=1]="SELECTED",t[t.KEEP_EMPTY=0]="KEEP_EMPTY"}($e||($e={}));const ze=1;function je(t,n,e){for(const t of n)if(!e.has(t))return!1;for(const r of t){const t=e.get(r);if(void 0===t)throw new Error(De.FAILS_TO_PREDICT_IMPUTATION_FAILS);for(const r of t){let t=!0;for(const o of n){const n=e.get(o);if(void 0===n)throw new Error(De.FAILS_TO_PREDICT_IMPUTATION_FAILS);if(!n.includes(r)){t=!1;break}}if(t)return!0}}return!1}function Ke(){let e=t.shell.t;if(null===e)return void t.shell.warning(De.NO_DATAFRAME);const r=[],i=[],s=[];e.columns.toList().filter((t=>qe.includes(t.type))).forEach((t=>{s.push(t.name),t.stats.missingValueCount>0&&(r.push(t),i.push(t.name))}));const a=function(t){const n=new Map;for(const e of t){if(!qe.includes(e.type))throw new Error(De.UNSUPPORTED_COLUMN_TYPE);if(0===e.stats.missingValueCount)continue;const t=[],r=We(e);e.getRawData().forEach(((n,e)=>{n===r&&t.push(e)})),n.set(e.name,t)}return n}(r);if(0===r.length)return void t.shell.info(De.NO_MISSING_VALUES);if(1===s.length)return void t.shell.error(De.ONE_AVAILABLE_FEATURE);let u=$e.IN_PLACE>0;const l=n.boolInput(Be.IN_PLACE,u,(()=>{var t;u=null!==(t=l.value)&&void 0!==t&&t}));l.setTooltip(Ge.IN_PLACE);let c=$e.KEEP_EMPTY>0;const f=n.boolInput(Be.KEEP_EMPTY,c,(()=>{var t;c=null!==(t=f.value)&&void 0!==t&&t}));f.setTooltip(Ge.KEEP_EMPTY);let h=$e.NEIGHBORS;const m=n.intInput(Be.NEIGHBORS,h,(()=>{const t=m.value;null===t?m.value=h:t>=ze?h=t:m.value=h}));m.setTooltip(Ge.NEIGHBORS);let d=He.EUCLIDEAN;const p=n.choiceInput(Be.DISTANCE,d,[He.EUCLIDEAN,He.MANHATTAN],(()=>{var t;return d=null!==(t=p.value)&&void 0!==t?t:He.EUCLIDEAN}));p.setTooltip(Ge.DISTANCE);let g=r.map((t=>t.name));const v=n.columnsInput(Be.COLUMNS,e,(()=>{g=v.value.map((t=>t.name)),A()}),{available:i,checked:i});v.setTooltip(Ge.TARGET);let y=s;const w=n.columnsInput(Be.FEATURES,e,(()=>{y=w.value.map((t=>t.name)),y.length>0?(A(),I.forEach(((t,n)=>t.hidden=!y.includes(n)))):E()}),{available:s,checked:s});w.setTooltip(Ge.FEATURES);const E=()=>{N.getButton(Be.RUN).disabled=!0,l.root.hidden=!0,f.root.hidden=!0,m.root.hidden=!0,S.hidden=!0,C.hidden=!0},A=()=>{N.getButton(Be.RUN).disabled=!1,S.hidden=!1,l.root.hidden=!1,m.root.hidden=!1,p.root.hidden=!1,f.root.hidden=!je(g,y,a),1===y.length&&g.forEach((n=>{y[0]===n&&(E(),t.shell.warning(`${De.ONE_FEATURE_SELECTED} the column '${n}'`))}))},_=new Map,I=new Map,C=n.divV([]);C.style.overflow="auto",s.forEach((t=>{const r=function(t){switch(t){case o.COLUMN_TYPE.STRING:case o.COLUMN_TYPE.DATE_TIME:return{defaultWeight:$e.WEIGHT,defaultMetric:Ye.ONE_HOT,availableMetrics:[Ye.ONE_HOT]};case o.COLUMN_TYPE.INT:case o.COLUMN_TYPE.FLOAT:case o.COLUMN_TYPE.QNUM:return{defaultWeight:$e.WEIGHT,defaultMetric:Ye.DIFFERENCE,availableMetrics:[Ye.DIFFERENCE,Ye.ONE_HOT]};default:throw new Error(De.UNSUPPORTED_COLUMN_TYPE)}}(e.col(t).type);_.set(t,{weight:r.defaultWeight,type:r.defaultMetric});const i=n.choiceInput(t,r.defaultMetric,r.availableMetrics,(()=>{var n,e;const o=null!==(n=_.get(t))&&void 0!==n?n:{weight:r.defaultWeight,type:r.defaultMetric};o.type=null!==(e=i.value)&&void 0!==e?e:r.defaultMetric,_.set(t,o)}));i.root.style.width="50%",i.setTooltip(Ge.METRIC),i.root.hidden=!0;const s=o.Property.fromOptions({name:t,inputType:"Float",min:0,max:10,showSlider:!0,step:1}),a=n.input.forProperty(s);a.value=r.defaultWeight,a.onChanged((()=>{var n,e;const o=null!==(n=_.get(t))&&void 0!==n?n:{weight:r.defaultWeight,type:r.defaultMetric};o.weight=null!==(e=a.value)&&void 0!==e?e:r.defaultWeight,_.set(t,o)})),a.setTooltip(Ge.WEIGHT);const u=n.divH([i.root,a.root]);I.set(t,u),C.append(u)}));const N=n.dialog({title:Be.KNN_IMPUTER,helpUrl:Ve});t.shell.v.root.appendChild(N.root),C.hidden=!0,f.root.hidden=!je(g,y,a);const b=n.icons.settings((()=>{C.hidden=!C.hidden}),Ge.METRIC_SETTINGS),S=n.divH([p.root,b]);N.addButton(Be.RUN,(()=>{N.close(),s.filter((t=>!y.includes(t))).forEach((t=>_.delete(t)));try{const n=function(n,e,r,i,s,a,u){if(a<ze)throw new Error(De.INCORRECT_NEIGHBORS);if(n.rowCount<2)throw new Error(De.KNN_NOT_ENOUGH_OF_ROWS);if(0===e.length)throw new Error(De.KNN_NO_TARGET_COLUMNS);if(0===r.size)throw new Error(De.KNN_NO_FEATURE_COLUMNS);1===r.size&&e.forEach((t=>{if(r.has(t))throw new Error(`${De.KNN_NO_FEATURE_COLUMNS} can be used for the column '${t}'`)})),e.forEach((t=>{if(!i.has(t))throw new Error(`${De.KNN_FAILS}: ${De.WRONG_PREDICTIONS}`)}));const l=n.columns;e.forEach((t=>{if(!qe.includes(l.byName(t).type))throw new Error(De.UNSUPPORTED_COLUMN_TYPE)})),r.forEach(((t,e)=>{if(!qe.includes(n.getCol(e).type))throw new Error(De.UNSUPPORTED_COLUMN_TYPE)}));const c=new Map;return e.forEach((e=>{const f=l.byName(e),h=We(f),m=f.length,d=f.getRawData(),p=new Uint16Array(f.categories.length),g=[],v=[],y=[],w=[];r.forEach(((t,n)=>{if(n!==f.name){const e=l.byName(n);switch(g.push(e.getRawData()),v.push(We(e)),t.type){case Ye.DIFFERENCE:y.push(((n,e)=>t.weight*Math.abs(n-e)));break;case Ye.ONE_HOT:y.push(((n,e)=>t.weight*(n===e?0:1)))}}}));const E=g.length,A=new Uint32Array(g.length),_=new Float32Array(g.length);let I=0;const C=new Array(a);let N=0,b=0,S=0,M=0,T=0;const O=(t,n)=>{A.forEach(((e,r)=>{_[r]=y[e](g[e][t],g[e][n])}))},P=s===He.EUCLIDEAN?()=>{let t=0;for(let n=0;n<I;++n)t+=_[n]*_[n];return Math.sqrt(t)}:()=>{let t=0;for(let n=0;n<I;++n)t+=Math.abs(_[n]);return Math.sqrt(t)},x=t=>{if(d[t]===h)return!1;for(let n=0;n<I;++n)if(g[A[n]][t]===v[A[n]])return!1;return!0},L=t=>{if((t=>{I=0;for(let n=0;n<E;++n)g[n][t]!==v[n]&&(A[I]=n,++I)})(t),0===I)throw new Error(`${De.KNN_IMPOSSIBLE_IMPUTATION}: the column "${f.name}", row ${t+1}`);N=0;for(let n=0;n<m;++n)if(x(n)&&n!==t){O(t,n);const e=P();if(N<a)C[N]={index:n,dist:e},++N;else{b=0,S=C[0].dist;for(let t=1;t<N;++t)S<C[t].dist&&(S=C[t].dist,b=t);e<S&&(C[b]={index:n,dist:e})}}if(0===N)throw new Error(`${De.KNN_IMPOSSIBLE_IMPUTATION}: the column "${f.name}", row ${t+1}`);if(f.type===o.COLUMN_TYPE.STRING)return(()=>{p.forEach(((t,n,e)=>e[n]=0));let t=0;for(t=0;t<N;++t)++p[d[C[t].index]];let n=p[0],e=0;return p.forEach(((t,r)=>{t>n&&(n=t,e=r)})),e})();M=0;for(let t=0;t<N;++t)M+=d[C[t].index];return T=M/N,f.type===o.COLUMN_TYPE.INT?Math.round(T):T};if(u){for(const n of i.get(e))try{d[n]=L(n)}catch(e){w.push(n),e instanceof Error||t.shell.error(De.CORE_ISSUE)}w.length>0&&c.set(e,w),f.set(0,f.get(0))}else{const r=f.clone();let o=1,s=`${e}(${ke})`;for(;n.columns.contains(s);)s=`${e}(${ke} ${o})`,++o;r.name=s;const a=r.getRawData();for(const n of i.get(e))try{a[n]=L(n)}catch(e){w.push(n),e instanceof Error||t.shell.error(De.CORE_ISSUE)}w.length>0&&c.set(s,w),r.set(0,r.get(0)),n.columns.add(r)}})),c}(e,g,_,a,d,h,u);c||function(t,n){n.forEach(((n,e)=>{const r=t.col(e);if(null!==r){if(!qe.includes(r.type))throw new Error(De.UNSUPPORTED_COLUMN_TYPE);const t=function(t){switch(t.type){case o.COLUMN_TYPE.STRING:case o.COLUMN_TYPE.DATE_TIME:return function(t){const n=We(t),e=t.getRawData(),r=e.length;for(let o=0;o<r;++o)if(e[o]!==n)return t.get(o);throw new Error(De.EMPTY_COLUMN)}(t);case o.COLUMN_TYPE.INT:case o.COLUMN_TYPE.FLOAT:case o.COLUMN_TYPE.QNUM:return t.stats.avg;default:throw new Error(De.UNSUPPORTED_COLUMN_TYPE)}}(r);n.forEach((n=>r.set(n,t)))}}))}(e,n)}catch(n){n instanceof Error?t.shell.error(`${De.KNN_FAILS}: ${n.message}`):t.shell.error(`${De.KNN_FAILS}: ${De.CORE_ISSUE}`)}})).add(v).add(w).add(S).add(C).add(m).add(l).add(f).show()}class Xe extends Te{constructor(t={}){super(t),this.similarityThresholdInput=n.intInput("Similarity threshold",80),this.maxIterationsInput=n.intInput("Max iterations",5),this.useWebGPUInput=n.boolInput("Use WebGPU",!1),Qn().then((t=>{t?this.useWebGPUInput.setTooltip(`Use webGPU for MCL calculation (${t})`):(this.useWebGPUInput.value=!1,this.useWebGPUInput.root.style.display="none")}))}getEditor(){return n.div([this.tableInput.root,this.columnsInputRoot,this.columnParamsEditorRoot,this.aggregationMethodInput.root,this.similarityThresholdInput.root,this.maxIterationsInput.root,this.useWebGPUInput.root],{style:{minWidth:"420px"},classes:"ui-form"})}get params(){return{table:this.tableInput.value,columns:this.columnsInput.value,methodName:this.methodInput.value,preprocessingFunctions:this.columnOptEditors.map((t=>t.preProcessingFunction)),distanceMetrics:this.columnOptEditors.map((t=>t.similarityMetricInput.value)),weights:this.columnOptEditors.map((t=>t.weight)),preprocessingFuncArgs:this.columnOptEditors.map((t=>t.preprocessingFunctionSettings)),aggreaggregationMethod:this.aggregationMethodInput.value,threshold:this.similarityThresholdInput.value,maxIterations:this.maxIterationsInput.value??5,useWebGPU:this.useWebGPUInput.value??!1}}}class Qe{constructor(t,n=!1){if(this._length=0,this._version=0,this._updateLevel=0,this._selectedCount=0,this._selectedCountVersion=-1,this._selectedIndexesVersion=-1,this._versionedName="",this._versionedNameVersion=-1,this.SHRINK_THRESHOLD=256,"number"==typeof t){const e=t,r=Qe._createBuffer(e);if(n)for(let t=0;t<r.length;t++)r[t]=-1;this._data=r,this._length=e}else{if(!(t instanceof Uint32Array))throw new Error("Invalid constructor");this._data=t,this._length=n}}getRawData(){return this._data}assureGoez(t,n){if(t<0)throw new Error(`${n} should be greater than zero`)}assureInRange(t,n,e,r){if(t<n||t>e)throw new Error(`Argument ${r} (${t}) out of range (${n}, ${e})`)}copy(t,n,e){for(let r=0;r<e;r++)n[r]=t[r]}copyFrom(t){if(this._length!=t._length)throw new Error(`Lengths differ (${this._length} != ${t._length})`);this.copy(t._data,this._data,this.lengthInInts),this._version++}get length(){return this._length}get buffer(){return this._data}set buffer(t){this._data=t,this._version++}get version(){return this._version}set version(t){this._version=t}incrementVersion(t=!0){this._version++}get lengthInInts(){return Math.floor((this._length+31)/32)}get versionedName(){return this._version==this._versionedNameVersion?this._versionedName:""}set versionedName(t){this._versionedName=t,this._versionedNameVersion=this._version}get self(){return this}setLength(t){if(t<0)throw new Error("should be >= 0");if(t==this._length)return;const n=Math.floor((t+31)/32);if(n>this._data.length||n+this.SHRINK_THRESHOLD<this._data.length){const t=new Uint32Array(n);this.copy(this._data,t,n>this._data.length?this._data.length:n),this._data=t}t>this._length&&(this._length%32>0&&(this._data[this.lengthInInts-1]&=(1<<(this._length%32&31))-1),this._data.fill(0,this.lengthInInts,n)),this._length=t,this._version++}static fromAnd(t,n){if(t._length!=n._length)throw new Error(`Lengths differ (${t._length} != ${n._length})`);const e=new Qe(t._length);e._length=t._length,e._data=Qe._createBuffer(e._length),e._version=0;const r=t.lengthInInts;for(let o=0;o<r;o++)e._data[o]=t._data[o]&n._data[o];return e}static _createBuffer(t){return new Uint32Array(Math.floor((t+31)/32))}static fromValues(t){const n=new Qe(t.length);n._version=0;for(let e=0;e<n._length;e++)t[e]&&(n._data[Math.floor(e/32)]|=1<<(e%32&31));return n}static fromSeq(t,n){const e=new Qe(t);for(let r=0;r<t;++r)e.setBit(r,n(r));return e._version=0,e}static fromString(t){return Qe.fromSeq(t.length,(n=>"1"==t.charAt(n)))}static fromUint32Array(t,n){const e=new Qe(t);return e._data=n,e}static fromBytes(t){const n=t.length,e=new Qe(8*n);e._data=new Uint32Array(Math.floor((n+3)/4)),e._length=8*n;let r=0,o=0;for(;n-o>=4;)e._data[r++]=255&t[o]|(255&t[o+1])<<8|(255&t[o+2])<<16|(255&t[o+3])<<24,o+=4;return n-o==3&&(e._data[r]=(255&t[o+2])<<16),n-o==2&&(e._data[r]|=(255&t[o+1])<<8),n-o==1&&(e._data[r]|=255&t[o]),e._version=0,e}toString(){return`${this._length} bits, ${this.countBits(!0)} set`}equals(t){if(this==t)return!0;if(null==t)return!1;if(this._length!=t._length)return!1;if(0==this._length)return!0;for(let n=0;n<this._data.length-1;n++)if(this._data[n]!=t._data[n])return!1;for(let n=8*(this._data.length-1);n<this._length;n++)if(this.getBit(n)!=t.getBit(n))return!1;return!0}clone(){const t=new Qe(0,!1);return t._data=Uint32Array.from(this._data),t._length=this._length,t._version=this._version,t}init(t,n){this.setAll(!1,!1);for(let n=0;n<this._length;n++)t(n)&&(this._data[Math.floor(n/32)]|=1<<(n%32&31));return this.incrementVersion(n),this}invert(t=!0){for(let t=0;t<this._data.length;t++)this._data[t]^=-1;this.incrementVersion(t)}setAll(t,n=!1){const e=t?-1:0,r=this.lengthInInts;for(let t=0;t<r;t++)this._data[t]=e;this.incrementVersion(n)}setIndexes(t,n=!0,e=!0,r=!0){e&&this.setAll(!n,!1);for(const e of t)this.setFast(e,n);this.incrementVersion(r)}everyIndex(t,n=!0){for(const e of t)if(this.getBit(e)!=n)return!1;return!0}anyIndex(t,n=!0){for(const e of t)if(this.getBit(e)==n)return!0;return!1}setWhere(t,n=!0,e=!0,r=!0,o=!0){if(e&&o&&this.setAll(!n,!1),o)for(let e=0;e<this._length;e++)t(e)&&this.setFast(e,n);else for(let e=0;e<this._length;e++)this.setFast(e,t(e)?n:!n);this.incrementVersion(r)}getRange(t,n){this.assureInRange(t,0,this._length-1,"from"),this.assureInRange(n,0,this._length,"to");const e=[];for(let r=t;r<n;++r)e.push(this.getBit(r));return Qe.fromValues(e)}getRangeAsList(t,n){this.assureInRange(t,0,this._length-1,"from"),this.assureInRange(n,0,this._length,"to");const e=[];for(let r=t;r<n;++r)e.push(this.getBit(r));return e}setRange(t,n,e,r=!0){this.assureInRange(t,0,this._length-1,"from"),this.assureInRange(n,0,this._length-1,"to");const o=Math.min(t,n),i=Math.max(t,n);if(e)for(let t=o;t<=i;t++)this.setTrue(t);else for(let t=o;t<=i;t++)this.setFalse(t);return this.incrementVersion(r),this}setRandom(t,n,e=!0){if(t<0||t>this._length)throw new Error("n must be >= 0 && <= Count");t>this._length/2&&this.setRandom(this._length-t,!n),this.setAll(!n);for(let e=0;e<t;){const t=Math.floor(Math.random()*this._length);this.getBit(t)!=n&&(this.setFast(t,n),e++)}this.incrementVersion(e)}and(t,n=!0){if(this._length!=t._length)throw new Error("Array lengths differ.");for(let n=0,e=this.lengthInInts;n<e;n++)this._data[n]&=t._data[n];return this.incrementVersion(n),this}andNot(t,n=!0){if(this._length!=t._length)throw new Error("Array lengths differ.");const e=this.lengthInInts;for(let n=0;n<e;n++)this._data[n]&=~t._data[n];return this.incrementVersion(n),this}notAnd(t,n=!0){if(this._length!=t._length)throw new Error("Array lengths differ.");for(let n=0,e=this.lengthInInts;n<e;n++)this._data[n]=~this._data[n]&t._data[n];return this.incrementVersion(n),this}not(t=!0){for(let t=0,n=this.lengthInInts;t<n;t++)this._data[t]=~this._data[t];return this.incrementVersion(t),this}or(t,n=!0){if(this._length!=t._length)throw new Error("Array lengths differ.");for(let n=0,e=this.lengthInInts;n<e;n++)this._data[n]|=t._data[n];return this.incrementVersion(n),this}xor(t,n=!0){if(this._length!=t._length)throw new Error("Array lengths differ.");for(let n=0,e=this.lengthInInts;n<e;n++)this._data[n]^=t._data[n];return this.incrementVersion(n),this}insertAt(t,n,e=!1){if(this.assureInRange(t,0,this._length,"pos"),0==n)return;const r=this._length;this.setLength(this._length+n);for(let e=r-1;e>=t;e--)this.setBit(e+n,this.getBit(e));for(let r=t;r<t+n;r++)this.setBit(r,e)}removeAt(t,n=1){if(n<0)throw new Error("n cannot be negative");if(this.assureInRange(t,0,this._length-n,"pos"),this.contains(!0))for(let e=t;e<this._length-n;e++)this.setBit(e,this.getBit(e+n));this.setLength(this._length-n)}removeByMask(t,n=!0){if(this._length!=t.length)throw new Error("length != mask.length");if(t==this)this.setLength(t.countBits(!n)),this.setAll(!n);else{let e=0;for(let r=-1;-1!=(r=t.findNext(r,!n));)this.setFast(e++,this.getBit(r));this._length=e,this._version++}return this}getBit(t){return 0!=(this._data[Math.floor(t/32)]&1<<(31&t))}setBit(t,n,e=!0){this.setFast(t,n),this._version++}setFast(t,n){n?this._data[Math.floor(t/32)]|=1<<(31&t):this._data[Math.floor(t/32)]&=~(1<<(31&t))}setTrue(t){this._data[Math.floor(t/32)]|=1<<(31&t)}setFalse(t){this._data[Math.floor(t/32)]&=~(1<<(31&t))}trueCount(){return this.countBits(!0)}falseCount(){return this.countBits(!1)}countBits(t){if(0==this._length)return 0;if(this._selectedCountVersion!=this._version){this._selectedCount=0;const t=this.lengthInInts;let n=0;for(;n<t-1;n++)for(let t=this._data[n];0!=t;t>>>=8)this._selectedCount+=Qe._onBitCount[255&t];let e=this._data[n];const r=31&this._length;for(0!=r&&(e&=~(4294967295<<r));0!=e;e>>>=8)this._selectedCount+=Qe._onBitCount[255&e];this._selectedCountVersion=this._version}return t?this._selectedCount:this._length-this._selectedCount}countWhere(t){let n=0;if(this.trueCount()==this._length)for(let e=0;e<this._length;e++)n+=t(e)?1:0;else for(let e=-1;-1!=(e=this.findNext(e,!0));)n+=t(e)?1:0;return n}andWithCountBits(t,n){if(0==this._length)return 0;let e=0;const r=this.lengthInInts;let o=0;for(;o<r-1;o++)for(let n=this._data[o]&t._data[o];0!=n;n>>>=8)e+=Qe._onBitCount[255&n];let i=this._data[o]&t._data[o];const s=31&this._length;for(0!=s&&(i&=~(4294967295<<s));0!=i;i>>>=8)e+=Qe._onBitCount[255&i];return n?e:this._length-e}clear(){this.setLength(0)}contains(t){return this.findNext(-1,t)>=0}get allTrue(){return this.countBits(!0)==this._length}get allFalse(){return this.countBits(!1)==this._length}get anyTrue(){return this.countBits(!0)>0}get anyFalse(){return this.countBits(!1)>0}findNext(t,n=!0){if(this.assureInRange(t,-1,this._length,"index"),t>=this._length-1)return-1;let e=31&(t=t<0?0:t+1);const r=this.lengthInInts;for(let o=Math.floor(t/32);o<r;o++){let r=n?this._data[o]:~this._data[o];if(0!=e)r&=4294967295<<e&4294967295,e=0;else if(!n&&-4294967296==r)continue;for(let n=0;0!=r;n+=8,r>>>=8){const e=Qe._firstOnBit[255&r];if(e>=0)return(t=e+32*o+n)>=this._length?-1:t}}return-1}findPrev(t,n=!0){if(0==t)return-1;this.assureInRange(t,-1,this._length,"index");let e=1+(t=t<0?this._length-1:t-1)&31;for(let r=Math.floor(t/32);r>=0;r--){let t=n?this._data[r]:~this._data[r];0!=e&&(t&=~(4294967295<<e),e=0);for(let n=24;0!=t;n-=8,t<<=8){const e=Qe._lastOnBit[t>>>24];if(e>=0)return e+32*r+n}}return-1}}var Ze;Qe._onBitCount=Int8Array.from([0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,1,2,2,3,2,3,3,4,2,3,3,4,3,4,4,5,1,2,2,3,2,3,3,4,2,3,3,4,3,4,4,5,2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6,1,2,2,3,2,3,3,4,2,3,3,4,3,4,4,5,2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6,2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6,3,4,4,5,4,5,5,6,4,5,5,6,5,6,6,7,1,2,2,3,2,3,3,4,2,3,3,4,3,4,4,5,2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6,2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6,3,4,4,5,4,5,5,6,4,5,5,6,5,6,6,7,2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6,3,4,4,5,4,5,5,6,4,5,5,6,5,6,6,7,3,4,4,5,4,5,5,6,4,5,5,6,5,6,6,7,4,5,5,6,5,6,6,7,5,6,6,7,6,7,7,8]),Qe._firstOnBit=Int8Array.from([-1,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,6,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,7,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,6,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0]),Qe._lastOnBit=Int8Array.from([-1,0,1,1,2,2,2,2,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7]),function(t){t.none="none",t.bold="bold",t.dashed="dashed"}(Ze||(Ze={}));class Je{get currentLineId(){return this._currentLineIdx}set currentLineId(t){t!==this._currentLineIdx&&(this._currentLineIdx=t,this.sp.render(this.ctx))}set linesToRender(t){this.updateLines(t),this.sp.render(this.ctx)}set linesVisibility(t){this.visibility=t,this.sp.render(this.ctx)}constructor(t,n,e,r,o=Ze.none){var i;this._currentLineIdx=-1,this.lineClicked=new he.Subject,this.lineHover=new he.Subject,this.mouseOverLineId=-1,this.arrowWidth=15,this.sp=t,this.xAxisCol=this.sp.dataFrame.columns.byName(n),this.yAxisCol=this.sp.dataFrame.columns.byName(e),this.canvas=this.sp.getInfo().canvas,this.ctx=this.canvas.getContext("2d"),this.currentLineStyle=o,this.updateLines(r),this.visibility=null!==(i=r.visibility)&&void 0!==i?i:new Qe(this.lines.from.length),r.visibility||this.visibility.setAll(!0,!1),r.arrowSize&&(this.arrowWidth=r.arrowSize),this.canvas.onmousedown=t=>{-1!==this.mouseOverLineId&&this.lineClicked.next({x:t.clientX,y:t.clientY,id:this.mouseOverLineId,event:t})},this.canvas.onmousemove=t=>{this.mouseOverLineId=this.checkCoordsOnLine(t.offsetX,t.offsetY),-1!==this.mouseOverLineId&&this.lineHover.next({x:t.clientX,y:t.clientY,id:this.mouseOverLineId,event:t})},t.onEvent("d4-before-draw-scene").subscribe((t=>{this.renderLines()}))}updateLines(t){this.lines=t,this.multipleLinesCounts=new Uint8Array(this.lines.from.length),t.skipMultiLineCalculation?this.multipleLinesCounts.fill(0):this.createMultiLinesIndices()}renderLines(){var t,n,e,r,o,i,s,a,u,l,c,f,h;const m=this.sp.getOptions().look,d=this.lines.colors||this.lines.width||this.lines.opacities||this.lines.drawArrowsArr;d||(this.ctx.lineWidth=null!==(t=this.lines.width)&&void 0!==t?t:1,this.ctx.strokeStyle=`rgba(${null!==(n=this.lines.color)&&void 0!==n?n:"0,128,0"},${null!==(e=this.lines.opacity)&&void 0!==e?e:1})`);const p=m.sizeColumnName?this.sp.dataFrame.col(m.sizeColumnName):null,g=this.sp.dataFrame.filter;for(let t=0;t<this.lines.from.length;t++)if(g.get(this.lines.from[t])&&g.get(this.lines.to[t])&&this.visibility.getBit(t)){let n=0;const{sizeFrom:e,sizeTo:g}=this.getMarkersSizes(m,p,t),v=this.sp.worldToScreen(this.xAxisCol.get(this.lines.from[t]),this.yAxisCol.get(this.lines.from[t]));let y=null==v?void 0:v.x,w=null==v?void 0:v.y;const E=this.sp.worldToScreen(this.xAxisCol.get(this.lines.to[t]),this.yAxisCol.get(this.lines.to[t]));let A=null==E?void 0:E.x,_=null==E?void 0:E.y;const I=Math.min(this.sp.viewBox.width,this.sp.viewBox.height);if(this.ctx.beginPath(),y&&w&&A&&_&&Math.hypot(A-y,_-w)/I>.01){if(d){const n=(null===(r=this.lines.colors)||void 0===r?void 0:r[t])?null===(o=this.lines.colors)||void 0===o?void 0:o[t]:"0,128,0",e=(null===(i=this.lines.opacities)||void 0===i?void 0:i[t])?null===(s=this.lines.opacities)||void 0===s?void 0:s[t]:1;this.ctx.strokeStyle=`rgba(${n},${e})`,this.ctx.lineWidth=(null===(a=this.lines.widths)||void 0===a?void 0:a[t])?null===(u=this.lines.widths)||void 0===u?void 0:u[t]:1}t===this._currentLineIdx&&this.toggleCurrentLineStyle(!0);const m=this.multipleLinesCounts[t];let p=null;if(m){n=this.getLineLength(y,w,A,_);const r=this.getPointOnDistance(y,w,A,_,g,n),o=this.getPointOnDistance(A,_,y,w,e,n);y=r.x,w=r.y,A=o.x,_=o.y,p=this.lines.from[t]>this.lines.to[t]?this.findControlPoint(m,y,w,A,_,t):this.findControlPoint(m,A,_,y,w,t),this.ctx.moveTo(y,w),this.ctx.quadraticCurveTo(p.x,p.y,A,_)}else this.ctx.moveTo(y,w),this.ctx.lineTo(A,_);if((null!==(l=this.lines.drawArrows)&&void 0!==l?l:null===(c=this.lines.drawArrowsArr)||void 0===c?void 0:c.getBit(t))&&(n||(n=this.getLineLength(y,w,A,_)),n>this.arrowWidth)){const t=m?null:this.getPointOnDistance(y,w,A,_,g,n),e=m?p.x:y,r=m?p.y:w;this.canvasArrow(this.ctx,null!==(f=null==t?void 0:t.x)&&void 0!==f?f:y,null!==(h=null==t?void 0:t.y)&&void 0!==h?h:w,e,r)}this.ctx.stroke(),this.ctx.closePath(),t===this._currentLineIdx&&this.toggleCurrentLineStyle(!1)}}this.fillLeftBottomRect()}toggleCurrentLineStyle(t){switch(this.currentLineStyle){case Ze.bold:t?this.ctx.lineWidth+=2:this.ctx.lineWidth-=2;break;case Ze.dashed:t?this.ctx.setLineDash([5,5]):this.ctx.setLineDash([]);break;default:return}}getMarkersSizes(t,n,e){let r=3,o=3;return n?(r=(t.markerMinSize+(t.markerMaxSize-t.markerMinSize)*n.scale(this.lines.from[e]))/2,o=(t.markerMinSize+(t.markerMaxSize-t.markerMinSize)*n.scale(this.lines.to[e]))/2):t.markerDefaultSize&&(r=t.markerDefaultSize/2,o=t.markerDefaultSize/2),{sizeFrom:r,sizeTo:o}}fillLeftBottomRect(){const t=new Path2D;t.rect(this.sp.yAxisBox.minX,this.sp.yAxisBox.maxY,this.sp.yAxisBox.width,this.sp.xAxisBox.height),this.ctx.fillStyle="white",this.ctx.beginPath(),this.ctx.fill(t),this.ctx.closePath()}createMultiLinesIndices(){const t=new Qe(this.lines.from.length);t.setAll(!0);for(let n=-1;-1!==(n=t.findNext(n));){const e=n,r=this.lines.from[e],o=this.lines.to[e];let i=1;for(let e=n;-1!==(e=t.findNext(e));){const n=this.lines.from[e],s=this.lines.to[e];(n===r&&s===o||s===r&&n===o)&&(this.multipleLinesCounts[e]=++i,t.setBit(e,!1,!1))}i>1&&(this.multipleLinesCounts[e]=1),t.setBit(n,!1,!1)}}checkCoordsOnLine(t,n){let e=-1,r=null,o=null;const i=this.sp.getOptions().look,s=i.sizeColumnName?this.sp.dataFrame.col(i.sizeColumnName):null,a=this.sp.dataFrame.filter;for(let u=0;u<this.lines.from.length;u++)if(a.get(this.lines.from[u])&&a.get(this.lines.to[u])&&this.visibility.getBit(u)){const{sizeFrom:a,sizeTo:l}=this.getMarkersSizes(i,s,u),c=this.sp.worldToScreen(this.xAxisCol.get(this.lines.from[u]),this.yAxisCol.get(this.lines.from[u])),f=this.sp.worldToScreen(this.xAxisCol.get(this.lines.to[u]),this.yAxisCol.get(this.lines.to[u]));if(this.multipleLinesCounts[u]){const e=this.getLineLength(c.x,c.y,f.x,f.y),r=this.getPointOnDistance(c.x,c.y,f.x,f.y,l,e),i=this.getPointOnDistance(f.x,f.y,null==c?void 0:c.x,null==c?void 0:c.y,a,e),s=this.lines.from[u]>this.lines.to[u]?this.findControlPoint(this.multipleLinesCounts[u],r.x,r.y,i.x,i.y,u):this.findControlPoint(this.multipleLinesCounts[u],i.x,i.y,r.x,r.y,u);o=this.calculateDistToCurveLine(u,t,n,r,i,s)}else o=this.calculateDistToStraightLine(t,n,c,f);(!r&&null!==o&&o<5||r&&null!==o&&o<r)&&(r=o,e=u)}return e}calculateDistToStraightLine(t,n,e,r){const o=Math.min(e.x,r.x),i=Math.max(e.x,r.x),s=Math.min(e.y,r.y),a=Math.max(e.y,r.y);return t>=o-2&&t<=i+2&&n>=s-2&&n<=a+2?this.distToStraightLineSegment(t,n,e,r):null}distToStraightLineSegment(t,n,e,r){const o=(t,n,e,r)=>Math.pow(t-e,2)+Math.pow(n-r,2),i=o(e.x,e.y,r.x,r.y);if(0==i)return o(t,n,e.x,e.y);let s=((t-e.x)*(r.x-e.x)+(n-e.y)*(r.y-e.y))/i;return s=Math.max(0,Math.min(1,s)),o(t,n,e.x+s*(r.x-e.x),e.y+s*(r.y-e.y))}calculateDistToCurveLine(t,n,e,r,o,i){const s=Math.min(r.x,o.x,i.x),a=Math.max(r.x,o.x,i.x),u=Math.min(r.y,o.y,i.y),l=Math.max(r.y,o.y,i.y);if(n>=s-2&&n<=a+2&&e>=u-2&&e<=l+2){const t=a-s,c=l-u;return this.calculateDistToCurveInRect(n,e,r,i,o,t,c)}return null}calculateDistToCurveInRect(t,n,e,r,o,i,s){const a=Math.floor((i+s)/3),u=1/a,l=new Uint32Array(a),c=new Uint32Array(a),f=new Uint32Array(a);let h=null;const m=new Qe(a);for(let i=0;i<l.length;i++){const s=i*u,a=Math.pow(1-s,2)*e.x+2*s*(1-s)*r.x+Math.pow(s,2)*o.x,m=Math.pow(1-s,2)*e.y+2*s*(1-s)*r.y+Math.pow(s,2)*o.y,d=Math.abs(t-a),p=Math.abs(n-m),g=d+p;(!h||h>g)&&(h=g),f[i]=Math.max(d,p),l[i]=a,c[i]=m}for(let t=0;t<l.length;t++)f[t]<h&&m.setBit(t,!0,!1);let d=null;for(let e=-1;-1!==(e=m.findNext(e));){const r=Math.hypot(l[e]-t,c[e]-n);(!d||d>r)&&(d=r)}return d}getLineLength(t,n,e,r){return Math.sqrt(Math.pow(e-t,2)+Math.pow(r-n,2))}getPointOnDistance(t,n,e,r,i,s){const a=e-i*((e-t)/s),u=r-i*((r-n)/s);return new o.Point(a,u)}findControlPoint(t,n,e,r,i,s){const a=n+(r-n)/2,u=e+(i-e)/2;let l=a-n,c=u-e;const f=Math.sqrt(l*l+c*c);l/=f,c/=f;const h=50*Math.ceil(t/2);return t%2==0?new o.Point(a+h/2*c,u-h/2*l):new o.Point(a-h/2*c,u+h/2*l)}canvasArrow(t,n,e,r,o){const i=Math.atan2(r-n,o-e)+Math.PI;t.moveTo(n-this.arrowWidth*Math.sin(i-Math.PI/10),e-this.arrowWidth*Math.cos(i-Math.PI/10)),t.lineTo(n,e),t.lineTo(n-this.arrowWidth*Math.sin(i+Math.PI/10),e-this.arrowWidth*Math.cos(i+Math.PI/10))}}var tr=function(t,n,e,r){return new(e||(e=Promise))((function(o,i){function s(t){try{u(r.next(t))}catch(t){i(t)}}function a(t){try{u(r.throw(t))}catch(t){i(t)}}function u(t){var n;t.done?o(t.value):(n=t.value,n instanceof e?n:new e((function(t){t(n)}))).then(s,a)}u((r=r.apply(t,n||[])).next())}))};const nr=new o.Package;function er(){t.shell.info(nr.webRoot)}function rr(){return tr(this,void 0,void 0,(function*(){yield async function(){await initEDA()}()}))}function or(t,n,e,r,i){return tr(this,void 0,void 0,(function*(){const s=n.getRawData(),a=e.getRawData(),u=yield Kn(s,a,r,i),l=t.columns.getUnusedName("Cluster (DBSCAN)"),c=o.Column.fromInt32Array(l,u);return t.columns.add(c),c}))}function ir(n,r,o,i,s){return tr(this,void 0,void 0,(function*(){const a=yield function(t,n,r,o,i){return Y(this,void 0,void 0,(function*(){W(n,r);const t=o?1:0,s=i?1:0;return yield async function(t,n,r,o,i){return new Promise(((t,s)=>{const a=new Worker(new URL(e.p+e.u(261),e.b));a.postMessage(N(EDA.principalComponentAnalysis.arguments,[n,r,o,i])),a.onmessage=function(n){a.terminate(),t(b(EDA.principalComponentAnalysis,n.data))}}))}(0,n,r,t,s)}))}(0,r,o,i,s);if(function(t,n){for(const t of n.toList())t.name="PC"+t.name}(0,a.columns),null===n.id)t.shell.addTableView(a);else{const t=n.columns;for(const n of a.columns)n.name=t.getUnusedName(n.name),t.add(n)}}))}function sr(n,e,r,i){return tr(this,void 0,void 0,(function*(){const s=n.dataFrame;if(null===s)return;const a=yield or(s,n,e,r,i);s.changeColumnType(a,"string");const u=[n.name,e.name],l=t.shell.tableView(s.name);if(l)for(const t of l.viewers)if(t instanceof o.ScatterPlotViewer&&u.includes(t.props.xColumnName)&&u.includes(t.props.yColumnName))return void(t.props.colorColumnName=a.name)}))}function ar(t,n){const e=t.stats.max-t.stats.min;return{entries:t.toList(),options:{range:e}}}function ur(t,n){return{entries:t.toList(),options:{}}}function lr(){return tr(this,void 0,void 0,(function*(){const r=new Te,i=n.dialog("Dimensionality reduction").add(r.getEditor()).onOK((()=>tr(this,void 0,void 0,(function*(){const i=r.getParams();0!==i.columns.length&&(yield async function(r,i,s,a,u,l,c,f=!0,h=!1,m={preprocessingFuncArgs:[]},d={},p=null,g={}){const v={showXAxis:!1,showYAxis:!1,showXSelector:!1,showYSelector:!1};if(i.length!==a.length||i.length!==l.length||i.length!==u.length||i.length!==m.preprocessingFuncArgs.length)throw new Error("columns, metrics and preprocessing functions, weights and function argumentsmust have the same length");const y=f?t.shell.tableView(r.name)??t.shell.addTableView(r):null,w=async()=>{const w=o.TaskBarProgressIndicator.create(`Initializing ${d.scatterPlotName??"dimensionality reduction"} ...`);let E;try{const A=function(t){const n=["Embed_X","Embed_Y"],e=t.columns.names().filter((t=>t.includes(n[0]))).length+1;return n.map((t=>`${t}_${e}`))}(r);function _(t,e,a){let u=null,l=null;r.columns.names().includes(A[0])?(u=r.columns.byName(A[0]),l=r.columns.byName(A[1])):(u=r.columns.add(o.Column.float(A[0],r.rowCount)),l=r.columns.add(o.Column.float(A[1],r.rowCount)),f&&!E&&(E=y.scatterPlot({...v,x:A[0],y:A[1],title:d.scatterPlotName??Ue(i,s)}))),d[le]&&(E?.root&&n.setUpdateIndicator(E.root,!1),u.init((t=>a[0]?a[0][t]:void 0)),l.init((t=>a[1]?a[1][t]:void 0)));const c=t/e*100;w.update(c,`Running ${d.scatterPlotName??"dimensionality reduction"}... ${c.toFixed(0)}%`)}async function I(){r.columns.add(o.Column.float(A[0],r.rowCount)),r.columns.add(o.Column.float(A[1],r.rowCount));let h=null;f&&(E=y.scatterPlot({...v,x:A[0],y:A[1],title:d.scatterPlotName??Ue(i,s)}),n.setUpdateIndicator(E.root,!0));const p=t.events.onViewerClosed.subscribe((n=>{const e=n.args.viewer;e?.getOptions()?.look?.title&&E?.getOptions()?.look?.title&&e?.getOptions()?.look?.title===E?.getOptions()?.look?.title&&(t.events.fireCustomEvent(Le,{}),p.unsubscribe(),h?.(),w.close())})),g=new Promise((async(n,r)=>{try{h=n;const r=[];for(let t=0;t<l.length;++t){const n=l[t];if(m.distanceFnArgs||(m.distanceFnArgs=[]),n){const e=n.inputs[0].name,o=n.inputs[1].name,{entries:s,options:u}=await n.apply({[e]:i[t],[o]:a[t],...m.preprocessingFuncArgs[t]??{}});r.push({entries:s,options:u}),m.distanceFnArgs.push(u)}else{const n=i[t].toList(),e={};r.push({entries:n,options:e}),m.distanceFnArgs.push(e)}}n(await async function(n,r,o,i,s,a,u){let l=await async function(n,r,o,i,s,a,u){if(!a.distanceFnArgs)throw new Error("options.distanceFnArgs must be defined");if(n.length!==r.length||n.length!==a.distanceFnArgs.length||n.length!==i.length)throw new Error("data, metrics and options and weights must have the same length");return new Promise((function(l,c){const f=new Worker(new URL(e.p+e.u(42),e.b));f.postMessage({columnsData:n,distanceMetrics:r,method:o,options:a,weights:i,aggregationMethod:s});const h=t.events.onCustomEvent(Le).subscribe((()=>{try{f?.terminate()}finally{h.unsubscribe()}}));f.onmessage=({data:{error:t,embedding:n,epochNum:e,epochsLength:r}})=>{Re(e)||Re(r)?(h.unsubscribe(),t?c(t):l(n),setTimeout((()=>f.terminate()),100)):u&&u(e,r,n)}}))}(n,o,r,i,s,a,u);return l=l.map((t=>function(t){const n=t.length;let e=0,r=0;for(let o=0;o<n;++o)e+=t[o],r+=Math.pow(t[o],2);const o=e/n,i=1/Math.sqrt(r/n-Math.pow(o,2));for(let e=0;e<n;++e)t[e]=(t[e]-o)*i;return t}(t))),l}(r.map((t=>t.entries)),s,a,u,c,m,d[ue]?void 0:_))}catch(t){r(t)}})),I=await g;return w.close(),p.unsubscribe(),I}const C=await I();if(h&&C){const N=o.TaskBarProgressIndicator.create("Clustering embeddings ...");try{const b=await Kn(C[0],C[1],m.dbScanEpsilon??.01,m.dbScanMinPts??4),S=r.columns.getUnusedName("Cluster (DBSCAN)");r.columns.addNewString(S).init((t=>b[t].toString())),E&&(E.props.colorColumnName=S)}catch(M){t.shell.error("Clustering embeddings failed"),console.error(M)}finally{N.close()}}if(C){const T=r.columns.byName(A[0]),O=r.columns.byName(A[1]);if(T.init((t=>C[0][t])),O.init((t=>C[1][t])),p)try{const P=p.inputs[0].name,x=p.inputs[1].name;await p.prepare({[P]:T,[x]:O,...g}).call(!0)}catch(L){t.shell.error("Post-processing failed"),console.error(L)}if(E)return n.setUpdateIndicator(E.root,!1),E.helpUrl="/help/compute/sequence-space",E}}catch(R){t.shell.error("Dimensionality reduction failed"),console.error(R),w.close(),E&&n.setUpdateIndicator(E.root,!1)}};return new Promise((async(t,e)=>{try{if(d.fastRowCount&&r.rowCount>d.fastRowCount&&!d[ue])n.dialog().add(n.divText("Analysis might take several minutes. Do you want to continue?")).onOK((async()=>{try{const n=await w();t(n)}catch(t){e(t)}})).onCancel((()=>t(void 0))).show();else{const n=await w();t(n)}}catch(t){e(t)}}))}(i.table,i.columns,i.methodName,i.distanceMetrics,i.weights,i.preprocessingFunctions,i.aggreaggregationMethod,!!i.plotEmbeddings,!!i.clusterEmbeddings,i.options,{fastRowCount:1e4},i.postProcessingFunction,i.postProcessingFunctionArgs))})))).show(),s=()=>{const t=r.columnsInput.value,n=i.getButton("OK");n&&(t&&0!==t.length?n.classList.remove("disabled"):n.classList.add("disabled"))};r.onColumnsChanged.subscribe((()=>{try{s()}catch(t){console.error(t)}})),s()}))}function cr(e){try{const t=new Xe;n.dialog("Markov clustering").add(t.getEditor()).onOK((()=>tr(this,void 0,void 0,(function*(){const n=t.params;return e.func.prepare({df:n.table,cols:n.columns,metrics:n.distanceMetrics,weights:n.weights,aggregationMethod:n.aggreaggregationMethod,preprocessingFuncs:n.preprocessingFunctions,preprocessingFuncArgs:n.preprocessingFuncArgs,threshold:n.threshold,maxIterations:n.maxIterations,useWebGPU:n.useWebGPU}).call(!0)})))).show()}catch(n){const e=n instanceof Error?n.message:n.toString(),r=n instanceof Error?n.stack:void 0;t.shell.error(`Get region editor error: ${e}`),nr.logger.error(e,void 0,r)}}function fr(r,o,i,s,a,u,l,c=80,f=10,h=!1){return tr(this,void 0,void 0,(function*(){const m=yield async function(r,o,i,s,a,u,l,c=80,f=10,h=!1){const m=(t.shell.tableView(r.name)??t.shell.addTableView(r)).scatterPlot({showXAxis:!1,showYAxis:!1,showXSelector:!1,showYSelector:!1,title:"MCL"});n.setUpdateIndicator(m.root,!0);const d=[],p=[];for(let t=0;t<u.length;++t){const n=u[t];if(n){const e=n.inputs[0].name,r=n.inputs[1].name,{entries:s,options:a}=await n.apply({[e]:o[t],[r]:i[t],...l[t]??{}});p.push({entries:s,options:a}),d.push(a??{})}else{const n=o[t].toList(),e={};p.push({entries:n,options:e}),d.push(e)}}const g=function(t,n,r,o,i,s,a=10,u=!1){const l=new Worker(new URL(e.p+e.u(246),e.b));let c;return l.postMessage({data:t,threshold:n,weights:r,aggregationMethod:o,distanceFns:i,distanceFnArgs:s,maxIterations:a,useWebGPU:u}),{promise:new Promise(((t,n)=>{c=t,l.onmessage=n=>{setTimeout((()=>l.terminate()),100),t(n.data.res)},l.onerror=t=>{setTimeout((()=>l.terminate()),100),n(t)}})),terminate:()=>{try{c(null),l.terminate()}catch(t){console.error(t)}}}}(p.map((t=>t.entries)),c,s,a,i,d,f,h),v=t.events.onViewerClosed.subscribe((t=>{t.args.viewer?.props?.title===m.props.title&&m.type===t.args?.viewer?.type&&(v.unsubscribe(),g.terminate())})),y=await g.promise;if(!y)return;const w=r.columns.getUnusedName("Cluster (MCL)"),E=r.columns.getUnusedName("EmbedX (MCL)"),A=r.columns.getUnusedName("EmbedY (MCL)"),_={};y.clusters.forEach((t=>{_[t]||(_[t]=0),_[t]++}));const I=new Uint32Array(y.embedX.length);for(let t=0;t<y.is.length;t++)I[y.is[t]]++,I[y.js[t]]++;const C=r.columns.getUnusedName("Cluster size (MCL)"),N=r.columns.getUnusedName("Connectivity (MCL)"),b=r.columns.addNewFloat(E);b.init((t=>y.embedX[t]));const S=r.columns.addNewFloat(A);S.init((t=>y.embedY[t]));const M=r.columns.addNewString(w);M.init((t=>y.clusters[t].toString()));const T=r.columns.addNewInt(C);T.init((t=>_[y.clusters[t]]));const O=r.columns.addNewInt(N);return O.init((t=>I[t])),m.props.xColumnName=E,m.props.yColumnName=A,m.props.colorColumnName=w,m.props.markerDefaultSize=5,v.unsubscribe(),new Je(m,E,A,{from:y.is,to:y.js,drawArrows:!1,opacity:.3,skipMultiLineCalculation:!0},Ze.none),n.setUpdateIndicator(m.root,!1),{sc:m,embedXCol:b,embedYCol:S,clusterCol:M,clusterCounterCol:T,connectivityCol:O}}(r,o,i,s,a,u,l,c,f,h);return null==m?void 0:m.sc}))}function hr(t,n,e,r,o){return tr(this,void 0,void 0,(function*(){return yield Vn({table:t,features:n,predict:e,components:r,names:o})}))}function mr(){return tr(this,void 0,void 0,(function*(){yield Gn(wn.COMPUTE_COMPONENTS)}))}function dr(){return tr(this,void 0,void 0,(function*(){yield Gn(wn.PERFORM_MVA)}))}function pr(){return tr(this,void 0,void 0,(function*(){!function(){Dn(this,void 0,void 0,(function*(){t.shell.addTableView(o.DataFrame.fromColumns([o.Column.fromStrings("model",["alfaromeo","audi","bmw","chevrolet","dodge1","dodge2","honda1","honda2","isuzu","jaguar","mazda","mercedes","mercury","mitsubishi","nissan1","nissan2","peugot","plymouth","porsche","saab","subaru","toyota1","toyota2","toyota3","toyota4","volkswagen1","volkswagen2","volvo1","volvo2","volvo3"]),o.Column.fromInt32Array("diesel",new Int32Array([0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,1,0,1,1,0,0,0,1])),o.Column.fromInt32Array("turbo",new Int32Array([0,0,0,0,1,0,0,0,0,0,0,1,1,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,1,1])),o.Column.fromInt32Array("two.doors",new Int32Array([1,0,1,0,1,0,1,0,0,0,0,0,1,1,0,1,0,0,1,0,0,1,0,1,0,1,0,0,0,0])),o.Column.fromInt32Array("hatchback",new Int32Array([1,0,0,0,1,1,1,0,0,0,0,0,1,1,0,0,1,0,0,0,0,1,0,1,0,0,0,0,0,0])),o.Column.fromFloat32Array("wheel.base",new Float32Array([94.5,105.80000305175781,101.19999694824219,94.5,93.69999694824219,93.69999694824219,93.69999694824219,96.5,94.30000305175781,113,93.0999984741211,115.5999984741211,102.69999694824219,93.69999694824219,94.5,94.5,93.69999694824219,114.19999694824219,89.5,99.0999984741211,97.19999694824219,95.69999694824219,95.69999694824219,98.4000015258789,102.4000015258789,97.30000305175781,100.4000015258789,104.30000305175781,109.0999984741211,109.0999984741211])),o.Column.fromFloat32Array("length",new Float32Array([171.1999969482422,192.6999969482422,176.8000030517578,158.8000030517578,157.3000030517578,157.3000030517578,150,175.39999389648438,170.6999969482422,199.60000610351562,166.8000030517578,202.60000610351562,178.39999389648438,157.3000030517578,170.1999969482422,165.3000030517578,157.3000030517578,198.89999389648438,168.89999389648438,186.60000610351562,172,158.6999969482422,166.3000030517578,176.1999969482422,175.60000610351562,171.6999969482422,180.1999969482422,188.8000030517578,188.8000030517578,188.8000030517578])),o.Column.fromFloat32Array("width",new Float32Array([65.5,71.4000015258789,64.80000305175781,63.599998474121094,63.79999923706055,63.79999923706055,64,65.19999694824219,61.79999923706055,69.5999984741211,64.19999694824219,71.69999694824219,68,64.4000015258789,63.79999923706055,63.79999923706055,63.79999923706055,68.4000015258789,65,66.5,65.4000015258789,63.599998474121094,64.4000015258789,65.5999984741211,66.5,65.5,66.9000015258789,67.19999694824219,68.80000305175781,68.9000015258789])),o.Column.fromFloat32Array("height",new Float32Array([52.400001525878906,55.70000076293945,54.29999923706055,52,50.79999923706055,50.599998474121094,52.599998474121094,54.099998474121094,53.5,52.79999923706055,54.099998474121094,56.29999923706055,54.79999923706055,50.79999923706055,53.5,54.5,50.599998474121094,58.70000076293945,51.599998474121094,56.099998474121094,52.5,54.5,53,52,54.900001525878906,55.70000076293945,55.099998474121094,56.20000076293945,55.5,55.5])),o.Column.fromInt32Array("curb.weight",new Int32Array([2823,2844,2395,1909,2128,1967,1956,2304,2337,4066,1950,3770,2910,1918,2024,1951,1967,3430,2800,2695,2190,1985,2275,2551,2480,2261,2661,2912,3049,3217])),o.Column.fromInt32Array("eng.size",new Int32Array([152,136,108,90,98,90,92,110,111,258,91,183,140,92,97,97,90,152,194,121,108,92,110,146,110,97,136,141,141,145])),o.Column.fromInt32Array("horsepower",new Int32Array([154,110,101,70,102,68,76,86,78,176,68,123,175,68,69,69,68,95,207,110,82,62,56,116,73,52,110,114,160,106])),o.Column.fromInt32Array("peak.rpm",new Int32Array([5e3,5500,5800,5400,5500,5500,6e3,5800,4800,4750,5e3,4350,5e3,5500,5200,5200,5500,4150,5900,5250,4400,4800,4500,4800,4500,4800,5500,5400,5300,4800])),o.Column.fromInt32Array("symbol",new Int32Array([1,1,2,0,1,1,1,0,0,0,1,-1,1,2,1,1,1,0,3,2,0,1,0,2,-1,2,0,-2,-1,-1])),o.Column.fromInt32Array("city.mpg",new Int32Array([19,19,23,38,24,31,30,27,24,15,31,22,19,37,31,31,31,25,17,21,28,35,34,24,30,37,19,23,19,26])),o.Column.fromInt32Array("highway.mpg",new Int32Array([26,25,29,43,30,38,34,33,29,19,38,25,24,41,37,37,38,25,25,28,33,39,36,30,33,46,24,28,25,27])),o.Column.fromInt32Array("price",new Int32Array([16500,17710,16430,6575,7957,6229,7129,8845,6785,35550,7395,31600,16503,5389,7349,7299,6229,13860,37028,12170,7775,5348,7898,9989,10698,7775,13295,12940,19045,22470]))])),t.shell.windows.help.visible=!0,t.shell.windows.help.showHelp(n.markdown(Rn)),t.shell.windows.showContextPanel=!1,t.shell.windows.showProperties=!1,yield Gn(wn.DEMO)}))}()}))}function gr(t,n,e,r,o,i){return tr(this,void 0,void 0,(function*(){return yield X(Z,[0,0],t,n,e,r,o,i)}))}function vr(t,n,e,r,o,i,s){return tr(this,void 0,void 0,(function*(){return yield X(tt,[n,0],t,e,r,o,i,s)}))}function yr(t,n,e,r){return tr(this,void 0,void 0,(function*(){const o=yield pn({gamma:e,kernel:Z},t,n);return r&&gn(t,o),vn(o)}))}function wr(t,n){return tr(this,void 0,void 0,(function*(){return yield yn(t,n)}))}function Er(t,n,e,r,o){return tr(this,void 0,void 0,(function*(){const i=yield pn({gamma:e,kernel:tt,sigma:r},t,n);return o&&gn(t,i),vn(i)}))}function Ar(t,n){return tr(this,void 0,void 0,(function*(){return yield yn(t,n)}))}function _r(t,n,e,r,o,i){return tr(this,void 0,void 0,(function*(){const s=yield pn({gamma:e,kernel:J,cParam:r,dParam:o},t,n);return i&&gn(t,s),vn(s)}))}function Ir(t,n){return tr(this,void 0,void 0,(function*(){return yield yn(t,n)}))}function Cr(t,n,e,r,o,i){return tr(this,void 0,void 0,(function*(){const s=yield pn({gamma:e,kernel:nt,kappa:r,theta:o},t,n);return i&&gn(t,s),vn(s)}))}function Nr(t,n){return tr(this,void 0,void 0,(function*(){return yield yn(t,n)}))}function br(n,e,r,i,s){!function(n,e,r,i){const s=t.shell.getTableView(n.name);s.addViewer(o.Viewer.boxPlot(o.DataFrame.fromColumns([e,r]))),s.addViewer(o.Viewer.grid(i))}(n,e,r,function(t,n,e=.05,r=!1){Yn(e);const i=new zn(t,n,r,e);if(r){if(!i.areVarsEqual(e))throw new Error(qn.NON_EQUAL_VARIANCES);if(!i.isNormal())throw new Error(qn.NON_NORMAL_DISTRIB)}const s=i.getOneWayAnova(),a=Wn.centralF.inv(1-e,s.dfBn,s.dfWn);return function(t,n,e,r,i){return o.DataFrame.fromColumns([o.Column.fromStrings("Source of variance",["Between groups","Within groups","Total","",r,"",i]),o.Column.fromList(o.COLUMN_TYPE.FLOAT,"Sum of squares",[t.ssBn,t.ssWn,t.ssTot,null,null,null,null]),o.Column.fromList(o.COLUMN_TYPE.INT,"Degrees of freedom",[t.dfBn,t.dfWn,t.dfTot,null,null,null,null]),o.Column.fromList(o.COLUMN_TYPE.FLOAT,"Mean square",[t.msBn,t.msWn,null,null,null,null,null]),o.Column.fromList(o.COLUMN_TYPE.FLOAT,"F-statistics",[t.fStat,null,null,null,null,null,null]),o.Column.fromList(o.COLUMN_TYPE.FLOAT,"p-value",[t.pValue,null,null,null,null,null,null]),o.Column.fromList(o.COLUMN_TYPE.FLOAT,`${n}-critical value`,[e,null,null,null,null,null,null])])}(s,e,a,`THE NULL HYPOTHESIS: the "${t.name}" \n factor does not produce a significant difference in the "${n.name}" feature.`,"Test result: "+(s.fStat>a?"REJECTED.":"FAILED TO REJECT."))}(e,r,i,s))}function Sr(){Ke()}})(),eda=r})();
|
|
1
|
+
var eda;(()=>{var t={7905:(t,n,e)=>{"use strict";t=e.hmd(t);var r,o=(r="undefined"!=typeof document&&document.currentScript?document.currentScript.src:void 0,function(t={}){var n,e,o=void 0!==t?t:{};o.ready=new Promise((function(t,r){n=t,e=r}));var i,s=Object.assign({},o),a="object"==typeof window,u="function"==typeof importScripts,l=("object"==typeof process&&"object"==typeof process.versions&&process.versions.node,"");(a||u)&&(u?l=self.location.href:"undefined"!=typeof document&&document.currentScript&&(l=document.currentScript.src),r&&(l=r),l=0!==l.indexOf("blob:")?l.substr(0,l.replace(/[?#].*/,"").lastIndexOf("/")+1):"",u&&(i=t=>{var n=new XMLHttpRequest;return n.open("GET",t,!1),n.responseType="arraybuffer",n.send(null),new Uint8Array(n.response)})),o.print||console.log.bind(console);var c,f,h=o.printErr||console.warn.bind(console);Object.assign(o,s),s=null,o.arguments&&o.arguments,o.thisProgram&&o.thisProgram,o.quit&&o.quit,o.wasmBinary&&(c=o.wasmBinary),o.noExitRuntime,"object"!=typeof WebAssembly&&C("no native wasm support detected");var m,d,p,g=!1;function v(){var t=f.buffer;o.HEAP8=m=new Int8Array(t),o.HEAP16=new Int16Array(t),o.HEAP32=new Int32Array(t),o.HEAPU8=d=new Uint8Array(t),o.HEAPU16=new Uint16Array(t),o.HEAPU32=p=new Uint32Array(t),o.HEAPF32=new Float32Array(t),o.HEAPF64=new Float64Array(t)}var y=[],w=[],E=[],A=0,_=null,I=null;function C(t){o.onAbort&&o.onAbort(t),h(t="Aborted("+t+")"),g=!0,t+=". Build with -sASSERTIONS for more info.";var n=new WebAssembly.RuntimeError(t);throw e(n),n}var N,b;function S(t){return t.startsWith("data:application/octet-stream;base64,")}function M(t){try{if(t==N&&c)return new Uint8Array(c);if(i)return i(t);throw"both async and sync fetching of the wasm failed"}catch(t){C(t)}}function T(t,n,e){return function(t){return c||!a&&!u||"function"!=typeof fetch?Promise.resolve().then((function(){return M(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 M(t)}))}(t).then((function(t){return WebAssembly.instantiate(t,n)})).then((function(t){return t})).then(e,(function(t){h("failed to asynchronously prepare wasm: "+t),C(t)}))}function O(t){for(;t.length>0;)t.shift()(o)}function P(t){this.excPtr=t,this.ptr=t-24,this.set_type=function(t){p[this.ptr+4>>2]=t},this.get_type=function(){return p[this.ptr+4>>2]},this.set_destructor=function(t){p[this.ptr+8>>2]=t},this.get_destructor=function(){return p[this.ptr+8>>2]},this.set_caught=function(t){t=t?1:0,m[this.ptr+12>>0]=t},this.get_caught=function(){return 0!=m[this.ptr+12>>0]},this.set_rethrown=function(t){t=t?1:0,m[this.ptr+13>>0]=t},this.get_rethrown=function(){return 0!=m[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){p[this.ptr+16>>2]=t},this.get_adjusted_ptr=function(){return p[this.ptr+16>>2]},this.get_exception_ptr=function(){if(G(this.get_type()))return p[this.excPtr>>2];var t=this.get_adjusted_ptr();return 0!==t?t:this.excPtr}}function x(t){var n=f.buffer;try{return f.grow(t-n.byteLength+65535>>>16),v(),1}catch(t){}}function L(t){return o["_"+t]}S(N="wasmDbscan.wasm")||(b=N,N=o.locateFile?o.locateFile(b,l):l+b);var R="undefined"!=typeof TextDecoder?new TextDecoder("utf8"):void 0;function F(t,n,e,r,o){var i={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=V(n);return function(t,n,e){!function(t,n,e,r){if(!(r>0))return 0;for(var o=e+r-1,i=0;i<t.length;++i){var s=t.charCodeAt(i);if(s>=55296&&s<=57343&&(s=65536+((1023&s)<<10)|1023&t.charCodeAt(++i)),s<=127){if(e>=o)break;n[e++]=s}else if(s<=2047){if(e+1>=o)break;n[e++]=192|s>>6,n[e++]=128|63&s}else if(s<=65535){if(e+2>=o)break;n[e++]=224|s>>12,n[e++]=128|s>>6&63,n[e++]=128|63&s}else{if(e+3>=o)break;n[e++]=240|s>>18,n[e++]=128|s>>12&63,n[e++]=128|s>>6&63,n[e++]=128|63&s}}n[e]=0}(t,d,n,e)}(t,e,n),e}(t)),n},array:t=>{var n,e,r=V(t.length);return n=t,e=r,m.set(n,e),r}},s=L(t),a=[],u=0;if(r)for(var l=0;l<r.length;l++){var c=i[e[l]];c?(0===u&&(u=k()),a[l]=c(r[l])):a[l]=r[l]}var f=s.apply(null,a);return function(t){return 0!==u&&B(u),function(t){return"string"===n?(e=t)?function(t,n,e){for(var r=n+e,o=n;t[o]&&!(o>=r);)++o;if(o-n>16&&t.buffer&&R)return R.decode(t.subarray(n,o));for(var i="";n<o;){var s=t[n++];if(128&s){var a=63&t[n++];if(192!=(224&s)){var u=63&t[n++];if((s=224==(240&s)?(15&s)<<12|a<<6|u:(7&s)<<18|a<<12|u<<6|63&t[n++])<65536)i+=String.fromCharCode(s);else{var l=s-65536;i+=String.fromCharCode(55296|l>>10,56320|1023&l)}}else i+=String.fromCharCode((31&s)<<6|a)}else i+=String.fromCharCode(s)}return i}(d,e,r):"":"boolean"===n?Boolean(t):t;var e,r}(t)}(f)}var U,D={__cxa_throw:function(t,n,e){throw new P(t).init(n,e),t},abort:function(){C("")},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 o=1;o<=4;o*=2){var i=e*(1+.2/o);if(i=Math.min(i,t+100663296),x(Math.min(r,(n=Math.max(t,i))+(65536-n%65536)%65536)))return!0}return!1}},k=(function(){var t,n,r,i,s={env:D,wasi_snapshot_preview1:D};function a(t,n){var e,r=t.exports;return o.asm=r,f=o.asm.memory,v(),o.asm.__indirect_function_table,e=o.asm.__wasm_call_ctors,w.unshift(e),function(t){if(A--,o.monitorRunDependencies&&o.monitorRunDependencies(A),0==A&&(null!==_&&(clearInterval(_),_=null),I)){var n=I;I=null,n()}}(),r}if(A++,o.monitorRunDependencies&&o.monitorRunDependencies(A),o.instantiateWasm)try{return o.instantiateWasm(s,a)}catch(t){h("Module.instantiateWasm callback failed with error: "+t),e(t)}(t=c,n=N,r=s,i=function(t){a(t.instance)},t||"function"!=typeof WebAssembly.instantiateStreaming||S(n)||"function"!=typeof fetch?T(n,r,i):fetch(n,{credentials:"same-origin"}).then((function(t){return WebAssembly.instantiateStreaming(t,r).then(i,(function(t){return h("wasm streaming compile failed: "+t),h("falling back to ArrayBuffer instantiation"),T(n,r,i)}))}))).catch(e)}(),o._dbscan=function(){return(o._dbscan=o.asm.dbscan).apply(null,arguments)},o._malloc=function(){return(o._malloc=o.asm.malloc).apply(null,arguments)},o._free=function(){return(o._free=o.asm.free).apply(null,arguments)},function(){return(k=o.asm.stackSave).apply(null,arguments)}),B=function(){return(B=o.asm.stackRestore).apply(null,arguments)},V=function(){return(V=o.asm.stackAlloc).apply(null,arguments)},G=function(){return(G=o.asm.__cxa_is_pointer_type).apply(null,arguments)};function q(){function t(){U||(U=!0,o.calledRun=!0,g||(O(w),n(o),o.onRuntimeInitialized&&o.onRuntimeInitialized(),function(){if(o.postRun)for("function"==typeof o.postRun&&(o.postRun=[o.postRun]);o.postRun.length;)t=o.postRun.shift(),E.unshift(t);var t;O(E)}()))}A>0||(function(){if(o.preRun)for("function"==typeof o.preRun&&(o.preRun=[o.preRun]);o.preRun.length;)t=o.preRun.shift(),y.unshift(t);var t;O(y)}(),A>0||(o.setStatus?(o.setStatus("Running..."),setTimeout((function(){setTimeout((function(){o.setStatus("")}),1),t()}),1)):t()))}if(o.ccall=F,o.cwrap=function(t,n,e,r){var o=!e||e.every((t=>"number"===t||"boolean"===t));return"string"!==n&&o&&!r?L(t):function(){return F(t,n,e,arguments)}},I=function t(){U||q(),U||(I=t)},o.preInit)for("function"==typeof o.preInit&&(o.preInit=[o.preInit]);o.preInit.length>0;)o.preInit.pop()();return q(),t.ready});"object"==typeof exports?t.exports=o:"function"==typeof define&&e.amdO?define([],(function(){return o})):"object"==typeof exports&&(exports.exportCppDbscanLib=o)},9414:(t,n,e)=>{"use strict";e.d(n,{Z:()=>a});var r=e(7537),o=e.n(r),i=e(3645),s=e.n(i)()(o());s.push([t.id,".scatter_plot_link {\n position: absolute!important;\n right: 10px;\n}\n\n.cliffs_grid {\n top: 10px;\n}\n\n.show_only_cliffs {\n top: 30px;\n}\n\n.ml-dim-reduction-settings-input i.grok-icon.grok-font-icon-settings {\n font-size: 18px;\n position: absolute;\n height: 28px;\n}\n\n.ml-dim-reduction-column-editor-input-root label {\n display: none !important;\n}\n\n.ml-dim-reduction-column-editor-input-root input, .ml-dim-reduction-column-editor-input-root select {\n margin-left: 20px !important;\n}\n\nh3.ml-dim-reduction-column-editor-input-root {\n margin: 0 !important;\n}\n\n.ml-dim-reduction-column-editor-root, .ml-dim-reduction-column-editor-header-root {\n display: flex;\n flex-direction: row;\n align-items: center;\n margin-bottom: 10px !important;\n width: 600px !important;\n}\n\n.ml-dim-reduction-column-editor-column-title {\n text-overflow: ellipsis;\n overflow: hidden;\n}\n\n.ml-dim-reduction-column-editor-header-root > h1:not(:first-child) {\n margin-left: 20px !important;\n}","",{version:3,sources:["webpack://./node_modules/@datagrok-libraries/ml/css/styles.css"],names:[],mappings:"AAAA;IACI,4BAA4B;IAC5B,WAAW;AACf;;AAEA;IACI,SAAS;AACb;;AAEA;IACI,SAAS;AACb;;AAEA;IACI,eAAe;IACf,kBAAkB;IAClB,YAAY;AAChB;;AAEA;IACI,wBAAwB;AAC5B;;AAEA;IACI,4BAA4B;AAChC;;AAEA;IACI,oBAAoB;AACxB;;AAEA;IACI,aAAa;IACb,mBAAmB;IACnB,mBAAmB;IACnB,8BAA8B;IAC9B,uBAAuB;AAC3B;;AAEA;IACI,uBAAuB;IACvB,gBAAgB;AACpB;;AAEA;IACI,4BAA4B;AAChC",sourcesContent:[".scatter_plot_link {\n position: absolute!important;\n right: 10px;\n}\n\n.cliffs_grid {\n top: 10px;\n}\n\n.show_only_cliffs {\n top: 30px;\n}\n\n.ml-dim-reduction-settings-input i.grok-icon.grok-font-icon-settings {\n font-size: 18px;\n position: absolute;\n height: 28px;\n}\n\n.ml-dim-reduction-column-editor-input-root label {\n display: none !important;\n}\n\n.ml-dim-reduction-column-editor-input-root input, .ml-dim-reduction-column-editor-input-root select {\n margin-left: 20px !important;\n}\n\nh3.ml-dim-reduction-column-editor-input-root {\n margin: 0 !important;\n}\n\n.ml-dim-reduction-column-editor-root, .ml-dim-reduction-column-editor-header-root {\n display: flex;\n flex-direction: row;\n align-items: center;\n margin-bottom: 10px !important;\n width: 600px !important;\n}\n\n.ml-dim-reduction-column-editor-column-title {\n text-overflow: ellipsis;\n overflow: hidden;\n}\n\n.ml-dim-reduction-column-editor-header-root > h1:not(:first-child) {\n margin-left: 20px !important;\n}"],sourceRoot:""}]);const a=s},3645:t=>{"use strict";t.exports=function(t){var n=[];return n.toString=function(){return this.map((function(n){var e="",r=void 0!==n[5];return n[4]&&(e+="@supports (".concat(n[4],") {")),n[2]&&(e+="@media ".concat(n[2]," {")),r&&(e+="@layer".concat(n[5].length>0?" ".concat(n[5]):""," {")),e+=t(n),r&&(e+="}"),n[2]&&(e+="}"),n[4]&&(e+="}"),e})).join("")},n.i=function(t,e,r,o,i){"string"==typeof t&&(t=[[null,t,void 0]]);var s={};if(r)for(var a=0;a<this.length;a++){var u=this[a][0];null!=u&&(s[u]=!0)}for(var l=0;l<t.length;l++){var c=[].concat(t[l]);r&&s[c[0]]||(void 0!==i&&(void 0===c[5]||(c[1]="@layer".concat(c[5].length>0?" ".concat(c[5]):""," {").concat(c[1],"}")),c[5]=i),e&&(c[2]?(c[1]="@media ".concat(c[2]," {").concat(c[1],"}"),c[2]=e):c[2]=e),o&&(c[4]?(c[1]="@supports (".concat(c[4],") {").concat(c[1],"}"),c[4]=o):c[4]="".concat(o)),n.push(c))}},n}},7537:t=>{"use strict";t.exports=function(t){var n=t[1],e=t[3];if(!e)return n;if("function"==typeof btoa){var r=btoa(unescape(encodeURIComponent(JSON.stringify(e)))),o="sourceMappingURL=data:application/json;charset=utf-8;base64,".concat(r),i="/*# ".concat(o," */");return[n].concat([i]).join("\n")}return[n].join("\n")}},2162:function(t){var n;t.exports=(n=function(t,n){var e=Array.prototype.concat,r=Array.prototype.slice,o=Object.prototype.toString;function i(n,e){var r=n>e?n:e;return t.pow(10,17-~~(t.log(r>0?r:-r)*t.LOG10E))}var s=Array.isArray||function(t){return"[object Array]"===o.call(t)};function a(t){return"[object Function]"===o.call(t)}function u(t){return"number"==typeof t&&t-t==0}function l(){return new l._init(arguments)}function c(){return 0}function f(){return 1}function h(t,n){return t===n?1:0}l.fn=l.prototype,l._init=function(t){if(s(t[0]))if(s(t[0][0])){a(t[1])&&(t[0]=l.map(t[0],t[1]));for(var n=0;n<t[0].length;n++)this[n]=t[0][n];this.length=t[0].length}else this[0]=a(t[1])?l.map(t[0],t[1]):t[0],this.length=1;else if(u(t[0]))this[0]=l.seq.apply(null,t),this.length=1;else{if(t[0]instanceof l)return l(t[0].toArray());this[0]=[],this.length=1}return this},l._init.prototype=l.prototype,l._init.constructor=l,l.utils={calcRdx:i,isArray:s,isFunction:a,isNumber:u,toVector:function(t){return e.apply([],t)}},l._random_fn=t.random,l.setRandom=function(t){if("function"!=typeof t)throw new TypeError("fn is not a function");l._random_fn=t},l.extend=function(t){var n,e;if(1===arguments.length){for(e in t)l[e]=t[e];return this}for(n=1;n<arguments.length;n++)for(e in arguments[n])t[e]=arguments[n][e];return t},l.rows=function(t){return t.length||1},l.cols=function(t){return t[0].length||1},l.dimensions=function(t){return{rows:l.rows(t),cols:l.cols(t)}},l.row=function(t,n){return s(n)?n.map((function(n){return l.row(t,n)})):t[n]},l.rowa=function(t,n){return l.row(t,n)},l.col=function(t,n){if(s(n)){var e=l.arange(t.length).map((function(){return new Array(n.length)}));return n.forEach((function(n,r){l.arange(t.length).forEach((function(o){e[o][r]=t[o][n]}))})),e}for(var r=new Array(t.length),o=0;o<t.length;o++)r[o]=[t[o][n]];return r},l.cola=function(t,n){return l.col(t,n).map((function(t){return t[0]}))},l.diag=function(t){for(var n=l.rows(t),e=new Array(n),r=0;r<n;r++)e[r]=[t[r][r]];return e},l.antidiag=function(t){for(var n=l.rows(t)-1,e=new Array(n),r=0;n>=0;n--,r++)e[r]=[t[r][n]];return e},l.transpose=function(t){var n,e,r,o,i,a=[];for(s(t[0])||(t=[t]),e=t.length,r=t[0].length,i=0;i<r;i++){for(n=new Array(e),o=0;o<e;o++)n[o]=t[o][i];a.push(n)}return 1===a.length?a[0]:a},l.map=function(t,n,e){var r,o,i,a,u;for(s(t[0])||(t=[t]),o=t.length,i=t[0].length,a=e?t:new Array(o),r=0;r<o;r++)for(a[r]||(a[r]=new Array(i)),u=0;u<i;u++)a[r][u]=n(t[r][u],r,u);return 1===a.length?a[0]:a},l.cumreduce=function(t,n,e){var r,o,i,a,u;for(s(t[0])||(t=[t]),o=t.length,i=t[0].length,a=e?t:new Array(o),r=0;r<o;r++)for(a[r]||(a[r]=new Array(i)),i>0&&(a[r][0]=t[r][0]),u=1;u<i;u++)a[r][u]=n(a[r][u-1],t[r][u]);return 1===a.length?a[0]:a},l.alter=function(t,n){return l.map(t,n,!0)},l.create=function(t,n,e){var r,o,i=new Array(t);for(a(n)&&(e=n,n=t),r=0;r<t;r++)for(i[r]=new Array(n),o=0;o<n;o++)i[r][o]=e(r,o);return i},l.zeros=function(t,n){return u(n)||(n=t),l.create(t,n,c)},l.ones=function(t,n){return u(n)||(n=t),l.create(t,n,f)},l.rand=function(t,n){return u(n)||(n=t),l.create(t,n,l._random_fn)},l.identity=function(t,n){return u(n)||(n=t),l.create(t,n,h)},l.symmetric=function(t){var n,e,r=t.length;if(t.length!==t[0].length)return!1;for(n=0;n<r;n++)for(e=0;e<r;e++)if(t[e][n]!==t[n][e])return!1;return!0},l.clear=function(t){return l.alter(t,c)},l.seq=function(t,n,e,r){a(r)||(r=!1);var o,s=[],u=i(t,n),l=(n*u-t*u)/((e-1)*u),c=t;for(o=0;c<=n&&o<e;c=(t*u+l*u*++o)/u)s.push(r?r(c,o):c);return s},l.arange=function(t,e,r){var o,i=[];if(r=r||1,e===n&&(e=t,t=0),t===e||0===r)return[];if(t<e&&r<0)return[];if(t>e&&r>0)return[];if(r>0)for(o=t;o<e;o+=r)i.push(o);else for(o=t;o>e;o+=r)i.push(o);return i},l.slice=function(){function t(t,e,r,o){var i,s=[],a=t.length;if(e===n&&r===n&&o===n)return l.copy(t);if(o=o||1,(e=(e=e||0)>=0?e:a+e)===(r=(r=r||t.length)>=0?r:a+r)||0===o)return[];if(e<r&&o<0)return[];if(e>r&&o>0)return[];if(o>0)for(i=e;i<r;i+=o)s.push(t[i]);else for(i=e;i>r;i+=o)s.push(t[i]);return s}return function(n,e){var r,o;return u((e=e||{}).row)?u(e.col)?n[e.row][e.col]:t(l.rowa(n,e.row),(r=e.col||{}).start,r.end,r.step):u(e.col)?t(l.cola(n,e.col),(o=e.row||{}).start,o.end,o.step):(o=e.row||{},r=e.col||{},t(n,o.start,o.end,o.step).map((function(n){return t(n,r.start,r.end,r.step)})))}}(),l.sliceAssign=function(e,r,o){var i,s;if(u(r.row)){if(u(r.col))return e[r.row][r.col]=o;r.col=r.col||{},r.col.start=r.col.start||0,r.col.end=r.col.end||e[0].length,r.col.step=r.col.step||1,i=l.arange(r.col.start,t.min(e.length,r.col.end),r.col.step);var a=r.row;return i.forEach((function(t,n){e[a][t]=o[n]})),e}if(u(r.col)){r.row=r.row||{},r.row.start=r.row.start||0,r.row.end=r.row.end||e.length,r.row.step=r.row.step||1,s=l.arange(r.row.start,t.min(e[0].length,r.row.end),r.row.step);var c=r.col;return s.forEach((function(t,n){e[t][c]=o[n]})),e}return o[0].length===n&&(o=[o]),r.row.start=r.row.start||0,r.row.end=r.row.end||e.length,r.row.step=r.row.step||1,r.col.start=r.col.start||0,r.col.end=r.col.end||e[0].length,r.col.step=r.col.step||1,s=l.arange(r.row.start,t.min(e.length,r.row.end),r.row.step),i=l.arange(r.col.start,t.min(e[0].length,r.col.end),r.col.step),s.forEach((function(t,n){i.forEach((function(r,i){e[t][r]=o[n][i]}))})),e},l.diagonal=function(t){var n=l.zeros(t.length,t.length);return t.forEach((function(t,e){n[e][e]=t})),n},l.copy=function(t){return t.map((function(t){return u(t)?t:t.map((function(t){return t}))}))};var m=l.prototype;return m.length=0,m.push=Array.prototype.push,m.sort=Array.prototype.sort,m.splice=Array.prototype.splice,m.slice=Array.prototype.slice,m.toArray=function(){return this.length>1?r.call(this):r.call(this)[0]},m.map=function(t,n){return l(l.map(this,t,n))},m.cumreduce=function(t,n){return l(l.cumreduce(this,t,n))},m.alter=function(t){return l.alter(this,t),this},function(t){for(var n=0;n<t.length;n++)!function(t){m[t]=function(n){var e,r=this;return n?(setTimeout((function(){n.call(r,m[t].call(r))})),this):(e=l[t](this),s(e)?l(e):e)}}(t[n])}("transpose clear symmetric rows cols dimensions diag antidiag".split(" ")),function(t){for(var n=0;n<t.length;n++)!function(t){m[t]=function(n,e){var r=this;return e?(setTimeout((function(){e.call(r,m[t].call(r,n))})),this):l(l[t](this,n))}}(t[n])}("row col".split(" ")),function(t){for(var n=0;n<t.length;n++)!function(t){m[t]=function(){return l(l[t].apply(null,arguments))}}(t[n])}("create zeros ones rand identity".split(" ")),l}(Math),function(t,n){var e=t.utils.isFunction;function r(t,n){return t-n}function o(t,e,r){return n.max(e,n.min(t,r))}t.sum=function(t){for(var n=0,e=t.length;--e>=0;)n+=t[e];return n},t.sumsqrd=function(t){for(var n=0,e=t.length;--e>=0;)n+=t[e]*t[e];return n},t.sumsqerr=function(n){for(var e,r=t.mean(n),o=0,i=n.length;--i>=0;)o+=(e=n[i]-r)*e;return o},t.sumrow=function(t){for(var n=0,e=t.length;--e>=0;)n+=t[e];return n},t.product=function(t){for(var n=1,e=t.length;--e>=0;)n*=t[e];return n},t.min=function(t){for(var n=t[0],e=0;++e<t.length;)t[e]<n&&(n=t[e]);return n},t.max=function(t){for(var n=t[0],e=0;++e<t.length;)t[e]>n&&(n=t[e]);return n},t.unique=function(t){for(var n={},e=[],r=0;r<t.length;r++)n[t[r]]||(n[t[r]]=!0,e.push(t[r]));return e},t.mean=function(n){return t.sum(n)/n.length},t.meansqerr=function(n){return t.sumsqerr(n)/n.length},t.geomean=function(e){var r=e.map(n.log),o=t.mean(r);return n.exp(o)},t.median=function(t){var n=t.length,e=t.slice().sort(r);return 1&n?e[n/2|0]:(e[n/2-1]+e[n/2])/2},t.cumsum=function(n){return t.cumreduce(n,(function(t,n){return t+n}))},t.cumprod=function(n){return t.cumreduce(n,(function(t,n){return t*n}))},t.diff=function(t){var n,e=[],r=t.length;for(n=1;n<r;n++)e.push(t[n]-t[n-1]);return e},t.rank=function(t){var n,e=[],o={};for(n=0;n<t.length;n++)o[u=t[n]]?o[u]++:(o[u]=1,e.push(u));var i=e.sort(r),s={},a=1;for(n=0;n<i.length;n++){var u,l=o[u=i[n]],c=(a+(a+l-1))/2;s[u]=c,a+=l}return t.map((function(t){return s[t]}))},t.mode=function(t){var n,e=t.length,o=t.slice().sort(r),i=1,s=0,a=0,u=[];for(n=0;n<e;n++)o[n]===o[n+1]?i++:(i>s?(u=[o[n]],s=i,a=0):i===s&&(u.push(o[n]),a++),i=1);return 0===a?u[0]:u},t.range=function(n){return t.max(n)-t.min(n)},t.variance=function(n,e){return t.sumsqerr(n)/(n.length-(e?1:0))},t.pooledvariance=function(n){return n.reduce((function(n,e){return n+t.sumsqerr(e)}),0)/(n.reduce((function(t,n){return t+n.length}),0)-n.length)},t.deviation=function(n){for(var e=t.mean(n),r=n.length,o=new Array(r),i=0;i<r;i++)o[i]=n[i]-e;return o},t.stdev=function(e,r){return n.sqrt(t.variance(e,r))},t.pooledstdev=function(e){return n.sqrt(t.pooledvariance(e))},t.meandev=function(e){for(var r=t.mean(e),o=[],i=e.length-1;i>=0;i--)o.push(n.abs(e[i]-r));return t.mean(o)},t.meddev=function(e){for(var r=t.median(e),o=[],i=e.length-1;i>=0;i--)o.push(n.abs(e[i]-r));return t.median(o)},t.coeffvar=function(n){return t.stdev(n)/t.mean(n)},t.quartiles=function(t){var e=t.length,o=t.slice().sort(r);return[o[n.round(e/4)-1],o[n.round(e/2)-1],o[n.round(3*e/4)-1]]},t.quantiles=function(t,e,i,s){var a,u,l,c,f,h=t.slice().sort(r),m=[e.length],d=t.length;for(void 0===i&&(i=3/8),void 0===s&&(s=3/8),a=0;a<e.length;a++)l=d*(u=e[a])+(i+u*(1-i-s)),c=n.floor(o(l,1,d-1)),f=o(l-c,0,1),m[a]=(1-f)*h[c-1]+f*h[c];return m},t.percentile=function(t,n,e){var o=t.slice().sort(r),i=n*(o.length+(e?1:-1))+(e?0:1),s=parseInt(i),a=i-s;return s+1<o.length?o[s-1]+a*(o[s]-o[s-1]):o[s-1]},t.percentileOfScore=function(t,n,e){var r,o,i=0,s=t.length,a=!1;for("strict"===e&&(a=!0),o=0;o<s;o++)r=t[o],(a&&r<n||!a&&r<=n)&&i++;return i/s},t.histogram=function(e,r){r=r||4;var o,i=t.min(e),s=(t.max(e)-i)/r,a=e.length,u=[];for(o=0;o<r;o++)u[o]=0;for(o=0;o<a;o++)u[n.min(n.floor((e[o]-i)/s),r-1)]+=1;return u},t.covariance=function(n,e){var r,o=t.mean(n),i=t.mean(e),s=n.length,a=new Array(s);for(r=0;r<s;r++)a[r]=(n[r]-o)*(e[r]-i);return t.sum(a)/(s-1)},t.corrcoeff=function(n,e){return t.covariance(n,e)/t.stdev(n,1)/t.stdev(e,1)},t.spearmancoeff=function(n,e){return n=t.rank(n),e=t.rank(e),t.corrcoeff(n,e)},t.stanMoment=function(e,r){for(var o=t.mean(e),i=t.stdev(e),s=e.length,a=0,u=0;u<s;u++)a+=n.pow((e[u]-o)/i,r);return a/e.length},t.skewness=function(n){return t.stanMoment(n,3)},t.kurtosis=function(n){return t.stanMoment(n,4)-3};var i=t.prototype;!function(n){for(var r=0;r<n.length;r++)!function(n){i[n]=function(r,o){var s=[],a=0,u=this;if(e(r)&&(o=r,r=!1),o)return setTimeout((function(){o.call(u,i[n].call(u,r))})),this;if(this.length>1){for(u=!0===r?this:this.transpose();a<u.length;a++)s[a]=t[n](u[a]);return s}return t[n](this[0],r)}}(n[r])}("cumsum cumprod".split(" ")),function(n){for(var r=0;r<n.length;r++)!function(n){i[n]=function(r,o){var s=[],a=0,u=this;if(e(r)&&(o=r,r=!1),o)return setTimeout((function(){o.call(u,i[n].call(u,r))})),this;if(this.length>1){for("sumrow"!==n&&(u=!0===r?this:this.transpose());a<u.length;a++)s[a]=t[n](u[a]);return!0===r?t[n](t.utils.toVector(s)):s}return t[n](this[0],r)}}(n[r])}("sum sumsqrd sumsqerr sumrow product min max unique mean meansqerr geomean median diff rank mode range variance deviation stdev meandev meddev coeffvar quartiles histogram skewness kurtosis".split(" ")),function(n){for(var r=0;r<n.length;r++)!function(n){i[n]=function(){var r,o=[],s=0,a=this,u=Array.prototype.slice.call(arguments);if(e(u[u.length-1])){r=u[u.length-1];var l=u.slice(0,u.length-1);return setTimeout((function(){r.call(a,i[n].apply(a,l))})),this}r=void 0;var c=function(e){return t[n].apply(a,[e].concat(u))};if(this.length>1){for(a=a.transpose();s<a.length;s++)o[s]=c(a[s]);return o}return c(this[0])}}(n[r])}("quantiles percentileOfScore".split(" "))}(n,Math),function(t,n){t.gammaln=function(t){var e,r,o,i=0,s=[76.18009172947146,-86.50532032941678,24.01409824083091,-1.231739572450155,.001208650973866179,-5395239384953e-18],a=1.000000000190015;for(o=(r=e=t)+5.5,o-=(e+.5)*n.log(o);i<6;i++)a+=s[i]/++r;return n.log(2.5066282746310007*a/e)-o},t.loggam=function(t){var e,r,o,i,s,a,u,l=[.08333333333333333,-.002777777777777778,.0007936507936507937,-.0005952380952380952,.0008417508417508418,-.001917526917526918,.00641025641025641,-.02955065359477124,.1796443723688307,-1.3924322169059];if(e=t,u=0,1==t||2==t)return 0;for(t<=7&&(e=t+(u=n.floor(7-t))),r=1/(e*e),o=2*n.PI,s=l[9],a=8;a>=0;a--)s*=r,s+=l[a];if(i=s/e+.5*n.log(o)+(e-.5)*n.log(e)-e,t<=7)for(a=1;a<=u;a++)i-=n.log(e-1),e-=1;return i},t.gammafn=function(t){var e,r,o,i,s=[-1.716185138865495,24.76565080557592,-379.80425647094563,629.3311553128184,866.9662027904133,-31451.272968848367,-36144.413418691176,66456.14382024054],a=[-30.8402300119739,315.35062697960416,-1015.1563674902192,-3107.771671572311,22538.11842098015,4755.846277527881,-134659.9598649693,-115132.2596755535],u=!1,l=0,c=0,f=0,h=t;if(t>171.6243769536076)return 1/0;if(h<=0){if(!(i=h%1+36e-17))return 1/0;u=(1&h?-1:1)*n.PI/n.sin(n.PI*i),h=1-h}for(o=h,r=h<1?h++:(h-=l=(0|h)-1)-1,e=0;e<8;++e)f=(f+s[e])*r,c=c*r+a[e];if(i=f/c+1,o<h)i/=o;else if(o>h)for(e=0;e<l;++e)i*=h,h++;return u&&(i=u/i),i},t.gammap=function(n,e){return t.lowRegGamma(n,e)*t.gammafn(n)},t.lowRegGamma=function(e,r){var o,i=t.gammaln(e),s=e,a=1/e,u=a,l=r+1-e,c=1/1e-30,f=1/l,h=f,m=1,d=-~(8.5*n.log(e>=1?e:1/e)+.4*e+17);if(r<0||e<=0)return NaN;if(r<e+1){for(;m<=d;m++)a+=u*=r/++s;return a*n.exp(-r+e*n.log(r)-i)}for(;m<=d;m++)h*=(f=1/(f=(o=-m*(m-e))*f+(l+=2)))*(c=l+o/c);return 1-h*n.exp(-r+e*n.log(r)-i)},t.factorialln=function(n){return n<0?NaN:t.gammaln(n+1)},t.factorial=function(n){return n<0?NaN:t.gammafn(n+1)},t.combination=function(e,r){return e>170||r>170?n.exp(t.combinationln(e,r)):t.factorial(e)/t.factorial(r)/t.factorial(e-r)},t.combinationln=function(n,e){return t.factorialln(n)-t.factorialln(e)-t.factorialln(n-e)},t.permutation=function(n,e){return t.factorial(n)/t.factorial(n-e)},t.betafn=function(e,r){if(!(e<=0||r<=0))return e+r>170?n.exp(t.betaln(e,r)):t.gammafn(e)*t.gammafn(r)/t.gammafn(e+r)},t.betaln=function(n,e){return t.gammaln(n)+t.gammaln(e)-t.gammaln(n+e)},t.betacf=function(t,e,r){var o,i,s,a,u=1e-30,l=1,c=e+r,f=e+1,h=e-1,m=1,d=1-c*t/f;for(n.abs(d)<u&&(d=u),a=d=1/d;l<=100&&(d=1+(i=l*(r-l)*t/((h+(o=2*l))*(e+o)))*d,n.abs(d)<u&&(d=u),m=1+i/m,n.abs(m)<u&&(m=u),a*=(d=1/d)*m,d=1+(i=-(e+l)*(c+l)*t/((e+o)*(f+o)))*d,n.abs(d)<u&&(d=u),m=1+i/m,n.abs(m)<u&&(m=u),a*=s=(d=1/d)*m,!(n.abs(s-1)<3e-7));l++);return a},t.gammapinv=function(e,r){var o,i,s,a,u,l,c=0,f=r-1,h=t.gammaln(r);if(e>=1)return n.max(100,r+100*n.sqrt(r));if(e<=0)return 0;for(r>1?(u=n.log(f),l=n.exp(f*(u-1)-h),a=e<.5?e:1-e,o=(2.30753+.27061*(i=n.sqrt(-2*n.log(a))))/(1+i*(.99229+.04481*i))-i,e<.5&&(o=-o),o=n.max(.001,r*n.pow(1-1/(9*r)-o/(3*n.sqrt(r)),3))):o=e<(i=1-r*(.253+.12*r))?n.pow(e/i,1/r):1-n.log(1-(e-i)/(1-i));c<12;c++){if(o<=0)return 0;if((o-=i=(s=(t.lowRegGamma(r,o)-e)/(i=r>1?l*n.exp(-(o-f)+f*(n.log(o)-u)):n.exp(-o+f*n.log(o)-h)))/(1-.5*n.min(1,s*((r-1)/o-1))))<=0&&(o=.5*(o+i)),n.abs(i)<1e-8*o)break}return o},t.erf=function(t){var e,r,o,i,s=[-1.3026537197817094,.6419697923564902,.019476473204185836,-.00956151478680863,-.000946595344482036,.000366839497852761,42523324806907e-18,-20278578112534e-18,-1624290004647e-18,130365583558e-17,1.5626441722e-8,-8.5238095915e-8,6.529054439e-9,5.059343495e-9,-9.91364156e-10,-2.27365122e-10,96467911e-18,2394038e-18,-6886027e-18,894487e-18,313092e-18,-112708e-18,381e-18,7106e-18,-1523e-18,-94e-18,121e-18,-28e-18],a=s.length-1,u=!1,l=0,c=0;for(t<0&&(t=-t,u=!0),r=4*(e=2/(2+t))-2;a>0;a--)o=l,l=r*l-c+s[a],c=o;return i=e*n.exp(-t*t+.5*(s[0]+r*l)-c),u?i-1:1-i},t.erfc=function(n){return 1-t.erf(n)},t.erfcinv=function(e){var r,o,i,s,a=0;if(e>=2)return-100;if(e<=0)return 100;for(s=e<1?e:2-e,r=-.70711*((2.30753+.27061*(i=n.sqrt(-2*n.log(s/2))))/(1+i*(.99229+.04481*i))-i);a<2;a++)r+=(o=t.erfc(r)-s)/(1.1283791670955126*n.exp(-r*r)-r*o);return e<1?r:-r},t.ibetainv=function(e,r,o){var i,s,a,u,l,c,f,h,m,d,p=r-1,g=o-1,v=0;if(e<=0)return 0;if(e>=1)return 1;for(r>=1&&o>=1?(a=e<.5?e:1-e,c=(2.30753+.27061*(u=n.sqrt(-2*n.log(a))))/(1+u*(.99229+.04481*u))-u,e<.5&&(c=-c),f=(c*c-3)/6,h=2/(1/(2*r-1)+1/(2*o-1)),m=c*n.sqrt(f+h)/h-(1/(2*o-1)-1/(2*r-1))*(f+5/6-2/(3*h)),c=r/(r+o*n.exp(2*m))):(i=n.log(r/(r+o)),s=n.log(o/(r+o)),c=e<(u=n.exp(r*i)/r)/(m=u+(l=n.exp(o*s)/o))?n.pow(r*m*e,1/r):1-n.pow(o*m*(1-e),1/o)),d=-t.gammaln(r)-t.gammaln(o)+t.gammaln(r+o);v<10;v++){if(0===c||1===c)return c;if((c-=u=(l=(t.ibeta(c,r,o)-e)/(u=n.exp(p*n.log(c)+g*n.log(1-c)+d)))/(1-.5*n.min(1,l*(p/c-g/(1-c)))))<=0&&(c=.5*(c+u)),c>=1&&(c=.5*(c+u+1)),n.abs(u)<1e-8*c&&v>0)break}return c},t.ibeta=function(e,r,o){var i=0===e||1===e?0:n.exp(t.gammaln(r+o)-t.gammaln(r)-t.gammaln(o)+r*n.log(e)+o*n.log(1-e));return!(e<0||e>1)&&(e<(r+1)/(r+o+2)?i*t.betacf(e,r,o)/r:1-i*t.betacf(1-e,o,r)/o)},t.randn=function(e,r){var o,i,s,a,u;if(r||(r=e),e)return t.create(e,r,(function(){return t.randn()}));do{o=t._random_fn(),i=1.7156*(t._random_fn()-.5),u=(s=o-.449871)*s+(a=n.abs(i)+.386595)*(.196*a-.25472*s)}while(u>.27597&&(u>.27846||i*i>-4*n.log(o)*o*o));return i/o},t.randg=function(e,r,o){var i,s,a,u,l,c,f=e;if(o||(o=r),e||(e=1),r)return(c=t.zeros(r,o)).alter((function(){return t.randg(e)})),c;e<1&&(e+=1),i=e-1/3,s=1/n.sqrt(9*i);do{do{u=1+s*(l=t.randn())}while(u<=0);u*=u*u,a=t._random_fn()}while(a>1-.331*n.pow(l,4)&&n.log(a)>.5*l*l+i*(1-u+n.log(u)));if(e==f)return i*u;do{a=t._random_fn()}while(0===a);return n.pow(a,1/f)*i*u},function(n){for(var e=0;e<n.length;e++)!function(n){t.fn[n]=function(){return t(t.map(this,(function(e){return t[n](e)})))}}(n[e])}("gammaln gammafn factorial factorialln".split(" ")),function(n){for(var e=0;e<n.length;e++)!function(n){t.fn[n]=function(){return t(t[n].apply(null,arguments))}}(n[e])}("randn".split(" "))}(n,Math),function(t,n){function e(t,e,r,o){for(var i,s=0,a=1,u=1,l=1,c=0,f=0;n.abs((u-f)/u)>o;)f=u,a=l+(i=-(e+c)*(e+r+c)*t/(e+2*c)/(e+2*c+1))*a,u=(s=u+i*s)+(i=(c+=1)*(r-c)*t/(e+2*c-1)/(e+2*c))*u,s/=l=a+i*l,a/=l,u/=l,l=1;return u/e}function r(e,r,o){var i=[.9815606342467192,.9041172563704749,.7699026741943047,.5873179542866175,.3678314989981802,.1252334085114689],s=[.04717533638651183,.10693932599531843,.16007832854334622,.20316742672306592,.2334925365383548,.24914704581340277],a=.5*e;if(a>=8)return 1;var u,l=2*t.normal.cdf(a,0,1,1,0)-1;l=l>=n.exp(-50/o)?n.pow(l,o):0;for(var c=a,f=(8-a)/(u=e>3?2:3),h=c+f,m=0,d=o-1,p=1;p<=u;p++){for(var g=0,v=.5*(h+c),y=.5*(h-c),w=1;w<=12;w++){var E,A=v+y*(6<w?i[(E=12-w+1)-1]:-i[(E=w)-1]),_=A*A;if(_>60)break;var I=2*t.normal.cdf(A,0,1,1,0)*.5-2*t.normal.cdf(A,e,1,1,0)*.5;I>=n.exp(-30/d)&&(g+=I=s[E-1]*n.exp(-.5*_)*n.pow(I,d))}m+=g*=2*y*o/n.sqrt(2*n.PI),c=h,h+=f}return(l+=m)<=n.exp(-30/r)?0:(l=n.pow(l,r))>=1?1:l}!function(n){for(var e=0;e<n.length;e++)!function(n){t[n]=function t(n,e,r){return this instanceof t?(this._a=n,this._b=e,this._c=r,this):new t(n,e,r)},t.fn[n]=function(e,r,o){var i=t[n](e,r,o);return i.data=this,i},t[n].prototype.sample=function(e){var r=this._a,o=this._b,i=this._c;return e?t.alter(e,(function(){return t[n].sample(r,o,i)})):t[n].sample(r,o,i)},function(e){for(var r=0;r<e.length;r++)!function(e){t[n].prototype[e]=function(r){var o=this._a,i=this._b,s=this._c;return r||0===r||(r=this.data),"number"!=typeof r?t.fn.map.call(r,(function(r){return t[n][e](r,o,i,s)})):t[n][e](r,o,i,s)}}(e[r])}("pdf cdf inv".split(" ")),function(e){for(var r=0;r<e.length;r++)!function(e){t[n].prototype[e]=function(){return t[n][e](this._a,this._b,this._c)}}(e[r])}("mean median mode variance".split(" "))}(n[e])}("beta centralF cauchy chisquare exponential gamma invgamma kumaraswamy laplace lognormal noncentralt normal pareto studentt weibull uniform binomial negbin hypgeom poisson triangular tukey arcsine".split(" ")),t.extend(t.beta,{pdf:function(e,r,o){return e>1||e<0?0:1==r&&1==o?1:r<512&&o<512?n.pow(e,r-1)*n.pow(1-e,o-1)/t.betafn(r,o):n.exp((r-1)*n.log(e)+(o-1)*n.log(1-e)-t.betaln(r,o))},cdf:function(n,e,r){return n>1||n<0?1*(n>1):t.ibeta(n,e,r)},inv:function(n,e,r){return t.ibetainv(n,e,r)},mean:function(t,n){return t/(t+n)},median:function(n,e){return t.ibetainv(.5,n,e)},mode:function(t,n){return(t-1)/(t+n-2)},sample:function(n,e){var r=t.randg(n);return r/(r+t.randg(e))},variance:function(t,e){return t*e/(n.pow(t+e,2)*(t+e+1))}}),t.extend(t.centralF,{pdf:function(e,r,o){var i;return e<0?0:r<=2?0===e&&r<2?1/0:0===e&&2===r?1:1/t.betafn(r/2,o/2)*n.pow(r/o,r/2)*n.pow(e,r/2-1)*n.pow(1+r/o*e,-(r+o)/2):(i=r*e/(o+e*r),r*(o/(o+e*r))/2*t.binomial.pdf((r-2)/2,(r+o-2)/2,i))},cdf:function(n,e,r){return n<0?0:t.ibeta(e*n/(e*n+r),e/2,r/2)},inv:function(n,e,r){return r/(e*(1/t.ibetainv(n,e/2,r/2)-1))},mean:function(t,n){return n>2?n/(n-2):void 0},mode:function(t,n){return t>2?n*(t-2)/(t*(n+2)):void 0},sample:function(n,e){return 2*t.randg(n/2)/n/(2*t.randg(e/2)/e)},variance:function(t,n){if(!(n<=4))return 2*n*n*(t+n-2)/(t*(n-2)*(n-2)*(n-4))}}),t.extend(t.cauchy,{pdf:function(t,e,r){return r<0?0:r/(n.pow(t-e,2)+n.pow(r,2))/n.PI},cdf:function(t,e,r){return n.atan((t-e)/r)/n.PI+.5},inv:function(t,e,r){return e+r*n.tan(n.PI*(t-.5))},median:function(t){return t},mode:function(t){return t},sample:function(e,r){return t.randn()*n.sqrt(1/(2*t.randg(.5)))*r+e}}),t.extend(t.chisquare,{pdf:function(e,r){return e<0?0:0===e&&2===r?.5:n.exp((r/2-1)*n.log(e)-e/2-r/2*n.log(2)-t.gammaln(r/2))},cdf:function(n,e){return n<0?0:t.lowRegGamma(e/2,n/2)},inv:function(n,e){return 2*t.gammapinv(n,.5*e)},mean:function(t){return t},median:function(t){return t*n.pow(1-2/(9*t),3)},mode:function(t){return t-2>0?t-2:0},sample:function(n){return 2*t.randg(n/2)},variance:function(t){return 2*t}}),t.extend(t.exponential,{pdf:function(t,e){return t<0?0:e*n.exp(-e*t)},cdf:function(t,e){return t<0?0:1-n.exp(-e*t)},inv:function(t,e){return-n.log(1-t)/e},mean:function(t){return 1/t},median:function(t){return 1/t*n.log(2)},mode:function(){return 0},sample:function(e){return-1/e*n.log(t._random_fn())},variance:function(t){return n.pow(t,-2)}}),t.extend(t.gamma,{pdf:function(e,r,o){return e<0?0:0===e&&1===r?1/o:n.exp((r-1)*n.log(e)-e/o-t.gammaln(r)-r*n.log(o))},cdf:function(n,e,r){return n<0?0:t.lowRegGamma(e,n/r)},inv:function(n,e,r){return t.gammapinv(n,e)*r},mean:function(t,n){return t*n},mode:function(t,n){if(t>1)return(t-1)*n},sample:function(n,e){return t.randg(n)*e},variance:function(t,n){return t*n*n}}),t.extend(t.invgamma,{pdf:function(e,r,o){return e<=0?0:n.exp(-(r+1)*n.log(e)-o/e-t.gammaln(r)+r*n.log(o))},cdf:function(n,e,r){return n<=0?0:1-t.lowRegGamma(e,r/n)},inv:function(n,e,r){return r/t.gammapinv(1-n,e)},mean:function(t,n){return t>1?n/(t-1):void 0},mode:function(t,n){return n/(t+1)},sample:function(n,e){return e/t.randg(n)},variance:function(t,n){if(!(t<=2))return n*n/((t-1)*(t-1)*(t-2))}}),t.extend(t.kumaraswamy,{pdf:function(t,e,r){return 0===t&&1===e?r:1===t&&1===r?e:n.exp(n.log(e)+n.log(r)+(e-1)*n.log(t)+(r-1)*n.log(1-n.pow(t,e)))},cdf:function(t,e,r){return t<0?0:t>1?1:1-n.pow(1-n.pow(t,e),r)},inv:function(t,e,r){return n.pow(1-n.pow(1-t,1/r),1/e)},mean:function(n,e){return e*t.gammafn(1+1/n)*t.gammafn(e)/t.gammafn(1+1/n+e)},median:function(t,e){return n.pow(1-n.pow(2,-1/e),1/t)},mode:function(t,e){if(t>=1&&e>=1&&1!==t&&1!==e)return n.pow((t-1)/(t*e-1),1/t)},variance:function(){throw new Error("variance not yet implemented")}}),t.extend(t.lognormal,{pdf:function(t,e,r){return t<=0?0:n.exp(-n.log(t)-.5*n.log(2*n.PI)-n.log(r)-n.pow(n.log(t)-e,2)/(2*r*r))},cdf:function(e,r,o){return e<0?0:.5+.5*t.erf((n.log(e)-r)/n.sqrt(2*o*o))},inv:function(e,r,o){return n.exp(-1.4142135623730951*o*t.erfcinv(2*e)+r)},mean:function(t,e){return n.exp(t+e*e/2)},median:function(t){return n.exp(t)},mode:function(t,e){return n.exp(t-e*e)},sample:function(e,r){return n.exp(t.randn()*r+e)},variance:function(t,e){return(n.exp(e*e)-1)*n.exp(2*t+e*e)}}),t.extend(t.noncentralt,{pdf:function(e,r,o){return n.abs(o)<1e-14?t.studentt.pdf(e,r):n.abs(e)<1e-14?n.exp(t.gammaln((r+1)/2)-o*o/2-.5*n.log(n.PI*r)-t.gammaln(r/2)):r/e*(t.noncentralt.cdf(e*n.sqrt(1+2/r),r+2,o)-t.noncentralt.cdf(e,r,o))},cdf:function(e,r,o){var i=1e-14;if(n.abs(o)<i)return t.studentt.cdf(e,r);var s=!1;e<0&&(s=!0,o=-o);for(var a=t.normal.cdf(-o,0,1),u=i+1,l=u,c=e*e/(e*e+r),f=0,h=n.exp(-o*o/2),m=n.exp(-o*o/2-.5*n.log(2)-t.gammaln(1.5))*o;f<200||l>i||u>i;)l=u,f>0&&(h*=o*o/(2*f),m*=o*o/(2*(f+.5))),a+=.5*(u=h*t.beta.cdf(c,f+.5,r/2)+m*t.beta.cdf(c,f+1,r/2)),f++;return s?1-a:a}}),t.extend(t.normal,{pdf:function(t,e,r){return n.exp(-.5*n.log(2*n.PI)-n.log(r)-n.pow(t-e,2)/(2*r*r))},cdf:function(e,r,o){return.5*(1+t.erf((e-r)/n.sqrt(2*o*o)))},inv:function(n,e,r){return-1.4142135623730951*r*t.erfcinv(2*n)+e},mean:function(t){return t},median:function(t){return t},mode:function(t){return t},sample:function(n,e){return t.randn()*e+n},variance:function(t,n){return n*n}}),t.extend(t.pareto,{pdf:function(t,e,r){return t<e?0:r*n.pow(e,r)/n.pow(t,r+1)},cdf:function(t,e,r){return t<e?0:1-n.pow(e/t,r)},inv:function(t,e,r){return e/n.pow(1-t,1/r)},mean:function(t,e){if(!(e<=1))return e*n.pow(t,e)/(e-1)},median:function(t,e){return t*(e*n.SQRT2)},mode:function(t){return t},variance:function(t,e){if(!(e<=2))return t*t*e/(n.pow(e-1,2)*(e-2))}}),t.extend(t.studentt,{pdf:function(e,r){return r=r>1e100?1e100:r,1/(n.sqrt(r)*t.betafn(.5,r/2))*n.pow(1+e*e/r,-(r+1)/2)},cdf:function(e,r){var o=r/2;return t.ibeta((e+n.sqrt(e*e+r))/(2*n.sqrt(e*e+r)),o,o)},inv:function(e,r){var o=t.ibetainv(2*n.min(e,1-e),.5*r,.5);return o=n.sqrt(r*(1-o)/o),e>.5?o:-o},mean:function(t){return t>1?0:void 0},median:function(){return 0},mode:function(){return 0},sample:function(e){return t.randn()*n.sqrt(e/(2*t.randg(e/2)))},variance:function(t){return t>2?t/(t-2):t>1?1/0:void 0}}),t.extend(t.weibull,{pdf:function(t,e,r){return t<0||e<0||r<0?0:r/e*n.pow(t/e,r-1)*n.exp(-n.pow(t/e,r))},cdf:function(t,e,r){return t<0?0:1-n.exp(-n.pow(t/e,r))},inv:function(t,e,r){return e*n.pow(-n.log(1-t),1/r)},mean:function(n,e){return n*t.gammafn(1+1/e)},median:function(t,e){return t*n.pow(n.log(2),1/e)},mode:function(t,e){return e<=1?0:t*n.pow((e-1)/e,1/e)},sample:function(e,r){return e*n.pow(-n.log(t._random_fn()),1/r)},variance:function(e,r){return e*e*t.gammafn(1+2/r)-n.pow(t.weibull.mean(e,r),2)}}),t.extend(t.uniform,{pdf:function(t,n,e){return t<n||t>e?0:1/(e-n)},cdf:function(t,n,e){return t<n?0:t<e?(t-n)/(e-n):1},inv:function(t,n,e){return n+t*(e-n)},mean:function(t,n){return.5*(t+n)},median:function(n,e){return t.mean(n,e)},mode:function(){throw new Error("mode is not yet implemented")},sample:function(n,e){return n/2+e/2+(e/2-n/2)*(2*t._random_fn()-1)},variance:function(t,e){return n.pow(e-t,2)/12}}),t.extend(t.binomial,{pdf:function(e,r,o){return 0===o||1===o?r*o===e?1:0:t.combination(r,e)*n.pow(o,e)*n.pow(1-o,r-e)},cdf:function(r,o,i){var s,a=1e-10;if(r<0)return 0;if(r>=o)return 1;if(i<0||i>1||o<=0)return NaN;var u=i,l=(r=n.floor(r))+1,c=o-r,f=l+c,h=n.exp(t.gammaln(f)-t.gammaln(c)-t.gammaln(l)+l*n.log(u)+c*n.log(1-u));return s=u<(l+1)/(f+2)?h*e(u,l,c,a):1-h*e(1-u,c,l,a),n.round(1/a*(1-s))/(1/a)}}),t.extend(t.negbin,{pdf:function(e,r,o){return e===e>>>0&&(e<0?0:t.combination(e+r-1,r-1)*n.pow(1-o,e)*n.pow(o,r))},cdf:function(n,e,r){var o=0,i=0;if(n<0)return 0;for(;i<=n;i++)o+=t.negbin.pdf(i,e,r);return o}}),t.extend(t.hypgeom,{pdf:function(e,r,o,i){if(e!=e|0)return!1;if(e<0||e<o-(r-i))return 0;if(e>i||e>o)return 0;if(2*o>r)return 2*i>r?t.hypgeom.pdf(r-o-i+e,r,r-o,r-i):t.hypgeom.pdf(i-e,r,r-o,i);if(2*i>r)return t.hypgeom.pdf(o-e,r,o,r-i);if(o<i)return t.hypgeom.pdf(e,r,i,o);for(var s=1,a=0,u=0;u<e;u++){for(;s>1&&a<i;)s*=1-o/(r-a),a++;s*=(i-u)*(o-u)/((u+1)*(r-o-i+u+1))}for(;a<i;a++)s*=1-o/(r-a);return n.min(1,n.max(0,s))},cdf:function(e,r,o,i){if(e<0||e<o-(r-i))return 0;if(e>=i||e>=o)return 1;if(2*o>r)return 2*i>r?t.hypgeom.cdf(r-o-i+e,r,r-o,r-i):1-t.hypgeom.cdf(i-e-1,r,r-o,i);if(2*i>r)return 1-t.hypgeom.cdf(o-e-1,r,o,r-i);if(o<i)return t.hypgeom.cdf(e,r,i,o);for(var s=1,a=1,u=0,l=0;l<e;l++){for(;s>1&&u<i;){var c=1-o/(r-u);a*=c,s*=c,u++}s+=a*=(i-l)*(o-l)/((l+1)*(r-o-i+l+1))}for(;u<i;u++)s*=1-o/(r-u);return n.min(1,n.max(0,s))}}),t.extend(t.poisson,{pdf:function(e,r){return r<0||e%1!=0||e<0?0:n.pow(r,e)*n.exp(-r)/t.factorial(e)},cdf:function(n,e){var r=[],o=0;if(n<0)return 0;for(;o<=n;o++)r.push(t.poisson.pdf(o,e));return t.sum(r)},mean:function(t){return t},variance:function(t){return t},sampleSmall:function(e){var r=1,o=0,i=n.exp(-e);do{o++,r*=t._random_fn()}while(r>i);return o-1},sampleLarge:function(e){var r,o,i,s,a,u,l,c,f,h,m=e;for(s=n.sqrt(m),a=n.log(m),u=.02483*(l=.931+2.53*s)-.059,c=1.1239+1.1328/(l-3.4),f=.9277-3.6224/(l-2);;){if(o=n.random()-.5,i=n.random(),h=.5-n.abs(o),r=n.floor((2*u/h+l)*o+m+.43),h>=.07&&i<=f)return r;if(!(r<0||h<.013&&i>h)&&n.log(i)+n.log(c)-n.log(u/(h*h)+l)<=r*a-m-t.loggam(r+1))return r}},sample:function(t){return t<10?this.sampleSmall(t):this.sampleLarge(t)}}),t.extend(t.triangular,{pdf:function(t,n,e,r){return e<=n||r<n||r>e?NaN:t<n||t>e?0:t<r?2*(t-n)/((e-n)*(r-n)):t===r?2/(e-n):2*(e-t)/((e-n)*(e-r))},cdf:function(t,e,r,o){return r<=e||o<e||o>r?NaN:t<=e?0:t>=r?1:t<=o?n.pow(t-e,2)/((r-e)*(o-e)):1-n.pow(r-t,2)/((r-e)*(r-o))},inv:function(t,e,r,o){return r<=e||o<e||o>r?NaN:t<=(o-e)/(r-e)?e+(r-e)*n.sqrt(t*((o-e)/(r-e))):e+(r-e)*(1-n.sqrt((1-t)*(1-(o-e)/(r-e))))},mean:function(t,n,e){return(t+n+e)/3},median:function(t,e,r){return r<=(t+e)/2?e-n.sqrt((e-t)*(e-r))/n.sqrt(2):r>(t+e)/2?t+n.sqrt((e-t)*(r-t))/n.sqrt(2):void 0},mode:function(t,n,e){return e},sample:function(e,r,o){var i=t._random_fn();return i<(o-e)/(r-e)?e+n.sqrt(i*(r-e)*(o-e)):r-n.sqrt((1-i)*(r-e)*(r-o))},variance:function(t,n,e){return(t*t+n*n+e*e-t*n-t*e-n*e)/18}}),t.extend(t.arcsine,{pdf:function(t,e,r){return r<=e?NaN:t<=e||t>=r?0:2/n.PI*n.pow(n.pow(r-e,2)-n.pow(2*t-e-r,2),-.5)},cdf:function(t,e,r){return t<e?0:t<r?2/n.PI*n.asin(n.sqrt((t-e)/(r-e))):1},inv:function(t,e,r){return e+(.5-.5*n.cos(n.PI*t))*(r-e)},mean:function(t,n){return n<=t?NaN:(t+n)/2},median:function(t,n){return n<=t?NaN:(t+n)/2},mode:function(){throw new Error("mode is not yet implemented")},sample:function(e,r){return(e+r)/2+(r-e)/2*n.sin(2*n.PI*t.uniform.sample(0,1))},variance:function(t,e){return e<=t?NaN:n.pow(e-t,2)/8}}),t.extend(t.laplace,{pdf:function(t,e,r){return r<=0?0:n.exp(-n.abs(t-e)/r)/(2*r)},cdf:function(t,e,r){return r<=0?0:t<e?.5*n.exp((t-e)/r):1-.5*n.exp(-(t-e)/r)},mean:function(t){return t},median:function(t){return t},mode:function(t){return t},variance:function(t,n){return 2*n*n},sample:function(e,r){var o,i=t._random_fn()-.5;return e-r*((o=i)/n.abs(o))*n.log(1-2*n.abs(i))}}),t.extend(t.tukey,{cdf:function(e,o,i){var s=o,a=[.9894009349916499,.9445750230732326,.8656312023878318,.755404408355003,.6178762444026438,.45801677765722737,.2816035507792589,.09501250983763744],u=[.027152459411754096,.062253523938647894,.09515851168249279,.12462897125553388,.14959598881657674,.16915651939500254,.18260341504492358,.1894506104550685];if(e<=0)return 0;if(i<2||s<2)return NaN;if(!Number.isFinite(e))return 1;if(i>25e3)return r(e,1,s);var l,c=.5*i,f=c*n.log(i)-i*n.log(2)-t.gammaln(c),h=c-1,m=.25*i;l=i<=100?1:i<=800?.5:i<=5e3?.25:.125,f+=n.log(l);for(var d=0,p=1;p<=50;p++){for(var g=0,v=(2*p-1)*l,y=1;y<=16;y++){var w,E;8<y?(w=y-8-1,E=f+h*n.log(v+a[w]*l)-(a[w]*l+v)*m):(w=y-1,E=f+h*n.log(v-a[w]*l)+(a[w]*l-v)*m),E>=-30&&(g+=r(8<y?e*n.sqrt(.5*(a[w]*l+v)):e*n.sqrt(.5*(-a[w]*l+v)),1,s)*u[w]*n.exp(E))}if(p*l>=1&&g<=1e-14)break;d+=g}if(g>1e-14)throw new Error("tukey.cdf failed to converge");return d>1&&(d=1),d},inv:function(e,r,o){if(o<2||r<2)return NaN;if(e<0||e>1)return NaN;if(0===e)return 0;if(1===e)return 1/0;var i,s=function(t,e,r){var o=.5-.5*t,i=n.sqrt(n.log(1/(o*o))),s=i+((((-453642210148e-16*i-.204231210125)*i-.342242088547)*i-1)*i+.322232421088)/((((.0038560700634*i+.10353775285)*i+.531103462366)*i+.588581570495)*i+.099348462606);r<120&&(s+=(s*s*s+s)/r/4);var a=.8832-.2368*s;return r<120&&(a+=-1.214/r+1.208*s/r),s*(a*n.log(e-1)+1.4142)}(e,r,o),a=t.tukey.cdf(s,r,o)-e;i=a>0?n.max(0,s-1):s+1;for(var u,l=t.tukey.cdf(i,r,o)-e,c=1;c<50;c++)if(u=i-l*(i-s)/(l-a),a=l,s=i,u<0&&(u=0,l=-e),l=t.tukey.cdf(u,r,o)-e,i=u,n.abs(i-s)<1e-4)return u;throw new Error("tukey.inv failed to converge")}})}(n,Math),function(t,n){var e,r,o=Array.prototype.push,i=t.utils.isArray;function s(n){return i(n)||n instanceof t}t.extend({add:function(n,e){return s(e)?(s(e[0])||(e=[e]),t.map(n,(function(t,n,r){return t+e[n][r]}))):t.map(n,(function(t){return t+e}))},subtract:function(n,e){return s(e)?(s(e[0])||(e=[e]),t.map(n,(function(t,n,r){return t-e[n][r]||0}))):t.map(n,(function(t){return t-e}))},divide:function(n,e){return s(e)?(s(e[0])||(e=[e]),t.multiply(n,t.inv(e))):t.map(n,(function(t){return t/e}))},multiply:function(n,e){var r,o,i,a,u,l,c,f;if(void 0===n.length&&void 0===e.length)return n*e;if(u=n.length,l=n[0].length,c=t.zeros(u,i=s(e)?e[0].length:l),f=0,s(e)){for(;f<i;f++)for(r=0;r<u;r++){for(a=0,o=0;o<l;o++)a+=n[r][o]*e[o][f];c[r][f]=a}return 1===u&&1===f?c[0][0]:c}return t.map(n,(function(t){return t*e}))},outer:function(n,e){return t.multiply(n.map((function(t){return[t]})),[e])},dot:function(n,e){s(n[0])||(n=[n]),s(e[0])||(e=[e]);for(var r,o,i=1===n[0].length&&1!==n.length?t.transpose(n):n,a=1===e[0].length&&1!==e.length?t.transpose(e):e,u=[],l=0,c=i.length,f=i[0].length;l<c;l++){for(u[l]=[],r=0,o=0;o<f;o++)r+=i[l][o]*a[l][o];u[l]=r}return 1===u.length?u[0]:u},pow:function(e,r){return t.map(e,(function(t){return n.pow(t,r)}))},exp:function(e){return t.map(e,(function(t){return n.exp(t)}))},log:function(e){return t.map(e,(function(t){return n.log(t)}))},abs:function(e){return t.map(e,(function(t){return n.abs(t)}))},norm:function(t,e){var r=0,o=0;for(isNaN(e)&&(e=2),s(t[0])&&(t=t[0]);o<t.length;o++)r+=n.pow(n.abs(t[o]),e);return n.pow(r,1/e)},angle:function(e,r){return n.acos(t.dot(e,r)/(t.norm(e)*t.norm(r)))},aug:function(t,n){var e,r=[];for(e=0;e<t.length;e++)r.push(t[e].slice());for(e=0;e<r.length;e++)o.apply(r[e],n[e]);return r},inv:function(n){for(var e,r=n.length,o=n[0].length,i=t.identity(r,o),s=t.gauss_jordan(n,i),a=[],u=0;u<r;u++)for(a[u]=[],e=o;e<s[0].length;e++)a[u][e-o]=s[u][e];return a},det:function t(n){if(2===n.length)return n[0][0]*n[1][1]-n[0][1]*n[1][0];for(var e=0,r=0;r<n.length;r++){for(var o=[],i=1;i<n.length;i++){o[i-1]=[];for(var s=0;s<n.length;s++)s<r?o[i-1][s]=n[i][s]:s>r&&(o[i-1][s-1]=n[i][s])}var a=r%2?-1:1;e+=t(o)*n[0][r]*a}return e},gauss_elimination:function(e,r){var o,i,s,a,u=0,l=0,c=e.length,f=e[0].length,h=1,m=0,d=[];for(o=(e=t.aug(e,r))[0].length,u=0;u<c;u++){for(i=e[u][u],l=u,a=u+1;a<f;a++)i<n.abs(e[a][u])&&(i=e[a][u],l=a);if(l!=u)for(a=0;a<o;a++)s=e[u][a],e[u][a]=e[l][a],e[l][a]=s;for(l=u+1;l<c;l++)for(h=e[l][u]/e[u][u],a=u;a<o;a++)e[l][a]=e[l][a]-h*e[u][a]}for(u=c-1;u>=0;u--){for(m=0,l=u+1;l<=c-1;l++)m+=d[l]*e[u][l];d[u]=(e[u][o-1]-m)/e[u][u]}return d},gauss_jordan:function(e,r){var o,i,s,a=t.aug(e,r),u=a.length,l=a[0].length,c=0;for(i=0;i<u;i++){var f=i;for(s=i+1;s<u;s++)n.abs(a[s][i])>n.abs(a[f][i])&&(f=s);var h=a[i];for(a[i]=a[f],a[f]=h,s=i+1;s<u;s++)for(c=a[s][i]/a[i][i],o=i;o<l;o++)a[s][o]-=a[i][o]*c}for(i=u-1;i>=0;i--){for(c=a[i][i],s=0;s<i;s++)for(o=l-1;o>i-1;o--)a[s][o]-=a[i][o]*a[s][i]/c;for(a[i][i]/=c,o=u;o<l;o++)a[i][o]/=c}return a},triaUpSolve:function(n,e){var r,o=n[0].length,i=t.zeros(1,o)[0],s=!1;return null!=e[0].length&&(e=e.map((function(t){return t[0]})),s=!0),t.arange(o-1,-1,-1).forEach((function(s){r=t.arange(s+1,o).map((function(t){return i[t]*n[s][t]})),i[s]=(e[s]-t.sum(r))/n[s][s]})),s?i.map((function(t){return[t]})):i},triaLowSolve:function(n,e){var r,o=n[0].length,i=t.zeros(1,o)[0],s=!1;return null!=e[0].length&&(e=e.map((function(t){return t[0]})),s=!0),t.arange(o).forEach((function(o){r=t.arange(o).map((function(t){return n[o][t]*i[t]})),i[o]=(e[o]-t.sum(r))/n[o][o]})),s?i.map((function(t){return[t]})):i},lu:function(n){var e,r=n.length,o=t.identity(r),i=t.zeros(n.length,n[0].length);return t.arange(r).forEach((function(t){i[0][t]=n[0][t]})),t.arange(1,r).forEach((function(s){t.arange(s).forEach((function(r){e=t.arange(r).map((function(t){return o[s][t]*i[t][r]})),o[s][r]=(n[s][r]-t.sum(e))/i[r][r]})),t.arange(s,r).forEach((function(r){e=t.arange(s).map((function(t){return o[s][t]*i[t][r]})),i[s][r]=n[e.length][r]-t.sum(e)}))})),[o,i]},cholesky:function(e){var r,o=e.length,i=t.zeros(e.length,e[0].length);return t.arange(o).forEach((function(s){r=t.arange(s).map((function(t){return n.pow(i[s][t],2)})),i[s][s]=n.sqrt(e[s][s]-t.sum(r)),t.arange(s+1,o).forEach((function(n){r=t.arange(s).map((function(t){return i[s][t]*i[n][t]})),i[n][s]=(e[s][n]-t.sum(r))/i[s][s]}))})),i},gauss_jacobi:function(e,r,o,i){for(var s,a,u,l,c=0,f=0,h=e.length,m=[],d=[],p=[];c<h;c++)for(m[c]=[],d[c]=[],p[c]=[],f=0;f<h;f++)c>f?(m[c][f]=e[c][f],d[c][f]=p[c][f]=0):c<f?(d[c][f]=e[c][f],m[c][f]=p[c][f]=0):(p[c][f]=e[c][f],m[c][f]=d[c][f]=0);for(u=t.multiply(t.multiply(t.inv(p),t.add(m,d)),-1),a=t.multiply(t.inv(p),r),s=o,l=t.add(t.multiply(u,o),a),c=2;n.abs(t.norm(t.subtract(l,s)))>i;)s=l,l=t.add(t.multiply(u,s),a),c++;return l},gauss_seidel:function(e,r,o,i){for(var s,a,u,l,c,f=0,h=e.length,m=[],d=[],p=[];f<h;f++)for(m[f]=[],d[f]=[],p[f]=[],s=0;s<h;s++)f>s?(m[f][s]=e[f][s],d[f][s]=p[f][s]=0):f<s?(d[f][s]=e[f][s],m[f][s]=p[f][s]=0):(p[f][s]=e[f][s],m[f][s]=d[f][s]=0);for(l=t.multiply(t.multiply(t.inv(t.add(p,m)),d),-1),u=t.multiply(t.inv(t.add(p,m)),r),a=o,c=t.add(t.multiply(l,o),u),f=2;n.abs(t.norm(t.subtract(c,a)))>i;)a=c,c=t.add(t.multiply(l,a),u),f+=1;return c},SOR:function(e,r,o,i,s){for(var a,u,l,c,f,h=0,m=e.length,d=[],p=[],g=[];h<m;h++)for(d[h]=[],p[h]=[],g[h]=[],a=0;a<m;a++)h>a?(d[h][a]=e[h][a],p[h][a]=g[h][a]=0):h<a?(p[h][a]=e[h][a],d[h][a]=g[h][a]=0):(g[h][a]=e[h][a],d[h][a]=p[h][a]=0);for(c=t.multiply(t.inv(t.add(g,t.multiply(d,s))),t.subtract(t.multiply(g,1-s),t.multiply(p,s))),l=t.multiply(t.multiply(t.inv(t.add(g,t.multiply(d,s))),r),s),u=o,f=t.add(t.multiply(c,o),l),h=2;n.abs(t.norm(t.subtract(f,u)))>i;)u=f,f=t.add(t.multiply(c,u),l),h++;return f},householder:function(e){for(var r,o,i,s,a=e.length,u=e[0].length,l=0,c=[],f=[];l<a-1;l++){for(r=0,s=l+1;s<u;s++)r+=e[s][l]*e[s][l];for(r=(e[l+1][l]>0?-1:1)*n.sqrt(r),o=n.sqrt((r*r-e[l+1][l]*r)/2),(c=t.zeros(a,1))[l+1][0]=(e[l+1][l]-r)/(2*o),i=l+2;i<a;i++)c[i][0]=e[i][l]/(2*o);f=t.subtract(t.identity(a,u),t.multiply(t.multiply(c,t.transpose(c)),2)),e=t.multiply(f,t.multiply(e,f))}return e},QR:(e=t.sum,r=t.arange,function(o){var i,s,a,u=o.length,l=o[0].length,c=t.zeros(l,l);for(o=t.copy(o),s=0;s<l;s++){for(c[s][s]=n.sqrt(e(r(u).map((function(t){return o[t][s]*o[t][s]})))),i=0;i<u;i++)o[i][s]=o[i][s]/c[s][s];for(a=s+1;a<l;a++)for(c[s][a]=e(r(u).map((function(t){return o[t][s]*o[t][a]}))),i=0;i<u;i++)o[i][a]=o[i][a]-o[i][s]*c[s][a]}return[o,c]}),lstsq:function(n,e){var r=!1;void 0===e[0].length&&(e=e.map((function(t){return[t]})),r=!0);var o=t.QR(n),i=o[0],s=o[1],a=n[0].length,u=t.slice(i,{col:{end:a}}),l=function(n){var e=(n=t.copy(n)).length,r=t.identity(e);return t.arange(e-1,-1,-1).forEach((function(e){t.sliceAssign(r,{row:e},t.divide(t.slice(r,{row:e}),n[e][e])),t.sliceAssign(n,{row:e},t.divide(t.slice(n,{row:e}),n[e][e])),t.arange(e).forEach((function(o){var i=t.multiply(n[o][e],-1),s=t.slice(n,{row:o}),a=t.multiply(t.slice(n,{row:e}),i);t.sliceAssign(n,{row:o},t.add(s,a));var u=t.slice(r,{row:o}),l=t.multiply(t.slice(r,{row:e}),i);t.sliceAssign(r,{row:o},t.add(u,l))}))})),r}(t.slice(s,{row:{end:a}})),c=t.transpose(u);void 0===c[0].length&&(c=[c]);var f=t.multiply(t.multiply(l,c),e);return void 0===f.length&&(f=[[f]]),r?f.map((function(t){return t[0]})):f},jacobi:function(e){for(var r,o,i,s,a,u,l,c=1,f=e.length,h=t.identity(f,f),m=[];1===c;){for(a=e[0][1],i=0,s=1,r=0;r<f;r++)for(o=0;o<f;o++)r!=o&&a<n.abs(e[r][o])&&(a=n.abs(e[r][o]),i=r,s=o);for(u=e[i][i]===e[s][s]?e[i][s]>0?n.PI/4:-n.PI/4:n.atan(2*e[i][s]/(e[i][i]-e[s][s]))/2,(l=t.identity(f,f))[i][i]=n.cos(u),l[i][s]=-n.sin(u),l[s][i]=n.sin(u),l[s][s]=n.cos(u),h=t.multiply(h,l),e=t.multiply(t.multiply(t.inv(l),e),l),c=0,r=1;r<f;r++)for(o=1;o<f;o++)r!=o&&n.abs(e[r][o])>.001&&(c=1)}for(r=0;r<f;r++)m.push(e[r][r]);return[h,m]},rungekutta:function(t,n,e,r,o,i){var s,a,u;if(2===i)for(;r<=e;)o+=((s=n*t(r,o))+(a=n*t(r+n,o+s)))/2,r+=n;if(4===i)for(;r<=e;)o+=((s=n*t(r,o))+2*(a=n*t(r+n/2,o+s/2))+2*(u=n*t(r+n/2,o+a/2))+n*t(r+n,o+u))/6,r+=n;return o},romberg:function(t,e,r,o){for(var i,s,a,u,l,c=0,f=(r-e)/2,h=[],m=[],d=[];c<o/2;){for(l=t(e),a=e,u=0;a<=r;a+=f,u++)h[u]=a;for(i=h.length,a=1;a<i-1;a++)l+=(a%2!=0?4:2)*t(h[a]);l=f/3*(l+t(r)),d[c]=l,f/=2,c++}for(s=d.length,i=1;1!==s;){for(a=0;a<s-1;a++)m[a]=(n.pow(4,i)*d[a+1]-d[a])/(n.pow(4,i)-1);s=m.length,d=m,m=[],i++}return d},richardson:function(t,e,r,o){function i(t,n){for(var e,r=0,o=t.length;r<o;r++)t[r]===n&&(e=r);return e}for(var s,a,u,l,c,f=n.abs(r-t[i(t,r)+1]),h=0,m=[],d=[];o>=f;)s=i(t,r+o),a=i(t,r),m[h]=(e[s]-2*e[a]+e[2*a-s])/(o*o),o/=2,h++;for(l=m.length,u=1;1!=l;){for(c=0;c<l-1;c++)d[c]=(n.pow(4,u)*m[c+1]-m[c])/(n.pow(4,u)-1);l=d.length,m=d,d=[],u++}return m},simpson:function(t,n,e,r){for(var o,i=(e-n)/r,s=t(n),a=[],u=n,l=0,c=1;u<=e;u+=i,l++)a[l]=u;for(o=a.length;c<o-1;c++)s+=(c%2!=0?4:2)*t(a[c]);return i/3*(s+t(e))},hermite:function(t,n,e,r){for(var o,i=t.length,s=0,a=0,u=[],l=[],c=[],f=[];a<i;a++){for(u[a]=1,o=0;o<i;o++)a!=o&&(u[a]*=(r-t[o])/(t[a]-t[o]));for(l[a]=0,o=0;o<i;o++)a!=o&&(l[a]+=1/(t[a]-t[o]));c[a]=(1-2*(r-t[a])*l[a])*(u[a]*u[a]),f[a]=(r-t[a])*(u[a]*u[a]),s+=c[a]*n[a]+f[a]*e[a]}return s},lagrange:function(t,n,e){for(var r,o,i=0,s=0,a=t.length;s<a;s++){for(o=n[s],r=0;r<a;r++)s!=r&&(o*=(e-t[r])/(t[s]-t[r]));i+=o}return i},cubic_spline:function(n,e,r){for(var o,i,s=n.length,a=0,u=[],l=[],c=[],f=[],h=[],m=[];a<s-1;a++)f[a]=n[a+1]-n[a];for(c[0]=0,a=1;a<s-1;a++)c[a]=3/f[a]*(e[a+1]-e[a])-3/f[a-1]*(e[a]-e[a-1]);for(a=1;a<s-1;a++)u[a]=[],l[a]=[],u[a][a-1]=f[a-1],u[a][a]=2*(f[a-1]+f[a]),u[a][a+1]=f[a],l[a][0]=c[a];for(i=t.multiply(t.inv(u),l),o=0;o<s-1;o++)h[o]=(e[o+1]-e[o])/f[o]-f[o]*(i[o+1][0]+2*i[o][0])/3,m[o]=(i[o+1][0]-i[o][0])/(3*f[o]);for(o=0;o<s&&!(n[o]>r);o++);return e[o-=1]+(r-n[o])*h[o]+t.sq(r-n[o])*i[o]+(r-n[o])*t.sq(r-n[o])*m[o]},gauss_quadrature:function(){throw new Error("gauss_quadrature not yet implemented")},PCA:function(n){var e,r,o,i,s,a=n.length,u=n[0].length,l=0,c=[],f=[],h=[],m=[],d=[],p=[],g=[];for(l=0;l<a;l++)c[l]=t.sum(n[l])/u;for(l=0;l<u;l++)for(d[l]=[],e=0;e<a;e++)d[l][e]=n[e][l]-c[e];for(d=t.transpose(d),l=0;l<a;l++)for(p[l]=[],e=0;e<a;e++)p[l][e]=t.dot([d[l]],[d[e]])/(u-1);for(s=(o=t.jacobi(p))[0],f=o[1],g=t.transpose(s),l=0;l<f.length;l++)for(e=l;e<f.length;e++)f[l]<f[e]&&(r=f[l],f[l]=f[e],f[e]=r,h=g[l],g[l]=g[e],g[e]=h);for(i=t.transpose(d),l=0;l<a;l++)for(m[l]=[],e=0;e<i.length;e++)m[l][e]=t.dot([g[l]],[i[e]]);return[n,f,g,m]}}),function(n){for(var e=0;e<n.length;e++)!function(n){t.fn[n]=function(e,r){var o=this;return r?(setTimeout((function(){r.call(o,t.fn[n].call(o,e))}),15),this):"number"==typeof t[n](this,e)?t[n](this,e):t(t[n](this,e))}}(n[e])}("add divide multiply subtract dot pow exp log abs norm angle".split(" "))}(n,Math),function(t,n){var e=[].slice,r=t.utils.isNumber,o=t.utils.isArray;function i(t,e,r,o){if(t>1||r>1||t<=0||r<=0)throw new Error("Proportions should be greater than 0 and less than 1");var i=(t*e+r*o)/(e+o);return(t-r)/n.sqrt(i*(1-i)*(1/e+1/o))}t.extend({zscore:function(){var n=e.call(arguments);return r(n[1])?(n[0]-n[1])/n[2]:(n[0]-t.mean(n[1]))/t.stdev(n[1],n[2])},ztest:function(){var r,i=e.call(arguments);return o(i[1])?(r=t.zscore(i[0],i[1],i[3]),1===i[2]?t.normal.cdf(-n.abs(r),0,1):2*t.normal.cdf(-n.abs(r),0,1)):i.length>2?(r=t.zscore(i[0],i[1],i[2]),1===i[3]?t.normal.cdf(-n.abs(r),0,1):2*t.normal.cdf(-n.abs(r),0,1)):(r=i[0],1===i[1]?t.normal.cdf(-n.abs(r),0,1):2*t.normal.cdf(-n.abs(r),0,1))}}),t.extend(t.fn,{zscore:function(t,n){return(t-this.mean())/this.stdev(n)},ztest:function(e,r,o){var i=n.abs(this.zscore(e,o));return 1===r?t.normal.cdf(-i,0,1):2*t.normal.cdf(-i,0,1)}}),t.extend({tscore:function(){var r=e.call(arguments);return 4===r.length?(r[0]-r[1])/(r[2]/n.sqrt(r[3])):(r[0]-t.mean(r[1]))/(t.stdev(r[1],!0)/n.sqrt(r[1].length))},ttest:function(){var o,i=e.call(arguments);return 5===i.length?(o=n.abs(t.tscore(i[0],i[1],i[2],i[3])),1===i[4]?t.studentt.cdf(-o,i[3]-1):2*t.studentt.cdf(-o,i[3]-1)):r(i[1])?(o=n.abs(i[0]),1==i[2]?t.studentt.cdf(-o,i[1]-1):2*t.studentt.cdf(-o,i[1]-1)):(o=n.abs(t.tscore(i[0],i[1])),1==i[2]?t.studentt.cdf(-o,i[1].length-1):2*t.studentt.cdf(-o,i[1].length-1))}}),t.extend(t.fn,{tscore:function(t){return(t-this.mean())/(this.stdev(!0)/n.sqrt(this.cols()))},ttest:function(e,r){return 1===r?1-t.studentt.cdf(n.abs(this.tscore(e)),this.cols()-1):2*t.studentt.cdf(-n.abs(this.tscore(e)),this.cols()-1)}}),t.extend({anovafscore:function(){var r,o,i,s,a,u,l,c,f=e.call(arguments);if(1===f.length){for(a=new Array(f[0].length),l=0;l<f[0].length;l++)a[l]=f[0][l];f=a}for(o=new Array,l=0;l<f.length;l++)o=o.concat(f[l]);for(i=t.mean(o),r=0,l=0;l<f.length;l++)r+=f[l].length*n.pow(t.mean(f[l])-i,2);for(r/=f.length-1,u=0,l=0;l<f.length;l++)for(s=t.mean(f[l]),c=0;c<f[l].length;c++)u+=n.pow(f[l][c]-s,2);return r/(u/(o.length-f.length))},anovaftest:function(){var n,o,i,s,a=e.call(arguments);if(r(a[0]))return 1-t.centralF.cdf(a[0],a[1],a[2]);var u=t.anovafscore(a);for(n=a.length-1,i=0,s=0;s<a.length;s++)i+=a[s].length;return o=i-n-1,1-t.centralF.cdf(u,n,o)},ftest:function(n,e,r){return 1-t.centralF.cdf(n,e,r)}}),t.extend(t.fn,{anovafscore:function(){return t.anovafscore(this.toArray())},anovaftes:function(){var n,e=0;for(n=0;n<this.length;n++)e+=this[n].length;return t.ftest(this.anovafscore(),this.length-1,e-this.length)}}),t.extend({qscore:function(){var o,i,s,a,u,l=e.call(arguments);return r(l[0])?(o=l[0],i=l[1],s=l[2],a=l[3],u=l[4]):(o=t.mean(l[0]),i=t.mean(l[1]),s=l[0].length,a=l[1].length,u=l[2]),n.abs(o-i)/(u*n.sqrt((1/s+1/a)/2))},qtest:function(){var n,r=e.call(arguments);3===r.length?(n=r[0],r=r.slice(1)):7===r.length?(n=t.qscore(r[0],r[1],r[2],r[3],r[4]),r=r.slice(5)):(n=t.qscore(r[0],r[1],r[2]),r=r.slice(3));var o=r[0],i=r[1];return 1-t.tukey.cdf(n,i,o-i)},tukeyhsd:function(n){for(var e=t.pooledstdev(n),r=n.map((function(n){return t.mean(n)})),o=n.reduce((function(t,n){return t+n.length}),0),i=[],s=0;s<n.length;++s)for(var a=s+1;a<n.length;++a){var u=t.qtest(r[s],r[a],n[s].length,n[a].length,e,o,n.length);i.push([[s,a],u])}return i}}),t.extend({normalci:function(){var r,o=e.call(arguments),i=new Array(2);return r=4===o.length?n.abs(t.normal.inv(o[1]/2,0,1)*o[2]/n.sqrt(o[3])):n.abs(t.normal.inv(o[1]/2,0,1)*t.stdev(o[2])/n.sqrt(o[2].length)),i[0]=o[0]-r,i[1]=o[0]+r,i},tci:function(){var r,o=e.call(arguments),i=new Array(2);return r=4===o.length?n.abs(t.studentt.inv(o[1]/2,o[3]-1)*o[2]/n.sqrt(o[3])):n.abs(t.studentt.inv(o[1]/2,o[2].length-1)*t.stdev(o[2],!0)/n.sqrt(o[2].length)),i[0]=o[0]-r,i[1]=o[0]+r,i},significant:function(t,n){return t<n}}),t.extend(t.fn,{normalci:function(n,e){return t.normalci(n,e,this.toArray())},tci:function(n,e){return t.tci(n,e,this.toArray())}}),t.extend(t.fn,{oneSidedDifferenceOfProportions:function(n,e,r,o){var s=i(n,e,r,o);return t.ztest(s,1)},twoSidedDifferenceOfProportions:function(n,e,r,o){var s=i(n,e,r,o);return t.ztest(s,2)}})}(n,Math),n.models=function(){function t(t,e){var r=t.length,o=e[0].length-1,i=r-o-1,s=n.lstsq(e,t),a=n.multiply(e,s.map((function(t){return[t]}))).map((function(t){return t[0]})),u=n.subtract(t,a),l=n.mean(t),c=n.sum(a.map((function(t){return Math.pow(t-l,2)}))),f=n.sum(t.map((function(t,n){return Math.pow(t-a[n],2)}))),h=c+f;return{exog:e,endog:t,nobs:r,df_model:o,df_resid:i,coef:s,predict:a,resid:u,ybar:l,SST:h,SSE:c,SSR:f,R2:c/h}}function e(e){var r,o,i=(r=e.exog,o=r[0].length,n.arange(o).map((function(e){var i=n.arange(o).filter((function(t){return t!==e}));return t(n.col(r,e).map((function(t){return t[0]})),n.col(r,i))}))),s=Math.sqrt(e.SSR/e.df_resid),a=i.map((function(t){var n=t.SST,e=t.R2;return s/Math.sqrt(n*(1-e))})),u=e.coef.map((function(t,n){return(t-0)/a[n]})),l=u.map((function(t){var r=n.studentt.cdf(t,e.df_resid);return 2*(r>.5?1-r:r)})),c=n.studentt.inv(.975,e.df_resid),f=e.coef.map((function(t,n){var e=c*a[n];return[t-e,t+e]}));return{se:a,t:u,p:l,sigmaHat:s,interval95:f}}return{ols:function(r,o){var i=t(r,o),s=e(i),a=function(t){var e,r,o,i=t.R2/t.df_model/((1-t.R2)/t.df_resid);return{F_statistic:i,pvalue:1-(e=i,r=t.df_model,o=t.df_resid,n.beta.cdf(e/(o/r+e),r/2,o/2))}}(i),u=1-(1-i.R2)*((i.nobs-1)/i.df_resid);return i.t=s,i.f=a,i.adjust_R2=u,i}}}(),n.extend({buildxmatrix:function(){for(var t=new Array(arguments.length),e=0;e<arguments.length;e++){t[e]=[1].concat(arguments[e])}return n(t)},builddxmatrix:function(){for(var t=new Array(arguments[0].length),e=0;e<arguments[0].length;e++){t[e]=[1].concat(arguments[0][e])}return n(t)},buildjxmatrix:function(t){for(var e=new Array(t.length),r=0;r<t.length;r++)e[r]=t[r];return n.builddxmatrix(e)},buildymatrix:function(t){return n(t).transpose()},buildjymatrix:function(t){return t.transpose()},matrixmult:function(t,e){var r,o,i,s,a;if(t.cols()==e.rows()){if(e.rows()>1){for(s=[],r=0;r<t.rows();r++)for(s[r]=[],o=0;o<e.cols();o++){for(a=0,i=0;i<t.cols();i++)a+=t.toArray()[r][i]*e.toArray()[i][o];s[r][o]=a}return n(s)}for(s=[],r=0;r<t.rows();r++)for(s[r]=[],o=0;o<e.cols();o++){for(a=0,i=0;i<t.cols();i++)a+=t.toArray()[r][i]*e.toArray()[o];s[r][o]=a}return n(s)}},regress:function(t,e){var r=n.xtranspxinv(t),o=t.transpose(),i=n.matrixmult(n(r),o);return n.matrixmult(i,e)},regresst:function(t,e,r){var o=n.regress(t,e),i={anova:{}},s=n.jMatYBar(t,o);i.yBar=s;var a=e.mean();i.anova.residuals=n.residuals(e,s),i.anova.ssr=n.ssr(s,a),i.anova.msr=i.anova.ssr/(t[0].length-1),i.anova.sse=n.sse(e,s),i.anova.mse=i.anova.sse/(e.length-(t[0].length-1)-1),i.anova.sst=n.sst(e,a),i.anova.mst=i.anova.sst/(e.length-1),i.anova.r2=1-i.anova.sse/i.anova.sst,i.anova.r2<0&&(i.anova.r2=0),i.anova.fratio=i.anova.msr/i.anova.mse,i.anova.pvalue=n.anovaftest(i.anova.fratio,t[0].length-1,e.length-(t[0].length-1)-1),i.anova.rmse=Math.sqrt(i.anova.mse),i.anova.r2adj=1-i.anova.mse/i.anova.mst,i.anova.r2adj<0&&(i.anova.r2adj=0),i.stats=new Array(t[0].length);for(var u,l,c,f=n.xtranspxinv(t),h=0;h<o.length;h++)u=Math.sqrt(i.anova.mse*Math.abs(f[h][h])),l=Math.abs(o[h]/u),c=n.ttest(l,e.length-t[0].length-1,r),i.stats[h]=[o[h],u,l,c];return i.regress=o,i},xtranspx:function(t){return n.matrixmult(t.transpose(),t)},xtranspxinv:function(t){var e=n.matrixmult(t.transpose(),t);return n.inv(e)},jMatYBar:function(t,e){var r=n.matrixmult(t,e);return new n(r)},residuals:function(t,e){return n.matrixsubtract(t,e)},ssr:function(t,n){for(var e=0,r=0;r<t.length;r++)e+=Math.pow(t[r]-n,2);return e},sse:function(t,n){for(var e=0,r=0;r<t.length;r++)e+=Math.pow(t[r]-n[r],2);return e},sst:function(t,n){for(var e=0,r=0;r<t.length;r++)e+=Math.pow(t[r]-n,2);return e},matrixsubtract:function(t,e){for(var r=new Array(t.length),o=0;o<t.length;o++){r[o]=new Array(t[o].length);for(var i=0;i<t[o].length;i++)r[o][i]=t[o][i]-e[o][i]}return n(r)}}),n.jStat=n,n)},3379:t=>{"use strict";var n=[];function e(t){for(var e=-1,r=0;r<n.length;r++)if(n[r].identifier===t){e=r;break}return e}function r(t,r){for(var i={},s=[],a=0;a<t.length;a++){var u=t[a],l=r.base?u[0]+r.base:u[0],c=i[l]||0,f="".concat(l," ").concat(c);i[l]=c+1;var h=e(f),m={css:u[1],media:u[2],sourceMap:u[3],supports:u[4],layer:u[5]};if(-1!==h)n[h].references++,n[h].updater(m);else{var d=o(m,r);r.byIndex=a,n.splice(a,0,{identifier:f,updater:d,references:1})}s.push(f)}return s}function o(t,n){var e=n.domAPI(n);return e.update(t),function(n){if(n){if(n.css===t.css&&n.media===t.media&&n.sourceMap===t.sourceMap&&n.supports===t.supports&&n.layer===t.layer)return;e.update(t=n)}else e.remove()}}t.exports=function(t,o){var i=r(t=t||[],o=o||{});return function(t){t=t||[];for(var s=0;s<i.length;s++){var a=e(i[s]);n[a].references--}for(var u=r(t,o),l=0;l<i.length;l++){var c=e(i[l]);0===n[c].references&&(n[c].updater(),n.splice(c,1))}i=u}}},569:t=>{"use strict";var n={};t.exports=function(t,e){var r=function(t){if(void 0===n[t]){var e=document.querySelector(t);if(window.HTMLIFrameElement&&e instanceof window.HTMLIFrameElement)try{e=e.contentDocument.head}catch(t){e=null}n[t]=e}return n[t]}(t);if(!r)throw new Error("Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.");r.appendChild(e)}},9216:t=>{"use strict";t.exports=function(t){var n=document.createElement("style");return t.setAttributes(n,t.attributes),t.insert(n,t.options),n}},3565:(t,n,e)=>{"use strict";t.exports=function(t){var n=e.nc;n&&t.setAttribute("nonce",n)}},7795:t=>{"use strict";t.exports=function(t){if("undefined"==typeof document)return{update:function(){},remove:function(){}};var n=t.insertStyleElement(t);return{update:function(e){!function(t,n,e){var r="";e.supports&&(r+="@supports (".concat(e.supports,") {")),e.media&&(r+="@media ".concat(e.media," {"));var o=void 0!==e.layer;o&&(r+="@layer".concat(e.layer.length>0?" ".concat(e.layer):""," {")),r+=e.css,o&&(r+="}"),e.media&&(r+="}"),e.supports&&(r+="}");var i=e.sourceMap;i&&"undefined"!=typeof btoa&&(r+="\n/*# sourceMappingURL=data:application/json;base64,".concat(btoa(unescape(encodeURIComponent(JSON.stringify(i))))," */")),n.styleTagTransform(r,t,n.options)}(n,t,e)},remove:function(){!function(t){if(null===t.parentNode)return!1;t.parentNode.removeChild(t)}(n)}}}},4589:t=>{"use strict";t.exports=function(t,n){if(n.styleSheet)n.styleSheet.cssText=t;else{for(;n.firstChild;)n.removeChild(n.firstChild);n.appendChild(document.createTextNode(t))}}}},n={};function e(r){var o=n[r];if(void 0!==o)return o.exports;var i=n[r]={id:r,loaded:!1,exports:{}};return t[r].call(i.exports,i,i.exports,e),i.loaded=!0,i.exports}e.m=t,e.amdO={},e.n=t=>{var n=t&&t.__esModule?()=>t.default:()=>t;return e.d(n,{a:n}),n},e.d=(t,n)=>{for(var r in n)e.o(n,r)&&!e.o(t,r)&&Object.defineProperty(t,r,{enumerable:!0,get:n[r]})},e.u=t=>t+".js",e.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(t){if("object"==typeof window)return window}}(),e.hmd=t=>((t=Object.create(t)).children||(t.children=[]),Object.defineProperty(t,"exports",{enumerable:!0,set:()=>{throw new Error("ES Modules may not assign module.exports or exports.*, Use ESM export syntax, instead: "+t.id)}}),t),e.o=(t,n)=>Object.prototype.hasOwnProperty.call(t,n),e.r=t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},(()=>{var t;e.g.importScripts&&(t=e.g.location+"");var n=e.g.document;if(!t&&n&&(n.currentScript&&(t=n.currentScript.src),!t)){var r=n.getElementsByTagName("script");if(r.length)for(var o=r.length-1;o>-1&&!t;)t=r[o--].src}if(!t)throw new Error("Automatic publicPath is not supported in this browser");t=t.replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/"),e.p=t})(),e.b=document.baseURI||self.location.href,e.nc=void 0;var r={};(()=>{"use strict";e.r(r),e.d(r,{GetMCLEditor:()=>cr,MCL:()=>fr,MVA:()=>dr,PCA:()=>ir,PLS:()=>hr,_package:()=>nr,anova:()=>br,applyLinearKernelSVM:()=>wr,applyPolynomialKernelSVM:()=>Ir,applyRBFkernelSVM:()=>Ar,applySigmoidKernelSVM:()=>Nr,dbScan:()=>or,dbscanPostProcessingFunction:()=>sr,demoMultivariateAnalysis:()=>pr,info:()=>er,init:()=>rr,kNNImputation:()=>Sr,numberPreprocessingFunction:()=>ar,reduceDimensionality:()=>lr,stringPreprocessingFunction:()=>ur,testDataLinearNonSeparable:()=>vr,testDataLinearSeparable:()=>gr,topMenuPLS:()=>mr,trainLinearKernelSVM:()=>yr,trainPolynomialKernelSVM:()=>_r,trainRBFkernelSVM:()=>Er,trainSigmoidKernelSVM:()=>Cr});const t=grok,n=ui,o=DG;Int32Array,Float32Array,DG.Column.fromInt32Array,DG.Column.fromFloat32Array;const i="num",s="floatColumn",a="intColumn",u="floatColumns",l="newFloatColumns",c="intColumns",f="newIntColumns",h="newFloatColumn",m="newIntColumn",d="column",p="_callResult",g="numOfRows",v="numOfColumns",y="ref",w="value",E="tableFromColumns",A="objects",_="int",I="double",C={intColumn:Int32Array,floatColumn:Float32Array,floatColumns:Float32Array,newFloatColumns:Float32Array,intColumns:Int32Array,newIntColumns:Int32Array,newFloatColumn:Float32Array,newIntColumn:Int32Array};function N(t,n){let e,r=[],o=0;for(const d in t){const E=t[d],A=E.type;if(d!==p){switch(A){case i:case _:case I:E.data=n[o],o++;break;case a:case s:let r,d=n[o];r=d.type===_&&A===a||d.type===I&&A===s?d.getRawData():new C[A](d.getRawData()),E.data={array:r,numOfRows:r.length},o++;break;case m:case h:let p=0;e=E[g][y],p=t[e].type===i?t[e].data:t[e].data[E[g][w]],E.data={numOfRows:p},o++;break;case c:case u:let N=[];for(let t of n[o].toList())t.type===_&&A===a||t.type===I&&A===s?N.push(t.getRawData()):N.push(new C[A](t.getRawData()));E.data={arrays:N,numOfRows:N[0].length,numOfColumns:N.length},o++;break;case f:case l:let b=0,S=0;e=E[g][y],b=t[e].type===i?t[e].data:t[e].data[E[g][w]],e=E[v][y],S=t[e].type===i?t[e].data:t[e].data[E[v][w]],E.data={numOfRows:b,numOfColumns:S},o++;break;default:return}r.push(E)}}return r}function b(t,n){t.arguments._callResult=n.callResult,function(t,n){const e={newFloatColumns:DG.Column.fromFloat32Array,newIntColumns:DG.Column.fromInt32Array,newFloatColumn:DG.Column.fromFloat32Array,newIntColumn:DG.Column.fromInt32Array};let r=0;for(const o in t){const d=t[o];switch(d.type){case i:case _:case I:case a:case s:case u:case c:break;case h:case m:let t;null==d.name?t=(0).toString():g=d.name,d.column=e[d.type](t,n[r].array);break;case f:case l:let o=[],p=n[r].arrays.length,g=[];if(null==d.names)for(let t=1;t<=p;t++)g.push(t.toString());else g=d.names;for(let t=0;t<p;t++)o.push(e[d.type](g[t],n[r].arrays[t]));d.columns=o}r++}}(t.arguments,n.args);let e=function(t){let n=t.output;const e={newFloatColumns:"columns",newIntColumns:"columns",newFloatColumn:"column",newIntColumn:"column"};switch(n.type){case i:case _:case I:return t.arguments[n.source];case d:return t.arguments[n.source].column;case E:return DG.DataFrame.fromColumns(t.arguments[n.source].columns);case A:let r=[];for(let o of n.source){let n=t.arguments[o];r.push(n[e[n.type]])}return r}}(t);return function(t){for(const n in t){const e=t[n];switch(e.type){case i:case _:case I:case a:case s:case c:case u:break;case m:case h:e.column=null;break;case f:case l:e.columns=null}}}(t.arguments),e}const S=1,M=1,T=1,O=0,P=100,x=1e8,L="components must be positive.",R="components must not be greater than features count.",F="min must be less than max.",U="features must be positive.",D="samples must be positive.",k="violators percentage must be from the range from 0 to 100.",B="dataframe is too big.",V="unsupported column type: ";function G(t){if(t.type!=o.COLUMN_TYPE.FLOAT&&t.type!=o.COLUMN_TYPE.INT)throw new Error(V+t.type)}function q(t){if(t.stats.missingValueCount>0)throw new Error(`The column '${t.name}' has missing values.`)}function W(t,n){if(function(t,n){if(n<S)throw new Error(L);if(n>t.length)throw new Error(R);for(const n of t)G(n),q(n)}(t,n),t.length*t.byIndex(0).length>x)throw new Error(B)}var Y=function(t,n,e,r){return new(e||(e=Promise))((function(o,i){function s(t){try{u(r.next(t))}catch(t){i(t)}}function a(t){try{u(r.throw(t))}catch(t){i(t)}}function u(t){var n;t.done?o(t.value):(n=t.value,n instanceof e?n:new e((function(t){t(n)}))).then(s,a)}u((r=r.apply(t,n||[])).next())}))};var H=function(t,n,e,r){return new(e||(e=Promise))((function(o,i){function s(t){try{u(r.next(t))}catch(t){i(t)}}function a(t){try{u(r.throw(t))}catch(t){i(t)}}function u(t){var n;t.done?o(t.value):(n=t.value,n instanceof e?n:new e((function(t){t(n)}))).then(s,a)}u((r=r.apply(t,n||[])).next())}))};const $=0,z=1,j="Feature #",K="Label";function X(t,n,r,i,s,a,u,l){return H(this,void 0,void 0,(function*(){!function(t,n,e,r,o){if(e>=r)throw new Error(F);if(n<T)throw new Error(U);if(t<M)throw new Error(D);if(o<O||o>P)throw new Error(k)}(i,s,a,u,l);const c=o.Column.fromList("double","kernelParams",n);let f;const h=async function(t,n,r,o,i,s,a){return new Promise(((u,l)=>{const c=new Worker(new URL(e.p+e.u(374),e.b));c.postMessage(N(EDA.generateDataset.arguments,[t,n,r,o,i,s,a])),c.onmessage=function(t){c.terminate(),u(b(EDA.generateDataset,t.data))}}))}(t,c,i,s,a,u,l);yield h.then((t=>{f=t}),(t=>{throw new Error(`Error: ${t}`)})),f[z].name=K;for(const t of f[$])t.name=j+t.name;const m=o.DataFrame.fromColumns(f[$]);return m.name=r,m.columns.add(f[z]),m}))}var Q=function(t,n,e,r){return new(e||(e=Promise))((function(o,i){function s(t){try{u(r.next(t))}catch(t){i(t)}}function a(t){try{u(r.throw(t))}catch(t){i(t)}}function u(t){var n;t.done?o(t.value):(n=t.value,n instanceof e?n:new e((function(t){t(n)}))).then(s,a)}u((r=r.apply(t,n||[])).next())}))};const Z=0,J=1,tt=2,nt=3,et=4,rt=0,ot=1,it=2,st=3,at=4,ut=5,lt=6,ct=7,ft=0,ht=1,mt=2,dt=3,pt=0,gt=0,vt=1,yt=0,wt=1,Et=0,At=0,_t=0,It=0,Ct="gamma must be strictly positive.",Nt="sigma must be strictly positive.",bt="c must be strictly positive.",St="d must be strictly positive.",Mt="incorrect kernel.",Tt="Labels",Ot="predicted",Pt="correctness",xt="Confusion matrix",Lt="mean",Rt="std dev",Ft="alpha",Ut="weight",Dt="gamma",kt="kernel",Bt="kernel params",Vt="kernel param 1",Gt="kernel param 2",qt="features count",Wt="train samples count",Yt="Train error,%",Ht=["linear","polynomial","RBF","sigmoid"],$t="positive (P)",zt="negative (N)",jt="predicted positive (PP)",Kt="predicted negative (PN)",Xt="Sensitivity",Qt="Specificity",Zt="Balanced accuracy",Jt="Positive predicitve value",tn="Negative predicitve value",nn="Model report",en="Predicted labels",rn="Train labels",on="Prediction correctness",sn="prediction",an=4,un=3,ln=2,cn=0,fn=1,hn=2,mn=0,dn=1;function pn(t,n,r){return Q(this,void 0,void 0,(function*(){const i=n.columns,s=i.byName(r);return i.remove(r),yield function(t,n,r){return Q(this,void 0,void 0,(function*(){!function(t){if(t.gamma<=Et)throw new Error(Ct);switch(t.kernel){case Z:return;case tt:if(t.sigma<=At)throw new Error(Nt);return;case J:if(t.cParam<=_t)throw new Error(bt);if(t.dParam<=It)throw new Error(St);return;case nt:return;default:throw new Error(Mt)}}(t);const i=[mn,mn];switch(t.kernel){case Z:break;case tt:i[pt]=t.sigma;break;case J:i[gt]=t.cParam,i[vt]=t.dParam;break;case nt:i[yt]=t.kappa,i[wt]=t.theta;break;default:throw new Error(Mt)}const s=o.Column.fromList("double",Bt,i),a=n.toList(),u=a[0].length+dn,l=a.length+dn,c=et;let f;const h=async function(t,n,r,o,i,s,a,u){return new Promise(((l,c)=>{const f=new Worker(new URL(e.p+e.u(467),e.b));f.postMessage(N(EDA.trainAndAnalyzeLSSVM.arguments,[t,n,r,o,i,s,a,u])),f.onmessage=function(t){f.terminate(),l(b(EDA.trainAndAnalyzeLSSVM,t.data))}}))}(t.gamma,t.kernel,s,u,l,c,n,r);yield h.then((t=>{f=t}),(t=>{throw new Error(`Error: ${t}`)})),f[ot].name=Lt,f[it].name=Rt,f[st].name=Ft,f[at].name=Ut,f[ut].name=Ot,f[lt].name=Pt,f[ct].name=xt;const m={trainGamma:t.gamma,kernelType:t.kernel,kernelParams:s,trainLabels:r,normalizedTrainData:o.DataFrame.fromColumns(f[rt]),means:f[ot],stdDevs:f[it],modelParams:f[st],modelWeights:f[at],predictedLabels:f[ut],correctness:f[lt],confusionMatrix:f[ct],trainError:void 0,featuresCount:a.length,trainSamplesCount:a[0].length};return function(t){const n=t.confusionMatrix.getRawData(),e=n[ft],r=n[dt],o=n[mt],i=n[ht],s=e+i,a=o+r,u=e/s,l=r/a,c=e/(e+o),f=r/(r+i),h=(e+r)/(s+a),m=(u+l)/2;t.sensitivity=u,t.specificity=l,t.balancedAccuracy=m,t.positivePredicitveValue=c,t.negativePredicitveValue=f,t.trainError=100*(1-h)}(m),m}))}(t,i,s)}))}function gn(n,e){n.name=nn,n.columns.add(e.trainLabels),n.columns.add(e.predictedLabels),n.columns.add(e.correctness);const r=t.shell.addTableView(n);r.addViewer(o.Viewer.form(function(t){const n=t.kernelParams.getRawData();return o.DataFrame.fromColumns([o.Column.fromList("double",Dt,[t.trainGamma]),o.Column.fromStrings(kt,[Ht[t.kernelType]]),o.Column.fromList("double",Vt,[n[0]]),o.Column.fromList("double",Gt,[n[1]]),o.Column.fromList("double",qt,[t.featuresCount]),o.Column.fromList("double",Wt,[t.trainSamplesCount]),o.Column.fromList("double",Yt,[t.trainError]),o.Column.fromList("double",Zt,[t.balancedAccuracy]),o.Column.fromList("double",Xt,[t.sensitivity]),o.Column.fromList("double",Qt,[t.specificity]),o.Column.fromList("double",Jt,[t.positivePredicitveValue]),o.Column.fromList("double",tn,[t.negativePredicitveValue])])}(e))),r.addViewer(o.Viewer.scatterPlot(n,{title:en,color:e.predictedLabels.name})),r.addViewer(o.Viewer.scatterPlot(n,{title:rn,color:e.trainLabels.name})),r.addViewer(o.Viewer.grid(function(t){const n=t.confusionMatrix.getRawData();return o.DataFrame.fromColumns([o.Column.fromStrings("",[$t,zt]),o.Column.fromList("int",jt,[n[ft],n[mt]]),o.Column.fromList("int",Kt,[n[ht],n[dt]])])}(e))),r.addViewer(o.Viewer.scatterPlot(n,{title:on,color:e.correctness.name}))}function vn(t){const n=t.normalizedTrainData.columns,e=t.trainSamplesCount,r=t.featuresCount,o=new Uint8Array(an*(un+ln+e+r+r+e+dn+r+dn+r*e)),i=o.buffer;let s=0;const a=new Int32Array(i,s,un);a[cn]=t.kernelType,a[fn]=e,a[hn]=r,s+=un*an;let u=new Float32Array(i,s,ln);u.set(t.kernelParams.getRawData()),s+=ln*an,u=new Float32Array(i,s,e),u.set(t.trainLabels.getRawData()),s+=e*an,u=new Float32Array(i,s,r),u.set(t.means.getRawData()),s+=r*an,u=new Float32Array(i,s,r),u.set(t.stdDevs.getRawData()),s+=r*an,u=new Float32Array(i,s,e+dn),u.set(t.modelParams.getRawData()),s+=(e+dn)*an,u=new Float32Array(i,s,r+dn),u.set(t.modelWeights.getRawData()),s+=(r+dn)*an;for(const t of n)u=new Float32Array(i,s,r),u.set(t.getRawData()),s+=r*an;return o}function yn(t,n){return Q(this,void 0,void 0,(function*(){const r=function(t){const n=t.buffer;let e=0;const r=new Int32Array(n,e,un);e+=un*an;const i=r[fn],s=r[hn],a=o.Column.fromFloat32Array(Bt,new Float32Array(n,e,ln));e+=ln*an;const u=o.Column.fromFloat32Array(Tt,new Float32Array(n,e,i));e+=i*an;const l=o.Column.fromFloat32Array(Lt,new Float32Array(n,e,s));e+=s*an;const c=o.Column.fromFloat32Array(Rt,new Float32Array(n,e,s));e+=s*an;const f=o.Column.fromFloat32Array(Ft,new Float32Array(n,e,i+dn));e+=(i+dn)*an;const h=o.Column.fromFloat32Array(Ut,new Float32Array(n,e,s+dn));e+=(s+dn)*an;const m=[];for(let t=0;t<i;t++)m.push(o.Column.fromFloat32Array(t.toString(),new Float32Array(n,e,s))),e+=s*an;const d=o.DataFrame.fromColumns(m);return{kernelType:r[cn],kernelParams:a,trainLabels:u,means:l,stdDevs:c,modelParams:f,modelWeights:h,normalizedTrainData:d}}(new Uint8Array(n)),i=yield function(t,n){return Q(this,void 0,void 0,(function*(){let r;const o=async function(t,n,r,o,i,s,a,u,l){return new Promise(((c,f)=>{const h=new Worker(new URL(e.p+e.u(367),e.b));h.postMessage(N(EDA.predictByLSSVM.arguments,[t,n,r,o,i,s,a,u,l])),h.onmessage=function(t){h.terminate(),c(b(EDA.predictByLSSVM,t.data))}}))}(t.kernelType,t.kernelParams,t.normalizedTrainData.columns,t.trainLabels,t.means,t.stdDevs,t.modelParams,t.modelWeights,n);return yield o.then((t=>{r=t}),(t=>{throw new Error(`Error: ${t}`)})),r}))}(r,t.columns);return i.name=sn,o.DataFrame.fromColumns([i])}))}var wn,En,An,_n,In,Cn,Nn,bn;!function(t){t[t.COMPUTE_COMPONENTS=0]="COMPUTE_COMPONENTS",t[t.PERFORM_MVA=1]="PERFORM_MVA",t[t.DEMO=2]="DEMO"}(wn||(wn={})),function(t){t.NO_DF="No dataframe is opened",t.NO_COLS="No numeric columns without missing values",t.ONE_COL="No columns to be used as features (just one numeric columns without missing values)",t.EMPTY_DF="Dataframe is empty"}(En||(En={})),function(t){t.PREDICT="Predict",t.USING="Using",t.COMPONENTS="Components",t.PLS="PLS",t.MVA="Multivariate Analysis (PLS)",t.RUN="RUN",t.NAMES="Names",t.MODEL="Observed vs. Predicted",t.FEATURE="Feature",t.REGR_COEFS="Regression Coefficients",t.XLOADING="x.loading.p",t.LOADINGS="Loadings",t.XSCORE="x.score.t",t.YSCORE="y.score.u",t.SCORES="Scores",t.EXPL_VAR="Explained Variance",t.EXPLORE="Explore"}(An||(An={})),function(t){t.PREDICT="Column with the response variable",t.FEATURES="Predictors (features)",t.COMPONENTS="Number of PLS components",t.PLS="Compute PLS components",t.MVA="Perform multivariate analysis",t.NAMES="Names of data samples"}(_n||(_n={})),function(t){t.PLS="https://datagrok.ai/help/explore/multivariate-analysis/pls#pls-components",t.MVA="https://datagrok.ai/help/explore/multivariate-analysis/pls",t.MODEL="https://datagrok.ai/help/explore/multivariate-analysis/plots/predicted-vs-reference",t.COEFFS="https://datagrok.ai/help/explore/multivariate-analysis/plots/regression-coefficients",t.LOADINGS="https://datagrok.ai/help/explore/multivariate-analysis/plots/loadings",t.EXPL_VARS="https://datagrok.ai/help/explore/multivariate-analysis/plots/explained-variance",t.SCORES="https://datagrok.ai/help/explore/multivariate-analysis/plots/scores"}(In||(In={})),function(t){t[t.DEFAULT=3]="DEFAULT",t[t.MIN=1]="MIN"}(Cn||(Cn={})),function(t){t.PREFIX="PLS",t.SUFFIX="(predicted)",t.COMP="component",t.COMPS="components"}(Nn||(Nn={})),function(t){t[t.PREDICTION=0]="PREDICTION",t[t.REGR_COEFFS=1]="REGR_COEFFS",t[t.T_SCORES=2]="T_SCORES",t[t.U_SCORES=3]="U_SCORES",t[t.X_LOADINGS=4]="X_LOADINGS",t[t.Y_LOADINGS=5]="Y_LOADINGS"}(bn||(bn={}));const Sn="Int",Mn=6,Tn=[.49,.79,.99],On=1,Pn=200,xn=200;var Ln;!function(t){t.AXIS="#838383",t.CIRCLE="#0000FF"}(Ln||(Ln={}));const Rn="# Data\nEach car has many features - patterns extraction is complicated.\n\n# Model\nPredict car price by its other features.\n\n# Try\nPress 'RUN' to perform multivariate analysis using partial least squares\n([PLS](https://en.wikipedia.org/wiki/Partial_least_squares_regression)) regression.\n\n# Essence\nThe method finds the latent factors that\n\n* capture the maximum variance in the features\n* maximize correlation with the response variable",Fn=[{caption:An.MODEL,text:"Closer to the line means better price prediction."},{caption:An.SCORES,text:"The latent factor values for each data sample reflect the similarities and dissimilarities among observations."},{caption:An.LOADINGS,text:"The impact of each feature on the latent factors: higher loading means stronger influence."},{caption:An.REGR_COEFS,text:"Parameters of the obtained linear model: features make different contribution to the prediction."},{caption:An.EXPL_VAR,text:"How well the latent components fit source data: closer to one means better fit."}],Un=Fn.map((t=>`# ${t.caption}\n\n${t.text}`)).join("\n\n")+`\n\n# Learn more\n \n * [Multivariate analysis](${In.MVA}),\n * [ANOVA](https://datagrok.ai/help/explore/anova)`;var Dn=function(t,n,e,r){return new(e||(e=Promise))((function(o,i){function s(t){try{u(r.next(t))}catch(t){i(t)}}function a(t){try{u(r.throw(t))}catch(t){i(t)}}function u(t){var n;t.done?o(t.value):(n=t.value,n instanceof e?n:new e((function(t){t(n)}))).then(s,a)}u((r=r.apply(t,n||[])).next())}))};const kn=Math.min,Bn=Math.max;function Vn(t){return Dn(this,void 0,void 0,(function*(){W(t.features,t.components),G(t.predict),q(t.predict);const n=yield async function(t,n,r,o){return new Promise(((t,i)=>{const s=new Worker(new URL(e.p+e.u(334),e.b));s.postMessage(N(EDA.partialLeastSquareRegression.arguments,[n,r,o])),s.onmessage=function(n){s.terminate(),t(b(EDA.partialLeastSquareRegression,n.data))}}))}(t.table,t.features,t.predict,t.components);return{prediction:n[bn.PREDICTION],regressionCoefficients:n[bn.REGR_COEFFS],tScores:n[bn.T_SCORES],uScores:n[bn.U_SCORES],xLoadings:n[bn.X_LOADINGS],yLoadings:n[bn.Y_LOADINGS]}}))}function Gn(e){return Dn(this,void 0,void 0,(function*(){const r=t.shell.t;if(null===r)return void t.shell.warning(En.NO_DF);if(0===r.rowCount)return void t.shell.warning(En.EMPTY_DF);const i=[],s=[],a=[],u=t=>(t.type===o.COLUMN_TYPE.INT||t.type===o.COLUMN_TYPE.FLOAT)&&0===t.stats.missingValueCount;if(r.columns.toList().forEach((t=>{u(t)?(i.push(t.name),s.push(t)):t.type===o.COLUMN_TYPE.STRING&&a.push(t)})),0===i.length)return void t.shell.warning(En.NO_COLS);if(1===i.length)return void t.shell.warning(En.ONE_COL);let l=s[s.length-1];const c=n.columnInput(An.PREDICT,r,l,(()=>{l=c.value,y()}),{filter:t=>u(t)});let f;c.setTooltip(_n.PREDICT);const h=n.columnsInput(An.USING,r,(()=>{}),{available:i});h.onInput((()=>y())),h.setTooltip(_n.FEATURES);let m=kn(i.length-1,Cn.DEFAULT);const d=n.input.forProperty(o.Property.fromOptions({name:An.COMPONENTS,inputType:Sn,defaultValue:m,showPlusMinus:!0,min:Cn.MIN}));let p,g,v;d.onInput((()=>y())),d.setTooltip(_n.COMPONENTS),e===wn.COMPUTE_COMPONENTS?(p=An.PLS,g=In.PLS,v=_n.PLS):(p=An.MVA,g=In.MVA,v=_n.MVA);const y=()=>{var t;h.value=h.value.filter((t=>t!==l)),f=h.value,d.value=kn(Bn(null!==(t=d.value)&&void 0!==t?t:m,Cn.MIN),f.length),m=d.value,A.getButton(An.RUN).disabled=0===f.length||m<=0};let w=a.length>0?a[0]:null;const E=n.columnInput(An.NAMES,r,w,(()=>w=c.value),{filter:t=>t.type===o.COLUMN_TYPE.STRING});E.setTooltip(_n.NAMES),E.root.hidden=0===a.length||e===wn.COMPUTE_COMPONENTS;const A=n.dialog({title:p,helpUrl:g}).add(n.form([c,h,d,E])).addButton(An.RUN,(()=>Dn(this,void 0,void 0,(function*(){A.close(),yield function(e,r){var i,s;return Dn(this,void 0,void 0,(function*(){const a=yield Vn(e),u=a.tScores,l=e.table.columns,c=e.features.names(),f=r===wn.COMPUTE_COMPONENTS?Nn.PREFIX:An.XSCORE;if(u.forEach(((t,n)=>{t.name=l.getUnusedName(`${f}${n+1}`),l.add(t)})),r===wn.COMPUTE_COMPONENTS)return;const h=t.shell.tableView(e.table.name),m=o.DataFrame.fromColumns([o.Column.fromStrings(An.FEATURE,c),a.regressionCoefficients]);a.xLoadings.forEach(((t,n)=>{t.name=m.columns.getUnusedName(`${An.XLOADING}${n+1}`),m.columns.add(t)}));const d=a.prediction;d.name=l.getUnusedName(`${e.predict.name} ${Nn.SUFFIX}`),l.add(d);const p=h.addViewer(o.Viewer.scatterPlot(e.table,{title:An.MODEL,xColumnName:e.predict.name,yColumnName:d.name,showRegressionLine:!0,markerType:o.MARKER_TYPE.CIRCLE,labels:null===(i=e.names)||void 0===i?void 0:i.name,help:In.MODEL}));a.regressionCoefficients.name=An.REGR_COEFS;const g=h.addViewer(o.Viewer.barChart(m,{title:An.REGR_COEFS,splitColumnName:An.FEATURE,valueColumnName:a.regressionCoefficients.name,valueAggrType:o.AGG.AVG,help:In.COEFFS,showValueSelector:!1,showStackSelector:!1}));a.xLoadings.forEach(((t,n)=>t.name=`${An.XLOADING}${n+1}`));const v=h.addViewer(o.Viewer.scatterPlot(m,{title:An.LOADINGS,xColumnName:`${An.XLOADING}1`,yColumnName:`${An.XLOADING}${a.xLoadings.length>1?"2":"1"}`,markerType:o.MARKER_TYPE.CIRCLE,labels:An.FEATURE,help:In.LOADINGS})),y=u.map((t=>t.name));a.uScores.forEach(((t,n)=>{t.name=l.getUnusedName(`${An.YSCORE}${n+1}`),l.add(t),y.push(t.name)}));const w=o.Viewer.scatterPlot(e.table,{title:An.SCORES,xColumnName:u[0].name,yColumnName:u.length>1?u[1].name:a.uScores[0],markerType:o.MARKER_TYPE.CIRCLE,labels:null===(s=e.names)||void 0===s?void 0:s.name,help:In.SCORES,showViewerFormulaLines:!0}),E=[],A=(t,n)=>{E.push({type:"line",formula:t,width:On,visible:!0,title:" ",min:-n,max:n,color:Ln.CIRCLE})};y.forEach((t=>{const n="${"+t+"}";E.push({type:"line",formula:`${n} = 0`,width:On,visible:!0,title:" ",color:Ln.AXIS}),y.forEach((t=>{const e="${"+t+"}";Tn.forEach((t=>{A(e+` = sqrt(${t*t} - ${n} * ${n})`,t),A(e+` = -sqrt(${t*t} - ${n} * ${n})`,t)}))}))})),w.meta.formulaLines.addAll(E),h.addViewer(w);const _=a.yLoadings.getRawData(),I=a.xLoadings.map((t=>t.getRawData())),C=e.table.rowCount,N=c.length,b=e.components,S=new Float32Array(b),M=[],T=[];for(let t=0;t<N;++t)T.push(new Float32Array(b));S[0]=Math.pow(_[0],2)/C,M.push(`1 ${Nn.COMP}`),T.forEach(((t,n)=>{t[0]=Math.pow(I[0][n],2)/C}));for(let t=1;t<b;++t)S[t]=S[t-1]+Math.pow(_[t],2)/C,T.forEach(((n,e)=>n[t]=n[t-1]+Math.pow(I[t][e],2)/C)),M.push(`${t+1} ${Nn.COMPS}`);const O=o.DataFrame.fromColumns([o.Column.fromStrings(An.COMPONENTS,M),o.Column.fromFloat32Array(e.predict.name,S)]);T.forEach(((t,n)=>O.columns.add(o.Column.fromFloat32Array(c[n],t))));const P=h.addViewer(o.Viewer.barChart(O,{title:An.EXPL_VAR,splitColumnName:An.COMPONENTS,valueColumnName:e.predict.name,valueAggrType:o.AGG.AVG,help:In.EXPL_VARS,showCategorySelector:!1,showStackSelector:!1}));if(r===wn.DEMO){const e=[p,w,v,g,P].map(((t,n)=>({text:Fn[n].text,showNextTo:t.root})));n.hints.addTextHint({title:An.EXPLORE,pages:e}).helpUrl=In.MVA,t.shell.windows.help.showHelp(n.markdown(Un))}}))}({table:r,features:o.DataFrame.fromColumns(f).columns,predict:l,components:m,names:w},e)}))),void 0,v).show({x:Pn,y:xn});setTimeout((()=>{h.value=s.filter((t=>t!==l)),f=h.value}),Mn),t.shell.v.append(A.root)}))}var qn,Wn=e(2162);function Yn(t){if(t<=0||t>=1)throw new Error(qn.INCORRECT_SIGNIFICANCE_LEVEL)}function Hn(t){const n=t.size;if(n<=0)throw new Error(qn.INCORRECT_SAMPLE_SIZE);return 1===n?0:(t.sumOfSquares-Math.pow(t.sum,2)/n)/(n-1)}function $n(t,n,e=.05){Yn(e);const r=Hn(t),o=Hn(n);return 0===o?r===o:r/o<Wn.centralF.inv(1-e,t.size-1,n.size-1)}!function(t){t.NON_EQUAL_FACTORS_VALUES_SIZE="non-equal sizes of factor and values arrays. INPUT ERROR.",t.INCORRECT_SIGNIFICANCE_LEVEL="incorrect significance level. It must be from the interval (0, 1). INPUT ERROR.",t.INCORRECT_SAMPLE_SIZE="incorrect size of sample. DATA FACTORIZAING ERROR.",t.NON_EQUAL_VARIANCES="variances are not equal.",t.NON_NORMAL_DISTRIB="non-normal distribution.",t.UNSUPPORTED_COLUMN_TYPE="unsupported column type.",t.INCORRECT_CATEGORIES_COL_TYPE="incorrect categories column type.",t.ANOVA_FAILED_JUST_ONE_CAT="ANOVA filed: there should be at least 2 categories."}(qn||(qn={}));class zn{constructor(t,n,e=!1,r=.05){if(this.isNormDistrib=void 0,this.categories=[],t.type!==o.COLUMN_TYPE.STRING)throw new Error;if(t.length!==n.length)throw new Error(qn.NON_EQUAL_FACTORS_VALUES_SIZE);this.setStats(t,n,e,r)}isNormal(){return!0}areVarsEqual(t=.05){const n=this.catCount;if(1===n)return!0;const e={sum:this.sums[0],sumOfSquares:this.sumsOfSquares[0],size:this.subSampleSizes[0]};for(let r=1;r<n;++r)if(!$n(e,{sum:this.sums[r],sumOfSquares:this.sumsOfSquares[r],size:this.subSampleSizes[r]},t))return!1;return!0}getOneWayAnova(){const t=this.catCount;if(1===t)throw new Error(qn.ANOVA_FAILED_JUST_ONE_CAT);let n=0,e=0;const r=this.size;let o=0;for(let r=0;r<t;++r)n+=this.sums[r],e+=this.sumsOfSquares[r],o+=Math.pow(this.sums[r],2)/this.subSampleSizes[r];const i=e-Math.pow(n,2)/r,s=o-Math.pow(n,2)/r,a=i-s,u=t-1,l=r-t,c=s/u,f=a/l,h=c/f;return{ssBn:s,ssWn:a,ssTot:i,dfBn:u,dfWn:l,dfTot:r-1,msBn:c,msWn:f,fStat:h,pValue:1-Wn.centralF.cdf(h,u,l)}}setStats(t,n,e=!1,r=.05){const i=n.type,s=n.length;switch(i){case o.COLUMN_TYPE.INT:case o.COLUMN_TYPE.FLOAT:this.categories=t.categories;const e=this.categories.length;this.catCount=e,this.size=s;const r=n.getRawData(),i=t.getRawData(),a=new Float64Array(e).fill(0),u=new Float64Array(e).fill(0),l=new Int32Array(e).fill(0);for(let t=0;t<s;++t){const n=i[t];a[n]+=r[t],u[n]+=Math.pow(r[t],2),++l[n]}this.sums=a,this.sumsOfSquares=u,this.subSampleSizes=l;break;default:throw new Error(qn.UNSUPPORTED_COLUMN_TYPE)}}}var jn=function(t,n,e,r){return new(e||(e=Promise))((function(o,i){function s(t){try{u(r.next(t))}catch(t){i(t)}}function a(t){try{u(r.throw(t))}catch(t){i(t)}}function u(t){var n;t.done?o(t.value):(n=t.value,n instanceof e?n:new e((function(t){t(n)}))).then(s,a)}u((r=r.apply(t,n||[])).next())}))};function Kn(t,n,r,o){return jn(this,void 0,void 0,(function*(){return new Promise((function(i,s){const a=new Worker(new URL(e.p+e.u(796),e.b));a.postMessage({embedX:t,embedY:n,minPts:o,epsilon:r}),a.onmessage=({data:{error:t,clusters:n}})=>{a.terminate(),t?s(t):i(n)}}))}))}e(7905);let Xn=null;function Qn(){return t=this,n=void 0,r=function*(){return Xn||(Xn=yield navigator.gpu.requestAdapter(),null!=Xn)?(yield Xn.requestAdapterInfo()).description:null},new((e=void 0)||(e=Promise))((function(o,i){function s(t){try{u(r.next(t))}catch(t){i(t)}}function a(t){try{u(r.throw(t))}catch(t){i(t)}}function u(t){var n;t.done?o(t.value):(n=t.value,n instanceof e?n:new e((function(t){t(n)}))).then(s,a)}u((r=r.apply(t,n||[])).next())}));var t,n,e,r}var Zn,Jn,te,ne,ee,re,oe,ie,se;(Jn=Zn||(Zn={})).EUCLIDEAN="EUCLIDEAN",Jn.MANHATTAN="MANHATTAN",Zn.EUCLIDEAN,Zn.MANHATTAN,(ne=te||(te={})).HAMMING="Hamming",ne.EUCLIDEAN="Euclidean",ne.MANHATTAN="Manhattan",ne.TANIMOTO="Tanimoto",ne.LEVENSTEIN="Levenshtein",ne.NEEDLEMAN_WUNSCH="Needlemann-Wunsch",ne.MONOMER_CHEMICAL_DISTANCE="Monomer chemical distance",ne.SOKAL="Sokal",ne.COSINE="Cosine",ne.ASYMMETRIC="Asymmetric",ne.Difference="Difference",ne.OneHot="One-Hot",te.HAMMING,te.EUCLIDEAN,te.MANHATTAN,te.TANIMOTO,te.LEVENSTEIN,te.NEEDLEMAN_WUNSCH,te.MONOMER_CHEMICAL_DISTANCE,te.SOKAL,te.COSINE,te.ASYMMETRIC,te.Difference,te.OneHot,te.HAMMING,te.EUCLIDEAN,te.MANHATTAN,te.TANIMOTO,te.SOKAL,te.COSINE,te.ASYMMETRIC,te.LEVENSTEIN,te.NEEDLEMAN_WUNSCH,te.MONOMER_CHEMICAL_DISTANCE,te.Difference,te.OneHot,new Set([te.HAMMING,te.LEVENSTEIN,te.NEEDLEMAN_WUNSCH,te.MONOMER_CHEMICAL_DISTANCE,te.OneHot]),new Set([te.HAMMING,te.EUCLIDEAN,te.MANHATTAN,te.MONOMER_CHEMICAL_DISTANCE,te.LEVENSTEIN,te.NEEDLEMAN_WUNSCH,te.TANIMOTO,te.COSINE,te.SOKAL,te.ASYMMETRIC,te.OneHot,te.Difference]),new Set([te.EUCLIDEAN,te.MANHATTAN,te.OneHot,te.Difference]),new Set([te.EUCLIDEAN,te.MANHATTAN,te.Difference]),new Set([te.EUCLIDEAN,te.MANHATTAN,te.Difference]),new Set([te.TANIMOTO,te.COSINE,te.SOKAL,te.ASYMMETRIC]),function(t){t.ADD="ADD",t.SUB="SUB",t.MULT="MULT"}(ee||(ee={})),function(t){t.SQUARE="SQUARE",t.INVERSE="INVERSE",t.TRANSPOSE="TRANSPOSE",t.NORM="NORM",t.COLUMN_NORM="COLUMN_NORM"}(re||(re={})),function(t){t.SCALARMULT="SCALARMULT",t.SCALARADD="SCALARADD",t.SCALARPOW="SCALARPOW"}(oe||(oe={})),Object.prototype.toString,(se=ie||(ie={})).UMAP="UMAP",se.T_SNE="t-SNE",o.SEMTYPE.MOLECULE,o.SEMTYPE.MACROMOLECULE;class ae{constructor(){this.epsilon={uiName:"Epsilon",value:.01,tooltip:"Minimum distance between cluster points",min:0,max:2,step:.005},this.minPts={uiName:"Minimum points",value:4,tooltip:"Minimum number of points in cluster",min:1,max:1e3,step:1}}}const ue="bypassLargeDataWarning",le="show-scatterplot-progress";var ce,fe;(fe=ce||(ce={})).EUCLIDEAN="EUCLIDEAN",fe.MANHATTAN="MANHATTAN";const he=rxjs;var me=e(3379),de=e.n(me),pe=e(7795),ge=e.n(pe),ve=e(569),ye=e.n(ve),we=e(3565),Ee=e.n(we),Ae=e(9216),_e=e.n(Ae),Ie=e(4589),Ce=e.n(Ie),Ne=e(9414),be={};be.styleTagTransform=Ce(),be.setAttributes=Ee(),be.insert=ye().bind(null,"head"),be.domAPI=ge(),be.insertStyleElement=_e(),de()(Ne.Z,be),Ne.Z&&Ne.Z.locals&&Ne.Z.locals;class Se{constructor(){this.learningRate={uiName:"Learninig rate",value:1,tooltip:"The initial learning rate for the embedding optimization"},this.nEpochs={uiName:"Epochs",value:0,tooltip:"The number of epochs to optimize embeddings via SGD. Computed automatically if set to 0"},this.nNeighbors={uiName:"Neighbors",value:15,tooltip:"The number of nearest neighbors to construct the fuzzy manifold"},this.spread={uiName:"Spread",value:1,tooltip:"The effective scale of embedded points, used with min distance to control \n the clumped/dispersed nature of the embedding"},this.minDist={uiName:"Min distance",value:.1,tooltip:"The effective minimum distance between embedded points, \n used with spread to control the clumped/dispersed nature of the embedding"},this.randomSeed={uiName:"Random seed",value:null,tooltip:"Random seed",type:"string"},this.useWebGPU={uiName:"Use WebGPU",value:!1,tooltip:"Use WebGPU for KNN computations",type:"boolean"},Qn().then((t=>{t?this.useWebGPU.tooltip+=` (${t})`:(this.useWebGPU.value=!1,this.useWebGPU.forceRemove=!0)}))}}class Me{constructor(){this.epsilon={uiName:"Epsilon",value:10,tooltip:"Epsilon is learning rate"},this.perplexity={uiName:"Perplexity",value:30,tooltip:"Roughly how many neighbors each point influences"}}}class Te{constructor(e={}){this.editorSettings={},this.columnOptEditors=[],this.columnOptEditorsRoot=n.div(),this.columnParamsEditorRoot=n.div(),this.weightsEditorRoot=n.div(),this.columnFunctionsMap={},this.methodsParams={[ie.UMAP]:new Se,[ie.T_SNE]:new Me},this.dbScanParams=new ae,this.methodSettingsDiv=n.inputs([]),this.dbScanSettingsDiv=n.inputs([]),this.supportedFunctions={},this.plotEmbeddingsInput=n.boolInput("Plot embeddings",!0),this.clusterEmbeddingsInput=n.boolInput("Cluster embeddings",!1),this.aggregationMethodInput=n.choiceInput("Aggregation",ce.EUCLIDEAN,[ce.EUCLIDEAN,ce.MANHATTAN]),this.aggregationMethodInput.setTooltip("Aggregation method for combining distances between columns"),this.onColumnsChanged=new he.Subject,this.editorSettings=e,this.columnParamsEditorAccordion=n.accordion(),o.Func.find({tags:["dim-red-preprocessing-function"]}).forEach((t=>{const n=t.options.get("supportedSemTypes")??"",e=t.friendlyName??t.name,r=t.options.get("supportedTypes")??"",o=t.options.get("supportedUnits")??"",i=t.options.get("supportedDistanceFunctions")??"";this.editorSettings.semtype&&!n.includes(this.editorSettings.semtype)||this.editorSettings.type&&!r.includes(this.editorSettings.type)||this.editorSettings.units&&!o.includes(this.editorSettings.units)||(this.supportedFunctions[e]={func:t,semTypes:n?n.split(","):[],types:r?r.split(","):[],units:o?o.split(","):[],distanceFunctions:i?i.split(","):[]})})),this.postProcessingEditor=new xe,this.tableInput=n.tableInput("Table",t.shell.tv.dataFrame,t.shell.tables,(()=>{this.onTableInputChanged()})),this.onTableInputChanged();let r=!1,i=!1;this.methodInput=n.choiceInput("Method",ie.UMAP,[ie.UMAP,ie.T_SNE],(()=>{r&&this.createAlgorithmSettingsDiv(this.methodSettingsDiv,this.methodsParams[this.methodInput.value])})),this.methodSettingsIcon=n.icons.settings((()=>{r=!r,r?this.createAlgorithmSettingsDiv(this.methodSettingsDiv,this.methodsParams[this.methodInput.value]):n.empty(this.methodSettingsDiv)}),"Modify methods parameters"),this.dbScanSettingsIcon=n.icons.settings((()=>{i=!i,i?this.createAlgorithmSettingsDiv(this.dbScanSettingsDiv,this.dbScanParams):n.empty(this.dbScanSettingsDiv)}),"Modify clustering parameters"),this.clusterEmbeddingsInput.classList.add("ml-dim-reduction-settings-input"),this.clusterEmbeddingsInput.root.prepend(this.dbScanSettingsIcon),this.methodInput.root.classList.add("ml-dim-reduction-settings-input"),this.methodInput.root.prepend(this.methodSettingsIcon),this.columnParamsEditorAccordion.addPane("Column options",(()=>this.columnOptEditorsRoot),!0,null,!1),this.columnParamsEditorAccordion.root.style.display="none",this.columnParamsEditorRoot.appendChild(this.columnParamsEditorAccordion.root),this.columnParamsEditorRoot.appendChild(this.weightsEditorRoot)}onTableInputChanged(){const t=this.tableInput.value;if(!t)return;n.empty(this.columnOptEditorsRoot),n.empty(this.weightsEditorRoot),this.columnFunctionsMap={},t.columns.toList().forEach((t=>{Object.keys(this.supportedFunctions).forEach((n=>{const e=this.supportedFunctions[n].semTypes,r=this.supportedFunctions[n].types,i=this.supportedFunctions[n].units,s=!e.length||t.semType&&e.includes(t.semType),a=!r.length||r.includes(t.type),u=!i.length||t.getTag(o.TAGS.UNITS)&&i.includes(t.getTag(o.TAGS.UNITS));s&&a&&u&&(this.columnFunctionsMap[t.name]||(this.columnFunctionsMap[t.name]=[]),this.columnFunctionsMap[t.name].push(n))}))}));const e=Object.keys(this.columnFunctionsMap),r=n.columnsInput("Columns",t,(()=>{this.onColumnsChanged.next(),n.empty(this.columnOptEditorsRoot),n.empty(this.weightsEditorRoot);const t=r.value;if(this.aggregationMethodInput.root.style.display=!t||t?.length<2?"none":"flex",!t||0===t.length)return void(this.columnParamsEditorAccordion.root.style.display="none");const e=[20,30,30,20];this.columnOptEditors=t.map((t=>new Oe(t,this.columnFunctionsMap[t.name].map((t=>this.supportedFunctions[t])),e)));const o=["Column","Encoding function","Similarity metric","Weight"].map(((t,r)=>n.h1(t,{style:{width:`${e[r]}%`,margin:0}})));n.tooltip.bind(o[1],"Encoding function for the column values"),n.tooltip.bind(o[2],"Distance/Similarity metric for the encoded column values"),n.tooltip.bind(o[3],"Weight of the column for combining distances between values");const i=n.divH(o,{classes:"ml-dim-reduction-column-editor-header-root"});this.columnOptEditorsRoot.appendChild(i);const s=n.divV([],{style:{maxHeight:"400px",overflow:"auto"}});this.columnOptEditors.forEach((t=>{s.appendChild(t.accordionDiv)})),this.columnOptEditorsRoot.appendChild(s),this.columnOptEditors.length>0&&(this.columnParamsEditorAccordion.root.style.display="flex")}),{available:e});r.fireChanged(),this.columnsInputRoot?(n.empty(this.columnsInputRoot),this.columnsInput=r,Array.from(this.columnsInput.root.children).forEach((t=>this.columnsInputRoot.appendChild(t)))):(this.columnsInputRoot=r.root,this.columnsInput=r)}createAlgorithmSettingsDiv(t,e){return n.empty(t),Object.keys(e).forEach((r=>{const o=e[r];if(!o.forceRemove){const e="string"===o.type?n.stringInput(o.uiName,o.value??"",(()=>{o.value=e.value})):"boolean"===o.type?n.boolInput(o.uiName,o.value??!1,(()=>{o.value=e.value})):n.floatInput(o.uiName,o.value,(()=>{o.value=e.value}));n.tooltip.bind(e.input??e.root,o.tooltip),t.append(e.root)}})),t}get algorithmOptions(){const t=this.methodsParams[this.methodInput.value],n={};return Object.keys(t).forEach((e=>{null!=t[e].value&&(n[e]=t[e].value)})),n}get dbScanOptions(){return{dbScanEpsilon:this.dbScanParams.epsilon.value??.01,dbScanMinPts:this.dbScanParams.minPts.value??4}}getEditor(){return n.div([this.tableInput.root,this.columnsInputRoot,this.columnParamsEditorRoot,this.aggregationMethodInput.root,this.methodInput.root,this.methodSettingsDiv,this.plotEmbeddingsInput,this.postProcessingEditor.root],{style:{minWidth:"420px"},classes:"ui-form"})}getParams(){return{table:this.tableInput.value,columns:this.columnsInput.value,methodName:this.methodInput.value,preprocessingFunctions:this.columnOptEditors.map((t=>t.preProcessingFunction)),distanceMetrics:this.columnOptEditors.map((t=>t.similarityMetricInput.value)),weights:this.columnOptEditors.map((t=>t.weight??1)),options:{...this.algorithmOptions,...this.dbScanOptions,preprocessingFuncArgs:this.columnOptEditors.map((t=>t.preprocessingFunctionSettings))},plotEmbeddings:this.plotEmbeddingsInput.value,clusterEmbeddings:!1,postProcessingFunction:this.postProcessingEditor.postProcessingFunction,postProcessingFunctionArgs:this.postProcessingEditor.args,aggreaggregationMethod:this.aggregationMethodInput.value}}}class Oe{constructor(t,e,r){this.preprocessingFuncSettingsDiv=n.div([]),this.preprocessingFunctionSettings={},this.editorDiv=n.div([]),this.hasExtraSettings=!0,this.functionsMap={},this.needsConfiguration=!1,this.weight=1,this.weightInput=n.floatInput("Weight",1,(()=>{this.weight=this.weightInput.value??1})),this.column=t,this.supportedFunctions=e.sort(((t,n)=>0!==t.units.length&&0!==n.units.length||t.units.length===n.units.length?t.units.length!==n.units.length?t.units.length-n.units.length:0===t.semTypes.length||0===n.semTypes.length?n.semTypes.length-t.semTypes.length:t.semTypes.length!==n.semTypes.length?t.semTypes.length-n.semTypes.length:t.types.length-n.types.length:n.units.length-t.units.length)),this.supportedFunctions.forEach((t=>{this.functionsMap[Pe(t.func)]=t.func})),this.preprocessingFunctionInput=n.choiceInput("Encoding function",Pe(this.supportedFunctions[0].func),this.supportedFunctions.map((t=>Pe(t.func))),(()=>{const t=this.preprocessingFunctionInput.value,e=this.functionsMap[t];this.preprocessingFunctionSettings={},this.hasExtraSettings=e.inputs.length>2;const r=this.supportedFunctions.find((n=>Pe(n.func)===t));this.getSimilarityMetricInput(r),n.empty(this.preprocessingFuncSettingsDiv),o=!1,this.hasExtraSettings?this.preprocessingFuncSettingsIcon.style.display="flex":this.preprocessingFuncSettingsIcon.style.display="none"})),this.preprocessingFunctionInput.root.style.display="flex",this.createSettingsDiv(this.preprocessingFuncSettingsDiv,this.supportedFunctions[0].func).then((()=>{n.empty(this.preprocessingFuncSettingsDiv)})),this.getSimilarityMetricInput(this.supportedFunctions[0]),this.hasExtraSettings=this.supportedFunctions[0].func.inputs.length>2;let o=!1;this.preprocessingFuncSettingsIcon=n.icons.settings((async()=>{o=!o,o?await this.createSettingsDiv(this.preprocessingFuncSettingsDiv,this.functionsMap[this.preprocessingFunctionInput.value]):n.empty(this.preprocessingFuncSettingsDiv)}),"Modify encoding function parameters"),this.preprocessingFunctionInput.root.classList.add("ml-dim-reduction-settings-input"),this.preprocessingFunctionInput.root.prepend(this.preprocessingFuncSettingsIcon),this.hasExtraSettings?this.preprocessingFuncSettingsIcon.style.display="flex":this.preprocessingFuncSettingsIcon.style.display="none",this.needsConfiguration=!(e.length<2&&!this.hasExtraSettings&&e[0].distanceFunctions.length<2);const i=n.h3(this.column.name,{classes:"ml-dim-reduction-column-editor-column-title"}),s=[i,this.preprocessingFunctionInput.root,this.similarityMetricInputRoot,this.weightInput.root];n.tooltip.bind(i,this.column.name),s.forEach(((t,n)=>{t.style.width=`${r[n]}%`})),s.forEach((t=>t.classList.add("ml-dim-reduction-column-editor-input-root")));const a=n.divH(s,{classes:"ml-dim-reduction-column-editor-root"});this.accordionDiv=n.divV([]),this.editorDiv.appendChild(a),this.editorDiv.appendChild(this.preprocessingFuncSettingsDiv),this.accordionDiv.appendChild(this.editorDiv)}getSimilarityMetricInput(t){const e=n.choiceInput("Similarity metric",t.distanceFunctions[0],t.distanceFunctions);this.similarityMetricInputRoot?(n.empty(this.similarityMetricInputRoot),this.similarityMetricInput=e,Array.from(this.similarityMetricInput.root.children).forEach((t=>this.similarityMetricInputRoot.appendChild(t)))):(this.similarityMetricInputRoot=e.root,this.similarityMetricInput=e)}get preProcessingFunction(){return this.functionsMap[this.preprocessingFunctionInput.value]}async createSettingsDiv(t,e){if(n.empty(t),e.inputs.length<3)return n.div();const r=e.prepare(),o=await r.buildEditor(n.div());for(let n=2;n<e.inputs.length;n++){const i=e.inputs[n],s=this.preprocessingFunctionSettings[i.name]||r.inputParams[e.inputs[n].name].value||i.defaultValue;s&&(this.preprocessingFunctionSettings[i.name]=s);const a=o.find((t=>t.property.name===i.name));a&&(null!==this.preprocessingFunctionSettings[i.name]&&void 0!==this.preprocessingFunctionSettings[i.name]&&(a.value=this.preprocessingFunctionSettings[i.name]),a.onChanged((()=>{this.preprocessingFunctionSettings[i.name]=a.value})),t.append(a.root))}return t.style.marginBottom="10px",t}}function Pe(t){return t.friendlyName??t.name}class xe{constructor(){this.postProcessingFunctionsMap={},this._root=n.div([]),this._postProcessingArgs={},this._argsElement=n.div([]),this._settingsOpened=!1,this._settingsIcon=n.icons.settings((async()=>{this._settingsOpened=!this._settingsOpened,this._settingsOpened?this._argsElement.style.display="block":this._argsElement.style.display="none"})),this._argsElement.style.display="none",o.Func.find({tags:["dim-red-postprocessing-function"]}).filter((t=>t.inputs.length>=2)).forEach((t=>{const n=t.friendlyName??t.name;this.postProcessingFunctionsMap[n]=t})),this.postProcessingFunctionsMap.None=null;const t=Object.keys(this.postProcessingFunctionsMap).find((t=>!!this.postProcessingFunctionsMap[t]?.options?.defaultPostProcessingFunction))??"None";this.postProcessingFunctionInput=n.choiceInput("Postprocessing",t,Object.keys(this.postProcessingFunctionsMap),(async()=>{await this.onFunctionChanged()}),{nullable:!1}),this.onFunctionChanged(),this.postProcessingFunctionInput.nullable=!1,this.postProcessingFunctionInput.classList.add("ml-dim-reduction-settings-input"),this.postProcessingFunctionInput.root.prepend(this._settingsIcon),this._root.appendChild(this.postProcessingFunctionInput.root),this._root.appendChild(this._argsElement)}get postProcessingFunction(){return this.postProcessingFunctionInput.value?this.postProcessingFunctionsMap[this.postProcessingFunctionInput.value]:null}async onFunctionChanged(){const t=this.postProcessingFunction;if(n.empty(this._argsElement),this._postProcessingArgs={},!t||t.inputs.length<3)return void(this._settingsIcon.style.display="none");this._settingsIcon.style.display="flex";const e=t.prepare(),r=await e.buildEditor(n.div());for(let n=2;n<t.inputs.length;n++){const o=t.inputs[n],i=this._postProcessingArgs[o.name]||e.inputParams[t.inputs[n].name].value||o.defaultValue;i&&(this._postProcessingArgs[o.name]=i);const s=r.find((t=>t.property.name===o.name));s&&(s.onChanged((()=>{this._postProcessingArgs[o.name]=s.value})),this._argsElement.append(s.root))}}get root(){return this._root}get args(){return this._postProcessingArgs}}const Le="dimensionality-reducer-terminate-event",Re=t=>null==t;class Fe extends Float32Array{}function Ue(t,n){return`${n} (${t.length>4?`${t.length} columns`:t.map((t=>t.name)).join(", ")})`}var De;!function(t){t.NO_DATAFRAME="No dataframe is opened",t.NO_MISSING_VALUES="No missing values",t.ONE_AVAILABLE_FEATURE="Not enough of feature columns to apply imputation using the KNN method",t.ONE_FEATURE_SELECTED="Imputation cannot be applied to",t.UNSUPPORTED_COLUMN_TYPE="Unsupported column type",t.UNSUPPORTED_IMPUTATION_STRATEGY="Unsupported imputation strategy",t.KNN_CANNOT_BE_APPLIED="KNN imputer cannot be applied: no columns to be used as features",t.KNN_NO_TARGET_COLUMNS="KNN imputer cannot be applied: no columns with missing values",t.KNN_NO_FEATURE_COLUMNS="KNN imputer cannot be applied: no feature columns",t.KNN_NOT_ENOUGH_OF_ROWS="KNN imputer cannot be applied: not enough of rows",t.KNN_IMPOSSIBLE_IMPUTATION="Imputation is impossible, no features can be used",t.INCORRECT_NEIGHBORS="Incorrect number of neighbors",t.KNN_FAILS="KNN IMPUTATION FAILS",t.CORE_ISSUE="Core issue",t.FAILED_TO_IMPUTE="Failed to impute",t.UNSUPPORTED_FILL_VALUE_TYPE="Unsupported fill value type",t.EMPTY_COLUMN="Column contains just null values",t.FAILS_TO_PREDICT_IMPUTATION_FAILS="Failed to predict imputation fails",t.WRONG_PREDICTIONS="wrong evaluation of KNN imputation fails"}(De||(De={}));const ke="copy";var Be;!function(t){t.KNN_IMPUTER="Impute",t.TABLE="Table",t.IN_PLACE="In-place",t.COLUMNS="Impute",t.FEATURES="Using",t.CANCEL="CANCEL",t.RUN="RUN",t.OK="OK",t.NEIGHBORS="Neighbors",t.DISTANCE="Distance",t.FILL="Fill",t.MARK="Mark",t.SIMPLE_IMPUTER="Simple impute",t.SETTINGS="Settings",t.KEEP_EMPTY="Keep empty"}(Be||(Be={}));const Ve="/help/transform/missing-values-imputation";var Ge;!function(t){t.TARGET="Columns with missing values that must be filled",t.FEATURES="Columns with features to be used for determining the 'nearest' elements in the KNN method",t.IN_PLACE="Defines whether to use in-place imputation or add a new column without missing values",t.METRIC="Type of metric between the feature values",t.WEIGHT="Weight",t.NEIGHBORS="Neighbors count used in the KNN method",t.DISTANCE="Type of distance between elements with the specified features",t.METRIC_SETTINGS="Show additional options",t.FILL_FAILED_ITEMS="Impute missing values using a simple approach: mean, median or most frequent",t.MARK_FAILED_ITEMS="Mark missing values cells with a color",t.FILL_VALUE="Fill value",t.IMPUTATION_SETTINGS="Simple imputation settings",t.KEEP_EMPTY="Defines whether to keep empty missing values failed to be imputed OR fill them using simple imputation"}(Ge||(Ge={}));const qe=[o.COLUMN_TYPE.INT,o.COLUMN_TYPE.FLOAT,o.COLUMN_TYPE.STRING,o.COLUMN_TYPE.DATE_TIME,o.COLUMN_TYPE.QNUM];function We(t){switch(t.type){case o.COLUMN_TYPE.INT:return o.INT_NULL;case o.COLUMN_TYPE.FLOAT:case o.COLUMN_TYPE.QNUM:case o.COLUMN_TYPE.DATE_TIME:return o.FLOAT_NULL;case o.COLUMN_TYPE.STRING:return t.max;default:throw new Error(De.UNSUPPORTED_COLUMN_TYPE)}}var Ye,He,$e;!function(t){t.ONE_HOT="One-hot",t.DIFFERENCE="Difference"}(Ye||(Ye={})),function(t){t.EUCLIDEAN="Euclidean",t.MANHATTAN="Manhattan"}(He||(He={})),function(t){t[t.WEIGHT=1]="WEIGHT",t[t.NEIGHBORS=4]="NEIGHBORS",t[t.IN_PLACE=1]="IN_PLACE",t[t.SELECTED=1]="SELECTED",t[t.KEEP_EMPTY=0]="KEEP_EMPTY"}($e||($e={}));const ze=1;function je(t,n,e){for(const t of n)if(!e.has(t))return!1;for(const r of t){const t=e.get(r);if(void 0===t)throw new Error(De.FAILS_TO_PREDICT_IMPUTATION_FAILS);for(const r of t){let t=!0;for(const o of n){const n=e.get(o);if(void 0===n)throw new Error(De.FAILS_TO_PREDICT_IMPUTATION_FAILS);if(!n.includes(r)){t=!1;break}}if(t)return!0}}return!1}function Ke(){let e=t.shell.t;if(null===e)return void t.shell.warning(De.NO_DATAFRAME);const r=[],i=[],s=[];e.columns.toList().filter((t=>qe.includes(t.type))).forEach((t=>{s.push(t.name),t.stats.missingValueCount>0&&(r.push(t),i.push(t.name))}));const a=function(t){const n=new Map;for(const e of t){if(!qe.includes(e.type))throw new Error(De.UNSUPPORTED_COLUMN_TYPE);if(0===e.stats.missingValueCount)continue;const t=[],r=We(e);e.getRawData().forEach(((n,e)=>{n===r&&t.push(e)})),n.set(e.name,t)}return n}(r);if(0===r.length)return void t.shell.info(De.NO_MISSING_VALUES);if(1===s.length)return void t.shell.error(De.ONE_AVAILABLE_FEATURE);let u=$e.IN_PLACE>0;const l=n.boolInput(Be.IN_PLACE,u,(()=>{var t;u=null!==(t=l.value)&&void 0!==t&&t}));l.setTooltip(Ge.IN_PLACE);let c=$e.KEEP_EMPTY>0;const f=n.boolInput(Be.KEEP_EMPTY,c,(()=>{var t;c=null!==(t=f.value)&&void 0!==t&&t}));f.setTooltip(Ge.KEEP_EMPTY);let h=$e.NEIGHBORS;const m=n.intInput(Be.NEIGHBORS,h,(()=>{const t=m.value;null===t?m.value=h:t>=ze?h=t:m.value=h}));m.setTooltip(Ge.NEIGHBORS);let d=He.EUCLIDEAN;const p=n.choiceInput(Be.DISTANCE,d,[He.EUCLIDEAN,He.MANHATTAN],(()=>{var t;return d=null!==(t=p.value)&&void 0!==t?t:He.EUCLIDEAN}));p.setTooltip(Ge.DISTANCE);let g=r.map((t=>t.name));const v=n.columnsInput(Be.COLUMNS,e,(()=>{g=v.value.map((t=>t.name)),A()}),{available:i,checked:i});v.setTooltip(Ge.TARGET);let y=s;const w=n.columnsInput(Be.FEATURES,e,(()=>{y=w.value.map((t=>t.name)),y.length>0?(A(),I.forEach(((t,n)=>t.hidden=!y.includes(n)))):E()}),{available:s,checked:s});w.setTooltip(Ge.FEATURES);const E=()=>{N.getButton(Be.RUN).disabled=!0,l.root.hidden=!0,f.root.hidden=!0,m.root.hidden=!0,S.hidden=!0,C.hidden=!0},A=()=>{N.getButton(Be.RUN).disabled=!1,S.hidden=!1,l.root.hidden=!1,m.root.hidden=!1,p.root.hidden=!1,f.root.hidden=!je(g,y,a),1===y.length&&g.forEach((n=>{y[0]===n&&(E(),t.shell.warning(`${De.ONE_FEATURE_SELECTED} the column '${n}'`))}))},_=new Map,I=new Map,C=n.divV([]);C.style.overflow="auto",s.forEach((t=>{const r=function(t){switch(t){case o.COLUMN_TYPE.STRING:case o.COLUMN_TYPE.DATE_TIME:return{defaultWeight:$e.WEIGHT,defaultMetric:Ye.ONE_HOT,availableMetrics:[Ye.ONE_HOT]};case o.COLUMN_TYPE.INT:case o.COLUMN_TYPE.FLOAT:case o.COLUMN_TYPE.QNUM:return{defaultWeight:$e.WEIGHT,defaultMetric:Ye.DIFFERENCE,availableMetrics:[Ye.DIFFERENCE,Ye.ONE_HOT]};default:throw new Error(De.UNSUPPORTED_COLUMN_TYPE)}}(e.col(t).type);_.set(t,{weight:r.defaultWeight,type:r.defaultMetric});const i=n.choiceInput(t,r.defaultMetric,r.availableMetrics,(()=>{var n,e;const o=null!==(n=_.get(t))&&void 0!==n?n:{weight:r.defaultWeight,type:r.defaultMetric};o.type=null!==(e=i.value)&&void 0!==e?e:r.defaultMetric,_.set(t,o)}));i.root.style.width="50%",i.setTooltip(Ge.METRIC),i.root.hidden=!0;const s=o.Property.fromOptions({name:t,inputType:"Float",min:0,max:10,showSlider:!0,step:1}),a=n.input.forProperty(s);a.value=r.defaultWeight,a.onChanged((()=>{var n,e;const o=null!==(n=_.get(t))&&void 0!==n?n:{weight:r.defaultWeight,type:r.defaultMetric};o.weight=null!==(e=a.value)&&void 0!==e?e:r.defaultWeight,_.set(t,o)})),a.setTooltip(Ge.WEIGHT);const u=n.divH([i.root,a.root]);I.set(t,u),C.append(u)}));const N=n.dialog({title:Be.KNN_IMPUTER,helpUrl:Ve});t.shell.v.root.appendChild(N.root),C.hidden=!0,f.root.hidden=!je(g,y,a);const b=n.icons.settings((()=>{C.hidden=!C.hidden}),Ge.METRIC_SETTINGS),S=n.divH([p.root,b]);N.addButton(Be.RUN,(()=>{N.close(),s.filter((t=>!y.includes(t))).forEach((t=>_.delete(t)));try{const n=function(n,e,r,i,s,a,u){if(a<ze)throw new Error(De.INCORRECT_NEIGHBORS);if(n.rowCount<2)throw new Error(De.KNN_NOT_ENOUGH_OF_ROWS);if(0===e.length)throw new Error(De.KNN_NO_TARGET_COLUMNS);if(0===r.size)throw new Error(De.KNN_NO_FEATURE_COLUMNS);1===r.size&&e.forEach((t=>{if(r.has(t))throw new Error(`${De.KNN_NO_FEATURE_COLUMNS} can be used for the column '${t}'`)})),e.forEach((t=>{if(!i.has(t))throw new Error(`${De.KNN_FAILS}: ${De.WRONG_PREDICTIONS}`)}));const l=n.columns;e.forEach((t=>{if(!qe.includes(l.byName(t).type))throw new Error(De.UNSUPPORTED_COLUMN_TYPE)})),r.forEach(((t,e)=>{if(!qe.includes(n.getCol(e).type))throw new Error(De.UNSUPPORTED_COLUMN_TYPE)}));const c=new Map;return e.forEach((e=>{const f=l.byName(e),h=We(f),m=f.length,d=f.getRawData(),p=new Uint16Array(f.categories.length),g=[],v=[],y=[],w=[];r.forEach(((t,n)=>{if(n!==f.name){const e=l.byName(n);switch(g.push(e.getRawData()),v.push(We(e)),t.type){case Ye.DIFFERENCE:y.push(((n,e)=>t.weight*Math.abs(n-e)));break;case Ye.ONE_HOT:y.push(((n,e)=>t.weight*(n===e?0:1)))}}}));const E=g.length,A=new Uint32Array(g.length),_=new Float32Array(g.length);let I=0;const C=new Array(a);let N=0,b=0,S=0,M=0,T=0;const O=(t,n)=>{A.forEach(((e,r)=>{_[r]=y[e](g[e][t],g[e][n])}))},P=s===He.EUCLIDEAN?()=>{let t=0;for(let n=0;n<I;++n)t+=_[n]*_[n];return Math.sqrt(t)}:()=>{let t=0;for(let n=0;n<I;++n)t+=Math.abs(_[n]);return Math.sqrt(t)},x=t=>{if(d[t]===h)return!1;for(let n=0;n<I;++n)if(g[A[n]][t]===v[A[n]])return!1;return!0},L=t=>{if((t=>{I=0;for(let n=0;n<E;++n)g[n][t]!==v[n]&&(A[I]=n,++I)})(t),0===I)throw new Error(`${De.KNN_IMPOSSIBLE_IMPUTATION}: the column "${f.name}", row ${t+1}`);N=0;for(let n=0;n<m;++n)if(x(n)&&n!==t){O(t,n);const e=P();if(N<a)C[N]={index:n,dist:e},++N;else{b=0,S=C[0].dist;for(let t=1;t<N;++t)S<C[t].dist&&(S=C[t].dist,b=t);e<S&&(C[b]={index:n,dist:e})}}if(0===N)throw new Error(`${De.KNN_IMPOSSIBLE_IMPUTATION}: the column "${f.name}", row ${t+1}`);if(f.type===o.COLUMN_TYPE.STRING)return(()=>{p.forEach(((t,n,e)=>e[n]=0));let t=0;for(t=0;t<N;++t)++p[d[C[t].index]];let n=p[0],e=0;return p.forEach(((t,r)=>{t>n&&(n=t,e=r)})),e})();M=0;for(let t=0;t<N;++t)M+=d[C[t].index];return T=M/N,f.type===o.COLUMN_TYPE.INT?Math.round(T):T};if(u){for(const n of i.get(e))try{d[n]=L(n)}catch(e){w.push(n),e instanceof Error||t.shell.error(De.CORE_ISSUE)}w.length>0&&c.set(e,w),f.set(0,f.get(0))}else{const r=f.clone();let o=1,s=`${e}(${ke})`;for(;n.columns.contains(s);)s=`${e}(${ke} ${o})`,++o;r.name=s;const a=r.getRawData();for(const n of i.get(e))try{a[n]=L(n)}catch(e){w.push(n),e instanceof Error||t.shell.error(De.CORE_ISSUE)}w.length>0&&c.set(s,w),r.set(0,r.get(0)),n.columns.add(r)}})),c}(e,g,_,a,d,h,u);c||function(t,n){n.forEach(((n,e)=>{const r=t.col(e);if(null!==r){if(!qe.includes(r.type))throw new Error(De.UNSUPPORTED_COLUMN_TYPE);const t=function(t){switch(t.type){case o.COLUMN_TYPE.STRING:case o.COLUMN_TYPE.DATE_TIME:return function(t){const n=We(t),e=t.getRawData(),r=e.length;for(let o=0;o<r;++o)if(e[o]!==n)return t.get(o);throw new Error(De.EMPTY_COLUMN)}(t);case o.COLUMN_TYPE.INT:case o.COLUMN_TYPE.FLOAT:case o.COLUMN_TYPE.QNUM:return t.stats.avg;default:throw new Error(De.UNSUPPORTED_COLUMN_TYPE)}}(r);n.forEach((n=>r.set(n,t)))}}))}(e,n)}catch(n){n instanceof Error?t.shell.error(`${De.KNN_FAILS}: ${n.message}`):t.shell.error(`${De.KNN_FAILS}: ${De.CORE_ISSUE}`)}})).add(v).add(w).add(S).add(C).add(m).add(l).add(f).show()}class Xe extends Te{constructor(t={}){super(t),this.similarityThresholdInput=n.intInput("Similarity threshold",80),this.maxIterationsInput=n.intInput("Max iterations",5),this.useWebGPUInput=n.boolInput("Use WebGPU",!1),Qn().then((t=>{t?this.useWebGPUInput.setTooltip(`Use webGPU for MCL calculation (${t})`):(this.useWebGPUInput.value=!1,this.useWebGPUInput.root.style.display="none")}))}getEditor(){return n.div([this.tableInput.root,this.columnsInputRoot,this.columnParamsEditorRoot,this.aggregationMethodInput.root,this.similarityThresholdInput.root,this.maxIterationsInput.root,this.useWebGPUInput.root],{style:{minWidth:"420px"},classes:"ui-form"})}get params(){return{table:this.tableInput.value,columns:this.columnsInput.value,methodName:this.methodInput.value,preprocessingFunctions:this.columnOptEditors.map((t=>t.preProcessingFunction)),distanceMetrics:this.columnOptEditors.map((t=>t.similarityMetricInput.value)),weights:this.columnOptEditors.map((t=>t.weight)),preprocessingFuncArgs:this.columnOptEditors.map((t=>t.preprocessingFunctionSettings)),aggreaggregationMethod:this.aggregationMethodInput.value,threshold:this.similarityThresholdInput.value,maxIterations:this.maxIterationsInput.value??5,useWebGPU:this.useWebGPUInput.value??!1}}}class Qe{constructor(t,n=!1){if(this._length=0,this._version=0,this._updateLevel=0,this._selectedCount=0,this._selectedCountVersion=-1,this._selectedIndexesVersion=-1,this._versionedName="",this._versionedNameVersion=-1,this.SHRINK_THRESHOLD=256,"number"==typeof t){const e=t,r=Qe._createBuffer(e);if(n)for(let t=0;t<r.length;t++)r[t]=-1;this._data=r,this._length=e}else{if(!(t instanceof Uint32Array))throw new Error("Invalid constructor");this._data=t,this._length=n}}getRawData(){return this._data}assureGoez(t,n){if(t<0)throw new Error(`${n} should be greater than zero`)}assureInRange(t,n,e,r){if(t<n||t>e)throw new Error(`Argument ${r} (${t}) out of range (${n}, ${e})`)}copy(t,n,e){for(let r=0;r<e;r++)n[r]=t[r]}copyFrom(t){if(this._length!=t._length)throw new Error(`Lengths differ (${this._length} != ${t._length})`);this.copy(t._data,this._data,this.lengthInInts),this._version++}get length(){return this._length}get buffer(){return this._data}set buffer(t){this._data=t,this._version++}get version(){return this._version}set version(t){this._version=t}incrementVersion(t=!0){this._version++}get lengthInInts(){return Math.floor((this._length+31)/32)}get versionedName(){return this._version==this._versionedNameVersion?this._versionedName:""}set versionedName(t){this._versionedName=t,this._versionedNameVersion=this._version}get self(){return this}setLength(t){if(t<0)throw new Error("should be >= 0");if(t==this._length)return;const n=Math.floor((t+31)/32);if(n>this._data.length||n+this.SHRINK_THRESHOLD<this._data.length){const t=new Uint32Array(n);this.copy(this._data,t,n>this._data.length?this._data.length:n),this._data=t}t>this._length&&(this._length%32>0&&(this._data[this.lengthInInts-1]&=(1<<(this._length%32&31))-1),this._data.fill(0,this.lengthInInts,n)),this._length=t,this._version++}static fromAnd(t,n){if(t._length!=n._length)throw new Error(`Lengths differ (${t._length} != ${n._length})`);const e=new Qe(t._length);e._length=t._length,e._data=Qe._createBuffer(e._length),e._version=0;const r=t.lengthInInts;for(let o=0;o<r;o++)e._data[o]=t._data[o]&n._data[o];return e}static _createBuffer(t){return new Uint32Array(Math.floor((t+31)/32))}static fromValues(t){const n=new Qe(t.length);n._version=0;for(let e=0;e<n._length;e++)t[e]&&(n._data[Math.floor(e/32)]|=1<<(e%32&31));return n}static fromSeq(t,n){const e=new Qe(t);for(let r=0;r<t;++r)e.setBit(r,n(r));return e._version=0,e}static fromString(t){return Qe.fromSeq(t.length,(n=>"1"==t.charAt(n)))}static fromUint32Array(t,n){const e=new Qe(t);return e._data=n,e}static fromBytes(t){const n=t.length,e=new Qe(8*n);e._data=new Uint32Array(Math.floor((n+3)/4)),e._length=8*n;let r=0,o=0;for(;n-o>=4;)e._data[r++]=255&t[o]|(255&t[o+1])<<8|(255&t[o+2])<<16|(255&t[o+3])<<24,o+=4;return n-o==3&&(e._data[r]=(255&t[o+2])<<16),n-o==2&&(e._data[r]|=(255&t[o+1])<<8),n-o==1&&(e._data[r]|=255&t[o]),e._version=0,e}toString(){return`${this._length} bits, ${this.countBits(!0)} set`}equals(t){if(this==t)return!0;if(null==t)return!1;if(this._length!=t._length)return!1;if(0==this._length)return!0;for(let n=0;n<this._data.length-1;n++)if(this._data[n]!=t._data[n])return!1;for(let n=8*(this._data.length-1);n<this._length;n++)if(this.getBit(n)!=t.getBit(n))return!1;return!0}clone(){const t=new Qe(0,!1);return t._data=Uint32Array.from(this._data),t._length=this._length,t._version=this._version,t}init(t,n){this.setAll(!1,!1);for(let n=0;n<this._length;n++)t(n)&&(this._data[Math.floor(n/32)]|=1<<(n%32&31));return this.incrementVersion(n),this}invert(t=!0){for(let t=0;t<this._data.length;t++)this._data[t]^=-1;this.incrementVersion(t)}setAll(t,n=!1){const e=t?-1:0,r=this.lengthInInts;for(let t=0;t<r;t++)this._data[t]=e;this.incrementVersion(n)}setIndexes(t,n=!0,e=!0,r=!0){e&&this.setAll(!n,!1);for(const e of t)this.setFast(e,n);this.incrementVersion(r)}everyIndex(t,n=!0){for(const e of t)if(this.getBit(e)!=n)return!1;return!0}anyIndex(t,n=!0){for(const e of t)if(this.getBit(e)==n)return!0;return!1}setWhere(t,n=!0,e=!0,r=!0,o=!0){if(e&&o&&this.setAll(!n,!1),o)for(let e=0;e<this._length;e++)t(e)&&this.setFast(e,n);else for(let e=0;e<this._length;e++)this.setFast(e,t(e)?n:!n);this.incrementVersion(r)}getRange(t,n){this.assureInRange(t,0,this._length-1,"from"),this.assureInRange(n,0,this._length,"to");const e=[];for(let r=t;r<n;++r)e.push(this.getBit(r));return Qe.fromValues(e)}getRangeAsList(t,n){this.assureInRange(t,0,this._length-1,"from"),this.assureInRange(n,0,this._length,"to");const e=[];for(let r=t;r<n;++r)e.push(this.getBit(r));return e}setRange(t,n,e,r=!0){this.assureInRange(t,0,this._length-1,"from"),this.assureInRange(n,0,this._length-1,"to");const o=Math.min(t,n),i=Math.max(t,n);if(e)for(let t=o;t<=i;t++)this.setTrue(t);else for(let t=o;t<=i;t++)this.setFalse(t);return this.incrementVersion(r),this}setRandom(t,n,e=!0){if(t<0||t>this._length)throw new Error("n must be >= 0 && <= Count");t>this._length/2&&this.setRandom(this._length-t,!n),this.setAll(!n);for(let e=0;e<t;){const t=Math.floor(Math.random()*this._length);this.getBit(t)!=n&&(this.setFast(t,n),e++)}this.incrementVersion(e)}and(t,n=!0){if(this._length!=t._length)throw new Error("Array lengths differ.");for(let n=0,e=this.lengthInInts;n<e;n++)this._data[n]&=t._data[n];return this.incrementVersion(n),this}andNot(t,n=!0){if(this._length!=t._length)throw new Error("Array lengths differ.");const e=this.lengthInInts;for(let n=0;n<e;n++)this._data[n]&=~t._data[n];return this.incrementVersion(n),this}notAnd(t,n=!0){if(this._length!=t._length)throw new Error("Array lengths differ.");for(let n=0,e=this.lengthInInts;n<e;n++)this._data[n]=~this._data[n]&t._data[n];return this.incrementVersion(n),this}not(t=!0){for(let t=0,n=this.lengthInInts;t<n;t++)this._data[t]=~this._data[t];return this.incrementVersion(t),this}or(t,n=!0){if(this._length!=t._length)throw new Error("Array lengths differ.");for(let n=0,e=this.lengthInInts;n<e;n++)this._data[n]|=t._data[n];return this.incrementVersion(n),this}xor(t,n=!0){if(this._length!=t._length)throw new Error("Array lengths differ.");for(let n=0,e=this.lengthInInts;n<e;n++)this._data[n]^=t._data[n];return this.incrementVersion(n),this}insertAt(t,n,e=!1){if(this.assureInRange(t,0,this._length,"pos"),0==n)return;const r=this._length;this.setLength(this._length+n);for(let e=r-1;e>=t;e--)this.setBit(e+n,this.getBit(e));for(let r=t;r<t+n;r++)this.setBit(r,e)}removeAt(t,n=1){if(n<0)throw new Error("n cannot be negative");if(this.assureInRange(t,0,this._length-n,"pos"),this.contains(!0))for(let e=t;e<this._length-n;e++)this.setBit(e,this.getBit(e+n));this.setLength(this._length-n)}removeByMask(t,n=!0){if(this._length!=t.length)throw new Error("length != mask.length");if(t==this)this.setLength(t.countBits(!n)),this.setAll(!n);else{let e=0;for(let r=-1;-1!=(r=t.findNext(r,!n));)this.setFast(e++,this.getBit(r));this._length=e,this._version++}return this}getBit(t){return 0!=(this._data[Math.floor(t/32)]&1<<(31&t))}setBit(t,n,e=!0){this.setFast(t,n),this._version++}setFast(t,n){n?this._data[Math.floor(t/32)]|=1<<(31&t):this._data[Math.floor(t/32)]&=~(1<<(31&t))}setTrue(t){this._data[Math.floor(t/32)]|=1<<(31&t)}setFalse(t){this._data[Math.floor(t/32)]&=~(1<<(31&t))}trueCount(){return this.countBits(!0)}falseCount(){return this.countBits(!1)}countBits(t){if(0==this._length)return 0;if(this._selectedCountVersion!=this._version){this._selectedCount=0;const t=this.lengthInInts;let n=0;for(;n<t-1;n++)for(let t=this._data[n];0!=t;t>>>=8)this._selectedCount+=Qe._onBitCount[255&t];let e=this._data[n];const r=31&this._length;for(0!=r&&(e&=~(4294967295<<r));0!=e;e>>>=8)this._selectedCount+=Qe._onBitCount[255&e];this._selectedCountVersion=this._version}return t?this._selectedCount:this._length-this._selectedCount}countWhere(t){let n=0;if(this.trueCount()==this._length)for(let e=0;e<this._length;e++)n+=t(e)?1:0;else for(let e=-1;-1!=(e=this.findNext(e,!0));)n+=t(e)?1:0;return n}andWithCountBits(t,n){if(0==this._length)return 0;let e=0;const r=this.lengthInInts;let o=0;for(;o<r-1;o++)for(let n=this._data[o]&t._data[o];0!=n;n>>>=8)e+=Qe._onBitCount[255&n];let i=this._data[o]&t._data[o];const s=31&this._length;for(0!=s&&(i&=~(4294967295<<s));0!=i;i>>>=8)e+=Qe._onBitCount[255&i];return n?e:this._length-e}clear(){this.setLength(0)}contains(t){return this.findNext(-1,t)>=0}get allTrue(){return this.countBits(!0)==this._length}get allFalse(){return this.countBits(!1)==this._length}get anyTrue(){return this.countBits(!0)>0}get anyFalse(){return this.countBits(!1)>0}findNext(t,n=!0){if(this.assureInRange(t,-1,this._length,"index"),t>=this._length-1)return-1;let e=31&(t=t<0?0:t+1);const r=this.lengthInInts;for(let o=Math.floor(t/32);o<r;o++){let r=n?this._data[o]:~this._data[o];if(0!=e)r&=4294967295<<e&4294967295,e=0;else if(!n&&-4294967296==r)continue;for(let n=0;0!=r;n+=8,r>>>=8){const e=Qe._firstOnBit[255&r];if(e>=0)return(t=e+32*o+n)>=this._length?-1:t}}return-1}findPrev(t,n=!0){if(0==t)return-1;this.assureInRange(t,-1,this._length,"index");let e=1+(t=t<0?this._length-1:t-1)&31;for(let r=Math.floor(t/32);r>=0;r--){let t=n?this._data[r]:~this._data[r];0!=e&&(t&=~(4294967295<<e),e=0);for(let n=24;0!=t;n-=8,t<<=8){const e=Qe._lastOnBit[t>>>24];if(e>=0)return e+32*r+n}}return-1}}var Ze;Qe._onBitCount=Int8Array.from([0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,1,2,2,3,2,3,3,4,2,3,3,4,3,4,4,5,1,2,2,3,2,3,3,4,2,3,3,4,3,4,4,5,2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6,1,2,2,3,2,3,3,4,2,3,3,4,3,4,4,5,2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6,2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6,3,4,4,5,4,5,5,6,4,5,5,6,5,6,6,7,1,2,2,3,2,3,3,4,2,3,3,4,3,4,4,5,2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6,2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6,3,4,4,5,4,5,5,6,4,5,5,6,5,6,6,7,2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6,3,4,4,5,4,5,5,6,4,5,5,6,5,6,6,7,3,4,4,5,4,5,5,6,4,5,5,6,5,6,6,7,4,5,5,6,5,6,6,7,5,6,6,7,6,7,7,8]),Qe._firstOnBit=Int8Array.from([-1,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,6,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,7,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,6,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0]),Qe._lastOnBit=Int8Array.from([-1,0,1,1,2,2,2,2,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7]),function(t){t.none="none",t.bold="bold",t.dashed="dashed"}(Ze||(Ze={}));class Je{get currentLineId(){return this._currentLineIdx}set currentLineId(t){t!==this._currentLineIdx&&(this._currentLineIdx=t,this.sp.render(this.ctx))}set linesToRender(t){this.updateLines(t),this.sp.render(this.ctx)}set linesVisibility(t){this.visibility=t,this.sp.render(this.ctx)}constructor(t,n,e,r,o=Ze.none){var i;this._currentLineIdx=-1,this.lineClicked=new he.Subject,this.lineHover=new he.Subject,this.mouseOverLineId=-1,this.arrowWidth=15,this.sp=t,this.xAxisCol=this.sp.dataFrame.columns.byName(n),this.yAxisCol=this.sp.dataFrame.columns.byName(e),this.canvas=this.sp.getInfo().canvas,this.ctx=this.canvas.getContext("2d"),this.currentLineStyle=o,this.updateLines(r),this.visibility=null!==(i=r.visibility)&&void 0!==i?i:new Qe(this.lines.from.length),r.visibility||this.visibility.setAll(!0,!1),r.arrowSize&&(this.arrowWidth=r.arrowSize),this.canvas.onmousedown=t=>{-1!==this.mouseOverLineId&&this.lineClicked.next({x:t.clientX,y:t.clientY,id:this.mouseOverLineId,event:t})},this.canvas.onmousemove=t=>{this.mouseOverLineId=this.checkCoordsOnLine(t.offsetX,t.offsetY),-1!==this.mouseOverLineId&&this.lineHover.next({x:t.clientX,y:t.clientY,id:this.mouseOverLineId,event:t})},t.onEvent("d4-before-draw-scene").subscribe((t=>{this.renderLines()}))}updateLines(t){this.lines=t,this.multipleLinesCounts=new Uint8Array(this.lines.from.length),t.skipMultiLineCalculation?this.multipleLinesCounts.fill(0):this.createMultiLinesIndices()}renderLines(){var t,n,e,r,o,i,s,a,u,l,c,f,h;const m=this.sp.getOptions().look,d=this.lines.colors||this.lines.width||this.lines.opacities||this.lines.drawArrowsArr;d||(this.ctx.lineWidth=null!==(t=this.lines.width)&&void 0!==t?t:1,this.ctx.strokeStyle=`rgba(${null!==(n=this.lines.color)&&void 0!==n?n:"0,128,0"},${null!==(e=this.lines.opacity)&&void 0!==e?e:1})`);const p=m.sizeColumnName?this.sp.dataFrame.col(m.sizeColumnName):null,g=this.sp.dataFrame.filter;for(let t=0;t<this.lines.from.length;t++)if(g.get(this.lines.from[t])&&g.get(this.lines.to[t])&&this.visibility.getBit(t)){let n=0;const{sizeFrom:e,sizeTo:g}=this.getMarkersSizes(m,p,t),v=this.sp.worldToScreen(this.xAxisCol.get(this.lines.from[t]),this.yAxisCol.get(this.lines.from[t]));let y=null==v?void 0:v.x,w=null==v?void 0:v.y;const E=this.sp.worldToScreen(this.xAxisCol.get(this.lines.to[t]),this.yAxisCol.get(this.lines.to[t]));let A=null==E?void 0:E.x,_=null==E?void 0:E.y;const I=Math.min(this.sp.viewBox.width,this.sp.viewBox.height);if(this.ctx.beginPath(),y&&w&&A&&_&&Math.hypot(A-y,_-w)/I>.01){if(d){const n=(null===(r=this.lines.colors)||void 0===r?void 0:r[t])?null===(o=this.lines.colors)||void 0===o?void 0:o[t]:"0,128,0",e=(null===(i=this.lines.opacities)||void 0===i?void 0:i[t])?null===(s=this.lines.opacities)||void 0===s?void 0:s[t]:1;this.ctx.strokeStyle=`rgba(${n},${e})`,this.ctx.lineWidth=(null===(a=this.lines.widths)||void 0===a?void 0:a[t])?null===(u=this.lines.widths)||void 0===u?void 0:u[t]:1}t===this._currentLineIdx&&this.toggleCurrentLineStyle(!0);const m=this.multipleLinesCounts[t];let p=null;if(m){n=this.getLineLength(y,w,A,_);const r=this.getPointOnDistance(y,w,A,_,g,n),o=this.getPointOnDistance(A,_,y,w,e,n);y=r.x,w=r.y,A=o.x,_=o.y,p=this.lines.from[t]>this.lines.to[t]?this.findControlPoint(m,y,w,A,_,t):this.findControlPoint(m,A,_,y,w,t),this.ctx.moveTo(y,w),this.ctx.quadraticCurveTo(p.x,p.y,A,_)}else this.ctx.moveTo(y,w),this.ctx.lineTo(A,_);if((null!==(l=this.lines.drawArrows)&&void 0!==l?l:null===(c=this.lines.drawArrowsArr)||void 0===c?void 0:c.getBit(t))&&(n||(n=this.getLineLength(y,w,A,_)),n>this.arrowWidth)){const t=m?null:this.getPointOnDistance(y,w,A,_,g,n),e=m?p.x:y,r=m?p.y:w;this.canvasArrow(this.ctx,null!==(f=null==t?void 0:t.x)&&void 0!==f?f:y,null!==(h=null==t?void 0:t.y)&&void 0!==h?h:w,e,r)}this.ctx.stroke(),this.ctx.closePath(),t===this._currentLineIdx&&this.toggleCurrentLineStyle(!1)}}this.fillLeftBottomRect()}toggleCurrentLineStyle(t){switch(this.currentLineStyle){case Ze.bold:t?this.ctx.lineWidth+=2:this.ctx.lineWidth-=2;break;case Ze.dashed:t?this.ctx.setLineDash([5,5]):this.ctx.setLineDash([]);break;default:return}}getMarkersSizes(t,n,e){let r=3,o=3;return n?(r=(t.markerMinSize+(t.markerMaxSize-t.markerMinSize)*n.scale(this.lines.from[e]))/2,o=(t.markerMinSize+(t.markerMaxSize-t.markerMinSize)*n.scale(this.lines.to[e]))/2):t.markerDefaultSize&&(r=t.markerDefaultSize/2,o=t.markerDefaultSize/2),{sizeFrom:r,sizeTo:o}}fillLeftBottomRect(){const t=new Path2D;t.rect(this.sp.yAxisBox.minX,this.sp.yAxisBox.maxY,this.sp.yAxisBox.width,this.sp.xAxisBox.height),this.ctx.fillStyle="white",this.ctx.beginPath(),this.ctx.fill(t),this.ctx.closePath()}createMultiLinesIndices(){const t=new Qe(this.lines.from.length);t.setAll(!0);for(let n=-1;-1!==(n=t.findNext(n));){const e=n,r=this.lines.from[e],o=this.lines.to[e];let i=1;for(let e=n;-1!==(e=t.findNext(e));){const n=this.lines.from[e],s=this.lines.to[e];(n===r&&s===o||s===r&&n===o)&&(this.multipleLinesCounts[e]=++i,t.setBit(e,!1,!1))}i>1&&(this.multipleLinesCounts[e]=1),t.setBit(n,!1,!1)}}checkCoordsOnLine(t,n){let e=-1,r=null,o=null;const i=this.sp.getOptions().look,s=i.sizeColumnName?this.sp.dataFrame.col(i.sizeColumnName):null,a=this.sp.dataFrame.filter;for(let u=0;u<this.lines.from.length;u++)if(a.get(this.lines.from[u])&&a.get(this.lines.to[u])&&this.visibility.getBit(u)){const{sizeFrom:a,sizeTo:l}=this.getMarkersSizes(i,s,u),c=this.sp.worldToScreen(this.xAxisCol.get(this.lines.from[u]),this.yAxisCol.get(this.lines.from[u])),f=this.sp.worldToScreen(this.xAxisCol.get(this.lines.to[u]),this.yAxisCol.get(this.lines.to[u]));if(this.multipleLinesCounts[u]){const e=this.getLineLength(c.x,c.y,f.x,f.y),r=this.getPointOnDistance(c.x,c.y,f.x,f.y,l,e),i=this.getPointOnDistance(f.x,f.y,null==c?void 0:c.x,null==c?void 0:c.y,a,e),s=this.lines.from[u]>this.lines.to[u]?this.findControlPoint(this.multipleLinesCounts[u],r.x,r.y,i.x,i.y,u):this.findControlPoint(this.multipleLinesCounts[u],i.x,i.y,r.x,r.y,u);o=this.calculateDistToCurveLine(u,t,n,r,i,s)}else o=this.calculateDistToStraightLine(t,n,c,f);(!r&&null!==o&&o<5||r&&null!==o&&o<r)&&(r=o,e=u)}return e}calculateDistToStraightLine(t,n,e,r){const o=Math.min(e.x,r.x),i=Math.max(e.x,r.x),s=Math.min(e.y,r.y),a=Math.max(e.y,r.y);return t>=o-2&&t<=i+2&&n>=s-2&&n<=a+2?this.distToStraightLineSegment(t,n,e,r):null}distToStraightLineSegment(t,n,e,r){const o=(t,n,e,r)=>Math.pow(t-e,2)+Math.pow(n-r,2),i=o(e.x,e.y,r.x,r.y);if(0==i)return o(t,n,e.x,e.y);let s=((t-e.x)*(r.x-e.x)+(n-e.y)*(r.y-e.y))/i;return s=Math.max(0,Math.min(1,s)),o(t,n,e.x+s*(r.x-e.x),e.y+s*(r.y-e.y))}calculateDistToCurveLine(t,n,e,r,o,i){const s=Math.min(r.x,o.x,i.x),a=Math.max(r.x,o.x,i.x),u=Math.min(r.y,o.y,i.y),l=Math.max(r.y,o.y,i.y);if(n>=s-2&&n<=a+2&&e>=u-2&&e<=l+2){const t=a-s,c=l-u;return this.calculateDistToCurveInRect(n,e,r,i,o,t,c)}return null}calculateDistToCurveInRect(t,n,e,r,o,i,s){const a=Math.floor((i+s)/3),u=1/a,l=new Uint32Array(a),c=new Uint32Array(a),f=new Uint32Array(a);let h=null;const m=new Qe(a);for(let i=0;i<l.length;i++){const s=i*u,a=Math.pow(1-s,2)*e.x+2*s*(1-s)*r.x+Math.pow(s,2)*o.x,m=Math.pow(1-s,2)*e.y+2*s*(1-s)*r.y+Math.pow(s,2)*o.y,d=Math.abs(t-a),p=Math.abs(n-m),g=d+p;(!h||h>g)&&(h=g),f[i]=Math.max(d,p),l[i]=a,c[i]=m}for(let t=0;t<l.length;t++)f[t]<h&&m.setBit(t,!0,!1);let d=null;for(let e=-1;-1!==(e=m.findNext(e));){const r=Math.hypot(l[e]-t,c[e]-n);(!d||d>r)&&(d=r)}return d}getLineLength(t,n,e,r){return Math.sqrt(Math.pow(e-t,2)+Math.pow(r-n,2))}getPointOnDistance(t,n,e,r,i,s){const a=e-i*((e-t)/s),u=r-i*((r-n)/s);return new o.Point(a,u)}findControlPoint(t,n,e,r,i,s){const a=n+(r-n)/2,u=e+(i-e)/2;let l=a-n,c=u-e;const f=Math.sqrt(l*l+c*c);l/=f,c/=f;const h=50*Math.ceil(t/2);return t%2==0?new o.Point(a+h/2*c,u-h/2*l):new o.Point(a-h/2*c,u+h/2*l)}canvasArrow(t,n,e,r,o){const i=Math.atan2(r-n,o-e)+Math.PI;t.moveTo(n-this.arrowWidth*Math.sin(i-Math.PI/10),e-this.arrowWidth*Math.cos(i-Math.PI/10)),t.lineTo(n,e),t.lineTo(n-this.arrowWidth*Math.sin(i+Math.PI/10),e-this.arrowWidth*Math.cos(i+Math.PI/10))}}var tr=function(t,n,e,r){return new(e||(e=Promise))((function(o,i){function s(t){try{u(r.next(t))}catch(t){i(t)}}function a(t){try{u(r.throw(t))}catch(t){i(t)}}function u(t){var n;t.done?o(t.value):(n=t.value,n instanceof e?n:new e((function(t){t(n)}))).then(s,a)}u((r=r.apply(t,n||[])).next())}))};const nr=new o.Package;function er(){t.shell.info(nr.webRoot)}function rr(){return tr(this,void 0,void 0,(function*(){yield async function(){await initEDA()}()}))}function or(t,n,e,r,i){return tr(this,void 0,void 0,(function*(){const s=n.getRawData(),a=e.getRawData(),u=yield Kn(s,a,r,i),l=t.columns.getUnusedName("Cluster (DBSCAN)"),c=o.Column.fromInt32Array(l,u);return t.columns.add(c),c}))}function ir(n,r,o,i,s){return tr(this,void 0,void 0,(function*(){const a=yield function(t,n,r,o,i){return Y(this,void 0,void 0,(function*(){W(n,r);const t=o?1:0,s=i?1:0;return yield async function(t,n,r,o,i){return new Promise(((t,s)=>{const a=new Worker(new URL(e.p+e.u(261),e.b));a.postMessage(N(EDA.principalComponentAnalysis.arguments,[n,r,o,i])),a.onmessage=function(n){a.terminate(),t(b(EDA.principalComponentAnalysis,n.data))}}))}(0,n,r,t,s)}))}(0,r,o,i,s);if(function(t,n){for(const t of n.toList())t.name="PC"+t.name}(0,a.columns),null===n.id)t.shell.addTableView(a);else{const t=n.columns;for(const n of a.columns)n.name=t.getUnusedName(n.name),t.add(n)}}))}function sr(n,e,r,i){return tr(this,void 0,void 0,(function*(){const s=n.dataFrame;if(null===s)return;const a=yield or(s,n,e,r,i);s.changeColumnType(a,"string");const u=[n.name,e.name],l=t.shell.tableView(s.name);if(l)for(const t of l.viewers)if(t instanceof o.ScatterPlotViewer&&u.includes(t.props.xColumnName)&&u.includes(t.props.yColumnName))return void(t.props.colorColumnName=a.name)}))}function ar(t,n){const e=t.stats.max-t.stats.min;return{entries:t.toList(),options:{range:e}}}function ur(t,n){return{entries:t.toList(),options:{}}}function lr(){return tr(this,void 0,void 0,(function*(){const r=new Te,i=n.dialog("Dimensionality reduction").add(r.getEditor()).onOK((()=>tr(this,void 0,void 0,(function*(){const i=r.getParams();0!==i.columns.length&&(yield async function(r,i,s,a,u,l,c,f=!0,h=!1,m={preprocessingFuncArgs:[]},d={},p=null,g={}){const v={showXAxis:!1,showYAxis:!1,showXSelector:!1,showYSelector:!1};if(i.length!==a.length||i.length!==l.length||i.length!==u.length||i.length!==m.preprocessingFuncArgs.length)throw new Error("columns, metrics and preprocessing functions, weights and function argumentsmust have the same length");const y=f?t.shell.tableView(r.name)??t.shell.addTableView(r):null,w=async()=>{const w=o.TaskBarProgressIndicator.create(`Initializing ${d.scatterPlotName??"dimensionality reduction"} ...`);let E;try{const A=function(t){const n=["Embed_X","Embed_Y"],e=t.columns.names().filter((t=>t.includes(n[0]))).length+1;return n.map((t=>`${t}_${e}`))}(r);function _(t,e,a){let u=null,l=null;r.columns.names().includes(A[0])?(u=r.columns.byName(A[0]),l=r.columns.byName(A[1])):(u=r.columns.add(o.Column.float(A[0],r.rowCount)),l=r.columns.add(o.Column.float(A[1],r.rowCount)),f&&!E&&(E=y.scatterPlot({...v,x:A[0],y:A[1],title:d.scatterPlotName??Ue(i,s)}))),d[le]&&(E?.root&&n.setUpdateIndicator(E.root,!1),u.init((t=>a[0]?a[0][t]:void 0)),l.init((t=>a[1]?a[1][t]:void 0)));const c=t/e*100;w.update(c,`Running ${d.scatterPlotName??"dimensionality reduction"}... ${c.toFixed(0)}%`)}async function I(){r.columns.add(o.Column.float(A[0],r.rowCount)),r.columns.add(o.Column.float(A[1],r.rowCount));let h=null;f&&(E=y.scatterPlot({...v,x:A[0],y:A[1],title:d.scatterPlotName??Ue(i,s)}),n.setUpdateIndicator(E.root,!0));const p=t.events.onViewerClosed.subscribe((n=>{const e=n.args.viewer;e?.getOptions()?.look?.title&&E?.getOptions()?.look?.title&&e?.getOptions()?.look?.title===E?.getOptions()?.look?.title&&(t.events.fireCustomEvent(Le,{}),p.unsubscribe(),h?.(),w.close())})),g=new Promise((async(n,r)=>{try{h=n;const r=[];for(let t=0;t<l.length;++t){const n=l[t];if(m.distanceFnArgs||(m.distanceFnArgs=[]),n){const e=n.inputs[0].name,o=n.inputs[1].name,{entries:s,options:u}=await n.apply({[e]:i[t],[o]:a[t],...m.preprocessingFuncArgs[t]??{}});r.push({entries:s,options:u}),m.distanceFnArgs.push(u)}else{const n=i[t].toList(),e={};r.push({entries:n,options:e}),m.distanceFnArgs.push(e)}}n(await async function(n,r,o,i,s,a,u){let l=await async function(n,r,o,i,s,a,u){if(!a.distanceFnArgs)throw new Error("options.distanceFnArgs must be defined");if(n.length!==r.length||n.length!==a.distanceFnArgs.length||n.length!==i.length)throw new Error("data, metrics and options and weights must have the same length");return new Promise((function(l,c){const f=new Worker(new URL(e.p+e.u(42),e.b));f.postMessage({columnsData:n,distanceMetrics:r,method:o,options:a,weights:i,aggregationMethod:s});const h=t.events.onCustomEvent(Le).subscribe((()=>{try{f?.terminate()}finally{h.unsubscribe()}}));f.onmessage=({data:{error:t,embedding:n,epochNum:e,epochsLength:r}})=>{Re(e)||Re(r)?(h.unsubscribe(),t?c(t):l(n),setTimeout((()=>f.terminate()),100)):u&&u(e,r,n)}}))}(n,o,r,i,s,a,u);return l=l.map((t=>function(t){const n=t.length;let e=0,r=0;for(let o=0;o<n;++o)e+=t[o],r+=Math.pow(t[o],2);const o=e/n,i=1/Math.sqrt(r/n-Math.pow(o,2));for(let e=0;e<n;++e)t[e]=(t[e]-o)*i;return t}(t))),l}(r.map((t=>t.entries)),s,a,u,c,m,d[ue]?void 0:_))}catch(t){r(t)}})),I=await g;return w.close(),p.unsubscribe(),I}const C=await I();if(h&&C){const N=o.TaskBarProgressIndicator.create("Clustering embeddings ...");try{const b=await Kn(C[0],C[1],m.dbScanEpsilon??.01,m.dbScanMinPts??4),S=r.columns.getUnusedName("Cluster (DBSCAN)");r.columns.addNewString(S).init((t=>b[t].toString())),E&&(E.props.colorColumnName=S)}catch(M){t.shell.error("Clustering embeddings failed"),console.error(M)}finally{N.close()}}if(C){const T=r.columns.byName(A[0]),O=r.columns.byName(A[1]);if(T.init((t=>C[0][t])),O.init((t=>C[1][t])),p)try{const P=p.inputs[0].name,x=p.inputs[1].name;await p.prepare({[P]:T,[x]:O,...g}).call(!0)}catch(L){t.shell.error("Post-processing failed"),console.error(L)}if(E)return n.setUpdateIndicator(E.root,!1),E.helpUrl="/help/compute/sequence-space",E}}catch(R){t.shell.error("Dimensionality reduction failed"),console.error(R),w.close(),E&&n.setUpdateIndicator(E.root,!1)}};return new Promise((async(t,e)=>{try{if(d.fastRowCount&&r.rowCount>d.fastRowCount&&!d[ue])n.dialog().add(n.divText("Analysis might take several minutes. Do you want to continue?")).onOK((async()=>{try{const n=await w();t(n)}catch(t){e(t)}})).onCancel((()=>t(void 0))).show();else{const n=await w();t(n)}}catch(t){e(t)}}))}(i.table,i.columns,i.methodName,i.distanceMetrics,i.weights,i.preprocessingFunctions,i.aggreaggregationMethod,!!i.plotEmbeddings,!!i.clusterEmbeddings,i.options,{fastRowCount:1e4},i.postProcessingFunction,i.postProcessingFunctionArgs))})))).show(),s=()=>{const t=r.columnsInput.value,n=i.getButton("OK");n&&(t&&0!==t.length?n.classList.remove("disabled"):n.classList.add("disabled"))};r.onColumnsChanged.subscribe((()=>{try{s()}catch(t){console.error(t)}})),s()}))}function cr(e){try{const t=new Xe;n.dialog("Markov clustering").add(t.getEditor()).onOK((()=>tr(this,void 0,void 0,(function*(){const n=t.params;return e.func.prepare({df:n.table,cols:n.columns,metrics:n.distanceMetrics,weights:n.weights,aggregationMethod:n.aggreaggregationMethod,preprocessingFuncs:n.preprocessingFunctions,preprocessingFuncArgs:n.preprocessingFuncArgs,threshold:n.threshold,maxIterations:n.maxIterations,useWebGPU:n.useWebGPU}).call(!0)})))).show()}catch(n){const e=n instanceof Error?n.message:n.toString(),r=n instanceof Error?n.stack:void 0;t.shell.error(`Get region editor error: ${e}`),nr.logger.error(e,void 0,r)}}function fr(r,o,i,s,a,u,l,c=80,f=10,h=!1){return tr(this,void 0,void 0,(function*(){const m=yield async function(r,o,i,s,a,u,l,c=80,f=10,h=!1){const m=(t.shell.tableView(r.name)??t.shell.addTableView(r)).scatterPlot({showXAxis:!1,showYAxis:!1,showXSelector:!1,showYSelector:!1,title:"MCL"});n.setUpdateIndicator(m.root,!0);const d=[],p=[];for(let t=0;t<u.length;++t){const n=u[t];if(n){const e=n.inputs[0].name,r=n.inputs[1].name,{entries:s,options:a}=await n.apply({[e]:o[t],[r]:i[t],...l[t]??{}});p.push({entries:s,options:a}),d.push(a??{})}else{const n=o[t].toList(),e={};p.push({entries:n,options:e}),d.push(e)}}const g=function(t,n,r,o,i,s,a=10,u=!1){const l=new Worker(new URL(e.p+e.u(231),e.b));let c;return l.postMessage({data:t,threshold:n,weights:r,aggregationMethod:o,distanceFns:i,distanceFnArgs:s,maxIterations:a,useWebGPU:u}),{promise:new Promise(((t,n)=>{c=t,l.onmessage=n=>{setTimeout((()=>l.terminate()),100),t(n.data.res)},l.onerror=t=>{setTimeout((()=>l.terminate()),100),n(t)}})),terminate:()=>{try{c(null),l.terminate()}catch(t){console.error(t)}}}}(p.map((t=>t.entries)),c,s,a,i,d,f,h),v=t.events.onViewerClosed.subscribe((t=>{t.args.viewer?.props?.title===m.props.title&&m.type===t.args?.viewer?.type&&(v.unsubscribe(),g.terminate())})),y=await g.promise;if(!y)return;const w=r.columns.getUnusedName("Cluster (MCL)"),E=r.columns.getUnusedName("EmbedX (MCL)"),A=r.columns.getUnusedName("EmbedY (MCL)"),_={};y.clusters.forEach((t=>{_[t]||(_[t]=0),_[t]++}));const I=new Uint32Array(y.embedX.length);for(let t=0;t<y.is.length;t++)I[y.is[t]]++,I[y.js[t]]++;const C=r.columns.getUnusedName("Cluster size (MCL)"),N=r.columns.getUnusedName("Connectivity (MCL)"),b=r.columns.addNewFloat(E);b.init((t=>y.embedX[t]));const S=r.columns.addNewFloat(A);S.init((t=>y.embedY[t]));const M=r.columns.addNewString(w);M.init((t=>y.clusters[t].toString()));const T=r.columns.addNewInt(C);T.init((t=>_[y.clusters[t]]));const O=r.columns.addNewInt(N);return O.init((t=>I[t])),m.props.xColumnName=E,m.props.yColumnName=A,m.props.colorColumnName=w,m.props.markerDefaultSize=5,v.unsubscribe(),new Je(m,E,A,{from:y.is,to:y.js,drawArrows:!1,opacity:.3,skipMultiLineCalculation:!0},Ze.none),n.setUpdateIndicator(m.root,!1),{sc:m,embedXCol:b,embedYCol:S,clusterCol:M,clusterCounterCol:T,connectivityCol:O}}(r,o,i,s,a,u,l,c,f,h);return null==m?void 0:m.sc}))}function hr(t,n,e,r,o){return tr(this,void 0,void 0,(function*(){return yield Vn({table:t,features:n,predict:e,components:r,names:o})}))}function mr(){return tr(this,void 0,void 0,(function*(){yield Gn(wn.COMPUTE_COMPONENTS)}))}function dr(){return tr(this,void 0,void 0,(function*(){yield Gn(wn.PERFORM_MVA)}))}function pr(){return tr(this,void 0,void 0,(function*(){!function(){Dn(this,void 0,void 0,(function*(){t.shell.addTableView(o.DataFrame.fromColumns([o.Column.fromStrings("model",["alfaromeo","audi","bmw","chevrolet","dodge1","dodge2","honda1","honda2","isuzu","jaguar","mazda","mercedes","mercury","mitsubishi","nissan1","nissan2","peugot","plymouth","porsche","saab","subaru","toyota1","toyota2","toyota3","toyota4","volkswagen1","volkswagen2","volvo1","volvo2","volvo3"]),o.Column.fromInt32Array("diesel",new Int32Array([0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,1,0,1,1,0,0,0,1])),o.Column.fromInt32Array("turbo",new Int32Array([0,0,0,0,1,0,0,0,0,0,0,1,1,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,1,1])),o.Column.fromInt32Array("two.doors",new Int32Array([1,0,1,0,1,0,1,0,0,0,0,0,1,1,0,1,0,0,1,0,0,1,0,1,0,1,0,0,0,0])),o.Column.fromInt32Array("hatchback",new Int32Array([1,0,0,0,1,1,1,0,0,0,0,0,1,1,0,0,1,0,0,0,0,1,0,1,0,0,0,0,0,0])),o.Column.fromFloat32Array("wheel.base",new Float32Array([94.5,105.80000305175781,101.19999694824219,94.5,93.69999694824219,93.69999694824219,93.69999694824219,96.5,94.30000305175781,113,93.0999984741211,115.5999984741211,102.69999694824219,93.69999694824219,94.5,94.5,93.69999694824219,114.19999694824219,89.5,99.0999984741211,97.19999694824219,95.69999694824219,95.69999694824219,98.4000015258789,102.4000015258789,97.30000305175781,100.4000015258789,104.30000305175781,109.0999984741211,109.0999984741211])),o.Column.fromFloat32Array("length",new Float32Array([171.1999969482422,192.6999969482422,176.8000030517578,158.8000030517578,157.3000030517578,157.3000030517578,150,175.39999389648438,170.6999969482422,199.60000610351562,166.8000030517578,202.60000610351562,178.39999389648438,157.3000030517578,170.1999969482422,165.3000030517578,157.3000030517578,198.89999389648438,168.89999389648438,186.60000610351562,172,158.6999969482422,166.3000030517578,176.1999969482422,175.60000610351562,171.6999969482422,180.1999969482422,188.8000030517578,188.8000030517578,188.8000030517578])),o.Column.fromFloat32Array("width",new Float32Array([65.5,71.4000015258789,64.80000305175781,63.599998474121094,63.79999923706055,63.79999923706055,64,65.19999694824219,61.79999923706055,69.5999984741211,64.19999694824219,71.69999694824219,68,64.4000015258789,63.79999923706055,63.79999923706055,63.79999923706055,68.4000015258789,65,66.5,65.4000015258789,63.599998474121094,64.4000015258789,65.5999984741211,66.5,65.5,66.9000015258789,67.19999694824219,68.80000305175781,68.9000015258789])),o.Column.fromFloat32Array("height",new Float32Array([52.400001525878906,55.70000076293945,54.29999923706055,52,50.79999923706055,50.599998474121094,52.599998474121094,54.099998474121094,53.5,52.79999923706055,54.099998474121094,56.29999923706055,54.79999923706055,50.79999923706055,53.5,54.5,50.599998474121094,58.70000076293945,51.599998474121094,56.099998474121094,52.5,54.5,53,52,54.900001525878906,55.70000076293945,55.099998474121094,56.20000076293945,55.5,55.5])),o.Column.fromInt32Array("curb.weight",new Int32Array([2823,2844,2395,1909,2128,1967,1956,2304,2337,4066,1950,3770,2910,1918,2024,1951,1967,3430,2800,2695,2190,1985,2275,2551,2480,2261,2661,2912,3049,3217])),o.Column.fromInt32Array("eng.size",new Int32Array([152,136,108,90,98,90,92,110,111,258,91,183,140,92,97,97,90,152,194,121,108,92,110,146,110,97,136,141,141,145])),o.Column.fromInt32Array("horsepower",new Int32Array([154,110,101,70,102,68,76,86,78,176,68,123,175,68,69,69,68,95,207,110,82,62,56,116,73,52,110,114,160,106])),o.Column.fromInt32Array("peak.rpm",new Int32Array([5e3,5500,5800,5400,5500,5500,6e3,5800,4800,4750,5e3,4350,5e3,5500,5200,5200,5500,4150,5900,5250,4400,4800,4500,4800,4500,4800,5500,5400,5300,4800])),o.Column.fromInt32Array("symbol",new Int32Array([1,1,2,0,1,1,1,0,0,0,1,-1,1,2,1,1,1,0,3,2,0,1,0,2,-1,2,0,-2,-1,-1])),o.Column.fromInt32Array("city.mpg",new Int32Array([19,19,23,38,24,31,30,27,24,15,31,22,19,37,31,31,31,25,17,21,28,35,34,24,30,37,19,23,19,26])),o.Column.fromInt32Array("highway.mpg",new Int32Array([26,25,29,43,30,38,34,33,29,19,38,25,24,41,37,37,38,25,25,28,33,39,36,30,33,46,24,28,25,27])),o.Column.fromInt32Array("price",new Int32Array([16500,17710,16430,6575,7957,6229,7129,8845,6785,35550,7395,31600,16503,5389,7349,7299,6229,13860,37028,12170,7775,5348,7898,9989,10698,7775,13295,12940,19045,22470]))])),t.shell.windows.help.visible=!0,t.shell.windows.help.showHelp(n.markdown(Rn)),t.shell.windows.showContextPanel=!1,t.shell.windows.showProperties=!1,yield Gn(wn.DEMO)}))}()}))}function gr(t,n,e,r,o,i){return tr(this,void 0,void 0,(function*(){return yield X(Z,[0,0],t,n,e,r,o,i)}))}function vr(t,n,e,r,o,i,s){return tr(this,void 0,void 0,(function*(){return yield X(tt,[n,0],t,e,r,o,i,s)}))}function yr(t,n,e,r){return tr(this,void 0,void 0,(function*(){const o=yield pn({gamma:e,kernel:Z},t,n);return r&&gn(t,o),vn(o)}))}function wr(t,n){return tr(this,void 0,void 0,(function*(){return yield yn(t,n)}))}function Er(t,n,e,r,o){return tr(this,void 0,void 0,(function*(){const i=yield pn({gamma:e,kernel:tt,sigma:r},t,n);return o&&gn(t,i),vn(i)}))}function Ar(t,n){return tr(this,void 0,void 0,(function*(){return yield yn(t,n)}))}function _r(t,n,e,r,o,i){return tr(this,void 0,void 0,(function*(){const s=yield pn({gamma:e,kernel:J,cParam:r,dParam:o},t,n);return i&&gn(t,s),vn(s)}))}function Ir(t,n){return tr(this,void 0,void 0,(function*(){return yield yn(t,n)}))}function Cr(t,n,e,r,o,i){return tr(this,void 0,void 0,(function*(){const s=yield pn({gamma:e,kernel:nt,kappa:r,theta:o},t,n);return i&&gn(t,s),vn(s)}))}function Nr(t,n){return tr(this,void 0,void 0,(function*(){return yield yn(t,n)}))}function br(n,e,r,i,s){!function(n,e,r,i){const s=t.shell.getTableView(n.name);s.addViewer(o.Viewer.boxPlot(o.DataFrame.fromColumns([e,r]))),s.addViewer(o.Viewer.grid(i))}(n,e,r,function(t,n,e=.05,r=!1){Yn(e);const i=new zn(t,n,r,e);if(r){if(!i.areVarsEqual(e))throw new Error(qn.NON_EQUAL_VARIANCES);if(!i.isNormal())throw new Error(qn.NON_NORMAL_DISTRIB)}const s=i.getOneWayAnova(),a=Wn.centralF.inv(1-e,s.dfBn,s.dfWn);return function(t,n,e,r,i){return o.DataFrame.fromColumns([o.Column.fromStrings("Source of variance",["Between groups","Within groups","Total","",r,"",i]),o.Column.fromList(o.COLUMN_TYPE.FLOAT,"Sum of squares",[t.ssBn,t.ssWn,t.ssTot,null,null,null,null]),o.Column.fromList(o.COLUMN_TYPE.INT,"Degrees of freedom",[t.dfBn,t.dfWn,t.dfTot,null,null,null,null]),o.Column.fromList(o.COLUMN_TYPE.FLOAT,"Mean square",[t.msBn,t.msWn,null,null,null,null,null]),o.Column.fromList(o.COLUMN_TYPE.FLOAT,"F-statistics",[t.fStat,null,null,null,null,null,null]),o.Column.fromList(o.COLUMN_TYPE.FLOAT,"p-value",[t.pValue,null,null,null,null,null,null]),o.Column.fromList(o.COLUMN_TYPE.FLOAT,`${n}-critical value`,[e,null,null,null,null,null,null])])}(s,e,a,`THE NULL HYPOTHESIS: the "${t.name}" \n factor does not produce a significant difference in the "${n.name}" feature.`,"Test result: "+(s.fStat>a?"REJECTED.":"FAILED TO REJECT."))}(e,r,i,s))}function Sr(){Ke()}})(),eda=r})();
|
|
2
2
|
//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFDN0MsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFDN0MsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFDN0MsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFDN0MsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFDN0MsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFDN0MsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFDN0MsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFDN0MsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFDN0MsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFDN0MsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFDN0MsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFDN0MsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFDN0MsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFDN0MsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsSUFFakQ2SyxHQUFTc0YsWUFBY25uRCxVQUFVZzNDLEtBQUssRUFDakMsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFDOUMsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFDN0MsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFDN0MsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFDN0MsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFDN0MsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFDN0MsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFDN0MsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFDN0MsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFDN0MsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFDN0MsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFDN0MsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFDN0MsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFDN0MsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFDN0MsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFDN0MsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsSUFFakQ2SyxHQUFTd0YsV0FBYXJuRCxVQUFVZzNDLEtBQUssRUFDaEMsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFDOUMsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFDN0MsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFDN0MsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFDN0MsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFDN0MsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFDN0MsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFDN0MsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFDN0MsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFDN0MsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFDN0MsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFDN0MsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFDN0MsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxF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Y0FBZSxJQUFJSCxXQUFXLENBQUMsS0FBTSxLQUFNLEtBQU0sS0FBTSxLQUFNLEtBQU0sS0FBTSxLQUFNLEtBQU0sS0FBTSxLQUFNLEtBQU0sS0FBTSxLQUFNLEtBQU0sS0FBTSxLQUFNLEtBQU0sS0FBTSxLQUFNLEtBQU0sS0FBTSxLQUFNLEtBQU0sS0FBTSxLQUFNLEtBQU0sS0FBTSxLQUFNLFFBQ3RPLHdCQUF5QixXQUFZLElBQUlBLFdBQVcsQ0FBQyxJQUFLLElBQUssSUFBSyxHQUFJLEdBQUksR0FBSSxHQUFJLElBQUssSUFBSyxJQUFLLEdBQUksSUFBSyxJQUFLLEdBQUksR0FBSSxHQUFJLEdBQUksSUFBSyxJQUFLLElBQUssSUFBSyxHQUFJLElBQUssSUFBSyxJQUFLLEdBQUksSUFBSyxJQUFLLElBQUssT0FDM0wsd0JBQXlCLGFBQWMsSUFBSUEsV0FBVyxDQUFDLElBQUssSUFBSyxJQUFLLEdBQUksSUFBSyxHQUFJLEdBQUksR0FBSSxHQUFJLElBQUssR0FBSSxJQUFLLElBQUssR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLElBQUssSUFBSyxHQUFJLEdBQUksR0FBSSxJQUFLLEdBQUksR0FBSSxJQUFLLElBQUssSUFBSyxPQUN4TCx3QkFBeUIsV0FBWSxJQUFJQSxXQUFXLENBQUMsSUFBTSxLQUFNLEtBQU0sS0FBTSxLQUFNLEtBQU0sSUFBTSxLQUFNLEtBQU0sS0FBTSxJQUFNLEtBQU0sSUFBTSxLQUFNLEtBQU0sS0FBTSxLQUFNLEtBQU0sS0FBTSxLQUFNLEtBQU0sS0FBTSxLQUFNLEtBQU0sS0FBTSxLQUFNLEtBQU0sS0FBTSxLQUFNLFFBQ25PLHdCQUF5QixTQUFVLElBQUlBLFdBQVcsQ0FBQyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEdBQUksRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsR0FBSSxFQUFHLEVBQUcsR0FBSSxHQUFJLEdBQUksS0FDL0ksd0JBQXlCLFdBQVks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LENBMElXRyxDQUFpQnJyQyxFQUFPM1EsRUFBTzQ3QyxFQUhuQiw2QkFBNkJKLEVBQVVqaUMsd0VBQ0NvVyxFQUFPcFcsaUJBQy9DLGlCQUFpQjVJLEVBQU1xZ0IsTUFBUTRxQixFQUFTLFlBQWMscUJBRTdFLEN3Qm1QZ0JLLENBQVl4NUMsRUFBUWs3QixFQUFTMGQsRUFBYzlDLEdBRTNELENBSU8sU0FBUzJELEtBQ1pyZSxJQUNKLEMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9lZGEvLi9ub2RlX21vZHVsZXMvQGRhdGFncm9rLWxpYnJhcmllcy9tYXRoL3NyYy9kYnNjYW4vd2FzbS93YXNtRGJzY2FuLmpzIiwid2VicGFjazovL2VkYS8uL25vZGVfbW9kdWxlcy9AZGF0YWdyb2stbGlicmFyaWVzL21sL2Nzcy9zdHlsZXMuY3NzIiwid2VicGFjazovL2VkYS8uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9hcGkuanMiLCJ3ZWJwYWNrOi8vZWRhLy4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL3NvdXJjZU1hcHMuanMiLCJ3ZWJwYWNrOi8vZWRhLy4vbm9kZV9tb2R1bGVzL2pzdGF0L2Rpc3QvanN0YXQuanMiLCJ3ZWJwYWNrOi8vZWRhLy4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvaW5qZWN0U3R5bGVzSW50b1N0eWxlVGFnLmpzIiwid2VicGFjazovL2VkYS8uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL2luc2VydEJ5U2VsZWN0b3IuanMiLCJ3ZWJwYWNrOi8vZWRhLy4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvaW5zZXJ0U3R5bGVFbGVtZW50LmpzIiwid2VicGFjazovL2VkYS8uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL3NldEF0dHJpYnV0ZXNXaXRob3V0QXR0cmlidXRlcy5qcyIsIndlYnBhY2s6Ly9lZGEvLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9zdHlsZURvbUFQSS5qcyIsIndlYnBhY2s6Ly9lZGEvLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9zdHlsZVRhZ1RyYW5zZm9ybS5qcyIsIndlYnBhY2s6Ly9lZGEvd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vZWRhL3dlYnBhY2svcnVudGltZS9hbWQgb3B0aW9ucyIsIndlYnBhY2s6Ly9lZGEvd2VicGFjay9ydW50aW1lL2NvbXBhdCBnZXQgZGVmYXVsdCBleHBvcnQiLCJ3ZWJwYWNrOi8vZWRhL3dlYnBhY2svcnVudGltZS9kZWZpbmUgcHJvcGVydHkgZ2V0dGVycyIsIndlYnBhY2s6Ly9lZGEvd2VicGFjay9ydW50aW1lL2dldCBqYXZhc2NyaXB0IGNodW5rIGZpbGVuYW1lIiwid2VicGFjazovL2VkYS93ZWJwYWNrL3J1bnRpbWUvZ2xvYmFsIiwid2VicGFjazovL2VkYS93ZWJwYWNrL3J1bnRpbWUvaGFybW9ueSBtb2R1bGUgZGVjb3JhdG9yIiwid2VicGFjazovL2VkYS93ZWJwYWNrL3J1bnRpbWUvaGFzT3duUHJvcGVydHkgc2hvcnRoYW5kIiwid2VicGFjazovL2VkYS93ZWJwYWNrL3J1bnRpbWUvbWFrZSBuYW1lc3BhY2Ugb2JqZWN0Iiwid2VicGFjazovL2VkYS93ZWJwYWNrL3J1bnRpbWUvcHVibGljUGF0aCIsIndlYnBhY2s6Ly9lZGEvd2VicGFjay9ydW50aW1lL2pzb25wIGNodW5rIGxvYWRpbmciLCJ3ZWJwYWNrOi8vZWRhL3dlYnBhY2svcnVudGltZS9ub25jZSIsIndlYnBhY2s6Ly9lZGEvZXh0ZXJuYWwgdmFyIFwiZ3Jva1wiIiwid2VicGFjazovL2VkYS9leHRlcm5hbCB2YXIgXCJ1aVwiIiwid2VicGFjazovL2VkYS9leHRlcm5hbCB2YXIgXCJER1wiIiwid2VicGFjazovL2VkYS8uL3dhc20vY2FsbFdhc20uanMiLCJ3ZWJwYWNrOi8vZWRhLy4vd2FzbS9jYWxsV2FzbUZvcldlYldvcmtlci5qcyIsIndlYnBhY2s6Ly9lZGEvLi9zcmMvdXRpbHMudHMiLCJ3ZWJwYWNrOi8vZWRhLy4vc3JjL2VkYS10b29scy50cyIsIndlYnBhY2s6Ly9lZGEvLi9zcmMvZGF0YS1nZW5lcmF0b3JzLnRzIiwid2VicGFjazovL2VkYS8uL3dhc20vRURBQVBJLmpzIiwid2VicGFjazovL2VkYS8uL3NyYy9zdm0udHMiLCJ3ZWJwYWNrOi8vZWRhLy4vc3JjL3Bscy9wbHMtY29uc3RhbnRzLnRzIiwid2VicGFjazovL2VkYS8uL3NyYy9wbHMvcGxzLXRvb2xzLnRzIiwid2VicGFjazovL2VkYS8uL3NyYy9zdGF0LXRvb2xzLnRzIiwid2VicGFjazovL2VkYS8uL25vZGVfbW9kdWxlcy9AZGF0YWdyb2stbGlicmFyaWVzL21hdGgvc3JjL2Ric2Nhbi93YXNtL2Ric2Nhbi13b3JrZXItY3JlYXRvci5qcyIsIndlYnBhY2s6Ly9lZGEvLi9ub2RlX21vZHVsZXMvQGRhdGFncm9rLWxpYnJhcmllcy9tYXRoL3NyYy93ZWJHUFUvZ2V0R1BVRGV2aWNlLmpzIiwid2VicGFjazovL2VkYS8uL25vZGVfbW9kdWxlcy9AZGF0YWdyb2stbGlicmFyaWVzL21hdGgvc3JjL3dlYkdQVS9tdWx0aS1jb2wtZGlzdGFuY2VzL3dlYkdQVS1hZ2dyZWdhdGlvbi5qcyIsIndlYnBhY2s6Ly9lZGEvLi9ub2RlX21vZHVsZXMvQGRhdGFncm9rLWxpYnJhcmllcy9tYXRoL3NyYy93ZWJHUFUvbXVsdGktY29sLWRpc3RhbmNlcy93ZWJHUFUtbXVsdGljb2wtZGlzdGFuY2VzLmpzIiwid2VicGFjazovL2VkYS8uL25vZGVfbW9kdWxlcy9AZGF0YWdyb2stbGlicmFyaWVzL21hdGgvc3JjL3dlYkdQVS90eXBlcy5qcyIsIndlYnBhY2s6Ly9lZGEvLi9ub2RlX21vZHVsZXMvQGRhdGFncm9rLWxpYnJhcmllcy9tbC9zcmMvbXVsdGktY29sdW1uLWRpbWVuc2lvbmFsaXR5LXJlZHVjdGlvbi90eXBlcy5qcyIsIndlYnBhY2s6Ly9lZGEvLi9ub2RlX21vZHVsZXMvQGRhdGFncm9rLWxpYnJhcmllcy9tYXRoL25vZGVfbW9kdWxlcy9pcy1hbnktYXJyYXkvbGliLWVzbS9pbmRleC5qcyIsIndlYnBhY2s6Ly9lZGEvLi9ub2RlX21vZHVsZXMvQGRhdGFncm9rLWxpYnJhcmllcy9tbC9zcmMvZnVuY3Rpb25FZGl0b3JzL2RpbWVuc2lvbmFsaXR5LXJlZHVjdGlvbi1lZGl0b3IuanMiLCJ3ZWJwYWNrOi8vZWRhLy4vbm9kZV9tb2R1bGVzL0BkYXRhZ3Jvay1saWJyYXJpZXMvbWwvc3JjL2Z1bmN0aW9uRWRpdG9ycy9jb25zdHMuanMiLCJ3ZWJwYWNrOi8vZWRhLy4vbm9kZV9tb2R1bGVzL0BkYXRhZ3Jvay1saWJyYXJpZXMvbWwvc3JjL2Rpc3RhbmNlLW1hdHJpeC90eXBlcy5qcyIsIndlYnBhY2s6Ly9lZGEvZXh0ZXJuYWwgdmFyIFwicnhqc1wiIiwid2VicGFjazovL2VkYS8uL25vZGVfbW9kdWxlcy9AZGF0YWdyb2stbGlicmFyaWVzL21sL2Nzcy9zdHlsZXMuY3NzPzhjMDMiLCJ3ZWJwYWNrOi8vZWRhLy4vbm9kZV9tb2R1bGVzL0BkYXRhZ3Jvay1saWJyYXJpZXMvbWwvc3JjL211bHRpLWNvbHVtbi1kaW1lbnNpb25hbGl0eS1yZWR1Y3Rpb24vbXVsdGktY29sdW1uLWRpbS1yZWR1Y3Rpb24tZWRpdG9yLmpzIiwid2VicGFjazovL2VkYS8uL25vZGVfbW9kdWxlcy9AZGF0YWdyb2stbGlicmFyaWVzL21sL3NyYy9tdWx0aS1jb2x1bW4tZGltZW5zaW9uYWxpdHktcmVkdWN0aW9uL2NvbnN0cy5qcyIsIndlYnBhY2s6Ly9lZGEvLi9ub2RlX21vZHVsZXMvQGRhdGFncm9rLWxpYnJhcmllcy9tbC9zcmMvZGlzdGFuY2UtbWF0cml4L3V0aWxzLmpzIiwid2VicGFjazovL2VkYS8uL25vZGVfbW9kdWxlcy9AZGF0YWdyb2stbGlicmFyaWVzL3V0aWxzL3NyYy90eXBlLWRlY2xhcmF0aW9ucy5qcyIsIndlYnBhY2s6Ly9lZGEvLi9ub2RlX21vZHVsZXMvQGRhdGFncm9rLWxpYnJhcmllcy9tbC9zcmMvbXVsdGktY29sdW1uLWRpbWVuc2lvbmFsaXR5LXJlZHVjdGlvbi9yZWR1Y2UtZGltZW5zaW9uYWxpdHkuanMiLCJ3ZWJwYWNrOi8vZWRhLy4vc3JjL21pc3NpbmctdmFsdWVzLWltcHV0YXRpb24vdWktY29uc3RhbnRzLnRzIiwid2VicGFjazovL2VkYS8uL3NyYy9taXNzaW5nLXZhbHVlcy1pbXB1dGF0aW9uL2tubi1pbXB1dGVyLnRzIiwid2VicGFjazovL2VkYS8uL3NyYy9taXNzaW5nLXZhbHVlcy1pbXB1dGF0aW9uL3VpLnRzIiwid2VicGFjazovL2VkYS8uL25vZGVfbW9kdWxlcy9AZGF0YWdyb2stbGlicmFyaWVzL21sL3NyYy9NQ0wvbWNsLWVkaXRvci5qcyIsIndlYnBhY2s6Ly9lZGEvLi9ub2RlX21vZHVsZXMvQGRhdGFncm9rLWxpYnJhcmllcy91dGlscy9zcmMvYml0LWFycmF5LmpzIiwid2VicGFjazovL2VkYS8uL25vZGVfbW9kdWxlcy9AZGF0YWdyb2stbGlicmFyaWVzL3V0aWxzL3NyYy9yZW5kZXItbGluZXMtb24tc3AuanMiLCJ3ZWJwYWNrOi8vZWRhLy4vc3JjL3BhY2thZ2UudHMiLCJ3ZWJwYWNrOi8vZWRhLy4vc3JjL2VkYS11aS50cyIsIndlYnBhY2s6Ly9lZGEvLi9ub2RlX21vZHVsZXMvQGRhdGFncm9rLWxpYnJhcmllcy9tbC9zcmMvbXVsdGktY29sdW1uLWRpbWVuc2lvbmFsaXR5LXJlZHVjdGlvbi9lbWJlZGRpbmdzLXNwYWNlLmpzIiwid2VicGFjazovL2VkYS8uL25vZGVfbW9kdWxlcy9AZGF0YWdyb2stbGlicmFyaWVzL21sL3NyYy9tdWx0aS1jb2x1bW4tZGltZW5zaW9uYWxpdHktcmVkdWN0aW9uL211bHRpLWRpbS1yZWQtd29ya2VyLWNyZWF0b3IuanMiLCJ3ZWJwYWNrOi8vZWRhLy4vbm9kZV9tb2R1bGVzL0BkYXRhZ3Jvay1saWJyYXJpZXMvdXRpbHMvc3JjL3ZlY3Rvci1vcGVyYXRpb25zLmpzIiwid2VicGFjazovL2VkYS8uL25vZGVfbW9kdWxlcy9AZGF0YWdyb2stbGlicmFyaWVzL21sL3NyYy9NQ0wvY2x1c3RlcmluZy12aWV3LmpzIiwid2VicGFjazovL2VkYS8uL25vZGVfbW9kdWxlcy9AZGF0YWdyb2stbGlicmFyaWVzL21sL3NyYy9NQ0wvaW5kZXguanMiXSwic291cmNlc0NvbnRlbnQiOlsiXHJcbmV4cG9ydCB2YXIgZXhwb3J0Q3BwRGJzY2FuTGliID0gKCgpID0+IHtcclxuICB2YXIgX3NjcmlwdERpciA9IHR5cGVvZiBkb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCcgJiYgZG9jdW1lbnQuY3VycmVudFNjcmlwdCA/IGRvY3VtZW50LmN1cnJlbnRTY3JpcHQuc3JjIDogdW5kZWZpbmVkO1xyXG4gIFxyXG4gIHJldHVybiAoXHJcbmZ1bmN0aW9uKGV4cG9ydENwcERic2NhbkxpYiA9IHt9KSAge1xyXG5cclxuLy8gaW5jbHVkZTogc2hlbGwuanNcclxuLy8gVGhlIE1vZHVsZSBvYmplY3Q6IE91ciBpbnRlcmZhY2UgdG8gdGhlIG91dHNpZGUgd29ybGQuIFdlIGltcG9ydFxyXG4vLyBhbmQgZXhwb3J0IHZhbHVlcyBvbiBpdC4gVGhlcmUgYXJlIHZhcmlvdXMgd2F5cyBNb2R1bGUgY2FuIGJlIHVzZWQ6XHJcbi8vIDEuIE5vdCBkZWZpbmVkLiBXZSBjcmVhdGUgaXQgaGVyZVxyXG4vLyAyLiBBIGZ1bmN0aW9uIHBhcmFtZXRlciwgZnVuY3Rpb24oTW9kdWxlKSB7IC4uZ2VuZXJhdGVkIGNvZGUuLiB9XHJcbi8vIDMuIHByZS1ydW4gYXBwZW5kZWQgaXQsIHZhciBNb2R1bGUgPSB7fTsgLi5nZW5lcmF0ZWQgY29kZS4uXHJcbi8vIDQuIEV4dGVybmFsIHNjcmlwdCB0YWcgZGVmaW5lcyB2YXIgTW9kdWxlLlxyXG4vLyBXZSBuZWVkIHRvIGNoZWNrIGlmIE1vZHVsZSBhbHJlYWR5IGV4aXN0cyAoZS5nLiBjYXNlIDMgYWJvdmUpLlxyXG4vLyBTdWJzdGl0dXRpb24gd2lsbCBiZSByZXBsYWNlZCB3aXRoIGFjdHVhbCBjb2RlIG9uIGxhdGVyIHN0YWdlIG9mIHRoZSBidWlsZCxcclxuLy8gdGhpcyB3YXkgQ2xvc3VyZSBDb21waWxlciB3aWxsIG5vdCBtYW5nbGUgaXQgKGUuZy4gY2FzZSA0LiBhYm92ZSkuXHJcbi8vIE5vdGUgdGhhdCBpZiB5b3Ugd2FudCB0byBydW4gY2xvc3VyZSwgYW5kIGFsc28gdG8gdXNlIE1vZHVsZVxyXG4vLyBhZnRlciB0aGUgZ2VuZXJhdGVkIGNvZGUsIHlvdSB3aWxsIG5lZWQgdG8gZGVmaW5lICAgdmFyIE1vZHVsZSA9IHt9O1xyXG4vLyBiZWZvcmUgdGhlIGNvZGUuIFRoZW4gdGhhdCBvYmplY3Qgd2lsbCBiZSB1c2VkIGluIHRoZSBjb2RlLCBhbmQgeW91XHJcbi8vIGNhbiBjb250aW51ZSB0byB1c2UgTW9kdWxlIGFmdGVyd2FyZHMgYXMgd2VsbC5cclxudmFyIE1vZHVsZSA9IHR5cGVvZiBleHBvcnRDcHBEYnNjYW5MaWIgIT0gJ3VuZGVmaW5lZCcgPyBleHBvcnRDcHBEYnNjYW5MaWIgOiB7fTtcclxuXHJcbi8vIFNldCB1cCB0aGUgcHJvbWlzZSB0aGF0IGluZGljYXRlcyB0aGUgTW9kdWxlIGlzIGluaXRpYWxpemVkXHJcbnZhciByZWFkeVByb21pc2VSZXNvbHZlLCByZWFkeVByb21pc2VSZWplY3Q7XHJcbk1vZHVsZVsncmVhZHknXSA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge1xyXG4gIHJlYWR5UHJvbWlzZVJlc29sdmUgPSByZXNvbHZlO1xyXG4gIHJlYWR5UHJvbWlzZVJlamVjdCA9IHJlamVjdDtcclxufSk7XHJcblxyXG4vLyAtLXByZS1qc2VzIGFyZSBlbWl0dGVkIGFmdGVyIHRoZSBNb2R1bGUgaW50ZWdyYXRpb24gY29kZSwgc28gdGhhdCB0aGV5IGNhblxyXG4vLyByZWZlciB0byBNb2R1bGUgKGlmIHRoZXkgY2hvb3NlOyB0aGV5IGNhbiBhbHNvIGRlZmluZSBNb2R1bGUpXHJcblxyXG5cclxuLy8gU29tZXRpbWVzIGFuIGV4aXN0aW5nIE1vZHVsZSBvYmplY3QgZXhpc3RzIHdpdGggcHJvcGVydGllc1xyXG4vLyBtZWFudCB0byBvdmVyd3JpdGUgdGhlIGRlZmF1bHQgbW9kdWxlIGZ1bmN0aW9uYWxpdHkuIEhlcmVcclxuLy8gd2UgY29sbGVjdCB0aG9zZSBwcm9wZXJ0aWVzIGFuZCByZWFwcGx5IF9hZnRlcl8gd2UgY29uZmlndXJlXHJcbi8vIHRoZSBjdXJyZW50IGVudmlyb25tZW50J3MgZGVmYXVsdHMgdG8gYXZvaWQgaGF2aW5nIHRvIGJlIHNvXHJcbi8vIGRlZmVuc2l2ZSBkdXJpbmcgaW5pdGlhbGl6YXRpb24uXHJcbnZhciBtb2R1bGVPdmVycmlkZXMgPSBPYmplY3QuYXNzaWduKHt9LCBNb2R1bGUpO1xyXG5cclxudmFyIGFyZ3VtZW50c18gPSBbXTtcclxudmFyIHRoaXNQcm9ncmFtID0gJy4vdGhpcy5wcm9ncmFtJztcclxudmFyIHF1aXRfID0gKHN0YXR1cywgdG9UaHJvdykgPT4ge1xyXG4gIHRocm93IHRvVGhyb3c7XHJcbn07XHJcblxyXG4vLyBEZXRlcm1pbmUgdGhlIHJ1bnRpbWUgZW52aXJvbm1lbnQgd2UgYXJlIGluLiBZb3UgY2FuIGN1c3RvbWl6ZSB0aGlzIGJ5XHJcbi8vIHNldHRpbmcgdGhlIEVOVklST05NRU5UIHNldHRpbmcgYXQgY29tcGlsZSB0aW1lIChzZWUgc2V0dGluZ3MuanMpLlxyXG5cclxuLy8gQXR0ZW1wdCB0byBhdXRvLWRldGVjdCB0aGUgZW52aXJvbm1lbnRcclxudmFyIEVOVklST05NRU5UX0lTX1dFQiA9IHR5cGVvZiB3aW5kb3cgPT0gJ29iamVjdCc7XHJcbnZhciBFTlZJUk9OTUVOVF9JU19XT1JLRVIgPSB0eXBlb2YgaW1wb3J0U2NyaXB0cyA9PSAnZnVuY3Rpb24nO1xyXG4vLyBOLmIuIEVsZWN0cm9uLmpzIGVudmlyb25tZW50IGlzIHNpbXVsdGFuZW91c2x5IGEgTk9ERS1lbnZpcm9ubWVudCwgYnV0XHJcbi8vIGFsc28gYSB3ZWIgZW52aXJvbm1lbnQuXHJcbnZhciBFTlZJUk9OTUVOVF9JU19OT0RFID0gdHlwZW9mIHByb2Nlc3MgPT0gJ29iamVjdCcgJiYgdHlwZW9mIHByb2Nlc3MudmVyc2lvbnMgPT0gJ29iamVjdCcgJiYgdHlwZW9mIHByb2Nlc3MudmVyc2lvbnMubm9kZSA9PSAnc3RyaW5nJztcclxudmFyIEVOVklST05NRU5UX0lTX1NIRUxMID0gIUVOVklST05NRU5UX0lTX1dFQiAmJiAhRU5WSVJPTk1FTlRfSVNfTk9ERSAmJiAhRU5WSVJPTk1FTlRfSVNfV09SS0VSO1xyXG5cclxuLy8gYC9gIHNob3VsZCBiZSBwcmVzZW50IGF0IHRoZSBlbmQgaWYgYHNjcmlwdERpcmVjdG9yeWAgaXMgbm90IGVtcHR5XHJcbnZhciBzY3JpcHREaXJlY3RvcnkgPSAnJztcclxuZnVuY3Rpb24gbG9jYXRlRmlsZShwYXRoKSB7XHJcbiAgaWYgKE1vZHVsZVsnbG9jYXRlRmlsZSddKSB7XHJcbiAgICByZXR1cm4gTW9kdWxlWydsb2NhdGVGaWxlJ10ocGF0aCwgc2NyaXB0RGlyZWN0b3J5KTtcclxuICB9XHJcbiAgcmV0dXJuIHNjcmlwdERpcmVjdG9yeSArIHBhdGg7XHJcbn1cclxuXHJcbi8vIEhvb2tzIHRoYXQgYXJlIGltcGxlbWVudGVkIGRpZmZlcmVudGx5IGluIGRpZmZlcmVudCBydW50aW1lIGVudmlyb25tZW50cy5cclxudmFyIHJlYWRfLFxyXG4gICAgcmVhZEFzeW5jLFxyXG4gICAgcmVhZEJpbmFyeSxcclxuICAgIHNldFdpbmRvd1RpdGxlO1xyXG5cclxuLy8gTm90ZSB0aGF0IHRoaXMgaW5jbHVkZXMgTm9kZS5qcyB3b3JrZXJzIHdoZW4gcmVsZXZhbnQgKHB0aHJlYWRzIGlzIGVuYWJsZWQpLlxyXG4vLyBOb2RlLmpzIHdvcmtlcnMgYXJlIGRldGVjdGVkIGFzIGEgY29tYmluYXRpb24gb2YgRU5WSVJPTk1FTlRfSVNfV09SS0VSIGFuZFxyXG4vLyBFTlZJUk9OTUVOVF9JU19OT0RFLlxyXG5pZiAoRU5WSVJPTk1FTlRfSVNfV0VCIHx8IEVOVklST05NRU5UX0lTX1dPUktFUikge1xyXG4gIGlmIChFTlZJUk9OTUVOVF9JU19XT1JLRVIpIHsgLy8gQ2hlY2sgd29ya2VyLCBub3Qgd2ViLCBzaW5jZSB3aW5kb3cgY291bGQgYmUgcG9seWZpbGxlZFxyXG4gICAgc2NyaXB0RGlyZWN0b3J5ID0gc2VsZi5sb2NhdGlvbi5ocmVmO1xyXG4gIH0gZWxzZSBpZiAodHlwZW9mIGRvY3VtZW50ICE9ICd1bmRlZmluZWQnICYmIGRvY3VtZW50LmN1cnJlbnRTY3JpcHQpIHsgLy8gd2ViXHJcbiAgICBzY3JpcHREaXJlY3RvcnkgPSBkb2N1bWVudC5jdXJyZW50U2NyaXB0LnNyYztcclxuICB9XHJcbiAgLy8gV2hlbiBNT0RVTEFSSVpFLCB0aGlzIEpTIG1heSBiZSBleGVjdXRlZCBsYXRlciwgYWZ0ZXIgZG9jdW1lbnQuY3VycmVudFNjcmlwdFxyXG4gIC8vIGlzIGdvbmUsIHNvIHdlIHNhdmVkIGl0LCBhbmQgd2UgdXNlIGl0IGhlcmUgaW5zdGVhZCBvZiBhbnkgb3RoZXIgaW5mby5cclxuICBpZiAoX3NjcmlwdERpcikge1xyXG4gICAgc2NyaXB0RGlyZWN0b3J5ID0gX3NjcmlwdERpcjtcclxuICB9XHJcbiAgLy8gYmxvYiB1cmxzIGxvb2sgbGlrZSBibG9iOmh0dHA6Ly9zaXRlLmNvbS9ldGMvZXRjIGFuZCB3ZSBjYW5ub3QgaW5mZXIgYW55dGhpbmcgZnJvbSB0aGVtLlxyXG4gIC8vIG90aGVyd2lzZSwgc2xpY2Ugb2ZmIHRoZSBmaW5hbCBwYXJ0IG9mIHRoZSB1cmwgdG8gZmluZCB0aGUgc2NyaXB0IGRpcmVjdG9yeS5cclxuICAvLyBpZiBzY3JpcHREaXJlY3RvcnkgZG9lcyBub3QgY29udGFpbiBhIHNsYXNoLCBsYXN0SW5kZXhPZiB3aWxsIHJldHVybiAtMSxcclxuICAvLyBhbmQgc2NyaXB0RGlyZWN0b3J5IHdpbGwgY29ycmVjdGx5IGJlIHJlcGxhY2VkIHdpdGggYW4gZW1wdHkgc3RyaW5nLlxyXG4gIC8vIElmIHNjcmlwdERpcmVjdG9yeSBjb250YWlucyBhIHF1ZXJ5IChzdGFydGluZyB3aXRoID8pIG9yIGEgZnJhZ21lbnQgKHN0YXJ0aW5nIHdpdGggIyksXHJcbiAgLy8gdGhleSBhcmUgcmVtb3ZlZCBiZWNhdXNlIHRoZXkgY291bGQgY29udGFpbiBhIHNsYXNoLlxyXG4gIGlmIChzY3JpcHREaXJlY3RvcnkuaW5kZXhPZignYmxvYjonKSAhPT0gMCkge1xyXG4gICAgc2NyaXB0RGlyZWN0b3J5ID0gc2NyaXB0RGlyZWN0b3J5LnN1YnN0cigwLCBzY3JpcHREaXJlY3RvcnkucmVwbGFjZSgvWz8jXS4qLywgXCJcIikubGFzdEluZGV4T2YoJy8nKSsxKTtcclxuICB9IGVsc2Uge1xyXG4gICAgc2NyaXB0RGlyZWN0b3J5ID0gJyc7XHJcbiAgfVxyXG5cclxuICAvLyBEaWZmZXJlbnRpYXRlIHRoZSBXZWIgV29ya2VyIGZyb20gdGhlIE5vZGUgV29ya2VyIGNhc2UsIGFzIHJlYWRpbmcgbXVzdFxyXG4gIC8vIGJlIGRvbmUgZGlmZmVyZW50bHkuXHJcbiAge1xyXG4vLyBpbmNsdWRlOiB3ZWJfb3Jfd29ya2VyX3NoZWxsX3JlYWQuanNcclxucmVhZF8gPSAodXJsKSA9PiB7XHJcbiAgICAgIHZhciB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcclxuICAgICAgeGhyLm9wZW4oJ0dFVCcsIHVybCwgZmFsc2UpO1xyXG4gICAgICB4aHIuc2VuZChudWxsKTtcclxuICAgICAgcmV0dXJuIHhoci5yZXNwb25zZVRleHQ7XHJcbiAgfVxyXG5cclxuICBpZiAoRU5WSVJPTk1FTlRfSVNfV09SS0VSKSB7XHJcbiAgICByZWFkQmluYXJ5ID0gKHVybCkgPT4ge1xyXG4gICAgICAgIHZhciB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcclxuICAgICAgICB4aHIub3BlbignR0VUJywgdXJsLCBmYWxzZSk7XHJcbiAgICAgICAgeGhyLnJlc3BvbnNlVHlwZSA9ICdhcnJheWJ1ZmZlcic7XHJcbiAgICAgICAgeGhyLnNlbmQobnVsbCk7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KC8qKiBAdHlwZXshQXJyYXlCdWZmZXJ9ICovKHhoci5yZXNwb25zZSkpO1xyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIHJlYWRBc3luYyA9ICh1cmwsIG9ubG9hZCwgb25lcnJvcikgPT4ge1xyXG4gICAgdmFyIHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xyXG4gICAgeGhyLm9wZW4oJ0dFVCcsIHVybCwgdHJ1ZSk7XHJcbiAgICB4aHIucmVzcG9uc2VUeXBlID0gJ2FycmF5YnVmZmVyJztcclxuICAgIHhoci5vbmxvYWQgPSAoKSA9PiB7XHJcbiAgICAgIGlmICh4aHIuc3RhdHVzID09IDIwMCB8fCAoeGhyLnN0YXR1cyA9PSAwICYmIHhoci5yZXNwb25zZSkpIHsgLy8gZmlsZSBVUkxzIGNhbiByZXR1cm4gMFxyXG4gICAgICAgIG9ubG9hZCh4aHIucmVzcG9uc2UpO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICBvbmVycm9yKCk7XHJcbiAgICB9O1xyXG4gICAgeGhyLm9uZXJyb3IgPSBvbmVycm9yO1xyXG4gICAgeGhyLnNlbmQobnVsbCk7XHJcbiAgfVxyXG5cclxuLy8gZW5kIGluY2x1ZGU6IHdlYl9vcl93b3JrZXJfc2hlbGxfcmVhZC5qc1xyXG4gIH1cclxuXHJcbiAgc2V0V2luZG93VGl0bGUgPSAodGl0bGUpID0+IGRvY3VtZW50LnRpdGxlID0gdGl0bGU7XHJcbn0gZWxzZVxyXG57XHJcbn1cclxuXHJcbnZhciBvdXQgPSBNb2R1bGVbJ3ByaW50J10gfHwgY29uc29sZS5sb2cuYmluZChjb25zb2xlKTtcclxudmFyIGVyciA9IE1vZHVsZVsncHJpbnRFcnInXSB8fCBjb25zb2xlLndhcm4uYmluZChjb25zb2xlKTtcclxuXHJcbi8vIE1lcmdlIGJhY2sgaW4gdGhlIG92ZXJyaWRlc1xyXG5PYmplY3QuYXNzaWduKE1vZHVsZSwgbW9kdWxlT3ZlcnJpZGVzKTtcclxuLy8gRnJlZSB0aGUgb2JqZWN0IGhpZXJhcmNoeSBjb250YWluZWQgaW4gdGhlIG92ZXJyaWRlcywgdGhpcyBsZXRzIHRoZSBHQ1xyXG4vLyByZWNsYWltIGRhdGEgdXNlZCBlLmcuIGluIG1lbW9yeUluaXRpYWxpemVyUmVxdWVzdCwgd2hpY2ggaXMgYSBsYXJnZSB0eXBlZCBhcnJheS5cclxubW9kdWxlT3ZlcnJpZGVzID0gbnVsbDtcclxuXHJcbi8vIEVtaXQgY29kZSB0byBoYW5kbGUgZXhwZWN0ZWQgdmFsdWVzIG9uIHRoZSBNb2R1bGUgb2JqZWN0LiBUaGlzIGFwcGxpZXMgTW9kdWxlLnhcclxuLy8gdG8gdGhlIHByb3BlciBsb2NhbCB4LiBUaGlzIGhhcyB0d28gYmVuZWZpdHM6IGZpcnN0LCB3ZSBvbmx5IGVtaXQgaXQgaWYgaXQgaXNcclxuLy8gZXhwZWN0ZWQgdG8gYXJyaXZlLCBhbmQgc2Vjb25kLCBieSB1c2luZyBhIGxvY2FsIGV2ZXJ5d2hlcmUgZWxzZSB0aGF0IGNhbiBiZVxyXG4vLyBtaW5pZmllZC5cclxuXHJcbmlmIChNb2R1bGVbJ2FyZ3VtZW50cyddKSBhcmd1bWVudHNfID0gTW9kdWxlWydhcmd1bWVudHMnXTtcclxuXHJcbmlmIChNb2R1bGVbJ3RoaXNQcm9ncmFtJ10pIHRoaXNQcm9ncmFtID0gTW9kdWxlWyd0aGlzUHJvZ3JhbSddO1xyXG5cclxuaWYgKE1vZHVsZVsncXVpdCddKSBxdWl0XyA9IE1vZHVsZVsncXVpdCddO1xyXG5cclxuLy8gcGVyZm9ybSBhc3NlcnRpb25zIGluIHNoZWxsLmpzIGFmdGVyIHdlIHNldCB1cCBvdXQoKSBhbmQgZXJyKCksIGFzIG90aGVyd2lzZSBpZiBhbiBhc3NlcnRpb24gZmFpbHMgaXQgY2Fubm90IHByaW50IHRoZSBtZXNzYWdlXHJcblxyXG5cclxuLy8gZW5kIGluY2x1ZGU6IHNoZWxsLmpzXHJcbi8vIGluY2x1ZGU6IHByZWFtYmxlLmpzXHJcbi8vID09PSBQcmVhbWJsZSBsaWJyYXJ5IHN0dWZmID09PVxyXG5cclxuLy8gRG9jdW1lbnRhdGlvbiBmb3IgdGhlIHB1YmxpYyBBUElzIGRlZmluZWQgaW4gdGhpcyBmaWxlIG11c3QgYmUgdXBkYXRlZCBpbjpcclxuLy8gICAgc2l0ZS9zb3VyY2UvZG9jcy9hcGlfcmVmZXJlbmNlL3ByZWFtYmxlLmpzLnJzdFxyXG4vLyBBIHByZWJ1aWx0IGxvY2FsIHZlcnNpb24gb2YgdGhlIGRvY3VtZW50YXRpb24gaXMgYXZhaWxhYmxlIGF0OlxyXG4vLyAgICBzaXRlL2J1aWxkL3RleHQvZG9jcy9hcGlfcmVmZXJlbmNlL3ByZWFtYmxlLmpzLnR4dFxyXG4vLyBZb3UgY2FuIGFsc28gYnVpbGQgZG9jcyBsb2NhbGx5IGFzIEhUTUwgb3Igb3RoZXIgZm9ybWF0cyBpbiBzaXRlL1xyXG4vLyBBbiBvbmxpbmUgSFRNTCB2ZXJzaW9uICh3aGljaCBtYXkgYmUgb2YgYSBkaWZmZXJlbnQgdmVyc2lvbiBvZiBFbXNjcmlwdGVuKVxyXG4vLyAgICBpcyB1cCBhdCBodHRwOi8va3JpcGtlbi5naXRodWIuaW8vZW1zY3JpcHRlbi1zaXRlL2RvY3MvYXBpX3JlZmVyZW5jZS9wcmVhbWJsZS5qcy5odG1sXHJcblxyXG52YXIgd2FzbUJpbmFyeTtcclxuaWYgKE1vZHVsZVsnd2FzbUJpbmFyeSddKSB3YXNtQmluYXJ5ID0gTW9kdWxlWyd3YXNtQmluYXJ5J107XHJcbnZhciBub0V4aXRSdW50aW1lID0gTW9kdWxlWydub0V4aXRSdW50aW1lJ10gfHwgdHJ1ZTtcclxuXHJcbmlmICh0eXBlb2YgV2ViQXNzZW1ibHkgIT0gJ29iamVjdCcpIHtcclxuICBhYm9ydCgnbm8gbmF0aXZlIHdhc20gc3VwcG9ydCBkZXRlY3RlZCcpO1xyXG59XHJcblxyXG4vLyBXYXNtIGdsb2JhbHNcclxuXHJcbnZhciB3YXNtTWVtb3J5O1xyXG5cclxuLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XHJcbi8vIFJ1bnRpbWUgZXNzZW50aWFsc1xyXG4vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cclxuXHJcbi8vIHdoZXRoZXIgd2UgYXJlIHF1aXR0aW5nIHRoZSBhcHBsaWNhdGlvbi4gbm8gY29kZSBzaG91bGQgcnVuIGFmdGVyIHRoaXMuXHJcbi8vIHNldCBpbiBleGl0KCkgYW5kIGFib3J0KClcclxudmFyIEFCT1JUID0gZmFsc2U7XHJcblxyXG4vLyBzZXQgYnkgZXhpdCgpIGFuZCBhYm9ydCgpLiAgUGFzc2VkIHRvICdvbkV4aXQnIGhhbmRsZXIuXHJcbi8vIE5PVEU6IFRoaXMgaXMgYWxzbyB1c2VkIGFzIHRoZSBwcm9jZXNzIHJldHVybiBjb2RlIGNvZGUgaW4gc2hlbGwgZW52aXJvbm1lbnRzXHJcbi8vIGJ1dCBvbmx5IHdoZW4gbm9FeGl0UnVudGltZSBpcyBmYWxzZS5cclxudmFyIEVYSVRTVEFUVVM7XHJcblxyXG4vKiogQHR5cGUge2Z1bmN0aW9uKCosIHN0cmluZz0pfSAqL1xyXG5mdW5jdGlvbiBhc3NlcnQoY29uZGl0aW9uLCB0ZXh0KSB7XHJcbiAgaWYgKCFjb25kaXRpb24pIHtcclxuICAgIC8vIFRoaXMgYnVpbGQgd2FzIGNyZWF0ZWQgd2l0aG91dCBBU1NFUlRJT05TIGRlZmluZWQuICBgYXNzZXJ0KClgIHNob3VsZCBub3RcclxuICAgIC8vIGV2ZXIgYmUgY2FsbGVkIGluIHRoaXMgY29uZmlndXJhdGlvbiBidXQgaW4gY2FzZSB0aGVyZSBhcmUgY2FsbGVycyBpblxyXG4gICAgLy8gdGhlIHdpbGQgbGVhdmUgdGhpcyBzaW1wbGUgYWJvcnQoKSBpbXBsZW1lbmF0aW9uIGhlcmUgZm9yIG5vdy5cclxuICAgIGFib3J0KHRleHQpO1xyXG4gIH1cclxufVxyXG5cclxuLy8gTWVtb3J5IG1hbmFnZW1lbnRcclxuXHJcbnZhciBIRUFQLFxyXG4vKiogQHR5cGUgeyFJbnQ4QXJyYXl9ICovXHJcbiAgSEVBUDgsXHJcbi8qKiBAdHlwZSB7IVVpbnQ4QXJyYXl9ICovXHJcbiAgSEVBUFU4LFxyXG4vKiogQHR5cGUgeyFJbnQxNkFycmF5fSAqL1xyXG4gIEhFQVAxNixcclxuLyoqIEB0eXBlIHshVWludDE2QXJyYXl9ICovXHJcbiAgSEVBUFUxNixcclxuLyoqIEB0eXBlIHshSW50MzJBcnJheX0gKi9cclxuICBIRUFQMzIsXHJcbi8qKiBAdHlwZSB7IVVpbnQzMkFycmF5fSAqL1xyXG4gIEhFQVBVMzIsXHJcbi8qKiBAdHlwZSB7IUZsb2F0MzJBcnJheX0gKi9cclxuICBIRUFQRjMyLFxyXG4vKiogQHR5cGUgeyFGbG9hdDY0QXJyYXl9ICovXHJcbiAgSEVBUEY2NDtcclxuXHJcbmZ1bmN0aW9uIHVwZGF0ZU1lbW9yeVZpZXdzKCkge1xyXG4gIHZhciBiID0gd2FzbU1lbW9yeS5idWZmZXI7XHJcbiAgTW9kdWxlWydIRUFQOCddID0gSEVBUDggPSBuZXcgSW50OEFycmF5KGIpO1xyXG4gIE1vZHVsZVsnSEVBUDE2J10gPSBIRUFQMTYgPSBuZXcgSW50MTZBcnJheShiKTtcclxuICBNb2R1bGVbJ0hFQVAzMiddID0gSEVBUDMyID0gbmV3IEludDMyQXJyYXkoYik7XHJcbiAgTW9kdWxlWydIRUFQVTgnXSA9IEhFQVBVOCA9IG5ldyBVaW50OEFycmF5KGIpO1xyXG4gIE1vZHVsZVsnSEVBUFUxNiddID0gSEVBUFUxNiA9IG5ldyBVaW50MTZBcnJheShiKTtcclxuICBNb2R1bGVbJ0hFQVBVMzInXSA9IEhFQVBVMzIgPSBuZXcgVWludDMyQXJyYXkoYik7XHJcbiAgTW9kdWxlWydIRUFQRjMyJ10gPSBIRUFQRjMyID0gbmV3IEZsb2F0MzJBcnJheShiKTtcclxuICBNb2R1bGVbJ0hFQVBGNjQnXSA9IEhFQVBGNjQgPSBuZXcgRmxvYXQ2NEFycmF5KGIpO1xyXG59XHJcblxyXG4vLyBpbmNsdWRlOiBydW50aW1lX2luaXRfdGFibGUuanNcclxuLy8gSW4gcmVndWxhciBub24tUkVMT0NBVEFCTEUgbW9kZSB0aGUgdGFibGUgaXMgZXhwb3J0ZWRcclxuLy8gZnJvbSB0aGUgd2FzbSBtb2R1bGUgYW5kIHRoaXMgd2lsbCBiZSBhc3NpZ25lZCBvbmNlXHJcbi8vIHRoZSBleHBvcnRzIGFyZSBhdmFpbGFibGUuXHJcbnZhciB3YXNtVGFibGU7XHJcblxyXG4vLyBlbmQgaW5jbHVkZTogcnVudGltZV9pbml0X3RhYmxlLmpzXHJcbi8vIGluY2x1ZGU6IHJ1bnRpbWVfc3RhY2tfY2hlY2suanNcclxuLy8gZW5kIGluY2x1ZGU6IHJ1bnRpbWVfc3RhY2tfY2hlY2suanNcclxuLy8gaW5jbHVkZTogcnVudGltZV9hc3NlcnRpb25zLmpzXHJcbi8vIGVuZCBpbmNsdWRlOiBydW50aW1lX2Fzc2VydGlvbnMuanNcclxudmFyIF9fQVRQUkVSVU5fXyAgPSBbXTsgLy8gZnVuY3Rpb25zIGNhbGxlZCBiZWZvcmUgdGhlIHJ1bnRpbWUgaXMgaW5pdGlhbGl6ZWRcclxudmFyIF9fQVRJTklUX18gICAgPSBbXTsgLy8gZnVuY3Rpb25zIGNhbGxlZCBkdXJpbmcgc3RhcnR1cFxyXG52YXIgX19BVEVYSVRfXyAgICA9IFtdOyAvLyBmdW5jdGlvbnMgY2FsbGVkIGR1cmluZyBzaHV0ZG93blxyXG52YXIgX19BVFBPU1RSVU5fXyA9IFtdOyAvLyBmdW5jdGlvbnMgY2FsbGVkIGFmdGVyIHRoZSBtYWluKCkgaXMgY2FsbGVkXHJcblxyXG52YXIgcnVudGltZUluaXRpYWxpemVkID0gZmFsc2U7XHJcblxyXG52YXIgcnVudGltZUtlZXBhbGl2ZUNvdW50ZXIgPSAwO1xyXG5cclxuZnVuY3Rpb24ga2VlcFJ1bnRpbWVBbGl2ZSgpIHtcclxuICByZXR1cm4gbm9FeGl0UnVudGltZSB8fCBydW50aW1lS2VlcGFsaXZlQ291bnRlciA+IDA7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHByZVJ1bigpIHtcclxuICBpZiAoTW9kdWxlWydwcmVSdW4nXSkge1xyXG4gICAgaWYgKHR5cGVvZiBNb2R1bGVbJ3ByZVJ1biddID09ICdmdW5jdGlvbicpIE1vZHVsZVsncHJlUnVuJ10gPSBbTW9kdWxlWydwcmVSdW4nXV07XHJcbiAgICB3aGlsZSAoTW9kdWxlWydwcmVSdW4nXS5sZW5ndGgpIHtcclxuICAgICAgYWRkT25QcmVSdW4oTW9kdWxlWydwcmVSdW4nXS5zaGlmdCgpKTtcclxuICAgIH1cclxuICB9XHJcbiAgY2FsbFJ1bnRpbWVDYWxsYmFja3MoX19BVFBSRVJVTl9fKTtcclxufVxyXG5cclxuZnVuY3Rpb24gaW5pdFJ1bnRpbWUoKSB7XHJcbiAgcnVudGltZUluaXRpYWxpemVkID0gdHJ1ZTtcclxuXHJcbiAgXHJcbiAgY2FsbFJ1bnRpbWVDYWxsYmFja3MoX19BVElOSVRfXyk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHBvc3RSdW4oKSB7XHJcblxyXG4gIGlmIChNb2R1bGVbJ3Bvc3RSdW4nXSkge1xyXG4gICAgaWYgKHR5cGVvZiBNb2R1bGVbJ3Bvc3RSdW4nXSA9PSAnZnVuY3Rpb24nKSBNb2R1bGVbJ3Bvc3RSdW4nXSA9IFtNb2R1bGVbJ3Bvc3RSdW4nXV07XHJcbiAgICB3aGlsZSAoTW9kdWxlWydwb3N0UnVuJ10ubGVuZ3RoKSB7XHJcbiAgICAgIGFkZE9uUG9zdFJ1bihNb2R1bGVbJ3Bvc3RSdW4nXS5zaGlmdCgpKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNhbGxSdW50aW1lQ2FsbGJhY2tzKF9fQVRQT1NUUlVOX18pO1xyXG59XHJcblxyXG5mdW5jdGlvbiBhZGRPblByZVJ1bihjYikge1xyXG4gIF9fQVRQUkVSVU5fXy51bnNoaWZ0KGNiKTtcclxufVxyXG5cclxuZnVuY3Rpb24gYWRkT25Jbml0KGNiKSB7XHJcbiAgX19BVElOSVRfXy51bnNoaWZ0KGNiKTtcclxufVxyXG5cclxuZnVuY3Rpb24gYWRkT25FeGl0KGNiKSB7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGFkZE9uUG9zdFJ1bihjYikge1xyXG4gIF9fQVRQT1NUUlVOX18udW5zaGlmdChjYik7XHJcbn1cclxuXHJcbi8vIGluY2x1ZGU6IHJ1bnRpbWVfbWF0aC5qc1xyXG4vLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9NYXRoL2ltdWxcclxuXHJcbi8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL01hdGgvZnJvdW5kXHJcblxyXG4vLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9NYXRoL2NsejMyXHJcblxyXG4vLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9NYXRoL3RydW5jXHJcblxyXG4vLyBlbmQgaW5jbHVkZTogcnVudGltZV9tYXRoLmpzXHJcbi8vIEEgY291bnRlciBvZiBkZXBlbmRlbmNpZXMgZm9yIGNhbGxpbmcgcnVuKCkuIElmIHdlIG5lZWQgdG9cclxuLy8gZG8gYXN5bmNocm9ub3VzIHdvcmsgYmVmb3JlIHJ1bm5pbmcsIGluY3JlbWVudCB0aGlzIGFuZFxyXG4vLyBkZWNyZW1lbnQgaXQuIEluY3JlbWVudGluZyBtdXN0IGhhcHBlbiBpbiBhIHBsYWNlIGxpa2VcclxuLy8gTW9kdWxlLnByZVJ1biAodXNlZCBieSBlbWNjIHRvIGFkZCBmaWxlIHByZWxvYWRpbmcpLlxyXG4vLyBOb3RlIHRoYXQgeW91IGNhbiBhZGQgZGVwZW5kZW5jaWVzIGluIHByZVJ1biwgZXZlbiB0aG91Z2hcclxuLy8gaXQgaGFwcGVucyByaWdodCBiZWZvcmUgcnVuIC0gcnVuIHdpbGwgYmUgcG9zdHBvbmVkIHVudGlsXHJcbi8vIHRoZSBkZXBlbmRlbmNpZXMgYXJlIG1ldC5cclxudmFyIHJ1bkRlcGVuZGVuY2llcyA9IDA7XHJcbnZhciBydW5EZXBlbmRlbmN5V2F0Y2hlciA9IG51bGw7XHJcbnZhciBkZXBlbmRlbmNpZXNGdWxmaWxsZWQgPSBudWxsOyAvLyBvdmVycmlkZGVuIHRvIHRha2UgZGlmZmVyZW50IGFjdGlvbnMgd2hlbiBhbGwgcnVuIGRlcGVuZGVuY2llcyBhcmUgZnVsZmlsbGVkXHJcblxyXG5mdW5jdGlvbiBnZXRVbmlxdWVSdW5EZXBlbmRlbmN5KGlkKSB7XHJcbiAgcmV0dXJuIGlkO1xyXG59XHJcblxyXG5mdW5jdGlvbiBhZGRSdW5EZXBlbmRlbmN5KGlkKSB7XHJcbiAgcnVuRGVwZW5kZW5jaWVzKys7XHJcblxyXG4gIGlmIChNb2R1bGVbJ21vbml0b3JSdW5EZXBlbmRlbmNpZXMnXSkge1xyXG4gICAgTW9kdWxlWydtb25pdG9yUnVuRGVwZW5kZW5jaWVzJ10ocnVuRGVwZW5kZW5jaWVzKTtcclxuICB9XHJcblxyXG59XHJcblxyXG5mdW5jdGlvbiByZW1vdmVSdW5EZXBlbmRlbmN5KGlkKSB7XHJcbiAgcnVuRGVwZW5kZW5jaWVzLS07XHJcblxyXG4gIGlmIChNb2R1bGVbJ21vbml0b3JSdW5EZXBlbmRlbmNpZXMnXSkge1xyXG4gICAgTW9kdWxlWydtb25pdG9yUnVuRGVwZW5kZW5jaWVzJ10ocnVuRGVwZW5kZW5jaWVzKTtcclxuICB9XHJcblxyXG4gIGlmIChydW5EZXBlbmRlbmNpZXMgPT0gMCkge1xyXG4gICAgaWYgKHJ1bkRlcGVuZGVuY3lXYXRjaGVyICE9PSBudWxsKSB7XHJcbiAgICAgIGNsZWFySW50ZXJ2YWwocnVuRGVwZW5kZW5jeVdhdGNoZXIpO1xyXG4gICAgICBydW5EZXBlbmRlbmN5V2F0Y2hlciA9IG51bGw7XHJcbiAgICB9XHJcbiAgICBpZiAoZGVwZW5kZW5jaWVzRnVsZmlsbGVkKSB7XHJcbiAgICAgIHZhciBjYWxsYmFjayA9IGRlcGVuZGVuY2llc0Z1bGZpbGxlZDtcclxuICAgICAgZGVwZW5kZW5jaWVzRnVsZmlsbGVkID0gbnVsbDtcclxuICAgICAgY2FsbGJhY2soKTsgLy8gY2FuIGFkZCBhbm90aGVyIGRlcGVuZGVuY2llc0Z1bGZpbGxlZFxyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxuLyoqIEBwYXJhbSB7c3RyaW5nfG51bWJlcj19IHdoYXQgKi9cclxuZnVuY3Rpb24gYWJvcnQod2hhdCkge1xyXG4gIGlmIChNb2R1bGVbJ29uQWJvcnQnXSkge1xyXG4gICAgTW9kdWxlWydvbkFib3J0J10od2hhdCk7XHJcbiAgfVxyXG5cclxuICB3aGF0ID0gJ0Fib3J0ZWQoJyArIHdoYXQgKyAnKSc7XHJcbiAgLy8gVE9ETyhzYmMpOiBTaG91bGQgd2UgcmVtb3ZlIHByaW50aW5nIGFuZCBsZWF2ZSBpdCB1cCB0byB3aG9ldmVyXHJcbiAgLy8gY2F0Y2hlcyB0aGUgZXhjZXB0aW9uP1xyXG4gIGVycih3aGF0KTtcclxuXHJcbiAgQUJPUlQgPSB0cnVlO1xyXG4gIEVYSVRTVEFUVVMgPSAxO1xyXG5cclxuICB3aGF0ICs9ICcuIEJ1aWxkIHdpdGggLXNBU1NFUlRJT05TIGZvciBtb3JlIGluZm8uJztcclxuXHJcbiAgLy8gVXNlIGEgd2FzbSBydW50aW1lIGVycm9yLCBiZWNhdXNlIGEgSlMgZXJyb3IgbWlnaHQgYmUgc2VlbiBhcyBhIGZvcmVpZ25cclxuICAvLyBleGNlcHRpb24sIHdoaWNoIG1lYW5zIHdlJ2QgcnVuIGRlc3RydWN0b3JzIG9uIGl0LiBXZSBuZWVkIHRoZSBlcnJvciB0b1xyXG4gIC8vIHNpbXBseSBtYWtlIHRoZSBwcm9ncmFtIHN0b3AuXHJcbiAgLy8gRklYTUUgVGhpcyBhcHByb2FjaCBkb2VzIG5vdCB3b3JrIGluIFdhc20gRUggYmVjYXVzZSBpdCBjdXJyZW50bHkgZG9lcyBub3QgYXNzdW1lXHJcbiAgLy8gYWxsIFJ1bnRpbWVFcnJvcnMgYXJlIGZyb20gdHJhcHM7IGl0IGRlY2lkZXMgd2hldGhlciBhIFJ1bnRpbWVFcnJvciBpcyBmcm9tXHJcbiAgLy8gYSB0cmFwIG9yIG5vdCBiYXNlZCBvbiBhIGhpZGRlbiBmaWVsZCB3aXRoaW4gdGhlIG9iamVjdC4gU28gYXQgdGhlIG1vbWVudFxyXG4gIC8vIHdlIGRvbid0IGhhdmUgYSB3YXkgb2YgdGhyb3dpbmcgYSB3YXNtIHRyYXAgZnJvbSBKUy4gVE9ETyBNYWtlIGEgSlMgQVBJIHRoYXRcclxuICAvLyBhbGxvd3MgdGhpcyBpbiB0aGUgd2FzbSBzcGVjLlxyXG5cclxuICAvLyBTdXBwcmVzcyBjbG9zdXJlIGNvbXBpbGVyIHdhcm5pbmcgaGVyZS4gQ2xvc3VyZSBjb21waWxlcidzIGJ1aWx0aW4gZXh0ZXJuXHJcbiAgLy8gZGVmaW50aW9uIGZvciBXZWJBc3NlbWJseS5SdW50aW1lRXJyb3IgY2xhaW1zIGl0IHRha2VzIG5vIGFyZ3VtZW50cyBldmVuXHJcbiAgLy8gdGhvdWdoIGl0IGNhbi5cclxuICAvLyBUT0RPKGh0dHBzOi8vZ2l0aHViLmNvbS9nb29nbGUvY2xvc3VyZS1jb21waWxlci9wdWxsLzM5MTMpOiBSZW1vdmUgaWYvd2hlbiB1cHN0cmVhbSBjbG9zdXJlIGdldHMgZml4ZWQuXHJcbiAgLyoqIEBzdXBwcmVzcyB7Y2hlY2tUeXBlc30gKi9cclxuICB2YXIgZSA9IG5ldyBXZWJBc3NlbWJseS5SdW50aW1lRXJyb3Iod2hhdCk7XHJcblxyXG4gIHJlYWR5UHJvbWlzZVJlamVjdChlKTtcclxuICAvLyBUaHJvdyB0aGUgZXJyb3Igd2hldGhlciBvciBub3QgTU9EVUxBUklaRSBpcyBzZXQgYmVjYXVzZSBhYm9ydCBpcyB1c2VkXHJcbiAgLy8gaW4gY29kZSBwYXRocyBhcGFydCBmcm9tIGluc3RhbnRpYXRpb24gd2hlcmUgYW4gZXhjZXB0aW9uIGlzIGV4cGVjdGVkXHJcbiAgLy8gdG8gYmUgdGhyb3duIHdoZW4gYWJvcnQgaXMgY2FsbGVkLlxyXG4gIHRocm93IGU7XHJcbn1cclxuXHJcbi8vIGluY2x1ZGU6IG1lbW9yeXByb2ZpbGVyLmpzXHJcbi8vIGVuZCBpbmNsdWRlOiBtZW1vcnlwcm9maWxlci5qc1xyXG4vLyBpbmNsdWRlOiBVUklVdGlscy5qc1xyXG4vLyBQcmVmaXggb2YgZGF0YSBVUklzIGVtaXR0ZWQgYnkgU0lOR0xFX0ZJTEUgYW5kIHJlbGF0ZWQgb3B0aW9ucy5cclxudmFyIGRhdGFVUklQcmVmaXggPSAnZGF0YTphcHBsaWNhdGlvbi9vY3RldC1zdHJlYW07YmFzZTY0LCc7XHJcblxyXG4vLyBJbmRpY2F0ZXMgd2hldGhlciBmaWxlbmFtZSBpcyBhIGJhc2U2NCBkYXRhIFVSSS5cclxuZnVuY3Rpb24gaXNEYXRhVVJJKGZpbGVuYW1lKSB7XHJcbiAgLy8gUHJlZml4IG9mIGRhdGEgVVJJcyBlbWl0dGVkIGJ5IFNJTkdMRV9GSUxFIGFuZCByZWxhdGVkIG9wdGlvbnMuXHJcbiAgcmV0dXJuIGZpbGVuYW1lLnN0YXJ0c1dpdGgoZGF0YVVSSVByZWZpeCk7XHJcbn1cclxuXHJcbi8vIEluZGljYXRlcyB3aGV0aGVyIGZpbGVuYW1lIGlzIGRlbGl2ZXJlZCB2aWEgZmlsZSBwcm90b2NvbCAoYXMgb3Bwb3NlZCB0byBodHRwL2h0dHBzKVxyXG5mdW5jdGlvbiBpc0ZpbGVVUkkoZmlsZW5hbWUpIHtcclxuICByZXR1cm4gZmlsZW5hbWUuc3RhcnRzV2l0aCgnZmlsZTovLycpO1xyXG59XHJcblxyXG4vLyBlbmQgaW5jbHVkZTogVVJJVXRpbHMuanNcclxuLy8gaW5jbHVkZTogcnVudGltZV9leGNlcHRpb25zLmpzXHJcbi8vIGVuZCBpbmNsdWRlOiBydW50aW1lX2V4Y2VwdGlvbnMuanNcclxudmFyIHdhc21CaW5hcnlGaWxlO1xyXG4gIHdhc21CaW5hcnlGaWxlID0gJ3dhc21EYnNjYW4ud2FzbSc7XHJcbiAgaWYgKCFpc0RhdGFVUkkod2FzbUJpbmFyeUZpbGUpKSB7XHJcbiAgICB3YXNtQmluYXJ5RmlsZSA9IGxvY2F0ZUZpbGUod2FzbUJpbmFyeUZpbGUpO1xyXG4gIH1cclxuXHJcbmZ1bmN0aW9uIGdldEJpbmFyeShmaWxlKSB7XHJcbiAgdHJ5IHtcclxuICAgIGlmIChmaWxlID09IHdhc21CaW5hcnlGaWxlICYmIHdhc21CaW5hcnkpIHtcclxuICAgICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KHdhc21CaW5hcnkpO1xyXG4gICAgfVxyXG4gICAgaWYgKHJlYWRCaW5hcnkpIHtcclxuICAgICAgcmV0dXJuIHJlYWRCaW5hcnkoZmlsZSk7XHJcbiAgICB9XHJcbiAgICB0aHJvdyBcImJvdGggYXN5bmMgYW5kIHN5bmMgZmV0Y2hpbmcgb2YgdGhlIHdhc20gZmFpbGVkXCI7XHJcbiAgfVxyXG4gIGNhdGNoIChlcnIpIHtcclxuICAgIGFib3J0KGVycik7XHJcbiAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBnZXRCaW5hcnlQcm9taXNlKGJpbmFyeUZpbGUpIHtcclxuICAvLyBJZiB3ZSBkb24ndCBoYXZlIHRoZSBiaW5hcnkgeWV0LCB0cnkgdG8gbG9hZCBpdCBhc3luY2hyb25vdXNseS5cclxuICAvLyBGZXRjaCBoYXMgc29tZSBhZGRpdGlvbmFsIHJlc3RyaWN0aW9ucyBvdmVyIFhIUiwgbGlrZSBpdCBjYW4ndCBiZSB1c2VkIG9uIGEgZmlsZTovLyB1cmwuXHJcbiAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9naXRodWIvZmV0Y2gvcHVsbC85MiNpc3N1ZWNvbW1lbnQtMTQwNjY1OTMyXHJcbiAgLy8gQ29yZG92YSBvciBFbGVjdHJvbiBhcHBzIGFyZSB0eXBpY2FsbHkgbG9hZGVkIGZyb20gYSBmaWxlOi8vIHVybC5cclxuICAvLyBTbyB1c2UgZmV0Y2ggaWYgaXQgaXMgYXZhaWxhYmxlIGFuZCB0aGUgdXJsIGlzIG5vdCBhIGZpbGUsIG90aGVyd2lzZSBmYWxsIGJhY2sgdG8gWEhSLlxyXG4gIGlmICghd2FzbUJpbmFyeSAmJiAoRU5WSVJPTk1FTlRfSVNfV0VCIHx8IEVOVklST05NRU5UX0lTX1dPUktFUikpIHtcclxuICAgIGlmICh0eXBlb2YgZmV0Y2ggPT0gJ2Z1bmN0aW9uJ1xyXG4gICAgKSB7XHJcbiAgICAgIHJldHVybiBmZXRjaChiaW5hcnlGaWxlLCB7IGNyZWRlbnRpYWxzOiAnc2FtZS1vcmlnaW4nIH0pLnRoZW4oZnVuY3Rpb24ocmVzcG9uc2UpIHtcclxuICAgICAgICBpZiAoIXJlc3BvbnNlWydvayddKSB7XHJcbiAgICAgICAgICB0aHJvdyBcImZhaWxlZCB0byBsb2FkIHdhc20gYmluYXJ5IGZpbGUgYXQgJ1wiICsgYmluYXJ5RmlsZSArIFwiJ1wiO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmVzcG9uc2VbJ2FycmF5QnVmZmVyJ10oKTtcclxuICAgICAgfSkuY2F0Y2goZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgcmV0dXJuIGdldEJpbmFyeShiaW5hcnlGaWxlKTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBPdGhlcndpc2UsIGdldEJpbmFyeSBzaG91bGQgYmUgYWJsZSB0byBnZXQgaXQgc3luY2hyb25vdXNseVxyXG4gIHJldHVybiBQcm9taXNlLnJlc29sdmUoKS50aGVuKGZ1bmN0aW9uKCkgeyByZXR1cm4gZ2V0QmluYXJ5KGJpbmFyeUZpbGUpOyB9KTtcclxufVxyXG5cclxuZnVuY3Rpb24gaW5zdGFudGlhdGVBcnJheUJ1ZmZlcihiaW5hcnlGaWxlLCBpbXBvcnRzLCByZWNlaXZlcikge1xyXG4gIHJldHVybiBnZXRCaW5hcnlQcm9taXNlKGJpbmFyeUZpbGUpLnRoZW4oZnVuY3Rpb24oYmluYXJ5KSB7XHJcbiAgICByZXR1cm4gV2ViQXNzZW1ibHkuaW5zdGFudGlhdGUoYmluYXJ5LCBpbXBvcnRzKTtcclxuICB9KS50aGVuKGZ1bmN0aW9uIChpbnN0YW5jZSkge1xyXG4gICAgcmV0dXJuIGluc3RhbmNlO1xyXG4gIH0pLnRoZW4ocmVjZWl2ZXIsIGZ1bmN0aW9uKHJlYXNvbikge1xyXG4gICAgZXJyKCdmYWlsZWQgdG8gYXN5bmNocm9ub3VzbHkgcHJlcGFyZSB3YXNtOiAnICsgcmVhc29uKTtcclxuXHJcbiAgICBhYm9ydChyZWFzb24pO1xyXG4gIH0pO1xyXG59XHJcblxyXG5mdW5jdGlvbiBpbnN0YW50aWF0ZUFzeW5jKGJpbmFyeSwgYmluYXJ5RmlsZSwgaW1wb3J0cywgY2FsbGJhY2spIHtcclxuICBpZiAoIWJpbmFyeSAmJlxyXG4gICAgICB0eXBlb2YgV2ViQXNzZW1ibHkuaW5zdGFudGlhdGVTdHJlYW1pbmcgPT0gJ2Z1bmN0aW9uJyAmJlxyXG4gICAgICAhaXNEYXRhVVJJKGJpbmFyeUZpbGUpICYmXHJcbiAgICAgIHR5cGVvZiBmZXRjaCA9PSAnZnVuY3Rpb24nKSB7XHJcbiAgICByZXR1cm4gZmV0Y2goYmluYXJ5RmlsZSwgeyBjcmVkZW50aWFsczogJ3NhbWUtb3JpZ2luJyB9KS50aGVuKGZ1bmN0aW9uKHJlc3BvbnNlKSB7XHJcbiAgICAgIC8vIFN1cHByZXNzIGNsb3N1cmUgd2FybmluZyBoZXJlIHNpbmNlIHRoZSB1cHN0cmVhbSBkZWZpbml0aW9uIGZvclxyXG4gICAgICAvLyBpbnN0YW50aWF0ZVN0cmVhbWluZyBvbmx5IGFsbG93cyBQcm9taXNlPFJlcHNwb25zZT4gcmF0aGVyIHRoYW5cclxuICAgICAgLy8gYW4gYWN0dWFsIFJlc3BvbnNlLlxyXG4gICAgICAvLyBUT0RPKGh0dHBzOi8vZ2l0aHViLmNvbS9nb29nbGUvY2xvc3VyZS1jb21waWxlci9wdWxsLzM5MTMpOiBSZW1vdmUgaWYvd2hlbiB1cHN0cmVhbSBjbG9zdXJlIGlzIGZpeGVkLlxyXG4gICAgICAvKiogQHN1cHByZXNzIHtjaGVja1R5cGVzfSAqL1xyXG4gICAgICB2YXIgcmVzdWx0ID0gV2ViQXNzZW1ibHkuaW5zdGFudGlhdGVTdHJlYW1pbmcocmVzcG9uc2UsIGltcG9ydHMpO1xyXG5cclxuICAgICAgcmV0dXJuIHJlc3VsdC50aGVuKFxyXG4gICAgICAgIGNhbGxiYWNrLFxyXG4gICAgICAgIGZ1bmN0aW9uKHJlYXNvbikge1xyXG4gICAgICAgICAgLy8gV2UgZXhwZWN0IHRoZSBtb3N0IGNvbW1vbiBmYWlsdXJlIGNhdXNlIHRvIGJlIGEgYmFkIE1JTUUgdHlwZSBmb3IgdGhlIGJpbmFyeSxcclxuICAgICAgICAgIC8vIGluIHdoaWNoIGNhc2UgZmFsbGluZyBiYWNrIHRvIEFycmF5QnVmZmVyIGluc3RhbnRpYXRpb24gc2hvdWxkIHdvcmsuXHJcbiAgICAgICAgICBlcnIoJ3dhc20gc3RyZWFtaW5nIGNvbXBpbGUgZmFpbGVkOiAnICsgcmVhc29uKTtcclxuICAgICAgICAgIGVycignZmFsbGluZyBiYWNrIHRvIEFycmF5QnVmZmVyIGluc3RhbnRpYXRpb24nKTtcclxuICAgICAgICAgIHJldHVybiBpbnN0YW50aWF0ZUFycmF5QnVmZmVyKGJpbmFyeUZpbGUsIGltcG9ydHMsIGNhbGxiYWNrKTtcclxuICAgICAgICB9KTtcclxuICAgIH0pO1xyXG4gIH0gZWxzZSB7XHJcbiAgICByZXR1cm4gaW5zdGFudGlhdGVBcnJheUJ1ZmZlcihiaW5hcnlGaWxlLCBpbXBvcnRzLCBjYWxsYmFjayk7XHJcbiAgfVxyXG59XHJcblxyXG4vLyBDcmVhdGUgdGhlIHdhc20gaW5zdGFuY2UuXHJcbi8vIFJlY2VpdmVzIHRoZSB3YXNtIGltcG9ydHMsIHJldHVybnMgdGhlIGV4cG9ydHMuXHJcbmZ1bmN0aW9uIGNyZWF0ZVdhc20oKSB7XHJcbiAgLy8gcHJlcGFyZSBpbXBvcnRzXHJcbiAgdmFyIGluZm8gPSB7XHJcbiAgICAnZW52Jzogd2FzbUltcG9ydHMsXHJcbiAgICAnd2FzaV9zbmFwc2hvdF9wcmV2aWV3MSc6IHdhc21JbXBvcnRzLFxyXG4gIH07XHJcbiAgLy8gTG9hZCB0aGUgd2FzbSBtb2R1bGUgYW5kIGNyZWF0ZSBhbiBpbnN0YW5jZSBvZiB1c2luZyBuYXRpdmUgc3VwcG9ydCBpbiB0aGUgSlMgZW5naW5lLlxyXG4gIC8vIGhhbmRsZSBhIGdlbmVyYXRlZCB3YXNtIGluc3RhbmNlLCByZWNlaXZpbmcgaXRzIGV4cG9ydHMgYW5kXHJcbiAgLy8gcGVyZm9ybWluZyBvdGhlciBuZWNlc3Nhcnkgc2V0dXBcclxuICAvKiogQHBhcmFtIHtXZWJBc3NlbWJseS5Nb2R1bGU9fSBtb2R1bGUqL1xyXG4gIGZ1bmN0aW9uIHJlY2VpdmVJbnN0YW5jZShpbnN0YW5jZSwgbW9kdWxlKSB7XHJcbiAgICB2YXIgZXhwb3J0cyA9IGluc3RhbmNlLmV4cG9ydHM7XHJcblxyXG4gICAgTW9kdWxlWydhc20nXSA9IGV4cG9ydHM7XHJcblxyXG4gICAgd2FzbU1lbW9yeSA9IE1vZHVsZVsnYXNtJ11bJ21lbW9yeSddO1xyXG4gICAgdXBkYXRlTWVtb3J5Vmlld3MoKTtcclxuXHJcbiAgICB3YXNtVGFibGUgPSBNb2R1bGVbJ2FzbSddWydfX2luZGlyZWN0X2Z1bmN0aW9uX3RhYmxlJ107XHJcblxyXG4gICAgYWRkT25Jbml0KE1vZHVsZVsnYXNtJ11bJ19fd2FzbV9jYWxsX2N0b3JzJ10pO1xyXG5cclxuICAgIHJlbW92ZVJ1bkRlcGVuZGVuY3koJ3dhc20taW5zdGFudGlhdGUnKTtcclxuXHJcbiAgICByZXR1cm4gZXhwb3J0cztcclxuICB9XHJcbiAgLy8gd2FpdCBmb3IgdGhlIHB0aHJlYWQgcG9vbCAoaWYgYW55KVxyXG4gIGFkZFJ1bkRlcGVuZGVuY3koJ3dhc20taW5zdGFudGlhdGUnKTtcclxuXHJcbiAgLy8gUHJlZmVyIHN0cmVhbWluZyBpbnN0YW50aWF0aW9uIGlmIGF2YWlsYWJsZS5cclxuICBmdW5jdGlvbiByZWNlaXZlSW5zdGFudGlhdGlvblJlc3VsdChyZXN1bHQpIHtcclxuICAgIC8vICdyZXN1bHQnIGlzIGEgUmVzdWx0T2JqZWN0IG9iamVjdCB3aGljaCBoYXMgYm90aCB0aGUgbW9kdWxlIGFuZCBpbnN0YW5jZS5cclxuICAgIC8vIHJlY2VpdmVJbnN0YW5jZSgpIHdpbGwgc3dhcCBpbiB0aGUgZXhwb3J0cyAodG8gTW9kdWxlLmFzbSkgc28gdGhleSBjYW4gYmUgY2FsbGVkXHJcbiAgICAvLyBUT0RPOiBEdWUgdG8gQ2xvc3VyZSByZWdyZXNzaW9uIGh0dHBzOi8vZ2l0aHViLmNvbS9nb29nbGUvY2xvc3VyZS1jb21waWxlci9pc3N1ZXMvMzE5MywgdGhlIGFib3ZlIGxpbmUgbm8gbG9uZ2VyIG9wdGltaXplcyBvdXQgZG93biB0byB0aGUgZm9sbG93aW5nIGxpbmUuXHJcbiAgICAvLyBXaGVuIHRoZSByZWdyZXNzaW9uIGlzIGZpeGVkLCBjYW4gcmVzdG9yZSB0aGUgYWJvdmUgUFRIUkVBRFMtZW5hYmxlZCBwYXRoLlxyXG4gICAgcmVjZWl2ZUluc3RhbmNlKHJlc3VsdFsnaW5zdGFuY2UnXSk7XHJcbiAgfVxyXG5cclxuICAvLyBVc2VyIHNoZWxsIHBhZ2VzIGNhbiB3cml0ZSB0aGVpciBvd24gTW9kdWxlLmluc3RhbnRpYXRlV2FzbSA9IGZ1bmN0aW9uKGltcG9ydHMsIHN1Y2Nlc3NDYWxsYmFjaykgY2FsbGJhY2tcclxuICAvLyB0byBtYW51YWxseSBpbnN0YW50aWF0ZSB0aGUgV2FzbSBtb2R1bGUgdGhlbXNlbHZlcy4gVGhpcyBhbGxvd3MgcGFnZXMgdG9cclxuICAvLyBydW4gdGhlIGluc3RhbnRpYXRpb24gcGFyYWxsZWwgdG8gYW55IG90aGVyIGFzeW5jIHN0YXJ0dXAgYWN0aW9ucyB0aGV5IGFyZVxyXG4gIC8vIHBlcmZvcm1pbmcuXHJcbiAgLy8gQWxzbyBwdGhyZWFkcyBhbmQgd2FzbSB3b3JrZXJzIGluaXRpYWxpemUgdGhlIHdhc20gaW5zdGFuY2UgdGhyb3VnaCB0aGlzXHJcbiAgLy8gcGF0aC5cclxuICBpZiAoTW9kdWxlWydpbnN0YW50aWF0ZVdhc20nXSkge1xyXG5cclxuICAgIHRyeSB7XHJcbiAgICAgIHJldHVybiBNb2R1bGVbJ2luc3RhbnRpYXRlV2FzbSddKGluZm8sIHJlY2VpdmVJbnN0YW5jZSk7XHJcbiAgICB9IGNhdGNoKGUpIHtcclxuICAgICAgZXJyKCdNb2R1bGUuaW5zdGFudGlhdGVXYXNtIGNhbGxiYWNrIGZhaWxlZCB3aXRoIGVycm9yOiAnICsgZSk7XHJcbiAgICAgICAgLy8gSWYgaW5zdGFudGlhdGlvbiBmYWlscywgcmVqZWN0IHRoZSBtb2R1bGUgcmVhZHkgcHJvbWlzZS5cclxuICAgICAgICByZWFkeVByb21pc2VSZWplY3QoZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBJZiBpbnN0YW50aWF0aW9uIGZhaWxzLCByZWplY3QgdGhlIG1vZHVsZSByZWFkeSBwcm9taXNlLlxyXG4gIGluc3RhbnRpYXRlQXN5bmMod2FzbUJpbmFyeSwgd2FzbUJpbmFyeUZpbGUsIGluZm8sIHJlY2VpdmVJbnN0YW50aWF0aW9uUmVzdWx0KS5jYXRjaChyZWFkeVByb21pc2VSZWplY3QpO1xyXG4gIHJldHVybiB7fTsgLy8gbm8gZXhwb3J0cyB5ZXQ7IHdlJ2xsIGZpbGwgdGhlbSBpbiBsYXRlclxyXG59XHJcblxyXG4vLyBHbG9iYWxzIHVzZWQgYnkgSlMgaTY0IGNvbnZlcnNpb25zIChzZWUgbWFrZVNldFZhbHVlKVxyXG52YXIgdGVtcERvdWJsZTtcclxudmFyIHRlbXBJNjQ7XHJcblxyXG4vLyBpbmNsdWRlOiBydW50aW1lX2RlYnVnLmpzXHJcbi8vIGVuZCBpbmNsdWRlOiBydW50aW1lX2RlYnVnLmpzXHJcbi8vID09PSBCb2R5ID09PVxyXG5cclxuXHJcbi8vIGVuZCBpbmNsdWRlOiBwcmVhbWJsZS5qc1xyXG5cclxuICAvKiogQGNvbnN0cnVjdG9yICovXHJcbiAgZnVuY3Rpb24gRXhpdFN0YXR1cyhzdGF0dXMpIHtcclxuICAgICAgdGhpcy5uYW1lID0gJ0V4aXRTdGF0dXMnO1xyXG4gICAgICB0aGlzLm1lc3NhZ2UgPSAnUHJvZ3JhbSB0ZXJtaW5hdGVkIHdpdGggZXhpdCgnICsgc3RhdHVzICsgJyknO1xyXG4gICAgICB0aGlzLnN0YXR1cyA9IHN0YXR1cztcclxuICAgIH1cclxuXHJcbiAgZnVuY3Rpb24gY2FsbFJ1bnRpbWVDYWxsYmFja3MoY2FsbGJhY2tzKSB7XHJcbiAgICAgIHdoaWxlIChjYWxsYmFja3MubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIC8vIFBhc3MgdGhlIG1vZHVsZSBhcyB0aGUgZmlyc3QgYXJndW1lbnQuXHJcbiAgICAgICAgY2FsbGJhY2tzLnNoaWZ0KCkoTW9kdWxlKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICBcclxuICAgIC8qKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHB0clxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHR5cGVcclxuICAgICAqL1xyXG4gIGZ1bmN0aW9uIGdldFZhbHVlKHB0ciwgdHlwZSA9ICdpOCcpIHtcclxuICAgIGlmICh0eXBlLmVuZHNXaXRoKCcqJykpIHR5cGUgPSAnKic7XHJcbiAgICBzd2l0Y2ggKHR5cGUpIHtcclxuICAgICAgY2FzZSAnaTEnOiByZXR1cm4gSEVBUDhbKChwdHIpPj4wKV07XHJcbiAgICAgIGNhc2UgJ2k4JzogcmV0dXJuIEhFQVA4WygocHRyKT4+MCldO1xyXG4gICAgICBjYXNlICdpMTYnOiByZXR1cm4gSEVBUDE2WygocHRyKT4+MSldO1xyXG4gICAgICBjYXNlICdpMzInOiByZXR1cm4gSEVBUDMyWygocHRyKT4+MildO1xyXG4gICAgICBjYXNlICdpNjQnOiByZXR1cm4gSEVBUDMyWygocHRyKT4+MildO1xyXG4gICAgICBjYXNlICdmbG9hdCc6IHJldHVybiBIRUFQRjMyWygocHRyKT4+MildO1xyXG4gICAgICBjYXNlICdkb3VibGUnOiByZXR1cm4gSEVBUEY2NFsoKHB0cik+PjMpXTtcclxuICAgICAgY2FzZSAnKic6IHJldHVybiBIRUFQVTMyWygocHRyKT4+MildO1xyXG4gICAgICBkZWZhdWx0OiBhYm9ydCgnaW52YWxpZCB0eXBlIGZvciBnZXRWYWx1ZTogJyArIHR5cGUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgXHJcbiAgICAvKipcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBwdHJcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZVxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHR5cGVcclxuICAgICAqL1xyXG4gIGZ1bmN0aW9uIHNldFZhbHVlKHB0ciwgdmFsdWUsIHR5cGUgPSAnaTgnKSB7XHJcbiAgICBpZiAodHlwZS5lbmRzV2l0aCgnKicpKSB0eXBlID0gJyonO1xyXG4gICAgc3dpdGNoICh0eXBlKSB7XHJcbiAgICAgIGNhc2UgJ2kxJzogSEVBUDhbKChwdHIpPj4wKV0gPSB2YWx1ZTsgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ2k4JzogSEVBUDhbKChwdHIpPj4wKV0gPSB2YWx1ZTsgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ2kxNic6IEhFQVAxNlsoKHB0cik+PjEpXSA9IHZhbHVlOyBicmVhaztcclxuICAgICAgY2FzZSAnaTMyJzogSEVBUDMyWygocHRyKT4+MildID0gdmFsdWU7IGJyZWFrO1xyXG4gICAgICBjYXNlICdpNjQnOiAodGVtcEk2NCA9IFt2YWx1ZT4+PjAsKHRlbXBEb3VibGU9dmFsdWUsKCsoTWF0aC5hYnModGVtcERvdWJsZSkpKSA+PSAxLjAgPyAodGVtcERvdWJsZSA+IDAuMCA/ICgoTWF0aC5taW4oKCsoTWF0aC5mbG9vcigodGVtcERvdWJsZSkvNDI5NDk2NzI5Ni4wKSkpLCA0Mjk0OTY3Mjk1LjApKXwwKT4+PjAgOiAofn4oKCsoTWF0aC5jZWlsKCh0ZW1wRG91YmxlIC0gKygoKH5+KHRlbXBEb3VibGUpKSk+Pj4wKSkvNDI5NDk2NzI5Ni4wKSkpKSk+Pj4wKSA6IDApXSxIRUFQMzJbKChwdHIpPj4yKV0gPSB0ZW1wSTY0WzBdLEhFQVAzMlsoKChwdHIpKyg0KSk+PjIpXSA9IHRlbXBJNjRbMV0pOyBicmVhaztcclxuICAgICAgY2FzZSAnZmxvYXQnOiBIRUFQRjMyWygocHRyKT4+MildID0gdmFsdWU7IGJyZWFrO1xyXG4gICAgICBjYXNlICdkb3VibGUnOiBIRUFQRjY0WygocHRyKT4+MyldID0gdmFsdWU7IGJyZWFrO1xyXG4gICAgICBjYXNlICcqJzogSEVBUFUzMlsoKHB0cik+PjIpXSA9IHZhbHVlOyBicmVhaztcclxuICAgICAgZGVmYXVsdDogYWJvcnQoJ2ludmFsaWQgdHlwZSBmb3Igc2V0VmFsdWU6ICcgKyB0eXBlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKiBAY29uc3RydWN0b3IgKi9cclxuICBmdW5jdGlvbiBFeGNlcHRpb25JbmZvKGV4Y1B0cikge1xyXG4gICAgICB0aGlzLmV4Y1B0ciA9IGV4Y1B0cjtcclxuICAgICAgdGhpcy5wdHIgPSBleGNQdHIgLSAyNDtcclxuICBcclxuICAgICAgdGhpcy5zZXRfdHlwZSA9IGZ1bmN0aW9uKHR5cGUpIHtcclxuICAgICAgICBIRUFQVTMyWygoKHRoaXMucHRyKSsoNCkpPj4yKV0gPSB0eXBlO1xyXG4gICAgICB9O1xyXG4gIFxyXG4gICAgICB0aGlzLmdldF90eXBlID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgcmV0dXJuIEhFQVBVMzJbKCgodGhpcy5wdHIpKyg0KSk+PjIpXTtcclxuICAgICAgfTtcclxuICBcclxuICAgICAgdGhpcy5zZXRfZGVzdHJ1Y3RvciA9IGZ1bmN0aW9uKGRlc3RydWN0b3IpIHtcclxuICAgICAgICBIRUFQVTMyWygoKHRoaXMucHRyKSsoOCkpPj4yKV0gPSBkZXN0cnVjdG9yO1xyXG4gICAgICB9O1xyXG4gIFxyXG4gICAgICB0aGlzLmdldF9kZXN0cnVjdG9yID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgcmV0dXJuIEhFQVBVMzJbKCgodGhpcy5wdHIpKyg4KSk+PjIpXTtcclxuICAgICAgfTtcclxuICBcclxuICAgICAgdGhpcy5zZXRfY2F1Z2h0ID0gZnVuY3Rpb24gKGNhdWdodCkge1xyXG4gICAgICAgIGNhdWdodCA9IGNhdWdodCA/IDEgOiAwO1xyXG4gICAgICAgIEhFQVA4WygoKHRoaXMucHRyKSsoMTIpKT4+MCldID0gY2F1Z2h0O1xyXG4gICAgICB9O1xyXG4gIFxyXG4gICAgICB0aGlzLmdldF9jYXVnaHQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIEhFQVA4WygoKHRoaXMucHRyKSsoMTIpKT4+MCldICE9IDA7XHJcbiAgICAgIH07XHJcbiAgXHJcbiAgICAgIHRoaXMuc2V0X3JldGhyb3duID0gZnVuY3Rpb24gKHJldGhyb3duKSB7XHJcbiAgICAgICAgcmV0aHJvd24gPSByZXRocm93biA/IDEgOiAwO1xyXG4gICAgICAgIEhFQVA4WygoKHRoaXMucHRyKSsoMTMpKT4+MCldID0gcmV0aHJvd247XHJcbiAgICAgIH07XHJcbiAgXHJcbiAgICAgIHRoaXMuZ2V0X3JldGhyb3duID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiBIRUFQOFsoKCh0aGlzLnB0cikrKDEzKSk+PjApXSAhPSAwO1xyXG4gICAgICB9O1xyXG4gIFxyXG4gICAgICAvLyBJbml0aWFsaXplIG5hdGl2ZSBzdHJ1Y3R1cmUgZmllbGRzLiBTaG91bGQgYmUgY2FsbGVkIG9uY2UgYWZ0ZXIgYWxsb2NhdGVkLlxyXG4gICAgICB0aGlzLmluaXQgPSBmdW5jdGlvbih0eXBlLCBkZXN0cnVjdG9yKSB7XHJcbiAgICAgICAgdGhpcy5zZXRfYWRqdXN0ZWRfcHRyKDApO1xyXG4gICAgICAgIHRoaXMuc2V0X3R5cGUodHlwZSk7XHJcbiAgICAgICAgdGhpcy5zZXRfZGVzdHJ1Y3RvcihkZXN0cnVjdG9yKTtcclxuICAgICAgfVxyXG4gIFxyXG4gICAgICB0aGlzLnNldF9hZGp1c3RlZF9wdHIgPSBmdW5jdGlvbihhZGp1c3RlZFB0cikge1xyXG4gICAgICAgIEhFQVBVMzJbKCgodGhpcy5wdHIpKygxNikpPj4yKV0gPSBhZGp1c3RlZFB0cjtcclxuICAgICAgfTtcclxuICBcclxuICAgICAgdGhpcy5nZXRfYWRqdXN0ZWRfcHRyID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgcmV0dXJuIEhFQVBVMzJbKCgodGhpcy5wdHIpKygxNikpPj4yKV07XHJcbiAgICAgIH07XHJcbiAgXHJcbiAgICAgIC8vIEdldCBwb2ludGVyIHdoaWNoIGlzIGV4cGVjdGVkIHRvIGJlIHJlY2VpdmVkIGJ5IGNhdGNoIGNsYXVzZSBpbiBDKysgY29kZS4gSXQgbWF5IGJlIGFkanVzdGVkXHJcbiAgICAgIC8vIHdoZW4gdGhlIHBvaW50ZXIgaXMgY2FzdGVkIHRvIHNvbWUgb2YgdGhlIGV4Y2VwdGlvbiBvYmplY3QgYmFzZSBjbGFzc2VzIChlLmcuIHdoZW4gdmlydHVhbFxyXG4gICAgICAvLyBpbmhlcml0YW5jZSBpcyB1c2VkKS4gV2hlbiBhIHBvaW50ZXIgaXMgdGhyb3duIHRoaXMgbWV0aG9kIHNob3VsZCByZXR1cm4gdGhlIHRocm93biBwb2ludGVyXHJcbiAgICAgIC8vIGl0c2VsZi5cclxuICAgICAgdGhpcy5nZXRfZXhjZXB0aW9uX3B0ciA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIC8vIFdvcmsgYXJvdW5kIGEgZmFzdGNvbXAgYnVnLCB0aGlzIGNvZGUgaXMgc3RpbGwgaW5jbHVkZWQgZm9yIHNvbWUgcmVhc29uIGluIGEgYnVpbGQgd2l0aG91dFxyXG4gICAgICAgIC8vIGV4Y2VwdGlvbnMgc3VwcG9ydC5cclxuICAgICAgICB2YXIgaXNQb2ludGVyID0gX19fY3hhX2lzX3BvaW50ZXJfdHlwZSh0aGlzLmdldF90eXBlKCkpO1xyXG4gICAgICAgIGlmIChpc1BvaW50ZXIpIHtcclxuICAgICAgICAgIHJldHVybiBIRUFQVTMyWygodGhpcy5leGNQdHIpPj4yKV07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBhZGp1c3RlZCA9IHRoaXMuZ2V0X2FkanVzdGVkX3B0cigpO1xyXG4gICAgICAgIGlmIChhZGp1c3RlZCAhPT0gMCkgcmV0dXJuIGFkanVzdGVkO1xyXG4gICAgICAgIHJldHVybiB0aGlzLmV4Y1B0cjtcclxuICAgICAgfTtcclxuICAgIH1cclxuICBcclxuICB2YXIgZXhjZXB0aW9uTGFzdCA9IDA7XHJcbiAgXHJcbiAgdmFyIHVuY2F1Z2h0RXhjZXB0aW9uQ291bnQgPSAwO1xyXG4gIGZ1bmN0aW9uIF9fX2N4YV90aHJvdyhwdHIsIHR5cGUsIGRlc3RydWN0b3IpIHtcclxuICAgICAgdmFyIGluZm8gPSBuZXcgRXhjZXB0aW9uSW5mbyhwdHIpO1xyXG4gICAgICAvLyBJbml0aWFsaXplIEV4Y2VwdGlvbkluZm8gY29udGVudCBhZnRlciBpdCB3YXMgYWxsb2NhdGVkIGluIF9fY3hhX2FsbG9jYXRlX2V4Y2VwdGlvbi5cclxuICAgICAgaW5mby5pbml0KHR5cGUsIGRlc3RydWN0b3IpO1xyXG4gICAgICBleGNlcHRpb25MYXN0ID0gcHRyO1xyXG4gICAgICB1bmNhdWdodEV4Y2VwdGlvbkNvdW50Kys7XHJcbiAgICAgIHRocm93IGV4Y2VwdGlvbkxhc3Q7XHJcbiAgICB9XHJcblxyXG4gIGZ1bmN0aW9uIF9hYm9ydCgpIHtcclxuICAgICAgYWJvcnQoJycpO1xyXG4gICAgfVxyXG5cclxuICBmdW5jdGlvbiBfZW1zY3JpcHRlbl9tZW1jcHlfYmlnKGRlc3QsIHNyYywgbnVtKSB7XHJcbiAgICAgIEhFQVBVOC5jb3B5V2l0aGluKGRlc3QsIHNyYywgc3JjICsgbnVtKTtcclxuICAgIH1cclxuXHJcbiAgZnVuY3Rpb24gZ2V0SGVhcE1heCgpIHtcclxuICAgICAgLy8gU3RheSBvbmUgV2FzbSBwYWdlIHNob3J0IG9mIDRHQjogd2hpbGUgZS5nLiBDaHJvbWUgaXMgYWJsZSB0byBhbGxvY2F0ZVxyXG4gICAgICAvLyBmdWxsIDRHQiBXYXNtIG1lbW9yaWVzLCB0aGUgc2l6ZSB3aWxsIHdyYXAgYmFjayB0byAwIGJ5dGVzIGluIFdhc20gc2lkZVxyXG4gICAgICAvLyBmb3IgYW55IGNvZGUgdGhhdCBkZWFscyB3aXRoIGhlYXAgc2l6ZXMsIHdoaWNoIHdvdWxkIHJlcXVpcmUgc3BlY2lhbFxyXG4gICAgICAvLyBjYXNpbmcgYWxsIGhlYXAgc2l6ZSByZWxhdGVkIGNvZGUgdG8gdHJlYXQgMCBzcGVjaWFsbHkuXHJcbiAgICAgIHJldHVybiAyMTQ3NDgzNjQ4O1xyXG4gICAgfVxyXG4gIFxyXG4gIGZ1bmN0aW9uIGVtc2NyaXB0ZW5fcmVhbGxvY19idWZmZXIoc2l6ZSkge1xyXG4gICAgICB2YXIgYiA9IHdhc21NZW1vcnkuYnVmZmVyO1xyXG4gICAgICB0cnkge1xyXG4gICAgICAgIC8vIHJvdW5kIHNpemUgZ3JvdyByZXF1ZXN0IHVwIHRvIHdhc20gcGFnZSBzaXplIChmaXhlZCA2NEtCIHBlciBzcGVjKVxyXG4gICAgICAgIHdhc21NZW1vcnkuZ3Jvdygoc2l6ZSAtIGIuYnl0ZUxlbmd0aCArIDY1NTM1KSA+Pj4gMTYpOyAvLyAuZ3JvdygpIHRha2VzIGEgZGVsdGEgY29tcGFyZWQgdG8gdGhlIHByZXZpb3VzIHNpemVcclxuICAgICAgICB1cGRhdGVNZW1vcnlWaWV3cygpO1xyXG4gICAgICAgIHJldHVybiAxIC8qc3VjY2VzcyovO1xyXG4gICAgICB9IGNhdGNoKGUpIHtcclxuICAgICAgfVxyXG4gICAgICAvLyBpbXBsaWNpdCAwIHJldHVybiB0byBzYXZlIGNvZGUgc2l6ZSAoY2FsbGVyIHdpbGwgY2FzdCBcInVuZGVmaW5lZFwiIGludG8gMFxyXG4gICAgICAvLyBhbnlob3cpXHJcbiAgICB9XHJcbiAgZnVuY3Rpb24gX2Vtc2NyaXB0ZW5fcmVzaXplX2hlYXAocmVxdWVzdGVkU2l6ZSkge1xyXG4gICAgICB2YXIgb2xkU2l6ZSA9IEhFQVBVOC5sZW5ndGg7XHJcbiAgICAgIHJlcXVlc3RlZFNpemUgPSByZXF1ZXN0ZWRTaXplID4+PiAwO1xyXG4gICAgICAvLyBXaXRoIG11bHRpdGhyZWFkZWQgYnVpbGRzLCByYWNlcyBjYW4gaGFwcGVuIChhbm90aGVyIHRocmVhZCBtaWdodCBpbmNyZWFzZSB0aGUgc2l6ZVxyXG4gICAgICAvLyBpbiBiZXR3ZWVuKSwgc28gcmV0dXJuIGEgZmFpbHVyZSwgYW5kIGxldCB0aGUgY2FsbGVyIHJldHJ5LlxyXG4gIFxyXG4gICAgICAvLyBNZW1vcnkgcmVzaXplIHJ1bGVzOlxyXG4gICAgICAvLyAxLiAgQWx3YXlzIGluY3JlYXNlIGhlYXAgc2l6ZSB0byBhdCBsZWFzdCB0aGUgcmVxdWVzdGVkIHNpemUsIHJvdW5kZWQgdXBcclxuICAgICAgLy8gICAgIHRvIG5leHQgcGFnZSBtdWx0aXBsZS5cclxuICAgICAgLy8gMmEuIElmIE1FTU9SWV9HUk9XVEhfTElORUFSX1NURVAgPT0gLTEsIGV4Y2Vzc2l2ZWx5IHJlc2l6ZSB0aGUgaGVhcFxyXG4gICAgICAvLyAgICAgZ2VvbWV0cmljYWxseTogaW5jcmVhc2UgdGhlIGhlYXAgc2l6ZSBhY2NvcmRpbmcgdG9cclxuICAgICAgLy8gICAgIE1FTU9SWV9HUk9XVEhfR0VPTUVUUklDX1NURVAgZmFjdG9yIChkZWZhdWx0ICsyMCUpLCBBdCBtb3N0XHJcbiAgICAgIC8vICAgICBvdmVycmVzZXJ2ZSBieSBNRU1PUllfR1JPV1RIX0dFT01FVFJJQ19DQVAgYnl0ZXMgKGRlZmF1bHQgOTZNQikuXHJcbiAgICAgIC8vIDJiLiBJZiBNRU1PUllfR1JPV1RIX0xJTkVBUl9TVEVQICE9IC0xLCBleGNlc3NpdmVseSByZXNpemUgdGhlIGhlYXBcclxuICAgICAgLy8gICAgIGxpbmVhcmx5OiBpbmNyZWFzZSB0aGUgaGVhcCBzaXplIGJ5IGF0IGxlYXN0XHJcbiAgICAgIC8vICAgICBNRU1PUllfR1JPV1RIX0xJTkVBUl9TVEVQIGJ5dGVzLlxyXG4gICAgICAvLyAzLiAgTWF4IHNpemUgZm9yIHRoZSBoZWFwIGlzIGNhcHBlZCBhdCAyMDQ4TUItV0FTTV9QQUdFX1NJWkUsIG9yIGJ5XHJcbiAgICAgIC8vICAgICBNQVhJTVVNX01FTU9SWSwgb3IgYnkgQVNBTiBsaW1pdCwgZGVwZW5kaW5nIG9uIHdoaWNoIGlzIHNtYWxsZXN0XHJcbiAgICAgIC8vIDQuICBJZiB3ZSB3ZXJlIHVuYWJsZSB0byBhbGxvY2F0ZSBhcyBtdWNoIG1lbW9yeSwgaXQgbWF5IGJlIGR1ZSB0b1xyXG4gICAgICAvLyAgICAgb3Zlci1lYWdlciBkZWNpc2lvbiB0byBleGNlc3NpdmVseSByZXNlcnZlIGR1ZSB0byAoMykgYWJvdmUuXHJcbiAgICAgIC8vICAgICBIZW5jZSBpZiBhbiBhbGxvY2F0aW9uIGZhaWxzLCBjdXQgZG93biBvbiB0aGUgYW1vdW50IG9mIGV4Y2Vzc1xyXG4gICAgICAvLyAgICAgZ3Jvd3RoLCBpbiBhbiBhdHRlbXB0IHRvIHN1Y2NlZWQgdG8gcGVyZm9ybSBhIHNtYWxsZXIgYWxsb2NhdGlvbi5cclxuICBcclxuICAgICAgLy8gQSBsaW1pdCBpcyBzZXQgZm9yIGhvdyBtdWNoIHdlIGNhbiBncm93LiBXZSBzaG91bGQgbm90IGV4Y2VlZCB0aGF0XHJcbiAgICAgIC8vICh0aGUgd2FzbSBiaW5hcnkgc3BlY2lmaWVzIGl0LCBzbyBpZiB3ZSB0cmllZCwgd2UnZCBmYWlsIGFueWhvdykuXHJcbiAgICAgIHZhciBtYXhIZWFwU2l6ZSA9IGdldEhlYXBNYXgoKTtcclxuICAgICAgaWYgKHJlcXVlc3RlZFNpemUgPiBtYXhIZWFwU2l6ZSkge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgfVxyXG4gIFxyXG4gICAgICBsZXQgYWxpZ25VcCA9ICh4LCBtdWx0aXBsZSkgPT4geCArIChtdWx0aXBsZSAtIHggJSBtdWx0aXBsZSkgJSBtdWx0aXBsZTtcclxuICBcclxuICAgICAgLy8gTG9vcCB0aHJvdWdoIHBvdGVudGlhbCBoZWFwIHNpemUgaW5jcmVhc2VzLiBJZiB3ZSBhdHRlbXB0IGEgdG9vIGVhZ2VyXHJcbiAgICAgIC8vIHJlc2VydmF0aW9uIHRoYXQgZmFpbHMsIGN1dCBkb3duIG9uIHRoZSBhdHRlbXB0ZWQgc2l6ZSBhbmQgcmVzZXJ2ZSBhXHJcbiAgICAgIC8vIHNtYWxsZXIgYnVtcCBpbnN0ZWFkLiAobWF4IDMgdGltZXMsIGNob3NlbiBzb21ld2hhdCBhcmJpdHJhcmlseSlcclxuICAgICAgZm9yICh2YXIgY3V0RG93biA9IDE7IGN1dERvd24gPD0gNDsgY3V0RG93biAqPSAyKSB7XHJcbiAgICAgICAgdmFyIG92ZXJHcm93bkhlYXBTaXplID0gb2xkU2l6ZSAqICgxICsgMC4yIC8gY3V0RG93bik7IC8vIGVuc3VyZSBnZW9tZXRyaWMgZ3Jvd3RoXHJcbiAgICAgICAgLy8gYnV0IGxpbWl0IG92ZXJyZXNlcnZpbmcgKGRlZmF1bHQgdG8gY2FwcGluZyBhdCArOTZNQiBvdmVyZ3Jvd3RoIGF0IG1vc3QpXHJcbiAgICAgICAgb3Zlckdyb3duSGVhcFNpemUgPSBNYXRoLm1pbihvdmVyR3Jvd25IZWFwU2l6ZSwgcmVxdWVzdGVkU2l6ZSArIDEwMDY2MzI5NiApO1xyXG4gIFxyXG4gICAgICAgIHZhciBuZXdTaXplID0gTWF0aC5taW4obWF4SGVhcFNpemUsIGFsaWduVXAoTWF0aC5tYXgocmVxdWVzdGVkU2l6ZSwgb3Zlckdyb3duSGVhcFNpemUpLCA2NTUzNikpO1xyXG4gIFxyXG4gICAgICAgIHZhciByZXBsYWNlbWVudCA9IGVtc2NyaXB0ZW5fcmVhbGxvY19idWZmZXIobmV3U2l6ZSk7XHJcbiAgICAgICAgaWYgKHJlcGxhY2VtZW50KSB7XHJcbiAgXHJcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICBmdW5jdGlvbiBnZXRDRnVuYyhpZGVudCkge1xyXG4gICAgICB2YXIgZnVuYyA9IE1vZHVsZVsnXycgKyBpZGVudF07IC8vIGNsb3N1cmUgZXhwb3J0ZWQgZnVuY3Rpb25cclxuICAgICAgcmV0dXJuIGZ1bmM7XHJcbiAgICB9XHJcbiAgXHJcbiAgXHJcbiAgZnVuY3Rpb24gd3JpdGVBcnJheVRvTWVtb3J5KGFycmF5LCBidWZmZXIpIHtcclxuICAgICAgSEVBUDguc2V0KGFycmF5LCBidWZmZXIpO1xyXG4gICAgfVxyXG4gIFxyXG4gIGZ1bmN0aW9uIGxlbmd0aEJ5dGVzVVRGOChzdHIpIHtcclxuICAgICAgdmFyIGxlbiA9IDA7XHJcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3RyLmxlbmd0aDsgKytpKSB7XHJcbiAgICAgICAgLy8gR290Y2hhOiBjaGFyQ29kZUF0IHJldHVybnMgYSAxNi1iaXQgd29yZCB0aGF0IGlzIGEgVVRGLTE2IGVuY29kZWQgY29kZVxyXG4gICAgICAgIC8vIHVuaXQsIG5vdCBhIFVuaWNvZGUgY29kZSBwb2ludCBvZiB0aGUgY2hhcmFjdGVyISBTbyBkZWNvZGVcclxuICAgICAgICAvLyBVVEYxNi0+VVRGMzItPlVURjguXHJcbiAgICAgICAgLy8gU2VlIGh0dHA6Ly91bmljb2RlLm9yZy9mYXEvdXRmX2JvbS5odG1sI3V0ZjE2LTNcclxuICAgICAgICB2YXIgYyA9IHN0ci5jaGFyQ29kZUF0KGkpOyAvLyBwb3NzaWJseSBhIGxlYWQgc3Vycm9nYXRlXHJcbiAgICAgICAgaWYgKGMgPD0gMHg3Rikge1xyXG4gICAgICAgICAgbGVuKys7XHJcbiAgICAgICAgfSBlbHNlIGlmIChjIDw9IDB4N0ZGKSB7XHJcbiAgICAgICAgICBsZW4gKz0gMjtcclxuICAgICAgICB9IGVsc2UgaWYgKGMgPj0gMHhEODAwICYmIGMgPD0gMHhERkZGKSB7XHJcbiAgICAgICAgICBsZW4gKz0gNDsgKytpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBsZW4gKz0gMztcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIGxlbjtcclxuICAgIH1cclxuICBcclxuICBmdW5jdGlvbiBzdHJpbmdUb1VURjhBcnJheShzdHIsIGhlYXAsIG91dElkeCwgbWF4Qnl0ZXNUb1dyaXRlKSB7XHJcbiAgICAgIC8vIFBhcmFtZXRlciBtYXhCeXRlc1RvV3JpdGUgaXMgbm90IG9wdGlvbmFsLiBOZWdhdGl2ZSB2YWx1ZXMsIDAsIG51bGwsXHJcbiAgICAgIC8vIHVuZGVmaW5lZCBhbmQgZmFsc2UgZWFjaCBkb24ndCB3cml0ZSBvdXQgYW55IGJ5dGVzLlxyXG4gICAgICBpZiAoIShtYXhCeXRlc1RvV3JpdGUgPiAwKSlcclxuICAgICAgICByZXR1cm4gMDtcclxuICBcclxuICAgICAgdmFyIHN0YXJ0SWR4ID0gb3V0SWR4O1xyXG4gICAgICB2YXIgZW5kSWR4ID0gb3V0SWR4ICsgbWF4Qnl0ZXNUb1dyaXRlIC0gMTsgLy8gLTEgZm9yIHN0cmluZyBudWxsIHRlcm1pbmF0b3IuXHJcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3RyLmxlbmd0aDsgKytpKSB7XHJcbiAgICAgICAgLy8gR290Y2hhOiBjaGFyQ29kZUF0IHJldHVybnMgYSAxNi1iaXQgd29yZCB0aGF0IGlzIGEgVVRGLTE2IGVuY29kZWQgY29kZVxyXG4gICAgICAgIC8vIHVuaXQsIG5vdCBhIFVuaWNvZGUgY29kZSBwb2ludCBvZiB0aGUgY2hhcmFjdGVyISBTbyBkZWNvZGVcclxuICAgICAgICAvLyBVVEYxNi0+VVRGMzItPlVURjguXHJcbiAgICAgICAgLy8gU2VlIGh0dHA6Ly91bmljb2RlLm9yZy9mYXEvdXRmX2JvbS5odG1sI3V0ZjE2LTNcclxuICAgICAgICAvLyBGb3IgVVRGOCBieXRlIHN0cnVjdHVyZSwgc2VlIGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvVVRGLTgjRGVzY3JpcHRpb25cclxuICAgICAgICAvLyBhbmQgaHR0cHM6Ly93d3cuaWV0Zi5vcmcvcmZjL3JmYzIyNzkudHh0XHJcbiAgICAgICAgLy8gYW5kIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMzNjI5XHJcbiAgICAgICAgdmFyIHUgPSBzdHIuY2hhckNvZGVBdChpKTsgLy8gcG9zc2libHkgYSBsZWFkIHN1cnJvZ2F0ZVxyXG4gICAgICAgIGlmICh1ID49IDB4RDgwMCAmJiB1IDw9IDB4REZGRikge1xyXG4gICAgICAgICAgdmFyIHUxID0gc3RyLmNoYXJDb2RlQXQoKytpKTtcclxuICAgICAgICAgIHUgPSAweDEwMDAwICsgKCh1ICYgMHgzRkYpIDw8IDEwKSB8ICh1MSAmIDB4M0ZGKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHUgPD0gMHg3Rikge1xyXG4gICAgICAgICAgaWYgKG91dElkeCA+PSBlbmRJZHgpIGJyZWFrO1xyXG4gICAgICAgICAgaGVhcFtvdXRJZHgrK10gPSB1O1xyXG4gICAgICAgIH0gZWxzZSBpZiAodSA8PSAweDdGRikge1xyXG4gICAgICAgICAgaWYgKG91dElkeCArIDEgPj0gZW5kSWR4KSBicmVhaztcclxuICAgICAgICAgIGhlYXBbb3V0SWR4KytdID0gMHhDMCB8ICh1ID4+IDYpO1xyXG4gICAgICAgICAgaGVhcFtvdXRJZHgrK10gPSAweDgwIHwgKHUgJiA2Myk7XHJcbiAgICAgICAgfSBlbHNlIGlmICh1IDw9IDB4RkZGRikge1xyXG4gICAgICAgICAgaWYgKG91dElkeCArIDIgPj0gZW5kSWR4KSBicmVhaztcclxuICAgICAgICAgIGhlYXBbb3V0SWR4KytdID0gMHhFMCB8ICh1ID4+IDEyKTtcclxuICAgICAgICAgIGhlYXBbb3V0SWR4KytdID0gMHg4MCB8ICgodSA+PiA2KSAmIDYzKTtcclxuICAgICAgICAgIGhlYXBbb3V0SWR4KytdID0gMHg4MCB8ICh1ICYgNjMpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBpZiAob3V0SWR4ICsgMyA+PSBlbmRJZHgpIGJyZWFrO1xyXG4gICAgICAgICAgaGVhcFtvdXRJZHgrK10gPSAweEYwIHwgKHUgPj4gMTgpO1xyXG4gICAgICAgICAgaGVhcFtvdXRJZHgrK10gPSAweDgwIHwgKCh1ID4+IDEyKSAmIDYzKTtcclxuICAgICAgICAgIGhlYXBbb3V0SWR4KytdID0gMHg4MCB8ICgodSA+PiA2KSAmIDYzKTtcclxuICAgICAgICAgIGhlYXBbb3V0SWR4KytdID0gMHg4MCB8ICh1ICYgNjMpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICAvLyBOdWxsLXRlcm1pbmF0ZSB0aGUgcG9pbnRlciB0byB0aGUgYnVmZmVyLlxyXG4gICAgICBoZWFwW291dElkeF0gPSAwO1xyXG4gICAgICByZXR1cm4gb3V0SWR4IC0gc3RhcnRJZHg7XHJcbiAgICB9XHJcbiAgZnVuY3Rpb24gc3RyaW5nVG9VVEY4KHN0ciwgb3V0UHRyLCBtYXhCeXRlc1RvV3JpdGUpIHtcclxuICAgICAgcmV0dXJuIHN0cmluZ1RvVVRGOEFycmF5KHN0ciwgSEVBUFU4LG91dFB0ciwgbWF4Qnl0ZXNUb1dyaXRlKTtcclxuICAgIH1cclxuICBmdW5jdGlvbiBzdHJpbmdUb1VURjhPblN0YWNrKHN0cikge1xyXG4gICAgICB2YXIgc2l6ZSA9IGxlbmd0aEJ5dGVzVVRGOChzdHIpICsgMTtcclxuICAgICAgdmFyIHJldCA9IHN0YWNrQWxsb2Moc2l6ZSk7XHJcbiAgICAgIHN0cmluZ1RvVVRGOChzdHIsIHJldCwgc2l6ZSk7XHJcbiAgICAgIHJldHVybiByZXQ7XHJcbiAgICB9XHJcbiAgXHJcbiAgdmFyIFVURjhEZWNvZGVyID0gdHlwZW9mIFRleHREZWNvZGVyICE9ICd1bmRlZmluZWQnID8gbmV3IFRleHREZWNvZGVyKCd1dGY4JykgOiB1bmRlZmluZWQ7XHJcbiAgXHJcbiAgICAvKipcclxuICAgICAqIEdpdmVuIGEgcG9pbnRlciAnaWR4JyB0byBhIG51bGwtdGVybWluYXRlZCBVVEY4LWVuY29kZWQgc3RyaW5nIGluIHRoZSBnaXZlblxyXG4gICAgICogYXJyYXkgdGhhdCBjb250YWlucyB1aW50OCB2YWx1ZXMsIHJldHVybnMgYSBjb3B5IG9mIHRoYXQgc3RyaW5nIGFzIGFcclxuICAgICAqIEphdmFzY3JpcHQgU3RyaW5nIG9iamVjdC5cclxuICAgICAqIGhlYXBPckFycmF5IGlzIGVpdGhlciBhIHJlZ3VsYXIgYXJyYXksIG9yIGEgSmF2YVNjcmlwdCB0eXBlZCBhcnJheSB2aWV3LlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGlkeFxyXG4gICAgICogQHBhcmFtIHtudW1iZXI9fSBtYXhCeXRlc1RvUmVhZFxyXG4gICAgICogQHJldHVybiB7c3RyaW5nfVxyXG4gICAgICovXHJcbiAgZnVuY3Rpb24gVVRGOEFycmF5VG9TdHJpbmcoaGVhcE9yQXJyYXksIGlkeCwgbWF4Qnl0ZXNUb1JlYWQpIHtcclxuICAgICAgdmFyIGVuZElkeCA9IGlkeCArIG1heEJ5dGVzVG9SZWFkO1xyXG4gICAgICB2YXIgZW5kUHRyID0gaWR4O1xyXG4gICAgICAvLyBUZXh0RGVjb2RlciBuZWVkcyB0byBrbm93IHRoZSBieXRlIGxlbmd0aCBpbiBhZHZhbmNlLCBpdCBkb2Vzbid0IHN0b3Agb25cclxuICAgICAgLy8gbnVsbCB0ZXJtaW5hdG9yIGJ5IGl0c2VsZi4gIEFsc28sIHVzZSB0aGUgbGVuZ3RoIGluZm8gdG8gYXZvaWQgcnVubmluZyB0aW55XHJcbiAgICAgIC8vIHN0cmluZ3MgdGhyb3VnaCBUZXh0RGVjb2Rlciwgc2luY2UgLnN1YmFycmF5KCkgYWxsb2NhdGVzIGdhcmJhZ2UuXHJcbiAgICAgIC8vIChBcyBhIHRpbnkgY29kZSBzYXZlIHRyaWNrLCBjb21wYXJlIGVuZFB0ciBhZ2FpbnN0IGVuZElkeCB1c2luZyBhIG5lZ2F0aW9uLFxyXG4gICAgICAvLyBzbyB0aGF0IHVuZGVmaW5lZCBtZWFucyBJbmZpbml0eSlcclxuICAgICAgd2hpbGUgKGhlYXBPckFycmF5W2VuZFB0cl0gJiYgIShlbmRQdHIgPj0gZW5kSWR4KSkgKytlbmRQdHI7XHJcbiAgXHJcbiAgICAgIGlmIChlbmRQdHIgLSBpZHggPiAxNiAmJiBoZWFwT3JBcnJheS5idWZmZXIgJiYgVVRGOERlY29kZXIpIHtcclxuICAgICAgICByZXR1cm4gVVRGOERlY29kZXIuZGVjb2RlKGhlYXBPckFycmF5LnN1YmFycmF5KGlkeCwgZW5kUHRyKSk7XHJcbiAgICAgIH1cclxuICAgICAgdmFyIHN0ciA9ICcnO1xyXG4gICAgICAvLyBJZiBidWlsZGluZyB3aXRoIFRleHREZWNvZGVyLCB3ZSBoYXZlIGFscmVhZHkgY29tcHV0ZWQgdGhlIHN0cmluZyBsZW5ndGhcclxuICAgICAgLy8gYWJvdmUsIHNvIHRlc3QgbG9vcCBlbmQgY29uZGl0aW9uIGFnYWluc3QgdGhhdFxyXG4gICAgICB3aGlsZSAoaWR4IDwgZW5kUHRyKSB7XHJcbiAgICAgICAgLy8gRm9yIFVURjggYnl0ZSBzdHJ1Y3R1cmUsIHNlZTpcclxuICAgICAgICAvLyBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1VURi04I0Rlc2NyaXB0aW9uXHJcbiAgICAgICAgLy8gaHR0cHM6Ly93d3cuaWV0Zi5vcmcvcmZjL3JmYzIyNzkudHh0XHJcbiAgICAgICAgLy8gaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzM2MjlcclxuICAgICAgICB2YXIgdTAgPSBoZWFwT3JBcnJheVtpZHgrK107XHJcbiAgICAgICAgaWYgKCEodTAgJiAweDgwKSkgeyBzdHIgKz0gU3RyaW5nLmZyb21DaGFyQ29kZSh1MCk7IGNvbnRpbnVlOyB9XHJcbiAgICAgICAgdmFyIHUxID0gaGVhcE9yQXJyYXlbaWR4KytdICYgNjM7XHJcbiAgICAgICAgaWYgKCh1MCAmIDB4RTApID09IDB4QzApIHsgc3RyICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoKCh1MCAmIDMxKSA8PCA2KSB8IHUxKTsgY29udGludWU7IH1cclxuICAgICAgICB2YXIgdTIgPSBoZWFwT3JBcnJheVtpZHgrK10gJiA2MztcclxuICAgICAgICBpZiAoKHUwICYgMHhGMCkgPT0gMHhFMCkge1xyXG4gICAgICAgICAgdTAgPSAoKHUwICYgMTUpIDw8IDEyKSB8ICh1MSA8PCA2KSB8IHUyO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB1MCA9ICgodTAgJiA3KSA8PCAxOCkgfCAodTEgPDwgMTIpIHwgKHUyIDw8IDYpIHwgKGhlYXBPckFycmF5W2lkeCsrXSAmIDYzKTtcclxuICAgICAgICB9XHJcbiAgXHJcbiAgICAgICAgaWYgKHUwIDwgMHgxMDAwMCkge1xyXG4gICAgICAgICAgc3RyICs9IFN0cmluZy5mcm9tQ2hhckNvZGUodTApO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB2YXIgY2ggPSB1MCAtIDB4MTAwMDA7XHJcbiAgICAgICAgICBzdHIgKz0gU3RyaW5nLmZyb21DaGFyQ29kZSgweEQ4MDAgfCAoY2ggPj4gMTApLCAweERDMDAgfCAoY2ggJiAweDNGRikpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gc3RyO1xyXG4gICAgfVxyXG4gIFxyXG4gIFxyXG4gICAgLyoqXHJcbiAgICAgKiBHaXZlbiBhIHBvaW50ZXIgJ3B0cicgdG8gYSBudWxsLXRlcm1pbmF0ZWQgVVRGOC1lbmNvZGVkIHN0cmluZyBpbiB0aGVcclxuICAgICAqIGVtc2NyaXB0ZW4gSEVBUCwgcmV0dXJucyBhIGNvcHkgb2YgdGhhdCBzdHJpbmcgYXMgYSBKYXZhc2NyaXB0IFN0cmluZyBvYmplY3QuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHB0clxyXG4gICAgICogQHBhcmFtIHtudW1iZXI9fSBtYXhCeXRlc1RvUmVhZCAtIEFuIG9wdGlvbmFsIGxlbmd0aCB0aGF0IHNwZWNpZmllcyB0aGVcclxuICAgICAqICAgbWF4aW11bSBudW1iZXIgb2YgYnl0ZXMgdG8gcmVhZC4gWW91IGNhbiBvbWl0IHRoaXMgcGFyYW1ldGVyIHRvIHNjYW4gdGhlXHJcbiAgICAgKiAgIHN0cmluZyB1bnRpbCB0aGUgZmlyc3QgXHUwMDAwIGJ5dGUuIElmIG1heEJ5dGVzVG9SZWFkIGlzIHBhc3NlZCwgYW5kIHRoZSBzdHJpbmdcclxuICAgICAqICAgYXQgW3B0ciwgcHRyK21heEJ5dGVzVG9SZWFkclsgY29udGFpbnMgYSBudWxsIGJ5dGUgaW4gdGhlIG1pZGRsZSwgdGhlbiB0aGVcclxuICAgICAqICAgc3RyaW5nIHdpbGwgY3V0IHNob3J0IGF0IHRoYXQgYnl0ZSBpbmRleCAoaS5lLiBtYXhCeXRlc1RvUmVhZCB3aWxsIG5vdFxyXG4gICAgICogICBwcm9kdWNlIGEgc3RyaW5nIG9mIGV4YWN0IGxlbmd0aCBbcHRyLCBwdHIrbWF4Qnl0ZXNUb1JlYWRbKSBOLkIuIG1peGluZ1xyXG4gICAgICogICBmcmVxdWVudCB1c2VzIG9mIFVURjhUb1N0cmluZygpIHdpdGggYW5kIHdpdGhvdXQgbWF4Qnl0ZXNUb1JlYWQgbWF5IHRocm93XHJcbiAgICAgKiAgIEpTIEpJVCBvcHRpbWl6YXRpb25zIG9mZiwgc28gaXQgaXMgd29ydGggdG8gY29uc2lkZXIgY29uc2lzdGVudGx5IHVzaW5nIG9uZVxyXG4gICAgICogQHJldHVybiB7c3RyaW5nfVxyXG4gICAgICovXHJcbiAgZnVuY3Rpb24gVVRGOFRvU3RyaW5nKHB0ciwgbWF4Qnl0ZXNUb1JlYWQpIHtcclxuICAgICAgcmV0dXJuIHB0ciA/IFVURjhBcnJheVRvU3RyaW5nKEhFQVBVOCwgcHRyLCBtYXhCeXRlc1RvUmVhZCkgOiAnJztcclxuICAgIH1cclxuICBcclxuICAgIC8qKlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd8bnVsbD19IHJldHVyblR5cGVcclxuICAgICAqIEBwYXJhbSB7QXJyYXk9fSBhcmdUeXBlc1xyXG4gICAgICogQHBhcmFtIHtBcmd1bWVudHN8QXJyYXk9fSBhcmdzXHJcbiAgICAgKiBAcGFyYW0ge09iamVjdD19IG9wdHNcclxuICAgICAqL1xyXG4gIGZ1bmN0aW9uIGNjYWxsKGlkZW50LCByZXR1cm5UeXBlLCBhcmdUeXBlcywgYXJncywgb3B0cykge1xyXG4gICAgICAvLyBGb3IgZmFzdCBsb29rdXAgb2YgY29udmVyc2lvbiBmdW5jdGlvbnNcclxuICAgICAgdmFyIHRvQyA9IHtcclxuICAgICAgICAnc3RyaW5nJzogKHN0cikgPT4ge1xyXG4gICAgICAgICAgdmFyIHJldCA9IDA7XHJcbiAgICAgICAgICBpZiAoc3RyICE9PSBudWxsICYmIHN0ciAhPT0gdW5kZWZpbmVkICYmIHN0ciAhPT0gMCkgeyAvLyBudWxsIHN0cmluZ1xyXG4gICAgICAgICAgICAvLyBhdCBtb3N0IDQgYnl0ZXMgcGVyIFVURi04IGNvZGUgcG9pbnQsICsxIGZvciB0aGUgdHJhaWxpbmcgJ1xcMCdcclxuICAgICAgICAgICAgcmV0ID0gc3RyaW5nVG9VVEY4T25TdGFjayhzdHIpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuIHJldDtcclxuICAgICAgICB9LFxyXG4gICAgICAgICdhcnJheSc6IChhcnIpID0+IHtcclxuICAgICAgICAgIHZhciByZXQgPSBzdGFja0FsbG9jKGFyci5sZW5ndGgpO1xyXG4gICAgICAgICAgd3JpdGVBcnJheVRvTWVtb3J5KGFyciwgcmV0KTtcclxuICAgICAgICAgIHJldHVybiByZXQ7XHJcbiAgICAgICAgfVxyXG4gICAgICB9O1xyXG4gIFxyXG4gICAgICBmdW5jdGlvbiBjb252ZXJ0UmV0dXJuVmFsdWUocmV0KSB7XHJcbiAgICAgICAgaWYgKHJldHVyblR5cGUgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICBcclxuICAgICAgICAgIHJldHVybiBVVEY4VG9TdHJpbmcocmV0KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHJldHVyblR5cGUgPT09ICdib29sZWFuJykgcmV0dXJuIEJvb2xlYW4ocmV0KTtcclxuICAgICAgICByZXR1cm4gcmV0O1xyXG4gICAgICB9XHJcbiAgXHJcbiAgICAgIHZhciBmdW5jID0gZ2V0Q0Z1bmMoaWRlbnQpO1xyXG4gICAgICB2YXIgY0FyZ3MgPSBbXTtcclxuICAgICAgdmFyIHN0YWNrID0gMDtcclxuICAgICAgaWYgKGFyZ3MpIHtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyZ3MubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgIHZhciBjb252ZXJ0ZXIgPSB0b0NbYXJnVHlwZXNbaV1dO1xyXG4gICAgICAgICAgaWYgKGNvbnZlcnRlcikge1xyXG4gICAgICAgICAgICBpZiAoc3RhY2sgPT09IDApIHN0YWNrID0gc3RhY2tTYXZlKCk7XHJcbiAgICAgICAgICAgIGNBcmdzW2ldID0gY29udmVydGVyKGFyZ3NbaV0pO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgY0FyZ3NbaV0gPSBhcmdzW2ldO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICB2YXIgcmV0ID0gZnVuYy5hcHBseShudWxsLCBjQXJncyk7XHJcbiAgICAgIGZ1bmN0aW9uIG9uRG9uZShyZXQpIHtcclxuICAgICAgICBpZiAoc3RhY2sgIT09IDApIHN0YWNrUmVzdG9yZShzdGFjayk7XHJcbiAgICAgICAgcmV0dXJuIGNvbnZlcnRSZXR1cm5WYWx1ZShyZXQpO1xyXG4gICAgICB9XHJcbiAgXHJcbiAgICAgIHJldCA9IG9uRG9uZShyZXQpO1xyXG4gICAgICByZXR1cm4gcmV0O1xyXG4gICAgfVxyXG4gIFxyXG4gICAgLyoqXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZz19IHJldHVyblR5cGVcclxuICAgICAqIEBwYXJhbSB7QXJyYXk9fSBhcmdUeXBlc1xyXG4gICAgICogQHBhcmFtIHtPYmplY3Q9fSBvcHRzXHJcbiAgICAgKi9cclxuICBmdW5jdGlvbiBjd3JhcChpZGVudCwgcmV0dXJuVHlwZSwgYXJnVHlwZXMsIG9wdHMpIHtcclxuICAgICAgLy8gV2hlbiB0aGUgZnVuY3Rpb24gdGFrZXMgbnVtYmVycyBhbmQgcmV0dXJucyBhIG51bWJlciwgd2UgY2FuIGp1c3QgcmV0dXJuXHJcbiAgICAgIC8vIHRoZSBvcmlnaW5hbCBmdW5jdGlvblxyXG4gICAgICB2YXIgbnVtZXJpY0FyZ3MgPSAhYXJnVHlwZXMgfHwgYXJnVHlwZXMuZXZlcnkoKHR5cGUpID0+IHR5cGUgPT09ICdudW1iZXInIHx8IHR5cGUgPT09ICdib29sZWFuJyk7XHJcbiAgICAgIHZhciBudW1lcmljUmV0ID0gcmV0dXJuVHlwZSAhPT0gJ3N0cmluZyc7XHJcbiAgICAgIGlmIChudW1lcmljUmV0ICYmIG51bWVyaWNBcmdzICYmICFvcHRzKSB7XHJcbiAgICAgICAgcmV0dXJuIGdldENGdW5jKGlkZW50KTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgcmV0dXJuIGNjYWxsKGlkZW50LCByZXR1cm5UeXBlLCBhcmdUeXBlcywgYXJndW1lbnRzLCBvcHRzKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxudmFyIHdhc21JbXBvcnRzID0ge1xyXG4gIFwiX19jeGFfdGhyb3dcIjogX19fY3hhX3Rocm93LFxyXG4gIFwiYWJvcnRcIjogX2Fib3J0LFxyXG4gIFwiZW1zY3JpcHRlbl9tZW1jcHlfYmlnXCI6IF9lbXNjcmlwdGVuX21lbWNweV9iaWcsXHJcbiAgXCJlbXNjcmlwdGVuX3Jlc2l6ZV9oZWFwXCI6IF9lbXNjcmlwdGVuX3Jlc2l6ZV9oZWFwXHJcbn07XHJcbnZhciBhc20gPSBjcmVhdGVXYXNtKCk7XHJcbi8qKiBAdHlwZSB7ZnVuY3Rpb24oLi4uKik6P30gKi9cclxudmFyIF9fX3dhc21fY2FsbF9jdG9ycyA9IGZ1bmN0aW9uKCkge1xyXG4gIHJldHVybiAoX19fd2FzbV9jYWxsX2N0b3JzID0gTW9kdWxlW1wiYXNtXCJdW1wiX193YXNtX2NhbGxfY3RvcnNcIl0pLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XHJcbn07XHJcblxyXG4vKiogQHR5cGUge2Z1bmN0aW9uKC4uLiopOj99ICovXHJcbnZhciBfZGJzY2FuID0gTW9kdWxlW1wiX2Ric2NhblwiXSA9IGZ1bmN0aW9uKCkge1xyXG4gIHJldHVybiAoX2Ric2NhbiA9IE1vZHVsZVtcIl9kYnNjYW5cIl0gPSBNb2R1bGVbXCJhc21cIl1bXCJkYnNjYW5cIl0pLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XHJcbn07XHJcblxyXG4vKiogQHR5cGUge2Z1bmN0aW9uKC4uLiopOj99ICovXHJcbnZhciBfX19lcnJub19sb2NhdGlvbiA9IGZ1bmN0aW9uKCkge1xyXG4gIHJldHVybiAoX19fZXJybm9fbG9jYXRpb24gPSBNb2R1bGVbXCJhc21cIl1bXCJfX2Vycm5vX2xvY2F0aW9uXCJdKS5hcHBseShudWxsLCBhcmd1bWVudHMpO1xyXG59O1xyXG5cclxuLyoqIEB0eXBlIHtmdW5jdGlvbiguLi4qKTo/fSAqL1xyXG52YXIgX21hbGxvYyA9IE1vZHVsZVtcIl9tYWxsb2NcIl0gPSBmdW5jdGlvbigpIHtcclxuICByZXR1cm4gKF9tYWxsb2MgPSBNb2R1bGVbXCJfbWFsbG9jXCJdID0gTW9kdWxlW1wiYXNtXCJdW1wibWFsbG9jXCJdKS5hcHBseShudWxsLCBhcmd1bWVudHMpO1xyXG59O1xyXG5cclxuLyoqIEB0eXBlIHtmdW5jdGlvbiguLi4qKTo/fSAqL1xyXG52YXIgX2ZyZWUgPSBNb2R1bGVbXCJfZnJlZVwiXSA9IGZ1bmN0aW9uKCkge1xyXG4gIHJldHVybiAoX2ZyZWUgPSBNb2R1bGVbXCJfZnJlZVwiXSA9IE1vZHVsZVtcImFzbVwiXVtcImZyZWVcIl0pLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XHJcbn07XHJcblxyXG4vKiogQHR5cGUge2Z1bmN0aW9uKC4uLiopOj99ICovXHJcbnZhciBzdGFja1NhdmUgPSBmdW5jdGlvbigpIHtcclxuICByZXR1cm4gKHN0YWNrU2F2ZSA9IE1vZHVsZVtcImFzbVwiXVtcInN0YWNrU2F2ZVwiXSkuYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcclxufTtcclxuXHJcbi8qKiBAdHlwZSB7ZnVuY3Rpb24oLi4uKik6P30gKi9cclxudmFyIHN0YWNrUmVzdG9yZSA9IGZ1bmN0aW9uKCkge1xyXG4gIHJldHVybiAoc3RhY2tSZXN0b3JlID0gTW9kdWxlW1wiYXNtXCJdW1wic3RhY2tSZXN0b3JlXCJdKS5hcHBseShudWxsLCBhcmd1bWVudHMpO1xyXG59O1xyXG5cclxuLyoqIEB0eXBlIHtmdW5jdGlvbiguLi4qKTo/fSAqL1xyXG52YXIgc3RhY2tBbGxvYyA9IGZ1bmN0aW9uKCkge1xyXG4gIHJldHVybiAoc3RhY2tBbGxvYyA9IE1vZHVsZVtcImFzbVwiXVtcInN0YWNrQWxsb2NcIl0pLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XHJcbn07XHJcblxyXG4vKiogQHR5cGUge2Z1bmN0aW9uKC4uLiopOj99ICovXHJcbnZhciBfX19jeGFfaXNfcG9pbnRlcl90eXBlID0gZnVuY3Rpb24oKSB7XHJcbiAgcmV0dXJuIChfX19jeGFfaXNfcG9pbnRlcl90eXBlID0gTW9kdWxlW1wiYXNtXCJdW1wiX19jeGFfaXNfcG9pbnRlcl90eXBlXCJdKS5hcHBseShudWxsLCBhcmd1bWVudHMpO1xyXG59O1xyXG5cclxuXHJcblxyXG4vLyBpbmNsdWRlOiBwb3N0YW1ibGUuanNcclxuLy8gPT09IEF1dG8tZ2VuZXJhdGVkIHBvc3RhbWJsZSBzZXR1cCBlbnRyeSBzdHVmZiA9PT1cclxuXHJcbk1vZHVsZVtcImNjYWxsXCJdID0gY2NhbGw7XHJcbk1vZHVsZVtcImN3cmFwXCJdID0gY3dyYXA7XHJcblxyXG5cclxudmFyIGNhbGxlZFJ1bjtcclxuXHJcbmRlcGVuZGVuY2llc0Z1bGZpbGxlZCA9IGZ1bmN0aW9uIHJ1bkNhbGxlcigpIHtcclxuICAvLyBJZiBydW4gaGFzIG5ldmVyIGJlZW4gY2FsbGVkLCBhbmQgd2Ugc2hvdWxkIGNhbGwgcnVuIChJTlZPS0VfUlVOIGlzIHRydWUsIGFuZCBNb2R1bGUubm9Jbml0aWFsUnVuIGlzIG5vdCBmYWxzZSlcclxuICBpZiAoIWNhbGxlZFJ1bikgcnVuKCk7XHJcbiAgaWYgKCFjYWxsZWRSdW4pIGRlcGVuZGVuY2llc0Z1bGZpbGxlZCA9IHJ1bkNhbGxlcjsgLy8gdHJ5IHRoaXMgYWdhaW4gbGF0ZXIsIGFmdGVyIG5ldyBkZXBzIGFyZSBmdWxmaWxsZWRcclxufTtcclxuXHJcbmZ1bmN0aW9uIHJ1bigpIHtcclxuXHJcbiAgaWYgKHJ1bkRlcGVuZGVuY2llcyA+IDApIHtcclxuICAgIHJldHVybjtcclxuICB9XHJcblxyXG4gIHByZVJ1bigpO1xyXG5cclxuICAvLyBhIHByZVJ1biBhZGRlZCBhIGRlcGVuZGVuY3ksIHJ1biB3aWxsIGJlIGNhbGxlZCBsYXRlclxyXG4gIGlmIChydW5EZXBlbmRlbmNpZXMgPiAwKSB7XHJcbiAgICByZXR1cm47XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBkb1J1bigpIHtcclxuICAgIC8vIHJ1biBtYXkgaGF2ZSBqdXN0IGJlZW4gY2FsbGVkIHRocm91Z2ggZGVwZW5kZW5jaWVzIGJlaW5nIGZ1bGZpbGxlZCBqdXN0IGluIHRoaXMgdmVyeSBmcmFtZSxcclxuICAgIC8vIG9yIHdoaWxlIHRoZSBhc3luYyBzZXRTdGF0dXMgdGltZSBiZWxvdyB3YXMgaGFwcGVuaW5nXHJcbiAgICBpZiAoY2FsbGVkUnVuKSByZXR1cm47XHJcbiAgICBjYWxsZWRSdW4gPSB0cnVlO1xyXG4gICAgTW9kdWxlWydjYWxsZWRSdW4nXSA9IHRydWU7XHJcblxyXG4gICAgaWYgKEFCT1JUKSByZXR1cm47XHJcblxyXG4gICAgaW5pdFJ1bnRpbWUoKTtcclxuXHJcbiAgICByZWFkeVByb21pc2VSZXNvbHZlKE1vZHVsZSk7XHJcbiAgICBpZiAoTW9kdWxlWydvblJ1bnRpbWVJbml0aWFsaXplZCddKSBNb2R1bGVbJ29uUnVudGltZUluaXRpYWxpemVkJ10oKTtcclxuXHJcbiAgICBwb3N0UnVuKCk7XHJcbiAgfVxyXG5cclxuICBpZiAoTW9kdWxlWydzZXRTdGF0dXMnXSkge1xyXG4gICAgTW9kdWxlWydzZXRTdGF0dXMnXSgnUnVubmluZy4uLicpO1xyXG4gICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcclxuICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcclxuICAgICAgICBNb2R1bGVbJ3NldFN0YXR1cyddKCcnKTtcclxuICAgICAgfSwgMSk7XHJcbiAgICAgIGRvUnVuKCk7XHJcbiAgICB9LCAxKTtcclxuICB9IGVsc2VcclxuICB7XHJcbiAgICBkb1J1bigpO1xyXG4gIH1cclxufVxyXG5cclxuaWYgKE1vZHVsZVsncHJlSW5pdCddKSB7XHJcbiAgaWYgKHR5cGVvZiBNb2R1bGVbJ3ByZUluaXQnXSA9PSAnZnVuY3Rpb24nKSBNb2R1bGVbJ3ByZUluaXQnXSA9IFtNb2R1bGVbJ3ByZUluaXQnXV07XHJcbiAgd2hpbGUgKE1vZHVsZVsncHJlSW5pdCddLmxlbmd0aCA+IDApIHtcclxuICAgIE1vZHVsZVsncHJlSW5pdCddLnBvcCgpKCk7XHJcbiAgfVxyXG59XHJcblxyXG5ydW4oKTtcclxuXHJcblxyXG4vLyBlbmQgaW5jbHVkZTogcG9zdGFtYmxlLmpzXHJcblxyXG5cclxuICByZXR1cm4gZXhwb3J0Q3BwRGJzY2FuTGliLnJlYWR5XHJcbn1cclxuXHJcbik7XHJcbn0pKCk7XHJcbmlmICh0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSA9PT0gJ29iamVjdCcpXHJcbiAgbW9kdWxlLmV4cG9ydHMgPSBleHBvcnRDcHBEYnNjYW5MaWI7XHJcbmVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lWydhbWQnXSlcclxuICBkZWZpbmUoW10sIGZ1bmN0aW9uKCkgeyByZXR1cm4gZXhwb3J0Q3BwRGJzY2FuTGliOyB9KTtcclxuZWxzZSBpZiAodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnKVxyXG4gIGV4cG9ydHNbXCJleHBvcnRDcHBEYnNjYW5MaWJcIl0gPSBleHBvcnRDcHBEYnNjYW5MaWI7XHJcbiIsIi8vIEltcG9ydHNcbmltcG9ydCBfX19DU1NfTE9BREVSX0FQSV9TT1VSQ0VNQVBfSU1QT1JUX19fIGZyb20gXCIuLi8uLi8uLi9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9zb3VyY2VNYXBzLmpzXCI7XG5pbXBvcnQgX19fQ1NTX0xPQURFUl9BUElfSU1QT1JUX19fIGZyb20gXCIuLi8uLi8uLi9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9hcGkuanNcIjtcbnZhciBfX19DU1NfTE9BREVSX0VYUE9SVF9fXyA9IF9fX0NTU19MT0FERVJfQVBJX0lNUE9SVF9fXyhfX19DU1NfTE9BREVSX0FQSV9TT1VSQ0VNQVBfSU1QT1JUX19fKTtcbi8vIE1vZHVsZVxuX19fQ1NTX0xPQURFUl9FWFBPUlRfX18ucHVzaChbbW9kdWxlLmlkLCBcIi5zY2F0dGVyX3Bsb3RfbGluayB7XFxuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZSFpbXBvcnRhbnQ7XFxuICAgIHJpZ2h0OiAxMHB4O1xcbn1cXG5cXG4uY2xpZmZzX2dyaWQge1xcbiAgICB0b3A6IDEwcHg7XFxufVxcblxcbi5zaG93X29ubHlfY2xpZmZzIHtcXG4gICAgdG9wOiAzMHB4O1xcbn1cXG5cXG4ubWwtZGltLXJlZHVjdGlvbi1zZXR0aW5ncy1pbnB1dCBpLmdyb2staWNvbi5ncm9rLWZvbnQtaWNvbi1zZXR0aW5ncyB7XFxuICAgIGZvbnQtc2l6ZTogMThweDtcXG4gICAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgICBoZWlnaHQ6IDI4cHg7XFxufVxcblxcbi5tbC1kaW0tcmVkdWN0aW9uLWNvbHVtbi1lZGl0b3ItaW5wdXQtcm9vdCBsYWJlbCB7XFxuICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcXG59XFxuXFxuLm1sLWRpbS1yZWR1Y3Rpb24tY29sdW1uLWVkaXRvci1pbnB1dC1yb290IGlucHV0LCAubWwtZGltLXJlZHVjdGlvbi1jb2x1bW4tZWRpdG9yLWlucHV0LXJvb3Qgc2VsZWN0IHtcXG4gICAgbWFyZ2luLWxlZnQ6IDIwcHggIWltcG9ydGFudDtcXG59XFxuXFxuaDMubWwtZGltLXJlZHVjdGlvbi1jb2x1bW4tZWRpdG9yLWlucHV0LXJvb3Qge1xcbiAgICBtYXJnaW46IDAgIWltcG9ydGFudDtcXG59XFxuXFxuLm1sLWRpbS1yZWR1Y3Rpb24tY29sdW1uLWVkaXRvci1yb290LCAubWwtZGltLXJlZHVjdGlvbi1jb2x1bW4tZWRpdG9yLWhlYWRlci1yb290IHtcXG4gICAgZGlzcGxheTogZmxleDtcXG4gICAgZmxleC1kaXJlY3Rpb246IHJvdztcXG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gICAgbWFyZ2luLWJvdHRvbTogMTBweCAhaW1wb3J0YW50O1xcbiAgICB3aWR0aDogNjAwcHggIWltcG9ydGFudDtcXG59XFxuXFxuLm1sLWRpbS1yZWR1Y3Rpb24tY29sdW1uLWVkaXRvci1jb2x1bW4tdGl0bGUge1xcbiAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcXG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcXG59XFxuXFxuLm1sLWRpbS1yZWR1Y3Rpb24tY29sdW1uLWVkaXRvci1oZWFkZXItcm9vdCA+IGgxOm5vdCg6Zmlyc3QtY2hpbGQpIHtcXG4gICAgbWFyZ2luLWxlZnQ6IDIwcHggIWltcG9ydGFudDtcXG59XCIsIFwiXCIse1widmVyc2lvblwiOjMsXCJzb3VyY2VzXCI6W1wid2VicGFjazovLy4vbm9kZV9tb2R1bGVzL0BkYXRhZ3Jvay1saWJyYXJpZXMvbWwvY3NzL3N0eWxlcy5jc3NcIl0sXCJuYW1lc1wiOltdLFwibWFwcGluZ3NcIjpcIkFBQUE7SUFDSSw0QkFBNEI7SUFDNUIsV0FBVztBQUNmOztBQUVBO0lBQ0ksU0FBUztBQUNiOztBQUVBO0lBQ0ksU0FBUztBQUNiOztBQUVBO0lBQ0ksZUFBZTtJQUNmLGtCQUFrQjtJQUNsQixZQUFZO0FBQ2hCOztBQUVBO0lBQ0ksd0JBQXdCO0FBQzVCOztBQUVBO0lBQ0ksNEJBQTRCO0FBQ2hDOztBQUVBO0lBQ0ksb0JBQW9CO0FBQ3hCOztBQUVBO0lBQ0ksYUFBYTtJQUNiLG1CQUFtQjtJQUNuQixtQkFBbUI7SUFDbkIsOEJBQThCO0lBQzlCLHVCQUF1QjtBQUMzQjs7QUFFQTtJQUNJLHVCQUF1QjtJQUN2QixnQkFBZ0I7QUFDcEI7O0FBRUE7SUFDSSw0QkFBNEI7QUFDaENcIixcInNvdXJjZXNDb250ZW50XCI6W1wiLnNjYXR0ZXJfcGxvdF9saW5rIHtcXG4gICAgcG9zaXRpb246IGFic29sdXRlIWltcG9ydGFudDtcXG4gICAgcmlnaHQ6IDEwcHg7XFxufVxcblxcbi5jbGlmZnNfZ3JpZCB7XFxuICAgIHRvcDogMTBweDtcXG59XFxuXFxuLnNob3dfb25seV9jbGlmZnMge1xcbiAgICB0b3A6IDMwcHg7XFxufVxcblxcbi5tbC1kaW0tcmVkdWN0aW9uLXNldHRpbmdzLWlucHV0IGkuZ3Jvay1pY29uLmdyb2stZm9udC1pY29uLXNldHRpbmdzIHtcXG4gICAgZm9udC1zaXplOiAxOHB4O1xcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICAgIGhlaWdodDogMjhweDtcXG59XFxuXFxuLm1sLWRpbS1yZWR1Y3Rpb24tY29sdW1uLWVkaXRvci1pbnB1dC1yb290IGxhYmVsIHtcXG4gICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubWwtZGltLXJlZHVjdGlvbi1jb2x1bW4tZWRpdG9yLWlucHV0LXJvb3QgaW5wdXQsIC5tbC1kaW0tcmVkdWN0aW9uLWNvbHVtbi1lZGl0b3ItaW5wdXQtcm9vdCBzZWxlY3Qge1xcbiAgICBtYXJnaW4tbGVmdDogMjBweCAhaW1wb3J0YW50O1xcbn1cXG5cXG5oMy5tbC1kaW0tcmVkdWN0aW9uLWNvbHVtbi1lZGl0b3ItaW5wdXQtcm9vdCB7XFxuICAgIG1hcmdpbjogMCAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubWwtZGltLXJlZHVjdGlvbi1jb2x1bW4tZWRpdG9yLXJvb3QsIC5tbC1kaW0tcmVkdWN0aW9uLWNvbHVtbi1lZGl0b3ItaGVhZGVyLXJvb3Qge1xcbiAgICBkaXNwbGF5OiBmbGV4O1xcbiAgICBmbGV4LWRpcmVjdGlvbjogcm93O1xcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgICBtYXJnaW4tYm90dG9tOiAxMHB4ICFpbXBvcnRhbnQ7XFxuICAgIHdpZHRoOiA2MDBweCAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubWwtZGltLXJlZHVjdGlvbi1jb2x1bW4tZWRpdG9yLWNvbHVtbi10aXRsZSB7XFxuICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xcbn1cXG5cXG4ubWwtZGltLXJlZHVjdGlvbi1jb2x1bW4tZWRpdG9yLWhlYWRlci1yb290ID4gaDE6bm90KDpmaXJzdC1jaGlsZCkge1xcbiAgICBtYXJnaW4tbGVmdDogMjBweCAhaW1wb3J0YW50O1xcbn1cIl0sXCJzb3VyY2VSb290XCI6XCJcIn1dKTtcbi8vIEV4cG9ydHNcbmV4cG9ydCBkZWZhdWx0IF9fX0NTU19MT0FERVJfRVhQT1JUX19fO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbi8qXG4gIE1JVCBMaWNlbnNlIGh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvbWl0LWxpY2Vuc2UucGhwXG4gIEF1dGhvciBUb2JpYXMgS29wcGVycyBAc29rcmFcbiovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChjc3NXaXRoTWFwcGluZ1RvU3RyaW5nKSB7XG4gIHZhciBsaXN0ID0gW107XG5cbiAgLy8gcmV0dXJuIHRoZSBsaXN0IG9mIG1vZHVsZXMgYXMgY3NzIHN0cmluZ1xuICBsaXN0LnRvU3RyaW5nID0gZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gICAgcmV0dXJuIHRoaXMubWFwKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICB2YXIgY29udGVudCA9IFwiXCI7XG4gICAgICB2YXIgbmVlZExheWVyID0gdHlwZW9mIGl0ZW1bNV0gIT09IFwidW5kZWZpbmVkXCI7XG4gICAgICBpZiAoaXRlbVs0XSkge1xuICAgICAgICBjb250ZW50ICs9IFwiQHN1cHBvcnRzIChcIi5jb25jYXQoaXRlbVs0XSwgXCIpIHtcIik7XG4gICAgICB9XG4gICAgICBpZiAoaXRlbVsyXSkge1xuICAgICAgICBjb250ZW50ICs9IFwiQG1lZGlhIFwiLmNvbmNhdChpdGVtWzJdLCBcIiB7XCIpO1xuICAgICAgfVxuICAgICAgaWYgKG5lZWRMYXllcikge1xuICAgICAgICBjb250ZW50ICs9IFwiQGxheWVyXCIuY29uY2F0KGl0ZW1bNV0ubGVuZ3RoID4gMCA/IFwiIFwiLmNvbmNhdChpdGVtWzVdKSA6IFwiXCIsIFwiIHtcIik7XG4gICAgICB9XG4gICAgICBjb250ZW50ICs9IGNzc1dpdGhNYXBwaW5nVG9TdHJpbmcoaXRlbSk7XG4gICAgICBpZiAobmVlZExheWVyKSB7XG4gICAgICAgIGNvbnRlbnQgKz0gXCJ9XCI7XG4gICAgICB9XG4gICAgICBpZiAoaXRlbVsyXSkge1xuICAgICAgICBjb250ZW50ICs9IFwifVwiO1xuICAgICAgfVxuICAgICAgaWYgKGl0ZW1bNF0pIHtcbiAgICAgICAgY29udGVudCArPSBcIn1cIjtcbiAgICAgIH1cbiAgICAgIHJldHVybiBjb250ZW50O1xuICAgIH0pLmpvaW4oXCJcIik7XG4gIH07XG5cbiAgLy8gaW1wb3J0IGEgbGlzdCBvZiBtb2R1bGVzIGludG8gdGhlIGxpc3RcbiAgbGlzdC5pID0gZnVuY3Rpb24gaShtb2R1bGVzLCBtZWRpYSwgZGVkdXBlLCBzdXBwb3J0cywgbGF5ZXIpIHtcbiAgICBpZiAodHlwZW9mIG1vZHVsZXMgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgIG1vZHVsZXMgPSBbW251bGwsIG1vZHVsZXMsIHVuZGVmaW5lZF1dO1xuICAgIH1cbiAgICB2YXIgYWxyZWFkeUltcG9ydGVkTW9kdWxlcyA9IHt9O1xuICAgIGlmIChkZWR1cGUpIHtcbiAgICAgIGZvciAodmFyIGsgPSAwOyBrIDwgdGhpcy5sZW5ndGg7IGsrKykge1xuICAgICAgICB2YXIgaWQgPSB0aGlzW2tdWzBdO1xuICAgICAgICBpZiAoaWQgIT0gbnVsbCkge1xuICAgICAgICAgIGFscmVhZHlJbXBvcnRlZE1vZHVsZXNbaWRdID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBmb3IgKHZhciBfayA9IDA7IF9rIDwgbW9kdWxlcy5sZW5ndGg7IF9rKyspIHtcbiAgICAgIHZhciBpdGVtID0gW10uY29uY2F0KG1vZHVsZXNbX2tdKTtcbiAgICAgIGlmIChkZWR1cGUgJiYgYWxyZWFkeUltcG9ydGVkTW9kdWxlc1tpdGVtWzBdXSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmICh0eXBlb2YgbGF5ZXIgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBpdGVtWzVdID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgaXRlbVs1XSA9IGxheWVyO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGl0ZW1bMV0gPSBcIkBsYXllclwiLmNvbmNhdChpdGVtWzVdLmxlbmd0aCA+IDAgPyBcIiBcIi5jb25jYXQoaXRlbVs1XSkgOiBcIlwiLCBcIiB7XCIpLmNvbmNhdChpdGVtWzFdLCBcIn1cIik7XG4gICAgICAgICAgaXRlbVs1XSA9IGxheWVyO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAobWVkaWEpIHtcbiAgICAgICAgaWYgKCFpdGVtWzJdKSB7XG4gICAgICAgICAgaXRlbVsyXSA9IG1lZGlhO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGl0ZW1bMV0gPSBcIkBtZWRpYSBcIi5jb25jYXQoaXRlbVsyXSwgXCIge1wiKS5jb25jYXQoaXRlbVsxXSwgXCJ9XCIpO1xuICAgICAgICAgIGl0ZW1bMl0gPSBtZWRpYTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHN1cHBvcnRzKSB7XG4gICAgICAgIGlmICghaXRlbVs0XSkge1xuICAgICAgICAgIGl0ZW1bNF0gPSBcIlwiLmNvbmNhdChzdXBwb3J0cyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaXRlbVsxXSA9IFwiQHN1cHBvcnRzIChcIi5jb25jYXQoaXRlbVs0XSwgXCIpIHtcIikuY29uY2F0KGl0ZW1bMV0sIFwifVwiKTtcbiAgICAgICAgICBpdGVtWzRdID0gc3VwcG9ydHM7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGxpc3QucHVzaChpdGVtKTtcbiAgICB9XG4gIH07XG4gIHJldHVybiBsaXN0O1xufTsiLCJcInVzZSBzdHJpY3RcIjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXRlbSkge1xuICB2YXIgY29udGVudCA9IGl0ZW1bMV07XG4gIHZhciBjc3NNYXBwaW5nID0gaXRlbVszXTtcbiAgaWYgKCFjc3NNYXBwaW5nKSB7XG4gICAgcmV0dXJuIGNvbnRlbnQ7XG4gIH1cbiAgaWYgKHR5cGVvZiBidG9hID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICB2YXIgYmFzZTY0ID0gYnRvYSh1bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoSlNPTi5zdHJpbmdpZnkoY3NzTWFwcGluZykpKSk7XG4gICAgdmFyIGRhdGEgPSBcInNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LFwiLmNvbmNhdChiYXNlNjQpO1xuICAgIHZhciBzb3VyY2VNYXBwaW5nID0gXCIvKiMgXCIuY29uY2F0KGRhdGEsIFwiICovXCIpO1xuICAgIHJldHVybiBbY29udGVudF0uY29uY2F0KFtzb3VyY2VNYXBwaW5nXSkuam9pbihcIlxcblwiKTtcbiAgfVxuICByZXR1cm4gW2NvbnRlbnRdLmpvaW4oXCJcXG5cIik7XG59OyIsIihmdW5jdGlvbiAod2luZG93LCBmYWN0b3J5KSB7XG4gICAgaWYgKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0Jykge1xuICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkoKTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCkge1xuICAgICAgICBkZWZpbmUoZmFjdG9yeSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgd2luZG93LmpTdGF0ID0gZmFjdG9yeSgpO1xuICAgIH1cbn0pKHRoaXMsIGZ1bmN0aW9uICgpIHtcbnZhciBqU3RhdCA9IChmdW5jdGlvbihNYXRoLCB1bmRlZmluZWQpIHtcblxuLy8gRm9yIHF1aWNrIHJlZmVyZW5jZS5cbnZhciBjb25jYXQgPSBBcnJheS5wcm90b3R5cGUuY29uY2F0O1xudmFyIHNsaWNlID0gQXJyYXkucHJvdG90eXBlLnNsaWNlO1xudmFyIHRvU3RyaW5nID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcblxuLy8gQ2FsY3VsYXRlIGNvcnJlY3Rpb24gZm9yIElFRUUgZXJyb3Jcbi8vIFRPRE86IFRoaXMgY2FsY3VsYXRpb24gY2FuIGJlIGltcHJvdmVkLlxuZnVuY3Rpb24gY2FsY1JkeChuLCBtKSB7XG4gIHZhciB2YWwgPSBuID4gbSA/IG4gOiBtO1xuICByZXR1cm4gTWF0aC5wb3coMTAsXG4gICAgICAgICAgICAgICAgICAxNyAtIH5+KE1hdGgubG9nKCgodmFsID4gMCkgPyB2YWwgOiAtdmFsKSkgKiBNYXRoLkxPRzEwRSkpO1xufVxuXG5cbnZhciBpc0FycmF5ID0gQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiBpc0FycmF5KGFyZykge1xuICByZXR1cm4gdG9TdHJpbmcuY2FsbChhcmcpID09PSAnW29iamVjdCBBcnJheV0nO1xufTtcblxuXG5mdW5jdGlvbiBpc0Z1bmN0aW9uKGFyZykge1xuICByZXR1cm4gdG9TdHJpbmcuY2FsbChhcmcpID09PSAnW29iamVjdCBGdW5jdGlvbl0nO1xufVxuXG5cbmZ1bmN0aW9uIGlzTnVtYmVyKG51bSkge1xuICByZXR1cm4gKHR5cGVvZiBudW0gPT09ICdudW1iZXInKSA/IG51bSAtIG51bSA9PT0gMCA6IGZhbHNlO1xufVxuXG5cbi8vIENvbnZlcnRzIHRoZSBqU3RhdCBtYXRyaXggdG8gdmVjdG9yLlxuZnVuY3Rpb24gdG9WZWN0b3IoYXJyKSB7XG4gIHJldHVybiBjb25jYXQuYXBwbHkoW10sIGFycik7XG59XG5cblxuLy8gVGhlIG9uZSBhbmQgb25seSBqU3RhdCBjb25zdHJ1Y3Rvci5cbmZ1bmN0aW9uIGpTdGF0KCkge1xuICByZXR1cm4gbmV3IGpTdGF0Ll9pbml0KGFyZ3VtZW50cyk7XG59XG5cblxuLy8gVE9ETzogUmVtb3ZlIGFmdGVyIGFsbCByZWZlcmVuY2VzIGluIHNyYyBmaWxlcyBoYXZlIGJlZW4gcmVtb3ZlZC5cbmpTdGF0LmZuID0galN0YXQucHJvdG90eXBlO1xuXG5cbi8vIEJ5IHNlcGFyYXRpbmcgdGhlIGluaXRpYWxpemVyIGZyb20gdGhlIGNvbnN0cnVjdG9yIGl0J3MgZWFzaWVyIHRvIGhhbmRsZVxuLy8gYWx3YXlzIHJldHVybmluZyBhIG5ldyBpbnN0YW5jZSB3aGV0aGVyIFwibmV3XCIgd2FzIHVzZWQgb3Igbm90LlxualN0YXQuX2luaXQgPSBmdW5jdGlvbiBfaW5pdChhcmdzKSB7XG4gIC8vIElmIGZpcnN0IGFyZ3VtZW50IGlzIGFuIGFycmF5LCBtdXN0IGJlIHZlY3RvciBvciBtYXRyaXguXG4gIGlmIChpc0FycmF5KGFyZ3NbMF0pKSB7XG4gICAgLy8gQ2hlY2sgaWYgbWF0cml4LlxuICAgIGlmIChpc0FycmF5KGFyZ3NbMF1bMF0pKSB7XG4gICAgICAvLyBTZWUgaWYgYSBtYXBwaW5nIGZ1bmN0aW9uIHdhcyBhbHNvIHBhc3NlZC5cbiAgICAgIGlmIChpc0Z1bmN0aW9uKGFyZ3NbMV0pKVxuICAgICAgICBhcmdzWzBdID0galN0YXQubWFwKGFyZ3NbMF0sIGFyZ3NbMV0pO1xuICAgICAgLy8gSXRlcmF0ZSBvdmVyIGVhY2ggaXMgZmFzdGVyIHRoYW4gdGhpcy5wdXNoLmFwcGx5KHRoaXMsIGFyZ3NbMF0uXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyZ3NbMF0ubGVuZ3RoOyBpKyspXG4gICAgICAgIHRoaXNbaV0gPSBhcmdzWzBdW2ldO1xuICAgICAgdGhpcy5sZW5ndGggPSBhcmdzWzBdLmxlbmd0aDtcblxuICAgIC8vIE90aGVyd2lzZSBtdXN0IGJlIGEgdmVjdG9yLlxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzWzBdID0gaXNGdW5jdGlvbihhcmdzWzFdKSA/IGpTdGF0Lm1hcChhcmdzWzBdLCBhcmdzWzFdKSA6IGFyZ3NbMF07XG4gICAgICB0aGlzLmxlbmd0aCA9IDE7XG4gICAgfVxuXG4gIC8vIElmIGZpcnN0IGFyZ3VtZW50IGlzIG51bWJlciwgYXNzdW1lIGNyZWF0aW9uIG9mIHNlcXVlbmNlLlxuICB9IGVsc2UgaWYgKGlzTnVtYmVyKGFyZ3NbMF0pKSB7XG4gICAgdGhpc1swXSA9IGpTdGF0LnNlcS5hcHBseShudWxsLCBhcmdzKTtcbiAgICB0aGlzLmxlbmd0aCA9IDE7XG5cbiAgLy8gSGFuZGxlIGNhc2Ugd2hlbiBqU3RhdCBvYmplY3QgaXMgcGFzc2VkIHRvIGpTdGF0LlxuICB9IGVsc2UgaWYgKGFyZ3NbMF0gaW5zdGFuY2VvZiBqU3RhdCkge1xuICAgIC8vIER1cGxpY2F0ZSB0aGUgb2JqZWN0IGFuZCBwYXNzIGl0IGJhY2suXG4gICAgcmV0dXJuIGpTdGF0KGFyZ3NbMF0udG9BcnJheSgpKTtcblxuICAvLyBVbmV4cGVjdGVkIGFyZ3VtZW50IHZhbHVlLCByZXR1cm4gZW1wdHkgalN0YXQgb2JqZWN0LlxuICAvLyBUT0RPOiBUaGlzIGlzIHN0cmFuZ2UgYmVoYXZpb3IuIFNob3VsZG4ndCB0aGlzIHRocm93IG9yIHNvbWUgc3VjaCB0byBsZXRcbiAgLy8gdGhlIHVzZXIga25vdyB0aGV5IGhhZCBiYWQgYXJndW1lbnRzP1xuICB9IGVsc2Uge1xuICAgIHRoaXNbMF0gPSBbXTtcbiAgICB0aGlzLmxlbmd0aCA9IDE7XG4gIH1cblxuICByZXR1cm4gdGhpcztcbn07XG5qU3RhdC5faW5pdC5wcm90b3R5cGUgPSBqU3RhdC5wcm90b3R5cGU7XG5qU3RhdC5faW5pdC5jb25zdHJ1Y3RvciA9IGpTdGF0O1xuXG5cbi8vIFV0aWxpdHkgZnVuY3Rpb25zLlxuLy8gVE9ETzogZm9yIGludGVybmFsIHVzZSBvbmx5P1xualN0YXQudXRpbHMgPSB7XG4gIGNhbGNSZHg6IGNhbGNSZHgsXG4gIGlzQXJyYXk6IGlzQXJyYXksXG4gIGlzRnVuY3Rpb246IGlzRnVuY3Rpb24sXG4gIGlzTnVtYmVyOiBpc051bWJlcixcbiAgdG9WZWN0b3I6IHRvVmVjdG9yXG59O1xuXG5cbmpTdGF0Ll9yYW5kb21fZm4gPSBNYXRoLnJhbmRvbTtcbmpTdGF0LnNldFJhbmRvbSA9IGZ1bmN0aW9uIHNldFJhbmRvbShmbikge1xuICBpZiAodHlwZW9mIGZuICE9PSAnZnVuY3Rpb24nKVxuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2ZuIGlzIG5vdCBhIGZ1bmN0aW9uJyk7XG4gIGpTdGF0Ll9yYW5kb21fZm4gPSBmbjtcbn07XG5cblxuLy8gRWFzaWx5IGV4dGVuZCB0aGUgalN0YXQgb2JqZWN0LlxuLy8gVE9ETzogaXMgdGhpcyBzZXJpb3VzbHkgbmVjZXNzYXJ5P1xualN0YXQuZXh0ZW5kID0gZnVuY3Rpb24gZXh0ZW5kKG9iaikge1xuICB2YXIgaSwgajtcblxuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMSkge1xuICAgIGZvciAoaiBpbiBvYmopXG4gICAgICBqU3RhdFtqXSA9IG9ialtqXTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGZvciAoaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICBmb3IgKGogaW4gYXJndW1lbnRzW2ldKVxuICAgICAgb2JqW2pdID0gYXJndW1lbnRzW2ldW2pdO1xuICB9XG5cbiAgcmV0dXJuIG9iajtcbn07XG5cblxuLy8gUmV0dXJucyB0aGUgbnVtYmVyIG9mIHJvd3MgaW4gdGhlIG1hdHJpeC5cbmpTdGF0LnJvd3MgPSBmdW5jdGlvbiByb3dzKGFycikge1xuICByZXR1cm4gYXJyLmxlbmd0aCB8fCAxO1xufTtcblxuXG4vLyBSZXR1cm5zIHRoZSBudW1iZXIgb2YgY29sdW1ucyBpbiB0aGUgbWF0cml4LlxualN0YXQuY29scyA9IGZ1bmN0aW9uIGNvbHMoYXJyKSB7XG4gIHJldHVybiBhcnJbMF0ubGVuZ3RoIHx8IDE7XG59O1xuXG5cbi8vIFJldHVybnMgdGhlIGRpbWVuc2lvbnMgb2YgdGhlIG9iamVjdCB7IHJvd3M6IGksIGNvbHM6IGogfVxualN0YXQuZGltZW5zaW9ucyA9IGZ1bmN0aW9uIGRpbWVuc2lvbnMoYXJyKSB7XG4gIHJldHVybiB7XG4gICAgcm93czogalN0YXQucm93cyhhcnIpLFxuICAgIGNvbHM6IGpTdGF0LmNvbHMoYXJyKVxuICB9O1xufTtcblxuXG4vLyBSZXR1cm5zIGEgc3BlY2lmaWVkIHJvdyBhcyBhIHZlY3RvciBvciByZXR1cm4gYSBzdWIgbWF0cml4IGJ5IHBpY2sgc29tZSByb3dzXG5qU3RhdC5yb3cgPSBmdW5jdGlvbiByb3coYXJyLCBpbmRleCkge1xuICBpZiAoaXNBcnJheShpbmRleCkpIHtcbiAgICByZXR1cm4gaW5kZXgubWFwKGZ1bmN0aW9uKGkpIHtcbiAgICAgIHJldHVybiBqU3RhdC5yb3coYXJyLCBpKTtcbiAgICB9KVxuICB9XG4gIHJldHVybiBhcnJbaW5kZXhdO1xufTtcblxuXG4vLyByZXR1cm4gcm93IGFzIGFycmF5XG4vLyByb3dhKFtbMSwyXSxbMyw0XV0sMCkgLT4gWzEsMl1cbmpTdGF0LnJvd2EgPSBmdW5jdGlvbiByb3dhKGFyciwgaSkge1xuICByZXR1cm4galN0YXQucm93KGFyciwgaSk7XG59O1xuXG5cbi8vIFJldHVybnMgdGhlIHNwZWNpZmllZCBjb2x1bW4gYXMgYSB2ZWN0b3Igb3IgcmV0dXJuIGEgc3ViIG1hdHJpeCBieSBwaWNrIHNvbWVcbi8vIGNvbHVtbnNcbmpTdGF0LmNvbCA9IGZ1bmN0aW9uIGNvbChhcnIsIGluZGV4KSB7XG4gIGlmIChpc0FycmF5KGluZGV4KSkge1xuICAgIHZhciBzdWJtYXQgPSBqU3RhdC5hcmFuZ2UoYXJyLmxlbmd0aCkubWFwKGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIG5ldyBBcnJheShpbmRleC5sZW5ndGgpO1xuICAgIH0pO1xuICAgIGluZGV4LmZvckVhY2goZnVuY3Rpb24oaW5kLCBpKXtcbiAgICAgIGpTdGF0LmFyYW5nZShhcnIubGVuZ3RoKS5mb3JFYWNoKGZ1bmN0aW9uKGopIHtcbiAgICAgICAgc3VibWF0W2pdW2ldID0gYXJyW2pdW2luZF07XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICByZXR1cm4gc3VibWF0O1xuICB9XG4gIHZhciBjb2x1bW4gPSBuZXcgQXJyYXkoYXJyLmxlbmd0aCk7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSsrKVxuICAgIGNvbHVtbltpXSA9IFthcnJbaV1baW5kZXhdXTtcbiAgcmV0dXJuIGNvbHVtbjtcbn07XG5cblxuLy8gcmV0dXJuIGNvbHVtbiBhcyBhcnJheVxuLy8gY29sYShbWzEsMl0sWzMsNF1dLDApIC0+IFsxLDNdXG5qU3RhdC5jb2xhID0gZnVuY3Rpb24gY29sYShhcnIsIGkpIHtcbiAgcmV0dXJuIGpTdGF0LmNvbChhcnIsIGkpLm1hcChmdW5jdGlvbihhKXsgcmV0dXJuIGFbMF0gfSk7XG59O1xuXG5cbi8vIFJldHVybnMgdGhlIGRpYWdvbmFsIG9mIHRoZSBtYXRyaXhcbmpTdGF0LmRpYWcgPSBmdW5jdGlvbiBkaWFnKGFycikge1xuICB2YXIgbnJvdyA9IGpTdGF0LnJvd3MoYXJyKTtcbiAgdmFyIHJlcyA9IG5ldyBBcnJheShucm93KTtcbiAgZm9yICh2YXIgcm93ID0gMDsgcm93IDwgbnJvdzsgcm93KyspXG4gICAgcmVzW3Jvd10gPSBbYXJyW3Jvd11bcm93XV07XG4gIHJldHVybiByZXM7XG59O1xuXG5cbi8vIFJldHVybnMgdGhlIGFudGktZGlhZ29uYWwgb2YgdGhlIG1hdHJpeFxualN0YXQuYW50aWRpYWcgPSBmdW5jdGlvbiBhbnRpZGlhZyhhcnIpIHtcbiAgdmFyIG5yb3cgPSBqU3RhdC5yb3dzKGFycikgLSAxO1xuICB2YXIgcmVzID0gbmV3IEFycmF5KG5yb3cpO1xuICBmb3IgKHZhciBpID0gMDsgbnJvdyA+PSAwOyBucm93LS0sIGkrKylcbiAgICByZXNbaV0gPSBbYXJyW2ldW25yb3ddXTtcbiAgcmV0dXJuIHJlcztcbn07XG5cbi8vIFRyYW5zcG9zZSBhIG1hdHJpeCBvciBhcnJheS5cbmpTdGF0LnRyYW5zcG9zZSA9IGZ1bmN0aW9uIHRyYW5zcG9zZShhcnIpIHtcbiAgdmFyIG9iaiA9IFtdO1xuICB2YXIgb2JqQXJyLCByb3dzLCBjb2xzLCBqLCBpO1xuXG4gIC8vIE1ha2Ugc3VyZSBhcnIgaXMgaW4gbWF0cml4IGZvcm1hdC5cbiAgaWYgKCFpc0FycmF5KGFyclswXSkpXG4gICAgYXJyID0gW2Fycl07XG5cbiAgcm93cyA9IGFyci5sZW5ndGg7XG4gIGNvbHMgPSBhcnJbMF0ubGVuZ3RoO1xuXG4gIGZvciAoaSA9IDA7IGkgPCBjb2xzOyBpKyspIHtcbiAgICBvYmpBcnIgPSBuZXcgQXJyYXkocm93cyk7XG4gICAgZm9yIChqID0gMDsgaiA8IHJvd3M7IGorKylcbiAgICAgIG9iakFycltqXSA9IGFycltqXVtpXTtcbiAgICBvYmoucHVzaChvYmpBcnIpO1xuICB9XG5cbiAgLy8gSWYgb2JqIGlzIHZlY3RvciwgcmV0dXJuIG9ubHkgc2luZ2xlIGFycmF5LlxuICByZXR1cm4gb2JqLmxlbmd0aCA9PT0gMSA/IG9ialswXSA6IG9iajtcbn07XG5cblxuLy8gTWFwIGEgZnVuY3Rpb24gdG8gYW4gYXJyYXkgb3IgYXJyYXkgb2YgYXJyYXlzLlxuLy8gXCJ0b0FsdGVyXCIgaXMgYW4gaW50ZXJuYWwgdmFyaWFibGUuXG5qU3RhdC5tYXAgPSBmdW5jdGlvbiBtYXAoYXJyLCBmdW5jLCB0b0FsdGVyKSB7XG4gIHZhciByb3csIG5yb3csIG5jb2wsIHJlcywgY29sO1xuXG4gIGlmICghaXNBcnJheShhcnJbMF0pKVxuICAgIGFyciA9IFthcnJdO1xuXG4gIG5yb3cgPSBhcnIubGVuZ3RoO1xuICBuY29sID0gYXJyWzBdLmxlbmd0aDtcbiAgcmVzID0gdG9BbHRlciA/IGFyciA6IG5ldyBBcnJheShucm93KTtcblxuICBmb3IgKHJvdyA9IDA7IHJvdyA8IG5yb3c7IHJvdysrKSB7XG4gICAgLy8gaWYgdGhlIHJvdyBkb2Vzbid0IGV4aXN0LCBjcmVhdGUgaXRcbiAgICBpZiAoIXJlc1tyb3ddKVxuICAgICAgcmVzW3Jvd10gPSBuZXcgQXJyYXkobmNvbCk7XG4gICAgZm9yIChjb2wgPSAwOyBjb2wgPCBuY29sOyBjb2wrKylcbiAgICAgIHJlc1tyb3ddW2NvbF0gPSBmdW5jKGFycltyb3ddW2NvbF0sIHJvdywgY29sKTtcbiAgfVxuXG4gIHJldHVybiByZXMubGVuZ3RoID09PSAxID8gcmVzWzBdIDogcmVzO1xufTtcblxuXG4vLyBDdW11bGF0aXZlbHkgY29tYmluZSB0aGUgZWxlbWVudHMgb2YgYW4gYXJyYXkgb3IgYXJyYXkgb2YgYXJyYXlzIHVzaW5nIGEgZnVuY3Rpb24uXG5qU3RhdC5jdW1yZWR1Y2UgPSBmdW5jdGlvbiBjdW1yZWR1Y2UoYXJyLCBmdW5jLCB0b0FsdGVyKSB7XG4gIHZhciByb3csIG5yb3csIG5jb2wsIHJlcywgY29sO1xuXG4gIGlmICghaXNBcnJheShhcnJbMF0pKVxuICAgIGFyciA9IFthcnJdO1xuXG4gIG5yb3cgPSBhcnIubGVuZ3RoO1xuICBuY29sID0gYXJyWzBdLmxlbmd0aDtcbiAgcmVzID0gdG9BbHRlciA/IGFyciA6IG5ldyBBcnJheShucm93KTtcblxuICBmb3IgKHJvdyA9IDA7IHJvdyA8IG5yb3c7IHJvdysrKSB7XG4gICAgLy8gaWYgdGhlIHJvdyBkb2Vzbid0IGV4aXN0LCBjcmVhdGUgaXRcbiAgICBpZiAoIXJlc1tyb3ddKVxuICAgICAgcmVzW3Jvd10gPSBuZXcgQXJyYXkobmNvbCk7XG4gICAgaWYgKG5jb2wgPiAwKVxuICAgICAgcmVzW3Jvd11bMF0gPSBhcnJbcm93XVswXTtcbiAgICBmb3IgKGNvbCA9IDE7IGNvbCA8IG5jb2w7IGNvbCsrKVxuICAgICAgcmVzW3Jvd11bY29sXSA9IGZ1bmMocmVzW3Jvd11bY29sLTFdLCBhcnJbcm93XVtjb2xdKTtcbiAgfVxuICByZXR1cm4gcmVzLmxlbmd0aCA9PT0gMSA/IHJlc1swXSA6IHJlcztcbn07XG5cblxuLy8gRGVzdHJ1Y3RpdmVseSBhbHRlciBhbiBhcnJheS5cbmpTdGF0LmFsdGVyID0gZnVuY3Rpb24gYWx0ZXIoYXJyLCBmdW5jKSB7XG4gIHJldHVybiBqU3RhdC5tYXAoYXJyLCBmdW5jLCB0cnVlKTtcbn07XG5cblxuLy8gR2VuZXJhdGUgYSByb3dzIHggY29scyBtYXRyaXggYWNjb3JkaW5nIHRvIHRoZSBzdXBwbGllZCBmdW5jdGlvbi5cbmpTdGF0LmNyZWF0ZSA9IGZ1bmN0aW9uICBjcmVhdGUocm93cywgY29scywgZnVuYykge1xuICB2YXIgcmVzID0gbmV3IEFycmF5KHJvd3MpO1xuICB2YXIgaSwgajtcblxuICBpZiAoaXNGdW5jdGlvbihjb2xzKSkge1xuICAgIGZ1bmMgPSBjb2xzO1xuICAgIGNvbHMgPSByb3dzO1xuICB9XG5cbiAgZm9yIChpID0gMDsgaSA8IHJvd3M7IGkrKykge1xuICAgIHJlc1tpXSA9IG5ldyBBcnJheShjb2xzKTtcbiAgICBmb3IgKGogPSAwOyBqIDwgY29sczsgaisrKVxuICAgICAgcmVzW2ldW2pdID0gZnVuYyhpLCBqKTtcbiAgfVxuXG4gIHJldHVybiByZXM7XG59O1xuXG5cbmZ1bmN0aW9uIHJldFplcm8oKSB7IHJldHVybiAwOyB9XG5cblxuLy8gR2VuZXJhdGUgYSByb3dzIHggY29scyBtYXRyaXggb2YgemVyb3MuXG5qU3RhdC56ZXJvcyA9IGZ1bmN0aW9uIHplcm9zKHJvd3MsIGNvbHMpIHtcbiAgaWYgKCFpc051bWJlcihjb2xzKSlcbiAgICBjb2xzID0gcm93cztcbiAgcmV0dXJuIGpTdGF0LmNyZWF0ZShyb3dzLCBjb2xzLCByZXRaZXJvKTtcbn07XG5cblxuZnVuY3Rpb24gcmV0T25lKCkgeyByZXR1cm4gMTsgfVxuXG5cbi8vIEdlbmVyYXRlIGEgcm93cyB4IGNvbHMgbWF0cml4IG9mIG9uZXMuXG5qU3RhdC5vbmVzID0gZnVuY3Rpb24gb25lcyhyb3dzLCBjb2xzKSB7XG4gIGlmICghaXNOdW1iZXIoY29scykpXG4gICAgY29scyA9IHJvd3M7XG4gIHJldHVybiBqU3RhdC5jcmVhdGUocm93cywgY29scywgcmV0T25lKTtcbn07XG5cblxuLy8gR2VuZXJhdGUgYSByb3dzIHggY29scyBtYXRyaXggb2YgdW5pZm9ybWx5IHJhbmRvbSBudW1iZXJzLlxualN0YXQucmFuZCA9IGZ1bmN0aW9uIHJhbmQocm93cywgY29scykge1xuICBpZiAoIWlzTnVtYmVyKGNvbHMpKVxuICAgIGNvbHMgPSByb3dzO1xuICByZXR1cm4galN0YXQuY3JlYXRlKHJvd3MsIGNvbHMsIGpTdGF0Ll9yYW5kb21fZm4pO1xufTtcblxuXG5mdW5jdGlvbiByZXRJZGVudChpLCBqKSB7IHJldHVybiBpID09PSBqID8gMSA6IDA7IH1cblxuXG4vLyBHZW5lcmF0ZSBhbiBpZGVudGl0eSBtYXRyaXggb2Ygc2l6ZSByb3cgeCBjb2xzLlxualN0YXQuaWRlbnRpdHkgPSBmdW5jdGlvbiBpZGVudGl0eShyb3dzLCBjb2xzKSB7XG4gIGlmICghaXNOdW1iZXIoY29scykpXG4gICAgY29scyA9IHJvd3M7XG4gIHJldHVybiBqU3RhdC5jcmVhdGUocm93cywgY29scywgcmV0SWRlbnQpO1xufTtcblxuXG4vLyBUZXN0cyB3aGV0aGVyIGEgbWF0cml4IGlzIHN5bW1ldHJpY1xualN0YXQuc3ltbWV0cmljID0gZnVuY3Rpb24gc3ltbWV0cmljKGFycikge1xuICB2YXIgc2l6ZSA9IGFyci5sZW5ndGg7XG4gIHZhciByb3csIGNvbDtcblxuICBpZiAoYXJyLmxlbmd0aCAhPT0gYXJyWzBdLmxlbmd0aClcbiAgICByZXR1cm4gZmFsc2U7XG5cbiAgZm9yIChyb3cgPSAwOyByb3cgPCBzaXplOyByb3crKykge1xuICAgIGZvciAoY29sID0gMDsgY29sIDwgc2l6ZTsgY29sKyspXG4gICAgICBpZiAoYXJyW2NvbF1bcm93XSAhPT0gYXJyW3Jvd11bY29sXSlcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59O1xuXG5cbi8vIFNldCBhbGwgdmFsdWVzIHRvIHplcm8uXG5qU3RhdC5jbGVhciA9IGZ1bmN0aW9uIGNsZWFyKGFycikge1xuICByZXR1cm4galN0YXQuYWx0ZXIoYXJyLCByZXRaZXJvKTtcbn07XG5cblxuLy8gR2VuZXJhdGUgc2VxdWVuY2UuXG5qU3RhdC5zZXEgPSBmdW5jdGlvbiBzZXEobWluLCBtYXgsIGxlbmd0aCwgZnVuYykge1xuICBpZiAoIWlzRnVuY3Rpb24oZnVuYykpXG4gICAgZnVuYyA9IGZhbHNlO1xuXG4gIHZhciBhcnIgPSBbXTtcbiAgdmFyIGhpdmFsID0gY2FsY1JkeChtaW4sIG1heCk7XG4gIHZhciBzdGVwID0gKG1heCAqIGhpdmFsIC0gbWluICogaGl2YWwpIC8gKChsZW5ndGggLSAxKSAqIGhpdmFsKTtcbiAgdmFyIGN1cnJlbnQgPSBtaW47XG4gIHZhciBjbnQ7XG5cbiAgLy8gQ3VycmVudCBpcyBhc3NpZ25lZCB1c2luZyBhIHRlY2huaXF1ZSB0byBjb21wZW5zYXRlIGZvciBJRUVFIGVycm9yLlxuICAvLyBUT0RPOiBOZWVkcyBiZXR0ZXIgaW1wbGVtZW50YXRpb24uXG4gIGZvciAoY250ID0gMDtcbiAgICAgICBjdXJyZW50IDw9IG1heCAmJiBjbnQgPCBsZW5ndGg7XG4gICAgICAgY250KyssIGN1cnJlbnQgPSAobWluICogaGl2YWwgKyBzdGVwICogaGl2YWwgKiBjbnQpIC8gaGl2YWwpIHtcbiAgICBhcnIucHVzaCgoZnVuYyA/IGZ1bmMoY3VycmVudCwgY250KSA6IGN1cnJlbnQpKTtcbiAgfVxuXG4gIHJldHVybiBhcnI7XG59O1xuXG5cbi8vIGFyYW5nZSg1KSAtPiBbMCwxLDIsMyw0XVxuLy8gYXJhbmdlKDEsNSkgLT4gWzEsMiwzLDRdXG4vLyBhcmFuZ2UoNSwxLC0xKSAtPiBbNSw0LDMsMl1cbmpTdGF0LmFyYW5nZSA9IGZ1bmN0aW9uIGFyYW5nZShzdGFydCwgZW5kLCBzdGVwKSB7XG4gIHZhciBybCA9IFtdO1xuICB2YXIgaTtcbiAgc3RlcCA9IHN0ZXAgfHwgMTtcbiAgaWYgKGVuZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgZW5kID0gc3RhcnQ7XG4gICAgc3RhcnQgPSAwO1xuICB9XG4gIGlmIChzdGFydCA9PT0gZW5kIHx8IHN0ZXAgPT09IDApIHtcbiAgICByZXR1cm4gW107XG4gIH1cbiAgaWYgKHN0YXJ0IDwgZW5kICYmIHN0ZXAgPCAwKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG4gIGlmIChzdGFydCA+IGVuZCAmJiBzdGVwID4gMCkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuICBpZiAoc3RlcCA+IDApIHtcbiAgICBmb3IgKGkgPSBzdGFydDsgaSA8IGVuZDsgaSArPSBzdGVwKSB7XG4gICAgICBybC5wdXNoKGkpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBmb3IgKGkgPSBzdGFydDsgaSA+IGVuZDsgaSArPSBzdGVwKSB7XG4gICAgICBybC5wdXNoKGkpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmw7XG59O1xuXG5cbi8vIEE9W1sxLDIsM10sWzQsNSw2XSxbNyw4LDldXVxuLy8gc2xpY2UoQSx7cm93OntlbmQ6Mn0sY29sOntzdGFydDoxfX0pIC0+IFtbMiwzXSxbNSw2XV1cbi8vIHNsaWNlKEEsMSx7c3RhcnQ6MX0pIC0+IFs1LDZdXG4vLyBhcyBudW1weSBjb2RlIEFbOjIsMTpdXG5qU3RhdC5zbGljZSA9IChmdW5jdGlvbigpe1xuICBmdW5jdGlvbiBfc2xpY2UobGlzdCwgc3RhcnQsIGVuZCwgc3RlcCkge1xuICAgIC8vIG5vdGUgaXQncyBub3QgZXF1YWwgdG8gcmFuZ2UubWFwIG1vZGUgaXQncyBhIGJ1Z1xuICAgIHZhciBpO1xuICAgIHZhciBybCA9IFtdO1xuICAgIHZhciBsZW5ndGggPSBsaXN0Lmxlbmd0aDtcbiAgICBpZiAoc3RhcnQgPT09IHVuZGVmaW5lZCAmJiBlbmQgPT09IHVuZGVmaW5lZCAmJiBzdGVwID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBqU3RhdC5jb3B5KGxpc3QpO1xuICAgIH1cblxuICAgIHN0YXJ0ID0gc3RhcnQgfHwgMDtcbiAgICBlbmQgPSBlbmQgfHwgbGlzdC5sZW5ndGg7XG4gICAgc3RhcnQgPSBzdGFydCA+PSAwID8gc3RhcnQgOiBsZW5ndGggKyBzdGFydDtcbiAgICBlbmQgPSBlbmQgPj0gMCA/IGVuZCA6IGxlbmd0aCArIGVuZDtcbiAgICBzdGVwID0gc3RlcCB8fCAxO1xuICAgIGlmIChzdGFydCA9PT0gZW5kIHx8IHN0ZXAgPT09IDApIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gICAgaWYgKHN0YXJ0IDwgZW5kICYmIHN0ZXAgPCAwKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuICAgIGlmIChzdGFydCA+IGVuZCAmJiBzdGVwID4gMCkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgICBpZiAoc3RlcCA+IDApIHtcbiAgICAgIGZvciAoaSA9IHN0YXJ0OyBpIDwgZW5kOyBpICs9IHN0ZXApIHtcbiAgICAgICAgcmwucHVzaChsaXN0W2ldKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgZm9yIChpID0gc3RhcnQ7IGkgPiBlbmQ7aSArPSBzdGVwKSB7XG4gICAgICAgIHJsLnB1c2gobGlzdFtpXSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBybDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHNsaWNlKGxpc3QsIHJjU2xpY2UpIHtcbiAgICB2YXIgY29sU2xpY2UsIHJvd1NsaWNlO1xuICAgIHJjU2xpY2UgPSByY1NsaWNlIHx8IHt9O1xuICAgIGlmIChpc051bWJlcihyY1NsaWNlLnJvdykpIHtcbiAgICAgIGlmIChpc051bWJlcihyY1NsaWNlLmNvbCkpXG4gICAgICAgIHJldHVybiBsaXN0W3JjU2xpY2Uucm93XVtyY1NsaWNlLmNvbF07XG4gICAgICB2YXIgcm93ID0galN0YXQucm93YShsaXN0LCByY1NsaWNlLnJvdyk7XG4gICAgICBjb2xTbGljZSA9IHJjU2xpY2UuY29sIHx8IHt9O1xuICAgICAgcmV0dXJuIF9zbGljZShyb3csIGNvbFNsaWNlLnN0YXJ0LCBjb2xTbGljZS5lbmQsIGNvbFNsaWNlLnN0ZXApO1xuICAgIH1cblxuICAgIGlmIChpc051bWJlcihyY1NsaWNlLmNvbCkpIHtcbiAgICAgIHZhciBjb2wgPSBqU3RhdC5jb2xhKGxpc3QsIHJjU2xpY2UuY29sKTtcbiAgICAgIHJvd1NsaWNlID0gcmNTbGljZS5yb3cgfHwge307XG4gICAgICByZXR1cm4gX3NsaWNlKGNvbCwgcm93U2xpY2Uuc3RhcnQsIHJvd1NsaWNlLmVuZCwgcm93U2xpY2Uuc3RlcCk7XG4gICAgfVxuXG4gICAgcm93U2xpY2UgPSByY1NsaWNlLnJvdyB8fCB7fTtcbiAgICBjb2xTbGljZSA9IHJjU2xpY2UuY29sIHx8IHt9O1xuICAgIHZhciByb3dzID0gX3NsaWNlKGxpc3QsIHJvd1NsaWNlLnN0YXJ0LCByb3dTbGljZS5lbmQsIHJvd1NsaWNlLnN0ZXApO1xuICAgIHJldHVybiByb3dzLm1hcChmdW5jdGlvbihyb3cpIHtcbiAgICAgIHJldHVybiBfc2xpY2Uocm93LCBjb2xTbGljZS5zdGFydCwgY29sU2xpY2UuZW5kLCBjb2xTbGljZS5zdGVwKTtcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBzbGljZTtcbn0oKSk7XG5cblxuLy8gQT1bWzEsMiwzXSxbNCw1LDZdLFs3LDgsOV1dXG4vLyBzbGljZUFzc2lnbihBLHtyb3c6e3N0YXJ0OjF9LGNvbDp7c3RhcnQ6MX19LFtbMCwwXSxbMCwwXV0pXG4vLyBBPVtbMSwyLDNdLFs0LDAsMF0sWzcsMCwwXV1cbmpTdGF0LnNsaWNlQXNzaWduID0gZnVuY3Rpb24gc2xpY2VBc3NpZ24oQSwgcmNTbGljZSwgQikge1xuICB2YXIgbmwsIG1sO1xuICBpZiAoaXNOdW1iZXIocmNTbGljZS5yb3cpKSB7XG4gICAgaWYgKGlzTnVtYmVyKHJjU2xpY2UuY29sKSlcbiAgICAgIHJldHVybiBBW3JjU2xpY2Uucm93XVtyY1NsaWNlLmNvbF0gPSBCO1xuICAgIHJjU2xpY2UuY29sID0gcmNTbGljZS5jb2wgfHwge307XG4gICAgcmNTbGljZS5jb2wuc3RhcnQgPSByY1NsaWNlLmNvbC5zdGFydCB8fCAwO1xuICAgIHJjU2xpY2UuY29sLmVuZCA9IHJjU2xpY2UuY29sLmVuZCB8fCBBWzBdLmxlbmd0aDtcbiAgICByY1NsaWNlLmNvbC5zdGVwID0gcmNTbGljZS5jb2wuc3RlcCB8fCAxO1xuICAgIG5sID0galN0YXQuYXJhbmdlKHJjU2xpY2UuY29sLnN0YXJ0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICBNYXRoLm1pbihBLmxlbmd0aCwgcmNTbGljZS5jb2wuZW5kKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcmNTbGljZS5jb2wuc3RlcCk7XG4gICAgdmFyIG0gPSByY1NsaWNlLnJvdztcbiAgICBubC5mb3JFYWNoKGZ1bmN0aW9uKG4sIGkpIHtcbiAgICAgIEFbbV1bbl0gPSBCW2ldO1xuICAgIH0pO1xuICAgIHJldHVybiBBO1xuICB9XG5cbiAgaWYgKGlzTnVtYmVyKHJjU2xpY2UuY29sKSkge1xuICAgIHJjU2xpY2Uucm93ID0gcmNTbGljZS5yb3cgfHwge307XG4gICAgcmNTbGljZS5yb3cuc3RhcnQgPSByY1NsaWNlLnJvdy5zdGFydCB8fCAwO1xuICAgIHJjU2xpY2Uucm93LmVuZCA9IHJjU2xpY2Uucm93LmVuZCB8fCBBLmxlbmd0aDtcbiAgICByY1NsaWNlLnJvdy5zdGVwID0gcmNTbGljZS5yb3cuc3RlcCB8fCAxO1xuICAgIG1sID0galN0YXQuYXJhbmdlKHJjU2xpY2Uucm93LnN0YXJ0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICBNYXRoLm1pbihBWzBdLmxlbmd0aCwgcmNTbGljZS5yb3cuZW5kKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcmNTbGljZS5yb3cuc3RlcCk7XG4gICAgdmFyIG4gPSByY1NsaWNlLmNvbDtcbiAgICBtbC5mb3JFYWNoKGZ1bmN0aW9uKG0sIGopIHtcbiAgICAgIEFbbV1bbl0gPSBCW2pdO1xuICAgIH0pO1xuICAgIHJldHVybiBBO1xuICB9XG5cbiAgaWYgKEJbMF0ubGVuZ3RoID09PSB1bmRlZmluZWQpIHtcbiAgICBCID0gW0JdO1xuICB9XG4gIHJjU2xpY2Uucm93LnN0YXJ0ID0gcmNTbGljZS5yb3cuc3RhcnQgfHwgMDtcbiAgcmNTbGljZS5yb3cuZW5kID0gcmNTbGljZS5yb3cuZW5kIHx8IEEubGVuZ3RoO1xuICByY1NsaWNlLnJvdy5zdGVwID0gcmNTbGljZS5yb3cuc3RlcCB8fCAxO1xuICByY1NsaWNlLmNvbC5zdGFydCA9IHJjU2xpY2UuY29sLnN0YXJ0IHx8IDA7XG4gIHJjU2xpY2UuY29sLmVuZCA9IHJjU2xpY2UuY29sLmVuZCB8fCBBWzBdLmxlbmd0aDtcbiAgcmNTbGljZS5jb2wuc3RlcCA9IHJjU2xpY2UuY29sLnN0ZXAgfHwgMTtcbiAgbWwgPSBqU3RhdC5hcmFuZ2UocmNTbGljZS5yb3cuc3RhcnQsXG4gICAgICAgICAgICAgICAgICAgICAgICBNYXRoLm1pbihBLmxlbmd0aCwgcmNTbGljZS5yb3cuZW5kKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJjU2xpY2Uucm93LnN0ZXApO1xuICBubCA9IGpTdGF0LmFyYW5nZShyY1NsaWNlLmNvbC5zdGFydCxcbiAgICAgICAgICAgICAgICAgICAgICAgIE1hdGgubWluKEFbMF0ubGVuZ3RoLCByY1NsaWNlLmNvbC5lbmQpLFxuICAgICAgICAgICAgICAgICAgICAgICAgcmNTbGljZS5jb2wuc3RlcCk7XG4gIG1sLmZvckVhY2goZnVuY3Rpb24obSwgaSkge1xuICAgIG5sLmZvckVhY2goZnVuY3Rpb24obiwgaikge1xuICAgICAgQVttXVtuXSA9IEJbaV1bal07XG4gICAgfSk7XG4gIH0pO1xuICByZXR1cm4gQTtcbn07XG5cblxuLy8gWzEsMiwzXSAtPlxuLy8gW1sxLDAsMF0sWzAsMiwwXSxbMCwwLDNdXVxualN0YXQuZGlhZ29uYWwgPSBmdW5jdGlvbiBkaWFnb25hbChkaWFnQXJyYXkpIHtcbiAgdmFyIG1hdCA9IGpTdGF0Lnplcm9zKGRpYWdBcnJheS5sZW5ndGgsIGRpYWdBcnJheS5sZW5ndGgpO1xuICBkaWFnQXJyYXkuZm9yRWFjaChmdW5jdGlvbih0LCBpKSB7XG4gICAgbWF0W2ldW2ldID0gdDtcbiAgfSk7XG4gIHJldHVybiBtYXQ7XG59O1xuXG5cbi8vIHJldHVybiBjb3B5IG9mIEFcbmpTdGF0LmNvcHkgPSBmdW5jdGlvbiBjb3B5KEEpIHtcbiAgcmV0dXJuIEEubWFwKGZ1bmN0aW9uKHJvdykge1xuICAgIGlmIChpc051bWJlcihyb3cpKVxuICAgICAgcmV0dXJuIHJvdztcbiAgICByZXR1cm4gcm93Lm1hcChmdW5jdGlvbih0KSB7XG4gICAgICByZXR1cm4gdDtcbiAgICB9KTtcbiAgfSk7XG59O1xuXG5cbi8vIFRPRE86IEdvIG92ZXIgdGhpcyBlbnRpcmUgaW1wbGVtZW50YXRpb24uIFNlZW1zIGEgdHJhZ2ljIHdhc3RlIG9mIHJlc291cmNlc1xuLy8gZG9pbmcgYWxsIHRoaXMgd29yay4gSW5zdGVhZCwgYW5kIHdoaWxlIHVnbHksIHVzZSBuZXcgRnVuY3Rpb24oKSB0byBnZW5lcmF0ZVxuLy8gYSBjdXN0b20gZnVuY3Rpb24gZm9yIGVhY2ggc3RhdGljIG1ldGhvZC5cblxuLy8gUXVpY2sgcmVmZXJlbmNlLlxudmFyIGpQcm90byA9IGpTdGF0LnByb3RvdHlwZTtcblxuLy8gRGVmYXVsdCBsZW5ndGguXG5qUHJvdG8ubGVuZ3RoID0gMDtcblxuLy8gRm9yIGludGVybmFsIHVzZSBvbmx5LlxuLy8gVE9ETzogQ2hlY2sgaWYgdGhleSdyZSBhY3R1YWxseSB1c2VkLCBhbmQgaWYgdGhleSBhcmUgdGhlbiByZW5hbWUgdGhlbVxuLy8gdG8gXypcbmpQcm90by5wdXNoID0gQXJyYXkucHJvdG90eXBlLnB1c2g7XG5qUHJvdG8uc29ydCA9IEFycmF5LnByb3RvdHlwZS5zb3J0O1xualByb3RvLnNwbGljZSA9IEFycmF5LnByb3RvdHlwZS5zcGxpY2U7XG5qUHJvdG8uc2xpY2UgPSBBcnJheS5wcm90b3R5cGUuc2xpY2U7XG5cblxuLy8gUmV0dXJuIGEgY2xlYW4gYXJyYXkuXG5qUHJvdG8udG9BcnJheSA9IGZ1bmN0aW9uIHRvQXJyYXkoKSB7XG4gIHJldHVybiB0aGlzLmxlbmd0aCA+IDEgPyBzbGljZS5jYWxsKHRoaXMpIDogc2xpY2UuY2FsbCh0aGlzKVswXTtcbn07XG5cblxuLy8gTWFwIGEgZnVuY3Rpb24gdG8gYSBtYXRyaXggb3IgdmVjdG9yLlxualByb3RvLm1hcCA9IGZ1bmN0aW9uIG1hcChmdW5jLCB0b0FsdGVyKSB7XG4gIHJldHVybiBqU3RhdChqU3RhdC5tYXAodGhpcywgZnVuYywgdG9BbHRlcikpO1xufTtcblxuXG4vLyBDdW11bGF0aXZlbHkgY29tYmluZSB0aGUgZWxlbWVudHMgb2YgYSBtYXRyaXggb3IgdmVjdG9yIHVzaW5nIGEgZnVuY3Rpb24uXG5qUHJvdG8uY3VtcmVkdWNlID0gZnVuY3Rpb24gY3VtcmVkdWNlKGZ1bmMsIHRvQWx0ZXIpIHtcbiAgcmV0dXJuIGpTdGF0KGpTdGF0LmN1bXJlZHVjZSh0aGlzLCBmdW5jLCB0b0FsdGVyKSk7XG59O1xuXG5cbi8vIERlc3RydWN0aXZlbHkgYWx0ZXIgYW4gYXJyYXkuXG5qUHJvdG8uYWx0ZXIgPSBmdW5jdGlvbiBhbHRlcihmdW5jKSB7XG4gIGpTdGF0LmFsdGVyKHRoaXMsIGZ1bmMpO1xuICByZXR1cm4gdGhpcztcbn07XG5cblxuLy8gRXh0ZW5kIHByb3RvdHlwZSB3aXRoIG1ldGhvZHMgdGhhdCBoYXZlIG5vIGFyZ3VtZW50LlxuKGZ1bmN0aW9uKGZ1bmNzKSB7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgZnVuY3MubGVuZ3RoOyBpKyspIChmdW5jdGlvbihwYXNzZnVuYykge1xuICAgIGpQcm90b1twYXNzZnVuY10gPSBmdW5jdGlvbihmdW5jKSB7XG4gICAgICB2YXIgc2VsZiA9IHRoaXMsXG4gICAgICByZXN1bHRzO1xuICAgICAgLy8gQ2hlY2sgZm9yIGNhbGxiYWNrLlxuICAgICAgaWYgKGZ1bmMpIHtcbiAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgICAgICBmdW5jLmNhbGwoc2VsZiwgalByb3RvW3Bhc3NmdW5jXS5jYWxsKHNlbGYpKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgfVxuICAgICAgcmVzdWx0cyA9IGpTdGF0W3Bhc3NmdW5jXSh0aGlzKTtcbiAgICAgIHJldHVybiBpc0FycmF5KHJlc3VsdHMpID8galN0YXQocmVzdWx0cykgOiByZXN1bHRzO1xuICAgIH07XG4gIH0pKGZ1bmNzW2ldKTtcbn0pKCd0cmFuc3Bvc2UgY2xlYXIgc3ltbWV0cmljIHJvd3MgY29scyBkaW1lbnNpb25zIGRpYWcgYW50aWRpYWcnLnNwbGl0KCcgJykpO1xuXG5cbi8vIEV4dGVuZCBwcm90b3R5cGUgd2l0aCBtZXRob2RzIHRoYXQgaGF2ZSBvbmUgYXJndW1lbnQuXG4oZnVuY3Rpb24oZnVuY3MpIHtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBmdW5jcy5sZW5ndGg7IGkrKykgKGZ1bmN0aW9uKHBhc3NmdW5jKSB7XG4gICAgalByb3RvW3Bhc3NmdW5jXSA9IGZ1bmN0aW9uKGluZGV4LCBmdW5jKSB7XG4gICAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgICAvLyBjaGVjayBmb3IgY2FsbGJhY2tcbiAgICAgIGlmIChmdW5jKSB7XG4gICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgZnVuYy5jYWxsKHNlbGYsIGpQcm90b1twYXNzZnVuY10uY2FsbChzZWxmLCBpbmRleCkpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICB9XG4gICAgICByZXR1cm4galN0YXQoalN0YXRbcGFzc2Z1bmNdKHRoaXMsIGluZGV4KSk7XG4gICAgfTtcbiAgfSkoZnVuY3NbaV0pO1xufSkoJ3JvdyBjb2wnLnNwbGl0KCcgJykpO1xuXG5cbi8vIEV4dGVuZCBwcm90b3R5cGUgd2l0aCBzaW1wbGUgc2hvcnRjdXQgbWV0aG9kcy5cbihmdW5jdGlvbihmdW5jcykge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGZ1bmNzLmxlbmd0aDsgaSsrKSAoZnVuY3Rpb24ocGFzc2Z1bmMpIHtcbiAgICBqUHJvdG9bcGFzc2Z1bmNdID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4galN0YXQoalN0YXRbcGFzc2Z1bmNdLmFwcGx5KG51bGwsIGFyZ3VtZW50cykpO1xuICAgIH07XG4gIH0pKGZ1bmNzW2ldKTtcbn0pKCdjcmVhdGUgemVyb3Mgb25lcyByYW5kIGlkZW50aXR5Jy5zcGxpdCgnICcpKTtcblxuXG4vLyBFeHBvc2luZyBqU3RhdC5cbnJldHVybiBqU3RhdDtcblxufShNYXRoKSk7XG4oZnVuY3Rpb24oalN0YXQsIE1hdGgpIHtcblxudmFyIGlzRnVuY3Rpb24gPSBqU3RhdC51dGlscy5pc0Z1bmN0aW9uO1xuXG4vLyBBc2NlbmRpbmcgZnVuY3Rpb25zIGZvciBzb3J0XG5mdW5jdGlvbiBhc2NOdW0oYSwgYikgeyByZXR1cm4gYSAtIGI7IH1cblxuZnVuY3Rpb24gY2xpcChhcmcsIG1pbiwgbWF4KSB7XG4gIHJldHVybiBNYXRoLm1heChtaW4sIE1hdGgubWluKGFyZywgbWF4KSk7XG59XG5cblxuLy8gc3VtIG9mIGFuIGFycmF5XG5qU3RhdC5zdW0gPSBmdW5jdGlvbiBzdW0oYXJyKSB7XG4gIHZhciBzdW0gPSAwO1xuICB2YXIgaSA9IGFyci5sZW5ndGg7XG4gIHdoaWxlICgtLWkgPj0gMClcbiAgICBzdW0gKz0gYXJyW2ldO1xuICByZXR1cm4gc3VtO1xufTtcblxuXG4vLyBzdW0gc3F1YXJlZFxualN0YXQuc3Vtc3FyZCA9IGZ1bmN0aW9uIHN1bXNxcmQoYXJyKSB7XG4gIHZhciBzdW0gPSAwO1xuICB2YXIgaSA9IGFyci5sZW5ndGg7XG4gIHdoaWxlICgtLWkgPj0gMClcbiAgICBzdW0gKz0gYXJyW2ldICogYXJyW2ldO1xuICByZXR1cm4gc3VtO1xufTtcblxuXG4vLyBzdW0gb2Ygc3F1YXJlZCBlcnJvcnMgb2YgcHJlZGljdGlvbiAoU1NFKVxualN0YXQuc3Vtc3FlcnIgPSBmdW5jdGlvbiBzdW1zcWVycihhcnIpIHtcbiAgdmFyIG1lYW4gPSBqU3RhdC5tZWFuKGFycik7XG4gIHZhciBzdW0gPSAwO1xuICB2YXIgaSA9IGFyci5sZW5ndGg7XG4gIHZhciB0bXA7XG4gIHdoaWxlICgtLWkgPj0gMCkge1xuICAgIHRtcCA9IGFycltpXSAtIG1lYW47XG4gICAgc3VtICs9IHRtcCAqIHRtcDtcbiAgfVxuICByZXR1cm4gc3VtO1xufTtcblxuLy8gc3VtIG9mIGFuIGFycmF5IGluIGVhY2ggcm93XG5qU3RhdC5zdW1yb3cgPSBmdW5jdGlvbiBzdW1yb3coYXJyKSB7XG4gIHZhciBzdW0gPSAwO1xuICB2YXIgaSA9IGFyci5sZW5ndGg7XG4gIHdoaWxlICgtLWkgPj0gMClcbiAgICBzdW0gKz0gYXJyW2ldO1xuICByZXR1cm4gc3VtO1xufTtcblxuLy8gcHJvZHVjdCBvZiBhbiBhcnJheVxualN0YXQucHJvZHVjdCA9IGZ1bmN0aW9uIHByb2R1Y3QoYXJyKSB7XG4gIHZhciBwcm9kID0gMTtcbiAgdmFyIGkgPSBhcnIubGVuZ3RoO1xuICB3aGlsZSAoLS1pID49IDApXG4gICAgcHJvZCAqPSBhcnJbaV07XG4gIHJldHVybiBwcm9kO1xufTtcblxuXG4vLyBtaW5pbXVtIHZhbHVlIG9mIGFuIGFycmF5XG5qU3RhdC5taW4gPSBmdW5jdGlvbiBtaW4oYXJyKSB7XG4gIHZhciBsb3cgPSBhcnJbMF07XG4gIHZhciBpID0gMDtcbiAgd2hpbGUgKCsraSA8IGFyci5sZW5ndGgpXG4gICAgaWYgKGFycltpXSA8IGxvdylcbiAgICAgIGxvdyA9IGFycltpXTtcbiAgcmV0dXJuIGxvdztcbn07XG5cblxuLy8gbWF4aW11bSB2YWx1ZSBvZiBhbiBhcnJheVxualN0YXQubWF4ID0gZnVuY3Rpb24gbWF4KGFycikge1xuICB2YXIgaGlnaCA9IGFyclswXTtcbiAgdmFyIGkgPSAwO1xuICB3aGlsZSAoKytpIDwgYXJyLmxlbmd0aClcbiAgICBpZiAoYXJyW2ldID4gaGlnaClcbiAgICAgIGhpZ2ggPSBhcnJbaV07XG4gIHJldHVybiBoaWdoO1xufTtcblxuXG4vLyB1bmlxdWUgdmFsdWVzIG9mIGFuIGFycmF5XG5qU3RhdC51bmlxdWUgPSBmdW5jdGlvbiB1bmlxdWUoYXJyKSB7XG4gIHZhciBoYXNoID0ge30sIF9hcnIgPSBbXTtcbiAgZm9yKHZhciBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykge1xuICAgIGlmICghaGFzaFthcnJbaV1dKSB7XG4gICAgICBoYXNoW2FycltpXV0gPSB0cnVlO1xuICAgICAgX2Fyci5wdXNoKGFycltpXSk7XG4gICAgfVxuICB9XG4gIHJldHVybiBfYXJyO1xufTtcblxuXG4vLyBtZWFuIHZhbHVlIG9mIGFuIGFycmF5XG5qU3RhdC5tZWFuID0gZnVuY3Rpb24gbWVhbihhcnIpIHtcbiAgcmV0dXJuIGpTdGF0LnN1bShhcnIpIC8gYXJyLmxlbmd0aDtcbn07XG5cblxuLy8gbWVhbiBzcXVhcmVkIGVycm9yIChNU0UpXG5qU3RhdC5tZWFuc3FlcnIgPSBmdW5jdGlvbiBtZWFuc3FlcnIoYXJyKSB7XG4gIHJldHVybiBqU3RhdC5zdW1zcWVycihhcnIpIC8gYXJyLmxlbmd0aDtcbn07XG5cblxuLy8gZ2VvbWV0cmljIG1lYW4gb2YgYW4gYXJyYXlcbmpTdGF0Lmdlb21lYW4gPSBmdW5jdGlvbiBnZW9tZWFuKGFycikge1xuICB2YXIgbG9ncyA9IGFyci5tYXAoTWF0aC5sb2cpXG4gIHZhciBtZWFuT2ZMb2dzID0galN0YXQubWVhbihsb2dzKVxuICByZXR1cm4gTWF0aC5leHAobWVhbk9mTG9ncylcbn07XG5cblxuLy8gbWVkaWFuIG9mIGFuIGFycmF5XG5qU3RhdC5tZWRpYW4gPSBmdW5jdGlvbiBtZWRpYW4oYXJyKSB7XG4gIHZhciBhcnJsZW4gPSBhcnIubGVuZ3RoO1xuICB2YXIgX2FyciA9IGFyci5zbGljZSgpLnNvcnQoYXNjTnVtKTtcbiAgLy8gY2hlY2sgaWYgYXJyYXkgaXMgZXZlbiBvciBvZGQsIHRoZW4gcmV0dXJuIHRoZSBhcHByb3ByaWF0ZVxuICByZXR1cm4gIShhcnJsZW4gJiAxKVxuICAgID8gKF9hcnJbKGFycmxlbiAvIDIpIC0gMSBdICsgX2FyclsoYXJybGVuIC8gMildKSAvIDJcbiAgICA6IF9hcnJbKGFycmxlbiAvIDIpIHwgMCBdO1xufTtcblxuXG4vLyBjdW11bGF0aXZlIHN1bSBvZiBhbiBhcnJheVxualN0YXQuY3Vtc3VtID0gZnVuY3Rpb24gY3Vtc3VtKGFycikge1xuICByZXR1cm4galN0YXQuY3VtcmVkdWNlKGFyciwgZnVuY3Rpb24gKGEsIGIpIHsgcmV0dXJuIGEgKyBiOyB9KTtcbn07XG5cblxuLy8gY3VtdWxhdGl2ZSBwcm9kdWN0IG9mIGFuIGFycmF5XG5qU3RhdC5jdW1wcm9kID0gZnVuY3Rpb24gY3VtcHJvZChhcnIpIHtcbiAgcmV0dXJuIGpTdGF0LmN1bXJlZHVjZShhcnIsIGZ1bmN0aW9uIChhLCBiKSB7IHJldHVybiBhICogYjsgfSk7XG59O1xuXG5cbi8vIHN1Y2Nlc3NpdmUgZGlmZmVyZW5jZXMgb2YgYSBzZXF1ZW5jZVxualN0YXQuZGlmZiA9IGZ1bmN0aW9uIGRpZmYoYXJyKSB7XG4gIHZhciBkaWZmcyA9IFtdO1xuICB2YXIgYXJyTGVuID0gYXJyLmxlbmd0aDtcbiAgdmFyIGk7XG4gIGZvciAoaSA9IDE7IGkgPCBhcnJMZW47IGkrKylcbiAgICBkaWZmcy5wdXNoKGFycltpXSAtIGFycltpIC0gMV0pO1xuICByZXR1cm4gZGlmZnM7XG59O1xuXG5cbi8vIHJhbmtzIG9mIGFuIGFycmF5XG5qU3RhdC5yYW5rID0gZnVuY3Rpb24gKGFycikge1xuICB2YXIgaTtcbiAgdmFyIGRpc3RpbmN0TnVtYmVycyA9IFtdO1xuICB2YXIgbnVtYmVyQ291bnRzID0ge307XG4gIGZvciAoaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgbnVtYmVyID0gYXJyW2ldO1xuICAgIGlmIChudW1iZXJDb3VudHNbbnVtYmVyXSkge1xuICAgICAgbnVtYmVyQ291bnRzW251bWJlcl0rKztcbiAgICB9IGVsc2Uge1xuICAgICAgbnVtYmVyQ291bnRzW251bWJlcl0gPSAxO1xuICAgICAgZGlzdGluY3ROdW1iZXJzLnB1c2gobnVtYmVyKTtcbiAgICB9XG4gIH1cblxuICB2YXIgc29ydGVkRGlzdGluY3ROdW1iZXJzID0gZGlzdGluY3ROdW1iZXJzLnNvcnQoYXNjTnVtKTtcbiAgdmFyIG51bWJlclJhbmtzID0ge307XG4gIHZhciBjdXJyZW50UmFuayA9IDE7XG4gIGZvciAoaSA9IDA7IGkgPCBzb3J0ZWREaXN0aW5jdE51bWJlcnMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgbnVtYmVyID0gc29ydGVkRGlzdGluY3ROdW1iZXJzW2ldO1xuICAgIHZhciBjb3VudCA9IG51bWJlckNvdW50c1tudW1iZXJdO1xuICAgIHZhciBmaXJzdCA9IGN1cnJlbnRSYW5rO1xuICAgIHZhciBsYXN0ID0gY3VycmVudFJhbmsgKyBjb3VudCAtIDE7XG4gICAgdmFyIHJhbmsgPSAoZmlyc3QgKyBsYXN0KSAvIDI7XG4gICAgbnVtYmVyUmFua3NbbnVtYmVyXSA9IHJhbms7XG4gICAgY3VycmVudFJhbmsgKz0gY291bnQ7XG4gIH1cblxuICByZXR1cm4gYXJyLm1hcChmdW5jdGlvbiAobnVtYmVyKSB7XG4gICAgcmV0dXJuIG51bWJlclJhbmtzW251bWJlcl07XG4gIH0pO1xufTtcblxuXG4vLyBtb2RlIG9mIGFuIGFycmF5XG4vLyBpZiB0aGVyZSBhcmUgbXVsdGlwbGUgbW9kZXMgb2YgYW4gYXJyYXksIHJldHVybiBhbGwgb2YgdGhlbVxuLy8gaXMgdGhpcyB0aGUgYXBwcm9wcmlhdGUgd2F5IG9mIGhhbmRsaW5nIGl0P1xualN0YXQubW9kZSA9IGZ1bmN0aW9uIG1vZGUoYXJyKSB7XG4gIHZhciBhcnJMZW4gPSBhcnIubGVuZ3RoO1xuICB2YXIgX2FyciA9IGFyci5zbGljZSgpLnNvcnQoYXNjTnVtKTtcbiAgdmFyIGNvdW50ID0gMTtcbiAgdmFyIG1heENvdW50ID0gMDtcbiAgdmFyIG51bU1heENvdW50ID0gMDtcbiAgdmFyIG1vZGVfYXJyID0gW107XG4gIHZhciBpO1xuXG4gIGZvciAoaSA9IDA7IGkgPCBhcnJMZW47IGkrKykge1xuICAgIGlmIChfYXJyW2ldID09PSBfYXJyW2kgKyAxXSkge1xuICAgICAgY291bnQrKztcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGNvdW50ID4gbWF4Q291bnQpIHtcbiAgICAgICAgbW9kZV9hcnIgPSBbX2FycltpXV07XG4gICAgICAgIG1heENvdW50ID0gY291bnQ7XG4gICAgICAgIG51bU1heENvdW50ID0gMDtcbiAgICAgIH1cbiAgICAgIC8vIGFyZSB0aGVyZSBtdWx0aXBsZSBtYXggY291bnRzXG4gICAgICBlbHNlIGlmIChjb3VudCA9PT0gbWF4Q291bnQpIHtcbiAgICAgICAgbW9kZV9hcnIucHVzaChfYXJyW2ldKTtcbiAgICAgICAgbnVtTWF4Q291bnQrKztcbiAgICAgIH1cbiAgICAgIC8vIHJlc2V0dGluZyBjb3VudCBmb3IgbmV3IHZhbHVlIGluIGFycmF5XG4gICAgICBjb3VudCA9IDE7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG51bU1heENvdW50ID09PSAwID8gbW9kZV9hcnJbMF0gOiBtb2RlX2Fycjtcbn07XG5cblxuLy8gcmFuZ2Ugb2YgYW4gYXJyYXlcbmpTdGF0LnJhbmdlID0gZnVuY3Rpb24gcmFuZ2UoYXJyKSB7XG4gIHJldHVybiBqU3RhdC5tYXgoYXJyKSAtIGpTdGF0Lm1pbihhcnIpO1xufTtcblxuLy8gdmFyaWFuY2Ugb2YgYW4gYXJyYXlcbi8vIGZsYWcgPSB0cnVlIGluZGljYXRlcyBzYW1wbGUgaW5zdGVhZCBvZiBwb3B1bGF0aW9uXG5qU3RhdC52YXJpYW5jZSA9IGZ1bmN0aW9uIHZhcmlhbmNlKGFyciwgZmxhZykge1xuICByZXR1cm4galN0YXQuc3Vtc3FlcnIoYXJyKSAvIChhcnIubGVuZ3RoIC0gKGZsYWcgPyAxIDogMCkpO1xufTtcblxuLy8gcG9vbGVkIHZhcmlhbmNlIG9mIGFuIGFycmF5IG9mIGFycmF5c1xualN0YXQucG9vbGVkdmFyaWFuY2UgPSBmdW5jdGlvbiBwb29sZWR2YXJpYW5jZShhcnIpIHtcbiAgdmFyIHN1bXNxZXJyID0gYXJyLnJlZHVjZShmdW5jdGlvbiAoYSwgc2FtcGxlcykge3JldHVybiBhICsgalN0YXQuc3Vtc3FlcnIoc2FtcGxlcyk7fSwgMCk7XG4gIHZhciBjb3VudCA9IGFyci5yZWR1Y2UoZnVuY3Rpb24gKGEsIHNhbXBsZXMpIHtyZXR1cm4gYSArIHNhbXBsZXMubGVuZ3RoO30sIDApO1xuICByZXR1cm4gc3Vtc3FlcnIgLyAoY291bnQgLSBhcnIubGVuZ3RoKTtcbn07XG5cbi8vIGRldmlhdGlvbiBvZiBhbiBhcnJheVxualN0YXQuZGV2aWF0aW9uID0gZnVuY3Rpb24gKGFycikge1xuICB2YXIgbWVhbiA9IGpTdGF0Lm1lYW4oYXJyKTtcbiAgdmFyIGFycmxlbiA9IGFyci5sZW5ndGg7XG4gIHZhciBkZXYgPSBuZXcgQXJyYXkoYXJybGVuKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnJsZW47IGkrKykge1xuICAgIGRldltpXSA9IGFycltpXSAtIG1lYW47XG4gIH1cbiAgcmV0dXJuIGRldjtcbn07XG5cbi8vIHN0YW5kYXJkIGRldmlhdGlvbiBvZiBhbiBhcnJheVxuLy8gZmxhZyA9IHRydWUgaW5kaWNhdGVzIHNhbXBsZSBpbnN0ZWFkIG9mIHBvcHVsYXRpb25cbmpTdGF0LnN0ZGV2ID0gZnVuY3Rpb24gc3RkZXYoYXJyLCBmbGFnKSB7XG4gIHJldHVybiBNYXRoLnNxcnQoalN0YXQudmFyaWFuY2UoYXJyLCBmbGFnKSk7XG59O1xuXG4vLyBwb29sZWQgc3RhbmRhcmQgZGV2aWF0aW9uIG9mIGFuIGFycmF5IG9mIGFycmF5c1xualN0YXQucG9vbGVkc3RkZXYgPSBmdW5jdGlvbiBwb29sZWRzdGRldihhcnIpIHtcbiAgcmV0dXJuIE1hdGguc3FydChqU3RhdC5wb29sZWR2YXJpYW5jZShhcnIpKTtcbn07XG5cbi8vIG1lYW4gZGV2aWF0aW9uIChtZWFuIGFic29sdXRlIGRldmlhdGlvbikgb2YgYW4gYXJyYXlcbmpTdGF0Lm1lYW5kZXYgPSBmdW5jdGlvbiBtZWFuZGV2KGFycikge1xuICB2YXIgbWVhbiA9IGpTdGF0Lm1lYW4oYXJyKTtcbiAgdmFyIGEgPSBbXTtcbiAgZm9yICh2YXIgaSA9IGFyci5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgIGEucHVzaChNYXRoLmFicyhhcnJbaV0gLSBtZWFuKSk7XG4gIH1cbiAgcmV0dXJuIGpTdGF0Lm1lYW4oYSk7XG59O1xuXG5cbi8vIG1lZGlhbiBkZXZpYXRpb24gKG1lZGlhbiBhYnNvbHV0ZSBkZXZpYXRpb24pIG9mIGFuIGFycmF5XG5qU3RhdC5tZWRkZXYgPSBmdW5jdGlvbiBtZWRkZXYoYXJyKSB7XG4gIHZhciBtZWRpYW4gPSBqU3RhdC5tZWRpYW4oYXJyKTtcbiAgdmFyIGEgPSBbXTtcbiAgZm9yICh2YXIgaSA9IGFyci5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgIGEucHVzaChNYXRoLmFicyhhcnJbaV0gLSBtZWRpYW4pKTtcbiAgfVxuICByZXR1cm4galN0YXQubWVkaWFuKGEpO1xufTtcblxuXG4vLyBjb2VmZmljaWVudCBvZiB2YXJpYXRpb25cbmpTdGF0LmNvZWZmdmFyID0gZnVuY3Rpb24gY29lZmZ2YXIoYXJyKSB7XG4gIHJldHVybiBqU3RhdC5zdGRldihhcnIpIC8galN0YXQubWVhbihhcnIpO1xufTtcblxuXG4vLyBxdWFydGlsZXMgb2YgYW4gYXJyYXlcbmpTdGF0LnF1YXJ0aWxlcyA9IGZ1bmN0aW9uIHF1YXJ0aWxlcyhhcnIpIHtcbiAgdmFyIGFycmxlbiA9IGFyci5sZW5ndGg7XG4gIHZhciBfYXJyID0gYXJyLnNsaWNlKCkuc29ydChhc2NOdW0pO1xuICByZXR1cm4gW1xuICAgIF9hcnJbIE1hdGgucm91bmQoKGFycmxlbikgLyA0KSAtIDEgXSxcbiAgICBfYXJyWyBNYXRoLnJvdW5kKChhcnJsZW4pIC8gMikgLSAxIF0sXG4gICAgX2FyclsgTWF0aC5yb3VuZCgoYXJybGVuKSAqIDMgLyA0KSAtIDEgXVxuICBdO1xufTtcblxuXG4vLyBBcmJpdGFyeSBxdWFudGlsZXMgb2YgYW4gYXJyYXkuIERpcmVjdCBwb3J0IG9mIHRoZSBzY2lweS5zdGF0c1xuLy8gaW1wbGVtZW50YXRpb24gYnkgUGllcnJlIEdGIEdlcmFyZC1NYXJjaGFudC5cbmpTdGF0LnF1YW50aWxlcyA9IGZ1bmN0aW9uIHF1YW50aWxlcyhhcnIsIHF1YW50aWxlc0FycmF5LCBhbHBoYXAsIGJldGFwKSB7XG4gIHZhciBzb3J0ZWRBcnJheSA9IGFyci5zbGljZSgpLnNvcnQoYXNjTnVtKTtcbiAgdmFyIHF1YW50aWxlVmFscyA9IFtxdWFudGlsZXNBcnJheS5sZW5ndGhdO1xuICB2YXIgbiA9IGFyci5sZW5ndGg7XG4gIHZhciBpLCBwLCBtLCBhbGVwaCwgaywgZ2FtbWE7XG5cbiAgaWYgKHR5cGVvZiBhbHBoYXAgPT09ICd1bmRlZmluZWQnKVxuICAgIGFscGhhcCA9IDMgLyA4O1xuICBpZiAodHlwZW9mIGJldGFwID09PSAndW5kZWZpbmVkJylcbiAgICBiZXRhcCA9IDMgLyA4O1xuXG4gIGZvciAoaSA9IDA7IGkgPCBxdWFudGlsZXNBcnJheS5sZW5ndGg7IGkrKykge1xuICAgIHAgPSBxdWFudGlsZXNBcnJheVtpXTtcbiAgICBtID0gYWxwaGFwICsgcCAqICgxIC0gYWxwaGFwIC0gYmV0YXApO1xuICAgIGFsZXBoID0gbiAqIHAgKyBtO1xuICAgIGsgPSBNYXRoLmZsb29yKGNsaXAoYWxlcGgsIDEsIG4gLSAxKSk7XG4gICAgZ2FtbWEgPSBjbGlwKGFsZXBoIC0gaywgMCwgMSk7XG4gICAgcXVhbnRpbGVWYWxzW2ldID0gKDEgLSBnYW1tYSkgKiBzb3J0ZWRBcnJheVtrIC0gMV0gKyBnYW1tYSAqIHNvcnRlZEFycmF5W2tdO1xuICB9XG5cbiAgcmV0dXJuIHF1YW50aWxlVmFscztcbn07XG5cbi8vIFJldHVybiB0aGUgay10aCBwZXJjZW50aWxlIG9mIHZhbHVlcyBpbiBhIHJhbmdlLCB3aGVyZSBrIGlzIGluIHRoZSByYW5nZSAwLi4xLCBpbmNsdXNpdmUuXG4vLyBQYXNzaW5nIHRydWUgZm9yIHRoZSBleGNsdXNpdmUgcGFyYW1ldGVyIGV4Y2x1ZGVzIGJvdGggZW5kcG9pbnRzIG9mIHRoZSByYW5nZS5cbmpTdGF0LnBlcmNlbnRpbGUgPSBmdW5jdGlvbiBwZXJjZW50aWxlKGFyciwgaywgZXhjbHVzaXZlKSB7XG4gIHZhciBfYXJyID0gYXJyLnNsaWNlKCkuc29ydChhc2NOdW0pO1xuICB2YXIgcmVhbEluZGV4ID0gayAqIChfYXJyLmxlbmd0aCArIChleGNsdXNpdmUgPyAxIDogLTEpKSArIChleGNsdXNpdmUgPyAwIDogMSk7XG4gIHZhciBpbmRleCA9IHBhcnNlSW50KHJlYWxJbmRleCk7XG4gIHZhciBmcmFjID0gcmVhbEluZGV4IC0gaW5kZXg7XG4gIGlmIChpbmRleCArIDEgPCBfYXJyLmxlbmd0aCkge1xuICAgIHJldHVybiBfYXJyW2luZGV4IC0gMV0gKyBmcmFjICogKF9hcnJbaW5kZXhdIC0gX2FycltpbmRleCAtIDFdKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gX2FycltpbmRleCAtIDFdO1xuICB9XG59XG5cbi8vIFRoZSBwZXJjZW50aWxlIHJhbmsgb2Ygc2NvcmUgaW4gYSBnaXZlbiBhcnJheS4gUmV0dXJucyB0aGUgcGVyY2VudGFnZVxuLy8gb2YgYWxsIHZhbHVlcyBpbiB0aGUgaW5wdXQgYXJyYXkgdGhhdCBhcmUgbGVzcyB0aGFuIChraW5kPSdzdHJpY3QnKSBvclxuLy8gbGVzcyBvciBlcXVhbCB0aGFuIChraW5kPSd3ZWFrJykgc2NvcmUuIERlZmF1bHQgaXMgd2Vhay5cbmpTdGF0LnBlcmNlbnRpbGVPZlNjb3JlID0gZnVuY3Rpb24gcGVyY2VudGlsZU9mU2NvcmUoYXJyLCBzY29yZSwga2luZCkge1xuICB2YXIgY291bnRlciA9IDA7XG4gIHZhciBsZW4gPSBhcnIubGVuZ3RoO1xuICB2YXIgc3RyaWN0ID0gZmFsc2U7XG4gIHZhciB2YWx1ZSwgaTtcblxuICBpZiAoa2luZCA9PT0gJ3N0cmljdCcpXG4gICAgc3RyaWN0ID0gdHJ1ZTtcblxuICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICB2YWx1ZSA9IGFycltpXTtcbiAgICBpZiAoKHN0cmljdCAmJiB2YWx1ZSA8IHNjb3JlKSB8fFxuICAgICAgICAoIXN0cmljdCAmJiB2YWx1ZSA8PSBzY29yZSkpIHtcbiAgICAgIGNvdW50ZXIrKztcbiAgICB9XG4gIH1cblxuICByZXR1cm4gY291bnRlciAvIGxlbjtcbn07XG5cblxuLy8gSGlzdG9ncmFtIChiaW4gY291bnQpIGRhdGFcbmpTdGF0Lmhpc3RvZ3JhbSA9IGZ1bmN0aW9uIGhpc3RvZ3JhbShhcnIsIGJpbkNudCkge1xuICBiaW5DbnQgPSBiaW5DbnQgfHwgNDtcbiAgdmFyIGZpcnN0ID0galN0YXQubWluKGFycik7XG4gIHZhciBiaW5XaWR0aCA9IChqU3RhdC5tYXgoYXJyKSAtIGZpcnN0KSAvIGJpbkNudDtcbiAgdmFyIGxlbiA9IGFyci5sZW5ndGg7XG4gIHZhciBiaW5zID0gW107XG4gIHZhciBpO1xuXG4gIGZvciAoaSA9IDA7IGkgPCBiaW5DbnQ7IGkrKylcbiAgICBiaW5zW2ldID0gMDtcbiAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKVxuICAgIGJpbnNbTWF0aC5taW4oTWF0aC5mbG9vcigoKGFycltpXSAtIGZpcnN0KSAvIGJpbldpZHRoKSksIGJpbkNudCAtIDEpXSArPSAxO1xuXG4gIHJldHVybiBiaW5zO1xufTtcblxuXG4vLyBjb3ZhcmlhbmNlIG9mIHR3byBhcnJheXNcbmpTdGF0LmNvdmFyaWFuY2UgPSBmdW5jdGlvbiBjb3ZhcmlhbmNlKGFycjEsIGFycjIpIHtcbiAgdmFyIHUgPSBqU3RhdC5tZWFuKGFycjEpO1xuICB2YXIgdiA9IGpTdGF0Lm1lYW4oYXJyMik7XG4gIHZhciBhcnIxTGVuID0gYXJyMS5sZW5ndGg7XG4gIHZhciBzcV9kZXYgPSBuZXcgQXJyYXkoYXJyMUxlbik7XG4gIHZhciBpO1xuXG4gIGZvciAoaSA9IDA7IGkgPCBhcnIxTGVuOyBpKyspXG4gICAgc3FfZGV2W2ldID0gKGFycjFbaV0gLSB1KSAqIChhcnIyW2ldIC0gdik7XG5cbiAgcmV0dXJuIGpTdGF0LnN1bShzcV9kZXYpIC8gKGFycjFMZW4gLSAxKTtcbn07XG5cblxuLy8gKHBlYXJzb24ncykgcG9wdWxhdGlvbiBjb3JyZWxhdGlvbiBjb2VmZmljaWVudCwgcmhvXG5qU3RhdC5jb3JyY29lZmYgPSBmdW5jdGlvbiBjb3JyY29lZmYoYXJyMSwgYXJyMikge1xuICByZXR1cm4galN0YXQuY292YXJpYW5jZShhcnIxLCBhcnIyKSAvXG4gICAgICBqU3RhdC5zdGRldihhcnIxLCAxKSAvXG4gICAgICBqU3RhdC5zdGRldihhcnIyLCAxKTtcbn07XG5cbiAgLy8gKHNwZWFybWFuJ3MpIHJhbmsgY29ycmVsYXRpb24gY29lZmZpY2llbnQsIHNwXG5qU3RhdC5zcGVhcm1hbmNvZWZmID0gIGZ1bmN0aW9uIChhcnIxLCBhcnIyKSB7XG4gIGFycjEgPSBqU3RhdC5yYW5rKGFycjEpO1xuICBhcnIyID0galN0YXQucmFuayhhcnIyKTtcbiAgLy9yZXR1cm4gcGVhcnNvbidzIGNvcnJlbGF0aW9uIG9mIHRoZSByYW5rczpcbiAgcmV0dXJuIGpTdGF0LmNvcnJjb2VmZihhcnIxLCBhcnIyKTtcbn1cblxuXG4vLyBzdGF0aXN0aWNhbCBzdGFuZGFyZGl6ZWQgbW9tZW50cyAoZ2VuZXJhbCBmb3JtIG9mIHNrZXcva3VydClcbmpTdGF0LnN0YW5Nb21lbnQgPSBmdW5jdGlvbiBzdGFuTW9tZW50KGFyciwgbikge1xuICB2YXIgbXUgPSBqU3RhdC5tZWFuKGFycik7XG4gIHZhciBzaWdtYSA9IGpTdGF0LnN0ZGV2KGFycik7XG4gIHZhciBsZW4gPSBhcnIubGVuZ3RoO1xuICB2YXIgc2tld1N1bSA9IDA7XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKylcbiAgICBza2V3U3VtICs9IE1hdGgucG93KChhcnJbaV0gLSBtdSkgLyBzaWdtYSwgbik7XG5cbiAgcmV0dXJuIHNrZXdTdW0gLyBhcnIubGVuZ3RoO1xufTtcblxuLy8gKHBlYXJzb24ncykgbW9tZW50IGNvZWZmaWNpZW50IG9mIHNrZXduZXNzXG5qU3RhdC5za2V3bmVzcyA9IGZ1bmN0aW9uIHNrZXduZXNzKGFycikge1xuICByZXR1cm4galN0YXQuc3Rhbk1vbWVudChhcnIsIDMpO1xufTtcblxuLy8gKHBlYXJzb24ncykgKGV4Y2Vzcykga3VydG9zaXNcbmpTdGF0Lmt1cnRvc2lzID0gZnVuY3Rpb24ga3VydG9zaXMoYXJyKSB7XG4gIHJldHVybiBqU3RhdC5zdGFuTW9tZW50KGFyciwgNCkgLSAzO1xufTtcblxuXG52YXIgalByb3RvID0galN0YXQucHJvdG90eXBlO1xuXG5cbi8vIEV4dGVuZCBqUHJvdG8gd2l0aCBtZXRob2QgZm9yIGNhbGN1bGF0aW5nIGN1bXVsYXRpdmUgc3VtcyBhbmQgcHJvZHVjdHMuXG4vLyBUaGlzIGRpZmZlcnMgZnJvbSB0aGUgc2ltaWxhciBleHRlbnNpb24gYmVsb3cgYXMgY3Vtc3VtIGFuZCBjdW1wcm9kIHNob3VsZFxuLy8gbm90IGJlIHJ1biBhZ2FpbiBpbiB0aGUgY2FzZSBmdWxsYm9vbCA9PT0gdHJ1ZS5cbi8vIElmIGEgbWF0cml4IGlzIHBhc3NlZCwgYXV0b21hdGljYWxseSBhc3N1bWUgb3BlcmF0aW9uIHNob3VsZCBiZSBkb25lIG9uIHRoZVxuLy8gY29sdW1ucy5cbihmdW5jdGlvbihmdW5jcykge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGZ1bmNzLmxlbmd0aDsgaSsrKSAoZnVuY3Rpb24ocGFzc2Z1bmMpIHtcbiAgICAvLyBJZiBhIG1hdHJpeCBpcyBwYXNzZWQsIGF1dG9tYXRpY2FsbHkgYXNzdW1lIG9wZXJhdGlvbiBzaG91bGQgYmUgZG9uZSBvblxuICAgIC8vIHRoZSBjb2x1bW5zLlxuICAgIGpQcm90b1twYXNzZnVuY10gPSBmdW5jdGlvbihmdWxsYm9vbCwgZnVuYykge1xuICAgICAgdmFyIGFyciA9IFtdO1xuICAgICAgdmFyIGkgPSAwO1xuICAgICAgdmFyIHRtcHRoaXMgPSB0aGlzO1xuICAgICAgLy8gQXNzaWdubWVudCByZWFzc2lnbmF0aW9uIGRlcGVuZGluZyBvbiBob3cgcGFyYW1ldGVycyB3ZXJlIHBhc3NlZCBpbi5cbiAgICAgIGlmIChpc0Z1bmN0aW9uKGZ1bGxib29sKSkge1xuICAgICAgICBmdW5jID0gZnVsbGJvb2w7XG4gICAgICAgIGZ1bGxib29sID0gZmFsc2U7XG4gICAgICB9XG4gICAgICAvLyBDaGVjayBpZiBhIGNhbGxiYWNrIHdhcyBwYXNzZWQgd2l0aCB0aGUgZnVuY3Rpb24uXG4gICAgICBpZiAoZnVuYykge1xuICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAgICAgIGZ1bmMuY2FsbCh0bXB0aGlzLCBqUHJvdG9bcGFzc2Z1bmNdLmNhbGwodG1wdGhpcywgZnVsbGJvb2wpKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgfVxuICAgICAgLy8gQ2hlY2sgaWYgbWF0cml4IGFuZCBydW4gY2FsY3VsYXRpb25zLlxuICAgICAgaWYgKHRoaXMubGVuZ3RoID4gMSkge1xuICAgICAgICB0bXB0aGlzID0gZnVsbGJvb2wgPT09IHRydWUgPyB0aGlzIDogdGhpcy50cmFuc3Bvc2UoKTtcbiAgICAgICAgZm9yICg7IGkgPCB0bXB0aGlzLmxlbmd0aDsgaSsrKVxuICAgICAgICAgIGFycltpXSA9IGpTdGF0W3Bhc3NmdW5jXSh0bXB0aGlzW2ldKTtcbiAgICAgICAgcmV0dXJuIGFycjtcbiAgICAgIH1cbiAgICAgIC8vIFBhc3MgZnVsbGJvb2wgaWYgb25seSB2ZWN0b3IsIG5vdCBhIG1hdHJpeC4gZm9yIHZhcmlhbmNlIGFuZCBzdGRldi5cbiAgICAgIHJldHVybiBqU3RhdFtwYXNzZnVuY10odGhpc1swXSwgZnVsbGJvb2wpO1xuICAgIH07XG4gIH0pKGZ1bmNzW2ldKTtcbn0pKCgnY3Vtc3VtIGN1bXByb2QnKS5zcGxpdCgnICcpKTtcblxuXG4vLyBFeHRlbmQgalByb3RvIHdpdGggbWV0aG9kcyB3aGljaCBkb24ndCByZXF1aXJlIGFyZ3VtZW50cyBhbmQgd29yayBvbiBjb2x1bW5zLlxuKGZ1bmN0aW9uKGZ1bmNzKSB7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgZnVuY3MubGVuZ3RoOyBpKyspIChmdW5jdGlvbihwYXNzZnVuYykge1xuICAgIC8vIElmIGEgbWF0cml4IGlzIHBhc3NlZCwgYXV0b21hdGljYWxseSBhc3N1bWUgb3BlcmF0aW9uIHNob3VsZCBiZSBkb25lIG9uXG4gICAgLy8gdGhlIGNvbHVtbnMuXG4gICAgalByb3RvW3Bhc3NmdW5jXSA9IGZ1bmN0aW9uKGZ1bGxib29sLCBmdW5jKSB7XG4gICAgICB2YXIgYXJyID0gW107XG4gICAgICB2YXIgaSA9IDA7XG4gICAgICB2YXIgdG1wdGhpcyA9IHRoaXM7XG4gICAgICAvLyBBc3NpZ25tZW50IHJlYXNzaWduYXRpb24gZGVwZW5kaW5nIG9uIGhvdyBwYXJhbWV0ZXJzIHdlcmUgcGFzc2VkIGluLlxuICAgICAgaWYgKGlzRnVuY3Rpb24oZnVsbGJvb2wpKSB7XG4gICAgICAgIGZ1bmMgPSBmdWxsYm9vbDtcbiAgICAgICAgZnVsbGJvb2wgPSBmYWxzZTtcbiAgICAgIH1cbiAgICAgIC8vIENoZWNrIGlmIGEgY2FsbGJhY2sgd2FzIHBhc3NlZCB3aXRoIHRoZSBmdW5jdGlvbi5cbiAgICAgIGlmIChmdW5jKSB7XG4gICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgZnVuYy5jYWxsKHRtcHRoaXMsIGpQcm90b1twYXNzZnVuY10uY2FsbCh0bXB0aGlzLCBmdWxsYm9vbCkpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICB9XG4gICAgICAvLyBDaGVjayBpZiBtYXRyaXggYW5kIHJ1biBjYWxjdWxhdGlvbnMuXG4gICAgICBpZiAodGhpcy5sZW5ndGggPiAxKSB7XG4gICAgICAgIGlmIChwYXNzZnVuYyAhPT0gJ3N1bXJvdycpXG4gICAgICAgICAgdG1wdGhpcyA9IGZ1bGxib29sID09PSB0cnVlID8gdGhpcyA6IHRoaXMudHJhbnNwb3NlKCk7XG4gICAgICAgIGZvciAoOyBpIDwgdG1wdGhpcy5sZW5ndGg7IGkrKylcbiAgICAgICAgICBhcnJbaV0gPSBqU3RhdFtwYXNzZnVuY10odG1wdGhpc1tpXSk7XG4gICAgICAgIHJldHVybiBmdWxsYm9vbCA9PT0gdHJ1ZVxuICAgICAgICAgICAgPyBqU3RhdFtwYXNzZnVuY10oalN0YXQudXRpbHMudG9WZWN0b3IoYXJyKSlcbiAgICAgICAgICAgIDogYXJyO1xuICAgICAgfVxuICAgICAgLy8gUGFzcyBmdWxsYm9vbCBpZiBvbmx5IHZlY3Rvciwgbm90IGEgbWF0cml4LiBmb3IgdmFyaWFuY2UgYW5kIHN0ZGV2LlxuICAgICAgcmV0dXJuIGpTdGF0W3Bhc3NmdW5jXSh0aGlzWzBdLCBmdWxsYm9vbCk7XG4gICAgfTtcbiAgfSkoZnVuY3NbaV0pO1xufSkoKCdzdW0gc3Vtc3FyZCBzdW1zcWVyciBzdW1yb3cgcHJvZHVjdCBtaW4gbWF4IHVuaXF1ZSBtZWFuIG1lYW5zcWVyciAnICtcbiAgICAnZ2VvbWVhbiBtZWRpYW4gZGlmZiByYW5rIG1vZGUgcmFuZ2UgdmFyaWFuY2UgZGV2aWF0aW9uIHN0ZGV2IG1lYW5kZXYgJyArXG4gICAgJ21lZGRldiBjb2VmZnZhciBxdWFydGlsZXMgaGlzdG9ncmFtIHNrZXduZXNzIGt1cnRvc2lzJykuc3BsaXQoJyAnKSk7XG5cblxuLy8gRXh0ZW5kIGpQcm90byB3aXRoIGZ1bmN0aW9ucyB0aGF0IHRha2UgYXJndW1lbnRzLiBPcGVyYXRpb25zIG9uIG1hdHJpY2VzIGFyZVxuLy8gZG9uZSBvbiBjb2x1bW5zLlxuKGZ1bmN0aW9uKGZ1bmNzKSB7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgZnVuY3MubGVuZ3RoOyBpKyspIChmdW5jdGlvbihwYXNzZnVuYykge1xuICAgIGpQcm90b1twYXNzZnVuY10gPSBmdW5jdGlvbigpIHtcbiAgICAgIHZhciBhcnIgPSBbXTtcbiAgICAgIHZhciBpID0gMDtcbiAgICAgIHZhciB0bXB0aGlzID0gdGhpcztcbiAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtcbiAgICAgIHZhciBjYWxsYmFja0Z1bmN0aW9uO1xuXG4gICAgICAvLyBJZiB0aGUgbGFzdCBhcmd1bWVudCBpcyBhIGZ1bmN0aW9uLCB3ZSBhc3N1bWUgaXQncyBhIGNhbGxiYWNrOyB3ZVxuICAgICAgLy8gc3RyaXAgdGhlIGNhbGxiYWNrIG91dCBhbmQgY2FsbCB0aGUgZnVuY3Rpb24gYWdhaW4uXG4gICAgICBpZiAoaXNGdW5jdGlvbihhcmdzW2FyZ3MubGVuZ3RoIC0gMV0pKSB7XG4gICAgICAgIGNhbGxiYWNrRnVuY3Rpb24gPSBhcmdzW2FyZ3MubGVuZ3RoIC0gMV07XG4gICAgICAgIHZhciBhcmdzVG9QYXNzID0gYXJncy5zbGljZSgwLCBhcmdzLmxlbmd0aCAtIDEpO1xuXG4gICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgY2FsbGJhY2tGdW5jdGlvbi5jYWxsKHRtcHRoaXMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpQcm90b1twYXNzZnVuY10uYXBwbHkodG1wdGhpcywgYXJnc1RvUGFzcykpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG5cbiAgICAgIC8vIE90aGVyd2lzZSB3ZSBjdXJyeSB0aGUgZnVuY3Rpb24gYXJncyBhbmQgY2FsbCBub3JtYWxseS5cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNhbGxiYWNrRnVuY3Rpb24gPSB1bmRlZmluZWQ7XG4gICAgICAgIHZhciBjdXJyaWVkRnVuY3Rpb24gPSBmdW5jdGlvbiBjdXJyaWVkRnVuY3Rpb24odmVjdG9yKSB7XG4gICAgICAgICAgcmV0dXJuIGpTdGF0W3Bhc3NmdW5jXS5hcHBseSh0bXB0aGlzLCBbdmVjdG9yXS5jb25jYXQoYXJncykpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIElmIHRoaXMgaXMgYSBtYXRyaXgsIHJ1biBjb2x1bW4tYnktY29sdW1uLlxuICAgICAgaWYgKHRoaXMubGVuZ3RoID4gMSkge1xuICAgICAgICB0bXB0aGlzID0gdG1wdGhpcy50cmFuc3Bvc2UoKTtcbiAgICAgICAgZm9yICg7IGkgPCB0bXB0aGlzLmxlbmd0aDsgaSsrKVxuICAgICAgICAgIGFycltpXSA9IGN1cnJpZWRGdW5jdGlvbih0bXB0aGlzW2ldKTtcbiAgICAgICAgcmV0dXJuIGFycjtcbiAgICAgIH1cblxuICAgICAgLy8gT3RoZXJ3aXNlIHJ1biBvbiB0aGUgdmVjdG9yLlxuICAgICAgcmV0dXJuIGN1cnJpZWRGdW5jdGlvbih0aGlzWzBdKTtcbiAgICB9O1xuICB9KShmdW5jc1tpXSk7XG59KSgncXVhbnRpbGVzIHBlcmNlbnRpbGVPZlNjb3JlJy5zcGxpdCgnICcpKTtcblxufShqU3RhdCwgTWF0aCkpO1xuLy8gU3BlY2lhbCBmdW5jdGlvbnMgLy9cbihmdW5jdGlvbihqU3RhdCwgTWF0aCkge1xuXG4vLyBMb2ctZ2FtbWEgZnVuY3Rpb25cbmpTdGF0LmdhbW1hbG4gPSBmdW5jdGlvbiBnYW1tYWxuKHgpIHtcbiAgdmFyIGogPSAwO1xuICB2YXIgY29mID0gW1xuICAgIDc2LjE4MDA5MTcyOTQ3MTQ2LCAtODYuNTA1MzIwMzI5NDE2NzcsIDI0LjAxNDA5ODI0MDgzMDkxLFxuICAgIC0xLjIzMTczOTU3MjQ1MDE1NSwgMC4xMjA4NjUwOTczODY2MTc5ZS0yLCAtMC41Mzk1MjM5Mzg0OTUzZS01XG4gIF07XG4gIHZhciBzZXIgPSAxLjAwMDAwMDAwMDE5MDAxNTtcbiAgdmFyIHh4LCB5LCB0bXA7XG4gIHRtcCA9ICh5ID0geHggPSB4KSArIDUuNTtcbiAgdG1wIC09ICh4eCArIDAuNSkgKiBNYXRoLmxvZyh0bXApO1xuICBmb3IgKDsgaiA8IDY7IGorKylcbiAgICBzZXIgKz0gY29mW2pdIC8gKyt5O1xuICByZXR1cm4gTWF0aC5sb2coMi41MDY2MjgyNzQ2MzEwMDA1ICogc2VyIC8geHgpIC0gdG1wO1xufTtcblxuLypcbiAqIGxvZy1nYW1tYSBmdW5jdGlvbiB0byBzdXBwb3J0IHBvaXNzb24gZGlzdHJpYnV0aW9uIHNhbXBsaW5nLiBUaGVcbiAqIGFsZ29yaXRobSBjb21lcyBmcm9tIFNQRUNGVU4gYnkgU2hhbmppZSBaaGFuZyBhbmQgSmlhbm1pbmcgSmluIGFuZCB0aGVpclxuICogYm9vayBcIkNvbXB1dGF0aW9uIG9mIFNwZWNpYWwgRnVuY3Rpb25zXCIsIDE5OTYsIEpvaG4gV2lsZXkgJiBTb25zLCBJbmMuXG4gKi9cbmpTdGF0LmxvZ2dhbSA9IGZ1bmN0aW9uIGxvZ2dhbSh4KSB7XG4gIHZhciB4MCwgeDIsIHhwLCBnbCwgZ2wwO1xuICB2YXIgaywgbjtcblxuICB2YXIgYSA9IFs4LjMzMzMzMzMzMzMzMzMzM2UtMDIsIC0yLjc3Nzc3Nzc3Nzc3Nzc3OGUtMDMsXG4gICAgICAgICAgNy45MzY1MDc5MzY1MDc5MzdlLTA0LCAtNS45NTIzODA5NTIzODA5NTJlLTA0LFxuICAgICAgICAgIDguNDE3NTA4NDE3NTA4NDE4ZS0wNCwgLTEuOTE3NTI2OTE3NTI2OTE4ZS0wMyxcbiAgICAgICAgICA2LjQxMDI1NjQxMDI1NjQxMGUtMDMsIC0yLjk1NTA2NTM1OTQ3NzEyNGUtMDIsXG4gICAgICAgICAgMS43OTY0NDM3MjM2ODgzMDdlLTAxLCAtMS4zOTI0MzIyMTY5MDU5MGUrMDBdO1xuICB4MCA9IHg7XG4gIG4gPSAwO1xuICBpZiAoKHggPT0gMS4wKSB8fCAoeCA9PSAyLjApKSB7XG4gICAgICByZXR1cm4gMC4wO1xuICB9XG4gIGlmICh4IDw9IDcuMCkge1xuICAgICAgbiA9IE1hdGguZmxvb3IoNyAtIHgpO1xuICAgICAgeDAgPSB4ICsgbjtcbiAgfVxuICB4MiA9IDEuMCAvICh4MCAqIHgwKTtcbiAgeHAgPSAyICogTWF0aC5QSTtcbiAgZ2wwID0gYVs5XTtcbiAgZm9yIChrID0gODsgayA+PSAwOyBrLS0pIHtcbiAgICAgIGdsMCAqPSB4MjtcbiAgICAgIGdsMCArPSBhW2tdO1xuICB9XG4gIGdsID0gZ2wwIC8geDAgKyAwLjUgKiBNYXRoLmxvZyh4cCkgKyAoeDAgLSAwLjUpICogTWF0aC5sb2coeDApIC0geDA7XG4gIGlmICh4IDw9IDcuMCkge1xuICAgICAgZm9yIChrID0gMTsgayA8PSBuOyBrKyspIHtcbiAgICAgICAgICBnbCAtPSBNYXRoLmxvZyh4MCAtIDEuMCk7XG4gICAgICAgICAgeDAgLT0gMS4wO1xuICAgICAgfVxuICB9XG4gIHJldHVybiBnbDtcbn1cblxuLy8gZ2FtbWEgb2YgeFxualN0YXQuZ2FtbWFmbiA9IGZ1bmN0aW9uIGdhbW1hZm4oeCkge1xuICB2YXIgcCA9IFstMS43MTYxODUxMzg4NjU0OTUsIDI0Ljc2NTY1MDgwNTU3NTkyLCAtMzc5LjgwNDI1NjQ3MDk0NTYzLFxuICAgICAgICAgICA2MjkuMzMxMTU1MzEyODE4NCwgODY2Ljk2NjIwMjc5MDQxMzMsIC0zMTQ1MS4yNzI5Njg4NDgzNjcsXG4gICAgICAgICAgIC0zNjE0NC40MTM0MTg2OTExNzYsIDY2NDU2LjE0MzgyMDI0MDU0XG4gIF07XG4gIHZhciBxID0gWy0zMC44NDAyMzAwMTE5NzM5LCAzMTUuMzUwNjI2OTc5NjA0MTYsIC0xMDE1LjE1NjM2NzQ5MDIxOTIsXG4gICAgICAgICAgIC0zMTA3Ljc3MTY3MTU3MjMxMSwgMjI1MzguMTE4NDIwOTgwMTUxLCA0NzU1Ljg0NjI3NzUyNzg4MTEsXG4gICAgICAgICAgIC0xMzQ2NTkuOTU5ODY0OTY5MywgLTExNTEzMi4yNTk2NzU1NTM1XTtcbiAgdmFyIGZhY3QgPSBmYWxzZTtcbiAgdmFyIG4gPSAwO1xuICB2YXIgeGRlbiA9IDA7XG4gIHZhciB4bnVtID0gMDtcbiAgdmFyIHkgPSB4O1xuICB2YXIgaSwgeiwgeWksIHJlcztcbiAgaWYgKHggPiAxNzEuNjI0Mzc2OTUzNjA3Nikge1xuICAgIHJldHVybiBJbmZpbml0eTtcbiAgfVxuICBpZiAoeSA8PSAwKSB7XG4gICAgcmVzID0geSAlIDEgKyAzLjZlLTE2O1xuICAgIGlmIChyZXMpIHtcbiAgICAgIGZhY3QgPSAoISh5ICYgMSkgPyAxIDogLTEpICogTWF0aC5QSSAvIE1hdGguc2luKE1hdGguUEkgKiByZXMpO1xuICAgICAgeSA9IDEgLSB5O1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gSW5maW5pdHk7XG4gICAgfVxuICB9XG4gIHlpID0geTtcbiAgaWYgKHkgPCAxKSB7XG4gICAgeiA9IHkrKztcbiAgfSBlbHNlIHtcbiAgICB6ID0gKHkgLT0gbiA9ICh5IHwgMCkgLSAxKSAtIDE7XG4gIH1cbiAgZm9yIChpID0gMDsgaSA8IDg7ICsraSkge1xuICAgIHhudW0gPSAoeG51bSArIHBbaV0pICogejtcbiAgICB4ZGVuID0geGRlbiAqIHogKyBxW2ldO1xuICB9XG4gIHJlcyA9IHhudW0gLyB4ZGVuICsgMTtcbiAgaWYgKHlpIDwgeSkge1xuICAgIHJlcyAvPSB5aTtcbiAgfSBlbHNlIGlmICh5aSA+IHkpIHtcbiAgICBmb3IgKGkgPSAwOyBpIDwgbjsgKytpKSB7XG4gICAgICByZXMgKj0geTtcbiAgICAgIHkrKztcbiAgICB9XG4gIH1cbiAgaWYgKGZhY3QpIHtcbiAgICByZXMgPSBmYWN0IC8gcmVzO1xuICB9XG4gIHJldHVybiByZXM7XG59O1xuXG5cbi8vIGxvd2VyIGluY29tcGxldGUgZ2FtbWEgZnVuY3Rpb24sIHdoaWNoIGlzIHVzdWFsbHkgdHlwZXNldCB3aXRoIGFcbi8vIGxvd2VyLWNhc2UgZ3JlZWsgZ2FtbWEgYXMgdGhlIGZ1bmN0aW9uIHN5bWJvbFxualN0YXQuZ2FtbWFwID0gZnVuY3Rpb24gZ2FtbWFwKGEsIHgpIHtcbiAgcmV0dXJuIGpTdGF0Lmxvd1JlZ0dhbW1hKGEsIHgpICogalN0YXQuZ2FtbWFmbihhKTtcbn07XG5cblxuLy8gVGhlIGxvd2VyIHJlZ3VsYXJpemVkIGluY29tcGxldGUgZ2FtbWEgZnVuY3Rpb24sIHVzdWFsbHkgd3JpdHRlbiBQKGEseClcbmpTdGF0Lmxvd1JlZ0dhbW1hID0gZnVuY3Rpb24gbG93UmVnR2FtbWEoYSwgeCkge1xuICB2YXIgYWxuID0galN0YXQuZ2FtbWFsbihhKTtcbiAgdmFyIGFwID0gYTtcbiAgdmFyIHN1bSA9IDEgLyBhO1xuICB2YXIgZGVsID0gc3VtO1xuICB2YXIgYiA9IHggKyAxIC0gYTtcbiAgdmFyIGMgPSAxIC8gMS4wZS0zMDtcbiAgdmFyIGQgPSAxIC8gYjtcbiAgdmFyIGggPSBkO1xuICB2YXIgaSA9IDE7XG4gIC8vIGNhbGN1bGF0ZSBtYXhpbXVtIG51bWJlciBvZiBpdHRlcmF0aW9ucyByZXF1aXJlZCBmb3IgYVxuICB2YXIgSVRNQVggPSAtfihNYXRoLmxvZygoYSA+PSAxKSA/IGEgOiAxIC8gYSkgKiA4LjUgKyBhICogMC40ICsgMTcpO1xuICB2YXIgYW47XG5cbiAgaWYgKHggPCAwIHx8IGEgPD0gMCkge1xuICAgIHJldHVybiBOYU47XG4gIH0gZWxzZSBpZiAoeCA8IGEgKyAxKSB7XG4gICAgZm9yICg7IGkgPD0gSVRNQVg7IGkrKykge1xuICAgICAgc3VtICs9IGRlbCAqPSB4IC8gKythcDtcbiAgICB9XG4gICAgcmV0dXJuIChzdW0gKiBNYXRoLmV4cCgteCArIGEgKiBNYXRoLmxvZyh4KSAtIChhbG4pKSk7XG4gIH1cblxuICBmb3IgKDsgaSA8PSBJVE1BWDsgaSsrKSB7XG4gICAgYW4gPSAtaSAqIChpIC0gYSk7XG4gICAgYiArPSAyO1xuICAgIGQgPSBhbiAqIGQgKyBiO1xuICAgIGMgPSBiICsgYW4gLyBjO1xuICAgIGQgPSAxIC8gZDtcbiAgICBoICo9IGQgKiBjO1xuICB9XG5cbiAgcmV0dXJuICgxIC0gaCAqIE1hdGguZXhwKC14ICsgYSAqIE1hdGgubG9nKHgpIC0gKGFsbikpKTtcbn07XG5cbi8vIG5hdHVyYWwgbG9nIGZhY3RvcmlhbCBvZiBuXG5qU3RhdC5mYWN0b3JpYWxsbiA9IGZ1bmN0aW9uIGZhY3RvcmlhbGxuKG4pIHtcbiAgcmV0dXJuIG4gPCAwID8gTmFOIDogalN0YXQuZ2FtbWFsbihuICsgMSk7XG59O1xuXG4vLyBmYWN0b3JpYWwgb2YgblxualN0YXQuZmFjdG9yaWFsID0gZnVuY3Rpb24gZmFjdG9yaWFsKG4pIHtcbiAgcmV0dXJuIG4gPCAwID8gTmFOIDogalN0YXQuZ2FtbWFmbihuICsgMSk7XG59O1xuXG4vLyBjb21iaW5hdGlvbnMgb2YgbiwgbVxualN0YXQuY29tYmluYXRpb24gPSBmdW5jdGlvbiBjb21iaW5hdGlvbihuLCBtKSB7XG4gIC8vIG1ha2Ugc3VyZSBuIG9yIG0gZG9uJ3QgZXhjZWVkIHRoZSB1cHBlciBsaW1pdCBvZiB1c2FibGUgdmFsdWVzXG4gIHJldHVybiAobiA+IDE3MCB8fCBtID4gMTcwKVxuICAgICAgPyBNYXRoLmV4cChqU3RhdC5jb21iaW5hdGlvbmxuKG4sIG0pKVxuICAgICAgOiAoalN0YXQuZmFjdG9yaWFsKG4pIC8galN0YXQuZmFjdG9yaWFsKG0pKSAvIGpTdGF0LmZhY3RvcmlhbChuIC0gbSk7XG59O1xuXG5cbmpTdGF0LmNvbWJpbmF0aW9ubG4gPSBmdW5jdGlvbiBjb21iaW5hdGlvbmxuKG4sIG0pe1xuICByZXR1cm4galN0YXQuZmFjdG9yaWFsbG4obikgLSBqU3RhdC5mYWN0b3JpYWxsbihtKSAtIGpTdGF0LmZhY3RvcmlhbGxuKG4gLSBtKTtcbn07XG5cblxuLy8gcGVybXV0YXRpb25zIG9mIG4sIG1cbmpTdGF0LnBlcm11dGF0aW9uID0gZnVuY3Rpb24gcGVybXV0YXRpb24obiwgbSkge1xuICByZXR1cm4galN0YXQuZmFjdG9yaWFsKG4pIC8galN0YXQuZmFjdG9yaWFsKG4gLSBtKTtcbn07XG5cblxuLy8gYmV0YSBmdW5jdGlvblxualN0YXQuYmV0YWZuID0gZnVuY3Rpb24gYmV0YWZuKHgsIHkpIHtcbiAgLy8gZW5zdXJlIGFyZ3VtZW50cyBhcmUgcG9zaXRpdmVcbiAgaWYgKHggPD0gMCB8fCB5IDw9IDApXG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgLy8gbWFrZSBzdXJlIHggKyB5IGRvZXNuJ3QgZXhjZWVkIHRoZSB1cHBlciBsaW1pdCBvZiB1c2FibGUgdmFsdWVzXG4gIHJldHVybiAoeCArIHkgPiAxNzApXG4gICAgICA/IE1hdGguZXhwKGpTdGF0LmJldGFsbih4LCB5KSlcbiAgICAgIDogalN0YXQuZ2FtbWFmbih4KSAqIGpTdGF0LmdhbW1hZm4oeSkgLyBqU3RhdC5nYW1tYWZuKHggKyB5KTtcbn07XG5cblxuLy8gbmF0dXJhbCBsb2dhcml0aG0gb2YgYmV0YSBmdW5jdGlvblxualN0YXQuYmV0YWxuID0gZnVuY3Rpb24gYmV0YWxuKHgsIHkpIHtcbiAgcmV0dXJuIGpTdGF0LmdhbW1hbG4oeCkgKyBqU3RhdC5nYW1tYWxuKHkpIC0galN0YXQuZ2FtbWFsbih4ICsgeSk7XG59O1xuXG5cbi8vIEV2YWx1YXRlcyB0aGUgY29udGludWVkIGZyYWN0aW9uIGZvciBpbmNvbXBsZXRlIGJldGEgZnVuY3Rpb24gYnkgbW9kaWZpZWRcbi8vIExlbnR6J3MgbWV0aG9kLlxualN0YXQuYmV0YWNmID0gZnVuY3Rpb24gYmV0YWNmKHgsIGEsIGIpIHtcbiAgdmFyIGZwbWluID0gMWUtMzA7XG4gIHZhciBtID0gMTtcbiAgdmFyIHFhYiA9IGEgKyBiO1xuICB2YXIgcWFwID0gYSArIDE7XG4gIHZhciBxYW0gPSBhIC0gMTtcbiAgdmFyIGMgPSAxO1xuICB2YXIgZCA9IDEgLSBxYWIgKiB4IC8gcWFwO1xuICB2YXIgbTIsIGFhLCBkZWwsIGg7XG5cbiAgLy8gVGhlc2UgcSdzIHdpbGwgYmUgdXNlZCBpbiBmYWN0b3JzIHRoYXQgb2NjdXIgaW4gdGhlIGNvZWZmaWNpZW50c1xuICBpZiAoTWF0aC5hYnMoZCkgPCBmcG1pbilcbiAgICBkID0gZnBtaW47XG4gIGQgPSAxIC8gZDtcbiAgaCA9IGQ7XG5cbiAgZm9yICg7IG0gPD0gMTAwOyBtKyspIHtcbiAgICBtMiA9IDIgKiBtO1xuICAgIGFhID0gbSAqIChiIC0gbSkgKiB4IC8gKChxYW0gKyBtMikgKiAoYSArIG0yKSk7XG4gICAgLy8gT25lIHN0ZXAgKHRoZSBldmVuIG9uZSkgb2YgdGhlIHJlY3VycmVuY2VcbiAgICBkID0gMSArIGFhICogZDtcbiAgICBpZiAoTWF0aC5hYnMoZCkgPCBmcG1pbilcbiAgICAgIGQgPSBmcG1pbjtcbiAgICBjID0gMSArIGFhIC8gYztcbiAgICBpZiAoTWF0aC5hYnMoYykgPCBmcG1pbilcbiAgICAgIGMgPSBmcG1pbjtcbiAgICBkID0gMSAvIGQ7XG4gICAgaCAqPSBkICogYztcbiAgICBhYSA9IC0oYSArIG0pICogKHFhYiArIG0pICogeCAvICgoYSArIG0yKSAqIChxYXAgKyBtMikpO1xuICAgIC8vIE5leHQgc3RlcCBvZiB0aGUgcmVjdXJyZW5jZSAodGhlIG9kZCBvbmUpXG4gICAgZCA9IDEgKyBhYSAqIGQ7XG4gICAgaWYgKE1hdGguYWJzKGQpIDwgZnBtaW4pXG4gICAgICBkID0gZnBtaW47XG4gICAgYyA9IDEgKyBhYSAvIGM7XG4gICAgaWYgKE1hdGguYWJzKGMpIDwgZnBtaW4pXG4gICAgICBjID0gZnBtaW47XG4gICAgZCA9IDEgLyBkO1xuICAgIGRlbCA9IGQgKiBjO1xuICAgIGggKj0gZGVsO1xuICAgIGlmIChNYXRoLmFicyhkZWwgLSAxLjApIDwgM2UtNylcbiAgICAgIGJyZWFrO1xuICB9XG5cbiAgcmV0dXJuIGg7XG59O1xuXG5cbi8vIFJldHVybnMgdGhlIGludmVyc2Ugb2YgdGhlIGxvd2VyIHJlZ3VsYXJpemVkIGlub21wbGV0ZSBnYW1tYSBmdW5jdGlvblxualN0YXQuZ2FtbWFwaW52ID0gZnVuY3Rpb24gZ2FtbWFwaW52KHAsIGEpIHtcbiAgdmFyIGogPSAwO1xuICB2YXIgYTEgPSBhIC0gMTtcbiAgdmFyIEVQUyA9IDFlLTg7XG4gIHZhciBnbG4gPSBqU3RhdC5nYW1tYWxuKGEpO1xuICB2YXIgeCwgZXJyLCB0LCB1LCBwcCwgbG5hMSwgYWZhYztcblxuICBpZiAocCA+PSAxKVxuICAgIHJldHVybiBNYXRoLm1heCgxMDAsIGEgKyAxMDAgKiBNYXRoLnNxcnQoYSkpO1xuICBpZiAocCA8PSAwKVxuICAgIHJldHVybiAwO1xuICBpZiAoYSA+IDEpIHtcbiAgICBsbmExID0gTWF0aC5sb2coYTEpO1xuICAgIGFmYWMgPSBNYXRoLmV4cChhMSAqIChsbmExIC0gMSkgLSBnbG4pO1xuICAgIHBwID0gKHAgPCAwLjUpID8gcCA6IDEgLSBwO1xuICAgIHQgPSBNYXRoLnNxcnQoLTIgKiBNYXRoLmxvZyhwcCkpO1xuICAgIHggPSAoMi4zMDc1MyArIHQgKiAwLjI3MDYxKSAvICgxICsgdCAqICgwLjk5MjI5ICsgdCAqIDAuMDQ0ODEpKSAtIHQ7XG4gICAgaWYgKHAgPCAwLjUpXG4gICAgICB4ID0gLXg7XG4gICAgeCA9IE1hdGgubWF4KDFlLTMsXG4gICAgICAgICAgICAgICAgIGEgKiBNYXRoLnBvdygxIC0gMSAvICg5ICogYSkgLSB4IC8gKDMgKiBNYXRoLnNxcnQoYSkpLCAzKSk7XG4gIH0gZWxzZSB7XG4gICAgdCA9IDEgLSBhICogKDAuMjUzICsgYSAqIDAuMTIpO1xuICAgIGlmIChwIDwgdClcbiAgICAgIHggPSBNYXRoLnBvdyhwIC8gdCwgMSAvIGEpO1xuICAgIGVsc2VcbiAgICAgIHggPSAxIC0gTWF0aC5sb2coMSAtIChwIC0gdCkgLyAoMSAtIHQpKTtcbiAgfVxuXG4gIGZvcig7IGogPCAxMjsgaisrKSB7XG4gICAgaWYgKHggPD0gMClcbiAgICAgIHJldHVybiAwO1xuICAgIGVyciA9IGpTdGF0Lmxvd1JlZ0dhbW1hKGEsIHgpIC0gcDtcbiAgICBpZiAoYSA+IDEpXG4gICAgICB0ID0gYWZhYyAqIE1hdGguZXhwKC0oeCAtIGExKSArIGExICogKE1hdGgubG9nKHgpIC0gbG5hMSkpO1xuICAgIGVsc2VcbiAgICAgIHQgPSBNYXRoLmV4cCgteCArIGExICogTWF0aC5sb2coeCkgLSBnbG4pO1xuICAgIHUgPSBlcnIgLyB0O1xuICAgIHggLT0gKHQgPSB1IC8gKDEgLSAwLjUgKiBNYXRoLm1pbigxLCB1ICogKChhIC0gMSkgLyB4IC0gMSkpKSk7XG4gICAgaWYgKHggPD0gMClcbiAgICAgIHggPSAwLjUgKiAoeCArIHQpO1xuICAgIGlmIChNYXRoLmFicyh0KSA8IEVQUyAqIHgpXG4gICAgICBicmVhaztcbiAgfVxuXG4gIHJldHVybiB4O1xufTtcblxuXG4vLyBSZXR1cm5zIHRoZSBlcnJvciBmdW5jdGlvbiBlcmYoeClcbmpTdGF0LmVyZiA9IGZ1bmN0aW9uIGVyZih4KSB7XG4gIHZhciBjb2YgPSBbLTEuMzAyNjUzNzE5NzgxNzA5NCwgNi40MTk2OTc5MjM1NjQ5MDI2ZS0xLCAxLjk0NzY0NzMyMDQxODU4MzZlLTIsXG4gICAgICAgICAgICAgLTkuNTYxNTE0Nzg2ODA4NjMxZS0zLCAtOS40NjU5NTM0NDQ4MjAzNmUtNCwgMy42NjgzOTQ5Nzg1Mjc2MWUtNCxcbiAgICAgICAgICAgICA0LjI1MjMzMjQ4MDY5MDdlLTUsIC0yLjAyNzg1NzgxMTI1MzRlLTUsIC0xLjYyNDI5MDAwNDY0N2UtNixcbiAgICAgICAgICAgICAxLjMwMzY1NTgzNTU4MGUtNiwgMS41NjI2NDQxNzIyZS04LCAtOC41MjM4MDk1OTE1ZS04LFxuICAgICAgICAgICAgIDYuNTI5MDU0NDM5ZS05LCA1LjA1OTM0MzQ5NWUtOSwgLTkuOTEzNjQxNTZlLTEwLFxuICAgICAgICAgICAgIC0yLjI3MzY1MTIyZS0xMCwgOS42NDY3OTExZS0xMSwgMi4zOTQwMzhlLTEyLFxuICAgICAgICAgICAgIC02Ljg4NjAyN2UtMTIsIDguOTQ0ODdlLTEzLCAzLjEzMDkyZS0xMyxcbiAgICAgICAgICAgICAtMS4xMjcwOGUtMTMsIDMuODFlLTE2LCA3LjEwNmUtMTUsXG4gICAgICAgICAgICAgLTEuNTIzZS0xNSwgLTkuNGUtMTcsIDEuMjFlLTE2LFxuICAgICAgICAgICAgIC0yLjhlLTE3XTtcbiAgdmFyIGogPSBjb2YubGVuZ3RoIC0gMTtcbiAgdmFyIGlzbmVnID0gZmFsc2U7XG4gIHZhciBkID0gMDtcbiAgdmFyIGRkID0gMDtcbiAgdmFyIHQsIHR5LCB0bXAsIHJlcztcblxuICBpZiAoeCA8IDApIHtcbiAgICB4ID0gLXg7XG4gICAgaXNuZWcgPSB0cnVlO1xuICB9XG5cbiAgdCA9IDIgLyAoMiArIHgpO1xuICB0eSA9IDQgKiB0IC0gMjtcblxuICBmb3IoOyBqID4gMDsgai0tKSB7XG4gICAgdG1wID0gZDtcbiAgICBkID0gdHkgKiBkIC0gZGQgKyBjb2Zbal07XG4gICAgZGQgPSB0bXA7XG4gIH1cblxuICByZXMgPSB0ICogTWF0aC5leHAoLXggKiB4ICsgMC41ICogKGNvZlswXSArIHR5ICogZCkgLSBkZCk7XG4gIHJldHVybiBpc25lZyA/IHJlcyAtIDEgOiAxIC0gcmVzO1xufTtcblxuXG4vLyBSZXR1cm5zIHRoZSBjb21wbG1lbnRhcnkgZXJyb3IgZnVuY3Rpb24gZXJmYyh4KVxualN0YXQuZXJmYyA9IGZ1bmN0aW9uIGVyZmMoeCkge1xuICByZXR1cm4gMSAtIGpTdGF0LmVyZih4KTtcbn07XG5cblxuLy8gUmV0dXJucyB0aGUgaW52ZXJzZSBvZiB0aGUgY29tcGxlbWVudGFyeSBlcnJvciBmdW5jdGlvblxualN0YXQuZXJmY2ludiA9IGZ1bmN0aW9uIGVyZmNpbnYocCkge1xuICB2YXIgaiA9IDA7XG4gIHZhciB4LCBlcnIsIHQsIHBwO1xuICBpZiAocCA+PSAyKVxuICAgIHJldHVybiAtMTAwO1xuICBpZiAocCA8PSAwKVxuICAgIHJldHVybiAxMDA7XG4gIHBwID0gKHAgPCAxKSA/IHAgOiAyIC0gcDtcbiAgdCA9IE1hdGguc3FydCgtMiAqIE1hdGgubG9nKHBwIC8gMikpO1xuICB4ID0gLTAuNzA3MTEgKiAoKDIuMzA3NTMgKyB0ICogMC4yNzA2MSkgL1xuICAgICAgICAgICAgICAgICAgKDEgKyB0ICogKDAuOTkyMjkgKyB0ICogMC4wNDQ4MSkpIC0gdCk7XG4gIGZvciAoOyBqIDwgMjsgaisrKSB7XG4gICAgZXJyID0galN0YXQuZXJmYyh4KSAtIHBwO1xuICAgIHggKz0gZXJyIC8gKDEuMTI4Mzc5MTY3MDk1NTEyNTcgKiBNYXRoLmV4cCgteCAqIHgpIC0geCAqIGVycik7XG4gIH1cbiAgcmV0dXJuIChwIDwgMSkgPyB4IDogLXg7XG59O1xuXG5cbi8vIFJldHVybnMgdGhlIGludmVyc2Ugb2YgdGhlIGluY29tcGxldGUgYmV0YSBmdW5jdGlvblxualN0YXQuaWJldGFpbnYgPSBmdW5jdGlvbiBpYmV0YWludihwLCBhLCBiKSB7XG4gIHZhciBFUFMgPSAxZS04O1xuICB2YXIgYTEgPSBhIC0gMTtcbiAgdmFyIGIxID0gYiAtIDE7XG4gIHZhciBqID0gMDtcbiAgdmFyIGxuYSwgbG5iLCBwcCwgdCwgdSwgZXJyLCB4LCBhbCwgaCwgdywgYWZhYztcbiAgaWYgKHAgPD0gMClcbiAgICByZXR1cm4gMDtcbiAgaWYgKHAgPj0gMSlcbiAgICByZXR1cm4gMTtcbiAgaWYgKGEgPj0gMSAmJiBiID49IDEpIHtcbiAgICBwcCA9IChwIDwgMC41KSA/IHAgOiAxIC0gcDtcbiAgICB0ID0gTWF0aC5zcXJ0KC0yICogTWF0aC5sb2cocHApKTtcbiAgICB4ID0gKDIuMzA3NTMgKyB0ICogMC4yNzA2MSkgLyAoMSArIHQqICgwLjk5MjI5ICsgdCAqIDAuMDQ0ODEpKSAtIHQ7XG4gICAgaWYgKHAgPCAwLjUpXG4gICAgICB4ID0gLXg7XG4gICAgYWwgPSAoeCAqIHggLSAzKSAvIDY7XG4gICAgaCA9IDIgLyAoMSAvICgyICogYSAtIDEpICArIDEgLyAoMiAqIGIgLSAxKSk7XG4gICAgdyA9ICh4ICogTWF0aC5zcXJ0KGFsICsgaCkgLyBoKSAtICgxIC8gKDIgKiBiIC0gMSkgLSAxIC8gKDIgKiBhIC0gMSkpICpcbiAgICAgICAgKGFsICsgNSAvIDYgLSAyIC8gKDMgKiBoKSk7XG4gICAgeCA9IGEgLyAoYSArIGIgKiBNYXRoLmV4cCgyICogdykpO1xuICB9IGVsc2Uge1xuICAgIGxuYSA9IE1hdGgubG9nKGEgLyAoYSArIGIpKTtcbiAgICBsbmIgPSBNYXRoLmxvZyhiIC8gKGEgKyBiKSk7XG4gICAgdCA9IE1hdGguZXhwKGEgKiBsbmEpIC8gYTtcbiAgICB1ID0gTWF0aC5leHAoYiAqIGxuYikgLyBiO1xuICAgIHcgPSB0ICsgdTtcbiAgICBpZiAocCA8IHQgLyB3KVxuICAgICAgeCA9IE1hdGgucG93KGEgKiB3ICogcCwgMSAvIGEpO1xuICAgIGVsc2VcbiAgICAgIHggPSAxIC0gTWF0aC5wb3coYiAqIHcgKiAoMSAtIHApLCAxIC8gYik7XG4gIH1cbiAgYWZhYyA9IC1qU3RhdC5nYW1tYWxuKGEpIC0galN0YXQuZ2FtbWFsbihiKSArIGpTdGF0LmdhbW1hbG4oYSArIGIpO1xuICBmb3IoOyBqIDwgMTA7IGorKykge1xuICAgIGlmICh4ID09PSAwIHx8IHggPT09IDEpXG4gICAgICByZXR1cm4geDtcbiAgICBlcnIgPSBqU3RhdC5pYmV0YSh4LCBhLCBiKSAtIHA7XG4gICAgdCA9IE1hdGguZXhwKGExICogTWF0aC5sb2coeCkgKyBiMSAqIE1hdGgubG9nKDEgLSB4KSArIGFmYWMpO1xuICAgIHUgPSBlcnIgLyB0O1xuICAgIHggLT0gKHQgPSB1IC8gKDEgLSAwLjUgKiBNYXRoLm1pbigxLCB1ICogKGExIC8geCAtIGIxIC8gKDEgLSB4KSkpKSk7XG4gICAgaWYgKHggPD0gMClcbiAgICAgIHggPSAwLjUgKiAoeCArIHQpO1xuICAgIGlmICh4ID49IDEpXG4gICAgICB4ID0gMC41ICogKHggKyB0ICsgMSk7XG4gICAgaWYgKE1hdGguYWJzKHQpIDwgRVBTICogeCAmJiBqID4gMClcbiAgICAgIGJyZWFrO1xuICB9XG4gIHJldHVybiB4O1xufTtcblxuXG4vLyBSZXR1cm5zIHRoZSBpbmNvbXBsZXRlIGJldGEgZnVuY3Rpb24gSV94KGEsYilcbmpTdGF0LmliZXRhID0gZnVuY3Rpb24gaWJldGEoeCwgYSwgYikge1xuICAvLyBGYWN0b3JzIGluIGZyb250IG9mIHRoZSBjb250aW51ZWQgZnJhY3Rpb24uXG4gIHZhciBidCA9ICh4ID09PSAwIHx8IHggPT09IDEpID8gIDAgOlxuICAgIE1hdGguZXhwKGpTdGF0LmdhbW1hbG4oYSArIGIpIC0galN0YXQuZ2FtbWFsbihhKSAtXG4gICAgICAgICAgICAgalN0YXQuZ2FtbWFsbihiKSArIGEgKiBNYXRoLmxvZyh4KSArIGIgKlxuICAgICAgICAgICAgIE1hdGgubG9nKDEgLSB4KSk7XG4gIGlmICh4IDwgMCB8fCB4ID4gMSlcbiAgICByZXR1cm4gZmFsc2U7XG4gIGlmICh4IDwgKGEgKyAxKSAvIChhICsgYiArIDIpKVxuICAgIC8vIFVzZSBjb250aW51ZWQgZnJhY3Rpb24gZGlyZWN0bHkuXG4gICAgcmV0dXJuIGJ0ICogalN0YXQuYmV0YWNmKHgsIGEsIGIpIC8gYTtcbiAgLy8gZWxzZSB1c2UgY29udGludWVkIGZyYWN0aW9uIGFmdGVyIG1ha2luZyB0aGUgc3ltbWV0cnkgdHJhbnNmb3JtYXRpb24uXG4gIHJldHVybiAxIC0gYnQgKiBqU3RhdC5iZXRhY2YoMSAtIHgsIGIsIGEpIC8gYjtcbn07XG5cblxuLy8gUmV0dXJucyBhIG5vcm1hbCBkZXZpYXRlIChtdT0wLCBzaWdtYT0xKS5cbi8vIElmIG4gYW5kIG0gYXJlIHNwZWNpZmllZCBpdCByZXR1cm5zIGEgb2JqZWN0IG9mIG5vcm1hbCBkZXZpYXRlcy5cbmpTdGF0LnJhbmRuID0gZnVuY3Rpb24gcmFuZG4obiwgbSkge1xuICB2YXIgdSwgdiwgeCwgeSwgcTtcbiAgaWYgKCFtKVxuICAgIG0gPSBuO1xuICBpZiAobilcbiAgICByZXR1cm4galN0YXQuY3JlYXRlKG4sIG0sIGZ1bmN0aW9uKCkgeyByZXR1cm4galN0YXQucmFuZG4oKTsgfSk7XG4gIGRvIHtcbiAgICB1ID0galN0YXQuX3JhbmRvbV9mbigpO1xuICAgIHYgPSAxLjcxNTYgKiAoalN0YXQuX3JhbmRvbV9mbigpIC0gMC41KTtcbiAgICB4ID0gdSAtIDAuNDQ5ODcxO1xuICAgIHkgPSBNYXRoLmFicyh2KSArIDAuMzg2NTk1O1xuICAgIHEgPSB4ICogeCArIHkgKiAoMC4xOTYwMCAqIHkgLSAwLjI1NDcyICogeCk7XG4gIH0gd2hpbGUgKHEgPiAwLjI3NTk3ICYmIChxID4gMC4yNzg0NiB8fCB2ICogdiA+IC00ICogTWF0aC5sb2codSkgKiB1ICogdSkpO1xuICByZXR1cm4gdiAvIHU7XG59O1xuXG5cbi8vIFJldHVybnMgYSBnYW1tYSBkZXZpYXRlIGJ5IHRoZSBtZXRob2Qgb2YgTWFyc2FnbGlhIGFuZCBUc2FuZy5cbmpTdGF0LnJhbmRnID0gZnVuY3Rpb24gcmFuZGcoc2hhcGUsIG4sIG0pIHtcbiAgdmFyIG9hbHBoID0gc2hhcGU7XG4gIHZhciBhMSwgYTIsIHUsIHYsIHgsIG1hdDtcbiAgaWYgKCFtKVxuICAgIG0gPSBuO1xuICBpZiAoIXNoYXBlKVxuICAgIHNoYXBlID0gMTtcbiAgaWYgKG4pIHtcbiAgICBtYXQgPSBqU3RhdC56ZXJvcyhuLG0pO1xuICAgIG1hdC5hbHRlcihmdW5jdGlvbigpIHsgcmV0dXJuIGpTdGF0LnJhbmRnKHNoYXBlKTsgfSk7XG4gICAgcmV0dXJuIG1hdDtcbiAgfVxuICBpZiAoc2hhcGUgPCAxKVxuICAgIHNoYXBlICs9IDE7XG4gIGExID0gc2hhcGUgLSAxIC8gMztcbiAgYTIgPSAxIC8gTWF0aC5zcXJ0KDkgKiBhMSk7XG4gIGRvIHtcbiAgICBkbyB7XG4gICAgICB4ID0galN0YXQucmFuZG4oKTtcbiAgICAgIHYgPSAxICsgYTIgKiB4O1xuICAgIH0gd2hpbGUodiA8PSAwKTtcbiAgICB2ID0gdiAqIHYgKiB2O1xuICAgIHUgPSBqU3RhdC5fcmFuZG9tX2ZuKCk7XG4gIH0gd2hpbGUodSA+IDEgLSAwLjMzMSAqIE1hdGgucG93KHgsIDQpICYmXG4gICAgICAgICAgTWF0aC5sb2codSkgPiAwLjUgKiB4KnggKyBhMSAqICgxIC0gdiArIE1hdGgubG9nKHYpKSk7XG4gIC8vIGFscGhhID4gMVxuICBpZiAoc2hhcGUgPT0gb2FscGgpXG4gICAgcmV0dXJuIGExICogdjtcbiAgLy8gYWxwaGEgPCAxXG4gIGRvIHtcbiAgICB1ID0galN0YXQuX3JhbmRvbV9mbigpO1xuICB9IHdoaWxlKHUgPT09IDApO1xuICByZXR1cm4gTWF0aC5wb3codSwgMSAvIG9hbHBoKSAqIGExICogdjtcbn07XG5cblxuLy8gbWFraW5nIHVzZSBvZiBzdGF0aWMgbWV0aG9kcyBvbiB0aGUgaW5zdGFuY2VcbihmdW5jdGlvbihmdW5jcykge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGZ1bmNzLmxlbmd0aDsgaSsrKSAoZnVuY3Rpb24ocGFzc2Z1bmMpIHtcbiAgICBqU3RhdC5mbltwYXNzZnVuY10gPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBqU3RhdChcbiAgICAgICAgICBqU3RhdC5tYXAodGhpcywgZnVuY3Rpb24odmFsdWUpIHsgcmV0dXJuIGpTdGF0W3Bhc3NmdW5jXSh2YWx1ZSk7IH0pKTtcbiAgICB9XG4gIH0pKGZ1bmNzW2ldKTtcbn0pKCdnYW1tYWxuIGdhbW1hZm4gZmFjdG9yaWFsIGZhY3RvcmlhbGxuJy5zcGxpdCgnICcpKTtcblxuXG4oZnVuY3Rpb24oZnVuY3MpIHtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBmdW5jcy5sZW5ndGg7IGkrKykgKGZ1bmN0aW9uKHBhc3NmdW5jKSB7XG4gICAgalN0YXQuZm5bcGFzc2Z1bmNdID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4galN0YXQoalN0YXRbcGFzc2Z1bmNdLmFwcGx5KG51bGwsIGFyZ3VtZW50cykpO1xuICAgIH07XG4gIH0pKGZ1bmNzW2ldKTtcbn0pKCdyYW5kbicuc3BsaXQoJyAnKSk7XG5cbn0oalN0YXQsIE1hdGgpKTtcbihmdW5jdGlvbihqU3RhdCwgTWF0aCkge1xuXG4vLyBnZW5lcmF0ZSBhbGwgZGlzdHJpYnV0aW9uIGluc3RhbmNlIG1ldGhvZHNcbihmdW5jdGlvbihsaXN0KSB7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGlzdC5sZW5ndGg7IGkrKykgKGZ1bmN0aW9uKGZ1bmMpIHtcbiAgICAvLyBkaXN0cmlidXRpb24gaW5zdGFuY2UgbWV0aG9kXG4gICAgalN0YXRbZnVuY10gPSBmdW5jdGlvbiBmKGEsIGIsIGMpIHtcbiAgICAgIGlmICghKHRoaXMgaW5zdGFuY2VvZiBmKSlcbiAgICAgICAgcmV0dXJuIG5ldyBmKGEsIGIsIGMpO1xuICAgICAgdGhpcy5fYSA9IGE7XG4gICAgICB0aGlzLl9iID0gYjtcbiAgICAgIHRoaXMuX2MgPSBjO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcbiAgICAvLyBkaXN0cmlidXRpb24gbWV0aG9kIHRvIGJlIHVzZWQgb24gYSBqU3RhdCBpbnN0YW5jZVxuICAgIGpTdGF0LmZuW2Z1bmNdID0gZnVuY3Rpb24oYSwgYiwgYykge1xuICAgICAgdmFyIG5ld3RoaXMgPSBqU3RhdFtmdW5jXShhLCBiLCBjKTtcbiAgICAgIG5ld3RoaXMuZGF0YSA9IHRoaXM7XG4gICAgICByZXR1cm4gbmV3dGhpcztcbiAgICB9O1xuICAgIC8vIHNhbXBsZSBpbnN0YW5jZSBtZXRob2RcbiAgICBqU3RhdFtmdW5jXS5wcm90b3R5cGUuc2FtcGxlID0gZnVuY3Rpb24oYXJyKSB7XG4gICAgICB2YXIgYSA9IHRoaXMuX2E7XG4gICAgICB2YXIgYiA9IHRoaXMuX2I7XG4gICAgICB2YXIgYyA9IHRoaXMuX2M7XG4gICAgICBpZiAoYXJyKVxuICAgICAgICByZXR1cm4galN0YXQuYWx0ZXIoYXJyLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICByZXR1cm4galN0YXRbZnVuY10uc2FtcGxlKGEsIGIsIGMpO1xuICAgICAgICB9KTtcbiAgICAgIGVsc2VcbiAgICAgICAgcmV0dXJuIGpTdGF0W2Z1bmNdLnNhbXBsZShhLCBiLCBjKTtcbiAgICB9O1xuICAgIC8vIGdlbmVyYXRlIHRoZSBwZGYsIGNkZiBhbmQgaW52IGluc3RhbmNlIG1ldGhvZHNcbiAgICAoZnVuY3Rpb24odmFscykge1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2YWxzLmxlbmd0aDsgaSsrKSAoZnVuY3Rpb24oZm5mdW5jKSB7XG4gICAgICAgIGpTdGF0W2Z1bmNdLnByb3RvdHlwZVtmbmZ1bmNdID0gZnVuY3Rpb24oeCkge1xuICAgICAgICAgIHZhciBhID0gdGhpcy5fYTtcbiAgICAgICAgICB2YXIgYiA9IHRoaXMuX2I7XG4gICAgICAgICAgdmFyIGMgPSB0aGlzLl9jO1xuICAgICAgICAgIGlmICgheCAmJiB4ICE9PSAwKVxuICAgICAgICAgICAgeCA9IHRoaXMuZGF0YTtcbiAgICAgICAgICBpZiAodHlwZW9mIHggIT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICByZXR1cm4galN0YXQuZm4ubWFwLmNhbGwoeCwgZnVuY3Rpb24oeCkge1xuICAgICAgICAgICAgICByZXR1cm4galN0YXRbZnVuY11bZm5mdW5jXSh4LCBhLCBiLCBjKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4galN0YXRbZnVuY11bZm5mdW5jXSh4LCBhLCBiLCBjKTtcbiAgICAgICAgfTtcbiAgICAgIH0pKHZhbHNbaV0pO1xuICAgIH0pKCdwZGYgY2RmIGludicuc3BsaXQoJyAnKSk7XG4gICAgLy8gZ2VuZXJhdGUgdGhlIG1lYW4sIG1lZGlhbiwgbW9kZSBhbmQgdmFyaWFuY2UgaW5zdGFuY2UgbWV0aG9kc1xuICAgIChmdW5jdGlvbih2YWxzKSB7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZhbHMubGVuZ3RoOyBpKyspIChmdW5jdGlvbihmbmZ1bmMpIHtcbiAgICAgICAgalN0YXRbZnVuY10ucHJvdG90eXBlW2ZuZnVuY10gPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICByZXR1cm4galN0YXRbZnVuY11bZm5mdW5jXSh0aGlzLl9hLCB0aGlzLl9iLCB0aGlzLl9jKTtcbiAgICAgICAgfTtcbiAgICAgIH0pKHZhbHNbaV0pO1xuICAgIH0pKCdtZWFuIG1lZGlhbiBtb2RlIHZhcmlhbmNlJy5zcGxpdCgnICcpKTtcbiAgfSkobGlzdFtpXSk7XG59KSgoXG4gICdiZXRhIGNlbnRyYWxGIGNhdWNoeSBjaGlzcXVhcmUgZXhwb25lbnRpYWwgZ2FtbWEgaW52Z2FtbWEga3VtYXJhc3dhbXkgJyArXG4gICdsYXBsYWNlIGxvZ25vcm1hbCBub25jZW50cmFsdCBub3JtYWwgcGFyZXRvIHN0dWRlbnR0IHdlaWJ1bGwgdW5pZm9ybSAnICtcbiAgJ2Jpbm9taWFsIG5lZ2JpbiBoeXBnZW9tIHBvaXNzb24gdHJpYW5ndWxhciB0dWtleSBhcmNzaW5lJ1xuKS5zcGxpdCgnICcpKTtcblxuXG5cbi8vIGV4dGVuZCBiZXRhIGZ1bmN0aW9uIHdpdGggc3RhdGljIG1ldGhvZHNcbmpTdGF0LmV4dGVuZChqU3RhdC5iZXRhLCB7XG4gIHBkZjogZnVuY3Rpb24gcGRmKHgsIGFscGhhLCBiZXRhKSB7XG4gICAgLy8gUERGIGlzIHplcm8gb3V0c2lkZSB0aGUgc3VwcG9ydFxuICAgIGlmICh4ID4gMSB8fCB4IDwgMClcbiAgICAgIHJldHVybiAwO1xuICAgIC8vIFBERiBpcyBvbmUgZm9yIHRoZSB1bmlmb3JtIGNhc2VcbiAgICBpZiAoYWxwaGEgPT0gMSAmJiBiZXRhID09IDEpXG4gICAgICByZXR1cm4gMTtcblxuICAgIGlmIChhbHBoYSA8IDUxMiAmJiBiZXRhIDwgNTEyKSB7XG4gICAgICByZXR1cm4gKE1hdGgucG93KHgsIGFscGhhIC0gMSkgKiBNYXRoLnBvdygxIC0geCwgYmV0YSAtIDEpKSAvXG4gICAgICAgICAgalN0YXQuYmV0YWZuKGFscGhhLCBiZXRhKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIE1hdGguZXhwKChhbHBoYSAtIDEpICogTWF0aC5sb2coeCkgK1xuICAgICAgICAgICAgICAgICAgICAgIChiZXRhIC0gMSkgKiBNYXRoLmxvZygxIC0geCkgLVxuICAgICAgICAgICAgICAgICAgICAgIGpTdGF0LmJldGFsbihhbHBoYSwgYmV0YSkpO1xuICAgIH1cbiAgfSxcblxuICBjZGY6IGZ1bmN0aW9uIGNkZih4LCBhbHBoYSwgYmV0YSkge1xuICAgIHJldHVybiAoeCA+IDEgfHwgeCA8IDApID8gKHggPiAxKSAqIDEgOiBqU3RhdC5pYmV0YSh4LCBhbHBoYSwgYmV0YSk7XG4gIH0sXG5cbiAgaW52OiBmdW5jdGlvbiBpbnYoeCwgYWxwaGEsIGJldGEpIHtcbiAgICByZXR1cm4galN0YXQuaWJldGFpbnYoeCwgYWxwaGEsIGJldGEpO1xuICB9LFxuXG4gIG1lYW46IGZ1bmN0aW9uIG1lYW4oYWxwaGEsIGJldGEpIHtcbiAgICByZXR1cm4gYWxwaGEgLyAoYWxwaGEgKyBiZXRhKTtcbiAgfSxcblxuICBtZWRpYW46IGZ1bmN0aW9uIG1lZGlhbihhbHBoYSwgYmV0YSkge1xuICAgIHJldHVybiBqU3RhdC5pYmV0YWludigwLjUsIGFscGhhLCBiZXRhKTtcbiAgfSxcblxuICBtb2RlOiBmdW5jdGlvbiBtb2RlKGFscGhhLCBiZXRhKSB7XG4gICAgcmV0dXJuIChhbHBoYSAtIDEgKSAvICggYWxwaGEgKyBiZXRhIC0gMik7XG4gIH0sXG5cbiAgLy8gcmV0dXJuIGEgcmFuZG9tIHNhbXBsZVxuICBzYW1wbGU6IGZ1bmN0aW9uIHNhbXBsZShhbHBoYSwgYmV0YSkge1xuICAgIHZhciB1ID0galN0YXQucmFuZGcoYWxwaGEpO1xuICAgIHJldHVybiB1IC8gKHUgKyBqU3RhdC5yYW5kZyhiZXRhKSk7XG4gIH0sXG5cbiAgdmFyaWFuY2U6IGZ1bmN0aW9uIHZhcmlhbmNlKGFscGhhLCBiZXRhKSB7XG4gICAgcmV0dXJuIChhbHBoYSAqIGJldGEpIC8gKE1hdGgucG93KGFscGhhICsgYmV0YSwgMikgKiAoYWxwaGEgKyBiZXRhICsgMSkpO1xuICB9XG59KTtcblxuLy8gZXh0ZW5kIEYgZnVuY3Rpb24gd2l0aCBzdGF0aWMgbWV0aG9kc1xualN0YXQuZXh0ZW5kKGpTdGF0LmNlbnRyYWxGLCB7XG4gIC8vIFRoaXMgaW1wbGVtZW50YXRpb24gb2YgdGhlIHBkZiBmdW5jdGlvbiBhdm9pZHMgZmxvYXQgb3ZlcmZsb3dcbiAgLy8gU2VlIHRoZSB3YXkgdGhhdCBSIGNhbGN1bGF0ZXMgdGhpcyB2YWx1ZTpcbiAgLy8gaHR0cHM6Ly9zdm4uci1wcm9qZWN0Lm9yZy9SL3RydW5rL3NyYy9ubWF0aC9kZi5jXG4gIHBkZjogZnVuY3Rpb24gcGRmKHgsIGRmMSwgZGYyKSB7XG4gICAgdmFyIHAsIHEsIGY7XG5cbiAgICBpZiAoeCA8IDApXG4gICAgICByZXR1cm4gMDtcblxuICAgIGlmIChkZjEgPD0gMikge1xuICAgICAgaWYgKHggPT09IDAgJiYgZGYxIDwgMikge1xuICAgICAgICByZXR1cm4gSW5maW5pdHk7XG4gICAgICB9XG4gICAgICBpZiAoeCA9PT0gMCAmJiBkZjEgPT09IDIpIHtcbiAgICAgICAgcmV0dXJuIDE7XG4gICAgICB9XG4gICAgICByZXR1cm4gKDEgLyBqU3RhdC5iZXRhZm4oZGYxIC8gMiwgZGYyIC8gMikpICpcbiAgICAgICAgICAgICAgTWF0aC5wb3coZGYxIC8gZGYyLCBkZjEgLyAyKSAqXG4gICAgICAgICAgICAgIE1hdGgucG93KHgsIChkZjEvMikgLSAxKSAqXG4gICAgICAgICAgICAgIE1hdGgucG93KCgxICsgKGRmMSAvIGRmMikgKiB4KSwgLShkZjEgKyBkZjIpIC8gMik7XG4gICAgfVxuXG4gICAgcCA9IChkZjEgKiB4KSAvIChkZjIgKyB4ICogZGYxKTtcbiAgICBxID0gZGYyIC8gKGRmMiArIHggKiBkZjEpO1xuICAgIGYgPSBkZjEgKiBxIC8gMi4wO1xuICAgIHJldHVybiBmICogalN0YXQuYmlub21pYWwucGRmKChkZjEgLSAyKSAvIDIsIChkZjEgKyBkZjIgLSAyKSAvIDIsIHApO1xuICB9LFxuXG4gIGNkZjogZnVuY3Rpb24gY2RmKHgsIGRmMSwgZGYyKSB7XG4gICAgaWYgKHggPCAwKVxuICAgICAgcmV0dXJuIDA7XG4gICAgcmV0dXJuIGpTdGF0LmliZXRhKChkZjEgKiB4KSAvIChkZjEgKiB4ICsgZGYyKSwgZGYxIC8gMiwgZGYyIC8gMik7XG4gIH0sXG5cbiAgaW52OiBmdW5jdGlvbiBpbnYoeCwgZGYxLCBkZjIpIHtcbiAgICByZXR1cm4gZGYyIC8gKGRmMSAqICgxIC8galN0YXQuaWJldGFpbnYoeCwgZGYxIC8gMiwgZGYyIC8gMikgLSAxKSk7XG4gIH0sXG5cbiAgbWVhbjogZnVuY3Rpb24gbWVhbihkZjEsIGRmMikge1xuICAgIHJldHVybiAoZGYyID4gMikgPyBkZjIgLyAoZGYyIC0gMikgOiB1bmRlZmluZWQ7XG4gIH0sXG5cbiAgbW9kZTogZnVuY3Rpb24gbW9kZShkZjEsIGRmMikge1xuICAgIHJldHVybiAoZGYxID4gMikgPyAoZGYyICogKGRmMSAtIDIpKSAvIChkZjEgKiAoZGYyICsgMikpIDogdW5kZWZpbmVkO1xuICB9LFxuXG4gIC8vIHJldHVybiBhIHJhbmRvbSBzYW1wbGVcbiAgc2FtcGxlOiBmdW5jdGlvbiBzYW1wbGUoZGYxLCBkZjIpIHtcbiAgICB2YXIgeDEgPSBqU3RhdC5yYW5kZyhkZjEgLyAyKSAqIDI7XG4gICAgdmFyIHgyID0galN0YXQucmFuZGcoZGYyIC8gMikgKiAyO1xuICAgIHJldHVybiAoeDEgLyBkZjEpIC8gKHgyIC8gZGYyKTtcbiAgfSxcblxuICB2YXJpYW5jZTogZnVuY3Rpb24gdmFyaWFuY2UoZGYxLCBkZjIpIHtcbiAgICBpZiAoZGYyIDw9IDQpXG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIHJldHVybiAyICogZGYyICogZGYyICogKGRmMSArIGRmMiAtIDIpIC9cbiAgICAgICAgKGRmMSAqIChkZjIgLSAyKSAqIChkZjIgLSAyKSAqIChkZjIgLSA0KSk7XG4gIH1cbn0pO1xuXG5cbi8vIGV4dGVuZCBjYXVjaHkgZnVuY3Rpb24gd2l0aCBzdGF0aWMgbWV0aG9kc1xualN0YXQuZXh0ZW5kKGpTdGF0LmNhdWNoeSwge1xuICBwZGY6IGZ1bmN0aW9uIHBkZih4LCBsb2NhbCwgc2NhbGUpIHtcbiAgICBpZiAoc2NhbGUgPCAwKSB7IHJldHVybiAwOyB9XG5cbiAgICByZXR1cm4gKHNjYWxlIC8gKE1hdGgucG93KHggLSBsb2NhbCwgMikgKyBNYXRoLnBvdyhzY2FsZSwgMikpKSAvIE1hdGguUEk7XG4gIH0sXG5cbiAgY2RmOiBmdW5jdGlvbiBjZGYoeCwgbG9jYWwsIHNjYWxlKSB7XG4gICAgcmV0dXJuIE1hdGguYXRhbigoeCAtIGxvY2FsKSAvIHNjYWxlKSAvIE1hdGguUEkgKyAwLjU7XG4gIH0sXG5cbiAgaW52OiBmdW5jdGlvbihwLCBsb2NhbCwgc2NhbGUpIHtcbiAgICByZXR1cm4gbG9jYWwgKyBzY2FsZSAqIE1hdGgudGFuKE1hdGguUEkgKiAocCAtIDAuNSkpO1xuICB9LFxuXG4gIG1lZGlhbjogZnVuY3Rpb24gbWVkaWFuKGxvY2FsLyosIHNjYWxlKi8pIHtcbiAgICByZXR1cm4gbG9jYWw7XG4gIH0sXG5cbiAgbW9kZTogZnVuY3Rpb24gbW9kZShsb2NhbC8qLCBzY2FsZSovKSB7XG4gICAgcmV0dXJuIGxvY2FsO1xuICB9LFxuXG4gIHNhbXBsZTogZnVuY3Rpb24gc2FtcGxlKGxvY2FsLCBzY2FsZSkge1xuICAgIHJldHVybiBqU3RhdC5yYW5kbigpICpcbiAgICAgICAgTWF0aC5zcXJ0KDEgLyAoMiAqIGpTdGF0LnJhbmRnKDAuNSkpKSAqIHNjYWxlICsgbG9jYWw7XG4gIH1cbn0pO1xuXG5cblxuLy8gZXh0ZW5kIGNoaXNxdWFyZSBmdW5jdGlvbiB3aXRoIHN0YXRpYyBtZXRob2RzXG5qU3RhdC5leHRlbmQoalN0YXQuY2hpc3F1YXJlLCB7XG4gIHBkZjogZnVuY3Rpb24gcGRmKHgsIGRvZikge1xuICAgIGlmICh4IDwgMClcbiAgICAgIHJldHVybiAwO1xuICAgIHJldHVybiAoeCA9PT0gMCAmJiBkb2YgPT09IDIpID8gMC41IDpcbiAgICAgICAgTWF0aC5leHAoKGRvZiAvIDIgLSAxKSAqIE1hdGgubG9nKHgpIC0geCAvIDIgLSAoZG9mIC8gMikgKlxuICAgICAgICAgICAgICAgICBNYXRoLmxvZygyKSAtIGpTdGF0LmdhbW1hbG4oZG9mIC8gMikpO1xuICB9LFxuXG4gIGNkZjogZnVuY3Rpb24gY2RmKHgsIGRvZikge1xuICAgIGlmICh4IDwgMClcbiAgICAgIHJldHVybiAwO1xuICAgIHJldHVybiBqU3RhdC5sb3dSZWdHYW1tYShkb2YgLyAyLCB4IC8gMik7XG4gIH0sXG5cbiAgaW52OiBmdW5jdGlvbihwLCBkb2YpIHtcbiAgICByZXR1cm4gMiAqIGpTdGF0LmdhbW1hcGludihwLCAwLjUgKiBkb2YpO1xuICB9LFxuXG4gIG1lYW4gOiBmdW5jdGlvbihkb2YpIHtcbiAgICByZXR1cm4gZG9mO1xuICB9LFxuXG4gIC8vIFRPRE86IHRoaXMgaXMgYW4gYXBwcm94aW1hdGlvbiAoaXMgdGhlcmUgYSBiZXR0ZXIgd2F5PylcbiAgbWVkaWFuOiBmdW5jdGlvbiBtZWRpYW4oZG9mKSB7XG4gICAgcmV0dXJuIGRvZiAqIE1hdGgucG93KDEgLSAoMiAvICg5ICogZG9mKSksIDMpO1xuICB9LFxuXG4gIG1vZGU6IGZ1bmN0aW9uIG1vZGUoZG9mKSB7XG4gICAgcmV0dXJuIChkb2YgLSAyID4gMCkgPyBkb2YgLSAyIDogMDtcbiAgfSxcblxuICBzYW1wbGU6IGZ1bmN0aW9uIHNhbXBsZShkb2YpIHtcbiAgICByZXR1cm4galN0YXQucmFuZGcoZG9mIC8gMikgKiAyO1xuICB9LFxuXG4gIHZhcmlhbmNlOiBmdW5jdGlvbiB2YXJpYW5jZShkb2YpIHtcbiAgICByZXR1cm4gMiAqIGRvZjtcbiAgfVxufSk7XG5cblxuXG4vLyBleHRlbmQgZXhwb25lbnRpYWwgZnVuY3Rpb24gd2l0aCBzdGF0aWMgbWV0aG9kc1xualN0YXQuZXh0ZW5kKGpTdGF0LmV4cG9uZW50aWFsLCB7XG4gIHBkZjogZnVuY3Rpb24gcGRmKHgsIHJhdGUpIHtcbiAgICByZXR1cm4geCA8IDAgPyAwIDogcmF0ZSAqIE1hdGguZXhwKC1yYXRlICogeCk7XG4gIH0sXG5cbiAgY2RmOiBmdW5jdGlvbiBjZGYoeCwgcmF0ZSkge1xuICAgIHJldHVybiB4IDwgMCA/IDAgOiAxIC0gTWF0aC5leHAoLXJhdGUgKiB4KTtcbiAgfSxcblxuICBpbnY6IGZ1bmN0aW9uKHAsIHJhdGUpIHtcbiAgICByZXR1cm4gLU1hdGgubG9nKDEgLSBwKSAvIHJhdGU7XG4gIH0sXG5cbiAgbWVhbiA6IGZ1bmN0aW9uKHJhdGUpIHtcbiAgICByZXR1cm4gMSAvIHJhdGU7XG4gIH0sXG5cbiAgbWVkaWFuOiBmdW5jdGlvbiAocmF0ZSkge1xuICAgIHJldHVybiAoMSAvIHJhdGUpICogTWF0aC5sb2coMik7XG4gIH0sXG5cbiAgbW9kZTogZnVuY3Rpb24gbW9kZSgvKnJhdGUqLykge1xuICAgIHJldHVybiAwO1xuICB9LFxuXG4gIHNhbXBsZTogZnVuY3Rpb24gc2FtcGxlKHJhdGUpIHtcbiAgICByZXR1cm4gLTEgLyByYXRlICogTWF0aC5sb2coalN0YXQuX3JhbmRvbV9mbigpKTtcbiAgfSxcblxuICB2YXJpYW5jZSA6IGZ1bmN0aW9uKHJhdGUpIHtcbiAgICByZXR1cm4gTWF0aC5wb3cocmF0ZSwgLTIpO1xuICB9XG59KTtcblxuXG5cbi8vIGV4dGVuZCBnYW1tYSBmdW5jdGlvbiB3aXRoIHN0YXRpYyBtZXRob2RzXG5qU3RhdC5leHRlbmQoalN0YXQuZ2FtbWEsIHtcbiAgcGRmOiBmdW5jdGlvbiBwZGYoeCwgc2hhcGUsIHNjYWxlKSB7XG4gICAgaWYgKHggPCAwKVxuICAgICAgcmV0dXJuIDA7XG4gICAgcmV0dXJuICh4ID09PSAwICYmIHNoYXBlID09PSAxKSA/IDEgLyBzY2FsZSA6XG4gICAgICAgICAgICBNYXRoLmV4cCgoc2hhcGUgLSAxKSAqIE1hdGgubG9nKHgpIC0geCAvIHNjYWxlIC1cbiAgICAgICAgICAgICAgICAgICAgalN0YXQuZ2FtbWFsbihzaGFwZSkgLSBzaGFwZSAqIE1hdGgubG9nKHNjYWxlKSk7XG4gIH0sXG5cbiAgY2RmOiBmdW5jdGlvbiBjZGYoeCwgc2hhcGUsIHNjYWxlKSB7XG4gICAgaWYgKHggPCAwKVxuICAgICAgcmV0dXJuIDA7XG4gICAgcmV0dXJuIGpTdGF0Lmxvd1JlZ0dhbW1hKHNoYXBlLCB4IC8gc2NhbGUpO1xuICB9LFxuXG4gIGludjogZnVuY3Rpb24ocCwgc2hhcGUsIHNjYWxlKSB7XG4gICAgcmV0dXJuIGpTdGF0LmdhbW1hcGludihwLCBzaGFwZSkgKiBzY2FsZTtcbiAgfSxcblxuICBtZWFuIDogZnVuY3Rpb24oc2hhcGUsIHNjYWxlKSB7XG4gICAgcmV0dXJuIHNoYXBlICogc2NhbGU7XG4gIH0sXG5cbiAgbW9kZTogZnVuY3Rpb24gbW9kZShzaGFwZSwgc2NhbGUpIHtcbiAgICBpZihzaGFwZSA+IDEpIHJldHVybiAoc2hhcGUgLSAxKSAqIHNjYWxlO1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH0sXG5cbiAgc2FtcGxlOiBmdW5jdGlvbiBzYW1wbGUoc2hhcGUsIHNjYWxlKSB7XG4gICAgcmV0dXJuIGpTdGF0LnJhbmRnKHNoYXBlKSAqIHNjYWxlO1xuICB9LFxuXG4gIHZhcmlhbmNlOiBmdW5jdGlvbiB2YXJpYW5jZShzaGFwZSwgc2NhbGUpIHtcbiAgICByZXR1cm4gc2hhcGUgKiBzY2FsZSAqIHNjYWxlO1xuICB9XG59KTtcblxuLy8gZXh0ZW5kIGludmVyc2UgZ2FtbWEgZnVuY3Rpb24gd2l0aCBzdGF0aWMgbWV0aG9kc1xualN0YXQuZXh0ZW5kKGpTdGF0LmludmdhbW1hLCB7XG4gIHBkZjogZnVuY3Rpb24gcGRmKHgsIHNoYXBlLCBzY2FsZSkge1xuICAgIGlmICh4IDw9IDApXG4gICAgICByZXR1cm4gMDtcbiAgICByZXR1cm4gTWF0aC5leHAoLShzaGFwZSArIDEpICogTWF0aC5sb2coeCkgLSBzY2FsZSAvIHggLVxuICAgICAgICAgICAgICAgICAgICBqU3RhdC5nYW1tYWxuKHNoYXBlKSArIHNoYXBlICogTWF0aC5sb2coc2NhbGUpKTtcbiAgfSxcblxuICBjZGY6IGZ1bmN0aW9uIGNkZih4LCBzaGFwZSwgc2NhbGUpIHtcbiAgICBpZiAoeCA8PSAwKVxuICAgICAgcmV0dXJuIDA7XG4gICAgcmV0dXJuIDEgLSBqU3RhdC5sb3dSZWdHYW1tYShzaGFwZSwgc2NhbGUgLyB4KTtcbiAgfSxcblxuICBpbnY6IGZ1bmN0aW9uKHAsIHNoYXBlLCBzY2FsZSkge1xuICAgIHJldHVybiBzY2FsZSAvIGpTdGF0LmdhbW1hcGludigxIC0gcCwgc2hhcGUpO1xuICB9LFxuXG4gIG1lYW4gOiBmdW5jdGlvbihzaGFwZSwgc2NhbGUpIHtcbiAgICByZXR1cm4gKHNoYXBlID4gMSkgPyBzY2FsZSAvIChzaGFwZSAtIDEpIDogdW5kZWZpbmVkO1xuICB9LFxuXG4gIG1vZGU6IGZ1bmN0aW9uIG1vZGUoc2hhcGUsIHNjYWxlKSB7XG4gICAgcmV0dXJuIHNjYWxlIC8gKHNoYXBlICsgMSk7XG4gIH0sXG5cbiAgc2FtcGxlOiBmdW5jdGlvbiBzYW1wbGUoc2hhcGUsIHNjYWxlKSB7XG4gICAgcmV0dXJuIHNjYWxlIC8galN0YXQucmFuZGcoc2hhcGUpO1xuICB9LFxuXG4gIHZhcmlhbmNlOiBmdW5jdGlvbiB2YXJpYW5jZShzaGFwZSwgc2NhbGUpIHtcbiAgICBpZiAoc2hhcGUgPD0gMilcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIHNjYWxlICogc2NhbGUgLyAoKHNoYXBlIC0gMSkgKiAoc2hhcGUgLSAxKSAqIChzaGFwZSAtIDIpKTtcbiAgfVxufSk7XG5cblxuLy8gZXh0ZW5kIGt1bWFyYXN3YW15IGZ1bmN0aW9uIHdpdGggc3RhdGljIG1ldGhvZHNcbmpTdGF0LmV4dGVuZChqU3RhdC5rdW1hcmFzd2FteSwge1xuICBwZGY6IGZ1bmN0aW9uIHBkZih4LCBhbHBoYSwgYmV0YSkge1xuICAgIGlmICh4ID09PSAwICYmIGFscGhhID09PSAxKVxuICAgICAgcmV0dXJuIGJldGE7XG4gICAgZWxzZSBpZiAoeCA9PT0gMSAmJiBiZXRhID09PSAxKVxuICAgICAgcmV0dXJuIGFscGhhO1xuICAgIHJldHVybiBNYXRoLmV4cChNYXRoLmxvZyhhbHBoYSkgKyBNYXRoLmxvZyhiZXRhKSArIChhbHBoYSAtIDEpICpcbiAgICAgICAgICAgICAgICAgICAgTWF0aC5sb2coeCkgKyAoYmV0YSAtIDEpICpcbiAgICAgICAgICAgICAgICAgICAgTWF0aC5sb2coMSAtIE1hdGgucG93KHgsIGFscGhhKSkpO1xuICB9LFxuXG4gIGNkZjogZnVuY3Rpb24gY2RmKHgsIGFscGhhLCBiZXRhKSB7XG4gICAgaWYgKHggPCAwKVxuICAgICAgcmV0dXJuIDA7XG4gICAgZWxzZSBpZiAoeCA+IDEpXG4gICAgICByZXR1cm4gMTtcbiAgICByZXR1cm4gKDEgLSBNYXRoLnBvdygxIC0gTWF0aC5wb3coeCwgYWxwaGEpLCBiZXRhKSk7XG4gIH0sXG5cbiAgaW52OiBmdW5jdGlvbiBpbnYocCwgYWxwaGEsIGJldGEpIHtcbiAgICByZXR1cm4gTWF0aC5wb3coMSAtIE1hdGgucG93KDEgLSBwLCAxIC8gYmV0YSksIDEgLyBhbHBoYSk7XG4gIH0sXG5cbiAgbWVhbiA6IGZ1bmN0aW9uKGFscGhhLCBiZXRhKSB7XG4gICAgcmV0dXJuIChiZXRhICogalN0YXQuZ2FtbWFmbigxICsgMSAvIGFscGhhKSAqXG4gICAgICAgICAgICBqU3RhdC5nYW1tYWZuKGJldGEpKSAvIChqU3RhdC5nYW1tYWZuKDEgKyAxIC8gYWxwaGEgKyBiZXRhKSk7XG4gIH0sXG5cbiAgbWVkaWFuOiBmdW5jdGlvbiBtZWRpYW4oYWxwaGEsIGJldGEpIHtcbiAgICByZXR1cm4gTWF0aC5wb3coMSAtIE1hdGgucG93KDIsIC0xIC8gYmV0YSksIDEgLyBhbHBoYSk7XG4gIH0sXG5cbiAgbW9kZTogZnVuY3Rpb24gbW9kZShhbHBoYSwgYmV0YSkge1xuICAgIGlmICghKGFscGhhID49IDEgJiYgYmV0YSA+PSAxICYmIChhbHBoYSAhPT0gMSAmJiBiZXRhICE9PSAxKSkpXG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIHJldHVybiBNYXRoLnBvdygoYWxwaGEgLSAxKSAvIChhbHBoYSAqIGJldGEgLSAxKSwgMSAvIGFscGhhKTtcbiAgfSxcblxuICB2YXJpYW5jZTogZnVuY3Rpb24gdmFyaWFuY2UoLyphbHBoYSwgYmV0YSovKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCd2YXJpYW5jZSBub3QgeWV0IGltcGxlbWVudGVkJyk7XG4gICAgLy8gVE9ETzogY29tcGxldGUgdGhpc1xuICB9XG59KTtcblxuXG5cbi8vIGV4dGVuZCBsb2dub3JtYWwgZnVuY3Rpb24gd2l0aCBzdGF0aWMgbWV0aG9kc1xualN0YXQuZXh0ZW5kKGpTdGF0LmxvZ25vcm1hbCwge1xuICBwZGY6IGZ1bmN0aW9uIHBkZih4LCBtdSwgc2lnbWEpIHtcbiAgICBpZiAoeCA8PSAwKVxuICAgICAgcmV0dXJuIDA7XG4gICAgcmV0dXJuIE1hdGguZXhwKC1NYXRoLmxvZyh4KSAtIDAuNSAqIE1hdGgubG9nKDIgKiBNYXRoLlBJKSAtXG4gICAgICAgICAgICAgICAgICAgIE1hdGgubG9nKHNpZ21hKSAtIE1hdGgucG93KE1hdGgubG9nKHgpIC0gbXUsIDIpIC9cbiAgICAgICAgICAgICAgICAgICAgKDIgKiBzaWdtYSAqIHNpZ21hKSk7XG4gIH0sXG5cbiAgY2RmOiBmdW5jdGlvbiBjZGYoeCwgbXUsIHNpZ21hKSB7XG4gICAgaWYgKHggPCAwKVxuICAgICAgcmV0dXJuIDA7XG4gICAgcmV0dXJuIDAuNSArXG4gICAgICAgICgwLjUgKiBqU3RhdC5lcmYoKE1hdGgubG9nKHgpIC0gbXUpIC8gTWF0aC5zcXJ0KDIgKiBzaWdtYSAqIHNpZ21hKSkpO1xuICB9LFxuXG4gIGludjogZnVuY3Rpb24ocCwgbXUsIHNpZ21hKSB7XG4gICAgcmV0dXJuIE1hdGguZXhwKC0xLjQxNDIxMzU2MjM3MzA5NTA1ICogc2lnbWEgKiBqU3RhdC5lcmZjaW52KDIgKiBwKSArIG11KTtcbiAgfSxcblxuICBtZWFuOiBmdW5jdGlvbiBtZWFuKG11LCBzaWdtYSkge1xuICAgIHJldHVybiBNYXRoLmV4cChtdSArIHNpZ21hICogc2lnbWEgLyAyKTtcbiAgfSxcblxuICBtZWRpYW46IGZ1bmN0aW9uIG1lZGlhbihtdS8qLCBzaWdtYSovKSB7XG4gICAgcmV0dXJuIE1hdGguZXhwKG11KTtcbiAgfSxcblxuICBtb2RlOiBmdW5jdGlvbiBtb2RlKG11LCBzaWdtYSkge1xuICAgIHJldHVybiBNYXRoLmV4cChtdSAtIHNpZ21hICogc2lnbWEpO1xuICB9LFxuXG4gIHNhbXBsZTogZnVuY3Rpb24gc2FtcGxlKG11LCBzaWdtYSkge1xuICAgIHJldHVybiBNYXRoLmV4cChqU3RhdC5yYW5kbigpICogc2lnbWEgKyBtdSk7XG4gIH0sXG5cbiAgdmFyaWFuY2U6IGZ1bmN0aW9uIHZhcmlhbmNlKG11LCBzaWdtYSkge1xuICAgIHJldHVybiAoTWF0aC5leHAoc2lnbWEgKiBzaWdtYSkgLSAxKSAqIE1hdGguZXhwKDIgKiBtdSArIHNpZ21hICogc2lnbWEpO1xuICB9XG59KTtcblxuXG5cbi8vIGV4dGVuZCBub25jZW50cmFsdCBmdW5jdGlvbiB3aXRoIHN0YXRpYyBtZXRob2RzXG5qU3RhdC5leHRlbmQoalN0YXQubm9uY2VudHJhbHQsIHtcbiAgcGRmOiBmdW5jdGlvbiBwZGYoeCwgZG9mLCBuY3ApIHtcbiAgICB2YXIgdG9sID0gMWUtMTQ7XG4gICAgaWYgKE1hdGguYWJzKG5jcCkgPCB0b2wpICAvLyBuY3AgYXBwcm94IDA7IHVzZSBzdHVkZW50LXRcbiAgICAgIHJldHVybiBqU3RhdC5zdHVkZW50dC5wZGYoeCwgZG9mKVxuXG4gICAgaWYgKE1hdGguYWJzKHgpIDwgdG9sKSB7ICAvLyBkaWZmZXJlbnQgZm9ybXVsYSBmb3IgeCA9PSAwXG4gICAgICByZXR1cm4gTWF0aC5leHAoalN0YXQuZ2FtbWFsbigoZG9mICsgMSkgLyAyKSAtIG5jcCAqIG5jcCAvIDIgLVxuICAgICAgICAgICAgICAgICAgICAgIDAuNSAqIE1hdGgubG9nKE1hdGguUEkgKiBkb2YpIC0galN0YXQuZ2FtbWFsbihkb2YgLyAyKSk7XG4gICAgfVxuXG4gICAgLy8gZm9ybXVsYSBmb3IgeCAhPSAwXG4gICAgcmV0dXJuIGRvZiAvIHggKlxuICAgICAgICAoalN0YXQubm9uY2VudHJhbHQuY2RmKHggKiBNYXRoLnNxcnQoMSArIDIgLyBkb2YpLCBkb2YrMiwgbmNwKSAtXG4gICAgICAgICBqU3RhdC5ub25jZW50cmFsdC5jZGYoeCwgZG9mLCBuY3ApKTtcbiAgfSxcblxuICBjZGY6IGZ1bmN0aW9uIGNkZih4LCBkb2YsIG5jcCkge1xuICAgIHZhciB0b2wgPSAxZS0xNDtcbiAgICB2YXIgbWluX2l0ZXJhdGlvbnMgPSAyMDA7XG5cbiAgICBpZiAoTWF0aC5hYnMobmNwKSA8IHRvbCkgIC8vIG5jcCBhcHByb3ggMDsgdXNlIHN0dWRlbnQtdFxuICAgICAgcmV0dXJuIGpTdGF0LnN0dWRlbnR0LmNkZih4LCBkb2YpO1xuXG4gICAgLy8gdHVybiBuZWdhdGl2ZSB4IGludG8gcG9zaXRpdmUgYW5kIGZsaXAgcmVzdWx0IGFmdGVyd2FyZHNcbiAgICB2YXIgZmxpcCA9IGZhbHNlO1xuICAgIGlmICh4IDwgMCkge1xuICAgICAgZmxpcCA9IHRydWU7XG4gICAgICBuY3AgPSAtbmNwO1xuICAgIH1cblxuICAgIHZhciBwcm9iID0galN0YXQubm9ybWFsLmNkZigtbmNwLCAwLCAxKTtcbiAgICB2YXIgdmFsdWUgPSB0b2wgKyAxO1xuICAgIC8vIHVzZSB2YWx1ZSBhdCBsYXN0IHR3byBzdGVwcyB0byBkZXRlcm1pbmUgY29udmVyZ2VuY2VcbiAgICB2YXIgbGFzdHZhbHVlID0gdmFsdWU7XG4gICAgdmFyIHkgPSB4ICogeCAvICh4ICogeCArIGRvZik7XG4gICAgdmFyIGogPSAwO1xuICAgIHZhciBwID0gTWF0aC5leHAoLW5jcCAqIG5jcCAvIDIpO1xuICAgIHZhciBxID0gTWF0aC5leHAoLW5jcCAqIG5jcCAvIDIgLSAwLjUgKiBNYXRoLmxvZygyKSAtXG4gICAgICAgICAgICAgICAgICAgICBqU3RhdC5nYW1tYWxuKDMgLyAyKSkgKiBuY3A7XG4gICAgd2hpbGUgKGogPCBtaW5faXRlcmF0aW9ucyB8fCBsYXN0dmFsdWUgPiB0b2wgfHwgdmFsdWUgPiB0b2wpIHtcbiAgICAgIGxhc3R2YWx1ZSA9IHZhbHVlO1xuICAgICAgaWYgKGogPiAwKSB7XG4gICAgICAgIHAgKj0gKG5jcCAqIG5jcCkgLyAoMiAqIGopO1xuICAgICAgICBxICo9IChuY3AgKiBuY3ApIC8gKDIgKiAoaiArIDEgLyAyKSk7XG4gICAgICB9XG4gICAgICB2YWx1ZSA9IHAgKiBqU3RhdC5iZXRhLmNkZih5LCBqICsgMC41LCBkb2YgLyAyKSArXG4gICAgICAgICAgcSAqIGpTdGF0LmJldGEuY2RmKHksIGorMSwgZG9mLzIpO1xuICAgICAgcHJvYiArPSAwLjUgKiB2YWx1ZTtcbiAgICAgIGorKztcbiAgICB9XG5cbiAgICByZXR1cm4gZmxpcCA/ICgxIC0gcHJvYikgOiBwcm9iO1xuICB9XG59KTtcblxuXG4vLyBleHRlbmQgbm9ybWFsIGZ1bmN0aW9uIHdpdGggc3RhdGljIG1ldGhvZHNcbmpTdGF0LmV4dGVuZChqU3RhdC5ub3JtYWwsIHtcbiAgcGRmOiBmdW5jdGlvbiBwZGYoeCwgbWVhbiwgc3RkKSB7XG4gICAgcmV0dXJuIE1hdGguZXhwKC0wLjUgKiBNYXRoLmxvZygyICogTWF0aC5QSSkgLVxuICAgICAgICAgICAgICAgICAgICBNYXRoLmxvZyhzdGQpIC0gTWF0aC5wb3coeCAtIG1lYW4sIDIpIC8gKDIgKiBzdGQgKiBzdGQpKTtcbiAgfSxcblxuICBjZGY6IGZ1bmN0aW9uIGNkZih4LCBtZWFuLCBzdGQpIHtcbiAgICByZXR1cm4gMC41ICogKDEgKyBqU3RhdC5lcmYoKHggLSBtZWFuKSAvIE1hdGguc3FydCgyICogc3RkICogc3RkKSkpO1xuICB9LFxuXG4gIGludjogZnVuY3Rpb24ocCwgbWVhbiwgc3RkKSB7XG4gICAgcmV0dXJuIC0xLjQxNDIxMzU2MjM3MzA5NTA1ICogc3RkICogalN0YXQuZXJmY2ludigyICogcCkgKyBtZWFuO1xuICB9LFxuXG4gIG1lYW4gOiBmdW5jdGlvbihtZWFuLyosIHN0ZCovKSB7XG4gICAgcmV0dXJuIG1lYW47XG4gIH0sXG5cbiAgbWVkaWFuOiBmdW5jdGlvbiBtZWRpYW4obWVhbi8qLCBzdGQqLykge1xuICAgIHJldHVybiBtZWFuO1xuICB9LFxuXG4gIG1vZGU6IGZ1bmN0aW9uIChtZWFuLyosIHN0ZCovKSB7XG4gICAgcmV0dXJuIG1lYW47XG4gIH0sXG5cbiAgc2FtcGxlOiBmdW5jdGlvbiBzYW1wbGUobWVhbiwgc3RkKSB7XG4gICAgcmV0dXJuIGpTdGF0LnJhbmRuKCkgKiBzdGQgKyBtZWFuO1xuICB9LFxuXG4gIHZhcmlhbmNlIDogZnVuY3Rpb24obWVhbiwgc3RkKSB7XG4gICAgcmV0dXJuIHN0ZCAqIHN0ZDtcbiAgfVxufSk7XG5cblxuXG4vLyBleHRlbmQgcGFyZXRvIGZ1bmN0aW9uIHdpdGggc3RhdGljIG1ldGhvZHNcbmpTdGF0LmV4dGVuZChqU3RhdC5wYXJldG8sIHtcbiAgcGRmOiBmdW5jdGlvbiBwZGYoeCwgc2NhbGUsIHNoYXBlKSB7XG4gICAgaWYgKHggPCBzY2FsZSlcbiAgICAgIHJldHVybiAwO1xuICAgIHJldHVybiAoc2hhcGUgKiBNYXRoLnBvdyhzY2FsZSwgc2hhcGUpKSAvIE1hdGgucG93KHgsIHNoYXBlICsgMSk7XG4gIH0sXG5cbiAgY2RmOiBmdW5jdGlvbiBjZGYoeCwgc2NhbGUsIHNoYXBlKSB7XG4gICAgaWYgKHggPCBzY2FsZSlcbiAgICAgIHJldHVybiAwO1xuICAgIHJldHVybiAxIC0gTWF0aC5wb3coc2NhbGUgLyB4LCBzaGFwZSk7XG4gIH0sXG5cbiAgaW52OiBmdW5jdGlvbiBpbnYocCwgc2NhbGUsIHNoYXBlKSB7XG4gICAgcmV0dXJuIHNjYWxlIC8gTWF0aC5wb3coMSAtIHAsIDEgLyBzaGFwZSk7XG4gIH0sXG5cbiAgbWVhbjogZnVuY3Rpb24gbWVhbihzY2FsZSwgc2hhcGUpIHtcbiAgICBpZiAoc2hhcGUgPD0gMSlcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIChzaGFwZSAqIE1hdGgucG93KHNjYWxlLCBzaGFwZSkpIC8gKHNoYXBlIC0gMSk7XG4gIH0sXG5cbiAgbWVkaWFuOiBmdW5jdGlvbiBtZWRpYW4oc2NhbGUsIHNoYXBlKSB7XG4gICAgcmV0dXJuIHNjYWxlICogKHNoYXBlICogTWF0aC5TUVJUMik7XG4gIH0sXG5cbiAgbW9kZTogZnVuY3Rpb24gbW9kZShzY2FsZS8qLCBzaGFwZSovKSB7XG4gICAgcmV0dXJuIHNjYWxlO1xuICB9LFxuXG4gIHZhcmlhbmNlIDogZnVuY3Rpb24oc2NhbGUsIHNoYXBlKSB7XG4gICAgaWYgKHNoYXBlIDw9IDIpXG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIHJldHVybiAoc2NhbGUqc2NhbGUgKiBzaGFwZSkgLyAoTWF0aC5wb3coc2hhcGUgLSAxLCAyKSAqIChzaGFwZSAtIDIpKTtcbiAgfVxufSk7XG5cblxuXG4vLyBleHRlbmQgc3R1ZGVudHQgZnVuY3Rpb24gd2l0aCBzdGF0aWMgbWV0aG9kc1xualN0YXQuZXh0ZW5kKGpTdGF0LnN0dWRlbnR0LCB7XG4gIHBkZjogZnVuY3Rpb24gcGRmKHgsIGRvZikge1xuICAgIGRvZiA9IGRvZiA+IDFlMTAwID8gMWUxMDAgOiBkb2Y7XG4gICAgcmV0dXJuICgxLyhNYXRoLnNxcnQoZG9mKSAqIGpTdGF0LmJldGFmbigwLjUsIGRvZi8yKSkpICpcbiAgICAgICAgTWF0aC5wb3coMSArICgoeCAqIHgpIC8gZG9mKSwgLSgoZG9mICsgMSkgLyAyKSk7XG4gIH0sXG5cbiAgY2RmOiBmdW5jdGlvbiBjZGYoeCwgZG9mKSB7XG4gICAgdmFyIGRvZjIgPSBkb2YgLyAyO1xuICAgIHJldHVybiBqU3RhdC5pYmV0YSgoeCArIE1hdGguc3FydCh4ICogeCArIGRvZikpIC9cbiAgICAgICAgICAgICAgICAgICAgICAgKDIgKiBNYXRoLnNxcnQoeCAqIHggKyBkb2YpKSwgZG9mMiwgZG9mMik7XG4gIH0sXG5cbiAgaW52OiBmdW5jdGlvbihwLCBkb2YpIHtcbiAgICB2YXIgeCA9IGpTdGF0LmliZXRhaW52KDIgKiBNYXRoLm1pbihwLCAxIC0gcCksIDAuNSAqIGRvZiwgMC41KTtcbiAgICB4ID0gTWF0aC5zcXJ0KGRvZiAqICgxIC0geCkgLyB4KTtcbiAgICByZXR1cm4gKHAgPiAwLjUpID8geCA6IC14O1xuICB9LFxuXG4gIG1lYW46IGZ1bmN0aW9uIG1lYW4oZG9mKSB7XG4gICAgcmV0dXJuIChkb2YgPiAxKSA/IDAgOiB1bmRlZmluZWQ7XG4gIH0sXG5cbiAgbWVkaWFuOiBmdW5jdGlvbiBtZWRpYW4oLypkb2YqLykge1xuICAgIHJldHVybiAwO1xuICB9LFxuXG4gIG1vZGU6IGZ1bmN0aW9uIG1vZGUoLypkb2YqLykge1xuICAgIHJldHVybiAwO1xuICB9LFxuXG4gIHNhbXBsZTogZnVuY3Rpb24gc2FtcGxlKGRvZikge1xuICAgIHJldHVybiBqU3RhdC5yYW5kbigpICogTWF0aC5zcXJ0KGRvZiAvICgyICogalN0YXQucmFuZGcoZG9mIC8gMikpKTtcbiAgfSxcblxuICB2YXJpYW5jZTogZnVuY3Rpb24gdmFyaWFuY2UoZG9mKSB7XG4gICAgcmV0dXJuIChkb2YgID4gMikgPyBkb2YgLyAoZG9mIC0gMikgOiAoZG9mID4gMSkgPyBJbmZpbml0eSA6IHVuZGVmaW5lZDtcbiAgfVxufSk7XG5cblxuXG4vLyBleHRlbmQgd2VpYnVsbCBmdW5jdGlvbiB3aXRoIHN0YXRpYyBtZXRob2RzXG5qU3RhdC5leHRlbmQoalN0YXQud2VpYnVsbCwge1xuICBwZGY6IGZ1bmN0aW9uIHBkZih4LCBzY2FsZSwgc2hhcGUpIHtcbiAgICBpZiAoeCA8IDAgfHwgc2NhbGUgPCAwIHx8IHNoYXBlIDwgMClcbiAgICAgIHJldHVybiAwO1xuICAgIHJldHVybiAoc2hhcGUgLyBzY2FsZSkgKiBNYXRoLnBvdygoeCAvIHNjYWxlKSwgKHNoYXBlIC0gMSkpICpcbiAgICAgICAgTWF0aC5leHAoLShNYXRoLnBvdygoeCAvIHNjYWxlKSwgc2hhcGUpKSk7XG4gIH0sXG5cbiAgY2RmOiBmdW5jdGlvbiBjZGYoeCwgc2NhbGUsIHNoYXBlKSB7XG4gICAgcmV0dXJuIHggPCAwID8gMCA6IDEgLSBNYXRoLmV4cCgtTWF0aC5wb3coKHggLyBzY2FsZSksIHNoYXBlKSk7XG4gIH0sXG5cbiAgaW52OiBmdW5jdGlvbihwLCBzY2FsZSwgc2hhcGUpIHtcbiAgICByZXR1cm4gc2NhbGUgKiBNYXRoLnBvdygtTWF0aC5sb2coMSAtIHApLCAxIC8gc2hhcGUpO1xuICB9LFxuXG4gIG1lYW4gOiBmdW5jdGlvbihzY2FsZSwgc2hhcGUpIHtcbiAgICByZXR1cm4gc2NhbGUgKiBqU3RhdC5nYW1tYWZuKDEgKyAxIC8gc2hhcGUpO1xuICB9LFxuXG4gIG1lZGlhbjogZnVuY3Rpb24gbWVkaWFuKHNjYWxlLCBzaGFwZSkge1xuICAgIHJldHVybiBzY2FsZSAqIE1hdGgucG93KE1hdGgubG9nKDIpLCAxIC8gc2hhcGUpO1xuICB9LFxuXG4gIG1vZGU6IGZ1bmN0aW9uIG1vZGUoc2NhbGUsIHNoYXBlKSB7XG4gICAgaWYgKHNoYXBlIDw9IDEpXG4gICAgICByZXR1cm4gMDtcbiAgICByZXR1cm4gc2NhbGUgKiBNYXRoLnBvdygoc2hhcGUgLSAxKSAvIHNoYXBlLCAxIC8gc2hhcGUpO1xuICB9LFxuXG4gIHNhbXBsZTogZnVuY3Rpb24gc2FtcGxlKHNjYWxlLCBzaGFwZSkge1xuICAgIHJldHVybiBzY2FsZSAqIE1hdGgucG93KC1NYXRoLmxvZyhqU3RhdC5fcmFuZG9tX2ZuKCkpLCAxIC8gc2hhcGUpO1xuICB9LFxuXG4gIHZhcmlhbmNlOiBmdW5jdGlvbiB2YXJpYW5jZShzY2FsZSwgc2hhcGUpIHtcbiAgICByZXR1cm4gc2NhbGUgKiBzY2FsZSAqIGpTdGF0LmdhbW1hZm4oMSArIDIgLyBzaGFwZSkgLVxuICAgICAgICBNYXRoLnBvdyhqU3RhdC53ZWlidWxsLm1lYW4oc2NhbGUsIHNoYXBlKSwgMik7XG4gIH1cbn0pO1xuXG5cblxuLy8gZXh0ZW5kIHVuaWZvcm0gZnVuY3Rpb24gd2l0aCBzdGF0aWMgbWV0aG9kc1xualN0YXQuZXh0ZW5kKGpTdGF0LnVuaWZvcm0sIHtcbiAgcGRmOiBmdW5jdGlvbiBwZGYoeCwgYSwgYikge1xuICAgIHJldHVybiAoeCA8IGEgfHwgeCA+IGIpID8gMCA6IDEgLyAoYiAtIGEpO1xuICB9LFxuXG4gIGNkZjogZnVuY3Rpb24gY2RmKHgsIGEsIGIpIHtcbiAgICBpZiAoeCA8IGEpXG4gICAgICByZXR1cm4gMDtcbiAgICBlbHNlIGlmICh4IDwgYilcbiAgICAgIHJldHVybiAoeCAtIGEpIC8gKGIgLSBhKTtcbiAgICByZXR1cm4gMTtcbiAgfSxcblxuICBpbnY6IGZ1bmN0aW9uKHAsIGEsIGIpIHtcbiAgICByZXR1cm4gYSArIChwICogKGIgLSBhKSk7XG4gIH0sXG5cbiAgbWVhbjogZnVuY3Rpb24gbWVhbihhLCBiKSB7XG4gICAgcmV0dXJuIDAuNSAqIChhICsgYik7XG4gIH0sXG5cbiAgbWVkaWFuOiBmdW5jdGlvbiBtZWRpYW4oYSwgYikge1xuICAgIHJldHVybiBqU3RhdC5tZWFuKGEsIGIpO1xuICB9LFxuXG4gIG1vZGU6IGZ1bmN0aW9uIG1vZGUoLyphLCBiKi8pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ21vZGUgaXMgbm90IHlldCBpbXBsZW1lbnRlZCcpO1xuICB9LFxuXG4gIHNhbXBsZTogZnVuY3Rpb24gc2FtcGxlKGEsIGIpIHtcbiAgICByZXR1cm4gKGEgLyAyICsgYiAvIDIpICsgKGIgLyAyIC0gYSAvIDIpICogKDIgKiBqU3RhdC5fcmFuZG9tX2ZuKCkgLSAxKTtcbiAgfSxcblxuICB2YXJpYW5jZTogZnVuY3Rpb24gdmFyaWFuY2UoYSwgYikge1xuICAgIHJldHVybiBNYXRoLnBvdyhiIC0gYSwgMikgLyAxMjtcbiAgfVxufSk7XG5cblxuLy8gR290IHRoaXMgZnJvbSBodHRwOi8vd3d3Lm1hdGgudWNsYS5lZHUvfnRvbS9kaXN0cmlidXRpb25zL2Jpbm9taWFsLmh0bWxcbmZ1bmN0aW9uIGJldGluYyh4LCBhLCBiLCBlcHMpIHtcbiAgdmFyIGEwID0gMDtcbiAgdmFyIGIwID0gMTtcbiAgdmFyIGExID0gMTtcbiAgdmFyIGIxID0gMTtcbiAgdmFyIG05ID0gMDtcbiAgdmFyIGEyID0gMDtcbiAgdmFyIGM5O1xuXG4gIHdoaWxlIChNYXRoLmFicygoYTEgLSBhMikgLyBhMSkgPiBlcHMpIHtcbiAgICBhMiA9IGExO1xuICAgIGM5ID0gLShhICsgbTkpICogKGEgKyBiICsgbTkpICogeCAvIChhICsgMiAqIG05KSAvIChhICsgMiAqIG05ICsgMSk7XG4gICAgYTAgPSBhMSArIGM5ICogYTA7XG4gICAgYjAgPSBiMSArIGM5ICogYjA7XG4gICAgbTkgPSBtOSArIDE7XG4gICAgYzkgPSBtOSAqIChiIC0gbTkpICogeCAvIChhICsgMiAqIG05IC0gMSkgLyAoYSArIDIgKiBtOSk7XG4gICAgYTEgPSBhMCArIGM5ICogYTE7XG4gICAgYjEgPSBiMCArIGM5ICogYjE7XG4gICAgYTAgPSBhMCAvIGIxO1xuICAgIGIwID0gYjAgLyBiMTtcbiAgICBhMSA9IGExIC8gYjE7XG4gICAgYjEgPSAxO1xuICB9XG5cbiAgcmV0dXJuIGExIC8gYTtcbn1cblxuXG4vLyBleHRlbmQgdW5pZm9ybSBmdW5jdGlvbiB3aXRoIHN0YXRpYyBtZXRob2RzXG5qU3RhdC5leHRlbmQoalN0YXQuYmlub21pYWwsIHtcbiAgcGRmOiBmdW5jdGlvbiBwZGYoaywgbiwgcCkge1xuICAgIHJldHVybiAocCA9PT0gMCB8fCBwID09PSAxKSA/XG4gICAgICAoKG4gKiBwKSA9PT0gayA/IDEgOiAwKSA6XG4gICAgICBqU3RhdC5jb21iaW5hdGlvbihuLCBrKSAqIE1hdGgucG93KHAsIGspICogTWF0aC5wb3coMSAtIHAsIG4gLSBrKTtcbiAgfSxcblxuICBjZGY6IGZ1bmN0aW9uIGNkZih4LCBuLCBwKSB7XG4gICAgdmFyIGJldGFjZGY7XG4gICAgdmFyIGVwcyA9IDFlLTEwO1xuXG4gICAgaWYgKHggPCAwKVxuICAgICAgcmV0dXJuIDA7XG4gICAgaWYgKHggPj0gbilcbiAgICAgIHJldHVybiAxO1xuICAgIGlmIChwIDwgMCB8fCBwID4gMSB8fCBuIDw9IDApXG4gICAgICByZXR1cm4gTmFOO1xuXG4gICAgeCA9IE1hdGguZmxvb3IoeCk7XG4gICAgdmFyIHogPSBwO1xuICAgIHZhciBhID0geCArIDE7XG4gICAgdmFyIGIgPSBuIC0geDtcbiAgICB2YXIgcyA9IGEgKyBiO1xuICAgIHZhciBidCA9IE1hdGguZXhwKGpTdGF0LmdhbW1hbG4ocykgLSBqU3RhdC5nYW1tYWxuKGIpIC1cbiAgICAgICAgICAgICAgICAgICAgICBqU3RhdC5nYW1tYWxuKGEpICsgYSAqIE1hdGgubG9nKHopICsgYiAqIE1hdGgubG9nKDEgLSB6KSk7XG5cbiAgICBpZiAoeiA8IChhICsgMSkgLyAocyArIDIpKVxuICAgICAgYmV0YWNkZiA9IGJ0ICogYmV0aW5jKHosIGEsIGIsIGVwcyk7XG4gICAgZWxzZVxuICAgICAgYmV0YWNkZiA9IDEgLSBidCAqIGJldGluYygxIC0geiwgYiwgYSwgZXBzKTtcblxuICAgIHJldHVybiBNYXRoLnJvdW5kKCgxIC0gYmV0YWNkZikgKiAoMSAvIGVwcykpIC8gKDEgLyBlcHMpO1xuICB9XG59KTtcblxuXG5cbi8vIGV4dGVuZCB1bmlmb3JtIGZ1bmN0aW9uIHdpdGggc3RhdGljIG1ldGhvZHNcbmpTdGF0LmV4dGVuZChqU3RhdC5uZWdiaW4sIHtcbiAgcGRmOiBmdW5jdGlvbiBwZGYoaywgciwgcCkge1xuICAgIGlmIChrICE9PSBrID4+PiAwKVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIGlmIChrIDwgMClcbiAgICAgIHJldHVybiAwO1xuICAgIHJldHVybiBqU3RhdC5jb21iaW5hdGlvbihrICsgciAtIDEsIHIgLSAxKSAqXG4gICAgICAgIE1hdGgucG93KDEgLSBwLCBrKSAqIE1hdGgucG93KHAsIHIpO1xuICB9LFxuXG4gIGNkZjogZnVuY3Rpb24gY2RmKHgsIHIsIHApIHtcbiAgICB2YXIgc3VtID0gMCxcbiAgICBrID0gMDtcbiAgICBpZiAoeCA8IDApIHJldHVybiAwO1xuICAgIGZvciAoOyBrIDw9IHg7IGsrKykge1xuICAgICAgc3VtICs9IGpTdGF0Lm5lZ2Jpbi5wZGYoaywgciwgcCk7XG4gICAgfVxuICAgIHJldHVybiBzdW07XG4gIH1cbn0pO1xuXG5cblxuLy8gZXh0ZW5kIHVuaWZvcm0gZnVuY3Rpb24gd2l0aCBzdGF0aWMgbWV0aG9kc1xualN0YXQuZXh0ZW5kKGpTdGF0Lmh5cGdlb20sIHtcbiAgcGRmOiBmdW5jdGlvbiBwZGYoaywgTiwgbSwgbikge1xuICAgIC8vIEh5cGVyZ2VvbWV0cmljIFBERi5cblxuICAgIC8vIEEgc2ltcGxpZmljYXRpb24gb2YgdGhlIENERiBhbGdvcml0aG0gYmVsb3cuXG5cbiAgICAvLyBrID0gbnVtYmVyIG9mIHN1Y2Nlc3NlcyBkcmF3blxuICAgIC8vIE4gPSBwb3B1bGF0aW9uIHNpemVcbiAgICAvLyBtID0gbnVtYmVyIG9mIHN1Y2Nlc3NlcyBpbiBwb3B1bGF0aW9uXG4gICAgLy8gbiA9IG51bWJlciBvZiBpdGVtcyBkcmF3biBmcm9tIHBvcHVsYXRpb25cblxuICAgIGlmKGsgIT09IGsgfCAwKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSBlbHNlIGlmKGsgPCAwIHx8IGsgPCBtIC0gKE4gLSBuKSkge1xuICAgICAgLy8gSXQncyBpbXBvc3NpYmxlIHRvIGhhdmUgdGhpcyBmZXcgc3VjY2Vzc2VzIGRyYXduLlxuICAgICAgcmV0dXJuIDA7XG4gICAgfSBlbHNlIGlmKGsgPiBuIHx8IGsgPiBtKSB7XG4gICAgICAvLyBJdCdzIGltcG9zc2libGUgdG8gaGF2ZSB0aGlzIG1hbnkgc3VjY2Vzc2VzIGRyYXduLlxuICAgICAgcmV0dXJuIDA7XG4gICAgfSBlbHNlIGlmIChtICogMiA+IE4pIHtcbiAgICAgIC8vIE1vcmUgdGhhbiBoYWxmIHRoZSBwb3B1bGF0aW9uIGlzIHN1Y2Nlc3Nlcy5cblxuICAgICAgaWYobiAqIDIgPiBOKSB7XG4gICAgICAgIC8vIE1vcmUgdGhhbiBoYWxmIHRoZSBwb3B1bGF0aW9uIGlzIHNhbXBsZWQuXG5cbiAgICAgICAgcmV0dXJuIGpTdGF0Lmh5cGdlb20ucGRmKE4gLSBtIC0gbiArIGssIE4sIE4gLSBtLCBOIC0gbilcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIEhhbGYgb3IgbGVzcyBvZiB0aGUgcG9wdWxhdGlvbiBpcyBzYW1wbGVkLlxuXG4gICAgICAgIHJldHVybiBqU3RhdC5oeXBnZW9tLnBkZihuIC0gaywgTiwgTiAtIG0sIG4pO1xuICAgICAgfVxuXG4gICAgfSBlbHNlIGlmKG4gKiAyID4gTikge1xuICAgICAgLy8gSGFsZiBvciBsZXNzIGlzIHN1Y2Nlc3Nlcy5cblxuICAgICAgcmV0dXJuIGpTdGF0Lmh5cGdlb20ucGRmKG0gLSBrLCBOLCBtLCBOIC0gbik7XG5cbiAgICB9IGVsc2UgaWYobSA8IG4pIHtcbiAgICAgIC8vIFdlIHdhbnQgdG8gaGF2ZSB0aGUgbnVtYmVyIG9mIHRoaW5ncyBzYW1wbGVkIHRvIGJlIGxlc3MgdGhhbiB0aGVcbiAgICAgIC8vIHN1Y2Nlc3NlcyBhdmFpbGFibGUuIFNvIHN3YXAgdGhlIGRlZmluaXRpb25zIG9mIHN1Y2Nlc3NmdWwgYW5kIHNhbXBsZWQuXG4gICAgICByZXR1cm4galN0YXQuaHlwZ2VvbS5wZGYoaywgTiwgbiwgbSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIElmIHdlIGdldCBoZXJlLCBoYWxmIG9yIGxlc3Mgb2YgdGhlIHBvcHVsYXRpb24gd2FzIHNhbXBsZWQsIGhhbGYgb3JcbiAgICAgIC8vIGxlc3Mgb2YgaXQgd2FzIHN1Y2Nlc3NlcywgYW5kIHdlIGhhZCBmZXdlciBzYW1wbGVkIHRoaW5ncyB0aGFuXG4gICAgICAvLyBzdWNjZXNzZXMuIE5vdyB3ZSBjYW4gZG8gdGhpcyBjb21wbGljYXRlZCBpdGVyYXRpdmUgYWxnb3JpdGhtIGluIGFuXG4gICAgICAvLyBlZmZpY2llbnQgd2F5LlxuXG4gICAgICAvLyBUaGUgYmFzaWMgcHJlbWlzZSBvZiB0aGUgYWxnb3JpdGhtIGlzIHRoYXQgd2UgcGFydGlhbGx5IG5vcm1hbGl6ZSBvdXJcbiAgICAgIC8vIGludGVybWVkaWF0ZSBwcm9kdWN0IHRvIGtlZXAgaXQgaW4gYSBudW1lcmljYWxseSBnb29kIHJlZ2lvbiwgYW5kIHRoZW5cbiAgICAgIC8vIGZpbmlzaCB0aGUgbm9ybWFsaXphdGlvbiBhdCB0aGUgZW5kLlxuXG4gICAgICAvLyBUaGlzIHZhcmlhYmxlIGhvbGRzIHRoZSBzY2FsZWQgcHJvYmFiaWxpdHkgb2YgdGhlIGN1cnJlbnQgbnVtYmVyIG9mXG4gICAgICAvLyBzdWNjZXNzZXMuXG4gICAgICB2YXIgc2NhbGVkUERGID0gMTtcblxuICAgICAgLy8gVGhpcyBrZWVwcyB0cmFjayBvZiBob3cgbXVjaCB3ZSBoYXZlIG5vcm1hbGl6ZWQuXG4gICAgICB2YXIgc2FtcGxlc0RvbmUgPSAwO1xuXG4gICAgICBmb3IodmFyIGkgPSAwOyBpIDwgazsgaSsrKSB7XG4gICAgICAgIC8vIEZvciBldmVyeSBwb3NzaWJsZSBudW1iZXIgb2Ygc3VjY2Vzc2VzIHVwIHRvIHRoYXQgb2JzZXJ2ZWQuLi5cblxuICAgICAgICB3aGlsZShzY2FsZWRQREYgPiAxICYmIHNhbXBsZXNEb25lIDwgbikge1xuICAgICAgICAgIC8vIEludGVybWVkaWF0ZSByZXN1bHQgaXMgZ3Jvd2luZyB0b28gYmlnLiBBcHBseSBzb21lIG9mIHRoZVxuICAgICAgICAgIC8vIG5vcm1hbGl6YXRpb24gdG8gc2hyaW5rIGV2ZXJ5dGhpbmcuXG5cbiAgICAgICAgICBzY2FsZWRQREYgKj0gMSAtIChtIC8gKE4gLSBzYW1wbGVzRG9uZSkpO1xuXG4gICAgICAgICAgLy8gU2F5IHdlJ3ZlIG5vcm1hbGl6ZWQgYnkgdGhpcyBzYW1wbGUgYWxyZWFkeS5cbiAgICAgICAgICBzYW1wbGVzRG9uZSsrO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gV29yayBvdXQgdGhlIHBhcnRpYWxseS1ub3JtYWxpemVkIGh5cGVyZ2VvbWV0cmljIFBERiBmb3IgdGhlIG5leHRcbiAgICAgICAgLy8gbnVtYmVyIG9mIHN1Y2Nlc3Nlc1xuICAgICAgICBzY2FsZWRQREYgKj0gKG4gLSBpKSAqIChtIC0gaSkgLyAoKGkgKyAxKSAqIChOIC0gbSAtIG4gKyBpICsgMSkpO1xuICAgICAgfVxuXG4gICAgICBmb3IoOyBzYW1wbGVzRG9uZSA8IG47IHNhbXBsZXNEb25lKyspIHtcbiAgICAgICAgLy8gQXBwbHkgYWxsIHRoZSByZXN0IG9mIHRoZSBub3JtYWxpemF0aW9uXG4gICAgICAgIHNjYWxlZFBERiAqPSAxIC0gKG0gLyAoTiAtIHNhbXBsZXNEb25lKSk7XG4gICAgICB9XG5cbiAgICAgIC8vIEJvdW5kIGFuc3dlciBzYW5lbHkgYmVmb3JlIHJldHVybmluZy5cbiAgICAgIHJldHVybiBNYXRoLm1pbigxLCBNYXRoLm1heCgwLCBzY2FsZWRQREYpKTtcbiAgICB9XG4gIH0sXG5cbiAgY2RmOiBmdW5jdGlvbiBjZGYoeCwgTiwgbSwgbikge1xuICAgIC8vIEh5cGVyZ2VvbWV0cmljIENERi5cblxuICAgIC8vIFRoaXMgYWxnb3JpdGhtIGlzIGR1ZSB0byBQcm9mLiBUaG9tYXMgUy4gRmVyZ3Vzb24sIDx0b21AbWF0aC51Y2xhLmVkdT4sXG4gICAgLy8gYW5kIGNvbWVzIGZyb20gaGlzIGh5cGVyZ2VvbWV0cmljIHRlc3QgY2FsY3VsYXRvciBhdFxuICAgIC8vIDxodHRwOi8vd3d3Lm1hdGgudWNsYS5lZHUvfnRvbS9kaXN0cmlidXRpb25zL0h5cGVyZ2VvbWV0cmljLmh0bWw+LlxuXG4gICAgLy8geCA9IG51bWJlciBvZiBzdWNjZXNzZXMgZHJhd25cbiAgICAvLyBOID0gcG9wdWxhdGlvbiBzaXplXG4gICAgLy8gbSA9IG51bWJlciBvZiBzdWNjZXNzZXMgaW4gcG9wdWxhdGlvblxuICAgIC8vIG4gPSBudW1iZXIgb2YgaXRlbXMgZHJhd24gZnJvbSBwb3B1bGF0aW9uXG5cbiAgICBpZih4IDwgMCB8fCB4IDwgbSAtIChOIC0gbikpIHtcbiAgICAgIC8vIEl0J3MgaW1wb3NzaWJsZSB0byBoYXZlIHRoaXMgZmV3IHN1Y2Nlc3NlcyBkcmF3biBvciBmZXdlci5cbiAgICAgIHJldHVybiAwO1xuICAgIH0gZWxzZSBpZih4ID49IG4gfHwgeCA+PSBtKSB7XG4gICAgICAvLyBXZSB3aWxsIGFsd2F5cyBoYXZlIHRoaXMgbWFueSBzdWNjZXNzZXMgb3IgZmV3ZXIuXG4gICAgICByZXR1cm4gMTtcbiAgICB9IGVsc2UgaWYgKG0gKiAyID4gTikge1xuICAgICAgLy8gTW9yZSB0aGFuIGhhbGYgdGhlIHBvcHVsYXRpb24gaXMgc3VjY2Vzc2VzLlxuXG4gICAgICBpZihuICogMiA+IE4pIHtcbiAgICAgICAgLy8gTW9yZSB0aGFuIGhhbGYgdGhlIHBvcHVsYXRpb24gaXMgc2FtcGxlZC5cblxuICAgICAgICByZXR1cm4galN0YXQuaHlwZ2VvbS5jZGYoTiAtIG0gLSBuICsgeCwgTiwgTiAtIG0sIE4gLSBuKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gSGFsZiBvciBsZXNzIG9mIHRoZSBwb3B1bGF0aW9uIGlzIHNhbXBsZWQuXG5cbiAgICAgICAgcmV0dXJuIDEgLSBqU3RhdC5oeXBnZW9tLmNkZihuIC0geCAtIDEsIE4sIE4gLSBtLCBuKTtcbiAgICAgIH1cblxuICAgIH0gZWxzZSBpZihuICogMiA+IE4pIHtcbiAgICAgIC8vIEhhbGYgb3IgbGVzcyBpcyBzdWNjZXNzZXMuXG5cbiAgICAgIHJldHVybiAxIC0galN0YXQuaHlwZ2VvbS5jZGYobSAtIHggLSAxLCBOLCBtLCBOIC0gbik7XG5cbiAgICB9IGVsc2UgaWYobSA8IG4pIHtcbiAgICAgIC8vIFdlIHdhbnQgdG8gaGF2ZSB0aGUgbnVtYmVyIG9mIHRoaW5ncyBzYW1wbGVkIHRvIGJlIGxlc3MgdGhhbiB0aGVcbiAgICAgIC8vIHN1Y2Nlc3NlcyBhdmFpbGFibGUuIFNvIHN3YXAgdGhlIGRlZmluaXRpb25zIG9mIHN1Y2Nlc3NmdWwgYW5kIHNhbXBsZWQuXG4gICAgICByZXR1cm4galN0YXQuaHlwZ2VvbS5jZGYoeCwgTiwgbiwgbSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIElmIHdlIGdldCBoZXJlLCBoYWxmIG9yIGxlc3Mgb2YgdGhlIHBvcHVsYXRpb24gd2FzIHNhbXBsZWQsIGhhbGYgb3JcbiAgICAgIC8vIGxlc3Mgb2YgaXQgd2FzIHN1Y2Nlc3NlcywgYW5kIHdlIGhhZCBmZXdlciBzYW1wbGVkIHRoaW5ncyB0aGFuXG4gICAgICAvLyBzdWNjZXNzZXMuIE5vdyB3ZSBjYW4gZG8gdGhpcyBjb21wbGljYXRlZCBpdGVyYXRpdmUgYWxnb3JpdGhtIGluIGFuXG4gICAgICAvLyBlZmZpY2llbnQgd2F5LlxuXG4gICAgICAvLyBUaGUgYmFzaWMgcHJlbWlzZSBvZiB0aGUgYWxnb3JpdGhtIGlzIHRoYXQgd2UgcGFydGlhbGx5IG5vcm1hbGl6ZSBvdXJcbiAgICAgIC8vIGludGVybWVkaWF0ZSBzdW0gdG8ga2VlcCBpdCBpbiBhIG51bWVyaWNhbGx5IGdvb2QgcmVnaW9uLCBhbmQgdGhlblxuICAgICAgLy8gZmluaXNoIHRoZSBub3JtYWxpemF0aW9uIGF0IHRoZSBlbmQuXG5cbiAgICAgIC8vIEhvbGRzIHRoZSBpbnRlcm1lZGlhdGUsIHNjYWxlZCB0b3RhbCBDREYuXG4gICAgICB2YXIgc2NhbGVkQ0RGID0gMTtcblxuICAgICAgLy8gVGhpcyB2YXJpYWJsZSBob2xkcyB0aGUgc2NhbGVkIHByb2JhYmlsaXR5IG9mIHRoZSBjdXJyZW50IG51bWJlciBvZlxuICAgICAgLy8gc3VjY2Vzc2VzLlxuICAgICAgdmFyIHNjYWxlZFBERiA9IDE7XG5cbiAgICAgIC8vIFRoaXMga2VlcHMgdHJhY2sgb2YgaG93IG11Y2ggd2UgaGF2ZSBub3JtYWxpemVkLlxuICAgICAgdmFyIHNhbXBsZXNEb25lID0gMDtcblxuICAgICAgZm9yKHZhciBpID0gMDsgaSA8IHg7IGkrKykge1xuICAgICAgICAvLyBGb3IgZXZlcnkgcG9zc2libGUgbnVtYmVyIG9mIHN1Y2Nlc3NlcyB1cCB0byB0aGF0IG9ic2VydmVkLi4uXG5cbiAgICAgICAgd2hpbGUoc2NhbGVkQ0RGID4gMSAmJiBzYW1wbGVzRG9uZSA8IG4pIHtcbiAgICAgICAgICAvLyBJbnRlcm1lZGlhdGUgcmVzdWx0IGlzIGdyb3dpbmcgdG9vIGJpZy4gQXBwbHkgc29tZSBvZiB0aGVcbiAgICAgICAgICAvLyBub3JtYWxpemF0aW9uIHRvIHNocmluayBldmVyeXRoaW5nLlxuXG4gICAgICAgICAgdmFyIGZhY3RvciA9IDEgLSAobSAvIChOIC0gc2FtcGxlc0RvbmUpKTtcblxuICAgICAgICAgIHNjYWxlZFBERiAqPSBmYWN0b3I7XG4gICAgICAgICAgc2NhbGVkQ0RGICo9IGZhY3RvcjtcblxuICAgICAgICAgIC8vIFNheSB3ZSd2ZSBub3JtYWxpemVkIGJ5IHRoaXMgc2FtcGxlIGFscmVhZHkuXG4gICAgICAgICAgc2FtcGxlc0RvbmUrKztcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFdvcmsgb3V0IHRoZSBwYXJ0aWFsbHktbm9ybWFsaXplZCBoeXBlcmdlb21ldHJpYyBQREYgZm9yIHRoZSBuZXh0XG4gICAgICAgIC8vIG51bWJlciBvZiBzdWNjZXNzZXNcbiAgICAgICAgc2NhbGVkUERGICo9IChuIC0gaSkgKiAobSAtIGkpIC8gKChpICsgMSkgKiAoTiAtIG0gLSBuICsgaSArIDEpKTtcblxuICAgICAgICAvLyBBZGQgdG8gdGhlIENERiBhbnN3ZXIuXG4gICAgICAgIHNjYWxlZENERiArPSBzY2FsZWRQREY7XG4gICAgICB9XG5cbiAgICAgIGZvcig7IHNhbXBsZXNEb25lIDwgbjsgc2FtcGxlc0RvbmUrKykge1xuICAgICAgICAvLyBBcHBseSBhbGwgdGhlIHJlc3Qgb2YgdGhlIG5vcm1hbGl6YXRpb25cbiAgICAgICAgc2NhbGVkQ0RGICo9IDEgLSAobSAvIChOIC0gc2FtcGxlc0RvbmUpKTtcbiAgICAgIH1cblxuICAgICAgLy8gQm91bmQgYW5zd2VyIHNhbmVseSBiZWZvcmUgcmV0dXJuaW5nLlxuICAgICAgcmV0dXJuIE1hdGgubWluKDEsIE1hdGgubWF4KDAsIHNjYWxlZENERikpO1xuICAgIH1cbiAgfVxufSk7XG5cblxuXG4vLyBleHRlbmQgdW5pZm9ybSBmdW5jdGlvbiB3aXRoIHN0YXRpYyBtZXRob2RzXG5qU3RhdC5leHRlbmQoalN0YXQucG9pc3Nvbiwge1xuICBwZGY6IGZ1bmN0aW9uIHBkZihrLCBsKSB7XG4gICAgaWYgKGwgPCAwIHx8IChrICUgMSkgIT09IDAgfHwgayA8IDApIHtcbiAgICAgIHJldHVybiAwO1xuICAgIH1cblxuICAgIHJldHVybiBNYXRoLnBvdyhsLCBrKSAqIE1hdGguZXhwKC1sKSAvIGpTdGF0LmZhY3RvcmlhbChrKTtcbiAgfSxcblxuICBjZGY6IGZ1bmN0aW9uIGNkZih4LCBsKSB7XG4gICAgdmFyIHN1bWFyciA9IFtdLFxuICAgIGsgPSAwO1xuICAgIGlmICh4IDwgMCkgcmV0dXJuIDA7XG4gICAgZm9yICg7IGsgPD0geDsgaysrKSB7XG4gICAgICBzdW1hcnIucHVzaChqU3RhdC5wb2lzc29uLnBkZihrLCBsKSk7XG4gICAgfVxuICAgIHJldHVybiBqU3RhdC5zdW0oc3VtYXJyKTtcbiAgfSxcblxuICBtZWFuIDogZnVuY3Rpb24obCkge1xuICAgIHJldHVybiBsO1xuICB9LFxuXG4gIHZhcmlhbmNlIDogZnVuY3Rpb24obCkge1xuICAgIHJldHVybiBsO1xuICB9LFxuXG4gIHNhbXBsZVNtYWxsOiBmdW5jdGlvbiBzYW1wbGVTbWFsbChsKSB7XG4gICAgdmFyIHAgPSAxLCBrID0gMCwgTCA9IE1hdGguZXhwKC1sKTtcbiAgICBkbyB7XG4gICAgICBrKys7XG4gICAgICBwICo9IGpTdGF0Ll9yYW5kb21fZm4oKTtcbiAgICB9IHdoaWxlIChwID4gTCk7XG4gICAgcmV0dXJuIGsgLSAxO1xuICB9LFxuXG4gIHNhbXBsZUxhcmdlOiBmdW5jdGlvbiBzYW1wbGVMYXJnZShsKSB7XG4gICAgdmFyIGxhbSA9IGw7XG4gICAgdmFyIGs7XG4gICAgdmFyIFUsIFYsIHNsYW0sIGxvZ2xhbSwgYSwgYiwgaW52YWxwaGEsIHZyLCB1cztcblxuICAgIHNsYW0gPSBNYXRoLnNxcnQobGFtKTtcbiAgICBsb2dsYW0gPSBNYXRoLmxvZyhsYW0pO1xuICAgIGIgPSAwLjkzMSArIDIuNTMgKiBzbGFtO1xuICAgIGEgPSAtMC4wNTkgKyAwLjAyNDgzICogYjtcbiAgICBpbnZhbHBoYSA9IDEuMTIzOSArIDEuMTMyOCAvIChiIC0gMy40KTtcbiAgICB2ciA9IDAuOTI3NyAtIDMuNjIyNCAvIChiIC0gMik7XG5cbiAgICB3aGlsZSAoMSkge1xuICAgICAgVSA9IE1hdGgucmFuZG9tKCkgLSAwLjU7XG4gICAgICBWID0gTWF0aC5yYW5kb20oKTtcbiAgICAgIHVzID0gMC41IC0gTWF0aC5hYnMoVSk7XG4gICAgICBrID0gTWF0aC5mbG9vcigoMiAqIGEgLyB1cyArIGIpICogVSArIGxhbSArIDAuNDMpO1xuICAgICAgaWYgKCh1cyA+PSAwLjA3KSAmJiAoViA8PSB2cikpIHtcbiAgICAgICAgICByZXR1cm4gaztcbiAgICAgIH1cbiAgICAgIGlmICgoayA8IDApIHx8ICgodXMgPCAwLjAxMykgJiYgKFYgPiB1cykpKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICAvKiBsb2coVikgPT0gbG9nKDAuMCkgb2sgaGVyZSAqL1xuICAgICAgLyogaWYgVT09MC4wIHNvIHRoYXQgdXM9PTAuMCwgbG9nIGlzIG9rIHNpbmNlIGFsd2F5cyByZXR1cm5zICovXG4gICAgICBpZiAoKE1hdGgubG9nKFYpICsgTWF0aC5sb2coaW52YWxwaGEpIC0gTWF0aC5sb2coYSAvICh1cyAqIHVzKSArIGIpKSA8PSAoLWxhbSArIGsgKiBsb2dsYW0gLSBqU3RhdC5sb2dnYW0oayArIDEpKSkge1xuICAgICAgICAgIHJldHVybiBrO1xuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBzYW1wbGU6IGZ1bmN0aW9uIHNhbXBsZShsKSB7XG4gICAgaWYgKGwgPCAxMClcbiAgICAgIHJldHVybiB0aGlzLnNhbXBsZVNtYWxsKGwpO1xuICAgIGVsc2VcbiAgICAgIHJldHVybiB0aGlzLnNhbXBsZUxhcmdlKGwpO1xuICB9XG59KTtcblxuLy8gZXh0ZW5kIHRyaWFuZ3VsYXIgZnVuY3Rpb24gd2l0aCBzdGF0aWMgbWV0aG9kc1xualN0YXQuZXh0ZW5kKGpTdGF0LnRyaWFuZ3VsYXIsIHtcbiAgcGRmOiBmdW5jdGlvbiBwZGYoeCwgYSwgYiwgYykge1xuICAgIGlmIChiIDw9IGEgfHwgYyA8IGEgfHwgYyA+IGIpIHtcbiAgICAgIHJldHVybiBOYU47XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh4IDwgYSB8fCB4ID4gYikge1xuICAgICAgICByZXR1cm4gMDtcbiAgICAgIH0gZWxzZSBpZiAoeCA8IGMpIHtcbiAgICAgICAgICByZXR1cm4gKDIgKiAoeCAtIGEpKSAvICgoYiAtIGEpICogKGMgLSBhKSk7XG4gICAgICB9IGVsc2UgaWYgKHggPT09IGMpIHtcbiAgICAgICAgICByZXR1cm4gKDIgLyAoYiAtIGEpKTtcbiAgICAgIH0gZWxzZSB7IC8vIHggPiBjXG4gICAgICAgICAgcmV0dXJuICgyICogKGIgLSB4KSkgLyAoKGIgLSBhKSAqIChiIC0gYykpO1xuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBjZGY6IGZ1bmN0aW9uIGNkZih4LCBhLCBiLCBjKSB7XG4gICAgaWYgKGIgPD0gYSB8fCBjIDwgYSB8fCBjID4gYilcbiAgICAgIHJldHVybiBOYU47XG4gICAgaWYgKHggPD0gYSlcbiAgICAgIHJldHVybiAwO1xuICAgIGVsc2UgaWYgKHggPj0gYilcbiAgICAgIHJldHVybiAxO1xuICAgIGlmICh4IDw9IGMpXG4gICAgICByZXR1cm4gTWF0aC5wb3coeCAtIGEsIDIpIC8gKChiIC0gYSkgKiAoYyAtIGEpKTtcbiAgICBlbHNlIC8vIHggPiBjXG4gICAgICByZXR1cm4gMSAtIE1hdGgucG93KGIgLSB4LCAyKSAvICgoYiAtIGEpICogKGIgLSBjKSk7XG4gIH0sXG5cbiAgaW52OiBmdW5jdGlvbiBpbnYocCwgYSwgYiwgYykge1xuICAgIGlmIChiIDw9IGEgfHwgYyA8IGEgfHwgYyA+IGIpIHtcbiAgICAgIHJldHVybiBOYU47XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChwIDw9ICgoYyAtIGEpIC8gKGIgLSBhKSkpIHtcbiAgICAgICAgcmV0dXJuIGEgKyAoYiAtIGEpICogTWF0aC5zcXJ0KHAgKiAoKGMgLSBhKSAvIChiIC0gYSkpKTtcbiAgICAgIH0gZWxzZSB7IC8vIHAgPiAoKGMgLSBhKSAvIChiIC0gYSkpXG4gICAgICAgIHJldHVybiBhICsgKGIgLSBhKSAqICgxIC0gTWF0aC5zcXJ0KCgxIC0gcCkgKiAoMSAtICgoYyAtIGEpIC8gKGIgLSBhKSkpKSk7XG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIG1lYW46IGZ1bmN0aW9uIG1lYW4oYSwgYiwgYykge1xuICAgIHJldHVybiAoYSArIGIgKyBjKSAvIDM7XG4gIH0sXG5cbiAgbWVkaWFuOiBmdW5jdGlvbiBtZWRpYW4oYSwgYiwgYykge1xuICAgIGlmIChjIDw9IChhICsgYikgLyAyKSB7XG4gICAgICByZXR1cm4gYiAtIE1hdGguc3FydCgoYiAtIGEpICogKGIgLSBjKSkgLyBNYXRoLnNxcnQoMik7XG4gICAgfSBlbHNlIGlmIChjID4gKGEgKyBiKSAvIDIpIHtcbiAgICAgIHJldHVybiBhICsgTWF0aC5zcXJ0KChiIC0gYSkgKiAoYyAtIGEpKSAvIE1hdGguc3FydCgyKTtcbiAgICB9XG4gIH0sXG5cbiAgbW9kZTogZnVuY3Rpb24gbW9kZShhLCBiLCBjKSB7XG4gICAgcmV0dXJuIGM7XG4gIH0sXG5cbiAgc2FtcGxlOiBmdW5jdGlvbiBzYW1wbGUoYSwgYiwgYykge1xuICAgIHZhciB1ID0galN0YXQuX3JhbmRvbV9mbigpO1xuICAgIGlmICh1IDwgKChjIC0gYSkgLyAoYiAtIGEpKSlcbiAgICAgIHJldHVybiBhICsgTWF0aC5zcXJ0KHUgKiAoYiAtIGEpICogKGMgLSBhKSlcbiAgICByZXR1cm4gYiAtIE1hdGguc3FydCgoMSAtIHUpICogKGIgLSBhKSAqIChiIC0gYykpO1xuICB9LFxuXG4gIHZhcmlhbmNlOiBmdW5jdGlvbiB2YXJpYW5jZShhLCBiLCBjKSB7XG4gICAgcmV0dXJuIChhICogYSArIGIgKiBiICsgYyAqIGMgLSBhICogYiAtIGEgKiBjIC0gYiAqIGMpIC8gMTg7XG4gIH1cbn0pO1xuXG5cbi8vIGV4dGVuZCBhcmNzaW5lIGZ1bmN0aW9uIHdpdGggc3RhdGljIG1ldGhvZHNcbmpTdGF0LmV4dGVuZChqU3RhdC5hcmNzaW5lLCB7XG4gIHBkZjogZnVuY3Rpb24gcGRmKHgsIGEsIGIpIHtcbiAgICBpZiAoYiA8PSBhKSByZXR1cm4gTmFOO1xuXG4gICAgcmV0dXJuICh4IDw9IGEgfHwgeCA+PSBiKSA/IDAgOlxuICAgICAgKDIgLyBNYXRoLlBJKSAqXG4gICAgICAgIE1hdGgucG93KE1hdGgucG93KGIgLSBhLCAyKSAtXG4gICAgICAgICAgICAgICAgICBNYXRoLnBvdygyICogeCAtIGEgLSBiLCAyKSwgLTAuNSk7XG4gIH0sXG5cbiAgY2RmOiBmdW5jdGlvbiBjZGYoeCwgYSwgYikge1xuICAgIGlmICh4IDwgYSlcbiAgICAgIHJldHVybiAwO1xuICAgIGVsc2UgaWYgKHggPCBiKVxuICAgICAgcmV0dXJuICgyIC8gTWF0aC5QSSkgKiBNYXRoLmFzaW4oTWF0aC5zcXJ0KCh4IC0gYSkvKGIgLSBhKSkpO1xuICAgIHJldHVybiAxO1xuICB9LFxuXG4gIGludjogZnVuY3Rpb24ocCwgYSwgYikge1xuICAgIHJldHVybiBhICsgKDAuNSAtIDAuNSAqIE1hdGguY29zKE1hdGguUEkgKiBwKSkgKiAoYiAtIGEpO1xuICB9LFxuXG4gIG1lYW46IGZ1bmN0aW9uIG1lYW4oYSwgYikge1xuICAgIGlmIChiIDw9IGEpIHJldHVybiBOYU47XG4gICAgcmV0dXJuIChhICsgYikgLyAyO1xuICB9LFxuXG4gIG1lZGlhbjogZnVuY3Rpb24gbWVkaWFuKGEsIGIpIHtcbiAgICBpZiAoYiA8PSBhKSByZXR1cm4gTmFOO1xuICAgIHJldHVybiAoYSArIGIpIC8gMjtcbiAgfSxcblxuICBtb2RlOiBmdW5jdGlvbiBtb2RlKC8qYSwgYiovKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdtb2RlIGlzIG5vdCB5ZXQgaW1wbGVtZW50ZWQnKTtcbiAgfSxcblxuICBzYW1wbGU6IGZ1bmN0aW9uIHNhbXBsZShhLCBiKSB7XG4gICAgcmV0dXJuICgoYSArIGIpIC8gMikgKyAoKGIgLSBhKSAvIDIpICpcbiAgICAgIE1hdGguc2luKDIgKiBNYXRoLlBJICogalN0YXQudW5pZm9ybS5zYW1wbGUoMCwgMSkpO1xuICB9LFxuXG4gIHZhcmlhbmNlOiBmdW5jdGlvbiB2YXJpYW5jZShhLCBiKSB7XG4gICAgaWYgKGIgPD0gYSkgcmV0dXJuIE5hTjtcbiAgICByZXR1cm4gTWF0aC5wb3coYiAtIGEsIDIpIC8gODtcbiAgfVxufSk7XG5cblxuZnVuY3Rpb24gbGFwbGFjZVNpZ24oeCkgeyByZXR1cm4geCAvIE1hdGguYWJzKHgpOyB9XG5cbmpTdGF0LmV4dGVuZChqU3RhdC5sYXBsYWNlLCB7XG4gIHBkZjogZnVuY3Rpb24gcGRmKHgsIG11LCBiKSB7XG4gICAgcmV0dXJuIChiIDw9IDApID8gMCA6IChNYXRoLmV4cCgtTWF0aC5hYnMoeCAtIG11KSAvIGIpKSAvICgyICogYik7XG4gIH0sXG5cbiAgY2RmOiBmdW5jdGlvbiBjZGYoeCwgbXUsIGIpIHtcbiAgICBpZiAoYiA8PSAwKSB7IHJldHVybiAwOyB9XG5cbiAgICBpZih4IDwgbXUpIHtcbiAgICAgIHJldHVybiAwLjUgKiBNYXRoLmV4cCgoeCAtIG11KSAvIGIpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gMSAtIDAuNSAqIE1hdGguZXhwKC0gKHggLSBtdSkgLyBiKTtcbiAgICB9XG4gIH0sXG5cbiAgbWVhbjogZnVuY3Rpb24obXUvKiwgYiovKSB7XG4gICAgcmV0dXJuIG11O1xuICB9LFxuXG4gIG1lZGlhbjogZnVuY3Rpb24obXUvKiwgYiovKSB7XG4gICAgcmV0dXJuIG11O1xuICB9LFxuXG4gIG1vZGU6IGZ1bmN0aW9uKG11LyosIGIqLykge1xuICAgIHJldHVybiBtdTtcbiAgfSxcblxuICB2YXJpYW5jZTogZnVuY3Rpb24obXUsIGIpIHtcbiAgICByZXR1cm4gMiAqIGIgKiBiO1xuICB9LFxuXG4gIHNhbXBsZTogZnVuY3Rpb24gc2FtcGxlKG11LCBiKSB7XG4gICAgdmFyIHUgPSBqU3RhdC5fcmFuZG9tX2ZuKCkgLSAwLjU7XG5cbiAgICByZXR1cm4gbXUgLSAoYiAqIGxhcGxhY2VTaWduKHUpICogTWF0aC5sb2coMSAtICgyICogTWF0aC5hYnModSkpKSk7XG4gIH1cbn0pO1xuXG5mdW5jdGlvbiB0dWtleVdwcm9iKHcsIHJyLCBjYykge1xuICB2YXIgbmxlZyA9IDEyO1xuICB2YXIgaWhhbGYgPSA2O1xuXG4gIHZhciBDMSA9IC0zMDtcbiAgdmFyIEMyID0gLTUwO1xuICB2YXIgQzMgPSA2MDtcbiAgdmFyIGJiICAgPSA4O1xuICB2YXIgd2xhciA9IDM7XG4gIHZhciB3aW5jcjEgPSAyO1xuICB2YXIgd2luY3IyID0gMztcbiAgdmFyIHhsZWcgPSBbXG4gICAgMC45ODE1NjA2MzQyNDY3MTkyNTA2OTA1NDkwOTAxNDksXG4gICAgMC45MDQxMTcyNTYzNzA0NzQ4NTY2Nzg0NjU4NjYxMTksXG4gICAgMC43Njk5MDI2NzQxOTQzMDQ2ODcwMzY4OTM4MzMyMTMsXG4gICAgMC41ODczMTc5NTQyODY2MTc0NDcyOTY3MDI0MTg5NDEsXG4gICAgMC4zNjc4MzE0OTg5OTgxODAxOTM3NTI2OTE1MzY2NDQsXG4gICAgMC4xMjUyMzM0MDg1MTE0Njg5MTU0NzI0NDEzNjk0NjRcbiAgXTtcbiAgdmFyIGFsZWcgPSBbXG4gICAgMC4wNDcxNzUzMzYzODY1MTE4MjcxOTQ2MTU5NjE0ODUsXG4gICAgMC4xMDY5MzkzMjU5OTUzMTg0MzA5NjAyNTQ3MTgxOTQsXG4gICAgMC4xNjAwNzgzMjg1NDMzNDYyMjYzMzQ2NTI1Mjk1NDMsXG4gICAgMC4yMDMxNjc0MjY3MjMwNjU5MjE3NDkwNjQ0NTU4MTAsXG4gICAgMC4yMzM0OTI1MzY1MzgzNTQ4MDg3NjA4NDk4OTg5MjUsXG4gICAgMC4yNDkxNDcwNDU4MTM0MDI3ODUwMDA1NjI0MzYwNDNcbiAgXTtcblxuICB2YXIgcXNxeiA9IHcgKiAwLjU7XG5cbiAgLy8gaWYgdyA+PSAxNiB0aGVuIHRoZSBpbnRlZ3JhbCBsb3dlciBib3VuZCAob2NjdXJzIGZvciBjPTIwKVxuICAvLyBpcyAwLjk5OTk5OTk5OTk5OTk1IHNvIHJldHVybiBhIHZhbHVlIG9mIDEuXG5cbiAgaWYgKHFzcXogPj0gYmIpXG4gICAgcmV0dXJuIDEuMDtcblxuICAvLyBmaW5kIChmKHcvMikgLSAxKSBeIGNjXG4gIC8vIChmaXJzdCB0ZXJtIGluIGludGVncmFsIG9mIGhhcnRsZXkncyBmb3JtKS5cblxuICB2YXIgcHJfdyA9IDIgKiBqU3RhdC5ub3JtYWwuY2RmKHFzcXosIDAsIDEsIDEsIDApIC0gMTsgLy8gZXJmKHFzcXogLyBNX1NRUlQyKVxuICAvLyBpZiBwcl93IF4gY2MgPCAyZS0yMiB0aGVuIHNldCBwcl93ID0gMFxuICBpZiAocHJfdyA+PSBNYXRoLmV4cChDMiAvIGNjKSlcbiAgICBwcl93ID0gTWF0aC5wb3cocHJfdywgY2MpO1xuICBlbHNlXG4gICAgcHJfdyA9IDAuMDtcblxuICAvLyBpZiB3IGlzIGxhcmdlIHRoZW4gdGhlIHNlY29uZCBjb21wb25lbnQgb2YgdGhlXG4gIC8vIGludGVncmFsIGlzIHNtYWxsLCBzbyBmZXdlciBpbnRlcnZhbHMgYXJlIG5lZWRlZC5cblxuICB2YXIgd2luY3I7XG4gIGlmICh3ID4gd2xhcilcbiAgICB3aW5jciA9IHdpbmNyMTtcbiAgZWxzZVxuICAgIHdpbmNyID0gd2luY3IyO1xuXG4gIC8vIGZpbmQgdGhlIGludGVncmFsIG9mIHNlY29uZCB0ZXJtIG9mIGhhcnRsZXkncyBmb3JtXG4gIC8vIGZvciB0aGUgaW50ZWdyYWwgb2YgdGhlIHJhbmdlIGZvciBlcXVhbC1sZW5ndGhcbiAgLy8gaW50ZXJ2YWxzIHVzaW5nIGxlZ2VuZHJlIHF1YWRyYXR1cmUuICBsaW1pdHMgb2ZcbiAgLy8gaW50ZWdyYXRpb24gYXJlIGZyb20gKHcvMiwgOCkuICB0d28gb3IgdGhyZWVcbiAgLy8gZXF1YWwtbGVuZ3RoIGludGVydmFscyBhcmUgdXNlZC5cblxuICAvLyBibGIgYW5kIGJ1YiBhcmUgbG93ZXIgYW5kIHVwcGVyIGxpbWl0cyBvZiBpbnRlZ3JhdGlvbi5cblxuICB2YXIgYmxiID0gcXNxejtcbiAgdmFyIGJpbmMgPSAoYmIgLSBxc3F6KSAvIHdpbmNyO1xuICB2YXIgYnViID0gYmxiICsgYmluYztcbiAgdmFyIGVpbnN1bSA9IDAuMDtcblxuICAvLyBpbnRlZ3JhdGUgb3ZlciBlYWNoIGludGVydmFsXG5cbiAgdmFyIGNjMSA9IGNjIC0gMS4wO1xuICBmb3IgKHZhciB3aSA9IDE7IHdpIDw9IHdpbmNyOyB3aSsrKSB7XG4gICAgdmFyIGVsc3VtID0gMC4wO1xuICAgIHZhciBhID0gMC41ICogKGJ1YiArIGJsYik7XG5cbiAgICAvLyBsZWdlbmRyZSBxdWFkcmF0dXJlIHdpdGggb3JkZXIgPSBubGVnXG5cbiAgICB2YXIgYiA9IDAuNSAqIChidWIgLSBibGIpO1xuXG4gICAgZm9yICh2YXIgamogPSAxOyBqaiA8PSBubGVnOyBqaisrKSB7XG4gICAgICB2YXIgaiwgeHg7XG4gICAgICBpZiAoaWhhbGYgPCBqaikge1xuICAgICAgICBqID0gKG5sZWcgLSBqaikgKyAxO1xuICAgICAgICB4eCA9IHhsZWdbai0xXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGogPSBqajtcbiAgICAgICAgeHggPSAteGxlZ1tqLTFdO1xuICAgICAgfVxuICAgICAgdmFyIGMgPSBiICogeHg7XG4gICAgICB2YXIgYWMgPSBhICsgYztcblxuICAgICAgLy8gaWYgZXhwKC1xZXhwby8yKSA8IDllLTE0LFxuICAgICAgLy8gdGhlbiBkb2Vzbid0IGNvbnRyaWJ1dGUgdG8gaW50ZWdyYWxcblxuICAgICAgdmFyIHFleHBvID0gYWMgKiBhYztcbiAgICAgIGlmIChxZXhwbyA+IEMzKVxuICAgICAgICBicmVhaztcblxuICAgICAgdmFyIHBwbHVzID0gMiAqIGpTdGF0Lm5vcm1hbC5jZGYoYWMsIDAsIDEsIDEsIDApO1xuICAgICAgdmFyIHBtaW51cz0gMiAqIGpTdGF0Lm5vcm1hbC5jZGYoYWMsIHcsIDEsIDEsIDApO1xuXG4gICAgICAvLyBpZiByaW5zdW0gXiAoY2MtMSkgPCA5ZS0xNCxcbiAgICAgIC8vIHRoZW4gZG9lc24ndCBjb250cmlidXRlIHRvIGludGVncmFsXG5cbiAgICAgIHZhciByaW5zdW0gPSAocHBsdXMgKiAwLjUpIC0gKHBtaW51cyAqIDAuNSk7XG4gICAgICBpZiAocmluc3VtID49IE1hdGguZXhwKEMxIC8gY2MxKSkge1xuICAgICAgICByaW5zdW0gPSAoYWxlZ1tqLTFdICogTWF0aC5leHAoLSgwLjUgKiBxZXhwbykpKSAqIE1hdGgucG93KHJpbnN1bSwgY2MxKTtcbiAgICAgICAgZWxzdW0gKz0gcmluc3VtO1xuICAgICAgfVxuICAgIH1cbiAgICBlbHN1bSAqPSAoKCgyLjAgKiBiKSAqIGNjKSAvIE1hdGguc3FydCgyICogTWF0aC5QSSkpO1xuICAgIGVpbnN1bSArPSBlbHN1bTtcbiAgICBibGIgPSBidWI7XG4gICAgYnViICs9IGJpbmM7XG4gIH1cblxuICAvLyBpZiBwcl93IF4gcnIgPCA5ZS0xNCwgdGhlbiByZXR1cm4gMFxuICBwcl93ICs9IGVpbnN1bTtcbiAgaWYgKHByX3cgPD0gTWF0aC5leHAoQzEgLyBycikpXG4gICAgcmV0dXJuIDA7XG5cbiAgcHJfdyA9IE1hdGgucG93KHByX3csIHJyKTtcbiAgaWYgKHByX3cgPj0gMSkgLy8gMSB3YXMgaU1heCB3YXMgZXBzXG4gICAgcmV0dXJuIDE7XG4gIHJldHVybiBwcl93O1xufVxuXG5mdW5jdGlvbiB0dWtleVFpbnYocCwgYywgdikge1xuICB2YXIgcDAgPSAwLjMyMjIzMjQyMTA4ODtcbiAgdmFyIHEwID0gMC45OTM0ODQ2MjYwNjBlLTAxO1xuICB2YXIgcDEgPSAtMS4wO1xuICB2YXIgcTEgPSAwLjU4ODU4MTU3MDQ5NTtcbiAgdmFyIHAyID0gLTAuMzQyMjQyMDg4NTQ3O1xuICB2YXIgcTIgPSAwLjUzMTEwMzQ2MjM2NjtcbiAgdmFyIHAzID0gLTAuMjA0MjMxMjEwMTI1O1xuICB2YXIgcTMgPSAwLjEwMzUzNzc1Mjg1MDtcbiAgdmFyIHA0ID0gLTAuNDUzNjQyMjEwMTQ4ZS0wNDtcbiAgdmFyIHE0ID0gMC4zODU2MDcwMDYzNGUtMDI7XG4gIHZhciBjMSA9IDAuODgzMjtcbiAgdmFyIGMyID0gMC4yMzY4O1xuICB2YXIgYzMgPSAxLjIxNDtcbiAgdmFyIGM0ID0gMS4yMDg7XG4gIHZhciBjNSA9IDEuNDE0MjtcbiAgdmFyIHZtYXggPSAxMjAuMDtcblxuICB2YXIgcHMgPSAwLjUgLSAwLjUgKiBwO1xuICB2YXIgeWkgPSBNYXRoLnNxcnQoTWF0aC5sb2coMS4wIC8gKHBzICogcHMpKSk7XG4gIHZhciB0ID0geWkgKyAoKCgoIHlpICogcDQgKyBwMykgKiB5aSArIHAyKSAqIHlpICsgcDEpICogeWkgKyBwMClcbiAgICAgLyAoKCgoIHlpICogcTQgKyBxMykgKiB5aSArIHEyKSAqIHlpICsgcTEpICogeWkgKyBxMCk7XG4gIGlmICh2IDwgdm1heCkgdCArPSAodCAqIHQgKiB0ICsgdCkgLyB2IC8gNC4wO1xuICB2YXIgcSA9IGMxIC0gYzIgKiB0O1xuICBpZiAodiA8IHZtYXgpIHEgKz0gLWMzIC8gdiArIGM0ICogdCAvIHY7XG4gIHJldHVybiB0ICogKHEgKiBNYXRoLmxvZyhjIC0gMS4wKSArIGM1KTtcbn1cblxualN0YXQuZXh0ZW5kKGpTdGF0LnR1a2V5LCB7XG4gIGNkZjogZnVuY3Rpb24gY2RmKHEsIG5tZWFucywgZGYpIHtcbiAgICAvLyBJZGVudGljYWwgaW1wbGVtZW50YXRpb24gYXMgdGhlIFIgcHR1a2V5KCkgZnVuY3Rpb24gYXMgb2YgY29tbWl0IDY4OTQ3XG4gICAgdmFyIHJyID0gMTtcbiAgICB2YXIgY2MgPSBubWVhbnM7XG5cbiAgICB2YXIgbmxlZ3EgPSAxNjtcbiAgICB2YXIgaWhhbGZxID0gODtcblxuICAgIHZhciBlcHMxID0gLTMwLjA7XG4gICAgdmFyIGVwczIgPSAxLjBlLTE0O1xuICAgIHZhciBkaGFmICA9IDEwMC4wO1xuICAgIHZhciBkcXVhciA9IDgwMC4wO1xuICAgIHZhciBkZWlnaCA9IDUwMDAuMDtcbiAgICB2YXIgZGxhcmcgPSAyNTAwMC4wO1xuICAgIHZhciB1bGVuMSA9IDEuMDtcbiAgICB2YXIgdWxlbjIgPSAwLjU7XG4gICAgdmFyIHVsZW4zID0gMC4yNTtcbiAgICB2YXIgdWxlbjQgPSAwLjEyNTtcbiAgICB2YXIgeGxlZ3EgPSBbXG4gICAgICAwLjk4OTQwMDkzNDk5MTY0OTkzMjU5NjE1NDE3MzQ1MCxcbiAgICAgIDAuOTQ0NTc1MDIzMDczMjMyNTc2MDc3OTg4NDE1NTM1LFxuICAgICAgMC44NjU2MzEyMDIzODc4MzE3NDM4ODA0Njc4OTc3MTIsXG4gICAgICAwLjc1NTQwNDQwODM1NTAwMzAzMzg5NTEwMTE5NDg0NyxcbiAgICAgIDAuNjE3ODc2MjQ0NDAyNjQzNzQ4NDQ2NjcxNzY0MDQ5LFxuICAgICAgMC40NTgwMTY3Nzc2NTcyMjczODYzNDI0MTk0NDI5ODQsXG4gICAgICAwLjI4MTYwMzU1MDc3OTI1ODkxMzIzMDQ2MDUwMTQ2MCxcbiAgICAgIDAuOTUwMTI1MDk4Mzc2Mzc0NDAxODUzMTkzMzU0MjUwZS0xXG4gICAgXTtcbiAgICB2YXIgYWxlZ3EgPSBbXG4gICAgICAwLjI3MTUyNDU5NDExNzU0MDk0ODUxNzgwNTcyNDU2MGUtMSxcbiAgICAgIDAuNjIyNTM1MjM5Mzg2NDc4OTI4NjI4NDM4MzY5OTQ0ZS0xLFxuICAgICAgMC45NTE1ODUxMTY4MjQ5Mjc4NDgwOTkyNTEwNzYwMjJlLTEsXG4gICAgICAwLjEyNDYyODk3MTI1NTUzMzg3MjA1MjQ3NjI4MjE5MixcbiAgICAgIDAuMTQ5NTk1OTg4ODE2NTc2NzMyMDgxNTAxNzMwNTQ3LFxuICAgICAgMC4xNjkxNTY1MTkzOTUwMDI1MzgxODkzMTIwNzkwMzAsXG4gICAgICAwLjE4MjYwMzQxNTA0NDkyMzU4ODg2Njc2MzY2Nzk2OSxcbiAgICAgIDAuMTg5NDUwNjEwNDU1MDY4NDk2Mjg1Mzk2NzIzMjA4XG4gICAgXTtcblxuICAgIGlmIChxIDw9IDApXG4gICAgICByZXR1cm4gMDtcblxuICAgIC8vIGRmIG11c3QgYmUgPiAxXG4gICAgLy8gdGhlcmUgbXVzdCBiZSBhdCBsZWFzdCB0d28gdmFsdWVzXG5cbiAgICBpZiAoZGYgPCAyIHx8IHJyIDwgMSB8fCBjYyA8IDIpIHJldHVybiBOYU47XG5cbiAgICBpZiAoIU51bWJlci5pc0Zpbml0ZShxKSlcbiAgICAgIHJldHVybiAxO1xuXG4gICAgaWYgKGRmID4gZGxhcmcpXG4gICAgICByZXR1cm4gdHVrZXlXcHJvYihxLCByciwgY2MpO1xuXG4gICAgLy8gY2FsY3VsYXRlIGxlYWRpbmcgY29uc3RhbnRcblxuICAgIHZhciBmMiA9IGRmICogMC41O1xuICAgIHZhciBmMmxmID0gKChmMiAqIE1hdGgubG9nKGRmKSkgLSAoZGYgKiBNYXRoLmxvZygyKSkpIC0galN0YXQuZ2FtbWFsbihmMik7XG4gICAgdmFyIGYyMSA9IGYyIC0gMS4wO1xuXG4gICAgLy8gaW50ZWdyYWwgaXMgZGl2aWRlZCBpbnRvIHVuaXQsIGhhbGYtdW5pdCwgcXVhcnRlci11bml0LCBvclxuICAgIC8vIGVpZ2h0aC11bml0IGxlbmd0aCBpbnRlcnZhbHMgZGVwZW5kaW5nIG9uIHRoZSB2YWx1ZSBvZiB0aGVcbiAgICAvLyBkZWdyZWVzIG9mIGZyZWVkb20uXG5cbiAgICB2YXIgZmY0ID0gZGYgKiAwLjI1O1xuICAgIHZhciB1bGVuO1xuICAgIGlmICAgICAgKGRmIDw9IGRoYWYpICB1bGVuID0gdWxlbjE7XG4gICAgZWxzZSBpZiAoZGYgPD0gZHF1YXIpIHVsZW4gPSB1bGVuMjtcbiAgICBlbHNlIGlmIChkZiA8PSBkZWlnaCkgdWxlbiA9IHVsZW4zO1xuICAgIGVsc2UgICAgICAgICAgICAgICAgICB1bGVuID0gdWxlbjQ7XG5cbiAgICBmMmxmICs9IE1hdGgubG9nKHVsZW4pO1xuXG4gICAgLy8gaW50ZWdyYXRlIG92ZXIgZWFjaCBzdWJpbnRlcnZhbFxuXG4gICAgdmFyIGFucyA9IDAuMDtcblxuICAgIGZvciAodmFyIGkgPSAxOyBpIDw9IDUwOyBpKyspIHtcbiAgICAgIHZhciBvdHN1bSA9IDAuMDtcblxuICAgICAgLy8gbGVnZW5kcmUgcXVhZHJhdHVyZSB3aXRoIG9yZGVyID0gbmxlZ3FcbiAgICAgIC8vIG5vZGVzIChzdG9yZWQgaW4geGxlZ3EpIGFyZSBzeW1tZXRyaWMgYXJvdW5kIHplcm8uXG5cbiAgICAgIHZhciB0d2ExID0gKDIgKiBpIC0gMSkgKiB1bGVuO1xuXG4gICAgICBmb3IgKHZhciBqaiA9IDE7IGpqIDw9IG5sZWdxOyBqaisrKSB7XG4gICAgICAgIHZhciBqLCB0MTtcbiAgICAgICAgaWYgKGloYWxmcSA8IGpqKSB7XG4gICAgICAgICAgaiA9IGpqIC0gaWhhbGZxIC0gMTtcbiAgICAgICAgICB0MSA9IChmMmxmICsgKGYyMSAqIE1hdGgubG9nKHR3YTEgKyAoeGxlZ3Fbal0gKiB1bGVuKSkpKVxuICAgICAgICAgICAgICAtICgoKHhsZWdxW2pdICogdWxlbikgKyB0d2ExKSAqIGZmNCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaiA9IGpqIC0gMTtcbiAgICAgICAgICB0MSA9IChmMmxmICsgKGYyMSAqIE1hdGgubG9nKHR3YTEgLSAoeGxlZ3Fbal0gKiB1bGVuKSkpKVxuICAgICAgICAgICAgICArICgoKHhsZWdxW2pdICogdWxlbikgLSB0d2ExKSAqIGZmNCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBpZiBleHAodDEpIDwgOWUtMTQsIHRoZW4gZG9lc24ndCBjb250cmlidXRlIHRvIGludGVncmFsXG4gICAgICAgIHZhciBxc3F6O1xuICAgICAgICBpZiAodDEgPj0gZXBzMSkge1xuICAgICAgICAgIGlmIChpaGFsZnEgPCBqaikge1xuICAgICAgICAgICAgcXNxeiA9IHEgKiBNYXRoLnNxcnQoKCh4bGVncVtqXSAqIHVsZW4pICsgdHdhMSkgKiAwLjUpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBxc3F6ID0gcSAqIE1hdGguc3FydCgoKC0oeGxlZ3Fbal0gKiB1bGVuKSkgKyB0d2ExKSAqIDAuNSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gY2FsbCB3cHJvYiB0byBmaW5kIGludGVncmFsIG9mIHJhbmdlIHBvcnRpb25cblxuICAgICAgICAgIHZhciB3cHJiID0gdHVrZXlXcHJvYihxc3F6LCByciwgY2MpO1xuICAgICAgICAgIHZhciByb3RzdW0gPSAod3ByYiAqIGFsZWdxW2pdKSAqIE1hdGguZXhwKHQxKTtcbiAgICAgICAgICBvdHN1bSArPSByb3RzdW07XG4gICAgICAgIH1cbiAgICAgICAgLy8gZW5kIGxlZ2VuZHJlIGludGVncmFsIGZvciBpbnRlcnZhbCBpXG4gICAgICAgIC8vIEwyMDA6XG4gICAgICB9XG5cbiAgICAgIC8vIGlmIGludGVncmFsIGZvciBpbnRlcnZhbCBpIDwgMWUtMTQsIHRoZW4gc3RvcC5cbiAgICAgIC8vIEhvd2V2ZXIsIGluIG9yZGVyIHRvIGF2b2lkIHNtYWxsIGFyZWEgdW5kZXIgbGVmdCB0YWlsLFxuICAgICAgLy8gYXQgbGVhc3QgIDEgLyB1bGVuICBpbnRlcnZhbHMgYXJlIGNhbGN1bGF0ZWQuXG4gICAgICBpZiAoaSAqIHVsZW4gPj0gMS4wICYmIG90c3VtIDw9IGVwczIpXG4gICAgICAgIGJyZWFrO1xuXG4gICAgICAvLyBlbmQgb2YgaW50ZXJ2YWwgaVxuICAgICAgLy8gTDMzMDpcblxuICAgICAgYW5zICs9IG90c3VtO1xuICAgIH1cblxuICAgIGlmIChvdHN1bSA+IGVwczIpIHsgLy8gbm90IGNvbnZlcmdlZFxuICAgICAgdGhyb3cgbmV3IEVycm9yKCd0dWtleS5jZGYgZmFpbGVkIHRvIGNvbnZlcmdlJyk7XG4gICAgfVxuICAgIGlmIChhbnMgPiAxKVxuICAgICAgYW5zID0gMTtcbiAgICByZXR1cm4gYW5zO1xuICB9LFxuXG4gIGludjogZnVuY3Rpb24ocCwgbm1lYW5zLCBkZikge1xuICAgIC8vIElkZW50aWNhbCBpbXBsZW1lbnRhdGlvbiBhcyB0aGUgUiBxdHVrZXkoKSBmdW5jdGlvbiBhcyBvZiBjb21taXQgNjg5NDdcbiAgICB2YXIgcnIgPSAxO1xuICAgIHZhciBjYyA9IG5tZWFucztcblxuICAgIHZhciBlcHMgPSAwLjAwMDE7XG4gICAgdmFyIG1heGl0ZXIgPSA1MDtcblxuICAgIC8vIGRmIG11c3QgYmUgPiAxIDsgdGhlcmUgbXVzdCBiZSBhdCBsZWFzdCB0d28gdmFsdWVzXG4gICAgaWYgKGRmIDwgMiB8fCByciA8IDEgfHwgY2MgPCAyKSByZXR1cm4gTmFOO1xuXG4gICAgaWYgKHAgPCAwIHx8IHAgPiAxKSByZXR1cm4gTmFOO1xuICAgIGlmIChwID09PSAwKSByZXR1cm4gMDtcbiAgICBpZiAocCA9PT0gMSkgcmV0dXJuIEluZmluaXR5O1xuXG4gICAgLy8gSW5pdGlhbCB2YWx1ZVxuXG4gICAgdmFyIHgwID0gdHVrZXlRaW52KHAsIGNjLCBkZik7XG5cbiAgICAvLyBGaW5kIHByb2IodmFsdWUgPCB4MClcblxuICAgIHZhciB2YWx4MCA9IGpTdGF0LnR1a2V5LmNkZih4MCwgbm1lYW5zLCBkZikgLSBwO1xuXG4gICAgLy8gRmluZCB0aGUgc2Vjb25kIGl0ZXJhdGUgYW5kIHByb2IodmFsdWUgPCB4MSkuXG4gICAgLy8gSWYgdGhlIGZpcnN0IGl0ZXJhdGUgaGFzIHByb2JhYmlsaXR5IHZhbHVlXG4gICAgLy8gZXhjZWVkaW5nIHAgdGhlbiBzZWNvbmQgaXRlcmF0ZSBpcyAxIGxlc3MgdGhhblxuICAgIC8vIGZpcnN0IGl0ZXJhdGU7IG90aGVyd2lzZSBpdCBpcyAxIGdyZWF0ZXIuXG5cbiAgICB2YXIgeDE7XG4gICAgaWYgKHZhbHgwID4gMC4wKVxuICAgICAgeDEgPSBNYXRoLm1heCgwLjAsIHgwIC0gMS4wKTtcbiAgICBlbHNlXG4gICAgICB4MSA9IHgwICsgMS4wO1xuICAgIHZhciB2YWx4MSA9IGpTdGF0LnR1a2V5LmNkZih4MSwgbm1lYW5zLCBkZikgLSBwO1xuXG4gICAgLy8gRmluZCBuZXcgaXRlcmF0ZVxuXG4gICAgdmFyIGFucztcbiAgICBmb3IodmFyIGl0ZXIgPSAxOyBpdGVyIDwgbWF4aXRlcjsgaXRlcisrKSB7XG4gICAgICBhbnMgPSB4MSAtICgodmFseDEgKiAoeDEgLSB4MCkpIC8gKHZhbHgxIC0gdmFseDApKTtcbiAgICAgIHZhbHgwID0gdmFseDE7XG5cbiAgICAgIC8vIE5ldyBpdGVyYXRlIG11c3QgYmUgPj0gMFxuXG4gICAgICB4MCA9IHgxO1xuICAgICAgaWYgKGFucyA8IDAuMCkge1xuICAgICAgICBhbnMgPSAwLjA7XG4gICAgICAgIHZhbHgxID0gLXA7XG4gICAgICB9XG4gICAgICAvLyBGaW5kIHByb2IodmFsdWUgPCBuZXcgaXRlcmF0ZSlcblxuICAgICAgdmFseDEgPSBqU3RhdC50dWtleS5jZGYoYW5zLCBubWVhbnMsIGRmKSAtIHA7XG4gICAgICB4MSA9IGFucztcblxuICAgICAgLy8gSWYgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0d28gc3VjY2Vzc2l2ZVxuICAgICAgLy8gaXRlcmF0ZXMgaXMgbGVzcyB0aGFuIGVwcywgc3RvcFxuXG4gICAgICB2YXIgeGFicyA9IE1hdGguYWJzKHgxIC0geDApO1xuICAgICAgaWYgKHhhYnMgPCBlcHMpXG4gICAgICAgIHJldHVybiBhbnM7XG4gICAgfVxuXG4gICAgdGhyb3cgbmV3IEVycm9yKCd0dWtleS5pbnYgZmFpbGVkIHRvIGNvbnZlcmdlJyk7XG4gIH1cbn0pO1xuXG59KGpTdGF0LCBNYXRoKSk7XG4vKiBQcm92aWRlcyBmdW5jdGlvbnMgZm9yIHRoZSBzb2x1dGlvbiBvZiBsaW5lYXIgc3lzdGVtIG9mIGVxdWF0aW9ucywgaW50ZWdyYXRpb24sIGV4dHJhcG9sYXRpb24sXG4gKiBpbnRlcnBvbGF0aW9uLCBlaWdlbnZhbHVlIHByb2JsZW1zLCBkaWZmZXJlbnRpYWwgZXF1YXRpb25zIGFuZCBQQ0EgYW5hbHlzaXMuICovXG5cbihmdW5jdGlvbihqU3RhdCwgTWF0aCkge1xuXG52YXIgcHVzaCA9IEFycmF5LnByb3RvdHlwZS5wdXNoO1xudmFyIGlzQXJyYXkgPSBqU3RhdC51dGlscy5pc0FycmF5O1xuXG5mdW5jdGlvbiBpc1VzYWJsZShhcmcpIHtcbiAgcmV0dXJuIGlzQXJyYXkoYXJnKSB8fCBhcmcgaW5zdGFuY2VvZiBqU3RhdDtcbn1cblxualN0YXQuZXh0ZW5kKHtcblxuICAvLyBhZGQgYSB2ZWN0b3IvbWF0cml4IHRvIGEgdmVjdG9yL21hdHJpeCBvciBzY2FsYXJcbiAgYWRkOiBmdW5jdGlvbiBhZGQoYXJyLCBhcmcpIHtcbiAgICAvLyBjaGVjayBpZiBhcmcgaXMgYSB2ZWN0b3Igb3Igc2NhbGFyXG4gICAgaWYgKGlzVXNhYmxlKGFyZykpIHtcbiAgICAgIGlmICghaXNVc2FibGUoYXJnWzBdKSkgYXJnID0gWyBhcmcgXTtcbiAgICAgIHJldHVybiBqU3RhdC5tYXAoYXJyLCBmdW5jdGlvbih2YWx1ZSwgcm93LCBjb2wpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlICsgYXJnW3Jvd11bY29sXTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4galN0YXQubWFwKGFyciwgZnVuY3Rpb24odmFsdWUpIHsgcmV0dXJuIHZhbHVlICsgYXJnOyB9KTtcbiAgfSxcblxuICAvLyBzdWJ0cmFjdCBhIHZlY3RvciBvciBzY2FsYXIgZnJvbSB0aGUgdmVjdG9yXG4gIHN1YnRyYWN0OiBmdW5jdGlvbiBzdWJ0cmFjdChhcnIsIGFyZykge1xuICAgIC8vIGNoZWNrIGlmIGFyZyBpcyBhIHZlY3RvciBvciBzY2FsYXJcbiAgICBpZiAoaXNVc2FibGUoYXJnKSkge1xuICAgICAgaWYgKCFpc1VzYWJsZShhcmdbMF0pKSBhcmcgPSBbIGFyZyBdO1xuICAgICAgcmV0dXJuIGpTdGF0Lm1hcChhcnIsIGZ1bmN0aW9uKHZhbHVlLCByb3csIGNvbCkge1xuICAgICAgICByZXR1cm4gdmFsdWUgLSBhcmdbcm93XVtjb2xdIHx8IDA7XG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGpTdGF0Lm1hcChhcnIsIGZ1bmN0aW9uKHZhbHVlKSB7IHJldHVybiB2YWx1ZSAtIGFyZzsgfSk7XG4gIH0sXG5cbiAgLy8gbWF0cml4IGRpdmlzaW9uXG4gIGRpdmlkZTogZnVuY3Rpb24gZGl2aWRlKGFyciwgYXJnKSB7XG4gICAgaWYgKGlzVXNhYmxlKGFyZykpIHtcbiAgICAgIGlmICghaXNVc2FibGUoYXJnWzBdKSkgYXJnID0gWyBhcmcgXTtcbiAgICAgIHJldHVybiBqU3RhdC5tdWx0aXBseShhcnIsIGpTdGF0LmludihhcmcpKTtcbiAgICB9XG4gICAgcmV0dXJuIGpTdGF0Lm1hcChhcnIsIGZ1bmN0aW9uKHZhbHVlKSB7IHJldHVybiB2YWx1ZSAvIGFyZzsgfSk7XG4gIH0sXG5cbiAgLy8gbWF0cml4IG11bHRpcGxpY2F0aW9uXG4gIG11bHRpcGx5OiBmdW5jdGlvbiBtdWx0aXBseShhcnIsIGFyZykge1xuICAgIHZhciByb3csIGNvbCwgbnJlc2NvbHMsIHN1bSwgbnJvdywgbmNvbCwgcmVzLCByZXNjb2xzO1xuICAgIC8vIGVnOiBhcnIgPSAyIGFyZyA9IDMgLT4gNiBmb3IgcmVzWzBdWzBdIHN0YXRlbWVudCBjbG9zdXJlXG4gICAgaWYgKGFyci5sZW5ndGggPT09IHVuZGVmaW5lZCAmJiBhcmcubGVuZ3RoID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBhcnIgKiBhcmc7XG4gICAgfVxuICAgIG5yb3cgPSBhcnIubGVuZ3RoLFxuICAgIG5jb2wgPSBhcnJbMF0ubGVuZ3RoLFxuICAgIHJlcyA9IGpTdGF0Lnplcm9zKG5yb3csIG5yZXNjb2xzID0gKGlzVXNhYmxlKGFyZykpID8gYXJnWzBdLmxlbmd0aCA6IG5jb2wpLFxuICAgIHJlc2NvbHMgPSAwO1xuICAgIGlmIChpc1VzYWJsZShhcmcpKSB7XG4gICAgICBmb3IgKDsgcmVzY29scyA8IG5yZXNjb2xzOyByZXNjb2xzKyspIHtcbiAgICAgICAgZm9yIChyb3cgPSAwOyByb3cgPCBucm93OyByb3crKykge1xuICAgICAgICAgIHN1bSA9IDA7XG4gICAgICAgICAgZm9yIChjb2wgPSAwOyBjb2wgPCBuY29sOyBjb2wrKylcbiAgICAgICAgICBzdW0gKz0gYXJyW3Jvd11bY29sXSAqIGFyZ1tjb2xdW3Jlc2NvbHNdO1xuICAgICAgICAgIHJlc1tyb3ddW3Jlc2NvbHNdID0gc3VtO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gKG5yb3cgPT09IDEgJiYgcmVzY29scyA9PT0gMSkgPyByZXNbMF1bMF0gOiByZXM7XG4gICAgfVxuICAgIHJldHVybiBqU3RhdC5tYXAoYXJyLCBmdW5jdGlvbih2YWx1ZSkgeyByZXR1cm4gdmFsdWUgKiBhcmc7IH0pO1xuICB9LFxuXG4gIC8vIG91dGVyKFsxLDIsM10sWzQsNSw2XSlcbiAgLy8gPT09XG4gIC8vIFtbMV0sWzJdLFszXV0gdGltZXMgW1s0LDUsNl1dXG4gIC8vIC0+XG4gIC8vIFtbNCw1LDZdLFs4LDEwLDEyXSxbMTIsMTUsMThdXVxuICBvdXRlcjpmdW5jdGlvbiBvdXRlcihBLCBCKSB7XG4gICAgcmV0dXJuIGpTdGF0Lm11bHRpcGx5KEEubWFwKGZ1bmN0aW9uKHQpeyByZXR1cm4gW3RdIH0pLCBbQl0pO1xuICB9LFxuXG5cbiAgLy8gUmV0dXJucyB0aGUgZG90IHByb2R1Y3Qgb2YgdHdvIG1hdHJpY2llc1xuICBkb3Q6IGZ1bmN0aW9uIGRvdChhcnIsIGFyZykge1xuICAgIGlmICghaXNVc2FibGUoYXJyWzBdKSkgYXJyID0gWyBhcnIgXTtcbiAgICBpZiAoIWlzVXNhYmxlKGFyZ1swXSkpIGFyZyA9IFsgYXJnIF07XG4gICAgLy8gY29udmVydCBjb2x1bW4gdG8gcm93IHZlY3RvclxuICAgIHZhciBsZWZ0ID0gKGFyclswXS5sZW5ndGggPT09IDEgJiYgYXJyLmxlbmd0aCAhPT0gMSkgPyBqU3RhdC50cmFuc3Bvc2UoYXJyKSA6IGFycixcbiAgICByaWdodCA9IChhcmdbMF0ubGVuZ3RoID09PSAxICYmIGFyZy5sZW5ndGggIT09IDEpID8galN0YXQudHJhbnNwb3NlKGFyZykgOiBhcmcsXG4gICAgcmVzID0gW10sXG4gICAgcm93ID0gMCxcbiAgICBucm93ID0gbGVmdC5sZW5ndGgsXG4gICAgbmNvbCA9IGxlZnRbMF0ubGVuZ3RoLFxuICAgIHN1bSwgY29sO1xuICAgIGZvciAoOyByb3cgPCBucm93OyByb3crKykge1xuICAgICAgcmVzW3Jvd10gPSBbXTtcbiAgICAgIHN1bSA9IDA7XG4gICAgICBmb3IgKGNvbCA9IDA7IGNvbCA8IG5jb2w7IGNvbCsrKVxuICAgICAgc3VtICs9IGxlZnRbcm93XVtjb2xdICogcmlnaHRbcm93XVtjb2xdO1xuICAgICAgcmVzW3Jvd10gPSBzdW07XG4gICAgfVxuICAgIHJldHVybiAocmVzLmxlbmd0aCA9PT0gMSkgPyByZXNbMF0gOiByZXM7XG4gIH0sXG5cbiAgLy8gcmFpc2UgZXZlcnkgZWxlbWVudCBieSBhIHNjYWxhclxuICBwb3c6IGZ1bmN0aW9uIHBvdyhhcnIsIGFyZykge1xuICAgIHJldHVybiBqU3RhdC5tYXAoYXJyLCBmdW5jdGlvbih2YWx1ZSkgeyByZXR1cm4gTWF0aC5wb3codmFsdWUsIGFyZyk7IH0pO1xuICB9LFxuXG4gIC8vIGV4cG9uZW50aWF0ZSBldmVyeSBlbGVtZW50XG4gIGV4cDogZnVuY3Rpb24gZXhwKGFycikge1xuICAgIHJldHVybiBqU3RhdC5tYXAoYXJyLCBmdW5jdGlvbih2YWx1ZSkgeyByZXR1cm4gTWF0aC5leHAodmFsdWUpOyB9KTtcbiAgfSxcblxuICAvLyBnZW5lcmF0ZSB0aGUgbmF0dXJhbCBsb2cgb2YgZXZlcnkgZWxlbWVudFxuICBsb2c6IGZ1bmN0aW9uIGV4cChhcnIpIHtcbiAgICByZXR1cm4galN0YXQubWFwKGFyciwgZnVuY3Rpb24odmFsdWUpIHsgcmV0dXJuIE1hdGgubG9nKHZhbHVlKTsgfSk7XG4gIH0sXG5cbiAgLy8gZ2VuZXJhdGUgdGhlIGFic29sdXRlIHZhbHVlcyBvZiB0aGUgdmVjdG9yXG4gIGFiczogZnVuY3Rpb24gYWJzKGFycikge1xuICAgIHJldHVybiBqU3RhdC5tYXAoYXJyLCBmdW5jdGlvbih2YWx1ZSkgeyByZXR1cm4gTWF0aC5hYnModmFsdWUpOyB9KTtcbiAgfSxcblxuICAvLyBjb21wdXRlcyB0aGUgcC1ub3JtIG9mIHRoZSB2ZWN0b3JcbiAgLy8gSW4gdGhlIGNhc2UgdGhhdCBhIG1hdHJpeCBpcyBwYXNzZWQsIHVzZXMgdGhlIGZpcnN0IHJvdyBhcyB0aGUgdmVjdG9yXG4gIG5vcm06IGZ1bmN0aW9uIG5vcm0oYXJyLCBwKSB7XG4gICAgdmFyIG5ub3JtID0gMCxcbiAgICBpID0gMDtcbiAgICAvLyBjaGVjayB0aGUgcC12YWx1ZSBvZiB0aGUgbm9ybSwgYW5kIHNldCBmb3IgbW9zdCBjb21tb24gY2FzZVxuICAgIGlmIChpc05hTihwKSkgcCA9IDI7XG4gICAgLy8gY2hlY2sgaWYgbXVsdGktZGltZW5zaW9uYWwgYXJyYXksIGFuZCBtYWtlIHZlY3RvciBjb3JyZWN0aW9uXG4gICAgaWYgKGlzVXNhYmxlKGFyclswXSkpIGFyciA9IGFyclswXTtcbiAgICAvLyB2ZWN0b3Igbm9ybVxuICAgIGZvciAoOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7XG4gICAgICBubm9ybSArPSBNYXRoLnBvdyhNYXRoLmFicyhhcnJbaV0pLCBwKTtcbiAgICB9XG4gICAgcmV0dXJuIE1hdGgucG93KG5ub3JtLCAxIC8gcCk7XG4gIH0sXG5cbiAgLy8gY29tcHV0ZXMgdGhlIGFuZ2xlIGJldHdlZW4gdHdvIHZlY3RvcnMgaW4gcmFkc1xuICAvLyBJbiBjYXNlIGEgbWF0cml4IGlzIHBhc3NlZCwgdGhpcyB1c2VzIHRoZSBmaXJzdCByb3cgYXMgdGhlIHZlY3RvclxuICBhbmdsZTogZnVuY3Rpb24gYW5nbGUoYXJyLCBhcmcpIHtcbiAgICByZXR1cm4gTWF0aC5hY29zKGpTdGF0LmRvdChhcnIsIGFyZykgLyAoalN0YXQubm9ybShhcnIpICogalN0YXQubm9ybShhcmcpKSk7XG4gIH0sXG5cbiAgLy8gYXVnbWVudCBvbmUgbWF0cml4IGJ5IGFub3RoZXJcbiAgLy8gTm90ZTogdGhpcyBmdW5jdGlvbiByZXR1cm5zIGEgbWF0cml4LCBub3QgYSBqU3RhdCBvYmplY3RcbiAgYXVnOiBmdW5jdGlvbiBhdWcoYSwgYikge1xuICAgIHZhciBuZXdhcnIgPSBbXTtcbiAgICB2YXIgaTtcbiAgICBmb3IgKGkgPSAwOyBpIDwgYS5sZW5ndGg7IGkrKykge1xuICAgICAgbmV3YXJyLnB1c2goYVtpXS5zbGljZSgpKTtcbiAgICB9XG4gICAgZm9yIChpID0gMDsgaSA8IG5ld2Fyci5sZW5ndGg7IGkrKykge1xuICAgICAgcHVzaC5hcHBseShuZXdhcnJbaV0sIGJbaV0pO1xuICAgIH1cbiAgICByZXR1cm4gbmV3YXJyO1xuICB9LFxuXG4gIC8vIFRoZSBpbnYoKSBmdW5jdGlvbiBjYWxjdWxhdGVzIHRoZSBpbnZlcnNlIG9mIGEgbWF0cml4XG4gIC8vIENyZWF0ZSB0aGUgaW52ZXJzZSBieSBhdWdtZW50aW5nIHRoZSBtYXRyaXggYnkgdGhlIGlkZW50aXR5IG1hdHJpeCBvZiB0aGVcbiAgLy8gYXBwcm9wcmlhdGUgc2l6ZSwgYW5kIHRoZW4gdXNlIEctSiBlbGltaW5hdGlvbiBvbiB0aGUgYXVnbWVudGVkIG1hdHJpeC5cbiAgaW52OiBmdW5jdGlvbiBpbnYoYSkge1xuICAgIHZhciByb3dzID0gYS5sZW5ndGg7XG4gICAgdmFyIGNvbHMgPSBhWzBdLmxlbmd0aDtcbiAgICB2YXIgYiA9IGpTdGF0LmlkZW50aXR5KHJvd3MsIGNvbHMpO1xuICAgIHZhciBjID0galN0YXQuZ2F1c3Nfam9yZGFuKGEsIGIpO1xuICAgIHZhciByZXN1bHQgPSBbXTtcbiAgICB2YXIgaSA9IDA7XG4gICAgdmFyIGo7XG5cbiAgICAvL1dlIG5lZWQgdG8gY29weSB0aGUgaW52ZXJzZSBwb3J0aW9uIHRvIGEgbmV3IG1hdHJpeCB0byByaWQgRy1KIGFydGlmYWN0c1xuICAgIGZvciAoOyBpIDwgcm93czsgaSsrKSB7XG4gICAgICByZXN1bHRbaV0gPSBbXTtcbiAgICAgIGZvciAoaiA9IGNvbHM7IGogPCBjWzBdLmxlbmd0aDsgaisrKVxuICAgICAgICByZXN1bHRbaV1baiAtIGNvbHNdID0gY1tpXVtqXTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfSxcblxuICAvLyBjYWxjdWxhdGUgdGhlIGRldGVybWluYW50IG9mIGEgbWF0cml4XG4gIGRldDogZnVuY3Rpb24gZGV0KGEpIHtcbiAgICBpZiAoYS5sZW5ndGggPT09IDIpIHtcbiAgICAgIHJldHVybiBhWzBdWzBdICogYVsxXVsxXSAtIGFbMF1bMV0gKiBhWzFdWzBdO1xuICAgIH1cblxuICAgIHZhciBkZXRlcm1pbmFudCA9IDA7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhLmxlbmd0aDsgaSsrKSB7XG4gICAgICAvLyBidWlsZCBhIHN1YiBtYXRyaXggd2l0aG91dCBjb2x1bW4gYGlgXG4gICAgICB2YXIgc3VibWF0cml4ID0gW107XG4gICAgICBmb3IgKHZhciByb3cgPSAxOyByb3cgPCBhLmxlbmd0aDsgcm93KyspIHtcbiAgICAgICAgc3VibWF0cml4W3JvdyAtIDFdID0gW107XG4gICAgICAgIGZvciAodmFyIGNvbCA9IDA7IGNvbCA8IGEubGVuZ3RoOyBjb2wrKykge1xuICAgICAgICAgIGlmIChjb2wgPCBpKSB7XG4gICAgICAgICAgICBzdWJtYXRyaXhbcm93IC0gMV1bY29sXSA9IGFbcm93XVtjb2xdO1xuICAgICAgICAgIH0gZWxzZSBpZiAoY29sID4gaSkge1xuICAgICAgICAgICAgc3VibWF0cml4W3JvdyAtIDFdW2NvbCAtIDFdID0gYVtyb3ddW2NvbF07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIGFsdGVybmF0ZSBiZXR3ZWVuICsgYW5kIC0gYmV0d2VlbiBkZXRlcm1pbmFudHNcbiAgICAgIHZhciBzaWduID0gaSAlIDIgPyAtMSA6IDE7XG4gICAgICBkZXRlcm1pbmFudCArPSBkZXQoc3VibWF0cml4KSAqIGFbMF1baV0gKiBzaWduO1xuICAgIH1cblxuICAgIHJldHVybiBkZXRlcm1pbmFudFxuICB9LFxuXG4gIGdhdXNzX2VsaW1pbmF0aW9uOiBmdW5jdGlvbiBnYXVzc19lbGltaW5hdGlvbihhLCBiKSB7XG4gICAgdmFyIGkgPSAwLFxuICAgIGogPSAwLFxuICAgIG4gPSBhLmxlbmd0aCxcbiAgICBtID0gYVswXS5sZW5ndGgsXG4gICAgZmFjdG9yID0gMSxcbiAgICBzdW0gPSAwLFxuICAgIHggPSBbXSxcbiAgICBtYXVnLCBwaXZvdCwgdGVtcCwgaztcbiAgICBhID0galN0YXQuYXVnKGEsIGIpO1xuICAgIG1hdWcgPSBhWzBdLmxlbmd0aDtcbiAgICBmb3IoaSA9IDA7IGkgPCBuOyBpKyspIHtcbiAgICAgIHBpdm90ID0gYVtpXVtpXTtcbiAgICAgIGogPSBpO1xuICAgICAgZm9yIChrID0gaSArIDE7IGsgPCBtOyBrKyspIHtcbiAgICAgICAgaWYgKHBpdm90IDwgTWF0aC5hYnMoYVtrXVtpXSkpIHtcbiAgICAgICAgICBwaXZvdCA9IGFba11baV07XG4gICAgICAgICAgaiA9IGs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChqICE9IGkpIHtcbiAgICAgICAgZm9yKGsgPSAwOyBrIDwgbWF1ZzsgaysrKSB7XG4gICAgICAgICAgdGVtcCA9IGFbaV1ba107XG4gICAgICAgICAgYVtpXVtrXSA9IGFbal1ba107XG4gICAgICAgICAgYVtqXVtrXSA9IHRlbXA7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGZvciAoaiA9IGkgKyAxOyBqIDwgbjsgaisrKSB7XG4gICAgICAgIGZhY3RvciA9IGFbal1baV0gLyBhW2ldW2ldO1xuICAgICAgICBmb3IoayA9IGk7IGsgPCBtYXVnOyBrKyspIHtcbiAgICAgICAgICBhW2pdW2tdID0gYVtqXVtrXSAtIGZhY3RvciAqIGFbaV1ba107XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgZm9yIChpID0gbiAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICBzdW0gPSAwO1xuICAgICAgZm9yIChqID0gaSArIDE7IGo8PSBuIC0gMTsgaisrKSB7XG4gICAgICAgIHN1bSA9IHN1bSArIHhbal0gKiBhW2ldW2pdO1xuICAgICAgfVxuICAgICAgeFtpXSA9KGFbaV1bbWF1ZyAtIDFdIC0gc3VtKSAvIGFbaV1baV07XG4gICAgfVxuICAgIHJldHVybiB4O1xuICB9LFxuXG4gIGdhdXNzX2pvcmRhbjogZnVuY3Rpb24gZ2F1c3Nfam9yZGFuKGEsIGIpIHtcbiAgICB2YXIgbSA9IGpTdGF0LmF1ZyhhLCBiKTtcbiAgICB2YXIgaCA9IG0ubGVuZ3RoO1xuICAgIHZhciB3ID0gbVswXS5sZW5ndGg7XG4gICAgdmFyIGMgPSAwO1xuICAgIHZhciB4LCB5LCB5MjtcbiAgICAvLyBmaW5kIG1heCBwaXZvdFxuICAgIGZvciAoeSA9IDA7IHkgPCBoOyB5KyspIHtcbiAgICAgIHZhciBtYXhyb3cgPSB5O1xuICAgICAgZm9yICh5MiA9IHkrMTsgeTIgPCBoOyB5MisrKSB7XG4gICAgICAgIGlmIChNYXRoLmFicyhtW3kyXVt5XSkgPiBNYXRoLmFicyhtW21heHJvd11beV0pKVxuICAgICAgICAgIG1heHJvdyA9IHkyO1xuICAgICAgfVxuICAgICAgdmFyIHRtcCA9IG1beV07XG4gICAgICBtW3ldID0gbVttYXhyb3ddO1xuICAgICAgbVttYXhyb3ddID0gdG1wXG4gICAgICBmb3IgKHkyID0geSsxOyB5MiA8IGg7IHkyKyspIHtcbiAgICAgICAgYyA9IG1beTJdW3ldIC8gbVt5XVt5XTtcbiAgICAgICAgZm9yICh4ID0geTsgeCA8IHc7IHgrKykge1xuICAgICAgICAgIG1beTJdW3hdIC09IG1beV1beF0gKiBjO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIC8vIGJhY2tzdWJzdGl0dXRlXG4gICAgZm9yICh5ID0gaC0xOyB5ID49IDA7IHktLSkge1xuICAgICAgYyA9IG1beV1beV07XG4gICAgICBmb3IgKHkyID0gMDsgeTIgPCB5OyB5MisrKSB7XG4gICAgICAgIGZvciAoeCA9IHctMTsgeCA+IHktMTsgeC0tKSB7XG4gICAgICAgICAgbVt5Ml1beF0gLT0gbVt5XVt4XSAqIG1beTJdW3ldIC8gYztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgbVt5XVt5XSAvPSBjO1xuICAgICAgZm9yICh4ID0gaDsgeCA8IHc7IHgrKykge1xuICAgICAgICBtW3ldW3hdIC89IGM7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBtO1xuICB9LFxuXG4gIC8vIHNvbHZlIGVxdWF0aW9uXG4gIC8vIEF4PWJcbiAgLy8gQSBpcyB1cHBlciB0cmlhbmd1bGFyIG1hdHJpeFxuICAvLyBBPVtbMSwyLDNdLFswLDQsNV0sWzAsNiw3XV1cbiAgLy8gYj1bMSwyLDNdXG4gIC8vIHRyaWFVcFNvbHZlKEEsYikgLy8gLT4gWzIuNjY2LDAuMTY2NiwxLjY2Nl1cbiAgLy8gaWYgeW91IHVzZSBtYXRyaXggc3R5bGVcbiAgLy8gQT1bWzEsMiwzXSxbMCw0LDVdLFswLDYsN11dXG4gIC8vIGI9W1sxXSxbMl0sWzNdXVxuICAvLyB3aWxsIHJldHVybiBbWzIuNjY2XSxbMC4xNjY2XSxbMS42NjZdXVxuICB0cmlhVXBTb2x2ZTogZnVuY3Rpb24gdHJpYVVwU29sdmUoQSwgYikge1xuICAgIHZhciBzaXplID0gQVswXS5sZW5ndGg7XG4gICAgdmFyIHggPSBqU3RhdC56ZXJvcygxLCBzaXplKVswXTtcbiAgICB2YXIgcGFydHM7XG4gICAgdmFyIG1hdHJpeF9tb2RlID0gZmFsc2U7XG5cbiAgICBpZiAoYlswXS5sZW5ndGggIT0gdW5kZWZpbmVkKSB7XG4gICAgICBiID0gYi5tYXAoZnVuY3Rpb24oaSl7IHJldHVybiBpWzBdIH0pO1xuICAgICAgbWF0cml4X21vZGUgPSB0cnVlO1xuICAgIH1cblxuICAgIGpTdGF0LmFyYW5nZShzaXplIC0gMSwgLTEsIC0xKS5mb3JFYWNoKGZ1bmN0aW9uKGkpIHtcbiAgICAgIHBhcnRzID0galN0YXQuYXJhbmdlKGkgKyAxLCBzaXplKS5tYXAoZnVuY3Rpb24oaikge1xuICAgICAgICByZXR1cm4geFtqXSAqIEFbaV1bal07XG4gICAgICB9KTtcbiAgICAgIHhbaV0gPSAoYltpXSAtIGpTdGF0LnN1bShwYXJ0cykpIC8gQVtpXVtpXTtcbiAgICB9KTtcblxuICAgIGlmIChtYXRyaXhfbW9kZSlcbiAgICAgIHJldHVybiB4Lm1hcChmdW5jdGlvbihpKXsgcmV0dXJuIFtpXSB9KTtcbiAgICByZXR1cm4geDtcbiAgfSxcblxuICB0cmlhTG93U29sdmU6IGZ1bmN0aW9uIHRyaWFMb3dTb2x2ZShBLCBiKSB7XG4gICAgLy8gbGlrZSB0byB0cmlhVXBTb2x2ZSBidXQgQSBpcyBsb3dlciB0cmlhbmd1bGFyIG1hdHJpeFxuICAgIHZhciBzaXplID0gQVswXS5sZW5ndGg7XG4gICAgdmFyIHggPSBqU3RhdC56ZXJvcygxLCBzaXplKVswXTtcbiAgICB2YXIgcGFydHM7XG5cbiAgICB2YXIgbWF0cml4X21vZGU9ZmFsc2U7XG4gICAgaWYgKGJbMF0ubGVuZ3RoICE9IHVuZGVmaW5lZCkge1xuICAgICAgYiA9IGIubWFwKGZ1bmN0aW9uKGkpeyByZXR1cm4gaVswXSB9KTtcbiAgICAgIG1hdHJpeF9tb2RlID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBqU3RhdC5hcmFuZ2Uoc2l6ZSkuZm9yRWFjaChmdW5jdGlvbihpKSB7XG4gICAgICBwYXJ0cyA9IGpTdGF0LmFyYW5nZShpKS5tYXAoZnVuY3Rpb24oaikge1xuICAgICAgICByZXR1cm4gQVtpXVtqXSAqIHhbal07XG4gICAgICB9KTtcbiAgICAgIHhbaV0gPSAoYltpXSAtIGpTdGF0LnN1bShwYXJ0cykpIC8gQVtpXVtpXTtcbiAgICB9KVxuXG4gICAgaWYgKG1hdHJpeF9tb2RlKVxuICAgICAgcmV0dXJuIHgubWFwKGZ1bmN0aW9uKGkpeyByZXR1cm4gW2ldIH0pO1xuICAgIHJldHVybiB4O1xuICB9LFxuXG5cbiAgLy8gQSAtPiBbTCxVXVxuICAvLyBBPUxVXG4gIC8vIEwgaXMgbG93ZXIgdHJpYW5ndWxhciBtYXRyaXhcbiAgLy8gVSBpcyB1cHBlciB0cmlhbmd1bGFyIG1hdHJpeFxuICBsdTogZnVuY3Rpb24gbHUoQSkge1xuICAgIHZhciBzaXplID0gQS5sZW5ndGg7XG4gICAgLy92YXIgTD1qU3RhdC5kaWFnb25hbChqU3RhdC5vbmVzKDEsc2l6ZSlbMF0pO1xuICAgIHZhciBMID0galN0YXQuaWRlbnRpdHkoc2l6ZSk7XG4gICAgdmFyIFIgPSBqU3RhdC56ZXJvcyhBLmxlbmd0aCwgQVswXS5sZW5ndGgpO1xuICAgIHZhciBwYXJ0cztcbiAgICBqU3RhdC5hcmFuZ2Uoc2l6ZSkuZm9yRWFjaChmdW5jdGlvbih0KSB7XG4gICAgICBSWzBdW3RdID0gQVswXVt0XTtcbiAgICB9KTtcbiAgICBqU3RhdC5hcmFuZ2UoMSwgc2l6ZSkuZm9yRWFjaChmdW5jdGlvbihsKSB7XG4gICAgICBqU3RhdC5hcmFuZ2UobCkuZm9yRWFjaChmdW5jdGlvbihpKSB7XG4gICAgICAgIHBhcnRzID0galN0YXQuYXJhbmdlKGkpLm1hcChmdW5jdGlvbihqaikge1xuICAgICAgICAgIHJldHVybiBMW2xdW2pqXSAqIFJbampdW2ldO1xuICAgICAgICB9KTtcbiAgICAgICAgTFtsXVtpXSA9IChBW2xdW2ldIC0galN0YXQuc3VtKHBhcnRzKSkgLyBSW2ldW2ldO1xuICAgICAgfSk7XG4gICAgICBqU3RhdC5hcmFuZ2UobCwgc2l6ZSkuZm9yRWFjaChmdW5jdGlvbihqKSB7XG4gICAgICAgIHBhcnRzID0galN0YXQuYXJhbmdlKGwpLm1hcChmdW5jdGlvbihqaikge1xuICAgICAgICAgIHJldHVybiBMW2xdW2pqXSAqIFJbampdW2pdO1xuICAgICAgICB9KTtcbiAgICAgICAgUltsXVtqXSA9IEFbcGFydHMubGVuZ3RoXVtqXSAtIGpTdGF0LnN1bShwYXJ0cyk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICByZXR1cm4gW0wsIFJdO1xuICB9LFxuXG4gIC8vIEEgLT4gVFxuICAvLyBBPVRUJ1xuICAvLyBUIGlzIGxvd2VyIHRyaWFuZ3VsYXIgbWF0cml4XG4gIGNob2xlc2t5OiBmdW5jdGlvbiBjaG9sZXNreShBKSB7XG4gICAgdmFyIHNpemUgPSBBLmxlbmd0aDtcbiAgICB2YXIgVCA9IGpTdGF0Lnplcm9zKEEubGVuZ3RoLCBBWzBdLmxlbmd0aCk7XG4gICAgdmFyIHBhcnRzO1xuICAgIGpTdGF0LmFyYW5nZShzaXplKS5mb3JFYWNoKGZ1bmN0aW9uKGkpIHtcbiAgICAgIHBhcnRzID0galN0YXQuYXJhbmdlKGkpLm1hcChmdW5jdGlvbih0KSB7XG4gICAgICAgIHJldHVybiBNYXRoLnBvdyhUW2ldW3RdLDIpO1xuICAgICAgfSk7XG4gICAgICBUW2ldW2ldID0gTWF0aC5zcXJ0KEFbaV1baV0gLSBqU3RhdC5zdW0ocGFydHMpKTtcbiAgICAgIGpTdGF0LmFyYW5nZShpICsgMSwgc2l6ZSkuZm9yRWFjaChmdW5jdGlvbihqKSB7XG4gICAgICAgIHBhcnRzID0galN0YXQuYXJhbmdlKGkpLm1hcChmdW5jdGlvbih0KSB7XG4gICAgICAgICAgcmV0dXJuIFRbaV1bdF0gKiBUW2pdW3RdO1xuICAgICAgICB9KTtcbiAgICAgICAgVFtqXVtpXSA9IChBW2ldW2pdIC0galN0YXQuc3VtKHBhcnRzKSkgLyBUW2ldW2ldO1xuICAgICAgfSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIFQ7XG4gIH0sXG5cblxuICBnYXVzc19qYWNvYmk6IGZ1bmN0aW9uIGdhdXNzX2phY29iaShhLCBiLCB4LCByKSB7XG4gICAgdmFyIGkgPSAwO1xuICAgIHZhciBqID0gMDtcbiAgICB2YXIgbiA9IGEubGVuZ3RoO1xuICAgIHZhciBsID0gW107XG4gICAgdmFyIHUgPSBbXTtcbiAgICB2YXIgZCA9IFtdO1xuICAgIHZhciB4diwgYywgaCwgeGs7XG4gICAgZm9yICg7IGkgPCBuOyBpKyspIHtcbiAgICAgIGxbaV0gPSBbXTtcbiAgICAgIHVbaV0gPSBbXTtcbiAgICAgIGRbaV0gPSBbXTtcbiAgICAgIGZvciAoaiA9IDA7IGogPCBuOyBqKyspIHtcbiAgICAgICAgaWYgKGkgPiBqKSB7XG4gICAgICAgICAgbFtpXVtqXSA9IGFbaV1bal07XG4gICAgICAgICAgdVtpXVtqXSA9IGRbaV1bal0gPSAwO1xuICAgICAgICB9IGVsc2UgaWYgKGkgPCBqKSB7XG4gICAgICAgICAgdVtpXVtqXSA9IGFbaV1bal07XG4gICAgICAgICAgbFtpXVtqXSA9IGRbaV1bal0gPSAwO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGRbaV1bal0gPSBhW2ldW2pdO1xuICAgICAgICAgIGxbaV1bal0gPSB1W2ldW2pdID0gMDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBoID0galN0YXQubXVsdGlwbHkoalN0YXQubXVsdGlwbHkoalN0YXQuaW52KGQpLCBqU3RhdC5hZGQobCwgdSkpLCAtMSk7XG4gICAgYyA9IGpTdGF0Lm11bHRpcGx5KGpTdGF0LmludihkKSwgYik7XG4gICAgeHYgPSB4O1xuICAgIHhrID0galN0YXQuYWRkKGpTdGF0Lm11bHRpcGx5KGgsIHgpLCBjKTtcbiAgICBpID0gMjtcbiAgICB3aGlsZSAoTWF0aC5hYnMoalN0YXQubm9ybShqU3RhdC5zdWJ0cmFjdCh4ayx4dikpKSA+IHIpIHtcbiAgICAgIHh2ID0geGs7XG4gICAgICB4ayA9IGpTdGF0LmFkZChqU3RhdC5tdWx0aXBseShoLCB4diksIGMpO1xuICAgICAgaSsrO1xuICAgIH1cbiAgICByZXR1cm4geGs7XG4gIH0sXG5cbiAgZ2F1c3Nfc2VpZGVsOiBmdW5jdGlvbiBnYXVzc19zZWlkZWwoYSwgYiwgeCwgcikge1xuICAgIHZhciBpID0gMDtcbiAgICB2YXIgbiA9IGEubGVuZ3RoO1xuICAgIHZhciBsID0gW107XG4gICAgdmFyIHUgPSBbXTtcbiAgICB2YXIgZCA9IFtdO1xuICAgIHZhciBqLCB4diwgYywgaCwgeGs7XG4gICAgZm9yICg7IGkgPCBuOyBpKyspIHtcbiAgICAgIGxbaV0gPSBbXTtcbiAgICAgIHVbaV0gPSBbXTtcbiAgICAgIGRbaV0gPSBbXTtcbiAgICAgIGZvciAoaiA9IDA7IGogPCBuOyBqKyspIHtcbiAgICAgICAgaWYgKGkgPiBqKSB7XG4gICAgICAgICAgbFtpXVtqXSA9IGFbaV1bal07XG4gICAgICAgICAgdVtpXVtqXSA9IGRbaV1bal0gPSAwO1xuICAgICAgICB9IGVsc2UgaWYgKGkgPCBqKSB7XG4gICAgICAgICAgdVtpXVtqXSA9IGFbaV1bal07XG4gICAgICAgICAgbFtpXVtqXSA9IGRbaV1bal0gPSAwO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGRbaV1bal0gPSBhW2ldW2pdO1xuICAgICAgICAgIGxbaV1bal0gPSB1W2ldW2pdID0gMDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBoID0galN0YXQubXVsdGlwbHkoalN0YXQubXVsdGlwbHkoalN0YXQuaW52KGpTdGF0LmFkZChkLCBsKSksIHUpLCAtMSk7XG4gICAgYyA9IGpTdGF0Lm11bHRpcGx5KGpTdGF0LmludihqU3RhdC5hZGQoZCwgbCkpLCBiKTtcbiAgICB4diA9IHg7XG4gICAgeGsgPSBqU3RhdC5hZGQoalN0YXQubXVsdGlwbHkoaCwgeCksIGMpO1xuICAgIGkgPSAyO1xuICAgIHdoaWxlIChNYXRoLmFicyhqU3RhdC5ub3JtKGpTdGF0LnN1YnRyYWN0KHhrLCB4dikpKSA+IHIpIHtcbiAgICAgIHh2ID0geGs7XG4gICAgICB4ayA9IGpTdGF0LmFkZChqU3RhdC5tdWx0aXBseShoLCB4diksIGMpO1xuICAgICAgaSA9IGkgKyAxO1xuICAgIH1cbiAgICByZXR1cm4geGs7XG4gIH0sXG5cbiAgU09SOiBmdW5jdGlvbiBTT1IoYSwgYiwgeCwgciwgdykge1xuICAgIHZhciBpID0gMDtcbiAgICB2YXIgbiA9IGEubGVuZ3RoO1xuICAgIHZhciBsID0gW107XG4gICAgdmFyIHUgPSBbXTtcbiAgICB2YXIgZCA9IFtdO1xuICAgIHZhciBqLCB4diwgYywgaCwgeGs7XG4gICAgZm9yICg7IGkgPCBuOyBpKyspIHtcbiAgICAgIGxbaV0gPSBbXTtcbiAgICAgIHVbaV0gPSBbXTtcbiAgICAgIGRbaV0gPSBbXTtcbiAgICAgIGZvciAoaiA9IDA7IGogPCBuOyBqKyspIHtcbiAgICAgICAgaWYgKGkgPiBqKSB7XG4gICAgICAgICAgbFtpXVtqXSA9IGFbaV1bal07XG4gICAgICAgICAgdVtpXVtqXSA9IGRbaV1bal0gPSAwO1xuICAgICAgICB9IGVsc2UgaWYgKGkgPCBqKSB7XG4gICAgICAgICAgdVtpXVtqXSA9IGFbaV1bal07XG4gICAgICAgICAgbFtpXVtqXSA9IGRbaV1bal0gPSAwO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGRbaV1bal0gPSBhW2ldW2pdO1xuICAgICAgICAgIGxbaV1bal0gPSB1W2ldW2pdID0gMDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBoID0galN0YXQubXVsdGlwbHkoalN0YXQuaW52KGpTdGF0LmFkZChkLCBqU3RhdC5tdWx0aXBseShsLCB3KSkpLFxuICAgICAgICAgICAgICAgICAgICAgICBqU3RhdC5zdWJ0cmFjdChqU3RhdC5tdWx0aXBseShkLCAxIC0gdyksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpTdGF0Lm11bHRpcGx5KHUsIHcpKSk7XG4gICAgYyA9IGpTdGF0Lm11bHRpcGx5KGpTdGF0Lm11bHRpcGx5KGpTdGF0LmludihqU3RhdC5hZGQoZCxcbiAgICAgICAgalN0YXQubXVsdGlwbHkobCwgdykpKSwgYiksIHcpO1xuICAgIHh2ID0geDtcbiAgICB4ayA9IGpTdGF0LmFkZChqU3RhdC5tdWx0aXBseShoLCB4KSwgYyk7XG4gICAgaSA9IDI7XG4gICAgd2hpbGUgKE1hdGguYWJzKGpTdGF0Lm5vcm0oalN0YXQuc3VidHJhY3QoeGssIHh2KSkpID4gcikge1xuICAgICAgeHYgPSB4aztcbiAgICAgIHhrID0galN0YXQuYWRkKGpTdGF0Lm11bHRpcGx5KGgsIHh2KSwgYyk7XG4gICAgICBpKys7XG4gICAgfVxuICAgIHJldHVybiB4aztcbiAgfSxcblxuICBob3VzZWhvbGRlcjogZnVuY3Rpb24gaG91c2Vob2xkZXIoYSkge1xuICAgIHZhciBtID0gYS5sZW5ndGg7XG4gICAgdmFyIG4gPSBhWzBdLmxlbmd0aDtcbiAgICB2YXIgaSA9IDA7XG4gICAgdmFyIHcgPSBbXTtcbiAgICB2YXIgcCA9IFtdO1xuICAgIHZhciBhbHBoYSwgciwgaywgaiwgZmFjdG9yO1xuICAgIGZvciAoOyBpIDwgbSAtIDE7IGkrKykge1xuICAgICAgYWxwaGEgPSAwO1xuICAgICAgZm9yIChqID0gaSArIDE7IGogPCBuOyBqKyspXG4gICAgICBhbHBoYSArPSAoYVtqXVtpXSAqIGFbal1baV0pO1xuICAgICAgZmFjdG9yID0gKGFbaSArIDFdW2ldID4gMCkgPyAtMSA6IDE7XG4gICAgICBhbHBoYSA9IGZhY3RvciAqIE1hdGguc3FydChhbHBoYSk7XG4gICAgICByID0gTWF0aC5zcXJ0KCgoKGFscGhhICogYWxwaGEpIC0gYVtpICsgMV1baV0gKiBhbHBoYSkgLyAyKSk7XG4gICAgICB3ID0galN0YXQuemVyb3MobSwgMSk7XG4gICAgICB3W2kgKyAxXVswXSA9IChhW2kgKyAxXVtpXSAtIGFscGhhKSAvICgyICogcik7XG4gICAgICBmb3IgKGsgPSBpICsgMjsgayA8IG07IGsrKykgd1trXVswXSA9IGFba11baV0gLyAoMiAqIHIpO1xuICAgICAgcCA9IGpTdGF0LnN1YnRyYWN0KGpTdGF0LmlkZW50aXR5KG0sIG4pLFxuICAgICAgICAgIGpTdGF0Lm11bHRpcGx5KGpTdGF0Lm11bHRpcGx5KHcsIGpTdGF0LnRyYW5zcG9zZSh3KSksIDIpKTtcbiAgICAgIGEgPSBqU3RhdC5tdWx0aXBseShwLCBqU3RhdC5tdWx0aXBseShhLCBwKSk7XG4gICAgfVxuICAgIHJldHVybiBhO1xuICB9LFxuXG4gIC8vIEEgLT4gW1EsUl1cbiAgLy8gUSBpcyBvcnRob2dvbmFsIG1hdHJpeFxuICAvLyBSIGlzIHVwcGVyIHRyaWFuZ3VsYXJcbiAgUVI6IChmdW5jdGlvbigpIHtcbiAgICAvLyB4IC0+IFFcbiAgICAvLyBmaW5kIGEgb3J0aG9nb25hbCBtYXRyaXggUSBzdC5cbiAgICAvLyBReD15XG4gICAgLy8geSBpcyBbfHx4fHwsMCwwLC4uLl1cblxuICAgIC8vIHF1aWNrIHJlZlxuICAgIHZhciBzdW0gICA9IGpTdGF0LnN1bTtcbiAgICB2YXIgcmFuZ2UgPSBqU3RhdC5hcmFuZ2U7XG5cbiAgICBmdW5jdGlvbiBxcjIoeCkge1xuICAgICAgLy8gcXVpY2sgaW1wbGV0YXRpb25cbiAgICAgIC8vIGh0dHBzOi8vd3d3LnN0YXQud2lzYy5lZHUvfmxhcmdldC9tYXRoNDk2L3FyLmh0bWxcblxuICAgICAgdmFyIG4gPSB4Lmxlbmd0aDtcbiAgICAgIHZhciBwID0geFswXS5sZW5ndGg7XG5cbiAgICAgIHZhciByID0galN0YXQuemVyb3MocCwgcCk7XG4gICAgICB4ID0galN0YXQuY29weSh4KTtcblxuICAgICAgdmFyIGksaixrO1xuICAgICAgZm9yKGogPSAwOyBqIDwgcDsgaisrKXtcbiAgICAgICAgcltqXVtqXSA9IE1hdGguc3FydChzdW0ocmFuZ2UobikubWFwKGZ1bmN0aW9uKGkpe1xuICAgICAgICAgIHJldHVybiB4W2ldW2pdICogeFtpXVtqXTtcbiAgICAgICAgfSkpKTtcbiAgICAgICAgZm9yKGkgPSAwOyBpIDwgbjsgaSsrKXtcbiAgICAgICAgICB4W2ldW2pdID0geFtpXVtqXSAvIHJbal1bal07XG4gICAgICAgIH1cbiAgICAgICAgZm9yKGsgPSBqKzE7IGsgPCBwOyBrKyspe1xuICAgICAgICAgIHJbal1ba10gPSBzdW0ocmFuZ2UobikubWFwKGZ1bmN0aW9uKGkpe1xuICAgICAgICAgICAgcmV0dXJuIHhbaV1bal0gKiB4W2ldW2tdO1xuICAgICAgICAgIH0pKTtcbiAgICAgICAgICBmb3IoaSA9IDA7IGkgPCBuOyBpKyspe1xuICAgICAgICAgICAgeFtpXVtrXSA9IHhbaV1ba10gLSB4W2ldW2pdKnJbal1ba107XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gW3gsIHJdO1xuICAgIH1cblxuICAgIHJldHVybiBxcjI7XG4gIH0oKSksXG5cbiAgbHN0c3E6IChmdW5jdGlvbigpIHtcbiAgICAvLyBzb2x2ZSBsZWFzdCBzcXVhcmQgcHJvYmxlbSBmb3IgQXg9YiBhcyBRUiBkZWNvbXBvc2l0aW9uIHdheSBpZiBiIGlzXG4gICAgLy8gW1tiMV0sW2IyXSxbYjNdXSBmb3JtIHdpbGwgcmV0dXJuIFtbeDFdLFt4Ml0sW3gzXV0gYXJyYXkgZm9ybSBzb2x1dGlvblxuICAgIC8vIGVsc2UgYiBpcyBbYjEsYjIsYjNdIGZvcm0gd2lsbCByZXR1cm4gW3gxLHgyLHgzXSBhcnJheSBmb3JtIHNvbHV0aW9uXG4gICAgZnVuY3Rpb24gUl9JKEEpIHtcbiAgICAgIEEgPSBqU3RhdC5jb3B5KEEpO1xuICAgICAgdmFyIHNpemUgPSBBLmxlbmd0aDtcbiAgICAgIHZhciBJID0galN0YXQuaWRlbnRpdHkoc2l6ZSk7XG4gICAgICBqU3RhdC5hcmFuZ2Uoc2l6ZSAtIDEsIC0xLCAtMSkuZm9yRWFjaChmdW5jdGlvbihpKSB7XG4gICAgICAgIGpTdGF0LnNsaWNlQXNzaWduKFxuICAgICAgICAgICAgSSwgeyByb3c6IGkgfSwgalN0YXQuZGl2aWRlKGpTdGF0LnNsaWNlKEksIHsgcm93OiBpIH0pLCBBW2ldW2ldKSk7XG4gICAgICAgIGpTdGF0LnNsaWNlQXNzaWduKFxuICAgICAgICAgICAgQSwgeyByb3c6IGkgfSwgalN0YXQuZGl2aWRlKGpTdGF0LnNsaWNlKEEsIHsgcm93OiBpIH0pLCBBW2ldW2ldKSk7XG4gICAgICAgIGpTdGF0LmFyYW5nZShpKS5mb3JFYWNoKGZ1bmN0aW9uKGopIHtcbiAgICAgICAgICB2YXIgYyA9IGpTdGF0Lm11bHRpcGx5KEFbal1baV0sIC0xKTtcbiAgICAgICAgICB2YXIgQWogPSBqU3RhdC5zbGljZShBLCB7IHJvdzogaiB9KTtcbiAgICAgICAgICB2YXIgY0FpID0galN0YXQubXVsdGlwbHkoalN0YXQuc2xpY2UoQSwgeyByb3c6IGkgfSksIGMpO1xuICAgICAgICAgIGpTdGF0LnNsaWNlQXNzaWduKEEsIHsgcm93OiBqIH0sIGpTdGF0LmFkZChBaiwgY0FpKSk7XG4gICAgICAgICAgdmFyIElqID0galN0YXQuc2xpY2UoSSwgeyByb3c6IGogfSk7XG4gICAgICAgICAgdmFyIGNJaSA9IGpTdGF0Lm11bHRpcGx5KGpTdGF0LnNsaWNlKEksIHsgcm93OiBpIH0pLCBjKTtcbiAgICAgICAgICBqU3RhdC5zbGljZUFzc2lnbihJLCB7IHJvdzogaiB9LCBqU3RhdC5hZGQoSWosIGNJaSkpO1xuICAgICAgICB9KVxuICAgICAgfSk7XG4gICAgICByZXR1cm4gSTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBxcl9zb2x2ZShBLCBiKXtcbiAgICAgIHZhciBhcnJheV9tb2RlID0gZmFsc2U7XG4gICAgICBpZiAoYlswXS5sZW5ndGggPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAvLyBbYzEsYzIsYzNdIG1vZGVcbiAgICAgICAgYiA9IGIubWFwKGZ1bmN0aW9uKHgpeyByZXR1cm4gW3hdIH0pO1xuICAgICAgICBhcnJheV9tb2RlID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIHZhciBRUiA9IGpTdGF0LlFSKEEpO1xuICAgICAgdmFyIFEgPSBRUlswXTtcbiAgICAgIHZhciBSID0gUVJbMV07XG4gICAgICB2YXIgYXR0cnMgPSBBWzBdLmxlbmd0aDtcbiAgICAgIHZhciBRMSA9IGpTdGF0LnNsaWNlKFEse2NvbDp7ZW5kOmF0dHJzfX0pO1xuICAgICAgdmFyIFIxID0galN0YXQuc2xpY2UoUix7cm93OntlbmQ6YXR0cnN9fSk7XG4gICAgICB2YXIgUkkgPSBSX0koUjEpO1xuICAgICAgdmFyIFEyID0galN0YXQudHJhbnNwb3NlKFExKTtcblxuICAgICAgaWYoUTJbMF0ubGVuZ3RoID09PSB1bmRlZmluZWQpe1xuICAgICAgICBRMiA9IFtRMl07IC8vIFRoZSBjb25mdXNpbmcgalN0YXQubXVsdGlmbHkgaW1wbGVtZW50YXRpb24gdGhyZWF0IG5hdHVyZSBwcm9jZXNzIGFnYWluLlxuICAgICAgfVxuXG4gICAgICB2YXIgeCA9IGpTdGF0Lm11bHRpcGx5KGpTdGF0Lm11bHRpcGx5KFJJLCBRMiksIGIpO1xuXG4gICAgICBpZih4Lmxlbmd0aCA9PT0gdW5kZWZpbmVkKXtcbiAgICAgICAgeCA9IFtbeF1dOyAvLyBUaGUgY29uZnVzaW5nIGpTdGF0Lm11bHRpZmx5IGltcGxlbWVudGF0aW9uIHRocmVhdCBuYXR1cmUgcHJvY2VzcyBhZ2Fpbi5cbiAgICAgIH1cblxuXG4gICAgICBpZiAoYXJyYXlfbW9kZSlcbiAgICAgICAgcmV0dXJuIHgubWFwKGZ1bmN0aW9uKGkpeyByZXR1cm4gaVswXSB9KTtcbiAgICAgIHJldHVybiB4O1xuICAgIH1cblxuICAgIHJldHVybiBxcl9zb2x2ZTtcbiAgfSgpKSxcblxuICBqYWNvYmk6IGZ1bmN0aW9uIGphY29iaShhKSB7XG4gICAgdmFyIGNvbmRpdGlvbiA9IDE7XG4gICAgdmFyIG4gPSBhLmxlbmd0aDtcbiAgICB2YXIgZSA9IGpTdGF0LmlkZW50aXR5KG4sIG4pO1xuICAgIHZhciBldiA9IFtdO1xuICAgIHZhciBiLCBpLCBqLCBwLCBxLCBtYXhpbSwgdGhldGEsIHM7XG4gICAgLy8gY29uZGl0aW9uID09PSAxIG9ubHkgaWYgdG9sZXJhbmNlIGlzIG5vdCByZWFjaGVkXG4gICAgd2hpbGUgKGNvbmRpdGlvbiA9PT0gMSkge1xuICAgICAgbWF4aW0gPSBhWzBdWzFdO1xuICAgICAgcCA9IDA7XG4gICAgICBxID0gMTtcbiAgICAgIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHtcbiAgICAgICAgZm9yIChqID0gMDsgaiA8IG47IGorKykge1xuICAgICAgICAgIGlmIChpICE9IGopIHtcbiAgICAgICAgICAgIGlmIChtYXhpbSA8IE1hdGguYWJzKGFbaV1bal0pKSB7XG4gICAgICAgICAgICAgIG1heGltID0gTWF0aC5hYnMoYVtpXVtqXSk7XG4gICAgICAgICAgICAgIHAgPSBpO1xuICAgICAgICAgICAgICBxID0gajtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChhW3BdW3BdID09PSBhW3FdW3FdKVxuICAgICAgICB0aGV0YSA9IChhW3BdW3FdID4gMCkgPyBNYXRoLlBJIC8gNCA6IC1NYXRoLlBJIC8gNDtcbiAgICAgIGVsc2VcbiAgICAgICAgdGhldGEgPSBNYXRoLmF0YW4oMiAqIGFbcF1bcV0gLyAoYVtwXVtwXSAtIGFbcV1bcV0pKSAvIDI7XG4gICAgICBzID0galN0YXQuaWRlbnRpdHkobiwgbik7XG4gICAgICBzW3BdW3BdID0gTWF0aC5jb3ModGhldGEpO1xuICAgICAgc1twXVtxXSA9IC1NYXRoLnNpbih0aGV0YSk7XG4gICAgICBzW3FdW3BdID0gTWF0aC5zaW4odGhldGEpO1xuICAgICAgc1txXVtxXSA9IE1hdGguY29zKHRoZXRhKTtcbiAgICAgIC8vIGVpZ2VuIHZlY3RvciBtYXRyaXhcbiAgICAgIGUgPSBqU3RhdC5tdWx0aXBseShlLCBzKTtcbiAgICAgIGIgPSBqU3RhdC5tdWx0aXBseShqU3RhdC5tdWx0aXBseShqU3RhdC5pbnYocyksIGEpLCBzKTtcbiAgICAgIGEgPSBiO1xuICAgICAgY29uZGl0aW9uID0gMDtcbiAgICAgIGZvciAoaSA9IDE7IGkgPCBuOyBpKyspIHtcbiAgICAgICAgZm9yIChqID0gMTsgaiA8IG47IGorKykge1xuICAgICAgICAgIGlmIChpICE9IGogJiYgTWF0aC5hYnMoYVtpXVtqXSkgPiAwLjAwMSkge1xuICAgICAgICAgICAgY29uZGl0aW9uID0gMTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgZm9yIChpID0gMDsgaSA8IG47IGkrKykgZXYucHVzaChhW2ldW2ldKTtcbiAgICAvL3JldHVybnMgYm90aCB0aGUgZWlnZW52YWx1ZSBhbmQgZWlnZW5tYXRyaXhcbiAgICByZXR1cm4gW2UsIGV2XTtcbiAgfSxcblxuICBydW5nZWt1dHRhOiBmdW5jdGlvbiBydW5nZWt1dHRhKGYsIGgsIHAsIHRfaiwgdV9qLCBvcmRlcikge1xuICAgIHZhciBrMSwgazIsIHVfajEsIGszLCBrNDtcbiAgICBpZiAob3JkZXIgPT09IDIpIHtcbiAgICAgIHdoaWxlICh0X2ogPD0gcCkge1xuICAgICAgICBrMSA9IGggKiBmKHRfaiwgdV9qKTtcbiAgICAgICAgazIgPSBoICogZih0X2ogKyBoLCB1X2ogKyBrMSk7XG4gICAgICAgIHVfajEgPSB1X2ogKyAoazEgKyBrMikgLyAyO1xuICAgICAgICB1X2ogPSB1X2oxO1xuICAgICAgICB0X2ogPSB0X2ogKyBoO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAob3JkZXIgPT09IDQpIHtcbiAgICAgIHdoaWxlICh0X2ogPD0gcCkge1xuICAgICAgICBrMSA9IGggKiBmKHRfaiwgdV9qKTtcbiAgICAgICAgazIgPSBoICogZih0X2ogKyBoIC8gMiwgdV9qICsgazEgLyAyKTtcbiAgICAgICAgazMgPSBoICogZih0X2ogKyBoIC8gMiwgdV9qICsgazIgLyAyKTtcbiAgICAgICAgazQgPSBoICogZih0X2ogK2gsIHVfaiArIGszKTtcbiAgICAgICAgdV9qMSA9IHVfaiArIChrMSArIDIgKiBrMiArIDIgKiBrMyArIGs0KSAvIDY7XG4gICAgICAgIHVfaiA9IHVfajE7XG4gICAgICAgIHRfaiA9IHRfaiArIGg7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB1X2o7XG4gIH0sXG5cbiAgcm9tYmVyZzogZnVuY3Rpb24gcm9tYmVyZyhmLCBhLCBiLCBvcmRlcikge1xuICAgIHZhciBpID0gMDtcbiAgICB2YXIgaCA9IChiIC0gYSkgLyAyO1xuICAgIHZhciB4ID0gW107XG4gICAgdmFyIGgxID0gW107XG4gICAgdmFyIGcgPSBbXTtcbiAgICB2YXIgbSwgYTEsIGosIGssIEk7XG4gICAgd2hpbGUgKGkgPCBvcmRlciAvIDIpIHtcbiAgICAgIEkgPSBmKGEpO1xuICAgICAgZm9yIChqID0gYSwgayA9IDA7IGogPD0gYjsgaiA9IGogKyBoLCBrKyspIHhba10gPSBqO1xuICAgICAgbSA9IHgubGVuZ3RoO1xuICAgICAgZm9yIChqID0gMTsgaiA8IG0gLSAxOyBqKyspIHtcbiAgICAgICAgSSArPSAoKChqICUgMikgIT09IDApID8gNCA6IDIpICogZih4W2pdKTtcbiAgICAgIH1cbiAgICAgIEkgPSAoaCAvIDMpICogKEkgKyBmKGIpKTtcbiAgICAgIGdbaV0gPSBJO1xuICAgICAgaCAvPSAyO1xuICAgICAgaSsrO1xuICAgIH1cbiAgICBhMSA9IGcubGVuZ3RoO1xuICAgIG0gPSAxO1xuICAgIHdoaWxlIChhMSAhPT0gMSkge1xuICAgICAgZm9yIChqID0gMDsgaiA8IGExIC0gMTsgaisrKVxuICAgICAgaDFbal0gPSAoKE1hdGgucG93KDQsIG0pKSAqIGdbaiArIDFdIC0gZ1tqXSkgLyAoTWF0aC5wb3coNCwgbSkgLSAxKTtcbiAgICAgIGExID0gaDEubGVuZ3RoO1xuICAgICAgZyA9IGgxO1xuICAgICAgaDEgPSBbXTtcbiAgICAgIG0rKztcbiAgICB9XG4gICAgcmV0dXJuIGc7XG4gIH0sXG5cbiAgcmljaGFyZHNvbjogZnVuY3Rpb24gcmljaGFyZHNvbihYLCBmLCB4LCBoKSB7XG4gICAgZnVuY3Rpb24gcG9zKFgsIHgpIHtcbiAgICAgIHZhciBpID0gMDtcbiAgICAgIHZhciBuID0gWC5sZW5ndGg7XG4gICAgICB2YXIgcDtcbiAgICAgIGZvciAoOyBpIDwgbjsgaSsrKVxuICAgICAgICBpZiAoWFtpXSA9PT0geCkgcCA9IGk7XG4gICAgICByZXR1cm4gcDtcbiAgICB9XG4gICAgdmFyIGhfbWluID0gTWF0aC5hYnMoeCAtIFhbcG9zKFgsIHgpICsgMV0pO1xuICAgIHZhciBpID0gMDtcbiAgICB2YXIgZyA9IFtdO1xuICAgIHZhciBoMSA9IFtdO1xuICAgIHZhciB5MSwgeTIsIG0sIGEsIGo7XG4gICAgd2hpbGUgKGggPj0gaF9taW4pIHtcbiAgICAgIHkxID0gcG9zKFgsIHggKyBoKTtcbiAgICAgIHkyID0gcG9zKFgsIHgpO1xuICAgICAgZ1tpXSA9IChmW3kxXSAtIDIgKiBmW3kyXSArIGZbMiAqIHkyIC0geTFdKSAvIChoICogaCk7XG4gICAgICBoIC89IDI7XG4gICAgICBpKys7XG4gICAgfVxuICAgIGEgPSBnLmxlbmd0aDtcbiAgICBtID0gMTtcbiAgICB3aGlsZSAoYSAhPSAxKSB7XG4gICAgICBmb3IgKGogPSAwOyBqIDwgYSAtIDE7IGorKylcbiAgICAgICAgaDFbal0gPSAoKE1hdGgucG93KDQsIG0pKSAqIGdbaiArIDFdIC0gZ1tqXSkgLyAoTWF0aC5wb3coNCwgbSkgLSAxKTtcbiAgICAgIGEgPSBoMS5sZW5ndGg7XG4gICAgICBnID0gaDE7XG4gICAgICBoMSA9IFtdO1xuICAgICAgbSsrO1xuICAgIH1cbiAgICByZXR1cm4gZztcbiAgfSxcblxuICBzaW1wc29uOiBmdW5jdGlvbiBzaW1wc29uKGYsIGEsIGIsIG4pIHtcbiAgICB2YXIgaCA9IChiIC0gYSkgLyBuO1xuICAgIHZhciBJID0gZihhKTtcbiAgICB2YXIgeCA9IFtdO1xuICAgIHZhciBqID0gYTtcbiAgICB2YXIgayA9IDA7XG4gICAgdmFyIGkgPSAxO1xuICAgIHZhciBtO1xuICAgIGZvciAoOyBqIDw9IGI7IGogPSBqICsgaCwgaysrKVxuICAgICAgeFtrXSA9IGo7XG4gICAgbSA9IHgubGVuZ3RoO1xuICAgIGZvciAoOyBpIDwgbSAtIDE7IGkrKykge1xuICAgICAgSSArPSAoKGkgJSAyICE9PSAwKSA/IDQgOiAyKSAqIGYoeFtpXSk7XG4gICAgfVxuICAgIHJldHVybiAoaCAvIDMpICogKEkgKyBmKGIpKTtcbiAgfSxcblxuICBoZXJtaXRlOiBmdW5jdGlvbiBoZXJtaXRlKFgsIEYsIGRGLCB2YWx1ZSkge1xuICAgIHZhciBuID0gWC5sZW5ndGg7XG4gICAgdmFyIHAgPSAwO1xuICAgIHZhciBpID0gMDtcbiAgICB2YXIgbCA9IFtdO1xuICAgIHZhciBkbCA9IFtdO1xuICAgIHZhciBBID0gW107XG4gICAgdmFyIEIgPSBbXTtcbiAgICB2YXIgajtcbiAgICBmb3IgKDsgaSA8IG47IGkrKykge1xuICAgICAgbFtpXSA9IDE7XG4gICAgICBmb3IgKGogPSAwOyBqIDwgbjsgaisrKSB7XG4gICAgICAgIGlmIChpICE9IGopIGxbaV0gKj0gKHZhbHVlIC0gWFtqXSkgLyAoWFtpXSAtIFhbal0pO1xuICAgICAgfVxuICAgICAgZGxbaV0gPSAwO1xuICAgICAgZm9yIChqID0gMDsgaiA8IG47IGorKykge1xuICAgICAgICBpZiAoaSAhPSBqKSBkbFtpXSArPSAxIC8gKFggW2ldIC0gWFtqXSk7XG4gICAgICB9XG4gICAgICBBW2ldID0gKDEgLSAyICogKHZhbHVlIC0gWFtpXSkgKiBkbFtpXSkgKiAobFtpXSAqIGxbaV0pO1xuICAgICAgQltpXSA9ICh2YWx1ZSAtIFhbaV0pICogKGxbaV0gKiBsW2ldKTtcbiAgICAgIHAgKz0gKEFbaV0gKiBGW2ldICsgQltpXSAqIGRGW2ldKTtcbiAgICB9XG4gICAgcmV0dXJuIHA7XG4gIH0sXG5cbiAgbGFncmFuZ2U6IGZ1bmN0aW9uIGxhZ3JhbmdlKFgsIEYsIHZhbHVlKSB7XG4gICAgdmFyIHAgPSAwO1xuICAgIHZhciBpID0gMDtcbiAgICB2YXIgaiwgbDtcbiAgICB2YXIgbiA9IFgubGVuZ3RoO1xuICAgIGZvciAoOyBpIDwgbjsgaSsrKSB7XG4gICAgICBsID0gRltpXTtcbiAgICAgIGZvciAoaiA9IDA7IGogPCBuOyBqKyspIHtcbiAgICAgICAgLy8gY2FsY3VsYXRpbmcgdGhlIGxhZ3JhbmdlIHBvbHlub21pYWwgTF9pXG4gICAgICAgIGlmIChpICE9IGopIGwgKj0gKHZhbHVlIC0gWFtqXSkgLyAoWFtpXSAtIFhbal0pO1xuICAgICAgfVxuICAgICAgLy8gYWRkaW5nIHRoZSBsYWdyYW5nZSBwb2x5bm9taWFscyBmb3VuZCBhYm92ZVxuICAgICAgcCArPSBsO1xuICAgIH1cbiAgICByZXR1cm4gcDtcbiAgfSxcblxuICBjdWJpY19zcGxpbmU6IGZ1bmN0aW9uIGN1YmljX3NwbGluZShYLCBGLCB2YWx1ZSkge1xuICAgIHZhciBuID0gWC5sZW5ndGg7XG4gICAgdmFyIGkgPSAwLCBqO1xuICAgIHZhciBBID0gW107XG4gICAgdmFyIEIgPSBbXTtcbiAgICB2YXIgYWxwaGEgPSBbXTtcbiAgICB2YXIgYyA9IFtdO1xuICAgIHZhciBoID0gW107XG4gICAgdmFyIGIgPSBbXTtcbiAgICB2YXIgZCA9IFtdO1xuICAgIGZvciAoOyBpIDwgbiAtIDE7IGkrKylcbiAgICAgIGhbaV0gPSBYW2kgKyAxXSAtIFhbaV07XG4gICAgYWxwaGFbMF0gPSAwO1xuICAgIGZvciAoaSA9IDE7IGkgPCBuIC0gMTsgaSsrKSB7XG4gICAgICBhbHBoYVtpXSA9ICgzIC8gaFtpXSkgKiAoRltpICsgMV0gLSBGW2ldKSAtXG4gICAgICAgICAgKDMgLyBoW2ktMV0pICogKEZbaV0gLSBGW2ktMV0pO1xuICAgIH1cbiAgICBmb3IgKGkgPSAxOyBpIDwgbiAtIDE7IGkrKykge1xuICAgICAgQVtpXSA9IFtdO1xuICAgICAgQltpXSA9IFtdO1xuICAgICAgQVtpXVtpLTFdID0gaFtpLTFdO1xuICAgICAgQVtpXVtpXSA9IDIgKiAoaFtpIC0gMV0gKyBoW2ldKTtcbiAgICAgIEFbaV1baSsxXSA9IGhbaV07XG4gICAgICBCW2ldWzBdID0gYWxwaGFbaV07XG4gICAgfVxuICAgIGMgPSBqU3RhdC5tdWx0aXBseShqU3RhdC5pbnYoQSksIEIpO1xuICAgIGZvciAoaiA9IDA7IGogPCBuIC0gMTsgaisrKSB7XG4gICAgICBiW2pdID0gKEZbaiArIDFdIC0gRltqXSkgLyBoW2pdIC0gaFtqXSAqIChjW2ogKyAxXVswXSArIDIgKiBjW2pdWzBdKSAvIDM7XG4gICAgICBkW2pdID0gKGNbaiArIDFdWzBdIC0gY1tqXVswXSkgLyAoMyAqIGhbal0pO1xuICAgIH1cbiAgICBmb3IgKGogPSAwOyBqIDwgbjsgaisrKSB7XG4gICAgICBpZiAoWFtqXSA+IHZhbHVlKSBicmVhaztcbiAgICB9XG4gICAgaiAtPSAxO1xuICAgIHJldHVybiBGW2pdICsgKHZhbHVlIC0gWFtqXSkgKiBiW2pdICsgalN0YXQuc3EodmFsdWUtWFtqXSkgKlxuICAgICAgICBjW2pdICsgKHZhbHVlIC0gWFtqXSkgKiBqU3RhdC5zcSh2YWx1ZSAtIFhbal0pICogZFtqXTtcbiAgfSxcblxuICBnYXVzc19xdWFkcmF0dXJlOiBmdW5jdGlvbiBnYXVzc19xdWFkcmF0dXJlKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignZ2F1c3NfcXVhZHJhdHVyZSBub3QgeWV0IGltcGxlbWVudGVkJyk7XG4gIH0sXG5cbiAgUENBOiBmdW5jdGlvbiBQQ0EoWCkge1xuICAgIHZhciBtID0gWC5sZW5ndGg7XG4gICAgdmFyIG4gPSBYWzBdLmxlbmd0aDtcbiAgICB2YXIgaSA9IDA7XG4gICAgdmFyIGosIHRlbXAxO1xuICAgIHZhciB1ID0gW107XG4gICAgdmFyIEQgPSBbXTtcbiAgICB2YXIgcmVzdWx0ID0gW107XG4gICAgdmFyIHRlbXAyID0gW107XG4gICAgdmFyIFkgPSBbXTtcbiAgICB2YXIgQnQgPSBbXTtcbiAgICB2YXIgQiA9IFtdO1xuICAgIHZhciBDID0gW107XG4gICAgdmFyIFYgPSBbXTtcbiAgICB2YXIgVnQgPSBbXTtcbiAgICBmb3IgKGkgPSAwOyBpIDwgbTsgaSsrKSB7XG4gICAgICB1W2ldID0galN0YXQuc3VtKFhbaV0pIC8gbjtcbiAgICB9XG4gICAgZm9yIChpID0gMDsgaSA8IG47IGkrKykge1xuICAgICAgQltpXSA9IFtdO1xuICAgICAgZm9yKGogPSAwOyBqIDwgbTsgaisrKSB7XG4gICAgICAgIEJbaV1bal0gPSBYW2pdW2ldIC0gdVtqXTtcbiAgICAgIH1cbiAgICB9XG4gICAgQiA9IGpTdGF0LnRyYW5zcG9zZShCKTtcbiAgICBmb3IgKGkgPSAwOyBpIDwgbTsgaSsrKSB7XG4gICAgICBDW2ldID0gW107XG4gICAgICBmb3IgKGogPSAwOyBqIDwgbTsgaisrKSB7XG4gICAgICAgIENbaV1bal0gPSAoalN0YXQuZG90KFtCW2ldXSwgW0Jbal1dKSkgLyAobiAtIDEpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXN1bHQgPSBqU3RhdC5qYWNvYmkoQyk7XG4gICAgViA9IHJlc3VsdFswXTtcbiAgICBEID0gcmVzdWx0WzFdO1xuICAgIFZ0ID0galN0YXQudHJhbnNwb3NlKFYpO1xuICAgIGZvciAoaSA9IDA7IGkgPCBELmxlbmd0aDsgaSsrKSB7XG4gICAgICBmb3IgKGogPSBpOyBqIDwgRC5sZW5ndGg7IGorKykge1xuICAgICAgICBpZihEW2ldIDwgRFtqXSkgIHtcbiAgICAgICAgICB0ZW1wMSA9IERbaV07XG4gICAgICAgICAgRFtpXSA9IERbal07XG4gICAgICAgICAgRFtqXSA9IHRlbXAxO1xuICAgICAgICAgIHRlbXAyID0gVnRbaV07XG4gICAgICAgICAgVnRbaV0gPSBWdFtqXTtcbiAgICAgICAgICBWdFtqXSA9IHRlbXAyO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIEJ0ID0galN0YXQudHJhbnNwb3NlKEIpO1xuICAgIGZvciAoaSA9IDA7IGkgPCBtOyBpKyspIHtcbiAgICAgIFlbaV0gPSBbXTtcbiAgICAgIGZvciAoaiA9IDA7IGogPCBCdC5sZW5ndGg7IGorKykge1xuICAgICAgICBZW2ldW2pdID0galN0YXQuZG90KFtWdFtpXV0sIFtCdFtqXV0pO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gW1gsIEQsIFZ0LCBZXTtcbiAgfVxufSk7XG5cbi8vIGV4dGVuZCBqU3RhdC5mbiB3aXRoIG1ldGhvZHMgdGhhdCByZXF1aXJlIG9uZSBhcmd1bWVudFxuKGZ1bmN0aW9uKGZ1bmNzKSB7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgZnVuY3MubGVuZ3RoOyBpKyspIChmdW5jdGlvbihwYXNzZnVuYykge1xuICAgIGpTdGF0LmZuW3Bhc3NmdW5jXSA9IGZ1bmN0aW9uKGFyZywgZnVuYykge1xuICAgICAgdmFyIHRtcHRoaXMgPSB0aGlzO1xuICAgICAgLy8gY2hlY2sgZm9yIGNhbGxiYWNrXG4gICAgICBpZiAoZnVuYykge1xuICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAgICAgIGZ1bmMuY2FsbCh0bXB0aGlzLCBqU3RhdC5mbltwYXNzZnVuY10uY2FsbCh0bXB0aGlzLCBhcmcpKTtcbiAgICAgICAgfSwgMTUpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH1cbiAgICAgIGlmICh0eXBlb2YgalN0YXRbcGFzc2Z1bmNdKHRoaXMsIGFyZykgPT09ICdudW1iZXInKVxuICAgICAgICByZXR1cm4galN0YXRbcGFzc2Z1bmNdKHRoaXMsIGFyZyk7XG4gICAgICBlbHNlXG4gICAgICAgIHJldHVybiBqU3RhdChqU3RhdFtwYXNzZnVuY10odGhpcywgYXJnKSk7XG4gICAgfTtcbiAgfShmdW5jc1tpXSkpO1xufSgnYWRkIGRpdmlkZSBtdWx0aXBseSBzdWJ0cmFjdCBkb3QgcG93IGV4cCBsb2cgYWJzIG5vcm0gYW5nbGUnLnNwbGl0KCcgJykpKTtcblxufShqU3RhdCwgTWF0aCkpO1xuKGZ1bmN0aW9uKGpTdGF0LCBNYXRoKSB7XG5cbnZhciBzbGljZSA9IFtdLnNsaWNlO1xudmFyIGlzTnVtYmVyID0galN0YXQudXRpbHMuaXNOdW1iZXI7XG52YXIgaXNBcnJheSA9IGpTdGF0LnV0aWxzLmlzQXJyYXk7XG5cbi8vIGZsYWc9PXRydWUgZGVub3RlcyB1c2Ugb2Ygc2FtcGxlIHN0YW5kYXJkIGRldmlhdGlvblxuLy8gWiBTdGF0aXN0aWNzXG5qU3RhdC5leHRlbmQoe1xuICAvLyAyIGRpZmZlcmVudCBwYXJhbWV0ZXIgbGlzdHM6XG4gIC8vICh2YWx1ZSwgbWVhbiwgc2QpXG4gIC8vICh2YWx1ZSwgYXJyYXksIGZsYWcpXG4gIHpzY29yZTogZnVuY3Rpb24genNjb3JlKCkge1xuICAgIHZhciBhcmdzID0gc2xpY2UuY2FsbChhcmd1bWVudHMpO1xuICAgIGlmIChpc051bWJlcihhcmdzWzFdKSkge1xuICAgICAgcmV0dXJuIChhcmdzWzBdIC0gYXJnc1sxXSkgLyBhcmdzWzJdO1xuICAgIH1cbiAgICByZXR1cm4gKGFyZ3NbMF0gLSBqU3RhdC5tZWFuKGFyZ3NbMV0pKSAvIGpTdGF0LnN0ZGV2KGFyZ3NbMV0sIGFyZ3NbMl0pO1xuICB9LFxuXG4gIC8vIDMgZGlmZmVyZW50IHBhcmFtdGVyIGxpc3RzOlxuICAvLyAodmFsdWUsIG1lYW4sIHNkLCBzaWRlcylcbiAgLy8gKHpzY29yZSwgc2lkZXMpXG4gIC8vICh2YWx1ZSwgYXJyYXksIHNpZGVzLCBmbGFnKVxuICB6dGVzdDogZnVuY3Rpb24genRlc3QoKSB7XG4gICAgdmFyIGFyZ3MgPSBzbGljZS5jYWxsKGFyZ3VtZW50cyk7XG4gICAgdmFyIHo7XG4gICAgaWYgKGlzQXJyYXkoYXJnc1sxXSkpIHtcbiAgICAgIC8vICh2YWx1ZSwgYXJyYXksIHNpZGVzLCBmbGFnKVxuICAgICAgeiA9IGpTdGF0LnpzY29yZShhcmdzWzBdLGFyZ3NbMV0sYXJnc1szXSk7XG4gICAgICByZXR1cm4gKGFyZ3NbMl0gPT09IDEpID9cbiAgICAgICAgKGpTdGF0Lm5vcm1hbC5jZGYoLU1hdGguYWJzKHopLCAwLCAxKSkgOlxuICAgICAgICAoalN0YXQubm9ybWFsLmNkZigtTWF0aC5hYnMoeiksIDAsIDEpKjIpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoYXJncy5sZW5ndGggPiAyKSB7XG4gICAgICAgIC8vICh2YWx1ZSwgbWVhbiwgc2QsIHNpZGVzKVxuICAgICAgICB6ID0galN0YXQuenNjb3JlKGFyZ3NbMF0sYXJnc1sxXSxhcmdzWzJdKTtcbiAgICAgICAgcmV0dXJuIChhcmdzWzNdID09PSAxKSA/XG4gICAgICAgICAgKGpTdGF0Lm5vcm1hbC5jZGYoLU1hdGguYWJzKHopLDAsMSkpIDpcbiAgICAgICAgICAoalN0YXQubm9ybWFsLmNkZigtTWF0aC5hYnMoeiksMCwxKSogMik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyAoenNjb3JlLCBzaWRlcylcbiAgICAgICAgeiA9IGFyZ3NbMF07XG4gICAgICAgIHJldHVybiAoYXJnc1sxXSA9PT0gMSkgP1xuICAgICAgICAgIChqU3RhdC5ub3JtYWwuY2RmKC1NYXRoLmFicyh6KSwwLDEpKSA6XG4gICAgICAgICAgKGpTdGF0Lm5vcm1hbC5jZGYoLU1hdGguYWJzKHopLDAsMSkqMik7XG4gICAgICB9XG4gICAgfVxuICB9XG59KTtcblxualN0YXQuZXh0ZW5kKGpTdGF0LmZuLCB7XG4gIHpzY29yZTogZnVuY3Rpb24genNjb3JlKHZhbHVlLCBmbGFnKSB7XG4gICAgcmV0dXJuICh2YWx1ZSAtIHRoaXMubWVhbigpKSAvIHRoaXMuc3RkZXYoZmxhZyk7XG4gIH0sXG5cbiAgenRlc3Q6IGZ1bmN0aW9uIHp0ZXN0KHZhbHVlLCBzaWRlcywgZmxhZykge1xuICAgIHZhciB6c2NvcmUgPSBNYXRoLmFicyh0aGlzLnpzY29yZSh2YWx1ZSwgZmxhZykpO1xuICAgIHJldHVybiAoc2lkZXMgPT09IDEpID9cbiAgICAgIChqU3RhdC5ub3JtYWwuY2RmKC16c2NvcmUsIDAsIDEpKSA6XG4gICAgICAoalN0YXQubm9ybWFsLmNkZigtenNjb3JlLCAwLCAxKSAqIDIpO1xuICB9XG59KTtcblxuLy8gVCBTdGF0aXN0aWNzXG5qU3RhdC5leHRlbmQoe1xuICAvLyAyIHBhcmFtZXRlciBsaXN0c1xuICAvLyAodmFsdWUsIG1lYW4sIHNkLCBuKVxuICAvLyAodmFsdWUsIGFycmF5KVxuICB0c2NvcmU6IGZ1bmN0aW9uIHRzY29yZSgpIHtcbiAgICB2YXIgYXJncyA9IHNsaWNlLmNhbGwoYXJndW1lbnRzKTtcbiAgICByZXR1cm4gKGFyZ3MubGVuZ3RoID09PSA0KSA/XG4gICAgICAoKGFyZ3NbMF0gLSBhcmdzWzFdKSAvIChhcmdzWzJdIC8gTWF0aC5zcXJ0KGFyZ3NbM10pKSkgOlxuICAgICAgKChhcmdzWzBdIC0galN0YXQubWVhbihhcmdzWzFdKSkgL1xuICAgICAgIChqU3RhdC5zdGRldihhcmdzWzFdLCB0cnVlKSAvIE1hdGguc3FydChhcmdzWzFdLmxlbmd0aCkpKTtcbiAgfSxcblxuICAvLyAzIGRpZmZlcmVudCBwYXJhbXRlciBsaXN0czpcbiAgLy8gKHZhbHVlLCBtZWFuLCBzZCwgbiwgc2lkZXMpXG4gIC8vICh0c2NvcmUsIG4sIHNpZGVzKVxuICAvLyAodmFsdWUsIGFycmF5LCBzaWRlcylcbiAgdHRlc3Q6IGZ1bmN0aW9uIHR0ZXN0KCkge1xuICAgIHZhciBhcmdzID0gc2xpY2UuY2FsbChhcmd1bWVudHMpO1xuICAgIHZhciB0c2NvcmU7XG4gICAgaWYgKGFyZ3MubGVuZ3RoID09PSA1KSB7XG4gICAgICB0c2NvcmUgPSBNYXRoLmFicyhqU3RhdC50c2NvcmUoYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSwgYXJnc1szXSkpO1xuICAgICAgcmV0dXJuIChhcmdzWzRdID09PSAxKSA/XG4gICAgICAgIChqU3RhdC5zdHVkZW50dC5jZGYoLXRzY29yZSwgYXJnc1szXS0xKSkgOlxuICAgICAgICAoalN0YXQuc3R1ZGVudHQuY2RmKC10c2NvcmUsIGFyZ3NbM10tMSkqMik7XG4gICAgfVxuICAgIGlmIChpc051bWJlcihhcmdzWzFdKSkge1xuICAgICAgdHNjb3JlID0gTWF0aC5hYnMoYXJnc1swXSlcbiAgICAgIHJldHVybiAoYXJnc1syXSA9PSAxKSA/XG4gICAgICAgIChqU3RhdC5zdHVkZW50dC5jZGYoLXRzY29yZSwgYXJnc1sxXS0xKSkgOlxuICAgICAgICAoalN0YXQuc3R1ZGVudHQuY2RmKC10c2NvcmUsIGFyZ3NbMV0tMSkgKiAyKTtcbiAgICB9XG4gICAgdHNjb3JlID0gTWF0aC5hYnMoalN0YXQudHNjb3JlKGFyZ3NbMF0sIGFyZ3NbMV0pKVxuICAgIHJldHVybiAoYXJnc1syXSA9PSAxKSA/XG4gICAgICAoalN0YXQuc3R1ZGVudHQuY2RmKC10c2NvcmUsIGFyZ3NbMV0ubGVuZ3RoLTEpKSA6XG4gICAgICAoalN0YXQuc3R1ZGVudHQuY2RmKC10c2NvcmUsIGFyZ3NbMV0ubGVuZ3RoLTEpICogMik7XG4gIH1cbn0pO1xuXG5qU3RhdC5leHRlbmQoalN0YXQuZm4sIHtcbiAgdHNjb3JlOiBmdW5jdGlvbiB0c2NvcmUodmFsdWUpIHtcbiAgICByZXR1cm4gKHZhbHVlIC0gdGhpcy5tZWFuKCkpIC8gKHRoaXMuc3RkZXYodHJ1ZSkgLyBNYXRoLnNxcnQodGhpcy5jb2xzKCkpKTtcbiAgfSxcblxuICB0dGVzdDogZnVuY3Rpb24gdHRlc3QodmFsdWUsIHNpZGVzKSB7XG4gICAgcmV0dXJuIChzaWRlcyA9PT0gMSkgP1xuICAgICAgKDEgLSBqU3RhdC5zdHVkZW50dC5jZGYoTWF0aC5hYnModGhpcy50c2NvcmUodmFsdWUpKSwgdGhpcy5jb2xzKCktMSkpIDpcbiAgICAgIChqU3RhdC5zdHVkZW50dC5jZGYoLU1hdGguYWJzKHRoaXMudHNjb3JlKHZhbHVlKSksIHRoaXMuY29scygpLTEpKjIpO1xuICB9XG59KTtcblxuLy8gRiBTdGF0aXN0aWNzXG5qU3RhdC5leHRlbmQoe1xuICAvLyBQYXJhbXRlciBsaXN0IGlzIGFzIGZvbGxvd3M6XG4gIC8vIChhcnJheTEsIGFycmF5MiwgYXJyYXkzLCAuLi4pXG4gIC8vIG9yIGl0IGlzIGFuIGFycmF5IG9mIGFycmF5c1xuICAvLyBhcnJheSBvZiBhcnJheXMgY29udmVyc2lvblxuICBhbm92YWZzY29yZTogZnVuY3Rpb24gYW5vdmFmc2NvcmUoKSB7XG4gICAgdmFyIGFyZ3MgPSBzbGljZS5jYWxsKGFyZ3VtZW50cyksXG4gICAgZXhwVmFyLCBzYW1wbGUsIHNhbXBNZWFuLCBzYW1wU2FtcE1lYW4sIHRtcGFyZ3MsIHVuZXhwVmFyLCBpLCBqO1xuICAgIGlmIChhcmdzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgdG1wYXJncyA9IG5ldyBBcnJheShhcmdzWzBdLmxlbmd0aCk7XG4gICAgICBmb3IgKGkgPSAwOyBpIDwgYXJnc1swXS5sZW5ndGg7IGkrKykge1xuICAgICAgICB0bXBhcmdzW2ldID0gYXJnc1swXVtpXTtcbiAgICAgIH1cbiAgICAgIGFyZ3MgPSB0bXBhcmdzO1xuICAgIH1cbiAgICAvLyBCdWlsZHMgc2FtcGxlIGFycmF5XG4gICAgc2FtcGxlID0gbmV3IEFycmF5KCk7XG4gICAgZm9yIChpID0gMDsgaSA8IGFyZ3MubGVuZ3RoOyBpKyspIHtcbiAgICAgIHNhbXBsZSA9IHNhbXBsZS5jb25jYXQoYXJnc1tpXSk7XG4gICAgfVxuICAgIHNhbXBNZWFuID0galN0YXQubWVhbihzYW1wbGUpO1xuICAgIC8vIENvbXB1dGVzIHRoZSBleHBsYWluZWQgdmFyaWFuY2VcbiAgICBleHBWYXIgPSAwO1xuICAgIGZvciAoaSA9IDA7IGkgPCBhcmdzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBleHBWYXIgPSBleHBWYXIgKyBhcmdzW2ldLmxlbmd0aCAqIE1hdGgucG93KGpTdGF0Lm1lYW4oYXJnc1tpXSkgLSBzYW1wTWVhbiwgMik7XG4gICAgfVxuICAgIGV4cFZhciAvPSAoYXJncy5sZW5ndGggLSAxKTtcbiAgICAvLyBDb21wdXRlcyB1bmV4cGxhaW5lZCB2YXJpYW5jZVxuICAgIHVuZXhwVmFyID0gMDtcbiAgICBmb3IgKGkgPSAwOyBpIDwgYXJncy5sZW5ndGg7IGkrKykge1xuICAgICAgc2FtcFNhbXBNZWFuID0galN0YXQubWVhbihhcmdzW2ldKTtcbiAgICAgIGZvciAoaiA9IDA7IGogPCBhcmdzW2ldLmxlbmd0aDsgaisrKSB7XG4gICAgICAgIHVuZXhwVmFyICs9IE1hdGgucG93KGFyZ3NbaV1bal0gLSBzYW1wU2FtcE1lYW4sIDIpO1xuICAgICAgfVxuICAgIH1cbiAgICB1bmV4cFZhciAvPSAoc2FtcGxlLmxlbmd0aCAtIGFyZ3MubGVuZ3RoKTtcbiAgICByZXR1cm4gZXhwVmFyIC8gdW5leHBWYXI7XG4gIH0sXG5cbiAgLy8gMiBkaWZmZXJlbnQgcGFyYW10ZXIgc2V0dXBzXG4gIC8vIChhcnJheTEsIGFycmF5MiwgYXJyYXkzLCAuLi4pXG4gIC8vIChhbm92YWZzY29yZSwgZGYxLCBkZjIpXG4gIGFub3ZhZnRlc3Q6IGZ1bmN0aW9uIGFub3ZhZnRlc3QoKSB7XG4gICAgdmFyIGFyZ3MgPSBzbGljZS5jYWxsKGFyZ3VtZW50cyksXG4gICAgZGYxLCBkZjIsIG4sIGk7XG4gICAgaWYgKGlzTnVtYmVyKGFyZ3NbMF0pKSB7XG4gICAgICByZXR1cm4gMSAtIGpTdGF0LmNlbnRyYWxGLmNkZihhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdKTtcbiAgICB9XG4gICAgdmFyIGFub3ZhZnNjb3JlID0galN0YXQuYW5vdmFmc2NvcmUoYXJncyk7XG4gICAgZGYxID0gYXJncy5sZW5ndGggLSAxO1xuICAgIG4gPSAwO1xuICAgIGZvciAoaSA9IDA7IGkgPCBhcmdzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBuID0gbiArIGFyZ3NbaV0ubGVuZ3RoO1xuICAgIH1cbiAgICBkZjIgPSBuIC0gZGYxIC0gMTtcbiAgICByZXR1cm4gMSAtIGpTdGF0LmNlbnRyYWxGLmNkZihhbm92YWZzY29yZSwgZGYxLCBkZjIpO1xuICB9LFxuXG4gIGZ0ZXN0OiBmdW5jdGlvbiBmdGVzdChmc2NvcmUsIGRmMSwgZGYyKSB7XG4gICAgcmV0dXJuIDEgLSBqU3RhdC5jZW50cmFsRi5jZGYoZnNjb3JlLCBkZjEsIGRmMik7XG4gIH1cbn0pO1xuXG5qU3RhdC5leHRlbmQoalN0YXQuZm4sIHtcbiAgYW5vdmFmc2NvcmU6IGZ1bmN0aW9uIGFub3ZhZnNjb3JlKCkge1xuICAgIHJldHVybiBqU3RhdC5hbm92YWZzY29yZSh0aGlzLnRvQXJyYXkoKSk7XG4gIH0sXG5cbiAgYW5vdmFmdGVzOiBmdW5jdGlvbiBhbm92YWZ0ZXMoKSB7XG4gICAgdmFyIG4gPSAwO1xuICAgIHZhciBpO1xuICAgIGZvciAoaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBuID0gbiArIHRoaXNbaV0ubGVuZ3RoO1xuICAgIH1cbiAgICByZXR1cm4galN0YXQuZnRlc3QodGhpcy5hbm92YWZzY29yZSgpLCB0aGlzLmxlbmd0aCAtIDEsIG4gLSB0aGlzLmxlbmd0aCk7XG4gIH1cbn0pO1xuXG4vLyBUdWtleSdzIHJhbmdlIHRlc3RcbmpTdGF0LmV4dGVuZCh7XG4gIC8vIDIgcGFyYW1ldGVyIGxpc3RzXG4gIC8vIChtZWFuMSwgbWVhbjIsIG4xLCBuMiwgc2QpXG4gIC8vIChhcnJheTEsIGFycmF5Miwgc2QpXG4gIHFzY29yZTogZnVuY3Rpb24gcXNjb3JlKCkge1xuICAgIHZhciBhcmdzID0gc2xpY2UuY2FsbChhcmd1bWVudHMpO1xuICAgIHZhciBtZWFuMSwgbWVhbjIsIG4xLCBuMiwgc2Q7XG4gICAgaWYgKGlzTnVtYmVyKGFyZ3NbMF0pKSB7XG4gICAgICAgIG1lYW4xID0gYXJnc1swXTtcbiAgICAgICAgbWVhbjIgPSBhcmdzWzFdO1xuICAgICAgICBuMSA9IGFyZ3NbMl07XG4gICAgICAgIG4yID0gYXJnc1szXTtcbiAgICAgICAgc2QgPSBhcmdzWzRdO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIG1lYW4xID0galN0YXQubWVhbihhcmdzWzBdKTtcbiAgICAgICAgbWVhbjIgPSBqU3RhdC5tZWFuKGFyZ3NbMV0pO1xuICAgICAgICBuMSA9IGFyZ3NbMF0ubGVuZ3RoO1xuICAgICAgICBuMiA9IGFyZ3NbMV0ubGVuZ3RoO1xuICAgICAgICBzZCA9IGFyZ3NbMl07XG4gICAgfVxuICAgIHJldHVybiBNYXRoLmFicyhtZWFuMSAtIG1lYW4yKSAvIChzZCAqIE1hdGguc3FydCgoMSAvIG4xICsgMSAvIG4yKSAvIDIpKTtcbiAgfSxcblxuICAvLyAzIGRpZmZlcmVudCBwYXJhbWV0ZXIgbGlzdHM6XG4gIC8vIChxc2NvcmUsIG4sIGspXG4gIC8vIChtZWFuMSwgbWVhbjIsIG4xLCBuMiwgc2QsIG4sIGspXG4gIC8vIChhcnJheTEsIGFycmF5Miwgc2QsIG4sIGspXG4gIHF0ZXN0OiBmdW5jdGlvbiBxdGVzdCgpIHtcbiAgICB2YXIgYXJncyA9IHNsaWNlLmNhbGwoYXJndW1lbnRzKTtcblxuICAgIHZhciBxc2NvcmU7XG4gICAgaWYgKGFyZ3MubGVuZ3RoID09PSAzKSB7XG4gICAgICBxc2NvcmUgPSBhcmdzWzBdO1xuICAgICAgYXJncyA9IGFyZ3Muc2xpY2UoMSk7XG4gICAgfSBlbHNlIGlmIChhcmdzLmxlbmd0aCA9PT0gNykge1xuICAgICAgcXNjb3JlID0galN0YXQucXNjb3JlKGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0sIGFyZ3NbM10sIGFyZ3NbNF0pO1xuICAgICAgYXJncyA9IGFyZ3Muc2xpY2UoNSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHFzY29yZSA9IGpTdGF0LnFzY29yZShhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdKTtcbiAgICAgIGFyZ3MgPSBhcmdzLnNsaWNlKDMpO1xuICAgIH1cblxuICAgIHZhciBuID0gYXJnc1swXTtcbiAgICB2YXIgayA9IGFyZ3NbMV07XG5cbiAgICByZXR1cm4gMSAtIGpTdGF0LnR1a2V5LmNkZihxc2NvcmUsIGssIG4gLSBrKTtcbiAgfSxcblxuICB0dWtleWhzZDogZnVuY3Rpb24gdHVrZXloc2QoYXJyYXlzKSB7XG4gICAgdmFyIHNkID0galN0YXQucG9vbGVkc3RkZXYoYXJyYXlzKTtcbiAgICB2YXIgbWVhbnMgPSBhcnJheXMubWFwKGZ1bmN0aW9uIChhcnIpIHtyZXR1cm4galN0YXQubWVhbihhcnIpO30pO1xuICAgIHZhciBuID0gYXJyYXlzLnJlZHVjZShmdW5jdGlvbiAobiwgYXJyKSB7cmV0dXJuIG4gKyBhcnIubGVuZ3RoO30sIDApO1xuXG4gICAgdmFyIHJlc3VsdHMgPSBbXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFycmF5cy5sZW5ndGg7ICsraSkge1xuICAgICAgICBmb3IgKHZhciBqID0gaSArIDE7IGogPCBhcnJheXMubGVuZ3RoOyArK2opIHtcbiAgICAgICAgICAgIHZhciBwID0galN0YXQucXRlc3QobWVhbnNbaV0sIG1lYW5zW2pdLCBhcnJheXNbaV0ubGVuZ3RoLCBhcnJheXNbal0ubGVuZ3RoLCBzZCwgbiwgYXJyYXlzLmxlbmd0aCk7XG4gICAgICAgICAgICByZXN1bHRzLnB1c2goW1tpLCBqXSwgcF0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdHM7XG4gIH1cbn0pO1xuXG4vLyBFcnJvciBCb3VuZHNcbmpTdGF0LmV4dGVuZCh7XG4gIC8vIDIgZGlmZmVyZW50IHBhcmFtZXRlciBzZXR1cHNcbiAgLy8gKHZhbHVlLCBhbHBoYSwgc2QsIG4pXG4gIC8vICh2YWx1ZSwgYWxwaGEsIGFycmF5KVxuICBub3JtYWxjaTogZnVuY3Rpb24gbm9ybWFsY2koKSB7XG4gICAgdmFyIGFyZ3MgPSBzbGljZS5jYWxsKGFyZ3VtZW50cyksXG4gICAgYW5zID0gbmV3IEFycmF5KDIpLFxuICAgIGNoYW5nZTtcbiAgICBpZiAoYXJncy5sZW5ndGggPT09IDQpIHtcbiAgICAgIGNoYW5nZSA9IE1hdGguYWJzKGpTdGF0Lm5vcm1hbC5pbnYoYXJnc1sxXSAvIDIsIDAsIDEpICpcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3NbMl0gLyBNYXRoLnNxcnQoYXJnc1szXSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjaGFuZ2UgPSBNYXRoLmFicyhqU3RhdC5ub3JtYWwuaW52KGFyZ3NbMV0gLyAyLCAwLCAxKSAqXG4gICAgICAgICAgICAgICAgICAgICAgICBqU3RhdC5zdGRldihhcmdzWzJdKSAvIE1hdGguc3FydChhcmdzWzJdLmxlbmd0aCkpO1xuICAgIH1cbiAgICBhbnNbMF0gPSBhcmdzWzBdIC0gY2hhbmdlO1xuICAgIGFuc1sxXSA9IGFyZ3NbMF0gKyBjaGFuZ2U7XG4gICAgcmV0dXJuIGFucztcbiAgfSxcblxuICAvLyAyIGRpZmZlcmVudCBwYXJhbWV0ZXIgc2V0dXBzXG4gIC8vICh2YWx1ZSwgYWxwaGEsIHNkLCBuKVxuICAvLyAodmFsdWUsIGFscGhhLCBhcnJheSlcbiAgdGNpOiBmdW5jdGlvbiB0Y2koKSB7XG4gICAgdmFyIGFyZ3MgPSBzbGljZS5jYWxsKGFyZ3VtZW50cyksXG4gICAgYW5zID0gbmV3IEFycmF5KDIpLFxuICAgIGNoYW5nZTtcbiAgICBpZiAoYXJncy5sZW5ndGggPT09IDQpIHtcbiAgICAgIGNoYW5nZSA9IE1hdGguYWJzKGpTdGF0LnN0dWRlbnR0LmludihhcmdzWzFdIC8gMiwgYXJnc1szXSAtIDEpICpcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3NbMl0gLyBNYXRoLnNxcnQoYXJnc1szXSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjaGFuZ2UgPSBNYXRoLmFicyhqU3RhdC5zdHVkZW50dC5pbnYoYXJnc1sxXSAvIDIsIGFyZ3NbMl0ubGVuZ3RoIC0gMSkgKlxuICAgICAgICAgICAgICAgICAgICAgICAgalN0YXQuc3RkZXYoYXJnc1syXSwgdHJ1ZSkgLyBNYXRoLnNxcnQoYXJnc1syXS5sZW5ndGgpKTtcbiAgICB9XG4gICAgYW5zWzBdID0gYXJnc1swXSAtIGNoYW5nZTtcbiAgICBhbnNbMV0gPSBhcmdzWzBdICsgY2hhbmdlO1xuICAgIHJldHVybiBhbnM7XG4gIH0sXG5cbiAgc2lnbmlmaWNhbnQ6IGZ1bmN0aW9uIHNpZ25pZmljYW50KHB2YWx1ZSwgYWxwaGEpIHtcbiAgICByZXR1cm4gcHZhbHVlIDwgYWxwaGE7XG4gIH1cbn0pO1xuXG5qU3RhdC5leHRlbmQoalN0YXQuZm4sIHtcbiAgbm9ybWFsY2k6IGZ1bmN0aW9uIG5vcm1hbGNpKHZhbHVlLCBhbHBoYSkge1xuICAgIHJldHVybiBqU3RhdC5ub3JtYWxjaSh2YWx1ZSwgYWxwaGEsIHRoaXMudG9BcnJheSgpKTtcbiAgfSxcblxuICB0Y2k6IGZ1bmN0aW9uIHRjaSh2YWx1ZSwgYWxwaGEpIHtcbiAgICByZXR1cm4galN0YXQudGNpKHZhbHVlLCBhbHBoYSwgdGhpcy50b0FycmF5KCkpO1xuICB9XG59KTtcblxuLy8gaW50ZXJuYWwgbWV0aG9kIGZvciBjYWxjdWxhdGluZyB0aGUgei1zY29yZSBmb3IgYSBkaWZmZXJlbmNlIG9mIHByb3BvcnRpb25zIHRlc3RcbmZ1bmN0aW9uIGRpZmZlcmVuY2VPZlByb3BvcnRpb25zKHAxLCBuMSwgcDIsIG4yKSB7XG4gIGlmIChwMSA+IDEgfHwgcDIgPiAxIHx8IHAxIDw9IDAgfHwgcDIgPD0gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIlByb3BvcnRpb25zIHNob3VsZCBiZSBncmVhdGVyIHRoYW4gMCBhbmQgbGVzcyB0aGFuIDFcIilcbiAgfVxuICB2YXIgcG9vbGVkID0gKHAxICogbjEgKyBwMiAqIG4yKSAvIChuMSArIG4yKTtcbiAgdmFyIHNlID0gTWF0aC5zcXJ0KHBvb2xlZCAqICgxIC0gcG9vbGVkKSAqICgoMS9uMSkgKyAoMS9uMikpKTtcbiAgcmV0dXJuIChwMSAtIHAyKSAvIHNlO1xufVxuXG4vLyBEaWZmZXJlbmNlIG9mIFByb3BvcnRpb25zXG5qU3RhdC5leHRlbmQoalN0YXQuZm4sIHtcbiAgb25lU2lkZWREaWZmZXJlbmNlT2ZQcm9wb3J0aW9uczogZnVuY3Rpb24gb25lU2lkZWREaWZmZXJlbmNlT2ZQcm9wb3J0aW9ucyhwMSwgbjEsIHAyLCBuMikge1xuICAgIHZhciB6ID0gZGlmZmVyZW5jZU9mUHJvcG9ydGlvbnMocDEsIG4xLCBwMiwgbjIpO1xuICAgIHJldHVybiBqU3RhdC56dGVzdCh6LCAxKTtcbiAgfSxcblxuICB0d29TaWRlZERpZmZlcmVuY2VPZlByb3BvcnRpb25zOiBmdW5jdGlvbiB0d29TaWRlZERpZmZlcmVuY2VPZlByb3BvcnRpb25zKHAxLCBuMSwgcDIsIG4yKSB7XG4gICAgdmFyIHogPSBkaWZmZXJlbmNlT2ZQcm9wb3J0aW9ucyhwMSwgbjEsIHAyLCBuMik7XG4gICAgcmV0dXJuIGpTdGF0Lnp0ZXN0KHosIDIpO1xuICB9XG59KTtcblxufShqU3RhdCwgTWF0aCkpO1xualN0YXQubW9kZWxzID0gKGZ1bmN0aW9uKCl7XG4gIGZ1bmN0aW9uIHN1Yl9yZWdyZXNzKGV4b2cpIHtcbiAgICB2YXIgdmFyX2NvdW50ID0gZXhvZ1swXS5sZW5ndGg7XG4gICAgdmFyIG1vZGVsTGlzdCA9IGpTdGF0LmFyYW5nZSh2YXJfY291bnQpLm1hcChmdW5jdGlvbihlbmRvZ19pbmRleCkge1xuICAgICAgdmFyIGV4b2dfaW5kZXggPVxuICAgICAgICAgIGpTdGF0LmFyYW5nZSh2YXJfY291bnQpLmZpbHRlcihmdW5jdGlvbihpKXtyZXR1cm4gaSE9PWVuZG9nX2luZGV4fSk7XG4gICAgICByZXR1cm4gb2xzKGpTdGF0LmNvbChleG9nLCBlbmRvZ19pbmRleCkubWFwKGZ1bmN0aW9uKHgpeyByZXR1cm4geFswXSB9KSxcbiAgICAgICAgICAgICAgICAgalN0YXQuY29sKGV4b2csIGV4b2dfaW5kZXgpKVxuICAgIH0pO1xuICAgIHJldHVybiBtb2RlbExpc3Q7XG4gIH1cblxuICAvLyBkbyBPTFMgbW9kZWwgcmVncmVzc1xuICAvLyBleG9nIGhhdmUgaW5jbHVkZSBjb25zdCBjb2x1bW5zICxpdCB3aWxsIG5vdCBnZW5lcmF0ZSBpdCAuSW4gZmFjdCwgZXhvZyBpc1xuICAvLyBcImRlc2lnbiBtYXRyaXhcIiBsb29rIGF0XG4gIC8vaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvRGVzaWduX21hdHJpeFxuICBmdW5jdGlvbiBvbHMoZW5kb2csIGV4b2cpIHtcbiAgICB2YXIgbm9icyA9IGVuZG9nLmxlbmd0aDtcbiAgICB2YXIgZGZfbW9kZWwgPSBleG9nWzBdLmxlbmd0aCAtIDE7XG4gICAgdmFyIGRmX3Jlc2lkID0gbm9icy1kZl9tb2RlbCAtIDE7XG4gICAgdmFyIGNvZWYgPSBqU3RhdC5sc3RzcShleG9nLCBlbmRvZyk7XG4gICAgdmFyIHByZWRpY3QgPVxuICAgICAgICBqU3RhdC5tdWx0aXBseShleG9nLCBjb2VmLm1hcChmdW5jdGlvbih4KSB7IHJldHVybiBbeF0gfSkpXG4gICAgICAgICAgICAubWFwKGZ1bmN0aW9uKHApIHsgcmV0dXJuIHBbMF0gfSk7XG4gICAgdmFyIHJlc2lkID0galN0YXQuc3VidHJhY3QoZW5kb2csIHByZWRpY3QpO1xuICAgIHZhciB5YmFyID0galN0YXQubWVhbihlbmRvZyk7XG4gICAgLy8gY29uc3RhbnQgY2F1c2UgcHJvYmxlbVxuICAgIC8vIHZhciBTU1QgPSBqU3RhdC5zdW0oZW5kb2cubWFwKGZ1bmN0aW9uKHkpIHtcbiAgICAvLyAgIHJldHVybiBNYXRoLnBvdyh5LXliYXIsMik7XG4gICAgLy8gfSkpO1xuICAgIHZhciBTU0UgPSBqU3RhdC5zdW0ocHJlZGljdC5tYXAoZnVuY3Rpb24oZikge1xuICAgICAgcmV0dXJuIE1hdGgucG93KGYgLSB5YmFyLCAyKTtcbiAgICB9KSk7XG4gICAgdmFyIFNTUiA9IGpTdGF0LnN1bShlbmRvZy5tYXAoZnVuY3Rpb24oeSwgaSkge1xuICAgICAgcmV0dXJuIE1hdGgucG93KHkgLSBwcmVkaWN0W2ldLCAyKTtcbiAgICB9KSk7XG4gICAgdmFyIFNTVCA9IFNTRSArIFNTUjtcbiAgICB2YXIgUjIgPSAoU1NFIC8gU1NUKTtcbiAgICByZXR1cm4ge1xuICAgICAgICBleG9nOmV4b2csXG4gICAgICAgIGVuZG9nOmVuZG9nLFxuICAgICAgICBub2JzOm5vYnMsXG4gICAgICAgIGRmX21vZGVsOmRmX21vZGVsLFxuICAgICAgICBkZl9yZXNpZDpkZl9yZXNpZCxcbiAgICAgICAgY29lZjpjb2VmLFxuICAgICAgICBwcmVkaWN0OnByZWRpY3QsXG4gICAgICAgIHJlc2lkOnJlc2lkLFxuICAgICAgICB5YmFyOnliYXIsXG4gICAgICAgIFNTVDpTU1QsXG4gICAgICAgIFNTRTpTU0UsXG4gICAgICAgIFNTUjpTU1IsXG4gICAgICAgIFIyOlIyXG4gICAgfTtcbiAgfVxuXG4gIC8vIEgwOiBiX0k9MFxuICAvLyBIMTogYl9JIT0wXG4gIGZ1bmN0aW9uIHRfdGVzdChtb2RlbCkge1xuICAgIHZhciBzdWJNb2RlbExpc3QgPSBzdWJfcmVncmVzcyhtb2RlbC5leG9nKTtcbiAgICAvL3ZhciBzaWdtYUhhdD1qU3RhdC5zdGRldihtb2RlbC5yZXNpZCk7XG4gICAgdmFyIHNpZ21hSGF0ID0gTWF0aC5zcXJ0KG1vZGVsLlNTUiAvIChtb2RlbC5kZl9yZXNpZCkpO1xuICAgIHZhciBzZUJldGFIYXQgPSBzdWJNb2RlbExpc3QubWFwKGZ1bmN0aW9uKG1vZCkge1xuICAgICAgdmFyIFNTVCA9IG1vZC5TU1Q7XG4gICAgICB2YXIgUjIgPSBtb2QuUjI7XG4gICAgICByZXR1cm4gc2lnbWFIYXQgLyBNYXRoLnNxcnQoU1NUICogKDEgLSBSMikpO1xuICAgIH0pO1xuICAgIHZhciB0U3RhdGlzdGljID0gbW9kZWwuY29lZi5tYXAoZnVuY3Rpb24oY29lZiwgaSkge1xuICAgICAgcmV0dXJuIChjb2VmIC0gMCkgLyBzZUJldGFIYXRbaV07XG4gICAgfSk7XG4gICAgdmFyIHBWYWx1ZSA9IHRTdGF0aXN0aWMubWFwKGZ1bmN0aW9uKHQpIHtcbiAgICAgIHZhciBsZWZ0cHBmID0galN0YXQuc3R1ZGVudHQuY2RmKHQsIG1vZGVsLmRmX3Jlc2lkKTtcbiAgICAgIHJldHVybiAobGVmdHBwZiA+IDAuNSA/IDEgLSBsZWZ0cHBmIDogbGVmdHBwZikgKiAyO1xuICAgIH0pO1xuICAgIHZhciBjID0galN0YXQuc3R1ZGVudHQuaW52KDAuOTc1LCBtb2RlbC5kZl9yZXNpZCk7XG4gICAgdmFyIGludGVydmFsOTUgPSBtb2RlbC5jb2VmLm1hcChmdW5jdGlvbihjb2VmLCBpKSB7XG4gICAgICB2YXIgZCA9IGMgKiBzZUJldGFIYXRbaV07XG4gICAgICByZXR1cm4gW2NvZWYgLSBkLCBjb2VmICsgZF07XG4gICAgfSlcbiAgICByZXR1cm4ge1xuICAgICAgICBzZTogc2VCZXRhSGF0LFxuICAgICAgICB0OiB0U3RhdGlzdGljLFxuICAgICAgICBwOiBwVmFsdWUsXG4gICAgICAgIHNpZ21hSGF0OiBzaWdtYUhhdCxcbiAgICAgICAgaW50ZXJ2YWw5NTogaW50ZXJ2YWw5NVxuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiBGX3Rlc3QobW9kZWwpIHtcbiAgICB2YXIgRl9zdGF0aXN0aWMgPVxuICAgICAgICAobW9kZWwuUjIgLyBtb2RlbC5kZl9tb2RlbCkgLyAoKDEgLSBtb2RlbC5SMikgLyBtb2RlbC5kZl9yZXNpZCk7XG4gICAgdmFyIGZjZGYgPSBmdW5jdGlvbih4LCBuMSwgbjIpIHtcbiAgICAgIHJldHVybiBqU3RhdC5iZXRhLmNkZih4IC8gKG4yIC8gbjEgKyB4KSwgbjEgLyAyLCBuMiAvIDIpXG4gICAgfVxuICAgIHZhciBwdmFsdWUgPSAxIC0gZmNkZihGX3N0YXRpc3RpYywgbW9kZWwuZGZfbW9kZWwsIG1vZGVsLmRmX3Jlc2lkKTtcbiAgICByZXR1cm4geyBGX3N0YXRpc3RpYzogRl9zdGF0aXN0aWMsIHB2YWx1ZTogcHZhbHVlIH07XG4gIH1cblxuICBmdW5jdGlvbiBvbHNfd3JhcChlbmRvZywgZXhvZykge1xuICAgIHZhciBtb2RlbCA9IG9scyhlbmRvZyxleG9nKTtcbiAgICB2YXIgdHRlc3QgPSB0X3Rlc3QobW9kZWwpO1xuICAgIHZhciBmdGVzdCA9IEZfdGVzdChtb2RlbCk7XG4gICAgLy8gUHJvdmlkZSB0aGUgV2hlcnJ5IC8gRXpla2llbCAvIE1jTmVtYXIgLyBDb2hlbiBBZGp1c3RlZCBSXjJcbiAgICAvLyBXaGljaCBtYXRjaGVzIHRoZSAnYWRqdXN0ZWQgUl4yJyBwcm92aWRlZCBieSBSJ3MgbG0gcGFja2FnZVxuICAgIHZhciBhZGp1c3RfUjIgPVxuICAgICAgICAxIC0gKDEgLSBtb2RlbC5SMikgKiAoKG1vZGVsLm5vYnMgLSAxKSAvIChtb2RlbC5kZl9yZXNpZCkpO1xuICAgIG1vZGVsLnQgPSB0dGVzdDtcbiAgICBtb2RlbC5mID0gZnRlc3Q7XG4gICAgbW9kZWwuYWRqdXN0X1IyID0gYWRqdXN0X1IyO1xuICAgIHJldHVybiBtb2RlbDtcbiAgfVxuXG4gIHJldHVybiB7IG9sczogb2xzX3dyYXAgfTtcbn0pKCk7XG4vL1RvIHJlZ3Jlc3MsIHNpbXBseSBidWlsZCBYIG1hdHJpeFxuLy8oYXBwZW5kIGNvbHVtbiBvZiAxJ3MpIHVzaW5nXG4vL2J1aWxkeG1hdHJpeCBhbmQgYnVpbGQgdGhlIFlcbi8vbWF0cml4IHVzaW5nIGJ1aWxkeW1hdHJpeFxuLy8oc2ltcGx5IHRoZSB0cmFuc3Bvc2UpXG4vL2FuZCBydW4gcmVncmVzcy5cblxuXG5cbi8vUmVncmVzc2lvbnNcblxualN0YXQuZXh0ZW5kKHtcbiAgYnVpbGR4bWF0cml4OiBmdW5jdGlvbiBidWlsZHhtYXRyaXgoKXtcbiAgICAvL1BhcmFtZXRlcnMgd2lsbCBiZSBwYXNzZWQgaW4gYXMgc3VjaFxuICAgIC8vKGFycmF5MSxhcnJheTIsYXJyYXkzLC4uLilcbiAgICAvL2FzICh4MSx4Mix4MywuLi4pXG4gICAgLy9uZWVkcyB0byBiZSAoMSx4MSx4Mix4MywuLi4pXG4gICAgdmFyIG1hdHJpeFJvd3MgPSBuZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aCk7XG4gICAgZm9yKHZhciBpPTA7aTxhcmd1bWVudHMubGVuZ3RoO2krKyl7XG4gICAgICB2YXIgYXJyYXkgPSBbMV07XG4gICAgICBtYXRyaXhSb3dzW2ldPSBhcnJheS5jb25jYXQoYXJndW1lbnRzW2ldKTtcbiAgICB9XG4gICAgcmV0dXJuIGpTdGF0KG1hdHJpeFJvd3MpO1xuXG4gIH0sXG5cbiAgYnVpbGRkeG1hdHJpeDogZnVuY3Rpb24gYnVpbGRkeG1hdHJpeCgpIHtcbiAgICAvL1BhcmFtdGVycyB3aWxsIGJlIHBhc3NlZCBpbiBhcyBzdWNoXG4gICAgLy8oW2FycmF5MSxhcnJheTIsLi4uXVxuICAgIHZhciBtYXRyaXhSb3dzID0gbmV3IEFycmF5KGFyZ3VtZW50c1swXS5sZW5ndGgpO1xuICAgIGZvcih2YXIgaT0wO2k8YXJndW1lbnRzWzBdLmxlbmd0aDtpKyspe1xuICAgICAgdmFyIGFycmF5ID0gWzFdXG4gICAgICBtYXRyaXhSb3dzW2ldPSBhcnJheS5jb25jYXQoYXJndW1lbnRzWzBdW2ldKTtcbiAgICB9XG4gICAgcmV0dXJuIGpTdGF0KG1hdHJpeFJvd3MpO1xuXG4gIH0sXG5cbiAgYnVpbGRqeG1hdHJpeDogZnVuY3Rpb24gYnVpbGRqeG1hdHJpeChqTWF0KSB7XG4gICAgLy9CdWlsZHMgZnJvbSBqU3RhdCBNYXRyaXhcbiAgICB2YXIgcGFzcyA9IG5ldyBBcnJheShqTWF0Lmxlbmd0aClcbiAgICBmb3IodmFyIGk9MDtpPGpNYXQubGVuZ3RoO2krKyl7XG4gICAgICBwYXNzW2ldID0gak1hdFtpXTtcbiAgICB9XG4gICAgcmV0dXJuIGpTdGF0LmJ1aWxkZHhtYXRyaXgocGFzcyk7XG5cbiAgfSxcblxuICBidWlsZHltYXRyaXg6IGZ1bmN0aW9uIGJ1aWxkeW1hdHJpeChhcnJheSl7XG4gICAgcmV0dXJuIGpTdGF0KGFycmF5KS50cmFuc3Bvc2UoKTtcbiAgfSxcblxuICBidWlsZGp5bWF0cml4OiBmdW5jdGlvbiBidWlsZGp5bWF0cml4KGpNYXQpe1xuICAgIHJldHVybiBqTWF0LnRyYW5zcG9zZSgpO1xuICB9LFxuXG4gIG1hdHJpeG11bHQ6IGZ1bmN0aW9uIG1hdHJpeG11bHQoQSxCKXtcbiAgICB2YXIgaSwgaiwgaywgcmVzdWx0LCBzdW07XG4gICAgaWYgKEEuY29scygpID09IEIucm93cygpKSB7XG4gICAgICBpZihCLnJvd3MoKT4xKXtcbiAgICAgICAgcmVzdWx0ID0gW107XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBBLnJvd3MoKTsgaSsrKSB7XG4gICAgICAgICAgcmVzdWx0W2ldID0gW107XG4gICAgICAgICAgZm9yIChqID0gMDsgaiA8IEIuY29scygpOyBqKyspIHtcbiAgICAgICAgICAgIHN1bSA9IDA7XG4gICAgICAgICAgICBmb3IgKGsgPSAwOyBrIDwgQS5jb2xzKCk7IGsrKykge1xuICAgICAgICAgICAgICBzdW0gKz0gQS50b0FycmF5KClbaV1ba10gKiBCLnRvQXJyYXkoKVtrXVtqXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlc3VsdFtpXVtqXSA9IHN1bTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGpTdGF0KHJlc3VsdCk7XG4gICAgICB9XG4gICAgICByZXN1bHQgPSBbXTtcbiAgICAgIGZvciAoaSA9IDA7IGkgPCBBLnJvd3MoKTsgaSsrKSB7XG4gICAgICAgIHJlc3VsdFtpXSA9IFtdO1xuICAgICAgICBmb3IgKGogPSAwOyBqIDwgQi5jb2xzKCk7IGorKykge1xuICAgICAgICAgIHN1bSA9IDA7XG4gICAgICAgICAgZm9yIChrID0gMDsgayA8IEEuY29scygpOyBrKyspIHtcbiAgICAgICAgICAgIHN1bSArPSBBLnRvQXJyYXkoKVtpXVtrXSAqIEIudG9BcnJheSgpW2pdO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXN1bHRbaV1bal0gPSBzdW07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBqU3RhdChyZXN1bHQpO1xuICAgIH1cbiAgfSxcblxuICAvL3JlZ3Jlc3MgYW5kIHJlZ3Jlc3N0IHRvIGJlIGZpeGVkXG5cbiAgcmVncmVzczogZnVuY3Rpb24gcmVncmVzcyhqTWF0WCxqTWF0WSl7XG4gICAgLy9wcmludChcInJlZ3Jlc3NpbiFcIik7XG4gICAgLy9wcmludChqTWF0WC50b0FycmF5KCkpO1xuICAgIHZhciBpbm5lcmludiA9IGpTdGF0Lnh0cmFuc3B4aW52KGpNYXRYKTtcbiAgICAvL3ByaW50KGlubmVyaW52KTtcbiAgICB2YXIgeHRyYW5zcCA9IGpNYXRYLnRyYW5zcG9zZSgpO1xuICAgIHZhciBuZXh0ID0galN0YXQubWF0cml4bXVsdChqU3RhdChpbm5lcmludikseHRyYW5zcCk7XG4gICAgcmV0dXJuIGpTdGF0Lm1hdHJpeG11bHQobmV4dCxqTWF0WSk7XG5cbiAgfSxcblxuICByZWdyZXNzdDogZnVuY3Rpb24gcmVncmVzc3Qoak1hdFgsak1hdFksc2lkZXMpe1xuICAgIHZhciBiZXRhID0galN0YXQucmVncmVzcyhqTWF0WCxqTWF0WSk7XG5cbiAgICB2YXIgY29tcGlsZSA9IHt9O1xuICAgIGNvbXBpbGUuYW5vdmEgPSB7fTtcbiAgICB2YXIgak1hdFlCYXIgPSBqU3RhdC5qTWF0WUJhcihqTWF0WCwgYmV0YSk7XG4gICAgY29tcGlsZS55QmFyID0gak1hdFlCYXI7XG4gICAgdmFyIHlBdmVyYWdlID0gak1hdFkubWVhbigpO1xuICAgIGNvbXBpbGUuYW5vdmEucmVzaWR1YWxzID0galN0YXQucmVzaWR1YWxzKGpNYXRZLCBqTWF0WUJhcik7XG5cbiAgICBjb21waWxlLmFub3ZhLnNzciA9IGpTdGF0LnNzcihqTWF0WUJhciwgeUF2ZXJhZ2UpO1xuICAgIGNvbXBpbGUuYW5vdmEubXNyID0gY29tcGlsZS5hbm92YS5zc3IgLyAoak1hdFhbMF0ubGVuZ3RoIC0gMSk7XG5cbiAgICBjb21waWxlLmFub3ZhLnNzZSA9IGpTdGF0LnNzZShqTWF0WSwgak1hdFlCYXIpO1xuICAgIGNvbXBpbGUuYW5vdmEubXNlID1cbiAgICAgICAgY29tcGlsZS5hbm92YS5zc2UgLyAoak1hdFkubGVuZ3RoIC0gKGpNYXRYWzBdLmxlbmd0aCAtIDEpIC0gMSk7XG5cbiAgICBjb21waWxlLmFub3ZhLnNzdCA9IGpTdGF0LnNzdChqTWF0WSwgeUF2ZXJhZ2UpO1xuICAgIGNvbXBpbGUuYW5vdmEubXN0ID0gY29tcGlsZS5hbm92YS5zc3QgLyAoak1hdFkubGVuZ3RoIC0gMSk7XG5cbiAgICBjb21waWxlLmFub3ZhLnIyID0gMSAtIChjb21waWxlLmFub3ZhLnNzZSAvIGNvbXBpbGUuYW5vdmEuc3N0KTtcbiAgICBpZiAoY29tcGlsZS5hbm92YS5yMiA8IDApIGNvbXBpbGUuYW5vdmEucjIgPSAwO1xuXG4gICAgY29tcGlsZS5hbm92YS5mcmF0aW8gPSBjb21waWxlLmFub3ZhLm1zciAvIGNvbXBpbGUuYW5vdmEubXNlO1xuICAgIGNvbXBpbGUuYW5vdmEucHZhbHVlID1cbiAgICAgICAgalN0YXQuYW5vdmFmdGVzdChjb21waWxlLmFub3ZhLmZyYXRpbyxcbiAgICAgICAgICAgICAgICAgICAgICAgICBqTWF0WFswXS5sZW5ndGggLSAxLFxuICAgICAgICAgICAgICAgICAgICAgICAgIGpNYXRZLmxlbmd0aCAtIChqTWF0WFswXS5sZW5ndGggLSAxKSAtIDEpO1xuXG4gICAgY29tcGlsZS5hbm92YS5ybXNlID0gTWF0aC5zcXJ0KGNvbXBpbGUuYW5vdmEubXNlKTtcblxuICAgIGNvbXBpbGUuYW5vdmEucjJhZGogPSAxIC0gKGNvbXBpbGUuYW5vdmEubXNlIC8gY29tcGlsZS5hbm92YS5tc3QpO1xuICAgIGlmIChjb21waWxlLmFub3ZhLnIyYWRqIDwgMCkgY29tcGlsZS5hbm92YS5yMmFkaiA9IDA7XG5cbiAgICBjb21waWxlLnN0YXRzID0gbmV3IEFycmF5KGpNYXRYWzBdLmxlbmd0aCk7XG4gICAgdmFyIGNvdmFyID0galN0YXQueHRyYW5zcHhpbnYoak1hdFgpO1xuICAgIHZhciBzZHMsIHRzLCBwcztcblxuICAgIGZvcih2YXIgaT0wOyBpPGJldGEubGVuZ3RoO2krKyl7XG4gICAgICBzZHM9TWF0aC5zcXJ0KGNvbXBpbGUuYW5vdmEubXNlICogTWF0aC5hYnMoY292YXJbaV1baV0pKTtcbiAgICAgIHRzPSBNYXRoLmFicyhiZXRhW2ldIC8gc2RzKTtcbiAgICAgIHBzPSBqU3RhdC50dGVzdCh0cywgak1hdFkubGVuZ3RoIC0gak1hdFhbMF0ubGVuZ3RoIC0gMSwgc2lkZXMpO1xuXG4gICAgICBjb21waWxlLnN0YXRzW2ldPVtiZXRhW2ldLCBzZHMsIHRzLCBwc107XG4gICAgfVxuXG4gICAgY29tcGlsZS5yZWdyZXNzID0gYmV0YTtcbiAgICByZXR1cm4gY29tcGlsZTtcbiAgfSxcblxuICB4dHJhbnNweDogZnVuY3Rpb24geHRyYW5zcHgoak1hdFgpe1xuICAgIHJldHVybiBqU3RhdC5tYXRyaXhtdWx0KGpNYXRYLnRyYW5zcG9zZSgpLGpNYXRYKTtcbiAgfSxcblxuXG4gIHh0cmFuc3B4aW52OiBmdW5jdGlvbiB4dHJhbnNweGludihqTWF0WCl7XG4gICAgdmFyIGlubmVyID0galN0YXQubWF0cml4bXVsdChqTWF0WC50cmFuc3Bvc2UoKSxqTWF0WCk7XG4gICAgdmFyIGlubmVyaW52ID0galN0YXQuaW52KGlubmVyKTtcbiAgICByZXR1cm4gaW5uZXJpbnY7XG4gIH0sXG5cbiAgak1hdFlCYXI6IGZ1bmN0aW9uIGpNYXRZQmFyKGpNYXRYLCBiZXRhKSB7XG4gICAgdmFyIHlCYXIgPSBqU3RhdC5tYXRyaXhtdWx0KGpNYXRYLCBiZXRhKTtcbiAgICByZXR1cm4gbmV3IGpTdGF0KHlCYXIpO1xuICB9LFxuXG4gIHJlc2lkdWFsczogZnVuY3Rpb24gcmVzaWR1YWxzKGpNYXRZLCBqTWF0WUJhcikge1xuICAgIHJldHVybiBqU3RhdC5tYXRyaXhzdWJ0cmFjdChqTWF0WSwgak1hdFlCYXIpO1xuICB9LFxuXG4gIHNzcjogZnVuY3Rpb24gc3NyKGpNYXRZQmFyLCB5QXZlcmFnZSkge1xuICAgIHZhciBzc3IgPSAwO1xuICAgIGZvcih2YXIgaSA9IDA7IGkgPCBqTWF0WUJhci5sZW5ndGg7IGkrKykge1xuICAgICAgc3NyICs9IE1hdGgucG93KGpNYXRZQmFyW2ldIC0geUF2ZXJhZ2UsIDIpO1xuICAgIH1cbiAgICByZXR1cm4gc3NyO1xuICB9LFxuXG4gIHNzZTogZnVuY3Rpb24gc3NlKGpNYXRZLCBqTWF0WUJhcikge1xuICAgIHZhciBzc2UgPSAwO1xuICAgIGZvcih2YXIgaSA9IDA7IGkgPCBqTWF0WS5sZW5ndGg7IGkrKykge1xuICAgICAgc3NlICs9IE1hdGgucG93KGpNYXRZW2ldIC0gak1hdFlCYXJbaV0sIDIpO1xuICAgIH1cbiAgICByZXR1cm4gc3NlO1xuICB9LFxuXG4gIHNzdDogZnVuY3Rpb24gc3N0KGpNYXRZLCB5QXZlcmFnZSkge1xuICAgIHZhciBzc3QgPSAwO1xuICAgIGZvcih2YXIgaSA9IDA7IGkgPCBqTWF0WS5sZW5ndGg7IGkrKykge1xuICAgICAgc3N0ICs9IE1hdGgucG93KGpNYXRZW2ldIC0geUF2ZXJhZ2UsIDIpO1xuICAgIH1cbiAgICByZXR1cm4gc3N0O1xuICB9LFxuXG4gIG1hdHJpeHN1YnRyYWN0OiBmdW5jdGlvbiBtYXRyaXhzdWJ0cmFjdChBLEIpe1xuICAgIHZhciBhbnMgPSBuZXcgQXJyYXkoQS5sZW5ndGgpO1xuICAgIGZvcih2YXIgaT0wO2k8QS5sZW5ndGg7aSsrKXtcbiAgICAgIGFuc1tpXSA9IG5ldyBBcnJheShBW2ldLmxlbmd0aCk7XG4gICAgICBmb3IodmFyIGo9MDtqPEFbaV0ubGVuZ3RoO2orKyl7XG4gICAgICAgIGFuc1tpXVtqXT1BW2ldW2pdLUJbaV1bal07XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBqU3RhdChhbnMpO1xuICB9XG59KTtcbiAgLy8gTWFrZSBpdCBjb21wYXRpYmxlIHdpdGggcHJldmlvdXMgdmVyc2lvbi5cbiAgalN0YXQualN0YXQgPSBqU3RhdDtcblxuICByZXR1cm4galN0YXQ7XG59KTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG52YXIgc3R5bGVzSW5ET00gPSBbXTtcbmZ1bmN0aW9uIGdldEluZGV4QnlJZGVudGlmaWVyKGlkZW50aWZpZXIpIHtcbiAgdmFyIHJlc3VsdCA9IC0xO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHN0eWxlc0luRE9NLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKHN0eWxlc0luRE9NW2ldLmlkZW50aWZpZXIgPT09IGlkZW50aWZpZXIpIHtcbiAgICAgIHJlc3VsdCA9IGk7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cbmZ1bmN0aW9uIG1vZHVsZXNUb0RvbShsaXN0LCBvcHRpb25zKSB7XG4gIHZhciBpZENvdW50TWFwID0ge307XG4gIHZhciBpZGVudGlmaWVycyA9IFtdO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgaXRlbSA9IGxpc3RbaV07XG4gICAgdmFyIGlkID0gb3B0aW9ucy5iYXNlID8gaXRlbVswXSArIG9wdGlvbnMuYmFzZSA6IGl0ZW1bMF07XG4gICAgdmFyIGNvdW50ID0gaWRDb3VudE1hcFtpZF0gfHwgMDtcbiAgICB2YXIgaWRlbnRpZmllciA9IFwiXCIuY29uY2F0KGlkLCBcIiBcIikuY29uY2F0KGNvdW50KTtcbiAgICBpZENvdW50TWFwW2lkXSA9IGNvdW50ICsgMTtcbiAgICB2YXIgaW5kZXhCeUlkZW50aWZpZXIgPSBnZXRJbmRleEJ5SWRlbnRpZmllcihpZGVudGlmaWVyKTtcbiAgICB2YXIgb2JqID0ge1xuICAgICAgY3NzOiBpdGVtWzFdLFxuICAgICAgbWVkaWE6IGl0ZW1bMl0sXG4gICAgICBzb3VyY2VNYXA6IGl0ZW1bM10sXG4gICAgICBzdXBwb3J0czogaXRlbVs0XSxcbiAgICAgIGxheWVyOiBpdGVtWzVdXG4gICAgfTtcbiAgICBpZiAoaW5kZXhCeUlkZW50aWZpZXIgIT09IC0xKSB7XG4gICAgICBzdHlsZXNJbkRPTVtpbmRleEJ5SWRlbnRpZmllcl0ucmVmZXJlbmNlcysrO1xuICAgICAgc3R5bGVzSW5ET01baW5kZXhCeUlkZW50aWZpZXJdLnVwZGF0ZXIob2JqKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIHVwZGF0ZXIgPSBhZGRFbGVtZW50U3R5bGUob2JqLCBvcHRpb25zKTtcbiAgICAgIG9wdGlvbnMuYnlJbmRleCA9IGk7XG4gICAgICBzdHlsZXNJbkRPTS5zcGxpY2UoaSwgMCwge1xuICAgICAgICBpZGVudGlmaWVyOiBpZGVudGlmaWVyLFxuICAgICAgICB1cGRhdGVyOiB1cGRhdGVyLFxuICAgICAgICByZWZlcmVuY2VzOiAxXG4gICAgICB9KTtcbiAgICB9XG4gICAgaWRlbnRpZmllcnMucHVzaChpZGVudGlmaWVyKTtcbiAgfVxuICByZXR1cm4gaWRlbnRpZmllcnM7XG59XG5mdW5jdGlvbiBhZGRFbGVtZW50U3R5bGUob2JqLCBvcHRpb25zKSB7XG4gIHZhciBhcGkgPSBvcHRpb25zLmRvbUFQSShvcHRpb25zKTtcbiAgYXBpLnVwZGF0ZShvYmopO1xuICB2YXIgdXBkYXRlciA9IGZ1bmN0aW9uIHVwZGF0ZXIobmV3T2JqKSB7XG4gICAgaWYgKG5ld09iaikge1xuICAgICAgaWYgKG5ld09iai5jc3MgPT09IG9iai5jc3MgJiYgbmV3T2JqLm1lZGlhID09PSBvYmoubWVkaWEgJiYgbmV3T2JqLnNvdXJjZU1hcCA9PT0gb2JqLnNvdXJjZU1hcCAmJiBuZXdPYmouc3VwcG9ydHMgPT09IG9iai5zdXBwb3J0cyAmJiBuZXdPYmoubGF5ZXIgPT09IG9iai5sYXllcikge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBhcGkudXBkYXRlKG9iaiA9IG5ld09iaik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFwaS5yZW1vdmUoKTtcbiAgICB9XG4gIH07XG4gIHJldHVybiB1cGRhdGVyO1xufVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAobGlzdCwgb3B0aW9ucykge1xuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgbGlzdCA9IGxpc3QgfHwgW107XG4gIHZhciBsYXN0SWRlbnRpZmllcnMgPSBtb2R1bGVzVG9Eb20obGlzdCwgb3B0aW9ucyk7XG4gIHJldHVybiBmdW5jdGlvbiB1cGRhdGUobmV3TGlzdCkge1xuICAgIG5ld0xpc3QgPSBuZXdMaXN0IHx8IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGFzdElkZW50aWZpZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgaWRlbnRpZmllciA9IGxhc3RJZGVudGlmaWVyc1tpXTtcbiAgICAgIHZhciBpbmRleCA9IGdldEluZGV4QnlJZGVudGlmaWVyKGlkZW50aWZpZXIpO1xuICAgICAgc3R5bGVzSW5ET01baW5kZXhdLnJlZmVyZW5jZXMtLTtcbiAgICB9XG4gICAgdmFyIG5ld0xhc3RJZGVudGlmaWVycyA9IG1vZHVsZXNUb0RvbShuZXdMaXN0LCBvcHRpb25zKTtcbiAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgbGFzdElkZW50aWZpZXJzLmxlbmd0aDsgX2krKykge1xuICAgICAgdmFyIF9pZGVudGlmaWVyID0gbGFzdElkZW50aWZpZXJzW19pXTtcbiAgICAgIHZhciBfaW5kZXggPSBnZXRJbmRleEJ5SWRlbnRpZmllcihfaWRlbnRpZmllcik7XG4gICAgICBpZiAoc3R5bGVzSW5ET01bX2luZGV4XS5yZWZlcmVuY2VzID09PSAwKSB7XG4gICAgICAgIHN0eWxlc0luRE9NW19pbmRleF0udXBkYXRlcigpO1xuICAgICAgICBzdHlsZXNJbkRPTS5zcGxpY2UoX2luZGV4LCAxKTtcbiAgICAgIH1cbiAgICB9XG4gICAgbGFzdElkZW50aWZpZXJzID0gbmV3TGFzdElkZW50aWZpZXJzO1xuICB9O1xufTsiLCJcInVzZSBzdHJpY3RcIjtcblxudmFyIG1lbW8gPSB7fTtcblxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgICovXG5mdW5jdGlvbiBnZXRUYXJnZXQodGFyZ2V0KSB7XG4gIGlmICh0eXBlb2YgbWVtb1t0YXJnZXRdID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgdmFyIHN0eWxlVGFyZ2V0ID0gZG9jdW1lbnQucXVlcnlTZWxlY3Rvcih0YXJnZXQpO1xuXG4gICAgLy8gU3BlY2lhbCBjYXNlIHRvIHJldHVybiBoZWFkIG9mIGlmcmFtZSBpbnN0ZWFkIG9mIGlmcmFtZSBpdHNlbGZcbiAgICBpZiAod2luZG93LkhUTUxJRnJhbWVFbGVtZW50ICYmIHN0eWxlVGFyZ2V0IGluc3RhbmNlb2Ygd2luZG93LkhUTUxJRnJhbWVFbGVtZW50KSB7XG4gICAgICB0cnkge1xuICAgICAgICAvLyBUaGlzIHdpbGwgdGhyb3cgYW4gZXhjZXB0aW9uIGlmIGFjY2VzcyB0byBpZnJhbWUgaXMgYmxvY2tlZFxuICAgICAgICAvLyBkdWUgdG8gY3Jvc3Mtb3JpZ2luIHJlc3RyaWN0aW9uc1xuICAgICAgICBzdHlsZVRhcmdldCA9IHN0eWxlVGFyZ2V0LmNvbnRlbnREb2N1bWVudC5oZWFkO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAvLyBpc3RhbmJ1bCBpZ25vcmUgbmV4dFxuICAgICAgICBzdHlsZVRhcmdldCA9IG51bGw7XG4gICAgICB9XG4gICAgfVxuICAgIG1lbW9bdGFyZ2V0XSA9IHN0eWxlVGFyZ2V0O1xuICB9XG4gIHJldHVybiBtZW1vW3RhcmdldF07XG59XG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICAqL1xuZnVuY3Rpb24gaW5zZXJ0QnlTZWxlY3RvcihpbnNlcnQsIHN0eWxlKSB7XG4gIHZhciB0YXJnZXQgPSBnZXRUYXJnZXQoaW5zZXJ0KTtcbiAgaWYgKCF0YXJnZXQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJDb3VsZG4ndCBmaW5kIGEgc3R5bGUgdGFyZ2V0LiBUaGlzIHByb2JhYmx5IG1lYW5zIHRoYXQgdGhlIHZhbHVlIGZvciB0aGUgJ2luc2VydCcgcGFyYW1ldGVyIGlzIGludmFsaWQuXCIpO1xuICB9XG4gIHRhcmdldC5hcHBlbmRDaGlsZChzdHlsZSk7XG59XG5tb2R1bGUuZXhwb3J0cyA9IGluc2VydEJ5U2VsZWN0b3I7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICAqL1xuZnVuY3Rpb24gaW5zZXJ0U3R5bGVFbGVtZW50KG9wdGlvbnMpIHtcbiAgdmFyIGVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic3R5bGVcIik7XG4gIG9wdGlvbnMuc2V0QXR0cmlidXRlcyhlbGVtZW50LCBvcHRpb25zLmF0dHJpYnV0ZXMpO1xuICBvcHRpb25zLmluc2VydChlbGVtZW50LCBvcHRpb25zLm9wdGlvbnMpO1xuICByZXR1cm4gZWxlbWVudDtcbn1cbm1vZHVsZS5leHBvcnRzID0gaW5zZXJ0U3R5bGVFbGVtZW50OyIsIlwidXNlIHN0cmljdFwiO1xuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAgKi9cbmZ1bmN0aW9uIHNldEF0dHJpYnV0ZXNXaXRob3V0QXR0cmlidXRlcyhzdHlsZUVsZW1lbnQpIHtcbiAgdmFyIG5vbmNlID0gdHlwZW9mIF9fd2VicGFja19ub25jZV9fICE9PSBcInVuZGVmaW5lZFwiID8gX193ZWJwYWNrX25vbmNlX18gOiBudWxsO1xuICBpZiAobm9uY2UpIHtcbiAgICBzdHlsZUVsZW1lbnQuc2V0QXR0cmlidXRlKFwibm9uY2VcIiwgbm9uY2UpO1xuICB9XG59XG5tb2R1bGUuZXhwb3J0cyA9IHNldEF0dHJpYnV0ZXNXaXRob3V0QXR0cmlidXRlczsiLCJcInVzZSBzdHJpY3RcIjtcblxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgICovXG5mdW5jdGlvbiBhcHBseShzdHlsZUVsZW1lbnQsIG9wdGlvbnMsIG9iaikge1xuICB2YXIgY3NzID0gXCJcIjtcbiAgaWYgKG9iai5zdXBwb3J0cykge1xuICAgIGNzcyArPSBcIkBzdXBwb3J0cyAoXCIuY29uY2F0KG9iai5zdXBwb3J0cywgXCIpIHtcIik7XG4gIH1cbiAgaWYgKG9iai5tZWRpYSkge1xuICAgIGNzcyArPSBcIkBtZWRpYSBcIi5jb25jYXQob2JqLm1lZGlhLCBcIiB7XCIpO1xuICB9XG4gIHZhciBuZWVkTGF5ZXIgPSB0eXBlb2Ygb2JqLmxheWVyICE9PSBcInVuZGVmaW5lZFwiO1xuICBpZiAobmVlZExheWVyKSB7XG4gICAgY3NzICs9IFwiQGxheWVyXCIuY29uY2F0KG9iai5sYXllci5sZW5ndGggPiAwID8gXCIgXCIuY29uY2F0KG9iai5sYXllcikgOiBcIlwiLCBcIiB7XCIpO1xuICB9XG4gIGNzcyArPSBvYmouY3NzO1xuICBpZiAobmVlZExheWVyKSB7XG4gICAgY3NzICs9IFwifVwiO1xuICB9XG4gIGlmIChvYmoubWVkaWEpIHtcbiAgICBjc3MgKz0gXCJ9XCI7XG4gIH1cbiAgaWYgKG9iai5zdXBwb3J0cykge1xuICAgIGNzcyArPSBcIn1cIjtcbiAgfVxuICB2YXIgc291cmNlTWFwID0gb2JqLnNvdXJjZU1hcDtcbiAgaWYgKHNvdXJjZU1hcCAmJiB0eXBlb2YgYnRvYSAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgIGNzcyArPSBcIlxcbi8qIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsXCIuY29uY2F0KGJ0b2EodW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KEpTT04uc3RyaW5naWZ5KHNvdXJjZU1hcCkpKSksIFwiICovXCIpO1xuICB9XG5cbiAgLy8gRm9yIG9sZCBJRVxuICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgICovXG4gIG9wdGlvbnMuc3R5bGVUYWdUcmFuc2Zvcm0oY3NzLCBzdHlsZUVsZW1lbnQsIG9wdGlvbnMub3B0aW9ucyk7XG59XG5mdW5jdGlvbiByZW1vdmVTdHlsZUVsZW1lbnQoc3R5bGVFbGVtZW50KSB7XG4gIC8vIGlzdGFuYnVsIGlnbm9yZSBpZlxuICBpZiAoc3R5bGVFbGVtZW50LnBhcmVudE5vZGUgPT09IG51bGwpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgc3R5bGVFbGVtZW50LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoc3R5bGVFbGVtZW50KTtcbn1cblxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgICovXG5mdW5jdGlvbiBkb21BUEkob3B0aW9ucykge1xuICBpZiAodHlwZW9mIGRvY3VtZW50ID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHVwZGF0ZTogZnVuY3Rpb24gdXBkYXRlKCkge30sXG4gICAgICByZW1vdmU6IGZ1bmN0aW9uIHJlbW92ZSgpIHt9XG4gICAgfTtcbiAgfVxuICB2YXIgc3R5bGVFbGVtZW50ID0gb3B0aW9ucy5pbnNlcnRTdHlsZUVsZW1lbnQob3B0aW9ucyk7XG4gIHJldHVybiB7XG4gICAgdXBkYXRlOiBmdW5jdGlvbiB1cGRhdGUob2JqKSB7XG4gICAgICBhcHBseShzdHlsZUVsZW1lbnQsIG9wdGlvbnMsIG9iaik7XG4gICAgfSxcbiAgICByZW1vdmU6IGZ1bmN0aW9uIHJlbW92ZSgpIHtcbiAgICAgIHJlbW92ZVN0eWxlRWxlbWVudChzdHlsZUVsZW1lbnQpO1xuICAgIH1cbiAgfTtcbn1cbm1vZHVsZS5leHBvcnRzID0gZG9tQVBJOyIsIlwidXNlIHN0cmljdFwiO1xuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAgKi9cbmZ1bmN0aW9uIHN0eWxlVGFnVHJhbnNmb3JtKGNzcywgc3R5bGVFbGVtZW50KSB7XG4gIGlmIChzdHlsZUVsZW1lbnQuc3R5bGVTaGVldCkge1xuICAgIHN0eWxlRWxlbWVudC5zdHlsZVNoZWV0LmNzc1RleHQgPSBjc3M7XG4gIH0gZWxzZSB7XG4gICAgd2hpbGUgKHN0eWxlRWxlbWVudC5maXJzdENoaWxkKSB7XG4gICAgICBzdHlsZUVsZW1lbnQucmVtb3ZlQ2hpbGQoc3R5bGVFbGVtZW50LmZpcnN0Q2hpbGQpO1xuICAgIH1cbiAgICBzdHlsZUVsZW1lbnQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoY3NzKSk7XG4gIH1cbn1cbm1vZHVsZS5leHBvcnRzID0gc3R5bGVUYWdUcmFuc2Zvcm07IiwiLy8gVGhlIG1vZHVsZSBjYWNoZVxudmFyIF9fd2VicGFja19tb2R1bGVfY2FjaGVfXyA9IHt9O1xuXG4vLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcblx0dmFyIGNhY2hlZE1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF07XG5cdGlmIChjYWNoZWRNb2R1bGUgIT09IHVuZGVmaW5lZCkge1xuXHRcdHJldHVybiBjYWNoZWRNb2R1bGUuZXhwb3J0cztcblx0fVxuXHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuXHR2YXIgbW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXSA9IHtcblx0XHRpZDogbW9kdWxlSWQsXG5cdFx0bG9hZGVkOiBmYWxzZSxcblx0XHRleHBvcnRzOiB7fVxuXHR9O1xuXG5cdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuXHRfX3dlYnBhY2tfbW9kdWxlc19fW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuXHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG5cdG1vZHVsZS5sb2FkZWQgPSB0cnVlO1xuXG5cdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG5cdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbn1cblxuLy8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbl9fd2VicGFja19yZXF1aXJlX18ubSA9IF9fd2VicGFja19tb2R1bGVzX187XG5cbiIsIl9fd2VicGFja19yZXF1aXJlX18uYW1kTyA9IHt9OyIsIi8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG5fX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSAobW9kdWxlKSA9PiB7XG5cdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuXHRcdCgpID0+IChtb2R1bGVbJ2RlZmF1bHQnXSkgOlxuXHRcdCgpID0+IChtb2R1bGUpO1xuXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCB7IGE6IGdldHRlciB9KTtcblx0cmV0dXJuIGdldHRlcjtcbn07IiwiLy8gZGVmaW5lIGdldHRlciBmdW5jdGlvbnMgZm9yIGhhcm1vbnkgZXhwb3J0c1xuX193ZWJwYWNrX3JlcXVpcmVfXy5kID0gKGV4cG9ydHMsIGRlZmluaXRpb24pID0+IHtcblx0Zm9yKHZhciBrZXkgaW4gZGVmaW5pdGlvbikge1xuXHRcdGlmKF9fd2VicGFja19yZXF1aXJlX18ubyhkZWZpbml0aW9uLCBrZXkpICYmICFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywga2V5KSkge1xuXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIGtleSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGRlZmluaXRpb25ba2V5XSB9KTtcblx0XHR9XG5cdH1cbn07IiwiLy8gVGhpcyBmdW5jdGlvbiBhbGxvdyB0byByZWZlcmVuY2UgYXN5bmMgY2h1bmtzXG5fX3dlYnBhY2tfcmVxdWlyZV9fLnUgPSAoY2h1bmtJZCkgPT4ge1xuXHQvLyByZXR1cm4gdXJsIGZvciBmaWxlbmFtZXMgYmFzZWQgb24gdGVtcGxhdGVcblx0cmV0dXJuIFwiXCIgKyBjaHVua0lkICsgXCIuanNcIjtcbn07IiwiX193ZWJwYWNrX3JlcXVpcmVfXy5nID0gKGZ1bmN0aW9uKCkge1xuXHRpZiAodHlwZW9mIGdsb2JhbFRoaXMgPT09ICdvYmplY3QnKSByZXR1cm4gZ2xvYmFsVGhpcztcblx0dHJ5IHtcblx0XHRyZXR1cm4gdGhpcyB8fCBuZXcgRnVuY3Rpb24oJ3JldHVybiB0aGlzJykoKTtcblx0fSBjYXRjaCAoZSkge1xuXHRcdGlmICh0eXBlb2Ygd2luZG93ID09PSAnb2JqZWN0JykgcmV0dXJuIHdpbmRvdztcblx0fVxufSkoKTsiLCJfX3dlYnBhY2tfcmVxdWlyZV9fLmhtZCA9IChtb2R1bGUpID0+IHtcblx0bW9kdWxlID0gT2JqZWN0LmNyZWF0ZShtb2R1bGUpO1xuXHRpZiAoIW1vZHVsZS5jaGlsZHJlbikgbW9kdWxlLmNoaWxkcmVuID0gW107XG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShtb2R1bGUsICdleHBvcnRzJywge1xuXHRcdGVudW1lcmFibGU6IHRydWUsXG5cdFx0c2V0OiAoKSA9PiB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoJ0VTIE1vZHVsZXMgbWF5IG5vdCBhc3NpZ24gbW9kdWxlLmV4cG9ydHMgb3IgZXhwb3J0cy4qLCBVc2UgRVNNIGV4cG9ydCBzeW50YXgsIGluc3RlYWQ6ICcgKyBtb2R1bGUuaWQpO1xuXHRcdH1cblx0fSk7XG5cdHJldHVybiBtb2R1bGU7XG59OyIsIl9fd2VicGFja19yZXF1aXJlX18ubyA9IChvYmosIHByb3ApID0+IChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBwcm9wKSkiLCIvLyBkZWZpbmUgX19lc01vZHVsZSBvbiBleHBvcnRzXG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSAoZXhwb3J0cykgPT4ge1xuXHRpZih0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9TdHJpbmdUYWcpIHtcblx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9kdWxlJyB9KTtcblx0fVxuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xufTsiLCJ2YXIgc2NyaXB0VXJsO1xuaWYgKF9fd2VicGFja19yZXF1aXJlX18uZy5pbXBvcnRTY3JpcHRzKSBzY3JpcHRVcmwgPSBfX3dlYnBhY2tfcmVxdWlyZV9fLmcubG9jYXRpb24gKyBcIlwiO1xudmFyIGRvY3VtZW50ID0gX193ZWJwYWNrX3JlcXVpcmVfXy5nLmRvY3VtZW50O1xuaWYgKCFzY3JpcHRVcmwgJiYgZG9jdW1lbnQpIHtcblx0aWYgKGRvY3VtZW50LmN1cnJlbnRTY3JpcHQpXG5cdFx0c2NyaXB0VXJsID0gZG9jdW1lbnQuY3VycmVudFNjcmlwdC5zcmM7XG5cdGlmICghc2NyaXB0VXJsKSB7XG5cdFx0dmFyIHNjcmlwdHMgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZShcInNjcmlwdFwiKTtcblx0XHRpZihzY3JpcHRzLmxlbmd0aCkge1xuXHRcdFx0dmFyIGkgPSBzY3JpcHRzLmxlbmd0aCAtIDE7XG5cdFx0XHR3aGlsZSAoaSA+IC0xICYmICFzY3JpcHRVcmwpIHNjcmlwdFVybCA9IHNjcmlwdHNbaS0tXS5zcmM7XG5cdFx0fVxuXHR9XG59XG4vLyBXaGVuIHN1cHBvcnRpbmcgYnJvd3NlcnMgd2hlcmUgYW4gYXV0b21hdGljIHB1YmxpY1BhdGggaXMgbm90IHN1cHBvcnRlZCB5b3UgbXVzdCBzcGVjaWZ5IGFuIG91dHB1dC5wdWJsaWNQYXRoIG1hbnVhbGx5IHZpYSBjb25maWd1cmF0aW9uXG4vLyBvciBwYXNzIGFuIGVtcHR5IHN0cmluZyAoXCJcIikgYW5kIHNldCB0aGUgX193ZWJwYWNrX3B1YmxpY19wYXRoX18gdmFyaWFibGUgZnJvbSB5b3VyIGNvZGUgdG8gdXNlIHlvdXIgb3duIGxvZ2ljLlxuaWYgKCFzY3JpcHRVcmwpIHRocm93IG5ldyBFcnJvcihcIkF1dG9tYXRpYyBwdWJsaWNQYXRoIGlzIG5vdCBzdXBwb3J0ZWQgaW4gdGhpcyBicm93c2VyXCIpO1xuc2NyaXB0VXJsID0gc2NyaXB0VXJsLnJlcGxhY2UoLyMuKiQvLCBcIlwiKS5yZXBsYWNlKC9cXD8uKiQvLCBcIlwiKS5yZXBsYWNlKC9cXC9bXlxcL10rJC8sIFwiL1wiKTtcbl9fd2VicGFja19yZXF1aXJlX18ucCA9IHNjcmlwdFVybDsiLCJfX3dlYnBhY2tfcmVxdWlyZV9fLmIgPSBkb2N1bWVudC5iYXNlVVJJIHx8IHNlbGYubG9jYXRpb24uaHJlZjtcblxuLy8gb2JqZWN0IHRvIHN0b3JlIGxvYWRlZCBhbmQgbG9hZGluZyBjaHVua3Ncbi8vIHVuZGVmaW5lZCA9IGNodW5rIG5vdCBsb2FkZWQsIG51bGwgPSBjaHVuayBwcmVsb2FkZWQvcHJlZmV0Y2hlZFxuLy8gW3Jlc29sdmUsIHJlamVjdCwgUHJvbWlzZV0gPSBjaHVuayBsb2FkaW5nLCAwID0gY2h1bmsgbG9hZGVkXG52YXIgaW5zdGFsbGVkQ2h1bmtzID0ge1xuXHQzNTk6IDBcbn07XG5cbi8vIG5vIGNodW5rIG9uIGRlbWFuZCBsb2FkaW5nXG5cbi8vIG5vIHByZWZldGNoaW5nXG5cbi8vIG5vIHByZWxvYWRlZFxuXG4vLyBubyBITVJcblxuLy8gbm8gSE1SIG1hbmlmZXN0XG5cbi8vIG5vIG9uIGNodW5rcyBsb2FkZWRcblxuLy8gbm8ganNvbnAgZnVuY3Rpb24iLCJfX3dlYnBhY2tfcmVxdWlyZV9fLm5jID0gdW5kZWZpbmVkOyIsImNvbnN0IF9fV0VCUEFDS19OQU1FU1BBQ0VfT0JKRUNUX18gPSBncm9rOyIsImNvbnN0IF9fV0VCUEFDS19OQU1FU1BBQ0VfT0JKRUNUX18gPSB1aTsiLCJjb25zdCBfX1dFQlBBQ0tfTkFNRVNQQUNFX09CSkVDVF9fID0gREc7IiwiLy8gUnVudGltZSBzeXN0ZW0gZm9yIGV4cG9ydGVkIEMvQysrLWZ1bmN0aW9ucyBjYWxsLlxuLy8gSXQgd2FzIHByZXZpb3VzZWx5IGRldmVsb3BlZCBhbmQgZG9lcyBOT1QgcHJvdmlkZSBjYWxsIHdhc20tZnVuY3Rpb25zIGluIFdlYldvcmtlcnMuXG5cbi8vIHR5cGUtdG8taGVhcCBjb3JyZXNwb25kZW5jZVxuY29uc3QgaGVhcE1hcCA9IHtcImkzMlwiOiBcIkhFQVAzMlwiLCAvLyBJbnQzMkFycmF5XG4gICAgICAgICAgICAgICAgIFwiZjMyXCI6IFwiSEVBUEYzMlwiIC8vIEZsb2F0MzJBcnJheVxuICAgICAgICAgICAgICAgIH07XG5cbi8vIHR5cGUgc2lnbmF0dXJlIHRvIHR5cGVkIGFycmF5ICxhcHBcbmNvbnN0IHR5cGVNYXAgPSB7XCJpMzJcIjogSW50MzJBcnJheSwgLy8gSW50MzJBcnJheVxuICAgICAgICAgICAgICAgICBcImYzMlwiOiBGbG9hdDMyQXJyYXkgLy8gRmxvYXQzMkFycmF5XG4gICAgICAgICAgICAgICAgfTsgXG4gXG4vLyB0eXBlLXRvLXNoaWZ0IG1hcFxuY29uc3Qgc2hpZnRNYXAgPSB7XCJpMzJcIjogMiwgLy8gSW50MzJBcnJheVxuICAgICAgICAgICAgICAgICAgXCJmMzJcIjogMiAvLyBGbG9hdDMyQXJyYXlcbiAgICAgICAgICAgICAgICAgfTtcblxuLy8gdHlwZS10by1jb2x1bW5fY3JlYXRvciBtYXBcbmNvbnN0IHR5cGVUb0NvbHVtbkNyZWF0b3JNYXAgPSB7XCJpMzJcIjogREcuQ29sdW1uLmZyb21JbnQzMkFycmF5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImYzMlwiOiBERy5Db2x1bW4uZnJvbUZsb2F0MzJBcnJheX07XG4gXG5cbi8vIENMQVNTRVMgVEhBVCBBUkUgVVNFRCBCWSBDUFAtV1JBUFBFUlxuXG4vLyBzaW1wbGUgYXJndW1lbnQ6IGEgbnVtYmVyIFxuY2xhc3MgQXJne1xuXG4gICAgY29uc3RydWN0b3IoZGF0YSkge1xuICAgICAgICB0aGlzLmRhdGEgPSBkYXRhOyAgICAgICAgXG4gICAgfVxuXG4gICAgY29tcGxlbWVudEFyck9mUGFyYW1zKGFyck9mUGFyYW1zKSB7XG4gICAgICAgIGFyck9mUGFyYW1zLnB1c2godGhpcy5kYXRhKTtcbiAgICB9XG5cbiAgICBjb21wbGVtZW50QXJyT2ZUeXBlcyhhcnJPZlR5cGVzKSB7XG4gICAgICAgIGFyck9mVHlwZXMucHVzaCgnbnVtYmVyJyk7ICAgICAgICBcbiAgICB9XG5cbiAgICBhbGxvY2F0ZU1lbW9yeUZvckJ1ZmZlcihtb2R1bGUpIHt9XG5cbiAgICBpc01lbW9yeUZvckJ1ZmZlckFsbG9jYXRlZCgpe1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBwdXREYXRhVG9CdWZmZXIobW9kdWxlKSB7fVxuXG4gICAgZ2V0RGF0YUZyb21CdWZmZXIobW9kdWxlKSB7fVxuXG4gICAgZnJlZUJ1ZmZlcihtb2R1bGUpIHt9XG59XG5cbi8vIGNvbHVtbiBhcmd1bWVudFxuY2xhc3MgQXJnQ29sdW1uIGV4dGVuZHMgQXJnIHtcblxuICAgIGNvbnN0cnVjdG9yKGRhdGEsIHRhcmdldFR5cGUsIHRvVXBkYXRlID0gZmFsc2UpIHtcbiAgICAgICAgc3VwZXIoZGF0YSk7XG4gICAgICAgIHRoaXMudHlwZSA9IHRhcmdldFR5cGU7XG4gICAgICAgIHRoaXMudG9VcGRhdGUgPSB0b1VwZGF0ZTtcbiAgICAgICAgdGhpcy5idWYgPSAwOyAgICBcbiAgICAgICAgdGhpcy5udW1PZlJvd3MgPSBkYXRhLmxlbmd0aDtcbiAgICB9XG5cbiAgICBjb21wbGVtZW50QXJyT2ZQYXJhbXMoYXJyT2ZQYXJhbXMpIHtcbiAgICAgICAgYXJyT2ZQYXJhbXMucHVzaCh0aGlzLmJ1Zik7XG4gICAgICAgIGFyck9mUGFyYW1zLnB1c2godGhpcy5udW1PZlJvd3MpO1xuICAgIH1cblxuICAgIGNvbXBsZW1lbnRBcnJPZlR5cGVzKGFyck9mVHlwZXMpIHtcbiAgICAgICAgYXJyT2ZUeXBlcy5wdXNoKCdudW1iZXInKTtcbiAgICAgICAgYXJyT2ZUeXBlcy5wdXNoKCdudW1iZXInKTsgICAgICAgIFxuICAgIH1cblxuICAgIGFsbG9jYXRlTWVtb3J5Rm9yQnVmZmVyKG1vZHVsZSkge1xuICAgICAgICB0aGlzLmJ1ZiA9IG1vZHVsZS5fbWFsbG9jKHRoaXMubnVtT2ZSb3dzICogdHlwZU1hcFt0aGlzLnR5cGVdLkJZVEVTX1BFUl9FTEVNRU5UKTtcbiAgICB9XG5cbiAgICBpc01lbW9yeUZvckJ1ZmZlckFsbG9jYXRlZCgpe1xuICAgICAgICByZXR1cm4gKHRoaXMuYnVmICE9IDApO1xuICAgIH1cblxuICAgIHB1dERhdGFUb0J1ZmZlcihtb2R1bGUpIHtcbiAgICAgICAgaWYodGhpcy5pc01lbW9yeUZvckJ1ZmZlckFsbG9jYXRlZCgpKSB7XG4gICAgICAgICAgICBsZXQgdHlwZSA9IHRoaXMudHlwZTtcbiAgICAgICAgICAgIGxldCBzaGlmdCA9IHNoaWZ0TWFwW3R5cGVdO1xuICAgICAgICAgICAgbGV0IGhlYXAgPSBtb2R1bGVbaGVhcE1hcFt0eXBlXV07ICAgICAgICAgICAgXG4gICAgICAgICAgICBsZXQgYXJyYXkgPSBudWxsO1xuICAgICAgICAgICAgbGV0IGNvbCA9IHRoaXMuZGF0YTtcblxuICAgICAgICAgICAgaWYoKChjb2wudHlwZSA9PSAnaW50JykgJiYgKHR5cGUgPT0gJ2kzMicpKSBcbiAgICAgICAgICAgICAgIHx8ICgoY29sLnR5cGUgPT0gJ2RvdWJsZScpICYmICh0eXBlID09ICdmMzInKSkpXG4gICAgICAgICAgICAgIGFycmF5ID0gY29sLmdldFJhd0RhdGEoKTtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgYXJyYXkgPSBuZXcgdHlwZU1hcFt0eXBlXShjb2wuZ2V0UmF3RGF0YSgpKTtcblxuICAgICAgICAgICAgaWYoYXJyYXkpIFxuICAgICAgICAgICAgICBoZWFwLnNldChhcnJheSwgdGhpcy5idWYgPj4gc2hpZnQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0RGF0YUZyb21CdWZmZXIobW9kdWxlKSB7XG4gICAgICAgIGlmKHRoaXMudG9VcGRhdGUgJiYgdGhpcy5pc01lbW9yeUZvckJ1ZmZlckFsbG9jYXRlZCgpKSB7XG4gICAgICAgICAgICBsZXQgdHlwZSA9IHRoaXMudHlwZTtcbiAgICAgICAgICAgIGxldCBoZWFwID0gbW9kdWxlW2hlYXBNYXBbdHlwZV1dO1xuICAgICAgICAgICAgbGV0IGJ1ZmZlciA9IHRoaXMuYnVmO1xuICAgICAgICAgICAgbGV0IGJ5dGVzID0gdHlwZU1hcFt0eXBlXS5CWVRFU19QRVJfRUxFTUVOVDtcbiAgICAgICAgICAgIGxldCBhcnJheSA9IHRoaXMuZGF0YS5nZXRSYXdEYXRhKCk7XG5cbiAgICAgICAgICAgIGZvcihsZXQgaSA9IDA7IGkgPCB0aGlzLm51bU9mUm93czsgaSsrKVxuICAgICAgICAgICAgICAgIGFycmF5W2ldID0gaGVhcFtidWZmZXIgLyBieXRlcyArIGldO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnJlZUJ1ZmZlcihtb2R1bGUpIHtcbiAgICAgICAgaWYodGhpcy5pc01lbW9yeUZvckJ1ZmZlckFsbG9jYXRlZCgpKSB7XG4gICAgICAgICAgIG1vZHVsZS5fZnJlZSh0aGlzLmJ1Zik7XG4gICAgICAgICAgIHRoaXMuYnVmID0gMDtcbiAgICAgICAgfVxuICAgIH1cblxufVxuXG4vLyBuZXcgY29sdW1uIGFyZ3VtZW50OiBhIG5ldyBjb2x1bW4gaXMgY3JlYXRlZFxuY2xhc3MgQXJnTmV3Q29sdW1uIGV4dGVuZHMgQXJnQ29sdW1uIHtcbiAgICBjb25zdHJ1Y3Rvcih0YXJnZXRUeXBlLCBudW1PZlJvd3MpIHtcbiAgICAgICAgc3VwZXIoW10sIHRhcmdldFR5cGUsIHRydWUpO1xuICAgICAgICB0aGlzLm51bU9mUm93cyA9IG51bU9mUm93cztcbiAgICB9XG5cbiAgICBwdXREYXRhVG9CdWZmZXIobW9kdWxlKSB7fVxuXG4gICAgZ2V0RGF0YUZyb21CdWZmZXIobW9kdWxlKSB7XG4gICAgICAgIGlmKHRoaXMudG9VcGRhdGUgJiYgdGhpcy5pc01lbW9yeUZvckJ1ZmZlckFsbG9jYXRlZCgpKSB7XG4gICAgICAgICAgICBsZXQgdHlwZSA9IHRoaXMudHlwZTtcbiAgICAgICAgICAgIGxldCBoZWFwID0gbW9kdWxlW2hlYXBNYXBbdHlwZV1dO1xuICAgICAgICAgICAgbGV0IGJ1ZiA9IHRoaXMuYnVmO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICBsZXQgY29sdW1uQ3JlYXRvciA9IHR5cGVUb0NvbHVtbkNyZWF0b3JNYXBbdHlwZV07ICAgXG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGxldCBhcnIgPSBuZXcgdHlwZU1hcFt0eXBlXSh0aGlzLm51bU9mUm93cyk7ICAgICAgICAgICAgXG5cbiAgICAgICAgICAgIGZvcihsZXQgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspXG4gICAgICAgICAgICAgICAgYXJyW2ldID0gaGVhcFtidWYgLyBhcnIuQllURVNfUEVSX0VMRU1FTlQgKyBpXTtcblxuICAgICAgICAgICAgdGhpcy5kYXRhID0gY29sdW1uQ3JlYXRvcignbmFtZScsIGFycik7XG5cbiAgICAgICAgICAgIC8vY29uc29sZS5sb2coYXJyKTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgLy8gVGhpcyBtYWtlcyBtaXN0YWtlLCB3aGVuIHRoaXMubnVtT2ZSb3dzID0gNSAoVE9ETzogaW52ZXN0aWdhdGUgd2h5KVxuICAgICAgICAgICAgLy90aGlzLmRhdGEgPSBjb2x1bW5DcmVhdG9yKCduYW1lJywgbmV3IHR5cGVNYXBbdHlwZV0oaGVhcC5idWZmZXIsIHRoaXMuYnVmLCB0aGlzLm51bU9mUm93cykpO1xuXG4gICAgICAgICAgICAvL2NvbnNvbGUubG9nKHRoaXMuZGF0YS5nZXRSYXdEYXRhKCkpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG4vLyBhbiBhcnJheSBvZiBjb2x1bW5zIGFyZ3VtZW50XG5jbGFzcyBBcmdDb2x1bW5zIGV4dGVuZHMgQXJnIHtcblxuICAgIGNvbnN0cnVjdG9yKGRhdGEsIHRhcmdldFR5cGUsIHRvVXBkYXRlID0gZmFsc2UpIHtcbiAgICAgICAgc3VwZXIoZGF0YSk7XG4gICAgICAgIHRoaXMudHlwZSA9IHRhcmdldFR5cGU7XG4gICAgICAgIHRoaXMudG9VcGRhdGUgPSB0b1VwZGF0ZTtcbiAgICAgICAgdGhpcy5idWYgPSAwOyAgICBcbiAgICAgICAgdGhpcy5udW1PZkNvbHVtbnMgPSBkYXRhLmxlbmd0aDtcbiAgICAgICAgdGhpcy5udW1PZlJvd3MgPSBkYXRhWzBdLmxlbmd0aDtcbiAgICB9XG5cbiAgICBjb21wbGVtZW50QXJyT2ZQYXJhbXMoYXJyT2ZQYXJhbXMpIHtcbiAgICAgICAgYXJyT2ZQYXJhbXMucHVzaCh0aGlzLmJ1Zik7XG4gICAgICAgIGFyck9mUGFyYW1zLnB1c2godGhpcy5udW1PZlJvd3MpO1xuICAgICAgICBhcnJPZlBhcmFtcy5wdXNoKHRoaXMubnVtT2ZDb2x1bW5zKTtcbiAgICB9XG5cbiAgICBjb21wbGVtZW50QXJyT2ZUeXBlcyhhcnJPZlR5cGVzKSB7XG4gICAgICAgIGFyck9mVHlwZXMucHVzaCgnbnVtYmVyJyk7XG4gICAgICAgIGFyck9mVHlwZXMucHVzaCgnbnVtYmVyJyk7XG4gICAgICAgIGFyck9mVHlwZXMucHVzaCgnbnVtYmVyJyk7ICAgICAgICBcbiAgICB9XG5cbiAgICBhbGxvY2F0ZU1lbW9yeUZvckJ1ZmZlcihtb2R1bGUpIHtcbiAgICAgICAgdGhpcy5idWYgPSBtb2R1bGUuX21hbGxvYyh0aGlzLm51bU9mUm93cyAqIHRoaXMubnVtT2ZDb2x1bW5zIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogdHlwZU1hcFt0aGlzLnR5cGVdLkJZVEVTX1BFUl9FTEVNRU5UKTtcbiAgICB9XG5cbiAgICBpc01lbW9yeUZvckJ1ZmZlckFsbG9jYXRlZCgpe1xuICAgICAgICByZXR1cm4gKHRoaXMuYnVmICE9IDApO1xuICAgIH1cblxuICAgIHB1dERhdGFUb0J1ZmZlcihtb2R1bGUpIHtcbiAgICAgICAgaWYodGhpcy5pc01lbW9yeUZvckJ1ZmZlckFsbG9jYXRlZCgpKSB7XG4gICAgICAgICAgICBsZXQgdHlwZSA9IHRoaXMudHlwZTtcbiAgICAgICAgICAgIGxldCBzaGlmdCA9IHNoaWZ0TWFwW3R5cGVdO1xuICAgICAgICAgICAgbGV0IGhlYXAgPSBtb2R1bGVbaGVhcE1hcFt0eXBlXV07XG4gICAgICAgICAgICBsZXQgbnVtT2ZCeXRlcyA9IHR5cGVNYXBbdHlwZV0uQllURVNfUEVSX0VMRU1FTlQ7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIC8vIHB1dCBjb2x1bW5zIGRhdGEgdG8gYnVmZmVyXG4gICAgICAgICAgICBmb3IobGV0IGkgPSAwOyBpIDwgdGhpcy5udW1PZkNvbHVtbnM7IGkrKykge1xuICAgICAgICAgICAgICAgIGxldCBhcnJheSA9IG51bGw7XG4gICAgICAgICAgICAgICAgbGV0IGNvbCA9IHRoaXMuZGF0YVtpXTtcblxuICAgICAgICAgICAgICAgIGlmKCgoY29sLnR5cGUgPT0gJ2ludCcpICYmICh0eXBlID09ICdpMzInKSkgXG4gICAgICAgICAgICAgICAgICAgfHwgKChjb2wudHlwZSA9PSAnZG91YmxlJykgJiYgKHR5cGUgPT0gJ2YzMicpKSlcbiAgICAgICAgICAgICAgICAgICAgIGFycmF5ID0gY29sLmdldFJhd0RhdGEoKTtcbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICBhcnJheSA9IG5ldyB0eXBlTWFwW3R5cGVdKGNvbC5nZXRSYXdEYXRhKCkpO1xuXG4gICAgICAgICAgICAgICAgLy8gY2hlY2sgZGF0YSBhcnJheVxuICAgICAgICAgICAgICAgIGlmKGFycmF5ICE9IG51bGwpIFxuICAgICAgICAgICAgICAgICAgICBoZWFwLnNldChhcnJheSwgKHRoaXMuYnVmICsgaSAqIHRoaXMubnVtT2ZSb3dzICogbnVtT2ZCeXRlcykgPj4gc2hpZnQpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXREYXRhRnJvbUJ1ZmZlcihtb2R1bGUpIHtcbiAgICAgICAgaWYodGhpcy50b1VwZGF0ZSAmJiB0aGlzLmlzTWVtb3J5Rm9yQnVmZmVyQWxsb2NhdGVkKCkpIHtcbiAgICAgICAgICAgIGxldCB0eXBlID0gdGhpcy50eXBlO1xuICAgICAgICAgICAgbGV0IGhlYXAgPSBtb2R1bGVbaGVhcE1hcFt0eXBlXV07XG4gICAgICAgICAgICBsZXQgbnVtT2ZSb3dzID0gdGhpcy5udW1PZlJvd3M7XG4gICAgICAgICAgICBsZXQgbnVtT2ZDb2xzID0gdGhpcy5udW1PZkNvbHVtbnM7ICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgIGxldCBhcnIgPSBuZXcgdHlwZU1hcFt0eXBlXShoZWFwLmJ1ZmZlciwgdGhpcy5idWYsIG51bU9mUm93cyAqIG51bU9mQ29scyk7XG4gICAgICAgXG4gICAgICAgICAgICBmb3IobGV0IGkgPSAwOyBpIDwgbnVtT2ZDb2xzOyBpKyspIHtcbiAgICAgICAgICAgICAgICBsZXQgY29sRGF0YSA9IHRoaXMuZGF0YVtpXS5nZXRSYXdEYXRhKCk7XG4gICAgICAgICAgICAgICAgZm9yKGxldCBqID0gMDsgaiA8IG51bU9mUm93czsgaisrKVxuICAgICAgICAgICAgICAgICAgY29sRGF0YVtqXSA9IGFycltqICsgaSAqIG51bU9mUm93c107ICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZyZWVCdWZmZXIobW9kdWxlKSB7XG4gICAgICAgIGlmKHRoaXMuaXNNZW1vcnlGb3JCdWZmZXJBbGxvY2F0ZWQoKSkge1xuICAgICAgICAgICBtb2R1bGUuX2ZyZWUodGhpcy5idWYpO1xuICAgICAgICAgICB0aGlzLmJ1ZiA9IDA7XG4gICAgICAgIH1cbiAgICB9XG5cbn1cblxuLy8gYW4gYXJyYXkgb2YgbmV3IGNvbHVtbnM6IG5ldyBjb2x1bW5zIGFyZSBjcmVhdGVkXG5jbGFzcyBBcmdOZXdDb2x1bW5zIGV4dGVuZHMgQXJnQ29sdW1ucyB7XG5cbiAgICBjb25zdHJ1Y3Rvcih0YXJnZXRUeXBlLCBudW1PZlJvd3MsIG51bU9mQ29sdW1ucykge1xuICAgICAgICBzdXBlcihbW11dLCB0YXJnZXRUeXBlLCB0cnVlKTsgIFxuICAgICAgICB0aGlzLmRhdGEgPSBbXTsgICAgICAgIFxuICAgICAgICB0aGlzLm51bU9mQ29sdW1ucyA9IG51bU9mQ29sdW1ucztcbiAgICAgICAgdGhpcy5udW1PZlJvd3MgPSBudW1PZlJvd3M7XG4gICAgfVxuXG4gICAgcHV0RGF0YVRvQnVmZmVyKG1vZHVsZSkgeyB9XG5cbiAgICBnZXREYXRhRnJvbUJ1ZmZlcihtb2R1bGUpIHtcbiAgICAgICAgaWYodGhpcy50b1VwZGF0ZSAmJiB0aGlzLmlzTWVtb3J5Rm9yQnVmZmVyQWxsb2NhdGVkKCkpIHtcbiAgICAgICAgICAgIGxldCB0eXBlID0gdGhpcy50eXBlO1xuICAgICAgICAgICAgbGV0IGhlYXAgPSBtb2R1bGVbaGVhcE1hcFt0eXBlXV07XG4gICAgICAgICAgICBsZXQgbnVtT2ZSb3dzID0gdGhpcy5udW1PZlJvd3M7XG4gICAgICAgICAgICBsZXQgbnVtT2ZDb2xzID0gdGhpcy5udW1PZkNvbHVtbnM7XG4gICAgICAgICAgICBsZXQgbnVtT2ZCeXRlcyA9IHR5cGVNYXBbdHlwZV0uQllURVNfUEVSX0VMRU1FTlQ7ICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgIGxldCBjb2x1bW5DcmVhdG9yID0gdHlwZVRvQ29sdW1uQ3JlYXRvck1hcFt0eXBlXTtcbiAgICAgICAgICAgIGxldCBidWYgPSB0aGlzLmJ1ZjtcblxuICAgICAgICAgICAgZm9yKGxldCBpID0gMDsgaSA8IG51bU9mQ29sczsgaSsrKSB7XG4gICAgICAgICAgICAgICAgbGV0IGFyciA9IG5ldyB0eXBlTWFwW3R5cGVdKG51bU9mUm93cyk7XG5cbiAgICAgICAgICAgICAgICBmb3IobGV0IGogPSAwOyBqIDwgbnVtT2ZSb3dzOyBqKyspXG4gICAgICAgICAgICAgICAgICAgIGFycltqXSA9IGhlYXBbYnVmIC8gbnVtT2ZCeXRlcyArIGogKyBpICogbnVtT2ZSb3dzXTtcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGEucHVzaChjb2x1bW5DcmVhdG9yKChpICsgMSkudG9TdHJpbmcoKSwgYXJyKSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGNyZWF0ZSBjb2x1bW5zOiBoZXJlLCBtYXkgYmUgYSBwcm9ibGVtIHdoZW4gbnVtT2ZSb3dzID0gNSAgICAgICAgICAgIFxuICAgICAgICAgICAgLypmb3IobGV0IGkgPSAwOyBpIDwgbnVtT2ZDb2xzOyBpKyspXG4gICAgICAgICAgICAgICAgdGhpcy5kYXRhLnB1c2goY29sdW1uQ3JlYXRvcigoaSArIDEpLnRvU3RyaW5nKCksIG5ldyB0eXBlTWFwW3R5cGVdKGhlYXAuYnVmZmVyLCBcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5idWYgKyBpICogbnVtT2ZSb3dzICogbnVtT2ZCeXRlcywgbnVtT2ZSb3dzKSkpOyovXG4gICAgICAgIH1cbiAgICB9XG59XG5cbi8vIGEgd3JhcHBlciBmb3IgZXhwb3J0ZWQgQy9DKystZnVuY3Rpb24gY2FsbFxuZnVuY3Rpb24gY3BwRnVuY1dyYXBwZXIobW9kdWxlLCBjRnVuY05hbWUsIHJldHVyblR5cGUsIGFyZ3MpXG57XG4gICAgbGV0IHJlc3VsdDtcblxuICAgIC8vIGFsbG9jYXRlIG1lbW9yeSBmb3IgYnVmZmVyc1xuICAgIGZvcihsZXQgYXJnIG9mIGFyZ3MpICAgICAgICAgXG4gICAgICAgIGFyZy5hbGxvY2F0ZU1lbW9yeUZvckJ1ZmZlcihtb2R1bGUpO1xuICAgIFxuICAgIGxldCBpc0Vub3VnaE9mTWVtb3J5QWxsb2NhdGVkID0gdHJ1ZTtcblxuICAgIC8vIGNoZWNrIG1lbW9yeSBhbGxvY2F0aW9uXG4gICAgZm9yKGxldCBhcmcgb2YgYXJncylcbiAgICAgICAgaXNFbm91Z2hPZk1lbW9yeUFsbG9jYXRlZCAmPSBhcmcuaXNNZW1vcnlGb3JCdWZmZXJBbGxvY2F0ZWQoKTsgIFxuICAgIFxuICAgIC8vIHJ1biBleHBvcnRlZCBmdW5jdGlvbiBpZiBlbm91Z2ggb2YgbWVtb3J5IGlzIGFsbG9jYXRlZFxuICAgIGlmKGlzRW5vdWdoT2ZNZW1vcnlBbGxvY2F0ZWQpIHtcblxuICAgICAgICBsZXQgcGFyYW1zID0gW107IC8vIGFyZ3VtZW50cyB0aGF0IGFyZSBwdXQgdG8gdGhlIGV4cG9ydGVkIGZ1bmN0aW9uXG4gICAgICAgIGxldCB0eXBlcyA9IFtdOyAvLyB0aGVpciB0eXBlc1xuXG4gICAgICAgIC8vIHByZXBhcmUgZGF0YSB0aGF0IGlzIHB1dCB0byBleHBvcnRlZCBmdW5jdGlvblxuICAgICAgICBmb3IobGV0IGFyZyBvZiBhcmdzKSB7XG4gICAgICAgICAgICBhcmcuY29tcGxlbWVudEFyck9mUGFyYW1zKHBhcmFtcyk7XG4gICAgICAgICAgICBhcmcuY29tcGxlbWVudEFyck9mVHlwZXModHlwZXMpO1xuICAgICAgICAgICAgYXJnLnB1dERhdGFUb0J1ZmZlcihtb2R1bGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGV4dGVuZGVkVHlwZU9mUmV0dXJuID0gKHJldHVyblR5cGUgPT0gJ251bScpID8gJ251bWJlcicgOiBudWxsOyAgIFxuICAgICAgICBcbiAgICAgICAgLy8gY2FsbCBleHBvcnRlZCBmdW5jdGlvblxuICAgICAgICBpZihleHRlbmRlZFR5cGVPZlJldHVybilcbiAgICAgICAgICAgIHJlc3VsdCA9IG1vZHVsZS5jY2FsbChjRnVuY05hbWUsIGV4dGVuZGVkVHlwZU9mUmV0dXJuLCB0eXBlcywgcGFyYW1zKTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgcmVzdWx0ID0gbW9kdWxlLmNjYWxsKGNGdW5jTmFtZSwgZXh0ZW5kZWRUeXBlT2ZSZXR1cm4sIHR5cGVzLCBwYXJhbXMpO1xuICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgLy8gdXBkYXRlIGFuZCBnZXQgZGF0YSBmcm9tIGJ1ZmZlcnMgaWYgcmVxdWlyZWRcbiAgICAgICAgZm9yKGxldCBhcmcgb2YgYXJncylcbiAgICAgICAgICAgIGFyZy5nZXREYXRhRnJvbUJ1ZmZlcihtb2R1bGUpOyAgICAgICBcbiAgICB9XG5cbiAgICAvLyBjbGVhciBidWZmZXJzXG4gICAgZm9yKGxldCBhcmcgb2YgYXJncykgICAgICAgICBcbiAgICAgICAgYXJnLmZyZWVCdWZmZXIobW9kdWxlKTtcblxuICAgIGlmKHJlc3VsdCAhPSB1bmRlZmluZWQpXG4gICAgICAgIHJldHVybiByZXN1bHQ7ICAgIFxufSAvLyBjcHBGdW5jV3JhcHBlclxuXG5cbi8vIEEgTEFZRVIgQkVUV0VFTiBKUyBBTkQgQ1BQLVdSQVBQRVJcblxuLy8gUGFyYW1ldGVycyBjcmVhdG9yXG5sZXQgUGFyYW0gPSB7XG4gICAgaW50Q29sdW1uIChjb2x1bW4pIHtcbiAgICAgICAgcmV0dXJuIG5ldyBBcmdDb2x1bW4oY29sdW1uLCAnaTMyJyk7XG4gICAgfSxcbiAgICBcbiAgICBuZXdJbnRDb2x1bW4gKG51bU9mUm93cykge1xuICAgICAgICByZXR1cm4gbmV3IEFyZ05ld0NvbHVtbignaTMyJywgbnVtT2ZSb3dzKTtcbiAgICB9LFxuXG4gICAgaW50Q29sdW1ucyhjb2x1bW5zKXtcbiAgICAgICAgcmV0dXJuIG5ldyBBcmdDb2x1bW5zKGNvbHVtbnMudG9MaXN0KCksICdpMzInKTtcbiAgICB9LFxuXG4gICAgbmV3SW50Q29sdW1ucyhudW1PZlJvd3MsIG51bU9mQ29sdW1ucykge1xuICAgICAgICByZXR1cm4gbmV3IEFyZ05ld0NvbHVtbnMoJ2kzMicsIG51bU9mUm93cywgbnVtT2ZDb2x1bW5zKTtcbiAgICB9LFxuXG4gICAgZmxvYXRDb2x1bW4gKGNvbHVtbikge1xuICAgICAgICByZXR1cm4gbmV3IEFyZ0NvbHVtbihjb2x1bW4sICdmMzInKTtcbiAgICB9LFxuXG4gICAgbmV3RmxvYXRDb2x1bW4gKG51bU9mUm93cykge1xuICAgICAgICByZXR1cm4gbmV3IEFyZ05ld0NvbHVtbignZjMyJywgbnVtT2ZSb3dzKTtcbiAgICB9LFxuXG4gICAgZmxvYXRDb2x1bW5zKGNvbHVtbnMpe1xuICAgICAgICByZXR1cm4gbmV3IEFyZ0NvbHVtbnMoY29sdW1ucy50b0xpc3QoKSwgJ2YzMicpO1xuICAgIH0sXG5cbiAgICBuZXdGbG9hdENvbHVtbnMobnVtT2ZSb3dzLCBudW1PZkNvbHVtbnMpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBBcmdOZXdDb2x1bW5zKCdmMzInLCBudW1PZlJvd3MsIG51bU9mQ29sdW1ucyk7XG4gICAgfSxcblxuICAgIGludChudW1iZXIpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBBcmcobnVtYmVyKTtcbiAgICB9LFxuXG4gICAgbnVtKG51bWJlcikge1xuICAgICAgICByZXR1cm4gbmV3IEFyZyhudW1iZXIpO1xuICAgIH1cbn07XG5cbi8vIFJldHVybiB2YWx1ZSBjcmVhdG9yXG5sZXQgUmV0dXJuID0ge1xuICAgIHRhYmxlRnJvbUNvbHVtbnMoYXJnQ29sdW1ucykge1xuICAgICAgICByZXR1cm4gREcuRGF0YUZyYW1lLmZyb21Db2x1bW5zKGFyZ0NvbHVtbnMuZGF0YSk7XG4gICAgfSxcblxuICAgIG51bShudW1iZXIpIHtcbiAgICAgICAgcmV0dXJuIG51bWJlcjtcbiAgICB9LFxuXG4gICAgaW50KG51bWJlcikge1xuICAgICAgICByZXR1cm4gbnVtYmVyO1xuICAgIH0sXG5cbiAgICBkb3VibGUobnVtYmVyKSB7XG4gICAgICAgIHJldHVybiBudW1iZXI7XG4gICAgfSxcblxuICAgIGNvbHVtbihhcmdDb2x1bW4pIHtcbiAgICAgICAgcmV0dXJuIGFyZ0NvbHVtbi5kYXRhO1xuICAgIH1cbn07XG5cbi8vIFRoZSBtYWluIHRvb2wgdGhhdCBjb21iaW5lcyBhbGwgdG9nZXRoZXJcbmV4cG9ydCBmdW5jdGlvbiBjYWxsV2FzbShtb2R1bGUsIGZ1bmNOYW1lLCBpbnB1dHMpIHtcbiAgICAvLyBnZXQgc3BlY2lmaWNhdGlvbiBvZiBleHBvcnRlZCBDL0MrKy1mdW5jdGlvblxuICAgIGxldCBmdW5jU3BlY2lmaWNhdGlvbiA9IG1vZHVsZVtmdW5jTmFtZV07XG5cbiAgICAvLyBnZXQgYXJndW1uZXRzXG4gICAgbGV0IGFyZ3MgPSBmdW5jU3BlY2lmaWNhdGlvbi5hcmd1bWVudHM7IFxuXG4gICAgLy8gYXJyYXkgb2YgYXJndW1lbnRzIHRoYXQgZnVydGhlciBhcmUgdXNlZCBieSBjcHAtd3JhcHBlclxuICAgIGxldCBjcHBGdW5jSW5wdXQgPSBbXTtcblxuICAgIC8vIGNvbXBsZXRlIGFuIGlucHV0IGZvciBjcHBcbiAgICBsZXQgaSA9IDA7XG4gICAgZm9yKGxldCBrZXkgaW4gYXJncyl7XG4gICAgICAgIGxldCBhcmcgPSBhcmdzW2tleV07IFxuICAgICAgICBcbiAgICAgICAgLy8gc2tpcCBhdXhpbGlyeSBlbGVtZW50XG4gICAgICAgIGlmKGtleSA9PSAnX2NhbGxSZXN1bHQnKSAgICAgICAgICAgICBcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuXG4gICAgICAgIC8vIGNyZWF0ZSBhbiBhcmd1bWVudFxuICAgICAgICBzd2l0Y2goYXJnLnR5cGUpe1xuICAgICAgICAgICAgY2FzZSAnZmxvYXRDb2x1bW5zJzpcbiAgICAgICAgICAgIGNhc2UgJ2ludCc6XG4gICAgICAgICAgICBjYXNlICdudW0nOlxuICAgICAgICAgICAgY2FzZSAnZmxvYXRDb2x1bW4nOlxuICAgICAgICAgICAgY2FzZSAnaW50Q29sdW1uJzpcbiAgICAgICAgICAgIGNhc2UgJ2ludENvbHVtbnMnOlxuICAgICAgICAgICAgICAgIGFyZy5kYXRhID0gUGFyYW1bYXJnLnR5cGVdKGlucHV0c1tpXSk7XG4gICAgICAgICAgICAgICAgaSsrO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnbmV3RmxvYXRDb2x1bW5zJzpcbiAgICAgICAgICAgIGNhc2UgJ25ld0ludENvbHVtbnMnOlxuICAgICAgICAgICAgICAgIGxldCB2YWwxID0gYXJnc1sgYXJnWydudW1PZlJvd3MnXVsncmVmJ10gXS5kYXRhW2FyZ1snbnVtT2ZSb3dzJ11bJ3ZhbHVlJ11dO1xuICAgICAgICAgICAgICAgIGxldCB2YWwyID0gYXJnc1sgYXJnWydudW1PZkNvbHVtbnMnXVsncmVmJ10gXS5kYXRhW2FyZ1snbnVtT2ZDb2x1bW5zJ11bJ3ZhbHVlJ11dO1xuICAgICAgICAgICAgICAgIGFyZy5kYXRhID0gUGFyYW1bYXJnLnR5cGVdKHZhbDEsIHZhbDIpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnbmV3RmxvYXRDb2x1bW4nOlxuICAgICAgICAgICAgY2FzZSAnbmV3SW50Q29sdW1uJzpcbiAgICAgICAgICAgICAgICBsZXQgdmFsID0gYXJnc1sgYXJnWydudW1PZlJvd3MnXVsncmVmJ10gXS5kYXRhW2FyZ1snbnVtT2ZSb3dzJ11bJ3ZhbHVlJ11dO1xuICAgICAgICAgICAgICAgIGFyZy5kYXRhID0gUGFyYW1bYXJnLnR5cGVdKHZhbCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9IC8vIHN3aXRjaFxuXG4gICAgICAgIGNwcEZ1bmNJbnB1dC5wdXNoKGFyZ3Nba2V5XS5kYXRhKTtcblxuICAgIH0gLy8gZm9yIGtleSAgICBcblxuICAgIC8vIENBTEwgRVhQT1JURUQgQ1BQLUZVTkNUSU9OXG4gICAgbGV0IGNhbGxSZXN1bHQgPSBjcHBGdW5jV3JhcHBlcihtb2R1bGUsIGZ1bmNOYW1lLCAnbnVtJywgY3BwRnVuY0lucHV0KTtcblxuICAgIC8vIHN0b3JlIHJlc3VsdCB0aGF0IGlzIHJldHVybmVkIGJ5IGV4cG9ydGVkIGNwcC1mdW5jdGlvblxuICAgIGFyZ3MuX2NhbGxSZXN1bHQgPSBQYXJhbS5udW0oY2FsbFJlc3VsdCk7XG5cbiAgICAvLyBjcmVhdGUgb3V0cHV0XG4gICAgbGV0IG91dHB1dCA9IGZ1bmNTcGVjaWZpY2F0aW9uLm91dHB1dDtcblxuICAgIC8vIGlmIGEgc2luZ2xlIG9iamVjdCBtdXN0IGJlIHJldHVybmVkXG4gICAgaWYob3V0cHV0Wyd0eXBlJ10gIT0gJ29iamVjdHMnKVxuICAgICAgcmV0dXJuIFJldHVybltvdXRwdXRbJ3R5cGUnXV0oYXJnc1tvdXRwdXRbJ3NvdXJjZSddXS5kYXRhKTtcblxuICAgIGxldCBhcnJheVRvUmV0dXJuID0gW107XG5cbiAgICAvLyBwdXNoIGRhdGEgb2YgdGhlIHJlcXVpcmVkIGFyZ3VtZW50c1xuICAgIGZvcihsZXQgbmFtZSBvZiBvdXRwdXRbJ3NvdXJjZSddKVxuICAgICAgYXJyYXlUb1JldHVybi5wdXNoKGFyZ3NbbmFtZV0uZGF0YS5kYXRhKTtcblxuICAgIHJldHVybiBhcnJheVRvUmV0dXJuO1xuICB9IC8vIGNhbGxXYXNtIiwiLy8gVXRpbGl0aWVzIGZvciBjYWxsaW5nIHdhc20tZnVuY3Rpb25zIHZpYSB3ZWJ3b3JrZXIuXG5cbi8vIFdlIHVzZSBhbiBhcHByb2FjaCB0aGF0IGlzIHdlbGwgZGVzY3JpYmVkIGhlcmU6XG4vLyBodHRwczovL2JlY29taW5naHVtYW4uYWkvcGFzc2luZy1hbmQtcmV0dXJuaW5nLXdlYmFzc2VtYmx5LWFycmF5LXBhcmFtZXRlcnMtYTBmNTcyYzY1ZDk3XG4vLyBJdCBoYXMgYmVlbiBtb2RpZmllZCBmb3IgdXNhZ2UgaW4gREFUQUdST0suXG5cbi8vIENvbnN0YW50cyBmb3Igd2FzbS1mdW5jdGlvbnMgaW4gd2Vid29ya2VycyBydW50aW1lIHN5c3RlbVxuY29uc3QgVFlQRSA9ICd0eXBlJztcbmNvbnN0IE5VTV9UWVBFID0gJ251bSc7XG5jb25zdCBGTE9BVF9DT0xVTU5fVFlQRSA9ICdmbG9hdENvbHVtbic7XG5jb25zdCBJTlRfQ09MVU1OX1RZUEUgPSAnaW50Q29sdW1uJztcbmNvbnN0IEZMT0FUX0NPTFVNTlNfVFlQRSA9ICdmbG9hdENvbHVtbnMnO1xuY29uc3QgTkVXX0ZMT0FUX0NPTFVNTlNfVFlQRSA9ICduZXdGbG9hdENvbHVtbnMnO1xuY29uc3QgSU5UX0NPTFVNTlNfVFlQRSA9ICdpbnRDb2x1bW5zJztcbmNvbnN0IE5FV19JTlRfQ09MVU1OU19UWVBFID0gJ25ld0ludENvbHVtbnMnO1xuY29uc3QgTkVXX0ZMT0FUX0NPTFVNTl9UWVBFID0gJ25ld0Zsb2F0Q29sdW1uJztcbmNvbnN0IE5FV19JTlRfQ09MVU1OX1RZUEUgPSAnbmV3SW50Q29sdW1uJztcbmNvbnN0IENPTFVNTiA9ICdjb2x1bW4nO1xuY29uc3QgQ0FMTF9SRVNVTFQgPSAnX2NhbGxSZXN1bHQnO1xuY29uc3QgTlVNX09GX1JPV1MgPSAnbnVtT2ZSb3dzJztcbmNvbnN0IE5VTV9PRl9DT0xVTU5TID0gJ251bU9mQ29sdW1ucyc7XG5jb25zdCBSRUYgPSAncmVmJztcbmNvbnN0IFZBTFVFID0gJ3ZhbHVlJztcbmNvbnN0IFRBQkxFX09GX0NPTFVNTlMgPSAndGFibGVGcm9tQ29sdW1ucyc7XG5jb25zdCBPQkpFQ1RTID0gJ29iamVjdHMnO1xuY29uc3QgSU5UX1RZUEUgPSAnaW50JztcbmNvbnN0IERPVUJMRV9UWVBFID0gJ2RvdWJsZSc7XG5jb25zdCBOVU1CRVIgPSAnbnVtYmVyJztcblxuLy8gVHlwZS10by1oZWFwIGNvcnJlc3BvbmRlbmNlLlxuLy8gSXQgaXMgcmVxdWlyZWQgZm9yIEpTLW1vZHVsZSBnZW5lcmF0ZWQgYnkgRW1zY3JpcHRlbixcbi8vIGFuZCBpdCBpcyB1c2VkLCB3aGVuIHBhc3NpbmcgYXJyYXkgZGF0YSB0by9mcm9tIHdhc20tZnVuY3Rpb25zLlxuLy8gTW9yZSBpbmZvIGNhbiBiZSBmb3VuZCBhdCB0aGUgZm9sbG93aW5nIGxpbms6XG4vLyBodHRwczovL2JlY29taW5naHVtYW4uYWkvcGFzc2luZy1hbmQtcmV0dXJuaW5nLXdlYmFzc2VtYmx5LWFycmF5LXBhcmFtZXRlcnMtYTBmNTcyYzY1ZDk3XG5jb25zdCBoZWFwTWFwID0ge1xuICAgICAgICAgICAgICAgICAnaW50Q29sdW1uJzogXCJIRUFQMzJcIixcbiAgICAgICAgICAgICAgICAgJ2Zsb2F0Q29sdW1uJzogXCJIRUFQRjMyXCIsXG4gICAgICAgICAgICAgICAgICdmbG9hdENvbHVtbnMnOiBcIkhFQVBGMzJcIixcbiAgICAgICAgICAgICAgICAgJ25ld0Zsb2F0Q29sdW1ucyc6IFwiSEVBUEYzMlwiLFxuICAgICAgICAgICAgICAgICAnaW50Q29sdW1ucyc6IFwiSEVBUDMyXCIsXG4gICAgICAgICAgICAgICAgICduZXdJbnRDb2x1bW5zJzogXCJIRUFQMzJcIixcbiAgICAgICAgICAgICAgICAgJ25ld0Zsb2F0Q29sdW1uJzogXCJIRUFQRjMyXCIsXG4gICAgICAgICAgICAgICAgICduZXdJbnRDb2x1bW4nOiBcIkhFQVAzMlwiXG4gICAgICAgICAgICAgICAgfTtcblxuLy8gVHlwZSBzaWduYXR1cmUgdG8gdHlwZWQgYXJyYXkgbWFwLlxuLy8gSXQgaXMgdXNlZCwgd2hlbiBtYW5pcHVsYXRpbmcgY29sdW1uKHMpLlxuY29uc3QgdHlwZU1hcCA9IHtcbiAgICAgICAgICAgICAgICAgJ2ludENvbHVtbic6IEludDMyQXJyYXksXG4gICAgICAgICAgICAgICAgICdmbG9hdENvbHVtbic6IEZsb2F0MzJBcnJheSxcbiAgICAgICAgICAgICAgICAgJ2Zsb2F0Q29sdW1ucyc6IEZsb2F0MzJBcnJheSxcbiAgICAgICAgICAgICAgICAgJ25ld0Zsb2F0Q29sdW1ucyc6IEZsb2F0MzJBcnJheSxcbiAgICAgICAgICAgICAgICAgJ2ludENvbHVtbnMnOiBJbnQzMkFycmF5LCAgXG4gICAgICAgICAgICAgICAgICduZXdJbnRDb2x1bW5zJzogSW50MzJBcnJheSxcbiAgICAgICAgICAgICAgICAgJ25ld0Zsb2F0Q29sdW1uJzogRmxvYXQzMkFycmF5LFxuICAgICAgICAgICAgICAgICAnbmV3SW50Q29sdW1uJzogSW50MzJBcnJheVxuICAgICAgICAgICAgICAgIH07IFxuXG4vLyBUeXBlLXRvLXNoaWZ0IG1hcC5cbi8vIEl0IGlzIHVzZWQsIHdoZW4gcGFzc2luZyBhcnJheSB0by9mcm9tIHdhc20tZnVuY3Rpb25zLlxuLy8gTW9yZSBpbmZvIGNhbiBiZSBmb3VuZCBhdCB0aGUgZm9sbG93aW5nIGxpbms6XG4vLyBodHRwczovL2JlY29taW5naHVtYW4uYWkvcGFzc2luZy1hbmQtcmV0dXJuaW5nLXdlYmFzc2VtYmx5LWFycmF5LXBhcmFtZXRlcnMtYTBmNTcyYzY1ZDk3IFxuY29uc3Qgc2hpZnRNYXAgPSB7J2ludENvbHVtbic6IDIsIFxuICAgICAgICAgICAgICAgICAgJ2Zsb2F0Q29sdW1uJzogMiwgXG4gICAgICAgICAgICAgICAgICAnZmxvYXRDb2x1bW5zJzogMiwgIFxuICAgICAgICAgICAgICAgICAgJ25ld0Zsb2F0Q29sdW1ucyc6IDIsIFxuICAgICAgICAgICAgICAgICAgJ2ludENvbHVtbnMnOiAyLCAgXG4gICAgICAgICAgICAgICAgICAnbmV3SW50Q29sdW1ucyc6IDIsXG4gICAgICAgICAgICAgICAgICAnbmV3RmxvYXRDb2x1bW4nOiAyLFxuICAgICAgICAgICAgICAgICAgJ25ld0ludENvbHVtbic6IDJcbiAgICAgICAgICAgICAgICAgfTsgICAgICAgICBcblxuLy8gR2V0IGlucHV0IGZvciBDKystZnVuY3Rpb24uXG4vLyBUaGlzIGZ1bmN0aW9uIHRha2VzIHNwZWNpZmljYXRpb24gb2YgYXJndW1lbnRzIChhcmdzU3BlY2lmaWNhdGlvbikgJiBpbnB1dCBkYXRhIChpbnB1dFZhbHMpXG4vLyBhbmQgcmV0dXJucyBpbnB1dCB0aGF0IHdpbGwgYmUgZnVydGhlciB1c2VkIGluIGNwcC93YXNtLWZ1bmN0aW9uLlxuZXhwb3J0IGZ1bmN0aW9uIGdldENwcElucHV0KGFyZ3NTcGVjaWZpY2F0aW9uLCBpbnB1dFZhbHMpIHtcbiAgICBsZXQgY3BwRnVuY0lucHV0ID0gW107XG4gICAgbGV0IHJlZjtcblxuICAgIC8vIGNvbXBsZXRlIGFuIGlucHV0IGZvciBjcHBcbiAgICBsZXQgaSA9IDA7XG4gICAgZm9yKGNvbnN0IGtleSBpbiBhcmdzU3BlY2lmaWNhdGlvbikge1xuICAgICAgICBjb25zdCBhcmcgPSBhcmdzU3BlY2lmaWNhdGlvbltrZXldOyBcbiAgICAgICAgY29uc3QgdHlwZSA9IGFyZy50eXBlO1xuICAgICAgICBcbiAgICAgICAgLy8gc2tpcCBhdXhpbGlyeSBlbGVtZW50XG4gICAgICAgIGlmKGtleSA9PT0gQ0FMTF9SRVNVTFQpICAgICAgICAgICAgIFxuICAgICAgICAgICAgY29udGludWU7XG5cbiAgICAgICAgLy8gaGVyZSwgd2UgY29uc2lkZXIgZWFjaCB0eXBlIG9mIGlucHV0XG4gICAgICAgIHN3aXRjaCh0eXBlKSB7ICAgICAgICAgICBcbiBcbiAgICAgICAgICAgIC8vIG51bWJlcnNcbiAgICAgICAgICAgIGNhc2UgTlVNX1RZUEU6ICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgY2FzZSBJTlRfVFlQRTpcbiAgICAgICAgICAgIGNhc2UgRE9VQkxFX1RZUEU6XG4gICAgICAgICAgICAgICAgYXJnLmRhdGEgPSBpbnB1dFZhbHNbaV07XG4gICAgICAgICAgICAgICAgaSsrO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAvLyBjb2x1bW5cbiAgICAgICAgICAgIGNhc2UgSU5UX0NPTFVNTl9UWVBFOlxuICAgICAgICAgICAgY2FzZSBGTE9BVF9DT0xVTU5fVFlQRTpcblxuICAgICAgICAgICAgICAgIGxldCBhcnJheTtcblxuICAgICAgICAgICAgICAgIC8vIHRoaXMgaXMgT0sgaWYgdHlwZSBvZiBjb2x1bW4gYW5kIHRhcmdldCB0eXBlIGNvaW5zaWRlXG4gICAgICAgICAgICAgICAgLy9hcnJheSA9IGlucHV0VmFsc1tpXS5nZXRSYXdEYXRhKCk7XG5cbiAgICAgICAgICAgICAgICBsZXQgY29sID0gaW5wdXRWYWxzW2ldO1xuXG4gICAgICAgICAgICAgICAgLy8gaGVyZSwgd2UgY2hlY2sgdHlwZXMgYW5kIHBlcmZvcm0gYW4gYXBwcm9wcmlhdGUgdHJhbnNmb3JtXG4gICAgICAgICAgICAgICAgaWYoICggKGNvbC50eXBlID09PSBJTlRfVFlQRSkgJiYgKHR5cGUgPT09IElOVF9DT0xVTU5fVFlQRSkgKSBcbiAgICAgICAgICAgICAgICAgICB8fCAoIChjb2wudHlwZSA9PT0gRE9VQkxFX1RZUEUpICYmICh0eXBlID09PSBGTE9BVF9DT0xVTU5fVFlQRSkgKSApXG4gICAgICAgICAgICAgICAgICAgICBhcnJheSA9IGNvbC5nZXRSYXdEYXRhKCk7XG4gICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgYXJyYXkgPSBuZXcgdHlwZU1hcFt0eXBlXShjb2wuZ2V0UmF3RGF0YSgpKTtcblxuICAgICAgICAgICAgICAgIC8qaWYoKChjb2wudHlwZSA9PSAnaW50JykgJiYgKHR5cGUgPT0gSU5UX0NPTFVNTl9UWVBFKSkgXG4gICAgICAgICAgICAgICAgICAgICB8fCAoKGNvbC50eXBlID09ICdkb3VibGUnKSAmJiAodHlwZSA9PSBGTE9BVF9DT0xVTU5fVFlQRSkpKVxuICAgICAgICAgICAgICAgICAgICAgICBhcnJheSA9IGNvbC5nZXRSYXdEYXRhKCk7XG4gICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICBhcnJheSA9IG5ldyB0eXBlTWFwW3R5cGVdKGNvbC5nZXRSYXdEYXRhKCkpOyovXG5cbiAgICAgICAgICAgICAgICAvLyBjaGVjayB0eXBlc1xuICAgICAgICAgICAgICAgIGFyZy5kYXRhID0geyAnYXJyYXknOiBhcnJheSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ251bU9mUm93cyc6IGFycmF5Lmxlbmd0aH07ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIGkrKztcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgLy8gbmV3IGNvbHVtbiBcbiAgICAgICAgICAgIGNhc2UgTkVXX0lOVF9DT0xVTU5fVFlQRTpcbiAgICAgICAgICAgIGNhc2UgTkVXX0ZMT0FUX0NPTFVNTl9UWVBFOlxuICAgICAgICAgICAgICAgIGxldCB2YWwgPSAwOyAgICAgICAgICAgICAgICBcblxuICAgICAgICAgICAgICAgIHJlZiA9IGFyZ1tOVU1fT0ZfUk9XU11bUkVGXTtcblxuICAgICAgICAgICAgICAgIGlmIChhcmdzU3BlY2lmaWNhdGlvbltyZWZdLnR5cGUgPT09IE5VTV9UWVBFKVxuICAgICAgICAgICAgICAgICAgICB2YWwgPSBhcmdzU3BlY2lmaWNhdGlvbltyZWZdLmRhdGE7XG4gICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICB2YWwgPSBhcmdzU3BlY2lmaWNhdGlvbltyZWZdLmRhdGFbYXJnW05VTV9PRl9ST1dTXVtWQUxVRV1dOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cbiAgICAgICAgICAgICAgICBhcmcuZGF0YSA9IHsnbnVtT2ZSb3dzJzogdmFsfTtcblxuICAgICAgICAgICAgICAgIGkrKztcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgLy8gY29sdW1ucyBvciBjb2x1bW5fbGlzdFxuICAgICAgICAgICAgY2FzZSBJTlRfQ09MVU1OU19UWVBFOlxuICAgICAgICAgICAgY2FzZSBGTE9BVF9DT0xVTU5TX1RZUEU6ICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIGxldCBhcnJheXMgPSBbXTsgICAgICAgICAgICAgICAgXG5cbiAgICAgICAgICAgICAgICAvLyB0aGlzIGlzIE9LIGlmIHR5cGUgb2YgY29sdW1ucyBhbmQgdGFyZ2V0IHR5cGUgY29pbnNpZGVcbiAgICAgICAgICAgICAgICAvL2ZvcihsZXQgY29sIG9mIGlucHV0VmFsc1tpXS50b0xpc3QoKSlcbiAgICAgICAgICAgICAgICAvLyAgYXJyYXlzLnB1c2goY29sLmdldFJhd0RhdGEoKSk7XG5cbiAgICAgICAgICAgICAgICAvLyBoZXJlLCB3ZSBjaGVjayB0eXBlcyBhbmQgcGVyZm9ybSBhbiBhcHByb3ByaWF0ZSB0cmFuc2Zvcm1cbiAgICAgICAgICAgICAgICBmb3IobGV0IGNvbCBvZiBpbnB1dFZhbHNbaV0udG9MaXN0KCkpXG4gICAgICAgICAgICAgICAgICBpZiggKCAoY29sLnR5cGUgPT09IElOVF9UWVBFKSAmJiAodHlwZSA9PT0gSU5UX0NPTFVNTl9UWVBFKSApIFxuICAgICAgICAgICAgICAgICAgICB8fCAoIChjb2wudHlwZSA9PT0gRE9VQkxFX1RZUEUpICYmICh0eXBlID09PSBGTE9BVF9DT0xVTU5fVFlQRSkgKSApXG4gICAgICAgICAgICAgICAgICAgIGFycmF5cy5wdXNoKGNvbC5nZXRSYXdEYXRhKCkpO1xuICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICBhcnJheXMucHVzaChuZXcgdHlwZU1hcFt0eXBlXShjb2wuZ2V0UmF3RGF0YSgpKSk7XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgLypmb3IobGV0IGNvbCBvZiBpbnB1dFZhbHNbaV0udG9MaXN0KCkpXG4gICAgICAgICAgICAgICAgICAgIGlmKCgoY29sLnR5cGUgPT0gJ2ludCcpICYmICh0eXBlID09IElOVF9DT0xVTU5fVFlQRSkpIFxuICAgICAgICAgICAgICAgICAgICAgIHx8ICgoY29sLnR5cGUgPT0gJ2RvdWJsZScpICYmICh0eXBlID09IEZMT0FUX0NPTFVNTl9UWVBFKSkpXG4gICAgICAgICAgICAgICAgICAgICAgYXJyYXlzLnB1c2goY29sLmdldFJhd0RhdGEoKSk7XG4gICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICBhcnJheXMucHVzaChuZXcgdHlwZU1hcFt0eXBlXShjb2wuZ2V0UmF3RGF0YSgpKSk7Ki9cblxuICAgICAgICAgICAgICAgIGFyZy5kYXRhID0geyAnYXJyYXlzJzogYXJyYXlzLFxuICAgICAgICAgICAgICAgICAgICAnbnVtT2ZSb3dzJzogYXJyYXlzWzBdLmxlbmd0aCxcbiAgICAgICAgICAgICAgICAgICAgJ251bU9mQ29sdW1ucyc6IGFycmF5cy5sZW5ndGh9O1xuXG4gICAgICAgICAgICAgICAgaSsrOyAgXG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIC8vIG5ldyBjb2x1bW5zIG9yIG5ldyBjb2x1bW5fbGlzdFxuICAgICAgICAgICAgY2FzZSBORVdfSU5UX0NPTFVNTlNfVFlQRTpcbiAgICAgICAgICAgIGNhc2UgTkVXX0ZMT0FUX0NPTFVNTlNfVFlQRTpcbiAgICAgICAgICAgICAgICBsZXQgdmFsMSA9IDA7XG4gICAgICAgICAgICAgICAgbGV0IHZhbDIgPSAwO1xuXG4gICAgICAgICAgICAgICAgcmVmID0gYXJnW05VTV9PRl9ST1dTXVtSRUZdO1xuXG4gICAgICAgICAgICAgICAgaWYgKGFyZ3NTcGVjaWZpY2F0aW9uW3JlZl0udHlwZSA9PT0gTlVNX1RZUEUpXG4gICAgICAgICAgICAgICAgICAgIHZhbDEgPSBhcmdzU3BlY2lmaWNhdGlvbltyZWZdLmRhdGE7XG4gICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICB2YWwxID0gYXJnc1NwZWNpZmljYXRpb25bcmVmXS5kYXRhW2FyZ1tOVU1fT0ZfUk9XU11bVkFMVUVdXTtcblxuICAgICAgICAgICAgICAgIHJlZiA9IGFyZ1tOVU1fT0ZfQ09MVU1OU11bUkVGXTtcblxuICAgICAgICAgICAgICAgIC8vY29uc29sZS5sb2coJ1JlZjonKTtcbiAgICAgICAgICAgICAgICAvL2NvbnNvbGUubG9nKHJlZik7XG4gICAgICAgICAgICAgICAgLy9jb25zb2xlLmxvZyhhcmdzU3BlY2lmaWNhdGlvbltyZWZdLmRhdGEpO1xuXG4gICAgICAgICAgICAgICAgaWYgKGFyZ3NTcGVjaWZpY2F0aW9uW3JlZl0udHlwZSA9PT0gTlVNX1RZUEUpXG4gICAgICAgICAgICAgICAgICAgIHZhbDIgPSBhcmdzU3BlY2lmaWNhdGlvbltyZWZdLmRhdGE7XG4gICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICB2YWwyID0gYXJnc1NwZWNpZmljYXRpb25bcmVmXS5kYXRhW2FyZ1tOVU1fT0ZfQ09MVU1OU11bVkFMVUVdXTsgICAgICAgICAgICAgICAgXG5cbiAgICAgICAgICAgICAgICBhcmcuZGF0YSA9IHsnbnVtT2ZSb3dzJzogdmFsMSxcbiAgICAgICAgICAgICAgICAgICdudW1PZkNvbHVtbnMnOiB2YWwyfTtcblxuICAgICAgICAgICAgICAgIGkrKztcbiAgICAgICAgICAgICAgICBicmVhazsgICAgICAgICAgICBcblxuICAgICAgICAgICAgZGVmYXVsdDogXG4gICAgICAgICAgICAgICAgcmV0dXJuOyAvLyBUT0RPOiBzcGVjaWZ5IGJlaGF2aW91ciAgICAgICAgICAgXG4gICAgICAgICAgICB9IC8vIHN3aXRjaCAgICAgICAgXG5cbiAgICAgICAgY3BwRnVuY0lucHV0LnB1c2goYXJnKTtcbiAgICB9IC8vIGZvciBrZXlcblxuICAgIC8vY29uc29sZS5sb2coJ2NwcEZ1bmNJbnB1dDonKTtcbiAgICAvL2NvbnNvbGUubG9nKGNwcEZ1bmNJbnB1dCk7XG5cbiAgICByZXR1cm4gY3BwRnVuY0lucHV0O1xufSAvLyBnZXRDcHBJbnB1dFxuXG4vLyBBbGxvY2F0ZSBtZW1vcnkgZm9yIGJ1ZmZlcnMgZm9yIGFycmF5IGRhdGFcbmZ1bmN0aW9uIGFsbG9jYXRlTWVtb3J5Rm9yQnVmZmVyKG1vZHVsZSwgaW5wdXRzKSB7XG4gICAgZm9yKGNvbnN0IGFyZyBvZiBpbnB1dHMpIHsgXG4gICAgICAgIGNvbnN0IHR5cGUgPSBhcmcudHlwZTtcblxuICAgICAgICBzd2l0Y2godHlwZSkgeyAvLyBQcm9jZXNzIGVhY2ggdHlwZSBvZiBpbnB1dFxuXG4gICAgICAgICAgICAvLyBudW1iZXJzXG4gICAgICAgICAgICBjYXNlIE5VTV9UWVBFOiBcbiAgICAgICAgICAgIGNhc2UgSU5UX1RZUEU6XG4gICAgICAgICAgICBjYXNlIERPVUJMRV9UWVBFOlxuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAvLyBjb2x1bW4gJiBuZXcgY29sdW1uXG4gICAgICAgICAgICBjYXNlIElOVF9DT0xVTU5fVFlQRTpcbiAgICAgICAgICAgIGNhc2UgRkxPQVRfQ09MVU1OX1RZUEU6XG4gICAgICAgICAgICBjYXNlIE5FV19GTE9BVF9DT0xVTU5fVFlQRTpcbiAgICAgICAgICAgIGNhc2UgTkVXX0lOVF9DT0xVTU5fVFlQRTpcbiAgICAgICAgICAgICAgICBhcmcuZGF0YS5idWYgPSBtb2R1bGUuX21hbGxvYyhhcmcuZGF0YS5udW1PZlJvd3MgKiB0eXBlTWFwW3R5cGVdLkJZVEVTX1BFUl9FTEVNRU5UKTtcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgLy8gY29sdW1ucyAmIG5ldyBjb2x1bW5zXG4gICAgICAgICAgICBjYXNlIElOVF9DT0xVTU5TX1RZUEU6ICAgICAgICAgICAgIFxuICAgICAgICAgICAgY2FzZSBORVdfSU5UX0NPTFVNTlNfVFlQRTpcbiAgICAgICAgICAgIGNhc2UgRkxPQVRfQ09MVU1OU19UWVBFOiAgICAgICAgICAgICBcbiAgICAgICAgICAgIGNhc2UgTkVXX0ZMT0FUX0NPTFVNTlNfVFlQRTogLy8gYWxsb2NhdGlvbiBtZW1vcnkgZm9yIGNvbHVtbnMgdGhhdCBhcmUgY3JlYXRlZFxuICAgICAgICAgICAgICAgIGFyZy5kYXRhLmJ1ZiA9IG1vZHVsZS5fbWFsbG9jKGFyZy5kYXRhLm51bU9mUm93cyAqIGFyZy5kYXRhLm51bU9mQ29sdW1ucyBcbiAgICAgICAgICAgICAgICAgICAgKiB0eXBlTWFwW3R5cGVdLkJZVEVTX1BFUl9FTEVNRU5UKTtcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgLy8gVE9ETzogcHJvY2VzcyBvdGhlciBjYXNlcyBhbmQgbWlzdGFrZXNcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgYnJlYWs7IFxuICAgICAgICB9ICBcbiAgICB9XG4gICAgXG4gICAgLy9jb25zb2xlLmxvZygnaW5wdXRzIGFmdGVyIG1lbW9yeSBhbGxvY2F0aW9uOicpO1xuICAgIC8vY29uc29sZS5sb2coaW5wdXRzKTtcbn0gLy8gYWxsb2NhdGVNZW1vcnlGb3JCdWZmZXJcblxuLy8gR2V0IGFycmF5IG9mIHZhbHVlcyB0aGF0IGFyZSBwdXQgdG8gd2FzbS1mdW5jdGlvbi5cbmZ1bmN0aW9uIGdldEFyck9mV2FzbVBhcmFtcyhpbnB1dHMpIHtcbiAgICBsZXQgcGFyYW1zID0gW107XG5cbiAgICAvLyBQcm9jZXNzIGVhY2ggdHlwZSBvZiBpbnB1dFxuICAgIGZvcihjb25zdCBhcmcgb2YgaW5wdXRzKSB7XG4gICAgICAgIHN3aXRjaCAoYXJnLnR5cGUpIHtcblxuICAgICAgICAgICAgLy8gbnVtYmVyc1xuICAgICAgICAgICAgY2FzZSBOVU1fVFlQRTogICAgICAgICAgICBcbiAgICAgICAgICAgIGNhc2UgSU5UX1RZUEU6XG4gICAgICAgICAgICBjYXNlIERPVUJMRV9UWVBFOlxuICAgICAgICAgICAgICAgIHBhcmFtcy5wdXNoKGFyZy5kYXRhKTtcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgLy8gY29sdW1uICYgbmV3IGNvbHVtblxuICAgICAgICAgICAgY2FzZSBJTlRfQ09MVU1OX1RZUEU6XG4gICAgICAgICAgICBjYXNlIEZMT0FUX0NPTFVNTl9UWVBFOlxuICAgICAgICAgICAgY2FzZSBORVdfRkxPQVRfQ09MVU1OX1RZUEU6XG4gICAgICAgICAgICBjYXNlIE5FV19JTlRfQ09MVU1OX1RZUEU6XG4gICAgICAgICAgICAgICAgcGFyYW1zLnB1c2goYXJnLmRhdGEuYnVmKTsgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgcGFyYW1zLnB1c2goYXJnLmRhdGEubnVtT2ZSb3dzKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgLy8gY29sdW1ucyAmIG5ldyBjb2x1bW5zXG4gICAgICAgICAgICBjYXNlIElOVF9DT0xVTU5TX1RZUEU6XG4gICAgICAgICAgICBjYXNlIE5FV19JTlRfQ09MVU1OU19UWVBFOlxuICAgICAgICAgICAgY2FzZSBGTE9BVF9DT0xVTU5TX1RZUEU6XG4gICAgICAgICAgICBjYXNlIE5FV19GTE9BVF9DT0xVTU5TX1RZUEU6IFxuICAgICAgICAgICAgICAgIHBhcmFtcy5wdXNoKGFyZy5kYXRhLmJ1Zik7XG4gICAgICAgICAgICAgICAgcGFyYW1zLnB1c2goYXJnLmRhdGEubnVtT2ZSb3dzKTtcbiAgICAgICAgICAgICAgICBwYXJhbXMucHVzaChhcmcuZGF0YS5udW1PZkNvbHVtbnMpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBcbiAgICAgICAgICAgIC8vIFRPRE86IHByb2Nlc3Mgb3RoZXIgY2FzZXMgYW5kIG1pc3Rha2VzXG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhcmFtcztcbn0gLy8gZ2V0QXJyT2ZXYXNtUGFyYW1zXG5cbi8vIEdldCBhcnJheSBvZiB0eXBlcyB0aGF0IGFyZSBwdXQgdG8gd2FzbS1mdW5jdGlvbi5cbmZ1bmN0aW9uIGdldEFyck9mV2FzbVR5cGVzKGlucHV0cykge1xuICAgIGxldCB0eXBlcyA9IFtdO1xuXG4gICAgZm9yKGNvbnN0IGFyZyBvZiBpbnB1dHMpIHtcbiAgICAgICAgc3dpdGNoIChhcmcudHlwZSkgeyAvLyBQcm9jZXNzIGVhY2ggdHlwZSBvZiBpbnB1dFxuXG4gICAgICAgICAgICAvLyBudW1iZXJzXG4gICAgICAgICAgICBjYXNlIE5VTV9UWVBFOlxuICAgICAgICAgICAgY2FzZSBJTlRfVFlQRTpcbiAgICAgICAgICAgIGNhc2UgRE9VQkxFX1RZUEU6XG4gICAgICAgICAgICAgICAgdHlwZXMucHVzaChOVU1CRVIpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAvLyBjb2x1bW4gJiBuZXcgY29sdW1uXG4gICAgICAgICAgICBjYXNlIElOVF9DT0xVTU5fVFlQRTpcbiAgICAgICAgICAgIGNhc2UgRkxPQVRfQ09MVU1OX1RZUEU6XG4gICAgICAgICAgICBjYXNlIE5FV19GTE9BVF9DT0xVTU5fVFlQRTpcbiAgICAgICAgICAgIGNhc2UgTkVXX0lOVF9DT0xVTU5fVFlQRTpcbiAgICAgICAgICAgICAgICB0eXBlcy5wdXNoKE5VTUJFUik7ICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIHR5cGVzLnB1c2goTlVNQkVSKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgLy8gY29sdW1ucyAmIG5ldyBjb2x1bW5zXG4gICAgICAgICAgICBjYXNlIElOVF9DT0xVTU5TX1RZUEU6XG4gICAgICAgICAgICBjYXNlIE5FV19JTlRfQ09MVU1OU19UWVBFOlxuICAgICAgICAgICAgY2FzZSBGTE9BVF9DT0xVTU5TX1RZUEU6XG4gICAgICAgICAgICBjYXNlIE5FV19GTE9BVF9DT0xVTU5TX1RZUEU6XG4gICAgICAgICAgICAgICAgdHlwZXMucHVzaChOVU1CRVIpO1xuICAgICAgICAgICAgICAgIHR5cGVzLnB1c2goTlVNQkVSKTtcbiAgICAgICAgICAgICAgICB0eXBlcy5wdXNoKE5VTUJFUik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIC8vIFRPRE86IHByb2Nlc3Mgb3RoZXIgY2FzZXMgYW5kIG1pc3Rha2VzXG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHR5cGVzO1xufSAvLyBnZXRBcnJPZldhc21UeXBlc1xuXG4vLyBQdXQgYXJyYXkgZGF0YSB0byBidWZmZXJcbmZ1bmN0aW9uIHB1dERhdGFUb0J1ZmZlcihtb2R1bGUsIGlucHV0cykge1xuICAgIGxldCBzaGlmdDtcbiAgICBsZXQgaGVhcDsgICAgXG4gICAgXG4gICAgZm9yKGNvbnN0IGFyZyBvZiBpbnB1dHMpIHtcbiAgICAgICAgY29uc3QgdHlwZSA9IGFyZy50eXBlO1xuXG4gICAgICAgIHN3aXRjaCAodHlwZSkgeyAvLyBQcm9jZXNzIGVhY2ggdHlwZSBvZiBpbnB1dFxuXG4gICAgICAgICAgICAvLyBudW1iZXJzXG4gICAgICAgICAgICBjYXNlIE5VTV9UWVBFOlxuICAgICAgICAgICAgY2FzZSBJTlRfVFlQRTpcbiAgICAgICAgICAgIGNhc2UgRE9VQkxFX1RZUEU6ICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgLy8gY29sdW1uXG4gICAgICAgICAgICBjYXNlIElOVF9DT0xVTU5fVFlQRTpcbiAgICAgICAgICAgIGNhc2UgRkxPQVRfQ09MVU1OX1RZUEU6ICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIHNoaWZ0ID0gc2hpZnRNYXBbdHlwZV07XG4gICAgICAgICAgICAgICAgaGVhcCA9IG1vZHVsZVtoZWFwTWFwW3R5cGVdXTsgIFxuICAgICAgICAgICAgICAgIGhlYXAuc2V0KGFyZy5kYXRhLmFycmF5LCBhcmcuZGF0YS5idWYgPj4gc2hpZnQpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICAvLyBjb2x1bW5zXG4gICAgICAgICAgICBjYXNlIElOVF9DT0xVTU5TX1RZUEU6XG4gICAgICAgICAgICBjYXNlIEZMT0FUX0NPTFVNTlNfVFlQRTpcbiAgICAgICAgICAgICAgICBzaGlmdCA9IHNoaWZ0TWFwW3R5cGVdO1xuICAgICAgICAgICAgICAgIGhlYXAgPSBtb2R1bGVbaGVhcE1hcFt0eXBlXV07XG4gICAgICAgICAgICAgICAgbGV0IG51bU9mQnl0ZXMgPSB0eXBlTWFwW3R5cGVdLkJZVEVTX1BFUl9FTEVNRU5UO1xuICAgICAgICAgICAgICAgIGxldCBidWYgPSBhcmcuZGF0YS5idWY7XG4gICAgICAgICAgICAgICAgbGV0IG51bU9mQ29sdW1ucyA9IGFyZy5kYXRhLm51bU9mQ29sdW1ucztcbiAgICAgICAgICAgICAgICBsZXQgbnVtT2ZSb3dzID0gYXJnLmRhdGEubnVtT2ZSb3dzO1xuICAgICAgICAgICAgICAgIGxldCBhcnJheXMgPSBhcmcuZGF0YS5hcnJheXM7XG5cbiAgICAgICAgICAgICAgICBmb3IobGV0IGkgPSAwOyBpIDwgbnVtT2ZDb2x1bW5zOyBpKyspXG4gICAgICAgICAgICAgICAgICAgIGhlYXAuc2V0KGFycmF5c1tpXSwgKGJ1ZiArIGkgKiBudW1PZlJvd3MgKiBudW1PZkJ5dGVzKSA+PiBzaGlmdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAvLyBuZXcgY29sdW1uKHMpXG4gICAgICAgICAgICBjYXNlIE5FV19JTlRfQ09MVU1OU19UWVBFOlxuICAgICAgICAgICAgY2FzZSBORVdfRkxPQVRfQ09MVU1OU19UWVBFOlxuICAgICAgICAgICAgY2FzZSBORVdfRkxPQVRfQ09MVU1OX1RZUEU6XG4gICAgICAgICAgICBjYXNlIE5FV19JTlRfQ09MVU1OX1RZUEU6ICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAvLyBUT0RPOiBwcm9jZXNzIG90aGVyIGNhc2VzIGFuZCBtaXN0YWtlc1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cbn0gLy8gcHV0RGF0YVRvQnVmZmVyXG5cbi8vIEdldCBhcnJheSBkYXRhIGZyb20gYnVmZmVyLlxuZnVuY3Rpb24gZ2V0RGF0YUZyb21CdWZmZXIobW9kdWxlLCBpbnB1dHMpIHtcblxuICAgIGxldCBoZWFwO1xuICAgIGxldCBudW1PZlJvd3M7XG4gICAgbGV0IG51bU9mQ29scztcbiAgICBsZXQgbnVtT2ZCeXRlczsgICAgXG4gICAgbGV0IGJ1ZjtcblxuICAgIGZvcihjb25zdCBhcmcgb2YgaW5wdXRzKSB7XG4gICAgICAgIGNvbnN0IHR5cGUgPSBhcmcudHlwZTtcblxuICAgICAgICBzd2l0Y2ggKHR5cGUpIHsgLy8gUHJvY2VzcyBlYWNoIHR5cGUgb2YgaW5wdXRcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgLy8gbnVtYmVyXG4gICAgICAgICAgICBjYXNlIE5VTV9UWVBFOlxuICAgICAgICAgICAgY2FzZSBJTlRfVFlQRTpcbiAgICAgICAgICAgIGNhc2UgRE9VQkxFX1RZUEU6XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIC8vIGNvbHVtbihzKVxuICAgICAgICAgICAgY2FzZSBJTlRfQ09MVU1OX1RZUEU6XG4gICAgICAgICAgICBjYXNlIEZMT0FUX0NPTFVNTl9UWVBFOlxuICAgICAgICAgICAgY2FzZSBGTE9BVF9DT0xVTU5TX1RZUEU6ICBcbiAgICAgICAgICAgIGNhc2UgSU5UX0NPTFVNTlNfVFlQRTogICAgICAgICAgXG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIC8vIG5ldyBjb2x1bW5cbiAgICAgICAgICAgIGNhc2UgTkVXX0ZMT0FUX0NPTFVNTl9UWVBFOlxuICAgICAgICAgICAgY2FzZSBORVdfSU5UX0NPTFVNTl9UWVBFOlxuICAgICAgICAgICAgICAgIGhlYXAgPSBtb2R1bGVbaGVhcE1hcFt0eXBlXV07XG4gICAgICAgICAgICAgICAgbnVtT2ZSb3dzID0gYXJnLmRhdGEubnVtT2ZSb3dzO1xuICAgICAgICAgICAgICAgIG51bU9mQnl0ZXMgPSB0eXBlTWFwW3R5cGVdLkJZVEVTX1BFUl9FTEVNRU5UOyAgICBcbiAgICAgICAgICAgICAgICBidWYgPSBhcmcuZGF0YS5idWY7XG4gICAgICAgICAgICAgICAgbGV0IGFycmF5ID0gbmV3IHR5cGVNYXBbdHlwZV0obnVtT2ZSb3dzKTtcblxuICAgICAgICAgICAgICAgIGZvcihsZXQgaiA9IDA7IGogPCBudW1PZlJvd3M7IGorKylcbiAgICAgICAgICAgICAgICAgICAgYXJyYXlbal0gPSBoZWFwW2J1ZiAvIG51bU9mQnl0ZXMgKyBqXTtcblxuICAgICAgICAgICAgICAgIGFyZy5hcnJheSA9IGFycmF5O1xuXG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIC8vIG5ldyBjb2x1bW5zXG4gICAgICAgICAgICBjYXNlIE5FV19JTlRfQ09MVU1OU19UWVBFOlxuICAgICAgICAgICAgY2FzZSBORVdfRkxPQVRfQ09MVU1OU19UWVBFOiBcbiAgICAgICAgICAgICAgICBoZWFwID0gbW9kdWxlW2hlYXBNYXBbdHlwZV1dO1xuICAgICAgICAgICAgICAgIG51bU9mUm93cyA9IGFyZy5kYXRhLm51bU9mUm93cztcbiAgICAgICAgICAgICAgICBudW1PZkNvbHMgPSBhcmcuZGF0YS5udW1PZkNvbHVtbnM7XG4gICAgICAgICAgICAgICAgbnVtT2ZCeXRlcyA9IHR5cGVNYXBbdHlwZV0uQllURVNfUEVSX0VMRU1FTlQ7ICAgIFxuICAgICAgICAgICAgICAgIGJ1ZiA9IGFyZy5kYXRhLmJ1ZjtcbiAgICAgICAgICAgICAgICBsZXQgYXJyYXlzID0gW107XG5cbiAgICAgICAgICAgICAgICBmb3IobGV0IGkgPSAwOyBpIDwgbnVtT2ZDb2xzOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICBsZXQgYXJyID0gbmV3IHR5cGVNYXBbdHlwZV0obnVtT2ZSb3dzKTtcblxuICAgICAgICAgICAgICAgICAgIGZvcihsZXQgaiA9IDA7IGogPCBudW1PZlJvd3M7IGorKylcbiAgICAgICAgICAgICAgICAgICAgICBhcnJbal0gPSBoZWFwW2J1ZiAvIG51bU9mQnl0ZXMgKyBqICsgaSAqIG51bU9mUm93c107ICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgYXJyYXlzLnB1c2goYXJyKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBhcmcuYXJyYXlzID0gYXJyYXlzO1xuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBcbiAgICAgICAgICAgIC8vIFRPRE86IHByb2Nlc3Mgb3RoZXIgY2FzZXMgYW5kIG1pc3Rha2VzXG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfSAgICAgICAgICAgIFxufSAvLyBnZXREYXRhRnJvbUJ1ZmZlclxuXG4vLyBDbGVhciBtZW1vcnkgYWxsb2NhdGVkIGZvciBhcnJheSBkYXRhXG5mdW5jdGlvbiBjbGVhck1lbW9yeUZvckJ1ZmZlcihtb2R1bGUsIGlucHV0cykge1xuICAgIGZvcihjb25zdCBhcmcgb2YgaW5wdXRzKSBcbiAgICAgICAgc3dpdGNoKGFyZy50eXBlKSB7IC8vIHByb2Nlc3MgZWFjaCB0eXBlIG9mIGlucHV0XG5cbiAgICAgICAgICAgIC8vIG51bWJlclxuICAgICAgICAgICAgY2FzZSBOVU1fVFlQRTpcbiAgICAgICAgICAgIGNhc2UgSU5UX1RZUEU6XG4gICAgICAgICAgICBjYXNlIERPVUJMRV9UWVBFOlxuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAvLyBlYWNoIG5vbi1udW1iZXIgY2FzZVxuICAgICAgICAgICAgY2FzZSBJTlRfQ09MVU1OX1RZUEU6XG4gICAgICAgICAgICBjYXNlIEZMT0FUX0NPTFVNTl9UWVBFOiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgIGNhc2UgSU5UX0NPTFVNTlNfVFlQRTpcbiAgICAgICAgICAgIGNhc2UgTkVXX0lOVF9DT0xVTU5TX1RZUEU6XG4gICAgICAgICAgICBjYXNlIEZMT0FUX0NPTFVNTlNfVFlQRTpcbiAgICAgICAgICAgIGNhc2UgTkVXX0ZMT0FUX0NPTFVNTlNfVFlQRTpcbiAgICAgICAgICAgIGNhc2UgTkVXX0ZMT0FUX0NPTFVNTl9UWVBFOlxuICAgICAgICAgICAgY2FzZSBORVdfSU5UX0NPTFVNTl9UWVBFOlxuICAgICAgICAgICAgICAgIG1vZHVsZS5fZnJlZShhcmcuZGF0YS5idWYpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAvLyBUT0RPOiBwcm9jZXNzIG90aGVyIGNhc2VzIGFuZCBtaXN0YWtlc1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICBicmVhazsgXG4gICAgICAgIH0gICAgXG59IC8vIGNsZWFyTWVtb3J5Rm9yQnVmZmVyXG5cbi8vIEV4dHJhY3QgbmV3bHkgY3JlYXRlZCBkYXRhOiBuZXcgY29sdW1uKHMpIGFyZSBjcmVhdGVkXG5mdW5jdGlvbiBleHRyYWN0TmV3bHlDcmVhdGVkRGF0YShmdW5jU3BlY2lmaWNhdGlvbkFyZ3MsIGFyZ3NBZnRlcldhc21DYWxsKSB7XG4gICAgLy8gdHlwZS10by1jb2x1bW5fY3JlYXRvciBtYXBcbiAgICBjb25zdCB0eXBlVG9Db2x1bW5DcmVhdG9yTWFwID0geyduZXdGbG9hdENvbHVtbnMnOiBERy5Db2x1bW4uZnJvbUZsb2F0MzJBcnJheSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICduZXdJbnRDb2x1bW5zJzogREcuQ29sdW1uLmZyb21JbnQzMkFycmF5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ25ld0Zsb2F0Q29sdW1uJzogREcuQ29sdW1uLmZyb21GbG9hdDMyQXJyYXksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbmV3SW50Q29sdW1uJzogREcuQ29sdW1uLmZyb21JbnQzMkFycmF5fTtcblxuICAgIGxldCBpID0gMDtcblxuICAgIGZvcihjb25zdCBrZXkgaW4gZnVuY1NwZWNpZmljYXRpb25BcmdzKSBcbiAgICB7XG4gICAgICAgIGNvbnN0IGFyZyA9IGZ1bmNTcGVjaWZpY2F0aW9uQXJnc1trZXldO1xuXG4gICAgICAgIHN3aXRjaChhcmcudHlwZSl7IC8vIFByb2Nlc3MgZWFjaCB0eXBlXG5cbiAgICAgICAgICAgIC8vIG51bWJlclxuICAgICAgICAgICAgY2FzZSBOVU1fVFlQRTpcbiAgICAgICAgICAgIGNhc2UgSU5UX1RZUEU6XG4gICAgICAgICAgICBjYXNlIERPVUJMRV9UWVBFOlxuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAvLyBjb2x1bW4ocylcbiAgICAgICAgICAgIGNhc2UgSU5UX0NPTFVNTl9UWVBFOlxuICAgICAgICAgICAgY2FzZSBGTE9BVF9DT0xVTU5fVFlQRTpcbiAgICAgICAgICAgIGNhc2UgRkxPQVRfQ09MVU1OU19UWVBFOlxuICAgICAgICAgICAgY2FzZSBJTlRfQ09MVU1OU19UWVBFOlxuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAvLyBuZXcgY29sdW1uXG4gICAgICAgICAgICBjYXNlIE5FV19GTE9BVF9DT0xVTU5fVFlQRTpcbiAgICAgICAgICAgIGNhc2UgTkVXX0lOVF9DT0xVTU5fVFlQRTpcbiAgICAgICAgICAgICAgICBsZXQgbmFtZTtcblxuICAgICAgICAgICAgICAgIC8vIHNwZWNpZnkgbmFtZSBmb3IgY29sdW1uXG4gICAgICAgICAgICAgICAgaWYoYXJnLm5hbWUgPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgICAgICBuYW1lID0gKDApLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgZWxzZSBcbiAgICAgICAgICAgICAgICAgICAgbmFtZXMgPSBhcmcubmFtZTtcblxuICAgICAgICAgICAgICAgIGFyZy5jb2x1bW4gPSB0eXBlVG9Db2x1bW5DcmVhdG9yTWFwW2FyZy50eXBlXShuYW1lLFxuICAgICAgICAgICAgICAgICAgICBhcmdzQWZ0ZXJXYXNtQ2FsbFtpXS5hcnJheSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIC8vIG5ldyBjb2x1bW5zXG4gICAgICAgICAgICBjYXNlIE5FV19JTlRfQ09MVU1OU19UWVBFOlxuICAgICAgICAgICAgY2FzZSBORVdfRkxPQVRfQ09MVU1OU19UWVBFOlxuICAgICAgICAgICAgICAgIGxldCBjb2x1bW5zID0gW107XG4gICAgICAgICAgICAgICAgbGV0IGxlbmd0aCA9IGFyZ3NBZnRlcldhc21DYWxsW2ldLmFycmF5cy5sZW5ndGg7XG5cbiAgICAgICAgICAgICAgICBsZXQgbmFtZXMgPSBbXTtcblxuICAgICAgICAgICAgICAgIC8vIHNwZWNpZnkgbmFtZSBmb3IgY29sdW1uXG4gICAgICAgICAgICAgICAgaWYoYXJnLm5hbWVzID09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICAgICAgZm9yKGxldCBrID0gMTsgayA8PSBsZW5ndGg7IGsrKylcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWVzLnB1c2goKGspLnRvU3RyaW5nKCkpO1xuICAgICAgICAgICAgICAgIGVsc2UgbmFtZXMgPSBhcmcubmFtZXM7XG5cbiAgICAgICAgICAgICAgICBmb3IobGV0IGogPSAwOyBqIDwgbGVuZ3RoOyBqKyspXG4gICAgICAgICAgICAgICAgICAgIGNvbHVtbnMucHVzaCh0eXBlVG9Db2x1bW5DcmVhdG9yTWFwW2FyZy50eXBlXShuYW1lc1tqXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3NBZnRlcldhc21DYWxsW2ldLmFycmF5c1tqXSkpO1xuXG4gICAgICAgICAgICAgICAgYXJnLmNvbHVtbnMgPSBjb2x1bW5zO1xuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAvLyBUT0RPOiBwcm9jZXNzIG90aGVyIGNhc2VzIGFuZCBtaXN0YWtlc1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIGkrKztcbiAgICB9XG59IC8vIGV4dHJhY3ROZXdseUNyZWF0ZWREYXRhXG5cbi8vIEdldCBvdXRwdXQgZGF0YTogb3ZlcmFsbCBvdXRwdXQgaXMgY3JlYXRlZFxuZnVuY3Rpb24gZ2V0T3V0cHV0KGZ1bmNTcGVjaWZpY2F0aW9uKSB7ICBcbiAgICBsZXQgb3V0cHV0ID0gZnVuY1NwZWNpZmljYXRpb24ub3V0cHV0O1xuICAgIFxuICAgIGNvbnN0IHR5cGVUb0RhdGFGaWVsZE1hcCA9IHsnbmV3RmxvYXRDb2x1bW5zJzogJ2NvbHVtbnMnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbmV3SW50Q29sdW1ucyc6ICdjb2x1bW5zJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ25ld0Zsb2F0Q29sdW1uJzogJ2NvbHVtbicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICduZXdJbnRDb2x1bW4nOiAnY29sdW1uJ307XG5cbiAgICBzd2l0Y2gob3V0cHV0LnR5cGUpIHtcblxuICAgICAgICBjYXNlIE5VTV9UWVBFOlxuICAgICAgICBjYXNlIElOVF9UWVBFOlxuICAgICAgICBjYXNlIERPVUJMRV9UWVBFOlxuICAgICAgICAgICAgcmV0dXJuIGZ1bmNTcGVjaWZpY2F0aW9uLmFyZ3VtZW50c1tvdXRwdXQuc291cmNlXTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgQ09MVU1OOlxuICAgICAgICAgICAgcmV0dXJuIGZ1bmNTcGVjaWZpY2F0aW9uLmFyZ3VtZW50c1tvdXRwdXQuc291cmNlXS5jb2x1bW47XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIFRBQkxFX09GX0NPTFVNTlM6XG4gICAgICAgICAgICByZXR1cm4gREcuRGF0YUZyYW1lLmZyb21Db2x1bW5zKGZ1bmNTcGVjaWZpY2F0aW9uLmFyZ3VtZW50c1tvdXRwdXQuc291cmNlXS5jb2x1bW5zKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgT0JKRUNUUzpcbiAgICAgICAgICAgIGxldCBhcnJheVRvUmV0dXJuID0gW107XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIC8vIHB1c2ggZGF0YSBvZiB0aGUgcmVxdWlyZWQgYXJndW1lbnRzXG4gICAgICAgICAgICBmb3IobGV0IG5hbWUgb2Ygb3V0cHV0LnNvdXJjZSkge1xuICAgICAgICAgICAgICAgIGxldCBhcmcgPSBmdW5jU3BlY2lmaWNhdGlvbi5hcmd1bWVudHNbbmFtZV07XG4gICAgICAgICAgICAgICAgYXJyYXlUb1JldHVybi5wdXNoKGFyZ1t0eXBlVG9EYXRhRmllbGRNYXBbYXJnLnR5cGVdXSk7XG4gICAgICAgICAgICB9ICAgICAgICAgICAgICAgIFxuXG4gICAgICAgICAgICByZXR1cm4gYXJyYXlUb1JldHVybjtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIFRPRE86IHByb2Nlc3Mgb3RoZXIgY2FzZXMgYW5kIG1pc3Rha2VzXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBicmVhaztcbiAgICB9XG5cbn0gLy8gZ2V0T3V0cHV0XG5cbi8vIENsZWFyIG5ld2x5IGNyZWF0ZWQgZGF0YSBmaWVsZHMgKG5ldyBjb2x1bW4ocykpXG5mdW5jdGlvbiBjbGVhck5ld2x5Q3JlYXRlZERhdGEoZnVuY1NwZWNpZmljYXRpb25BcmdzKSB7IFxuICAgIGZvcihjb25zdCBrZXkgaW4gZnVuY1NwZWNpZmljYXRpb25BcmdzKSB7XG4gICAgICAgIGNvbnN0IGFyZyA9IGZ1bmNTcGVjaWZpY2F0aW9uQXJnc1trZXldO1xuXG4gICAgICAgIHN3aXRjaCAoYXJnLnR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgTlVNX1RZUEU6XG4gICAgICAgICAgICBjYXNlIElOVF9UWVBFOlxuICAgICAgICAgICAgY2FzZSBET1VCTEVfVFlQRTpcbiAgICAgICAgICAgIGNhc2UgSU5UX0NPTFVNTl9UWVBFOlxuICAgICAgICAgICAgY2FzZSBGTE9BVF9DT0xVTU5fVFlQRTogICAgICAgICAgICBcbiAgICAgICAgICAgIGNhc2UgSU5UX0NPTFVNTlNfVFlQRTpcbiAgICAgICAgICAgIGNhc2UgRkxPQVRfQ09MVU1OU19UWVBFOlxuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlIE5FV19JTlRfQ09MVU1OX1RZUEU6XG4gICAgICAgICAgICBjYXNlIE5FV19GTE9BVF9DT0xVTU5fVFlQRTpcbiAgICAgICAgICAgICAgICBhcmcuY29sdW1uID0gbnVsbDsgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgTkVXX0lOVF9DT0xVTU5TX1RZUEU6XG4gICAgICAgICAgICBjYXNlIE5FV19GTE9BVF9DT0xVTU5TX1RZUEU6XG4gICAgICAgICAgICAgICAgYXJnLmNvbHVtbnMgPSBudWxsO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBcbiAgICAgICAgICAgIC8vIFRPRE86IHByb2Nlc3Mgb3RoZXIgY2FzZXMgYW5kIG1pc3Rha2VzXG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxufSAvLyBjbGVhck5ld2x5Q3JlYXRlZERhdGFcblxuLy8gVEhFIE1BSU4gRlVOQ1RJT046IGEgd3JhcHBlciBmb3IgQysrLWZ1bmN0aW9uIGNhbGxcbmV4cG9ydCBmdW5jdGlvbiBjcHBXcmFwcGVyKG1vZHVsZSwgYXJncywgY3BwRnVuY05hbWUsIHJldHVyblR5cGUpIHtcbiAgICAvLyBhbGxvY2F0ZSBtZW1vcnkgZm9yIGFycmF5cyB0aGF0IGFyZSBwYXNzZWQgdG8gQysrLWZ1bmN0aW9uXG4gICAgYWxsb2NhdGVNZW1vcnlGb3JCdWZmZXIobW9kdWxlLCBhcmdzKTtcblxuICAgIC8vIHB1dCBkYXRhIChqdXN0IGNvbHVtbihzKSkgdG8gYWxsb2NhdGVkIGJ1ZmZlcnNcbiAgICBwdXREYXRhVG9CdWZmZXIobW9kdWxlLCBhcmdzKTtcblxuICAgIC8vIGNyZWF0ZSBhcnJheSBvZiBwYXJhbWV0ZXJzIHRoYXQgYXJlIHBhc3NlZCB0byBDKystZnVuY3Rpb25cbiAgICBsZXQgcGFyYW1zID0gZ2V0QXJyT2ZXYXNtUGFyYW1zKGFyZ3MpO1xuXG4gICAgLy9jb25zb2xlLmxvZygncGFyYW1zOicpO1xuICAgIC8vY29uc29sZS5sb2cocGFyYW1zKTtcblxuICAgIC8vIGNyZWF0ZSBhcnJheSBvZiBwYXJhbWV0ZXJzJyB0eXBlcyB0aGF0IGFyZSBwYXNzZWQgdG8gQysrLWZ1bmN0aW9uXG4gICAgbGV0IHR5cGVzID0gZ2V0QXJyT2ZXYXNtVHlwZXMoYXJncyk7XG4gICAgXG4gICAgLy9jb25zb2xlLmxvZygndHlwZXM6Jyk7XG4gICAgLy9jb25zb2xlLmxvZyh0eXBlcyk7XG5cbiAgICAvLyBjYWxsIHdhc20tZnVuY3Rpb25cbiAgICBsZXQgcmVzdWx0ID0gbW9kdWxlLmNjYWxsKGNwcEZ1bmNOYW1lLCByZXR1cm5UeXBlLCB0eXBlcywgcGFyYW1zKTtcbiAgICBcbiAgICAvL2NvbnNvbGUubG9nKHJlc3VsdCk7XG5cbiAgICAvLyBnZXQgZGF0YSBmcm9tIGJ1ZmZlcnMgKGp1c3QgY29sdW1uKHMpKVxuICAgIGdldERhdGFGcm9tQnVmZmVyKG1vZHVsZSwgYXJncyk7ICAgICAgICBcblxuICAgIC8vIGNsZWFyIG1lbW9yeSB0aGF0IHdhcyBwcmV2aW91c2VseSBhbGxvY2F0ZWRcbiAgICBjbGVhck1lbW9yeUZvckJ1ZmZlcihtb2R1bGUsIGFyZ3MpO1xuXG4gICAgLy9jb25zb2xlLmxvZygnZG9uZScpO1xuXG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLy8gR2V0IHRoZSByZXF1aXJlZCBvdXRwdXQuXG4vLyBJdCB0YWtlcyBhIHNwZWNpZmljYXRpb24gb2YgdGhlIGZ1bmN0aW9uIGFuZCB0aGUgZGF0YSBjb21wdXRlZFxuLy8gYW5kIGV4dHJhY3RzIHRoZSByZXF1aXJlZCByZXN1bHRzLlxuZXhwb3J0IGZ1bmN0aW9uIGdldFJlc3VsdChmdW5jU3BlY2lmaWNhdGlvbiwgZGF0YUZyb21XZWJXb3JrZXIpIHtcbiAgICBmdW5jU3BlY2lmaWNhdGlvbi5hcmd1bWVudHMuX2NhbGxSZXN1bHQgPSBkYXRhRnJvbVdlYldvcmtlci5jYWxsUmVzdWx0OyAgXG5cbiAgICBleHRyYWN0TmV3bHlDcmVhdGVkRGF0YShmdW5jU3BlY2lmaWNhdGlvbi5hcmd1bWVudHMsIGRhdGFGcm9tV2ViV29ya2VyLmFyZ3MpOyAgICBcblxuICAgIGxldCBvdXRQdXQgPSBnZXRPdXRwdXQoZnVuY1NwZWNpZmljYXRpb24pO1xuXG4gICAgLy8gQmVsb3csIHdlIHJlbW92ZSBuZXdseSBjcmVhdGVkIGNvbHVtbihzKSwgd2hpY2ggYXJlIGNyZWF0ZWQgYXQgdGhlIGV4dHJhY3Rpb24tc3RlcC5cbiAgICAvLyBJdCBpcyBlc3BlY2lhbGx5IHJlcXVpcmVkLCB3aGVuIG11bHRpcGxlIGNhbGwgb2Ygd2FzbS1mdW5jdGlvbnMgaW4gd2Vid29ya2VyLlxuICAgIGNsZWFyTmV3bHlDcmVhdGVkRGF0YShmdW5jU3BlY2lmaWNhdGlvbi5hcmd1bWVudHMpO1xuXG4gICAgcmV0dXJuIG91dFB1dDtcbn0iLCJpbXBvcnQgKiBhcyBERyBmcm9tICdkYXRhZ3Jvay1hcGkvZGcnO1xuLy8gSW5wdXRzIGNvcnJlY3RuZXNzIGNoZWNrIHRvb2xzXG4vL0xpbWl0YXRpb24gY29uc3RhbnRzXG5jb25zdCBDT01QX01JTiA9IDE7XG5jb25zdCBTQU1QTEVTX0NPVU5UX01JTiA9IDE7XG5jb25zdCBGRUFUVVJFU19DT1VOVF9NSU4gPSAxO1xuY29uc3QgUEVSQ0VOVEFHRV9NSU4gPSAwO1xuY29uc3QgUEVSQ0VOVEFHRV9NQVggPSAxMDA7XG5jb25zdCBNQVhfRUxFTUVOVFNfQ09VTlQgPSAxMDAwMDAwMDA7XG4vLyBFcnJvciBtZXNzYWdlc1xuY29uc3QgQ09NUF9QT1NJVFZFX01FUyA9ICdjb21wb25lbnRzIG11c3QgYmUgcG9zaXRpdmUuJztcbmNvbnN0IENPTVBfRVhDRVNTID0gJ2NvbXBvbmVudHMgbXVzdCBub3QgYmUgZ3JlYXRlciB0aGFuIGZlYXR1cmVzIGNvdW50Lic7XG5jb25zdCBJTkNPUkVSUkVDVF9NSU5fTUFYX01FUyA9ICdtaW4gbXVzdCBiZSBsZXNzIHRoYW4gbWF4Lic7XG5jb25zdCBJTkNPUkVSUkVDVF9GRUFUVVJFU19NRVMgPSAnZmVhdHVyZXMgbXVzdCBiZSBwb3NpdGl2ZS4nO1xuY29uc3QgSU5DT1JFUlJFQ1RfU0FNUExFU19NRVMgPSAnc2FtcGxlcyBtdXN0IGJlIHBvc2l0aXZlLic7XG5jb25zdCBJTkNPUkVSUkVDVF9QRVJDRU5UQUdFX01FUyA9ICd2aW9sYXRvcnMgcGVyY2VudGFnZSBtdXN0IGJlIGZyb20gdGhlIHJhbmdlIGZyb20gMCB0byAxMDAuJztcbmNvbnN0IERBVEFGUkFNRV9JU19UT09fQklHX01FUyA9ICdkYXRhZnJhbWUgaXMgdG9vIGJpZy4nO1xuY29uc3QgVU5TVVBQT1JURURfQ09MVU1OX1RZUEVfTUVTID0gJ3Vuc3VwcG9ydGVkIGNvbHVtbiB0eXBlOiAnO1xuY29uc3QgSU5DT1JSRUNUX01JTl9ESVNUX01FUyA9ICdtaW4gZGlzdGFuY2UgbXVzdCBiZSBwb3NpdGl2ZS4nO1xuY29uc3QgSU5DT1JSRUNUX1NQUkVBRF9NRVMgPSAnc3ByZWFkIG11c3QgYmUgcG9zaXRpdmUuJztcbmNvbnN0IElOQ09SUkVDVF9FUE9DSF9NRVMgPSAnbnVtYmVyIG9mIGVwb2NoIG11c3QgYmUgYXQgbGVhc3QgMS4nO1xuY29uc3QgSU5DT1JSRUNUX05FSUJPUlNfTUVTID0gJ251bWJlciBvZiBuZWlib3JzIG11c3QgYmUgYXQgbGVhc3QgMiBhbmQgbm90IGdyZWF0ZXIgdGhhbiBzYW1wbGVzIGNvdW50Lic7XG5jb25zdCBJTkNPUlJFQ1RfSVRFUkFUSU9OU19NRVMgPSAnbnVtYmVyIG9mIGl0ZXJhdGlvbnMgbXVzdCBiZSBhdCBsZWFzdCAxLic7XG5jb25zdCBJTkNPUlJFQ1RfTEVBUk5JTkdfUkFURV9NRVMgPSAnbGVhcm5pbmcgcmF0ZSBtdXN0IGJlIHBvc2l0aXZlLic7XG5jb25zdCBJTkNPUlJFQ1RfUEVSUExFWElUWV9NRVMgPSAncGVycGxleGl0eSBtdXN0IGJlIGF0IGxlYXN0IDIgYW5kIG5vdCBncmVhdGVyIHRoYW4gc2FtcGxlcyBjb3VudC4nO1xuY29uc3QgSU5DT1JSRUNUX1NURVBTX01FUyA9ICdzdGVwcyBtdXN0IGJlIG5vbi1uZWdhdGl2ZS4nO1xuY29uc3QgSU5DT1JSRUNUX0NZQ0xFU19NRVMgPSAnY3ljbGVzIG11c3QgYmUgcG9zaXRpdmUuJztcbmNvbnN0IElOQ09SUkVDVF9DVVRPRkZfTUVTID0gJ2N1dG9mZiBtdXN0IGJlIG5vbi1uZWdhdGl2ZS4nO1xuLyoqIENoZWNrIGNvbHVtbiB0eXBlICovXG5leHBvcnQgZnVuY3Rpb24gY2hlY2tDb2x1bW5UeXBlKGNvbCkge1xuICAgIGlmICgoY29sLnR5cGUgIT0gREcuQ09MVU1OX1RZUEUuRkxPQVQpICYmIChjb2wudHlwZSAhPSBERy5DT0xVTU5fVFlQRS5JTlQpKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoVU5TVVBQT1JURURfQ09MVU1OX1RZUEVfTUVTICsgY29sLnR5cGUpO1xufVxuLyoqIENoZWNrIG1pc3NpbmcgdmFsdWVzICovXG5leHBvcnQgZnVuY3Rpb24gY2hlY2tNaXNzaW5nVmFscyhjb2wpIHtcbiAgICBpZiAoY29sLnN0YXRzLm1pc3NpbmdWYWx1ZUNvdW50ID4gMClcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBUaGUgY29sdW1uICcke2NvbC5uYW1lfScgaGFzIG1pc3NpbmcgdmFsdWVzLmApO1xufVxuLy8gQ2hlY2sgZGltZW5zaW9uIHJlZHVjZXIgaW5wdXRzXG5leHBvcnQgZnVuY3Rpb24gY2hlY2tEaW1lbnNpb25SZWR1Y2VySW5wdXRzKGZlYXR1cmVzLCBjb21wb25lbnRzKSB7XG4gICAgaWYgKGNvbXBvbmVudHMgPCBDT01QX01JTilcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKENPTVBfUE9TSVRWRV9NRVMpO1xuICAgIGlmIChjb21wb25lbnRzID4gZmVhdHVyZXMubGVuZ3RoKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoQ09NUF9FWENFU1MpO1xuICAgIGZvciAoY29uc3QgY29sIG9mIGZlYXR1cmVzKSB7XG4gICAgICAgIGNoZWNrQ29sdW1uVHlwZShjb2wpO1xuICAgICAgICBjaGVja01pc3NpbmdWYWxzKGNvbCk7XG4gICAgfVxufVxuLy8gQ2hlY2sgVU1BUCBpbnB1dHNcbmV4cG9ydCBmdW5jdGlvbiBjaGVja1VNQVBpbnB1dHMoZmVhdHVyZXMsIGNvbXBvbmVudHMsIGVwb2NocywgbmVpZ2hib3JzLCBtaW5EaXN0LCBzcHJlYWQpIHtcbiAgICAvLyBHZW5lcmFsIGRpbSByZWR1Y2VyIGNoZWNrc1xuICAgIGNoZWNrRGltZW5zaW9uUmVkdWNlcklucHV0cyhmZWF0dXJlcywgY29tcG9uZW50cyk7XG4gICAgLy8gQ2hlY2sgZGF0YSB0b3RhbCBzaXplXG4gICAgaWYgKGZlYXR1cmVzLmxlbmd0aCAqIGZlYXR1cmVzLmJ5SW5kZXgoMCkubGVuZ3RoID4gTUFYX0VMRU1FTlRTX0NPVU5UKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoREFUQUZSQU1FX0lTX1RPT19CSUdfTUVTKTtcbiAgICAvLyBVTUFQIHNwZWNpZmljIGNoZWNrc1xuICAgIGlmIChtaW5EaXN0IDw9IDApXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihJTkNPUlJFQ1RfTUlOX0RJU1RfTUVTKTtcbiAgICBpZiAoc3ByZWFkIDw9IDApXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihJTkNPUlJFQ1RfU1BSRUFEX01FUyk7XG4gICAgaWYgKGVwb2NocyA8IDEpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihJTkNPUlJFQ1RfRVBPQ0hfTUVTKTtcbiAgICBpZiAoKG5laWdoYm9ycyA8IDIpIHx8IChuZWlnaGJvcnMgPiBmZWF0dXJlcy5ieUluZGV4KDApLmxlbmd0aCkpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihJTkNPUlJFQ1RfTkVJQk9SU19NRVMpO1xufVxuLy8gQ2hlY2sgdC1TTkUgaW5wdXRzXG5leHBvcnQgZnVuY3Rpb24gY2hlY2tUU05FaW5wdXRzKGZlYXR1cmVzLCBjb21wb25lbnRzLCBsZWFybmluZ1JhdGUsIHBlcnBsZXhpdHksIGl0ZXJhdGlvbnMpIHtcbiAgICAvLyBHZW5lcmFsIGRpbSByZWR1Y2VyIGNoZWNrc1xuICAgIGNoZWNrRGltZW5zaW9uUmVkdWNlcklucHV0cyhmZWF0dXJlcywgY29tcG9uZW50cyk7XG4gICAgLy8gQ2hlY2sgZGF0YSB0b3RhbCBzaXplXG4gICAgaWYgKGZlYXR1cmVzLmxlbmd0aCAqIGZlYXR1cmVzLmJ5SW5kZXgoMCkubGVuZ3RoID4gTUFYX0VMRU1FTlRTX0NPVU5UKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoREFUQUZSQU1FX0lTX1RPT19CSUdfTUVTKTtcbiAgICAvLyB0LVNORSBzcGVjaWZpYyBjaGVja3NcbiAgICBpZiAobGVhcm5pbmdSYXRlIDwgMClcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKElOQ09SUkVDVF9MRUFSTklOR19SQVRFX01FUyk7XG4gICAgaWYgKGl0ZXJhdGlvbnMgPCAxKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoSU5DT1JSRUNUX0lURVJBVElPTlNfTUVTKTtcbiAgICBpZiAoKHBlcnBsZXhpdHkgPCAyKSB8fCAocGVycGxleGl0eSA+IGZlYXR1cmVzLmJ5SW5kZXgoMCkubGVuZ3RoKSlcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKElOQ09SUkVDVF9QRVJQTEVYSVRZX01FUyk7XG59XG4vLyBDaGVjayBTUEUgaW5wdXRzXG5leHBvcnQgZnVuY3Rpb24gY2hlY2tTUEVpbnB1dHMoZmVhdHVyZXMsIGRpbWVuc2lvbiwgc3RlcHMsIGN5Y2xlcywgY3V0b2ZmLCBsYW1iZGEpIHtcbiAgICAvLyBHZW5lcmFsIGRpbSByZWR1Y2VyIGNoZWNrc1xuICAgIGNoZWNrRGltZW5zaW9uUmVkdWNlcklucHV0cyhmZWF0dXJlcywgZGltZW5zaW9uKTtcbiAgICAvLyBDaGVjayBkYXRhIHRvdGFsIHNpemVcbiAgICBpZiAoZmVhdHVyZXMubGVuZ3RoICogZmVhdHVyZXMuYnlJbmRleCgwKS5sZW5ndGggPiBNQVhfRUxFTUVOVFNfQ09VTlQpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihEQVRBRlJBTUVfSVNfVE9PX0JJR19NRVMpO1xuICAgIC8vIFNQRSBzcGVjaWZpYyBjaGVja3NcbiAgICBpZiAoc3RlcHMgPCAwKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoSU5DT1JSRUNUX1NURVBTX01FUyk7XG4gICAgaWYgKGN5Y2xlcyA8PSAwKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoSU5DT1JSRUNUX0NZQ0xFU19NRVMpO1xuICAgIGlmIChjdXRvZmYgPCAwKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoSU5DT1JSRUNUX0NVVE9GRl9NRVMpO1xuICAgIGlmIChsYW1iZGEgPD0gMClcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKElOQ09SUkVDVF9MRUFSTklOR19SQVRFX01FUyk7XG59XG4vLyBDaGVjayB3YXNtIGRpbWVuc2lvbiByZWR1Y2VyIGlucHV0c1xuZXhwb3J0IGZ1bmN0aW9uIGNoZWNrV2FzbURpbWVuc2lvblJlZHVjZXJJbnB1dHMoZmVhdHVyZXMsIGNvbXBvbmVudHMpIHtcbiAgICAvLyBHZW5lcmFsIGRpbSByZWR1Y2VyIGNoZWNrc1xuICAgIGNoZWNrRGltZW5zaW9uUmVkdWNlcklucHV0cyhmZWF0dXJlcywgY29tcG9uZW50cyk7XG4gICAgLy8gQ2hlY2sgZGF0YSB0b3RhbCBzaXplXG4gICAgaWYgKGZlYXR1cmVzLmxlbmd0aCAqIGZlYXR1cmVzLmJ5SW5kZXgoMCkubGVuZ3RoID4gTUFYX0VMRU1FTlRTX0NPVU5UKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoREFUQUZSQU1FX0lTX1RPT19CSUdfTUVTKTtcbn1cbi8vIENoZWNrIGlucHV0cyBvZiBkYXRhIGZvciBTVk0gdGVzdGluZyBnZW5lcmF0b3JcbmV4cG9ydCBmdW5jdGlvbiBjaGVja0dlbmVyYXRvclNWTWlucHV0cyhzYW1wbGVzQ291bnQsIGZlYXR1cmVzQ291bnQsIG1pbiwgbWF4LCB2aW9sYXRvcnNQZXJjZW50YWdlKSB7XG4gICAgaWYgKG1pbiA+PSBtYXgpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihJTkNPUkVSUkVDVF9NSU5fTUFYX01FUyk7XG4gICAgaWYgKGZlYXR1cmVzQ291bnQgPCBGRUFUVVJFU19DT1VOVF9NSU4pXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihJTkNPUkVSUkVDVF9GRUFUVVJFU19NRVMpO1xuICAgIGlmIChzYW1wbGVzQ291bnQgPCBTQU1QTEVTX0NPVU5UX01JTilcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKElOQ09SRVJSRUNUX1NBTVBMRVNfTUVTKTtcbiAgICBpZiAoKHZpb2xhdG9yc1BlcmNlbnRhZ2UgPCBQRVJDRU5UQUdFX01JTikgfHwgKHZpb2xhdG9yc1BlcmNlbnRhZ2UgPiBQRVJDRU5UQUdFX01BWCkpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihJTkNPUkVSUkVDVF9QRVJDRU5UQUdFX01FUyk7XG59XG4vLyBSZXR1cm5zIHJvd3Mgb2YgY29sdW1uIGRhdGFcbmV4cG9ydCBmdW5jdGlvbiBnZXRSb3dzT2ZOdW1lcmljYWxDb2x1bW5ucyhjb2x1bW5MaXN0KSB7XG4gICAgY29uc3QgY29sdW1ucyA9IGNvbHVtbkxpc3QudG9MaXN0KCk7XG4gICAgY29uc3Qgcm93Q291bnQgPSBjb2x1bW5zWzBdLmxlbmd0aDtcbiAgICBjb25zdCBjb2xDb3VudCA9IGNvbHVtbnMubGVuZ3RoO1xuICAgIGNvbnN0IG91dHB1dCA9IFtdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcm93Q291bnQ7ICsraSlcbiAgICAgICAgb3V0cHV0LnB1c2goQXJyYXkoY29sQ291bnQpKTtcbiAgICBmb3IgKGxldCBqID0gMDsgaiA8IGNvbENvdW50OyArK2opIHtcbiAgICAgICAgY29uc3QgY29sID0gY29sdW1uc1tqXTtcbiAgICAgICAgY2hlY2tDb2x1bW5UeXBlKGNvbCk7XG4gICAgICAgIGNvbnN0IGFycmF5ID0gY29sLmdldFJhd0RhdGEoKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCByb3dDb3VudDsgKytpKVxuICAgICAgICAgICAgb3V0cHV0W2ldW2pdID0gYXJyYXlbaV07XG4gICAgfVxuICAgIHJldHVybiBvdXRwdXQ7XG59XG4iLCIvLyBFeHBsb3JhdG9yeSBkYXRhIGFuYWx5c2lzIChFREEpIHRvb2xzXG52YXIgX19hd2FpdGVyID0gKHRoaXMgJiYgdGhpcy5fX2F3YWl0ZXIpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcbiAgICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xuICAgIH0pO1xufTtcbmltcG9ydCAqIGFzIERHIGZyb20gJ2RhdGFncm9rLWFwaS9kZyc7XG5pbXBvcnQgeyBfcHJpbmNpcGFsQ29tcG9uZW50QW5hbHlzaXNJbldlYldvcmtlciwgX3BhcnRpYWxMZWFzdFNxdWFyZVJlZ3Jlc3Npb25JbldlYldvcmtlciB9IGZyb20gJy4uL3dhc20vRURBQVBJJztcbmltcG9ydCB7IGNoZWNrV2FzbURpbWVuc2lvblJlZHVjZXJJbnB1dHMsIGNoZWNrVU1BUGlucHV0cywgY2hlY2tUU05FaW5wdXRzLCBnZXRSb3dzT2ZOdW1lcmljYWxDb2x1bW5ucyB9IGZyb20gJy4vdXRpbHMnO1xuLy8gUHJpbmNpcGFsIGNvbXBvbmVudHMgYW5hbHlzaXMgKFBDQSlcbmV4cG9ydCBmdW5jdGlvbiBjb21wdXRlUENBKHRhYmxlLCBmZWF0dXJlcywgY29tcG9uZW50cywgY2VudGVyLCBzY2FsZSkge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGNoZWNrV2FzbURpbWVuc2lvblJlZHVjZXJJbnB1dHMoZmVhdHVyZXMsIGNvbXBvbmVudHMpO1xuICAgICAgICBjb25zdCBjZW50ZXJOdW0gPSBjZW50ZXIgPyAxIDogMDtcbiAgICAgICAgY29uc3Qgc2NhbGVOdW0gPSBzY2FsZSA/IDEgOiAwO1xuICAgICAgICByZXR1cm4geWllbGQgX3ByaW5jaXBhbENvbXBvbmVudEFuYWx5c2lzSW5XZWJXb3JrZXIodGFibGUsIGZlYXR1cmVzLCBjb21wb25lbnRzLCBjZW50ZXJOdW0sIHNjYWxlTnVtKTtcbiAgICB9KTtcbn1cbi8vIFBhcnRpYWwgbGVhc3Qgc3F1YXJlIHJlZ3Jlc3Npb24gKFBMUyk6IFRPIFJFTU9WRVxuZXhwb3J0IGZ1bmN0aW9uIGNvbXB1dGVQTFModGFibGUsIGZlYXR1cmVzLCBwcmVkaWN0LCBjb21wb25lbnRzKSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgLy8gSW5wdXRzIGFyZSBjaGVja2VkIGluIHRoZSBzYW1lIG1hbm5lciBhcyBpbiBQQ0EsIHNpbmNlIHRoZSBzYW1lIGNvbXB1dGF0aW9ucyBhcmUgYXBwbGllZC5cbiAgICAgICAgY2hlY2tXYXNtRGltZW5zaW9uUmVkdWNlcklucHV0cyhmZWF0dXJlcywgY29tcG9uZW50cyk7XG4gICAgICAgIHJldHVybiB5aWVsZCBfcGFydGlhbExlYXN0U3F1YXJlUmVncmVzc2lvbkluV2ViV29ya2VyKHRhYmxlLCBmZWF0dXJlcywgcHJlZGljdCwgY29tcG9uZW50cyk7XG4gICAgfSk7XG59XG4vLyBVbmlmb3JtIE1hbmlmb2xkIEFwcHJveGltYXRpb24gYW5kIFByb2plY3Rpb24gKFVNQVApXG5leHBvcnQgZnVuY3Rpb24gY29tcHV0ZVVNQVAoZmVhdHVyZXMsIGNvbXBvbmVudHMsIGVwb2NocywgbmVpZ2hib3JzLCBtaW5EaXN0LCBzcHJlYWQpIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAvLyBjaGVjayBpbnB1dHNcbiAgICAgICAgY2hlY2tVTUFQaW5wdXRzKGZlYXR1cmVzLCBjb21wb25lbnRzLCBlcG9jaHMsIG5laWdoYm9ycywgbWluRGlzdCwgc3ByZWFkKTtcbiAgICAgICAgLy8gZ2V0IHJvdy1ieS1yb3cgZGF0YVxuICAgICAgICBjb25zdCBkYXRhID0gZ2V0Um93c09mTnVtZXJpY2FsQ29sdW1ubnMoZmVhdHVyZXMpO1xuICAgICAgICBsZXQgd29ya2VyT3V0cHV0O1xuICAgICAgICAvLyBVTUFQIGluIHdlYndvcmtlclxuICAgICAgICBjb25zdCBwcm9taXNlID0gbmV3IFByb21pc2UoKHJlc29sdmUsIF9yZWplY3QpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHdvcmtlciA9IG5ldyBXb3JrZXIobmV3IFVSTCgnd29ya2Vycy91bWFwLXdvcmtlci50cycsIGltcG9ydC5tZXRhLnVybCkpO1xuICAgICAgICAgICAgd29ya2VyLnBvc3RNZXNzYWdlKHtcbiAgICAgICAgICAgICAgICBkYXRhOiBkYXRhLFxuICAgICAgICAgICAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgICAgICAgICAgICAgbkNvbXBvbmVudHM6IGNvbXBvbmVudHMsXG4gICAgICAgICAgICAgICAgICAgIG5FcG9jaHM6IGVwb2NocyxcbiAgICAgICAgICAgICAgICAgICAgbk5laWdoYm9yczogbmVpZ2hib3JzLFxuICAgICAgICAgICAgICAgICAgICBtaW5EaXN0OiBtaW5EaXN0LFxuICAgICAgICAgICAgICAgICAgICBzcHJlYWQ6IHNwcmVhZCxcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHdvcmtlci5vbm1lc3NhZ2UgPSBmdW5jdGlvbiAoZSkge1xuICAgICAgICAgICAgICAgIHdvcmtlci50ZXJtaW5hdGUoKTtcbiAgICAgICAgICAgICAgICByZXNvbHZlKGUuZGF0YS5lbWJlZGRpbmdzKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0pO1xuICAgICAgICB5aWVsZCBwcm9taXNlLnRoZW4oKHJlc3VsdCkgPT4geyB3b3JrZXJPdXRwdXQgPSByZXN1bHQ7IH0sIChfZXJyb3IpID0+IHsgdGhyb3cgbmV3IEVycm9yKCdhcHBseWluZyBVTUFQIGZhaWxzLicpOyB9KTtcbiAgICAgICAgY29uc3QgZW1iZWRkaW5ncyA9IHdvcmtlck91dHB1dDtcbiAgICAgICAgY29uc3Qgcm93Q291bnQgPSBlbWJlZGRpbmdzLmxlbmd0aDtcbiAgICAgICAgY29uc3QgcmFuZ2UgPSBbLi4uQXJyYXkoY29tcG9uZW50cykua2V5cygpXTtcbiAgICAgICAgLy8gQ3JlYXRlIG91dHB1dFxuICAgICAgICAvLyBjb2x1bW5zIGRhdGFcbiAgICAgICAgY29uc3QgdW1hcENvbHVtbnNEYXRhID0gcmFuZ2UubWFwKChfKSA9PiBuZXcgRmxvYXQzMkFycmF5KHJvd0NvdW50KSk7XG4gICAgICAgIC8vIHBlcmZvcm0gdHJhbnNwb25hdGlvblxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJvd0NvdW50OyArK2kpIHtcbiAgICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgY29tcG9uZW50czsgKytqKVxuICAgICAgICAgICAgICAgIHVtYXBDb2x1bW5zRGF0YVtqXVtpXSA9IGVtYmVkZGluZ3NbaV1bal07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIERHLkRhdGFGcmFtZS5mcm9tQ29sdW1ucyhyYW5nZS5tYXAoKGkpID0+IERHLkNvbHVtbi5mcm9tRmxvYXQzMkFycmF5KCdVTUFQJyArIGkudG9TdHJpbmcoKSwgdW1hcENvbHVtbnNEYXRhW2ldKSkpO1xuICAgIH0pO1xufSAvLyBjb21wdXRlVU1BUFxuLy8gdC1kaXN0cmlidXRlZCBzdG9jaGFzdGljIG5laWdoYm9yIGVtYmVkZGluZyAodC1TTkUpXG5leHBvcnQgZnVuY3Rpb24gY29tcHV0ZVRTTkUoZmVhdHVyZXMsIGNvbXBvbmVudHMsIGxlYXJuaW5nUmF0ZSwgcGVycGxleGl0eSwgaXRlcmF0aW9ucykge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIC8vIGNoZWNrIGlucHV0c1xuICAgICAgICBjaGVja1RTTkVpbnB1dHMoZmVhdHVyZXMsIGNvbXBvbmVudHMsIGxlYXJuaW5nUmF0ZSwgcGVycGxleGl0eSwgaXRlcmF0aW9ucyk7XG4gICAgICAgIC8vIGdldCByb3ctYnktcm93IGRhdGFcbiAgICAgICAgY29uc3QgZGF0YSA9IGdldFJvd3NPZk51bWVyaWNhbENvbHVtbm5zKGZlYXR1cmVzKTtcbiAgICAgICAgbGV0IHdvcmtlck91dHB1dDtcbiAgICAgICAgLy8gdC1TTkUgaW4gd2Vid29ya2VyXG4gICAgICAgIGNvbnN0IHByb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgX3JlamVjdCkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgd29ya2VyID0gbmV3IFdvcmtlcihuZXcgVVJMKCd3b3JrZXJzL3RzbmUtd29ya2VyLnRzJywgaW1wb3J0Lm1ldGEudXJsKSk7XG4gICAgICAgICAgICB3b3JrZXIucG9zdE1lc3NhZ2Uoe1xuICAgICAgICAgICAgICAgIGRhdGE6IGRhdGEsXG4gICAgICAgICAgICAgICAgb3B0aW9uczoge1xuICAgICAgICAgICAgICAgICAgICBsZWFybmluZ1JhdGU6IGxlYXJuaW5nUmF0ZSxcbiAgICAgICAgICAgICAgICAgICAgcGVycGxleGl0eTogcGVycGxleGl0eSxcbiAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50czogY29tcG9uZW50cyxcbiAgICAgICAgICAgICAgICAgICAgaXRlcmF0aW9uczogaXRlcmF0aW9ucyxcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHdvcmtlci5vbm1lc3NhZ2UgPSBmdW5jdGlvbiAoZSkge1xuICAgICAgICAgICAgICAgIHdvcmtlci50ZXJtaW5hdGUoKTtcbiAgICAgICAgICAgICAgICByZXNvbHZlKGUuZGF0YS5lbWJlZGRpbmdzKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0pO1xuICAgICAgICB5aWVsZCBwcm9taXNlLnRoZW4oKHJlc3VsdCkgPT4geyB3b3JrZXJPdXRwdXQgPSByZXN1bHQ7IH0sIChfZXJyb3IpID0+IHsgdGhyb3cgbmV3IEVycm9yKCdhcHBseWluZyB0LVNORSBmYWlscy4nKTsgfSk7XG4gICAgICAgIGNvbnN0IGVtYmVkZGluZ3MgPSB3b3JrZXJPdXRwdXQ7XG4gICAgICAgIGNvbnN0IHJvd0NvdW50ID0gZW1iZWRkaW5ncy5sZW5ndGg7XG4gICAgICAgIGNvbnN0IHJhbmdlID0gWy4uLkFycmF5KGNvbXBvbmVudHMpLmtleXMoKV07XG4gICAgICAgIC8vIENyZWF0ZSBvdXRwdXRcbiAgICAgICAgLy8gY29sdW1ucyBkYXRhXG4gICAgICAgIGNvbnN0IHVtYXBDb2x1bW5zRGF0YSA9IHJhbmdlLm1hcCgoXykgPT4gbmV3IEZsb2F0MzJBcnJheShyb3dDb3VudCkpO1xuICAgICAgICAvLyBwZXJmb3JtIHRyYW5zcG9uYXRpb25cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCByb3dDb3VudDsgKytpKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGNvbXBvbmVudHM7ICsrailcbiAgICAgICAgICAgICAgICB1bWFwQ29sdW1uc0RhdGFbal1baV0gPSBlbWJlZGRpbmdzW2ldW2pdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBERy5EYXRhRnJhbWUuZnJvbUNvbHVtbnMocmFuZ2UubWFwKChpKSA9PiBERy5Db2x1bW4uZnJvbUZsb2F0MzJBcnJheSgndFNORScgKyBpLnRvU3RyaW5nKCksIHVtYXBDb2x1bW5zRGF0YVtpXSkpKTtcbiAgICB9KTtcbn0gLy8gY29tcHV0ZVRTTkVcbiIsIi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4gKi9cbi8vIFRlc3QgZGF0YSBnZW5lcmF0aW9uIHRvb2xzXG52YXIgX19hd2FpdGVyID0gKHRoaXMgJiYgdGhpcy5fX2F3YWl0ZXIpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcbiAgICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xuICAgIH0pO1xufTtcbmltcG9ydCAqIGFzIERHIGZyb20gJ2RhdGFncm9rLWFwaS9kZyc7XG5pbXBvcnQgeyBjaGVja0dlbmVyYXRvclNWTWlucHV0cyB9IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IHsgX2dlbmVyYXRlRGF0YXNldEluV2ViV29ya2VyIH0gZnJvbSAnLi4vd2FzbS9FREFBUEknO1xuY29uc3QgU1ZNX0dFTl9GRUFUVVJFU19JTkRFWCA9IDA7XG5jb25zdCBTVk1fR0VOX0xBQkVMU19JTkRFWCA9IDE7XG5jb25zdCBTVk1fRkVBVFVSRV9OQU1FID0gJ0ZlYXR1cmUgIyc7XG5jb25zdCBTVk1fTEFCRUxfTkFNRSA9ICdMYWJlbCc7XG4vLyBSZXR1cm5zIHRoZSBkYXRhZnJhbWUgXCJjYXJzXCJcbmV4cG9ydCBmdW5jdGlvbiBjYXJzRGF0YWZyYW1lKCkge1xuICAgIHJldHVybiBERy5EYXRhRnJhbWUuZnJvbUNvbHVtbnMoW1xuICAgICAgICBERy5Db2x1bW4uZnJvbVN0cmluZ3MoJ21vZGVsJywgWydhbGZhcm9tZW8nLCAnYXVkaScsICdibXcnLCAnY2hldnJvbGV0JywgJ2RvZGdlMScsICdkb2RnZTInLCAnaG9uZGExJywgJ2hvbmRhMicsICdpc3V6dScsICdqYWd1YXInLCAnbWF6ZGEnLCAnbWVyY2VkZXMnLCAnbWVyY3VyeScsICdtaXRzdWJpc2hpJywgJ25pc3NhbjEnLCAnbmlzc2FuMicsICdwZXVnb3QnLCAncGx5bW91dGgnLCAncG9yc2NoZScsICdzYWFiJywgJ3N1YmFydScsICd0b3lvdGExJywgJ3RveW90YTInLCAndG95b3RhMycsICd0b3lvdGE0JywgJ3ZvbGtzd2FnZW4xJywgJ3ZvbGtzd2FnZW4yJywgJ3ZvbHZvMScsICd2b2x2bzInLCAndm9sdm8zJ10pLFxuICAgICAgICBERy5Db2x1bW4uZnJvbUludDMyQXJyYXkoJ2RpZXNlbCcsIG5ldyBJbnQzMkFycmF5KFswLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxLCAwLCAwLCAwLCAwLCAwLCAxLCAwLCAwLCAwLCAwLCAxLCAwLCAxLCAxLCAwLCAwLCAwLCAxXSkpLFxuICAgICAgICBERy5Db2x1bW4uZnJvbUludDMyQXJyYXkoJ3R1cmJvJywgbmV3IEludDMyQXJyYXkoWzAsIDAsIDAsIDAsIDEsIDAsIDAsIDAsIDAsIDAsIDAsIDEsIDEsIDAsIDAsIDAsIDAsIDEsIDAsIDAsIDAsIDAsIDAsIDAsIDEsIDAsIDAsIDAsIDEsIDFdKSksXG4gICAgICAgIERHLkNvbHVtbi5mcm9tSW50MzJBcnJheSgndHdvLmRvb3JzJywgbmV3IEludDMyQXJyYXkoWzEsIDAsIDEsIDAsIDEsIDAsIDEsIDAsIDAsIDAsIDAsIDAsIDEsIDEsIDAsIDEsIDAsIDAsIDEsIDAsIDAsIDEsIDAsIDEsIDAsIDEsIDAsIDAsIDAsIDBdKSksXG4gICAgICAgIERHLkNvbHVtbi5mcm9tSW50MzJBcnJheSgnaGF0Y2hiYWNrJywgbmV3IEludDMyQXJyYXkoWzEsIDAsIDAsIDAsIDEsIDEsIDEsIDAsIDAsIDAsIDAsIDAsIDEsIDEsIDAsIDAsIDEsIDAsIDAsIDAsIDAsIDEsIDAsIDEsIDAsIDAsIDAsIDAsIDAsIDBdKSksXG4gICAgICAgIERHLkNvbHVtbi5mcm9tRmxvYXQzMkFycmF5KCd3aGVlbC5iYXNlJywgbmV3IEZsb2F0MzJBcnJheShbOTQuNSwgMTA1LjgwMDAwMzA1MTc1NzgxLCAxMDEuMTk5OTk2OTQ4MjQyMTksIDk0LjUsIDkzLjY5OTk5Njk0ODI0MjE5LCA5My42OTk5OTY5NDgyNDIxOSwgOTMuNjk5OTk2OTQ4MjQyMTksIDk2LjUsIDk0LjMwMDAwMzA1MTc1NzgxLCAxMTMsIDkzLjA5OTk5ODQ3NDEyMTEsIDExNS41OTk5OTg0NzQxMjExLCAxMDIuNjk5OTk2OTQ4MjQyMTksIDkzLjY5OTk5Njk0ODI0MjE5LCA5NC41LCA5NC41LCA5My42OTk5OTY5NDgyNDIxOSwgMTE0LjE5OTk5Njk0ODI0MjE5LCA4OS41LCA5OS4wOTk5OTg0NzQxMjExLCA5Ny4xOTk5OTY5NDgyNDIxOSwgOTUuNjk5OTk2OTQ4MjQyMTksIDk1LjY5OTk5Njk0ODI0MjE5LCA5OC40MDAwMDE1MjU4Nzg5LCAxMDIuNDAwMDAxNTI1ODc4OSwgOTcuMzAwMDAzMDUxNzU3ODEsIDEwMC40MDAwMDE1MjU4Nzg5LCAxMDQuMzAwMDAzMDUxNzU3ODEsIDEwOS4wOTk5OTg0NzQxMjExLCAxMDkuMDk5OTk4NDc0MTIxMV0pKSxcbiAgICAgICAgREcuQ29sdW1uLmZyb21GbG9hdDMyQXJyYXkoJ2xlbmd0aCcsIG5ldyBGbG9hdDMyQXJyYXkoWzE3MS4xOTk5OTY5NDgyNDIyLCAxOTIuNjk5OTk2OTQ4MjQyMiwgMTc2LjgwMDAwMzA1MTc1NzgsIDE1OC44MDAwMDMwNTE3NTc4LCAxNTcuMzAwMDAzMDUxNzU3OCwgMTU3LjMwMDAwMzA1MTc1NzgsIDE1MCwgMTc1LjM5OTk5Mzg5NjQ4NDM4LCAxNzAuNjk5OTk2OTQ4MjQyMiwgMTk5LjYwMDAwNjEwMzUxNTYyLCAxNjYuODAwMDAzMDUxNzU3OCwgMjAyLjYwMDAwNjEwMzUxNTYyLCAxNzguMzk5OTkzODk2NDg0MzgsIDE1Ny4zMDAwMDMwNTE3NTc4LCAxNzAuMTk5OTk2OTQ4MjQyMiwgMTY1LjMwMDAwMzA1MTc1NzgsIDE1Ny4zMDAwMDMwNTE3NTc4LCAxOTguODk5OTkzODk2NDg0MzgsIDE2OC44OTk5OTM4OTY0ODQzOCwgMTg2LjYwMDAwNjEwMzUxNTYyLCAxNzIsIDE1OC42OTk5OTY5NDgyNDIyLCAxNjYuMzAwMDAzMDUxNzU3OCwgMTc2LjE5OTk5Njk0ODI0MjIsIDE3NS42MDAwMDYxMDM1MTU2MiwgMTcxLjY5OTk5Njk0ODI0MjIsIDE4MC4xOTk5OTY5NDgyNDIyLCAxODguODAwMDAzMDUxNzU3OCwgMTg4LjgwMDAwMzA1MTc1NzgsIDE4OC44MDAwMDMwNTE3NTc4XSkpLFxuICAgICAgICBERy5Db2x1bW4uZnJvbUZsb2F0MzJBcnJheSgnd2lkdGgnLCBuZXcgRmxvYXQzMkFycmF5KFs2NS41LCA3MS40MDAwMDE1MjU4Nzg5LCA2NC44MDAwMDMwNTE3NTc4MSwgNjMuNTk5OTk4NDc0MTIxMDk0LCA2My43OTk5OTkyMzcwNjA1NSwgNjMuNzk5OTk5MjM3MDYwNTUsIDY0LCA2NS4xOTk5OTY5NDgyNDIxOSwgNjEuNzk5OTk5MjM3MDYwNTUsIDY5LjU5OTk5ODQ3NDEyMTEsIDY0LjE5OTk5Njk0ODI0MjE5LCA3MS42OTk5OTY5NDgyNDIxOSwgNjgsIDY0LjQwMDAwMTUyNTg3ODksIDYzLjc5OTk5OTIzNzA2MDU1LCA2My43OTk5OTkyMzcwNjA1NSwgNjMuNzk5OTk5MjM3MDYwNTUsIDY4LjQwMDAwMTUyNTg3ODksIDY1LCA2Ni41LCA2NS40MDAwMDE1MjU4Nzg5LCA2My41OTk5OTg0NzQxMjEwOTQsIDY0LjQwMDAwMTUyNTg3ODksIDY1LjU5OTk5ODQ3NDEyMTEsIDY2LjUsIDY1LjUsIDY2LjkwMDAwMTUyNTg3ODksIDY3LjE5OTk5Njk0ODI0MjE5LCA2OC44MDAwMDMwNTE3NTc4MSwgNjguOTAwMDAxNTI1ODc4OV0pKSxcbiAgICAgICAgREcuQ29sdW1uLmZyb21GbG9hdDMyQXJyYXkoJ2hlaWdodCcsIG5ldyBGbG9hdDMyQXJyYXkoWzUyLjQwMDAwMTUyNTg3ODkwNiwgNTUuNzAwMDAwNzYyOTM5NDUsIDU0LjI5OTk5OTIzNzA2MDU1LCA1MiwgNTAuNzk5OTk5MjM3MDYwNTUsIDUwLjU5OTk5ODQ3NDEyMTA5NCwgNTIuNTk5OTk4NDc0MTIxMDk0LCA1NC4wOTk5OTg0NzQxMjEwOTQsIDUzLjUsIDUyLjc5OTk5OTIzNzA2MDU1LCA1NC4wOTk5OTg0NzQxMjEwOTQsIDU2LjI5OTk5OTIzNzA2MDU1LCA1NC43OTk5OTkyMzcwNjA1NSwgNTAuNzk5OTk5MjM3MDYwNTUsIDUzLjUsIDU0LjUsIDUwLjU5OTk5ODQ3NDEyMTA5NCwgNTguNzAwMDAwNzYyOTM5NDUsIDUxLjU5OTk5ODQ3NDEyMTA5NCwgNTYuMDk5OTk4NDc0MTIxMDk0LCA1Mi41LCA1NC41LCA1MywgNTIsIDU0LjkwMDAwMTUyNTg3ODkwNiwgNTUuNzAwMDAwNzYyOTM5NDUsIDU1LjA5OTk5ODQ3NDEyMTA5NCwgNTYuMjAwMDAwNzYyOTM5NDUsIDU1LjUsIDU1LjVdKSksXG4gICAgICAgIERHLkNvbHVtbi5mcm9tSW50MzJBcnJheSgnY3VyYi53ZWlnaHQnLCBuZXcgSW50MzJBcnJheShbMjgyMywgMjg0NCwgMjM5NSwgMTkwOSwgMjEyOCwgMTk2NywgMTk1NiwgMjMwNCwgMjMzNywgNDA2NiwgMTk1MCwgMzc3MCwgMjkxMCwgMTkxOCwgMjAyNCwgMTk1MSwgMTk2NywgMzQzMCwgMjgwMCwgMjY5NSwgMjE5MCwgMTk4NSwgMjI3NSwgMjU1MSwgMjQ4MCwgMjI2MSwgMjY2MSwgMjkxMiwgMzA0OSwgMzIxN10pKSxcbiAgICAgICAgREcuQ29sdW1uLmZyb21JbnQzMkFycmF5KCdlbmcuc2l6ZScsIG5ldyBJbnQzMkFycmF5KFsxNTIsIDEzNiwgMTA4LCA5MCwgOTgsIDkwLCA5MiwgMTEwLCAxMTEsIDI1OCwgOTEsIDE4MywgMTQwLCA5MiwgOTcsIDk3LCA5MCwgMTUyLCAxOTQsIDEyMSwgMTA4LCA5MiwgMTEwLCAxNDYsIDExMCwgOTcsIDEzNiwgMTQxLCAxNDEsIDE0NV0pKSxcbiAgICAgICAgREcuQ29sdW1uLmZyb21JbnQzMkFycmF5KCdob3JzZXBvd2VyJywgbmV3IEludDMyQXJyYXkoWzE1NCwgMTEwLCAxMDEsIDcwLCAxMDIsIDY4LCA3NiwgODYsIDc4LCAxNzYsIDY4LCAxMjMsIDE3NSwgNjgsIDY5LCA2OSwgNjgsIDk1LCAyMDcsIDExMCwgODIsIDYyLCA1NiwgMTE2LCA3MywgNTIsIDExMCwgMTE0LCAxNjAsIDEwNl0pKSxcbiAgICAgICAgREcuQ29sdW1uLmZyb21JbnQzMkFycmF5KCdwZWFrLnJwbScsIG5ldyBJbnQzMkFycmF5KFs1MDAwLCA1NTAwLCA1ODAwLCA1NDAwLCA1NTAwLCA1NTAwLCA2MDAwLCA1ODAwLCA0ODAwLCA0NzUwLCA1MDAwLCA0MzUwLCA1MDAwLCA1NTAwLCA1MjAwLCA1MjAwLCA1NTAwLCA0MTUwLCA1OTAwLCA1MjUwLCA0NDAwLCA0ODAwLCA0NTAwLCA0ODAwLCA0NTAwLCA0ODAwLCA1NTAwLCA1NDAwLCA1MzAwLCA0ODAwXSkpLFxuICAgICAgICBERy5Db2x1bW4uZnJvbUludDMyQXJyYXkoJ3N5bWJvbCcsIG5ldyBJbnQzMkFycmF5KFsxLCAxLCAyLCAwLCAxLCAxLCAxLCAwLCAwLCAwLCAxLCAtMSwgMSwgMiwgMSwgMSwgMSwgMCwgMywgMiwgMCwgMSwgMCwgMiwgLTEsIDIsIDAsIC0yLCAtMSwgLTFdKSksXG4gICAgICAgIERHLkNvbHVtbi5mcm9tSW50MzJBcnJheSgnY2l0eS5tcGcnLCBuZXcgSW50MzJBcnJheShbMTksIDE5LCAyMywgMzgsIDI0LCAzMSwgMzAsIDI3LCAyNCwgMTUsIDMxLCAyMiwgMTksIDM3LCAzMSwgMzEsIDMxLCAyNSwgMTcsIDIxLCAyOCwgMzUsIDM0LCAyNCwgMzAsIDM3LCAxOSwgMjMsIDE5LCAyNl0pKSxcbiAgICAgICAgREcuQ29sdW1uLmZyb21JbnQzMkFycmF5KCdoaWdod2F5Lm1wZycsIG5ldyBJbnQzMkFycmF5KFsyNiwgMjUsIDI5LCA0MywgMzAsIDM4LCAzNCwgMzMsIDI5LCAxOSwgMzgsIDI1LCAyNCwgNDEsIDM3LCAzNywgMzgsIDI1LCAyNSwgMjgsIDMzLCAzOSwgMzYsIDMwLCAzMywgNDYsIDI0LCAyOCwgMjUsIDI3XSkpLFxuICAgICAgICBERy5Db2x1bW4uZnJvbUludDMyQXJyYXkoJ3ByaWNlJywgbmV3IEludDMyQXJyYXkoWzE2NTAwLCAxNzcxMCwgMTY0MzAsIDY1NzUsIDc5NTcsIDYyMjksIDcxMjksIDg4NDUsIDY3ODUsIDM1NTUwLCA3Mzk1LCAzMTYwMCwgMTY1MDMsIDUzODksIDczNDksIDcyOTksIDYyMjksIDEzODYwLCAzNzAyOCwgMTIxNzAsIDc3NzUsIDUzNDgsIDc4OTgsIDk5ODksIDEwNjk4LCA3Nzc1LCAxMzI5NSwgMTI5NDAsIDE5MDQ1LCAyMjQ3MF0pKSxcbiAgICBdKTtcbn0gLy8gY2Fyc0RhdGFmcmFtZVxuLy8gR2VuZXJhdGUgZGF0YXNldCBmb3IgdGVzdGluZyBiaW5hcnkgY2xhc3NpZmllcnNcbmV4cG9ydCBmdW5jdGlvbiB0ZXN0RGF0YUZvckJpbmFyeUNsYXNzaWZpY2F0aW9uKGtlcm5lbCwga2VybmVsUGFyYW1zLCBuYW1lLCBzYW1wbGVzQ291bnQsIGZlYXR1cmVzQ291bnQsIG1pbiwgbWF4LCB2aW9sYXRvcnNQZXJjZW50YWdlKSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgLy8gY2hlY2sgaW5wdXRzXG4gICAgICAgIGNoZWNrR2VuZXJhdG9yU1ZNaW5wdXRzKHNhbXBsZXNDb3VudCwgZmVhdHVyZXNDb3VudCwgbWluLCBtYXgsIHZpb2xhdG9yc1BlcmNlbnRhZ2UpO1xuICAgICAgICAvLyBrZXJuZWwgcGFyYW1zIGNvbHVtblxuICAgICAgICBjb25zdCBrZXJuZWxQYXJhbXNDb2wgPSBERy5Db2x1bW4uZnJvbUxpc3QoJ2RvdWJsZScsICdrZXJuZWxQYXJhbXMnLCBrZXJuZWxQYXJhbXMpO1xuICAgICAgICAvLyBDQUxMIFdBU00tQ09NUFVUQVRJT05TXG4gICAgICAgIGxldCBfb3V0cHV0O1xuICAgICAgICBjb25zdCBfcHJvbWlzZSA9IF9nZW5lcmF0ZURhdGFzZXRJbldlYldvcmtlcihrZXJuZWwsIGtlcm5lbFBhcmFtc0NvbCwgc2FtcGxlc0NvdW50LCBmZWF0dXJlc0NvdW50LCBtaW4sIG1heCwgdmlvbGF0b3JzUGVyY2VudGFnZSk7XG4gICAgICAgIHlpZWxkIF9wcm9taXNlLnRoZW4oKF9yZXN1bHQpID0+IHsgX291dHB1dCA9IF9yZXN1bHQ7IH0sIChfZXJyb3IpID0+IHsgdGhyb3cgbmV3IEVycm9yKGBFcnJvcjogJHtfZXJyb3J9YCk7IH0pO1xuICAgICAgICAvLyBSZW5hbWUgbGFiZWxzIGNvbHVtblxuICAgICAgICBfb3V0cHV0W1NWTV9HRU5fTEFCRUxTX0lOREVYXS5uYW1lID0gU1ZNX0xBQkVMX05BTUU7XG4gICAgICAgIC8vIFJlbmFtZSBmZWF0dXJlIGNvbHVtbnNcbiAgICAgICAgZm9yIChjb25zdCBjb2wgb2YgX291dHB1dFtTVk1fR0VOX0ZFQVRVUkVTX0lOREVYXSlcbiAgICAgICAgICAgIGNvbC5uYW1lID0gU1ZNX0ZFQVRVUkVfTkFNRSArIGNvbC5uYW1lO1xuICAgICAgICAvLyBDcmVhdGUgZGF0YWZyYW1lXG4gICAgICAgIGNvbnN0IGRmID0gREcuRGF0YUZyYW1lLmZyb21Db2x1bW5zKF9vdXRwdXRbU1ZNX0dFTl9GRUFUVVJFU19JTkRFWF0pO1xuICAgICAgICBkZi5uYW1lID0gbmFtZTtcbiAgICAgICAgZGYuY29sdW1ucy5hZGQoX291dHB1dFtTVk1fR0VOX0xBQkVMU19JTkRFWF0pO1xuICAgICAgICByZXR1cm4gZGY7XG4gICAgfSk7XG59IC8vIHRlc3REYXRhRm9yTWFjaGluZUxlYXJuaW5nXG4iLCIvLyBUaGUgZm9sbG93aW5nIGNvZGUgaXMgZ2VuZXJhdGVkIGF1dG9tYXRpY2FsbHkuXG4vLyBKYXZhU2NyaXB0IEFQSSBmb3IgY2FsbCB3YXNtLWZ1bmN0aW9ucyBmcm9tIHRoZSBtb2R1bGUgRURBXG5cbi8vIEltcG9ydHMgZm9yIGNhbGwgd2FzbSBydW50aW1lLXN5c3RlbTogaW4gdGhlIG1haW4gc3RyZWFtIGFuZCBpbiB3ZWJ3b3JrZXJzXG5pbXBvcnQge2NhbGxXYXNtfSBmcm9tICcuLi93YXNtL2NhbGxXYXNtJztcbmltcG9ydCB7Z2V0Q3BwSW5wdXQsIGdldFJlc3VsdH0gZnJvbSAnLi4vd2FzbS9jYWxsV2FzbUZvcldlYldvcmtlcic7XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBfaW5pdEVEQUFQSSgpIHtcbiAgYXdhaXQgaW5pdEVEQSgpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX3ByaW5jaXBhbENvbXBvbmVudEFuYWx5c2lzKHRhYmxlLCBjb2x1bW5zLCBjb21wb25lbnRzQ291bnQsIGNlbnRlck51bSwgc2NhbGVOdW0pIHtcbiAgcmV0dXJuIGNhbGxXYXNtKEVEQSwgJ3ByaW5jaXBhbENvbXBvbmVudEFuYWx5c2lzJywgW2NvbHVtbnMsIGNvbXBvbmVudHNDb3VudCwgY2VudGVyTnVtLCBzY2FsZU51bV0pO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gX3ByaW5jaXBhbENvbXBvbmVudEFuYWx5c2lzSW5XZWJXb3JrZXIodGFibGUsIGNvbHVtbnMsIGNvbXBvbmVudHNDb3VudCwgY2VudGVyTnVtLCBzY2FsZU51bSkge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGNvbnN0IHdvcmtlciA9IG5ldyBXb3JrZXIobmV3IFVSTCgnLi4vd2FzbS93b3JrZXJzL3ByaW5jaXBhbENvbXBvbmVudEFuYWx5c2lzV29ya2VyLmpzJywgaW1wb3J0Lm1ldGEudXJsKSk7XG4gICAgd29ya2VyLnBvc3RNZXNzYWdlKGdldENwcElucHV0KEVEQVsncHJpbmNpcGFsQ29tcG9uZW50QW5hbHlzaXMnXS5hcmd1bWVudHMsW2NvbHVtbnMsIGNvbXBvbmVudHNDb3VudCwgY2VudGVyTnVtLCBzY2FsZU51bV0pKTtcbiAgICB3b3JrZXIub25tZXNzYWdlID0gZnVuY3Rpb24oZSkge1xuICAgICAgd29ya2VyLnRlcm1pbmF0ZSgpO1xuICAgICAgcmVzb2x2ZShnZXRSZXN1bHQoRURBWydwcmluY2lwYWxDb21wb25lbnRBbmFseXNpcyddLCBlLmRhdGEpKTtcbiAgICB9XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX2Vycm9yKGRmLCBjb2wxLCBjb2wyKSB7XG4gIHJldHVybiBjYWxsV2FzbShFREEsICdlcnJvcicsIFtjb2wxLCBjb2wyXSk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBfZXJyb3JJbldlYldvcmtlcihkZiwgY29sMSwgY29sMikge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGNvbnN0IHdvcmtlciA9IG5ldyBXb3JrZXIobmV3IFVSTCgnLi4vd2FzbS93b3JrZXJzL2Vycm9yV29ya2VyLmpzJywgaW1wb3J0Lm1ldGEudXJsKSk7XG4gICAgd29ya2VyLnBvc3RNZXNzYWdlKGdldENwcElucHV0KEVEQVsnZXJyb3InXS5hcmd1bWVudHMsW2NvbDEsIGNvbDJdKSk7XG4gICAgd29ya2VyLm9ubWVzc2FnZSA9IGZ1bmN0aW9uKGUpIHtcbiAgICAgIHdvcmtlci50ZXJtaW5hdGUoKTtcbiAgICAgIHJlc29sdmUoZ2V0UmVzdWx0KEVEQVsnZXJyb3InXSwgZS5kYXRhKSk7XG4gICAgfVxuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9wYXJ0aWFsTGVhc3RTcXVhcmVSZWdyZXNzaW9uKHRhYmxlLCBmZWF0dXJlcywgcHJlZGljdCwgY29tcG9uZW50c0NvdW50KSB7XG4gIHJldHVybiBjYWxsV2FzbShFREEsICdwYXJ0aWFsTGVhc3RTcXVhcmVSZWdyZXNzaW9uJywgW2ZlYXR1cmVzLCBwcmVkaWN0LCBjb21wb25lbnRzQ291bnRdKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIF9wYXJ0aWFsTGVhc3RTcXVhcmVSZWdyZXNzaW9uSW5XZWJXb3JrZXIodGFibGUsIGZlYXR1cmVzLCBwcmVkaWN0LCBjb21wb25lbnRzQ291bnQpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBjb25zdCB3b3JrZXIgPSBuZXcgV29ya2VyKG5ldyBVUkwoJy4uL3dhc20vd29ya2Vycy9wYXJ0aWFsTGVhc3RTcXVhcmVSZWdyZXNzaW9uV29ya2VyLmpzJywgaW1wb3J0Lm1ldGEudXJsKSk7XG4gICAgd29ya2VyLnBvc3RNZXNzYWdlKGdldENwcElucHV0KEVEQVsncGFydGlhbExlYXN0U3F1YXJlUmVncmVzc2lvbiddLmFyZ3VtZW50cyxbZmVhdHVyZXMsIHByZWRpY3QsIGNvbXBvbmVudHNDb3VudF0pKTtcbiAgICB3b3JrZXIub25tZXNzYWdlID0gZnVuY3Rpb24oZSkge1xuICAgICAgd29ya2VyLnRlcm1pbmF0ZSgpO1xuICAgICAgcmVzb2x2ZShnZXRSZXN1bHQoRURBWydwYXJ0aWFsTGVhc3RTcXVhcmVSZWdyZXNzaW9uJ10sIGUuZGF0YSkpO1xuICAgIH1cbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfZ2VuZXJhdGVEYXRhc2V0KGtlcm5lbCwga2VybmVsUGFyYW1zLCBzYW1wbGVzQ291bnQsIGZlYXR1cmVzQ291bnQsIG1pbiwgbWF4LCB2aW9sYXRvcnNQZXJjZW50YWdlKSB7XG4gIHJldHVybiBjYWxsV2FzbShFREEsICdnZW5lcmF0ZURhdGFzZXQnLCBba2VybmVsLCBrZXJuZWxQYXJhbXMsIHNhbXBsZXNDb3VudCwgZmVhdHVyZXNDb3VudCwgbWluLCBtYXgsIHZpb2xhdG9yc1BlcmNlbnRhZ2VdKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIF9nZW5lcmF0ZURhdGFzZXRJbldlYldvcmtlcihrZXJuZWwsIGtlcm5lbFBhcmFtcywgc2FtcGxlc0NvdW50LCBmZWF0dXJlc0NvdW50LCBtaW4sIG1heCwgdmlvbGF0b3JzUGVyY2VudGFnZSkge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGNvbnN0IHdvcmtlciA9IG5ldyBXb3JrZXIobmV3IFVSTCgnLi4vd2FzbS93b3JrZXJzL2dlbmVyYXRlRGF0YXNldFdvcmtlci5qcycsIGltcG9ydC5tZXRhLnVybCkpO1xuICAgIHdvcmtlci5wb3N0TWVzc2FnZShnZXRDcHBJbnB1dChFREFbJ2dlbmVyYXRlRGF0YXNldCddLmFyZ3VtZW50cyxba2VybmVsLCBrZXJuZWxQYXJhbXMsIHNhbXBsZXNDb3VudCwgZmVhdHVyZXNDb3VudCwgbWluLCBtYXgsIHZpb2xhdG9yc1BlcmNlbnRhZ2VdKSk7XG4gICAgd29ya2VyLm9ubWVzc2FnZSA9IGZ1bmN0aW9uKGUpIHtcbiAgICAgIHdvcmtlci50ZXJtaW5hdGUoKTtcbiAgICAgIHJlc29sdmUoZ2V0UmVzdWx0KEVEQVsnZ2VuZXJhdGVEYXRhc2V0J10sIGUuZGF0YSkpO1xuICAgIH1cbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfbm9ybWFsaXplRGF0YXNldChkYXRhKSB7XG4gIHJldHVybiBjYWxsV2FzbShFREEsICdub3JtYWxpemVEYXRhc2V0JywgW2RhdGFdKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIF9ub3JtYWxpemVEYXRhc2V0SW5XZWJXb3JrZXIoZGF0YSkge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGNvbnN0IHdvcmtlciA9IG5ldyBXb3JrZXIobmV3IFVSTCgnLi4vd2FzbS93b3JrZXJzL25vcm1hbGl6ZURhdGFzZXRXb3JrZXIuanMnLCBpbXBvcnQubWV0YS51cmwpKTtcbiAgICB3b3JrZXIucG9zdE1lc3NhZ2UoZ2V0Q3BwSW5wdXQoRURBWydub3JtYWxpemVEYXRhc2V0J10uYXJndW1lbnRzLFtkYXRhXSkpO1xuICAgIHdvcmtlci5vbm1lc3NhZ2UgPSBmdW5jdGlvbihlKSB7XG4gICAgICB3b3JrZXIudGVybWluYXRlKCk7XG4gICAgICByZXNvbHZlKGdldFJlc3VsdChFREFbJ25vcm1hbGl6ZURhdGFzZXQnXSwgZS5kYXRhKSk7XG4gICAgfVxuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF90cmFpbkxTU1ZNKGdhbW1hLCBrZXJuZWwsIGtlcm5lbFBhcmFtcywgbW9kZWxQYXJhbXNDb3VudCwgcHJlY29tcHV0ZWRXZWlnaHRzQ291bnQsIGRhdGFzZXQsIGxhYmVscykge1xuICByZXR1cm4gY2FsbFdhc20oRURBLCAndHJhaW5MU1NWTScsIFtnYW1tYSwga2VybmVsLCBrZXJuZWxQYXJhbXMsIG1vZGVsUGFyYW1zQ291bnQsIHByZWNvbXB1dGVkV2VpZ2h0c0NvdW50LCBkYXRhc2V0LCBsYWJlbHNdKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIF90cmFpbkxTU1ZNSW5XZWJXb3JrZXIoZ2FtbWEsIGtlcm5lbCwga2VybmVsUGFyYW1zLCBtb2RlbFBhcmFtc0NvdW50LCBwcmVjb21wdXRlZFdlaWdodHNDb3VudCwgZGF0YXNldCwgbGFiZWxzKSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgY29uc3Qgd29ya2VyID0gbmV3IFdvcmtlcihuZXcgVVJMKCcuLi93YXNtL3dvcmtlcnMvdHJhaW5MU1NWTVdvcmtlci5qcycsIGltcG9ydC5tZXRhLnVybCkpO1xuICAgIHdvcmtlci5wb3N0TWVzc2FnZShnZXRDcHBJbnB1dChFREFbJ3RyYWluTFNTVk0nXS5hcmd1bWVudHMsW2dhbW1hLCBrZXJuZWwsIGtlcm5lbFBhcmFtcywgbW9kZWxQYXJhbXNDb3VudCwgcHJlY29tcHV0ZWRXZWlnaHRzQ291bnQsIGRhdGFzZXQsIGxhYmVsc10pKTtcbiAgICB3b3JrZXIub25tZXNzYWdlID0gZnVuY3Rpb24oZSkge1xuICAgICAgd29ya2VyLnRlcm1pbmF0ZSgpO1xuICAgICAgcmVzb2x2ZShnZXRSZXN1bHQoRURBWyd0cmFpbkxTU1ZNJ10sIGUuZGF0YSkpO1xuICAgIH1cbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfcHJlZGljdEJ5TFNTVk0oa2VybmVsLCBrZXJuZWxQYXJhbXMsIG5vcm1hbGl6ZWREYXRhLCBsYWJlbHMsIG1lYW5zLCBzdGREZXZzLCBtb2RlbFBhcmFtcywgcHJlY29tcHV0ZWRXZWlnaHRzLCB0YXJnZXREYXRhKSB7XG4gIHJldHVybiBjYWxsV2FzbShFREEsICdwcmVkaWN0QnlMU1NWTScsIFtrZXJuZWwsIGtlcm5lbFBhcmFtcywgbm9ybWFsaXplZERhdGEsIGxhYmVscywgbWVhbnMsIHN0ZERldnMsIG1vZGVsUGFyYW1zLCBwcmVjb21wdXRlZFdlaWdodHMsIHRhcmdldERhdGFdKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIF9wcmVkaWN0QnlMU1NWTUluV2ViV29ya2VyKGtlcm5lbCwga2VybmVsUGFyYW1zLCBub3JtYWxpemVkRGF0YSwgbGFiZWxzLCBtZWFucywgc3RkRGV2cywgbW9kZWxQYXJhbXMsIHByZWNvbXB1dGVkV2VpZ2h0cywgdGFyZ2V0RGF0YSkge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGNvbnN0IHdvcmtlciA9IG5ldyBXb3JrZXIobmV3IFVSTCgnLi4vd2FzbS93b3JrZXJzL3ByZWRpY3RCeUxTU1ZNV29ya2VyLmpzJywgaW1wb3J0Lm1ldGEudXJsKSk7XG4gICAgd29ya2VyLnBvc3RNZXNzYWdlKGdldENwcElucHV0KEVEQVsncHJlZGljdEJ5TFNTVk0nXS5hcmd1bWVudHMsW2tlcm5lbCwga2VybmVsUGFyYW1zLCBub3JtYWxpemVkRGF0YSwgbGFiZWxzLCBtZWFucywgc3RkRGV2cywgbW9kZWxQYXJhbXMsIHByZWNvbXB1dGVkV2VpZ2h0cywgdGFyZ2V0RGF0YV0pKTtcbiAgICB3b3JrZXIub25tZXNzYWdlID0gZnVuY3Rpb24oZSkge1xuICAgICAgd29ya2VyLnRlcm1pbmF0ZSgpO1xuICAgICAgcmVzb2x2ZShnZXRSZXN1bHQoRURBWydwcmVkaWN0QnlMU1NWTSddLCBlLmRhdGEpKTtcbiAgICB9XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX3RyYWluQW5kQW5hbHl6ZUxTU1ZNKGdhbW1hLCBrZXJuZWwsIGtlcm5lbFBhcmFtcywgbW9kZWxQYXJhbXNDb3VudCwgcHJlY29tcHV0ZWRXZWlnaHRzQ291bnQsIGNvbmZ1c2lvbk1hdHJpeEVsZW1lbnRzQ291bnQsIGRhdGFzZXQsIGxhYmVscykge1xuICByZXR1cm4gY2FsbFdhc20oRURBLCAndHJhaW5BbmRBbmFseXplTFNTVk0nLCBbZ2FtbWEsIGtlcm5lbCwga2VybmVsUGFyYW1zLCBtb2RlbFBhcmFtc0NvdW50LCBwcmVjb21wdXRlZFdlaWdodHNDb3VudCwgY29uZnVzaW9uTWF0cml4RWxlbWVudHNDb3VudCwgZGF0YXNldCwgbGFiZWxzXSk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBfdHJhaW5BbmRBbmFseXplTFNTVk1JbldlYldvcmtlcihnYW1tYSwga2VybmVsLCBrZXJuZWxQYXJhbXMsIG1vZGVsUGFyYW1zQ291bnQsIHByZWNvbXB1dGVkV2VpZ2h0c0NvdW50LCBjb25mdXNpb25NYXRyaXhFbGVtZW50c0NvdW50LCBkYXRhc2V0LCBsYWJlbHMpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBjb25zdCB3b3JrZXIgPSBuZXcgV29ya2VyKG5ldyBVUkwoJy4uL3dhc20vd29ya2Vycy90cmFpbkFuZEFuYWx5emVMU1NWTVdvcmtlci5qcycsIGltcG9ydC5tZXRhLnVybCkpO1xuICAgIHdvcmtlci5wb3N0TWVzc2FnZShnZXRDcHBJbnB1dChFREFbJ3RyYWluQW5kQW5hbHl6ZUxTU1ZNJ10uYXJndW1lbnRzLFtnYW1tYSwga2VybmVsLCBrZXJuZWxQYXJhbXMsIG1vZGVsUGFyYW1zQ291bnQsIHByZWNvbXB1dGVkV2VpZ2h0c0NvdW50LCBjb25mdXNpb25NYXRyaXhFbGVtZW50c0NvdW50LCBkYXRhc2V0LCBsYWJlbHNdKSk7XG4gICAgd29ya2VyLm9ubWVzc2FnZSA9IGZ1bmN0aW9uKGUpIHtcbiAgICAgIHdvcmtlci50ZXJtaW5hdGUoKTtcbiAgICAgIHJlc29sdmUoZ2V0UmVzdWx0KEVEQVsndHJhaW5BbmRBbmFseXplTFNTVk0nXSwgZS5kYXRhKSk7XG4gICAgfVxuICB9KTtcbn1cblxuIiwidmFyIF9fYXdhaXRlciA9ICh0aGlzICYmIHRoaXMuX19hd2FpdGVyKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcbiAgICB9KTtcbn07XG4vKiBTdXBwb3J0IHZlY3RvciBtYWNoaW5lIChTVk0pIHRvb2xzLlxuICAgSXQncyBkZXZlbG9wZWQgZm9yIGFwcGx5aW5nIGluIGNvbWJpbmF0aW9uIHdpdGggREFUQUdST0sgcHJlZGljdGl2ZSB0b29scy5cblxuICAgVHJhaW5pbmcgJiBwcmVkaWN0aW5nIGFyZSBwcm92aWRlZCBieSB3YXNtLWNvbXB1dGF0aW9ucy5cblxuICAgTGVhc3Qgc3F1YXJlIHN1cHBvcnQgdmVjdG9yIG1hY2hpbmUgKExTLVNWTSkgaXMgaW1wbGVtZW50ZWQ6XG4gICAgIFsxXSBTdXlrZW5zLCBKLiwgVmFuZGV3YWxsZSwgSi4gXCJMZWFzdCBTcXVhcmVzIFN1cHBvcnQgVmVjdG9yIE1hY2hpbmUgQ2xhc3NpZmllcnNcIixcbiAgICAgICBOZXVyYWwgUHJvY2Vzc2luZyBMZXR0ZXJzIDksIDI5My0zMDAgKDE5OTkpLiBodHRwczovL2RvaS5vcmcvMTAuMTAyMy9BOjEwMTg2Mjg2MDk3NDJcbiovXG5pbXBvcnQgKiBhcyBncm9rIGZyb20gJ2RhdGFncm9rLWFwaS9ncm9rJztcbmltcG9ydCAqIGFzIERHIGZyb20gJ2RhdGFncm9rLWFwaS9kZyc7XG5pbXBvcnQgeyBfdHJhaW5BbmRBbmFseXplTFNTVk1JbldlYldvcmtlciwgX3ByZWRpY3RCeUxTU1ZNSW5XZWJXb3JrZXIgfSBmcm9tICcuLi93YXNtL0VEQUFQSSc7XG4vLyAxLiBDT05TVEFOVFNcbi8vIGtlcm5lbCB0eXBlc1xuZXhwb3J0IGNvbnN0IExJTkVBUiA9IDA7XG5leHBvcnQgY29uc3QgUE9MWU5PTUlBTCA9IDE7XG5leHBvcnQgY29uc3QgUkJGID0gMjtcbmV4cG9ydCBjb25zdCBTSUdNT0lEID0gMztcbi8vIG91dHB1dC1yZWxhdGVkXG5jb25zdCBDT05GVVNJT05fTUFUUl9TSVpFID0gNDtcbmNvbnN0IE5PUk1BTElaRURfREFUQV9JTkRFWCA9IDA7XG5jb25zdCBNRUFOU19JTkRFWCA9IDE7XG5jb25zdCBTVERfREVWU19JTkRFWCA9IDI7XG5jb25zdCBNT0RFTF9QQVJBTVNfSU5ERVggPSAzO1xuY29uc3QgTU9ERUxfV0VJR0hUU19JTkRFWCA9IDQ7XG5jb25zdCBQUkVESUNURURfTEFCRUxTX0lOREVYID0gNTtcbmNvbnN0IENPUlJFQ1RORVNTX0lOREVYID0gNjtcbmNvbnN0IENPTkZVU0lPTl9NQVRSSVhfSU5ERVggPSA3O1xuY29uc3QgVFJVRV9QT1NJVElWRV9JTkRFWCA9IDA7XG5jb25zdCBGQUxTRV9ORUdBVElWRV9JTkRFWCA9IDE7XG5jb25zdCBGQUxTRV9QT1NJVElWRV9JTkRFWCA9IDI7XG5jb25zdCBUUlVFX05FR0FUSVZFX0lOREVYID0gMztcbi8vIGtlcm5lbCBwYXJhbWV0ZXJzIGluZGVjZXNcbmNvbnN0IFJCRl9TSUdNQV9JTkRFWCA9IDA7XG5jb25zdCBQT0xZTk9NSUFMX0NfSU5ERVggPSAwO1xuY29uc3QgUE9MWU5PTUlBTF9EX0lOREVYID0gMTtcbmNvbnN0IFNJR01PSURfS0FQUEFfSU5ERVggPSAwO1xuY29uc3QgU0lHTU9JRF9USEVUQV9JTkRFWCA9IDE7XG4vLyBoeXBlcnBhcmFtZXRlcnMgbGltaXRzXG5jb25zdCBHQU1NQV9JTkZJTVVNX0xJTUlUID0gMDtcbmNvbnN0IFJCRl9TSUdNQV9JTkZJTVVNX0xJTUlUID0gMDtcbmNvbnN0IFBPTFlOT01JQUxfQ19JTkZJTVVNX0xJTUlUID0gMDtcbmNvbnN0IFBPTFlOT01JQUxfRF9JTkZJTVVNX0xJTUlUID0gMDtcbi8vIGVycm9yIG1lc3NhZ2VzXG5jb25zdCBXUk9OR19HQU1NQV9NRVNTQUdFID0gJ2dhbW1hIG11c3QgYmUgc3RyaWN0bHkgcG9zaXRpdmUuJztcbmNvbnN0IFdST05HX1JCRl9TSUdNQV9NRVNTQUdFID0gJ3NpZ21hIG11c3QgYmUgc3RyaWN0bHkgcG9zaXRpdmUuJztcbmNvbnN0IFdST05HX1BPTFlOT01JQUxfQ19NRVNTQUdFID0gJ2MgbXVzdCBiZSBzdHJpY3RseSBwb3NpdGl2ZS4nO1xuY29uc3QgV1JPTkdfUE9MWU5PTUlBTF9EX01FU1NBR0UgPSAnZCBtdXN0IGJlIHN0cmljdGx5IHBvc2l0aXZlLic7XG5jb25zdCBXUk9OR19LRVJORUxfTUVTU0FHRSA9ICdpbmNvcnJlY3Qga2VybmVsLic7XG4vLyBuYW1lc1xuY29uc3QgTEFCRUxTID0gJ0xhYmVscyc7XG5jb25zdCBQUkVESUNURUQgPSAncHJlZGljdGVkJztcbmNvbnN0IENPUlJFQ1RORVNTID0gJ2NvcnJlY3RuZXNzJztcbmNvbnN0IENPTkZVU0lPTl9NQVRSSVhfTkFNRSA9ICdDb25mdXNpb24gbWF0cml4JztcbmNvbnN0IE1FQU4gPSAnbWVhbic7XG5jb25zdCBTVERfREVWID0gJ3N0ZCBkZXYnO1xuY29uc3QgTU9ERUxfUEFSQU1TX05BTUUgPSAnYWxwaGEnO1xuY29uc3QgTU9ERUxfV0VJR0hUU19OQU1FID0gJ3dlaWdodCc7XG5jb25zdCBHQU1NQSA9ICdnYW1tYSc7XG5jb25zdCBLRVJORUwgPSAna2VybmVsJztcbmNvbnN0IEtFUk5FTF9QQVJBTVMgPSAna2VybmVsIHBhcmFtcyc7XG5jb25zdCBLRVJORUxfUEFSQU1fMSA9ICdrZXJuZWwgcGFyYW0gMSc7XG5jb25zdCBLRVJORUxfUEFSQU1fMiA9ICdrZXJuZWwgcGFyYW0gMic7XG5jb25zdCBGRUFUVVJFU19DT1VOVF9OQU1FID0gJ2ZlYXR1cmVzIGNvdW50JztcbmNvbnN0IFRSQUlOX1NBTVBMRVNfQ09VTlRfTkFNRSA9ICd0cmFpbiBzYW1wbGVzIGNvdW50JztcbmNvbnN0IFRSQUlOX0VSUk9SID0gJ1RyYWluIGVycm9yLCUnO1xuY29uc3QgS0VSTkVMX1RZUEVfVE9fTkFNRV9NQVAgPSBbJ2xpbmVhcicsICdwb2x5bm9taWFsJywgJ1JCRicsICdzaWdtb2lkJ107XG5jb25zdCBQT1NJVElWRV9OQU1FID0gJ3Bvc2l0aXZlIChQKSc7XG5jb25zdCBORUdBVElWRV9OQU1FID0gJ25lZ2F0aXZlIChOKSc7XG5jb25zdCBQUkVESUNURURfUE9TSVRJVkVfTkFNRSA9ICdwcmVkaWN0ZWQgcG9zaXRpdmUgKFBQKSc7XG5jb25zdCBQUkVESUNURURfTkVHQVRJVkVfTkFNRSA9ICdwcmVkaWN0ZWQgbmVnYXRpdmUgKFBOKSc7XG5jb25zdCBTRU5TSVRJVklUWSA9ICdTZW5zaXRpdml0eSc7XG5jb25zdCBTUEVDSUZJQ0lUWSA9ICdTcGVjaWZpY2l0eSc7XG5jb25zdCBCQUxBTkNFRF9BQ0NVUkFDWSA9ICdCYWxhbmNlZCBhY2N1cmFjeSc7XG5jb25zdCBQT1NJVElWRV9QUkVESUNUSVZFX1ZBTFVFID0gJ1Bvc2l0aXZlIHByZWRpY2l0dmUgdmFsdWUnO1xuY29uc3QgTkVHQVRJVkVfUFJFRElDVElWRV9WQUxVRSA9ICdOZWdhdGl2ZSBwcmVkaWNpdHZlIHZhbHVlJztcbmNvbnN0IE1MX1JFUE9SVCA9ICdNb2RlbCByZXBvcnQnO1xuY29uc3QgTUxfUkVQT1JUX1BSRURJQ1RFRF9MQUJFTFMgPSAnUHJlZGljdGVkIGxhYmVscyc7XG5jb25zdCBNTF9SRVBPUlRfVFJBSU5fTEFCRUxTID0gJ1RyYWluIGxhYmVscyc7XG5jb25zdCBNTF9SRVBPUlRfQ09SUkVDVE5FU1MgPSAnUHJlZGljdGlvbiBjb3JyZWN0bmVzcyc7XG5jb25zdCBQUkVESUNUSU9OID0gJ3ByZWRpY3Rpb24nO1xuLy8gUGFjay91bnBhY2sgY29uc3RhbnRzXG5jb25zdCBCWVRFUyA9IDQ7XG5jb25zdCBJTlRTX0NPVU5UID0gMztcbmNvbnN0IEtFUl9QQVJBTVNfQ09VTlQgPSAyO1xuY29uc3QgTU9ERUxfS0VSTkVMX0lOREVYID0gMDtcbmNvbnN0IFNBTVBMRVNfQ09VTlRfSU5ERVggPSAxO1xuY29uc3QgRkVBVFVSRVNfQ09VTlRfSU5ERVggPSAyO1xuLy8gbWlzY1xuY29uc3QgSU5JVF9WQUxVRSA9IDA7IC8vIGFueSBudW1iZXIgY2FuIGJlIHVzZWRcbmNvbnN0IExTX1NWTV9BRERfQ09OU1QgPSAxOyAvLyBzZWUgWzFdIGZvciBtb3JlIGRldGFpbHNcbi8vIDIuIFRPT0xTXG4vLyBDaGVjayBMUy1TVk0gbGVhcm5pbmcgaHlwZXJwYXJhbWV0ZXJzXG5mdW5jdGlvbiBjaGVja0h5cGVycGFyYW1ldGVycyhoeXBlcnBhcmFtZXRlcnMpIHtcbiAgICAvLyBjaGVjayBnYW1tYVxuICAgIGlmIChoeXBlcnBhcmFtZXRlcnMuZ2FtbWEgPD0gR0FNTUFfSU5GSU1VTV9MSU1JVClcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFdST05HX0dBTU1BX01FU1NBR0UpO1xuICAgIC8vIGNoZWNrIGtlcm5lbCAmIGl0cyBwYXJhbWV0ZXJzXG4gICAgc3dpdGNoIChoeXBlcnBhcmFtZXRlcnMua2VybmVsKSB7XG4gICAgICAgIGNhc2UgTElORUFSOiAvLyB0aGUgY2FzZSBvZiBsaW5lYXIga2VybmVsXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGNhc2UgUkJGOiAvLyB0aGUgY2FzZSBvZiBSQkYga2VybmVsXG4gICAgICAgICAgICBpZiAoaHlwZXJwYXJhbWV0ZXJzLnNpZ21hIDw9IFJCRl9TSUdNQV9JTkZJTVVNX0xJTUlUKVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihXUk9OR19SQkZfU0lHTUFfTUVTU0FHRSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGNhc2UgUE9MWU5PTUlBTDogLy8gdGhlIGNhc2Ugb2YgcG9seW5vbWlhbCBrZXJuZWxcbiAgICAgICAgICAgIC8vIGNoZWNrIGNcbiAgICAgICAgICAgIGlmIChoeXBlcnBhcmFtZXRlcnMuY1BhcmFtIDw9IFBPTFlOT01JQUxfQ19JTkZJTVVNX0xJTUlUKVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihXUk9OR19QT0xZTk9NSUFMX0NfTUVTU0FHRSk7XG4gICAgICAgICAgICAvLyBjaGVjayBkXG4gICAgICAgICAgICBpZiAoaHlwZXJwYXJhbWV0ZXJzLmRQYXJhbSA8PSBQT0xZTk9NSUFMX0RfSU5GSU1VTV9MSU1JVClcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoV1JPTkdfUE9MWU5PTUlBTF9EX01FU1NBR0UpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBjYXNlIFNJR01PSUQ6IC8vIHRoZSBjYXNlIG9mIHBvbHlub21pYWwga2VybmVsXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGRlZmF1bHQ6IC8vIGluY29ycmVjdCBrZXJuZWxcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihXUk9OR19LRVJORUxfTUVTU0FHRSk7XG4gICAgfSAvLyBzd2l0Y2hcbn0gLy8gY2hlY2tIeXBlcnBhcmFtZXRlcnNcbi8vIFJldHVybmVzIGxhYmVscyBwcmVkaWN0ZWQgYnkgdGhlIG1vZGVsIHNwZWNpZmllZFxuZnVuY3Rpb24gcHJlZGljdChtb2RlbCwgZGF0YXNldCkge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGxldCBfb3V0cHV0O1xuICAgICAgICBjb25zdCBfcHJvbWlzZSA9IF9wcmVkaWN0QnlMU1NWTUluV2ViV29ya2VyKG1vZGVsLmtlcm5lbFR5cGUsIG1vZGVsLmtlcm5lbFBhcmFtcywgbW9kZWwubm9ybWFsaXplZFRyYWluRGF0YS5jb2x1bW5zLCBtb2RlbC50cmFpbkxhYmVscywgbW9kZWwubWVhbnMsIG1vZGVsLnN0ZERldnMsIG1vZGVsLm1vZGVsUGFyYW1zLCBtb2RlbC5tb2RlbFdlaWdodHMsIGRhdGFzZXQpO1xuICAgICAgICB5aWVsZCBfcHJvbWlzZS50aGVuKChfcmVzdWx0KSA9PiB7IF9vdXRwdXQgPSBfcmVzdWx0OyB9LCAoX2Vycm9yKSA9PiB7IHRocm93IG5ldyBFcnJvcihgRXJyb3I6ICR7X2Vycm9yfWApOyB9KTtcbiAgICAgICAgcmV0dXJuIF9vdXRwdXQ7XG4gICAgfSk7XG59IC8vIHByZWRpY3Rcbi8vIEV2YWx1YXRlIGFjY3VyYWN5IG9mIHRoZSBtb2RlbFxuZnVuY3Rpb24gZXZhbHVhdGVBY2N1cmFjeShtb2RlbCkge1xuICAgIGNvbnN0IGRhdGEgPSBtb2RlbC5jb25mdXNpb25NYXRyaXguZ2V0UmF3RGF0YSgpO1xuICAgIC8vIGhlcmUsIHRoZSBjbGFzc2ljIG5vdGF0aW9uIGlzIHVzZWQgKHNlZSBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9TZW5zaXRpdml0eV9hbmRfc3BlY2lmaWNpdHkpXG4gICAgY29uc3QgVFAgPSBkYXRhW1RSVUVfUE9TSVRJVkVfSU5ERVhdOyAvLyB0cnVlIHBvc2l0aXZlXG4gICAgY29uc3QgVE4gPSBkYXRhW1RSVUVfTkVHQVRJVkVfSU5ERVhdOyAvLyB0cnVlIG5lZ2F0aXZlXG4gICAgY29uc3QgRlAgPSBkYXRhW0ZBTFNFX1BPU0lUSVZFX0lOREVYXTsgLy8gZmFsc2UgcG9zaXRpdmVcbiAgICBjb25zdCBGTiA9IGRhdGFbRkFMU0VfTkVHQVRJVkVfSU5ERVhdOyAvLyBmYWxzZSBuZWdhdGl2ZVxuICAgIGNvbnN0IFAgPSBUUCArIEZOOyAvLyBwb3NpdGl2ZVxuICAgIGNvbnN0IE4gPSBGUCArIFROOyAvLyBuZWdhdGl2ZVxuICAgIGNvbnN0IFRQUiA9IFRQIC8gUDsgLy8gdHJ1ZSBwb3NpdGl2ZSByYXRlXG4gICAgY29uc3QgVE5SID0gVE4gLyBOOyAvLyB0cnVlIG5lZ2F0aXZlIHJhdGVcbiAgICBjb25zdCBQUFYgPSBUUCAvIChUUCArIEZQKTsgLy8gcG9zaXRpdmUgcHJlZGljaXR2ZSB2YWx1ZVxuICAgIGNvbnN0IE5QViA9IFROIC8gKFROICsgRk4pOyAvLyBuZWdhdGl2ZSBwcmVkaWNpdHZlIHZhbHVlXG4gICAgY29uc3QgQUNDID0gKFRQICsgVE4pIC8gKFAgKyBOKTsgLy8gYWNjdXJhY3lcbiAgICBjb25zdCBCQSA9IChUUFIgKyBUTlIpIC8gMjsgLy8gYmFsYW5jZWQgYWNjdXJhY3lcbiAgICBtb2RlbC5zZW5zaXRpdml0eSA9IFRQUjtcbiAgICBtb2RlbC5zcGVjaWZpY2l0eSA9IFROUjtcbiAgICBtb2RlbC5iYWxhbmNlZEFjY3VyYWN5ID0gQkE7XG4gICAgbW9kZWwucG9zaXRpdmVQcmVkaWNpdHZlVmFsdWUgPSBQUFY7XG4gICAgbW9kZWwubmVnYXRpdmVQcmVkaWNpdHZlVmFsdWUgPSBOUFY7XG4gICAgbW9kZWwudHJhaW5FcnJvciA9ICgxIC0gQUNDKSAqIDEwMDsgLy8gdHJhaW4gZXJyb3IsICVcbn0gLy8gZXZhbHVhdGVBY2N1cmFjeVxuLy8gUmV0dXJucyB0cmFpbmVkIExTLVNWTSBtb2RlbC5cbmZ1bmN0aW9uIHRyYWluQW5kQW5hbHl6ZU1vZGVsKGh5cGVycGFyYW1ldGVycywgZGF0YXNldCwgbGFiZWxzKSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgLy8gY2hlY2sgY29ycmVjdG5lc3Mgb2YgaHlwZXJwYXJhbWV0ZXIgZ2FtbWFcbiAgICAgICAgY2hlY2tIeXBlcnBhcmFtZXRlcnMoaHlwZXJwYXJhbWV0ZXJzKTtcbiAgICAgICAgLy8gY3JlYXRlIGRlZmF1bHQga2VybmVsIHBhcmFtcyBhcnJheVxuICAgICAgICBjb25zdCBrZXJuZWxQYXJhbXNBcnJheSA9IFtJTklUX1ZBTFVFLCBJTklUX1ZBTFVFXTtcbiAgICAgICAgLy8gZmlsbCBrZXJuZWxQYXJhbXNcbiAgICAgICAgc3dpdGNoIChoeXBlcnBhcmFtZXRlcnMua2VybmVsKSB7XG4gICAgICAgICAgICBjYXNlIExJTkVBUjogLy8gbm8ga2VybmVsIHBhcmFtZXRlcnMgaW4gdGhlIGNhc2Ugb2YgbGluZWFyIGtlcm5lbFxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBSQkY6IC8vIHNpZ21hIHBhcmFtZXRlciBpbiB0aGUgY2FzZSBvZiBSQkYta2VybmVsXG4gICAgICAgICAgICAgICAga2VybmVsUGFyYW1zQXJyYXlbUkJGX1NJR01BX0lOREVYXSA9IGh5cGVycGFyYW1ldGVycy5zaWdtYTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgUE9MWU5PTUlBTDogLy8gc2lnbWEgcGFyYW1ldGVyIGluIHRoZSBjYXNlIG9mIHBvbHlub21pYWwga2VybmVsXG4gICAgICAgICAgICAgICAga2VybmVsUGFyYW1zQXJyYXlbUE9MWU5PTUlBTF9DX0lOREVYXSA9IGh5cGVycGFyYW1ldGVycy5jUGFyYW07XG4gICAgICAgICAgICAgICAga2VybmVsUGFyYW1zQXJyYXlbUE9MWU5PTUlBTF9EX0lOREVYXSA9IGh5cGVycGFyYW1ldGVycy5kUGFyYW07XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFNJR01PSUQ6IC8vIHNpZ21hIHBhcmFtZXRlciBpbiB0aGUgY2FzZSBvZiBzaWdtb2lkIGtlcm5lbFxuICAgICAgICAgICAgICAgIGtlcm5lbFBhcmFtc0FycmF5W1NJR01PSURfS0FQUEFfSU5ERVhdID0gaHlwZXJwYXJhbWV0ZXJzLmthcHBhO1xuICAgICAgICAgICAgICAgIGtlcm5lbFBhcmFtc0FycmF5W1NJR01PSURfVEhFVEFfSU5ERVhdID0gaHlwZXJwYXJhbWV0ZXJzLnRoZXRhO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDogLy8gaW5jb3JyZWN0IGtlcm5lbFxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihXUk9OR19LRVJORUxfTUVTU0FHRSk7XG4gICAgICAgIH1cbiAgICAgICAgO1xuICAgICAgICAvLyBjcmVhdGUga2VybmVsIHBhcmFtcyBjb2x1bW5cbiAgICAgICAgY29uc3Qga2VybmVsUGFyYW1zID0gREcuQ29sdW1uLmZyb21MaXN0KCdkb3VibGUnLCBLRVJORUxfUEFSQU1TLCBrZXJuZWxQYXJhbXNBcnJheSk7XG4gICAgICAgIC8vIGNvbXB1dGUgc2l6ZSBvZiBtb2RlbCBwYXJhbXMgJiBwcmVjb21wdXRlZCB3ZWlndGhzXG4gICAgICAgIGNvbnN0IHRyYWluQ29scyA9IGRhdGFzZXQudG9MaXN0KCk7XG4gICAgICAgIGNvbnN0IG1vZGVsUGFyYW1zQ291bnQgPSB0cmFpbkNvbHNbMF0ubGVuZ3RoICsgTFNfU1ZNX0FERF9DT05TVDtcbiAgICAgICAgY29uc3QgcHJlY29tcHV0ZWRXZWlnaHRzQ291bnQgPSB0cmFpbkNvbHMubGVuZ3RoICsgTFNfU1ZNX0FERF9DT05TVDtcbiAgICAgICAgY29uc3QgY29uZnVzaW9uTWF0cml4RWxlbWVudHNDb3VudCA9IENPTkZVU0lPTl9NQVRSX1NJWkU7XG4gICAgICAgIC8vIGNhbGwgd2ViYXNzZW1ibHkgdHJhaW5pbmcgZnVuY3Rpb25cbiAgICAgICAgbGV0IG91dHB1dDtcbiAgICAgICAgY29uc3QgX3Byb21pc2UgPSBfdHJhaW5BbmRBbmFseXplTFNTVk1JbldlYldvcmtlcihoeXBlcnBhcmFtZXRlcnMuZ2FtbWEsIGh5cGVycGFyYW1ldGVycy5rZXJuZWwsIGtlcm5lbFBhcmFtcywgbW9kZWxQYXJhbXNDb3VudCwgcHJlY29tcHV0ZWRXZWlnaHRzQ291bnQsIGNvbmZ1c2lvbk1hdHJpeEVsZW1lbnRzQ291bnQsIGRhdGFzZXQsIGxhYmVscyk7XG4gICAgICAgIHlpZWxkIF9wcm9taXNlLnRoZW4oKF9yZXN1bHQpID0+IHsgb3V0cHV0ID0gX3Jlc3VsdDsgfSwgKF9lcnJvcikgPT4geyB0aHJvdyBuZXcgRXJyb3IoYEVycm9yOiAke19lcnJvcn1gKTsgfSk7XG4gICAgICAgIC8vIHJlbmFtZSBvdXRwdXQgY29sdW1uc1xuICAgICAgICBvdXRwdXRbTUVBTlNfSU5ERVhdLm5hbWUgPSBNRUFOO1xuICAgICAgICBvdXRwdXRbU1REX0RFVlNfSU5ERVhdLm5hbWUgPSBTVERfREVWO1xuICAgICAgICBvdXRwdXRbTU9ERUxfUEFSQU1TX0lOREVYXS5uYW1lID0gTU9ERUxfUEFSQU1TX05BTUU7XG4gICAgICAgIG91dHB1dFtNT0RFTF9XRUlHSFRTX0lOREVYXS5uYW1lID0gTU9ERUxfV0VJR0hUU19OQU1FO1xuICAgICAgICBvdXRwdXRbUFJFRElDVEVEX0xBQkVMU19JTkRFWF0ubmFtZSA9IFBSRURJQ1RFRDtcbiAgICAgICAgb3V0cHV0W0NPUlJFQ1RORVNTX0lOREVYXS5uYW1lID0gQ09SUkVDVE5FU1M7XG4gICAgICAgIG91dHB1dFtDT05GVVNJT05fTUFUUklYX0lOREVYXS5uYW1lID0gQ09ORlVTSU9OX01BVFJJWF9OQU1FO1xuICAgICAgICAvLyBjb21wbGV0ZSBtb2RlbFxuICAgICAgICBjb25zdCBtb2RlbCA9IHtcbiAgICAgICAgICAgIHRyYWluR2FtbWE6IGh5cGVycGFyYW1ldGVycy5nYW1tYSxcbiAgICAgICAgICAgIGtlcm5lbFR5cGU6IGh5cGVycGFyYW1ldGVycy5rZXJuZWwsXG4gICAgICAgICAgICBrZXJuZWxQYXJhbXM6IGtlcm5lbFBhcmFtcyxcbiAgICAgICAgICAgIHRyYWluTGFiZWxzOiBsYWJlbHMsXG4gICAgICAgICAgICBub3JtYWxpemVkVHJhaW5EYXRhOiBERy5EYXRhRnJhbWUuZnJvbUNvbHVtbnMob3V0cHV0W05PUk1BTElaRURfREFUQV9JTkRFWF0pLFxuICAgICAgICAgICAgbWVhbnM6IG91dHB1dFtNRUFOU19JTkRFWF0sXG4gICAgICAgICAgICBzdGREZXZzOiBvdXRwdXRbU1REX0RFVlNfSU5ERVhdLFxuICAgICAgICAgICAgbW9kZWxQYXJhbXM6IG91dHB1dFtNT0RFTF9QQVJBTVNfSU5ERVhdLFxuICAgICAgICAgICAgbW9kZWxXZWlnaHRzOiBvdXRwdXRbTU9ERUxfV0VJR0hUU19JTkRFWF0sXG4gICAgICAgICAgICBwcmVkaWN0ZWRMYWJlbHM6IG91dHB1dFtQUkVESUNURURfTEFCRUxTX0lOREVYXSxcbiAgICAgICAgICAgIGNvcnJlY3RuZXNzOiBvdXRwdXRbQ09SUkVDVE5FU1NfSU5ERVhdLFxuICAgICAgICAgICAgY29uZnVzaW9uTWF0cml4OiBvdXRwdXRbQ09ORlVTSU9OX01BVFJJWF9JTkRFWF0sXG4gICAgICAgICAgICB0cmFpbkVycm9yOiB1bmRlZmluZWQsXG4gICAgICAgICAgICBmZWF0dXJlc0NvdW50OiB0cmFpbkNvbHMubGVuZ3RoLFxuICAgICAgICAgICAgdHJhaW5TYW1wbGVzQ291bnQ6IHRyYWluQ29sc1swXS5sZW5ndGgsXG4gICAgICAgIH07XG4gICAgICAgIGV2YWx1YXRlQWNjdXJhY3kobW9kZWwpO1xuICAgICAgICByZXR1cm4gbW9kZWw7XG4gICAgfSk7XG59IC8vIHRyYWluQW5kQW5hbHl6ZU1vZGVsXG4vLyBXcmFwcGVyIGZvciBjb21iaW5pbmcgdGhlIGZ1bmN0aW9uIFwidHJhaW5BbmRBbmFseXplTW9kZWxcIiB3aXRoIERhdGFncm9rIHByZWRpY2l0dmUgdG9vbHNcbmV4cG9ydCBmdW5jdGlvbiBnZXRUcmFpbmVkTW9kZWwoaHlwZXJwYXJhbWV0ZXJzLCBkZiwgcHJlZGljdENvbHVtbikge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGNvbnN0IGNvbHVtbnMgPSBkZi5jb2x1bW5zO1xuICAgICAgICBjb25zdCBsYWJlbHMgPSBjb2x1bW5zLmJ5TmFtZShwcmVkaWN0Q29sdW1uKTtcbiAgICAgICAgY29sdW1ucy5yZW1vdmUocHJlZGljdENvbHVtbik7XG4gICAgICAgIHJldHVybiB5aWVsZCB0cmFpbkFuZEFuYWx5emVNb2RlbChoeXBlcnBhcmFtZXRlcnMsIGNvbHVtbnMsIGxhYmVscyk7XG4gICAgfSk7XG59XG4vLyBSZXR1cm5zIGRhdGFmcmFtZSB3aXRoIHNob3J0IGluZm8gYWJvdXQgbW9kZWxcbmZ1bmN0aW9uIGdldE1vZGVsSW5mbyhtb2RlbCkge1xuICAgIGNvbnN0IGtlcm5lbFBhcmFtcyA9IG1vZGVsLmtlcm5lbFBhcmFtcy5nZXRSYXdEYXRhKCk7XG4gICAgcmV0dXJuIERHLkRhdGFGcmFtZS5mcm9tQ29sdW1ucyhbXG4gICAgICAgIERHLkNvbHVtbi5mcm9tTGlzdCgnZG91YmxlJywgR0FNTUEsIFttb2RlbC50cmFpbkdhbW1hXSksXG4gICAgICAgIERHLkNvbHVtbi5mcm9tU3RyaW5ncyhLRVJORUwsIFtLRVJORUxfVFlQRV9UT19OQU1FX01BUFttb2RlbC5rZXJuZWxUeXBlXV0pLFxuICAgICAgICBERy5Db2x1bW4uZnJvbUxpc3QoJ2RvdWJsZScsIEtFUk5FTF9QQVJBTV8xLCBba2VybmVsUGFyYW1zWzBdXSksXG4gICAgICAgIERHLkNvbHVtbi5mcm9tTGlzdCgnZG91YmxlJywgS0VSTkVMX1BBUkFNXzIsIFtrZXJuZWxQYXJhbXNbMV1dKSxcbiAgICAgICAgREcuQ29sdW1uLmZyb21MaXN0KCdkb3VibGUnLCBGRUFUVVJFU19DT1VOVF9OQU1FLCBbbW9kZWwuZmVhdHVyZXNDb3VudF0pLFxuICAgICAgICBERy5Db2x1bW4uZnJvbUxpc3QoJ2RvdWJsZScsIFRSQUlOX1NBTVBMRVNfQ09VTlRfTkFNRSwgW21vZGVsLnRyYWluU2FtcGxlc0NvdW50XSksXG4gICAgICAgIERHLkNvbHVtbi5mcm9tTGlzdCgnZG91YmxlJywgVFJBSU5fRVJST1IsIFttb2RlbC50cmFpbkVycm9yXSksXG4gICAgICAgIERHLkNvbHVtbi5mcm9tTGlzdCgnZG91YmxlJywgQkFMQU5DRURfQUNDVVJBQ1ksIFttb2RlbC5iYWxhbmNlZEFjY3VyYWN5XSksXG4gICAgICAgIERHLkNvbHVtbi5mcm9tTGlzdCgnZG91YmxlJywgU0VOU0lUSVZJVFksIFttb2RlbC5zZW5zaXRpdml0eV0pLFxuICAgICAgICBERy5Db2x1bW4uZnJvbUxpc3QoJ2RvdWJsZScsIFNQRUNJRklDSVRZLCBbbW9kZWwuc3BlY2lmaWNpdHldKSxcbiAgICAgICAgREcuQ29sdW1uLmZyb21MaXN0KCdkb3VibGUnLCBQT1NJVElWRV9QUkVESUNUSVZFX1ZBTFVFLCBbbW9kZWwucG9zaXRpdmVQcmVkaWNpdHZlVmFsdWVdKSxcbiAgICAgICAgREcuQ29sdW1uLmZyb21MaXN0KCdkb3VibGUnLCBORUdBVElWRV9QUkVESUNUSVZFX1ZBTFVFLCBbbW9kZWwubmVnYXRpdmVQcmVkaWNpdHZlVmFsdWVdKSxcbiAgICBdKTtcbn1cbi8vIEdldCBkYXRhZnJhbWUgd2l0aCBjb25mdXNpb24gbWF0cml4XG5mdW5jdGlvbiBnZXRDb25mdXNpb25NYXRyaXhERihtb2RlbCkge1xuICAgIGNvbnN0IGRhdGEgPSBtb2RlbC5jb25mdXNpb25NYXRyaXguZ2V0UmF3RGF0YSgpO1xuICAgIHJldHVybiBERy5EYXRhRnJhbWUuZnJvbUNvbHVtbnMoW1xuICAgICAgICBERy5Db2x1bW4uZnJvbVN0cmluZ3MoJycsIFtQT1NJVElWRV9OQU1FLCBORUdBVElWRV9OQU1FXSksXG4gICAgICAgIERHLkNvbHVtbi5mcm9tTGlzdCgnaW50JywgUFJFRElDVEVEX1BPU0lUSVZFX05BTUUsIFtkYXRhW1RSVUVfUE9TSVRJVkVfSU5ERVhdLCBkYXRhW0ZBTFNFX1BPU0lUSVZFX0lOREVYXV0pLFxuICAgICAgICBERy5Db2x1bW4uZnJvbUxpc3QoJ2ludCcsIFBSRURJQ1RFRF9ORUdBVElWRV9OQU1FLCBbZGF0YVtGQUxTRV9ORUdBVElWRV9JTkRFWF0sIGRhdGFbVFJVRV9ORUdBVElWRV9JTkRFWF1dKSxcbiAgICBdKTtcbn1cbi8vIFNob3cgdHJhaW5pbmcgcmVwb3J0XG5leHBvcnQgZnVuY3Rpb24gc2hvd1RyYWluUmVwb3J0KGRmLCBtb2RlbCkge1xuICAgIGRmLm5hbWUgPSBNTF9SRVBPUlQ7XG4gICAgZGYuY29sdW1ucy5hZGQobW9kZWwudHJhaW5MYWJlbHMpO1xuICAgIGRmLmNvbHVtbnMuYWRkKG1vZGVsLnByZWRpY3RlZExhYmVscyk7XG4gICAgZGYuY29sdW1ucy5hZGQobW9kZWwuY29ycmVjdG5lc3MpO1xuICAgIGNvbnN0IGRmVmlldyA9IGdyb2suc2hlbGwuYWRkVGFibGVWaWV3KGRmKTtcbiAgICBkZlZpZXcuYWRkVmlld2VyKERHLlZpZXdlci5mb3JtKGdldE1vZGVsSW5mbyhtb2RlbCkpKTtcbiAgICBkZlZpZXcuYWRkVmlld2VyKERHLlZpZXdlci5zY2F0dGVyUGxvdChkZiwgeyB0aXRsZTogTUxfUkVQT1JUX1BSRURJQ1RFRF9MQUJFTFMsXG4gICAgICAgIGNvbG9yOiBtb2RlbC5wcmVkaWN0ZWRMYWJlbHMubmFtZSxcbiAgICB9KSk7XG4gICAgZGZWaWV3LmFkZFZpZXdlcihERy5WaWV3ZXIuc2NhdHRlclBsb3QoZGYsIHsgdGl0bGU6IE1MX1JFUE9SVF9UUkFJTl9MQUJFTFMsXG4gICAgICAgIGNvbG9yOiBtb2RlbC50cmFpbkxhYmVscy5uYW1lLFxuICAgIH0pKTtcbiAgICBkZlZpZXcuYWRkVmlld2VyKERHLlZpZXdlci5ncmlkKGdldENvbmZ1c2lvbk1hdHJpeERGKG1vZGVsKSkpO1xuICAgIGRmVmlldy5hZGRWaWV3ZXIoREcuVmlld2VyLnNjYXR0ZXJQbG90KGRmLCB7IHRpdGxlOiBNTF9SRVBPUlRfQ09SUkVDVE5FU1MsXG4gICAgICAgIGNvbG9yOiBtb2RlbC5jb3JyZWN0bmVzcy5uYW1lLFxuICAgIH0pKTtcbn0gLy8gc2hvd1RyYWluUmVwb3J0XG4vLyBSZXR1cm5zIHRyYWluZWQgbW9kZWwgcGFja2VkIGludG8gVUludDhBcnJheVxuZXhwb3J0IGZ1bmN0aW9uIGdldFBhY2tlZE1vZGVsKG1vZGVsKSB7XG4gICAgLy8gZ2V0IHByaW5jaXBhbCBkYXRhXG4gICAgY29uc3QgZGF0YUNvbHMgPSBtb2RlbC5ub3JtYWxpemVkVHJhaW5EYXRhLmNvbHVtbnM7XG4gICAgY29uc3Qgc2FtcGxlc0NvdW50ID0gbW9kZWwudHJhaW5TYW1wbGVzQ291bnQ7XG4gICAgY29uc3QgZmVhdHVyZXNDb3VudCA9IG1vZGVsLmZlYXR1cmVzQ291bnQ7XG4gICAgLypsZXQgYnVmZmVyU2l6ZSA9IEJZVEVTICogKDcgKyBmZWF0dXJlc0NvdW50ICogc2FtcGxlc0NvdW50XG4gICAgICArIDMgKiBmZWF0dXJlc0NvdW50ICsgMiAqIHNhbXBsZXNDb3VudCk7Ki9cbiAgICAvLyBjb21wdXRlIHNpemUgb2YgcGFja2VkIG1vZGVsXG4gICAgY29uc3QgYnVmZmVyU2l6ZSA9IEJZVEVTICogKElOVFNfQ09VTlQgKyBLRVJfUEFSQU1TX0NPVU5UICtcbiAgICAgICAgc2FtcGxlc0NvdW50ICsgZmVhdHVyZXNDb3VudCArIGZlYXR1cmVzQ291bnQgKyBzYW1wbGVzQ291bnQgKyBMU19TVk1fQUREX0NPTlNUICtcbiAgICAgICAgZmVhdHVyZXNDb3VudCArIExTX1NWTV9BRERfQ09OU1QgKyBmZWF0dXJlc0NvdW50ICogc2FtcGxlc0NvdW50KTtcbiAgICAvLyBwYWNrZWQgbW9kZWxcbiAgICBjb25zdCByZXN1bHQgPSBuZXcgVWludDhBcnJheShidWZmZXJTaXplKTtcbiAgICBjb25zdCBidWZmZXIgPSByZXN1bHQuYnVmZmVyO1xuICAgIGxldCBvZmZzZXQgPSAwO1xuICAgIC8vIHBhY2sga2VybmVsIHR5cGUgYW5kIHNpemVzXG4gICAgY29uc3QgaW50cyA9IG5ldyBJbnQzMkFycmF5KGJ1ZmZlciwgb2Zmc2V0LCBJTlRTX0NPVU5UKTtcbiAgICBpbnRzW01PREVMX0tFUk5FTF9JTkRFWF0gPSBtb2RlbC5rZXJuZWxUeXBlO1xuICAgIGludHNbU0FNUExFU19DT1VOVF9JTkRFWF0gPSBzYW1wbGVzQ291bnQ7XG4gICAgaW50c1tGRUFUVVJFU19DT1VOVF9JTkRFWF0gPSBmZWF0dXJlc0NvdW50O1xuICAgIG9mZnNldCArPSBJTlRTX0NPVU5UICogQllURVM7XG4gICAgLy8gcGFjayBrZXJuZWwgcGFyYW1ldGVyc1xuICAgIGxldCBmbG9hdHMgPSBuZXcgRmxvYXQzMkFycmF5KGJ1ZmZlciwgb2Zmc2V0LCBLRVJfUEFSQU1TX0NPVU5UKTtcbiAgICBmbG9hdHMuc2V0KG1vZGVsLmtlcm5lbFBhcmFtcy5nZXRSYXdEYXRhKCkpO1xuICAgIG9mZnNldCArPSBLRVJfUEFSQU1TX0NPVU5UICogQllURVM7XG4gICAgLy8gcGFjayBwYWNrIGxhYmVscyBvZiB0cmFpbmluZyBkYXRhXG4gICAgZmxvYXRzID0gbmV3IEZsb2F0MzJBcnJheShidWZmZXIsIG9mZnNldCwgc2FtcGxlc0NvdW50KTtcbiAgICBmbG9hdHMuc2V0KG1vZGVsLnRyYWluTGFiZWxzLmdldFJhd0RhdGEoKSk7XG4gICAgb2Zmc2V0ICs9IHNhbXBsZXNDb3VudCAqIEJZVEVTO1xuICAgIC8vIHBhY2sgbWVhbiB2YWx1ZXMgb2YgdHJhaW5pbmcgZGF0YVxuICAgIGZsb2F0cyA9IG5ldyBGbG9hdDMyQXJyYXkoYnVmZmVyLCBvZmZzZXQsIGZlYXR1cmVzQ291bnQpO1xuICAgIGZsb2F0cy5zZXQobW9kZWwubWVhbnMuZ2V0UmF3RGF0YSgpKTtcbiAgICBvZmZzZXQgKz0gZmVhdHVyZXNDb3VudCAqIEJZVEVTO1xuICAgIC8vIHBhY2sgc3RhbmRhcmQgZGV2aWF0aW9ucyBvZiB0cmFpbmluZyBkYXRhXG4gICAgZmxvYXRzID0gbmV3IEZsb2F0MzJBcnJheShidWZmZXIsIG9mZnNldCwgZmVhdHVyZXNDb3VudCk7XG4gICAgZmxvYXRzLnNldChtb2RlbC5zdGREZXZzLmdldFJhd0RhdGEoKSk7XG4gICAgb2Zmc2V0ICs9IGZlYXR1cmVzQ291bnQgKiBCWVRFUztcbiAgICAvLyBwYWNrIG1vZGVsIHBhcmFtdGVyc1xuICAgIGZsb2F0cyA9IG5ldyBGbG9hdDMyQXJyYXkoYnVmZmVyLCBvZmZzZXQsIHNhbXBsZXNDb3VudCArIExTX1NWTV9BRERfQ09OU1QpO1xuICAgIGZsb2F0cy5zZXQobW9kZWwubW9kZWxQYXJhbXMuZ2V0UmF3RGF0YSgpKTtcbiAgICBvZmZzZXQgKz0gKHNhbXBsZXNDb3VudCArIExTX1NWTV9BRERfQ09OU1QpICogQllURVM7XG4gICAgLy8gcGFjayBtb2RlbCdzIHByZWNvbXB1dGVkIHdlaWdodHNcbiAgICBmbG9hdHMgPSBuZXcgRmxvYXQzMkFycmF5KGJ1ZmZlciwgb2Zmc2V0LCBmZWF0dXJlc0NvdW50ICsgTFNfU1ZNX0FERF9DT05TVCk7XG4gICAgZmxvYXRzLnNldChtb2RlbC5tb2RlbFdlaWdodHMuZ2V0UmF3RGF0YSgpKTtcbiAgICBvZmZzZXQgKz0gKGZlYXR1cmVzQ291bnQgKyBMU19TVk1fQUREX0NPTlNUKSAqIEJZVEVTO1xuICAgIC8vIHBhY2sgdHJhaW5pbmcgZGF0YXNldFxuICAgIGZvciAoY29uc3QgY29sIG9mIGRhdGFDb2xzKSB7XG4gICAgICAgIGZsb2F0cyA9IG5ldyBGbG9hdDMyQXJyYXkoYnVmZmVyLCBvZmZzZXQsIGZlYXR1cmVzQ291bnQpO1xuICAgICAgICBmbG9hdHMuc2V0KGNvbC5nZXRSYXdEYXRhKCkpO1xuICAgICAgICBvZmZzZXQgKz0gZmVhdHVyZXNDb3VudCAqIEJZVEVTO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xufSAvLyBnZXRQYWNrZWRNb2RlbFxuLy8gUmV0dXJucyB1bnBhY2tlZCBtb2RlbFxuZnVuY3Rpb24gZ2V0VW5wYWNrZWRNb2RlbChwYWNrZWRNb2RlbCkge1xuICAgIGNvbnN0IG1vZGVsQnl0ZXMgPSBwYWNrZWRNb2RlbC5idWZmZXI7XG4gICAgbGV0IG9mZnNldCA9IDA7XG4gICAgLy8gZXh0cmFjdCBrZXJuZWwgdHlwZSBhbmQgc2l6ZXNcbiAgICBjb25zdCBoZWFkZXIgPSBuZXcgSW50MzJBcnJheShtb2RlbEJ5dGVzLCBvZmZzZXQsIElOVFNfQ09VTlQpO1xuICAgIG9mZnNldCArPSBJTlRTX0NPVU5UICogQllURVM7XG4gICAgY29uc3Qgc2FtcGxlc0NvdW50ID0gaGVhZGVyW1NBTVBMRVNfQ09VTlRfSU5ERVhdO1xuICAgIGNvbnN0IGZlYXR1cmVzQ291bnQgPSBoZWFkZXJbRkVBVFVSRVNfQ09VTlRfSU5ERVhdO1xuICAgIC8vIGV4dHJhY3QgcGFyYW1ldGVycyBvZiBrZXJuZWxcbiAgICBjb25zdCBrZXJuZWxQYXJhbXMgPSBERy5Db2x1bW4uZnJvbUZsb2F0MzJBcnJheShLRVJORUxfUEFSQU1TLCBuZXcgRmxvYXQzMkFycmF5KG1vZGVsQnl0ZXMsIG9mZnNldCwgS0VSX1BBUkFNU19DT1VOVCkpO1xuICAgIG9mZnNldCArPSBLRVJfUEFSQU1TX0NPVU5UICogQllURVM7XG4gICAgLy8gZXh0cmFjdCB0cmFpbmluZyBsYWJlbHNcbiAgICBjb25zdCB0cmFpbkxhYmVscyA9IERHLkNvbHVtbi5mcm9tRmxvYXQzMkFycmF5KExBQkVMUywgbmV3IEZsb2F0MzJBcnJheShtb2RlbEJ5dGVzLCBvZmZzZXQsIHNhbXBsZXNDb3VudCkpO1xuICAgIG9mZnNldCArPSBzYW1wbGVzQ291bnQgKiBCWVRFUztcbiAgICAvLyBleHRyYWN0IG1lYW4gdmFsdWVzIG9mIHRyYWluaW5nIGRhdGFcbiAgICBjb25zdCBtZWFucyA9IERHLkNvbHVtbi5mcm9tRmxvYXQzMkFycmF5KE1FQU4sIG5ldyBGbG9hdDMyQXJyYXkobW9kZWxCeXRlcywgb2Zmc2V0LCBmZWF0dXJlc0NvdW50KSk7XG4gICAgb2Zmc2V0ICs9IGZlYXR1cmVzQ291bnQgKiBCWVRFUztcbiAgICAvLyBleHRyYWN0IHN0YW5kYXJkIGRldmlhdGlvbnMgb2YgdHJhaW5pbmcgZGF0YVxuICAgIGNvbnN0IHN0ZERldnMgPSBERy5Db2x1bW4uZnJvbUZsb2F0MzJBcnJheShTVERfREVWLCBuZXcgRmxvYXQzMkFycmF5KG1vZGVsQnl0ZXMsIG9mZnNldCwgZmVhdHVyZXNDb3VudCkpO1xuICAgIG9mZnNldCArPSBmZWF0dXJlc0NvdW50ICogQllURVM7XG4gICAgLy8gZXh0cmFjdCBwYXJhbWV0ZXJzIG9mIG1vZGVsXG4gICAgY29uc3QgbW9kZWxQYXJhbXMgPSBERy5Db2x1bW4uZnJvbUZsb2F0MzJBcnJheShNT0RFTF9QQVJBTVNfTkFNRSwgbmV3IEZsb2F0MzJBcnJheShtb2RlbEJ5dGVzLCBvZmZzZXQsIHNhbXBsZXNDb3VudCArIExTX1NWTV9BRERfQ09OU1QpKTtcbiAgICBvZmZzZXQgKz0gKHNhbXBsZXNDb3VudCArIExTX1NWTV9BRERfQ09OU1QpICogQllURVM7XG4gICAgLy8gZXh0cmFjdCBtb2RlbCdzIHByZWNvbXB1dGVkIHdlaWdodHNcbiAgICBjb25zdCBtb2RlbFdlaWdodHMgPSBERy5Db2x1bW4uZnJvbUZsb2F0MzJBcnJheShNT0RFTF9XRUlHSFRTX05BTUUsIG5ldyBGbG9hdDMyQXJyYXkobW9kZWxCeXRlcywgb2Zmc2V0LCBmZWF0dXJlc0NvdW50ICsgTFNfU1ZNX0FERF9DT05TVCkpO1xuICAgIG9mZnNldCArPSAoZmVhdHVyZXNDb3VudCArIExTX1NWTV9BRERfQ09OU1QpICogQllURVM7XG4gICAgLy8gZXh0cmFjdCB0cmFpbmluZyBkYXRhIGNvbHVtbnNcbiAgICBjb25zdCBkYXRhQ29scyA9IFtdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2FtcGxlc0NvdW50OyBpKyspIHtcbiAgICAgICAgZGF0YUNvbHMucHVzaChERy5Db2x1bW4uZnJvbUZsb2F0MzJBcnJheShpLnRvU3RyaW5nKCksIG5ldyBGbG9hdDMyQXJyYXkobW9kZWxCeXRlcywgb2Zmc2V0LCBmZWF0dXJlc0NvdW50KSkpO1xuICAgICAgICBvZmZzZXQgKz0gZmVhdHVyZXNDb3VudCAqIEJZVEVTO1xuICAgIH1cbiAgICBjb25zdCBub3JtYWxpemVkVHJhaW5EYXRhID0gREcuRGF0YUZyYW1lLmZyb21Db2x1bW5zKGRhdGFDb2xzKTtcbiAgICBjb25zdCBtb2RlbCA9IHsga2VybmVsVHlwZTogaGVhZGVyW01PREVMX0tFUk5FTF9JTkRFWF0sXG4gICAgICAgIGtlcm5lbFBhcmFtczoga2VybmVsUGFyYW1zLFxuICAgICAgICB0cmFpbkxhYmVsczogdHJhaW5MYWJlbHMsXG4gICAgICAgIG1lYW5zOiBtZWFucyxcbiAgICAgICAgc3RkRGV2czogc3RkRGV2cyxcbiAgICAgICAgbW9kZWxQYXJhbXM6IG1vZGVsUGFyYW1zLFxuICAgICAgICBtb2RlbFdlaWdodHM6IG1vZGVsV2VpZ2h0cyxcbiAgICAgICAgbm9ybWFsaXplZFRyYWluRGF0YTogbm9ybWFsaXplZFRyYWluRGF0YSxcbiAgICB9O1xuICAgIHJldHVybiBtb2RlbDtcbn0gLy8gZ2V0VW5wYWNrZWRNb2RlbFxuLy8gV3JhcHBlciBmb3IgY29tYmluaW5nIHRoZSBmdW5jdGlvbiBcInByZWRpY3RcIiB3aXRoIERhdGFncm9rIHByZWRpY2l0dmUgdG9vbHNcbmV4cG9ydCBmdW5jdGlvbiBnZXRQcmVkaWN0aW9uKGRmLCBwYWNrZWRNb2RlbCkge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGNvbnN0IG1vZGVsID0gZ2V0VW5wYWNrZWRNb2RlbChuZXcgVWludDhBcnJheShwYWNrZWRNb2RlbCkpO1xuICAgICAgICBjb25zdCByZXMgPSB5aWVsZCBwcmVkaWN0KG1vZGVsLCBkZi5jb2x1bW5zKTtcbiAgICAgICAgcmVzLm5hbWUgPSBQUkVESUNUSU9OO1xuICAgICAgICByZXR1cm4gREcuRGF0YUZyYW1lLmZyb21Db2x1bW5zKFtyZXNdKTtcbiAgICB9KTtcbn0gLy8gZ2V0UHJlZGljdGlvblxuIiwiLy8gUExTIHNwZWNpZmljIGNvbnN0YW50c1xuLyoqIFR5cGVzIG9mIGFuYWx5c2lzIHVzaW5nIFBMUyAqL1xuZXhwb3J0IHZhciBQTFNfQU5BTFlTSVM7XG4oZnVuY3Rpb24gKFBMU19BTkFMWVNJUykge1xuICAgIFBMU19BTkFMWVNJU1tQTFNfQU5BTFlTSVNbXCJDT01QVVRFX0NPTVBPTkVOVFNcIl0gPSAwXSA9IFwiQ09NUFVURV9DT01QT05FTlRTXCI7XG4gICAgUExTX0FOQUxZU0lTW1BMU19BTkFMWVNJU1tcIlBFUkZPUk1fTVZBXCJdID0gMV0gPSBcIlBFUkZPUk1fTVZBXCI7XG4gICAgUExTX0FOQUxZU0lTW1BMU19BTkFMWVNJU1tcIkRFTU9cIl0gPSAyXSA9IFwiREVNT1wiO1xufSkoUExTX0FOQUxZU0lTIHx8IChQTFNfQU5BTFlTSVMgPSB7fSkpO1xuLyoqIEVycm9ycyAmIHdhcm5pbmdzICovXG5leHBvcnQgdmFyIEVSUk9SX01TRztcbihmdW5jdGlvbiAoRVJST1JfTVNHKSB7XG4gICAgRVJST1JfTVNHW1wiTk9fREZcIl0gPSBcIk5vIGRhdGFmcmFtZSBpcyBvcGVuZWRcIjtcbiAgICBFUlJPUl9NU0dbXCJOT19DT0xTXCJdID0gXCJObyBudW1lcmljIGNvbHVtbnMgd2l0aG91dCBtaXNzaW5nIHZhbHVlc1wiO1xuICAgIEVSUk9SX01TR1tcIk9ORV9DT0xcIl0gPSBcIk5vIGNvbHVtbnMgdG8gYmUgdXNlZCBhcyBmZWF0dXJlcyAoanVzdCBvbmUgbnVtZXJpYyBjb2x1bW5zIHdpdGhvdXQgbWlzc2luZyB2YWx1ZXMpXCI7XG4gICAgRVJST1JfTVNHW1wiRU1QVFlfREZcIl0gPSBcIkRhdGFmcmFtZSBpcyBlbXB0eVwiO1xufSkoRVJST1JfTVNHIHx8IChFUlJPUl9NU0cgPSB7fSkpO1xuLyoqIFdpZGdldCB0aXRsZXMgKi9cbmV4cG9ydCB2YXIgVElUTEU7XG4oZnVuY3Rpb24gKFRJVExFKSB7XG4gICAgVElUTEVbXCJQUkVESUNUXCJdID0gXCJQcmVkaWN0XCI7XG4gICAgVElUTEVbXCJVU0lOR1wiXSA9IFwiVXNpbmdcIjtcbiAgICBUSVRMRVtcIkNPTVBPTkVOVFNcIl0gPSBcIkNvbXBvbmVudHNcIjtcbiAgICBUSVRMRVtcIlBMU1wiXSA9IFwiUExTXCI7XG4gICAgVElUTEVbXCJNVkFcIl0gPSBcIk11bHRpdmFyaWF0ZSBBbmFseXNpcyAoUExTKVwiO1xuICAgIFRJVExFW1wiUlVOXCJdID0gXCJSVU5cIjtcbiAgICBUSVRMRVtcIk5BTUVTXCJdID0gXCJOYW1lc1wiO1xuICAgIFRJVExFW1wiTU9ERUxcIl0gPSBcIk9ic2VydmVkIHZzLiBQcmVkaWN0ZWRcIjtcbiAgICBUSVRMRVtcIkZFQVRVUkVcIl0gPSBcIkZlYXR1cmVcIjtcbiAgICBUSVRMRVtcIlJFR1JfQ09FRlNcIl0gPSBcIlJlZ3Jlc3Npb24gQ29lZmZpY2llbnRzXCI7XG4gICAgVElUTEVbXCJYTE9BRElOR1wiXSA9IFwieC5sb2FkaW5nLnBcIjtcbiAgICBUSVRMRVtcIkxPQURJTkdTXCJdID0gXCJMb2FkaW5nc1wiO1xuICAgIFRJVExFW1wiWFNDT1JFXCJdID0gXCJ4LnNjb3JlLnRcIjtcbiAgICBUSVRMRVtcIllTQ09SRVwiXSA9IFwieS5zY29yZS51XCI7XG4gICAgVElUTEVbXCJTQ09SRVNcIl0gPSBcIlNjb3Jlc1wiO1xuICAgIFRJVExFW1wiRVhQTF9WQVJcIl0gPSBcIkV4cGxhaW5lZCBWYXJpYW5jZVwiO1xuICAgIFRJVExFW1wiRVhQTE9SRVwiXSA9IFwiRXhwbG9yZVwiO1xufSkoVElUTEUgfHwgKFRJVExFID0ge30pKTtcbi8qKiBUb29sdGlwcyAqL1xuZXhwb3J0IHZhciBISU5UO1xuKGZ1bmN0aW9uIChISU5UKSB7XG4gICAgSElOVFtcIlBSRURJQ1RcIl0gPSBcIkNvbHVtbiB3aXRoIHRoZSByZXNwb25zZSB2YXJpYWJsZVwiO1xuICAgIEhJTlRbXCJGRUFUVVJFU1wiXSA9IFwiUHJlZGljdG9ycyAoZmVhdHVyZXMpXCI7XG4gICAgSElOVFtcIkNPTVBPTkVOVFNcIl0gPSBcIk51bWJlciBvZiBQTFMgY29tcG9uZW50c1wiO1xuICAgIEhJTlRbXCJQTFNcIl0gPSBcIkNvbXB1dGUgUExTIGNvbXBvbmVudHNcIjtcbiAgICBISU5UW1wiTVZBXCJdID0gXCJQZXJmb3JtIG11bHRpdmFyaWF0ZSBhbmFseXNpc1wiO1xuICAgIEhJTlRbXCJOQU1FU1wiXSA9IFwiTmFtZXMgb2YgZGF0YSBzYW1wbGVzXCI7XG59KShISU5UIHx8IChISU5UID0ge30pKTtcbi8qKiBMaW5rcyB0byBoZWxwICovXG5leHBvcnQgdmFyIExJTks7XG4oZnVuY3Rpb24gKExJTkspIHtcbiAgICBMSU5LW1wiUExTXCJdID0gXCJodHRwczovL2RhdGFncm9rLmFpL2hlbHAvZXhwbG9yZS9tdWx0aXZhcmlhdGUtYW5hbHlzaXMvcGxzI3Bscy1jb21wb25lbnRzXCI7XG4gICAgTElOS1tcIk1WQVwiXSA9IFwiaHR0cHM6Ly9kYXRhZ3Jvay5haS9oZWxwL2V4cGxvcmUvbXVsdGl2YXJpYXRlLWFuYWx5c2lzL3Bsc1wiO1xuICAgIExJTktbXCJNT0RFTFwiXSA9IFwiaHR0cHM6Ly9kYXRhZ3Jvay5haS9oZWxwL2V4cGxvcmUvbXVsdGl2YXJpYXRlLWFuYWx5c2lzL3Bsb3RzL3ByZWRpY3RlZC12cy1yZWZlcmVuY2VcIjtcbiAgICBMSU5LW1wiQ09FRkZTXCJdID0gXCJodHRwczovL2RhdGFncm9rLmFpL2hlbHAvZXhwbG9yZS9tdWx0aXZhcmlhdGUtYW5hbHlzaXMvcGxvdHMvcmVncmVzc2lvbi1jb2VmZmljaWVudHNcIjtcbiAgICBMSU5LW1wiTE9BRElOR1NcIl0gPSBcImh0dHBzOi8vZGF0YWdyb2suYWkvaGVscC9leHBsb3JlL211bHRpdmFyaWF0ZS1hbmFseXNpcy9wbG90cy9sb2FkaW5nc1wiO1xuICAgIExJTktbXCJFWFBMX1ZBUlNcIl0gPSBcImh0dHBzOi8vZGF0YWdyb2suYWkvaGVscC9leHBsb3JlL211bHRpdmFyaWF0ZS1hbmFseXNpcy9wbG90cy9leHBsYWluZWQtdmFyaWFuY2VcIjtcbiAgICBMSU5LW1wiU0NPUkVTXCJdID0gXCJodHRwczovL2RhdGFncm9rLmFpL2hlbHAvZXhwbG9yZS9tdWx0aXZhcmlhdGUtYW5hbHlzaXMvcGxvdHMvc2NvcmVzXCI7XG59KShMSU5LIHx8IChMSU5LID0ge30pKTtcbi8qKiBDb21wb25lbnRzIGNvbnN0cyAqL1xuZXhwb3J0IHZhciBDT01QT05FTlRTO1xuKGZ1bmN0aW9uIChDT01QT05FTlRTKSB7XG4gICAgQ09NUE9ORU5UU1tDT01QT05FTlRTW1wiREVGQVVMVFwiXSA9IDNdID0gXCJERUZBVUxUXCI7XG4gICAgQ09NUE9ORU5UU1tDT01QT05FTlRTW1wiTUlOXCJdID0gMV0gPSBcIk1JTlwiO1xufSkoQ09NUE9ORU5UUyB8fCAoQ09NUE9ORU5UUyA9IHt9KSk7XG4vKiogSXRlbXMgdXNlZCBmb3IgbmFtaW5nIHJlc3VsdHMgKi9cbmV4cG9ydCB2YXIgUkVTVUxUX05BTUVTO1xuKGZ1bmN0aW9uIChSRVNVTFRfTkFNRVMpIHtcbiAgICBSRVNVTFRfTkFNRVNbXCJQUkVGSVhcIl0gPSBcIlBMU1wiO1xuICAgIFJFU1VMVF9OQU1FU1tcIlNVRkZJWFwiXSA9IFwiKHByZWRpY3RlZClcIjtcbiAgICBSRVNVTFRfTkFNRVNbXCJDT01QXCJdID0gXCJjb21wb25lbnRcIjtcbiAgICBSRVNVTFRfTkFNRVNbXCJDT01QU1wiXSA9IFwiY29tcG9uZW50c1wiO1xufSkoUkVTVUxUX05BTUVTIHx8IChSRVNVTFRfTkFNRVMgPSB7fSkpO1xuLyoqIEluZGVjZXMgb2Ygd2FzbS1jb21wdXRhdGlvbiBvdXRwdXQgKi9cbmV4cG9ydCB2YXIgV0FTTV9PVVRQVVRfSURYO1xuKGZ1bmN0aW9uIChXQVNNX09VVFBVVF9JRFgpIHtcbiAgICBXQVNNX09VVFBVVF9JRFhbV0FTTV9PVVRQVVRfSURYW1wiUFJFRElDVElPTlwiXSA9IDBdID0gXCJQUkVESUNUSU9OXCI7XG4gICAgV0FTTV9PVVRQVVRfSURYW1dBU01fT1VUUFVUX0lEWFtcIlJFR1JfQ09FRkZTXCJdID0gMV0gPSBcIlJFR1JfQ09FRkZTXCI7XG4gICAgV0FTTV9PVVRQVVRfSURYW1dBU01fT1VUUFVUX0lEWFtcIlRfU0NPUkVTXCJdID0gMl0gPSBcIlRfU0NPUkVTXCI7XG4gICAgV0FTTV9PVVRQVVRfSURYW1dBU01fT1VUUFVUX0lEWFtcIlVfU0NPUkVTXCJdID0gM10gPSBcIlVfU0NPUkVTXCI7XG4gICAgV0FTTV9PVVRQVVRfSURYW1dBU01fT1VUUFVUX0lEWFtcIlhfTE9BRElOR1NcIl0gPSA0XSA9IFwiWF9MT0FESU5HU1wiO1xuICAgIFdBU01fT1VUUFVUX0lEWFtXQVNNX09VVFBVVF9JRFhbXCJZX0xPQURJTkdTXCJdID0gNV0gPSBcIllfTE9BRElOR1NcIjtcbn0pKFdBU01fT1VUUFVUX0lEWCB8fCAoV0FTTV9PVVRQVVRfSURYID0ge30pKTtcbmV4cG9ydCBjb25zdCBJTlQgPSAnSW50JztcbmV4cG9ydCBjb25zdCBUSU1FT1VUID0gNjtcbmV4cG9ydCBjb25zdCBSQURJVVMgPSBbMC40OSwgMC43OSwgMC45OV07XG5leHBvcnQgY29uc3QgTElORV9XSURUSCA9IDE7XG5leHBvcnQgY29uc3QgWF9DT09SRCA9IDIwMDtcbmV4cG9ydCBjb25zdCBZX0NPT1JEID0gMjAwO1xuZXhwb3J0IGNvbnN0IERFTEFZID0gMjAwMDtcbi8qKiBDdXJ2ZXMgY29sb3JzICovXG5leHBvcnQgdmFyIENPTE9SO1xuKGZ1bmN0aW9uIChDT0xPUikge1xuICAgIENPTE9SW1wiQVhJU1wiXSA9IFwiIzgzODM4M1wiO1xuICAgIENPTE9SW1wiQ0lSQ0xFXCJdID0gXCIjMDAwMEZGXCI7XG59KShDT0xPUiB8fCAoQ09MT1IgPSB7fSkpO1xuO1xuLyoqIEludHJvIG1hcmtkb3duIGZvciBkZW1vIGFwcCAqL1xuZXhwb3J0IGNvbnN0IERFTU9fSU5UUk9fTUQgPSBgIyBEYXRhXG5FYWNoIGNhciBoYXMgbWFueSBmZWF0dXJlcyAtIHBhdHRlcm5zIGV4dHJhY3Rpb24gaXMgY29tcGxpY2F0ZWQuXG5cbiMgTW9kZWxcblByZWRpY3QgY2FyIHByaWNlIGJ5IGl0cyBvdGhlciBmZWF0dXJlcy5cblxuIyBUcnlcblByZXNzICdSVU4nIHRvIHBlcmZvcm0gbXVsdGl2YXJpYXRlIGFuYWx5c2lzIHVzaW5nIHBhcnRpYWwgbGVhc3Qgc3F1YXJlc1xuKFtQTFNdKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1BhcnRpYWxfbGVhc3Rfc3F1YXJlc19yZWdyZXNzaW9uKSkgcmVncmVzc2lvbi5cblxuIyBFc3NlbmNlXG5UaGUgbWV0aG9kIGZpbmRzIHRoZSBsYXRlbnQgZmFjdG9ycyB0aGF0XG5cbiogY2FwdHVyZSB0aGUgbWF4aW11bSB2YXJpYW5jZSBpbiB0aGUgZmVhdHVyZXNcbiogbWF4aW1pemUgY29ycmVsYXRpb24gd2l0aCB0aGUgcmVzcG9uc2UgdmFyaWFibGVgO1xuLyoqIERlc2NyaXB0aW9uIG9mIGRlbW8gcmVzdWx0czogd2l6YXJkIGNvbXBvbmVudHMgKi9cbmV4cG9ydCBjb25zdCBERU1PX1JFU1VMVFMgPSBbXG4gICAgeyBjYXB0aW9uOiBUSVRMRS5NT0RFTCwgdGV4dDogJ0Nsb3NlciB0byB0aGUgbGluZSBtZWFucyBiZXR0ZXIgcHJpY2UgcHJlZGljdGlvbi4nIH0sXG4gICAgeyBjYXB0aW9uOiBUSVRMRS5TQ09SRVMsIHRleHQ6ICdUaGUgbGF0ZW50IGZhY3RvciB2YWx1ZXMgZm9yIGVhY2ggZGF0YSBzYW1wbGUgcmVmbGVjdCB0aGUgc2ltaWxhcml0aWVzIGFuZCBkaXNzaW1pbGFyaXRpZXMgYW1vbmcgb2JzZXJ2YXRpb25zLicgfSxcbiAgICB7IGNhcHRpb246IFRJVExFLkxPQURJTkdTLCB0ZXh0OiAnVGhlIGltcGFjdCBvZiBlYWNoIGZlYXR1cmUgb24gdGhlIGxhdGVudCBmYWN0b3JzOiBoaWdoZXIgbG9hZGluZyBtZWFucyBzdHJvbmdlciBpbmZsdWVuY2UuJyB9LFxuICAgIHsgY2FwdGlvbjogVElUTEUuUkVHUl9DT0VGUywgdGV4dDogJ1BhcmFtZXRlcnMgb2YgdGhlIG9idGFpbmVkIGxpbmVhciBtb2RlbDogZmVhdHVyZXMgbWFrZSBkaWZmZXJlbnQgY29udHJpYnV0aW9uIHRvIHRoZSBwcmVkaWN0aW9uLicgfSxcbiAgICB7IGNhcHRpb246IFRJVExFLkVYUExfVkFSLCB0ZXh0OiAnSG93IHdlbGwgdGhlIGxhdGVudCBjb21wb25lbnRzIGZpdCBzb3VyY2UgZGF0YTogY2xvc2VyIHRvIG9uZSBtZWFucyBiZXR0ZXIgZml0LicgfSxcbl07XG4vKiogRm9ybSByZXN1bHRzIG1hcmtkb3duIGZvciBkZW1vIGFwcCAqL1xuZXhwb3J0IGNvbnN0IERFTU9fUkVTVUxUU19NRCA9IERFTU9fUkVTVUxUUy5tYXAoKGl0ZW0pID0+IGAjICR7aXRlbS5jYXB0aW9ufVxcblxcbiR7aXRlbS50ZXh0fWApXG4gICAgLmpvaW4oJ1xcblxcbicpICsgYFxcblxcbiMgTGVhcm4gbW9yZVxuICBcbiAgKiBbTXVsdGl2YXJpYXRlIGFuYWx5c2lzXSgke0xJTksuTVZBfSksXG4gICogW0FOT1ZBXShodHRwczovL2RhdGFncm9rLmFpL2hlbHAvZXhwbG9yZS9hbm92YSlgO1xuIiwiLy8gVG9vbHMgZm9yIG11bHRpdmFyaWF0ZSBhbmFseXNpcyBieSBQTFNcbnZhciBfX2F3YWl0ZXIgPSAodGhpcyAmJiB0aGlzLl9fYXdhaXRlcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gICAgfSk7XG59O1xuaW1wb3J0ICogYXMgZ3JvayBmcm9tICdkYXRhZ3Jvay1hcGkvZ3Jvayc7XG5pbXBvcnQgKiBhcyB1aSBmcm9tICdkYXRhZ3Jvay1hcGkvdWknO1xuaW1wb3J0ICogYXMgREcgZnJvbSAnZGF0YWdyb2stYXBpL2RnJztcbmltcG9ydCB7IFBMU19BTkFMWVNJUywgRVJST1JfTVNHLCBUSVRMRSwgSElOVCwgTElOSywgQ09NUE9ORU5UUywgSU5ULCBUSU1FT1VULCBSRVNVTFRfTkFNRVMsIFdBU01fT1VUUFVUX0lEWCwgUkFESVVTLCBMSU5FX1dJRFRILCBDT0xPUiwgWF9DT09SRCwgWV9DT09SRCwgREVNT19JTlRST19NRCwgREVNT19SRVNVTFRTX01ELCBERU1PX1JFU1VMVFMgfSBmcm9tICcuL3Bscy1jb25zdGFudHMnO1xuaW1wb3J0IHsgY2hlY2tXYXNtRGltZW5zaW9uUmVkdWNlcklucHV0cywgY2hlY2tDb2x1bW5UeXBlLCBjaGVja01pc3NpbmdWYWxzIH0gZnJvbSAnLi4vdXRpbHMnO1xuaW1wb3J0IHsgX3BhcnRpYWxMZWFzdFNxdWFyZVJlZ3Jlc3Npb25JbldlYldvcmtlciB9IGZyb20gJy4uLy4uL3dhc20vRURBQVBJJztcbmltcG9ydCB7IGNhcnNEYXRhZnJhbWUgfSBmcm9tICcuLi9kYXRhLWdlbmVyYXRvcnMnO1xuY29uc3QgbWluID0gTWF0aC5taW47XG5jb25zdCBtYXggPSBNYXRoLm1heDtcbi8qKiBQYXJ0aWFsIGxlYXN0IHNxdWFyZSByZWdyZXNzaW9uIChQTFMpICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0UGxzQW5hbHlzaXMoaW5wdXQpIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBjaGVja1dhc21EaW1lbnNpb25SZWR1Y2VySW5wdXRzKGlucHV0LmZlYXR1cmVzLCBpbnB1dC5jb21wb25lbnRzKTtcbiAgICAgICAgLy8gQ2hlY2sgdGhlIHJlc3BvbmNlIGNvbHVtblxuICAgICAgICBjaGVja0NvbHVtblR5cGUoaW5wdXQucHJlZGljdCk7XG4gICAgICAgIGNoZWNrTWlzc2luZ1ZhbHMoaW5wdXQucHJlZGljdCk7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHlpZWxkIF9wYXJ0aWFsTGVhc3RTcXVhcmVSZWdyZXNzaW9uSW5XZWJXb3JrZXIoaW5wdXQudGFibGUsIGlucHV0LmZlYXR1cmVzLCBpbnB1dC5wcmVkaWN0LCBpbnB1dC5jb21wb25lbnRzKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHByZWRpY3Rpb246IHJlc3VsdFtXQVNNX09VVFBVVF9JRFguUFJFRElDVElPTl0sXG4gICAgICAgICAgICByZWdyZXNzaW9uQ29lZmZpY2llbnRzOiByZXN1bHRbV0FTTV9PVVRQVVRfSURYLlJFR1JfQ09FRkZTXSxcbiAgICAgICAgICAgIHRTY29yZXM6IHJlc3VsdFtXQVNNX09VVFBVVF9JRFguVF9TQ09SRVNdLFxuICAgICAgICAgICAgdVNjb3JlczogcmVzdWx0W1dBU01fT1VUUFVUX0lEWC5VX1NDT1JFU10sXG4gICAgICAgICAgICB4TG9hZGluZ3M6IHJlc3VsdFtXQVNNX09VVFBVVF9JRFguWF9MT0FESU5HU10sXG4gICAgICAgICAgICB5TG9hZGluZ3M6IHJlc3VsdFtXQVNNX09VVFBVVF9JRFguWV9MT0FESU5HU10sXG4gICAgICAgIH07XG4gICAgfSk7XG59XG4vKiogUGVyZm9ybSBtdWx0aXZhcmlhdGUgYW5hbHlzaXMgdXNpbmcgdGhlIFBMUyByZWdyZXNzaW9uICovXG5mdW5jdGlvbiBwZXJmb3JtTVZBKGlucHV0LCBhbmFseXNpc1R5cGUpIHtcbiAgICB2YXIgX2EsIF9iO1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHlpZWxkIGdldFBsc0FuYWx5c2lzKGlucHV0KTtcbiAgICAgICAgY29uc3QgcGxzQ29scyA9IHJlc3VsdC50U2NvcmVzO1xuICAgICAgICBjb25zdCBjb2xzID0gaW5wdXQudGFibGUuY29sdW1ucztcbiAgICAgICAgY29uc3QgZmVhdHVyZXNOYW1lcyA9IGlucHV0LmZlYXR1cmVzLm5hbWVzKCk7XG4gICAgICAgIGNvbnN0IHByZWZpeCA9IChhbmFseXNpc1R5cGUgPT09IFBMU19BTkFMWVNJUy5DT01QVVRFX0NPTVBPTkVOVFMpID8gUkVTVUxUX05BTUVTLlBSRUZJWCA6IFRJVExFLlhTQ09SRTtcbiAgICAgICAgLy8gYWRkIFBMUyBjb21wb25lbnRzIHRvIHRoZSB0YWJsZVxuICAgICAgICBwbHNDb2xzLmZvckVhY2goKGNvbCwgaWR4KSA9PiB7XG4gICAgICAgICAgICBjb2wubmFtZSA9IGNvbHMuZ2V0VW51c2VkTmFtZShgJHtwcmVmaXh9JHtpZHggKyAxfWApO1xuICAgICAgICAgICAgY29scy5hZGQoY29sKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChhbmFseXNpc1R5cGUgPT09IFBMU19BTkFMWVNJUy5DT01QVVRFX0NPTVBPTkVOVFMpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGNvbnN0IHZpZXcgPSBncm9rLnNoZWxsLnRhYmxlVmlldyhpbnB1dC50YWJsZS5uYW1lKTtcbiAgICAgICAgLy8gMC4xIEJ1ZmZlciB0YWJsZVxuICAgICAgICBjb25zdCBidWZmZXIgPSBERy5EYXRhRnJhbWUuZnJvbUNvbHVtbnMoW1xuICAgICAgICAgICAgREcuQ29sdW1uLmZyb21TdHJpbmdzKFRJVExFLkZFQVRVUkUsIGZlYXR1cmVzTmFtZXMpLFxuICAgICAgICAgICAgcmVzdWx0LnJlZ3Jlc3Npb25Db2VmZmljaWVudHMsXG4gICAgICAgIF0pO1xuICAgICAgICAvLyAwLjIuIEFkZCBYLUxvYWRpbmdzXG4gICAgICAgIHJlc3VsdC54TG9hZGluZ3MuZm9yRWFjaCgoY29sLCBpZHgpID0+IHtcbiAgICAgICAgICAgIGNvbC5uYW1lID0gYnVmZmVyLmNvbHVtbnMuZ2V0VW51c2VkTmFtZShgJHtUSVRMRS5YTE9BRElOR30ke2lkeCArIDF9YCk7XG4gICAgICAgICAgICBidWZmZXIuY29sdW1ucy5hZGQoY29sKTtcbiAgICAgICAgfSk7XG4gICAgICAgIC8vIDEuIFByZWRpY3RlZCB2cyBSZWZlcmVuY2Ugc2NhdHRlciBwbG90XG4gICAgICAgIGNvbnN0IHByZWQgPSByZXN1bHQucHJlZGljdGlvbjtcbiAgICAgICAgcHJlZC5uYW1lID0gY29scy5nZXRVbnVzZWROYW1lKGAke2lucHV0LnByZWRpY3QubmFtZX0gJHtSRVNVTFRfTkFNRVMuU1VGRklYfWApO1xuICAgICAgICBjb2xzLmFkZChwcmVkKTtcbiAgICAgICAgY29uc3QgcHJlZGljdFZzUmVmZXJTY2F0dGVyID0gdmlldy5hZGRWaWV3ZXIoREcuVmlld2VyLnNjYXR0ZXJQbG90KGlucHV0LnRhYmxlLCB7XG4gICAgICAgICAgICB0aXRsZTogVElUTEUuTU9ERUwsXG4gICAgICAgICAgICB4Q29sdW1uTmFtZTogaW5wdXQucHJlZGljdC5uYW1lLFxuICAgICAgICAgICAgeUNvbHVtbk5hbWU6IHByZWQubmFtZSxcbiAgICAgICAgICAgIHNob3dSZWdyZXNzaW9uTGluZTogdHJ1ZSxcbiAgICAgICAgICAgIG1hcmtlclR5cGU6IERHLk1BUktFUl9UWVBFLkNJUkNMRSxcbiAgICAgICAgICAgIGxhYmVsczogKF9hID0gaW5wdXQubmFtZXMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5uYW1lLFxuICAgICAgICAgICAgaGVscDogTElOSy5NT0RFTCxcbiAgICAgICAgfSkpO1xuICAgICAgICAvLyAyLiBSZWdyZXNzaW9uIENvZWZmaWNpZW50cyBCYXIgQ2hhcnRcbiAgICAgICAgcmVzdWx0LnJlZ3Jlc3Npb25Db2VmZmljaWVudHMubmFtZSA9IFRJVExFLlJFR1JfQ09FRlM7XG4gICAgICAgIGNvbnN0IHJlZ3JDb2VmZnNCYXIgPSB2aWV3LmFkZFZpZXdlcihERy5WaWV3ZXIuYmFyQ2hhcnQoYnVmZmVyLCB7XG4gICAgICAgICAgICB0aXRsZTogVElUTEUuUkVHUl9DT0VGUyxcbiAgICAgICAgICAgIHNwbGl0Q29sdW1uTmFtZTogVElUTEUuRkVBVFVSRSxcbiAgICAgICAgICAgIHZhbHVlQ29sdW1uTmFtZTogcmVzdWx0LnJlZ3Jlc3Npb25Db2VmZmljaWVudHMubmFtZSxcbiAgICAgICAgICAgIHZhbHVlQWdnclR5cGU6IERHLkFHRy5BVkcsXG4gICAgICAgICAgICBoZWxwOiBMSU5LLkNPRUZGUyxcbiAgICAgICAgICAgIHNob3dWYWx1ZVNlbGVjdG9yOiBmYWxzZSxcbiAgICAgICAgICAgIHNob3dTdGFja1NlbGVjdG9yOiBmYWxzZSxcbiAgICAgICAgfSkpO1xuICAgICAgICAvLyAzLiBMb2FkaW5ncyBTY2F0dGVyIFBsb3RcbiAgICAgICAgcmVzdWx0LnhMb2FkaW5ncy5mb3JFYWNoKChjb2wsIGlkeCkgPT4gY29sLm5hbWUgPSBgJHtUSVRMRS5YTE9BRElOR30ke2lkeCArIDF9YCk7XG4gICAgICAgIGNvbnN0IGxvYWRpbmdzU2NhdHRlciA9IHZpZXcuYWRkVmlld2VyKERHLlZpZXdlci5zY2F0dGVyUGxvdChidWZmZXIsIHtcbiAgICAgICAgICAgIHRpdGxlOiBUSVRMRS5MT0FESU5HUyxcbiAgICAgICAgICAgIHhDb2x1bW5OYW1lOiBgJHtUSVRMRS5YTE9BRElOR30xYCxcbiAgICAgICAgICAgIHlDb2x1bW5OYW1lOiBgJHtUSVRMRS5YTE9BRElOR30ke3Jlc3VsdC54TG9hZGluZ3MubGVuZ3RoID4gMSA/ICcyJyA6ICcxJ31gLFxuICAgICAgICAgICAgbWFya2VyVHlwZTogREcuTUFSS0VSX1RZUEUuQ0lSQ0xFLFxuICAgICAgICAgICAgbGFiZWxzOiBUSVRMRS5GRUFUVVJFLFxuICAgICAgICAgICAgaGVscDogTElOSy5MT0FESU5HUyxcbiAgICAgICAgfSkpO1xuICAgICAgICAvLyA0LiBTY29yZXMgU2NhdHRlciBQbG90XG4gICAgICAgIC8vIDQuMSkgZGF0YVxuICAgICAgICBjb25zdCBzY29yZU5hbWVzID0gcGxzQ29scy5tYXAoKGNvbCkgPT4gY29sLm5hbWUpO1xuICAgICAgICByZXN1bHQudVNjb3Jlcy5mb3JFYWNoKChjb2wsIGlkeCkgPT4ge1xuICAgICAgICAgICAgY29sLm5hbWUgPSBjb2xzLmdldFVudXNlZE5hbWUoYCR7VElUTEUuWVNDT1JFfSR7aWR4ICsgMX1gKTtcbiAgICAgICAgICAgIGNvbHMuYWRkKGNvbCk7XG4gICAgICAgICAgICBzY29yZU5hbWVzLnB1c2goY29sLm5hbWUpO1xuICAgICAgICB9KTtcbiAgICAgICAgLy8gNC4yKSBjcmVhdGUgc2NhdHRlclxuICAgICAgICBjb25zdCBzY29yZXNTY2F0dGVyID0gREcuVmlld2VyLnNjYXR0ZXJQbG90KGlucHV0LnRhYmxlLCB7XG4gICAgICAgICAgICB0aXRsZTogVElUTEUuU0NPUkVTLFxuICAgICAgICAgICAgeENvbHVtbk5hbWU6IHBsc0NvbHNbMF0ubmFtZSxcbiAgICAgICAgICAgIHlDb2x1bW5OYW1lOiAocGxzQ29scy5sZW5ndGggPiAxKSA/IHBsc0NvbHNbMV0ubmFtZSA6IHJlc3VsdC51U2NvcmVzWzBdLFxuICAgICAgICAgICAgbWFya2VyVHlwZTogREcuTUFSS0VSX1RZUEUuQ0lSQ0xFLFxuICAgICAgICAgICAgbGFiZWxzOiAoX2IgPSBpbnB1dC5uYW1lcykgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLm5hbWUsXG4gICAgICAgICAgICBoZWxwOiBMSU5LLlNDT1JFUyxcbiAgICAgICAgICAgIHNob3dWaWV3ZXJGb3JtdWxhTGluZXM6IHRydWUsXG4gICAgICAgIH0pO1xuICAgICAgICAvLyA0LjMpIGNyZWF0ZSBsaW5lcyAmIGNpcmNsZXNcbiAgICAgICAgY29uc3QgbGluZXMgPSBbXTtcbiAgICAgICAgY29uc3QgYWRkTGluZSA9IChmb3JtdWxhLCByYWRpdXMpID0+IHtcbiAgICAgICAgICAgIGxpbmVzLnB1c2goe1xuICAgICAgICAgICAgICAgIHR5cGU6ICdsaW5lJyxcbiAgICAgICAgICAgICAgICBmb3JtdWxhOiBmb3JtdWxhLFxuICAgICAgICAgICAgICAgIHdpZHRoOiBMSU5FX1dJRFRILFxuICAgICAgICAgICAgICAgIHZpc2libGU6IHRydWUsXG4gICAgICAgICAgICAgICAgdGl0bGU6ICcgJyxcbiAgICAgICAgICAgICAgICBtaW46IC1yYWRpdXMsXG4gICAgICAgICAgICAgICAgbWF4OiByYWRpdXMsXG4gICAgICAgICAgICAgICAgY29sb3I6IENPTE9SLkNJUkNMRSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9O1xuICAgICAgICBzY29yZU5hbWVzLmZvckVhY2goKHhOYW1lKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB4ID0gJyR7JyArIHhOYW1lICsgJ30nO1xuICAgICAgICAgICAgbGluZXMucHVzaCh7IHR5cGU6ICdsaW5lJywgZm9ybXVsYTogYCR7eH0gPSAwYCwgd2lkdGg6IExJTkVfV0lEVEgsIHZpc2libGU6IHRydWUsIHRpdGxlOiAnICcsIGNvbG9yOiBDT0xPUi5BWElTIH0pO1xuICAgICAgICAgICAgc2NvcmVOYW1lcy5mb3JFYWNoKCh5TmFtZSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHkgPSAnJHsnICsgeU5hbWUgKyAnfSc7XG4gICAgICAgICAgICAgICAgUkFESVVTLmZvckVhY2goKHIpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgYWRkTGluZSh5ICsgYCA9IHNxcnQoJHtyICogcn0gLSAke3h9ICogJHt4fSlgLCByKTtcbiAgICAgICAgICAgICAgICAgICAgYWRkTGluZSh5ICsgYCA9IC1zcXJ0KCR7ciAqIHJ9IC0gJHt4fSAqICR7eH0pYCwgcik7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICAgIHNjb3Jlc1NjYXR0ZXIubWV0YS5mb3JtdWxhTGluZXMuYWRkQWxsKGxpbmVzKTtcbiAgICAgICAgdmlldy5hZGRWaWV3ZXIoc2NvcmVzU2NhdHRlcik7XG4gICAgICAgIC8vIDUuIEV4cGxhaW5lZCBWYXJpYW5jZXNcbiAgICAgICAgLy8gNS4xKSBjb21wdXRhdGlvbiwgc291cmNlOiB0aGUgcGFwZXIgaHR0cHM6Ly9kb2kub3JnLzEwLjEwMDIvY2VtLjI1ODlcbiAgICAgICAgLy8gICAgICBoZXJlLCB3ZSB1c2Ugbm90YXRpb25zIGZyb20gdGhpcyBwYXBlclxuICAgICAgICBjb25zdCBxID0gcmVzdWx0LnlMb2FkaW5ncy5nZXRSYXdEYXRhKCk7XG4gICAgICAgIGNvbnN0IHAgPSByZXN1bHQueExvYWRpbmdzLm1hcCgoY29sKSA9PiBjb2wuZ2V0UmF3RGF0YSgpKTtcbiAgICAgICAgY29uc3QgbiA9IGlucHV0LnRhYmxlLnJvd0NvdW50O1xuICAgICAgICBjb25zdCBtID0gZmVhdHVyZXNOYW1lcy5sZW5ndGg7XG4gICAgICAgIGNvbnN0IEEgPSBpbnB1dC5jb21wb25lbnRzO1xuICAgICAgICBjb25zdCB5RXhwbFZhcnMgPSBuZXcgRmxvYXQzMkFycmF5KEEpO1xuICAgICAgICBjb25zdCBjb21wTmFtZXMgPSBbXTtcbiAgICAgICAgY29uc3QgeEV4cGxWYXJzID0gW107XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbTsgKytpKVxuICAgICAgICAgICAgeEV4cGxWYXJzLnB1c2gobmV3IEZsb2F0MzJBcnJheShBKSk7XG4gICAgICAgIHlFeHBsVmFyc1swXSA9IE1hdGgucG93KHFbMF0sIDIpIC8gbjtcbiAgICAgICAgY29tcE5hbWVzLnB1c2goYDEgJHtSRVNVTFRfTkFNRVMuQ09NUH1gKTtcbiAgICAgICAgeEV4cGxWYXJzLmZvckVhY2goKGFyciwgaWR4KSA9PiB7IGFyclswXSA9IE1hdGgucG93KHBbMF1baWR4XSwgMikgLyBuOyB9KTtcbiAgICAgICAgZm9yIChsZXQgY29tcCA9IDE7IGNvbXAgPCBBOyArK2NvbXApIHtcbiAgICAgICAgICAgIHlFeHBsVmFyc1tjb21wXSA9IHlFeHBsVmFyc1tjb21wIC0gMV0gKyBNYXRoLnBvdyhxW2NvbXBdLCAyKSAvIG47XG4gICAgICAgICAgICB4RXhwbFZhcnMuZm9yRWFjaCgoYXJyLCBpZHgpID0+IGFycltjb21wXSA9IGFycltjb21wIC0gMV0gKyBNYXRoLnBvdyhwW2NvbXBdW2lkeF0sIDIpIC8gbik7XG4gICAgICAgICAgICBjb21wTmFtZXMucHVzaChgJHtjb21wICsgMX0gJHtSRVNVTFRfTkFNRVMuQ09NUFN9YCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gNS4yKSBjcmVhdGUgZGZcbiAgICAgICAgY29uc3QgZXhwbFZhcnNERiA9IERHLkRhdGFGcmFtZS5mcm9tQ29sdW1ucyhbXG4gICAgICAgICAgICBERy5Db2x1bW4uZnJvbVN0cmluZ3MoVElUTEUuQ09NUE9ORU5UUywgY29tcE5hbWVzKSxcbiAgICAgICAgICAgIERHLkNvbHVtbi5mcm9tRmxvYXQzMkFycmF5KGlucHV0LnByZWRpY3QubmFtZSwgeUV4cGxWYXJzKSxcbiAgICAgICAgXSk7XG4gICAgICAgIHhFeHBsVmFycy5mb3JFYWNoKChhcnIsIGlkeCkgPT4gZXhwbFZhcnNERi5jb2x1bW5zLmFkZChERy5Db2x1bW4uZnJvbUZsb2F0MzJBcnJheShmZWF0dXJlc05hbWVzW2lkeF0sIGFycikpKTtcbiAgICAgICAgLy8gNS4zKSBiYXIgY2hhcnRcbiAgICAgICAgY29uc3QgZXhwbFZhcnNCYXIgPSB2aWV3LmFkZFZpZXdlcihERy5WaWV3ZXIuYmFyQ2hhcnQoZXhwbFZhcnNERiwge1xuICAgICAgICAgICAgdGl0bGU6IFRJVExFLkVYUExfVkFSLFxuICAgICAgICAgICAgc3BsaXRDb2x1bW5OYW1lOiBUSVRMRS5DT01QT05FTlRTLFxuICAgICAgICAgICAgdmFsdWVDb2x1bW5OYW1lOiBpbnB1dC5wcmVkaWN0Lm5hbWUsXG4gICAgICAgICAgICB2YWx1ZUFnZ3JUeXBlOiBERy5BR0cuQVZHLFxuICAgICAgICAgICAgaGVscDogTElOSy5FWFBMX1ZBUlMsXG4gICAgICAgICAgICBzaG93Q2F0ZWdvcnlTZWxlY3RvcjogZmFsc2UsXG4gICAgICAgICAgICBzaG93U3RhY2tTZWxlY3RvcjogZmFsc2UsXG4gICAgICAgIH0pKTtcbiAgICAgICAgLy8gZW1waGFzaXplIHZpZXdlcnMgaW4gdGhlIGRlbW8gY2FzZVxuICAgICAgICBpZiAoYW5hbHlzaXNUeXBlID09PSBQTFNfQU5BTFlTSVMuREVNTykge1xuICAgICAgICAgICAgY29uc3QgcGFnZXMgPSBbcHJlZGljdFZzUmVmZXJTY2F0dGVyLCBzY29yZXNTY2F0dGVyLCBsb2FkaW5nc1NjYXR0ZXIsIHJlZ3JDb2VmZnNCYXIsIGV4cGxWYXJzQmFyXS5tYXAoKHZpZXdlciwgaWR4KSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgdGV4dDogREVNT19SRVNVTFRTW2lkeF0udGV4dCxcbiAgICAgICAgICAgICAgICAgICAgc2hvd05leHRUbzogdmlld2VyLnJvb3QsXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY29uc3Qgd2l6YXJkID0gdWkuaGludHMuYWRkVGV4dEhpbnQoeyB0aXRsZTogVElUTEUuRVhQTE9SRSwgcGFnZXM6IHBhZ2VzIH0pO1xuICAgICAgICAgICAgd2l6YXJkLmhlbHBVcmwgPSBMSU5LLk1WQTtcbiAgICAgICAgICAgIGdyb2suc2hlbGwud2luZG93cy5oZWxwLnNob3dIZWxwKHVpLm1hcmtkb3duKERFTU9fUkVTVUxUU19NRCkpO1xuICAgICAgICB9XG4gICAgfSk7XG59IC8vIHBlcmZvcm1NVkFcbi8qKiBSdW4gbXVsdGl2YXJpYXRlIGFuYWx5c2lzIChQTFMpICovXG5leHBvcnQgZnVuY3Rpb24gcnVuTVZBKGFuYWx5c2lzVHlwZSkge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGNvbnN0IHRhYmxlID0gZ3Jvay5zaGVsbC50O1xuICAgICAgICBpZiAodGFibGUgPT09IG51bGwpIHtcbiAgICAgICAgICAgIGdyb2suc2hlbGwud2FybmluZyhFUlJPUl9NU0cuTk9fREYpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0YWJsZS5yb3dDb3VudCA9PT0gMCkge1xuICAgICAgICAgICAgZ3Jvay5zaGVsbC53YXJuaW5nKEVSUk9SX01TRy5FTVBUWV9ERik7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbnVtQ29sTmFtZXMgPSBbXTtcbiAgICAgICAgY29uc3QgbnVtQ29scyA9IFtdO1xuICAgICAgICBjb25zdCBzdHJDb2xzID0gW107XG4gICAgICAgIGNvbnN0IGlzVmFsaWROdW1lcmljID0gKGNvbCkgPT4gKChjb2wudHlwZSA9PT0gREcuQ09MVU1OX1RZUEUuSU5UKSB8fCAoY29sLnR5cGUgPT09IERHLkNPTFVNTl9UWVBFLkZMT0FUKSkgJiZcbiAgICAgICAgICAgIChjb2wuc3RhdHMubWlzc2luZ1ZhbHVlQ291bnQgPT09IDApO1xuICAgICAgICB0YWJsZS5jb2x1bW5zLnRvTGlzdCgpLmZvckVhY2goKGNvbCkgPT4ge1xuICAgICAgICAgICAgaWYgKGlzVmFsaWROdW1lcmljKGNvbCkpIHtcbiAgICAgICAgICAgICAgICBudW1Db2xOYW1lcy5wdXNoKGNvbC5uYW1lKTtcbiAgICAgICAgICAgICAgICBudW1Db2xzLnB1c2goY29sKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGNvbC50eXBlID09PSBERy5DT0xVTU5fVFlQRS5TVFJJTkcpXG4gICAgICAgICAgICAgICAgc3RyQ29scy5wdXNoKGNvbCk7XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAobnVtQ29sTmFtZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICBncm9rLnNoZWxsLndhcm5pbmcoRVJST1JfTVNHLk5PX0NPTFMpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChudW1Db2xOYW1lcy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgIGdyb2suc2hlbGwud2FybmluZyhFUlJPUl9NU0cuT05FX0NPTCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gcmVzcG9uY2UgKHRvIHByZWRpY3QpXG4gICAgICAgIGxldCBwcmVkaWN0ID0gbnVtQ29sc1tudW1Db2xzLmxlbmd0aCAtIDFdO1xuICAgICAgICBjb25zdCBwcmVkaWN0SW5wdXQgPSB1aS5jb2x1bW5JbnB1dChUSVRMRS5QUkVESUNULCB0YWJsZSwgcHJlZGljdCwgKCkgPT4ge1xuICAgICAgICAgICAgcHJlZGljdCA9IHByZWRpY3RJbnB1dC52YWx1ZTtcbiAgICAgICAgICAgIHVwZGF0ZUlwdXRzKCk7XG4gICAgICAgIH0sIHsgZmlsdGVyOiAoY29sKSA9PiBpc1ZhbGlkTnVtZXJpYyhjb2wpIH0pO1xuICAgICAgICBwcmVkaWN0SW5wdXQuc2V0VG9vbHRpcChISU5ULlBSRURJQ1QpO1xuICAgICAgICAvLyBwcmVkaWN0b3JzIChmZWF0dXJlcylcbiAgICAgICAgbGV0IGZlYXR1cmVzO1xuICAgICAgICBjb25zdCBmZWF0dXJlc0lucHV0ID0gdWkuY29sdW1uc0lucHV0KFRJVExFLlVTSU5HLCB0YWJsZSwgKCkgPT4geyB9LCB7IGF2YWlsYWJsZTogbnVtQ29sTmFtZXMgfSk7XG4gICAgICAgIGZlYXR1cmVzSW5wdXQub25JbnB1dCgoKSA9PiB1cGRhdGVJcHV0cygpKTtcbiAgICAgICAgZmVhdHVyZXNJbnB1dC5zZXRUb29sdGlwKEhJTlQuRkVBVFVSRVMpO1xuICAgICAgICAvLyBjb21wb25lbnRzIGNvdW50XG4gICAgICAgIGxldCBjb21wb25lbnRzID0gbWluKG51bUNvbE5hbWVzLmxlbmd0aCAtIDEsIENPTVBPTkVOVFMuREVGQVVMVCk7XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudHNJbnB1dCA9IHVpLmlucHV0LmZvclByb3BlcnR5KERHLlByb3BlcnR5LmZyb21PcHRpb25zKHtcbiAgICAgICAgICAgIG5hbWU6IFRJVExFLkNPTVBPTkVOVFMsXG4gICAgICAgICAgICBpbnB1dFR5cGU6IElOVCxcbiAgICAgICAgICAgIGRlZmF1bHRWYWx1ZTogY29tcG9uZW50cyxcbiAgICAgICAgICAgIC8vQHRzLWlnbm9yZVxuICAgICAgICAgICAgc2hvd1BsdXNNaW51czogdHJ1ZSxcbiAgICAgICAgICAgIG1pbjogQ09NUE9ORU5UUy5NSU4sXG4gICAgICAgIH0pKTtcbiAgICAgICAgY29tcG9uZW50c0lucHV0Lm9uSW5wdXQoKCkgPT4gdXBkYXRlSXB1dHMoKSk7XG4gICAgICAgIGNvbXBvbmVudHNJbnB1dC5zZXRUb29sdGlwKEhJTlQuQ09NUE9ORU5UUyk7XG4gICAgICAgIGxldCBkbGdUaXRsZTtcbiAgICAgICAgbGV0IGRsZ0hlbHBVcmw7XG4gICAgICAgIGxldCBkbGdSdW5CdG5Ub29sdGlwO1xuICAgICAgICBpZiAoYW5hbHlzaXNUeXBlID09PSBQTFNfQU5BTFlTSVMuQ09NUFVURV9DT01QT05FTlRTKSB7XG4gICAgICAgICAgICBkbGdUaXRsZSA9IFRJVExFLlBMUztcbiAgICAgICAgICAgIGRsZ0hlbHBVcmwgPSBMSU5LLlBMUztcbiAgICAgICAgICAgIGRsZ1J1bkJ0blRvb2x0aXAgPSBISU5ULlBMUztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGRsZ1RpdGxlID0gVElUTEUuTVZBO1xuICAgICAgICAgICAgZGxnSGVscFVybCA9IExJTksuTVZBO1xuICAgICAgICAgICAgZGxnUnVuQnRuVG9vbHRpcCA9IEhJTlQuTVZBO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHVwZGF0ZUlwdXRzID0gKCkgPT4ge1xuICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgZmVhdHVyZXNJbnB1dC52YWx1ZSA9IGZlYXR1cmVzSW5wdXQudmFsdWUuZmlsdGVyKChjb2wpID0+IGNvbCAhPT0gcHJlZGljdCk7XG4gICAgICAgICAgICBmZWF0dXJlcyA9IGZlYXR1cmVzSW5wdXQudmFsdWU7XG4gICAgICAgICAgICBjb21wb25lbnRzSW5wdXQudmFsdWUgPSBtaW4obWF4KChfYSA9IGNvbXBvbmVudHNJbnB1dC52YWx1ZSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogY29tcG9uZW50cywgQ09NUE9ORU5UUy5NSU4pLCBmZWF0dXJlcy5sZW5ndGgpO1xuICAgICAgICAgICAgY29tcG9uZW50cyA9IGNvbXBvbmVudHNJbnB1dC52YWx1ZTtcbiAgICAgICAgICAgIGRsZy5nZXRCdXR0b24oVElUTEUuUlVOKS5kaXNhYmxlZCA9IChmZWF0dXJlcy5sZW5ndGggPT09IDApIHx8IChjb21wb25lbnRzIDw9IDApO1xuICAgICAgICB9O1xuICAgICAgICAvLyBuYW1lcyBvZiBzYW1wbGVzXG4gICAgICAgIGxldCBuYW1lcyA9IChzdHJDb2xzLmxlbmd0aCA+IDApID8gc3RyQ29sc1swXSA6IG51bGw7XG4gICAgICAgIGNvbnN0IG5hbWVzSW5wdXRzID0gdWkuY29sdW1uSW5wdXQoVElUTEUuTkFNRVMsIHRhYmxlLCBuYW1lcywgKCkgPT4gbmFtZXMgPSBwcmVkaWN0SW5wdXQudmFsdWUsIHsgZmlsdGVyOiAoY29sKSA9PiBjb2wudHlwZSA9PT0gREcuQ09MVU1OX1RZUEUuU1RSSU5HIH0pO1xuICAgICAgICBuYW1lc0lucHV0cy5zZXRUb29sdGlwKEhJTlQuTkFNRVMpO1xuICAgICAgICBuYW1lc0lucHV0cy5yb290LmhpZGRlbiA9IChzdHJDb2xzLmxlbmd0aCA9PT0gMCkgfHwgKGFuYWx5c2lzVHlwZSA9PT0gUExTX0FOQUxZU0lTLkNPTVBVVEVfQ09NUE9ORU5UUyk7XG4gICAgICAgIGNvbnN0IGRsZyA9IHVpLmRpYWxvZyh7IHRpdGxlOiBkbGdUaXRsZSwgaGVscFVybDogZGxnSGVscFVybCB9KVxuICAgICAgICAgICAgLmFkZCh1aS5mb3JtKFtwcmVkaWN0SW5wdXQsIGZlYXR1cmVzSW5wdXQsIGNvbXBvbmVudHNJbnB1dCwgbmFtZXNJbnB1dHNdKSlcbiAgICAgICAgICAgIC5hZGRCdXR0b24oVElUTEUuUlVOLCAoKSA9PiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICBkbGcuY2xvc2UoKTtcbiAgICAgICAgICAgIHlpZWxkIHBlcmZvcm1NVkEoe1xuICAgICAgICAgICAgICAgIHRhYmxlOiB0YWJsZSxcbiAgICAgICAgICAgICAgICBmZWF0dXJlczogREcuRGF0YUZyYW1lLmZyb21Db2x1bW5zKGZlYXR1cmVzKS5jb2x1bW5zLFxuICAgICAgICAgICAgICAgIHByZWRpY3Q6IHByZWRpY3QsXG4gICAgICAgICAgICAgICAgY29tcG9uZW50czogY29tcG9uZW50cyxcbiAgICAgICAgICAgICAgICBuYW1lczogbmFtZXMsXG4gICAgICAgICAgICB9LCBhbmFseXNpc1R5cGUpO1xuICAgICAgICB9KSwgdW5kZWZpbmVkLCBkbGdSdW5CdG5Ub29sdGlwKVxuICAgICAgICAgICAgLnNob3coeyB4OiBYX0NPT1JELCB5OiBZX0NPT1JEIH0pO1xuICAgICAgICAvLyB0aGUgZm9sbG93aW5nIGRlbGF5IHByb3ZpZGVzIGNvcnJlY3Qgc3R5bGVzIChzZWUgaHR0cHM6Ly9yZWRkYXRhLmF0bGFzc2lhbi5uZXQvYnJvd3NlL0dST0stMTUxOTYpXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgZmVhdHVyZXNJbnB1dC52YWx1ZSA9IG51bUNvbHMuZmlsdGVyKChjb2wpID0+IGNvbCAhPT0gcHJlZGljdCk7XG4gICAgICAgICAgICBmZWF0dXJlcyA9IGZlYXR1cmVzSW5wdXQudmFsdWU7XG4gICAgICAgIH0sIFRJTUVPVVQpO1xuICAgICAgICBncm9rLnNoZWxsLnYuYXBwZW5kKGRsZy5yb290KTtcbiAgICB9KTtcbn0gLy8gcnVuTVZBXG4vKiogUnVuIG11bHRpdmFyaWF0ZSBhbmFseXNpcyBkZW1vICovXG5leHBvcnQgZnVuY3Rpb24gcnVuRGVtb01WQSgpIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBncm9rLnNoZWxsLmFkZFRhYmxlVmlldyhjYXJzRGF0YWZyYW1lKCkpO1xuICAgICAgICBncm9rLnNoZWxsLndpbmRvd3MuaGVscC52aXNpYmxlID0gdHJ1ZTtcbiAgICAgICAgZ3Jvay5zaGVsbC53aW5kb3dzLmhlbHAuc2hvd0hlbHAodWkubWFya2Rvd24oREVNT19JTlRST19NRCkpO1xuICAgICAgICBncm9rLnNoZWxsLndpbmRvd3Muc2hvd0NvbnRleHRQYW5lbCA9IGZhbHNlO1xuICAgICAgICBncm9rLnNoZWxsLndpbmRvd3Muc2hvd1Byb3BlcnRpZXMgPSBmYWxzZTtcbiAgICAgICAgeWllbGQgcnVuTVZBKFBMU19BTkFMWVNJUy5ERU1PKTtcbiAgICB9KTtcbn1cbiIsIi8vIFN0YXRpc3RpYyB0b29sc1xuaW1wb3J0ICogYXMgREcgZnJvbSAnZGF0YWdyb2stYXBpL2RnJztcbi8vQHRzLWlnbm9yZTogbm8gdHlwZXNcbmltcG9ydCAqIGFzIGpTdGF0IGZyb20gJ2pzdGF0JztcbnZhciBFUlJPUl9NU0c7XG4oZnVuY3Rpb24gKEVSUk9SX01TRykge1xuICAgIEVSUk9SX01TR1tcIk5PTl9FUVVBTF9GQUNUT1JTX1ZBTFVFU19TSVpFXCJdID0gXCJub24tZXF1YWwgc2l6ZXMgb2YgZmFjdG9yIGFuZCB2YWx1ZXMgYXJyYXlzLiBJTlBVVCBFUlJPUi5cIjtcbiAgICBFUlJPUl9NU0dbXCJJTkNPUlJFQ1RfU0lHTklGSUNBTkNFX0xFVkVMXCJdID0gXCJpbmNvcnJlY3Qgc2lnbmlmaWNhbmNlIGxldmVsLiBJdCBtdXN0IGJlIGZyb20gdGhlIGludGVydmFsICgwLCAxKS4gSU5QVVQgRVJST1IuXCI7XG4gICAgRVJST1JfTVNHW1wiSU5DT1JSRUNUX1NBTVBMRV9TSVpFXCJdID0gXCJpbmNvcnJlY3Qgc2l6ZSBvZiBzYW1wbGUuIERBVEEgRkFDVE9SSVpBSU5HIEVSUk9SLlwiO1xuICAgIEVSUk9SX01TR1tcIk5PTl9FUVVBTF9WQVJJQU5DRVNcIl0gPSBcInZhcmlhbmNlcyBhcmUgbm90IGVxdWFsLlwiO1xuICAgIEVSUk9SX01TR1tcIk5PTl9OT1JNQUxfRElTVFJJQlwiXSA9IFwibm9uLW5vcm1hbCBkaXN0cmlidXRpb24uXCI7XG4gICAgRVJST1JfTVNHW1wiVU5TVVBQT1JURURfQ09MVU1OX1RZUEVcIl0gPSBcInVuc3VwcG9ydGVkIGNvbHVtbiB0eXBlLlwiO1xuICAgIEVSUk9SX01TR1tcIklOQ09SUkVDVF9DQVRFR09SSUVTX0NPTF9UWVBFXCJdID0gXCJpbmNvcnJlY3QgY2F0ZWdvcmllcyBjb2x1bW4gdHlwZS5cIjtcbiAgICBFUlJPUl9NU0dbXCJBTk9WQV9GQUlMRURfSlVTVF9PTkVfQ0FUXCJdID0gXCJBTk9WQSBmaWxlZDogdGhlcmUgc2hvdWxkIGJlIGF0IGxlYXN0IDIgY2F0ZWdvcmllcy5cIjtcbn0pKEVSUk9SX01TRyB8fCAoRVJST1JfTVNHID0ge30pKTtcbjtcbi8qKiBDcmVhdGUgZGF0YWZyYW1lIHdpdGggb25lLXdheSBBTk9WQSByZXN1bHRzLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldE9uZVdheUFub3ZhREYoYW5vdmEsIGFscGhhLCBmQ3JpdGljYWwsIGh5cG90aGVzaXMsIHRlc3RSZXN1bHQpIHtcbiAgICByZXR1cm4gREcuRGF0YUZyYW1lLmZyb21Db2x1bW5zKFtcbiAgICAgICAgREcuQ29sdW1uLmZyb21TdHJpbmdzKCdTb3VyY2Ugb2YgdmFyaWFuY2UnLCBbJ0JldHdlZW4gZ3JvdXBzJywgJ1dpdGhpbiBncm91cHMnLCAnVG90YWwnLCAnJywgaHlwb3RoZXNpcywgJycsIHRlc3RSZXN1bHRdKSxcbiAgICAgICAgREcuQ29sdW1uLmZyb21MaXN0KERHLkNPTFVNTl9UWVBFLkZMT0FULCAnU3VtIG9mIHNxdWFyZXMnLCBbYW5vdmEuc3NCbiwgYW5vdmEuc3NXbiwgYW5vdmEuc3NUb3QsIG51bGwsIG51bGwsIG51bGwsIG51bGxdKSxcbiAgICAgICAgREcuQ29sdW1uLmZyb21MaXN0KERHLkNPTFVNTl9UWVBFLklOVCwgJ0RlZ3JlZXMgb2YgZnJlZWRvbScsIFthbm92YS5kZkJuLCBhbm92YS5kZlduLCBhbm92YS5kZlRvdCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbF0pLFxuICAgICAgICBERy5Db2x1bW4uZnJvbUxpc3QoREcuQ09MVU1OX1RZUEUuRkxPQVQsICdNZWFuIHNxdWFyZScsIFthbm92YS5tc0JuLCBhbm92YS5tc1duLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCBudWxsXSksXG4gICAgICAgIERHLkNvbHVtbi5mcm9tTGlzdChERy5DT0xVTU5fVFlQRS5GTE9BVCwgJ0Ytc3RhdGlzdGljcycsIFthbm92YS5mU3RhdCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbF0pLFxuICAgICAgICBERy5Db2x1bW4uZnJvbUxpc3QoREcuQ09MVU1OX1RZUEUuRkxPQVQsICdwLXZhbHVlJywgW2Fub3ZhLnBWYWx1ZSwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbF0pLFxuICAgICAgICBERy5Db2x1bW4uZnJvbUxpc3QoREcuQ09MVU1OX1RZUEUuRkxPQVQsIGAke2FscGhhfS1jcml0aWNhbCB2YWx1ZWAsIFtmQ3JpdGljYWwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGxdKSxcbiAgICBdKTtcbn0gLy8gZ2V0T25lV2F5QW5vdmFERlxuLyoqIENoZWNrIGNvcnJlY3RuZXNzIG9mIHNpZ25pZmljYW5jZSBsZXZlbC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjaGVja1NpZ25pZmljYW5jZUxldmVsKGFscGhhKSB7XG4gICAgaWYgKChhbHBoYSA8PSAwKSB8fCAoYWxwaGEgPj0gMSkpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihFUlJPUl9NU0cuSU5DT1JSRUNUX1NJR05JRklDQU5DRV9MRVZFTCk7XG59XG4vKiogQ29tcHV0ZSB1bmJpYXNlZCB2YXJpYW5jZS4qL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFZhcmlhbmNlKGRhdGEpIHtcbiAgICAvLyBUaGUgYXBwbGllZCBmb3JtdWxhcyBjYW4gYmUgZm91bmQgaW4gWzRdIChzZWUgcC4gNjMpXG4gICAgY29uc3Qgc2l6ZSA9IGRhdGEuc2l6ZTtcbiAgICBpZiAoc2l6ZSA8PSAwKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoRVJST1JfTVNHLklOQ09SUkVDVF9TQU1QTEVfU0laRSk7XG4gICAgaWYgKHNpemUgPT09IDEpXG4gICAgICAgIHJldHVybiAwO1xuICAgIHJldHVybiAoZGF0YS5zdW1PZlNxdWFyZXMgLSBNYXRoLnBvdygoZGF0YS5zdW0pLCAyKSAvIHNpemUpIC8gKHNpemUgLSAxKTtcbn0gLy8gZ2V0VmFyaWFuY2Vcbi8qKiBDaGVjayBlcXVhbGl0eSBvZiB2YXJpYW5jZXMgb2YgMiBzYW1wbGVzLiBGLXRlc3QgaXMgcGVyZm9ybWVkLiovXG5mdW5jdGlvbiBhcmVWYXJzRXF1YWwoeERhdGEsIHlEYXRhLCBhbHBoYSA9IDAuMDUpIHtcbiAgICAvLyBUaGUgYXBwbGllZCBhcHByb2FjaCBjYW4gYmUgZm91bmQgaW4gWzNdXG4gICAgY2hlY2tTaWduaWZpY2FuY2VMZXZlbChhbHBoYSk7XG4gICAgY29uc3QgeFZhciA9IGdldFZhcmlhbmNlKHhEYXRhKTtcbiAgICBjb25zdCB5VmFyID0gZ2V0VmFyaWFuY2UoeURhdGEpO1xuICAgIGlmICh5VmFyID09PSAwKVxuICAgICAgICByZXR1cm4gKHhWYXIgPT09IHlWYXIpO1xuICAgIGNvbnN0IGZTdGF0ID0geFZhciAvIHlWYXI7XG4gICAgY29uc3QgZkNyaXQgPSBqU3RhdC5jZW50cmFsRi5pbnYoMSAtIGFscGhhLCB4RGF0YS5zaXplIC0gMSwgeURhdGEuc2l6ZSAtIDEpO1xuICAgIHJldHVybiAoZlN0YXQgPCBmQ3JpdCk7XG59IC8vIGFyZVZhcnNFcXVhbFxuZXhwb3J0IGNsYXNzIEZhY3Rvcml6ZWREYXRhIHtcbiAgICBjb25zdHJ1Y3RvcihjYXRlZ29yaWVzLCB2YWx1ZXMsIGNoZWNrTm9ybWFsaXR5ID0gZmFsc2UsIGFscGhhID0gMC4wNSkge1xuICAgICAgICB0aGlzLmlzTm9ybURpc3RyaWIgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMuY2F0ZWdvcmllcyA9IFtdO1xuICAgICAgICBpZiAoY2F0ZWdvcmllcy50eXBlICE9PSBERy5DT0xVTU5fVFlQRS5TVFJJTkcpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoKTtcbiAgICAgICAgaWYgKGNhdGVnb3JpZXMubGVuZ3RoICE9PSB2YWx1ZXMubGVuZ3RoKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKEVSUk9SX01TRy5OT05fRVFVQUxfRkFDVE9SU19WQUxVRVNfU0laRSk7XG4gICAgICAgIHRoaXMuc2V0U3RhdHMoY2F0ZWdvcmllcywgdmFsdWVzLCBjaGVja05vcm1hbGl0eSwgYWxwaGEpO1xuICAgIH1cbiAgICBpc05vcm1hbCgpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIC8qKiBDaGVjayBlcXVhbGl0eSBvZiB2YXJpYW5jZXMgb2YgZmFjdG9yaXplZCBkYXRhLiAqL1xuICAgIGFyZVZhcnNFcXVhbChhbHBoYSA9IDAuMDUpIHtcbiAgICAgICAgY29uc3QgSyA9IHRoaXMuY2F0Q291bnQ7XG4gICAgICAgIGlmIChLID09PSAxKVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIGNvbnN0IGZpcnN0ID0geyBzdW06IHRoaXMuc3Vtc1swXSwgc3VtT2ZTcXVhcmVzOiB0aGlzLnN1bXNPZlNxdWFyZXNbMF0sIHNpemU6IHRoaXMuc3ViU2FtcGxlU2l6ZXNbMF0gfTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPCBLOyArK2kpIHtcbiAgICAgICAgICAgIGlmICghYXJlVmFyc0VxdWFsKGZpcnN0LCB7IHN1bTogdGhpcy5zdW1zW2ldLCBzdW1PZlNxdWFyZXM6IHRoaXMuc3Vtc09mU3F1YXJlc1tpXSxcbiAgICAgICAgICAgICAgICBzaXplOiB0aGlzLnN1YlNhbXBsZVNpemVzW2ldIH0sIGFscGhhKSlcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSAvLyBhcmVWYXJzRXF1YWxcbiAgICAvKiogUGVyZm9ybSBvbmUtd2F5IEFOT1ZBIGNvbXB1dGF0aW9ucy4gKi9cbiAgICBnZXRPbmVXYXlBbm92YSgpIHtcbiAgICAgICAgLy8gRnVydGhlciwgbm90YXRpb25zIGFuZCBmb3JtdWxhcyBmcm9tIChzZWUgWzJdLCBwLiAyOTApIGFyZSB1c2VkLlxuICAgICAgICBjb25zdCBLID0gdGhpcy5jYXRDb3VudDtcbiAgICAgICAgaWYgKEsgPT09IDEpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoRVJST1JfTVNHLkFOT1ZBX0ZBSUxFRF9KVVNUX09ORV9DQVQpO1xuICAgICAgICBsZXQgc3VtID0gMDtcbiAgICAgICAgbGV0IHN1bU9mU3F1YXJlcyA9IDA7XG4gICAgICAgIGNvbnN0IE4gPSB0aGlzLnNpemU7XG4gICAgICAgIGxldCBidWYgPSAwO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IEs7ICsraSkge1xuICAgICAgICAgICAgc3VtICs9IHRoaXMuc3Vtc1tpXTtcbiAgICAgICAgICAgIHN1bU9mU3F1YXJlcyArPSB0aGlzLnN1bXNPZlNxdWFyZXNbaV07XG4gICAgICAgICAgICBidWYgKz0gTWF0aC5wb3codGhpcy5zdW1zW2ldLCAyKSAvIHRoaXMuc3ViU2FtcGxlU2l6ZXNbaV07XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc3NUb3QgPSBzdW1PZlNxdWFyZXMgLSBNYXRoLnBvdyhzdW0sIDIpIC8gTjtcbiAgICAgICAgY29uc3Qgc3NCbiA9IGJ1ZiAtIE1hdGgucG93KHN1bSwgMikgLyBOO1xuICAgICAgICBjb25zdCBzc1duID0gc3NUb3QgLSBzc0JuO1xuICAgICAgICBjb25zdCBkZkJuID0gSyAtIDE7XG4gICAgICAgIGNvbnN0IGRmV24gPSBOIC0gSztcbiAgICAgICAgY29uc3QgZGZUb3QgPSBOIC0gMTtcbiAgICAgICAgY29uc3QgbXNCbiA9IHNzQm4gLyBkZkJuO1xuICAgICAgICBjb25zdCBtc1duID0gc3NXbiAvIGRmV247XG4gICAgICAgIGNvbnN0IGZTdGF0ID0gbXNCbiAvIG1zV247XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBzc0JuOiBzc0JuLFxuICAgICAgICAgICAgc3NXbjogc3NXbixcbiAgICAgICAgICAgIHNzVG90OiBzc1RvdCxcbiAgICAgICAgICAgIGRmQm46IGRmQm4sXG4gICAgICAgICAgICBkZlduOiBkZlduLFxuICAgICAgICAgICAgZGZUb3Q6IGRmVG90LFxuICAgICAgICAgICAgbXNCbjogbXNCbixcbiAgICAgICAgICAgIG1zV246IG1zV24sXG4gICAgICAgICAgICBmU3RhdDogZlN0YXQsXG4gICAgICAgICAgICBwVmFsdWU6IDEgLSBqU3RhdC5jZW50cmFsRi5jZGYoZlN0YXQsIGRmQm4sIGRmV24pLFxuICAgICAgICB9O1xuICAgIH0gLy8gZ2V0T25lV2F5QW5vdmFcbiAgICAvKiogQ29tcHV0ZSBzdW0gJiBzdW1zIG9mIHNxdWFyZXMgd2l0aCByZXNwZWN0IHRvIGZhY3RvciBsZXZlbHMuICovXG4gICAgc2V0U3RhdHMoY2F0ZWdvcmllcywgdmFsdWVzLCBfY2hlY2tOb3JtYWxpdHkgPSBmYWxzZSwgX2FscGhhID0gMC4wNSkge1xuICAgICAgICAvLyBUT0RPOiBwcm92aWRlIGNoZWNrIG5vcm1hbGl0eSBmZWF0dXJlXG4gICAgICAgIGNvbnN0IHR5cGUgPSB2YWx1ZXMudHlwZTtcbiAgICAgICAgY29uc3Qgc2l6ZSA9IHZhbHVlcy5sZW5ndGg7XG4gICAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICAgICAgY2FzZSBERy5DT0xVTU5fVFlQRS5JTlQ6XG4gICAgICAgICAgICBjYXNlIERHLkNPTFVNTl9UWVBFLkZMT0FUOlxuICAgICAgICAgICAgICAgIHRoaXMuY2F0ZWdvcmllcyA9IGNhdGVnb3JpZXMuY2F0ZWdvcmllcztcbiAgICAgICAgICAgICAgICBjb25zdCBjYXRDb3VudCA9IHRoaXMuY2F0ZWdvcmllcy5sZW5ndGg7XG4gICAgICAgICAgICAgICAgdGhpcy5jYXRDb3VudCA9IGNhdENvdW50O1xuICAgICAgICAgICAgICAgIHRoaXMuc2l6ZSA9IHNpemU7XG4gICAgICAgICAgICAgICAgY29uc3QgdmFscyA9IHZhbHVlcy5nZXRSYXdEYXRhKCk7XG4gICAgICAgICAgICAgICAgY29uc3QgY2F0cyA9IGNhdGVnb3JpZXMuZ2V0UmF3RGF0YSgpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHN1bXMgPSBuZXcgRmxvYXQ2NEFycmF5KGNhdENvdW50KS5maWxsKDApO1xuICAgICAgICAgICAgICAgIGNvbnN0IHN1bXNPZlNxdWFyZXMgPSBuZXcgRmxvYXQ2NEFycmF5KGNhdENvdW50KS5maWxsKDApO1xuICAgICAgICAgICAgICAgIGNvbnN0IHN1YlNhbXBsZVNpemVzID0gbmV3IEludDMyQXJyYXkoY2F0Q291bnQpLmZpbGwoMCk7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzaXplOyArK2kpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYyA9IGNhdHNbaV07XG4gICAgICAgICAgICAgICAgICAgIHN1bXNbY10gKz0gdmFsc1tpXTtcbiAgICAgICAgICAgICAgICAgICAgc3Vtc09mU3F1YXJlc1tjXSArPSBNYXRoLnBvdyh2YWxzW2ldLCAyKTtcbiAgICAgICAgICAgICAgICAgICAgKytzdWJTYW1wbGVTaXplc1tjXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5zdW1zID0gc3VtcztcbiAgICAgICAgICAgICAgICB0aGlzLnN1bXNPZlNxdWFyZXMgPSBzdW1zT2ZTcXVhcmVzO1xuICAgICAgICAgICAgICAgIHRoaXMuc3ViU2FtcGxlU2l6ZXMgPSBzdWJTYW1wbGVTaXplcztcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKEVSUk9SX01TRy5VTlNVUFBPUlRFRF9DT0xVTU5fVFlQRSk7XG4gICAgICAgIH1cbiAgICB9IC8vIHNldFN0YXRzXG59IC8vIEZhY3Rvcml6ZWREYXRhXG4vKiogUGVyZm9ybSBvbmUtd2F5IGFuYWx5c2lzIG9mIHZhcmlhbmNlcy4gKi9cbmV4cG9ydCBmdW5jdGlvbiBvbmVXYXlBbm92YShjYXRlZ29yZXMsIHZhbHVlcywgYWxwaGEgPSAwLjA1LCB2YWxpZGF0ZSA9IGZhbHNlKSB7XG4gICAgY2hlY2tTaWduaWZpY2FuY2VMZXZlbChhbHBoYSk7XG4gICAgY29uc3QgZmFjdG9yaXplZCA9IG5ldyBGYWN0b3JpemVkRGF0YShjYXRlZ29yZXMsIHZhbHVlcywgdmFsaWRhdGUsIGFscGhhKTtcbiAgICBpZiAodmFsaWRhdGUpIHtcbiAgICAgICAgaWYgKCFmYWN0b3JpemVkLmFyZVZhcnNFcXVhbChhbHBoYSkpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoRVJST1JfTVNHLk5PTl9FUVVBTF9WQVJJQU5DRVMpO1xuICAgICAgICBpZiAoIWZhY3Rvcml6ZWQuaXNOb3JtYWwoKSlcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihFUlJPUl9NU0cuTk9OX05PUk1BTF9ESVNUUklCKTtcbiAgICB9XG4gICAgY29uc3QgYW5vdmEgPSBmYWN0b3JpemVkLmdldE9uZVdheUFub3ZhKCk7XG4gICAgY29uc3QgZkNyaXQgPSBqU3RhdC5jZW50cmFsRi5pbnYoMSAtIGFscGhhLCBhbm92YS5kZkJuLCBhbm92YS5kZlduKTtcbiAgICBjb25zdCBoeXBvdGhlc2lzID0gYFRIRSBOVUxMIEhZUE9USEVTSVM6IHRoZSBcIiR7Y2F0ZWdvcmVzLm5hbWV9XCIgXG4gICAgZmFjdG9yIGRvZXMgbm90IHByb2R1Y2UgYSBzaWduaWZpY2FudCBkaWZmZXJlbmNlIGluIHRoZSBcIiR7dmFsdWVzLm5hbWV9XCIgZmVhdHVyZS5gO1xuICAgIGNvbnN0IHRlc3RSZXN1bHQgPSBgVGVzdCByZXN1bHQ6ICR7KGFub3ZhLmZTdGF0ID4gZkNyaXQpID8gJ1JFSkVDVEVELicgOiAnRkFJTEVEIFRPIFJFSkVDVC4nfWA7XG4gICAgcmV0dXJuIGdldE9uZVdheUFub3ZhREYoYW5vdmEsIGFscGhhLCBmQ3JpdCwgaHlwb3RoZXNpcywgdGVzdFJlc3VsdCk7XG59IC8vIG9uZVdheUFub3ZhXG4iLCJ2YXIgX19hd2FpdGVyID0gKHRoaXMgJiYgdGhpcy5fX2F3YWl0ZXIpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcbiAgICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xuICAgIH0pO1xufTtcbi8qKiBDYWxjdWxhdGVzIENsdXN0ZXJzIGJhc2VkIG9uIGRic2NhbiBhbGdvcml0aG0gaW4gd2FzbS5cbiAqIEBwYXJhbSBlbWJlZFggLSBlbWJlZGRpbmdzIHggbG9jYXRpb24uXG4gKiBAcGFyYW0gZW1iZWRZIC0gZW1iZWRkaW5ncyB5IGxvY2F0aW9uLlxuICogQHBhcmFtIG1pblB0cyAtIG1pbmltdW0gbnVtYmVyIG9mIHBvaW50cyBpbiBhIGNsdXN0ZXIuXG4gKiBAcGFyYW0gZXBzaWxvbiAtIGVwc2lsb24uXG4gKiBAcmV0dXJucyBhcnJheSB3aXRoIGNsdXN0ZXIgaW5kZXhlcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldERic2NhbldvcmtlcihlbWJlZFgsIGVtYmVkWSwgZXBzaWxvbiwgbWluUHRzKSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgICAgIGNvbnN0IHdvcmtlciA9IG5ldyBXb3JrZXIobmV3IFVSTCgnLi9jbHVzdGVyaW5nLXdvcmtlcicsIGltcG9ydC5tZXRhLnVybCkpO1xuICAgICAgICAgICAgd29ya2VyLnBvc3RNZXNzYWdlKHsgZW1iZWRYLCBlbWJlZFksIG1pblB0cywgZXBzaWxvbiB9KTtcbiAgICAgICAgICAgIHdvcmtlci5vbm1lc3NhZ2UgPSAoeyBkYXRhOiB7IGVycm9yLCBjbHVzdGVycyB9IH0pID0+IHtcbiAgICAgICAgICAgICAgICB3b3JrZXIudGVybWluYXRlKCk7XG4gICAgICAgICAgICAgICAgZXJyb3IgPyByZWplY3QoZXJyb3IpIDogcmVzb2x2ZShjbHVzdGVycyk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9KTtcbiAgICB9KTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRic2Nhbi13b3JrZXItY3JlYXRvci5qcy5tYXAiLCJ2YXIgX19hd2FpdGVyID0gKHRoaXMgJiYgdGhpcy5fX2F3YWl0ZXIpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcbiAgICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xuICAgIH0pO1xufTtcbmxldCBncHVBZGFwdGVyID0gbnVsbDtcbmxldCBncHVEZXZpY2UgPSBudWxsO1xuZXhwb3J0IGZ1bmN0aW9uIGdldEdQVURldmljZSgpIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBpZiAoIWdwdUFkYXB0ZXIpIHtcbiAgICAgICAgICAgIC8vcmVhc29uOiBvbmx5IGhlcmUgd2UgZ2V0IHRoZSBncHVBZGFwdGVyXG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcmVzdHJpY3RlZC1zeW50YXhcbiAgICAgICAgICAgIGdwdUFkYXB0ZXIgPSB5aWVsZCBuYXZpZ2F0b3IuZ3B1LnJlcXVlc3RBZGFwdGVyKHsgcG93ZXJQcmVmZXJlbmNlOiAnaGlnaC1wZXJmb3JtYW5jZScgfSk7XG4gICAgICAgICAgICBpZiAoZ3B1QWRhcHRlciA9PSBudWxsKVxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGxldCBpc0xvc3QgPSBmYWxzZTtcbiAgICAgICAgaWYgKGdwdURldmljZSkge1xuICAgICAgICAgICAgZ3B1RGV2aWNlLmxvc3QudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgaXNMb3N0ID0gdHJ1ZTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgeWllbGQgbmV3IFByb21pc2UoKHIpID0+IHNldFRpbWVvdXQociwgMTApKTsgLy8gd2FpdCB0byBzZWUgaWYgdGhlIGRldmljZSBpcyBsb3N0XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFncHVEZXZpY2UgfHwgaXNMb3N0KSB7XG4gICAgICAgICAgICBjb25zdCByZXF1aXJlZEJ1ZmZlclNpemUgPSAxMDAwMDAwMDAwOyAvLyB+MTAwME1CXG4gICAgICAgICAgICBjb25zdCBhZGFwdGVyTGltaXRzID0gZ3B1QWRhcHRlci5saW1pdHM7XG4gICAgICAgICAgICBjb25zdCBidWZmZmVyU2l6ZUxpbWl0ID0gYWRhcHRlckxpbWl0cy5tYXhCdWZmZXJTaXplO1xuICAgICAgICAgICAgY29uc3Qgc3RvcmFnZUJ1ZmZlclNpemVMaW1pdCA9IGFkYXB0ZXJMaW1pdHMubWF4U3RvcmFnZUJ1ZmZlckJpbmRpbmdTaXplO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBncHVEZXZpY2UgPSB5aWVsZCBncHVBZGFwdGVyLnJlcXVlc3REZXZpY2UoeyByZXF1aXJlZExpbWl0czoge1xuICAgICAgICAgICAgICAgICAgICAgICAgbWF4QnVmZmVyU2l6ZTogTWF0aC5taW4oYnVmZmZlclNpemVMaW1pdCwgcmVxdWlyZWRCdWZmZXJTaXplKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1heFN0b3JhZ2VCdWZmZXJCaW5kaW5nU2l6ZTogTWF0aC5taW4oc3RvcmFnZUJ1ZmZlclNpemVMaW1pdCwgcmVxdWlyZWRCdWZmZXJTaXplKVxuICAgICAgICAgICAgICAgICAgICB9IH0pO1xuICAgICAgICAgICAgICAgIHJldHVybiBncHVEZXZpY2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZhaWxlZCB0byBjcmVhdGUgZGV2aWNlIHdpdGggcmVxdWlyZWQgbGltaXRzJywgZSk7XG4gICAgICAgICAgICAgICAgZ3B1RGV2aWNlID0geWllbGQgZ3B1QWRhcHRlci5yZXF1ZXN0RGV2aWNlKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGdwdURldmljZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZ3B1RGV2aWNlO1xuICAgIH0pO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGdldEdQVUFkYXB0ZXJEZXNjcmlwdGlvbigpIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBpZiAoIWdwdUFkYXB0ZXIpIHtcbiAgICAgICAgICAgIC8vIHJlYXNvbjogb25seSBoZXJlIHdlIGdldCB0aGUgZ3B1QWRhcHRlclxuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXJlc3RyaWN0ZWQtc3ludGF4XG4gICAgICAgICAgICBncHVBZGFwdGVyID0geWllbGQgbmF2aWdhdG9yLmdwdS5yZXF1ZXN0QWRhcHRlcigpO1xuICAgICAgICAgICAgaWYgKGdwdUFkYXB0ZXIgPT0gbnVsbClcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpbmZvID0geWllbGQgZ3B1QWRhcHRlci5yZXF1ZXN0QWRhcHRlckluZm8oKTtcbiAgICAgICAgcmV0dXJuIGluZm8uZGVzY3JpcHRpb247XG4gICAgfSk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1nZXRHUFVEZXZpY2UuanMubWFwIiwiZnVuY3Rpb24gZXVjbGlkZWFuQWdncmVnYXRpb25XZ3NsKGFycmF5U2l6ZSkge1xuICAgIHJldHVybiBgXG4gICAgICAgIHZhciBzdW0gPSAwLjA7XG4gICAgICAgIGZvciAodmFyIGkgPSAwdTsgaSA8ICR7YXJyYXlTaXplfTsgaSA9IGkgKyAxdSkge1xuICAgICAgICAgICAgc3VtID0gc3VtICsgZGlzdGFuY2VzW2ldICogZGlzdGFuY2VzW2ldICogY29tcHV0ZUluZm8ud2VpZ2h0c1tpXSAqIGNvbXB1dGVJbmZvLndlaWdodHNbaV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHNxcnQoc3VtKTtcbiAgICBgO1xufVxuO1xuZnVuY3Rpb24gbWFuaGF0dGFuQWdncmVnYXRpb25XZ3NsKGFycmF5U2l6ZSkge1xuICAgIHJldHVybiBgXG4gICAgICAgIHZhciBzdW0gPSAwLjA7XG4gICAgICAgIGZvciAodmFyIGkgPSAwdTsgaSA8ICR7YXJyYXlTaXplfTsgaSA9IGkgKyAxdSkge1xuICAgICAgICAgICAgc3VtID0gc3VtICsgYWJzKGRpc3RhbmNlc1tpXSkgKiBjb21wdXRlSW5mby53ZWlnaHRzW2ldO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzdW07XG4gICAgYDtcbn1cbmV4cG9ydCB2YXIgV0VCR1NMQUdHUkVHQVRJT047XG4oZnVuY3Rpb24gKFdFQkdTTEFHR1JFR0FUSU9OKSB7XG4gICAgV0VCR1NMQUdHUkVHQVRJT05bXCJFVUNMSURFQU5cIl0gPSBcIkVVQ0xJREVBTlwiO1xuICAgIFdFQkdTTEFHR1JFR0FUSU9OW1wiTUFOSEFUVEFOXCJdID0gXCJNQU5IQVRUQU5cIjtcbn0pKFdFQkdTTEFHR1JFR0FUSU9OIHx8IChXRUJHU0xBR0dSRUdBVElPTiA9IHt9KSk7XG5leHBvcnQgY29uc3QgV0VCR1NMQUdHUkVHQVRJT05GVU5DVElPTlMgPSB7XG4gICAgW1dFQkdTTEFHR1JFR0FUSU9OLkVVQ0xJREVBTl06IGV1Y2xpZGVhbkFnZ3JlZ2F0aW9uV2dzbCxcbiAgICBbV0VCR1NMQUdHUkVHQVRJT04uTUFOSEFUVEFOXTogbWFuaGF0dGFuQWdncmVnYXRpb25XZ3NsXG59O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9d2ViR1BVLWFnZ3JlZ2F0aW9uLmpzLm1hcCIsIi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4gKi9cbi8vIGluIGFsbCB0aGUgZnVuY3Rpb25zIGJlbG93LCB0aGUgdmFyaWFibGVzIGEgYW5kIGIgYXJlIGFzc3VtZWQgdG8gYmUgYXJyYXlzIG9mIHVpbnQzMi9mMzJcbi8vdmFsdWVzIHdoaWNoIGFyZSBpbmZlcmVkIGZyb20gdGhlIGNvZGUgdGhpcyBjaHVuayBpcyBpbmplY3RlZCBpbnRvXG4vLyBhbHNvLCB3ZSBoYXZlIGFjY2VzcyB0byBjb21wdXRlSW5mbyBzdHJ1Y3QsIHdoaWNoIGNvbnRhaW5zIHRoZSBmb2xsb3dpbmcgZmllbGRzOlxuLy8gY29tcHV0ZUluZm8uZW50cnlTaXplczogYXJyYXkgb2YgYXJyYXlzIG9mIHUzMiBjb250YWluaW5nIHRoZSBzaXplcyBvZiB0aGUgZW50cmllc1xuLy8gb3RoZXIgZmllbGRzIGFyZSBzcGVjaWZpYyB0byB0aGUgZGlzdGFuY2UgZnVuY3Rpb24gc2hvdWxkIGJlIGluamVjdGVkIGZyb20gdGhlIG1haW4gc2NyaXB0IHRoYXQgY2FsbHMgdGhpcyBmdW5jdGlvbixcbi8vIGFuZCBzaG91bGQgYmUgYXZhaWxhYmxlIGluIHRoZSBzdXBwbGVtZW50YXJ5SW5mbyBzdHJ1Y3Rcbi8vIGxpa2UgdGhlIHNpbWlsYXJpdHkgbWF0cml4IGZvciBtb25vbWVyIGNoZW1pY2FsIGRpc3RhbmNlLlxuLy8gdGhlIGdldFByb2Nlc3NJbmZvIGZ1bmN0aW9uIHNob3VsZCByZXR1cm4gY29ycmVjdCBidWZmZXIgYWxsb2NhdGlvbiBtZWNoYW5pc20gZm9yIHRoZSBzdXBwbGVtZW50YXJ5SW5mbyxcbi8vIGZvciBldmVyeSBlbnRyeSBsaXN0XG4vLyB0aGUgbWF4RGlzdGFuY2UgdmFyaWFibGUgaXMgYWxzbyBhc3N1bWVkIHRvIGJlIGF2YWlsYWJsZSBpbiB0aGVcbi8vIHNjb3BlIG9mIHRoZSBmdW5jdGlvbiwgaW4gY2FzZSBvZiBrbm4gaXQgaXMgdGhlIGRpc3RhbmNlIGluIHRoZSBsYXN0IHBvc3Rpb24gb2Yga25uIG9uIHRoaXMgaW5kZXgsXG4vLyBpbiBjYXNlIG9mIHNwYXJzZSBtYXRyaXgsIGl0IGNhbiBiZSBqdXN0IHRoZSB0aHJlc2hvbGQgZm9yIHRoZSBkaXN0YW5jZS5cbi8vIGhhbW1pbmcgZGlzdGFuY2UgZm9yIHNlcXVuZW5jZXMgb2YgdWludDMyIGFycmF5cyBvZiBtYXggbGVuZ3RoICR7bWF4QXJyYXlTaXplfVxuZXhwb3J0IGZ1bmN0aW9uIHdlYkdQVUhhbW1pbmcoX21heEFycmF5U2l6ZSwgZW50cnlJbmRleCkge1xuICAgIHJldHVybiBgXG4gIGxldCBhTGVuZ3RoOiB1MzIgPSBjb21wdXRlSW5mby5lbnRyeVNpemVzWyR7ZW50cnlJbmRleH1dW2FJbmRleF07XG4gIGxldCBiTGVuZ3RoOiB1MzIgPSBjb21wdXRlSW5mby5lbnRyeVNpemVzWyR7ZW50cnlJbmRleH1dW2JJbmRleF07XG4gIGxldCBtYXhMZW5ndGg6IHUzMiA9IG1heChhTGVuZ3RoLCBiTGVuZ3RoKTtcbiAgbGV0IG1pbkxlbmd0aDogdTMyID0gbWluKGFMZW5ndGgsIGJMZW5ndGgpO1xuICBsZXQgc2l6ZURpZmY6IHUzMiA9IG1heExlbmd0aCAtIG1pbkxlbmd0aDtcbiAgXG4gIGxldCBtYXhJbnREaXN0YW5jZSA9IGNlaWwobWF4RGlzdGFuY2UgKiBmMzIobWF4TGVuZ3RoKSkgLSBmMzIoc2l6ZURpZmYpO1xuXG4gIHZhciBkaWZmOiBmMzIgPSAwLjA7XG4gIGZvciAodmFyIGkgPSAwdTsgaSA8ICR7X21heEFycmF5U2l6ZX07IGkgPSBpICsgMXUpIHtcbiAgICAgIGRpZmYgPSBkaWZmICsgZjMyKGFbaV0gIT0gYltpXSk7XG4gICAgICBpZiAoZGlmZiA+IG1heEludERpc3RhbmNlKSB7XG4gICAgICAgICAgICByZXR1cm4gMS4wO1xuICAgICAgICB9XG4gIH1cbiAgZGlmZiArPSBmMzIoc2l6ZURpZmYpO1xuICByZXR1cm4gZGlmZiAvICR7X21heEFycmF5U2l6ZX07XG4gIGA7XG59XG5leHBvcnQgZnVuY3Rpb24gd2ViR1BVTW9ub21lckNoZW1pY2FsRGlzdGFuY2UoX21heEFycmF5U2l6ZSwgZW50cnlJbmRleCkge1xuICAgIC8vIGl0IGlzIGFzc3VtZXQgdGhhdCBzdXBwSW5mbyBzdHJ1Y3QgY29udGFpbnMgY29ycmVjdCBtYXRyaXggY2FsbGVkIHNpbWlsYXJpdHlNYXRyaXgke2VudHJ5SW5kZXh9LCAoc2ltaWxhcml0eU1hdHJpeDAsIHNpbWlsYXJpdHlNYXRyaXgxLCBldGMpXG4gICAgLy8gdGhpcyBzaG91bGQgYmUgZ3VhcmFudGVlZCBieSB0aGUgZ2V0UHJvY2Vzc0luZm8gZnVuY3Rpb24uXG4gICAgcmV0dXJuIGBcbiAgbGV0IGFMZW5ndGg6IHUzMiA9IGNvbXB1dGVJbmZvLmVudHJ5U2l6ZXNbJHtlbnRyeUluZGV4fV1bYUluZGV4XTtcbiAgbGV0IGJMZW5ndGg6IHUzMiA9IGNvbXB1dGVJbmZvLmVudHJ5U2l6ZXNbJHtlbnRyeUluZGV4fV1bYkluZGV4XTtcbiAgbGV0IG1heExlbmd0aDogdTMyID0gbWF4KGFMZW5ndGgsIGJMZW5ndGgpO1xuICBsZXQgbWluTGVuZ3RoOiB1MzIgPSBtaW4oYUxlbmd0aCwgYkxlbmd0aCk7XG4gIGxldCBzaXplRGlmZjogdTMyID0gbWF4TGVuZ3RoIC0gbWluTGVuZ3RoO1xuICBcbiAgbGV0IG1heEludERpc3RhbmNlID0gY2VpbChtYXhEaXN0YW5jZSAqIGYzMihtYXhMZW5ndGgpKSAtIGYzMihzaXplRGlmZik7XG5cbiAgbGV0IHNpbU1hdHJpeCA9ICYoc3VwcEluZm8uc2ltaWxhcml0eU1hdHJpeCR7ZW50cnlJbmRleH0pOyAvLyB1c2luZyBwb2ludGVycyBtYWtlIHRoaW5ncyBmYXN0ZXJcbiAgdmFyIGRpZmY6IGYzMiA9IDAuMDtcbiAgZm9yICh2YXIgaSA9IDB1OyBpIDwgJHtfbWF4QXJyYXlTaXplfTsgaSA9IGkgKyAxdSkge1xuICAgICAgZGlmZiA9IGRpZmYgKyAxLjAgLSAoKnNpbU1hdHJpeClbdTMyKGFbaV0pXVt1MzIoYltpXSldO1xuICAgICAgaWYgKGRpZmYgPiBtYXhJbnREaXN0YW5jZSkge1xuICAgICAgICAgICAgcmV0dXJuIDEuMDtcbiAgICAgICAgfVxuICB9XG4gIGRpZmYgKz0gZjMyKHNpemVEaWZmKTtcbiAgcmV0dXJuIGRpZmYgLyAke19tYXhBcnJheVNpemV9O1xuICBgO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHdlYkdQVUxldmVuc3RlaW4obWF4QXJyYXlTaXplLCBlbnRyeUluZGV4KSB7XG4gICAgcmV0dXJuIGBcbiAgbGV0IGFMZW5ndGg6IHUzMiA9IGNvbXB1dGVJbmZvLmVudHJ5U2l6ZXNbJHtlbnRyeUluZGV4fV1bYUluZGV4XTtcbiAgbGV0IGJMZW5ndGg6IHUzMiA9IGNvbXB1dGVJbmZvLmVudHJ5U2l6ZXNbJHtlbnRyeUluZGV4fV1bYkluZGV4XTtcbiAgbGV0IG1heExlbmd0aDogdTMyID0gbWF4KGFMZW5ndGgsIGJMZW5ndGgpO1xuICBsZXQgbWluTGVuZ3RoOiB1MzIgPSBtaW4oYUxlbmd0aCwgYkxlbmd0aCk7XG5cbiAgbGV0IG1heEludERpc3RhbmNlID0gY2VpbChtYXhEaXN0YW5jZSAqIGYzMihtYXhMZW5ndGgpKTtcblxuICAvLyB3ZSB3aWxsIHN0b3JlIHR3byBhcnJheXMgYXMgbWF0cml4IGFuZCBzd2FwIHRoZSB3b3JraW5nIGluZGljZXMgcGVyIHBhc3MuXG4gIC8vIHRoaXMgd2F5IHdlIGNhbiByZWR1Y2UgbWVtb3J5IHVzYWdlIHBlciBjb21wdXRhdGlvbiB0byBqdXN0IE8oYUxlbmd0aClcbiAgLy8gdGhlIGdyaWQgd2lsbCBoYXZlIGFMZW5ndGggKyAxIGNvbHVtbnMgYW5kIGJMZW5ndGggKyAxIHJvd3NcbiAgLy8gdGhpcyB3aWxsIGJlIGd1YXJhbnRlZWQgYnkgaXRlcmF0aW9uLCBidXQgdGhlIGFycmF5IHNpemVzIG11c3QgYmUga25vd24gYXQgY29tcGlsZSB0aW1lLCBzbyB3ZSB3aWxsIHVzZSBhIGZpeGVkIHNpemUgb2YgbWF4QXJyYXlTaXplXG4gIHZhciBkeW5hbWljUGFzc01hdDogYXJyYXk8YXJyYXk8ZjMyLCAke21heEFycmF5U2l6ZSArIDF9dT4sIDI+OyAvLyBpbml0aWFsaXplIHRvIDBcbiAgXG4gIHZhciBwcmV2SW5kZXg6IHUzMiA9IDA7XG4gIHZhciBjdXJJbmRleDogdTMyID0gMTsgLy8gd2Ugd2lsbCBzd2FwIHRoZXNlIGluZGljZXMgcGVyIHBhc3NcblxuICAvLyBpbml0aWFsaXplIHRoZSBmaXJzdCByb3dcbiAgZm9yICh2YXIgaSA9IDB1OyBpIDw9IGFMZW5ndGg7IGkgPSBpICsgMXUpIHtcbiAgICAgIGR5bmFtaWNQYXNzTWF0W3ByZXZJbmRleF1baV0gPSBmMzIoaSk7XG4gIH1cblxuICAvLyBpdGVyYXRlIG92ZXIgdGhlIHJvd3NcbiAgZm9yICh2YXIgaSA9IDF1OyBpIDw9IGJMZW5ndGg7IGkgPSBpICsgMXUpIHtcbiAgICAgIGR5bmFtaWNQYXNzTWF0W2N1ckluZGV4XVswXSA9IGYzMihpKTtcbiAgICAgIHZhciBtaW5FbnRyeTogZjMyID0gZjMyKG1heExlbmd0aCk7XG4gICAgICBsZXQgcHJldlJvdyA9ICZkeW5hbWljUGFzc01hdFtwcmV2SW5kZXhdO1xuICAgICAgbGV0IGN1clJvdyA9ICZkeW5hbWljUGFzc01hdFtjdXJJbmRleF07XG4gICAgICBsZXQgYk1vbiA9IHUzMihiW2kgLSAxXSk7XG4gICAgICBmb3IgKHZhciBqID0gMXU7IGogPD0gYUxlbmd0aDsgaiA9IGogKyAxdSkge1xuICAgICAgICAgIHZhciBjb3N0OiBmMzIgPSBmMzIoYVtqIC0gMV0gIT0gYk1vbik7XG4gICAgICAgICAgdmFyIHJlczogZjMyID0gbWluKFxuICAgICAgICAgICAgICBtaW4oXG4gICAgICAgICAgICAgICAgKCpwcmV2Um93KVtqXSArIDEuMCwgLy8gZGVsZXRpb25cbiAgICAgICAgICAgICAgICAoKmN1clJvdylbaiAtIDFdICsgMS4wLCAvLyBpbnNlcnRpb25cbiAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgKCpwcmV2Um93KVtqIC0gMV0gKyBjb3N0IC8vIHN1YnN0aXR1dGlvblxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAoKmN1clJvdylbal0gPSByZXM7XG4gICAgICAgICAgaWYgKHJlcyA8IG1pbkVudHJ5KSB7XG4gICAgICAgICAgICAgIG1pbkVudHJ5ID0gcmVzO1xuICAgICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC8vIHN3YXAgdGhlIGluZGljZXNcbiAgICAgIGxldCB0ZW1wOiB1MzIgPSBwcmV2SW5kZXg7XG4gICAgICBwcmV2SW5kZXggPSBjdXJJbmRleDtcbiAgICAgIGN1ckluZGV4ID0gdGVtcDtcbiAgICAgIGlmIChtaW5FbnRyeSA+IG1heEludERpc3RhbmNlKSB7XG4gICAgICAgICAgcmV0dXJuIDEuMDtcbiAgICAgIH1cbiAgfVxuXG4gIHJldHVybiBkeW5hbWljUGFzc01hdFtwcmV2SW5kZXhdW2FMZW5ndGhdIC8gZjMyKG1heExlbmd0aCk7XG4gIGA7XG59XG5leHBvcnQgZnVuY3Rpb24gd2ViR1BVTmVlZGxlbWFuV3Vuc2NoKG1heEFycmF5U2l6ZSwgZW50cnlJbmRleCkge1xuICAgIC8vIHZlcnNpb24gb2YgdGhlIGxldmVuc2h0YWluIHdoZXJlIHRoZSBjb3N0IG9mIHN1YnN0aXR1dGlvbiBpcyBjdXN0b21pemFibGVcbiAgICAvLyBpdCBpcyBhc3N1bWV0IHRoYXQgc3VwcEluZm8gc3RydWN0IGNvbnRhaW5zIGNvcnJlY3QgbWF0cml4IGNhbGxlZCBzaW1pbGFyaXR5TWF0cml4JHtlbnRyeUluZGV4fSwgKHNpbWlsYXJpdHlNYXRyaXgwLCBzaW1pbGFyaXR5TWF0cml4MSwgZXRjKVxuICAgIC8vIGFuZCBnYXBPcGVuUGVuYWx0eSwgZ2FwRXh0ZW5zaW9uUGVuYWx0eVxuICAgIC8vIHRoaXMgc2hvdWxkIGJlIGd1YXJhbnRlZWQgYnkgdGhlIGdldFByb2Nlc3NJbmZvIGZ1bmN0aW9uLlxuICAgIHJldHVybiBgXG4gICAgICBsZXQgYUxlbmd0aDogdTMyID0gY29tcHV0ZUluZm8uZW50cnlTaXplc1ske2VudHJ5SW5kZXh9XVthSW5kZXhdO1xuICAgICAgbGV0IGJMZW5ndGg6IHUzMiA9IGNvbXB1dGVJbmZvLmVudHJ5U2l6ZXNbJHtlbnRyeUluZGV4fV1bYkluZGV4XTtcbiAgICAgIGxldCBtYXhMZW5ndGg6IHUzMiA9IG1heChhTGVuZ3RoLCBiTGVuZ3RoKTtcbiAgICAgIGxldCBtaW5MZW5ndGg6IHUzMiA9IG1pbihhTGVuZ3RoLCBiTGVuZ3RoKTtcbiAgXG4gICAgICBsZXQgbWF4SW50RGlzdGFuY2UgPSBjZWlsKG1heERpc3RhbmNlICogZjMyKG1heExlbmd0aCkpO1xuICAgICAgLy8gd2Ugd2lsbCBzdG9yZSB0d28gYXJyYXlzIGFzIG1hdHJpeCBhbmQgc3dhcCB0aGUgd29ya2luZyBpbmRpY2VzIHBlciBwYXNzLlxuICAgICAgLy8gdGhpcyB3YXkgd2UgY2FuIHJlZHVjZSBtZW1vcnkgdXNhZ2UgcGVyIGNvbXB1dGF0aW9uIHRvIGp1c3QgTyhhTGVuZ3RoKVxuICAgICAgLy8gdGhlIGdyaWQgd2lsbCBoYXZlIGFMZW5ndGggKyAxIGNvbHVtbnMgYW5kIGJMZW5ndGggKyAxIHJvd3NcbiAgICAgIC8vIHRoaXMgd2lsbCBiZSBndWFyYW50ZWVkIGJ5IGl0ZXJhdGlvbiwgYnV0IHRoZSBhcnJheSBzaXplcyBtdXN0IGJlIGtub3duIGF0IGNvbXBpbGUgdGltZSwgc28gd2Ugd2lsbCB1c2UgYSBmaXhlZCBzaXplIG9mIG1heEFycmF5U2l6ZVxuICAgICAgdmFyIGR5bmFtaWNQYXNzTWF0OiBhcnJheTxhcnJheTxmMzIsICR7bWF4QXJyYXlTaXplICsgMX11PiwgMj47IC8vIGluaXRpYWxpemUgdG8gMFxuICAgICAgXG4gICAgICAvLyB3ZSBuZWVkIHRvIGtlZXAgdHJhY2sgb2Ygd2hpY2ggb3BlcmF0aW9uIGxlZCB0byB0aGUgY3VycmVudCBjZWxsXG4gICAgICAvLyBpLmUuIHdoZXRoZXIgd2UgY2FtZSBmcm9tIHRoZSBsZWZ0LCB0b3Agb3IgZGlhZ29uYWwgdG8gYXNzaWduIGdhcCBvcGVuL2dhcCBleHRlbmQgcGVuYWx0eVxuICAgICAgdmFyIHZlcnRpY2FsR2FwczogYXJyYXk8dTMyLCAke21heEFycmF5U2l6ZSArIDF9dT47XG4gICAgICB2YXIgaG9yaXpvbnRhbEdhcHM6IGFycmF5PHUzMiwgJHttYXhBcnJheVNpemUgKyAxfXU+O1xuXG4gICAgICBsZXQgZ2FwT3BlblBlbmFsdHk6IGYzMiA9IHN1cHBJbmZvLmdhcE9wZW5QZW5hbHR5JHtlbnRyeUluZGV4fTtcbiAgICAgIGxldCBnYXBFeHRlbnNpb25QZW5hbHR5OiBmMzIgPSBzdXBwSW5mby5nYXBFeHRlbnNpb25QZW5hbHR5JHtlbnRyeUluZGV4fTtcbiAgICAgIHZhciBwcmV2SW5kZXg6IHUzMiA9IDA7XG4gICAgICB2YXIgY3VySW5kZXg6IHUzMiA9IDE7IC8vIHdlIHdpbGwgc3dhcCB0aGVzZSBpbmRpY2VzIHBlciBwYXNzXG4gICAgICAvLyBpbml0aWFsaXplIHRoZSBmaXJzdCByb3dcbiAgICAgIGZvciAodmFyIGkgPSAwdTsgaSA8PSBhTGVuZ3RoOyBpID0gaSArIDF1KSB7XG4gICAgICAgICAgZHluYW1pY1Bhc3NNYXRbcHJldkluZGV4XVtpXSA9IGdhcE9wZW5QZW5hbHR5ICsgZjMyKGkgLSAxKSAqIGdhcEV4dGVuc2lvblBlbmFsdHk7XG4gICAgICAgICAgZHluYW1pY1Bhc3NNYXRbY3VySW5kZXhdW2ldID0gMC4wO1xuICAgICAgfVxuICAgICAgZHluYW1pY1Bhc3NNYXRbMF1bMF0gPSAwLjA7XG5cbiAgICAgIGxldCBzaW1NYXRyaXggPSAmc3VwcEluZm8uc2ltaWxhcml0eU1hdHJpeCR7ZW50cnlJbmRleH07IC8vIHVzaW5nIHBvaW50ZXJzIG1ha2UgdGhpbmdzIGZhc3RlclxuICAgICAgLy8gaXRlcmF0ZSBvdmVyIHRoZSByb3dzXG4gICAgICBmb3IgKHZhciBpID0gMXU7IGkgPD0gYkxlbmd0aDsgaSA9IGkgKyAxdSkge1xuICAgICAgICAgIGxldCBwcmV2Um93ID0gJmR5bmFtaWNQYXNzTWF0W3ByZXZJbmRleF07XG4gICAgICAgICAgbGV0IGN1clJvdyA9ICZkeW5hbWljUGFzc01hdFtjdXJJbmRleF07XG4gICAgICAgICAgKCpjdXJSb3cpWzBdID0gZ2FwT3BlblBlbmFsdHkgKyBmMzIoaSAtIDEpICogZ2FwRXh0ZW5zaW9uUGVuYWx0eTtcbiAgICAgICAgICB2YXIgbWluRW50cnk6IGYzMiA9IGYzMihtYXhMZW5ndGgpO1xuICAgICAgICAgIGxldCBtb25CID0gdTMyKGJbaSAtIDFdKTtcbiAgICAgICAgICBmb3IgKHZhciBqID0gMXU7IGogPD0gYUxlbmd0aDsgaiA9IGogKyAxdSkge1xuICAgICAgICAgICAgICBsZXQgbW9uQSA9IHUzMihhW2ogLSAxXSk7XG4gICAgICAgICAgICAgIFxuICAgICAgICAgICAgICBsZXQgY29zdDogZjMyID0gKCpwcmV2Um93KVtqIC0gMV0gKyAxZiAtICgqc2ltTWF0cml4KVttb25BXVttb25CXTtcbiAgICAgICAgICAgICAgdmFyIHRvcCA9ICgqcHJldlJvdylbal07IC8vIGRlbGV0aW9uXG4gICAgICAgICAgICAgIGlmICh2ZXJ0aWNhbEdhcHNbal0gPiAwKSB7XG4gICAgICAgICAgICAgICAgICB0b3AgPSB0b3AgKyBnYXBFeHRlbnNpb25QZW5hbHR5O1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgdG9wID0gdG9wICsgZ2FwT3BlblBlbmFsdHk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgdmFyIGxlZnQgPSAoKmN1clJvdylbaiAtIDFdOyAvLyBpbnNlcnRpb25cbiAgICAgICAgICAgICAgaWYgKGhvcml6b250YWxHYXBzW2ogLSAxXSA+IDApIHtcbiAgICAgICAgICAgICAgICAgIGxlZnQgPSBsZWZ0ICsgZ2FwRXh0ZW5zaW9uUGVuYWx0eTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIGxlZnQgPSBsZWZ0ICsgZ2FwT3BlblBlbmFsdHk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgdmFyIHJlczogZjMyID0gbWluKFxuICAgICAgICAgICAgICAgICAgbWluKFxuICAgICAgICAgICAgICAgICAgICAgIHRvcCwgLy8gZGVsZXRpb25cbiAgICAgICAgICAgICAgICAgICAgICBsZWZ0LCAvLyBpbnNlcnRpb25cbiAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICBjb3N0IC8vIHN1YnN0aXR1dGlvblxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICgqY3VyUm93KVtqXSA9IHJlcztcbiAgICAgICAgICAgICAgaWYgKHJlcyA8IG1pbkVudHJ5KSB7XG4gICAgICAgICAgICAgICAgICBtaW5FbnRyeSA9IHJlcztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAvLyB1cGRhdGUgdGhlIGhvcml6b250YWwgYW5kIHZlcnRpY2FsIGdhcHNcbiAgICAgICAgICAgICAgaWYgKHJlcyA9PSBjb3N0KSB7XG4gICAgICAgICAgICAgICAgICB2ZXJ0aWNhbEdhcHNbal0gPSAwO1xuICAgICAgICAgICAgICAgICAgaG9yaXpvbnRhbEdhcHNbal0gPSAwO1xuICAgICAgICAgICAgICB9IGVsc2UgaWYgKHJlcyA9PSBsZWZ0KSB7XG4gICAgICAgICAgICAgICAgICB2ZXJ0aWNhbEdhcHNbal0gPSAwO1xuICAgICAgICAgICAgICAgICAgaG9yaXpvbnRhbEdhcHNbal0gPSAxO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgdmVydGljYWxHYXBzW2pdID0gMTtcbiAgICAgICAgICAgICAgICAgIGhvcml6b250YWxHYXBzW2pdID0gMDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBzd2FwIHRoZSBpbmRpY2VzXG4gICAgICAgICAgbGV0IHRlbXA6IHUzMiA9IHByZXZJbmRleDtcbiAgICAgICAgICBwcmV2SW5kZXggPSBjdXJJbmRleDtcbiAgICAgICAgICBjdXJJbmRleCA9IHRlbXA7XG4gICAgICAgICAgaWYgKG1pbkVudHJ5ID4gbWF4SW50RGlzdGFuY2UpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIDEuMDtcbiAgICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gZHluYW1pY1Bhc3NNYXRbcHJldkluZGV4XVthTGVuZ3RoXSAvIGYzMihtYXhMZW5ndGgpO1xuICBcbiAgYDtcbn1cbmV4cG9ydCBmdW5jdGlvbiB3ZWJHUFVFdWNsaWRlYW4obWF4QXJyYXlTaXplLCBfZW50cnlJbmRleCkge1xuICAgIHJldHVybiBgXG4gIHZhciBkaXN0OiBmMzIgPSAwLjA7XG4gIGZvciAodmFyIGkgPSAwdTsgaSA8ICR7bWF4QXJyYXlTaXplfTsgaSA9IGkgKyAxdSkge1xuICAgIGRpc3QgPSBkaXN0ICsgZjMyKGFbaV0gLSBiW2ldKSAqIGYzMihhW2ldIC0gYltpXSk7XG4gIH1cbiAgcmV0dXJuIHNxcnQoZGlzdCk7XG4gIGA7XG59XG5leHBvcnQgZnVuY3Rpb24gd2ViR1BVTWFuaGF0dGFuKG1heEFycmF5U2l6ZSwgX2VudHJ5SW5kZXgpIHtcbiAgICByZXR1cm4gYFxuICB2YXIgZGlzdDogZjMyID0gMC4wO1xuICBmb3IgKHZhciBpID0gMHU7IGkgPCAke21heEFycmF5U2l6ZX07IGkgPSBpICsgMXUpIHtcbiAgICBkaXN0ID0gZGlzdCArIGFicyhmMzIoYVtpXSAtIGJbaV0pKTtcbiAgfVxuICByZXR1cm4gZGlzdDtcbiAgYDtcbn1cbmV4cG9ydCBmdW5jdGlvbiB3ZWJHUFVPbmVIb3REaXN0YW5jZShfbWF4QXJyYXlTaXplLCBlbnRyeUluZGV4KSB7XG4gICAgcmV0dXJuIGBcbiAgbGV0IGFMZW5ndGg6IHUzMiA9IGNvbXB1dGVJbmZvLmVudHJ5U2l6ZXNbJHtlbnRyeUluZGV4fV1bYUluZGV4XTtcbiAgbGV0IGJMZW5ndGg6IHUzMiA9IGNvbXB1dGVJbmZvLmVudHJ5U2l6ZXNbJHtlbnRyeUluZGV4fV1bYkluZGV4XTtcbiAgaWYgKGFMZW5ndGggIT0gYkxlbmd0aCkge1xuICAgIHJldHVybiAxLjA7XG4gIH1cbiAgZm9yICh2YXIgaSA9IDB1OyBpIDwgYUxlbmd0aDsgaSA9IGkgKyAxdSkge1xuICAgIGlmKGFbaV0gIT0gYltpXSkge1xuICAgICAgcmV0dXJuIDEuMDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIDAuMDtcbiAgYDtcbn1cbmV4cG9ydCBmdW5jdGlvbiB3ZWJHUFVOdW1lcmljRGlzdGFuY2UoX21heEFycmF5U2l6ZSwgZW50cnlJbmRleCkge1xuICAgIC8vIHdlIGFzc3VtZSB0aGF0IHJhbmdlJHtlbnRyeUluZGV4fSBpcyBhdmFpbGFibGUgaW4gdGhlIHN1cHBsZW1lbnRhcnlJbmZvIHN0cnVjdFxuICAgIHJldHVybiBgXG4gICAgbGV0IHJhbmdlID0gc3VwcEluZm8ucmFuZ2Uke2VudHJ5SW5kZXh9O1xuICAgIHJldHVybiBmMzIoYWJzKGYzMihhWzBdKSAtIGYzMihiWzBdKSkgLyByYW5nZSk7XG4gIGA7XG59XG4vLyB0YW5pbW90byBkaXN0YW5jZSBmb3IgdWludDMyIGFycmF5cyBvZiBsZW5ndGggJHttYXhBcnJheVNpemV9XG5leHBvcnQgZnVuY3Rpb24gd2ViR1BVVGFuaW1vdG9CaXRBcnJheShtYXhBcnJheVNpemUsIF9lbnRyeUluZGV4KSB7XG4gICAgcmV0dXJuIGBcbiAgdmFyIG9uQml0c2E6IHUzMiA9IDB1O1xuICB2YXIgb25CaXRzYjogdTMyID0gMHU7XG4gIGZvciAodmFyIGkgPSAwdTsgaSA8ICR7bWF4QXJyYXlTaXplfXU7IGkgPSBpICsgMXUpIHtcbiAgICAgIG9uQml0c2EgPSBvbkJpdHNhICsgY291bnRPbmVCaXRzKGFbaV0pO1xuICAgICAgb25CaXRzYiA9IG9uQml0c2IgKyBjb3VudE9uZUJpdHMoYltpXSk7XG4gIH1cblxuICBpZiAob25CaXRzYSA9PSAwdSAmJiBvbkJpdHNiID09IDB1KSB7XG4gICAgICByZXR1cm4gMC4wO1xuICB9XG5cbiAgbGV0IHRvdGFsT25CaXRzID0gb25CaXRzYSArIG9uQml0c2I7XG4gIHZhciBjb21tb25CaXRzOiB1MzIgPSAwdTtcbiAgZm9yICh2YXIgaSA9IDB1OyBpIDwgJHttYXhBcnJheVNpemV9dTsgaSA9IGkgKyAxdSkge1xuICAgICAgY29tbW9uQml0cyA9IGNvbW1vbkJpdHMgKyBjb3VudE9uZUJpdHMoYVtpXSAmIGJbaV0pO1xuICB9XG5cbiAgcmV0dXJuIDEuMCAtIGYzMihjb21tb25CaXRzKSAvIGYzMih0b3RhbE9uQml0cyAtIGNvbW1vbkJpdHMpO1xuICBgO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHdlYkdQVUFzeW1tZXRyaWNCaXRBcnJheShtYXhBcnJheVNpemUsIF9lbnRyeUluZGV4KSB7XG4gICAgcmV0dXJuIGBcbiAgdmFyIG9uQml0c2E6IHUzMiA9IDB1O1xuICB2YXIgb25CaXRzYjogdTMyID0gMHU7XG4gIGZvciAodmFyIGkgPSAwdTsgaSA8ICR7bWF4QXJyYXlTaXplfXU7IGkgPSBpICsgMXUpIHtcbiAgICAgIG9uQml0c2EgPSBvbkJpdHNhICsgY291bnRPbmVCaXRzKGFbaV0pO1xuICAgICAgb25CaXRzYiA9IG9uQml0c2IgKyBjb3VudE9uZUJpdHMoYltpXSk7XG4gIH1cbiAgbGV0IG1pbiA9IG1pbihvbkJpdHNhLCBvbkJpdHNiKTtcbiAgaWYgKG1pbiA9PSAwdSkge1xuICAgIHJldHVybiAxLjA7XG4gIH1cbiAgdmFyIGNvbW1vbkJpdHM6IHUzMiA9IDB1O1xuICBmb3IgKHZhciBpID0gMHU7IGkgPCAke21heEFycmF5U2l6ZX11OyBpID0gaSArIDF1KSB7XG4gICAgICBjb21tb25CaXRzID0gY29tbW9uQml0cyArIGNvdW50T25lQml0cyhhW2ldICYgYltpXSk7XG4gIH1cbiAgcmV0dXJuIDEuMCAtIGYzMihjb21tb25CaXRzKSAvIGYzMihtaW4pO1xuICBgO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHdlYkdQVUNvc2luZUJpdEFycmF5KG1heEFycmF5U2l6ZSwgX2VudHJ5SW5kZXgpIHtcbiAgICByZXR1cm4gYFxuICB2YXIgb25CaXRzYTogdTMyID0gMHU7XG4gIHZhciBvbkJpdHNiOiB1MzIgPSAwdTtcbiAgZm9yICh2YXIgaSA9IDB1OyBpIDwgJHttYXhBcnJheVNpemV9dTsgaSA9IGkgKyAxdSkge1xuICAgICAgb25CaXRzYSA9IG9uQml0c2EgKyBjb3VudE9uZUJpdHMoYVtpXSk7XG4gICAgICBvbkJpdHNiID0gb25CaXRzYiArIGNvdW50T25lQml0cyhiW2ldKTtcbiAgfVxuICBsZXQgdG90YWwgPSBvbkJpdHNhICogb25CaXRzYjsgLy8gcC5zLiBoZXJlIHRvdGFsIGlzIHRha2VuIGJ5IG11bHRpcGx5aW5nXG4gIGlmICh0b3RhbCA9PSAwdSkge1xuICAgIHJldHVybiAxLjA7XG4gIH1cbiAgdmFyIGNvbW1vbkJpdHM6IHUzMiA9IDB1O1xuICBmb3IgKHZhciBpID0gMHU7IGkgPCAke21heEFycmF5U2l6ZX11OyBpID0gaSArIDF1KSB7XG4gICAgICBjb21tb25CaXRzID0gY29tbW9uQml0cyArIGNvdW50T25lQml0cyhhW2ldICYgYltpXSk7XG4gIH1cbiAgcmV0dXJuIDEuMCAtIGYzMihjb21tb25CaXRzKSAvIHNxcnQoZjMyKHRvdGFsKSk7XG4gIGA7XG59XG5leHBvcnQgZnVuY3Rpb24gd2ViR1BVU29rYWxCaXRBcnJheShtYXhBcnJheVNpemUsIF9lbnRyeUluZGV4KSB7XG4gICAgcmV0dXJuIGBcbiAgdmFyIG9uQml0c2E6IHUzMiA9IDB1O1xuICB2YXIgb25CaXRzYjogdTMyID0gMHU7XG4gIGZvciAodmFyIGkgPSAwdTsgaSA8ICR7bWF4QXJyYXlTaXplfXU7IGkgPSBpICsgMXUpIHtcbiAgICAgIG9uQml0c2EgPSBvbkJpdHNhICsgY291bnRPbmVCaXRzKGFbaV0pO1xuICAgICAgb25CaXRzYiA9IG9uQml0c2IgKyBjb3VudE9uZUJpdHMoYltpXSk7XG4gIH1cbiAgbGV0IHRvdGFsID0gb25CaXRzYSArIG9uQml0c2I7XG4gIGlmICh0b3RhbCA9PSAwdSkge1xuICAgIHJldHVybiAxLjA7XG4gIH1cbiAgdmFyIGNvbW1vbkJpdHM6IHUzMiA9IDB1O1xuICBmb3IgKHZhciBpID0gMHU7IGkgPCAke21heEFycmF5U2l6ZX11OyBpID0gaSArIDF1KSB7XG4gICAgICBjb21tb25CaXRzID0gY29tbW9uQml0cyArIGNvdW50T25lQml0cyhhW2ldICYgYltpXSk7XG4gIH1cbiAgcmV0dXJuIDEuMCAtIGYzMihjb21tb25CaXRzKSAvIGYzMih0b3RhbCAqIDIgLSBjb21tb25CaXRzICogMyk7XG4gIGA7XG59XG5leHBvcnQgdmFyIFdFQkdQVURJU1RBTkNFO1xuKGZ1bmN0aW9uIChXRUJHUFVESVNUQU5DRSkge1xuICAgIFdFQkdQVURJU1RBTkNFW1wiSEFNTUlOR1wiXSA9IFwiSGFtbWluZ1wiO1xuICAgIFdFQkdQVURJU1RBTkNFW1wiRVVDTElERUFOXCJdID0gXCJFdWNsaWRlYW5cIjtcbiAgICBXRUJHUFVESVNUQU5DRVtcIk1BTkhBVFRBTlwiXSA9IFwiTWFuaGF0dGFuXCI7XG4gICAgV0VCR1BVRElTVEFOQ0VbXCJUQU5JTU9UT1wiXSA9IFwiVGFuaW1vdG9cIjtcbiAgICBXRUJHUFVESVNUQU5DRVtcIkxFVkVOU1RFSU5cIl0gPSBcIkxldmVuc2h0ZWluXCI7XG4gICAgV0VCR1BVRElTVEFOQ0VbXCJORUVETEVNQU5fV1VOU0NIXCJdID0gXCJOZWVkbGVtYW5uLVd1bnNjaFwiO1xuICAgIFdFQkdQVURJU1RBTkNFW1wiTU9OT01FUl9DSEVNSUNBTF9ESVNUQU5DRVwiXSA9IFwiTW9ub21lciBjaGVtaWNhbCBkaXN0YW5jZVwiO1xuICAgIFdFQkdQVURJU1RBTkNFW1wiU09LQUxcIl0gPSBcIlNva2FsXCI7XG4gICAgV0VCR1BVRElTVEFOQ0VbXCJDT1NJTkVcIl0gPSBcIkNvc2luZVwiO1xuICAgIFdFQkdQVURJU1RBTkNFW1wiQVNZTU1FVFJJQ1wiXSA9IFwiQXN5bW1ldHJpY1wiO1xuICAgIFdFQkdQVURJU1RBTkNFW1wiRGlmZmVyZW5jZVwiXSA9IFwiRGlmZmVyZW5jZVwiO1xuICAgIFdFQkdQVURJU1RBTkNFW1wiT25lSG90XCJdID0gXCJPbmUtSG90XCI7XG59KShXRUJHUFVESVNUQU5DRSB8fCAoV0VCR1BVRElTVEFOQ0UgPSB7fSkpO1xuZXhwb3J0IGNvbnN0IHdlYkdQVUZ1bmN0aW9ucyA9IHtcbiAgICBbV0VCR1BVRElTVEFOQ0UuSEFNTUlOR106IHdlYkdQVUhhbW1pbmcsXG4gICAgW1dFQkdQVURJU1RBTkNFLkVVQ0xJREVBTl06IHdlYkdQVUV1Y2xpZGVhbixcbiAgICBbV0VCR1BVRElTVEFOQ0UuTUFOSEFUVEFOXTogd2ViR1BVTWFuaGF0dGFuLFxuICAgIFtXRUJHUFVESVNUQU5DRS5UQU5JTU9UT106IHdlYkdQVVRhbmltb3RvQml0QXJyYXksXG4gICAgW1dFQkdQVURJU1RBTkNFLkxFVkVOU1RFSU5dOiB3ZWJHUFVMZXZlbnN0ZWluLFxuICAgIFtXRUJHUFVESVNUQU5DRS5ORUVETEVNQU5fV1VOU0NIXTogd2ViR1BVTmVlZGxlbWFuV3Vuc2NoLFxuICAgIFtXRUJHUFVESVNUQU5DRS5NT05PTUVSX0NIRU1JQ0FMX0RJU1RBTkNFXTogd2ViR1BVTW9ub21lckNoZW1pY2FsRGlzdGFuY2UsXG4gICAgW1dFQkdQVURJU1RBTkNFLlNPS0FMXTogd2ViR1BVU29rYWxCaXRBcnJheSxcbiAgICBbV0VCR1BVRElTVEFOQ0UuQ09TSU5FXTogd2ViR1BVQ29zaW5lQml0QXJyYXksXG4gICAgW1dFQkdQVURJU1RBTkNFLkFTWU1NRVRSSUNdOiB3ZWJHUFVBc3ltbWV0cmljQml0QXJyYXksXG4gICAgW1dFQkdQVURJU1RBTkNFLkRpZmZlcmVuY2VdOiB3ZWJHUFVOdW1lcmljRGlzdGFuY2UsXG4gICAgW1dFQkdQVURJU1RBTkNFLk9uZUhvdF06IHdlYkdQVU9uZUhvdERpc3RhbmNlXG59O1xuZXhwb3J0IGNvbnN0IGRpc3RhbmNlRnVuY3Rpb25Db21wbGV4aXR5ID0ge1xuICAgIFtXRUJHUFVESVNUQU5DRS5IQU1NSU5HXTogKG1heEVudHJ5U2l6ZSkgPT4gTWF0aC5jZWlsKG1heEVudHJ5U2l6ZSAvIDMwKSxcbiAgICBbV0VCR1BVRElTVEFOQ0UuRVVDTElERUFOXTogKG1heEVudHJ5U2l6ZSkgPT4gTWF0aC5jZWlsKG1heEVudHJ5U2l6ZSAvIDMwKSxcbiAgICBbV0VCR1BVRElTVEFOQ0UuTUFOSEFUVEFOXTogKG1heEVudHJ5U2l6ZSkgPT4gTWF0aC5jZWlsKG1heEVudHJ5U2l6ZSAvIDMwKSxcbiAgICBbV0VCR1BVRElTVEFOQ0UuVEFOSU1PVE9dOiAobWF4RW50cnlTaXplKSA9PiBNYXRoLmNlaWwobWF4RW50cnlTaXplIC8gNjApLFxuICAgIFtXRUJHUFVESVNUQU5DRS5TT0tBTF06IChtYXhFbnRyeVNpemUpID0+IE1hdGguY2VpbChtYXhFbnRyeVNpemUgLyA2MCksXG4gICAgW1dFQkdQVURJU1RBTkNFLkNPU0lORV06IChtYXhFbnRyeVNpemUpID0+IE1hdGguY2VpbChtYXhFbnRyeVNpemUgLyA2MCksXG4gICAgW1dFQkdQVURJU1RBTkNFLkFTWU1NRVRSSUNdOiAobWF4RW50cnlTaXplKSA9PiBNYXRoLmNlaWwobWF4RW50cnlTaXplIC8gNjApLFxuICAgIFtXRUJHUFVESVNUQU5DRS5MRVZFTlNURUlOXTogKG1heEVudHJ5U2l6ZSkgPT4gTWF0aC5jZWlsKG1heEVudHJ5U2l6ZSAqIG1heEVudHJ5U2l6ZSAvIDYwKSxcbiAgICBbV0VCR1BVRElTVEFOQ0UuTkVFRExFTUFOX1dVTlNDSF06IChtYXhFbnRyeVNpemUpID0+IE1hdGguY2VpbChtYXhFbnRyeVNpemUgKiBtYXhFbnRyeVNpemUgLyA2MCksXG4gICAgW1dFQkdQVURJU1RBTkNFLk1PTk9NRVJfQ0hFTUlDQUxfRElTVEFOQ0VdOiAobWF4RW50cnlTaXplKSA9PiBNYXRoLmNlaWwobWF4RW50cnlTaXplIC8gMjUpLFxuICAgIFtXRUJHUFVESVNUQU5DRS5EaWZmZXJlbmNlXTogKF9tYXhFbnRyeVNpemUpID0+IDEsXG4gICAgW1dFQkdQVURJU1RBTkNFLk9uZUhvdF06IChfbWF4RW50cnlTaXplKSA9PiBNYXRoLmNlaWwoX21heEVudHJ5U2l6ZSAvIDQwKSxcbn07XG5leHBvcnQgY29uc3QgVHlwZVN1cHBvcnRlZERpc3RhbmNlcyA9IHtcbiAgICBbXCJTVFJJTkdcIiAvKiBXR1BVRU5UUllUWVBFLlNUUklORyAqL106IG5ldyBTZXQoW1dFQkdQVURJU1RBTkNFLkhBTU1JTkcsIFdFQkdQVURJU1RBTkNFLkxFVkVOU1RFSU4sIFdFQkdQVURJU1RBTkNFLk5FRURMRU1BTl9XVU5TQ0gsIFdFQkdQVURJU1RBTkNFLk1PTk9NRVJfQ0hFTUlDQUxfRElTVEFOQ0UsIFdFQkdQVURJU1RBTkNFLk9uZUhvdF0pLFxuICAgIFtcIlVJTlQzMkFSUkFZXCIgLyogV0dQVUVOVFJZVFlQRS5VSU5UMzJBUlJBWSAqL106IG5ldyBTZXQoW1dFQkdQVURJU1RBTkNFLkhBTU1JTkcsIFdFQkdQVURJU1RBTkNFLkVVQ0xJREVBTiwgV0VCR1BVRElTVEFOQ0UuTUFOSEFUVEFOLCBXRUJHUFVESVNUQU5DRS5NT05PTUVSX0NIRU1JQ0FMX0RJU1RBTkNFLCBXRUJHUFVESVNUQU5DRS5MRVZFTlNURUlOLCBXRUJHUFVESVNUQU5DRS5ORUVETEVNQU5fV1VOU0NILCBXRUJHUFVESVNUQU5DRS5UQU5JTU9UTywgV0VCR1BVRElTVEFOQ0UuQ09TSU5FLCBXRUJHUFVESVNUQU5DRS5TT0tBTCwgV0VCR1BVRElTVEFOQ0UuQVNZTU1FVFJJQywgV0VCR1BVRElTVEFOQ0UuT25lSG90LCBXRUJHUFVESVNUQU5DRS5EaWZmZXJlbmNlXSksXG4gICAgW1wiSU5UMzJBUlJBWVwiIC8qIFdHUFVFTlRSWVRZUEUuSU5UMzJBUlJBWSAqL106IG5ldyBTZXQoW1dFQkdQVURJU1RBTkNFLkVVQ0xJREVBTiwgV0VCR1BVRElTVEFOQ0UuTUFOSEFUVEFOLCBXRUJHUFVESVNUQU5DRS5PbmVIb3QsIFdFQkdQVURJU1RBTkNFLkRpZmZlcmVuY2VdKSxcbiAgICBbXCJGTE9BVDMyQVJSQVlcIiAvKiBXR1BVRU5UUllUWVBFLkZMT0FUMzJBUlJBWSAqL106IG5ldyBTZXQoW1dFQkdQVURJU1RBTkNFLkVVQ0xJREVBTiwgV0VCR1BVRElTVEFOQ0UuTUFOSEFUVEFOLCBXRUJHUFVESVNUQU5DRS5EaWZmZXJlbmNlXSksXG4gICAgW1wiTlVNQkVSXCIgLyogV0dQVUVOVFJZVFlQRS5OVU1CRVIgKi9dOiBuZXcgU2V0KFtXRUJHUFVESVNUQU5DRS5FVUNMSURFQU4sIFdFQkdQVURJU1RBTkNFLk1BTkhBVFRBTiwgV0VCR1BVRElTVEFOQ0UuRGlmZmVyZW5jZV0pLFxuICAgIFtcIkJJVEFSUkFZXCIgLyogV0dQVUVOVFJZVFlQRS5CSVRBUlJBWSAqL106IG5ldyBTZXQoW1dFQkdQVURJU1RBTkNFLlRBTklNT1RPLCBXRUJHUFVESVNUQU5DRS5DT1NJTkUsIFdFQkdQVURJU1RBTkNFLlNPS0FMLCBXRUJHUFVESVNUQU5DRS5BU1lNTUVUUklDXSlcbn07XG4vLyMgc291cmNlTWFwcGluZ1VSTD13ZWJHUFUtbXVsdGljb2wtZGlzdGFuY2VzLmpzLm1hcCIsImV4cG9ydCB2YXIgTWF0cml4TWF0cml4T3BUeXBlO1xuKGZ1bmN0aW9uIChNYXRyaXhNYXRyaXhPcFR5cGUpIHtcbiAgICBNYXRyaXhNYXRyaXhPcFR5cGVbXCJBRERcIl0gPSBcIkFERFwiO1xuICAgIE1hdHJpeE1hdHJpeE9wVHlwZVtcIlNVQlwiXSA9IFwiU1VCXCI7XG4gICAgTWF0cml4TWF0cml4T3BUeXBlW1wiTVVMVFwiXSA9IFwiTVVMVFwiO1xufSkoTWF0cml4TWF0cml4T3BUeXBlIHx8IChNYXRyaXhNYXRyaXhPcFR5cGUgPSB7fSkpO1xuZXhwb3J0IHZhciBNYXRyaXhPcFR5cGU7XG4oZnVuY3Rpb24gKE1hdHJpeE9wVHlwZSkge1xuICAgIE1hdHJpeE9wVHlwZVtcIlNRVUFSRVwiXSA9IFwiU1FVQVJFXCI7XG4gICAgTWF0cml4T3BUeXBlW1wiSU5WRVJTRVwiXSA9IFwiSU5WRVJTRVwiO1xuICAgIE1hdHJpeE9wVHlwZVtcIlRSQU5TUE9TRVwiXSA9IFwiVFJBTlNQT1NFXCI7XG4gICAgTWF0cml4T3BUeXBlW1wiTk9STVwiXSA9IFwiTk9STVwiO1xuICAgIE1hdHJpeE9wVHlwZVtcIkNPTFVNTl9OT1JNXCJdID0gXCJDT0xVTU5fTk9STVwiO1xufSkoTWF0cml4T3BUeXBlIHx8IChNYXRyaXhPcFR5cGUgPSB7fSkpO1xuZXhwb3J0IHZhciBNYXRyaXhTY2FsYXJPcFR5cGU7XG4oZnVuY3Rpb24gKE1hdHJpeFNjYWxhck9wVHlwZSkge1xuICAgIE1hdHJpeFNjYWxhck9wVHlwZVtcIlNDQUxBUk1VTFRcIl0gPSBcIlNDQUxBUk1VTFRcIjtcbiAgICBNYXRyaXhTY2FsYXJPcFR5cGVbXCJTQ0FMQVJBRERcIl0gPSBcIlNDQUxBUkFERFwiO1xuICAgIE1hdHJpeFNjYWxhck9wVHlwZVtcIlNDQUxBUlBPV1wiXSA9IFwiU0NBTEFSUE9XXCI7XG59KShNYXRyaXhTY2FsYXJPcFR5cGUgfHwgKE1hdHJpeFNjYWxhck9wVHlwZSA9IHt9KSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD10eXBlcy5qcy5tYXAiLCJleHBvcnQgdmFyIERpbVJlZHVjdGlvbk1ldGhvZHM7XG4oZnVuY3Rpb24gKERpbVJlZHVjdGlvbk1ldGhvZHMpIHtcbiAgICBEaW1SZWR1Y3Rpb25NZXRob2RzW1wiVU1BUFwiXSA9IFwiVU1BUFwiO1xuICAgIERpbVJlZHVjdGlvbk1ldGhvZHNbXCJUX1NORVwiXSA9IFwidC1TTkVcIjtcbn0pKERpbVJlZHVjdGlvbk1ldGhvZHMgfHwgKERpbVJlZHVjdGlvbk1ldGhvZHMgPSB7fSkpO1xuO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pZEhsd1pYTXVhbk1pTENKemIzVnlZMlZTYjI5MElqb2lJaXdpYzI5MWNtTmxjeUk2V3lKMGVYQmxjeTUwY3lKZExDSnVZVzFsY3lJNlcxMHNJbTFoY0hCcGJtZHpJam9pUVVGQlFTeE5RVUZOTEVOQlFVNHNTVUZCV1N4dFFrRkhXRHRCUVVoRUxGZEJRVmtzYlVKQlFXMUNPMGxCUXpOQ0xHOURRVUZoTEVOQlFVRTdTVUZEWWl4elEwRkJaU3hEUVVGQk8wRkJRMjVDTEVOQlFVTXNSVUZJVnl4dFFrRkJiVUlzUzBGQmJrSXNiVUpCUVcxQ0xGRkJSemxDTzBGQlFVRXNRMEZCUXlJc0luTnZkWEpqWlhORGIyNTBaVzUwSWpwYkltVjRjRzl5ZENCbGJuVnRJRVJwYlZKbFpIVmpkR2x2YmsxbGRHaHZaSE43WEc0Z0lDQWdWVTFCVUNBOUlDZFZUVUZRSnl4Y2JpQWdJQ0JVWDFOT1JTQTlJQ2QwTFZOT1JTZGNibjA3WEc0aVhYMD0iLCIvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L3VuYm91bmQtbWV0aG9kXG5jb25zdCB0b1N0cmluZyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG4vKipcbiAqIENoZWNrcyBpZiBhbiBvYmplY3QgaXMgYW4gaW5zdGFuY2Ugb2YgYW4gQXJyYXkgKGFycmF5IG9yIHR5cGVkIGFycmF5LCBleGNlcHQgdGhvc2UgdGhhdCBjb250YWluIGJpZ2ludCB2YWx1ZXMpLlxuICpcbiAqIEBwYXJhbSB2YWx1ZSAtIE9iamVjdCB0byBjaGVjay5cbiAqIEByZXR1cm5zIFRydWUgaWYgdGhlIG9iamVjdCBpcyBhbiBhcnJheSBvciBhIHR5cGVkIGFycmF5LlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNBbnlBcnJheSh2YWx1ZSkge1xuICAgIGNvbnN0IHRhZyA9IHRvU3RyaW5nLmNhbGwodmFsdWUpO1xuICAgIHJldHVybiB0YWcuZW5kc1dpdGgoJ0FycmF5XScpICYmICF0YWcuaW5jbHVkZXMoJ0JpZycpO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwiaW1wb3J0ICogYXMgZ3JvayBmcm9tICdkYXRhZ3Jvay1hcGkvZ3Jvayc7XG5pbXBvcnQgKiBhcyB1aSBmcm9tICdkYXRhZ3Jvay1hcGkvdWknO1xuaW1wb3J0ICogYXMgREcgZnJvbSAnZGF0YWdyb2stYXBpL2RnJztcbmltcG9ydCB7IERJTV9SRURfUFJFUFJPQ0VTU0lOR19GVU5DVElPTl9UQUcsIFNVUFBPUlRFRF9ESVNUQU5DRV9GVU5DVElPTlNfVEFHLCBTVVBQT1JURURfU0VNVFlQRVNfVEFHLCBTVVBQT1JURURfVFlQRVNfVEFHLCBTVVBQT1JURURfVU5JVFNfVEFHIH0gZnJvbSAnLi9jb25zdHMnO1xuaW1wb3J0IHsgVFNORU9wdGlvbnMsIFVNQVBPcHRpb25zIH0gZnJvbSAnLi4vbXVsdGktY29sdW1uLWRpbWVuc2lvbmFsaXR5LXJlZHVjdGlvbi9tdWx0aS1jb2x1bW4tZGltLXJlZHVjdGlvbi1lZGl0b3InO1xuaW1wb3J0IHsgRGltUmVkdWN0aW9uTWV0aG9kcyB9IGZyb20gJy4uL211bHRpLWNvbHVtbi1kaW1lbnNpb25hbGl0eS1yZWR1Y3Rpb24vdHlwZXMnO1xuaW1wb3J0IHsgTUNMTWV0aG9kTmFtZSB9IGZyb20gJy4uL01DTCc7XG5leHBvcnQgY29uc3QgU0VRX0NPTF9OQU1FUyA9IHtcbiAgICBbREcuU0VNVFlQRS5NT0xFQ1VMRV06ICdNb2xlY3VsZXMnLFxuICAgIFtERy5TRU1UWVBFLk1BQ1JPTU9MRUNVTEVdOiAnU2VxdWVuY2VzJ1xufTtcbmV4cG9ydCBjbGFzcyBEQlNjYW5PcHRpb25zIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5lcHNpbG9uID0ge1xuICAgICAgICAgICAgdWlOYW1lOiAnRXBzaWxvbicsIHZhbHVlOiAwLjAxLCB0b29sdGlwOiAnTWluaW11bSBkaXN0YW5jZSBiZXR3ZWVuIGNsdXN0ZXIgcG9pbnRzJywgbWluOiAwLCBtYXg6IDIsIHN0ZXA6IDAuMDA1XG4gICAgICAgIH07XG4gICAgICAgIHRoaXMubWluUHRzID0ge1xuICAgICAgICAgICAgdWlOYW1lOiAnTWluaW11bSBwb2ludHMnLCB2YWx1ZTogNCwgdG9vbHRpcDogJ01pbmltdW0gbnVtYmVyIG9mIHBvaW50cyBpbiBjbHVzdGVyJywgbWluOiAxLCBtYXg6IDEwMDAsIHN0ZXA6IDFcbiAgICAgICAgfTtcbiAgICB9XG4gICAgO1xufVxuZXhwb3J0IGNsYXNzIERpbVJlZHVjdGlvbkJhc2VFZGl0b3Ige1xuICAgIGdldCBhbGdvcml0aG1PcHRpb25zKCkge1xuICAgICAgICBjb25zdCBhbGdvcml0aG1QYXJhbXMgPSB0aGlzLm1ldGhvZHNQYXJhbXNbdGhpcy5tZXRob2RJbnB1dC52YWx1ZV07XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSB7fTtcbiAgICAgICAgT2JqZWN0LmtleXMoYWxnb3JpdGhtUGFyYW1zKS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgICAgICAgIGlmIChhbGdvcml0aG1QYXJhbXNba2V5XS52YWx1ZSAhPSBudWxsKVxuICAgICAgICAgICAgICAgIG9wdGlvbnNba2V5XSA9IGFsZ29yaXRobVBhcmFtc1trZXldLnZhbHVlO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIG9wdGlvbnM7XG4gICAgfVxuICAgIGdldCBkYlNjYW5PcHRpb25zKCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZGJTY2FuRXBzaWxvbjogdGhpcy5kYlNjYW5QYXJhbXMuZXBzaWxvbi52YWx1ZSA/PyAwLjAxLFxuICAgICAgICAgICAgZGJTY2FuTWluUHRzOiB0aGlzLmRiU2NhblBhcmFtcy5taW5QdHMudmFsdWUgPz8gNFxuICAgICAgICB9O1xuICAgIH1cbiAgICBjb25zdHJ1Y3RvcihlZGl0b3JTZXR0aW5ncyA9IHt9KSB7XG4gICAgICAgIHRoaXMuZWRpdG9yU2V0dGluZ3MgPSB7fTtcbiAgICAgICAgdGhpcy5wbG90RW1iZWRkaW5nc0lucHV0ID0gdWkuYm9vbElucHV0KCdQbG90IGVtYmVkZGluZ3MnLCB0cnVlKTtcbiAgICAgICAgdGhpcy5jbHVzdGVyRW1iZWRkaW5nc0lucHV0ID0gdWkuYm9vbElucHV0KCdDbHVzdGVyIGVtYmVkZGluZ3MnLCB0cnVlKTtcbiAgICAgICAgdGhpcy5wcmVwcm9jZXNzaW5nRnVuY3Rpb25JbnB1dFJvb3QgPSBudWxsO1xuICAgICAgICB0aGlzLm1ldGhvZHMgPSBbRGltUmVkdWN0aW9uTWV0aG9kcy5VTUFQLCBEaW1SZWR1Y3Rpb25NZXRob2RzLlRfU05FXTtcbiAgICAgICAgdGhpcy5jb2x1bW5GdW5jdGlvbnNNYXAgPSB7fTtcbiAgICAgICAgdGhpcy5zdXBwb3J0ZWRGdW5jdGlvbnMgPSB7fTtcbiAgICAgICAgdGhpcy5hdmFpbGFibGVNZXRyaWNzID0gW107XG4gICAgICAgIHRoaXMubWV0aG9kU2V0dGluZ3NEaXYgPSB1aS5pbnB1dHMoW10pO1xuICAgICAgICB0aGlzLmRiU2NhblNldHRpbmdzRGl2ID0gdWkuaW5wdXRzKFtdKTtcbiAgICAgICAgdGhpcy5wcmVwcm9jZXNzaW5nRnVuY1NldHRpbmdzRGl2ID0gdWkuaW5wdXRzKFtdKTtcbiAgICAgICAgdGhpcy5wcmVwcm9jZXNzaW5nRnVuY3Rpb25TZXR0aW5ncyA9IHt9O1xuICAgICAgICB0aGlzLm1ldGhvZHNQYXJhbXMgPSB7XG4gICAgICAgICAgICBbRGltUmVkdWN0aW9uTWV0aG9kcy5VTUFQXTogbmV3IFVNQVBPcHRpb25zKCksXG4gICAgICAgICAgICBbRGltUmVkdWN0aW9uTWV0aG9kcy5UX1NORV06IG5ldyBUU05FT3B0aW9ucygpXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuZGJTY2FuUGFyYW1zID0gbmV3IERCU2Nhbk9wdGlvbnMoKTtcbiAgICAgICAgdGhpcy5lZGl0b3JTZXR0aW5ncyA9IGVkaXRvclNldHRpbmdzO1xuICAgICAgICBpZiAodGhpcy5lZGl0b3JTZXR0aW5ncy5lbmFibGVNQ0wpXG4gICAgICAgICAgICB0aGlzLm1ldGhvZHMucHVzaChNQ0xNZXRob2ROYW1lKTtcbiAgICAgICAgY29uc3QgcHJlcG9yY2Vzc2luZ0Z1bmNzID0gREcuRnVuYy5maW5kKHsgdGFnczogW0RJTV9SRURfUFJFUFJPQ0VTU0lOR19GVU5DVElPTl9UQUddIH0pO1xuICAgICAgICAvLyBtYXAgdGhhdCBjb250YWlucyBhbGwgcHJlcHJvY2Vzc2luZyBmdW5jdGlvbnMgYW5kIHRoZWlyIG1ldGFkYXRhXG4gICAgICAgIHByZXBvcmNlc3NpbmdGdW5jcy5mb3JFYWNoKChmKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBzZW1UeXBlcyA9IGYub3B0aW9ucy5nZXQoU1VQUE9SVEVEX1NFTVRZUEVTX1RBRykgPz8gJyc7XG4gICAgICAgICAgICBjb25zdCBuYW1lID0gZi5mcmllbmRseU5hbWUgPz8gZi5uYW1lO1xuICAgICAgICAgICAgY29uc3QgdHlwZXMgPSBmLm9wdGlvbnMuZ2V0KFNVUFBPUlRFRF9UWVBFU19UQUcpID8/ICcnO1xuICAgICAgICAgICAgY29uc3QgdW5pdHMgPSBmLm9wdGlvbnMuZ2V0KFNVUFBPUlRFRF9VTklUU19UQUcpID8/ICcnO1xuICAgICAgICAgICAgY29uc3QgZGlzdGFuY2VGdW5jdGlvbnMgPSBmLm9wdGlvbnMuZ2V0KFNVUFBPUlRFRF9ESVNUQU5DRV9GVU5DVElPTlNfVEFHKSA/PyAnJztcbiAgICAgICAgICAgIGlmICh0aGlzLmVkaXRvclNldHRpbmdzLnNlbXR5cGUgJiYgIXNlbVR5cGVzLmluY2x1ZGVzKHRoaXMuZWRpdG9yU2V0dGluZ3Muc2VtdHlwZSkpXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgaWYgKHRoaXMuZWRpdG9yU2V0dGluZ3MudHlwZSAmJiAhdHlwZXMuaW5jbHVkZXModGhpcy5lZGl0b3JTZXR0aW5ncy50eXBlKSlcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICBpZiAodGhpcy5lZGl0b3JTZXR0aW5ncy51bml0cyAmJiAhdW5pdHMuaW5jbHVkZXModGhpcy5lZGl0b3JTZXR0aW5ncy51bml0cykpXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgdGhpcy5zdXBwb3J0ZWRGdW5jdGlvbnNbbmFtZV0gPSB7XG4gICAgICAgICAgICAgICAgZnVuYzogZixcbiAgICAgICAgICAgICAgICBzZW1UeXBlczogc2VtVHlwZXMgPyBzZW1UeXBlcy5zcGxpdCgnLCcpIDogW10sXG4gICAgICAgICAgICAgICAgdHlwZXM6IHR5cGVzID8gdHlwZXMuc3BsaXQoJywnKSA6IFtdLFxuICAgICAgICAgICAgICAgIHVuaXRzOiB1bml0cyA/IHVuaXRzLnNwbGl0KCcsJykgOiBbXSxcbiAgICAgICAgICAgICAgICBkaXN0YW5jZUZ1bmN0aW9uczogZGlzdGFuY2VGdW5jdGlvbnMgPyBkaXN0YW5jZUZ1bmN0aW9ucy5zcGxpdCgnLCcpIDogW10sXG4gICAgICAgICAgICB9O1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy50YWJsZUlucHV0ID0gdWkudGFibGVJbnB1dCgnVGFibGUnLCBncm9rLnNoZWxsLnR2LmRhdGFGcmFtZSwgZ3Jvay5zaGVsbC50YWJsZXMsICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMub25UYWJsZUlucHV0Q2hhbmdlZCgpO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5vblRhYmxlSW5wdXRDaGFuZ2VkKCk7XG4gICAgICAgIHRoaXMucmVnZW5lcmF0ZUNvbElucHV0KCk7XG4gICAgICAgIHRoaXMub25Db2x1bW5JbnB1dENoYW5nZWQoKTtcbiAgICAgICAgbGV0IHNldHRpbmdzT3BlbmVkID0gZmFsc2U7XG4gICAgICAgIGxldCBkYlNjYW5TZXR0aW5nc09wZW5lZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLm1ldGhvZElucHV0ID0gdWkuY2hvaWNlSW5wdXQoJ01ldGhvZCcsIERpbVJlZHVjdGlvbk1ldGhvZHMuVU1BUCwgdGhpcy5tZXRob2RzLCAoKSA9PiB7XG4gICAgICAgICAgICBpZiAoc2V0dGluZ3NPcGVuZWQpXG4gICAgICAgICAgICAgICAgdGhpcy5jcmVhdGVBbGdvcml0aG1TZXR0aW5nc0Rpdih0aGlzLm1ldGhvZFNldHRpbmdzRGl2LCB0aGlzLm1ldGhvZHNQYXJhbXNbdGhpcy5tZXRob2RJbnB1dC52YWx1ZV0pO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5tZXRob2RTZXR0aW5nc0ljb24gPSB1aS5pY29ucy5zZXR0aW5ncygoKSA9PiB7XG4gICAgICAgICAgICBzZXR0aW5nc09wZW5lZCA9ICFzZXR0aW5nc09wZW5lZDtcbiAgICAgICAgICAgIGlmICghc2V0dGluZ3NPcGVuZWQpXG4gICAgICAgICAgICAgICAgdWkuZW1wdHkodGhpcy5tZXRob2RTZXR0aW5nc0Rpdik7XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgdGhpcy5jcmVhdGVBbGdvcml0aG1TZXR0aW5nc0Rpdih0aGlzLm1ldGhvZFNldHRpbmdzRGl2LCB0aGlzLm1ldGhvZHNQYXJhbXNbdGhpcy5tZXRob2RJbnB1dC52YWx1ZV0pO1xuICAgICAgICB9LCAnTW9kaWZ5IG1ldGhvZHMgcGFyYW1ldGVycycpO1xuICAgICAgICB0aGlzLmRiU2NhblNldHRpbmdzSWNvbiA9IHVpLmljb25zLnNldHRpbmdzKCgpID0+IHtcbiAgICAgICAgICAgIGRiU2NhblNldHRpbmdzT3BlbmVkID0gIWRiU2NhblNldHRpbmdzT3BlbmVkO1xuICAgICAgICAgICAgaWYgKCFkYlNjYW5TZXR0aW5nc09wZW5lZClcbiAgICAgICAgICAgICAgICB1aS5lbXB0eSh0aGlzLmRiU2NhblNldHRpbmdzRGl2KTtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICB0aGlzLmNyZWF0ZUFsZ29yaXRobVNldHRpbmdzRGl2KHRoaXMuZGJTY2FuU2V0dGluZ3NEaXYsIHRoaXMuZGJTY2FuUGFyYW1zKTtcbiAgICAgICAgfSwgJ01vZGlmeSBjbHVzdGVyaW5nIHBhcmFtZXRlcnMnKTtcbiAgICAgICAgdGhpcy5jbHVzdGVyRW1iZWRkaW5nc0lucHV0LmNsYXNzTGlzdC5hZGQoJ21sLWRpbS1yZWR1Y3Rpb24tc2V0dGluZ3MtaW5wdXQnKTtcbiAgICAgICAgdGhpcy5jbHVzdGVyRW1iZWRkaW5nc0lucHV0LnJvb3QucHJlcGVuZCh0aGlzLmRiU2NhblNldHRpbmdzSWNvbik7XG4gICAgICAgIHRoaXMubWV0aG9kSW5wdXQucm9vdC5jbGFzc0xpc3QuYWRkKCdtbC1kaW0tcmVkdWN0aW9uLXNldHRpbmdzLWlucHV0Jyk7XG4gICAgICAgIHRoaXMubWV0aG9kSW5wdXQucm9vdC5wcmVwZW5kKHRoaXMubWV0aG9kU2V0dGluZ3NJY29uKTtcbiAgICAgICAgdGhpcy5tZXRob2RTZXR0aW5nc0RpdiA9IHVpLmlucHV0cyhbXSk7XG4gICAgICAgIGNvbnN0IGZ1bmN0aW9ucyA9IHRoaXMuY29sdW1uRnVuY3Rpb25zTWFwW3RoaXMuY29sSW5wdXQudmFsdWUubmFtZV07XG4gICAgICAgIHRoaXMucHJlcHJvY2Vzc2luZ0Z1bmN0aW9uSW5wdXQgPSB1aS5jaG9pY2VJbnB1dCgnRW5jb2RpbmcgZnVuY3Rpb24nLCBmdW5jdGlvbnNbMF0sIGZ1bmN0aW9ucywgKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5vblByZXByb2Nlc3NpbmdGdW5jdGlvbkNoYW5nZWQoKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGxldCBmbGFnUGZpID0gZmFsc2U7XG4gICAgICAgIGlmICghdGhpcy5wcmVwcm9jZXNzaW5nRnVuY3Rpb25JbnB1dFJvb3QpIHtcbiAgICAgICAgICAgIHRoaXMucHJlcHJvY2Vzc2luZ0Z1bmN0aW9uSW5wdXRSb290ID0gdGhpcy5wcmVwcm9jZXNzaW5nRnVuY3Rpb25JbnB1dC5yb290O1xuICAgICAgICAgICAgZmxhZ1BmaSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFmbGFnUGZpKSB7XG4gICAgICAgICAgICB1aS5lbXB0eSh0aGlzLnByZXByb2Nlc3NpbmdGdW5jdGlvbklucHV0Um9vdCk7XG4gICAgICAgICAgICBBcnJheS5mcm9tKHRoaXMucHJlcHJvY2Vzc2luZ0Z1bmN0aW9uSW5wdXQucm9vdC5jaGlsZHJlbilcbiAgICAgICAgICAgICAgICAuZm9yRWFjaCgoY2hpbGQpID0+IHRoaXMucHJlcHJvY2Vzc2luZ0Z1bmN0aW9uSW5wdXRSb290LmFwcGVuZChjaGlsZCkpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucHJlcHJvY2Vzc2luZ0Z1bmN0aW9uSW5wdXRSb290LmNsYXNzTGlzdC5hZGQoJ21sLWRpbS1yZWR1Y3Rpb24tc2V0dGluZ3MtaW5wdXQnKTtcbiAgICAgICAgbGV0IHByZXByb2Nlc3NpbmdTZXR0aW5nc09wZW5lZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLnByZXByb2Nlc3NpbmdGdW5jU2V0dGluZ3NJY29uID0gdWkuaWNvbnMuc2V0dGluZ3MoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgaWYgKCFwcmVwcm9jZXNzaW5nU2V0dGluZ3NPcGVuZWQpIHtcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmNyZWF0ZVByZXByb2Nlc3NpbmdGdW5jUGFyYW1zRGl2KHRoaXMucHJlcHJvY2Vzc2luZ0Z1bmNTZXR0aW5nc0RpdiwgdGhpcy5zdXBwb3J0ZWRGdW5jdGlvbnNbdGhpcy5wcmVwcm9jZXNzaW5nRnVuY3Rpb25JbnB1dC52YWx1ZV0uZnVuYyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB1aS5lbXB0eSh0aGlzLnByZXByb2Nlc3NpbmdGdW5jU2V0dGluZ3NEaXYpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcHJlcHJvY2Vzc2luZ1NldHRpbmdzT3BlbmVkID0gIXByZXByb2Nlc3NpbmdTZXR0aW5nc09wZW5lZDtcbiAgICAgICAgfSwgJ01vZGlmeSBlbmNvZGluZyBmdW5jdGlvbiBwYXJhbWV0ZXJzJyk7XG4gICAgICAgIHRoaXMucHJlcHJvY2Vzc2luZ0Z1bmN0aW9uSW5wdXRSb290LnByZXBlbmQodGhpcy5wcmVwcm9jZXNzaW5nRnVuY1NldHRpbmdzSWNvbik7XG4gICAgICAgIHRoaXMuc2ltaWxhcml0eU1ldHJpY0lucHV0ID0gdWkuY2hvaWNlSW5wdXQoJ1NpbWlsYXJpdHknLCAnJywgW10sIG51bGwpO1xuICAgICAgICB0aGlzLnNpbWlsYXJpdHlNZXRyaWNJbnB1dC5udWxsYWJsZSA9IGZhbHNlO1xuICAgICAgICBpZiAoIXRoaXMuc2ltaWxhcml0eU1ldHJpY0lucHV0Um9vdClcbiAgICAgICAgICAgIHRoaXMuc2ltaWxhcml0eU1ldHJpY0lucHV0Um9vdCA9IHRoaXMuc2ltaWxhcml0eU1ldHJpY0lucHV0LnJvb3Q7XG4gICAgICAgIHRoaXMub25QcmVwcm9jZXNzaW5nRnVuY3Rpb25DaGFuZ2VkKCk7XG4gICAgfVxuICAgIGdldENvbElucHV0KCkge1xuICAgICAgICBjb25zdCBmaXJzdFN1cHBvcnRlZENvbHVtbiA9IHRoaXMudGFibGVJbnB1dC52YWx1ZT8uY29sdW1ucy50b0xpc3QoKVxuICAgICAgICAgICAgLmZpbmQoKGNvbCkgPT4gISF0aGlzLmNvbHVtbkZ1bmN0aW9uc01hcFtjb2wubmFtZV0pID8/IG51bGw7XG4gICAgICAgIGNvbnN0IGlucHV0ID0gdWkuY29sdW1uSW5wdXQoJ0NvbHVtbicsIHRoaXMudGFibGVJbnB1dC52YWx1ZSwgZmlyc3RTdXBwb3J0ZWRDb2x1bW4sICgpID0+IHRoaXMub25Db2x1bW5JbnB1dENoYW5nZWQoKSwgeyBmaWx0ZXI6IChjb2wpID0+ICEhdGhpcy5jb2x1bW5GdW5jdGlvbnNNYXBbY29sLm5hbWVdIH0pO1xuICAgICAgICBpZiAoIXRoaXMuY29sSW5wdXRSb290KVxuICAgICAgICAgICAgdGhpcy5jb2xJbnB1dFJvb3QgPSBpbnB1dC5yb290O1xuICAgICAgICByZXR1cm4gaW5wdXQ7XG4gICAgfVxuICAgIHJlZ2VuZXJhdGVDb2xJbnB1dCgpIHtcbiAgICAgICAgbGV0IGZsYWcgPSBmYWxzZTtcbiAgICAgICAgaWYgKHRoaXMuY29sSW5wdXRSb290KSB7XG4gICAgICAgICAgICBmbGFnID0gdHJ1ZTtcbiAgICAgICAgICAgIHVpLmVtcHR5KHRoaXMuY29sSW5wdXRSb290KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNvbElucHV0ID0gdGhpcy5nZXRDb2xJbnB1dCgpO1xuICAgICAgICBpZiAoZmxhZylcbiAgICAgICAgICAgIEFycmF5LmZyb20odGhpcy5jb2xJbnB1dC5yb290LmNoaWxkcmVuKS5mb3JFYWNoKChjaGlsZCkgPT4gdGhpcy5jb2xJbnB1dFJvb3QuYXBwZW5kKGNoaWxkKSk7XG4gICAgICAgIHRoaXMub25Db2x1bW5JbnB1dENoYW5nZWQoKTtcbiAgICB9XG4gICAgb25UYWJsZUlucHV0Q2hhbmdlZCgpIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLnRhYmxlSW5wdXQudmFsdWU7XG4gICAgICAgIGlmICghdmFsdWUpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHRoaXMuY29sdW1uRnVuY3Rpb25zTWFwID0ge307XG4gICAgICAgIGNvbnN0IGNvbHVtbnMgPSB2YWx1ZS5jb2x1bW5zLnRvTGlzdCgpO1xuICAgICAgICBjb2x1bW5zLmZvckVhY2goKGNvbCkgPT4ge1xuICAgICAgICAgICAgT2JqZWN0LmtleXModGhpcy5zdXBwb3J0ZWRGdW5jdGlvbnMpLmZvckVhY2goKGZ1bmNOYW1lKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc2VtVHlwZXMgPSB0aGlzLnN1cHBvcnRlZEZ1bmN0aW9uc1tmdW5jTmFtZV0uc2VtVHlwZXM7XG4gICAgICAgICAgICAgICAgY29uc3QgdHlwZXMgPSB0aGlzLnN1cHBvcnRlZEZ1bmN0aW9uc1tmdW5jTmFtZV0udHlwZXM7XG4gICAgICAgICAgICAgICAgY29uc3QgdW5pdHMgPSB0aGlzLnN1cHBvcnRlZEZ1bmN0aW9uc1tmdW5jTmFtZV0udW5pdHM7XG4gICAgICAgICAgICAgICAgY29uc3Qgc2VtVHlwZVN1cHBvcnRlZCA9ICFzZW1UeXBlcy5sZW5ndGggfHwgKGNvbC5zZW1UeXBlICYmIHNlbVR5cGVzLmluY2x1ZGVzKGNvbC5zZW1UeXBlKSk7XG4gICAgICAgICAgICAgICAgY29uc3QgdHlwZVN1cG9ydGVkID0gIXR5cGVzLmxlbmd0aCB8fCB0eXBlcy5pbmNsdWRlcyhjb2wudHlwZSk7XG4gICAgICAgICAgICAgICAgY29uc3QgdW5pdHNTdXBwb3J0ZWQgPSAhdW5pdHMubGVuZ3RoIHx8XG4gICAgICAgICAgICAgICAgICAgIChjb2wuZ2V0VGFnKERHLlRBR1MuVU5JVFMpICYmIHVuaXRzLmluY2x1ZGVzKGNvbC5nZXRUYWcoREcuVEFHUy5VTklUUykpKTtcbiAgICAgICAgICAgICAgICBpZiAoc2VtVHlwZVN1cHBvcnRlZCAmJiB0eXBlU3Vwb3J0ZWQgJiYgdW5pdHNTdXBwb3J0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmNvbHVtbkZ1bmN0aW9uc01hcFtjb2wubmFtZV0pXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbHVtbkZ1bmN0aW9uc01hcFtjb2wubmFtZV0gPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb2x1bW5GdW5jdGlvbnNNYXBbY29sLm5hbWVdLnB1c2goZnVuY05hbWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5yZWdlbmVyYXRlQ29sSW5wdXQoKTtcbiAgICB9XG4gICAgb25Db2x1bW5JbnB1dENoYW5nZWQoKSB7XG4gICAgICAgIGNvbnN0IGNvbCA9IHRoaXMuY29sSW5wdXQudmFsdWU7XG4gICAgICAgIGlmICghY29sKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBjb25zdCBzdXBwb3J0ZWRQcmVwcm9jZXNzaW5nRnVuY3Rpb25zID0gdGhpcy5jb2x1bW5GdW5jdGlvbnNNYXBbY29sLm5hbWVdO1xuICAgICAgICB0aGlzLnByZXByb2Nlc3NpbmdGdW5jdGlvbklucHV0ID0gdWkuY2hvaWNlSW5wdXQoJ1ByZXByb2Nlc3NpbmcgZnVuY3Rpb24nLCBzdXBwb3J0ZWRQcmVwcm9jZXNzaW5nRnVuY3Rpb25zWzBdLCBzdXBwb3J0ZWRQcmVwcm9jZXNzaW5nRnVuY3Rpb25zLCAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLm9uUHJlcHJvY2Vzc2luZ0Z1bmN0aW9uQ2hhbmdlZCgpO1xuICAgICAgICB9KTtcbiAgICAgICAgbGV0IGZsYWcgPSBmYWxzZTtcbiAgICAgICAgaWYgKCF0aGlzLnByZXByb2Nlc3NpbmdGdW5jdGlvbklucHV0Um9vdCkge1xuICAgICAgICAgICAgdGhpcy5wcmVwcm9jZXNzaW5nRnVuY3Rpb25JbnB1dFJvb3QgPSB0aGlzLnByZXByb2Nlc3NpbmdGdW5jdGlvbklucHV0LnJvb3Q7XG4gICAgICAgICAgICBmbGFnID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWZsYWcpIHtcbiAgICAgICAgICAgIHVpLmVtcHR5KHRoaXMucHJlcHJvY2Vzc2luZ0Z1bmN0aW9uSW5wdXRSb290KTtcbiAgICAgICAgICAgIEFycmF5LmZyb20odGhpcy5wcmVwcm9jZXNzaW5nRnVuY3Rpb25JbnB1dC5yb290LmNoaWxkcmVuKVxuICAgICAgICAgICAgICAgIC5mb3JFYWNoKChjaGlsZCkgPT4gdGhpcy5wcmVwcm9jZXNzaW5nRnVuY3Rpb25JbnB1dFJvb3QuYXBwZW5kKGNoaWxkKSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5vblByZXByb2Nlc3NpbmdGdW5jdGlvbkNoYW5nZWQoKTtcbiAgICB9XG4gICAgb25QcmVwcm9jZXNzaW5nRnVuY3Rpb25DaGFuZ2VkKCkge1xuICAgICAgICB1aS5lbXB0eSh0aGlzLnByZXByb2Nlc3NpbmdGdW5jU2V0dGluZ3NEaXYpO1xuICAgICAgICB0aGlzLnByZXByb2Nlc3NpbmdGdW5jdGlvblNldHRpbmdzID0ge307XG4gICAgICAgIGNvbnN0IGZOYW1lID0gdGhpcy5wcmVwcm9jZXNzaW5nRnVuY3Rpb25JbnB1dC52YWx1ZTtcbiAgICAgICAgY29uc3QgZGlzdGFuY2VGcyA9IHRoaXMuc3VwcG9ydGVkRnVuY3Rpb25zW2ZOYW1lXS5kaXN0YW5jZUZ1bmN0aW9ucztcbiAgICAgICAgdGhpcy5hdmFpbGFibGVNZXRyaWNzID0gWy4uLmRpc3RhbmNlRnNdO1xuICAgICAgICB0aGlzLnNpbWlsYXJpdHlNZXRyaWNJbnB1dCA9IHVpLmNob2ljZUlucHV0KCdTaW1pbGFyaXR5JywgdGhpcy5hdmFpbGFibGVNZXRyaWNzWzBdLCB0aGlzLmF2YWlsYWJsZU1ldHJpY3MsIG51bGwpO1xuICAgICAgICB0aGlzLnNpbWlsYXJpdHlNZXRyaWNJbnB1dC5udWxsYWJsZSA9IGZhbHNlO1xuICAgICAgICBpZiAoIXRoaXMuc2ltaWxhcml0eU1ldHJpY0lucHV0Um9vdClcbiAgICAgICAgICAgIHRoaXMuc2ltaWxhcml0eU1ldHJpY0lucHV0Um9vdCA9IHRoaXMuc2ltaWxhcml0eU1ldHJpY0lucHV0LnJvb3Q7XG4gICAgICAgIHVpLmVtcHR5KHRoaXMuc2ltaWxhcml0eU1ldHJpY0lucHV0Um9vdCk7XG4gICAgICAgIEFycmF5LmZyb20odGhpcy5zaW1pbGFyaXR5TWV0cmljSW5wdXQucm9vdC5jaGlsZHJlbilcbiAgICAgICAgICAgIC5mb3JFYWNoKChjaGlsZCkgPT4gdGhpcy5zaW1pbGFyaXR5TWV0cmljSW5wdXRSb290LmFwcGVuZChjaGlsZCkpO1xuICAgICAgICBpZiAodGhpcy5wcmVwcm9jZXNzaW5nRnVuY1NldHRpbmdzSWNvbikge1xuICAgICAgICAgICAgaWYgKHRoaXMuc3VwcG9ydGVkRnVuY3Rpb25zW2ZOYW1lXS5mdW5jLmlucHV0cy5sZW5ndGggPCAzKVxuICAgICAgICAgICAgICAgIHRoaXMucHJlcHJvY2Vzc2luZ0Z1bmNTZXR0aW5nc0ljb24uc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICB0aGlzLnByZXByb2Nlc3NpbmdGdW5jU2V0dGluZ3NJY29uLnN0eWxlLmRpc3BsYXkgPSAnZmxleCc7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY3JlYXRlQWxnb3JpdGhtU2V0dGluZ3NEaXYocGFyYW1zRm9ybSwgcGFyYW1zKSB7XG4gICAgICAgIHVpLmVtcHR5KHBhcmFtc0Zvcm0pO1xuICAgICAgICBPYmplY3Qua2V5cyhwYXJhbXMpLmZvckVhY2goKGl0KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBwYXJhbSA9IHBhcmFtc1tpdF07XG4gICAgICAgICAgICBpZiAoIXBhcmFtLmZvcmNlUmVtb3ZlKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaW5wdXQgPSBwYXJhbS50eXBlID09PSAnc3RyaW5nJyA/XG4gICAgICAgICAgICAgICAgICAgIHVpLnN0cmluZ0lucHV0KHBhcmFtLnVpTmFtZSwgcGFyYW0udmFsdWUgPz8gJycsICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtLnZhbHVlID0gaW5wdXQudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIH0pIDogcGFyYW0udHlwZSA9PT0gJ2Jvb2xlYW4nID9cbiAgICAgICAgICAgICAgICAgICAgdWkuYm9vbElucHV0KHBhcmFtLnVpTmFtZSwgcGFyYW0udmFsdWUgPz8gZmFsc2UsICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtLnZhbHVlID0gaW5wdXQudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIH0pIDpcbiAgICAgICAgICAgICAgICAgICAgdWkuZmxvYXRJbnB1dChwYXJhbS51aU5hbWUsIHBhcmFtLnZhbHVlLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJhbS52YWx1ZSA9IGlucHV0LnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB1aS50b29sdGlwLmJpbmQoaW5wdXQuaW5wdXQgPz8gaW5wdXQucm9vdCwgcGFyYW0udG9vbHRpcCk7XG4gICAgICAgICAgICAgICAgcGFyYW1zRm9ybS5hcHBlbmQoaW5wdXQucm9vdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcGFyYW1zRm9ybTtcbiAgICB9XG4gICAgYXN5bmMgY3JlYXRlUHJlcHJvY2Vzc2luZ0Z1bmNQYXJhbXNEaXYocGFyYW1zRm9ybSwgZnVuYykge1xuICAgICAgICB1aS5lbXB0eShwYXJhbXNGb3JtKTtcbiAgICAgICAgaWYgKGZ1bmMuaW5wdXRzLmxlbmd0aCA8IDMpXG4gICAgICAgICAgICByZXR1cm4gdWkuZGl2KCk7XG4gICAgICAgIGNvbnN0IGZjID0gZnVuYy5wcmVwYXJlKCk7XG4gICAgICAgIGNvbnN0IGlucHV0cyA9IGF3YWl0IGZjLmJ1aWxkRWRpdG9yKHVpLmRpdigpKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDI7IGkgPCBmdW5jLmlucHV0cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgZklucHV0ID0gZnVuYy5pbnB1dHNbaV07XG4gICAgICAgICAgICBpZiAodGhpcy5wcmVwcm9jZXNzaW5nRnVuY3Rpb25TZXR0aW5nc1tmSW5wdXQubmFtZV0gfHwgZmMuaW5wdXRQYXJhbXNbZnVuYy5pbnB1dHNbaV0ubmFtZV0udmFsdWUgfHxcbiAgICAgICAgICAgICAgICBmSW5wdXQuZGVmYXVsdFZhbHVlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wcmVwcm9jZXNzaW5nRnVuY3Rpb25TZXR0aW5nc1tmSW5wdXQubmFtZV0gPVxuICAgICAgICAgICAgICAgICAgICB0aGlzLnByZXByb2Nlc3NpbmdGdW5jdGlvblNldHRpbmdzW2ZJbnB1dC5uYW1lXSA/PyBmYy5pbnB1dFBhcmFtc1tmSW5wdXQubmFtZV0udmFsdWUgPz8gZklucHV0LmRlZmF1bHRWYWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGlucHV0ID0gaW5wdXRzLmZpbmQoKGlucCkgPT4gaW5wLnByb3BlcnR5Lm5hbWUgPT09IGZJbnB1dC5uYW1lKTtcbiAgICAgICAgICAgIGlmICghaW5wdXQpXG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICBpZiAodGhpcy5wcmVwcm9jZXNzaW5nRnVuY3Rpb25TZXR0aW5nc1tmSW5wdXQubmFtZV0gIT09IG51bGwgJiZcbiAgICAgICAgICAgICAgICB0aGlzLnByZXByb2Nlc3NpbmdGdW5jdGlvblNldHRpbmdzW2ZJbnB1dC5uYW1lXSAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgIGlucHV0LnZhbHVlID0gdGhpcy5wcmVwcm9jZXNzaW5nRnVuY3Rpb25TZXR0aW5nc1tmSW5wdXQubmFtZV07XG4gICAgICAgICAgICBpbnB1dC5vbkNoYW5nZWQoKCkgPT4geyB0aGlzLnByZXByb2Nlc3NpbmdGdW5jdGlvblNldHRpbmdzW2ZJbnB1dC5uYW1lXSA9IGlucHV0LnZhbHVlOyB9KTtcbiAgICAgICAgICAgIHBhcmFtc0Zvcm0uYXBwZW5kKGlucHV0LnJvb3QpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwYXJhbXNGb3JtO1xuICAgIH1cbiAgICBnZXRFZGl0b3IoKSB7XG4gICAgICAgIHJldHVybiB1aS5kaXYoW1xuICAgICAgICAgICAgdGhpcy50YWJsZUlucHV0LFxuICAgICAgICAgICAgdGhpcy5jb2xJbnB1dFJvb3QsXG4gICAgICAgICAgICB0aGlzLnByZXByb2Nlc3NpbmdGdW5jdGlvbklucHV0Um9vdCxcbiAgICAgICAgICAgIHRoaXMucHJlcHJvY2Vzc2luZ0Z1bmNTZXR0aW5nc0RpdixcbiAgICAgICAgICAgIHRoaXMubWV0aG9kSW5wdXQsXG4gICAgICAgICAgICB0aGlzLm1ldGhvZFNldHRpbmdzRGl2LFxuICAgICAgICAgICAgdGhpcy5zaW1pbGFyaXR5TWV0cmljSW5wdXRSb290LFxuICAgICAgICAgICAgdGhpcy5wbG90RW1iZWRkaW5nc0lucHV0LFxuICAgICAgICAgICAgdGhpcy5jbHVzdGVyRW1iZWRkaW5nc0lucHV0LFxuICAgICAgICAgICAgdGhpcy5kYlNjYW5TZXR0aW5nc0RpdlxuICAgICAgICBdLCB7IHN0eWxlOiB7IG1pbldpZHRoOiAnMzIwcHgnIH0sIGNsYXNzZXM6ICd1aS1mb3JtJyB9KTtcbiAgICB9XG4gICAgZ2V0UGFyYW1zKCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdGFibGU6IHRoaXMudGFibGVJbnB1dC52YWx1ZSxcbiAgICAgICAgICAgIGNvbDogdGhpcy5jb2xJbnB1dC52YWx1ZSxcbiAgICAgICAgICAgIG1ldGhvZE5hbWU6IHRoaXMubWV0aG9kSW5wdXQudmFsdWUsXG4gICAgICAgICAgICBwcmVwcm9jZXNzaW5nRnVuY3Rpb246IHRoaXMuc3VwcG9ydGVkRnVuY3Rpb25zW3RoaXMucHJlcHJvY2Vzc2luZ0Z1bmN0aW9uSW5wdXQudmFsdWVdLmZ1bmMsXG4gICAgICAgICAgICBzaW1pbGFyaXR5TWV0cmljOiB0aGlzLnNpbWlsYXJpdHlNZXRyaWNJbnB1dC52YWx1ZSxcbiAgICAgICAgICAgIHBsb3RFbWJlZGRpbmdzOiB0aGlzLnBsb3RFbWJlZGRpbmdzSW5wdXQudmFsdWUsXG4gICAgICAgICAgICBjbHVzdGVyRW1iZWRkaW5nczogdGhpcy5jbHVzdGVyRW1iZWRkaW5nc0lucHV0LnZhbHVlLFxuICAgICAgICAgICAgb3B0aW9uczogeyAuLi50aGlzLmFsZ29yaXRobU9wdGlvbnMsIC4uLnRoaXMuZGJTY2FuT3B0aW9ucyxcbiAgICAgICAgICAgICAgICBwcmVwcm9jZXNzaW5nRnVuY0FyZ3M6ICh0aGlzLnByZXByb2Nlc3NpbmdGdW5jdGlvblNldHRpbmdzID8/IHt9KSB9XG4gICAgICAgIH07XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pWkdsdFpXNXphVzl1WVd4cGRIa3RjbVZrZFdOMGFXOXVMV1ZrYVhSdmNpNXFjeUlzSW5OdmRYSmpaVkp2YjNRaU9pSWlMQ0p6YjNWeVkyVnpJanBiSW1ScGJXVnVjMmx2Ym1Gc2FYUjVMWEpsWkhWamRHbHZiaTFsWkdsMGIzSXVkSE1pWFN3aWJtRnRaWE1pT2x0ZExDSnRZWEJ3YVc1bmN5STZJa0ZCUVVFc1QwRkJUeXhMUVVGTExFbEJRVWtzVFVGQlRTeHRRa0ZCYlVJc1EwRkJRenRCUVVNeFF5eFBRVUZQTEV0QlFVc3NSVUZCUlN4TlFVRk5MR2xDUVVGcFFpeERRVUZETzBGQlEzUkRMRTlCUVU4c1MwRkJTeXhGUVVGRkxFMUJRVTBzYVVKQlFXbENMRU5CUVVNN1FVRkRkRU1zVDBGQlR5eEZRVUZETEd0RFFVRnJReXhGUVVGRkxHZERRVUZuUXl4RlFVTXhSU3h6UWtGQmMwSXNSVUZCUlN4dFFrRkJiVUlzUlVGQlJTeHRRa0ZCYlVJc1JVRkJReXhOUVVGTkxGVkJRVlVzUTBGQlF6dEJRVWR3Uml4UFFVRlBMRVZCUVVNc1YwRkJWeXhGUVVGRkxGZEJRVmNzUlVGQlF5eE5RVUZOTERSRlFVRTBSU3hEUVVGRE8wRkJSM0JJTEU5QlFVOHNSVUZCUXl4dFFrRkJiVUlzUlVGQlF5eE5RVUZOTEdkRVFVRm5SQ3hEUVVGRE8wRkJRMjVHTEU5QlFVOHNSVUZCUXl4aFFVRmhMRVZCUVVNc1RVRkJUU3hSUVVGUkxFTkJRVU03UVVGRmNrTXNUVUZCVFN4RFFVRkRMRTFCUVUwc1lVRkJZU3hIUVVGSE8wbEJRek5DTEVOQlFVTXNSVUZCUlN4RFFVRkRMRTlCUVU4c1EwRkJReXhSUVVGUkxFTkJRVU1zUlVGQlJTeFhRVUZYTzBsQlEyeERMRU5CUVVNc1JVRkJSU3hEUVVGRExFOUJRVThzUTBGQlF5eGhRVUZoTEVOQlFVTXNSVUZCUlN4WFFVRlhPME5CUTNoRExFTkJRVU03UVVGNVFrWXNUVUZCVFN4UFFVRlBMR0ZCUVdFN1NVRk5kRUk3VVVGTVFTeFpRVUZQTEVkQlFYVkNPMWxCUXpWQ0xFMUJRVTBzUlVGQlJTeFRRVUZUTEVWQlFVVXNTMEZCU3l4RlFVRkZMRWxCUVVrc1JVRkJSU3hQUVVGUExFVkJRVVVzZVVOQlFYbERMRVZCUVVVc1IwRkJSeXhGUVVGRkxFTkJRVU1zUlVGQlJTeEhRVUZITEVWQlFVVXNRMEZCUXl4RlFVRkZMRWxCUVVrc1JVRkJSU3hMUVVGTE8xTkJRVU1zUTBGQlF6dFJRVU51U0N4WFFVRk5MRWRCUVhWQ08xbEJRek5DTEUxQlFVMHNSVUZCUlN4blFrRkJaMElzUlVGQlJTeExRVUZMTEVWQlFVVXNRMEZCUXl4RlFVRkZMRTlCUVU4c1JVRkJSU3h4UTBGQmNVTXNSVUZCUlN4SFFVRkhMRVZCUVVVc1EwRkJReXhGUVVGRkxFZEJRVWNzUlVGQlJTeEpRVUZKTEVWQlFVVXNTVUZCU1N4RlFVRkZMRU5CUVVNN1UwRkJReXhEUVVGRE8wbEJSVzVITEVOQlFVTTdTVUZCUVN4RFFVRkRPME5CUTNCQ08wRkJRMFFzVFVGQlRTeFBRVUZQTEhOQ1FVRnpRanRKUVd0REwwSXNTVUZCU1N4blFrRkJaMEk3VVVGRGJFSXNUVUZCVFN4bFFVRmxMRWRCUVRoQ0xFbEJRVWtzUTBGQlF5eGhRVUZoTEVOQlFVTXNTVUZCU1N4RFFVRkRMRmRCUVZjc1EwRkJReXhMUVVGTkxFTkJRVU1zUTBGQlF6dFJRVU12Uml4TlFVRk5MRTlCUVU4c1IwRkJVU3hGUVVGRkxFTkJRVU03VVVGRGVFSXNUVUZCVFN4RFFVRkRMRWxCUVVrc1EwRkJReXhsUVVGbExFTkJRVU1zUTBGQlF5eFBRVUZQTEVOQlFVTXNRMEZCUXl4SFFVRlhMRVZCUVVVc1JVRkJSVHRaUVVOdVJDeEpRVUZMTEdWQlFYVkNMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU1zUzBGQlN5eEpRVUZKTEVsQlFVazdaMEpCUXpkRExFOUJRVThzUTBGQlF5eEhRVUZITEVOQlFVTXNSMEZCU1N4bFFVRjFRaXhEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETEV0QlFVc3NRMEZCUXp0UlFVTjJSQ3hEUVVGRExFTkJRVU1zUTBGQlF6dFJRVU5JTEU5QlFVOHNUMEZCVHl4RFFVRkRPMGxCUTJwQ0xFTkJRVU03U1VGRlJDeEpRVUZKTEdGQlFXRTdVVUZEWml4UFFVRlBPMWxCUTB3c1lVRkJZU3hGUVVGRkxFbEJRVWtzUTBGQlF5eFpRVUZaTEVOQlFVTXNUMEZCVHl4RFFVRkRMRXRCUVVzc1NVRkJTU3hKUVVGSk8xbEJRM1JFTEZsQlFWa3NSVUZCUlN4SlFVRkpMRU5CUVVNc1dVRkJXU3hEUVVGRExFMUJRVTBzUTBGQlF5eExRVUZMTEVsQlFVa3NRMEZCUXp0VFFVTnNSQ3hEUVVGRE8wbEJRMG9zUTBGQlF6dEpRVVZFTEZsQlFWa3NhVUpCUVRSRExFVkJRVVU3VVVGc1JERkVMRzFDUVVGakxFZEJRVGhDTEVWQlFVVXNRMEZCUXp0UlFVa3ZReXgzUWtGQmJVSXNSMEZCUnl4RlFVRkZMRU5CUVVNc1UwRkJVeXhEUVVGRExHbENRVUZwUWl4RlFVRkZMRWxCUVVrc1EwRkJReXhEUVVGRE8xRkJRelZFTERKQ1FVRnpRaXhIUVVGSExFVkJRVVVzUTBGQlF5eFRRVUZUTEVOQlFVTXNiMEpCUVc5Q0xFVkJRVVVzU1VGQlNTeERRVUZETEVOQlFVTTdVVUZEYkVVc2JVTkJRVGhDTEVkQlFYVkNMRWxCUVVrc1EwRkJRenRSUVVVeFJDeFpRVUZQTEVkQlFUQkNMRU5CUVVNc2JVSkJRVzFDTEVOQlFVTXNTVUZCU1N4RlFVRkZMRzFDUVVGdFFpeERRVUZETEV0QlFVc3NRMEZCUXl4RFFVRkRPMUZCUzNaR0xIVkNRVUZyUWl4SFFVRTRRaXhGUVVGRkxFTkJRVU03VVVGRGJrUXNkVUpCUVd0Q0xFZEJUV0lzUlVGQlJTeERRVUZETzFGQlExSXNjVUpCUVdkQ0xFZEJRV0VzUlVGQlJTeERRVUZETzFGQlJXaERMSE5DUVVGcFFpeEhRVUZITEVWQlFVVXNRMEZCUXl4TlFVRk5MRU5CUVVNc1JVRkJSU3hEUVVGRExFTkJRVU03VVVGRGJFTXNjMEpCUVdsQ0xFZEJRVWNzUlVGQlJTeERRVUZETEUxQlFVMHNRMEZCUXl4RlFVRkZMRU5CUVVNc1EwRkJRenRSUVVOc1F5eHBRMEZCTkVJc1IwRkJSeXhGUVVGRkxFTkJRVU1zVFVGQlRTeERRVUZETEVWQlFVVXNRMEZCUXl4RFFVRkRPMUZCUXpkRExHdERRVUUyUWl4SFFVRlpMRVZCUVVVc1EwRkJRenRSUVVNMVF5eHJRa0ZCWVN4SFFVRXJRenRaUVVNeFJDeERRVUZETEcxQ1FVRnRRaXhEUVVGRExFbEJRVWtzUTBGQlF5eEZRVUZGTEVsQlFVa3NWMEZCVnl4RlFVRkZPMWxCUXpkRExFTkJRVU1zYlVKQlFXMUNMRU5CUVVNc1MwRkJTeXhEUVVGRExFVkJRVVVzU1VGQlNTeFhRVUZYTEVWQlFVVTdVMEZETDBNc1EwRkJRenRSUVVOR0xHbENRVUZaTEVkQlFVY3NTVUZCU1N4aFFVRmhMRVZCUVVVc1EwRkJRenRSUVc5Q2FrTXNTVUZCU1N4RFFVRkRMR05CUVdNc1IwRkJSeXhqUVVGakxFTkJRVU03VVVGRGNrTXNTVUZCU1N4SlFVRkpMRU5CUVVNc1kwRkJZeXhEUVVGRExGTkJRVk03V1VGREwwSXNTVUZCU1N4RFFVRkRMRTlCUVU4c1EwRkJReXhKUVVGSkxFTkJRVU1zWVVGQmIwSXNRMEZCUXl4RFFVRkRPMUZCUlRGRExFMUJRVTBzYTBKQlFXdENMRWRCUVVjc1JVRkJSU3hEUVVGRExFbEJRVWtzUTBGQlF5eEpRVUZKTEVOQlFVTXNSVUZCUXl4SlFVRkpMRVZCUVVVc1EwRkJReXhyUTBGQmEwTXNRMEZCUXl4RlFVRkRMRU5CUVVNc1EwRkJRenRSUVVOMFJpeHRSVUZCYlVVN1VVRkRia1VzYTBKQlFXdENMRU5CUVVNc1QwRkJUeXhEUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZGTEVWQlFVVTdXVUZETDBJc1RVRkJUU3hSUVVGUkxFZEJRVmNzUTBGQlF5eERRVUZETEU5QlFVOHNRMEZCUXl4SFFVRkhMRU5CUVVNc2MwSkJRWE5DTEVOQlFVTXNTVUZCU1N4RlFVRkZMRU5CUVVNN1dVRkRja1VzVFVGQlRTeEpRVUZKTEVkQlFVY3NRMEZCUXl4RFFVRkRMRmxCUVZrc1NVRkJTU3hEUVVGRExFTkJRVU1zU1VGQlNTeERRVUZETzFsQlEzUkRMRTFCUVUwc1MwRkJTeXhIUVVGWExFTkJRVU1zUTBGQlF5eFBRVUZQTEVOQlFVTXNSMEZCUnl4RFFVRkRMRzFDUVVGdFFpeERRVUZETEVsQlFVa3NSVUZCUlN4RFFVRkRPMWxCUXk5RUxFMUJRVTBzUzBGQlN5eEhRVUZYTEVOQlFVTXNRMEZCUXl4UFFVRlBMRU5CUVVNc1IwRkJSeXhEUVVGRExHMUNRVUZ0UWl4RFFVRkRMRWxCUVVrc1JVRkJSU3hEUVVGRE8xbEJReTlFTEUxQlFVMHNhVUpCUVdsQ0xFZEJRVmNzUTBGQlF5eERRVUZETEU5QlFVOHNRMEZCUXl4SFFVRkhMRU5CUVVNc1owTkJRV2RETEVOQlFVTXNTVUZCU1N4RlFVRkZMRU5CUVVNN1dVRkRlRVlzU1VGQlNTeEpRVUZKTEVOQlFVTXNZMEZCWXl4RFFVRkRMRTlCUVU4c1NVRkJTU3hEUVVGRExGRkJRVkVzUTBGQlF5eFJRVUZSTEVOQlFVTXNTVUZCU1N4RFFVRkRMR05CUVdNc1EwRkJReXhQUVVGUExFTkJRVU03WjBKQlEyaEdMRTlCUVU4N1dVRkRWQ3hKUVVGSkxFbEJRVWtzUTBGQlF5eGpRVUZqTEVOQlFVTXNTVUZCU1N4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExGRkJRVkVzUTBGQlF5eEpRVUZKTEVOQlFVTXNZMEZCWXl4RFFVRkRMRWxCUVVrc1EwRkJRenRuUWtGRGRrVXNUMEZCVHp0WlFVTlVMRWxCUVVrc1NVRkJTU3hEUVVGRExHTkJRV01zUTBGQlF5eExRVUZMTEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1VVRkJVU3hEUVVGRExFbEJRVWtzUTBGQlF5eGpRVUZqTEVOQlFVTXNTMEZCU3l4RFFVRkRPMmRDUVVONlJTeFBRVUZQTzFsQlJWUXNTVUZCU1N4RFFVRkRMR3RDUVVGclFpeERRVUZETEVsQlFVa3NRMEZCUXl4SFFVRkhPMmRDUVVNNVFpeEpRVUZKTEVWQlFVVXNRMEZCUXp0blFrRkRVQ3hSUVVGUkxFVkJRVVVzVVVGQlVTeERRVUZETEVOQlFVTXNRMEZCUXl4UlFVRlJMRU5CUVVNc1MwRkJTeXhEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkZPMmRDUVVNM1F5eExRVUZMTEVWQlFVVXNTMEZCU3l4RFFVRkRMRU5CUVVNc1EwRkJReXhMUVVGTExFTkJRVU1zUzBGQlN5eERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRk8yZENRVU53UXl4TFFVRkxMRVZCUVVVc1MwRkJTeXhEUVVGRExFTkJRVU1zUTBGQlF5eExRVUZMTEVOQlFVTXNTMEZCU3l4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZGTzJkQ1FVTndReXhwUWtGQmFVSXNSVUZCUlN4cFFrRkJhVUlzUTBGQlF5eERRVUZETEVOQlFVTXNhVUpCUVdsQ0xFTkJRVU1zUzBGQlN5eERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRk8yRkJRM3BGTEVOQlFVTTdVVUZEU2l4RFFVRkRMRU5CUVVNc1EwRkJRenRSUVVWSUxFbEJRVWtzUTBGQlF5eFZRVUZWTEVkQlFVY3NSVUZCUlN4RFFVRkRMRlZCUVZVc1EwRkJReXhQUVVGUExFVkJRVVVzU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4RlFVRkZMRU5CUVVNc1UwRkJVeXhGUVVGRkxFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNUVUZCVFN4RlFVRkZMRWRCUVVjc1JVRkJSVHRaUVVONFJpeEpRVUZKTEVOQlFVTXNiVUpCUVcxQ0xFVkJRVVVzUTBGQlF6dFJRVU0zUWl4RFFVRkRMRU5CUVVNc1EwRkJRenRSUVVOSUxFbEJRVWtzUTBGQlF5eHRRa0ZCYlVJc1JVRkJSU3hEUVVGRE8xRkJSVE5DTEVsQlFVa3NRMEZCUXl4clFrRkJhMElzUlVGQlJTeERRVUZETzFGQlF6RkNMRWxCUVVrc1EwRkJReXh2UWtGQmIwSXNSVUZCUlN4RFFVRkRPMUZCUXpWQ0xFbEJRVWtzWTBGQll5eEhRVUZITEV0QlFVc3NRMEZCUXp0UlFVTXpRaXhKUVVGSkxHOUNRVUZ2UWl4SFFVRkhMRXRCUVVzc1EwRkJRenRSUVVOcVF5eEpRVUZKTEVOQlFVTXNWMEZCVnl4SFFVRkhMRVZCUVVVc1EwRkJReXhYUVVGWExFTkJRVU1zVVVGQlVTeEZRVUZGTEcxQ1FVRnRRaXhEUVVGRExFbEJRVWtzUlVGRGJFVXNTVUZCU1N4RFFVRkRMRTlCUVU4c1JVRkJSU3hIUVVGSExFVkJRVVU3V1VGRGFrSXNTVUZCU1N4alFVRmpPMmRDUVVOb1FpeEpRVUZKTEVOQlFVTXNNRUpCUVRCQ0xFTkJRVU1zU1VGQlNTeERRVUZETEdsQ1FVRnBRaXhGUVVGRkxFbEJRVWtzUTBGQlF5eGhRVUZoTEVOQlFVTXNTVUZCU1N4RFFVRkRMRmRCUVZjc1EwRkJReXhMUVVGTkxFTkJRVU1zUTBGQlF5eERRVUZETzFGQlEzcEhMRU5CUVVNc1EwRkJReXhEUVVGRE8xRkJRMHdzU1VGQlNTeERRVUZETEd0Q1FVRnJRaXhIUVVGSExFVkJRVVVzUTBGQlF5eExRVUZMTEVOQlFVTXNVVUZCVVN4RFFVRkRMRWRCUVVVc1JVRkJSVHRaUVVNNVF5eGpRVUZqTEVkQlFVY3NRMEZCUXl4alFVRmpMRU5CUVVNN1dVRkRha01zU1VGQlNTeERRVUZETEdOQlFXTTdaMEpCUTJwQ0xFVkJRVVVzUTBGQlF5eExRVUZMTEVOQlFVTXNTVUZCU1N4RFFVRkRMR2xDUVVGcFFpeERRVUZETEVOQlFVTTdPMmRDUVVWcVF5eEpRVUZKTEVOQlFVTXNNRUpCUVRCQ0xFTkJRVU1zU1VGQlNTeERRVUZETEdsQ1FVRnBRaXhGUVVGRkxFbEJRVWtzUTBGQlF5eGhRVUZoTEVOQlFVTXNTVUZCU1N4RFFVRkRMRmRCUVZjc1EwRkJReXhMUVVGTkxFTkJRVU1zUTBGQlF5eERRVUZETzFGQlEzcEhMRU5CUVVNc1JVRkJSU3d5UWtGQk1rSXNRMEZCUXl4RFFVRkRPMUZCUTJoRExFbEJRVWtzUTBGQlF5eHJRa0ZCYTBJc1IwRkJSeXhGUVVGRkxFTkJRVU1zUzBGQlN5eERRVUZETEZGQlFWRXNRMEZCUXl4SFFVRkZMRVZCUVVVN1dVRkRPVU1zYjBKQlFXOUNMRWRCUVVjc1EwRkJReXh2UWtGQmIwSXNRMEZCUXp0WlFVTTNReXhKUVVGSkxFTkJRVU1zYjBKQlFXOUNPMmRDUVVOMlFpeEZRVUZGTEVOQlFVTXNTMEZCU3l4RFFVRkRMRWxCUVVrc1EwRkJReXhwUWtGQmFVSXNRMEZCUXl4RFFVRkRPenRuUWtGRmFrTXNTVUZCU1N4RFFVRkRMREJDUVVFd1FpeERRVUZETEVsQlFVa3NRMEZCUXl4cFFrRkJhVUlzUlVGQlJTeEpRVUZKTEVOQlFVTXNXVUZCV1N4RFFVRkRMRU5CUVVNN1VVRkRMMFVzUTBGQlF5eEZRVUZGTERoQ1FVRTRRaXhEUVVGRExFTkJRVU03VVVGRGJrTXNTVUZCU1N4RFFVRkRMSE5DUVVGelFpeERRVUZETEZOQlFWTXNRMEZCUXl4SFFVRkhMRU5CUVVNc2FVTkJRV2xETEVOQlFVTXNRMEZCUXp0UlFVTTNSU3hKUVVGSkxFTkJRVU1zYzBKQlFYTkNMRU5CUVVNc1NVRkJTU3hEUVVGRExFOUJRVThzUTBGQlF5eEpRVUZKTEVOQlFVTXNhMEpCUVd0Q0xFTkJRVU1zUTBGQlF6dFJRVU5zUlN4SlFVRkpMRU5CUVVNc1YwRkJWeXhEUVVGRExFbEJRVWtzUTBGQlF5eFRRVUZUTEVOQlFVTXNSMEZCUnl4RFFVRkRMR2xEUVVGcFF5eERRVUZETEVOQlFVTTdVVUZEZGtVc1NVRkJTU3hEUVVGRExGZEJRVmNzUTBGQlF5eEpRVUZKTEVOQlFVTXNUMEZCVHl4RFFVRkRMRWxCUVVrc1EwRkJReXhyUWtGQmEwSXNRMEZCUXl4RFFVRkRPMUZCUTNaRUxFbEJRVWtzUTBGQlF5eHBRa0ZCYVVJc1IwRkJSeXhGUVVGRkxFTkJRVU1zVFVGQlRTeERRVUZETEVWQlFVVXNRMEZCUXl4RFFVRkRPMUZCUTNaRExFMUJRVTBzVTBGQlV5eEhRVUZITEVsQlFVa3NRMEZCUXl4clFrRkJhMElzUTBGQlF5eEpRVUZKTEVOQlFVTXNVVUZCVVN4RFFVRkRMRXRCUVUwc1EwRkJReXhKUVVGSkxFTkJRVU1zUTBGQlF6dFJRVVZ5UlN4SlFVRkpMRU5CUVVNc01FSkJRVEJDTEVkQlFVY3NSVUZCUlN4RFFVRkRMRmRCUVZjc1EwRkJReXh0UWtGQmJVSXNSVUZCUlN4VFFVRlRMRU5CUVVNc1EwRkJReXhEUVVGRExFVkJRVVVzVTBGQlV5eEZRVUZGTEVkQlFVY3NSVUZCUlR0WlFVTnNSeXhKUVVGSkxFTkJRVU1zT0VKQlFUaENMRVZCUVVVc1EwRkJRenRSUVVONFF5eERRVUZETEVOQlFVTXNRMEZCUXp0UlFVTklMRWxCUVVrc1QwRkJUeXhIUVVGSExFdEJRVXNzUTBGQlF6dFJRVU53UWl4SlFVRkpMRU5CUVVNc1NVRkJTU3hEUVVGRExEaENRVUU0UWl4RlFVRkZPMWxCUTNoRExFbEJRVWtzUTBGQlF5dzRRa0ZCT0VJc1IwRkJSeXhKUVVGSkxFTkJRVU1zTUVKQlFUQkNMRU5CUVVNc1NVRkJTU3hEUVVGRE8xbEJRek5GTEU5QlFVOHNSMEZCUnl4SlFVRkpMRU5CUVVNN1UwRkRhRUk3VVVGRFJDeEpRVUZKTEVOQlFVTXNUMEZCVHl4RlFVRkZPMWxCUTFvc1JVRkJSU3hEUVVGRExFdEJRVXNzUTBGQlF5eEpRVUZKTEVOQlFVTXNPRUpCUVRoQ0xFTkJRVU1zUTBGQlF6dFpRVU01UXl4TFFVRkxMRU5CUVVNc1NVRkJTU3hEUVVGRExFbEJRVWtzUTBGQlF5d3dRa0ZCTUVJc1EwRkJReXhKUVVGSkxFTkJRVU1zVVVGQlVTeERRVUZETzJsQ1FVTjBSQ3hQUVVGUExFTkJRVU1zUTBGQlF5eExRVUZMTEVWQlFVVXNSVUZCUlN4RFFVRkRMRWxCUVVrc1EwRkJReXc0UWtGQkswSXNRMEZCUXl4TlFVRk5MRU5CUVVNc1MwRkJTeXhEUVVGRExFTkJRVU1zUTBGQlF6dFRRVU16UlR0UlFVTkVMRWxCUVVrc1EwRkJReXc0UWtGQk9FSXNRMEZCUXl4VFFVRlRMRU5CUVVNc1IwRkJSeXhEUVVGRExHbERRVUZwUXl4RFFVRkRMRU5CUVVNN1VVRkRja1lzU1VGQlNTd3lRa0ZCTWtJc1IwRkJSeXhMUVVGTExFTkJRVU03VVVGRGVFTXNTVUZCU1N4RFFVRkRMRFpDUVVFMlFpeEhRVUZITEVWQlFVVXNRMEZCUXl4TFFVRkxMRU5CUVVNc1VVRkJVU3hEUVVGRExFdEJRVXNzU1VGQlJ5eEZRVUZGTzFsQlF5OUVMRWxCUVVrc1EwRkJReXd5UWtGQk1rSXNSVUZCUlR0blFrRkRhRU1zVFVGQlRTeEpRVUZKTEVOQlFVTXNaME5CUVdkRExFTkJRM3BETEVsQlFVa3NRMEZCUXl3MFFrRkJORUlzUlVGQlJTeEpRVUZKTEVOQlFVTXNhMEpCUVd0Q0xFTkJRVU1zU1VGQlNTeERRVUZETERCQ1FVRXdRaXhEUVVGRExFdEJRVTBzUTBGQlF5eERRVUZETEVsQlFVa3NRMEZCUXl4RFFVRkRPMkZCUXpWSE8ybENRVUZOTzJkQ1FVRkZMRVZCUVVVc1EwRkJReXhMUVVGTExFTkJRVU1zU1VGQlNTeERRVUZETERSQ1FVRTBRaXhEUVVGRExFTkJRVU03WVVGQlJUdFpRVU4yUkN3eVFrRkJNa0lzUjBGQlJ5eERRVUZETERKQ1FVRXlRaXhEUVVGRE8xRkJRemRFTEVOQlFVTXNSVUZCUlN4eFEwRkJjVU1zUTBGQlF5eERRVUZETzFGQlF6RkRMRWxCUVVrc1EwRkJReXc0UWtGQk9FSXNRMEZCUXl4UFFVRlBMRU5CUVVNc1NVRkJTU3hEUVVGRExEWkNRVUUyUWl4RFFVRkRMRU5CUVVNN1VVRkZhRVlzU1VGQlNTeERRVUZETEhGQ1FVRnhRaXhIUVVGSExFVkJRVVVzUTBGQlF5eFhRVUZYTEVOQlFVTXNXVUZCV1N4RlFVRkZMRVZCUVVVc1JVRkJSU3hGUVVGRkxFVkJRVVVzU1VGQlNTeERRVUZETEVOQlFVTTdVVUZEZUVVc1NVRkJTU3hEUVVGRExIRkNRVUZ4UWl4RFFVRkRMRkZCUVZFc1IwRkJSeXhMUVVGTExFTkJRVU03VVVGRE5VTXNTVUZCU1N4RFFVRkRMRWxCUVVrc1EwRkJReXg1UWtGQmVVSTdXVUZEYWtNc1NVRkJTU3hEUVVGRExIbENRVUY1UWl4SFFVRkhMRWxCUVVrc1EwRkJReXh4UWtGQmNVSXNRMEZCUXl4SlFVRkpMRU5CUVVNN1VVRkRia1VzU1VGQlNTeERRVUZETERoQ1FVRTRRaXhGUVVGRkxFTkJRVU03U1VGRGVFTXNRMEZCUXp0SlFVVlBMRmRCUVZjN1VVRkRha0lzVFVGQlRTeHZRa0ZCYjBJc1IwRkJSeXhKUVVGSkxFTkJRVU1zVlVGQlZTeERRVUZETEV0QlFVc3NSVUZCUlN4UFFVRlBMRU5CUVVNc1RVRkJUU3hGUVVGRk8yRkJRMnBGTEVsQlFVa3NRMEZCUXl4RFFVRkRMRWRCUVVjc1JVRkJSU3hGUVVGRkxFTkJRVU1zUTBGQlF5eERRVUZETEVsQlFVa3NRMEZCUXl4clFrRkJhMElzUTBGQlF5eEhRVUZITEVOQlFVTXNTVUZCU1N4RFFVRkRMRU5CUVVNc1NVRkJTU3hKUVVGSkxFTkJRVU03VVVGRE9VUXNUVUZCVFN4TFFVRkxMRWRCUVVjc1JVRkJSU3hEUVVGRExGZEJRVmNzUTBGQlF5eFJRVUZSTEVWQlFVVXNTVUZCU1N4RFFVRkRMRlZCUVZVc1EwRkJReXhMUVVGTkxFVkJRVVVzYjBKQlFXOUNMRVZCUTJwR0xFZEJRVWNzUlVGQlJTeERRVUZETEVsQlFVa3NRMEZCUXl4dlFrRkJiMElzUlVGQlJTeEZRVUZGTEVWQlFVTXNUVUZCVFN4RlFVRkZMRU5CUVVNc1IwRkJZeXhGUVVGRkxFVkJRVVVzUTBGQlF5eERRVUZETEVOQlFVTXNTVUZCU1N4RFFVRkRMR3RDUVVGclFpeERRVUZETEVkQlFVY3NRMEZCUXl4SlFVRkpMRU5CUVVNc1JVRkJReXhEUVVGRExFTkJRVU03VVVGRGVFY3NTVUZCU1N4RFFVRkRMRWxCUVVrc1EwRkJReXhaUVVGWk8xbEJRM0JDTEVsQlFVa3NRMEZCUXl4WlFVRlpMRWRCUVVjc1MwRkJTeXhEUVVGRExFbEJRVWtzUTBGQlF6dFJRVU5xUXl4UFFVRlBMRXRCUVVzc1EwRkJRenRKUVVObUxFTkJRVU03U1VGRlR5eHJRa0ZCYTBJN1VVRkRlRUlzU1VGQlNTeEpRVUZKTEVkQlFVY3NTMEZCU3l4RFFVRkRPMUZCUTJwQ0xFbEJRVWtzU1VGQlNTeERRVUZETEZsQlFWa3NSVUZCUlR0WlFVTnlRaXhKUVVGSkxFZEJRVWNzU1VGQlNTeERRVUZETzFsQlExb3NSVUZCUlN4RFFVRkRMRXRCUVVzc1EwRkJReXhKUVVGSkxFTkJRVU1zV1VGQldTeERRVUZETEVOQlFVTTdVMEZETjBJN1VVRkRSQ3hKUVVGSkxFTkJRVU1zVVVGQlVTeEhRVUZITEVsQlFVa3NRMEZCUXl4WFFVRlhMRVZCUVVVc1EwRkJRenRSUVVOdVF5eEpRVUZKTEVsQlFVazdXVUZEVGl4TFFVRkxMRU5CUVVNc1NVRkJTU3hEUVVGRExFbEJRVWtzUTBGQlF5eFJRVUZSTEVOQlFVTXNTVUZCU1N4RFFVRkRMRkZCUVZFc1EwRkJReXhEUVVGRExFOUJRVThzUTBGQlF5eERRVUZETEV0QlFVc3NSVUZCUlN4RlFVRkZMRU5CUVVNc1NVRkJTU3hEUVVGRExGbEJRVmtzUTBGQlF5eE5RVUZOTEVOQlFVTXNTMEZCU3l4RFFVRkRMRU5CUVVNc1EwRkJRenRSUVVNNVJpeEpRVUZKTEVOQlFVTXNiMEpCUVc5Q0xFVkJRVVVzUTBGQlF6dEpRVU01UWl4RFFVRkRPMGxCUlVRc2JVSkJRVzFDTzFGQlEycENMRTFCUVUwc1MwRkJTeXhIUVVGSExFbEJRVWtzUTBGQlF5eFZRVUZWTEVOQlFVTXNTMEZCU3l4RFFVRkRPMUZCUTNCRExFbEJRVWtzUTBGQlF5eExRVUZMTzFsQlExSXNUMEZCVHp0UlFVTlVMRWxCUVVrc1EwRkJReXhyUWtGQmEwSXNSMEZCUnl4RlFVRkZMRU5CUVVNN1VVRkROMElzVFVGQlRTeFBRVUZQTEVkQlFVY3NTMEZCU3l4RFFVRkRMRTlCUVU4c1EwRkJReXhOUVVGTkxFVkJRVVVzUTBGQlF6dFJRVU4yUXl4UFFVRlBMRU5CUVVNc1QwRkJUeXhEUVVGRExFTkJRVU1zUjBGQlJ5eEZRVUZGTEVWQlFVVTdXVUZEZEVJc1RVRkJUU3hEUVVGRExFbEJRVWtzUTBGQlF5eEpRVUZKTEVOQlFVTXNhMEpCUVd0Q0xFTkJRVU1zUTBGQlF5eFBRVUZQTEVOQlFVTXNRMEZCUXl4UlFVRlJMRVZCUVVVc1JVRkJSVHRuUWtGRGVFUXNUVUZCVFN4UlFVRlJMRWRCUVVjc1NVRkJTU3hEUVVGRExHdENRVUZyUWl4RFFVRkRMRkZCUVZFc1EwRkJReXhEUVVGRExGRkJRVkVzUTBGQlF6dG5Ra0ZETlVRc1RVRkJUU3hMUVVGTExFZEJRVWNzU1VGQlNTeERRVUZETEd0Q1FVRnJRaXhEUVVGRExGRkJRVkVzUTBGQlF5eERRVUZETEV0QlFVc3NRMEZCUXp0blFrRkRkRVFzVFVGQlRTeExRVUZMTEVkQlFVY3NTVUZCU1N4RFFVRkRMR3RDUVVGclFpeERRVUZETEZGQlFWRXNRMEZCUXl4RFFVRkRMRXRCUVVzc1EwRkJRenRuUWtGRGRFUXNUVUZCVFN4blFrRkJaMElzUjBGQlJ5eERRVUZETEZGQlFWRXNRMEZCUXl4TlFVRk5MRWxCUVVrc1EwRkJReXhIUVVGSExFTkJRVU1zVDBGQlR5eEpRVUZKTEZGQlFWRXNRMEZCUXl4UlFVRlJMRU5CUVVNc1IwRkJSeXhEUVVGRExFOUJRVThzUTBGQlF5eERRVUZETEVOQlFVTTdaMEpCUXpkR0xFMUJRVTBzV1VGQldTeEhRVUZITEVOQlFVTXNTMEZCU3l4RFFVRkRMRTFCUVUwc1NVRkJTU3hMUVVGTExFTkJRVU1zVVVGQlVTeERRVUZETEVkQlFVY3NRMEZCUXl4SlFVRkpMRU5CUVVNc1EwRkJRenRuUWtGREwwUXNUVUZCVFN4alFVRmpMRWRCUVVjc1EwRkJReXhMUVVGTExFTkJRVU1zVFVGQlRUdHZRa0ZEYkVNc1EwRkJReXhIUVVGSExFTkJRVU1zVFVGQlRTeERRVUZETEVWQlFVVXNRMEZCUXl4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExFbEJRVWtzUzBGQlN5eERRVUZETEZGQlFWRXNRMEZCUXl4SFFVRkhMRU5CUVVNc1RVRkJUU3hEUVVGRExFVkJRVVVzUTBGQlF5eEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE8yZENRVU16UlN4SlFVRkpMR2RDUVVGblFpeEpRVUZKTEZsQlFWa3NTVUZCU1N4alFVRmpMRVZCUVVVN2IwSkJRM1JFTEVsQlFVa3NRMEZCUXl4SlFVRkpMRU5CUVVNc2EwSkJRV3RDTEVOQlFVTXNSMEZCUnl4RFFVRkRMRWxCUVVrc1EwRkJRenQzUWtGRGNFTXNTVUZCU1N4RFFVRkRMR3RDUVVGclFpeERRVUZETEVkQlFVY3NRMEZCUXl4SlFVRkpMRU5CUVVNc1IwRkJSeXhGUVVGRkxFTkJRVU03YjBKQlEzcERMRWxCUVVrc1EwRkJReXhyUWtGQmEwSXNRMEZCUXl4SFFVRkhMRU5CUVVNc1NVRkJTU3hEUVVGRExFTkJRVU1zU1VGQlNTeERRVUZETEZGQlFWRXNRMEZCUXl4RFFVRkRPMmxDUVVOc1JEdFpRVU5JTEVOQlFVTXNRMEZCUXl4RFFVRkRPMUZCUTB3c1EwRkJReXhEUVVGRExFTkJRVU03VVVGRFNDeEpRVUZKTEVOQlFVTXNhMEpCUVd0Q0xFVkJRVVVzUTBGQlF6dEpRVU0xUWl4RFFVRkRPMGxCUlU4c2IwSkJRVzlDTzFGQlF6RkNMRTFCUVUwc1IwRkJSeXhIUVVGSExFbEJRVWtzUTBGQlF5eFJRVUZSTEVOQlFVTXNTMEZCU3l4RFFVRkRPMUZCUTJoRExFbEJRVWtzUTBGQlF5eEhRVUZITzFsQlEwNHNUMEZCVHp0UlFVTlVMRTFCUVUwc0swSkJRU3RDTEVkQlFVY3NTVUZCU1N4RFFVRkRMR3RDUVVGclFpeERRVUZETEVkQlFVY3NRMEZCUXl4SlFVRkpMRU5CUVVNc1EwRkJRenRSUVVNeFJTeEpRVUZKTEVOQlFVTXNNRUpCUVRCQ0xFZEJRVWNzUlVGQlJTeERRVUZETEZkQlFWY3NRMEZCUXl4M1FrRkJkMElzUlVGRGRrVXNLMEpCUVN0Q0xFTkJRVU1zUTBGQlF5eERRVUZETEVWQlFVVXNLMEpCUVN0Q0xFVkJRVVVzUjBGQlJ5eEZRVUZGTzFsQlEzaEZMRWxCUVVrc1EwRkJReXc0UWtGQk9FSXNSVUZCUlN4RFFVRkRPMUZCUTNoRExFTkJRVU1zUTBGQlF5eERRVUZETzFGQlEwd3NTVUZCU1N4SlFVRkpMRWRCUVVjc1MwRkJTeXhEUVVGRE8xRkJRMnBDTEVsQlFVa3NRMEZCUXl4SlFVRkpMRU5CUVVNc09FSkJRVGhDTEVWQlFVVTdXVUZEZUVNc1NVRkJTU3hEUVVGRExEaENRVUU0UWl4SFFVRkhMRWxCUVVrc1EwRkJReXd3UWtGQk1FSXNRMEZCUXl4SlFVRkpMRU5CUVVNN1dVRkRNMFVzU1VGQlNTeEhRVUZITEVsQlFVa3NRMEZCUXp0VFFVTmlPMUZCUTBRc1NVRkJTU3hEUVVGRExFbEJRVWtzUlVGQlJUdFpRVU5VTEVWQlFVVXNRMEZCUXl4TFFVRkxMRU5CUVVNc1NVRkJTU3hEUVVGRExEaENRVUU0UWl4RFFVRkRMRU5CUVVNN1dVRkRPVU1zUzBGQlN5eERRVUZETEVsQlFVa3NRMEZCUXl4SlFVRkpMRU5CUVVNc01FSkJRVEJDTEVOQlFVTXNTVUZCU1N4RFFVRkRMRkZCUVZFc1EwRkJRenRwUWtGRGRFUXNUMEZCVHl4RFFVRkRMRU5CUVVNc1MwRkJTeXhGUVVGRkxFVkJRVVVzUTBGQlF5eEpRVUZKTEVOQlFVTXNPRUpCUVN0Q0xFTkJRVU1zVFVGQlRTeERRVUZETEV0QlFVc3NRMEZCUXl4RFFVRkRMRU5CUVVNN1UwRkRNMFU3VVVGRFJDeEpRVUZKTEVOQlFVTXNPRUpCUVRoQ0xFVkJRVVVzUTBGQlF6dEpRVU40UXl4RFFVRkRPMGxCUlU4c09FSkJRVGhDTzFGQlEzQkRMRVZCUVVVc1EwRkJReXhMUVVGTExFTkJRVU1zU1VGQlNTeERRVUZETERSQ1FVRTBRaXhEUVVGRExFTkJRVU03VVVGRE5VTXNTVUZCU1N4RFFVRkRMRFpDUVVFMlFpeEhRVUZITEVWQlFVVXNRMEZCUXp0UlFVTjRReXhOUVVGTkxFdEJRVXNzUjBGQlJ5eEpRVUZKTEVOQlFVTXNNRUpCUVRCQ0xFTkJRVU1zUzBGQlRTeERRVUZETzFGQlEzSkVMRTFCUVUwc1ZVRkJWU3hIUVVGSExFbEJRVWtzUTBGQlF5eHJRa0ZCYTBJc1EwRkJReXhMUVVGTExFTkJRVU1zUTBGQlF5eHBRa0ZCYVVJc1EwRkJRenRSUVVOd1JTeEpRVUZKTEVOQlFVTXNaMEpCUVdkQ0xFZEJRVWNzUTBGQlF5eEhRVUZITEZWQlFWVXNRMEZCUXl4RFFVRkRPMUZCUTNoRExFbEJRVWtzUTBGQlF5eHhRa0ZCY1VJc1IwRkJSeXhGUVVGRkxFTkJRVU1zVjBGQlZ5eERRVUZETEZsQlFWa3NSVUZCUlN4SlFVRkpMRU5CUVVNc1owSkJRV2RDTEVOQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVVc1NVRkJTU3hEUVVGRExHZENRVUZuUWl4RlFVRkZMRWxCUVVrc1EwRkJReXhEUVVGRE8xRkJRMnBJTEVsQlFVa3NRMEZCUXl4eFFrRkJjVUlzUTBGQlF5eFJRVUZSTEVkQlFVY3NTMEZCU3l4RFFVRkRPMUZCUXpWRExFbEJRVWtzUTBGQlF5eEpRVUZKTEVOQlFVTXNlVUpCUVhsQ08xbEJRMnBETEVsQlFVa3NRMEZCUXl4NVFrRkJlVUlzUjBGQlJ5eEpRVUZKTEVOQlFVTXNjVUpCUVhGQ0xFTkJRVU1zU1VGQlNTeERRVUZETzFGQlJXNUZMRVZCUVVVc1EwRkJReXhMUVVGTExFTkJRVU1zU1VGQlNTeERRVUZETEhsQ1FVRjVRaXhEUVVGRExFTkJRVU03VVVGRGVrTXNTMEZCU3l4RFFVRkRMRWxCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU1zY1VKQlFYRkNMRU5CUVVNc1NVRkJTU3hEUVVGRExGRkJRVkVzUTBGQlF6dGhRVU5xUkN4UFFVRlBMRU5CUVVNc1EwRkJReXhMUVVGTExFVkJRVVVzUlVGQlJTeERRVUZETEVsQlFVa3NRMEZCUXl4NVFrRkJlVUlzUTBGQlF5eE5RVUZOTEVOQlFVTXNTMEZCU3l4RFFVRkRMRU5CUVVNc1EwRkJRenRSUVVOd1JTeEpRVUZKTEVsQlFVa3NRMEZCUXl3MlFrRkJOa0lzUlVGQlJUdFpRVU4wUXl4SlFVRkpMRWxCUVVrc1EwRkJReXhyUWtGQmEwSXNRMEZCUXl4TFFVRkxMRU5CUVVNc1EwRkJReXhKUVVGSkxFTkJRVU1zVFVGQlRTeERRVUZETEUxQlFVMHNSMEZCUnl4RFFVRkRPMmRDUVVOMlJDeEpRVUZKTEVOQlFVTXNOa0pCUVRaQ0xFTkJRVU1zUzBGQlN5eERRVUZETEU5QlFVOHNSMEZCUnl4TlFVRk5MRU5CUVVNN08yZENRVVV4UkN4SlFVRkpMRU5CUVVNc05rSkJRVFpDTEVOQlFVTXNTMEZCU3l4RFFVRkRMRTlCUVU4c1IwRkJSeXhOUVVGTkxFTkJRVU03VTBGRE4wUTdTVUZEU0N4RFFVRkRPMGxCUlU4c01FSkJRVEJDTEVOQlEyaERMRlZCUVhWQ0xFVkJRVVVzVFVGQmFVUTdVVUZETVVVc1JVRkJSU3hEUVVGRExFdEJRVXNzUTBGQlF5eFZRVUZWTEVOQlFVTXNRMEZCUXp0UlFVTnlRaXhOUVVGTkxFTkJRVU1zU1VGQlNTeERRVUZETEUxQlFVMHNRMEZCUXl4RFFVRkRMRTlCUVU4c1EwRkJReXhEUVVGRExFVkJRVThzUlVGQlJTeEZRVUZGTzFsQlEzUkRMRTFCUVUwc1MwRkJTeXhIUVVOU0xFMUJRV01zUTBGQlF5eEZRVUZGTEVOQlFVTXNRMEZCUXp0WlFVTjBRaXhKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEZkQlFWY3NSVUZCUlR0blFrRkRkRUlzVFVGQlRTeExRVUZMTEVkQlFVY3NTMEZCU3l4RFFVRkRMRWxCUVVrc1MwRkJTeXhSUVVGUkxFTkJRVU1zUTBGQlF6dHZRa0ZEY2tNc1JVRkJSU3hEUVVGRExGZEJRVmNzUTBGQlF5eExRVUZMTEVOQlFVTXNUVUZCVFN4RlFVRkZMRXRCUVVzc1EwRkJReXhMUVVGTExFbEJRVWtzUlVGQlJTeEZRVUZGTEVkQlFVY3NSVUZCUlR0M1FrRkRia1FzUzBGQlN5eERRVUZETEV0QlFVc3NSMEZCU1N4TFFVRTRRaXhEUVVGRExFdEJRVXNzUTBGQlF6dHZRa0ZEZEVRc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEV0QlFVc3NRMEZCUXl4SlFVRkpMRXRCUVVzc1UwRkJVeXhEUVVGRExFTkJRVU03YjBKQlF6ZENMRVZCUVVVc1EwRkJReXhUUVVGVExFTkJRVU1zUzBGQlN5eERRVUZETEUxQlFVMHNSVUZCUlN4TFFVRkxMRU5CUVVNc1MwRkJTeXhKUVVGSkxFdEJRVXNzUlVGQlJTeEhRVUZITEVWQlFVVTdkMEpCUTNCRUxFdEJRVXNzUTBGQlF5eExRVUZMTEVkQlFVa3NTMEZCSzBJc1EwRkJReXhMUVVGTExFTkJRVU03YjBKQlEzWkVMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU03YjBKQlEwb3NSVUZCUlN4RFFVRkRMRlZCUVZVc1EwRkJReXhMUVVGTExFTkJRVU1zVFVGQlRTeEZRVUZGTEV0QlFVc3NRMEZCUXl4TFFVRlpMRVZCUVVVc1IwRkJSeXhGUVVGRk8zZENRVU51UkN4TFFVRkxMRU5CUVVNc1MwRkJTeXhIUVVGSExFdEJRVXNzUTBGQlF5eExRVUZMTEVOQlFVTTdiMEpCUXpWQ0xFTkJRVU1zUTBGQlF5eERRVUZETzJkQ1FVTlFMRVZCUVVVc1EwRkJReXhQUVVGUExFTkJRVU1zU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4TFFVRkxMRWxCUVVrc1MwRkJTeXhEUVVGRExFbEJRVWtzUlVGQlJTeExRVUZMTEVOQlFVTXNUMEZCVHl4RFFVRkRMRU5CUVVNN1owSkJRekZFTEZWQlFWVXNRMEZCUXl4TlFVRk5MRU5CUVVNc1MwRkJTeXhEUVVGRExFbEJRVWtzUTBGQlF5eERRVUZETzJGQlF5OUNPMUZCUTBnc1EwRkJReXhEUVVGRExFTkJRVU03VVVGRFNDeFBRVUZQTEZWQlFWVXNRMEZCUXp0SlFVTndRaXhEUVVGRE8wbEJSVThzUzBGQlN5eERRVUZETEdkRFFVRm5ReXhEUVVGRExGVkJRWFZDTEVWQlFVVXNTVUZCWVR0UlFVTnVSaXhGUVVGRkxFTkJRVU1zUzBGQlN5eERRVUZETEZWQlFWVXNRMEZCUXl4RFFVRkRPMUZCUTNKQ0xFbEJRVWtzU1VGQlNTeERRVUZETEUxQlFVMHNRMEZCUXl4TlFVRk5MRWRCUVVjc1EwRkJRenRaUVVONFFpeFBRVUZQTEVWQlFVVXNRMEZCUXl4SFFVRkhMRVZCUVVVc1EwRkJRenRSUVVOc1FpeE5RVUZOTEVWQlFVVXNSMEZCUnl4SlFVRkpMRU5CUVVNc1QwRkJUeXhGUVVGRkxFTkJRVU03VVVGRE1VSXNUVUZCVFN4TlFVRk5MRWRCUVVjc1RVRkJUU3hGUVVGRkxFTkJRVU1zVjBGQlZ5eERRVUZETEVWQlFVVXNRMEZCUXl4SFFVRkhMRVZCUVVVc1EwRkJReXhEUVVGRE8xRkJRemxETEV0QlFVc3NTVUZCU1N4RFFVRkRMRWRCUVVjc1EwRkJReXhGUVVGRkxFTkJRVU1zUjBGQlJ5eEpRVUZKTEVOQlFVTXNUVUZCVFN4RFFVRkRMRTFCUVUwc1JVRkJSU3hEUVVGRExFVkJRVVVzUlVGQlJUdFpRVU16UXl4TlFVRk5MRTFCUVUwc1IwRkJSeXhKUVVGSkxFTkJRVU1zVFVGQlRTeERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRPMWxCUXpsQ0xFbEJRVWtzU1VGQlNTeERRVUZETERaQ1FVRTJRaXhEUVVGRExFMUJRVTBzUTBGQlF5eEpRVUZKTEVOQlFVTXNTVUZCU1N4RlFVRkZMRU5CUVVNc1YwRkJWeXhEUVVGRExFbEJRVWtzUTBGQlF5eE5RVUZOTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1NVRkJTU3hEUVVGRExFTkJRVU1zUzBGQlN6dG5Ra0ZETjBZc1RVRkJUU3hEUVVGRExGbEJRVmtzUlVGQlJUdG5Ra0ZEZEVJc1NVRkJTU3hEUVVGRExEWkNRVUUyUWl4RFFVRkRMRTFCUVUwc1EwRkJReXhKUVVGSkxFTkJRVU03YjBKQlF6ZERMRWxCUVVrc1EwRkJReXcyUWtGQk5rSXNRMEZCUXl4TlFVRk5MRU5CUVVNc1NVRkJTU3hEUVVGRExFbEJRVWtzUlVGQlJTeERRVUZETEZkQlFWY3NRMEZCUXl4TlFVRk5MRU5CUVVNc1NVRkJTU3hEUVVGRExFTkJRVU1zUzBGQlN5eEpRVUZKTEUxQlFVMHNRMEZCUXl4WlFVRlpMRU5CUVVNN1lVRkRMMGM3V1VGRFJDeE5RVUZOTEV0QlFVc3NSMEZCUnl4TlFVRk5MRU5CUVVNc1NVRkJTU3hEUVVGRExFTkJRVU1zUjBGQlJ5eEZRVUZGTEVWQlFVVXNRMEZCUXl4SFFVRkhMRU5CUVVNc1VVRkJVU3hEUVVGRExFbEJRVWtzUzBGQlN5eE5RVUZOTEVOQlFVTXNTVUZCU1N4RFFVRkRMRU5CUVVNN1dVRkRkRVVzU1VGQlNTeERRVUZETEV0QlFVczdaMEpCUTFJc1UwRkJVenRaUVVOWUxFbEJRVWtzU1VGQlNTeERRVUZETERaQ1FVRTJRaXhEUVVGRExFMUJRVTBzUTBGQlF5eEpRVUZKTEVOQlFVTXNTMEZCU3l4SlFVRkpPMmRDUVVNeFJDeEpRVUZKTEVOQlFVTXNOa0pCUVRaQ0xFTkJRVU1zVFVGQlRTeERRVUZETEVsQlFVa3NRMEZCUXl4TFFVRkxMRk5CUVZNN1owSkJRemRFTEV0QlFVc3NRMEZCUXl4TFFVRkxMRWRCUVVjc1NVRkJTU3hEUVVGRExEWkNRVUUyUWl4RFFVRkRMRTFCUVUwc1EwRkJReXhKUVVGSkxFTkJRVU1zUTBGQlF6dFpRVU5vUlN4TFFVRkxMRU5CUVVNc1UwRkJVeXhEUVVGRExFZEJRVWNzUlVGQlJTeEhRVUZITEVsQlFVa3NRMEZCUXl3MlFrRkJOa0lzUTBGQlF5eE5RVUZOTEVOQlFVTXNTVUZCU1N4RFFVRkRMRWRCUVVjc1MwRkJTeXhEUVVGRExFdEJRVXNzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRPMWxCUXpGR0xGVkJRVlVzUTBGQlF5eE5RVUZOTEVOQlFVTXNTMEZCU3l4RFFVRkRMRWxCUVVrc1EwRkJReXhEUVVGRE8xTkJReTlDTzFGQlEwUXNUMEZCVHl4VlFVRlZMRU5CUVVNN1NVRkRjRUlzUTBGQlF6dEpRVVZOTEZOQlFWTTdVVUZEWkN4UFFVRlBMRVZCUVVVc1EwRkJReXhIUVVGSExFTkJRVU03V1VGRFdpeEpRVUZKTEVOQlFVTXNWVUZCVlR0WlFVTm1MRWxCUVVrc1EwRkJReXhaUVVGWk8xbEJRMnBDTEVsQlFVa3NRMEZCUXl3NFFrRkJPRUk3V1VGRGJrTXNTVUZCU1N4RFFVRkRMRFJDUVVFMFFqdFpRVU5xUXl4SlFVRkpMRU5CUVVNc1YwRkJWenRaUVVOb1FpeEpRVUZKTEVOQlFVTXNhVUpCUVdsQ08xbEJRM1JDTEVsQlFVa3NRMEZCUXl4NVFrRkJlVUk3V1VGRE9VSXNTVUZCU1N4RFFVRkRMRzFDUVVGdFFqdFpRVU40UWl4SlFVRkpMRU5CUVVNc2MwSkJRWE5DTzFsQlF6TkNMRWxCUVVrc1EwRkJReXhwUWtGQmFVSTdVMEZEZGtJc1JVRkJSU3hGUVVGRExFdEJRVXNzUlVGQlJTeEZRVUZETEZGQlFWRXNSVUZCUlN4UFFVRlBMRVZCUVVNc1JVRkJSU3hQUVVGUExFVkJRVVVzVTBGQlV5eEZRVUZETEVOQlFVTXNRMEZCUXp0SlFVTjJSQ3hEUVVGRE8wbEJSVTBzVTBGQlV6dFJRVU5rTEU5QlFVODdXVUZEVEN4TFFVRkxMRVZCUVVVc1NVRkJTU3hEUVVGRExGVkJRVlVzUTBGQlF5eExRVUZOTzFsQlF6ZENMRWRCUVVjc1JVRkJSU3hKUVVGSkxFTkJRVU1zVVVGQlVTeERRVUZETEV0QlFVMDdXVUZEZWtJc1ZVRkJWU3hGUVVGRkxFbEJRVWtzUTBGQlF5eFhRVUZYTEVOQlFVTXNTMEZCVFR0WlFVTnVReXh4UWtGQmNVSXNSVUZCUlN4SlFVRkpMRU5CUVVNc2EwSkJRV3RDTEVOQlFVTXNTVUZCU1N4RFFVRkRMREJDUVVFd1FpeERRVUZETEV0QlFVMHNRMEZCUXl4RFFVRkRMRWxCUVVrN1dVRkRNMFlzWjBKQlFXZENMRVZCUVVVc1NVRkJTU3hEUVVGRExIRkNRVUZ4UWl4RFFVRkRMRXRCUVUwN1dVRkRia1FzWTBGQll5eEZRVUZGTEVsQlFVa3NRMEZCUXl4dFFrRkJiVUlzUTBGQlF5eExRVUZOTzFsQlF5OURMR2xDUVVGcFFpeEZRVUZGTEVsQlFVa3NRMEZCUXl4elFrRkJjMElzUTBGQlF5eExRVUZOTzFsQlEzSkVMRTlCUVU4c1JVRkJSU3hGUVVGRExFZEJRVWNzU1VGQlNTeERRVUZETEdkQ1FVRm5RaXhGUVVGRkxFZEJRVWNzU1VGQlNTeERRVUZETEdGQlFXRTdaMEpCUTNaRUxIRkNRVUZ4UWl4RlFVRkZMRU5CUVVNc1NVRkJTU3hEUVVGRExEWkNRVUUyUWl4SlFVRkpMRVZCUVVVc1EwRkJReXhGUVVGRE8xTkJRM0pGTEVOQlFVTTdTVUZEU2l4RFFVRkRPME5CUTBvaUxDSnpiM1Z5WTJWelEyOXVkR1Z1ZENJNld5SnBiWEJ2Y25RZ0tpQmhjeUJuY205cklHWnliMjBnSjJSaGRHRm5jbTlyTFdGd2FTOW5jbTlySnp0Y2JtbHRjRzl5ZENBcUlHRnpJSFZwSUdaeWIyMGdKMlJoZEdGbmNtOXJMV0Z3YVM5MWFTYzdYRzVwYlhCdmNuUWdLaUJoY3lCRVJ5Qm1jbTl0SUNka1lYUmhaM0p2YXkxaGNHa3ZaR2NuTzF4dWFXMXdiM0owSUh0RVNVMWZVa1ZFWDFCU1JWQlNUME5GVTFOSlRrZGZSbFZPUTFSSlQwNWZWRUZITENCVFZWQlFUMUpVUlVSZlJFbFRWRUZPUTBWZlJsVk9RMVJKVDA1VFgxUkJSeXhjYmlBZ1UxVlFVRTlTVkVWRVgxTkZUVlJaVUVWVFgxUkJSeXdnVTFWUVVFOVNWRVZFWDFSWlVFVlRYMVJCUnl3Z1UxVlFVRTlTVkVWRVgxVk9TVlJUWDFSQlIzMGdabkp2YlNBbkxpOWpiMjV6ZEhNbk8xeHVhVzF3YjNKMElIdEpSRUpUWTJGdVQzQjBhVzl1YzMwZ1puSnZiU0FuUUdSaGRHRm5jbTlyTFd4cFluSmhjbWxsY3k5dFlYUm9KenRjYm1sdGNHOXlkQ0I3VDNCMGFXOXVjMzBnWm5KdmJTQW5RR1JoZEdGbmNtOXJMV3hwWW5KaGNtbGxjeTkxZEdsc2N5OXpjbU12ZEhsd1pTMWtaV05zWVhKaGRHbHZibk1uTzF4dWFXMXdiM0owSUh0VVUwNUZUM0IwYVc5dWN5d2dWVTFCVUU5d2RHbHZibk45SUdaeWIyMGdKeTR1TDIxMWJIUnBMV052YkhWdGJpMWthVzFsYm5OcGIyNWhiR2wwZVMxeVpXUjFZM1JwYjI0dmJYVnNkR2t0WTI5c2RXMXVMV1JwYlMxeVpXUjFZM1JwYjI0dFpXUnBkRzl5Snp0Y2JtbHRjRzl5ZENCN1NVUnBiVkpsWkhWamRHbHZibEJoY21GdExDQkpWRk5PUlU5d2RHbHZibk1zSUVsVlRVRlFUM0IwYVc5dWMzMWNiaUFnWm5KdmJTQW5MaTR2YlhWc2RHa3RZMjlzZFcxdUxXUnBiV1Z1YzJsdmJtRnNhWFI1TFhKbFpIVmpkR2x2Ymk5dGRXeDBhUzFqYjJ4MWJXNHRaR2x0TFhKbFpIVmpaWEluTzF4dWFXMXdiM0owSUh0RWFXMVNaV1IxWTNScGIyNU5aWFJvYjJSemZTQm1jbTl0SUNjdUxpOXRkV3gwYVMxamIyeDFiVzR0WkdsdFpXNXphVzl1WVd4cGRIa3RjbVZrZFdOMGFXOXVMM1I1Y0dWekp6dGNibWx0Y0c5eWRDQjdUVU5NVFdWMGFHOWtUbUZ0WlgwZ1puSnZiU0FuTGk0dlRVTk1KenRjYmx4dVpYaHdiM0owSUdOdmJuTjBJRk5GVVY5RFQweGZUa0ZOUlZNZ1BTQjdYRzRnSUZ0RVJ5NVRSVTFVV1ZCRkxrMVBURVZEVlV4RlhUb2dKMDF2YkdWamRXeGxjeWNzWEc0Z0lGdEVSeTVUUlUxVVdWQkZMazFCUTFKUFRVOU1SVU5WVEVWZE9pQW5VMlZ4ZFdWdVkyVnpKMXh1ZlR0Y2JseHVaWGh3YjNKMElIUjVjR1VnVUhKbGNISnZZMlZ6YzBaMWJtTjBhVzl1VW1WMGRYSnVWSGx3WlNBOUlIdGNiaUFnSUNCbGJuUnlhV1Z6T2lCaGJubGJYU3hjYmlBZ0lDQnZjSFJwYjI1elB6b2dlMXRmT2lCemRISnBibWRkT2lCaGJubDlYRzU5TzF4dVhHNWxlSEJ2Y25RZ2RIbHdaU0JFYVcxU1pXUjFZM1JwYjI1RlpHbDBiM0pQY0hScGIyNXpJRDBnZTF4dUlDQWdJSE5sYlhSNWNHVS9PaUJ6ZEhKcGJtY3NYRzRnSUNBZ2RIbHdaVDg2SUhOMGNtbHVaeXhjYmlBZ0lDQjFibWwwY3o4NklITjBjbWx1Wnl4Y2JpQWdJQ0JsYm1GaWJHVk5RMHcvT2lCaWIyOXNaV0Z1TEZ4dWZWeHVYRzVsZUhCdmNuUWdkSGx3WlNCRWFXMVNaV1IxWTNScGIyNVFZWEpoYlhNZ1BTQjdYRzRnSUNBZ2RHRmliR1U2SUVSSExrUmhkR0ZHY21GdFpTeGNiaUFnSUNCamIydzZJRVJITGtOdmJIVnRiaXhjYmlBZ0lDQnRaWFJvYjJST1lXMWxPaUJ6ZEhKcGJtY3NYRzRnSUNBZ2NISmxjSEp2WTJWemMybHVaMFoxYm1OMGFXOXVPaUJFUnk1R2RXNWpMRnh1SUNBZ0lITnBiV2xzWVhKcGRIbE5aWFJ5YVdNNklITjBjbWx1Wnl4Y2JpQWdJQ0J3Ykc5MFJXMWlaV1JrYVc1bmN6ODZJR0p2YjJ4bFlXNHNYRzRnSUNBZ1kyeDFjM1JsY2tWdFltVmtaR2x1WjNNL09pQmliMjlzWldGdUxGeHVJQ0FnSUc5d2RHbHZibk02SUNoSlZVMUJVRTl3ZEdsdmJuTWdmQ0JKVkZOT1JVOXdkR2x2Ym5NcElDWWdVR0Z5ZEdsaGJEeEpSRUpUWTJGdVQzQjBhVzl1Y3o0Z0ppQjdjSEpsY0hKdlkyVnpjMmx1WjBaMWJtTkJjbWR6UHpvZ1QzQjBhVzl1YzMwZ0ppQlBjSFJwYjI1elhHNTlPMXh1WEc1bGVIQnZjblFnWTJ4aGMzTWdSRUpUWTJGdVQzQjBhVzl1Y3lCN1hHNGdJQ0FnWlhCemFXeHZiam9nU1VScGJWSmxaSFZqZEdsdmJsQmhjbUZ0SUQwZ2UxeHVJQ0FnSUNBZ2RXbE9ZVzFsT2lBblJYQnphV3h2Ymljc0lIWmhiSFZsT2lBd0xqQXhMQ0IwYjI5c2RHbHdPaUFuVFdsdWFXMTFiU0JrYVhOMFlXNWpaU0JpWlhSM1pXVnVJR05zZFhOMFpYSWdjRzlwYm5Sekp5d2diV2x1T2lBd0xDQnRZWGc2SURJc0lITjBaWEE2SURBdU1EQTFmVHRjYmlBZ0lDQnRhVzVRZEhNNklFbEVhVzFTWldSMVkzUnBiMjVRWVhKaGJTQTlJSHRjYmlBZ0lDQWdJSFZwVG1GdFpUb2dKMDFwYm1sdGRXMGdjRzlwYm5Sekp5d2dkbUZzZFdVNklEUXNJSFJ2YjJ4MGFYQTZJQ2ROYVc1cGJYVnRJRzUxYldKbGNpQnZaaUJ3YjJsdWRITWdhVzRnWTJ4MWMzUmxjaWNzSUcxcGJqb2dNU3dnYldGNE9pQXhNREF3TENCemRHVndPaUF4ZlR0Y2JseHVJQ0FnSUdOdmJuTjBjblZqZEc5eUtDa2dlMzA3WEc1OVhHNWxlSEJ2Y25RZ1kyeGhjM01nUkdsdFVtVmtkV04wYVc5dVFtRnpaVVZrYVhSdmNpQjdYRzRnSUNBZ1pXUnBkRzl5VTJWMGRHbHVaM002SUVScGJWSmxaSFZqZEdsdmJrVmthWFJ2Y2s5d2RHbHZibk1nUFNCN2ZUdGNiaUFnSUNCMFlXSnNaVWx1Y0hWME9pQkVSeTVKYm5CMWRFSmhjMlU4UkVjdVJHRjBZVVp5WVcxbElId2diblZzYkQ0N1hHNGdJQ0FnWTI5c1NXNXdkWFFoT2lCRVJ5NUpibkIxZEVKaGMyVThSRWN1UTI5c2RXMXVJSHdnYm5Wc2JENDdYRzRnSUNBZ2NISmxjSEp2WTJWemMybHVaMFoxYm1OMGFXOXVTVzV3ZFhRNklFUkhMa2x1Y0hWMFFtRnpaVHh6ZEhKcGJtY2dmQ0J1ZFd4c1BqdGNiaUFnSUNCd2JHOTBSVzFpWldSa2FXNW5jMGx1Y0hWMElEMGdkV2t1WW05dmJFbHVjSFYwS0NkUWJHOTBJR1Z0WW1Wa1pHbHVaM01uTENCMGNuVmxLVHRjYmlBZ0lDQmpiSFZ6ZEdWeVJXMWlaV1JrYVc1bmMwbHVjSFYwSUQwZ2RXa3VZbTl2YkVsdWNIVjBLQ2REYkhWemRHVnlJR1Z0WW1Wa1pHbHVaM01uTENCMGNuVmxLVHRjYmlBZ0lDQndjbVZ3Y205alpYTnphVzVuUm5WdVkzUnBiMjVKYm5CMWRGSnZiM1E2SUVoVVRVeEZiR1Z0Wlc1MElId2diblZzYkNBOUlHNTFiR3c3WEc0Z0lDQWdZMjlzU1c1d2RYUlNiMjkwSVRvZ1NGUk5URVZzWlcxbGJuUTdYRzRnSUNBZ2JXVjBhRzlrY3pvZ1JHbHRVbVZrZFdOMGFXOXVUV1YwYUc5a2MxdGRJRDBnVzBScGJWSmxaSFZqZEdsdmJrMWxkR2h2WkhNdVZVMUJVQ3dnUkdsdFVtVmtkV04wYVc5dVRXVjBhRzlrY3k1VVgxTk9SVjA3WEc0Z0lDQWdiV1YwYUc5a1NXNXdkWFE2SUVSSExrTm9iMmxqWlVsdWNIVjBQSE4wY21sdVp5QjhJRzUxYkd3K08xeHVJQ0FnSUcxbGRHaHZaRk5sZEhScGJtZHpTV052YmpvZ1NGUk5URVZzWlcxbGJuUTdYRzRnSUNBZ1pHSlRZMkZ1VTJWMGRHbHVaM05KWTI5dU9pQklWRTFNUld4bGJXVnVkRHRjYmlBZ0lDQndjbVZ3Y205alpYTnphVzVuUm5WdVkxTmxkSFJwYm1kelNXTnZiam9nU0ZSTlRFVnNaVzFsYm5RN1hHNGdJQ0FnWTI5c2RXMXVSblZ1WTNScGIyNXpUV0Z3T2lCN1cydGxlVG9nYzNSeWFXNW5YVG9nYzNSeWFXNW5XMTE5SUQwZ2UzMDdYRzRnSUNBZ2MzVndjRzl5ZEdWa1JuVnVZM1JwYjI1ek9pQjdXMjVoYldVNklITjBjbWx1WjEwNklIdGNiaUFnSUNBZ0lDQWdablZ1WXpvZ1JFY3VSblZ1WXl4Y2JpQWdJQ0FnSUNBZ2MyVnRWSGx3WlhNNklITjBjbWx1WjF0ZExGeHVJQ0FnSUNBZ0lDQjBlWEJsY3pvZ2MzUnlhVzVuVzEwc1hHNGdJQ0FnSUNBZ0lIVnVhWFJ6T2lCemRISnBibWRiWFN4Y2JpQWdJQ0FnSUNBZ1pHbHpkR0Z1WTJWR2RXNWpkR2x2Ym5NNklITjBjbWx1WjF0ZFhHNGdJQ0FnZlgwZ1BTQjdmVHRjYmlBZ0lDQmhkbUZwYkdGaWJHVk5aWFJ5YVdOek9pQnpkSEpwYm1kYlhTQTlJRnRkTzF4dUlDQWdJSE5wYldsc1lYSnBkSGxOWlhSeWFXTkpibkIxZEZKdmIzUWhPaUJJVkUxTVJXeGxiV1Z1ZER0Y2JpQWdJQ0J0WlhSb2IyUlRaWFIwYVc1bmMwUnBkaUE5SUhWcExtbHVjSFYwY3loYlhTazdYRzRnSUNBZ1pHSlRZMkZ1VTJWMGRHbHVaM05FYVhZZ1BTQjFhUzVwYm5CMWRITW9XMTBwTzF4dUlDQWdJSEJ5WlhCeWIyTmxjM05wYm1kR2RXNWpVMlYwZEdsdVozTkVhWFlnUFNCMWFTNXBibkIxZEhNb1cxMHBPMXh1SUNBZ0lIQnlaWEJ5YjJObGMzTnBibWRHZFc1amRHbHZibE5sZEhScGJtZHpPaUJQY0hScGIyNXpJRDBnZTMwN1hHNGdJQ0FnYldWMGFHOWtjMUJoY21GdGN6b2dlMXRyWlhrNklITjBjbWx1WjEwNklGVk5RVkJQY0hScGIyNXpJSHdnVkZOT1JVOXdkR2x2Ym5OOUlEMGdlMXh1SUNBZ0lDQWdXMFJwYlZKbFpIVmpkR2x2YmsxbGRHaHZaSE11VlUxQlVGMDZJRzVsZHlCVlRVRlFUM0IwYVc5dWN5Z3BMRnh1SUNBZ0lDQWdXMFJwYlZKbFpIVmpkR2x2YmsxbGRHaHZaSE11VkY5VFRrVmRPaUJ1WlhjZ1ZGTk9SVTl3ZEdsdmJuTW9LVnh1SUNBZ0lIMDdYRzRnSUNBZ1pHSlRZMkZ1VUdGeVlXMXpJRDBnYm1WM0lFUkNVMk5oYms5d2RHbHZibk1vS1R0Y2JpQWdJQ0J6YVcxcGJHRnlhWFI1VFdWMGNtbGpTVzV3ZFhRaE9pQkVSeTVKYm5CMWRFSmhjMlU4YzNSeWFXNW5JSHdnYm5Wc2JENDdYRzRnSUNBZ1oyVjBJR0ZzWjI5eWFYUm9iVTl3ZEdsdmJuTW9LVG9nS0VsVlRVRlFUM0IwYVc5dWN5QjhJRWxVVTA1RlQzQjBhVzl1Y3lrZ0ppQlBjSFJwYjI1eklIdGNiaUFnSUNBZ0lHTnZibk4wSUdGc1oyOXlhWFJvYlZCaGNtRnRjem9nVlUxQlVFOXdkR2x2Ym5NZ2ZDQlVVMDVGVDNCMGFXOXVjeUE5SUhSb2FYTXViV1YwYUc5a2MxQmhjbUZ0YzF0MGFHbHpMbTFsZEdodlpFbHVjSFYwTG5aaGJIVmxJVjA3WEc0Z0lDQWdJQ0JqYjI1emRDQnZjSFJwYjI1ek9pQmhibmtnUFNCN2ZUdGNiaUFnSUNBZ0lFOWlhbVZqZEM1clpYbHpLR0ZzWjI5eWFYUm9iVkJoY21GdGN5a3VabTl5UldGamFDZ29hMlY1T2lCemRISnBibWNwSUQwK0lIdGNiaUFnSUNBZ0lDQWdhV1lnS0NoaGJHZHZjbWwwYUcxUVlYSmhiWE1nWVhNZ1lXNTVLVnRyWlhsZExuWmhiSFZsSUNFOUlHNTFiR3dwWEc0Z0lDQWdJQ0FnSUNBZ2IzQjBhVzl1YzF0clpYbGRJRDBnS0dGc1oyOXlhWFJvYlZCaGNtRnRjeUJoY3lCaGJua3BXMnRsZVYwdWRtRnNkV1U3WEc0Z0lDQWdJQ0I5S1R0Y2JpQWdJQ0FnSUhKbGRIVnliaUJ2Y0hScGIyNXpPMXh1SUNBZ0lIMWNibHh1SUNBZ0lHZGxkQ0JrWWxOallXNVBjSFJwYjI1ektDazZJRWxFUWxOallXNVBjSFJwYjI1eklIdGNiaUFnSUNBZ0lISmxkSFZ5YmlCN1hHNGdJQ0FnSUNBZ0lHUmlVMk5oYmtWd2MybHNiMjQ2SUhSb2FYTXVaR0pUWTJGdVVHRnlZVzF6TG1Wd2MybHNiMjR1ZG1Gc2RXVWdQejhnTUM0d01TeGNiaUFnSUNBZ0lDQWdaR0pUWTJGdVRXbHVVSFJ6T2lCMGFHbHpMbVJpVTJOaGJsQmhjbUZ0Y3k1dGFXNVFkSE11ZG1Gc2RXVWdQejhnTkZ4dUlDQWdJQ0FnZlR0Y2JpQWdJQ0I5WEc1Y2JpQWdJQ0JqYjI1emRISjFZM1J2Y2lobFpHbDBiM0pUWlhSMGFXNW5jem9nUkdsdFVtVmtkV04wYVc5dVJXUnBkRzl5VDNCMGFXOXVjeUE5SUh0OUtTQjdYRzRnSUNBZ0lDQjBhR2x6TG1Wa2FYUnZjbE5sZEhScGJtZHpJRDBnWldScGRHOXlVMlYwZEdsdVozTTdYRzRnSUNBZ0lDQnBaaUFvZEdocGN5NWxaR2wwYjNKVFpYUjBhVzVuY3k1bGJtRmliR1ZOUTB3cFhHNGdJQ0FnSUNBZ0lIUm9hWE11YldWMGFHOWtjeTV3ZFhOb0tFMURURTFsZEdodlpFNWhiV1VnWVhNZ1lXNTVLVHRjYmx4dUlDQWdJQ0FnWTI5dWMzUWdjSEpsY0c5eVkyVnpjMmx1WjBaMWJtTnpJRDBnUkVjdVJuVnVZeTVtYVc1a0tIdDBZV2R6T2lCYlJFbE5YMUpGUkY5UVVrVlFVazlEUlZOVFNVNUhYMFpWVGtOVVNVOU9YMVJCUjExOUtUdGNiaUFnSUNBZ0lDOHZJRzFoY0NCMGFHRjBJR052Ym5SaGFXNXpJR0ZzYkNCd2NtVndjbTlqWlhOemFXNW5JR1oxYm1OMGFXOXVjeUJoYm1RZ2RHaGxhWElnYldWMFlXUmhkR0ZjYmlBZ0lDQWdJSEJ5WlhCdmNtTmxjM05wYm1kR2RXNWpjeTVtYjNKRllXTm9LQ2htS1NBOVBpQjdYRzRnSUNBZ0lDQWdJR052Ym5OMElITmxiVlI1Y0dWek9pQnpkSEpwYm1jZ1BTQm1MbTl3ZEdsdmJuTXVaMlYwS0ZOVlVGQlBVbFJGUkY5VFJVMVVXVkJGVTE5VVFVY3BJRDgvSUNjbk8xeHVJQ0FnSUNBZ0lDQmpiMjV6ZENCdVlXMWxJRDBnWmk1bWNtbGxibVJzZVU1aGJXVWdQejhnWmk1dVlXMWxPMXh1SUNBZ0lDQWdJQ0JqYjI1emRDQjBlWEJsY3pvZ2MzUnlhVzVuSUQwZ1ppNXZjSFJwYjI1ekxtZGxkQ2hUVlZCUVQxSlVSVVJmVkZsUVJWTmZWRUZIS1NBL1B5QW5KenRjYmlBZ0lDQWdJQ0FnWTI5dWMzUWdkVzVwZEhNNklITjBjbWx1WnlBOUlHWXViM0IwYVc5dWN5NW5aWFFvVTFWUVVFOVNWRVZFWDFWT1NWUlRYMVJCUnlrZ1B6OGdKeWM3WEc0Z0lDQWdJQ0FnSUdOdmJuTjBJR1JwYzNSaGJtTmxSblZ1WTNScGIyNXpPaUJ6ZEhKcGJtY2dQU0JtTG05d2RHbHZibk11WjJWMEtGTlZVRkJQVWxSRlJGOUVTVk5VUVU1RFJWOUdWVTVEVkVsUFRsTmZWRUZIS1NBL1B5QW5KenRjYmlBZ0lDQWdJQ0FnYVdZZ0tIUm9hWE11WldScGRHOXlVMlYwZEdsdVozTXVjMlZ0ZEhsd1pTQW1KaUFoYzJWdFZIbHdaWE11YVc1amJIVmtaWE1vZEdocGN5NWxaR2wwYjNKVFpYUjBhVzVuY3k1elpXMTBlWEJsS1NsY2JpQWdJQ0FnSUNBZ0lDQnlaWFIxY200N1hHNGdJQ0FnSUNBZ0lHbG1JQ2gwYUdsekxtVmthWFJ2Y2xObGRIUnBibWR6TG5SNWNHVWdKaVlnSVhSNWNHVnpMbWx1WTJ4MVpHVnpLSFJvYVhNdVpXUnBkRzl5VTJWMGRHbHVaM011ZEhsd1pTa3BYRzRnSUNBZ0lDQWdJQ0FnY21WMGRYSnVPMXh1SUNBZ0lDQWdJQ0JwWmlBb2RHaHBjeTVsWkdsMGIzSlRaWFIwYVc1bmN5NTFibWwwY3lBbUppQWhkVzVwZEhNdWFXNWpiSFZrWlhNb2RHaHBjeTVsWkdsMGIzSlRaWFIwYVc1bmN5NTFibWwwY3lrcFhHNGdJQ0FnSUNBZ0lDQWdjbVYwZFhKdU8xeHVYRzRnSUNBZ0lDQWdJSFJvYVhNdWMzVndjRzl5ZEdWa1JuVnVZM1JwYjI1elcyNWhiV1ZkSUQwZ2UxeHVJQ0FnSUNBZ0lDQWdJR1oxYm1NNklHWXNYRzRnSUNBZ0lDQWdJQ0FnYzJWdFZIbHdaWE02SUhObGJWUjVjR1Z6SUQ4Z2MyVnRWSGx3WlhNdWMzQnNhWFFvSnl3bktTQTZJRnRkTEZ4dUlDQWdJQ0FnSUNBZ0lIUjVjR1Z6T2lCMGVYQmxjeUEvSUhSNWNHVnpMbk53YkdsMEtDY3NKeWtnT2lCYlhTeGNiaUFnSUNBZ0lDQWdJQ0IxYm1sMGN6b2dkVzVwZEhNZ1B5QjFibWwwY3k1emNHeHBkQ2duTENjcElEb2dXMTBzWEc0Z0lDQWdJQ0FnSUNBZ1pHbHpkR0Z1WTJWR2RXNWpkR2x2Ym5NNklHUnBjM1JoYm1ObFJuVnVZM1JwYjI1eklEOGdaR2x6ZEdGdVkyVkdkVzVqZEdsdmJuTXVjM0JzYVhRb0p5d25LU0E2SUZ0ZExGeHVJQ0FnSUNBZ0lDQjlPMXh1SUNBZ0lDQWdmU2s3WEc1Y2JpQWdJQ0FnSUhSb2FYTXVkR0ZpYkdWSmJuQjFkQ0E5SUhWcExuUmhZbXhsU1c1d2RYUW9KMVJoWW14bEp5d2daM0p2YXk1emFHVnNiQzUwZGk1a1lYUmhSbkpoYldVc0lHZHliMnN1YzJobGJHd3VkR0ZpYkdWekxDQW9LU0E5UGlCN1hHNGdJQ0FnSUNBZ0lIUm9hWE11YjI1VVlXSnNaVWx1Y0hWMFEyaGhibWRsWkNncE8xeHVJQ0FnSUNBZ2ZTazdYRzRnSUNBZ0lDQjBhR2x6TG05dVZHRmliR1ZKYm5CMWRFTm9ZVzVuWldRb0tUdGNibHh1SUNBZ0lDQWdkR2hwY3k1eVpXZGxibVZ5WVhSbFEyOXNTVzV3ZFhRb0tUdGNiaUFnSUNBZ0lIUm9hWE11YjI1RGIyeDFiVzVKYm5CMWRFTm9ZVzVuWldRb0tUdGNiaUFnSUNBZ0lHeGxkQ0J6WlhSMGFXNW5jMDl3Wlc1bFpDQTlJR1poYkhObE8xeHVJQ0FnSUNBZ2JHVjBJR1JpVTJOaGJsTmxkSFJwYm1kelQzQmxibVZrSUQwZ1ptRnNjMlU3WEc0Z0lDQWdJQ0IwYUdsekxtMWxkR2h2WkVsdWNIVjBJRDBnZFdrdVkyaHZhV05sU1c1d2RYUW9KMDFsZEdodlpDY3NJRVJwYlZKbFpIVmpkR2x2YmsxbGRHaHZaSE11VlUxQlVDeGNiaUFnSUNBZ0lDQWdkR2hwY3k1dFpYUm9iMlJ6TENBb0tTQTlQaUI3WEc0Z0lDQWdJQ0FnSUNBZ2FXWWdLSE5sZEhScGJtZHpUM0JsYm1Wa0tWeHVJQ0FnSUNBZ0lDQWdJQ0FnZEdocGN5NWpjbVZoZEdWQmJHZHZjbWwwYUcxVFpYUjBhVzVuYzBScGRpaDBhR2x6TG0xbGRHaHZaRk5sZEhScGJtZHpSR2wyTENCMGFHbHpMbTFsZEdodlpITlFZWEpoYlhOYmRHaHBjeTV0WlhSb2IyUkpibkIxZEM1MllXeDFaU0ZkS1R0Y2JpQWdJQ0FnSUNBZ2ZTazdYRzRnSUNBZ0lDQjBhR2x6TG0xbGRHaHZaRk5sZEhScGJtZHpTV052YmlBOUlIVnBMbWxqYjI1ekxuTmxkSFJwYm1kektDZ3BQVDRnZTF4dUlDQWdJQ0FnSUNCelpYUjBhVzVuYzA5d1pXNWxaQ0E5SUNGelpYUjBhVzVuYzA5d1pXNWxaRHRjYmlBZ0lDQWdJQ0FnYVdZZ0tDRnpaWFIwYVc1bmMwOXdaVzVsWkNsY2JpQWdJQ0FnSUNBZ0lDQjFhUzVsYlhCMGVTaDBhR2x6TG0xbGRHaHZaRk5sZEhScGJtZHpSR2wyS1R0Y2JpQWdJQ0FnSUNBZ1pXeHpaVnh1SUNBZ0lDQWdJQ0FnSUhSb2FYTXVZM0psWVhSbFFXeG5iM0pwZEdodFUyVjBkR2x1WjNORWFYWW9kR2hwY3k1dFpYUm9iMlJUWlhSMGFXNW5jMFJwZGl3Z2RHaHBjeTV0WlhSb2IyUnpVR0Z5WVcxelczUm9hWE11YldWMGFHOWtTVzV3ZFhRdWRtRnNkV1VoWFNrN1hHNGdJQ0FnSUNCOUxDQW5UVzlrYVdaNUlHMWxkR2h2WkhNZ2NHRnlZVzFsZEdWeWN5Y3BPMXh1SUNBZ0lDQWdkR2hwY3k1a1lsTmpZVzVUWlhSMGFXNW5jMGxqYjI0Z1BTQjFhUzVwWTI5dWN5NXpaWFIwYVc1bmN5Z29LVDArSUh0Y2JpQWdJQ0FnSUNBZ1pHSlRZMkZ1VTJWMGRHbHVaM05QY0dWdVpXUWdQU0FoWkdKVFkyRnVVMlYwZEdsdVozTlBjR1Z1WldRN1hHNGdJQ0FnSUNBZ0lHbG1JQ2doWkdKVFkyRnVVMlYwZEdsdVozTlBjR1Z1WldRcFhHNGdJQ0FnSUNBZ0lDQWdkV2t1Wlcxd2RIa29kR2hwY3k1a1lsTmpZVzVUWlhSMGFXNW5jMFJwZGlrN1hHNGdJQ0FnSUNBZ0lHVnNjMlZjYmlBZ0lDQWdJQ0FnSUNCMGFHbHpMbU55WldGMFpVRnNaMjl5YVhSb2JWTmxkSFJwYm1kelJHbDJLSFJvYVhNdVpHSlRZMkZ1VTJWMGRHbHVaM05FYVhZc0lIUm9hWE11WkdKVFkyRnVVR0Z5WVcxektUdGNiaUFnSUNBZ0lIMHNJQ2ROYjJScFpua2dZMngxYzNSbGNtbHVaeUJ3WVhKaGJXVjBaWEp6SnlrN1hHNGdJQ0FnSUNCMGFHbHpMbU5zZFhOMFpYSkZiV0psWkdScGJtZHpTVzV3ZFhRdVkyeGhjM05NYVhOMExtRmtaQ2duYld3dFpHbHRMWEpsWkhWamRHbHZiaTF6WlhSMGFXNW5jeTFwYm5CMWRDY3BPMXh1SUNBZ0lDQWdkR2hwY3k1amJIVnpkR1Z5UlcxaVpXUmthVzVuYzBsdWNIVjBMbkp2YjNRdWNISmxjR1Z1WkNoMGFHbHpMbVJpVTJOaGJsTmxkSFJwYm1kelNXTnZiaWs3WEc0Z0lDQWdJQ0IwYUdsekxtMWxkR2h2WkVsdWNIVjBMbkp2YjNRdVkyeGhjM05NYVhOMExtRmtaQ2duYld3dFpHbHRMWEpsWkhWamRHbHZiaTF6WlhSMGFXNW5jeTFwYm5CMWRDY3BPMXh1SUNBZ0lDQWdkR2hwY3k1dFpYUm9iMlJKYm5CMWRDNXliMjkwTG5CeVpYQmxibVFvZEdocGN5NXRaWFJvYjJSVFpYUjBhVzVuYzBsamIyNHBPMXh1SUNBZ0lDQWdkR2hwY3k1dFpYUm9iMlJUWlhSMGFXNW5jMFJwZGlBOUlIVnBMbWx1Y0hWMGN5aGJYU2s3WEc0Z0lDQWdJQ0JqYjI1emRDQm1kVzVqZEdsdmJuTWdQU0IwYUdsekxtTnZiSFZ0YmtaMWJtTjBhVzl1YzAxaGNGdDBhR2x6TG1OdmJFbHVjSFYwTG5aaGJIVmxJUzV1WVcxbFhUdGNibHh1SUNBZ0lDQWdkR2hwY3k1d2NtVndjbTlqWlhOemFXNW5SblZ1WTNScGIyNUpibkIxZENBOUlIVnBMbU5vYjJsalpVbHVjSFYwS0NkRmJtTnZaR2x1WnlCbWRXNWpkR2x2Ymljc0lHWjFibU4wYVc5dWMxc3dYU3dnWm5WdVkzUnBiMjV6TENBb0tTQTlQaUI3WEc0Z0lDQWdJQ0FnSUhSb2FYTXViMjVRY21Wd2NtOWpaWE56YVc1blJuVnVZM1JwYjI1RGFHRnVaMlZrS0NrN1hHNGdJQ0FnSUNCOUtUdGNiaUFnSUNBZ0lHeGxkQ0JtYkdGblVHWnBJRDBnWm1Gc2MyVTdYRzRnSUNBZ0lDQnBaaUFvSVhSb2FYTXVjSEpsY0hKdlkyVnpjMmx1WjBaMWJtTjBhVzl1U1c1d2RYUlNiMjkwS1NCN1hHNGdJQ0FnSUNBZ0lIUm9hWE11Y0hKbGNISnZZMlZ6YzJsdVowWjFibU4wYVc5dVNXNXdkWFJTYjI5MElEMGdkR2hwY3k1d2NtVndjbTlqWlhOemFXNW5SblZ1WTNScGIyNUpibkIxZEM1eWIyOTBPMXh1SUNBZ0lDQWdJQ0JtYkdGblVHWnBJRDBnZEhKMVpUdGNiaUFnSUNBZ0lIMWNiaUFnSUNBZ0lHbG1JQ2doWm14aFoxQm1hU2tnZTF4dUlDQWdJQ0FnSUNCMWFTNWxiWEIwZVNoMGFHbHpMbkJ5WlhCeWIyTmxjM05wYm1kR2RXNWpkR2x2YmtsdWNIVjBVbTl2ZENrN1hHNGdJQ0FnSUNBZ0lFRnljbUY1TG1aeWIyMG9kR2hwY3k1d2NtVndjbTlqWlhOemFXNW5SblZ1WTNScGIyNUpibkIxZEM1eWIyOTBMbU5vYVd4a2NtVnVLVnh1SUNBZ0lDQWdJQ0FnSUM1bWIzSkZZV05vS0NoamFHbHNaQ2tnUFQ0Z2RHaHBjeTV3Y21Wd2NtOWpaWE56YVc1blJuVnVZM1JwYjI1SmJuQjFkRkp2YjNRaExtRndjR1Z1WkNoamFHbHNaQ2twTzF4dUlDQWdJQ0FnZlZ4dUlDQWdJQ0FnZEdocGN5NXdjbVZ3Y205alpYTnphVzVuUm5WdVkzUnBiMjVKYm5CMWRGSnZiM1F1WTJ4aGMzTk1hWE4wTG1Ga1pDZ25iV3d0WkdsdExYSmxaSFZqZEdsdmJpMXpaWFIwYVc1bmN5MXBibkIxZENjcE8xeHVJQ0FnSUNBZ2JHVjBJSEJ5WlhCeWIyTmxjM05wYm1kVFpYUjBhVzVuYzA5d1pXNWxaQ0E5SUdaaGJITmxPMXh1SUNBZ0lDQWdkR2hwY3k1d2NtVndjbTlqWlhOemFXNW5SblZ1WTFObGRIUnBibWR6U1dOdmJpQTlJSFZwTG1samIyNXpMbk5sZEhScGJtZHpLR0Z6ZVc1aklDZ3BQVDRnZTF4dUlDQWdJQ0FnSUNCcFppQW9JWEJ5WlhCeWIyTmxjM05wYm1kVFpYUjBhVzVuYzA5d1pXNWxaQ2tnZTF4dUlDQWdJQ0FnSUNBZ0lHRjNZV2wwSUhSb2FYTXVZM0psWVhSbFVISmxjSEp2WTJWemMybHVaMFoxYm1OUVlYSmhiWE5FYVhZb1hHNGdJQ0FnSUNBZ0lDQWdJQ0IwYUdsekxuQnlaWEJ5YjJObGMzTnBibWRHZFc1alUyVjBkR2x1WjNORWFYWXNJSFJvYVhNdWMzVndjRzl5ZEdWa1JuVnVZM1JwYjI1elczUm9hWE11Y0hKbGNISnZZMlZ6YzJsdVowWjFibU4wYVc5dVNXNXdkWFF1ZG1Gc2RXVWhYUzVtZFc1aktUdGNiaUFnSUNBZ0lDQWdmU0JsYkhObElIc2dkV2t1Wlcxd2RIa29kR2hwY3k1d2NtVndjbTlqWlhOemFXNW5SblZ1WTFObGRIUnBibWR6UkdsMktUc2dmVnh1SUNBZ0lDQWdJQ0J3Y21Wd2NtOWpaWE56YVc1blUyVjBkR2x1WjNOUGNHVnVaV1FnUFNBaGNISmxjSEp2WTJWemMybHVaMU5sZEhScGJtZHpUM0JsYm1Wa08xeHVJQ0FnSUNBZ2ZTd2dKMDF2WkdsbWVTQmxibU52WkdsdVp5Qm1kVzVqZEdsdmJpQndZWEpoYldWMFpYSnpKeWs3WEc0Z0lDQWdJQ0IwYUdsekxuQnlaWEJ5YjJObGMzTnBibWRHZFc1amRHbHZia2x1Y0hWMFVtOXZkQzV3Y21Wd1pXNWtLSFJvYVhNdWNISmxjSEp2WTJWemMybHVaMFoxYm1OVFpYUjBhVzVuYzBsamIyNHBPMXh1WEc0Z0lDQWdJQ0IwYUdsekxuTnBiV2xzWVhKcGRIbE5aWFJ5YVdOSmJuQjFkQ0E5SUhWcExtTm9iMmxqWlVsdWNIVjBLQ2RUYVcxcGJHRnlhWFI1Snl3Z0p5Y3NJRnRkTENCdWRXeHNLVHRjYmlBZ0lDQWdJSFJvYVhNdWMybHRhV3hoY21sMGVVMWxkSEpwWTBsdWNIVjBMbTUxYkd4aFlteGxJRDBnWm1Gc2MyVTdYRzRnSUNBZ0lDQnBaaUFvSVhSb2FYTXVjMmx0YVd4aGNtbDBlVTFsZEhKcFkwbHVjSFYwVW05dmRDbGNiaUFnSUNBZ0lDQWdkR2hwY3k1emFXMXBiR0Z5YVhSNVRXVjBjbWxqU1c1d2RYUlNiMjkwSUQwZ2RHaHBjeTV6YVcxcGJHRnlhWFI1VFdWMGNtbGpTVzV3ZFhRdWNtOXZkRHRjYmlBZ0lDQWdJSFJvYVhNdWIyNVFjbVZ3Y205alpYTnphVzVuUm5WdVkzUnBiMjVEYUdGdVoyVmtLQ2s3WEc0Z0lDQWdmVnh1WEc0Z0lDQWdjSEpwZG1GMFpTQm5aWFJEYjJ4SmJuQjFkQ2dwSUh0Y2JpQWdJQ0FnSUdOdmJuTjBJR1pwY25OMFUzVndjRzl5ZEdWa1EyOXNkVzF1SUQwZ2RHaHBjeTUwWVdKc1pVbHVjSFYwTG5aaGJIVmxQeTVqYjJ4MWJXNXpMblJ2VEdsemRDZ3BYRzRnSUNBZ0lDQWdJQzVtYVc1a0tDaGpiMndwSUQwK0lDRWhkR2hwY3k1amIyeDFiVzVHZFc1amRHbHZibk5OWVhCYlkyOXNMbTVoYldWZEtTQS9QeUJ1ZFd4c08xeHVJQ0FnSUNBZ1kyOXVjM1FnYVc1d2RYUWdQU0IxYVM1amIyeDFiVzVKYm5CMWRDZ25RMjlzZFcxdUp5d2dkR2hwY3k1MFlXSnNaVWx1Y0hWMExuWmhiSFZsSVN3Z1ptbHljM1JUZFhCd2IzSjBaV1JEYjJ4MWJXNHNYRzRnSUNBZ0lDQWdJQ2dwSUQwK0lIUm9hWE11YjI1RGIyeDFiVzVKYm5CMWRFTm9ZVzVuWldRb0tTd2dlMlpwYkhSbGNqb2dLR052YkRvZ1JFY3VRMjlzZFcxdUtTQTlQaUFoSVhSb2FYTXVZMjlzZFcxdVJuVnVZM1JwYjI1elRXRndXMk52YkM1dVlXMWxYWDBwTzF4dUlDQWdJQ0FnYVdZZ0tDRjBhR2x6TG1OdmJFbHVjSFYwVW05dmRDbGNiaUFnSUNBZ0lDQWdkR2hwY3k1amIyeEpibkIxZEZKdmIzUWdQU0JwYm5CMWRDNXliMjkwTzF4dUlDQWdJQ0FnY21WMGRYSnVJR2x1Y0hWME8xeHVJQ0FnSUgxY2JseHVJQ0FnSUhCeWFYWmhkR1VnY21WblpXNWxjbUYwWlVOdmJFbHVjSFYwS0NrZ2UxeHVJQ0FnSUNBZ2JHVjBJR1pzWVdjZ1BTQm1ZV3h6WlR0Y2JpQWdJQ0FnSUdsbUlDaDBhR2x6TG1OdmJFbHVjSFYwVW05dmRDa2dlMXh1SUNBZ0lDQWdJQ0JtYkdGbklEMGdkSEoxWlR0Y2JpQWdJQ0FnSUNBZ2RXa3VaVzF3ZEhrb2RHaHBjeTVqYjJ4SmJuQjFkRkp2YjNRcE8xeHVJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ2RHaHBjeTVqYjJ4SmJuQjFkQ0E5SUhSb2FYTXVaMlYwUTI5c1NXNXdkWFFvS1R0Y2JpQWdJQ0FnSUdsbUlDaG1iR0ZuS1Z4dUlDQWdJQ0FnSUNCQmNuSmhlUzVtY205dEtIUm9hWE11WTI5c1NXNXdkWFF1Y205dmRDNWphR2xzWkhKbGJpa3VabTl5UldGamFDZ29ZMmhwYkdRcElEMCtJSFJvYVhNdVkyOXNTVzV3ZFhSU2IyOTBMbUZ3Y0dWdVpDaGphR2xzWkNrcE8xeHVJQ0FnSUNBZ2RHaHBjeTV2YmtOdmJIVnRia2x1Y0hWMFEyaGhibWRsWkNncE8xeHVJQ0FnSUgxY2JseHVJQ0FnSUc5dVZHRmliR1ZKYm5CMWRFTm9ZVzVuWldRb0tTQjdYRzRnSUNBZ0lDQmpiMjV6ZENCMllXeDFaU0E5SUhSb2FYTXVkR0ZpYkdWSmJuQjFkQzUyWVd4MVpUdGNiaUFnSUNBZ0lHbG1JQ2doZG1Gc2RXVXBYRzRnSUNBZ0lDQWdJSEpsZEhWeWJqdGNiaUFnSUNBZ0lIUm9hWE11WTI5c2RXMXVSblZ1WTNScGIyNXpUV0Z3SUQwZ2UzMDdYRzRnSUNBZ0lDQmpiMjV6ZENCamIyeDFiVzV6SUQwZ2RtRnNkV1V1WTI5c2RXMXVjeTUwYjB4cGMzUW9LVHRjYmlBZ0lDQWdJR052YkhWdGJuTXVabTl5UldGamFDZ29ZMjlzS1NBOVBpQjdYRzRnSUNBZ0lDQWdJRTlpYW1WamRDNXJaWGx6S0hSb2FYTXVjM1Z3Y0c5eWRHVmtSblZ1WTNScGIyNXpLUzVtYjNKRllXTm9LQ2htZFc1alRtRnRaU2tnUFQ0Z2UxeHVJQ0FnSUNBZ0lDQWdJR052Ym5OMElITmxiVlI1Y0dWeklEMGdkR2hwY3k1emRYQndiM0owWldSR2RXNWpkR2x2Ym5OYlpuVnVZMDVoYldWZExuTmxiVlI1Y0dWek8xeHVJQ0FnSUNBZ0lDQWdJR052Ym5OMElIUjVjR1Z6SUQwZ2RHaHBjeTV6ZFhCd2IzSjBaV1JHZFc1amRHbHZibk5iWm5WdVkwNWhiV1ZkTG5SNWNHVnpPMXh1SUNBZ0lDQWdJQ0FnSUdOdmJuTjBJSFZ1YVhSeklEMGdkR2hwY3k1emRYQndiM0owWldSR2RXNWpkR2x2Ym5OYlpuVnVZMDVoYldWZExuVnVhWFJ6TzF4dUlDQWdJQ0FnSUNBZ0lHTnZibk4wSUhObGJWUjVjR1ZUZFhCd2IzSjBaV1FnUFNBaGMyVnRWSGx3WlhNdWJHVnVaM1JvSUh4OElDaGpiMnd1YzJWdFZIbHdaU0FtSmlCelpXMVVlWEJsY3k1cGJtTnNkV1JsY3loamIyd3VjMlZ0Vkhsd1pTa3BPMXh1SUNBZ0lDQWdJQ0FnSUdOdmJuTjBJSFI1Y0dWVGRYQnZjblJsWkNBOUlDRjBlWEJsY3k1c1pXNW5kR2dnZkh3Z2RIbHdaWE11YVc1amJIVmtaWE1vWTI5c0xuUjVjR1VwTzF4dUlDQWdJQ0FnSUNBZ0lHTnZibk4wSUhWdWFYUnpVM1Z3Y0c5eWRHVmtJRDBnSVhWdWFYUnpMbXhsYm1kMGFDQjhmRnh1SUNBZ0lDQWdJQ0FnSUNBZ0tHTnZiQzVuWlhSVVlXY29SRWN1VkVGSFV5NVZUa2xVVXlrZ0ppWWdkVzVwZEhNdWFXNWpiSFZrWlhNb1kyOXNMbWRsZEZSaFp5aEVSeTVVUVVkVExsVk9TVlJUS1NrcE8xeHVJQ0FnSUNBZ0lDQWdJR2xtSUNoelpXMVVlWEJsVTNWd2NHOXlkR1ZrSUNZbUlIUjVjR1ZUZFhCdmNuUmxaQ0FtSmlCMWJtbDBjMU4xY0hCdmNuUmxaQ2tnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdhV1lnS0NGMGFHbHpMbU52YkhWdGJrWjFibU4wYVc5dWMwMWhjRnRqYjJ3dWJtRnRaVjBwWEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJSFJvYVhNdVkyOXNkVzF1Um5WdVkzUnBiMjV6VFdGd1cyTnZiQzV1WVcxbFhTQTlJRnRkTzF4dUlDQWdJQ0FnSUNBZ0lDQWdkR2hwY3k1amIyeDFiVzVHZFc1amRHbHZibk5OWVhCYlkyOXNMbTVoYldWZExuQjFjMmdvWm5WdVkwNWhiV1VwTzF4dUlDQWdJQ0FnSUNBZ0lIMWNiaUFnSUNBZ0lDQWdmU2s3WEc0Z0lDQWdJQ0I5S1R0Y2JpQWdJQ0FnSUhSb2FYTXVjbVZuWlc1bGNtRjBaVU52YkVsdWNIVjBLQ2s3WEc0Z0lDQWdmVnh1WEc0Z0lDQWdjSEpwZG1GMFpTQnZia052YkhWdGJrbHVjSFYwUTJoaGJtZGxaQ2dwSUh0Y2JpQWdJQ0FnSUdOdmJuTjBJR052YkNBOUlIUm9hWE11WTI5c1NXNXdkWFF1ZG1Gc2RXVTdYRzRnSUNBZ0lDQnBaaUFvSVdOdmJDbGNiaUFnSUNBZ0lDQWdjbVYwZFhKdU8xeHVJQ0FnSUNBZ1kyOXVjM1FnYzNWd2NHOXlkR1ZrVUhKbGNISnZZMlZ6YzJsdVowWjFibU4wYVc5dWN5QTlJSFJvYVhNdVkyOXNkVzF1Um5WdVkzUnBiMjV6VFdGd1cyTnZiQzV1WVcxbFhUdGNiaUFnSUNBZ0lIUm9hWE11Y0hKbGNISnZZMlZ6YzJsdVowWjFibU4wYVc5dVNXNXdkWFFnUFNCMWFTNWphRzlwWTJWSmJuQjFkQ2duVUhKbGNISnZZMlZ6YzJsdVp5Qm1kVzVqZEdsdmJpY3NYRzRnSUNBZ0lDQWdJSE4xY0hCdmNuUmxaRkJ5WlhCeWIyTmxjM05wYm1kR2RXNWpkR2x2Ym5OYk1GMHNJSE4xY0hCdmNuUmxaRkJ5WlhCeWIyTmxjM05wYm1kR2RXNWpkR2x2Ym5Nc0lDZ3BJRDArSUh0Y2JpQWdJQ0FnSUNBZ0lDQjBhR2x6TG05dVVISmxjSEp2WTJWemMybHVaMFoxYm1OMGFXOXVRMmhoYm1kbFpDZ3BPMXh1SUNBZ0lDQWdJQ0I5S1R0Y2JpQWdJQ0FnSUd4bGRDQm1iR0ZuSUQwZ1ptRnNjMlU3WEc0Z0lDQWdJQ0JwWmlBb0lYUm9hWE11Y0hKbGNISnZZMlZ6YzJsdVowWjFibU4wYVc5dVNXNXdkWFJTYjI5MEtTQjdYRzRnSUNBZ0lDQWdJSFJvYVhNdWNISmxjSEp2WTJWemMybHVaMFoxYm1OMGFXOXVTVzV3ZFhSU2IyOTBJRDBnZEdocGN5NXdjbVZ3Y205alpYTnphVzVuUm5WdVkzUnBiMjVKYm5CMWRDNXliMjkwTzF4dUlDQWdJQ0FnSUNCbWJHRm5JRDBnZEhKMVpUdGNiaUFnSUNBZ0lIMWNiaUFnSUNBZ0lHbG1JQ2doWm14aFp5a2dlMXh1SUNBZ0lDQWdJQ0IxYVM1bGJYQjBlU2gwYUdsekxuQnlaWEJ5YjJObGMzTnBibWRHZFc1amRHbHZia2x1Y0hWMFVtOXZkQ2s3WEc0Z0lDQWdJQ0FnSUVGeWNtRjVMbVp5YjIwb2RHaHBjeTV3Y21Wd2NtOWpaWE56YVc1blJuVnVZM1JwYjI1SmJuQjFkQzV5YjI5MExtTm9hV3hrY21WdUtWeHVJQ0FnSUNBZ0lDQWdJQzVtYjNKRllXTm9LQ2hqYUdsc1pDa2dQVDRnZEdocGN5NXdjbVZ3Y205alpYTnphVzVuUm5WdVkzUnBiMjVKYm5CMWRGSnZiM1FoTG1Gd2NHVnVaQ2hqYUdsc1pDa3BPMXh1SUNBZ0lDQWdmVnh1SUNBZ0lDQWdkR2hwY3k1dmJsQnlaWEJ5YjJObGMzTnBibWRHZFc1amRHbHZia05vWVc1blpXUW9LVHRjYmlBZ0lDQjlYRzVjYmlBZ0lDQndjbWwyWVhSbElHOXVVSEpsY0hKdlkyVnpjMmx1WjBaMWJtTjBhVzl1UTJoaGJtZGxaQ2dwSUh0Y2JpQWdJQ0FnSUhWcExtVnRjSFI1S0hSb2FYTXVjSEpsY0hKdlkyVnpjMmx1WjBaMWJtTlRaWFIwYVc1bmMwUnBkaWs3WEc0Z0lDQWdJQ0IwYUdsekxuQnlaWEJ5YjJObGMzTnBibWRHZFc1amRHbHZibE5sZEhScGJtZHpJRDBnZTMwN1hHNGdJQ0FnSUNCamIyNXpkQ0JtVG1GdFpTQTlJSFJvYVhNdWNISmxjSEp2WTJWemMybHVaMFoxYm1OMGFXOXVTVzV3ZFhRdWRtRnNkV1VoTzF4dUlDQWdJQ0FnWTI5dWMzUWdaR2x6ZEdGdVkyVkdjeUE5SUhSb2FYTXVjM1Z3Y0c5eWRHVmtSblZ1WTNScGIyNXpXMlpPWVcxbFhTNWthWE4wWVc1alpVWjFibU4wYVc5dWN6dGNiaUFnSUNBZ0lIUm9hWE11WVhaaGFXeGhZbXhsVFdWMGNtbGpjeUE5SUZzdUxpNWthWE4wWVc1alpVWnpYVHRjYmlBZ0lDQWdJSFJvYVhNdWMybHRhV3hoY21sMGVVMWxkSEpwWTBsdWNIVjBJRDBnZFdrdVkyaHZhV05sU1c1d2RYUW9KMU5wYldsc1lYSnBkSGtuTENCMGFHbHpMbUYyWVdsc1lXSnNaVTFsZEhKcFkzTmJNRjBzSUhSb2FYTXVZWFpoYVd4aFlteGxUV1YwY21samN5d2diblZzYkNrN1hHNGdJQ0FnSUNCMGFHbHpMbk5wYldsc1lYSnBkSGxOWlhSeWFXTkpibkIxZEM1dWRXeHNZV0pzWlNBOUlHWmhiSE5sTzF4dUlDQWdJQ0FnYVdZZ0tDRjBhR2x6TG5OcGJXbHNZWEpwZEhsTlpYUnlhV05KYm5CMWRGSnZiM1FwWEc0Z0lDQWdJQ0FnSUhSb2FYTXVjMmx0YVd4aGNtbDBlVTFsZEhKcFkwbHVjSFYwVW05dmRDQTlJSFJvYVhNdWMybHRhV3hoY21sMGVVMWxkSEpwWTBsdWNIVjBMbkp2YjNRN1hHNWNiaUFnSUNBZ0lIVnBMbVZ0Y0hSNUtIUm9hWE11YzJsdGFXeGhjbWwwZVUxbGRISnBZMGx1Y0hWMFVtOXZkQ2s3WEc0Z0lDQWdJQ0JCY25KaGVTNW1jbTl0S0hSb2FYTXVjMmx0YVd4aGNtbDBlVTFsZEhKcFkwbHVjSFYwTG5KdmIzUXVZMmhwYkdSeVpXNHBYRzRnSUNBZ0lDQWdJQzVtYjNKRllXTm9LQ2hqYUdsc1pDa2dQVDRnZEdocGN5NXphVzFwYkdGeWFYUjVUV1YwY21salNXNXdkWFJTYjI5MExtRndjR1Z1WkNoamFHbHNaQ2twTzF4dUlDQWdJQ0FnYVdZZ0tIUm9hWE11Y0hKbGNISnZZMlZ6YzJsdVowWjFibU5UWlhSMGFXNW5jMGxqYjI0cElIdGNiaUFnSUNBZ0lDQWdhV1lnS0hSb2FYTXVjM1Z3Y0c5eWRHVmtSblZ1WTNScGIyNXpXMlpPWVcxbFhTNW1kVzVqTG1sdWNIVjBjeTVzWlc1bmRHZ2dQQ0F6S1Z4dUlDQWdJQ0FnSUNBZ0lIUm9hWE11Y0hKbGNISnZZMlZ6YzJsdVowWjFibU5UWlhSMGFXNW5jMGxqYjI0dWMzUjViR1V1WkdsemNHeGhlU0E5SUNkdWIyNWxKenRjYmlBZ0lDQWdJQ0FnWld4elpWeHVJQ0FnSUNBZ0lDQWdJSFJvYVhNdWNISmxjSEp2WTJWemMybHVaMFoxYm1OVFpYUjBhVzVuYzBsamIyNHVjM1I1YkdVdVpHbHpjR3hoZVNBOUlDZG1iR1Y0Snp0Y2JpQWdJQ0FnSUgxY2JpQWdJQ0I5WEc1Y2JpQWdJQ0J3Y21sMllYUmxJR055WldGMFpVRnNaMjl5YVhSb2JWTmxkSFJwYm1kelJHbDJLRnh1SUNBZ0lDQWdjR0Z5WVcxelJtOXliVG9nU0ZSTlRFVnNaVzFsYm5Rc0lIQmhjbUZ0Y3pvZ1ZVMUJVRTl3ZEdsdmJuTWdmQ0JVVTA1RlQzQjBhVzl1Y3lCOElFUkNVMk5oYms5d2RHbHZibk1wT2lCSVZFMU1SV3hsYldWdWRDQjdYRzRnSUNBZ0lDQjFhUzVsYlhCMGVTaHdZWEpoYlhOR2IzSnRLVHRjYmlBZ0lDQWdJRTlpYW1WamRDNXJaWGx6S0hCaGNtRnRjeWt1Wm05eVJXRmphQ2dvYVhRNklHRnVlU2tnUFQ0Z2UxeHVJQ0FnSUNBZ0lDQmpiMjV6ZENCd1lYSmhiVG9nU1VScGJWSmxaSFZqZEdsdmJsQmhjbUZ0SUh3Z1NVUnBiVkpsWkhWamRHbHZibEJoY21GdFBITjBjbWx1Wno0Z2ZDQkpSR2x0VW1Wa2RXTjBhVzl1VUdGeVlXMDhZbTl2YkdWaGJqNGdQVnh1SUNBZ0lDQWdJQ0FnSUNod1lYSmhiWE1nWVhNZ1lXNTVLVnRwZEYwN1hHNGdJQ0FnSUNBZ0lHbG1JQ2doY0dGeVlXMHVabTl5WTJWU1pXMXZkbVVwSUh0Y2JpQWdJQ0FnSUNBZ0lDQmpiMjV6ZENCcGJuQjFkQ0E5SUhCaGNtRnRMblI1Y0dVZ1BUMDlJQ2R6ZEhKcGJtY25JRDljYmlBZ0lDQWdJQ0FnSUNBZ0lIVnBMbk4wY21sdVowbHVjSFYwS0hCaGNtRnRMblZwVG1GdFpTd2djR0Z5WVcwdWRtRnNkV1VnUHo4Z0p5Y3NJQ2dwSUQwK0lIdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ2NHRnlZVzB1ZG1Gc2RXVWdQU0FvYVc1d2RYUWdZWE1nUkVjdVNXNXdkWFJDWVhObFBITjBjbWx1Wno0cExuWmhiSFZsTzF4dUlDQWdJQ0FnSUNBZ0lDQWdmU2tnT2lCd1lYSmhiUzUwZVhCbElEMDlQU0FuWW05dmJHVmhiaWNnUDF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0IxYVM1aWIyOXNTVzV3ZFhRb2NHRnlZVzB1ZFdsT1lXMWxMQ0J3WVhKaGJTNTJZV3gxWlNBL1B5Qm1ZV3h6WlN3Z0tDa2dQVDRnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUhCaGNtRnRMblpoYkhWbElEMGdLR2x1Y0hWMElHRnpJRVJITGtsdWNIVjBRbUZ6WlR4aWIyOXNaV0Z1UGlrdWRtRnNkV1U3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJSDBwSURwY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnZFdrdVpteHZZWFJKYm5CMWRDaHdZWEpoYlM1MWFVNWhiV1VzSUhCaGNtRnRMblpoYkhWbElHRnpJR0Z1ZVN3Z0tDa2dQVDRnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUhCaGNtRnRMblpoYkhWbElEMGdhVzV3ZFhRdWRtRnNkV1U3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJSDBwTzF4dUlDQWdJQ0FnSUNBZ0lIVnBMblJ2YjJ4MGFYQXVZbWx1WkNocGJuQjFkQzVwYm5CMWRDQS9QeUJwYm5CMWRDNXliMjkwTENCd1lYSmhiUzUwYjI5c2RHbHdLVHRjYmlBZ0lDQWdJQ0FnSUNCd1lYSmhiWE5HYjNKdExtRndjR1Z1WkNocGJuQjFkQzV5YjI5MEtUdGNiaUFnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdmU2s3WEc0Z0lDQWdJQ0J5WlhSMWNtNGdjR0Z5WVcxelJtOXliVHRjYmlBZ0lDQjlYRzVjYmlBZ0lDQndjbWwyWVhSbElHRnplVzVqSUdOeVpXRjBaVkJ5WlhCeWIyTmxjM05wYm1kR2RXNWpVR0Z5WVcxelJHbDJLSEJoY21GdGMwWnZjbTA2SUVoVVRVeEZiR1Z0Wlc1MExDQm1kVzVqT2lCRVJ5NUdkVzVqS1RvZ1VISnZiV2x6WlR4SVZFMU1SV3hsYldWdWRENGdlMXh1SUNBZ0lDQWdkV2t1Wlcxd2RIa29jR0Z5WVcxelJtOXliU2s3WEc0Z0lDQWdJQ0JwWmlBb1puVnVZeTVwYm5CMWRITXViR1Z1WjNSb0lEd2dNeWxjYmlBZ0lDQWdJQ0FnY21WMGRYSnVJSFZwTG1ScGRpZ3BPMXh1SUNBZ0lDQWdZMjl1YzNRZ1ptTWdQU0JtZFc1akxuQnlaWEJoY21Vb0tUdGNiaUFnSUNBZ0lHTnZibk4wSUdsdWNIVjBjeUE5SUdGM1lXbDBJR1pqTG1KMWFXeGtSV1JwZEc5eUtIVnBMbVJwZGlncEtUdGNiaUFnSUNBZ0lHWnZjaUFvYkdWMElHa2dQU0F5T3lCcElEd2dablZ1WXk1cGJuQjFkSE11YkdWdVozUm9PeUJwS3lzcElIdGNiaUFnSUNBZ0lDQWdZMjl1YzNRZ1prbHVjSFYwSUQwZ1puVnVZeTVwYm5CMWRITmJhVjA3WEc0Z0lDQWdJQ0FnSUdsbUlDaDBhR2x6TG5CeVpYQnliMk5sYzNOcGJtZEdkVzVqZEdsdmJsTmxkSFJwYm1kelcyWkpibkIxZEM1dVlXMWxYU0I4ZkNCbVl5NXBibkIxZEZCaGNtRnRjMXRtZFc1akxtbHVjSFYwYzF0cFhTNXVZVzFsWFM1MllXeDFaU0I4ZkZ4dUlDQWdJQ0FnSUNBZ0lDQm1TVzV3ZFhRdVpHVm1ZWFZzZEZaaGJIVmxLU0I3WEc0Z0lDQWdJQ0FnSUNBZ2RHaHBjeTV3Y21Wd2NtOWpaWE56YVc1blJuVnVZM1JwYjI1VFpYUjBhVzVuYzF0bVNXNXdkWFF1Ym1GdFpWMGdQVnh1SUNBZ0lDQWdJQ0FnSUNBZ2RHaHBjeTV3Y21Wd2NtOWpaWE56YVc1blJuVnVZM1JwYjI1VFpYUjBhVzVuYzF0bVNXNXdkWFF1Ym1GdFpWMGdQejhnWm1NdWFXNXdkWFJRWVhKaGJYTmJaa2x1Y0hWMExtNWhiV1ZkTG5aaGJIVmxJRDgvSUdaSmJuQjFkQzVrWldaaGRXeDBWbUZzZFdVN1hHNGdJQ0FnSUNBZ0lIMWNiaUFnSUNBZ0lDQWdZMjl1YzNRZ2FXNXdkWFFnUFNCcGJuQjFkSE11Wm1sdVpDZ29hVzV3S1NBOVBpQnBibkF1Y0hKdmNHVnlkSGt1Ym1GdFpTQTlQVDBnWmtsdWNIVjBMbTVoYldVcE8xeHVJQ0FnSUNBZ0lDQnBaaUFvSVdsdWNIVjBLVnh1SUNBZ0lDQWdJQ0FnSUdOdmJuUnBiblZsTzF4dUlDQWdJQ0FnSUNCcFppQW9kR2hwY3k1d2NtVndjbTlqWlhOemFXNW5SblZ1WTNScGIyNVRaWFIwYVc1bmMxdG1TVzV3ZFhRdWJtRnRaVjBnSVQwOUlHNTFiR3dnSmlaY2JpQWdJQ0FnSUNBZ0lDQjBhR2x6TG5CeVpYQnliMk5sYzNOcGJtZEdkVzVqZEdsdmJsTmxkSFJwYm1kelcyWkpibkIxZEM1dVlXMWxYU0FoUFQwZ2RXNWtaV1pwYm1Wa0tWeHVJQ0FnSUNBZ0lDQWdJR2x1Y0hWMExuWmhiSFZsSUQwZ2RHaHBjeTV3Y21Wd2NtOWpaWE56YVc1blJuVnVZM1JwYjI1VFpYUjBhVzVuYzF0bVNXNXdkWFF1Ym1GdFpWMDdYRzRnSUNBZ0lDQWdJR2x1Y0hWMExtOXVRMmhoYm1kbFpDZ29LU0E5UGlCN0lIUm9hWE11Y0hKbGNISnZZMlZ6YzJsdVowWjFibU4wYVc5dVUyVjBkR2x1WjNOYlprbHVjSFYwTG01aGJXVmRJRDBnYVc1d2RYUXVkbUZzZFdVN0lIMHBPMXh1SUNBZ0lDQWdJQ0J3WVhKaGJYTkdiM0p0TG1Gd2NHVnVaQ2hwYm5CMWRDNXliMjkwS1R0Y2JpQWdJQ0FnSUgxY2JpQWdJQ0FnSUhKbGRIVnliaUJ3WVhKaGJYTkdiM0p0TzF4dUlDQWdJSDFjYmx4dUlDQWdJSEIxWW14cFl5Qm5aWFJGWkdsMGIzSW9LVG9nU0ZSTlRFVnNaVzFsYm5RZ2UxeHVJQ0FnSUNBZ2NtVjBkWEp1SUhWcExtUnBkaWhiWEc0Z0lDQWdJQ0FnSUhSb2FYTXVkR0ZpYkdWSmJuQjFkQ3hjYmlBZ0lDQWdJQ0FnZEdocGN5NWpiMnhKYm5CMWRGSnZiM1FzWEc0Z0lDQWdJQ0FnSUhSb2FYTXVjSEpsY0hKdlkyVnpjMmx1WjBaMWJtTjBhVzl1U1c1d2RYUlNiMjkwTEZ4dUlDQWdJQ0FnSUNCMGFHbHpMbkJ5WlhCeWIyTmxjM05wYm1kR2RXNWpVMlYwZEdsdVozTkVhWFlzWEc0Z0lDQWdJQ0FnSUhSb2FYTXViV1YwYUc5a1NXNXdkWFFzWEc0Z0lDQWdJQ0FnSUhSb2FYTXViV1YwYUc5a1UyVjBkR2x1WjNORWFYWXNYRzRnSUNBZ0lDQWdJSFJvYVhNdWMybHRhV3hoY21sMGVVMWxkSEpwWTBsdWNIVjBVbTl2ZEN4Y2JpQWdJQ0FnSUNBZ2RHaHBjeTV3Ykc5MFJXMWlaV1JrYVc1bmMwbHVjSFYwTEZ4dUlDQWdJQ0FnSUNCMGFHbHpMbU5zZFhOMFpYSkZiV0psWkdScGJtZHpTVzV3ZFhRc1hHNGdJQ0FnSUNBZ0lIUm9hWE11WkdKVFkyRnVVMlYwZEdsdVozTkVhWFpjYmlBZ0lDQWdJRjBzSUh0emRIbHNaVG9nZTIxcGJsZHBaSFJvT2lBbk16SXdjSGduZlN3Z1kyeGhjM05sY3pvZ0ozVnBMV1p2Y20wbmZTazdYRzRnSUNBZ2ZWeHVYRzRnSUNBZ2NIVmliR2xqSUdkbGRGQmhjbUZ0Y3lncE9pQkVhVzFTWldSMVkzUnBiMjVRWVhKaGJYTWdlMXh1SUNBZ0lDQWdjbVYwZFhKdUlIdGNiaUFnSUNBZ0lDQWdkR0ZpYkdVNklIUm9hWE11ZEdGaWJHVkpibkIxZEM1MllXeDFaU0VzWEc0Z0lDQWdJQ0FnSUdOdmJEb2dkR2hwY3k1amIyeEpibkIxZEM1MllXeDFaU0VzWEc0Z0lDQWdJQ0FnSUcxbGRHaHZaRTVoYldVNklIUm9hWE11YldWMGFHOWtTVzV3ZFhRdWRtRnNkV1VoTEZ4dUlDQWdJQ0FnSUNCd2NtVndjbTlqWlhOemFXNW5SblZ1WTNScGIyNDZJSFJvYVhNdWMzVndjRzl5ZEdWa1JuVnVZM1JwYjI1elczUm9hWE11Y0hKbGNISnZZMlZ6YzJsdVowWjFibU4wYVc5dVNXNXdkWFF1ZG1Gc2RXVWhYUzVtZFc1akxGeHVJQ0FnSUNBZ0lDQnphVzFwYkdGeWFYUjVUV1YwY21sak9pQjBhR2x6TG5OcGJXbHNZWEpwZEhsTlpYUnlhV05KYm5CMWRDNTJZV3gxWlNFc1hHNGdJQ0FnSUNBZ0lIQnNiM1JGYldKbFpHUnBibWR6T2lCMGFHbHpMbkJzYjNSRmJXSmxaR1JwYm1kelNXNXdkWFF1ZG1Gc2RXVWhMRnh1SUNBZ0lDQWdJQ0JqYkhWemRHVnlSVzFpWldSa2FXNW5jem9nZEdocGN5NWpiSFZ6ZEdWeVJXMWlaV1JrYVc1bmMwbHVjSFYwTG5aaGJIVmxJU3hjYmlBZ0lDQWdJQ0FnYjNCMGFXOXVjem9nZXk0dUxuUm9hWE11WVd4bmIzSnBkR2h0VDNCMGFXOXVjeXdnTGk0dWRHaHBjeTVrWWxOallXNVBjSFJwYjI1ekxGeHVJQ0FnSUNBZ0lDQWdJSEJ5WlhCeWIyTmxjM05wYm1kR2RXNWpRWEpuY3pvZ0tIUm9hWE11Y0hKbGNISnZZMlZ6YzJsdVowWjFibU4wYVc5dVUyVjBkR2x1WjNNZ1B6OGdlMzBwZlZ4dUlDQWdJQ0FnZlR0Y2JpQWdJQ0I5WEc1OVhHNGlYWDA9IiwiZXhwb3J0IGNvbnN0IERJTV9SRURfUFJFUFJPQ0VTU0lOR19GVU5DVElPTl9UQUcgPSAnZGltLXJlZC1wcmVwcm9jZXNzaW5nLWZ1bmN0aW9uJztcbmV4cG9ydCBjb25zdCBESU1fUkVEX1BPU1RQUk9DRVNTSU5HX0ZVTkNUSU9OX1RBRyA9ICdkaW0tcmVkLXBvc3Rwcm9jZXNzaW5nLWZ1bmN0aW9uJztcbmV4cG9ydCBjb25zdCBESU1fUkVEX0RFRkFVTFRfUE9TVFBST0NFU1NJTkdfRlVOQ1RJT05fTUVUQSA9ICdkZWZhdWx0UG9zdFByb2Nlc3NpbmdGdW5jdGlvbic7XG5leHBvcnQgY29uc3QgU1VQUE9SVEVEX1NFTVRZUEVTX1RBRyA9ICdzdXBwb3J0ZWRTZW1UeXBlcyc7XG5leHBvcnQgY29uc3QgU1VQUE9SVEVEX1RZUEVTX1RBRyA9ICdzdXBwb3J0ZWRUeXBlcyc7XG5leHBvcnQgY29uc3QgU1VQUE9SVEVEX1VOSVRTX1RBRyA9ICdzdXBwb3J0ZWRVbml0cyc7XG5leHBvcnQgY29uc3QgU1VQUE9SVEVEX0RJU1RBTkNFX0ZVTkNUSU9OU19UQUcgPSAnc3VwcG9ydGVkRGlzdGFuY2VGdW5jdGlvbnMnO1xuZXhwb3J0IGNvbnN0IEJZUEFTU19MQVJHRV9EQVRBX1dBUk5JTkcgPSAnYnlwYXNzTGFyZ2VEYXRhV2FybmluZyc7XG5leHBvcnQgY29uc3QgU0hPV19TQ0FUVEVSUExPVF9QUk9HUkVTUyA9ICdzaG93LXNjYXR0ZXJwbG90LXByb2dyZXNzJztcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaVkyOXVjM1J6TG1weklpd2ljMjkxY21ObFVtOXZkQ0k2SWlJc0luTnZkWEpqWlhNaU9sc2lZMjl1YzNSekxuUnpJbDBzSW01aGJXVnpJanBiWFN3aWJXRndjR2x1WjNNaU9pSkJRVUZCTEUxQlFVMHNRMEZCUXl4TlFVRk5MR3REUVVGclF5eEhRVUZITEdkRFFVRm5ReXhEUVVGRE8wRkJRMjVHTEUxQlFVMHNRMEZCUXl4TlFVRk5MRzFEUVVGdFF5eEhRVUZITEdsRFFVRnBReXhEUVVGRE8wRkJRM0pHTEUxQlFVMHNRMEZCUXl4TlFVRk5MRFJEUVVFMFF5eEhRVUZITEN0Q1FVRXJRaXhEUVVGRE8wRkJRelZHTEUxQlFVMHNRMEZCUXl4TlFVRk5MSE5DUVVGelFpeEhRVUZITEcxQ1FVRnRRaXhEUVVGRE8wRkJRekZFTEUxQlFVMHNRMEZCUXl4TlFVRk5MRzFDUVVGdFFpeEhRVUZITEdkQ1FVRm5RaXhEUVVGRE8wRkJRM0JFTEUxQlFVMHNRMEZCUXl4TlFVRk5MRzFDUVVGdFFpeEhRVUZITEdkQ1FVRm5RaXhEUVVGRE8wRkJRM0JFTEUxQlFVMHNRMEZCUXl4TlFVRk5MR2REUVVGblF5eEhRVUZITERSQ1FVRTBRaXhEUVVGRE8wRkJRemRGTEUxQlFVMHNRMEZCUXl4TlFVRk5MSGxDUVVGNVFpeEhRVUZITEhkQ1FVRjNRaXhEUVVGRE8wRkJRMnhGTEUxQlFVMHNRMEZCUXl4TlFVRk5MSGxDUVVGNVFpeEhRVUZITERKQ1FVRXlRaXhEUVVGRElpd2ljMjkxY21ObGMwTnZiblJsYm5RaU9sc2laWGh3YjNKMElHTnZibk4wSUVSSlRWOVNSVVJmVUZKRlVGSlBRMFZUVTBsT1IxOUdWVTVEVkVsUFRsOVVRVWNnUFNBblpHbHRMWEpsWkMxd2NtVndjbTlqWlhOemFXNW5MV1oxYm1OMGFXOXVKenRjYm1WNGNHOXlkQ0JqYjI1emRDQkVTVTFmVWtWRVgxQlBVMVJRVWs5RFJWTlRTVTVIWDBaVlRrTlVTVTlPWDFSQlJ5QTlJQ2RrYVcwdGNtVmtMWEJ2YzNSd2NtOWpaWE56YVc1bkxXWjFibU4wYVc5dUp6dGNibVY0Y0c5eWRDQmpiMjV6ZENCRVNVMWZVa1ZFWDBSRlJrRlZURlJmVUU5VFZGQlNUME5GVTFOSlRrZGZSbFZPUTFSSlQwNWZUVVZVUVNBOUlDZGtaV1poZFd4MFVHOXpkRkJ5YjJObGMzTnBibWRHZFc1amRHbHZiaWM3WEc1bGVIQnZjblFnWTI5dWMzUWdVMVZRVUU5U1ZFVkVYMU5GVFZSWlVFVlRYMVJCUnlBOUlDZHpkWEJ3YjNKMFpXUlRaVzFVZVhCbGN5YzdYRzVsZUhCdmNuUWdZMjl1YzNRZ1UxVlFVRTlTVkVWRVgxUlpVRVZUWDFSQlJ5QTlJQ2R6ZFhCd2IzSjBaV1JVZVhCbGN5YzdYRzVsZUhCdmNuUWdZMjl1YzNRZ1UxVlFVRTlTVkVWRVgxVk9TVlJUWDFSQlJ5QTlJQ2R6ZFhCd2IzSjBaV1JWYm1sMGN5YzdYRzVsZUhCdmNuUWdZMjl1YzNRZ1UxVlFVRTlTVkVWRVgwUkpVMVJCVGtORlgwWlZUa05VU1U5T1UxOVVRVWNnUFNBbmMzVndjRzl5ZEdWa1JHbHpkR0Z1WTJWR2RXNWpkR2x2Ym5Nbk8xeHVaWGh3YjNKMElHTnZibk4wSUVKWlVFRlRVMTlNUVZKSFJWOUVRVlJCWDFkQlVrNUpUa2NnUFNBbllubHdZWE56VEdGeVoyVkVZWFJoVjJGeWJtbHVaeWM3WEc1bGVIQnZjblFnWTI5dWMzUWdVMGhQVjE5VFEwRlVWRVZTVUV4UFZGOVFVazlIVWtWVFV5QTlJQ2R6YUc5M0xYTmpZWFIwWlhKd2JHOTBMWEJ5YjJkeVpYTnpKenRjYmlKZGZRPT0iLCJleHBvcnQgdmFyIERpc3RhbmNlQWdncmVnYXRpb25NZXRob2RzO1xuKGZ1bmN0aW9uIChEaXN0YW5jZUFnZ3JlZ2F0aW9uTWV0aG9kcykge1xuICAgIERpc3RhbmNlQWdncmVnYXRpb25NZXRob2RzW1wiRVVDTElERUFOXCJdID0gXCJFVUNMSURFQU5cIjtcbiAgICBEaXN0YW5jZUFnZ3JlZ2F0aW9uTWV0aG9kc1tcIk1BTkhBVFRBTlwiXSA9IFwiTUFOSEFUVEFOXCI7XG59KShEaXN0YW5jZUFnZ3JlZ2F0aW9uTWV0aG9kcyB8fCAoRGlzdGFuY2VBZ2dyZWdhdGlvbk1ldGhvZHMgPSB7fSkpO1xuO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pZEhsd1pYTXVhbk1pTENKemIzVnlZMlZTYjI5MElqb2lJaXdpYzI5MWNtTmxjeUk2V3lKMGVYQmxjeTUwY3lKZExDSnVZVzFsY3lJNlcxMHNJbTFoY0hCcGJtZHpJam9pUVVGQlFTeE5RVUZOTEVOQlFVNHNTVUZCV1N3d1FrRkhWRHRCUVVoSUxGZEJRVmtzTUVKQlFUQkNPMGxCUTJ4RExIRkVRVUYxUWl4RFFVRkJPMGxCUTNaQ0xIRkVRVUYxUWl4RFFVRkJPMEZCUTNwQ0xFTkJRVU1zUlVGSVV5d3dRa0ZCTUVJc1MwRkJNVUlzTUVKQlFUQkNMRkZCUjI1RE8wRkJRVUVzUTBGQlF5SXNJbk52ZFhKalpYTkRiMjUwWlc1MElqcGJJbVY0Y0c5eWRDQmxiblZ0SUVScGMzUmhibU5sUVdkbmNtVm5ZWFJwYjI1TlpYUm9iMlJ6SUh0Y2JpQWdJQ0JGVlVOTVNVUkZRVTRnUFNBblJWVkRURWxFUlVGT0p5eGNiaUFnSUNCTlFVNUlRVlJVUVU0Z1BTQW5UVUZPU0VGVVZFRk9KeXhjYmlBZ2ZUdGNibHh1Wlhod2IzSjBJSFI1Y0dVZ1JHbHpkR0Z1WTJWQloyZHlaV2RoZEdsdmJrMWxkR2h2WkNBOUlHdGxlVzltSUhSNWNHVnZaaUJFYVhOMFlXNWpaVUZuWjNKbFoyRjBhVzl1VFdWMGFHOWtjenRjYmlKZGZRPT0iLCJjb25zdCBfX1dFQlBBQ0tfTkFNRVNQQUNFX09CSkVDVF9fID0gcnhqczsiLCJcbiAgICAgIGltcG9ydCBBUEkgZnJvbSBcIiEuLi8uLi8uLi9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL2luamVjdFN0eWxlc0ludG9TdHlsZVRhZy5qc1wiO1xuICAgICAgaW1wb3J0IGRvbUFQSSBmcm9tIFwiIS4uLy4uLy4uL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvc3R5bGVEb21BUEkuanNcIjtcbiAgICAgIGltcG9ydCBpbnNlcnRGbiBmcm9tIFwiIS4uLy4uLy4uL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvaW5zZXJ0QnlTZWxlY3Rvci5qc1wiO1xuICAgICAgaW1wb3J0IHNldEF0dHJpYnV0ZXMgZnJvbSBcIiEuLi8uLi8uLi9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL3NldEF0dHJpYnV0ZXNXaXRob3V0QXR0cmlidXRlcy5qc1wiO1xuICAgICAgaW1wb3J0IGluc2VydFN0eWxlRWxlbWVudCBmcm9tIFwiIS4uLy4uLy4uL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvaW5zZXJ0U3R5bGVFbGVtZW50LmpzXCI7XG4gICAgICBpbXBvcnQgc3R5bGVUYWdUcmFuc2Zvcm1GbiBmcm9tIFwiIS4uLy4uLy4uL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvc3R5bGVUYWdUcmFuc2Zvcm0uanNcIjtcbiAgICAgIGltcG9ydCBjb250ZW50LCAqIGFzIG5hbWVkRXhwb3J0IGZyb20gXCIhIS4uLy4uLy4uL2Nzcy1sb2FkZXIvZGlzdC9janMuanMhLi9zdHlsZXMuY3NzXCI7XG4gICAgICBcbiAgICAgIFxuXG52YXIgb3B0aW9ucyA9IHt9O1xuXG5vcHRpb25zLnN0eWxlVGFnVHJhbnNmb3JtID0gc3R5bGVUYWdUcmFuc2Zvcm1Gbjtcbm9wdGlvbnMuc2V0QXR0cmlidXRlcyA9IHNldEF0dHJpYnV0ZXM7XG5vcHRpb25zLmluc2VydCA9IGluc2VydEZuLmJpbmQobnVsbCwgXCJoZWFkXCIpO1xub3B0aW9ucy5kb21BUEkgPSBkb21BUEk7XG5vcHRpb25zLmluc2VydFN0eWxlRWxlbWVudCA9IGluc2VydFN0eWxlRWxlbWVudDtcblxudmFyIHVwZGF0ZSA9IEFQSShjb250ZW50LCBvcHRpb25zKTtcblxuXG5cbmV4cG9ydCAqIGZyb20gXCIhIS4uLy4uLy4uL2Nzcy1sb2FkZXIvZGlzdC9janMuanMhLi9zdHlsZXMuY3NzXCI7XG4gICAgICAgZXhwb3J0IGRlZmF1bHQgY29udGVudCAmJiBjb250ZW50LmxvY2FscyA/IGNvbnRlbnQubG9jYWxzIDogdW5kZWZpbmVkO1xuIiwiaW1wb3J0ICogYXMgZ3JvayBmcm9tICdkYXRhZ3Jvay1hcGkvZ3Jvayc7XG5pbXBvcnQgKiBhcyB1aSBmcm9tICdkYXRhZ3Jvay1hcGkvdWknO1xuaW1wb3J0ICogYXMgREcgZnJvbSAnZGF0YWdyb2stYXBpL2RnJztcbmltcG9ydCB7IERpbVJlZHVjdGlvbk1ldGhvZHMgfSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB7IERCU2Nhbk9wdGlvbnMgfSBmcm9tICcuLi9mdW5jdGlvbkVkaXRvcnMvZGltZW5zaW9uYWxpdHktcmVkdWN0aW9uLWVkaXRvcic7XG5pbXBvcnQgeyBESU1fUkVEX0RFRkFVTFRfUE9TVFBST0NFU1NJTkdfRlVOQ1RJT05fTUVUQSwgRElNX1JFRF9QT1NUUFJPQ0VTU0lOR19GVU5DVElPTl9UQUcsIERJTV9SRURfUFJFUFJPQ0VTU0lOR19GVU5DVElPTl9UQUcsIFNVUFBPUlRFRF9ESVNUQU5DRV9GVU5DVElPTlNfVEFHLCBTVVBQT1JURURfU0VNVFlQRVNfVEFHLCBTVVBQT1JURURfVFlQRVNfVEFHLCBTVVBQT1JURURfVU5JVFNfVEFHIH0gZnJvbSAnLi4vZnVuY3Rpb25FZGl0b3JzL2NvbnN0cyc7XG5pbXBvcnQgeyBEaXN0YW5jZUFnZ3JlZ2F0aW9uTWV0aG9kcyB9IGZyb20gJy4uL2Rpc3RhbmNlLW1hdHJpeC90eXBlcyc7XG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgJy4uLy4uL2Nzcy9zdHlsZXMuY3NzJztcbmltcG9ydCB7IGdldEdQVUFkYXB0ZXJEZXNjcmlwdGlvbiB9IGZyb20gJ0BkYXRhZ3Jvay1saWJyYXJpZXMvbWF0aC9zcmMvd2ViR1BVL2dldEdQVURldmljZSc7XG5leHBvcnQgY2xhc3MgVU1BUE9wdGlvbnMge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLmxlYXJuaW5nUmF0ZSA9IHsgdWlOYW1lOiAnTGVhcm5pbmlnIHJhdGUnLCB2YWx1ZTogMSwgdG9vbHRpcDogJ1RoZSBpbml0aWFsIGxlYXJuaW5nIHJhdGUgZm9yIHRoZSBlbWJlZGRpbmcgb3B0aW1pemF0aW9uJyB9O1xuICAgICAgICAvLyBuQ29tcG9uZW50czogSURpbVJlZHVjdGlvblBhcmFtID1cbiAgICAgICAgLy8ge3VpTmFtZTogJ0NvbXBvbmVudHMnLCB2YWx1ZTogMiwgdG9vbHRpcDogJ1RoZSBudW1iZXIgb2YgY29tcG9uZW50cyAoZGltZW5zaW9ucykgdG8gcHJvamVjdCB0aGUgZGF0YSB0byd9O1xuICAgICAgICB0aGlzLm5FcG9jaHMgPSB7IHVpTmFtZTogJ0Vwb2NocycsIHZhbHVlOiAwLFxuICAgICAgICAgICAgdG9vbHRpcDogJ1RoZSBudW1iZXIgb2YgZXBvY2hzIHRvIG9wdGltaXplIGVtYmVkZGluZ3MgdmlhIFNHRC4gQ29tcHV0ZWQgYXV0b21hdGljYWxseSBpZiBzZXQgdG8gMCcgfTtcbiAgICAgICAgdGhpcy5uTmVpZ2hib3JzID0geyB1aU5hbWU6ICdOZWlnaGJvcnMnLCB2YWx1ZTogMTUsIHRvb2x0aXA6ICdUaGUgbnVtYmVyIG9mIG5lYXJlc3QgbmVpZ2hib3JzIHRvIGNvbnN0cnVjdCB0aGUgZnV6enkgbWFuaWZvbGQnIH07XG4gICAgICAgIHRoaXMuc3ByZWFkID0geyB1aU5hbWU6ICdTcHJlYWQnLCB2YWx1ZTogMSxcbiAgICAgICAgICAgIHRvb2x0aXA6IGBUaGUgZWZmZWN0aXZlIHNjYWxlIG9mIGVtYmVkZGVkIHBvaW50cywgdXNlZCB3aXRoIG1pbiBkaXN0YW5jZSB0byBjb250cm9sIFxuICAgIHRoZSBjbHVtcGVkL2Rpc3BlcnNlZCBuYXR1cmUgb2YgdGhlIGVtYmVkZGluZ2AgfTtcbiAgICAgICAgdGhpcy5taW5EaXN0ID0geyB1aU5hbWU6ICdNaW4gZGlzdGFuY2UnLCB2YWx1ZTogMC4xLFxuICAgICAgICAgICAgdG9vbHRpcDogYFRoZSBlZmZlY3RpdmUgbWluaW11bSBkaXN0YW5jZSBiZXR3ZWVuIGVtYmVkZGVkIHBvaW50cywgXG4gIHVzZWQgd2l0aCBzcHJlYWQgdG8gY29udHJvbCB0aGUgY2x1bXBlZC9kaXNwZXJzZWQgbmF0dXJlIG9mIHRoZSBlbWJlZGRpbmdgIH07XG4gICAgICAgIHRoaXMucmFuZG9tU2VlZCA9IHsgdWlOYW1lOiAnUmFuZG9tIHNlZWQnLCB2YWx1ZTogbnVsbCwgdG9vbHRpcDogJ1JhbmRvbSBzZWVkJywgdHlwZTogJ3N0cmluZycgfTtcbiAgICAgICAgdGhpcy51c2VXZWJHUFUgPSB7IHVpTmFtZTogJ1VzZSBXZWJHUFUnLCB2YWx1ZTogZmFsc2UsIHRvb2x0aXA6ICdVc2UgV2ViR1BVIGZvciBLTk4gY29tcHV0YXRpb25zJywgdHlwZTogJ2Jvb2xlYW4nIH07XG4gICAgICAgIGdldEdQVUFkYXB0ZXJEZXNjcmlwdGlvbigpLnRoZW4oKGRlc2MpID0+IHtcbiAgICAgICAgICAgIGlmIChkZXNjKSB7XG4gICAgICAgICAgICAgICAgdGhpcy51c2VXZWJHUFUudG9vbHRpcCArPSBgICgke2Rlc2N9KWA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnVzZVdlYkdQVS52YWx1ZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMudXNlV2ViR1BVLmZvcmNlUmVtb3ZlID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIDtcbn1cbmV4cG9ydCBjbGFzcyBUU05FT3B0aW9ucyB7XG4gICAgLy8gZGltOiBJRGltUmVkdWN0aW9uUGFyYW0gPSB7dWlOYW1lOiAnRGltZW5zaW9uYWxpdHknLCB2YWx1ZTogMiwgdG9vbHRpcDogJ0RpbWVuc2lvbmFsaXR5IG9mIHRoZSBlbWJlZGRpbmcnfTtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5lcHNpbG9uID0geyB1aU5hbWU6ICdFcHNpbG9uJywgdmFsdWU6IDEwLCB0b29sdGlwOiAnRXBzaWxvbiBpcyBsZWFybmluZyByYXRlJyB9O1xuICAgICAgICB0aGlzLnBlcnBsZXhpdHkgPSB7IHVpTmFtZTogJ1BlcnBsZXhpdHknLCB2YWx1ZTogMzAsIHRvb2x0aXA6ICdSb3VnaGx5IGhvdyBtYW55IG5laWdoYm9ycyBlYWNoIHBvaW50IGluZmx1ZW5jZXMnIH07XG4gICAgfVxuICAgIDtcbn1cbmV4cG9ydCBjbGFzcyBNdWx0aUNvbHVtbkRpbVJlZHVjdGlvbkVkaXRvciB7XG4gICAgY29uc3RydWN0b3IoZWRpdG9yU2V0dGluZ3MgPSB7fSkge1xuICAgICAgICB0aGlzLmVkaXRvclNldHRpbmdzID0ge307XG4gICAgICAgIHRoaXMuY29sdW1uT3B0RWRpdG9ycyA9IFtdO1xuICAgICAgICB0aGlzLmNvbHVtbk9wdEVkaXRvcnNSb290ID0gdWkuZGl2KCk7XG4gICAgICAgIHRoaXMuY29sdW1uUGFyYW1zRWRpdG9yUm9vdCA9IHVpLmRpdigpO1xuICAgICAgICB0aGlzLndlaWdodHNFZGl0b3JSb290ID0gdWkuZGl2KCk7XG4gICAgICAgIHRoaXMuY29sdW1uRnVuY3Rpb25zTWFwID0ge307XG4gICAgICAgIHRoaXMubWV0aG9kc1BhcmFtcyA9IHtcbiAgICAgICAgICAgIFtEaW1SZWR1Y3Rpb25NZXRob2RzLlVNQVBdOiBuZXcgVU1BUE9wdGlvbnMoKSxcbiAgICAgICAgICAgIFtEaW1SZWR1Y3Rpb25NZXRob2RzLlRfU05FXTogbmV3IFRTTkVPcHRpb25zKClcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5kYlNjYW5QYXJhbXMgPSBuZXcgREJTY2FuT3B0aW9ucygpO1xuICAgICAgICB0aGlzLm1ldGhvZFNldHRpbmdzRGl2ID0gdWkuaW5wdXRzKFtdKTtcbiAgICAgICAgdGhpcy5kYlNjYW5TZXR0aW5nc0RpdiA9IHVpLmlucHV0cyhbXSk7XG4gICAgICAgIHRoaXMuc3VwcG9ydGVkRnVuY3Rpb25zID0ge307XG4gICAgICAgIHRoaXMucGxvdEVtYmVkZGluZ3NJbnB1dCA9IHVpLmJvb2xJbnB1dCgnUGxvdCBlbWJlZGRpbmdzJywgdHJ1ZSk7XG4gICAgICAgIHRoaXMuY2x1c3RlckVtYmVkZGluZ3NJbnB1dCA9IHVpLmJvb2xJbnB1dCgnQ2x1c3RlciBlbWJlZGRpbmdzJywgZmFsc2UpO1xuICAgICAgICB0aGlzLmFnZ3JlZ2F0aW9uTWV0aG9kSW5wdXQgPSB1aS5jaG9pY2VJbnB1dCgnQWdncmVnYXRpb24nLCBEaXN0YW5jZUFnZ3JlZ2F0aW9uTWV0aG9kcy5FVUNMSURFQU4sIFtEaXN0YW5jZUFnZ3JlZ2F0aW9uTWV0aG9kcy5FVUNMSURFQU4sIERpc3RhbmNlQWdncmVnYXRpb25NZXRob2RzLk1BTkhBVFRBTl0pO1xuICAgICAgICB0aGlzLmFnZ3JlZ2F0aW9uTWV0aG9kSW5wdXQuc2V0VG9vbHRpcCgnQWdncmVnYXRpb24gbWV0aG9kIGZvciBjb21iaW5pbmcgZGlzdGFuY2VzIGJldHdlZW4gY29sdW1ucycpO1xuICAgICAgICB0aGlzLm9uQ29sdW1uc0NoYW5nZWQgPSBuZXcgU3ViamVjdCgpO1xuICAgICAgICB0aGlzLmVkaXRvclNldHRpbmdzID0gZWRpdG9yU2V0dGluZ3M7XG4gICAgICAgIHRoaXMuY29sdW1uUGFyYW1zRWRpdG9yQWNjb3JkaW9uID0gdWkuYWNjb3JkaW9uKCk7XG4gICAgICAgIGNvbnN0IHByZXBvcmNlc3NpbmdGdW5jcyA9IERHLkZ1bmMuZmluZCh7IHRhZ3M6IFtESU1fUkVEX1BSRVBST0NFU1NJTkdfRlVOQ1RJT05fVEFHXSB9KTtcbiAgICAgICAgcHJlcG9yY2Vzc2luZ0Z1bmNzLmZvckVhY2goKGYpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHNlbVR5cGVzID0gZi5vcHRpb25zLmdldChTVVBQT1JURURfU0VNVFlQRVNfVEFHKSA/PyAnJztcbiAgICAgICAgICAgIGNvbnN0IG5hbWUgPSBmLmZyaWVuZGx5TmFtZSA/PyBmLm5hbWU7XG4gICAgICAgICAgICBjb25zdCB0eXBlcyA9IGYub3B0aW9ucy5nZXQoU1VQUE9SVEVEX1RZUEVTX1RBRykgPz8gJyc7XG4gICAgICAgICAgICBjb25zdCB1bml0cyA9IGYub3B0aW9ucy5nZXQoU1VQUE9SVEVEX1VOSVRTX1RBRykgPz8gJyc7XG4gICAgICAgICAgICBjb25zdCBkaXN0YW5jZUZ1bmN0aW9ucyA9IGYub3B0aW9ucy5nZXQoU1VQUE9SVEVEX0RJU1RBTkNFX0ZVTkNUSU9OU19UQUcpID8/ICcnO1xuICAgICAgICAgICAgaWYgKHRoaXMuZWRpdG9yU2V0dGluZ3Muc2VtdHlwZSAmJiAhc2VtVHlwZXMuaW5jbHVkZXModGhpcy5lZGl0b3JTZXR0aW5ncy5zZW10eXBlKSlcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICBpZiAodGhpcy5lZGl0b3JTZXR0aW5ncy50eXBlICYmICF0eXBlcy5pbmNsdWRlcyh0aGlzLmVkaXRvclNldHRpbmdzLnR5cGUpKVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIGlmICh0aGlzLmVkaXRvclNldHRpbmdzLnVuaXRzICYmICF1bml0cy5pbmNsdWRlcyh0aGlzLmVkaXRvclNldHRpbmdzLnVuaXRzKSlcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB0aGlzLnN1cHBvcnRlZEZ1bmN0aW9uc1tuYW1lXSA9IHtcbiAgICAgICAgICAgICAgICBmdW5jOiBmLFxuICAgICAgICAgICAgICAgIHNlbVR5cGVzOiBzZW1UeXBlcyA/IHNlbVR5cGVzLnNwbGl0KCcsJykgOiBbXSxcbiAgICAgICAgICAgICAgICB0eXBlczogdHlwZXMgPyB0eXBlcy5zcGxpdCgnLCcpIDogW10sXG4gICAgICAgICAgICAgICAgdW5pdHM6IHVuaXRzID8gdW5pdHMuc3BsaXQoJywnKSA6IFtdLFxuICAgICAgICAgICAgICAgIGRpc3RhbmNlRnVuY3Rpb25zOiBkaXN0YW5jZUZ1bmN0aW9ucyA/IGRpc3RhbmNlRnVuY3Rpb25zLnNwbGl0KCcsJykgOiBbXSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnBvc3RQcm9jZXNzaW5nRWRpdG9yID0gbmV3IFBvc3RQcm9jZXNzaW5nRnVuY0VkaXRvcigpO1xuICAgICAgICB0aGlzLnRhYmxlSW5wdXQgPSB1aS50YWJsZUlucHV0KCdUYWJsZScsIGdyb2suc2hlbGwudHYuZGF0YUZyYW1lLCBncm9rLnNoZWxsLnRhYmxlcywgKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5vblRhYmxlSW5wdXRDaGFuZ2VkKCk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLm9uVGFibGVJbnB1dENoYW5nZWQoKTtcbiAgICAgICAgbGV0IHNldHRpbmdzT3BlbmVkID0gZmFsc2U7XG4gICAgICAgIGxldCBkYlNjYW5TZXR0aW5nc09wZW5lZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLm1ldGhvZElucHV0ID0gdWkuY2hvaWNlSW5wdXQoJ01ldGhvZCcsIERpbVJlZHVjdGlvbk1ldGhvZHMuVU1BUCwgW0RpbVJlZHVjdGlvbk1ldGhvZHMuVU1BUCwgRGltUmVkdWN0aW9uTWV0aG9kcy5UX1NORV0sICgpID0+IHtcbiAgICAgICAgICAgIGlmIChzZXR0aW5nc09wZW5lZClcbiAgICAgICAgICAgICAgICB0aGlzLmNyZWF0ZUFsZ29yaXRobVNldHRpbmdzRGl2KHRoaXMubWV0aG9kU2V0dGluZ3NEaXYsIHRoaXMubWV0aG9kc1BhcmFtc1t0aGlzLm1ldGhvZElucHV0LnZhbHVlXSk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLm1ldGhvZFNldHRpbmdzSWNvbiA9IHVpLmljb25zLnNldHRpbmdzKCgpID0+IHtcbiAgICAgICAgICAgIHNldHRpbmdzT3BlbmVkID0gIXNldHRpbmdzT3BlbmVkO1xuICAgICAgICAgICAgaWYgKCFzZXR0aW5nc09wZW5lZClcbiAgICAgICAgICAgICAgICB1aS5lbXB0eSh0aGlzLm1ldGhvZFNldHRpbmdzRGl2KTtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICB0aGlzLmNyZWF0ZUFsZ29yaXRobVNldHRpbmdzRGl2KHRoaXMubWV0aG9kU2V0dGluZ3NEaXYsIHRoaXMubWV0aG9kc1BhcmFtc1t0aGlzLm1ldGhvZElucHV0LnZhbHVlXSk7XG4gICAgICAgIH0sICdNb2RpZnkgbWV0aG9kcyBwYXJhbWV0ZXJzJyk7XG4gICAgICAgIHRoaXMuZGJTY2FuU2V0dGluZ3NJY29uID0gdWkuaWNvbnMuc2V0dGluZ3MoKCkgPT4ge1xuICAgICAgICAgICAgZGJTY2FuU2V0dGluZ3NPcGVuZWQgPSAhZGJTY2FuU2V0dGluZ3NPcGVuZWQ7XG4gICAgICAgICAgICBpZiAoIWRiU2NhblNldHRpbmdzT3BlbmVkKVxuICAgICAgICAgICAgICAgIHVpLmVtcHR5KHRoaXMuZGJTY2FuU2V0dGluZ3NEaXYpO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIHRoaXMuY3JlYXRlQWxnb3JpdGhtU2V0dGluZ3NEaXYodGhpcy5kYlNjYW5TZXR0aW5nc0RpdiwgdGhpcy5kYlNjYW5QYXJhbXMpO1xuICAgICAgICB9LCAnTW9kaWZ5IGNsdXN0ZXJpbmcgcGFyYW1ldGVycycpO1xuICAgICAgICB0aGlzLmNsdXN0ZXJFbWJlZGRpbmdzSW5wdXQuY2xhc3NMaXN0LmFkZCgnbWwtZGltLXJlZHVjdGlvbi1zZXR0aW5ncy1pbnB1dCcpO1xuICAgICAgICB0aGlzLmNsdXN0ZXJFbWJlZGRpbmdzSW5wdXQucm9vdC5wcmVwZW5kKHRoaXMuZGJTY2FuU2V0dGluZ3NJY29uKTtcbiAgICAgICAgdGhpcy5tZXRob2RJbnB1dC5yb290LmNsYXNzTGlzdC5hZGQoJ21sLWRpbS1yZWR1Y3Rpb24tc2V0dGluZ3MtaW5wdXQnKTtcbiAgICAgICAgdGhpcy5tZXRob2RJbnB1dC5yb290LnByZXBlbmQodGhpcy5tZXRob2RTZXR0aW5nc0ljb24pO1xuICAgICAgICB0aGlzLmNvbHVtblBhcmFtc0VkaXRvckFjY29yZGlvbi5hZGRQYW5lKCdDb2x1bW4gb3B0aW9ucycsICgpID0+IHRoaXMuY29sdW1uT3B0RWRpdG9yc1Jvb3QsIHRydWUsIG51bGwsIGZhbHNlKTtcbiAgICAgICAgdGhpcy5jb2x1bW5QYXJhbXNFZGl0b3JBY2NvcmRpb24ucm9vdC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICAgICAgICB0aGlzLmNvbHVtblBhcmFtc0VkaXRvclJvb3QuYXBwZW5kQ2hpbGQodGhpcy5jb2x1bW5QYXJhbXNFZGl0b3JBY2NvcmRpb24ucm9vdCk7XG4gICAgICAgIHRoaXMuY29sdW1uUGFyYW1zRWRpdG9yUm9vdC5hcHBlbmRDaGlsZCh0aGlzLndlaWdodHNFZGl0b3JSb290KTtcbiAgICB9XG4gICAgb25UYWJsZUlucHV0Q2hhbmdlZCgpIHtcbiAgICAgICAgY29uc3QgdGFibGUgPSB0aGlzLnRhYmxlSW5wdXQudmFsdWU7XG4gICAgICAgIGlmICghdGFibGUpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHVpLmVtcHR5KHRoaXMuY29sdW1uT3B0RWRpdG9yc1Jvb3QpO1xuICAgICAgICB1aS5lbXB0eSh0aGlzLndlaWdodHNFZGl0b3JSb290KTtcbiAgICAgICAgdGhpcy5jb2x1bW5GdW5jdGlvbnNNYXAgPSB7fTtcbiAgICAgICAgY29uc3QgY29sdW1ucyA9IHRhYmxlLmNvbHVtbnMudG9MaXN0KCk7XG4gICAgICAgIGNvbHVtbnMuZm9yRWFjaCgoY29sKSA9PiB7XG4gICAgICAgICAgICBPYmplY3Qua2V5cyh0aGlzLnN1cHBvcnRlZEZ1bmN0aW9ucykuZm9yRWFjaCgoZnVuY05hbWUpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBzZW1UeXBlcyA9IHRoaXMuc3VwcG9ydGVkRnVuY3Rpb25zW2Z1bmNOYW1lXS5zZW1UeXBlcztcbiAgICAgICAgICAgICAgICBjb25zdCB0eXBlcyA9IHRoaXMuc3VwcG9ydGVkRnVuY3Rpb25zW2Z1bmNOYW1lXS50eXBlcztcbiAgICAgICAgICAgICAgICBjb25zdCB1bml0cyA9IHRoaXMuc3VwcG9ydGVkRnVuY3Rpb25zW2Z1bmNOYW1lXS51bml0cztcbiAgICAgICAgICAgICAgICBjb25zdCBzZW1UeXBlU3VwcG9ydGVkID0gIXNlbVR5cGVzLmxlbmd0aCB8fCAoY29sLnNlbVR5cGUgJiYgc2VtVHlwZXMuaW5jbHVkZXMoY29sLnNlbVR5cGUpKTtcbiAgICAgICAgICAgICAgICBjb25zdCB0eXBlU3Vwb3J0ZWQgPSAhdHlwZXMubGVuZ3RoIHx8IHR5cGVzLmluY2x1ZGVzKGNvbC50eXBlKTtcbiAgICAgICAgICAgICAgICBjb25zdCB1bml0c1N1cHBvcnRlZCA9ICF1bml0cy5sZW5ndGggfHxcbiAgICAgICAgICAgICAgICAgICAgKGNvbC5nZXRUYWcoREcuVEFHUy5VTklUUykgJiYgdW5pdHMuaW5jbHVkZXMoY29sLmdldFRhZyhERy5UQUdTLlVOSVRTKSkpO1xuICAgICAgICAgICAgICAgIGlmIChzZW1UeXBlU3VwcG9ydGVkICYmIHR5cGVTdXBvcnRlZCAmJiB1bml0c1N1cHBvcnRlZCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuY29sdW1uRnVuY3Rpb25zTWFwW2NvbC5uYW1lXSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29sdW1uRnVuY3Rpb25zTWFwW2NvbC5uYW1lXSA9IFtdO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbHVtbkZ1bmN0aW9uc01hcFtjb2wubmFtZV0ucHVzaChmdW5jTmFtZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBzdXBwb3J0ZWRDb2xOYW1lcyA9IE9iamVjdC5rZXlzKHRoaXMuY29sdW1uRnVuY3Rpb25zTWFwKTtcbiAgICAgICAgY29uc3QgY29sdW1uc0lucHV0ID0gdWkuY29sdW1uc0lucHV0KCdDb2x1bW5zJywgdGFibGUsICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMub25Db2x1bW5zQ2hhbmdlZC5uZXh0KCk7XG4gICAgICAgICAgICB1aS5lbXB0eSh0aGlzLmNvbHVtbk9wdEVkaXRvcnNSb290KTtcbiAgICAgICAgICAgIHVpLmVtcHR5KHRoaXMud2VpZ2h0c0VkaXRvclJvb3QpO1xuICAgICAgICAgICAgY29uc3QgY29scyA9IGNvbHVtbnNJbnB1dC52YWx1ZTtcbiAgICAgICAgICAgIGlmICghY29scyB8fCBjb2xzPy5sZW5ndGggPCAyKVxuICAgICAgICAgICAgICAgIHRoaXMuYWdncmVnYXRpb25NZXRob2RJbnB1dC5yb290LnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgdGhpcy5hZ2dyZWdhdGlvbk1ldGhvZElucHV0LnJvb3Quc3R5bGUuZGlzcGxheSA9ICdmbGV4JztcbiAgICAgICAgICAgIGlmICghY29scyB8fCBjb2xzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHRoaXMuY29sdW1uUGFyYW1zRWRpdG9yQWNjb3JkaW9uLnJvb3Quc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBlZGl0b3JXaWR0aHMgPSBbMjAsIDMwLCAzMCwgMjBdO1xuICAgICAgICAgICAgdGhpcy5jb2x1bW5PcHRFZGl0b3JzID0gY29scy5tYXAoKGNvbCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGVkaXRvckNsYXNzID0gbmV3IERpbVJlZHVjdGlvbkNvbHVtbkVkaXRvcihjb2wsIHRoaXMuY29sdW1uRnVuY3Rpb25zTWFwW2NvbC5uYW1lXS5tYXAoKGl0KSA9PiB0aGlzLnN1cHBvcnRlZEZ1bmN0aW9uc1tpdF0pLCBlZGl0b3JXaWR0aHMpO1xuICAgICAgICAgICAgICAgIHJldHVybiBlZGl0b3JDbGFzcztcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY29uc3QgZWRpdG9yVGl0bGVzID0gWydDb2x1bW4nLCAnRW5jb2RpbmcgZnVuY3Rpb24nLCAnU2ltaWxhcml0eSBtZXRyaWMnLCAnV2VpZ2h0J10ubWFwKChpdCwgaSkgPT4gdWkuaDEoaXQsIHsgc3R5bGU6IHsgd2lkdGg6IGAke2VkaXRvcldpZHRoc1tpXX0lYCwgbWFyZ2luOiAwIH0gfSkpO1xuICAgICAgICAgICAgdWkudG9vbHRpcC5iaW5kKGVkaXRvclRpdGxlc1sxXSwgJ0VuY29kaW5nIGZ1bmN0aW9uIGZvciB0aGUgY29sdW1uIHZhbHVlcycpO1xuICAgICAgICAgICAgdWkudG9vbHRpcC5iaW5kKGVkaXRvclRpdGxlc1syXSwgJ0Rpc3RhbmNlL1NpbWlsYXJpdHkgbWV0cmljIGZvciB0aGUgZW5jb2RlZCBjb2x1bW4gdmFsdWVzJyk7XG4gICAgICAgICAgICB1aS50b29sdGlwLmJpbmQoZWRpdG9yVGl0bGVzWzNdLCAnV2VpZ2h0IG9mIHRoZSBjb2x1bW4gZm9yIGNvbWJpbmluZyBkaXN0YW5jZXMgYmV0d2VlbiB2YWx1ZXMnKTtcbiAgICAgICAgICAgIGNvbnN0IGVkaXRvclRpdGxlUm9vdCA9IHVpLmRpdkgoZWRpdG9yVGl0bGVzLCB7IGNsYXNzZXM6ICdtbC1kaW0tcmVkdWN0aW9uLWNvbHVtbi1lZGl0b3ItaGVhZGVyLXJvb3QnIH0pO1xuICAgICAgICAgICAgdGhpcy5jb2x1bW5PcHRFZGl0b3JzUm9vdC5hcHBlbmRDaGlsZChlZGl0b3JUaXRsZVJvb3QpO1xuICAgICAgICAgICAgY29uc3QgZWRpdG9yc1Jvb3QgPSB1aS5kaXZWKFtdLCB7IHN0eWxlOiB7IG1heEhlaWdodDogJzQwMHB4Jywgb3ZlcmZsb3c6ICdhdXRvJyB9IH0pO1xuICAgICAgICAgICAgdGhpcy5jb2x1bW5PcHRFZGl0b3JzLmZvckVhY2goKGVkaXRvcikgPT4ge1xuICAgICAgICAgICAgICAgIGVkaXRvcnNSb290LmFwcGVuZENoaWxkKGVkaXRvci5hY2NvcmRpb25EaXYpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLmNvbHVtbk9wdEVkaXRvcnNSb290LmFwcGVuZENoaWxkKGVkaXRvcnNSb290KTtcbiAgICAgICAgICAgIGlmICh0aGlzLmNvbHVtbk9wdEVkaXRvcnMubGVuZ3RoID4gMClcbiAgICAgICAgICAgICAgICB0aGlzLmNvbHVtblBhcmFtc0VkaXRvckFjY29yZGlvbi5yb290LnN0eWxlLmRpc3BsYXkgPSAnZmxleCc7XG4gICAgICAgIH0sIHsgYXZhaWxhYmxlOiBzdXBwb3J0ZWRDb2xOYW1lcyB9KTtcbiAgICAgICAgY29sdW1uc0lucHV0LmZpcmVDaGFuZ2VkKCk7XG4gICAgICAgIGlmICghdGhpcy5jb2x1bW5zSW5wdXRSb290KSB7XG4gICAgICAgICAgICB0aGlzLmNvbHVtbnNJbnB1dFJvb3QgPSBjb2x1bW5zSW5wdXQucm9vdDtcbiAgICAgICAgICAgIHRoaXMuY29sdW1uc0lucHV0ID0gY29sdW1uc0lucHV0O1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdWkuZW1wdHkodGhpcy5jb2x1bW5zSW5wdXRSb290KTtcbiAgICAgICAgICAgIHRoaXMuY29sdW1uc0lucHV0ID0gY29sdW1uc0lucHV0O1xuICAgICAgICAgICAgQXJyYXkuZnJvbSh0aGlzLmNvbHVtbnNJbnB1dC5yb290LmNoaWxkcmVuKVxuICAgICAgICAgICAgICAgIC5mb3JFYWNoKChpdCkgPT4gdGhpcy5jb2x1bW5zSW5wdXRSb290LmFwcGVuZENoaWxkKGl0KSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY3JlYXRlQWxnb3JpdGhtU2V0dGluZ3NEaXYocGFyYW1zRm9ybSwgcGFyYW1zKSB7XG4gICAgICAgIHVpLmVtcHR5KHBhcmFtc0Zvcm0pO1xuICAgICAgICBPYmplY3Qua2V5cyhwYXJhbXMpLmZvckVhY2goKGl0KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBwYXJhbSA9IHBhcmFtc1tpdF07XG4gICAgICAgICAgICBpZiAoIXBhcmFtLmZvcmNlUmVtb3ZlKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaW5wdXQgPSBwYXJhbS50eXBlID09PSAnc3RyaW5nJyA/XG4gICAgICAgICAgICAgICAgICAgIHVpLnN0cmluZ0lucHV0KHBhcmFtLnVpTmFtZSwgcGFyYW0udmFsdWUgPz8gJycsICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtLnZhbHVlID0gaW5wdXQudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIH0pIDogcGFyYW0udHlwZSA9PT0gJ2Jvb2xlYW4nID9cbiAgICAgICAgICAgICAgICAgICAgdWkuYm9vbElucHV0KHBhcmFtLnVpTmFtZSwgcGFyYW0udmFsdWUgPz8gZmFsc2UsICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtLnZhbHVlID0gaW5wdXQudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIH0pIDpcbiAgICAgICAgICAgICAgICAgICAgdWkuZmxvYXRJbnB1dChwYXJhbS51aU5hbWUsIHBhcmFtLnZhbHVlLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJhbS52YWx1ZSA9IGlucHV0LnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB1aS50b29sdGlwLmJpbmQoaW5wdXQuaW5wdXQgPz8gaW5wdXQucm9vdCwgcGFyYW0udG9vbHRpcCk7XG4gICAgICAgICAgICAgICAgcGFyYW1zRm9ybS5hcHBlbmQoaW5wdXQucm9vdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcGFyYW1zRm9ybTtcbiAgICB9XG4gICAgZ2V0IGFsZ29yaXRobU9wdGlvbnMoKSB7XG4gICAgICAgIGNvbnN0IGFsZ29yaXRobVBhcmFtcyA9IHRoaXMubWV0aG9kc1BhcmFtc1t0aGlzLm1ldGhvZElucHV0LnZhbHVlXTtcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHt9O1xuICAgICAgICBPYmplY3Qua2V5cyhhbGdvcml0aG1QYXJhbXMpLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgICAgICAgaWYgKGFsZ29yaXRobVBhcmFtc1trZXldLnZhbHVlICE9IG51bGwpXG4gICAgICAgICAgICAgICAgb3B0aW9uc1trZXldID0gYWxnb3JpdGhtUGFyYW1zW2tleV0udmFsdWU7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gb3B0aW9ucztcbiAgICB9XG4gICAgZ2V0IGRiU2Nhbk9wdGlvbnMoKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBkYlNjYW5FcHNpbG9uOiB0aGlzLmRiU2NhblBhcmFtcy5lcHNpbG9uLnZhbHVlID8/IDAuMDEsXG4gICAgICAgICAgICBkYlNjYW5NaW5QdHM6IHRoaXMuZGJTY2FuUGFyYW1zLm1pblB0cy52YWx1ZSA/PyA0XG4gICAgICAgIH07XG4gICAgfVxuICAgIGdldEVkaXRvcigpIHtcbiAgICAgICAgY29uc3QgZGl2ID0gdWkuZGl2KFtcbiAgICAgICAgICAgIHRoaXMudGFibGVJbnB1dC5yb290LFxuICAgICAgICAgICAgdGhpcy5jb2x1bW5zSW5wdXRSb290LFxuICAgICAgICAgICAgdGhpcy5jb2x1bW5QYXJhbXNFZGl0b3JSb290LFxuICAgICAgICAgICAgdGhpcy5hZ2dyZWdhdGlvbk1ldGhvZElucHV0LnJvb3QsXG4gICAgICAgICAgICB0aGlzLm1ldGhvZElucHV0LnJvb3QsXG4gICAgICAgICAgICB0aGlzLm1ldGhvZFNldHRpbmdzRGl2LFxuICAgICAgICAgICAgdGhpcy5wbG90RW1iZWRkaW5nc0lucHV0LFxuICAgICAgICAgICAgdGhpcy5wb3N0UHJvY2Vzc2luZ0VkaXRvci5yb290LFxuICAgICAgICBdLCB7IHN0eWxlOiB7IG1pbldpZHRoOiAnNDIwcHgnIH0sIGNsYXNzZXM6ICd1aS1mb3JtJyB9KTtcbiAgICAgICAgcmV0dXJuIGRpdjtcbiAgICB9XG4gICAgZ2V0UGFyYW1zKCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdGFibGU6IHRoaXMudGFibGVJbnB1dC52YWx1ZSxcbiAgICAgICAgICAgIGNvbHVtbnM6IHRoaXMuY29sdW1uc0lucHV0LnZhbHVlLFxuICAgICAgICAgICAgbWV0aG9kTmFtZTogdGhpcy5tZXRob2RJbnB1dC52YWx1ZSxcbiAgICAgICAgICAgIHByZXByb2Nlc3NpbmdGdW5jdGlvbnM6IHRoaXMuY29sdW1uT3B0RWRpdG9ycy5tYXAoKGl0KSA9PiBpdC5wcmVQcm9jZXNzaW5nRnVuY3Rpb24pLFxuICAgICAgICAgICAgZGlzdGFuY2VNZXRyaWNzOiB0aGlzLmNvbHVtbk9wdEVkaXRvcnMubWFwKChpdCkgPT4gaXQuc2ltaWxhcml0eU1ldHJpY0lucHV0LnZhbHVlKSxcbiAgICAgICAgICAgIHdlaWdodHM6IHRoaXMuY29sdW1uT3B0RWRpdG9ycy5tYXAoKGl0KSA9PiBpdC53ZWlnaHQgPz8gMSksXG4gICAgICAgICAgICBvcHRpb25zOiB7IC4uLnRoaXMuYWxnb3JpdGhtT3B0aW9ucywgLi4udGhpcy5kYlNjYW5PcHRpb25zLFxuICAgICAgICAgICAgICAgIHByZXByb2Nlc3NpbmdGdW5jQXJnczogdGhpcy5jb2x1bW5PcHRFZGl0b3JzLm1hcCgoaXQpID0+IGl0LnByZXByb2Nlc3NpbmdGdW5jdGlvblNldHRpbmdzKSB9LFxuICAgICAgICAgICAgcGxvdEVtYmVkZGluZ3M6IHRoaXMucGxvdEVtYmVkZGluZ3NJbnB1dC52YWx1ZSxcbiAgICAgICAgICAgIGNsdXN0ZXJFbWJlZGRpbmdzOiBmYWxzZSxcbiAgICAgICAgICAgIHBvc3RQcm9jZXNzaW5nRnVuY3Rpb246IHRoaXMucG9zdFByb2Nlc3NpbmdFZGl0b3IucG9zdFByb2Nlc3NpbmdGdW5jdGlvbixcbiAgICAgICAgICAgIHBvc3RQcm9jZXNzaW5nRnVuY3Rpb25BcmdzOiB0aGlzLnBvc3RQcm9jZXNzaW5nRWRpdG9yLmFyZ3MsXG4gICAgICAgICAgICBhZ2dyZWFnZ3JlZ2F0aW9uTWV0aG9kOiB0aGlzLmFnZ3JlZ2F0aW9uTWV0aG9kSW5wdXQudmFsdWVcbiAgICAgICAgfTtcbiAgICB9XG59XG5jbGFzcyBEaW1SZWR1Y3Rpb25Db2x1bW5FZGl0b3Ige1xuICAgIGNvbnN0cnVjdG9yKGNvbHVtbiwgc3VwcG9ydGVkRnVuY3Rpb25zLCBlZGl0b3JXaWR0aHMpIHtcbiAgICAgICAgdGhpcy5wcmVwcm9jZXNzaW5nRnVuY1NldHRpbmdzRGl2ID0gdWkuZGl2KFtdKTtcbiAgICAgICAgdGhpcy5wcmVwcm9jZXNzaW5nRnVuY3Rpb25TZXR0aW5ncyA9IHt9O1xuICAgICAgICB0aGlzLmVkaXRvckRpdiA9IHVpLmRpdihbXSk7XG4gICAgICAgIHRoaXMuaGFzRXh0cmFTZXR0aW5ncyA9IHRydWU7XG4gICAgICAgIHRoaXMuZnVuY3Rpb25zTWFwID0ge307XG4gICAgICAgIHRoaXMubmVlZHNDb25maWd1cmF0aW9uID0gZmFsc2U7XG4gICAgICAgIHRoaXMud2VpZ2h0ID0gMTtcbiAgICAgICAgdGhpcy53ZWlnaHRJbnB1dCA9IHVpLmZsb2F0SW5wdXQoJ1dlaWdodCcsIDEsICgpID0+IHsgdGhpcy53ZWlnaHQgPSB0aGlzLndlaWdodElucHV0LnZhbHVlID8/IDE7IH0pO1xuICAgICAgICB0aGlzLmNvbHVtbiA9IGNvbHVtbjtcbiAgICAgICAgLy8gc29ydCBieSBzcGVjaWZpY2l0eVxuICAgICAgICB0aGlzLnN1cHBvcnRlZEZ1bmN0aW9ucyA9IHN1cHBvcnRlZEZ1bmN0aW9ucy5zb3J0KChhLCBiKSA9PiB7XG4gICAgICAgICAgICBpZiAoKGEudW5pdHMubGVuZ3RoID09PSAwIHx8IGIudW5pdHMubGVuZ3RoID09PSAwKSAmJiBhLnVuaXRzLmxlbmd0aCAhPT0gYi51bml0cy5sZW5ndGgpXG4gICAgICAgICAgICAgICAgcmV0dXJuIGIudW5pdHMubGVuZ3RoIC0gYS51bml0cy5sZW5ndGg7XG4gICAgICAgICAgICBpZiAoYS51bml0cy5sZW5ndGggIT09IGIudW5pdHMubGVuZ3RoKVxuICAgICAgICAgICAgICAgIHJldHVybiBhLnVuaXRzLmxlbmd0aCAtIGIudW5pdHMubGVuZ3RoO1xuICAgICAgICAgICAgaWYgKGEuc2VtVHlwZXMubGVuZ3RoID09PSAwIHx8IGIuc2VtVHlwZXMubGVuZ3RoID09PSAwKVxuICAgICAgICAgICAgICAgIHJldHVybiBiLnNlbVR5cGVzLmxlbmd0aCAtIGEuc2VtVHlwZXMubGVuZ3RoO1xuICAgICAgICAgICAgaWYgKGEuc2VtVHlwZXMubGVuZ3RoICE9PSBiLnNlbVR5cGVzLmxlbmd0aClcbiAgICAgICAgICAgICAgICByZXR1cm4gYS5zZW1UeXBlcy5sZW5ndGggLSBiLnNlbVR5cGVzLmxlbmd0aDtcbiAgICAgICAgICAgIHJldHVybiBhLnR5cGVzLmxlbmd0aCAtIGIudHlwZXMubGVuZ3RoO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5zdXBwb3J0ZWRGdW5jdGlvbnMuZm9yRWFjaCgoZikgPT4ge1xuICAgICAgICAgICAgdGhpcy5mdW5jdGlvbnNNYXBbZ2V0RnVuY05hbWUoZi5mdW5jKV0gPSBmLmZ1bmM7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnByZXByb2Nlc3NpbmdGdW5jdGlvbklucHV0ID0gdWkuY2hvaWNlSW5wdXQoJ0VuY29kaW5nIGZ1bmN0aW9uJywgZ2V0RnVuY05hbWUodGhpcy5zdXBwb3J0ZWRGdW5jdGlvbnNbMF0uZnVuYyksIHRoaXMuc3VwcG9ydGVkRnVuY3Rpb25zLm1hcCgoaXQpID0+IGdldEZ1bmNOYW1lKGl0LmZ1bmMpKSwgKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgdmFsID0gdGhpcy5wcmVwcm9jZXNzaW5nRnVuY3Rpb25JbnB1dC52YWx1ZTtcbiAgICAgICAgICAgIGNvbnN0IGZ1bmMgPSB0aGlzLmZ1bmN0aW9uc01hcFt2YWxdO1xuICAgICAgICAgICAgdGhpcy5wcmVwcm9jZXNzaW5nRnVuY3Rpb25TZXR0aW5ncyA9IHt9O1xuICAgICAgICAgICAgdGhpcy5oYXNFeHRyYVNldHRpbmdzID0gZnVuYy5pbnB1dHMubGVuZ3RoID4gMjtcbiAgICAgICAgICAgIGNvbnN0IHN1cEYgPSB0aGlzLnN1cHBvcnRlZEZ1bmN0aW9ucy5maW5kKChpdCkgPT4gZ2V0RnVuY05hbWUoaXQuZnVuYykgPT09IHZhbCk7XG4gICAgICAgICAgICB0aGlzLmdldFNpbWlsYXJpdHlNZXRyaWNJbnB1dChzdXBGKTtcbiAgICAgICAgICAgIHVpLmVtcHR5KHRoaXMucHJlcHJvY2Vzc2luZ0Z1bmNTZXR0aW5nc0Rpdik7XG4gICAgICAgICAgICBzZXR0aW5nc09wZW5lZCA9IGZhbHNlO1xuICAgICAgICAgICAgaWYgKCF0aGlzLmhhc0V4dHJhU2V0dGluZ3MpXG4gICAgICAgICAgICAgICAgdGhpcy5wcmVwcm9jZXNzaW5nRnVuY1NldHRpbmdzSWNvbi5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIHRoaXMucHJlcHJvY2Vzc2luZ0Z1bmNTZXR0aW5nc0ljb24uc3R5bGUuZGlzcGxheSA9ICdmbGV4JztcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMucHJlcHJvY2Vzc2luZ0Z1bmN0aW9uSW5wdXQucm9vdC5zdHlsZS5kaXNwbGF5ID0gJ2ZsZXgnO1xuICAgICAgICB0aGlzLmNyZWF0ZVNldHRpbmdzRGl2KHRoaXMucHJlcHJvY2Vzc2luZ0Z1bmNTZXR0aW5nc0RpdiwgdGhpcy5zdXBwb3J0ZWRGdW5jdGlvbnNbMF0uZnVuYylcbiAgICAgICAgICAgIC50aGVuKCgpID0+IHsgdWkuZW1wdHkodGhpcy5wcmVwcm9jZXNzaW5nRnVuY1NldHRpbmdzRGl2KTsgfSk7XG4gICAgICAgIHRoaXMuZ2V0U2ltaWxhcml0eU1ldHJpY0lucHV0KHRoaXMuc3VwcG9ydGVkRnVuY3Rpb25zWzBdKTtcbiAgICAgICAgdGhpcy5oYXNFeHRyYVNldHRpbmdzID0gdGhpcy5zdXBwb3J0ZWRGdW5jdGlvbnNbMF0uZnVuYy5pbnB1dHMubGVuZ3RoID4gMjtcbiAgICAgICAgbGV0IHNldHRpbmdzT3BlbmVkID0gZmFsc2U7XG4gICAgICAgIHRoaXMucHJlcHJvY2Vzc2luZ0Z1bmNTZXR0aW5nc0ljb24gPSB1aS5pY29ucy5zZXR0aW5ncyhhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICBzZXR0aW5nc09wZW5lZCA9ICFzZXR0aW5nc09wZW5lZDtcbiAgICAgICAgICAgIGlmIChzZXR0aW5nc09wZW5lZCkge1xuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuY3JlYXRlU2V0dGluZ3NEaXYodGhpcy5wcmVwcm9jZXNzaW5nRnVuY1NldHRpbmdzRGl2LCB0aGlzLmZ1bmN0aW9uc01hcFt0aGlzLnByZXByb2Nlc3NpbmdGdW5jdGlvbklucHV0LnZhbHVlXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB1aS5lbXB0eSh0aGlzLnByZXByb2Nlc3NpbmdGdW5jU2V0dGluZ3NEaXYpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LCAnTW9kaWZ5IGVuY29kaW5nIGZ1bmN0aW9uIHBhcmFtZXRlcnMnKTtcbiAgICAgICAgdGhpcy5wcmVwcm9jZXNzaW5nRnVuY3Rpb25JbnB1dC5yb290LmNsYXNzTGlzdC5hZGQoJ21sLWRpbS1yZWR1Y3Rpb24tc2V0dGluZ3MtaW5wdXQnKTtcbiAgICAgICAgdGhpcy5wcmVwcm9jZXNzaW5nRnVuY3Rpb25JbnB1dC5yb290LnByZXBlbmQodGhpcy5wcmVwcm9jZXNzaW5nRnVuY1NldHRpbmdzSWNvbik7XG4gICAgICAgIGlmICghdGhpcy5oYXNFeHRyYVNldHRpbmdzKVxuICAgICAgICAgICAgdGhpcy5wcmVwcm9jZXNzaW5nRnVuY1NldHRpbmdzSWNvbi5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICB0aGlzLnByZXByb2Nlc3NpbmdGdW5jU2V0dGluZ3NJY29uLnN0eWxlLmRpc3BsYXkgPSAnZmxleCc7XG4gICAgICAgIHRoaXMubmVlZHNDb25maWd1cmF0aW9uID0gIShzdXBwb3J0ZWRGdW5jdGlvbnMubGVuZ3RoIDwgMiAmJiAhdGhpcy5oYXNFeHRyYVNldHRpbmdzICYmXG4gICAgICAgICAgICBzdXBwb3J0ZWRGdW5jdGlvbnNbMF0uZGlzdGFuY2VGdW5jdGlvbnMubGVuZ3RoIDwgMik7XG4gICAgICAgIGNvbnN0IGNvbHVtblRpdGxlID0gdWkuaDModGhpcy5jb2x1bW4ubmFtZSwgeyBjbGFzc2VzOiAnbWwtZGltLXJlZHVjdGlvbi1jb2x1bW4tZWRpdG9yLWNvbHVtbi10aXRsZScgfSk7XG4gICAgICAgIGNvbnN0IGNvbE9wdEVkaXRvcnMgPSBbXG4gICAgICAgICAgICBjb2x1bW5UaXRsZSwgdGhpcy5wcmVwcm9jZXNzaW5nRnVuY3Rpb25JbnB1dC5yb290LFxuICAgICAgICAgICAgdGhpcy5zaW1pbGFyaXR5TWV0cmljSW5wdXRSb290LCB0aGlzLndlaWdodElucHV0LnJvb3RcbiAgICAgICAgXTtcbiAgICAgICAgLy8gYXNzaWduIHRvb2x0aXBzXG4gICAgICAgIHVpLnRvb2x0aXAuYmluZChjb2x1bW5UaXRsZSwgdGhpcy5jb2x1bW4ubmFtZSk7XG4gICAgICAgIGNvbE9wdEVkaXRvcnMuZm9yRWFjaCgoaXQsIGkpID0+IHtcbiAgICAgICAgICAgIGl0LnN0eWxlLndpZHRoID0gYCR7ZWRpdG9yV2lkdGhzW2ldfSVgO1xuICAgICAgICB9KTtcbiAgICAgICAgLy9hZGQgY2xhc3Nlc1xuICAgICAgICBjb2xPcHRFZGl0b3JzLmZvckVhY2goKGl0KSA9PiBpdC5jbGFzc0xpc3QuYWRkKCdtbC1kaW0tcmVkdWN0aW9uLWNvbHVtbi1lZGl0b3ItaW5wdXQtcm9vdCcpKTtcbiAgICAgICAgY29uc3QgZGlzdGFuY2VPcHRpb25zRGl2ID0gdWkuZGl2SChjb2xPcHRFZGl0b3JzLCB7IGNsYXNzZXM6ICdtbC1kaW0tcmVkdWN0aW9uLWNvbHVtbi1lZGl0b3Itcm9vdCcgfSk7XG4gICAgICAgIHRoaXMuYWNjb3JkaW9uRGl2ID0gdWkuZGl2VihbXSk7XG4gICAgICAgIHRoaXMuZWRpdG9yRGl2LmFwcGVuZENoaWxkKGRpc3RhbmNlT3B0aW9uc0Rpdik7XG4gICAgICAgIHRoaXMuZWRpdG9yRGl2LmFwcGVuZENoaWxkKHRoaXMucHJlcHJvY2Vzc2luZ0Z1bmNTZXR0aW5nc0Rpdik7XG4gICAgICAgIHRoaXMuYWNjb3JkaW9uRGl2LmFwcGVuZENoaWxkKHRoaXMuZWRpdG9yRGl2KTtcbiAgICB9XG4gICAgZ2V0U2ltaWxhcml0eU1ldHJpY0lucHV0KHByZUZ1bmMpIHtcbiAgICAgICAgY29uc3QgaW5wdXQgPSB1aS5jaG9pY2VJbnB1dCgnU2ltaWxhcml0eSBtZXRyaWMnLCBwcmVGdW5jLmRpc3RhbmNlRnVuY3Rpb25zWzBdLCBwcmVGdW5jLmRpc3RhbmNlRnVuY3Rpb25zKTtcbiAgICAgICAgaWYgKCF0aGlzLnNpbWlsYXJpdHlNZXRyaWNJbnB1dFJvb3QpIHtcbiAgICAgICAgICAgIHRoaXMuc2ltaWxhcml0eU1ldHJpY0lucHV0Um9vdCA9IGlucHV0LnJvb3Q7XG4gICAgICAgICAgICB0aGlzLnNpbWlsYXJpdHlNZXRyaWNJbnB1dCA9IGlucHV0O1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdWkuZW1wdHkodGhpcy5zaW1pbGFyaXR5TWV0cmljSW5wdXRSb290KTtcbiAgICAgICAgICAgIHRoaXMuc2ltaWxhcml0eU1ldHJpY0lucHV0ID0gaW5wdXQ7XG4gICAgICAgICAgICBBcnJheS5mcm9tKHRoaXMuc2ltaWxhcml0eU1ldHJpY0lucHV0LnJvb3QuY2hpbGRyZW4pXG4gICAgICAgICAgICAgICAgLmZvckVhY2goKGl0KSA9PiB0aGlzLnNpbWlsYXJpdHlNZXRyaWNJbnB1dFJvb3QuYXBwZW5kQ2hpbGQoaXQpKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBnZXQgcHJlUHJvY2Vzc2luZ0Z1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5mdW5jdGlvbnNNYXBbdGhpcy5wcmVwcm9jZXNzaW5nRnVuY3Rpb25JbnB1dC52YWx1ZV07XG4gICAgfVxuICAgIGFzeW5jIGNyZWF0ZVNldHRpbmdzRGl2KHBhcmFtc0Zvcm0sIGZ1bmMpIHtcbiAgICAgICAgdWkuZW1wdHkocGFyYW1zRm9ybSk7XG4gICAgICAgIGlmIChmdW5jLmlucHV0cy5sZW5ndGggPCAzKVxuICAgICAgICAgICAgcmV0dXJuIHVpLmRpdigpO1xuICAgICAgICBjb25zdCBmYyA9IGZ1bmMucHJlcGFyZSgpO1xuICAgICAgICBjb25zdCBpbnB1dHMgPSBhd2FpdCBmYy5idWlsZEVkaXRvcih1aS5kaXYoKSk7XG4gICAgICAgIGZvciAobGV0IGkgPSAyOyBpIDwgZnVuYy5pbnB1dHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGZJbnB1dCA9IGZ1bmMuaW5wdXRzW2ldO1xuICAgICAgICAgICAgY29uc3QgdmFsID0gdGhpcy5wcmVwcm9jZXNzaW5nRnVuY3Rpb25TZXR0aW5nc1tmSW5wdXQubmFtZV0gfHxcbiAgICAgICAgICAgICAgICBmYy5pbnB1dFBhcmFtc1tmdW5jLmlucHV0c1tpXS5uYW1lXS52YWx1ZSB8fCBmSW5wdXQuZGVmYXVsdFZhbHVlO1xuICAgICAgICAgICAgaWYgKHZhbClcbiAgICAgICAgICAgICAgICB0aGlzLnByZXByb2Nlc3NpbmdGdW5jdGlvblNldHRpbmdzW2ZJbnB1dC5uYW1lXSA9IHZhbDtcbiAgICAgICAgICAgIGNvbnN0IGlucHV0ID0gaW5wdXRzLmZpbmQoKGlucCkgPT4gaW5wLnByb3BlcnR5Lm5hbWUgPT09IGZJbnB1dC5uYW1lKTtcbiAgICAgICAgICAgIGlmICghaW5wdXQpXG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICBpZiAodGhpcy5wcmVwcm9jZXNzaW5nRnVuY3Rpb25TZXR0aW5nc1tmSW5wdXQubmFtZV0gIT09IG51bGwgJiZcbiAgICAgICAgICAgICAgICB0aGlzLnByZXByb2Nlc3NpbmdGdW5jdGlvblNldHRpbmdzW2ZJbnB1dC5uYW1lXSAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgIGlucHV0LnZhbHVlID0gdGhpcy5wcmVwcm9jZXNzaW5nRnVuY3Rpb25TZXR0aW5nc1tmSW5wdXQubmFtZV07XG4gICAgICAgICAgICBpbnB1dC5vbkNoYW5nZWQoKCkgPT4geyB0aGlzLnByZXByb2Nlc3NpbmdGdW5jdGlvblNldHRpbmdzW2ZJbnB1dC5uYW1lXSA9IGlucHV0LnZhbHVlOyB9KTtcbiAgICAgICAgICAgIHBhcmFtc0Zvcm0uYXBwZW5kKGlucHV0LnJvb3QpO1xuICAgICAgICB9XG4gICAgICAgIHBhcmFtc0Zvcm0uc3R5bGUubWFyZ2luQm90dG9tID0gJzEwcHgnO1xuICAgICAgICByZXR1cm4gcGFyYW1zRm9ybTtcbiAgICB9XG59XG5mdW5jdGlvbiBnZXRGdW5jTmFtZShmdW5jKSB7XG4gICAgcmV0dXJuIGZ1bmMuZnJpZW5kbHlOYW1lID8/IGZ1bmMubmFtZTtcbn1cbmNsYXNzIFBvc3RQcm9jZXNzaW5nRnVuY0VkaXRvciB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMucG9zdFByb2Nlc3NpbmdGdW5jdGlvbnNNYXAgPSB7fTtcbiAgICAgICAgdGhpcy5fcm9vdCA9IHVpLmRpdihbXSk7XG4gICAgICAgIHRoaXMuX3Bvc3RQcm9jZXNzaW5nQXJncyA9IHt9O1xuICAgICAgICB0aGlzLl9hcmdzRWxlbWVudCA9IHVpLmRpdihbXSk7XG4gICAgICAgIHRoaXMuX3NldHRpbmdzT3BlbmVkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX3NldHRpbmdzSWNvbiA9IHVpLmljb25zLnNldHRpbmdzKGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX3NldHRpbmdzT3BlbmVkID0gIXRoaXMuX3NldHRpbmdzT3BlbmVkO1xuICAgICAgICAgICAgaWYgKHRoaXMuX3NldHRpbmdzT3BlbmVkKVxuICAgICAgICAgICAgICAgIHRoaXMuX2FyZ3NFbGVtZW50LnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIHRoaXMuX2FyZ3NFbGVtZW50LnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLl9hcmdzRWxlbWVudC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICAgICAgICBjb25zdCBwb3N0UHJvY2Vzc2luZ0Z1bmNzID0gREcuRnVuYy5maW5kKHsgdGFnczogW0RJTV9SRURfUE9TVFBST0NFU1NJTkdfRlVOQ1RJT05fVEFHXSB9KVxuICAgICAgICAgICAgLmZpbHRlcigoZikgPT4gZi5pbnB1dHMubGVuZ3RoID49IDIpO1xuICAgICAgICBwb3N0UHJvY2Vzc2luZ0Z1bmNzLmZvckVhY2goKGYpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG5hbWUgPSBmLmZyaWVuZGx5TmFtZSA/PyBmLm5hbWU7XG4gICAgICAgICAgICB0aGlzLnBvc3RQcm9jZXNzaW5nRnVuY3Rpb25zTWFwW25hbWVdID0gZjtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMucG9zdFByb2Nlc3NpbmdGdW5jdGlvbnNNYXBbJ05vbmUnXSA9IG51bGw7XG4gICAgICAgIGNvbnN0IGRlZmF1bHRQb3N0UHJvY2Vzc2luZ0Z1bmMgPSBPYmplY3Qua2V5cyh0aGlzLnBvc3RQcm9jZXNzaW5nRnVuY3Rpb25zTWFwKS5maW5kKChpdCkgPT4gISF0aGlzLnBvc3RQcm9jZXNzaW5nRnVuY3Rpb25zTWFwW2l0XT8ub3B0aW9ucz8uW0RJTV9SRURfREVGQVVMVF9QT1NUUFJPQ0VTU0lOR19GVU5DVElPTl9NRVRBXSkgPz8gJ05vbmUnO1xuICAgICAgICB0aGlzLnBvc3RQcm9jZXNzaW5nRnVuY3Rpb25JbnB1dCA9XG4gICAgICAgICAgICB1aS5jaG9pY2VJbnB1dCgnUG9zdHByb2Nlc3NpbmcnLCBkZWZhdWx0UG9zdFByb2Nlc3NpbmdGdW5jLCBPYmplY3Qua2V5cyh0aGlzLnBvc3RQcm9jZXNzaW5nRnVuY3Rpb25zTWFwKSwgYXN5bmMgKCkgPT4geyBhd2FpdCB0aGlzLm9uRnVuY3Rpb25DaGFuZ2VkKCk7IH0sIHsgbnVsbGFibGU6IGZhbHNlIH0pO1xuICAgICAgICB0aGlzLm9uRnVuY3Rpb25DaGFuZ2VkKCk7XG4gICAgICAgIHRoaXMucG9zdFByb2Nlc3NpbmdGdW5jdGlvbklucHV0Lm51bGxhYmxlID0gZmFsc2U7XG4gICAgICAgIHRoaXMucG9zdFByb2Nlc3NpbmdGdW5jdGlvbklucHV0LmNsYXNzTGlzdC5hZGQoJ21sLWRpbS1yZWR1Y3Rpb24tc2V0dGluZ3MtaW5wdXQnKTtcbiAgICAgICAgdGhpcy5wb3N0UHJvY2Vzc2luZ0Z1bmN0aW9uSW5wdXQucm9vdC5wcmVwZW5kKHRoaXMuX3NldHRpbmdzSWNvbik7XG4gICAgICAgIHRoaXMuX3Jvb3QuYXBwZW5kQ2hpbGQodGhpcy5wb3N0UHJvY2Vzc2luZ0Z1bmN0aW9uSW5wdXQucm9vdCk7XG4gICAgICAgIHRoaXMuX3Jvb3QuYXBwZW5kQ2hpbGQodGhpcy5fYXJnc0VsZW1lbnQpO1xuICAgIH1cbiAgICBnZXQgcG9zdFByb2Nlc3NpbmdGdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucG9zdFByb2Nlc3NpbmdGdW5jdGlvbklucHV0LnZhbHVlID9cbiAgICAgICAgICAgIHRoaXMucG9zdFByb2Nlc3NpbmdGdW5jdGlvbnNNYXBbdGhpcy5wb3N0UHJvY2Vzc2luZ0Z1bmN0aW9uSW5wdXQudmFsdWVdIDogbnVsbDtcbiAgICB9XG4gICAgYXN5bmMgb25GdW5jdGlvbkNoYW5nZWQoKSB7XG4gICAgICAgIGNvbnN0IGZ1bmMgPSB0aGlzLnBvc3RQcm9jZXNzaW5nRnVuY3Rpb247XG4gICAgICAgIHVpLmVtcHR5KHRoaXMuX2FyZ3NFbGVtZW50KTtcbiAgICAgICAgdGhpcy5fcG9zdFByb2Nlc3NpbmdBcmdzID0ge307XG4gICAgICAgIGlmICghZnVuYyB8fCBmdW5jLmlucHV0cy5sZW5ndGggPCAzKSB7XG4gICAgICAgICAgICB0aGlzLl9zZXR0aW5nc0ljb24uc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICA7XG4gICAgICAgIHRoaXMuX3NldHRpbmdzSWNvbi5zdHlsZS5kaXNwbGF5ID0gJ2ZsZXgnO1xuICAgICAgICBjb25zdCBmYyA9IGZ1bmMucHJlcGFyZSgpO1xuICAgICAgICBjb25zdCBpbnB1dHMgPSBhd2FpdCBmYy5idWlsZEVkaXRvcih1aS5kaXYoKSk7XG4gICAgICAgIGZvciAobGV0IGkgPSAyOyBpIDwgZnVuYy5pbnB1dHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGZJbnB1dCA9IGZ1bmMuaW5wdXRzW2ldO1xuICAgICAgICAgICAgY29uc3QgdmFsID0gdGhpcy5fcG9zdFByb2Nlc3NpbmdBcmdzW2ZJbnB1dC5uYW1lXSB8fFxuICAgICAgICAgICAgICAgIGZjLmlucHV0UGFyYW1zW2Z1bmMuaW5wdXRzW2ldLm5hbWVdLnZhbHVlIHx8IGZJbnB1dC5kZWZhdWx0VmFsdWU7XG4gICAgICAgICAgICBpZiAodmFsKVxuICAgICAgICAgICAgICAgIHRoaXMuX3Bvc3RQcm9jZXNzaW5nQXJnc1tmSW5wdXQubmFtZV0gPSB2YWw7XG4gICAgICAgICAgICBjb25zdCBpbnB1dCA9IGlucHV0cy5maW5kKChpbnApID0+IGlucC5wcm9wZXJ0eS5uYW1lID09PSBmSW5wdXQubmFtZSk7XG4gICAgICAgICAgICBpZiAoIWlucHV0KVxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgaW5wdXQub25DaGFuZ2VkKCgpID0+IHsgdGhpcy5fcG9zdFByb2Nlc3NpbmdBcmdzW2ZJbnB1dC5uYW1lXSA9IGlucHV0LnZhbHVlOyB9KTtcbiAgICAgICAgICAgIHRoaXMuX2FyZ3NFbGVtZW50LmFwcGVuZChpbnB1dC5yb290KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBnZXQgcm9vdCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Jvb3Q7XG4gICAgfVxuICAgIGdldCBhcmdzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcG9zdFByb2Nlc3NpbmdBcmdzO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaWJYVnNkR2t0WTI5c2RXMXVMV1JwYlMxeVpXUjFZM1JwYjI0dFpXUnBkRzl5TG1weklpd2ljMjkxY21ObFVtOXZkQ0k2SWlJc0luTnZkWEpqWlhNaU9sc2liWFZzZEdrdFkyOXNkVzF1TFdScGJTMXlaV1IxWTNScGIyNHRaV1JwZEc5eUxuUnpJbDBzSW01aGJXVnpJanBiWFN3aWJXRndjR2x1WjNNaU9pSkJRVUZCTEU5QlFVOHNTMEZCU3l4SlFVRkpMRTFCUVUwc2JVSkJRVzFDTEVOQlFVTTdRVUZETVVNc1QwRkJUeXhMUVVGTExFVkJRVVVzVFVGQlRTeHBRa0ZCYVVJc1EwRkJRenRCUVVOMFF5eFBRVUZQTEV0QlFVc3NSVUZCUlN4TlFVRk5MR2xDUVVGcFFpeERRVUZETzBGQlEzUkRMRTlCUVU4c1JVRkJReXh0UWtGQmJVSXNSVUZCUXl4TlFVRk5MRk5CUVZNc1EwRkJRenRCUVVNMVF5eFBRVUZQTEVWQlFUUkNMR0ZCUVdFc1JVRkJReXhOUVVGTkxHOUVRVUZ2UkN4RFFVRkRPMEZCUnpWSExFOUJRVThzUlVGQlF5dzBRMEZCTkVNc1JVRkJSU3h0UTBGQmJVTXNSVUZEZGtZc2EwTkJRV3RETEVWQlFVVXNaME5CUVdkRExFVkJRM0JGTEhOQ1FVRnpRaXhGUVVGRkxHMUNRVUZ0UWl4RlFVRkZMRzFDUVVGdFFpeEZRVUZETEUxQlFVMHNNa0pCUVRKQ0xFTkJRVU03UVVGRGNrY3NUMEZCVHl4RlFVRkRMREJDUVVFd1FpeEZRVUZETEUxQlFVMHNNRUpCUVRCQ0xFTkJRVU03UVVGRmNFVXNUMEZCVHl4RlFVRkRMRTlCUVU4c1JVRkJReXhOUVVGTkxFMUJRVTBzUTBGQlF6dEJRVU0zUWl4UFFVRlBMSE5DUVVGelFpeERRVUZETzBGQlF6bENMRTlCUVU4c1JVRkJReXgzUWtGQmQwSXNSVUZCUXl4TlFVRk5MR3RFUVVGclJDeERRVUZETzBGQlJURkdMRTFCUVUwc1QwRkJUeXhYUVVGWE8wbEJjMEowUWp0UlFYSkNRU3hwUWtGQldTeEhRVU5hTEVWQlFVTXNUVUZCVFN4RlFVRkZMR2RDUVVGblFpeEZRVUZGTEV0QlFVc3NSVUZCUlN4RFFVRkRMRVZCUVVVc1QwRkJUeXhGUVVGRkxEQkVRVUV3UkN4RlFVRkRMRU5CUVVNN1VVRkRNVWNzYjBOQlFXOURPMUZCUTNCRExEWkhRVUUyUnp0UlFVTTNSeXhaUVVGUExFZEJRMHdzUlVGQlF5eE5RVUZOTEVWQlFVVXNVVUZCVVN4RlFVRkZMRXRCUVVzc1JVRkJSU3hEUVVGRE8xbEJRM3BDTEU5QlFVOHNSVUZCUlN4NVJrRkJlVVlzUlVGQlF5eERRVUZETzFGQlEzaEhMR1ZCUVZVc1IwRkRWaXhGUVVGRExFMUJRVTBzUlVGQlJTeFhRVUZYTEVWQlFVVXNTMEZCU3l4RlFVRkZMRVZCUVVVc1JVRkJSU3hQUVVGUExFVkJRVVVzYVVWQlFXbEZMRVZCUVVNc1EwRkJRenRSUVVNM1J5eFhRVUZOTEVkQlEwNHNSVUZCUXl4TlFVRk5MRVZCUVVVc1VVRkJVU3hGUVVGRkxFdEJRVXNzUlVGQlJTeERRVUZETzFsQlEzcENMRTlCUVU4c1JVRkRVRHRyUkVGRE9FTXNSVUZCUXl4RFFVRkRPMUZCUTJ4RUxGbEJRVThzUjBGRFVDeEZRVUZETEUxQlFVMHNSVUZCUlN4alFVRmpMRVZCUVVVc1MwRkJTeXhGUVVGRkxFZEJRVWM3V1VGRGFrTXNUMEZCVHl4RlFVRkZPelJGUVVNclJDeEZRVUZETEVOQlFVTTdVVUZETlVVc1pVRkJWU3hIUVVFclFpeEZRVUZETEUxQlFVMHNSVUZCUlN4aFFVRmhMRVZCUVVVc1MwRkJTeXhGUVVGRkxFbEJRVWtzUlVGQlJTeFBRVUZQTEVWQlFVVXNZVUZCWVN4RlFVRkZMRWxCUVVrc1JVRkJSU3hSUVVGUkxFVkJRVU1zUTBGQlF6dFJRVU4wU0N4alFVRlRMRWRCUTFBc1JVRkJReXhOUVVGTkxFVkJRVVVzV1VGQldTeEZRVUZGTEV0QlFVc3NSVUZCUlN4TFFVRkxMRVZCUVVVc1QwRkJUeXhGUVVGRkxHbERRVUZwUXl4RlFVRkZMRWxCUVVrc1JVRkJSU3hUUVVGVExFVkJRVU1zUTBGQlF6dFJRVVZzUnl4M1FrRkJkMElzUlVGQlJTeERRVUZETEVsQlFVa3NRMEZCUXl4RFFVRkRMRWxCUVVrc1JVRkJSU3hGUVVGRk8xbEJRM1pETEVsQlFVa3NTVUZCU1N4RlFVRkZPMmRDUVVOU0xFbEJRVWtzUTBGQlF5eFRRVUZUTEVOQlFVTXNUMEZCVHl4SlFVRkpMRXRCUVVzc1NVRkJTU3hIUVVGSExFTkJRVU03WVVGRGVFTTdhVUpCUVUwN1owSkJRMHdzU1VGQlNTeERRVUZETEZOQlFWTXNRMEZCUXl4TFFVRkxMRWRCUVVjc1MwRkJTeXhEUVVGRE8yZENRVU0zUWl4SlFVRkpMRU5CUVVNc1UwRkJVeXhEUVVGRExGZEJRVmNzUjBGQlJ5eEpRVUZKTEVOQlFVTTdZVUZEYmtNN1VVRkRTQ3hEUVVGRExFTkJRVU1zUTBGQlF6dEpRVU5NTEVOQlFVTTdTVUZCUVN4RFFVRkRPME5CUTBnN1FVRkZSQ3hOUVVGTkxFOUJRVThzVjBGQlZ6dEpRVXQwUWl3NFIwRkJPRWM3U1VGRk9VYzdVVUZPUVN4WlFVRlBMRWRCUTFBc1JVRkJReXhOUVVGTkxFVkJRVVVzVTBGQlV5eEZRVUZGTEV0QlFVc3NSVUZCUlN4RlFVRkZMRVZCUVVVc1QwRkJUeXhGUVVGRkxEQkNRVUV3UWl4RlFVRkRMRU5CUVVNN1VVRkRjRVVzWlVGQlZTeEhRVU5XTEVWQlFVTXNUVUZCVFN4RlFVRkZMRmxCUVZrc1JVRkJSU3hMUVVGTExFVkJRVVVzUlVGQlJTeEZRVUZGTEU5QlFVOHNSVUZCUlN4clJFRkJhMFFzUlVGQlF5eERRVUZETzBsQlIyaEdMRU5CUVVNN1NVRkJRU3hEUVVGRE8wTkJRMnhDTzBGQmMwSkVMRTFCUVUwc1QwRkJUeXcyUWtGQk5rSTdTVUUyUW5SRExGbEJRVmtzYVVKQlFUUkRMRVZCUVVVN1VVRTFRakZFTEcxQ1FVRmpMRWRCUVRoQ0xFVkJRVVVzUTBGQlF6dFJRVWt2UXl4eFFrRkJaMElzUjBGQkswSXNSVUZCUlN4RFFVRkRPMUZCUTJ4RUxIbENRVUZ2UWl4SFFVRm5RaXhGUVVGRkxFTkJRVU1zUjBGQlJ5eEZRVUZGTEVOQlFVTTdVVUZETjBNc01rSkJRWE5DTEVkQlFXZENMRVZCUVVVc1EwRkJReXhIUVVGSExFVkJRVVVzUTBGQlF6dFJRVVV2UXl4elFrRkJhVUlzUjBGQlowSXNSVUZCUlN4RFFVRkRMRWRCUVVjc1JVRkJSU3hEUVVGRE8xRkJRekZETEhWQ1FVRnJRaXhIUVVFNFFpeEZRVUZGTEVOQlFVTTdVVUZEYmtRc2EwSkJRV0VzUjBGQkswTTdXVUZETVVRc1EwRkJReXh0UWtGQmJVSXNRMEZCUXl4SlFVRkpMRU5CUVVNc1JVRkJSU3hKUVVGSkxGZEJRVmNzUlVGQlJUdFpRVU0zUXl4RFFVRkRMRzFDUVVGdFFpeERRVUZETEV0QlFVc3NRMEZCUXl4RlFVRkZMRWxCUVVrc1YwRkJWeXhGUVVGRk8xTkJReTlETEVOQlFVTTdVVUZEUml4cFFrRkJXU3hIUVVGSExFbEJRVWtzWVVGQllTeEZRVUZGTEVOQlFVTTdVVUZEYmtNc2MwSkJRV2xDTEVkQlFVY3NSVUZCUlN4RFFVRkRMRTFCUVUwc1EwRkJReXhGUVVGRkxFTkJRVU1zUTBGQlF6dFJRVU5zUXl4elFrRkJhVUlzUjBGQlJ5eEZRVUZGTEVOQlFVTXNUVUZCVFN4RFFVRkRMRVZCUVVVc1EwRkJReXhEUVVGRE8xRkJRMnhETEhWQ1FVRnJRaXhIUVVFclF5eEZRVUZGTEVOQlFVTTdVVUZKY0VVc2QwSkJRVzFDTEVkQlFVY3NSVUZCUlN4RFFVRkRMRk5CUVZNc1EwRkJReXhwUWtGQmFVSXNSVUZCUlN4SlFVRkpMRU5CUVVNc1EwRkJRenRSUVVNMVJDd3lRa0ZCYzBJc1IwRkJSeXhGUVVGRkxFTkJRVU1zVTBGQlV5eERRVUZETEc5Q1FVRnZRaXhGUVVGRkxFdEJRVXNzUTBGQlF5eERRVUZETzFGQlJXNUZMREpDUVVGelFpeEhRVUZITEVWQlFVVXNRMEZCUXl4WFFVRlhMRU5CUVVNc1lVRkJZU3hGUVVGRkxEQkNRVUV3UWl4RFFVRkRMRk5CUVZNc1JVRkRla1lzUTBGQlF5d3dRa0ZCTUVJc1EwRkJReXhUUVVGVExFVkJRVVVzTUVKQlFUQkNMRU5CUVVNc1UwRkJVeXhEUVVGRExFTkJRVU1zUTBGQlF6dFJRVWs1UlN4SlFVRkpMRU5CUVVNc2MwSkJRWE5DTEVOQlFVTXNWVUZCVlN4RFFVRkRMRFJFUVVFMFJDeERRVUZETEVOQlFVTTdVVUZEY2tjc1NVRkJTU3hEUVVGRExHZENRVUZuUWl4SFFVRkhMRWxCUVVrc1QwRkJUeXhGUVVGRkxFTkJRVU03VVVGRGRFTXNTVUZCU1N4RFFVRkRMR05CUVdNc1IwRkJSeXhqUVVGakxFTkJRVU03VVVGRGNrTXNTVUZCU1N4RFFVRkRMREpDUVVFeVFpeEhRVUZITEVWQlFVVXNRMEZCUXl4VFFVRlRMRVZCUVVVc1EwRkJRenRSUVVOc1JDeE5RVUZOTEd0Q1FVRnJRaXhIUVVGSExFVkJRVVVzUTBGQlF5eEpRVUZKTEVOQlFVTXNTVUZCU1N4RFFVRkRMRVZCUVVNc1NVRkJTU3hGUVVGRkxFTkJRVU1zYTBOQlFXdERMRU5CUVVNc1JVRkJReXhEUVVGRExFTkJRVU03VVVGRGRFWXNhMEpCUVd0Q0xFTkJRVU1zVDBGQlR5eERRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkZMRVZCUVVVN1dVRkRMMElzVFVGQlRTeFJRVUZSTEVkQlFWY3NRMEZCUXl4RFFVRkRMRTlCUVU4c1EwRkJReXhIUVVGSExFTkJRVU1zYzBKQlFYTkNMRU5CUVVNc1NVRkJTU3hGUVVGRkxFTkJRVU03V1VGRGNrVXNUVUZCVFN4SlFVRkpMRWRCUVVjc1EwRkJReXhEUVVGRExGbEJRVmtzU1VGQlNTeERRVUZETEVOQlFVTXNTVUZCU1N4RFFVRkRPMWxCUTNSRExFMUJRVTBzUzBGQlN5eEhRVUZYTEVOQlFVTXNRMEZCUXl4UFFVRlBMRU5CUVVNc1IwRkJSeXhEUVVGRExHMUNRVUZ0UWl4RFFVRkRMRWxCUVVrc1JVRkJSU3hEUVVGRE8xbEJReTlFTEUxQlFVMHNTMEZCU3l4SFFVRlhMRU5CUVVNc1EwRkJReXhQUVVGUExFTkJRVU1zUjBGQlJ5eERRVUZETEcxQ1FVRnRRaXhEUVVGRExFbEJRVWtzUlVGQlJTeERRVUZETzFsQlF5OUVMRTFCUVUwc2FVSkJRV2xDTEVkQlFWY3NRMEZCUXl4RFFVRkRMRTlCUVU4c1EwRkJReXhIUVVGSExFTkJRVU1zWjBOQlFXZERMRU5CUVVNc1NVRkJTU3hGUVVGRkxFTkJRVU03V1VGRGVFWXNTVUZCU1N4SlFVRkpMRU5CUVVNc1kwRkJZeXhEUVVGRExFOUJRVThzU1VGQlNTeERRVUZETEZGQlFWRXNRMEZCUXl4UlFVRlJMRU5CUVVNc1NVRkJTU3hEUVVGRExHTkJRV01zUTBGQlF5eFBRVUZQTEVOQlFVTTdaMEpCUTJoR0xFOUJRVTg3V1VGRFZDeEpRVUZKTEVsQlFVa3NRMEZCUXl4alFVRmpMRU5CUVVNc1NVRkJTU3hKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEZGQlFWRXNRMEZCUXl4SlFVRkpMRU5CUVVNc1kwRkJZeXhEUVVGRExFbEJRVWtzUTBGQlF6dG5Ra0ZEZGtVc1QwRkJUenRaUVVOVUxFbEJRVWtzU1VGQlNTeERRVUZETEdOQlFXTXNRMEZCUXl4TFFVRkxMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zVVVGQlVTeERRVUZETEVsQlFVa3NRMEZCUXl4alFVRmpMRU5CUVVNc1MwRkJTeXhEUVVGRE8yZENRVU42UlN4UFFVRlBPMWxCUlZRc1NVRkJTU3hEUVVGRExHdENRVUZyUWl4RFFVRkRMRWxCUVVrc1EwRkJReXhIUVVGSE8yZENRVU01UWl4SlFVRkpMRVZCUVVVc1EwRkJRenRuUWtGRFVDeFJRVUZSTEVWQlFVVXNVVUZCVVN4RFFVRkRMRU5CUVVNc1EwRkJReXhSUVVGUkxFTkJRVU1zUzBGQlN5eERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRk8yZENRVU0zUXl4TFFVRkxMRVZCUVVVc1MwRkJTeXhEUVVGRExFTkJRVU1zUTBGQlF5eExRVUZMTEVOQlFVTXNTMEZCU3l4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZGTzJkQ1FVTndReXhMUVVGTExFVkJRVVVzUzBGQlN5eERRVUZETEVOQlFVTXNRMEZCUXl4TFFVRkxMRU5CUVVNc1MwRkJTeXhEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkZPMmRDUVVOd1F5eHBRa0ZCYVVJc1JVRkJSU3hwUWtGQmFVSXNRMEZCUXl4RFFVRkRMRU5CUVVNc2FVSkJRV2xDTEVOQlFVTXNTMEZCU3l4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZGTzJGQlEzcEZMRU5CUVVNN1VVRkRTaXhEUVVGRExFTkJRVU1zUTBGQlF6dFJRVVZJTEVsQlFVa3NRMEZCUXl4dlFrRkJiMElzUjBGQlJ5eEpRVUZKTEhkQ1FVRjNRaXhGUVVGRkxFTkJRVU03VVVGRk0wUXNTVUZCU1N4RFFVRkRMRlZCUVZVc1IwRkJSeXhGUVVGRkxFTkJRVU1zVlVGQlZTeERRVUZETEU5QlFVOHNSVUZCUlN4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExFVkJRVVVzUTBGQlF5eFRRVUZUTEVWQlFVVXNTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhOUVVGTkxFVkJRVVVzUjBGQlJ5eEZRVUZGTzFsQlEzaEdMRWxCUVVrc1EwRkJReXh0UWtGQmJVSXNSVUZCUlN4RFFVRkRPMUZCUXpkQ0xFTkJRVU1zUTBGQlF5eERRVUZETzFGQlEwZ3NTVUZCU1N4RFFVRkRMRzFDUVVGdFFpeEZRVUZGTEVOQlFVTTdVVUZETTBJc1NVRkJTU3hqUVVGakxFZEJRVWNzUzBGQlN5eERRVUZETzFGQlF6TkNMRWxCUVVrc2IwSkJRVzlDTEVkQlFVY3NTMEZCU3l4RFFVRkRPMUZCUldwRExFbEJRVWtzUTBGQlF5eFhRVUZYTEVkQlFVY3NSVUZCUlN4RFFVRkRMRmRCUVZjc1EwRkJReXhSUVVGUkxFVkJRVVVzYlVKQlFXMUNMRU5CUVVNc1NVRkJTU3hGUVVOc1JTeERRVUZETEcxQ1FVRnRRaXhEUVVGRExFbEJRVWtzUlVGQlJTeHRRa0ZCYlVJc1EwRkJReXhMUVVGTExFTkJRVU1zUlVGQlJTeEhRVUZITEVWQlFVVTdXVUZETVVRc1NVRkJTU3hqUVVGak8yZENRVU5vUWl4SlFVRkpMRU5CUVVNc01FSkJRVEJDTEVOQlFVTXNTVUZCU1N4RFFVRkRMR2xDUVVGcFFpeEZRVUZGTEVsQlFVa3NRMEZCUXl4aFFVRmhMRU5CUVVNc1NVRkJTU3hEUVVGRExGZEJRVmNzUTBGQlF5eExRVUZOTEVOQlFVTXNRMEZCUXl4RFFVRkRPMUZCUTNwSExFTkJRVU1zUTBGQlF5eERRVUZETzFGQlEwd3NTVUZCU1N4RFFVRkRMR3RDUVVGclFpeEhRVUZITEVWQlFVVXNRMEZCUXl4TFFVRkxMRU5CUVVNc1VVRkJVU3hEUVVGRExFZEJRVVVzUlVGQlJUdFpRVU01UXl4alFVRmpMRWRCUVVjc1EwRkJReXhqUVVGakxFTkJRVU03V1VGRGFrTXNTVUZCU1N4RFFVRkRMR05CUVdNN1owSkJRMnBDTEVWQlFVVXNRMEZCUXl4TFFVRkxMRU5CUVVNc1NVRkJTU3hEUVVGRExHbENRVUZwUWl4RFFVRkRMRU5CUVVNN08yZENRVVZxUXl4SlFVRkpMRU5CUVVNc01FSkJRVEJDTEVOQlFVTXNTVUZCU1N4RFFVRkRMR2xDUVVGcFFpeEZRVUZGTEVsQlFVa3NRMEZCUXl4aFFVRmhMRU5CUVVNc1NVRkJTU3hEUVVGRExGZEJRVmNzUTBGQlF5eExRVUZOTEVOQlFVTXNRMEZCUXl4RFFVRkRPMUZCUTNwSExFTkJRVU1zUlVGQlJTd3lRa0ZCTWtJc1EwRkJReXhEUVVGRE8xRkJRMmhETEVsQlFVa3NRMEZCUXl4clFrRkJhMElzUjBGQlJ5eEZRVUZGTEVOQlFVTXNTMEZCU3l4RFFVRkRMRkZCUVZFc1EwRkJReXhIUVVGRkxFVkJRVVU3V1VGRE9VTXNiMEpCUVc5Q0xFZEJRVWNzUTBGQlF5eHZRa0ZCYjBJc1EwRkJRenRaUVVNM1F5eEpRVUZKTEVOQlFVTXNiMEpCUVc5Q08yZENRVU4yUWl4RlFVRkZMRU5CUVVNc1MwRkJTeXhEUVVGRExFbEJRVWtzUTBGQlF5eHBRa0ZCYVVJc1EwRkJReXhEUVVGRE96dG5Ra0ZGYWtNc1NVRkJTU3hEUVVGRExEQkNRVUV3UWl4RFFVRkRMRWxCUVVrc1EwRkJReXhwUWtGQmFVSXNSVUZCUlN4SlFVRkpMRU5CUVVNc1dVRkJXU3hEUVVGRExFTkJRVU03VVVGREwwVXNRMEZCUXl4RlFVRkZMRGhDUVVFNFFpeERRVUZETEVOQlFVTTdVVUZEYmtNc1NVRkJTU3hEUVVGRExITkNRVUZ6UWl4RFFVRkRMRk5CUVZNc1EwRkJReXhIUVVGSExFTkJRVU1zYVVOQlFXbERMRU5CUVVNc1EwRkJRenRSUVVNM1JTeEpRVUZKTEVOQlFVTXNjMEpCUVhOQ0xFTkJRVU1zU1VGQlNTeERRVUZETEU5QlFVOHNRMEZCUXl4SlFVRkpMRU5CUVVNc2EwSkJRV3RDTEVOQlFVTXNRMEZCUXp0UlFVTnNSU3hKUVVGSkxFTkJRVU1zVjBGQlZ5eERRVUZETEVsQlFVa3NRMEZCUXl4VFFVRlRMRU5CUVVNc1IwRkJSeXhEUVVGRExHbERRVUZwUXl4RFFVRkRMRU5CUVVNN1VVRkRka1VzU1VGQlNTeERRVUZETEZkQlFWY3NRMEZCUXl4SlFVRkpMRU5CUVVNc1QwRkJUeXhEUVVGRExFbEJRVWtzUTBGQlF5eHJRa0ZCYTBJc1EwRkJReXhEUVVGRE8xRkJRM1pFTEVsQlFVa3NRMEZCUXl3eVFrRkJNa0lzUTBGQlF5eFBRVUZQTEVOQlFVTXNaMEpCUVdkQ0xFVkJRVVVzUjBGQlJ5eEZRVUZGTEVOQlFVTXNTVUZCU1N4RFFVRkRMRzlDUVVGdlFpeEZRVUZGTEVsQlFVa3NSVUZCUlN4SlFVRkpMRVZCUVVVc1MwRkJTeXhEUVVGRExFTkJRVU03VVVGREwwY3NTVUZCU1N4RFFVRkRMREpDUVVFeVFpeERRVUZETEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1QwRkJUeXhIUVVGSExFMUJRVTBzUTBGQlF6dFJRVU0zUkN4SlFVRkpMRU5CUVVNc2MwSkJRWE5DTEVOQlFVTXNWMEZCVnl4RFFVRkRMRWxCUVVrc1EwRkJReXd5UWtGQk1rSXNRMEZCUXl4SlFVRkpMRU5CUVVNc1EwRkJRenRSUVVNdlJTeEpRVUZKTEVOQlFVTXNjMEpCUVhOQ0xFTkJRVU1zVjBGQlZ5eERRVUZETEVsQlFVa3NRMEZCUXl4cFFrRkJhVUlzUTBGQlF5eERRVUZETzBsQlEyeEZMRU5CUVVNN1NVRkZSQ3h0UWtGQmJVSTdVVUZEYWtJc1RVRkJUU3hMUVVGTExFZEJRVWNzU1VGQlNTeERRVUZETEZWQlFWVXNRMEZCUXl4TFFVRkxMRU5CUVVNN1VVRkRjRU1zU1VGQlNTeERRVUZETEV0QlFVczdXVUZEVWl4UFFVRlBPMUZCUTFRc1JVRkJSU3hEUVVGRExFdEJRVXNzUTBGQlF5eEpRVUZKTEVOQlFVTXNiMEpCUVc5Q0xFTkJRVU1zUTBGQlF6dFJRVU53UXl4RlFVRkZMRU5CUVVNc1MwRkJTeXhEUVVGRExFbEJRVWtzUTBGQlF5eHBRa0ZCYVVJc1EwRkJReXhEUVVGRE8xRkJSV3BETEVsQlFVa3NRMEZCUXl4clFrRkJhMElzUjBGQlJ5eEZRVUZGTEVOQlFVTTdVVUZETjBJc1RVRkJUU3hQUVVGUExFZEJRVWNzUzBGQlN5eERRVUZETEU5QlFVOHNRMEZCUXl4TlFVRk5MRVZCUVVVc1EwRkJRenRSUVVOMlF5eFBRVUZQTEVOQlFVTXNUMEZCVHl4RFFVRkRMRU5CUVVNc1IwRkJSeXhGUVVGRkxFVkJRVVU3V1VGRGRFSXNUVUZCVFN4RFFVRkRMRWxCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU1zYTBKQlFXdENMRU5CUVVNc1EwRkJReXhQUVVGUExFTkJRVU1zUTBGQlF5eFJRVUZSTEVWQlFVVXNSVUZCUlR0blFrRkRlRVFzVFVGQlRTeFJRVUZSTEVkQlFVY3NTVUZCU1N4RFFVRkRMR3RDUVVGclFpeERRVUZETEZGQlFWRXNRMEZCUXl4RFFVRkRMRkZCUVZFc1EwRkJRenRuUWtGRE5VUXNUVUZCVFN4TFFVRkxMRWRCUVVjc1NVRkJTU3hEUVVGRExHdENRVUZyUWl4RFFVRkRMRkZCUVZFc1EwRkJReXhEUVVGRExFdEJRVXNzUTBGQlF6dG5Ra0ZEZEVRc1RVRkJUU3hMUVVGTExFZEJRVWNzU1VGQlNTeERRVUZETEd0Q1FVRnJRaXhEUVVGRExGRkJRVkVzUTBGQlF5eERRVUZETEV0QlFVc3NRMEZCUXp0blFrRkRkRVFzVFVGQlRTeG5Ra0ZCWjBJc1IwRkJSeXhEUVVGRExGRkJRVkVzUTBGQlF5eE5RVUZOTEVsQlFVa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1QwRkJUeXhKUVVGSkxGRkJRVkVzUTBGQlF5eFJRVUZSTEVOQlFVTXNSMEZCUnl4RFFVRkRMRTlCUVU4c1EwRkJReXhEUVVGRExFTkJRVU03WjBKQlF6ZEdMRTFCUVUwc1dVRkJXU3hIUVVGSExFTkJRVU1zUzBGQlN5eERRVUZETEUxQlFVMHNTVUZCU1N4TFFVRkxMRU5CUVVNc1VVRkJVU3hEUVVGRExFZEJRVWNzUTBGQlF5eEpRVUZKTEVOQlFVTXNRMEZCUXp0blFrRkRMMFFzVFVGQlRTeGpRVUZqTEVkQlFVY3NRMEZCUXl4TFFVRkxMRU5CUVVNc1RVRkJUVHR2UWtGRGJFTXNRMEZCUXl4SFFVRkhMRU5CUVVNc1RVRkJUU3hEUVVGRExFVkJRVVVzUTBGQlF5eEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRWxCUVVrc1MwRkJTeXhEUVVGRExGRkJRVkVzUTBGQlF5eEhRVUZITEVOQlFVTXNUVUZCVFN4RFFVRkRMRVZCUVVVc1EwRkJReXhKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRPMmRDUVVNelJTeEpRVUZKTEdkQ1FVRm5RaXhKUVVGSkxGbEJRVmtzU1VGQlNTeGpRVUZqTEVWQlFVVTdiMEpCUTNSRUxFbEJRVWtzUTBGQlF5eEpRVUZKTEVOQlFVTXNhMEpCUVd0Q0xFTkJRVU1zUjBGQlJ5eERRVUZETEVsQlFVa3NRMEZCUXp0M1FrRkRjRU1zU1VGQlNTeERRVUZETEd0Q1FVRnJRaXhEUVVGRExFZEJRVWNzUTBGQlF5eEpRVUZKTEVOQlFVTXNSMEZCUnl4RlFVRkZMRU5CUVVNN2IwSkJRM3BETEVsQlFVa3NRMEZCUXl4clFrRkJhMElzUTBGQlF5eEhRVUZITEVOQlFVTXNTVUZCU1N4RFFVRkRMRU5CUVVNc1NVRkJTU3hEUVVGRExGRkJRVkVzUTBGQlF5eERRVUZETzJsQ1FVTnNSRHRaUVVOSUxFTkJRVU1zUTBGQlF5eERRVUZETzFGQlEwd3NRMEZCUXl4RFFVRkRMRU5CUVVNN1VVRkRTQ3hOUVVGTkxHbENRVUZwUWl4SFFVRkhMRTFCUVUwc1EwRkJReXhKUVVGSkxFTkJRVU1zU1VGQlNTeERRVUZETEd0Q1FVRnJRaXhEUVVGRExFTkJRVU03VVVGREwwUXNUVUZCVFN4WlFVRlpMRWRCUVVjc1JVRkJSU3hEUVVGRExGbEJRVmtzUTBGQlF5eFRRVUZUTEVWQlFVVXNTMEZCU3l4RlFVRkZMRWRCUVVjc1JVRkJSVHRaUVVNeFJDeEpRVUZKTEVOQlFVTXNaMEpCUVdkQ0xFTkJRVU1zU1VGQlNTeEZRVUZGTEVOQlFVTTdXVUZETjBJc1JVRkJSU3hEUVVGRExFdEJRVXNzUTBGQlF5eEpRVUZKTEVOQlFVTXNiMEpCUVc5Q0xFTkJRVU1zUTBGQlF6dFpRVU53UXl4RlFVRkZMRU5CUVVNc1MwRkJTeXhEUVVGRExFbEJRVWtzUTBGQlF5eHBRa0ZCYVVJc1EwRkJReXhEUVVGRE8xbEJRMnBETEUxQlFVMHNTVUZCU1N4SFFVRkhMRmxCUVZrc1EwRkJReXhMUVVGTExFTkJRVU03V1VGRGFFTXNTVUZCU1N4RFFVRkRMRWxCUVVrc1NVRkJTU3hKUVVGSkxFVkJRVVVzVFVGQlRTeEhRVUZITEVOQlFVTTdaMEpCUXpOQ0xFbEJRVWtzUTBGQlF5eHpRa0ZCYzBJc1EwRkJReXhKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEU5QlFVOHNSMEZCUnl4TlFVRk5MRU5CUVVNN08yZENRVVY0UkN4SlFVRkpMRU5CUVVNc2MwSkJRWE5DTEVOQlFVTXNTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhQUVVGUExFZEJRVWNzVFVGQlRTeERRVUZETzFsQlF6RkVMRWxCUVVrc1EwRkJReXhKUVVGSkxFbEJRVWtzU1VGQlNTeERRVUZETEUxQlFVMHNTMEZCU3l4RFFVRkRMRVZCUVVVN1owSkJRemxDTEVsQlFVa3NRMEZCUXl3eVFrRkJNa0lzUTBGQlF5eEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRTlCUVU4c1IwRkJSeXhOUVVGTkxFTkJRVU03WjBKQlF6ZEVMRTlCUVU4N1lVRkRVanRaUVVORUxFMUJRVTBzV1VGQldTeEhRVUZITEVOQlFVTXNSVUZCUlN4RlFVRkZMRVZCUVVVc1JVRkJSU3hGUVVGRkxFVkJRVVVzUlVGQlJTeERRVUZETEVOQlFVTTdXVUZEZEVNc1NVRkJTU3hEUVVGRExHZENRVUZuUWl4SFFVRkhMRWxCUVVrc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF5eEhRVUZITEVWQlFVVXNSVUZCUlR0blFrRkRka01zVFVGQlRTeFhRVUZYTEVkQlFVY3NTVUZCU1N4M1FrRkJkMElzUTBGQlF5eEhRVUZITEVWQlFVVXNTVUZCU1N4RFFVRkRMR3RDUVVGclFpeERRVUZETEVkQlFVY3NRMEZCUXl4SlFVRkpMRU5CUVVNc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF5eEZRVUZGTEVWQlFVVXNSVUZCUlN4RFFVTnFSeXhKUVVGSkxFTkJRVU1zYTBKQlFXdENMRU5CUVVNc1JVRkJSU3hEUVVGRExFTkJRVU1zUlVGQlJTeFpRVUZaTEVOQlFVTXNRMEZCUXp0blFrRkRPVU1zVDBGQlR5eFhRVUZYTEVOQlFVTTdXVUZEY2tJc1EwRkJReXhEUVVGRExFTkJRVU03V1VGRFNDeE5RVUZOTEZsQlFWa3NSMEZCUnl4RFFVRkRMRkZCUVZFc1JVRkJSU3h0UWtGQmJVSXNSVUZCUlN4dFFrRkJiVUlzUlVGQlJTeFJRVUZSTEVOQlFVTXNRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJReXhGUVVGRkxFVkJRVVVzUTBGQlF5eEZRVUZGTEVWQlFVVXNRMEZEYUVjc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVWQlFVVXNSVUZCUXl4TFFVRkxMRVZCUVVVc1JVRkJReXhMUVVGTExFVkJRVVVzUjBGQlJ5eFpRVUZaTEVOQlFVTXNRMEZCUXl4RFFVRkRMRWRCUVVjc1JVRkJSU3hOUVVGTkxFVkJRVVVzUTBGQlF5eEZRVUZETEVWQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN1dVRkZha1VzUlVGQlJTeERRVUZETEU5QlFVOHNRMEZCUXl4SlFVRkpMRU5CUVVNc1dVRkJXU3hEUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZGTEhsRFFVRjVReXhEUVVGRExFTkJRVU03V1VGRE5VVXNSVUZCUlN4RFFVRkRMRTlCUVU4c1EwRkJReXhKUVVGSkxFTkJRVU1zV1VGQldTeERRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkZMREJFUVVFd1JDeERRVUZETEVOQlFVTTdXVUZETjBZc1JVRkJSU3hEUVVGRExFOUJRVThzUTBGQlF5eEpRVUZKTEVOQlFVTXNXVUZCV1N4RFFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRkxEWkVRVUUyUkN4RFFVRkRMRU5CUVVNN1dVRkZhRWNzVFVGQlRTeGxRVUZsTEVkQlFVY3NSVUZCUlN4RFFVRkRMRWxCUVVrc1EwRkJReXhaUVVGWkxFVkJRVVVzUlVGQlF5eFBRVUZQTEVWQlFVVXNORU5CUVRSRExFVkJRVU1zUTBGQlF5eERRVUZETzFsQlEzWkhMRWxCUVVrc1EwRkJReXh2UWtGQmIwSXNRMEZCUXl4WFFVRlhMRU5CUVVNc1pVRkJaU3hEUVVGRExFTkJRVU03V1VGRGRrUXNUVUZCVFN4WFFVRlhMRWRCUVVjc1JVRkJSU3hEUVVGRExFbEJRVWtzUTBGQlF5eEZRVUZGTEVWQlFVVXNSVUZCUXl4TFFVRkxMRVZCUVVVc1JVRkJReXhUUVVGVExFVkJRVVVzVDBGQlR5eEZRVUZGTEZGQlFWRXNSVUZCUlN4TlFVRk5MRVZCUVVNc1JVRkJReXhEUVVGRExFTkJRVU03V1VGRGFrWXNTVUZCU1N4RFFVRkRMR2RDUVVGblFpeERRVUZETEU5QlFVOHNRMEZCUXl4RFFVRkRMRTFCUVUwc1JVRkJSU3hGUVVGRk8yZENRVU4yUXl4WFFVRlhMRU5CUVVNc1YwRkJWeXhEUVVGRExFMUJRVTBzUTBGQlF5eFpRVUZaTEVOQlFVTXNRMEZCUXp0WlFVTXZReXhEUVVGRExFTkJRVU1zUTBGQlF6dFpRVU5JTEVsQlFVa3NRMEZCUXl4dlFrRkJiMElzUTBGQlF5eFhRVUZYTEVOQlFVTXNWMEZCVnl4RFFVRkRMRU5CUVVNN1dVRkRia1FzU1VGQlNTeEpRVUZKTEVOQlFVTXNaMEpCUVdkQ0xFTkJRVU1zVFVGQlRTeEhRVUZITEVOQlFVTTdaMEpCUTJ4RExFbEJRVWtzUTBGQlF5d3lRa0ZCTWtJc1EwRkJReXhKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEU5QlFVOHNSMEZCUnl4TlFVRk5MRU5CUVVNN1VVRkRha1VzUTBGQlF5eEZRVUZGTEVWQlFVTXNVMEZCVXl4RlFVRkZMR2xDUVVGcFFpeEZRVUZETEVOQlFVTXNRMEZCUXp0UlFVTnVReXhaUVVGWkxFTkJRVU1zVjBGQlZ5eEZRVUZGTEVOQlFVTTdVVUZETTBJc1NVRkJTU3hEUVVGRExFbEJRVWtzUTBGQlF5eG5Ra0ZCWjBJc1JVRkJSVHRaUVVNeFFpeEpRVUZKTEVOQlFVTXNaMEpCUVdkQ0xFZEJRVWNzV1VGQldTeERRVUZETEVsQlFVa3NRMEZCUXp0WlFVTXhReXhKUVVGSkxFTkJRVU1zV1VGQldTeEhRVUZITEZsQlFWa3NRMEZCUXp0VFFVTnNRenRoUVVGTk8xbEJRMHdzUlVGQlJTeERRVUZETEV0QlFVc3NRMEZCUXl4SlFVRkpMRU5CUVVNc1owSkJRV2RDTEVOQlFVTXNRMEZCUXp0WlFVTm9ReXhKUVVGSkxFTkJRVU1zV1VGQldTeEhRVUZITEZsQlFWa3NRMEZCUXp0WlFVTnFReXhMUVVGTExFTkJRVU1zU1VGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4WlFVRlpMRU5CUVVNc1NVRkJTU3hEUVVGRExGRkJRVkVzUTBGQlF6dHBRa0ZEZUVNc1QwRkJUeXhEUVVGRExFTkJRVU1zUlVGQlJTeEZRVUZGTEVWQlFVVXNRMEZCUXl4SlFVRkpMRU5CUVVNc1owSkJRV2RDTEVOQlFVTXNWMEZCVnl4RFFVRkRMRVZCUVVVc1EwRkJReXhEUVVGRExFTkJRVU03VTBGRE0wUTdTVUZEU0N4RFFVRkRPMGxCUTA4c01FSkJRVEJDTEVOQlEyaERMRlZCUVhWQ0xFVkJRVVVzVFVGQmFVUTdVVUZETVVVc1JVRkJSU3hEUVVGRExFdEJRVXNzUTBGQlF5eFZRVUZWTEVOQlFVTXNRMEZCUXp0UlFVTnlRaXhOUVVGTkxFTkJRVU1zU1VGQlNTeERRVUZETEUxQlFVMHNRMEZCUXl4RFFVRkRMRTlCUVU4c1EwRkJReXhEUVVGRExFVkJRVThzUlVGQlJTeEZRVUZGTzFsQlEzUkRMRTFCUVUwc1MwRkJTeXhIUVVOU0xFMUJRV01zUTBGQlF5eEZRVUZGTEVOQlFVTXNRMEZCUXp0WlFVTjBRaXhKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEZkQlFWY3NSVUZCUlR0blFrRkRkRUlzVFVGQlRTeExRVUZMTEVkQlFVY3NTMEZCU3l4RFFVRkRMRWxCUVVrc1MwRkJTeXhSUVVGUkxFTkJRVU1zUTBGQlF6dHZRa0ZEY2tNc1JVRkJSU3hEUVVGRExGZEJRVmNzUTBGQlF5eExRVUZMTEVOQlFVTXNUVUZCVFN4RlFVRkZMRXRCUVVzc1EwRkJReXhMUVVGTExFbEJRVWtzUlVGQlJTeEZRVUZGTEVkQlFVY3NSVUZCUlR0M1FrRkRia1FzUzBGQlN5eERRVUZETEV0QlFVc3NSMEZCU1N4TFFVRTRRaXhEUVVGRExFdEJRVXNzUTBGQlF6dHZRa0ZEZEVRc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEV0QlFVc3NRMEZCUXl4SlFVRkpMRXRCUVVzc1UwRkJVeXhEUVVGRExFTkJRVU03YjBKQlF6ZENMRVZCUVVVc1EwRkJReXhUUVVGVExFTkJRVU1zUzBGQlN5eERRVUZETEUxQlFVMHNSVUZCUlN4TFFVRkxMRU5CUVVNc1MwRkJTeXhKUVVGSkxFdEJRVXNzUlVGQlJTeEhRVUZITEVWQlFVVTdkMEpCUTNCRUxFdEJRVXNzUTBGQlF5eExRVUZMTEVkQlFVa3NTMEZCSzBJc1EwRkJReXhMUVVGTExFTkJRVU03YjBKQlEzWkVMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU03YjBKQlEwb3NSVUZCUlN4RFFVRkRMRlZCUVZVc1EwRkJReXhMUVVGTExFTkJRVU1zVFVGQlRTeEZRVUZGTEV0QlFVc3NRMEZCUXl4TFFVRlpMRVZCUVVVc1IwRkJSeXhGUVVGRk8zZENRVU51UkN4TFFVRkxMRU5CUVVNc1MwRkJTeXhIUVVGSExFdEJRVXNzUTBGQlF5eExRVUZMTEVOQlFVTTdiMEpCUXpWQ0xFTkJRVU1zUTBGQlF5eERRVUZETzJkQ1FVTlFMRVZCUVVVc1EwRkJReXhQUVVGUExFTkJRVU1zU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4TFFVRkxMRWxCUVVrc1MwRkJTeXhEUVVGRExFbEJRVWtzUlVGQlJTeExRVUZMTEVOQlFVTXNUMEZCVHl4RFFVRkRMRU5CUVVNN1owSkJRekZFTEZWQlFWVXNRMEZCUXl4TlFVRk5MRU5CUVVNc1MwRkJTeXhEUVVGRExFbEJRVWtzUTBGQlF5eERRVUZETzJGQlF5OUNPMUZCUTBnc1EwRkJReXhEUVVGRExFTkJRVU03VVVGRFNDeFBRVUZQTEZWQlFWVXNRMEZCUXp0SlFVTndRaXhEUVVGRE8wbEJSVVFzU1VGQlNTeG5Ra0ZCWjBJN1VVRkRiRUlzVFVGQlRTeGxRVUZsTEVkQlFUaENMRWxCUVVrc1EwRkJReXhoUVVGaExFTkJRVU1zU1VGQlNTeERRVUZETEZkQlFWY3NRMEZCUXl4TFFVRk5MRU5CUVVNc1EwRkJRenRSUVVNdlJpeE5RVUZOTEU5QlFVOHNSMEZCVVN4RlFVRkZMRU5CUVVNN1VVRkRlRUlzVFVGQlRTeERRVUZETEVsQlFVa3NRMEZCUXl4bFFVRmxMRU5CUVVNc1EwRkJReXhQUVVGUExFTkJRVU1zUTBGQlF5eEhRVUZYTEVWQlFVVXNSVUZCUlR0WlFVTnVSQ3hKUVVGTExHVkJRWFZDTEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNc1MwRkJTeXhKUVVGSkxFbEJRVWs3WjBKQlF6ZERMRTlCUVU4c1EwRkJReXhIUVVGSExFTkJRVU1zUjBGQlNTeGxRVUYxUWl4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRExFdEJRVXNzUTBGQlF6dFJRVU4yUkN4RFFVRkRMRU5CUVVNc1EwRkJRenRSUVVOSUxFOUJRVThzVDBGQlR5eERRVUZETzBsQlEycENMRU5CUVVNN1NVRkZSQ3hKUVVGSkxHRkJRV0U3VVVGRFppeFBRVUZQTzFsQlEwd3NZVUZCWVN4RlFVRkZMRWxCUVVrc1EwRkJReXhaUVVGWkxFTkJRVU1zVDBGQlR5eERRVUZETEV0QlFVc3NTVUZCU1N4SlFVRkpPMWxCUTNSRUxGbEJRVmtzUlVGQlJTeEpRVUZKTEVOQlFVTXNXVUZCV1N4RFFVRkRMRTFCUVUwc1EwRkJReXhMUVVGTExFbEJRVWtzUTBGQlF6dFRRVU5zUkN4RFFVRkRPMGxCUTBvc1EwRkJRenRKUVVWTkxGTkJRVk03VVVGRFpDeE5RVUZOTEVkQlFVY3NSMEZCUnl4RlFVRkZMRU5CUVVNc1IwRkJSeXhEUVVGRE8xbEJRMnBDTEVsQlFVa3NRMEZCUXl4VlFVRlZMRU5CUVVNc1NVRkJTVHRaUVVOd1FpeEpRVUZKTEVOQlFVTXNaMEpCUVdkQ08xbEJRM0pDTEVsQlFVa3NRMEZCUXl4elFrRkJjMEk3V1VGRE0wSXNTVUZCU1N4RFFVRkRMSE5DUVVGelFpeERRVUZETEVsQlFVazdXVUZEYUVNc1NVRkJTU3hEUVVGRExGZEJRVmNzUTBGQlF5eEpRVUZKTzFsQlEzSkNMRWxCUVVrc1EwRkJReXhwUWtGQmFVSTdXVUZEZEVJc1NVRkJTU3hEUVVGRExHMUNRVUZ0UWp0WlFVTjRRaXhKUVVGSkxFTkJRVU1zYjBKQlFXOUNMRU5CUVVNc1NVRkJTVHRUUVVNdlFpeEZRVUZGTEVWQlFVTXNTMEZCU3l4RlFVRkZMRVZCUVVNc1VVRkJVU3hGUVVGRkxFOUJRVThzUlVGQlF5eEZRVUZGTEU5QlFVOHNSVUZCUlN4VFFVRlRMRVZCUVVNc1EwRkJReXhEUVVGRE8xRkJRM0pFTEU5QlFVOHNSMEZCUnl4RFFVRkRPMGxCUTJJc1EwRkJRenRKUVVWTkxGTkJRVk03VVVGRFpDeFBRVUZQTzFsQlEwd3NTMEZCU3l4RlFVRkZMRWxCUVVrc1EwRkJReXhWUVVGVkxFTkJRVU1zUzBGQlRUdFpRVU0zUWl4UFFVRlBMRVZCUVVVc1NVRkJTU3hEUVVGRExGbEJRVmtzUTBGQlF5eExRVUZOTzFsQlEycERMRlZCUVZVc1JVRkJSU3hKUVVGSkxFTkJRVU1zVjBGQlZ5eERRVUZETEV0QlFVMDdXVUZEYmtNc2MwSkJRWE5DTEVWQlFVVXNTVUZCU1N4RFFVRkRMR2RDUVVGblFpeERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRMRVZCUVVVc1JVRkJSU3hGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEhGQ1FVRnhRaXhEUVVGRE8xbEJRMjVHTEdWQlFXVXNSVUZCUlN4SlFVRkpMRU5CUVVNc1owSkJRV2RDTEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNc1JVRkJSU3hGUVVGRkxFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNjVUpCUVhGQ0xFTkJRVU1zUzBGQlRTeERRVUZETzFsQlEyNUdMRTlCUVU4c1JVRkJSU3hKUVVGSkxFTkJRVU1zWjBKQlFXZENMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU1zUlVGQlJTeEZRVUZGTEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1RVRkJUU3hKUVVGSkxFTkJRVU1zUTBGQlF6dFpRVU14UkN4UFFVRlBMRVZCUVVVc1JVRkJReXhIUVVGSExFbEJRVWtzUTBGQlF5eG5Ra0ZCWjBJc1JVRkJSU3hIUVVGSExFbEJRVWtzUTBGQlF5eGhRVUZoTzJkQ1FVTjJSQ3h4UWtGQmNVSXNSVUZCUlN4SlFVRkpMRU5CUVVNc1owSkJRV2RDTEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNc1JVRkJSU3hGUVVGRkxFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNOa0pCUVRaQ0xFTkJRVU1zUlVGQlF6dFpRVU0zUml4alFVRmpMRVZCUVVVc1NVRkJTU3hEUVVGRExHMUNRVUZ0UWl4RFFVRkRMRXRCUVVzN1dVRkRPVU1zYVVKQlFXbENMRVZCUVVVc1MwRkJTenRaUVVONFFpeHpRa0ZCYzBJc1JVRkJSU3hKUVVGSkxFTkJRVU1zYjBKQlFXOUNMRU5CUVVNc2MwSkJRWE5DTzFsQlEzaEZMREJDUVVFd1FpeEZRVUZGTEVsQlFVa3NRMEZCUXl4dlFrRkJiMElzUTBGQlF5eEpRVUZKTzFsQlF6RkVMSE5DUVVGelFpeEZRVUZGTEVsQlFVa3NRMEZCUXl4elFrRkJjMElzUTBGQlF5eExRVUZMTzFOQlF6RkVMRU5CUVVNN1NVRkRTaXhEUVVGRE8wTkJRMG83UVVGSFJDeE5RVUZOTEhkQ1FVRjNRanRKUVdkQ01VSXNXVUZCV1N4TlFVRnBRaXhGUVVGRkxHdENRVUU0UXl4RlFVRkZMRmxCUVhOQ08xRkJabkpITEdsRFFVRTBRaXhIUVVGSExFVkJRVVVzUTBGQlF5eEhRVUZITEVOQlFVTXNSVUZCUlN4RFFVRkRMRU5CUVVNN1VVRkxNVU1zYTBOQlFUWkNMRWRCUVZrc1JVRkJSU3hEUVVGRE8xRkJTVFZETEdOQlFWTXNSMEZCWjBJc1JVRkJSU3hEUVVGRExFZEJRVWNzUTBGQlF5eEZRVUZGTEVOQlFVTXNRMEZCUXp0UlFVTndReXh4UWtGQlowSXNSMEZCV1N4SlFVRkpMRU5CUVVNN1VVRkRha01zYVVKQlFWa3NSMEZCTWtJc1JVRkJSU3hEUVVGRE8xRkJRekZETEhWQ1FVRnJRaXhIUVVGWkxFdEJRVXNzUTBGQlF6dFJRVVZ3UXl4WFFVRk5MRWRCUVZjc1EwRkJReXhEUVVGRE8xRkJSV3BDTEVsQlFVa3NRMEZCUXl4WFFVRlhMRWRCUVVjc1JVRkJSU3hEUVVGRExGVkJRVlVzUTBGQlF5eFJRVUZSTEVWQlFVVXNRMEZCUXl4RlFVRkZMRWRCUVVjc1JVRkJSU3hIUVVGSExFbEJRVWtzUTBGQlF5eE5RVUZOTEVkQlFVY3NTVUZCU1N4RFFVRkRMRmRCUVZjc1EwRkJReXhMUVVGTExFbEJRVWtzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN1VVRkRjRWNzU1VGQlNTeERRVUZETEUxQlFVMHNSMEZCUnl4TlFVRk5MRU5CUVVNN1VVRkRja0lzYzBKQlFYTkNPMUZCUTNSQ0xFbEJRVWtzUTBGQlF5eHJRa0ZCYTBJc1IwRkJSeXhyUWtGQmEwSXNRMEZCUXl4SlFVRkpMRU5CUVVNc1EwRkJReXhEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVWQlFVVTdXVUZEZWtRc1NVRkJTU3hEUVVGRExFTkJRVU1zUTBGQlF5eExRVUZMTEVOQlFVTXNUVUZCVFN4TFFVRkxMRU5CUVVNc1NVRkJTU3hEUVVGRExFTkJRVU1zUzBGQlN5eERRVUZETEUxQlFVMHNTMEZCU3l4RFFVRkRMRU5CUVVNc1NVRkJTU3hEUVVGRExFTkJRVU1zUzBGQlN5eERRVUZETEUxQlFVMHNTMEZCU3l4RFFVRkRMRU5CUVVNc1MwRkJTeXhEUVVGRExFMUJRVTA3WjBKQlEzSkdMRTlCUVU4c1EwRkJReXhEUVVGRExFdEJRVXNzUTBGQlF5eE5RVUZOTEVkQlFVY3NRMEZCUXl4RFFVRkRMRXRCUVVzc1EwRkJReXhOUVVGTkxFTkJRVU03V1VGRGVrTXNTVUZCU1N4RFFVRkRMRU5CUVVNc1MwRkJTeXhEUVVGRExFMUJRVTBzUzBGQlN5eERRVUZETEVOQlFVTXNTMEZCU3l4RFFVRkRMRTFCUVUwN1owSkJRMjVETEU5QlFVOHNRMEZCUXl4RFFVRkRMRXRCUVVzc1EwRkJReXhOUVVGTkxFZEJRVWNzUTBGQlF5eERRVUZETEV0QlFVc3NRMEZCUXl4TlFVRk5MRU5CUVVNN1dVRkRla01zU1VGQlNTeERRVUZETEVOQlFVTXNVVUZCVVN4RFFVRkRMRTFCUVUwc1MwRkJTeXhEUVVGRExFbEJRVWtzUTBGQlF5eERRVUZETEZGQlFWRXNRMEZCUXl4TlFVRk5MRXRCUVVzc1EwRkJRenRuUWtGRGNFUXNUMEZCVHl4RFFVRkRMRU5CUVVNc1VVRkJVU3hEUVVGRExFMUJRVTBzUjBGQlJ5eERRVUZETEVOQlFVTXNVVUZCVVN4RFFVRkRMRTFCUVUwc1EwRkJRenRaUVVNdlF5eEpRVUZKTEVOQlFVTXNRMEZCUXl4UlFVRlJMRU5CUVVNc1RVRkJUU3hMUVVGTExFTkJRVU1zUTBGQlF5eFJRVUZSTEVOQlFVTXNUVUZCVFR0blFrRkRla01zVDBGQlR5eERRVUZETEVOQlFVTXNVVUZCVVN4RFFVRkRMRTFCUVUwc1IwRkJSeXhEUVVGRExFTkJRVU1zVVVGQlVTeERRVUZETEUxQlFVMHNRMEZCUXp0WlFVTXZReXhQUVVGUExFTkJRVU1zUTBGQlF5eExRVUZMTEVOQlFVTXNUVUZCVFN4SFFVRkhMRU5CUVVNc1EwRkJReXhMUVVGTExFTkJRVU1zVFVGQlRTeERRVUZETzFGQlEzcERMRU5CUVVNc1EwRkJReXhEUVVGRE8xRkJRMGdzU1VGQlNTeERRVUZETEd0Q1FVRnJRaXhEUVVGRExFOUJRVThzUTBGQlF5eERRVUZETEVOQlFVTXNSVUZCUlN4RlFVRkZPMWxCUTNCRExFbEJRVWtzUTBGQlF5eFpRVUZaTEVOQlFVTXNWMEZCVnl4RFFVRkRMRU5CUVVNc1EwRkJReXhKUVVGSkxFTkJRVU1zUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXl4SlFVRkpMRU5CUVVNN1VVRkRiRVFzUTBGQlF5eERRVUZETEVOQlFVTTdVVUZEU0N4SlFVRkpMRU5CUVVNc01FSkJRVEJDTEVkQlFVY3NSVUZCUlN4RFFVRkRMRmRCUVZjc1EwRkJReXh0UWtGQmJVSXNSVUZEYkVVc1YwRkJWeXhEUVVGRExFbEJRVWtzUTBGQlF5eHJRa0ZCYTBJc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eEpRVUZKTEVOQlFVTXNSVUZCUlN4SlFVRkpMRU5CUVVNc2EwSkJRV3RDTEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNc1JVRkJSU3hGUVVGRkxFVkJRVVVzUTBGQlF5eFhRVUZYTEVOQlFVTXNSVUZCUlN4RFFVRkRMRWxCUVVrc1EwRkJReXhEUVVGRExFVkJRM1pITEVkQlFVY3NSVUZCUlR0WlFVTklMRTFCUVUwc1IwRkJSeXhIUVVGSExFbEJRVWtzUTBGQlF5d3dRa0ZCTUVJc1EwRkJReXhMUVVGTkxFTkJRVU03V1VGRGJrUXNUVUZCVFN4SlFVRkpMRWRCUVVjc1NVRkJTU3hEUVVGRExGbEJRVmtzUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXp0WlFVTndReXhKUVVGSkxFTkJRVU1zTmtKQlFUWkNMRWRCUVVjc1JVRkJSU3hEUVVGRE8xbEJRM2hETEVsQlFVa3NRMEZCUXl4blFrRkJaMElzUjBGQlJ5eEpRVUZKTEVOQlFVTXNUVUZCVFN4RFFVRkRMRTFCUVUwc1IwRkJSeXhEUVVGRExFTkJRVU03V1VGREwwTXNUVUZCVFN4SlFVRkpMRWRCUVVjc1NVRkJTU3hEUVVGRExHdENRVUZyUWl4RFFVRkRMRWxCUVVrc1EwRkJReXhEUVVGRExFVkJRVVVzUlVGQlJTeEZRVUZGTEVOQlFVTXNWMEZCVnl4RFFVRkRMRVZCUVVVc1EwRkJReXhKUVVGSkxFTkJRVU1zUzBGQlN5eEhRVUZITEVOQlFVVXNRMEZCUXp0WlFVTnFSaXhKUVVGSkxFTkJRVU1zZDBKQlFYZENMRU5CUVVNc1NVRkJTU3hEUVVGRExFTkJRVU03V1VGRGNFTXNSVUZCUlN4RFFVRkRMRXRCUVVzc1EwRkJReXhKUVVGSkxFTkJRVU1zTkVKQlFUUkNMRU5CUVVNc1EwRkJRenRaUVVNMVF5eGpRVUZqTEVkQlFVY3NTMEZCU3l4RFFVRkRPMWxCUTNaQ0xFbEJRVWtzUTBGQlF5eEpRVUZKTEVOQlFVTXNaMEpCUVdkQ08yZENRVU40UWl4SlFVRkpMRU5CUVVNc05rSkJRVFpDTEVOQlFVTXNTMEZCU3l4RFFVRkRMRTlCUVU4c1IwRkJSeXhOUVVGTkxFTkJRVU03TzJkQ1FVVXhSQ3hKUVVGSkxFTkJRVU1zTmtKQlFUWkNMRU5CUVVNc1MwRkJTeXhEUVVGRExFOUJRVThzUjBGQlJ5eE5RVUZOTEVOQlFVTTdVVUZET1VRc1EwRkJReXhEUVVOR0xFTkJRVU03VVVGRFJpeEpRVUZKTEVOQlFVTXNNRUpCUVRCQ0xFTkJRVU1zU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4UFFVRlBMRWRCUVVjc1RVRkJUU3hEUVVGRE8xRkJSVFZFTEVsQlFVa3NRMEZCUXl4cFFrRkJhVUlzUTBGQlF5eEpRVUZKTEVOQlFVTXNORUpCUVRSQ0xFVkJRVVVzU1VGQlNTeERRVUZETEd0Q1FVRnJRaXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVsQlFVa3NRMEZCUXp0aFFVTjJSaXhKUVVGSkxFTkJRVU1zUjBGQlJ5eEZRVUZGTEVkQlFVY3NSVUZCUlN4RFFVRkRMRXRCUVVzc1EwRkJReXhKUVVGSkxFTkJRVU1zTkVKQlFUUkNMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETzFGQlJXaEZMRWxCUVVrc1EwRkJReXgzUWtGQmQwSXNRMEZCUXl4SlFVRkpMRU5CUVVNc2EwSkJRV3RDTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJRenRSUVVNeFJDeEpRVUZKTEVOQlFVTXNaMEpCUVdkQ0xFZEJRVWNzU1VGQlNTeERRVUZETEd0Q1FVRnJRaXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVsQlFVa3NRMEZCUXl4TlFVRk5MRU5CUVVNc1RVRkJUU3hIUVVGSExFTkJRVU1zUTBGQlF6dFJRVVV4UlN4SlFVRkpMR05CUVdNc1IwRkJSeXhMUVVGTExFTkJRVU03VVVGRE0wSXNTVUZCU1N4RFFVRkRMRFpDUVVFMlFpeEhRVUZITEVWQlFVVXNRMEZCUXl4TFFVRkxMRU5CUVVNc1VVRkJVU3hEUVVGRExFdEJRVXNzU1VGQlNTeEZRVUZGTzFsQlEyaEZMR05CUVdNc1IwRkJSeXhEUVVGRExHTkJRV01zUTBGQlF6dFpRVU5xUXl4SlFVRkpMR05CUVdNc1JVRkJSVHRuUWtGRGJFSXNUVUZCVFN4SlFVRkpMRU5CUVVNc2FVSkJRV2xDTEVOQlFVTXNTVUZCU1N4RFFVRkRMRFJDUVVFMFFpeEZRVU0xUkN4SlFVRkpMRU5CUVVNc1dVRkJXU3hEUVVGRExFbEJRVWtzUTBGQlF5d3dRa0ZCTUVJc1EwRkJReXhMUVVGTkxFTkJRVU1zUTBGQlF5eERRVUZETzJGQlF6bEVPMmxDUVVGTk8yZENRVU5NTEVWQlFVVXNRMEZCUXl4TFFVRkxMRU5CUVVNc1NVRkJTU3hEUVVGRExEUkNRVUUwUWl4RFFVRkRMRU5CUVVNN1lVRkROME03VVVGRFNDeERRVUZETEVWQlFVVXNjVU5CUVhGRExFTkJRVU1zUTBGQlF6dFJRVVV4UXl4SlFVRkpMRU5CUVVNc01FSkJRVEJDTEVOQlFVTXNTVUZCU1N4RFFVRkRMRk5CUVZNc1EwRkJReXhIUVVGSExFTkJRVU1zYVVOQlFXbERMRU5CUVVNc1EwRkJRenRSUVVOMFJpeEpRVUZKTEVOQlFVTXNNRUpCUVRCQ0xFTkJRVU1zU1VGQlNTeERRVUZETEU5QlFVOHNRMEZCUXl4SlFVRkpMRU5CUVVNc05rSkJRVFpDTEVOQlFVTXNRMEZCUXp0UlFVVnFSaXhKUVVGSkxFTkJRVU1zU1VGQlNTeERRVUZETEdkQ1FVRm5RanRaUVVONFFpeEpRVUZKTEVOQlFVTXNOa0pCUVRaQ0xFTkJRVU1zUzBGQlN5eERRVUZETEU5QlFVOHNSMEZCUnl4TlFVRk5MRU5CUVVNN08xbEJSVEZFTEVsQlFVa3NRMEZCUXl3MlFrRkJOa0lzUTBGQlF5eExRVUZMTEVOQlFVTXNUMEZCVHl4SFFVRkhMRTFCUVUwc1EwRkJRenRSUVVVMVJDeEpRVUZKTEVOQlFVTXNhMEpCUVd0Q0xFZEJRVWNzUTBGQlF5eERRVUZETEd0Q1FVRnJRaXhEUVVGRExFMUJRVTBzUjBGQlJ5eERRVUZETEVsQlFVa3NRMEZCUXl4SlFVRkpMRU5CUVVNc1owSkJRV2RDTzFsQlEyNUdMR3RDUVVGclFpeERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMR2xDUVVGcFFpeERRVUZETEUxQlFVMHNSMEZCUnl4RFFVRkRMRU5CUVVNc1EwRkJRenRSUVVWd1JDeE5RVUZOTEZkQlFWY3NSMEZCUnl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFbEJRVWtzUTBGQlF5eE5RVUZOTEVOQlFVTXNTVUZCU1N4RlFVRkZMRVZCUVVNc1QwRkJUeXhGUVVGRkxEWkRRVUUyUXl4RlFVRkRMRU5CUVVNc1EwRkJRenRSUVVOMFJ5eE5RVUZOTEdGQlFXRXNSMEZCUnp0WlFVTndRaXhYUVVGWExFVkJRVVVzU1VGQlNTeERRVUZETERCQ1FVRXdRaXhEUVVGRExFbEJRVWs3V1VGRGFrUXNTVUZCU1N4RFFVRkRMSGxDUVVGNVFpeEZRVUZGTEVsQlFVa3NRMEZCUXl4WFFVRlhMRU5CUVVNc1NVRkJTVHRUUVVOMFJDeERRVUZETzFGQlEwWXNhMEpCUVd0Q08xRkJRMnhDTEVWQlFVVXNRMEZCUXl4UFFVRlBMRU5CUVVNc1NVRkJTU3hEUVVGRExGZEJRVmNzUlVGQlJTeEpRVUZKTEVOQlFVTXNUVUZCVFN4RFFVRkRMRWxCUVVrc1EwRkJReXhEUVVGRE8xRkJSUzlETEdGQlFXRXNRMEZCUXl4UFFVRlBMRU5CUVVNc1EwRkJReXhGUVVGRkxFVkJRVVVzUTBGQlF5eEZRVUZGTEVWQlFVVTdXVUZET1VJc1JVRkJSU3hEUVVGRExFdEJRVXNzUTBGQlF5eExRVUZMTEVkQlFVY3NSMEZCUnl4WlFVRlpMRU5CUVVNc1EwRkJReXhEUVVGRExFZEJRVWNzUTBGQlF6dFJRVU42UXl4RFFVRkRMRU5CUVVNc1EwRkJRenRSUVVWSUxHRkJRV0U3VVVGRFlpeGhRVUZoTEVOQlFVTXNUMEZCVHl4RFFVRkRMRU5CUVVNc1JVRkJSU3hGUVVGRkxFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNVMEZCVXl4RFFVRkRMRWRCUVVjc1EwRkJReXd5UTBGQk1rTXNRMEZCUXl4RFFVRkRMRU5CUVVNN1VVRkZOMFlzVFVGQlRTeHJRa0ZCYTBJc1IwRkJSeXhGUVVGRkxFTkJRVU1zU1VGQlNTeERRVU5vUXl4aFFVRmhMRVZCUVVVc1JVRkJReXhQUVVGUExFVkJRVVVzY1VOQlFYRkRMRVZCUVVNc1EwRkRhRVVzUTBGQlF6dFJRVVZHTEVsQlFVa3NRMEZCUXl4WlFVRlpMRWRCUVVjc1JVRkJSU3hEUVVGRExFbEJRVWtzUTBGQlF5eEZRVUZGTEVOQlFVTXNRMEZCUXp0UlFVTm9ReXhKUVVGSkxFTkJRVU1zVTBGQlV5eERRVUZETEZkQlFWY3NRMEZCUXl4clFrRkJhMElzUTBGQlF5eERRVUZETzFGQlF5OURMRWxCUVVrc1EwRkJReXhUUVVGVExFTkJRVU1zVjBGQlZ5eERRVUZETEVsQlFVa3NRMEZCUXl3MFFrRkJORUlzUTBGQlF5eERRVUZETzFGQlF6bEVMRWxCUVVrc1EwRkJReXhaUVVGWkxFTkJRVU1zVjBGQlZ5eERRVUZETEVsQlFVa3NRMEZCUXl4VFFVRlRMRU5CUVVNc1EwRkJRenRKUVVOb1JDeERRVUZETzBsQlJVUXNkMEpCUVhkQ0xFTkJRVU1zVDBGQmFVTTdVVUZEZUVRc1RVRkJUU3hMUVVGTExFZEJRVWNzUlVGQlJTeERRVUZETEZkQlFWY3NRMEZCUXl4dFFrRkJiVUlzUlVGQlJTeFBRVUZQTEVOQlFVTXNhVUpCUVdsQ0xFTkJRVU1zUTBGQlF5eERRVUZETEVWQlFVVXNUMEZCVHl4RFFVRkRMR2xDUVVGcFFpeERRVUZETEVOQlFVTTdVVUZETTBjc1NVRkJTU3hEUVVGRExFbEJRVWtzUTBGQlF5eDVRa0ZCZVVJc1JVRkJSVHRaUVVOdVF5eEpRVUZKTEVOQlFVTXNlVUpCUVhsQ0xFZEJRVWNzUzBGQlN5eERRVUZETEVsQlFVa3NRMEZCUXp0WlFVTTFReXhKUVVGSkxFTkJRVU1zY1VKQlFYRkNMRWRCUVVjc1MwRkJTeXhEUVVGRE8xTkJRM0JETzJGQlFVMDdXVUZEVEN4RlFVRkZMRU5CUVVNc1MwRkJTeXhEUVVGRExFbEJRVWtzUTBGQlF5eDVRa0ZCZVVJc1EwRkJReXhEUVVGRE8xbEJRM3BETEVsQlFVa3NRMEZCUXl4eFFrRkJjVUlzUjBGQlJ5eExRVUZMTEVOQlFVTTdXVUZEYmtNc1MwRkJTeXhEUVVGRExFbEJRVWtzUTBGQlF5eEpRVUZKTEVOQlFVTXNjVUpCUVhGQ0xFTkJRVU1zU1VGQlNTeERRVUZETEZGQlFWRXNRMEZCUXp0cFFrRkRha1FzVDBGQlR5eERRVUZETEVOQlFVTXNSVUZCUlN4RlFVRkZMRVZCUVVVc1EwRkJReXhKUVVGSkxFTkJRVU1zZVVKQlFYbENMRU5CUVVNc1YwRkJWeXhEUVVGRExFVkJRVVVzUTBGQlF5eERRVUZETEVOQlFVTTdVMEZEY0VVN1NVRkRTQ3hEUVVGRE8wbEJSVVFzU1VGQlNTeHhRa0ZCY1VJN1VVRkRka0lzVDBGQlR5eEpRVUZKTEVOQlFVTXNXVUZCV1N4RFFVRkRMRWxCUVVrc1EwRkJReXd3UWtGQk1FSXNRMEZCUXl4TFFVRk5MRU5CUVVNc1EwRkJRenRKUVVOdVJTeERRVUZETzBsQlEwUXNTMEZCU3l4RFFVRkRMR2xDUVVGcFFpeERRVUZETEZWQlFYVkNMRVZCUVVVc1NVRkJZVHRSUVVNMVJDeEZRVUZGTEVOQlFVTXNTMEZCU3l4RFFVRkRMRlZCUVZVc1EwRkJReXhEUVVGRE8xRkJRM0pDTEVsQlFVa3NTVUZCU1N4RFFVRkRMRTFCUVUwc1EwRkJReXhOUVVGTkxFZEJRVWNzUTBGQlF6dFpRVU40UWl4UFFVRlBMRVZCUVVVc1EwRkJReXhIUVVGSExFVkJRVVVzUTBGQlF6dFJRVU5zUWl4TlFVRk5MRVZCUVVVc1IwRkJSeXhKUVVGSkxFTkJRVU1zVDBGQlR5eEZRVUZGTEVOQlFVTTdVVUZETVVJc1RVRkJUU3hOUVVGTkxFZEJRVWNzVFVGQlRTeEZRVUZGTEVOQlFVTXNWMEZCVnl4RFFVRkRMRVZCUVVVc1EwRkJReXhIUVVGSExFVkJRVVVzUTBGQlF5eERRVUZETzFGQlF6bERMRXRCUVVzc1NVRkJTU3hEUVVGRExFZEJRVWNzUTBGQlF5eEZRVUZGTEVOQlFVTXNSMEZCUnl4SlFVRkpMRU5CUVVNc1RVRkJUU3hEUVVGRExFMUJRVTBzUlVGQlJTeERRVUZETEVWQlFVVXNSVUZCUlR0WlFVTXpReXhOUVVGTkxFMUJRVTBzUjBGQlJ5eEpRVUZKTEVOQlFVTXNUVUZCVFN4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE8xbEJRemxDTEUxQlFVMHNSMEZCUnl4SFFVRkhMRWxCUVVrc1EwRkJReXcyUWtGQk5rSXNRMEZCUXl4TlFVRk5MRU5CUVVNc1NVRkJTU3hEUVVGRE8yZENRVU4yUkN4RlFVRkZMRU5CUVVNc1YwRkJWeXhEUVVGRExFbEJRVWtzUTBGQlF5eE5RVUZOTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1NVRkJTU3hEUVVGRExFTkJRVU1zUzBGQlN5eEpRVUZKTEUxQlFVMHNRMEZCUXl4WlFVRlpMRU5CUVVNN1dVRkRja1VzU1VGQlNTeEhRVUZITzJkQ1FVTk1MRWxCUVVrc1EwRkJReXcyUWtGQk5rSXNRMEZCUXl4TlFVRk5MRU5CUVVNc1NVRkJTU3hEUVVGRExFZEJRVWNzUjBGQlJ5eERRVUZETzFsQlEzaEVMRTFCUVUwc1MwRkJTeXhIUVVGSExFMUJRVTBzUTBGQlF5eEpRVUZKTEVOQlFVTXNRMEZCUXl4SFFVRkhMRVZCUVVVc1JVRkJSU3hEUVVGRExFZEJRVWNzUTBGQlF5eFJRVUZSTEVOQlFVTXNTVUZCU1N4TFFVRkxMRTFCUVUwc1EwRkJReXhKUVVGSkxFTkJRVU1zUTBGQlF6dFpRVU4wUlN4SlFVRkpMRU5CUVVNc1MwRkJTenRuUWtGRFVpeFRRVUZUTzFsQlExZ3NTVUZCU1N4SlFVRkpMRU5CUVVNc05rSkJRVFpDTEVOQlFVTXNUVUZCVFN4RFFVRkRMRWxCUVVrc1EwRkJReXhMUVVGTExFbEJRVWs3WjBKQlEzaEVMRWxCUVVrc1EwRkJReXcyUWtGQk5rSXNRMEZCUXl4TlFVRk5MRU5CUVVNc1NVRkJTU3hEUVVGRExFdEJRVXNzVTBGQlV6dG5Ra0ZETDBRc1MwRkJTeXhEUVVGRExFdEJRVXNzUjBGQlJ5eEpRVUZKTEVOQlFVTXNOa0pCUVRaQ0xFTkJRVU1zVFVGQlRTeERRVUZETEVsQlFVa3NRMEZCUXl4RFFVRkRPMWxCUTJoRkxFdEJRVXNzUTBGQlF5eFRRVUZUTEVOQlFVTXNSMEZCUnl4RlFVRkZMRWRCUVVjc1NVRkJTU3hEUVVGRExEWkNRVUUyUWl4RFFVRkRMRTFCUVUwc1EwRkJReXhKUVVGSkxFTkJRVU1zUjBGQlJ5eExRVUZMTEVOQlFVTXNTMEZCU3l4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU03V1VGRE1VWXNWVUZCVlN4RFFVRkRMRTFCUVUwc1EwRkJReXhMUVVGTExFTkJRVU1zU1VGQlNTeERRVUZETEVOQlFVTTdVMEZETDBJN1VVRkRSQ3hWUVVGVkxFTkJRVU1zUzBGQlN5eERRVUZETEZsQlFWa3NSMEZCUnl4TlFVRk5MRU5CUVVNN1VVRkRka01zVDBGQlR5eFZRVUZWTEVOQlFVTTdTVUZEY0VJc1EwRkJRenREUVVOS08wRkJSVVFzVTBGQlV5eFhRVUZYTEVOQlFVTXNTVUZCWVR0SlFVTm9ReXhQUVVGUExFbEJRVWtzUTBGQlF5eFpRVUZaTEVsQlFVa3NTVUZCU1N4RFFVRkRMRWxCUVVrc1EwRkJRenRCUVVONFF5eERRVUZETzBGQlJVUXNUVUZCVFN4M1FrRkJkMEk3U1VGUk5VSTdVVUZRUVN3clFrRkJNRUlzUjBGQmIwTXNSVUZCUlN4RFFVRkRPMUZCUlhwRUxGVkJRVXNzUjBGQlowSXNSVUZCUlN4RFFVRkRMRWRCUVVjc1EwRkJReXhGUVVGRkxFTkJRVU1zUTBGQlF6dFJRVU5vUXl4M1FrRkJiVUlzUjBGQldTeEZRVUZGTEVOQlFVTTdVVUZEYkVNc2FVSkJRVmtzUjBGQlowSXNSVUZCUlN4RFFVRkRMRWRCUVVjc1EwRkJReXhGUVVGRkxFTkJRVU1zUTBGQlF6dFJRVVYyUXl4dlFrRkJaU3hIUVVGWkxFdEJRVXNzUTBGQlF6dFJRVVYyUXl4SlFVRkpMRU5CUVVNc1lVRkJZU3hIUVVGSExFVkJRVVVzUTBGQlF5eExRVUZMTEVOQlFVTXNVVUZCVVN4RFFVRkRMRXRCUVVzc1NVRkJTU3hGUVVGRk8xbEJRMmhFTEVsQlFVa3NRMEZCUXl4bFFVRmxMRWRCUVVjc1EwRkJReXhKUVVGSkxFTkJRVU1zWlVGQlpTeERRVUZETzFsQlF6ZERMRWxCUVVrc1NVRkJTU3hEUVVGRExHVkJRV1U3WjBKQlEzUkNMRWxCUVVrc1EwRkJReXhaUVVGWkxFTkJRVU1zUzBGQlN5eERRVUZETEU5QlFVOHNSMEZCUnl4UFFVRlBMRU5CUVVNN08yZENRVVV4UXl4SlFVRkpMRU5CUVVNc1dVRkJXU3hEUVVGRExFdEJRVXNzUTBGQlF5eFBRVUZQTEVkQlFVY3NUVUZCVFN4RFFVRkRPMUZCUXpkRExFTkJRVU1zUTBGQlF5eERRVUZETzFGQlEwZ3NTVUZCU1N4RFFVRkRMRmxCUVZrc1EwRkJReXhMUVVGTExFTkJRVU1zVDBGQlR5eEhRVUZITEUxQlFVMHNRMEZCUXp0UlFVVjZReXhOUVVGTkxHMUNRVUZ0UWl4SFFVRkhMRVZCUVVVc1EwRkJReXhKUVVGSkxFTkJRVU1zU1VGQlNTeERRVUZETEVWQlFVTXNTVUZCU1N4RlFVRkZMRU5CUVVNc2JVTkJRVzFETEVOQlFVTXNSVUZCUXl4RFFVRkRPMkZCUTNCR0xFMUJRVTBzUTBGQlF5eERRVUZETEVOQlFVTXNSVUZCUlN4RlFVRkZMRU5CUVVNc1EwRkJReXhEUVVGRExFMUJRVTBzUTBGQlF5eE5RVUZOTEVsQlFVa3NRMEZCUXl4RFFVRkRMRU5CUVVNN1VVRkRka01zYlVKQlFXMUNMRU5CUVVNc1QwRkJUeXhEUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZGTEVWQlFVVTdXVUZEYUVNc1RVRkJUU3hKUVVGSkxFZEJRVWNzUTBGQlF5eERRVUZETEZsQlFWa3NTVUZCU1N4RFFVRkRMRU5CUVVNc1NVRkJTU3hEUVVGRE8xbEJRM1JETEVsQlFVa3NRMEZCUXl3d1FrRkJNRUlzUTBGQlF5eEpRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNN1VVRkROVU1zUTBGQlF5eERRVUZETEVOQlFVTTdVVUZEU0N4SlFVRkpMRU5CUVVNc01FSkJRVEJDTEVOQlFVTXNUVUZCVFN4RFFVRkRMRWRCUVVjc1NVRkJTU3hEUVVGRE8xRkJSUzlETEUxQlFVMHNlVUpCUVhsQ0xFZEJRVWNzVFVGQlRTeERRVUZETEVsQlFVa3NRMEZCUXl4SlFVRkpMRU5CUVVNc01FSkJRVEJDTEVOQlFVTXNRMEZCUXl4SlFVRkpMRU5CUVVNc1EwRkJReXhGUVVGRkxFVkJRVVVzUlVGQlJTeERRVU42Uml4RFFVRkRMRU5CUVVNc1NVRkJTU3hEUVVGRExEQkNRVUV3UWl4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFOUJRVThzUlVGQlJTeERRVUZETERSRFFVRTBReXhEUVVGRExFTkJRVU1zU1VGQlNTeE5RVUZOTEVOQlFVTTdVVUZETlVjc1NVRkJTU3hEUVVGRExESkNRVUV5UWp0WlFVTTVRaXhGUVVGRkxFTkJRVU1zVjBGQlZ5eERRVUZETEdkQ1FVRm5RaXhGUVVGRkxIbENRVUY1UWl4RlFVTjRSQ3hOUVVGTkxFTkJRVU1zU1VGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl3d1FrRkJNRUlzUTBGQlF5eEZRVUZGTEV0QlFVc3NTVUZCU1N4RlFVRkZMRWRCUVVjc1RVRkJUU3hKUVVGSkxFTkJRVU1zYVVKQlFXbENMRVZCUVVVc1EwRkJReXhEUVVGRExFTkJRVU1zUlVGRE4wWXNSVUZCUXl4UlFVRlJMRVZCUVVVc1MwRkJTeXhGUVVGRExFTkJRVU1zUTBGQlF6dFJRVU4yUWl4SlFVRkpMRU5CUVVNc2FVSkJRV2xDTEVWQlFVVXNRMEZCUXp0UlFVTjZRaXhKUVVGSkxFTkJRVU1zTWtKQlFUSkNMRU5CUVVNc1VVRkJVU3hIUVVGSExFdEJRVXNzUTBGQlF6dFJRVU5zUkN4SlFVRkpMRU5CUVVNc01rSkJRVEpDTEVOQlFVTXNVMEZCVXl4RFFVRkRMRWRCUVVjc1EwRkJReXhwUTBGQmFVTXNRMEZCUXl4RFFVRkRPMUZCUTJ4R0xFbEJRVWtzUTBGQlF5d3lRa0ZCTWtJc1EwRkJReXhKUVVGSkxFTkJRVU1zVDBGQlR5eERRVUZETEVsQlFVa3NRMEZCUXl4aFFVRmhMRU5CUVVNc1EwRkJRenRSUVVOc1JTeEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRmRCUVZjc1EwRkJReXhKUVVGSkxFTkJRVU1zTWtKQlFUSkNMRU5CUVVNc1NVRkJTU3hEUVVGRExFTkJRVU03VVVGRE9VUXNTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhYUVVGWExFTkJRVU1zU1VGQlNTeERRVUZETEZsQlFWa3NRMEZCUXl4RFFVRkRPMGxCUXpWRExFTkJRVU03U1VGRlJDeEpRVUZKTEhOQ1FVRnpRanRSUVVONFFpeFBRVUZQTEVsQlFVa3NRMEZCUXl3eVFrRkJNa0lzUTBGQlF5eExRVUZMTEVOQlFVTXNRMEZCUXp0WlFVTTNReXhKUVVGSkxFTkJRVU1zTUVKQlFUQkNMRU5CUVVNc1NVRkJTU3hEUVVGRExESkNRVUV5UWl4RFFVRkRMRXRCUVVzc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eEpRVUZKTEVOQlFVTTdTVUZEYmtZc1EwRkJRenRKUVVWRUxFdEJRVXNzUTBGQlF5eHBRa0ZCYVVJN1VVRkRja0lzVFVGQlRTeEpRVUZKTEVkQlFVY3NTVUZCU1N4RFFVRkRMSE5DUVVGelFpeERRVUZETzFGQlEzcERMRVZCUVVVc1EwRkJReXhMUVVGTExFTkJRVU1zU1VGQlNTeERRVUZETEZsQlFWa3NRMEZCUXl4RFFVRkRPMUZCUXpWQ0xFbEJRVWtzUTBGQlF5eHRRa0ZCYlVJc1IwRkJSeXhGUVVGRkxFTkJRVU03VVVGRE9VSXNTVUZCU1N4RFFVRkRMRWxCUVVrc1NVRkJTU3hKUVVGSkxFTkJRVU1zVFVGQlRTeERRVUZETEUxQlFVMHNSMEZCUnl4RFFVRkRMRVZCUVVVN1dVRkRia01zU1VGQlNTeERRVUZETEdGQlFXRXNRMEZCUXl4TFFVRkxMRU5CUVVNc1QwRkJUeXhIUVVGSExFMUJRVTBzUTBGQlF6dFpRVU14UXl4UFFVRlBPMU5CUTFJN1VVRkJRU3hEUVVGRE8xRkJRMFlzU1VGQlNTeERRVUZETEdGQlFXRXNRMEZCUXl4TFFVRkxMRU5CUVVNc1QwRkJUeXhIUVVGSExFMUJRVTBzUTBGQlF6dFJRVU14UXl4TlFVRk5MRVZCUVVVc1IwRkJSeXhKUVVGSkxFTkJRVU1zVDBGQlR5eEZRVUZGTEVOQlFVTTdVVUZETVVJc1RVRkJUU3hOUVVGTkxFZEJRVWNzVFVGQlRTeEZRVUZGTEVOQlFVTXNWMEZCVnl4RFFVRkRMRVZCUVVVc1EwRkJReXhIUVVGSExFVkJRVVVzUTBGQlF5eERRVUZETzFGQlF6bERMRXRCUVVzc1NVRkJTU3hEUVVGRExFZEJRVWNzUTBGQlF5eEZRVUZGTEVOQlFVTXNSMEZCUnl4SlFVRkpMRU5CUVVNc1RVRkJUU3hEUVVGRExFMUJRVTBzUlVGQlJTeERRVUZETEVWQlFVVXNSVUZCUlR0WlFVTXpReXhOUVVGTkxFMUJRVTBzUjBGQlJ5eEpRVUZKTEVOQlFVTXNUVUZCVFN4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE8xbEJRemxDTEUxQlFVMHNSMEZCUnl4SFFVRkhMRWxCUVVrc1EwRkJReXh0UWtGQmJVSXNRMEZCUXl4TlFVRk5MRU5CUVVNc1NVRkJTU3hEUVVGRE8yZENRVU12UXl4RlFVRkZMRU5CUVVNc1YwRkJWeXhEUVVGRExFbEJRVWtzUTBGQlF5eE5RVUZOTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1NVRkJTU3hEUVVGRExFTkJRVU1zUzBGQlN5eEpRVUZKTEUxQlFVMHNRMEZCUXl4WlFVRlpMRU5CUVVNN1dVRkRia1VzU1VGQlNTeEhRVUZITzJkQ1FVTk1MRWxCUVVrc1EwRkJReXh0UWtGQmJVSXNRMEZCUXl4TlFVRk5MRU5CUVVNc1NVRkJTU3hEUVVGRExFZEJRVWNzUjBGQlJ5eERRVUZETzFsQlF6bERMRTFCUVUwc1MwRkJTeXhIUVVGSExFMUJRVTBzUTBGQlF5eEpRVUZKTEVOQlFVTXNRMEZCUXl4SFFVRkhMRVZCUVVVc1JVRkJSU3hEUVVGRExFZEJRVWNzUTBGQlF5eFJRVUZSTEVOQlFVTXNTVUZCU1N4TFFVRkxMRTFCUVUwc1EwRkJReXhKUVVGSkxFTkJRVU1zUTBGQlF6dFpRVU4wUlN4SlFVRkpMRU5CUVVNc1MwRkJTenRuUWtGRFVpeFRRVUZUTzFsQlExZ3NTMEZCU3l4RFFVRkRMRk5CUVZNc1EwRkJReXhIUVVGSExFVkJRVVVzUjBGQlJ5eEpRVUZKTEVOQlFVTXNiVUpCUVcxQ0xFTkJRVU1zVFVGQlRTeERRVUZETEVsQlFVa3NRMEZCUXl4SFFVRkhMRXRCUVVzc1EwRkJReXhMUVVGTExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXp0WlFVTm9SaXhKUVVGSkxFTkJRVU1zV1VGQldTeERRVUZETEUxQlFVMHNRMEZCUXl4TFFVRkxMRU5CUVVNc1NVRkJTU3hEUVVGRExFTkJRVU03VTBGRGRFTTdTVUZEU0N4RFFVRkRPMGxCUlVRc1NVRkJTU3hKUVVGSk8xRkJRMDRzVDBGQlR5eEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRPMGxCUTNCQ0xFTkJRVU03U1VGRlJDeEpRVUZKTEVsQlFVazdVVUZEVGl4UFFVRlBMRWxCUVVrc1EwRkJReXh0UWtGQmJVSXNRMEZCUXp0SlFVTnNReXhEUVVGRE8wTkJRMFlpTENKemIzVnlZMlZ6UTI5dWRHVnVkQ0k2V3lKcGJYQnZjblFnS2lCaGN5Qm5jbTlySUdaeWIyMGdKMlJoZEdGbmNtOXJMV0Z3YVM5bmNtOXJKenRjYm1sdGNHOXlkQ0FxSUdGeklIVnBJR1p5YjIwZ0oyUmhkR0ZuY205ckxXRndhUzkxYVNjN1hHNXBiWEJ2Y25RZ0tpQmhjeUJFUnlCbWNtOXRJQ2RrWVhSaFozSnZheTFoY0drdlpHY25PMXh1YVcxd2IzSjBJSHRFYVcxU1pXUjFZM1JwYjI1TlpYUm9iMlJ6ZlNCbWNtOXRJQ2N1TDNSNWNHVnpKenRjYm1sdGNHOXlkQ0I3UkdsdFVtVmtkV04wYVc5dVJXUnBkRzl5VDNCMGFXOXVjeXdnUkVKVFkyRnVUM0IwYVc5dWMzMGdabkp2YlNBbkxpNHZablZ1WTNScGIyNUZaR2wwYjNKekwyUnBiV1Z1YzJsdmJtRnNhWFI1TFhKbFpIVmpkR2x2YmkxbFpHbDBiM0luTzF4dWFXMXdiM0owSUh0SlJFSlRZMkZ1VDNCMGFXOXVjMzBnWm5KdmJTQW5RR1JoZEdGbmNtOXJMV3hwWW5KaGNtbGxjeTl0WVhSb0p6dGNibWx0Y0c5eWRDQjdUM0IwYVc5dWMzMGdabkp2YlNBblFHUmhkR0ZuY205ckxXeHBZbkpoY21sbGN5OTFkR2xzY3k5emNtTXZkSGx3WlMxa1pXTnNZWEpoZEdsdmJuTW5PMXh1YVcxd2IzSjBJSHRFU1UxZlVrVkVYMFJGUmtGVlRGUmZVRTlUVkZCU1QwTkZVMU5KVGtkZlJsVk9RMVJKVDA1ZlRVVlVRU3dnUkVsTlgxSkZSRjlRVDFOVVVGSlBRMFZUVTBsT1IxOUdWVTVEVkVsUFRsOVVRVWNzWEc0Z0lFUkpUVjlTUlVSZlVGSkZVRkpQUTBWVFUwbE9SMTlHVlU1RFZFbFBUbDlVUVVjc0lGTlZVRkJQVWxSRlJGOUVTVk5VUVU1RFJWOUdWVTVEVkVsUFRsTmZWRUZITEZ4dUlDQlRWVkJRVDFKVVJVUmZVMFZOVkZsUVJWTmZWRUZITENCVFZWQlFUMUpVUlVSZlZGbFFSVk5mVkVGSExDQlRWVkJRVDFKVVJVUmZWVTVKVkZOZlZFRkhmU0JtY205dElDY3VMaTltZFc1amRHbHZia1ZrYVhSdmNuTXZZMjl1YzNSekp6dGNibWx0Y0c5eWRDQjdSR2x6ZEdGdVkyVkJaMmR5WldkaGRHbHZiazFsZEdodlpITjlJR1p5YjIwZ0p5NHVMMlJwYzNSaGJtTmxMVzFoZEhKcGVDOTBlWEJsY3ljN1hHNXBiWEJ2Y25RZ2UwbEVhVzFTWldSMVkzUnBiMjVRWVhKaGJTd2dTVlJUVGtWUGNIUnBiMjV6TENCSlZVMUJVRTl3ZEdsdmJuTjlJR1p5YjIwZ0p5NHZiWFZzZEdrdFkyOXNkVzF1TFdScGJTMXlaV1IxWTJWeUp6dGNibWx0Y0c5eWRDQjdVM1ZpYW1WamRIMGdabkp2YlNBbmNuaHFjeWM3WEc1cGJYQnZjblFnSnk0dUx5NHVMMk56Y3k5emRIbHNaWE11WTNOekp6dGNibWx0Y0c5eWRDQjdaMlYwUjFCVlFXUmhjSFJsY2tSbGMyTnlhWEIwYVc5dWZTQm1jbTl0SUNkQVpHRjBZV2R5YjJzdGJHbGljbUZ5YVdWekwyMWhkR2d2YzNKakwzZGxZa2RRVlM5blpYUkhVRlZFWlhacFkyVW5PMXh1WEc1bGVIQnZjblFnWTJ4aGMzTWdWVTFCVUU5d2RHbHZibk1nZTF4dUlDQnNaV0Z5Ym1sdVoxSmhkR1U2SUVsRWFXMVNaV1IxWTNScGIyNVFZWEpoYlNBOVhHNGdJSHQxYVU1aGJXVTZJQ2RNWldGeWJtbHVhV2NnY21GMFpTY3NJSFpoYkhWbE9pQXhMQ0IwYjI5c2RHbHdPaUFuVkdobElHbHVhWFJwWVd3Z2JHVmhjbTVwYm1jZ2NtRjBaU0JtYjNJZ2RHaGxJR1Z0WW1Wa1pHbHVaeUJ2Y0hScGJXbDZZWFJwYjI0bmZUdGNiaUFnTHk4Z2JrTnZiWEJ2Ym1WdWRITTZJRWxFYVcxU1pXUjFZM1JwYjI1UVlYSmhiU0E5WEc0Z0lDOHZJSHQxYVU1aGJXVTZJQ2REYjIxd2IyNWxiblJ6Snl3Z2RtRnNkV1U2SURJc0lIUnZiMngwYVhBNklDZFVhR1VnYm5WdFltVnlJRzltSUdOdmJYQnZibVZ1ZEhNZ0tHUnBiV1Z1YzJsdmJuTXBJSFJ2SUhCeWIycGxZM1FnZEdobElHUmhkR0VnZEc4bmZUdGNiaUFnYmtWd2IyTm9jem9nU1VScGJWSmxaSFZqZEdsdmJsQmhjbUZ0SUQxY2JpQWdJQ0I3ZFdsT1lXMWxPaUFuUlhCdlkyaHpKeXdnZG1Gc2RXVTZJREFzWEc0Z0lDQWdJQ0IwYjI5c2RHbHdPaUFuVkdobElHNTFiV0psY2lCdlppQmxjRzlqYUhNZ2RHOGdiM0IwYVcxcGVtVWdaVzFpWldSa2FXNW5jeUIyYVdFZ1UwZEVMaUJEYjIxd2RYUmxaQ0JoZFhSdmJXRjBhV05oYkd4NUlHbG1JSE5sZENCMGJ5QXdKMzA3WEc0Z0lHNU9aV2xuYUdKdmNuTTZJRWxFYVcxU1pXUjFZM1JwYjI1UVlYSmhiU0E5WEc0Z0lIdDFhVTVoYldVNklDZE9aV2xuYUdKdmNuTW5MQ0IyWVd4MVpUb2dNVFVzSUhSdmIyeDBhWEE2SUNkVWFHVWdiblZ0WW1WeUlHOW1JRzVsWVhKbGMzUWdibVZwWjJoaWIzSnpJSFJ2SUdOdmJuTjBjblZqZENCMGFHVWdablY2ZW5rZ2JXRnVhV1p2YkdRbmZUdGNiaUFnYzNCeVpXRmtPaUJKUkdsdFVtVmtkV04wYVc5dVVHRnlZVzBnUFZ4dUlDQjdkV2xPWVcxbE9pQW5VM0J5WldGa0p5d2dkbUZzZFdVNklERXNYRzRnSUNBZ2RHOXZiSFJwY0RwY2JpQWdJQ0JnVkdobElHVm1abVZqZEdsMlpTQnpZMkZzWlNCdlppQmxiV0psWkdSbFpDQndiMmx1ZEhNc0lIVnpaV1FnZDJsMGFDQnRhVzRnWkdsemRHRnVZMlVnZEc4Z1kyOXVkSEp2YkNCY2JpQWdJQ0IwYUdVZ1kyeDFiWEJsWkM5a2FYTndaWEp6WldRZ2JtRjBkWEpsSUc5bUlIUm9aU0JsYldKbFpHUnBibWRnZlR0Y2JpQWdiV2x1UkdsemREb2dTVVJwYlZKbFpIVmpkR2x2YmxCaGNtRnRJRDFjYmlBZ2UzVnBUbUZ0WlRvZ0owMXBiaUJrYVhOMFlXNWpaU2NzSUhaaGJIVmxPaUF3TGpFc1hHNGdJQ0FnZEc5dmJIUnBjRG9nWUZSb1pTQmxabVpsWTNScGRtVWdiV2x1YVcxMWJTQmthWE4wWVc1alpTQmlaWFIzWldWdUlHVnRZbVZrWkdWa0lIQnZhVzUwY3l3Z1hHNGdJSFZ6WldRZ2QybDBhQ0J6Y0hKbFlXUWdkRzhnWTI5dWRISnZiQ0IwYUdVZ1kyeDFiWEJsWkM5a2FYTndaWEp6WldRZ2JtRjBkWEpsSUc5bUlIUm9aU0JsYldKbFpHUnBibWRnZlR0Y2JpQWdjbUZ1Wkc5dFUyVmxaRG9nU1VScGJWSmxaSFZqZEdsdmJsQmhjbUZ0UEhOMGNtbHVaejRnUFNCN2RXbE9ZVzFsT2lBblVtRnVaRzl0SUhObFpXUW5MQ0IyWVd4MVpUb2diblZzYkN3Z2RHOXZiSFJwY0RvZ0oxSmhibVJ2YlNCelpXVmtKeXdnZEhsd1pUb2dKM04wY21sdVp5ZDlPMXh1SUNCMWMyVlhaV0pIVUZVNklFbEVhVzFTWldSMVkzUnBiMjVRWVhKaGJUeGliMjlzWldGdVBpQTlYRzRnSUNBZ2UzVnBUbUZ0WlRvZ0oxVnpaU0JYWldKSFVGVW5MQ0IyWVd4MVpUb2dabUZzYzJVc0lIUnZiMngwYVhBNklDZFZjMlVnVjJWaVIxQlZJR1p2Y2lCTFRrNGdZMjl0Y0hWMFlYUnBiMjV6Snl3Z2RIbHdaVG9nSjJKdmIyeGxZVzRuZlR0Y2JpQWdZMjl1YzNSeWRXTjBiM0lvS1NCN1hHNGdJQ0FnWjJWMFIxQlZRV1JoY0hSbGNrUmxjMk55YVhCMGFXOXVLQ2t1ZEdobGJpZ29aR1Z6WXlrZ1BUNGdlMXh1SUNBZ0lDQWdhV1lnS0dSbGMyTXBJSHRjYmlBZ0lDQWdJQ0FnZEdocGN5NTFjMlZYWldKSFVGVXVkRzl2YkhScGNDQXJQU0JnSUNna2UyUmxjMk45S1dBN1hHNGdJQ0FnSUNCOUlHVnNjMlVnZTF4dUlDQWdJQ0FnSUNCMGFHbHpMblZ6WlZkbFlrZFFWUzUyWVd4MVpTQTlJR1poYkhObE8xeHVJQ0FnSUNBZ0lDQjBhR2x6TG5WelpWZGxZa2RRVlM1bWIzSmpaVkpsYlc5MlpTQTlJSFJ5ZFdVN1hHNGdJQ0FnSUNCOVhHNGdJQ0FnZlNrN1hHNGdJSDA3WEc1OVhHNWNibVY0Y0c5eWRDQmpiR0Z6Y3lCVVUwNUZUM0IwYVc5dWN5QjdYRzRnSUdWd2MybHNiMjQ2SUVsRWFXMVNaV1IxWTNScGIyNVFZWEpoYlNBOVhHNGdJSHQxYVU1aGJXVTZJQ2RGY0hOcGJHOXVKeXdnZG1Gc2RXVTZJREV3TENCMGIyOXNkR2x3T2lBblJYQnphV3h2YmlCcGN5QnNaV0Z5Ym1sdVp5QnlZWFJsSjMwN1hHNGdJSEJsY25Cc1pYaHBkSGs2SUVsRWFXMVNaV1IxWTNScGIyNVFZWEpoYlNBOVhHNGdJSHQxYVU1aGJXVTZJQ2RRWlhKd2JHVjRhWFI1Snl3Z2RtRnNkV1U2SURNd0xDQjBiMjlzZEdsd09pQW5VbTkxWjJoc2VTQm9iM2NnYldGdWVTQnVaV2xuYUdKdmNuTWdaV0ZqYUNCd2IybHVkQ0JwYm1ac2RXVnVZMlZ6SjMwN1hHNGdJQzh2SUdScGJUb2dTVVJwYlZKbFpIVmpkR2x2YmxCaGNtRnRJRDBnZTNWcFRtRnRaVG9nSjBScGJXVnVjMmx2Ym1Gc2FYUjVKeXdnZG1Gc2RXVTZJRElzSUhSdmIyeDBhWEE2SUNkRWFXMWxibk5wYjI1aGJHbDBlU0J2WmlCMGFHVWdaVzFpWldSa2FXNW5KMzA3WEc1Y2JpQWdZMjl1YzNSeWRXTjBiM0lvS1NCN2ZUdGNibjFjYmx4dVpYaHdiM0owSUhSNWNHVWdSR2x0VW1Wa1UzVndjRzl5ZEdWa1JuVnVZM1JwYjI1eklEMGdlMXh1SUNBZ0lHWjFibU02SUVSSExrWjFibU1zWEc0Z0lDQWdjMlZ0Vkhsd1pYTTZJSE4wY21sdVoxdGRMRnh1SUNBZ0lIUjVjR1Z6T2lCemRISnBibWRiWFN4Y2JpQWdJQ0IxYm1sMGN6b2djM1J5YVc1blcxMHNYRzRnSUNBZ1pHbHpkR0Z1WTJWR2RXNWpkR2x2Ym5NNklITjBjbWx1WjF0ZFhHNTlYRzVjYm1WNGNHOXlkQ0IwZVhCbElFMTFiSFJwUTI5c1JHbHRVbVZrZFdOMGFXOXVVR0Z5WVcxeklEMGdlMXh1SUNBZ0lIUmhZbXhsT2lCRVJ5NUVZWFJoUm5KaGJXVXNYRzRnSUNBZ1kyOXNkVzF1Y3pvZ1JFY3VRMjlzZFcxdVRHbHpkQ3hjYmlBZ0lDQnRaWFJvYjJST1lXMWxPaUJFYVcxU1pXUjFZM1JwYjI1TlpYUm9iMlJ6TEZ4dUlDQWdJSEJ5WlhCeWIyTmxjM05wYm1kR2RXNWpkR2x2Ym5NNklFUkhMa1oxYm1OYlhTeGNiaUFnSUNCa2FYTjBZVzVqWlUxbGRISnBZM002SUhOMGNtbHVaMXRkTEZ4dUlDQWdJSGRsYVdkb2RITTZJRzUxYldKbGNsdGRMRnh1SUNBZ0lHOXdkR2x2Ym5NNklDaEpWVTFCVUU5d2RHbHZibk1nZkNCSlZGTk9SVTl3ZEdsdmJuTXBJQ1lnVUdGeWRHbGhiRHhKUkVKVFkyRnVUM0IwYVc5dWN6NGdKaUI3Y0hKbGNISnZZMlZ6YzJsdVowWjFibU5CY21kek9pQlBjSFJwYjI1elcxMTlJQ1lnVDNCMGFXOXVjeXhjYmlBZ0lDQndiRzkwUlcxaVpXUmthVzVuY3o4NklHSnZiMnhsWVc0c1hHNGdJQ0FnWTJ4MWMzUmxja1Z0WW1Wa1pHbHVaM00vT2lCaWIyOXNaV0Z1TEZ4dWZWeHVYRzVsZUhCdmNuUWdZMnhoYzNNZ1RYVnNkR2xEYjJ4MWJXNUVhVzFTWldSMVkzUnBiMjVGWkdsMGIzSWdlMXh1SUNBZ0lHVmthWFJ2Y2xObGRIUnBibWR6T2lCRWFXMVNaV1IxWTNScGIyNUZaR2wwYjNKUGNIUnBiMjV6SUQwZ2UzMDdYRzRnSUNBZ2RHRmliR1ZKYm5CMWRDRTZJRVJITGtsdWNIVjBRbUZ6WlR4RVJ5NUVZWFJoUm5KaGJXVWdmQ0J1ZFd4c1BqdGNiaUFnSUNCamIyeDFiVzV6U1c1d2RYUWhPaUJFUnk1SmJuQjFkRUpoYzJVOFJFY3VRMjlzZFcxdVcxMCtPMXh1SUNBZ0lHTnZiSFZ0Ym5OSmJuQjFkRkp2YjNRaE9pQklWRTFNUld4bGJXVnVkRHRjYmlBZ0lDQmpiMngxYlc1UGNIUkZaR2wwYjNKek9pQkVhVzFTWldSMVkzUnBiMjVEYjJ4MWJXNUZaR2wwYjNKYlhTQTlJRnRkTzF4dUlDQWdJR052YkhWdGJrOXdkRVZrYVhSdmNuTlNiMjkwT2lCSVZFMU1SV3hsYldWdWRDQTlJSFZwTG1ScGRpZ3BPMXh1SUNBZ0lHTnZiSFZ0YmxCaGNtRnRjMFZrYVhSdmNsSnZiM1E2SUVoVVRVeEZiR1Z0Wlc1MElEMGdkV2t1WkdsMktDazdYRzRnSUNBZ1kyOXNkVzF1VUdGeVlXMXpSV1JwZEc5eVFXTmpiM0prYVc5dU9pQkVSeTVCWTJOdmNtUnBiMjQ3WEc0Z0lDQWdkMlZwWjJoMGMwVmthWFJ2Y2xKdmIzUTZJRWhVVFV4RmJHVnRaVzUwSUQwZ2RXa3VaR2wyS0NrN1hHNGdJQ0FnWTI5c2RXMXVSblZ1WTNScGIyNXpUV0Z3T2lCN1cydGxlVG9nYzNSeWFXNW5YVG9nYzNSeWFXNW5XMTE5SUQwZ2UzMDdYRzRnSUNBZ2JXVjBhRzlrYzFCaGNtRnRjem9nZTF0clpYazZJSE4wY21sdVoxMDZJRlZOUVZCUGNIUnBiMjV6SUh3Z1ZGTk9SVTl3ZEdsdmJuTjlJRDBnZTF4dUlDQWdJQ0FnVzBScGJWSmxaSFZqZEdsdmJrMWxkR2h2WkhNdVZVMUJVRjA2SUc1bGR5QlZUVUZRVDNCMGFXOXVjeWdwTEZ4dUlDQWdJQ0FnVzBScGJWSmxaSFZqZEdsdmJrMWxkR2h2WkhNdVZGOVRUa1ZkT2lCdVpYY2dWRk5PUlU5d2RHbHZibk1vS1Z4dUlDQWdJSDA3WEc0Z0lDQWdaR0pUWTJGdVVHRnlZVzF6SUQwZ2JtVjNJRVJDVTJOaGJrOXdkR2x2Ym5Nb0tUdGNiaUFnSUNCdFpYUm9iMlJUWlhSMGFXNW5jMFJwZGlBOUlIVnBMbWx1Y0hWMGN5aGJYU2s3WEc0Z0lDQWdaR0pUWTJGdVUyVjBkR2x1WjNORWFYWWdQU0IxYVM1cGJuQjFkSE1vVzEwcE8xeHVJQ0FnSUhOMWNIQnZjblJsWkVaMWJtTjBhVzl1Y3pvZ2UxdHVZVzFsT2lCemRISnBibWRkT2lCRWFXMVNaV1JUZFhCd2IzSjBaV1JHZFc1amRHbHZibk45SUQwZ2UzMDdYRzRnSUNBZ2JXVjBhRzlrU1c1d2RYUTZJRVJITGtsdWNIVjBRbUZ6WlR4emRISnBibWNnZkNCdWRXeHNQanRjYmlBZ0lDQnRaWFJvYjJSVFpYUjBhVzVuYzBsamIyNDZJRWhVVFV4RmJHVnRaVzUwTzF4dUlDQWdJR1JpVTJOaGJsTmxkSFJwYm1kelNXTnZiam9nU0ZSTlRFVnNaVzFsYm5RN1hHNGdJQ0FnY0d4dmRFVnRZbVZrWkdsdVozTkpibkIxZENBOUlIVnBMbUp2YjJ4SmJuQjFkQ2duVUd4dmRDQmxiV0psWkdScGJtZHpKeXdnZEhKMVpTazdYRzRnSUNBZ1kyeDFjM1JsY2tWdFltVmtaR2x1WjNOSmJuQjFkQ0E5SUhWcExtSnZiMnhKYm5CMWRDZ25RMngxYzNSbGNpQmxiV0psWkdScGJtZHpKeXdnWm1Gc2MyVXBPMXh1SUNBZ0lIQnZjM1JRY205alpYTnphVzVuUldScGRHOXlPaUJRYjNOMFVISnZZMlZ6YzJsdVowWjFibU5GWkdsMGIzSTdYRzRnSUNBZ1lXZG5jbVZuWVhScGIyNU5aWFJvYjJSSmJuQjFkQ0E5SUhWcExtTm9iMmxqWlVsdWNIVjBLQ2RCWjJkeVpXZGhkR2x2Ymljc0lFUnBjM1JoYm1ObFFXZG5jbVZuWVhScGIyNU5aWFJvYjJSekxrVlZRMHhKUkVWQlRpeGNiaUFnSUNBZ0lGdEVhWE4wWVc1alpVRm5aM0psWjJGMGFXOXVUV1YwYUc5a2N5NUZWVU5NU1VSRlFVNHNJRVJwYzNSaGJtTmxRV2RuY21WbllYUnBiMjVOWlhSb2IyUnpMazFCVGtoQlZGUkJUbDBwTzF4dVhHNGdJQ0FnYjI1RGIyeDFiVzV6UTJoaGJtZGxaRG9nVTNWaWFtVmpkRHgyYjJsa1BqdGNiaUFnSUNCamIyNXpkSEoxWTNSdmNpaGxaR2wwYjNKVFpYUjBhVzVuY3pvZ1JHbHRVbVZrZFdOMGFXOXVSV1JwZEc5eVQzQjBhVzl1Y3lBOUlIdDlLU0I3WEc0Z0lDQWdJQ0IwYUdsekxtRm5aM0psWjJGMGFXOXVUV1YwYUc5a1NXNXdkWFF1YzJWMFZHOXZiSFJwY0NnblFXZG5jbVZuWVhScGIyNGdiV1YwYUc5a0lHWnZjaUJqYjIxaWFXNXBibWNnWkdsemRHRnVZMlZ6SUdKbGRIZGxaVzRnWTI5c2RXMXVjeWNwTzF4dUlDQWdJQ0FnZEdocGN5NXZia052YkhWdGJuTkRhR0Z1WjJWa0lEMGdibVYzSUZOMVltcGxZM1FvS1R0Y2JpQWdJQ0FnSUhSb2FYTXVaV1JwZEc5eVUyVjBkR2x1WjNNZ1BTQmxaR2wwYjNKVFpYUjBhVzVuY3p0Y2JpQWdJQ0FnSUhSb2FYTXVZMjlzZFcxdVVHRnlZVzF6UldScGRHOXlRV05qYjNKa2FXOXVJRDBnZFdrdVlXTmpiM0prYVc5dUtDazdYRzRnSUNBZ0lDQmpiMjV6ZENCd2NtVndiM0pqWlhOemFXNW5SblZ1WTNNZ1BTQkVSeTVHZFc1akxtWnBibVFvZTNSaFozTTZJRnRFU1UxZlVrVkVYMUJTUlZCU1QwTkZVMU5KVGtkZlJsVk9RMVJKVDA1ZlZFRkhYWDBwTzF4dUlDQWdJQ0FnY0hKbGNHOXlZMlZ6YzJsdVowWjFibU56TG1admNrVmhZMmdvS0dZcElEMCtJSHRjYmlBZ0lDQWdJQ0FnWTI5dWMzUWdjMlZ0Vkhsd1pYTTZJSE4wY21sdVp5QTlJR1l1YjNCMGFXOXVjeTVuWlhRb1UxVlFVRTlTVkVWRVgxTkZUVlJaVUVWVFgxUkJSeWtnUHo4Z0p5YzdYRzRnSUNBZ0lDQWdJR052Ym5OMElHNWhiV1VnUFNCbUxtWnlhV1Z1Wkd4NVRtRnRaU0EvUHlCbUxtNWhiV1U3WEc0Z0lDQWdJQ0FnSUdOdmJuTjBJSFI1Y0dWek9pQnpkSEpwYm1jZ1BTQm1MbTl3ZEdsdmJuTXVaMlYwS0ZOVlVGQlBVbFJGUkY5VVdWQkZVMTlVUVVjcElEOC9JQ2NuTzF4dUlDQWdJQ0FnSUNCamIyNXpkQ0IxYm1sMGN6b2djM1J5YVc1bklEMGdaaTV2Y0hScGIyNXpMbWRsZENoVFZWQlFUMUpVUlVSZlZVNUpWRk5mVkVGSEtTQS9QeUFuSnp0Y2JpQWdJQ0FnSUNBZ1kyOXVjM1FnWkdsemRHRnVZMlZHZFc1amRHbHZibk02SUhOMGNtbHVaeUE5SUdZdWIzQjBhVzl1Y3k1blpYUW9VMVZRVUU5U1ZFVkVYMFJKVTFSQlRrTkZYMFpWVGtOVVNVOU9VMTlVUVVjcElEOC9JQ2NuTzF4dUlDQWdJQ0FnSUNCcFppQW9kR2hwY3k1bFpHbDBiM0pUWlhSMGFXNW5jeTV6WlcxMGVYQmxJQ1ltSUNGelpXMVVlWEJsY3k1cGJtTnNkV1JsY3loMGFHbHpMbVZrYVhSdmNsTmxkSFJwYm1kekxuTmxiWFI1Y0dVcEtWeHVJQ0FnSUNBZ0lDQWdJSEpsZEhWeWJqdGNiaUFnSUNBZ0lDQWdhV1lnS0hSb2FYTXVaV1JwZEc5eVUyVjBkR2x1WjNNdWRIbHdaU0FtSmlBaGRIbHdaWE11YVc1amJIVmtaWE1vZEdocGN5NWxaR2wwYjNKVFpYUjBhVzVuY3k1MGVYQmxLU2xjYmlBZ0lDQWdJQ0FnSUNCeVpYUjFjbTQ3WEc0Z0lDQWdJQ0FnSUdsbUlDaDBhR2x6TG1Wa2FYUnZjbE5sZEhScGJtZHpMblZ1YVhSeklDWW1JQ0YxYm1sMGN5NXBibU5zZFdSbGN5aDBhR2x6TG1Wa2FYUnZjbE5sZEhScGJtZHpMblZ1YVhSektTbGNiaUFnSUNBZ0lDQWdJQ0J5WlhSMWNtNDdYRzVjYmlBZ0lDQWdJQ0FnZEdocGN5NXpkWEJ3YjNKMFpXUkdkVzVqZEdsdmJuTmJibUZ0WlYwZ1BTQjdYRzRnSUNBZ0lDQWdJQ0FnWm5WdVl6b2daaXhjYmlBZ0lDQWdJQ0FnSUNCelpXMVVlWEJsY3pvZ2MyVnRWSGx3WlhNZ1B5QnpaVzFVZVhCbGN5NXpjR3hwZENnbkxDY3BJRG9nVzEwc1hHNGdJQ0FnSUNBZ0lDQWdkSGx3WlhNNklIUjVjR1Z6SUQ4Z2RIbHdaWE11YzNCc2FYUW9KeXduS1NBNklGdGRMRnh1SUNBZ0lDQWdJQ0FnSUhWdWFYUnpPaUIxYm1sMGN5QS9JSFZ1YVhSekxuTndiR2wwS0Njc0p5a2dPaUJiWFN4Y2JpQWdJQ0FnSUNBZ0lDQmthWE4wWVc1alpVWjFibU4wYVc5dWN6b2daR2x6ZEdGdVkyVkdkVzVqZEdsdmJuTWdQeUJrYVhOMFlXNWpaVVoxYm1OMGFXOXVjeTV6Y0d4cGRDZ25MQ2NwSURvZ1cxMHNYRzRnSUNBZ0lDQWdJSDA3WEc0Z0lDQWdJQ0I5S1R0Y2JseHVJQ0FnSUNBZ2RHaHBjeTV3YjNOMFVISnZZMlZ6YzJsdVowVmthWFJ2Y2lBOUlHNWxkeUJRYjNOMFVISnZZMlZ6YzJsdVowWjFibU5GWkdsMGIzSW9LVHRjYmx4dUlDQWdJQ0FnZEdocGN5NTBZV0pzWlVsdWNIVjBJRDBnZFdrdWRHRmliR1ZKYm5CMWRDZ25WR0ZpYkdVbkxDQm5jbTlyTG5Ob1pXeHNMblIyTG1SaGRHRkdjbUZ0WlN3Z1ozSnZheTV6YUdWc2JDNTBZV0pzWlhNc0lDZ3BJRDArSUh0Y2JpQWdJQ0FnSUNBZ2RHaHBjeTV2YmxSaFlteGxTVzV3ZFhSRGFHRnVaMlZrS0NrN1hHNGdJQ0FnSUNCOUtUdGNiaUFnSUNBZ0lIUm9hWE11YjI1VVlXSnNaVWx1Y0hWMFEyaGhibWRsWkNncE8xeHVJQ0FnSUNBZ2JHVjBJSE5sZEhScGJtZHpUM0JsYm1Wa0lEMGdabUZzYzJVN1hHNGdJQ0FnSUNCc1pYUWdaR0pUWTJGdVUyVjBkR2x1WjNOUGNHVnVaV1FnUFNCbVlXeHpaVHRjYmx4dUlDQWdJQ0FnZEdocGN5NXRaWFJvYjJSSmJuQjFkQ0E5SUhWcExtTm9iMmxqWlVsdWNIVjBLQ2ROWlhSb2IyUW5MQ0JFYVcxU1pXUjFZM1JwYjI1TlpYUm9iMlJ6TGxWTlFWQXNYRzRnSUNBZ0lDQWdJRnRFYVcxU1pXUjFZM1JwYjI1TlpYUm9iMlJ6TGxWTlFWQXNJRVJwYlZKbFpIVmpkR2x2YmsxbGRHaHZaSE11VkY5VFRrVmRMQ0FvS1NBOVBpQjdYRzRnSUNBZ0lDQWdJQ0FnYVdZZ0tITmxkSFJwYm1kelQzQmxibVZrS1Z4dUlDQWdJQ0FnSUNBZ0lDQWdkR2hwY3k1amNtVmhkR1ZCYkdkdmNtbDBhRzFUWlhSMGFXNW5jMFJwZGloMGFHbHpMbTFsZEdodlpGTmxkSFJwYm1kelJHbDJMQ0IwYUdsekxtMWxkR2h2WkhOUVlYSmhiWE5iZEdocGN5NXRaWFJvYjJSSmJuQjFkQzUyWVd4MVpTRmRLVHRjYmlBZ0lDQWdJQ0FnZlNrN1hHNGdJQ0FnSUNCMGFHbHpMbTFsZEdodlpGTmxkSFJwYm1kelNXTnZiaUE5SUhWcExtbGpiMjV6TG5ObGRIUnBibWR6S0NncFBUNGdlMXh1SUNBZ0lDQWdJQ0J6WlhSMGFXNW5jMDl3Wlc1bFpDQTlJQ0Z6WlhSMGFXNW5jMDl3Wlc1bFpEdGNiaUFnSUNBZ0lDQWdhV1lnS0NGelpYUjBhVzVuYzA5d1pXNWxaQ2xjYmlBZ0lDQWdJQ0FnSUNCMWFTNWxiWEIwZVNoMGFHbHpMbTFsZEdodlpGTmxkSFJwYm1kelJHbDJLVHRjYmlBZ0lDQWdJQ0FnWld4elpWeHVJQ0FnSUNBZ0lDQWdJSFJvYVhNdVkzSmxZWFJsUVd4bmIzSnBkR2h0VTJWMGRHbHVaM05FYVhZb2RHaHBjeTV0WlhSb2IyUlRaWFIwYVc1bmMwUnBkaXdnZEdocGN5NXRaWFJvYjJSelVHRnlZVzF6VzNSb2FYTXViV1YwYUc5a1NXNXdkWFF1ZG1Gc2RXVWhYU2s3WEc0Z0lDQWdJQ0I5TENBblRXOWthV1o1SUcxbGRHaHZaSE1nY0dGeVlXMWxkR1Z5Y3ljcE8xeHVJQ0FnSUNBZ2RHaHBjeTVrWWxOallXNVRaWFIwYVc1bmMwbGpiMjRnUFNCMWFTNXBZMjl1Y3k1elpYUjBhVzVuY3lnb0tUMCtJSHRjYmlBZ0lDQWdJQ0FnWkdKVFkyRnVVMlYwZEdsdVozTlBjR1Z1WldRZ1BTQWhaR0pUWTJGdVUyVjBkR2x1WjNOUGNHVnVaV1E3WEc0Z0lDQWdJQ0FnSUdsbUlDZ2haR0pUWTJGdVUyVjBkR2x1WjNOUGNHVnVaV1FwWEc0Z0lDQWdJQ0FnSUNBZ2RXa3VaVzF3ZEhrb2RHaHBjeTVrWWxOallXNVRaWFIwYVc1bmMwUnBkaWs3WEc0Z0lDQWdJQ0FnSUdWc2MyVmNiaUFnSUNBZ0lDQWdJQ0IwYUdsekxtTnlaV0YwWlVGc1oyOXlhWFJvYlZObGRIUnBibWR6UkdsMktIUm9hWE11WkdKVFkyRnVVMlYwZEdsdVozTkVhWFlzSUhSb2FYTXVaR0pUWTJGdVVHRnlZVzF6S1R0Y2JpQWdJQ0FnSUgwc0lDZE5iMlJwWm5rZ1kyeDFjM1JsY21sdVp5QndZWEpoYldWMFpYSnpKeWs3WEc0Z0lDQWdJQ0IwYUdsekxtTnNkWE4wWlhKRmJXSmxaR1JwYm1kelNXNXdkWFF1WTJ4aGMzTk1hWE4wTG1Ga1pDZ25iV3d0WkdsdExYSmxaSFZqZEdsdmJpMXpaWFIwYVc1bmN5MXBibkIxZENjcE8xeHVJQ0FnSUNBZ2RHaHBjeTVqYkhWemRHVnlSVzFpWldSa2FXNW5jMGx1Y0hWMExuSnZiM1F1Y0hKbGNHVnVaQ2gwYUdsekxtUmlVMk5oYmxObGRIUnBibWR6U1dOdmJpazdYRzRnSUNBZ0lDQjBhR2x6TG0xbGRHaHZaRWx1Y0hWMExuSnZiM1F1WTJ4aGMzTk1hWE4wTG1Ga1pDZ25iV3d0WkdsdExYSmxaSFZqZEdsdmJpMXpaWFIwYVc1bmN5MXBibkIxZENjcE8xeHVJQ0FnSUNBZ2RHaHBjeTV0WlhSb2IyUkpibkIxZEM1eWIyOTBMbkJ5WlhCbGJtUW9kR2hwY3k1dFpYUm9iMlJUWlhSMGFXNW5jMGxqYjI0cE8xeHVJQ0FnSUNBZ2RHaHBjeTVqYjJ4MWJXNVFZWEpoYlhORlpHbDBiM0pCWTJOdmNtUnBiMjR1WVdSa1VHRnVaU2duUTI5c2RXMXVJRzl3ZEdsdmJuTW5MQ0FvS1NBOVBpQjBhR2x6TG1OdmJIVnRiazl3ZEVWa2FYUnZjbk5TYjI5MExDQjBjblZsTENCdWRXeHNMQ0JtWVd4elpTazdYRzRnSUNBZ0lDQjBhR2x6TG1OdmJIVnRibEJoY21GdGMwVmthWFJ2Y2tGalkyOXlaR2x2Ymk1eWIyOTBMbk4wZVd4bExtUnBjM0JzWVhrZ1BTQW5ibTl1WlNjN1hHNGdJQ0FnSUNCMGFHbHpMbU52YkhWdGJsQmhjbUZ0YzBWa2FYUnZjbEp2YjNRdVlYQndaVzVrUTJocGJHUW9kR2hwY3k1amIyeDFiVzVRWVhKaGJYTkZaR2wwYjNKQlkyTnZjbVJwYjI0dWNtOXZkQ2s3WEc0Z0lDQWdJQ0IwYUdsekxtTnZiSFZ0YmxCaGNtRnRjMFZrYVhSdmNsSnZiM1F1WVhCd1pXNWtRMmhwYkdRb2RHaHBjeTUzWldsbmFIUnpSV1JwZEc5eVVtOXZkQ2s3WEc0Z0lDQWdmVnh1WEc0Z0lDQWdiMjVVWVdKc1pVbHVjSFYwUTJoaGJtZGxaQ2dwSUh0Y2JpQWdJQ0FnSUdOdmJuTjBJSFJoWW14bElEMGdkR2hwY3k1MFlXSnNaVWx1Y0hWMExuWmhiSFZsTzF4dUlDQWdJQ0FnYVdZZ0tDRjBZV0pzWlNsY2JpQWdJQ0FnSUNBZ2NtVjBkWEp1TzF4dUlDQWdJQ0FnZFdrdVpXMXdkSGtvZEdocGN5NWpiMngxYlc1UGNIUkZaR2wwYjNKelVtOXZkQ2s3WEc0Z0lDQWdJQ0IxYVM1bGJYQjBlU2gwYUdsekxuZGxhV2RvZEhORlpHbDBiM0pTYjI5MEtUdGNibHh1SUNBZ0lDQWdkR2hwY3k1amIyeDFiVzVHZFc1amRHbHZibk5OWVhBZ1BTQjdmVHRjYmlBZ0lDQWdJR052Ym5OMElHTnZiSFZ0Ym5NZ1BTQjBZV0pzWlM1amIyeDFiVzV6TG5SdlRHbHpkQ2dwTzF4dUlDQWdJQ0FnWTI5c2RXMXVjeTVtYjNKRllXTm9LQ2hqYjJ3cElEMCtJSHRjYmlBZ0lDQWdJQ0FnVDJKcVpXTjBMbXRsZVhNb2RHaHBjeTV6ZFhCd2IzSjBaV1JHZFc1amRHbHZibk1wTG1admNrVmhZMmdvS0daMWJtTk9ZVzFsS1NBOVBpQjdYRzRnSUNBZ0lDQWdJQ0FnWTI5dWMzUWdjMlZ0Vkhsd1pYTWdQU0IwYUdsekxuTjFjSEJ2Y25SbFpFWjFibU4wYVc5dWMxdG1kVzVqVG1GdFpWMHVjMlZ0Vkhsd1pYTTdYRzRnSUNBZ0lDQWdJQ0FnWTI5dWMzUWdkSGx3WlhNZ1BTQjBhR2x6TG5OMWNIQnZjblJsWkVaMWJtTjBhVzl1YzF0bWRXNWpUbUZ0WlYwdWRIbHdaWE03WEc0Z0lDQWdJQ0FnSUNBZ1kyOXVjM1FnZFc1cGRITWdQU0IwYUdsekxuTjFjSEJ2Y25SbFpFWjFibU4wYVc5dWMxdG1kVzVqVG1GdFpWMHVkVzVwZEhNN1hHNGdJQ0FnSUNBZ0lDQWdZMjl1YzNRZ2MyVnRWSGx3WlZOMWNIQnZjblJsWkNBOUlDRnpaVzFVZVhCbGN5NXNaVzVuZEdnZ2ZId2dLR052YkM1elpXMVVlWEJsSUNZbUlITmxiVlI1Y0dWekxtbHVZMngxWkdWektHTnZiQzV6WlcxVWVYQmxLU2s3WEc0Z0lDQWdJQ0FnSUNBZ1kyOXVjM1FnZEhsd1pWTjFjRzl5ZEdWa0lEMGdJWFI1Y0dWekxteGxibWQwYUNCOGZDQjBlWEJsY3k1cGJtTnNkV1JsY3loamIyd3VkSGx3WlNrN1hHNGdJQ0FnSUNBZ0lDQWdZMjl1YzNRZ2RXNXBkSE5UZFhCd2IzSjBaV1FnUFNBaGRXNXBkSE11YkdWdVozUm9JSHg4WEc0Z0lDQWdJQ0FnSUNBZ0lDQW9ZMjlzTG1kbGRGUmhaeWhFUnk1VVFVZFRMbFZPU1ZSVEtTQW1KaUIxYm1sMGN5NXBibU5zZFdSbGN5aGpiMnd1WjJWMFZHRm5LRVJITGxSQlIxTXVWVTVKVkZNcEtTazdYRzRnSUNBZ0lDQWdJQ0FnYVdZZ0tITmxiVlI1Y0dWVGRYQndiM0owWldRZ0ppWWdkSGx3WlZOMWNHOXlkR1ZrSUNZbUlIVnVhWFJ6VTNWd2NHOXlkR1ZrS1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0JwWmlBb0lYUm9hWE11WTI5c2RXMXVSblZ1WTNScGIyNXpUV0Z3VzJOdmJDNXVZVzFsWFNsY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnZEdocGN5NWpiMngxYlc1R2RXNWpkR2x2Ym5OTllYQmJZMjlzTG01aGJXVmRJRDBnVzEwN1hHNGdJQ0FnSUNBZ0lDQWdJQ0IwYUdsekxtTnZiSFZ0YmtaMWJtTjBhVzl1YzAxaGNGdGpiMnd1Ym1GdFpWMHVjSFZ6YUNobWRXNWpUbUZ0WlNrN1hHNGdJQ0FnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdJQ0I5S1R0Y2JpQWdJQ0FnSUgwcE8xeHVJQ0FnSUNBZ1kyOXVjM1FnYzNWd2NHOXlkR1ZrUTI5c1RtRnRaWE1nUFNCUFltcGxZM1F1YTJWNWN5aDBhR2x6TG1OdmJIVnRia1oxYm1OMGFXOXVjMDFoY0NrN1hHNGdJQ0FnSUNCamIyNXpkQ0JqYjJ4MWJXNXpTVzV3ZFhRZ1BTQjFhUzVqYjJ4MWJXNXpTVzV3ZFhRb0owTnZiSFZ0Ym5NbkxDQjBZV0pzWlN3Z0tDa2dQVDRnZTF4dUlDQWdJQ0FnSUNCMGFHbHpMbTl1UTI5c2RXMXVjME5vWVc1blpXUXVibVY0ZENncE8xeHVJQ0FnSUNBZ0lDQjFhUzVsYlhCMGVTaDBhR2x6TG1OdmJIVnRiazl3ZEVWa2FYUnZjbk5TYjI5MEtUdGNiaUFnSUNBZ0lDQWdkV2t1Wlcxd2RIa29kR2hwY3k1M1pXbG5hSFJ6UldScGRHOXlVbTl2ZENrN1hHNGdJQ0FnSUNBZ0lHTnZibk4wSUdOdmJITWdQU0JqYjJ4MWJXNXpTVzV3ZFhRdWRtRnNkV1U3WEc0Z0lDQWdJQ0FnSUdsbUlDZ2hZMjlzY3lCOGZDQmpiMnh6UHk1c1pXNW5kR2dnUENBeUtWeHVJQ0FnSUNBZ0lDQWdJSFJvYVhNdVlXZG5jbVZuWVhScGIyNU5aWFJvYjJSSmJuQjFkQzV5YjI5MExuTjBlV3hsTG1ScGMzQnNZWGtnUFNBbmJtOXVaU2M3WEc0Z0lDQWdJQ0FnSUdWc2MyVmNiaUFnSUNBZ0lDQWdJQ0IwYUdsekxtRm5aM0psWjJGMGFXOXVUV1YwYUc5a1NXNXdkWFF1Y205dmRDNXpkSGxzWlM1a2FYTndiR0Y1SUQwZ0oyWnNaWGduTzF4dUlDQWdJQ0FnSUNCcFppQW9JV052YkhNZ2ZId2dZMjlzY3k1c1pXNW5kR2dnUFQwOUlEQXBJSHRjYmlBZ0lDQWdJQ0FnSUNCMGFHbHpMbU52YkhWdGJsQmhjbUZ0YzBWa2FYUnZja0ZqWTI5eVpHbHZiaTV5YjI5MExuTjBlV3hsTG1ScGMzQnNZWGtnUFNBbmJtOXVaU2M3WEc0Z0lDQWdJQ0FnSUNBZ2NtVjBkWEp1TzF4dUlDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNBZ0lHTnZibk4wSUdWa2FYUnZjbGRwWkhSb2N5QTlJRnN5TUN3Z016QXNJRE13TENBeU1GMDdYRzRnSUNBZ0lDQWdJSFJvYVhNdVkyOXNkVzF1VDNCMFJXUnBkRzl5Y3lBOUlHTnZiSE11YldGd0tDaGpiMndwSUQwK0lIdGNiaUFnSUNBZ0lDQWdJQ0JqYjI1emRDQmxaR2wwYjNKRGJHRnpjeUE5SUc1bGR5QkVhVzFTWldSMVkzUnBiMjVEYjJ4MWJXNUZaR2wwYjNJb1kyOXNMQ0IwYUdsekxtTnZiSFZ0YmtaMWJtTjBhVzl1YzAxaGNGdGpiMnd1Ym1GdFpWMHViV0Z3S0NocGRDa2dQVDVjYmlBZ0lDQWdJQ0FnSUNBZ0lIUm9hWE11YzNWd2NHOXlkR1ZrUm5WdVkzUnBiMjV6VzJsMFhTa3NJR1ZrYVhSdmNsZHBaSFJvY3lrN1hHNGdJQ0FnSUNBZ0lDQWdjbVYwZFhKdUlHVmthWFJ2Y2tOc1lYTnpPMXh1SUNBZ0lDQWdJQ0I5S1R0Y2JpQWdJQ0FnSUNBZ1kyOXVjM1FnWldScGRHOXlWR2wwYkdWeklEMGdXeWREYjJ4MWJXNG5MQ0FuUlc1amIyUnBibWNnWm5WdVkzUnBiMjRuTENBblUybHRhV3hoY21sMGVTQnRaWFJ5YVdNbkxDQW5WMlZwWjJoMEoxMHViV0Z3S0NocGRDd2dhU2tnUFQ1Y2JpQWdJQ0FnSUNBZ0lDQjFhUzVvTVNocGRDd2dlM04wZVd4bE9pQjdkMmxrZEdnNklHQWtlMlZrYVhSdmNsZHBaSFJvYzF0cFhYMGxZQ3dnYldGeVoybHVPaUF3ZlgwcEtUdGNibHh1SUNBZ0lDQWdJQ0IxYVM1MGIyOXNkR2x3TG1KcGJtUW9aV1JwZEc5eVZHbDBiR1Z6V3pGZExDQW5SVzVqYjJScGJtY2dablZ1WTNScGIyNGdabTl5SUhSb1pTQmpiMngxYlc0Z2RtRnNkV1Z6SnlrN1hHNGdJQ0FnSUNBZ0lIVnBMblJ2YjJ4MGFYQXVZbWx1WkNobFpHbDBiM0pVYVhSc1pYTmJNbDBzSUNkRWFYTjBZVzVqWlM5VGFXMXBiR0Z5YVhSNUlHMWxkSEpwWXlCbWIzSWdkR2hsSUdWdVkyOWtaV1FnWTI5c2RXMXVJSFpoYkhWbGN5Y3BPMXh1SUNBZ0lDQWdJQ0IxYVM1MGIyOXNkR2x3TG1KcGJtUW9aV1JwZEc5eVZHbDBiR1Z6V3pOZExDQW5WMlZwWjJoMElHOW1JSFJvWlNCamIyeDFiVzRnWm05eUlHTnZiV0pwYm1sdVp5QmthWE4wWVc1alpYTWdZbVYwZDJWbGJpQjJZV3gxWlhNbktUdGNibHh1SUNBZ0lDQWdJQ0JqYjI1emRDQmxaR2wwYjNKVWFYUnNaVkp2YjNRZ1BTQjFhUzVrYVhaSUtHVmthWFJ2Y2xScGRHeGxjeXdnZTJOc1lYTnpaWE02SUNkdGJDMWthVzB0Y21Wa2RXTjBhVzl1TFdOdmJIVnRiaTFsWkdsMGIzSXRhR1ZoWkdWeUxYSnZiM1FuZlNrN1hHNGdJQ0FnSUNBZ0lIUm9hWE11WTI5c2RXMXVUM0IwUldScGRHOXljMUp2YjNRdVlYQndaVzVrUTJocGJHUW9aV1JwZEc5eVZHbDBiR1ZTYjI5MEtUdGNiaUFnSUNBZ0lDQWdZMjl1YzNRZ1pXUnBkRzl5YzFKdmIzUWdQU0IxYVM1a2FYWldLRnRkTENCN2MzUjViR1U2SUh0dFlYaElaV2xuYUhRNklDYzBNREJ3ZUNjc0lHOTJaWEptYkc5M09pQW5ZWFYwYnlkOWZTazdYRzRnSUNBZ0lDQWdJSFJvYVhNdVkyOXNkVzF1VDNCMFJXUnBkRzl5Y3k1bWIzSkZZV05vS0NobFpHbDBiM0lwSUQwK0lIdGNiaUFnSUNBZ0lDQWdJQ0JsWkdsMGIzSnpVbTl2ZEM1aGNIQmxibVJEYUdsc1pDaGxaR2wwYjNJdVlXTmpiM0prYVc5dVJHbDJLVHRjYmlBZ0lDQWdJQ0FnZlNrN1hHNGdJQ0FnSUNBZ0lIUm9hWE11WTI5c2RXMXVUM0IwUldScGRHOXljMUp2YjNRdVlYQndaVzVrUTJocGJHUW9aV1JwZEc5eWMxSnZiM1FwTzF4dUlDQWdJQ0FnSUNCcFppQW9kR2hwY3k1amIyeDFiVzVQY0hSRlpHbDBiM0p6TG14bGJtZDBhQ0ErSURBcFhHNGdJQ0FnSUNBZ0lDQWdkR2hwY3k1amIyeDFiVzVRWVhKaGJYTkZaR2wwYjNKQlkyTnZjbVJwYjI0dWNtOXZkQzV6ZEhsc1pTNWthWE53YkdGNUlEMGdKMlpzWlhnbk8xeHVJQ0FnSUNBZ2ZTd2dlMkYyWVdsc1lXSnNaVG9nYzNWd2NHOXlkR1ZrUTI5c1RtRnRaWE45S1R0Y2JpQWdJQ0FnSUdOdmJIVnRibk5KYm5CMWRDNW1hWEpsUTJoaGJtZGxaQ2dwTzF4dUlDQWdJQ0FnYVdZZ0tDRjBhR2x6TG1OdmJIVnRibk5KYm5CMWRGSnZiM1FwSUh0Y2JpQWdJQ0FnSUNBZ2RHaHBjeTVqYjJ4MWJXNXpTVzV3ZFhSU2IyOTBJRDBnWTI5c2RXMXVjMGx1Y0hWMExuSnZiM1E3WEc0Z0lDQWdJQ0FnSUhSb2FYTXVZMjlzZFcxdWMwbHVjSFYwSUQwZ1kyOXNkVzF1YzBsdWNIVjBPMXh1SUNBZ0lDQWdmU0JsYkhObElIdGNiaUFnSUNBZ0lDQWdkV2t1Wlcxd2RIa29kR2hwY3k1amIyeDFiVzV6U1c1d2RYUlNiMjkwS1R0Y2JpQWdJQ0FnSUNBZ2RHaHBjeTVqYjJ4MWJXNXpTVzV3ZFhRZ1BTQmpiMngxYlc1elNXNXdkWFE3WEc0Z0lDQWdJQ0FnSUVGeWNtRjVMbVp5YjIwb2RHaHBjeTVqYjJ4MWJXNXpTVzV3ZFhRdWNtOXZkQzVqYUdsc1pISmxiaWxjYmlBZ0lDQWdJQ0FnSUNBdVptOXlSV0ZqYUNnb2FYUXBJRDArSUhSb2FYTXVZMjlzZFcxdWMwbHVjSFYwVW05dmRDNWhjSEJsYm1SRGFHbHNaQ2hwZENrcE8xeHVJQ0FnSUNBZ2ZWeHVJQ0FnSUgxY2JpQWdJQ0J3Y21sMllYUmxJR055WldGMFpVRnNaMjl5YVhSb2JWTmxkSFJwYm1kelJHbDJLRnh1SUNBZ0lDQWdjR0Z5WVcxelJtOXliVG9nU0ZSTlRFVnNaVzFsYm5Rc0lIQmhjbUZ0Y3pvZ1ZVMUJVRTl3ZEdsdmJuTWdmQ0JVVTA1RlQzQjBhVzl1Y3lCOElFUkNVMk5oYms5d2RHbHZibk1wT2lCSVZFMU1SV3hsYldWdWRDQjdYRzRnSUNBZ0lDQjFhUzVsYlhCMGVTaHdZWEpoYlhOR2IzSnRLVHRjYmlBZ0lDQWdJRTlpYW1WamRDNXJaWGx6S0hCaGNtRnRjeWt1Wm05eVJXRmphQ2dvYVhRNklHRnVlU2tnUFQ0Z2UxeHVJQ0FnSUNBZ0lDQmpiMjV6ZENCd1lYSmhiVG9nU1VScGJWSmxaSFZqZEdsdmJsQmhjbUZ0SUh3Z1NVUnBiVkpsWkhWamRHbHZibEJoY21GdFBITjBjbWx1Wno0Z2ZDQkpSR2x0VW1Wa2RXTjBhVzl1VUdGeVlXMDhZbTl2YkdWaGJqNGdQVnh1SUNBZ0lDQWdJQ0FnSUNod1lYSmhiWE1nWVhNZ1lXNTVLVnRwZEYwN1hHNGdJQ0FnSUNBZ0lHbG1JQ2doY0dGeVlXMHVabTl5WTJWU1pXMXZkbVVwSUh0Y2JpQWdJQ0FnSUNBZ0lDQmpiMjV6ZENCcGJuQjFkQ0E5SUhCaGNtRnRMblI1Y0dVZ1BUMDlJQ2R6ZEhKcGJtY25JRDljYmlBZ0lDQWdJQ0FnSUNBZ0lIVnBMbk4wY21sdVowbHVjSFYwS0hCaGNtRnRMblZwVG1GdFpTd2djR0Z5WVcwdWRtRnNkV1VnUHo4Z0p5Y3NJQ2dwSUQwK0lIdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ2NHRnlZVzB1ZG1Gc2RXVWdQU0FvYVc1d2RYUWdZWE1nUkVjdVNXNXdkWFJDWVhObFBITjBjbWx1Wno0cExuWmhiSFZsTzF4dUlDQWdJQ0FnSUNBZ0lDQWdmU2tnT2lCd1lYSmhiUzUwZVhCbElEMDlQU0FuWW05dmJHVmhiaWNnUDF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0IxYVM1aWIyOXNTVzV3ZFhRb2NHRnlZVzB1ZFdsT1lXMWxMQ0J3WVhKaGJTNTJZV3gxWlNBL1B5Qm1ZV3h6WlN3Z0tDa2dQVDRnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUhCaGNtRnRMblpoYkhWbElEMGdLR2x1Y0hWMElHRnpJRVJITGtsdWNIVjBRbUZ6WlR4aWIyOXNaV0Z1UGlrdWRtRnNkV1U3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJSDBwSURwY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnZFdrdVpteHZZWFJKYm5CMWRDaHdZWEpoYlM1MWFVNWhiV1VzSUhCaGNtRnRMblpoYkhWbElHRnpJR0Z1ZVN3Z0tDa2dQVDRnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUhCaGNtRnRMblpoYkhWbElEMGdhVzV3ZFhRdWRtRnNkV1U3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJSDBwTzF4dUlDQWdJQ0FnSUNBZ0lIVnBMblJ2YjJ4MGFYQXVZbWx1WkNocGJuQjFkQzVwYm5CMWRDQS9QeUJwYm5CMWRDNXliMjkwTENCd1lYSmhiUzUwYjI5c2RHbHdLVHRjYmlBZ0lDQWdJQ0FnSUNCd1lYSmhiWE5HYjNKdExtRndjR1Z1WkNocGJuQjFkQzV5YjI5MEtUdGNiaUFnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdmU2s3WEc0Z0lDQWdJQ0J5WlhSMWNtNGdjR0Z5WVcxelJtOXliVHRjYmlBZ0lDQjlYRzVjYmlBZ0lDQm5aWFFnWVd4bmIzSnBkR2h0VDNCMGFXOXVjeWdwT2lCSlZVMUJVRTl3ZEdsdmJuTWdmQ0JKVkZOT1JVOXdkR2x2Ym5NZ2UxeHVJQ0FnSUNBZ1kyOXVjM1FnWVd4bmIzSnBkR2h0VUdGeVlXMXpPaUJWVFVGUVQzQjBhVzl1Y3lCOElGUlRUa1ZQY0hScGIyNXpJRDBnZEdocGN5NXRaWFJvYjJSelVHRnlZVzF6VzNSb2FYTXViV1YwYUc5a1NXNXdkWFF1ZG1Gc2RXVWhYVHRjYmlBZ0lDQWdJR052Ym5OMElHOXdkR2x2Ym5NNklHRnVlU0E5SUh0OU8xeHVJQ0FnSUNBZ1QySnFaV04wTG10bGVYTW9ZV3huYjNKcGRHaHRVR0Z5WVcxektTNW1iM0pGWVdOb0tDaHJaWGs2SUhOMGNtbHVaeWtnUFQ0Z2UxeHVJQ0FnSUNBZ0lDQnBaaUFvS0dGc1oyOXlhWFJvYlZCaGNtRnRjeUJoY3lCaGJua3BXMnRsZVYwdWRtRnNkV1VnSVQwZ2JuVnNiQ2xjYmlBZ0lDQWdJQ0FnSUNCdmNIUnBiMjV6VzJ0bGVWMGdQU0FvWVd4bmIzSnBkR2h0VUdGeVlXMXpJR0Z6SUdGdWVTbGJhMlY1WFM1MllXeDFaVHRjYmlBZ0lDQWdJSDBwTzF4dUlDQWdJQ0FnY21WMGRYSnVJRzl3ZEdsdmJuTTdYRzRnSUNBZ2ZWeHVYRzRnSUNBZ1oyVjBJR1JpVTJOaGJrOXdkR2x2Ym5Nb0tUb2dTVVJDVTJOaGJrOXdkR2x2Ym5NZ2UxeHVJQ0FnSUNBZ2NtVjBkWEp1SUh0Y2JpQWdJQ0FnSUNBZ1pHSlRZMkZ1UlhCemFXeHZiam9nZEdocGN5NWtZbE5qWVc1UVlYSmhiWE11WlhCemFXeHZiaTUyWVd4MVpTQS9QeUF3TGpBeExGeHVJQ0FnSUNBZ0lDQmtZbE5qWVc1TmFXNVFkSE02SUhSb2FYTXVaR0pUWTJGdVVHRnlZVzF6TG0xcGJsQjBjeTUyWVd4MVpTQS9QeUEwWEc0Z0lDQWdJQ0I5TzF4dUlDQWdJSDFjYmx4dUlDQWdJSEIxWW14cFl5Qm5aWFJGWkdsMGIzSW9LVG9nU0ZSTlRFVnNaVzFsYm5RZ2UxeHVJQ0FnSUNBZ1kyOXVjM1FnWkdsMklEMGdkV2t1WkdsMktGdGNiaUFnSUNBZ0lDQWdkR2hwY3k1MFlXSnNaVWx1Y0hWMExuSnZiM1FzWEc0Z0lDQWdJQ0FnSUhSb2FYTXVZMjlzZFcxdWMwbHVjSFYwVW05dmRDeGNiaUFnSUNBZ0lDQWdkR2hwY3k1amIyeDFiVzVRWVhKaGJYTkZaR2wwYjNKU2IyOTBMRnh1SUNBZ0lDQWdJQ0IwYUdsekxtRm5aM0psWjJGMGFXOXVUV1YwYUc5a1NXNXdkWFF1Y205dmRDeGNiaUFnSUNBZ0lDQWdkR2hwY3k1dFpYUm9iMlJKYm5CMWRDNXliMjkwTEZ4dUlDQWdJQ0FnSUNCMGFHbHpMbTFsZEdodlpGTmxkSFJwYm1kelJHbDJMRnh1SUNBZ0lDQWdJQ0IwYUdsekxuQnNiM1JGYldKbFpHUnBibWR6U1c1d2RYUXNYRzRnSUNBZ0lDQWdJSFJvYVhNdWNHOXpkRkJ5YjJObGMzTnBibWRGWkdsMGIzSXVjbTl2ZEN4Y2JpQWdJQ0FnSUYwc0lIdHpkSGxzWlRvZ2UyMXBibGRwWkhSb09pQW5OREl3Y0hnbmZTd2dZMnhoYzNObGN6b2dKM1ZwTFdadmNtMG5mU2s3WEc0Z0lDQWdJQ0J5WlhSMWNtNGdaR2wyTzF4dUlDQWdJSDFjYmx4dUlDQWdJSEIxWW14cFl5Qm5aWFJRWVhKaGJYTW9LU0I3WEc0Z0lDQWdJQ0J5WlhSMWNtNGdlMXh1SUNBZ0lDQWdJQ0IwWVdKc1pUb2dkR2hwY3k1MFlXSnNaVWx1Y0hWMExuWmhiSFZsSVN4Y2JpQWdJQ0FnSUNBZ1kyOXNkVzF1Y3pvZ2RHaHBjeTVqYjJ4MWJXNXpTVzV3ZFhRdWRtRnNkV1VoTEZ4dUlDQWdJQ0FnSUNCdFpYUm9iMlJPWVcxbE9pQjBhR2x6TG0xbGRHaHZaRWx1Y0hWMExuWmhiSFZsSVN4Y2JpQWdJQ0FnSUNBZ2NISmxjSEp2WTJWemMybHVaMFoxYm1OMGFXOXVjem9nZEdocGN5NWpiMngxYlc1UGNIUkZaR2wwYjNKekxtMWhjQ2dvYVhRcElEMCtJR2wwTG5CeVpWQnliMk5sYzNOcGJtZEdkVzVqZEdsdmJpa3NYRzRnSUNBZ0lDQWdJR1JwYzNSaGJtTmxUV1YwY21samN6b2dkR2hwY3k1amIyeDFiVzVQY0hSRlpHbDBiM0p6TG0xaGNDZ29hWFFwSUQwK0lHbDBMbk5wYldsc1lYSnBkSGxOWlhSeWFXTkpibkIxZEM1MllXeDFaU0VwTEZ4dUlDQWdJQ0FnSUNCM1pXbG5hSFJ6T2lCMGFHbHpMbU52YkhWdGJrOXdkRVZrYVhSdmNuTXViV0Z3S0NocGRDa2dQVDRnYVhRdWQyVnBaMmgwSUQ4L0lERXBMRnh1SUNBZ0lDQWdJQ0J2Y0hScGIyNXpPaUI3TGk0dWRHaHBjeTVoYkdkdmNtbDBhRzFQY0hScGIyNXpMQ0F1TGk1MGFHbHpMbVJpVTJOaGJrOXdkR2x2Ym5Nc1hHNGdJQ0FnSUNBZ0lDQWdjSEpsY0hKdlkyVnpjMmx1WjBaMWJtTkJjbWR6T2lCMGFHbHpMbU52YkhWdGJrOXdkRVZrYVhSdmNuTXViV0Z3S0NocGRDa2dQVDRnYVhRdWNISmxjSEp2WTJWemMybHVaMFoxYm1OMGFXOXVVMlYwZEdsdVozTXBmU3hjYmlBZ0lDQWdJQ0FnY0d4dmRFVnRZbVZrWkdsdVozTTZJSFJvYVhNdWNHeHZkRVZ0WW1Wa1pHbHVaM05KYm5CMWRDNTJZV3gxWlN4Y2JpQWdJQ0FnSUNBZ1kyeDFjM1JsY2tWdFltVmtaR2x1WjNNNklHWmhiSE5sTEZ4dUlDQWdJQ0FnSUNCd2IzTjBVSEp2WTJWemMybHVaMFoxYm1OMGFXOXVPaUIwYUdsekxuQnZjM1JRY205alpYTnphVzVuUldScGRHOXlMbkJ2YzNSUWNtOWpaWE56YVc1blJuVnVZM1JwYjI0c1hHNGdJQ0FnSUNBZ0lIQnZjM1JRY205alpYTnphVzVuUm5WdVkzUnBiMjVCY21kek9pQjBhR2x6TG5CdmMzUlFjbTlqWlhOemFXNW5SV1JwZEc5eUxtRnlaM01zWEc0Z0lDQWdJQ0FnSUdGblozSmxZV2RuY21WbllYUnBiMjVOWlhSb2IyUTZJSFJvYVhNdVlXZG5jbVZuWVhScGIyNU5aWFJvYjJSSmJuQjFkQzUyWVd4MVpWeHVJQ0FnSUNBZ2ZUdGNiaUFnSUNCOVhHNTlYRzVjYmx4dVkyeGhjM01nUkdsdFVtVmtkV04wYVc5dVEyOXNkVzF1UldScGRHOXlJSHRjYmlBZ0lDQndjbVZ3Y205alpYTnphVzVuUm5WdVkxTmxkSFJwYm1kelJHbDJJRDBnZFdrdVpHbDJLRnRkS1R0Y2JpQWdJQ0J3Y21Wd2NtOWpaWE56YVc1blJuVnVZM1JwYjI1SmJuQjFkRG9nUkVjdVNXNXdkWFJDWVhObFBITjBjbWx1WnlCOElHNTFiR3crTzF4dUlDQWdJSEJ5WlhCeWIyTmxjM05wYm1kR2RXNWpVMlYwZEdsdVozTkpZMjl1T2lCSVZFMU1SV3hsYldWdWREdGNiaUFnSUNCemFXMXBiR0Z5YVhSNVRXVjBjbWxqU1c1d2RYUWhPaUJFUnk1SmJuQjFkRUpoYzJVOGMzUnlhVzVuSUh3Z2JuVnNiRDQ3WEc0Z0lDQWdjMmx0YVd4aGNtbDBlVTFsZEhKcFkwbHVjSFYwVW05dmRDRTZJRWhVVFV4RmJHVnRaVzUwTzF4dUlDQWdJSEJ5WlhCeWIyTmxjM05wYm1kR2RXNWpkR2x2YmxObGRIUnBibWR6T2lCUGNIUnBiMjV6SUQwZ2UzMDdYRzRnSUNBZ1lXTmpiM0prYVc5dVJHbDJPaUJJVkUxTVJXeGxiV1Z1ZER0Y2JpQWdJQ0JqYjJ4MWJXNDZJRVJITGtOdmJIVnRianRjYmlBZ0lDQnpkWEJ3YjNKMFpXUkdkVzVqZEdsdmJuTTZJRVJwYlZKbFpGTjFjSEJ2Y25SbFpFWjFibU4wYVc5dWMxdGRPMXh1SUNBZ0lHVmthWFJ2Y2tScGRqb2dTRlJOVEVWc1pXMWxiblFnUFNCMWFTNWthWFlvVzEwcE8xeHVJQ0FnSUdoaGMwVjRkSEpoVTJWMGRHbHVaM002SUdKdmIyeGxZVzRnUFNCMGNuVmxPMXh1SUNBZ0lHWjFibU4wYVc5dWMwMWhjRG9nZTF0Zk9pQnpkSEpwYm1kZE9pQkVSeTVHZFc1amZTQTlJSHQ5TzF4dUlDQWdJRzVsWldSelEyOXVabWxuZFhKaGRHbHZiam9nWW05dmJHVmhiaUE5SUdaaGJITmxPMXh1SUNBZ0lIZGxhV2RvZEVsdWNIVjBPaUJFUnk1SmJuQjFkRUpoYzJVOGJuVnRZbVZ5SUh3Z2JuVnNiRDQ3WEc0Z0lDQWdkMlZwWjJoME9pQnVkVzFpWlhJZ1BTQXhPMXh1SUNBZ0lHTnZibk4wY25WamRHOXlLR052YkhWdGJqb2dSRWN1UTI5c2RXMXVMQ0J6ZFhCd2IzSjBaV1JHZFc1amRHbHZibk02SUVScGJWSmxaRk4xY0hCdmNuUmxaRVoxYm1OMGFXOXVjMXRkTENCbFpHbDBiM0pYYVdSMGFITTZJRzUxYldKbGNsdGRLU0I3WEc0Z0lDQWdJQ0IwYUdsekxuZGxhV2RvZEVsdWNIVjBJRDBnZFdrdVpteHZZWFJKYm5CMWRDZ25WMlZwWjJoMEp5d2dNU3dnS0NrZ1BUNGdleUIwYUdsekxuZGxhV2RvZENBOUlIUm9hWE11ZDJWcFoyaDBTVzV3ZFhRdWRtRnNkV1VnUHo4Z01Uc2dmU2s3WEc0Z0lDQWdJQ0IwYUdsekxtTnZiSFZ0YmlBOUlHTnZiSFZ0Ymp0Y2JpQWdJQ0FnSUM4dklITnZjblFnWW5rZ2MzQmxZMmxtYVdOcGRIbGNiaUFnSUNBZ0lIUm9hWE11YzNWd2NHOXlkR1ZrUm5WdVkzUnBiMjV6SUQwZ2MzVndjRzl5ZEdWa1JuVnVZM1JwYjI1ekxuTnZjblFvS0dFc0lHSXBJRDArSUh0Y2JpQWdJQ0FnSUNBZ2FXWWdLQ2hoTG5WdWFYUnpMbXhsYm1kMGFDQTlQVDBnTUNCOGZDQmlMblZ1YVhSekxteGxibWQwYUNBOVBUMGdNQ2tnSmlZZ1lTNTFibWwwY3k1c1pXNW5kR2dnSVQwOUlHSXVkVzVwZEhNdWJHVnVaM1JvS1Z4dUlDQWdJQ0FnSUNBZ0lISmxkSFZ5YmlCaUxuVnVhWFJ6TG14bGJtZDBhQ0F0SUdFdWRXNXBkSE11YkdWdVozUm9PMXh1SUNBZ0lDQWdJQ0JwWmlBb1lTNTFibWwwY3k1c1pXNW5kR2dnSVQwOUlHSXVkVzVwZEhNdWJHVnVaM1JvS1Z4dUlDQWdJQ0FnSUNBZ0lISmxkSFZ5YmlCaExuVnVhWFJ6TG14bGJtZDBhQ0F0SUdJdWRXNXBkSE11YkdWdVozUm9PMXh1SUNBZ0lDQWdJQ0JwWmlBb1lTNXpaVzFVZVhCbGN5NXNaVzVuZEdnZ1BUMDlJREFnZkh3Z1lpNXpaVzFVZVhCbGN5NXNaVzVuZEdnZ1BUMDlJREFwWEc0Z0lDQWdJQ0FnSUNBZ2NtVjBkWEp1SUdJdWMyVnRWSGx3WlhNdWJHVnVaM1JvSUMwZ1lTNXpaVzFVZVhCbGN5NXNaVzVuZEdnN1hHNGdJQ0FnSUNBZ0lHbG1JQ2hoTG5ObGJWUjVjR1Z6TG14bGJtZDBhQ0FoUFQwZ1lpNXpaVzFVZVhCbGN5NXNaVzVuZEdncFhHNGdJQ0FnSUNBZ0lDQWdjbVYwZFhKdUlHRXVjMlZ0Vkhsd1pYTXViR1Z1WjNSb0lDMGdZaTV6WlcxVWVYQmxjeTVzWlc1bmRHZzdYRzRnSUNBZ0lDQWdJSEpsZEhWeWJpQmhMblI1Y0dWekxteGxibWQwYUNBdElHSXVkSGx3WlhNdWJHVnVaM1JvTzF4dUlDQWdJQ0FnZlNrN1hHNGdJQ0FnSUNCMGFHbHpMbk4xY0hCdmNuUmxaRVoxYm1OMGFXOXVjeTVtYjNKRllXTm9LQ2htS1NBOVBpQjdYRzRnSUNBZ0lDQWdJSFJvYVhNdVpuVnVZM1JwYjI1elRXRndXMmRsZEVaMWJtTk9ZVzFsS0dZdVpuVnVZeWxkSUQwZ1ppNW1kVzVqTzF4dUlDQWdJQ0FnZlNrN1hHNGdJQ0FnSUNCMGFHbHpMbkJ5WlhCeWIyTmxjM05wYm1kR2RXNWpkR2x2YmtsdWNIVjBJRDBnZFdrdVkyaHZhV05sU1c1d2RYUW9KMFZ1WTI5a2FXNW5JR1oxYm1OMGFXOXVKeXhjYmlBZ0lDQWdJQ0FnWjJWMFJuVnVZMDVoYldVb2RHaHBjeTV6ZFhCd2IzSjBaV1JHZFc1amRHbHZibk5iTUYwdVpuVnVZeWtzSUhSb2FYTXVjM1Z3Y0c5eWRHVmtSblZ1WTNScGIyNXpMbTFoY0Nnb2FYUXBJRDArSUdkbGRFWjFibU5PWVcxbEtHbDBMbVoxYm1NcEtTeGNiaUFnSUNBZ0lDQWdLQ2tnUFQ0Z2UxeHVJQ0FnSUNBZ0lDQWdJR052Ym5OMElIWmhiQ0E5SUhSb2FYTXVjSEpsY0hKdlkyVnpjMmx1WjBaMWJtTjBhVzl1U1c1d2RYUXVkbUZzZFdVaE8xeHVJQ0FnSUNBZ0lDQWdJR052Ym5OMElHWjFibU1nUFNCMGFHbHpMbVoxYm1OMGFXOXVjMDFoY0Z0MllXeGRPMXh1SUNBZ0lDQWdJQ0FnSUhSb2FYTXVjSEpsY0hKdlkyVnpjMmx1WjBaMWJtTjBhVzl1VTJWMGRHbHVaM01nUFNCN2ZUdGNiaUFnSUNBZ0lDQWdJQ0IwYUdsekxtaGhjMFY0ZEhKaFUyVjBkR2x1WjNNZ1BTQm1kVzVqTG1sdWNIVjBjeTVzWlc1bmRHZ2dQaUF5TzF4dUlDQWdJQ0FnSUNBZ0lHTnZibk4wSUhOMWNFWWdQU0IwYUdsekxuTjFjSEJ2Y25SbFpFWjFibU4wYVc5dWN5NW1hVzVrS0NocGRDa2dQVDRnWjJWMFJuVnVZMDVoYldVb2FYUXVablZ1WXlrZ1BUMDlJSFpoYkNraE8xeHVJQ0FnSUNBZ0lDQWdJSFJvYVhNdVoyVjBVMmx0YVd4aGNtbDBlVTFsZEhKcFkwbHVjSFYwS0hOMWNFWXBPMXh1SUNBZ0lDQWdJQ0FnSUhWcExtVnRjSFI1S0hSb2FYTXVjSEpsY0hKdlkyVnpjMmx1WjBaMWJtTlRaWFIwYVc1bmMwUnBkaWs3WEc0Z0lDQWdJQ0FnSUNBZ2MyVjBkR2x1WjNOUGNHVnVaV1FnUFNCbVlXeHpaVHRjYmlBZ0lDQWdJQ0FnSUNCcFppQW9JWFJvYVhNdWFHRnpSWGgwY21GVFpYUjBhVzVuY3lsY2JpQWdJQ0FnSUNBZ0lDQWdJSFJvYVhNdWNISmxjSEp2WTJWemMybHVaMFoxYm1OVFpYUjBhVzVuYzBsamIyNHVjM1I1YkdVdVpHbHpjR3hoZVNBOUlDZHViMjVsSnp0Y2JpQWdJQ0FnSUNBZ0lDQmxiSE5sWEc0Z0lDQWdJQ0FnSUNBZ0lDQjBhR2x6TG5CeVpYQnliMk5sYzNOcGJtZEdkVzVqVTJWMGRHbHVaM05KWTI5dUxuTjBlV3hsTG1ScGMzQnNZWGtnUFNBblpteGxlQ2M3WEc0Z0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUNrN1hHNGdJQ0FnSUNCMGFHbHpMbkJ5WlhCeWIyTmxjM05wYm1kR2RXNWpkR2x2YmtsdWNIVjBMbkp2YjNRdWMzUjViR1V1WkdsemNHeGhlU0E5SUNkbWJHVjRKenRjYmx4dUlDQWdJQ0FnZEdocGN5NWpjbVZoZEdWVFpYUjBhVzVuYzBScGRpaDBhR2x6TG5CeVpYQnliMk5sYzNOcGJtZEdkVzVqVTJWMGRHbHVaM05FYVhZc0lIUm9hWE11YzNWd2NHOXlkR1ZrUm5WdVkzUnBiMjV6V3pCZExtWjFibU1wWEc0Z0lDQWdJQ0FnSUM1MGFHVnVLQ2dwSUQwK0lIc2dkV2t1Wlcxd2RIa29kR2hwY3k1d2NtVndjbTlqWlhOemFXNW5SblZ1WTFObGRIUnBibWR6UkdsMktUc2dmU2s3WEc1Y2JpQWdJQ0FnSUhSb2FYTXVaMlYwVTJsdGFXeGhjbWwwZVUxbGRISnBZMGx1Y0hWMEtIUm9hWE11YzNWd2NHOXlkR1ZrUm5WdVkzUnBiMjV6V3pCZEtUdGNiaUFnSUNBZ0lIUm9hWE11YUdGelJYaDBjbUZUWlhSMGFXNW5jeUE5SUhSb2FYTXVjM1Z3Y0c5eWRHVmtSblZ1WTNScGIyNXpXekJkTG1aMWJtTXVhVzV3ZFhSekxteGxibWQwYUNBK0lESTdYRzVjYmlBZ0lDQWdJR3hsZENCelpYUjBhVzVuYzA5d1pXNWxaQ0E5SUdaaGJITmxPMXh1SUNBZ0lDQWdkR2hwY3k1d2NtVndjbTlqWlhOemFXNW5SblZ1WTFObGRIUnBibWR6U1dOdmJpQTlJSFZwTG1samIyNXpMbk5sZEhScGJtZHpLR0Z6ZVc1aklDZ3BJRDArSUh0Y2JpQWdJQ0FnSUNBZ2MyVjBkR2x1WjNOUGNHVnVaV1FnUFNBaGMyVjBkR2x1WjNOUGNHVnVaV1E3WEc0Z0lDQWdJQ0FnSUdsbUlDaHpaWFIwYVc1bmMwOXdaVzVsWkNrZ2UxeHVJQ0FnSUNBZ0lDQWdJR0YzWVdsMElIUm9hWE11WTNKbFlYUmxVMlYwZEdsdVozTkVhWFlvZEdocGN5NXdjbVZ3Y205alpYTnphVzVuUm5WdVkxTmxkSFJwYm1kelJHbDJMRnh1SUNBZ0lDQWdJQ0FnSUNBZ2RHaHBjeTVtZFc1amRHbHZibk5OWVhCYmRHaHBjeTV3Y21Wd2NtOWpaWE56YVc1blJuVnVZM1JwYjI1SmJuQjFkQzUyWVd4MVpTRmRLVHRjYmlBZ0lDQWdJQ0FnZlNCbGJITmxJSHRjYmlBZ0lDQWdJQ0FnSUNCMWFTNWxiWEIwZVNoMGFHbHpMbkJ5WlhCeWIyTmxjM05wYm1kR2RXNWpVMlYwZEdsdVozTkVhWFlwTzF4dUlDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNCOUxDQW5UVzlrYVdaNUlHVnVZMjlrYVc1bklHWjFibU4wYVc5dUlIQmhjbUZ0WlhSbGNuTW5LVHRjYmx4dUlDQWdJQ0FnZEdocGN5NXdjbVZ3Y205alpYTnphVzVuUm5WdVkzUnBiMjVKYm5CMWRDNXliMjkwTG1Oc1lYTnpUR2x6ZEM1aFpHUW9KMjFzTFdScGJTMXlaV1IxWTNScGIyNHRjMlYwZEdsdVozTXRhVzV3ZFhRbktUdGNiaUFnSUNBZ0lIUm9hWE11Y0hKbGNISnZZMlZ6YzJsdVowWjFibU4wYVc5dVNXNXdkWFF1Y205dmRDNXdjbVZ3Wlc1a0tIUm9hWE11Y0hKbGNISnZZMlZ6YzJsdVowWjFibU5UWlhSMGFXNW5jMGxqYjI0cE8xeHVYRzRnSUNBZ0lDQnBaaUFvSVhSb2FYTXVhR0Z6UlhoMGNtRlRaWFIwYVc1bmN5bGNiaUFnSUNBZ0lDQWdkR2hwY3k1d2NtVndjbTlqWlhOemFXNW5SblZ1WTFObGRIUnBibWR6U1dOdmJpNXpkSGxzWlM1a2FYTndiR0Y1SUQwZ0oyNXZibVVuTzF4dUlDQWdJQ0FnWld4elpWeHVJQ0FnSUNBZ0lDQjBhR2x6TG5CeVpYQnliMk5sYzNOcGJtZEdkVzVqVTJWMGRHbHVaM05KWTI5dUxuTjBlV3hsTG1ScGMzQnNZWGtnUFNBblpteGxlQ2M3WEc1Y2JpQWdJQ0FnSUhSb2FYTXVibVZsWkhORGIyNW1hV2QxY21GMGFXOXVJRDBnSVNoemRYQndiM0owWldSR2RXNWpkR2x2Ym5NdWJHVnVaM1JvSUR3Z01pQW1KaUFoZEdocGN5NW9ZWE5GZUhSeVlWTmxkSFJwYm1keklDWW1YRzRnSUNBZ0lDQnpkWEJ3YjNKMFpXUkdkVzVqZEdsdmJuTmJNRjB1WkdsemRHRnVZMlZHZFc1amRHbHZibk11YkdWdVozUm9JRHdnTWlrN1hHNWNiaUFnSUNBZ0lHTnZibk4wSUdOdmJIVnRibFJwZEd4bElEMGdkV2t1YURNb2RHaHBjeTVqYjJ4MWJXNHVibUZ0WlN3Z2UyTnNZWE56WlhNNklDZHRiQzFrYVcwdGNtVmtkV04wYVc5dUxXTnZiSFZ0YmkxbFpHbDBiM0l0WTI5c2RXMXVMWFJwZEd4bEozMHBPMXh1SUNBZ0lDQWdZMjl1YzNRZ1kyOXNUM0IwUldScGRHOXljeUE5SUZ0Y2JpQWdJQ0FnSUNBZ1kyOXNkVzF1VkdsMGJHVXNJSFJvYVhNdWNISmxjSEp2WTJWemMybHVaMFoxYm1OMGFXOXVTVzV3ZFhRdWNtOXZkQ3hjYmlBZ0lDQWdJQ0FnZEdocGN5NXphVzFwYkdGeWFYUjVUV1YwY21salNXNXdkWFJTYjI5MExDQjBhR2x6TG5kbGFXZG9kRWx1Y0hWMExuSnZiM1JjYmlBZ0lDQWdJRjA3WEc0Z0lDQWdJQ0F2THlCaGMzTnBaMjRnZEc5dmJIUnBjSE5jYmlBZ0lDQWdJSFZwTG5SdmIyeDBhWEF1WW1sdVpDaGpiMngxYlc1VWFYUnNaU3dnZEdocGN5NWpiMngxYlc0dWJtRnRaU2s3WEc1Y2JpQWdJQ0FnSUdOdmJFOXdkRVZrYVhSdmNuTXVabTl5UldGamFDZ29hWFFzSUdrcElEMCtJSHRjYmlBZ0lDQWdJQ0FnYVhRdWMzUjViR1V1ZDJsa2RHZ2dQU0JnSkh0bFpHbDBiM0pYYVdSMGFITmJhVjE5SldBN1hHNGdJQ0FnSUNCOUtUdGNibHh1SUNBZ0lDQWdMeTloWkdRZ1kyeGhjM05sYzF4dUlDQWdJQ0FnWTI5c1QzQjBSV1JwZEc5eWN5NW1iM0pGWVdOb0tDaHBkQ2tnUFQ0Z2FYUXVZMnhoYzNOTWFYTjBMbUZrWkNnbmJXd3RaR2x0TFhKbFpIVmpkR2x2YmkxamIyeDFiVzR0WldScGRHOXlMV2x1Y0hWMExYSnZiM1FuS1NrN1hHNWNiaUFnSUNBZ0lHTnZibk4wSUdScGMzUmhibU5sVDNCMGFXOXVjMFJwZGlBOUlIVnBMbVJwZGtnb1hHNGdJQ0FnSUNBZ0lHTnZiRTl3ZEVWa2FYUnZjbk1zSUh0amJHRnpjMlZ6T2lBbmJXd3RaR2x0TFhKbFpIVmpkR2x2YmkxamIyeDFiVzR0WldScGRHOXlMWEp2YjNRbmZWeHVJQ0FnSUNBZ0tUdGNibHh1SUNBZ0lDQWdkR2hwY3k1aFkyTnZjbVJwYjI1RWFYWWdQU0IxYVM1a2FYWldLRnRkS1R0Y2JpQWdJQ0FnSUhSb2FYTXVaV1JwZEc5eVJHbDJMbUZ3Y0dWdVpFTm9hV3hrS0dScGMzUmhibU5sVDNCMGFXOXVjMFJwZGlrN1hHNGdJQ0FnSUNCMGFHbHpMbVZrYVhSdmNrUnBkaTVoY0hCbGJtUkRhR2xzWkNoMGFHbHpMbkJ5WlhCeWIyTmxjM05wYm1kR2RXNWpVMlYwZEdsdVozTkVhWFlwTzF4dUlDQWdJQ0FnZEdocGN5NWhZMk52Y21ScGIyNUVhWFl1WVhCd1pXNWtRMmhwYkdRb2RHaHBjeTVsWkdsMGIzSkVhWFlwTzF4dUlDQWdJSDFjYmx4dUlDQWdJR2RsZEZOcGJXbHNZWEpwZEhsTlpYUnlhV05KYm5CMWRDaHdjbVZHZFc1ak9pQkVhVzFTWldSVGRYQndiM0owWldSR2RXNWpkR2x2Ym5NcElIdGNiaUFnSUNBZ0lHTnZibk4wSUdsdWNIVjBJRDBnZFdrdVkyaHZhV05sU1c1d2RYUW9KMU5wYldsc1lYSnBkSGtnYldWMGNtbGpKeXdnY0hKbFJuVnVZeTVrYVhOMFlXNWpaVVoxYm1OMGFXOXVjMXN3WFN3Z2NISmxSblZ1WXk1a2FYTjBZVzVqWlVaMWJtTjBhVzl1Y3lrN1hHNGdJQ0FnSUNCcFppQW9JWFJvYVhNdWMybHRhV3hoY21sMGVVMWxkSEpwWTBsdWNIVjBVbTl2ZENrZ2UxeHVJQ0FnSUNBZ0lDQjBhR2x6TG5OcGJXbHNZWEpwZEhsTlpYUnlhV05KYm5CMWRGSnZiM1FnUFNCcGJuQjFkQzV5YjI5ME8xeHVJQ0FnSUNBZ0lDQjBhR2x6TG5OcGJXbHNZWEpwZEhsTlpYUnlhV05KYm5CMWRDQTlJR2x1Y0hWME8xeHVJQ0FnSUNBZ2ZTQmxiSE5sSUh0Y2JpQWdJQ0FnSUNBZ2RXa3VaVzF3ZEhrb2RHaHBjeTV6YVcxcGJHRnlhWFI1VFdWMGNtbGpTVzV3ZFhSU2IyOTBLVHRjYmlBZ0lDQWdJQ0FnZEdocGN5NXphVzFwYkdGeWFYUjVUV1YwY21salNXNXdkWFFnUFNCcGJuQjFkRHRjYmlBZ0lDQWdJQ0FnUVhKeVlYa3Vabkp2YlNoMGFHbHpMbk5wYldsc1lYSnBkSGxOWlhSeWFXTkpibkIxZEM1eWIyOTBMbU5vYVd4a2NtVnVLVnh1SUNBZ0lDQWdJQ0FnSUM1bWIzSkZZV05vS0NocGRDa2dQVDRnZEdocGN5NXphVzFwYkdGeWFYUjVUV1YwY21salNXNXdkWFJTYjI5MExtRndjR1Z1WkVOb2FXeGtLR2wwS1NrN1hHNGdJQ0FnSUNCOVhHNGdJQ0FnZlZ4dVhHNGdJQ0FnWjJWMElIQnlaVkJ5YjJObGMzTnBibWRHZFc1amRHbHZiaWdwSUh0Y2JpQWdJQ0FnSUhKbGRIVnliaUIwYUdsekxtWjFibU4wYVc5dWMwMWhjRnQwYUdsekxuQnlaWEJ5YjJObGMzTnBibWRHZFc1amRHbHZia2x1Y0hWMExuWmhiSFZsSVYwN1hHNGdJQ0FnZlZ4dUlDQWdJR0Z6ZVc1aklHTnlaV0YwWlZObGRIUnBibWR6UkdsMktIQmhjbUZ0YzBadmNtMDZJRWhVVFV4RmJHVnRaVzUwTENCbWRXNWpPaUJFUnk1R2RXNWpLVG9nVUhKdmJXbHpaVHhJVkUxTVJXeGxiV1Z1ZEQ0Z2UxeHVJQ0FnSUNBZ2RXa3VaVzF3ZEhrb2NHRnlZVzF6Um05eWJTazdYRzRnSUNBZ0lDQnBaaUFvWm5WdVl5NXBibkIxZEhNdWJHVnVaM1JvSUR3Z015bGNiaUFnSUNBZ0lDQWdjbVYwZFhKdUlIVnBMbVJwZGlncE8xeHVJQ0FnSUNBZ1kyOXVjM1FnWm1NZ1BTQm1kVzVqTG5CeVpYQmhjbVVvS1R0Y2JpQWdJQ0FnSUdOdmJuTjBJR2x1Y0hWMGN5QTlJR0YzWVdsMElHWmpMbUoxYVd4a1JXUnBkRzl5S0hWcExtUnBkaWdwS1R0Y2JpQWdJQ0FnSUdadmNpQW9iR1YwSUdrZ1BTQXlPeUJwSUR3Z1puVnVZeTVwYm5CMWRITXViR1Z1WjNSb095QnBLeXNwSUh0Y2JpQWdJQ0FnSUNBZ1kyOXVjM1FnWmtsdWNIVjBJRDBnWm5WdVl5NXBibkIxZEhOYmFWMDdYRzRnSUNBZ0lDQWdJR052Ym5OMElIWmhiQ0E5SUhSb2FYTXVjSEpsY0hKdlkyVnpjMmx1WjBaMWJtTjBhVzl1VTJWMGRHbHVaM05iWmtsdWNIVjBMbTVoYldWZElIeDhYRzRnSUNBZ0lDQWdJQ0FnSUNCbVl5NXBibkIxZEZCaGNtRnRjMXRtZFc1akxtbHVjSFYwYzF0cFhTNXVZVzFsWFM1MllXeDFaU0I4ZkNCbVNXNXdkWFF1WkdWbVlYVnNkRlpoYkhWbE8xeHVJQ0FnSUNBZ0lDQnBaaUFvZG1Gc0tWeHVJQ0FnSUNBZ0lDQWdJSFJvYVhNdWNISmxjSEp2WTJWemMybHVaMFoxYm1OMGFXOXVVMlYwZEdsdVozTmJaa2x1Y0hWMExtNWhiV1ZkSUQwZ2RtRnNPMXh1SUNBZ0lDQWdJQ0JqYjI1emRDQnBibkIxZENBOUlHbHVjSFYwY3k1bWFXNWtLQ2hwYm5BcElEMCtJR2x1Y0M1d2NtOXdaWEowZVM1dVlXMWxJRDA5UFNCbVNXNXdkWFF1Ym1GdFpTazdYRzRnSUNBZ0lDQWdJR2xtSUNnaGFXNXdkWFFwWEc0Z0lDQWdJQ0FnSUNBZ1kyOXVkR2x1ZFdVN1hHNGdJQ0FnSUNBZ0lHbG1JQ2gwYUdsekxuQnlaWEJ5YjJObGMzTnBibWRHZFc1amRHbHZibE5sZEhScGJtZHpXMlpKYm5CMWRDNXVZVzFsWFNBaFBUMGdiblZzYkNBbUpseHVJQ0FnSUNBZ0lDQWdJQ0FnZEdocGN5NXdjbVZ3Y205alpYTnphVzVuUm5WdVkzUnBiMjVUWlhSMGFXNW5jMXRtU1c1d2RYUXVibUZ0WlYwZ0lUMDlJSFZ1WkdWbWFXNWxaQ2xjYmlBZ0lDQWdJQ0FnSUNCcGJuQjFkQzUyWVd4MVpTQTlJSFJvYVhNdWNISmxjSEp2WTJWemMybHVaMFoxYm1OMGFXOXVVMlYwZEdsdVozTmJaa2x1Y0hWMExtNWhiV1ZkTzF4dUlDQWdJQ0FnSUNCcGJuQjFkQzV2YmtOb1lXNW5aV1FvS0NrZ1BUNGdleUIwYUdsekxuQnlaWEJ5YjJObGMzTnBibWRHZFc1amRHbHZibE5sZEhScGJtZHpXMlpKYm5CMWRDNXVZVzFsWFNBOUlHbHVjSFYwTG5aaGJIVmxPeUI5S1R0Y2JpQWdJQ0FnSUNBZ2NHRnlZVzF6Um05eWJTNWhjSEJsYm1Rb2FXNXdkWFF1Y205dmRDazdYRzRnSUNBZ0lDQjlYRzRnSUNBZ0lDQndZWEpoYlhOR2IzSnRMbk4wZVd4bExtMWhjbWRwYmtKdmRIUnZiU0E5SUNjeE1IQjRKenRjYmlBZ0lDQWdJSEpsZEhWeWJpQndZWEpoYlhOR2IzSnRPMXh1SUNBZ0lIMWNibjFjYmx4dVpuVnVZM1JwYjI0Z1oyVjBSblZ1WTA1aGJXVW9ablZ1WXpvZ1JFY3VSblZ1WXlrZ2UxeHVJQ0J5WlhSMWNtNGdablZ1WXk1bWNtbGxibVJzZVU1aGJXVWdQejhnWm5WdVl5NXVZVzFsTzF4dWZWeHVYRzVqYkdGemN5QlFiM04wVUhKdlkyVnpjMmx1WjBaMWJtTkZaR2wwYjNJZ2UxeHVJQ0J3YjNOMFVISnZZMlZ6YzJsdVowWjFibU4wYVc5dWMwMWhjRG9nZTF0clpYazZJSE4wY21sdVoxMDZJRVJITGtaMWJtTWdmQ0J1ZFd4c2ZTQTlJSHQ5TzF4dUlDQndiM04wVUhKdlkyVnpjMmx1WjBaMWJtTjBhVzl1U1c1d2RYUTZJRVJITGtOb2IybGpaVWx1Y0hWMFBITjBjbWx1WnlCOElHNTFiR3crTzF4dUlDQndjbWwyWVhSbElGOXliMjkwT2lCSVZFMU1SV3hsYldWdWRDQTlJSFZwTG1ScGRpaGJYU2s3WEc0Z0lIQnlhWFpoZEdVZ1gzQnZjM1JRY205alpYTnphVzVuUVhKbmN6b2dUM0IwYVc5dWN5QTlJSHQ5TzF4dUlDQndjbWwyWVhSbElGOWhjbWR6Uld4bGJXVnVkRG9nU0ZSTlRFVnNaVzFsYm5RZ1BTQjFhUzVrYVhZb1cxMHBPMXh1SUNCd2NtbDJZWFJsSUY5elpYUjBhVzVuYzBsamIyNDZJRWhVVFV4RmJHVnRaVzUwTzF4dUlDQndjbWwyWVhSbElGOXpaWFIwYVc1bmMwOXdaVzVsWkRvZ1ltOXZiR1ZoYmlBOUlHWmhiSE5sTzF4dUlDQmpiMjV6ZEhKMVkzUnZjaWdwSUh0Y2JpQWdJQ0IwYUdsekxsOXpaWFIwYVc1bmMwbGpiMjRnUFNCMWFTNXBZMjl1Y3k1elpYUjBhVzVuY3loaGMzbHVZeUFvS1NBOVBpQjdYRzRnSUNBZ0lDQjBhR2x6TGw5elpYUjBhVzVuYzA5d1pXNWxaQ0E5SUNGMGFHbHpMbDl6WlhSMGFXNW5jMDl3Wlc1bFpEdGNiaUFnSUNBZ0lHbG1JQ2gwYUdsekxsOXpaWFIwYVc1bmMwOXdaVzVsWkNsY2JpQWdJQ0FnSUNBZ2RHaHBjeTVmWVhKbmMwVnNaVzFsYm5RdWMzUjViR1V1WkdsemNHeGhlU0E5SUNkaWJHOWpheWM3WEc0Z0lDQWdJQ0JsYkhObFhHNGdJQ0FnSUNBZ0lIUm9hWE11WDJGeVozTkZiR1Z0Wlc1MExuTjBlV3hsTG1ScGMzQnNZWGtnUFNBbmJtOXVaU2M3WEc0Z0lDQWdmU2s3WEc0Z0lDQWdkR2hwY3k1ZllYSm5jMFZzWlcxbGJuUXVjM1I1YkdVdVpHbHpjR3hoZVNBOUlDZHViMjVsSnp0Y2JseHVJQ0FnSUdOdmJuTjBJSEJ2YzNSUWNtOWpaWE56YVc1blJuVnVZM01nUFNCRVJ5NUdkVzVqTG1acGJtUW9lM1JoWjNNNklGdEVTVTFmVWtWRVgxQlBVMVJRVWs5RFJWTlRTVTVIWDBaVlRrTlVTVTlPWDFSQlIxMTlLVnh1SUNBZ0lDQWdMbVpwYkhSbGNpZ29aaWtnUFQ0Z1ppNXBibkIxZEhNdWJHVnVaM1JvSUQ0OUlESXBPMXh1SUNBZ0lIQnZjM1JRY205alpYTnphVzVuUm5WdVkzTXVabTl5UldGamFDZ29aaWtnUFQ0Z2UxeHVJQ0FnSUNBZ1kyOXVjM1FnYm1GdFpTQTlJR1l1Wm5KcFpXNWtiSGxPWVcxbElEOC9JR1l1Ym1GdFpUdGNiaUFnSUNBZ0lIUm9hWE11Y0c5emRGQnliMk5sYzNOcGJtZEdkVzVqZEdsdmJuTk5ZWEJiYm1GdFpWMGdQU0JtTzF4dUlDQWdJSDBwTzF4dUlDQWdJSFJvYVhNdWNHOXpkRkJ5YjJObGMzTnBibWRHZFc1amRHbHZibk5OWVhCYkowNXZibVVuWFNBOUlHNTFiR3c3WEc1Y2JpQWdJQ0JqYjI1emRDQmtaV1poZFd4MFVHOXpkRkJ5YjJObGMzTnBibWRHZFc1aklEMGdUMkpxWldOMExtdGxlWE1vZEdocGN5NXdiM04wVUhKdlkyVnpjMmx1WjBaMWJtTjBhVzl1YzAxaGNDa3VabWx1WkNnb2FYUXBJRDArWEc0Z0lDQWdJQ0FoSVhSb2FYTXVjRzl6ZEZCeWIyTmxjM05wYm1kR2RXNWpkR2x2Ym5OTllYQmJhWFJkUHk1dmNIUnBiMjV6UHk1YlJFbE5YMUpGUkY5RVJVWkJWVXhVWDFCUFUxUlFVazlEUlZOVFNVNUhYMFpWVGtOVVNVOU9YMDFGVkVGZEtTQS9QeUFuVG05dVpTYzdYRzRnSUNBZ2RHaHBjeTV3YjNOMFVISnZZMlZ6YzJsdVowWjFibU4wYVc5dVNXNXdkWFFnUFZ4dUlDQWdJQ0FnZFdrdVkyaHZhV05sU1c1d2RYUW9KMUJ2YzNSd2NtOWpaWE56YVc1bkp5d2daR1ZtWVhWc2RGQnZjM1JRY205alpYTnphVzVuUm5WdVl5eGNiaUFnSUNBZ0lDQWdUMkpxWldOMExtdGxlWE1vZEdocGN5NXdiM04wVUhKdlkyVnpjMmx1WjBaMWJtTjBhVzl1YzAxaGNDa3NJR0Z6ZVc1aklDZ3BJRDArSUhzZ1lYZGhhWFFnZEdocGN5NXZia1oxYm1OMGFXOXVRMmhoYm1kbFpDZ3BPeUI5TEZ4dUlDQWdJQ0FnSUNCN2JuVnNiR0ZpYkdVNklHWmhiSE5sZlNrN1hHNGdJQ0FnZEdocGN5NXZia1oxYm1OMGFXOXVRMmhoYm1kbFpDZ3BPMXh1SUNBZ0lIUm9hWE11Y0c5emRGQnliMk5sYzNOcGJtZEdkVzVqZEdsdmJrbHVjSFYwTG01MWJHeGhZbXhsSUQwZ1ptRnNjMlU3WEc0Z0lDQWdkR2hwY3k1d2IzTjBVSEp2WTJWemMybHVaMFoxYm1OMGFXOXVTVzV3ZFhRdVkyeGhjM05NYVhOMExtRmtaQ2duYld3dFpHbHRMWEpsWkhWamRHbHZiaTF6WlhSMGFXNW5jeTFwYm5CMWRDY3BPMXh1SUNBZ0lIUm9hWE11Y0c5emRGQnliMk5sYzNOcGJtZEdkVzVqZEdsdmJrbHVjSFYwTG5KdmIzUXVjSEpsY0dWdVpDaDBhR2x6TGw5elpYUjBhVzVuYzBsamIyNHBPMXh1SUNBZ0lIUm9hWE11WDNKdmIzUXVZWEJ3Wlc1a1EyaHBiR1FvZEdocGN5NXdiM04wVUhKdlkyVnpjMmx1WjBaMWJtTjBhVzl1U1c1d2RYUXVjbTl2ZENrN1hHNGdJQ0FnZEdocGN5NWZjbTl2ZEM1aGNIQmxibVJEYUdsc1pDaDBhR2x6TGw5aGNtZHpSV3hsYldWdWRDazdYRzRnSUgxY2JseHVJQ0JuWlhRZ2NHOXpkRkJ5YjJObGMzTnBibWRHZFc1amRHbHZiaWdwSUh0Y2JpQWdJQ0J5WlhSMWNtNGdkR2hwY3k1d2IzTjBVSEp2WTJWemMybHVaMFoxYm1OMGFXOXVTVzV3ZFhRdWRtRnNkV1VnUDF4dUlDQWdJQ0FnZEdocGN5NXdiM04wVUhKdlkyVnpjMmx1WjBaMWJtTjBhVzl1YzAxaGNGdDBhR2x6TG5CdmMzUlFjbTlqWlhOemFXNW5SblZ1WTNScGIyNUpibkIxZEM1MllXeDFaVjBnT2lCdWRXeHNPMXh1SUNCOVhHNWNiaUFnWVhONWJtTWdiMjVHZFc1amRHbHZia05vWVc1blpXUW9LU0I3WEc0Z0lDQWdZMjl1YzNRZ1puVnVZeUE5SUhSb2FYTXVjRzl6ZEZCeWIyTmxjM05wYm1kR2RXNWpkR2x2Ymp0Y2JpQWdJQ0IxYVM1bGJYQjBlU2gwYUdsekxsOWhjbWR6Uld4bGJXVnVkQ2s3WEc0Z0lDQWdkR2hwY3k1ZmNHOXpkRkJ5YjJObGMzTnBibWRCY21keklEMGdlMzA3WEc0Z0lDQWdhV1lnS0NGbWRXNWpJSHg4SUdaMWJtTXVhVzV3ZFhSekxteGxibWQwYUNBOElETXBJSHRjYmlBZ0lDQWdJSFJvYVhNdVgzTmxkSFJwYm1kelNXTnZiaTV6ZEhsc1pTNWthWE53YkdGNUlEMGdKMjV2Ym1Vbk8xeHVJQ0FnSUNBZ2NtVjBkWEp1TzF4dUlDQWdJSDA3WEc0Z0lDQWdkR2hwY3k1ZmMyVjBkR2x1WjNOSlkyOXVMbk4wZVd4bExtUnBjM0JzWVhrZ1BTQW5abXhsZUNjN1hHNGdJQ0FnWTI5dWMzUWdabU1nUFNCbWRXNWpMbkJ5WlhCaGNtVW9LVHRjYmlBZ0lDQmpiMjV6ZENCcGJuQjFkSE1nUFNCaGQyRnBkQ0JtWXk1aWRXbHNaRVZrYVhSdmNpaDFhUzVrYVhZb0tTazdYRzRnSUNBZ1ptOXlJQ2hzWlhRZ2FTQTlJREk3SUdrZ1BDQm1kVzVqTG1sdWNIVjBjeTVzWlc1bmRHZzdJR2tyS3lrZ2UxeHVJQ0FnSUNBZ1kyOXVjM1FnWmtsdWNIVjBJRDBnWm5WdVl5NXBibkIxZEhOYmFWMDdYRzRnSUNBZ0lDQmpiMjV6ZENCMllXd2dQU0IwYUdsekxsOXdiM04wVUhKdlkyVnpjMmx1WjBGeVozTmJaa2x1Y0hWMExtNWhiV1ZkSUh4OFhHNGdJQ0FnSUNBZ0lHWmpMbWx1Y0hWMFVHRnlZVzF6VzJaMWJtTXVhVzV3ZFhSelcybGRMbTVoYldWZExuWmhiSFZsSUh4OElHWkpibkIxZEM1a1pXWmhkV3gwVm1Gc2RXVTdYRzRnSUNBZ0lDQnBaaUFvZG1Gc0tWeHVJQ0FnSUNBZ0lDQjBhR2x6TGw5d2IzTjBVSEp2WTJWemMybHVaMEZ5WjNOYlprbHVjSFYwTG01aGJXVmRJRDBnZG1Gc08xeHVJQ0FnSUNBZ1kyOXVjM1FnYVc1d2RYUWdQU0JwYm5CMWRITXVabWx1WkNnb2FXNXdLU0E5UGlCcGJuQXVjSEp2Y0dWeWRIa3VibUZ0WlNBOVBUMGdaa2x1Y0hWMExtNWhiV1VwTzF4dUlDQWdJQ0FnYVdZZ0tDRnBibkIxZENsY2JpQWdJQ0FnSUNBZ1kyOXVkR2x1ZFdVN1hHNGdJQ0FnSUNCcGJuQjFkQzV2YmtOb1lXNW5aV1FvS0NrZ1BUNGdleUIwYUdsekxsOXdiM04wVUhKdlkyVnpjMmx1WjBGeVozTmJaa2x1Y0hWMExtNWhiV1ZkSUQwZ2FXNXdkWFF1ZG1Gc2RXVTdJSDBwTzF4dUlDQWdJQ0FnZEdocGN5NWZZWEpuYzBWc1pXMWxiblF1WVhCd1pXNWtLR2x1Y0hWMExuSnZiM1FwTzF4dUlDQWdJSDFjYmlBZ2ZWeHVYRzRnSUdkbGRDQnliMjkwS0NrZ2UxeHVJQ0FnSUhKbGRIVnliaUIwYUdsekxsOXliMjkwTzF4dUlDQjlYRzVjYmlBZ1oyVjBJR0Z5WjNNb0tTQjdYRzRnSUNBZ2NtVjBkWEp1SUhSb2FYTXVYM0J2YzNSUWNtOWpaWE56YVc1blFYSm5jenRjYmlBZ2ZWeHVmVnh1SWwxOSIsImV4cG9ydCBjb25zdCBESU1FTlNJT05BTElUWV9SRURVQ0VSX1RFUk1JTkFURV9FVkVOVCA9ICdkaW1lbnNpb25hbGl0eS1yZWR1Y2VyLXRlcm1pbmF0ZS1ldmVudCc7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2lZMjl1YzNSekxtcHpJaXdpYzI5MWNtTmxVbTl2ZENJNklpSXNJbk52ZFhKalpYTWlPbHNpWTI5dWMzUnpMblJ6SWwwc0ltNWhiV1Z6SWpwYlhTd2liV0Z3Y0dsdVozTWlPaUpCUVVGQkxFMUJRVTBzUTBGQlF5eE5RVUZOTEhORFFVRnpReXhIUVVGSExIZERRVUYzUXl4RFFVRkRJaXdpYzI5MWNtTmxjME52Ym5SbGJuUWlPbHNpWlhod2IzSjBJR052Ym5OMElFUkpUVVZPVTBsUFRrRk1TVlJaWDFKRlJGVkRSVkpmVkVWU1RVbE9RVlJGWDBWV1JVNVVJRDBnSjJScGJXVnVjMmx2Ym1Gc2FYUjVMWEpsWkhWalpYSXRkR1Z5YldsdVlYUmxMV1YyWlc1MEp6dGNiaUpkZlE9PSIsImltcG9ydCB7IERpc3RhbmNlQWdncmVnYXRpb25NZXRob2RzIH0gZnJvbSAnLi90eXBlcyc7XG5leHBvcnQgY29uc3QgaXNOaWwgPSAoeCkgPT4geCA9PT0gbnVsbCB8fCB4ID09PSB1bmRlZmluZWQ7XG5leHBvcnQgZnVuY3Rpb24gaW5zZXJ0U21hbGxlcihkaXN0YW5jZXNBciwgaW5kZXhlcywgbnVtLCBpbmRleCkge1xuICAgIGlmIChudW0gPiBkaXN0YW5jZXNBcltkaXN0YW5jZXNBci5sZW5ndGggLSAxXSlcbiAgICAgICAgcmV0dXJuO1xuICAgIGNvbnN0IG5ld1Bvc2l0aW9uID0gZGlzdGFuY2VzQXIuZmluZEluZGV4KCh2KSA9PiBudW0gPCB2KTtcbiAgICBkaXN0YW5jZXNBci5wb3AoKTtcbiAgICBkaXN0YW5jZXNBci5zcGxpY2UobmV3UG9zaXRpb24sIDAsIG51bSk7XG4gICAgaW5kZXhlcy5wb3AoKTtcbiAgICBpbmRleGVzLnNwbGljZShuZXdQb3NpdGlvbiwgMCwgaW5kZXgpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGluc2VydExhcmdlcihkaXN0YW5jZXNBciwgaW5kZXhlcywgbnVtLCBpbmRleCkge1xuICAgIGlmIChudW0gPCBkaXN0YW5jZXNBcltkaXN0YW5jZXNBci5sZW5ndGggLSAxXSlcbiAgICAgICAgcmV0dXJuO1xuICAgIGNvbnN0IG5ld1Bvc2l0aW9uID0gZGlzdGFuY2VzQXIuZmluZEluZGV4KCh2KSA9PiBudW0gPiB2KTtcbiAgICBkaXN0YW5jZXNBci5wb3AoKTtcbiAgICBkaXN0YW5jZXNBci5zcGxpY2UobmV3UG9zaXRpb24sIDAsIG51bSk7XG4gICAgaW5kZXhlcy5wb3AoKTtcbiAgICBpbmRleGVzLnNwbGljZShuZXdQb3NpdGlvbiwgMCwgaW5kZXgpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGdldEFnZ3JlZ2F0aW9uRnVuY3Rpb24oYWdncmVnYXRpb25NZXRob2QsIHdlaWdodHMpIHtcbiAgICBzd2l0Y2ggKGFnZ3JlZ2F0aW9uTWV0aG9kKSB7XG4gICAgICAgIGNhc2UgRGlzdGFuY2VBZ2dyZWdhdGlvbk1ldGhvZHMuTUFOSEFUVEFOOlxuICAgICAgICAgICAgcmV0dXJuICh2cykgPT4gdnMucmVkdWNlKChhY2MsIHZhbCwgaWR4KSA9PiBhY2MgKyB2YWwgKiB3ZWlnaHRzW2lkeF0sIDApO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmV0dXJuICh2cykgPT4ge1xuICAgICAgICAgICAgICAgIC8vIGV1Y2xpZGVhblxuICAgICAgICAgICAgICAgIGNvbnN0IHN1bSA9IHZzLnJlZHVjZSgoYWNjLCB2YWwsIGlkeCkgPT4gYWNjICsgKHZhbCAqIHdlaWdodHNbaWR4XSkgKiogMiwgMCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIE1hdGguc3FydChzdW0pO1xuICAgICAgICAgICAgfTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2lkWFJwYkhNdWFuTWlMQ0p6YjNWeVkyVlNiMjkwSWpvaUlpd2ljMjkxY21ObGN5STZXeUoxZEdsc2N5NTBjeUpkTENKdVlXMWxjeUk2VzEwc0ltMWhjSEJwYm1keklqb2lRVUZCUVN4UFFVRlBMRVZCUVRSQ0xEQkNRVUV3UWl4RlFVRkRMRTFCUVUwc1UwRkJVeXhEUVVGRE8wRkJSVGxGTEUxQlFVMHNRMEZCUXl4TlFVRk5MRXRCUVVzc1IwRkJSeXhEUVVGRExFTkJRVTBzUlVGQlJTeEZRVUZGTEVOQlFVTXNRMEZCUXl4TFFVRkxMRWxCUVVrc1NVRkJTU3hEUVVGRExFdEJRVXNzVTBGQlV5eERRVUZETzBGQlJTOUVMRTFCUVUwc1ZVRkJWU3hoUVVGaExFTkJRVU1zVjBGQmNVSXNSVUZCUlN4UFFVRnBRaXhGUVVGRkxFZEJRVmNzUlVGQlJTeExRVUZoTzBsQlEyaEhMRWxCUVVrc1IwRkJSeXhIUVVGSExGZEJRVmNzUTBGQlF5eFhRVUZYTEVOQlFVTXNUVUZCVFN4SFFVRkRMRU5CUVVNc1EwRkJRenRSUVVONlF5eFBRVUZQTzBsQlJWUXNUVUZCVFN4WFFVRlhMRWRCUVVjc1YwRkJWeXhEUVVGRExGTkJRVk1zUTBGQlF5eERRVUZETEVOQlFVTXNSVUZCUlN4RlFVRkZMRU5CUVVNc1IwRkJSeXhIUVVGSExFTkJRVU1zUTBGQlF5eERRVUZETzBsQlF6RkVMRmRCUVZjc1EwRkJReXhIUVVGSExFVkJRVVVzUTBGQlF6dEpRVU5zUWl4WFFVRlhMRU5CUVVNc1RVRkJUU3hEUVVGRExGZEJRVmNzUlVGQlJTeERRVUZETEVWQlFVVXNSMEZCUnl4RFFVRkRMRU5CUVVNN1NVRkRlRU1zVDBGQlR5eERRVUZETEVkQlFVY3NSVUZCUlN4RFFVRkRPMGxCUTJRc1QwRkJUeXhEUVVGRExFMUJRVTBzUTBGQlF5eFhRVUZYTEVWQlFVVXNRMEZCUXl4RlFVRkZMRXRCUVVzc1EwRkJReXhEUVVGRE8wRkJRM2hETEVOQlFVTTdRVUZGUkN4TlFVRk5MRlZCUVZVc1dVRkJXU3hEUVVGRExGZEJRWEZDTEVWQlFVVXNUMEZCYVVJc1JVRkJSU3hIUVVGWExFVkJRVVVzUzBGQllUdEpRVU12Uml4SlFVRkpMRWRCUVVjc1IwRkJSeXhYUVVGWExFTkJRVU1zVjBGQlZ5eERRVUZETEUxQlFVMHNSMEZCUXl4RFFVRkRMRU5CUVVNN1VVRkRla01zVDBGQlR6dEpRVVZVTEUxQlFVMHNWMEZCVnl4SFFVRkhMRmRCUVZjc1EwRkJReXhUUVVGVExFTkJRVU1zUTBGQlF5eERRVUZETEVWQlFVVXNSVUZCUlN4RFFVRkRMRWRCUVVjc1IwRkJSeXhEUVVGRExFTkJRVU1zUTBGQlF6dEpRVU14UkN4WFFVRlhMRU5CUVVNc1IwRkJSeXhGUVVGRkxFTkJRVU03U1VGRGJFSXNWMEZCVnl4RFFVRkRMRTFCUVUwc1EwRkJReXhYUVVGWExFVkJRVVVzUTBGQlF5eEZRVUZGTEVkQlFVY3NRMEZCUXl4RFFVRkRPMGxCUTNoRExFOUJRVThzUTBGQlF5eEhRVUZITEVWQlFVVXNRMEZCUXp0SlFVTmtMRTlCUVU4c1EwRkJReXhOUVVGTkxFTkJRVU1zVjBGQlZ5eEZRVUZGTEVOQlFVTXNSVUZCUlN4TFFVRkxMRU5CUVVNc1EwRkJRenRCUVVONFF5eERRVUZETzBGQlJVUXNUVUZCVFN4VlFVRlZMSE5DUVVGelFpeERRVU53UXl4cFFrRkJORU1zUlVGQlJTeFBRVUZwUWp0SlFVVXZSQ3hSUVVGUkxHbENRVUZwUWl4RlFVRkZPMUZCUTNwQ0xFdEJRVXNzTUVKQlFUQkNMRU5CUVVNc1UwRkJVenRaUVVOMlF5eFBRVUZQTEVOQlFVTXNSVUZCV1N4RlFVRkZMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zVFVGQlRTeERRVUZETEVOQlFVTXNSMEZCUnl4RlFVRkZMRWRCUVVjc1JVRkJSU3hIUVVGSExFVkJRVVVzUlVGQlJTeERRVUZETEVkQlFVY3NSMEZCUnl4SFFVRkhMRWRCUVVjc1QwRkJUeXhEUVVGRExFZEJRVWNzUTBGQlF5eEZRVUZGTEVOQlFVTXNRMEZCUXl4RFFVRkRPMUZCUTNKR08xbEJRMFVzVDBGQlR5eERRVUZETEVWQlFWa3NSVUZCUlN4RlFVRkZPMmRDUVVOMFFpeFpRVUZaTzJkQ1FVTmFMRTFCUVUwc1IwRkJSeXhIUVVGSExFVkJRVVVzUTBGQlF5eE5RVUZOTEVOQlFVTXNRMEZCUXl4SFFVRkhMRVZCUVVVc1IwRkJSeXhGUVVGRkxFZEJRVWNzUlVGQlJTeEZRVUZGTEVOQlFVTXNSMEZCUnl4SFFVRkhMRU5CUVVNc1IwRkJSeXhIUVVGSExFOUJRVThzUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXl4SlFVRkpMRU5CUVVNc1JVRkJSU3hEUVVGRExFTkJRVU1zUTBGQlF6dG5Ra0ZETjBVc1QwRkJUeXhKUVVGSkxFTkJRVU1zU1VGQlNTeERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRPMWxCUTNoQ0xFTkJRVU1zUTBGQlF6dExRVU5NTzBGQlEwZ3NRMEZCUXlJc0luTnZkWEpqWlhORGIyNTBaVzUwSWpwYkltbHRjRzl5ZENCN1JHbHpkR0Z1WTJWQloyZHlaV2RoZEdsdmJrMWxkR2h2WkN3Z1JHbHpkR0Z1WTJWQloyZHlaV2RoZEdsdmJrMWxkR2h2WkhOOUlHWnliMjBnSnk0dmRIbHdaWE1uTzF4dVhHNWxlSEJ2Y25RZ1kyOXVjM1FnYVhOT2FXd2dQU0FvZURvZ1lXNTVLU0E5UGlCNElEMDlQU0J1ZFd4c0lIeDhJSGdnUFQwOUlIVnVaR1ZtYVc1bFpEdGNibHh1Wlhod2IzSjBJR1oxYm1OMGFXOXVJR2x1YzJWeWRGTnRZV3hzWlhJb1pHbHpkR0Z1WTJWelFYSTZJRzUxYldKbGNsdGRMQ0JwYm1SbGVHVnpPaUJ1ZFcxaVpYSmJYU3dnYm5WdE9pQnVkVzFpWlhJc0lHbHVaR1Y0T2lCdWRXMWlaWElwSUh0Y2JpQWdhV1lnS0c1MWJTQStJR1JwYzNSaGJtTmxjMEZ5VzJScGMzUmhibU5sYzBGeUxteGxibWQwYUMweFhTbGNiaUFnSUNCeVpYUjFjbTQ3WEc1Y2JpQWdZMjl1YzNRZ2JtVjNVRzl6YVhScGIyNGdQU0JrYVhOMFlXNWpaWE5CY2k1bWFXNWtTVzVrWlhnb0tIWXBJRDArSUc1MWJTQThJSFlwTzF4dUlDQmthWE4wWVc1alpYTkJjaTV3YjNBb0tUdGNiaUFnWkdsemRHRnVZMlZ6UVhJdWMzQnNhV05sS0c1bGQxQnZjMmwwYVc5dUxDQXdMQ0J1ZFcwcE8xeHVJQ0JwYm1SbGVHVnpMbkJ2Y0NncE8xeHVJQ0JwYm1SbGVHVnpMbk53YkdsalpTaHVaWGRRYjNOcGRHbHZiaXdnTUN3Z2FXNWtaWGdwTzF4dWZWeHVYRzVsZUhCdmNuUWdablZ1WTNScGIyNGdhVzV6WlhKMFRHRnlaMlZ5S0dScGMzUmhibU5sYzBGeU9pQnVkVzFpWlhKYlhTd2dhVzVrWlhobGN6b2diblZ0WW1WeVcxMHNJRzUxYlRvZ2JuVnRZbVZ5TENCcGJtUmxlRG9nYm5WdFltVnlLU0I3WEc0Z0lHbG1JQ2h1ZFcwZ1BDQmthWE4wWVc1alpYTkJjbHRrYVhOMFlXNWpaWE5CY2k1c1pXNW5kR2d0TVYwcFhHNGdJQ0FnY21WMGRYSnVPMXh1WEc0Z0lHTnZibk4wSUc1bGQxQnZjMmwwYVc5dUlEMGdaR2x6ZEdGdVkyVnpRWEl1Wm1sdVpFbHVaR1Y0S0NoMktTQTlQaUJ1ZFcwZ1BpQjJLVHRjYmlBZ1pHbHpkR0Z1WTJWelFYSXVjRzl3S0NrN1hHNGdJR1JwYzNSaGJtTmxjMEZ5TG5Od2JHbGpaU2h1WlhkUWIzTnBkR2x2Yml3Z01Dd2diblZ0S1R0Y2JpQWdhVzVrWlhobGN5NXdiM0FvS1R0Y2JpQWdhVzVrWlhobGN5NXpjR3hwWTJVb2JtVjNVRzl6YVhScGIyNHNJREFzSUdsdVpHVjRLVHRjYm4xY2JseHVaWGh3YjNKMElHWjFibU4wYVc5dUlHZGxkRUZuWjNKbFoyRjBhVzl1Um5WdVkzUnBiMjRvWEc0Z0lHRm5aM0psWjJGMGFXOXVUV1YwYUc5a09pQkVhWE4wWVc1alpVRm5aM0psWjJGMGFXOXVUV1YwYUc5a0xDQjNaV2xuYUhSek9pQnVkVzFpWlhKYlhWeHVLVG9nS0haaGJIVmxjem9nYm5WdFltVnlXMTBwSUQwK0lHNTFiV0psY2lCN1hHNGdJSE4zYVhSamFDQW9ZV2RuY21WbllYUnBiMjVOWlhSb2IyUXBJSHRjYmlBZ0lDQmpZWE5sSUVScGMzUmhibU5sUVdkbmNtVm5ZWFJwYjI1TlpYUm9iMlJ6TGsxQlRraEJWRlJCVGpwY2JpQWdJQ0FnSUhKbGRIVnliaUFvZG5NNklHNTFiV0psY2x0ZEtTQTlQaUIyY3k1eVpXUjFZMlVvS0dGall5d2dkbUZzTENCcFpIZ3BJRDArSUdGall5QXJJSFpoYkNBcUlIZGxhV2RvZEhOYmFXUjRYU3dnTUNrN1hHNGdJQ0FnWkdWbVlYVnNkRHBjYmlBZ0lDQWdJSEpsZEhWeWJpQW9kbk02SUc1MWJXSmxjbHRkS1NBOVBpQjdYRzRnSUNBZ0lDQWdJQzh2SUdWMVkyeHBaR1ZoYmx4dUlDQWdJQ0FnSUNCamIyNXpkQ0J6ZFcwZ1BTQjJjeTV5WldSMVkyVW9LR0ZqWXl3Z2RtRnNMQ0JwWkhncElEMCtJR0ZqWXlBcklDaDJZV3dnS2lCM1pXbG5hSFJ6VzJsa2VGMHBJQ29xSURJc0lEQXBPMXh1SUNBZ0lDQWdJQ0J5WlhSMWNtNGdUV0YwYUM1emNYSjBLSE4xYlNrN1hHNGdJQ0FnSUNCOU8xeHVJQ0I5WEc1OVhHNGlYWDA9IiwiLyoqXG4gKiBEZW5vdGVzIGEgdmVjdG9yIG9mIGZsb2F0aW5nIHBvaXQgdmFsdWVzLlxuICpcbiAqIEBleHBvcnRcbiAqIEBjbGFzcyBWZWN0b3JcbiAqIEBleHRlbmRzIHtGbG9hdDMyQXJyYXl9XG4gKi9cbmV4cG9ydCBjbGFzcyBWZWN0b3IgZXh0ZW5kcyBGbG9hdDMyQXJyYXkge1xufVxuLyoqXG4gKiBEZW5vdGVzIGEgdHdvLWRpbWVuc2lvbmFsIG1hdHJpeC5cbiAqXG4gKiBAZXhwb3J0XG4gKiBAY2xhc3MgTWF0cml4XG4gKiBAZXh0ZW5kcyB7QXJyYXk8VmVjdG9yPn1cbiAqL1xuZXhwb3J0IGNsYXNzIE1hdHJpeCBleHRlbmRzIEFycmF5IHtcbn1cbi8qKlxuICogRGVub3RlcyBjYXJ0ZXNpYW4gY29vcmRpbmF0ZXMuXG4gKlxuICogQGV4cG9ydFxuICogQGNsYXNzIENvb3JkaW5hdGVzXG4gKiBAZXh0ZW5kcyB7TWF0cml4fVxuICovXG5leHBvcnQgY2xhc3MgQ29vcmRpbmF0ZXMgZXh0ZW5kcyBNYXRyaXgge1xufVxuLyoqXG4gKiBEZW5vdGVzIGFuIGFycmF5IG9mIGFyYml0cmFyeS10eXBlZCB2ZWN0b3JzLlxuICpcbiAqIEBleHBvcnRcbiAqIEBjbGFzcyBWZWN0b3JzXG4gKiBAZXh0ZW5kcyB7QXJyYXk8YW55Pn1cbiAqL1xuZXhwb3J0IGNsYXNzIFZlY3RvcnMgZXh0ZW5kcyBBcnJheSB7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2lkSGx3WlMxa1pXTnNZWEpoZEdsdmJuTXVhbk1pTENKemIzVnlZMlZTYjI5MElqb2lJaXdpYzI5MWNtTmxjeUk2V3lKMGVYQmxMV1JsWTJ4aGNtRjBhVzl1Y3k1MGN5SmRMQ0p1WVcxbGN5STZXMTBzSW0xaGNIQnBibWR6SWpvaVFVRkZRVHM3T3pzN08wZEJUVWM3UVVGRFNDeE5RVUZOTEU5QlFVOHNUVUZCVHl4VFFVRlJMRmxCUVZrN1EwRkJSenRCUVVVelF6czdPenM3TzBkQlRVYzdRVUZEU0N4TlFVRk5MRTlCUVU4c1RVRkJUeXhUUVVGUkxFdEJRV0U3UTBGQlJ6dEJRVVUxUXpzN096czdPMGRCVFVjN1FVRkRTQ3hOUVVGTkxFOUJRVThzVjBGQldTeFRRVUZSTEUxQlFVMDdRMEZCUnp0QlFVVXhRenM3T3pzN08wZEJUVWM3UVVGRFNDeE5RVUZOTEU5QlFVOHNUMEZCVVN4VFFVRlJMRXRCUVZVN1EwRkJSeUlzSW5OdmRYSmpaWE5EYjI1MFpXNTBJanBiSW1sdGNHOXlkQ0FxSUdGeklFUkhJR1p5YjIwZ0oyUmhkR0ZuY205ckxXRndhUzlrWnljN1hHNWNiaThxS2x4dUlDb2dSR1Z1YjNSbGN5QmhJSFpsWTNSdmNpQnZaaUJtYkc5aGRHbHVaeUJ3YjJsMElIWmhiSFZsY3k1Y2JpQXFYRzRnS2lCQVpYaHdiM0owWEc0Z0tpQkFZMnhoYzNNZ1ZtVmpkRzl5WEc0Z0tpQkFaWGgwWlc1a2N5QjdSbXh2WVhRek1rRnljbUY1ZlZ4dUlDb3ZYRzVsZUhCdmNuUWdZMnhoYzNNZ1ZtVmpkRzl5SUdWNGRHVnVaSE1nUm14dllYUXpNa0Z5Y21GNUlIdDlYRzVjYmk4cUtseHVJQ29nUkdWdWIzUmxjeUJoSUhSM2J5MWthVzFsYm5OcGIyNWhiQ0J0WVhSeWFYZ3VYRzRnS2x4dUlDb2dRR1Y0Y0c5eWRGeHVJQ29nUUdOc1lYTnpJRTFoZEhKcGVGeHVJQ29nUUdWNGRHVnVaSE1nZTBGeWNtRjVQRlpsWTNSdmNqNTlYRzRnS2k5Y2JtVjRjRzl5ZENCamJHRnpjeUJOWVhSeWFYZ2daWGgwWlc1a2N5QkJjbkpoZVR4V1pXTjBiM0krSUh0OVhHNWNiaThxS2x4dUlDb2dSR1Z1YjNSbGN5QmpZWEowWlhOcFlXNGdZMjl2Y21ScGJtRjBaWE11WEc0Z0tseHVJQ29nUUdWNGNHOXlkRnh1SUNvZ1FHTnNZWE56SUVOdmIzSmthVzVoZEdWelhHNGdLaUJBWlhoMFpXNWtjeUI3VFdGMGNtbDRmVnh1SUNvdlhHNWxlSEJ2Y25RZ1kyeGhjM01nUTI5dmNtUnBibUYwWlhNZ1pYaDBaVzVrY3lCTllYUnlhWGdnZTMxY2JseHVMeW9xWEc0Z0tpQkVaVzV2ZEdWeklHRnVJR0Z5Y21GNUlHOW1JR0Z5WW1sMGNtRnllUzEwZVhCbFpDQjJaV04wYjNKekxseHVJQ3BjYmlBcUlFQmxlSEJ2Y25SY2JpQXFJRUJqYkdGemN5QldaV04wYjNKelhHNGdLaUJBWlhoMFpXNWtjeUI3UVhKeVlYazhZVzU1UG4xY2JpQXFMMXh1Wlhod2IzSjBJR05zWVhOeklGWmxZM1J2Y25NZ1pYaDBaVzVrY3lCQmNuSmhlVHhoYm5rK0lIdDlYRzVjYmk4cUtseHVJQ29nUkdWdWIzUmxjeUJoSUdScFkzUnBiMjVoY25rZ1kyOXVkR0ZwYm1sdVp5Qm1kVzVqZEdsdmJpQnZjSFJwYjI1ekxseHVJQ3BjYmlBcUlFQmxlSEJ2Y25SY2JpQXFJRUIwZVhCbElFOXdkR2x2Ym5OY2JpQXFMMXh1Wlhod2IzSjBJSFI1Y0dVZ1QzQjBhVzl1Y3lBOUlIdGJibUZ0WlRvZ2MzUnlhVzVuWFRvZ1lXNTVmVHRjYmx4dUx5b3FYRzRnS2lCRVpXNXZkR1Z6SUdOMWMzUnZiU0JrYVhOMFlXNWpaU0J0WlhSeWFXTWdZbVYwZDJWbGJpQjBhR1VnZEhkdklHZHBkbVZ1SUhabFkzUnZjbk11WEc0Z0tseHVJQ29nUUdWNGNHOXlkRnh1SUNvZ1FIUjVjR1VnUkdsemRHRnVZMlZOWlhSeWFXTmNiaUFxSUVCd1lYSmhiU0I3WVc1NWZTQjJNU0JVYUdVZ1ptbHljM1FnZG1WamRHOXlMbHh1SUNvZ1FIQmhjbUZ0SUh0aGJubDlJSFl5SUZSb1pTQnpaV052Ym1RZ2RtVmpkRzl5TGx4dUlDb2dRSEpsZEhWeWJpQjdiblZ0WW1WeWZTQkVhWE4wWVc1alpTQmlaWFIzWldWdUlIUm9aWE5sSUhSM2J5QjJaV04wYjNKekxseHVJQ292WEc1bGVIQnZjblFnZEhsd1pTQkVhWE4wWVc1alpVMWxkSEpwWXlBOUlDaDJNVG9nWVc1NUxDQjJNam9nWVc1NUtTQTlQaUFvYm5WdFltVnlLVHRjYmx4dUx5b3FYRzRnS2lCRVpXNXZkR1Z6SUdFZ2MybHRjR3hsSUhOMGNtbHVaeUIwYnlCemRISnBibWNnWkdsamRHbHZibUZ5ZVM1Y2JpQXFYRzRnS2lCQVpYaHdiM0owWEc0Z0tpQkFkSGx3WlNCVGRISnBibWRFYVdOMGFXOXVZWEo1WEc0Z0tpOWNibVY0Y0c5eWRDQjBlWEJsSUZOMGNtbHVaMFJwWTNScGIyNWhjbmtnUFNCN1cydGxlVG9nYzNSeWFXNW5YVG9nYzNSeWFXNW5mVHRjYmx4dVhHNWxlSEJ2Y25RZ2RIbHdaU0JEYjJ4MWJXNUpibkIxZEU5d2RHbHZibk1nUFNCN1hHNGdJQ0FnWm1sc2RHVnlQem9nS0dOdmJEb2dSRWN1UTI5c2RXMXVLU0E5UGlCaWIyOXNaV0Z1SUh3Z2JuVnNiRHRjYm4wN1hHNGlYWDA9IiwiaW1wb3J0ICogYXMgZ3JvayBmcm9tICdkYXRhZ3Jvay1hcGkvZ3Jvayc7XG5pbXBvcnQgKiBhcyB1aSBmcm9tICdkYXRhZ3Jvay1hcGkvdWknO1xuaW1wb3J0ICogYXMgREcgZnJvbSAnZGF0YWdyb2stYXBpL2RnJztcbmltcG9ydCB7IEJZUEFTU19MQVJHRV9EQVRBX1dBUk5JTkcsIFNIT1dfU0NBVFRFUlBMT1RfUFJPR1JFU1MgfSBmcm9tICcuLi9mdW5jdGlvbkVkaXRvcnMvY29uc3RzJztcbmltcG9ydCB7IGdldERic2NhbldvcmtlciB9IGZyb20gJ0BkYXRhZ3Jvay1saWJyYXJpZXMvbWF0aCc7XG5pbXBvcnQgeyBESU1FTlNJT05BTElUWV9SRURVQ0VSX1RFUk1JTkFURV9FVkVOVCB9IGZyb20gJy4vY29uc3RzJztcbmltcG9ydCB7IGdldE5vcm1hbGl6ZWRFbWJlZGRpbmdzIH0gZnJvbSAnLi9lbWJlZGRpbmdzLXNwYWNlJztcbmV4cG9ydCBmdW5jdGlvbiBnZXRFbWJlZGRpbmdDb2xzTmFtZXMoZGYpIHtcbiAgICBjb25zdCBheGVzID0gWydFbWJlZF9YJywgJ0VtYmVkX1knXTtcbiAgICBjb25zdCBjb2xOYW1lSW5kID0gZGYuY29sdW1ucy5uYW1lcygpLmZpbHRlcigoaXQpID0+IGl0LmluY2x1ZGVzKGF4ZXNbMF0pKS5sZW5ndGggKyAxO1xuICAgIHJldHVybiBheGVzLm1hcCgoaXQpID0+IGAke2l0fV8ke2NvbE5hbWVJbmR9YCk7XG59XG5leHBvcnQgZnVuY3Rpb24gZ2V0RW1iZWRkaW5nVmlld2VyTmFtZShjb2x1bW5zLCBtZXRob2QpIHtcbiAgICBjb25zdCBjb2xOYW1lcyA9IGNvbHVtbnMubGVuZ3RoID4gNCA/IGAke2NvbHVtbnMubGVuZ3RofSBjb2x1bW5zYCA6IGNvbHVtbnMubWFwKChpdCkgPT4gaXQubmFtZSkuam9pbignLCAnKTtcbiAgICByZXR1cm4gYCR7bWV0aG9kfSAoJHtjb2xOYW1lc30pYDtcbn1cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBtdWx0aUNvbFJlZHVjZURpbWVuc2lvbmFsaXR5KHRhYmxlLCBjb2x1bW5zLCBtZXRob2QsIG1ldHJpY3MsIHdlaWdodHMsIHByZXByb2Nlc3NpbmdGdW5jdGlvbnMsIGFnZ3JlZ2F0aW9uTWV0aG9kLCBwbG90RW1iZWRkaW5ncyA9IHRydWUsIGNsdXN0ZXJFbWJlZGRpbmdzID0gZmFsc2UsIGRpbVJlZE9wdGlvbnMgPSB7IHByZXByb2Nlc3NpbmdGdW5jQXJnczogW10gfSwgdWlPcHRpb25zID0ge30sIHBvc3RQcm9jZXNzaW5nRnVuYyA9IG51bGwsIHBvc3RQcm9jRnVuY0FyZ3MgPSB7fSkge1xuICAgIGNvbnN0IHNjYXR0ZXJQbG90UHJvcHMgPSB7XG4gICAgICAgIHNob3dYQXhpczogZmFsc2UsXG4gICAgICAgIHNob3dZQXhpczogZmFsc2UsXG4gICAgICAgIHNob3dYU2VsZWN0b3I6IGZhbHNlLFxuICAgICAgICBzaG93WVNlbGVjdG9yOiBmYWxzZSxcbiAgICB9O1xuICAgIGlmIChjb2x1bW5zLmxlbmd0aCAhPT0gbWV0cmljcy5sZW5ndGggfHwgY29sdW1ucy5sZW5ndGggIT09IHByZXByb2Nlc3NpbmdGdW5jdGlvbnMubGVuZ3RoIHx8XG4gICAgICAgIGNvbHVtbnMubGVuZ3RoICE9PSB3ZWlnaHRzLmxlbmd0aCB8fCBjb2x1bW5zLmxlbmd0aCAhPT0gZGltUmVkT3B0aW9ucy5wcmVwcm9jZXNzaW5nRnVuY0FyZ3MubGVuZ3RoKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignY29sdW1ucywgbWV0cmljcyBhbmQgcHJlcHJvY2Vzc2luZyBmdW5jdGlvbnMsIHdlaWdodHMgYW5kIGZ1bmN0aW9uIGFyZ3VtZW50cycgK1xuICAgICAgICAgICAgJ211c3QgaGF2ZSB0aGUgc2FtZSBsZW5ndGgnKTtcbiAgICB9XG4gICAgY29uc3QgdHYgPSBwbG90RW1iZWRkaW5ncyA/IGdyb2suc2hlbGwudGFibGVWaWV3KHRhYmxlLm5hbWUpID8/IGdyb2suc2hlbGwuYWRkVGFibGVWaWV3KHRhYmxlKSA6IG51bGw7XG4gICAgY29uc3QgZG9SZWR1Y2UgPSBhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHBnID0gREcuVGFza0JhclByb2dyZXNzSW5kaWNhdG9yLmNyZWF0ZShgSW5pdGlhbGl6aW5nICR7dWlPcHRpb25zLnNjYXR0ZXJQbG90TmFtZSA/PyAnZGltZW5zaW9uYWxpdHkgcmVkdWN0aW9uJ30gLi4uYCk7XG4gICAgICAgIGxldCBzY2F0dGVyUGxvdCA9IHVuZGVmaW5lZDtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IGVtYmVkQ29sc05hbWVzID0gZ2V0RW1iZWRkaW5nQ29sc05hbWVzKHRhYmxlKTtcbiAgICAgICAgICAgIGZ1bmN0aW9uIHByb2dyZXNzRnVuYyhfbkVwb2NoLCBlcG9jaHNMZW5ndGgsIGVtYmVkZGluZ3MpIHtcbiAgICAgICAgICAgICAgICBsZXQgZW1iZWRYQ29sID0gbnVsbDtcbiAgICAgICAgICAgICAgICBsZXQgZW1iZWRZQ29sID0gbnVsbDtcbiAgICAgICAgICAgICAgICBpZiAoIXRhYmxlLmNvbHVtbnMubmFtZXMoKS5pbmNsdWRlcyhlbWJlZENvbHNOYW1lc1swXSkpIHtcbiAgICAgICAgICAgICAgICAgICAgZW1iZWRYQ29sID0gdGFibGUuY29sdW1ucy5hZGQoREcuQ29sdW1uLmZsb2F0KGVtYmVkQ29sc05hbWVzWzBdLCB0YWJsZS5yb3dDb3VudCkpO1xuICAgICAgICAgICAgICAgICAgICBlbWJlZFlDb2wgPSB0YWJsZS5jb2x1bW5zLmFkZChERy5Db2x1bW4uZmxvYXQoZW1iZWRDb2xzTmFtZXNbMV0sIHRhYmxlLnJvd0NvdW50KSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChwbG90RW1iZWRkaW5ncyAmJiAhc2NhdHRlclBsb3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNjYXR0ZXJQbG90ID0gdHZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc2NhdHRlclBsb3QoeyAuLi5zY2F0dGVyUGxvdFByb3BzLCB4OiBlbWJlZENvbHNOYW1lc1swXSwgeTogZW1iZWRDb2xzTmFtZXNbMV0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IHVpT3B0aW9ucy5zY2F0dGVyUGxvdE5hbWUgPz8gZ2V0RW1iZWRkaW5nVmlld2VyTmFtZShjb2x1bW5zLCBtZXRob2QpIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBlbWJlZFhDb2wgPSB0YWJsZS5jb2x1bW5zLmJ5TmFtZShlbWJlZENvbHNOYW1lc1swXSk7XG4gICAgICAgICAgICAgICAgICAgIGVtYmVkWUNvbCA9IHRhYmxlLmNvbHVtbnMuYnlOYW1lKGVtYmVkQ29sc05hbWVzWzFdKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHVpT3B0aW9uc1tTSE9XX1NDQVRURVJQTE9UX1BST0dSRVNTXSkge1xuICAgICAgICAgICAgICAgICAgICBzY2F0dGVyUGxvdD8ucm9vdCAmJiB1aS5zZXRVcGRhdGVJbmRpY2F0b3Ioc2NhdHRlclBsb3Qucm9vdCwgZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICBlbWJlZFhDb2wuaW5pdCgoaSkgPT4gZW1iZWRkaW5nc1swXSA/IGVtYmVkZGluZ3NbMF1baV0gOiB1bmRlZmluZWQpO1xuICAgICAgICAgICAgICAgICAgICBlbWJlZFlDb2wuaW5pdCgoaSkgPT4gZW1iZWRkaW5nc1sxXSA/IGVtYmVkZGluZ3NbMV1baV0gOiB1bmRlZmluZWQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBwcm9ncmVzcyA9IChfbkVwb2NoIC8gZXBvY2hzTGVuZ3RoICogMTAwKTtcbiAgICAgICAgICAgICAgICBwZy51cGRhdGUocHJvZ3Jlc3MsIGBSdW5uaW5nICR7dWlPcHRpb25zLnNjYXR0ZXJQbG90TmFtZSA/PyAnZGltZW5zaW9uYWxpdHkgcmVkdWN0aW9uJ30uLi4gJHtwcm9ncmVzcy50b0ZpeGVkKDApfSVgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGFzeW5jIGZ1bmN0aW9uIGdldERpbVJlZCgpIHtcbiAgICAgICAgICAgICAgICB0YWJsZS5jb2x1bW5zLmFkZChERy5Db2x1bW4uZmxvYXQoZW1iZWRDb2xzTmFtZXNbMF0sIHRhYmxlLnJvd0NvdW50KSk7XG4gICAgICAgICAgICAgICAgdGFibGUuY29sdW1ucy5hZGQoREcuQ29sdW1uLmZsb2F0KGVtYmVkQ29sc05hbWVzWzFdLCB0YWJsZS5yb3dDb3VudCkpO1xuICAgICAgICAgICAgICAgIGxldCByZXNvbHZlRiA9IG51bGw7XG4gICAgICAgICAgICAgICAgaWYgKHBsb3RFbWJlZGRpbmdzKSB7XG4gICAgICAgICAgICAgICAgICAgIHNjYXR0ZXJQbG90ID0gdHZcbiAgICAgICAgICAgICAgICAgICAgICAgIC5zY2F0dGVyUGxvdCh7IC4uLnNjYXR0ZXJQbG90UHJvcHMsIHg6IGVtYmVkQ29sc05hbWVzWzBdLCB5OiBlbWJlZENvbHNOYW1lc1sxXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiB1aU9wdGlvbnMuc2NhdHRlclBsb3ROYW1lID8/IGdldEVtYmVkZGluZ1ZpZXdlck5hbWUoY29sdW1ucywgbWV0aG9kKSB9KTtcbiAgICAgICAgICAgICAgICAgICAgdWkuc2V0VXBkYXRlSW5kaWNhdG9yKHNjYXR0ZXJQbG90LnJvb3QsIHRydWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBzdWIgPSBncm9rLmV2ZW50cy5vblZpZXdlckNsb3NlZC5zdWJzY3JpYmUoKGFyZ3MpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdiA9IGFyZ3MuYXJncy52aWV3ZXI7XG4gICAgICAgICAgICAgICAgICAgIGlmICh2Py5nZXRPcHRpb25zKCk/Lmxvb2s/LnRpdGxlICYmIHNjYXR0ZXJQbG90Py5nZXRPcHRpb25zKCk/Lmxvb2s/LnRpdGxlICYmXG4gICAgICAgICAgICAgICAgICAgICAgICB2Py5nZXRPcHRpb25zKCk/Lmxvb2s/LnRpdGxlID09PSBzY2F0dGVyUGxvdD8uZ2V0T3B0aW9ucygpPy5sb29rPy50aXRsZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZ3Jvay5ldmVudHMuZmlyZUN1c3RvbUV2ZW50KERJTUVOU0lPTkFMSVRZX1JFRFVDRVJfVEVSTUlOQVRFX0VWRU5ULCB7fSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdWIudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmVGPy4oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBnLmNsb3NlKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBjb25zdCBkaW1SZWRSZXNQcm9taXNlID0gbmV3IFByb21pc2UoYXN5bmMgKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZUYgPSByZXNvbHZlO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZW5jb2RlZENvbEVudHJpZXMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcHJlcHJvY2Vzc2luZ0Z1bmN0aW9ucy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHBmID0gcHJlcHJvY2Vzc2luZ0Z1bmN0aW9uc1tpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWRpbVJlZE9wdGlvbnMuZGlzdGFuY2VGbkFyZ3MpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpbVJlZE9wdGlvbnMuZGlzdGFuY2VGbkFyZ3MgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGYpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY29sSW5wdXROYW1lID0gcGYuaW5wdXRzWzBdLm5hbWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG1ldHJpY0lucHV0TmFtZSA9IHBmLmlucHV0c1sxXS5uYW1lO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB7IGVudHJpZXMsIG9wdGlvbnMgfSA9IGF3YWl0IHBmLmFwcGx5KHsgW2NvbElucHV0TmFtZV06IGNvbHVtbnNbaV0sIFttZXRyaWNJbnB1dE5hbWVdOiBtZXRyaWNzW2ldLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uKGRpbVJlZE9wdGlvbnMucHJlcHJvY2Vzc2luZ0Z1bmNBcmdzW2ldID8/IHt9KSB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5jb2RlZENvbEVudHJpZXMucHVzaCh7IGVudHJpZXMsIG9wdGlvbnMgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpbVJlZE9wdGlvbnMuZGlzdGFuY2VGbkFyZ3MucHVzaChvcHRpb25zKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGVudHJpZXMgPSBjb2x1bW5zW2ldLnRvTGlzdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvcHRpb25zID0ge307XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuY29kZWRDb2xFbnRyaWVzLnB1c2goeyBlbnRyaWVzLCBvcHRpb25zIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaW1SZWRPcHRpb25zLmRpc3RhbmNlRm5BcmdzLnB1c2gob3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgZ2V0Tm9ybWFsaXplZEVtYmVkZGluZ3MoZW5jb2RlZENvbEVudHJpZXMubWFwKChpdCkgPT4gaXQuZW50cmllcyksIG1ldGhvZCwgbWV0cmljcywgd2VpZ2h0cywgYWdncmVnYXRpb25NZXRob2QsIGRpbVJlZE9wdGlvbnMsIHVpT3B0aW9uc1tCWVBBU1NfTEFSR0VfREFUQV9XQVJOSU5HXSA/IHVuZGVmaW5lZCA6IHByb2dyZXNzRnVuYyk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHJlcyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IGRpbVJlZFJlc1Byb21pc2U7XG4gICAgICAgICAgICAgICAgcGcuY2xvc2UoKTtcbiAgICAgICAgICAgICAgICBzdWIudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgZ2V0RGltUmVkKCk7XG4gICAgICAgICAgICBpZiAoY2x1c3RlckVtYmVkZGluZ3MgJiYgcmVzKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY2x1c3RlclBnID0gREcuVGFza0JhclByb2dyZXNzSW5kaWNhdG9yLmNyZWF0ZShgQ2x1c3RlcmluZyBlbWJlZGRpbmdzIC4uLmApO1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNsdXN0ZXJSZXMgPSBhd2FpdCBnZXREYnNjYW5Xb3JrZXIocmVzWzBdLCByZXNbMV0sIGRpbVJlZE9wdGlvbnMuZGJTY2FuRXBzaWxvbiA/PyAwLjAxLCBkaW1SZWRPcHRpb25zLmRiU2Nhbk1pblB0cyA/PyA0KTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2x1c3RlckNvbE5hbWUgPSB0YWJsZS5jb2x1bW5zLmdldFVudXNlZE5hbWUoJ0NsdXN0ZXIgKERCU0NBTiknKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2x1c3RlckNvbCA9IHRhYmxlLmNvbHVtbnMuYWRkTmV3U3RyaW5nKGNsdXN0ZXJDb2xOYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgY2x1c3RlckNvbC5pbml0KChpKSA9PiBjbHVzdGVyUmVzW2ldLnRvU3RyaW5nKCkpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoc2NhdHRlclBsb3QpXG4gICAgICAgICAgICAgICAgICAgICAgICBzY2F0dGVyUGxvdC5wcm9wcy5jb2xvckNvbHVtbk5hbWUgPSBjbHVzdGVyQ29sTmFtZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgZ3Jvay5zaGVsbC5lcnJvcignQ2x1c3RlcmluZyBlbWJlZGRpbmdzIGZhaWxlZCcpO1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICAgICAgY2x1c3RlclBnLmNsb3NlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHJlcykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGVtYmVkWENvbCA9IHRhYmxlLmNvbHVtbnMuYnlOYW1lKGVtYmVkQ29sc05hbWVzWzBdKTtcbiAgICAgICAgICAgICAgICBjb25zdCBlbWJlZFlDb2wgPSB0YWJsZS5jb2x1bW5zLmJ5TmFtZShlbWJlZENvbHNOYW1lc1sxXSk7XG4gICAgICAgICAgICAgICAgZW1iZWRYQ29sLmluaXQoKGkpID0+IHJlc1swXVtpXSk7XG4gICAgICAgICAgICAgICAgZW1iZWRZQ29sLmluaXQoKGkpID0+IHJlc1sxXVtpXSk7XG4gICAgICAgICAgICAgICAgaWYgKHBvc3RQcm9jZXNzaW5nRnVuYykge1xuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY29sMUlucHV0TmFtZSA9IHBvc3RQcm9jZXNzaW5nRnVuYy5pbnB1dHNbMF0ubmFtZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbDJJbnB1dE5hbWUgPSBwb3N0UHJvY2Vzc2luZ0Z1bmMuaW5wdXRzWzFdLm5hbWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCBwb3N0UHJvY2Vzc2luZ0Z1bmNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAucHJlcGFyZSh7IFtjb2wxSW5wdXROYW1lXTogZW1iZWRYQ29sLCBbY29sMklucHV0TmFtZV06IGVtYmVkWUNvbCwgLi4ucG9zdFByb2NGdW5jQXJncyB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5jYWxsKHRydWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBncm9rLnNoZWxsLmVycm9yKCdQb3N0LXByb2Nlc3NpbmcgZmFpbGVkJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChzY2F0dGVyUGxvdCkge1xuICAgICAgICAgICAgICAgICAgICB1aS5zZXRVcGRhdGVJbmRpY2F0b3Ioc2NhdHRlclBsb3Qucm9vdCwgZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICBzY2F0dGVyUGxvdC5oZWxwVXJsID0gJy9oZWxwL2NvbXB1dGUvc2VxdWVuY2Utc3BhY2UnO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2NhdHRlclBsb3Q7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICBncm9rLnNoZWxsLmVycm9yKCdEaW1lbnNpb25hbGl0eSByZWR1Y3Rpb24gZmFpbGVkJyk7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGUpO1xuICAgICAgICAgICAgcGcuY2xvc2UoKTtcbiAgICAgICAgICAgIGlmIChzY2F0dGVyUGxvdClcbiAgICAgICAgICAgICAgICB1aS5zZXRVcGRhdGVJbmRpY2F0b3Ioc2NhdHRlclBsb3Qucm9vdCwgZmFsc2UpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoYXN5bmMgKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgaWYgKHVpT3B0aW9ucy5mYXN0Um93Q291bnQgJiYgdGFibGUucm93Q291bnQgPiB1aU9wdGlvbnMuZmFzdFJvd0NvdW50ICYmICF1aU9wdGlvbnNbQllQQVNTX0xBUkdFX0RBVEFfV0FSTklOR10pIHtcbiAgICAgICAgICAgICAgICB1aS5kaWFsb2coKVxuICAgICAgICAgICAgICAgICAgICAuYWRkKHVpLmRpdlRleHQoJ0FuYWx5c2lzIG1pZ2h0IHRha2Ugc2V2ZXJhbCBtaW51dGVzLiBEbyB5b3Ugd2FudCB0byBjb250aW51ZT8nKSlcbiAgICAgICAgICAgICAgICAgICAgLm9uT0soYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgZG9SZWR1Y2UoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUocmVzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgLm9uQ2FuY2VsKCgpID0+IHJlc29sdmUodW5kZWZpbmVkKSlcbiAgICAgICAgICAgICAgICAgICAgLnNob3coKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IGRvUmVkdWNlKCk7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZShyZXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICByZWplY3QoZSk7XG4gICAgICAgIH1cbiAgICB9KTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaWNtVmtkV05sTFdScGJXVnVjMmx2Ym1Gc2FYUjVMbXB6SWl3aWMyOTFjbU5sVW05dmRDSTZJaUlzSW5OdmRYSmpaWE1pT2xzaWNtVmtkV05sTFdScGJXVnVjMmx2Ym1Gc2FYUjVMblJ6SWwwc0ltNWhiV1Z6SWpwYlhTd2liV0Z3Y0dsdVozTWlPaUpCUVVGQkxFOUJRVThzUzBGQlN5eEpRVUZKTEUxQlFVMHNiVUpCUVcxQ0xFTkJRVU03UVVGRE1VTXNUMEZCVHl4TFFVRkxMRVZCUVVVc1RVRkJUU3hwUWtGQmFVSXNRMEZCUXp0QlFVTjBReXhQUVVGUExFdEJRVXNzUlVGQlJTeE5RVUZOTEdsQ1FVRnBRaXhEUVVGRE8wRkJSWFJETEU5QlFVOHNSVUZCUXl4NVFrRkJlVUlzUlVGQlJTeDVRa0ZCZVVJc1JVRkJReXhOUVVGTkxESkNRVUV5UWl4RFFVRkRPMEZCUlM5R0xFOUJRVThzUlVGQmFVSXNaVUZCWlN4RlFVRkRMRTFCUVUwc01FSkJRVEJDTEVOQlFVTTdRVUZEZWtVc1QwRkJUeXhGUVVGRExITkRRVUZ6UXl4RlFVRkRMRTFCUVUwc1ZVRkJWU3hEUVVGRE8wRkJSV2hGTEU5QlFVOHNSVUZCUXl4MVFrRkJkVUlzUlVGQlF5eE5RVUZOTEc5Q1FVRnZRaXhEUVVGRE8wRkJXVE5FTEUxQlFVMHNWVUZCVlN4eFFrRkJjVUlzUTBGQlF5eEZRVUZuUWp0SlFVTndSQ3hOUVVGTkxFbEJRVWtzUjBGQlJ5eERRVUZETEZOQlFWTXNSVUZCUlN4VFFVRlRMRU5CUVVNc1EwRkJRenRKUVVOd1F5eE5RVUZOTEZWQlFWVXNSMEZCUnl4RlFVRkZMRU5CUVVNc1QwRkJUeXhEUVVGRExFdEJRVXNzUlVGQlJTeERRVUZETEUxQlFVMHNRMEZCUXl4RFFVRkRMRVZCUVZVc1JVRkJSU3hGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEZGQlFWRXNRMEZCUXl4SlFVRkpMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEUxQlFVMHNSMEZCUnl4RFFVRkRMRU5CUVVNN1NVRkRPVVlzVDBGQlR5eEpRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNc1JVRkJSU3hGUVVGRkxFVkJRVVVzUTBGQlF5eEhRVUZITEVWQlFVVXNTVUZCU1N4VlFVRlZMRVZCUVVVc1EwRkJReXhEUVVGRE8wRkJRMnBFTEVOQlFVTTdRVUZGUkN4TlFVRk5MRlZCUVZVc2MwSkJRWE5DTEVOQlFVTXNUMEZCYjBJc1JVRkJSU3hOUVVFeVFqdEpRVU4wUml4TlFVRk5MRkZCUVZFc1IwRkJSeXhQUVVGUExFTkJRVU1zVFVGQlRTeEhRVUZITEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1IwRkJSeXhQUVVGUExFTkJRVU1zVFVGQlRTeFZRVUZWTEVOQlFVTXNRMEZCUXl4RFFVRkRMRTlCUVU4c1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF5eEZRVUZGTEVWQlFVVXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhKUVVGSkxFTkJRVU1zUTBGQlF5eEpRVUZKTEVOQlFVTXNTVUZCU1N4RFFVRkRMRU5CUVVNN1NVRkROVWNzVDBGQlR5eEhRVUZITEUxQlFVMHNTMEZCU3l4UlFVRlJMRWRCUVVjc1EwRkJRenRCUVVOdVF5eERRVUZETzBGQlJVUXNUVUZCVFN4RFFVRkRMRXRCUVVzc1ZVRkJWU3cwUWtGQk5FSXNRMEZCUXl4TFFVRnRRaXhGUVVGRkxFOUJRVzlDTEVWQlF6RkdMRTFCUVRKQ0xFVkJRVVVzVDBGQmRVSXNSVUZCUlN4UFFVRnBRaXhGUVVOMlJTeHpRa0ZCYzBRc1JVRkRkRVFzYVVKQlFUUkRMRVZCUVVVc2FVSkJRVEJDTEVsQlFVa3NSVUZCUlN4dlFrRkJOa0lzUzBGQlN5eEZRVU5vU0N4blFrRkRXU3hGUVVGRExIRkNRVUZ4UWl4RlFVRkZMRVZCUVVVc1JVRkJReXhGUVVOMlF5eFpRVUUyUWl4RlFVRkZMRVZCUVVVc2NVSkJRWEZETEVsQlFVa3NSVUZCUlN4dFFrRkJORUlzUlVGQlJUdEpRVU14Unl4TlFVRk5MR2RDUVVGblFpeEhRVUZITzFGQlEzWkNMRk5CUVZNc1JVRkJSU3hMUVVGTE8xRkJRMmhDTEZOQlFWTXNSVUZCUlN4TFFVRkxPMUZCUTJoQ0xHRkJRV0VzUlVGQlJTeExRVUZMTzFGQlEzQkNMR0ZCUVdFc1JVRkJSU3hMUVVGTE8wdEJRM0pDTEVOQlFVTTdTVUZEUml4SlFVRkpMRTlCUVU4c1EwRkJReXhOUVVGTkxFdEJRVXNzVDBGQlR5eERRVUZETEUxQlFVMHNTVUZCU1N4UFFVRlBMRU5CUVVNc1RVRkJUU3hMUVVGTExITkNRVUZ6UWl4RFFVRkRMRTFCUVUwN1VVRkRia1lzVDBGQlR5eERRVUZETEUxQlFVMHNTMEZCU3l4UFFVRlBMRU5CUVVNc1RVRkJUU3hKUVVGSkxFOUJRVThzUTBGQlF5eE5RVUZOTEV0QlFVc3NZVUZCWVN4RFFVRkRMSEZDUVVGeFFpeERRVUZETEUxQlFVMHNSVUZCUlR0UlFVTjRSeXhOUVVGTkxFbEJRVWtzUzBGQlN5eERRVUZETERoRlFVRTRSVHRaUVVNMVJpd3lRa0ZCTWtJc1EwRkJReXhEUVVGRE8wdEJRMmhETzBsQlJVUXNUVUZCVFN4RlFVRkZMRWRCUVVjc1kwRkJZeXhEUVVGRExFTkJRVU1zUTBGQlF5eEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRk5CUVZNc1EwRkJReXhMUVVGTExFTkJRVU1zU1VGQlNTeERRVUZETEVsQlFVa3NTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhaUVVGWkxFTkJRVU1zUzBGQlN5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRWxCUVVrc1EwRkJRenRKUVVWMFJ5eE5RVUZOTEZGQlFWRXNSMEZCUnl4TFFVRkxMRWxCUVVrc1JVRkJSVHRSUVVNeFFpeE5RVUZOTEVWQlFVVXNSMEZCUnl4RlFVRkZMRU5CUVVNc2QwSkJRWGRDTEVOQlFVTXNUVUZCVFN4RFFVTXpReXhuUWtGQlowSXNVMEZCVXl4RFFVRkRMR1ZCUVdVc1NVRkJTU3d3UWtGQk1FSXNUVUZCVFN4RFFVRkRMRU5CUVVNN1VVRkRha1lzU1VGQlNTeFhRVUZYTEVkQlFYRkRMRk5CUVZNc1EwRkJRenRSUVVNNVJDeEpRVUZKTzFsQlEwWXNUVUZCVFN4alFVRmpMRWRCUVVjc2NVSkJRWEZDTEVOQlFVTXNTMEZCU3l4RFFVRkRMRU5CUVVNN1dVRkRjRVFzVTBGQlV5eFpRVUZaTEVOQlFVTXNUMEZCWlN4RlFVRkZMRmxCUVc5Q0xFVkJRVVVzVlVGQmMwSTdaMEpCUTJwR0xFbEJRVWtzVTBGQlV5eEhRVUZ4UWl4SlFVRkpMRU5CUVVNN1owSkJRM1pETEVsQlFVa3NVMEZCVXl4SFFVRnhRaXhKUVVGSkxFTkJRVU03WjBKQlEzWkRMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zVDBGQlR5eERRVUZETEV0QlFVc3NSVUZCUlN4RFFVRkRMRkZCUVZFc1EwRkJReXhqUVVGakxFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNSVUZCUlR0dlFrRkRkRVFzVTBGQlV5eEhRVUZITEV0QlFVc3NRMEZCUXl4UFFVRlBMRU5CUVVNc1IwRkJSeXhEUVVGRExFVkJRVVVzUTBGQlF5eE5RVUZOTEVOQlFVTXNTMEZCU3l4RFFVRkRMR05CUVdNc1EwRkJReXhEUVVGRExFTkJRVU1zUlVGQlJTeExRVUZMTEVOQlFVTXNVVUZCVVN4RFFVRkRMRU5CUVVNc1EwRkJRenR2UWtGRGJFWXNVMEZCVXl4SFFVRkhMRXRCUVVzc1EwRkJReXhQUVVGUExFTkJRVU1zUjBGQlJ5eERRVUZETEVWQlFVVXNRMEZCUXl4TlFVRk5MRU5CUVVNc1MwRkJTeXhEUVVGRExHTkJRV01zUTBGQlF5eERRVUZETEVOQlFVTXNSVUZCUlN4TFFVRkxMRU5CUVVNc1VVRkJVU3hEUVVGRExFTkJRVU1zUTBGQlF6dHZRa0ZEYkVZc1NVRkJTU3hqUVVGakxFbEJRVWtzUTBGQlF5eFhRVUZYTEVWQlFVVTdkMEpCUTJ4RExGZEJRVmNzUjBGQlJ5eEZRVUZIT3paQ1FVTmtMRmRCUVZjc1EwRkJReXhGUVVGRExFZEJRVWNzWjBKQlFXZENMRVZCUVVVc1EwRkJReXhGUVVGRkxHTkJRV01zUTBGQlF5eERRVUZETEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1kwRkJZeXhEUVVGRExFTkJRVU1zUTBGQlF6czBRa0ZETTBVc1MwRkJTeXhGUVVGRkxGTkJRVk1zUTBGQlF5eGxRVUZsTEVsQlFVa3NjMEpCUVhOQ0xFTkJRVU1zVDBGQlR5eEZRVUZGTEUxQlFVMHNRMEZCUXl4RlFVRkRMRU5CUVVNc1EwRkJRenR4UWtGRGJrWTdhVUpCUTBZN2NVSkJRVTA3YjBKQlEwd3NVMEZCVXl4SFFVRkhMRXRCUVVzc1EwRkJReXhQUVVGUExFTkJRVU1zVFVGQlRTeERRVUZETEdOQlFXTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE8yOUNRVU53UkN4VFFVRlRMRWRCUVVjc1MwRkJTeXhEUVVGRExFOUJRVThzUTBGQlF5eE5RVUZOTEVOQlFVTXNZMEZCWXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU03YVVKQlEzSkVPMmRDUVVWRUxFbEJRVWtzVTBGQlV5eERRVUZETEhsQ1FVRjVRaXhEUVVGRExFVkJRVVU3YjBKQlEzaERMRmRCUVZjc1JVRkJSU3hKUVVGSkxFbEJRVWtzUlVGQlJTeERRVUZETEd0Q1FVRnJRaXhEUVVGRExGZEJRVmtzUTBGQlF5eEpRVUZKTEVWQlFVVXNTMEZCU3l4RFFVRkRMRU5CUVVNN2IwSkJRM0pGTEZOQlFWTXNRMEZCUXl4SlFVRkpMRU5CUVVNc1EwRkJReXhEUVVGRExFVkJRVVVzUlVGQlJTeERRVUZETEZWQlFWVXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zVlVGQlZTeERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eFRRVUZUTEVOQlFVTXNRMEZCUXp0dlFrRkRjRVVzVTBGQlV5eERRVUZETEVsQlFVa3NRMEZCUXl4RFFVRkRMRU5CUVVNc1JVRkJSU3hGUVVGRkxFTkJRVU1zVlVGQlZTeERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhWUVVGVkxFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExGTkJRVk1zUTBGQlF5eERRVUZETzJsQ1FVTnlSVHRuUWtGRFJDeE5RVUZOTEZGQlFWRXNSMEZCUnl4RFFVRkRMRTlCUVU4c1IwRkJSeXhaUVVGWkxFZEJRVWNzUjBGQlJ5eERRVUZETEVOQlFVTTdaMEpCUTJoRUxFVkJRVVVzUTBGQlF5eE5RVUZOTEVOQlFVTXNVVUZCVVN4RlFVTm9RaXhYUVVGWExGTkJRVk1zUTBGQlF5eGxRVUZsTEVsQlFVa3NNRUpCUVRCQ0xFOUJRVThzVVVGQlVTeERRVUZETEU5QlFVOHNRMEZCUXl4RFFVRkRMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU03V1VGRGNrY3NRMEZCUXp0WlFVTkVMRXRCUVVzc1ZVRkJWU3hUUVVGVE8yZENRVU4wUWl4TFFVRkxMRU5CUVVNc1QwRkJUeXhEUVVGRExFZEJRVWNzUTBGQlF5eEZRVUZGTEVOQlFVTXNUVUZCVFN4RFFVRkRMRXRCUVVzc1EwRkJReXhqUVVGakxFTkJRVU1zUTBGQlF5eERRVUZETEVWQlFVVXNTMEZCU3l4RFFVRkRMRkZCUVZFc1EwRkJReXhEUVVGRExFTkJRVU03WjBKQlEzUkZMRXRCUVVzc1EwRkJReXhQUVVGUExFTkJRVU1zUjBGQlJ5eERRVUZETEVWQlFVVXNRMEZCUXl4TlFVRk5MRU5CUVVNc1MwRkJTeXhEUVVGRExHTkJRV01zUTBGQlF5eERRVUZETEVOQlFVTXNSVUZCUlN4TFFVRkxMRU5CUVVNc1VVRkJVU3hEUVVGRExFTkJRVU1zUTBGQlF6dG5Ra0ZEZEVVc1NVRkJTU3hSUVVGUkxFZEJRVzlDTEVsQlFVa3NRMEZCUXp0blFrRkRja01zU1VGQlNTeGpRVUZqTEVWQlFVVTdiMEpCUTJ4Q0xGZEJRVmNzUjBGQlJ5eEZRVUZITzNsQ1FVTmtMRmRCUVZjc1EwRkJReXhGUVVGRExFZEJRVWNzWjBKQlFXZENMRVZCUVVVc1EwRkJReXhGUVVGRkxHTkJRV01zUTBGQlF5eERRVUZETEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1kwRkJZeXhEUVVGRExFTkJRVU1zUTBGQlF6dDNRa0ZETTBVc1MwRkJTeXhGUVVGRkxGTkJRVk1zUTBGQlF5eGxRVUZsTEVsQlFVa3NjMEpCUVhOQ0xFTkJRVU1zVDBGQlR5eEZRVUZGTEUxQlFVMHNRMEZCUXl4RlFVRkRMRU5CUVVNc1EwRkJRenR2UWtGRGJFWXNSVUZCUlN4RFFVRkRMR3RDUVVGclFpeERRVUZETEZkQlFWY3NRMEZCUXl4SlFVRkpMRVZCUVVVc1NVRkJTU3hEUVVGRExFTkJRVU03YVVKQlF5OURPMmRDUVVWRUxFMUJRVTBzUjBGQlJ5eEhRVUZITEVsQlFVa3NRMEZCUXl4TlFVRk5MRU5CUVVNc1kwRkJZeXhEUVVGRExGTkJRVk1zUTBGQlF5eERRVUZETEVsQlFVa3NSVUZCUlN4RlFVRkZPMjlDUVVONFJDeE5RVUZOTEVOQlFVTXNSMEZCUnl4SlFVRkpMRU5CUVVNc1NVRkJTU3hEUVVGRExFMUJRVzFETEVOQlFVTTdiMEpCUTNoRUxFbEJRVWtzUTBGQlF5eEZRVUZGTEZWQlFWVXNSVUZCUlN4RlFVRkZMRWxCUVVrc1JVRkJSU3hMUVVGTExFbEJRVWtzVjBGQlZ5eEZRVUZGTEZWQlFWVXNSVUZCUlN4RlFVRkZMRWxCUVVrc1JVRkJSU3hMUVVGTE8zZENRVU01UkN4RFFVRkRMRVZCUVVVc1ZVRkJWU3hGUVVGRkxFVkJRVVVzU1VGQlNTeEZRVUZGTEV0QlFVc3NTMEZCU3l4WFFVRlhMRVZCUVVVc1ZVRkJWU3hGUVVGRkxFVkJRVVVzU1VGQlNTeEZRVUZGTEV0QlFVc3NSVUZCUlR0M1FrRkRia1lzU1VGQlNTeERRVUZETEUxQlFVMHNRMEZCUXl4bFFVRmxMRU5CUVVNc2MwTkJRWE5ETEVWQlFVVXNSVUZCUlN4RFFVRkRMRU5CUVVNN2QwSkJRM2hGTEVkQlFVY3NRMEZCUXl4WFFVRlhMRVZCUVVVc1EwRkJRenQzUWtGRGJFSXNVVUZCVVN4RlFVRkZMRVZCUVVVc1EwRkJRenQzUWtGRFlpeEZRVUZGTEVOQlFVTXNTMEZCU3l4RlFVRkZMRU5CUVVNN2NVSkJRMW83WjBKQlEwZ3NRMEZCUXl4RFFVRkRMRU5CUVVNN1owSkJSVWdzVFVGQlRTeG5Ra0ZCWjBJc1IwRkJSeXhKUVVGSkxFOUJRVThzUTBGQmNVSXNTMEZCU3l4RlFVRkZMRTlCUVU4c1JVRkJSU3hOUVVGTkxFVkJRVVVzUlVGQlJUdHZRa0ZEYWtZc1NVRkJTVHQzUWtGRFJpeFJRVUZSTEVkQlFVY3NUMEZCVHl4RFFVRkRPM2RDUVVOdVFpeE5RVUZOTEdsQ1FVRnBRaXhIUVVGdFF5eEZRVUZGTEVOQlFVTTdkMEpCUXpkRUxFdEJRVXNzU1VGQlNTeERRVUZETEVkQlFVY3NRMEZCUXl4RlFVRkZMRU5CUVVNc1IwRkJSeXh6UWtGQmMwSXNRMEZCUXl4TlFVRk5MRVZCUVVVc1JVRkJSU3hEUVVGRExFVkJRVVU3TkVKQlEzUkVMRTFCUVUwc1JVRkJSU3hIUVVGSExITkNRVUZ6UWl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE96UkNRVU55UXl4SlFVRkpMRU5CUVVNc1lVRkJZU3hEUVVGRExHTkJRV003WjBOQlF5OUNMR0ZCUVdFc1EwRkJReXhqUVVGakxFZEJRVWNzUlVGQlJTeERRVUZET3pSQ1FVTndReXhKUVVGSkxFVkJRVVVzUlVGQlJUdG5RMEZEVGl4TlFVRk5MRmxCUVZrc1IwRkJSeXhGUVVGRkxFTkJRVU1zVFVGQlRTeERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRWxCUVVrc1EwRkJRenRuUTBGRGRrTXNUVUZCVFN4bFFVRmxMRWRCUVVjc1JVRkJSU3hEUVVGRExFMUJRVTBzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4SlFVRkpMRU5CUVVNN1owTkJRekZETEUxQlFVMHNSVUZCUXl4UFFVRlBMRVZCUVVVc1QwRkJUeXhGUVVGRExFZEJRM2hDTEUxQlFVMHNSVUZCUlN4RFFVRkRMRXRCUVVzc1EwRkJReXhGUVVGRExFTkJRVU1zV1VGQldTeERRVUZETEVWQlFVVXNUMEZCVHl4RFFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRkxFTkJRVU1zWlVGQlpTeERRVUZETEVWQlFVVXNUMEZCVHl4RFFVRkRMRU5CUVVNc1EwRkJRenR2UTBGRGRrVXNSMEZCUnl4RFFVRkRMR0ZCUVdFc1EwRkJReXh4UWtGQmNVSXNRMEZCUXl4RFFVRkRMRU5CUVVNc1NVRkJTU3hGUVVGRkxFTkJRVU1zUlVGQlF5eERRVUZETEVOQlFVTTdaME5CUTNSRUxHbENRVUZwUWl4RFFVRkRMRWxCUVVrc1EwRkJReXhGUVVGRExFOUJRVThzUlVGQlJTeFBRVUZQTEVWQlFVTXNRMEZCUXl4RFFVRkRPMmREUVVNelF5eGhRVUZoTEVOQlFVTXNZMEZCWXl4RFFVRkRMRWxCUVVrc1EwRkJReXhQUVVGUExFTkJRVU1zUTBGQlF6czJRa0ZETlVNN2FVTkJRVTA3WjBOQlEwd3NUVUZCVFN4UFFVRlBMRWRCUVVjc1QwRkJUeXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEUxQlFVMHNSVUZCUlN4RFFVRkRPMmREUVVOd1F5eE5RVUZOTEU5QlFVOHNSMEZCUnl4RlFVRkZMRU5CUVVNN1owTkJRMjVDTEdsQ1FVRnBRaXhEUVVGRExFbEJRVWtzUTBGQlF5eEZRVUZETEU5QlFVOHNSVUZCUlN4UFFVRlBMRVZCUVVNc1EwRkJReXhEUVVGRE8yZERRVU16UXl4aFFVRmhMRU5CUVVNc1kwRkJZeXhEUVVGRExFbEJRVWtzUTBGQlF5eFBRVUZQTEVOQlFVTXNRMEZCUXpzMlFrRkROVU03ZVVKQlEwWTdkMEpCUTBRc1RVRkJUU3hIUVVGSExFZEJRVWNzVFVGQlRTeDFRa0ZCZFVJc1EwRkJReXhwUWtGQmFVSXNRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJReXhGUVVGRkxFVkJRVVVzUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4UFFVRlBMRU5CUVVNc1JVRkJSU3hOUVVGTkxFVkJRM3BHTEU5QlFVOHNSVUZCUlN4UFFVRlBMRVZCUVVVc2FVSkJRV2xDTEVWQlFVVXNZVUZCWVN4RlFVTnNSQ3hUUVVGVExFTkJRVU1zZVVKQlFYbENMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zVTBGQlV5eERRVUZETEVOQlFVTXNRMEZCUXl4WlFVRlpMRU5CUVVNc1EwRkJRenQzUWtGRGJrVXNUMEZCVHl4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRE8zRkNRVU5rTzI5Q1FVRkRMRTlCUVU4c1EwRkJReXhGUVVGRk8zZENRVU5XTEUxQlFVMHNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJRenR4UWtGRFdEdG5Ra0ZEU0N4RFFVRkRMRU5CUVVNc1EwRkJRenRuUWtGRFNDeE5RVUZOTEVkQlFVY3NSMEZCUnl4TlFVRk5MR2RDUVVGblFpeERRVUZETzJkQ1FVTnVReXhGUVVGRkxFTkJRVU1zUzBGQlN5eEZRVUZGTEVOQlFVTTdaMEpCUTFnc1IwRkJSeXhEUVVGRExGZEJRVmNzUlVGQlJTeERRVUZETzJkQ1FVTnNRaXhQUVVGUExFZEJRVWNzUTBGQlF6dFpRVU5pTEVOQlFVTTdXVUZEUkN4TlFVRk5MRWRCUVVjc1IwRkJSeXhOUVVGTkxGTkJRVk1zUlVGQlJTeERRVUZETzFsQlJUbENMRWxCUVVrc2FVSkJRV2xDTEVsQlFVa3NSMEZCUnl4RlFVRkZPMmRDUVVNMVFpeE5RVUZOTEZOQlFWTXNSMEZCUnl4RlFVRkZMRU5CUVVNc2QwSkJRWGRDTEVOQlFVTXNUVUZCVFN4RFFVRkRMREpDUVVFeVFpeERRVUZETEVOQlFVTTdaMEpCUTJ4R0xFbEJRVWs3YjBKQlEwWXNUVUZCVFN4VlFVRlZMRWRCUVVjc1RVRkJUU3hsUVVGbExFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkZMRWRCUVVjc1EwRkJReXhEUVVGRExFTkJRVU1zUlVGRGNrUXNZVUZCWVN4RFFVRkRMR0ZCUVdFc1NVRkJTU3hKUVVGSkxFVkJRVVVzWVVGQllTeERRVUZETEZsQlFWa3NTVUZCU1N4RFFVRkRMRU5CUVVNc1EwRkJRenR2UWtGRGVFVXNUVUZCVFN4alFVRmpMRWRCUVVjc1MwRkJTeXhEUVVGRExFOUJRVThzUTBGQlF5eGhRVUZoTEVOQlFVTXNhMEpCUVd0Q0xFTkJRVU1zUTBGQlF6dHZRa0ZEZGtVc1RVRkJUU3hWUVVGVkxFZEJRVWNzUzBGQlN5eERRVUZETEU5QlFVOHNRMEZCUXl4WlFVRlpMRU5CUVVNc1kwRkJZeXhEUVVGRExFTkJRVU03YjBKQlF6bEVMRlZCUVZVc1EwRkJReXhKUVVGSkxFTkJRVU1zUTBGQlF5eERRVUZETEVWQlFVVXNSVUZCUlN4RFFVRkRMRlZCUVZVc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eFJRVUZSTEVWQlFVVXNRMEZCUXl4RFFVRkRPMjlDUVVOcVJDeEpRVUZKTEZkQlFWYzdkMEpCUTFvc1YwRkJiME1zUTBGQlF5eExRVUZMTEVOQlFVTXNaVUZCWlN4SFFVRkhMR05CUVdNc1EwRkJRenRwUWtGRGFFWTdaMEpCUVVNc1QwRkJUeXhEUVVGRExFVkJRVVU3YjBKQlExWXNTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhMUVVGTExFTkJRVU1zT0VKQlFUaENMRU5CUVVNc1EwRkJRenR2UWtGRGFrUXNUMEZCVHl4RFFVRkRMRXRCUVVzc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF6dHBRa0ZEYkVJN2QwSkJRVk03YjBKQlExSXNVMEZCVXl4RFFVRkRMRXRCUVVzc1JVRkJSU3hEUVVGRE8ybENRVU51UWp0aFFVTkdPMWxCUTBRc1NVRkJTU3hIUVVGSExFVkJRVVU3WjBKQlExQXNUVUZCVFN4VFFVRlRMRWRCUVVjc1MwRkJTeXhEUVVGRExFOUJRVThzUTBGQlF5eE5RVUZOTEVOQlFVTXNZMEZCWXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU03WjBKQlF6RkVMRTFCUVUwc1UwRkJVeXhIUVVGSExFdEJRVXNzUTBGQlF5eFBRVUZQTEVOQlFVTXNUVUZCVFN4RFFVRkRMR05CUVdNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETzJkQ1FVTXhSQ3hUUVVGVExFTkJRVU1zU1VGQlNTeERRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkZMRVZCUVVVc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJRenRuUWtGRGFrTXNVMEZCVXl4RFFVRkRMRWxCUVVrc1EwRkJReXhEUVVGRExFTkJRVU1zUlVGQlJTeEZRVUZGTEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdaMEpCUTJwRExFbEJRVWtzYTBKQlFXdENMRVZCUVVVN2IwSkJRM1JDTEVsQlFVazdkMEpCUTBZc1RVRkJUU3hoUVVGaExFZEJRVWNzYTBKQlFXdENMRU5CUVVNc1RVRkJUU3hEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVsQlFVa3NRMEZCUXp0M1FrRkRlRVFzVFVGQlRTeGhRVUZoTEVkQlFVY3NhMEpCUVd0Q0xFTkJRVU1zVFVGQlRTeERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRWxCUVVrc1EwRkJRenQzUWtGRGVFUXNUVUZCVFN4clFrRkJhMEk3TmtKQlEzSkNMRTlCUVU4c1EwRkJReXhGUVVGRExFTkJRVU1zWVVGQllTeERRVUZETEVWQlFVVXNVMEZCVXl4RlFVRkZMRU5CUVVNc1lVRkJZU3hEUVVGRExFVkJRVVVzVTBGQlV5eEZRVUZGTEVkQlFVY3NaMEpCUVdkQ0xFVkJRVU1zUTBGQlF6czJRa0ZEZEVZc1NVRkJTU3hEUVVGRExFbEJRVWtzUTBGQlF5eERRVUZETzNGQ1FVTm1PMjlDUVVGRExFOUJRVThzUTBGQlF5eEZRVUZGTzNkQ1FVTldMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zUzBGQlN5eERRVUZETEhkQ1FVRjNRaXhEUVVGRExFTkJRVU03ZDBKQlF6TkRMRTlCUVU4c1EwRkJReXhMUVVGTExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdjVUpCUTJ4Q08ybENRVU5HTzJkQ1FVTkVMRWxCUVVrc1YwRkJWeXhGUVVGRk8yOUNRVU5tTEVWQlFVVXNRMEZCUXl4clFrRkJhMElzUTBGQlJTeFhRVUZ2UXl4RFFVRkRMRWxCUVVrc1JVRkJSU3hMUVVGTExFTkJRVU1zUTBGQlF6dHZRa0ZEZUVVc1YwRkJiME1zUTBGQlF5eFBRVUZQTEVkQlFVY3NPRUpCUVRoQ0xFTkJRVU03YjBKQlF5OUZMRTlCUVU4c1YwRkJiVU1zUTBGQlF6dHBRa0ZETlVNN1lVRkRSanRUUVVOR08xRkJRVU1zVDBGQlR5eERRVUZETEVWQlFVVTdXVUZEVml4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExFdEJRVXNzUTBGQlF5eHBRMEZCYVVNc1EwRkJReXhEUVVGRE8xbEJRM0JFTEU5QlFVOHNRMEZCUXl4TFFVRkxMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU03V1VGRGFrSXNSVUZCUlN4RFFVRkRMRXRCUVVzc1JVRkJSU3hEUVVGRE8xbEJRMWdzU1VGQlNTeFhRVUZYTzJkQ1FVTmlMRVZCUVVVc1EwRkJReXhyUWtGQmEwSXNRMEZCUlN4WFFVRnZReXhEUVVGRExFbEJRVWtzUlVGQlJTeExRVUZMTEVOQlFVTXNRMEZCUXp0VFFVTTFSVHRKUVVOSUxFTkJRVU1zUTBGQlF6dEpRVU5HTEU5QlFVOHNTVUZCU1N4UFFVRlBMRU5CUVcxRExFdEJRVXNzUlVGQlJTeFBRVUZQTEVWQlFVVXNUVUZCVFN4RlFVRkZMRVZCUVVVN1VVRkROMFVzU1VGQlNUdFpRVU5HTEVsQlFVa3NVMEZCVXl4RFFVRkRMRmxCUVZrc1NVRkJTU3hMUVVGTExFTkJRVU1zVVVGQlVTeEhRVUZITEZOQlFWTXNRMEZCUXl4WlFVRlpMRWxCUVVrc1EwRkJReXhUUVVGVExFTkJRVU1zZVVKQlFYbENMRU5CUVVNc1JVRkJSVHRuUWtGRE9VY3NSVUZCUlN4RFFVRkRMRTFCUVUwc1JVRkJSVHR4UWtGRFVpeEhRVUZITEVOQlFVTXNSVUZCUlN4RFFVRkRMRTlCUVU4c1EwRkJReXdyUkVGQkswUXNRMEZCUXl4RFFVRkRPM0ZDUVVOb1JpeEpRVUZKTEVOQlFVTXNTMEZCU3l4SlFVRkpMRVZCUVVVN2IwSkJRMllzU1VGQlNUdDNRa0ZEUml4TlFVRk5MRWRCUVVjc1IwRkJSeXhOUVVGTkxGRkJRVkVzUlVGQlJTeERRVUZETzNkQ1FVTTNRaXhQUVVGUExFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTTdjVUpCUTJRN2IwSkJRVU1zVDBGQlR5eERRVUZETEVWQlFVVTdkMEpCUTFZc1RVRkJUU3hEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETzNGQ1FVTllPMmRDUVVOSUxFTkJRVU1zUTBGQlF6dHhRa0ZEUkN4UlFVRlJMRU5CUVVNc1IwRkJSeXhGUVVGRkxFTkJRVU1zVDBGQlR5eERRVUZETEZOQlFWTXNRMEZCUXl4RFFVRkRPM0ZDUVVOc1F5eEpRVUZKTEVWQlFVVXNRMEZCUXp0aFFVTllPMmxDUVVGTk8yZENRVU5NTEUxQlFVMHNSMEZCUnl4SFFVRkhMRTFCUVUwc1VVRkJVU3hGUVVGRkxFTkJRVU03WjBKQlF6ZENMRTlCUVU4c1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF6dGhRVU5rTzFOQlEwWTdVVUZCUXl4UFFVRlBMRU5CUVVNc1JVRkJSVHRaUVVOV0xFMUJRVTBzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXp0VFFVTllPMGxCUTBnc1EwRkJReXhEUVVGRExFTkJRVU03UVVGRFRDeERRVUZESWl3aWMyOTFjbU5sYzBOdmJuUmxiblFpT2xzaWFXMXdiM0owSUNvZ1lYTWdaM0p2YXlCbWNtOXRJQ2RrWVhSaFozSnZheTFoY0drdlozSnZheWM3WEc1cGJYQnZjblFnS2lCaGN5QjFhU0JtY205dElDZGtZWFJoWjNKdmF5MWhjR2t2ZFdrbk8xeHVhVzF3YjNKMElDb2dZWE1nUkVjZ1puSnZiU0FuWkdGMFlXZHliMnN0WVhCcEwyUm5KenRjYm1sdGNHOXlkQ0I3UzI1dmQyNU5aWFJ5YVdOemZTQm1jbTl0SUNjdUxpOTBlWEJsWkMxdFpYUnlhV056Snp0Y2JtbHRjRzl5ZENCN1FsbFFRVk5UWDB4QlVrZEZYMFJCVkVGZlYwRlNUa2xPUnl3Z1UwaFBWMTlUUTBGVVZFVlNVRXhQVkY5UVVrOUhVa1ZUVTMwZ1puSnZiU0FuTGk0dlpuVnVZM1JwYjI1RlpHbDBiM0p6TDJOdmJuTjBjeWM3WEc1cGJYQnZjblFnZTAxaGRISnBlQ3dnVDNCMGFXOXVjMzBnWm5KdmJTQW5RR1JoZEdGbmNtOXJMV3hwWW5KaGNtbGxjeTkxZEdsc2N5OXpjbU12ZEhsd1pTMWtaV05zWVhKaGRHbHZibk1uTzF4dWFXMXdiM0owSUh0SlJFSlRZMkZ1VDNCMGFXOXVjeXdnWjJWMFJHSnpZMkZ1VjI5eWEyVnlmU0JtY205dElDZEFaR0YwWVdkeWIyc3RiR2xpY21GeWFXVnpMMjFoZEdnbk8xeHVhVzF3YjNKMElIdEVTVTFGVGxOSlQwNUJURWxVV1Y5U1JVUlZRMFZTWDFSRlVrMUpUa0ZVUlY5RlZrVk9WSDBnWm5KdmJTQW5MaTlqYjI1emRITW5PMXh1YVcxd2IzSjBJSHRRY21Wd2NtOWpaWE56Um5WdVkzUnBiMjVTWlhSMWNtNVVlWEJsZlNCbWNtOXRJQ2N1TGk5bWRXNWpkR2x2YmtWa2FYUnZjbk12WkdsdFpXNXphVzl1WVd4cGRIa3RjbVZrZFdOMGFXOXVMV1ZrYVhSdmNpYzdYRzVwYlhCdmNuUWdlMmRsZEU1dmNtMWhiR2w2WldSRmJXSmxaR1JwYm1kemZTQm1jbTl0SUNjdUwyVnRZbVZrWkdsdVozTXRjM0JoWTJVbk8xeHVhVzF3YjNKMElIdEVhWE4wWVc1alpVRm5aM0psWjJGMGFXOXVUV1YwYUc5a2ZTQm1jbTl0SUNjdUxpOWthWE4wWVc1alpTMXRZWFJ5YVhndmRIbHdaWE1uTzF4dWFXMXdiM0owSUh0SlZGTk9SVTl3ZEdsdmJuTXNJRWxWVFVGUVQzQjBhVzl1YzMwZ1puSnZiU0FuTGk5dGRXeDBhUzFqYjJ4MWJXNHRaR2x0TFhKbFpIVmpaWEluTzF4dWFXMXdiM0owSUh0RWFXMVNaV1IxWTNScGIyNU5aWFJvYjJSemZTQm1jbTl0SUNjdUwzUjVjR1Z6Snp0Y2JseHVaWGh3YjNKMElIUjVjR1VnUkdsdFVtVmtWV2xQY0hScGIyNXpJRDBnZTF4dUlDQWdJRnRDV1ZCQlUxTmZURUZTUjBWZlJFRlVRVjlYUVZKT1NVNUhYVDg2SUdKdmIyeGxZVzRzWEc0Z0lDQWdXMU5JVDFkZlUwTkJWRlJGVWxCTVQxUmZVRkpQUjFKRlUxTmRQem9nWW05dmJHVmhiaXhjYmlBZ0lDQm1ZWE4wVW05M1EyOTFiblEvT2lCdWRXMWlaWElzWEc0Z0lDQWdjMk5oZEhSbGNsQnNiM1JPWVcxbFB6b2djM1J5YVc1bkxGeHVmVnh1WEc1bGVIQnZjblFnWm5WdVkzUnBiMjRnWjJWMFJXMWlaV1JrYVc1blEyOXNjMDVoYldWektHUm1PaUJFUnk1RVlYUmhSbkpoYldVcElIdGNiaUFnWTI5dWMzUWdZWGhsY3lBOUlGc25SVzFpWldSZldDY3NJQ2RGYldKbFpGOVpKMTA3WEc0Z0lHTnZibk4wSUdOdmJFNWhiV1ZKYm1RZ1BTQmtaaTVqYjJ4MWJXNXpMbTVoYldWektDa3VabWxzZEdWeUtDaHBkRG9nYzNSeWFXNW5LU0E5UGlCcGRDNXBibU5zZFdSbGN5aGhlR1Z6V3pCZEtTa3ViR1Z1WjNSb0lDc2dNVHRjYmlBZ2NtVjBkWEp1SUdGNFpYTXViV0Z3S0NocGRDa2dQVDRnWUNSN2FYUjlYeVI3WTI5c1RtRnRaVWx1WkgxZ0tUdGNibjFjYmx4dVpYaHdiM0owSUdaMWJtTjBhVzl1SUdkbGRFVnRZbVZrWkdsdVoxWnBaWGRsY2s1aGJXVW9ZMjlzZFcxdWN6b2dSRWN1UTI5c2RXMXVXMTBzSUcxbGRHaHZaRG9nUkdsdFVtVmtkV04wYVc5dVRXVjBhRzlrY3lrZ2UxeHVJQ0JqYjI1emRDQmpiMnhPWVcxbGN5QTlJR052YkhWdGJuTXViR1Z1WjNSb0lENGdOQ0EvSUdBa2UyTnZiSFZ0Ym5NdWJHVnVaM1JvZlNCamIyeDFiVzV6WUNBNklHTnZiSFZ0Ym5NdWJXRndLQ2hwZENrZ1BUNGdhWFF1Ym1GdFpTa3VhbTlwYmlnbkxDQW5LVHRjYmlBZ2NtVjBkWEp1SUdBa2UyMWxkR2h2WkgwZ0tDUjdZMjlzVG1GdFpYTjlLV0E3WEc1OVhHNWNibVY0Y0c5eWRDQmhjM2x1WXlCbWRXNWpkR2x2YmlCdGRXeDBhVU52YkZKbFpIVmpaVVJwYldWdWMybHZibUZzYVhSNUtIUmhZbXhsT2lCRVJ5NUVZWFJoUm5KaGJXVXNJR052YkhWdGJuTTZJRVJITGtOdmJIVnRibHRkTEZ4dUlDQnRaWFJvYjJRNklFUnBiVkpsWkhWamRHbHZiazFsZEdodlpITXNJRzFsZEhKcFkzTTZJRXR1YjNkdVRXVjBjbWxqYzF0ZExDQjNaV2xuYUhSek9pQnVkVzFpWlhKYlhTeGNiaUFnY0hKbGNISnZZMlZ6YzJsdVowWjFibU4wYVc5dWN6b2dLRVJITGtaMWJtTWdmQ0J1ZFd4c0lId2dkVzVrWldacGJtVmtLVnRkTEZ4dUlDQmhaMmR5WldkaGRHbHZiazFsZEdodlpEb2dSR2x6ZEdGdVkyVkJaMmR5WldkaGRHbHZiazFsZEdodlpDd2djR3h2ZEVWdFltVmtaR2x1WjNNNklHSnZiMnhsWVc0Z1BTQjBjblZsTENCamJIVnpkR1Z5UlcxaVpXUmthVzVuY3pvZ1ltOXZiR1ZoYmlBOUlHWmhiSE5sTEZ4dUlDQmthVzFTWldSUGNIUnBiMjV6T2lBb1NWVk5RVkJQY0hScGIyNXpJSHdnU1ZSVFRrVlBjSFJwYjI1ektTQW1JRkJoY25ScFlXdzhTVVJDVTJOaGJrOXdkR2x2Ym5NK0lDWWdlM0J5WlhCeWIyTmxjM05wYm1kR2RXNWpRWEpuY3pvZ1QzQjBhVzl1YzF0ZGZTQW1YRzRnSUNBZ1QzQjBhVzl1Y3lBOUlIdHdjbVZ3Y205alpYTnphVzVuUm5WdVkwRnlaM002SUZ0ZGZTeGNiaUFnZFdsUGNIUnBiMjV6T2lCRWFXMVNaV1JWYVU5d2RHbHZibk1nUFNCN2ZTd2djRzl6ZEZCeWIyTmxjM05wYm1kR2RXNWpPaUJFUnk1R2RXNWpJSHdnYm5Wc2JDQTlJRzUxYkd3c0lIQnZjM1JRY205alJuVnVZMEZ5WjNNNklFOXdkR2x2Ym5NZ1BTQjdmU2tnZTF4dUlDQmpiMjV6ZENCelkyRjBkR1Z5VUd4dmRGQnliM0J6SUQwZ2UxeHVJQ0FnSUhOb2IzZFlRWGhwY3pvZ1ptRnNjMlVzWEc0Z0lDQWdjMmh2ZDFsQmVHbHpPaUJtWVd4elpTeGNiaUFnSUNCemFHOTNXRk5sYkdWamRHOXlPaUJtWVd4elpTeGNiaUFnSUNCemFHOTNXVk5sYkdWamRHOXlPaUJtWVd4elpTeGNiaUFnZlR0Y2JpQWdhV1lnS0dOdmJIVnRibk11YkdWdVozUm9JQ0U5UFNCdFpYUnlhV056TG14bGJtZDBhQ0I4ZkNCamIyeDFiVzV6TG14bGJtZDBhQ0FoUFQwZ2NISmxjSEp2WTJWemMybHVaMFoxYm1OMGFXOXVjeTVzWlc1bmRHZ2dmSHhjYmlBZ0lDQWdJQ0FnWTI5c2RXMXVjeTVzWlc1bmRHZ2dJVDA5SUhkbGFXZG9kSE11YkdWdVozUm9JSHg4SUdOdmJIVnRibk11YkdWdVozUm9JQ0U5UFNCa2FXMVNaV1JQY0hScGIyNXpMbkJ5WlhCeWIyTmxjM05wYm1kR2RXNWpRWEpuY3k1c1pXNW5kR2dwSUh0Y2JpQWdJQ0IwYUhKdmR5QnVaWGNnUlhKeWIzSW9KMk52YkhWdGJuTXNJRzFsZEhKcFkzTWdZVzVrSUhCeVpYQnliMk5sYzNOcGJtY2dablZ1WTNScGIyNXpMQ0IzWldsbmFIUnpJR0Z1WkNCbWRXNWpkR2x2YmlCaGNtZDFiV1Z1ZEhNbklDdGNiaUFnSUNBZ0lDZHRkWE4wSUdoaGRtVWdkR2hsSUhOaGJXVWdiR1Z1WjNSb0p5azdYRzRnSUgxY2JseHVJQ0JqYjI1emRDQjBkaUE5SUhCc2IzUkZiV0psWkdScGJtZHpJRDhnWjNKdmF5NXphR1ZzYkM1MFlXSnNaVlpwWlhjb2RHRmliR1V1Ym1GdFpTa2dQejhnWjNKdmF5NXphR1ZzYkM1aFpHUlVZV0pzWlZacFpYY29kR0ZpYkdVcElEb2diblZzYkR0Y2JseHVJQ0JqYjI1emRDQmtiMUpsWkhWalpTQTlJR0Z6ZVc1aklDZ3BJRDArSUh0Y2JpQWdJQ0JqYjI1emRDQndaeUE5SUVSSExsUmhjMnRDWVhKUWNtOW5jbVZ6YzBsdVpHbGpZWFJ2Y2k1amNtVmhkR1VvWEc0Z0lDQWdJQ0JnU1c1cGRHbGhiR2w2YVc1bklDUjdkV2xQY0hScGIyNXpMbk5qWVhSMFpYSlFiRzkwVG1GdFpTQS9QeUFuWkdsdFpXNXphVzl1WVd4cGRIa2djbVZrZFdOMGFXOXVKMzBnTGk0dVlDazdYRzRnSUNBZ2JHVjBJSE5qWVhSMFpYSlFiRzkwT2lCRVJ5NVRZMkYwZEdWeVVHeHZkRlpwWlhkbGNpQjhJSFZ1WkdWbWFXNWxaQ0E5SUhWdVpHVm1hVzVsWkR0Y2JpQWdJQ0IwY25rZ2UxeHVJQ0FnSUNBZ1kyOXVjM1FnWlcxaVpXUkRiMnh6VG1GdFpYTWdQU0JuWlhSRmJXSmxaR1JwYm1kRGIyeHpUbUZ0WlhNb2RHRmliR1VwTzF4dUlDQWdJQ0FnWm5WdVkzUnBiMjRnY0hKdlozSmxjM05HZFc1aktGOXVSWEJ2WTJnNklHNTFiV0psY2l3Z1pYQnZZMmh6VEdWdVozUm9PaUJ1ZFcxaVpYSXNJR1Z0WW1Wa1pHbHVaM002SUc1MWJXSmxjbHRkVzEwcElIdGNiaUFnSUNBZ0lDQWdiR1YwSUdWdFltVmtXRU52YkRvZ1JFY3VRMjlzZFcxdUlId2diblZzYkNBOUlHNTFiR3c3WEc0Z0lDQWdJQ0FnSUd4bGRDQmxiV0psWkZsRGIydzZJRVJITGtOdmJIVnRiaUI4SUc1MWJHd2dQU0J1ZFd4c08xeHVJQ0FnSUNBZ0lDQnBaaUFvSVhSaFlteGxMbU52YkhWdGJuTXVibUZ0WlhNb0tTNXBibU5zZFdSbGN5aGxiV0psWkVOdmJITk9ZVzFsYzFzd1hTa3BJSHRjYmlBZ0lDQWdJQ0FnSUNCbGJXSmxaRmhEYjJ3Z1BTQjBZV0pzWlM1amIyeDFiVzV6TG1Ga1pDaEVSeTVEYjJ4MWJXNHVabXh2WVhRb1pXMWlaV1JEYjJ4elRtRnRaWE5iTUYwc0lIUmhZbXhsTG5KdmQwTnZkVzUwS1NrN1hHNGdJQ0FnSUNBZ0lDQWdaVzFpWldSWlEyOXNJRDBnZEdGaWJHVXVZMjlzZFcxdWN5NWhaR1FvUkVjdVEyOXNkVzF1TG1ac2IyRjBLR1Z0WW1Wa1EyOXNjMDVoYldWeld6RmRMQ0IwWVdKc1pTNXliM2REYjNWdWRDa3BPMXh1SUNBZ0lDQWdJQ0FnSUdsbUlDaHdiRzkwUlcxaVpXUmthVzVuY3lBbUppQWhjMk5oZEhSbGNsQnNiM1FwSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJSE5qWVhSMFpYSlFiRzkwSUQwZ2RIWWhYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDNXpZMkYwZEdWeVVHeHZkQ2g3TGk0dWMyTmhkSFJsY2xCc2IzUlFjbTl3Y3l3Z2VEb2daVzFpWldSRGIyeHpUbUZ0WlhOYk1GMHNJSGs2SUdWdFltVmtRMjlzYzA1aGJXVnpXekZkTEZ4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUhScGRHeGxPaUIxYVU5d2RHbHZibk11YzJOaGRIUmxjbEJzYjNST1lXMWxJRDgvSUdkbGRFVnRZbVZrWkdsdVoxWnBaWGRsY2s1aGJXVW9ZMjlzZFcxdWN5d2diV1YwYUc5a0tYMHBPMXh1SUNBZ0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUNBZ2ZTQmxiSE5sSUh0Y2JpQWdJQ0FnSUNBZ0lDQmxiV0psWkZoRGIyd2dQU0IwWVdKc1pTNWpiMngxYlc1ekxtSjVUbUZ0WlNobGJXSmxaRU52YkhOT1lXMWxjMXN3WFNrN1hHNGdJQ0FnSUNBZ0lDQWdaVzFpWldSWlEyOXNJRDBnZEdGaWJHVXVZMjlzZFcxdWN5NWllVTVoYldVb1pXMWlaV1JEYjJ4elRtRnRaWE5iTVYwcE8xeHVJQ0FnSUNBZ0lDQjlYRzVjYmlBZ0lDQWdJQ0FnYVdZZ0tIVnBUM0IwYVc5dWMxdFRTRTlYWDFORFFWUlVSVkpRVEU5VVgxQlNUMGRTUlZOVFhTa2dlMXh1SUNBZ0lDQWdJQ0FnSUhOallYUjBaWEpRYkc5MFB5NXliMjkwSUNZbUlIVnBMbk5sZEZWd1pHRjBaVWx1WkdsallYUnZjaWh6WTJGMGRHVnlVR3h2ZENFdWNtOXZkQ3dnWm1Gc2MyVXBPMXh1SUNBZ0lDQWdJQ0FnSUdWdFltVmtXRU52YkM1cGJtbDBLQ2hwS1NBOVBpQmxiV0psWkdScGJtZHpXekJkSUQ4Z1pXMWlaV1JrYVc1bmMxc3dYVnRwWFNBNklIVnVaR1ZtYVc1bFpDazdYRzRnSUNBZ0lDQWdJQ0FnWlcxaVpXUlpRMjlzTG1sdWFYUW9LR2twSUQwK0lHVnRZbVZrWkdsdVozTmJNVjBnUHlCbGJXSmxaR1JwYm1keld6RmRXMmxkSURvZ2RXNWtaV1pwYm1Wa0tUdGNiaUFnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdJQ0JqYjI1emRDQndjbTluY21WemN5QTlJQ2hmYmtWd2IyTm9JQzhnWlhCdlkyaHpUR1Z1WjNSb0lDb2dNVEF3S1R0Y2JpQWdJQ0FnSUNBZ2NHY3VkWEJrWVhSbEtIQnliMmR5WlhOekxGeHVJQ0FnSUNBZ0lDQWdJR0JTZFc1dWFXNW5JQ1I3ZFdsUGNIUnBiMjV6TG5OallYUjBaWEpRYkc5MFRtRnRaU0EvUHlBblpHbHRaVzV6YVc5dVlXeHBkSGtnY21Wa2RXTjBhVzl1SjMwdUxpNGdKSHR3Y205bmNtVnpjeTUwYjBacGVHVmtLREFwZlNWZ0tUdGNiaUFnSUNBZ0lIMWNiaUFnSUNBZ0lHRnplVzVqSUdaMWJtTjBhVzl1SUdkbGRFUnBiVkpsWkNncElIdGNiaUFnSUNBZ0lDQWdkR0ZpYkdVdVkyOXNkVzF1Y3k1aFpHUW9SRWN1UTI5c2RXMXVMbVpzYjJGMEtHVnRZbVZrUTI5c2MwNWhiV1Z6V3pCZExDQjBZV0pzWlM1eWIzZERiM1Z1ZENrcE8xeHVJQ0FnSUNBZ0lDQjBZV0pzWlM1amIyeDFiVzV6TG1Ga1pDaEVSeTVEYjJ4MWJXNHVabXh2WVhRb1pXMWlaV1JEYjJ4elRtRnRaWE5iTVYwc0lIUmhZbXhsTG5KdmQwTnZkVzUwS1NrN1hHNGdJQ0FnSUNBZ0lHeGxkQ0J5WlhOdmJIWmxSam9nUm5WdVkzUnBiMjRnZkNCdWRXeHNJRDBnYm5Wc2JEdGNiaUFnSUNBZ0lDQWdhV1lnS0hCc2IzUkZiV0psWkdScGJtZHpLU0I3WEc0Z0lDQWdJQ0FnSUNBZ2MyTmhkSFJsY2xCc2IzUWdQU0IwZGlGY2JpQWdJQ0FnSUNBZ0lDQWdJQzV6WTJGMGRHVnlVR3h2ZENoN0xpNHVjMk5oZEhSbGNsQnNiM1JRY205d2N5d2dlRG9nWlcxaVpXUkRiMnh6VG1GdFpYTmJNRjBzSUhrNklHVnRZbVZrUTI5c2MwNWhiV1Z6V3pGZExGeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNCMGFYUnNaVG9nZFdsUGNIUnBiMjV6TG5OallYUjBaWEpRYkc5MFRtRnRaU0EvUHlCblpYUkZiV0psWkdScGJtZFdhV1YzWlhKT1lXMWxLR052YkhWdGJuTXNJRzFsZEdodlpDbDlLVHRjYmlBZ0lDQWdJQ0FnSUNCMWFTNXpaWFJWY0dSaGRHVkpibVJwWTJGMGIzSW9jMk5oZEhSbGNsQnNiM1F1Y205dmRDd2dkSEoxWlNrN1hHNGdJQ0FnSUNBZ0lIMWNibHh1SUNBZ0lDQWdJQ0JqYjI1emRDQnpkV0lnUFNCbmNtOXJMbVYyWlc1MGN5NXZibFpwWlhkbGNrTnNiM05sWkM1emRXSnpZM0pwWW1Vb0tHRnlaM01wSUQwK0lIdGNiaUFnSUNBZ0lDQWdJQ0JqYjI1emRDQjJJRDBnWVhKbmN5NWhjbWR6TG5acFpYZGxjaUJoY3lCMWJtdHViM2R1SUdGeklFUkhMbFpwWlhkbGNqeGhibmsrTzF4dUlDQWdJQ0FnSUNBZ0lHbG1JQ2gyUHk1blpYUlBjSFJwYjI1ektDay9MbXh2YjJzL0xuUnBkR3hsSUNZbUlITmpZWFIwWlhKUWJHOTBQeTVuWlhSUGNIUnBiMjV6S0NrL0xteHZiMnMvTG5ScGRHeGxJQ1ltWEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdkajh1WjJWMFQzQjBhVzl1Y3lncFB5NXNiMjlyUHk1MGFYUnNaU0E5UFQwZ2MyTmhkSFJsY2xCc2IzUS9MbWRsZEU5d2RHbHZibk1vS1Q4dWJHOXZhejh1ZEdsMGJHVXBJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lHZHliMnN1WlhabGJuUnpMbVpwY21WRGRYTjBiMjFGZG1WdWRDaEVTVTFGVGxOSlQwNUJURWxVV1Y5U1JVUlZRMFZTWDFSRlVrMUpUa0ZVUlY5RlZrVk9WQ3dnZTMwcE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnYzNWaUxuVnVjM1ZpYzJOeWFXSmxLQ2s3WEc0Z0lDQWdJQ0FnSUNBZ0lDQnlaWE52YkhabFJqOHVLQ2s3WEc0Z0lDQWdJQ0FnSUNBZ0lDQndaeTVqYkc5elpTZ3BPMXh1SUNBZ0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUNBZ2ZTazdYRzVjYmlBZ0lDQWdJQ0FnWTI5dWMzUWdaR2x0VW1Wa1VtVnpVSEp2YldselpTQTlJRzVsZHlCUWNtOXRhWE5sUEUxaGRISnBlQ0I4SUhWdVpHVm1hVzVsWkQ0b1lYTjVibU1nS0hKbGMyOXNkbVVzSUhKbGFtVmpkQ2tnUFQ0Z2UxeHVJQ0FnSUNBZ0lDQWdJSFJ5ZVNCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0J5WlhOdmJIWmxSaUE5SUhKbGMyOXNkbVU3WEc0Z0lDQWdJQ0FnSUNBZ0lDQmpiMjV6ZENCbGJtTnZaR1ZrUTI5c1JXNTBjbWxsY3pvZ1VISmxjSEp2WTJWemMwWjFibU4wYVc5dVVtVjBkWEp1Vkhsd1pWdGRJRDBnVzEwN1hHNGdJQ0FnSUNBZ0lDQWdJQ0JtYjNJZ0tHeGxkQ0JwSUQwZ01Ec2dhU0E4SUhCeVpYQnliMk5sYzNOcGJtZEdkVzVqZEdsdmJuTXViR1Z1WjNSb095QXJLMmtwSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnWTI5dWMzUWdjR1lnUFNCd2NtVndjbTlqWlhOemFXNW5SblZ1WTNScGIyNXpXMmxkTzF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0JwWmlBb0lXUnBiVkpsWkU5d2RHbHZibk11WkdsemRHRnVZMlZHYmtGeVozTXBYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdaR2x0VW1Wa1QzQjBhVzl1Y3k1a2FYTjBZVzVqWlVadVFYSm5jeUE5SUZ0ZE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNCcFppQW9jR1lwSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCamIyNXpkQ0JqYjJ4SmJuQjFkRTVoYldVZ1BTQndaaTVwYm5CMWRITmJNRjB1Ym1GdFpUdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQmpiMjV6ZENCdFpYUnlhV05KYm5CMWRFNWhiV1VnUFNCd1ppNXBibkIxZEhOYk1WMHVibUZ0WlR0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCamIyNXpkQ0I3Wlc1MGNtbGxjeXdnYjNCMGFXOXVjMzA2SUZCeVpYQnliMk5sYzNOR2RXNWpkR2x2YmxKbGRIVnlibFI1Y0dVZ1BWeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHRjNZV2wwSUhCbUxtRndjR3g1S0h0YlkyOXNTVzV3ZFhST1lXMWxYVG9nWTI5c2RXMXVjMXRwWFN3Z1cyMWxkSEpwWTBsdWNIVjBUbUZ0WlYwNklHMWxkSEpwWTNOYmFWMHNYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0F1TGk0b1pHbHRVbVZrVDNCMGFXOXVjeTV3Y21Wd2NtOWpaWE56YVc1blJuVnVZMEZ5WjNOYmFWMGdQejhnZTMwcGZTazdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdaVzVqYjJSbFpFTnZiRVZ1ZEhKcFpYTXVjSFZ6YUNoN1pXNTBjbWxsY3l3Z2IzQjBhVzl1YzMwcE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHUnBiVkpsWkU5d2RHbHZibk11WkdsemRHRnVZMlZHYmtGeVozTXVjSFZ6YUNodmNIUnBiMjV6S1R0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnZlNCbGJITmxJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JqYjI1emRDQmxiblJ5YVdWeklEMGdZMjlzZFcxdWMxdHBYUzUwYjB4cGMzUW9LVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JqYjI1emRDQnZjSFJwYjI1eklEMGdlMzA3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnWlc1amIyUmxaRU52YkVWdWRISnBaWE11Y0hWemFDaDdaVzUwY21sbGN5d2diM0IwYVc5dWMzMHBPMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR1JwYlZKbFpFOXdkR2x2Ym5NdVpHbHpkR0Z1WTJWR2JrRnlaM011Y0hWemFDaHZjSFJwYjI1ektUdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnSUNBZ0lDQWdZMjl1YzNRZ2NtVnpJRDBnWVhkaGFYUWdaMlYwVG05eWJXRnNhWHBsWkVWdFltVmtaR2x1WjNNb1pXNWpiMlJsWkVOdmJFVnVkSEpwWlhNdWJXRndLQ2hwZENrZ1BUNGdhWFF1Wlc1MGNtbGxjeWtzSUcxbGRHaHZaQ3hjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdiV1YwY21samN5d2dkMlZwWjJoMGN5d2dZV2RuY21WbllYUnBiMjVOWlhSb2IyUXNJR1JwYlZKbFpFOXdkR2x2Ym5Nc1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUhWcFQzQjBhVzl1YzF0Q1dWQkJVMU5mVEVGU1IwVmZSRUZVUVY5WFFWSk9TVTVIWFNBL0lIVnVaR1ZtYVc1bFpDQTZJSEJ5YjJkeVpYTnpSblZ1WXlrN1hHNGdJQ0FnSUNBZ0lDQWdJQ0J5WlhOdmJIWmxLSEpsY3lrN1hHNGdJQ0FnSUNBZ0lDQWdmU0JqWVhSamFDQW9aU2tnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdjbVZxWldOMEtHVXBPMXh1SUNBZ0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUNBZ2ZTazdYRzRnSUNBZ0lDQWdJR052Ym5OMElISmxjeUE5SUdGM1lXbDBJR1JwYlZKbFpGSmxjMUJ5YjIxcGMyVTdYRzRnSUNBZ0lDQWdJSEJuTG1Oc2IzTmxLQ2s3WEc0Z0lDQWdJQ0FnSUhOMVlpNTFibk4xWW5OamNtbGlaU2dwTzF4dUlDQWdJQ0FnSUNCeVpYUjFjbTRnY21Wek8xeHVJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ1kyOXVjM1FnY21WeklEMGdZWGRoYVhRZ1oyVjBSR2x0VW1Wa0tDazdYRzVjYmlBZ0lDQWdJR2xtSUNoamJIVnpkR1Z5UlcxaVpXUmthVzVuY3lBbUppQnlaWE1wSUh0Y2JpQWdJQ0FnSUNBZ1kyOXVjM1FnWTJ4MWMzUmxjbEJuSUQwZ1JFY3VWR0Z6YTBKaGNsQnliMmR5WlhOelNXNWthV05oZEc5eUxtTnlaV0YwWlNoZ1EyeDFjM1JsY21sdVp5QmxiV0psWkdScGJtZHpJQzR1TG1BcE8xeHVJQ0FnSUNBZ0lDQjBjbmtnZTF4dUlDQWdJQ0FnSUNBZ0lHTnZibk4wSUdOc2RYTjBaWEpTWlhNZ1BTQmhkMkZwZENCblpYUkVZbk5qWVc1WGIzSnJaWElvY21Weld6QmRMQ0J5WlhOYk1WMHNYRzRnSUNBZ0lDQWdJQ0FnSUNCa2FXMVNaV1JQY0hScGIyNXpMbVJpVTJOaGJrVndjMmxzYjI0Z1B6OGdNQzR3TVN3Z1pHbHRVbVZrVDNCMGFXOXVjeTVrWWxOallXNU5hVzVRZEhNZ1B6OGdOQ2s3WEc0Z0lDQWdJQ0FnSUNBZ1kyOXVjM1FnWTJ4MWMzUmxja052YkU1aGJXVWdQU0IwWVdKc1pTNWpiMngxYlc1ekxtZGxkRlZ1ZFhObFpFNWhiV1VvSjBOc2RYTjBaWElnS0VSQ1UwTkJUaWtuS1R0Y2JpQWdJQ0FnSUNBZ0lDQmpiMjV6ZENCamJIVnpkR1Z5UTI5c0lEMGdkR0ZpYkdVdVkyOXNkVzF1Y3k1aFpHUk9aWGRUZEhKcGJtY29ZMngxYzNSbGNrTnZiRTVoYldVcE8xeHVJQ0FnSUNBZ0lDQWdJR05zZFhOMFpYSkRiMnd1YVc1cGRDZ29hU2tnUFQ0Z1kyeDFjM1JsY2xKbGMxdHBYUzUwYjFOMGNtbHVaeWdwS1R0Y2JpQWdJQ0FnSUNBZ0lDQnBaaUFvYzJOaGRIUmxjbEJzYjNRcFhHNGdJQ0FnSUNBZ0lDQWdJQ0FvYzJOaGRIUmxjbEJzYjNRZ1lYTWdSRWN1VTJOaGRIUmxjbEJzYjNSV2FXVjNaWElwTG5CeWIzQnpMbU52Ykc5eVEyOXNkVzF1VG1GdFpTQTlJR05zZFhOMFpYSkRiMnhPWVcxbE8xeHVJQ0FnSUNBZ0lDQjlJR05oZEdOb0lDaGxLU0I3WEc0Z0lDQWdJQ0FnSUNBZ1ozSnZheTV6YUdWc2JDNWxjbkp2Y2lnblEyeDFjM1JsY21sdVp5QmxiV0psWkdScGJtZHpJR1poYVd4bFpDY3BPMXh1SUNBZ0lDQWdJQ0FnSUdOdmJuTnZiR1V1WlhKeWIzSW9aU2s3WEc0Z0lDQWdJQ0FnSUgwZ1ptbHVZV3hzZVNCN1hHNGdJQ0FnSUNBZ0lDQWdZMngxYzNSbGNsQm5MbU5zYjNObEtDazdYRzRnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJSDFjYmlBZ0lDQWdJR2xtSUNoeVpYTXBJSHRjYmlBZ0lDQWdJQ0FnWTI5dWMzUWdaVzFpWldSWVEyOXNJRDBnZEdGaWJHVXVZMjlzZFcxdWN5NWllVTVoYldVb1pXMWlaV1JEYjJ4elRtRnRaWE5iTUYwcE8xeHVJQ0FnSUNBZ0lDQmpiMjV6ZENCbGJXSmxaRmxEYjJ3Z1BTQjBZV0pzWlM1amIyeDFiVzV6TG1KNVRtRnRaU2hsYldKbFpFTnZiSE5PWVcxbGMxc3hYU2s3WEc0Z0lDQWdJQ0FnSUdWdFltVmtXRU52YkM1cGJtbDBLQ2hwS1NBOVBpQnlaWE5iTUYxYmFWMHBPMXh1SUNBZ0lDQWdJQ0JsYldKbFpGbERiMnd1YVc1cGRDZ29hU2tnUFQ0Z2NtVnpXekZkVzJsZEtUdGNiaUFnSUNBZ0lDQWdhV1lnS0hCdmMzUlFjbTlqWlhOemFXNW5SblZ1WXlrZ2UxeHVJQ0FnSUNBZ0lDQWdJSFJ5ZVNCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0JqYjI1emRDQmpiMnd4U1c1d2RYUk9ZVzFsSUQwZ2NHOXpkRkJ5YjJObGMzTnBibWRHZFc1akxtbHVjSFYwYzFzd1hTNXVZVzFsTzF4dUlDQWdJQ0FnSUNBZ0lDQWdZMjl1YzNRZ1kyOXNNa2x1Y0hWMFRtRnRaU0E5SUhCdmMzUlFjbTlqWlhOemFXNW5SblZ1WXk1cGJuQjFkSE5iTVYwdWJtRnRaVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lHRjNZV2wwSUhCdmMzUlFjbTlqWlhOemFXNW5SblZ1WTF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0F1Y0hKbGNHRnlaU2g3VzJOdmJERkpibkIxZEU1aGJXVmRPaUJsYldKbFpGaERiMndzSUZ0amIyd3lTVzV3ZFhST1lXMWxYVG9nWlcxaVpXUlpRMjlzTENBdUxpNXdiM04wVUhKdlkwWjFibU5CY21kemZTbGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0xtTmhiR3dvZEhKMVpTazdYRzRnSUNBZ0lDQWdJQ0FnZlNCallYUmphQ0FvWlNrZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnWjNKdmF5NXphR1ZzYkM1bGNuSnZjaWduVUc5emRDMXdjbTlqWlhOemFXNW5JR1poYVd4bFpDY3BPMXh1SUNBZ0lDQWdJQ0FnSUNBZ1kyOXVjMjlzWlM1bGNuSnZjaWhsS1R0Y2JpQWdJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJQ0FnYVdZZ0tITmpZWFIwWlhKUWJHOTBLU0I3WEc0Z0lDQWdJQ0FnSUNBZ2RXa3VjMlYwVlhCa1lYUmxTVzVrYVdOaGRHOXlLQ2h6WTJGMGRHVnlVR3h2ZENCaGN5QkVSeTVUWTJGMGRHVnlVR3h2ZEZacFpYZGxjaWt1Y205dmRDd2dabUZzYzJVcE8xeHVJQ0FnSUNBZ0lDQWdJQ2h6WTJGMGRHVnlVR3h2ZENCaGN5QkVSeTVUWTJGMGRHVnlVR3h2ZEZacFpYZGxjaWt1YUdWc2NGVnliQ0E5SUNjdmFHVnNjQzlqYjIxd2RYUmxMM05sY1hWbGJtTmxMWE53WVdObEp6dGNiaUFnSUNBZ0lDQWdJQ0J5WlhSMWNtNGdjMk5oZEhSbGNsQnNiM1FnWVhNZ1JFY3VVMk5oZEhSbGNsQnNiM1JXYVdWM1pYSTdYRzRnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJSDFjYmlBZ0lDQjlJR05oZEdOb0lDaGxLU0I3WEc0Z0lDQWdJQ0JuY205ckxuTm9aV3hzTG1WeWNtOXlLQ2RFYVcxbGJuTnBiMjVoYkdsMGVTQnlaV1IxWTNScGIyNGdabUZwYkdWa0p5azdYRzRnSUNBZ0lDQmpiMjV6YjJ4bExtVnljbTl5S0dVcE8xeHVJQ0FnSUNBZ2NHY3VZMnh2YzJVb0tUdGNiaUFnSUNBZ0lHbG1JQ2h6WTJGMGRHVnlVR3h2ZENsY2JpQWdJQ0FnSUNBZ2RXa3VjMlYwVlhCa1lYUmxTVzVrYVdOaGRHOXlLQ2h6WTJGMGRHVnlVR3h2ZENCaGN5QkVSeTVUWTJGMGRHVnlVR3h2ZEZacFpYZGxjaWt1Y205dmRDd2dabUZzYzJVcE8xeHVJQ0FnSUgxY2JpQWdmVHRjYmlBZ2NtVjBkWEp1SUc1bGR5QlFjbTl0YVhObFBFUkhMbE5qWVhSMFpYSlFiRzkwVm1sbGQyVnlJSHdnZFc1a1pXWnBibVZrUGloaGMzbHVZeUFvY21WemIyeDJaU3dnY21WcVpXTjBLU0E5UGlCN1hHNGdJQ0FnZEhKNUlIdGNiaUFnSUNBZ0lHbG1JQ2gxYVU5d2RHbHZibk11Wm1GemRGSnZkME52ZFc1MElDWW1JSFJoWW14bExuSnZkME52ZFc1MElENGdkV2xQY0hScGIyNXpMbVpoYzNSU2IzZERiM1Z1ZENBbUppQWhkV2xQY0hScGIyNXpXMEpaVUVGVFUxOU1RVkpIUlY5RVFWUkJYMWRCVWs1SlRrZGRLU0I3WEc0Z0lDQWdJQ0FnSUhWcExtUnBZV3h2WnlncFhHNGdJQ0FnSUNBZ0lDQWdMbUZrWkNoMWFTNWthWFpVWlhoMEtDZEJibUZzZVhOcGN5QnRhV2RvZENCMFlXdGxJSE5sZG1WeVlXd2diV2x1ZFhSbGN5NGdSRzhnZVc5MUlIZGhiblFnZEc4Z1kyOXVkR2x1ZFdVL0p5a3BYRzRnSUNBZ0lDQWdJQ0FnTG05dVQwc29ZWE41Ym1NZ0tDa2dQVDRnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdkSEo1SUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnWTI5dWMzUWdjbVZ6SUQwZ1lYZGhhWFFnWkc5U1pXUjFZMlVvS1R0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnY21WemIyeDJaU2h5WlhNcE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnZlNCallYUmphQ0FvWlNrZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNCeVpXcGxZM1FvWlNrN1hHNGdJQ0FnSUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0FnSUNBZ2ZTbGNiaUFnSUNBZ0lDQWdJQ0F1YjI1RFlXNWpaV3dvS0NrZ1BUNGdjbVZ6YjJ4MlpTaDFibVJsWm1sdVpXUXBLVnh1SUNBZ0lDQWdJQ0FnSUM1emFHOTNLQ2s3WEc0Z0lDQWdJQ0I5SUdWc2MyVWdlMXh1SUNBZ0lDQWdJQ0JqYjI1emRDQnlaWE1nUFNCaGQyRnBkQ0JrYjFKbFpIVmpaU2dwTzF4dUlDQWdJQ0FnSUNCeVpYTnZiSFpsS0hKbGN5azdYRzRnSUNBZ0lDQjlYRzRnSUNBZ2ZTQmpZWFJqYUNBb1pTa2dlMXh1SUNBZ0lDQWdjbVZxWldOMEtHVXBPMXh1SUNBZ0lIMWNiaUFnZlNrN1hHNTlYRzRpWFgwPSIsIi8qKiBFcnJvciAmIGluZm8gbWVzc2FnZXMgKi9cbmV4cG9ydCB2YXIgRVJST1JfTVNHO1xuKGZ1bmN0aW9uIChFUlJPUl9NU0cpIHtcbiAgICBFUlJPUl9NU0dbXCJOT19EQVRBRlJBTUVcIl0gPSBcIk5vIGRhdGFmcmFtZSBpcyBvcGVuZWRcIjtcbiAgICBFUlJPUl9NU0dbXCJOT19NSVNTSU5HX1ZBTFVFU1wiXSA9IFwiTm8gbWlzc2luZyB2YWx1ZXNcIjtcbiAgICBFUlJPUl9NU0dbXCJPTkVfQVZBSUxBQkxFX0ZFQVRVUkVcIl0gPSBcIk5vdCBlbm91Z2ggb2YgZmVhdHVyZSBjb2x1bW5zIHRvIGFwcGx5IGltcHV0YXRpb24gdXNpbmcgdGhlIEtOTiBtZXRob2RcIjtcbiAgICBFUlJPUl9NU0dbXCJPTkVfRkVBVFVSRV9TRUxFQ1RFRFwiXSA9IFwiSW1wdXRhdGlvbiBjYW5ub3QgYmUgYXBwbGllZCB0b1wiO1xuICAgIEVSUk9SX01TR1tcIlVOU1VQUE9SVEVEX0NPTFVNTl9UWVBFXCJdID0gXCJVbnN1cHBvcnRlZCBjb2x1bW4gdHlwZVwiO1xuICAgIEVSUk9SX01TR1tcIlVOU1VQUE9SVEVEX0lNUFVUQVRJT05fU1RSQVRFR1lcIl0gPSBcIlVuc3VwcG9ydGVkIGltcHV0YXRpb24gc3RyYXRlZ3lcIjtcbiAgICBFUlJPUl9NU0dbXCJLTk5fQ0FOTk9UX0JFX0FQUExJRURcIl0gPSBcIktOTiBpbXB1dGVyIGNhbm5vdCBiZSBhcHBsaWVkOiBubyBjb2x1bW5zIHRvIGJlIHVzZWQgYXMgZmVhdHVyZXNcIjtcbiAgICBFUlJPUl9NU0dbXCJLTk5fTk9fVEFSR0VUX0NPTFVNTlNcIl0gPSBcIktOTiBpbXB1dGVyIGNhbm5vdCBiZSBhcHBsaWVkOiBubyBjb2x1bW5zIHdpdGggbWlzc2luZyB2YWx1ZXNcIjtcbiAgICBFUlJPUl9NU0dbXCJLTk5fTk9fRkVBVFVSRV9DT0xVTU5TXCJdID0gXCJLTk4gaW1wdXRlciBjYW5ub3QgYmUgYXBwbGllZDogbm8gZmVhdHVyZSBjb2x1bW5zXCI7XG4gICAgRVJST1JfTVNHW1wiS05OX05PVF9FTk9VR0hfT0ZfUk9XU1wiXSA9IFwiS05OIGltcHV0ZXIgY2Fubm90IGJlIGFwcGxpZWQ6IG5vdCBlbm91Z2ggb2Ygcm93c1wiO1xuICAgIEVSUk9SX01TR1tcIktOTl9JTVBPU1NJQkxFX0lNUFVUQVRJT05cIl0gPSBcIkltcHV0YXRpb24gaXMgaW1wb3NzaWJsZSwgbm8gZmVhdHVyZXMgY2FuIGJlIHVzZWRcIjtcbiAgICBFUlJPUl9NU0dbXCJJTkNPUlJFQ1RfTkVJR0hCT1JTXCJdID0gXCJJbmNvcnJlY3QgbnVtYmVyIG9mIG5laWdoYm9yc1wiO1xuICAgIEVSUk9SX01TR1tcIktOTl9GQUlMU1wiXSA9IFwiS05OIElNUFVUQVRJT04gRkFJTFNcIjtcbiAgICBFUlJPUl9NU0dbXCJDT1JFX0lTU1VFXCJdID0gXCJDb3JlIGlzc3VlXCI7XG4gICAgRVJST1JfTVNHW1wiRkFJTEVEX1RPX0lNUFVURVwiXSA9IFwiRmFpbGVkIHRvIGltcHV0ZVwiO1xuICAgIEVSUk9SX01TR1tcIlVOU1VQUE9SVEVEX0ZJTExfVkFMVUVfVFlQRVwiXSA9IFwiVW5zdXBwb3J0ZWQgZmlsbCB2YWx1ZSB0eXBlXCI7XG4gICAgRVJST1JfTVNHW1wiRU1QVFlfQ09MVU1OXCJdID0gXCJDb2x1bW4gY29udGFpbnMganVzdCBudWxsIHZhbHVlc1wiO1xuICAgIEVSUk9SX01TR1tcIkZBSUxTX1RPX1BSRURJQ1RfSU1QVVRBVElPTl9GQUlMU1wiXSA9IFwiRmFpbGVkIHRvIHByZWRpY3QgaW1wdXRhdGlvbiBmYWlsc1wiO1xuICAgIEVSUk9SX01TR1tcIldST05HX1BSRURJQ1RJT05TXCJdID0gXCJ3cm9uZyBldmFsdWF0aW9uIG9mIEtOTiBpbXB1dGF0aW9uIGZhaWxzXCI7XG59KShFUlJPUl9NU0cgfHwgKEVSUk9SX01TRyA9IHt9KSk7XG47XG4vKiogU3VmZml4IHVzZWQgZm9yIGNvbHVtbiBjb3B5ICovXG5leHBvcnQgY29uc3QgQ09QWV9TVUZGSVggPSAnY29weSc7XG4vKiogVUkgdGl0bGVzICovXG5leHBvcnQgdmFyIFRJVExFO1xuKGZ1bmN0aW9uIChUSVRMRSkge1xuICAgIFRJVExFW1wiS05OX0lNUFVURVJcIl0gPSBcIkltcHV0ZVwiO1xuICAgIFRJVExFW1wiVEFCTEVcIl0gPSBcIlRhYmxlXCI7XG4gICAgVElUTEVbXCJJTl9QTEFDRVwiXSA9IFwiSW4tcGxhY2VcIjtcbiAgICBUSVRMRVtcIkNPTFVNTlNcIl0gPSBcIkltcHV0ZVwiO1xuICAgIFRJVExFW1wiRkVBVFVSRVNcIl0gPSBcIlVzaW5nXCI7XG4gICAgVElUTEVbXCJDQU5DRUxcIl0gPSBcIkNBTkNFTFwiO1xuICAgIFRJVExFW1wiUlVOXCJdID0gXCJSVU5cIjtcbiAgICBUSVRMRVtcIk9LXCJdID0gXCJPS1wiO1xuICAgIFRJVExFW1wiTkVJR0hCT1JTXCJdID0gXCJOZWlnaGJvcnNcIjtcbiAgICBUSVRMRVtcIkRJU1RBTkNFXCJdID0gXCJEaXN0YW5jZVwiO1xuICAgIFRJVExFW1wiRklMTFwiXSA9IFwiRmlsbFwiO1xuICAgIFRJVExFW1wiTUFSS1wiXSA9IFwiTWFya1wiO1xuICAgIFRJVExFW1wiU0lNUExFX0lNUFVURVJcIl0gPSBcIlNpbXBsZSBpbXB1dGVcIjtcbiAgICBUSVRMRVtcIlNFVFRJTkdTXCJdID0gXCJTZXR0aW5nc1wiO1xuICAgIFRJVExFW1wiS0VFUF9FTVBUWVwiXSA9IFwiS2VlcCBlbXB0eVwiO1xufSkoVElUTEUgfHwgKFRJVExFID0ge30pKTtcbjtcbi8qKiBIZWxwIGxpbmtzICovXG5leHBvcnQgY29uc3QgS05OX0lNUFVURVIgPSAnL2hlbHAvdHJhbnNmb3JtL21pc3NpbmctdmFsdWVzLWltcHV0YXRpb24nO1xuLyoqIFRvb2x0aXBzICovXG5leHBvcnQgdmFyIEhJTlQ7XG4oZnVuY3Rpb24gKEhJTlQpIHtcbiAgICBISU5UW1wiVEFSR0VUXCJdID0gXCJDb2x1bW5zIHdpdGggbWlzc2luZyB2YWx1ZXMgdGhhdCBtdXN0IGJlIGZpbGxlZFwiO1xuICAgIEhJTlRbXCJGRUFUVVJFU1wiXSA9IFwiQ29sdW1ucyB3aXRoIGZlYXR1cmVzIHRvIGJlIHVzZWQgZm9yIGRldGVybWluaW5nIHRoZSAnbmVhcmVzdCcgZWxlbWVudHMgaW4gdGhlIEtOTiBtZXRob2RcIjtcbiAgICBISU5UW1wiSU5fUExBQ0VcIl0gPSBcIkRlZmluZXMgd2hldGhlciB0byB1c2UgaW4tcGxhY2UgaW1wdXRhdGlvbiBvciBhZGQgYSBuZXcgY29sdW1uIHdpdGhvdXQgbWlzc2luZyB2YWx1ZXNcIjtcbiAgICBISU5UW1wiTUVUUklDXCJdID0gXCJUeXBlIG9mIG1ldHJpYyBiZXR3ZWVuIHRoZSBmZWF0dXJlIHZhbHVlc1wiO1xuICAgIEhJTlRbXCJXRUlHSFRcIl0gPSBcIldlaWdodFwiO1xuICAgIEhJTlRbXCJORUlHSEJPUlNcIl0gPSBcIk5laWdoYm9ycyBjb3VudCB1c2VkIGluIHRoZSBLTk4gbWV0aG9kXCI7XG4gICAgSElOVFtcIkRJU1RBTkNFXCJdID0gXCJUeXBlIG9mIGRpc3RhbmNlIGJldHdlZW4gZWxlbWVudHMgd2l0aCB0aGUgc3BlY2lmaWVkIGZlYXR1cmVzXCI7XG4gICAgSElOVFtcIk1FVFJJQ19TRVRUSU5HU1wiXSA9IFwiU2hvdyBhZGRpdGlvbmFsIG9wdGlvbnNcIjtcbiAgICBISU5UW1wiRklMTF9GQUlMRURfSVRFTVNcIl0gPSBcIkltcHV0ZSBtaXNzaW5nIHZhbHVlcyB1c2luZyBhIHNpbXBsZSBhcHByb2FjaDogbWVhbiwgbWVkaWFuIG9yIG1vc3QgZnJlcXVlbnRcIjtcbiAgICBISU5UW1wiTUFSS19GQUlMRURfSVRFTVNcIl0gPSBcIk1hcmsgbWlzc2luZyB2YWx1ZXMgY2VsbHMgd2l0aCBhIGNvbG9yXCI7XG4gICAgSElOVFtcIkZJTExfVkFMVUVcIl0gPSBcIkZpbGwgdmFsdWVcIjtcbiAgICBISU5UW1wiSU1QVVRBVElPTl9TRVRUSU5HU1wiXSA9IFwiU2ltcGxlIGltcHV0YXRpb24gc2V0dGluZ3NcIjtcbiAgICBISU5UW1wiS0VFUF9FTVBUWVwiXSA9IFwiRGVmaW5lcyB3aGV0aGVyIHRvIGtlZXAgZW1wdHkgbWlzc2luZyB2YWx1ZXMgZmFpbGVkIHRvIGJlIGltcHV0ZWQgT1IgZmlsbCB0aGVtIHVzaW5nIHNpbXBsZSBpbXB1dGF0aW9uXCI7XG59KShISU5UIHx8IChISU5UID0ge30pKTtcbjtcbiIsIi8vIFRvb2xzIGZvciBtaXNzaW5nIHZhbHVlcyBpbXB1dGF0aW9uIHVzaW5nIHRoZSBrLW5lYXJlc3QgbmVpZ2hib3JzIG1ldGhvZFxuaW1wb3J0ICogYXMgZ3JvayBmcm9tICdkYXRhZ3Jvay1hcGkvZ3Jvayc7XG5pbXBvcnQgKiBhcyBERyBmcm9tICdkYXRhZ3Jvay1hcGkvZGcnO1xuaW1wb3J0IHsgRVJST1JfTVNHLCBDT1BZX1NVRkZJWCB9IGZyb20gJy4vdWktY29uc3RhbnRzJztcbi8qKiBDb2x1bW4gdHlwZXMgc3VwcG9ydGVkIGJ5IHRoZSBtaXNzaW5nIHZhbHVlcyBpbXB1dGVyICovXG5leHBvcnQgY29uc3QgU1VQUE9SVEVEX0NPTFVNTl9UWVBFUyA9IFtcbiAgICBERy5DT0xVTU5fVFlQRS5JTlQsXG4gICAgREcuQ09MVU1OX1RZUEUuRkxPQVQsXG4gICAgREcuQ09MVU1OX1RZUEUuU1RSSU5HLFxuICAgIERHLkNPTFVNTl9UWVBFLkRBVEVfVElNRSxcbiAgICBERy5DT0xVTU5fVFlQRS5RTlVNLFxuXTtcbi8qKiBSZXR1cm4gbnVsbCB2YWx1ZSB3aXRoIHJlc3BlY3QgdG8gdGhlIGNvbHVtbiB0eXBlICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0TnVsbFZhbHVlKGNvbCkge1xuICAgIHN3aXRjaCAoY29sLnR5cGUpIHtcbiAgICAgICAgY2FzZSBERy5DT0xVTU5fVFlQRS5JTlQ6XG4gICAgICAgICAgICByZXR1cm4gREcuSU5UX05VTEw7XG4gICAgICAgIGNhc2UgREcuQ09MVU1OX1RZUEUuRkxPQVQ6XG4gICAgICAgICAgICByZXR1cm4gREcuRkxPQVRfTlVMTDtcbiAgICAgICAgY2FzZSBERy5DT0xVTU5fVFlQRS5RTlVNOlxuICAgICAgICAgICAgcmV0dXJuIERHLkZMT0FUX05VTEw7XG4gICAgICAgIGNhc2UgREcuQ09MVU1OX1RZUEUuREFURV9USU1FOlxuICAgICAgICAgICAgcmV0dXJuIERHLkZMT0FUX05VTEw7XG4gICAgICAgIGNhc2UgREcuQ09MVU1OX1RZUEUuU1RSSU5HOlxuICAgICAgICAgICAgcmV0dXJuIGNvbC5tYXg7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoRVJST1JfTVNHLlVOU1VQUE9SVEVEX0NPTFVNTl9UWVBFKTtcbiAgICB9XG59XG4vKiogTWV0cmljIHR5cGVzIChiZXR3ZWVuIGNvbHVtbiBlbGVtZW50cykgKi9cbmV4cG9ydCB2YXIgTUVUUklDX1RZUEU7XG4oZnVuY3Rpb24gKE1FVFJJQ19UWVBFKSB7XG4gICAgTUVUUklDX1RZUEVbXCJPTkVfSE9UXCJdID0gXCJPbmUtaG90XCI7XG4gICAgTUVUUklDX1RZUEVbXCJESUZGRVJFTkNFXCJdID0gXCJEaWZmZXJlbmNlXCI7XG59KShNRVRSSUNfVFlQRSB8fCAoTUVUUklDX1RZUEUgPSB7fSkpO1xuO1xuLyoqIERpc3RhbmNlIHR5cGVzIChvdmVyIHNldmVyYWwgY29sdW1ucykuICovXG5leHBvcnQgdmFyIERJU1RBTkNFX1RZUEU7XG4oZnVuY3Rpb24gKERJU1RBTkNFX1RZUEUpIHtcbiAgICBESVNUQU5DRV9UWVBFW1wiRVVDTElERUFOXCJdID0gXCJFdWNsaWRlYW5cIjtcbiAgICBESVNUQU5DRV9UWVBFW1wiTUFOSEFUVEFOXCJdID0gXCJNYW5oYXR0YW5cIjtcbn0pKERJU1RBTkNFX1RZUEUgfHwgKERJU1RBTkNFX1RZUEUgPSB7fSkpO1xuO1xuLyoqIERlZmF1bHQgdmFsdWVzICovXG5leHBvcnQgdmFyIERFRkFVTFQ7XG4oZnVuY3Rpb24gKERFRkFVTFQpIHtcbiAgICBERUZBVUxUW0RFRkFVTFRbXCJXRUlHSFRcIl0gPSAxXSA9IFwiV0VJR0hUXCI7XG4gICAgREVGQVVMVFtERUZBVUxUW1wiTkVJR0hCT1JTXCJdID0gNF0gPSBcIk5FSUdIQk9SU1wiO1xuICAgIERFRkFVTFRbREVGQVVMVFtcIklOX1BMQUNFXCJdID0gMV0gPSBcIklOX1BMQUNFXCI7XG4gICAgREVGQVVMVFtERUZBVUxUW1wiU0VMRUNURURcIl0gPSAxXSA9IFwiU0VMRUNURURcIjtcbiAgICBERUZBVUxUW0RFRkFVTFRbXCJLRUVQX0VNUFRZXCJdID0gMF0gPSBcIktFRVBfRU1QVFlcIjtcbn0pKERFRkFVTFQgfHwgKERFRkFVTFQgPSB7fSkpO1xuO1xuLyoqIE1pbiBudW1iZXIgb2YgbmVpZ2hib3JzIGZvciBLTk4gKi9cbmV4cG9ydCBjb25zdCBNSU5fTkVJR0hCT1JTID0gMTtcbi8qKiBJbXB1dGUgbWlzc2luZyB2YWx1ZXMgdXNpbmcgdGhlIEtOTiBtZXRob2QgYW5kIHJldHVybnMgYW4gYXJyYXkgb2YgaXRlbXMgZm9yIHdoaWNoIGFuIGltcHV0YXRpb24gZmFpbHMgKi9cbmV4cG9ydCBmdW5jdGlvbiBpbXB1dGUoZGYsIHRhcmdldENvbE5hbWVzLCBmZWF0dXJlc01ldHJpY3MsIG1pc3NpbmdWYWxzSW5kaWNlcywgZGlzdGFuY2UsIG5laWdoYm9ycywgaW5QbGFjZSkge1xuICAgIC8vIDEuIENoZWNrIGlucHV0cyBjb21wbGV0bmVzc1xuICAgIGlmIChuZWlnaGJvcnMgPCBNSU5fTkVJR0hCT1JTKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoRVJST1JfTVNHLklOQ09SUkVDVF9ORUlHSEJPUlMpO1xuICAgIGlmIChkZi5yb3dDb3VudCA8IDIpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihFUlJPUl9NU0cuS05OX05PVF9FTk9VR0hfT0ZfUk9XUyk7XG4gICAgaWYgKHRhcmdldENvbE5hbWVzLmxlbmd0aCA9PT0gMClcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKEVSUk9SX01TRy5LTk5fTk9fVEFSR0VUX0NPTFVNTlMpO1xuICAgIGlmIChmZWF0dXJlc01ldHJpY3Muc2l6ZSA9PT0gMClcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKEVSUk9SX01TRy5LTk5fTk9fRkVBVFVSRV9DT0xVTU5TKTtcbiAgICBpZiAoZmVhdHVyZXNNZXRyaWNzLnNpemUgPT09IDEpXG4gICAgICAgIHRhcmdldENvbE5hbWVzLmZvckVhY2goKG5hbWUpID0+IHtcbiAgICAgICAgICAgIGlmIChmZWF0dXJlc01ldHJpY3MuaGFzKG5hbWUpKVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgJHtFUlJPUl9NU0cuS05OX05PX0ZFQVRVUkVfQ09MVU1OU30gY2FuIGJlIHVzZWQgZm9yIHRoZSBjb2x1bW4gJyR7bmFtZX0nYCk7XG4gICAgICAgIH0pO1xuICAgIHRhcmdldENvbE5hbWVzLmZvckVhY2goKG5hbWUpID0+IHtcbiAgICAgICAgaWYgKCFtaXNzaW5nVmFsc0luZGljZXMuaGFzKG5hbWUpKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAke0VSUk9SX01TRy5LTk5fRkFJTFN9OiAke0VSUk9SX01TRy5XUk9OR19QUkVESUNUSU9OU31gKTtcbiAgICB9KTtcbiAgICBjb25zdCBjb2x1bW5zID0gZGYuY29sdW1ucztcbiAgICAvLyAyLiBJbXB1dGF0aW9uXG4gICAgdGFyZ2V0Q29sTmFtZXMuZm9yRWFjaCgobmFtZSkgPT4ge1xuICAgICAgICBpZiAoIVNVUFBPUlRFRF9DT0xVTU5fVFlQRVMuaW5jbHVkZXMoY29sdW1ucy5ieU5hbWUobmFtZSkudHlwZSkpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoRVJST1JfTVNHLlVOU1VQUE9SVEVEX0NPTFVNTl9UWVBFKTtcbiAgICB9KTtcbiAgICBmZWF0dXJlc01ldHJpY3MuZm9yRWFjaCgodmFsLCBuYW1lKSA9PiB7XG4gICAgICAgIGlmICghU1VQUE9SVEVEX0NPTFVNTl9UWVBFUy5pbmNsdWRlcyhkZi5nZXRDb2wobmFtZSkudHlwZSkpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoRVJST1JfTVNHLlVOU1VQUE9SVEVEX0NPTFVNTl9UWVBFKTtcbiAgICB9KTtcbiAgICAvKiogRmFpbGVkIHRvIGltcHV0ZSBpdGVtcyAqL1xuICAgIGNvbnN0IGZhaWxlZFRvSW1wdXRlID0gbmV3IE1hcCgpO1xuICAgIC8vIDIuIE1pc3NpbmcgdmFsdWVzIGltcHV0YXRpb24gaW4gZWFjaCB0YXJnZXQgY29sdW1uXG4gICAgdGFyZ2V0Q29sTmFtZXMuZm9yRWFjaCgobmFtZSkgPT4ge1xuICAgICAgICBjb25zdCBjb2wgPSBjb2x1bW5zLmJ5TmFtZShuYW1lKTtcbiAgICAgICAgY29uc3QgbnVsbFZhbHVlID0gZ2V0TnVsbFZhbHVlKGNvbCk7XG4gICAgICAgIGNvbnN0IGxlbiA9IGNvbC5sZW5ndGg7XG4gICAgICAgIGNvbnN0IHNvdXJjZSA9IGNvbC5nZXRSYXdEYXRhKCk7XG4gICAgICAgIGNvbnN0IGZyZXF1ZW5jaWVzID0gbmV3IFVpbnQxNkFycmF5KGNvbC5jYXRlZ29yaWVzLmxlbmd0aCk7XG4gICAgICAgIGNvbnN0IGZlYXR1cmVTb3VyY2UgPSBbXTtcbiAgICAgICAgY29uc3QgZmVhdHVyZU51bGxWYWwgPSBbXTtcbiAgICAgICAgY29uc3QgbWV0cmljRnVuYyA9IFtdO1xuICAgICAgICBjb25zdCBmYWlsZWRUb0ltcHV0ZUluZGljZXMgPSBbXTtcbiAgICAgICAgLy8gY3JlYXRlIGZlYXR1cmVzIHRvb2xzXG4gICAgICAgIGZlYXR1cmVzTWV0cmljcy5mb3JFYWNoKChtZXRyaWNJbmZvLCBuYW1lKSA9PiB7XG4gICAgICAgICAgICBpZiAobmFtZSAhPT0gY29sLm5hbWUpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBmZWF0dXJlID0gY29sdW1ucy5ieU5hbWUobmFtZSk7XG4gICAgICAgICAgICAgICAgZmVhdHVyZVNvdXJjZS5wdXNoKGZlYXR1cmUuZ2V0UmF3RGF0YSgpKTtcbiAgICAgICAgICAgICAgICBmZWF0dXJlTnVsbFZhbC5wdXNoKGdldE51bGxWYWx1ZShmZWF0dXJlKSk7XG4gICAgICAgICAgICAgICAgc3dpdGNoIChtZXRyaWNJbmZvLnR5cGUpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBNRVRSSUNfVFlQRS5ESUZGRVJFTkNFOlxuICAgICAgICAgICAgICAgICAgICAgICAgbWV0cmljRnVuYy5wdXNoKChhLCBiKSA9PiBtZXRyaWNJbmZvLndlaWdodCAqIE1hdGguYWJzKGEgLSBiKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBNRVRSSUNfVFlQRS5PTkVfSE9UOlxuICAgICAgICAgICAgICAgICAgICAgICAgbWV0cmljRnVuYy5wdXNoKChhLCBiKSA9PiBtZXRyaWNJbmZvLndlaWdodCAqICgoYSA9PT0gYikgPyAwIDogMSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBmZWF0dXJlc0NvdW50ID0gZmVhdHVyZVNvdXJjZS5sZW5ndGg7XG4gICAgICAgIGNvbnN0IHByb3BlckluZGljZXMgPSBuZXcgVWludDMyQXJyYXkoZmVhdHVyZVNvdXJjZS5sZW5ndGgpO1xuICAgICAgICBjb25zdCBidWZmZXJWZWN0b3IgPSBuZXcgRmxvYXQzMkFycmF5KGZlYXR1cmVTb3VyY2UubGVuZ3RoKTtcbiAgICAgICAgbGV0IHByb3BlckluZGljZXNDb3VudCA9IDA7XG4gICAgICAgIC8vIGNsb3Nlc3QgaXRlbXNcbiAgICAgICAgY29uc3QgbmVhcmVzdEl0ZW1zID0gbmV3IEFycmF5KG5laWdoYm9ycyk7XG4gICAgICAgIGxldCBuZWFyZXN0SXRlbXNDb3VudCA9IDA7XG4gICAgICAgIC8vIGF1eGlsaXJ5IHZhcmlhYmxlc1xuICAgICAgICBsZXQgbWF4SW5kID0gMDtcbiAgICAgICAgbGV0IG1heERpc3QgPSAwO1xuICAgICAgICBsZXQgc3VtID0gMDtcbiAgICAgICAgbGV0IGZpbGxWYWx1ZSA9IDA7XG4gICAgICAgIC8qKiBPYnRhaW4gcHJvcGVyIGluZGljZXMgZm9yIEtOTjogZmVhdHVyZXMgd2l0aCBtaXNzaW5nIHZhbHMgYXJlIHNraXBwZWQgKi9cbiAgICAgICAgY29uc3QgZ2V0UHJvcGVySW5kZWNlcyA9IChpZHgpID0+IHtcbiAgICAgICAgICAgIHByb3BlckluZGljZXNDb3VudCA9IDA7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGZlYXR1cmVzQ291bnQ7ICsraSlcbiAgICAgICAgICAgICAgICBpZiAoZmVhdHVyZVNvdXJjZVtpXVtpZHhdICE9PSBmZWF0dXJlTnVsbFZhbFtpXSkge1xuICAgICAgICAgICAgICAgICAgICBwcm9wZXJJbmRpY2VzW3Byb3BlckluZGljZXNDb3VudF0gPSBpO1xuICAgICAgICAgICAgICAgICAgICArK3Byb3BlckluZGljZXNDb3VudDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIC8qKiBDb21wdXRlIGJ1ZmZlciB2ZWN0b3IgKi9cbiAgICAgICAgY29uc3QgY29tcHV0ZUJ1ZmZlclZlY3RvciA9IChpZHgsIGN1cikgPT4ge1xuICAgICAgICAgICAgcHJvcGVySW5kaWNlcy5mb3JFYWNoKChwcm9wZXJJbmRleCwgaykgPT4ge1xuICAgICAgICAgICAgICAgIGJ1ZmZlclZlY3RvcltrXSA9IG1ldHJpY0Z1bmNbcHJvcGVySW5kZXhdKGZlYXR1cmVTb3VyY2VbcHJvcGVySW5kZXhdW2lkeF0sIGZlYXR1cmVTb3VyY2VbcHJvcGVySW5kZXhdW2N1cl0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH07XG4gICAgICAgIC8qKiBFdWNsaWRlYW4gZGlzdGFuY2UgZnVuY3Rpb24gKi9cbiAgICAgICAgY29uc3QgZXVjbGlkZWFuRGlzdEZ1bmMgPSAoKSA9PiB7XG4gICAgICAgICAgICBsZXQgc3VtID0gMDtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcHJvcGVySW5kaWNlc0NvdW50OyArK2kpXG4gICAgICAgICAgICAgICAgc3VtICs9IGJ1ZmZlclZlY3RvcltpXSAqIGJ1ZmZlclZlY3RvcltpXTtcbiAgICAgICAgICAgIHJldHVybiBNYXRoLnNxcnQoc3VtKTtcbiAgICAgICAgfTtcbiAgICAgICAgLyoqIE1hbmhhdHRhbiBkaXN0YW5jZSBmdW5jdGlvbiAqL1xuICAgICAgICBjb25zdCBtYW5oYXR0YW5EaXN0RnVuYyA9ICgpID0+IHtcbiAgICAgICAgICAgIGxldCBzdW0gPSAwO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwcm9wZXJJbmRpY2VzQ291bnQ7ICsraSlcbiAgICAgICAgICAgICAgICBzdW0gKz0gTWF0aC5hYnMoYnVmZmVyVmVjdG9yW2ldKTtcbiAgICAgICAgICAgIHJldHVybiBNYXRoLnNxcnQoc3VtKTtcbiAgICAgICAgfTtcbiAgICAgICAgLyoqIFJldHVybiBub3JtIG9mIHRoZSBidWZmZXIgdmVjdG9yIChkaXN0YW5jZSBiZXR3ZWVuIGktdGggJiBqLXRoIGVsZW1lbnRzKSAqL1xuICAgICAgICBjb25zdCBkaXN0ID0gKGRpc3RhbmNlID09PSBESVNUQU5DRV9UWVBFLkVVQ0xJREVBTikgPyBldWNsaWRlYW5EaXN0RnVuYyA6IG1hbmhhdHRhbkRpc3RGdW5jO1xuICAgICAgICAvKiogQ2hlY2sgaWYgdGhlIGN1cnJlbnQgaXRlbSAoaS5lLiB0YWJsZSByb3cpIGNhbiBiZSB1c2VkICovXG4gICAgICAgIGNvbnN0IGNhbkl0ZW1CZVVzZWQgPSAoY3VyKSA9PiB7XG4gICAgICAgICAgICBpZiAoc291cmNlW2N1cl0gPT09IG51bGxWYWx1ZSlcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHByb3BlckluZGljZXNDb3VudDsgKytpKVxuICAgICAgICAgICAgICAgIGlmIChmZWF0dXJlU291cmNlW3Byb3BlckluZGljZXNbaV1dW2N1cl0gPT09IGZlYXR1cmVOdWxsVmFsW3Byb3BlckluZGljZXNbaV1dKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfTtcbiAgICAgICAgLyoqIFJldHVybiB0aGUgbW9zdCBmcmVxdWVudCBvZiB0aGUgbmVhcmVzdCBpdGVtcyAoZm9yIGNhdGVnb3JpYWwgZGF0YSkgKi9cbiAgICAgICAgY29uc3QgbW9zdEZyZXF1ZW50T2ZUaGVOZWFyZXN0SXRlbXMgPSAoKSA9PiB7XG4gICAgICAgICAgICBmcmVxdWVuY2llcy5mb3JFYWNoKCh2LCBpLCBhcnIpID0+IGFycltpXSA9IDApO1xuICAgICAgICAgICAgbGV0IGkgPSAwO1xuICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IG5lYXJlc3RJdGVtc0NvdW50OyArK2kpXG4gICAgICAgICAgICAgICAgKytmcmVxdWVuY2llc1tzb3VyY2VbbmVhcmVzdEl0ZW1zW2ldLmluZGV4XV07XG4gICAgICAgICAgICBsZXQgbWF4RnJlcSA9IGZyZXF1ZW5jaWVzWzBdO1xuICAgICAgICAgICAgbGV0IG1heEZyZXFJZHggPSAwO1xuICAgICAgICAgICAgZnJlcXVlbmNpZXMuZm9yRWFjaCgodiwgaSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh2ID4gbWF4RnJlcSkge1xuICAgICAgICAgICAgICAgICAgICBtYXhGcmVxID0gdjtcbiAgICAgICAgICAgICAgICAgICAgbWF4RnJlcUlkeCA9IGk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gbWF4RnJlcUlkeDtcbiAgICAgICAgfTtcbiAgICAgICAgLyoqIEdldCBpbXB1dGF0aW9uIHZhbHVlICovXG4gICAgICAgIGNvbnN0IGdldEZpbGxWYWx1ZSA9IChpZHgpID0+IHtcbiAgICAgICAgICAgIGdldFByb3BlckluZGVjZXMoaWR4KTtcbiAgICAgICAgICAgIC8vIGNoZWNrIGF2YWlsYWJsZSBmZWF0dXJlc1xuICAgICAgICAgICAgaWYgKHByb3BlckluZGljZXNDb3VudCA9PT0gMClcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7RVJST1JfTVNHLktOTl9JTVBPU1NJQkxFX0lNUFVUQVRJT059OiB0aGUgY29sdW1uIFwiJHtjb2wubmFtZX1cIiwgcm93ICR7aWR4ICsgMX1gKTtcbiAgICAgICAgICAgIG5lYXJlc3RJdGVtc0NvdW50ID0gMDtcbiAgICAgICAgICAgIC8vIHNlYXJjaCBmb3IgdGhlIGNsb3Nlc3QgaXRlbXNcbiAgICAgICAgICAgIGZvciAobGV0IGN1ciA9IDA7IGN1ciA8IGxlbjsgKytjdXIpXG4gICAgICAgICAgICAgICAgaWYgKGNhbkl0ZW1CZVVzZWQoY3VyKSAmJiAoY3VyICE9PSBpZHgpKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIDEpIGNvbXB1dGUgZGlzdGFuY2UgYmV0d2VlbiBjdXItdGggYW5kIGlkeC10aCBpdGVtc1xuICAgICAgICAgICAgICAgICAgICBjb21wdXRlQnVmZmVyVmVjdG9yKGlkeCwgY3VyKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY3VyRGlzdCA9IGRpc3QoKTtcbiAgICAgICAgICAgICAgICAgICAgLy8gMikgaW5zZXJ0IHRoZSBjdXJyZW50IGl0ZW1cbiAgICAgICAgICAgICAgICAgICAgaWYgKG5lYXJlc3RJdGVtc0NvdW50IDwgbmVpZ2hib3JzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBuZWFyZXN0SXRlbXNbbmVhcmVzdEl0ZW1zQ291bnRdID0geyBpbmRleDogY3VyLCBkaXN0OiBjdXJEaXN0IH07XG4gICAgICAgICAgICAgICAgICAgICAgICArK25lYXJlc3RJdGVtc0NvdW50O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gMi4xKSBmaW5kIHRoZSBmYXJlc3RcbiAgICAgICAgICAgICAgICAgICAgICAgIG1heEluZCA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICBtYXhEaXN0ID0gbmVhcmVzdEl0ZW1zWzBdLmRpc3Q7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMTsgaSA8IG5lYXJlc3RJdGVtc0NvdW50OyArK2kpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1heERpc3QgPCBuZWFyZXN0SXRlbXNbaV0uZGlzdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhEaXN0ID0gbmVhcmVzdEl0ZW1zW2ldLmRpc3Q7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heEluZCA9IGk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gMi4yKSByZXBsYWNlXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY3VyRGlzdCA8IG1heERpc3QpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmVhcmVzdEl0ZW1zW21heEluZF0gPSB7IGluZGV4OiBjdXIsIGRpc3Q6IGN1ckRpc3QgfTtcbiAgICAgICAgICAgICAgICAgICAgfSAvLyBlbHNlXG4gICAgICAgICAgICAgICAgfSAvLyBmb3IgY3VyXG4gICAgICAgICAgICAvLyBjaGVjayBmb3VuZCBuZWFyZXN0IGl0ZW1zXG4gICAgICAgICAgICBpZiAobmVhcmVzdEl0ZW1zQ291bnQgPT09IDApXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAke0VSUk9SX01TRy5LTk5fSU1QT1NTSUJMRV9JTVBVVEFUSU9OfTogdGhlIGNvbHVtbiBcIiR7Y29sLm5hbWV9XCIsIHJvdyAke2lkeCArIDF9YCk7XG4gICAgICAgICAgICBpZiAoY29sLnR5cGUgPT09IERHLkNPTFVNTl9UWVBFLlNUUklORylcbiAgICAgICAgICAgICAgICByZXR1cm4gbW9zdEZyZXF1ZW50T2ZUaGVOZWFyZXN0SXRlbXMoKTtcbiAgICAgICAgICAgIC8vIGNvbXB1dGUgZmlsbCB2YWx1ZVxuICAgICAgICAgICAgc3VtID0gMDtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbmVhcmVzdEl0ZW1zQ291bnQ7ICsraSlcbiAgICAgICAgICAgICAgICBzdW0gKz0gc291cmNlW25lYXJlc3RJdGVtc1tpXS5pbmRleF07XG4gICAgICAgICAgICBmaWxsVmFsdWUgPSBzdW0gLyBuZWFyZXN0SXRlbXNDb3VudDtcbiAgICAgICAgICAgIGlmIChjb2wudHlwZSA9PT0gREcuQ09MVU1OX1RZUEUuSU5UKVxuICAgICAgICAgICAgICAgIHJldHVybiBNYXRoLnJvdW5kKGZpbGxWYWx1ZSk7XG4gICAgICAgICAgICByZXR1cm4gZmlsbFZhbHVlO1xuICAgICAgICB9OyAvLyBnZXRGaWxsVmFsdWVcbiAgICAgICAgaWYgKGluUGxhY2UpIHtcbiAgICAgICAgICAgIC8vIHVzZSBpbmRpY2VzIGZvdW5kIHByZXZpb3VzZWx5XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGkgb2YgbWlzc2luZ1ZhbHNJbmRpY2VzLmdldChuYW1lKSlcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBzb3VyY2VbaV0gPSBnZXRGaWxsVmFsdWUoaSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgZmFpbGVkVG9JbXB1dGVJbmRpY2VzLnB1c2goaSk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghKGVyciBpbnN0YW5jZW9mIEVycm9yKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIGdyb2suc2hlbGwuZXJyb3IoRVJST1JfTVNHLkNPUkVfSVNTVUUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChmYWlsZWRUb0ltcHV0ZUluZGljZXMubGVuZ3RoID4gMClcbiAgICAgICAgICAgICAgICBmYWlsZWRUb0ltcHV0ZS5zZXQobmFtZSwgZmFpbGVkVG9JbXB1dGVJbmRpY2VzKTtcbiAgICAgICAgICAgIC8vIHRvIHJlc2V0IHZpZXcgICAgICBcbiAgICAgICAgICAgIGNvbC5zZXQoMCwgY29sLmdldCgwKSk7XG4gICAgICAgIH0gLy8gaWZcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAvL0B0cy1pZ25vcmVcbiAgICAgICAgICAgIGNvbnN0IGNvcHkgPSBjb2wuY2xvbmUoKTtcbiAgICAgICAgICAgIGxldCBpID0gMTtcbiAgICAgICAgICAgIGxldCBjb3B5TmFtZSA9IGAke25hbWV9KCR7Q09QWV9TVUZGSVh9KWA7XG4gICAgICAgICAgICAvLyBmaW5kIGFuIGFwcHJvcHJpYXRlIG5hbWVcbiAgICAgICAgICAgIHdoaWxlIChkZi5jb2x1bW5zLmNvbnRhaW5zKGNvcHlOYW1lKSkge1xuICAgICAgICAgICAgICAgIGNvcHlOYW1lID0gYCR7bmFtZX0oJHtDT1BZX1NVRkZJWH0gJHtpfSlgO1xuICAgICAgICAgICAgICAgICsraTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvcHkubmFtZSA9IGNvcHlOYW1lO1xuICAgICAgICAgICAgY29uc3QgY29weVNvdXJjZSA9IGNvcHkuZ2V0UmF3RGF0YSgpO1xuICAgICAgICAgICAgLy8gdXNlIGluZGljZXMgZm91bmQgcHJldmlvdXNlbHlcbiAgICAgICAgICAgIGZvciAoY29uc3QgaSBvZiBtaXNzaW5nVmFsc0luZGljZXMuZ2V0KG5hbWUpKVxuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGNvcHlTb3VyY2VbaV0gPSBnZXRGaWxsVmFsdWUoaSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgZmFpbGVkVG9JbXB1dGVJbmRpY2VzLnB1c2goaSk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghKGVyciBpbnN0YW5jZW9mIEVycm9yKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIGdyb2suc2hlbGwuZXJyb3IoRVJST1JfTVNHLkNPUkVfSVNTVUUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChmYWlsZWRUb0ltcHV0ZUluZGljZXMubGVuZ3RoID4gMClcbiAgICAgICAgICAgICAgICBmYWlsZWRUb0ltcHV0ZS5zZXQoY29weU5hbWUsIGZhaWxlZFRvSW1wdXRlSW5kaWNlcyk7XG4gICAgICAgICAgICBjb3B5LnNldCgwLCBjb3B5LmdldCgwKSk7XG4gICAgICAgICAgICBkZi5jb2x1bW5zLmFkZChjb3B5KTtcbiAgICAgICAgfSAvLyBlbHNlXG4gICAgfSk7XG4gICAgcmV0dXJuIGZhaWxlZFRvSW1wdXRlO1xufSAvLyBpbXB1dGVcbi8qKiBSZXR1cm4gaW5kaWNlcyBvZiBtaXNzaW5nIHZhbHVlcyBmb3IgZWFjaCBjb2x1bW4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRNaXNzaW5nVmFsc0luZGljZXMoY29sdW1ucykge1xuICAgIGNvbnN0IG1pc1ZhbHNJbmRzID0gbmV3IE1hcCgpO1xuICAgIGZvciAoY29uc3QgY29sIG9mIGNvbHVtbnMpIHtcbiAgICAgICAgaWYgKCFTVVBQT1JURURfQ09MVU1OX1RZUEVTLmluY2x1ZGVzKGNvbC50eXBlKSlcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihFUlJPUl9NU0cuVU5TVVBQT1JURURfQ09MVU1OX1RZUEUpO1xuICAgICAgICBpZiAoY29sLnN0YXRzLm1pc3NpbmdWYWx1ZUNvdW50ID09PSAwKVxuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIGNvbnN0IGluZGljZXMgPSBbXTtcbiAgICAgICAgY29uc3QgbnVsbFZhbHVlID0gZ2V0TnVsbFZhbHVlKGNvbCk7XG4gICAgICAgIGNvbC5nZXRSYXdEYXRhKCkuZm9yRWFjaCgodmFsLCBpZHgpID0+IHtcbiAgICAgICAgICAgIGlmICh2YWwgPT09IG51bGxWYWx1ZSlcbiAgICAgICAgICAgICAgICBpbmRpY2VzLnB1c2goaWR4KTtcbiAgICAgICAgfSk7XG4gICAgICAgIG1pc1ZhbHNJbmRzLnNldChjb2wubmFtZSwgaW5kaWNlcyk7XG4gICAgfVxuICAgIHJldHVybiBtaXNWYWxzSW5kcztcbn1cbi8qKiBQcmVkaWN0IGV4aXN0ZW5jZSBvZiBtaXNzaW5nIHZhbHVlcyBpbXB1dGF0aW9uIGZhaWxzICovXG5leHBvcnQgZnVuY3Rpb24gYXJlVGhlcmVGYWlscyh0YXJnZXRDb2xOYW1lcywgZmVhdHVyZUNvbE5hbWVzLCBtaXNWYWxzSW5kcykge1xuICAgIC8vIGNoZWNrIGZlYXR1cmUgY29sdW1uc1xuICAgIGZvciAoY29uc3QgbmFtZSBvZiBmZWF0dXJlQ29sTmFtZXMpXG4gICAgICAgIGlmICghbWlzVmFsc0luZHMuaGFzKG5hbWUpKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIC8vIGNoZWNrIHRhcmdldCBjb2x1bW5zXG4gICAgZm9yIChjb25zdCB0YXJnZXQgb2YgdGFyZ2V0Q29sTmFtZXMpIHtcbiAgICAgICAgY29uc3QgaW5kaWNlcyA9IG1pc1ZhbHNJbmRzLmdldCh0YXJnZXQpO1xuICAgICAgICBpZiAoaW5kaWNlcyA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKEVSUk9SX01TRy5GQUlMU19UT19QUkVESUNUX0lNUFVUQVRJT05fRkFJTFMpO1xuICAgICAgICBmb3IgKGNvbnN0IGlkeCBvZiBpbmRpY2VzKSB7XG4gICAgICAgICAgICBsZXQgZmFpbFRvSW1wdXRlID0gdHJ1ZTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgZmVhdHVyZSBvZiBmZWF0dXJlQ29sTmFtZXMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBmZWF0dXJlSW5kcyA9IG1pc1ZhbHNJbmRzLmdldChmZWF0dXJlKTtcbiAgICAgICAgICAgICAgICBpZiAoZmVhdHVyZUluZHMgPT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKEVSUk9SX01TRy5GQUlMU19UT19QUkVESUNUX0lNUFVUQVRJT05fRkFJTFMpO1xuICAgICAgICAgICAgICAgIGlmICghZmVhdHVyZUluZHMuaW5jbHVkZXMoaWR4KSkge1xuICAgICAgICAgICAgICAgICAgICBmYWlsVG9JbXB1dGUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGZhaWxUb0ltcHV0ZSlcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59IC8vIHByZWRpY3RGYWlsc1xuLyoqIFJldHVybnMgZmlyc3Qgbm9uLW51bGwgdmFsdWUgKi9cbmZ1bmN0aW9uIGdldEZpcnN0Tm9uTnVsbChjb2wpIHtcbiAgICBjb25zdCBudWxsVmFsdWUgPSBnZXROdWxsVmFsdWUoY29sKTtcbiAgICBjb25zdCByYXcgPSBjb2wuZ2V0UmF3RGF0YSgpO1xuICAgIGNvbnN0IGxlbiA9IHJhdy5sZW5ndGg7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW47ICsraSlcbiAgICAgICAgaWYgKHJhd1tpXSAhPT0gbnVsbFZhbHVlKVxuICAgICAgICAgICAgcmV0dXJuIGNvbC5nZXQoaSk7XG4gICAgdGhyb3cgbmV3IEVycm9yKEVSUk9SX01TRy5FTVBUWV9DT0xVTU4pO1xufVxuLyoqIFJldHVybiBkZWZhdWx0IGZpbGwgdmFsdWUgd2l0aCByZXNwZWN0IHRvIHRoZSBjb2x1bW4gdHlwZSAqL1xuZnVuY3Rpb24gZ2V0RGVmYXVsdEZpbGxWYWx1ZShjb2wpIHtcbiAgICBzd2l0Y2ggKGNvbC50eXBlKSB7XG4gICAgICAgIGNhc2UgREcuQ09MVU1OX1RZUEUuU1RSSU5HOlxuICAgICAgICBjYXNlIERHLkNPTFVNTl9UWVBFLkRBVEVfVElNRTpcbiAgICAgICAgICAgIHJldHVybiBnZXRGaXJzdE5vbk51bGwoY29sKTsgLy8gVE9ETzogcmVwbGFjZSBieSBtb3N0IGZyZXF1ZW50XG4gICAgICAgIGNhc2UgREcuQ09MVU1OX1RZUEUuSU5UOlxuICAgICAgICBjYXNlIERHLkNPTFVNTl9UWVBFLkZMT0FUOlxuICAgICAgICBjYXNlIERHLkNPTFVNTl9UWVBFLlFOVU06XG4gICAgICAgICAgICByZXR1cm4gY29sLnN0YXRzLmF2ZztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihFUlJPUl9NU0cuVU5TVVBQT1JURURfQ09MVU1OX1RZUEUpO1xuICAgIH1cbn1cbi8qKiBQZXJmb3JtIG1pc3NpbmcgdmFsdWVzIGltcHV0YXRpb24gdXNpbmcgdGhlIHNpbXBsZSBhcHByb2FjaCAqL1xuZXhwb3J0IGZ1bmN0aW9uIGltcHV0ZUZhaWxlZChkZiwgZmFpbGVkVG9JbXB1dGUpIHtcbiAgICBmYWlsZWRUb0ltcHV0ZS5mb3JFYWNoKChpbmRpY2VzLCBjb2xOYW1lKSA9PiB7XG4gICAgICAgIGNvbnN0IGNvbCA9IGRmLmNvbChjb2xOYW1lKTtcbiAgICAgICAgaWYgKGNvbCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgaWYgKCFTVVBQT1JURURfQ09MVU1OX1RZUEVTLmluY2x1ZGVzKGNvbC50eXBlKSlcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoRVJST1JfTVNHLlVOU1VQUE9SVEVEX0NPTFVNTl9UWVBFKTtcbiAgICAgICAgICAgIGNvbnN0IGZpbGxWYWwgPSBnZXREZWZhdWx0RmlsbFZhbHVlKGNvbCk7XG4gICAgICAgICAgICBpbmRpY2VzLmZvckVhY2goKGlkeCkgPT4gY29sLnNldChpZHgsIGZpbGxWYWwpKTtcbiAgICAgICAgfVxuICAgIH0pO1xufVxuIiwiaW1wb3J0ICogYXMgZ3JvayBmcm9tICdkYXRhZ3Jvay1hcGkvZ3Jvayc7XG5pbXBvcnQgKiBhcyB1aSBmcm9tICdkYXRhZ3Jvay1hcGkvdWknO1xuaW1wb3J0ICogYXMgREcgZnJvbSAnZGF0YWdyb2stYXBpL2RnJztcbmltcG9ydCB7IFRJVExFLCBLTk5fSU1QVVRFUiwgRVJST1JfTVNHLCBISU5UIH0gZnJvbSAnLi91aS1jb25zdGFudHMnO1xuaW1wb3J0IHsgU1VQUE9SVEVEX0NPTFVNTl9UWVBFUywgTUVUUklDX1RZUEUsIERJU1RBTkNFX1RZUEUsIERFRkFVTFQsIE1JTl9ORUlHSEJPUlMsIGltcHV0ZSwgZ2V0TWlzc2luZ1ZhbHNJbmRpY2VzLCBhcmVUaGVyZUZhaWxzLCBpbXB1dGVGYWlsZWQgfSBmcm9tIFwiLi9rbm4taW1wdXRlclwiO1xuLyoqIFJldHVybiBkZWZhdWx0IHNldHRpbmcgb2YgdGhlIGZlYXR1cmUgbWV0cmljIGlucHV0cyAqL1xuZnVuY3Rpb24gZ2V0RmVhdHVyZUlucHV0U2V0dGluZ3ModHlwZSkge1xuICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICBjYXNlIERHLkNPTFVNTl9UWVBFLlNUUklORzpcbiAgICAgICAgY2FzZSBERy5DT0xVTU5fVFlQRS5EQVRFX1RJTUU6XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIGRlZmF1bHRXZWlnaHQ6IERFRkFVTFQuV0VJR0hULFxuICAgICAgICAgICAgICAgIGRlZmF1bHRNZXRyaWM6IE1FVFJJQ19UWVBFLk9ORV9IT1QsXG4gICAgICAgICAgICAgICAgYXZhaWxhYmxlTWV0cmljczogW01FVFJJQ19UWVBFLk9ORV9IT1RdXG4gICAgICAgICAgICB9O1xuICAgICAgICBjYXNlIERHLkNPTFVNTl9UWVBFLklOVDpcbiAgICAgICAgY2FzZSBERy5DT0xVTU5fVFlQRS5GTE9BVDpcbiAgICAgICAgY2FzZSBERy5DT0xVTU5fVFlQRS5RTlVNOlxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBkZWZhdWx0V2VpZ2h0OiBERUZBVUxULldFSUdIVCxcbiAgICAgICAgICAgICAgICBkZWZhdWx0TWV0cmljOiBNRVRSSUNfVFlQRS5ESUZGRVJFTkNFLFxuICAgICAgICAgICAgICAgIGF2YWlsYWJsZU1ldHJpY3M6IFtNRVRSSUNfVFlQRS5ESUZGRVJFTkNFLCBNRVRSSUNfVFlQRS5PTkVfSE9UXVxuICAgICAgICAgICAgfTtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihFUlJPUl9NU0cuVU5TVVBQT1JURURfQ09MVU1OX1RZUEUpO1xuICAgIH1cbn1cbi8qKiBSdW4gdGhlIEtOTiBtaXNzaW5nIHZhbHVlcyBpbXB1dGVyICovXG5leHBvcnQgZnVuY3Rpb24gcnVuS05OSW1wdXRlcigpIHtcbiAgICAvKiogY3VycmVudCBkYXRhZnJhbWUgKi9cbiAgICBsZXQgZGYgPSBncm9rLnNoZWxsLnQ7XG4gICAgaWYgKGRmID09PSBudWxsKSB7XG4gICAgICAgIGdyb2suc2hlbGwud2FybmluZyhFUlJPUl9NU0cuTk9fREFUQUZSQU1FKTtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAvKiogY29sdW1ucyB3aXRoIG1pc3NpbmcgdmFsdWVzICovXG4gICAgY29uc3QgY29sc1dpdGhNaXNzaW5nVmFscyA9IFtdO1xuICAgIC8qKiBuYW1lcyBvZiBjb2x1bW5zIHdpdGggbWlzc2luZyB2YWx1ZXMgKi9cbiAgICBjb25zdCBhdmFpbGFibGVUYXJnZXRDb2xzTmFtZXMgPSBbXTtcbiAgICAvKiogbmFtZXMgb2YgY29sdW1ucyB0aGF0IGNhbiBiZSB1c2VkIGFzIGZlYXR1cmVzICovXG4gICAgY29uc3QgYXZhaWxhYmxlRmVhdHVyZUNvbHNOYW1lcyA9IFtdO1xuICAgIC8vIGdldCBjb2x1bW5zIHdpdGggbWlzc2luZyB2YWxzICYgYXZhaWxhYmxlIGZlYXR1cmUgY29sc1xuICAgIGRmLmNvbHVtbnMudG9MaXN0KClcbiAgICAgICAgLmZpbHRlcigoY29sKSA9PiBTVVBQT1JURURfQ09MVU1OX1RZUEVTLmluY2x1ZGVzKGNvbC50eXBlKSlcbiAgICAgICAgLmZvckVhY2goKGNvbCkgPT4ge1xuICAgICAgICBhdmFpbGFibGVGZWF0dXJlQ29sc05hbWVzLnB1c2goY29sLm5hbWUpO1xuICAgICAgICBpZiAoY29sLnN0YXRzLm1pc3NpbmdWYWx1ZUNvdW50ID4gMCkge1xuICAgICAgICAgICAgY29sc1dpdGhNaXNzaW5nVmFscy5wdXNoKGNvbCk7XG4gICAgICAgICAgICBhdmFpbGFibGVUYXJnZXRDb2xzTmFtZXMucHVzaChjb2wubmFtZSk7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICAvLyBnZXQgaW5kaWNlcyBvZiBtaXNzaW5nIHZhbHVlczogY29sIG5hbWUgLT4gYXJyYXkgb2YgaW5kaWNlc1xuICAgIGNvbnN0IG1pc1ZhbHNJbmRzID0gZ2V0TWlzc2luZ1ZhbHNJbmRpY2VzKGNvbHNXaXRoTWlzc2luZ1ZhbHMpO1xuICAgIGlmIChjb2xzV2l0aE1pc3NpbmdWYWxzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBncm9rLnNoZWxsLmluZm8oRVJST1JfTVNHLk5PX01JU1NJTkdfVkFMVUVTKTtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoYXZhaWxhYmxlRmVhdHVyZUNvbHNOYW1lcy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgZ3Jvay5zaGVsbC5lcnJvcihFUlJPUl9NU0cuT05FX0FWQUlMQUJMRV9GRUFUVVJFKTtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAvLyBJbi1wbGFjZSBjb21wb25lbnRzXG4gICAgbGV0IGluUGxhY2UgPSBERUZBVUxULklOX1BMQUNFID4gMDtcbiAgICBjb25zdCBpblBsYWNlSW5wdXQgPSB1aS5ib29sSW5wdXQoVElUTEUuSU5fUExBQ0UsIGluUGxhY2UsICgpID0+IHsgdmFyIF9hOyBpblBsYWNlID0gKF9hID0gaW5QbGFjZUlucHV0LnZhbHVlKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBmYWxzZTsgfSk7XG4gICAgaW5QbGFjZUlucHV0LnNldFRvb2x0aXAoSElOVC5JTl9QTEFDRSk7XG4gICAgLy8gS2VlcCBlbXB0eSBmZWF0dXJlXG4gICAgbGV0IGtlZXBFbXB0eSA9IERFRkFVTFQuS0VFUF9FTVBUWSA+IDA7XG4gICAgY29uc3Qga2VlcEVtcHR5SW5wdXQgPSB1aS5ib29sSW5wdXQoVElUTEUuS0VFUF9FTVBUWSwga2VlcEVtcHR5LCAoKSA9PiB7IHZhciBfYTsga2VlcEVtcHR5ID0gKF9hID0ga2VlcEVtcHR5SW5wdXQudmFsdWUpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IGZhbHNlOyB9KTtcbiAgICBrZWVwRW1wdHlJbnB1dC5zZXRUb29sdGlwKEhJTlQuS0VFUF9FTVBUWSk7XG4gICAgLy8gTmVpZ2hib3JzIGNvbXBvbmVudHNcbiAgICBsZXQgbmVpZ2hib3JzID0gREVGQVVMVC5ORUlHSEJPUlM7XG4gICAgY29uc3QgbmVpZ2hib3JzSW5wdXQgPSB1aS5pbnRJbnB1dChUSVRMRS5ORUlHSEJPUlMsIG5laWdoYm9ycywgKCkgPT4ge1xuICAgICAgICBjb25zdCB2YWwgPSBuZWlnaGJvcnNJbnB1dC52YWx1ZTtcbiAgICAgICAgaWYgKHZhbCA9PT0gbnVsbClcbiAgICAgICAgICAgIG5laWdoYm9yc0lucHV0LnZhbHVlID0gbmVpZ2hib3JzO1xuICAgICAgICBlbHNlIGlmICh2YWwgPj0gTUlOX05FSUdIQk9SUylcbiAgICAgICAgICAgIG5laWdoYm9ycyA9IHZhbDtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgbmVpZ2hib3JzSW5wdXQudmFsdWUgPSBuZWlnaGJvcnM7XG4gICAgfSk7XG4gICAgbmVpZ2hib3JzSW5wdXQuc2V0VG9vbHRpcChISU5ULk5FSUdIQk9SUyk7XG4gICAgLy8gRGlzdGFuY2UgY29tcG9uZW50c1xuICAgIGxldCBkaXN0VHlwZSA9IERJU1RBTkNFX1RZUEUuRVVDTElERUFOO1xuICAgIGNvbnN0IGRpc3RUeXBlSW5wdXQgPSB1aS5jaG9pY2VJbnB1dChUSVRMRS5ESVNUQU5DRSwgZGlzdFR5cGUsIFtESVNUQU5DRV9UWVBFLkVVQ0xJREVBTiwgRElTVEFOQ0VfVFlQRS5NQU5IQVRUQU5dLCAoKSA9PiB7IHZhciBfYTsgcmV0dXJuIGRpc3RUeXBlID0gKF9hID0gZGlzdFR5cGVJbnB1dC52YWx1ZSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogRElTVEFOQ0VfVFlQRS5FVUNMSURFQU47IH0pO1xuICAgIGRpc3RUeXBlSW5wdXQuc2V0VG9vbHRpcChISU5ULkRJU1RBTkNFKTtcbiAgICAvLyBUYXJnZXQgY29sdW1ucyBjb21wb25lbnRzIChjb2xzIHdpdGggbWlzc2luZyB2YWx1ZXMgdG8gYmUgaW1wdXRlZClcbiAgICBsZXQgdGFyZ2V0Q29sTmFtZXMgPSBjb2xzV2l0aE1pc3NpbmdWYWxzLm1hcCgoY29sKSA9PiBjb2wubmFtZSk7XG4gICAgY29uc3QgdGFyZ2V0Q29sSW5wdXQgPSB1aS5jb2x1bW5zSW5wdXQoVElUTEUuQ09MVU1OUywgZGYsICgpID0+IHtcbiAgICAgICAgdGFyZ2V0Q29sTmFtZXMgPSB0YXJnZXRDb2xJbnB1dC52YWx1ZS5tYXAoKGNvbCkgPT4gY29sLm5hbWUpO1xuICAgICAgICBjaGVja0FwcGxpY2FiaWxpdHkoKTtcbiAgICB9LCB7IGF2YWlsYWJsZTogYXZhaWxhYmxlVGFyZ2V0Q29sc05hbWVzLCBjaGVja2VkOiBhdmFpbGFibGVUYXJnZXRDb2xzTmFtZXMgfSk7XG4gICAgdGFyZ2V0Q29sSW5wdXQuc2V0VG9vbHRpcChISU5ULlRBUkdFVCk7XG4gICAgLy8gRmVhdHVyZSBjb2x1bW5zIGNvbXBvbmVudHNcbiAgICBsZXQgc2VsZWN0ZWRGZWF0dXJlQ29sTmFtZXMgPSBhdmFpbGFibGVGZWF0dXJlQ29sc05hbWVzO1xuICAgIGNvbnN0IGZlYXR1cmVzSW5wdXQgPSB1aS5jb2x1bW5zSW5wdXQoVElUTEUuRkVBVFVSRVMsIGRmLCAoKSA9PiB7XG4gICAgICAgIHNlbGVjdGVkRmVhdHVyZUNvbE5hbWVzID0gZmVhdHVyZXNJbnB1dC52YWx1ZS5tYXAoKGNvbCkgPT4gY29sLm5hbWUpO1xuICAgICAgICBpZiAoc2VsZWN0ZWRGZWF0dXJlQ29sTmFtZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgY2hlY2tBcHBsaWNhYmlsaXR5KCk7XG4gICAgICAgICAgICBtZXRyaWNJbmZvSW5wdXRzLmZvckVhY2goKGRpdiwgbmFtZSkgPT4gZGl2LmhpZGRlbiA9ICFzZWxlY3RlZEZlYXR1cmVDb2xOYW1lcy5pbmNsdWRlcyhuYW1lKSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgaGlkZVdpZGdldHMoKTtcbiAgICB9LCB7IGF2YWlsYWJsZTogYXZhaWxhYmxlRmVhdHVyZUNvbHNOYW1lcywgY2hlY2tlZDogYXZhaWxhYmxlRmVhdHVyZUNvbHNOYW1lcyB9KTtcbiAgICBmZWF0dXJlc0lucHV0LnNldFRvb2x0aXAoSElOVC5GRUFUVVJFUyk7XG4gICAgLyoqIEhpZGUgd2lkZ2V0cyAodXNlIGlmIHJ1biBpcyBub3QgYXBwbGljYWJsZSkgKi9cbiAgICBjb25zdCBoaWRlV2lkZ2V0cyA9ICgpID0+IHtcbiAgICAgICAgZGxnLmdldEJ1dHRvbihUSVRMRS5SVU4pLmRpc2FibGVkID0gdHJ1ZTtcbiAgICAgICAgaW5QbGFjZUlucHV0LnJvb3QuaGlkZGVuID0gdHJ1ZTtcbiAgICAgICAga2VlcEVtcHR5SW5wdXQucm9vdC5oaWRkZW4gPSB0cnVlO1xuICAgICAgICBuZWlnaGJvcnNJbnB1dC5yb290LmhpZGRlbiA9IHRydWU7XG4gICAgICAgIGRpc3REaXYuaGlkZGVuID0gdHJ1ZTtcbiAgICAgICAgbWV0cmljc0Rpdi5oaWRkZW4gPSB0cnVlO1xuICAgIH07XG4gICAgLyoqIFNob3cgd2lkZ2V0cyAodXNlIGlmIHJ1biBpcyBhcHBsaWNhYmxlKSAqL1xuICAgIGNvbnN0IHNob3dXaWRnZXRzID0gKCkgPT4ge1xuICAgICAgICBkbGcuZ2V0QnV0dG9uKFRJVExFLlJVTikuZGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgZGlzdERpdi5oaWRkZW4gPSBmYWxzZTtcbiAgICAgICAgaW5QbGFjZUlucHV0LnJvb3QuaGlkZGVuID0gZmFsc2U7XG4gICAgICAgIG5laWdoYm9yc0lucHV0LnJvb3QuaGlkZGVuID0gZmFsc2U7XG4gICAgICAgIGRpc3RUeXBlSW5wdXQucm9vdC5oaWRkZW4gPSBmYWxzZTtcbiAgICAgICAga2VlcEVtcHR5SW5wdXQucm9vdC5oaWRkZW4gPSAhYXJlVGhlcmVGYWlscyh0YXJnZXRDb2xOYW1lcywgc2VsZWN0ZWRGZWF0dXJlQ29sTmFtZXMsIG1pc1ZhbHNJbmRzKTtcbiAgICB9O1xuICAgIC8qKiBDaGVjayBhcHBsaWNhYmlsaXR5IG9mIHRoZSBpbXB1dGF0aW9uICovXG4gICAgY29uc3QgY2hlY2tBcHBsaWNhYmlsaXR5ID0gKCkgPT4ge1xuICAgICAgICBzaG93V2lkZ2V0cygpO1xuICAgICAgICBpZiAoc2VsZWN0ZWRGZWF0dXJlQ29sTmFtZXMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICB0YXJnZXRDb2xOYW1lcy5mb3JFYWNoKChuYW1lKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHNlbGVjdGVkRmVhdHVyZUNvbE5hbWVzWzBdID09PSBuYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgIGhpZGVXaWRnZXRzKCk7XG4gICAgICAgICAgICAgICAgICAgIGdyb2suc2hlbGwud2FybmluZyhgJHtFUlJPUl9NU0cuT05FX0ZFQVRVUkVfU0VMRUNURUR9IHRoZSBjb2x1bW4gJyR7bmFtZX0nYCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIC8vIE1ldHJpY3MgY29tcG9uZW50c1xuICAgIGNvbnN0IGZlYXR1cmVzTWV0cmljcyA9IG5ldyBNYXAoKTtcbiAgICBjb25zdCBtZXRyaWNJbmZvSW5wdXRzID0gbmV3IE1hcCgpO1xuICAgIGNvbnN0IG1ldHJpY3NEaXYgPSB1aS5kaXZWKFtdKTtcbiAgICBtZXRyaWNzRGl2LnN0eWxlLm92ZXJmbG93ID0gJ2F1dG8nO1xuICAgIC8vIENyZWF0ZSBtZXRyaWNzIFVJXG4gICAgYXZhaWxhYmxlRmVhdHVyZUNvbHNOYW1lcy5mb3JFYWNoKChuYW1lKSA9PiB7XG4gICAgICAgIC8vIGluaXRpYWxpemF0aW9uXG4gICAgICAgIGNvbnN0IHR5cGUgPSBkZi5jb2wobmFtZSkudHlwZTtcbiAgICAgICAgY29uc3Qgc2V0dGluZ3MgPSBnZXRGZWF0dXJlSW5wdXRTZXR0aW5ncyh0eXBlKTtcbiAgICAgICAgZmVhdHVyZXNNZXRyaWNzLnNldChuYW1lLCB7IHdlaWdodDogc2V0dGluZ3MuZGVmYXVsdFdlaWdodCwgdHlwZTogc2V0dGluZ3MuZGVmYXVsdE1ldHJpYyB9KTtcbiAgICAgICAgLy8gZGlzdGFuY2UgaW5wdXRcbiAgICAgICAgY29uc3QgZGlzdFR5cGVJbnB1dCA9IHVpLmNob2ljZUlucHV0KG5hbWUsIHNldHRpbmdzLmRlZmF1bHRNZXRyaWMsIHNldHRpbmdzLmF2YWlsYWJsZU1ldHJpY3MsICgpID0+IHtcbiAgICAgICAgICAgIHZhciBfYSwgX2I7XG4gICAgICAgICAgICBjb25zdCBkaXN0SW5mbyA9IChfYSA9IGZlYXR1cmVzTWV0cmljcy5nZXQobmFtZSkpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IHsgd2VpZ2h0OiBzZXR0aW5ncy5kZWZhdWx0V2VpZ2h0LCB0eXBlOiBzZXR0aW5ncy5kZWZhdWx0TWV0cmljIH07XG4gICAgICAgICAgICBkaXN0SW5mby50eXBlID0gKF9iID0gZGlzdFR5cGVJbnB1dC52YWx1ZSkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogc2V0dGluZ3MuZGVmYXVsdE1ldHJpYztcbiAgICAgICAgICAgIGZlYXR1cmVzTWV0cmljcy5zZXQobmFtZSwgZGlzdEluZm8pO1xuICAgICAgICB9KTtcbiAgICAgICAgZGlzdFR5cGVJbnB1dC5yb290LnN0eWxlLndpZHRoID0gJzUwJSc7XG4gICAgICAgIGRpc3RUeXBlSW5wdXQuc2V0VG9vbHRpcChISU5ULk1FVFJJQyk7XG4gICAgICAgIGRpc3RUeXBlSW5wdXQucm9vdC5oaWRkZW4gPSB0cnVlOyAvLyB0aGlzIGlucHV0IHdpbGwgYmUgdXNlZCBmdXJ0aGVyXG4gICAgICAgIC8vIFRoZSBmb2xsb3dpbmcgc2hvdWxkIHByb3ZpZGUgYSBzbGlkZXIgKHNlZSB0aCBidWcgaHR0cHM6Ly9yZWRkYXRhLmF0bGFzc2lhbi5uZXQvYnJvd3NlL0dST0stMTQ0MzEpXG4gICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgY29uc3QgcHJvcCA9IERHLlByb3BlcnR5LmZyb21PcHRpb25zKHsgXCJuYW1lXCI6IG5hbWUsIFwiaW5wdXRUeXBlXCI6IFwiRmxvYXRcIiwgbWluOiAwLCBtYXg6IDEwLCBcInNob3dTbGlkZXJcIjogdHJ1ZSwgXCJzdGVwXCI6IDEgfSk7XG4gICAgICAgIGNvbnN0IHdlaWdodElucHV0ID0gdWkuaW5wdXQuZm9yUHJvcGVydHkocHJvcCk7XG4gICAgICAgIHdlaWdodElucHV0LnZhbHVlID0gc2V0dGluZ3MuZGVmYXVsdFdlaWdodDtcbiAgICAgICAgd2VpZ2h0SW5wdXQub25DaGFuZ2VkKCgpID0+IHtcbiAgICAgICAgICAgIHZhciBfYSwgX2I7XG4gICAgICAgICAgICBjb25zdCBkaXN0SW5mbyA9IChfYSA9IGZlYXR1cmVzTWV0cmljcy5nZXQobmFtZSkpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IHsgd2VpZ2h0OiBzZXR0aW5ncy5kZWZhdWx0V2VpZ2h0LCB0eXBlOiBzZXR0aW5ncy5kZWZhdWx0TWV0cmljIH07XG4gICAgICAgICAgICBkaXN0SW5mby53ZWlnaHQgPSAoX2IgPSB3ZWlnaHRJbnB1dC52YWx1ZSkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogc2V0dGluZ3MuZGVmYXVsdFdlaWdodDtcbiAgICAgICAgICAgIGZlYXR1cmVzTWV0cmljcy5zZXQobmFtZSwgZGlzdEluZm8pO1xuICAgICAgICB9KTtcbiAgICAgICAgd2VpZ2h0SW5wdXQuc2V0VG9vbHRpcChISU5ULldFSUdIVCk7XG4gICAgICAgIGNvbnN0IGRpdiA9IHVpLmRpdkgoW2Rpc3RUeXBlSW5wdXQucm9vdCwgd2VpZ2h0SW5wdXQucm9vdF0pO1xuICAgICAgICBtZXRyaWNJbmZvSW5wdXRzLnNldChuYW1lLCBkaXYpO1xuICAgICAgICBtZXRyaWNzRGl2LmFwcGVuZChkaXYpO1xuICAgIH0pO1xuICAgIC8vIFRoZSBtYWluIGRpYWxvZ1xuICAgIGNvbnN0IGRsZyA9IHVpLmRpYWxvZyh7IHRpdGxlOiBUSVRMRS5LTk5fSU1QVVRFUiwgaGVscFVybDogS05OX0lNUFVURVIgfSk7XG4gICAgZ3Jvay5zaGVsbC52LnJvb3QuYXBwZW5kQ2hpbGQoZGxnLnJvb3QpO1xuICAgIG1ldHJpY3NEaXYuaGlkZGVuID0gdHJ1ZTtcbiAgICBrZWVwRW1wdHlJbnB1dC5yb290LmhpZGRlbiA9ICFhcmVUaGVyZUZhaWxzKHRhcmdldENvbE5hbWVzLCBzZWxlY3RlZEZlYXR1cmVDb2xOYW1lcywgbWlzVmFsc0luZHMpO1xuICAgIC8vIEljb24gc2hvd2luZy9oaWRpbmcgbWV0cmljcyBVSVxuICAgIGNvbnN0IHNldHRpbmdzSWNvbiA9IHVpLmljb25zLnNldHRpbmdzKCgpID0+IHsgbWV0cmljc0Rpdi5oaWRkZW4gPSAhbWV0cmljc0Rpdi5oaWRkZW47IH0sIEhJTlQuTUVUUklDX1NFVFRJTkdTKTtcbiAgICBjb25zdCBkaXN0RGl2ID0gdWkuZGl2SChbZGlzdFR5cGVJbnB1dC5yb290LCBzZXR0aW5nc0ljb25dKTtcbiAgICBkbGcuYWRkQnV0dG9uKFRJVExFLlJVTiwgKCkgPT4ge1xuICAgICAgICBkbGcuY2xvc2UoKTtcbiAgICAgICAgYXZhaWxhYmxlRmVhdHVyZUNvbHNOYW1lcy5maWx0ZXIoKG5hbWUpID0+ICFzZWxlY3RlZEZlYXR1cmVDb2xOYW1lcy5pbmNsdWRlcyhuYW1lKSkuZm9yRWFjaCgobmFtZSkgPT4gZmVhdHVyZXNNZXRyaWNzLmRlbGV0ZShuYW1lKSk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBmYWlsZWRUb0ltcHV0ZSA9IGltcHV0ZShkZiwgdGFyZ2V0Q29sTmFtZXMsIGZlYXR1cmVzTWV0cmljcywgbWlzVmFsc0luZHMsIGRpc3RUeXBlLCBuZWlnaGJvcnMsIGluUGxhY2UpO1xuICAgICAgICAgICAgaWYgKCFrZWVwRW1wdHkpXG4gICAgICAgICAgICAgICAgaW1wdXRlRmFpbGVkKGRmLCBmYWlsZWRUb0ltcHV0ZSk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgaWYgKGVyciBpbnN0YW5jZW9mIEVycm9yKVxuICAgICAgICAgICAgICAgIGdyb2suc2hlbGwuZXJyb3IoYCR7RVJST1JfTVNHLktOTl9GQUlMU306ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgZ3Jvay5zaGVsbC5lcnJvcihgJHtFUlJPUl9NU0cuS05OX0ZBSUxTfTogJHtFUlJPUl9NU0cuQ09SRV9JU1NVRX1gKTtcbiAgICAgICAgfVxuICAgIH0pXG4gICAgICAgIC5hZGQodGFyZ2V0Q29sSW5wdXQpXG4gICAgICAgIC5hZGQoZmVhdHVyZXNJbnB1dClcbiAgICAgICAgLmFkZChkaXN0RGl2KVxuICAgICAgICAuYWRkKG1ldHJpY3NEaXYpXG4gICAgICAgIC5hZGQobmVpZ2hib3JzSW5wdXQpXG4gICAgICAgIC5hZGQoaW5QbGFjZUlucHV0KVxuICAgICAgICAuYWRkKGtlZXBFbXB0eUlucHV0KVxuICAgICAgICAuc2hvdygpO1xufSAvLyBydW5LTk5JbXB1dGVyXG4iLCJpbXBvcnQgKiBhcyB1aSBmcm9tICdkYXRhZ3Jvay1hcGkvdWknO1xuaW1wb3J0IHsgTXVsdGlDb2x1bW5EaW1SZWR1Y3Rpb25FZGl0b3IgfSBmcm9tICcuLi9tdWx0aS1jb2x1bW4tZGltZW5zaW9uYWxpdHktcmVkdWN0aW9uL211bHRpLWNvbHVtbi1kaW0tcmVkdWN0aW9uLWVkaXRvcic7XG5pbXBvcnQgeyBnZXRHUFVBZGFwdGVyRGVzY3JpcHRpb24gfSBmcm9tICdAZGF0YWdyb2stbGlicmFyaWVzL21hdGgvc3JjL3dlYkdQVS9nZXRHUFVEZXZpY2UnO1xuZXhwb3J0IGNsYXNzIE1DTEVkaXRvciBleHRlbmRzIE11bHRpQ29sdW1uRGltUmVkdWN0aW9uRWRpdG9yIHtcbiAgICBjb25zdHJ1Y3RvcihlZGl0b3JTZXR0aW5ncyA9IHt9KSB7XG4gICAgICAgIHN1cGVyKGVkaXRvclNldHRpbmdzKTtcbiAgICAgICAgdGhpcy5zaW1pbGFyaXR5VGhyZXNob2xkSW5wdXQgPSB1aS5pbnRJbnB1dCgnU2ltaWxhcml0eSB0aHJlc2hvbGQnLCA4MCk7XG4gICAgICAgIHRoaXMubWF4SXRlcmF0aW9uc0lucHV0ID0gdWkuaW50SW5wdXQoJ01heCBpdGVyYXRpb25zJywgNSk7XG4gICAgICAgIHRoaXMudXNlV2ViR1BVSW5wdXQgPSB1aS5ib29sSW5wdXQoJ1VzZSBXZWJHUFUnLCBmYWxzZSk7XG4gICAgICAgIGdldEdQVUFkYXB0ZXJEZXNjcmlwdGlvbigpLnRoZW4oKGRlc2MpID0+IHtcbiAgICAgICAgICAgIGlmIChkZXNjKSB7XG4gICAgICAgICAgICAgICAgdGhpcy51c2VXZWJHUFVJbnB1dC5zZXRUb29sdGlwKGBVc2Ugd2ViR1BVIGZvciBNQ0wgY2FsY3VsYXRpb24gKCR7ZGVzY30pYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnVzZVdlYkdQVUlucHV0LnZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy51c2VXZWJHUFVJbnB1dC5yb290LnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBnZXRFZGl0b3IoKSB7XG4gICAgICAgIGNvbnN0IGRpdiA9IHVpLmRpdihbXG4gICAgICAgICAgICB0aGlzLnRhYmxlSW5wdXQucm9vdCxcbiAgICAgICAgICAgIHRoaXMuY29sdW1uc0lucHV0Um9vdCxcbiAgICAgICAgICAgIHRoaXMuY29sdW1uUGFyYW1zRWRpdG9yUm9vdCxcbiAgICAgICAgICAgIHRoaXMuYWdncmVnYXRpb25NZXRob2RJbnB1dC5yb290LFxuICAgICAgICAgICAgdGhpcy5zaW1pbGFyaXR5VGhyZXNob2xkSW5wdXQucm9vdCxcbiAgICAgICAgICAgIHRoaXMubWF4SXRlcmF0aW9uc0lucHV0LnJvb3QsXG4gICAgICAgICAgICB0aGlzLnVzZVdlYkdQVUlucHV0LnJvb3QsXG4gICAgICAgIF0sIHsgc3R5bGU6IHsgbWluV2lkdGg6ICc0MjBweCcgfSwgY2xhc3NlczogJ3VpLWZvcm0nIH0pO1xuICAgICAgICByZXR1cm4gZGl2O1xuICAgIH1cbiAgICBnZXQgcGFyYW1zKCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdGFibGU6IHRoaXMudGFibGVJbnB1dC52YWx1ZSxcbiAgICAgICAgICAgIGNvbHVtbnM6IHRoaXMuY29sdW1uc0lucHV0LnZhbHVlLFxuICAgICAgICAgICAgbWV0aG9kTmFtZTogdGhpcy5tZXRob2RJbnB1dC52YWx1ZSxcbiAgICAgICAgICAgIHByZXByb2Nlc3NpbmdGdW5jdGlvbnM6IHRoaXMuY29sdW1uT3B0RWRpdG9ycy5tYXAoKGl0KSA9PiBpdC5wcmVQcm9jZXNzaW5nRnVuY3Rpb24pLFxuICAgICAgICAgICAgZGlzdGFuY2VNZXRyaWNzOiB0aGlzLmNvbHVtbk9wdEVkaXRvcnMubWFwKChpdCkgPT4gaXQuc2ltaWxhcml0eU1ldHJpY0lucHV0LnZhbHVlKSxcbiAgICAgICAgICAgIHdlaWdodHM6IHRoaXMuY29sdW1uT3B0RWRpdG9ycy5tYXAoKGl0KSA9PiBpdC53ZWlnaHQpLFxuICAgICAgICAgICAgcHJlcHJvY2Vzc2luZ0Z1bmNBcmdzOiB0aGlzLmNvbHVtbk9wdEVkaXRvcnMubWFwKChpdCkgPT4gaXQucHJlcHJvY2Vzc2luZ0Z1bmN0aW9uU2V0dGluZ3MpLFxuICAgICAgICAgICAgYWdncmVhZ2dyZWdhdGlvbk1ldGhvZDogdGhpcy5hZ2dyZWdhdGlvbk1ldGhvZElucHV0LnZhbHVlLFxuICAgICAgICAgICAgdGhyZXNob2xkOiB0aGlzLnNpbWlsYXJpdHlUaHJlc2hvbGRJbnB1dC52YWx1ZSxcbiAgICAgICAgICAgIG1heEl0ZXJhdGlvbnM6IHRoaXMubWF4SXRlcmF0aW9uc0lucHV0LnZhbHVlID8/IDUsXG4gICAgICAgICAgICB1c2VXZWJHUFU6IHRoaXMudXNlV2ViR1BVSW5wdXQudmFsdWUgPz8gZmFsc2UsXG4gICAgICAgIH07XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pYldOc0xXVmthWFJ2Y2k1cWN5SXNJbk52ZFhKalpWSnZiM1FpT2lJaUxDSnpiM1Z5WTJWeklqcGJJbTFqYkMxbFpHbDBiM0l1ZEhNaVhTd2libUZ0WlhNaU9sdGRMQ0p0WVhCd2FXNW5jeUk2SWtGQlEwRXNUMEZCVHl4TFFVRkxMRVZCUVVVc1RVRkJUU3hwUWtGQmFVSXNRMEZCUXp0QlFVVjBReXhQUVVGUExFVkJRVU1zTmtKQlFUWkNMRVZCUVVNc1RVRkRMMElzTkVWQlFUUkZMRU5CUVVNN1FVRkRjRVlzVDBGQlR5eEZRVUZETEhkQ1FVRjNRaXhGUVVGRExFMUJRVTBzYTBSQlFXdEVMRU5CUVVNN1FVRkhNVVlzVFVGQlRTeFBRVUZQTEZOQlFWVXNVMEZCVVN3MlFrRkJOa0k3U1VGSmVFUXNXVUZCV1N4cFFrRkJORU1zUlVGQlJUdFJRVU40UkN4TFFVRkxMRU5CUVVNc1kwRkJZeXhEUVVGRExFTkJRVU03VVVGRGRFSXNTVUZCU1N4RFFVRkRMSGRDUVVGM1FpeEhRVUZITEVWQlFVVXNRMEZCUXl4UlFVRlJMRU5CUVVNc2MwSkJRWE5DTEVWQlFVVXNSVUZCUlN4RFFVRkRMRU5CUVVNN1VVRkRlRVVzU1VGQlNTeERRVUZETEd0Q1FVRnJRaXhIUVVGSExFVkJRVVVzUTBGQlF5eFJRVUZSTEVOQlFVTXNaMEpCUVdkQ0xFVkJRVVVzUTBGQlF5eERRVUZETEVOQlFVTTdVVUZETTBRc1NVRkJTU3hEUVVGRExHTkJRV01zUjBGQlJ5eEZRVUZGTEVOQlFVTXNVMEZCVXl4RFFVRkRMRmxCUVZrc1JVRkJSU3hMUVVGTExFTkJRVU1zUTBGQlF6dFJRVU40UkN4M1FrRkJkMElzUlVGQlJTeERRVUZETEVsQlFVa3NRMEZCUXl4RFFVRkRMRWxCUVVrc1JVRkJSU3hGUVVGRk8xbEJRM1pETEVsQlFVa3NTVUZCU1N4RlFVRkZPMmRDUVVOU0xFbEJRVWtzUTBGQlF5eGpRVUZqTEVOQlFVTXNWVUZCVlN4RFFVRkRMRzFEUVVGdFF5eEpRVUZKTEVkQlFVY3NRMEZCUXl4RFFVRkRPMkZCUXpWRk8ybENRVUZOTzJkQ1FVTk1MRWxCUVVrc1EwRkJReXhqUVVGakxFTkJRVU1zUzBGQlN5eEhRVUZITEV0QlFVc3NRMEZCUXp0blFrRkRiRU1zU1VGQlNTeERRVUZETEdOQlFXTXNRMEZCUXl4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExFOUJRVThzUjBGQlJ5eE5RVUZOTEVOQlFVTTdZVUZEYWtRN1VVRkRTQ3hEUVVGRExFTkJRVU1zUTBGQlF6dEpRVU5NTEVOQlFVTTdTVUZGVFN4VFFVRlRPMUZCUTJRc1RVRkJUU3hIUVVGSExFZEJRVWNzUlVGQlJTeERRVUZETEVkQlFVY3NRMEZCUXp0WlFVTnFRaXhKUVVGSkxFTkJRVU1zVlVGQlZTeERRVUZETEVsQlFVazdXVUZEY0VJc1NVRkJTU3hEUVVGRExHZENRVUZuUWp0WlFVTnlRaXhKUVVGSkxFTkJRVU1zYzBKQlFYTkNPMWxCUXpOQ0xFbEJRVWtzUTBGQlF5eHpRa0ZCYzBJc1EwRkJReXhKUVVGSk8xbEJRMmhETEVsQlFVa3NRMEZCUXl4M1FrRkJkMElzUTBGQlF5eEpRVUZKTzFsQlEyeERMRWxCUVVrc1EwRkJReXhyUWtGQmEwSXNRMEZCUXl4SlFVRkpPMWxCUXpWQ0xFbEJRVWtzUTBGQlF5eGpRVUZqTEVOQlFVTXNTVUZCU1R0VFFVTjZRaXhGUVVGRkxFVkJRVU1zUzBGQlN5eEZRVUZGTEVWQlFVTXNVVUZCVVN4RlFVRkZMRTlCUVU4c1JVRkJReXhGUVVGRkxFOUJRVThzUlVGQlJTeFRRVUZUTEVWQlFVTXNRMEZCUXl4RFFVRkRPMUZCUTNKRUxFOUJRVThzUjBGQlJ5eERRVUZETzBsQlEySXNRMEZCUXp0SlFVVkVMRWxCUVZjc1RVRkJUVHRSUVVObUxFOUJRVTg3V1VGRFRDeExRVUZMTEVWQlFVVXNTVUZCU1N4RFFVRkRMRlZCUVZVc1EwRkJReXhMUVVGTk8xbEJRemRDTEU5QlFVOHNSVUZCUlN4SlFVRkpMRU5CUVVNc1dVRkJXU3hEUVVGRExFdEJRVTA3V1VGRGFrTXNWVUZCVlN4RlFVRkZMRWxCUVVrc1EwRkJReXhYUVVGWExFTkJRVU1zUzBGQlRUdFpRVU51UXl4elFrRkJjMElzUlVGQlJTeEpRVUZKTEVOQlFVTXNaMEpCUVdkQ0xFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTXNSVUZCUlN4RlFVRkZMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zY1VKQlFYRkNMRU5CUVVNN1dVRkRia1lzWlVGQlpTeEZRVUZGTEVsQlFVa3NRMEZCUXl4blFrRkJaMElzUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXl4RlFVRkZMRVZCUVVVc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eHhRa0ZCY1VJc1EwRkJReXhMUVVGTkxFTkJRVU03V1VGRGJrWXNUMEZCVHl4RlFVRkZMRWxCUVVrc1EwRkJReXhuUWtGQlowSXNRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJReXhGUVVGRkxFVkJRVVVzUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4TlFVRlBMRU5CUVVNN1dVRkRkRVFzY1VKQlFYRkNMRVZCUVVVc1NVRkJTU3hEUVVGRExHZENRVUZuUWl4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRExFVkJRVVVzUlVGQlJTeEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRFpDUVVFMlFpeERRVUZETzFsQlF6RkdMSE5DUVVGelFpeEZRVUZGTEVsQlFVa3NRMEZCUXl4elFrRkJjMElzUTBGQlF5eExRVUZMTzFsQlEzcEVMRk5CUVZNc1JVRkJSU3hKUVVGSkxFTkJRVU1zZDBKQlFYZENMRU5CUVVNc1MwRkJTenRaUVVNNVF5eGhRVUZoTEVWQlFVVXNTVUZCU1N4RFFVRkRMR3RDUVVGclFpeERRVUZETEV0QlFVc3NTVUZCU1N4RFFVRkRPMWxCUTJwRUxGTkJRVk1zUlVGQlJTeEpRVUZKTEVOQlFVTXNZMEZCWXl4RFFVRkRMRXRCUVVzc1NVRkJTU3hMUVVGTE8xTkJRemxETEVOQlFVTTdTVUZEU2l4RFFVRkRPME5CUTBvaUxDSnpiM1Z5WTJWelEyOXVkR1Z1ZENJNld5SnBiWEJ2Y25RZ0tpQmhjeUJFUnlCbWNtOXRJQ2RrWVhSaFozSnZheTFoY0drdlpHY25PMXh1YVcxd2IzSjBJQ29nWVhNZ2RXa2dabkp2YlNBblpHRjBZV2R5YjJzdFlYQnBMM1ZwSnp0Y2JtbHRjRzl5ZENCN1JHbHRVbVZrZFdOMGFXOXVSV1JwZEc5eVQzQjBhVzl1YzMwZ1puSnZiU0FuTGk0dlpuVnVZM1JwYjI1RlpHbDBiM0p6TDJScGJXVnVjMmx2Ym1Gc2FYUjVMWEpsWkhWamRHbHZiaTFsWkdsMGIzSW5PMXh1YVcxd2IzSjBJSHROZFd4MGFVTnZiSFZ0YmtScGJWSmxaSFZqZEdsdmJrVmthWFJ2Y24xY2JpQWdabkp2YlNBbkxpNHZiWFZzZEdrdFkyOXNkVzF1TFdScGJXVnVjMmx2Ym1Gc2FYUjVMWEpsWkhWamRHbHZiaTl0ZFd4MGFTMWpiMngxYlc0dFpHbHRMWEpsWkhWamRHbHZiaTFsWkdsMGIzSW5PMXh1YVcxd2IzSjBJSHRuWlhSSFVGVkJaR0Z3ZEdWeVJHVnpZM0pwY0hScGIyNTlJR1p5YjIwZ0owQmtZWFJoWjNKdmF5MXNhV0p5WVhKcFpYTXZiV0YwYUM5emNtTXZkMlZpUjFCVkwyZGxkRWRRVlVSbGRtbGpaU2M3WEc1Y2JseHVaWGh3YjNKMElHTnNZWE56SUUxRFRFVmthWFJ2Y2lCbGVIUmxibVJ6SUUxMWJIUnBRMjlzZFcxdVJHbHRVbVZrZFdOMGFXOXVSV1JwZEc5eUlIdGNiaUFnSUNCd2RXSnNhV01nYzJsdGFXeGhjbWwwZVZSb2NtVnphRzlzWkVsdWNIVjBPaUJFUnk1SmJuQjFkRUpoYzJVOGJuVnRZbVZ5SUh3Z2JuVnNiRDQ3WEc0Z0lDQWdjSFZpYkdsaklHMWhlRWwwWlhKaGRHbHZibk5KYm5CMWREb2dSRWN1U1c1d2RYUkNZWE5sUEc1MWJXSmxjaUI4SUc1MWJHdytPMXh1SUNBZ0lIQjFZbXhwWXlCMWMyVlhaV0pIVUZWSmJuQjFkRG9nUkVjdVNXNXdkWFJDWVhObFBHSnZiMnhsWVc0Z2ZDQnVkV3hzUGp0Y2JpQWdJQ0JqYjI1emRISjFZM1J2Y2lobFpHbDBiM0pUWlhSMGFXNW5jem9nUkdsdFVtVmtkV04wYVc5dVJXUnBkRzl5VDNCMGFXOXVjeUE5SUh0OUtTQjdYRzRnSUNBZ0lDQnpkWEJsY2lobFpHbDBiM0pUWlhSMGFXNW5jeWs3WEc0Z0lDQWdJQ0IwYUdsekxuTnBiV2xzWVhKcGRIbFVhSEpsYzJodmJHUkpibkIxZENBOUlIVnBMbWx1ZEVsdWNIVjBLQ2RUYVcxcGJHRnlhWFI1SUhSb2NtVnphRzlzWkNjc0lEZ3dLVHRjYmlBZ0lDQWdJSFJvYVhNdWJXRjRTWFJsY21GMGFXOXVjMGx1Y0hWMElEMGdkV2t1YVc1MFNXNXdkWFFvSjAxaGVDQnBkR1Z5WVhScGIyNXpKeXdnTlNrN1hHNGdJQ0FnSUNCMGFHbHpMblZ6WlZkbFlrZFFWVWx1Y0hWMElEMGdkV2t1WW05dmJFbHVjSFYwS0NkVmMyVWdWMlZpUjFCVkp5d2dabUZzYzJVcE8xeHVJQ0FnSUNBZ1oyVjBSMUJWUVdSaGNIUmxja1JsYzJOeWFYQjBhVzl1S0NrdWRHaGxiaWdvWkdWell5a2dQVDRnZTF4dUlDQWdJQ0FnSUNCcFppQW9aR1Z6WXlrZ2UxeHVJQ0FnSUNBZ0lDQWdJSFJvYVhNdWRYTmxWMlZpUjFCVlNXNXdkWFF1YzJWMFZHOXZiSFJwY0NoZ1ZYTmxJSGRsWWtkUVZTQm1iM0lnVFVOTUlHTmhiR04xYkdGMGFXOXVJQ2drZTJSbGMyTjlLV0FwTzF4dUlDQWdJQ0FnSUNCOUlHVnNjMlVnZTF4dUlDQWdJQ0FnSUNBZ0lIUm9hWE11ZFhObFYyVmlSMUJWU1c1d2RYUXVkbUZzZFdVZ1BTQm1ZV3h6WlR0Y2JpQWdJQ0FnSUNBZ0lDQjBhR2x6TG5WelpWZGxZa2RRVlVsdWNIVjBMbkp2YjNRdWMzUjViR1V1WkdsemNHeGhlU0E5SUNkdWIyNWxKenRjYmlBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnZlNrN1hHNGdJQ0FnZlZ4dVhHNGdJQ0FnY0hWaWJHbGpJR2RsZEVWa2FYUnZjaWdwT2lCSVZFMU1SV3hsYldWdWRDQjdYRzRnSUNBZ0lDQmpiMjV6ZENCa2FYWWdQU0IxYVM1a2FYWW9XMXh1SUNBZ0lDQWdJQ0IwYUdsekxuUmhZbXhsU1c1d2RYUXVjbTl2ZEN4Y2JpQWdJQ0FnSUNBZ2RHaHBjeTVqYjJ4MWJXNXpTVzV3ZFhSU2IyOTBMRnh1SUNBZ0lDQWdJQ0IwYUdsekxtTnZiSFZ0YmxCaGNtRnRjMFZrYVhSdmNsSnZiM1FzWEc0Z0lDQWdJQ0FnSUhSb2FYTXVZV2RuY21WbllYUnBiMjVOWlhSb2IyUkpibkIxZEM1eWIyOTBMRnh1SUNBZ0lDQWdJQ0IwYUdsekxuTnBiV2xzWVhKcGRIbFVhSEpsYzJodmJHUkpibkIxZEM1eWIyOTBMRnh1SUNBZ0lDQWdJQ0IwYUdsekxtMWhlRWwwWlhKaGRHbHZibk5KYm5CMWRDNXliMjkwTEZ4dUlDQWdJQ0FnSUNCMGFHbHpMblZ6WlZkbFlrZFFWVWx1Y0hWMExuSnZiM1FzWEc0Z0lDQWdJQ0JkTENCN2MzUjViR1U2SUh0dGFXNVhhV1IwYURvZ0p6UXlNSEI0SjMwc0lHTnNZWE56WlhNNklDZDFhUzFtYjNKdEozMHBPMXh1SUNBZ0lDQWdjbVYwZFhKdUlHUnBkanRjYmlBZ0lDQjlYRzVjYmlBZ0lDQndkV0pzYVdNZ1oyVjBJSEJoY21GdGN5Z3BJSHRjYmlBZ0lDQWdJSEpsZEhWeWJpQjdYRzRnSUNBZ0lDQWdJSFJoWW14bE9pQjBhR2x6TG5SaFlteGxTVzV3ZFhRdWRtRnNkV1VoTEZ4dUlDQWdJQ0FnSUNCamIyeDFiVzV6T2lCMGFHbHpMbU52YkhWdGJuTkpibkIxZEM1MllXeDFaU0VzWEc0Z0lDQWdJQ0FnSUcxbGRHaHZaRTVoYldVNklIUm9hWE11YldWMGFHOWtTVzV3ZFhRdWRtRnNkV1VoTEZ4dUlDQWdJQ0FnSUNCd2NtVndjbTlqWlhOemFXNW5SblZ1WTNScGIyNXpPaUIwYUdsekxtTnZiSFZ0Yms5d2RFVmthWFJ2Y25NdWJXRndLQ2hwZENrZ1BUNGdhWFF1Y0hKbFVISnZZMlZ6YzJsdVowWjFibU4wYVc5dUtTeGNiaUFnSUNBZ0lDQWdaR2x6ZEdGdVkyVk5aWFJ5YVdOek9pQjBhR2x6TG1OdmJIVnRiazl3ZEVWa2FYUnZjbk11YldGd0tDaHBkQ2tnUFQ0Z2FYUXVjMmx0YVd4aGNtbDBlVTFsZEhKcFkwbHVjSFYwTG5aaGJIVmxJU2tzWEc0Z0lDQWdJQ0FnSUhkbGFXZG9kSE02SUhSb2FYTXVZMjlzZFcxdVQzQjBSV1JwZEc5eWN5NXRZWEFvS0dsMEtTQTlQaUJwZEM1M1pXbG5hSFFoS1N4Y2JpQWdJQ0FnSUNBZ2NISmxjSEp2WTJWemMybHVaMFoxYm1OQmNtZHpPaUIwYUdsekxtTnZiSFZ0Yms5d2RFVmthWFJ2Y25NdWJXRndLQ2hwZENrZ1BUNGdhWFF1Y0hKbGNISnZZMlZ6YzJsdVowWjFibU4wYVc5dVUyVjBkR2x1WjNNcExGeHVJQ0FnSUNBZ0lDQmhaMmR5WldGblozSmxaMkYwYVc5dVRXVjBhRzlrT2lCMGFHbHpMbUZuWjNKbFoyRjBhVzl1VFdWMGFHOWtTVzV3ZFhRdWRtRnNkV1VzWEc0Z0lDQWdJQ0FnSUhSb2NtVnphRzlzWkRvZ2RHaHBjeTV6YVcxcGJHRnlhWFI1VkdoeVpYTm9iMnhrU1c1d2RYUXVkbUZzZFdVc1hHNGdJQ0FnSUNBZ0lHMWhlRWwwWlhKaGRHbHZibk02SUhSb2FYTXViV0Y0U1hSbGNtRjBhVzl1YzBsdWNIVjBMblpoYkhWbElEOC9JRFVzWEc0Z0lDQWdJQ0FnSUhWelpWZGxZa2RRVlRvZ2RHaHBjeTUxYzJWWFpXSkhVRlZKYm5CMWRDNTJZV3gxWlNBL1B5Qm1ZV3h6WlN4Y2JpQWdJQ0FnSUgwN1hHNGdJQ0FnZlZ4dWZWeHVJbDE5IiwiZXhwb3J0IGRlZmF1bHQgY2xhc3MgQml0QXJyYXkge1xuICAgIGNvbnN0cnVjdG9yKGFyZywgZGVmYXVsdFZhbHVlID0gZmFsc2UpIHtcbiAgICAgICAgdGhpcy5fbGVuZ3RoID0gMDtcbiAgICAgICAgdGhpcy5fdmVyc2lvbiA9IDA7XG4gICAgICAgIHRoaXMuX3VwZGF0ZUxldmVsID0gMDtcbiAgICAgICAgdGhpcy5fc2VsZWN0ZWRDb3VudCA9IDA7XG4gICAgICAgIHRoaXMuX3NlbGVjdGVkQ291bnRWZXJzaW9uID0gLTE7XG4gICAgICAgIHRoaXMuX3NlbGVjdGVkSW5kZXhlc1ZlcnNpb24gPSAtMTtcbiAgICAgICAgdGhpcy5fdmVyc2lvbmVkTmFtZSA9ICcnO1xuICAgICAgICB0aGlzLl92ZXJzaW9uZWROYW1lVmVyc2lvbiA9IC0xO1xuICAgICAgICB0aGlzLlNIUklOS19USFJFU0hPTEQgPSAweDEwMDtcbiAgICAgICAgaWYgKHR5cGVvZiBhcmcgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICBjb25zdCBsZW5ndGggPSBhcmc7XG4gICAgICAgICAgICBjb25zdCBidWZmID0gQml0QXJyYXkuX2NyZWF0ZUJ1ZmZlcihsZW5ndGgpO1xuICAgICAgICAgICAgaWYgKGRlZmF1bHRWYWx1ZSkge1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYnVmZi5sZW5ndGg7IGkrKylcbiAgICAgICAgICAgICAgICAgICAgYnVmZltpXSA9IC0xO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5fZGF0YSA9IGJ1ZmY7XG4gICAgICAgICAgICB0aGlzLl9sZW5ndGggPSBsZW5ndGg7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoYXJnIGluc3RhbmNlb2YgVWludDMyQXJyYXkpIHtcbiAgICAgICAgICAgIHRoaXMuX2RhdGEgPSBhcmc7XG4gICAgICAgICAgICB0aGlzLl9sZW5ndGggPSBkZWZhdWx0VmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgY29uc3RydWN0b3InKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBnZXRSYXdEYXRhKCkgeyByZXR1cm4gdGhpcy5fZGF0YTsgfVxuICAgIGFzc3VyZUdvZXoobnVtLCBhcmdOYW1lKSB7XG4gICAgICAgIGlmIChudW0gPCAwKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAke2FyZ05hbWV9IHNob3VsZCBiZSBncmVhdGVyIHRoYW4gemVyb2ApO1xuICAgIH1cbiAgICBhc3N1cmVJblJhbmdlKHZhbHVlLCBtaW4sIG1heCwgYXJnTmFtZSkge1xuICAgICAgICBpZiAoKHZhbHVlIDwgbWluKSB8fCAodmFsdWUgPiBtYXgpKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBBcmd1bWVudCAke2FyZ05hbWV9ICgke3ZhbHVlfSkgb3V0IG9mIHJhbmdlICgke21pbn0sICR7bWF4fSlgKTtcbiAgICB9XG4gICAgY29weShzcmMsIGRzdCwgY291bnQpIHtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKVxuICAgICAgICAgICAgZHN0W2ldID0gc3JjW2ldO1xuICAgIH1cbiAgICBjb3B5RnJvbShvdGhlcikge1xuICAgICAgICBpZiAodGhpcy5fbGVuZ3RoICE9IG90aGVyLl9sZW5ndGgpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYExlbmd0aHMgZGlmZmVyICgke3RoaXMuX2xlbmd0aH0gIT0gJHtvdGhlci5fbGVuZ3RofSlgKTtcbiAgICAgICAgdGhpcy5jb3B5KG90aGVyLl9kYXRhLCB0aGlzLl9kYXRhLCB0aGlzLmxlbmd0aEluSW50cyk7XG4gICAgICAgIHRoaXMuX3ZlcnNpb24rKztcbiAgICB9XG4gICAgZ2V0IGxlbmd0aCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2xlbmd0aDtcbiAgICB9XG4gICAgZ2V0IGJ1ZmZlcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RhdGE7XG4gICAgfVxuICAgIHNldCBidWZmZXIoZGF0YSkge1xuICAgICAgICB0aGlzLl9kYXRhID0gZGF0YTtcbiAgICAgICAgdGhpcy5fdmVyc2lvbisrO1xuICAgIH1cbiAgICBnZXQgdmVyc2lvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3ZlcnNpb247XG4gICAgfVxuICAgIHNldCB2ZXJzaW9uKHZhbHVlKSB7XG4gICAgICAgIHRoaXMuX3ZlcnNpb24gPSB2YWx1ZTtcbiAgICB9XG4gICAgaW5jcmVtZW50VmVyc2lvbihub3RpZnkgPSB0cnVlKSB7XG4gICAgICAgIHRoaXMuX3ZlcnNpb24rKztcbiAgICB9XG4gICAgZ2V0IGxlbmd0aEluSW50cygpIHtcbiAgICAgICAgcmV0dXJuIE1hdGguZmxvb3IoKHRoaXMuX2xlbmd0aCArIDB4MWYpIC8gMHgyMCk7XG4gICAgfVxuICAgIGdldCB2ZXJzaW9uZWROYW1lKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fdmVyc2lvbiA9PSB0aGlzLl92ZXJzaW9uZWROYW1lVmVyc2lvbiA/IHRoaXMuX3ZlcnNpb25lZE5hbWUgOiAnJztcbiAgICB9XG4gICAgc2V0IHZlcnNpb25lZE5hbWUobmFtZSkge1xuICAgICAgICB0aGlzLl92ZXJzaW9uZWROYW1lID0gbmFtZTtcbiAgICAgICAgdGhpcy5fdmVyc2lvbmVkTmFtZVZlcnNpb24gPSB0aGlzLl92ZXJzaW9uO1xuICAgIH1cbiAgICBnZXQgc2VsZigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIHNldExlbmd0aCh2YWx1ZSkge1xuICAgICAgICBpZiAodmFsdWUgPCAwKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdzaG91bGQgYmUgPj0gMCcpO1xuICAgICAgICBpZiAodmFsdWUgPT0gdGhpcy5fbGVuZ3RoKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBjb25zdCBuSW50c05lZWRlZCA9IE1hdGguZmxvb3IoKHZhbHVlICsgMHgxZikgLyAweDIwKTtcbiAgICAgICAgaWYgKChuSW50c05lZWRlZCA+IHRoaXMuX2RhdGEubGVuZ3RoKSB8fCAoKG5JbnRzTmVlZGVkICsgdGhpcy5TSFJJTktfVEhSRVNIT0xEKSA8IHRoaXMuX2RhdGEubGVuZ3RoKSkge1xuICAgICAgICAgICAgY29uc3QgbmV3RGF0YSA9IG5ldyBVaW50MzJBcnJheShuSW50c05lZWRlZCk7XG4gICAgICAgICAgICB0aGlzLmNvcHkodGhpcy5fZGF0YSwgbmV3RGF0YSwgKG5JbnRzTmVlZGVkID4gdGhpcy5fZGF0YS5sZW5ndGgpID8gdGhpcy5fZGF0YS5sZW5ndGggOiBuSW50c05lZWRlZCk7XG4gICAgICAgICAgICB0aGlzLl9kYXRhID0gbmV3RGF0YTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodmFsdWUgPiB0aGlzLl9sZW5ndGgpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLl9sZW5ndGggJSAweDIwID4gMClcbiAgICAgICAgICAgICAgICB0aGlzLl9kYXRhW3RoaXMubGVuZ3RoSW5JbnRzIC0gMV0gJj0gKDEgPDwgKCh0aGlzLl9sZW5ndGggJSAweDIwKSAmIDB4MWYpKSAtIDE7XG4gICAgICAgICAgICB0aGlzLl9kYXRhLmZpbGwoMCwgdGhpcy5sZW5ndGhJbkludHMsIG5JbnRzTmVlZGVkKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9sZW5ndGggPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5fdmVyc2lvbisrO1xuICAgIH1cbiAgICBzdGF0aWMgZnJvbUFuZChzZXQxLCBzZXQyKSB7XG4gICAgICAgIGlmIChzZXQxLl9sZW5ndGggIT0gc2V0Mi5fbGVuZ3RoKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBMZW5ndGhzIGRpZmZlciAoJHtzZXQxLl9sZW5ndGh9ICE9ICR7c2V0Mi5fbGVuZ3RofSlgKTtcbiAgICAgICAgY29uc3QgdGVtcCA9IG5ldyBCaXRBcnJheShzZXQxLl9sZW5ndGgpO1xuICAgICAgICB0ZW1wLl9sZW5ndGggPSBzZXQxLl9sZW5ndGg7XG4gICAgICAgIHRlbXAuX2RhdGEgPSBCaXRBcnJheS5fY3JlYXRlQnVmZmVyKHRlbXAuX2xlbmd0aCk7XG4gICAgICAgIHRlbXAuX3ZlcnNpb24gPSAwO1xuICAgICAgICBjb25zdCBsZW4gPSBzZXQxLmxlbmd0aEluSW50cztcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW47IGkrKylcbiAgICAgICAgICAgIHRlbXAuX2RhdGFbaV0gPSBzZXQxLl9kYXRhW2ldICYgc2V0Mi5fZGF0YVtpXTtcbiAgICAgICAgcmV0dXJuIHRlbXA7XG4gICAgfVxuICAgIHN0YXRpYyBfY3JlYXRlQnVmZmVyKGxlbmd0aCkge1xuICAgICAgICByZXR1cm4gbmV3IFVpbnQzMkFycmF5KE1hdGguZmxvb3IoKGxlbmd0aCArIDB4MWYpIC8gMHgyMCkpO1xuICAgIH1cbiAgICBzdGF0aWMgZnJvbVZhbHVlcyh2YWx1ZXMpIHtcbiAgICAgICAgY29uc3QgdGVtcCA9IG5ldyBCaXRBcnJheSh2YWx1ZXMubGVuZ3RoKTtcbiAgICAgICAgdGVtcC5fdmVyc2lvbiA9IDA7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGVtcC5fbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmICh2YWx1ZXNbaV0pXG4gICAgICAgICAgICAgICAgdGVtcC5fZGF0YVtNYXRoLmZsb29yKGkgLyAweDIwKV0gfD0gMSA8PCAoKGkgJSAweDIwKSAmIDB4MWYpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0ZW1wO1xuICAgIH1cbiAgICAvLy8gQ29uc3RydWN0cyBhIFtCaXRTZXRdIG9mIGxlbmd0aCBbY291bnRdLCB3aGVyZSBpZHgtdGggYml0IGlzIGRldGVybWluZWQgYnkgYSBjYWxsIHRvIFtmbGFnXSAoaWR4KS5cbiAgICBzdGF0aWMgZnJvbVNlcShjb3VudCwgZmxhZykge1xuICAgICAgICBjb25zdCB0ZW1wID0gbmV3IEJpdEFycmF5KGNvdW50KTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb3VudDsgKytpKVxuICAgICAgICAgICAgdGVtcC5zZXRCaXQoaSwgZmxhZyhpKSk7XG4gICAgICAgIHRlbXAuX3ZlcnNpb24gPSAwO1xuICAgICAgICByZXR1cm4gdGVtcDtcbiAgICB9XG4gICAgLy8vIENvbnN0cnVjdHMgYSBbQml0U2V0XSBmcm9tIGEgc3RyaW5nIFtzXSBjb250YWluaW5nICcwJyBvciAnMScuXG4gICAgc3RhdGljIGZyb21TdHJpbmcocykge1xuICAgICAgICByZXR1cm4gQml0QXJyYXkuZnJvbVNlcShzLmxlbmd0aCwgKGkpID0+IHMuY2hhckF0KGkpID09ICcxJyk7XG4gICAgfVxuICAgIC8vLyBDb25zdHJ1Y3RzIGEgW0JpdFNldF0sIGJhc2VkIG9uIGxlbmd0aCBbX2xlbmd0aF0gYW5kIGJ5dGUgYXJyYXkgW19kYXRhXS5cbiAgICBzdGF0aWMgZnJvbVVpbnQzMkFycmF5KF9sZW5ndGgsIF9kYXRhKSB7XG4gICAgICAgIGNvbnN0IHRlbXAgPSBuZXcgQml0QXJyYXkoX2xlbmd0aCk7XG4gICAgICAgIHRlbXAuX2RhdGEgPSBfZGF0YTtcbiAgICAgICAgcmV0dXJuIHRlbXA7XG4gICAgfVxuICAgIC8vLyBEZXNlcmlhbGl6ZXMgYSBbQml0U2V0XSBmcm9tIFtieXRlc10uXG4gICAgc3RhdGljIGZyb21CeXRlcyhieXRlcykge1xuICAgICAgICBjb25zdCBsZW4gPSBieXRlcy5sZW5ndGg7XG4gICAgICAgIGNvbnN0IHRlbXAgPSBuZXcgQml0QXJyYXkobGVuICogOCk7XG4gICAgICAgIHRlbXAuX2RhdGEgPSBuZXcgVWludDMyQXJyYXkoTWF0aC5mbG9vcigobGVuICsgMykgLyA0KSk7XG4gICAgICAgIHRlbXAuX2xlbmd0aCA9IGxlbiAqIDg7XG4gICAgICAgIGxldCBudW0xID0gMDtcbiAgICAgICAgbGV0IG51bTIgPSAwO1xuICAgICAgICB3aGlsZSAoKGxlbiAtIG51bTIpID49IDQpIHtcbiAgICAgICAgICAgIHRlbXAuX2RhdGFbbnVtMSsrXSA9ICgoKGJ5dGVzW251bTJdICYgMHhmZikgfCAoKGJ5dGVzW251bTIgKyAxXSAmIDB4ZmYpIDw8IDgpKSB8XG4gICAgICAgICAgICAgICAgKChieXRlc1tudW0yICsgMl0gJiAweGZmKSA8PCAweDEwKSkgfCAoKGJ5dGVzW251bTIgKyAzXSAmIDB4ZmYpIDw8IDB4MTgpO1xuICAgICAgICAgICAgbnVtMiArPSA0O1xuICAgICAgICB9XG4gICAgICAgIGlmIChsZW4gLSBudW0yID09IDMpXG4gICAgICAgICAgICB0ZW1wLl9kYXRhW251bTFdID0gKGJ5dGVzW251bTIgKyAyXSAmIDB4ZmYpIDw8IDB4MTA7XG4gICAgICAgIGlmIChsZW4gLSBudW0yID09IDIpXG4gICAgICAgICAgICB0ZW1wLl9kYXRhW251bTFdIHw9IChieXRlc1tudW0yICsgMV0gJiAweGZmKSA8PCA4O1xuICAgICAgICBpZiAobGVuIC0gbnVtMiA9PSAxKVxuICAgICAgICAgICAgdGVtcC5fZGF0YVtudW0xXSB8PSBieXRlc1tudW0yXSAmIDB4ZmY7XG4gICAgICAgIHRlbXAuX3ZlcnNpb24gPSAwO1xuICAgICAgICByZXR1cm4gdGVtcDtcbiAgICB9XG4gICAgdG9TdHJpbmcoKSB7XG4gICAgICAgIHJldHVybiBgJHt0aGlzLl9sZW5ndGh9IGJpdHMsICR7dGhpcy5jb3VudEJpdHModHJ1ZSl9IHNldGA7XG4gICAgfVxuICAgIC8vLyBQZXJmb3JtcyBkZWVwIGNvbXBhcmlzb24gb2YgdHdvIGJpdHNldHMuXG4gICAgZXF1YWxzKG90aGVyKSB7XG4gICAgICAgIGlmICh0aGlzID09IG90aGVyKVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIGlmIChvdGhlciA9PSBudWxsKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICBpZiAodGhpcy5fbGVuZ3RoICE9IG90aGVyLl9sZW5ndGgpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIGlmICh0aGlzLl9sZW5ndGggPT0gMClcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuX2RhdGEubGVuZ3RoIC0gMTsgaSsrKVxuICAgICAgICAgICAgaWYgKHRoaXMuX2RhdGFbaV0gIT0gb3RoZXIuX2RhdGFbaV0pXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICBmb3IgKGxldCBpID0gKHRoaXMuX2RhdGEubGVuZ3RoIC0gMSkgKiA4OyBpIDwgdGhpcy5fbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmdldEJpdChpKSAhPSBvdGhlci5nZXRCaXQoaSkpXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICAvKiogQ2xvbmVzIGEgYml0c2V0LiAqL1xuICAgIGNsb25lKCkge1xuICAgICAgICBjb25zdCBiaXRBcnJheSA9IG5ldyBCaXRBcnJheSgwLCBmYWxzZSk7XG4gICAgICAgIGJpdEFycmF5Ll9kYXRhID0gVWludDMyQXJyYXkuZnJvbSh0aGlzLl9kYXRhKTsgLy8gZWZmZWN0aXZlIGxlbmd0aDogKGxlbmd0aEluSW50cylcbiAgICAgICAgYml0QXJyYXkuX2xlbmd0aCA9IHRoaXMuX2xlbmd0aDtcbiAgICAgICAgYml0QXJyYXkuX3ZlcnNpb24gPSB0aGlzLl92ZXJzaW9uO1xuICAgICAgICByZXR1cm4gYml0QXJyYXk7XG4gICAgfVxuICAgIC8qKiBJbml0aWFsaXplcyBhIGJpdHNldC4gKi9cbiAgICBpbml0KGZsYWcsIG5vdGlmeSkge1xuICAgICAgICB0aGlzLnNldEFsbChmYWxzZSwgZmFsc2UpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuX2xlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoZmxhZyhpKSlcbiAgICAgICAgICAgICAgICB0aGlzLl9kYXRhW01hdGguZmxvb3IoaSAvIDB4MjApXSB8PSAxIDw8ICgoaSAlIDB4MjApICYgMHgxZik7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5pbmNyZW1lbnRWZXJzaW9uKG5vdGlmeSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICAvLy8gSW52ZXJ0cyBhIGJpdHNldC5cbiAgICBpbnZlcnQobm90aWZ5ID0gdHJ1ZSkge1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuX2RhdGEubGVuZ3RoOyBpKyspXG4gICAgICAgICAgICB0aGlzLl9kYXRhW2ldIF49IC0xO1xuICAgICAgICB0aGlzLmluY3JlbWVudFZlcnNpb24obm90aWZ5KTtcbiAgICB9XG4gICAgLy8vIFNldHMgYWxsIGJpdHMgdG8gW3ZhbHVlXSwgb3B0aW9uYWxseSBzdXBwcmVzc2luZyBub3RpZmljYXRpb25zLlxuICAgIHNldEFsbCh2YWx1ZSwgbm90aWZ5ID0gZmFsc2UpIHtcbiAgICAgICAgY29uc3QgZmxhZ3MgPSB2YWx1ZSA/IC0xIDogMDtcbiAgICAgICAgY29uc3QgbGVuID0gdGhpcy5sZW5ndGhJbkludHM7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuOyBpKyspIC8vdG9kbzogb3B0aW1pemVcbiAgICAgICAgICAgIHRoaXMuX2RhdGFbaV0gPSBmbGFncztcbiAgICAgICAgdGhpcy5pbmNyZW1lbnRWZXJzaW9uKG5vdGlmeSk7XG4gICAgfVxuICAgIC8vLyBTZXRzIGJpdHMgYXQgW2luZGV4ZXNdIHBvc2l0aW9uIHRvIFt2YWx1ZV0uXG4gICAgLy8vIENsZWFycyB0aGUgYml0c2V0IGlmIFtjbGVhcl0gZmxhZyBpcyB0cnVlLlxuICAgIC8vLyBDaGFuZ2Ugbm90aWZpY2F0aW9uIGlzIHJhaXNlZCB3aGVuIFtub3RpZnldIGlzIHRydWUuXG4gICAgc2V0SW5kZXhlcyhpbmRleGVzLCB2YWx1ZSA9IHRydWUsIGNsZWFyID0gdHJ1ZSwgbm90aWZ5ID0gdHJ1ZSkge1xuICAgICAgICBpZiAoY2xlYXIpXG4gICAgICAgICAgICB0aGlzLnNldEFsbCghdmFsdWUsIGZhbHNlKTtcbiAgICAgICAgZm9yIChjb25zdCBpIG9mIGluZGV4ZXMpXG4gICAgICAgICAgICB0aGlzLnNldEZhc3QoaSwgdmFsdWUpO1xuICAgICAgICB0aGlzLmluY3JlbWVudFZlcnNpb24obm90aWZ5KTtcbiAgICB9XG4gICAgZXZlcnlJbmRleChpbmRleGVzLCB2YWx1ZSA9IHRydWUpIHtcbiAgICAgICAgZm9yIChjb25zdCBpbmRleCBvZiBpbmRleGVzKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5nZXRCaXQoaW5kZXgpICE9IHZhbHVlKVxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgYW55SW5kZXgoaW5kZXhlcywgdmFsdWUgPSB0cnVlKSB7XG4gICAgICAgIGZvciAoY29uc3QgaW5kZXggb2YgaW5kZXhlcykge1xuICAgICAgICAgICAgaWYgKHRoaXMuZ2V0Qml0KGluZGV4KSA9PSB2YWx1ZSlcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHNldFdoZXJlKGNoZWNrLCB2YWx1ZSA9IHRydWUsIGNsZWFyID0gdHJ1ZSwgbm90aWZ5ID0gdHJ1ZSwgYWxsb3dDbGVhciA9IHRydWUpIHtcbiAgICAgICAgaWYgKGNsZWFyICYmIGFsbG93Q2xlYXIpXG4gICAgICAgICAgICB0aGlzLnNldEFsbCghdmFsdWUsIGZhbHNlKTtcbiAgICAgICAgaWYgKGFsbG93Q2xlYXIpIHtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5fbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBpZiAoY2hlY2soaSkpXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0RmFzdChpLCB2YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuX2xlbmd0aDsgaSsrKVxuICAgICAgICAgICAgICAgIHRoaXMuc2V0RmFzdChpLCBjaGVjayhpKSA/IHZhbHVlIDogIXZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmluY3JlbWVudFZlcnNpb24obm90aWZ5KTtcbiAgICB9XG4gICAgZ2V0UmFuZ2UoZnJvbSwgdG8pIHtcbiAgICAgICAgdGhpcy5hc3N1cmVJblJhbmdlKGZyb20sIDAsIHRoaXMuX2xlbmd0aCAtIDEsICdmcm9tJyk7XG4gICAgICAgIHRoaXMuYXNzdXJlSW5SYW5nZSh0bywgMCwgdGhpcy5fbGVuZ3RoLCAndG8nKTtcbiAgICAgICAgY29uc3QgYXJyID0gW107XG4gICAgICAgIGZvciAobGV0IGkgPSBmcm9tOyBpIDwgdG87ICsraSlcbiAgICAgICAgICAgIGFyci5wdXNoKHRoaXMuZ2V0Qml0KGkpKTtcbiAgICAgICAgcmV0dXJuIEJpdEFycmF5LmZyb21WYWx1ZXMoYXJyKTtcbiAgICB9XG4gICAgZ2V0UmFuZ2VBc0xpc3QoZnJvbSwgdG8pIHtcbiAgICAgICAgdGhpcy5hc3N1cmVJblJhbmdlKGZyb20sIDAsIHRoaXMuX2xlbmd0aCAtIDEsICdmcm9tJyk7XG4gICAgICAgIHRoaXMuYXNzdXJlSW5SYW5nZSh0bywgMCwgdGhpcy5fbGVuZ3RoLCAndG8nKTtcbiAgICAgICAgY29uc3QgYXJyID0gW107XG4gICAgICAgIGZvciAobGV0IGkgPSBmcm9tOyBpIDwgdG87ICsraSlcbiAgICAgICAgICAgIGFyci5wdXNoKHRoaXMuZ2V0Qml0KGkpKTtcbiAgICAgICAgcmV0dXJuIGFycjtcbiAgICB9XG4gICAgc2V0UmFuZ2UoZnJvbSwgdG8sIHZhbHVlLCBub3RpZnkgPSB0cnVlKSB7XG4gICAgICAgIHRoaXMuYXNzdXJlSW5SYW5nZShmcm9tLCAwLCB0aGlzLl9sZW5ndGggLSAxLCAnZnJvbScpO1xuICAgICAgICB0aGlzLmFzc3VyZUluUmFuZ2UodG8sIDAsIHRoaXMuX2xlbmd0aCAtIDEsICd0bycpO1xuICAgICAgICBjb25zdCBzdGFydCA9IE1hdGgubWluKGZyb20sIHRvKTtcbiAgICAgICAgY29uc3QgZW5kID0gTWF0aC5tYXgoZnJvbSwgdG8pO1xuICAgICAgICAvL3RvZG86IG9wdGltaXplXG4gICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IHN0YXJ0OyBpIDw9IGVuZDsgaSsrKVxuICAgICAgICAgICAgICAgIHRoaXMuc2V0VHJ1ZShpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSBzdGFydDsgaSA8PSBlbmQ7IGkrKylcbiAgICAgICAgICAgICAgICB0aGlzLnNldEZhbHNlKGkpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuaW5jcmVtZW50VmVyc2lvbihub3RpZnkpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgLy8vIFNldHMgbiByYW5kb21seSBjaG9zZW4gYml0cyB0byB2YWx1ZSwgcmVtYWluaW5nIGJpdHMgdG8gIXZhbHVlLlxuICAgIHNldFJhbmRvbShuLCB2YWx1ZSwgbm90aWZ5ID0gdHJ1ZSkge1xuICAgICAgICBpZiAobiA8IDAgfHwgbiA+IHRoaXMuX2xlbmd0aClcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignbiBtdXN0IGJlID49IDAgJiYgPD0gQ291bnQnKTtcbiAgICAgICAgaWYgKG4gPiB0aGlzLl9sZW5ndGggLyAyKVxuICAgICAgICAgICAgdGhpcy5zZXRSYW5kb20odGhpcy5fbGVuZ3RoIC0gbiwgIXZhbHVlKTtcbiAgICAgICAgdGhpcy5zZXRBbGwoIXZhbHVlKTtcbiAgICAgICAgZm9yIChsZXQgayA9IDA7IGsgPCBuOykge1xuICAgICAgICAgICAgY29uc3QgaSA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIHRoaXMuX2xlbmd0aCk7XG4gICAgICAgICAgICBpZiAodGhpcy5nZXRCaXQoaSkgPT0gdmFsdWUpXG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB0aGlzLnNldEZhc3QoaSwgdmFsdWUpO1xuICAgICAgICAgICAgaysrO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuaW5jcmVtZW50VmVyc2lvbihub3RpZnkpO1xuICAgIH1cbiAgICAvLy8gTW9kaWZpZXMgY3VycmVudCBiaXRzZXQgYnkgcGVyZm9ybWluZyB0aGUgYml0d2lzZSBBTkQgb3BlcmF0aW9uIGFnYWluc3QgdGhlXG4gICAgLy8vIGNvcnJlc3BvbmRpbmcgZWxlbWVudHMgaW4gdGhlIHNwZWNpZmllZCBiaXRzZXQuXG4gICAgYW5kKHZhbHVlLCBub3RpZnkgPSB0cnVlKSB7XG4gICAgICAgIGlmICh0aGlzLl9sZW5ndGggIT0gdmFsdWUuX2xlbmd0aClcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignQXJyYXkgbGVuZ3RocyBkaWZmZXIuJyk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSB0aGlzLmxlbmd0aEluSW50czsgaSA8IGxlbjsgaSsrKVxuICAgICAgICAgICAgdGhpcy5fZGF0YVtpXSAmPSB2YWx1ZS5fZGF0YVtpXTtcbiAgICAgICAgdGhpcy5pbmNyZW1lbnRWZXJzaW9uKG5vdGlmeSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICAvLy8gUGVyZm9ybXMgdGhlIGJpdHdpc2UgQU5EIE5PVCBvcGVyYXRpb24gb24gdGhlIGVsZW1lbnRzIGluIHRoZSBjdXJyZW50IGJpdHNldFxuICAgIC8vLyBhZ2FpbnN0IHRoZSBjb3JyZXNwb25kaW5nIGVsZW1lbnRzIGluIHRoZSBzcGVjaWZpZWQgYml0c2V0LlxuICAgIGFuZE5vdCh2YWx1ZSwgbm90aWZ5ID0gdHJ1ZSkge1xuICAgICAgICBpZiAodGhpcy5fbGVuZ3RoICE9IHZhbHVlLl9sZW5ndGgpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0FycmF5IGxlbmd0aHMgZGlmZmVyLicpO1xuICAgICAgICBjb25zdCBsZW4gPSB0aGlzLmxlbmd0aEluSW50cztcbiAgICAgICAgZm9yIChsZXQgbnVtMiA9IDA7IG51bTIgPCBsZW47IG51bTIrKylcbiAgICAgICAgICAgIHRoaXMuX2RhdGFbbnVtMl0gJj0gfnZhbHVlLl9kYXRhW251bTJdO1xuICAgICAgICB0aGlzLmluY3JlbWVudFZlcnNpb24obm90aWZ5KTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIC8vLyBQZXJmb3JtcyB0aGUgYml0d2lzZSBOT1QgQU5EIG9wZXJhdGlvbiBvbiB0aGUgZWxlbWVudHMgaW4gdGhlIGN1cnJlbnQgYml0c2V0XG4gICAgLy8vIGFnYWluc3QgdGhlIGNvcnJlc3BvbmRpbmcgZWxlbWVudHMgaW4gdGhlIHNwZWNpZmllZCBiaXRzZXQuXG4gICAgbm90QW5kKHZhbHVlLCBub3RpZnkgPSB0cnVlKSB7XG4gICAgICAgIGlmICh0aGlzLl9sZW5ndGggIT0gdmFsdWUuX2xlbmd0aClcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignQXJyYXkgbGVuZ3RocyBkaWZmZXIuJyk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSB0aGlzLmxlbmd0aEluSW50czsgaSA8IGxlbjsgaSsrKVxuICAgICAgICAgICAgdGhpcy5fZGF0YVtpXSA9ICh+dGhpcy5fZGF0YVtpXSkgJiB2YWx1ZS5fZGF0YVtpXTtcbiAgICAgICAgdGhpcy5pbmNyZW1lbnRWZXJzaW9uKG5vdGlmeSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICAvLy8gSW52ZXJ0cyBhbGwgYml0IHZhbHVlcyBpbiB0aGUgY3VycmVudCBiaXRzZXRcbiAgICBub3Qobm90aWZ5ID0gdHJ1ZSkge1xuICAgICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gdGhpcy5sZW5ndGhJbkludHM7IGkgPCBsZW47IGkrKylcbiAgICAgICAgICAgIHRoaXMuX2RhdGFbaV0gPSB+dGhpcy5fZGF0YVtpXTtcbiAgICAgICAgdGhpcy5pbmNyZW1lbnRWZXJzaW9uKG5vdGlmeSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICAvLy8gUGVyZm9ybXMgdGhlIGJpdHdpc2UgT1Igb3BlcmF0aW9uIG9uIHRoZSBlbGVtZW50cyBpbiB0aGUgY3VycmVudCBiaXRzZXRcbiAgICAvLy8gYWdhaW5zdCB0aGUgY29ycmVzcG9uZGluZyBlbGVtZW50cyBpbiB0aGUgc3BlY2lmaWVkIGJpdHNldC5cbiAgICBvcih2YWx1ZSwgbm90aWZ5ID0gdHJ1ZSkge1xuICAgICAgICBpZiAodGhpcy5fbGVuZ3RoICE9IHZhbHVlLl9sZW5ndGgpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0FycmF5IGxlbmd0aHMgZGlmZmVyLicpO1xuICAgICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gdGhpcy5sZW5ndGhJbkludHM7IGkgPCBsZW47IGkrKylcbiAgICAgICAgICAgIHRoaXMuX2RhdGFbaV0gfD0gdmFsdWUuX2RhdGFbaV07XG4gICAgICAgIHRoaXMuaW5jcmVtZW50VmVyc2lvbihub3RpZnkpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgLy8vIFBlcmZvcm1zIHRoZSBiaXR3aXNlIGV4Y2x1c2l2ZSBPUiBvcGVyYXRpb24gb24gdGhlIGVsZW1lbnRzIGluIHRoZSBjdXJyZW50IGJpdHNldFxuICAgIC8vLyBhZ2FpbnN0IHRoZSBjb3JyZXNwb25kaW5nIGVsZW1lbnRzIGluIHRoZSBzcGVjaWZpZWQgYml0c2V0LlxuICAgIHhvcih2YWx1ZSwgbm90aWZ5ID0gdHJ1ZSkge1xuICAgICAgICBpZiAodGhpcy5fbGVuZ3RoICE9IHZhbHVlLl9sZW5ndGgpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0FycmF5IGxlbmd0aHMgZGlmZmVyLicpO1xuICAgICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gdGhpcy5sZW5ndGhJbkludHM7IGkgPCBsZW47IGkrKylcbiAgICAgICAgICAgIHRoaXMuX2RhdGFbaV0gXj0gdmFsdWUuX2RhdGFbaV07XG4gICAgICAgIHRoaXMuaW5jcmVtZW50VmVyc2lvbihub3RpZnkpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgLy8vIEluc2VydHMgbiAwLWJpdHMgYXQgcG9zaXRpb24gcG9zLCByZXNpemluZyBzZWxmIGFuZCBzaGlmdGluZyBiaXRzIGFwcHJvcHJpYXRlbHkuXG4gICAgaW5zZXJ0QXQocG9zLCBuLCBmbGFnID0gZmFsc2UpIHtcbiAgICAgICAgdGhpcy5hc3N1cmVJblJhbmdlKHBvcywgMCwgdGhpcy5fbGVuZ3RoLCAncG9zJyk7XG4gICAgICAgIGlmIChuID09IDApXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIC8vVE9ETzogb3B0aW1pemVcbiAgICAgICAgLy90aGUgbW9zdCBwcmltaXRpdmUgaW1wbGVtZW50YXRpb24sIG9wdGltaXplIGl0IGxhdGVyIVxuICAgICAgICAvLyBiZWdpblVwZGF0ZSgpO1xuICAgICAgICBjb25zdCBvbGRsZW5ndGggPSB0aGlzLl9sZW5ndGg7XG4gICAgICAgIHRoaXMuc2V0TGVuZ3RoKHRoaXMuX2xlbmd0aCArIG4pO1xuICAgICAgICAvL2lmICghY29udGFpbnMoIWZsYWcpKSByZXR1cm47IC8vIG5vdGhpbmcgdG8gZG9cbiAgICAgICAgZm9yIChsZXQgaSA9IG9sZGxlbmd0aCAtIDE7IGkgPj0gcG9zOyBpLS0pXG4gICAgICAgICAgICB0aGlzLnNldEJpdChpICsgbiwgdGhpcy5nZXRCaXQoaSkpO1xuICAgICAgICBmb3IgKGxldCBpID0gcG9zOyBpIDwgcG9zICsgbjsgaSsrKVxuICAgICAgICAgICAgdGhpcy5zZXRCaXQoaSwgZmxhZyk7XG4gICAgICAgIC8vIGVuZFVwZGF0ZSgpO1xuICAgIH1cbiAgICAvLy8gRGVsZXRlcyBuIGJpdHMgYmVnaW5uaW5nIGF0IHBvc2l0aW9uIHBvcywgcmVzaXppbmcgc2VsZiBhbmQgc2hpZnRpbmcgcmVtYWluaW5nXG4gICAgLy8vIGJpdHMgYXBwcm9wcmlhdGVseS5cbiAgICByZW1vdmVBdChwb3MsIG4gPSAxKSB7XG4gICAgICAgIC8vIHRoZSBtb3N0IHByaW1pdGl2ZSBpbXBsZW1lbnRhdGlvbiwgb3B0aW1pemUgaXQgbGF0ZXIhXG4gICAgICAgIGlmIChuIDwgMClcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignbiBjYW5ub3QgYmUgbmVnYXRpdmUnKTtcbiAgICAgICAgdGhpcy5hc3N1cmVJblJhbmdlKHBvcywgMCwgdGhpcy5fbGVuZ3RoIC0gbiwgJ3BvcycpO1xuICAgICAgICBpZiAodGhpcy5jb250YWlucyh0cnVlKSkge1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IHBvczsgaSA8IHRoaXMuX2xlbmd0aCAtIG47IGkrKylcbiAgICAgICAgICAgICAgICB0aGlzLnNldEJpdChpLCB0aGlzLmdldEJpdChpICsgbikpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2V0TGVuZ3RoKHRoaXMuX2xlbmd0aCAtIG4pO1xuICAgIH1cbiAgICByZW1vdmVCeU1hc2sobWFzaywgZmxhZyA9IHRydWUpIHtcbiAgICAgICAgaWYgKHRoaXMuX2xlbmd0aCAhPSBtYXNrLmxlbmd0aClcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignbGVuZ3RoICE9IG1hc2subGVuZ3RoJyk7XG4gICAgICAgIGlmIChtYXNrID09IHRoaXMpIHsgLy8gbm8gbmVlZCB0byBpdGVyYXRlXG4gICAgICAgICAgICB0aGlzLnNldExlbmd0aChtYXNrLmNvdW50Qml0cyghZmxhZykpO1xuICAgICAgICAgICAgdGhpcy5zZXRBbGwoIWZsYWcpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgbGV0IGRzdElkeCA9IDA7XG4gICAgICAgICAgICBmb3IgKGxldCBzcmNJZHggPSAtMTsgKHNyY0lkeCA9IG1hc2suZmluZE5leHQoc3JjSWR4LCAhZmxhZykpICE9IC0xOylcbiAgICAgICAgICAgICAgICB0aGlzLnNldEZhc3QoZHN0SWR4KyssIHRoaXMuZ2V0Qml0KHNyY0lkeCkpO1xuICAgICAgICAgICAgdGhpcy5fbGVuZ3RoID0gZHN0SWR4O1xuICAgICAgICAgICAgdGhpcy5fdmVyc2lvbisrO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICAvLy8gU2ltaWxhciB0byB0aGUgW10gb3BlcmF0b3IuXG4gICAgZ2V0Qml0KHBvcykge1xuICAgICAgICByZXR1cm4gKHRoaXMuX2RhdGFbTWF0aC5mbG9vcihwb3MgLyAweDIwKV0gJiAoMSA8PCAocG9zICYgMHgxZikpKSAhPSAwO1xuICAgIH1cbiAgICAvLy8gU2ltaWxhciB0byB0aGUgW10gb3BlcmF0b3IuXG4gICAgc2V0Qml0KHBvcywgYml0LCBub3RpZnkgPSB0cnVlKSB7XG4gICAgICAgIHRoaXMuc2V0RmFzdChwb3MsIGJpdCk7XG4gICAgICAgIGlmIChub3RpZnkpXG4gICAgICAgICAgICB0aGlzLl92ZXJzaW9uKys7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIHRoaXMuX3ZlcnNpb24rKztcbiAgICB9XG4gICAgLy8vIFNldHMgW2ldLXRoIGJpdCB0byBbdmFsdWVdLCBkb2VzIG5vdCBjaGVjayBib3VuZHMsIGRvZXMgbm90IGluY3JlbWVudCB2ZXJzaW9uXG4gICAgc2V0RmFzdChpLCB2YWx1ZSkge1xuICAgICAgICBpZiAodmFsdWUpXG4gICAgICAgICAgICB0aGlzLl9kYXRhW01hdGguZmxvb3IoaSAvIDB4MjApXSB8PSAxIDw8IChpICYgMHgxZik7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIHRoaXMuX2RhdGFbTWF0aC5mbG9vcihpIC8gMHgyMCldICY9IH4oMSA8PCAoaSAmIDB4MWYpKTtcbiAgICB9XG4gICAgc2V0VHJ1ZShwb3MpIHtcbiAgICAgICAgdGhpcy5fZGF0YVtNYXRoLmZsb29yKHBvcyAvIDB4MjApXSB8PSAxIDw8IChwb3MgJiAweDFmKTtcbiAgICB9XG4gICAgc2V0RmFsc2UocG9zKSB7XG4gICAgICAgIHRoaXMuX2RhdGFbTWF0aC5mbG9vcihwb3MgLyAweDIwKV0gJj0gfigxIDw8IChwb3MgJiAweDFmKSk7XG4gICAgfVxuICAgIHRydWVDb3VudCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY291bnRCaXRzKHRydWUpO1xuICAgIH1cbiAgICBmYWxzZUNvdW50KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jb3VudEJpdHMoZmFsc2UpO1xuICAgIH1cbiAgICAvLy8gQ291bnRzIGJpdHMgb2YgdGhlIHNwZWNpZmllZCB2YWx1ZS5cbiAgICBjb3VudEJpdHModmFsdWUpIHtcbiAgICAgICAgaWYgKHRoaXMuX2xlbmd0aCA9PSAwKVxuICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgIGlmICh0aGlzLl9zZWxlY3RlZENvdW50VmVyc2lvbiAhPSB0aGlzLl92ZXJzaW9uKSB7XG4gICAgICAgICAgICB0aGlzLl9zZWxlY3RlZENvdW50ID0gMDtcbiAgICAgICAgICAgIGNvbnN0IGxlbiA9IHRoaXMubGVuZ3RoSW5JbnRzO1xuICAgICAgICAgICAgbGV0IGkgPSAwO1xuICAgICAgICAgICAgZm9yICg7IGkgPCBsZW4gLSAxOyBpKyspIHtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBrID0gdGhpcy5fZGF0YVtpXTsgayAhPSAwOyBrID4+Pj0gOCkgeyAvL3RvZG86IGNhc3QgZGF0YVtpXSB0byB1aW50XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3NlbGVjdGVkQ291bnQgKz0gQml0QXJyYXkuX29uQml0Q291bnRbayAmIDB4ZmZdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIFRoZSBsYXN0IGludC5cbiAgICAgICAgICAgIGxldCBrID0gdGhpcy5fZGF0YVtpXTtcbiAgICAgICAgICAgIGNvbnN0IHJlbWFpbmluZ0JpdHMgPSB0aGlzLl9sZW5ndGggJiAweDFmO1xuICAgICAgICAgICAgaWYgKHJlbWFpbmluZ0JpdHMgIT0gMCkgLyogaWYgcmVtYWluaW5nQml0cyA9PSAwLCB0aGUgbGFzdCBpbnQgaXMgZnVsbHkgdXNlZCBhbmQgQUxMIGJpdHMgc2hvdWxkIGJlIGxlZnQgYXMgaXMgKi9cbiAgICAgICAgICAgICAgICBrICY9IH4oKDQyOTQ5NjcyOTUpIDw8IHJlbWFpbmluZ0JpdHMpO1xuICAgICAgICAgICAgZm9yICg7IGsgIT0gMDsgayA+Pj49IDgpXG4gICAgICAgICAgICAgICAgdGhpcy5fc2VsZWN0ZWRDb3VudCArPSBCaXRBcnJheS5fb25CaXRDb3VudFtrICYgMHhmZl07XG4gICAgICAgICAgICB0aGlzLl9zZWxlY3RlZENvdW50VmVyc2lvbiA9IHRoaXMuX3ZlcnNpb247XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICh2YWx1ZSA/IHRoaXMuX3NlbGVjdGVkQ291bnQgOiB0aGlzLl9sZW5ndGggLSB0aGlzLl9zZWxlY3RlZENvdW50KTtcbiAgICB9XG4gICAgLy8vIFJldHVybnMgYSBudW1iZXIgb2Ygc2V0IGJpdHMgd2hlcmUgYWxzbyBbY2hlY2tdIGlzIHRydWVcbiAgICBjb3VudFdoZXJlKGNoZWNrKSB7XG4gICAgICAgIGxldCByZXN1bHQgPSAwO1xuICAgICAgICBpZiAodGhpcy50cnVlQ291bnQoKSA9PSB0aGlzLl9sZW5ndGgpIHtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5fbGVuZ3RoOyBpKyspXG4gICAgICAgICAgICAgICAgcmVzdWx0ICs9IGNoZWNrKGkpID8gMSA6IDA7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gLTE7IChpID0gdGhpcy5maW5kTmV4dChpLCB0cnVlKSkgIT0gLTE7KVxuICAgICAgICAgICAgICAgIHJlc3VsdCArPSBjaGVjayhpKSA/IDEgOiAwO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICAgIC8vLyBQZXJmb3JtcyBiaXQgXCJhbmRcIiBhbmQgY291bnRzIGJpdHMgb2YgdGhlIHNwZWNpZmllZCB2YWx1ZSwgd2l0aG91dCBiaXRzZXQgbW9kaWZpY2F0aW9uLlxuICAgIGFuZFdpdGhDb3VudEJpdHMoc2Vjb25kLCB2YWx1ZSkge1xuICAgICAgICBpZiAodGhpcy5fbGVuZ3RoID09IDApXG4gICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgbGV0IGNvdW50ID0gMDtcbiAgICAgICAgY29uc3QgbGVuID0gdGhpcy5sZW5ndGhJbkludHM7XG4gICAgICAgIGxldCBpID0gMDtcbiAgICAgICAgZm9yICg7IGkgPCBsZW4gLSAxOyBpKyspIHtcbiAgICAgICAgICAgIGZvciAobGV0IGsgPSB0aGlzLl9kYXRhW2ldICYgc2Vjb25kLl9kYXRhW2ldOyBrICE9IDA7IGsgPj4+PSA4KVxuICAgICAgICAgICAgICAgIGNvdW50ICs9IEJpdEFycmF5Ll9vbkJpdENvdW50W2sgJiAweGZmXTtcbiAgICAgICAgfVxuICAgICAgICAvLyBUaGUgbGFzdCBpbnQuXG4gICAgICAgIGxldCBrID0gdGhpcy5fZGF0YVtpXSAmIHNlY29uZC5fZGF0YVtpXTtcbiAgICAgICAgY29uc3QgcmVtYWluaW5nQml0cyA9IHRoaXMuX2xlbmd0aCAmIDB4MWY7XG4gICAgICAgIGlmIChyZW1haW5pbmdCaXRzICE9IDApXG4gICAgICAgICAgICBrICY9IH4oKDQyOTQ5NjcyOTUpIDw8IHJlbWFpbmluZ0JpdHMpO1xuICAgICAgICBmb3IgKDsgayAhPSAwOyBrID4+Pj0gOClcbiAgICAgICAgICAgIGNvdW50ICs9IEJpdEFycmF5Ll9vbkJpdENvdW50W2sgJiAweGZmXTtcbiAgICAgICAgcmV0dXJuICh2YWx1ZSA/IGNvdW50IDogdGhpcy5fbGVuZ3RoIC0gY291bnQpO1xuICAgIH1cbiAgICBjbGVhcigpIHtcbiAgICAgICAgdGhpcy5zZXRMZW5ndGgoMCk7XG4gICAgfVxuICAgIGNvbnRhaW5zKHZhbHVlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmZpbmROZXh0KC0xLCB2YWx1ZSkgPj0gMDtcbiAgICB9XG4gICAgZ2V0IGFsbFRydWUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvdW50Qml0cyh0cnVlKSA9PSB0aGlzLl9sZW5ndGg7XG4gICAgfVxuICAgIGdldCBhbGxGYWxzZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY291bnRCaXRzKGZhbHNlKSA9PSB0aGlzLl9sZW5ndGg7XG4gICAgfVxuICAgIGdldCBhbnlUcnVlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jb3VudEJpdHModHJ1ZSkgPiAwO1xuICAgIH1cbiAgICBnZXQgYW55RmFsc2UoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvdW50Qml0cyhmYWxzZSkgPiAwO1xuICAgIH1cbiAgICAvLy8gUmV0dXJucyB0aGUgcG9zaXRpb24gb2YgdGhlIG5leHQgYml0IG9mIHRoZSBzcGVjaWZpZWQgdmFsdWUsIHN0YXJ0aW5nIGZyb20gdGhlIHNwZWNpZmllZCBwb3NpdGlvbi5cbiAgICAvLy8gUmV0dXJucyAtMSwgaWYgdGhlcmUgYXJlIG5vIHN1Y2ggYml0cy5cbiAgICBmaW5kTmV4dChpbmRleCwgdmFsdWUgPSB0cnVlKSB7XG4gICAgICAgIHRoaXMuYXNzdXJlSW5SYW5nZShpbmRleCwgLTEsIHRoaXMuX2xlbmd0aCwgJ2luZGV4Jyk7XG4gICAgICAgIGlmIChpbmRleCA+PSB0aGlzLl9sZW5ndGggLSAxKVxuICAgICAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgICBpbmRleCA9IGluZGV4IDwgMCA/IDAgOiBpbmRleCArIDE7IC8vIHNraXAgc3RhcnRcbiAgICAgICAgbGV0IHVudXNlZEJpdHMgPSBpbmRleCAmIDB4MWY7XG4gICAgICAgIGNvbnN0IG51bUludHMgPSB0aGlzLmxlbmd0aEluSW50cztcbiAgICAgICAgZm9yIChsZXQgaSA9IE1hdGguZmxvb3IoaW5kZXggLyAzMik7IGkgPCBudW1JbnRzOyBpKyspIHtcbiAgICAgICAgICAgIGxldCBrID0gKHZhbHVlID8gdGhpcy5fZGF0YVtpXSA6IH50aGlzLl9kYXRhW2ldKTsgLy8gdWludCBjYXN0XG4gICAgICAgICAgICBpZiAodW51c2VkQml0cyAhPSAwKSB7XG4gICAgICAgICAgICAgICAgayAmPSAoKDB4ZmZmZmZmZmYgPDwgdW51c2VkQml0cykgJiAweGZmZmZmZmZmKTtcbiAgICAgICAgICAgICAgICB1bnVzZWRCaXRzID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKCF2YWx1ZSAmJiBrID09IC00Mjk0OTY3Mjk2KSAvKiBsb29raW5nIGZvciBmYWxzZSwgYWxsIGJpdHMgYXJlIHNldCAqLyB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmb3IgKGxldCBqID0gMDsgayAhPSAwOyBqICs9IDgsIGsgPj4+PSA4KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcCA9IEJpdEFycmF5Ll9maXJzdE9uQml0W2sgJiAweGZmXTtcbiAgICAgICAgICAgICAgICBpZiAocCA+PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGluZGV4ID0gcCArIChpICogMzIpICsgajtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGluZGV4ID49IHRoaXMuX2xlbmd0aClcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGluZGV4O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gLTE7XG4gICAgfVxuICAgIC8vLyBGaW5kcyBwcmV2aW91cyBiaXQgb2YgdGhlIHNwZWNpZmllZCB2YWx1ZSBpbiB0aGUgYml0c2V0LlxuICAgIGZpbmRQcmV2KGluZGV4LCB2YWx1ZSA9IHRydWUpIHtcbiAgICAgICAgaWYgKGluZGV4ID09IDApXG4gICAgICAgICAgICByZXR1cm4gLTE7XG4gICAgICAgIHRoaXMuYXNzdXJlSW5SYW5nZShpbmRleCwgLTEsIHRoaXMuX2xlbmd0aCwgJ2luZGV4Jyk7XG4gICAgICAgIGluZGV4ID0gaW5kZXggPCAwID8gdGhpcy5fbGVuZ3RoIC0gMSA6IGluZGV4IC0gMTsgLy8gc2tpcCBzdGFydFxuICAgICAgICBjb25zdCBsYXN0SW50SWR4ID0gTWF0aC5mbG9vcihpbmRleCAvIDB4MjApO1xuICAgICAgICBsZXQgcmVtYWluaW5nQml0cyA9IChpbmRleCArIDEpICYgMHgxZjtcbiAgICAgICAgZm9yIChsZXQgaSA9IGxhc3RJbnRJZHg7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgICBsZXQgayA9ICh2YWx1ZSA/IHRoaXMuX2RhdGFbaV0gOiB+dGhpcy5fZGF0YVtpXSk7IC8vIGNhc3RcbiAgICAgICAgICAgIGlmIChyZW1haW5pbmdCaXRzICE9IDApIHtcbiAgICAgICAgICAgICAgICBrICY9IH4oKDQyOTQ5NjcyOTUpIDw8IHJlbWFpbmluZ0JpdHMpO1xuICAgICAgICAgICAgICAgIHJlbWFpbmluZ0JpdHMgPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm9yIChsZXQgaiA9IDI0OyBrICE9IDA7IGogLT0gOCwgayA8PD0gOCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHAgPSBCaXRBcnJheS5fbGFzdE9uQml0W2sgPj4+IDB4MThdO1xuICAgICAgICAgICAgICAgIGlmIChwID49IDApXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBwICsgKGkgKiAzMikgKyBqO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiAtMTtcbiAgICB9XG59XG5CaXRBcnJheS5fb25CaXRDb3VudCA9IEludDhBcnJheS5mcm9tKFtcbiAgICAwLCAxLCAxLCAyLCAxLCAyLCAyLCAzLCAxLCAyLCAyLCAzLCAyLCAzLCAzLCA0LFxuICAgIDEsIDIsIDIsIDMsIDIsIDMsIDMsIDQsIDIsIDMsIDMsIDQsIDMsIDQsIDQsIDUsXG4gICAgMSwgMiwgMiwgMywgMiwgMywgMywgNCwgMiwgMywgMywgNCwgMywgNCwgNCwgNSxcbiAgICAyLCAzLCAzLCA0LCAzLCA0LCA0LCA1LCAzLCA0LCA0LCA1LCA0LCA1LCA1LCA2LFxuICAgIDEsIDIsIDIsIDMsIDIsIDMsIDMsIDQsIDIsIDMsIDMsIDQsIDMsIDQsIDQsIDUsXG4gICAgMiwgMywgMywgNCwgMywgNCwgNCwgNSwgMywgNCwgNCwgNSwgNCwgNSwgNSwgNixcbiAgICAyLCAzLCAzLCA0LCAzLCA0LCA0LCA1LCAzLCA0LCA0LCA1LCA0LCA1LCA1LCA2LFxuICAgIDMsIDQsIDQsIDUsIDQsIDUsIDUsIDYsIDQsIDUsIDUsIDYsIDUsIDYsIDYsIDcsXG4gICAgMSwgMiwgMiwgMywgMiwgMywgMywgNCwgMiwgMywgMywgNCwgMywgNCwgNCwgNSxcbiAgICAyLCAzLCAzLCA0LCAzLCA0LCA0LCA1LCAzLCA0LCA0LCA1LCA0LCA1LCA1LCA2LFxuICAgIDIsIDMsIDMsIDQsIDMsIDQsIDQsIDUsIDMsIDQsIDQsIDUsIDQsIDUsIDUsIDYsXG4gICAgMywgNCwgNCwgNSwgNCwgNSwgNSwgNiwgNCwgNSwgNSwgNiwgNSwgNiwgNiwgNyxcbiAgICAyLCAzLCAzLCA0LCAzLCA0LCA0LCA1LCAzLCA0LCA0LCA1LCA0LCA1LCA1LCA2LFxuICAgIDMsIDQsIDQsIDUsIDQsIDUsIDUsIDYsIDQsIDUsIDUsIDYsIDUsIDYsIDYsIDcsXG4gICAgMywgNCwgNCwgNSwgNCwgNSwgNSwgNiwgNCwgNSwgNSwgNiwgNSwgNiwgNiwgNyxcbiAgICA0LCA1LCA1LCA2LCA1LCA2LCA2LCA3LCA1LCA2LCA2LCA3LCA2LCA3LCA3LCA4XG5dKTtcbkJpdEFycmF5Ll9maXJzdE9uQml0ID0gSW50OEFycmF5LmZyb20oW1xuICAgIC0xLCAwLCAxLCAwLCAyLCAwLCAxLCAwLCAzLCAwLCAxLCAwLCAyLCAwLCAxLCAwLFxuICAgIDQsIDAsIDEsIDAsIDIsIDAsIDEsIDAsIDMsIDAsIDEsIDAsIDIsIDAsIDEsIDAsXG4gICAgNSwgMCwgMSwgMCwgMiwgMCwgMSwgMCwgMywgMCwgMSwgMCwgMiwgMCwgMSwgMCxcbiAgICA0LCAwLCAxLCAwLCAyLCAwLCAxLCAwLCAzLCAwLCAxLCAwLCAyLCAwLCAxLCAwLFxuICAgIDYsIDAsIDEsIDAsIDIsIDAsIDEsIDAsIDMsIDAsIDEsIDAsIDIsIDAsIDEsIDAsXG4gICAgNCwgMCwgMSwgMCwgMiwgMCwgMSwgMCwgMywgMCwgMSwgMCwgMiwgMCwgMSwgMCxcbiAgICA1LCAwLCAxLCAwLCAyLCAwLCAxLCAwLCAzLCAwLCAxLCAwLCAyLCAwLCAxLCAwLFxuICAgIDQsIDAsIDEsIDAsIDIsIDAsIDEsIDAsIDMsIDAsIDEsIDAsIDIsIDAsIDEsIDAsXG4gICAgNywgMCwgMSwgMCwgMiwgMCwgMSwgMCwgMywgMCwgMSwgMCwgMiwgMCwgMSwgMCxcbiAgICA0LCAwLCAxLCAwLCAyLCAwLCAxLCAwLCAzLCAwLCAxLCAwLCAyLCAwLCAxLCAwLFxuICAgIDUsIDAsIDEsIDAsIDIsIDAsIDEsIDAsIDMsIDAsIDEsIDAsIDIsIDAsIDEsIDAsXG4gICAgNCwgMCwgMSwgMCwgMiwgMCwgMSwgMCwgMywgMCwgMSwgMCwgMiwgMCwgMSwgMCxcbiAgICA2LCAwLCAxLCAwLCAyLCAwLCAxLCAwLCAzLCAwLCAxLCAwLCAyLCAwLCAxLCAwLFxuICAgIDQsIDAsIDEsIDAsIDIsIDAsIDEsIDAsIDMsIDAsIDEsIDAsIDIsIDAsIDEsIDAsXG4gICAgNSwgMCwgMSwgMCwgMiwgMCwgMSwgMCwgMywgMCwgMSwgMCwgMiwgMCwgMSwgMCxcbiAgICA0LCAwLCAxLCAwLCAyLCAwLCAxLCAwLCAzLCAwLCAxLCAwLCAyLCAwLCAxLCAwXG5dKTtcbkJpdEFycmF5Ll9sYXN0T25CaXQgPSBJbnQ4QXJyYXkuZnJvbShbXG4gICAgLTEsIDAsIDEsIDEsIDIsIDIsIDIsIDIsIDMsIDMsIDMsIDMsIDMsIDMsIDMsIDMsXG4gICAgNCwgNCwgNCwgNCwgNCwgNCwgNCwgNCwgNCwgNCwgNCwgNCwgNCwgNCwgNCwgNCxcbiAgICA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LFxuICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsXG4gICAgNiwgNiwgNiwgNiwgNiwgNiwgNiwgNiwgNiwgNiwgNiwgNiwgNiwgNiwgNiwgNixcbiAgICA2LCA2LCA2LCA2LCA2LCA2LCA2LCA2LCA2LCA2LCA2LCA2LCA2LCA2LCA2LCA2LFxuICAgIDYsIDYsIDYsIDYsIDYsIDYsIDYsIDYsIDYsIDYsIDYsIDYsIDYsIDYsIDYsIDYsXG4gICAgNiwgNiwgNiwgNiwgNiwgNiwgNiwgNiwgNiwgNiwgNiwgNiwgNiwgNiwgNiwgNixcbiAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LFxuICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsXG4gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNyxcbiAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LFxuICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsXG4gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNyxcbiAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LFxuICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDdcbl0pO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pWW1sMExXRnljbUY1TG1weklpd2ljMjkxY21ObFVtOXZkQ0k2SWlJc0luTnZkWEpqWlhNaU9sc2lZbWwwTFdGeWNtRjVMblJ6SWwwc0ltNWhiV1Z6SWpwYlhTd2liV0Z3Y0dsdVozTWlPaUpCUVVGQkxFMUJRVTBzUTBGQlF5eFBRVUZQTEU5QlFVOHNVVUZCVVR0SlFXOUZNMElzV1VGQldTeEhRVUY1UWl4RlFVRkZMR1ZCUVdsRExFdEJRVXM3VVVGYWNrVXNXVUZCVHl4SFFVRkhMRU5CUVVNc1EwRkJRenRSUVVOYUxHRkJRVkVzUjBGQlJ5eERRVUZETEVOQlFVTTdVVUZEWWl4cFFrRkJXU3hIUVVGSExFTkJRVU1zUTBGQlF6dFJRVU5xUWl4dFFrRkJZeXhIUVVGSExFTkJRVU1zUTBGQlF6dFJRVU51UWl3d1FrRkJjVUlzUjBGQlJ5eERRVUZETEVOQlFVTXNRMEZCUXp0UlFVTXpRaXcwUWtGQmRVSXNSMEZCUnl4RFFVRkRMRU5CUVVNc1EwRkJRenRSUVVNM1FpeHRRa0ZCWXl4SFFVRkhMRVZCUVVVc1EwRkJRenRSUVVOd1Fpd3dRa0ZCY1VJc1IwRkJSeXhEUVVGRExFTkJRVU1zUTBGQlF6dFJRVU51UXl4eFFrRkJaMElzUjBGQlJ5eExRVUZMTEVOQlFVTTdVVUZMZGtJc1NVRkJTU3hQUVVGUExFZEJRVWNzUzBGQlN5eFJRVUZSTEVWQlFVVTdXVUZETTBJc1RVRkJUU3hOUVVGTkxFZEJRVWNzUjBGQlJ5eERRVUZETzFsQlEyNUNMRTFCUVUwc1NVRkJTU3hIUVVGSExGRkJRVkVzUTBGQlF5eGhRVUZoTEVOQlFVTXNUVUZCVFN4RFFVRkRMRU5CUVVNN1dVRkROVU1zU1VGQlNTeFpRVUZaTEVWQlFVVTdaMEpCUTJoQ0xFdEJRVXNzU1VGQlNTeERRVUZETEVkQlFVY3NRMEZCUXl4RlFVRkZMRU5CUVVNc1IwRkJSeXhKUVVGSkxFTkJRVU1zVFVGQlRTeEZRVUZGTEVOQlFVTXNSVUZCUlR0dlFrRkRiRU1zU1VGQlNTeERRVUZETEVOQlFVTXNRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJReXhEUVVGRE8yRkJRMmhDTzFsQlEwUXNTVUZCU1N4RFFVRkRMRXRCUVVzc1IwRkJSeXhKUVVGSkxFTkJRVU03V1VGRGJFSXNTVUZCU1N4RFFVRkRMRTlCUVU4c1IwRkJSeXhOUVVGTkxFTkJRVU03VTBGRGRrSTdZVUZCVFN4SlFVRkpMRWRCUVVjc1dVRkJXU3hYUVVGWExFVkJRVVU3V1VGRGNrTXNTVUZCU1N4RFFVRkRMRXRCUVVzc1IwRkJSeXhIUVVGclFpeERRVUZETzFsQlEyaERMRWxCUVVrc1EwRkJReXhQUVVGUExFZEJRVWNzV1VGQmMwSXNRMEZCUXp0VFFVTjJRenRoUVVGTk8xbEJRMHdzVFVGQlRTeEpRVUZKTEV0QlFVc3NRMEZCUXl4eFFrRkJjVUlzUTBGQlF5eERRVUZETzFOQlEzaERPMGxCUTBnc1EwRkJRenRKUVVkRUxGVkJRVlVzUzBGQlN5eFBRVUZQTEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1EwRkJReXhEUVVGRE8wbEJSVzVETEZWQlFWVXNRMEZCUXl4SFFVRlhMRVZCUVVVc1QwRkJaVHRSUVVOeVF5eEpRVUZKTEVkQlFVY3NSMEZCUnl4RFFVRkRPMWxCUVVVc1RVRkJUU3hKUVVGSkxFdEJRVXNzUTBGQlF5eEhRVUZITEU5QlFVOHNPRUpCUVRoQ0xFTkJRVU1zUTBGQlF6dEpRVU42UlN4RFFVRkRPMGxCUlVRc1lVRkJZU3hEUVVGRExFdEJRV0VzUlVGQlJTeEhRVUZYTEVWQlFVVXNSMEZCVnl4RlFVRkZMRTlCUVdVN1VVRkRjRVVzU1VGQlNTeERRVUZETEV0QlFVc3NSMEZCUnl4SFFVRkhMRU5CUVVNc1NVRkJTU3hEUVVGRExFdEJRVXNzUjBGQlJ5eEhRVUZITEVOQlFVTTdXVUZEYUVNc1RVRkJUU3hKUVVGSkxFdEJRVXNzUTBGQlF5eFpRVUZaTEU5QlFVOHNTMEZCU3l4TFFVRkxMRzFDUVVGdFFpeEhRVUZITEV0QlFVc3NSMEZCUnl4SFFVRkhMRU5CUVVNc1EwRkJRenRKUVVOd1JpeERRVUZETzBsQlJVUXNTVUZCU1N4RFFVRkRMRWRCUVdkQ0xFVkJRVVVzUjBGQlowSXNSVUZCUlN4TFFVRmhPMUZCUTNCRUxFdEJRVXNzU1VGQlNTeERRVUZETEVkQlFVY3NRMEZCUXl4RlFVRkZMRU5CUVVNc1IwRkJSeXhMUVVGTExFVkJRVVVzUTBGQlF5eEZRVUZGTzFsQlF6VkNMRWRCUVVjc1EwRkJReXhEUVVGRExFTkJRVU1zUjBGQlJ5eEhRVUZITEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN1NVRkRjRUlzUTBGQlF6dEpRVVZFTEZGQlFWRXNRMEZCUXl4TFFVRmxPMUZCUTNSQ0xFbEJRVWtzU1VGQlNTeERRVUZETEU5QlFVOHNTVUZCU1N4TFFVRkxMRU5CUVVNc1QwRkJUenRaUVVNdlFpeE5RVUZOTEVsQlFVa3NTMEZCU3l4RFFVRkRMRzFDUVVGdFFpeEpRVUZKTEVOQlFVTXNUMEZCVHl4UFFVRlBMRXRCUVVzc1EwRkJReXhQUVVGUExFZEJRVWNzUTBGQlF5eERRVUZETzFGQlF6RkZMRWxCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEV0QlFVc3NSVUZCUlN4SlFVRkpMRU5CUVVNc1MwRkJTeXhGUVVGRkxFbEJRVWtzUTBGQlF5eFpRVUZaTEVOQlFVTXNRMEZCUXp0UlFVTjBSQ3hKUVVGSkxFTkJRVU1zVVVGQlVTeEZRVUZGTEVOQlFVTTdTVUZEYkVJc1EwRkJRenRKUVVWRUxFbEJRVWtzVFVGQlRUdFJRVU5TTEU5QlFVOHNTVUZCU1N4RFFVRkRMRTlCUVU4c1EwRkJRenRKUVVOMFFpeERRVUZETzBsQlJVUXNTVUZCU1N4TlFVRk5PMUZCUTFJc1QwRkJUeXhKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETzBsQlEzQkNMRU5CUVVNN1NVRkZSQ3hKUVVGSkxFMUJRVTBzUTBGQlF5eEpRVUZwUWp0UlFVTXhRaXhKUVVGSkxFTkJRVU1zUzBGQlN5eEhRVUZITEVsQlFVa3NRMEZCUXp0UlFVTnNRaXhKUVVGSkxFTkJRVU1zVVVGQlVTeEZRVUZGTEVOQlFVTTdTVUZEYkVJc1EwRkJRenRKUVVWRUxFbEJRVWtzVDBGQlR6dFJRVU5VTEU5QlFVOHNTVUZCU1N4RFFVRkRMRkZCUVZFc1EwRkJRenRKUVVOMlFpeERRVUZETzBsQlJVUXNTVUZCU1N4UFFVRlBMRU5CUVVNc1MwRkJZVHRSUVVOMlFpeEpRVUZKTEVOQlFVTXNVVUZCVVN4SFFVRkhMRXRCUVVzc1EwRkJRenRKUVVONFFpeERRVUZETzBsQlJVUXNaMEpCUVdkQ0xFTkJRVU1zVFVGQlRTeEhRVUZITEVsQlFVazdVVUZETlVJc1NVRkJTU3hEUVVGRExGRkJRVkVzUlVGQlJTeERRVUZETzBsQlEyeENMRU5CUVVNN1NVRkZSQ3hKUVVGSkxGbEJRVms3VVVGRFpDeFBRVUZQTEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1EwRkJReXhKUVVGSkxFTkJRVU1zVDBGQlR5eEhRVUZITEVsQlFVa3NRMEZCUXl4SFFVRkhMRWxCUVVrc1EwRkJReXhEUVVGRE8wbEJRMnhFTEVOQlFVTTdTVUZGUkN4SlFVRkpMR0ZCUVdFN1VVRkRaaXhQUVVGUExFbEJRVWtzUTBGQlF5eFJRVUZSTEVsQlFVa3NTVUZCU1N4RFFVRkRMSEZDUVVGeFFpeERRVUZETEVOQlFVTXNRMEZCUXl4SlFVRkpMRU5CUVVNc1kwRkJZeXhEUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZGTEVOQlFVTTdTVUZEYUVZc1EwRkJRenRKUVVWRUxFbEJRVWtzWVVGQllTeERRVUZETEVsQlFWazdVVUZETlVJc1NVRkJTU3hEUVVGRExHTkJRV01zUjBGQlJ5eEpRVUZKTEVOQlFVTTdVVUZETTBJc1NVRkJTU3hEUVVGRExIRkNRVUZ4UWl4SFFVRkhMRWxCUVVrc1EwRkJReXhSUVVGUkxFTkJRVU03U1VGRE4wTXNRMEZCUXp0SlFVVkVMRWxCUVVrc1NVRkJTVHRSUVVOT0xFOUJRVThzU1VGQlNTeERRVUZETzBsQlEyUXNRMEZCUXp0SlFVVkVMRk5CUVZNc1EwRkJReXhMUVVGaE8xRkJRM0pDTEVsQlFVa3NTMEZCU3l4SFFVRkhMRU5CUVVNN1dVRkRXQ3hOUVVGTkxFbEJRVWtzUzBGQlN5eERRVUZETEdkQ1FVRm5RaXhEUVVGRExFTkJRVU03VVVGRmNFTXNTVUZCU1N4TFFVRkxMRWxCUVVrc1NVRkJTU3hEUVVGRExFOUJRVTg3V1VGQlJTeFBRVUZQTzFGQlEyeERMRTFCUVUwc1YwRkJWeXhIUVVGSExFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNRMEZCUXl4TFFVRkxMRWRCUVVjc1NVRkJTU3hEUVVGRExFZEJRVWNzU1VGQlNTeERRVUZETEVOQlFVTTdVVUZEZEVRc1NVRkJTU3hEUVVGRExGZEJRVmNzUjBGQlJ5eEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRTFCUVUwc1EwRkJReXhKUVVGSkxFTkJRVU1zUTBGQlF5eFhRVUZYTEVkQlFVY3NTVUZCU1N4RFFVRkRMR2RDUVVGblFpeERRVUZETEVkQlFVY3NTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhOUVVGTkxFTkJRVU1zUlVGQlJUdFpRVU53Unl4TlFVRk5MRTlCUVU4c1IwRkJSeXhKUVVGSkxGZEJRVmNzUTBGQlF5eFhRVUZYTEVOQlFVTXNRMEZCUXp0WlFVTTNReXhKUVVGSkxFTkJRVU1zU1VGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4TFFVRkxMRVZCUVVVc1QwRkJUeXhGUVVGRkxFTkJRVU1zVjBGQlZ5eEhRVUZITEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1RVRkJUU3hEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1RVRkJUU3hEUVVGRExFTkJRVU1zUTBGQlF5eFhRVUZYTEVOQlFVTXNRMEZCUXp0WlFVTndSeXhKUVVGSkxFTkJRVU1zUzBGQlN5eEhRVUZITEU5QlFVOHNRMEZCUXp0VFFVTjBRanRSUVVWRUxFbEJRVWtzUzBGQlN5eEhRVUZITEVsQlFVa3NRMEZCUXl4UFFVRlBMRVZCUVVVN1dVRkRlRUlzU1VGQlNTeEpRVUZKTEVOQlFVTXNUMEZCVHl4SFFVRkhMRWxCUVVrc1IwRkJSeXhEUVVGRE8yZENRVU42UWl4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExFbEJRVWtzUTBGQlF5eFpRVUZaTEVkQlFVY3NRMEZCUXl4RFFVRkRMRWxCUVVrc1EwRkJReXhEUVVGRExFbEJRVWtzUTBGQlF5eERRVUZETEVsQlFVa3NRMEZCUXl4UFFVRlBMRWRCUVVjc1NVRkJTU3hEUVVGRExFZEJRVWNzU1VGQlNTeERRVUZETEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNN1dVRkZha1lzU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4SlFVRkpMRU5CUVVNc1EwRkJReXhGUVVGRkxFbEJRVWtzUTBGQlF5eFpRVUZaTEVWQlFVVXNWMEZCVnl4RFFVRkRMRU5CUVVNN1UwRkRjRVE3VVVGRFJDeEpRVUZKTEVOQlFVTXNUMEZCVHl4SFFVRkhMRXRCUVVzc1EwRkJRenRSUVVOeVFpeEpRVUZKTEVOQlFVTXNVVUZCVVN4RlFVRkZMRU5CUVVNN1NVRkRiRUlzUTBGQlF6dEpRVVZFTEUxQlFVMHNRMEZCUXl4UFFVRlBMRU5CUVVNc1NVRkJZeXhGUVVGRkxFbEJRV003VVVGRE0wTXNTVUZCU1N4SlFVRkpMRU5CUVVNc1QwRkJUeXhKUVVGSkxFbEJRVWtzUTBGQlF5eFBRVUZQTzFsQlF6bENMRTFCUVUwc1NVRkJTU3hMUVVGTExFTkJRVU1zYlVKQlFXMUNMRWxCUVVrc1EwRkJReXhQUVVGUExFOUJRVThzU1VGQlNTeERRVUZETEU5QlFVOHNSMEZCUnl4RFFVRkRMRU5CUVVNN1VVRkZla1VzVFVGQlRTeEpRVUZKTEVkQlFVY3NTVUZCU1N4UlFVRlJMRU5CUVVNc1NVRkJTU3hEUVVGRExFOUJRVThzUTBGQlF5eERRVUZETzFGQlEzaERMRWxCUVVrc1EwRkJReXhQUVVGUExFZEJRVWNzU1VGQlNTeERRVUZETEU5QlFVOHNRMEZCUXp0UlFVTTFRaXhKUVVGSkxFTkJRVU1zUzBGQlN5eEhRVUZITEZGQlFWRXNRMEZCUXl4aFFVRmhMRU5CUVVNc1NVRkJTU3hEUVVGRExFOUJRVThzUTBGQlF5eERRVUZETzFGQlEyeEVMRWxCUVVrc1EwRkJReXhSUVVGUkxFZEJRVWNzUTBGQlF5eERRVUZETzFGQlJXeENMRTFCUVUwc1IwRkJSeXhIUVVGSExFbEJRVWtzUTBGQlF5eFpRVUZaTEVOQlFVTTdVVUZET1VJc1MwRkJTeXhKUVVGSkxFTkJRVU1zUjBGQlJ5eERRVUZETEVWQlFVVXNRMEZCUXl4SFFVRkhMRWRCUVVjc1JVRkJSU3hEUVVGRExFVkJRVVU3V1VGRE1VSXNTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhEUVVGRExFTkJRVU1zUjBGQlJ5eEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRU5CUVVNc1EwRkJReXhIUVVGSExFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN1VVRkZhRVFzVDBGQlR5eEpRVUZKTEVOQlFVTTdTVUZEWkN4RFFVRkRPMGxCUlU4c1RVRkJUU3hEUVVGRExHRkJRV0VzUTBGQlF5eE5RVUZqTzFGQlEzcERMRTlCUVU4c1NVRkJTU3hYUVVGWExFTkJRVU1zU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4RFFVRkRMRTFCUVUwc1IwRkJSeXhKUVVGSkxFTkJRVU1zUjBGQlJ5eEpRVUZKTEVOQlFVTXNRMEZCUXl4RFFVRkRPMGxCUXpkRUxFTkJRVU03U1VGRlJDeE5RVUZOTEVOQlFVTXNWVUZCVlN4RFFVRkRMRTFCUVhOQ08xRkJRM1JETEUxQlFVMHNTVUZCU1N4SFFVRkhMRWxCUVVrc1VVRkJVU3hEUVVGRExFMUJRVTBzUTBGQlF5eE5RVUZOTEVOQlFVTXNRMEZCUXp0UlFVTjZReXhKUVVGSkxFTkJRVU1zVVVGQlVTeEhRVUZITEVOQlFVTXNRMEZCUXp0UlFVVnNRaXhMUVVGTExFbEJRVWtzUTBGQlF5eEhRVUZITEVOQlFVTXNSVUZCUlN4RFFVRkRMRWRCUVVjc1NVRkJTU3hEUVVGRExFOUJRVThzUlVGQlJTeERRVUZETEVWQlFVVXNSVUZCUlR0WlFVTnlReXhKUVVGSkxFMUJRVTBzUTBGQlF5eERRVUZETEVOQlFVTTdaMEpCUTFnc1NVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRU5CUVVNc1IwRkJSeXhKUVVGSkxFTkJRVU1zUTBGQlF5eEpRVUZKTEVOQlFVTXNTVUZCU1N4RFFVRkRMRU5CUVVNc1EwRkJReXhIUVVGSExFbEJRVWtzUTBGQlF5eEhRVUZITEVsQlFVa3NRMEZCUXl4RFFVRkRPMU5CUTJoRk8xRkJRMFFzVDBGQlR5eEpRVUZKTEVOQlFVTTdTVUZEWkN4RFFVRkRPMGxCUlVRc2MwZEJRWE5ITzBsQlEzUkhMRTFCUVUwc1EwRkJReXhQUVVGUExFTkJRVU1zUzBGQllTeEZRVUZGTEVsQlFXTTdVVUZETVVNc1RVRkJUU3hKUVVGSkxFZEJRVWNzU1VGQlNTeFJRVUZSTEVOQlFVTXNTMEZCU3l4RFFVRkRMRU5CUVVNN1VVRkRha01zUzBGQlN5eEpRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRVZCUVVVc1EwRkJReXhIUVVGSExFdEJRVXNzUlVGQlJTeEZRVUZGTEVOQlFVTTdXVUZETlVJc1NVRkJTU3hEUVVGRExFMUJRVTBzUTBGQlF5eERRVUZETEVWQlFVVXNTVUZCU1N4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU03VVVGRk1VSXNTVUZCU1N4RFFVRkRMRkZCUVZFc1IwRkJSeXhEUVVGRExFTkJRVU03VVVGRGJFSXNUMEZCVHl4SlFVRkpMRU5CUVVNN1NVRkRaQ3hEUVVGRE8wbEJSVVFzYTBWQlFXdEZPMGxCUTJ4RkxFMUJRVTBzUTBGQlF5eFZRVUZWTEVOQlFVTXNRMEZCVXp0UlFVTjZRaXhQUVVGUExGRkJRVkVzUTBGQlF5eFBRVUZQTEVOQlFVTXNRMEZCUXl4RFFVRkRMRTFCUVUwc1JVRkJSU3hEUVVGRExFTkJRVk1zUlVGQlJTeEZRVUZGTEVOQlFVTXNRMEZCUXl4RFFVRkRMRTFCUVUwc1EwRkJReXhEUVVGRExFTkJRVU1zU1VGQlNTeEhRVUZITEVOQlFVTXNRMEZCUXp0SlFVTjJSU3hEUVVGRE8wbEJSVVFzTkVWQlFUUkZPMGxCUXpWRkxFMUJRVTBzUTBGQlF5eGxRVUZsTEVOQlFVTXNUMEZCWlN4RlFVRkZMRXRCUVd0Q08xRkJRM2hFTEUxQlFVMHNTVUZCU1N4SFFVRkhMRWxCUVVrc1VVRkJVU3hEUVVGRExFOUJRVThzUTBGQlF5eERRVUZETzFGQlEyNURMRWxCUVVrc1EwRkJReXhMUVVGTExFZEJRVWNzUzBGQlN5eERRVUZETzFGQlEyNUNMRTlCUVU4c1NVRkJTU3hEUVVGRE8wbEJRMlFzUTBGQlF6dEpRVVZFTEhsRFFVRjVRenRKUVVONlF5eE5RVUZOTEVOQlFVTXNVMEZCVXl4RFFVRkRMRXRCUVdsQ08xRkJRMmhETEUxQlFVMHNSMEZCUnl4SFFVRkhMRXRCUVVzc1EwRkJReXhOUVVGTkxFTkJRVU03VVVGRGVrSXNUVUZCVFN4SlFVRkpMRWRCUVVjc1NVRkJTU3hSUVVGUkxFTkJRVU1zUjBGQlJ5eEhRVUZITEVOQlFVTXNRMEZCUXl4RFFVRkRPMUZCUTI1RExFbEJRVWtzUTBGQlF5eExRVUZMTEVkQlFVY3NTVUZCU1N4WFFVRlhMRU5CUVVNc1NVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eERRVUZETEVkQlFVY3NSMEZCUnl4RFFVRkRMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETzFGQlEzaEVMRWxCUVVrc1EwRkJReXhQUVVGUExFZEJRVWNzUjBGQlJ5eEhRVUZITEVOQlFVTXNRMEZCUXp0UlFVTjJRaXhKUVVGSkxFbEJRVWtzUjBGQlJ5eERRVUZETEVOQlFVTTdVVUZEWWl4SlFVRkpMRWxCUVVrc1IwRkJSeXhEUVVGRExFTkJRVU03VVVGRllpeFBRVUZQTEVOQlFVTXNSMEZCUnl4SFFVRkhMRWxCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU1zUlVGQlJUdFpRVU40UWl4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExFbEJRVWtzUlVGQlJTeERRVUZETEVkQlFVY3NRMEZEYmtJc1EwRkJReXhEUVVGRExFdEJRVXNzUTBGQlF5eEpRVUZKTEVOQlFVTXNSMEZCUnl4SlFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU1zUzBGQlN5eERRVUZETEVsQlFVa3NSMEZCUnl4RFFVRkRMRU5CUVVNc1IwRkJSeXhKUVVGSkxFTkJRVU1zU1VGQlNTeERRVUZETEVOQlFVTXNRMEZCUXp0blFrRkRlRVFzUTBGQlF5eERRVUZETEV0QlFVc3NRMEZCUXl4SlFVRkpMRWRCUVVjc1EwRkJReXhEUVVGRExFZEJRVWNzU1VGQlNTeERRVUZETEVsQlFVa3NTVUZCU1N4RFFVRkRMRU5CUTI1RExFZEJRVWNzUTBGQlF5eERRVUZETEV0QlFVc3NRMEZCUXl4SlFVRkpMRWRCUVVjc1EwRkJReXhEUVVGRExFZEJRVWNzU1VGQlNTeERRVUZETEVsQlFVa3NTVUZCU1N4RFFVRkRMRU5CUVVNN1dVRkZka01zU1VGQlNTeEpRVUZKTEVOQlFVTXNRMEZCUXp0VFFVTllPMUZCUlVRc1NVRkJTU3hIUVVGSExFZEJRVWNzU1VGQlNTeEpRVUZKTEVOQlFVTTdXVUZEYWtJc1NVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eEpRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRXRCUVVzc1EwRkJReXhKUVVGSkxFZEJRVWNzUTBGQlF5eERRVUZETEVkQlFVY3NTVUZCU1N4RFFVRkRMRWxCUVVrc1NVRkJTU3hEUVVGRE8xRkJSWFJFTEVsQlFVa3NSMEZCUnl4SFFVRkhMRWxCUVVrc1NVRkJTU3hEUVVGRE8xbEJRMnBDTEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1NVRkJTU3hEUVVGRExFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNTVUZCU1N4SFFVRkhMRU5CUVVNc1EwRkJReXhIUVVGSExFbEJRVWtzUTBGQlF5eEpRVUZKTEVOQlFVTXNRMEZCUXp0UlFVVndSQ3hKUVVGSkxFZEJRVWNzUjBGQlJ5eEpRVUZKTEVsQlFVa3NRMEZCUXp0WlFVTnFRaXhKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEVsQlFVa3NRMEZCUXl4SlFVRkpMRXRCUVVzc1EwRkJReXhKUVVGSkxFTkJRVU1zUjBGQlJ5eEpRVUZKTEVOQlFVTTdVVUZGZWtNc1NVRkJTU3hEUVVGRExGRkJRVkVzUjBGQlJ5eERRVUZETEVOQlFVTTdVVUZEYkVJc1QwRkJUeXhKUVVGSkxFTkJRVU03U1VGRFpDeERRVUZETzBsQlJVUXNVVUZCVVR0UlFVTk9MRTlCUVU4c1IwRkJSeXhKUVVGSkxFTkJRVU1zVDBGQlR5eFZRVUZWTEVsQlFVa3NRMEZCUXl4VFFVRlRMRU5CUVVNc1NVRkJTU3hEUVVGRExFMUJRVTBzUTBGQlF6dEpRVU0zUkN4RFFVRkRPMGxCUlVRc05FTkJRVFJETzBsQlF6VkRMRTFCUVUwc1EwRkJReXhMUVVGbE8xRkJRM0JDTEVsQlFVa3NTVUZCU1N4SlFVRkpMRXRCUVVzN1dVRkJSU3hQUVVGUExFbEJRVWtzUTBGQlF6dFJRVU12UWl4SlFVRkpMRXRCUVVzc1NVRkJTU3hKUVVGSk8xbEJRVVVzVDBGQlR5eExRVUZMTEVOQlFVTTdVVUZEYUVNc1NVRkJTU3hKUVVGSkxFTkJRVU1zVDBGQlR5eEpRVUZKTEV0QlFVc3NRMEZCUXl4UFFVRlBPMWxCUVVVc1QwRkJUeXhMUVVGTExFTkJRVU03VVVGRGFFUXNTVUZCU1N4SlFVRkpMRU5CUVVNc1QwRkJUeXhKUVVGSkxFTkJRVU03V1VGQlJTeFBRVUZQTEVsQlFVa3NRMEZCUXp0UlFVVnVReXhMUVVGTExFbEJRVWtzUTBGQlF5eEhRVUZITEVOQlFVTXNSVUZCUlN4RFFVRkRMRWRCUVVjc1NVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eE5RVUZOTEVkQlFVY3NRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSVHRaUVVNMVF5eEpRVUZKTEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1EwRkJReXhEUVVGRExFbEJRVWtzUzBGQlN5eERRVUZETEV0QlFVc3NRMEZCUXl4RFFVRkRMRU5CUVVNN1owSkJRVVVzVDBGQlR5eExRVUZMTEVOQlFVTTdVVUZGY0VRc1MwRkJTeXhKUVVGSkxFTkJRVU1zUjBGQlJ5eERRVUZETEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1RVRkJUU3hIUVVGSExFTkJRVU1zUTBGQlF5eEhRVUZITEVOQlFVTXNSVUZCUlN4RFFVRkRMRWRCUVVjc1NVRkJTU3hEUVVGRExFOUJRVThzUlVGQlJTeERRVUZETEVWQlFVVXNSVUZCUlR0WlFVTXZSQ3hKUVVGSkxFbEJRVWtzUTBGQlF5eE5RVUZOTEVOQlFVTXNRMEZCUXl4RFFVRkRMRWxCUVVrc1MwRkJTeXhEUVVGRExFMUJRVTBzUTBGQlF5eERRVUZETEVOQlFVTTdaMEpCUTI1RExFOUJRVThzUzBGQlN5eERRVUZETzFOQlEyaENPMUZCUTBRc1QwRkJUeXhKUVVGSkxFTkJRVU03U1VGRFpDeERRVUZETzBsQlJVUXNkVUpCUVhWQ08wbEJRM1pDTEV0QlFVczdVVUZEU0N4TlFVRk5MRkZCUVZFc1IwRkJSeXhKUVVGSkxGRkJRVkVzUTBGQlF5eERRVUZETEVWQlFVVXNTMEZCU3l4RFFVRkRMRU5CUVVNN1VVRkRlRU1zVVVGQlVTeERRVUZETEV0QlFVc3NSMEZCUnl4WFFVRlhMRU5CUVVNc1NVRkJTU3hEUVVGRExFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNRMEZCUXl4RFFVRkRMRzFEUVVGdFF6dFJRVU5zUml4UlFVRlJMRU5CUVVNc1QwRkJUeXhIUVVGSExFbEJRVWtzUTBGQlF5eFBRVUZQTEVOQlFVTTdVVUZEYUVNc1VVRkJVU3hEUVVGRExGRkJRVkVzUjBGQlJ5eEpRVUZKTEVOQlFVTXNVVUZCVVN4RFFVRkRPMUZCUTJ4RExFOUJRVThzVVVGQlVTeERRVUZETzBsQlEyeENMRU5CUVVNN1NVRkZSQ3cwUWtGQk5FSTdTVUZETlVJc1NVRkJTU3hEUVVGRExFbEJRV01zUlVGQlJTeE5RVUZsTzFGQlEyeERMRWxCUVVrc1EwRkJReXhOUVVGTkxFTkJRVU1zUzBGQlN5eEZRVUZGTEV0QlFVc3NRMEZCUXl4RFFVRkRPMUZCUlRGQ0xFdEJRVXNzU1VGQlNTeERRVUZETEVkQlFVY3NRMEZCUXl4RlFVRkZMRU5CUVVNc1IwRkJSeXhKUVVGSkxFTkJRVU1zVDBGQlR5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RlFVRkZPMWxCUTNKRExFbEJRVWtzU1VGQlNTeERRVUZETEVOQlFVTXNRMEZCUXp0blFrRkRWQ3hKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1EwRkJReXhIUVVGSExFbEJRVWtzUTBGQlF5eERRVUZETEVsQlFVa3NRMEZCUXl4SlFVRkpMRU5CUVVNc1EwRkJReXhEUVVGRExFZEJRVWNzU1VGQlNTeERRVUZETEVkQlFVY3NTVUZCU1N4RFFVRkRMRU5CUVVNN1UwRkRhRVU3VVVGRlJDeEpRVUZKTEVOQlFVTXNaMEpCUVdkQ0xFTkJRVU1zVFVGQlRTeERRVUZETEVOQlFVTTdVVUZET1VJc1QwRkJUeXhKUVVGSkxFTkJRVU03U1VGRFpDeERRVUZETzBsQlJVUXNjVUpCUVhGQ08wbEJRM0pDTEUxQlFVMHNRMEZCUXl4TlFVRk5MRWRCUVVjc1NVRkJTVHRSUVVOc1FpeExRVUZMTEVsQlFVa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1JVRkJSU3hEUVVGRExFZEJRVWNzU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4TlFVRk5MRVZCUVVVc1EwRkJReXhGUVVGRk8xbEJRM2hETEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1EwRkJReXhEUVVGRExFbEJRVWtzUTBGQlF5eERRVUZETEVOQlFVTTdVVUZGZEVJc1NVRkJTU3hEUVVGRExHZENRVUZuUWl4RFFVRkRMRTFCUVUwc1EwRkJReXhEUVVGRE8wbEJRMmhETEVOQlFVTTdTVUZGUkN4dFJVRkJiVVU3U1VGRGJrVXNUVUZCVFN4RFFVRkRMRXRCUVdNc1JVRkJSU3hOUVVGTkxFZEJRVWNzUzBGQlN6dFJRVU51UXl4TlFVRk5MRXRCUVVzc1IwRkJSeXhMUVVGTExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU03VVVGRE4wSXNUVUZCVFN4SFFVRkhMRWRCUVVjc1NVRkJTU3hEUVVGRExGbEJRVmtzUTBGQlF6dFJRVVU1UWl4TFFVRkxMRWxCUVVrc1EwRkJReXhIUVVGSExFTkJRVU1zUlVGQlJTeERRVUZETEVkQlFVY3NSMEZCUnl4RlFVRkZMRU5CUVVNc1JVRkJSU3hGUVVGRkxHZENRVUZuUWp0WlFVTTFReXhKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEVOQlFVTXNRMEZCUXl4SFFVRkhMRXRCUVVzc1EwRkJRenRSUVVWNFFpeEpRVUZKTEVOQlFVTXNaMEpCUVdkQ0xFTkJRVU1zVFVGQlRTeERRVUZETEVOQlFVTTdTVUZEYUVNc1EwRkJRenRKUVVWRUxDdERRVUVyUXp0SlFVTXZReXc0UTBGQk9FTTdTVUZET1VNc2QwUkJRWGRFTzBsQlEzaEVMRlZCUVZVc1EwRkJReXhQUVVGelFpeEZRVUZGTEV0QlFVc3NSMEZCUnl4SlFVRkpMRVZCUVVVc1MwRkJTeXhIUVVGSExFbEJRVWtzUlVGQlJTeE5RVUZOTEVkQlFVY3NTVUZCU1R0UlFVTXhSU3hKUVVGSkxFdEJRVXM3V1VGRFVDeEpRVUZKTEVOQlFVTXNUVUZCVFN4RFFVRkRMRU5CUVVNc1MwRkJTeXhGUVVGRkxFdEJRVXNzUTBGQlF5eERRVUZETzFGQlJUZENMRXRCUVVzc1RVRkJUU3hEUVVGRExFbEJRVWtzVDBGQlR6dFpRVU55UWl4SlFVRkpMRU5CUVVNc1QwRkJUeXhEUVVGRExFTkJRVU1zUlVGQlJTeExRVUZMTEVOQlFVTXNRMEZCUXp0UlFVVjZRaXhKUVVGSkxFTkJRVU1zWjBKQlFXZENMRU5CUVVNc1RVRkJUU3hEUVVGRExFTkJRVU03U1VGRGFFTXNRMEZCUXp0SlFVVkVMRlZCUVZVc1EwRkJReXhQUVVGelFpeEZRVUZGTEV0QlFVc3NSMEZCUnl4SlFVRkpPMUZCUXpkRExFdEJRVXNzVFVGQlRTeExRVUZMTEVsQlFVa3NUMEZCVHl4RlFVRkZPMWxCUXpOQ0xFbEJRVWtzU1VGQlNTeERRVUZETEUxQlFVMHNRMEZCUXl4TFFVRkxMRU5CUVVNc1NVRkJTU3hMUVVGTE8yZENRVU0zUWl4UFFVRlBMRXRCUVVzc1EwRkJRenRUUVVOb1FqdFJRVU5FTEU5QlFVOHNTVUZCU1N4RFFVRkRPMGxCUTJRc1EwRkJRenRKUVVWRUxGRkJRVkVzUTBGQlF5eFBRVUZ6UWl4RlFVRkZMRXRCUVVzc1IwRkJSeXhKUVVGSk8xRkJRek5ETEV0QlFVc3NUVUZCVFN4TFFVRkxMRWxCUVVrc1QwRkJUeXhGUVVGRk8xbEJRek5DTEVsQlFVa3NTVUZCU1N4RFFVRkRMRTFCUVUwc1EwRkJReXhMUVVGTExFTkJRVU1zU1VGQlNTeExRVUZMTzJkQ1FVTTNRaXhQUVVGUExFbEJRVWtzUTBGQlF6dFRRVU5tTzFGQlEwUXNUMEZCVHl4TFFVRkxMRU5CUVVNN1NVRkRaaXhEUVVGRE8wbEJSVVFzVVVGQlVTeERRVUZETEV0QlFXVXNSVUZCUlN4TFFVRkxMRWRCUVVjc1NVRkJTU3hGUVVGRkxFdEJRVXNzUjBGQlJ5eEpRVUZKTEVWQlFVVXNUVUZCVFN4SFFVRkhMRWxCUVVrc1JVRkJSU3hWUVVGVkxFZEJRVWNzU1VGQlNUdFJRVU53Uml4SlFVRkpMRXRCUVVzc1NVRkJTU3hWUVVGVk8xbEJRM0pDTEVsQlFVa3NRMEZCUXl4TlFVRk5MRU5CUVVNc1EwRkJReXhMUVVGTExFVkJRVVVzUzBGQlN5eERRVUZETEVOQlFVTTdVVUZGTjBJc1NVRkJTU3hWUVVGVkxFVkJRVVU3V1VGRFpDeExRVUZMTEVsQlFVa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1JVRkJSU3hEUVVGRExFZEJRVWNzU1VGQlNTeERRVUZETEU5QlFVOHNSVUZCUlN4RFFVRkRMRVZCUVVVc1JVRkJSVHRuUWtGRGNrTXNTVUZCU1N4TFFVRkxMRU5CUVVNc1EwRkJReXhEUVVGRE8yOUNRVU5XTEVsQlFVa3NRMEZCUXl4UFFVRlBMRU5CUVVNc1EwRkJReXhGUVVGRkxFdEJRVXNzUTBGQlF5eERRVUZETzJGQlF6RkNPMU5CUTBZN1lVRkJUVHRaUVVOTUxFdEJRVXNzU1VGQlNTeERRVUZETEVkQlFVY3NRMEZCUXl4RlFVRkZMRU5CUVVNc1IwRkJSeXhKUVVGSkxFTkJRVU1zVDBGQlR5eEZRVUZGTEVOQlFVTXNSVUZCUlR0blFrRkRia01zU1VGQlNTeERRVUZETEU5QlFVOHNRMEZCUXl4RFFVRkRMRVZCUVVVc1MwRkJTeXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4TFFVRkxMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUzBGQlN5eERRVUZETEVOQlFVTTdVMEZET1VNN1VVRkZSQ3hKUVVGSkxFTkJRVU1zWjBKQlFXZENMRU5CUVVNc1RVRkJUU3hEUVVGRExFTkJRVU03U1VGRGFFTXNRMEZCUXp0SlFVVkVMRkZCUVZFc1EwRkJReXhKUVVGWkxFVkJRVVVzUlVGQlZUdFJRVU12UWl4SlFVRkpMRU5CUVVNc1lVRkJZU3hEUVVGRExFbEJRVWtzUlVGQlJTeERRVUZETEVWQlFVVXNTVUZCU1N4RFFVRkRMRTlCUVU4c1IwRkJSeXhEUVVGRExFVkJRVVVzVFVGQlRTeERRVUZETEVOQlFVTTdVVUZEZEVRc1NVRkJTU3hEUVVGRExHRkJRV0VzUTBGQlF5eEZRVUZGTEVWQlFVVXNRMEZCUXl4RlFVRkZMRWxCUVVrc1EwRkJReXhQUVVGUExFVkJRVVVzU1VGQlNTeERRVUZETEVOQlFVTTdVVUZET1VNc1RVRkJUU3hIUVVGSExFZEJRVzFDTEVWQlFVVXNRMEZCUXp0UlFVTXZRaXhMUVVGTExFbEJRVWtzUTBGQlF5eEhRVUZITEVsQlFVa3NSVUZCUlN4RFFVRkRMRWRCUVVjc1JVRkJSU3hGUVVGRkxFVkJRVVVzUTBGQlF6dFpRVU0xUWl4SFFVRkhMRU5CUVVNc1NVRkJTU3hEUVVGRExFbEJRVWtzUTBGQlF5eE5RVUZOTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJRenRSUVVNelFpeFBRVUZQTEZGQlFWRXNRMEZCUXl4VlFVRlZMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU03U1VGRGJFTXNRMEZCUXp0SlFVVkVMR05CUVdNc1EwRkJReXhKUVVGWkxFVkJRVVVzUlVGQlZUdFJRVU55UXl4SlFVRkpMRU5CUVVNc1lVRkJZU3hEUVVGRExFbEJRVWtzUlVGQlJTeERRVUZETEVWQlFVVXNTVUZCU1N4RFFVRkRMRTlCUVU4c1IwRkJSeXhEUVVGRExFVkJRVVVzVFVGQlRTeERRVUZETEVOQlFVTTdVVUZEZEVRc1NVRkJTU3hEUVVGRExHRkJRV0VzUTBGQlF5eEZRVUZGTEVWQlFVVXNRMEZCUXl4RlFVRkZMRWxCUVVrc1EwRkJReXhQUVVGUExFVkJRVVVzU1VGQlNTeERRVUZETEVOQlFVTTdVVUZET1VNc1RVRkJUU3hIUVVGSExFZEJRV01zUlVGQlJTeERRVUZETzFGQlF6RkNMRXRCUVVzc1NVRkJTU3hEUVVGRExFZEJRVWNzU1VGQlNTeEZRVUZGTEVOQlFVTXNSMEZCUnl4RlFVRkZMRVZCUVVVc1JVRkJSU3hEUVVGRE8xbEJRelZDTEVkQlFVY3NRMEZCUXl4SlFVRkpMRU5CUVVNc1NVRkJTU3hEUVVGRExFMUJRVTBzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRPMUZCUXpOQ0xFOUJRVThzUjBGQlJ5eERRVUZETzBsQlEySXNRMEZCUXp0SlFVZEVMRkZCUVZFc1EwRkJReXhKUVVGWkxFVkJRVVVzUlVGQlZTeEZRVUZGTEV0QlFXTXNSVUZCUlN4TlFVRk5MRWRCUVVjc1NVRkJTVHRSUVVNNVJDeEpRVUZKTEVOQlFVTXNZVUZCWVN4RFFVRkRMRWxCUVVrc1JVRkJSU3hEUVVGRExFVkJRVVVzU1VGQlNTeERRVUZETEU5QlFVOHNSMEZCUnl4RFFVRkRMRVZCUVVVc1RVRkJUU3hEUVVGRExFTkJRVU03VVVGRGRFUXNTVUZCU1N4RFFVRkRMR0ZCUVdFc1EwRkJReXhGUVVGRkxFVkJRVVVzUTBGQlF5eEZRVUZGTEVsQlFVa3NRMEZCUXl4UFFVRlBMRWRCUVVjc1EwRkJReXhGUVVGRkxFbEJRVWtzUTBGQlF5eERRVUZETzFGQlJXeEVMRTFCUVUwc1MwRkJTeXhIUVVGSExFbEJRVWtzUTBGQlF5eEhRVUZITEVOQlFVTXNTVUZCU1N4RlFVRkZMRVZCUVVVc1EwRkJReXhEUVVGRE8xRkJRMnBETEUxQlFVMHNSMEZCUnl4SFFVRkhMRWxCUVVrc1EwRkJReXhIUVVGSExFTkJRVU1zU1VGQlNTeEZRVUZGTEVWQlFVVXNRMEZCUXl4RFFVRkRPMUZCUlM5Q0xHZENRVUZuUWp0UlFVTm9RaXhKUVVGSkxFdEJRVXNzUlVGQlJUdFpRVU5VTEV0QlFVc3NTVUZCU1N4RFFVRkRMRWRCUVVjc1MwRkJTeXhGUVVGRkxFTkJRVU1zU1VGQlNTeEhRVUZITEVWQlFVVXNRMEZCUXl4RlFVRkZPMmRDUVVNdlFpeEpRVUZKTEVOQlFVTXNUMEZCVHl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE8xTkJRMjVDTzJGQlFVMDdXVUZEVEN4TFFVRkxMRWxCUVVrc1EwRkJReXhIUVVGSExFdEJRVXNzUlVGQlJTeERRVUZETEVsQlFVa3NSMEZCUnl4RlFVRkZMRU5CUVVNc1JVRkJSVHRuUWtGREwwSXNTVUZCU1N4RFFVRkRMRkZCUVZFc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF6dFRRVU53UWp0UlFVVkVMRWxCUVVrc1EwRkJReXhuUWtGQlowSXNRMEZCUXl4TlFVRk5MRU5CUVVNc1EwRkJRenRSUVVNNVFpeFBRVUZQTEVsQlFVa3NRMEZCUXp0SlFVTmtMRU5CUVVNN1NVRkZSQ3h0UlVGQmJVVTdTVUZEYmtVc1UwRkJVeXhEUVVGRExFTkJRVk1zUlVGQlJTeExRVUZqTEVWQlFVVXNUVUZCVFN4SFFVRkhMRWxCUVVrN1VVRkRhRVFzU1VGQlNTeERRVUZETEVkQlFVY3NRMEZCUXl4SlFVRkpMRU5CUVVNc1IwRkJSeXhKUVVGSkxFTkJRVU1zVDBGQlR6dFpRVU16UWl4TlFVRk5MRWxCUVVrc1MwRkJTeXhEUVVGRExEUkNRVUUwUWl4RFFVRkRMRU5CUVVNN1VVRkZhRVFzU1VGQlNTeERRVUZETEVkQlFVY3NTVUZCU1N4RFFVRkRMRTlCUVU4c1IwRkJSeXhEUVVGRE8xbEJRM1JDTEVsQlFVa3NRMEZCUXl4VFFVRlRMRU5CUVVNc1NVRkJTU3hEUVVGRExFOUJRVThzUjBGQlJ5eERRVUZETEVWQlFVVXNRMEZCUXl4TFFVRkxMRU5CUVVNc1EwRkJRenRSUVVVelF5eEpRVUZKTEVOQlFVTXNUVUZCVFN4RFFVRkRMRU5CUVVNc1MwRkJTeXhEUVVGRExFTkJRVU03VVVGRmNFSXNTMEZCU3l4SlFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExFVkJRVVVzUTBGQlF5eEhRVUZITEVOQlFVTXNSMEZCUnp0WlFVTjBRaXhOUVVGTkxFTkJRVU1zUjBGQlJ5eEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRWxCUVVrc1EwRkJReXhOUVVGTkxFVkJRVVVzUjBGQlJ5eEpRVUZKTEVOQlFVTXNUMEZCVHl4RFFVRkRMRU5CUVVNN1dVRkRia1FzU1VGQlNTeEpRVUZKTEVOQlFVTXNUVUZCVFN4RFFVRkRMRU5CUVVNc1EwRkJReXhKUVVGSkxFdEJRVXM3WjBKQlFVVXNVMEZCVXp0WlFVTjBReXhKUVVGSkxFTkJRVU1zVDBGQlR5eERRVUZETEVOQlFVTXNSVUZCUlN4TFFVRkxMRU5CUVVNc1EwRkJRenRaUVVOMlFpeERRVUZETEVWQlFVVXNRMEZCUXp0VFFVTk1PMUZCUlVRc1NVRkJTU3hEUVVGRExHZENRVUZuUWl4RFFVRkRMRTFCUVUwc1EwRkJReXhEUVVGRE8wbEJRMmhETEVOQlFVTTdTVUZGUkN3clJVRkJLMFU3U1VGREwwVXNiVVJCUVcxRU8wbEJRMjVFTEVkQlFVY3NRMEZCUXl4TFFVRmxMRVZCUVVVc1RVRkJUU3hIUVVGSExFbEJRVWs3VVVGRGFFTXNTVUZCU1N4SlFVRkpMRU5CUVVNc1QwRkJUeXhKUVVGSkxFdEJRVXNzUTBGQlF5eFBRVUZQTzFsQlF5OUNMRTFCUVUwc1NVRkJTU3hMUVVGTExFTkJRVU1zZFVKQlFYVkNMRU5CUVVNc1EwRkJRenRSUVVVelF5eExRVUZMTEVsQlFVa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1JVRkJSU3hIUVVGSExFZEJRVWNzU1VGQlNTeERRVUZETEZsQlFWa3NSVUZCUlN4RFFVRkRMRWRCUVVjc1IwRkJSeXhGUVVGRkxFTkJRVU1zUlVGQlJUdFpRVU51UkN4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExFTkJRVU1zUTBGQlF5eEpRVUZKTEV0QlFVc3NRMEZCUXl4TFFVRkxMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU03VVVGRmJFTXNTVUZCU1N4RFFVRkRMR2RDUVVGblFpeERRVUZETEUxQlFVMHNRMEZCUXl4RFFVRkRPMUZCUXpsQ0xFOUJRVThzU1VGQlNTeERRVUZETzBsQlEyUXNRMEZCUXp0SlFVVkVMR2RHUVVGblJqdEpRVU5vUml3clJFRkJLMFE3U1VGREwwUXNUVUZCVFN4RFFVRkRMRXRCUVdVc1JVRkJSU3hOUVVGTkxFZEJRVWNzU1VGQlNUdFJRVU51UXl4SlFVRkpMRWxCUVVrc1EwRkJReXhQUVVGUExFbEJRVWtzUzBGQlN5eERRVUZETEU5QlFVODdXVUZETDBJc1RVRkJUU3hKUVVGSkxFdEJRVXNzUTBGQlF5eDFRa0ZCZFVJc1EwRkJReXhEUVVGRE8xRkJSVE5ETEUxQlFVMHNSMEZCUnl4SFFVRkhMRWxCUVVrc1EwRkJReXhaUVVGWkxFTkJRVU03VVVGRE9VSXNTMEZCU3l4SlFVRkpMRWxCUVVrc1IwRkJSeXhEUVVGRExFVkJRVVVzU1VGQlNTeEhRVUZITEVkQlFVY3NSVUZCUlN4SlFVRkpMRVZCUVVVN1dVRkRia01zU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4SlFVRkpMRU5CUVVNc1NVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eExRVUZMTEVOQlFVTXNTVUZCU1N4RFFVRkRMRU5CUVVNN1VVRkZla01zU1VGQlNTeERRVUZETEdkQ1FVRm5RaXhEUVVGRExFMUJRVTBzUTBGQlF5eERRVUZETzFGQlF6bENMRTlCUVU4c1NVRkJTU3hEUVVGRE8wbEJRMlFzUTBGQlF6dEpRVVZFTEdkR1FVRm5SanRKUVVOb1Jpd3JSRUZCSzBRN1NVRkRMMFFzVFVGQlRTeERRVUZETEV0QlFXVXNSVUZCUlN4TlFVRk5MRWRCUVVjc1NVRkJTVHRSUVVOdVF5eEpRVUZKTEVsQlFVa3NRMEZCUXl4UFFVRlBMRWxCUVVrc1MwRkJTeXhEUVVGRExFOUJRVTg3V1VGREwwSXNUVUZCVFN4SlFVRkpMRXRCUVVzc1EwRkJReXgxUWtGQmRVSXNRMEZCUXl4RFFVRkRPMUZCUlRORExFdEJRVXNzU1VGQlNTeERRVUZETEVkQlFVY3NRMEZCUXl4RlFVRkZMRWRCUVVjc1IwRkJSeXhKUVVGSkxFTkJRVU1zV1VGQldTeEZRVUZGTEVOQlFVTXNSMEZCUnl4SFFVRkhMRVZCUVVVc1EwRkJReXhGUVVGRk8xbEJRMjVFTEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1EwRkJReXhEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUjBGQlJ5eExRVUZMTEVOQlFVTXNTMEZCU3l4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE8xRkJSWEJFTEVsQlFVa3NRMEZCUXl4blFrRkJaMElzUTBGQlF5eE5RVUZOTEVOQlFVTXNRMEZCUXp0UlFVTTVRaXhQUVVGUExFbEJRVWtzUTBGQlF6dEpRVU5rTEVOQlFVTTdTVUZGUkN4blJFRkJaMFE3U1VGRGFFUXNSMEZCUnl4RFFVRkRMRTFCUVUwc1IwRkJSeXhKUVVGSk8xRkJRMllzUzBGQlN5eEpRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRVZCUVVVc1IwRkJSeXhIUVVGSExFbEJRVWtzUTBGQlF5eFpRVUZaTEVWQlFVVXNRMEZCUXl4SFFVRkhMRWRCUVVjc1JVRkJSU3hEUVVGRExFVkJRVVU3V1VGRGJrUXNTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhEUVVGRExFTkJRVU1zUjBGQlJ5eERRVUZETEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU03VVVGRmFrTXNTVUZCU1N4RFFVRkRMR2RDUVVGblFpeERRVUZETEUxQlFVMHNRMEZCUXl4RFFVRkRPMUZCUXpsQ0xFOUJRVThzU1VGQlNTeERRVUZETzBsQlEyUXNRMEZCUXp0SlFVVkVMREpGUVVFeVJUdEpRVU16UlN3clJFRkJLMFE3U1VGREwwUXNSVUZCUlN4RFFVRkRMRXRCUVdVc1JVRkJSU3hOUVVGTkxFZEJRVWNzU1VGQlNUdFJRVU12UWl4SlFVRkpMRWxCUVVrc1EwRkJReXhQUVVGUExFbEJRVWtzUzBGQlN5eERRVUZETEU5QlFVODdXVUZETDBJc1RVRkJUU3hKUVVGSkxFdEJRVXNzUTBGQlF5eDFRa0ZCZFVJc1EwRkJReXhEUVVGRE8xRkJSVE5ETEV0QlFVc3NTVUZCU1N4RFFVRkRMRWRCUVVjc1EwRkJReXhGUVVGRkxFZEJRVWNzUjBGQlJ5eEpRVUZKTEVOQlFVTXNXVUZCV1N4RlFVRkZMRU5CUVVNc1IwRkJSeXhIUVVGSExFVkJRVVVzUTBGQlF5eEZRVUZGTzFsQlEyNUVMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zUTBGQlF5eERRVUZETEVsQlFVa3NTMEZCU3l4RFFVRkRMRXRCUVVzc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF6dFJRVVZzUXl4SlFVRkpMRU5CUVVNc1owSkJRV2RDTEVOQlFVTXNUVUZCVFN4RFFVRkRMRU5CUVVNN1VVRkRPVUlzVDBGQlR5eEpRVUZKTEVOQlFVTTdTVUZEWkN4RFFVRkRPMGxCUlVRc2NVWkJRWEZHTzBsQlEzSkdMQ3RFUVVFclJEdEpRVU12UkN4SFFVRkhMRU5CUVVNc1MwRkJaU3hGUVVGRkxFMUJRVTBzUjBGQlJ5eEpRVUZKTzFGQlEyaERMRWxCUVVrc1NVRkJTU3hEUVVGRExFOUJRVThzU1VGQlNTeExRVUZMTEVOQlFVTXNUMEZCVHp0WlFVTXZRaXhOUVVGTkxFbEJRVWtzUzBGQlN5eERRVUZETEhWQ1FVRjFRaXhEUVVGRExFTkJRVU03VVVGRk0wTXNTMEZCU3l4SlFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExFVkJRVVVzUjBGQlJ5eEhRVUZITEVsQlFVa3NRMEZCUXl4WlFVRlpMRVZCUVVVc1EwRkJReXhIUVVGSExFZEJRVWNzUlVGQlJTeERRVUZETEVWQlFVVTdXVUZEYmtRc1NVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eERRVUZETEVOQlFVTXNTVUZCU1N4TFFVRkxMRU5CUVVNc1MwRkJTeXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETzFGQlJXeERMRWxCUVVrc1EwRkJReXhuUWtGQlowSXNRMEZCUXl4TlFVRk5MRU5CUVVNc1EwRkJRenRSUVVNNVFpeFBRVUZQTEVsQlFVa3NRMEZCUXp0SlFVTmtMRU5CUVVNN1NVRkZSQ3h2UmtGQmIwWTdTVUZEY0VZc1VVRkJVU3hEUVVGRExFZEJRVmNzUlVGQlJTeERRVUZUTEVWQlFVVXNTVUZCU1N4SFFVRkhMRXRCUVVzN1VVRkRNME1zU1VGQlNTeERRVUZETEdGQlFXRXNRMEZCUXl4SFFVRkhMRVZCUVVVc1EwRkJReXhGUVVGRkxFbEJRVWtzUTBGQlF5eFBRVUZQTEVWQlFVVXNTMEZCU3l4RFFVRkRMRU5CUVVNN1VVRkZhRVFzU1VGQlNTeERRVUZETEVsQlFVa3NRMEZCUXp0WlFVRkZMRTlCUVU4N1VVRkZia0lzWjBKQlFXZENPMUZCUTJoQ0xIVkVRVUYxUkR0UlFVVjJSQ3hwUWtGQmFVSTdVVUZEYWtJc1RVRkJUU3hUUVVGVExFZEJRVWNzU1VGQlNTeERRVUZETEU5QlFVOHNRMEZCUXp0UlFVTXZRaXhKUVVGSkxFTkJRVU1zVTBGQlV5eERRVUZETEVsQlFVa3NRMEZCUXl4UFFVRlBMRWRCUVVjc1EwRkJReXhEUVVGRExFTkJRVU03VVVGRmFrTXNaMFJCUVdkRU8xRkJSV2hFTEV0QlFVc3NTVUZCU1N4RFFVRkRMRWRCUVVjc1UwRkJVeXhIUVVGSExFTkJRVU1zUlVGQlJTeERRVUZETEVsQlFVa3NSMEZCUnl4RlFVRkZMRU5CUVVNc1JVRkJSVHRaUVVOMlF5eEpRVUZKTEVOQlFVTXNUVUZCVFN4RFFVRkRMRU5CUVVNc1IwRkJSeXhEUVVGRExFVkJRVVVzU1VGQlNTeERRVUZETEUxQlFVMHNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE8xRkJSWEpETEV0QlFVc3NTVUZCU1N4RFFVRkRMRWRCUVVjc1IwRkJSeXhGUVVGRkxFTkJRVU1zUjBGQlJ5eEhRVUZITEVkQlFVY3NRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSVHRaUVVOb1F5eEpRVUZKTEVOQlFVTXNUVUZCVFN4RFFVRkRMRU5CUVVNc1JVRkJSU3hKUVVGSkxFTkJRVU1zUTBGQlF6dFJRVVYyUWl4bFFVRmxPMGxCUTJwQ0xFTkJRVU03U1VGRlJDeHJSa0ZCYTBZN1NVRkRiRVlzZFVKQlFYVkNPMGxCUTNaQ0xGRkJRVkVzUTBGQlF5eEhRVUZYTEVWQlFVVXNRMEZCUXl4SFFVRkhMRU5CUVVNN1VVRkRla0lzZDBSQlFYZEVPMUZCUTNoRUxFbEJRVWtzUTBGQlF5eEhRVUZITEVOQlFVTTdXVUZEVUN4TlFVRk5MRWxCUVVrc1MwRkJTeXhEUVVGRExITkNRVUZ6UWl4RFFVRkRMRU5CUVVNN1VVRkZNVU1zU1VGQlNTeERRVUZETEdGQlFXRXNRMEZCUXl4SFFVRkhMRVZCUVVVc1EwRkJReXhGUVVGRkxFbEJRVWtzUTBGQlF5eFBRVUZQTEVkQlFVY3NRMEZCUXl4RlFVRkZMRXRCUVVzc1EwRkJReXhEUVVGRE8xRkJSWEJFTEVsQlFVa3NTVUZCU1N4RFFVRkRMRkZCUVZFc1EwRkJReXhKUVVGSkxFTkJRVU1zUlVGQlJUdFpRVU4yUWl4TFFVRkxMRWxCUVVrc1EwRkJReXhIUVVGSExFZEJRVWNzUlVGQlJTeERRVUZETEVkQlFVY3NTVUZCU1N4RFFVRkRMRTlCUVU4c1IwRkJSeXhEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTzJkQ1FVTjZReXhKUVVGSkxFTkJRVU1zVFVGQlRTeERRVUZETEVOQlFVTXNSVUZCUlN4SlFVRkpMRU5CUVVNc1RVRkJUU3hEUVVGRExFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRPMU5CUTNSRE8xRkJSVVFzU1VGQlNTeERRVUZETEZOQlFWTXNRMEZCUXl4SlFVRkpMRU5CUVVNc1QwRkJUeXhIUVVGSExFTkJRVU1zUTBGQlF5eERRVUZETzBsQlEyNURMRU5CUVVNN1NVRkZSQ3haUVVGWkxFTkJRVU1zU1VGQll5eEZRVUZGTEVsQlFVa3NSMEZCUnl4SlFVRkpPMUZCUTNSRExFbEJRVWtzU1VGQlNTeERRVUZETEU5QlFVOHNTVUZCU1N4SlFVRkpMRU5CUVVNc1RVRkJUVHRaUVVNM1FpeE5RVUZOTEVsQlFVa3NTMEZCU3l4RFFVRkRMSFZDUVVGMVFpeERRVUZETEVOQlFVTTdVVUZGTTBNc1NVRkJTU3hKUVVGSkxFbEJRVWtzU1VGQlNTeEZRVUZGTEVWQlFVVXNjVUpCUVhGQ08xbEJRM1pETEVsQlFVa3NRMEZCUXl4VFFVRlRMRU5CUVVNc1NVRkJTU3hEUVVGRExGTkJRVk1zUTBGQlF5eERRVUZETEVsQlFVa3NRMEZCUXl4RFFVRkRMRU5CUVVNN1dVRkRkRU1zU1VGQlNTeERRVUZETEUxQlFVMHNRMEZCUXl4RFFVRkRMRWxCUVVrc1EwRkJReXhEUVVGRE8xTkJRM0JDTzJGQlFVMDdXVUZEVEN4SlFVRkpMRTFCUVUwc1IwRkJSeXhEUVVGRExFTkJRVU03V1VGRlppeExRVUZMTEVsQlFVa3NUVUZCVFN4SFFVRkhMRU5CUVVNc1EwRkJReXhGUVVGRkxFTkJRVU1zVFVGQlRTeEhRVUZITEVsQlFVa3NRMEZCUXl4UlFVRlJMRU5CUVVNc1RVRkJUU3hGUVVGRkxFTkJRVU1zU1VGQlNTeERRVUZETEVOQlFVTXNTVUZCU1N4RFFVRkRMRU5CUVVNN1owSkJRMnBGTEVsQlFVa3NRMEZCUXl4UFFVRlBMRU5CUVVNc1RVRkJUU3hGUVVGRkxFVkJRVVVzU1VGQlNTeERRVUZETEUxQlFVMHNRMEZCUXl4TlFVRk5MRU5CUVVNc1EwRkJReXhEUVVGRE8xbEJSVGxETEVsQlFVa3NRMEZCUXl4UFFVRlBMRWRCUVVjc1RVRkJUU3hEUVVGRE8xbEJRM1JDTEVsQlFVa3NRMEZCUXl4UlFVRlJMRVZCUVVVc1EwRkJRenRUUVVOcVFqdFJRVVZFTEU5QlFVOHNTVUZCU1N4RFFVRkRPMGxCUTJRc1EwRkJRenRKUVVWRUxDdENRVUVyUWp0SlFVTXZRaXhOUVVGTkxFTkJRVU1zUjBGQlZ6dFJRVU5vUWl4UFFVRlBMRU5CUVVNc1NVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRWRCUVVjc1IwRkJSeXhKUVVGSkxFTkJRVU1zUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXl4SlFVRkpMRU5CUVVNc1IwRkJSeXhIUVVGSExFbEJRVWtzUTBGQlF5eERRVUZETEVOQlFVTXNTVUZCU1N4RFFVRkRMRU5CUVVNN1NVRkRla1VzUTBGQlF6dEpRVVZFTEN0Q1FVRXJRanRKUVVNdlFpeE5RVUZOTEVOQlFVTXNSMEZCVnl4RlFVRkZMRWRCUVZrc1JVRkJSU3hOUVVGTkxFZEJRVWNzU1VGQlNUdFJRVU0zUXl4SlFVRkpMRU5CUVVNc1QwRkJUeXhEUVVGRExFZEJRVWNzUlVGQlJTeEhRVUZITEVOQlFVTXNRMEZCUXp0UlFVTjJRaXhKUVVGSkxFMUJRVTA3V1VGRFVpeEpRVUZKTEVOQlFVTXNVVUZCVVN4RlFVRkZMRU5CUVVNN08xbEJSV2hDTEVsQlFVa3NRMEZCUXl4UlFVRlJMRVZCUVVVc1EwRkJRenRKUVVOd1FpeERRVUZETzBsQlJVUXNhVVpCUVdsR08wbEJRMnBHTEU5QlFVOHNRMEZCUXl4RFFVRlRMRVZCUVVVc1MwRkJZenRSUVVNdlFpeEpRVUZKTEV0QlFVczdXVUZEVUN4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNRMEZCUXl4SFFVRkhMRWxCUVVrc1EwRkJReXhEUVVGRExFbEJRVWtzUTBGQlF5eEpRVUZKTEVOQlFVTXNRMEZCUXl4SFFVRkhMRWxCUVVrc1EwRkJReXhEUVVGRE96dFpRVVZ3UkN4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNRMEZCUXl4SFFVRkhMRWxCUVVrc1EwRkJReXhEUVVGRExFbEJRVWtzUTBGQlF5eERRVUZETEVOQlFVTXNTVUZCU1N4RFFVRkRMRU5CUVVNc1IwRkJSeXhKUVVGSkxFTkJRVU1zUTBGQlF5eERRVUZETzBsQlF6TkVMRU5CUVVNN1NVRkZSQ3hQUVVGUExFTkJRVU1zUjBGQlZ6dFJRVU5xUWl4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNSMEZCUnl4SFFVRkhMRWxCUVVrc1EwRkJReXhEUVVGRExFbEJRVWtzUTBGQlF5eEpRVUZKTEVOQlFVTXNSMEZCUnl4SFFVRkhMRWxCUVVrc1EwRkJReXhEUVVGRE8wbEJRekZFTEVOQlFVTTdTVUZGUkN4UlFVRlJMRU5CUVVNc1IwRkJWenRSUVVOc1FpeEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zUjBGQlJ5eEhRVUZITEVsQlFVa3NRMEZCUXl4RFFVRkRMRWxCUVVrc1EwRkJReXhEUVVGRExFTkJRVU1zU1VGQlNTeERRVUZETEVkQlFVY3NSMEZCUnl4SlFVRkpMRU5CUVVNc1EwRkJReXhEUVVGRE8wbEJRemRFTEVOQlFVTTdTVUZGUkN4VFFVRlRPMUZCUTFBc1QwRkJUeXhKUVVGSkxFTkJRVU1zVTBGQlV5eERRVUZETEVsQlFVa3NRMEZCUXl4RFFVRkRPMGxCUXpsQ0xFTkJRVU03U1VGRlJDeFZRVUZWTzFGQlExSXNUMEZCVHl4SlFVRkpMRU5CUVVNc1UwRkJVeXhEUVVGRExFdEJRVXNzUTBGQlF5eERRVUZETzBsQlF5OUNMRU5CUVVNN1NVRkZSQ3gxUTBGQmRVTTdTVUZEZGtNc1UwRkJVeXhEUVVGRExFdEJRV003VVVGRGRFSXNTVUZCU1N4SlFVRkpMRU5CUVVNc1QwRkJUeXhKUVVGSkxFTkJRVU03V1VGQlJTeFBRVUZQTEVOQlFVTXNRMEZCUXp0UlFVVm9ReXhKUVVGSkxFbEJRVWtzUTBGQlF5eHhRa0ZCY1VJc1NVRkJTU3hKUVVGSkxFTkJRVU1zVVVGQlVTeEZRVUZGTzFsQlF5OURMRWxCUVVrc1EwRkJReXhqUVVGakxFZEJRVWNzUTBGQlF5eERRVUZETzFsQlEzaENMRTFCUVUwc1IwRkJSeXhIUVVGSExFbEJRVWtzUTBGQlF5eFpRVUZaTEVOQlFVTTdXVUZET1VJc1NVRkJTU3hEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETzFsQlExWXNUMEZCVHl4RFFVRkRMRWRCUVVjc1IwRkJSeXhIUVVGSExFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNSVUZCUlR0blFrRkRka0lzUzBGQlN5eEpRVUZKTEVOQlFVTXNSMEZCUnl4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZGTEVOQlFVTXNTVUZCU1N4RFFVRkRMRVZCUVVVc1EwRkJReXhOUVVGTkxFTkJRVU1zUlVGQlJTeEZRVUZGTERSQ1FVRTBRanR2UWtGRE1VVXNTVUZCU1N4RFFVRkRMR05CUVdNc1NVRkJTU3hSUVVGUkxFTkJRVU1zVjBGQlZ5eERRVUZETEVOQlFVTXNSMEZCUnl4SlFVRkpMRU5CUVVNc1EwRkJRenRwUWtGRGRrUTdZVUZEUmp0WlFVVkVMR2RDUVVGblFqdFpRVU5vUWl4SlFVRkpMRU5CUVVNc1IwRkJSeXhKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRPMWxCUTNSQ0xFMUJRVTBzWVVGQllTeEhRVUZITEVsQlFVa3NRMEZCUXl4UFFVRlBMRWRCUVVjc1NVRkJTU3hEUVVGRE8xbEJRekZETEVsQlFVa3NZVUZCWVN4SlFVRkpMRU5CUVVNc1JVRkJSU3g1UmtGQmVVWTdaMEpCUXk5SExFTkJRVU1zU1VGQlNTeERRVUZETEVOQlFVTXNRMEZCUXl4VlFVRlZMRU5CUVVNc1NVRkJTU3hoUVVGaExFTkJRVU1zUTBGQlF6dFpRVVY0UXl4UFFVRlBMRU5CUVVNc1NVRkJTU3hEUVVGRExFVkJRVVVzUTBGQlF5eE5RVUZOTEVOQlFVTTdaMEpCUTNKQ0xFbEJRVWtzUTBGQlF5eGpRVUZqTEVsQlFVa3NVVUZCVVN4RFFVRkRMRmRCUVZjc1EwRkJReXhEUVVGRExFZEJRVWNzU1VGQlNTeERRVUZETEVOQlFVTTdXVUZGZUVRc1NVRkJTU3hEUVVGRExIRkNRVUZ4UWl4SFFVRkhMRWxCUVVrc1EwRkJReXhSUVVGUkxFTkJRVU03VTBGRE5VTTdVVUZGUkN4UFFVRlBMRU5CUVVNc1MwRkJTeXhEUVVGRExFTkJRVU1zUTBGQlF5eEpRVUZKTEVOQlFVTXNZMEZCWXl4RFFVRkRMRU5CUVVNc1EwRkJReXhKUVVGSkxFTkJRVU1zVDBGQlR5eEhRVUZITEVsQlFVa3NRMEZCUXl4alFVRmpMRU5CUVVNc1EwRkJRenRKUVVNMVJTeERRVUZETzBsQlJVUXNNa1JCUVRKRU8wbEJRek5FTEZWQlFWVXNRMEZCUXl4TFFVRmxPMUZCUTNoQ0xFbEJRVWtzVFVGQlRTeEhRVUZITEVOQlFVTXNRMEZCUXp0UlFVTm1MRWxCUVVrc1NVRkJTU3hEUVVGRExGTkJRVk1zUlVGQlJTeEpRVUZKTEVsQlFVa3NRMEZCUXl4UFFVRlBMRVZCUVVVN1dVRkRjRU1zUzBGQlN5eEpRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRVZCUVVVc1EwRkJReXhIUVVGSExFbEJRVWtzUTBGQlF5eFBRVUZQTEVWQlFVVXNRMEZCUXl4RlFVRkZPMmRDUVVOdVF5eE5RVUZOTEVsQlFVa3NTMEZCU3l4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJRenRUUVVNNVFqdGhRVUZOTzFsQlEwd3NTMEZCU3l4SlFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU1zUlVGQlJTeERRVUZETEVOQlFVTXNSMEZCUnl4SlFVRkpMRU5CUVVNc1VVRkJVU3hEUVVGRExFTkJRVU1zUlVGQlJTeEpRVUZKTEVOQlFVTXNRMEZCUXl4SlFVRkpMRU5CUVVNc1EwRkJRenRuUWtGRGFrUXNUVUZCVFN4SlFVRkpMRXRCUVVzc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU03VTBGRE9VSTdVVUZEUkN4UFFVRlBMRTFCUVUwc1EwRkJRenRKUVVOb1FpeERRVUZETzBsQlJVUXNNa1pCUVRKR08wbEJRek5HTEdkQ1FVRm5RaXhEUVVGRExFMUJRV2RDTEVWQlFVVXNTMEZCWXp0UlFVTXZReXhKUVVGSkxFbEJRVWtzUTBGQlF5eFBRVUZQTEVsQlFVa3NRMEZCUXp0WlFVRkZMRTlCUVU4c1EwRkJReXhEUVVGRE8xRkJSV2hETEVsQlFVa3NTMEZCU3l4SFFVRkhMRU5CUVVNc1EwRkJRenRSUVVOa0xFMUJRVTBzUjBGQlJ5eEhRVUZITEVsQlFVa3NRMEZCUXl4WlFVRlpMRU5CUVVNN1VVRkRPVUlzU1VGQlNTeERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRPMUZCUTFZc1QwRkJUeXhEUVVGRExFZEJRVWNzUjBGQlJ5eEhRVUZITEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1JVRkJSVHRaUVVOMlFpeExRVUZMTEVsQlFVa3NRMEZCUXl4SFFVRkhMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zUTBGQlF5eERRVUZETEVkQlFVY3NUVUZCVFN4RFFVRkRMRXRCUVVzc1EwRkJReXhEUVVGRExFTkJRVU1zUlVGQlJTeERRVUZETEVsQlFVa3NRMEZCUXl4RlFVRkZMRU5CUVVNc1RVRkJUU3hEUVVGRE8yZENRVU0xUkN4TFFVRkxMRWxCUVVrc1VVRkJVU3hEUVVGRExGZEJRVmNzUTBGQlF5eERRVUZETEVkQlFVY3NTVUZCU1N4RFFVRkRMRU5CUVVNN1UwRkRNME03VVVGRlJDeG5Ra0ZCWjBJN1VVRkRhRUlzU1VGQlNTeERRVUZETEVkQlFVY3NTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhEUVVGRExFTkJRVU1zUjBGQlJ5eE5RVUZOTEVOQlFVTXNTMEZCU3l4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE8xRkJRM2hETEUxQlFVMHNZVUZCWVN4SFFVRkhMRWxCUVVrc1EwRkJReXhQUVVGUExFZEJRVWNzU1VGQlNTeERRVUZETzFGQlF6RkRMRWxCUVVrc1lVRkJZU3hKUVVGSkxFTkJRVU03V1VGRGNFSXNRMEZCUXl4SlFVRkpMRU5CUVVNc1EwRkJReXhEUVVGRExGVkJRVlVzUTBGQlF5eEpRVUZKTEdGQlFXRXNRMEZCUXl4RFFVRkRPMUZCUTNoRExFOUJRVThzUTBGQlF5eEpRVUZKTEVOQlFVTXNSVUZCUlN4RFFVRkRMRTFCUVUwc1EwRkJRenRaUVVOeVFpeExRVUZMTEVsQlFVa3NVVUZCVVN4RFFVRkRMRmRCUVZjc1EwRkJReXhEUVVGRExFZEJRVWNzU1VGQlNTeERRVUZETEVOQlFVTTdVVUZGTVVNc1QwRkJUeXhEUVVGRExFdEJRVXNzUTBGQlF5eERRVUZETEVOQlFVTXNTMEZCU3l4RFFVRkRMRU5CUVVNc1EwRkJReXhKUVVGSkxFTkJRVU1zVDBGQlR5eEhRVUZITEV0QlFVc3NRMEZCUXl4RFFVRkRPMGxCUTJoRUxFTkJRVU03U1VGRlJDeExRVUZMTzFGQlEwZ3NTVUZCU1N4RFFVRkRMRk5CUVZNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF6dEpRVU53UWl4RFFVRkRPMGxCUlVRc1VVRkJVU3hEUVVGRExFdEJRV003VVVGRGNrSXNUMEZCVHl4SlFVRkpMRU5CUVVNc1VVRkJVU3hEUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZGTEV0QlFVc3NRMEZCUXl4SlFVRkpMRU5CUVVNc1EwRkJRenRKUVVOMlF5eERRVUZETzBsQlJVUXNTVUZCU1N4UFFVRlBPMUZCUTFRc1QwRkJUeXhKUVVGSkxFTkJRVU1zVTBGQlV5eERRVUZETEVsQlFVa3NRMEZCUXl4SlFVRkpMRWxCUVVrc1EwRkJReXhQUVVGUExFTkJRVU03U1VGRE9VTXNRMEZCUXp0SlFVVkVMRWxCUVVrc1VVRkJVVHRSUVVOV0xFOUJRVThzU1VGQlNTeERRVUZETEZOQlFWTXNRMEZCUXl4TFFVRkxMRU5CUVVNc1NVRkJTU3hKUVVGSkxFTkJRVU1zVDBGQlR5eERRVUZETzBsQlF5OURMRU5CUVVNN1NVRkZSQ3hKUVVGSkxFOUJRVTg3VVVGRFZDeFBRVUZQTEVsQlFVa3NRMEZCUXl4VFFVRlRMRU5CUVVNc1NVRkJTU3hEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETzBsQlEyeERMRU5CUVVNN1NVRkZSQ3hKUVVGSkxGRkJRVkU3VVVGRFZpeFBRVUZQTEVsQlFVa3NRMEZCUXl4VFFVRlRMRU5CUVVNc1MwRkJTeXhEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETzBsQlEyNURMRU5CUVVNN1NVRkZSQ3h6UjBGQmMwYzdTVUZEZEVjc01FTkJRVEJETzBsQlF6RkRMRkZCUVZFc1EwRkJReXhMUVVGaExFVkJRVVVzUzBGQlN5eEhRVUZITEVsQlFVazdVVUZEYkVNc1NVRkJTU3hEUVVGRExHRkJRV0VzUTBGQlF5eExRVUZMTEVWQlFVVXNRMEZCUXl4RFFVRkRMRVZCUVVVc1NVRkJTU3hEUVVGRExFOUJRVThzUlVGQlJTeFBRVUZQTEVOQlFVTXNRMEZCUXp0UlFVVnlSQ3hKUVVGSkxFdEJRVXNzU1VGQlNTeEpRVUZKTEVOQlFVTXNUMEZCVHl4SFFVRkhMRU5CUVVNN1dVRkJSU3hQUVVGUExFTkJRVU1zUTBGQlF5eERRVUZETzFGQlEzcERMRXRCUVVzc1IwRkJSeXhMUVVGTExFZEJRVWNzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFdEJRVXNzUjBGQlJ5eERRVUZETEVOQlFVTXNRMEZCUXl4aFFVRmhPMUZCUTJoRUxFbEJRVWtzVlVGQlZTeEhRVUZITEV0QlFVc3NSMEZCUnl4SlFVRkpMRU5CUVVNN1VVRkRPVUlzVFVGQlRTeFBRVUZQTEVkQlFVY3NTVUZCU1N4RFFVRkRMRmxCUVZrc1EwRkJRenRSUVVWc1F5eExRVUZMTEVsQlFVa3NRMEZCUXl4SFFVRkhMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zUzBGQlN5eEhRVUZITEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1IwRkJSeXhQUVVGUExFVkJRVVVzUTBGQlF5eEZRVUZGTEVWQlFVVTdXVUZEY2tRc1NVRkJTU3hEUVVGRExFZEJRVWNzUTBGQlF5eExRVUZMTEVOQlFVTXNRMEZCUXl4RFFVRkRMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1NVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1dVRkJXVHRaUVVNNVJDeEpRVUZKTEZWQlFWVXNTVUZCU1N4RFFVRkRMRVZCUVVVN1owSkJRMjVDTEVOQlFVTXNTVUZCU1N4RFFVRkRMRU5CUVVNc1ZVRkJWU3hKUVVGSkxGVkJRVlVzUTBGQlF5eEhRVUZITEZWQlFWVXNRMEZCUXl4RFFVRkRPMmRDUVVNdlF5eFZRVUZWTEVkQlFVY3NRMEZCUXl4RFFVRkRPMkZCUTJoQ08ybENRVUZOTEVsQlFVa3NRMEZCUXl4TFFVRkxMRWxCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU1zVlVGQlZTeEZRVUZGTEhsRFFVRjVReXhEUVVGQk8yZENRVU01UlN4VFFVRlRPMkZCUTFZN1dVRkZSQ3hMUVVGTExFbEJRVWtzUTBGQlF5eEhRVUZITEVOQlFVTXNSVUZCUlN4RFFVRkRMRWxCUVVrc1EwRkJReXhGUVVGRkxFTkJRVU1zU1VGQlNTeERRVUZETEVWQlFVVXNRMEZCUXl4TlFVRk5MRU5CUVVNc1JVRkJSVHRuUWtGRGVFTXNUVUZCVFN4RFFVRkRMRWRCUVVjc1VVRkJVU3hEUVVGRExGZEJRVmNzUTBGQlF5eERRVUZETEVkQlFVY3NTVUZCU1N4RFFVRkRMRU5CUVVNN1owSkJRM3BETEVsQlFVa3NRMEZCUXl4SlFVRkpMRU5CUVVNc1JVRkJSVHR2UWtGRFZpeExRVUZMTEVkQlFVY3NRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJReXhIUVVGSExFVkJRVVVzUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXp0dlFrRkRla0lzU1VGQlNTeExRVUZMTEVsQlFVa3NTVUZCU1N4RFFVRkRMRTlCUVU4N2QwSkJRVVVzVDBGQlR5eERRVUZETEVOQlFVTXNRMEZCUXp0dlFrRkRja01zVDBGQlR5eExRVUZMTEVOQlFVTTdhVUpCUTJRN1lVRkRSanRUUVVOR08xRkJRMFFzVDBGQlR5eERRVUZETEVOQlFVTXNRMEZCUXp0SlFVTmFMRU5CUVVNN1NVRkZSQ3cwUkVGQk5FUTdTVUZETlVRc1VVRkJVU3hEUVVGRExFdEJRV0VzUlVGQlJTeExRVUZMTEVkQlFVY3NTVUZCU1R0UlFVTnNReXhKUVVGSkxFdEJRVXNzU1VGQlNTeERRVUZETzFsQlFVVXNUMEZCVHl4RFFVRkRMRU5CUVVNc1EwRkJRenRSUVVNeFFpeEpRVUZKTEVOQlFVTXNZVUZCWVN4RFFVRkRMRXRCUVVzc1JVRkJSU3hEUVVGRExFTkJRVU1zUlVGQlJTeEpRVUZKTEVOQlFVTXNUMEZCVHl4RlFVRkZMRTlCUVU4c1EwRkJReXhEUVVGRE8xRkJSWEpFTEV0QlFVc3NSMEZCUnl4TFFVRkxMRWRCUVVjc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eEpRVUZKTEVOQlFVTXNUMEZCVHl4SFFVRkhMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUzBGQlN5eEhRVUZITEVOQlFVTXNRMEZCUXl4RFFVRkRMR0ZCUVdFN1VVRkZMMFFzVFVGQlRTeFZRVUZWTEVkQlFVY3NTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhMUVVGTExFZEJRVWNzU1VGQlNTeERRVUZETEVOQlFVTTdVVUZETlVNc1NVRkJTU3hoUVVGaExFZEJRVWNzUTBGQlF5eExRVUZMTEVkQlFVY3NRMEZCUXl4RFFVRkRMRWRCUVVjc1NVRkJTU3hEUVVGRE8xRkJSWFpETEV0QlFVc3NTVUZCU1N4RFFVRkRMRWRCUVVjc1ZVRkJWU3hGUVVGRkxFTkJRVU1zU1VGQlNTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRVZCUVVVN1dVRkRjRU1zU1VGQlNTeERRVUZETEVkQlFVY3NRMEZCUXl4TFFVRkxMRU5CUVVNc1EwRkJReXhEUVVGRExFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zVDBGQlR6dFpRVU42UkN4SlFVRkpMR0ZCUVdFc1NVRkJTU3hEUVVGRExFVkJRVVU3WjBKQlEzUkNMRU5CUVVNc1NVRkJTU3hEUVVGRExFTkJRVU1zUTBGQlF5eFZRVUZWTEVOQlFVTXNTVUZCU1N4aFFVRmhMRU5CUVVNc1EwRkJRenRuUWtGRGRFTXNZVUZCWVN4SFFVRkhMRU5CUVVNc1EwRkJRenRoUVVOdVFqdFpRVU5FTEV0QlFVc3NTVUZCU1N4RFFVRkRMRWRCUVVjc1JVRkJSU3hGUVVGRkxFTkJRVU1zU1VGQlNTeERRVUZETEVWQlFVVXNRMEZCUXl4SlFVRkpMRU5CUVVNc1JVRkJSU3hEUVVGRExFdEJRVXNzUTBGQlF5eEZRVUZGTzJkQ1FVTjRReXhOUVVGTkxFTkJRVU1zUjBGQlJ5eFJRVUZSTEVOQlFVTXNWVUZCVlN4RFFVRkRMRU5CUVVNc1MwRkJTeXhKUVVGSkxFTkJRVU1zUTBGQlF6dG5Ra0ZETVVNc1NVRkJTU3hEUVVGRExFbEJRVWtzUTBGQlF6dHZRa0ZEVWl4UFFVRlBMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU1zUjBGQlJ5eEZRVUZGTEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNN1lVRkRNMEk3VTBGRFJqdFJRVU5FTEU5QlFVOHNRMEZCUXl4RFFVRkRMRU5CUVVNN1NVRkRXaXhEUVVGRE96dEJRWEoxUWswc2IwSkJRVmNzUjBGQlJ5eFRRVUZUTEVOQlFVTXNTVUZCU1N4RFFVRkRPMGxCUTJ4RExFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTTdTVUZET1VNc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF6dEpRVU01UXl4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRE8wbEJRemxETEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNN1NVRkRPVU1zUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXp0SlFVTTVReXhEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETzBsQlF6bERMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU03U1VGRE9VTXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJRenRKUVVNNVF5eERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRPMGxCUXpsRExFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTTdTVUZET1VNc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF6dEpRVU01UXl4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRE8wbEJRemxETEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNN1NVRkRPVU1zUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXp0SlFVTTVReXhEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETzBsQlF6bERMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU03UTBGQlF5eERRVUZETEVOQlFVTTdRVUZGTlVNc2IwSkJRVmNzUjBGQlJ5eFRRVUZUTEVOQlFVTXNTVUZCU1N4RFFVRkRPMGxCUTJ4RExFTkJRVU1zUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXp0SlFVTXZReXhEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETzBsQlF6bERMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU03U1VGRE9VTXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJRenRKUVVNNVF5eERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRPMGxCUXpsRExFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTTdTVUZET1VNc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF6dEpRVU01UXl4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRE8wbEJRemxETEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNN1NVRkRPVU1zUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXp0SlFVTTVReXhEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETzBsQlF6bERMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU03U1VGRE9VTXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJRenRKUVVNNVF5eERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRPMGxCUXpsRExFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTTdTVUZET1VNc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF6dERRVUZETEVOQlFVTXNRMEZCUXp0QlFVVTFReXh0UWtGQlZTeEhRVUZITEZOQlFWTXNRMEZCUXl4SlFVRkpMRU5CUVVNN1NVRkRha01zUTBGQlF5eERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRPMGxCUXk5RExFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTTdTVUZET1VNc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF6dEpRVU01UXl4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRE8wbEJRemxETEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNN1NVRkRPVU1zUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXp0SlFVTTVReXhEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETzBsQlF6bERMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU03U1VGRE9VTXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJRenRKUVVNNVF5eERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRPMGxCUXpsRExFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTTdTVUZET1VNc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF6dEpRVU01UXl4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRE8wbEJRemxETEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNN1NVRkRPVU1zUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXp0SlFVTTVReXhEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETzBOQlFVTXNRMEZCUXl4RFFVRkRJaXdpYzI5MWNtTmxjME52Ym5SbGJuUWlPbHNpWlhod2IzSjBJR1JsWm1GMWJIUWdZMnhoYzNNZ1FtbDBRWEp5WVhrZ2UxeHVJQ0J6ZEdGMGFXTWdYMjl1UW1sMFEyOTFiblFnUFNCSmJuUTRRWEp5WVhrdVpuSnZiU2hiWEc0Z0lDQWdNQ3dnTVN3Z01Td2dNaXdnTVN3Z01pd2dNaXdnTXl3Z01Td2dNaXdnTWl3Z015d2dNaXdnTXl3Z015d2dOQ3hjYmlBZ0lDQXhMQ0F5TENBeUxDQXpMQ0F5TENBekxDQXpMQ0EwTENBeUxDQXpMQ0F6TENBMExDQXpMQ0EwTENBMExDQTFMRnh1SUNBZ0lERXNJRElzSURJc0lETXNJRElzSURNc0lETXNJRFFzSURJc0lETXNJRE1zSURRc0lETXNJRFFzSURRc0lEVXNYRzRnSUNBZ01pd2dNeXdnTXl3Z05Dd2dNeXdnTkN3Z05Dd2dOU3dnTXl3Z05Dd2dOQ3dnTlN3Z05Dd2dOU3dnTlN3Z05peGNiaUFnSUNBeExDQXlMQ0F5TENBekxDQXlMQ0F6TENBekxDQTBMQ0F5TENBekxDQXpMQ0EwTENBekxDQTBMQ0EwTENBMUxGeHVJQ0FnSURJc0lETXNJRE1zSURRc0lETXNJRFFzSURRc0lEVXNJRE1zSURRc0lEUXNJRFVzSURRc0lEVXNJRFVzSURZc1hHNGdJQ0FnTWl3Z015d2dNeXdnTkN3Z015d2dOQ3dnTkN3Z05Td2dNeXdnTkN3Z05Dd2dOU3dnTkN3Z05Td2dOU3dnTml4Y2JpQWdJQ0F6TENBMExDQTBMQ0ExTENBMExDQTFMQ0ExTENBMkxDQTBMQ0ExTENBMUxDQTJMQ0ExTENBMkxDQTJMQ0EzTEZ4dUlDQWdJREVzSURJc0lESXNJRE1zSURJc0lETXNJRE1zSURRc0lESXNJRE1zSURNc0lEUXNJRE1zSURRc0lEUXNJRFVzWEc0Z0lDQWdNaXdnTXl3Z015d2dOQ3dnTXl3Z05Dd2dOQ3dnTlN3Z015d2dOQ3dnTkN3Z05Td2dOQ3dnTlN3Z05Td2dOaXhjYmlBZ0lDQXlMQ0F6TENBekxDQTBMQ0F6TENBMExDQTBMQ0ExTENBekxDQTBMQ0EwTENBMUxDQTBMQ0ExTENBMUxDQTJMRnh1SUNBZ0lETXNJRFFzSURRc0lEVXNJRFFzSURVc0lEVXNJRFlzSURRc0lEVXNJRFVzSURZc0lEVXNJRFlzSURZc0lEY3NYRzRnSUNBZ01pd2dNeXdnTXl3Z05Dd2dNeXdnTkN3Z05Dd2dOU3dnTXl3Z05Dd2dOQ3dnTlN3Z05Dd2dOU3dnTlN3Z05peGNiaUFnSUNBekxDQTBMQ0EwTENBMUxDQTBMQ0ExTENBMUxDQTJMQ0EwTENBMUxDQTFMQ0EyTENBMUxDQTJMQ0EyTENBM0xGeHVJQ0FnSURNc0lEUXNJRFFzSURVc0lEUXNJRFVzSURVc0lEWXNJRFFzSURVc0lEVXNJRFlzSURVc0lEWXNJRFlzSURjc1hHNGdJQ0FnTkN3Z05Td2dOU3dnTml3Z05Td2dOaXdnTml3Z055d2dOU3dnTml3Z05pd2dOeXdnTml3Z055d2dOeXdnT0YwcE8xeHVYRzRnSUhOMFlYUnBZeUJmWm1seWMzUlBia0pwZENBOUlFbHVkRGhCY25KaGVTNW1jbTl0S0Z0Y2JpQWdJQ0F0TVN3Z01Dd2dNU3dnTUN3Z01pd2dNQ3dnTVN3Z01Dd2dNeXdnTUN3Z01Td2dNQ3dnTWl3Z01Dd2dNU3dnTUN4Y2JpQWdJQ0EwTENBd0xDQXhMQ0F3TENBeUxDQXdMQ0F4TENBd0xDQXpMQ0F3TENBeExDQXdMQ0F5TENBd0xDQXhMQ0F3TEZ4dUlDQWdJRFVzSURBc0lERXNJREFzSURJc0lEQXNJREVzSURBc0lETXNJREFzSURFc0lEQXNJRElzSURBc0lERXNJREFzWEc0Z0lDQWdOQ3dnTUN3Z01Td2dNQ3dnTWl3Z01Dd2dNU3dnTUN3Z015d2dNQ3dnTVN3Z01Dd2dNaXdnTUN3Z01Td2dNQ3hjYmlBZ0lDQTJMQ0F3TENBeExDQXdMQ0F5TENBd0xDQXhMQ0F3TENBekxDQXdMQ0F4TENBd0xDQXlMQ0F3TENBeExDQXdMRnh1SUNBZ0lEUXNJREFzSURFc0lEQXNJRElzSURBc0lERXNJREFzSURNc0lEQXNJREVzSURBc0lESXNJREFzSURFc0lEQXNYRzRnSUNBZ05Td2dNQ3dnTVN3Z01Dd2dNaXdnTUN3Z01Td2dNQ3dnTXl3Z01Dd2dNU3dnTUN3Z01pd2dNQ3dnTVN3Z01DeGNiaUFnSUNBMExDQXdMQ0F4TENBd0xDQXlMQ0F3TENBeExDQXdMQ0F6TENBd0xDQXhMQ0F3TENBeUxDQXdMQ0F4TENBd0xGeHVJQ0FnSURjc0lEQXNJREVzSURBc0lESXNJREFzSURFc0lEQXNJRE1zSURBc0lERXNJREFzSURJc0lEQXNJREVzSURBc1hHNGdJQ0FnTkN3Z01Dd2dNU3dnTUN3Z01pd2dNQ3dnTVN3Z01Dd2dNeXdnTUN3Z01Td2dNQ3dnTWl3Z01Dd2dNU3dnTUN4Y2JpQWdJQ0ExTENBd0xDQXhMQ0F3TENBeUxDQXdMQ0F4TENBd0xDQXpMQ0F3TENBeExDQXdMQ0F5TENBd0xDQXhMQ0F3TEZ4dUlDQWdJRFFzSURBc0lERXNJREFzSURJc0lEQXNJREVzSURBc0lETXNJREFzSURFc0lEQXNJRElzSURBc0lERXNJREFzWEc0Z0lDQWdOaXdnTUN3Z01Td2dNQ3dnTWl3Z01Dd2dNU3dnTUN3Z015d2dNQ3dnTVN3Z01Dd2dNaXdnTUN3Z01Td2dNQ3hjYmlBZ0lDQTBMQ0F3TENBeExDQXdMQ0F5TENBd0xDQXhMQ0F3TENBekxDQXdMQ0F4TENBd0xDQXlMQ0F3TENBeExDQXdMRnh1SUNBZ0lEVXNJREFzSURFc0lEQXNJRElzSURBc0lERXNJREFzSURNc0lEQXNJREVzSURBc0lESXNJREFzSURFc0lEQXNYRzRnSUNBZ05Dd2dNQ3dnTVN3Z01Dd2dNaXdnTUN3Z01Td2dNQ3dnTXl3Z01Dd2dNU3dnTUN3Z01pd2dNQ3dnTVN3Z01GMHBPMXh1WEc0Z0lITjBZWFJwWXlCZmJHRnpkRTl1UW1sMElEMGdTVzUwT0VGeWNtRjVMbVp5YjIwb1cxeHVJQ0FnSUMweExDQXdMQ0F4TENBeExDQXlMQ0F5TENBeUxDQXlMQ0F6TENBekxDQXpMQ0F6TENBekxDQXpMQ0F6TENBekxGeHVJQ0FnSURRc0lEUXNJRFFzSURRc0lEUXNJRFFzSURRc0lEUXNJRFFzSURRc0lEUXNJRFFzSURRc0lEUXNJRFFzSURRc1hHNGdJQ0FnTlN3Z05Td2dOU3dnTlN3Z05Td2dOU3dnTlN3Z05Td2dOU3dnTlN3Z05Td2dOU3dnTlN3Z05Td2dOU3dnTlN4Y2JpQWdJQ0ExTENBMUxDQTFMQ0ExTENBMUxDQTFMQ0ExTENBMUxDQTFMQ0ExTENBMUxDQTFMQ0ExTENBMUxDQTFMQ0ExTEZ4dUlDQWdJRFlzSURZc0lEWXNJRFlzSURZc0lEWXNJRFlzSURZc0lEWXNJRFlzSURZc0lEWXNJRFlzSURZc0lEWXNJRFlzWEc0Z0lDQWdOaXdnTml3Z05pd2dOaXdnTml3Z05pd2dOaXdnTml3Z05pd2dOaXdnTml3Z05pd2dOaXdnTml3Z05pd2dOaXhjYmlBZ0lDQTJMQ0EyTENBMkxDQTJMQ0EyTENBMkxDQTJMQ0EyTENBMkxDQTJMQ0EyTENBMkxDQTJMQ0EyTENBMkxDQTJMRnh1SUNBZ0lEWXNJRFlzSURZc0lEWXNJRFlzSURZc0lEWXNJRFlzSURZc0lEWXNJRFlzSURZc0lEWXNJRFlzSURZc0lEWXNYRzRnSUNBZ055d2dOeXdnTnl3Z055d2dOeXdnTnl3Z055d2dOeXdnTnl3Z055d2dOeXdnTnl3Z055d2dOeXdnTnl3Z055eGNiaUFnSUNBM0xDQTNMQ0EzTENBM0xDQTNMQ0EzTENBM0xDQTNMQ0EzTENBM0xDQTNMQ0EzTENBM0xDQTNMQ0EzTENBM0xGeHVJQ0FnSURjc0lEY3NJRGNzSURjc0lEY3NJRGNzSURjc0lEY3NJRGNzSURjc0lEY3NJRGNzSURjc0lEY3NJRGNzSURjc1hHNGdJQ0FnTnl3Z055d2dOeXdnTnl3Z055d2dOeXdnTnl3Z055d2dOeXdnTnl3Z055d2dOeXdnTnl3Z055d2dOeXdnTnl4Y2JpQWdJQ0EzTENBM0xDQTNMQ0EzTENBM0xDQTNMQ0EzTENBM0xDQTNMQ0EzTENBM0xDQTNMQ0EzTENBM0xDQTNMQ0EzTEZ4dUlDQWdJRGNzSURjc0lEY3NJRGNzSURjc0lEY3NJRGNzSURjc0lEY3NJRGNzSURjc0lEY3NJRGNzSURjc0lEY3NJRGNzWEc0Z0lDQWdOeXdnTnl3Z055d2dOeXdnTnl3Z055d2dOeXdnTnl3Z055d2dOeXdnTnl3Z055d2dOeXdnTnl3Z055d2dOeXhjYmlBZ0lDQTNMQ0EzTENBM0xDQTNMQ0EzTENBM0xDQTNMQ0EzTENBM0xDQTNMQ0EzTENBM0xDQTNMQ0EzTENBM0xDQTNYU2s3WEc1Y2JpQWdjSEpwZG1GMFpTQmZaR0YwWVRvZ1ZXbHVkRE15UVhKeVlYazdYRzRnSUhCeWFYWmhkR1VnWDJ4bGJtZDBhQ0E5SURBN1hHNGdJSEJ5YVhaaGRHVWdYM1psY25OcGIyNGdQU0F3TzF4dUlDQndjbWwyWVhSbElGOTFjR1JoZEdWTVpYWmxiQ0E5SURBN1hHNGdJSEJ5YVhaaGRHVWdYM05sYkdWamRHVmtRMjkxYm5RZ1BTQXdPMXh1SUNCd2NtbDJZWFJsSUY5elpXeGxZM1JsWkVOdmRXNTBWbVZ5YzJsdmJpQTlJQzB4TzF4dUlDQndjbWwyWVhSbElGOXpaV3hsWTNSbFpFbHVaR1Y0WlhOV1pYSnphVzl1SUQwZ0xURTdYRzRnSUhCeWFYWmhkR1VnWDNabGNuTnBiMjVsWkU1aGJXVWdQU0FuSnp0Y2JpQWdjSEpwZG1GMFpTQmZkbVZ5YzJsdmJtVmtUbUZ0WlZabGNuTnBiMjRnUFNBdE1UdGNiaUFnVTBoU1NVNUxYMVJJVWtWVFNFOU1SQ0E5SURCNE1UQXdPMXh1WEc0Z0lHTnZibk4wY25WamRHOXlLR1JoZEdFNklGVnBiblF6TWtGeWNtRjVMQ0JzWlc1bmRHZzZJRzUxYldKbGNpbGNiaUFnWTI5dWMzUnlkV04wYjNJb2JHVnVaM1JvT2lCdWRXMWlaWElzSUdSbFptRjFiSFJXWVd4MVpUODZJR0p2YjJ4bFlXNHBYRzRnSUdOdmJuTjBjblZqZEc5eUtHRnlaem9nYm5WdFltVnlJSHdnVldsdWRETXlRWEp5WVhrc0lHUmxabUYxYkhSV1lXeDFaVG9nWW05dmJHVmhiaUI4SUc1MWJXSmxjaUE5SUdaaGJITmxLU0I3WEc0Z0lDQWdhV1lnS0hSNWNHVnZaaUJoY21jZ1BUMDlJQ2R1ZFcxaVpYSW5LU0I3WEc0Z0lDQWdJQ0JqYjI1emRDQnNaVzVuZEdnZ1BTQmhjbWM3WEc0Z0lDQWdJQ0JqYjI1emRDQmlkV1ptSUQwZ1FtbDBRWEp5WVhrdVgyTnlaV0YwWlVKMVptWmxjaWhzWlc1bmRHZ3BPMXh1SUNBZ0lDQWdhV1lnS0dSbFptRjFiSFJXWVd4MVpTa2dlMXh1SUNBZ0lDQWdJQ0JtYjNJZ0tHeGxkQ0JwSUQwZ01Ec2dhU0E4SUdKMVptWXViR1Z1WjNSb095QnBLeXNwWEc0Z0lDQWdJQ0FnSUNBZ1luVm1abHRwWFNBOUlDMHhPMXh1SUNBZ0lDQWdmVnh1SUNBZ0lDQWdkR2hwY3k1ZlpHRjBZU0E5SUdKMVptWTdYRzRnSUNBZ0lDQjBhR2x6TGw5c1pXNW5kR2dnUFNCc1pXNW5kR2c3WEc0Z0lDQWdmU0JsYkhObElHbG1JQ2hoY21jZ2FXNXpkR0Z1WTJWdlppQlZhVzUwTXpKQmNuSmhlU2tnZTF4dUlDQWdJQ0FnZEdocGN5NWZaR0YwWVNBOUlHRnlaeUJoY3lCVmFXNTBNekpCY25KaGVUdGNiaUFnSUNBZ0lIUm9hWE11WDJ4bGJtZDBhQ0E5SUdSbFptRjFiSFJXWVd4MVpTQmhjeUJ1ZFcxaVpYSTdYRzRnSUNBZ2ZTQmxiSE5sSUh0Y2JpQWdJQ0FnSUhSb2NtOTNJRzVsZHlCRmNuSnZjaWduU1c1MllXeHBaQ0JqYjI1emRISjFZM1J2Y2ljcE8xeHVJQ0FnSUgxY2JpQWdmVnh1WEc1Y2JpQWdaMlYwVW1GM1JHRjBZU2dwSUhzZ2NtVjBkWEp1SUhSb2FYTXVYMlJoZEdFN0lIMWNibHh1SUNCaGMzTjFjbVZIYjJWNktHNTFiVG9nYm5WdFltVnlMQ0JoY21kT1lXMWxPaUJUZEhKcGJtY3BPaUIyYjJsa0lIdGNiaUFnSUNCcFppQW9iblZ0SUR3Z01Da2dkR2h5YjNjZ2JtVjNJRVZ5Y205eUtHQWtlMkZ5WjA1aGJXVjlJSE5vYjNWc1pDQmlaU0JuY21WaGRHVnlJSFJvWVc0Z2VtVnliMkFwTzF4dUlDQjlYRzVjYmlBZ1lYTnpkWEpsU1c1U1lXNW5aU2gyWVd4MVpUb2diblZ0WW1WeUxDQnRhVzQ2SUc1MWJXSmxjaXdnYldGNE9pQnVkVzFpWlhJc0lHRnlaMDVoYldVNklGTjBjbWx1WnlrNklIWnZhV1FnZTF4dUlDQWdJR2xtSUNnb2RtRnNkV1VnUENCdGFXNHBJSHg4SUNoMllXeDFaU0ErSUcxaGVDa3BYRzRnSUNBZ0lDQjBhSEp2ZHlCdVpYY2dSWEp5YjNJb1lFRnlaM1Z0Wlc1MElDUjdZWEpuVG1GdFpYMGdLQ1I3ZG1Gc2RXVjlLU0J2ZFhRZ2IyWWdjbUZ1WjJVZ0tDUjdiV2x1ZlN3Z0pIdHRZWGg5S1dBcE8xeHVJQ0I5WEc1Y2JpQWdZMjl3ZVNoemNtTTZJRlZwYm5Rek1rRnljbUY1TENCa2MzUTZJRlZwYm5Rek1rRnljbUY1TENCamIzVnVkRG9nYm5WdFltVnlLVG9nZG05cFpDQjdYRzRnSUNBZ1ptOXlJQ2hzWlhRZ2FTQTlJREE3SUdrZ1BDQmpiM1Z1ZERzZ2FTc3JLVnh1SUNBZ0lDQWdaSE4wVzJsZElEMGdjM0pqVzJsZE8xeHVJQ0I5WEc1Y2JpQWdZMjl3ZVVaeWIyMG9iM1JvWlhJNklFSnBkRUZ5Y21GNUtUb2dkbTlwWkNCN1hHNGdJQ0FnYVdZZ0tIUm9hWE11WDJ4bGJtZDBhQ0FoUFNCdmRHaGxjaTVmYkdWdVozUm9LVnh1SUNBZ0lDQWdkR2h5YjNjZ2JtVjNJRVZ5Y205eUtHQk1aVzVuZEdoeklHUnBabVpsY2lBb0pIdDBhR2x6TGw5c1pXNW5kR2g5SUNFOUlDUjdiM1JvWlhJdVgyeGxibWQwYUgwcFlDazdYRzRnSUNBZ2RHaHBjeTVqYjNCNUtHOTBhR1Z5TGw5a1lYUmhMQ0IwYUdsekxsOWtZWFJoTENCMGFHbHpMbXhsYm1kMGFFbHVTVzUwY3lrN1hHNGdJQ0FnZEdocGN5NWZkbVZ5YzJsdmJpc3JPMXh1SUNCOVhHNWNiaUFnWjJWMElHeGxibWQwYUNncElIdGNiaUFnSUNCeVpYUjFjbTRnZEdocGN5NWZiR1Z1WjNSb08xeHVJQ0I5WEc1Y2JpQWdaMlYwSUdKMVptWmxjaWdwSUh0Y2JpQWdJQ0J5WlhSMWNtNGdkR2hwY3k1ZlpHRjBZVHRjYmlBZ2ZWeHVYRzRnSUhObGRDQmlkV1ptWlhJb1pHRjBZVG9nVldsdWRETXlRWEp5WVhrcElIdGNiaUFnSUNCMGFHbHpMbDlrWVhSaElEMGdaR0YwWVR0Y2JpQWdJQ0IwYUdsekxsOTJaWEp6YVc5dUt5czdYRzRnSUgxY2JseHVJQ0JuWlhRZ2RtVnljMmx2YmlncElIdGNiaUFnSUNCeVpYUjFjbTRnZEdocGN5NWZkbVZ5YzJsdmJqdGNiaUFnZlZ4dVhHNGdJSE5sZENCMlpYSnphVzl1S0haaGJIVmxPaUJ1ZFcxaVpYSXBJSHRjYmlBZ0lDQjBhR2x6TGw5MlpYSnphVzl1SUQwZ2RtRnNkV1U3WEc0Z0lIMWNibHh1SUNCcGJtTnlaVzFsYm5SV1pYSnphVzl1S0c1dmRHbG1lU0E5SUhSeWRXVXBPaUIyYjJsa0lIdGNiaUFnSUNCMGFHbHpMbDkyWlhKemFXOXVLeXM3WEc0Z0lIMWNibHh1SUNCblpYUWdiR1Z1WjNSb1NXNUpiblJ6S0NrZ2UxeHVJQ0FnSUhKbGRIVnliaUJOWVhSb0xtWnNiMjl5S0NoMGFHbHpMbDlzWlc1bmRHZ2dLeUF3ZURGbUtTQXZJREI0TWpBcE8xeHVJQ0I5WEc1Y2JpQWdaMlYwSUhabGNuTnBiMjVsWkU1aGJXVW9LU0I3WEc0Z0lDQWdjbVYwZFhKdUlIUm9hWE11WDNabGNuTnBiMjRnUFQwZ2RHaHBjeTVmZG1WeWMybHZibVZrVG1GdFpWWmxjbk5wYjI0Z1B5QjBhR2x6TGw5MlpYSnphVzl1WldST1lXMWxJRG9nSnljN1hHNGdJSDFjYmx4dUlDQnpaWFFnZG1WeWMybHZibVZrVG1GdFpTaHVZVzFsT2lCemRISnBibWNwSUh0Y2JpQWdJQ0IwYUdsekxsOTJaWEp6YVc5dVpXUk9ZVzFsSUQwZ2JtRnRaVHRjYmlBZ0lDQjBhR2x6TGw5MlpYSnphVzl1WldST1lXMWxWbVZ5YzJsdmJpQTlJSFJvYVhNdVgzWmxjbk5wYjI0N1hHNGdJSDFjYmx4dUlDQm5aWFFnYzJWc1ppZ3BJSHRjYmlBZ0lDQnlaWFIxY200Z2RHaHBjenRjYmlBZ2ZWeHVYRzRnSUhObGRFeGxibWQwYUNoMllXeDFaVG9nYm5WdFltVnlLVG9nZG05cFpDQjdYRzRnSUNBZ2FXWWdLSFpoYkhWbElEd2dNQ2xjYmlBZ0lDQWdJSFJvY205M0lHNWxkeUJGY25KdmNpZ25jMmh2ZFd4a0lHSmxJRDQ5SURBbktUdGNibHh1SUNBZ0lHbG1JQ2gyWVd4MVpTQTlQU0IwYUdsekxsOXNaVzVuZEdncElISmxkSFZ5Ymp0Y2JpQWdJQ0JqYjI1emRDQnVTVzUwYzA1bFpXUmxaQ0E5SUUxaGRHZ3VabXh2YjNJb0tIWmhiSFZsSUNzZ01IZ3haaWtnTHlBd2VESXdLVHRjYmlBZ0lDQnBaaUFvS0c1SmJuUnpUbVZsWkdWa0lENGdkR2hwY3k1ZlpHRjBZUzVzWlc1bmRHZ3BJSHg4SUNnb2JrbHVkSE5PWldWa1pXUWdLeUIwYUdsekxsTklVa2xPUzE5VVNGSkZVMGhQVEVRcElEd2dkR2hwY3k1ZlpHRjBZUzVzWlc1bmRHZ3BLU0I3WEc0Z0lDQWdJQ0JqYjI1emRDQnVaWGRFWVhSaElEMGdibVYzSUZWcGJuUXpNa0Z5Y21GNUtHNUpiblJ6VG1WbFpHVmtLVHRjYmlBZ0lDQWdJSFJvYVhNdVkyOXdlU2gwYUdsekxsOWtZWFJoTENCdVpYZEVZWFJoTENBb2JrbHVkSE5PWldWa1pXUWdQaUIwYUdsekxsOWtZWFJoTG14bGJtZDBhQ2tnUHlCMGFHbHpMbDlrWVhSaExteGxibWQwYUNBNklHNUpiblJ6VG1WbFpHVmtLVHRjYmlBZ0lDQWdJSFJvYVhNdVgyUmhkR0VnUFNCdVpYZEVZWFJoTzF4dUlDQWdJSDFjYmx4dUlDQWdJR2xtSUNoMllXeDFaU0ErSUhSb2FYTXVYMnhsYm1kMGFDa2dlMXh1SUNBZ0lDQWdhV1lnS0hSb2FYTXVYMnhsYm1kMGFDQWxJREI0TWpBZ1BpQXdLVnh1SUNBZ0lDQWdJQ0IwYUdsekxsOWtZWFJoVzNSb2FYTXViR1Z1WjNSb1NXNUpiblJ6SUMwZ01WMGdKajBnS0RFZ1BEd2dLQ2gwYUdsekxsOXNaVzVuZEdnZ0pTQXdlREl3S1NBbUlEQjRNV1lwS1NBdElERTdYRzVjYmlBZ0lDQWdJSFJvYVhNdVgyUmhkR0V1Wm1sc2JDZ3dMQ0IwYUdsekxteGxibWQwYUVsdVNXNTBjeXdnYmtsdWRITk9aV1ZrWldRcE8xeHVJQ0FnSUgxY2JpQWdJQ0IwYUdsekxsOXNaVzVuZEdnZ1BTQjJZV3gxWlR0Y2JpQWdJQ0IwYUdsekxsOTJaWEp6YVc5dUt5czdYRzRnSUgxY2JseHVJQ0J6ZEdGMGFXTWdabkp2YlVGdVpDaHpaWFF4T2lCQ2FYUkJjbkpoZVN3Z2MyVjBNam9nUW1sMFFYSnlZWGtwT2lCQ2FYUkJjbkpoZVNCN1hHNGdJQ0FnYVdZZ0tITmxkREV1WDJ4bGJtZDBhQ0FoUFNCelpYUXlMbDlzWlc1bmRHZ3BYRzRnSUNBZ0lDQjBhSEp2ZHlCdVpYY2dSWEp5YjNJb1lFeGxibWQwYUhNZ1pHbG1abVZ5SUNna2UzTmxkREV1WDJ4bGJtZDBhSDBnSVQwZ0pIdHpaWFF5TGw5c1pXNW5kR2g5S1dBcE8xeHVYRzRnSUNBZ1kyOXVjM1FnZEdWdGNDQTlJRzVsZHlCQ2FYUkJjbkpoZVNoelpYUXhMbDlzWlc1bmRHZ3BPMXh1SUNBZ0lIUmxiWEF1WDJ4bGJtZDBhQ0E5SUhObGRERXVYMnhsYm1kMGFEdGNiaUFnSUNCMFpXMXdMbDlrWVhSaElEMGdRbWwwUVhKeVlYa3VYMk55WldGMFpVSjFabVpsY2loMFpXMXdMbDlzWlc1bmRHZ3BPMXh1SUNBZ0lIUmxiWEF1WDNabGNuTnBiMjRnUFNBd08xeHVYRzRnSUNBZ1kyOXVjM1FnYkdWdUlEMGdjMlYwTVM1c1pXNW5kR2hKYmtsdWRITTdYRzRnSUNBZ1ptOXlJQ2hzWlhRZ2FTQTlJREE3SUdrZ1BDQnNaVzQ3SUdrckt5bGNiaUFnSUNBZ0lIUmxiWEF1WDJSaGRHRmJhVjBnUFNCelpYUXhMbDlrWVhSaFcybGRJQ1lnYzJWME1pNWZaR0YwWVZ0cFhUdGNibHh1SUNBZ0lISmxkSFZ5YmlCMFpXMXdPMXh1SUNCOVhHNWNiaUFnY0hKcGRtRjBaU0J6ZEdGMGFXTWdYMk55WldGMFpVSjFabVpsY2loc1pXNW5kR2c2SUc1MWJXSmxjaWs2SUZWcGJuUXpNa0Z5Y21GNUlIdGNiaUFnSUNCeVpYUjFjbTRnYm1WM0lGVnBiblF6TWtGeWNtRjVLRTFoZEdndVpteHZiM0lvS0d4bGJtZDBhQ0FySURCNE1XWXBJQzhnTUhneU1Da3BPMXh1SUNCOVhHNWNiaUFnYzNSaGRHbGpJR1p5YjIxV1lXeDFaWE1vZG1Gc2RXVnpPaUJCY25KaGVUeGliMjlzWldGdVBpazZJRUpwZEVGeWNtRjVJSHRjYmlBZ0lDQmpiMjV6ZENCMFpXMXdJRDBnYm1WM0lFSnBkRUZ5Y21GNUtIWmhiSFZsY3k1c1pXNW5kR2dwTzF4dUlDQWdJSFJsYlhBdVgzWmxjbk5wYjI0Z1BTQXdPMXh1WEc0Z0lDQWdabTl5SUNoc1pYUWdhU0E5SURBN0lHa2dQQ0IwWlcxd0xsOXNaVzVuZEdnN0lHa3JLeWtnZTF4dUlDQWdJQ0FnYVdZZ0tIWmhiSFZsYzF0cFhTbGNiaUFnSUNBZ0lDQWdkR1Z0Y0M1ZlpHRjBZVnROWVhSb0xtWnNiMjl5S0drZ0x5QXdlREl3S1YwZ2ZEMGdNU0E4UENBb0tHa2dKU0F3ZURJd0tTQW1JREI0TVdZcE8xeHVJQ0FnSUgxY2JpQWdJQ0J5WlhSMWNtNGdkR1Z0Y0R0Y2JpQWdmVnh1WEc0Z0lDOHZMeUJEYjI1emRISjFZM1J6SUdFZ1cwSnBkRk5sZEYwZ2IyWWdiR1Z1WjNSb0lGdGpiM1Z1ZEYwc0lIZG9aWEpsSUdsa2VDMTBhQ0JpYVhRZ2FYTWdaR1YwWlhKdGFXNWxaQ0JpZVNCaElHTmhiR3dnZEc4Z1cyWnNZV2RkSUNocFpIZ3BMbHh1SUNCemRHRjBhV01nWm5KdmJWTmxjU2hqYjNWdWREb2diblZ0WW1WeUxDQm1iR0ZuT2lCR2RXNWpkR2x2YmlrNklFSnBkRUZ5Y21GNUlIdGNiaUFnSUNCamIyNXpkQ0IwWlcxd0lEMGdibVYzSUVKcGRFRnljbUY1S0dOdmRXNTBLVHRjYmlBZ0lDQm1iM0lnS0d4bGRDQnBJRDBnTURzZ2FTQThJR052ZFc1ME95QXJLMmtwWEc0Z0lDQWdJQ0IwWlcxd0xuTmxkRUpwZENocExDQm1iR0ZuS0drcEtUdGNibHh1SUNBZ0lIUmxiWEF1WDNabGNuTnBiMjRnUFNBd08xeHVJQ0FnSUhKbGRIVnliaUIwWlcxd08xeHVJQ0I5WEc1Y2JpQWdMeTh2SUVOdmJuTjBjblZqZEhNZ1lTQmJRbWwwVTJWMFhTQm1jbTl0SUdFZ2MzUnlhVzVuSUZ0elhTQmpiMjUwWVdsdWFXNW5JQ2N3SnlCdmNpQW5NU2N1WEc0Z0lITjBZWFJwWXlCbWNtOXRVM1J5YVc1bktITTZJSE4wY21sdVp5azZJRUpwZEVGeWNtRjVJSHRjYmlBZ0lDQnlaWFIxY200Z1FtbDBRWEp5WVhrdVpuSnZiVk5sY1NoekxteGxibWQwYUN3Z0tHazZJRzUxYldKbGNpa2dQVDRnY3k1amFHRnlRWFFvYVNrZ1BUMGdKekVuS1R0Y2JpQWdmVnh1WEc0Z0lDOHZMeUJEYjI1emRISjFZM1J6SUdFZ1cwSnBkRk5sZEYwc0lHSmhjMlZrSUc5dUlHeGxibWQwYUNCYlgyeGxibWQwYUYwZ1lXNWtJR0o1ZEdVZ1lYSnlZWGtnVzE5a1lYUmhYUzVjYmlBZ2MzUmhkR2xqSUdaeWIyMVZhVzUwTXpKQmNuSmhlU2hmYkdWdVozUm9PaUJ1ZFcxaVpYSXNJRjlrWVhSaE9pQlZhVzUwTXpKQmNuSmhlU2s2SUVKcGRFRnljbUY1SUh0Y2JpQWdJQ0JqYjI1emRDQjBaVzF3SUQwZ2JtVjNJRUpwZEVGeWNtRjVLRjlzWlc1bmRHZ3BPMXh1SUNBZ0lIUmxiWEF1WDJSaGRHRWdQU0JmWkdGMFlUdGNiaUFnSUNCeVpYUjFjbTRnZEdWdGNEdGNiaUFnZlZ4dVhHNGdJQzh2THlCRVpYTmxjbWxoYkdsNlpYTWdZU0JiUW1sMFUyVjBYU0JtY205dElGdGllWFJsYzEwdVhHNGdJSE4wWVhScFl5Qm1jbTl0UW5sMFpYTW9ZbmwwWlhNNklGVnBiblE0UVhKeVlYa3BPaUJDYVhSQmNuSmhlU0I3WEc0Z0lDQWdZMjl1YzNRZ2JHVnVJRDBnWW5sMFpYTXViR1Z1WjNSb08xeHVJQ0FnSUdOdmJuTjBJSFJsYlhBZ1BTQnVaWGNnUW1sMFFYSnlZWGtvYkdWdUlDb2dPQ2s3WEc0Z0lDQWdkR1Z0Y0M1ZlpHRjBZU0E5SUc1bGR5QlZhVzUwTXpKQmNuSmhlU2hOWVhSb0xtWnNiMjl5S0Noc1pXNGdLeUF6S1NBdklEUXBLVHRjYmlBZ0lDQjBaVzF3TGw5c1pXNW5kR2dnUFNCc1pXNGdLaUE0TzF4dUlDQWdJR3hsZENCdWRXMHhJRDBnTUR0Y2JpQWdJQ0JzWlhRZ2JuVnRNaUE5SURBN1hHNWNiaUFnSUNCM2FHbHNaU0FvS0d4bGJpQXRJRzUxYlRJcElENDlJRFFwSUh0Y2JpQWdJQ0FnSUhSbGJYQXVYMlJoZEdGYmJuVnRNU3NyWFNBOUlDaGNiaUFnSUNBZ0lDQWdLQ2hpZVhSbGMxdHVkVzB5WFNBbUlEQjRabVlwSUh3Z0tDaGllWFJsYzF0dWRXMHlJQ3NnTVYwZ0ppQXdlR1ptS1NBOFBDQTRLU2tnZkZ4dUlDQWdJQ0FnSUNBb0tHSjVkR1Z6VzI1MWJUSWdLeUF5WFNBbUlEQjRabVlwSUR3OElEQjRNVEFwWEc0Z0lDQWdJQ0FwSUh3Z0tDaGllWFJsYzF0dWRXMHlJQ3NnTTEwZ0ppQXdlR1ptS1NBOFBDQXdlREU0S1R0Y2JseHVJQ0FnSUNBZ2JuVnRNaUFyUFNBME8xeHVJQ0FnSUgxY2JseHVJQ0FnSUdsbUlDaHNaVzRnTFNCdWRXMHlJRDA5SURNcFhHNGdJQ0FnSUNCMFpXMXdMbDlrWVhSaFcyNTFiVEZkSUQwZ0tHSjVkR1Z6VzI1MWJUSWdLeUF5WFNBbUlEQjRabVlwSUR3OElEQjRNVEE3WEc1Y2JpQWdJQ0JwWmlBb2JHVnVJQzBnYm5WdE1pQTlQU0F5S1Z4dUlDQWdJQ0FnZEdWdGNDNWZaR0YwWVZ0dWRXMHhYU0I4UFNBb1lubDBaWE5iYm5WdE1pQXJJREZkSUNZZ01IaG1aaWtnUER3Z09EdGNibHh1SUNBZ0lHbG1JQ2hzWlc0Z0xTQnVkVzB5SUQwOUlERXBYRzRnSUNBZ0lDQjBaVzF3TGw5a1lYUmhXMjUxYlRGZElIdzlJR0o1ZEdWelcyNTFiVEpkSUNZZ01IaG1aanRjYmx4dUlDQWdJSFJsYlhBdVgzWmxjbk5wYjI0Z1BTQXdPMXh1SUNBZ0lISmxkSFZ5YmlCMFpXMXdPMXh1SUNCOVhHNWNiaUFnZEc5VGRISnBibWNvS1RvZ2MzUnlhVzVuSUh0Y2JpQWdJQ0J5WlhSMWNtNGdZQ1I3ZEdocGN5NWZiR1Z1WjNSb2ZTQmlhWFJ6TENBa2UzUm9hWE11WTI5MWJuUkNhWFJ6S0hSeWRXVXBmU0J6WlhSZ08xeHVJQ0I5WEc1Y2JpQWdMeTh2SUZCbGNtWnZjbTF6SUdSbFpYQWdZMjl0Y0dGeWFYTnZiaUJ2WmlCMGQyOGdZbWwwYzJWMGN5NWNiaUFnWlhGMVlXeHpLRzkwYUdWeU9pQkNhWFJCY25KaGVTazZJR0p2YjJ4bFlXNGdlMXh1SUNBZ0lHbG1JQ2gwYUdseklEMDlJRzkwYUdWeUtTQnlaWFIxY200Z2RISjFaVHRjYmlBZ0lDQnBaaUFvYjNSb1pYSWdQVDBnYm5Wc2JDa2djbVYwZFhKdUlHWmhiSE5sTzF4dUlDQWdJR2xtSUNoMGFHbHpMbDlzWlc1bmRHZ2dJVDBnYjNSb1pYSXVYMnhsYm1kMGFDa2djbVYwZFhKdUlHWmhiSE5sTzF4dUlDQWdJR2xtSUNoMGFHbHpMbDlzWlc1bmRHZ2dQVDBnTUNrZ2NtVjBkWEp1SUhSeWRXVTdYRzVjYmlBZ0lDQm1iM0lnS0d4bGRDQnBJRDBnTURzZ2FTQThJSFJvYVhNdVgyUmhkR0V1YkdWdVozUm9JQzBnTVRzZ2FTc3JLVnh1SUNBZ0lDQWdhV1lnS0hSb2FYTXVYMlJoZEdGYmFWMGdJVDBnYjNSb1pYSXVYMlJoZEdGYmFWMHBJSEpsZEhWeWJpQm1ZV3h6WlR0Y2JseHVJQ0FnSUdadmNpQW9iR1YwSUdrZ1BTQW9kR2hwY3k1ZlpHRjBZUzVzWlc1bmRHZ2dMU0F4S1NBcUlEZzdJR2tnUENCMGFHbHpMbDlzWlc1bmRHZzdJR2tyS3lrZ2UxeHVJQ0FnSUNBZ2FXWWdLSFJvYVhNdVoyVjBRbWwwS0drcElDRTlJRzkwYUdWeUxtZGxkRUpwZENocEtTbGNiaUFnSUNBZ0lDQWdjbVYwZFhKdUlHWmhiSE5sTzF4dUlDQWdJSDFjYmlBZ0lDQnlaWFIxY200Z2RISjFaVHRjYmlBZ2ZWeHVYRzRnSUM4cUtpQkRiRzl1WlhNZ1lTQmlhWFJ6WlhRdUlDb3ZYRzRnSUdOc2IyNWxLQ2s2SUVKcGRFRnljbUY1SUh0Y2JpQWdJQ0JqYjI1emRDQmlhWFJCY25KaGVTQTlJRzVsZHlCQ2FYUkJjbkpoZVNnd0xDQm1ZV3h6WlNrN1hHNGdJQ0FnWW1sMFFYSnlZWGt1WDJSaGRHRWdQU0JWYVc1ME16SkJjbkpoZVM1bWNtOXRLSFJvYVhNdVgyUmhkR0VwT3lBdkx5QmxabVpsWTNScGRtVWdiR1Z1WjNSb09pQW9iR1Z1WjNSb1NXNUpiblJ6S1Z4dUlDQWdJR0pwZEVGeWNtRjVMbDlzWlc1bmRHZ2dQU0IwYUdsekxsOXNaVzVuZEdnN1hHNGdJQ0FnWW1sMFFYSnlZWGt1WDNabGNuTnBiMjRnUFNCMGFHbHpMbDkyWlhKemFXOXVPMXh1SUNBZ0lISmxkSFZ5YmlCaWFYUkJjbkpoZVR0Y2JpQWdmVnh1WEc0Z0lDOHFLaUJKYm1sMGFXRnNhWHBsY3lCaElHSnBkSE5sZEM0Z0tpOWNiaUFnYVc1cGRDaG1iR0ZuT2lCR2RXNWpkR2x2Yml3Z2JtOTBhV1o1T2lCaWIyOXNaV0Z1S1RvZ1FtbDBRWEp5WVhrZ2UxeHVJQ0FnSUhSb2FYTXVjMlYwUVd4c0tHWmhiSE5sTENCbVlXeHpaU2s3WEc1Y2JpQWdJQ0JtYjNJZ0tHeGxkQ0JwSUQwZ01Ec2dhU0E4SUhSb2FYTXVYMnhsYm1kMGFEc2dhU3NyS1NCN1hHNGdJQ0FnSUNCcFppQW9abXhoWnlocEtTbGNiaUFnSUNBZ0lDQWdkR2hwY3k1ZlpHRjBZVnROWVhSb0xtWnNiMjl5S0drZ0x5QXdlREl3S1YwZ2ZEMGdNU0E4UENBb0tHa2dKU0F3ZURJd0tTQW1JREI0TVdZcE8xeHVJQ0FnSUgxY2JseHVJQ0FnSUhSb2FYTXVhVzVqY21WdFpXNTBWbVZ5YzJsdmJpaHViM1JwWm5rcE8xeHVJQ0FnSUhKbGRIVnliaUIwYUdsek8xeHVJQ0I5WEc1Y2JpQWdMeTh2SUVsdWRtVnlkSE1nWVNCaWFYUnpaWFF1WEc0Z0lHbHVkbVZ5ZENodWIzUnBabmtnUFNCMGNuVmxLVG9nZG05cFpDQjdYRzRnSUNBZ1ptOXlJQ2hzWlhRZ2FTQTlJREE3SUdrZ1BDQjBhR2x6TGw5a1lYUmhMbXhsYm1kMGFEc2dhU3NyS1Z4dUlDQWdJQ0FnZEdocGN5NWZaR0YwWVZ0cFhTQmVQU0F0TVR0Y2JseHVJQ0FnSUhSb2FYTXVhVzVqY21WdFpXNTBWbVZ5YzJsdmJpaHViM1JwWm5rcE8xeHVJQ0I5WEc1Y2JpQWdMeTh2SUZObGRITWdZV3hzSUdKcGRITWdkRzhnVzNaaGJIVmxYU3dnYjNCMGFXOXVZV3hzZVNCemRYQndjbVZ6YzJsdVp5QnViM1JwWm1sallYUnBiMjV6TGx4dUlDQnpaWFJCYkd3b2RtRnNkV1U2SUdKdmIyeGxZVzRzSUc1dmRHbG1lU0E5SUdaaGJITmxLVG9nZG05cFpDQjdYRzRnSUNBZ1kyOXVjM1FnWm14aFozTWdQU0IyWVd4MVpTQS9JQzB4SURvZ01EdGNiaUFnSUNCamIyNXpkQ0JzWlc0Z1BTQjBhR2x6TG14bGJtZDBhRWx1U1c1MGN6dGNibHh1SUNBZ0lHWnZjaUFvYkdWMElHa2dQU0F3T3lCcElEd2diR1Z1T3lCcEt5c3BJQzh2ZEc5a2J6b2diM0IwYVcxcGVtVmNiaUFnSUNBZ0lIUm9hWE11WDJSaGRHRmJhVjBnUFNCbWJHRm5jenRjYmx4dUlDQWdJSFJvYVhNdWFXNWpjbVZ0Wlc1MFZtVnljMmx2YmlodWIzUnBabmtwTzF4dUlDQjlYRzVjYmlBZ0x5OHZJRk5sZEhNZ1ltbDBjeUJoZENCYmFXNWtaWGhsYzEwZ2NHOXphWFJwYjI0Z2RHOGdXM1poYkhWbFhTNWNiaUFnTHk4dklFTnNaV0Z5Y3lCMGFHVWdZbWwwYzJWMElHbG1JRnRqYkdWaGNsMGdabXhoWnlCcGN5QjBjblZsTGx4dUlDQXZMeThnUTJoaGJtZGxJRzV2ZEdsbWFXTmhkR2x2YmlCcGN5QnlZV2x6WldRZ2QyaGxiaUJiYm05MGFXWjVYU0JwY3lCMGNuVmxMbHh1SUNCelpYUkpibVJsZUdWektHbHVaR1Y0WlhNNklFRnljbUY1UEc1MWJXSmxjajRzSUhaaGJIVmxJRDBnZEhKMVpTd2dZMnhsWVhJZ1BTQjBjblZsTENCdWIzUnBabmtnUFNCMGNuVmxLVG9nZG05cFpDQjdYRzRnSUNBZ2FXWWdLR05zWldGeUtWeHVJQ0FnSUNBZ2RHaHBjeTV6WlhSQmJHd29JWFpoYkhWbExDQm1ZV3h6WlNrN1hHNWNiaUFnSUNCbWIzSWdLR052Ym5OMElHa2diMllnYVc1a1pYaGxjeWxjYmlBZ0lDQWdJSFJvYVhNdWMyVjBSbUZ6ZENocExDQjJZV3gxWlNrN1hHNWNiaUFnSUNCMGFHbHpMbWx1WTNKbGJXVnVkRlpsY25OcGIyNG9ibTkwYVdaNUtUdGNiaUFnZlZ4dVhHNGdJR1YyWlhKNVNXNWtaWGdvYVc1a1pYaGxjem9nUVhKeVlYazhiblZ0WW1WeVBpd2dkbUZzZFdVZ1BTQjBjblZsS1RvZ1ltOXZiR1ZoYmlCN1hHNGdJQ0FnWm05eUlDaGpiMjV6ZENCcGJtUmxlQ0J2WmlCcGJtUmxlR1Z6S1NCN1hHNGdJQ0FnSUNCcFppQW9kR2hwY3k1blpYUkNhWFFvYVc1a1pYZ3BJQ0U5SUhaaGJIVmxLVnh1SUNBZ0lDQWdJQ0J5WlhSMWNtNGdabUZzYzJVN1hHNGdJQ0FnZlZ4dUlDQWdJSEpsZEhWeWJpQjBjblZsTzF4dUlDQjlYRzVjYmlBZ1lXNTVTVzVrWlhnb2FXNWtaWGhsY3pvZ1FYSnlZWGs4Ym5WdFltVnlQaXdnZG1Gc2RXVWdQU0IwY25WbEtUb2dZbTl2YkdWaGJpQjdYRzRnSUNBZ1ptOXlJQ2hqYjI1emRDQnBibVJsZUNCdlppQnBibVJsZUdWektTQjdYRzRnSUNBZ0lDQnBaaUFvZEdocGN5NW5aWFJDYVhRb2FXNWtaWGdwSUQwOUlIWmhiSFZsS1Z4dUlDQWdJQ0FnSUNCeVpYUjFjbTRnZEhKMVpUdGNiaUFnSUNCOVhHNGdJQ0FnY21WMGRYSnVJR1poYkhObE8xeHVJQ0I5WEc1Y2JpQWdjMlYwVjJobGNtVW9ZMmhsWTJzNklFWjFibU4wYVc5dUxDQjJZV3gxWlNBOUlIUnlkV1VzSUdOc1pXRnlJRDBnZEhKMVpTd2dibTkwYVdaNUlEMGdkSEoxWlN3Z1lXeHNiM2REYkdWaGNpQTlJSFJ5ZFdVcE9pQjJiMmxrSUh0Y2JpQWdJQ0JwWmlBb1kyeGxZWElnSmlZZ1lXeHNiM2REYkdWaGNpbGNiaUFnSUNBZ0lIUm9hWE11YzJWMFFXeHNLQ0YyWVd4MVpTd2dabUZzYzJVcE8xeHVYRzRnSUNBZ2FXWWdLR0ZzYkc5M1EyeGxZWElwSUh0Y2JpQWdJQ0FnSUdadmNpQW9iR1YwSUdrZ1BTQXdPeUJwSUR3Z2RHaHBjeTVmYkdWdVozUm9PeUJwS3lzcElIdGNiaUFnSUNBZ0lDQWdhV1lnS0dOb1pXTnJLR2twS1Z4dUlDQWdJQ0FnSUNBZ0lIUm9hWE11YzJWMFJtRnpkQ2hwTENCMllXeDFaU2s3WEc0Z0lDQWdJQ0I5WEc0Z0lDQWdmU0JsYkhObElIdGNiaUFnSUNBZ0lHWnZjaUFvYkdWMElHa2dQU0F3T3lCcElEd2dkR2hwY3k1ZmJHVnVaM1JvT3lCcEt5c3BYRzRnSUNBZ0lDQWdJSFJvYVhNdWMyVjBSbUZ6ZENocExDQmphR1ZqYXlocEtTQS9JSFpoYkhWbElEb2dJWFpoYkhWbEtUdGNiaUFnSUNCOVhHNWNiaUFnSUNCMGFHbHpMbWx1WTNKbGJXVnVkRlpsY25OcGIyNG9ibTkwYVdaNUtUdGNiaUFnZlZ4dVhHNGdJR2RsZEZKaGJtZGxLR1p5YjIwNklHNTFiV0psY2l3Z2RHODZJRzUxYldKbGNpazZJRUpwZEVGeWNtRjVJSHRjYmlBZ0lDQjBhR2x6TG1GemMzVnlaVWx1VW1GdVoyVW9abkp2YlN3Z01Dd2dkR2hwY3k1ZmJHVnVaM1JvSUMwZ01Td2dKMlp5YjIwbktUdGNiaUFnSUNCMGFHbHpMbUZ6YzNWeVpVbHVVbUZ1WjJVb2RHOHNJREFzSUhSb2FYTXVYMnhsYm1kMGFDd2dKM1J2SnlrN1hHNGdJQ0FnWTI5dWMzUWdZWEp5T2lCQmNuSmhlVHhpYjI5c1pXRnVQaUE5SUZ0ZE8xeHVJQ0FnSUdadmNpQW9iR1YwSUdrZ1BTQm1jbTl0T3lCcElEd2dkRzg3SUNzcmFTbGNiaUFnSUNBZ0lHRnljaTV3ZFhOb0tIUm9hWE11WjJWMFFtbDBLR2twS1R0Y2JpQWdJQ0J5WlhSMWNtNGdRbWwwUVhKeVlYa3Vabkp2YlZaaGJIVmxjeWhoY25JcE8xeHVJQ0I5WEc1Y2JpQWdaMlYwVW1GdVoyVkJjMHhwYzNRb1puSnZiVG9nYm5WdFltVnlMQ0IwYnpvZ2JuVnRZbVZ5S1RvZ1ltOXZiR1ZoYmx0ZElIdGNiaUFnSUNCMGFHbHpMbUZ6YzNWeVpVbHVVbUZ1WjJVb1puSnZiU3dnTUN3Z2RHaHBjeTVmYkdWdVozUm9JQzBnTVN3Z0oyWnliMjBuS1R0Y2JpQWdJQ0IwYUdsekxtRnpjM1Z5WlVsdVVtRnVaMlVvZEc4c0lEQXNJSFJvYVhNdVgyeGxibWQwYUN3Z0ozUnZKeWs3WEc0Z0lDQWdZMjl1YzNRZ1lYSnlPaUJpYjI5c1pXRnVXMTBnUFNCYlhUdGNiaUFnSUNCbWIzSWdLR3hsZENCcElEMGdabkp2YlRzZ2FTQThJSFJ2T3lBcksya3BYRzRnSUNBZ0lDQmhjbkl1Y0hWemFDaDBhR2x6TG1kbGRFSnBkQ2hwS1NrN1hHNGdJQ0FnY21WMGRYSnVJR0Z5Y2p0Y2JpQWdmVnh1WEc1Y2JpQWdjMlYwVW1GdVoyVW9abkp2YlRvZ2JuVnRZbVZ5TENCMGJ6b2diblZ0WW1WeUxDQjJZV3gxWlRvZ1ltOXZiR1ZoYml3Z2JtOTBhV1o1SUQwZ2RISjFaU2s2SUVKcGRFRnljbUY1SUh0Y2JpQWdJQ0IwYUdsekxtRnpjM1Z5WlVsdVVtRnVaMlVvWm5KdmJTd2dNQ3dnZEdocGN5NWZiR1Z1WjNSb0lDMGdNU3dnSjJaeWIyMG5LVHRjYmlBZ0lDQjBhR2x6TG1GemMzVnlaVWx1VW1GdVoyVW9kRzhzSURBc0lIUm9hWE11WDJ4bGJtZDBhQ0F0SURFc0lDZDBieWNwTzF4dVhHNGdJQ0FnWTI5dWMzUWdjM1JoY25RZ1BTQk5ZWFJvTG0xcGJpaG1jbTl0TENCMGJ5azdYRzRnSUNBZ1kyOXVjM1FnWlc1a0lEMGdUV0YwYUM1dFlYZ29abkp2YlN3Z2RHOHBPMXh1WEc0Z0lDQWdMeTkwYjJSdk9pQnZjSFJwYldsNlpWeHVJQ0FnSUdsbUlDaDJZV3gxWlNrZ2UxeHVJQ0FnSUNBZ1ptOXlJQ2hzWlhRZ2FTQTlJSE4wWVhKME95QnBJRHc5SUdWdVpEc2dhU3NyS1Z4dUlDQWdJQ0FnSUNCMGFHbHpMbk5sZEZSeWRXVW9hU2s3WEc0Z0lDQWdmU0JsYkhObElIdGNiaUFnSUNBZ0lHWnZjaUFvYkdWMElHa2dQU0J6ZEdGeWREc2dhU0E4UFNCbGJtUTdJR2tyS3lsY2JpQWdJQ0FnSUNBZ2RHaHBjeTV6WlhSR1lXeHpaU2hwS1R0Y2JpQWdJQ0I5WEc1Y2JpQWdJQ0IwYUdsekxtbHVZM0psYldWdWRGWmxjbk5wYjI0b2JtOTBhV1o1S1R0Y2JpQWdJQ0J5WlhSMWNtNGdkR2hwY3p0Y2JpQWdmVnh1WEc0Z0lDOHZMeUJUWlhSeklHNGdjbUZ1Wkc5dGJIa2dZMmh2YzJWdUlHSnBkSE1nZEc4Z2RtRnNkV1VzSUhKbGJXRnBibWx1WnlCaWFYUnpJSFJ2SUNGMllXeDFaUzVjYmlBZ2MyVjBVbUZ1Wkc5dEtHNDZJRzUxYldKbGNpd2dkbUZzZFdVNklHSnZiMnhsWVc0c0lHNXZkR2xtZVNBOUlIUnlkV1VwT2lCMmIybGtJSHRjYmlBZ0lDQnBaaUFvYmlBOElEQWdmSHdnYmlBK0lIUm9hWE11WDJ4bGJtZDBhQ2xjYmlBZ0lDQWdJSFJvY205M0lHNWxkeUJGY25KdmNpZ25iaUJ0ZFhOMElHSmxJRDQ5SURBZ0ppWWdQRDBnUTI5MWJuUW5LVHRjYmx4dUlDQWdJR2xtSUNodUlENGdkR2hwY3k1ZmJHVnVaM1JvSUM4Z01pbGNiaUFnSUNBZ0lIUm9hWE11YzJWMFVtRnVaRzl0S0hSb2FYTXVYMnhsYm1kMGFDQXRJRzRzSUNGMllXeDFaU2s3WEc1Y2JpQWdJQ0IwYUdsekxuTmxkRUZzYkNnaGRtRnNkV1VwTzF4dVhHNGdJQ0FnWm05eUlDaHNaWFFnYXlBOUlEQTdJR3NnUENCdU95a2dlMXh1SUNBZ0lDQWdZMjl1YzNRZ2FTQTlJRTFoZEdndVpteHZiM0lvVFdGMGFDNXlZVzVrYjIwb0tTQXFJSFJvYVhNdVgyeGxibWQwYUNrN1hHNGdJQ0FnSUNCcFppQW9kR2hwY3k1blpYUkNhWFFvYVNrZ1BUMGdkbUZzZFdVcElHTnZiblJwYm5WbE8xeHVJQ0FnSUNBZ2RHaHBjeTV6WlhSR1lYTjBLR2tzSUhaaGJIVmxLVHRjYmlBZ0lDQWdJR3NyS3p0Y2JpQWdJQ0I5WEc1Y2JpQWdJQ0IwYUdsekxtbHVZM0psYldWdWRGWmxjbk5wYjI0b2JtOTBhV1o1S1R0Y2JpQWdmVnh1WEc0Z0lDOHZMeUJOYjJScFptbGxjeUJqZFhKeVpXNTBJR0pwZEhObGRDQmllU0J3WlhKbWIzSnRhVzVuSUhSb1pTQmlhWFIzYVhObElFRk9SQ0J2Y0dWeVlYUnBiMjRnWVdkaGFXNXpkQ0IwYUdWY2JpQWdMeTh2SUdOdmNuSmxjM0J2Ym1ScGJtY2daV3hsYldWdWRITWdhVzRnZEdobElITndaV05wWm1sbFpDQmlhWFJ6WlhRdVhHNGdJR0Z1WkNoMllXeDFaVG9nUW1sMFFYSnlZWGtzSUc1dmRHbG1lU0E5SUhSeWRXVXBPaUJDYVhSQmNuSmhlU0I3WEc0Z0lDQWdhV1lnS0hSb2FYTXVYMnhsYm1kMGFDQWhQU0IyWVd4MVpTNWZiR1Z1WjNSb0tWeHVJQ0FnSUNBZ2RHaHliM2NnYm1WM0lFVnljbTl5S0NkQmNuSmhlU0JzWlc1bmRHaHpJR1JwWm1abGNpNG5LVHRjYmx4dUlDQWdJR1p2Y2lBb2JHVjBJR2tnUFNBd0xDQnNaVzRnUFNCMGFHbHpMbXhsYm1kMGFFbHVTVzUwY3pzZ2FTQThJR3hsYmpzZ2FTc3JLVnh1SUNBZ0lDQWdkR2hwY3k1ZlpHRjBZVnRwWFNBbVBTQjJZV3gxWlM1ZlpHRjBZVnRwWFR0Y2JseHVJQ0FnSUhSb2FYTXVhVzVqY21WdFpXNTBWbVZ5YzJsdmJpaHViM1JwWm5rcE8xeHVJQ0FnSUhKbGRIVnliaUIwYUdsek8xeHVJQ0I5WEc1Y2JpQWdMeTh2SUZCbGNtWnZjbTF6SUhSb1pTQmlhWFIzYVhObElFRk9SQ0JPVDFRZ2IzQmxjbUYwYVc5dUlHOXVJSFJvWlNCbGJHVnRaVzUwY3lCcGJpQjBhR1VnWTNWeWNtVnVkQ0JpYVhSelpYUmNiaUFnTHk4dklHRm5ZV2x1YzNRZ2RHaGxJR052Y25KbGMzQnZibVJwYm1jZ1pXeGxiV1Z1ZEhNZ2FXNGdkR2hsSUhOd1pXTnBabWxsWkNCaWFYUnpaWFF1WEc0Z0lHRnVaRTV2ZENoMllXeDFaVG9nUW1sMFFYSnlZWGtzSUc1dmRHbG1lU0E5SUhSeWRXVXBPaUJDYVhSQmNuSmhlU0I3WEc0Z0lDQWdhV1lnS0hSb2FYTXVYMnhsYm1kMGFDQWhQU0IyWVd4MVpTNWZiR1Z1WjNSb0tWeHVJQ0FnSUNBZ2RHaHliM2NnYm1WM0lFVnljbTl5S0NkQmNuSmhlU0JzWlc1bmRHaHpJR1JwWm1abGNpNG5LVHRjYmx4dUlDQWdJR052Ym5OMElHeGxiaUE5SUhSb2FYTXViR1Z1WjNSb1NXNUpiblJ6TzF4dUlDQWdJR1p2Y2lBb2JHVjBJRzUxYlRJZ1BTQXdPeUJ1ZFcweUlEd2diR1Z1T3lCdWRXMHlLeXNwWEc0Z0lDQWdJQ0IwYUdsekxsOWtZWFJoVzI1MWJUSmRJQ1k5SUg1MllXeDFaUzVmWkdGMFlWdHVkVzB5WFR0Y2JseHVJQ0FnSUhSb2FYTXVhVzVqY21WdFpXNTBWbVZ5YzJsdmJpaHViM1JwWm5rcE8xeHVJQ0FnSUhKbGRIVnliaUIwYUdsek8xeHVJQ0I5WEc1Y2JpQWdMeTh2SUZCbGNtWnZjbTF6SUhSb1pTQmlhWFIzYVhObElFNVBWQ0JCVGtRZ2IzQmxjbUYwYVc5dUlHOXVJSFJvWlNCbGJHVnRaVzUwY3lCcGJpQjBhR1VnWTNWeWNtVnVkQ0JpYVhSelpYUmNiaUFnTHk4dklHRm5ZV2x1YzNRZ2RHaGxJR052Y25KbGMzQnZibVJwYm1jZ1pXeGxiV1Z1ZEhNZ2FXNGdkR2hsSUhOd1pXTnBabWxsWkNCaWFYUnpaWFF1WEc0Z0lHNXZkRUZ1WkNoMllXeDFaVG9nUW1sMFFYSnlZWGtzSUc1dmRHbG1lU0E5SUhSeWRXVXBPaUJDYVhSQmNuSmhlU0I3WEc0Z0lDQWdhV1lnS0hSb2FYTXVYMnhsYm1kMGFDQWhQU0IyWVd4MVpTNWZiR1Z1WjNSb0tWeHVJQ0FnSUNBZ2RHaHliM2NnYm1WM0lFVnljbTl5S0NkQmNuSmhlU0JzWlc1bmRHaHpJR1JwWm1abGNpNG5LVHRjYmx4dUlDQWdJR1p2Y2lBb2JHVjBJR2tnUFNBd0xDQnNaVzRnUFNCMGFHbHpMbXhsYm1kMGFFbHVTVzUwY3pzZ2FTQThJR3hsYmpzZ2FTc3JLVnh1SUNBZ0lDQWdkR2hwY3k1ZlpHRjBZVnRwWFNBOUlDaCtkR2hwY3k1ZlpHRjBZVnRwWFNrZ0ppQjJZV3gxWlM1ZlpHRjBZVnRwWFR0Y2JseHVJQ0FnSUhSb2FYTXVhVzVqY21WdFpXNTBWbVZ5YzJsdmJpaHViM1JwWm5rcE8xeHVJQ0FnSUhKbGRIVnliaUIwYUdsek8xeHVJQ0I5WEc1Y2JpQWdMeTh2SUVsdWRtVnlkSE1nWVd4c0lHSnBkQ0IyWVd4MVpYTWdhVzRnZEdobElHTjFjbkpsYm5RZ1ltbDBjMlYwWEc0Z0lHNXZkQ2h1YjNScFpua2dQU0IwY25WbEtUb2dRbWwwUVhKeVlYa2dlMXh1SUNBZ0lHWnZjaUFvYkdWMElHa2dQU0F3TENCc1pXNGdQU0IwYUdsekxteGxibWQwYUVsdVNXNTBjenNnYVNBOElHeGxianNnYVNzcktWeHVJQ0FnSUNBZ2RHaHBjeTVmWkdGMFlWdHBYU0E5SUg1MGFHbHpMbDlrWVhSaFcybGRPMXh1WEc0Z0lDQWdkR2hwY3k1cGJtTnlaVzFsYm5SV1pYSnphVzl1S0c1dmRHbG1lU2s3WEc0Z0lDQWdjbVYwZFhKdUlIUm9hWE03WEc0Z0lIMWNibHh1SUNBdkx5OGdVR1Z5Wm05eWJYTWdkR2hsSUdKcGRIZHBjMlVnVDFJZ2IzQmxjbUYwYVc5dUlHOXVJSFJvWlNCbGJHVnRaVzUwY3lCcGJpQjBhR1VnWTNWeWNtVnVkQ0JpYVhSelpYUmNiaUFnTHk4dklHRm5ZV2x1YzNRZ2RHaGxJR052Y25KbGMzQnZibVJwYm1jZ1pXeGxiV1Z1ZEhNZ2FXNGdkR2hsSUhOd1pXTnBabWxsWkNCaWFYUnpaWFF1WEc0Z0lHOXlLSFpoYkhWbE9pQkNhWFJCY25KaGVTd2dibTkwYVdaNUlEMGdkSEoxWlNrZ2UxeHVJQ0FnSUdsbUlDaDBhR2x6TGw5c1pXNW5kR2dnSVQwZ2RtRnNkV1V1WDJ4bGJtZDBhQ2xjYmlBZ0lDQWdJSFJvY205M0lHNWxkeUJGY25KdmNpZ25RWEp5WVhrZ2JHVnVaM1JvY3lCa2FXWm1aWEl1SnlrN1hHNWNiaUFnSUNCbWIzSWdLR3hsZENCcElEMGdNQ3dnYkdWdUlEMGdkR2hwY3k1c1pXNW5kR2hKYmtsdWRITTdJR2tnUENCc1pXNDdJR2tyS3lsY2JpQWdJQ0FnSUhSb2FYTXVYMlJoZEdGYmFWMGdmRDBnZG1Gc2RXVXVYMlJoZEdGYmFWMDdYRzVjYmlBZ0lDQjBhR2x6TG1sdVkzSmxiV1Z1ZEZabGNuTnBiMjRvYm05MGFXWjVLVHRjYmlBZ0lDQnlaWFIxY200Z2RHaHBjenRjYmlBZ2ZWeHVYRzRnSUM4dkx5QlFaWEptYjNKdGN5QjBhR1VnWW1sMGQybHpaU0JsZUdOc2RYTnBkbVVnVDFJZ2IzQmxjbUYwYVc5dUlHOXVJSFJvWlNCbGJHVnRaVzUwY3lCcGJpQjBhR1VnWTNWeWNtVnVkQ0JpYVhSelpYUmNiaUFnTHk4dklHRm5ZV2x1YzNRZ2RHaGxJR052Y25KbGMzQnZibVJwYm1jZ1pXeGxiV1Z1ZEhNZ2FXNGdkR2hsSUhOd1pXTnBabWxsWkNCaWFYUnpaWFF1WEc0Z0lIaHZjaWgyWVd4MVpUb2dRbWwwUVhKeVlYa3NJRzV2ZEdsbWVTQTlJSFJ5ZFdVcElIdGNiaUFnSUNCcFppQW9kR2hwY3k1ZmJHVnVaM1JvSUNFOUlIWmhiSFZsTGw5c1pXNW5kR2dwWEc0Z0lDQWdJQ0IwYUhKdmR5QnVaWGNnUlhKeWIzSW9KMEZ5Y21GNUlHeGxibWQwYUhNZ1pHbG1abVZ5TGljcE8xeHVYRzRnSUNBZ1ptOXlJQ2hzWlhRZ2FTQTlJREFzSUd4bGJpQTlJSFJvYVhNdWJHVnVaM1JvU1c1SmJuUnpPeUJwSUR3Z2JHVnVPeUJwS3lzcFhHNGdJQ0FnSUNCMGFHbHpMbDlrWVhSaFcybGRJRjQ5SUhaaGJIVmxMbDlrWVhSaFcybGRPMXh1WEc0Z0lDQWdkR2hwY3k1cGJtTnlaVzFsYm5SV1pYSnphVzl1S0c1dmRHbG1lU2s3WEc0Z0lDQWdjbVYwZFhKdUlIUm9hWE03WEc0Z0lIMWNibHh1SUNBdkx5OGdTVzV6WlhKMGN5QnVJREF0WW1sMGN5QmhkQ0J3YjNOcGRHbHZiaUJ3YjNNc0lISmxjMmw2YVc1bklITmxiR1lnWVc1a0lITm9hV1owYVc1bklHSnBkSE1nWVhCd2NtOXdjbWxoZEdWc2VTNWNiaUFnYVc1elpYSjBRWFFvY0c5ek9pQnVkVzFpWlhJc0lHNDZJRzUxYldKbGNpd2dabXhoWnlBOUlHWmhiSE5sS1RvZ2RtOXBaQ0I3WEc0Z0lDQWdkR2hwY3k1aGMzTjFjbVZKYmxKaGJtZGxLSEJ2Y3l3Z01Dd2dkR2hwY3k1ZmJHVnVaM1JvTENBbmNHOXpKeWs3WEc1Y2JpQWdJQ0JwWmlBb2JpQTlQU0F3S1NCeVpYUjFjbTQ3WEc1Y2JpQWdJQ0F2TDFSUFJFODZJRzl3ZEdsdGFYcGxYRzRnSUNBZ0x5OTBhR1VnYlc5emRDQndjbWx0YVhScGRtVWdhVzF3YkdWdFpXNTBZWFJwYjI0c0lHOXdkR2x0YVhwbElHbDBJR3hoZEdWeUlWeHVYRzRnSUNBZ0x5OGdZbVZuYVc1VmNHUmhkR1VvS1R0Y2JpQWdJQ0JqYjI1emRDQnZiR1JzWlc1bmRHZ2dQU0IwYUdsekxsOXNaVzVuZEdnN1hHNGdJQ0FnZEdocGN5NXpaWFJNWlc1bmRHZ29kR2hwY3k1ZmJHVnVaM1JvSUNzZ2JpazdYRzVjYmlBZ0lDQXZMMmxtSUNnaFkyOXVkR0ZwYm5Nb0lXWnNZV2NwS1NCeVpYUjFjbTQ3SUM4dklHNXZkR2hwYm1jZ2RHOGdaRzljYmx4dUlDQWdJR1p2Y2lBb2JHVjBJR2tnUFNCdmJHUnNaVzVuZEdnZ0xTQXhPeUJwSUQ0OUlIQnZjenNnYVMwdEtWeHVJQ0FnSUNBZ2RHaHBjeTV6WlhSQ2FYUW9hU0FySUc0c0lIUm9hWE11WjJWMFFtbDBLR2twS1R0Y2JseHVJQ0FnSUdadmNpQW9iR1YwSUdrZ1BTQndiM003SUdrZ1BDQndiM01nS3lCdU95QnBLeXNwWEc0Z0lDQWdJQ0IwYUdsekxuTmxkRUpwZENocExDQm1iR0ZuS1R0Y2JseHVJQ0FnSUM4dklHVnVaRlZ3WkdGMFpTZ3BPMXh1SUNCOVhHNWNiaUFnTHk4dklFUmxiR1YwWlhNZ2JpQmlhWFJ6SUdKbFoybHVibWx1WnlCaGRDQndiM05wZEdsdmJpQndiM01zSUhKbGMybDZhVzVuSUhObGJHWWdZVzVrSUhOb2FXWjBhVzVuSUhKbGJXRnBibWx1WjF4dUlDQXZMeThnWW1sMGN5QmhjSEJ5YjNCeWFXRjBaV3g1TGx4dUlDQnlaVzF2ZG1WQmRDaHdiM002SUc1MWJXSmxjaXdnYmlBOUlERXBPaUIyYjJsa0lIdGNiaUFnSUNBdkx5QjBhR1VnYlc5emRDQndjbWx0YVhScGRtVWdhVzF3YkdWdFpXNTBZWFJwYjI0c0lHOXdkR2x0YVhwbElHbDBJR3hoZEdWeUlWeHVJQ0FnSUdsbUlDaHVJRHdnTUNsY2JpQWdJQ0FnSUhSb2NtOTNJRzVsZHlCRmNuSnZjaWduYmlCallXNXViM1FnWW1VZ2JtVm5ZWFJwZG1VbktUdGNibHh1SUNBZ0lIUm9hWE11WVhOemRYSmxTVzVTWVc1blpTaHdiM01zSURBc0lIUm9hWE11WDJ4bGJtZDBhQ0F0SUc0c0lDZHdiM01uS1R0Y2JseHVJQ0FnSUdsbUlDaDBhR2x6TG1OdmJuUmhhVzV6S0hSeWRXVXBLU0I3WEc0Z0lDQWdJQ0JtYjNJZ0tHeGxkQ0JwSUQwZ2NHOXpPeUJwSUR3Z2RHaHBjeTVmYkdWdVozUm9JQzBnYmpzZ2FTc3JLVnh1SUNBZ0lDQWdJQ0IwYUdsekxuTmxkRUpwZENocExDQjBhR2x6TG1kbGRFSnBkQ2hwSUNzZ2Jpa3BPMXh1SUNBZ0lIMWNibHh1SUNBZ0lIUm9hWE11YzJWMFRHVnVaM1JvS0hSb2FYTXVYMnhsYm1kMGFDQXRJRzRwTzF4dUlDQjlYRzVjYmlBZ2NtVnRiM1psUW5sTllYTnJLRzFoYzJzNklFSnBkRUZ5Y21GNUxDQm1iR0ZuSUQwZ2RISjFaU2s2SUVKcGRFRnljbUY1SUh0Y2JpQWdJQ0JwWmlBb2RHaHBjeTVmYkdWdVozUm9JQ0U5SUcxaGMyc3ViR1Z1WjNSb0tWeHVJQ0FnSUNBZ2RHaHliM2NnYm1WM0lFVnljbTl5S0Nkc1pXNW5kR2dnSVQwZ2JXRnpheTVzWlc1bmRHZ25LVHRjYmx4dUlDQWdJR2xtSUNodFlYTnJJRDA5SUhSb2FYTXBJSHNnTHk4Z2JtOGdibVZsWkNCMGJ5QnBkR1Z5WVhSbFhHNGdJQ0FnSUNCMGFHbHpMbk5sZEV4bGJtZDBhQ2h0WVhOckxtTnZkVzUwUW1sMGN5Z2habXhoWnlrcE8xeHVJQ0FnSUNBZ2RHaHBjeTV6WlhSQmJHd29JV1pzWVdjcE8xeHVJQ0FnSUgwZ1pXeHpaU0I3WEc0Z0lDQWdJQ0JzWlhRZ1pITjBTV1I0SUQwZ01EdGNibHh1SUNBZ0lDQWdabTl5SUNoc1pYUWdjM0pqU1dSNElEMGdMVEU3SUNoemNtTkpaSGdnUFNCdFlYTnJMbVpwYm1ST1pYaDBLSE55WTBsa2VDd2dJV1pzWVdjcEtTQWhQU0F0TVRzcFhHNGdJQ0FnSUNBZ0lIUm9hWE11YzJWMFJtRnpkQ2hrYzNSSlpIZ3JLeXdnZEdocGN5NW5aWFJDYVhRb2MzSmpTV1I0S1NrN1hHNWNiaUFnSUNBZ0lIUm9hWE11WDJ4bGJtZDBhQ0E5SUdSemRFbGtlRHRjYmlBZ0lDQWdJSFJvYVhNdVgzWmxjbk5wYjI0ckt6dGNiaUFnSUNCOVhHNWNiaUFnSUNCeVpYUjFjbTRnZEdocGN6dGNiaUFnZlZ4dVhHNGdJQzh2THlCVGFXMXBiR0Z5SUhSdklIUm9aU0JiWFNCdmNHVnlZWFJ2Y2k1Y2JpQWdaMlYwUW1sMEtIQnZjem9nYm5WdFltVnlLVG9nWW05dmJHVmhiaUI3WEc0Z0lDQWdjbVYwZFhKdUlDaDBhR2x6TGw5a1lYUmhXMDFoZEdndVpteHZiM0lvY0c5eklDOGdNSGd5TUNsZElDWWdLREVnUER3Z0tIQnZjeUFtSURCNE1XWXBLU2tnSVQwZ01EdGNiaUFnZlZ4dVhHNGdJQzh2THlCVGFXMXBiR0Z5SUhSdklIUm9aU0JiWFNCdmNHVnlZWFJ2Y2k1Y2JpQWdjMlYwUW1sMEtIQnZjem9nYm5WdFltVnlMQ0JpYVhRNklHSnZiMnhsWVc0c0lHNXZkR2xtZVNBOUlIUnlkV1VwSUh0Y2JpQWdJQ0IwYUdsekxuTmxkRVpoYzNRb2NHOXpMQ0JpYVhRcE8xeHVJQ0FnSUdsbUlDaHViM1JwWm5rcFhHNGdJQ0FnSUNCMGFHbHpMbDkyWlhKemFXOXVLeXM3WEc0Z0lDQWdaV3h6WlZ4dUlDQWdJQ0FnZEdocGN5NWZkbVZ5YzJsdmJpc3JPMXh1SUNCOVhHNWNiaUFnTHk4dklGTmxkSE1nVzJsZExYUm9JR0pwZENCMGJ5QmJkbUZzZFdWZExDQmtiMlZ6SUc1dmRDQmphR1ZqYXlCaWIzVnVaSE1zSUdSdlpYTWdibTkwSUdsdVkzSmxiV1Z1ZENCMlpYSnphVzl1WEc0Z0lITmxkRVpoYzNRb2FUb2diblZ0WW1WeUxDQjJZV3gxWlRvZ1ltOXZiR1ZoYmlrNklIWnZhV1FnZTF4dUlDQWdJR2xtSUNoMllXeDFaU2xjYmlBZ0lDQWdJSFJvYVhNdVgyUmhkR0ZiVFdGMGFDNW1iRzl2Y2locElDOGdNSGd5TUNsZElIdzlJREVnUER3Z0tHa2dKaUF3ZURGbUtUdGNiaUFnSUNCbGJITmxYRzRnSUNBZ0lDQjBhR2x6TGw5a1lYUmhXMDFoZEdndVpteHZiM0lvYVNBdklEQjRNakFwWFNBbVBTQitLREVnUER3Z0tHa2dKaUF3ZURGbUtTazdYRzRnSUgxY2JseHVJQ0J6WlhSVWNuVmxLSEJ2Y3pvZ2JuVnRZbVZ5S1RvZ2RtOXBaQ0I3WEc0Z0lDQWdkR2hwY3k1ZlpHRjBZVnROWVhSb0xtWnNiMjl5S0hCdmN5QXZJREI0TWpBcFhTQjhQU0F4SUR3OElDaHdiM01nSmlBd2VERm1LVHRjYmlBZ2ZWeHVYRzRnSUhObGRFWmhiSE5sS0hCdmN6b2diblZ0WW1WeUtTQjdYRzRnSUNBZ2RHaHBjeTVmWkdGMFlWdE5ZWFJvTG1ac2IyOXlLSEJ2Y3lBdklEQjRNakFwWFNBbVBTQitLREVnUER3Z0tIQnZjeUFtSURCNE1XWXBLVHRjYmlBZ2ZWeHVYRzRnSUhSeWRXVkRiM1Z1ZENncE9pQnVkVzFpWlhJZ2UxeHVJQ0FnSUhKbGRIVnliaUIwYUdsekxtTnZkVzUwUW1sMGN5aDBjblZsS1R0Y2JpQWdmVnh1WEc0Z0lHWmhiSE5sUTI5MWJuUW9LVG9nYm5WdFltVnlJSHRjYmlBZ0lDQnlaWFIxY200Z2RHaHBjeTVqYjNWdWRFSnBkSE1vWm1Gc2MyVXBPMXh1SUNCOVhHNWNiaUFnTHk4dklFTnZkVzUwY3lCaWFYUnpJRzltSUhSb1pTQnpjR1ZqYVdacFpXUWdkbUZzZFdVdVhHNGdJR052ZFc1MFFtbDBjeWgyWVd4MVpUb2dZbTl2YkdWaGJpazZJRzUxYldKbGNpQjdYRzRnSUNBZ2FXWWdLSFJvYVhNdVgyeGxibWQwYUNBOVBTQXdLU0J5WlhSMWNtNGdNRHRjYmx4dUlDQWdJR2xtSUNoMGFHbHpMbDl6Wld4bFkzUmxaRU52ZFc1MFZtVnljMmx2YmlBaFBTQjBhR2x6TGw5MlpYSnphVzl1S1NCN1hHNGdJQ0FnSUNCMGFHbHpMbDl6Wld4bFkzUmxaRU52ZFc1MElEMGdNRHRjYmlBZ0lDQWdJR052Ym5OMElHeGxiaUE5SUhSb2FYTXViR1Z1WjNSb1NXNUpiblJ6TzF4dUlDQWdJQ0FnYkdWMElHa2dQU0F3TzF4dUlDQWdJQ0FnWm05eUlDZzdJR2tnUENCc1pXNGdMU0F4T3lCcEt5c3BJSHRjYmlBZ0lDQWdJQ0FnWm05eUlDaHNaWFFnYXlBOUlIUm9hWE11WDJSaGRHRmJhVjA3SUdzZ0lUMGdNRHNnYXlBK1BqNDlJRGdwSUhzZ0x5OTBiMlJ2T2lCallYTjBJR1JoZEdGYmFWMGdkRzhnZFdsdWRGeHVJQ0FnSUNBZ0lDQWdJSFJvYVhNdVgzTmxiR1ZqZEdWa1EyOTFiblFnS3owZ1FtbDBRWEp5WVhrdVgyOXVRbWwwUTI5MWJuUmJheUFtSURCNFptWmRPMXh1SUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0I5WEc1Y2JpQWdJQ0FnSUM4dklGUm9aU0JzWVhOMElHbHVkQzVjYmlBZ0lDQWdJR3hsZENCcklEMGdkR2hwY3k1ZlpHRjBZVnRwWFR0Y2JpQWdJQ0FnSUdOdmJuTjBJSEpsYldGcGJtbHVaMEpwZEhNZ1BTQjBhR2x6TGw5c1pXNW5kR2dnSmlBd2VERm1PMXh1SUNBZ0lDQWdhV1lnS0hKbGJXRnBibWx1WjBKcGRITWdJVDBnTUNrZ0x5b2dhV1lnY21WdFlXbHVhVzVuUW1sMGN5QTlQU0F3TENCMGFHVWdiR0Z6ZENCcGJuUWdhWE1nWm5Wc2JIa2dkWE5sWkNCaGJtUWdRVXhNSUdKcGRITWdjMmh2ZFd4a0lHSmxJR3hsWm5RZ1lYTWdhWE1nS2k5Y2JpQWdJQ0FnSUNBZ2F5QW1QU0IrS0NnME1qazBPVFkzTWprMUtTQThQQ0J5WlcxaGFXNXBibWRDYVhSektUdGNibHh1SUNBZ0lDQWdabTl5SUNnN0lHc2dJVDBnTURzZ2F5QStQajQ5SURncFhHNGdJQ0FnSUNBZ0lIUm9hWE11WDNObGJHVmpkR1ZrUTI5MWJuUWdLejBnUW1sMFFYSnlZWGt1WDI5dVFtbDBRMjkxYm5SYmF5QW1JREI0Wm1aZE8xeHVYRzRnSUNBZ0lDQjBhR2x6TGw5elpXeGxZM1JsWkVOdmRXNTBWbVZ5YzJsdmJpQTlJSFJvYVhNdVgzWmxjbk5wYjI0N1hHNGdJQ0FnZlZ4dVhHNGdJQ0FnY21WMGRYSnVJQ2gyWVd4MVpTQS9JSFJvYVhNdVgzTmxiR1ZqZEdWa1EyOTFiblFnT2lCMGFHbHpMbDlzWlc1bmRHZ2dMU0IwYUdsekxsOXpaV3hsWTNSbFpFTnZkVzUwS1R0Y2JpQWdmVnh1WEc0Z0lDOHZMeUJTWlhSMWNtNXpJR0VnYm5WdFltVnlJRzltSUhObGRDQmlhWFJ6SUhkb1pYSmxJR0ZzYzI4Z1cyTm9aV05yWFNCcGN5QjBjblZsWEc0Z0lHTnZkVzUwVjJobGNtVW9ZMmhsWTJzNklFWjFibU4wYVc5dUtUb2diblZ0WW1WeUlIdGNiaUFnSUNCc1pYUWdjbVZ6ZFd4MElEMGdNRHRjYmlBZ0lDQnBaaUFvZEdocGN5NTBjblZsUTI5MWJuUW9LU0E5UFNCMGFHbHpMbDlzWlc1bmRHZ3BJSHRjYmlBZ0lDQWdJR1p2Y2lBb2JHVjBJR2tnUFNBd095QnBJRHdnZEdocGN5NWZiR1Z1WjNSb095QnBLeXNwWEc0Z0lDQWdJQ0FnSUhKbGMzVnNkQ0FyUFNCamFHVmpheWhwS1NBL0lERWdPaUF3TzF4dUlDQWdJSDBnWld4elpTQjdYRzRnSUNBZ0lDQm1iM0lnS0d4bGRDQnBJRDBnTFRFN0lDaHBJRDBnZEdocGN5NW1hVzVrVG1WNGRDaHBMQ0IwY25WbEtTa2dJVDBnTFRFN0tWeHVJQ0FnSUNBZ0lDQnlaWE4xYkhRZ0t6MGdZMmhsWTJzb2FTa2dQeUF4SURvZ01EdGNiaUFnSUNCOVhHNGdJQ0FnY21WMGRYSnVJSEpsYzNWc2REdGNiaUFnZlZ4dVhHNGdJQzh2THlCUVpYSm1iM0p0Y3lCaWFYUWdYQ0poYm1SY0lpQmhibVFnWTI5MWJuUnpJR0pwZEhNZ2IyWWdkR2hsSUhOd1pXTnBabWxsWkNCMllXeDFaU3dnZDJsMGFHOTFkQ0JpYVhSelpYUWdiVzlrYVdacFkyRjBhVzl1TGx4dUlDQmhibVJYYVhSb1EyOTFiblJDYVhSektITmxZMjl1WkRvZ1FtbDBRWEp5WVhrc0lIWmhiSFZsT2lCaWIyOXNaV0Z1S1RvZ2JuVnRZbVZ5SUh0Y2JpQWdJQ0JwWmlBb2RHaHBjeTVmYkdWdVozUm9JRDA5SURBcElISmxkSFZ5YmlBd08xeHVYRzRnSUNBZ2JHVjBJR052ZFc1MElEMGdNRHRjYmlBZ0lDQmpiMjV6ZENCc1pXNGdQU0IwYUdsekxteGxibWQwYUVsdVNXNTBjenRjYmlBZ0lDQnNaWFFnYVNBOUlEQTdYRzRnSUNBZ1ptOXlJQ2c3SUdrZ1BDQnNaVzRnTFNBeE95QnBLeXNwSUh0Y2JpQWdJQ0FnSUdadmNpQW9iR1YwSUdzZ1BTQjBhR2x6TGw5a1lYUmhXMmxkSUNZZ2MyVmpiMjVrTGw5a1lYUmhXMmxkT3lCcklDRTlJREE3SUdzZ1BqNCtQU0E0S1Z4dUlDQWdJQ0FnSUNCamIzVnVkQ0FyUFNCQ2FYUkJjbkpoZVM1ZmIyNUNhWFJEYjNWdWRGdHJJQ1lnTUhobVpsMDdYRzRnSUNBZ2ZWeHVYRzRnSUNBZ0x5OGdWR2hsSUd4aGMzUWdhVzUwTGx4dUlDQWdJR3hsZENCcklEMGdkR2hwY3k1ZlpHRjBZVnRwWFNBbUlITmxZMjl1WkM1ZlpHRjBZVnRwWFR0Y2JpQWdJQ0JqYjI1emRDQnlaVzFoYVc1cGJtZENhWFJ6SUQwZ2RHaHBjeTVmYkdWdVozUm9JQ1lnTUhneFpqdGNiaUFnSUNCcFppQW9jbVZ0WVdsdWFXNW5RbWwwY3lBaFBTQXdLVnh1SUNBZ0lDQWdheUFtUFNCK0tDZzBNamswT1RZM01qazFLU0E4UENCeVpXMWhhVzVwYm1kQ2FYUnpLVHRjYmlBZ0lDQm1iM0lnS0RzZ2F5QWhQU0F3T3lCcklENCtQajBnT0NsY2JpQWdJQ0FnSUdOdmRXNTBJQ3M5SUVKcGRFRnljbUY1TGw5dmJrSnBkRU52ZFc1MFcyc2dKaUF3ZUdabVhUdGNibHh1SUNBZ0lISmxkSFZ5YmlBb2RtRnNkV1VnUHlCamIzVnVkQ0E2SUhSb2FYTXVYMnhsYm1kMGFDQXRJR052ZFc1MEtUdGNiaUFnZlZ4dVhHNGdJR05zWldGeUtDazZJSFp2YVdRZ2UxeHVJQ0FnSUhSb2FYTXVjMlYwVEdWdVozUm9LREFwTzF4dUlDQjlYRzVjYmlBZ1kyOXVkR0ZwYm5Nb2RtRnNkV1U2SUdKdmIyeGxZVzRwT2lCaWIyOXNaV0Z1SUh0Y2JpQWdJQ0J5WlhSMWNtNGdkR2hwY3k1bWFXNWtUbVY0ZENndE1Td2dkbUZzZFdVcElENDlJREE3WEc0Z0lIMWNibHh1SUNCblpYUWdZV3hzVkhKMVpTZ3BJSHRjYmlBZ0lDQnlaWFIxY200Z2RHaHBjeTVqYjNWdWRFSnBkSE1vZEhKMVpTa2dQVDBnZEdocGN5NWZiR1Z1WjNSb08xeHVJQ0I5WEc1Y2JpQWdaMlYwSUdGc2JFWmhiSE5sS0NrZ2UxeHVJQ0FnSUhKbGRIVnliaUIwYUdsekxtTnZkVzUwUW1sMGN5aG1ZV3h6WlNrZ1BUMGdkR2hwY3k1ZmJHVnVaM1JvTzF4dUlDQjlYRzVjYmlBZ1oyVjBJR0Z1ZVZSeWRXVW9LU0I3WEc0Z0lDQWdjbVYwZFhKdUlIUm9hWE11WTI5MWJuUkNhWFJ6S0hSeWRXVXBJRDRnTUR0Y2JpQWdmVnh1WEc0Z0lHZGxkQ0JoYm5sR1lXeHpaU2dwSUh0Y2JpQWdJQ0J5WlhSMWNtNGdkR2hwY3k1amIzVnVkRUpwZEhNb1ptRnNjMlVwSUQ0Z01EdGNiaUFnZlZ4dVhHNGdJQzh2THlCU1pYUjFjbTV6SUhSb1pTQndiM05wZEdsdmJpQnZaaUIwYUdVZ2JtVjRkQ0JpYVhRZ2IyWWdkR2hsSUhOd1pXTnBabWxsWkNCMllXeDFaU3dnYzNSaGNuUnBibWNnWm5KdmJTQjBhR1VnYzNCbFkybG1hV1ZrSUhCdmMybDBhVzl1TGx4dUlDQXZMeThnVW1WMGRYSnVjeUF0TVN3Z2FXWWdkR2hsY21VZ1lYSmxJRzV2SUhOMVkyZ2dZbWwwY3k1Y2JpQWdabWx1WkU1bGVIUW9hVzVrWlhnNklHNTFiV0psY2l3Z2RtRnNkV1VnUFNCMGNuVmxLVG9nYm5WdFltVnlJSHRjYmlBZ0lDQjBhR2x6TG1GemMzVnlaVWx1VW1GdVoyVW9hVzVrWlhnc0lDMHhMQ0IwYUdsekxsOXNaVzVuZEdnc0lDZHBibVJsZUNjcE8xeHVYRzRnSUNBZ2FXWWdLR2x1WkdWNElENDlJSFJvYVhNdVgyeGxibWQwYUNBdElERXBJSEpsZEhWeWJpQXRNVHRjYmlBZ0lDQnBibVJsZUNBOUlHbHVaR1Y0SUR3Z01DQS9JREFnT2lCcGJtUmxlQ0FySURFN0lDOHZJSE5yYVhBZ2MzUmhjblJjYmlBZ0lDQnNaWFFnZFc1MWMyVmtRbWwwY3lBOUlHbHVaR1Y0SUNZZ01IZ3haanRjYmlBZ0lDQmpiMjV6ZENCdWRXMUpiblJ6SUQwZ2RHaHBjeTVzWlc1bmRHaEpia2x1ZEhNN1hHNWNiaUFnSUNCbWIzSWdLR3hsZENCcElEMGdUV0YwYUM1bWJHOXZjaWhwYm1SbGVDQXZJRE15S1RzZ2FTQThJRzUxYlVsdWRITTdJR2tyS3lrZ2UxeHVJQ0FnSUNBZ2JHVjBJR3NnUFNBb2RtRnNkV1VnUHlCMGFHbHpMbDlrWVhSaFcybGRJRG9nZm5Sb2FYTXVYMlJoZEdGYmFWMHBPeUF2THlCMWFXNTBJR05oYzNSY2JpQWdJQ0FnSUdsbUlDaDFiblZ6WldSQ2FYUnpJQ0U5SURBcElIdGNiaUFnSUNBZ0lDQWdheUFtUFNBb0tEQjRabVptWm1abVptWWdQRHdnZFc1MWMyVmtRbWwwY3lrZ0ppQXdlR1ptWm1abVptWm1LVHRjYmlBZ0lDQWdJQ0FnZFc1MWMyVmtRbWwwY3lBOUlEQTdYRzRnSUNBZ0lDQjlJR1ZzYzJVZ2FXWWdLQ0YyWVd4MVpTQW1KaUJySUQwOUlDMDBNamswT1RZM01qazJLU0F2S2lCc2IyOXJhVzVuSUdadmNpQm1ZV3h6WlN3Z1lXeHNJR0pwZEhNZ1lYSmxJSE5sZENBcUwzdGNiaUFnSUNBZ0lDQWdZMjl1ZEdsdWRXVTdYRzRnSUNBZ0lDQjlYRzVjYmlBZ0lDQWdJR1p2Y2lBb2JHVjBJR29nUFNBd095QnJJQ0U5SURBN0lHb2dLejBnT0N3Z2F5QStQajQ5SURncElIdGNiaUFnSUNBZ0lDQWdZMjl1YzNRZ2NDQTlJRUpwZEVGeWNtRjVMbDltYVhKemRFOXVRbWwwVzJzZ0ppQXdlR1ptWFR0Y2JpQWdJQ0FnSUNBZ2FXWWdLSEFnUGowZ01Da2dlMXh1SUNBZ0lDQWdJQ0FnSUdsdVpHVjRJRDBnY0NBcklDaHBJQ29nTXpJcElDc2dhanRjYmlBZ0lDQWdJQ0FnSUNCcFppQW9hVzVrWlhnZ1BqMGdkR2hwY3k1ZmJHVnVaM1JvS1NCeVpYUjFjbTRnTFRFN1hHNGdJQ0FnSUNBZ0lDQWdjbVYwZFhKdUlHbHVaR1Y0TzF4dUlDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNCOVhHNGdJQ0FnZlZ4dUlDQWdJSEpsZEhWeWJpQXRNVHRjYmlBZ2ZWeHVYRzRnSUM4dkx5QkdhVzVrY3lCd2NtVjJhVzkxY3lCaWFYUWdiMllnZEdobElITndaV05wWm1sbFpDQjJZV3gxWlNCcGJpQjBhR1VnWW1sMGMyVjBMbHh1SUNCbWFXNWtVSEpsZGlocGJtUmxlRG9nYm5WdFltVnlMQ0IyWVd4MVpTQTlJSFJ5ZFdVcE9pQnVkVzFpWlhJZ2UxeHVJQ0FnSUdsbUlDaHBibVJsZUNBOVBTQXdLU0J5WlhSMWNtNGdMVEU3WEc0Z0lDQWdkR2hwY3k1aGMzTjFjbVZKYmxKaGJtZGxLR2x1WkdWNExDQXRNU3dnZEdocGN5NWZiR1Z1WjNSb0xDQW5hVzVrWlhnbktUdGNibHh1SUNBZ0lHbHVaR1Y0SUQwZ2FXNWtaWGdnUENBd0lEOGdkR2hwY3k1ZmJHVnVaM1JvSUMwZ01TQTZJR2x1WkdWNElDMGdNVHNnTHk4Z2MydHBjQ0J6ZEdGeWRGeHVYRzRnSUNBZ1kyOXVjM1FnYkdGemRFbHVkRWxrZUNBOUlFMWhkR2d1Wm14dmIzSW9hVzVrWlhnZ0x5QXdlREl3S1R0Y2JpQWdJQ0JzWlhRZ2NtVnRZV2x1YVc1blFtbDBjeUE5SUNocGJtUmxlQ0FySURFcElDWWdNSGd4Wmp0Y2JseHVJQ0FnSUdadmNpQW9iR1YwSUdrZ1BTQnNZWE4wU1c1MFNXUjRPeUJwSUQ0OUlEQTdJR2t0TFNrZ2UxeHVJQ0FnSUNBZ2JHVjBJR3NnUFNBb2RtRnNkV1VnUHlCMGFHbHpMbDlrWVhSaFcybGRJRG9nZm5Sb2FYTXVYMlJoZEdGYmFWMHBPeUF2THlCallYTjBYRzRnSUNBZ0lDQnBaaUFvY21WdFlXbHVhVzVuUW1sMGN5QWhQU0F3S1NCN1hHNGdJQ0FnSUNBZ0lHc2dKajBnZmlnb05ESTVORGsyTnpJNU5Ta2dQRHdnY21WdFlXbHVhVzVuUW1sMGN5azdYRzRnSUNBZ0lDQWdJSEpsYldGcGJtbHVaMEpwZEhNZ1BTQXdPMXh1SUNBZ0lDQWdmVnh1SUNBZ0lDQWdabTl5SUNoc1pYUWdhaUE5SURJME95QnJJQ0U5SURBN0lHb2dMVDBnT0N3Z2F5QThQRDBnT0NrZ2UxeHVJQ0FnSUNBZ0lDQmpiMjV6ZENCd0lEMGdRbWwwUVhKeVlYa3VYMnhoYzNSUGJrSnBkRnRySUQ0K1BpQXdlREU0WFR0Y2JpQWdJQ0FnSUNBZ2FXWWdLSEFnUGowZ01DbGNiaUFnSUNBZ0lDQWdJQ0J5WlhSMWNtNGdjQ0FySUNocElDb2dNeklwSUNzZ2FqdGNiaUFnSUNBZ0lIMWNiaUFnSUNCOVhHNGdJQ0FnY21WMGRYSnVJQzB4TzF4dUlDQjlYRzU5WEc0aVhYMD0iLCIvKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuICovXG5pbXBvcnQgKiBhcyBERyBmcm9tICdkYXRhZ3Jvay1hcGkvZGcnO1xuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IEJpdEFycmF5IGZyb20gJy4vYml0LWFycmF5JztcbmV4cG9ydCB2YXIgU2NhdHRlclBsb3RDdXJyZW50TGluZVN0eWxlO1xuKGZ1bmN0aW9uIChTY2F0dGVyUGxvdEN1cnJlbnRMaW5lU3R5bGUpIHtcbiAgICBTY2F0dGVyUGxvdEN1cnJlbnRMaW5lU3R5bGVbXCJub25lXCJdID0gXCJub25lXCI7XG4gICAgU2NhdHRlclBsb3RDdXJyZW50TGluZVN0eWxlW1wiYm9sZFwiXSA9IFwiYm9sZFwiO1xuICAgIFNjYXR0ZXJQbG90Q3VycmVudExpbmVTdHlsZVtcImRhc2hlZFwiXSA9IFwiZGFzaGVkXCI7XG59KShTY2F0dGVyUGxvdEN1cnJlbnRMaW5lU3R5bGUgfHwgKFNjYXR0ZXJQbG90Q3VycmVudExpbmVTdHlsZSA9IHt9KSk7XG5leHBvcnQgY2xhc3MgU2NhdHRlclBsb3RMaW5lc1JlbmRlcmVyIHtcbiAgICBnZXQgY3VycmVudExpbmVJZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2N1cnJlbnRMaW5lSWR4O1xuICAgIH1cbiAgICBzZXQgY3VycmVudExpbmVJZChpZCkge1xuICAgICAgICBpZiAoaWQgIT09IHRoaXMuX2N1cnJlbnRMaW5lSWR4KSB7XG4gICAgICAgICAgICB0aGlzLl9jdXJyZW50TGluZUlkeCA9IGlkO1xuICAgICAgICAgICAgdGhpcy5zcC5yZW5kZXIodGhpcy5jdHgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHNldCBsaW5lc1RvUmVuZGVyKGxpbmVzKSB7XG4gICAgICAgIHRoaXMudXBkYXRlTGluZXMobGluZXMpO1xuICAgICAgICB0aGlzLnNwLnJlbmRlcih0aGlzLmN0eCk7XG4gICAgfVxuICAgIHNldCBsaW5lc1Zpc2liaWxpdHkodmlzaWJpbGl0eSkge1xuICAgICAgICB0aGlzLnZpc2liaWxpdHkgPSB2aXNpYmlsaXR5O1xuICAgICAgICB0aGlzLnNwLnJlbmRlcih0aGlzLmN0eCk7XG4gICAgfVxuICAgIGNvbnN0cnVjdG9yKHNwLCB4QXhpcywgeUF4aXMsIGxpbmVzLCBjdXJyZW50TGluZVN0eWxlID0gU2NhdHRlclBsb3RDdXJyZW50TGluZVN0eWxlLm5vbmUpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICB0aGlzLl9jdXJyZW50TGluZUlkeCA9IC0xO1xuICAgICAgICB0aGlzLmxpbmVDbGlja2VkID0gbmV3IFN1YmplY3QoKTtcbiAgICAgICAgdGhpcy5saW5lSG92ZXIgPSBuZXcgU3ViamVjdCgpO1xuICAgICAgICB0aGlzLm1vdXNlT3ZlckxpbmVJZCA9IC0xO1xuICAgICAgICB0aGlzLmFycm93V2lkdGggPSAxNTtcbiAgICAgICAgdGhpcy5zcCA9IHNwO1xuICAgICAgICB0aGlzLnhBeGlzQ29sID0gdGhpcy5zcC5kYXRhRnJhbWUuY29sdW1ucy5ieU5hbWUoeEF4aXMpO1xuICAgICAgICB0aGlzLnlBeGlzQ29sID0gdGhpcy5zcC5kYXRhRnJhbWUuY29sdW1ucy5ieU5hbWUoeUF4aXMpO1xuICAgICAgICB0aGlzLmNhbnZhcyA9IHRoaXMuc3AuZ2V0SW5mbygpWydjYW52YXMnXTtcbiAgICAgICAgdGhpcy5jdHggPSB0aGlzLmNhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xuICAgICAgICB0aGlzLmN1cnJlbnRMaW5lU3R5bGUgPSBjdXJyZW50TGluZVN0eWxlO1xuICAgICAgICB0aGlzLnVwZGF0ZUxpbmVzKGxpbmVzKTtcbiAgICAgICAgdGhpcy52aXNpYmlsaXR5ID0gKF9hID0gbGluZXMudmlzaWJpbGl0eSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogbmV3IEJpdEFycmF5KHRoaXMubGluZXMuZnJvbS5sZW5ndGgpO1xuICAgICAgICBpZiAoIWxpbmVzLnZpc2liaWxpdHkpXG4gICAgICAgICAgICB0aGlzLnZpc2liaWxpdHkuc2V0QWxsKHRydWUsIGZhbHNlKTtcbiAgICAgICAgaWYgKGxpbmVzLmFycm93U2l6ZSlcbiAgICAgICAgICAgIHRoaXMuYXJyb3dXaWR0aCA9IGxpbmVzLmFycm93U2l6ZTtcbiAgICAgICAgdGhpcy5jYW52YXMub25tb3VzZWRvd24gPSAoZXZlbnQpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLm1vdXNlT3ZlckxpbmVJZCAhPT0gLTEpXG4gICAgICAgICAgICAgICAgdGhpcy5saW5lQ2xpY2tlZC5uZXh0KHsgeDogZXZlbnQuY2xpZW50WCwgeTogZXZlbnQuY2xpZW50WSwgaWQ6IHRoaXMubW91c2VPdmVyTGluZUlkLCBldmVudDogZXZlbnQgfSk7XG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuY2FudmFzLm9ubW91c2Vtb3ZlID0gKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICB0aGlzLm1vdXNlT3ZlckxpbmVJZCA9IHRoaXMuY2hlY2tDb29yZHNPbkxpbmUoZXZlbnQub2Zmc2V0WCwgZXZlbnQub2Zmc2V0WSk7XG4gICAgICAgICAgICBpZiAodGhpcy5tb3VzZU92ZXJMaW5lSWQgIT09IC0xKVxuICAgICAgICAgICAgICAgIHRoaXMubGluZUhvdmVyLm5leHQoeyB4OiBldmVudC5jbGllbnRYLCB5OiBldmVudC5jbGllbnRZLCBpZDogdGhpcy5tb3VzZU92ZXJMaW5lSWQsIGV2ZW50OiBldmVudCB9KTtcbiAgICAgICAgfTtcbiAgICAgICAgc3Aub25FdmVudCgnZDQtYmVmb3JlLWRyYXctc2NlbmUnKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoXykgPT4ge1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJMaW5lcygpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgdXBkYXRlTGluZXMobGluZXMpIHtcbiAgICAgICAgdGhpcy5saW5lcyA9IGxpbmVzO1xuICAgICAgICB0aGlzLm11bHRpcGxlTGluZXNDb3VudHMgPSBuZXcgVWludDhBcnJheSh0aGlzLmxpbmVzLmZyb20ubGVuZ3RoKTtcbiAgICAgICAgaWYgKCFsaW5lcy5za2lwTXVsdGlMaW5lQ2FsY3VsYXRpb24pXG4gICAgICAgICAgICB0aGlzLmNyZWF0ZU11bHRpTGluZXNJbmRpY2VzKCk7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIHRoaXMubXVsdGlwbGVMaW5lc0NvdW50cy5maWxsKDApO1xuICAgIH1cbiAgICByZW5kZXJMaW5lcygpIHtcbiAgICAgICAgdmFyIF9hLCBfYiwgX2MsIF9kLCBfZSwgX2YsIF9nLCBfaCwgX2osIF9rLCBfbCwgX20sIF9vO1xuICAgICAgICBjb25zdCBzcExvb2sgPSB0aGlzLnNwLmdldE9wdGlvbnMoKS5sb29rO1xuICAgICAgICBjb25zdCBpbmRpdmlkdWFsTGluZVN0eWxlcyA9IHRoaXMubGluZXMuY29sb3JzIHx8IHRoaXMubGluZXMud2lkdGggfHwgdGhpcy5saW5lcy5vcGFjaXRpZXMgfHwgdGhpcy5saW5lcy5kcmF3QXJyb3dzQXJyO1xuICAgICAgICBpZiAoIWluZGl2aWR1YWxMaW5lU3R5bGVzKSB7XG4gICAgICAgICAgICB0aGlzLmN0eC5saW5lV2lkdGggPSAoX2EgPSB0aGlzLmxpbmVzLndpZHRoKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiAxO1xuICAgICAgICAgICAgdGhpcy5jdHguc3Ryb2tlU3R5bGUgPSBgcmdiYSgkeyhfYiA9IHRoaXMubGluZXMuY29sb3IpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6ICcwLDEyOCwwJ30sJHsoX2MgPSB0aGlzLmxpbmVzLm9wYWNpdHkpICE9PSBudWxsICYmIF9jICE9PSB2b2lkIDAgPyBfYyA6IDF9KWA7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbWFya2VyU2l6ZUNvbCA9IHNwTG9va1snc2l6ZUNvbHVtbk5hbWUnXSA/IHRoaXMuc3AuZGF0YUZyYW1lLmNvbChzcExvb2tbJ3NpemVDb2x1bW5OYW1lJ10pIDogbnVsbDtcbiAgICAgICAgY29uc3QgZmlsdGVyID0gdGhpcy5zcC5kYXRhRnJhbWUuZmlsdGVyO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMubGluZXMuZnJvbS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKGZpbHRlci5nZXQodGhpcy5saW5lcy5mcm9tW2ldKSAmJiBmaWx0ZXIuZ2V0KHRoaXMubGluZXMudG9baV0pICYmIHRoaXMudmlzaWJpbGl0eS5nZXRCaXQoaSkpIHtcbiAgICAgICAgICAgICAgICBsZXQgbGluZUxlbiA9IDA7XG4gICAgICAgICAgICAgICAgY29uc3QgeyBzaXplRnJvbSwgc2l6ZVRvIH0gPSB0aGlzLmdldE1hcmtlcnNTaXplcyhzcExvb2ssIG1hcmtlclNpemVDb2wsIGkpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHBvaW50RnJvbSA9IHRoaXMuc3Aud29ybGRUb1NjcmVlbih0aGlzLnhBeGlzQ29sLmdldCh0aGlzLmxpbmVzLmZyb21baV0pLCB0aGlzLnlBeGlzQ29sLmdldCh0aGlzLmxpbmVzLmZyb21baV0pKTtcbiAgICAgICAgICAgICAgICBsZXQgYVggPSBwb2ludEZyb20gPT09IG51bGwgfHwgcG9pbnRGcm9tID09PSB2b2lkIDAgPyB2b2lkIDAgOiBwb2ludEZyb20ueDtcbiAgICAgICAgICAgICAgICBsZXQgYVkgPSBwb2ludEZyb20gPT09IG51bGwgfHwgcG9pbnRGcm9tID09PSB2b2lkIDAgPyB2b2lkIDAgOiBwb2ludEZyb20ueTtcbiAgICAgICAgICAgICAgICBjb25zdCBwb2ludFRvID0gdGhpcy5zcC53b3JsZFRvU2NyZWVuKHRoaXMueEF4aXNDb2wuZ2V0KHRoaXMubGluZXMudG9baV0pLCB0aGlzLnlBeGlzQ29sLmdldCh0aGlzLmxpbmVzLnRvW2ldKSk7XG4gICAgICAgICAgICAgICAgbGV0IGJYID0gcG9pbnRUbyA9PT0gbnVsbCB8fCBwb2ludFRvID09PSB2b2lkIDAgPyB2b2lkIDAgOiBwb2ludFRvLng7XG4gICAgICAgICAgICAgICAgbGV0IGJZID0gcG9pbnRUbyA9PT0gbnVsbCB8fCBwb2ludFRvID09PSB2b2lkIDAgPyB2b2lkIDAgOiBwb2ludFRvLnk7XG4gICAgICAgICAgICAgICAgY29uc3QgbWluQXhpcyA9IE1hdGgubWluKHRoaXMuc3Audmlld0JveC53aWR0aCwgdGhpcy5zcC52aWV3Qm94LmhlaWdodCk7XG4gICAgICAgICAgICAgICAgdGhpcy5jdHguYmVnaW5QYXRoKCk7XG4gICAgICAgICAgICAgICAgaWYgKGFYICYmIGFZICYmIGJYICYmIGJZICYmIE1hdGguaHlwb3QoYlggLSBhWCwgYlkgLSBhWSkgLyBtaW5BeGlzID4gMC4wMSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaW5kaXZpZHVhbExpbmVTdHlsZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbG9yID0gKChfZCA9IHRoaXMubGluZXMuY29sb3JzKSA9PT0gbnVsbCB8fCBfZCA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2RbaV0pID8gKF9lID0gdGhpcy5saW5lcy5jb2xvcnMpID09PSBudWxsIHx8IF9lID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZVtpXSA6ICcwLDEyOCwwJztcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG9wYWNpdHkgPSAoKF9mID0gdGhpcy5saW5lcy5vcGFjaXRpZXMpID09PSBudWxsIHx8IF9mID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZltpXSkgPyAoX2cgPSB0aGlzLmxpbmVzLm9wYWNpdGllcykgPT09IG51bGwgfHwgX2cgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9nW2ldIDogMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3R4LnN0cm9rZVN0eWxlID0gYHJnYmEoJHtjb2xvcn0sJHtvcGFjaXR5fSlgO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jdHgubGluZVdpZHRoID0gKChfaCA9IHRoaXMubGluZXMud2lkdGhzKSA9PT0gbnVsbCB8fCBfaCA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2hbaV0pID8gKF9qID0gdGhpcy5saW5lcy53aWR0aHMpID09PSBudWxsIHx8IF9qID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfaltpXSA6IDE7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKGkgPT09IHRoaXMuX2N1cnJlbnRMaW5lSWR4KVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50b2dnbGVDdXJyZW50TGluZVN0eWxlKHRydWUpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBtdWx0aUxpbmVzID0gdGhpcy5tdWx0aXBsZUxpbmVzQ291bnRzW2ldO1xuICAgICAgICAgICAgICAgICAgICBsZXQgY29udHJvbFBvaW50ID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG11bHRpTGluZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVMZW4gPSB0aGlzLmdldExpbmVMZW5ndGgoYVgsIGFZLCBiWCwgYlkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RhcnRQb2ludFdpdGhNYXJrZXIgPSB0aGlzLmdldFBvaW50T25EaXN0YW5jZShhWCwgYVksIGJYLCBiWSwgc2l6ZVRvLCBsaW5lTGVuKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGVuZHRQb2ludFdpdGhNYXJrZXIgPSB0aGlzLmdldFBvaW50T25EaXN0YW5jZShiWCwgYlksIGFYLCBhWSwgc2l6ZUZyb20sIGxpbmVMZW4pO1xuICAgICAgICAgICAgICAgICAgICAgICAgYVggPSBzdGFydFBvaW50V2l0aE1hcmtlci54O1xuICAgICAgICAgICAgICAgICAgICAgICAgYVkgPSBzdGFydFBvaW50V2l0aE1hcmtlci55O1xuICAgICAgICAgICAgICAgICAgICAgICAgYlggPSBlbmR0UG9pbnRXaXRoTWFya2VyLng7XG4gICAgICAgICAgICAgICAgICAgICAgICBiWSA9IGVuZHRQb2ludFdpdGhNYXJrZXIueTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2xQb2ludCA9IHRoaXMubGluZXMuZnJvbVtpXSA+IHRoaXMubGluZXMudG9baV0gP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZmluZENvbnRyb2xQb2ludChtdWx0aUxpbmVzLCBhWCwgYVksIGJYLCBiWSwgaSkgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZmluZENvbnRyb2xQb2ludChtdWx0aUxpbmVzLCBiWCwgYlksIGFYLCBhWSwgaSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmN0eC5tb3ZlVG8oYVgsIGFZKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3R4LnF1YWRyYXRpY0N1cnZlVG8oY29udHJvbFBvaW50LngsIGNvbnRyb2xQb2ludC55LCBiWCwgYlkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jdHgubW92ZVRvKGFYLCBhWSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmN0eC5saW5lVG8oYlgsIGJZKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoKF9rID0gdGhpcy5saW5lcy5kcmF3QXJyb3dzKSAhPT0gbnVsbCAmJiBfayAhPT0gdm9pZCAwID8gX2sgOiAoX2wgPSB0aGlzLmxpbmVzLmRyYXdBcnJvd3NBcnIpID09PSBudWxsIHx8IF9sID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfbC5nZXRCaXQoaSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbGluZUxlbilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lTGVuID0gdGhpcy5nZXRMaW5lTGVuZ3RoKGFYLCBhWSwgYlgsIGJZKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsaW5lTGVuID4gdGhpcy5hcnJvd1dpZHRoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYXJyb3dQb2ludCA9ICFtdWx0aUxpbmVzID8gdGhpcy5nZXRQb2ludE9uRGlzdGFuY2UoYVgsIGFZLCBiWCwgYlksIHNpemVUbywgbGluZUxlbikgOiBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGFycm93Q1BYID0gbXVsdGlMaW5lcyA/IGNvbnRyb2xQb2ludC54IDogYVg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYXJyb3dDUFkgPSBtdWx0aUxpbmVzID8gY29udHJvbFBvaW50LnkgOiBhWTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNhbnZhc0Fycm93KHRoaXMuY3R4LCAoX20gPSBhcnJvd1BvaW50ID09PSBudWxsIHx8IGFycm93UG9pbnQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGFycm93UG9pbnQueCkgIT09IG51bGwgJiYgX20gIT09IHZvaWQgMCA/IF9tIDogYVgsIChfbyA9IGFycm93UG9pbnQgPT09IG51bGwgfHwgYXJyb3dQb2ludCA9PT0gdm9pZCAwID8gdm9pZCAwIDogYXJyb3dQb2ludC55KSAhPT0gbnVsbCAmJiBfbyAhPT0gdm9pZCAwID8gX28gOiBhWSwgYXJyb3dDUFgsIGFycm93Q1BZKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0aGlzLmN0eC5zdHJva2UoKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jdHguY2xvc2VQYXRoKCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpID09PSB0aGlzLl9jdXJyZW50TGluZUlkeClcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudG9nZ2xlQ3VycmVudExpbmVTdHlsZShmYWxzZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuZmlsbExlZnRCb3R0b21SZWN0KCk7XG4gICAgfVxuICAgIHRvZ2dsZUN1cnJlbnRMaW5lU3R5bGUoZmxhZykge1xuICAgICAgICBzd2l0Y2ggKHRoaXMuY3VycmVudExpbmVTdHlsZSkge1xuICAgICAgICAgICAgY2FzZSBTY2F0dGVyUGxvdEN1cnJlbnRMaW5lU3R5bGUuYm9sZDoge1xuICAgICAgICAgICAgICAgIGZsYWcgPyB0aGlzLmN0eC5saW5lV2lkdGggKz0gMiA6IHRoaXMuY3R4LmxpbmVXaWR0aCAtPSAyO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBTY2F0dGVyUGxvdEN1cnJlbnRMaW5lU3R5bGUuZGFzaGVkOiB7XG4gICAgICAgICAgICAgICAgZmxhZyA/IHRoaXMuY3R4LnNldExpbmVEYXNoKFs1LCA1XSkgOiB0aGlzLmN0eC5zZXRMaW5lRGFzaChbXSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgIH1cbiAgICBnZXRNYXJrZXJzU2l6ZXMoc3BMb29rLCBtYXJrZXJTaXplQ29sLCBpKSB7XG4gICAgICAgIGxldCBzaXplRnJvbSA9IDM7XG4gICAgICAgIGxldCBzaXplVG8gPSAzO1xuICAgICAgICBpZiAobWFya2VyU2l6ZUNvbCkge1xuICAgICAgICAgICAgc2l6ZUZyb20gPSAoc3BMb29rLm1hcmtlck1pblNpemUgKyAoc3BMb29rLm1hcmtlck1heFNpemUgLSBzcExvb2subWFya2VyTWluU2l6ZSkgKiBtYXJrZXJTaXplQ29sLnNjYWxlKHRoaXMubGluZXMuZnJvbVtpXSkpIC8gMjtcbiAgICAgICAgICAgIHNpemVUbyA9IChzcExvb2subWFya2VyTWluU2l6ZSArIChzcExvb2subWFya2VyTWF4U2l6ZSAtIHNwTG9vay5tYXJrZXJNaW5TaXplKSAqIG1hcmtlclNpemVDb2wuc2NhbGUodGhpcy5saW5lcy50b1tpXSkpIC8gMjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChzcExvb2subWFya2VyRGVmYXVsdFNpemUpIHtcbiAgICAgICAgICAgIHNpemVGcm9tID0gc3BMb29rLm1hcmtlckRlZmF1bHRTaXplIC8gMjtcbiAgICAgICAgICAgIHNpemVUbyA9IHNwTG9vay5tYXJrZXJEZWZhdWx0U2l6ZSAvIDI7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHsgc2l6ZUZyb20sIHNpemVUbyB9O1xuICAgIH1cbiAgICBmaWxsTGVmdEJvdHRvbVJlY3QoKSB7XG4gICAgICAgIGNvbnN0IHJlY3QgPSBuZXcgUGF0aDJEKCk7XG4gICAgICAgIHJlY3QucmVjdCh0aGlzLnNwLnlBeGlzQm94Lm1pblgsIHRoaXMuc3AueUF4aXNCb3gubWF4WSwgdGhpcy5zcC55QXhpc0JveC53aWR0aCwgdGhpcy5zcC54QXhpc0JveC5oZWlnaHQpO1xuICAgICAgICB0aGlzLmN0eC5maWxsU3R5bGUgPSBgd2hpdGVgO1xuICAgICAgICB0aGlzLmN0eC5iZWdpblBhdGgoKTtcbiAgICAgICAgdGhpcy5jdHguZmlsbChyZWN0KTtcbiAgICAgICAgdGhpcy5jdHguY2xvc2VQYXRoKCk7XG4gICAgfVxuICAgIGNyZWF0ZU11bHRpTGluZXNJbmRpY2VzKCkge1xuICAgICAgICBjb25zdCBhcnJheUlkeHNCaXRBcnJheSA9IG5ldyBCaXRBcnJheSh0aGlzLmxpbmVzLmZyb20ubGVuZ3RoKTtcbiAgICAgICAgYXJyYXlJZHhzQml0QXJyYXkuc2V0QWxsKHRydWUpO1xuICAgICAgICBmb3IgKGxldCBpID0gLTE7IChpID0gYXJyYXlJZHhzQml0QXJyYXkuZmluZE5leHQoaSkpICE9PSAtMTspIHtcbiAgICAgICAgICAgIGNvbnN0IGZpcnN0TGluZUlkeCA9IGk7XG4gICAgICAgICAgICBjb25zdCBwMSA9IHRoaXMubGluZXMuZnJvbVtmaXJzdExpbmVJZHhdO1xuICAgICAgICAgICAgY29uc3QgcDIgPSB0aGlzLmxpbmVzLnRvW2ZpcnN0TGluZUlkeF07XG4gICAgICAgICAgICBsZXQgbGluZXNQZXJQYWlyID0gMTtcbiAgICAgICAgICAgIGZvciAobGV0IGogPSBpOyAoaiA9IGFycmF5SWR4c0JpdEFycmF5LmZpbmROZXh0KGopKSAhPT0gLTE7KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcG9pbnRUb0NvbXBhcmUxID0gdGhpcy5saW5lcy5mcm9tW2pdO1xuICAgICAgICAgICAgICAgIGNvbnN0IHBvaW50VG9Db21wYXJlMiA9IHRoaXMubGluZXMudG9bal07XG4gICAgICAgICAgICAgICAgaWYgKHBvaW50VG9Db21wYXJlMSA9PT0gcDEgJiYgcG9pbnRUb0NvbXBhcmUyID09PSBwMiB8fFxuICAgICAgICAgICAgICAgICAgICBwb2ludFRvQ29tcGFyZTIgPT09IHAxICYmIHBvaW50VG9Db21wYXJlMSA9PT0gcDIpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tdWx0aXBsZUxpbmVzQ291bnRzW2pdID0gKytsaW5lc1BlclBhaXI7XG4gICAgICAgICAgICAgICAgICAgIGFycmF5SWR4c0JpdEFycmF5LnNldEJpdChqLCBmYWxzZSwgZmFsc2UpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChsaW5lc1BlclBhaXIgPiAxKVxuICAgICAgICAgICAgICAgIHRoaXMubXVsdGlwbGVMaW5lc0NvdW50c1tmaXJzdExpbmVJZHhdID0gMTtcbiAgICAgICAgICAgIGFycmF5SWR4c0JpdEFycmF5LnNldEJpdChpLCBmYWxzZSwgZmFsc2UpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNoZWNrQ29vcmRzT25MaW5lKHgsIHkpIHtcbiAgICAgICAgbGV0IGNhbmRpZGF0ZUlkeCA9IC0xO1xuICAgICAgICBsZXQgbWluRGlzdCA9IG51bGw7XG4gICAgICAgIGxldCBkaXN0ID0gbnVsbDtcbiAgICAgICAgY29uc3Qgc3BMb29rID0gdGhpcy5zcC5nZXRPcHRpb25zKCkubG9vaztcbiAgICAgICAgY29uc3QgbWFya2VyU2l6ZUNvbCA9IHNwTG9va1snc2l6ZUNvbHVtbk5hbWUnXSA/IHRoaXMuc3AuZGF0YUZyYW1lLmNvbChzcExvb2tbJ3NpemVDb2x1bW5OYW1lJ10pIDogbnVsbDtcbiAgICAgICAgY29uc3QgZmlsdGVyID0gdGhpcy5zcC5kYXRhRnJhbWUuZmlsdGVyO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMubGluZXMuZnJvbS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKGZpbHRlci5nZXQodGhpcy5saW5lcy5mcm9tW2ldKSAmJiBmaWx0ZXIuZ2V0KHRoaXMubGluZXMudG9baV0pICYmIHRoaXMudmlzaWJpbGl0eS5nZXRCaXQoaSkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB7IHNpemVGcm9tLCBzaXplVG8gfSA9IHRoaXMuZ2V0TWFya2Vyc1NpemVzKHNwTG9vaywgbWFya2VyU2l6ZUNvbCwgaSk7XG4gICAgICAgICAgICAgICAgY29uc3QgcEZyb20gPSB0aGlzLnNwLndvcmxkVG9TY3JlZW4odGhpcy54QXhpc0NvbC5nZXQodGhpcy5saW5lcy5mcm9tW2ldKSwgdGhpcy55QXhpc0NvbC5nZXQodGhpcy5saW5lcy5mcm9tW2ldKSk7XG4gICAgICAgICAgICAgICAgY29uc3QgcFRvID0gdGhpcy5zcC53b3JsZFRvU2NyZWVuKHRoaXMueEF4aXNDb2wuZ2V0KHRoaXMubGluZXMudG9baV0pLCB0aGlzLnlBeGlzQ29sLmdldCh0aGlzLmxpbmVzLnRvW2ldKSk7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMubXVsdGlwbGVMaW5lc0NvdW50c1tpXSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBsZW4gPSB0aGlzLmdldExpbmVMZW5ndGgocEZyb20ueCwgcEZyb20ueSwgcFRvLngsIHBUby55KTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZnJvbU1hcmtlciA9IHRoaXMuZ2V0UG9pbnRPbkRpc3RhbmNlKHBGcm9tLngsIHBGcm9tLnksIHBUby54LCBwVG8ueSwgc2l6ZVRvLCBsZW4pO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB0b01hcmtlciA9IHRoaXMuZ2V0UG9pbnRPbkRpc3RhbmNlKHBUby54LCBwVG8ueSwgcEZyb20gPT09IG51bGwgfHwgcEZyb20gPT09IHZvaWQgMCA/IHZvaWQgMCA6IHBGcm9tLngsIHBGcm9tID09PSBudWxsIHx8IHBGcm9tID09PSB2b2lkIDAgPyB2b2lkIDAgOiBwRnJvbS55LCBzaXplRnJvbSwgbGVuKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY29udHJvbFBvaW50ID0gdGhpcy5saW5lcy5mcm9tW2ldID4gdGhpcy5saW5lcy50b1tpXSA/XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZpbmRDb250cm9sUG9pbnQodGhpcy5tdWx0aXBsZUxpbmVzQ291bnRzW2ldLCBmcm9tTWFya2VyLngsIGZyb21NYXJrZXIueSwgdG9NYXJrZXIueCwgdG9NYXJrZXIueSwgaSkgOlxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5maW5kQ29udHJvbFBvaW50KHRoaXMubXVsdGlwbGVMaW5lc0NvdW50c1tpXSwgdG9NYXJrZXIueCwgdG9NYXJrZXIueSwgZnJvbU1hcmtlci54LCBmcm9tTWFya2VyLnksIGkpO1xuICAgICAgICAgICAgICAgICAgICBkaXN0ID0gdGhpcy5jYWxjdWxhdGVEaXN0VG9DdXJ2ZUxpbmUoaSwgeCwgeSwgZnJvbU1hcmtlciwgdG9NYXJrZXIsIGNvbnRyb2xQb2ludCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBkaXN0ID0gdGhpcy5jYWxjdWxhdGVEaXN0VG9TdHJhaWdodExpbmUoeCwgeSwgcEZyb20sIHBUbyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICgoIW1pbkRpc3QgJiYgZGlzdCAhPT0gbnVsbCAmJiBkaXN0IDwgNSkgfHwgbWluRGlzdCAmJiBkaXN0ICE9PSBudWxsICYmIGRpc3QgPCBtaW5EaXN0KSB7XG4gICAgICAgICAgICAgICAgICAgIG1pbkRpc3QgPSBkaXN0O1xuICAgICAgICAgICAgICAgICAgICBjYW5kaWRhdGVJZHggPSBpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY2FuZGlkYXRlSWR4O1xuICAgIH1cbiAgICBjYWxjdWxhdGVEaXN0VG9TdHJhaWdodExpbmUoeCwgeSwgcDEsIHAyKSB7XG4gICAgICAgIC8qIGNhbGN1bGF0aW5nIGNvb3JkaW5hdGVzIG9mIGEgcmVjdCBhcm91bmQgYSBsaW5lLiBJZiBjdXJzb3IgY29vcmRzIGFyZSBvdXRzaWRlIHRoaXMgcmVjdCAtIGFzc3VtZSB0aGF0XG4gICAgICAgICAgICBwb2ludCBpcyBub3Qgb24gbGluZSBhbmQgZG8gbm90IGNhbGN1bGF0ZSBkaXN0YW5jZSB0byBsaW5lICovXG4gICAgICAgIGNvbnN0IHhNaW4gPSBNYXRoLm1pbihwMS54LCBwMi54KTtcbiAgICAgICAgY29uc3QgeE1heCA9IE1hdGgubWF4KHAxLngsIHAyLngpO1xuICAgICAgICBjb25zdCB5TWluID0gTWF0aC5taW4ocDEueSwgcDIueSk7XG4gICAgICAgIGNvbnN0IHlNYXggPSBNYXRoLm1heChwMS55LCBwMi55KTtcbiAgICAgICAgLy9hZGRpbmcgYSBjb3VwbGUgb2YgcGl4ZWxzIHRvIGluY3JlYXNlIHRoZSB3aWR0aC9oZWlnaHQgb2YgdGhlIHJlY3RcbiAgICAgICAgY29uc3QgdGhyZXNob2xkID0gMjtcbiAgICAgICAgcmV0dXJuIHggPj0geE1pbiAtIHRocmVzaG9sZCAmJiB4IDw9IHhNYXggKyB0aHJlc2hvbGQgJiYgeSA+PSB5TWluIC0gdGhyZXNob2xkICYmIHkgPD0geU1heCArIHRocmVzaG9sZCA/XG4gICAgICAgICAgICB0aGlzLmRpc3RUb1N0cmFpZ2h0TGluZVNlZ21lbnQoeCwgeSwgcDEsIHAyKSA6XG4gICAgICAgICAgICBudWxsO1xuICAgIH1cbiAgICBkaXN0VG9TdHJhaWdodExpbmVTZWdtZW50KHgsIHksIHAxLCBwMikge1xuICAgICAgICBjb25zdCBkaXN0ID0gKHgxLCB5MSwgeDIsIHkyKSA9PiBNYXRoLnBvdygoeDEgLSB4MiksIDIpICsgTWF0aC5wb3coKHkxIC0geTIpLCAyKTtcbiAgICAgICAgY29uc3QgbCA9IGRpc3QocDEueCwgcDEueSwgcDIueCwgcDIueSk7XG4gICAgICAgIGlmIChsID09IDApXG4gICAgICAgICAgICByZXR1cm4gZGlzdCh4LCB5LCBwMS54LCBwMS55KTtcbiAgICAgICAgbGV0IHQgPSAoKHggLSBwMS54KSAqIChwMi54IC0gcDEueCkgKyAoeSAtIHAxLnkpICogKHAyLnkgLSBwMS55KSkgLyBsO1xuICAgICAgICB0ID0gTWF0aC5tYXgoMCwgTWF0aC5taW4oMSwgdCkpO1xuICAgICAgICByZXR1cm4gZGlzdCh4LCB5LCBwMS54ICsgdCAqIChwMi54IC0gcDEueCksIHAxLnkgKyB0ICogKHAyLnkgLSBwMS55KSk7XG4gICAgfVxuICAgIGNhbGN1bGF0ZURpc3RUb0N1cnZlTGluZShpLCB4LCB5LCBwMSwgcDIsIHBjKSB7XG4gICAgICAgIC8qIGNhbGN1bGF0aW5nIGNvb3JkaW5hdGVzIG9mIGEgcmVjdCBhcm91bmQgYSBsaW5lLiBJZiBjdXJzb3IgY29vcmRzIGFyZSBvdXRzaWRlIHRoaXMgc2hhcGUgLSBhc3N1bWUgdGhhdFxuICAgICAgICAgICAgcG9pbnQgaXMgbm90IG9uIGxpbmUgYW5kIGRvIG5vdCBjYWxjdWxhdGUgZGlzdGFuY2UgdG8gbGluZSAqL1xuICAgICAgICBjb25zdCB4TWluID0gTWF0aC5taW4ocDEueCwgcDIueCwgcGMueCk7XG4gICAgICAgIGNvbnN0IHhNYXggPSBNYXRoLm1heChwMS54LCBwMi54LCBwYy54KTtcbiAgICAgICAgY29uc3QgeU1pbiA9IE1hdGgubWluKHAxLnksIHAyLnksIHBjLnkpO1xuICAgICAgICBjb25zdCB5TWF4ID0gTWF0aC5tYXgocDEueSwgcDIueSwgcGMueSk7XG4gICAgICAgIC8vYWRkaW5nIGEgY291cGxlIG9mIHBpeGVscyB0byBpbmNyZWFzZSB0aGUgd2lkdGgvaGVpZ2h0IG9mIHRoZSByZWN0XG4gICAgICAgIGNvbnN0IHRocmVzaG9sZCA9IDI7XG4gICAgICAgIGlmICh4ID49IHhNaW4gLSB0aHJlc2hvbGQgJiYgeCA8PSB4TWF4ICsgdGhyZXNob2xkICYmIHkgPj0geU1pbiAtIHRocmVzaG9sZCAmJiB5IDw9IHlNYXggKyB0aHJlc2hvbGQpIHtcbiAgICAgICAgICAgIGNvbnN0IHcgPSB4TWF4IC0geE1pbjtcbiAgICAgICAgICAgIGNvbnN0IGggPSB5TWF4IC0geU1pbjtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNhbGN1bGF0ZURpc3RUb0N1cnZlSW5SZWN0KHgsIHksIHAxLCBwYywgcDIsIHcsIGgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBjYWxjdWxhdGVEaXN0VG9DdXJ2ZUluUmVjdCh4LCB5LCBwMCwgcDEsIHAyLCB3LCBoKSB7XG4gICAgICAgIGNvbnN0IHN0ZXBMZW4gPSAzO1xuICAgICAgICBjb25zdCBzdGVwc051bSA9IE1hdGguZmxvb3IoKHcgKyBoKSAvIHN0ZXBMZW4pO1xuICAgICAgICBjb25zdCBkZWx0YVQgPSAxIC8gc3RlcHNOdW07XG4gICAgICAgIGNvbnN0IGFyclggPSBuZXcgVWludDMyQXJyYXkoc3RlcHNOdW0pO1xuICAgICAgICBjb25zdCBhcnJZID0gbmV3IFVpbnQzMkFycmF5KHN0ZXBzTnVtKTtcbiAgICAgICAgY29uc3QgbWF4SFcgPSBuZXcgVWludDMyQXJyYXkoc3RlcHNOdW0pO1xuICAgICAgICBsZXQgbWluU3VtSFcgPSBudWxsO1xuICAgICAgICBjb25zdCBjYW5kaWRhdGVJZHhzID0gbmV3IEJpdEFycmF5KHN0ZXBzTnVtKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcnJYLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCB0ID0gaSAqIGRlbHRhVDtcbiAgICAgICAgICAgIGNvbnN0IHhPbkN1cnZlID0gTWF0aC5wb3coKDEgLSB0KSwgMikgKiBwMC54ICsgMiAqIHQgKiAoMSAtIHQpICogcDEueCArIE1hdGgucG93KHQsIDIpICogcDIueDtcbiAgICAgICAgICAgIGNvbnN0IHlPbkN1cnZlID0gTWF0aC5wb3coKDEgLSB0KSwgMikgKiBwMC55ICsgMiAqIHQgKiAoMSAtIHQpICogcDEueSArIE1hdGgucG93KHQsIDIpICogcDIueTtcbiAgICAgICAgICAgIGNvbnN0IHJlY3RXID0gTWF0aC5hYnMoeCAtIHhPbkN1cnZlKTtcbiAgICAgICAgICAgIGNvbnN0IHJlY3RIID0gTWF0aC5hYnMoeSAtIHlPbkN1cnZlKTtcbiAgICAgICAgICAgIGNvbnN0IHN1bUhXID0gcmVjdFcgKyByZWN0SDtcbiAgICAgICAgICAgIGlmICghbWluU3VtSFcgfHwgbWluU3VtSFcgPiBzdW1IVylcbiAgICAgICAgICAgICAgICBtaW5TdW1IVyA9IHN1bUhXO1xuICAgICAgICAgICAgbWF4SFdbaV0gPSBNYXRoLm1heChyZWN0VywgcmVjdEgpO1xuICAgICAgICAgICAgYXJyWFtpXSA9IHhPbkN1cnZlO1xuICAgICAgICAgICAgYXJyWVtpXSA9IHlPbkN1cnZlO1xuICAgICAgICB9XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJyWC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKG1heEhXW2ldIDwgbWluU3VtSFcpXG4gICAgICAgICAgICAgICAgY2FuZGlkYXRlSWR4cy5zZXRCaXQoaSwgdHJ1ZSwgZmFsc2UpO1xuICAgICAgICB9XG4gICAgICAgIGxldCBtaW5EaXN0ID0gbnVsbDtcbiAgICAgICAgZm9yIChsZXQgaiA9IC0xOyAoaiA9IGNhbmRpZGF0ZUlkeHMuZmluZE5leHQoaikpICE9PSAtMTspIHtcbiAgICAgICAgICAgIGNvbnN0IGRpc3QgPSBNYXRoLmh5cG90KChhcnJYW2pdIC0geCksIChhcnJZW2pdIC0geSkpO1xuICAgICAgICAgICAgaWYgKCFtaW5EaXN0IHx8IG1pbkRpc3QgPiBkaXN0KVxuICAgICAgICAgICAgICAgIG1pbkRpc3QgPSBkaXN0O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtaW5EaXN0O1xuICAgIH1cbiAgICBnZXRMaW5lTGVuZ3RoKHAxeCwgcDF5LCBwMngsIHAyeSkge1xuICAgICAgICByZXR1cm4gTWF0aC5zcXJ0KE1hdGgucG93KHAyeCAtIHAxeCwgMikgKyBNYXRoLnBvdyhwMnkgLSBwMXksIDIpKTtcbiAgICB9XG4gICAgZ2V0UG9pbnRPbkRpc3RhbmNlKHAxeCwgcDF5LCBwMngsIHAyeSwgZGlzdGFuY2UsIGxlbmd0aCkge1xuICAgICAgICBjb25zdCBkeCA9IChwMnggLSBwMXgpIC8gbGVuZ3RoO1xuICAgICAgICBjb25zdCBkeSA9IChwMnkgLSBwMXkpIC8gbGVuZ3RoO1xuICAgICAgICBjb25zdCBwM3ggPSBwMnggLSBkaXN0YW5jZSAqIGR4O1xuICAgICAgICBjb25zdCBwM3kgPSBwMnkgLSBkaXN0YW5jZSAqIGR5O1xuICAgICAgICByZXR1cm4gbmV3IERHLlBvaW50KHAzeCwgcDN5KTtcbiAgICB9XG4gICAgZmluZENvbnRyb2xQb2ludChpZHgsIHgxLCB5MSwgeDIsIHkyLCBpKSB7XG4gICAgICAgIGNvbnN0IG1pZFggPSB4MSArICh4MiAtIHgxKSAvIDI7XG4gICAgICAgIGNvbnN0IG1pZFkgPSB5MSArICh5MiAtIHkxKSAvIDI7XG4gICAgICAgIGxldCBkeCA9IG1pZFggLSB4MTtcbiAgICAgICAgbGV0IGR5ID0gbWlkWSAtIHkxO1xuICAgICAgICBjb25zdCBkaXN0ID0gTWF0aC5zcXJ0KGR4ICogZHggKyBkeSAqIGR5KTtcbiAgICAgICAgZHggLz0gZGlzdDtcbiAgICAgICAgZHkgLz0gZGlzdDtcbiAgICAgICAgY29uc3QgcGVycGVuZGljdWxhckxlbiA9IDUwICogTWF0aC5jZWlsKGlkeCAvIDIpO1xuICAgICAgICByZXR1cm4gaWR4ICUgMiA9PT0gMCA/XG4gICAgICAgICAgICBuZXcgREcuUG9pbnQobWlkWCArIChwZXJwZW5kaWN1bGFyTGVuIC8gMikgKiBkeSwgbWlkWSAtIChwZXJwZW5kaWN1bGFyTGVuIC8gMikgKiBkeCkgOlxuICAgICAgICAgICAgbmV3IERHLlBvaW50KG1pZFggLSAocGVycGVuZGljdWxhckxlbiAvIDIpICogZHksIG1pZFkgKyAocGVycGVuZGljdWxhckxlbiAvIDIpICogZHgpO1xuICAgIH1cbiAgICBjYW52YXNBcnJvdyhwYXRoLCBhcnJvd0VuZFgsIGFycm93RW5kWSwgcXVhZFgsIHF1YWRZKSB7XG4gICAgICAgIGNvbnN0IGFycm93QW5nbGUgPSBNYXRoLmF0YW4yKHF1YWRYIC0gYXJyb3dFbmRYLCBxdWFkWSAtIGFycm93RW5kWSkgKyBNYXRoLlBJO1xuICAgICAgICBwYXRoLm1vdmVUbyhhcnJvd0VuZFggLSAodGhpcy5hcnJvd1dpZHRoICogTWF0aC5zaW4oYXJyb3dBbmdsZSAtIE1hdGguUEkgLyAxMCkpLCBhcnJvd0VuZFkgLSAodGhpcy5hcnJvd1dpZHRoICogTWF0aC5jb3MoYXJyb3dBbmdsZSAtIE1hdGguUEkgLyAxMCkpKTtcbiAgICAgICAgcGF0aC5saW5lVG8oYXJyb3dFbmRYLCBhcnJvd0VuZFkpO1xuICAgICAgICBwYXRoLmxpbmVUbyhhcnJvd0VuZFggLSAodGhpcy5hcnJvd1dpZHRoICogTWF0aC5zaW4oYXJyb3dBbmdsZSArIE1hdGguUEkgLyAxMCkpLCBhcnJvd0VuZFkgLSAodGhpcy5hcnJvd1dpZHRoICogTWF0aC5jb3MoYXJyb3dBbmdsZSArIE1hdGguUEkgLyAxMCkpKTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2ljbVZ1WkdWeUxXeHBibVZ6TFc5dUxYTndMbXB6SWl3aWMyOTFjbU5sVW05dmRDSTZJaUlzSW5OdmRYSmpaWE1pT2xzaWNtVnVaR1Z5TFd4cGJtVnpMVzl1TFhOd0xuUnpJbDBzSW01aGJXVnpJanBiWFN3aWJXRndjR2x1WjNNaU9pSkJRVUZCTERSQ1FVRTBRanRCUVVNMVFpeFBRVUZQTEV0QlFVc3NSVUZCUlN4TlFVRk5MR2xDUVVGcFFpeERRVUZETzBGQlEzUkRMRTlCUVU4c1JVRkJReXhQUVVGUExFVkJRVU1zVFVGQlRTeE5RVUZOTEVOQlFVTTdRVUZETjBJc1QwRkJUeXhSUVVGUkxFMUJRVTBzWVVGQllTeERRVUZETzBGQlJXNURMRTFCUVUwc1EwRkJUaXhKUVVGWkxESkNRVWxZTzBGQlNrUXNWMEZCV1N3eVFrRkJNa0k3U1VGRGJrTXNORU5CUVdFc1EwRkJRVHRKUVVOaUxEUkRRVUZoTEVOQlFVRTdTVUZEWWl4blJFRkJhVUlzUTBGQlFUdEJRVU55UWl4RFFVRkRMRVZCU2xjc01rSkJRVEpDTEV0QlFUTkNMREpDUVVFeVFpeFJRVWwwUXp0QlFUaENSQ3hOUVVGTkxFOUJRVThzZDBKQlFYZENPMGxCWjBKdVF5eEpRVUZKTEdGQlFXRTdVVUZEWml4UFFVRlBMRWxCUVVrc1EwRkJReXhsUVVGbExFTkJRVU03U1VGRE9VSXNRMEZCUXp0SlFVVkVMRWxCUVVrc1lVRkJZU3hEUVVGRExFVkJRVlU3VVVGRE1VSXNTVUZCU1N4RlFVRkZMRXRCUVVzc1NVRkJTU3hEUVVGRExHVkJRV1VzUlVGQlJUdFpRVU12UWl4SlFVRkpMRU5CUVVNc1pVRkJaU3hIUVVGSExFVkJRVVVzUTBGQlF6dFpRVU14UWl4SlFVRkpMRU5CUVVNc1JVRkJSU3hEUVVGRExFMUJRVTBzUTBGQlF5eEpRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNN1UwRkRNVUk3U1VGRFNDeERRVUZETzBsQlJVUXNTVUZCU1N4aFFVRmhMRU5CUVVNc1MwRkJhMEk3VVVGRGJFTXNTVUZCU1N4RFFVRkRMRmRCUVZjc1EwRkJReXhMUVVGTExFTkJRVU1zUTBGQlF6dFJRVU40UWl4SlFVRkpMRU5CUVVNc1JVRkJSU3hEUVVGRExFMUJRVTBzUTBGQlF5eEpRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNN1NVRkRNMElzUTBGQlF6dEpRVVZFTEVsQlFVa3NaVUZCWlN4RFFVRkRMRlZCUVc5Q08xRkJRM1JETEVsQlFVa3NRMEZCUXl4VlFVRlZMRWRCUVVjc1ZVRkJWU3hEUVVGRE8xRkJRemRDTEVsQlFVa3NRMEZCUXl4RlFVRkZMRU5CUVVNc1RVRkJUU3hEUVVGRExFbEJRVWtzUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXp0SlFVTXpRaXhEUVVGRE8wbEJSVVFzV1VGQldTeEZRVUYzUWl4RlFVRkZMRXRCUVdFc1JVRkJSU3hMUVVGaExFVkJRVVVzUzBGQmEwSXNSVUZEY0VZc1owSkJRV2RDTEVkQlFVY3NNa0pCUVRKQ0xFTkJRVU1zU1VGQlNUczdVVUZzUTNKRUxHOUNRVUZsTEVkQlFVY3NRMEZCUXl4RFFVRkRMRU5CUVVNN1VVRkZja0lzWjBKQlFWY3NSMEZCUnl4SlFVRkpMRTlCUVU4c1JVRkJjMElzUTBGQlF6dFJRVU5vUkN4alFVRlRMRWRCUVVjc1NVRkJTU3hQUVVGUExFVkJRWE5DTEVOQlFVTTdVVUZIT1VNc2IwSkJRV1VzUjBGQlJ5eERRVUZETEVOQlFVTXNRMEZCUXp0UlFVbHlRaXhsUVVGVkxFZEJRVWNzUlVGQlJTeERRVUZETzFGQmVVSmtMRWxCUVVrc1EwRkJReXhGUVVGRkxFZEJRVWNzUlVGQlJTeERRVUZETzFGQlEySXNTVUZCU1N4RFFVRkRMRkZCUVZFc1IwRkJSeXhKUVVGSkxFTkJRVU1zUlVGQlJTeERRVUZETEZOQlFWVXNRMEZCUXl4UFFVRlBMRU5CUVVNc1RVRkJUU3hEUVVGRExFdEJRVXNzUTBGQlF5eERRVUZETzFGQlEzcEVMRWxCUVVrc1EwRkJReXhSUVVGUkxFZEJRVWNzU1VGQlNTeERRVUZETEVWQlFVVXNRMEZCUXl4VFFVRlZMRU5CUVVNc1QwRkJUeXhEUVVGRExFMUJRVTBzUTBGQlF5eExRVUZMTEVOQlFVTXNRMEZCUXp0UlFVTjZSQ3hKUVVGSkxFTkJRVU1zVFVGQlRTeEhRVUZITEVsQlFVa3NRMEZCUXl4RlFVRkZMRU5CUVVNc1QwRkJUeXhGUVVGRkxFTkJRVU1zVVVGQlVTeERRVUZETEVOQlFVTTdVVUZETVVNc1NVRkJTU3hEUVVGRExFZEJRVWNzUjBGQlJ5eEpRVUZKTEVOQlFVTXNUVUZCVFN4RFFVRkRMRlZCUVZVc1EwRkJReXhKUVVGSkxFTkJRVFpDTEVOQlFVTTdVVUZEY0VVc1NVRkJTU3hEUVVGRExHZENRVUZuUWl4SFFVRkhMR2RDUVVGblFpeERRVUZETzFGQlEzcERMRWxCUVVrc1EwRkJReXhYUVVGWExFTkJRVU1zUzBGQlN5eERRVUZETEVOQlFVTTdVVUZEZUVJc1NVRkJTU3hEUVVGRExGVkJRVlVzUjBGQlJ5eE5RVUZCTEV0QlFVc3NRMEZCUXl4VlFVRlZMRzFEUVVGSkxFbEJRVWtzVVVGQlVTeERRVUZETEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1NVRkJTU3hEUVVGRExFMUJRVTBzUTBGQlF5eERRVUZETzFGQlF6TkZMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zVlVGQlZUdFpRVU51UWl4SlFVRkpMRU5CUVVNc1ZVRkJWU3hEUVVGRExFMUJRVTBzUTBGQlF5eEpRVUZKTEVWQlFVVXNTMEZCU3l4RFFVRkRMRU5CUVVNN1VVRkRkRU1zU1VGQlNTeExRVUZMTEVOQlFVTXNVMEZCVXp0WlFVTnFRaXhKUVVGSkxFTkJRVU1zVlVGQlZTeEhRVUZITEV0QlFVc3NRMEZCUXl4VFFVRlRMRU5CUVVNN1VVRkZjRU1zU1VGQlNTeERRVUZETEUxQlFVMHNRMEZCUXl4WFFVRlhMRWRCUVVjc1EwRkJReXhMUVVGcFFpeEZRVUZGTEVWQlFVVTdXVUZET1VNc1NVRkJTU3hKUVVGSkxFTkJRVU1zWlVGQlpTeExRVUZMTEVOQlFVTXNRMEZCUXp0blFrRkROMElzU1VGQlNTeERRVUZETEZkQlFWY3NRMEZCUXl4SlFVRkpMRU5CUVVNc1JVRkJReXhEUVVGRExFVkJRVVVzUzBGQlN5eERRVUZETEU5QlFVOHNSVUZCUlN4RFFVRkRMRVZCUVVVc1MwRkJTeXhEUVVGRExFOUJRVThzUlVGQlJTeEZRVUZGTEVWQlFVVXNTVUZCU1N4RFFVRkRMR1ZCUVdVc1JVRkJSU3hMUVVGTExFVkJRVVVzUzBGQlN5eEZRVUZETEVOQlFVTXNRMEZCUXp0UlFVTjRSeXhEUVVGRExFTkJRVU03VVVGRlJpeEpRVUZKTEVOQlFVTXNUVUZCVFN4RFFVRkRMRmRCUVZjc1IwRkJSeXhEUVVGRExFdEJRV2xDTEVWQlFVVXNSVUZCUlR0WlFVTTVReXhKUVVGSkxFTkJRVU1zWlVGQlpTeEhRVUZITEVsQlFVa3NRMEZCUXl4cFFrRkJhVUlzUTBGQlF5eExRVUZMTEVOQlFVTXNUMEZCVHl4RlFVRkZMRXRCUVVzc1EwRkJReXhQUVVGUExFTkJRVU1zUTBGQlF6dFpRVU0xUlN4SlFVRkpMRWxCUVVrc1EwRkJReXhsUVVGbExFdEJRVXNzUTBGQlF5eERRVUZETzJkQ1FVTTNRaXhKUVVGSkxFTkJRVU1zVTBGQlV5eERRVUZETEVsQlFVa3NRMEZCUXl4RlFVRkRMRU5CUVVNc1JVRkJSU3hMUVVGTExFTkJRVU1zVDBGQlR5eEZRVUZGTEVOQlFVTXNSVUZCUlN4TFFVRkxMRU5CUVVNc1QwRkJUeXhGUVVGRkxFVkJRVVVzUlVGQlJTeEpRVUZKTEVOQlFVTXNaVUZCWlN4RlFVRkZMRXRCUVVzc1JVRkJSU3hMUVVGTExFVkJRVU1zUTBGQlF5eERRVUZETzFGQlEzUkhMRU5CUVVNc1EwRkJRenRSUVVWR0xFVkJRVVVzUTBGQlF5eFBRVUZQTEVOQlFVTXNjMEpCUVhOQ0xFTkJRVU03WVVGREwwSXNVMEZCVXl4RFFVRkRMRU5CUVVNc1EwRkJUU3hGUVVGRkxFVkJRVVU3V1VGRGNFSXNTVUZCU1N4RFFVRkRMRmRCUVZjc1JVRkJSU3hEUVVGRE8xRkJRM0pDTEVOQlFVTXNRMEZCUXl4RFFVRkRPMGxCUTFBc1EwRkJRenRKUVVWRUxGZEJRVmNzUTBGQlF5eExRVUZyUWp0UlFVTTFRaXhKUVVGSkxFTkJRVU1zUzBGQlN5eEhRVUZITEV0QlFVc3NRMEZCUXp0UlFVTnVRaXhKUVVGSkxFTkJRVU1zYlVKQlFXMUNMRWRCUVVjc1NVRkJTU3hWUVVGVkxFTkJRVU1zU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4SlFVRkpMRU5CUVVNc1RVRkJUU3hEUVVGRExFTkJRVU03VVVGRGJFVXNTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXgzUWtGQmQwSTdXVUZEYWtNc1NVRkJTU3hEUVVGRExIVkNRVUYxUWl4RlFVRkZMRU5CUVVNN08xbEJSUzlDTEVsQlFVa3NRMEZCUXl4dFFrRkJiVUlzUTBGQlF5eEpRVUZKTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN1NVRkRja01zUTBGQlF6dEpRVVZFTEZkQlFWYzdPMUZCUTFRc1RVRkJUU3hOUVVGTkxFZEJRVWNzU1VGQlNTeERRVUZETEVWQlFVVXNRMEZCUXl4VlFVRlZMRVZCUVVVc1EwRkJReXhKUVVGSkxFTkJRVU03VVVGRGVrTXNUVUZCVFN4dlFrRkJiMElzUjBGQlJ5eEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRTFCUVUwc1NVRkJTU3hKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEV0QlFVc3NTVUZCU1N4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExGTkJRVk1zU1VGQlNTeEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMR0ZCUVdFc1EwRkJRenRSUVVOMlNDeEpRVUZKTEVOQlFVTXNiMEpCUVc5Q0xFVkJRVVU3V1VGRGVrSXNTVUZCU1N4RFFVRkRMRWRCUVVjc1EwRkJReXhUUVVGVExFZEJRVWNzVFVGQlFTeEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRXRCUVVzc2JVTkJRVWtzUTBGQlF5eERRVUZETzFsQlF6TkRMRWxCUVVrc1EwRkJReXhIUVVGSExFTkJRVU1zVjBGQlZ5eEhRVUZITEZGQlFWRXNUVUZCUVN4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExFdEJRVXNzYlVOQlFVa3NVMEZCVXl4SlFVRkpMRTFCUVVFc1NVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eFBRVUZQTEcxRFFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRE8xTkJRelZHTzFGQlEwUXNUVUZCVFN4aFFVRmhMRWRCUVVjc1RVRkJUU3hEUVVGRExHZENRVUZuUWl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFbEJRVWtzUTBGQlF5eEZRVUZGTEVOQlFVTXNVMEZCVXl4RFFVRkRMRWRCUVVjc1EwRkJReXhOUVVGTkxFTkJRVU1zWjBKQlFXZENMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eEpRVUZKTEVOQlFVTTdVVUZEZUVjc1RVRkJUU3hOUVVGTkxFZEJRVWNzU1VGQlNTeERRVUZETEVWQlFVVXNRMEZCUXl4VFFVRlRMRU5CUVVNc1RVRkJUU3hEUVVGRE8xRkJRM2hETEV0QlFVc3NTVUZCU1N4RFFVRkRMRWRCUVVjc1EwRkJReXhGUVVGRkxFTkJRVU1zUjBGQlJ5eEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRWxCUVVrc1EwRkJReXhOUVVGTkxFVkJRVVVzUTBGQlF5eEZRVUZGTEVWQlFVVTdXVUZETDBNc1NVRkJTU3hOUVVGTkxFTkJRVU1zUjBGQlJ5eERRVUZETEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1NVRkJTU3hEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVsQlFVa3NUVUZCVFN4RFFVRkRMRWRCUVVjc1EwRkJReXhKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEVWQlFVVXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhKUVVGSkxFbEJRVWtzUTBGQlF5eFZRVUZWTEVOQlFVTXNUVUZCVFN4RFFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRk8yZENRVU12Uml4SlFVRkpMRTlCUVU4c1IwRkJSeXhEUVVGRExFTkJRVU03WjBKQlEyaENMRTFCUVUwc1JVRkJReXhSUVVGUkxFVkJRVVVzVFVGQlRTeEZRVUZETEVkQlFVY3NTVUZCU1N4RFFVRkRMR1ZCUVdVc1EwRkJReXhOUVVGTkxFVkJRVVVzWVVGQllTeEZRVUZGTEVOQlFVTXNRMEZCUXl4RFFVRkRPMmRDUVVNeFJTeE5RVUZOTEZOQlFWTXNSMEZCUnl4SlFVRkpMRU5CUVVNc1JVRkJSU3hEUVVGRExHRkJRV0VzUTBGQlF5eEpRVUZKTEVOQlFVTXNVVUZCVVN4RFFVRkRMRWRCUVVjc1EwRkJReXhKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEVsQlFVa3NRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRkxFbEJRVWtzUTBGQlF5eFJRVUZSTEVOQlFVTXNSMEZCUnl4RFFVRkRMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zU1VGQlNTeERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJRenRuUWtGRGRFZ3NTVUZCU1N4RlFVRkZMRWRCUVVjc1UwRkJVeXhoUVVGVUxGTkJRVk1zZFVKQlFWUXNVMEZCVXl4RFFVRkZMRU5CUVVNc1EwRkJRenRuUWtGRGRFSXNTVUZCU1N4RlFVRkZMRWRCUVVjc1UwRkJVeXhoUVVGVUxGTkJRVk1zZFVKQlFWUXNVMEZCVXl4RFFVRkZMRU5CUVVNc1EwRkJRenRuUWtGRGRFSXNUVUZCVFN4UFFVRlBMRWRCUVVjc1NVRkJTU3hEUVVGRExFVkJRVVVzUTBGQlF5eGhRVUZoTEVOQlFVTXNTVUZCU1N4RFFVRkRMRkZCUVZFc1EwRkJReXhIUVVGSExFTkJRVU1zU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4RlFVRkZMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUlVGQlJTeEpRVUZKTEVOQlFVTXNVVUZCVVN4RFFVRkRMRWRCUVVjc1EwRkJReXhKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEVWQlFVVXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU03WjBKQlEyaElMRWxCUVVrc1JVRkJSU3hIUVVGSExFOUJRVThzWVVGQlVDeFBRVUZQTEhWQ1FVRlFMRTlCUVU4c1EwRkJSU3hEUVVGRExFTkJRVU03WjBKQlEzQkNMRWxCUVVrc1JVRkJSU3hIUVVGSExFOUJRVThzWVVGQlVDeFBRVUZQTEhWQ1FVRlFMRTlCUVU4c1EwRkJSU3hEUVVGRExFTkJRVU03WjBKQlEzQkNMRTFCUVUwc1QwRkJUeXhIUVVGSExFbEJRVWtzUTBGQlF5eEhRVUZITEVOQlFVTXNTVUZCU1N4RFFVRkRMRVZCUVVVc1EwRkJReXhQUVVGUExFTkJRVU1zUzBGQlN5eEZRVUZGTEVsQlFVa3NRMEZCUXl4RlFVRkZMRU5CUVVNc1QwRkJUeXhEUVVGRExFMUJRVTBzUTBGQlF5eERRVUZETzJkQ1FVTjRSU3hKUVVGSkxFTkJRVU1zUjBGQlJ5eERRVUZETEZOQlFWTXNSVUZCUlN4RFFVRkRPMmRDUVVOeVFpeEpRVUZKTEVWQlFVVXNTVUZCU1N4RlFVRkZMRWxCUVVrc1JVRkJSU3hKUVVGSkxFVkJRVVVzU1VGQlNTeEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRVZCUVVjc1IwRkJSeXhGUVVGSExFVkJRVVVzUlVGQlJ5eEhRVUZITEVWQlFVY3NRMEZCUXl4SFFVRkhMRTlCUVU4c1IwRkJSeXhKUVVGSkxFVkJRVVU3YjBKQlF6ZEZMRWxCUVVrc2IwSkJRVzlDTEVWQlFVVTdkMEpCUTNoQ0xFMUJRVTBzUzBGQlN5eEhRVUZITEVOQlFVRXNUVUZCUVN4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExFMUJRVTBzTUVOQlFVY3NRMEZCUXl4RFFVRkRMRVZCUVVNc1EwRkJReXhEUVVGRExFMUJRVUVzU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4TlFVRk5MREJEUVVGSExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4VFFVRlRMRU5CUVVNN2QwSkJRekZGTEUxQlFVMHNUMEZCVHl4SFFVRkhMRU5CUVVFc1RVRkJRU3hKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEZOQlFWTXNNRU5CUVVjc1EwRkJReXhEUVVGRExFVkJRVU1zUTBGQlF5eERRVUZETEUxQlFVRXNTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhUUVVGVExEQkRRVUZITEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU03ZDBKQlF6RkZMRWxCUVVrc1EwRkJReXhIUVVGSExFTkJRVU1zVjBGQlZ5eEhRVUZITEZGQlFWRXNTMEZCU3l4SlFVRkpMRTlCUVU4c1IwRkJSeXhEUVVGRE8zZENRVU51UkN4SlFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExGTkJRVk1zUjBGQlJ5eERRVUZCTEUxQlFVRXNTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhOUVVGTkxEQkRRVUZITEVOQlFVTXNRMEZCUXl4RlFVRkRMRU5CUVVNc1EwRkJReXhOUVVGQkxFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNUVUZCVFN3d1EwRkJSeXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRPM0ZDUVVNeFJUdHZRa0ZEUkN4SlFVRkpMRU5CUVVNc1MwRkJTeXhKUVVGSkxFTkJRVU1zWlVGQlpUdDNRa0ZETlVJc1NVRkJTU3hEUVVGRExITkNRVUZ6UWl4RFFVRkRMRWxCUVVrc1EwRkJReXhEUVVGRE8yOUNRVU53UXl4TlFVRk5MRlZCUVZVc1IwRkJSeXhKUVVGSkxFTkJRVU1zYlVKQlFXMUNMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU03YjBKQlF5OURMRWxCUVVrc1dVRkJXU3hIUVVGdlFpeEpRVUZKTEVOQlFVTTdiMEpCUTNwRExFbEJRVWtzVlVGQlZTeEZRVUZGTzNkQ1FVTmtMRTlCUVU4c1IwRkJSeXhKUVVGSkxFTkJRVU1zWVVGQllTeERRVUZETEVWQlFVVXNSVUZCUlN4RlFVRkZMRVZCUVVVc1JVRkJSU3hGUVVGRkxFVkJRVVVzUTBGQlF5eERRVUZETzNkQ1FVTTNReXhOUVVGTkxHOUNRVUZ2UWl4SFFVRkhMRWxCUVVrc1EwRkJReXhyUWtGQmEwSXNRMEZCUXl4RlFVRkZMRVZCUVVVc1JVRkJSU3hGUVVGRkxFVkJRVVVzUlVGQlJTeEZRVUZGTEVWQlFVVXNUVUZCVFN4RlFVRkZMRTlCUVU4c1EwRkJReXhEUVVGRE8zZENRVU4wUml4TlFVRk5MRzFDUVVGdFFpeEhRVUZITEVsQlFVa3NRMEZCUXl4clFrRkJhMElzUTBGQlF5eEZRVUZGTEVWQlFVVXNSVUZCUlN4RlFVRkZMRVZCUVVVc1JVRkJSU3hGUVVGRkxFVkJRVVVzVVVGQlVTeEZRVUZGTEU5QlFVOHNRMEZCUXl4RFFVRkRPM2RDUVVOMlJpeEZRVUZGTEVkQlFVY3NiMEpCUVc5Q0xFTkJRVU1zUTBGQlF5eERRVUZETzNkQ1FVTTFRaXhGUVVGRkxFZEJRVWNzYjBKQlFXOUNMRU5CUVVNc1EwRkJReXhEUVVGRE8zZENRVU0xUWl4RlFVRkZMRWRCUVVjc2JVSkJRVzFDTEVOQlFVTXNRMEZCUXl4RFFVRkRPM2RDUVVNelFpeEZRVUZGTEVkQlFVY3NiVUpCUVcxQ0xFTkJRVU1zUTBGQlF5eERRVUZETzNkQ1FVTXpRaXhaUVVGWkxFZEJRVWNzU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4SlFVRkpMRU5CUVVNc1EwRkJReXhEUVVGRExFZEJRVWNzU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4RlFVRkZMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF6czBRa0ZEY0VRc1NVRkJTU3hEUVVGRExHZENRVUZuUWl4RFFVRkRMRlZCUVZVc1JVRkJSU3hGUVVGRkxFVkJRVVVzUlVGQlJTeEZRVUZGTEVWQlFVVXNSVUZCUlN4RlFVRkZMRVZCUVVVc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF6czBRa0ZEZEVRc1NVRkJTU3hEUVVGRExHZENRVUZuUWl4RFFVRkRMRlZCUVZVc1JVRkJSU3hGUVVGRkxFVkJRVVVzUlVGQlJTeEZRVUZGTEVWQlFVVXNSVUZCUlN4RlFVRkZMRVZCUVVVc1EwRkJReXhEUVVGRExFTkJRVU03ZDBKQlEzWkVMRWxCUVVrc1EwRkJReXhIUVVGSExFTkJRVU1zVFVGQlRTeERRVUZETEVWQlFVY3NSVUZCUlN4RlFVRkhMRU5CUVVNc1EwRkJRenQzUWtGRE1VSXNTVUZCU1N4RFFVRkRMRWRCUVVjc1EwRkJReXhuUWtGQlowSXNRMEZCUXl4WlFVRlpMRU5CUVVNc1EwRkJReXhGUVVGRkxGbEJRVmtzUTBGQlF5eERRVUZETEVWQlFVVXNSVUZCUlN4RlFVRkZMRVZCUVVVc1EwRkJReXhEUVVGRE8zRkNRVU51UlR0NVFrRkJUVHQzUWtGRFRDeEpRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRTFCUVUwc1EwRkJReXhGUVVGSExFVkJRVVVzUlVGQlJ5eERRVUZETEVOQlFVTTdkMEpCUXpGQ0xFbEJRVWtzUTBGQlF5eEhRVUZITEVOQlFVTXNUVUZCVFN4RFFVRkRMRVZCUVVVc1JVRkJSU3hGUVVGRkxFTkJRVU1zUTBGQlF6dHhRa0ZEZWtJN2IwSkJRMFFzU1VGQlNTeE5RVUZCTEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1ZVRkJWU3h0UTBGQlNTeE5RVUZCTEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1lVRkJZU3d3UTBGQlJTeE5RVUZOTEVOQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVVN2QwSkJRMmhGTEVsQlFVa3NRMEZCUXl4UFFVRlBPelJDUVVOV0xFOUJRVThzUjBGQlJ5eEpRVUZKTEVOQlFVTXNZVUZCWVN4RFFVRkRMRVZCUVVVc1JVRkJSU3hGUVVGRkxFVkJRVVVzUlVGQlJTeEZRVUZGTEVWQlFVVXNRMEZCUXl4RFFVRkRPM2RDUVVNdlF5eEpRVUZKTEU5QlFVOHNSMEZCUnl4SlFVRkpMRU5CUVVNc1ZVRkJWU3hGUVVGRk96UkNRVU0zUWl4TlFVRk5MRlZCUVZVc1IwRkJSeXhEUVVGRExGVkJRVlVzUTBGQlF5eERRVUZETEVOQlFVTXNTVUZCU1N4RFFVRkRMR3RDUVVGclFpeERRVUZETEVWQlFVVXNSVUZCUlN4RlFVRkZMRVZCUVVVc1JVRkJSU3hGUVVGRkxFVkJRVVVzUlVGQlJTeE5RVUZOTEVWQlFVVXNUMEZCVHl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFbEJRVWtzUTBGQlF6czBRa0ZEYWtjc1RVRkJUU3hSUVVGUkxFZEJRVWNzVlVGQlZTeERRVUZETEVOQlFVTXNRMEZCUXl4WlFVRmhMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZGTEVOQlFVTTdORUpCUTI1RUxFMUJRVTBzVVVGQlVTeEhRVUZITEZWQlFWVXNRMEZCUXl4RFFVRkRMRU5CUVVNc1dVRkJZU3hEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNSVUZCUlN4RFFVRkRPelJDUVVOdVJDeEpRVUZKTEVOQlFVTXNWMEZCVnl4RFFVRkRMRWxCUVVrc1EwRkJReXhIUVVGSExFVkJRVVVzVFVGQlFTeFZRVUZWTEdGQlFWWXNWVUZCVlN4MVFrRkJWaXhWUVVGVkxFTkJRVVVzUTBGQlF5eHRRMEZCU1N4RlFVRkZMRVZCUVVVc1RVRkJRU3hWUVVGVkxHRkJRVllzVlVGQlZTeDFRa0ZCVml4VlFVRlZMRU5CUVVVc1EwRkJReXh0UTBGQlNTeEZRVUZGTEVWQlFVVXNVVUZCVVN4RlFVRkZMRkZCUVZFc1EwRkJReXhEUVVGRE8zbENRVU14Ump0eFFrRkRSanR2UWtGRFJDeEpRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRTFCUVUwc1JVRkJSU3hEUVVGRE8yOUNRVU5zUWl4SlFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExGTkJRVk1zUlVGQlJTeERRVUZETzI5Q1FVTnlRaXhKUVVGSkxFTkJRVU1zUzBGQlN5eEpRVUZKTEVOQlFVTXNaVUZCWlR0M1FrRkROVUlzU1VGQlNTeERRVUZETEhOQ1FVRnpRaXhEUVVGRExFdEJRVXNzUTBGQlF5eERRVUZETzJsQ1FVTjBRenRoUVVOR08xTkJRMFk3VVVGRFJDeEpRVUZKTEVOQlFVTXNhMEpCUVd0Q0xFVkJRVVVzUTBGQlF6dEpRVU0xUWl4RFFVRkRPMGxCUlVRc2MwSkJRWE5DTEVOQlFVTXNTVUZCWVR0UlFVTnNReXhSUVVGUkxFbEJRVWtzUTBGQlF5eG5Ra0ZCWjBJc1JVRkJSVHRaUVVNM1FpeExRVUZMTERKQ1FVRXlRaXhEUVVGRExFbEJRVWtzUTBGQlF5eERRVUZETzJkQ1FVTnlReXhKUVVGSkxFTkJRVU1zUTBGQlF5eERRVUZETEVsQlFVa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1UwRkJVeXhKUVVGSkxFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNTVUZCU1N4RFFVRkRMRWRCUVVjc1EwRkJReXhUUVVGVExFbEJRVWtzUTBGQlF5eERRVUZETzJkQ1FVTjZSQ3hOUVVGTk8yRkJRMUE3V1VGRFJDeExRVUZMTERKQ1FVRXlRaXhEUVVGRExFMUJRVTBzUTBGQlF5eERRVUZETzJkQ1FVTjJReXhKUVVGSkxFTkJRVU1zUTBGQlF5eERRVUZETEVsQlFVa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1YwRkJWeXhEUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZGTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFbEJRVWtzUTBGQlF5eEhRVUZITEVOQlFVTXNWMEZCVnl4RFFVRkRMRVZCUVVVc1EwRkJReXhEUVVGRE8yZENRVU12UkN4TlFVRk5PMkZCUTFBN1dVRkRSRHRuUWtGRFJTeFBRVUZQTzFOQlExWTdTVUZEU0N4RFFVRkRPMGxCUlVRc1pVRkJaU3hEUVVGRExFMUJRVmNzUlVGQlJTeGhRVUVyUWl4RlFVRkZMRU5CUVZNN1VVRkRja1VzU1VGQlNTeFJRVUZSTEVkQlFVY3NRMEZCUXl4RFFVRkRPMUZCUTJwQ0xFbEJRVWtzVFVGQlRTeEhRVUZITEVOQlFVTXNRMEZCUXp0UlFVTm1MRWxCUVVrc1lVRkJZU3hGUVVGRk8xbEJRMnBDTEZGQlFWRXNSMEZCUnl4RFFVRkRMRTFCUVUwc1EwRkJReXhoUVVGaExFZEJRVWNzUTBGQlF5eE5RVUZOTEVOQlFVTXNZVUZCWVN4SFFVRkhMRTFCUVUwc1EwRkJReXhoUVVGaExFTkJRVU1zUjBGQlJ5eGhRVUZoTEVOQlFVTXNTMEZCU3l4RFFVRkRMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zU1VGQlNTeERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU03V1VGRGFFa3NUVUZCVFN4SFFVRkhMRU5CUVVNc1RVRkJUU3hEUVVGRExHRkJRV0VzUjBGQlJ5eERRVUZETEUxQlFVMHNRMEZCUXl4aFFVRmhMRWRCUVVjc1RVRkJUU3hEUVVGRExHRkJRV0VzUTBGQlF5eEhRVUZITEdGQlFXRXNRMEZCUXl4TFFVRkxMRU5CUVVNc1NVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eEZRVUZGTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF6dFRRVU0zU0R0aFFVRk5MRWxCUVVrc1RVRkJUU3hEUVVGRExHbENRVUZwUWl4RlFVRkZPMWxCUTI1RExGRkJRVkVzUjBGQlJ5eE5RVUZOTEVOQlFVTXNhVUpCUVdsQ0xFZEJRVWNzUTBGQlF5eERRVUZETzFsQlEzaERMRTFCUVUwc1IwRkJSeXhOUVVGTkxFTkJRVU1zYVVKQlFXbENMRWRCUVVjc1EwRkJReXhEUVVGRE8xTkJRM1pETzFGQlEwUXNUMEZCVHl4RlFVRkRMRkZCUVZFc1JVRkJSU3hOUVVGTkxFVkJRVU1zUTBGQlF6dEpRVU0xUWl4RFFVRkRPMGxCUjBRc2EwSkJRV3RDTzFGQlEyaENMRTFCUVUwc1NVRkJTU3hIUVVGSExFbEJRVWtzVFVGQlRTeEZRVUZGTEVOQlFVTTdVVUZETVVJc1NVRkJTU3hEUVVGRExFbEJRVWtzUTBGQlF5eEpRVUZKTEVOQlFVTXNSVUZCUlN4RFFVRkRMRkZCUVZFc1EwRkJReXhKUVVGSkxFVkJRVVVzU1VGQlNTeERRVUZETEVWQlFVVXNRMEZCUXl4UlFVRlJMRU5CUVVNc1NVRkJTU3hGUVVGRkxFbEJRVWtzUTBGQlF5eEZRVUZGTEVOQlFVTXNVVUZCVVN4RFFVRkRMRXRCUVVzc1JVRkJSU3hKUVVGSkxFTkJRVU1zUlVGQlJTeERRVUZETEZGQlFWRXNRMEZCUXl4TlFVRk5MRU5CUVVNc1EwRkJRenRSUVVONlJ5eEpRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRk5CUVZNc1IwRkJSeXhQUVVGUExFTkJRVU03VVVGRE4wSXNTVUZCU1N4RFFVRkRMRWRCUVVjc1EwRkJReXhUUVVGVExFVkJRVVVzUTBGQlF6dFJRVU55UWl4SlFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExFbEJRVWtzUTBGQlF5eEpRVUZKTEVOQlFVTXNRMEZCUXp0UlFVTndRaXhKUVVGSkxFTkJRVU1zUjBGQlJ5eERRVUZETEZOQlFWTXNSVUZCUlN4RFFVRkRPMGxCUTNaQ0xFTkJRVU03U1VGRlJDeDFRa0ZCZFVJN1VVRkRja0lzVFVGQlRTeHBRa0ZCYVVJc1IwRkJSeXhKUVVGSkxGRkJRVkVzUTBGQlF5eEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRWxCUVVrc1EwRkJReXhOUVVGTkxFTkJRVU1zUTBGQlF6dFJRVU12UkN4cFFrRkJhVUlzUTBGQlF5eE5RVUZOTEVOQlFVTXNTVUZCU1N4RFFVRkRMRU5CUVVNN1VVRkRMMElzUzBGQlN5eEpRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNc1JVRkJSU3hEUVVGRExFTkJRVU1zUjBGQlJ5eHBRa0ZCYVVJc1EwRkJReXhSUVVGUkxFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNTMEZCU3l4RFFVRkRMRU5CUVVNc1IwRkJSenRaUVVNMVJDeE5RVUZOTEZsQlFWa3NSMEZCUnl4RFFVRkRMRU5CUVVNN1dVRkRka0lzVFVGQlRTeEZRVUZGTEVkQlFVY3NTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhKUVVGSkxFTkJRVU1zV1VGQldTeERRVUZETEVOQlFVTTdXVUZEZWtNc1RVRkJUU3hGUVVGRkxFZEJRVWNzU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4RlFVRkZMRU5CUVVNc1dVRkJXU3hEUVVGRExFTkJRVU03V1VGRGRrTXNTVUZCU1N4WlFVRlpMRWRCUVVjc1EwRkJReXhEUVVGRE8xbEJRM0pDTEV0QlFVc3NTVUZCU1N4RFFVRkRMRWRCUVVjc1EwRkJReXhGUVVGRkxFTkJRVU1zUTBGQlF5eEhRVUZITEdsQ1FVRnBRaXhEUVVGRExGRkJRVkVzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4TFFVRkxMRU5CUVVNc1EwRkJReXhIUVVGSE8yZENRVU16UkN4TlFVRk5MR1ZCUVdVc1IwRkJSeXhKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEVsQlFVa3NRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJRenRuUWtGRE0wTXNUVUZCVFN4bFFVRmxMRWRCUVVjc1NVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eEZRVUZGTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN1owSkJRM3BETEVsQlFVa3NaVUZCWlN4TFFVRkxMRVZCUVVVc1NVRkJTU3hsUVVGbExFdEJRVXNzUlVGQlJUdHZRa0ZEZUVNc1pVRkJaU3hMUVVGTExFVkJRVVVzU1VGQlNTeGxRVUZsTEV0QlFVc3NSVUZCUlN4RlFVRkZPMjlDUVVNMVJDeEpRVUZKTEVOQlFVTXNiVUpCUVcxQ0xFTkJRVU1zUTBGQlF5eERRVUZETEVkQlFVY3NSVUZCUlN4WlFVRlpMRU5CUVVNN2IwSkJRemRETEdsQ1FVRnBRaXhEUVVGRExFMUJRVTBzUTBGQlF5eERRVUZETEVWQlFVVXNTMEZCU3l4RlFVRkZMRXRCUVVzc1EwRkJReXhEUVVGRE8ybENRVU16UXp0aFFVTkdPMWxCUTBRc1NVRkJTU3haUVVGWkxFZEJRVWNzUTBGQlF6dG5Ra0ZEYkVJc1NVRkJTU3hEUVVGRExHMUNRVUZ0UWl4RFFVRkRMRmxCUVZrc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF6dFpRVU0zUXl4cFFrRkJhVUlzUTBGQlF5eE5RVUZOTEVOQlFVTXNRMEZCUXl4RlFVRkZMRXRCUVVzc1JVRkJSU3hMUVVGTExFTkJRVU1zUTBGQlF6dFRRVU16UXp0SlFVTklMRU5CUVVNN1NVRkZSQ3hwUWtGQmFVSXNRMEZCUXl4RFFVRlRMRVZCUVVVc1EwRkJVenRSUVVOd1F5eEpRVUZKTEZsQlFWa3NSMEZCUnl4RFFVRkRMRU5CUVVNc1EwRkJRenRSUVVOMFFpeEpRVUZKTEU5QlFVOHNSMEZCUnl4SlFVRkpMRU5CUVVNN1VVRkRia0lzU1VGQlNTeEpRVUZKTEVkQlFVY3NTVUZCU1N4RFFVRkRPMUZCUTJoQ0xFMUJRVTBzVFVGQlRTeEhRVUZITEVsQlFVa3NRMEZCUXl4RlFVRkZMRU5CUVVNc1ZVRkJWU3hGUVVGRkxFTkJRVU1zU1VGQlNTeERRVUZETzFGQlEzcERMRTFCUVUwc1lVRkJZU3hIUVVGSExFMUJRVTBzUTBGQlF5eG5Ra0ZCWjBJc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eEpRVUZKTEVOQlFVTXNSVUZCUlN4RFFVRkRMRk5CUVZNc1EwRkJReXhIUVVGSExFTkJRVU1zVFVGQlRTeERRVUZETEdkQ1FVRm5RaXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNTVUZCU1N4RFFVRkRPMUZCUTNoSExFMUJRVTBzVFVGQlRTeEhRVUZITEVsQlFVa3NRMEZCUXl4RlFVRkZMRU5CUVVNc1UwRkJVeXhEUVVGRExFMUJRVTBzUTBGQlF6dFJRVU40UXl4TFFVRkxMRWxCUVVrc1EwRkJReXhIUVVGSExFTkJRVU1zUlVGQlJTeERRVUZETEVkQlFVY3NTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhKUVVGSkxFTkJRVU1zVFVGQlRTeEZRVUZGTEVOQlFVTXNSVUZCUlN4RlFVRkZPMWxCUXk5RExFbEJRVWtzVFVGQlRTeERRVUZETEVkQlFVY3NRMEZCUXl4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExFbEJRVWtzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4SlFVRkpMRTFCUVUwc1EwRkJReXhIUVVGSExFTkJRVU1zU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4RlFVRkZMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zU1VGQlNTeEpRVUZKTEVOQlFVTXNWVUZCVlN4RFFVRkRMRTFCUVUwc1EwRkJReXhEUVVGRExFTkJRVU1zUlVGQlJUdG5Ra0ZETDBZc1RVRkJUU3hGUVVGRExGRkJRVkVzUlVGQlJTeE5RVUZOTEVWQlFVTXNSMEZCUnl4SlFVRkpMRU5CUVVNc1pVRkJaU3hEUVVGRExFMUJRVTBzUlVGQlJTeGhRVUZoTEVWQlFVVXNRMEZCUXl4RFFVRkRMRU5CUVVNN1owSkJRekZGTEUxQlFVMHNTMEZCU3l4SFFVRkhMRWxCUVVrc1EwRkJReXhGUVVGRkxFTkJRVU1zWVVGQllTeERRVUZETEVsQlFVa3NRMEZCUXl4UlFVRlJMRU5CUVVNc1IwRkJSeXhEUVVGRExFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNTVUZCU1N4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFVkJRVVVzU1VGQlNTeERRVUZETEZGQlFWRXNRMEZCUXl4SFFVRkhMRU5CUVVNc1NVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eEpRVUZKTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE8yZENRVU5zU0N4TlFVRk5MRWRCUVVjc1IwRkJSeXhKUVVGSkxFTkJRVU1zUlVGQlJTeERRVUZETEdGQlFXRXNRMEZCUXl4SlFVRkpMRU5CUVVNc1VVRkJVU3hEUVVGRExFZEJRVWNzUTBGQlF5eEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRVZCUVVVc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZGTEVsQlFVa3NRMEZCUXl4UlFVRlJMRU5CUVVNc1IwRkJSeXhEUVVGRExFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNSVUZCUlN4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF6dG5Ra0ZETlVjc1NVRkJTU3hKUVVGSkxFTkJRVU1zYlVKQlFXMUNMRU5CUVVNc1EwRkJReXhEUVVGRExFVkJRVVU3YjBKQlF5OUNMRTFCUVUwc1IwRkJSeXhIUVVGSExFbEJRVWtzUTBGQlF5eGhRVUZoTEVOQlFVTXNTMEZCU3l4RFFVRkRMRU5CUVVNc1JVRkJSU3hMUVVGTExFTkJRVU1zUTBGQlF5eEZRVUZGTEVkQlFVY3NRMEZCUXl4RFFVRkRMRVZCUVVVc1IwRkJSeXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETzI5Q1FVTXZSQ3hOUVVGTkxGVkJRVlVzUjBGQlJ5eEpRVUZKTEVOQlFVTXNhMEpCUVd0Q0xFTkJRVU1zUzBGQlN5eERRVUZETEVOQlFVTXNSVUZCUlN4TFFVRkxMRU5CUVVNc1EwRkJReXhGUVVGRkxFZEJRVWNzUTBGQlF5eERRVUZETEVWQlFVVXNSMEZCUnl4RFFVRkRMRU5CUVVNc1JVRkJSU3hOUVVGTkxFVkJRVVVzUjBGQlJ5eERRVUZETEVOQlFVTTdiMEpCUTNoR0xFMUJRVTBzVVVGQlVTeEhRVUZITEVsQlFVa3NRMEZCUXl4clFrRkJhMElzUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXl4RlFVRkZMRWRCUVVjc1EwRkJReXhEUVVGRExFVkJRVVVzUzBGQlN5eGhRVUZNTEV0QlFVc3NkVUpCUVV3c1MwRkJTeXhEUVVGRkxFTkJRVU1zUlVGQlJTeExRVUZMTEdGQlFVd3NTMEZCU3l4MVFrRkJUQ3hMUVVGTExFTkJRVVVzUTBGQlF5eEZRVUZGTEZGQlFWRXNSVUZCUlN4SFFVRkhMRU5CUVVNc1EwRkJRenR2UWtGRE1VWXNUVUZCVFN4WlFVRlpMRWRCUVVjc1NVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eEpRVUZKTEVOQlFVTXNRMEZCUXl4RFFVRkRMRWRCUVVjc1NVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eEZRVUZGTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJRenQzUWtGRE1VUXNTVUZCU1N4RFFVRkRMR2RDUVVGblFpeERRVUZETEVsQlFVa3NRMEZCUXl4dFFrRkJiVUlzUTBGQlF5eERRVUZETEVOQlFVTXNSVUZCUlN4VlFVRlZMRU5CUVVNc1EwRkJReXhGUVVGRkxGVkJRVlVzUTBGQlF5eERRVUZETEVWQlFVVXNVVUZCVVN4RFFVRkRMRU5CUVVNc1JVRkJSU3hSUVVGUkxFTkJRVU1zUTBGQlF5eEZRVUZGTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN2QwSkJRek5ITEVsQlFVa3NRMEZCUXl4blFrRkJaMElzUTBGQlF5eEpRVUZKTEVOQlFVTXNiVUpCUVcxQ0xFTkJRVU1zUTBGQlF5eERRVUZETEVWQlFVVXNVVUZCVVN4RFFVRkRMRU5CUVVNc1JVRkJSU3hSUVVGUkxFTkJRVU1zUTBGQlF5eEZRVUZGTEZWQlFWVXNRMEZCUXl4RFFVRkRMRVZCUVVVc1ZVRkJWU3hEUVVGRExFTkJRVU1zUlVGQlJTeERRVUZETEVOQlFVTXNRMEZCUXp0dlFrRkROVWNzU1VGQlNTeEhRVUZITEVsQlFVa3NRMEZCUXl4M1FrRkJkMElzUTBGQlF5eERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hWUVVGVkxFVkJRVVVzVVVGQlVTeEZRVUZGTEZsQlFWa3NRMEZCUXl4RFFVRkRPMmxDUVVOdVJqdHhRa0ZCVFR0dlFrRkRUQ3hKUVVGSkxFZEJRVWNzU1VGQlNTeERRVUZETERKQ1FVRXlRaXhEUVVGRExFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNTMEZCU3l4RlFVRkZMRWRCUVVjc1EwRkJReXhEUVVGRE8ybENRVU16UkR0blFrRkRSQ3hKUVVGSkxFTkJRVU1zUTBGQlF5eFBRVUZQTEVsQlFVa3NTVUZCU1N4TFFVRkxMRWxCUVVrc1NVRkJTU3hKUVVGSkxFZEJRVWNzUTBGQlF5eERRVUZETEVsQlFVa3NUMEZCVHl4SlFVRkpMRWxCUVVrc1MwRkJTeXhKUVVGSkxFbEJRVWtzU1VGQlNTeEhRVUZITEU5QlFVOHNSVUZCUlR0dlFrRkRla1lzVDBGQlR5eEhRVUZITEVsQlFVa3NRMEZCUXp0dlFrRkRaaXhaUVVGWkxFZEJRVWNzUTBGQlF5eERRVUZETzJsQ1FVTnNRanRoUVVOR08xTkJRMFk3VVVGRFJDeFBRVUZQTEZsQlFWa3NRMEZCUXp0SlFVTjBRaXhEUVVGRE8wbEJSVVFzTWtKQlFUSkNMRU5CUVVNc1EwRkJVeXhGUVVGRkxFTkJRVk1zUlVGQlJTeEZRVUZaTEVWQlFVVXNSVUZCV1R0UlFVTXhSVHQ1UlVGRGFVVTdVVUZEYWtVc1RVRkJUU3hKUVVGSkxFZEJRVWNzU1VGQlNTeERRVUZETEVkQlFVY3NRMEZCUXl4RlFVRkZMRU5CUVVNc1EwRkJReXhGUVVGRkxFVkJRVVVzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXp0UlFVTnNReXhOUVVGTkxFbEJRVWtzUjBGQlJ5eEpRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRVZCUVVVc1EwRkJReXhEUVVGRExFVkJRVVVzUlVGQlJTeERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRPMUZCUTJ4RExFMUJRVTBzU1VGQlNTeEhRVUZITEVsQlFVa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1JVRkJSU3hEUVVGRExFTkJRVU1zUlVGQlJTeEZRVUZGTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN1VVRkRiRU1zVFVGQlRTeEpRVUZKTEVkQlFVY3NTVUZCU1N4RFFVRkRMRWRCUVVjc1EwRkJReXhGUVVGRkxFTkJRVU1zUTBGQlF5eEZRVUZGTEVWQlFVVXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJRenRSUVVWc1F5eHZSVUZCYjBVN1VVRkRjRVVzVFVGQlRTeFRRVUZUTEVkQlFVY3NRMEZCUXl4RFFVRkRPMUZCUTNCQ0xFOUJRVThzUTBGQlF5eEpRVUZKTEVsQlFVa3NSMEZCUnl4VFFVRlRMRWxCUVVrc1EwRkJReXhKUVVGSkxFbEJRVWtzUjBGQlJ5eFRRVUZUTEVsQlFVa3NRMEZCUXl4SlFVRkpMRWxCUVVrc1IwRkJSeXhUUVVGVExFbEJRVWtzUTBGQlF5eEpRVUZKTEVsQlFVa3NSMEZCUnl4VFFVRlRMRU5CUVVNc1EwRkJRenRaUVVOMlJ5eEpRVUZKTEVOQlFVTXNlVUpCUVhsQ0xFTkJRVU1zUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RlFVRkZMRVZCUVVVc1JVRkJSU3hEUVVGRExFTkJRVU1zUTBGQlF6dFpRVU01UXl4SlFVRkpMRU5CUVVNN1NVRkRWQ3hEUVVGRE8wbEJSVVFzZVVKQlFYbENMRU5CUVVNc1EwRkJVeXhGUVVGRkxFTkJRVk1zUlVGQlJTeEZRVUZaTEVWQlFVVXNSVUZCV1R0UlFVTjRSU3hOUVVGTkxFbEJRVWtzUjBGQlJ5eERRVUZETEVWQlFWVXNSVUZCUlN4RlFVRlZMRVZCUVVVc1JVRkJWU3hGUVVGRkxFVkJRVlVzUlVGQlJTeEZRVUZGTEVOQlFVTXNTVUZCU1N4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRExFVkJRVVVzUjBGQlJ5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRU5CUVVNc1IwRkJSeXhKUVVGSkxFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTXNSVUZCUlN4SFFVRkhMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUTBGQlF5eERRVUZETzFGQlEycElMRTFCUVUwc1EwRkJReXhIUVVGSExFbEJRVWtzUTBGQlF5eEZRVUZGTEVOQlFVTXNRMEZCUXl4RlFVRkZMRVZCUVVVc1EwRkJReXhEUVVGRExFVkJRVVVzUlVGQlJTeERRVUZETEVOQlFVTXNSVUZCUlN4RlFVRkZMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU03VVVGRGRrTXNTVUZCU1N4RFFVRkRMRWxCUVVrc1EwRkJRenRaUVVGRkxFOUJRVThzU1VGQlNTeERRVUZETEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1JVRkJSU3hEUVVGRExFTkJRVU1zUlVGQlJTeEZRVUZGTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN1VVRkRNVU1zU1VGQlNTeERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRMRU5CUVVNc1IwRkJSeXhGUVVGRkxFTkJRVU1zUTBGQlF5eERRVUZETEVkQlFVY3NRMEZCUXl4RlFVRkZMRU5CUVVNc1EwRkJReXhIUVVGSExFVkJRVVVzUTBGQlF5eERRVUZETEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNc1IwRkJSeXhGUVVGRkxFTkJRVU1zUTBGQlF5eERRVUZETEVkQlFVY3NRMEZCUXl4RlFVRkZMRU5CUVVNc1EwRkJReXhIUVVGSExFVkJRVVVzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJRenRSUVVOMFJTeERRVUZETEVkQlFVY3NTVUZCU1N4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRExFVkJRVVVzU1VGQlNTeERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRMRVZCUVVVc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF6dFJRVU5vUXl4UFFVRlBMRWxCUVVrc1EwRkJReXhEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVWQlFVVXNRMEZCUXl4RFFVRkRMRWRCUVVjc1EwRkJReXhIUVVGSExFTkJRVU1zUlVGQlJTeERRVUZETEVOQlFVTXNSMEZCUnl4RlFVRkZMRU5CUVVNc1EwRkJReXhEUVVGRExFVkJRVVVzUlVGQlJTeERRVUZETEVOQlFVTXNSMEZCUnl4RFFVRkRMRWRCUVVjc1EwRkJReXhGUVVGRkxFTkJRVU1zUTBGQlF5eEhRVUZITEVWQlFVVXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE8wbEJRM2hGTEVOQlFVTTdTVUZGUkN4M1FrRkJkMElzUTBGQlF5eERRVUZUTEVWQlFVVXNRMEZCVXl4RlFVRkZMRU5CUVZNc1JVRkJSU3hGUVVGWkxFVkJRVVVzUlVGQldTeEZRVU5zUml4RlFVRlpPMUZCUTFvN2VVVkJRMmxGTzFGQlEycEZMRTFCUVUwc1NVRkJTU3hIUVVGSExFbEJRVWtzUTBGQlF5eEhRVUZITEVOQlFVTXNSVUZCUlN4RFFVRkRMRU5CUVVNc1JVRkJSU3hGUVVGRkxFTkJRVU1zUTBGQlF5eEZRVUZGTEVWQlFVVXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJRenRSUVVONFF5eE5RVUZOTEVsQlFVa3NSMEZCUnl4SlFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExFVkJRVVVzUTBGQlF5eERRVUZETEVWQlFVVXNSVUZCUlN4RFFVRkRMRU5CUVVNc1JVRkJSU3hGUVVGRkxFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdVVUZEZUVNc1RVRkJUU3hKUVVGSkxFZEJRVWNzU1VGQlNTeERRVUZETEVkQlFVY3NRMEZCUXl4RlFVRkZMRU5CUVVNc1EwRkJReXhGUVVGRkxFVkJRVVVzUTBGQlF5eERRVUZETEVWQlFVVXNSVUZCUlN4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE8xRkJRM2hETEUxQlFVMHNTVUZCU1N4SFFVRkhMRWxCUVVrc1EwRkJReXhIUVVGSExFTkJRVU1zUlVGQlJTeERRVUZETEVOQlFVTXNSVUZCUlN4RlFVRkZMRU5CUVVNc1EwRkJReXhGUVVGRkxFVkJRVVVzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXp0UlFVVjRReXh2UlVGQmIwVTdVVUZEY0VVc1RVRkJUU3hUUVVGVExFZEJRVWNzUTBGQlF5eERRVUZETzFGQlEzQkNMRWxCUVVrc1EwRkJReXhKUVVGSkxFbEJRVWtzUjBGQlJ5eFRRVUZUTEVsQlFVa3NRMEZCUXl4SlFVRkpMRWxCUVVrc1IwRkJSeXhUUVVGVExFbEJRVWtzUTBGQlF5eEpRVUZKTEVsQlFVa3NSMEZCUnl4VFFVRlRMRWxCUVVrc1EwRkJReXhKUVVGSkxFbEJRVWtzUjBGQlJ5eFRRVUZUTEVWQlFVVTdXVUZEY0Vjc1RVRkJUU3hEUVVGRExFZEJRVWNzU1VGQlNTeEhRVUZITEVsQlFVa3NRMEZCUXp0WlFVTjBRaXhOUVVGTkxFTkJRVU1zUjBGQlJ5eEpRVUZKTEVkQlFVY3NTVUZCU1N4RFFVRkRPMWxCUTNSQ0xFOUJRVThzU1VGQlNTeERRVUZETERCQ1FVRXdRaXhEUVVGRExFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNSVUZCUlN4RlFVRkZMRVZCUVVVc1JVRkJSU3hGUVVGRkxFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNRMEZCUXl4RFFVRkRPMU5CUTJoRk8xRkJRMFFzVDBGQlR5eEpRVUZKTEVOQlFVTTdTVUZEWkN4RFFVRkRPMGxCUlVRc01FSkJRVEJDTEVOQlFVTXNRMEZCVXl4RlFVRkZMRU5CUVZNc1JVRkJSU3hGUVVGWkxFVkJRVVVzUlVGQldTeEZRVUZGTEVWQlFWa3NSVUZEZGtZc1EwRkJVeXhGUVVGRkxFTkJRVk03VVVGRGNFSXNUVUZCVFN4UFFVRlBMRWRCUVVjc1EwRkJReXhEUVVGRE8xRkJRMnhDTEUxQlFVMHNVVUZCVVN4SFFVRkhMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zUTBGQlF5eERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRMRWRCUVVjc1QwRkJUeXhEUVVGRExFTkJRVU03VVVGREwwTXNUVUZCVFN4TlFVRk5MRWRCUVVjc1EwRkJReXhIUVVGSExGRkJRVkVzUTBGQlF6dFJRVU0xUWl4TlFVRk5MRWxCUVVrc1IwRkJSeXhKUVVGSkxGZEJRVmNzUTBGQlF5eFJRVUZSTEVOQlFVTXNRMEZCUXp0UlFVTjJReXhOUVVGTkxFbEJRVWtzUjBGQlJ5eEpRVUZKTEZkQlFWY3NRMEZCUXl4UlFVRlJMRU5CUVVNc1EwRkJRenRSUVVOMlF5eE5RVUZOTEV0QlFVc3NSMEZCUnl4SlFVRkpMRmRCUVZjc1EwRkJReXhSUVVGUkxFTkJRVU1zUTBGQlF6dFJRVU40UXl4SlFVRkpMRkZCUVZFc1IwRkJhMElzU1VGQlNTeERRVUZETzFGQlEyNURMRTFCUVUwc1lVRkJZU3hIUVVGSExFbEJRVWtzVVVGQlVTeERRVUZETEZGQlFWRXNRMEZCUXl4RFFVRkRPMUZCUXpkRExFdEJRVXNzU1VGQlNTeERRVUZETEVkQlFVY3NRMEZCUXl4RlFVRkZMRU5CUVVNc1IwRkJSeXhKUVVGSkxFTkJRVU1zVFVGQlRTeEZRVUZGTEVOQlFVTXNSVUZCUlN4RlFVRkZPMWxCUTNCRExFMUJRVTBzUTBGQlF5eEhRVUZITEVOQlFVTXNSMEZCUnl4TlFVRk5MRU5CUVVNN1dVRkRja0lzVFVGQlRTeFJRVUZSTEVkQlFVY3NTVUZCU1N4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRExFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTXNSVUZCUlN4RFFVRkRMRU5CUVVNc1IwRkJSeXhGUVVGRkxFTkJRVU1zUTBGQlF5eEhRVUZITEVOQlFVTXNSMEZCUnl4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETEVkQlFVY3NSVUZCUlN4RFFVRkRMRU5CUVVNc1IwRkJSeXhKUVVGSkxFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTXNSVUZCUlN4RFFVRkRMRU5CUVVNc1IwRkJSeXhGUVVGRkxFTkJRVU1zUTBGQlF5eERRVUZETzFsQlF6bEdMRTFCUVUwc1VVRkJVU3hIUVVGSExFbEJRVWtzUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXl4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRExFVkJRVVVzUTBGQlF5eERRVUZETEVkQlFVY3NSVUZCUlN4RFFVRkRMRU5CUVVNc1IwRkJSeXhEUVVGRExFZEJRVWNzUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJReXhIUVVGSExFVkJRVVVzUTBGQlF5eERRVUZETEVkQlFVY3NTVUZCU1N4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRExFVkJRVVVzUTBGQlF5eERRVUZETEVkQlFVY3NSVUZCUlN4RFFVRkRMRU5CUVVNc1EwRkJRenRaUVVNNVJpeE5RVUZOTEV0QlFVc3NSMEZCUnl4SlFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU1zUjBGQlJ5eFJRVUZSTEVOQlFVTXNRMEZCUXp0WlFVTnlReXhOUVVGTkxFdEJRVXNzUjBGQlJ5eEpRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNc1IwRkJSeXhSUVVGUkxFTkJRVU1zUTBGQlF6dFpRVU55UXl4TlFVRk5MRXRCUVVzc1IwRkJSeXhMUVVGTExFZEJRVWNzUzBGQlN5eERRVUZETzFsQlF6VkNMRWxCUVVrc1EwRkJReXhSUVVGUkxFbEJRVWtzVVVGQlVTeEhRVUZITEV0QlFVczdaMEpCUXk5Q0xGRkJRVkVzUjBGQlJ5eExRVUZMTEVOQlFVTTdXVUZEYmtJc1MwRkJTeXhEUVVGRExFTkJRVU1zUTBGQlF5eEhRVUZITEVsQlFVa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1MwRkJTeXhGUVVGRkxFdEJRVXNzUTBGQlF5eERRVUZETzFsQlEyeERMRWxCUVVrc1EwRkJReXhEUVVGRExFTkJRVU1zUjBGQlJ5eFJRVUZSTEVOQlFVTTdXVUZEYmtJc1NVRkJTU3hEUVVGRExFTkJRVU1zUTBGQlF5eEhRVUZITEZGQlFWRXNRMEZCUXp0VFFVTndRanRSUVVORUxFdEJRVXNzU1VGQlNTeERRVUZETEVkQlFVY3NRMEZCUXl4RlFVRkZMRU5CUVVNc1IwRkJSeXhKUVVGSkxFTkJRVU1zVFVGQlRTeEZRVUZGTEVOQlFVTXNSVUZCUlN4RlFVRkZPMWxCUTNCRExFbEJRVWtzUzBGQlN5eERRVUZETEVOQlFVTXNRMEZCUXl4SFFVRkhMRkZCUVZNN1owSkJRM1JDTEdGQlFXRXNRMEZCUXl4TlFVRk5MRU5CUVVNc1EwRkJReXhGUVVGRkxFbEJRVWtzUlVGQlJTeExRVUZMTEVOQlFVTXNRMEZCUXp0VFFVTjRRenRSUVVORUxFbEJRVWtzVDBGQlR5eEhRVUZyUWl4SlFVRkpMRU5CUVVNN1VVRkRiRU1zUzBGQlN5eEpRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNc1JVRkJSU3hEUVVGRExFTkJRVU1zUjBGQlJ5eGhRVUZoTEVOQlFVTXNVVUZCVVN4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFdEJRVXNzUTBGQlF5eERRVUZETEVkQlFVYzdXVUZEZUVRc1RVRkJUU3hKUVVGSkxFZEJRVWNzU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4RFFVRkRMRWxCUVVrc1EwRkJReXhEUVVGRExFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTXNSVUZCUlN4RFFVRkRMRWxCUVVrc1EwRkJReXhEUVVGRExFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRPMWxCUTNSRUxFbEJRVWtzUTBGQlF5eFBRVUZQTEVsQlFVa3NUMEZCVHl4SFFVRkhMRWxCUVVrN1owSkJRelZDTEU5QlFVOHNSMEZCUnl4SlFVRkpMRU5CUVVNN1UwRkRiRUk3VVVGRFJDeFBRVUZQTEU5QlFWRXNRMEZCUXp0SlFVTnNRaXhEUVVGRE8wbEJSVVFzWVVGQllTeERRVUZETEVkQlFWY3NSVUZCUlN4SFFVRlhMRVZCUVVVc1IwRkJWeXhGUVVGRkxFZEJRVmM3VVVGRE9VUXNUMEZCVHl4SlFVRkpMRU5CUVVNc1NVRkJTU3hEUVVGRExFbEJRVWtzUTBGQlF5eEhRVUZITEVOQlFVTXNSMEZCUnl4SFFVRkhMRWRCUVVjc1JVRkJSU3hEUVVGRExFTkJRVU1zUjBGQlJ5eEpRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRWRCUVVjc1IwRkJSeXhIUVVGSExFVkJRVVVzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXp0SlFVTndSU3hEUVVGRE8wbEJSVVFzYTBKQlFXdENMRU5CUVVNc1IwRkJWeXhGUVVGRkxFZEJRVmNzUlVGQlJTeEhRVUZYTEVWQlFVVXNSMEZCVnl4RlFVRkZMRkZCUVdkQ0xFVkJRVVVzVFVGQll6dFJRVU55Unl4TlFVRk5MRVZCUVVVc1IwRkJSeXhEUVVGRExFZEJRVWNzUjBGQlJ5eEhRVUZITEVOQlFVTXNSMEZCUnl4TlFVRk5MRU5CUVVNN1VVRkRhRU1zVFVGQlRTeEZRVUZGTEVkQlFVY3NRMEZCUXl4SFFVRkhMRWRCUVVjc1IwRkJSeXhEUVVGRExFZEJRVWNzVFVGQlRTeERRVUZETzFGQlEyaERMRTFCUVUwc1IwRkJSeXhIUVVGSExFZEJRVWNzUjBGQlJ5eFJRVUZSTEVkQlFVY3NSVUZCUlN4RFFVRkRPMUZCUTJoRExFMUJRVTBzUjBGQlJ5eEhRVUZITEVkQlFVY3NSMEZCUnl4UlFVRlJMRWRCUVVjc1JVRkJSU3hEUVVGRE8xRkJSV2hETEU5QlFVOHNTVUZCU1N4RlFVRkZMRU5CUVVNc1MwRkJTeXhEUVVGRExFZEJRVWNzUlVGQlJTeEhRVUZITEVOQlFVTXNRMEZCUXp0SlFVTm9ReXhEUVVGRE8wbEJSVVFzWjBKQlFXZENMRU5CUVVNc1IwRkJWeXhGUVVGRkxFVkJRVlVzUlVGQlJTeEZRVUZWTEVWQlFVVXNSVUZCVlN4RlFVRkZMRVZCUVZVc1JVRkJSU3hEUVVGVk8xRkJRM1JHTEUxQlFVMHNTVUZCU1N4SFFVRkhMRVZCUVVVc1IwRkJSeXhEUVVGRExFVkJRVVVzUjBGQlJ5eEZRVUZGTEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNN1VVRkRhRU1zVFVGQlRTeEpRVUZKTEVkQlFVY3NSVUZCUlN4SFFVRkhMRU5CUVVNc1JVRkJSU3hIUVVGSExFVkJRVVVzUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXp0UlFVTm9ReXhKUVVGSkxFVkJRVVVzUjBGQlJ5eEpRVUZKTEVkQlFVY3NSVUZCUlN4RFFVRkRPMUZCUTI1Q0xFbEJRVWtzUlVGQlJTeEhRVUZITEVsQlFVa3NSMEZCUnl4RlFVRkZMRU5CUVVNN1VVRkRia0lzVFVGQlRTeEpRVUZKTEVkQlFVY3NTVUZCU1N4RFFVRkRMRWxCUVVrc1EwRkJReXhGUVVGRkxFZEJRVWNzUlVGQlJTeEhRVUZITEVWQlFVVXNSMEZCUnl4RlFVRkZMRU5CUVVNc1EwRkJRenRSUVVNeFF5eEZRVUZGTEVsQlFVa3NTVUZCU1N4RFFVRkRPMUZCUTFnc1JVRkJSU3hKUVVGSkxFbEJRVWtzUTBGQlF6dFJRVU5ZTEUxQlFVMHNaMEpCUVdkQ0xFZEJRVWNzUlVGQlJTeEhRVUZITEVsQlFVa3NRMEZCUXl4SlFVRkpMRU5CUVVNc1IwRkJSeXhIUVVGSExFTkJRVU1zUTBGQlF5eERRVUZETzFGQlEycEVMRTlCUVU4c1IwRkJSeXhIUVVGSExFTkJRVU1zUzBGQlN5eERRVUZETEVOQlFVTXNRMEZCUXp0WlFVTndRaXhKUVVGSkxFVkJRVVVzUTBGQlF5eExRVUZMTEVOQlFVTXNTVUZCU1N4SFFVRkhMRU5CUVVNc1owSkJRV2RDTEVkQlFVY3NRMEZCUXl4RFFVRkRMRWRCUVVjc1JVRkJSU3hGUVVGRkxFbEJRVWtzUjBGQlJ5eERRVUZETEdkQ1FVRm5RaXhIUVVGSExFTkJRVU1zUTBGQlF5eEhRVUZITEVWQlFVVXNRMEZCUXl4RFFVRkRMRU5CUVVNN1dVRkRkRVlzU1VGQlNTeEZRVUZGTEVOQlFVTXNTMEZCU3l4RFFVRkRMRWxCUVVrc1IwRkJSeXhEUVVGRExHZENRVUZuUWl4SFFVRkhMRU5CUVVNc1EwRkJReXhIUVVGSExFVkJRVVVzUlVGQlJTeEpRVUZKTEVkQlFVY3NRMEZCUXl4blFrRkJaMElzUjBGQlJ5eERRVUZETEVOQlFVTXNSMEZCUnl4RlFVRkZMRU5CUVVNc1EwRkJRenRKUVVONlJpeERRVUZETzBsQlJVUXNWMEZCVnl4RFFVRkRMRWxCUVRoQ0xFVkJRVVVzVTBGQmFVSXNSVUZCUlN4VFFVRnBRaXhGUVVGRkxFdEJRV0VzUlVGQlJTeExRVUZoTzFGQlF6VkhMRTFCUVUwc1ZVRkJWU3hIUVVGSExFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNTMEZCU3l4SFFVRkhMRk5CUVZNc1JVRkJSU3hMUVVGTExFZEJRVWNzVTBGQlV5eERRVUZETEVkQlFVY3NTVUZCU1N4RFFVRkRMRVZCUVVVc1EwRkJRenRSUVVNNVJTeEpRVUZKTEVOQlFVTXNUVUZCVFN4RFFVRkRMRk5CUVZNc1IwRkJSeXhEUVVGRExFbEJRVWtzUTBGQlF5eFZRVUZWTEVkQlFVY3NTVUZCU1N4RFFVRkRMRWRCUVVjc1EwRkJReXhWUVVGVkxFZEJRVWNzU1VGQlNTeERRVUZETEVWQlFVVXNSMEZCUnl4RlFVRkZMRU5CUVVNc1EwRkJReXhGUVVNM1JTeFRRVUZUTEVkQlFVY3NRMEZCUXl4SlFVRkpMRU5CUVVNc1ZVRkJWU3hIUVVGSExFbEJRVWtzUTBGQlF5eEhRVUZITEVOQlFVTXNWVUZCVlN4SFFVRkhMRWxCUVVrc1EwRkJReXhGUVVGRkxFZEJRVWNzUlVGQlJTeERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRPMUZCUTNaRkxFbEJRVWtzUTBGQlF5eE5RVUZOTEVOQlFVTXNVMEZCVXl4RlFVRkZMRk5CUVZNc1EwRkJReXhEUVVGRE8xRkJRMnhETEVsQlFVa3NRMEZCUXl4TlFVRk5MRU5CUVVNc1UwRkJVeXhIUVVGSExFTkJRVU1zU1VGQlNTeERRVUZETEZWQlFWVXNSMEZCUnl4SlFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExGVkJRVlVzUjBGQlJ5eEpRVUZKTEVOQlFVTXNSVUZCUlN4SFFVRkhMRVZCUVVVc1EwRkJReXhEUVVGRExFVkJRemRGTEZOQlFWTXNSMEZCUnl4RFFVRkRMRWxCUVVrc1EwRkJReXhWUVVGVkxFZEJRVWNzU1VGQlNTeERRVUZETEVkQlFVY3NRMEZCUXl4VlFVRlZMRWRCUVVjc1NVRkJTU3hEUVVGRExFVkJRVVVzUjBGQlJ5eEZRVUZGTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN1NVRkRla1VzUTBGQlF6dERRVU5HSWl3aWMyOTFjbU5sYzBOdmJuUmxiblFpT2xzaUx5b2daWE5zYVc1MExXUnBjMkZpYkdVZ2JXRjRMV3hsYmlBcUwxeHVhVzF3YjNKMElDb2dZWE1nUkVjZ1puSnZiU0FuWkdGMFlXZHliMnN0WVhCcEwyUm5KenRjYm1sdGNHOXlkQ0I3VTNWaWFtVmpkSDBnWm5KdmJTQW5jbmhxY3ljN1hHNXBiWEJ2Y25RZ1FtbDBRWEp5WVhrZ1puSnZiU0FuTGk5aWFYUXRZWEp5WVhrbk8xeHVYRzVsZUhCdmNuUWdaVzUxYlNCVFkyRjBkR1Z5VUd4dmRFTjFjbkpsYm5STWFXNWxVM1I1YkdVZ2UxeHVJQ0FnSUc1dmJtVWdQU0FuYm05dVpTY3NYRzRnSUNBZ1ltOXNaQ0E5SUNkaWIyeGtKeXhjYmlBZ0lDQmtZWE5vWldRZ1BTQW5aR0Z6YUdWa0oxeHVmVnh1WEc1MGVYQmxJRTFoY210bGNsTnBlbVVnUFNCN1hHNGdJQ0FnYzJsNlpVWnliMjA2SUc1MWJXSmxjaXhjYmlBZ0lDQnphWHBsVkc4NklHNTFiV0psY2x4dWZWeHVYRzVsZUhCdmNuUWdkSGx3WlNCTmIzVnpaVTkyWlhKTWFXNWxSWFpsYm5RZ1BTQjdYRzRnSUNBZ2VEb2diblZ0WW1WeU8xeHVJQ0FnSUhrNklHNTFiV0psY2p0Y2JpQWdJQ0JwWkRvZ2JuVnRZbVZ5TzF4dUlDQWdJR1YyWlc1ME9pQk5iM1Z6WlVWMlpXNTBYRzU5WEc1Y2JtVjRjRzl5ZENCMGVYQmxJRWxNYVc1bFUyVnlhV1Z6SUQwZ2UxeHVJQ0FnSUdaeWIyMDZJRlZwYm5Rek1rRnljbUY1TzF4dUlDQWdJSFJ2T2lCVmFXNTBNekpCY25KaGVUdGNiaUFnSUNCamIyeHZjajg2SUhOMGNtbHVaenNnTHk4Z1kyOXRiVzl1SUdOdmJHOXlMaUJWYzJVZ1cyTnZiRzl5YzEwZ2FXWWdlVzkxSUc1bFpXUWdhVzVrYVhacFpIVmhiQ0JqYjJ4dmNuTWdjR1Z5SUd4cGJtVmNiaUFnSUNCamIyeHZjbk0vT2lCemRISnBibWRiWFRzZ0x5OGdiR2x1WlNCamIyeHZjbk11SUVsbUlIUm9aWGtnWVhKbElIUm9aU0J6WVcxbElHWnZjaUIwYUdVZ2MyVnlhV1Z6TENCMWMyVWdXMk52Ykc5eVhTQnBibk4wWldGa0xseHVJQ0FnSUhkcFpIUm9Qem9nYm5WdFltVnlPeUF2THlCamIyMXRiMjRnZDJsa2RHZ3VJRlZ6WlNCYlkyOXNiM0p6WFNCcFppQjViM1VnYm1WbFpDQnBibVJwZG1sa2RXRnNJSGRwWkhSb2N5QndaWElnYkdsdVpWeHVJQ0FnSUhkcFpIUm9jejg2SUVac2IyRjBNekpCY25KaGVUc2dMeThnYkdsdVpTQjNhV1IwYUhNdUlFbG1JSFJvWlhrZ1lYSmxJSFJvWlNCellXMWxJR1p2Y2lCMGFHVWdjMlZ5YVdWekxDQjFjMlVnVzNkcFpIUm9YU0JwYm5OMFpXRmtMbHh1SUNBZ0lHOXdZV05wZEhrL09pQnVkVzFpWlhJN0lDOHZJR052YlcxdmJpQnZjR0ZqYVhSNUxpQlZjMlVnVzI5d1lXTnBkR2xsYzEwZ2FXWWdlVzkxSUc1bFpXUWdhVzVrYVhacFpIVmhiQ0J2Y0dGamFYUnBaWE1nY0dWeUlHeHBibVZjYmlBZ0lDQnZjR0ZqYVhScFpYTS9PaUJHYkc5aGRETXlRWEp5WVhrN0lDOHZJR3hwYm1VZ2IzQmhZMmwwYVdWekxpQkpaaUIwYUdWNUlHRnlaU0IwYUdVZ2MyRnRaU0JtYjNJZ2RHaGxJSE5sY21sbGN5d2dkWE5sSUZ0dmNHRmphWFI1WFNCcGJuTjBaV0ZrWEc0Z0lDQWdaSEpoZDBGeWNtOTNjejg2SUdKdmIyeGxZVzQ3SUM4dklHTnZiVzF2YmlCd1lYSmhiV1YwWlhJZ2RHOGdaSEpoZHlCaGNuSnZkM011SUZWelpTQmJaSEpoZDBGeWNtOTNjMEZ5Y2wwZ2FXWWdlVzkxSUc1bFpXUWdkRzhnWkhKaGR5Qmhjbkp2ZDNNZ2JtOTBJR1p2Y2lCbFlXTm9JR3hwYm1WY2JpQWdJQ0JrY21GM1FYSnliM2R6UVhKeVB6b2dRbWwwUVhKeVlYazdJQzh2SUdsdVpHbDJhV1IxWVd3Z2NHRnlZVzFsZEdWeUlHWnZjaUJsWVdOb0lHeHBibVV1SUVsbUlIUm9aWGtnWVhKbElIUm9aU0J6WVcxbElHWnZjaUIwYUdVZ2MyVnlhV1Z6TENCMWMyVWdXMlJ5WVhkQmNuSnZkM05kSUdsdWMzUmxZV1JjYmlBZ0lDQjJhWE5wWW1sc2FYUjVQem9nUW1sMFFYSnlZWGs3SUM4dklHbHVaR2wyYVdSMVlXd2djR0Z5WVcxbGRHVnlJR1p2Y2lCbFlXTm9JR3hwYm1VdUlGTmxkQ0JpYVhRZ2RHOGdabUZzYzJVZ2RHOGdhR2xrWlNCMGFHVWdiR2x1WlZ4dUlDQWdJR0Z5Y205M1UybDZaVDg2SUc1MWJXSmxjanNnTHk4Z1kyOXRiVzl1SUdadmNpQmhiR3dnWVhKeWIzZHpYRzRnSUNBZ2MydHBjRTExYkhScFRHbHVaVU5oYkdOMWJHRjBhVzl1UHpvZ1ltOXZiR1ZoYmp0Y2JuMWNibHh1Wlhod2IzSjBJR05zWVhOeklGTmpZWFIwWlhKUWJHOTBUR2x1WlhOU1pXNWtaWEpsY2lCN1hHNGdJSE53T2lCRVJ5NVRZMkYwZEdWeVVHeHZkRlpwWlhkbGNqdGNiaUFnZUVGNGFYTkRiMnc2SUVSSExrTnZiSFZ0Ymp0Y2JpQWdlVUY0YVhORGIydzZJRVJITGtOdmJIVnRianRjYmlBZ1gyTjFjbkpsYm5STWFXNWxTV1I0SUQwZ0xURTdYRzRnSUd4cGJtVnpJVG9nU1V4cGJtVlRaWEpwWlhNN1hHNGdJR3hwYm1WRGJHbGphMlZrSUQwZ2JtVjNJRk4xWW1wbFkzUThUVzkxYzJWUGRtVnlUR2x1WlVWMlpXNTBQaWdwTzF4dUlDQnNhVzVsU0c5MlpYSWdQU0J1WlhjZ1UzVmlhbVZqZER4TmIzVnpaVTkyWlhKTWFXNWxSWFpsYm5RK0tDazdYRzRnSUdOaGJuWmhjem9nU0ZSTlRFTmhiblpoYzBWc1pXMWxiblE3WEc0Z0lHTjBlRG9nUTJGdWRtRnpVbVZ1WkdWeWFXNW5RMjl1ZEdWNGRESkVPMXh1SUNCdGIzVnpaVTkyWlhKTWFXNWxTV1FnUFNBdE1UdGNiaUFnYlhWc2RHbHdiR1ZNYVc1bGMwTnZkVzUwY3lFNklGVnBiblE0UVhKeVlYazdYRzRnSUhacGMybGlhV3hwZEhrNklFSnBkRUZ5Y21GNU8xeHVJQ0JqZFhKeVpXNTBUR2x1WlZOMGVXeGxPaUJUWTJGMGRHVnlVR3h2ZEVOMWNuSmxiblJNYVc1bFUzUjViR1U3WEc0Z0lHRnljbTkzVjJsa2RHZ2dQU0F4TlR0Y2JseHVJQ0JuWlhRZ1kzVnljbVZ1ZEV4cGJtVkpaQ2dwT2lCdWRXMWlaWElnZTF4dUlDQWdJSEpsZEhWeWJpQjBhR2x6TGw5amRYSnlaVzUwVEdsdVpVbGtlRHRjYmlBZ2ZWeHVYRzRnSUhObGRDQmpkWEp5Wlc1MFRHbHVaVWxrS0dsa09pQnVkVzFpWlhJcElIdGNiaUFnSUNCcFppQW9hV1FnSVQwOUlIUm9hWE11WDJOMWNuSmxiblJNYVc1bFNXUjRLU0I3WEc0Z0lDQWdJQ0IwYUdsekxsOWpkWEp5Wlc1MFRHbHVaVWxrZUNBOUlHbGtPMXh1SUNBZ0lDQWdkR2hwY3k1emNDNXlaVzVrWlhJb2RHaHBjeTVqZEhncE8xeHVJQ0FnSUgxY2JpQWdmVnh1WEc0Z0lITmxkQ0JzYVc1bGMxUnZVbVZ1WkdWeUtHeHBibVZ6T2lCSlRHbHVaVk5sY21sbGN5a2dlMXh1SUNBZ0lIUm9hWE11ZFhCa1lYUmxUR2x1WlhNb2JHbHVaWE1wTzF4dUlDQWdJSFJvYVhNdWMzQXVjbVZ1WkdWeUtIUm9hWE11WTNSNEtUdGNiaUFnZlZ4dVhHNGdJSE5sZENCc2FXNWxjMVpwYzJsaWFXeHBkSGtvZG1semFXSnBiR2wwZVRvZ1FtbDBRWEp5WVhrcElIdGNiaUFnSUNCMGFHbHpMblpwYzJsaWFXeHBkSGtnUFNCMmFYTnBZbWxzYVhSNU8xeHVJQ0FnSUhSb2FYTXVjM0F1Y21WdVpHVnlLSFJvYVhNdVkzUjRLVHRjYmlBZ2ZWeHVYRzRnSUdOdmJuTjBjblZqZEc5eUtITndPaUJFUnk1VFkyRjBkR1Z5VUd4dmRGWnBaWGRsY2l3Z2VFRjRhWE02SUhOMGNtbHVaeXdnZVVGNGFYTTZJSE4wY21sdVp5d2diR2x1WlhNNklFbE1hVzVsVTJWeWFXVnpMRnh1SUNBZ0lHTjFjbkpsYm5STWFXNWxVM1I1YkdVZ1BTQlRZMkYwZEdWeVVHeHZkRU4xY25KbGJuUk1hVzVsVTNSNWJHVXVibTl1WlNrZ2UxeHVJQ0FnSUhSb2FYTXVjM0FnUFNCemNEdGNiaUFnSUNCMGFHbHpMbmhCZUdselEyOXNJRDBnZEdocGN5NXpjQzVrWVhSaFJuSmhiV1VoTG1OdmJIVnRibk11WW5sT1lXMWxLSGhCZUdsektUdGNiaUFnSUNCMGFHbHpMbmxCZUdselEyOXNJRDBnZEdocGN5NXpjQzVrWVhSaFJuSmhiV1VoTG1OdmJIVnRibk11WW5sT1lXMWxLSGxCZUdsektUdGNiaUFnSUNCMGFHbHpMbU5oYm5aaGN5QTlJSFJvYVhNdWMzQXVaMlYwU1c1bWJ5Z3BXeWRqWVc1MllYTW5YVHRjYmlBZ0lDQjBhR2x6TG1OMGVDQTlJSFJvYVhNdVkyRnVkbUZ6TG1kbGRFTnZiblJsZUhRb0p6SmtKeWtnWVhNZ1EyRnVkbUZ6VW1WdVpHVnlhVzVuUTI5dWRHVjRkREpFTzF4dUlDQWdJSFJvYVhNdVkzVnljbVZ1ZEV4cGJtVlRkSGxzWlNBOUlHTjFjbkpsYm5STWFXNWxVM1I1YkdVN1hHNGdJQ0FnZEdocGN5NTFjR1JoZEdWTWFXNWxjeWhzYVc1bGN5azdYRzRnSUNBZ2RHaHBjeTUyYVhOcFltbHNhWFI1SUQwZ2JHbHVaWE11ZG1semFXSnBiR2wwZVNBL1B5QnVaWGNnUW1sMFFYSnlZWGtvZEdocGN5NXNhVzVsY3k1bWNtOXRMbXhsYm1kMGFDazdYRzRnSUNBZ2FXWWdLQ0ZzYVc1bGN5NTJhWE5wWW1sc2FYUjVLVnh1SUNBZ0lDQWdkR2hwY3k1MmFYTnBZbWxzYVhSNUxuTmxkRUZzYkNoMGNuVmxMQ0JtWVd4elpTazdYRzRnSUNBZ2FXWWdLR3hwYm1WekxtRnljbTkzVTJsNlpTbGNiaUFnSUNBZ0lIUm9hWE11WVhKeWIzZFhhV1IwYUNBOUlHeHBibVZ6TG1GeWNtOTNVMmw2WlR0Y2JseHVJQ0FnSUhSb2FYTXVZMkZ1ZG1GekxtOXViVzkxYzJWa2IzZHVJRDBnS0dWMlpXNTBPaUJOYjNWelpVVjJaVzUwS1NBOVBpQjdYRzRnSUNBZ0lDQnBaaUFvZEdocGN5NXRiM1Z6WlU5MlpYSk1hVzVsU1dRZ0lUMDlJQzB4S1Z4dUlDQWdJQ0FnSUNCMGFHbHpMbXhwYm1WRGJHbGphMlZrTG01bGVIUW9lM2c2SUdWMlpXNTBMbU5zYVdWdWRGZ3NJSGs2SUdWMlpXNTBMbU5zYVdWdWRGa3NJR2xrT2lCMGFHbHpMbTF2ZFhObFQzWmxja3hwYm1WSlpDd2daWFpsYm5RNklHVjJaVzUwZlNrN1hHNGdJQ0FnZlR0Y2JseHVJQ0FnSUhSb2FYTXVZMkZ1ZG1GekxtOXViVzkxYzJWdGIzWmxJRDBnS0dWMlpXNTBPaUJOYjNWelpVVjJaVzUwS1NBOVBpQjdYRzRnSUNBZ0lDQjBhR2x6TG0xdmRYTmxUM1psY2t4cGJtVkpaQ0E5SUhSb2FYTXVZMmhsWTJ0RGIyOXlaSE5QYmt4cGJtVW9aWFpsYm5RdWIyWm1jMlYwV0N3Z1pYWmxiblF1YjJabWMyVjBXU2s3WEc0Z0lDQWdJQ0JwWmlBb2RHaHBjeTV0YjNWelpVOTJaWEpNYVc1bFNXUWdJVDA5SUMweEtWeHVJQ0FnSUNBZ0lDQjBhR2x6TG14cGJtVkliM1psY2k1dVpYaDBLSHQ0T2lCbGRtVnVkQzVqYkdsbGJuUllMQ0I1T2lCbGRtVnVkQzVqYkdsbGJuUlpMQ0JwWkRvZ2RHaHBjeTV0YjNWelpVOTJaWEpNYVc1bFNXUXNJR1YyWlc1ME9pQmxkbVZ1ZEgwcE8xeHVJQ0FnSUgwN1hHNWNiaUFnSUNCemNDNXZia1YyWlc1MEtDZGtOQzFpWldadmNtVXRaSEpoZHkxelkyVnVaU2NwWEc0Z0lDQWdJQ0F1YzNWaWMyTnlhV0psS0NoZk9pQmhibmtwSUQwK0lIdGNiaUFnSUNBZ0lDQWdkR2hwY3k1eVpXNWtaWEpNYVc1bGN5Z3BPMXh1SUNBZ0lDQWdmU2s3WEc0Z0lIMWNibHh1SUNCMWNHUmhkR1ZNYVc1bGN5aHNhVzVsY3pvZ1NVeHBibVZUWlhKcFpYTXBJSHRjYmlBZ0lDQjBhR2x6TG14cGJtVnpJRDBnYkdsdVpYTTdYRzRnSUNBZ2RHaHBjeTV0ZFd4MGFYQnNaVXhwYm1WelEyOTFiblJ6SUQwZ2JtVjNJRlZwYm5RNFFYSnlZWGtvZEdocGN5NXNhVzVsY3k1bWNtOXRMbXhsYm1kMGFDazdYRzRnSUNBZ2FXWWdLQ0ZzYVc1bGN5NXphMmx3VFhWc2RHbE1hVzVsUTJGc1kzVnNZWFJwYjI0cFhHNGdJQ0FnSUNCMGFHbHpMbU55WldGMFpVMTFiSFJwVEdsdVpYTkpibVJwWTJWektDazdYRzRnSUNBZ1pXeHpaVnh1SUNBZ0lDQWdkR2hwY3k1dGRXeDBhWEJzWlV4cGJtVnpRMjkxYm5SekxtWnBiR3dvTUNrN1hHNGdJSDFjYmx4dUlDQnlaVzVrWlhKTWFXNWxjeWdwT2lCMmIybGtJSHRjYmlBZ0lDQmpiMjV6ZENCemNFeHZiMnNnUFNCMGFHbHpMbk53TG1kbGRFOXdkR2x2Ym5Nb0tTNXNiMjlyTzF4dUlDQWdJR052Ym5OMElHbHVaR2wyYVdSMVlXeE1hVzVsVTNSNWJHVnpJRDBnZEdocGN5NXNhVzVsY3k1amIyeHZjbk1nZkh3Z2RHaHBjeTVzYVc1bGN5NTNhV1IwYUNCOGZDQjBhR2x6TG14cGJtVnpMbTl3WVdOcGRHbGxjeUI4ZkNCMGFHbHpMbXhwYm1WekxtUnlZWGRCY25KdmQzTkJjbkk3WEc0Z0lDQWdhV1lnS0NGcGJtUnBkbWxrZFdGc1RHbHVaVk4wZVd4bGN5a2dlMXh1SUNBZ0lDQWdkR2hwY3k1amRIZ3ViR2x1WlZkcFpIUm9JRDBnZEdocGN5NXNhVzVsY3k1M2FXUjBhQ0EvUHlBeE8xeHVJQ0FnSUNBZ2RHaHBjeTVqZEhndWMzUnliMnRsVTNSNWJHVWdQU0JnY21kaVlTZ2tlM1JvYVhNdWJHbHVaWE11WTI5c2IzSWdQejhnSnpBc01USTRMREFuZlN3a2UzUm9hWE11YkdsdVpYTXViM0JoWTJsMGVTQS9QeUF4ZlNsZ08xeHVJQ0FnSUgxY2JpQWdJQ0JqYjI1emRDQnRZWEpyWlhKVGFYcGxRMjlzSUQwZ2MzQk1iMjlyV3lkemFYcGxRMjlzZFcxdVRtRnRaU2RkSUQ4Z2RHaHBjeTV6Y0M1a1lYUmhSbkpoYldVdVkyOXNLSE53VEc5dmExc25jMmw2WlVOdmJIVnRiazVoYldVblhTa2dPaUJ1ZFd4c08xeHVJQ0FnSUdOdmJuTjBJR1pwYkhSbGNpQTlJSFJvYVhNdWMzQXVaR0YwWVVaeVlXMWxMbVpwYkhSbGNqdGNiaUFnSUNCbWIzSWdLR3hsZENCcElEMGdNRHNnYVNBOElIUm9hWE11YkdsdVpYTXVabkp2YlM1c1pXNW5kR2c3SUdrckt5a2dlMXh1SUNBZ0lDQWdhV1lnS0dacGJIUmxjaTVuWlhRb2RHaHBjeTVzYVc1bGN5NW1jbTl0VzJsZEtTQW1KaUJtYVd4MFpYSXVaMlYwS0hSb2FYTXViR2x1WlhNdWRHOWJhVjBwSUNZbUlIUm9hWE11ZG1semFXSnBiR2wwZVM1blpYUkNhWFFvYVNrcElIdGNiaUFnSUNBZ0lDQWdiR1YwSUd4cGJtVk1aVzRnUFNBd08xeHVJQ0FnSUNBZ0lDQmpiMjV6ZENCN2MybDZaVVp5YjIwc0lITnBlbVZVYjMwZ1BTQjBhR2x6TG1kbGRFMWhjbXRsY25OVGFYcGxjeWh6Y0V4dmIyc3NJRzFoY210bGNsTnBlbVZEYjJ3c0lHa3BPMXh1SUNBZ0lDQWdJQ0JqYjI1emRDQndiMmx1ZEVaeWIyMGdQU0IwYUdsekxuTndMbmR2Y214a1ZHOVRZM0psWlc0b2RHaHBjeTU0UVhocGMwTnZiQzVuWlhRb2RHaHBjeTVzYVc1bGN5NW1jbTl0VzJsZEtTd2dkR2hwY3k1NVFYaHBjME52YkM1blpYUW9kR2hwY3k1c2FXNWxjeTVtY205dFcybGRLU2s3WEc0Z0lDQWdJQ0FnSUd4bGRDQmhXQ0E5SUhCdmFXNTBSbkp2YlQ4dWVEdGNiaUFnSUNBZ0lDQWdiR1YwSUdGWklEMGdjRzlwYm5SR2NtOXRQeTU1TzF4dUlDQWdJQ0FnSUNCamIyNXpkQ0J3YjJsdWRGUnZJRDBnZEdocGN5NXpjQzUzYjNKc1pGUnZVMk55WldWdUtIUm9hWE11ZUVGNGFYTkRiMnd1WjJWMEtIUm9hWE11YkdsdVpYTXVkRzliYVYwcExDQjBhR2x6TG5sQmVHbHpRMjlzTG1kbGRDaDBhR2x6TG14cGJtVnpMblJ2VzJsZEtTazdYRzRnSUNBZ0lDQWdJR3hsZENCaVdDQTlJSEJ2YVc1MFZHOC9Mbmc3WEc0Z0lDQWdJQ0FnSUd4bGRDQmlXU0E5SUhCdmFXNTBWRzgvTG5rN1hHNGdJQ0FnSUNBZ0lHTnZibk4wSUcxcGJrRjRhWE1nUFNCTllYUm9MbTFwYmloMGFHbHpMbk53TG5acFpYZENiM2d1ZDJsa2RHZ3NJSFJvYVhNdWMzQXVkbWxsZDBKdmVDNW9aV2xuYUhRcE8xeHVJQ0FnSUNBZ0lDQjBhR2x6TG1OMGVDNWlaV2RwYmxCaGRHZ29LVHRjYmlBZ0lDQWdJQ0FnYVdZZ0tHRllJQ1ltSUdGWklDWW1JR0pZSUNZbUlHSlpJQ1ltSUUxaGRHZ3VhSGx3YjNRb1lsZ2hJQzBnWVZnaExDQmlXU0VnTFNCaFdTRXBJQzhnYldsdVFYaHBjeUErSURBdU1ERXBJSHRjYmlBZ0lDQWdJQ0FnSUNCcFppQW9hVzVrYVhacFpIVmhiRXhwYm1WVGRIbHNaWE1wSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJR052Ym5OMElHTnZiRzl5SUQwZ2RHaHBjeTVzYVc1bGN5NWpiMnh2Y25NL0xsdHBYU0EvSUhSb2FYTXViR2x1WlhNdVkyOXNiM0p6UHk1YmFWMGdPaUFuTUN3eE1qZ3NNQ2M3WEc0Z0lDQWdJQ0FnSUNBZ0lDQmpiMjV6ZENCdmNHRmphWFI1SUQwZ2RHaHBjeTVzYVc1bGN5NXZjR0ZqYVhScFpYTS9MbHRwWFNBL0lIUm9hWE11YkdsdVpYTXViM0JoWTJsMGFXVnpQeTViYVYwZ09pQXhPMXh1SUNBZ0lDQWdJQ0FnSUNBZ2RHaHBjeTVqZEhndWMzUnliMnRsVTNSNWJHVWdQU0JnY21kaVlTZ2tlMk52Ykc5eWZTd2tlMjl3WVdOcGRIbDlLV0E3WEc0Z0lDQWdJQ0FnSUNBZ0lDQjBhR2x6TG1OMGVDNXNhVzVsVjJsa2RHZ2dQU0IwYUdsekxteHBibVZ6TG5kcFpIUm9jejh1VzJsZElEOGdkR2hwY3k1c2FXNWxjeTUzYVdSMGFITS9MbHRwWFNBNklERTdYRzRnSUNBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnSUNBZ0lHbG1JQ2hwSUQwOVBTQjBhR2x6TGw5amRYSnlaVzUwVEdsdVpVbGtlQ2xjYmlBZ0lDQWdJQ0FnSUNBZ0lIUm9hWE11ZEc5bloyeGxRM1Z5Y21WdWRFeHBibVZUZEhsc1pTaDBjblZsS1R0Y2JpQWdJQ0FnSUNBZ0lDQmpiMjV6ZENCdGRXeDBhVXhwYm1WeklEMGdkR2hwY3k1dGRXeDBhWEJzWlV4cGJtVnpRMjkxYm5SelcybGRPMXh1SUNBZ0lDQWdJQ0FnSUd4bGRDQmpiMjUwY205c1VHOXBiblE2SUVSSExsQnZhVzUwSUh3Z2JuVnNiQ0E5SUc1MWJHdzdYRzRnSUNBZ0lDQWdJQ0FnYVdZZ0tHMTFiSFJwVEdsdVpYTXBJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lHeHBibVZNWlc0Z1BTQjBhR2x6TG1kbGRFeHBibVZNWlc1bmRHZ29ZVmdzSUdGWkxDQmlXQ3dnWWxrcE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnWTI5dWMzUWdjM1JoY25SUWIybHVkRmRwZEdoTllYSnJaWElnUFNCMGFHbHpMbWRsZEZCdmFXNTBUMjVFYVhOMFlXNWpaU2hoV0N3Z1lWa3NJR0pZTENCaVdTd2djMmw2WlZSdkxDQnNhVzVsVEdWdUtUdGNiaUFnSUNBZ0lDQWdJQ0FnSUdOdmJuTjBJR1Z1WkhSUWIybHVkRmRwZEdoTllYSnJaWElnUFNCMGFHbHpMbWRsZEZCdmFXNTBUMjVFYVhOMFlXNWpaU2hpV0N3Z1lsa3NJR0ZZTENCaFdTd2djMmw2WlVaeWIyMHNJR3hwYm1WTVpXNHBPMXh1SUNBZ0lDQWdJQ0FnSUNBZ1lWZ2dQU0J6ZEdGeWRGQnZhVzUwVjJsMGFFMWhjbXRsY2k1NE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnWVZrZ1BTQnpkR0Z5ZEZCdmFXNTBWMmwwYUUxaGNtdGxjaTU1TzF4dUlDQWdJQ0FnSUNBZ0lDQWdZbGdnUFNCbGJtUjBVRzlwYm5SWGFYUm9UV0Z5YTJWeUxuZzdYRzRnSUNBZ0lDQWdJQ0FnSUNCaVdTQTlJR1Z1WkhSUWIybHVkRmRwZEdoTllYSnJaWEl1ZVR0Y2JpQWdJQ0FnSUNBZ0lDQWdJR052Ym5SeWIyeFFiMmx1ZENBOUlIUm9hWE11YkdsdVpYTXVabkp2YlZ0cFhTQStJSFJvYVhNdWJHbHVaWE11ZEc5YmFWMGdQMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQjBhR2x6TG1acGJtUkRiMjUwY205c1VHOXBiblFvYlhWc2RHbE1hVzVsY3l3Z1lWZ3NJR0ZaTENCaVdDd2dZbGtzSUdrcElEcGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ2RHaHBjeTVtYVc1a1EyOXVkSEp2YkZCdmFXNTBLRzExYkhScFRHbHVaWE1zSUdKWUxDQmlXU3dnWVZnc0lHRlpMQ0JwS1R0Y2JpQWdJQ0FnSUNBZ0lDQWdJSFJvYVhNdVkzUjRMbTF2ZG1WVWJ5aGhXQ0VzSUdGWklTazdYRzRnSUNBZ0lDQWdJQ0FnSUNCMGFHbHpMbU4wZUM1eGRXRmtjbUYwYVdORGRYSjJaVlJ2S0dOdmJuUnliMnhRYjJsdWRDNTRMQ0JqYjI1MGNtOXNVRzlwYm5RdWVTd2dZbGdzSUdKWktUdGNiaUFnSUNBZ0lDQWdJQ0I5SUdWc2MyVWdlMXh1SUNBZ0lDQWdJQ0FnSUNBZ2RHaHBjeTVqZEhndWJXOTJaVlJ2S0dGWUlTd2dZVmtoS1R0Y2JpQWdJQ0FnSUNBZ0lDQWdJSFJvYVhNdVkzUjRMbXhwYm1WVWJ5aGlXQ3dnWWxrcE8xeHVJQ0FnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJQ0FnSUNCcFppQW9kR2hwY3k1c2FXNWxjeTVrY21GM1FYSnliM2R6SUQ4L0lIUm9hWE11YkdsdVpYTXVaSEpoZDBGeWNtOTNjMEZ5Y2o4dVoyVjBRbWwwS0drcEtTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNCcFppQW9JV3hwYm1WTVpXNHBYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lHeHBibVZNWlc0Z1BTQjBhR2x6TG1kbGRFeHBibVZNWlc1bmRHZ29ZVmdzSUdGWkxDQmlXQ3dnWWxrcE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnYVdZZ0tHeHBibVZNWlc0Z1BpQjBhR2x6TG1GeWNtOTNWMmxrZEdncElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ1kyOXVjM1FnWVhKeWIzZFFiMmx1ZENBOUlDRnRkV3gwYVV4cGJtVnpJRDhnZEdocGN5NW5aWFJRYjJsdWRFOXVSR2x6ZEdGdVkyVW9ZVmdzSUdGWkxDQmlXQ3dnWWxrc0lITnBlbVZVYnl3Z2JHbHVaVXhsYmlrZ09pQnVkV3hzTzF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0JqYjI1emRDQmhjbkp2ZDBOUVdDQTlJRzExYkhScFRHbHVaWE1nUHlCamIyNTBjbTlzVUc5cGJuUWhMbmdnT2lCaFdEdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ1kyOXVjM1FnWVhKeWIzZERVRmtnUFNCdGRXeDBhVXhwYm1WeklEOGdZMjl1ZEhKdmJGQnZhVzUwSVM1NUlEb2dZVms3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJSFJvYVhNdVkyRnVkbUZ6UVhKeWIzY29kR2hwY3k1amRIZ3NJR0Z5Y205M1VHOXBiblEvTG5nZ1B6OGdZVmdzSUdGeWNtOTNVRzlwYm5RL0xua2dQejhnWVZrc0lHRnljbTkzUTFCWUxDQmhjbkp2ZDBOUVdTazdYRzRnSUNBZ0lDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdJQ0FnSUhSb2FYTXVZM1I0TG5OMGNtOXJaU2dwTzF4dUlDQWdJQ0FnSUNBZ0lIUm9hWE11WTNSNExtTnNiM05sVUdGMGFDZ3BPMXh1SUNBZ0lDQWdJQ0FnSUdsbUlDaHBJRDA5UFNCMGFHbHpMbDlqZFhKeVpXNTBUR2x1WlVsa2VDbGNiaUFnSUNBZ0lDQWdJQ0FnSUhSb2FYTXVkRzluWjJ4bFEzVnljbVZ1ZEV4cGJtVlRkSGxzWlNobVlXeHpaU2s3WEc0Z0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUgxY2JpQWdJQ0I5WEc0Z0lDQWdkR2hwY3k1bWFXeHNUR1ZtZEVKdmRIUnZiVkpsWTNRb0tUdGNiaUFnZlZ4dVhHNGdJSFJ2WjJkc1pVTjFjbkpsYm5STWFXNWxVM1I1YkdVb1pteGhaem9nWW05dmJHVmhiaWtnZTF4dUlDQWdJSE4zYVhSamFDQW9kR2hwY3k1amRYSnlaVzUwVEdsdVpWTjBlV3hsS1NCN1hHNGdJQ0FnSUNCallYTmxJRk5qWVhSMFpYSlFiRzkwUTNWeWNtVnVkRXhwYm1WVGRIbHNaUzVpYjJ4a09pQjdYRzRnSUNBZ0lDQWdJR1pzWVdjZ1B5QjBhR2x6TG1OMGVDNXNhVzVsVjJsa2RHZ2dLejBnTWlBNklIUm9hWE11WTNSNExteHBibVZYYVdSMGFDQXRQU0F5TzF4dUlDQWdJQ0FnSUNCaWNtVmhhenRjYmlBZ0lDQWdJSDFjYmlBZ0lDQWdJR05oYzJVZ1UyTmhkSFJsY2xCc2IzUkRkWEp5Wlc1MFRHbHVaVk4wZVd4bExtUmhjMmhsWkRvZ2UxeHVJQ0FnSUNBZ0lDQm1iR0ZuSUQ4Z2RHaHBjeTVqZEhndWMyVjBUR2x1WlVSaGMyZ29XelVzSURWZEtTQTZJSFJvYVhNdVkzUjRMbk5sZEV4cGJtVkVZWE5vS0Z0ZEtUdGNiaUFnSUNBZ0lDQWdZbkpsWVdzN1hHNGdJQ0FnSUNCOVhHNGdJQ0FnSUNCa1pXWmhkV3gwT2x4dUlDQWdJQ0FnSUNCeVpYUjFjbTQ3WEc0Z0lDQWdmVnh1SUNCOVhHNWNiaUFnWjJWMFRXRnlhMlZ5YzFOcGVtVnpLSE53VEc5dmF6b2dZVzU1TENCdFlYSnJaWEpUYVhwbFEyOXNPaUJFUnk1RGIyeDFiVzRnZkNCdWRXeHNMQ0JwT2lCdWRXMWlaWElwT2lCTllYSnJaWEpUYVhwbElIdGNiaUFnSUNCc1pYUWdjMmw2WlVaeWIyMGdQU0F6TzF4dUlDQWdJR3hsZENCemFYcGxWRzhnUFNBek8xeHVJQ0FnSUdsbUlDaHRZWEpyWlhKVGFYcGxRMjlzS1NCN1hHNGdJQ0FnSUNCemFYcGxSbkp2YlNBOUlDaHpjRXh2YjJzdWJXRnlhMlZ5VFdsdVUybDZaU0FySUNoemNFeHZiMnN1YldGeWEyVnlUV0Y0VTJsNlpTQXRJSE53VEc5dmF5NXRZWEpyWlhKTmFXNVRhWHBsS1NBcUlHMWhjbXRsY2xOcGVtVkRiMnd1YzJOaGJHVW9kR2hwY3k1c2FXNWxjeTVtY205dFcybGRLU2tnTHlBeU8xeHVJQ0FnSUNBZ2MybDZaVlJ2SUQwZ0tITndURzl2YXk1dFlYSnJaWEpOYVc1VGFYcGxJQ3NnS0hOd1RHOXZheTV0WVhKclpYSk5ZWGhUYVhwbElDMGdjM0JNYjI5ckxtMWhjbXRsY2sxcGJsTnBlbVVwSUNvZ2JXRnlhMlZ5VTJsNlpVTnZiQzV6WTJGc1pTaDBhR2x6TG14cGJtVnpMblJ2VzJsZEtTa2dMeUF5TzF4dUlDQWdJSDBnWld4elpTQnBaaUFvYzNCTWIyOXJMbTFoY210bGNrUmxabUYxYkhSVGFYcGxLU0I3WEc0Z0lDQWdJQ0J6YVhwbFJuSnZiU0E5SUhOd1RHOXZheTV0WVhKclpYSkVaV1poZFd4MFUybDZaU0F2SURJN1hHNGdJQ0FnSUNCemFYcGxWRzhnUFNCemNFeHZiMnN1YldGeWEyVnlSR1ZtWVhWc2RGTnBlbVVnTHlBeU8xeHVJQ0FnSUgxY2JpQWdJQ0J5WlhSMWNtNGdlM05wZW1WR2NtOXRMQ0J6YVhwbFZHOTlPMXh1SUNCOVhHNWNibHh1SUNCbWFXeHNUR1ZtZEVKdmRIUnZiVkpsWTNRb0tTQjdYRzRnSUNBZ1kyOXVjM1FnY21WamRDQTlJRzVsZHlCUVlYUm9Na1FvS1R0Y2JpQWdJQ0J5WldOMExuSmxZM1FvZEdocGN5NXpjQzU1UVhocGMwSnZlQzV0YVc1WUxDQjBhR2x6TG5Od0xubEJlR2x6UW05NExtMWhlRmtzSUhSb2FYTXVjM0F1ZVVGNGFYTkNiM2d1ZDJsa2RHZ3NJSFJvYVhNdWMzQXVlRUY0YVhOQ2IzZ3VhR1ZwWjJoMEtUdGNiaUFnSUNCMGFHbHpMbU4wZUM1bWFXeHNVM1I1YkdVZ1BTQmdkMmhwZEdWZ08xeHVJQ0FnSUhSb2FYTXVZM1I0TG1KbFoybHVVR0YwYUNncE8xeHVJQ0FnSUhSb2FYTXVZM1I0TG1acGJHd29jbVZqZENrN1hHNGdJQ0FnZEdocGN5NWpkSGd1WTJ4dmMyVlFZWFJvS0NrN1hHNGdJSDFjYmx4dUlDQmpjbVZoZEdWTmRXeDBhVXhwYm1WelNXNWthV05sY3lncE9pQjJiMmxrSUh0Y2JpQWdJQ0JqYjI1emRDQmhjbkpoZVVsa2VITkNhWFJCY25KaGVTQTlJRzVsZHlCQ2FYUkJjbkpoZVNoMGFHbHpMbXhwYm1WekxtWnliMjB1YkdWdVozUm9LVHRjYmlBZ0lDQmhjbkpoZVVsa2VITkNhWFJCY25KaGVTNXpaWFJCYkd3b2RISjFaU2s3WEc0Z0lDQWdabTl5SUNoc1pYUWdhU0E5SUMweE95QW9hU0E5SUdGeWNtRjVTV1I0YzBKcGRFRnljbUY1TG1acGJtUk9aWGgwS0drcEtTQWhQVDBnTFRFN0tTQjdYRzRnSUNBZ0lDQmpiMjV6ZENCbWFYSnpkRXhwYm1WSlpIZ2dQU0JwTzF4dUlDQWdJQ0FnWTI5dWMzUWdjREVnUFNCMGFHbHpMbXhwYm1WekxtWnliMjFiWm1seWMzUk1hVzVsU1dSNFhUdGNiaUFnSUNBZ0lHTnZibk4wSUhBeUlEMGdkR2hwY3k1c2FXNWxjeTUwYjF0bWFYSnpkRXhwYm1WSlpIaGRPMXh1SUNBZ0lDQWdiR1YwSUd4cGJtVnpVR1Z5VUdGcGNpQTlJREU3WEc0Z0lDQWdJQ0JtYjNJZ0tHeGxkQ0JxSUQwZ2FUc2dLR29nUFNCaGNuSmhlVWxrZUhOQ2FYUkJjbkpoZVM1bWFXNWtUbVY0ZENocUtTa2dJVDA5SUMweE95a2dlMXh1SUNBZ0lDQWdJQ0JqYjI1emRDQndiMmx1ZEZSdlEyOXRjR0Z5WlRFZ1BTQjBhR2x6TG14cGJtVnpMbVp5YjIxYmFsMDdYRzRnSUNBZ0lDQWdJR052Ym5OMElIQnZhVzUwVkc5RGIyMXdZWEpsTWlBOUlIUm9hWE11YkdsdVpYTXVkRzliYWwwN1hHNGdJQ0FnSUNBZ0lHbG1JQ2h3YjJsdWRGUnZRMjl0Y0dGeVpURWdQVDA5SUhBeElDWW1JSEJ2YVc1MFZHOURiMjF3WVhKbE1pQTlQVDBnY0RJZ2ZIeGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnY0c5cGJuUlViME52YlhCaGNtVXlJRDA5UFNCd01TQW1KaUJ3YjJsdWRGUnZRMjl0Y0dGeVpURWdQVDA5SUhBeUtTQjdYRzRnSUNBZ0lDQWdJQ0FnZEdocGN5NXRkV3gwYVhCc1pVeHBibVZ6UTI5MWJuUnpXMnBkSUQwZ0t5dHNhVzVsYzFCbGNsQmhhWEk3WEc0Z0lDQWdJQ0FnSUNBZ1lYSnlZWGxKWkhoelFtbDBRWEp5WVhrdWMyVjBRbWwwS0dvc0lHWmhiSE5sTENCbVlXeHpaU2s3WEc0Z0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUgxY2JpQWdJQ0FnSUdsbUlDaHNhVzVsYzFCbGNsQmhhWElnUGlBeEtWeHVJQ0FnSUNBZ0lDQjBhR2x6TG0xMWJIUnBjR3hsVEdsdVpYTkRiM1Z1ZEhOYlptbHljM1JNYVc1bFNXUjRYU0E5SURFN1hHNGdJQ0FnSUNCaGNuSmhlVWxrZUhOQ2FYUkJjbkpoZVM1elpYUkNhWFFvYVN3Z1ptRnNjMlVzSUdaaGJITmxLVHRjYmlBZ0lDQjlYRzRnSUgxY2JseHVJQ0JqYUdWamEwTnZiM0prYzA5dVRHbHVaU2g0T2lCdWRXMWlaWElzSUhrNklHNTFiV0psY2lrNklHNTFiV0psY2lCN1hHNGdJQ0FnYkdWMElHTmhibVJwWkdGMFpVbGtlQ0E5SUMweE8xeHVJQ0FnSUd4bGRDQnRhVzVFYVhOMElEMGdiblZzYkR0Y2JpQWdJQ0JzWlhRZ1pHbHpkQ0E5SUc1MWJHdzdYRzRnSUNBZ1kyOXVjM1FnYzNCTWIyOXJJRDBnZEdocGN5NXpjQzVuWlhSUGNIUnBiMjV6S0NrdWJHOXZhenRjYmlBZ0lDQmpiMjV6ZENCdFlYSnJaWEpUYVhwbFEyOXNJRDBnYzNCTWIyOXJXeWR6YVhwbFEyOXNkVzF1VG1GdFpTZGRJRDhnZEdocGN5NXpjQzVrWVhSaFJuSmhiV1V1WTI5c0tITndURzl2YTFzbmMybDZaVU52YkhWdGJrNWhiV1VuWFNrZ09pQnVkV3hzTzF4dUlDQWdJR052Ym5OMElHWnBiSFJsY2lBOUlIUm9hWE11YzNBdVpHRjBZVVp5WVcxbExtWnBiSFJsY2p0Y2JpQWdJQ0JtYjNJZ0tHeGxkQ0JwSUQwZ01Ec2dhU0E4SUhSb2FYTXViR2x1WlhNdVpuSnZiUzVzWlc1bmRHZzdJR2tyS3lrZ2UxeHVJQ0FnSUNBZ2FXWWdLR1pwYkhSbGNpNW5aWFFvZEdocGN5NXNhVzVsY3k1bWNtOXRXMmxkS1NBbUppQm1hV3gwWlhJdVoyVjBLSFJvYVhNdWJHbHVaWE11ZEc5YmFWMHBJQ1ltSUhSb2FYTXVkbWx6YVdKcGJHbDBlUzVuWlhSQ2FYUW9hU2twSUh0Y2JpQWdJQ0FnSUNBZ1kyOXVjM1FnZTNOcGVtVkdjbTl0TENCemFYcGxWRzk5SUQwZ2RHaHBjeTVuWlhSTllYSnJaWEp6VTJsNlpYTW9jM0JNYjI5ckxDQnRZWEpyWlhKVGFYcGxRMjlzTENCcEtUdGNiaUFnSUNBZ0lDQWdZMjl1YzNRZ2NFWnliMjBnUFNCMGFHbHpMbk53TG5kdmNteGtWRzlUWTNKbFpXNG9kR2hwY3k1NFFYaHBjME52YkM1blpYUW9kR2hwY3k1c2FXNWxjeTVtY205dFcybGRLU3dnZEdocGN5NTVRWGhwYzBOdmJDNW5aWFFvZEdocGN5NXNhVzVsY3k1bWNtOXRXMmxkS1NrN1hHNGdJQ0FnSUNBZ0lHTnZibk4wSUhCVWJ5QTlJSFJvYVhNdWMzQXVkMjl5YkdSVWIxTmpjbVZsYmloMGFHbHpMbmhCZUdselEyOXNMbWRsZENoMGFHbHpMbXhwYm1WekxuUnZXMmxkS1N3Z2RHaHBjeTU1UVhocGMwTnZiQzVuWlhRb2RHaHBjeTVzYVc1bGN5NTBiMXRwWFNrcE8xeHVJQ0FnSUNBZ0lDQnBaaUFvZEdocGN5NXRkV3gwYVhCc1pVeHBibVZ6UTI5MWJuUnpXMmxkS1NCN1hHNGdJQ0FnSUNBZ0lDQWdZMjl1YzNRZ2JHVnVJRDBnZEdocGN5NW5aWFJNYVc1bFRHVnVaM1JvS0hCR2NtOXRMbmdzSUhCR2NtOXRMbmtzSUhCVWJ5NTRMQ0J3Vkc4dWVTazdYRzRnSUNBZ0lDQWdJQ0FnWTI5dWMzUWdabkp2YlUxaGNtdGxjaUE5SUhSb2FYTXVaMlYwVUc5cGJuUlBia1JwYzNSaGJtTmxLSEJHY205dExuZ3NJSEJHY205dExua3NJSEJVYnk1NExDQndWRzh1ZVN3Z2MybDZaVlJ2TENCc1pXNHBPMXh1SUNBZ0lDQWdJQ0FnSUdOdmJuTjBJSFJ2VFdGeWEyVnlJRDBnZEdocGN5NW5aWFJRYjJsdWRFOXVSR2x6ZEdGdVkyVW9jRlJ2TG5nc0lIQlVieTU1TENCd1JuSnZiVDh1ZUN3Z2NFWnliMjAvTG5rc0lITnBlbVZHY205dExDQnNaVzRwTzF4dUlDQWdJQ0FnSUNBZ0lHTnZibk4wSUdOdmJuUnliMnhRYjJsdWRDQTlJSFJvYVhNdWJHbHVaWE11Wm5KdmJWdHBYU0ErSUhSb2FYTXViR2x1WlhNdWRHOWJhVjBnUDF4dUlDQWdJQ0FnSUNBZ0lDQWdkR2hwY3k1bWFXNWtRMjl1ZEhKdmJGQnZhVzUwS0hSb2FYTXViWFZzZEdsd2JHVk1hVzVsYzBOdmRXNTBjMXRwWFN3Z1puSnZiVTFoY210bGNpNTRMQ0JtY205dFRXRnlhMlZ5TG5rc0lIUnZUV0Z5YTJWeUxuZ3NJSFJ2VFdGeWEyVnlMbmtzSUdrcElEcGNiaUFnSUNBZ0lDQWdJQ0FnSUhSb2FYTXVabWx1WkVOdmJuUnliMnhRYjJsdWRDaDBhR2x6TG0xMWJIUnBjR3hsVEdsdVpYTkRiM1Z1ZEhOYmFWMHNJSFJ2VFdGeWEyVnlMbmdzSUhSdlRXRnlhMlZ5TG5rc0lHWnliMjFOWVhKclpYSXVlQ3dnWm5KdmJVMWhjbXRsY2k1NUxDQnBLVHRjYmlBZ0lDQWdJQ0FnSUNCa2FYTjBJRDBnZEdocGN5NWpZV3hqZFd4aGRHVkVhWE4wVkc5RGRYSjJaVXhwYm1Vb2FTd2dlQ3dnZVN3Z1puSnZiVTFoY210bGNpd2dkRzlOWVhKclpYSXNJR052Ym5SeWIyeFFiMmx1ZENrN1hHNGdJQ0FnSUNBZ0lIMGdaV3h6WlNCN1hHNGdJQ0FnSUNBZ0lDQWdaR2x6ZENBOUlIUm9hWE11WTJGc1kzVnNZWFJsUkdsemRGUnZVM1J5WVdsbmFIUk1hVzVsS0hnc0lIa3NJSEJHY205dExDQndWRzhwTzF4dUlDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNBZ0lHbG1JQ2dvSVcxcGJrUnBjM1FnSmlZZ1pHbHpkQ0FoUFQwZ2JuVnNiQ0FtSmlCa2FYTjBJRHdnTlNrZ2ZId2diV2x1UkdsemRDQW1KaUJrYVhOMElDRTlQU0J1ZFd4c0lDWW1JR1JwYzNRZ1BDQnRhVzVFYVhOMEtTQjdYRzRnSUNBZ0lDQWdJQ0FnYldsdVJHbHpkQ0E5SUdScGMzUTdYRzRnSUNBZ0lDQWdJQ0FnWTJGdVpHbGtZWFJsU1dSNElEMGdhVHRjYmlBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnZlZ4dUlDQWdJSDFjYmlBZ0lDQnlaWFIxY200Z1kyRnVaR2xrWVhSbFNXUjRPMXh1SUNCOVhHNWNiaUFnWTJGc1kzVnNZWFJsUkdsemRGUnZVM1J5WVdsbmFIUk1hVzVsS0hnNklHNTFiV0psY2l3Z2VUb2diblZ0WW1WeUxDQndNVG9nUkVjdVVHOXBiblFzSUhBeU9pQkVSeTVRYjJsdWRDazZJRzUxYldKbGNpQjhJRzUxYkd3Z2UxeHVJQ0FnSUM4cUlHTmhiR04xYkdGMGFXNW5JR052YjNKa2FXNWhkR1Z6SUc5bUlHRWdjbVZqZENCaGNtOTFibVFnWVNCc2FXNWxMaUJKWmlCamRYSnpiM0lnWTI5dmNtUnpJR0Z5WlNCdmRYUnphV1JsSUhSb2FYTWdjbVZqZENBdElHRnpjM1Z0WlNCMGFHRjBYRzRnSUNBZ0lDQWdJSEJ2YVc1MElHbHpJRzV2ZENCdmJpQnNhVzVsSUdGdVpDQmtieUJ1YjNRZ1kyRnNZM1ZzWVhSbElHUnBjM1JoYm1ObElIUnZJR3hwYm1VZ0tpOWNiaUFnSUNCamIyNXpkQ0I0VFdsdUlEMGdUV0YwYUM1dGFXNG9jREV1ZUN3Z2NESXVlQ2s3WEc0Z0lDQWdZMjl1YzNRZ2VFMWhlQ0E5SUUxaGRHZ3ViV0Y0S0hBeExuZ3NJSEF5TG5ncE8xeHVJQ0FnSUdOdmJuTjBJSGxOYVc0Z1BTQk5ZWFJvTG0xcGJpaHdNUzU1TENCd01pNTVLVHRjYmlBZ0lDQmpiMjV6ZENCNVRXRjRJRDBnVFdGMGFDNXRZWGdvY0RFdWVTd2djREl1ZVNrN1hHNWNiaUFnSUNBdkwyRmtaR2x1WnlCaElHTnZkWEJzWlNCdlppQndhWGhsYkhNZ2RHOGdhVzVqY21WaGMyVWdkR2hsSUhkcFpIUm9MMmhsYVdkb2RDQnZaaUIwYUdVZ2NtVmpkRnh1SUNBZ0lHTnZibk4wSUhSb2NtVnphRzlzWkNBOUlESTdYRzRnSUNBZ2NtVjBkWEp1SUhnZ1BqMGdlRTFwYmlBdElIUm9jbVZ6YUc5c1pDQW1KaUI0SUR3OUlIaE5ZWGdnS3lCMGFISmxjMmh2YkdRZ0ppWWdlU0ErUFNCNVRXbHVJQzBnZEdoeVpYTm9iMnhrSUNZbUlIa2dQRDBnZVUxaGVDQXJJSFJvY21WemFHOXNaQ0EvWEc0Z0lDQWdJQ0IwYUdsekxtUnBjM1JVYjFOMGNtRnBaMmgwVEdsdVpWTmxaMjFsYm5Rb2VDd2dlU3dnY0RFc0lIQXlLU0E2WEc0Z0lDQWdJQ0J1ZFd4c08xeHVJQ0I5WEc1Y2JpQWdaR2x6ZEZSdlUzUnlZV2xuYUhSTWFXNWxVMlZuYldWdWRDaDRPaUJ1ZFcxaVpYSXNJSGs2SUc1MWJXSmxjaXdnY0RFNklFUkhMbEJ2YVc1MExDQndNam9nUkVjdVVHOXBiblFwSUh0Y2JpQWdJQ0JqYjI1emRDQmthWE4wSUQwZ0tIZ3hPaUJ1ZFcxaVpYSXNJSGt4T2lCdWRXMWlaWElzSUhneU9pQnVkVzFpWlhJc0lIa3lPaUJ1ZFcxaVpYSXBJRDArSUUxaGRHZ3VjRzkzS0NoNE1TQXRJSGd5S1N3Z01pa2dLeUJOWVhSb0xuQnZkeWdvZVRFZ0xTQjVNaWtzSURJcE8xeHVJQ0FnSUdOdmJuTjBJR3dnUFNCa2FYTjBLSEF4TG5nc0lIQXhMbmtzSUhBeUxuZ3NJSEF5TG5rcE8xeHVJQ0FnSUdsbUlDaHNJRDA5SURBcElISmxkSFZ5YmlCa2FYTjBLSGdzSUhrc0lIQXhMbmdzSUhBeExua3BPMXh1SUNBZ0lHeGxkQ0IwSUQwZ0tDaDRJQzBnY0RFdWVDa2dLaUFvY0RJdWVDQXRJSEF4TG5ncElDc2dLSGtnTFNCd01TNTVLU0FxSUNod01pNTVJQzBnY0RFdWVTa3BJQzhnYkR0Y2JpQWdJQ0IwSUQwZ1RXRjBhQzV0WVhnb01Dd2dUV0YwYUM1dGFXNG9NU3dnZENrcE8xeHVJQ0FnSUhKbGRIVnliaUJrYVhOMEtIZ3NJSGtzSUhBeExuZ2dLeUIwSUNvZ0tIQXlMbmdnTFNCd01TNTRLU3dnY0RFdWVTQXJJSFFnS2lBb2NESXVlU0F0SUhBeExua3BLVHRjYmlBZ2ZWeHVYRzRnSUdOaGJHTjFiR0YwWlVScGMzUlViME4xY25abFRHbHVaU2hwT2lCdWRXMWlaWElzSUhnNklHNTFiV0psY2l3Z2VUb2diblZ0WW1WeUxDQndNVG9nUkVjdVVHOXBiblFzSUhBeU9pQkVSeTVRYjJsdWRDeGNiaUFnSUNCd1l6b2dSRWN1VUc5cGJuUXBPaUJ1ZFcxaVpYSWdmQ0J1ZFd4c0lIdGNiaUFnSUNBdktpQmpZV3hqZFd4aGRHbHVaeUJqYjI5eVpHbHVZWFJsY3lCdlppQmhJSEpsWTNRZ1lYSnZkVzVrSUdFZ2JHbHVaUzRnU1dZZ1kzVnljMjl5SUdOdmIzSmtjeUJoY21VZ2IzVjBjMmxrWlNCMGFHbHpJSE5vWVhCbElDMGdZWE56ZFcxbElIUm9ZWFJjYmlBZ0lDQWdJQ0FnY0c5cGJuUWdhWE1nYm05MElHOXVJR3hwYm1VZ1lXNWtJR1J2SUc1dmRDQmpZV3hqZFd4aGRHVWdaR2x6ZEdGdVkyVWdkRzhnYkdsdVpTQXFMMXh1SUNBZ0lHTnZibk4wSUhoTmFXNGdQU0JOWVhSb0xtMXBiaWh3TVM1NExDQndNaTU0TENCd1l5NTRLVHRjYmlBZ0lDQmpiMjV6ZENCNFRXRjRJRDBnVFdGMGFDNXRZWGdvY0RFdWVDd2djREl1ZUN3Z2NHTXVlQ2s3WEc0Z0lDQWdZMjl1YzNRZ2VVMXBiaUE5SUUxaGRHZ3ViV2x1S0hBeExua3NJSEF5TG5rc0lIQmpMbmtwTzF4dUlDQWdJR052Ym5OMElIbE5ZWGdnUFNCTllYUm9MbTFoZUNod01TNTVMQ0J3TWk1NUxDQndZeTU1S1R0Y2JseHVJQ0FnSUM4dllXUmthVzVuSUdFZ1kyOTFjR3hsSUc5bUlIQnBlR1ZzY3lCMGJ5QnBibU55WldGelpTQjBhR1VnZDJsa2RHZ3ZhR1ZwWjJoMElHOW1JSFJvWlNCeVpXTjBYRzRnSUNBZ1kyOXVjM1FnZEdoeVpYTm9iMnhrSUQwZ01qdGNiaUFnSUNCcFppQW9lQ0ErUFNCNFRXbHVJQzBnZEdoeVpYTm9iMnhrSUNZbUlIZ2dQRDBnZUUxaGVDQXJJSFJvY21WemFHOXNaQ0FtSmlCNUlENDlJSGxOYVc0Z0xTQjBhSEpsYzJodmJHUWdKaVlnZVNBOFBTQjVUV0Y0SUNzZ2RHaHlaWE5vYjJ4a0tTQjdYRzRnSUNBZ0lDQmpiMjV6ZENCM0lEMGdlRTFoZUNBdElIaE5hVzQ3WEc0Z0lDQWdJQ0JqYjI1emRDQm9JRDBnZVUxaGVDQXRJSGxOYVc0N1hHNGdJQ0FnSUNCeVpYUjFjbTRnZEdocGN5NWpZV3hqZFd4aGRHVkVhWE4wVkc5RGRYSjJaVWx1VW1WamRDaDRMQ0I1TENCd01Td2djR01zSUhBeUxDQjNMQ0JvS1R0Y2JpQWdJQ0I5WEc0Z0lDQWdjbVYwZFhKdUlHNTFiR3c3WEc0Z0lIMWNibHh1SUNCallXeGpkV3hoZEdWRWFYTjBWRzlEZFhKMlpVbHVVbVZqZENoNE9pQnVkVzFpWlhJc0lIazZJRzUxYldKbGNpd2djREE2SUVSSExsQnZhVzUwTENCd01Ub2dSRWN1VUc5cGJuUXNJSEF5T2lCRVJ5NVFiMmx1ZEN4Y2JpQWdJQ0IzT2lCdWRXMWlaWElzSUdnNklHNTFiV0psY2lrNklHNTFiV0psY2lCN1hHNGdJQ0FnWTI5dWMzUWdjM1JsY0V4bGJpQTlJRE03WEc0Z0lDQWdZMjl1YzNRZ2MzUmxjSE5PZFcwZ1BTQk5ZWFJvTG1ac2IyOXlLQ2gzSUNzZ2FDa2dMeUJ6ZEdWd1RHVnVLVHRjYmlBZ0lDQmpiMjV6ZENCa1pXeDBZVlFnUFNBeElDOGdjM1JsY0hOT2RXMDdYRzRnSUNBZ1kyOXVjM1FnWVhKeVdDQTlJRzVsZHlCVmFXNTBNekpCY25KaGVTaHpkR1Z3YzA1MWJTazdYRzRnSUNBZ1kyOXVjM1FnWVhKeVdTQTlJRzVsZHlCVmFXNTBNekpCY25KaGVTaHpkR1Z3YzA1MWJTazdYRzRnSUNBZ1kyOXVjM1FnYldGNFNGY2dQU0J1WlhjZ1ZXbHVkRE15UVhKeVlYa29jM1JsY0hOT2RXMHBPMXh1SUNBZ0lHeGxkQ0J0YVc1VGRXMUlWem9nYm5WdFltVnlJSHdnYm5Wc2JDQTlJRzUxYkd3N1hHNGdJQ0FnWTI5dWMzUWdZMkZ1Wkdsa1lYUmxTV1I0Y3lBOUlHNWxkeUJDYVhSQmNuSmhlU2h6ZEdWd2MwNTFiU2s3WEc0Z0lDQWdabTl5SUNoc1pYUWdhU0E5SURBN0lHa2dQQ0JoY25KWUxteGxibWQwYURzZ2FTc3JLU0I3WEc0Z0lDQWdJQ0JqYjI1emRDQjBJRDBnYVNBcUlHUmxiSFJoVkR0Y2JpQWdJQ0FnSUdOdmJuTjBJSGhQYmtOMWNuWmxJRDBnVFdGMGFDNXdiM2NvS0RFZ0xTQjBLU3dnTWlrZ0tpQndNQzU0SUNzZ01pQXFJSFFnS2lBb01TQXRJSFFwSUNvZ2NERXVlQ0FySUUxaGRHZ3VjRzkzS0hRc0lESXBJQ29nY0RJdWVEdGNiaUFnSUNBZ0lHTnZibk4wSUhsUGJrTjFjblpsSUQwZ1RXRjBhQzV3YjNjb0tERWdMU0IwS1N3Z01pa2dLaUJ3TUM1NUlDc2dNaUFxSUhRZ0tpQW9NU0F0SUhRcElDb2djREV1ZVNBcklFMWhkR2d1Y0c5M0tIUXNJRElwSUNvZ2NESXVlVHRjYmlBZ0lDQWdJR052Ym5OMElISmxZM1JYSUQwZ1RXRjBhQzVoWW5Nb2VDQXRJSGhQYmtOMWNuWmxLVHRjYmlBZ0lDQWdJR052Ym5OMElISmxZM1JJSUQwZ1RXRjBhQzVoWW5Nb2VTQXRJSGxQYmtOMWNuWmxLVHRjYmlBZ0lDQWdJR052Ym5OMElITjFiVWhYSUQwZ2NtVmpkRmNnS3lCeVpXTjBTRHRjYmlBZ0lDQWdJR2xtSUNnaGJXbHVVM1Z0U0ZjZ2ZId2diV2x1VTNWdFNGY2dQaUJ6ZFcxSVZ5bGNiaUFnSUNBZ0lDQWdiV2x1VTNWdFNGY2dQU0J6ZFcxSVZ6dGNiaUFnSUNBZ0lHMWhlRWhYVzJsZElEMGdUV0YwYUM1dFlYZ29jbVZqZEZjc0lISmxZM1JJS1R0Y2JpQWdJQ0FnSUdGeWNsaGJhVjBnUFNCNFQyNURkWEoyWlR0Y2JpQWdJQ0FnSUdGeWNsbGJhVjBnUFNCNVQyNURkWEoyWlR0Y2JpQWdJQ0I5WEc0Z0lDQWdabTl5SUNoc1pYUWdhU0E5SURBN0lHa2dQQ0JoY25KWUxteGxibWQwYURzZ2FTc3JLU0I3WEc0Z0lDQWdJQ0JwWmlBb2JXRjRTRmRiYVYwZ1BDQnRhVzVUZFcxSVZ5RXBYRzRnSUNBZ0lDQWdJR05oYm1ScFpHRjBaVWxrZUhNdWMyVjBRbWwwS0drc0lIUnlkV1VzSUdaaGJITmxLVHRjYmlBZ0lDQjlYRzRnSUNBZ2JHVjBJRzFwYmtScGMzUTZJRzUxYldKbGNpQjhJRzUxYkd3Z1BTQnVkV3hzTzF4dUlDQWdJR1p2Y2lBb2JHVjBJR29nUFNBdE1Uc2dLR29nUFNCallXNWthV1JoZEdWSlpIaHpMbVpwYm1ST1pYaDBLR29wS1NBaFBUMGdMVEU3S1NCN1hHNGdJQ0FnSUNCamIyNXpkQ0JrYVhOMElEMGdUV0YwYUM1b2VYQnZkQ2dvWVhKeVdGdHFYU0F0SUhncExDQW9ZWEp5V1Z0cVhTQXRJSGtwS1R0Y2JpQWdJQ0FnSUdsbUlDZ2hiV2x1UkdsemRDQjhmQ0J0YVc1RWFYTjBJRDRnWkdsemRDbGNiaUFnSUNBZ0lDQWdiV2x1UkdsemRDQTlJR1JwYzNRN1hHNGdJQ0FnZlZ4dUlDQWdJSEpsZEhWeWJpQnRhVzVFYVhOMElUdGNiaUFnZlZ4dVhHNGdJR2RsZEV4cGJtVk1aVzVuZEdnb2NERjRPaUJ1ZFcxaVpYSXNJSEF4ZVRvZ2JuVnRZbVZ5TENCd01uZzZJRzUxYldKbGNpd2djREo1T2lCdWRXMWlaWElwT2lCdWRXMWlaWElnZTF4dUlDQWdJSEpsZEhWeWJpQk5ZWFJvTG5OeGNuUW9UV0YwYUM1d2IzY29jREo0SUMwZ2NERjRMQ0F5S1NBcklFMWhkR2d1Y0c5M0tIQXllU0F0SUhBeGVTd2dNaWtwTzF4dUlDQjlYRzVjYmlBZ1oyVjBVRzlwYm5SUGJrUnBjM1JoYm1ObEtIQXhlRG9nYm5WdFltVnlMQ0J3TVhrNklHNTFiV0psY2l3Z2NESjRPaUJ1ZFcxaVpYSXNJSEF5ZVRvZ2JuVnRZbVZ5TENCa2FYTjBZVzVqWlRvZ2JuVnRZbVZ5TENCc1pXNW5kR2c2SUc1MWJXSmxjaWs2SUVSSExsQnZhVzUwSUh0Y2JpQWdJQ0JqYjI1emRDQmtlQ0E5SUNod01uZ2dMU0J3TVhncElDOGdiR1Z1WjNSb08xeHVJQ0FnSUdOdmJuTjBJR1I1SUQwZ0tIQXllU0F0SUhBeGVTa2dMeUJzWlc1bmRHZzdYRzRnSUNBZ1kyOXVjM1FnY0RONElEMGdjREo0SUMwZ1pHbHpkR0Z1WTJVZ0tpQmtlRHRjYmlBZ0lDQmpiMjV6ZENCd00za2dQU0J3TW5rZ0xTQmthWE4wWVc1alpTQXFJR1I1TzF4dVhHNGdJQ0FnY21WMGRYSnVJRzVsZHlCRVJ5NVFiMmx1ZENod00zZ3NJSEF6ZVNrN1hHNGdJSDFjYmx4dUlDQm1hVzVrUTI5dWRISnZiRkJ2YVc1MEtHbGtlRG9nYm5WdFltVnlMQ0I0TVRvZ2JuVnRZbVZ5TENCNU1Ub2diblZ0WW1WeUxDQjRNam9nYm5WdFltVnlMQ0I1TWpvZ2JuVnRZbVZ5TENCcFB6b2diblZ0WW1WeUtUb2dSRWN1VUc5cGJuUWdlMXh1SUNBZ0lHTnZibk4wSUcxcFpGZ2dQU0I0TVNBcklDaDRNaUF0SUhneEtTQXZJREk3WEc0Z0lDQWdZMjl1YzNRZ2JXbGtXU0E5SUhreElDc2dLSGt5SUMwZ2VURXBJQzhnTWp0Y2JpQWdJQ0JzWlhRZ1pIZ2dQU0J0YVdSWUlDMGdlREU3WEc0Z0lDQWdiR1YwSUdSNUlEMGdiV2xrV1NBdElIa3hPMXh1SUNBZ0lHTnZibk4wSUdScGMzUWdQU0JOWVhSb0xuTnhjblFvWkhnZ0tpQmtlQ0FySUdSNUlDb2daSGtwTzF4dUlDQWdJR1I0SUM4OUlHUnBjM1E3WEc0Z0lDQWdaSGtnTHowZ1pHbHpkRHRjYmlBZ0lDQmpiMjV6ZENCd1pYSndaVzVrYVdOMWJHRnlUR1Z1SUQwZ05UQWdLaUJOWVhSb0xtTmxhV3dvYVdSNElDOGdNaWs3WEc0Z0lDQWdjbVYwZFhKdUlHbGtlQ0FsSURJZ1BUMDlJREFnUDF4dUlDQWdJQ0FnYm1WM0lFUkhMbEJ2YVc1MEtHMXBaRmdnS3lBb2NHVnljR1Z1WkdsamRXeGhja3hsYmlBdklESXBJQ29nWkhrc0lHMXBaRmtnTFNBb2NHVnljR1Z1WkdsamRXeGhja3hsYmlBdklESXBJQ29nWkhncElEcGNiaUFnSUNBZ0lHNWxkeUJFUnk1UWIybHVkQ2h0YVdSWUlDMGdLSEJsY25CbGJtUnBZM1ZzWVhKTVpXNGdMeUF5S1NBcUlHUjVMQ0J0YVdSWklDc2dLSEJsY25CbGJtUnBZM1ZzWVhKTVpXNGdMeUF5S1NBcUlHUjRLVHRjYmlBZ2ZWeHVYRzRnSUdOaGJuWmhjMEZ5Y205M0tIQmhkR2c2SUVOaGJuWmhjMUpsYm1SbGNtbHVaME52Ym5SbGVIUXlSQ3dnWVhKeWIzZEZibVJZT2lCdWRXMWlaWElzSUdGeWNtOTNSVzVrV1RvZ2JuVnRZbVZ5TENCeGRXRmtXRG9nYm5WdFltVnlMQ0J4ZFdGa1dUb2diblZ0WW1WeUtUb2dkbTlwWkNCN1hHNGdJQ0FnWTI5dWMzUWdZWEp5YjNkQmJtZHNaU0E5SUUxaGRHZ3VZWFJoYmpJb2NYVmhaRmdnTFNCaGNuSnZkMFZ1WkZnc0lIRjFZV1JaSUMwZ1lYSnliM2RGYm1SWktTQXJJRTFoZEdndVVFazdYRzRnSUNBZ2NHRjBhQzV0YjNabFZHOG9ZWEp5YjNkRmJtUllJQzBnS0hSb2FYTXVZWEp5YjNkWGFXUjBhQ0FxSUUxaGRHZ3VjMmx1S0dGeWNtOTNRVzVuYkdVZ0xTQk5ZWFJvTGxCSklDOGdNVEFwS1N4Y2JpQWdJQ0FnSUdGeWNtOTNSVzVrV1NBdElDaDBhR2x6TG1GeWNtOTNWMmxrZEdnZ0tpQk5ZWFJvTG1OdmN5aGhjbkp2ZDBGdVoyeGxJQzBnVFdGMGFDNVFTU0F2SURFd0tTa3BPMXh1SUNBZ0lIQmhkR2d1YkdsdVpWUnZLR0Z5Y205M1JXNWtXQ3dnWVhKeWIzZEZibVJaS1R0Y2JpQWdJQ0J3WVhSb0xteHBibVZVYnloaGNuSnZkMFZ1WkZnZ0xTQW9kR2hwY3k1aGNuSnZkMWRwWkhSb0lDb2dUV0YwYUM1emFXNG9ZWEp5YjNkQmJtZHNaU0FySUUxaGRHZ3VVRWtnTHlBeE1Da3BMRnh1SUNBZ0lDQWdZWEp5YjNkRmJtUlpJQzBnS0hSb2FYTXVZWEp5YjNkWGFXUjBhQ0FxSUUxaGRHZ3VZMjl6S0dGeWNtOTNRVzVuYkdVZ0t5Qk5ZWFJvTGxCSklDOGdNVEFwS1NrN1hHNGdJSDFjYm4xY2JpSmRmUT09IiwidmFyIF9fYXdhaXRlciA9ICh0aGlzICYmIHRoaXMuX19hd2FpdGVyKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcbiAgICB9KTtcbn07XG4vKiBlc2xpbnQtZGlzYWJsZSBjYW1lbGNhc2UgKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4gKi9cbi8qIERvIG5vdCBjaGFuZ2UgdGhlc2UgaW1wb3J0IGxpbmVzIHRvIG1hdGNoIGV4dGVybmFsIG1vZHVsZXMgaW4gd2VicGFjayBjb25maWd1cmF0aW9uICovXG5pbXBvcnQgKiBhcyBncm9rIGZyb20gJ2RhdGFncm9rLWFwaS9ncm9rJztcbmltcG9ydCAqIGFzIHVpIGZyb20gJ2RhdGFncm9rLWFwaS91aSc7XG5pbXBvcnQgKiBhcyBERyBmcm9tICdkYXRhZ3Jvay1hcGkvZGcnO1xuaW1wb3J0IHsgX2luaXRFREFBUEkgfSBmcm9tICcuLi93YXNtL0VEQUFQSSc7XG5pbXBvcnQgeyBjb21wdXRlUENBIH0gZnJvbSAnLi9lZGEtdG9vbHMnO1xuaW1wb3J0IHsgYWRkUHJlZml4VG9FYWNoQ29sdW1uTmFtZSwgYWRkT25lV2F5QW5vdmFWaXp1YWxpemF0aW9uIH0gZnJvbSAnLi9lZGEtdWknO1xuaW1wb3J0IHsgdGVzdERhdGFGb3JCaW5hcnlDbGFzc2lmaWNhdGlvbiB9IGZyb20gJy4vZGF0YS1nZW5lcmF0b3JzJztcbmltcG9ydCB7IExJTkVBUiwgUkJGLCBQT0xZTk9NSUFMLCBTSUdNT0lELCBnZXRUcmFpbmVkTW9kZWwsIGdldFByZWRpY3Rpb24sIHNob3dUcmFpblJlcG9ydCwgZ2V0UGFja2VkTW9kZWwgfSBmcm9tICcuL3N2bSc7XG5pbXBvcnQgeyBQTFNfQU5BTFlTSVMgfSBmcm9tICcuL3Bscy9wbHMtY29uc3RhbnRzJztcbmltcG9ydCB7IHJ1bk1WQSwgcnVuRGVtb01WQSwgZ2V0UGxzQW5hbHlzaXMgfSBmcm9tICcuL3Bscy9wbHMtdG9vbHMnO1xuaW1wb3J0IHsgb25lV2F5QW5vdmEgfSBmcm9tICcuL3N0YXQtdG9vbHMnO1xuaW1wb3J0IHsgZ2V0RGJzY2FuV29ya2VyIH0gZnJvbSAnQGRhdGFncm9rLWxpYnJhcmllcy9tYXRoJztcbmltcG9ydCB7IE11bHRpQ29sdW1uRGltUmVkdWN0aW9uRWRpdG9yIH0gZnJvbSAnQGRhdGFncm9rLWxpYnJhcmllcy9tbC9zcmMvbXVsdGktY29sdW1uLWRpbWVuc2lvbmFsaXR5LXJlZHVjdGlvbi9tdWx0aS1jb2x1bW4tZGltLXJlZHVjdGlvbi1lZGl0b3InO1xuaW1wb3J0IHsgbXVsdGlDb2xSZWR1Y2VEaW1lbnNpb25hbGl0eSB9IGZyb20gJ0BkYXRhZ3Jvay1saWJyYXJpZXMvbWwvc3JjL211bHRpLWNvbHVtbi1kaW1lbnNpb25hbGl0eS1yZWR1Y3Rpb24vcmVkdWNlLWRpbWVuc2lvbmFsaXR5JztcbmltcG9ydCB7IHJ1bktOTkltcHV0ZXIgfSBmcm9tICcuL21pc3NpbmctdmFsdWVzLWltcHV0YXRpb24vdWknO1xuaW1wb3J0IHsgTUNMRWRpdG9yIH0gZnJvbSAnQGRhdGFncm9rLWxpYnJhcmllcy9tbC9zcmMvTUNML21jbC1lZGl0b3InO1xuaW1wb3J0IHsgbWFya292Q2x1c3RlciB9IGZyb20gJ0BkYXRhZ3Jvay1saWJyYXJpZXMvbWwvc3JjL01DTC9jbHVzdGVyaW5nLXZpZXcnO1xuZXhwb3J0IGNvbnN0IF9wYWNrYWdlID0gbmV3IERHLlBhY2thZ2UoKTtcbi8vbmFtZTogaW5mb1xuZXhwb3J0IGZ1bmN0aW9uIGluZm8oKSB7XG4gICAgZ3Jvay5zaGVsbC5pbmZvKF9wYWNrYWdlLndlYlJvb3QpO1xufVxuLy90YWdzOiBpbml0XG5leHBvcnQgZnVuY3Rpb24gaW5pdCgpIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICB5aWVsZCBfaW5pdEVEQUFQSSgpO1xuICAgIH0pO1xufVxuLy90b3AtbWVudTogTUwgfCBDbHVzdGVyIHwgREJTQ0FOLi4uXG4vL25hbWU6IERCU0NBTlxuLy9kZXNjcmlwdGlvbjogRGVuc2l0eS1iYXNlZCBzcGF0aWFsIGNsdXN0ZXJpbmcgb2YgYXBwbGljYXRpb25zIHdpdGggbm9pc2UgKERCU0NBTilcbi8vaW5wdXQ6IGRhdGFmcmFtZSBkZlxuLy9pbnB1dDogY29sdW1uIHhDb2wge3R5cGU6IG51bWVyaWNhbH1cbi8vaW5wdXQ6IGNvbHVtbiB5Q29sIHt0eXBlOiBudW1lcmljYWx9XG4vL2lucHV0OiBkb3VibGUgZXBzaWxvbiA9IDAuMDIge2NhcHRpb246IEVwc2lsb259IFtUaGUgbWF4aW11bSBkaXN0YW5jZSBiZXR3ZWVuIHR3byBzYW1wbGVzIGZvciB0aGVtIHRvIGJlIGNvbnNpZGVyZWQgYXMgaW4gdGhlIHNhbWUgbmVpZ2hib3Job29kLl1cbi8vaW5wdXQ6IGludCBtaW5QdHMgPSA0IHtjYXB0aW9uOiBNaW5pbXVtIHBvaW50c30gW1RoZSBudW1iZXIgb2Ygc2FtcGxlcyAob3IgdG90YWwgd2VpZ2h0KSBpbiBhIG5laWdoYm9yaG9vZCBmb3IgYSBwb2ludCB0byBiZSBjb25zaWRlcmVkIGFzIGEgY29yZSBwb2ludC5dXG4vL291dHB1dDogY29sdW1uIGNsdXN0ZXJcbmV4cG9ydCBmdW5jdGlvbiBkYlNjYW4oZGYsIHhDb2wsIHlDb2wsIGVwc2lsb24sIG1pblB0cykge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGNvbnN0IHggPSB4Q29sLmdldFJhd0RhdGEoKTtcbiAgICAgICAgY29uc3QgeSA9IHlDb2wuZ2V0UmF3RGF0YSgpO1xuICAgICAgICBjb25zdCByZXMgPSB5aWVsZCBnZXREYnNjYW5Xb3JrZXIoeCwgeSwgZXBzaWxvbiwgbWluUHRzKTtcbiAgICAgICAgY29uc3QgY2x1c3RlckNvbE5hbWUgPSBkZi5jb2x1bW5zLmdldFVudXNlZE5hbWUoJ0NsdXN0ZXIgKERCU0NBTiknKTtcbiAgICAgICAgY29uc3QgY2x1c3RlciA9IERHLkNvbHVtbi5mcm9tSW50MzJBcnJheShjbHVzdGVyQ29sTmFtZSwgcmVzKTtcbiAgICAgICAgZGYuY29sdW1ucy5hZGQoY2x1c3Rlcik7XG4gICAgICAgIHJldHVybiBjbHVzdGVyO1xuICAgIH0pO1xufVxuLy90b3AtbWVudTogTUwgfCBBbmFseXplIHwgUENBLi4uXG4vL25hbWU6IFBDQVxuLy9kZXNjcmlwdGlvbjogUHJpbmNpcGFsIGNvbXBvbmVudCBhbmFseXNpcyAoUENBKVxuLy9pbnB1dDogZGF0YWZyYW1lIHRhYmxlXG4vL2lucHV0OiBjb2x1bW5fbGlzdCBmZWF0dXJlcyB7dHlwZTogbnVtZXJpY2FsfVxuLy9pbnB1dDogaW50IGNvbXBvbmVudHMgPSAyIHtjYXB0aW9uOiBDb21wb25lbnRzfSBbTnVtYmVyIG9mIGNvbXBvbmVudHMuXVxuLy9pbnB1dDogYm9vbCBjZW50ZXIgPSBmYWxzZSBbSW5kaWNhdGluZyB3aGV0aGVyIHRoZSB2YXJpYWJsZXMgc2hvdWxkIGJlIHNoaWZ0ZWQgdG8gYmUgemVybyBjZW50ZXJlZC5dXG4vL2lucHV0OiBib29sIHNjYWxlID0gZmFsc2UgW0luZGljYXRpbmcgd2hldGhlciB0aGUgdmFyaWFibGVzIHNob3VsZCBiZSBzY2FsZWQgdG8gaGF2ZSB1bml0IHZhcmlhbmNlLl1cbmV4cG9ydCBmdW5jdGlvbiBQQ0EodGFibGUsIGZlYXR1cmVzLCBjb21wb25lbnRzLCBjZW50ZXIsIHNjYWxlKSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgY29uc3QgcGNhVGFibGUgPSB5aWVsZCBjb21wdXRlUENBKHRhYmxlLCBmZWF0dXJlcywgY29tcG9uZW50cywgY2VudGVyLCBzY2FsZSk7XG4gICAgICAgIGFkZFByZWZpeFRvRWFjaENvbHVtbk5hbWUoJ1BDJywgcGNhVGFibGUuY29sdW1ucyk7XG4gICAgICAgIGlmICh0YWJsZS5pZCA9PT0gbnVsbCkgLy8gdGFibGUgaXMgbG9hZGVkIGZyb20gYSBsb2NhbCBmaWxlXG4gICAgICAgICAgICBncm9rLnNoZWxsLmFkZFRhYmxlVmlldyhwY2FUYWJsZSk7XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgY29scyA9IHRhYmxlLmNvbHVtbnM7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGNvbCBvZiBwY2FUYWJsZS5jb2x1bW5zKSB7XG4gICAgICAgICAgICAgICAgY29sLm5hbWUgPSBjb2xzLmdldFVudXNlZE5hbWUoY29sLm5hbWUpO1xuICAgICAgICAgICAgICAgIGNvbHMuYWRkKGNvbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9KTtcbn1cbi8vbmFtZTogREJTQ0FOIGNsdXN0ZXJpbmdcbi8vdGFnczogZGltLXJlZC1wb3N0cHJvY2Vzc2luZy1mdW5jdGlvblxuLy9tZXRhLmRlZmF1bHRQb3N0UHJvY2Vzc2luZ0Z1bmN0aW9uOiB0cnVlXG4vL2lucHV0OiBjb2x1bW4gY29sMVxuLy9pbnB1dDogY29sdW1uIGNvbDJcbi8vaW5wdXQ6IGRvdWJsZSBlcHNpbG9uID0gMC4wMSB7ZGVmYXVsdDogMC4wMX1bTWluaW11bSBkaXN0YW5jZSBiZXR3ZWVuIHR3byBwb2ludHMgdG8gYmUgY29uc2lkZXJlZCBhcyBpbiB0aGUgc2FtZSBuZWlnaGJvcmhvb2QuXVxuLy9pbnB1dDogaW50IG1pbmltdW1Qb2ludHMgPSA1IHtkZWZhdWx0OiA1fVtNaW5pbXVtIG51bWJlciBvZiBwb2ludHMgdG8gZm9ybSBhIGRlbnNlIHJlZ2lvbi5dXG5leHBvcnQgZnVuY3Rpb24gZGJzY2FuUG9zdFByb2Nlc3NpbmdGdW5jdGlvbihjb2wxLCBjb2wyLCBlcHNpbG9uLCBtaW5pbXVtUG9pbnRzKSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgY29uc3QgZGYgPSBjb2wxLmRhdGFGcmFtZTtcbiAgICAgICAgaWYgKGRmID09PSBudWxsKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBjb25zdCByZXNDb2wgPSB5aWVsZCBkYlNjYW4oZGYsIGNvbDEsIGNvbDIsIGVwc2lsb24sIG1pbmltdW1Qb2ludHMpO1xuICAgICAgICBkZi5jaGFuZ2VDb2x1bW5UeXBlKHJlc0NvbCwgJ3N0cmluZycpO1xuICAgICAgICBjb25zdCBjb2xOYW1lcyA9IFtjb2wxLm5hbWUsIGNvbDIubmFtZV07XG4gICAgICAgIGNvbnN0IHR2ID0gZ3Jvay5zaGVsbC50YWJsZVZpZXcoZGYubmFtZSk7XG4gICAgICAgIGlmICghdHYpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIC8vIGZpbmQgdGhlIGNvcnJlY3Qgc2NhdHRlclBsb3RWaWV3ZXIgYW5kIHNldCB0aGUgY29sb3JDb2x1bW5OYW1lXG4gICAgICAgIGZvciAoY29uc3QgdiBvZiB0di52aWV3ZXJzKSB7XG4gICAgICAgICAgICBpZiAodiBpbnN0YW5jZW9mIERHLlNjYXR0ZXJQbG90Vmlld2VyICYmIGNvbE5hbWVzLmluY2x1ZGVzKHYucHJvcHMueENvbHVtbk5hbWUpICYmIGNvbE5hbWVzLmluY2x1ZGVzKHYucHJvcHMueUNvbHVtbk5hbWUpKSB7XG4gICAgICAgICAgICAgICAgdi5wcm9wcy5jb2xvckNvbHVtbk5hbWUgPSByZXNDb2wubmFtZTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9KTtcbn1cbi8vbmFtZTogTm9uZSAobnVtYmVyKVxuLy90YWdzOiBkaW0tcmVkLXByZXByb2Nlc3NpbmctZnVuY3Rpb25cbi8vbWV0YS5zdXBwb3J0ZWRUeXBlczogaW50LGZsb2F0LGRvdWJsZSxxbnVtXG4vL21ldGEuc3VwcG9ydGVkRGlzdGFuY2VGdW5jdGlvbnM6IERpZmZlcmVuY2Vcbi8vaW5wdXQ6IGNvbHVtbiBjb2xcbi8vaW5wdXQ6IHN0cmluZyBfbWV0cmljIHtvcHRpb25hbDogdHJ1ZX1cbi8vb3V0cHV0OiBvYmplY3QgcmVzdWx0XG5leHBvcnQgZnVuY3Rpb24gbnVtYmVyUHJlcHJvY2Vzc2luZ0Z1bmN0aW9uKGNvbCwgX21ldHJpYykge1xuICAgIGNvbnN0IHJhbmdlID0gY29sLnN0YXRzLm1heCAtIGNvbC5zdGF0cy5taW47XG4gICAgY29uc3QgZW50cmllcyA9IGNvbC50b0xpc3QoKTtcbiAgICByZXR1cm4geyBlbnRyaWVzLCBvcHRpb25zOiB7IHJhbmdlIH0gfTtcbn1cbi8vbmFtZTogTm9uZSAoc3RyaW5nKVxuLy90YWdzOiBkaW0tcmVkLXByZXByb2Nlc3NpbmctZnVuY3Rpb25cbi8vbWV0YS5zdXBwb3J0ZWRUeXBlczogc3RyaW5nXG4vL21ldGEuc3VwcG9ydGVkRGlzdGFuY2VGdW5jdGlvbnM6IE9uZS1Ib3QsTGV2ZW5zaHRlaW4sSGFtbWluZ1xuLy9pbnB1dDogY29sdW1uIGNvbFxuLy9pbnB1dDogc3RyaW5nIF9tZXRyaWMge29wdGlvbmFsOiB0cnVlfVxuLy9vdXRwdXQ6IG9iamVjdCByZXN1bHRcbmV4cG9ydCBmdW5jdGlvbiBzdHJpbmdQcmVwcm9jZXNzaW5nRnVuY3Rpb24oY29sLCBfbWV0cmljKSB7XG4gICAgY29uc3QgZW50cmllcyA9IGNvbC50b0xpc3QoKTtcbiAgICByZXR1cm4geyBlbnRyaWVzLCBvcHRpb25zOiB7fSB9O1xufVxuLy90b3AtbWVudTogTUwgfCBSZWR1Y2UgRGltZW5zaW9uYWxpdHkuLi5cbi8vbmFtZTogTXVsdGkgQ29sdW1uIERpbWVuc2lvbmFsaXR5IFJlZHVjdGlvblxuZXhwb3J0IGZ1bmN0aW9uIHJlZHVjZURpbWVuc2lvbmFsaXR5KCkge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGNvbnN0IGVkaXRvciA9IG5ldyBNdWx0aUNvbHVtbkRpbVJlZHVjdGlvbkVkaXRvcigpO1xuICAgICAgICBjb25zdCBkaWFsb2cgPSB1aS5kaWFsb2coJ0RpbWVuc2lvbmFsaXR5IHJlZHVjdGlvbicpXG4gICAgICAgICAgICAuYWRkKGVkaXRvci5nZXRFZGl0b3IoKSlcbiAgICAgICAgICAgIC5vbk9LKCgpID0+IF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIGNvbnN0IHBhcmFtcyA9IGVkaXRvci5nZXRQYXJhbXMoKTtcbiAgICAgICAgICAgIGlmIChwYXJhbXMuY29sdW1ucy5sZW5ndGggPT09IDApXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgeWllbGQgbXVsdGlDb2xSZWR1Y2VEaW1lbnNpb25hbGl0eShwYXJhbXMudGFibGUsIHBhcmFtcy5jb2x1bW5zLCBwYXJhbXMubWV0aG9kTmFtZSwgcGFyYW1zLmRpc3RhbmNlTWV0cmljcywgcGFyYW1zLndlaWdodHMsIHBhcmFtcy5wcmVwcm9jZXNzaW5nRnVuY3Rpb25zLCBwYXJhbXMuYWdncmVhZ2dyZWdhdGlvbk1ldGhvZCwgISFwYXJhbXMucGxvdEVtYmVkZGluZ3MsICEhcGFyYW1zLmNsdXN0ZXJFbWJlZGRpbmdzLCBwYXJhbXMub3B0aW9ucywge1xuICAgICAgICAgICAgICAgIGZhc3RSb3dDb3VudDogMTAwMDAsXG4gICAgICAgICAgICB9LCBwYXJhbXMucG9zdFByb2Nlc3NpbmdGdW5jdGlvbiwgcGFyYW1zLnBvc3RQcm9jZXNzaW5nRnVuY3Rpb25BcmdzKTtcbiAgICAgICAgfSkpLnNob3coKTtcbiAgICAgICAgY29uc3QgdmFsaWRhdGUgPSAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBjb2xzID0gZWRpdG9yLmNvbHVtbnNJbnB1dC52YWx1ZTtcbiAgICAgICAgICAgIGNvbnN0IG9rQnV0dG9uID0gZGlhbG9nLmdldEJ1dHRvbignT0snKTtcbiAgICAgICAgICAgIGlmICghb2tCdXR0b24pXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgY29uc3QgaXNEaXNhYmxlZCA9ICFjb2xzIHx8IGNvbHMubGVuZ3RoID09PSAwO1xuICAgICAgICAgICAgaWYgKGlzRGlzYWJsZWQpXG4gICAgICAgICAgICAgICAgb2tCdXR0b24uY2xhc3NMaXN0LmFkZCgnZGlzYWJsZWQnKTtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICBva0J1dHRvbi5jbGFzc0xpc3QucmVtb3ZlKCdkaXNhYmxlZCcpO1xuICAgICAgICB9O1xuICAgICAgICBlZGl0b3Iub25Db2x1bW5zQ2hhbmdlZC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICB2YWxpZGF0ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgdmFsaWRhdGUoKTtcbiAgICB9KTtcbn1cbi8vbmFtZTogR2V0TUNMRWRpdG9yXG4vL3RhZ3M6IGVkaXRvclxuLy9pbnB1dDogZnVuY2NhbGwgY2FsbFxuZXhwb3J0IGZ1bmN0aW9uIEdldE1DTEVkaXRvcihjYWxsKSB7XG4gICAgdHJ5IHtcbiAgICAgICAgY29uc3QgZnVuY0VkaXRvciA9IG5ldyBNQ0xFZGl0b3IoKTtcbiAgICAgICAgdWkuZGlhbG9nKCdNYXJrb3YgY2x1c3RlcmluZycpXG4gICAgICAgICAgICAuYWRkKGZ1bmNFZGl0b3IuZ2V0RWRpdG9yKCkpXG4gICAgICAgICAgICAub25PSygoKSA9PiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICBjb25zdCBwYXJhbXMgPSBmdW5jRWRpdG9yLnBhcmFtcztcbiAgICAgICAgICAgIHJldHVybiBjYWxsLmZ1bmMucHJlcGFyZSh7XG4gICAgICAgICAgICAgICAgZGY6IHBhcmFtcy50YWJsZSwgY29sczogcGFyYW1zLmNvbHVtbnMsIG1ldHJpY3M6IHBhcmFtcy5kaXN0YW5jZU1ldHJpY3MsXG4gICAgICAgICAgICAgICAgd2VpZ2h0czogcGFyYW1zLndlaWdodHMsIGFnZ3JlZ2F0aW9uTWV0aG9kOiBwYXJhbXMuYWdncmVhZ2dyZWdhdGlvbk1ldGhvZCwgcHJlcHJvY2Vzc2luZ0Z1bmNzOiBwYXJhbXMucHJlcHJvY2Vzc2luZ0Z1bmN0aW9ucyxcbiAgICAgICAgICAgICAgICBwcmVwcm9jZXNzaW5nRnVuY0FyZ3M6IHBhcmFtcy5wcmVwcm9jZXNzaW5nRnVuY0FyZ3MsIHRocmVzaG9sZDogcGFyYW1zLnRocmVzaG9sZCwgbWF4SXRlcmF0aW9uczogcGFyYW1zLm1heEl0ZXJhdGlvbnMsXG4gICAgICAgICAgICAgICAgdXNlV2ViR1BVOiBwYXJhbXMudXNlV2ViR1BVLFxuICAgICAgICAgICAgfSkuY2FsbCh0cnVlKTtcbiAgICAgICAgfSkpLnNob3coKTtcbiAgICB9XG4gICAgY2F0Y2ggKGVycikge1xuICAgICAgICBjb25zdCBlcnJNc2cgPSBlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyci5tZXNzYWdlIDogZXJyLnRvU3RyaW5nKCk7XG4gICAgICAgIGNvbnN0IGVyclN0YWNrID0gZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIuc3RhY2sgOiB1bmRlZmluZWQ7XG4gICAgICAgIGdyb2suc2hlbGwuZXJyb3IoYEdldCByZWdpb24gZWRpdG9yIGVycm9yOiAke2Vyck1zZ31gKTtcbiAgICAgICAgX3BhY2thZ2UubG9nZ2VyLmVycm9yKGVyck1zZywgdW5kZWZpbmVkLCBlcnJTdGFjayk7XG4gICAgfVxufVxuLy90b3AtbWVudTogTUwgfCBDbHVzdGVyIHwgTUNMLi4uXG4vL25hbWU6IE1DTFxuLy9kZXNjcmlwdGlvbjogTWFya292IGNsdXN0ZXJpbmcgKE1DTCkgaXMgYW4gdW5zdXBlcnZpc2VkIGNsdXN0ZXJpbmcgYWxnb3JpdGhtIGZvciBncmFwaHMgYmFzZWQgb24gc2ltdWxhdGlvbiBvZiBzdG9jaGFzdGljIGZsb3cuXG4vL2lucHV0OiBkYXRhZnJhbWUgZGZcbi8vaW5wdXQ6IGxpc3Q8Y29sdW1uPiBjb2xzXG4vL2lucHV0OiBsaXN0PHN0cmluZz4gbWV0cmljc1xuLy9pbnB1dDogbGlzdDxkb3VibGU+IHdlaWdodHNcbi8vaW5wdXQ6IHN0cmluZyBhZ2dyZWdhdGlvbk1ldGhvZFxuLy9pbnB1dDogbGlzdDxmdW5jPiBwcmVwcm9jZXNzaW5nRnVuY3Ncbi8vaW5wdXQ6IG9iamVjdCBwcmVwcm9jZXNzaW5nRnVuY0FyZ3Ncbi8vaW5wdXQ6IGludCB0aHJlc2hvbGQgPSA4MFxuLy9pbnB1dDogaW50IG1heEl0ZXJhdGlvbnMgPSAxMFxuLy9pbnB1dDogYm9vbCB1c2VXZWJHUFUgPSBmYWxzZVxuLy9lZGl0b3I6IEVEQTogR2V0TUNMRWRpdG9yXG5leHBvcnQgZnVuY3Rpb24gTUNMKGRmLCBjb2xzLCBtZXRyaWNzLCB3ZWlnaHRzLCBhZ2dyZWdhdGlvbk1ldGhvZCwgcHJlcHJvY2Vzc2luZ0Z1bmNzLCBwcmVwcm9jZXNzaW5nRnVuY0FyZ3MsIHRocmVzaG9sZCA9IDgwLCBtYXhJdGVyYXRpb25zID0gMTAsIHVzZVdlYkdQVSA9IGZhbHNlKSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgY29uc3QgcmVzID0gKHlpZWxkIG1hcmtvdkNsdXN0ZXIoZGYsIGNvbHMsIG1ldHJpY3MsIHdlaWdodHMsIGFnZ3JlZ2F0aW9uTWV0aG9kLCBwcmVwcm9jZXNzaW5nRnVuY3MsIHByZXByb2Nlc3NpbmdGdW5jQXJncywgdGhyZXNob2xkLCBtYXhJdGVyYXRpb25zLCB1c2VXZWJHUFUpKTtcbiAgICAgICAgcmV0dXJuIHJlcyA9PT0gbnVsbCB8fCByZXMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHJlcy5zYztcbiAgICB9KTtcbn1cbi8vbmFtZTogUExTXG4vL2Rlc2NyaXB0aW9uOiBDb21wdXRlIHBhcnRpYWwgbGVhc3Qgc3F1YXJlcyAoUExTKSByZWdyZXNzaW9uIGFuYWx5c2lzIGNvbXBvbmVudHM6IHByZWRpY3Rpb24sIHJlZ3Jlc3Npb24gY29lZmZpY2llbnRzLCBULSAmIFUtc2NvcmVzLCBYLWxvYWRpbmdzLlxuLy9pbnB1dDogZGF0YWZyYW1lIHRhYmxlXG4vL2lucHV0OiBjb2x1bW5fbGlzdCBmZWF0dXJlcyB7dHlwZTogbnVtZXJpY2FsfVxuLy9pbnB1dDogY29sdW1uIHByZWRpY3Qge3R5cGU6IG51bWVyaWNhbH1cbi8vaW5wdXQ6IGludCBjb21wb25lbnRzID0gM1xuLy9pbnB1dDogY29sdW1uIG5hbWVzIHt0eXBlOiBzdHJpbmd9XG4vL291dHB1dDogb2JqZWN0IHBsc1Jlc3VsdHNcbmV4cG9ydCBmdW5jdGlvbiBQTFModGFibGUsIGZlYXR1cmVzLCBwcmVkaWN0LCBjb21wb25lbnRzLCBuYW1lcykge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIHJldHVybiB5aWVsZCBnZXRQbHNBbmFseXNpcyh7XG4gICAgICAgICAgICB0YWJsZTogdGFibGUsXG4gICAgICAgICAgICBmZWF0dXJlczogZmVhdHVyZXMsXG4gICAgICAgICAgICBwcmVkaWN0OiBwcmVkaWN0LFxuICAgICAgICAgICAgY29tcG9uZW50czogY29tcG9uZW50cyxcbiAgICAgICAgICAgIG5hbWVzOiBuYW1lcyxcbiAgICAgICAgfSk7XG4gICAgfSk7XG59XG4vL3RvcC1tZW51OiBNTCB8IEFuYWx5emUgfCBQTFMuLi5cbi8vbmFtZTogdG9wTWVudVBMU1xuLy9kZXNjcmlwdGlvbjogQ29tcHV0ZSBwYXJ0aWFsIGxlYXN0IHNxdWFyZXMgKFBMUykgcmVncmVzc2lvbiBjb21wb25lbnRzLiBUaGV5IG1heGltYWxseSBzdW1tYXJpemUgdGhlIHZhcmlhdGlvbiBvZiB0aGUgcHJlZGljdG9ycyB3aGlsZSBtYXhpbWl6aW5nIGNvcnJlbGF0aW9uIHdpdGggdGhlIHJlc3BvbnNlIHZhcmlhYmxlLlxuZXhwb3J0IGZ1bmN0aW9uIHRvcE1lbnVQTFMoKSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgeWllbGQgcnVuTVZBKFBMU19BTkFMWVNJUy5DT01QVVRFX0NPTVBPTkVOVFMpO1xuICAgIH0pO1xufVxuLy90b3AtbWVudTogTUwgfCBBbmFseXplIHwgTXVsdGl2YXJpYXRlIEFuYWx5c2lzLi4uXG4vL25hbWU6IG11bHRpdmFyaWF0ZUFuYWx5c2lzXG4vL2Rlc2NyaXB0aW9uOiBNdWx0aWRpbWVuc2lvbmFsIGRhdGEgYW5hbHlzaXMgdXNpbmcgcGFydGlhbCBsZWFzdCBzcXVhcmVzIChQTFMpIHJlZ3Jlc3Npb24uXG5leHBvcnQgZnVuY3Rpb24gTVZBKCkge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIHlpZWxkIHJ1bk1WQShQTFNfQU5BTFlTSVMuUEVSRk9STV9NVkEpO1xuICAgIH0pO1xufVxuLy9uYW1lOiBNVkEgZGVtb1xuLy9kZXNjcmlwdGlvbjogTXVsdGlkaW1lbnNpb25hbCBkYXRhIGFuYWx5c2lzIHVzaW5nIHBhcnRpYWwgbGVhc3Qgc3F1YXJlcyAoUExTKSByZWdyZXNzaW9uLiBJdCBpZGVudGlmaWVzIGxhdGVudCBmYWN0b3JzIGFuZCBjb25zdHJ1Y3RzIGEgbGluZWFyIG1vZGVsIGJhc2VkIG9uIHRoZW0uXG4vL21ldGEuZGVtb1BhdGg6IENvbXB1dGUgfCBNdWx0aXZhcmlhdGUgYW5hbHlzaXNcbmV4cG9ydCBmdW5jdGlvbiBkZW1vTXVsdGl2YXJpYXRlQW5hbHlzaXMoKSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgcnVuRGVtb01WQSgpO1xuICAgIH0pO1xufVxuLy9uYW1lOiBHZW5lcmF0ZSBsaW5lYXIgc2VwYXJhYmxlIGRhdGFzZXRcbi8vZGVzY3JpcHRpb246IEdlbmVyYXRlcyBsaW5lYXIgc2VwYXJibGUgZGF0YXNldCBmb3IgdGVzdGluZyBiaW5hcnkgY2xhc3NpZmljYXRvcnNcbi8vaW5wdXQ6IHN0cmluZyBuYW1lID0gJ0RhdGEnIHtjYXB0aW9uOiBuYW1lOyBjYXRlZ29yeTogRGF0YXNldH1cbi8vaW5wdXQ6IGludCBzYW1wbGVzQ291bnQgPSAxMDAwIHtjYXB0aW9uOiBzYW1wbGVzOyBjYXRlZ29yeTogU2l6ZX1cbi8vaW5wdXQ6IGludCBmZWF0dXJlc0NvdW50ID0gMiB7Y2FwdGlvbjogZmVhdHVyZXM7IGNhdGVnb3J5OiBTaXplfVxuLy9pbnB1dDogZG91YmxlIG1pbiA9IC0zOSB7Y2FwdGlvbjogbWluOyBjYXRlZ29yeTogUmFuZ2V9XG4vL2lucHV0OiBkb3VibGUgbWF4ID0gMTczIHtjYXB0aW9uOiBtYXg7IGNhdGVnb3J5OiBSYW5nZX1cbi8vaW5wdXQ6IGRvdWJsZSB2aW9sYXRvcnNQZXJjZW50YWdlID0gNSB7Y2FwdGlvbjogdmlvbGF0b3JzOyB1bml0czogJTsgY2F0ZWdvcnk6IERhdGFzZXR9XG4vL291dHB1dDogZGF0YWZyYW1lIGRmXG5leHBvcnQgZnVuY3Rpb24gdGVzdERhdGFMaW5lYXJTZXBhcmFibGUobmFtZSwgc2FtcGxlc0NvdW50LCBmZWF0dXJlc0NvdW50LCBtaW4sIG1heCwgdmlvbGF0b3JzUGVyY2VudGFnZSkge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIHJldHVybiB5aWVsZCB0ZXN0RGF0YUZvckJpbmFyeUNsYXNzaWZpY2F0aW9uKExJTkVBUiwgWzAsIDBdLCBuYW1lLCBzYW1wbGVzQ291bnQsIGZlYXR1cmVzQ291bnQsIG1pbiwgbWF4LCB2aW9sYXRvcnNQZXJjZW50YWdlKTtcbiAgICB9KTtcbn1cbi8vbmFtZTogR2VuZXJhdGUgbGluZWFyIG5vbi1zZXBhcmFibGUgZGF0YXNldFxuLy9kZXNjcmlwdGlvbjogR2VuZXJhdGVzIGxpbmVhciBub24tc2VwYXJibGUgZGF0YXNldCBmb3IgdGVzdGluZyBiaW5hcnkgY2xhc3NpZmljYXRvcnNcbi8vaW5wdXQ6IHN0cmluZyBuYW1lID0gJ0RhdGEnIHtjYXB0aW9uOiBuYW1lOyBjYXRlZ29yeTogRGF0YXNldH1cbi8vaW5wdXQ6IGRvdWJsZSBzaWdtYSA9IDkwICB7Y2FwdGlvbjogc2lnbWE7IGNhdGVnb3J5OiBIeXBlcnBhcmFtZXRlcnN9IFtSQkYta2VybmVsIHBhcmFtYXRlcl1cbi8vaW5wdXQ6IGludCBzYW1wbGVzQ291bnQgPSAxMDAwIHtjYXB0aW9uOiBzYW1wbGVzOyBjYXRlZ29yeTogU2l6ZX1cbi8vaW5wdXQ6IGludCBmZWF0dXJlc0NvdW50ID0gMiB7Y2FwdGlvbjogZmVhdHVyZXM7IGNhdGVnb3J5OiBTaXplfVxuLy9pbnB1dDogZG91YmxlIG1pbiA9IC0zOSB7Y2FwdGlvbjogbWluOyBjYXRlZ29yeTogUmFuZ2V9XG4vL2lucHV0OiBkb3VibGUgbWF4ID0gMTczIHtjYXB0aW9uOiBtYXg7IGNhdGVnb3J5OiBSYW5nZX1cbi8vaW5wdXQ6IGRvdWJsZSB2aW9sYXRvcnNQZXJjZW50YWdlID0gNSB7Y2FwdGlvbjogdmlvbGF0b3JzOyB1bml0czogJTsgY2F0ZWdvcnk6IERhdGFzZXR9XG4vL291dHB1dDogZGF0YWZyYW1lIGRmXG5leHBvcnQgZnVuY3Rpb24gdGVzdERhdGFMaW5lYXJOb25TZXBhcmFibGUobmFtZSwgc2lnbWEsIHNhbXBsZXNDb3VudCwgZmVhdHVyZXNDb3VudCwgbWluLCBtYXgsIHZpb2xhdG9yc1BlcmNlbnRhZ2UpIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICByZXR1cm4geWllbGQgdGVzdERhdGFGb3JCaW5hcnlDbGFzc2lmaWNhdGlvbihSQkYsIFtzaWdtYSwgMF0sIG5hbWUsIHNhbXBsZXNDb3VudCwgZmVhdHVyZXNDb3VudCwgbWluLCBtYXgsIHZpb2xhdG9yc1BlcmNlbnRhZ2UpO1xuICAgIH0pO1xufVxuLy9uYW1lOiB0cmFpbkxpbmVhcktlcm5lbFNWTVxuLy9tZXRhLm1sbmFtZTogbGluZWFyIGtlcm5lbCBMUy1TVk1cbi8vbWV0YS5tbHJvbGU6IHRyYWluXG4vL2lucHV0OiBkYXRhZnJhbWUgZGZcbi8vaW5wdXQ6IHN0cmluZyBwcmVkaWN0X2NvbHVtblxuLy9pbnB1dDogZG91YmxlIGdhbW1hID0gMS4wIHtjYXRlZ29yeTogSHlwZXJwYXJhbWV0ZXJzfVxuLy9pbnB1dDogYm9vbCB0b1Nob3dSZXBvcnQgPSBmYWxzZSB7Y2FwdGlvbjogdG8gc2hvdyByZXBvcnQ7IGNhdGVnb3J5OiBSZXBvcnR9XG4vL291dHB1dDogZHluYW1pYyBtb2RlbFxuZXhwb3J0IGZ1bmN0aW9uIHRyYWluTGluZWFyS2VybmVsU1ZNKGRmLCBwcmVkaWN0X2NvbHVtbiwgZ2FtbWEsIHRvU2hvd1JlcG9ydCkge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGNvbnN0IHRyYWluZWRNb2RlbCA9IHlpZWxkIGdldFRyYWluZWRNb2RlbCh7IGdhbW1hOiBnYW1tYSwga2VybmVsOiBMSU5FQVIgfSwgZGYsIHByZWRpY3RfY29sdW1uKTtcbiAgICAgICAgaWYgKHRvU2hvd1JlcG9ydClcbiAgICAgICAgICAgIHNob3dUcmFpblJlcG9ydChkZiwgdHJhaW5lZE1vZGVsKTtcbiAgICAgICAgcmV0dXJuIGdldFBhY2tlZE1vZGVsKHRyYWluZWRNb2RlbCk7XG4gICAgfSk7XG59XG4vL25hbWU6IGFwcGx5TGluZWFyS2VybmVsU1ZNXG4vL21ldGEubWxuYW1lOiBsaW5lYXIga2VybmVsIExTLVNWTVxuLy9tZXRhLm1scm9sZTogYXBwbHlcbi8vaW5wdXQ6IGRhdGFmcmFtZSBkZlxuLy9pbnB1dDogZHluYW1pYyBtb2RlbFxuLy9vdXRwdXQ6IGRhdGFmcmFtZSB0YWJsZVxuZXhwb3J0IGZ1bmN0aW9uIGFwcGx5TGluZWFyS2VybmVsU1ZNKGRmLCBtb2RlbCkge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIHJldHVybiB5aWVsZCBnZXRQcmVkaWN0aW9uKGRmLCBtb2RlbCk7XG4gICAgfSk7XG59XG4vL25hbWU6IHRyYWluUkJGa2VybmVsU1ZNXG4vL21ldGEubWxuYW1lOiBSQkYta2VybmVsIExTLVNWTVxuLy9tZXRhLm1scm9sZTogdHJhaW5cbi8vaW5wdXQ6IGRhdGFmcmFtZSBkZlxuLy9pbnB1dDogc3RyaW5nIHByZWRpY3RfY29sdW1uXG4vL2lucHV0OiBkb3VibGUgZ2FtbWEgPSAxLjAge2NhdGVnb3J5OiBIeXBlcnBhcmFtZXRlcnN9XG4vL2lucHV0OiBkb3VibGUgc2lnbWEgPSAxLjUge2NhdGVnb3J5OiBIeXBlcnBhcmFtZXRlcnN9XG4vL2lucHV0OiBib29sIHRvU2hvd1JlcG9ydCA9IGZhbHNlIHtjYXB0aW9uOiB0byBzaG93IHJlcG9ydDsgY2F0ZWdvcnk6IFJlcG9ydH1cbi8vb3V0cHV0OiBkeW5hbWljIG1vZGVsXG5leHBvcnQgZnVuY3Rpb24gdHJhaW5SQkZrZXJuZWxTVk0oZGYsIHByZWRpY3RfY29sdW1uLCBnYW1tYSwgc2lnbWEsIHRvU2hvd1JlcG9ydCkge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGNvbnN0IHRyYWluZWRNb2RlbCA9IHlpZWxkIGdldFRyYWluZWRNb2RlbCh7IGdhbW1hOiBnYW1tYSwga2VybmVsOiBSQkYsIHNpZ21hOiBzaWdtYSB9LCBkZiwgcHJlZGljdF9jb2x1bW4pO1xuICAgICAgICBpZiAodG9TaG93UmVwb3J0KVxuICAgICAgICAgICAgc2hvd1RyYWluUmVwb3J0KGRmLCB0cmFpbmVkTW9kZWwpO1xuICAgICAgICByZXR1cm4gZ2V0UGFja2VkTW9kZWwodHJhaW5lZE1vZGVsKTtcbiAgICB9KTtcbn1cbi8vbmFtZTogYXBwbHlSQkZrZXJuZWxTVk1cbi8vbWV0YS5tbG5hbWU6IFJCRi1rZXJuZWwgTFMtU1ZNXG4vL21ldGEubWxyb2xlOiBhcHBseVxuLy9pbnB1dDogZGF0YWZyYW1lIGRmXG4vL2lucHV0OiBkeW5hbWljIG1vZGVsXG4vL291dHB1dDogZGF0YWZyYW1lIHRhYmxlXG5leHBvcnQgZnVuY3Rpb24gYXBwbHlSQkZrZXJuZWxTVk0oZGYsIG1vZGVsKSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgcmV0dXJuIHlpZWxkIGdldFByZWRpY3Rpb24oZGYsIG1vZGVsKTtcbiAgICB9KTtcbn1cbi8vbmFtZTogdHJhaW5Qb2x5bm9taWFsS2VybmVsU1ZNXG4vL21ldGEubWxuYW1lOiBwb2x5bm9taWFsIGtlcm5lbCBMUy1TVk1cbi8vbWV0YS5tbHJvbGU6IHRyYWluXG4vL2lucHV0OiBkYXRhZnJhbWUgZGZcbi8vaW5wdXQ6IHN0cmluZyBwcmVkaWN0X2NvbHVtblxuLy9pbnB1dDogZG91YmxlIGdhbW1hID0gMS4wIHtjYXRlZ29yeTogSHlwZXJwYXJhbWV0ZXJzfVxuLy9pbnB1dDogZG91YmxlIGMgPSAxIHtjYXRlZ29yeTogSHlwZXJwYXJhbWV0ZXJzfVxuLy9pbnB1dDogZG91YmxlIGQgPSAyIHtjYXRlZ29yeTogSHlwZXJwYXJhbWV0ZXJzfVxuLy9pbnB1dDogYm9vbCB0b1Nob3dSZXBvcnQgPSBmYWxzZSB7Y2FwdGlvbjogdG8gc2hvdyByZXBvcnQ7IGNhdGVnb3J5OiBSZXBvcnR9XG4vL291dHB1dDogZHluYW1pYyBtb2RlbFxuZXhwb3J0IGZ1bmN0aW9uIHRyYWluUG9seW5vbWlhbEtlcm5lbFNWTShkZiwgcHJlZGljdF9jb2x1bW4sIGdhbW1hLCBjLCBkLCB0b1Nob3dSZXBvcnQpIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBjb25zdCB0cmFpbmVkTW9kZWwgPSB5aWVsZCBnZXRUcmFpbmVkTW9kZWwoeyBnYW1tYTogZ2FtbWEsIGtlcm5lbDogUE9MWU5PTUlBTCwgY1BhcmFtOiBjLCBkUGFyYW06IGQgfSwgZGYsIHByZWRpY3RfY29sdW1uKTtcbiAgICAgICAgaWYgKHRvU2hvd1JlcG9ydClcbiAgICAgICAgICAgIHNob3dUcmFpblJlcG9ydChkZiwgdHJhaW5lZE1vZGVsKTtcbiAgICAgICAgcmV0dXJuIGdldFBhY2tlZE1vZGVsKHRyYWluZWRNb2RlbCk7XG4gICAgfSk7XG59IC8vIHRyYWluUG9seW5vbWlhbEtlcm5lbFNWTVxuLy9uYW1lOiBhcHBseVBvbHlub21pYWxLZXJuZWxTVk1cbi8vbWV0YS5tbG5hbWU6IHBvbHlub21pYWwga2VybmVsIExTLVNWTVxuLy9tZXRhLm1scm9sZTogYXBwbHlcbi8vaW5wdXQ6IGRhdGFmcmFtZSBkZlxuLy9pbnB1dDogZHluYW1pYyBtb2RlbFxuLy9vdXRwdXQ6IGRhdGFmcmFtZSB0YWJsZVxuZXhwb3J0IGZ1bmN0aW9uIGFwcGx5UG9seW5vbWlhbEtlcm5lbFNWTShkZiwgbW9kZWwpIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICByZXR1cm4geWllbGQgZ2V0UHJlZGljdGlvbihkZiwgbW9kZWwpO1xuICAgIH0pO1xufVxuLy9uYW1lOiB0cmFpblNpZ21vaWRLZXJuZWxTVk1cbi8vbWV0YS5tbG5hbWU6IHNpZ21vaWQga2VybmVsIExTLVNWTVxuLy9tZXRhLm1scm9sZTogdHJhaW5cbi8vaW5wdXQ6IGRhdGFmcmFtZSBkZlxuLy9pbnB1dDogc3RyaW5nIHByZWRpY3RfY29sdW1uXG4vL2lucHV0OiBkb3VibGUgZ2FtbWEgPSAxLjAge2NhdGVnb3J5OiBIeXBlcnBhcmFtZXRlcnN9XG4vL2lucHV0OiBkb3VibGUga2FwcGEgPSAxIHtjYXRlZ29yeTogSHlwZXJwYXJhbWV0ZXJzfVxuLy9pbnB1dDogZG91YmxlIHRoZXRhID0gMSB7Y2F0ZWdvcnk6IEh5cGVycGFyYW1ldGVyc31cbi8vaW5wdXQ6IGJvb2wgdG9TaG93UmVwb3J0ID0gZmFsc2Uge2NhcHRpb246IHRvIHNob3cgcmVwb3J0OyBjYXRlZ29yeTogUmVwb3J0fVxuLy9vdXRwdXQ6IGR5bmFtaWMgbW9kZWxcbmV4cG9ydCBmdW5jdGlvbiB0cmFpblNpZ21vaWRLZXJuZWxTVk0oZGYsIHByZWRpY3RfY29sdW1uLCBnYW1tYSwga2FwcGEsIHRoZXRhLCB0b1Nob3dSZXBvcnQpIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBjb25zdCB0cmFpbmVkTW9kZWwgPSB5aWVsZCBnZXRUcmFpbmVkTW9kZWwoeyBnYW1tYTogZ2FtbWEsIGtlcm5lbDogU0lHTU9JRCwga2FwcGE6IGthcHBhLCB0aGV0YTogdGhldGEgfSwgZGYsIHByZWRpY3RfY29sdW1uKTtcbiAgICAgICAgaWYgKHRvU2hvd1JlcG9ydClcbiAgICAgICAgICAgIHNob3dUcmFpblJlcG9ydChkZiwgdHJhaW5lZE1vZGVsKTtcbiAgICAgICAgcmV0dXJuIGdldFBhY2tlZE1vZGVsKHRyYWluZWRNb2RlbCk7XG4gICAgfSk7XG59IC8vIHRyYWluU2lnbW9pZEtlcm5lbFNWTVxuLy9uYW1lOiBhcHBseVNpZ21vaWRLZXJuZWxTVk1cbi8vbWV0YS5tbG5hbWU6IHNpZ21vaWQga2VybmVsIExTLVNWTVxuLy9tZXRhLm1scm9sZTogYXBwbHlcbi8vaW5wdXQ6IGRhdGFmcmFtZSBkZlxuLy9pbnB1dDogZHluYW1pYyBtb2RlbFxuLy9vdXRwdXQ6IGRhdGFmcmFtZSB0YWJsZVxuZXhwb3J0IGZ1bmN0aW9uIGFwcGx5U2lnbW9pZEtlcm5lbFNWTShkZiwgbW9kZWwpIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICByZXR1cm4geWllbGQgZ2V0UHJlZGljdGlvbihkZiwgbW9kZWwpO1xuICAgIH0pO1xufVxuLy90b3AtbWVudTogTUwgfCBBbmFseXplIHwgQU5PVkEuLi5cbi8vbmFtZTogQU5PVkFcbi8vZGVzY3JpcHRpb246IE9uZS13YXkgYW5hbHlzaXMgb2YgdmFyaWFuY2VzIChBTk9WQSkgZGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBleGFtaW5lZCBmYWN0b3IgaGFzIGEgc2lnbmlmaWNhbnQgaW1wYWN0IG9uIHRoZSBzdHVkaWVkIGZlYXR1cmUuXG4vL2lucHV0OiBkYXRhZnJhbWUgdGFibGVcbi8vaW5wdXQ6IGNvbHVtbiBmYWN0b3Ige3R5cGU6IGNhdGVnb3JpY2FsfVxuLy9pbnB1dDogY29sdW1uIGZlYXR1cmUge3R5cGU6IG51bWVyaWNhbH1cbi8vaW5wdXQ6IGRvdWJsZSBzaWduaWZpY2FuY2UgPSAwLjA1IFtUaGUgc2lnbmlmaWNhbmNlIGxldmVsIGlzIGEgdmFsdWUgZnJvbSB0aGUgaW50ZXJ2YWwgKDAsIDEpIHNwZWNpZnlpbmcgdGhlIGNyaXRlcmlvbiB1c2VkIGZvciByZWplY3RpbmcgdGhlIG51bGwgaHlwb3RoZXNpcy5dXG4vL2lucHV0OiBib29sIHZhbGlkYXRlID0gZmFsc2UgW0luZGljYXRlcyB3aGV0aGVyIHRoZSBub3JtYWxpdHkgb2YgZGlzdHJpYnV0aW9uIGFuZCBhbiBlcWF1bGl0eSBvZiB2YXJhaW5jZXMgc2hvdWxkIGJlIGNoZWNrZWQuXVxuZXhwb3J0IGZ1bmN0aW9uIGFub3ZhKHRhYmxlLCBmYWN0b3IsIGZlYXR1cmUsIHNpZ25pZmljYW5jZSwgdmFsaWRhdGUpIHtcbiAgICBjb25zdCByZXMgPSBvbmVXYXlBbm92YShmYWN0b3IsIGZlYXR1cmUsIHNpZ25pZmljYW5jZSwgdmFsaWRhdGUpO1xuICAgIGFkZE9uZVdheUFub3ZhVml6dWFsaXphdGlvbih0YWJsZSwgZmFjdG9yLCBmZWF0dXJlLCByZXMpO1xufVxuLy90b3AtbWVudTogTUwgfCBNaXNzaW5nIFZhbHVlcyBJbXB1dGF0aW9uIC4uLlxuLy9uYW1lOiBLTk4gaW1wdXRlXG4vL2Rlc3JpcHRpb246IE1pc3NpbmcgdmFsdWVzIGltcHV0YXRpb24gdXNpbmcgdGhlIGstbmVhcmVzdCBuZWlnaGJvcnMgbWV0aG9kXG5leHBvcnQgZnVuY3Rpb24ga05OSW1wdXRhdGlvbigpIHtcbiAgICBydW5LTk5JbXB1dGVyKCk7XG59XG4iLCIvLyBDdXN0b20gVUkgZm9yIEV4cGxvcmF0b3J5IGRhdGEgYW5hbHlzaXMgKEVEQSkgdG9vbHNcbmltcG9ydCAqIGFzIGdyb2sgZnJvbSAnZGF0YWdyb2stYXBpL2dyb2snO1xuaW1wb3J0ICogYXMgREcgZnJvbSAnZGF0YWdyb2stYXBpL2RnJztcbi8vIFJlbmFtZSBQQ0EgY29sdW1uc1xuZXhwb3J0IGZ1bmN0aW9uIHJlbmFtZVBDQWNvbHVtbnMocGNhVGFibGUpIHtcbiAgICBmb3IgKGNvbnN0IGNvbCBvZiBwY2FUYWJsZS5jb2x1bW5zLnRvTGlzdCgpKVxuICAgICAgICBjb2wubmFtZSA9ICdQQ0EnICsgY29sLm5hbWU7XG4gICAgcmV0dXJuIHBjYVRhYmxlO1xufVxuLy8gQWRkcyBwcmVmaXggdG8gZWFjaCBjb2x1bW4gbmFtZVxuZXhwb3J0IGZ1bmN0aW9uIGFkZFByZWZpeFRvRWFjaENvbHVtbk5hbWUocHJlZml4LCBjb2x1bW5zKSB7XG4gICAgZm9yIChjb25zdCBjb2wgb2YgY29sdW1ucy50b0xpc3QoKSlcbiAgICAgICAgY29sLm5hbWUgPSBwcmVmaXggKyBjb2wubmFtZTtcbn1cbi8vIFByZWRpY3RlZCB2cyBSZWZlcmVuY2Ugc2NhdHRlciBwbG90XG5leHBvcnQgZnVuY3Rpb24gcHJlZGljdGVkVmVyc3VzUmVmZXJlbmNlU2NhdHRlclBsb3Qoc2FtcGxlc05hbWVzLCByZWZlcmVuY2UsIHByZWRpY3Rpb24pIHtcbiAgICBwcmVkaWN0aW9uLm5hbWUgPSByZWZlcmVuY2UubmFtZSArICcocHJlZGljdGVkKSc7XG4gICAgY29uc3QgZGZSZWZlcmVuY2VQcmVkaWN0aW9uID0gREcuRGF0YUZyYW1lLmZyb21Db2x1bW5zKFtzYW1wbGVzTmFtZXMsIHJlZmVyZW5jZSwgcHJlZGljdGlvbl0pO1xuICAgIGRmUmVmZXJlbmNlUHJlZGljdGlvbi5uYW1lID0gJ1JlZmVyZW5jZSB2cy4gUHJlZGljdGVkJztcbiAgICByZXR1cm4gREcuVmlld2VyLnNjYXR0ZXJQbG90KGRmUmVmZXJlbmNlUHJlZGljdGlvbiwgeyB0aXRsZTogZGZSZWZlcmVuY2VQcmVkaWN0aW9uLm5hbWUsXG4gICAgICAgIHg6IHJlZmVyZW5jZS5uYW1lLFxuICAgICAgICB5OiBwcmVkaWN0aW9uLm5hbWUsXG4gICAgICAgIHNob3dSZWdyZXNzaW9uTGluZTogdHJ1ZSxcbiAgICAgICAgbWFya2VyVHlwZTogJ2NpcmNsZScsXG4gICAgICAgIGxhYmVsczogc2FtcGxlc05hbWVzLm5hbWUsXG4gICAgfSk7XG59XG4vLyBSZWdyZXNzaW9uIENvZWZmaWNpZW50cyBCYXIgQ2hhcnRcbmV4cG9ydCBmdW5jdGlvbiByZWdyZXNzaW9uQ29lZmZpY2llbnRzQmFyQ2hhcnQoZmVhdHVyZXMsIHJlZ3Jlc3Npb25Db2VmZnMpIHtcbiAgICByZWdyZXNzaW9uQ29lZmZzLm5hbWUgPSAncmVncmVzc2lvbiBjb2VmZmljaWVudCc7XG4gICAgY29uc3QgbmFtZXNPZlByZWRpY3RvcnMgPSBbXTtcbiAgICBmb3IgKGNvbnN0IGNvbCBvZiBmZWF0dXJlcylcbiAgICAgICAgbmFtZXNPZlByZWRpY3RvcnMucHVzaChjb2wubmFtZSk7XG4gICAgY29uc3QgcHJlZGljdG9yTmFtZXNDb2x1bW4gPSBERy5Db2x1bW4uZnJvbVN0cmluZ3MoJ2ZlYXR1cmUnLCBuYW1lc09mUHJlZGljdG9ycyk7XG4gICAgY29uc3QgZGZSZWdyQ29lZnMgPSBERy5EYXRhRnJhbWUuZnJvbUNvbHVtbnMoW3ByZWRpY3Rvck5hbWVzQ29sdW1uLCByZWdyZXNzaW9uQ29lZmZzXSk7XG4gICAgZGZSZWdyQ29lZnMubmFtZSA9ICdSZWdyZXNzaW9uIENvZWZmaWNpZW50cyc7XG4gICAgcmV0dXJuIERHLlZpZXdlci5iYXJDaGFydChkZlJlZ3JDb2VmcywgeyB0aXRsZTogZGZSZWdyQ29lZnMubmFtZSwgc3BsaXQ6ICdmZWF0dXJlJyxcbiAgICAgICAgdmFsdWU6ICdyZWdyZXNzaW9uIGNvZWZmaWNpZW50JywgdmFsdWVBZ2dyVHlwZTogJ2F2ZycgfSk7XG59XG4vLyBTY29yZXMgU2NhdHRlciBQbG90XG5leHBvcnQgZnVuY3Rpb24gc2NvcmVzU2NhdHRlclBsb3Qoc2FtcGxlc05hbWVzLCB4U2NvcmVzLCB5U2NvcmVzKSB7XG4gICAgY29uc3Qgc2NvcmVzQ29sdW1ucyA9IFtzYW1wbGVzTmFtZXNdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgeFNjb3Jlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICB4U2NvcmVzW2ldLm5hbWUgPSBgeC5zY29yZS50JHtpICsgMX1gO1xuICAgICAgICBzY29yZXNDb2x1bW5zLnB1c2goeFNjb3Jlc1tpXSk7XG4gICAgfVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgeVNjb3Jlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICB5U2NvcmVzW2ldLm5hbWUgPSBgeS5zY29yZS51JHtpICsgMX1gO1xuICAgICAgICBzY29yZXNDb2x1bW5zLnB1c2goeVNjb3Jlc1tpXSk7XG4gICAgfVxuICAgIGNvbnN0IHNjb3JlcyA9IERHLkRhdGFGcmFtZS5mcm9tQ29sdW1ucyhzY29yZXNDb2x1bW5zKTtcbiAgICBzY29yZXMubmFtZSA9ICdTY29yZXMnO1xuICAgIC8vZ3Jvay5zaGVsbC5hZGRUYWJsZVZpZXcoc2NvcmVzKTtcbiAgICBjb25zdCBpbmRleCA9IHhTY29yZXMubGVuZ3RoID4gMSA/IDEgOiAwO1xuICAgIHJldHVybiBERy5WaWV3ZXIuc2NhdHRlclBsb3Qoc2NvcmVzLCB7IHRpdGxlOiBzY29yZXMubmFtZSxcbiAgICAgICAgeDogeFNjb3Jlc1swXS5uYW1lLFxuICAgICAgICB5OiB4U2NvcmVzW2luZGV4XS5uYW1lLFxuICAgICAgICBtYXJrZXJUeXBlOiAnY2lyY2xlJyxcbiAgICAgICAgbGFiZWxzOiBzYW1wbGVzTmFtZXMubmFtZSxcbiAgICB9KTtcbn1cbi8vIExvYWRpbmcgU2NhdHRlciBQbG90XG5leHBvcnQgZnVuY3Rpb24gbG9hZGluZ1NjYXR0ZXJQbG90KGZlYXR1cmVzLCB4TG9hZGluZ3MpIHtcbiAgICBjb25zdCBsb2FkaW5nQ29scyA9IFtdO1xuICAgIGNvbnN0IGxvYWRpbmdMYWJlbHMgPSBbXTtcbiAgICBmb3IgKGNvbnN0IGNvbCBvZiBmZWF0dXJlcylcbiAgICAgICAgbG9hZGluZ0xhYmVscy5wdXNoKGNvbC5uYW1lKTtcbiAgICBsb2FkaW5nQ29scy5wdXNoKERHLkNvbHVtbi5mcm9tU3RyaW5ncygnbGFiZWxzJywgbG9hZGluZ0xhYmVscykpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgeExvYWRpbmdzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHhMb2FkaW5nc1tpXS5uYW1lID0gYHgubG9hZGluZy5wJHtpICsgMX1gO1xuICAgICAgICBsb2FkaW5nQ29scy5wdXNoKHhMb2FkaW5nc1tpXSk7XG4gICAgfVxuICAgIGNvbnN0IGRmTG9hZGluZ3MgPSBERy5EYXRhRnJhbWUuZnJvbUNvbHVtbnMobG9hZGluZ0NvbHMpO1xuICAgIGRmTG9hZGluZ3MubmFtZSA9ICdMb2FkaW5ncyc7XG4gICAgcmV0dXJuIERHLlZpZXdlci5zY2F0dGVyUGxvdChkZkxvYWRpbmdzLCB7IHRpdGxlOiBkZkxvYWRpbmdzLm5hbWUsXG4gICAgICAgIHg6IHhMb2FkaW5nc1swXS5uYW1lLFxuICAgICAgICB5OiB4TG9hZGluZ3NbeExvYWRpbmdzLmxlbmd0aCAtIDFdLm5hbWUsXG4gICAgICAgIG1hcmtlclR5cGU6ICdjaXJjbGUnLFxuICAgICAgICBsYWJlbHM6ICdsYWJlbHMnLFxuICAgIH0pO1xufVxuLy8gQWRkIFBMUyB2aXN1YWxpemF0aW9uXG5leHBvcnQgZnVuY3Rpb24gYWRkUExTdmlzdWFsaXphdGlvbih0YWJsZSwgc2FtcGxlc05hbWVzLCBmZWF0dXJlcywgcHJlZGljdCwgcGxzT3V0cHV0KSB7XG4gICAgY29uc3QgdmlldyA9ICh0YWJsZS5pZCAhPT0gbnVsbCkgPyBncm9rLnNoZWxsLmdldFRhYmxlVmlldyh0YWJsZS5uYW1lKSA6IGdyb2suc2hlbGwuYWRkVGFibGVWaWV3KHRhYmxlKTtcbiAgICAvLyAxLiBQcmVkaWN0ZWQgdnMgUmVmZXJlbmNlIHNjYXR0ZXIgcGxvdFxuICAgIHZpZXcuYWRkVmlld2VyKHByZWRpY3RlZFZlcnN1c1JlZmVyZW5jZVNjYXR0ZXJQbG90KHNhbXBsZXNOYW1lcywgcHJlZGljdCwgcGxzT3V0cHV0WzBdKSk7XG4gICAgLy8gMi4gUmVncmVzc2lvbiBDb2VmZmljaWVudHMgQmFyIENoYXJ0XG4gICAgdmlldy5hZGRWaWV3ZXIocmVncmVzc2lvbkNvZWZmaWNpZW50c0JhckNoYXJ0KGZlYXR1cmVzLCBwbHNPdXRwdXRbMV0pKTtcbiAgICAvLyAzLiBMb2FkaW5nIFNjYXR0ZXIgUGxvdFxuICAgIHZpZXcuYWRkVmlld2VyKGxvYWRpbmdTY2F0dGVyUGxvdChmZWF0dXJlcywgcGxzT3V0cHV0WzRdKSk7XG4gICAgLy8gNC4gU2NvcmVzIFNjYXR0ZXIgUGxvdFxuICAgIHZpZXcuYWRkVmlld2VyKHNjb3Jlc1NjYXR0ZXJQbG90KHNhbXBsZXNOYW1lcywgcGxzT3V0cHV0WzJdLCBwbHNPdXRwdXRbM10pKTtcbn1cbi8vIEFkZCBvbmUtd2F5IEFOT1ZBIHJlc3VsdHNcbmV4cG9ydCBmdW5jdGlvbiBhZGRPbmVXYXlBbm92YVZpenVhbGl6YXRpb24odGFibGUsIGZhY3RvcnMsIHZhbHVlcywgYW5vdmEpIHtcbiAgICBjb25zdCB2aWV3ID0gZ3Jvay5zaGVsbC5nZXRUYWJsZVZpZXcodGFibGUubmFtZSk7XG4gICAgdmlldy5hZGRWaWV3ZXIoREcuVmlld2VyLmJveFBsb3QoREcuRGF0YUZyYW1lLmZyb21Db2x1bW5zKFtmYWN0b3JzLCB2YWx1ZXNdKSkpO1xuICAgIHZpZXcuYWRkVmlld2VyKERHLlZpZXdlci5ncmlkKGFub3ZhKSk7XG59XG4iLCJpbXBvcnQgeyBjcmVhdGVNdWx0aURpbVJlZFdvcmtlciB9IGZyb20gJy4vbXVsdGktZGltLXJlZC13b3JrZXItY3JlYXRvcic7XG5pbXBvcnQgeyBub3JtYWxpemUgfSBmcm9tICdAZGF0YWdyb2stbGlicmFyaWVzL3V0aWxzL3NyYy92ZWN0b3Itb3BlcmF0aW9ucyc7XG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0Tm9ybWFsaXplZEVtYmVkZGluZ3MoZGF0YUNvbHMsIG1ldGhvZE5hbWUsIGRpc3RhbmNlTWV0cmljcywgd2VpZ2h0cywgZGlzdGFuY2VBZ2dyZWdhdGlvbiwgb3B0aW9ucywgcHJvZ3Jlc3NGdW5jKSB7XG4gICAgbGV0IGRpbWVuc2lvbmFsaXR5UmVkdWNlUmVzID0gYXdhaXQgY3JlYXRlTXVsdGlEaW1SZWRXb3JrZXIoZGF0YUNvbHMsIGRpc3RhbmNlTWV0cmljcywgbWV0aG9kTmFtZSwgd2VpZ2h0cywgZGlzdGFuY2VBZ2dyZWdhdGlvbiwgb3B0aW9ucywgcHJvZ3Jlc3NGdW5jKTtcbiAgICBkaW1lbnNpb25hbGl0eVJlZHVjZVJlcyA9IGRpbWVuc2lvbmFsaXR5UmVkdWNlUmVzLm1hcCgoaXQpID0+IG5vcm1hbGl6ZShpdCkpO1xuICAgIHJldHVybiBkaW1lbnNpb25hbGl0eVJlZHVjZVJlcztcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaVpXMWlaV1JrYVc1bmN5MXpjR0ZqWlM1cWN5SXNJbk52ZFhKalpWSnZiM1FpT2lJaUxDSnpiM1Z5WTJWeklqcGJJbVZ0WW1Wa1pHbHVaM010YzNCaFkyVXVkSE1pWFN3aWJtRnRaWE1pT2x0ZExDSnRZWEJ3YVc1bmN5STZJa0ZCUlVFc1QwRkJUeXhGUVVGRExIVkNRVUYxUWl4RlFVRkRMRTFCUVUwc1owTkJRV2RETEVOQlFVTTdRVUZGZGtVc1QwRkJUeXhGUVVGRExGTkJRVk1zUlVGQlF5eE5RVUZOTEdsRVFVRnBSQ3hEUVVGRE8wRkJTVEZGTEUxQlFVMHNRMEZCUXl4TFFVRkxMRlZCUVZVc2RVSkJRWFZDTEVOQlF6TkRMRkZCUVhOQ0xFVkJRM1JDTEZWQlFTdENMRVZCUXk5Q0xHVkJRU3RDTEVWQlF5OUNMRTlCUVdsQ0xFVkJRMnBDTEcxQ1FVRTRReXhGUVVNNVF5eFBRVUZaTEVWQlFVVXNXVUZCYlVZN1NVRkZha2NzU1VGQlNTeDFRa0ZCZFVJc1IwRkRia0lzVFVGQlRTeDFRa0ZCZFVJc1EwRkRNMElzVVVGQlVTeEZRVUZGTEdWQlFXVXNSVUZCUlN4VlFVRlZMRVZCUVVVc1QwRkJUeXhGUVVGRkxHMUNRVUZ0UWl4RlFVRkZMRTlCUVU4c1JVRkJSU3haUVVGWkxFTkJRek5HTEVOQlFVTTdTVUZGVml4MVFrRkJkVUlzUjBGQlJ5eDFRa0ZCZFVJc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF5eEZRVUZGTEVWQlFVVXNSVUZCUlN4RFFVRkRMRk5CUVZNc1EwRkJReXhGUVVGRkxFTkJRVU1zUTBGQlF5eERRVUZETzBsQlF6ZEZMRTlCUVU4c2RVSkJRWFZDTEVOQlFVTTdRVUZEYWtNc1EwRkJReUlzSW5OdmRYSmpaWE5EYjI1MFpXNTBJanBiSW1sdGNHOXlkQ0I3VFdGMGNtbDRmU0JtY205dElDZEFaR0YwWVdkeWIyc3RiR2xpY21GeWFXVnpMM1YwYVd4ekwzTnlZeTkwZVhCbExXUmxZMnhoY21GMGFXOXVjeWM3WEc1cGJYQnZjblFnZTB0dWIzZHVUV1YwY21samMzMGdabkp2YlNBbkxpNHZkSGx3WldRdGJXVjBjbWxqY3ljN1hHNXBiWEJ2Y25RZ2UyTnlaV0YwWlUxMWJIUnBSR2x0VW1Wa1YyOXlhMlZ5ZlNCbWNtOXRJQ2N1TDIxMWJIUnBMV1JwYlMxeVpXUXRkMjl5YTJWeUxXTnlaV0YwYjNJbk8xeHVhVzF3YjNKMElIdEVhWE4wWVc1alpVRm5aM0psWjJGMGFXOXVUV1YwYUc5a2ZTQm1jbTl0SUNjdUxpOWthWE4wWVc1alpTMXRZWFJ5YVhndmRIbHdaWE1uTzF4dWFXMXdiM0owSUh0dWIzSnRZV3hwZW1WOUlHWnliMjBnSjBCa1lYUmhaM0p2YXkxc2FXSnlZWEpwWlhNdmRYUnBiSE12YzNKakwzWmxZM1J2Y2kxdmNHVnlZWFJwYjI1ekp6dGNibWx0Y0c5eWRDQjdSR2x0VW1Wa2RXTjBhVzl1VFdWMGFHOWtjMzBnWm5KdmJTQW5MaTkwZVhCbGN5YzdYRzVjYmx4dVpYaHdiM0owSUdGemVXNWpJR1oxYm1OMGFXOXVJR2RsZEU1dmNtMWhiR2w2WldSRmJXSmxaR1JwYm1kektGeHVJQ0JrWVhSaFEyOXNjem9nUVhKeVlYazhZVzU1VzEwK0xGeHVJQ0J0WlhSb2IyUk9ZVzFsT2lCRWFXMVNaV1IxWTNScGIyNU5aWFJvYjJSekxGeHVJQ0JrYVhOMFlXNWpaVTFsZEhKcFkzTTZJRXR1YjNkdVRXVjBjbWxqYzF0ZExGeHVJQ0IzWldsbmFIUnpPaUJ1ZFcxaVpYSmJYU3hjYmlBZ1pHbHpkR0Z1WTJWQloyZHlaV2RoZEdsdmJqb2dSR2x6ZEdGdVkyVkJaMmR5WldkaGRHbHZiazFsZEdodlpDeGNiaUFnYjNCMGFXOXVjem9nWVc1NUxDQndjbTluY21WemMwWjFibU0vT2lBb1pYQnZZMmc2SUc1MWJXSmxjaXdnWlhCdlkyaHpUR1Z1WjNSb09pQnVkVzFpWlhJc0lHVnRZbVZrWkdsdVp6b2diblZ0WW1WeVcxMWJYU2tnUFQ0Z2RtOXBaRnh1S1RvZ1VISnZiV2x6WlR4TllYUnlhWGcrSUh0Y2JpQWdiR1YwSUdScGJXVnVjMmx2Ym1Gc2FYUjVVbVZrZFdObFVtVnpPaUJOWVhSeWFYZ2dQVnh1SUNBZ0lDQWdJQ0FnSUdGM1lXbDBJR055WldGMFpVMTFiSFJwUkdsdFVtVmtWMjl5YTJWeUtGeHVJQ0FnSUNBZ0lDQWdJQ0FnWkdGMFlVTnZiSE1zSUdScGMzUmhibU5sVFdWMGNtbGpjeXdnYldWMGFHOWtUbUZ0WlN3Z2QyVnBaMmgwY3l3Z1pHbHpkR0Z1WTJWQloyZHlaV2RoZEdsdmJpd2diM0IwYVc5dWN5d2djSEp2WjNKbGMzTkdkVzVqWEc0Z0lDQWdJQ0FnSUNBZ0tUdGNibHh1SUNCa2FXMWxibk5wYjI1aGJHbDBlVkpsWkhWalpWSmxjeUE5SUdScGJXVnVjMmx2Ym1Gc2FYUjVVbVZrZFdObFVtVnpMbTFoY0Nnb2FYUXBJRDArSUc1dmNtMWhiR2w2WlNocGRDa3BPMXh1SUNCeVpYUjFjbTRnWkdsdFpXNXphVzl1WVd4cGRIbFNaV1IxWTJWU1pYTTdYRzU5WEc1Y2JpSmRmUT09IiwiaW1wb3J0ICogYXMgZ3JvayBmcm9tICdkYXRhZ3Jvay1hcGkvZ3Jvayc7XG5pbXBvcnQgeyBESU1FTlNJT05BTElUWV9SRURVQ0VSX1RFUk1JTkFURV9FVkVOVCB9IGZyb20gJy4vY29uc3RzJztcbmltcG9ydCB7IGlzTmlsIH0gZnJvbSAnLi4vZGlzdGFuY2UtbWF0cml4L3V0aWxzJztcbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjcmVhdGVNdWx0aURpbVJlZFdvcmtlcihkYXRhLCBtZXRyaWNzLCBtZXRob2QsIHdlaWdodHMsIGFnZ3JlZ2F0aW9uTWV0aG9kLCBvcHRpb25zLCBwcm9ncmVzc0Z1bmMpIHtcbiAgICBpZiAoIW9wdGlvbnMuZGlzdGFuY2VGbkFyZ3MpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignb3B0aW9ucy5kaXN0YW5jZUZuQXJncyBtdXN0IGJlIGRlZmluZWQnKTtcbiAgICBpZiAoZGF0YS5sZW5ndGggIT09IG1ldHJpY3MubGVuZ3RoIHx8IGRhdGEubGVuZ3RoICE9PSBvcHRpb25zLmRpc3RhbmNlRm5BcmdzLmxlbmd0aCB8fCBkYXRhLmxlbmd0aCAhPT0gd2VpZ2h0cy5sZW5ndGgpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignZGF0YSwgbWV0cmljcyBhbmQgb3B0aW9ucyBhbmQgd2VpZ2h0cyBtdXN0IGhhdmUgdGhlIHNhbWUgbGVuZ3RoJyk7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgY29uc3Qgd29ya2VyID0gbmV3IFdvcmtlcihuZXcgVVJMKCcuL211bGl0LWNvbHVtbi1kaW0tcmVkdWNlci13b3JrZXInLCBpbXBvcnQubWV0YS51cmwpKTtcbiAgICAgICAgd29ya2VyLnBvc3RNZXNzYWdlKHtcbiAgICAgICAgICAgIGNvbHVtbnNEYXRhOiBkYXRhLFxuICAgICAgICAgICAgZGlzdGFuY2VNZXRyaWNzOiBtZXRyaWNzLFxuICAgICAgICAgICAgbWV0aG9kOiBtZXRob2QsXG4gICAgICAgICAgICBvcHRpb25zOiBvcHRpb25zLFxuICAgICAgICAgICAgd2VpZ2h0czogd2VpZ2h0cyxcbiAgICAgICAgICAgIGFnZ3JlZ2F0aW9uTWV0aG9kOiBhZ2dyZWdhdGlvbk1ldGhvZCxcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IHRlcm1pbmF0ZVN1YiA9IGdyb2suZXZlbnRzLm9uQ3VzdG9tRXZlbnQoRElNRU5TSU9OQUxJVFlfUkVEVUNFUl9URVJNSU5BVEVfRVZFTlQpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHdvcmtlcj8udGVybWluYXRlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICB0ZXJtaW5hdGVTdWIudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHdvcmtlci5vbm1lc3NhZ2UgPSAoeyBkYXRhOiB7IGVycm9yLCBlbWJlZGRpbmcsIGVwb2NoTnVtLCBlcG9jaHNMZW5ndGggfSB9KSA9PiB7XG4gICAgICAgICAgICBpZiAoIWlzTmlsKGVwb2NoTnVtKSAmJiAhaXNOaWwoZXBvY2hzTGVuZ3RoKSkge1xuICAgICAgICAgICAgICAgIHByb2dyZXNzRnVuYyAmJiBwcm9ncmVzc0Z1bmMoZXBvY2hOdW0sIGVwb2Noc0xlbmd0aCwgZW1iZWRkaW5nKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0ZXJtaW5hdGVTdWIudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIGlmIChlcnJvcilcbiAgICAgICAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIHJlc29sdmUoZW1iZWRkaW5nKTtcbiAgICAgICAgICAgIC8vIHRlcm1pbmF0ZSB0aGUgd29ya2VyIGFmdGVyIHNvbWUgdGltZS4gaW1taWRpYXRlIHRlcm1pbmF0aW9uIGNhdXNlcyBjcmFzaGVzLlxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB3b3JrZXIudGVybWluYXRlKCksIDEwMCk7XG4gICAgICAgIH07XG4gICAgfSk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2liWFZzZEdrdFpHbHRMWEpsWkMxM2IzSnJaWEl0WTNKbFlYUnZjaTVxY3lJc0luTnZkWEpqWlZKdmIzUWlPaUlpTENKemIzVnlZMlZ6SWpwYkltMTFiSFJwTFdScGJTMXlaV1F0ZDI5eWEyVnlMV055WldGMGIzSXVkSE1pWFN3aWJtRnRaWE1pT2x0ZExDSnRZWEJ3YVc1bmN5STZJa0ZCUTBFc1QwRkJUeXhMUVVGTExFbEJRVWtzVFVGQlRTeHRRa0ZCYlVJc1EwRkJRenRCUVVNeFF5eFBRVUZQTEVWQlFVTXNjME5CUVhORExFVkJRVU1zVFVGQlRTeFZRVUZWTEVOQlFVTTdRVUZKYUVVc1QwRkJUeXhGUVVGRExFdEJRVXNzUlVGQlF5eE5RVUZOTERCQ1FVRXdRaXhEUVVGRE8wRkJSUzlETEUxQlFVMHNRMEZCUXl4TFFVRkxMRlZCUVZVc2RVSkJRWFZDTEVOQlFVTXNTVUZCYTBJc1JVRkJSU3hQUVVGMVFpeEZRVUZGTEUxQlFUSkNMRVZCUTNCSUxFOUJRV2xDTEVWQlFVVXNhVUpCUVRSRExFVkJReTlFTEU5QlFWa3NSVUZCUlN4WlFVRnRSanRKUVVWcVJ5eEpRVUZKTEVOQlFVTXNUMEZCVHl4RFFVRkRMR05CUVdNN1VVRkRla0lzVFVGQlRTeEpRVUZKTEV0QlFVc3NRMEZCUXl4M1EwRkJkME1zUTBGQlF5eERRVUZETzBsQlF6VkVMRWxCUVVrc1NVRkJTU3hEUVVGRExFMUJRVTBzUzBGQlN5eFBRVUZQTEVOQlFVTXNUVUZCVFN4SlFVRkpMRWxCUVVrc1EwRkJReXhOUVVGTkxFdEJRVXNzVDBGQlR5eERRVUZETEdOQlFXTXNRMEZCUXl4TlFVRk5MRWxCUVVrc1NVRkJTU3hEUVVGRExFMUJRVTBzUzBGQlN5eFBRVUZQTEVOQlFVTXNUVUZCVFR0UlFVTnVTQ3hOUVVGTkxFbEJRVWtzUzBGQlN5eERRVUZETEdsRlFVRnBSU3hEUVVGRExFTkJRVU03U1VGRGNrWXNUMEZCVHl4SlFVRkpMRTlCUVU4c1EwRkJReXhWUVVGVExFOUJRVThzUlVGQlJTeE5RVUZOTzFGQlEzcERMRTFCUVUwc1RVRkJUU3hIUVVGSExFbEJRVWtzVFVGQlRTeERRVUZETEVsQlFVa3NSMEZCUnl4RFFVRkRMRzFEUVVGdFF5eEZRVUZGTEUxQlFVMHNRMEZCUXl4SlFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU1zUTBGQlF6dFJRVU42Uml4TlFVRk5MRU5CUVVNc1YwRkJWeXhEUVVGRE8xbEJRMnBDTEZkQlFWY3NSVUZCUlN4SlFVRkpPMWxCUTJwQ0xHVkJRV1VzUlVGQlJTeFBRVUZQTzFsQlEzaENMRTFCUVUwc1JVRkJSU3hOUVVGTk8xbEJRMlFzVDBGQlR5eEZRVUZGTEU5QlFVODdXVUZEYUVJc1QwRkJUeXhGUVVGRkxFOUJRVTg3V1VGRGFFSXNhVUpCUVdsQ0xFVkJRVVVzYVVKQlFXbENPMU5CUTNKRExFTkJRVU1zUTBGQlF6dFJRVU5JTEUxQlFVMHNXVUZCV1N4SFFVRkhMRWxCUVVrc1EwRkJReXhOUVVGTkxFTkJRVU1zWVVGQllTeERRVUZETEhORFFVRnpReXhEUVVGRExFTkJRVU1zVTBGQlV5eERRVUZETEVkQlFVY3NSVUZCUlR0WlFVTndSeXhKUVVGSk8yZENRVU5HTEUxQlFVMHNSVUZCUlN4VFFVRlRMRVZCUVVVc1EwRkJRenRoUVVOeVFqdHZRa0ZCVXp0blFrRkRVaXhaUVVGWkxFTkJRVU1zVjBGQlZ5eEZRVUZGTEVOQlFVTTdZVUZETlVJN1VVRkRTQ3hEUVVGRExFTkJRVU1zUTBGQlF6dFJRVU5JTEUxQlFVMHNRMEZCUXl4VFFVRlRMRWRCUVVjc1EwRkJReXhGUVVGRExFbEJRVWtzUlVGQlJTeEZRVUZETEV0QlFVc3NSVUZCUlN4VFFVRlRMRVZCUVVVc1VVRkJVU3hGUVVGRkxGbEJRVmtzUlVGQlF5eEZRVUZETEVWQlFVVXNSVUZCUlR0WlFVTjRSU3hKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEZGQlFWRXNRMEZCUXl4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExGbEJRVmtzUTBGQlF5eEZRVUZGTzJkQ1FVTTFReXhaUVVGWkxFbEJRVWtzV1VGQldTeERRVUZETEZGQlFWRXNSVUZCUlN4WlFVRlpMRVZCUVVVc1UwRkJVeXhEUVVGRExFTkJRVU03WjBKQlEyaEZMRTlCUVU4N1lVRkRVanRaUVVORUxGbEJRVmtzUTBGQlF5eFhRVUZYTEVWQlFVVXNRMEZCUXp0WlFVTXpRaXhKUVVGSkxFdEJRVXM3WjBKQlExQXNUVUZCVFN4RFFVRkRMRXRCUVVzc1EwRkJReXhEUVVGRE96dG5Ra0ZGWkN4UFFVRlBMRU5CUVVNc1UwRkJVeXhEUVVGRExFTkJRVU03V1VGRGNrSXNPRVZCUVRoRk8xbEJRemxGTEZWQlFWVXNRMEZCUXl4SFFVRkhMRVZCUVVVc1EwRkJReXhOUVVGTkxFTkJRVU1zVTBGQlV5eEZRVUZGTEVWQlFVVXNSMEZCUnl4RFFVRkRMRU5CUVVNN1VVRkROVU1zUTBGQlF5eERRVUZETzBsQlEwb3NRMEZCUXl4RFFVRkRMRU5CUVVNN1FVRkRUQ3hEUVVGRElpd2ljMjkxY21ObGMwTnZiblJsYm5RaU9sc2lhVzF3YjNKMElIdExibTkzYmsxbGRISnBZM045SUdaeWIyMGdKeTR1TDNSNWNHVmtMVzFsZEhKcFkzTXZkSGx3WldRdGJXVjBjbWxqY3ljN1hHNXBiWEJ2Y25RZ0tpQmhjeUJuY205cklHWnliMjBnSjJSaGRHRm5jbTlyTFdGd2FTOW5jbTlySnp0Y2JtbHRjRzl5ZENCN1JFbE5SVTVUU1U5T1FVeEpWRmxmVWtWRVZVTkZVbDlVUlZKTlNVNUJWRVZmUlZaRlRsUjlJR1p5YjIwZ0p5NHZZMjl1YzNSekp6dGNibWx0Y0c5eWRDQjdUV0YwY21sNGZTQm1jbTl0SUNkQVpHRjBZV2R5YjJzdGJHbGljbUZ5YVdWekwzVjBhV3h6TDNOeVl5OTBlWEJsTFdSbFkyeGhjbUYwYVc5dWN5YzdYRzVwYlhCdmNuUWdlMFJwYlZKbFpIVmpkR2x2YmsxbGRHaHZaSE45SUdaeWIyMGdKeTR2ZEhsd1pYTW5PMXh1YVcxd2IzSjBJSHRFYVhOMFlXNWpaVUZuWjNKbFoyRjBhVzl1VFdWMGFHOWtmU0JtY205dElDY3VMaTlrYVhOMFlXNWpaUzF0WVhSeWFYZ3ZkSGx3WlhNbk8xeHVhVzF3YjNKMElIdHBjMDVwYkgwZ1puSnZiU0FuTGk0dlpHbHpkR0Z1WTJVdGJXRjBjbWw0TDNWMGFXeHpKenRjYmx4dVpYaHdiM0owSUdGemVXNWpJR1oxYm1OMGFXOXVJR055WldGMFpVMTFiSFJwUkdsdFVtVmtWMjl5YTJWeUtHUmhkR0U2SUVGeWNtRjVQR0Z1ZVZ0ZFBpd2diV1YwY21samN6b2dTMjV2ZDI1TlpYUnlhV056VzEwc0lHMWxkR2h2WkRvZ1JHbHRVbVZrZFdOMGFXOXVUV1YwYUc5a2N5eGNiaUFnZDJWcFoyaDBjem9nYm5WdFltVnlXMTBzSUdGblozSmxaMkYwYVc5dVRXVjBhRzlrT2lCRWFYTjBZVzVqWlVGblozSmxaMkYwYVc5dVRXVjBhRzlrTEZ4dUlDQnZjSFJwYjI1ek9pQmhibmtzSUhCeWIyZHlaWE56Um5WdVl6ODZJQ2hsY0c5amFEb2diblZ0WW1WeUxDQmxjRzlqYUhOTVpXNW5kR2c2SUc1MWJXSmxjaXdnWlcxaVpXUmthVzVuT2lCdWRXMWlaWEpiWFZ0ZEtTQTlQaUIyYjJsa1hHNHBPaUJRY205dGFYTmxQRTFoZEhKcGVENGdlMXh1SUNCcFppQW9JVzl3ZEdsdmJuTXVaR2x6ZEdGdVkyVkdia0Z5WjNNcFhHNGdJQ0FnZEdoeWIzY2dibVYzSUVWeWNtOXlLQ2R2Y0hScGIyNXpMbVJwYzNSaGJtTmxSbTVCY21keklHMTFjM1FnWW1VZ1pHVm1hVzVsWkNjcE8xeHVJQ0JwWmlBb1pHRjBZUzVzWlc1bmRHZ2dJVDA5SUcxbGRISnBZM011YkdWdVozUm9JSHg4SUdSaGRHRXViR1Z1WjNSb0lDRTlQU0J2Y0hScGIyNXpMbVJwYzNSaGJtTmxSbTVCY21kekxteGxibWQwYUNCOGZDQmtZWFJoTG14bGJtZDBhQ0FoUFQwZ2QyVnBaMmgwY3k1c1pXNW5kR2dwWEc0Z0lDQWdkR2h5YjNjZ2JtVjNJRVZ5Y205eUtDZGtZWFJoTENCdFpYUnlhV056SUdGdVpDQnZjSFJwYjI1eklHRnVaQ0IzWldsbmFIUnpJRzExYzNRZ2FHRjJaU0IwYUdVZ2MyRnRaU0JzWlc1bmRHZ25LVHRjYmlBZ2NtVjBkWEp1SUc1bGR5QlFjbTl0YVhObEtHWjFibU4wYVc5dUtISmxjMjlzZG1Vc0lISmxhbVZqZENrZ2UxeHVJQ0FnSUdOdmJuTjBJSGR2Y210bGNpQTlJRzVsZHlCWGIzSnJaWElvYm1WM0lGVlNUQ2duTGk5dGRXeHBkQzFqYjJ4MWJXNHRaR2x0TFhKbFpIVmpaWEl0ZDI5eWEyVnlKeXdnYVcxd2IzSjBMbTFsZEdFdWRYSnNLU2s3WEc0Z0lDQWdkMjl5YTJWeUxuQnZjM1JOWlhOellXZGxLSHRjYmlBZ0lDQWdJR052YkhWdGJuTkVZWFJoT2lCa1lYUmhMRnh1SUNBZ0lDQWdaR2x6ZEdGdVkyVk5aWFJ5YVdOek9pQnRaWFJ5YVdOekxGeHVJQ0FnSUNBZ2JXVjBhRzlrT2lCdFpYUm9iMlFzWEc0Z0lDQWdJQ0J2Y0hScGIyNXpPaUJ2Y0hScGIyNXpMRnh1SUNBZ0lDQWdkMlZwWjJoMGN6b2dkMlZwWjJoMGN5eGNiaUFnSUNBZ0lHRm5aM0psWjJGMGFXOXVUV1YwYUc5a09pQmhaMmR5WldkaGRHbHZiazFsZEdodlpDeGNiaUFnSUNCOUtUdGNiaUFnSUNCamIyNXpkQ0IwWlhKdGFXNWhkR1ZUZFdJZ1BTQm5jbTlyTG1WMlpXNTBjeTV2YmtOMWMzUnZiVVYyWlc1MEtFUkpUVVZPVTBsUFRrRk1TVlJaWDFKRlJGVkRSVkpmVkVWU1RVbE9RVlJGWDBWV1JVNVVLUzV6ZFdKelkzSnBZbVVvS0NrZ1BUNGdlMXh1SUNBZ0lDQWdkSEo1SUh0Y2JpQWdJQ0FnSUNBZ2QyOXlhMlZ5UHk1MFpYSnRhVzVoZEdVb0tUdGNiaUFnSUNBZ0lIMGdabWx1WVd4c2VTQjdYRzRnSUNBZ0lDQWdJSFJsY20xcGJtRjBaVk4xWWk1MWJuTjFZbk5qY21saVpTZ3BPMXh1SUNBZ0lDQWdmVnh1SUNBZ0lIMHBPMXh1SUNBZ0lIZHZjbXRsY2k1dmJtMWxjM05oWjJVZ1BTQW9lMlJoZEdFNklIdGxjbkp2Y2l3Z1pXMWlaV1JrYVc1bkxDQmxjRzlqYUU1MWJTd2daWEJ2WTJoelRHVnVaM1JvZlgwcElEMCtJSHRjYmlBZ0lDQWdJR2xtSUNnaGFYTk9hV3dvWlhCdlkyaE9kVzBwSUNZbUlDRnBjMDVwYkNobGNHOWphSE5NWlc1bmRHZ3BLU0I3WEc0Z0lDQWdJQ0FnSUhCeWIyZHlaWE56Um5WdVl5QW1KaUJ3Y205bmNtVnpjMFoxYm1Nb1pYQnZZMmhPZFcwc0lHVndiMk5vYzB4bGJtZDBhQ3dnWlcxaVpXUmthVzVuS1R0Y2JpQWdJQ0FnSUNBZ2NtVjBkWEp1TzF4dUlDQWdJQ0FnZlZ4dUlDQWdJQ0FnZEdWeWJXbHVZWFJsVTNWaUxuVnVjM1ZpYzJOeWFXSmxLQ2s3WEc0Z0lDQWdJQ0JwWmlBb1pYSnliM0lwWEc0Z0lDQWdJQ0FnSUhKbGFtVmpkQ2hsY25KdmNpazdYRzRnSUNBZ0lDQmxiSE5sWEc0Z0lDQWdJQ0FnSUhKbGMyOXNkbVVvWlcxaVpXUmthVzVuS1R0Y2JpQWdJQ0FnSUM4dklIUmxjbTFwYm1GMFpTQjBhR1VnZDI5eWEyVnlJR0ZtZEdWeUlITnZiV1VnZEdsdFpTNGdhVzF0YVdScFlYUmxJSFJsY20xcGJtRjBhVzl1SUdOaGRYTmxjeUJqY21GemFHVnpMbHh1SUNBZ0lDQWdjMlYwVkdsdFpXOTFkQ2dvS1NBOVBpQjNiM0pyWlhJdWRHVnliV2x1WVhSbEtDa3NJREV3TUNrN1hHNGdJQ0FnZlR0Y2JpQWdmU2s3WEc1OVhHNGlYWDA9IiwiaW1wb3J0IHsgVmVjdG9yIH0gZnJvbSAnLi90eXBlLWRlY2xhcmF0aW9ucyc7XG5pbXBvcnQgeyByYW5kb21GbG9hdCwgcmFuZG9tSW50IH0gZnJvbSAnLi9yYW5kb20nO1xuLyoqXG4gKiBBc3NlcnRzIGEgY29uZGl0aW9uIGJ5IHRocm93aW5nIGFuIEVycm9yLlxuICpcbiAqIEBleHBvcnRcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2NvbmRpdGlvbj1mYWxzZV0gQ29uZGl0aW9uIHRvIGFzc2VydC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBbbWVzc2FnZT0nQXNzZXJ0aW9uIGVycm9yLiddIE1lc3NhZ2UgdG8gb3V0cHV0LlxuICogQHRocm93cyB7RXJyb3J9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhc3NlcnQoY29uZGl0aW9uID0gZmFsc2UsIG1lc3NhZ2UgPSAnQXNzZXJ0aW9uIGVycm9yLicpIHtcbiAgICBpZiAoIWNvbmRpdGlvbilcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKG1lc3NhZ2UpO1xufVxuLyoqXG4gKiBDcmVhdGVzIG5ldyB0d28tZGltZW5zaW9uYWwgYXJyYXkgYW5kIGZpbGxzIGl0IHdpdGggdGhlIHZhbHVlIGdpdmVuLlxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSBkaW1lbnNpb24xIFRoZSBmaXJzdCBkaW1lbnNpb24gb2YgdGhlIGNvb3JkaW5hdGVzIChudW1iZXIgb2Ygcm93cykuXG4gKiBAcGFyYW0ge251bWJlcn0gZGltZW5zaW9uMiBUaGUgc2Vjb25kIGRpbWVuc2lvbiBvZiB0aGUgY29vcmRpbmF0ZXMgKG51bWJlciBvZiBjb2x1bW5zKS5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbZmlsbD0wXSBBIHZhbHVlIHRvIGZpbGwgdGhlIGNvb3JkaW5hdGVzIHdpdGguXG4gKiBAcmV0dXJuIHtDb29yZGluYXRlc30gQSB0d28tZGltZW5zaW9uYWwgZmlsbGVkIHdpdGggdGhlIHZhbHVlIGdpdmVuLlxuICogQHRvZG8gTWlnaHQgYmUgc2xvdyBzaW5jZSB1c2VkIEFycmF5Lm1hcC4gUHJvYmFibHkgbmVlZHMgcGVyZm9ybWFuY2UgcmV2aXNpb24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpbml0Q29vcmRpbmF0ZXMoZGltZW5zaW9uMSwgZGltZW5zaW9uMiwgZmlsbCA9IDApIHtcbiAgICByZXR1cm4gbmV3IEFycmF5KGRpbWVuc2lvbjEpLmZpbGwoZmlsbCkubWFwKCgpID0+IChuZXcgVmVjdG9yKGRpbWVuc2lvbjIpLmZpbGwoZmlsbCkpKTtcbn1cbi8qKlxuICogVHJhbnNwb3NlIG1hdHJpeC5cbiAqXG4gKiBAZXhwb3J0XG4gKiBAcGFyYW0ge01hdHJpeH0gbWF0cml4IFRoZSBtYXRyaXggdG8gYmUgdHJhbnNwb3NlZC5cbiAqIEByZXR1cm4ge01hdHJpeH0gVHJhbnNwb3NlZCBtYXRyaXguXG4gKiBAdG9kbyBNaWdodCBiZSBzbG93IHNpbmNlIHVzZWQgQXJyYXkubWFwLiBQcm9iYWJseSBuZWVkcyBwZXJmb3JtYW5jZSByZXZpc2lvbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRyYW5zcG9zZU1hdHJpeChtYXRyaXgpIHtcbiAgICByZXR1cm4gbmV3IEFycmF5KG1hdHJpeFswXS5sZW5ndGgpLmZpbGwoMClcbiAgICAgICAgLm1hcCgoXywgaSkgPT4gKG5ldyBWZWN0b3IobWF0cml4Lmxlbmd0aCkuZmlsbCgwKS5tYXAoKF8sIGopID0+IChtYXRyaXhbal1baV0pKSkpO1xufVxuLyoqXG4gKiBBZGRzIHR3byB2ZWN0b3JzIHdpdGggdGhlIHNlY29uZCBvbmUgdG8gYmUgbXVsdGlwbGllZCBieSB0aGUgZ2l2ZW4gcmF0aW8uXG4gKlxuICogQGV4cG9ydFxuICogQHBhcmFtIHtWZWN0b3J9IHAgVGhlIGZpcnN0IHZlY3RvciB0byBhZGQuXG4gKiBAcGFyYW0ge1ZlY3Rvcn0gcSBUaGUgc2Vjb25kIHZlY3RvciB0byBhZGQuXG4gKiBAcGFyYW0ge251bWJlcn0gW211bHRpcGxpZXI9MV0gQSBtdWx0aXBsaWVyIHRvIGJlIHVzZWQgYmVmb3JlIHRoZSBzZWNvbmQgdmVjdG9yIGlzIGFkZGVkLlxuICogQHJldHVybiB7VmVjdG9yfSBOZXcgdmVjdG9yIGNvbnRhaW5lZCB0aGUgcmVzdWx0IG9mIG9wZXJhdGlvbiBwK211bHRpcGxpZXIqcS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZlY3RvckFkZChwLCBxLCBtdWx0aXBsaWVyID0gMSkge1xuICAgIGNvbnN0IG5JdGVtcyA9IHAubGVuZ3RoO1xuICAgIGFzc2VydChuSXRlbXMgPT0gcS5sZW5ndGgsICdWZWN0b3IgbGVuZ3RocyBkbyBub3QgbWF0Y2guJyk7XG4gICAgY29uc3QgdG90YWwgPSBuZXcgVmVjdG9yKG5JdGVtcyk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwLmxlbmd0aDsgKytpKVxuICAgICAgICB0b3RhbFtpXSA9IHBbaV0gKyBtdWx0aXBsaWVyICogcVtpXTtcbiAgICByZXR1cm4gdG90YWw7XG59XG4vKipcbiAqIFN1bXMgdGhlIHZlY3RvcidzIGl0ZW1zLlxuICpcbiAqIEBwYXJhbSB7VmVjdG9yfSB2IFRoZSB2ZWN0b3IgdG8gYmUgc3VtbWVkLlxuICogQHJldHVybiB7bnVtYmVyfSBUaGUgdmVjdG9yJ3MgaXRlbXMgc3VtLlxuICovXG5mdW5jdGlvbiBpdGVtc1N1bSh2KSB7XG4gICAgbGV0IHRvdGFsID0gMDtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHYubGVuZ3RoOyArK2kpXG4gICAgICAgIHRvdGFsICs9IHZbaV07XG4gICAgcmV0dXJuIHRvdGFsO1xufVxuLyoqXG4gKiBTdXFhcmVzIHRoZSB2ZWN0b3IncyBpdGVtcy5cbiAqXG4gKiBAcGFyYW0ge1ZlY3Rvcn0gdiBUaGUgdmVjdG9yIHRvIHNxdWFyZS5cbiAqIEByZXR1cm4ge1ZlY3Rvcn0gQSBuZXcgdmVjdG9yIGNvbnRhaW5pbmcgdGhlIG9yaWdpbmFsJ3MgaXRlbXMgc3F1YXJlZC5cbiAqL1xuZnVuY3Rpb24gdmVjdG9yU3F1YXJlKHYpIHtcbiAgICBjb25zdCBuSXRlbXMgPSB2Lmxlbmd0aDtcbiAgICBjb25zdCB0b3RhbCA9IG5ldyBWZWN0b3Iobkl0ZW1zKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHYubGVuZ3RoOyArK2kpXG4gICAgICAgIHRvdGFsW2ldID0gdltpXSAqIHZbaV07XG4gICAgcmV0dXJuIHRvdGFsO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHZlY3Rvckxlbmd0aCh2KSB7XG4gICAgbGV0IHNxclN1bSA9IDA7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB2Lmxlbmd0aDsgaSsrKVxuICAgICAgICBzcXJTdW0gKz0gdltpXSAqIHZbaV07XG4gICAgcmV0dXJuIE1hdGguc3FydChzcXJTdW0pO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHZlY3RvckRvdFByb2R1Y3QodjEsIHYyKSB7XG4gICAgaWYgKHYxLmxlbmd0aCAhPSB2Mi5sZW5ndGgpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIGRpbWVuc2lvbmFsaXR5IG9mIHRoZSB2ZWN0b3JzIG11c3QgbWF0Y2gnKTtcbiAgICBsZXQgcHJvZCA9IDA7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB2MS5sZW5ndGg7IGkrKylcbiAgICAgICAgcHJvZCArPSB2MVtpXSAqIHYyW2ldO1xuICAgIHJldHVybiBwcm9kO1xufVxuLyoqXG4gKiBDcmVhdGVzIGEgbWF0cml4IGZpbGxlZCB3aXRoIHJhbmRvbSBmbG9hdGluZyBwb2ludCB2YWx1ZXMuXG4gKlxuICogQGV4cG9ydFxuICogQHBhcmFtIHtudW1iZXJ9IGRpbWVuc2lvbjEgVGhlIGZpcnN0IGRpbWVuc2lvbiBvZiB0aGUgbWF0cml4LlxuICogQHBhcmFtIHtudW1iZXJ9IGRpbWVuc2lvbjIgVGhlIHNlY29uZCBkaW1lbnNpb24gb2YgdGhlIG1hdHJpeC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbc2NhbGU9MS5dIE1heCB2YWx1ZSBnaXZlbiBieSByYW5kb20gZ2VuZXJhdG9yLlxuICogQHJldHVybiB7TWF0cml4fSBBIG5ldyBtYXRyaXggZmlsbGVkIHdpdGggcmFuZG9tIGZsb2F0aW5nIHBvaW50ICB2YWx1ZXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmaWxsUmFuZG9tTWF0cml4KGRpbWVuc2lvbjEsIGRpbWVuc2lvbjIsIHNjYWxlID0gMS4pIHtcbiAgICBjb25zdCBtYXRyaXggPSBpbml0Q29vcmRpbmF0ZXMoZGltZW5zaW9uMSwgZGltZW5zaW9uMik7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkaW1lbnNpb24xOyArK2kpIHtcbiAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBkaW1lbnNpb24yOyArK2opXG4gICAgICAgICAgICBtYXRyaXhbaV1bal0gPSByYW5kb21GbG9hdChzY2FsZSk7XG4gICAgfVxuICAgIHJldHVybiBtYXRyaXg7XG59XG4vKipcbiAqIENhbGN1bGF0ZXMgRXVjbGlkZWFuIGRpc3RhbmNlIGJldHdlZW4gdHdvIHZlY3RvcnMuXG4gKlxuICogQGV4cG9ydFxuICogQHBhcmFtIHtWZWN0b3J9IHAgVGhlIGZpcnN0IHZlY3Rvci5cbiAqIEBwYXJhbSB7VmVjdG9yfSBxIFRoZSBzZWNvbmQgdmVjdG9yLlxuICogQHJldHVybiB7bnVtYmVyfSBFdWNsaWRlYW4gZGlzdGFuY2UgYmV0d2VlbiB0aGUgZ2l2ZW4gdmVjdG9ycy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNhbGN1bGF0ZUV1Y2xpZGVhbkRpc3RhbmNlKHAsIHEpIHtcbiAgICBsZXQgcmVzdWx0ID0gMDtcbiAgICBjb25zdCBsZW4gPSBwLmxlbmd0aDtcbiAgICBpZiAobGVuICE9PSBxLmxlbmd0aClcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgZGltZW5zaW9uYWxpdHkgb2YgdGhlIHZlY3RvcnMgbXVzdCBtYXRjaCcpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuOyArK2kpXG4gICAgICAgIHJlc3VsdCArPSBNYXRoLnBvdygocFtpXSAtIHFbaV0pLCAyKTtcbiAgICByZXR1cm4gTWF0aC5zcXJ0KHJlc3VsdCk7XG59XG4vKipcbiAqIENyZWF0ZXMgYSBkaXN0YW5jZSBtYXRyaXggdXNpbmcgYSBjdXN0b20gZGlzdGFuY2UgZnVuY3Rpb24uXG4gKlxuICogQGV4cG9ydFxuICogQHBhcmFtIHtWZWN0b3JzfSBkYXRhIElucHV0IHZlY3RvcnMgdG8gY2FsY3VsYXRlIGRpc3RhbmNlcy5cbiAqIEBwYXJhbSB7RGlzdGFuY2VNZXRyaWN9IGRpc3RhbmNlIEN1c3RvbSBkaXN0YW5jZSBmdW5jdGlvbi5cbiAqIEByZXR1cm4ge01hdHJpeH0gQ2FsY3VsYXRlZCBjdXN0b20gZGlzdGFuY2UgbWF0cml4LlxuICovXG5leHBvcnQgZnVuY3Rpb24gY2FsY0Rpc3RhbmNlTWF0cml4KGRhdGEsIGRpc3RhbmNlKSB7XG4gICAgY29uc3Qgbkl0ZW1zID0gZGF0YS5sZW5ndGg7XG4gICAgY29uc3QgbWF0cml4ID0gaW5pdENvb3JkaW5hdGVzKG5JdGVtcywgbkl0ZW1zLCAwKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5JdGVtczsgKytpKSB7XG4gICAgICAgIGZvciAobGV0IGogPSBpICsgMTsgaiA8IG5JdGVtczsgKytqKSB7XG4gICAgICAgICAgICBjb25zdCBkID0gKGRhdGFbaV0gPT0gbnVsbCkgfHwgKGRhdGFbal0gPT0gbnVsbCkgPyAwIDogZGlzdGFuY2UoZGF0YVtpXSwgZGF0YVtqXSk7XG4gICAgICAgICAgICBtYXRyaXhbaV1bal0gPSBtYXRyaXhbal1baV0gPSBkO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBtYXRyaXg7XG59XG4vKipcbiAqIENyZWF0ZXMgYSBkaXN0YW5jZSBtYXRyaXggdXNpbmcgYSBjdXN0b20gZGlzdGFuY2UgZnVuY3Rpb24uXG4gKlxuICogQGV4cG9ydFxuICogQHBhcmFtIHtWZWN0b3JzfSBkYXRhIElucHV0IHZlY3RvcnMgdG8gY2FsY3VsYXRlIGRpc3RhbmNlcy5cbiAqIEBwYXJhbSB7RGlzdGFuY2VNZXRyaWN9IGRpc3RhbmNlIEN1c3RvbSBkaXN0YW5jZSBmdW5jdGlvbi5cbiAqIEByZXR1cm4ge01hdHJpeH0gQ2FsY3VsYXRlZCBjdXN0b20gZGlzdGFuY2UgbWF0cml4LlxuICovXG5leHBvcnQgZnVuY3Rpb24gY2FsY05vcm1hbGl6ZWREaXN0YW5jZU1hdHJpeChkYXRhLCBkaXN0YW5jZSkge1xuICAgIGNvbnN0IG5JdGVtcyA9IGRhdGEubGVuZ3RoO1xuICAgIGNvbnN0IG1hdHJpeCA9IGluaXRDb29yZGluYXRlcyhuSXRlbXMsIG5JdGVtcywgMCk7XG4gICAgbGV0IG1heCA9IE51bWJlci5NSU5fVkFMVUU7XG4gICAgbGV0IG1pbiA9IE51bWJlci5NQVhfVkFMVUU7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBuSXRlbXM7ICsraSkge1xuICAgICAgICBmb3IgKGxldCBqID0gaTsgaiA8IG5JdGVtczsgKytqKSB7XG4gICAgICAgICAgICBjb25zdCBkID0gKGRhdGFbaV0gPT0gbnVsbCkgfHwgKGRhdGFbal0gPT0gbnVsbCB8fCBpID09PSBqKSA/IDAgOiBkaXN0YW5jZShkYXRhW2ldLCBkYXRhW2pdKTtcbiAgICAgICAgICAgIG1hdHJpeFtpXVtqXSA9IG1hdHJpeFtqXVtpXSA9IGQ7XG4gICAgICAgICAgICBpZiAoZCA+IG1heClcbiAgICAgICAgICAgICAgICBtYXggPSBkO1xuICAgICAgICAgICAgaWYgKGQgPCBtaW4pXG4gICAgICAgICAgICAgICAgbWluID0gZDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5JdGVtczsgKytpKSB7XG4gICAgICAgIGZvciAobGV0IGogPSBpICsgMTsgaiA8IG5JdGVtczsgKytqKVxuICAgICAgICAgICAgbWF0cml4W2ldW2pdID0gbWF0cml4W2pdW2ldID0gKG1hdHJpeFtpXVtqXSAtIG1pbikgLyAobWF4IC0gbWluKTtcbiAgICB9XG4gICAgcmV0dXJuIG1hdHJpeDtcbn1cbi8qKiBHZW5lcmF0ZXMgYXJyYXkgZnJvbSBhIHJhbmdlIFtiZWdpbjsgZW5kXSBvciBbYmVnaW47IGVuZCkgaWYgZW5kRXhjbHVzaXZlLiAqKi9cbmV4cG9ydCBmdW5jdGlvbiBnZW5SYW5nZShiZWdpbiwgZW5kLCBlbmRFeGNsdXNpdmUgPSBmYWxzZSkge1xuICAgIGNvbnN0IG5JdGVtcyA9IGVuZCAtIGJlZ2luICsgKGVuZEV4Y2x1c2l2ZSA/IDAgOiAxKTtcbiAgICBjb25zdCBzZXJpZXMgPSBuZXcgSW50MzJBcnJheShuSXRlbXMpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbkl0ZW1zOyArK2kpXG4gICAgICAgIHNlcmllc1tpXSA9IGJlZ2luICsgaTtcbiAgICByZXR1cm4gc2VyaWVzO1xufVxuLyoqXG4gKiBSZXR1cm5zIG9yZGVyIG9mIHZhbHVlcyBhcyBpZiB0aGV5IGFyZSBzb3J0ZWQuXG4gKlxuICogQGV4cG9ydFxuICogQHBhcmFtIHthbnlbXX0gdmFsdWVzIElucHV0IGFycmF5LlxuICogQHBhcmFtIHtib29sZWFufSBbcmV2ZXJzZT1mYWxzZV0gV2hldGhlciB0byByZXR1cm4gcmV2ZXJzZWQgb3JkZXIuXG4gKiBAcmV0dXJuIHtudW1iZXJbXX0gVGhlIG9yZGVyIGNvbXB1dGVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYXJnU29ydCh2YWx1ZXMsIHJldmVyc2UgPSBmYWxzZSkge1xuICAgIGNvbnN0IHNvcnRmbiA9IHJldmVyc2UgPyAoYSwgYikgPT4gKGJbMF0gLSBhWzBdKSA6IChhLCBiKSA9PiAoYVswXSAtIGJbMF0pO1xuICAgIGNvbnN0IGRlY29yID0gKHYsIGkpID0+IFt2LCBpXTsgLy8gc2V0IGluZGV4IHRvIHZhbHVlXG4gICAgY29uc3QgdW5kZWNvciA9IChhKSA9PiBhWzFdOyAvLyBsZWF2ZSBvbmx5IGluZGV4XG4gICAgY29uc3QgX2FyZ3NvcnQgPSAoYXJyKSA9PiBhcnIubWFwKGRlY29yKS5zb3J0KHNvcnRmbikubWFwKHVuZGVjb3IpO1xuICAgIHJldHVybiBfYXJnc29ydCh2YWx1ZXMpO1xufVxuLyoqXG4gKiBSZXR1cm5zIHRoZSBpbmRleGVzIG9mIHRoZSBtb3N0IGRpdmVyc2Ugb2JqZWN0cyBhY2NvcmRpbmcgdG8gdGhlIGRpc3QgZnVuY3Rpb25cbiAqIEBwYXJhbSB7bnVtYmVyfSBsZW5ndGggdG90YWwgbnVtYmVyIG9mIG9iamVjdHNcbiAqIEBwYXJhbSB7bnVtYmVyfSBuIG51bWJlciBvZiBkaXZlcnNlIGVsZW1lbnRzIHRvIGZpbmRcbiAqIEBwYXJhbSB7KGkxOiBudW1iZXIsIGkyOiBudW1iZXIpID0+IG51bWJlcn0gZGlzdCBhIGZ1bmN0aW9uIHdoaWNoIGNhbGN1bGF0ZXMgZGlzdGFuY2UgYmV0d2VlblxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR3byBvYmplY3RzIHVzaW5nIHRoZWlyIGluZGV4ZXNcbiAqIEByZXR1cm5zIHtudW1iZXJbXX0gVGhlIGluZGV4ZXMgb2YgdGhlIG1vc3QgZGl2ZXJzZSBvYmplY3RzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXREaXZlcnNlU3Vic2V0KGxlbmd0aCwgbiwgZGlzdCkge1xuICAgIGZ1bmN0aW9uIG1heEJ5KHZhbHVlcywgb3JkZXJCeSkge1xuICAgICAgICBsZXQgbWF4VmFsdWUgPSBudWxsO1xuICAgICAgICBsZXQgbWF4T3JkZXJCeSA9IG51bGw7XG4gICAgICAgIGZvciAoY29uc3QgZWxlbWVudCBvZiB2YWx1ZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRPcmRlckJ5ID0gb3JkZXJCeShlbGVtZW50KTtcbiAgICAgICAgICAgIGlmIChtYXhPcmRlckJ5ID09IG51bGwgfHwgZWxlbWVudE9yZGVyQnkgPiBtYXhPcmRlckJ5KSB7XG4gICAgICAgICAgICAgICAgbWF4VmFsdWUgPSBlbGVtZW50O1xuICAgICAgICAgICAgICAgIG1heE9yZGVyQnkgPSBlbGVtZW50T3JkZXJCeTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbWF4VmFsdWU7XG4gICAgfVxuICAgIGNvbnN0IHN1YnNldCA9IFtyYW5kb21JbnQobGVuZ3RoIC0gMSldO1xuICAgIGNvbnN0IGNvbXBsZW1lbnQgPSBuZXcgU2V0KCk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkge1xuICAgICAgICBpZiAoIXN1YnNldC5pbmNsdWRlcyhpKSlcbiAgICAgICAgICAgIGNvbXBsZW1lbnQuYWRkKGkpO1xuICAgIH1cbiAgICB3aGlsZSAoc3Vic2V0Lmxlbmd0aCA8IG4pIHtcbiAgICAgICAgY29uc3QgaWR4ID0gbWF4QnkoY29tcGxlbWVudC52YWx1ZXMoKSwgKGkpID0+IE1hdGgubWluLmFwcGx5KE1hdGgsIHN1YnNldC5tYXAoZnVuY3Rpb24gKHZhbCwgaW5kZXgpIHtcbiAgICAgICAgICAgIHJldHVybiBkaXN0KGksIHZhbCk7XG4gICAgICAgIH0pKSk7XG4gICAgICAgIGlmIChpZHgpIHtcbiAgICAgICAgICAgIHN1YnNldC5wdXNoKGlkeCk7XG4gICAgICAgICAgICBjb21wbGVtZW50LmRlbGV0ZShpZHgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBzdWJzZXQ7XG59XG4vKipcbiAqIFJldHVybnMgbm9ybWFsaXplZCB2ZWN0b3IuXG4gKlxuICogQGV4cG9ydFxuICogQHBhcmFtIHtWZWN0b3J9IGRhdGEgbnVtZXJpY2FsIGFycmF5XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBub3JtYWxpemUoZGF0YSkge1xuICAgIGNvbnN0IGxlbiA9IGRhdGEubGVuZ3RoO1xuICAgIGxldCBzdW0gPSAwO1xuICAgIGxldCBzdW1PZlNxdWFyZXMgPSAwO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuOyArK2kpIHtcbiAgICAgICAgc3VtICs9IGRhdGFbaV07XG4gICAgICAgIHN1bU9mU3F1YXJlcyArPSBNYXRoLnBvdyhkYXRhW2ldLCAyKTtcbiAgICB9XG4gICAgY29uc3QgbWVhbiA9IHN1bSAvIGxlbjtcbiAgICBjb25zdCBzdGREZXZJbnZlcnNlID0gMS4wIC8gTWF0aC5zcXJ0KHN1bU9mU3F1YXJlcyAvIGxlbiAtIE1hdGgucG93KG1lYW4sIDIpKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbjsgKytpKVxuICAgICAgICBkYXRhW2ldID0gKGRhdGFbaV0gLSBtZWFuKSAqIHN0ZERldkludmVyc2U7XG4gICAgcmV0dXJuIGRhdGE7XG59XG4vKipcbiAqIEZpbmRzIHNldCBkaWZmZXJlbmNlIGJldHdlZW4gdHdvIGxpc3RzLlxuICogQHBhcmFtIHthbnlbXX0gYSBUaGUgZmlyc3QgbGlzdC5cbiAqIEBwYXJhbSB7YW55W119IGIgVGhlIHNlY29uZCBsaXN0LlxuICogQHJldHVybiB7YW55W119XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXREaWZmZXJlbmNlKGEsIGIpIHtcbiAgICBjb25zdCBiU2V0ID0gbmV3IFNldChiKTtcbiAgICByZXR1cm4gQXJyYXkuZnJvbShuZXcgU2V0KGEuZmlsdGVyKCh4KSA9PiAhYlNldC5oYXMoeCkpKS52YWx1ZXMoKSk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2lkbVZqZEc5eUxXOXdaWEpoZEdsdmJuTXVhbk1pTENKemIzVnlZMlZTYjI5MElqb2lJaXdpYzI5MWNtTmxjeUk2V3lKMlpXTjBiM0l0YjNCbGNtRjBhVzl1Y3k1MGN5SmRMQ0p1WVcxbGN5STZXMTBzSW0xaGNIQnBibWR6SWpvaVFVRkJRU3hQUVVGUExFVkJRVk1zVFVGQlRTeEZRVUYxUXl4TlFVRk5MSEZDUVVGeFFpeERRVUZETzBGQlEzcEdMRTlCUVU4c1JVRkJReXhYUVVGWExFVkJRVVVzVTBGQlV5eEZRVUZETEUxQlFVMHNWVUZCVlN4RFFVRkRPMEZCUldoRU96czdPenM3TzBkQlQwYzdRVUZEU0N4TlFVRk5MRlZCUVZVc1RVRkJUU3hEUVVGRExGbEJRWEZDTEV0QlFVc3NSVUZCUlN4VlFVRnJRaXhyUWtGQmEwSTdTVUZEY2tZc1NVRkJTU3hEUVVGRExGTkJRVk03VVVGRFdpeE5RVUZOTEVsQlFVa3NTMEZCU3l4RFFVRkRMRTlCUVU4c1EwRkJReXhEUVVGRE8wRkJRemRDTEVOQlFVTTdRVUZGUkRzN096czdPenM3UjBGUlJ6dEJRVU5JTEUxQlFVMHNWVUZCVlN4bFFVRmxMRU5CUVVNc1ZVRkJhMElzUlVGQlJTeFZRVUZyUWl4RlFVRkZMRTlCUVdVc1EwRkJRenRKUVVOMFJpeFBRVUZQTEVsQlFVa3NTMEZCU3l4RFFVRkRMRlZCUVZVc1EwRkJReXhEUVVGRExFbEJRVWtzUTBGQlF5eEpRVUZKTEVOQlFVTXNRMEZCUXl4SFFVRkhMRU5CUVVNc1IwRkJSeXhGUVVGRkxFTkJRVU1zUTBGQlF5eEpRVUZKTEUxQlFVMHNRMEZCUXl4VlFVRlZMRU5CUVVNc1EwRkJReXhKUVVGSkxFTkJRVU1zU1VGQlNTeERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRPMEZCUTNwR0xFTkJRVU03UVVGRlJEczdPenM3T3p0SFFVOUhPMEZCUTBnc1RVRkJUU3hWUVVGVkxHVkJRV1VzUTBGQlF5eE5RVUZqTzBsQlF6VkRMRTlCUVU4c1NVRkJTU3hMUVVGTExFTkJRVU1zVFVGQlRTeERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRTFCUVUwc1EwRkJReXhEUVVGRExFbEJRVWtzUTBGQlF5eERRVUZETEVOQlFVTTdVMEZEZGtNc1IwRkJSeXhEUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RlFVRkZMRU5CUVVNc1EwRkJReXhKUVVGSkxFMUJRVTBzUTBGQlF5eE5RVUZOTEVOQlFVTXNUVUZCVFN4RFFVRkRMRU5CUVVNc1NVRkJTU3hEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUlVGQlJTeERRVUZETEVOQlFVTXNUVUZCVFN4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN1FVRkRkRVlzUTBGQlF6dEJRVVZFT3pzN096czdPenRIUVZGSE8wRkJRMGdzVFVGQlRTeFZRVUZWTEZOQlFWTXNRMEZCUXl4RFFVRlRMRVZCUVVVc1EwRkJVeXhGUVVGRkxHRkJRWEZDTEVOQlFVTTdTVUZEY0VVc1RVRkJUU3hOUVVGTkxFZEJRVWNzUTBGQlF5eERRVUZETEUxQlFVMHNRMEZCUXp0SlFVVjRRaXhOUVVGTkxFTkJRVU1zVFVGQlRTeEpRVUZKTEVOQlFVTXNRMEZCUXl4TlFVRk5MRVZCUVVVc09FSkJRVGhDTEVOQlFVTXNRMEZCUXp0SlFVVXpSQ3hOUVVGTkxFdEJRVXNzUjBGQlJ5eEpRVUZKTEUxQlFVMHNRMEZCUXl4TlFVRk5MRU5CUVVNc1EwRkJRenRKUVVWcVF5eExRVUZMTEVsQlFVa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1JVRkJSU3hEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETEUxQlFVMHNSVUZCUlN4RlFVRkZMRU5CUVVNN1VVRkRMMElzUzBGQlN5eERRVUZETEVOQlFVTXNRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUjBGQlJ5eFZRVUZWTEVkQlFVY3NRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE8wbEJSWFJETEU5QlFVOHNTMEZCU3l4RFFVRkRPMEZCUTJZc1EwRkJRenRCUVVWRU96czdPenRIUVV0SE8wRkJRMGdzVTBGQlV5eFJRVUZSTEVOQlFVTXNRMEZCVXp0SlFVTjZRaXhKUVVGSkxFdEJRVXNzUjBGQlJ5eERRVUZETEVOQlFVTTdTVUZGWkN4TFFVRkxMRWxCUVVrc1EwRkJReXhIUVVGSExFTkJRVU1zUlVGQlJTeERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRMRTFCUVUwc1JVRkJSU3hGUVVGRkxFTkJRVU03VVVGREwwSXNTMEZCU3l4SlFVRkpMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF6dEpRVVZvUWl4UFFVRlBMRXRCUVVzc1EwRkJRenRCUVVObUxFTkJRVU03UVVGRlJEczdPenM3UjBGTFJ6dEJRVU5JTEZOQlFWTXNXVUZCV1N4RFFVRkRMRU5CUVZNN1NVRkROMElzVFVGQlRTeE5RVUZOTEVkQlFVY3NRMEZCUXl4RFFVRkRMRTFCUVUwc1EwRkJRenRKUVVONFFpeE5RVUZOTEV0QlFVc3NSMEZCUnl4SlFVRkpMRTFCUVUwc1EwRkJReXhOUVVGTkxFTkJRVU1zUTBGQlF6dEpRVVZxUXl4TFFVRkxMRWxCUVVrc1EwRkJReXhIUVVGSExFTkJRVU1zUlVGQlJTeERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRMRTFCUVUwc1JVRkJSU3hGUVVGRkxFTkJRVU03VVVGREwwSXNTMEZCU3l4RFFVRkRMRU5CUVVNc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU03U1VGRmVrSXNUMEZCVHl4TFFVRkxMRU5CUVVNN1FVRkRaaXhEUVVGRE8wRkJSVVFzVFVGQlRTeFZRVUZWTEZsQlFWa3NRMEZCUXl4RFFVRlRPMGxCUTNCRExFbEJRVWtzVFVGQlRTeEhRVUZYTEVOQlFVTXNRMEZCUXp0SlFVTjJRaXhMUVVGTExFbEJRVWtzUTBGQlF5eEhRVUZYTEVOQlFVTXNSVUZCUlN4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRExFMUJRVTBzUlVGQlJTeERRVUZETEVWQlFVVTdVVUZEZGtNc1RVRkJUU3hKUVVGSkxFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU03U1VGRGVFSXNUMEZCVHl4SlFVRkpMRU5CUVVNc1NVRkJTU3hEUVVGRExFMUJRVTBzUTBGQlF5eERRVUZETzBGQlF6TkNMRU5CUVVNN1FVRkZSQ3hOUVVGTkxGVkJRVlVzWjBKQlFXZENMRU5CUVVNc1JVRkJWU3hGUVVGRkxFVkJRVlU3U1VGRGNrUXNTVUZCU1N4RlFVRkZMRU5CUVVNc1RVRkJUU3hKUVVGSkxFVkJRVVVzUTBGQlF5eE5RVUZOTzFGQlEzaENMRTFCUVUwc1NVRkJTU3hMUVVGTExFTkJRVU1zT0VOQlFUaERMRU5CUVVNc1EwRkJRenRKUVVOc1JTeEpRVUZKTEVsQlFVa3NSMEZCVnl4RFFVRkRMRU5CUVVNN1NVRkRja0lzUzBGQlN5eEpRVUZKTEVOQlFVTXNSMEZCVnl4RFFVRkRMRVZCUVVVc1EwRkJReXhIUVVGSExFVkJRVVVzUTBGQlF5eE5RVUZOTEVWQlFVVXNRMEZCUXl4RlFVRkZPMUZCUTNoRExFbEJRVWtzU1VGQlNTeEZRVUZGTEVOQlFVTXNRMEZCUXl4RFFVRkRMRWRCUVVjc1JVRkJSU3hEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETzBsQlEzaENMRTlCUVU4c1NVRkJTU3hEUVVGRE8wRkJRMlFzUTBGQlF6dEJRVVZFT3pzN096czdPenRIUVZGSE8wRkJRMGdzVFVGQlRTeFZRVUZWTEdkQ1FVRm5RaXhEUVVGRExGVkJRV3RDTEVWQlFVVXNWVUZCYTBJc1JVRkJSU3hSUVVGblFpeEZRVUZGTzBsQlEzcEdMRTFCUVUwc1RVRkJUU3hIUVVGSExHVkJRV1VzUTBGQlF5eFZRVUZWTEVWQlFVVXNWVUZCVlN4RFFVRkRMRU5CUVVNN1NVRkZka1FzUzBGQlN5eEpRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRVZCUVVVc1EwRkJReXhIUVVGSExGVkJRVlVzUlVGQlJTeEZRVUZGTEVOQlFVTXNSVUZCUlR0UlFVTnVReXhMUVVGTExFbEJRVWtzUTBGQlF5eEhRVUZITEVOQlFVTXNSVUZCUlN4RFFVRkRMRWRCUVVjc1ZVRkJWU3hGUVVGRkxFVkJRVVVzUTBGQlF6dFpRVU5xUXl4TlFVRk5MRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVkQlFVY3NWMEZCVnl4RFFVRkRMRXRCUVVzc1EwRkJReXhEUVVGRE8wdEJRM0pETzBsQlEwUXNUMEZCVHl4TlFVRk5MRU5CUVVNN1FVRkRhRUlzUTBGQlF6dEJRVVZFT3pzN096czdPMGRCVDBjN1FVRkRTQ3hOUVVGTkxGVkJRVlVzTUVKQlFUQkNMRU5CUVVNc1EwRkJVeXhGUVVGRkxFTkJRVk03U1VGRE4wUXNTVUZCU1N4TlFVRk5MRWRCUVVjc1EwRkJReXhEUVVGRE8wbEJRMllzVFVGQlRTeEhRVUZITEVkQlFVY3NRMEZCUXl4RFFVRkRMRTFCUVUwc1EwRkJRenRKUVVWeVFpeEpRVUZKTEVkQlFVY3NTMEZCU3l4RFFVRkRMRU5CUVVNc1RVRkJUVHRSUVVOc1FpeE5RVUZOTEVsQlFVa3NTMEZCU3l4RFFVRkRMRGhEUVVFNFF5eERRVUZETEVOQlFVTTdTVUZGYkVVc1MwRkJTeXhKUVVGSkxFTkJRVU1zUjBGQlJ5eERRVUZETEVWQlFVVXNRMEZCUXl4SFFVRkhMRWRCUVVjc1JVRkJSU3hGUVVGRkxFTkJRVU03VVVGRE1VSXNUVUZCVFN4SlFVRkpMRk5CUVVFc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFVkJRVWtzUTBGQlF5eERRVUZCTEVOQlFVTTdTVUZGTDBJc1QwRkJUeXhKUVVGSkxFTkJRVU1zU1VGQlNTeERRVUZETEUxQlFVMHNRMEZCUXl4RFFVRkRPMEZCUXpOQ0xFTkJRVU03UVVGRlJEczdPenM3T3p0SFFVOUhPMEZCUTBnc1RVRkJUU3hWUVVGVkxHdENRVUZyUWl4RFFVRkRMRWxCUVdFc1JVRkJSU3hSUVVGM1FqdEpRVU40UlN4TlFVRk5MRTFCUVUwc1IwRkJSeXhKUVVGSkxFTkJRVU1zVFVGQlRTeERRVUZETzBsQlF6TkNMRTFCUVUwc1RVRkJUU3hIUVVGSExHVkJRV1VzUTBGQlF5eE5RVUZOTEVWQlFVVXNUVUZCVFN4RlFVRkZMRU5CUVVNc1EwRkJReXhEUVVGRE8wbEJSV3hFTEV0QlFVc3NTVUZCU1N4RFFVRkRMRWRCUVVjc1EwRkJReXhGUVVGRkxFTkJRVU1zUjBGQlJ5eE5RVUZOTEVWQlFVVXNSVUZCUlN4RFFVRkRMRVZCUVVVN1VVRkRMMElzUzBGQlN5eEpRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRWRCUVVjc1EwRkJReXhGUVVGRkxFTkJRVU1zUjBGQlJ5eE5RVUZOTEVWQlFVVXNSVUZCUlN4RFFVRkRMRVZCUVVVN1dVRkRia01zVFVGQlRTeERRVUZETEVkQlFWY3NRMEZCUXl4SlFVRkpMRU5CUVVNc1EwRkJReXhEUVVGRExFbEJRVWtzU1VGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4SlFVRkpMRU5CUVVNc1EwRkJReXhEUVVGRExFbEJRVWtzU1VGQlNTeERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zVVVGQlVTeERRVUZETEVsQlFVa3NRMEZCUXl4RFFVRkRMRU5CUVVNc1JVRkJSU3hKUVVGSkxFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXp0WlFVTXhSaXhOUVVGTkxFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRWRCUVVjc1RVRkJUU3hEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJRenRUUVVOcVF6dExRVU5HTzBsQlEwUXNUMEZCVHl4TlFVRk5MRU5CUVVNN1FVRkRhRUlzUTBGQlF6dEJRVVZFT3pzN096czdPMGRCVDBjN1FVRkRTQ3hOUVVGTkxGVkJRVlVzTkVKQlFUUkNMRU5CUVVNc1NVRkJZU3hGUVVGRkxGRkJRWGRDTzBsQlEyeEdMRTFCUVUwc1RVRkJUU3hIUVVGSExFbEJRVWtzUTBGQlF5eE5RVUZOTEVOQlFVTTdTVUZETTBJc1RVRkJUU3hOUVVGTkxFZEJRVWNzWlVGQlpTeERRVUZETEUxQlFVMHNSVUZCUlN4TlFVRk5MRVZCUVVVc1EwRkJReXhEUVVGRExFTkJRVU03U1VGRGJFUXNTVUZCU1N4SFFVRkhMRWRCUVVjc1RVRkJUU3hEUVVGRExGTkJRVk1zUTBGQlF6dEpRVU16UWl4SlFVRkpMRWRCUVVjc1IwRkJSeXhOUVVGTkxFTkJRVU1zVTBGQlV5eERRVUZETzBsQlF6TkNMRXRCUVVzc1NVRkJTU3hEUVVGRExFZEJRVWNzUTBGQlF5eEZRVUZGTEVOQlFVTXNSMEZCUnl4TlFVRk5MRVZCUVVVc1JVRkJSU3hEUVVGRExFVkJRVVU3VVVGREwwSXNTMEZCU3l4SlFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExFVkJRVVVzUTBGQlF5eEhRVUZITEUxQlFVMHNSVUZCUlN4RlFVRkZMRU5CUVVNc1JVRkJSVHRaUVVNdlFpeE5RVUZOTEVOQlFVTXNSMEZCVnl4RFFVRkRMRWxCUVVrc1EwRkJReXhEUVVGRExFTkJRVU1zU1VGQlNTeEpRVUZKTEVOQlFVTXNTVUZCU1N4RFFVRkRMRWxCUVVrc1EwRkJReXhEUVVGRExFTkJRVU1zU1VGQlNTeEpRVUZKTEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRkZCUVZFc1EwRkJReXhKUVVGSkxFTkJRVU1zUTBGQlF5eERRVUZETEVWQlFVVXNTVUZCU1N4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU03V1VGRGNrY3NUVUZCVFN4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eEhRVUZITEUxQlFVMHNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTTdXVUZEYUVNc1NVRkJTU3hEUVVGRExFZEJRVWNzUjBGQlJ6dG5Ra0ZCUlN4SFFVRkhMRWRCUVVjc1EwRkJReXhEUVVGRE8xbEJRM0pDTEVsQlFVa3NRMEZCUXl4SFFVRkhMRWRCUVVjN1owSkJRVVVzUjBGQlJ5eEhRVUZITEVOQlFVTXNRMEZCUXp0VFFVTjBRanRMUVVOR08wbEJRMFFzUzBGQlN5eEpRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRVZCUVVVc1EwRkJReXhIUVVGSExFMUJRVTBzUlVGQlJTeEZRVUZGTEVOQlFVTXNSVUZCUlR0UlFVTXZRaXhMUVVGTExFbEJRVWtzUTBGQlF5eEhRVUZITEVOQlFVTXNSMEZCUnl4RFFVRkRMRVZCUVVVc1EwRkJReXhIUVVGSExFMUJRVTBzUlVGQlJTeEZRVUZGTEVOQlFVTTdXVUZEYWtNc1RVRkJUU3hEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4SFFVRkhMRTFCUVUwc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNSMEZCUnl4RFFVRkRMRTFCUVUwc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNSMEZCUnl4SFFVRkhMRU5CUVVNc1IwRkJSeXhEUVVGRExFZEJRVWNzUjBGQlJ5eEhRVUZITEVOQlFVTXNRMEZCUXp0TFFVTndSVHRKUVVORUxFOUJRVThzVFVGQlRTeERRVUZETzBGQlEyaENMRU5CUVVNN1FVRkZSQ3hyUmtGQmEwWTdRVUZEYkVZc1RVRkJUU3hWUVVGVkxGRkJRVkVzUTBGQlF5eExRVUZoTEVWQlFVVXNSMEZCVnl4RlFVRkZMRmxCUVZrc1IwRkJSeXhMUVVGTE8wbEJRM1pGTEUxQlFVMHNUVUZCVFN4SFFVRkhMRWRCUVVjc1IwRkJSeXhMUVVGTExFZEJRVWNzUTBGQlF5eFpRVUZaTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdTVUZEY0VRc1RVRkJUU3hOUVVGTkxFZEJRVWNzU1VGQlNTeFZRVUZWTEVOQlFVTXNUVUZCVFN4RFFVRkRMRU5CUVVNN1NVRkZkRU1zUzBGQlN5eEpRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRVZCUVVVc1EwRkJReXhIUVVGSExFMUJRVTBzUlVGQlJTeEZRVUZGTEVOQlFVTTdVVUZETjBJc1RVRkJUU3hEUVVGRExFTkJRVU1zUTBGQlF5eEhRVUZITEV0QlFVc3NSMEZCUnl4RFFVRkRMRU5CUVVNN1NVRkZlRUlzVDBGQlR5eE5RVUZOTEVOQlFVTTdRVUZEYUVJc1EwRkJRenRCUVVWRU96czdPenM3TzBkQlQwYzdRVUZEU0N4TlFVRk5MRlZCUVZVc1QwRkJUeXhEUVVGRExFMUJRV0VzUlVGQlJTeFBRVUZQTEVkQlFVY3NTMEZCU3p0SlFVTndSQ3hOUVVGTkxFMUJRVTBzUjBGQlJ5eFBRVUZQTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJVU3hGUVVGRkxFTkJRVkVzUlVGQlJTeEZRVUZGTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlVTeEZRVUZGTEVOQlFWRXNSVUZCUlN4RlFVRkZMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU03U1VGRGRrY3NUVUZCVFN4TFFVRkxMRWRCUVVjc1EwRkJReXhEUVVGTkxFVkJRVVVzUTBGQlV5eEZRVUZGTEVWQlFVVXNRMEZCUXl4RFFVRkRMRU5CUVVNc1JVRkJSU3hEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEhGQ1FVRnhRanRKUVVOc1JTeE5RVUZOTEU5QlFVOHNSMEZCUnl4RFFVRkRMRU5CUVZFc1JVRkJSU3hGUVVGRkxFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc2JVSkJRVzFDTzBsQlEzWkVMRTFCUVUwc1VVRkJVU3hIUVVGSExFTkJRVU1zUjBGQlZTeEZRVUZGTEVWQlFVVXNRMEZCUXl4SFFVRkhMRU5CUVVNc1IwRkJSeXhEUVVGRExFdEJRVXNzUTBGQlF5eERRVUZETEVsQlFVa3NRMEZCUXl4TlFVRk5MRU5CUVVNc1EwRkJReXhIUVVGSExFTkJRVU1zVDBGQlR5eERRVUZETEVOQlFVTTdTVUZETVVVc1QwRkJUeXhSUVVGUkxFTkJRVU1zVFVGQlRTeERRVUZETEVOQlFVTTdRVUZETVVJc1EwRkJRenRCUVVWRU96czdPenM3TzBkQlQwYzdRVUZEU0N4TlFVRk5MRlZCUVZVc1owSkJRV2RDTEVOQlFVTXNUVUZCWXl4RlFVRkZMRU5CUVZNc1JVRkJSU3hKUVVGM1F6dEpRVU5zUnl4VFFVRlRMRXRCUVVzc1EwRkJReXhOUVVGblF5eEZRVUZGTEU5QlFUaENPMUZCUXpkRkxFbEJRVWtzVVVGQlVTeEhRVUZITEVsQlFVa3NRMEZCUXp0UlFVTndRaXhKUVVGSkxGVkJRVlVzUjBGQlJ5eEpRVUZKTEVOQlFVTTdVVUZGZEVJc1MwRkJTeXhOUVVGTkxFOUJRVThzU1VGQlNTeE5RVUZOTEVWQlFVVTdXVUZETlVJc1RVRkJUU3hqUVVGakxFZEJRVWNzVDBGQlR5eERRVUZETEU5QlFVOHNRMEZCUXl4RFFVRkRPMWxCUTNoRExFbEJRVWtzVlVGQlZTeEpRVUZKTEVsQlFVa3NTVUZCU1N4alFVRmpMRWRCUVVjc1ZVRkJWU3hGUVVGRk8yZENRVU55UkN4UlFVRlJMRWRCUVVjc1QwRkJUeXhEUVVGRE8yZENRVU51UWl4VlFVRlZMRWRCUVVjc1kwRkJZeXhEUVVGRE8yRkJRemRDTzFOQlEwWTdVVUZEUkN4UFFVRlBMRkZCUVZFc1EwRkJRenRKUVVOc1FpeERRVUZETzBsQlJVUXNUVUZCVFN4TlFVRk5MRWRCUVVjc1EwRkJReXhUUVVGVExFTkJRVU1zVFVGQlRTeEhRVUZITEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN1NVRkRka01zVFVGQlRTeFZRVUZWTEVkQlFVY3NTVUZCU1N4SFFVRkhMRVZCUVVVc1EwRkJRenRKUVVVM1FpeExRVUZMTEVsQlFVa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1JVRkJSU3hEUVVGRExFZEJRVWNzVFVGQlRTeEZRVUZGTEVWQlFVVXNRMEZCUXl4RlFVRkZPMUZCUXk5Q0xFbEJRVWtzUTBGQlF5eE5RVUZOTEVOQlFVTXNVVUZCVVN4RFFVRkRMRU5CUVVNc1EwRkJRenRaUVVOeVFpeFZRVUZWTEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE8wdEJRM0pDTzBsQlJVUXNUMEZCVHl4TlFVRk5MRU5CUVVNc1RVRkJUU3hIUVVGSExFTkJRVU1zUlVGQlJUdFJRVU40UWl4TlFVRk5MRWRCUVVjc1IwRkJSeXhMUVVGTExFTkJRMllzVlVGQlZTeERRVUZETEUxQlFVMHNSVUZCT0VJc1JVRkRMME1zUTBGQlF5eERRVUZETEVWQlFVVXNSVUZCUlN4RFFVRkRMRWxCUVVrc1EwRkJReXhIUVVGSExFTkJRVU1zUzBGQlN5eERRVUZETEVsQlFVa3NSVUZCUlN4TlFVRk5MRU5CUVVNc1IwRkJSeXhEUVVGRExGVkJRVk1zUjBGQlJ5eEZRVUZGTEV0QlFVczdXVUZEZUVRc1QwRkJUeXhKUVVGSkxFTkJRVU1zUTBGQlF5eEZRVUZGTEVkQlFVY3NRMEZCUXl4RFFVRkRPMUZCUTNSQ0xFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXp0UlFVTlFMRWxCUVVrc1IwRkJSeXhGUVVGRk8xbEJRMUFzVFVGQlRTeERRVUZETEVsQlFVa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJRenRaUVVOcVFpeFZRVUZWTEVOQlFVTXNUVUZCVFN4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRE8xTkJRM2hDTzB0QlEwWTdTVUZEUkN4UFFVRlBMRTFCUVUwc1EwRkJRenRCUVVOb1FpeERRVUZETzBGQlJVUTdPenM3TzBkQlMwYzdRVUZEU0N4TlFVRk5MRlZCUVZVc1UwRkJVeXhEUVVGRExFbEJRVms3U1VGRGNFTXNUVUZCVFN4SFFVRkhMRWRCUVVjc1NVRkJTU3hEUVVGRExFMUJRVTBzUTBGQlF6dEpRVU40UWl4SlFVRkpMRWRCUVVjc1IwRkJSeXhEUVVGRExFTkJRVU03U1VGRFdpeEpRVUZKTEZsQlFWa3NSMEZCUnl4RFFVRkRMRU5CUVVNN1NVRkZja0lzUzBGQlN5eEpRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRVZCUVVVc1EwRkJReXhIUVVGSExFZEJRVWNzUlVGQlJTeEZRVUZGTEVOQlFVTXNSVUZCUlR0UlFVTTFRaXhIUVVGSExFbEJRVWtzU1VGQlNTeERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRPMUZCUTJZc1dVRkJXU3hKUVVGSkxGTkJRVUVzU1VGQlNTeERRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkpMRU5CUVVNc1EwRkJRU3hEUVVGRE8wdEJRemxDTzBsQlJVUXNUVUZCVFN4SlFVRkpMRWRCUVVjc1IwRkJSeXhIUVVGSExFZEJRVWNzUTBGQlF6dEpRVU4yUWl4TlFVRk5MR0ZCUVdFc1IwRkJSeXhIUVVGSExFZEJRVWNzU1VGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4WlFVRlpMRWRCUVVjc1IwRkJSeXhIUVVGSExGTkJRVUVzU1VGQlNTeEZRVUZKTEVOQlFVTXNRMEZCUVN4RFFVRkRMRU5CUVVNN1NVRkZkRVVzUzBGQlN5eEpRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRVZCUVVVc1EwRkJReXhIUVVGSExFZEJRVWNzUlVGQlJTeEZRVUZGTEVOQlFVTTdVVUZETVVJc1NVRkJTU3hEUVVGRExFTkJRVU1zUTBGQlF5eEhRVUZITEVOQlFVTXNTVUZCU1N4RFFVRkRMRU5CUVVNc1EwRkJReXhIUVVGSExFbEJRVWtzUTBGQlF5eEhRVUZITEdGQlFXRXNRMEZCUXp0SlFVVTNReXhQUVVGUExFbEJRVWtzUTBGQlF6dEJRVU5rTEVOQlFVTTdRVUZGUkRzN096czdSMEZMUnp0QlFVTklMRTFCUVUwc1ZVRkJWU3hoUVVGaExFTkJRVU1zUTBGQlVTeEZRVUZGTEVOQlFWRTdTVUZET1VNc1RVRkJUU3hKUVVGSkxFZEJRVWNzU1VGQlNTeEhRVUZITEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN1NVRkRlRUlzVDBGQlR5eExRVUZMTEVOQlFVTXNTVUZCU1N4RFFVRkRMRWxCUVVrc1IwRkJSeXhEUVVGRExFTkJRVU1zUTBGQlF5eE5RVUZOTEVOQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVVc1JVRkJSU3hEUVVGRExFTkJRVU1zU1VGQlNTeERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zVFVGQlRTeEZRVUZGTEVOQlFVTXNRMEZCUXp0QlFVTnlSU3hEUVVGRElpd2ljMjkxY21ObGMwTnZiblJsYm5RaU9sc2lhVzF3YjNKMElIdE5ZWFJ5YVhnc0lGWmxZM1J2Y2l3Z1EyOXZjbVJwYm1GMFpYTXNJRlpsWTNSdmNuTXNJRVJwYzNSaGJtTmxUV1YwY21samZTQm1jbTl0SUNjdUwzUjVjR1V0WkdWamJHRnlZWFJwYjI1ekp6dGNibWx0Y0c5eWRDQjdjbUZ1Wkc5dFJteHZZWFFzSUhKaGJtUnZiVWx1ZEgwZ1puSnZiU0FuTGk5eVlXNWtiMjBuTzF4dVhHNHZLaXBjYmlBcUlFRnpjMlZ5ZEhNZ1lTQmpiMjVrYVhScGIyNGdZbmtnZEdoeWIzZHBibWNnWVc0Z1JYSnliM0l1WEc0Z0tseHVJQ29nUUdWNGNHOXlkRnh1SUNvZ1FIQmhjbUZ0SUh0aWIyOXNaV0Z1ZlNCYlkyOXVaR2wwYVc5dVBXWmhiSE5sWFNCRGIyNWthWFJwYjI0Z2RHOGdZWE56WlhKMExseHVJQ29nUUhCaGNtRnRJSHR6ZEhKcGJtZDlJRnR0WlhOellXZGxQU2RCYzNObGNuUnBiMjRnWlhKeWIzSXVKMTBnVFdWemMyRm5aU0IwYnlCdmRYUndkWFF1WEc0Z0tpQkFkR2h5YjNkeklIdEZjbkp2Y24xY2JpQXFMMXh1Wlhod2IzSjBJR1oxYm1OMGFXOXVJR0Z6YzJWeWRDaGpiMjVrYVhScGIyNDZJR0p2YjJ4bFlXNGdQU0JtWVd4elpTd2diV1Z6YzJGblpUb2djM1J5YVc1bklEMGdKMEZ6YzJWeWRHbHZiaUJsY25KdmNpNG5LU0I3WEc0Z0lHbG1JQ2doWTI5dVpHbDBhVzl1S1Z4dUlDQWdJSFJvY205M0lHNWxkeUJGY25KdmNpaHRaWE56WVdkbEtUdGNibjFjYmx4dUx5b3FYRzRnS2lCRGNtVmhkR1Z6SUc1bGR5QjBkMjh0WkdsdFpXNXphVzl1WVd3Z1lYSnlZWGtnWVc1a0lHWnBiR3h6SUdsMElIZHBkR2dnZEdobElIWmhiSFZsSUdkcGRtVnVMbHh1SUNwY2JpQXFJRUJ3WVhKaGJTQjdiblZ0WW1WeWZTQmthVzFsYm5OcGIyNHhJRlJvWlNCbWFYSnpkQ0JrYVcxbGJuTnBiMjRnYjJZZ2RHaGxJR052YjNKa2FXNWhkR1Z6SUNodWRXMWlaWElnYjJZZ2NtOTNjeWt1WEc0Z0tpQkFjR0Z5WVcwZ2UyNTFiV0psY24wZ1pHbHRaVzV6YVc5dU1pQlVhR1VnYzJWamIyNWtJR1JwYldWdWMybHZiaUJ2WmlCMGFHVWdZMjl2Y21ScGJtRjBaWE1nS0c1MWJXSmxjaUJ2WmlCamIyeDFiVzV6S1M1Y2JpQXFJRUJ3WVhKaGJTQjdiblZ0WW1WeWZTQmJabWxzYkQwd1hTQkJJSFpoYkhWbElIUnZJR1pwYkd3Z2RHaGxJR052YjNKa2FXNWhkR1Z6SUhkcGRHZ3VYRzRnS2lCQWNtVjBkWEp1SUh0RGIyOXlaR2x1WVhSbGMzMGdRU0IwZDI4dFpHbHRaVzV6YVc5dVlXd2dabWxzYkdWa0lIZHBkR2dnZEdobElIWmhiSFZsSUdkcGRtVnVMbHh1SUNvZ1FIUnZaRzhnVFdsbmFIUWdZbVVnYzJ4dmR5QnphVzVqWlNCMWMyVmtJRUZ5Y21GNUxtMWhjQzRnVUhKdlltRmliSGtnYm1WbFpITWdjR1Z5Wm05eWJXRnVZMlVnY21WMmFYTnBiMjR1WEc0Z0tpOWNibVY0Y0c5eWRDQm1kVzVqZEdsdmJpQnBibWwwUTI5dmNtUnBibUYwWlhNb1pHbHRaVzV6YVc5dU1Ub2diblZ0WW1WeUxDQmthVzFsYm5OcGIyNHlPaUJ1ZFcxaVpYSXNJR1pwYkd3NklHNTFiV0psY2lBOUlEQXBPaUJEYjI5eVpHbHVZWFJsY3lCN1hHNGdJSEpsZEhWeWJpQnVaWGNnUVhKeVlYa29aR2x0Wlc1emFXOXVNU2t1Wm1sc2JDaG1hV3hzS1M1dFlYQW9LQ2tnUFQ0Z0tHNWxkeUJXWldOMGIzSW9aR2x0Wlc1emFXOXVNaWt1Wm1sc2JDaG1hV3hzS1NrcE8xeHVmVnh1WEc0dktpcGNiaUFxSUZSeVlXNXpjRzl6WlNCdFlYUnlhWGd1WEc0Z0tseHVJQ29nUUdWNGNHOXlkRnh1SUNvZ1FIQmhjbUZ0SUh0TllYUnlhWGg5SUcxaGRISnBlQ0JVYUdVZ2JXRjBjbWw0SUhSdklHSmxJSFJ5WVc1emNHOXpaV1F1WEc0Z0tpQkFjbVYwZFhKdUlIdE5ZWFJ5YVhoOUlGUnlZVzV6Y0c5elpXUWdiV0YwY21sNExseHVJQ29nUUhSdlpHOGdUV2xuYUhRZ1ltVWdjMnh2ZHlCemFXNWpaU0IxYzJWa0lFRnljbUY1TG0xaGNDNGdVSEp2WW1GaWJIa2dibVZsWkhNZ2NHVnlabTl5YldGdVkyVWdjbVYyYVhOcGIyNHVYRzRnS2k5Y2JtVjRjRzl5ZENCbWRXNWpkR2x2YmlCMGNtRnVjM0J2YzJWTllYUnlhWGdvYldGMGNtbDRPaUJOWVhSeWFYZ3BPaUJOWVhSeWFYZ2dlMXh1SUNCeVpYUjFjbTRnYm1WM0lFRnljbUY1S0cxaGRISnBlRnN3WFM1c1pXNW5kR2dwTG1acGJHd29NQ2xjYmlBZ0lDQXViV0Z3S0NoZkxDQnBLU0E5UGlBb2JtVjNJRlpsWTNSdmNpaHRZWFJ5YVhndWJHVnVaM1JvS1M1bWFXeHNLREFwTG0xaGNDZ29YeXdnYWlrZ1BUNGdLRzFoZEhKcGVGdHFYVnRwWFNrcEtTazdYRzU5WEc1Y2JpOHFLbHh1SUNvZ1FXUmtjeUIwZDI4Z2RtVmpkRzl5Y3lCM2FYUm9JSFJvWlNCelpXTnZibVFnYjI1bElIUnZJR0psSUcxMWJIUnBjR3hwWldRZ1lua2dkR2hsSUdkcGRtVnVJSEpoZEdsdkxseHVJQ3BjYmlBcUlFQmxlSEJ2Y25SY2JpQXFJRUJ3WVhKaGJTQjdWbVZqZEc5eWZTQndJRlJvWlNCbWFYSnpkQ0IyWldOMGIzSWdkRzhnWVdSa0xseHVJQ29nUUhCaGNtRnRJSHRXWldOMGIzSjlJSEVnVkdobElITmxZMjl1WkNCMlpXTjBiM0lnZEc4Z1lXUmtMbHh1SUNvZ1FIQmhjbUZ0SUh0dWRXMWlaWEo5SUZ0dGRXeDBhWEJzYVdWeVBURmRJRUVnYlhWc2RHbHdiR2xsY2lCMGJ5QmlaU0IxYzJWa0lHSmxabTl5WlNCMGFHVWdjMlZqYjI1a0lIWmxZM1J2Y2lCcGN5QmhaR1JsWkM1Y2JpQXFJRUJ5WlhSMWNtNGdlMVpsWTNSdmNuMGdUbVYzSUhabFkzUnZjaUJqYjI1MFlXbHVaV1FnZEdobElISmxjM1ZzZENCdlppQnZjR1Z5WVhScGIyNGdjQ3R0ZFd4MGFYQnNhV1Z5S25FdVhHNGdLaTljYm1WNGNHOXlkQ0JtZFc1amRHbHZiaUIyWldOMGIzSkJaR1FvY0RvZ1ZtVmpkRzl5TENCeE9pQldaV04wYjNJc0lHMTFiSFJwY0d4cFpYSTZJRzUxYldKbGNpQTlJREVwT2lCV1pXTjBiM0lnZTF4dUlDQmpiMjV6ZENCdVNYUmxiWE1nUFNCd0xteGxibWQwYUR0Y2JseHVJQ0JoYzNObGNuUW9ia2wwWlcxeklEMDlJSEV1YkdWdVozUm9MQ0FuVm1WamRHOXlJR3hsYm1kMGFITWdaRzhnYm05MElHMWhkR05vTGljcE8xeHVYRzRnSUdOdmJuTjBJSFJ2ZEdGc0lEMGdibVYzSUZabFkzUnZjaWh1U1hSbGJYTXBPMXh1WEc0Z0lHWnZjaUFvYkdWMElHa2dQU0F3T3lCcElEd2djQzVzWlc1bmRHZzdJQ3NyYVNsY2JpQWdJQ0IwYjNSaGJGdHBYU0E5SUhCYmFWMGdLeUJ0ZFd4MGFYQnNhV1Z5SUNvZ2NWdHBYVHRjYmx4dUlDQnlaWFIxY200Z2RHOTBZV3c3WEc1OVhHNWNiaThxS2x4dUlDb2dVM1Z0Y3lCMGFHVWdkbVZqZEc5eUozTWdhWFJsYlhNdVhHNGdLbHh1SUNvZ1FIQmhjbUZ0SUh0V1pXTjBiM0o5SUhZZ1ZHaGxJSFpsWTNSdmNpQjBieUJpWlNCemRXMXRaV1F1WEc0Z0tpQkFjbVYwZFhKdUlIdHVkVzFpWlhKOUlGUm9aU0IyWldOMGIzSW5jeUJwZEdWdGN5QnpkVzB1WEc0Z0tpOWNibVoxYm1OMGFXOXVJR2wwWlcxelUzVnRLSFk2SUZabFkzUnZjaWs2SUc1MWJXSmxjaUI3WEc0Z0lHeGxkQ0IwYjNSaGJDQTlJREE3WEc1Y2JpQWdabTl5SUNoc1pYUWdhU0E5SURBN0lHa2dQQ0IyTG14bGJtZDBhRHNnS3l0cEtWeHVJQ0FnSUhSdmRHRnNJQ3M5SUhaYmFWMDdYRzVjYmlBZ2NtVjBkWEp1SUhSdmRHRnNPMXh1ZlZ4dVhHNHZLaXBjYmlBcUlGTjFjV0Z5WlhNZ2RHaGxJSFpsWTNSdmNpZHpJR2wwWlcxekxseHVJQ3BjYmlBcUlFQndZWEpoYlNCN1ZtVmpkRzl5ZlNCMklGUm9aU0IyWldOMGIzSWdkRzhnYzNGMVlYSmxMbHh1SUNvZ1FISmxkSFZ5YmlCN1ZtVmpkRzl5ZlNCQklHNWxkeUIyWldOMGIzSWdZMjl1ZEdGcGJtbHVaeUIwYUdVZ2IzSnBaMmx1WVd3bmN5QnBkR1Z0Y3lCemNYVmhjbVZrTGx4dUlDb3ZYRzVtZFc1amRHbHZiaUIyWldOMGIzSlRjWFZoY21Vb2Rqb2dWbVZqZEc5eUtUb2dWbVZqZEc5eUlIdGNiaUFnWTI5dWMzUWdia2wwWlcxeklEMGdkaTVzWlc1bmRHZzdYRzRnSUdOdmJuTjBJSFJ2ZEdGc0lEMGdibVYzSUZabFkzUnZjaWh1U1hSbGJYTXBPMXh1WEc0Z0lHWnZjaUFvYkdWMElHa2dQU0F3T3lCcElEd2dkaTVzWlc1bmRHZzdJQ3NyYVNsY2JpQWdJQ0IwYjNSaGJGdHBYU0E5SUhaYmFWMGdLaUIyVzJsZE8xeHVYRzRnSUhKbGRIVnliaUIwYjNSaGJEdGNibjFjYmx4dVpYaHdiM0owSUdaMWJtTjBhVzl1SUhabFkzUnZja3hsYm1kMGFDaDJPaUJXWldOMGIzSXBPaUJ1ZFcxaVpYSWdlMXh1SUNCc1pYUWdjM0Z5VTNWdE9pQnVkVzFpWlhJZ1BTQXdPMXh1SUNCbWIzSWdLR3hsZENCcE9pQnVkVzFpWlhJZ1BTQXdPeUJwSUR3Z2RpNXNaVzVuZEdnN0lHa3JLeWxjYmlBZ0lDQnpjWEpUZFcwZ0t6MGdkbHRwWFNBcUlIWmJhVjA3WEc0Z0lISmxkSFZ5YmlCTllYUm9Mbk54Y25Rb2MzRnlVM1Z0S1R0Y2JuMWNibHh1Wlhod2IzSjBJR1oxYm1OMGFXOXVJSFpsWTNSdmNrUnZkRkJ5YjJSMVkzUW9kakU2SUZabFkzUnZjaXdnZGpJNklGWmxZM1J2Y2lrNklHNTFiV0psY2lCN1hHNGdJR2xtSUNoMk1TNXNaVzVuZEdnZ0lUMGdkakl1YkdWdVozUm9LVnh1SUNBZ0lIUm9jbTkzSUc1bGR5QkZjbkp2Y2lnblZHaGxJR1JwYldWdWMybHZibUZzYVhSNUlHOW1JSFJvWlNCMlpXTjBiM0p6SUcxMWMzUWdiV0YwWTJnbktUdGNiaUFnYkdWMElIQnliMlE2SUc1MWJXSmxjaUE5SURBN1hHNGdJR1p2Y2lBb2JHVjBJR2s2SUc1MWJXSmxjaUE5SURBN0lHa2dQQ0IyTVM1c1pXNW5kR2c3SUdrckt5bGNiaUFnSUNCd2NtOWtJQ3M5SUhZeFcybGRJQ29nZGpKYmFWMDdYRzRnSUhKbGRIVnliaUJ3Y205a08xeHVmVnh1WEc0dktpcGNiaUFxSUVOeVpXRjBaWE1nWVNCdFlYUnlhWGdnWm1sc2JHVmtJSGRwZEdnZ2NtRnVaRzl0SUdac2IyRjBhVzVuSUhCdmFXNTBJSFpoYkhWbGN5NWNiaUFxWEc0Z0tpQkFaWGh3YjNKMFhHNGdLaUJBY0dGeVlXMGdlMjUxYldKbGNuMGdaR2x0Wlc1emFXOXVNU0JVYUdVZ1ptbHljM1FnWkdsdFpXNXphVzl1SUc5bUlIUm9aU0J0WVhSeWFYZ3VYRzRnS2lCQWNHRnlZVzBnZTI1MWJXSmxjbjBnWkdsdFpXNXphVzl1TWlCVWFHVWdjMlZqYjI1a0lHUnBiV1Z1YzJsdmJpQnZaaUIwYUdVZ2JXRjBjbWw0TGx4dUlDb2dRSEJoY21GdElIdHVkVzFpWlhKOUlGdHpZMkZzWlQweExsMGdUV0Y0SUhaaGJIVmxJR2RwZG1WdUlHSjVJSEpoYm1SdmJTQm5aVzVsY21GMGIzSXVYRzRnS2lCQWNtVjBkWEp1SUh0TllYUnlhWGg5SUVFZ2JtVjNJRzFoZEhKcGVDQm1hV3hzWldRZ2QybDBhQ0J5WVc1a2IyMGdabXh2WVhScGJtY2djRzlwYm5RZ0lIWmhiSFZsY3k1Y2JpQXFMMXh1Wlhod2IzSjBJR1oxYm1OMGFXOXVJR1pwYkd4U1lXNWtiMjFOWVhSeWFYZ29aR2x0Wlc1emFXOXVNVG9nYm5WdFltVnlMQ0JrYVcxbGJuTnBiMjR5T2lCdWRXMWlaWElzSUhOallXeGxPaUJ1ZFcxaVpYSWdQU0F4TGlrNklFMWhkSEpwZUNCN1hHNGdJR052Ym5OMElHMWhkSEpwZUNBOUlHbHVhWFJEYjI5eVpHbHVZWFJsY3loa2FXMWxibk5wYjI0eExDQmthVzFsYm5OcGIyNHlLVHRjYmx4dUlDQm1iM0lnS0d4bGRDQnBJRDBnTURzZ2FTQThJR1JwYldWdWMybHZiakU3SUNzcmFTa2dlMXh1SUNBZ0lHWnZjaUFvYkdWMElHb2dQU0F3T3lCcUlEd2daR2x0Wlc1emFXOXVNanNnS3l0cUtWeHVJQ0FnSUNBZ2JXRjBjbWw0VzJsZFcycGRJRDBnY21GdVpHOXRSbXh2WVhRb2MyTmhiR1VwTzF4dUlDQjlYRzRnSUhKbGRIVnliaUJ0WVhSeWFYZzdYRzU5WEc1Y2JpOHFLbHh1SUNvZ1EyRnNZM1ZzWVhSbGN5QkZkV05zYVdSbFlXNGdaR2x6ZEdGdVkyVWdZbVYwZDJWbGJpQjBkMjhnZG1WamRHOXljeTVjYmlBcVhHNGdLaUJBWlhod2IzSjBYRzRnS2lCQWNHRnlZVzBnZTFabFkzUnZjbjBnY0NCVWFHVWdabWx5YzNRZ2RtVmpkRzl5TGx4dUlDb2dRSEJoY21GdElIdFdaV04wYjNKOUlIRWdWR2hsSUhObFkyOXVaQ0IyWldOMGIzSXVYRzRnS2lCQWNtVjBkWEp1SUh0dWRXMWlaWEo5SUVWMVkyeHBaR1ZoYmlCa2FYTjBZVzVqWlNCaVpYUjNaV1Z1SUhSb1pTQm5hWFpsYmlCMlpXTjBiM0p6TGx4dUlDb3ZYRzVsZUhCdmNuUWdablZ1WTNScGIyNGdZMkZzWTNWc1lYUmxSWFZqYkdsa1pXRnVSR2x6ZEdGdVkyVW9jRG9nVm1WamRHOXlMQ0J4T2lCV1pXTjBiM0lwT2lCdWRXMWlaWElnZTF4dUlDQnNaWFFnY21WemRXeDBJRDBnTUR0Y2JpQWdZMjl1YzNRZ2JHVnVJRDBnY0M1c1pXNW5kR2c3WEc1Y2JpQWdhV1lnS0d4bGJpQWhQVDBnY1M1c1pXNW5kR2dwWEc0Z0lDQWdkR2h5YjNjZ2JtVjNJRVZ5Y205eUtDZFVhR1VnWkdsdFpXNXphVzl1WVd4cGRIa2diMllnZEdobElIWmxZM1J2Y25NZ2JYVnpkQ0J0WVhSamFDY3BPMXh1SUNCY2JpQWdabTl5SUNoc1pYUWdhU0E5SURBN0lHa2dQQ0JzWlc0N0lDc3JhU2xjYmlBZ0lDQnlaWE4xYkhRZ0t6MGdLSEJiYVYwZ0xTQnhXMmxkS1NBcUtpQXlPMXh1SUNCY2JpQWdjbVYwZFhKdUlFMWhkR2d1YzNGeWRDaHlaWE4xYkhRcE8xeHVmVnh1WEc0dktpcGNiaUFxSUVOeVpXRjBaWE1nWVNCa2FYTjBZVzVqWlNCdFlYUnlhWGdnZFhOcGJtY2dZU0JqZFhOMGIyMGdaR2x6ZEdGdVkyVWdablZ1WTNScGIyNHVYRzRnS2x4dUlDb2dRR1Y0Y0c5eWRGeHVJQ29nUUhCaGNtRnRJSHRXWldOMGIzSnpmU0JrWVhSaElFbHVjSFYwSUhabFkzUnZjbk1nZEc4Z1kyRnNZM1ZzWVhSbElHUnBjM1JoYm1ObGN5NWNiaUFxSUVCd1lYSmhiU0I3UkdsemRHRnVZMlZOWlhSeWFXTjlJR1JwYzNSaGJtTmxJRU4xYzNSdmJTQmthWE4wWVc1alpTQm1kVzVqZEdsdmJpNWNiaUFxSUVCeVpYUjFjbTRnZTAxaGRISnBlSDBnUTJGc1kzVnNZWFJsWkNCamRYTjBiMjBnWkdsemRHRnVZMlVnYldGMGNtbDRMbHh1SUNvdlhHNWxlSEJ2Y25RZ1puVnVZM1JwYjI0Z1kyRnNZMFJwYzNSaGJtTmxUV0YwY21sNEtHUmhkR0U2SUZabFkzUnZjbk1zSUdScGMzUmhibU5sT2lCRWFYTjBZVzVqWlUxbGRISnBZeWs2SUUxaGRISnBlQ0I3WEc0Z0lHTnZibk4wSUc1SmRHVnRjeUE5SUdSaGRHRXViR1Z1WjNSb08xeHVJQ0JqYjI1emRDQnRZWFJ5YVhnZ1BTQnBibWwwUTI5dmNtUnBibUYwWlhNb2JrbDBaVzF6TENCdVNYUmxiWE1zSURBcE8xeHVYRzRnSUdadmNpQW9iR1YwSUdrZ1BTQXdPeUJwSUR3Z2JrbDBaVzF6T3lBcksya3BJSHRjYmlBZ0lDQm1iM0lnS0d4bGRDQnFJRDBnYVNBcklERTdJR29nUENCdVNYUmxiWE03SUNzcmFpa2dlMXh1SUNBZ0lDQWdZMjl1YzNRZ1pEb2diblZ0WW1WeUlEMGdLR1JoZEdGYmFWMGdQVDBnYm5Wc2JDa2dmSHdnS0dSaGRHRmJhbDBnUFQwZ2JuVnNiQ2tnUHlBd0lEb2daR2x6ZEdGdVkyVW9aR0YwWVZ0cFhTd2daR0YwWVZ0cVhTazdYRzRnSUNBZ0lDQnRZWFJ5YVhoYmFWMWJhbDBnUFNCdFlYUnlhWGhiYWwxYmFWMGdQU0JrTzF4dUlDQWdJSDFjYmlBZ2ZWeHVJQ0J5WlhSMWNtNGdiV0YwY21sNE8xeHVmVnh1WEc0dktpcGNiaUFxSUVOeVpXRjBaWE1nWVNCa2FYTjBZVzVqWlNCdFlYUnlhWGdnZFhOcGJtY2dZU0JqZFhOMGIyMGdaR2x6ZEdGdVkyVWdablZ1WTNScGIyNHVYRzRnS2x4dUlDb2dRR1Y0Y0c5eWRGeHVJQ29nUUhCaGNtRnRJSHRXWldOMGIzSnpmU0JrWVhSaElFbHVjSFYwSUhabFkzUnZjbk1nZEc4Z1kyRnNZM1ZzWVhSbElHUnBjM1JoYm1ObGN5NWNiaUFxSUVCd1lYSmhiU0I3UkdsemRHRnVZMlZOWlhSeWFXTjlJR1JwYzNSaGJtTmxJRU4xYzNSdmJTQmthWE4wWVc1alpTQm1kVzVqZEdsdmJpNWNiaUFxSUVCeVpYUjFjbTRnZTAxaGRISnBlSDBnUTJGc1kzVnNZWFJsWkNCamRYTjBiMjBnWkdsemRHRnVZMlVnYldGMGNtbDRMbHh1SUNvdlhHNWxlSEJ2Y25RZ1puVnVZM1JwYjI0Z1kyRnNZMDV2Y20xaGJHbDZaV1JFYVhOMFlXNWpaVTFoZEhKcGVDaGtZWFJoT2lCV1pXTjBiM0p6TENCa2FYTjBZVzVqWlRvZ1JHbHpkR0Z1WTJWTlpYUnlhV01wT2lCTllYUnlhWGdnZTF4dUlDQmpiMjV6ZENCdVNYUmxiWE1nUFNCa1lYUmhMbXhsYm1kMGFEdGNiaUFnWTI5dWMzUWdiV0YwY21sNElEMGdhVzVwZEVOdmIzSmthVzVoZEdWektHNUpkR1Z0Y3l3Z2JrbDBaVzF6TENBd0tUdGNiaUFnYkdWMElHMWhlQ0E5SUU1MWJXSmxjaTVOU1U1ZlZrRk1WVVU3WEc0Z0lHeGxkQ0J0YVc0Z1BTQk9kVzFpWlhJdVRVRllYMVpCVEZWRk8xeHVJQ0JtYjNJZ0tHeGxkQ0JwSUQwZ01Ec2dhU0E4SUc1SmRHVnRjenNnS3l0cEtTQjdYRzRnSUNBZ1ptOXlJQ2hzWlhRZ2FpQTlJR2s3SUdvZ1BDQnVTWFJsYlhNN0lDc3JhaWtnZTF4dUlDQWdJQ0FnWTI5dWMzUWdaRG9nYm5WdFltVnlJRDBnS0dSaGRHRmJhVjBnUFQwZ2JuVnNiQ2tnZkh3Z0tHUmhkR0ZiYWwwZ1BUMGdiblZzYkNCOGZDQnBJRDA5UFNCcUtTQS9JREFnT2lCa2FYTjBZVzVqWlNoa1lYUmhXMmxkTENCa1lYUmhXMnBkS1R0Y2JpQWdJQ0FnSUcxaGRISnBlRnRwWFZ0cVhTQTlJRzFoZEhKcGVGdHFYVnRwWFNBOUlHUTdYRzRnSUNBZ0lDQnBaaUFvWkNBK0lHMWhlQ2tnYldGNElEMGdaRHRjYmlBZ0lDQWdJR2xtSUNoa0lEd2diV2x1S1NCdGFXNGdQU0JrTzF4dUlDQWdJSDFjYmlBZ2ZWeHVJQ0JtYjNJZ0tHeGxkQ0JwSUQwZ01Ec2dhU0E4SUc1SmRHVnRjenNnS3l0cEtTQjdYRzRnSUNBZ1ptOXlJQ2hzWlhRZ2FpQTlJR2tnS3lBeE95QnFJRHdnYmtsMFpXMXpPeUFySzJvcFhHNGdJQ0FnSUNCdFlYUnlhWGhiYVYxYmFsMGdQU0J0WVhSeWFYaGJhbDFiYVYwZ1BTQW9iV0YwY21sNFcybGRXMnBkSUMwZ2JXbHVLU0F2SUNodFlYZ2dMU0J0YVc0cE8xeHVJQ0I5WEc0Z0lISmxkSFZ5YmlCdFlYUnlhWGc3WEc1OVhHNWNiaThxS2lCSFpXNWxjbUYwWlhNZ1lYSnlZWGtnWm5KdmJTQmhJSEpoYm1kbElGdGlaV2RwYmpzZ1pXNWtYU0J2Y2lCYlltVm5hVzQ3SUdWdVpDa2dhV1lnWlc1a1JYaGpiSFZ6YVhabExpQXFLaTljYm1WNGNHOXlkQ0JtZFc1amRHbHZiaUJuWlc1U1lXNW5aU2hpWldkcGJqb2diblZ0WW1WeUxDQmxibVE2SUc1MWJXSmxjaXdnWlc1a1JYaGpiSFZ6YVhabElEMGdabUZzYzJVcE9pQkpiblF6TWtGeWNtRjVJSHRjYmlBZ1kyOXVjM1FnYmtsMFpXMXpJRDBnWlc1a0lDMGdZbVZuYVc0Z0t5QW9aVzVrUlhoamJIVnphWFpsSUQ4Z01DQTZJREVwTzF4dUlDQmpiMjV6ZENCelpYSnBaWE1nUFNCdVpYY2dTVzUwTXpKQmNuSmhlU2h1U1hSbGJYTXBPMXh1WEc0Z0lHWnZjaUFvYkdWMElHa2dQU0F3T3lCcElEd2dia2wwWlcxek95QXJLMmtwWEc0Z0lDQWdjMlZ5YVdWelcybGRJRDBnWW1WbmFXNGdLeUJwTzF4dVhHNGdJSEpsZEhWeWJpQnpaWEpwWlhNN1hHNTlYRzVjYmk4cUtseHVJQ29nVW1WMGRYSnVjeUJ2Y21SbGNpQnZaaUIyWVd4MVpYTWdZWE1nYVdZZ2RHaGxlU0JoY21VZ2MyOXlkR1ZrTGx4dUlDcGNiaUFxSUVCbGVIQnZjblJjYmlBcUlFQndZWEpoYlNCN1lXNTVXMTE5SUhaaGJIVmxjeUJKYm5CMWRDQmhjbkpoZVM1Y2JpQXFJRUJ3WVhKaGJTQjdZbTl2YkdWaGJuMGdXM0psZG1WeWMyVTlabUZzYzJWZElGZG9aWFJvWlhJZ2RHOGdjbVYwZFhKdUlISmxkbVZ5YzJWa0lHOXlaR1Z5TGx4dUlDb2dRSEpsZEhWeWJpQjdiblZ0WW1WeVcxMTlJRlJvWlNCdmNtUmxjaUJqYjIxd2RYUmxaQzVjYmlBcUwxeHVaWGh3YjNKMElHWjFibU4wYVc5dUlHRnlaMU52Y25Rb2RtRnNkV1Z6T2lCaGJubGJYU3dnY21WMlpYSnpaU0E5SUdaaGJITmxLVG9nYm5WdFltVnlXMTBnZTF4dUlDQmpiMjV6ZENCemIzSjBabTRnUFNCeVpYWmxjbk5sSUQ4Z0tHRTZJR0Z1ZVZ0ZExDQmlPaUJoYm5sYlhTa2dQVDRnS0dKYk1GMGdMU0JoV3pCZEtTQTZJQ2hoT2lCaGJubGJYU3dnWWpvZ1lXNTVXMTBwSUQwK0lDaGhXekJkSUMwZ1lsc3dYU2s3WEc0Z0lHTnZibk4wSUdSbFkyOXlJRDBnS0hZNklHRnVlU3dnYVRvZ2JuVnRZbVZ5S1NBOVBpQmJkaXdnYVYwN0lDOHZJSE5sZENCcGJtUmxlQ0IwYnlCMllXeDFaVnh1SUNCamIyNXpkQ0IxYm1SbFkyOXlJRDBnS0dFNklHRnVlVnRkS1NBOVBpQmhXekZkT3lBdkx5QnNaV0YyWlNCdmJteDVJR2x1WkdWNFhHNGdJR052Ym5OMElGOWhjbWR6YjNKMElEMGdLR0Z5Y2pvZ1lXNTVXMTBwSUQwK0lHRnljaTV0WVhBb1pHVmpiM0lwTG5OdmNuUW9jMjl5ZEdadUtTNXRZWEFvZFc1a1pXTnZjaWs3WEc0Z0lISmxkSFZ5YmlCZllYSm5jMjl5ZENoMllXeDFaWE1wTzF4dWZWeHVYRzR2S2lwY2JpQXFJRkpsZEhWeWJuTWdkR2hsSUdsdVpHVjRaWE1nYjJZZ2RHaGxJRzF2YzNRZ1pHbDJaWEp6WlNCdlltcGxZM1J6SUdGalkyOXlaR2x1WnlCMGJ5QjBhR1VnWkdsemRDQm1kVzVqZEdsdmJseHVJQ29nUUhCaGNtRnRJSHR1ZFcxaVpYSjlJR3hsYm1kMGFDQjBiM1JoYkNCdWRXMWlaWElnYjJZZ2IySnFaV04wYzF4dUlDb2dRSEJoY21GdElIdHVkVzFpWlhKOUlHNGdiblZ0WW1WeUlHOW1JR1JwZG1WeWMyVWdaV3hsYldWdWRITWdkRzhnWm1sdVpGeHVJQ29nUUhCaGNtRnRJSHNvYVRFNklHNTFiV0psY2l3Z2FUSTZJRzUxYldKbGNpa2dQVDRnYm5WdFltVnlmU0JrYVhOMElHRWdablZ1WTNScGIyNGdkMmhwWTJnZ1kyRnNZM1ZzWVhSbGN5QmthWE4wWVc1alpTQmlaWFIzWldWdVhHNGdLaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2RIZHZJRzlpYW1WamRITWdkWE5wYm1jZ2RHaGxhWElnYVc1a1pYaGxjMXh1SUNvZ1FISmxkSFZ5Ym5NZ2UyNTFiV0psY2x0ZGZTQlVhR1VnYVc1a1pYaGxjeUJ2WmlCMGFHVWdiVzl6ZENCa2FYWmxjbk5sSUc5aWFtVmpkSE5jYmlBcUwxeHVaWGh3YjNKMElHWjFibU4wYVc5dUlHZGxkRVJwZG1WeWMyVlRkV0p6WlhRb2JHVnVaM1JvT2lCdWRXMWlaWElzSUc0NklHNTFiV0psY2l3Z1pHbHpkRG9nS0dreE9pQnVkVzFpWlhJc0lHa3lPaUJ1ZFcxaVpYSXBJRDArSUc1MWJXSmxjaWs2SUc1MWJXSmxjbHRkSUh0Y2JpQWdablZ1WTNScGIyNGdiV0Y0UW5rb2RtRnNkV1Z6T2lCSmRHVnlZV0pzWlVsMFpYSmhkRzl5UEc1MWJXSmxjajRzSUc5eVpHVnlRbms2SUNocE9pQnVkVzFpWlhJcElEMCtJRzUxYldKbGNpa2dlMXh1SUNBZ0lHeGxkQ0J0WVhoV1lXeDFaU0E5SUc1MWJHdzdYRzRnSUNBZ2JHVjBJRzFoZUU5eVpHVnlRbmtnUFNCdWRXeHNPMXh1WEc0Z0lDQWdabTl5SUNoamIyNXpkQ0JsYkdWdFpXNTBJRzltSUhaaGJIVmxjeWtnZTF4dUlDQWdJQ0FnWTI5dWMzUWdaV3hsYldWdWRFOXlaR1Z5UW5rZ1BTQnZjbVJsY2tKNUtHVnNaVzFsYm5RcE8xeHVJQ0FnSUNBZ2FXWWdLRzFoZUU5eVpHVnlRbmtnUFQwZ2JuVnNiQ0I4ZkNCbGJHVnRaVzUwVDNKa1pYSkNlU0ErSUcxaGVFOXlaR1Z5UW5rcElIdGNiaUFnSUNBZ0lDQWdiV0Y0Vm1Gc2RXVWdQU0JsYkdWdFpXNTBPMXh1SUNBZ0lDQWdJQ0J0WVhoUGNtUmxja0o1SUQwZ1pXeGxiV1Z1ZEU5eVpHVnlRbms3WEc0Z0lDQWdJQ0I5WEc0Z0lDQWdmVnh1SUNBZ0lISmxkSFZ5YmlCdFlYaFdZV3gxWlR0Y2JpQWdmVnh1WEc0Z0lHTnZibk4wSUhOMVluTmxkQ0E5SUZ0eVlXNWtiMjFKYm5Rb2JHVnVaM1JvSUMwZ01TbGRPMXh1SUNCamIyNXpkQ0JqYjIxd2JHVnRaVzUwSUQwZ2JtVjNJRk5sZENncE8xeHVYRzRnSUdadmNpQW9iR1YwSUdrZ1BTQXdPeUJwSUR3Z2JHVnVaM1JvT3lBcksya3BJSHRjYmlBZ0lDQnBaaUFvSVhOMVluTmxkQzVwYm1Oc2RXUmxjeWhwS1NsY2JpQWdJQ0FnSUdOdmJYQnNaVzFsYm5RdVlXUmtLR2twTzF4dUlDQjlYRzVjYmlBZ2QyaHBiR1VnS0hOMVluTmxkQzVzWlc1bmRHZ2dQQ0J1S1NCN1hHNGdJQ0FnWTI5dWMzUWdhV1I0SUQwZ2JXRjRRbmtvWEc0Z0lDQWdJQ0JqYjIxd2JHVnRaVzUwTG5aaGJIVmxjeWdwSUdGeklFbDBaWEpoWW14bFNYUmxjbUYwYjNJOGJuVnRZbVZ5UGl4Y2JpQWdJQ0FnSUNocEtTQTlQaUJOWVhSb0xtMXBiaTVoY0hCc2VTaE5ZWFJvTENCemRXSnpaWFF1YldGd0tHWjFibU4wYVc5dUtIWmhiQ3dnYVc1a1pYZ3BJSHRjYmlBZ0lDQWdJQ0FnY21WMGRYSnVJR1JwYzNRb2FTd2dkbUZzS1R0Y2JpQWdJQ0FnSUgwcEtTazdYRzRnSUNBZ2FXWWdLR2xrZUNrZ2UxeHVJQ0FnSUNBZ2MzVmljMlYwTG5CMWMyZ29hV1I0S1R0Y2JpQWdJQ0FnSUdOdmJYQnNaVzFsYm5RdVpHVnNaWFJsS0dsa2VDazdYRzRnSUNBZ2ZWeHVJQ0I5WEc0Z0lISmxkSFZ5YmlCemRXSnpaWFE3WEc1OVhHNWNiaThxS2x4dUlDb2dVbVYwZFhKdWN5QnViM0p0WVd4cGVtVmtJSFpsWTNSdmNpNWNiaUFxSUZ4dUlDb2dRR1Y0Y0c5eWRGeHVJQ29nUUhCaGNtRnRJSHRXWldOMGIzSjlJR1JoZEdFZ2JuVnRaWEpwWTJGc0lHRnljbUY1WEc0Z0tpOWNibVY0Y0c5eWRDQm1kVzVqZEdsdmJpQnViM0p0WVd4cGVtVW9aR0YwWVRvZ1ZtVmpkRzl5S1RvZ1ZtVmpkRzl5SUh0Y2JpQWdZMjl1YzNRZ2JHVnVJRDBnWkdGMFlTNXNaVzVuZEdnN1hHNGdJR3hsZENCemRXMGdQU0F3TzF4dUlDQnNaWFFnYzNWdFQyWlRjWFZoY21WeklEMGdNRHRjYmx4dUlDQm1iM0lnS0d4bGRDQnBJRDBnTURzZ2FTQThJR3hsYmpzZ0t5dHBLU0I3WEc0Z0lDQWdjM1Z0SUNzOUlHUmhkR0ZiYVYwN1hHNGdJQ0FnYzNWdFQyWlRjWFZoY21WeklDczlJR1JoZEdGYmFWMGdLaW9nTWp0Y2JpQWdmVnh1WEc0Z0lHTnZibk4wSUcxbFlXNGdQU0J6ZFcwZ0x5QnNaVzQ3WEc0Z0lHTnZibk4wSUhOMFpFUmxka2x1ZG1WeWMyVWdQU0F4TGpBZ0x5Qk5ZWFJvTG5OeGNuUW9jM1Z0VDJaVGNYVmhjbVZ6SUM4Z2JHVnVJQzBnYldWaGJpQXFLaUF5S1R0Y2JseHVJQ0JtYjNJZ0tHeGxkQ0JwSUQwZ01Ec2dhU0E4SUd4bGJqc2dLeXRwS1Z4dUlDQWdJR1JoZEdGYmFWMGdQU0FvWkdGMFlWdHBYU0F0SUcxbFlXNHBJQ29nYzNSa1JHVjJTVzUyWlhKelpUdGNibHh1SUNCeVpYUjFjbTRnWkdGMFlUdGNibjFjYmx4dUx5b3FYRzRnS2lCR2FXNWtjeUJ6WlhRZ1pHbG1abVZ5Wlc1alpTQmlaWFIzWldWdUlIUjNieUJzYVhOMGN5NWNiaUFxSUVCd1lYSmhiU0I3WVc1NVcxMTlJR0VnVkdobElHWnBjbk4wSUd4cGMzUXVYRzRnS2lCQWNHRnlZVzBnZTJGdWVWdGRmU0JpSUZSb1pTQnpaV052Ym1RZ2JHbHpkQzVjYmlBcUlFQnlaWFIxY200Z2UyRnVlVnRkZlZ4dUlDb3ZYRzVsZUhCdmNuUWdablZ1WTNScGIyNGdjMlYwUkdsbVptVnlaVzVqWlNoaE9pQmhibmxiWFN3Z1lqb2dZVzU1VzEwcE9pQmhibmxiWFNCN1hHNGdJR052Ym5OMElHSlRaWFFnUFNCdVpYY2dVMlYwS0dJcE8xeHVJQ0J5WlhSMWNtNGdRWEp5WVhrdVpuSnZiU2h1WlhjZ1UyVjBLR0V1Wm1sc2RHVnlLQ2g0S1NBOVBpQWhZbE5sZEM1b1lYTW9lQ2twS1M1MllXeDFaWE1vS1NrN1hHNTlYRzRpWFgwPSIsImltcG9ydCAqIGFzIGdyb2sgZnJvbSAnZGF0YWdyb2stYXBpL2dyb2snO1xuaW1wb3J0ICogYXMgdWkgZnJvbSAnZGF0YWdyb2stYXBpL3VpJztcbmltcG9ydCB7IGNyZWF0ZU1DTFdvcmtlciB9IGZyb20gJy4vaW5kZXgnO1xuaW1wb3J0IHsgU2NhdHRlclBsb3RDdXJyZW50TGluZVN0eWxlLCBTY2F0dGVyUGxvdExpbmVzUmVuZGVyZXIgfSBmcm9tICdAZGF0YWdyb2stbGlicmFyaWVzL3V0aWxzL3NyYy9yZW5kZXItbGluZXMtb24tc3AnO1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIG1hcmtvdkNsdXN0ZXIoZGYsIGNvbHMsIG1ldHJpY3MsIHdlaWdodHMsIGFnZ3JlZ2F0aW9uTWV0aG9kLCBwcmVwcm9jZXNzaW5nRnVuY3MsIHByZXByb2Nlc3NpbmdGdW5jQXJncywgdGhyZXNob2xkID0gODAsIG1heEl0ZXJhdGlvbnMgPSAxMCwgdXNlV2ViR1BVID0gZmFsc2UpIHtcbiAgICBjb25zdCBzY2F0dGVyUGxvdFByb3BzID0ge1xuICAgICAgICBzaG93WEF4aXM6IGZhbHNlLFxuICAgICAgICBzaG93WUF4aXM6IGZhbHNlLFxuICAgICAgICBzaG93WFNlbGVjdG9yOiBmYWxzZSxcbiAgICAgICAgc2hvd1lTZWxlY3RvcjogZmFsc2UsXG4gICAgfTtcbiAgICBjb25zdCB0diA9IGdyb2suc2hlbGwudGFibGVWaWV3KGRmLm5hbWUpID8/IGdyb2suc2hlbGwuYWRkVGFibGVWaWV3KGRmKTtcbiAgICBjb25zdCBzYyA9IHR2LnNjYXR0ZXJQbG90KHsgLi4uc2NhdHRlclBsb3RQcm9wcywgdGl0bGU6ICdNQ0wnIH0pO1xuICAgIHVpLnNldFVwZGF0ZUluZGljYXRvcihzYy5yb290LCB0cnVlKTtcbiAgICBjb25zdCBkaXN0YW5jZUZuQXJncyA9IFtdO1xuICAgIGNvbnN0IGVuY29kZWRDb2xFbnRyaWVzID0gW107XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwcmVwcm9jZXNzaW5nRnVuY3MubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgY29uc3QgcGYgPSBwcmVwcm9jZXNzaW5nRnVuY3NbaV07XG4gICAgICAgIGlmIChwZikge1xuICAgICAgICAgICAgY29uc3QgY29sSW5wdXROYW1lID0gcGYuaW5wdXRzWzBdLm5hbWU7XG4gICAgICAgICAgICBjb25zdCBtZXRyaWNJbnB1dE5hbWUgPSBwZi5pbnB1dHNbMV0ubmFtZTtcbiAgICAgICAgICAgIGNvbnN0IHsgZW50cmllcywgb3B0aW9ucyB9ID0gYXdhaXQgcGYuYXBwbHkoeyBbY29sSW5wdXROYW1lXTogY29sc1tpXSwgW21ldHJpY0lucHV0TmFtZV06IG1ldHJpY3NbaV0sXG4gICAgICAgICAgICAgICAgLi4uKHByZXByb2Nlc3NpbmdGdW5jQXJnc1tpXSA/PyB7fSkgfSk7XG4gICAgICAgICAgICBlbmNvZGVkQ29sRW50cmllcy5wdXNoKHsgZW50cmllcywgb3B0aW9ucyB9KTtcbiAgICAgICAgICAgIGRpc3RhbmNlRm5BcmdzLnB1c2gob3B0aW9ucyA/PyB7fSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBlbnRyaWVzID0gY29sc1tpXS50b0xpc3QoKTtcbiAgICAgICAgICAgIGNvbnN0IG9wdGlvbnMgPSB7fTtcbiAgICAgICAgICAgIGVuY29kZWRDb2xFbnRyaWVzLnB1c2goeyBlbnRyaWVzLCBvcHRpb25zIH0pO1xuICAgICAgICAgICAgZGlzdGFuY2VGbkFyZ3MucHVzaChvcHRpb25zKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBtY2xXb3JrZXIgPSBjcmVhdGVNQ0xXb3JrZXIoZW5jb2RlZENvbEVudHJpZXMubWFwKChpdCkgPT4gaXQuZW50cmllcyksIHRocmVzaG9sZCwgd2VpZ2h0cywgYWdncmVnYXRpb25NZXRob2QsIG1ldHJpY3MsIGRpc3RhbmNlRm5BcmdzLCBtYXhJdGVyYXRpb25zLCB1c2VXZWJHUFUpO1xuICAgIGNvbnN0IHRlcm1pbmF0ZVN1YiA9IGdyb2suZXZlbnRzLm9uVmlld2VyQ2xvc2VkLnN1YnNjcmliZSgoYXJncykgPT4ge1xuICAgICAgICBpZiAoYXJncy5hcmdzLnZpZXdlcj8ucHJvcHM/LnRpdGxlID09PSBzYy5wcm9wcy50aXRsZSAmJiBzYy50eXBlID09PSBhcmdzLmFyZ3M/LnZpZXdlcj8udHlwZSkge1xuICAgICAgICAgICAgdGVybWluYXRlU3ViLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICBtY2xXb3JrZXIudGVybWluYXRlKCk7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICBjb25zdCByZXMgPSBhd2FpdCBtY2xXb3JrZXIucHJvbWlzZTtcbiAgICBpZiAoIXJlcylcbiAgICAgICAgcmV0dXJuO1xuICAgIGNvbnN0IGNsdXN0ZXJDb2xOYW1lID0gZGYuY29sdW1ucy5nZXRVbnVzZWROYW1lKCdDbHVzdGVyIChNQ0wpJyk7XG4gICAgY29uc3QgZW1iZXJkWENvbE5hbWUgPSBkZi5jb2x1bW5zLmdldFVudXNlZE5hbWUoJ0VtYmVkWCAoTUNMKScpO1xuICAgIGNvbnN0IGVtYmVyZFlDb2xOYW1lID0gZGYuY29sdW1ucy5nZXRVbnVzZWROYW1lKCdFbWJlZFkgKE1DTCknKTtcbiAgICBjb25zdCBjbHVzdGVyc0NvdW50ZXIgPSB7fTtcbiAgICByZXMuY2x1c3RlcnMuZm9yRWFjaCgoYykgPT4ge1xuICAgICAgICBpZiAoIWNsdXN0ZXJzQ291bnRlcltjXSlcbiAgICAgICAgICAgIGNsdXN0ZXJzQ291bnRlcltjXSA9IDA7XG4gICAgICAgIGNsdXN0ZXJzQ291bnRlcltjXSsrO1xuICAgIH0pO1xuICAgIGNvbnN0IGNvbm5lY3Rpdml0eSA9IG5ldyBVaW50MzJBcnJheShyZXMuZW1iZWRYLmxlbmd0aCk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCByZXMuaXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29ubmVjdGl2aXR5W3Jlcy5pc1tpXV0rKztcbiAgICAgICAgY29ubmVjdGl2aXR5W3Jlcy5qc1tpXV0rKztcbiAgICB9XG4gICAgY29uc3QgY2x1c3RlckNvdW50ZXJDb2xOYW1lID0gZGYuY29sdW1ucy5nZXRVbnVzZWROYW1lKCdDbHVzdGVyIHNpemUgKE1DTCknKTtcbiAgICBjb25zdCBjb25uZWN0aXZpdHlDb2xOYW1lID0gZGYuY29sdW1ucy5nZXRVbnVzZWROYW1lKCdDb25uZWN0aXZpdHkgKE1DTCknKTtcbiAgICBjb25zdCBlbWJlZFhDb2wgPSBkZi5jb2x1bW5zLmFkZE5ld0Zsb2F0KGVtYmVyZFhDb2xOYW1lKTtcbiAgICBlbWJlZFhDb2wuaW5pdCgoaSkgPT4gcmVzLmVtYmVkWFtpXSk7XG4gICAgY29uc3QgZW1iZWRZQ29sID0gZGYuY29sdW1ucy5hZGROZXdGbG9hdChlbWJlcmRZQ29sTmFtZSk7XG4gICAgZW1iZWRZQ29sLmluaXQoKGkpID0+IHJlcy5lbWJlZFlbaV0pO1xuICAgIGNvbnN0IGNsdXN0ZXJDb2wgPSBkZi5jb2x1bW5zLmFkZE5ld1N0cmluZyhjbHVzdGVyQ29sTmFtZSk7XG4gICAgY2x1c3RlckNvbC5pbml0KChpKSA9PiByZXMuY2x1c3RlcnNbaV0udG9TdHJpbmcoKSk7XG4gICAgY29uc3QgY2x1c3RlckNvdW50ZXJDb2wgPSBkZi5jb2x1bW5zLmFkZE5ld0ludChjbHVzdGVyQ291bnRlckNvbE5hbWUpO1xuICAgIGNsdXN0ZXJDb3VudGVyQ29sLmluaXQoKGkpID0+IGNsdXN0ZXJzQ291bnRlcltyZXMuY2x1c3RlcnNbaV1dKTtcbiAgICBjb25zdCBjb25uZWN0aXZpdHlDb2wgPSBkZi5jb2x1bW5zLmFkZE5ld0ludChjb25uZWN0aXZpdHlDb2xOYW1lKTtcbiAgICBjb25uZWN0aXZpdHlDb2wuaW5pdCgoaSkgPT4gY29ubmVjdGl2aXR5W2ldKTtcbiAgICAvLyBkZi5jb2x1bW5zLmFkZE5ld0Zsb2F0KGVtYmVyZFhDb2xOYW1lKS5pbml0KChpKSA9PiByZXMuZW1iZWRYW2ldKTtcbiAgICAvLyBkZi5jb2x1bW5zLmFkZE5ld0Zsb2F0KGVtYmVyZFlDb2xOYW1lKS5pbml0KChpKSA9PiByZXMuZW1iZWRZW2ldKTtcbiAgICAvLyBkZi5jb2x1bW5zLmFkZE5ld0ludChjbHVzdGVyQ291bnRlckNvbE5hbWUpLmluaXQoKGkpID0+IGNsdXN0ZXJzQ291bnRlcltyZXMuY2x1c3RlcnNbaV1dKTtcbiAgICAvLyBkZi5jb2x1bW5zLmFkZE5ld1N0cmluZyhjbHVzdGVyQ29sTmFtZSkuaW5pdCgoaSkgPT4gcmVzLmNsdXN0ZXJzW2ldLnRvU3RyaW5nKCkpO1xuICAgIHNjLnByb3BzLnhDb2x1bW5OYW1lID0gZW1iZXJkWENvbE5hbWU7XG4gICAgc2MucHJvcHMueUNvbHVtbk5hbWUgPSBlbWJlcmRZQ29sTmFtZTtcbiAgICBzYy5wcm9wcy5jb2xvckNvbHVtbk5hbWUgPSBjbHVzdGVyQ29sTmFtZTtcbiAgICBzYy5wcm9wcy5tYXJrZXJEZWZhdWx0U2l6ZSA9IDU7XG4gICAgdGVybWluYXRlU3ViLnVuc3Vic2NyaWJlKCk7XG4gICAgLy8gY29uc3Qgc2MgPSB0di5zY2F0dGVyUGxvdCh7eDogZW1iZXJkWENvbE5hbWUsIHk6IGVtYmVyZFlDb2xOYW1lfSk7XG4gICAgLy8gc2MucHJvcHMuY29sb3JDb2x1bW5OYW1lID0gY2x1c3RlckNvbE5hbWU7XG4gICAgLy8gc2MucHJvcHMubWFya2VyRGVmYXVsdFNpemUgPSA1O1xuICAgIGNvbnN0IF9zY0xpbmVzID0gbmV3IFNjYXR0ZXJQbG90TGluZXNSZW5kZXJlcihzYywgZW1iZXJkWENvbE5hbWUsIGVtYmVyZFlDb2xOYW1lLCB7IGZyb206IHJlcy5pcywgdG86IHJlcy5qcywgZHJhd0Fycm93czogZmFsc2UsIG9wYWNpdHk6IDAuMywgc2tpcE11bHRpTGluZUNhbGN1bGF0aW9uOiB0cnVlIH0sIFNjYXR0ZXJQbG90Q3VycmVudExpbmVTdHlsZS5ub25lKTtcbiAgICB1aS5zZXRVcGRhdGVJbmRpY2F0b3Ioc2Mucm9vdCwgZmFsc2UpO1xuICAgIC8vIHNjLmNsb3NlKCk7XG4gICAgLy8gY29uc3Qgc2NMaW5lc1ZpZXdlciA9IG5ldyBTY2F0dGVyUGxvdFdpdGhMaW5lcyhzYywgcmVzLmlzLCByZXMuanMsIGVtYmVyZFhDb2xOYW1lLCBlbWJlcmRZQ29sTmFtZSk7XG4gICAgLy8gdHYuYWRkVmlld2VyKHNjTGluZXNWaWV3ZXIpO1xuICAgIHJldHVybiB7IHNjLCBlbWJlZFhDb2wsIGVtYmVkWUNvbCwgY2x1c3RlckNvbCwgY2x1c3RlckNvdW50ZXJDb2wsIGNvbm5lY3Rpdml0eUNvbCB9O1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pWTJ4MWMzUmxjbWx1WnkxMmFXVjNMbXB6SWl3aWMyOTFjbU5sVW05dmRDSTZJaUlzSW5OdmRYSmpaWE1pT2xzaVkyeDFjM1JsY21sdVp5MTJhV1YzTG5SeklsMHNJbTVoYldWeklqcGJYU3dpYldGd2NHbHVaM01pT2lKQlFVRkJMRTlCUVU4c1MwRkJTeXhKUVVGSkxFMUJRVTBzYlVKQlFXMUNMRU5CUVVNN1FVRkRNVU1zVDBGQlR5eExRVUZMTEVWQlFVVXNUVUZCVFN4cFFrRkJhVUlzUTBGQlF6dEJRVWQwUXl4UFFVRlBMRVZCUVVNc1pVRkJaU3hGUVVGRExFMUJRVTBzVTBGQlV5eERRVUZETzBGQlEzaERMRTlCUVU4c1JVRkJReXd5UWtGQk1rSXNSVUZCUlN4M1FrRkJkMElzUlVGQlF5eE5RVUZOTEd0RVFVRnJSQ3hEUVVGRE8wRkJaMEoyU0N4TlFVRk5MRU5CUVVNc1MwRkJTeXhWUVVGVkxHRkJRV0VzUTBGRGFrTXNSVUZCWjBJc1JVRkJSU3hKUVVGcFFpeEZRVUZGTEU5QlFYVkNMRVZCUXpWRUxFOUJRV2xDTEVWQlFVVXNhVUpCUVRSRExFVkJRVVVzYTBKQlFXdEVMRVZCUTI1SUxIRkNRVUUwUWl4RlFVRkZMRmxCUVc5Q0xFVkJRVVVzUlVGQlJTeG5Ra0ZCZDBJc1JVRkJSU3hGUVVGRkxGbEJRWEZDTEV0QlFVczdTVUZGTlVjc1RVRkJUU3huUWtGQlowSXNSMEZCUnp0UlFVTjJRaXhUUVVGVExFVkJRVVVzUzBGQlN6dFJRVU5vUWl4VFFVRlRMRVZCUVVVc1MwRkJTenRSUVVOb1FpeGhRVUZoTEVWQlFVVXNTMEZCU3p0UlFVTndRaXhoUVVGaExFVkJRVVVzUzBGQlN6dExRVU55UWl4RFFVRkRPMGxCUTBZc1RVRkJUU3hGUVVGRkxFZEJRVWNzU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4VFFVRlRMRU5CUVVNc1JVRkJSU3hEUVVGRExFbEJRVWtzUTBGQlF5eEpRVUZKTEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1dVRkJXU3hEUVVGRExFVkJRVVVzUTBGQlF5eERRVUZETzBsQlJYaEZMRTFCUVUwc1JVRkJSU3hIUVVGSExFVkJRVVVzUTBGQlF5eFhRVUZYTEVOQlFVTXNSVUZCUXl4SFFVRkhMR2RDUVVGblFpeEZRVUZGTEV0QlFVc3NSVUZCUlN4TFFVRkxMRVZCUVVNc1EwRkJReXhEUVVGRE8wbEJSUzlFTEVWQlFVVXNRMEZCUXl4clFrRkJhMElzUTBGQlF5eEZRVUZGTEVOQlFVTXNTVUZCU1N4RlFVRkZMRWxCUVVrc1EwRkJReXhEUVVGRE8wbEJRM0pETEUxQlFVMHNZMEZCWXl4SFFVRmpMRVZCUVVVc1EwRkJRenRKUVVOeVF5eE5RVUZOTEdsQ1FVRnBRaXhIUVVGdFF5eEZRVUZGTEVOQlFVTTdTVUZETjBRc1MwRkJTeXhKUVVGSkxFTkJRVU1zUjBGQlJ5eERRVUZETEVWQlFVVXNRMEZCUXl4SFFVRkhMR3RDUVVGclFpeERRVUZETEUxQlFVMHNSVUZCUlN4RlFVRkZMRU5CUVVNc1JVRkJSVHRSUVVOc1JDeE5RVUZOTEVWQlFVVXNSMEZCUnl4clFrRkJhMElzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXp0UlFVTnFReXhKUVVGSkxFVkJRVVVzUlVGQlJUdFpRVU5PTEUxQlFVMHNXVUZCV1N4SFFVRkhMRVZCUVVVc1EwRkJReXhOUVVGTkxFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNTVUZCU1N4RFFVRkRPMWxCUTNaRExFMUJRVTBzWlVGQlpTeEhRVUZITEVWQlFVVXNRMEZCUXl4TlFVRk5MRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zU1VGQlNTeERRVUZETzFsQlF6RkRMRTFCUVUwc1JVRkJReXhQUVVGUExFVkJRVVVzVDBGQlR5eEZRVUZETEVkQlEyUXNUVUZCVFN4RlFVRkZMRU5CUVVNc1MwRkJTeXhEUVVGRExFVkJRVU1zUTBGQlF5eFpRVUZaTEVOQlFVTXNSVUZCUlN4SlFVRkpMRU5CUVVNc1EwRkJReXhEUVVGRExFVkJRVVVzUTBGQlF5eGxRVUZsTEVOQlFVTXNSVUZCUlN4UFFVRlBMRU5CUVVNc1EwRkJReXhEUVVGRE8yZENRVU53UlN4SFFVRkhMRU5CUVVNc2NVSkJRWEZDTEVOQlFVTXNRMEZCUXl4RFFVRkRMRWxCUVVrc1JVRkJSU3hEUVVGRExFVkJRVU1zUTBGQlF5eERRVUZETzFsQlEyeEVMR2xDUVVGcFFpeERRVUZETEVsQlFVa3NRMEZCUXl4RlFVRkRMRTlCUVU4c1JVRkJSU3hQUVVGUExFVkJRVU1zUTBGQlF5eERRVUZETzFsQlF6TkRMR05CUVdNc1EwRkJReXhKUVVGSkxFTkJRVU1zVDBGQlR5eEpRVUZKTEVWQlFVVXNRMEZCUXl4RFFVRkRPMU5CUTNCRE8yRkJRVTA3V1VGRFRDeE5RVUZOTEU5QlFVOHNSMEZCUnl4SlFVRkpMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zVFVGQlRTeEZRVUZGTEVOQlFVTTdXVUZEYWtNc1RVRkJUU3hQUVVGUExFZEJRVWNzUlVGQlJTeERRVUZETzFsQlEyNUNMR2xDUVVGcFFpeERRVUZETEVsQlFVa3NRMEZCUXl4RlFVRkRMRTlCUVU4c1JVRkJSU3hQUVVGUExFVkJRVU1zUTBGQlF5eERRVUZETzFsQlF6TkRMR05CUVdNc1EwRkJReXhKUVVGSkxFTkJRVU1zVDBGQlR5eERRVUZETEVOQlFVTTdVMEZET1VJN1MwRkRSanRKUVVWRUxFMUJRVTBzVTBGQlV5eEhRVUZITEdWQlFXVXNRMEZCUXl4cFFrRkJhVUlzUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXl4RlFVRkZMRVZCUVVVc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eFBRVUZQTEVOQlFVTXNSVUZEZWtVc1UwRkJVeXhGUVVGRkxFOUJRVThzUlVGQlJTeHBRa0ZCYVVJc1JVRkJSU3hQUVVGUExFVkJRVVVzWTBGQll5eEZRVUZGTEdGQlFXRXNSVUZCUlN4VFFVRlRMRU5CUVVNc1EwRkJRenRKUVVVMVJpeE5RVUZOTEZsQlFWa3NSMEZCUnl4SlFVRkpMRU5CUVVNc1RVRkJUU3hEUVVGRExHTkJRV01zUTBGQlF5eFRRVUZUTEVOQlFVTXNRMEZCUXl4SlFVRkpMRVZCUVVVc1JVRkJSVHRSUVVOcVJTeEpRVUZKTEVsQlFVa3NRMEZCUXl4SlFVRkpMRU5CUVVNc1RVRkJUU3hGUVVGRkxFdEJRVXNzUlVGQlJTeExRVUZMTEV0QlFVc3NSVUZCUlN4RFFVRkRMRXRCUVVzc1EwRkJReXhMUVVGTExFbEJRVWtzUlVGQlJTeERRVUZETEVsQlFVa3NTMEZCU3l4SlFVRkpMRU5CUVVNc1NVRkJTU3hGUVVGRkxFMUJRVTBzUlVGQlJTeEpRVUZKTEVWQlFVVTdXVUZETlVZc1dVRkJXU3hEUVVGRExGZEJRVmNzUlVGQlJTeERRVUZETzFsQlF6TkNMRk5CUVZNc1EwRkJReXhUUVVGVExFVkJRVVVzUTBGQlF6dFRRVU4yUWp0SlFVTklMRU5CUVVNc1EwRkJReXhEUVVGRE8wbEJRMGdzVFVGQlRTeEhRVUZITEVkQlFVY3NUVUZCVFN4VFFVRlRMRU5CUVVNc1QwRkJUeXhEUVVGRE8wbEJRM0JETEVsQlFVa3NRMEZCUXl4SFFVRkhPMUZCUTA0c1QwRkJUenRKUVVOVUxFMUJRVTBzWTBGQll5eEhRVUZITEVWQlFVVXNRMEZCUXl4UFFVRlBMRU5CUVVNc1lVRkJZU3hEUVVGRExHVkJRV1VzUTBGQlF5eERRVUZETzBsQlEycEZMRTFCUVUwc1kwRkJZeXhIUVVGSExFVkJRVVVzUTBGQlF5eFBRVUZQTEVOQlFVTXNZVUZCWVN4RFFVRkRMR05CUVdNc1EwRkJReXhEUVVGRE8wbEJRMmhGTEUxQlFVMHNZMEZCWXl4SFFVRkhMRVZCUVVVc1EwRkJReXhQUVVGUExFTkJRVU1zWVVGQllTeERRVUZETEdOQlFXTXNRMEZCUXl4RFFVRkRPMGxCUTJoRkxFMUJRVTBzWlVGQlpTeEhRVUV3UWl4RlFVRkZMRU5CUVVNN1NVRkRiRVFzUjBGQlJ5eERRVUZETEZGQlFWRXNRMEZCUXl4UFFVRlBMRU5CUVVNc1EwRkJReXhEUVVGRExFVkJRVVVzUlVGQlJUdFJRVU42UWl4SlFVRkpMRU5CUVVNc1pVRkJaU3hEUVVGRExFTkJRVU1zUTBGQlF6dFpRVUZGTEdWQlFXVXNRMEZCUXl4RFFVRkRMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU03VVVGRGFFUXNaVUZCWlN4RFFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRkxFTkJRVU03U1VGRGRrSXNRMEZCUXl4RFFVRkRMRU5CUVVNN1NVRkRTQ3hOUVVGTkxGbEJRVmtzUjBGQlJ5eEpRVUZKTEZkQlFWY3NRMEZCUXl4SFFVRkhMRU5CUVVNc1RVRkJUU3hEUVVGRExFMUJRVTBzUTBGQlF5eERRVUZETzBsQlEzaEVMRXRCUVVzc1NVRkJTU3hEUVVGRExFZEJRVWNzUTBGQlF5eEZRVUZGTEVOQlFVTXNSMEZCUnl4SFFVRkhMRU5CUVVNc1JVRkJSU3hEUVVGRExFMUJRVTBzUlVGQlJTeERRVUZETEVWQlFVVXNSVUZCUlR0UlFVTjBReXhaUVVGWkxFTkJRVU1zUjBGQlJ5eERRVUZETEVWQlFVVXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRkxFTkJRVU03VVVGRE1VSXNXVUZCV1N4RFFVRkRMRWRCUVVjc1EwRkJReXhGUVVGRkxFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNSVUZCUlN4RFFVRkRPMHRCUXpOQ08wbEJRMFFzVFVGQlRTeHhRa0ZCY1VJc1IwRkJSeXhGUVVGRkxFTkJRVU1zVDBGQlR5eERRVUZETEdGQlFXRXNRMEZCUXl4dlFrRkJiMElzUTBGQlF5eERRVUZETzBsQlF6ZEZMRTFCUVUwc2JVSkJRVzFDTEVkQlFVY3NSVUZCUlN4RFFVRkRMRTlCUVU4c1EwRkJReXhoUVVGaExFTkJRVU1zYjBKQlFXOUNMRU5CUVVNc1EwRkJRenRKUVVVelJTeE5RVUZOTEZOQlFWTXNSMEZCUnl4RlFVRkZMRU5CUVVNc1QwRkJUeXhEUVVGRExGZEJRVmNzUTBGQlF5eGpRVUZqTEVOQlFVTXNRMEZCUXp0SlFVTjZSQ3hUUVVGVExFTkJRVU1zU1VGQlNTeERRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkZMRVZCUVVVc1EwRkJReXhIUVVGSExFTkJRVU1zVFVGQlRTeERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN1NVRkRja01zVFVGQlRTeFRRVUZUTEVkQlFVY3NSVUZCUlN4RFFVRkRMRTlCUVU4c1EwRkJReXhYUVVGWExFTkJRVU1zWTBGQll5eERRVUZETEVOQlFVTTdTVUZEZWtRc1UwRkJVeXhEUVVGRExFbEJRVWtzUTBGQlF5eERRVUZETEVOQlFVTXNSVUZCUlN4RlFVRkZMRU5CUVVNc1IwRkJSeXhEUVVGRExFMUJRVTBzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRPMGxCUTNKRExFMUJRVTBzVlVGQlZTeEhRVUZITEVWQlFVVXNRMEZCUXl4UFFVRlBMRU5CUVVNc1dVRkJXU3hEUVVGRExHTkJRV01zUTBGQlF5eERRVUZETzBsQlF6TkVMRlZCUVZVc1EwRkJReXhKUVVGSkxFTkJRVU1zUTBGQlF5eERRVUZETEVWQlFVVXNSVUZCUlN4RFFVRkRMRWRCUVVjc1EwRkJReXhSUVVGUkxFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNVVUZCVVN4RlFVRkZMRU5CUVVNc1EwRkJRenRKUVVOdVJDeE5RVUZOTEdsQ1FVRnBRaXhIUVVGSExFVkJRVVVzUTBGQlF5eFBRVUZQTEVOQlFVTXNVMEZCVXl4RFFVRkRMSEZDUVVGeFFpeERRVUZETEVOQlFVTTdTVUZEZEVVc2FVSkJRV2xDTEVOQlFVTXNTVUZCU1N4RFFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRkxFVkJRVVVzUTBGQlF5eGxRVUZsTEVOQlFVTXNSMEZCUnl4RFFVRkRMRkZCUVZFc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdTVUZEYUVVc1RVRkJUU3hsUVVGbExFZEJRVWNzUlVGQlJTeERRVUZETEU5QlFVOHNRMEZCUXl4VFFVRlRMRU5CUVVNc2JVSkJRVzFDTEVOQlFVTXNRMEZCUXp0SlFVTnNSU3hsUVVGbExFTkJRVU1zU1VGQlNTeERRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkZMRVZCUVVVc1EwRkJReXhaUVVGWkxFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXp0SlFVVTNReXh4UlVGQmNVVTdTVUZEY2tVc2NVVkJRWEZGTzBsQlEzSkZMRFpHUVVFMlJqdEpRVU0zUml4dFJrRkJiVVk3U1VGRGJrWXNSVUZCUlN4RFFVRkRMRXRCUVVzc1EwRkJReXhYUVVGWExFZEJRVWNzWTBGQll5eERRVUZETzBsQlEzUkRMRVZCUVVVc1EwRkJReXhMUVVGTExFTkJRVU1zVjBGQlZ5eEhRVUZITEdOQlFXTXNRMEZCUXp0SlFVTjBReXhGUVVGRkxFTkJRVU1zUzBGQlN5eERRVUZETEdWQlFXVXNSMEZCUnl4alFVRmpMRU5CUVVNN1NVRkRNVU1zUlVGQlJTeERRVUZETEV0QlFVc3NRMEZCUXl4cFFrRkJhVUlzUjBGQlJ5eERRVUZETEVOQlFVTTdTVUZETDBJc1dVRkJXU3hEUVVGRExGZEJRVmNzUlVGQlJTeERRVUZETzBsQlF6TkNMSEZGUVVGeFJUdEpRVU55UlN3MlEwRkJOa003U1VGRE4wTXNhME5CUVd0RE8wbEJRMnhETEUxQlFVMHNVVUZCVVN4SFFVRkhMRWxCUVVrc2QwSkJRWGRDTEVOQlFVTXNSVUZCUlN4RlFVRkZMR05CUVdNc1JVRkJSU3hqUVVGakxFVkJRemxGTEVWQlFVTXNTVUZCU1N4RlFVRkZMRWRCUVVjc1EwRkJReXhGUVVGVExFVkJRVVVzUlVGQlJTeEZRVUZGTEVkQlFVY3NRMEZCUXl4RlFVRlRMRVZCUVVVc1ZVRkJWU3hGUVVGRkxFdEJRVXNzUlVGQlJTeFBRVUZQTEVWQlFVVXNSMEZCUnl4RlFVRkZMSGRDUVVGM1FpeEZRVUZGTEVsQlFVa3NSVUZCUXl4RlFVTjZSeXd5UWtGQk1rSXNRMEZCUXl4SlFVRkpMRU5CUVVNc1EwRkJRenRKUVVOd1F5eEZRVUZGTEVOQlFVTXNhMEpCUVd0Q0xFTkJRVU1zUlVGQlJTeERRVUZETEVsQlFVa3NSVUZCUlN4TFFVRkxMRU5CUVVNc1EwRkJRenRKUVVOMFF5eGpRVUZqTzBsQlEyUXNjMGRCUVhOSE8wbEJRM1JITEN0Q1FVRXJRanRKUVVNdlFpeFBRVUZQTEVWQlFVTXNSVUZCUlN4RlFVRkZMRk5CUVZNc1JVRkJSU3hUUVVGVExFVkJRVVVzVlVGQlZTeEZRVUZGTEdsQ1FVRnBRaXhGUVVGRkxHVkJRV1VzUlVGQlF5eERRVUZETzBGQlEzQkdMRU5CUVVNaUxDSnpiM1Z5WTJWelEyOXVkR1Z1ZENJNld5SnBiWEJ2Y25RZ0tpQmhjeUJuY205cklHWnliMjBnSjJSaGRHRm5jbTlyTFdGd2FTOW5jbTlySnp0Y2JtbHRjRzl5ZENBcUlHRnpJSFZwSUdaeWIyMGdKMlJoZEdGbmNtOXJMV0Z3YVM5MWFTYzdYRzVwYlhCdmNuUWdLaUJoY3lCRVJ5Qm1jbTl0SUNka1lYUmhaM0p2YXkxaGNHa3ZaR2NuTzF4dVhHNXBiWEJ2Y25RZ2UyTnlaV0YwWlUxRFRGZHZjbXRsY24wZ1puSnZiU0FuTGk5cGJtUmxlQ2M3WEc1cGJYQnZjblFnZTFOallYUjBaWEpRYkc5MFEzVnljbVZ1ZEV4cGJtVlRkSGxzWlN3Z1UyTmhkSFJsY2xCc2IzUk1hVzVsYzFKbGJtUmxjbVZ5ZlNCbWNtOXRJQ2RBWkdGMFlXZHliMnN0YkdsaWNtRnlhV1Z6TDNWMGFXeHpMM055WXk5eVpXNWtaWEl0YkdsdVpYTXRiMjR0YzNBbk8xeHVhVzF3YjNKMElIdExibTkzYmsxbGRISnBZM045SUdaeWIyMGdKeTR1TDNSNWNHVmtMVzFsZEhKcFkzTW5PMXh1YVcxd2IzSjBJSHRFYVhOMFlXNWpaVUZuWjNKbFoyRjBhVzl1VFdWMGFHOWtmU0JtY205dElDY3VMaTlrYVhOMFlXNWpaUzF0WVhSeWFYZ3ZkSGx3WlhNbk8xeHVhVzF3YjNKMElIdFFjbVZ3Y205alpYTnpSblZ1WTNScGIyNVNaWFIxY201VWVYQmxmU0JtY205dElDY3VMaTltZFc1amRHbHZia1ZrYVhSdmNuTXZaR2x0Wlc1emFXOXVZV3hwZEhrdGNtVmtkV04wYVc5dUxXVmthWFJ2Y2ljN1hHNXBiWEJ2Y25RZ2UwOXdkR2x2Ym5OOUlHWnliMjBnSjBCa1lYUmhaM0p2YXkxc2FXSnlZWEpwWlhNdmRYUnBiSE12YzNKakwzUjVjR1V0WkdWamJHRnlZWFJwYjI1ekp6dGNibHh1WEc1bGVIQnZjblFnZEhsd1pTQk5RMHhEYkhWemRHVnlWbWxsZDJWeVVtVnpkV3gwSUQwZ2UxeHVJQ0J6WXpvZ1JFY3VVMk5oZEhSbGNsQnNiM1JXYVdWM1pYSTdYRzRnSUdWdFltVmtXRU52YkRvZ1JFY3VRMjlzZFcxdU8xeHVJQ0JsYldKbFpGbERiMnc2SUVSSExrTnZiSFZ0Ymp0Y2JpQWdZMngxYzNSbGNrTnZiRG9nUkVjdVEyOXNkVzF1TzF4dUlDQmpiSFZ6ZEdWeVEyOTFiblJsY2tOdmJEb2dSRWN1UTI5c2RXMXVPMXh1SUNCamIyNXVaV04wYVhacGRIbERiMnc2SUVSSExrTnZiSFZ0Ymp0Y2JuMWNibHh1Wlhod2IzSjBJR0Z6ZVc1aklHWjFibU4wYVc5dUlHMWhjbXR2ZGtOc2RYTjBaWElvWEc0Z0lHUm1PaUJFUnk1RVlYUmhSbkpoYldVc0lHTnZiSE02SUVSSExrTnZiSFZ0Ymx0ZExDQnRaWFJ5YVdOek9pQkxibTkzYmsxbGRISnBZM05iWFN4Y2JpQWdkMlZwWjJoMGN6b2diblZ0WW1WeVcxMHNJR0ZuWjNKbFoyRjBhVzl1VFdWMGFHOWtPaUJFYVhOMFlXNWpaVUZuWjNKbFoyRjBhVzl1VFdWMGFHOWtMQ0J3Y21Wd2NtOWpaWE56YVc1blJuVnVZM002SUNoRVJ5NUdkVzVqSUh3Z2JuVnNiQ0I4SUhWdVpHVm1hVzVsWkNsYlhTeGNiaUFnY0hKbGNISnZZMlZ6YzJsdVowWjFibU5CY21kek9pQmhibmxiWFN3Z2RHaHlaWE5vYjJ4a09pQnVkVzFpWlhJZ1BTQTRNQ3dnYldGNFNYUmxjbUYwYVc5dWN6b2diblZ0WW1WeUlEMGdNVEFzSUhWelpWZGxZa2RRVlRvZ1ltOXZiR1ZoYmlBOUlHWmhiSE5sWEc0cE9pQlFjbTl0YVhObFBIVnVaR1ZtYVc1bFpDQjhJRTFEVEVOc2RYTjBaWEpXYVdWM1pYSlNaWE4xYkhRK0lIdGNiaUFnWTI5dWMzUWdjMk5oZEhSbGNsQnNiM1JRY205d2N5QTlJSHRjYmlBZ0lDQnphRzkzV0VGNGFYTTZJR1poYkhObExGeHVJQ0FnSUhOb2IzZFpRWGhwY3pvZ1ptRnNjMlVzWEc0Z0lDQWdjMmh2ZDFoVFpXeGxZM1J2Y2pvZ1ptRnNjMlVzWEc0Z0lDQWdjMmh2ZDFsVFpXeGxZM1J2Y2pvZ1ptRnNjMlVzWEc0Z0lIMDdYRzRnSUdOdmJuTjBJSFIySUQwZ1ozSnZheTV6YUdWc2JDNTBZV0pzWlZacFpYY29aR1l1Ym1GdFpTa2dQejhnWjNKdmF5NXphR1ZzYkM1aFpHUlVZV0pzWlZacFpYY29aR1lwTzF4dVhHNGdJR052Ym5OMElITmpJRDBnZEhZdWMyTmhkSFJsY2xCc2IzUW9leTR1TG5OallYUjBaWEpRYkc5MFVISnZjSE1zSUhScGRHeGxPaUFuVFVOTUozMHBPMXh1WEc0Z0lIVnBMbk5sZEZWd1pHRjBaVWx1WkdsallYUnZjaWh6WXk1eWIyOTBMQ0IwY25WbEtUdGNiaUFnWTI5dWMzUWdaR2x6ZEdGdVkyVkdia0Z5WjNNNklFOXdkR2x2Ym5OYlhTQTlJRnRkTzF4dUlDQmpiMjV6ZENCbGJtTnZaR1ZrUTI5c1JXNTBjbWxsY3pvZ1VISmxjSEp2WTJWemMwWjFibU4wYVc5dVVtVjBkWEp1Vkhsd1pWdGRJRDBnVzEwN1hHNGdJR1p2Y2lBb2JHVjBJR2tnUFNBd095QnBJRHdnY0hKbGNISnZZMlZ6YzJsdVowWjFibU56TG14bGJtZDBhRHNnS3l0cEtTQjdYRzRnSUNBZ1kyOXVjM1FnY0dZZ1BTQndjbVZ3Y205alpYTnphVzVuUm5WdVkzTmJhVjA3WEc0Z0lDQWdhV1lnS0hCbUtTQjdYRzRnSUNBZ0lDQmpiMjV6ZENCamIyeEpibkIxZEU1aGJXVWdQU0J3Wmk1cGJuQjFkSE5iTUYwdWJtRnRaVHRjYmlBZ0lDQWdJR052Ym5OMElHMWxkSEpwWTBsdWNIVjBUbUZ0WlNBOUlIQm1MbWx1Y0hWMGMxc3hYUzV1WVcxbE8xeHVJQ0FnSUNBZ1kyOXVjM1FnZTJWdWRISnBaWE1zSUc5d2RHbHZibk45T2lCUWNtVndjbTlqWlhOelJuVnVZM1JwYjI1U1pYUjFjbTVVZVhCbElEMWNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQmhkMkZwZENCd1ppNWhjSEJzZVNoN1cyTnZiRWx1Y0hWMFRtRnRaVjA2SUdOdmJITmJhVjBzSUZ0dFpYUnlhV05KYm5CMWRFNWhiV1ZkT2lCdFpYUnlhV056VzJsZExGeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdMaTR1S0hCeVpYQnliMk5sYzNOcGJtZEdkVzVqUVhKbmMxdHBYU0EvUHlCN2ZTbDlLVHRjYmlBZ0lDQWdJR1Z1WTI5a1pXUkRiMnhGYm5SeWFXVnpMbkIxYzJnb2UyVnVkSEpwWlhNc0lHOXdkR2x2Ym5OOUtUdGNiaUFnSUNBZ0lHUnBjM1JoYm1ObFJtNUJjbWR6TG5CMWMyZ29iM0IwYVc5dWN5QS9QeUI3ZlNrN1hHNGdJQ0FnZlNCbGJITmxJSHRjYmlBZ0lDQWdJR052Ym5OMElHVnVkSEpwWlhNZ1BTQmpiMnh6VzJsZExuUnZUR2x6ZENncE8xeHVJQ0FnSUNBZ1kyOXVjM1FnYjNCMGFXOXVjeUE5SUh0OU8xeHVJQ0FnSUNBZ1pXNWpiMlJsWkVOdmJFVnVkSEpwWlhNdWNIVnphQ2g3Wlc1MGNtbGxjeXdnYjNCMGFXOXVjMzBwTzF4dUlDQWdJQ0FnWkdsemRHRnVZMlZHYmtGeVozTXVjSFZ6YUNodmNIUnBiMjV6S1R0Y2JpQWdJQ0I5WEc0Z0lIMWNibHh1SUNCamIyNXpkQ0J0WTJ4WGIzSnJaWElnUFNCamNtVmhkR1ZOUTB4WGIzSnJaWElvWlc1amIyUmxaRU52YkVWdWRISnBaWE11YldGd0tDaHBkQ2tnUFQ0Z2FYUXVaVzUwY21sbGN5a3NYRzRnSUNBZ2RHaHlaWE5vYjJ4a0xDQjNaV2xuYUhSekxDQmhaMmR5WldkaGRHbHZiazFsZEdodlpDd2diV1YwY21samN5d2daR2x6ZEdGdVkyVkdia0Z5WjNNc0lHMWhlRWwwWlhKaGRHbHZibk1zSUhWelpWZGxZa2RRVlNrN1hHNWNiaUFnWTI5dWMzUWdkR1Z5YldsdVlYUmxVM1ZpSUQwZ1ozSnZheTVsZG1WdWRITXViMjVXYVdWM1pYSkRiRzl6WldRdWMzVmljMk55YVdKbEtDaGhjbWR6S1NBOVBpQjdYRzRnSUNBZ2FXWWdLR0Z5WjNNdVlYSm5jeTUyYVdWM1pYSS9MbkJ5YjNCelB5NTBhWFJzWlNBOVBUMGdjMk11Y0hKdmNITXVkR2wwYkdVZ0ppWWdjMk11ZEhsd1pTQTlQVDBnWVhKbmN5NWhjbWR6UHk1MmFXVjNaWEkvTG5SNWNHVXBJSHRjYmlBZ0lDQWdJSFJsY20xcGJtRjBaVk4xWWk1MWJuTjFZbk5qY21saVpTZ3BPMXh1SUNBZ0lDQWdiV05zVjI5eWEyVnlMblJsY20xcGJtRjBaU2dwTzF4dUlDQWdJSDFjYmlBZ2ZTazdYRzRnSUdOdmJuTjBJSEpsY3lBOUlHRjNZV2wwSUcxamJGZHZjbXRsY2k1d2NtOXRhWE5sTzF4dUlDQnBaaUFvSVhKbGN5bGNiaUFnSUNCeVpYUjFjbTQ3WEc0Z0lHTnZibk4wSUdOc2RYTjBaWEpEYjJ4T1lXMWxJRDBnWkdZdVkyOXNkVzF1Y3k1blpYUlZiblZ6WldST1lXMWxLQ2REYkhWemRHVnlJQ2hOUTB3cEp5azdYRzRnSUdOdmJuTjBJR1Z0WW1WeVpGaERiMnhPWVcxbElEMGdaR1l1WTI5c2RXMXVjeTVuWlhSVmJuVnpaV1JPWVcxbEtDZEZiV0psWkZnZ0tFMURUQ2tuS1R0Y2JpQWdZMjl1YzNRZ1pXMWlaWEprV1VOdmJFNWhiV1VnUFNCa1ppNWpiMngxYlc1ekxtZGxkRlZ1ZFhObFpFNWhiV1VvSjBWdFltVmtXU0FvVFVOTUtTY3BPMXh1SUNCamIyNXpkQ0JqYkhWemRHVnljME52ZFc1MFpYSTZJSHRiWHpvZ2JuVnRZbVZ5WFRvZ2JuVnRZbVZ5ZlNBOUlIdDlPMXh1SUNCeVpYTXVZMngxYzNSbGNuTXVabTl5UldGamFDZ29ZeWtnUFQ0Z2UxeHVJQ0FnSUdsbUlDZ2hZMngxYzNSbGNuTkRiM1Z1ZEdWeVcyTmRLU0JqYkhWemRHVnljME52ZFc1MFpYSmJZMTBnUFNBd08xeHVJQ0FnSUdOc2RYTjBaWEp6UTI5MWJuUmxjbHRqWFNzck8xeHVJQ0I5S1R0Y2JpQWdZMjl1YzNRZ1kyOXVibVZqZEdsMmFYUjVJRDBnYm1WM0lGVnBiblF6TWtGeWNtRjVLSEpsY3k1bGJXSmxaRmd1YkdWdVozUm9LVHRjYmlBZ1ptOXlJQ2hzWlhRZ2FTQTlJREE3SUdrZ1BDQnlaWE11YVhNdWJHVnVaM1JvT3lCcEt5c3BJSHRjYmlBZ0lDQmpiMjV1WldOMGFYWnBkSGxiY21WekxtbHpXMmxkWFNzck8xeHVJQ0FnSUdOdmJtNWxZM1JwZG1sMGVWdHlaWE11YW5OYmFWMWRLeXM3WEc0Z0lIMWNiaUFnWTI5dWMzUWdZMngxYzNSbGNrTnZkVzUwWlhKRGIyeE9ZVzFsSUQwZ1pHWXVZMjlzZFcxdWN5NW5aWFJWYm5WelpXUk9ZVzFsS0NkRGJIVnpkR1Z5SUhOcGVtVWdLRTFEVENrbktUdGNiaUFnWTI5dWMzUWdZMjl1Ym1WamRHbDJhWFI1UTI5c1RtRnRaU0E5SUdSbUxtTnZiSFZ0Ym5NdVoyVjBWVzUxYzJWa1RtRnRaU2duUTI5dWJtVmpkR2wyYVhSNUlDaE5RMHdwSnlrN1hHNWNiaUFnWTI5dWMzUWdaVzFpWldSWVEyOXNJRDBnWkdZdVkyOXNkVzF1Y3k1aFpHUk9aWGRHYkc5aGRDaGxiV0psY21SWVEyOXNUbUZ0WlNrN1hHNGdJR1Z0WW1Wa1dFTnZiQzVwYm1sMEtDaHBLU0E5UGlCeVpYTXVaVzFpWldSWVcybGRLVHRjYmlBZ1kyOXVjM1FnWlcxaVpXUlpRMjlzSUQwZ1pHWXVZMjlzZFcxdWN5NWhaR1JPWlhkR2JHOWhkQ2hsYldKbGNtUlpRMjlzVG1GdFpTazdYRzRnSUdWdFltVmtXVU52YkM1cGJtbDBLQ2hwS1NBOVBpQnlaWE11WlcxaVpXUlpXMmxkS1R0Y2JpQWdZMjl1YzNRZ1kyeDFjM1JsY2tOdmJDQTlJR1JtTG1OdmJIVnRibk11WVdSa1RtVjNVM1J5YVc1bktHTnNkWE4wWlhKRGIyeE9ZVzFsS1R0Y2JpQWdZMngxYzNSbGNrTnZiQzVwYm1sMEtDaHBLU0E5UGlCeVpYTXVZMngxYzNSbGNuTmJhVjB1ZEc5VGRISnBibWNvS1NrN1hHNGdJR052Ym5OMElHTnNkWE4wWlhKRGIzVnVkR1Z5UTI5c0lEMGdaR1l1WTI5c2RXMXVjeTVoWkdST1pYZEpiblFvWTJ4MWMzUmxja052ZFc1MFpYSkRiMnhPWVcxbEtUdGNiaUFnWTJ4MWMzUmxja052ZFc1MFpYSkRiMnd1YVc1cGRDZ29hU2tnUFQ0Z1kyeDFjM1JsY25ORGIzVnVkR1Z5VzNKbGN5NWpiSFZ6ZEdWeWMxdHBYVjBwTzF4dUlDQmpiMjV6ZENCamIyNXVaV04wYVhacGRIbERiMndnUFNCa1ppNWpiMngxYlc1ekxtRmtaRTVsZDBsdWRDaGpiMjV1WldOMGFYWnBkSGxEYjJ4T1lXMWxLVHRjYmlBZ1kyOXVibVZqZEdsMmFYUjVRMjlzTG1sdWFYUW9LR2twSUQwK0lHTnZibTVsWTNScGRtbDBlVnRwWFNrN1hHNWNiaUFnTHk4Z1pHWXVZMjlzZFcxdWN5NWhaR1JPWlhkR2JHOWhkQ2hsYldKbGNtUllRMjlzVG1GdFpTa3VhVzVwZENnb2FTa2dQVDRnY21WekxtVnRZbVZrV0Z0cFhTazdYRzRnSUM4dklHUm1MbU52YkhWdGJuTXVZV1JrVG1WM1JteHZZWFFvWlcxaVpYSmtXVU52YkU1aGJXVXBMbWx1YVhRb0tHa3BJRDArSUhKbGN5NWxiV0psWkZsYmFWMHBPMXh1SUNBdkx5QmtaaTVqYjJ4MWJXNXpMbUZrWkU1bGQwbHVkQ2hqYkhWemRHVnlRMjkxYm5SbGNrTnZiRTVoYldVcExtbHVhWFFvS0drcElEMCtJR05zZFhOMFpYSnpRMjkxYm5SbGNsdHlaWE11WTJ4MWMzUmxjbk5iYVYxZEtUdGNiaUFnTHk4Z1pHWXVZMjlzZFcxdWN5NWhaR1JPWlhkVGRISnBibWNvWTJ4MWMzUmxja052YkU1aGJXVXBMbWx1YVhRb0tHa3BJRDArSUhKbGN5NWpiSFZ6ZEdWeWMxdHBYUzUwYjFOMGNtbHVaeWdwS1R0Y2JpQWdjMk11Y0hKdmNITXVlRU52YkhWdGJrNWhiV1VnUFNCbGJXSmxjbVJZUTI5c1RtRnRaVHRjYmlBZ2MyTXVjSEp2Y0hNdWVVTnZiSFZ0Yms1aGJXVWdQU0JsYldKbGNtUlpRMjlzVG1GdFpUdGNiaUFnYzJNdWNISnZjSE11WTI5c2IzSkRiMngxYlc1T1lXMWxJRDBnWTJ4MWMzUmxja052YkU1aGJXVTdYRzRnSUhOakxuQnliM0J6TG0xaGNtdGxja1JsWm1GMWJIUlRhWHBsSUQwZ05UdGNiaUFnZEdWeWJXbHVZWFJsVTNWaUxuVnVjM1ZpYzJOeWFXSmxLQ2s3WEc0Z0lDOHZJR052Ym5OMElITmpJRDBnZEhZdWMyTmhkSFJsY2xCc2IzUW9lM2c2SUdWdFltVnlaRmhEYjJ4T1lXMWxMQ0I1T2lCbGJXSmxjbVJaUTI5c1RtRnRaWDBwTzF4dUlDQXZMeUJ6WXk1d2NtOXdjeTVqYjJ4dmNrTnZiSFZ0Yms1aGJXVWdQU0JqYkhWemRHVnlRMjlzVG1GdFpUdGNiaUFnTHk4Z2MyTXVjSEp2Y0hNdWJXRnlhMlZ5UkdWbVlYVnNkRk5wZW1VZ1BTQTFPMXh1SUNCamIyNXpkQ0JmYzJOTWFXNWxjeUE5SUc1bGR5QlRZMkYwZEdWeVVHeHZkRXhwYm1WelVtVnVaR1Z5WlhJb2MyTXNJR1Z0WW1WeVpGaERiMnhPWVcxbExDQmxiV0psY21SWlEyOXNUbUZ0WlN4Y2JpQWdJQ0I3Wm5KdmJUb2djbVZ6TG1seklHRnpJR0Z1ZVN3Z2RHODZJSEpsY3k1cWN5QmhjeUJoYm5rc0lHUnlZWGRCY25KdmQzTTZJR1poYkhObExDQnZjR0ZqYVhSNU9pQXdMak1zSUhOcmFYQk5kV3gwYVV4cGJtVkRZV3hqZFd4aGRHbHZiam9nZEhKMVpYMHNYRzRnSUNBZ1UyTmhkSFJsY2xCc2IzUkRkWEp5Wlc1MFRHbHVaVk4wZVd4bExtNXZibVVwTzF4dUlDQjFhUzV6WlhSVmNHUmhkR1ZKYm1ScFkyRjBiM0lvYzJNdWNtOXZkQ3dnWm1Gc2MyVXBPMXh1SUNBdkx5QnpZeTVqYkc5elpTZ3BPMXh1SUNBdkx5QmpiMjV6ZENCelkweHBibVZ6Vm1sbGQyVnlJRDBnYm1WM0lGTmpZWFIwWlhKUWJHOTBWMmwwYUV4cGJtVnpLSE5qTENCeVpYTXVhWE1zSUhKbGN5NXFjeXdnWlcxaVpYSmtXRU52YkU1aGJXVXNJR1Z0WW1WeVpGbERiMnhPWVcxbEtUdGNiaUFnTHk4Z2RIWXVZV1JrVm1sbGQyVnlLSE5qVEdsdVpYTldhV1YzWlhJcE8xeHVJQ0J5WlhSMWNtNGdlM05qTENCbGJXSmxaRmhEYjJ3c0lHVnRZbVZrV1VOdmJDd2dZMngxYzNSbGNrTnZiQ3dnWTJ4MWMzUmxja052ZFc1MFpYSkRiMndzSUdOdmJtNWxZM1JwZG1sMGVVTnZiSDA3WEc1OVhHNWNiaUpkZlE9PSIsImV4cG9ydCAqIGZyb20gJy4vbWFyY292LWNsdXN0ZXInO1xuZXhwb3J0ICogZnJvbSAnLi90eXBlcyc7XG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlTUNMV29ya2VyKGRhdGEsIHRocmVzaG9sZCwgd2VpZ2h0cywgYWdncmVnYXRpb25NZXRob2QsIGRpc3RhbmNlRm5zLCBkaXN0YW5jZUZuQXJncywgbWF4SXRlcmF0aW9ucyA9IDEwLCB1c2VXZWJHUFUgPSBmYWxzZSkge1xuICAgIGNvbnN0IHdvcmtlciA9IG5ldyBXb3JrZXIobmV3IFVSTCgnbWNsLXdvcmtlcicsIGltcG9ydC5tZXRhLnVybCkpO1xuICAgIHdvcmtlci5wb3N0TWVzc2FnZSh7IGRhdGEsIHRocmVzaG9sZCwgd2VpZ2h0cywgYWdncmVnYXRpb25NZXRob2QsIGRpc3RhbmNlRm5zLFxuICAgICAgICBkaXN0YW5jZUZuQXJncywgbWF4SXRlcmF0aW9ucywgdXNlV2ViR1BVIH0pO1xuICAgIGxldCByZXNvbHZlRjtcbiAgICBjb25zdCBwcm9taXNlID0gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICByZXNvbHZlRiA9IHJlc29sdmU7XG4gICAgICAgIHdvcmtlci5vbm1lc3NhZ2UgPSAoZXZlbnQpID0+IHtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gd29ya2VyLnRlcm1pbmF0ZSgpLCAxMDApO1xuICAgICAgICAgICAgcmVzb2x2ZShldmVudC5kYXRhLnJlcyk7XG4gICAgICAgIH07XG4gICAgICAgIHdvcmtlci5vbmVycm9yID0gKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHdvcmtlci50ZXJtaW5hdGUoKSwgMTAwKTtcbiAgICAgICAgICAgIHJlamVjdChldmVudCk7XG4gICAgICAgIH07XG4gICAgfSk7XG4gICAgY29uc3QgdGVybWluYXRlID0gKCkgPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmVzb2x2ZUYobnVsbCk7XG4gICAgICAgICAgICB3b3JrZXIudGVybWluYXRlKCk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiB7IHByb21pc2UsIHRlcm1pbmF0ZSB9O1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pYVc1a1pYZ3Vhbk1pTENKemIzVnlZMlZTYjI5MElqb2lJaXdpYzI5MWNtTmxjeUk2V3lKcGJtUmxlQzUwY3lKZExDSnVZVzFsY3lJNlcxMHNJbTFoY0hCcGJtZHpJam9pUVVGSFFTeGpRVUZqTEd0Q1FVRnJRaXhEUVVGRE8wRkJRMnBETEdOQlFXTXNVMEZCVXl4RFFVRkRPMEZCUlhoQ0xFMUJRVTBzVlVGQlZTeGxRVUZsTEVOQlFVTXNTVUZCWVN4RlFVRkZMRk5CUVdsQ0xFVkJRemxFTEU5QlFXbENMRVZCUVVVc2FVSkJRVFJETEVWQlF5OUVMRmRCUVRKQ0xFVkJRVVVzWTBGQmNVSXNSVUZCUlN4blFrRkJkMElzUlVGQlJTeEZRVUZGTEZsQlFYRkNMRXRCUVVzN1NVRkRNVWNzVFVGQlRTeE5RVUZOTEVkQlFVY3NTVUZCU1N4TlFVRk5MRU5CUVVNc1NVRkJTU3hIUVVGSExFTkJRVU1zV1VGQldTeEZRVUZGTEUxQlFVMHNRMEZCUXl4SlFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU1zUTBGQlF6dEpRVU5zUlN4TlFVRk5MRU5CUVVNc1YwRkJWeXhEUVVGRExFVkJRVU1zU1VGQlNTeEZRVUZGTEZOQlFWTXNSVUZCUlN4UFFVRlBMRVZCUVVVc2FVSkJRV2xDTEVWQlFVVXNWMEZCVnp0UlFVTXhSU3hqUVVGakxFVkJRVVVzWVVGQllTeEZRVUZGTEZOQlFWTXNSVUZCUXl4RFFVRkRMRU5CUVVNN1NVRkROME1zU1VGQlNTeFJRVUZyUWl4RFFVRkRPMGxCUTNaQ0xFMUJRVTBzVDBGQlR5eEhRVUZITEVsQlFVa3NUMEZCVHl4RFFVZDBRaXhEUVVGRExFOUJRVThzUlVGQlJTeE5RVUZOTEVWQlFVVXNSVUZCUlR0UlFVTnlRaXhSUVVGUkxFZEJRVWNzVDBGQlR5eERRVUZETzFGQlEyNUNMRTFCUVUwc1EwRkJReXhUUVVGVExFZEJRVWNzUTBGQlF5eExRVUZMTEVWQlFVVXNSVUZCUlR0WlFVTXpRaXhWUVVGVkxFTkJRVU1zUjBGQlJ5eEZRVUZGTEVOQlFVTXNUVUZCVFN4RFFVRkRMRk5CUVZNc1JVRkJSU3hGUVVGRkxFZEJRVWNzUTBGQlF5eERRVUZETzFsQlF6RkRMRTlCUVU4c1EwRkJReXhMUVVGTExFTkJRVU1zU1VGQlNTeERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRPMUZCUXpGQ0xFTkJRVU1zUTBGQlF6dFJRVU5HTEUxQlFVMHNRMEZCUXl4UFFVRlBMRWRCUVVjc1EwRkJReXhMUVVGTExFVkJRVVVzUlVGQlJUdFpRVU42UWl4VlFVRlZMRU5CUVVNc1IwRkJSeXhGUVVGRkxFTkJRVU1zVFVGQlRTeERRVUZETEZOQlFWTXNSVUZCUlN4RlFVRkZMRWRCUVVjc1EwRkJReXhEUVVGRE8xbEJRekZETEUxQlFVMHNRMEZCUXl4TFFVRkxMRU5CUVVNc1EwRkJRenRSUVVOb1FpeERRVUZETEVOQlFVTTdTVUZEU2l4RFFVRkRMRU5CUVVNc1EwRkJRenRKUVVOTUxFMUJRVTBzVTBGQlV5eEhRVUZITEVkQlFVY3NSVUZCUlR0UlFVTnlRaXhKUVVGSk8xbEJRMFlzVVVGQlVTeERRVUZETEVsQlFVa3NRMEZCUXl4RFFVRkRPMWxCUTJZc1RVRkJUU3hEUVVGRExGTkJRVk1zUlVGQlJTeERRVUZETzFOQlEzQkNPMUZCUVVNc1QwRkJUeXhEUVVGRExFVkJRVVU3V1VGRFZpeFBRVUZQTEVOQlFVTXNTMEZCU3l4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE8xTkJRMnhDTzBsQlEwZ3NRMEZCUXl4RFFVRkRPMGxCUTBZc1QwRkJUeXhGUVVGRExFOUJRVThzUlVGQlJTeFRRVUZUTEVWQlFVTXNRMEZCUXp0QlFVTTVRaXhEUVVGRElpd2ljMjkxY21ObGMwTnZiblJsYm5RaU9sc2lhVzF3YjNKMElIdEVhWE4wWVc1alpVRm5aM0psWjJGMGFXOXVUV1YwYUc5a2ZTQm1jbTl0SUNjdUxpOWthWE4wWVc1alpTMXRZWFJ5YVhndmRIbHdaWE1uTzF4dWFXMXdiM0owSUh0TGJtOTNiazFsZEhKcFkzTjlJR1p5YjIwZ0p5NHVMM1I1Y0dWa0xXMWxkSEpwWTNNbk8xeHVYRzVsZUhCdmNuUWdLaUJtY205dElDY3VMMjFoY21OdmRpMWpiSFZ6ZEdWeUp6dGNibVY0Y0c5eWRDQXFJR1p5YjIwZ0p5NHZkSGx3WlhNbk8xeHVYRzVsZUhCdmNuUWdablZ1WTNScGIyNGdZM0psWVhSbFRVTk1WMjl5YTJWeUtHUmhkR0U2SUdGdWVWdGRXMTBzSUhSb2NtVnphRzlzWkRvZ2JuVnRZbVZ5TEZ4dUlDQjNaV2xuYUhSek9pQnVkVzFpWlhKYlhTd2dZV2RuY21WbllYUnBiMjVOWlhSb2IyUTZJRVJwYzNSaGJtTmxRV2RuY21WbllYUnBiMjVOWlhSb2IyUXNYRzRnSUdScGMzUmhibU5sUm01ek9pQkxibTkzYmsxbGRISnBZM05iWFN3Z1pHbHpkR0Z1WTJWR2JrRnlaM002SUdGdWVWdGRMQ0J0WVhoSmRHVnlZWFJwYjI1ek9pQnVkVzFpWlhJZ1BTQXhNQ3dnZFhObFYyVmlSMUJWT2lCaWIyOXNaV0Z1SUQwZ1ptRnNjMlVwSUh0Y2JpQWdZMjl1YzNRZ2QyOXlhMlZ5SUQwZ2JtVjNJRmR2Y210bGNpaHVaWGNnVlZKTUtDZHRZMnd0ZDI5eWEyVnlKeXdnYVcxd2IzSjBMbTFsZEdFdWRYSnNLU2s3WEc0Z0lIZHZjbXRsY2k1d2IzTjBUV1Z6YzJGblpTaDdaR0YwWVN3Z2RHaHlaWE5vYjJ4a0xDQjNaV2xuYUhSekxDQmhaMmR5WldkaGRHbHZiazFsZEdodlpDd2daR2x6ZEdGdVkyVkdibk1zWEc0Z0lDQWdaR2x6ZEdGdVkyVkdia0Z5WjNNc0lHMWhlRWwwWlhKaGRHbHZibk1zSUhWelpWZGxZa2RRVlgwcE8xeHVJQ0JzWlhRZ2NtVnpiMngyWlVZNklFWjFibU4wYVc5dU8xeHVJQ0JqYjI1emRDQndjbTl0YVhObElEMGdibVYzSUZCeWIyMXBjMlU4ZTF4dUlDQWdJR05zZFhOMFpYSnpPaUJ1ZFcxaVpYSmJYU3dnWlcxaVpXUllPaUJHYkc5aGRETXlRWEp5WVhrc0lHVnRZbVZrV1RvZ1JteHZZWFF6TWtGeWNtRjVMRnh1SUNBZ0lDQnBjem9nVldsdWRETXlRWEp5WVhrc0lHcHpPaUJWYVc1ME16SkJjbkpoZVZ4dUlDQWdJSDArS0NoeVpYTnZiSFpsTENCeVpXcGxZM1FwSUQwK0lIdGNiaUFnSUNBZ0lISmxjMjlzZG1WR0lEMGdjbVZ6YjJ4MlpUdGNiaUFnSUNBZ0lIZHZjbXRsY2k1dmJtMWxjM05oWjJVZ1BTQW9aWFpsYm5RcElEMCtJSHRjYmlBZ0lDQWdJQ0FnYzJWMFZHbHRaVzkxZENnb0tTQTlQaUIzYjNKclpYSXVkR1Z5YldsdVlYUmxLQ2tzSURFd01DazdYRzRnSUNBZ0lDQWdJSEpsYzI5c2RtVW9aWFpsYm5RdVpHRjBZUzV5WlhNcE8xeHVJQ0FnSUNBZ2ZUdGNiaUFnSUNBZ0lIZHZjbXRsY2k1dmJtVnljbTl5SUQwZ0tHVjJaVzUwS1NBOVBpQjdYRzRnSUNBZ0lDQWdJSE5sZEZScGJXVnZkWFFvS0NrZ1BUNGdkMjl5YTJWeUxuUmxjbTFwYm1GMFpTZ3BMQ0F4TURBcE8xeHVJQ0FnSUNBZ0lDQnlaV3BsWTNRb1pYWmxiblFwTzF4dUlDQWdJQ0FnZlR0Y2JpQWdJQ0I5S1R0Y2JpQWdZMjl1YzNRZ2RHVnliV2x1WVhSbElEMGdLQ2tnUFQ0Z2UxeHVJQ0FnSUhSeWVTQjdYRzRnSUNBZ0lDQnlaWE52YkhabFJpaHVkV3hzS1R0Y2JpQWdJQ0FnSUhkdmNtdGxjaTUwWlhKdGFXNWhkR1VvS1R0Y2JpQWdJQ0I5SUdOaGRHTm9JQ2hsS1NCN1hHNGdJQ0FnSUNCamIyNXpiMnhsTG1WeWNtOXlLR1VwTzF4dUlDQWdJSDFjYmlBZ2ZUdGNiaUFnY21WMGRYSnVJSHR3Y205dGFYTmxMQ0IwWlhKdGFXNWhkR1Y5TzF4dWZWeHVJbDE5Il0sIm5hbWVzIjpbIl9zY3JpcHREaXIiLCJleHBvcnRDcHBEYnNjYW5MaWIiLCJkb2N1bWVudCIsImN1cnJlbnRTY3JpcHQiLCJzcmMiLCJ1bmRlZmluZWQiLCJyZWFkeVByb21pc2VSZXNvbHZlIiwicmVhZHlQcm9taXNlUmVqZWN0IiwiTW9kdWxlIiwiUHJvbWlzZSIsInJlc29sdmUiLCJyZWplY3QiLCJyZWFkQmluYXJ5IiwibW9kdWxlT3ZlcnJpZGVzIiwiT2JqZWN0IiwiYXNzaWduIiwiRU5WSVJPTk1FTlRfSVNfV0VCIiwid2luZG93IiwiRU5WSVJPTk1FTlRfSVNfV09SS0VSIiwiaW1wb3J0U2NyaXB0cyIsInNjcmlwdERpcmVjdG9yeSIsInByb2Nlc3MiLCJ2ZXJzaW9ucyIsIm5vZGUiLCJzZWxmIiwibG9jYXRpb24iLCJocmVmIiwiaW5kZXhPZiIsInN1YnN0ciIsInJlcGxhY2UiLCJsYXN0SW5kZXhPZiIsInVybCIsInhociIsIlhNTEh0dHBSZXF1ZXN0Iiwib3BlbiIsInJlc3BvbnNlVHlwZSIsInNlbmQiLCJVaW50OEFycmF5IiwiY29uc29sZSIsImxvZyIsImJpbmQiLCJ3YXNtQmluYXJ5Iiwid2FzbU1lbW9yeSIsImVyciIsIndhcm4iLCJXZWJBc3NlbWJseSIsImFib3J0IiwiSEVBUDgiLCJIRUFQVTgiLCJIRUFQVTMyIiwiQUJPUlQiLCJ1cGRhdGVNZW1vcnlWaWV3cyIsImIiLCJidWZmZXIiLCJJbnQ4QXJyYXkiLCJJbnQxNkFycmF5IiwiSW50MzJBcnJheSIsIlVpbnQxNkFycmF5IiwiVWludDMyQXJyYXkiLCJGbG9hdDMyQXJyYXkiLCJGbG9hdDY0QXJyYXkiLCJfX0FUUFJFUlVOX18iLCJfX0FUSU5JVF9fIiwiX19BVFBPU1RSVU5fXyIsInJ1bkRlcGVuZGVuY2llcyIsInJ1bkRlcGVuZGVuY3lXYXRjaGVyIiwiZGVwZW5kZW5jaWVzRnVsZmlsbGVkIiwid2hhdCIsImUiLCJSdW50aW1lRXJyb3IiLCJ3YXNtQmluYXJ5RmlsZSIsInBhdGgiLCJpc0RhdGFVUkkiLCJmaWxlbmFtZSIsInN0YXJ0c1dpdGgiLCJnZXRCaW5hcnkiLCJmaWxlIiwiaW5zdGFudGlhdGVBcnJheUJ1ZmZlciIsImJpbmFyeUZpbGUiLCJpbXBvcnRzIiwicmVjZWl2ZXIiLCJmZXRjaCIsInRoZW4iLCJjcmVkZW50aWFscyIsInJlc3BvbnNlIiwiY2F0Y2giLCJnZXRCaW5hcnlQcm9taXNlIiwiYmluYXJ5IiwiaW5zdGFudGlhdGUiLCJpbnN0YW5jZSIsInJlYXNvbiIsImNhbGxSdW50aW1lQ2FsbGJhY2tzIiwiY2FsbGJhY2tzIiwibGVuZ3RoIiwic2hpZnQiLCJFeGNlcHRpb25JbmZvIiwiZXhjUHRyIiwidGhpcyIsInB0ciIsInNldF90eXBlIiwidHlwZSIsImdldF90eXBlIiwic2V0X2Rlc3RydWN0b3IiLCJkZXN0cnVjdG9yIiwiZ2V0X2Rlc3RydWN0b3IiLCJzZXRfY2F1Z2h0IiwiY2F1Z2h0IiwiZ2V0X2NhdWdodCIsInNldF9yZXRocm93biIsInJldGhyb3duIiwiZ2V0X3JldGhyb3duIiwiaW5pdCIsInNldF9hZGp1c3RlZF9wdHIiLCJhZGp1c3RlZFB0ciIsImdldF9hZGp1c3RlZF9wdHIiLCJnZXRfZXhjZXB0aW9uX3B0ciIsIl9fX2N4YV9pc19wb2ludGVyX3R5cGUiLCJhZGp1c3RlZCIsImVtc2NyaXB0ZW5fcmVhbGxvY19idWZmZXIiLCJzaXplIiwiZ3JvdyIsImJ5dGVMZW5ndGgiLCJnZXRDRnVuYyIsImlkZW50IiwiVVRGOERlY29kZXIiLCJUZXh0RGVjb2RlciIsImNjYWxsIiwicmV0dXJuVHlwZSIsImFyZ1R5cGVzIiwiYXJncyIsIm9wdHMiLCJ0b0MiLCJzdHIiLCJyZXQiLCJsZW4iLCJpIiwiYyIsImNoYXJDb2RlQXQiLCJsZW5ndGhCeXRlc1VURjgiLCJzdGFja0FsbG9jIiwib3V0UHRyIiwibWF4Qnl0ZXNUb1dyaXRlIiwiaGVhcCIsIm91dElkeCIsImVuZElkeCIsInUiLCJzdHJpbmdUb1VURjhBcnJheSIsInN0cmluZ1RvVVRGOCIsInN0cmluZ1RvVVRGOE9uU3RhY2siLCJhcnIiLCJhcnJheSIsInNldCIsImZ1bmMiLCJjQXJncyIsInN0YWNrIiwiY29udmVydGVyIiwic3RhY2tTYXZlIiwiYXBwbHkiLCJzdGFja1Jlc3RvcmUiLCJoZWFwT3JBcnJheSIsImlkeCIsIm1heEJ5dGVzVG9SZWFkIiwiZW5kUHRyIiwiZGVjb2RlIiwic3ViYXJyYXkiLCJ1MCIsInUxIiwidTIiLCJTdHJpbmciLCJmcm9tQ2hhckNvZGUiLCJjaCIsIlVURjhBcnJheVRvU3RyaW5nIiwiQm9vbGVhbiIsImNvbnZlcnRSZXR1cm5WYWx1ZSIsIm9uRG9uZSIsImNhbGxlZFJ1biIsIndhc21JbXBvcnRzIiwiZGVzdCIsIm51bSIsImNvcHlXaXRoaW4iLCJyZXF1ZXN0ZWRTaXplIiwieCIsIm9sZFNpemUiLCJtYXhIZWFwU2l6ZSIsImN1dERvd24iLCJvdmVyR3Jvd25IZWFwU2l6ZSIsIk1hdGgiLCJtaW4iLCJtYXgiLCJjYWxsYmFjayIsImluZm8iLCJyZWNlaXZlSW5zdGFuY2UiLCJtb2R1bGUiLCJjYiIsImV4cG9ydHMiLCJ1bnNoaWZ0IiwiaWQiLCJjbGVhckludGVydmFsIiwicmVtb3ZlUnVuRGVwZW5kZW5jeSIsInJlc3VsdCIsImluc3RhbnRpYXRlU3RyZWFtaW5nIiwiY3JlYXRlV2FzbSIsImFyZ3VtZW50cyIsInJ1biIsImRvUnVuIiwicG9zdFJ1biIsInByZVJ1biIsInNldFRpbWVvdXQiLCJudW1lcmljQXJncyIsImV2ZXJ5IiwicnVuQ2FsbGVyIiwicG9wIiwicmVhZHkiLCJkZWZpbmUiLCJfX19DU1NfTE9BREVSX0VYUE9SVF9fXyIsInB1c2giLCJjc3NXaXRoTWFwcGluZ1RvU3RyaW5nIiwibGlzdCIsInRvU3RyaW5nIiwibWFwIiwiaXRlbSIsImNvbnRlbnQiLCJuZWVkTGF5ZXIiLCJjb25jYXQiLCJqb2luIiwibW9kdWxlcyIsIm1lZGlhIiwiZGVkdXBlIiwic3VwcG9ydHMiLCJsYXllciIsImFscmVhZHlJbXBvcnRlZE1vZHVsZXMiLCJrIiwiX2siLCJjc3NNYXBwaW5nIiwiYnRvYSIsImJhc2U2NCIsInVuZXNjYXBlIiwiZW5jb2RlVVJJQ29tcG9uZW50IiwiSlNPTiIsInN0cmluZ2lmeSIsImRhdGEiLCJzb3VyY2VNYXBwaW5nIiwialN0YXQiLCJBcnJheSIsInByb3RvdHlwZSIsInNsaWNlIiwiY2FsY1JkeCIsIm4iLCJtIiwidmFsIiwicG93IiwiTE9HMTBFIiwiaXNBcnJheSIsImFyZyIsImNhbGwiLCJpc0Z1bmN0aW9uIiwiaXNOdW1iZXIiLCJfaW5pdCIsInJldFplcm8iLCJyZXRPbmUiLCJyZXRJZGVudCIsImoiLCJmbiIsInNlcSIsInRvQXJyYXkiLCJjb25zdHJ1Y3RvciIsInV0aWxzIiwidG9WZWN0b3IiLCJfcmFuZG9tX2ZuIiwicmFuZG9tIiwic2V0UmFuZG9tIiwiVHlwZUVycm9yIiwiZXh0ZW5kIiwib2JqIiwicm93cyIsImNvbHMiLCJkaW1lbnNpb25zIiwicm93IiwiaW5kZXgiLCJyb3dhIiwiY29sIiwic3VibWF0IiwiYXJhbmdlIiwiZm9yRWFjaCIsImluZCIsImNvbHVtbiIsImNvbGEiLCJhIiwiZGlhZyIsIm5yb3ciLCJyZXMiLCJhbnRpZGlhZyIsInRyYW5zcG9zZSIsIm9iakFyciIsInRvQWx0ZXIiLCJuY29sIiwiY3VtcmVkdWNlIiwiYWx0ZXIiLCJjcmVhdGUiLCJ6ZXJvcyIsIm9uZXMiLCJyYW5kIiwiaWRlbnRpdHkiLCJzeW1tZXRyaWMiLCJjbGVhciIsImNudCIsImhpdmFsIiwic3RlcCIsImN1cnJlbnQiLCJzdGFydCIsImVuZCIsInJsIiwiX3NsaWNlIiwiY29weSIsInJjU2xpY2UiLCJjb2xTbGljZSIsInJvd1NsaWNlIiwic2xpY2VBc3NpZ24iLCJBIiwiQiIsIm5sIiwibWwiLCJkaWFnb25hbCIsImRpYWdBcnJheSIsIm1hdCIsInQiLCJqUHJvdG8iLCJzb3J0Iiwic3BsaWNlIiwiZnVuY3MiLCJwYXNzZnVuYyIsInJlc3VsdHMiLCJzcGxpdCIsImFzY051bSIsImNsaXAiLCJzdW0iLCJzdW1zcXJkIiwic3Vtc3FlcnIiLCJ0bXAiLCJtZWFuIiwic3Vtcm93IiwicHJvZHVjdCIsInByb2QiLCJsb3ciLCJoaWdoIiwidW5pcXVlIiwiaGFzaCIsIl9hcnIiLCJtZWFuc3FlcnIiLCJnZW9tZWFuIiwibG9ncyIsIm1lYW5PZkxvZ3MiLCJleHAiLCJtZWRpYW4iLCJhcnJsZW4iLCJjdW1zdW0iLCJjdW1wcm9kIiwiZGlmZiIsImRpZmZzIiwiYXJyTGVuIiwicmFuayIsImRpc3RpbmN0TnVtYmVycyIsIm51bWJlckNvdW50cyIsIm51bWJlciIsInNvcnRlZERpc3RpbmN0TnVtYmVycyIsIm51bWJlclJhbmtzIiwiY3VycmVudFJhbmsiLCJjb3VudCIsIm1vZGUiLCJtYXhDb3VudCIsIm51bU1heENvdW50IiwibW9kZV9hcnIiLCJyYW5nZSIsInZhcmlhbmNlIiwiZmxhZyIsInBvb2xlZHZhcmlhbmNlIiwicmVkdWNlIiwic2FtcGxlcyIsImRldmlhdGlvbiIsImRldiIsInN0ZGV2Iiwic3FydCIsInBvb2xlZHN0ZGV2IiwibWVhbmRldiIsImFicyIsIm1lZGRldiIsImNvZWZmdmFyIiwicXVhcnRpbGVzIiwicm91bmQiLCJxdWFudGlsZXMiLCJxdWFudGlsZXNBcnJheSIsImFscGhhcCIsImJldGFwIiwicCIsImFsZXBoIiwiZ2FtbWEiLCJzb3J0ZWRBcnJheSIsInF1YW50aWxlVmFscyIsImZsb29yIiwicGVyY2VudGlsZSIsImV4Y2x1c2l2ZSIsInJlYWxJbmRleCIsInBhcnNlSW50IiwiZnJhYyIsInBlcmNlbnRpbGVPZlNjb3JlIiwic2NvcmUiLCJraW5kIiwidmFsdWUiLCJjb3VudGVyIiwic3RyaWN0IiwiaGlzdG9ncmFtIiwiYmluQ250IiwiZmlyc3QiLCJiaW5XaWR0aCIsImJpbnMiLCJjb3ZhcmlhbmNlIiwiYXJyMSIsImFycjIiLCJ2IiwiYXJyMUxlbiIsInNxX2RldiIsImNvcnJjb2VmZiIsInNwZWFybWFuY29lZmYiLCJzdGFuTW9tZW50IiwibXUiLCJzaWdtYSIsInNrZXdTdW0iLCJza2V3bmVzcyIsImt1cnRvc2lzIiwiZnVsbGJvb2wiLCJ0bXB0aGlzIiwiY2FsbGJhY2tGdW5jdGlvbiIsImFyZ3NUb1Bhc3MiLCJjdXJyaWVkRnVuY3Rpb24iLCJ2ZWN0b3IiLCJnYW1tYWxuIiwieHgiLCJ5IiwiY29mIiwic2VyIiwibG9nZ2FtIiwieDAiLCJ4MiIsInhwIiwiZ2wiLCJnbDAiLCJQSSIsImdhbW1hZm4iLCJ6IiwieWkiLCJxIiwiZmFjdCIsInhkZW4iLCJ4bnVtIiwiSW5maW5pdHkiLCJzaW4iLCJnYW1tYXAiLCJsb3dSZWdHYW1tYSIsImFuIiwiYWxuIiwiYXAiLCJkZWwiLCJkIiwiaCIsIklUTUFYIiwiTmFOIiwiZmFjdG9yaWFsbG4iLCJmYWN0b3JpYWwiLCJjb21iaW5hdGlvbiIsImNvbWJpbmF0aW9ubG4iLCJwZXJtdXRhdGlvbiIsImJldGFmbiIsImJldGFsbiIsImJldGFjZiIsIm0yIiwiYWEiLCJmcG1pbiIsInFhYiIsInFhcCIsInFhbSIsImdhbW1hcGludiIsInBwIiwibG5hMSIsImFmYWMiLCJhMSIsImdsbiIsImVyZiIsInR5IiwiaXNuZWciLCJkZCIsImVyZmMiLCJlcmZjaW52IiwiaWJldGFpbnYiLCJsbmEiLCJsbmIiLCJhbCIsInciLCJiMSIsImliZXRhIiwiYnQiLCJyYW5kbiIsInJhbmRnIiwic2hhcGUiLCJhMiIsIm9hbHBoIiwiYmV0aW5jIiwiZXBzIiwiYzkiLCJhMCIsImIwIiwibTkiLCJ0dWtleVdwcm9iIiwicnIiLCJjYyIsInhsZWciLCJhbGVnIiwicXNxeiIsIndpbmNyIiwicHJfdyIsIm5vcm1hbCIsImNkZiIsImJsYiIsImJpbmMiLCJidWIiLCJlaW5zdW0iLCJjYzEiLCJ3aSIsImVsc3VtIiwiamoiLCJhYyIsInFleHBvIiwicmluc3VtIiwiZiIsIl9hIiwiX2IiLCJfYyIsIm5ld3RoaXMiLCJzYW1wbGUiLCJ2YWxzIiwiZm5mdW5jIiwiYmV0YSIsInBkZiIsImFscGhhIiwiaW52IiwiY2VudHJhbEYiLCJkZjEiLCJkZjIiLCJiaW5vbWlhbCIsImNhdWNoeSIsImxvY2FsIiwic2NhbGUiLCJhdGFuIiwidGFuIiwiY2hpc3F1YXJlIiwiZG9mIiwiZXhwb25lbnRpYWwiLCJyYXRlIiwiaW52Z2FtbWEiLCJrdW1hcmFzd2FteSIsIkVycm9yIiwibG9nbm9ybWFsIiwibm9uY2VudHJhbHQiLCJuY3AiLCJzdHVkZW50dCIsInRvbCIsImZsaXAiLCJwcm9iIiwibGFzdHZhbHVlIiwic3RkIiwicGFyZXRvIiwiU1FSVDIiLCJkb2YyIiwid2VpYnVsbCIsInVuaWZvcm0iLCJiZXRhY2RmIiwicyIsIm5lZ2JpbiIsInIiLCJoeXBnZW9tIiwiTiIsInNjYWxlZFBERiIsInNhbXBsZXNEb25lIiwic2NhbGVkQ0RGIiwiZmFjdG9yIiwicG9pc3NvbiIsImwiLCJzdW1hcnIiLCJzYW1wbGVTbWFsbCIsIkwiLCJzYW1wbGVMYXJnZSIsIlUiLCJWIiwic2xhbSIsImxvZ2xhbSIsImludmFscGhhIiwidnIiLCJ1cyIsImxhbSIsInRyaWFuZ3VsYXIiLCJhcmNzaW5lIiwiYXNpbiIsImNvcyIsImxhcGxhY2UiLCJ0dWtleSIsIm5tZWFucyIsImRmIiwieGxlZ3EiLCJhbGVncSIsIk51bWJlciIsImlzRmluaXRlIiwidWxlbiIsImYyIiwiZjJsZiIsImYyMSIsImZmNCIsImFucyIsIm90c3VtIiwidHdhMSIsInQxIiwieDEiLCJwcyIsInR1a2V5UWludiIsInZhbHgwIiwidmFseDEiLCJpdGVyIiwiaXNVc2FibGUiLCJhZGQiLCJzdWJ0cmFjdCIsImRpdmlkZSIsIm11bHRpcGx5IiwibnJlc2NvbHMiLCJyZXNjb2xzIiwib3V0ZXIiLCJkb3QiLCJsZWZ0IiwicmlnaHQiLCJub3JtIiwibm5vcm0iLCJpc05hTiIsImFuZ2xlIiwiYWNvcyIsImF1ZyIsIm5ld2FyciIsImdhdXNzX2pvcmRhbiIsImRldCIsImRldGVybWluYW50Iiwic3VibWF0cml4Iiwic2lnbiIsImdhdXNzX2VsaW1pbmF0aW9uIiwibWF1ZyIsInBpdm90IiwidGVtcCIsInkyIiwibWF4cm93IiwidHJpYVVwU29sdmUiLCJwYXJ0cyIsIm1hdHJpeF9tb2RlIiwidHJpYUxvd1NvbHZlIiwibHUiLCJSIiwiY2hvbGVza3kiLCJUIiwiZ2F1c3NfamFjb2JpIiwieHYiLCJ4ayIsImdhdXNzX3NlaWRlbCIsIlNPUiIsImhvdXNlaG9sZGVyIiwiUVIiLCJsc3RzcSIsImFycmF5X21vZGUiLCJRIiwiYXR0cnMiLCJRMSIsIlJJIiwiSSIsIkFqIiwiY0FpIiwiSWoiLCJjSWkiLCJSX0kiLCJRMiIsImphY29iaSIsIm1heGltIiwidGhldGEiLCJjb25kaXRpb24iLCJldiIsInJ1bmdla3V0dGEiLCJ0X2oiLCJ1X2oiLCJvcmRlciIsImsxIiwiazIiLCJrMyIsInJvbWJlcmciLCJoMSIsImciLCJyaWNoYXJkc29uIiwiWCIsInBvcyIsInkxIiwiaF9taW4iLCJzaW1wc29uIiwiaGVybWl0ZSIsIkYiLCJkRiIsImRsIiwibGFncmFuZ2UiLCJjdWJpY19zcGxpbmUiLCJzcSIsImdhdXNzX3F1YWRyYXR1cmUiLCJQQ0EiLCJ0ZW1wMSIsIkJ0IiwiRCIsInRlbXAyIiwiWSIsIkMiLCJWdCIsImRpZmZlcmVuY2VPZlByb3BvcnRpb25zIiwicDEiLCJuMSIsInAyIiwibjIiLCJwb29sZWQiLCJ6c2NvcmUiLCJ6dGVzdCIsInNpZGVzIiwidHNjb3JlIiwidHRlc3QiLCJhbm92YWZzY29yZSIsImV4cFZhciIsInNhbXBNZWFuIiwic2FtcFNhbXBNZWFuIiwidG1wYXJncyIsInVuZXhwVmFyIiwiYW5vdmFmdGVzdCIsImZ0ZXN0IiwiZnNjb3JlIiwiYW5vdmFmdGVzIiwicXNjb3JlIiwibWVhbjEiLCJtZWFuMiIsInNkIiwicXRlc3QiLCJ0dWtleWhzZCIsImFycmF5cyIsIm1lYW5zIiwibm9ybWFsY2kiLCJjaGFuZ2UiLCJ0Y2kiLCJzaWduaWZpY2FudCIsInB2YWx1ZSIsIm9uZVNpZGVkRGlmZmVyZW5jZU9mUHJvcG9ydGlvbnMiLCJ0d29TaWRlZERpZmZlcmVuY2VPZlByb3BvcnRpb25zIiwibW9kZWxzIiwib2xzIiwiZW5kb2ciLCJleG9nIiwibm9icyIsImRmX21vZGVsIiwiZGZfcmVzaWQiLCJjb2VmIiwicHJlZGljdCIsInJlc2lkIiwieWJhciIsIlNTRSIsIlNTUiIsIlNTVCIsIlIyIiwidF90ZXN0IiwibW9kZWwiLCJ2YXJfY291bnQiLCJzdWJNb2RlbExpc3QiLCJlbmRvZ19pbmRleCIsImV4b2dfaW5kZXgiLCJmaWx0ZXIiLCJzaWdtYUhhdCIsInNlQmV0YUhhdCIsIm1vZCIsInRTdGF0aXN0aWMiLCJwVmFsdWUiLCJsZWZ0cHBmIiwiaW50ZXJ2YWw5NSIsInNlIiwiRl9zdGF0aXN0aWMiLCJGX3Rlc3QiLCJhZGp1c3RfUjIiLCJidWlsZHhtYXRyaXgiLCJtYXRyaXhSb3dzIiwiYnVpbGRkeG1hdHJpeCIsImJ1aWxkanhtYXRyaXgiLCJqTWF0IiwicGFzcyIsImJ1aWxkeW1hdHJpeCIsImJ1aWxkanltYXRyaXgiLCJtYXRyaXhtdWx0IiwicmVncmVzcyIsImpNYXRYIiwiak1hdFkiLCJpbm5lcmludiIsInh0cmFuc3B4aW52IiwieHRyYW5zcCIsIm5leHQiLCJyZWdyZXNzdCIsImNvbXBpbGUiLCJqTWF0WUJhciIsInlCYXIiLCJ5QXZlcmFnZSIsImFub3ZhIiwicmVzaWR1YWxzIiwic3NyIiwibXNyIiwic3NlIiwibXNlIiwic3N0IiwibXN0IiwicjIiLCJmcmF0aW8iLCJybXNlIiwicjJhZGoiLCJzdGF0cyIsInNkcyIsInRzIiwiY292YXIiLCJ4dHJhbnNweCIsImlubmVyIiwibWF0cml4c3VidHJhY3QiLCJzdHlsZXNJbkRPTSIsImdldEluZGV4QnlJZGVudGlmaWVyIiwiaWRlbnRpZmllciIsIm1vZHVsZXNUb0RvbSIsIm9wdGlvbnMiLCJpZENvdW50TWFwIiwiaWRlbnRpZmllcnMiLCJiYXNlIiwiaW5kZXhCeUlkZW50aWZpZXIiLCJjc3MiLCJzb3VyY2VNYXAiLCJyZWZlcmVuY2VzIiwidXBkYXRlciIsImFkZEVsZW1lbnRTdHlsZSIsImJ5SW5kZXgiLCJhcGkiLCJkb21BUEkiLCJ1cGRhdGUiLCJuZXdPYmoiLCJyZW1vdmUiLCJsYXN0SWRlbnRpZmllcnMiLCJuZXdMaXN0IiwibmV3TGFzdElkZW50aWZpZXJzIiwiX2kiLCJfaW5kZXgiLCJtZW1vIiwiaW5zZXJ0Iiwic3R5bGUiLCJ0YXJnZXQiLCJzdHlsZVRhcmdldCIsInF1ZXJ5U2VsZWN0b3IiLCJIVE1MSUZyYW1lRWxlbWVudCIsImNvbnRlbnREb2N1bWVudCIsImhlYWQiLCJnZXRUYXJnZXQiLCJhcHBlbmRDaGlsZCIsImVsZW1lbnQiLCJjcmVhdGVFbGVtZW50Iiwic2V0QXR0cmlidXRlcyIsImF0dHJpYnV0ZXMiLCJzdHlsZUVsZW1lbnQiLCJub25jZSIsInNldEF0dHJpYnV0ZSIsImluc2VydFN0eWxlRWxlbWVudCIsInN0eWxlVGFnVHJhbnNmb3JtIiwicGFyZW50Tm9kZSIsInJlbW92ZUNoaWxkIiwicmVtb3ZlU3R5bGVFbGVtZW50Iiwic3R5bGVTaGVldCIsImNzc1RleHQiLCJmaXJzdENoaWxkIiwiY3JlYXRlVGV4dE5vZGUiLCJfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX18iLCJfX3dlYnBhY2tfcmVxdWlyZV9fIiwibW9kdWxlSWQiLCJjYWNoZWRNb2R1bGUiLCJsb2FkZWQiLCJfX3dlYnBhY2tfbW9kdWxlc19fIiwiYW1kTyIsImdldHRlciIsIl9fZXNNb2R1bGUiLCJkZWZpbml0aW9uIiwia2V5IiwibyIsImRlZmluZVByb3BlcnR5IiwiZW51bWVyYWJsZSIsImdldCIsImNodW5rSWQiLCJnbG9iYWxUaGlzIiwiRnVuY3Rpb24iLCJobWQiLCJjaGlsZHJlbiIsInByb3AiLCJoYXNPd25Qcm9wZXJ0eSIsIlN5bWJvbCIsInRvU3RyaW5nVGFnIiwic2NyaXB0VXJsIiwic2NyaXB0cyIsImdldEVsZW1lbnRzQnlUYWdOYW1lIiwiYmFzZVVSSSIsIm5jIiwiZ3JvayIsInVpIiwiREciLCJDb2x1bW4iLCJmcm9tSW50MzJBcnJheSIsImZyb21GbG9hdDMyQXJyYXkiLCJOVU1fVFlQRSIsIkZMT0FUX0NPTFVNTl9UWVBFIiwiSU5UX0NPTFVNTl9UWVBFIiwiRkxPQVRfQ09MVU1OU19UWVBFIiwiTkVXX0ZMT0FUX0NPTFVNTlNfVFlQRSIsIklOVF9DT0xVTU5TX1RZUEUiLCJORVdfSU5UX0NPTFVNTlNfVFlQRSIsIk5FV19GTE9BVF9DT0xVTU5fVFlQRSIsIk5FV19JTlRfQ09MVU1OX1RZUEUiLCJDT0xVTU4iLCJDQUxMX1JFU1VMVCIsIk5VTV9PRl9ST1dTIiwiTlVNX09GX0NPTFVNTlMiLCJSRUYiLCJWQUxVRSIsIlRBQkxFX09GX0NPTFVNTlMiLCJPQkpFQ1RTIiwiSU5UX1RZUEUiLCJET1VCTEVfVFlQRSIsImFyZ3NTcGVjaWZpY2F0aW9uIiwiaW5wdXRWYWxzIiwicmVmIiwiY3BwRnVuY0lucHV0IiwiZ2V0UmF3RGF0YSIsInRvTGlzdCIsInZhbDEiLCJ2YWwyIiwiZnVuY1NwZWNpZmljYXRpb24iLCJkYXRhRnJvbVdlYldvcmtlciIsIl9jYWxsUmVzdWx0IiwiY2FsbFJlc3VsdCIsImZ1bmNTcGVjaWZpY2F0aW9uQXJncyIsImFyZ3NBZnRlcldhc21DYWxsIiwidHlwZVRvQ29sdW1uQ3JlYXRvck1hcCIsIm5hbWUiLCJuYW1lcyIsImNvbHVtbnMiLCJleHRyYWN0TmV3bHlDcmVhdGVkRGF0YSIsIm91dFB1dCIsIm91dHB1dCIsInR5cGVUb0RhdGFGaWVsZE1hcCIsInNvdXJjZSIsIkRhdGFGcmFtZSIsImZyb21Db2x1bW5zIiwiYXJyYXlUb1JldHVybiIsImdldE91dHB1dCIsImNsZWFyTmV3bHlDcmVhdGVkRGF0YSIsIkNPTVBfTUlOIiwiU0FNUExFU19DT1VOVF9NSU4iLCJGRUFUVVJFU19DT1VOVF9NSU4iLCJQRVJDRU5UQUdFX01JTiIsIlBFUkNFTlRBR0VfTUFYIiwiTUFYX0VMRU1FTlRTX0NPVU5UIiwiQ09NUF9QT1NJVFZFX01FUyIsIkNPTVBfRVhDRVNTIiwiSU5DT1JFUlJFQ1RfTUlOX01BWF9NRVMiLCJJTkNPUkVSUkVDVF9GRUFUVVJFU19NRVMiLCJJTkNPUkVSUkVDVF9TQU1QTEVTX01FUyIsIklOQ09SRVJSRUNUX1BFUkNFTlRBR0VfTUVTIiwiREFUQUZSQU1FX0lTX1RPT19CSUdfTUVTIiwiVU5TVVBQT1JURURfQ09MVU1OX1RZUEVfTUVTIiwiY2hlY2tDb2x1bW5UeXBlIiwiY2hlY2tNaXNzaW5nVmFscyIsIm1pc3NpbmdWYWx1ZUNvdW50IiwiZmVhdHVyZXMiLCJjb21wb25lbnRzIiwiY2hlY2tEaW1lbnNpb25SZWR1Y2VySW5wdXRzIiwiX19hd2FpdGVyIiwidGhpc0FyZyIsIl9hcmd1bWVudHMiLCJQIiwiZ2VuZXJhdG9yIiwiZnVsZmlsbGVkIiwicmVqZWN0ZWQiLCJkb25lIiwiU1ZNX0dFTl9GRUFUVVJFU19JTkRFWCIsIlNWTV9HRU5fTEFCRUxTX0lOREVYIiwiU1ZNX0ZFQVRVUkVfTkFNRSIsIlNWTV9MQUJFTF9OQU1FIiwidGVzdERhdGFGb3JCaW5hcnlDbGFzc2lmaWNhdGlvbiIsImtlcm5lbCIsImtlcm5lbFBhcmFtcyIsInNhbXBsZXNDb3VudCIsImZlYXR1cmVzQ291bnQiLCJ2aW9sYXRvcnNQZXJjZW50YWdlIiwiY2hlY2tHZW5lcmF0b3JTVk1pbnB1dHMiLCJrZXJuZWxQYXJhbXNDb2wiLCJfb3V0cHV0IiwiX3Byb21pc2UiLCJhc3luYyIsIndvcmtlciIsIldvcmtlciIsIlVSTCIsInBvc3RNZXNzYWdlIiwiRURBIiwib25tZXNzYWdlIiwidGVybWluYXRlIiwiX2dlbmVyYXRlRGF0YXNldEluV2ViV29ya2VyIiwiX3Jlc3VsdCIsIl9lcnJvciIsIkxJTkVBUiIsIlBPTFlOT01JQUwiLCJSQkYiLCJTSUdNT0lEIiwiQ09ORlVTSU9OX01BVFJfU0laRSIsIk5PUk1BTElaRURfREFUQV9JTkRFWCIsIk1FQU5TX0lOREVYIiwiU1REX0RFVlNfSU5ERVgiLCJNT0RFTF9QQVJBTVNfSU5ERVgiLCJNT0RFTF9XRUlHSFRTX0lOREVYIiwiUFJFRElDVEVEX0xBQkVMU19JTkRFWCIsIkNPUlJFQ1RORVNTX0lOREVYIiwiQ09ORlVTSU9OX01BVFJJWF9JTkRFWCIsIlRSVUVfUE9TSVRJVkVfSU5ERVgiLCJGQUxTRV9ORUdBVElWRV9JTkRFWCIsIkZBTFNFX1BPU0lUSVZFX0lOREVYIiwiVFJVRV9ORUdBVElWRV9JTkRFWCIsIlJCRl9TSUdNQV9JTkRFWCIsIlBPTFlOT01JQUxfQ19JTkRFWCIsIlBPTFlOT01JQUxfRF9JTkRFWCIsIlNJR01PSURfS0FQUEFfSU5ERVgiLCJTSUdNT0lEX1RIRVRBX0lOREVYIiwiR0FNTUFfSU5GSU1VTV9MSU1JVCIsIlJCRl9TSUdNQV9JTkZJTVVNX0xJTUlUIiwiUE9MWU5PTUlBTF9DX0lORklNVU1fTElNSVQiLCJQT0xZTk9NSUFMX0RfSU5GSU1VTV9MSU1JVCIsIldST05HX0dBTU1BX01FU1NBR0UiLCJXUk9OR19SQkZfU0lHTUFfTUVTU0FHRSIsIldST05HX1BPTFlOT01JQUxfQ19NRVNTQUdFIiwiV1JPTkdfUE9MWU5PTUlBTF9EX01FU1NBR0UiLCJXUk9OR19LRVJORUxfTUVTU0FHRSIsIkxBQkVMUyIsIlBSRURJQ1RFRCIsIkNPUlJFQ1RORVNTIiwiQ09ORlVTSU9OX01BVFJJWF9OQU1FIiwiTUVBTiIsIlNURF9ERVYiLCJNT0RFTF9QQVJBTVNfTkFNRSIsIk1PREVMX1dFSUdIVFNfTkFNRSIsIkdBTU1BIiwiS0VSTkVMIiwiS0VSTkVMX1BBUkFNUyIsIktFUk5FTF9QQVJBTV8xIiwiS0VSTkVMX1BBUkFNXzIiLCJGRUFUVVJFU19DT1VOVF9OQU1FIiwiVFJBSU5fU0FNUExFU19DT1VOVF9OQU1FIiwiVFJBSU5fRVJST1IiLCJLRVJORUxfVFlQRV9UT19OQU1FX01BUCIsIlBPU0lUSVZFX05BTUUiLCJORUdBVElWRV9OQU1FIiwiUFJFRElDVEVEX1BPU0lUSVZFX05BTUUiLCJQUkVESUNURURfTkVHQVRJVkVfTkFNRSIsIlNFTlNJVElWSVRZIiwiU1BFQ0lGSUNJVFkiLCJCQUxBTkNFRF9BQ0NVUkFDWSIsIlBPU0lUSVZFX1BSRURJQ1RJVkVfVkFMVUUiLCJORUdBVElWRV9QUkVESUNUSVZFX1ZBTFVFIiwiTUxfUkVQT1JUIiwiTUxfUkVQT1JUX1BSRURJQ1RFRF9MQUJFTFMiLCJNTF9SRVBPUlRfVFJBSU5fTEFCRUxTIiwiTUxfUkVQT1JUX0NPUlJFQ1RORVNTIiwiUFJFRElDVElPTiIsIkJZVEVTIiwiSU5UU19DT1VOVCIsIktFUl9QQVJBTVNfQ09VTlQiLCJNT0RFTF9LRVJORUxfSU5ERVgiLCJTQU1QTEVTX0NPVU5UX0lOREVYIiwiRkVBVFVSRVNfQ09VTlRfSU5ERVgiLCJJTklUX1ZBTFVFIiwiTFNfU1ZNX0FERF9DT05TVCIsImdldFRyYWluZWRNb2RlbCIsImh5cGVycGFyYW1ldGVycyIsInByZWRpY3RDb2x1bW4iLCJsYWJlbHMiLCJieU5hbWUiLCJkYXRhc2V0IiwiY1BhcmFtIiwiZFBhcmFtIiwiY2hlY2tIeXBlcnBhcmFtZXRlcnMiLCJrZXJuZWxQYXJhbXNBcnJheSIsImthcHBhIiwidHJhaW5Db2xzIiwibW9kZWxQYXJhbXNDb3VudCIsInByZWNvbXB1dGVkV2VpZ2h0c0NvdW50IiwiY29uZnVzaW9uTWF0cml4RWxlbWVudHNDb3VudCIsIl90cmFpbkFuZEFuYWx5emVMU1NWTUluV2ViV29ya2VyIiwidHJhaW5HYW1tYSIsImtlcm5lbFR5cGUiLCJ0cmFpbkxhYmVscyIsIm5vcm1hbGl6ZWRUcmFpbkRhdGEiLCJzdGREZXZzIiwibW9kZWxQYXJhbXMiLCJtb2RlbFdlaWdodHMiLCJwcmVkaWN0ZWRMYWJlbHMiLCJjb3JyZWN0bmVzcyIsImNvbmZ1c2lvbk1hdHJpeCIsInRyYWluRXJyb3IiLCJ0cmFpblNhbXBsZXNDb3VudCIsIlRQIiwiVE4iLCJGUCIsIkZOIiwiVFBSIiwiVE5SIiwiUFBWIiwiTlBWIiwiQUNDIiwiQkEiLCJzZW5zaXRpdml0eSIsInNwZWNpZmljaXR5IiwiYmFsYW5jZWRBY2N1cmFjeSIsInBvc2l0aXZlUHJlZGljaXR2ZVZhbHVlIiwibmVnYXRpdmVQcmVkaWNpdHZlVmFsdWUiLCJldmFsdWF0ZUFjY3VyYWN5IiwidHJhaW5BbmRBbmFseXplTW9kZWwiLCJzaG93VHJhaW5SZXBvcnQiLCJkZlZpZXciLCJhZGRWaWV3ZXIiLCJnZXRNb2RlbEluZm8iLCJ0aXRsZSIsImNvbG9yIiwiZ2V0Q29uZnVzaW9uTWF0cml4REYiLCJnZXRQYWNrZWRNb2RlbCIsImRhdGFDb2xzIiwib2Zmc2V0IiwiaW50cyIsImZsb2F0cyIsImdldFByZWRpY3Rpb24iLCJwYWNrZWRNb2RlbCIsIm1vZGVsQnl0ZXMiLCJoZWFkZXIiLCJnZXRVbnBhY2tlZE1vZGVsIiwibm9ybWFsaXplZERhdGEiLCJwcmVjb21wdXRlZFdlaWdodHMiLCJ0YXJnZXREYXRhIiwiX3ByZWRpY3RCeUxTU1ZNSW5XZWJXb3JrZXIiLCJQTFNfQU5BTFlTSVMiLCJFUlJPUl9NU0ciLCJUSVRMRSIsIkhJTlQiLCJMSU5LIiwiQ09NUE9ORU5UUyIsIlJFU1VMVF9OQU1FUyIsIldBU01fT1VUUFVUX0lEWCIsIklOVCIsIlRJTUVPVVQiLCJSQURJVVMiLCJMSU5FX1dJRFRIIiwiWF9DT09SRCIsIllfQ09PUkQiLCJDT0xPUiIsIkRFTU9fSU5UUk9fTUQiLCJERU1PX1JFU1VMVFMiLCJjYXB0aW9uIiwiTU9ERUwiLCJ0ZXh0IiwiU0NPUkVTIiwiTE9BRElOR1MiLCJSRUdSX0NPRUZTIiwiRVhQTF9WQVIiLCJERU1PX1JFU1VMVFNfTUQiLCJNVkEiLCJnZXRQbHNBbmFseXNpcyIsImlucHV0IiwidGFibGUiLCJjb21wb25lbnRzQ291bnQiLCJwcmVkaWN0aW9uIiwicmVncmVzc2lvbkNvZWZmaWNpZW50cyIsIlJFR1JfQ09FRkZTIiwidFNjb3JlcyIsIlRfU0NPUkVTIiwidVNjb3JlcyIsIlVfU0NPUkVTIiwieExvYWRpbmdzIiwiWF9MT0FESU5HUyIsInlMb2FkaW5ncyIsIllfTE9BRElOR1MiLCJydW5NVkEiLCJhbmFseXNpc1R5cGUiLCJOT19ERiIsInJvd0NvdW50IiwiRU1QVFlfREYiLCJudW1Db2xOYW1lcyIsIm51bUNvbHMiLCJzdHJDb2xzIiwiaXNWYWxpZE51bWVyaWMiLCJOT19DT0xTIiwiT05FX0NPTCIsInByZWRpY3RJbnB1dCIsIlBSRURJQ1QiLCJ1cGRhdGVJcHV0cyIsInNldFRvb2x0aXAiLCJmZWF0dXJlc0lucHV0IiwiVVNJTkciLCJhdmFpbGFibGUiLCJvbklucHV0IiwiRkVBVFVSRVMiLCJERUZBVUxUIiwiY29tcG9uZW50c0lucHV0IiwiaW5wdXRUeXBlIiwiZGVmYXVsdFZhbHVlIiwic2hvd1BsdXNNaW51cyIsIk1JTiIsImRsZ1RpdGxlIiwiZGxnSGVscFVybCIsImRsZ1J1bkJ0blRvb2x0aXAiLCJDT01QVVRFX0NPTVBPTkVOVFMiLCJQTFMiLCJkbGciLCJnZXRCdXR0b24iLCJSVU4iLCJkaXNhYmxlZCIsIm5hbWVzSW5wdXRzIiwiTkFNRVMiLCJyb290IiwiaGlkZGVuIiwiaGVscFVybCIsImFkZEJ1dHRvbiIsImNsb3NlIiwicGxzQ29scyIsImZlYXR1cmVzTmFtZXMiLCJwcmVmaXgiLCJQUkVGSVgiLCJYU0NPUkUiLCJnZXRVbnVzZWROYW1lIiwidmlldyIsIkZFQVRVUkUiLCJYTE9BRElORyIsInByZWQiLCJTVUZGSVgiLCJwcmVkaWN0VnNSZWZlclNjYXR0ZXIiLCJ4Q29sdW1uTmFtZSIsInlDb2x1bW5OYW1lIiwic2hvd1JlZ3Jlc3Npb25MaW5lIiwibWFya2VyVHlwZSIsImhlbHAiLCJyZWdyQ29lZmZzQmFyIiwic3BsaXRDb2x1bW5OYW1lIiwidmFsdWVDb2x1bW5OYW1lIiwidmFsdWVBZ2dyVHlwZSIsIkNPRUZGUyIsInNob3dWYWx1ZVNlbGVjdG9yIiwic2hvd1N0YWNrU2VsZWN0b3IiLCJsb2FkaW5nc1NjYXR0ZXIiLCJzY29yZU5hbWVzIiwiWVNDT1JFIiwic2NvcmVzU2NhdHRlciIsInNob3dWaWV3ZXJGb3JtdWxhTGluZXMiLCJsaW5lcyIsImFkZExpbmUiLCJmb3JtdWxhIiwicmFkaXVzIiwid2lkdGgiLCJ2aXNpYmxlIiwiQ0lSQ0xFIiwieE5hbWUiLCJBWElTIiwieU5hbWUiLCJtZXRhIiwiZm9ybXVsYUxpbmVzIiwiYWRkQWxsIiwieUV4cGxWYXJzIiwiY29tcE5hbWVzIiwieEV4cGxWYXJzIiwiQ09NUCIsImNvbXAiLCJDT01QUyIsImV4cGxWYXJzREYiLCJleHBsVmFyc0JhciIsIkVYUExfVkFSUyIsInNob3dDYXRlZ29yeVNlbGVjdG9yIiwiREVNTyIsInBhZ2VzIiwidmlld2VyIiwic2hvd05leHRUbyIsIkVYUExPUkUiLCJwZXJmb3JtTVZBIiwic2hvdyIsImNoZWNrU2lnbmlmaWNhbmNlTGV2ZWwiLCJJTkNPUlJFQ1RfU0lHTklGSUNBTkNFX0xFVkVMIiwiZ2V0VmFyaWFuY2UiLCJJTkNPUlJFQ1RfU0FNUExFX1NJWkUiLCJzdW1PZlNxdWFyZXMiLCJhcmVWYXJzRXF1YWwiLCJ4RGF0YSIsInlEYXRhIiwieFZhciIsInlWYXIiLCJGYWN0b3JpemVkRGF0YSIsImNhdGVnb3JpZXMiLCJ2YWx1ZXMiLCJjaGVja05vcm1hbGl0eSIsImlzTm9ybURpc3RyaWIiLCJOT05fRVFVQUxfRkFDVE9SU19WQUxVRVNfU0laRSIsInNldFN0YXRzIiwiaXNOb3JtYWwiLCJLIiwiY2F0Q291bnQiLCJzdW1zIiwic3Vtc09mU3F1YXJlcyIsInN1YlNhbXBsZVNpemVzIiwiZ2V0T25lV2F5QW5vdmEiLCJBTk9WQV9GQUlMRURfSlVTVF9PTkVfQ0FUIiwiYnVmIiwic3NUb3QiLCJzc0JuIiwic3NXbiIsImRmQm4iLCJkZlduIiwibXNCbiIsIm1zV24iLCJmU3RhdCIsImRmVG90IiwiX2NoZWNrTm9ybWFsaXR5IiwiX2FscGhhIiwiY2F0cyIsImZpbGwiLCJVTlNVUFBPUlRFRF9DT0xVTU5fVFlQRSIsImdldERic2NhbldvcmtlciIsImVtYmVkWCIsImVtYmVkWSIsImVwc2lsb24iLCJtaW5QdHMiLCJlcnJvciIsImNsdXN0ZXJzIiwiZ3B1QWRhcHRlciIsImdldEdQVUFkYXB0ZXJEZXNjcmlwdGlvbiIsIm5hdmlnYXRvciIsImdwdSIsInJlcXVlc3RBZGFwdGVyIiwicmVxdWVzdEFkYXB0ZXJJbmZvIiwiZGVzY3JpcHRpb24iLCJXRUJHU0xBR0dSRUdBVElPTiIsIldFQkdQVURJU1RBTkNFIiwiTWF0cml4TWF0cml4T3BUeXBlIiwiTWF0cml4T3BUeXBlIiwiTWF0cml4U2NhbGFyT3BUeXBlIiwiRGltUmVkdWN0aW9uTWV0aG9kcyIsIkVVQ0xJREVBTiIsIk1BTkhBVFRBTiIsIkhBTU1JTkciLCJUQU5JTU9UTyIsIkxFVkVOU1RFSU4iLCJORUVETEVNQU5fV1VOU0NIIiwiTU9OT01FUl9DSEVNSUNBTF9ESVNUQU5DRSIsIlNPS0FMIiwiQ09TSU5FIiwiQVNZTU1FVFJJQyIsIkRpZmZlcmVuY2UiLCJPbmVIb3QiLCJTZXQiLCJEQlNjYW5PcHRpb25zIiwidWlOYW1lIiwidG9vbHRpcCIsIkJZUEFTU19MQVJHRV9EQVRBX1dBUk5JTkciLCJTSE9XX1NDQVRURVJQTE9UX1BST0dSRVNTIiwiRGlzdGFuY2VBZ2dyZWdhdGlvbk1ldGhvZHMiLCJyeGpzIiwibGVhcm5pbmdSYXRlIiwibkVwb2NocyIsIm5OZWlnaGJvcnMiLCJzcHJlYWQiLCJtaW5EaXN0IiwicmFuZG9tU2VlZCIsInVzZVdlYkdQVSIsImRlc2MiLCJmb3JjZVJlbW92ZSIsInBlcnBsZXhpdHkiLCJNdWx0aUNvbHVtbkRpbVJlZHVjdGlvbkVkaXRvciIsImVkaXRvclNldHRpbmdzIiwiY29sdW1uT3B0RWRpdG9ycyIsImNvbHVtbk9wdEVkaXRvcnNSb290IiwiY29sdW1uUGFyYW1zRWRpdG9yUm9vdCIsIndlaWdodHNFZGl0b3JSb290IiwiY29sdW1uRnVuY3Rpb25zTWFwIiwibWV0aG9kc1BhcmFtcyIsImRiU2NhblBhcmFtcyIsIm1ldGhvZFNldHRpbmdzRGl2IiwiZGJTY2FuU2V0dGluZ3NEaXYiLCJzdXBwb3J0ZWRGdW5jdGlvbnMiLCJwbG90RW1iZWRkaW5nc0lucHV0IiwiY2x1c3RlckVtYmVkZGluZ3NJbnB1dCIsImFnZ3JlZ2F0aW9uTWV0aG9kSW5wdXQiLCJvbkNvbHVtbnNDaGFuZ2VkIiwiU3ViamVjdCIsImNvbHVtblBhcmFtc0VkaXRvckFjY29yZGlvbiIsInRhZ3MiLCJzZW1UeXBlcyIsImZyaWVuZGx5TmFtZSIsInR5cGVzIiwidW5pdHMiLCJkaXN0YW5jZUZ1bmN0aW9ucyIsInNlbXR5cGUiLCJpbmNsdWRlcyIsInBvc3RQcm9jZXNzaW5nRWRpdG9yIiwiUG9zdFByb2Nlc3NpbmdGdW5jRWRpdG9yIiwidGFibGVJbnB1dCIsIm9uVGFibGVJbnB1dENoYW5nZWQiLCJzZXR0aW5nc09wZW5lZCIsImRiU2NhblNldHRpbmdzT3BlbmVkIiwibWV0aG9kSW5wdXQiLCJjcmVhdGVBbGdvcml0aG1TZXR0aW5nc0RpdiIsIm1ldGhvZFNldHRpbmdzSWNvbiIsImRiU2NhblNldHRpbmdzSWNvbiIsImNsYXNzTGlzdCIsInByZXBlbmQiLCJhZGRQYW5lIiwiZGlzcGxheSIsImtleXMiLCJmdW5jTmFtZSIsInNlbVR5cGVTdXBwb3J0ZWQiLCJzZW1UeXBlIiwidHlwZVN1cG9ydGVkIiwidW5pdHNTdXBwb3J0ZWQiLCJnZXRUYWciLCJzdXBwb3J0ZWRDb2xOYW1lcyIsImNvbHVtbnNJbnB1dCIsImVkaXRvcldpZHRocyIsIkRpbVJlZHVjdGlvbkNvbHVtbkVkaXRvciIsIml0IiwiZWRpdG9yVGl0bGVzIiwibWFyZ2luIiwiZWRpdG9yVGl0bGVSb290IiwiY2xhc3NlcyIsImVkaXRvcnNSb290IiwibWF4SGVpZ2h0Iiwib3ZlcmZsb3ciLCJlZGl0b3IiLCJhY2NvcmRpb25EaXYiLCJmaXJlQ2hhbmdlZCIsImNvbHVtbnNJbnB1dFJvb3QiLCJmcm9tIiwicGFyYW1zRm9ybSIsInBhcmFtcyIsInBhcmFtIiwiYXBwZW5kIiwiYWxnb3JpdGhtT3B0aW9ucyIsImFsZ29yaXRobVBhcmFtcyIsImRiU2Nhbk9wdGlvbnMiLCJkYlNjYW5FcHNpbG9uIiwiZGJTY2FuTWluUHRzIiwiZ2V0RWRpdG9yIiwibWluV2lkdGgiLCJnZXRQYXJhbXMiLCJtZXRob2ROYW1lIiwicHJlcHJvY2Vzc2luZ0Z1bmN0aW9ucyIsInByZVByb2Nlc3NpbmdGdW5jdGlvbiIsImRpc3RhbmNlTWV0cmljcyIsInNpbWlsYXJpdHlNZXRyaWNJbnB1dCIsIndlaWdodHMiLCJ3ZWlnaHQiLCJwcmVwcm9jZXNzaW5nRnVuY0FyZ3MiLCJwcmVwcm9jZXNzaW5nRnVuY3Rpb25TZXR0aW5ncyIsInBsb3RFbWJlZGRpbmdzIiwiY2x1c3RlckVtYmVkZGluZ3MiLCJwb3N0UHJvY2Vzc2luZ0Z1bmN0aW9uIiwicG9zdFByb2Nlc3NpbmdGdW5jdGlvbkFyZ3MiLCJhZ2dyZWFnZ3JlZ2F0aW9uTWV0aG9kIiwicHJlcHJvY2Vzc2luZ0Z1bmNTZXR0aW5nc0RpdiIsImVkaXRvckRpdiIsImhhc0V4dHJhU2V0dGluZ3MiLCJmdW5jdGlvbnNNYXAiLCJuZWVkc0NvbmZpZ3VyYXRpb24iLCJ3ZWlnaHRJbnB1dCIsImdldEZ1bmNOYW1lIiwicHJlcHJvY2Vzc2luZ0Z1bmN0aW9uSW5wdXQiLCJpbnB1dHMiLCJzdXBGIiwiZmluZCIsImdldFNpbWlsYXJpdHlNZXRyaWNJbnB1dCIsInByZXByb2Nlc3NpbmdGdW5jU2V0dGluZ3NJY29uIiwiY3JlYXRlU2V0dGluZ3NEaXYiLCJjb2x1bW5UaXRsZSIsImNvbE9wdEVkaXRvcnMiLCJzaW1pbGFyaXR5TWV0cmljSW5wdXRSb290IiwiZGlzdGFuY2VPcHRpb25zRGl2IiwicHJlRnVuYyIsImZjIiwicHJlcGFyZSIsImJ1aWxkRWRpdG9yIiwiZklucHV0IiwiaW5wdXRQYXJhbXMiLCJpbnAiLCJwcm9wZXJ0eSIsIm9uQ2hhbmdlZCIsIm1hcmdpbkJvdHRvbSIsInBvc3RQcm9jZXNzaW5nRnVuY3Rpb25zTWFwIiwiX3Jvb3QiLCJfcG9zdFByb2Nlc3NpbmdBcmdzIiwiX2FyZ3NFbGVtZW50IiwiX3NldHRpbmdzT3BlbmVkIiwiX3NldHRpbmdzSWNvbiIsImRlZmF1bHRQb3N0UHJvY2Vzc2luZ0Z1bmMiLCJwb3N0UHJvY2Vzc2luZ0Z1bmN0aW9uSW5wdXQiLCJvbkZ1bmN0aW9uQ2hhbmdlZCIsIm51bGxhYmxlIiwiRElNRU5TSU9OQUxJVFlfUkVEVUNFUl9URVJNSU5BVEVfRVZFTlQiLCJpc05pbCIsImdldEVtYmVkZGluZ1ZpZXdlck5hbWUiLCJtZXRob2QiLCJDT1BZX1NVRkZJWCIsIktOTl9JTVBVVEVSIiwiU1VQUE9SVEVEX0NPTFVNTl9UWVBFUyIsImdldE51bGxWYWx1ZSIsIk1FVFJJQ19UWVBFIiwiRElTVEFOQ0VfVFlQRSIsIk1JTl9ORUlHSEJPUlMiLCJhcmVUaGVyZUZhaWxzIiwidGFyZ2V0Q29sTmFtZXMiLCJmZWF0dXJlQ29sTmFtZXMiLCJtaXNWYWxzSW5kcyIsImhhcyIsImluZGljZXMiLCJmYWlsVG9JbXB1dGUiLCJmZWF0dXJlIiwiZmVhdHVyZUluZHMiLCJydW5LTk5JbXB1dGVyIiwiY29sc1dpdGhNaXNzaW5nVmFscyIsImF2YWlsYWJsZVRhcmdldENvbHNOYW1lcyIsImF2YWlsYWJsZUZlYXR1cmVDb2xzTmFtZXMiLCJNYXAiLCJudWxsVmFsdWUiLCJnZXRNaXNzaW5nVmFsc0luZGljZXMiLCJpblBsYWNlIiwiSU5fUExBQ0UiLCJpblBsYWNlSW5wdXQiLCJrZWVwRW1wdHkiLCJLRUVQX0VNUFRZIiwia2VlcEVtcHR5SW5wdXQiLCJuZWlnaGJvcnMiLCJORUlHSEJPUlMiLCJuZWlnaGJvcnNJbnB1dCIsImRpc3RUeXBlIiwiZGlzdFR5cGVJbnB1dCIsInRhcmdldENvbElucHV0IiwiY2hlY2tBcHBsaWNhYmlsaXR5IiwiY2hlY2tlZCIsInNlbGVjdGVkRmVhdHVyZUNvbE5hbWVzIiwibWV0cmljSW5mb0lucHV0cyIsImRpdiIsImhpZGVXaWRnZXRzIiwiZGlzdERpdiIsIm1ldHJpY3NEaXYiLCJmZWF0dXJlc01ldHJpY3MiLCJzZXR0aW5ncyIsImRlZmF1bHRXZWlnaHQiLCJXRUlHSFQiLCJkZWZhdWx0TWV0cmljIiwiT05FX0hPVCIsImF2YWlsYWJsZU1ldHJpY3MiLCJESUZGRVJFTkNFIiwiZ2V0RmVhdHVyZUlucHV0U2V0dGluZ3MiLCJkaXN0SW5mbyIsInNldHRpbmdzSWNvbiIsImRlbGV0ZSIsImZhaWxlZFRvSW1wdXRlIiwibWlzc2luZ1ZhbHNJbmRpY2VzIiwiZGlzdGFuY2UiLCJnZXRDb2wiLCJmcmVxdWVuY2llcyIsImZlYXR1cmVTb3VyY2UiLCJmZWF0dXJlTnVsbFZhbCIsIm1ldHJpY0Z1bmMiLCJmYWlsZWRUb0ltcHV0ZUluZGljZXMiLCJtZXRyaWNJbmZvIiwicHJvcGVySW5kaWNlcyIsImJ1ZmZlclZlY3RvciIsInByb3BlckluZGljZXNDb3VudCIsIm5lYXJlc3RJdGVtcyIsIm5lYXJlc3RJdGVtc0NvdW50IiwibWF4SW5kIiwibWF4RGlzdCIsImZpbGxWYWx1ZSIsImNvbXB1dGVCdWZmZXJWZWN0b3IiLCJjdXIiLCJwcm9wZXJJbmRleCIsImRpc3QiLCJjYW5JdGVtQmVVc2VkIiwiZ2V0RmlsbFZhbHVlIiwiZ2V0UHJvcGVySW5kZWNlcyIsImN1ckRpc3QiLCJtYXhGcmVxIiwibWF4RnJlcUlkeCIsIm1vc3RGcmVxdWVudE9mVGhlTmVhcmVzdEl0ZW1zIiwiY2xvbmUiLCJjb3B5TmFtZSIsImNvbnRhaW5zIiwiY29weVNvdXJjZSIsImltcHV0ZSIsImNvbE5hbWUiLCJmaWxsVmFsIiwicmF3IiwiZ2V0Rmlyc3ROb25OdWxsIiwiYXZnIiwiZ2V0RGVmYXVsdEZpbGxWYWx1ZSIsImltcHV0ZUZhaWxlZCIsIm1lc3NhZ2UiLCJNQ0xFZGl0b3IiLCJzdXBlciIsInNpbWlsYXJpdHlUaHJlc2hvbGRJbnB1dCIsIm1heEl0ZXJhdGlvbnNJbnB1dCIsInVzZVdlYkdQVUlucHV0IiwidGhyZXNob2xkIiwibWF4SXRlcmF0aW9ucyIsIkJpdEFycmF5IiwiX2xlbmd0aCIsIl92ZXJzaW9uIiwiX3VwZGF0ZUxldmVsIiwiX3NlbGVjdGVkQ291bnQiLCJfc2VsZWN0ZWRDb3VudFZlcnNpb24iLCJfc2VsZWN0ZWRJbmRleGVzVmVyc2lvbiIsIl92ZXJzaW9uZWROYW1lIiwiX3ZlcnNpb25lZE5hbWVWZXJzaW9uIiwiU0hSSU5LX1RIUkVTSE9MRCIsImJ1ZmYiLCJfY3JlYXRlQnVmZmVyIiwiX2RhdGEiLCJhc3N1cmVHb2V6IiwiYXJnTmFtZSIsImFzc3VyZUluUmFuZ2UiLCJkc3QiLCJjb3B5RnJvbSIsIm90aGVyIiwibGVuZ3RoSW5JbnRzIiwidmVyc2lvbiIsImluY3JlbWVudFZlcnNpb24iLCJub3RpZnkiLCJ2ZXJzaW9uZWROYW1lIiwic2V0TGVuZ3RoIiwibkludHNOZWVkZWQiLCJuZXdEYXRhIiwic3RhdGljIiwic2V0MSIsInNldDIiLCJzZXRCaXQiLCJmcm9tU2VxIiwiY2hhckF0IiwiYnl0ZXMiLCJudW0xIiwibnVtMiIsImNvdW50Qml0cyIsImVxdWFscyIsImdldEJpdCIsImJpdEFycmF5Iiwic2V0QWxsIiwiaW52ZXJ0IiwiZmxhZ3MiLCJzZXRJbmRleGVzIiwiaW5kZXhlcyIsInNldEZhc3QiLCJldmVyeUluZGV4IiwiYW55SW5kZXgiLCJzZXRXaGVyZSIsImNoZWNrIiwiYWxsb3dDbGVhciIsImdldFJhbmdlIiwidG8iLCJmcm9tVmFsdWVzIiwiZ2V0UmFuZ2VBc0xpc3QiLCJzZXRSYW5nZSIsInNldFRydWUiLCJzZXRGYWxzZSIsImFuZCIsImFuZE5vdCIsIm5vdEFuZCIsIm5vdCIsIm9yIiwieG9yIiwiaW5zZXJ0QXQiLCJvbGRsZW5ndGgiLCJyZW1vdmVBdCIsInJlbW92ZUJ5TWFzayIsIm1hc2siLCJkc3RJZHgiLCJzcmNJZHgiLCJmaW5kTmV4dCIsImJpdCIsInRydWVDb3VudCIsImZhbHNlQ291bnQiLCJfb25CaXRDb3VudCIsInJlbWFpbmluZ0JpdHMiLCJjb3VudFdoZXJlIiwiYW5kV2l0aENvdW50Qml0cyIsInNlY29uZCIsImFsbFRydWUiLCJhbGxGYWxzZSIsImFueVRydWUiLCJhbnlGYWxzZSIsInVudXNlZEJpdHMiLCJudW1JbnRzIiwiX2ZpcnN0T25CaXQiLCJmaW5kUHJldiIsIl9sYXN0T25CaXQiLCJTY2F0dGVyUGxvdEN1cnJlbnRMaW5lU3R5bGUiLCJTY2F0dGVyUGxvdExpbmVzUmVuZGVyZXIiLCJjdXJyZW50TGluZUlkIiwiX2N1cnJlbnRMaW5lSWR4Iiwic3AiLCJyZW5kZXIiLCJjdHgiLCJsaW5lc1RvUmVuZGVyIiwidXBkYXRlTGluZXMiLCJsaW5lc1Zpc2liaWxpdHkiLCJ2aXNpYmlsaXR5IiwieEF4aXMiLCJ5QXhpcyIsImN1cnJlbnRMaW5lU3R5bGUiLCJub25lIiwibGluZUNsaWNrZWQiLCJsaW5lSG92ZXIiLCJtb3VzZU92ZXJMaW5lSWQiLCJhcnJvd1dpZHRoIiwieEF4aXNDb2wiLCJkYXRhRnJhbWUiLCJ5QXhpc0NvbCIsImNhbnZhcyIsImdldEluZm8iLCJnZXRDb250ZXh0IiwiYXJyb3dTaXplIiwib25tb3VzZWRvd24iLCJldmVudCIsImNsaWVudFgiLCJjbGllbnRZIiwib25tb3VzZW1vdmUiLCJjaGVja0Nvb3Jkc09uTGluZSIsIm9mZnNldFgiLCJvZmZzZXRZIiwib25FdmVudCIsInN1YnNjcmliZSIsIl8iLCJyZW5kZXJMaW5lcyIsIm11bHRpcGxlTGluZXNDb3VudHMiLCJza2lwTXVsdGlMaW5lQ2FsY3VsYXRpb24iLCJjcmVhdGVNdWx0aUxpbmVzSW5kaWNlcyIsIl9kIiwiX2UiLCJfZiIsIl9nIiwiX2giLCJfaiIsIl9sIiwiX20iLCJfbyIsInNwTG9vayIsImdldE9wdGlvbnMiLCJsb29rIiwiaW5kaXZpZHVhbExpbmVTdHlsZXMiLCJjb2xvcnMiLCJvcGFjaXRpZXMiLCJkcmF3QXJyb3dzQXJyIiwibGluZVdpZHRoIiwic3Ryb2tlU3R5bGUiLCJvcGFjaXR5IiwibWFya2VyU2l6ZUNvbCIsImxpbmVMZW4iLCJzaXplRnJvbSIsInNpemVUbyIsImdldE1hcmtlcnNTaXplcyIsInBvaW50RnJvbSIsIndvcmxkVG9TY3JlZW4iLCJhWCIsImFZIiwicG9pbnRUbyIsImJYIiwiYlkiLCJtaW5BeGlzIiwidmlld0JveCIsImhlaWdodCIsImJlZ2luUGF0aCIsImh5cG90Iiwid2lkdGhzIiwidG9nZ2xlQ3VycmVudExpbmVTdHlsZSIsIm11bHRpTGluZXMiLCJjb250cm9sUG9pbnQiLCJnZXRMaW5lTGVuZ3RoIiwic3RhcnRQb2ludFdpdGhNYXJrZXIiLCJnZXRQb2ludE9uRGlzdGFuY2UiLCJlbmR0UG9pbnRXaXRoTWFya2VyIiwiZmluZENvbnRyb2xQb2ludCIsIm1vdmVUbyIsInF1YWRyYXRpY0N1cnZlVG8iLCJsaW5lVG8iLCJkcmF3QXJyb3dzIiwiYXJyb3dQb2ludCIsImFycm93Q1BYIiwiYXJyb3dDUFkiLCJjYW52YXNBcnJvdyIsInN0cm9rZSIsImNsb3NlUGF0aCIsImZpbGxMZWZ0Qm90dG9tUmVjdCIsImJvbGQiLCJkYXNoZWQiLCJzZXRMaW5lRGFzaCIsIm1hcmtlck1pblNpemUiLCJtYXJrZXJNYXhTaXplIiwibWFya2VyRGVmYXVsdFNpemUiLCJyZWN0IiwiUGF0aDJEIiwieUF4aXNCb3giLCJtaW5YIiwibWF4WSIsInhBeGlzQm94IiwiZmlsbFN0eWxlIiwiYXJyYXlJZHhzQml0QXJyYXkiLCJmaXJzdExpbmVJZHgiLCJsaW5lc1BlclBhaXIiLCJwb2ludFRvQ29tcGFyZTEiLCJwb2ludFRvQ29tcGFyZTIiLCJjYW5kaWRhdGVJZHgiLCJwRnJvbSIsInBUbyIsImZyb21NYXJrZXIiLCJ0b01hcmtlciIsImNhbGN1bGF0ZURpc3RUb0N1cnZlTGluZSIsImNhbGN1bGF0ZURpc3RUb1N0cmFpZ2h0TGluZSIsInhNaW4iLCJ4TWF4IiwieU1pbiIsInlNYXgiLCJkaXN0VG9TdHJhaWdodExpbmVTZWdtZW50IiwicGMiLCJjYWxjdWxhdGVEaXN0VG9DdXJ2ZUluUmVjdCIsInAwIiwic3RlcHNOdW0iLCJkZWx0YVQiLCJhcnJYIiwiYXJyWSIsIm1heEhXIiwibWluU3VtSFciLCJjYW5kaWRhdGVJZHhzIiwieE9uQ3VydmUiLCJ5T25DdXJ2ZSIsInJlY3RXIiwicmVjdEgiLCJzdW1IVyIsInAxeCIsInAxeSIsInAyeCIsInAyeSIsInAzeCIsInAzeSIsIm1pZFgiLCJtaWRZIiwiZHgiLCJkeSIsInBlcnBlbmRpY3VsYXJMZW4iLCJjZWlsIiwiYXJyb3dFbmRYIiwiYXJyb3dFbmRZIiwicXVhZFgiLCJxdWFkWSIsImFycm93QW5nbGUiLCJhdGFuMiIsIl9wYWNrYWdlIiwid2ViUm9vdCIsImluaXRFREEiLCJfaW5pdEVEQUFQSSIsImRiU2NhbiIsInhDb2wiLCJ5Q29sIiwiY2x1c3RlckNvbE5hbWUiLCJjbHVzdGVyIiwiY2VudGVyIiwicGNhVGFibGUiLCJjZW50ZXJOdW0iLCJzY2FsZU51bSIsIl9wcmluY2lwYWxDb21wb25lbnRBbmFseXNpc0luV2ViV29ya2VyIiwiY29tcHV0ZVBDQSIsImFkZFByZWZpeFRvRWFjaENvbHVtbk5hbWUiLCJkYnNjYW5Qb3N0UHJvY2Vzc2luZ0Z1bmN0aW9uIiwiY29sMSIsImNvbDIiLCJtaW5pbXVtUG9pbnRzIiwicmVzQ29sIiwiY2hhbmdlQ29sdW1uVHlwZSIsImNvbE5hbWVzIiwidHYiLCJ2aWV3ZXJzIiwicHJvcHMiLCJjb2xvckNvbHVtbk5hbWUiLCJudW1iZXJQcmVwcm9jZXNzaW5nRnVuY3Rpb24iLCJfbWV0cmljIiwiZW50cmllcyIsInN0cmluZ1ByZXByb2Nlc3NpbmdGdW5jdGlvbiIsInJlZHVjZURpbWVuc2lvbmFsaXR5IiwiZGlhbG9nIiwib25PSyIsIm1ldHJpY3MiLCJhZ2dyZWdhdGlvbk1ldGhvZCIsImRpbVJlZE9wdGlvbnMiLCJ1aU9wdGlvbnMiLCJwb3N0UHJvY2Vzc2luZ0Z1bmMiLCJwb3N0UHJvY0Z1bmNBcmdzIiwic2NhdHRlclBsb3RQcm9wcyIsInNob3dYQXhpcyIsInNob3dZQXhpcyIsInNob3dYU2VsZWN0b3IiLCJzaG93WVNlbGVjdG9yIiwiZG9SZWR1Y2UiLCJwZyIsInNjYXR0ZXJQbG90TmFtZSIsInNjYXR0ZXJQbG90IiwiZW1iZWRDb2xzTmFtZXMiLCJheGVzIiwiY29sTmFtZUluZCIsImdldEVtYmVkZGluZ0NvbHNOYW1lcyIsInByb2dyZXNzRnVuYyIsIl9uRXBvY2giLCJlcG9jaHNMZW5ndGgiLCJlbWJlZGRpbmdzIiwiZW1iZWRYQ29sIiwiZW1iZWRZQ29sIiwicHJvZ3Jlc3MiLCJ0b0ZpeGVkIiwiZ2V0RGltUmVkIiwicmVzb2x2ZUYiLCJzdWIiLCJ1bnN1YnNjcmliZSIsImRpbVJlZFJlc1Byb21pc2UiLCJlbmNvZGVkQ29sRW50cmllcyIsInBmIiwiZGlzdGFuY2VGbkFyZ3MiLCJjb2xJbnB1dE5hbWUiLCJtZXRyaWNJbnB1dE5hbWUiLCJkaXN0YW5jZUFnZ3JlZ2F0aW9uIiwiZGltZW5zaW9uYWxpdHlSZWR1Y2VSZXMiLCJjb2x1bW5zRGF0YSIsInRlcm1pbmF0ZVN1YiIsImVtYmVkZGluZyIsImVwb2NoTnVtIiwiY3JlYXRlTXVsdGlEaW1SZWRXb3JrZXIiLCJzdGREZXZJbnZlcnNlIiwibm9ybWFsaXplIiwiZ2V0Tm9ybWFsaXplZEVtYmVkZGluZ3MiLCJjbHVzdGVyUGciLCJjbHVzdGVyUmVzIiwiYWRkTmV3U3RyaW5nIiwiY29sMUlucHV0TmFtZSIsImNvbDJJbnB1dE5hbWUiLCJmYXN0Um93Q291bnQiLCJvbkNhbmNlbCIsIm11bHRpQ29sUmVkdWNlRGltZW5zaW9uYWxpdHkiLCJ2YWxpZGF0ZSIsIm9rQnV0dG9uIiwiR2V0TUNMRWRpdG9yIiwiZnVuY0VkaXRvciIsInByZXByb2Nlc3NpbmdGdW5jcyIsImVyck1zZyIsImVyclN0YWNrIiwibG9nZ2VyIiwiTUNMIiwic2MiLCJtY2xXb3JrZXIiLCJkaXN0YW5jZUZucyIsInByb21pc2UiLCJvbmVycm9yIiwiY3JlYXRlTUNMV29ya2VyIiwiZW1iZXJkWENvbE5hbWUiLCJlbWJlcmRZQ29sTmFtZSIsImNsdXN0ZXJzQ291bnRlciIsImNvbm5lY3Rpdml0eSIsImlzIiwianMiLCJjbHVzdGVyQ291bnRlckNvbE5hbWUiLCJjb25uZWN0aXZpdHlDb2xOYW1lIiwiYWRkTmV3RmxvYXQiLCJjbHVzdGVyQ29sIiwiY2x1c3RlckNvdW50ZXJDb2wiLCJhZGROZXdJbnQiLCJjb25uZWN0aXZpdHlDb2wiLCJtYXJrb3ZDbHVzdGVyIiwidG9wTWVudVBMUyIsIlBFUkZPUk1fTVZBIiwiZGVtb011bHRpdmFyaWF0ZUFuYWx5c2lzIiwicnVuRGVtb01WQSIsInRlc3REYXRhTGluZWFyU2VwYXJhYmxlIiwidGVzdERhdGFMaW5lYXJOb25TZXBhcmFibGUiLCJ0cmFpbkxpbmVhcktlcm5lbFNWTSIsInByZWRpY3RfY29sdW1uIiwidG9TaG93UmVwb3J0IiwidHJhaW5lZE1vZGVsIiwiYXBwbHlMaW5lYXJLZXJuZWxTVk0iLCJ0cmFpblJCRmtlcm5lbFNWTSIsImFwcGx5UkJGa2VybmVsU1ZNIiwidHJhaW5Qb2x5bm9taWFsS2VybmVsU1ZNIiwiYXBwbHlQb2x5bm9taWFsS2VybmVsU1ZNIiwidHJhaW5TaWdtb2lkS2VybmVsU1ZNIiwiYXBwbHlTaWdtb2lkS2VybmVsU1ZNIiwic2lnbmlmaWNhbmNlIiwiZmFjdG9ycyIsImFkZE9uZVdheUFub3ZhVml6dWFsaXphdGlvbiIsImNhdGVnb3JlcyIsImZhY3Rvcml6ZWQiLCJOT05fRVFVQUxfVkFSSUFOQ0VTIiwiTk9OX05PUk1BTF9ESVNUUklCIiwiZkNyaXQiLCJmQ3JpdGljYWwiLCJoeXBvdGhlc2lzIiwidGVzdFJlc3VsdCIsImdldE9uZVdheUFub3ZhREYiLCJvbmVXYXlBbm92YSIsImtOTkltcHV0YXRpb24iXSwic291cmNlUm9vdCI6IiJ9
|