expo-device-hub 0.2.0 → 0.2.1

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.
@@ -1,22 +1,22 @@
1
- import{createRequire as e$}from"node:module";var n$=Object.create;var{getPrototypeOf:o$,defineProperty:k4,getOwnPropertyNames:a$}=Object;var r$=Object.prototype.hasOwnProperty;var V9=($,Q,Z)=>{Z=$!=null?n$(o$($)):{};let J=Q||!$||!$.__esModule?k4(Z,"default",{value:$,enumerable:!0}):Z;for(let Y of a$($))if(!r$.call(J,Y))k4(J,Y,{get:()=>$[Y],enumerable:!0});return J};var N0=($,Q)=>()=>(Q||$((Q={exports:{}}).exports,Q),Q.exports);var t$=($,Q)=>{for(var Z in Q)k4($,Z,{get:Q[Z],enumerable:!0,configurable:!0,set:(J)=>Q[Z]=()=>J})};var s$=($,Q)=>()=>($&&(Q=$($=0)),Q);var l0=e$(import.meta.url);var c9=N0((S1,g9)=>{var y0=1000,k0=y0*60,f0=k0*60,L0=f0*24,XQ=L0*7,GQ=L0*365.25;g9.exports=function($,Q){Q=Q||{};var Z=typeof $;if(Z==="string"&&$.length>0)return VQ($);else if(Z==="number"&&isFinite($))return Q.long?WQ($):KQ($);throw Error("val is not a non-empty string or a valid number. val="+JSON.stringify($))};function VQ($){if($=String($),$.length>100)return;var Q=/^(-?(?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec($);if(!Q)return;var Z=parseFloat(Q[1]),J=(Q[2]||"ms").toLowerCase();switch(J){case"years":case"year":case"yrs":case"yr":case"y":return Z*GQ;case"weeks":case"week":case"w":return Z*XQ;case"days":case"day":case"d":return Z*L0;case"hours":case"hour":case"hrs":case"hr":case"h":return Z*f0;case"minutes":case"minute":case"mins":case"min":case"m":return Z*k0;case"seconds":case"second":case"secs":case"sec":case"s":return Z*y0;case"milliseconds":case"millisecond":case"msecs":case"msec":case"ms":return Z;default:return}}function KQ($){var Q=Math.abs($);if(Q>=L0)return Math.round($/L0)+"d";if(Q>=f0)return Math.round($/f0)+"h";if(Q>=k0)return Math.round($/k0)+"m";if(Q>=y0)return Math.round($/y0)+"s";return $+"ms"}function WQ($){var Q=Math.abs($);if(Q>=L0)return F4($,Q,L0,"day");if(Q>=f0)return F4($,Q,f0,"hour");if(Q>=k0)return F4($,Q,k0,"minute");if(Q>=y0)return F4($,Q,y0,"second");return $+" ms"}function F4($,Q,Z,J){var Y=Q>=Z*1.5;return Math.round($/Z)+" "+J+(Y?"s":"")}});var J8=N0((y1,m9)=>{function zQ($){Z.debug=Z,Z.default=Z,Z.coerce=K,Z.disable=G,Z.enable=Y,Z.enabled=H,Z.humanize=c9(),Z.destroy=W,Object.keys($).forEach((z)=>{Z[z]=$[z]}),Z.names=[],Z.skips=[],Z.formatters={};function Q(z){let U=0;for(let M=0;M<z.length;M++)U=(U<<5)-U+z.charCodeAt(M),U|=0;return Z.colors[Math.abs(U)%Z.colors.length]}Z.selectColor=Q;function Z(z){let U,M=null,F,A;function R(...x){if(!R.enabled)return;let j=R,D=Number(new Date),L=D-(U||D);if(j.diff=L,j.prev=U,j.curr=D,U=D,x[0]=Z.coerce(x[0]),typeof x[0]!=="string")x.unshift("%O");let C=0;x[0]=x[0].replace(/%([a-zA-Z%])/g,(_,V)=>{if(_==="%%")return"%";C++;let N=Z.formatters[V];if(typeof N==="function"){let B=x[C];_=N.call(j,B),x.splice(C,1),C--}return _}),Z.formatArgs.call(j,x),(j.log||Z.log).apply(j,x)}if(R.namespace=z,R.useColors=Z.useColors(),R.color=Z.selectColor(z),R.extend=J,R.destroy=Z.destroy,Object.defineProperty(R,"enabled",{enumerable:!0,configurable:!1,get:()=>{if(M!==null)return M;if(F!==Z.namespaces)F=Z.namespaces,A=Z.enabled(z);return A},set:(x)=>{M=x}}),typeof Z.init==="function")Z.init(R);return R}function J(z,U){let M=Z(this.namespace+(typeof U>"u"?":":U)+z);return M.log=this.log,M}function Y(z){Z.save(z),Z.namespaces=z,Z.names=[],Z.skips=[];let U=(typeof z==="string"?z:"").trim().replace(/\s+/g,",").split(",").filter(Boolean);for(let M of U)if(M[0]==="-")Z.skips.push(M.slice(1));else Z.names.push(M)}function X(z,U){let M=0,F=0,A=-1,R=0;while(M<z.length)if(F<U.length&&(U[F]===z[M]||U[F]==="*"))if(U[F]==="*")A=F,R=M,F++;else M++,F++;else if(A!==-1)F=A+1,R++,M=R;else return!1;while(F<U.length&&U[F]==="*")F++;return F===U.length}function G(){let z=[...Z.names,...Z.skips.map((U)=>"-"+U)].join(",");return Z.enable(""),z}function H(z){for(let U of Z.skips)if(X(z,U))return!1;for(let U of Z.names)if(X(z,U))return!0;return!1}function K(z){if(z instanceof Error)return z.stack||z.message;return z}function W(){console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.")}return Z.enable(Z.load()),Z}m9.exports=zQ});var d9=N0((l9,N4)=>{l9.formatArgs=MQ;l9.save=_Q;l9.load=FQ;l9.useColors=HQ;l9.storage=NQ();l9.destroy=(()=>{let $=!1;return()=>{if(!$)$=!0,console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.")}})();l9.colors=["#0000CC","#0000FF","#0033CC","#0033FF","#0066CC","#0066FF","#0099CC","#0099FF","#00CC00","#00CC33","#00CC66","#00CC99","#00CCCC","#00CCFF","#3300CC","#3300FF","#3333CC","#3333FF","#3366CC","#3366FF","#3399CC","#3399FF","#33CC00","#33CC33","#33CC66","#33CC99","#33CCCC","#33CCFF","#6600CC","#6600FF","#6633CC","#6633FF","#66CC00","#66CC33","#9900CC","#9900FF","#9933CC","#9933FF","#99CC00","#99CC33","#CC0000","#CC0033","#CC0066","#CC0099","#CC00CC","#CC00FF","#CC3300","#CC3333","#CC3366","#CC3399","#CC33CC","#CC33FF","#CC6600","#CC6633","#CC9900","#CC9933","#CCCC00","#CCCC33","#FF0000","#FF0033","#FF0066","#FF0099","#FF00CC","#FF00FF","#FF3300","#FF3333","#FF3366","#FF3399","#FF33CC","#FF33FF","#FF6600","#FF6633","#FF9900","#FF9933","#FFCC00","#FFCC33"];function HQ(){if(typeof window<"u"&&window.process&&(window.process.type==="renderer"||window.process.__nwjs))return!0;if(typeof navigator<"u"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/))return!1;let $;return typeof document<"u"&&document.documentElement&&document.documentElement.style&&document.documentElement.style.WebkitAppearance||typeof window<"u"&&window.console&&(window.console.firebug||window.console.exception&&window.console.table)||typeof navigator<"u"&&navigator.userAgent&&($=navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/))&&parseInt($[1],10)>=31||typeof navigator<"u"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/)}function MQ($){if($[0]=(this.useColors?"%c":"")+this.namespace+(this.useColors?" %c":" ")+$[0]+(this.useColors?"%c ":" ")+"+"+N4.exports.humanize(this.diff),!this.useColors)return;let Q="color: "+this.color;$.splice(1,0,Q,"color: inherit");let Z=0,J=0;$[0].replace(/%[a-zA-Z%]/g,(Y)=>{if(Y==="%%")return;if(Z++,Y==="%c")J=Z}),$.splice(J,0,Q)}l9.log=console.debug||console.log||(()=>{});function _Q($){try{if($)l9.storage.setItem("debug",$);else l9.storage.removeItem("debug")}catch(Q){}}function FQ(){let $;try{$=l9.storage.getItem("debug")||l9.storage.getItem("DEBUG")}catch(Q){}if(!$&&typeof process<"u"&&"env"in process)$=process.env.DEBUG;return $}function NQ(){try{return localStorage}catch($){}}N4.exports=J8()(l9);var{formatters:UQ}=N4.exports;UQ.j=function($){try{return JSON.stringify($)}catch(Q){return"[UnexpectedJSONParseError]: "+Q.message}}});var n9=N0((f1,i9)=>{i9.exports=($,Q=process.argv)=>{let Z=$.startsWith("-")?"":$.length===1?"-":"--",J=Q.indexOf(Z+$),Y=Q.indexOf("--");return J!==-1&&(Y===-1||J<Y)}});var r9=N0((v1,a9)=>{var DQ=l0("os"),o9=l0("tty"),Q0=n9(),{env:o}=process,W0;if(Q0("no-color")||Q0("no-colors")||Q0("color=false")||Q0("color=never"))W0=0;else if(Q0("color")||Q0("colors")||Q0("color=true")||Q0("color=always"))W0=1;if("FORCE_COLOR"in o)if(o.FORCE_COLOR==="true")W0=1;else if(o.FORCE_COLOR==="false")W0=0;else W0=o.FORCE_COLOR.length===0?1:Math.min(parseInt(o.FORCE_COLOR,10),3);function Y8($){if($===0)return!1;return{level:$,hasBasic:!0,has256:$>=2,has16m:$>=3}}function X8($,Q){if(W0===0)return 0;if(Q0("color=16m")||Q0("color=full")||Q0("color=truecolor"))return 3;if(Q0("color=256"))return 2;if($&&!Q&&W0===void 0)return 0;let Z=W0||0;if(o.TERM==="dumb")return Z;if(process.platform==="win32"){let J=DQ.release().split(".");if(Number(J[0])>=10&&Number(J[2])>=10586)return Number(J[2])>=14931?3:2;return 1}if("CI"in o){if(["TRAVIS","CIRCLECI","APPVEYOR","GITLAB_CI","GITHUB_ACTIONS","BUILDKITE"].some((J)=>(J in o))||o.CI_NAME==="codeship")return 1;return Z}if("TEAMCITY_VERSION"in o)return/^(9\.(0*[1-9]\d*)\.|\d{2,}\.)/.test(o.TEAMCITY_VERSION)?1:0;if(o.COLORTERM==="truecolor")return 3;if("TERM_PROGRAM"in o){let J=parseInt((o.TERM_PROGRAM_VERSION||"").split(".")[0],10);switch(o.TERM_PROGRAM){case"iTerm.app":return J>=3?3:2;case"Apple_Terminal":return 2}}if(/-256(color)?$/i.test(o.TERM))return 2;if(/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(o.TERM))return 1;if("COLORTERM"in o)return 1;return Z}function PQ($){let Q=X8($,$&&$.isTTY);return Y8(Q)}a9.exports={supportsColor:PQ,stdout:Y8(X8(!0,o9.isatty(1))),stderr:Y8(X8(!0,o9.isatty(2)))}});var $6=N0((s9,B4)=>{var TQ=l0("tty"),U4=l0("util");s9.init=yQ;s9.log=qQ;s9.formatArgs=IQ;s9.save=wQ;s9.load=SQ;s9.useColors=EQ;s9.destroy=U4.deprecate(()=>{},"Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.");s9.colors=[6,2,3,4,5,1];try{let $=r9();if($&&($.stderr||$).level>=2)s9.colors=[20,21,26,27,32,33,38,39,40,41,42,43,44,45,56,57,62,63,68,69,74,75,76,77,78,79,80,81,92,93,98,99,112,113,128,129,134,135,148,149,160,161,162,163,164,165,166,167,168,169,170,171,172,173,178,179,184,185,196,197,198,199,200,201,202,203,204,205,206,207,208,209,214,215,220,221]}catch($){}s9.inspectOpts=Object.keys(process.env).filter(($)=>{return/^debug_/i.test($)}).reduce(($,Q)=>{let Z=Q.substring(6).toLowerCase().replace(/_([a-z])/g,(Y,X)=>{return X.toUpperCase()}),J=process.env[Q];if(/^(yes|on|true|enabled)$/i.test(J))J=!0;else if(/^(no|off|false|disabled)$/i.test(J))J=!1;else if(J==="null")J=null;else J=Number(J);return $[Z]=J,$},{});function EQ(){return"colors"in s9.inspectOpts?Boolean(s9.inspectOpts.colors):TQ.isatty(process.stderr.fd)}function IQ($){let{namespace:Q,useColors:Z}=this;if(Z){let J=this.color,Y="\x1B[3"+(J<8?J:"8;5;"+J),X=` ${Y};1m${Q} \x1B[0m`;$[0]=X+$[0].split(`
1
+ import{createRequire as Z5}from"node:module";var r$=Object.create;var{getPrototypeOf:t$,defineProperty:f4,getOwnPropertyNames:s$}=Object;var e$=Object.prototype.hasOwnProperty;var K9=($,Q,Z)=>{Z=$!=null?r$(t$($)):{};let J=Q||!$||!$.__esModule?f4(Z,"default",{value:$,enumerable:!0}):Z;for(let Y of s$($))if(!e$.call(J,Y))f4(J,Y,{get:()=>$[Y],enumerable:!0});return J};var U0=($,Q)=>()=>(Q||$((Q={exports:{}}).exports,Q),Q.exports);var $5=($,Q)=>{for(var Z in Q)f4($,Z,{get:Q[Z],enumerable:!0,configurable:!0,set:(J)=>Q[Z]=()=>J})};var Q5=($,Q)=>()=>($&&(Q=$($=0)),Q);var l0=Z5(import.meta.url);var m9=U0((k1,c9)=>{var y0=1000,k0=y0*60,f0=k0*60,O0=f0*24,KQ=O0*7,WQ=O0*365.25;c9.exports=function($,Q){Q=Q||{};var Z=typeof $;if(Z==="string"&&$.length>0)return zQ($);else if(Z==="number"&&isFinite($))return Q.long?MQ($):HQ($);throw Error("val is not a non-empty string or a valid number. val="+JSON.stringify($))};function zQ($){if($=String($),$.length>100)return;var Q=/^(-?(?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec($);if(!Q)return;var Z=parseFloat(Q[1]),J=(Q[2]||"ms").toLowerCase();switch(J){case"years":case"year":case"yrs":case"yr":case"y":return Z*WQ;case"weeks":case"week":case"w":return Z*KQ;case"days":case"day":case"d":return Z*O0;case"hours":case"hour":case"hrs":case"hr":case"h":return Z*f0;case"minutes":case"minute":case"mins":case"min":case"m":return Z*k0;case"seconds":case"second":case"secs":case"sec":case"s":return Z*y0;case"milliseconds":case"millisecond":case"msecs":case"msec":case"ms":return Z;default:return}}function HQ($){var Q=Math.abs($);if(Q>=O0)return Math.round($/O0)+"d";if(Q>=f0)return Math.round($/f0)+"h";if(Q>=k0)return Math.round($/k0)+"m";if(Q>=y0)return Math.round($/y0)+"s";return $+"ms"}function MQ($){var Q=Math.abs($);if(Q>=O0)return F4($,Q,O0,"day");if(Q>=f0)return F4($,Q,f0,"hour");if(Q>=k0)return F4($,Q,k0,"minute");if(Q>=y0)return F4($,Q,y0,"second");return $+" ms"}function F4($,Q,Z,J){var Y=Q>=Z*1.5;return Math.round($/Z)+" "+J+(Y?"s":"")}});var Y8=U0((f1,l9)=>{function _Q($){Z.debug=Z,Z.default=Z,Z.coerce=K,Z.disable=G,Z.enable=Y,Z.enabled=H,Z.humanize=m9(),Z.destroy=W,Object.keys($).forEach((z)=>{Z[z]=$[z]}),Z.names=[],Z.skips=[],Z.formatters={};function Q(z){let U=0;for(let M=0;M<z.length;M++)U=(U<<5)-U+z.charCodeAt(M),U|=0;return Z.colors[Math.abs(U)%Z.colors.length]}Z.selectColor=Q;function Z(z){let U,M=null,F,A;function R(...x){if(!R.enabled)return;let j=R,P=Number(new Date),L=P-(U||P);if(j.diff=L,j.prev=U,j.curr=P,U=P,x[0]=Z.coerce(x[0]),typeof x[0]!=="string")x.unshift("%O");let C=0;x[0]=x[0].replace(/%([a-zA-Z%])/g,(_,V)=>{if(_==="%%")return"%";C++;let N=Z.formatters[V];if(typeof N==="function"){let B=x[C];_=N.call(j,B),x.splice(C,1),C--}return _}),Z.formatArgs.call(j,x),(j.log||Z.log).apply(j,x)}if(R.namespace=z,R.useColors=Z.useColors(),R.color=Z.selectColor(z),R.extend=J,R.destroy=Z.destroy,Object.defineProperty(R,"enabled",{enumerable:!0,configurable:!1,get:()=>{if(M!==null)return M;if(F!==Z.namespaces)F=Z.namespaces,A=Z.enabled(z);return A},set:(x)=>{M=x}}),typeof Z.init==="function")Z.init(R);return R}function J(z,U){let M=Z(this.namespace+(typeof U>"u"?":":U)+z);return M.log=this.log,M}function Y(z){Z.save(z),Z.namespaces=z,Z.names=[],Z.skips=[];let U=(typeof z==="string"?z:"").trim().replace(/\s+/g,",").split(",").filter(Boolean);for(let M of U)if(M[0]==="-")Z.skips.push(M.slice(1));else Z.names.push(M)}function X(z,U){let M=0,F=0,A=-1,R=0;while(M<z.length)if(F<U.length&&(U[F]===z[M]||U[F]==="*"))if(U[F]==="*")A=F,R=M,F++;else M++,F++;else if(A!==-1)F=A+1,R++,M=R;else return!1;while(F<U.length&&U[F]==="*")F++;return F===U.length}function G(){let z=[...Z.names,...Z.skips.map((U)=>"-"+U)].join(",");return Z.enable(""),z}function H(z){for(let U of Z.skips)if(X(z,U))return!1;for(let U of Z.names)if(X(z,U))return!0;return!1}function K(z){if(z instanceof Error)return z.stack||z.message;return z}function W(){console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.")}return Z.enable(Z.load()),Z}l9.exports=_Q});var i9=U0((d9,N4)=>{d9.formatArgs=NQ;d9.save=UQ;d9.load=BQ;d9.useColors=FQ;d9.storage=LQ();d9.destroy=(()=>{let $=!1;return()=>{if(!$)$=!0,console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.")}})();d9.colors=["#0000CC","#0000FF","#0033CC","#0033FF","#0066CC","#0066FF","#0099CC","#0099FF","#00CC00","#00CC33","#00CC66","#00CC99","#00CCCC","#00CCFF","#3300CC","#3300FF","#3333CC","#3333FF","#3366CC","#3366FF","#3399CC","#3399FF","#33CC00","#33CC33","#33CC66","#33CC99","#33CCCC","#33CCFF","#6600CC","#6600FF","#6633CC","#6633FF","#66CC00","#66CC33","#9900CC","#9900FF","#9933CC","#9933FF","#99CC00","#99CC33","#CC0000","#CC0033","#CC0066","#CC0099","#CC00CC","#CC00FF","#CC3300","#CC3333","#CC3366","#CC3399","#CC33CC","#CC33FF","#CC6600","#CC6633","#CC9900","#CC9933","#CCCC00","#CCCC33","#FF0000","#FF0033","#FF0066","#FF0099","#FF00CC","#FF00FF","#FF3300","#FF3333","#FF3366","#FF3399","#FF33CC","#FF33FF","#FF6600","#FF6633","#FF9900","#FF9933","#FFCC00","#FFCC33"];function FQ(){if(typeof window<"u"&&window.process&&(window.process.type==="renderer"||window.process.__nwjs))return!0;if(typeof navigator<"u"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/))return!1;let $;return typeof document<"u"&&document.documentElement&&document.documentElement.style&&document.documentElement.style.WebkitAppearance||typeof window<"u"&&window.console&&(window.console.firebug||window.console.exception&&window.console.table)||typeof navigator<"u"&&navigator.userAgent&&($=navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/))&&parseInt($[1],10)>=31||typeof navigator<"u"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/)}function NQ($){if($[0]=(this.useColors?"%c":"")+this.namespace+(this.useColors?" %c":" ")+$[0]+(this.useColors?"%c ":" ")+"+"+N4.exports.humanize(this.diff),!this.useColors)return;let Q="color: "+this.color;$.splice(1,0,Q,"color: inherit");let Z=0,J=0;$[0].replace(/%[a-zA-Z%]/g,(Y)=>{if(Y==="%%")return;if(Z++,Y==="%c")J=Z}),$.splice(J,0,Q)}d9.log=console.debug||console.log||(()=>{});function UQ($){try{if($)d9.storage.setItem("debug",$);else d9.storage.removeItem("debug")}catch(Q){}}function BQ(){let $;try{$=d9.storage.getItem("debug")||d9.storage.getItem("DEBUG")}catch(Q){}if(!$&&typeof process<"u"&&"env"in process)$=process.env.DEBUG;return $}function LQ(){try{return localStorage}catch($){}}N4.exports=Y8()(d9);var{formatters:OQ}=N4.exports;OQ.j=function($){try{return JSON.stringify($)}catch(Q){return"[UnexpectedJSONParseError]: "+Q.message}}});var o9=U0((b1,n9)=>{n9.exports=($,Q=process.argv)=>{let Z=$.startsWith("-")?"":$.length===1?"-":"--",J=Q.indexOf(Z+$),Y=Q.indexOf("--");return J!==-1&&(Y===-1||J<Y)}});var t9=U0((h1,r9)=>{var EQ=l0("os"),a9=l0("tty"),Q0=o9(),{env:o}=process,W0;if(Q0("no-color")||Q0("no-colors")||Q0("color=false")||Q0("color=never"))W0=0;else if(Q0("color")||Q0("colors")||Q0("color=true")||Q0("color=always"))W0=1;if("FORCE_COLOR"in o)if(o.FORCE_COLOR==="true")W0=1;else if(o.FORCE_COLOR==="false")W0=0;else W0=o.FORCE_COLOR.length===0?1:Math.min(parseInt(o.FORCE_COLOR,10),3);function X8($){if($===0)return!1;return{level:$,hasBasic:!0,has256:$>=2,has16m:$>=3}}function G8($,Q){if(W0===0)return 0;if(Q0("color=16m")||Q0("color=full")||Q0("color=truecolor"))return 3;if(Q0("color=256"))return 2;if($&&!Q&&W0===void 0)return 0;let Z=W0||0;if(o.TERM==="dumb")return Z;if(process.platform==="win32"){let J=EQ.release().split(".");if(Number(J[0])>=10&&Number(J[2])>=10586)return Number(J[2])>=14931?3:2;return 1}if("CI"in o){if(["TRAVIS","CIRCLECI","APPVEYOR","GITLAB_CI","GITHUB_ACTIONS","BUILDKITE"].some((J)=>(J in o))||o.CI_NAME==="codeship")return 1;return Z}if("TEAMCITY_VERSION"in o)return/^(9\.(0*[1-9]\d*)\.|\d{2,}\.)/.test(o.TEAMCITY_VERSION)?1:0;if(o.COLORTERM==="truecolor")return 3;if("TERM_PROGRAM"in o){let J=parseInt((o.TERM_PROGRAM_VERSION||"").split(".")[0],10);switch(o.TERM_PROGRAM){case"iTerm.app":return J>=3?3:2;case"Apple_Terminal":return 2}}if(/-256(color)?$/i.test(o.TERM))return 2;if(/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(o.TERM))return 1;if("COLORTERM"in o)return 1;return Z}function IQ($){let Q=G8($,$&&$.isTTY);return X8(Q)}r9.exports={supportsColor:IQ,stdout:X8(G8(!0,a9.isatty(1))),stderr:X8(G8(!0,a9.isatty(2)))}});var Q6=U0((e9,B4)=>{var xQ=l0("tty"),U4=l0("util");e9.init=vQ;e9.log=yQ;e9.formatArgs=wQ;e9.save=kQ;e9.load=fQ;e9.useColors=qQ;e9.destroy=U4.deprecate(()=>{},"Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.");e9.colors=[6,2,3,4,5,1];try{let $=t9();if($&&($.stderr||$).level>=2)e9.colors=[20,21,26,27,32,33,38,39,40,41,42,43,44,45,56,57,62,63,68,69,74,75,76,77,78,79,80,81,92,93,98,99,112,113,128,129,134,135,148,149,160,161,162,163,164,165,166,167,168,169,170,171,172,173,178,179,184,185,196,197,198,199,200,201,202,203,204,205,206,207,208,209,214,215,220,221]}catch($){}e9.inspectOpts=Object.keys(process.env).filter(($)=>{return/^debug_/i.test($)}).reduce(($,Q)=>{let Z=Q.substring(6).toLowerCase().replace(/_([a-z])/g,(Y,X)=>{return X.toUpperCase()}),J=process.env[Q];if(/^(yes|on|true|enabled)$/i.test(J))J=!0;else if(/^(no|off|false|disabled)$/i.test(J))J=!1;else if(J==="null")J=null;else J=Number(J);return $[Z]=J,$},{});function qQ(){return"colors"in e9.inspectOpts?Boolean(e9.inspectOpts.colors):xQ.isatty(process.stderr.fd)}function wQ($){let{namespace:Q,useColors:Z}=this;if(Z){let J=this.color,Y="\x1B[3"+(J<8?J:"8;5;"+J),X=` ${Y};1m${Q} \x1B[0m`;$[0]=X+$[0].split(`
2
2
  `).join(`
3
- `+X),$.push(Y+"m+"+B4.exports.humanize(this.diff)+"\x1B[0m")}else $[0]=xQ()+Q+" "+$[0]}function xQ(){if(s9.inspectOpts.hideDate)return"";return new Date().toISOString()+" "}function qQ(...$){return process.stderr.write(U4.formatWithOptions(s9.inspectOpts,...$)+`
4
- `)}function wQ($){if($)process.env.DEBUG=$;else delete process.env.DEBUG}function SQ(){return process.env.DEBUG}function yQ($){$.inspectOpts={};let Q=Object.keys(s9.inspectOpts);for(let Z=0;Z<Q.length;Z++)$.inspectOpts[Q[Z]]=s9.inspectOpts[Q[Z]]}B4.exports=J8()(s9);var{formatters:t9}=B4.exports;t9.o=function($){return this.inspectOpts.colors=this.useColors,U4.inspect($,this.inspectOpts).split(`
5
- `).map((Q)=>Q.trim()).join(" ")};t9.O=function($){return this.inspectOpts.colors=this.useColors,U4.inspect($,this.inspectOpts)}});var Q6=N0((h1,G8)=>{if(typeof process>"u"||process.type==="renderer"||!1||process.__nwjs)G8.exports=d9();else G8.exports=$6()});var U$={};t$(U$,{startCdpServer:()=>$2,startBunCdpServer:()=>G2,listTargets:()=>V2,listDevices:()=>F$});import{createRequire as S7}from"node:module";import*as t6 from"node:net";import*as Q$ from"node:net";import{spawnSync as QZ}from"node:child_process";import*as Y$ from"node:tls";import*as K$ from"node:http";function b7($){return this[$]}function c6($){return $.replace(/[&<>'"]/g,(Q)=>Q==="&"?"&amp;":Q==="<"?"&lt;":Q===">"?"&gt;":Q==="'"?"&apos;":"&quot;")}function i7($){let Q="";for(let Z=0;Z<$.length;Z++)Q+=String.fromCharCode($[Z]);return btoa(Q)}function n7($){let Q=atob($.replace(/\s+/g,"")),Z=new Uint8Array(Q.length);for(let J=0;J<Q.length;J++)Z[J]=Q.charCodeAt(J);return Z}function I8($,Q){if($===null||$===void 0)return`${Q}<string></string>`;if(typeof $==="boolean")return`${Q}<${$?"true":"false"}/>`;if(typeof $==="string")return`${Q}<string>${c6($)}</string>`;if(typeof $==="number"){if(Number.isInteger($))return`${Q}<integer>${$}</integer>`;return`${Q}<real>${$}</real>`}if(typeof $==="bigint")return`${Q}<integer>${$.toString()}</integer>`;if($ instanceof Uint8Array)return`${Q}<data>${i7($)}</data>`;if($ instanceof Date)return`${Q}<date>${$.toISOString().replace(/\.\d+Z$/,"Z")}</date>`;if(Array.isArray($)){if($.length===0)return`${Q}<array/>`;let Y=$.map((X)=>I8(X,Q+"\t")).join(`
3
+ `+X),$.push(Y+"m+"+B4.exports.humanize(this.diff)+"\x1B[0m")}else $[0]=SQ()+Q+" "+$[0]}function SQ(){if(e9.inspectOpts.hideDate)return"";return new Date().toISOString()+" "}function yQ(...$){return process.stderr.write(U4.formatWithOptions(e9.inspectOpts,...$)+`
4
+ `)}function kQ($){if($)process.env.DEBUG=$;else delete process.env.DEBUG}function fQ(){return process.env.DEBUG}function vQ($){$.inspectOpts={};let Q=Object.keys(e9.inspectOpts);for(let Z=0;Z<Q.length;Z++)$.inspectOpts[Q[Z]]=e9.inspectOpts[Q[Z]]}B4.exports=Y8()(e9);var{formatters:s9}=B4.exports;s9.o=function($){return this.inspectOpts.colors=this.useColors,U4.inspect($,this.inspectOpts).split(`
5
+ `).map((Q)=>Q.trim()).join(" ")};s9.O=function($){return this.inspectOpts.colors=this.useColors,U4.inspect($,this.inspectOpts)}});var Z6=U0((p1,V8)=>{if(typeof process>"u"||process.type==="renderer"||!1||process.__nwjs)V8.exports=i9();else V8.exports=Q6()});var B$={};$5(B$,{startCdpServer:()=>J2,startBunCdpServer:()=>W2,listTargets:()=>z2,listDevices:()=>N$});import{createRequire as f7}from"node:module";import*as s6 from"node:net";import*as Z$ from"node:net";import{spawnSync as YZ}from"node:child_process";import*as X$ from"node:tls";import*as W$ from"node:http";function p7($){return this[$]}function m6($){return $.replace(/[&<>'"]/g,(Q)=>Q==="&"?"&amp;":Q==="<"?"&lt;":Q===">"?"&gt;":Q==="'"?"&apos;":"&quot;")}function a7($){let Q="";for(let Z=0;Z<$.length;Z++)Q+=String.fromCharCode($[Z]);return btoa(Q)}function r7($){let Q=atob($.replace(/\s+/g,"")),Z=new Uint8Array(Q.length);for(let J=0;J<Q.length;J++)Z[J]=Q.charCodeAt(J);return Z}function x8($,Q){if($===null||$===void 0)return`${Q}<string></string>`;if(typeof $==="boolean")return`${Q}<${$?"true":"false"}/>`;if(typeof $==="string")return`${Q}<string>${m6($)}</string>`;if(typeof $==="number"){if(Number.isInteger($))return`${Q}<integer>${$}</integer>`;return`${Q}<real>${$}</real>`}if(typeof $==="bigint")return`${Q}<integer>${$.toString()}</integer>`;if($ instanceof Uint8Array)return`${Q}<data>${a7($)}</data>`;if($ instanceof Date)return`${Q}<date>${$.toISOString().replace(/\.\d+Z$/,"Z")}</date>`;if(Array.isArray($)){if($.length===0)return`${Q}<array/>`;let Y=$.map((X)=>x8(X,Q+"\t")).join(`
6
6
  `);return`${Q}<array>
7
7
  ${Y}
8
- ${Q}</array>`}let Z=Object.keys($);if(Z.length===0)return`${Q}<dict/>`;let J=Z.map((Y)=>`${Q} <key>${c6(Y)}</key>
9
- `+I8($[Y],Q+"\t")).join(`
8
+ ${Q}</array>`}let Z=Object.keys($);if(Z.length===0)return`${Q}<dict/>`;let J=Z.map((Y)=>`${Q} <key>${m6(Y)}</key>
9
+ `+x8($[Y],Q+"\t")).join(`
10
10
  `);return`${Q}<dict>
11
11
  ${J}
12
- ${Q}</dict>`}function v8($){let Q=I8($,"");return new TextEncoder().encode(l7+Q+d7)}class s6{src;pos=0;constructor($){this.src=$}skip(){while(this.pos<this.src.length){let $=this.src[this.pos];if($===" "||$==="\t"||$===`
13
- `||$==="\r")this.pos++;else if(this.src.startsWith("<!--",this.pos)){let Q=this.src.indexOf("-->",this.pos+4);if(Q<0)throw Error("unterminated comment");this.pos=Q+3}else if(this.src.startsWith("<?",this.pos)){let Q=this.src.indexOf("?>",this.pos+2);if(Q<0)throw Error("unterminated processing instruction");this.pos=Q+2}else if(this.src.startsWith("<!DOCTYPE",this.pos)){let Q=0;while(this.pos<this.src.length){let Z=this.src[this.pos++];if(Z==="[")Q++;else if(Z==="]")Q--;else if(Z===">"&&Q===0)break}}else break}}nextTag(){if(this.skip(),this.pos>=this.src.length)return null;if(this.src[this.pos]!=="<")throw Error(`expected '<' at ${this.pos}`);let $=this.src.indexOf(">",this.pos);if($<0)throw Error("unterminated tag");let Q=this.src.slice(this.pos+1,$);this.pos=$+1;let Z=Q.startsWith("/"),J=Q.endsWith("/");return{name:Q.replace(/^\/?/,"").replace(/\/$/,"").trim().split(/\s+/)[0],selfClose:J,isClose:Z}}readText(){let $=this.src.indexOf("<",this.pos),Q=$<0?this.src.slice(this.pos):this.src.slice(this.pos,$);return this.pos=$<0?this.src.length:$,Q.replace(/&lt;/g,"<").replace(/&gt;/g,">").replace(/&quot;/g,'"').replace(/&apos;/g,"'").replace(/&amp;/g,"&")}}function x8($,Q){let Z=(J)=>{let Y=$.nextTag();if(!Y||!Y.isClose||Y.name!==J)throw Error(`expected </${J}>`)};switch(Q){case"true":case"false":throw Error(`<${Q}> must be self-closing`);case"string":case"key":{let J=$.readText();return Z(Q),J}case"integer":{let J=$.readText().trim();if(Z("integer"),/^-?\d+$/.test(J)&&Math.abs(Number(J))<=Number.MAX_SAFE_INTEGER)return Number(J);return BigInt(J)}case"real":{let J=Number($.readText().trim());return Z("real"),J}case"data":{let J=n7($.readText());return Z("data"),J}case"date":{let J=new Date($.readText().trim());return Z("date"),J}case"array":{let J=[];while(!0){let Y=$.nextTag();if(!Y)throw Error("unterminated <array>");if(Y.isClose&&Y.name==="array")return J;J.push(Y.selfClose?q8(Y.name):x8($,Y.name))}}case"dict":{let J={};while(!0){let Y=$.nextTag();if(!Y)throw Error("unterminated <dict>");if(Y.isClose&&Y.name==="dict")return J;if(Y.name!=="key")throw Error(`expected <key>, got <${Y.name}>`);let X=$.readText();Z("key");let G=$.nextTag();if(!G)throw Error("unterminated <dict>");J[X]=G.selfClose?q8(G.name):x8($,G.name)}}default:throw Error(`unknown plist tag <${Q}>`)}}function q8($){if($==="true")return!0;if($==="false")return!1;if($==="string")return"";if($==="data")return new Uint8Array(0);if($==="array")return[];if($==="dict")return{};throw Error(`self-closing <${$}/> not supported`)}function P4($){let Q=typeof $==="string"?$:new TextDecoder().decode($),Z=new s6(Q);while(!0){let Y=Z.nextTag();if(!Y)throw Error("no <plist> root");if(Y.name==="plist"&&!Y.isClose)break}let J=Z.nextTag();if(!J)throw Error("empty plist");return J.selfClose?q8(J.name):x8(Z,J.name)}function j0($,Q,Z){let J=0;for(let Y=0;Y<Z;Y++)J=J*256+$[Q+Y];return J}function o7($){if($.length<41)throw Error("bplist too short");let Q=new TextDecoder().decode($.slice(0,8));if(Q!=="bplist00")throw Error(`bad magic: ${Q}`);let Z=$.length-32,J=$[Z+6],Y=$[Z+7],X=j0($,Z+8,8),G=j0($,Z+16,8),H=j0($,Z+24,8),K=Array(X);for(let U=0;U<X;U++)K[U]=j0($,H+U*J,J);function W(U){return j0($,U,Y)}function z(U){let M=K[U],F=$[M],A=F>>4,R=F&15;function x(j){if(R!==15)return{len:R,next:j};let D=$[j];if((D&240)!==16)throw Error("expected int marker for length");let L=1<<(D&15);return{len:j0($,j+1,L),next:j+1+L}}switch(A){case 0:if(R===0)return null;if(R===8)return!1;if(R===9)return!0;if(R===15)return null;throw Error(`unknown singleton ${R}`);case 1:{let j=1<<R,D=j0($,M+1,j);if(j===8&&D>Number.MAX_SAFE_INTEGER)return BigInt(D);return D}case 2:{let j=1<<R,D=new DataView($.buffer,$.byteOffset+M+1,j);return j===4?D.getFloat32(0,!1):D.getFloat64(0,!1)}case 3:{let D=new DataView($.buffer,$.byteOffset+M+1,8).getFloat64(0,!1);return new Date(Date.UTC(2001,0,1)+D*1000)}case 4:{let{len:j,next:D}=x(M+1);return $.slice(D,D+j)}case 5:{let{len:j,next:D}=x(M+1);return new TextDecoder("ascii").decode($.slice(D,D+j))}case 6:{let{len:j,next:D}=x(M+1),L=$.slice(D,D+j*2),C=new Uint8Array(L.length);for(let I=0;I<L.length;I+=2)C[I]=L[I+1],C[I+1]=L[I];return new TextDecoder("utf-16le").decode(C)}case 10:{let{len:j,next:D}=x(M+1),L=[];for(let C=0;C<j;C++)L.push(z(W(D+C*Y)));return L}case 13:{let{len:j,next:D}=x(M+1),L={};for(let C=0;C<j;C++){let I=z(W(D+C*Y)),_=z(W(D+(j+C)*Y));if(typeof I!=="string")throw Error(`non-string dict key: ${typeof I}`);L[I]=_}return L}default:throw Error(`unknown bplist marker 0x${F.toString(16)} at ${M}`)}}return z(G)}function a7($){if($.length>=8){if(new TextDecoder().decode($.slice(0,8))==="bplist00")return o7($)}return P4($)}class T4{chunks=[];size=0;waiters=[];closed=!1;closeErr=null;push($){if($.length===0)return;this.chunks.push($),this.size+=$.length,this.drain()}close($){this.closed=!0,this.closeErr=$??null;for(let Q of this.waiters)Q.reject($??Error("stream closed"));this.waiters=[]}read($){return new Promise((Q,Z)=>{if(this.closed&&this.size<$){Z(this.closeErr??Error("stream closed"));return}this.waiters.push({n:$,resolve:Q,reject:Z}),this.drain()})}drain(){while(this.waiters.length>0&&this.waiters[0].n<=this.size){let $=this.waiters.shift(),Q=new Uint8Array($.n),Z=0;while(Z<$.n){let J=this.chunks[0],Y=$.n-Z;if(J.length<=Y)Q.set(J,Z),Z+=J.length,this.chunks.shift();else Q.set(J.subarray(0,Y),Z),this.chunks[0]=J.subarray(Y),Z+=Y}this.size-=$.n,$.resolve(Q)}}}function b8($,Q){let Z=(X)=>{Q.push(new Uint8Array(X.buffer,X.byteOffset,X.byteLength))},J=()=>Q.close(),Y=(X)=>Q.close(X);return $.on("data",Z),$.on("close",J),$.on("error",Y),()=>{$.off("data",Z),$.off("close",J),$.off("error",Y)}}async function h8(){let $=new T4;return new Promise((Q,Z)=>{let J=t6.createConnection({path:s7}),Y=(X)=>{$.close(X),Z(X)};J.once("error",Y),J.once("connect",()=>{J.off("error",Y);let X=b8(J,$);Q({socket:J,stream:$,detach:X})})})}async function e7($){let Q=await $.read(4),Z=new DataView(Q.buffer,Q.byteOffset,4).getUint32(0,!0);return(await $.read(Z-4)).slice(12)}function $Z($,Q,Z){let J=16+Z.length,Y=new Uint8Array(16),X=new DataView(Y.buffer);X.setUint32(0,J,!0),X.setUint32(4,r7,!0),X.setUint32(8,t7,!0),X.setUint32(12,Q,!0),$.write(Y),$.write(Z)}async function u8($,Q,Z,J){let Y=v8({ClientVersionString:"inspect-webkit-1.0",ProgName:"inspect-webkit",kLibUSBMuxVersion:3,...J});$Z($,Z,Y);let X=await e7(Q);return P4(X)}async function e6(){let{socket:$,stream:Q}=await h8();try{return(await u8($,Q,1,{MessageType:"ListDevices"})).DeviceList??[]}finally{$.end()}}async function $$($){let{socket:Q,stream:Z}=await h8();try{let Y=(await u8(Q,Z,1,{MessageType:"ReadPairRecord",PairRecordID:$})).PairRecordData;if(!Y)throw Error(`no pair record for ${$} — pair the device first (open Finder/iTunes, tap "Trust")`);return P4(Y)}finally{Q.end()}}async function m6($,Q){let{socket:Z,stream:J,detach:Y}=await h8(),X=(Q&255)<<8|Q>>8&255,G=await u8(Z,J,1,{MessageType:"Connect",DeviceID:$,PortNumber:X});if(G.MessageType!=="Result"||G.Number!==0){Z.end();let H=G.Number??"?";throw Error(`Connect to device ${$} port ${Q} failed (code ${H})`)}return{socket:Z,stream:J,detach:Y}}async function Z$(){let $=QZ("lsof",["-U"],{stdio:["ignore","pipe","ignore"]});if($.status!==0||!$.stdout)return[];let Q=$.stdout.toString("utf8"),Z=new Map;for(let J of Q.split(`
14
- `)){if(!/com\.apple\.webinspectord_sim\.socket\b/.test(J))continue;let Y=J.split(/\s+/),X=Number(Y[1]),G=Y[Y.length-1];if(G)Z.set(G,X)}return Array.from(Z,([J,Y])=>({socketPath:J,pid:Y}))}async function J$($){let Q=new T4;return new Promise((Z,J)=>{let Y=Q$.createConnection({path:$}),X=(G)=>{Q.close(G),J(G)};Y.once("error",X),Y.once("connect",()=>{Y.off("error",X),b8(Y,Q),Z({socket:Y,stream:Q})})})}async function C8($){let Q=await $.read(4),Z=new DataView(Q.buffer,Q.byteOffset,4).getUint32(0,!1),J=await $.read(Z);return P4(J)}function D8($,Q){let Z=v8({Label:"inspect-webkit",...Q}),J=new Uint8Array(4);new DataView(J.buffer).setUint32(0,Z.length,!1),$.write(J),$.write(Z)}function P8($,Q){if($.Error)throw Error(`lockdown ${Q} error: ${String($.Error)}`);if($.Request!==Q)throw Error(`lockdown expected Request=${Q}, got ${String($.Request)}`)}function d6($,Q,Z,J){return new Promise((Y,X)=>{Q();let G=new T4,H=Y$.connect({socket:$,cert:Buffer.from(Z.HostCertificate),key:Buffer.from(Z.HostPrivateKey),ca:Buffer.from(Z.RootCertificate),rejectUnauthorized:!1}),K=(W)=>{J0(`${J} tls error:`,W),G.close(W),X(W)};H.once("error",K),H.once("secureConnect",()=>{J0(`${J} tls handshake complete`),H.off("error",K);let W=b8(H,G);Y({socket:H,stream:G,detach:W})})})}class E4{socket;stream;pair;udid;deviceID;detach;constructor($,Q,Z,J,Y,X){this.socket=$,this.stream=Q,this.pair=Z,this.udid=J,this.deviceID=Y,this.detach=X}static async open($,Q){J0("connecting usbmux tunnel to lockdown port",l6);let{socket:Z,stream:J,detach:Y}=await m6($.DeviceID,l6),X=new E4(Z,J,Q,$.Properties.SerialNumber,$.DeviceID,Y);J0("sending QueryType"),D8(Z,{Request:"QueryType"});let G=await C8(J);if(J0("QueryType reply:",G),P8(G,"QueryType"),G.Type!=="com.apple.mobile.lockdown")throw Error(`unexpected lockdown Type: ${String(G.Type)}`);return X}async startSession(){J0("StartSession with HostID",this.pair.HostID),D8(this.socket,{Request:"StartSession",HostID:this.pair.HostID,SystemBUID:this.pair.SystemBUID});let $=await C8(this.stream);if(J0("StartSession reply:",$),P8($,"StartSession"),$.EnableSessionSSL){J0("upgrading to TLS");let Q=await d6(this.socket,this.detach,this.pair,"lockdown");this.socket=Q.socket,this.stream=Q.stream,this.detach=Q.detach,J0("TLS upgrade complete")}}async startService($){J0("StartService",$),D8(this.socket,{Request:"StartService",Service:$});let Q=await C8(this.stream);return J0("StartService reply:",Q),P8(Q,"StartService"),{port:Q.Port,enableServiceSSL:Boolean(Q.EnableServiceSSL),service:$}}async connectService($){J0("connecting service tunnel to port",$.port,"ssl=",$.enableServiceSSL);let{socket:Q,stream:Z,detach:J}=await m6(this.deviceID,$.port);if(!$.enableServiceSSL)return{socket:Q,stream:Z};let Y=await d6(Q,J,this.pair,"service");return{socket:Y.socket,stream:Y.stream}}close(){this.socket.end()}}async function ZZ($){let Q=await $.read(4),Z=new DataView(Q.buffer,Q.byteOffset,4).getUint32(0,!1),J=await $.read(Z);return a7(J)}function JZ($,Q){let Z=v8(Q),J=new Uint8Array(4);new DataView(J.buffer).setUint32(0,Z.length,!1),$.write(J),$.write(Z)}function YZ(){let $=crypto.getRandomValues(new Uint8Array(16));$[6]=$[6]&15|64,$[8]=$[8]&63|128;let Q=Array.from($,(Z)=>Z.toString(16).padStart(2,"0")).join("");return`${Q.slice(0,8)}-${Q.slice(8,12)}-${Q.slice(12,16)}-${Q.slice(16,20)}-${Q.slice(20)}`}class Q4{socket;stream;connectionId=YZ();subscribers=new Set;reading;constructor($,Q){this.socket=$,this.stream=Q,this.reading=(async()=>{try{while(!Q.closed){let Z=await ZZ(Q);for(let J of[...this.subscribers])try{J(Z)}catch{}}}catch{}})()}subscribe($){return this.subscribers.add($),()=>this.subscribers.delete($)}waitFor($,Q=5000){return new Promise((Z,J)=>{let Y=setTimeout(()=>{X(),J(Error(`timeout waiting for ${$} after ${Q}ms`))},Q),X=this.subscribe((G)=>{if(G.__selector===$)clearTimeout(Y),X(),Z(G)})})}send($,Q){JZ(this.socket,{__selector:$,__argument:{WIRConnectionIdentifierKey:this.connectionId,...Q}})}async reportIdentifier(){this.send("_rpc_reportIdentifier:",{})}async listApplications(){this.send("_rpc_getConnectedApplications:",{});let $=await this.waitFor("_rpc_reportConnectedApplicationList:",3000).catch(()=>null);if(!$)return[];let Z=$.__argument.WIRApplicationDictionaryKey??{},J=[];for(let[Y,X]of Object.entries(Z)){let G=X;J.push({appId:Y,bundleId:G.WIRApplicationBundleIdentifierKey,name:G.WIRApplicationNameKey,isProxy:Boolean(G.WIRIsApplicationProxyKey),isActive:Boolean(G.WIRIsApplicationActiveKey),hostAppId:G.WIRHostApplicationIdentifierKey})}return J}async getListing($){this.send("_rpc_forwardGetListing:",{WIRApplicationIdentifierKey:$});let Q=await this.waitFor("_rpc_applicationSentListing:",3000).catch(()=>null);if(!Q)return[];let J=Q.__argument.WIRListingKey??{},Y=[];for(let X of Object.values(J)){let G=X;Y.push({pageId:Number(G.WIRPageIdentifierKey??0),title:G.WIRTitleKey??"",url:G.WIRURLKey??"",type:G.WIRTypeKey??""})}return Y}get connection(){return this.connectionId}forwardSocketSetup($,Q,Z){this.send("_rpc_forwardSocketSetup:",{WIRApplicationIdentifierKey:$,WIRPageIdentifierKey:Q,WIRSenderKey:Z,WIRAutomaticallyPause:!1})}forwardSocketData($,Q,Z,J){this.send("_rpc_forwardSocketData:",{WIRApplicationIdentifierKey:$,WIRPageIdentifierKey:Q,WIRSenderKey:Z,WIRSocketDataKey:J})}forwardDidClose($,Q,Z){this.send("_rpc_forwardDidClose:",{WIRApplicationIdentifierKey:$,WIRPageIdentifierKey:Q,WIRSenderKey:Z})}onMessage($){return this.subscribe($)}close(){this.socket.end()}}class C4{ws;wi;appId;pageId;senderKey;filters=new Map;toolRequestMap=new Map;adapterRequestMap=new Map;requestId=0;innerTargetId=null;wrappedAckIds=new Set;outgoingQueue=[];sawAnyTargetCreated=!1;constructor($,Q,Z,J,Y){this.ws=$,this.wi=Q,this.appId=Z,this.pageId=J,this.senderKey=Y}addMessageFilter($,Q){let Z=this.filters.get($);if(!Z)this.filters.set($,Z=[]);Z.push(Q)}callTarget($,Q={}){return new Promise((Z,J)=>{let Y=--this.requestId;this.adapterRequestMap.set(Y,{resolve:Z,reject:J}),this.sendRaw(JSON.stringify({id:Y,method:$,params:Q}))})}fireEventToTools($,Q){this.sendToTools(JSON.stringify({method:$,params:Q}))}fireResultToTools($,Q){this.sendToTools(JSON.stringify({id:$,result:Q}))}fireErrorToTools($,Q){this.sendToTools(JSON.stringify({id:$,error:{code:Q.code??-32000,message:Q.message}}))}replyEmpty($){if(typeof $.id==="number")this.fireResultToTools($.id,{});return Promise.resolve(null)}async onMessageFromTools($){let Q;try{Q=JSON.parse($)}catch{return}if(typeof Q.method==="string"&&typeof Q.id==="number")this.toolRequestMap.set(Q.id,Q.method);let Z=`tools::${Q.method}`,J=this.filters.get(Z),Y=Q;if(J)for(let X of J){if(!Y)break;Y=await X(Y)}if(Y)this.sendRaw(JSON.stringify(Y))}async onMessageFromTarget($){let Q;try{Q=JSON.parse($)}catch{return}if(Q.method==="Target.targetCreated"){this.sawAnyTargetCreated=!0;let X=Q.params?.targetInfo;if(X?.type==="page"&&!this.innerTargetId)this.innerTargetId=X.targetId,this.flushQueue();return}if(Q.method==="Target.didCommitProvisionalTarget"){let X=Q.params?.newTargetId;if(typeof X==="string")this.innerTargetId=X;return}if(Q.method==="Target.targetDestroyed")return;if(Q.method==="Target.dispatchMessageFromTarget"){let X=Q.params?.message;if(typeof X==="string")return this.onMessageFromTarget(X);return}if(typeof Q.id==="number"&&this.wrappedAckIds.has(Q.id)){this.wrappedAckIds.delete(Q.id);return}if(typeof Q.id==="number"){let X=this.adapterRequestMap.get(Q.id);if(X){if(this.adapterRequestMap.delete(Q.id),"error"in Q&&Q.error)X.reject(Q.error);else X.resolve(Q.result??{});return}let G=this.toolRequestMap.get(Q.id);if(G){this.toolRequestMap.delete(Q.id);let H=`target::${G}`;if("error"in Q&&this.filters.has("target::error"))H="target::error";let K=this.filters.get(H);if(!K)return this.sendToTools($);let W=Q;for(let z of K){if(!W)break;W=await z(W)}if(W)this.sendToTools(JSON.stringify(W));return}return this.sendToTools($)}let Z=`target::${Q.method}`,J=this.filters.get(Z);if(!J)return this.sendToTools($);let Y=Q;for(let X of J){if(!Y)break;Y=await X(Y)}if(Y)this.sendToTools(JSON.stringify(Y))}sendRaw($){let Q=null;try{Q=JSON.parse($)}catch{}let Z=Q&&typeof Q.method==="string"&&Q.method.startsWith("Target.");if(this.innerTargetId&&Q&&!Z){if(typeof Q.id==="number")this.wrappedAckIds.add(Q.id);let J={id:Q.id,method:"Target.sendMessageToTarget",params:{id:Q.id,message:$,targetId:this.innerTargetId}};this.writeFrame(JSON.stringify(J));return}if(!this.innerTargetId&&Q&&!Z){if(this.outgoingQueue.push($),this.outgoingQueue.length===1)setTimeout(()=>{if(!this.innerTargetId&&!this.sawAnyTargetCreated&&this.outgoingQueue.length>0){let J=this.outgoingQueue;this.outgoingQueue=[];for(let Y of J)this.writeFrame(Y)}},250);return}this.writeFrame($)}flushQueue(){if(this.outgoingQueue.length===0)return;let $=this.outgoingQueue;this.outgoingQueue=[];for(let Q of $)this.sendRaw(Q)}writeFrame($){this.wi.forwardSocketData(this.appId,this.pageId,this.senderKey,new TextEncoder().encode($))}sendToTools($){if(this.ws.readyState===1)this.ws.send($)}}function GZ(){return{lastScriptEval:{value:""},pageExecCtx:{id:0,isPage:!1},lastConsoleApiCalled:{value:null}}}function v($,Q,Z){return $.fireResultToTools(Q.id,Z),Promise.resolve(null)}function VZ($,Q){$.addMessageFilter("tools::Debugger.canSetScriptSource",(Z)=>v($,Z,{result:!1})),$.addMessageFilter("tools::Debugger.setBlackboxPatterns",(Z)=>v($,Z,{})),$.addMessageFilter("tools::Debugger.setAsyncCallStackDepth",(Z)=>v($,Z,{})),$.addMessageFilter("target::Debugger.enable",(Z)=>{return $.callTarget("Debugger.setBreakpointsActive",{active:!0}).catch(()=>{}),$.callTarget("Debugger.setPauseOnDebuggerStatements",{enabled:!0}).catch(()=>{}),Promise.resolve(Z)}),$.addMessageFilter("target::Debugger.scriptParsed",(Z)=>{if(Z.params?.scriptId)Q.lastScriptEval.value=String(Z.params.scriptId);return Promise.resolve(Z)}),$.addMessageFilter("tools::Debugger.setBreakpoint",(Z)=>{let J=Z.params??{};return Z.params={location:J.location,options:J.condition?{condition:J.condition}:{}},Promise.resolve(Z)}),$.addMessageFilter("tools::Debugger.setBreakpointByUrl",(Z)=>{let J=Z.params??{};return Z.params={lineNumber:J.lineNumber,url:J.url,urlRegex:J.urlRegex,columnNumber:J.columnNumber,options:J.condition?{condition:J.condition}:{}},Promise.resolve(Z)});for(let Z of["removeBreakpoint","continueToLocation","stepInto","stepOver","stepOut","resume","pause","getScriptSource","evaluateOnCallFrame"])$.addMessageFilter(`tools::Debugger.${Z}`,(J)=>Promise.resolve(J));$.addMessageFilter("target::Debugger.paused",(Z)=>{let J=Z.params?.callFrames;if(Array.isArray(J))for(let Y of J){if(Y.functionName==null&&typeof Y.name==="string")Y.functionName=Y.name;if(!Y.location&&Y.sourceCodeLocation)Y.location={scriptId:String(Y.sourceCodeLocation.scriptId??""),lineNumber:Y.sourceCodeLocation.lineNumber??0,columnNumber:Y.sourceCodeLocation.columnNumber??0};if(Array.isArray(Y.scopeChain)){for(let X of Y.scopeChain)if(!X.object&&X.value)X.object=X.value}}return Promise.resolve(Z)}),$.addMessageFilter("tools::Debugger.setBlackboxedRanges",(Z)=>v($,Z,{})),$.addMessageFilter("tools::Debugger.setSkipAllPauses",(Z)=>v($,Z,{})),$.addMessageFilter("tools::Debugger.setPauseOnExceptions",(Z)=>{return Promise.resolve(Z)})}function KZ($,Q){$.addMessageFilter("target::Runtime.executionContextCreated",(Z)=>{let J=Z.params?.context;if(J){if(!J.origin)J.origin=J.name??"";let Y=Number(J.id),X=!!(J.isPageContext||J.type==="normal");if(Number.isFinite(Y)&&Y>0){if(!Q.pageExecCtx.id||X&&!Q.pageExecCtx.isPage)Q.pageExecCtx.id=Y,Q.pageExecCtx.isPage=X}if(J.frameId)J.auxData={frameId:J.frameId,isDefault:!0},delete J.frameId}return Promise.resolve(Z)}),$.addMessageFilter("tools::Runtime.evaluate",(Z)=>{let J=Z.params;if(!J)return Promise.resolve(Z);if(J.throwOnSideEffect)return v($,Z,{result:{type:"object",subtype:"error",className:"EvalError",description:"EvalError: Possible side-effect in debug-evaluate"},exceptionDetails:{exceptionId:0,text:"EvalError: Possible side-effect in debug-evaluate",lineNumber:0,columnNumber:0,url:"",exception:{type:"object",subtype:"error",className:"EvalError",description:"EvalError: Possible side-effect in debug-evaluate"}}});if("silent"in J)J.doNotPauseOnExceptionsAndMuteConsole=!!J.silent,delete J.silent;if("userGesture"in J)J.emulateUserGesture=!!J.userGesture,delete J.userGesture;return Promise.resolve(Z)}),$.addMessageFilter("target::Runtime.evaluate",(Z)=>{let J=Z.result;if(J?.wasThrown){if(J.result)J.result.subtype="error";J.exceptionDetails={exceptionId:0,text:J.result?.description??"Uncaught",url:"",scriptId:Q.lastScriptEval.value,lineNumber:0,columnNumber:0,stackTrace:{callFrames:[{functionName:"",scriptId:Q.lastScriptEval.value,url:"",lineNumber:0,columnNumber:0}]},exception:J.result}}return Promise.resolve(Z)}),$.addMessageFilter("target::Runtime.getProperties",(Z)=>{let J=Z.result;if(!J)return Promise.resolve(Z);let Y=Array.isArray(J.result)?J.result:Array.isArray(J.properties)?J.properties:null;if(Y)J.result=Y.filter((X)=>X.isOwn||X.nativeGetter).map((X)=>({...X,isOwn:!0})),delete J.properties;if(Array.isArray(J.internalProperties))J.internalProperties=J.internalProperties.map((X)=>({name:X.name,value:X.value}));return Promise.resolve(Z)}),$.addMessageFilter("tools::Runtime.compileScript",(Z)=>v($,Z,{scriptId:null,exceptionDetails:null})),$.addMessageFilter("tools::Runtime.globalLexicalScopeNames",(Z)=>v($,Z,{names:[]})),$.addMessageFilter("tools::Runtime.terminateExecution",(Z)=>v($,Z,{})),$.addMessageFilter("tools::Runtime.getIsolateId",(Z)=>v($,Z,{id:"inspect-webkit"})),$.addMessageFilter("tools::Runtime.getHeapUsage",(Z)=>v($,Z,{usedSize:0,totalSize:0})),$.addMessageFilter("tools::Runtime.discardConsoleEntries",(Z)=>{return Z.method="Console.clearMessages",Promise.resolve(Z)}),$.addMessageFilter("tools::Runtime.runIfWaitingForDebugger",(Z)=>v($,Z,{})),$.addMessageFilter("tools::Runtime.setAsyncCallStackDepth",(Z)=>v($,Z,{})),$.addMessageFilter("tools::Runtime.releaseObject",(Z)=>Promise.resolve(Z)),$.addMessageFilter("tools::Runtime.releaseObjectGroup",(Z)=>Promise.resolve(Z)),$.addMessageFilter("tools::Runtime.callFunctionOn",(Z)=>Promise.resolve(Z)),$.addMessageFilter("tools::Runtime.queryObjects",(Z)=>Promise.resolve(Z)),$.addMessageFilter("target::Debugger.globalObjectCleared",(Z)=>{return $.fireEventToTools("Runtime.executionContextsCleared",{}),Promise.resolve(null)})}function WZ($,Q){$.addMessageFilter("tools::Log.startViolationsReport",(Z)=>v($,Z,{})),$.addMessageFilter("tools::Log.stopViolationsReport",(Z)=>v($,Z,{})),$.addMessageFilter("tools::Log.clear",(Z)=>{return Z.method="Console.clearMessages",Promise.resolve(Z)}),$.addMessageFilter("tools::Log.disable",(Z)=>{return Z.method="Console.disable",Promise.resolve(Z)}),$.addMessageFilter("tools::Log.enable",(Z)=>{return Z.method="Console.enable",Promise.resolve(Z)}),$.addMessageFilter("tools::Runtime.enable",(Z)=>{return $.callTarget("Console.enable",{}).catch(()=>{}),Promise.resolve(Z)}),$.addMessageFilter("target::Console.messageAdded",(Z)=>{let J=Z.params?.message??{},X=(Array.isArray(J.stackTrace)?J.stackTrace:Array.isArray(J.stackTrace?.callFrames)?J.stackTrace.callFrames:[]).map((K)=>({functionName:K.functionName??"",scriptId:K.scriptId??"",url:K.url??"",lineNumber:Number(K.lineNumber??0),columnNumber:Number(K.columnNumber??0)})),G=X.length?{callFrames:X}:void 0,H=Date.now();if(J.source==="console-api"){let K=J.type==="log"?J.level??"log":J.type??"log",W=zZ(K),z=Array.isArray(J.parameters)&&J.parameters.length>0?J.parameters:[{type:"string",value:String(J.text??"")}],U={type:W,args:z,executionContextId:Q.pageExecCtx.id||1,timestamp:H,stackTrace:G};return Q.lastConsoleApiCalled.value=U,$.fireEventToTools("Runtime.consoleAPICalled",U),Promise.resolve(null)}if(J.source==="javascript"&&J.level==="error")return $.fireEventToTools("Runtime.exceptionThrown",{timestamp:H,exceptionDetails:{exceptionId:0,text:String(J.text??"Uncaught"),lineNumber:Number(J.line??0),columnNumber:Number(J.column??0),scriptId:Q.lastScriptEval.value,url:J.url,stackTrace:G,exception:{type:"string",value:String(J.text??"")}}}),Promise.resolve(null);return $.fireEventToTools("Log.entryAdded",{entry:{source:J.source??"other",level:HZ(J.level??J.type??"log"),text:String(J.text??""),timestamp:H,url:J.url,lineNumber:J.line,stackTrace:G,networkRequestId:J.networkRequestId}}),Promise.resolve(null)}),$.addMessageFilter("target::Console.messagesCleared",()=>{return $.fireEventToTools("Log.entriesCleared",{}),$.fireEventToTools("Runtime.consoleAPICalled",{type:"clear",args:[],executionContextId:Q.pageExecCtx.id||1,timestamp:Date.now()}),Q.lastConsoleApiCalled.value=null,Promise.resolve(null)}),$.addMessageFilter("target::Console.messageRepeatCountUpdated",()=>{let Z=Q.lastConsoleApiCalled.value;if(Z)$.fireEventToTools("Runtime.consoleAPICalled",{...Z,timestamp:Date.now()});return Promise.resolve(null)}),$.addMessageFilter("target::Console.heapSnapshot",()=>Promise.resolve(null))}function zZ($){switch($){case"warn":case"warning":return"warning";case"log":case"info":case"error":case"debug":case"dir":case"dirxml":case"table":case"trace":case"clear":case"assert":case"profile":case"profileEnd":case"count":case"timeEnd":case"startGroup":case"startGroupCollapsed":case"endGroup":return $;default:return"log"}}function HZ($){switch($){case"log":case"debug":return"verbose";case"info":return"info";case"warn":case"warning":return"warning";case"error":return"error";default:return"info"}}function MZ($){let Q=new Set;$.addMessageFilter("tools::DOM.enable",(Z)=>v($,Z,{})),$.addMessageFilter("tools::DOM.setInspectMode",(Z)=>{if(Z.method="DOM.setInspectModeEnabled",Z.params)Z.params.enabled=Z.params.mode==="searchForNode",delete Z.params.mode,delete Z.params.highlightConfig;return Promise.resolve(Z)}),$.addMessageFilter("tools::DOM.setInspectedNode",(Z)=>{return Z.method="Console.addInspectedNode",Promise.resolve(Z)}),$.addMessageFilter("tools::DOM.performSearch",(Z)=>{if(Z.params)Z.params={query:Z.params.query,caseSensitive:!!Z.params.caseSensitive};return Promise.resolve(Z)}),$.addMessageFilter("target::DOM.performSearch",(Z)=>{let J=Z.result?.searchId;if(typeof J==="string")Q.add(J);return Promise.resolve(Z)}),$.addMessageFilter("tools::DOM.discardSearchResults",(Z)=>{let J=Z.params?.searchId;if(typeof J==="string")Q.delete(J);return Promise.resolve(Z)}),$.addMessageFilter("tools::DOM.pushNodesByBackendIdsToFrontend",async(Z)=>{let J=Z.params?.backendNodeIds??[],Y=await Promise.all(J.map((X)=>$.callTarget("DOM.pushNodeByBackendIdToFrontend",{backendNodeId:X}).then((G)=>G.nodeId).catch(()=>X)));return $.fireResultToTools(Z.id,{nodeIds:Y}),null}),$.addMessageFilter("tools::DOM.getBoxModel",(Z)=>{return $.callTarget("DOM.highlightNode",{highlightConfig:{showInfo:!0,contentColor:{r:111,g:168,b:220,a:0.66},paddingColor:{r:147,g:196,b:125,a:0.55},borderColor:{r:255,g:229,b:153,a:0.66},marginColor:{r:246,g:178,b:107,a:0.66}},nodeId:Z.params?.nodeId}).catch(()=>{}),Promise.resolve(null)}),$.addMessageFilter("tools::DOM.getNodeForLocation",async(Z)=>{try{let Y=(await $.callTarget("Runtime.evaluate",{expression:`document.elementFromPoint(${Z.params?.x},${Z.params?.y})`})).result?.objectId;if(!Y)return $.fireResultToTools(Z.id,{nodeId:0}),null;let X=await $.callTarget("DOM.requestNode",{objectId:Y});$.fireResultToTools(Z.id,{nodeId:X.nodeId,backendNodeId:X.nodeId})}catch(J){$.fireErrorToTools(Z.id,{message:J?.message??String(J)})}return null}),$.addMessageFilter("tools::DOM.resolveNode",(Z)=>{if(Z.params&&Z.params.objectGroup===void 0)delete Z.params.objectGroup;return Promise.resolve(Z)})}function _Z($){$.addMessageFilter("tools::DOMDebugger.getEventListeners",async(Q)=>{try{let Z=await $.callTarget("DOM.requestNode",{objectId:Q.params?.objectId}),Y=((await $.callTarget("DOM.getEventListenersForNode",{nodeId:Z.nodeId,objectGroup:"event-listeners-panel"})).listeners??[]).map((X)=>({type:X.type,useCapture:!!X.useCapture,passive:!!X.passive,once:!!X.once,location:X.location,handler:X.handler}));$.fireResultToTools(Q.id,{listeners:Y})}catch(Z){$.fireErrorToTools(Q.id,{message:Z?.message??String(Z)})}return null}),$.addMessageFilter("tools::DOMDebugger.setXHRBreakpoint",(Q)=>v($,Q,{})),$.addMessageFilter("tools::DOMDebugger.removeXHRBreakpoint",(Q)=>v($,Q,{})),$.addMessageFilter("tools::DOMDebugger.setEventListenerBreakpoint",(Q)=>v($,Q,{})),$.addMessageFilter("tools::DOMDebugger.removeEventListenerBreakpoint",(Q)=>v($,Q,{}))}function FZ($,Q){$.addMessageFilter("tools::Page.setOverlayMessage",(X)=>{return X.method="Debugger.setOverlayMessage",Promise.resolve(X)}),$.addMessageFilter("tools::Page.configureOverlay",(X)=>{return X.method="Debugger.setOverlayMessage",Promise.resolve(X)}),$.addMessageFilter("tools::Page.getNavigationHistory",async(X)=>{try{let G=await $.callTarget("Runtime.evaluate",{expression:"window.location.href"}),H=await $.callTarget("Runtime.evaluate",{expression:"document.title"});$.fireResultToTools(X.id,{currentIndex:0,entries:[{id:0,url:G.result?.value??"",userTypedURL:G.result?.value??"",title:H.result?.value??"",transitionType:"link"}]})}catch(G){$.fireErrorToTools(X.id,{message:G?.message??String(G)})}return null}),$.addMessageFilter("target::Page.frameNavigated",(X)=>{return G$(X.params?.frame),Promise.resolve(X)}),$.addMessageFilter("target::Page.getResourceTree",(X)=>{return w8(X.result?.frameTree),Promise.resolve(X)}),$.addMessageFilter("tools::Page.getFrameTree",async(X)=>{if(typeof X.id!=="number")return null;try{let G=await $.callTarget("Page.getResourceTree",{}),H=V$(G?.frameTree);w8(H),$.fireResultToTools(X.id,{frameTree:H})}catch(G){$.fireErrorToTools(X.id,{message:G?.message??String(G)})}return null}),$.addMessageFilter("tools::Page.createIsolatedWorld",(X)=>{if(typeof X.id!=="number")return Promise.resolve(null);return v($,X,{executionContextId:Q.pageExecCtx.id||1})});let Z=1;$.addMessageFilter("tools::Page.addScriptToEvaluateOnNewDocument",(X)=>v($,X,{identifier:`pptr-${Z++}`})),$.addMessageFilter("tools::WebMCP.enable",(X)=>v($,X,{})),$.addMessageFilter("tools::WebMCP.disable",(X)=>v($,X,{})),$.addMessageFilter("tools::Page.captureScreenshot",(X)=>{return $.fireErrorToTools(X.id,{message:"Page.captureScreenshot not supported by Safari"}),Promise.resolve(null)}),$.addMessageFilter("tools::Page.startScreencast",(X)=>v($,X,{})),$.addMessageFilter("tools::Page.stopScreencast",(X)=>v($,X,{})),$.addMessageFilter("tools::Page.screencastFrameAck",(X)=>v($,X,{})),$.addMessageFilter("tools::Page.setLifecycleEventsEnabled",(X)=>v($,X,{}));let J="",Y="0.1";$.addMessageFilter("target::Page.frameNavigated",(X)=>{let G=X.params?.frame;if(G)Y=G.id??Y,J=G.loaderId??J,$.fireEventToTools("Page.frameStartedLoading",{frameId:Y}),$.fireEventToTools("Page.lifecycleEvent",{frameId:Y,loaderId:J,name:"init",timestamp:0}),$.fireEventToTools("Page.lifecycleEvent",{frameId:Y,loaderId:J,name:"commit",timestamp:0});return Promise.resolve(X)}),$.addMessageFilter("target::Page.domContentEventFired",(X)=>{return $.fireEventToTools("Page.lifecycleEvent",{frameId:Y,loaderId:J,name:"DOMContentLoaded",timestamp:X.params?.timestamp??0}),Promise.resolve(X)}),$.addMessageFilter("target::Page.loadEventFired",(X)=>{return $.fireEventToTools("Page.lifecycleEvent",{frameId:Y,loaderId:J,name:"load",timestamp:X.params?.timestamp??0}),$.fireEventToTools("Page.lifecycleEvent",{frameId:Y,loaderId:J,name:"networkAlmostIdle",timestamp:X.params?.timestamp??0}),$.fireEventToTools("Page.lifecycleEvent",{frameId:Y,loaderId:J,name:"networkIdle",timestamp:X.params?.timestamp??0}),$.fireEventToTools("Page.frameStoppedLoading",{frameId:Y}),Promise.resolve(X)})}function G$($){if(!$)return;if(!$.securityOrigin)try{$.securityOrigin=new URL($.url??"").origin}catch{$.securityOrigin="://"}if(!$.mimeType)$.mimeType="text/html"}function w8($){if(!$)return;if(G$($.frame),Array.isArray($.childFrames))$.childFrames.forEach(w8)}function V$($){if(!$)return $;let Q={frame:$.frame};if(Array.isArray($.childFrames))Q.childFrames=$.childFrames.map(V$);return Q}function NZ($){$.addMessageFilter("tools::Overlay.enable",(Q)=>v($,Q,{})),$.addMessageFilter("tools::Overlay.disable",(Q)=>v($,Q,{})),$.addMessageFilter("tools::Overlay.highlightNode",(Q)=>{let Z=Q.params??{};return Q.method="DOM.highlightNode",Q.params={highlightConfig:Z.highlightConfig,nodeId:Z.nodeId,objectId:Z.objectId},Promise.resolve(Q)}),$.addMessageFilter("tools::Overlay.highlightFrame",(Q)=>{return Q.method="DOM.highlightFrame",Promise.resolve(Q)}),$.addMessageFilter("tools::Overlay.highlightQuad",(Q)=>{return Q.method="DOM.highlightQuad",Promise.resolve(Q)}),$.addMessageFilter("tools::Overlay.highlightRect",(Q)=>{return Q.method="DOM.highlightRect",Promise.resolve(Q)}),$.addMessageFilter("tools::Overlay.hideHighlight",(Q)=>{return Q.method="DOM.hideHighlight",Promise.resolve(Q)}),$.addMessageFilter("tools::Overlay.setShowPaintRects",(Q)=>{return Q.method="Page.setShowPaintRects",Promise.resolve(Q)}),$.addMessageFilter("tools::Overlay.setInspectMode",(Q)=>{let Z=Q.params??{};return Q.method="DOM.setInspectModeEnabled",Q.params={enabled:typeof Z.mode==="string"&&Z.mode!=="none",highlightConfig:Z.highlightConfig},Promise.resolve(Q)})}function UZ($){$.addMessageFilter("tools::Emulation.canEmulate",(Q)=>v($,Q,{result:!0})),$.addMessageFilter("tools::Emulation.setTouchEmulationEnabled",(Q)=>{return Q.method="Page.setTouchEmulationEnabled",Promise.resolve(Q)}),$.addMessageFilter("tools::Emulation.setScriptExecutionDisabled",(Q)=>{return Q.method="Page.setScriptExecutionDisabled",Promise.resolve(Q)}),$.addMessageFilter("tools::Emulation.setEmulatedMedia",(Q)=>{return Q.method="Page.setEmulatedMedia",Promise.resolve(Q)}),$.addMessageFilter("tools::Rendering.setShowPaintRects",(Q)=>{return Q.method="Page.setShowPaintRects",Promise.resolve(Q)}),$.addMessageFilter("tools::Emulation.setDeviceMetricsOverride",(Q)=>v($,Q,{})),$.addMessageFilter("tools::Emulation.clearDeviceMetricsOverride",(Q)=>v($,Q,{})),$.addMessageFilter("tools::Emulation.setUserAgentOverride",(Q)=>{let Z=Q.params?.userAgent??"";return Q.method="Page.overrideUserAgent",Q.params={value:Z},Promise.resolve(Q)}),$.addMessageFilter("tools::Emulation.setFocusEmulationEnabled",(Q)=>v($,Q,{})),$.addMessageFilter("tools::Emulation.setDefaultBackgroundColorOverride",(Q)=>v($,Q,{}))}function T8($){switch($){case"Document":case"Image":case"Font":case"Script":case"XHR":case"Fetch":case"Ping":case"WebSocket":return $;case"StyleSheet":return"Stylesheet";default:return"Other"}}function DZ($){if(!$)return $;return{...RZ,...$,hasPostData:$.postData!=null}}function PZ($){if(!$)return $;let Q=0,Z=$.headers??{},J=Z["Content-Length"]??Z["content-length"];if(J!=null)Q=Number(J)||0;return{...CZ,...$,fromDiskCache:$.source==="disk-cache",fromServiceWorker:$.source==="service-worker",encodedDataLength:Q}}function TZ($,Q){if(!$)return;for(let[Z,J]of Object.entries(Q))if(Z in $&&!(J in $))$[J]=$[Z],delete $[Z]}function EZ($){let Q=typeof $.size==="number"?$.size:($.name?.length??0)+($.value?.length??0);return{name:$.name,value:$.value,domain:$.domain,path:$.path,expires:$.expires??-1,size:Q,httpOnly:!!$.httpOnly,secure:!!$.secure,session:!!$.session,...$.sameSite?{sameSite:$.sameSite}:{}}}function IZ($,Q){let Z=new Map,J=1e4,Y=1024,X=4194304,G=Promise.resolve(),H=(W)=>{let z=G.then(W,W);return G=z.catch(()=>{}),z};for(let[W,z]of Object.entries(BZ))$.addMessageFilter(`tools::${W}`,(U)=>{return U.method=z,Promise.resolve(U)});$.addMessageFilter("tools::Network.setCacheDisabled",(W)=>{if(W.params&&"cacheDisabled"in W.params)W.params={disabled:!!W.params.cacheDisabled};return Promise.resolve(W)});let K=async(W)=>{try{let z=await $.callTarget("Page.getCookies",{}),U=Array.isArray(z?.cookies)?z.cookies.map(EZ):[];$.fireResultToTools(W.id,{cookies:U})}catch(z){$.fireErrorToTools(W.id,{message:z?.message??String(z)})}return null};$.addMessageFilter("tools::Network.getCookies",K),$.addMessageFilter("tools::Network.getAllCookies",K),$.addMessageFilter("tools::Network.setCookie",(W)=>{let z=W.params??{};return W.method="Page.setCookie",W.params={cookie:{name:z.name,value:z.value,domain:z.domain??"",path:z.path??"/",expires:z.expires??-1,session:!1,httpOnly:!!z.httpOnly,secure:!!z.secure,sameSite:z.sameSite??"None"}},Promise.resolve(W)}),$.addMessageFilter("tools::Network.setCookies",async(W)=>{let z=Array.isArray(W.params?.cookies)?W.params.cookies:[];try{await Promise.all(z.map((U)=>$.callTarget("Page.setCookie",{cookie:U}))),$.fireResultToTools(W.id,{})}catch(U){$.fireErrorToTools(W.id,{message:U?.message??String(U)})}return null}),$.addMessageFilter("tools::Network.deleteCookies",(W)=>{let z=W.params??{},U=z.url??`https://${(z.domain??"").replace(/^\./,"")}${z.path??"/"}`;return W.method="Page.deleteCookie",W.params={cookieName:z.name,url:U},Promise.resolve(W)}),$.addMessageFilter("tools::Network.deleteCookie",(W)=>{return W.method="Page.deleteCookie",Promise.resolve(W)}),$.addMessageFilter("tools::Network.clearBrowserCookies",async(W)=>{try{let z=await $.callTarget("Page.getCookies",{}),U=Array.isArray(z?.cookies)?z.cookies:[];await Promise.all(U.map((M)=>$.callTarget("Page.deleteCookie",{cookieName:M.name,url:`${M.secure?"https":"http"}://${(M.domain??"").replace(/^\./,"")}${M.path??"/"}`}).catch(()=>{}))),$.fireResultToTools(W.id,{})}catch(z){$.fireErrorToTools(W.id,{message:z?.message??String(z)})}return null}),$.addMessageFilter("tools::Network.canEmulateNetworkConditions",(W)=>v($,W,{result:!1})),$.addMessageFilter("tools::Network.setExtraHTTPHeaders",(W)=>v($,W,{})),$.addMessageFilter("tools::Network.setBlockedURLs",(W)=>v($,W,{})),$.addMessageFilter("tools::Network.emulateNetworkConditions",(W)=>v($,W,{})),$.addMessageFilter("tools::Network.setMonitoringXHREnabled",(W)=>v($,W,{})),$.addMessageFilter("tools::Network.getResponseBody",async(W)=>{let z=W.params?.requestId,U=typeof z==="string"?Z.get(z):void 0;if(!U)return $.fireErrorToTools(W.id,{message:"Network.getResponseBody: requestId not tracked (only requests observed via requestWillBeSent are recoverable)"}),null;if(U.method&&U.method.toUpperCase()!=="GET")return $.fireErrorToTools(W.id,{message:`Network.getResponseBody: cannot recover ${U.method} response body (bridge re-fetch is GET-only)`}),null;if(U.bytes===0)return $.fireResultToTools(W.id,{body:"",base64Encoded:!1}),null;return H(async()=>{try{let M={};for(let[I,_]of Object.entries(U.headers??{})){let V=I.toLowerCase();if(V==="if-none-match"||V==="if-modified-since"||V==="host"||V==="connection")continue;M[I]=String(_)}let F=new AbortController,A=setTimeout(()=>F.abort(),1e4),R;try{R=await fetch(U.url,{headers:M,redirect:"follow",signal:F.signal})}finally{clearTimeout(A)}let x=Number(R.headers.get("content-length")??"");if(Number.isFinite(x)&&x>4194304){$.fireErrorToTools(W.id,{message:`Network.getResponseBody: response too large (${x} bytes > ${"4194304"}) — skipped re-fetch`});try{await R.arrayBuffer()}catch{}return}let j=Buffer.from(await R.arrayBuffer());if(j.byteLength>4194304){$.fireErrorToTools(W.id,{message:`Network.getResponseBody: response too large (${j.byteLength} bytes > 4194304)`});return}let D=((R.headers.get("content-type")??"").split(";")[0]??"").trim(),L=/^(text\/|image\/svg\+xml|application\/(json|xml|javascript|ecmascript|x-www-form-urlencoded))$/.test(D),C=L?j.toString("utf8"):j.toString("base64");$.fireResultToTools(W.id,{body:C,base64Encoded:!L})}catch(M){$.fireErrorToTools(W.id,{message:`Network.getResponseBody re-fetch failed: ${M?.message??String(M)}`})}}),null});for(let[W,z]of Object.entries(LZ))$.addMessageFilter(`target::${W}`,(U)=>{return TZ(U.params,z),Promise.resolve(U)});$.addMessageFilter("target::Network.requestWillBeSent",(W)=>{let z=W.params;if(z){if(Object.assign(z,{...OZ,...z}),z.request=DZ(z.request),z.type=T8(z.type),typeof z.requestId==="string"&&typeof z.request?.url==="string"){if(Z.size>=1024){let U=Z.keys().next().value;if(U!==void 0)Z.delete(U)}Z.set(z.requestId,{url:z.request.url,method:z.request.method,headers:z.request.headers,frameId:z.frameId,bytes:0})}}return Promise.resolve(W)}),$.addMessageFilter("target::Network.responseReceived",(W)=>{let z=W.params;if(z)Object.assign(z,{...AZ,...z}),z.response=PZ(z.response),z.type=T8(z.type);return Promise.resolve(W)}),$.addMessageFilter("target::Network.loadingFinished",(W)=>{let z=W.params;if(z){let U=z.metrics?.responseBodyBytesReceived;if(typeof U==="number"&&z.encodedDataLength==null)z.encodedDataLength=U;if(Object.assign(z,{...jZ,...z}),typeof z.requestId==="string"&&typeof U==="number"){let M=Z.get(z.requestId);if(M&&U>M.bytes)M.bytes=U}}return Promise.resolve(W)}),$.addMessageFilter("target::Network.dataReceived",(W)=>{let z=W.params;if(z&&typeof z.requestId==="string"){let U=Z.get(z.requestId);if(U){let M=Number(z.dataLength)||0;U.bytes+=M}}return Promise.resolve(W)}),$.addMessageFilter("target::Network.loadingFailed",(W)=>{let z=W.params;if(z){if(z.type=T8(z.type),!("canceled"in z))z.canceled=!1}return Promise.resolve(W)}),$.addMessageFilter("target::Network.requestServedFromMemoryCache",(W)=>{if(W.method="Network.requestServedFromCache",W.params)W.params={requestId:W.params.requestId};return Promise.resolve(W)}),$.addMessageFilter("tools::Network.loadNetworkResource",async(W)=>{let z=W.params??{};if(!Q)return $.fireResultToTools(W.id,{resource:{success:!1,netError:1,netErrorName:"ERR_NOT_IMPLEMENTED"}}),null;try{let U=await $.callTarget("Network.loadResource",{frameId:z.frameId,url:z.url}),M=!!U?.content&&(U?.status??0)>=200&&(U?.status??0)<300,F;if(M)F=`network-resource:${z.frameId??""}:${z.url}`,Q.set(F,String(U.content));$.fireResultToTools(W.id,{resource:{success:M,stream:F,httpStatusCode:U?.status,headers:U?.headers,mimeType:U?.mimeType}})}catch(U){$.fireResultToTools(W.id,{resource:{success:!1,netError:2,netErrorName:U?.message??"ERR_FAILED"}})}return null})}function xZ($){for(let Q of["Target.setAutoAttach","Target.setDiscoverTargets","Target.setRemoteLocations"])$.addMessageFilter(`tools::${Q}`,(Z)=>v($,Z,{}))}function qZ($){$.addMessageFilter("target::Inspector.inspect",async(Q)=>{let Z=Q.params?.object?.objectId;if(typeof Z!=="string")return null;try{let Y=(await $.callTarget("DOM.requestNode",{objectId:Z}))?.nodeId;if(typeof Y==="number")$.fireEventToTools("Overlay.inspectNodeRequested",{backendNodeId:Y}),$.fireEventToTools("DOM.inspectNodeRequested",{backendNodeId:Y})}catch{}return null})}function SZ($){if(!$)return $;let Q=$.origin==="inspector";return{styleSheetId:$.styleSheetId,frameId:$.frameId,sourceURL:$.sourceURL??"",origin:$.origin==="author"?"regular":$.origin,title:$.title??"",disabled:!!$.disabled,isInline:!!$.isInline,startLine:$.startLine??0,startColumn:$.startColumn??0,isMutable:Q,isConstructed:Q,length:$.length??0,endLine:$.endLine??0,endColumn:$.endColumn??0,hasSourceURL:!!$.sourceURL}}function S8($){if(!$)return $;let Q={origin:$.origin==="author"?"regular":$.origin,style:R0($.style),selectorList:fZ($.selectorList)};if($.ruleId?.styleSheetId)Q.styleSheetId=$.ruleId.styleSheetId;if(Array.isArray($.groupings))Q.media=$.groupings.map((Z)=>({text:Z.text,sourceURL:Z.sourceURL,source:kZ[Z.type]}));return Q}function hZ($){let Q={lastNodeId:0},Z=new Map;async function J(Y,X){let G=Z.get(Y);if(!G)try{if(G=(await $.callTarget("CSS.getStyleSheet",{styleSheetId:Y}))?.styleSheet,G)Z.set(Y,G)}catch{}let H=G?.rules??[];for(let K=0;K<H.length;K++)if(wZ(H[K]?.style?.range,X))return{styleSheetId:Y,ordinal:K};return{styleSheetId:Y,ordinal:0}}$.addMessageFilter("tools::CSS.enable",(Y)=>{return $.fireResultToTools(Y.id,{}),Promise.resolve(null)}),$.addMessageFilter("target::CSS.styleSheetAdded",(Y)=>{if(Y.params?.header)Y.params.header=SZ(Y.params.header);return Promise.resolve(Y)}),$.addMessageFilter("target::CSS.getInlineStylesForNode",(Y)=>{let X=Y.result;if(X)Y.result={inlineStyle:R0(X.inlineStyle),attributesStyle:R0(X.attributesStyle)};return Promise.resolve(Y)}),$.addMessageFilter("tools::CSS.getMatchedStylesForNode",async(Y)=>{if(typeof Y.params?.nodeId==="number")Q.lastNodeId=Y.params.nodeId;try{let[X,G]=await Promise.all([$.callTarget("CSS.getInlineStylesForNode",{nodeId:Y.params.nodeId}),$.callTarget("CSS.getMatchedStylesForNode",{nodeId:Y.params.nodeId,includePseudo:!0,includeInherited:!0})]);$.fireResultToTools(Y.id,{inlineStyle:R0(X?.inlineStyle),attributesStyle:R0(X?.attributesStyle),matchedCSSRules:p8(G?.matchedCSSRules),pseudoElements:vZ(G?.pseudoElements),inherited:bZ(G?.inherited),cssKeyframesRules:[]})}catch(X){$.fireErrorToTools(Y.id,{message:X?.message??String(X)})}return null}),$.addMessageFilter("tools::CSS.setStyleTexts",async(Y)=>{let X=Y.params?.edits??[],G=[];for(let H of X)try{let K=await J(H.styleSheetId,H.range),W=await $.callTarget("CSS.setStyleText",{styleId:K,text:H.text});G.push(R0(W?.style)),Z.delete(H.styleSheetId),$.fireEventToTools("CSS.styleSheetChanged",{styleSheetId:H.styleSheetId})}catch{G.push(null)}return $.fireResultToTools(Y.id,{styles:G}),null}),$.addMessageFilter("tools::CSS.setRuleSelector",async(Y)=>{let{styleSheetId:X,range:G,selector:H}=Y.params??{};try{let K=await J(X,G);Y.params={ruleId:K,selector:H}}catch(K){return $.fireErrorToTools(Y.id,{message:K?.message??String(K)}),null}return Y}),$.addMessageFilter("target::CSS.setRuleSelector",(Y)=>{if(Y.result?.rule)Y.result={rule:S8(Y.result.rule)};return Promise.resolve(Y)}),$.addMessageFilter("tools::CSS.addRule",async(Y)=>{let X=Y.params??{},G=String(X.ruleText??"").trim().replace(/\{\s*\}\s*$/,"").trim();try{let H=await $.callTarget("CSS.addRule",{contextNodeId:Q.lastNodeId,styleSheetId:X.styleSheetId,selector:G});$.fireResultToTools(Y.id,{rule:S8(H?.rule)})}catch(H){$.fireErrorToTools(Y.id,{message:H?.message??String(H)})}return null})}function pZ($){$.addMessageFilter("tools::Browser.getVersion",(Q)=>v($,Q,uZ)),$.addMessageFilter("tools::Browser.getWindowForTarget",(Q)=>v($,Q,{windowId:1,bounds:{}})),$.addMessageFilter("tools::Browser.setWindowBounds",(Q)=>v($,Q,{}))}function cZ($){switch($){case"mousePressed":return"mousedown";case"mouseReleased":return"click";case"mouseMoved":return"mousemove";default:return null}}function mZ($){let Q=async(Z)=>{let J=Z.params??{},Y=cZ(J.type);if(!Y)return $.fireResultToTools(Z.id,{}),null;let X=Y==="click"?["mousedown","click","mouseup"]:[Y];try{for(let G of X){let H={x:Number(J.x)||0,y:Number(J.y)||0,modifiers:Number(J.modifiers)||0,button:J.button??"none",type:G},K=`(${gZ}, __sd_simulate(${JSON.stringify(H)}))`;await $.callTarget("Runtime.evaluate",{expression:K})}$.fireResultToTools(Z.id,{})}catch(G){$.fireErrorToTools(Z.id,{message:G?.message??String(G)})}return null};$.addMessageFilter("tools::Input.dispatchMouseEvent",Q),$.addMessageFilter("tools::Input.emulateTouchFromMouseEvent",Q),$.addMessageFilter("tools::Input.setIgnoreInputEvents",(Z)=>{return $.fireResultToTools(Z.id,{}),Promise.resolve(null)})}function dZ($){let Q=new Map;return $.addMessageFilter("tools::IO.read",(Z)=>{let J=String(Z.params?.handle??""),Y=Number(Z.params?.size)||lZ,X=Number(Z.params?.offset)||0,G=Q.get(J);if(G===void 0)return $.fireResultToTools(Z.id,{data:"",eof:!0,base64Encoded:!1}),Promise.resolve(null);let H=G.slice(X,X+Y),K=X+Y>=G.length;return $.fireResultToTools(Z.id,{data:H,eof:K,base64Encoded:!1}),Promise.resolve(null)}),$.addMessageFilter("tools::IO.close",(Z)=>{return Q.delete(String(Z.params?.handle??"")),$.fireResultToTools(Z.id,{}),Promise.resolve(null)}),Q}function iZ($){$.addMessageFilter("tools::Accessibility.enable",(Q)=>v($,Q,{})),$.addMessageFilter("tools::Accessibility.disable",(Q)=>v($,Q,{})),$.addMessageFilter("tools::Accessibility.getPartialAXTree",async(Q)=>{let Z=Q.params??{},J=Z.nodeId??Z.backendNodeId;if(typeof J!=="number")return $.fireResultToTools(Q.id,{nodes:[]}),null;try{let X=(await $.callTarget("DOM.getAccessibilityPropertiesForNode",{nodeId:J}))?.properties??{},G={nodeId:String(J),ignored:Boolean(X.ignored),role:X.role?{type:"role",value:String(X.role)}:void 0,name:X.label?{type:"computedString",value:String(X.label)}:void 0,backendDOMNodeId:J,childIds:[],properties:[]};$.fireResultToTools(Q.id,{nodes:[G]})}catch(Y){$.fireResultToTools(Q.id,{nodes:[]})}return null})}function aZ($){for(let[Z,J]of Object.entries(oZ))$.addMessageFilter(`tools::${Z}`,(Y)=>v($,Y,J));for(let Z of nZ)for(let J of["enable","disable"])$.addMessageFilter(`tools::${Z}.${J}`,(Y)=>v($,Y,{}));let Q=[["Autofill.setAddresses",{}],["Storage.getStorageKey",{storageKey:""}],["Storage.trackCacheStorageForOrigin",{}],["Storage.trackIndexedDBForOrigin",{}],["Storage.untrackCacheStorageForOrigin",{}],["Storage.untrackIndexedDBForOrigin",{}],["Storage.getCookies",{cookies:[]}],["ServiceWorker.unregister",{}]];for(let[Z,J]of Q)$.addMessageFilter(`tools::${Z}`,(Y)=>v($,Y,J))}function y8($){let Q=GZ();aZ($);let Z=dZ($);VZ($,Q),KZ($,Q),WZ($,Q),MZ($),_Z($),FZ($,Q),NZ($),UZ($),IZ($,Z),xZ($),qZ($),hZ($),pZ($),mZ($),iZ($)}function W$($){let Q=`${$.reqHost}/devtools/page/${$.id}`;return{description:$.description,devtoolsFrontendUrl:`devtools://devtools/bundled/inspector.html?ws=${Q}`,devtoolsFrontendUrlCompat:`devtools://devtools/bundled/inspector.html?ws=${Q}`,id:$.id,title:$.title,type:$.type,url:$.url,webSocketDebuggerUrl:`ws://${Q}`,faviconUrl:""}}function b0($){return $.replace(/[&<>"']/g,(Q)=>rZ[Q])}function z$($){return K$.createServer((Q,Z)=>{let J=new URL(Q.url??"/","http://placeholder"),Y=Q.headers.host??"";if(J.pathname==="/json/version"){let X=typeof $.version==="function"?$.version(Y):$.version;return E8(Z,X)}if(J.pathname==="/json"||J.pathname==="/json/list")return E8(Z,$.listTargets(Y));if(J.pathname==="/json/protocol")return E8(Z,{});if(J.pathname==="/")return tZ(Z,$,Y);Z.writeHead(404,{"content-type":"text/plain"}),Z.end("not found")})}function E8($,Q,Z=200){$.writeHead(Z,{"content-type":"application/json; charset=utf-8"}),$.end(JSON.stringify(Q))}function tZ($,Q,Z){let J=Q.listTargets(Z),Y=J.map((K)=>`<li><strong>${b0(K.title||K.url||K.id)}</strong><br><small>${b0(K.url)}</small><br><small>copy &amp; paste into Chrome's address bar:</small><br><code style="user-select:all">${b0(K.devtoolsFrontendUrl)}</code></li>`).join(""),X=`inspect-webkit${Q.brand?` (${Q.brand})`:""}`,G=Q.indexNote??'<p>Open <code style="display:inline;padding:1px 4px">chrome://inspect</code> → <em>Configure…</em> → add '+`<code style="display:inline;padding:1px 4px">${b0(Z)}</code>.</p>`,H=`<!doctype html><meta charset=utf-8><title>${b0(X)}</title><style>body{font:14px -apple-system,sans-serif;max-width:760px;margin:2em auto;padding:0 1em}code{display:block;background:#f4f4f4;padding:.5em;border-radius:4px;word-break:break-all;margin:.4em 0 1em}li{margin-bottom:1.5em;list-style:none}</style><h1>${b0(X)} — ${J.length} target${J.length===1?"":"s"}</h1>`+G+`<ul>${Y}</ul>`+'<hr><p>JSON: <a href="/json/list">/json/list</a> · <a href="/json/version">/json/version</a></p>';$.writeHead(200,{"content-type":"text/html; charset=utf-8"}),$.end(H)}function H$($,Q,Z){return new Promise((J,Y)=>{$.once("error",(G)=>{if(G.port==null)G.port=Z;if(G.host==null)G.host=Q;Y(G)});let X=Q==="localhost"||Q==="::1"||Q==="127.0.0.1"?"::":Q;$.listen({port:Z,host:X,ipv6Only:!1},()=>{$.off("error",Y),J()})})}function M$($){let Q=!process.env.NO_COLOR&&process.stderr.isTTY===!0,Z=(K,W)=>Q?`\x1B[${K}m${W}\x1B[0m`:W,J=(K)=>Z("1",K),Y=(K)=>Z("2",K),X=(K)=>Z("36",K),G=(K)=>Z("32",K),H=`http://${$.host}:${$.port}`;console.error(`${G("●")} ${J(`${$.brand} CDP`)} ${X(H)}`),console.error(` ${Y("chrome")} chrome://inspect → ${$.host}:${$.port}`),console.error(` ${Y("vscode")} "type": "chrome", "port": ${$.port}`)}function sZ($,Q){let Z=!!process.env.INSPECT_WEBKIT_DEBUG,J=new Map,Y=!1,X=!1,G=!1,H=new Map,K=null;function W(L){if($.readyState!==1)return;let C=JSON.stringify(L);if(Z)console.error(`[browser] tools<< ${C.slice(0,240)}`);$.send(C)}function z(L,C){let I={method:L,params:C};if(K)I.sessionId=K;W(I)}function U(L,C){return{targetId:L.targetId,type:L.type==="page"?"page":L.type||"other",title:L.title||"",url:L.url||"",attached:C,canAccessOpener:!1,browserContextId:"default"}}function M(L){for(let C of J.values())if(C.targetId===L)return!0;return!1}function F(L,C){let I=Q.listEntries().find((B)=>B.targetId===L);if(!I)return null;let _=crypto.randomUUID(),V=(B)=>{let P;try{P=JSON.parse(B)}catch{return}P.sessionId=_,W(P)},N=Q.createPageSession(L,V);if(!N)return null;return J.set(_,{handle:N,targetId:L}),z("Target.attachedToTarget",{sessionId:_,targetInfo:U(I,!0),waitingForDebugger:C}),{sessionId:_,entry:I}}function A(L){let C=J.get(L);if(!C)return!1;try{C.handle.close()}catch{}return J.delete(L),z("Target.detachedFromTarget",{sessionId:L,targetId:C.targetId}),!0}function R(){let L=Q.listEntries(),C=new Set;for(let I of L){C.add(I.targetId);let _=H.get(I.targetId);if(!_){if(H.set(I.targetId,I),Y)z("Target.targetCreated",{targetInfo:U(I,M(I.targetId))});if(X&&!M(I.targetId))F(I.targetId,G)}else if(_.title!==I.title||_.url!==I.url){if(H.set(I.targetId,I),Y)z("Target.targetInfoChanged",{targetInfo:U(I,M(I.targetId))})}}for(let I of[...H.keys()]){if(C.has(I))continue;H.delete(I);for(let[_,V]of J)if(V.targetId===I)A(_);if(Y)z("Target.targetDestroyed",{targetId:I})}}let x=setInterval(R,Q.refreshMs??1000);function j(L,C){if(L)C.sessionId=L;W(C)}function D(L,C){let{id:I,method:_}=L,V=L.params??{};switch(_){case"Browser.getVersion":return j(C,{id:I,result:{protocolVersion:"1.3",product:"Safari/inspect-webkit",revision:"@",userAgent:"Mozilla/5.0 (iPhone; CPU iPhone OS like Mac OS X) AppleWebKit/605.1.15 Safari/inspect-webkit",jsVersion:""}});case"Target.attachToBrowserTarget":{if(!K)K=crypto.randomUUID();return j(C,{id:I,result:{sessionId:K}})}case"Target.setDiscoverTargets":{if(Y=!!V.discover,Y)for(let N of Q.listEntries())H.set(N.targetId,N),z("Target.targetCreated",{targetInfo:U(N,M(N.targetId))});if(typeof I==="number")j(C,{id:I,result:{}});return}case"Target.getTargets":{let N=Q.listEntries().map((B)=>U(B,M(B.targetId)));return j(C,{id:I,result:{targetInfos:N}})}case"Target.setAutoAttach":{if(X=!!V.autoAttach,G=!!V.waitForDebuggerOnStart,X){for(let N of Q.listEntries())if(!M(N.targetId))F(N.targetId,G)}if(typeof I==="number")j(C,{id:I,result:{}});return}case"Target.attachToTarget":{for(let[B,P]of J)if(P.targetId===V.targetId){if(typeof I==="number")j(C,{id:I,result:{sessionId:B}});return}let N=F(V.targetId,!1);if(!N){if(typeof I==="number")j(C,{id:I,error:{code:-32000,message:"No target with given id found"}});return}if(typeof I==="number")j(C,{id:I,result:{sessionId:N.sessionId}});return}case"Target.detachFromTarget":{if(A(V.sessionId),typeof I==="number")j(C,{id:I,result:{}});return}case"Target.sendMessageToTarget":{let N=J.get(V.sessionId);if(N)N.handle.onMessageFromTools(V.message);if(typeof I==="number")j(C,{id:I,result:{}});return}case"Target.setRemoteLocations":case"Target.exposeDevToolsProtocol":case"Target.activateTarget":case"Target.closeTarget":if(typeof I==="number")j(C,{id:I,result:{}});return;case"Target.getBrowserContexts":{if(typeof I==="number")j(C,{id:I,result:{browserContextIds:["default"]}});return}}if(typeof I==="number")j(C,{id:I,error:{code:-32601,message:`Browser-level method '${_??"?"}' not implemented`}})}$.on("message",(L,C)=>{let I=C?new TextDecoder().decode(L):L.toString();if(Z)console.error(`[browser] tools>> ${I.slice(0,240)}`);let _;try{_=JSON.parse(I)}catch{return}if(typeof _.sessionId==="string"){if(_.sessionId===K){let B={..._};return delete B.sessionId,D(B,_.sessionId)}let V=J.get(_.sessionId);if(!V){if(typeof _.id==="number")W({id:_.id,sessionId:_.sessionId,error:{code:-32000,message:`Session ${_.sessionId} not found`}});return}let N={..._};delete N.sessionId,V.handle.onMessageFromTools(JSON.stringify(N));return}D(_,void 0)}),$.on("close",()=>{clearInterval(x);for(let[,L]of J)try{L.handle.close()}catch{}J.clear()})}async function $2($={}){let Q=$.port??9222,Z=$.host??"localhost",J=await Q2();if(J.length===0)console.error("warn: no inspectable sources found (no devices, no simulators)."),console.error(" The server will still run; new targets will appear if you start one.");let Y=new Map,X=new WeakMap,G=new Map;for(let _ of J)G.set(_,[]),X.set(_,new Set),_.wi.subscribe((V)=>{let{__selector:N,__argument:B}=V;if(!N||!B)return;if(N==="_rpc_reportConnectedApplicationList:"){let P=B.WIRApplicationDictionaryKey??{},T=Object.entries(P).map(([S,y])=>({appId:S,bundleId:y.WIRApplicationBundleIdentifierKey,name:y.WIRApplicationNameKey??y.WIRApplicationBundleIdentifierKey??S,isProxy:Boolean(y.WIRIsApplicationProxyKey)}));G.set(_,T);let q=X.get(_);for(let S of T){if(S.isProxy||q.has(S.appId))continue;q.add(S.appId),_.wi.send("_rpc_forwardGetListing:",{WIRApplicationIdentifierKey:S.appId})}}else if(N==="_rpc_applicationConnected:"){let P=B,T=G.get(_)??[];if(!T.find((q)=>q.appId===P.WIRApplicationIdentifierKey))T.push({appId:P.WIRApplicationIdentifierKey,bundleId:P.WIRApplicationBundleIdentifierKey,name:P.WIRApplicationNameKey??P.WIRApplicationBundleIdentifierKey,isProxy:Boolean(P.WIRIsApplicationProxyKey)}),G.set(_,T);if(!P.WIRIsApplicationProxyKey){let q=X.get(_);if(!q.has(P.WIRApplicationIdentifierKey))q.add(P.WIRApplicationIdentifierKey),_.wi.send("_rpc_forwardGetListing:",{WIRApplicationIdentifierKey:P.WIRApplicationIdentifierKey})}}else if(N==="_rpc_applicationDisconnected:"){let P=G.get(_)??[];G.set(_,P.filter((T)=>T.appId!==B.WIRApplicationIdentifierKey)),Y.delete(`${_.id}:${B.WIRApplicationIdentifierKey}`)}else if(N==="_rpc_applicationSentListing:"){let P=B.WIRApplicationIdentifierKey,T=B.WIRListingKey??{},q=new Map;for(let[S,y]of Object.entries(T))q.set(S,{pageId:Number(y.WIRPageIdentifierKey??0),title:y.WIRTitleKey??"",url:y.WIRURLKey??"",type:y.WIRTypeKey??"",connectionId:typeof y.WIRConnectionIdentifierKey==="string"?y.WIRConnectionIdentifierKey:null});Y.set(`${_.id}:${P}`,q)}}),_.wi.send("_rpc_reportIdentifier:",{}),_.wi.send("_rpc_getConnectedApplications:",{});let H=setInterval(()=>{for(let _ of J){let V=G.get(_)??[];for(let N of V){if(N.isProxy)continue;_.wi.send("_rpc_forwardGetListing:",{WIRApplicationIdentifierKey:N.appId})}}},eZ),K=new Map;function W(){let _=[];for(let V of J){let N=G.get(V)??[];for(let B of N){if(B.isProxy)continue;let P=Y.get(`${V.id}:${B.appId}`);if(!P)continue;for(let T of P.values()){let q=!!T.connectionId&&T.connectionId!==V.wi.connection;_.push({targetId:`${V.id}:${B.appId}:${T.pageId}`,source:V,appId:B.appId,appName:B.name,bundleId:B.bundleId,pageId:T.pageId,title:T.title,url:T.url,type:T.type,inUseByOtherInspector:q})}}}return _}let z=crypto.randomUUID(),U=z$({brand:"",version:(_)=>({Browser:"Safari/inspect-webkit","Protocol-Version":"1.3","User-Agent":"Mozilla/5.0 (iPhone; CPU iPhone OS like Mac OS X) AppleWebKit/605.1.15 Safari/inspect-webkit","WebKit-Version":"605.1.15",webSocketDebuggerUrl:`ws://${_}/devtools/browser/${z}`}),listTargets:(_)=>W().map((V)=>W$({reqHost:_,id:V.targetId,description:`${V.source.label}${V.bundleId?` (${V.bundleId})`:""}`,title:V.title||V.appName,url:/^https?:/i.test(V.url)?V.url:"about:blank",type:n6(V.type)}))}),M=new X$.default({noServer:!0}),F=`/devtools/browser/${z}`;U.on("upgrade",(_,V,N)=>{let B=new URL(_.url??"/","http://placeholder");if(console.error(`# ws upgrade: ${B.pathname}`),B.pathname===F){M.handleUpgrade(_,V,N,(T)=>{sZ(T,{listEntries:()=>W().map((q)=>({targetId:q.targetId,type:n6(q.type),title:q.title||q.appName,url:q.url})),createPageSession:(q,S)=>{let y=W().find((k)=>k.targetId===q);if(!y)return null;return A(y,S)}})});return}if(!B.pathname.startsWith("/devtools/page/")){console.error(`# ws upgrade rejected: unknown path ${B.pathname}`),V.destroy();return}let P=decodeURIComponent(B.pathname.slice(15));M.handleUpgrade(_,V,N,(T)=>{I(T,P)})});function A(_,V){let N=crypto.randomUUID(),P=new C4({readyState:1,send:(S)=>V(S)},_.source.wi,_.appId,_.pageId,N);y8(P),K.set(N,P);let T=!!process.env.INSPECT_WEBKIT_DEBUG,q=_.source.wi.subscribe((S)=>{if(S.__selector!=="_rpc_applicationSentData:")return;let y=S.__argument;if(!y)return;if(y.WIRDestinationKey&&y.WIRDestinationKey!==N)return;if(y.WIRApplicationIdentifierKey!==_.appId)return;if(y.WIRPageIdentifierKey!==void 0&&Number(y.WIRPageIdentifierKey)!==_.pageId)return;let k=y.WIRMessageDataKey??y.WIRSocketDataKey;if(!k)return;let b=typeof k==="string"?k:new TextDecoder().decode(k);if(T)console.error(`[cdp] target>> ${b.slice(0,240)}`);P.onMessageFromTarget(b)});return _.source.wi.forwardSocketSetup(_.appId,_.pageId,N),console.error(`# devtools attached: ${_.source.label} :: ${_.appName} :: ${_.title||_.url}`),{onMessageFromTools(S){if(T)console.error(`[cdp] tools>> ${S.slice(0,300)}`);P.onMessageFromTools(S)},close(){q();try{P.wi.forwardDidClose(P.appId,P.pageId,P.senderKey)}catch{}K.delete(P.senderKey)}}}let R=new Map,x=8000;function j(_){let V=R.get(_);if(V)return V;let N=W().find((k)=>k.targetId===_);if(!N)return null;let B=crypto.randomUUID(),T=new C4({readyState:1,send:()=>{}},N.source.wi,N.appId,N.pageId,B);y8(T),K.set(B,T);let q=N.source.wi.subscribe((k)=>{if(k.__selector!=="_rpc_applicationSentData:")return;let b=k.__argument;if(!b)return;if(b.WIRDestinationKey&&b.WIRDestinationKey!==B)return;if(b.WIRApplicationIdentifierKey!==N.appId)return;if(b.WIRPageIdentifierKey!==void 0&&Number(b.WIRPageIdentifierKey)!==N.pageId)return;let c=b.WIRMessageDataKey??b.WIRSocketDataKey;if(!c)return;let E=typeof c==="string"?c:new TextDecoder().decode(c);T.onMessageFromTarget(E)});N.source.wi.forwardSocketSetup(N.appId,N.pageId,B);let S=Promise.race([T.callTarget("DOM.getDocument",{depth:0}).then((k)=>k?.root?.nodeId),new Promise((k,b)=>setTimeout(()=>b(Error("DOM.getDocument timeout")),5000))]),y={cdp:T,rootNodeIdPromise:S,idleTimer:null,close(){if(y.idleTimer)clearTimeout(y.idleTimer);q();try{T.wi.forwardDidClose(T.appId,T.pageId,T.senderKey)}catch{}K.delete(B),R.delete(_)}};return R.set(_,y),S.catch(()=>y.close()),y}function D(_){if(_.idleTimer)clearTimeout(_.idleTimer);_.idleTimer=setTimeout(()=>_.close(),x)}function L(_){if(_){R.get(_)?.close();return}for(let V of R.values())V.close()}async function C(_,V){let N=j(_);if(!N)return;D(N);try{if(V){let B=await N.rootNodeIdPromise;if(!B)return;await N.cdp.callTarget("DOM.highlightNode",{nodeId:B,highlightConfig:{showInfo:!1,contentColor:{r:111,g:168,b:220,a:0.55},paddingColor:{r:147,g:196,b:125,a:0},borderColor:{r:255,g:229,b:153,a:0},marginColor:{r:246,g:178,b:107,a:0}}})}else await N.cdp.callTarget("DOM.hideHighlight",{})}catch{N.close()}}function I(_,V){let N=W().find((q)=>q.targetId===V);if(!N){console.error(`# ws closed: unknown target ${V} (known: ${W().map((q)=>q.targetId).join(", ")||"none"})`),_.close(1011,`unknown target ${V}`);return}let B=A(N,(q)=>{if(_.readyState===1)_.send(q)}),P=!0;_.on("pong",()=>{P=!0});let T=setInterval(()=>{if(!P){try{_.terminate()}catch{}return}P=!1;try{_.ping()}catch{}},15000);_.on("message",(q,S)=>{let y=S?new TextDecoder().decode(q):q.toString();B.onMessageFromTools(y)}),_.on("close",()=>{clearInterval(T),B.close()})}return await H$(U,Z,Q),M$({brand:"safari",host:Z,port:Q}),{stop(){clearInterval(H);for(let _ of R.values())_.close();M.close(),U.close();for(let _ of J)try{_.wi.close(),_.lockdown?.close()}catch{}},getTargets(){return W()},highlightTarget(_,V){return C(_,V)},releaseHighlight(_){L(_)}}}async function Q2(){let[$,Q]=await Promise.all([Z2(),Y2()]);return[...$,...Q]}async function Z2(){let $=[];try{$=await e6()}catch(Z){return console.error(`warn: usbmux: ${Z.message}`),[]}return(await Promise.all($.map(J2))).filter((Z)=>Z!==null)}async function J2($){try{let Q=await $$($.Properties.SerialNumber),Z=await E4.open($,Q);await Z.startSession();let J=await Z.startService("com.apple.webinspector"),{socket:Y,stream:X}=await Z.connectService(J),G=new Q4(Y,X);return await G.reportIdentifier(),{kind:"device",id:`device:${$.Properties.SerialNumber}`,label:`device:${$.Properties.SerialNumber.slice(0,8)}`,wi:G,lockdown:Z}}catch(Q){return console.error(`warn: device ${$.Properties.SerialNumber}: ${Q.message}`),null}}async function Y2(){let $=[];try{$=await Z$()}catch(Z){return console.error(`warn: simulator discovery: ${Z.message}`),[]}return(await Promise.all($.map(X2))).filter((Z)=>Z!==null)}async function X2($){try{let{socket:Q,stream:Z}=await J$($.socketPath),J=new Q4(Q,Z);return await J.reportIdentifier(),{kind:"simulator",id:`sim:${$.pid}`,label:`sim:${$.pid}`,wi:J}}catch(Q){return console.error(`warn: simulator ${$.socketPath}: ${Q.message}`),null}}function n6($){switch($){case"WIRTypeServiceWorker":return"service_worker";case"WIRTypeWorker":case"WIRTypeJavaScript":return"worker";default:return"page"}}class _${url;ws;handlers=new Set;openPromise;constructor($){this.url=$,this.ws=new i6($),this.ws.binaryType="nodebuffer",this.openPromise=new Promise((Q,Z)=>{this.ws.once("open",()=>Q()),this.ws.once("error",(J)=>Z(J))}),this.ws.on("message",(Q,Z)=>{let J=Z?new TextDecoder().decode(Q):Q.toString();for(let Y of this.handlers)Y(J)})}ready(){return this.openPromise}onFrame($){return this.handlers.add($),()=>this.handlers.delete($)}forwardSocketData($,Q,Z,J){if(this.ws.readyState!==i6.OPEN)return;this.ws.send(new TextDecoder().decode(J))}forwardDidClose($,Q,Z){}close(){try{this.ws.close()}catch{}}}async function G2($){let Q=$.port??9223,Z=$.host??"localhost",{upstreams:J}=$,Y=z$({brand:"bun",version:{Browser:"Bun/inspect-webkit","Protocol-Version":"1.3","User-Agent":"Bun (via inspect-webkit)","WebKit-Version":"605.1.15"},listTargets:(H)=>J.map((K)=>W$({reqHost:H,id:encodeURIComponent(K.url),description:K.label??"bun",title:K.label??K.url,url:K.url,type:"node"}))}),X=new X$.default({noServer:!0});Y.on("upgrade",(H,K,W)=>{let z=new URL(H.url??"/","http://placeholder");if(!z.pathname.startsWith("/devtools/page/")){K.destroy();return}let U=decodeURIComponent(z.pathname.slice(15)),M=J.find((F)=>F.url===U);if(!M){K.destroy();return}X.handleUpgrade(H,K,W,(F)=>{G(F,M).catch((A)=>{console.error(`# bun attach failed: ${A.message}`);try{F.close(1011,A.message)}catch{}})})});async function G(H,K){let W=!!process.env.INSPECT_WEBKIT_DEBUG,z=new _$(K.url);await z.ready();let U=crypto.randomUUID(),M=new C4(H,z,"bun",0,U);y8(M);let F=z.onFrame((A)=>{if(W)console.error(`[bun] target>> ${A.slice(0,240)}`);M.onMessageFromTarget(A)});H.on("message",(A,R)=>{let x=R?new TextDecoder().decode(A):A.toString();if(W)console.error(`[bun] tools>> ${x.slice(0,300)}`);M.onMessageFromTools(x)}),H.on("close",()=>{F(),z.close()}),console.error(`# devtools attached: ${K.label??K.url}`)}return await H$(Y,Z,Q),M$({brand:"bun",host:Z,port:Q}),{stop(){X.close(),Y.close()},getTargets(){return J.slice()}}}async function F$(){return e6()}async function V2(){let[$,Q]=await Promise.all([K2(),W2()]);return[...$.flat(),...Q.flat()]}async function K2(){let $=await F$();return Promise.all($.map(z2))}async function W2(){let $=await Z$();return Promise.all($.map(H2))}async function z2($){let Q=null;try{return Q=await M2($),await N$(Q.client,{source:"device",udid:$.Properties.SerialNumber,deviceID:$.DeviceID})}catch(Z){return console.error(`warn: ${$.Properties.SerialNumber}: ${Z.message}`),[]}finally{Q?.client.close(),Q?.lockdown.close()}}async function H2($){let Q=null;try{let{socket:Z,stream:J}=await J$($.socketPath);return Q=new Q4(Z,J),await Q.reportIdentifier(),await N$(Q,{source:"simulator",udid:`sim:${$.pid}`})}catch(Z){return console.error(`warn: simulator (${$.socketPath}): ${Z.message}`),[]}finally{Q?.close()}}async function M2($){let Q=await $$($.Properties.SerialNumber),Z=await E4.open($,Q);await Z.startSession();let J=await Z.startService("com.apple.webinspector"),{socket:Y,stream:X}=await Z.connectService(J),G=new Q4(Y,X);return await G.reportIdentifier(),{client:G,lockdown:Z}}async function N$($,Q){let Z=(await $.listApplications()).filter((X)=>!X.isProxy),J=await Promise.all(Z.map((X)=>$.getListing(X.appId))),Y=[];for(let X=0;X<Z.length;X++){let G=Z[X];for(let H of J[X])Y.push({...Q,appId:G.appId,appName:G.name??G.bundleId??G.appId,bundleId:G.bundleId,pageId:H.pageId,title:H.title,url:H.url,type:H.type})}return Y}var y7,k7,g6,f7,v7,h7,u7,M0=($,Q,Z)=>{var J=$!=null&&typeof $==="object";if(J){var Y=Q?h7??=new WeakMap:u7??=new WeakMap,X=Y.get($);if(X)return X}Z=$!=null?y7(k7($)):{};let G=Q||!$||!$.__esModule?g6(Z,"default",{value:$,enumerable:!0}):Z;for(let H of f7($))if(!v7.call(G,H))g6(G,H,{get:b7.bind($,H),enumerable:!0});if(J)Y.set($,G);return G},$0=($,Q)=>()=>(Q||$((Q={exports:{}}).exports,Q),Q.exports),a,_0,D4,p7,e0,$4,o6,a6,g7,k8,f8,c7,r6,m7,l7=`<?xml version="1.0" encoding="UTF-8"?>
12
+ ${Q}</dict>`}function b8($){let Q=x8($,"");return new TextEncoder().encode(n7+Q+o7)}class e6{src;pos=0;constructor($){this.src=$}skip(){while(this.pos<this.src.length){let $=this.src[this.pos];if($===" "||$==="\t"||$===`
13
+ `||$==="\r")this.pos++;else if(this.src.startsWith("<!--",this.pos)){let Q=this.src.indexOf("-->",this.pos+4);if(Q<0)throw Error("unterminated comment");this.pos=Q+3}else if(this.src.startsWith("<?",this.pos)){let Q=this.src.indexOf("?>",this.pos+2);if(Q<0)throw Error("unterminated processing instruction");this.pos=Q+2}else if(this.src.startsWith("<!DOCTYPE",this.pos)){let Q=0;while(this.pos<this.src.length){let Z=this.src[this.pos++];if(Z==="[")Q++;else if(Z==="]")Q--;else if(Z===">"&&Q===0)break}}else break}}nextTag(){if(this.skip(),this.pos>=this.src.length)return null;if(this.src[this.pos]!=="<")throw Error(`expected '<' at ${this.pos}`);let $=this.src.indexOf(">",this.pos);if($<0)throw Error("unterminated tag");let Q=this.src.slice(this.pos+1,$);this.pos=$+1;let Z=Q.startsWith("/"),J=Q.endsWith("/");return{name:Q.replace(/^\/?/,"").replace(/\/$/,"").trim().split(/\s+/)[0],selfClose:J,isClose:Z}}readText(){let $=this.src.indexOf("<",this.pos),Q=$<0?this.src.slice(this.pos):this.src.slice(this.pos,$);return this.pos=$<0?this.src.length:$,Q.replace(/&lt;/g,"<").replace(/&gt;/g,">").replace(/&quot;/g,'"').replace(/&apos;/g,"'").replace(/&amp;/g,"&")}}function q8($,Q){let Z=(J)=>{let Y=$.nextTag();if(!Y||!Y.isClose||Y.name!==J)throw Error(`expected </${J}>`)};switch(Q){case"true":case"false":throw Error(`<${Q}> must be self-closing`);case"string":case"key":{let J=$.readText();return Z(Q),J}case"integer":{let J=$.readText().trim();if(Z("integer"),/^-?\d+$/.test(J)&&Math.abs(Number(J))<=Number.MAX_SAFE_INTEGER)return Number(J);return BigInt(J)}case"real":{let J=Number($.readText().trim());return Z("real"),J}case"data":{let J=r7($.readText());return Z("data"),J}case"date":{let J=new Date($.readText().trim());return Z("date"),J}case"array":{let J=[];while(!0){let Y=$.nextTag();if(!Y)throw Error("unterminated <array>");if(Y.isClose&&Y.name==="array")return J;J.push(Y.selfClose?w8(Y.name):q8($,Y.name))}}case"dict":{let J={};while(!0){let Y=$.nextTag();if(!Y)throw Error("unterminated <dict>");if(Y.isClose&&Y.name==="dict")return J;if(Y.name!=="key")throw Error(`expected <key>, got <${Y.name}>`);let X=$.readText();Z("key");let G=$.nextTag();if(!G)throw Error("unterminated <dict>");J[X]=G.selfClose?w8(G.name):q8($,G.name)}}default:throw Error(`unknown plist tag <${Q}>`)}}function w8($){if($==="true")return!0;if($==="false")return!1;if($==="string")return"";if($==="data")return new Uint8Array(0);if($==="array")return[];if($==="dict")return{};throw Error(`self-closing <${$}/> not supported`)}function P4($){let Q=typeof $==="string"?$:new TextDecoder().decode($),Z=new e6(Q);while(!0){let Y=Z.nextTag();if(!Y)throw Error("no <plist> root");if(Y.name==="plist"&&!Y.isClose)break}let J=Z.nextTag();if(!J)throw Error("empty plist");return J.selfClose?w8(J.name):q8(Z,J.name)}function R0($,Q,Z){let J=0;for(let Y=0;Y<Z;Y++)J=J*256+$[Q+Y];return J}function t7($){if($.length<41)throw Error("bplist too short");let Q=new TextDecoder().decode($.slice(0,8));if(Q!=="bplist00")throw Error(`bad magic: ${Q}`);let Z=$.length-32,J=$[Z+6],Y=$[Z+7],X=R0($,Z+8,8),G=R0($,Z+16,8),H=R0($,Z+24,8),K=Array(X);for(let U=0;U<X;U++)K[U]=R0($,H+U*J,J);function W(U){return R0($,U,Y)}function z(U){let M=K[U],F=$[M],A=F>>4,R=F&15;function x(j){if(R!==15)return{len:R,next:j};let P=$[j];if((P&240)!==16)throw Error("expected int marker for length");let L=1<<(P&15);return{len:R0($,j+1,L),next:j+1+L}}switch(A){case 0:if(R===0)return null;if(R===8)return!1;if(R===9)return!0;if(R===15)return null;throw Error(`unknown singleton ${R}`);case 1:{let j=1<<R,P=R0($,M+1,j);if(j===8&&P>Number.MAX_SAFE_INTEGER)return BigInt(P);return P}case 2:{let j=1<<R,P=new DataView($.buffer,$.byteOffset+M+1,j);return j===4?P.getFloat32(0,!1):P.getFloat64(0,!1)}case 3:{let P=new DataView($.buffer,$.byteOffset+M+1,8).getFloat64(0,!1);return new Date(Date.UTC(2001,0,1)+P*1000)}case 4:{let{len:j,next:P}=x(M+1);return $.slice(P,P+j)}case 5:{let{len:j,next:P}=x(M+1);return new TextDecoder("ascii").decode($.slice(P,P+j))}case 6:{let{len:j,next:P}=x(M+1),L=$.slice(P,P+j*2),C=new Uint8Array(L.length);for(let I=0;I<L.length;I+=2)C[I]=L[I+1],C[I+1]=L[I];return new TextDecoder("utf-16le").decode(C)}case 10:{let{len:j,next:P}=x(M+1),L=[];for(let C=0;C<j;C++)L.push(z(W(P+C*Y)));return L}case 13:{let{len:j,next:P}=x(M+1),L={};for(let C=0;C<j;C++){let I=z(W(P+C*Y)),_=z(W(P+(j+C)*Y));if(typeof I!=="string")throw Error(`non-string dict key: ${typeof I}`);L[I]=_}return L}default:throw Error(`unknown bplist marker 0x${F.toString(16)} at ${M}`)}}return z(G)}function s7($){if($.length>=8){if(new TextDecoder().decode($.slice(0,8))==="bplist00")return t7($)}return P4($)}class T4{chunks=[];size=0;waiters=[];closed=!1;closeErr=null;push($){if($.length===0)return;this.chunks.push($),this.size+=$.length,this.drain()}close($){this.closed=!0,this.closeErr=$??null;for(let Q of this.waiters)Q.reject($??Error("stream closed"));this.waiters=[]}read($){return new Promise((Q,Z)=>{if(this.closed&&this.size<$){Z(this.closeErr??Error("stream closed"));return}this.waiters.push({n:$,resolve:Q,reject:Z}),this.drain()})}drain(){while(this.waiters.length>0&&this.waiters[0].n<=this.size){let $=this.waiters.shift(),Q=new Uint8Array($.n),Z=0;while(Z<$.n){let J=this.chunks[0],Y=$.n-Z;if(J.length<=Y)Q.set(J,Z),Z+=J.length,this.chunks.shift();else Q.set(J.subarray(0,Y),Z),this.chunks[0]=J.subarray(Y),Z+=Y}this.size-=$.n,$.resolve(Q)}}}function h8($,Q){let Z=(X)=>{Q.push(new Uint8Array(X.buffer,X.byteOffset,X.byteLength))},J=()=>Q.close(),Y=(X)=>Q.close(X);return $.on("data",Z),$.on("close",J),$.on("error",Y),()=>{$.off("data",Z),$.off("close",J),$.off("error",Y)}}async function u8(){let $=new T4;return new Promise((Q,Z)=>{let J=s6.createConnection({path:QZ}),Y=(X)=>{$.close(X),Z(X)};J.once("error",Y),J.once("connect",()=>{J.off("error",Y);let X=h8(J,$);Q({socket:J,stream:$,detach:X})})})}async function ZZ($){let Q=await $.read(4),Z=new DataView(Q.buffer,Q.byteOffset,4).getUint32(0,!0);return(await $.read(Z-4)).slice(12)}function JZ($,Q,Z){let J=16+Z.length,Y=new Uint8Array(16),X=new DataView(Y.buffer);X.setUint32(0,J,!0),X.setUint32(4,e7,!0),X.setUint32(8,$Z,!0),X.setUint32(12,Q,!0),$.write(Y),$.write(Z)}async function p8($,Q,Z,J){let Y=b8({ClientVersionString:"inspect-webkit-1.0",ProgName:"inspect-webkit",kLibUSBMuxVersion:3,...J});JZ($,Z,Y);let X=await ZZ(Q);return P4(X)}async function $$(){let{socket:$,stream:Q}=await u8();try{return(await p8($,Q,1,{MessageType:"ListDevices"})).DeviceList??[]}finally{$.end()}}async function Q$($){let{socket:Q,stream:Z}=await u8();try{let Y=(await p8(Q,Z,1,{MessageType:"ReadPairRecord",PairRecordID:$})).PairRecordData;if(!Y)throw Error(`no pair record for ${$} — pair the device first (open Finder/iTunes, tap "Trust")`);return P4(Y)}finally{Q.end()}}async function l6($,Q){let{socket:Z,stream:J,detach:Y}=await u8(),X=(Q&255)<<8|Q>>8&255,G=await p8(Z,J,1,{MessageType:"Connect",DeviceID:$,PortNumber:X});if(G.MessageType!=="Result"||G.Number!==0){Z.end();let H=G.Number??"?";throw Error(`Connect to device ${$} port ${Q} failed (code ${H})`)}return{socket:Z,stream:J,detach:Y}}async function J$(){let $=YZ("lsof",["-U"],{stdio:["ignore","pipe","ignore"]});if($.status!==0||!$.stdout)return[];let Q=$.stdout.toString("utf8"),Z=new Map;for(let J of Q.split(`
14
+ `)){if(!/com\.apple\.webinspectord_sim\.socket\b/.test(J))continue;let Y=J.split(/\s+/),X=Number(Y[1]),G=Y[Y.length-1];if(G)Z.set(G,X)}return Array.from(Z,([J,Y])=>({socketPath:J,pid:Y}))}async function Y$($){let Q=new T4;return new Promise((Z,J)=>{let Y=Z$.createConnection({path:$}),X=(G)=>{Q.close(G),J(G)};Y.once("error",X),Y.once("connect",()=>{Y.off("error",X),h8(Y,Q),Z({socket:Y,stream:Q})})})}async function D8($){let Q=await $.read(4),Z=new DataView(Q.buffer,Q.byteOffset,4).getUint32(0,!1),J=await $.read(Z);return P4(J)}function P8($,Q){let Z=b8({Label:"inspect-webkit",...Q}),J=new Uint8Array(4);new DataView(J.buffer).setUint32(0,Z.length,!1),$.write(J),$.write(Z)}function T8($,Q){if($.Error)throw Error(`lockdown ${Q} error: ${String($.Error)}`);if($.Request!==Q)throw Error(`lockdown expected Request=${Q}, got ${String($.Request)}`)}function i6($,Q,Z,J){return new Promise((Y,X)=>{Q();let G=new T4,H=X$.connect({socket:$,cert:Buffer.from(Z.HostCertificate),key:Buffer.from(Z.HostPrivateKey),ca:Buffer.from(Z.RootCertificate),rejectUnauthorized:!1}),K=(W)=>{J0(`${J} tls error:`,W),G.close(W),X(W)};H.once("error",K),H.once("secureConnect",()=>{J0(`${J} tls handshake complete`),H.off("error",K);let W=h8(H,G);Y({socket:H,stream:G,detach:W})})})}class E4{socket;stream;pair;udid;deviceID;detach;constructor($,Q,Z,J,Y,X){this.socket=$,this.stream=Q,this.pair=Z,this.udid=J,this.deviceID=Y,this.detach=X}static async open($,Q){J0("connecting usbmux tunnel to lockdown port",d6);let{socket:Z,stream:J,detach:Y}=await l6($.DeviceID,d6),X=new E4(Z,J,Q,$.Properties.SerialNumber,$.DeviceID,Y);J0("sending QueryType"),P8(Z,{Request:"QueryType"});let G=await D8(J);if(J0("QueryType reply:",G),T8(G,"QueryType"),G.Type!=="com.apple.mobile.lockdown")throw Error(`unexpected lockdown Type: ${String(G.Type)}`);return X}async startSession(){J0("StartSession with HostID",this.pair.HostID),P8(this.socket,{Request:"StartSession",HostID:this.pair.HostID,SystemBUID:this.pair.SystemBUID});let $=await D8(this.stream);if(J0("StartSession reply:",$),T8($,"StartSession"),$.EnableSessionSSL){J0("upgrading to TLS");let Q=await i6(this.socket,this.detach,this.pair,"lockdown");this.socket=Q.socket,this.stream=Q.stream,this.detach=Q.detach,J0("TLS upgrade complete")}}async startService($){J0("StartService",$),P8(this.socket,{Request:"StartService",Service:$});let Q=await D8(this.stream);return J0("StartService reply:",Q),T8(Q,"StartService"),{port:Q.Port,enableServiceSSL:Boolean(Q.EnableServiceSSL),service:$}}async connectService($){J0("connecting service tunnel to port",$.port,"ssl=",$.enableServiceSSL);let{socket:Q,stream:Z,detach:J}=await l6(this.deviceID,$.port);if(!$.enableServiceSSL)return{socket:Q,stream:Z};let Y=await i6(Q,J,this.pair,"service");return{socket:Y.socket,stream:Y.stream}}close(){this.socket.end()}}async function XZ($){let Q=await $.read(4),Z=new DataView(Q.buffer,Q.byteOffset,4).getUint32(0,!1),J=await $.read(Z);return s7(J)}function GZ($,Q){let Z=b8(Q),J=new Uint8Array(4);new DataView(J.buffer).setUint32(0,Z.length,!1),$.write(J),$.write(Z)}function VZ(){let $=crypto.getRandomValues(new Uint8Array(16));$[6]=$[6]&15|64,$[8]=$[8]&63|128;let Q=Array.from($,(Z)=>Z.toString(16).padStart(2,"0")).join("");return`${Q.slice(0,8)}-${Q.slice(8,12)}-${Q.slice(12,16)}-${Q.slice(16,20)}-${Q.slice(20)}`}class Q4{socket;stream;connectionId=VZ();subscribers=new Set;reading;constructor($,Q){this.socket=$,this.stream=Q,this.reading=(async()=>{try{while(!Q.closed){let Z=await XZ(Q);for(let J of[...this.subscribers])try{J(Z)}catch{}}}catch{}})()}subscribe($){return this.subscribers.add($),()=>this.subscribers.delete($)}waitFor($,Q=5000){return new Promise((Z,J)=>{let Y=setTimeout(()=>{X(),J(Error(`timeout waiting for ${$} after ${Q}ms`))},Q),X=this.subscribe((G)=>{if(G.__selector===$)clearTimeout(Y),X(),Z(G)})})}send($,Q){GZ(this.socket,{__selector:$,__argument:{WIRConnectionIdentifierKey:this.connectionId,...Q}})}async reportIdentifier(){this.send("_rpc_reportIdentifier:",{})}async listApplications(){this.send("_rpc_getConnectedApplications:",{});let $=await this.waitFor("_rpc_reportConnectedApplicationList:",3000).catch(()=>null);if(!$)return[];let Z=$.__argument.WIRApplicationDictionaryKey??{},J=[];for(let[Y,X]of Object.entries(Z)){let G=X;J.push({appId:Y,bundleId:G.WIRApplicationBundleIdentifierKey,name:G.WIRApplicationNameKey,isProxy:Boolean(G.WIRIsApplicationProxyKey),isActive:Boolean(G.WIRIsApplicationActiveKey),hostAppId:G.WIRHostApplicationIdentifierKey})}return J}async getListing($){this.send("_rpc_forwardGetListing:",{WIRApplicationIdentifierKey:$});let Q=await this.waitFor("_rpc_applicationSentListing:",3000).catch(()=>null);if(!Q)return[];let J=Q.__argument.WIRListingKey??{},Y=[];for(let X of Object.values(J)){let G=X;Y.push({pageId:Number(G.WIRPageIdentifierKey??0),title:G.WIRTitleKey??"",url:G.WIRURLKey??"",type:G.WIRTypeKey??""})}return Y}get connection(){return this.connectionId}forwardSocketSetup($,Q,Z){this.send("_rpc_forwardSocketSetup:",{WIRApplicationIdentifierKey:$,WIRPageIdentifierKey:Q,WIRSenderKey:Z,WIRAutomaticallyPause:!1})}forwardSocketData($,Q,Z,J){this.send("_rpc_forwardSocketData:",{WIRApplicationIdentifierKey:$,WIRPageIdentifierKey:Q,WIRSenderKey:Z,WIRSocketDataKey:J})}forwardDidClose($,Q,Z){this.send("_rpc_forwardDidClose:",{WIRApplicationIdentifierKey:$,WIRPageIdentifierKey:Q,WIRSenderKey:Z})}onMessage($){return this.subscribe($)}close(){this.socket.end()}}class C4{ws;wi;appId;pageId;senderKey;filters=new Map;toolRequestMap=new Map;adapterRequestMap=new Map;requestId=0;innerTargetId=null;wrappedAckIds=new Set;outgoingQueue=[];sawAnyTargetCreated=!1;constructor($,Q,Z,J,Y){this.ws=$,this.wi=Q,this.appId=Z,this.pageId=J,this.senderKey=Y}addMessageFilter($,Q){let Z=this.filters.get($);if(!Z)this.filters.set($,Z=[]);Z.push(Q)}callTarget($,Q={}){return new Promise((Z,J)=>{let Y=--this.requestId;this.adapterRequestMap.set(Y,{resolve:Z,reject:J}),this.sendRaw(JSON.stringify({id:Y,method:$,params:Q}))})}fireEventToTools($,Q){this.sendToTools(JSON.stringify({method:$,params:Q}))}fireResultToTools($,Q){this.sendToTools(JSON.stringify({id:$,result:Q}))}fireErrorToTools($,Q){this.sendToTools(JSON.stringify({id:$,error:{code:Q.code??-32000,message:Q.message}}))}replyEmpty($){if(typeof $.id==="number")this.fireResultToTools($.id,{});return Promise.resolve(null)}async onMessageFromTools($){let Q;try{Q=JSON.parse($)}catch{return}if(typeof Q.method==="string"&&typeof Q.id==="number")this.toolRequestMap.set(Q.id,Q.method);let Z=`tools::${Q.method}`,J=this.filters.get(Z),Y=Q;if(J)for(let X of J){if(!Y)break;Y=await X(Y)}if(Y)this.sendRaw(JSON.stringify(Y))}async onMessageFromTarget($){let Q;try{Q=JSON.parse($)}catch{return}if(Q.method==="Target.targetCreated"){this.sawAnyTargetCreated=!0;let X=Q.params?.targetInfo;if(X?.type==="page"&&!this.innerTargetId)this.innerTargetId=X.targetId,this.flushQueue();return}if(Q.method==="Target.didCommitProvisionalTarget"){let X=Q.params?.newTargetId;if(typeof X==="string")this.innerTargetId=X;return}if(Q.method==="Target.targetDestroyed")return;if(Q.method==="Target.dispatchMessageFromTarget"){let X=Q.params?.message;if(typeof X==="string")return this.onMessageFromTarget(X);return}if(typeof Q.id==="number"&&this.wrappedAckIds.has(Q.id)){this.wrappedAckIds.delete(Q.id);return}if(typeof Q.id==="number"){let X=this.adapterRequestMap.get(Q.id);if(X){if(this.adapterRequestMap.delete(Q.id),"error"in Q&&Q.error)X.reject(Q.error);else X.resolve(Q.result??{});return}let G=this.toolRequestMap.get(Q.id);if(G){this.toolRequestMap.delete(Q.id);let H=`target::${G}`;if("error"in Q&&this.filters.has("target::error"))H="target::error";let K=this.filters.get(H);if(!K)return this.sendToTools($);let W=Q;for(let z of K){if(!W)break;W=await z(W)}if(W)this.sendToTools(JSON.stringify(W));return}return this.sendToTools($)}let Z=`target::${Q.method}`,J=this.filters.get(Z);if(!J)return this.sendToTools($);let Y=Q;for(let X of J){if(!Y)break;Y=await X(Y)}if(Y)this.sendToTools(JSON.stringify(Y))}sendRaw($){let Q=null;try{Q=JSON.parse($)}catch{}let Z=Q&&typeof Q.method==="string"&&Q.method.startsWith("Target.");if(this.innerTargetId&&Q&&!Z){if(typeof Q.id==="number")this.wrappedAckIds.add(Q.id);let J={id:Q.id,method:"Target.sendMessageToTarget",params:{id:Q.id,message:$,targetId:this.innerTargetId}};this.writeFrame(JSON.stringify(J));return}if(!this.innerTargetId&&Q&&!Z){if(this.outgoingQueue.push($),this.outgoingQueue.length===1)setTimeout(()=>{if(!this.innerTargetId&&!this.sawAnyTargetCreated&&this.outgoingQueue.length>0){let J=this.outgoingQueue;this.outgoingQueue=[];for(let Y of J)this.writeFrame(Y)}},250);return}this.writeFrame($)}flushQueue(){if(this.outgoingQueue.length===0)return;let $=this.outgoingQueue;this.outgoingQueue=[];for(let Q of $)this.sendRaw(Q)}writeFrame($){this.wi.forwardSocketData(this.appId,this.pageId,this.senderKey,new TextEncoder().encode($))}sendToTools($){if(this.ws.readyState===1)this.ws.send($)}}function WZ(){return{lastScriptEval:{value:""},pageExecCtx:{id:0,isPage:!1},lastConsoleApiCalled:{value:null}}}function v($,Q,Z){return $.fireResultToTools(Q.id,Z),Promise.resolve(null)}function zZ($,Q){$.addMessageFilter("tools::Debugger.canSetScriptSource",(Z)=>v($,Z,{result:!1})),$.addMessageFilter("tools::Debugger.setBlackboxPatterns",(Z)=>v($,Z,{})),$.addMessageFilter("tools::Debugger.setAsyncCallStackDepth",(Z)=>v($,Z,{})),$.addMessageFilter("target::Debugger.enable",(Z)=>{return $.callTarget("Debugger.setBreakpointsActive",{active:!0}).catch(()=>{}),$.callTarget("Debugger.setPauseOnDebuggerStatements",{enabled:!0}).catch(()=>{}),Promise.resolve(Z)}),$.addMessageFilter("target::Debugger.scriptParsed",(Z)=>{if(Z.params?.scriptId)Q.lastScriptEval.value=String(Z.params.scriptId);return Promise.resolve(Z)}),$.addMessageFilter("tools::Debugger.setBreakpoint",(Z)=>{let J=Z.params??{};return Z.params={location:J.location,options:J.condition?{condition:J.condition}:{}},Promise.resolve(Z)}),$.addMessageFilter("tools::Debugger.setBreakpointByUrl",(Z)=>{let J=Z.params??{};return Z.params={lineNumber:J.lineNumber,url:J.url,urlRegex:J.urlRegex,columnNumber:J.columnNumber,options:J.condition?{condition:J.condition}:{}},Promise.resolve(Z)});for(let Z of["removeBreakpoint","continueToLocation","stepInto","stepOver","stepOut","resume","pause","getScriptSource","evaluateOnCallFrame"])$.addMessageFilter(`tools::Debugger.${Z}`,(J)=>Promise.resolve(J));$.addMessageFilter("target::Debugger.paused",(Z)=>{let J=Z.params?.callFrames;if(Array.isArray(J))for(let Y of J){if(Y.functionName==null&&typeof Y.name==="string")Y.functionName=Y.name;if(!Y.location&&Y.sourceCodeLocation)Y.location={scriptId:String(Y.sourceCodeLocation.scriptId??""),lineNumber:Y.sourceCodeLocation.lineNumber??0,columnNumber:Y.sourceCodeLocation.columnNumber??0};if(Array.isArray(Y.scopeChain)){for(let X of Y.scopeChain)if(!X.object&&X.value)X.object=X.value}}return Promise.resolve(Z)}),$.addMessageFilter("tools::Debugger.setBlackboxedRanges",(Z)=>v($,Z,{})),$.addMessageFilter("tools::Debugger.setSkipAllPauses",(Z)=>v($,Z,{})),$.addMessageFilter("tools::Debugger.setPauseOnExceptions",(Z)=>{return Promise.resolve(Z)})}function HZ($,Q){$.addMessageFilter("target::Runtime.executionContextCreated",(Z)=>{let J=Z.params?.context;if(J){if(!J.origin)J.origin=J.name??"";let Y=Number(J.id),X=!!(J.isPageContext||J.type==="normal");if(Number.isFinite(Y)&&Y>0){if(!Q.pageExecCtx.id||X&&!Q.pageExecCtx.isPage)Q.pageExecCtx.id=Y,Q.pageExecCtx.isPage=X}if(J.frameId)J.auxData={frameId:J.frameId,isDefault:!0},delete J.frameId}return Promise.resolve(Z)}),$.addMessageFilter("tools::Runtime.evaluate",(Z)=>{let J=Z.params;if(!J)return Promise.resolve(Z);if(J.throwOnSideEffect)return v($,Z,{result:{type:"object",subtype:"error",className:"EvalError",description:"EvalError: Possible side-effect in debug-evaluate"},exceptionDetails:{exceptionId:0,text:"EvalError: Possible side-effect in debug-evaluate",lineNumber:0,columnNumber:0,url:"",exception:{type:"object",subtype:"error",className:"EvalError",description:"EvalError: Possible side-effect in debug-evaluate"}}});if("silent"in J)J.doNotPauseOnExceptionsAndMuteConsole=!!J.silent,delete J.silent;if("userGesture"in J)J.emulateUserGesture=!!J.userGesture,delete J.userGesture;return Promise.resolve(Z)}),$.addMessageFilter("target::Runtime.evaluate",(Z)=>{let J=Z.result;if(J?.wasThrown){if(J.result)J.result.subtype="error";J.exceptionDetails={exceptionId:0,text:J.result?.description??"Uncaught",url:"",scriptId:Q.lastScriptEval.value,lineNumber:0,columnNumber:0,stackTrace:{callFrames:[{functionName:"",scriptId:Q.lastScriptEval.value,url:"",lineNumber:0,columnNumber:0}]},exception:J.result}}return Promise.resolve(Z)}),$.addMessageFilter("target::Runtime.getProperties",(Z)=>{let J=Z.result;if(!J)return Promise.resolve(Z);let Y=Array.isArray(J.result)?J.result:Array.isArray(J.properties)?J.properties:null;if(Y)J.result=Y.filter((X)=>X.isOwn||X.nativeGetter).map((X)=>({...X,isOwn:!0})),delete J.properties;if(Array.isArray(J.internalProperties))J.internalProperties=J.internalProperties.map((X)=>({name:X.name,value:X.value}));return Promise.resolve(Z)}),$.addMessageFilter("tools::Runtime.compileScript",(Z)=>v($,Z,{scriptId:null,exceptionDetails:null})),$.addMessageFilter("tools::Runtime.globalLexicalScopeNames",(Z)=>v($,Z,{names:[]})),$.addMessageFilter("tools::Runtime.terminateExecution",(Z)=>v($,Z,{})),$.addMessageFilter("tools::Runtime.getIsolateId",(Z)=>v($,Z,{id:"inspect-webkit"})),$.addMessageFilter("tools::Runtime.getHeapUsage",(Z)=>v($,Z,{usedSize:0,totalSize:0})),$.addMessageFilter("tools::Runtime.discardConsoleEntries",(Z)=>{return Z.method="Console.clearMessages",Promise.resolve(Z)}),$.addMessageFilter("tools::Runtime.runIfWaitingForDebugger",(Z)=>v($,Z,{})),$.addMessageFilter("tools::Runtime.setAsyncCallStackDepth",(Z)=>v($,Z,{})),$.addMessageFilter("tools::Runtime.releaseObject",(Z)=>Promise.resolve(Z)),$.addMessageFilter("tools::Runtime.releaseObjectGroup",(Z)=>Promise.resolve(Z)),$.addMessageFilter("tools::Runtime.callFunctionOn",(Z)=>Promise.resolve(Z)),$.addMessageFilter("tools::Runtime.queryObjects",(Z)=>Promise.resolve(Z)),$.addMessageFilter("target::Debugger.globalObjectCleared",(Z)=>{return $.fireEventToTools("Runtime.executionContextsCleared",{}),Promise.resolve(null)})}function MZ($,Q){$.addMessageFilter("tools::Log.startViolationsReport",(Z)=>v($,Z,{})),$.addMessageFilter("tools::Log.stopViolationsReport",(Z)=>v($,Z,{})),$.addMessageFilter("tools::Log.clear",(Z)=>{return Z.method="Console.clearMessages",Promise.resolve(Z)}),$.addMessageFilter("tools::Log.disable",(Z)=>{return Z.method="Console.disable",Promise.resolve(Z)}),$.addMessageFilter("tools::Log.enable",(Z)=>{return Z.method="Console.enable",Promise.resolve(Z)}),$.addMessageFilter("tools::Runtime.enable",(Z)=>{return $.callTarget("Console.enable",{}).catch(()=>{}),Promise.resolve(Z)}),$.addMessageFilter("target::Console.messageAdded",(Z)=>{let J=Z.params?.message??{},X=(Array.isArray(J.stackTrace)?J.stackTrace:Array.isArray(J.stackTrace?.callFrames)?J.stackTrace.callFrames:[]).map((K)=>({functionName:K.functionName??"",scriptId:K.scriptId??"",url:K.url??"",lineNumber:Number(K.lineNumber??0),columnNumber:Number(K.columnNumber??0)})),G=X.length?{callFrames:X}:void 0,H=Date.now();if(J.source==="console-api"){let K=J.type==="log"?J.level??"log":J.type??"log",W=_Z(K),z=Array.isArray(J.parameters)&&J.parameters.length>0?J.parameters:[{type:"string",value:String(J.text??"")}],U={type:W,args:z,executionContextId:Q.pageExecCtx.id||1,timestamp:H,stackTrace:G};return Q.lastConsoleApiCalled.value=U,$.fireEventToTools("Runtime.consoleAPICalled",U),Promise.resolve(null)}if(J.source==="javascript"&&J.level==="error")return $.fireEventToTools("Runtime.exceptionThrown",{timestamp:H,exceptionDetails:{exceptionId:0,text:String(J.text??"Uncaught"),lineNumber:Number(J.line??0),columnNumber:Number(J.column??0),scriptId:Q.lastScriptEval.value,url:J.url,stackTrace:G,exception:{type:"string",value:String(J.text??"")}}}),Promise.resolve(null);return $.fireEventToTools("Log.entryAdded",{entry:{source:J.source??"other",level:FZ(J.level??J.type??"log"),text:String(J.text??""),timestamp:H,url:J.url,lineNumber:J.line,stackTrace:G,networkRequestId:J.networkRequestId}}),Promise.resolve(null)}),$.addMessageFilter("target::Console.messagesCleared",()=>{return $.fireEventToTools("Log.entriesCleared",{}),$.fireEventToTools("Runtime.consoleAPICalled",{type:"clear",args:[],executionContextId:Q.pageExecCtx.id||1,timestamp:Date.now()}),Q.lastConsoleApiCalled.value=null,Promise.resolve(null)}),$.addMessageFilter("target::Console.messageRepeatCountUpdated",()=>{let Z=Q.lastConsoleApiCalled.value;if(Z)$.fireEventToTools("Runtime.consoleAPICalled",{...Z,timestamp:Date.now()});return Promise.resolve(null)}),$.addMessageFilter("target::Console.heapSnapshot",()=>Promise.resolve(null))}function _Z($){switch($){case"warn":case"warning":return"warning";case"log":case"info":case"error":case"debug":case"dir":case"dirxml":case"table":case"trace":case"clear":case"assert":case"profile":case"profileEnd":case"count":case"timeEnd":case"startGroup":case"startGroupCollapsed":case"endGroup":return $;default:return"log"}}function FZ($){switch($){case"log":case"debug":return"verbose";case"info":return"info";case"warn":case"warning":return"warning";case"error":return"error";default:return"info"}}function NZ($){let Q=new Set;$.addMessageFilter("tools::DOM.enable",(Z)=>v($,Z,{})),$.addMessageFilter("tools::DOM.setInspectMode",(Z)=>{if(Z.method="DOM.setInspectModeEnabled",Z.params)Z.params.enabled=Z.params.mode==="searchForNode",delete Z.params.mode,delete Z.params.highlightConfig;return Promise.resolve(Z)}),$.addMessageFilter("tools::DOM.setInspectedNode",(Z)=>{return Z.method="Console.addInspectedNode",Promise.resolve(Z)}),$.addMessageFilter("tools::DOM.performSearch",(Z)=>{if(Z.params)Z.params={query:Z.params.query,caseSensitive:!!Z.params.caseSensitive};return Promise.resolve(Z)}),$.addMessageFilter("target::DOM.performSearch",(Z)=>{let J=Z.result?.searchId;if(typeof J==="string")Q.add(J);return Promise.resolve(Z)}),$.addMessageFilter("tools::DOM.discardSearchResults",(Z)=>{let J=Z.params?.searchId;if(typeof J==="string")Q.delete(J);return Promise.resolve(Z)}),$.addMessageFilter("tools::DOM.pushNodesByBackendIdsToFrontend",async(Z)=>{let J=Z.params?.backendNodeIds??[],Y=await Promise.all(J.map((X)=>$.callTarget("DOM.pushNodeByBackendIdToFrontend",{backendNodeId:X}).then((G)=>G.nodeId).catch(()=>X)));return $.fireResultToTools(Z.id,{nodeIds:Y}),null}),$.addMessageFilter("tools::DOM.getBoxModel",(Z)=>{return $.callTarget("DOM.highlightNode",{highlightConfig:{showInfo:!0,contentColor:{r:111,g:168,b:220,a:0.66},paddingColor:{r:147,g:196,b:125,a:0.55},borderColor:{r:255,g:229,b:153,a:0.66},marginColor:{r:246,g:178,b:107,a:0.66}},nodeId:Z.params?.nodeId}).catch(()=>{}),Promise.resolve(null)}),$.addMessageFilter("tools::DOM.getNodeForLocation",async(Z)=>{try{let Y=(await $.callTarget("Runtime.evaluate",{expression:`document.elementFromPoint(${Z.params?.x},${Z.params?.y})`})).result?.objectId;if(!Y)return $.fireResultToTools(Z.id,{nodeId:0}),null;let X=await $.callTarget("DOM.requestNode",{objectId:Y});$.fireResultToTools(Z.id,{nodeId:X.nodeId,backendNodeId:X.nodeId})}catch(J){$.fireErrorToTools(Z.id,{message:J?.message??String(J)})}return null}),$.addMessageFilter("tools::DOM.resolveNode",(Z)=>{if(Z.params&&Z.params.objectGroup===void 0)delete Z.params.objectGroup;return Promise.resolve(Z)})}function UZ($){$.addMessageFilter("tools::DOMDebugger.getEventListeners",async(Q)=>{try{let Z=await $.callTarget("DOM.requestNode",{objectId:Q.params?.objectId}),Y=((await $.callTarget("DOM.getEventListenersForNode",{nodeId:Z.nodeId,objectGroup:"event-listeners-panel"})).listeners??[]).map((X)=>({type:X.type,useCapture:!!X.useCapture,passive:!!X.passive,once:!!X.once,location:X.location,handler:X.handler}));$.fireResultToTools(Q.id,{listeners:Y})}catch(Z){$.fireErrorToTools(Q.id,{message:Z?.message??String(Z)})}return null}),$.addMessageFilter("tools::DOMDebugger.setXHRBreakpoint",(Q)=>v($,Q,{})),$.addMessageFilter("tools::DOMDebugger.removeXHRBreakpoint",(Q)=>v($,Q,{})),$.addMessageFilter("tools::DOMDebugger.setEventListenerBreakpoint",(Q)=>v($,Q,{})),$.addMessageFilter("tools::DOMDebugger.removeEventListenerBreakpoint",(Q)=>v($,Q,{}))}function BZ($,Q){$.addMessageFilter("tools::Page.setOverlayMessage",(X)=>{return X.method="Debugger.setOverlayMessage",Promise.resolve(X)}),$.addMessageFilter("tools::Page.configureOverlay",(X)=>{return X.method="Debugger.setOverlayMessage",Promise.resolve(X)}),$.addMessageFilter("tools::Page.getNavigationHistory",async(X)=>{try{let G=await $.callTarget("Runtime.evaluate",{expression:"window.location.href"}),H=await $.callTarget("Runtime.evaluate",{expression:"document.title"});$.fireResultToTools(X.id,{currentIndex:0,entries:[{id:0,url:G.result?.value??"",userTypedURL:G.result?.value??"",title:H.result?.value??"",transitionType:"link"}]})}catch(G){$.fireErrorToTools(X.id,{message:G?.message??String(G)})}return null}),$.addMessageFilter("target::Page.frameNavigated",(X)=>{return V$(X.params?.frame),Promise.resolve(X)}),$.addMessageFilter("target::Page.getResourceTree",(X)=>{return S8(X.result?.frameTree),Promise.resolve(X)}),$.addMessageFilter("tools::Page.getFrameTree",async(X)=>{if(typeof X.id!=="number")return null;try{let G=await $.callTarget("Page.getResourceTree",{}),H=K$(G?.frameTree);S8(H),$.fireResultToTools(X.id,{frameTree:H})}catch(G){$.fireErrorToTools(X.id,{message:G?.message??String(G)})}return null}),$.addMessageFilter("tools::Page.createIsolatedWorld",(X)=>{if(typeof X.id!=="number")return Promise.resolve(null);return v($,X,{executionContextId:Q.pageExecCtx.id||1})});let Z=1;$.addMessageFilter("tools::Page.addScriptToEvaluateOnNewDocument",(X)=>v($,X,{identifier:`pptr-${Z++}`})),$.addMessageFilter("tools::WebMCP.enable",(X)=>v($,X,{})),$.addMessageFilter("tools::WebMCP.disable",(X)=>v($,X,{})),$.addMessageFilter("tools::Page.captureScreenshot",(X)=>{return $.fireErrorToTools(X.id,{message:"Page.captureScreenshot not supported by Safari"}),Promise.resolve(null)}),$.addMessageFilter("tools::Page.startScreencast",(X)=>v($,X,{})),$.addMessageFilter("tools::Page.stopScreencast",(X)=>v($,X,{})),$.addMessageFilter("tools::Page.screencastFrameAck",(X)=>v($,X,{})),$.addMessageFilter("tools::Page.setLifecycleEventsEnabled",(X)=>v($,X,{}));let J="",Y="0.1";$.addMessageFilter("target::Page.frameNavigated",(X)=>{let G=X.params?.frame;if(G)Y=G.id??Y,J=G.loaderId??J,$.fireEventToTools("Page.frameStartedLoading",{frameId:Y}),$.fireEventToTools("Page.lifecycleEvent",{frameId:Y,loaderId:J,name:"init",timestamp:0}),$.fireEventToTools("Page.lifecycleEvent",{frameId:Y,loaderId:J,name:"commit",timestamp:0});return Promise.resolve(X)}),$.addMessageFilter("target::Page.domContentEventFired",(X)=>{return $.fireEventToTools("Page.lifecycleEvent",{frameId:Y,loaderId:J,name:"DOMContentLoaded",timestamp:X.params?.timestamp??0}),Promise.resolve(X)}),$.addMessageFilter("target::Page.loadEventFired",(X)=>{return $.fireEventToTools("Page.lifecycleEvent",{frameId:Y,loaderId:J,name:"load",timestamp:X.params?.timestamp??0}),$.fireEventToTools("Page.lifecycleEvent",{frameId:Y,loaderId:J,name:"networkAlmostIdle",timestamp:X.params?.timestamp??0}),$.fireEventToTools("Page.lifecycleEvent",{frameId:Y,loaderId:J,name:"networkIdle",timestamp:X.params?.timestamp??0}),$.fireEventToTools("Page.frameStoppedLoading",{frameId:Y}),Promise.resolve(X)})}function V$($){if(!$)return;if(!$.securityOrigin)try{$.securityOrigin=new URL($.url??"").origin}catch{$.securityOrigin="://"}if(!$.mimeType)$.mimeType="text/html"}function S8($){if(!$)return;if(V$($.frame),Array.isArray($.childFrames))$.childFrames.forEach(S8)}function K$($){if(!$)return $;let Q={frame:$.frame};if(Array.isArray($.childFrames))Q.childFrames=$.childFrames.map(K$);return Q}function LZ($){$.addMessageFilter("tools::Overlay.enable",(Q)=>v($,Q,{})),$.addMessageFilter("tools::Overlay.disable",(Q)=>v($,Q,{})),$.addMessageFilter("tools::Overlay.highlightNode",(Q)=>{let Z=Q.params??{};return Q.method="DOM.highlightNode",Q.params={highlightConfig:Z.highlightConfig,nodeId:Z.nodeId,objectId:Z.objectId},Promise.resolve(Q)}),$.addMessageFilter("tools::Overlay.highlightFrame",(Q)=>{return Q.method="DOM.highlightFrame",Promise.resolve(Q)}),$.addMessageFilter("tools::Overlay.highlightQuad",(Q)=>{return Q.method="DOM.highlightQuad",Promise.resolve(Q)}),$.addMessageFilter("tools::Overlay.highlightRect",(Q)=>{return Q.method="DOM.highlightRect",Promise.resolve(Q)}),$.addMessageFilter("tools::Overlay.hideHighlight",(Q)=>{return Q.method="DOM.hideHighlight",Promise.resolve(Q)}),$.addMessageFilter("tools::Overlay.setShowPaintRects",(Q)=>{return Q.method="Page.setShowPaintRects",Promise.resolve(Q)}),$.addMessageFilter("tools::Overlay.setInspectMode",(Q)=>{let Z=Q.params??{};return Q.method="DOM.setInspectModeEnabled",Q.params={enabled:typeof Z.mode==="string"&&Z.mode!=="none",highlightConfig:Z.highlightConfig},Promise.resolve(Q)})}function OZ($){$.addMessageFilter("tools::Emulation.canEmulate",(Q)=>v($,Q,{result:!0})),$.addMessageFilter("tools::Emulation.setTouchEmulationEnabled",(Q)=>{return Q.method="Page.setTouchEmulationEnabled",Promise.resolve(Q)}),$.addMessageFilter("tools::Emulation.setScriptExecutionDisabled",(Q)=>{return Q.method="Page.setScriptExecutionDisabled",Promise.resolve(Q)}),$.addMessageFilter("tools::Emulation.setEmulatedMedia",(Q)=>{return Q.method="Page.setEmulatedMedia",Promise.resolve(Q)}),$.addMessageFilter("tools::Rendering.setShowPaintRects",(Q)=>{return Q.method="Page.setShowPaintRects",Promise.resolve(Q)}),$.addMessageFilter("tools::Emulation.setDeviceMetricsOverride",(Q)=>v($,Q,{})),$.addMessageFilter("tools::Emulation.clearDeviceMetricsOverride",(Q)=>v($,Q,{})),$.addMessageFilter("tools::Emulation.setUserAgentOverride",(Q)=>{let Z=Q.params?.userAgent??"";return Q.method="Page.overrideUserAgent",Q.params={value:Z},Promise.resolve(Q)}),$.addMessageFilter("tools::Emulation.setFocusEmulationEnabled",(Q)=>v($,Q,{})),$.addMessageFilter("tools::Emulation.setDefaultBackgroundColorOverride",(Q)=>v($,Q,{}))}function E8($){switch($){case"Document":case"Image":case"Font":case"Script":case"XHR":case"Fetch":case"Ping":case"WebSocket":return $;case"StyleSheet":return"Stylesheet";default:return"Other"}}function EZ($){if(!$)return $;return{...PZ,...$,hasPostData:$.postData!=null}}function IZ($){if(!$)return $;let Q=0,Z=$.headers??{},J=Z["Content-Length"]??Z["content-length"];if(J!=null)Q=Number(J)||0;return{...TZ,...$,fromDiskCache:$.source==="disk-cache",fromServiceWorker:$.source==="service-worker",encodedDataLength:Q}}function xZ($,Q){if(!$)return;for(let[Z,J]of Object.entries(Q))if(Z in $&&!(J in $))$[J]=$[Z],delete $[Z]}function qZ($){let Q=typeof $.size==="number"?$.size:($.name?.length??0)+($.value?.length??0);return{name:$.name,value:$.value,domain:$.domain,path:$.path,expires:$.expires??-1,size:Q,httpOnly:!!$.httpOnly,secure:!!$.secure,session:!!$.session,...$.sameSite?{sameSite:$.sameSite}:{}}}function wZ($,Q){let Z=new Map,J=1e4,Y=1024,X=4194304,G=Promise.resolve(),H=(W)=>{let z=G.then(W,W);return G=z.catch(()=>{}),z};for(let[W,z]of Object.entries(AZ))$.addMessageFilter(`tools::${W}`,(U)=>{return U.method=z,Promise.resolve(U)});$.addMessageFilter("tools::Network.setCacheDisabled",(W)=>{if(W.params&&"cacheDisabled"in W.params)W.params={disabled:!!W.params.cacheDisabled};return Promise.resolve(W)});let K=async(W)=>{try{let z=await $.callTarget("Page.getCookies",{}),U=Array.isArray(z?.cookies)?z.cookies.map(qZ):[];$.fireResultToTools(W.id,{cookies:U})}catch(z){$.fireErrorToTools(W.id,{message:z?.message??String(z)})}return null};$.addMessageFilter("tools::Network.getCookies",K),$.addMessageFilter("tools::Network.getAllCookies",K),$.addMessageFilter("tools::Network.setCookie",(W)=>{let z=W.params??{};return W.method="Page.setCookie",W.params={cookie:{name:z.name,value:z.value,domain:z.domain??"",path:z.path??"/",expires:z.expires??-1,session:!1,httpOnly:!!z.httpOnly,secure:!!z.secure,sameSite:z.sameSite??"None"}},Promise.resolve(W)}),$.addMessageFilter("tools::Network.setCookies",async(W)=>{let z=Array.isArray(W.params?.cookies)?W.params.cookies:[];try{await Promise.all(z.map((U)=>$.callTarget("Page.setCookie",{cookie:U}))),$.fireResultToTools(W.id,{})}catch(U){$.fireErrorToTools(W.id,{message:U?.message??String(U)})}return null}),$.addMessageFilter("tools::Network.deleteCookies",(W)=>{let z=W.params??{},U=z.url??`https://${(z.domain??"").replace(/^\./,"")}${z.path??"/"}`;return W.method="Page.deleteCookie",W.params={cookieName:z.name,url:U},Promise.resolve(W)}),$.addMessageFilter("tools::Network.deleteCookie",(W)=>{return W.method="Page.deleteCookie",Promise.resolve(W)}),$.addMessageFilter("tools::Network.clearBrowserCookies",async(W)=>{try{let z=await $.callTarget("Page.getCookies",{}),U=Array.isArray(z?.cookies)?z.cookies:[];await Promise.all(U.map((M)=>$.callTarget("Page.deleteCookie",{cookieName:M.name,url:`${M.secure?"https":"http"}://${(M.domain??"").replace(/^\./,"")}${M.path??"/"}`}).catch(()=>{}))),$.fireResultToTools(W.id,{})}catch(z){$.fireErrorToTools(W.id,{message:z?.message??String(z)})}return null}),$.addMessageFilter("tools::Network.canEmulateNetworkConditions",(W)=>v($,W,{result:!1})),$.addMessageFilter("tools::Network.setExtraHTTPHeaders",(W)=>v($,W,{})),$.addMessageFilter("tools::Network.setBlockedURLs",(W)=>v($,W,{})),$.addMessageFilter("tools::Network.emulateNetworkConditions",(W)=>v($,W,{})),$.addMessageFilter("tools::Network.setMonitoringXHREnabled",(W)=>v($,W,{})),$.addMessageFilter("tools::Network.getResponseBody",async(W)=>{let z=W.params?.requestId,U=typeof z==="string"?Z.get(z):void 0;if(!U)return $.fireErrorToTools(W.id,{message:"Network.getResponseBody: requestId not tracked (only requests observed via requestWillBeSent are recoverable)"}),null;if(U.method&&U.method.toUpperCase()!=="GET")return $.fireErrorToTools(W.id,{message:`Network.getResponseBody: cannot recover ${U.method} response body (bridge re-fetch is GET-only)`}),null;if(U.bytes===0)return $.fireResultToTools(W.id,{body:"",base64Encoded:!1}),null;return H(async()=>{try{let M={};for(let[I,_]of Object.entries(U.headers??{})){let V=I.toLowerCase();if(V==="if-none-match"||V==="if-modified-since"||V==="host"||V==="connection")continue;M[I]=String(_)}let F=new AbortController,A=setTimeout(()=>F.abort(),1e4),R;try{R=await fetch(U.url,{headers:M,redirect:"follow",signal:F.signal})}finally{clearTimeout(A)}let x=Number(R.headers.get("content-length")??"");if(Number.isFinite(x)&&x>4194304){$.fireErrorToTools(W.id,{message:`Network.getResponseBody: response too large (${x} bytes > ${"4194304"}) — skipped re-fetch`});try{await R.arrayBuffer()}catch{}return}let j=Buffer.from(await R.arrayBuffer());if(j.byteLength>4194304){$.fireErrorToTools(W.id,{message:`Network.getResponseBody: response too large (${j.byteLength} bytes > 4194304)`});return}let P=((R.headers.get("content-type")??"").split(";")[0]??"").trim(),L=/^(text\/|image\/svg\+xml|application\/(json|xml|javascript|ecmascript|x-www-form-urlencoded))$/.test(P),C=L?j.toString("utf8"):j.toString("base64");$.fireResultToTools(W.id,{body:C,base64Encoded:!L})}catch(M){$.fireErrorToTools(W.id,{message:`Network.getResponseBody re-fetch failed: ${M?.message??String(M)}`})}}),null});for(let[W,z]of Object.entries(jZ))$.addMessageFilter(`target::${W}`,(U)=>{return xZ(U.params,z),Promise.resolve(U)});$.addMessageFilter("target::Network.requestWillBeSent",(W)=>{let z=W.params;if(z){if(Object.assign(z,{...RZ,...z}),z.request=EZ(z.request),z.type=E8(z.type),typeof z.requestId==="string"&&typeof z.request?.url==="string"){if(Z.size>=1024){let U=Z.keys().next().value;if(U!==void 0)Z.delete(U)}Z.set(z.requestId,{url:z.request.url,method:z.request.method,headers:z.request.headers,frameId:z.frameId,bytes:0})}}return Promise.resolve(W)}),$.addMessageFilter("target::Network.responseReceived",(W)=>{let z=W.params;if(z)Object.assign(z,{...CZ,...z}),z.response=IZ(z.response),z.type=E8(z.type);return Promise.resolve(W)}),$.addMessageFilter("target::Network.loadingFinished",(W)=>{let z=W.params;if(z){let U=z.metrics?.responseBodyBytesReceived;if(typeof U==="number"&&z.encodedDataLength==null)z.encodedDataLength=U;if(Object.assign(z,{...DZ,...z}),typeof z.requestId==="string"&&typeof U==="number"){let M=Z.get(z.requestId);if(M&&U>M.bytes)M.bytes=U}}return Promise.resolve(W)}),$.addMessageFilter("target::Network.dataReceived",(W)=>{let z=W.params;if(z&&typeof z.requestId==="string"){let U=Z.get(z.requestId);if(U){let M=Number(z.dataLength)||0;U.bytes+=M}}return Promise.resolve(W)}),$.addMessageFilter("target::Network.loadingFailed",(W)=>{let z=W.params;if(z){if(z.type=E8(z.type),!("canceled"in z))z.canceled=!1}return Promise.resolve(W)}),$.addMessageFilter("target::Network.requestServedFromMemoryCache",(W)=>{if(W.method="Network.requestServedFromCache",W.params)W.params={requestId:W.params.requestId};return Promise.resolve(W)}),$.addMessageFilter("tools::Network.loadNetworkResource",async(W)=>{let z=W.params??{};if(!Q)return $.fireResultToTools(W.id,{resource:{success:!1,netError:1,netErrorName:"ERR_NOT_IMPLEMENTED"}}),null;try{let U=await $.callTarget("Network.loadResource",{frameId:z.frameId,url:z.url}),M=!!U?.content&&(U?.status??0)>=200&&(U?.status??0)<300,F;if(M)F=`network-resource:${z.frameId??""}:${z.url}`,Q.set(F,String(U.content));$.fireResultToTools(W.id,{resource:{success:M,stream:F,httpStatusCode:U?.status,headers:U?.headers,mimeType:U?.mimeType}})}catch(U){$.fireResultToTools(W.id,{resource:{success:!1,netError:2,netErrorName:U?.message??"ERR_FAILED"}})}return null})}function SZ($){for(let Q of["Target.setAutoAttach","Target.setDiscoverTargets","Target.setRemoteLocations"])$.addMessageFilter(`tools::${Q}`,(Z)=>v($,Z,{}))}function yZ($){$.addMessageFilter("target::Inspector.inspect",async(Q)=>{let Z=Q.params?.object?.objectId;if(typeof Z!=="string")return null;try{let Y=(await $.callTarget("DOM.requestNode",{objectId:Z}))?.nodeId;if(typeof Y==="number")$.fireEventToTools("Overlay.inspectNodeRequested",{backendNodeId:Y}),$.fireEventToTools("DOM.inspectNodeRequested",{backendNodeId:Y})}catch{}return null})}function fZ($){if(!$)return $;let Q=$.origin==="inspector";return{styleSheetId:$.styleSheetId,frameId:$.frameId,sourceURL:$.sourceURL??"",origin:$.origin==="author"?"regular":$.origin,title:$.title??"",disabled:!!$.disabled,isInline:!!$.isInline,startLine:$.startLine??0,startColumn:$.startColumn??0,isMutable:Q,isConstructed:Q,length:$.length??0,endLine:$.endLine??0,endColumn:$.endColumn??0,hasSourceURL:!!$.sourceURL}}function y8($){if(!$)return $;let Q={origin:$.origin==="author"?"regular":$.origin,style:C0($.style),selectorList:hZ($.selectorList)};if($.ruleId?.styleSheetId)Q.styleSheetId=$.ruleId.styleSheetId;if(Array.isArray($.groupings))Q.media=$.groupings.map((Z)=>({text:Z.text,sourceURL:Z.sourceURL,source:bZ[Z.type]}));return Q}function gZ($){let Q={lastNodeId:0},Z=new Map;async function J(Y,X){let G=Z.get(Y);if(!G)try{if(G=(await $.callTarget("CSS.getStyleSheet",{styleSheetId:Y}))?.styleSheet,G)Z.set(Y,G)}catch{}let H=G?.rules??[];for(let K=0;K<H.length;K++)if(kZ(H[K]?.style?.range,X))return{styleSheetId:Y,ordinal:K};return{styleSheetId:Y,ordinal:0}}$.addMessageFilter("tools::CSS.enable",(Y)=>{return $.fireResultToTools(Y.id,{}),Promise.resolve(null)}),$.addMessageFilter("target::CSS.styleSheetAdded",(Y)=>{if(Y.params?.header)Y.params.header=fZ(Y.params.header);return Promise.resolve(Y)}),$.addMessageFilter("target::CSS.getInlineStylesForNode",(Y)=>{let X=Y.result;if(X)Y.result={inlineStyle:C0(X.inlineStyle),attributesStyle:C0(X.attributesStyle)};return Promise.resolve(Y)}),$.addMessageFilter("tools::CSS.getMatchedStylesForNode",async(Y)=>{if(typeof Y.params?.nodeId==="number")Q.lastNodeId=Y.params.nodeId;try{let[X,G]=await Promise.all([$.callTarget("CSS.getInlineStylesForNode",{nodeId:Y.params.nodeId}),$.callTarget("CSS.getMatchedStylesForNode",{nodeId:Y.params.nodeId,includePseudo:!0,includeInherited:!0})]);$.fireResultToTools(Y.id,{inlineStyle:C0(X?.inlineStyle),attributesStyle:C0(X?.attributesStyle),matchedCSSRules:g8(G?.matchedCSSRules),pseudoElements:uZ(G?.pseudoElements),inherited:pZ(G?.inherited),cssKeyframesRules:[]})}catch(X){$.fireErrorToTools(Y.id,{message:X?.message??String(X)})}return null}),$.addMessageFilter("tools::CSS.setStyleTexts",async(Y)=>{let X=Y.params?.edits??[],G=[];for(let H of X)try{let K=await J(H.styleSheetId,H.range),W=await $.callTarget("CSS.setStyleText",{styleId:K,text:H.text});G.push(C0(W?.style)),Z.delete(H.styleSheetId),$.fireEventToTools("CSS.styleSheetChanged",{styleSheetId:H.styleSheetId})}catch{G.push(null)}return $.fireResultToTools(Y.id,{styles:G}),null}),$.addMessageFilter("tools::CSS.setRuleSelector",async(Y)=>{let{styleSheetId:X,range:G,selector:H}=Y.params??{};try{let K=await J(X,G);Y.params={ruleId:K,selector:H}}catch(K){return $.fireErrorToTools(Y.id,{message:K?.message??String(K)}),null}return Y}),$.addMessageFilter("target::CSS.setRuleSelector",(Y)=>{if(Y.result?.rule)Y.result={rule:y8(Y.result.rule)};return Promise.resolve(Y)}),$.addMessageFilter("tools::CSS.addRule",async(Y)=>{let X=Y.params??{},G=String(X.ruleText??"").trim().replace(/\{\s*\}\s*$/,"").trim();try{let H=await $.callTarget("CSS.addRule",{contextNodeId:Q.lastNodeId,styleSheetId:X.styleSheetId,selector:G});$.fireResultToTools(Y.id,{rule:y8(H?.rule)})}catch(H){$.fireErrorToTools(Y.id,{message:H?.message??String(H)})}return null})}function mZ($){$.addMessageFilter("tools::Browser.getVersion",(Q)=>v($,Q,cZ)),$.addMessageFilter("tools::Browser.getWindowForTarget",(Q)=>v($,Q,{windowId:1,bounds:{}})),$.addMessageFilter("tools::Browser.setWindowBounds",(Q)=>v($,Q,{}))}function dZ($){switch($){case"mousePressed":return"mousedown";case"mouseReleased":return"click";case"mouseMoved":return"mousemove";default:return null}}function iZ($){let Q=async(Z)=>{let J=Z.params??{},Y=dZ(J.type);if(!Y)return $.fireResultToTools(Z.id,{}),null;let X=Y==="click"?["mousedown","click","mouseup"]:[Y];try{for(let G of X){let H={x:Number(J.x)||0,y:Number(J.y)||0,modifiers:Number(J.modifiers)||0,button:J.button??"none",type:G},K=`(${lZ}, __sd_simulate(${JSON.stringify(H)}))`;await $.callTarget("Runtime.evaluate",{expression:K})}$.fireResultToTools(Z.id,{})}catch(G){$.fireErrorToTools(Z.id,{message:G?.message??String(G)})}return null};$.addMessageFilter("tools::Input.dispatchMouseEvent",Q),$.addMessageFilter("tools::Input.emulateTouchFromMouseEvent",Q),$.addMessageFilter("tools::Input.setIgnoreInputEvents",(Z)=>{return $.fireResultToTools(Z.id,{}),Promise.resolve(null)})}function oZ($){let Q=new Map;return $.addMessageFilter("tools::IO.read",(Z)=>{let J=String(Z.params?.handle??""),Y=Number(Z.params?.size)||nZ,X=Number(Z.params?.offset)||0,G=Q.get(J);if(G===void 0)return $.fireResultToTools(Z.id,{data:"",eof:!0,base64Encoded:!1}),Promise.resolve(null);let H=G.slice(X,X+Y),K=X+Y>=G.length;return $.fireResultToTools(Z.id,{data:H,eof:K,base64Encoded:!1}),Promise.resolve(null)}),$.addMessageFilter("tools::IO.close",(Z)=>{return Q.delete(String(Z.params?.handle??"")),$.fireResultToTools(Z.id,{}),Promise.resolve(null)}),Q}function aZ($){$.addMessageFilter("tools::Accessibility.enable",(Q)=>v($,Q,{})),$.addMessageFilter("tools::Accessibility.disable",(Q)=>v($,Q,{})),$.addMessageFilter("tools::Accessibility.getPartialAXTree",async(Q)=>{let Z=Q.params??{},J=Z.nodeId??Z.backendNodeId;if(typeof J!=="number")return $.fireResultToTools(Q.id,{nodes:[]}),null;try{let X=(await $.callTarget("DOM.getAccessibilityPropertiesForNode",{nodeId:J}))?.properties??{},G={nodeId:String(J),ignored:Boolean(X.ignored),role:X.role?{type:"role",value:String(X.role)}:void 0,name:X.label?{type:"computedString",value:String(X.label)}:void 0,backendDOMNodeId:J,childIds:[],properties:[]};$.fireResultToTools(Q.id,{nodes:[G]})}catch(Y){$.fireResultToTools(Q.id,{nodes:[]})}return null})}function sZ($){for(let[Z,J]of Object.entries(tZ))$.addMessageFilter(`tools::${Z}`,(Y)=>v($,Y,J));for(let Z of rZ)for(let J of["enable","disable"])$.addMessageFilter(`tools::${Z}.${J}`,(Y)=>v($,Y,{}));let Q=[["Autofill.setAddresses",{}],["Storage.getStorageKey",{storageKey:""}],["Storage.trackCacheStorageForOrigin",{}],["Storage.trackIndexedDBForOrigin",{}],["Storage.untrackCacheStorageForOrigin",{}],["Storage.untrackIndexedDBForOrigin",{}],["Storage.getCookies",{cookies:[]}],["ServiceWorker.unregister",{}]];for(let[Z,J]of Q)$.addMessageFilter(`tools::${Z}`,(Y)=>v($,Y,J))}function k8($){let Q=WZ();sZ($);let Z=oZ($);zZ($,Q),HZ($,Q),MZ($,Q),NZ($),UZ($),BZ($,Q),LZ($),OZ($),wZ($,Z),SZ($),yZ($),gZ($),mZ($),iZ($),aZ($)}function z$($){let Q=`${$.reqHost}/devtools/page/${$.id}`;return{description:$.description,devtoolsFrontendUrl:`devtools://devtools/bundled/inspector.html?ws=${Q}`,devtoolsFrontendUrlCompat:`devtools://devtools/bundled/inspector.html?ws=${Q}`,id:$.id,title:$.title,type:$.type,url:$.url,webSocketDebuggerUrl:`ws://${Q}`,faviconUrl:""}}function b0($){return $.replace(/[&<>"']/g,(Q)=>eZ[Q])}function H$($){return W$.createServer((Q,Z)=>{let J=new URL(Q.url??"/","http://placeholder"),Y=Q.headers.host??"";if(J.pathname==="/json/version"){let X=typeof $.version==="function"?$.version(Y):$.version;return I8(Z,X)}if(J.pathname==="/json"||J.pathname==="/json/list")return I8(Z,$.listTargets(Y));if(J.pathname==="/json/protocol")return I8(Z,{});if(J.pathname==="/")return $2(Z,$,Y);Z.writeHead(404,{"content-type":"text/plain"}),Z.end("not found")})}function I8($,Q,Z=200){$.writeHead(Z,{"content-type":"application/json; charset=utf-8"}),$.end(JSON.stringify(Q))}function $2($,Q,Z){let J=Q.listTargets(Z),Y=J.map((K)=>`<li><strong>${b0(K.title||K.url||K.id)}</strong><br><small>${b0(K.url)}</small><br><small>copy &amp; paste into Chrome's address bar:</small><br><code style="user-select:all">${b0(K.devtoolsFrontendUrl)}</code></li>`).join(""),X=`inspect-webkit${Q.brand?` (${Q.brand})`:""}`,G=Q.indexNote??'<p>Open <code style="display:inline;padding:1px 4px">chrome://inspect</code> → <em>Configure…</em> → add '+`<code style="display:inline;padding:1px 4px">${b0(Z)}</code>.</p>`,H=`<!doctype html><meta charset=utf-8><title>${b0(X)}</title><style>body{font:14px -apple-system,sans-serif;max-width:760px;margin:2em auto;padding:0 1em}code{display:block;background:#f4f4f4;padding:.5em;border-radius:4px;word-break:break-all;margin:.4em 0 1em}li{margin-bottom:1.5em;list-style:none}</style><h1>${b0(X)} — ${J.length} target${J.length===1?"":"s"}</h1>`+G+`<ul>${Y}</ul>`+'<hr><p>JSON: <a href="/json/list">/json/list</a> · <a href="/json/version">/json/version</a></p>';$.writeHead(200,{"content-type":"text/html; charset=utf-8"}),$.end(H)}function M$($,Q,Z){return new Promise((J,Y)=>{$.once("error",(G)=>{if(G.port==null)G.port=Z;if(G.host==null)G.host=Q;Y(G)});let X=Q==="localhost"||Q==="::1"||Q==="127.0.0.1"?"::":Q;$.listen({port:Z,host:X,ipv6Only:!1},()=>{$.off("error",Y),J()})})}function _$($){let Q=!process.env.NO_COLOR&&process.stderr.isTTY===!0,Z=(K,W)=>Q?`\x1B[${K}m${W}\x1B[0m`:W,J=(K)=>Z("1",K),Y=(K)=>Z("2",K),X=(K)=>Z("36",K),G=(K)=>Z("32",K),H=`http://${$.host}:${$.port}`;console.error(`${G("●")} ${J(`${$.brand} CDP`)} ${X(H)}`),console.error(` ${Y("chrome")} chrome://inspect → ${$.host}:${$.port}`),console.error(` ${Y("vscode")} "type": "chrome", "port": ${$.port}`)}function Q2($,Q){let Z=!!process.env.INSPECT_WEBKIT_DEBUG,J=new Map,Y=!1,X=!1,G=!1,H=new Map,K=null;function W(L){if($.readyState!==1)return;let C=JSON.stringify(L);if(Z)console.error(`[browser] tools<< ${C.slice(0,240)}`);$.send(C)}function z(L,C){let I={method:L,params:C};if(K)I.sessionId=K;W(I)}function U(L,C){return{targetId:L.targetId,type:L.type==="page"?"page":L.type||"other",title:L.title||"",url:L.url||"",attached:C,canAccessOpener:!1,browserContextId:"default"}}function M(L){for(let C of J.values())if(C.targetId===L)return!0;return!1}function F(L,C){let I=Q.listEntries().find((B)=>B.targetId===L);if(!I)return null;let _=crypto.randomUUID(),V=(B)=>{let D;try{D=JSON.parse(B)}catch{return}D.sessionId=_,W(D)},N=Q.createPageSession(L,V);if(!N)return null;return J.set(_,{handle:N,targetId:L}),z("Target.attachedToTarget",{sessionId:_,targetInfo:U(I,!0),waitingForDebugger:C}),{sessionId:_,entry:I}}function A(L){let C=J.get(L);if(!C)return!1;try{C.handle.close()}catch{}return J.delete(L),z("Target.detachedFromTarget",{sessionId:L,targetId:C.targetId}),!0}function R(){let L=Q.listEntries(),C=new Set;for(let I of L){C.add(I.targetId);let _=H.get(I.targetId);if(!_){if(H.set(I.targetId,I),Y)z("Target.targetCreated",{targetInfo:U(I,M(I.targetId))});if(X&&!M(I.targetId))F(I.targetId,G)}else if(_.title!==I.title||_.url!==I.url){if(H.set(I.targetId,I),Y)z("Target.targetInfoChanged",{targetInfo:U(I,M(I.targetId))})}}for(let I of[...H.keys()]){if(C.has(I))continue;H.delete(I);for(let[_,V]of J)if(V.targetId===I)A(_);if(Y)z("Target.targetDestroyed",{targetId:I})}}let x=setInterval(R,Q.refreshMs??1000);function j(L,C){if(L)C.sessionId=L;W(C)}function P(L,C){let{id:I,method:_}=L,V=L.params??{};switch(_){case"Browser.getVersion":return j(C,{id:I,result:{protocolVersion:"1.3",product:"Safari/inspect-webkit",revision:"@",userAgent:"Mozilla/5.0 (iPhone; CPU iPhone OS like Mac OS X) AppleWebKit/605.1.15 Safari/inspect-webkit",jsVersion:""}});case"Target.attachToBrowserTarget":{if(!K)K=crypto.randomUUID();return j(C,{id:I,result:{sessionId:K}})}case"Target.setDiscoverTargets":{if(Y=!!V.discover,Y)for(let N of Q.listEntries())H.set(N.targetId,N),z("Target.targetCreated",{targetInfo:U(N,M(N.targetId))});if(typeof I==="number")j(C,{id:I,result:{}});return}case"Target.getTargets":{let N=Q.listEntries().map((B)=>U(B,M(B.targetId)));return j(C,{id:I,result:{targetInfos:N}})}case"Target.setAutoAttach":{if(X=!!V.autoAttach,G=!!V.waitForDebuggerOnStart,X){for(let N of Q.listEntries())if(!M(N.targetId))F(N.targetId,G)}if(typeof I==="number")j(C,{id:I,result:{}});return}case"Target.attachToTarget":{for(let[B,D]of J)if(D.targetId===V.targetId){if(typeof I==="number")j(C,{id:I,result:{sessionId:B}});return}let N=F(V.targetId,!1);if(!N){if(typeof I==="number")j(C,{id:I,error:{code:-32000,message:"No target with given id found"}});return}if(typeof I==="number")j(C,{id:I,result:{sessionId:N.sessionId}});return}case"Target.detachFromTarget":{if(A(V.sessionId),typeof I==="number")j(C,{id:I,result:{}});return}case"Target.sendMessageToTarget":{let N=J.get(V.sessionId);if(N)N.handle.onMessageFromTools(V.message);if(typeof I==="number")j(C,{id:I,result:{}});return}case"Target.setRemoteLocations":case"Target.exposeDevToolsProtocol":case"Target.activateTarget":case"Target.closeTarget":if(typeof I==="number")j(C,{id:I,result:{}});return;case"Target.getBrowserContexts":{if(typeof I==="number")j(C,{id:I,result:{browserContextIds:["default"]}});return}}if(typeof I==="number")j(C,{id:I,error:{code:-32601,message:`Browser-level method '${_??"?"}' not implemented`}})}$.on("message",(L,C)=>{let I=C?new TextDecoder().decode(L):L.toString();if(Z)console.error(`[browser] tools>> ${I.slice(0,240)}`);let _;try{_=JSON.parse(I)}catch{return}if(typeof _.sessionId==="string"){if(_.sessionId===K){let B={..._};return delete B.sessionId,P(B,_.sessionId)}let V=J.get(_.sessionId);if(!V){if(typeof _.id==="number")W({id:_.id,sessionId:_.sessionId,error:{code:-32000,message:`Session ${_.sessionId} not found`}});return}let N={..._};delete N.sessionId,V.handle.onMessageFromTools(JSON.stringify(N));return}P(_,void 0)}),$.on("close",()=>{clearInterval(x);for(let[,L]of J)try{L.handle.close()}catch{}J.clear()})}async function J2($={}){let Q=$.port??9222,Z=$.host??"localhost",J=await Y2();if(J.length===0)console.error("warn: no inspectable sources found (no devices, no simulators)."),console.error(" The server will still run; new targets will appear if you start one.");let Y=new Map,X=new WeakMap,G=new Map;for(let _ of J)G.set(_,[]),X.set(_,new Set),_.wi.subscribe((V)=>{let{__selector:N,__argument:B}=V;if(!N||!B)return;if(N==="_rpc_reportConnectedApplicationList:"){let D=B.WIRApplicationDictionaryKey??{},T=Object.entries(D).map(([w,y])=>({appId:w,bundleId:y.WIRApplicationBundleIdentifierKey,name:y.WIRApplicationNameKey??y.WIRApplicationBundleIdentifierKey??w,isProxy:Boolean(y.WIRIsApplicationProxyKey)}));G.set(_,T);let q=X.get(_);for(let w of T){if(w.isProxy||q.has(w.appId))continue;q.add(w.appId),_.wi.send("_rpc_forwardGetListing:",{WIRApplicationIdentifierKey:w.appId})}}else if(N==="_rpc_applicationConnected:"){let D=B,T=G.get(_)??[];if(!T.find((q)=>q.appId===D.WIRApplicationIdentifierKey))T.push({appId:D.WIRApplicationIdentifierKey,bundleId:D.WIRApplicationBundleIdentifierKey,name:D.WIRApplicationNameKey??D.WIRApplicationBundleIdentifierKey,isProxy:Boolean(D.WIRIsApplicationProxyKey)}),G.set(_,T);if(!D.WIRIsApplicationProxyKey){let q=X.get(_);if(!q.has(D.WIRApplicationIdentifierKey))q.add(D.WIRApplicationIdentifierKey),_.wi.send("_rpc_forwardGetListing:",{WIRApplicationIdentifierKey:D.WIRApplicationIdentifierKey})}}else if(N==="_rpc_applicationDisconnected:"){let D=G.get(_)??[];G.set(_,D.filter((T)=>T.appId!==B.WIRApplicationIdentifierKey)),Y.delete(`${_.id}:${B.WIRApplicationIdentifierKey}`)}else if(N==="_rpc_applicationSentListing:"){let D=B.WIRApplicationIdentifierKey,T=B.WIRListingKey??{},q=new Map;for(let[w,y]of Object.entries(T))q.set(w,{pageId:Number(y.WIRPageIdentifierKey??0),title:y.WIRTitleKey??"",url:y.WIRURLKey??"",type:y.WIRTypeKey??"",connectionId:typeof y.WIRConnectionIdentifierKey==="string"?y.WIRConnectionIdentifierKey:null});Y.set(`${_.id}:${D}`,q)}}),_.wi.send("_rpc_reportIdentifier:",{}),_.wi.send("_rpc_getConnectedApplications:",{});let H=setInterval(()=>{for(let _ of J){let V=G.get(_)??[];for(let N of V){if(N.isProxy)continue;_.wi.send("_rpc_forwardGetListing:",{WIRApplicationIdentifierKey:N.appId})}}},Z2),K=new Map;function W(){let _=[];for(let V of J){let N=G.get(V)??[];for(let B of N){if(B.isProxy)continue;let D=Y.get(`${V.id}:${B.appId}`);if(!D)continue;for(let T of D.values()){let q=!!T.connectionId&&T.connectionId!==V.wi.connection;_.push({targetId:`${V.id}:${B.appId}:${T.pageId}`,source:V,appId:B.appId,appName:B.name,bundleId:B.bundleId,pageId:T.pageId,title:T.title,url:T.url,type:T.type,inUseByOtherInspector:q})}}}return _}let z=crypto.randomUUID(),U=H$({brand:"",version:(_)=>({Browser:"Safari/inspect-webkit","Protocol-Version":"1.3","User-Agent":"Mozilla/5.0 (iPhone; CPU iPhone OS like Mac OS X) AppleWebKit/605.1.15 Safari/inspect-webkit","WebKit-Version":"605.1.15",webSocketDebuggerUrl:`ws://${_}/devtools/browser/${z}`}),listTargets:(_)=>W().map((V)=>z$({reqHost:_,id:V.targetId,description:`${V.source.label}${V.bundleId?` (${V.bundleId})`:""}`,title:V.title||V.appName,url:/^https?:/i.test(V.url)?V.url:"about:blank",type:o6(V.type)}))}),M=new G$.default({noServer:!0}),F=`/devtools/browser/${z}`;U.on("upgrade",(_,V,N)=>{let B=new URL(_.url??"/","http://placeholder");if(console.error(`# ws upgrade: ${B.pathname}`),B.pathname===F){M.handleUpgrade(_,V,N,(T)=>{Q2(T,{listEntries:()=>W().map((q)=>({targetId:q.targetId,type:o6(q.type),title:q.title||q.appName,url:q.url})),createPageSession:(q,w)=>{let y=W().find((k)=>k.targetId===q);if(!y)return null;return A(y,w)}})});return}if(!B.pathname.startsWith("/devtools/page/")){console.error(`# ws upgrade rejected: unknown path ${B.pathname}`),V.destroy();return}let D=decodeURIComponent(B.pathname.slice(15));M.handleUpgrade(_,V,N,(T)=>{I(T,D)})});function A(_,V){let N=crypto.randomUUID(),D=new C4({readyState:1,send:(w)=>V(w)},_.source.wi,_.appId,_.pageId,N);k8(D),K.set(N,D);let T=!!process.env.INSPECT_WEBKIT_DEBUG,q=_.source.wi.subscribe((w)=>{if(w.__selector!=="_rpc_applicationSentData:")return;let y=w.__argument;if(!y)return;if(y.WIRDestinationKey&&y.WIRDestinationKey!==N)return;if(y.WIRApplicationIdentifierKey!==_.appId)return;if(y.WIRPageIdentifierKey!==void 0&&Number(y.WIRPageIdentifierKey)!==_.pageId)return;let k=y.WIRMessageDataKey??y.WIRSocketDataKey;if(!k)return;let b=typeof k==="string"?k:new TextDecoder().decode(k);if(T)console.error(`[cdp] target>> ${b.slice(0,240)}`);D.onMessageFromTarget(b)});return _.source.wi.forwardSocketSetup(_.appId,_.pageId,N),console.error(`# devtools attached: ${_.source.label} :: ${_.appName} :: ${_.title||_.url}`),{onMessageFromTools(w){if(T)console.error(`[cdp] tools>> ${w.slice(0,300)}`);D.onMessageFromTools(w)},close(){q();try{D.wi.forwardDidClose(D.appId,D.pageId,D.senderKey)}catch{}K.delete(D.senderKey)}}}let R=new Map,x=8000;function j(_){let V=R.get(_);if(V)return V;let N=W().find((k)=>k.targetId===_);if(!N)return null;let B=crypto.randomUUID(),T=new C4({readyState:1,send:()=>{}},N.source.wi,N.appId,N.pageId,B);k8(T),K.set(B,T);let q=N.source.wi.subscribe((k)=>{if(k.__selector!=="_rpc_applicationSentData:")return;let b=k.__argument;if(!b)return;if(b.WIRDestinationKey&&b.WIRDestinationKey!==B)return;if(b.WIRApplicationIdentifierKey!==N.appId)return;if(b.WIRPageIdentifierKey!==void 0&&Number(b.WIRPageIdentifierKey)!==N.pageId)return;let c=b.WIRMessageDataKey??b.WIRSocketDataKey;if(!c)return;let E=typeof c==="string"?c:new TextDecoder().decode(c);T.onMessageFromTarget(E)});N.source.wi.forwardSocketSetup(N.appId,N.pageId,B);let w=Promise.race([T.callTarget("DOM.getDocument",{depth:0}).then((k)=>k?.root?.nodeId),new Promise((k,b)=>setTimeout(()=>b(Error("DOM.getDocument timeout")),5000))]),y={cdp:T,rootNodeIdPromise:w,idleTimer:null,close(){if(y.idleTimer)clearTimeout(y.idleTimer);q();try{T.wi.forwardDidClose(T.appId,T.pageId,T.senderKey)}catch{}K.delete(B),R.delete(_)}};return R.set(_,y),w.catch(()=>y.close()),y}function P(_){if(_.idleTimer)clearTimeout(_.idleTimer);_.idleTimer=setTimeout(()=>_.close(),x)}function L(_){if(_){R.get(_)?.close();return}for(let V of R.values())V.close()}async function C(_,V){let N=j(_);if(!N)return;P(N);try{if(V){let B=await N.rootNodeIdPromise;if(!B)return;await N.cdp.callTarget("DOM.highlightNode",{nodeId:B,highlightConfig:{showInfo:!1,contentColor:{r:111,g:168,b:220,a:0.55},paddingColor:{r:147,g:196,b:125,a:0},borderColor:{r:255,g:229,b:153,a:0},marginColor:{r:246,g:178,b:107,a:0}}})}else await N.cdp.callTarget("DOM.hideHighlight",{})}catch{N.close()}}function I(_,V){let N=W().find((q)=>q.targetId===V);if(!N){console.error(`# ws closed: unknown target ${V} (known: ${W().map((q)=>q.targetId).join(", ")||"none"})`),_.close(1011,`unknown target ${V}`);return}let B=A(N,(q)=>{if(_.readyState===1)_.send(q)}),D=!0;_.on("pong",()=>{D=!0});let T=setInterval(()=>{if(!D){try{_.terminate()}catch{}return}D=!1;try{_.ping()}catch{}},15000);_.on("message",(q,w)=>{let y=w?new TextDecoder().decode(q):q.toString();B.onMessageFromTools(y)}),_.on("close",()=>{clearInterval(T),B.close()})}return await M$(U,Z,Q),_$({brand:"safari",host:Z,port:Q}),{stop(){clearInterval(H);for(let _ of R.values())_.close();M.close(),U.close();for(let _ of J)try{_.wi.close(),_.lockdown?.close()}catch{}},getTargets(){return W()},highlightTarget(_,V){return C(_,V)},releaseHighlight(_){L(_)}}}async function Y2(){let[$,Q]=await Promise.all([X2(),V2()]);return[...$,...Q]}async function X2(){let $=[];try{$=await $$()}catch(Z){return console.error(`warn: usbmux: ${Z.message}`),[]}return(await Promise.all($.map(G2))).filter((Z)=>Z!==null)}async function G2($){try{let Q=await Q$($.Properties.SerialNumber),Z=await E4.open($,Q);await Z.startSession();let J=await Z.startService("com.apple.webinspector"),{socket:Y,stream:X}=await Z.connectService(J),G=new Q4(Y,X);return await G.reportIdentifier(),{kind:"device",id:`device:${$.Properties.SerialNumber}`,label:`device:${$.Properties.SerialNumber.slice(0,8)}`,wi:G,lockdown:Z}}catch(Q){return console.error(`warn: device ${$.Properties.SerialNumber}: ${Q.message}`),null}}async function V2(){let $=[];try{$=await J$()}catch(Z){return console.error(`warn: simulator discovery: ${Z.message}`),[]}return(await Promise.all($.map(K2))).filter((Z)=>Z!==null)}async function K2($){try{let{socket:Q,stream:Z}=await Y$($.socketPath),J=new Q4(Q,Z);return await J.reportIdentifier(),{kind:"simulator",id:`sim:${$.pid}`,label:`sim:${$.pid}`,wi:J}}catch(Q){return console.error(`warn: simulator ${$.socketPath}: ${Q.message}`),null}}function o6($){switch($){case"WIRTypeServiceWorker":return"service_worker";case"WIRTypeWorker":case"WIRTypeJavaScript":return"worker";default:return"page"}}class F${url;ws;handlers=new Set;openPromise;constructor($){this.url=$,this.ws=new n6($),this.ws.binaryType="nodebuffer",this.openPromise=new Promise((Q,Z)=>{this.ws.once("open",()=>Q()),this.ws.once("error",(J)=>Z(J))}),this.ws.on("message",(Q,Z)=>{let J=Z?new TextDecoder().decode(Q):Q.toString();for(let Y of this.handlers)Y(J)})}ready(){return this.openPromise}onFrame($){return this.handlers.add($),()=>this.handlers.delete($)}forwardSocketData($,Q,Z,J){if(this.ws.readyState!==n6.OPEN)return;this.ws.send(new TextDecoder().decode(J))}forwardDidClose($,Q,Z){}close(){try{this.ws.close()}catch{}}}async function W2($){let Q=$.port??9223,Z=$.host??"localhost",{upstreams:J}=$,Y=H$({brand:"bun",version:{Browser:"Bun/inspect-webkit","Protocol-Version":"1.3","User-Agent":"Bun (via inspect-webkit)","WebKit-Version":"605.1.15"},listTargets:(H)=>J.map((K)=>z$({reqHost:H,id:encodeURIComponent(K.url),description:K.label??"bun",title:K.label??K.url,url:K.url,type:"node"}))}),X=new G$.default({noServer:!0});Y.on("upgrade",(H,K,W)=>{let z=new URL(H.url??"/","http://placeholder");if(!z.pathname.startsWith("/devtools/page/")){K.destroy();return}let U=decodeURIComponent(z.pathname.slice(15)),M=J.find((F)=>F.url===U);if(!M){K.destroy();return}X.handleUpgrade(H,K,W,(F)=>{G(F,M).catch((A)=>{console.error(`# bun attach failed: ${A.message}`);try{F.close(1011,A.message)}catch{}})})});async function G(H,K){let W=!!process.env.INSPECT_WEBKIT_DEBUG,z=new F$(K.url);await z.ready();let U=crypto.randomUUID(),M=new C4(H,z,"bun",0,U);k8(M);let F=z.onFrame((A)=>{if(W)console.error(`[bun] target>> ${A.slice(0,240)}`);M.onMessageFromTarget(A)});H.on("message",(A,R)=>{let x=R?new TextDecoder().decode(A):A.toString();if(W)console.error(`[bun] tools>> ${x.slice(0,300)}`);M.onMessageFromTools(x)}),H.on("close",()=>{F(),z.close()}),console.error(`# devtools attached: ${K.label??K.url}`)}return await M$(Y,Z,Q),_$({brand:"bun",host:Z,port:Q}),{stop(){X.close(),Y.close()},getTargets(){return J.slice()}}}async function N$(){return $$()}async function z2(){let[$,Q]=await Promise.all([H2(),M2()]);return[...$.flat(),...Q.flat()]}async function H2(){let $=await N$();return Promise.all($.map(_2))}async function M2(){let $=await J$();return Promise.all($.map(F2))}async function _2($){let Q=null;try{return Q=await N2($),await U$(Q.client,{source:"device",udid:$.Properties.SerialNumber,deviceID:$.DeviceID})}catch(Z){return console.error(`warn: ${$.Properties.SerialNumber}: ${Z.message}`),[]}finally{Q?.client.close(),Q?.lockdown.close()}}async function F2($){let Q=null;try{let{socket:Z,stream:J}=await Y$($.socketPath);return Q=new Q4(Z,J),await Q.reportIdentifier(),await U$(Q,{source:"simulator",udid:`sim:${$.pid}`})}catch(Z){return console.error(`warn: simulator (${$.socketPath}): ${Z.message}`),[]}finally{Q?.close()}}async function N2($){let Q=await Q$($.Properties.SerialNumber),Z=await E4.open($,Q);await Z.startSession();let J=await Z.startService("com.apple.webinspector"),{socket:Y,stream:X}=await Z.connectService(J),G=new Q4(Y,X);return await G.reportIdentifier(),{client:G,lockdown:Z}}async function U$($,Q){let Z=(await $.listApplications()).filter((X)=>!X.isProxy),J=await Promise.all(Z.map((X)=>$.getListing(X.appId))),Y=[];for(let X=0;X<Z.length;X++){let G=Z[X];for(let H of J[X])Y.push({...Q,appId:G.appId,appName:G.name??G.bundleId??G.appId,bundleId:G.bundleId,pageId:H.pageId,title:H.title,url:H.url,type:H.type})}return Y}var v7,b7,c6,h7,u7,g7,c7,M0=($,Q,Z)=>{var J=$!=null&&typeof $==="object";if(J){var Y=Q?g7??=new WeakMap:c7??=new WeakMap,X=Y.get($);if(X)return X}Z=$!=null?v7(b7($)):{};let G=Q||!$||!$.__esModule?c6(Z,"default",{value:$,enumerable:!0}):Z;for(let H of h7($))if(!u7.call(G,H))c6(G,H,{get:p7.bind($,H),enumerable:!0});if(J)Y.set($,G);return G},$0=($,Q)=>()=>(Q||$((Q={exports:{}}).exports,Q),Q.exports),a,_0,D4,m7,e0,$4,a6,r6,l7,f8,v8,d7,t6,i7,n7=`<?xml version="1.0" encoding="UTF-8"?>
15
15
  <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
16
16
  <plist version="1.0">
17
- `,d7=`
17
+ `,o7=`
18
18
  </plist>
19
- `,r7=1,t7=8,s7="/var/run/usbmuxd",l6=62078,J0=(...$)=>{if(process.env.INSPECT_WEBKIT_DEBUG)console.error("[lockdown]",...$)},EJ,IJ,xJ,qJ,wJ,SJ,XZ,X$,i6,BZ,LZ,OZ,AZ,jZ,RZ,CZ,wZ=($,Q)=>!!$&&!!Q&&$.startLine===Q.startLine&&$.endLine===Q.endLine&&$.startColumn===Q.startColumn&&$.endColumn===Q.endColumn,yZ=($)=>$&&{name:$.name,value:$.value,text:$.text,implicit:$.implicit,parsedOk:$.parsedOk!==!1,important:!!$.priority,disabled:$.status==="disabled",range:$.range},R0=($)=>$&&{styleSheetId:$.styleId?.styleSheetId,cssText:$.cssText,range:$.range,shorthandEntries:$.shorthandEntries??[],cssProperties:Array.isArray($.cssProperties)?$.cssProperties.map(yZ):[]},kZ,fZ=($)=>$&&{text:$.text,selectors:Array.isArray($.selectors)?$.selectors.map((Q)=>({text:Q.text,range:Q.range??$.range})):[]},p8=($)=>Array.isArray($)?$.map((Q)=>({matchingSelectors:Q.matchingSelectors,rule:S8(Q.rule)})):[],vZ=($)=>Array.isArray($)?$.map((Q)=>({pseudoType:Q.pseudoId,matches:p8(Q.matches)})):[],bZ=($)=>Array.isArray($)?$.map((Q)=>({inlineStyle:R0(Q.inlineStyle),matchedCSSRules:p8(Q.matchedCSSRules)})):[],uZ,gZ=`
19
+ `,e7=1,$Z=8,QZ="/var/run/usbmuxd",d6=62078,J0=(...$)=>{if(process.env.INSPECT_WEBKIT_DEBUG)console.error("[lockdown]",...$)},xJ,qJ,wJ,SJ,yJ,kJ,KZ,G$,n6,AZ,jZ,RZ,CZ,DZ,PZ,TZ,kZ=($,Q)=>!!$&&!!Q&&$.startLine===Q.startLine&&$.endLine===Q.endLine&&$.startColumn===Q.startColumn&&$.endColumn===Q.endColumn,vZ=($)=>$&&{name:$.name,value:$.value,text:$.text,implicit:$.implicit,parsedOk:$.parsedOk!==!1,important:!!$.priority,disabled:$.status==="disabled",range:$.range},C0=($)=>$&&{styleSheetId:$.styleId?.styleSheetId,cssText:$.cssText,range:$.range,shorthandEntries:$.shorthandEntries??[],cssProperties:Array.isArray($.cssProperties)?$.cssProperties.map(vZ):[]},bZ,hZ=($)=>$&&{text:$.text,selectors:Array.isArray($.selectors)?$.selectors.map((Q)=>({text:Q.text,range:Q.range??$.range})):[]},g8=($)=>Array.isArray($)?$.map((Q)=>({matchingSelectors:Q.matchingSelectors,rule:y8(Q.rule)})):[],uZ=($)=>Array.isArray($)?$.map((Q)=>({pseudoType:Q.pseudoId,matches:g8(Q.matches)})):[],pZ=($)=>Array.isArray($)?$.map((Q)=>({inlineStyle:C0(Q.inlineStyle),matchedCSSRules:g8(Q.matchedCSSRules)})):[],cZ,lZ=`
20
20
  function __sd_simulate(p){
21
21
  var el = document.elementFromPoint(p.x, p.y);
22
22
  if (!el) return false;
@@ -31,25 +31,25 @@ function __sd_simulate(p){
31
31
  });
32
32
  el.dispatchEvent(ev);
33
33
  return true;
34
- }`,lZ=65536,nZ,oZ,rZ,eZ=1500;var B$=s$(()=>{y7=Object.create,k7=Object.getPrototypeOf,g6=Object.defineProperty,f7=Object.getOwnPropertyNames,v7=Object.prototype.hasOwnProperty;a=S7(import.meta.url),_0=$0(($,Q)=>{var Z=["nodebuffer","arraybuffer","fragments"],J=typeof Blob<"u";if(J)Z.push("blob");Q.exports={BINARY_TYPES:Z,CLOSE_TIMEOUT:30000,EMPTY_BUFFER:Buffer.alloc(0),GUID:"258EAFA5-E914-47DA-95CA-C5AB0DC85B11",hasBlob:J,kForOnEventAttribute:Symbol("kIsForOnEventAttribute"),kListener:Symbol("kListener"),kStatusCode:Symbol("status-code"),kWebSocket:Symbol("websocket"),NOOP:()=>{}}}),D4=$0(($,Q)=>{var{EMPTY_BUFFER:Z}=_0(),J=Buffer[Symbol.species];function Y(W,z){if(W.length===0)return Z;if(W.length===1)return W[0];let U=Buffer.allocUnsafe(z),M=0;for(let F=0;F<W.length;F++){let A=W[F];U.set(A,M),M+=A.length}if(M<z)return new J(U.buffer,U.byteOffset,M);return U}function X(W,z,U,M,F){for(let A=0;A<F;A++)U[M+A]=W[A]^z[A&3]}function G(W,z){for(let U=0;U<W.length;U++)W[U]^=z[U&3]}function H(W){if(W.length===W.buffer.byteLength)return W.buffer;return W.buffer.slice(W.byteOffset,W.byteOffset+W.length)}function K(W){if(K.readOnly=!0,Buffer.isBuffer(W))return W;let z;if(W instanceof ArrayBuffer)z=new J(W);else if(ArrayBuffer.isView(W))z=new J(W.buffer,W.byteOffset,W.byteLength);else z=Buffer.from(W),K.readOnly=!1;return z}if(Q.exports={concat:Y,mask:X,toArrayBuffer:H,toBuffer:K,unmask:G},!process.env.WS_NO_BUFFER_UTIL)try{let W=(()=>{throw Error("Cannot require module bufferutil")})();Q.exports.mask=function(z,U,M,F,A){if(A<48)X(z,U,M,F,A);else W.mask(z,U,M,F,A)},Q.exports.unmask=function(z,U){if(z.length<32)G(z,U);else W.unmask(z,U)}}catch(W){}}),p7=$0(($,Q)=>{var Z=Symbol("kDone"),J=Symbol("kRun");class Y{constructor(X){this[Z]=()=>{this.pending--,this[J]()},this.concurrency=X||1/0,this.jobs=[],this.pending=0}add(X){this.jobs.push(X),this[J]()}[J](){if(this.pending===this.concurrency)return;if(this.jobs.length){let X=this.jobs.shift();this.pending++,X(this[Z])}}}Q.exports=Y}),e0=$0(($,Q)=>{var Z=a("zlib"),J=D4(),Y=p7(),{kStatusCode:X}=_0(),G=Buffer[Symbol.species],H=Buffer.from([0,0,255,255]),K=Symbol("permessage-deflate"),W=Symbol("total-length"),z=Symbol("callback"),U=Symbol("buffers"),M=Symbol("error"),F;class A{constructor(D){if(this._options=D||{},this._threshold=this._options.threshold!==void 0?this._options.threshold:1024,this._maxPayload=this._options.maxPayload|0,this._isServer=!!this._options.isServer,this._deflate=null,this._inflate=null,this.params=null,!F){let L=this._options.concurrencyLimit!==void 0?this._options.concurrencyLimit:10;F=new Y(L)}}static get extensionName(){return"permessage-deflate"}offer(){let D={};if(this._options.serverNoContextTakeover)D.server_no_context_takeover=!0;if(this._options.clientNoContextTakeover)D.client_no_context_takeover=!0;if(this._options.serverMaxWindowBits)D.server_max_window_bits=this._options.serverMaxWindowBits;if(this._options.clientMaxWindowBits)D.client_max_window_bits=this._options.clientMaxWindowBits;else if(this._options.clientMaxWindowBits==null)D.client_max_window_bits=!0;return D}accept(D){return D=this.normalizeParams(D),this.params=this._isServer?this.acceptAsServer(D):this.acceptAsClient(D),this.params}cleanup(){if(this._inflate)this._inflate.close(),this._inflate=null;if(this._deflate){let D=this._deflate[z];if(this._deflate.close(),this._deflate=null,D)D(Error("The deflate stream was closed while data was being processed"))}}acceptAsServer(D){let L=this._options,C=D.find((I)=>{if(L.serverNoContextTakeover===!1&&I.server_no_context_takeover||I.server_max_window_bits&&(L.serverMaxWindowBits===!1||typeof L.serverMaxWindowBits==="number"&&L.serverMaxWindowBits>I.server_max_window_bits)||typeof L.clientMaxWindowBits==="number"&&!I.client_max_window_bits)return!1;return!0});if(!C)throw Error("None of the extension offers can be accepted");if(L.serverNoContextTakeover)C.server_no_context_takeover=!0;if(L.clientNoContextTakeover)C.client_no_context_takeover=!0;if(typeof L.serverMaxWindowBits==="number")C.server_max_window_bits=L.serverMaxWindowBits;if(typeof L.clientMaxWindowBits==="number")C.client_max_window_bits=L.clientMaxWindowBits;else if(C.client_max_window_bits===!0||L.clientMaxWindowBits===!1)delete C.client_max_window_bits;return C}acceptAsClient(D){let L=D[0];if(this._options.clientNoContextTakeover===!1&&L.client_no_context_takeover)throw Error('Unexpected parameter "client_no_context_takeover"');if(!L.client_max_window_bits){if(typeof this._options.clientMaxWindowBits==="number")L.client_max_window_bits=this._options.clientMaxWindowBits}else if(this._options.clientMaxWindowBits===!1||typeof this._options.clientMaxWindowBits==="number"&&L.client_max_window_bits>this._options.clientMaxWindowBits)throw Error('Unexpected or invalid parameter "client_max_window_bits"');return L}normalizeParams(D){return D.forEach((L)=>{Object.keys(L).forEach((C)=>{let I=L[C];if(I.length>1)throw Error(`Parameter "${C}" must have only a single value`);if(I=I[0],C==="client_max_window_bits"){if(I!==!0){let _=+I;if(!Number.isInteger(_)||_<8||_>15)throw TypeError(`Invalid value for parameter "${C}": ${I}`);I=_}else if(!this._isServer)throw TypeError(`Invalid value for parameter "${C}": ${I}`)}else if(C==="server_max_window_bits"){let _=+I;if(!Number.isInteger(_)||_<8||_>15)throw TypeError(`Invalid value for parameter "${C}": ${I}`);I=_}else if(C==="client_no_context_takeover"||C==="server_no_context_takeover"){if(I!==!0)throw TypeError(`Invalid value for parameter "${C}": ${I}`)}else throw Error(`Unknown parameter "${C}"`);L[C]=I})}),D}decompress(D,L,C){F.add((I)=>{this._decompress(D,L,(_,V)=>{I(),C(_,V)})})}compress(D,L,C){F.add((I)=>{this._compress(D,L,(_,V)=>{I(),C(_,V)})})}_decompress(D,L,C){let I=this._isServer?"client":"server";if(!this._inflate){let _=`${I}_max_window_bits`,V=typeof this.params[_]!=="number"?Z.Z_DEFAULT_WINDOWBITS:this.params[_];this._inflate=Z.createInflateRaw({...this._options.zlibInflateOptions,windowBits:V}),this._inflate[K]=this,this._inflate[W]=0,this._inflate[U]=[],this._inflate.on("error",j),this._inflate.on("data",x)}if(this._inflate[z]=C,this._inflate.write(D),L)this._inflate.write(H);this._inflate.flush(()=>{let _=this._inflate[M];if(_){this._inflate.close(),this._inflate=null,C(_);return}let V=J.concat(this._inflate[U],this._inflate[W]);if(this._inflate._readableState.endEmitted)this._inflate.close(),this._inflate=null;else if(this._inflate[W]=0,this._inflate[U]=[],L&&this.params[`${I}_no_context_takeover`])this._inflate.reset();C(null,V)})}_compress(D,L,C){let I=this._isServer?"server":"client";if(!this._deflate){let _=`${I}_max_window_bits`,V=typeof this.params[_]!=="number"?Z.Z_DEFAULT_WINDOWBITS:this.params[_];this._deflate=Z.createDeflateRaw({...this._options.zlibDeflateOptions,windowBits:V}),this._deflate[W]=0,this._deflate[U]=[],this._deflate.on("data",R)}this._deflate[z]=C,this._deflate.write(D),this._deflate.flush(Z.Z_SYNC_FLUSH,()=>{if(!this._deflate)return;let _=J.concat(this._deflate[U],this._deflate[W]);if(L)_=new G(_.buffer,_.byteOffset,_.length-4);if(this._deflate[z]=null,this._deflate[W]=0,this._deflate[U]=[],L&&this.params[`${I}_no_context_takeover`])this._deflate.reset();C(null,_)})}}Q.exports=A;function R(D){this[U].push(D),this[W]+=D.length}function x(D){if(this[W]+=D.length,this[K]._maxPayload<1||this[W]<=this[K]._maxPayload){this[U].push(D);return}this[M]=RangeError("Max payload size exceeded"),this[M].code="WS_ERR_UNSUPPORTED_MESSAGE_LENGTH",this[M][X]=1009,this.removeListener("data",x),this.reset()}function j(D){if(this[K]._inflate=null,this[M]){this[z](this[M]);return}D[X]=1007,this[z](D)}}),$4=$0(($,Q)=>{var{isUtf8:Z}=a("buffer"),{hasBlob:J}=_0(),Y=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,1,0,0,1,1,0,1,1,0,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,0,1,0];function X(K){return K>=1000&&K<=1014&&K!==1004&&K!==1005&&K!==1006||K>=3000&&K<=4999}function G(K){let W=K.length,z=0;while(z<W)if((K[z]&128)===0)z++;else if((K[z]&224)===192){if(z+1===W||(K[z+1]&192)!==128||(K[z]&254)===192)return!1;z+=2}else if((K[z]&240)===224){if(z+2>=W||(K[z+1]&192)!==128||(K[z+2]&192)!==128||K[z]===224&&(K[z+1]&224)===128||K[z]===237&&(K[z+1]&224)===160)return!1;z+=3}else if((K[z]&248)===240){if(z+3>=W||(K[z+1]&192)!==128||(K[z+2]&192)!==128||(K[z+3]&192)!==128||K[z]===240&&(K[z+1]&240)===128||K[z]===244&&K[z+1]>143||K[z]>244)return!1;z+=4}else return!1;return!0}function H(K){return J&&typeof K==="object"&&typeof K.arrayBuffer==="function"&&typeof K.type==="string"&&typeof K.stream==="function"&&(K[Symbol.toStringTag]==="Blob"||K[Symbol.toStringTag]==="File")}if(Q.exports={isBlob:H,isValidStatusCode:X,isValidUTF8:G,tokenChars:Y},Z)Q.exports.isValidUTF8=function(K){return K.length<24?G(K):Z(K)};else if(!process.env.WS_NO_UTF_8_VALIDATE)try{let K=(()=>{throw Error("Cannot require module utf-8-validate")})();Q.exports.isValidUTF8=function(W){return W.length<32?G(W):K(W)}}catch(K){}}),o6=$0(($,Q)=>{var{Writable:Z}=a("stream"),J=e0(),{BINARY_TYPES:Y,EMPTY_BUFFER:X,kStatusCode:G,kWebSocket:H}=_0(),{concat:K,toArrayBuffer:W,unmask:z}=D4(),{isValidStatusCode:U,isValidUTF8:M}=$4(),F=Buffer[Symbol.species],A=0,R=1,x=2,j=3,D=4,L=5,C=6;class I extends Z{constructor(_={}){super();this._allowSynchronousEvents=_.allowSynchronousEvents!==void 0?_.allowSynchronousEvents:!0,this._binaryType=_.binaryType||Y[0],this._extensions=_.extensions||{},this._isServer=!!_.isServer,this._maxPayload=_.maxPayload|0,this._skipUTF8Validation=!!_.skipUTF8Validation,this[H]=void 0,this._bufferedBytes=0,this._buffers=[],this._compressed=!1,this._payloadLength=0,this._mask=void 0,this._fragmented=0,this._masked=!1,this._fin=!1,this._opcode=0,this._totalPayloadLength=0,this._messageLength=0,this._fragments=[],this._errored=!1,this._loop=!1,this._state=A}_write(_,V,N){if(this._opcode===8&&this._state==A)return N();this._bufferedBytes+=_.length,this._buffers.push(_),this.startLoop(N)}consume(_){if(this._bufferedBytes-=_,_===this._buffers[0].length)return this._buffers.shift();if(_<this._buffers[0].length){let N=this._buffers[0];return this._buffers[0]=new F(N.buffer,N.byteOffset+_,N.length-_),new F(N.buffer,N.byteOffset,_)}let V=Buffer.allocUnsafe(_);do{let N=this._buffers[0],B=V.length-_;if(_>=N.length)V.set(this._buffers.shift(),B);else V.set(new Uint8Array(N.buffer,N.byteOffset,_),B),this._buffers[0]=new F(N.buffer,N.byteOffset+_,N.length-_);_-=N.length}while(_>0);return V}startLoop(_){this._loop=!0;do switch(this._state){case A:this.getInfo(_);break;case R:this.getPayloadLength16(_);break;case x:this.getPayloadLength64(_);break;case j:this.getMask();break;case D:this.getData(_);break;case L:case C:this._loop=!1;return}while(this._loop);if(!this._errored)_()}getInfo(_){if(this._bufferedBytes<2){this._loop=!1;return}let V=this.consume(2);if((V[0]&48)!==0){let B=this.createError(RangeError,"RSV2 and RSV3 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_2_3");_(B);return}let N=(V[0]&64)===64;if(N&&!this._extensions[J.extensionName]){let B=this.createError(RangeError,"RSV1 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_1");_(B);return}if(this._fin=(V[0]&128)===128,this._opcode=V[0]&15,this._payloadLength=V[1]&127,this._opcode===0){if(N){let B=this.createError(RangeError,"RSV1 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_1");_(B);return}if(!this._fragmented){let B=this.createError(RangeError,"invalid opcode 0",!0,1002,"WS_ERR_INVALID_OPCODE");_(B);return}this._opcode=this._fragmented}else if(this._opcode===1||this._opcode===2){if(this._fragmented){let B=this.createError(RangeError,`invalid opcode ${this._opcode}`,!0,1002,"WS_ERR_INVALID_OPCODE");_(B);return}this._compressed=N}else if(this._opcode>7&&this._opcode<11){if(!this._fin){let B=this.createError(RangeError,"FIN must be set",!0,1002,"WS_ERR_EXPECTED_FIN");_(B);return}if(N){let B=this.createError(RangeError,"RSV1 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_1");_(B);return}if(this._payloadLength>125||this._opcode===8&&this._payloadLength===1){let B=this.createError(RangeError,`invalid payload length ${this._payloadLength}`,!0,1002,"WS_ERR_INVALID_CONTROL_PAYLOAD_LENGTH");_(B);return}}else{let B=this.createError(RangeError,`invalid opcode ${this._opcode}`,!0,1002,"WS_ERR_INVALID_OPCODE");_(B);return}if(!this._fin&&!this._fragmented)this._fragmented=this._opcode;if(this._masked=(V[1]&128)===128,this._isServer){if(!this._masked){let B=this.createError(RangeError,"MASK must be set",!0,1002,"WS_ERR_EXPECTED_MASK");_(B);return}}else if(this._masked){let B=this.createError(RangeError,"MASK must be clear",!0,1002,"WS_ERR_UNEXPECTED_MASK");_(B);return}if(this._payloadLength===126)this._state=R;else if(this._payloadLength===127)this._state=x;else this.haveLength(_)}getPayloadLength16(_){if(this._bufferedBytes<2){this._loop=!1;return}this._payloadLength=this.consume(2).readUInt16BE(0),this.haveLength(_)}getPayloadLength64(_){if(this._bufferedBytes<8){this._loop=!1;return}let V=this.consume(8),N=V.readUInt32BE(0);if(N>Math.pow(2,21)-1){let B=this.createError(RangeError,"Unsupported WebSocket frame: payload length > 2^53 - 1",!1,1009,"WS_ERR_UNSUPPORTED_DATA_PAYLOAD_LENGTH");_(B);return}this._payloadLength=N*Math.pow(2,32)+V.readUInt32BE(4),this.haveLength(_)}haveLength(_){if(this._payloadLength&&this._opcode<8){if(this._totalPayloadLength+=this._payloadLength,this._totalPayloadLength>this._maxPayload&&this._maxPayload>0){let V=this.createError(RangeError,"Max payload size exceeded",!1,1009,"WS_ERR_UNSUPPORTED_MESSAGE_LENGTH");_(V);return}}if(this._masked)this._state=j;else this._state=D}getMask(){if(this._bufferedBytes<4){this._loop=!1;return}this._mask=this.consume(4),this._state=D}getData(_){let V=X;if(this._payloadLength){if(this._bufferedBytes<this._payloadLength){this._loop=!1;return}if(V=this.consume(this._payloadLength),this._masked&&(this._mask[0]|this._mask[1]|this._mask[2]|this._mask[3])!==0)z(V,this._mask)}if(this._opcode>7){this.controlMessage(V,_);return}if(this._compressed){this._state=L,this.decompress(V,_);return}if(V.length)this._messageLength=this._totalPayloadLength,this._fragments.push(V);this.dataMessage(_)}decompress(_,V){this._extensions[J.extensionName].decompress(_,this._fin,(B,P)=>{if(B)return V(B);if(P.length){if(this._messageLength+=P.length,this._messageLength>this._maxPayload&&this._maxPayload>0){let T=this.createError(RangeError,"Max payload size exceeded",!1,1009,"WS_ERR_UNSUPPORTED_MESSAGE_LENGTH");V(T);return}this._fragments.push(P)}if(this.dataMessage(V),this._state===A)this.startLoop(V)})}dataMessage(_){if(!this._fin){this._state=A;return}let V=this._messageLength,N=this._fragments;if(this._totalPayloadLength=0,this._messageLength=0,this._fragmented=0,this._fragments=[],this._opcode===2){let B;if(this._binaryType==="nodebuffer")B=K(N,V);else if(this._binaryType==="arraybuffer")B=W(K(N,V));else if(this._binaryType==="blob")B=new Blob(N);else B=N;if(this._allowSynchronousEvents)this.emit("message",B,!0),this._state=A;else this._state=C,setImmediate(()=>{this.emit("message",B,!0),this._state=A,this.startLoop(_)})}else{let B=K(N,V);if(!this._skipUTF8Validation&&!M(B)){let P=this.createError(Error,"invalid UTF-8 sequence",!0,1007,"WS_ERR_INVALID_UTF8");_(P);return}if(this._state===L||this._allowSynchronousEvents)this.emit("message",B,!1),this._state=A;else this._state=C,setImmediate(()=>{this.emit("message",B,!1),this._state=A,this.startLoop(_)})}}controlMessage(_,V){if(this._opcode===8){if(_.length===0)this._loop=!1,this.emit("conclude",1005,X),this.end();else{let N=_.readUInt16BE(0);if(!U(N)){let P=this.createError(RangeError,`invalid status code ${N}`,!0,1002,"WS_ERR_INVALID_CLOSE_CODE");V(P);return}let B=new F(_.buffer,_.byteOffset+2,_.length-2);if(!this._skipUTF8Validation&&!M(B)){let P=this.createError(Error,"invalid UTF-8 sequence",!0,1007,"WS_ERR_INVALID_UTF8");V(P);return}this._loop=!1,this.emit("conclude",N,B),this.end()}this._state=A;return}if(this._allowSynchronousEvents)this.emit(this._opcode===9?"ping":"pong",_),this._state=A;else this._state=C,setImmediate(()=>{this.emit(this._opcode===9?"ping":"pong",_),this._state=A,this.startLoop(V)})}createError(_,V,N,B,P){this._loop=!1,this._errored=!0;let T=new _(N?`Invalid WebSocket frame: ${V}`:V);return Error.captureStackTrace(T,this.createError),T.code=P,T[G]=B,T}}Q.exports=I}),a6=$0(($,Q)=>{var{Duplex:Z}=a("stream"),{randomFillSync:J}=a("crypto"),Y=e0(),{EMPTY_BUFFER:X,kWebSocket:G,NOOP:H}=_0(),{isBlob:K,isValidStatusCode:W}=$4(),{mask:z,toBuffer:U}=D4(),M=Symbol("kByteLength"),F=Buffer.alloc(4),A=8192,R,x=A,j=0,D=1,L=2;class C{constructor(V,N,B){if(this._extensions=N||{},B)this._generateMask=B,this._maskBuffer=Buffer.alloc(4);this._socket=V,this._firstFragment=!0,this._compress=!1,this._bufferedBytes=0,this._queue=[],this._state=j,this.onerror=H,this[G]=void 0}static frame(V,N){let B,P=!1,T=2,q=!1;if(N.mask){if(B=N.maskBuffer||F,N.generateMask)N.generateMask(B);else{if(x===A){if(R===void 0)R=Buffer.alloc(A);J(R,0,A),x=0}B[0]=R[x++],B[1]=R[x++],B[2]=R[x++],B[3]=R[x++]}q=(B[0]|B[1]|B[2]|B[3])===0,T=6}let S;if(typeof V==="string")if((!N.mask||q)&&N[M]!==void 0)S=N[M];else V=Buffer.from(V),S=V.length;else S=V.length,P=N.mask&&N.readOnly&&!q;let y=S;if(S>=65536)T+=8,y=127;else if(S>125)T+=2,y=126;let k=Buffer.allocUnsafe(P?S+T:T);if(k[0]=N.fin?N.opcode|128:N.opcode,N.rsv1)k[0]|=64;if(k[1]=y,y===126)k.writeUInt16BE(S,2);else if(y===127)k[2]=k[3]=0,k.writeUIntBE(S,4,6);if(!N.mask)return[k,V];if(k[1]|=128,k[T-4]=B[0],k[T-3]=B[1],k[T-2]=B[2],k[T-1]=B[3],q)return[k,V];if(P)return z(V,B,k,T,S),[k];return z(V,B,V,0,S),[k,V]}close(V,N,B,P){let T;if(V===void 0)T=X;else if(typeof V!=="number"||!W(V))throw TypeError("First argument must be a valid error code number");else if(N===void 0||!N.length)T=Buffer.allocUnsafe(2),T.writeUInt16BE(V,0);else{let S=Buffer.byteLength(N);if(S>123)throw RangeError("The message must not be greater than 123 bytes");if(T=Buffer.allocUnsafe(2+S),T.writeUInt16BE(V,0),typeof N==="string")T.write(N,2);else T.set(N,2)}let q={[M]:T.length,fin:!0,generateMask:this._generateMask,mask:B,maskBuffer:this._maskBuffer,opcode:8,readOnly:!1,rsv1:!1};if(this._state!==j)this.enqueue([this.dispatch,T,!1,q,P]);else this.sendFrame(C.frame(T,q),P)}ping(V,N,B){let P,T;if(typeof V==="string")P=Buffer.byteLength(V),T=!1;else if(K(V))P=V.size,T=!1;else V=U(V),P=V.length,T=U.readOnly;if(P>125)throw RangeError("The data size must not be greater than 125 bytes");let q={[M]:P,fin:!0,generateMask:this._generateMask,mask:N,maskBuffer:this._maskBuffer,opcode:9,readOnly:T,rsv1:!1};if(K(V))if(this._state!==j)this.enqueue([this.getBlobData,V,!1,q,B]);else this.getBlobData(V,!1,q,B);else if(this._state!==j)this.enqueue([this.dispatch,V,!1,q,B]);else this.sendFrame(C.frame(V,q),B)}pong(V,N,B){let P,T;if(typeof V==="string")P=Buffer.byteLength(V),T=!1;else if(K(V))P=V.size,T=!1;else V=U(V),P=V.length,T=U.readOnly;if(P>125)throw RangeError("The data size must not be greater than 125 bytes");let q={[M]:P,fin:!0,generateMask:this._generateMask,mask:N,maskBuffer:this._maskBuffer,opcode:10,readOnly:T,rsv1:!1};if(K(V))if(this._state!==j)this.enqueue([this.getBlobData,V,!1,q,B]);else this.getBlobData(V,!1,q,B);else if(this._state!==j)this.enqueue([this.dispatch,V,!1,q,B]);else this.sendFrame(C.frame(V,q),B)}send(V,N,B){let P=this._extensions[Y.extensionName],T=N.binary?2:1,q=N.compress,S,y;if(typeof V==="string")S=Buffer.byteLength(V),y=!1;else if(K(V))S=V.size,y=!1;else V=U(V),S=V.length,y=U.readOnly;if(this._firstFragment){if(this._firstFragment=!1,q&&P&&P.params[P._isServer?"server_no_context_takeover":"client_no_context_takeover"])q=S>=P._threshold;this._compress=q}else q=!1,T=0;if(N.fin)this._firstFragment=!0;let k={[M]:S,fin:N.fin,generateMask:this._generateMask,mask:N.mask,maskBuffer:this._maskBuffer,opcode:T,readOnly:y,rsv1:q};if(K(V))if(this._state!==j)this.enqueue([this.getBlobData,V,this._compress,k,B]);else this.getBlobData(V,this._compress,k,B);else if(this._state!==j)this.enqueue([this.dispatch,V,this._compress,k,B]);else this.dispatch(V,this._compress,k,B)}getBlobData(V,N,B,P){this._bufferedBytes+=B[M],this._state=L,V.arrayBuffer().then((T)=>{if(this._socket.destroyed){let S=Error("The socket was closed while the blob was being read");process.nextTick(I,this,S,P);return}this._bufferedBytes-=B[M];let q=U(T);if(!N)this._state=j,this.sendFrame(C.frame(q,B),P),this.dequeue();else this.dispatch(q,N,B,P)}).catch((T)=>{process.nextTick(_,this,T,P)})}dispatch(V,N,B,P){if(!N){this.sendFrame(C.frame(V,B),P);return}let T=this._extensions[Y.extensionName];this._bufferedBytes+=B[M],this._state=D,T.compress(V,B.fin,(q,S)=>{if(this._socket.destroyed){let y=Error("The socket was closed while data was being compressed");I(this,y,P);return}this._bufferedBytes-=B[M],this._state=j,B.readOnly=!1,this.sendFrame(C.frame(S,B),P),this.dequeue()})}dequeue(){while(this._state===j&&this._queue.length){let V=this._queue.shift();this._bufferedBytes-=V[3][M],Reflect.apply(V[0],this,V.slice(1))}}enqueue(V){this._bufferedBytes+=V[3][M],this._queue.push(V)}sendFrame(V,N){if(V.length===2)this._socket.cork(),this._socket.write(V[0]),this._socket.write(V[1],N),this._socket.uncork();else this._socket.write(V[0],N)}}Q.exports=C;function I(V,N,B){if(typeof B==="function")B(N);for(let P=0;P<V._queue.length;P++){let T=V._queue[P],q=T[T.length-1];if(typeof q==="function")q(N)}}function _(V,N,B){I(V,N,B),V.onerror(N)}}),g7=$0(($,Q)=>{var{kForOnEventAttribute:Z,kListener:J}=_0(),Y=Symbol("kCode"),X=Symbol("kData"),G=Symbol("kError"),H=Symbol("kMessage"),K=Symbol("kReason"),W=Symbol("kTarget"),z=Symbol("kType"),U=Symbol("kWasClean");class M{constructor(D){this[W]=null,this[z]=D}get target(){return this[W]}get type(){return this[z]}}Object.defineProperty(M.prototype,"target",{enumerable:!0}),Object.defineProperty(M.prototype,"type",{enumerable:!0});class F extends M{constructor(D,L={}){super(D);this[Y]=L.code===void 0?0:L.code,this[K]=L.reason===void 0?"":L.reason,this[U]=L.wasClean===void 0?!1:L.wasClean}get code(){return this[Y]}get reason(){return this[K]}get wasClean(){return this[U]}}Object.defineProperty(F.prototype,"code",{enumerable:!0}),Object.defineProperty(F.prototype,"reason",{enumerable:!0}),Object.defineProperty(F.prototype,"wasClean",{enumerable:!0});class A extends M{constructor(D,L={}){super(D);this[G]=L.error===void 0?null:L.error,this[H]=L.message===void 0?"":L.message}get error(){return this[G]}get message(){return this[H]}}Object.defineProperty(A.prototype,"error",{enumerable:!0}),Object.defineProperty(A.prototype,"message",{enumerable:!0});class R extends M{constructor(D,L={}){super(D);this[X]=L.data===void 0?null:L.data}get data(){return this[X]}}Object.defineProperty(R.prototype,"data",{enumerable:!0});var x={addEventListener(D,L,C={}){for(let _ of this.listeners(D))if(!C[Z]&&_[J]===L&&!_[Z])return;let I;if(D==="message")I=function(V,N){let B=new R("message",{data:N?V:V.toString()});B[W]=this,j(L,this,B)};else if(D==="close")I=function(V,N){let B=new F("close",{code:V,reason:N.toString(),wasClean:this._closeFrameReceived&&this._closeFrameSent});B[W]=this,j(L,this,B)};else if(D==="error")I=function(V){let N=new A("error",{error:V,message:V.message});N[W]=this,j(L,this,N)};else if(D==="open")I=function(){let V=new M("open");V[W]=this,j(L,this,V)};else return;if(I[Z]=!!C[Z],I[J]=L,C.once)this.once(D,I);else this.on(D,I)},removeEventListener(D,L){for(let C of this.listeners(D))if(C[J]===L&&!C[Z]){this.removeListener(D,C);break}}};Q.exports={CloseEvent:F,ErrorEvent:A,Event:M,EventTarget:x,MessageEvent:R};function j(D,L,C){if(typeof D==="object"&&D.handleEvent)D.handleEvent.call(D,C);else D.call(L,C)}}),k8=$0(($,Q)=>{var{tokenChars:Z}=$4();function J(G,H,K){if(G[H]===void 0)G[H]=[K];else G[H].push(K)}function Y(G){let H=Object.create(null),K=Object.create(null),W=!1,z=!1,U=!1,M,F,A=-1,R=-1,x=-1,j=0;for(;j<G.length;j++)if(R=G.charCodeAt(j),M===void 0)if(x===-1&&Z[R]===1){if(A===-1)A=j}else if(j!==0&&(R===32||R===9)){if(x===-1&&A!==-1)x=j}else if(R===59||R===44){if(A===-1)throw SyntaxError(`Unexpected character at index ${j}`);if(x===-1)x=j;let L=G.slice(A,x);if(R===44)J(H,L,K),K=Object.create(null);else M=L;A=x=-1}else throw SyntaxError(`Unexpected character at index ${j}`);else if(F===void 0)if(x===-1&&Z[R]===1){if(A===-1)A=j}else if(R===32||R===9){if(x===-1&&A!==-1)x=j}else if(R===59||R===44){if(A===-1)throw SyntaxError(`Unexpected character at index ${j}`);if(x===-1)x=j;if(J(K,G.slice(A,x),!0),R===44)J(H,M,K),K=Object.create(null),M=void 0;A=x=-1}else if(R===61&&A!==-1&&x===-1)F=G.slice(A,j),A=x=-1;else throw SyntaxError(`Unexpected character at index ${j}`);else if(z){if(Z[R]!==1)throw SyntaxError(`Unexpected character at index ${j}`);if(A===-1)A=j;else if(!W)W=!0;z=!1}else if(U)if(Z[R]===1){if(A===-1)A=j}else if(R===34&&A!==-1)U=!1,x=j;else if(R===92)z=!0;else throw SyntaxError(`Unexpected character at index ${j}`);else if(R===34&&G.charCodeAt(j-1)===61)U=!0;else if(x===-1&&Z[R]===1){if(A===-1)A=j}else if(A!==-1&&(R===32||R===9)){if(x===-1)x=j}else if(R===59||R===44){if(A===-1)throw SyntaxError(`Unexpected character at index ${j}`);if(x===-1)x=j;let L=G.slice(A,x);if(W)L=L.replace(/\\/g,""),W=!1;if(J(K,F,L),R===44)J(H,M,K),K=Object.create(null),M=void 0;F=void 0,A=x=-1}else throw SyntaxError(`Unexpected character at index ${j}`);if(A===-1||U||R===32||R===9)throw SyntaxError("Unexpected end of input");if(x===-1)x=j;let D=G.slice(A,x);if(M===void 0)J(H,D,K);else{if(F===void 0)J(K,D,!0);else if(W)J(K,F,D.replace(/\\/g,""));else J(K,F,D);J(H,M,K)}return H}function X(G){return Object.keys(G).map((H)=>{let K=G[H];if(!Array.isArray(K))K=[K];return K.map((W)=>{return[H].concat(Object.keys(W).map((z)=>{let U=W[z];if(!Array.isArray(U))U=[U];return U.map((M)=>M===!0?z:`${z}=${M}`).join("; ")})).join("; ")}).join(", ")}).join(", ")}Q.exports={format:X,parse:Y}}),f8=$0(($,Q)=>{var Z=a("events"),J=a("https"),Y=a("http"),X=a("net"),G=a("tls"),{randomBytes:H,createHash:K}=a("crypto"),{Duplex:W,Readable:z}=a("stream"),{URL:U}=a("url"),M=e0(),F=o6(),A=a6(),{isBlob:R}=$4(),{BINARY_TYPES:x,CLOSE_TIMEOUT:j,EMPTY_BUFFER:D,GUID:L,kForOnEventAttribute:C,kListener:I,kStatusCode:_,kWebSocket:V,NOOP:N}=_0(),{EventTarget:{addEventListener:B,removeEventListener:P}}=g7(),{format:T,parse:q}=k8(),{toBuffer:S}=D4(),y=Symbol("kAborted"),k=[8,13],b=["CONNECTING","OPEN","CLOSING","CLOSED"],c=/^[!#$%&'*+\-.0-9A-Z^_`|a-z~]+$/;class E extends Z{constructor(O,w,h){super();if(this._binaryType=x[0],this._closeCode=1006,this._closeFrameReceived=!1,this._closeFrameSent=!1,this._closeMessage=D,this._closeTimer=null,this._errorEmitted=!1,this._extensions={},this._paused=!1,this._protocol="",this._readyState=E.CONNECTING,this._receiver=null,this._sender=null,this._socket=null,O!==null){if(this._bufferedAmount=0,this._isServer=!1,this._redirects=0,w===void 0)w=[];else if(!Array.isArray(w))if(typeof w==="object"&&w!==null)h=w,w=[];else w=[w];u(this,O,w,h)}else this._autoPong=h.autoPong,this._closeTimeout=h.closeTimeout,this._isServer=!0}get binaryType(){return this._binaryType}set binaryType(O){if(!x.includes(O))return;if(this._binaryType=O,this._receiver)this._receiver._binaryType=O}get bufferedAmount(){if(!this._socket)return this._bufferedAmount;return this._socket._writableState.length+this._sender._bufferedBytes}get extensions(){return Object.keys(this._extensions).join()}get isPaused(){return this._paused}get onclose(){return null}get onerror(){return null}get onopen(){return null}get onmessage(){return null}get protocol(){return this._protocol}get readyState(){return this._readyState}get url(){return this._url}setSocket(O,w,h){let p=new F({allowSynchronousEvents:h.allowSynchronousEvents,binaryType:this.binaryType,extensions:this._extensions,isServer:this._isServer,maxPayload:h.maxPayload,skipUTF8Validation:h.skipUTF8Validation}),f=new A(O,this._extensions,h.generateMask);if(this._receiver=p,this._sender=f,this._socket=O,p[V]=this,f[V]=this,O[V]=this,p.on("conclude",u$),p.on("drain",p$),p.on("error",g$),p.on("message",c$),p.on("ping",m$),p.on("pong",l$),f.onerror=d$,O.setTimeout)O.setTimeout(0);if(O.setNoDelay)O.setNoDelay();if(w.length>0)O.unshift(w);O.on("close",s8),O.on("data",G4),O.on("end",e8),O.on("error",$9),this._readyState=E.OPEN,this.emit("open")}emitClose(){if(!this._socket){this._readyState=E.CLOSED,this.emit("close",this._closeCode,this._closeMessage);return}if(this._extensions[M.extensionName])this._extensions[M.extensionName].cleanup();this._receiver.removeAllListeners(),this._readyState=E.CLOSED,this.emit("close",this._closeCode,this._closeMessage)}close(O,w){if(this.readyState===E.CLOSED)return;if(this.readyState===E.CONNECTING){e(this,this._req,"WebSocket was closed before the connection was established");return}if(this.readyState===E.CLOSING){if(this._closeFrameSent&&(this._closeFrameReceived||this._receiver._writableState.errorEmitted))this._socket.end();return}this._readyState=E.CLOSING,this._sender.close(O,w,!this._isServer,(h)=>{if(h)return;if(this._closeFrameSent=!0,this._closeFrameReceived||this._receiver._writableState.errorEmitted)this._socket.end()}),t8(this)}pause(){if(this.readyState===E.CONNECTING||this.readyState===E.CLOSED)return;this._paused=!0,this._socket.pause()}ping(O,w,h){if(this.readyState===E.CONNECTING)throw Error("WebSocket is not open: readyState 0 (CONNECTING)");if(typeof O==="function")h=O,O=w=void 0;else if(typeof w==="function")h=w,w=void 0;if(typeof O==="number")O=O.toString();if(this.readyState!==E.OPEN){w4(this,O,h);return}if(w===void 0)w=!this._isServer;this._sender.ping(O||D,w,h)}pong(O,w,h){if(this.readyState===E.CONNECTING)throw Error("WebSocket is not open: readyState 0 (CONNECTING)");if(typeof O==="function")h=O,O=w=void 0;else if(typeof w==="function")h=w,w=void 0;if(typeof O==="number")O=O.toString();if(this.readyState!==E.OPEN){w4(this,O,h);return}if(w===void 0)w=!this._isServer;this._sender.pong(O||D,w,h)}resume(){if(this.readyState===E.CONNECTING||this.readyState===E.CLOSED)return;if(this._paused=!1,!this._receiver._writableState.needDrain)this._socket.resume()}send(O,w,h){if(this.readyState===E.CONNECTING)throw Error("WebSocket is not open: readyState 0 (CONNECTING)");if(typeof w==="function")h=w,w={};if(typeof O==="number")O=O.toString();if(this.readyState!==E.OPEN){w4(this,O,h);return}let p={binary:typeof O!=="string",mask:!this._isServer,compress:!0,fin:!0,...w};if(!this._extensions[M.extensionName])p.compress=!1;this._sender.send(O||D,p,h)}terminate(){if(this.readyState===E.CLOSED)return;if(this.readyState===E.CONNECTING){e(this,this._req,"WebSocket was closed before the connection was established");return}if(this._socket)this._readyState=E.CLOSING,this._socket.destroy()}}Object.defineProperty(E,"CONNECTING",{enumerable:!0,value:b.indexOf("CONNECTING")}),Object.defineProperty(E.prototype,"CONNECTING",{enumerable:!0,value:b.indexOf("CONNECTING")}),Object.defineProperty(E,"OPEN",{enumerable:!0,value:b.indexOf("OPEN")}),Object.defineProperty(E.prototype,"OPEN",{enumerable:!0,value:b.indexOf("OPEN")}),Object.defineProperty(E,"CLOSING",{enumerable:!0,value:b.indexOf("CLOSING")}),Object.defineProperty(E.prototype,"CLOSING",{enumerable:!0,value:b.indexOf("CLOSING")}),Object.defineProperty(E,"CLOSED",{enumerable:!0,value:b.indexOf("CLOSED")}),Object.defineProperty(E.prototype,"CLOSED",{enumerable:!0,value:b.indexOf("CLOSED")}),["binaryType","bufferedAmount","extensions","isPaused","protocol","readyState","url"].forEach((O)=>{Object.defineProperty(E.prototype,O,{enumerable:!0})}),["open","error","close","message"].forEach((O)=>{Object.defineProperty(E.prototype,`on${O}`,{enumerable:!0,get(){for(let w of this.listeners(O))if(w[C])return w[I];return null},set(w){for(let h of this.listeners(O))if(h[C]){this.removeListener(O,h);break}if(typeof w!=="function")return;this.addEventListener(O,w,{[C]:!0})}})}),E.prototype.addEventListener=B,E.prototype.removeEventListener=P,Q.exports=E;function u(O,w,h,p){let f={allowSynchronousEvents:!0,autoPong:!0,closeTimeout:j,protocolVersion:k[1],maxPayload:104857600,skipUTF8Validation:!1,perMessageDeflate:!0,followRedirects:!1,maxRedirects:10,...p,socketPath:void 0,hostname:void 0,protocol:void 0,timeout:void 0,method:"GET",host:void 0,path:void 0,port:void 0};if(O._autoPong=f.autoPong,O._closeTimeout=f.closeTimeout,!k.includes(f.protocolVersion))throw RangeError(`Unsupported protocol version: ${f.protocolVersion} (supported versions: ${k.join(", ")})`);let l;if(w instanceof U)l=w;else try{l=new U(w)}catch{throw SyntaxError(`Invalid URL: ${w}`)}if(l.protocol==="http:")l.protocol="ws:";else if(l.protocol==="https:")l.protocol="wss:";O._url=l.href;let E0=l.protocol==="wss:",I0=l.protocol==="ws+unix:",u0;if(l.protocol!=="ws:"&&!E0&&!I0)u0=`The URL's protocol must be one of "ws:", "wss:", "http:", "https:", or "ws+unix:"`;else if(I0&&!l.pathname)u0="The URL's pathname is empty";else if(l.hash)u0="The URL contains a fragment identifier";if(u0){let g=SyntaxError(u0);if(O._redirects===0)throw g;else{d(O,g);return}}let Q9=E0?443:80,Z9=H(16).toString("base64"),J9=E0?J.request:Y.request,p0=new Set,g0;if(f.createConnection=f.createConnection||(E0?T0:Y0),f.defaultPort=f.defaultPort||Q9,f.port=l.port||Q9,f.host=l.hostname.startsWith("[")?l.hostname.slice(1,-1):l.hostname,f.headers={...f.headers,"Sec-WebSocket-Version":f.protocolVersion,"Sec-WebSocket-Key":Z9,Connection:"Upgrade",Upgrade:"websocket"},f.path=l.pathname+l.search,f.timeout=f.handshakeTimeout,f.perMessageDeflate)g0=new M({...f.perMessageDeflate,isServer:!1,maxPayload:f.maxPayload}),f.headers["Sec-WebSocket-Extensions"]=T({[M.extensionName]:g0.offer()});if(h.length){for(let g of h){if(typeof g!=="string"||!c.test(g)||p0.has(g))throw SyntaxError("An invalid or duplicated subprotocol was specified");p0.add(g)}f.headers["Sec-WebSocket-Protocol"]=h.join(",")}if(f.origin)if(f.protocolVersion<13)f.headers["Sec-WebSocket-Origin"]=f.origin;else f.headers.Origin=f.origin;if(l.username||l.password)f.auth=`${l.username}:${l.password}`;if(I0){let g=f.path.split(":");f.socketPath=g[0],f.path=g[1]}let n;if(f.followRedirects){if(O._redirects===0){O._originalIpc=I0,O._originalSecure=E0,O._originalHostOrSocketPath=I0?f.socketPath:l.host;let g=p&&p.headers;if(p={...p,headers:{}},g)for(let[t,x0]of Object.entries(g))p.headers[t.toLowerCase()]=x0}else if(O.listenerCount("redirect")===0){let g=I0?O._originalIpc?f.socketPath===O._originalHostOrSocketPath:!1:O._originalIpc?!1:l.host===O._originalHostOrSocketPath;if(!g||O._originalSecure&&!E0){if(delete f.headers.authorization,delete f.headers.cookie,!g)delete f.headers.host;f.auth=void 0}}if(f.auth&&!p.headers.authorization)p.headers.authorization="Basic "+Buffer.from(f.auth).toString("base64");if(n=O._req=J9(f),O._redirects)O.emit("redirect",O.url,n)}else n=O._req=J9(f);if(f.timeout)n.on("timeout",()=>{e(O,n,"Opening handshake has timed out")});if(n.on("error",(g)=>{if(n===null||n[y])return;n=O._req=null,d(O,g)}),n.on("response",(g)=>{let t=g.headers.location,x0=g.statusCode;if(t&&f.followRedirects&&x0>=300&&x0<400){if(++O._redirects>f.maxRedirects){e(O,n,"Maximum redirects exceeded");return}n.abort();let c0;try{c0=new U(t,w)}catch(Y9){let q0=SyntaxError(`Invalid URL: ${t}`);d(O,q0);return}u(O,c0,h,p)}else if(!O.emit("unexpected-response",n,g))e(O,n,`Unexpected server response: ${g.statusCode}`)}),n.on("upgrade",(g,t,x0)=>{if(O.emit("upgrade",g),O.readyState!==E.CONNECTING)return;n=O._req=null;let c0=g.headers.upgrade;if(c0===void 0||c0.toLowerCase()!=="websocket"){e(O,t,"Invalid Upgrade header");return}let Y9=K("sha1").update(Z9+L).digest("base64");if(g.headers["sec-websocket-accept"]!==Y9){e(O,t,"Invalid Sec-WebSocket-Accept header");return}let q0=g.headers["sec-websocket-protocol"],m0;if(q0!==void 0){if(!p0.size)m0="Server sent a subprotocol but none was requested";else if(!p0.has(q0))m0="Server sent an invalid subprotocol"}else if(p0.size)m0="Server sent no subprotocol";if(m0){e(O,t,m0);return}if(q0)O._protocol=q0;let X9=g.headers["sec-websocket-extensions"];if(X9!==void 0){if(!g0){e(O,t,"Server sent a Sec-WebSocket-Extensions header but no extension was requested");return}let S4;try{S4=q(X9)}catch(y4){e(O,t,"Invalid Sec-WebSocket-Extensions header");return}let G9=Object.keys(S4);if(G9.length!==1||G9[0]!==M.extensionName){e(O,t,"Server indicated an extension that was not requested");return}try{g0.accept(S4[M.extensionName])}catch(y4){e(O,t,"Invalid Sec-WebSocket-Extensions header");return}O._extensions[M.extensionName]=g0}O.setSocket(t,x0,{allowSynchronousEvents:f.allowSynchronousEvents,generateMask:f.generateMask,maxPayload:f.maxPayload,skipUTF8Validation:f.skipUTF8Validation})}),f.finishRequest)f.finishRequest(n,O);else n.end()}function d(O,w){O._readyState=E.CLOSING,O._errorEmitted=!0,O.emit("error",w),O.emitClose()}function Y0(O){return O.path=O.socketPath,X.connect(O)}function T0(O){if(O.path=void 0,!O.servername&&O.servername!=="")O.servername=X.isIP(O.host)?"":O.host;return G.connect(O)}function e(O,w,h){O._readyState=E.CLOSING;let p=Error(h);if(Error.captureStackTrace(p,e),w.setHeader){if(w[y]=!0,w.abort(),w.socket&&!w.socket.destroyed)w.socket.destroy();process.nextTick(d,O,p)}else w.destroy(p),w.once("error",O.emit.bind(O,"error")),w.once("close",O.emitClose.bind(O))}function w4(O,w,h){if(w){let p=R(w)?w.size:S(w).length;if(O._socket)O._sender._bufferedBytes+=p;else O._bufferedAmount+=p}if(h){let p=Error(`WebSocket is not open: readyState ${O.readyState} (${b[O.readyState]})`);process.nextTick(h,p)}}function u$(O,w){let h=this[V];if(h._closeFrameReceived=!0,h._closeMessage=w,h._closeCode=O,h._socket[V]===void 0)return;if(h._socket.removeListener("data",G4),process.nextTick(r8,h._socket),O===1005)h.close();else h.close(O,w)}function p$(){let O=this[V];if(!O.isPaused)O._socket.resume()}function g$(O){let w=this[V];if(w._socket[V]!==void 0)w._socket.removeListener("data",G4),process.nextTick(r8,w._socket),w.close(O[_]);if(!w._errorEmitted)w._errorEmitted=!0,w.emit("error",O)}function a8(){this[V].emitClose()}function c$(O,w){this[V].emit("message",O,w)}function m$(O){let w=this[V];if(w._autoPong)w.pong(O,!this._isServer,N);w.emit("ping",O)}function l$(O){this[V].emit("pong",O)}function r8(O){O.resume()}function d$(O){let w=this[V];if(w.readyState===E.CLOSED)return;if(w.readyState===E.OPEN)w._readyState=E.CLOSING,t8(w);if(this._socket.end(),!w._errorEmitted)w._errorEmitted=!0,w.emit("error",O)}function t8(O){O._closeTimer=setTimeout(O._socket.destroy.bind(O._socket),O._closeTimeout)}function s8(){let O=this[V];if(this.removeListener("close",s8),this.removeListener("data",G4),this.removeListener("end",e8),O._readyState=E.CLOSING,!this._readableState.endEmitted&&!O._closeFrameReceived&&!O._receiver._writableState.errorEmitted&&this._readableState.length!==0){let w=this.read(this._readableState.length);O._receiver.write(w)}if(O._receiver.end(),this[V]=void 0,clearTimeout(O._closeTimer),O._receiver._writableState.finished||O._receiver._writableState.errorEmitted)O.emitClose();else O._receiver.on("error",a8),O._receiver.on("finish",a8)}function G4(O){if(!this[V]._receiver.write(O))this.pause()}function e8(){let O=this[V];O._readyState=E.CLOSING,O._receiver.end(),this.end()}function $9(){let O=this[V];if(this.removeListener("error",$9),this.on("error",N),O)O._readyState=E.CLOSING,this.destroy()}}),c7=$0(($,Q)=>{var Z=f8(),{Duplex:J}=a("stream");function Y(K){K.emit("close")}function X(){if(!this.destroyed&&this._writableState.finished)this.destroy()}function G(K){if(this.removeListener("error",G),this.destroy(),this.listenerCount("error")===0)this.emit("error",K)}function H(K,W){let z=!0,U=new J({...W,autoDestroy:!1,emitClose:!1,objectMode:!1,writableObjectMode:!1});return K.on("message",function(F,A){let R=!A&&U._readableState.objectMode?F.toString():F;if(!U.push(R))K.pause()}),K.once("error",function(F){if(U.destroyed)return;z=!1,U.destroy(F)}),K.once("close",function(){if(U.destroyed)return;U.push(null)}),U._destroy=function(M,F){if(K.readyState===K.CLOSED){F(M),process.nextTick(Y,U);return}let A=!1;if(K.once("error",function(x){A=!0,F(x)}),K.once("close",function(){if(!A)F(M);process.nextTick(Y,U)}),z)K.terminate()},U._final=function(M){if(K.readyState===K.CONNECTING){K.once("open",function(){U._final(M)});return}if(K._socket===null)return;if(K._socket._writableState.finished){if(M(),U._readableState.endEmitted)U.destroy()}else K._socket.once("finish",function(){M()}),K.close()},U._read=function(){if(K.isPaused)K.resume()},U._write=function(M,F,A){if(K.readyState===K.CONNECTING){K.once("open",function(){U._write(M,F,A)});return}K.send(M,A)},U.on("end",X),U.on("error",G),U}Q.exports=H}),r6=$0(($,Q)=>{var{tokenChars:Z}=$4();function J(Y){let X=new Set,G=-1,H=-1,K=0;for(K;K<Y.length;K++){let z=Y.charCodeAt(K);if(H===-1&&Z[z]===1){if(G===-1)G=K}else if(K!==0&&(z===32||z===9)){if(H===-1&&G!==-1)H=K}else if(z===44){if(G===-1)throw SyntaxError(`Unexpected character at index ${K}`);if(H===-1)H=K;let U=Y.slice(G,H);if(X.has(U))throw SyntaxError(`The "${U}" subprotocol is duplicated`);X.add(U),G=H=-1}else throw SyntaxError(`Unexpected character at index ${K}`)}if(G===-1||H!==-1)throw SyntaxError("Unexpected end of input");let W=Y.slice(G,K);if(X.has(W))throw SyntaxError(`The "${W}" subprotocol is duplicated`);return X.add(W),X}Q.exports={parse:J}}),m7=$0(($,Q)=>{var Z=a("events"),J=a("http"),{Duplex:Y}=a("stream"),{createHash:X}=a("crypto"),G=k8(),H=e0(),K=r6(),W=f8(),{CLOSE_TIMEOUT:z,GUID:U,kWebSocket:M}=_0(),F=/^[+/0-9A-Za-z]{22}==$/,A=0,R=1,x=2;class j extends Z{constructor(V,N){super();if(V={allowSynchronousEvents:!0,autoPong:!0,maxPayload:104857600,skipUTF8Validation:!1,perMessageDeflate:!1,handleProtocols:null,clientTracking:!0,closeTimeout:z,verifyClient:null,noServer:!1,backlog:null,server:null,host:null,path:null,port:null,WebSocket:W,...V},V.port==null&&!V.server&&!V.noServer||V.port!=null&&(V.server||V.noServer)||V.server&&V.noServer)throw TypeError('One and only one of the "port", "server", or "noServer" options must be specified');if(V.port!=null)this._server=J.createServer((B,P)=>{let T=J.STATUS_CODES[426];P.writeHead(426,{"Content-Length":T.length,"Content-Type":"text/plain"}),P.end(T)}),this._server.listen(V.port,V.host,V.backlog,N);else if(V.server)this._server=V.server;if(this._server){let B=this.emit.bind(this,"connection");this._removeListeners=D(this._server,{listening:this.emit.bind(this,"listening"),error:this.emit.bind(this,"error"),upgrade:(P,T,q)=>{this.handleUpgrade(P,T,q,B)}})}if(V.perMessageDeflate===!0)V.perMessageDeflate={};if(V.clientTracking)this.clients=new Set,this._shouldEmitClose=!1;this.options=V,this._state=A}address(){if(this.options.noServer)throw Error('The server is operating in "noServer" mode');if(!this._server)return null;return this._server.address()}close(V){if(this._state===x){if(V)this.once("close",()=>{V(Error("The server is not running"))});process.nextTick(L,this);return}if(V)this.once("close",V);if(this._state===R)return;if(this._state=R,this.options.noServer||this.options.server){if(this._server)this._removeListeners(),this._removeListeners=this._server=null;if(this.clients)if(!this.clients.size)process.nextTick(L,this);else this._shouldEmitClose=!0;else process.nextTick(L,this)}else{let N=this._server;this._removeListeners(),this._removeListeners=this._server=null,N.close(()=>{L(this)})}}shouldHandle(V){if(this.options.path){let N=V.url.indexOf("?");if((N!==-1?V.url.slice(0,N):V.url)!==this.options.path)return!1}return!0}handleUpgrade(V,N,B,P){N.on("error",C);let T=V.headers["sec-websocket-key"],q=V.headers.upgrade,S=+V.headers["sec-websocket-version"];if(V.method!=="GET"){_(this,V,N,405,"Invalid HTTP method");return}if(q===void 0||q.toLowerCase()!=="websocket"){_(this,V,N,400,"Invalid Upgrade header");return}if(T===void 0||!F.test(T)){_(this,V,N,400,"Missing or invalid Sec-WebSocket-Key header");return}if(S!==13&&S!==8){_(this,V,N,400,"Missing or invalid Sec-WebSocket-Version header",{"Sec-WebSocket-Version":"13, 8"});return}if(!this.shouldHandle(V)){I(N,400);return}let y=V.headers["sec-websocket-protocol"],k=new Set;if(y!==void 0)try{k=K.parse(y)}catch(E){_(this,V,N,400,"Invalid Sec-WebSocket-Protocol header");return}let b=V.headers["sec-websocket-extensions"],c={};if(this.options.perMessageDeflate&&b!==void 0){let E=new H({...this.options.perMessageDeflate,isServer:!0,maxPayload:this.options.maxPayload});try{let u=G.parse(b);if(u[H.extensionName])E.accept(u[H.extensionName]),c[H.extensionName]=E}catch(u){_(this,V,N,400,"Invalid or unacceptable Sec-WebSocket-Extensions header");return}}if(this.options.verifyClient){let E={origin:V.headers[`${S===8?"sec-websocket-origin":"origin"}`],secure:!!(V.socket.authorized||V.socket.encrypted),req:V};if(this.options.verifyClient.length===2){this.options.verifyClient(E,(u,d,Y0,T0)=>{if(!u)return I(N,d||401,Y0,T0);this.completeUpgrade(c,T,k,V,N,B,P)});return}if(!this.options.verifyClient(E))return I(N,401)}this.completeUpgrade(c,T,k,V,N,B,P)}completeUpgrade(V,N,B,P,T,q,S){if(!T.readable||!T.writable)return T.destroy();if(T[M])throw Error("server.handleUpgrade() was called more than once with the same socket, possibly due to a misconfiguration");if(this._state>A)return I(T,503);let k=["HTTP/1.1 101 Switching Protocols","Upgrade: websocket","Connection: Upgrade",`Sec-WebSocket-Accept: ${X("sha1").update(N+U).digest("base64")}`],b=new this.options.WebSocket(null,void 0,this.options);if(B.size){let c=this.options.handleProtocols?this.options.handleProtocols(B,P):B.values().next().value;if(c)k.push(`Sec-WebSocket-Protocol: ${c}`),b._protocol=c}if(V[H.extensionName]){let c=V[H.extensionName].params,E=G.format({[H.extensionName]:[c]});k.push(`Sec-WebSocket-Extensions: ${E}`),b._extensions=V}if(this.emit("headers",k,P),T.write(k.concat(`\r
34
+ }`,nZ=65536,rZ,tZ,eZ,Z2=1500;var L$=Q5(()=>{v7=Object.create,b7=Object.getPrototypeOf,c6=Object.defineProperty,h7=Object.getOwnPropertyNames,u7=Object.prototype.hasOwnProperty;a=f7(import.meta.url),_0=$0(($,Q)=>{var Z=["nodebuffer","arraybuffer","fragments"],J=typeof Blob<"u";if(J)Z.push("blob");Q.exports={BINARY_TYPES:Z,CLOSE_TIMEOUT:30000,EMPTY_BUFFER:Buffer.alloc(0),GUID:"258EAFA5-E914-47DA-95CA-C5AB0DC85B11",hasBlob:J,kForOnEventAttribute:Symbol("kIsForOnEventAttribute"),kListener:Symbol("kListener"),kStatusCode:Symbol("status-code"),kWebSocket:Symbol("websocket"),NOOP:()=>{}}}),D4=$0(($,Q)=>{var{EMPTY_BUFFER:Z}=_0(),J=Buffer[Symbol.species];function Y(W,z){if(W.length===0)return Z;if(W.length===1)return W[0];let U=Buffer.allocUnsafe(z),M=0;for(let F=0;F<W.length;F++){let A=W[F];U.set(A,M),M+=A.length}if(M<z)return new J(U.buffer,U.byteOffset,M);return U}function X(W,z,U,M,F){for(let A=0;A<F;A++)U[M+A]=W[A]^z[A&3]}function G(W,z){for(let U=0;U<W.length;U++)W[U]^=z[U&3]}function H(W){if(W.length===W.buffer.byteLength)return W.buffer;return W.buffer.slice(W.byteOffset,W.byteOffset+W.length)}function K(W){if(K.readOnly=!0,Buffer.isBuffer(W))return W;let z;if(W instanceof ArrayBuffer)z=new J(W);else if(ArrayBuffer.isView(W))z=new J(W.buffer,W.byteOffset,W.byteLength);else z=Buffer.from(W),K.readOnly=!1;return z}if(Q.exports={concat:Y,mask:X,toArrayBuffer:H,toBuffer:K,unmask:G},!process.env.WS_NO_BUFFER_UTIL)try{let W=(()=>{throw Error("Cannot require module bufferutil")})();Q.exports.mask=function(z,U,M,F,A){if(A<48)X(z,U,M,F,A);else W.mask(z,U,M,F,A)},Q.exports.unmask=function(z,U){if(z.length<32)G(z,U);else W.unmask(z,U)}}catch(W){}}),m7=$0(($,Q)=>{var Z=Symbol("kDone"),J=Symbol("kRun");class Y{constructor(X){this[Z]=()=>{this.pending--,this[J]()},this.concurrency=X||1/0,this.jobs=[],this.pending=0}add(X){this.jobs.push(X),this[J]()}[J](){if(this.pending===this.concurrency)return;if(this.jobs.length){let X=this.jobs.shift();this.pending++,X(this[Z])}}}Q.exports=Y}),e0=$0(($,Q)=>{var Z=a("zlib"),J=D4(),Y=m7(),{kStatusCode:X}=_0(),G=Buffer[Symbol.species],H=Buffer.from([0,0,255,255]),K=Symbol("permessage-deflate"),W=Symbol("total-length"),z=Symbol("callback"),U=Symbol("buffers"),M=Symbol("error"),F;class A{constructor(P){if(this._options=P||{},this._threshold=this._options.threshold!==void 0?this._options.threshold:1024,this._maxPayload=this._options.maxPayload|0,this._isServer=!!this._options.isServer,this._deflate=null,this._inflate=null,this.params=null,!F){let L=this._options.concurrencyLimit!==void 0?this._options.concurrencyLimit:10;F=new Y(L)}}static get extensionName(){return"permessage-deflate"}offer(){let P={};if(this._options.serverNoContextTakeover)P.server_no_context_takeover=!0;if(this._options.clientNoContextTakeover)P.client_no_context_takeover=!0;if(this._options.serverMaxWindowBits)P.server_max_window_bits=this._options.serverMaxWindowBits;if(this._options.clientMaxWindowBits)P.client_max_window_bits=this._options.clientMaxWindowBits;else if(this._options.clientMaxWindowBits==null)P.client_max_window_bits=!0;return P}accept(P){return P=this.normalizeParams(P),this.params=this._isServer?this.acceptAsServer(P):this.acceptAsClient(P),this.params}cleanup(){if(this._inflate)this._inflate.close(),this._inflate=null;if(this._deflate){let P=this._deflate[z];if(this._deflate.close(),this._deflate=null,P)P(Error("The deflate stream was closed while data was being processed"))}}acceptAsServer(P){let L=this._options,C=P.find((I)=>{if(L.serverNoContextTakeover===!1&&I.server_no_context_takeover||I.server_max_window_bits&&(L.serverMaxWindowBits===!1||typeof L.serverMaxWindowBits==="number"&&L.serverMaxWindowBits>I.server_max_window_bits)||typeof L.clientMaxWindowBits==="number"&&!I.client_max_window_bits)return!1;return!0});if(!C)throw Error("None of the extension offers can be accepted");if(L.serverNoContextTakeover)C.server_no_context_takeover=!0;if(L.clientNoContextTakeover)C.client_no_context_takeover=!0;if(typeof L.serverMaxWindowBits==="number")C.server_max_window_bits=L.serverMaxWindowBits;if(typeof L.clientMaxWindowBits==="number")C.client_max_window_bits=L.clientMaxWindowBits;else if(C.client_max_window_bits===!0||L.clientMaxWindowBits===!1)delete C.client_max_window_bits;return C}acceptAsClient(P){let L=P[0];if(this._options.clientNoContextTakeover===!1&&L.client_no_context_takeover)throw Error('Unexpected parameter "client_no_context_takeover"');if(!L.client_max_window_bits){if(typeof this._options.clientMaxWindowBits==="number")L.client_max_window_bits=this._options.clientMaxWindowBits}else if(this._options.clientMaxWindowBits===!1||typeof this._options.clientMaxWindowBits==="number"&&L.client_max_window_bits>this._options.clientMaxWindowBits)throw Error('Unexpected or invalid parameter "client_max_window_bits"');return L}normalizeParams(P){return P.forEach((L)=>{Object.keys(L).forEach((C)=>{let I=L[C];if(I.length>1)throw Error(`Parameter "${C}" must have only a single value`);if(I=I[0],C==="client_max_window_bits"){if(I!==!0){let _=+I;if(!Number.isInteger(_)||_<8||_>15)throw TypeError(`Invalid value for parameter "${C}": ${I}`);I=_}else if(!this._isServer)throw TypeError(`Invalid value for parameter "${C}": ${I}`)}else if(C==="server_max_window_bits"){let _=+I;if(!Number.isInteger(_)||_<8||_>15)throw TypeError(`Invalid value for parameter "${C}": ${I}`);I=_}else if(C==="client_no_context_takeover"||C==="server_no_context_takeover"){if(I!==!0)throw TypeError(`Invalid value for parameter "${C}": ${I}`)}else throw Error(`Unknown parameter "${C}"`);L[C]=I})}),P}decompress(P,L,C){F.add((I)=>{this._decompress(P,L,(_,V)=>{I(),C(_,V)})})}compress(P,L,C){F.add((I)=>{this._compress(P,L,(_,V)=>{I(),C(_,V)})})}_decompress(P,L,C){let I=this._isServer?"client":"server";if(!this._inflate){let _=`${I}_max_window_bits`,V=typeof this.params[_]!=="number"?Z.Z_DEFAULT_WINDOWBITS:this.params[_];this._inflate=Z.createInflateRaw({...this._options.zlibInflateOptions,windowBits:V}),this._inflate[K]=this,this._inflate[W]=0,this._inflate[U]=[],this._inflate.on("error",j),this._inflate.on("data",x)}if(this._inflate[z]=C,this._inflate.write(P),L)this._inflate.write(H);this._inflate.flush(()=>{let _=this._inflate[M];if(_){this._inflate.close(),this._inflate=null,C(_);return}let V=J.concat(this._inflate[U],this._inflate[W]);if(this._inflate._readableState.endEmitted)this._inflate.close(),this._inflate=null;else if(this._inflate[W]=0,this._inflate[U]=[],L&&this.params[`${I}_no_context_takeover`])this._inflate.reset();C(null,V)})}_compress(P,L,C){let I=this._isServer?"server":"client";if(!this._deflate){let _=`${I}_max_window_bits`,V=typeof this.params[_]!=="number"?Z.Z_DEFAULT_WINDOWBITS:this.params[_];this._deflate=Z.createDeflateRaw({...this._options.zlibDeflateOptions,windowBits:V}),this._deflate[W]=0,this._deflate[U]=[],this._deflate.on("data",R)}this._deflate[z]=C,this._deflate.write(P),this._deflate.flush(Z.Z_SYNC_FLUSH,()=>{if(!this._deflate)return;let _=J.concat(this._deflate[U],this._deflate[W]);if(L)_=new G(_.buffer,_.byteOffset,_.length-4);if(this._deflate[z]=null,this._deflate[W]=0,this._deflate[U]=[],L&&this.params[`${I}_no_context_takeover`])this._deflate.reset();C(null,_)})}}Q.exports=A;function R(P){this[U].push(P),this[W]+=P.length}function x(P){if(this[W]+=P.length,this[K]._maxPayload<1||this[W]<=this[K]._maxPayload){this[U].push(P);return}this[M]=RangeError("Max payload size exceeded"),this[M].code="WS_ERR_UNSUPPORTED_MESSAGE_LENGTH",this[M][X]=1009,this.removeListener("data",x),this.reset()}function j(P){if(this[K]._inflate=null,this[M]){this[z](this[M]);return}P[X]=1007,this[z](P)}}),$4=$0(($,Q)=>{var{isUtf8:Z}=a("buffer"),{hasBlob:J}=_0(),Y=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,1,0,0,1,1,0,1,1,0,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,0,1,0];function X(K){return K>=1000&&K<=1014&&K!==1004&&K!==1005&&K!==1006||K>=3000&&K<=4999}function G(K){let W=K.length,z=0;while(z<W)if((K[z]&128)===0)z++;else if((K[z]&224)===192){if(z+1===W||(K[z+1]&192)!==128||(K[z]&254)===192)return!1;z+=2}else if((K[z]&240)===224){if(z+2>=W||(K[z+1]&192)!==128||(K[z+2]&192)!==128||K[z]===224&&(K[z+1]&224)===128||K[z]===237&&(K[z+1]&224)===160)return!1;z+=3}else if((K[z]&248)===240){if(z+3>=W||(K[z+1]&192)!==128||(K[z+2]&192)!==128||(K[z+3]&192)!==128||K[z]===240&&(K[z+1]&240)===128||K[z]===244&&K[z+1]>143||K[z]>244)return!1;z+=4}else return!1;return!0}function H(K){return J&&typeof K==="object"&&typeof K.arrayBuffer==="function"&&typeof K.type==="string"&&typeof K.stream==="function"&&(K[Symbol.toStringTag]==="Blob"||K[Symbol.toStringTag]==="File")}if(Q.exports={isBlob:H,isValidStatusCode:X,isValidUTF8:G,tokenChars:Y},Z)Q.exports.isValidUTF8=function(K){return K.length<24?G(K):Z(K)};else if(!process.env.WS_NO_UTF_8_VALIDATE)try{let K=(()=>{throw Error("Cannot require module utf-8-validate")})();Q.exports.isValidUTF8=function(W){return W.length<32?G(W):K(W)}}catch(K){}}),a6=$0(($,Q)=>{var{Writable:Z}=a("stream"),J=e0(),{BINARY_TYPES:Y,EMPTY_BUFFER:X,kStatusCode:G,kWebSocket:H}=_0(),{concat:K,toArrayBuffer:W,unmask:z}=D4(),{isValidStatusCode:U,isValidUTF8:M}=$4(),F=Buffer[Symbol.species],A=0,R=1,x=2,j=3,P=4,L=5,C=6;class I extends Z{constructor(_={}){super();this._allowSynchronousEvents=_.allowSynchronousEvents!==void 0?_.allowSynchronousEvents:!0,this._binaryType=_.binaryType||Y[0],this._extensions=_.extensions||{},this._isServer=!!_.isServer,this._maxPayload=_.maxPayload|0,this._skipUTF8Validation=!!_.skipUTF8Validation,this[H]=void 0,this._bufferedBytes=0,this._buffers=[],this._compressed=!1,this._payloadLength=0,this._mask=void 0,this._fragmented=0,this._masked=!1,this._fin=!1,this._opcode=0,this._totalPayloadLength=0,this._messageLength=0,this._fragments=[],this._errored=!1,this._loop=!1,this._state=A}_write(_,V,N){if(this._opcode===8&&this._state==A)return N();this._bufferedBytes+=_.length,this._buffers.push(_),this.startLoop(N)}consume(_){if(this._bufferedBytes-=_,_===this._buffers[0].length)return this._buffers.shift();if(_<this._buffers[0].length){let N=this._buffers[0];return this._buffers[0]=new F(N.buffer,N.byteOffset+_,N.length-_),new F(N.buffer,N.byteOffset,_)}let V=Buffer.allocUnsafe(_);do{let N=this._buffers[0],B=V.length-_;if(_>=N.length)V.set(this._buffers.shift(),B);else V.set(new Uint8Array(N.buffer,N.byteOffset,_),B),this._buffers[0]=new F(N.buffer,N.byteOffset+_,N.length-_);_-=N.length}while(_>0);return V}startLoop(_){this._loop=!0;do switch(this._state){case A:this.getInfo(_);break;case R:this.getPayloadLength16(_);break;case x:this.getPayloadLength64(_);break;case j:this.getMask();break;case P:this.getData(_);break;case L:case C:this._loop=!1;return}while(this._loop);if(!this._errored)_()}getInfo(_){if(this._bufferedBytes<2){this._loop=!1;return}let V=this.consume(2);if((V[0]&48)!==0){let B=this.createError(RangeError,"RSV2 and RSV3 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_2_3");_(B);return}let N=(V[0]&64)===64;if(N&&!this._extensions[J.extensionName]){let B=this.createError(RangeError,"RSV1 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_1");_(B);return}if(this._fin=(V[0]&128)===128,this._opcode=V[0]&15,this._payloadLength=V[1]&127,this._opcode===0){if(N){let B=this.createError(RangeError,"RSV1 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_1");_(B);return}if(!this._fragmented){let B=this.createError(RangeError,"invalid opcode 0",!0,1002,"WS_ERR_INVALID_OPCODE");_(B);return}this._opcode=this._fragmented}else if(this._opcode===1||this._opcode===2){if(this._fragmented){let B=this.createError(RangeError,`invalid opcode ${this._opcode}`,!0,1002,"WS_ERR_INVALID_OPCODE");_(B);return}this._compressed=N}else if(this._opcode>7&&this._opcode<11){if(!this._fin){let B=this.createError(RangeError,"FIN must be set",!0,1002,"WS_ERR_EXPECTED_FIN");_(B);return}if(N){let B=this.createError(RangeError,"RSV1 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_1");_(B);return}if(this._payloadLength>125||this._opcode===8&&this._payloadLength===1){let B=this.createError(RangeError,`invalid payload length ${this._payloadLength}`,!0,1002,"WS_ERR_INVALID_CONTROL_PAYLOAD_LENGTH");_(B);return}}else{let B=this.createError(RangeError,`invalid opcode ${this._opcode}`,!0,1002,"WS_ERR_INVALID_OPCODE");_(B);return}if(!this._fin&&!this._fragmented)this._fragmented=this._opcode;if(this._masked=(V[1]&128)===128,this._isServer){if(!this._masked){let B=this.createError(RangeError,"MASK must be set",!0,1002,"WS_ERR_EXPECTED_MASK");_(B);return}}else if(this._masked){let B=this.createError(RangeError,"MASK must be clear",!0,1002,"WS_ERR_UNEXPECTED_MASK");_(B);return}if(this._payloadLength===126)this._state=R;else if(this._payloadLength===127)this._state=x;else this.haveLength(_)}getPayloadLength16(_){if(this._bufferedBytes<2){this._loop=!1;return}this._payloadLength=this.consume(2).readUInt16BE(0),this.haveLength(_)}getPayloadLength64(_){if(this._bufferedBytes<8){this._loop=!1;return}let V=this.consume(8),N=V.readUInt32BE(0);if(N>Math.pow(2,21)-1){let B=this.createError(RangeError,"Unsupported WebSocket frame: payload length > 2^53 - 1",!1,1009,"WS_ERR_UNSUPPORTED_DATA_PAYLOAD_LENGTH");_(B);return}this._payloadLength=N*Math.pow(2,32)+V.readUInt32BE(4),this.haveLength(_)}haveLength(_){if(this._payloadLength&&this._opcode<8){if(this._totalPayloadLength+=this._payloadLength,this._totalPayloadLength>this._maxPayload&&this._maxPayload>0){let V=this.createError(RangeError,"Max payload size exceeded",!1,1009,"WS_ERR_UNSUPPORTED_MESSAGE_LENGTH");_(V);return}}if(this._masked)this._state=j;else this._state=P}getMask(){if(this._bufferedBytes<4){this._loop=!1;return}this._mask=this.consume(4),this._state=P}getData(_){let V=X;if(this._payloadLength){if(this._bufferedBytes<this._payloadLength){this._loop=!1;return}if(V=this.consume(this._payloadLength),this._masked&&(this._mask[0]|this._mask[1]|this._mask[2]|this._mask[3])!==0)z(V,this._mask)}if(this._opcode>7){this.controlMessage(V,_);return}if(this._compressed){this._state=L,this.decompress(V,_);return}if(V.length)this._messageLength=this._totalPayloadLength,this._fragments.push(V);this.dataMessage(_)}decompress(_,V){this._extensions[J.extensionName].decompress(_,this._fin,(B,D)=>{if(B)return V(B);if(D.length){if(this._messageLength+=D.length,this._messageLength>this._maxPayload&&this._maxPayload>0){let T=this.createError(RangeError,"Max payload size exceeded",!1,1009,"WS_ERR_UNSUPPORTED_MESSAGE_LENGTH");V(T);return}this._fragments.push(D)}if(this.dataMessage(V),this._state===A)this.startLoop(V)})}dataMessage(_){if(!this._fin){this._state=A;return}let V=this._messageLength,N=this._fragments;if(this._totalPayloadLength=0,this._messageLength=0,this._fragmented=0,this._fragments=[],this._opcode===2){let B;if(this._binaryType==="nodebuffer")B=K(N,V);else if(this._binaryType==="arraybuffer")B=W(K(N,V));else if(this._binaryType==="blob")B=new Blob(N);else B=N;if(this._allowSynchronousEvents)this.emit("message",B,!0),this._state=A;else this._state=C,setImmediate(()=>{this.emit("message",B,!0),this._state=A,this.startLoop(_)})}else{let B=K(N,V);if(!this._skipUTF8Validation&&!M(B)){let D=this.createError(Error,"invalid UTF-8 sequence",!0,1007,"WS_ERR_INVALID_UTF8");_(D);return}if(this._state===L||this._allowSynchronousEvents)this.emit("message",B,!1),this._state=A;else this._state=C,setImmediate(()=>{this.emit("message",B,!1),this._state=A,this.startLoop(_)})}}controlMessage(_,V){if(this._opcode===8){if(_.length===0)this._loop=!1,this.emit("conclude",1005,X),this.end();else{let N=_.readUInt16BE(0);if(!U(N)){let D=this.createError(RangeError,`invalid status code ${N}`,!0,1002,"WS_ERR_INVALID_CLOSE_CODE");V(D);return}let B=new F(_.buffer,_.byteOffset+2,_.length-2);if(!this._skipUTF8Validation&&!M(B)){let D=this.createError(Error,"invalid UTF-8 sequence",!0,1007,"WS_ERR_INVALID_UTF8");V(D);return}this._loop=!1,this.emit("conclude",N,B),this.end()}this._state=A;return}if(this._allowSynchronousEvents)this.emit(this._opcode===9?"ping":"pong",_),this._state=A;else this._state=C,setImmediate(()=>{this.emit(this._opcode===9?"ping":"pong",_),this._state=A,this.startLoop(V)})}createError(_,V,N,B,D){this._loop=!1,this._errored=!0;let T=new _(N?`Invalid WebSocket frame: ${V}`:V);return Error.captureStackTrace(T,this.createError),T.code=D,T[G]=B,T}}Q.exports=I}),r6=$0(($,Q)=>{var{Duplex:Z}=a("stream"),{randomFillSync:J}=a("crypto"),Y=e0(),{EMPTY_BUFFER:X,kWebSocket:G,NOOP:H}=_0(),{isBlob:K,isValidStatusCode:W}=$4(),{mask:z,toBuffer:U}=D4(),M=Symbol("kByteLength"),F=Buffer.alloc(4),A=8192,R,x=A,j=0,P=1,L=2;class C{constructor(V,N,B){if(this._extensions=N||{},B)this._generateMask=B,this._maskBuffer=Buffer.alloc(4);this._socket=V,this._firstFragment=!0,this._compress=!1,this._bufferedBytes=0,this._queue=[],this._state=j,this.onerror=H,this[G]=void 0}static frame(V,N){let B,D=!1,T=2,q=!1;if(N.mask){if(B=N.maskBuffer||F,N.generateMask)N.generateMask(B);else{if(x===A){if(R===void 0)R=Buffer.alloc(A);J(R,0,A),x=0}B[0]=R[x++],B[1]=R[x++],B[2]=R[x++],B[3]=R[x++]}q=(B[0]|B[1]|B[2]|B[3])===0,T=6}let w;if(typeof V==="string")if((!N.mask||q)&&N[M]!==void 0)w=N[M];else V=Buffer.from(V),w=V.length;else w=V.length,D=N.mask&&N.readOnly&&!q;let y=w;if(w>=65536)T+=8,y=127;else if(w>125)T+=2,y=126;let k=Buffer.allocUnsafe(D?w+T:T);if(k[0]=N.fin?N.opcode|128:N.opcode,N.rsv1)k[0]|=64;if(k[1]=y,y===126)k.writeUInt16BE(w,2);else if(y===127)k[2]=k[3]=0,k.writeUIntBE(w,4,6);if(!N.mask)return[k,V];if(k[1]|=128,k[T-4]=B[0],k[T-3]=B[1],k[T-2]=B[2],k[T-1]=B[3],q)return[k,V];if(D)return z(V,B,k,T,w),[k];return z(V,B,V,0,w),[k,V]}close(V,N,B,D){let T;if(V===void 0)T=X;else if(typeof V!=="number"||!W(V))throw TypeError("First argument must be a valid error code number");else if(N===void 0||!N.length)T=Buffer.allocUnsafe(2),T.writeUInt16BE(V,0);else{let w=Buffer.byteLength(N);if(w>123)throw RangeError("The message must not be greater than 123 bytes");if(T=Buffer.allocUnsafe(2+w),T.writeUInt16BE(V,0),typeof N==="string")T.write(N,2);else T.set(N,2)}let q={[M]:T.length,fin:!0,generateMask:this._generateMask,mask:B,maskBuffer:this._maskBuffer,opcode:8,readOnly:!1,rsv1:!1};if(this._state!==j)this.enqueue([this.dispatch,T,!1,q,D]);else this.sendFrame(C.frame(T,q),D)}ping(V,N,B){let D,T;if(typeof V==="string")D=Buffer.byteLength(V),T=!1;else if(K(V))D=V.size,T=!1;else V=U(V),D=V.length,T=U.readOnly;if(D>125)throw RangeError("The data size must not be greater than 125 bytes");let q={[M]:D,fin:!0,generateMask:this._generateMask,mask:N,maskBuffer:this._maskBuffer,opcode:9,readOnly:T,rsv1:!1};if(K(V))if(this._state!==j)this.enqueue([this.getBlobData,V,!1,q,B]);else this.getBlobData(V,!1,q,B);else if(this._state!==j)this.enqueue([this.dispatch,V,!1,q,B]);else this.sendFrame(C.frame(V,q),B)}pong(V,N,B){let D,T;if(typeof V==="string")D=Buffer.byteLength(V),T=!1;else if(K(V))D=V.size,T=!1;else V=U(V),D=V.length,T=U.readOnly;if(D>125)throw RangeError("The data size must not be greater than 125 bytes");let q={[M]:D,fin:!0,generateMask:this._generateMask,mask:N,maskBuffer:this._maskBuffer,opcode:10,readOnly:T,rsv1:!1};if(K(V))if(this._state!==j)this.enqueue([this.getBlobData,V,!1,q,B]);else this.getBlobData(V,!1,q,B);else if(this._state!==j)this.enqueue([this.dispatch,V,!1,q,B]);else this.sendFrame(C.frame(V,q),B)}send(V,N,B){let D=this._extensions[Y.extensionName],T=N.binary?2:1,q=N.compress,w,y;if(typeof V==="string")w=Buffer.byteLength(V),y=!1;else if(K(V))w=V.size,y=!1;else V=U(V),w=V.length,y=U.readOnly;if(this._firstFragment){if(this._firstFragment=!1,q&&D&&D.params[D._isServer?"server_no_context_takeover":"client_no_context_takeover"])q=w>=D._threshold;this._compress=q}else q=!1,T=0;if(N.fin)this._firstFragment=!0;let k={[M]:w,fin:N.fin,generateMask:this._generateMask,mask:N.mask,maskBuffer:this._maskBuffer,opcode:T,readOnly:y,rsv1:q};if(K(V))if(this._state!==j)this.enqueue([this.getBlobData,V,this._compress,k,B]);else this.getBlobData(V,this._compress,k,B);else if(this._state!==j)this.enqueue([this.dispatch,V,this._compress,k,B]);else this.dispatch(V,this._compress,k,B)}getBlobData(V,N,B,D){this._bufferedBytes+=B[M],this._state=L,V.arrayBuffer().then((T)=>{if(this._socket.destroyed){let w=Error("The socket was closed while the blob was being read");process.nextTick(I,this,w,D);return}this._bufferedBytes-=B[M];let q=U(T);if(!N)this._state=j,this.sendFrame(C.frame(q,B),D),this.dequeue();else this.dispatch(q,N,B,D)}).catch((T)=>{process.nextTick(_,this,T,D)})}dispatch(V,N,B,D){if(!N){this.sendFrame(C.frame(V,B),D);return}let T=this._extensions[Y.extensionName];this._bufferedBytes+=B[M],this._state=P,T.compress(V,B.fin,(q,w)=>{if(this._socket.destroyed){let y=Error("The socket was closed while data was being compressed");I(this,y,D);return}this._bufferedBytes-=B[M],this._state=j,B.readOnly=!1,this.sendFrame(C.frame(w,B),D),this.dequeue()})}dequeue(){while(this._state===j&&this._queue.length){let V=this._queue.shift();this._bufferedBytes-=V[3][M],Reflect.apply(V[0],this,V.slice(1))}}enqueue(V){this._bufferedBytes+=V[3][M],this._queue.push(V)}sendFrame(V,N){if(V.length===2)this._socket.cork(),this._socket.write(V[0]),this._socket.write(V[1],N),this._socket.uncork();else this._socket.write(V[0],N)}}Q.exports=C;function I(V,N,B){if(typeof B==="function")B(N);for(let D=0;D<V._queue.length;D++){let T=V._queue[D],q=T[T.length-1];if(typeof q==="function")q(N)}}function _(V,N,B){I(V,N,B),V.onerror(N)}}),l7=$0(($,Q)=>{var{kForOnEventAttribute:Z,kListener:J}=_0(),Y=Symbol("kCode"),X=Symbol("kData"),G=Symbol("kError"),H=Symbol("kMessage"),K=Symbol("kReason"),W=Symbol("kTarget"),z=Symbol("kType"),U=Symbol("kWasClean");class M{constructor(P){this[W]=null,this[z]=P}get target(){return this[W]}get type(){return this[z]}}Object.defineProperty(M.prototype,"target",{enumerable:!0}),Object.defineProperty(M.prototype,"type",{enumerable:!0});class F extends M{constructor(P,L={}){super(P);this[Y]=L.code===void 0?0:L.code,this[K]=L.reason===void 0?"":L.reason,this[U]=L.wasClean===void 0?!1:L.wasClean}get code(){return this[Y]}get reason(){return this[K]}get wasClean(){return this[U]}}Object.defineProperty(F.prototype,"code",{enumerable:!0}),Object.defineProperty(F.prototype,"reason",{enumerable:!0}),Object.defineProperty(F.prototype,"wasClean",{enumerable:!0});class A extends M{constructor(P,L={}){super(P);this[G]=L.error===void 0?null:L.error,this[H]=L.message===void 0?"":L.message}get error(){return this[G]}get message(){return this[H]}}Object.defineProperty(A.prototype,"error",{enumerable:!0}),Object.defineProperty(A.prototype,"message",{enumerable:!0});class R extends M{constructor(P,L={}){super(P);this[X]=L.data===void 0?null:L.data}get data(){return this[X]}}Object.defineProperty(R.prototype,"data",{enumerable:!0});var x={addEventListener(P,L,C={}){for(let _ of this.listeners(P))if(!C[Z]&&_[J]===L&&!_[Z])return;let I;if(P==="message")I=function(V,N){let B=new R("message",{data:N?V:V.toString()});B[W]=this,j(L,this,B)};else if(P==="close")I=function(V,N){let B=new F("close",{code:V,reason:N.toString(),wasClean:this._closeFrameReceived&&this._closeFrameSent});B[W]=this,j(L,this,B)};else if(P==="error")I=function(V){let N=new A("error",{error:V,message:V.message});N[W]=this,j(L,this,N)};else if(P==="open")I=function(){let V=new M("open");V[W]=this,j(L,this,V)};else return;if(I[Z]=!!C[Z],I[J]=L,C.once)this.once(P,I);else this.on(P,I)},removeEventListener(P,L){for(let C of this.listeners(P))if(C[J]===L&&!C[Z]){this.removeListener(P,C);break}}};Q.exports={CloseEvent:F,ErrorEvent:A,Event:M,EventTarget:x,MessageEvent:R};function j(P,L,C){if(typeof P==="object"&&P.handleEvent)P.handleEvent.call(P,C);else P.call(L,C)}}),f8=$0(($,Q)=>{var{tokenChars:Z}=$4();function J(G,H,K){if(G[H]===void 0)G[H]=[K];else G[H].push(K)}function Y(G){let H=Object.create(null),K=Object.create(null),W=!1,z=!1,U=!1,M,F,A=-1,R=-1,x=-1,j=0;for(;j<G.length;j++)if(R=G.charCodeAt(j),M===void 0)if(x===-1&&Z[R]===1){if(A===-1)A=j}else if(j!==0&&(R===32||R===9)){if(x===-1&&A!==-1)x=j}else if(R===59||R===44){if(A===-1)throw SyntaxError(`Unexpected character at index ${j}`);if(x===-1)x=j;let L=G.slice(A,x);if(R===44)J(H,L,K),K=Object.create(null);else M=L;A=x=-1}else throw SyntaxError(`Unexpected character at index ${j}`);else if(F===void 0)if(x===-1&&Z[R]===1){if(A===-1)A=j}else if(R===32||R===9){if(x===-1&&A!==-1)x=j}else if(R===59||R===44){if(A===-1)throw SyntaxError(`Unexpected character at index ${j}`);if(x===-1)x=j;if(J(K,G.slice(A,x),!0),R===44)J(H,M,K),K=Object.create(null),M=void 0;A=x=-1}else if(R===61&&A!==-1&&x===-1)F=G.slice(A,j),A=x=-1;else throw SyntaxError(`Unexpected character at index ${j}`);else if(z){if(Z[R]!==1)throw SyntaxError(`Unexpected character at index ${j}`);if(A===-1)A=j;else if(!W)W=!0;z=!1}else if(U)if(Z[R]===1){if(A===-1)A=j}else if(R===34&&A!==-1)U=!1,x=j;else if(R===92)z=!0;else throw SyntaxError(`Unexpected character at index ${j}`);else if(R===34&&G.charCodeAt(j-1)===61)U=!0;else if(x===-1&&Z[R]===1){if(A===-1)A=j}else if(A!==-1&&(R===32||R===9)){if(x===-1)x=j}else if(R===59||R===44){if(A===-1)throw SyntaxError(`Unexpected character at index ${j}`);if(x===-1)x=j;let L=G.slice(A,x);if(W)L=L.replace(/\\/g,""),W=!1;if(J(K,F,L),R===44)J(H,M,K),K=Object.create(null),M=void 0;F=void 0,A=x=-1}else throw SyntaxError(`Unexpected character at index ${j}`);if(A===-1||U||R===32||R===9)throw SyntaxError("Unexpected end of input");if(x===-1)x=j;let P=G.slice(A,x);if(M===void 0)J(H,P,K);else{if(F===void 0)J(K,P,!0);else if(W)J(K,F,P.replace(/\\/g,""));else J(K,F,P);J(H,M,K)}return H}function X(G){return Object.keys(G).map((H)=>{let K=G[H];if(!Array.isArray(K))K=[K];return K.map((W)=>{return[H].concat(Object.keys(W).map((z)=>{let U=W[z];if(!Array.isArray(U))U=[U];return U.map((M)=>M===!0?z:`${z}=${M}`).join("; ")})).join("; ")}).join(", ")}).join(", ")}Q.exports={format:X,parse:Y}}),v8=$0(($,Q)=>{var Z=a("events"),J=a("https"),Y=a("http"),X=a("net"),G=a("tls"),{randomBytes:H,createHash:K}=a("crypto"),{Duplex:W,Readable:z}=a("stream"),{URL:U}=a("url"),M=e0(),F=a6(),A=r6(),{isBlob:R}=$4(),{BINARY_TYPES:x,CLOSE_TIMEOUT:j,EMPTY_BUFFER:P,GUID:L,kForOnEventAttribute:C,kListener:I,kStatusCode:_,kWebSocket:V,NOOP:N}=_0(),{EventTarget:{addEventListener:B,removeEventListener:D}}=l7(),{format:T,parse:q}=f8(),{toBuffer:w}=D4(),y=Symbol("kAborted"),k=[8,13],b=["CONNECTING","OPEN","CLOSING","CLOSED"],c=/^[!#$%&'*+\-.0-9A-Z^_`|a-z~]+$/;class E extends Z{constructor(O,S,h){super();if(this._binaryType=x[0],this._closeCode=1006,this._closeFrameReceived=!1,this._closeFrameSent=!1,this._closeMessage=P,this._closeTimer=null,this._errorEmitted=!1,this._extensions={},this._paused=!1,this._protocol="",this._readyState=E.CONNECTING,this._receiver=null,this._sender=null,this._socket=null,O!==null){if(this._bufferedAmount=0,this._isServer=!1,this._redirects=0,S===void 0)S=[];else if(!Array.isArray(S))if(typeof S==="object"&&S!==null)h=S,S=[];else S=[S];u(this,O,S,h)}else this._autoPong=h.autoPong,this._closeTimeout=h.closeTimeout,this._isServer=!0}get binaryType(){return this._binaryType}set binaryType(O){if(!x.includes(O))return;if(this._binaryType=O,this._receiver)this._receiver._binaryType=O}get bufferedAmount(){if(!this._socket)return this._bufferedAmount;return this._socket._writableState.length+this._sender._bufferedBytes}get extensions(){return Object.keys(this._extensions).join()}get isPaused(){return this._paused}get onclose(){return null}get onerror(){return null}get onopen(){return null}get onmessage(){return null}get protocol(){return this._protocol}get readyState(){return this._readyState}get url(){return this._url}setSocket(O,S,h){let p=new F({allowSynchronousEvents:h.allowSynchronousEvents,binaryType:this.binaryType,extensions:this._extensions,isServer:this._isServer,maxPayload:h.maxPayload,skipUTF8Validation:h.skipUTF8Validation}),f=new A(O,this._extensions,h.generateMask);if(this._receiver=p,this._sender=f,this._socket=O,p[V]=this,f[V]=this,O[V]=this,p.on("conclude",c$),p.on("drain",m$),p.on("error",l$),p.on("message",d$),p.on("ping",i$),p.on("pong",n$),f.onerror=o$,O.setTimeout)O.setTimeout(0);if(O.setNoDelay)O.setNoDelay();if(S.length>0)O.unshift(S);O.on("close",e8),O.on("data",G4),O.on("end",$9),O.on("error",Q9),this._readyState=E.OPEN,this.emit("open")}emitClose(){if(!this._socket){this._readyState=E.CLOSED,this.emit("close",this._closeCode,this._closeMessage);return}if(this._extensions[M.extensionName])this._extensions[M.extensionName].cleanup();this._receiver.removeAllListeners(),this._readyState=E.CLOSED,this.emit("close",this._closeCode,this._closeMessage)}close(O,S){if(this.readyState===E.CLOSED)return;if(this.readyState===E.CONNECTING){e(this,this._req,"WebSocket was closed before the connection was established");return}if(this.readyState===E.CLOSING){if(this._closeFrameSent&&(this._closeFrameReceived||this._receiver._writableState.errorEmitted))this._socket.end();return}this._readyState=E.CLOSING,this._sender.close(O,S,!this._isServer,(h)=>{if(h)return;if(this._closeFrameSent=!0,this._closeFrameReceived||this._receiver._writableState.errorEmitted)this._socket.end()}),s8(this)}pause(){if(this.readyState===E.CONNECTING||this.readyState===E.CLOSED)return;this._paused=!0,this._socket.pause()}ping(O,S,h){if(this.readyState===E.CONNECTING)throw Error("WebSocket is not open: readyState 0 (CONNECTING)");if(typeof O==="function")h=O,O=S=void 0;else if(typeof S==="function")h=S,S=void 0;if(typeof O==="number")O=O.toString();if(this.readyState!==E.OPEN){S4(this,O,h);return}if(S===void 0)S=!this._isServer;this._sender.ping(O||P,S,h)}pong(O,S,h){if(this.readyState===E.CONNECTING)throw Error("WebSocket is not open: readyState 0 (CONNECTING)");if(typeof O==="function")h=O,O=S=void 0;else if(typeof S==="function")h=S,S=void 0;if(typeof O==="number")O=O.toString();if(this.readyState!==E.OPEN){S4(this,O,h);return}if(S===void 0)S=!this._isServer;this._sender.pong(O||P,S,h)}resume(){if(this.readyState===E.CONNECTING||this.readyState===E.CLOSED)return;if(this._paused=!1,!this._receiver._writableState.needDrain)this._socket.resume()}send(O,S,h){if(this.readyState===E.CONNECTING)throw Error("WebSocket is not open: readyState 0 (CONNECTING)");if(typeof S==="function")h=S,S={};if(typeof O==="number")O=O.toString();if(this.readyState!==E.OPEN){S4(this,O,h);return}let p={binary:typeof O!=="string",mask:!this._isServer,compress:!0,fin:!0,...S};if(!this._extensions[M.extensionName])p.compress=!1;this._sender.send(O||P,p,h)}terminate(){if(this.readyState===E.CLOSED)return;if(this.readyState===E.CONNECTING){e(this,this._req,"WebSocket was closed before the connection was established");return}if(this._socket)this._readyState=E.CLOSING,this._socket.destroy()}}Object.defineProperty(E,"CONNECTING",{enumerable:!0,value:b.indexOf("CONNECTING")}),Object.defineProperty(E.prototype,"CONNECTING",{enumerable:!0,value:b.indexOf("CONNECTING")}),Object.defineProperty(E,"OPEN",{enumerable:!0,value:b.indexOf("OPEN")}),Object.defineProperty(E.prototype,"OPEN",{enumerable:!0,value:b.indexOf("OPEN")}),Object.defineProperty(E,"CLOSING",{enumerable:!0,value:b.indexOf("CLOSING")}),Object.defineProperty(E.prototype,"CLOSING",{enumerable:!0,value:b.indexOf("CLOSING")}),Object.defineProperty(E,"CLOSED",{enumerable:!0,value:b.indexOf("CLOSED")}),Object.defineProperty(E.prototype,"CLOSED",{enumerable:!0,value:b.indexOf("CLOSED")}),["binaryType","bufferedAmount","extensions","isPaused","protocol","readyState","url"].forEach((O)=>{Object.defineProperty(E.prototype,O,{enumerable:!0})}),["open","error","close","message"].forEach((O)=>{Object.defineProperty(E.prototype,`on${O}`,{enumerable:!0,get(){for(let S of this.listeners(O))if(S[C])return S[I];return null},set(S){for(let h of this.listeners(O))if(h[C]){this.removeListener(O,h);break}if(typeof S!=="function")return;this.addEventListener(O,S,{[C]:!0})}})}),E.prototype.addEventListener=B,E.prototype.removeEventListener=D,Q.exports=E;function u(O,S,h,p){let f={allowSynchronousEvents:!0,autoPong:!0,closeTimeout:j,protocolVersion:k[1],maxPayload:104857600,skipUTF8Validation:!1,perMessageDeflate:!0,followRedirects:!1,maxRedirects:10,...p,socketPath:void 0,hostname:void 0,protocol:void 0,timeout:void 0,method:"GET",host:void 0,path:void 0,port:void 0};if(O._autoPong=f.autoPong,O._closeTimeout=f.closeTimeout,!k.includes(f.protocolVersion))throw RangeError(`Unsupported protocol version: ${f.protocolVersion} (supported versions: ${k.join(", ")})`);let l;if(S instanceof U)l=S;else try{l=new U(S)}catch{throw SyntaxError(`Invalid URL: ${S}`)}if(l.protocol==="http:")l.protocol="ws:";else if(l.protocol==="https:")l.protocol="wss:";O._url=l.href;let E0=l.protocol==="wss:",I0=l.protocol==="ws+unix:",u0;if(l.protocol!=="ws:"&&!E0&&!I0)u0=`The URL's protocol must be one of "ws:", "wss:", "http:", "https:", or "ws+unix:"`;else if(I0&&!l.pathname)u0="The URL's pathname is empty";else if(l.hash)u0="The URL contains a fragment identifier";if(u0){let g=SyntaxError(u0);if(O._redirects===0)throw g;else{d(O,g);return}}let Z9=E0?443:80,J9=H(16).toString("base64"),Y9=E0?J.request:Y.request,p0=new Set,g0;if(f.createConnection=f.createConnection||(E0?T0:Y0),f.defaultPort=f.defaultPort||Z9,f.port=l.port||Z9,f.host=l.hostname.startsWith("[")?l.hostname.slice(1,-1):l.hostname,f.headers={...f.headers,"Sec-WebSocket-Version":f.protocolVersion,"Sec-WebSocket-Key":J9,Connection:"Upgrade",Upgrade:"websocket"},f.path=l.pathname+l.search,f.timeout=f.handshakeTimeout,f.perMessageDeflate)g0=new M({...f.perMessageDeflate,isServer:!1,maxPayload:f.maxPayload}),f.headers["Sec-WebSocket-Extensions"]=T({[M.extensionName]:g0.offer()});if(h.length){for(let g of h){if(typeof g!=="string"||!c.test(g)||p0.has(g))throw SyntaxError("An invalid or duplicated subprotocol was specified");p0.add(g)}f.headers["Sec-WebSocket-Protocol"]=h.join(",")}if(f.origin)if(f.protocolVersion<13)f.headers["Sec-WebSocket-Origin"]=f.origin;else f.headers.Origin=f.origin;if(l.username||l.password)f.auth=`${l.username}:${l.password}`;if(I0){let g=f.path.split(":");f.socketPath=g[0],f.path=g[1]}let n;if(f.followRedirects){if(O._redirects===0){O._originalIpc=I0,O._originalSecure=E0,O._originalHostOrSocketPath=I0?f.socketPath:l.host;let g=p&&p.headers;if(p={...p,headers:{}},g)for(let[t,x0]of Object.entries(g))p.headers[t.toLowerCase()]=x0}else if(O.listenerCount("redirect")===0){let g=I0?O._originalIpc?f.socketPath===O._originalHostOrSocketPath:!1:O._originalIpc?!1:l.host===O._originalHostOrSocketPath;if(!g||O._originalSecure&&!E0){if(delete f.headers.authorization,delete f.headers.cookie,!g)delete f.headers.host;f.auth=void 0}}if(f.auth&&!p.headers.authorization)p.headers.authorization="Basic "+Buffer.from(f.auth).toString("base64");if(n=O._req=Y9(f),O._redirects)O.emit("redirect",O.url,n)}else n=O._req=Y9(f);if(f.timeout)n.on("timeout",()=>{e(O,n,"Opening handshake has timed out")});if(n.on("error",(g)=>{if(n===null||n[y])return;n=O._req=null,d(O,g)}),n.on("response",(g)=>{let t=g.headers.location,x0=g.statusCode;if(t&&f.followRedirects&&x0>=300&&x0<400){if(++O._redirects>f.maxRedirects){e(O,n,"Maximum redirects exceeded");return}n.abort();let c0;try{c0=new U(t,S)}catch(X9){let q0=SyntaxError(`Invalid URL: ${t}`);d(O,q0);return}u(O,c0,h,p)}else if(!O.emit("unexpected-response",n,g))e(O,n,`Unexpected server response: ${g.statusCode}`)}),n.on("upgrade",(g,t,x0)=>{if(O.emit("upgrade",g),O.readyState!==E.CONNECTING)return;n=O._req=null;let c0=g.headers.upgrade;if(c0===void 0||c0.toLowerCase()!=="websocket"){e(O,t,"Invalid Upgrade header");return}let X9=K("sha1").update(J9+L).digest("base64");if(g.headers["sec-websocket-accept"]!==X9){e(O,t,"Invalid Sec-WebSocket-Accept header");return}let q0=g.headers["sec-websocket-protocol"],m0;if(q0!==void 0){if(!p0.size)m0="Server sent a subprotocol but none was requested";else if(!p0.has(q0))m0="Server sent an invalid subprotocol"}else if(p0.size)m0="Server sent no subprotocol";if(m0){e(O,t,m0);return}if(q0)O._protocol=q0;let G9=g.headers["sec-websocket-extensions"];if(G9!==void 0){if(!g0){e(O,t,"Server sent a Sec-WebSocket-Extensions header but no extension was requested");return}let y4;try{y4=q(G9)}catch(k4){e(O,t,"Invalid Sec-WebSocket-Extensions header");return}let V9=Object.keys(y4);if(V9.length!==1||V9[0]!==M.extensionName){e(O,t,"Server indicated an extension that was not requested");return}try{g0.accept(y4[M.extensionName])}catch(k4){e(O,t,"Invalid Sec-WebSocket-Extensions header");return}O._extensions[M.extensionName]=g0}O.setSocket(t,x0,{allowSynchronousEvents:f.allowSynchronousEvents,generateMask:f.generateMask,maxPayload:f.maxPayload,skipUTF8Validation:f.skipUTF8Validation})}),f.finishRequest)f.finishRequest(n,O);else n.end()}function d(O,S){O._readyState=E.CLOSING,O._errorEmitted=!0,O.emit("error",S),O.emitClose()}function Y0(O){return O.path=O.socketPath,X.connect(O)}function T0(O){if(O.path=void 0,!O.servername&&O.servername!=="")O.servername=X.isIP(O.host)?"":O.host;return G.connect(O)}function e(O,S,h){O._readyState=E.CLOSING;let p=Error(h);if(Error.captureStackTrace(p,e),S.setHeader){if(S[y]=!0,S.abort(),S.socket&&!S.socket.destroyed)S.socket.destroy();process.nextTick(d,O,p)}else S.destroy(p),S.once("error",O.emit.bind(O,"error")),S.once("close",O.emitClose.bind(O))}function S4(O,S,h){if(S){let p=R(S)?S.size:w(S).length;if(O._socket)O._sender._bufferedBytes+=p;else O._bufferedAmount+=p}if(h){let p=Error(`WebSocket is not open: readyState ${O.readyState} (${b[O.readyState]})`);process.nextTick(h,p)}}function c$(O,S){let h=this[V];if(h._closeFrameReceived=!0,h._closeMessage=S,h._closeCode=O,h._socket[V]===void 0)return;if(h._socket.removeListener("data",G4),process.nextTick(t8,h._socket),O===1005)h.close();else h.close(O,S)}function m$(){let O=this[V];if(!O.isPaused)O._socket.resume()}function l$(O){let S=this[V];if(S._socket[V]!==void 0)S._socket.removeListener("data",G4),process.nextTick(t8,S._socket),S.close(O[_]);if(!S._errorEmitted)S._errorEmitted=!0,S.emit("error",O)}function r8(){this[V].emitClose()}function d$(O,S){this[V].emit("message",O,S)}function i$(O){let S=this[V];if(S._autoPong)S.pong(O,!this._isServer,N);S.emit("ping",O)}function n$(O){this[V].emit("pong",O)}function t8(O){O.resume()}function o$(O){let S=this[V];if(S.readyState===E.CLOSED)return;if(S.readyState===E.OPEN)S._readyState=E.CLOSING,s8(S);if(this._socket.end(),!S._errorEmitted)S._errorEmitted=!0,S.emit("error",O)}function s8(O){O._closeTimer=setTimeout(O._socket.destroy.bind(O._socket),O._closeTimeout)}function e8(){let O=this[V];if(this.removeListener("close",e8),this.removeListener("data",G4),this.removeListener("end",$9),O._readyState=E.CLOSING,!this._readableState.endEmitted&&!O._closeFrameReceived&&!O._receiver._writableState.errorEmitted&&this._readableState.length!==0){let S=this.read(this._readableState.length);O._receiver.write(S)}if(O._receiver.end(),this[V]=void 0,clearTimeout(O._closeTimer),O._receiver._writableState.finished||O._receiver._writableState.errorEmitted)O.emitClose();else O._receiver.on("error",r8),O._receiver.on("finish",r8)}function G4(O){if(!this[V]._receiver.write(O))this.pause()}function $9(){let O=this[V];O._readyState=E.CLOSING,O._receiver.end(),this.end()}function Q9(){let O=this[V];if(this.removeListener("error",Q9),this.on("error",N),O)O._readyState=E.CLOSING,this.destroy()}}),d7=$0(($,Q)=>{var Z=v8(),{Duplex:J}=a("stream");function Y(K){K.emit("close")}function X(){if(!this.destroyed&&this._writableState.finished)this.destroy()}function G(K){if(this.removeListener("error",G),this.destroy(),this.listenerCount("error")===0)this.emit("error",K)}function H(K,W){let z=!0,U=new J({...W,autoDestroy:!1,emitClose:!1,objectMode:!1,writableObjectMode:!1});return K.on("message",function(F,A){let R=!A&&U._readableState.objectMode?F.toString():F;if(!U.push(R))K.pause()}),K.once("error",function(F){if(U.destroyed)return;z=!1,U.destroy(F)}),K.once("close",function(){if(U.destroyed)return;U.push(null)}),U._destroy=function(M,F){if(K.readyState===K.CLOSED){F(M),process.nextTick(Y,U);return}let A=!1;if(K.once("error",function(x){A=!0,F(x)}),K.once("close",function(){if(!A)F(M);process.nextTick(Y,U)}),z)K.terminate()},U._final=function(M){if(K.readyState===K.CONNECTING){K.once("open",function(){U._final(M)});return}if(K._socket===null)return;if(K._socket._writableState.finished){if(M(),U._readableState.endEmitted)U.destroy()}else K._socket.once("finish",function(){M()}),K.close()},U._read=function(){if(K.isPaused)K.resume()},U._write=function(M,F,A){if(K.readyState===K.CONNECTING){K.once("open",function(){U._write(M,F,A)});return}K.send(M,A)},U.on("end",X),U.on("error",G),U}Q.exports=H}),t6=$0(($,Q)=>{var{tokenChars:Z}=$4();function J(Y){let X=new Set,G=-1,H=-1,K=0;for(K;K<Y.length;K++){let z=Y.charCodeAt(K);if(H===-1&&Z[z]===1){if(G===-1)G=K}else if(K!==0&&(z===32||z===9)){if(H===-1&&G!==-1)H=K}else if(z===44){if(G===-1)throw SyntaxError(`Unexpected character at index ${K}`);if(H===-1)H=K;let U=Y.slice(G,H);if(X.has(U))throw SyntaxError(`The "${U}" subprotocol is duplicated`);X.add(U),G=H=-1}else throw SyntaxError(`Unexpected character at index ${K}`)}if(G===-1||H!==-1)throw SyntaxError("Unexpected end of input");let W=Y.slice(G,K);if(X.has(W))throw SyntaxError(`The "${W}" subprotocol is duplicated`);return X.add(W),X}Q.exports={parse:J}}),i7=$0(($,Q)=>{var Z=a("events"),J=a("http"),{Duplex:Y}=a("stream"),{createHash:X}=a("crypto"),G=f8(),H=e0(),K=t6(),W=v8(),{CLOSE_TIMEOUT:z,GUID:U,kWebSocket:M}=_0(),F=/^[+/0-9A-Za-z]{22}==$/,A=0,R=1,x=2;class j extends Z{constructor(V,N){super();if(V={allowSynchronousEvents:!0,autoPong:!0,maxPayload:104857600,skipUTF8Validation:!1,perMessageDeflate:!1,handleProtocols:null,clientTracking:!0,closeTimeout:z,verifyClient:null,noServer:!1,backlog:null,server:null,host:null,path:null,port:null,WebSocket:W,...V},V.port==null&&!V.server&&!V.noServer||V.port!=null&&(V.server||V.noServer)||V.server&&V.noServer)throw TypeError('One and only one of the "port", "server", or "noServer" options must be specified');if(V.port!=null)this._server=J.createServer((B,D)=>{let T=J.STATUS_CODES[426];D.writeHead(426,{"Content-Length":T.length,"Content-Type":"text/plain"}),D.end(T)}),this._server.listen(V.port,V.host,V.backlog,N);else if(V.server)this._server=V.server;if(this._server){let B=this.emit.bind(this,"connection");this._removeListeners=P(this._server,{listening:this.emit.bind(this,"listening"),error:this.emit.bind(this,"error"),upgrade:(D,T,q)=>{this.handleUpgrade(D,T,q,B)}})}if(V.perMessageDeflate===!0)V.perMessageDeflate={};if(V.clientTracking)this.clients=new Set,this._shouldEmitClose=!1;this.options=V,this._state=A}address(){if(this.options.noServer)throw Error('The server is operating in "noServer" mode');if(!this._server)return null;return this._server.address()}close(V){if(this._state===x){if(V)this.once("close",()=>{V(Error("The server is not running"))});process.nextTick(L,this);return}if(V)this.once("close",V);if(this._state===R)return;if(this._state=R,this.options.noServer||this.options.server){if(this._server)this._removeListeners(),this._removeListeners=this._server=null;if(this.clients)if(!this.clients.size)process.nextTick(L,this);else this._shouldEmitClose=!0;else process.nextTick(L,this)}else{let N=this._server;this._removeListeners(),this._removeListeners=this._server=null,N.close(()=>{L(this)})}}shouldHandle(V){if(this.options.path){let N=V.url.indexOf("?");if((N!==-1?V.url.slice(0,N):V.url)!==this.options.path)return!1}return!0}handleUpgrade(V,N,B,D){N.on("error",C);let T=V.headers["sec-websocket-key"],q=V.headers.upgrade,w=+V.headers["sec-websocket-version"];if(V.method!=="GET"){_(this,V,N,405,"Invalid HTTP method");return}if(q===void 0||q.toLowerCase()!=="websocket"){_(this,V,N,400,"Invalid Upgrade header");return}if(T===void 0||!F.test(T)){_(this,V,N,400,"Missing or invalid Sec-WebSocket-Key header");return}if(w!==13&&w!==8){_(this,V,N,400,"Missing or invalid Sec-WebSocket-Version header",{"Sec-WebSocket-Version":"13, 8"});return}if(!this.shouldHandle(V)){I(N,400);return}let y=V.headers["sec-websocket-protocol"],k=new Set;if(y!==void 0)try{k=K.parse(y)}catch(E){_(this,V,N,400,"Invalid Sec-WebSocket-Protocol header");return}let b=V.headers["sec-websocket-extensions"],c={};if(this.options.perMessageDeflate&&b!==void 0){let E=new H({...this.options.perMessageDeflate,isServer:!0,maxPayload:this.options.maxPayload});try{let u=G.parse(b);if(u[H.extensionName])E.accept(u[H.extensionName]),c[H.extensionName]=E}catch(u){_(this,V,N,400,"Invalid or unacceptable Sec-WebSocket-Extensions header");return}}if(this.options.verifyClient){let E={origin:V.headers[`${w===8?"sec-websocket-origin":"origin"}`],secure:!!(V.socket.authorized||V.socket.encrypted),req:V};if(this.options.verifyClient.length===2){this.options.verifyClient(E,(u,d,Y0,T0)=>{if(!u)return I(N,d||401,Y0,T0);this.completeUpgrade(c,T,k,V,N,B,D)});return}if(!this.options.verifyClient(E))return I(N,401)}this.completeUpgrade(c,T,k,V,N,B,D)}completeUpgrade(V,N,B,D,T,q,w){if(!T.readable||!T.writable)return T.destroy();if(T[M])throw Error("server.handleUpgrade() was called more than once with the same socket, possibly due to a misconfiguration");if(this._state>A)return I(T,503);let k=["HTTP/1.1 101 Switching Protocols","Upgrade: websocket","Connection: Upgrade",`Sec-WebSocket-Accept: ${X("sha1").update(N+U).digest("base64")}`],b=new this.options.WebSocket(null,void 0,this.options);if(B.size){let c=this.options.handleProtocols?this.options.handleProtocols(B,D):B.values().next().value;if(c)k.push(`Sec-WebSocket-Protocol: ${c}`),b._protocol=c}if(V[H.extensionName]){let c=V[H.extensionName].params,E=G.format({[H.extensionName]:[c]});k.push(`Sec-WebSocket-Extensions: ${E}`),b._extensions=V}if(this.emit("headers",k,D),T.write(k.concat(`\r
35
35
  `).join(`\r
36
- `)),T.removeListener("error",C),b.setSocket(T,q,{allowSynchronousEvents:this.options.allowSynchronousEvents,maxPayload:this.options.maxPayload,skipUTF8Validation:this.options.skipUTF8Validation}),this.clients)this.clients.add(b),b.on("close",()=>{if(this.clients.delete(b),this._shouldEmitClose&&!this.clients.size)process.nextTick(L,this)});S(b,P)}}Q.exports=j;function D(V,N){for(let B of Object.keys(N))V.on(B,N[B]);return function(){for(let P of Object.keys(N))V.removeListener(P,N[P])}}function L(V){V._state=x,V.emit("close")}function C(){this.destroy()}function I(V,N,B,P){B=B||J.STATUS_CODES[N],P={Connection:"close","Content-Type":"text/html","Content-Length":Buffer.byteLength(B),...P},V.once("finish",V.destroy),V.end(`HTTP/1.1 ${N} ${J.STATUS_CODES[N]}\r
37
- `+Object.keys(P).map((T)=>`${T}: ${P[T]}`).join(`\r
36
+ `)),T.removeListener("error",C),b.setSocket(T,q,{allowSynchronousEvents:this.options.allowSynchronousEvents,maxPayload:this.options.maxPayload,skipUTF8Validation:this.options.skipUTF8Validation}),this.clients)this.clients.add(b),b.on("close",()=>{if(this.clients.delete(b),this._shouldEmitClose&&!this.clients.size)process.nextTick(L,this)});w(b,D)}}Q.exports=j;function P(V,N){for(let B of Object.keys(N))V.on(B,N[B]);return function(){for(let D of Object.keys(N))V.removeListener(D,N[D])}}function L(V){V._state=x,V.emit("close")}function C(){this.destroy()}function I(V,N,B,D){B=B||J.STATUS_CODES[N],D={Connection:"close","Content-Type":"text/html","Content-Length":Buffer.byteLength(B),...D},V.once("finish",V.destroy),V.end(`HTTP/1.1 ${N} ${J.STATUS_CODES[N]}\r
37
+ `+Object.keys(D).map((T)=>`${T}: ${D[T]}`).join(`\r
38
38
  `)+`\r
39
39
  \r
40
- `+B)}function _(V,N,B,P,T,q){if(V.listenerCount("wsClientError")){let S=Error(T);Error.captureStackTrace(S,_),V.emit("wsClientError",S,B,N)}else I(B,P,T,q)}});EJ=M0(c7(),1),IJ=M0(k8(),1),xJ=M0(e0(),1),qJ=M0(o6(),1),wJ=M0(a6(),1),SJ=M0(r6(),1),XZ=M0(f8(),1),X$=M0(m7(),1),i6=XZ.default;BZ={"Network.setUserAgentOverride":"Page.overrideUserAgent","Network.setCacheDisabled":"Network.setResourceCachingDisabled"},LZ={"Network.requestWillBeSent":{walltime:"wallTime"}},OZ={hasUserGesture:!1,redirectHasExtraInfo:!1},AZ={hasExtraInfo:!1},jZ={encodedDataLength:0,shouldReportCorbBlocking:!1},RZ={initialPriority:"Medium",referrerPolicy:"origin"},CZ={connectionReused:!1,connectionId:0,fromDiskCache:!1,fromServiceWorker:!1,encodedDataLength:0};kZ={"media-rule":"mediaRule","media-import-rule":"importRule","media-style-node":"inlineSheet","media-link-node":"linkedSheet"};uZ={protocolVersion:"1.3",product:"Safari/inspect-webkit",revision:"605.1.15",userAgent:"Mozilla/5.0 (iPhone; CPU iPhone OS like Mac OS X) AppleWebKit/605.1.15 Safari/inspect-webkit",jsVersion:""};nZ=["Animation","Autofill","Audits","ServiceWorker","Profiler","HeapProfiler","Storage","Tethering","Tracing","BackgroundService","FedCm","DeviceAccess","WebAuthn","Cast","Database","ApplicationCache","BackgroundFetch","DeviceOrientation","EventBreakpoints","FileSystem","HeadlessExperimental","IndexedDB","Memory","PerformanceTimeline","Performance","Preload","Schema","Security","SystemInfo","WebAudio"],oZ={"Network.setAttachDebugStack":{},"Network.emulateNetworkConditionsByRule":{ruleIds:[]},"Network.overrideNetworkState":{},"Network.clearAcceptedEncodingsOverride":{},"Network.setAcceptedEncodings":{},"Network.enableReportingApi":{},"Overlay.setShowHinge":{},"Overlay.setShowViewportSizeOnResize":{},"Overlay.setShowGridOverlays":{},"Overlay.setShowFlexOverlays":{},"Overlay.setShowScrollSnapOverlays":{},"Overlay.setShowContainerQueryOverlays":{},"Overlay.setShowIsolatedElements":{},"Overlay.setPausedInDebuggerMessage":{},"Overlay.setShowAdHighlights":{},"Overlay.setShowDebugBorders":{},"Overlay.setShowFPSCounter":{},"Overlay.setShowLayoutShiftRegions":{},"Overlay.setShowScrollBottleneckRects":{},"Overlay.setShowHitTestBorders":{},"Overlay.setShowWebVitals":{},"CSS.trackComputedStyleUpdates":{},"CSS.takeComputedStyleUpdates":{nodeIds:[]},"CSS.startRuleUsageTracking":{},"CSS.stopRuleUsageTracking":{ruleUsage:[]},"CSS.takeCoverageDelta":{coverage:[],timestamp:0},"Page.setAdBlockingEnabled":{},"Page.removeScriptToEvaluateOnNewDocument":{},"Page.setBypassCSP":{},"Page.setInterceptFileChooserDialog":{},"Page.setPrerenderingAllowed":{},"Page.setRPHRegistrationMode":{},"Page.setSPCTransactionMode":{},"Emulation.setEmulatedVisionDeficiency":{},"Emulation.setFocusEmulationEnabled":{},"Emulation.setAutoDarkModeOverride":{},"Emulation.setAutomationOverride":{},"Emulation.setLocaleOverride":{},"Emulation.setTimezoneOverride":{},"Emulation.setVisibleSize":{},"Emulation.setIdleOverride":{},"Emulation.clearIdleOverride":{},"Emulation.setGeolocationOverride":{},"Emulation.clearGeolocationOverride":{},"Emulation.setSensorOverrideEnabled":{},"Emulation.setSensorOverrideReadings":{},"Emulation.setHardwareConcurrencyOverride":{},"Emulation.setNavigatorOverrides":{},"Emulation.setPageScaleFactor":{},"Emulation.setScrollbarsHidden":{},"Emulation.setDocumentCookieDisabled":{},"DOMDebugger.setBreakOnCSPViolation":{},"Runtime.addBinding":{},"Runtime.removeBinding":{},"Debugger.setReturnValue":{},"Debugger.setBlackboxExecutionContexts":{},"Debugger.setInstrumentationBreakpoint":{},"DOM.markUndoableState":{},"DOM.undo":{},"DOM.redo":{},"DOM.copyTo":{nodeId:0},"DOM.collectClassNamesFromSubtree":{classNames:[]},"Accessibility.enable":{},"Accessibility.disable":{},"Accessibility.getFullAXTree":{nodes:[]},"Accessibility.getRootAXNode":{node:null},"Accessibility.getPartialAXTree":{nodes:[]},"Accessibility.queryAXTree":{nodes:[]},"Accessibility.getAXNodeAndAncestors":{nodes:[]},"Accessibility.getChildAXNodes":{nodes:[]}};rZ={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;"}});import{readdirSync as _2,readFileSync as F2,existsSync as y$,unlinkSync as L$,watch as N2}from"fs";import{execSync as Y4,spawn as O$,exec as U2,execFile as P0}from"child_process";import{tmpdir as B2}from"os";import{join as n8}from"path";import{createServer as L2}from"net";import{createHash as O2,randomBytes as A2,timingSafeEqual as j2}from"crypto";import{WebSocket as A$}from"ws";var f4="Accessibility unavailable on this simulator.";import{createRequire as J5}from"module";import{dirname as b4,join as h4}from"path";import{existsSync as Y5}from"fs";import{fileURLToPath as F9}from"url";var K4={mjpegFps:60,mjpegQuality:0.7,maxDimension:0,h264Bitrate:6000000,h264Fps:60},$5={transport:"http",httpCodec:"auto",webRtcCodec:"h264",...K4};function W9($){return typeof $==="number"&&Number.isFinite($)?$:null}function z9($,Q,Z,J){let Y=W9($);return Y==null?Q:Math.min(J,Math.max(Z,Y))}function V4($,Q,Z,J){return Math.round(z9($,Q,Z,J))}function Q5($){if(!Array.isArray($)||$.length>16)return null;let Q=[];for(let Z of $){if(!Z||typeof Z!=="object")return null;let J=Z.urls;if(!Array.isArray(J)||J.length===0||J.length>16||!J.every((G)=>typeof G==="string"&&G.length<=2048&&/^(stun|stuns|turn|turns):/i.test(G)))return null;let{username:Y,credential:X}=Z;if(Y!==void 0&&typeof Y!=="string")return null;if(X!==void 0&&typeof X!=="string")return null;Q.push({urls:J,...typeof Y==="string"?{username:Y}:{},...typeof X==="string"?{credential:X}:{}})}return Q}var Z5=new Set(["mjpegFps","mjpegQuality","maxDimension","h264Bitrate","h264Fps"]);function H9($){if(!$||typeof $!=="object"||Array.isArray($))return null;let Q=$,Z=Object.keys(Q);if(Z.length===0||Z.some((J)=>!Z5.has(J)))return null;for(let J of["mjpegFps","mjpegQuality","maxDimension","h264Bitrate","h264Fps"])if(J in Q&&W9(Q[J])==null)return null;return Q}function K9($={},Q=$5){let J=Object.prototype.hasOwnProperty.call($,"iceServers")?Q5($.iceServers):Q.iceServers,Y=J===null?Q.iceServers:J&&J.length>0?J:void 0;return{transport:$.transport==="http"||$.transport==="webrtc"?$.transport:Q.transport,httpCodec:$.httpCodec==="auto"||$.httpCodec==="mjpeg"||$.httpCodec==="h264"?$.httpCodec:Q.httpCodec,webRtcCodec:$.webRtcCodec==="vp8"||$.webRtcCodec==="vp9"||$.webRtcCodec==="h264"?$.webRtcCodec:Q.webRtcCodec,...Y?{iceServers:Y}:{},...v4($,Q)}}function v4($={},Q=K4){return{mjpegFps:V4($.mjpegFps,Q.mjpegFps,1,120),mjpegQuality:z9($.mjpegQuality,Q.mjpegQuality,0.05,1),maxDimension:V4($.maxDimension,Q.maxDimension,0,4096),h264Bitrate:V4($.h264Bitrate,Q.h264Bitrate,1e5,50000000),h264Fps:V4($.h264Fps,Q.h264Fps,1,120)}}function M9($){return{mjpegFps:$.mjpegFps,mjpegQuality:$.mjpegQuality,maxDimension:$.maxDimension,h264Bitrate:$.h264Bitrate,h264Fps:$.h264Fps}}function _9($){if($?.transport==="webrtc")return K9({transport:"webrtc",webRtcCodec:$.codec,iceServers:$.iceServers});return K9({transport:"http",httpCodec:$?.codec??"auto"})}var X5=J5(import.meta.url),G5=0,V5=1,K5=1,W5=2,d0={portrait:1,portraitUpsideDown:2,landscapeRight:3,landscapeLeft:4};function z5(){let $=[h4(b4(process.execPath),"native","serve-sim-native.node"),h4(b4(F9(import.meta.url)),"native","serve-sim-native.node"),h4(b4(F9(import.meta.url)),"..","dist","native","serve-sim-native.node")];for(let Q of $)if(Y5(Q))return Q;throw Error(`serve-sim-native.node not found. Looked in:
40
+ `+B)}function _(V,N,B,D,T,q){if(V.listenerCount("wsClientError")){let w=Error(T);Error.captureStackTrace(w,_),V.emit("wsClientError",w,B,N)}else I(B,D,T,q)}});xJ=M0(d7(),1),qJ=M0(f8(),1),wJ=M0(e0(),1),SJ=M0(a6(),1),yJ=M0(r6(),1),kJ=M0(t6(),1),KZ=M0(v8(),1),G$=M0(i7(),1),n6=KZ.default;AZ={"Network.setUserAgentOverride":"Page.overrideUserAgent","Network.setCacheDisabled":"Network.setResourceCachingDisabled"},jZ={"Network.requestWillBeSent":{walltime:"wallTime"}},RZ={hasUserGesture:!1,redirectHasExtraInfo:!1},CZ={hasExtraInfo:!1},DZ={encodedDataLength:0,shouldReportCorbBlocking:!1},PZ={initialPriority:"Medium",referrerPolicy:"origin"},TZ={connectionReused:!1,connectionId:0,fromDiskCache:!1,fromServiceWorker:!1,encodedDataLength:0};bZ={"media-rule":"mediaRule","media-import-rule":"importRule","media-style-node":"inlineSheet","media-link-node":"linkedSheet"};cZ={protocolVersion:"1.3",product:"Safari/inspect-webkit",revision:"605.1.15",userAgent:"Mozilla/5.0 (iPhone; CPU iPhone OS like Mac OS X) AppleWebKit/605.1.15 Safari/inspect-webkit",jsVersion:""};rZ=["Animation","Autofill","Audits","ServiceWorker","Profiler","HeapProfiler","Storage","Tethering","Tracing","BackgroundService","FedCm","DeviceAccess","WebAuthn","Cast","Database","ApplicationCache","BackgroundFetch","DeviceOrientation","EventBreakpoints","FileSystem","HeadlessExperimental","IndexedDB","Memory","PerformanceTimeline","Performance","Preload","Schema","Security","SystemInfo","WebAudio"],tZ={"Network.setAttachDebugStack":{},"Network.emulateNetworkConditionsByRule":{ruleIds:[]},"Network.overrideNetworkState":{},"Network.clearAcceptedEncodingsOverride":{},"Network.setAcceptedEncodings":{},"Network.enableReportingApi":{},"Overlay.setShowHinge":{},"Overlay.setShowViewportSizeOnResize":{},"Overlay.setShowGridOverlays":{},"Overlay.setShowFlexOverlays":{},"Overlay.setShowScrollSnapOverlays":{},"Overlay.setShowContainerQueryOverlays":{},"Overlay.setShowIsolatedElements":{},"Overlay.setPausedInDebuggerMessage":{},"Overlay.setShowAdHighlights":{},"Overlay.setShowDebugBorders":{},"Overlay.setShowFPSCounter":{},"Overlay.setShowLayoutShiftRegions":{},"Overlay.setShowScrollBottleneckRects":{},"Overlay.setShowHitTestBorders":{},"Overlay.setShowWebVitals":{},"CSS.trackComputedStyleUpdates":{},"CSS.takeComputedStyleUpdates":{nodeIds:[]},"CSS.startRuleUsageTracking":{},"CSS.stopRuleUsageTracking":{ruleUsage:[]},"CSS.takeCoverageDelta":{coverage:[],timestamp:0},"Page.setAdBlockingEnabled":{},"Page.removeScriptToEvaluateOnNewDocument":{},"Page.setBypassCSP":{},"Page.setInterceptFileChooserDialog":{},"Page.setPrerenderingAllowed":{},"Page.setRPHRegistrationMode":{},"Page.setSPCTransactionMode":{},"Emulation.setEmulatedVisionDeficiency":{},"Emulation.setFocusEmulationEnabled":{},"Emulation.setAutoDarkModeOverride":{},"Emulation.setAutomationOverride":{},"Emulation.setLocaleOverride":{},"Emulation.setTimezoneOverride":{},"Emulation.setVisibleSize":{},"Emulation.setIdleOverride":{},"Emulation.clearIdleOverride":{},"Emulation.setGeolocationOverride":{},"Emulation.clearGeolocationOverride":{},"Emulation.setSensorOverrideEnabled":{},"Emulation.setSensorOverrideReadings":{},"Emulation.setHardwareConcurrencyOverride":{},"Emulation.setNavigatorOverrides":{},"Emulation.setPageScaleFactor":{},"Emulation.setScrollbarsHidden":{},"Emulation.setDocumentCookieDisabled":{},"DOMDebugger.setBreakOnCSPViolation":{},"Runtime.addBinding":{},"Runtime.removeBinding":{},"Debugger.setReturnValue":{},"Debugger.setBlackboxExecutionContexts":{},"Debugger.setInstrumentationBreakpoint":{},"DOM.markUndoableState":{},"DOM.undo":{},"DOM.redo":{},"DOM.copyTo":{nodeId:0},"DOM.collectClassNamesFromSubtree":{classNames:[]},"Accessibility.enable":{},"Accessibility.disable":{},"Accessibility.getFullAXTree":{nodes:[]},"Accessibility.getRootAXNode":{node:null},"Accessibility.getPartialAXTree":{nodes:[]},"Accessibility.queryAXTree":{nodes:[]},"Accessibility.getAXNodeAndAncestors":{nodes:[]},"Accessibility.getChildAXNodes":{nodes:[]}};eZ={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;"}});import{readdirSync as U2,readFileSync as B2,existsSync as f$,unlinkSync as O$,watch as L2}from"fs";import{readFile as O2,unlink as A2}from"fs/promises";import{execSync as Y4,spawn as A$,exec as j2,execFile as N0}from"child_process";import{tmpdir as v$}from"os";import{join as w4}from"path";import{createServer as R2}from"net";import{createHash as C2,randomBytes as j$,timingSafeEqual as D2}from"crypto";import{WebSocket as R$}from"ws";var v4="Accessibility unavailable on this simulator.";import{createRequire as G5}from"module";import{dirname as h4,join as u4}from"path";import{existsSync as V5}from"fs";import{fileURLToPath as N9}from"url";var K4={mjpegFps:60,mjpegQuality:0.7,maxDimension:0,h264Bitrate:6000000,h264Fps:60},J5={transport:"http",httpCodec:"auto",webRtcCodec:"h264",...K4};function z9($){return typeof $==="number"&&Number.isFinite($)?$:null}function H9($,Q,Z,J){let Y=z9($);return Y==null?Q:Math.min(J,Math.max(Z,Y))}function V4($,Q,Z,J){return Math.round(H9($,Q,Z,J))}function Y5($){if(!Array.isArray($)||$.length>16)return null;let Q=[];for(let Z of $){if(!Z||typeof Z!=="object")return null;let J=Z.urls;if(!Array.isArray(J)||J.length===0||J.length>16||!J.every((G)=>typeof G==="string"&&G.length<=2048&&/^(stun|stuns|turn|turns):/i.test(G)))return null;let{username:Y,credential:X}=Z;if(Y!==void 0&&typeof Y!=="string")return null;if(X!==void 0&&typeof X!=="string")return null;Q.push({urls:J,...typeof Y==="string"?{username:Y}:{},...typeof X==="string"?{credential:X}:{}})}return Q}var X5=new Set(["mjpegFps","mjpegQuality","maxDimension","h264Bitrate","h264Fps"]);function M9($){if(!$||typeof $!=="object"||Array.isArray($))return null;let Q=$,Z=Object.keys(Q);if(Z.length===0||Z.some((J)=>!X5.has(J)))return null;for(let J of["mjpegFps","mjpegQuality","maxDimension","h264Bitrate","h264Fps"])if(J in Q&&z9(Q[J])==null)return null;return Q}function W9($={},Q=J5){let J=Object.prototype.hasOwnProperty.call($,"iceServers")?Y5($.iceServers):Q.iceServers,Y=J===null?Q.iceServers:J&&J.length>0?J:void 0;return{transport:$.transport==="http"||$.transport==="webrtc"?$.transport:Q.transport,httpCodec:$.httpCodec==="auto"||$.httpCodec==="mjpeg"||$.httpCodec==="h264"?$.httpCodec:Q.httpCodec,webRtcCodec:$.webRtcCodec==="vp8"||$.webRtcCodec==="vp9"||$.webRtcCodec==="h264"?$.webRtcCodec:Q.webRtcCodec,...Y?{iceServers:Y}:{},...b4($,Q)}}function b4($={},Q=K4){return{mjpegFps:V4($.mjpegFps,Q.mjpegFps,1,120),mjpegQuality:H9($.mjpegQuality,Q.mjpegQuality,0.05,1),maxDimension:V4($.maxDimension,Q.maxDimension,0,4096),h264Bitrate:V4($.h264Bitrate,Q.h264Bitrate,1e5,50000000),h264Fps:V4($.h264Fps,Q.h264Fps,1,120)}}function _9($){return{mjpegFps:$.mjpegFps,mjpegQuality:$.mjpegQuality,maxDimension:$.maxDimension,h264Bitrate:$.h264Bitrate,h264Fps:$.h264Fps}}function F9($){if($?.transport==="webrtc")return W9({transport:"webrtc",webRtcCodec:$.codec,iceServers:$.iceServers});return W9({transport:"http",httpCodec:$?.codec??"auto"})}var K5=G5(import.meta.url),W5=0,z5=1,H5=1,M5=2,d0={portrait:1,portraitUpsideDown:2,landscapeRight:3,landscapeLeft:4};function _5(){let $=[u4(h4(process.execPath),"native","serve-sim-native.node"),u4(h4(N9(import.meta.url)),"native","serve-sim-native.node"),u4(h4(N9(import.meta.url)),"..","dist","native","serve-sim-native.node")];for(let Q of $)if(V5(Q))return Q;throw Error(`serve-sim-native.node not found. Looked in:
41
41
  ${$.join(`
42
42
  `)}
43
- Run \`bun run build.ts\` to build the native addon.`)}var u4;function W4(){if(!u4)u4=X5(z5());return u4}class p4{handle;constructor($){this.handle=new(W4()).SimHID($)}async guard($,Q,Z){try{return await Q()}catch(J){return console.error(`[hid] ${$} ignored bad input:`,J instanceof Error?J.message:J),Z}}touch($,Q,Z,J,Y,X=0){return this.guard("touch",()=>this.handle.touch($,Q,Z,J,Y,X),void 0)}multiTouch($,Q,Z,J,Y,X,G){return this.guard("multiTouch",()=>this.handle.multiTouch($,Q,Z,J,Y,X,G),void 0)}button($){return this.guard("button",()=>this.handle.button($),void 0)}buttonHid($,Q,Z="press"){return this.guard("buttonHid",()=>this.handle.buttonHid($,Q,Z),void 0)}key($,Q){return this.guard("key",()=>this.handle.key($,Q),void 0)}scroll($,Q,Z,J,Y,X){return this.guard("scroll",()=>this.handle.scroll($,Q,Y??NaN,X??NaN,Z,J),void 0)}digitalCrown($){return this.guard("digitalCrown",()=>this.handle.digitalCrown($),void 0)}orientation($){return this.guard("orientation",()=>this.handle.orientation($),!1)}memoryWarning(){return this.guard("memoryWarning",()=>this.handle.memoryWarning(),void 0)}softwareKeyboard(){return this.guard("softwareKeyboard",()=>this.handle.softwareKeyboard(),void 0)}caDebug($,Q){return this.guard("caDebug",()=>this.handle.caDebug($,Q),!1)}}class g4{handle;constructor($,Q=K4){this.handle=new(W4()).SimCapture($,Q.mjpegFps,Q.mjpegQuality,Q.maxDimension,Q.h264Fps,Q.h264Bitrate)}start(){return this.handle.start()}updateStreamSettings($){return this.handle.updateStreamSettings($.mjpegFps,$.mjpegQuality,$.maxDimension,$.h264Fps,$.h264Bitrate)}subscribeMjpeg($){return this.handle.subscribe(G5,(Q,Z,J,Y)=>{return $({data:Q,width:Z,height:J})})}subscribeAvcc($){return this.handle.subscribe(V5,(Q,Z,J,Y)=>{return $({data:Q,width:Z,height:J,isDescription:(Y&K5)!==0,isKeyframe:(Y&W5)!==0})})}async handleWebRTCOffer($){return JSON.parse(await this.handle.handleWebRTCOffer(JSON.stringify($)))}closeWebRTCSession($){return this.handle.closeWebRTCSession($)}screenSize(){return this.handle.screenSize()}stop(){return this.handle.stop()}}function z4($){return W4().axDescribe($)}function H4($){return W4().axFrontmost($)}var c4=500,N9=500,H5=2000,M5=15000;function _5($){return $[0]?.frame??{x:0,y:0,width:1,height:1}}function F5($,Q){return Math.abs($.x-Q.x)<0.5&&Math.abs($.y-Q.y)<0.5&&Math.abs($.width-Q.width)<0.5&&Math.abs($.height-Q.height)<0.5}function N5($){let Q=_5($),Z=[],J=(Y,X)=>{if(Z.length>=c4)return;let G=Y.frame;if(!F5(G,Q))Z.push({id:Y.AXUniqueId??X,path:X,label:Y.AXLabel??"",value:Y.AXValue??"",role:Y.role_description,type:Y.type,enabled:Y.enabled!==!1,frame:G});for(let K=0;K<Y.children.length&&Z.length<c4;K++)J(Y.children[K],`${X}.${K}`)};for(let Y=0;Y<$.length&&Z.length<c4;Y++)J($[Y],String(Y));return{screen:{width:Q.width,height:Q.height},elements:Z}}async function U5($){let Q;try{Q=JSON.parse(await z4($))}catch{return{screen:{width:1,height:1},elements:[],errors:[f4]}}return N5(Q)}function B5($){return $?.errors?.includes(f4)??!1}function L5($){return $.elements.length>0&&$.screen.width>1&&$.screen.height>1}async function O5($){let Q=[];try{let Z=await U5($);if(Z.errors?.length)return Z;if(!L5(Z))throw Error(`native AX returned ${Z.elements.length} elements in ${Z.screen.width}x${Z.screen.height} AX space`);return{...Z,errors:Q}}catch(Z){Q.push(Z.message||String(Z))}return{screen:{width:1,height:1},elements:[],errors:Q}}function A5($){return`data: ${JSON.stringify($)}
43
+ Run \`bun run build.ts\` to build the native addon.`)}var p4;function W4(){if(!p4)p4=K5(_5());return p4}class g4{handle;constructor($){this.handle=new(W4()).SimHID($)}async guard($,Q,Z){try{return await Q()}catch(J){return console.error(`[hid] ${$} ignored bad input:`,J instanceof Error?J.message:J),Z}}touch($,Q,Z,J,Y,X=0){return this.guard("touch",()=>this.handle.touch($,Q,Z,J,Y,X),void 0)}multiTouch($,Q,Z,J,Y,X,G){return this.guard("multiTouch",()=>this.handle.multiTouch($,Q,Z,J,Y,X,G),void 0)}button($){return this.guard("button",()=>this.handle.button($),void 0)}buttonHid($,Q,Z="press"){return this.guard("buttonHid",()=>this.handle.buttonHid($,Q,Z),void 0)}key($,Q){return this.guard("key",()=>this.handle.key($,Q),void 0)}scroll($,Q,Z,J,Y,X){return this.guard("scroll",()=>this.handle.scroll($,Q,Y??NaN,X??NaN,Z,J),void 0)}digitalCrown($){return this.guard("digitalCrown",()=>this.handle.digitalCrown($),void 0)}orientation($){return this.guard("orientation",()=>this.handle.orientation($),!1)}memoryWarning(){return this.guard("memoryWarning",()=>this.handle.memoryWarning(),void 0)}softwareKeyboard(){return this.guard("softwareKeyboard",()=>this.handle.softwareKeyboard(),void 0)}caDebug($,Q){return this.guard("caDebug",()=>this.handle.caDebug($,Q),!1)}}class c4{handle;constructor($,Q=K4){this.handle=new(W4()).SimCapture($,Q.mjpegFps,Q.mjpegQuality,Q.maxDimension,Q.h264Fps,Q.h264Bitrate)}start(){return this.handle.start()}updateStreamSettings($){return this.handle.updateStreamSettings($.mjpegFps,$.mjpegQuality,$.maxDimension,$.h264Fps,$.h264Bitrate)}subscribeMjpeg($){return this.handle.subscribe(W5,(Q,Z,J,Y)=>{return $({data:Q,width:Z,height:J})})}subscribeAvcc($){return this.handle.subscribe(z5,(Q,Z,J,Y)=>{return $({data:Q,width:Z,height:J,isDescription:(Y&H5)!==0,isKeyframe:(Y&M5)!==0})})}async handleWebRTCOffer($){return JSON.parse(await this.handle.handleWebRTCOffer(JSON.stringify($)))}closeWebRTCSession($){return this.handle.closeWebRTCSession($)}screenSize(){return this.handle.screenSize()}stop(){return this.handle.stop()}}function z4($){return W4().axDescribe($)}function H4($){return W4().axFrontmost($)}var m4=500,U9=500,F5=2000,N5=15000;function U5($){return $[0]?.frame??{x:0,y:0,width:1,height:1}}function B5($,Q){return Math.abs($.x-Q.x)<0.5&&Math.abs($.y-Q.y)<0.5&&Math.abs($.width-Q.width)<0.5&&Math.abs($.height-Q.height)<0.5}function L5($){let Q=U5($),Z=[],J=(Y,X)=>{if(Z.length>=m4)return;let G=Y.frame;if(!B5(G,Q))Z.push({id:Y.AXUniqueId??X,path:X,label:Y.AXLabel??"",value:Y.AXValue??"",role:Y.role_description,type:Y.type,enabled:Y.enabled!==!1,frame:G});for(let K=0;K<Y.children.length&&Z.length<m4;K++)J(Y.children[K],`${X}.${K}`)};for(let Y=0;Y<$.length&&Z.length<m4;Y++)J($[Y],String(Y));return{screen:{width:Q.width,height:Q.height},elements:Z}}async function O5($){let Q;try{Q=JSON.parse(await z4($))}catch{return{screen:{width:1,height:1},elements:[],errors:[v4]}}return L5(Q)}function A5($){return $?.errors?.includes(v4)??!1}function j5($){return $.elements.length>0&&$.screen.width>1&&$.screen.height>1}async function R5($){let Q=[];try{let Z=await O5($);if(Z.errors?.length)return Z;if(!j5(Z))throw Error(`native AX returned ${Z.elements.length} elements in ${Z.screen.width}x${Z.screen.height} AX space`);return{...Z,errors:Q}}catch(Z){Q.push(Z.message||String(Z))}return{screen:{width:1,height:1},elements:[],errors:Q}}function C5($){return`data: ${JSON.stringify($)}
44
44
 
45
- `}function j5({udid:$}){let Q=new Set,Z=null,J=null,Y=N9,X=!1,G=!1,H=()=>{if(G||Q.size===0||Z)return;Z=setTimeout(K,Y)},K=async()=>{if(Z=null,G||X||Q.size===0){H();return}X=!0;try{let W=await O5($),z=A5(W);if(z!==J){for(let U of Q)U.write(z);Y=N9}else Y=Math.min(Y*2,H5);if(J=z,B5(W))Y=M5}finally{X=!1,H()}};return{addClient(W){if(G)return()=>{};if(Q.add(W),J)W.write(J);return K(),()=>{if(Q.delete(W),Q.size===0&&Z)clearTimeout(Z),Z=null}},dispose(){if(G)return;if(G=!0,Z)clearTimeout(Z),Z=null;Q.clear(),J=null}}}function U9(){let $=new Map;return{get(Q){let Z=$.get(Q);if(Z)return Z;let J=j5({udid:Q});return $.set(Q,J),J},prune(Q){let Z=Q instanceof Set?Q:new Set(Q);for(let[J,Y]of $)if(!Z.has(J))Y.dispose(),$.delete(J)},size(){return $.size}}}import{createHash as E5}from"crypto";import{existsSync as O9,readFileSync as A9}from"fs";import{join as l4}from"path";import{tmpdir as R5}from"os";import{join as m4}from"path";import{readdirSync as B1,mkdirSync as C5,writeFileSync as D5,renameSync as P5}from"fs";var i0=m4(R5(),"serve-sim"),L1=m4(i0,"server.json");function T5($){return m4(i0,`server-${$}.json`)}function B9($,Q,Z="/",J="127.0.0.1",Y){let X=J==="0.0.0.0"||J==="::"?"127.0.0.1":J,G=Z.replace(/^\/+/,"").replace(/\/+$/,""),H=G===""?"":`/${G}`;return{pid:process.pid,port:Q,device:$,url:`http://${X}:${Q}`,streamUrl:`http://${X}:${Q}${H}/helper/${$}/stream.mjpeg`,wsUrl:`ws://${X}:${Q}${H}/helper/${$}/ws`,...Y?{streamSettings:Y}:{}}}function L9($){C5(i0,{recursive:!0});let Q=T5($.device),Z=`${Q}.${process.pid}.tmp`;D5(Z,JSON.stringify($,null,2),{mode:384}),P5(Z,Q)}var j9=l4(i0,"simcam"),I5=3000;function x5($){return l4(j9,`${$}.pid`)}function q5($){return l4(j9,`${$}.bundles.json`)}function R9($){return`/tmp/serve-sim-cam-${E5("sha1").update($).digest("hex").slice(0,12)}.sock`}function w5($){try{return process.kill($,0),!0}catch{return!1}}function d4($){try{let Q=Number(A9(x5($),"utf-8").trim());return Number.isInteger(Q)&&Q>0?Q:null}catch{return null}}function S5($){if(!$||typeof $!=="object"||Array.isArray($))throw Error("invalid camera helper reply");return $}async function y5($,Q){let Z=R9($);if(!O9(Z))throw Error("camera helper socket not found");let J=await import("net");return new Promise((Y,X)=>{let G=J.createConnection(Z);G.setEncoding("utf8");let H="",K=!1,W,z=(U,M)=>{if(K)return;if(K=!0,W)clearTimeout(W);if(U)X(U);else Y(M??{})};G.on("data",(U)=>{H+=U;let M=H.indexOf(`
46
- `);if(M<0)return;try{z(void 0,S5(JSON.parse(H.slice(0,M))))}catch(F){z(F)}G.end()}),G.on("error",z),G.on("close",()=>z(Error("socket closed"))),W=setTimeout(()=>{G.destroy(),z(Error("helper timeout"))},I5),G.write(JSON.stringify(Q)+`
47
- `)})}function k5($){let Q=d4($);return Q!==null&&w5(Q)&&O9(R9($))}function f5($){let Q;try{let J=JSON.parse(A9(q5($),"utf-8"));if(!J||typeof J!=="object"||Array.isArray(J))return[];let Y=J;if(typeof Y.helperPid!=="number"||!Array.isArray(Y.bundleIds))return[];Q={helperPid:Y.helperPid,bundleIds:Y.bundleIds}}catch{return[]}let Z=d4($);if(Z===null||Q.helperPid!==Z)return[];return Q.bundleIds.filter((J)=>typeof J==="string")}async function C9($){if(!k5($))return{udid:$,alive:!1};let Q=d4($),Z=f5($);try{return{...await y5($,{action:"status"}),udid:$,alive:!0,helperPid:Q,bundleIds:Z}}catch(J){return{udid:$,alive:!0,helperPid:Q,bundleIds:Z,error:J instanceof Error?J.message:String(J)}}}var v5={40:"Enter",41:"Escape",42:"Backspace",43:"Tab",44:"Space",45:"-",46:"=",47:"[",48:"]",49:"\\",50:"#",51:";",52:"'",53:"`",54:",",55:".",56:"/",57:"CapsLock",58:"F1",59:"F2",60:"F3",61:"F4",62:"F5",63:"F6",64:"F7",65:"F8",66:"F9",67:"F10",68:"F11",69:"F12",70:"PrintScreen",71:"ScrollLock",72:"Pause",73:"Insert",74:"Home",75:"PageUp",76:"Delete",77:"End",78:"PageDown",79:"ArrowRight",80:"ArrowLeft",81:"ArrowDown",82:"ArrowUp",83:"NumLock",84:"NumpadDivide",85:"NumpadMultiply",86:"NumpadSubtract",87:"NumpadAdd",88:"NumpadEnter",89:"Numpad1",90:"Numpad2",91:"Numpad3",92:"Numpad4",93:"Numpad5",94:"Numpad6",95:"Numpad7",96:"Numpad8",97:"Numpad9",98:"Numpad0",99:"NumpadDecimal",224:"ControlLeft",225:"ShiftLeft",226:"AltLeft",227:"MetaLeft",228:"ControlRight",229:"ShiftRight",230:"AltRight",231:"MetaRight"},b5=1,X0=[],n4=new Set;function P9($){for(let Q of n4)try{Q($)}catch{}}function K0($){let Q={...$,id:b5++,timestamp:$.timestamp??new Date().toISOString(),msg:$.msg??$.summary};if(X0.push(Q),X0.length>500)X0=X0.slice(X0.length-500);return P9(Q),Q}function a4($,Q,Z={}){let J=X0.findIndex((X)=>X.id===$);if(J<0)return null;let Y={...X0[J],...Q,id:$,...Q.summary!=null&&Q.msg==null?{msg:Q.summary}:{}};if(X0[J]=Y,Z.notify!==!1)P9(Y);return Y}function r4($={}){let{device:Q,sinceId:Z}=$,J=h5($.limit),Y=X0.filter((X)=>{if(Q&&X.device!==Q)return!1;if(Z!=null&&X.id<=Z)return!1;return!0});return Y.slice(Math.max(0,Y.length-J))}function T9($){return n4.add($),()=>n4.delete($)}function E9($,Q,Z,J){let Y=u5(Z);if(!Y)return null;switch(Q){case 3:{let X=U0(Y.type),G=w0(Y.x),H=w0(Y.y);if(!X||G==null||H==null)return null;return{device:$,source:"hid",kind:"touch",action:X,summary:`Touch ${X} ${S0(G,H)}`,details:i4({...Y,x:G,y:H},J)}}case 4:{let X=U0(Y.button);if(!X)return null;let G=U0(Y.phase)??"press";return{device:$,source:"hid",kind:"button",action:X,summary:G==="press"?`Button ${X}`:`Button ${X} ${G}`,details:{...Y,phase:G}}}case 5:{let X=U0(Y.type);if(!X)return null;return{device:$,source:"hid",kind:"multi-touch",action:X,summary:`Multi-touch ${X}`,details:i4(Y,J)}}case 6:{let X=U0(Y.type),G=w0(Y.usage);if(!X||G==null)return null;let H=g5(G),K=c5(G),W={...Y};if(K)delete W.usage,W.key="character",W.redacted=!0;else W.usage=G,W.key=H;return{device:$,source:"hid",kind:"key",action:X,summary:K?`Key ${X} character`:`Key ${X} ${H}`,details:W}}case 7:{let X=U0(Y.orientation);if(!X)return null;return{device:$,source:"hid",kind:"rotate",action:X,summary:`Rotate ${X}`,details:Y}}case 8:{let X=U0(Y.option),G=p5(Y.enabled);if(!X||G==null)return null;return{device:$,source:"hid",kind:"ca-debug",action:X,summary:`CoreAnimation ${X} ${G?"on":"off"}`,details:{...Y,enabled:G}}}case 9:return{device:$,source:"hid",kind:"memory-warning",action:"trigger",summary:"Memory warning"};case 10:{let X=w0(Y.delta);if(X==null)return null;return{device:$,source:"hid",kind:"digital-crown",action:"rotate",summary:`Digital Crown ${X>0?"up":"down"}`,details:{...Y,delta:X}}}case 11:{let X=w0(Y.dx),G=w0(Y.dy);if(X==null||G==null)return null;return{device:$,source:"hid",kind:"scroll",action:"wheel",summary:`Scroll ${m5(X,G)}`,details:i4({...Y,dx:X,dy:G},J)}}case 12:return{device:$,source:"hid",kind:"software-keyboard",action:"toggle",summary:"Software keyboard"};default:return null}}function I9($,Q){let Z=d5($);if(Z.length===0)return null;if(i5(Z))return null;let J=x9(Q?.exitCode),Y=l5(Q),X=n5(Z);if(X){let{verb:H,args:K}=X;if(H==="install"&&K.length>=2){let[W]=K;return{device:W,source:"exec",kind:"app",action:"install",status:J,summary:"Install app",details:Y}}if(H==="addmedia"&&K.length>=2){let[W]=K;return{device:W,source:"exec",kind:"media",action:"addmedia",status:J,summary:"Add media",details:Y}}if(H==="launch"&&K.length>=2){let[W,z]=K,U=z==="com.apple.springboard";return{device:W,source:"exec",kind:U?"button":"app",action:U?"home":"launch",status:J,summary:U?"Home":`Launch ${z}`,details:{...Y,bundleId:z}}}if(H==="terminate"&&K.length>=2){let[W,z]=K;return{device:W,source:"exec",kind:"app",action:"terminate",status:J,summary:`Terminate ${z}`,details:{...Y,bundleId:z}}}if(H==="io"&&K.length>=2&&K[1]==="screenshot")return{device:K[0],source:"exec",kind:"screenshot",action:"capture",status:J,summary:"Screenshot",details:Y}}let G=o5(Z);if(G){let{verb:H,args:K}=G,W=a5(K);if(H==="button"){let z=n0(K)??"home";return{device:W,source:"exec",kind:"button",action:z,status:J,summary:`Button ${z}`,details:Y}}if(H==="tap"){let[z,U]=K;return{device:W,source:"exec",kind:"tap",action:"tap",status:J,summary:`Tap ${S0(Number(z),Number(U))}`,details:Y}}if(H==="gesture")return{device:W,source:"exec",kind:"gesture",action:"send",status:J,summary:"Gesture",details:Y};if(H==="rotate"){let z=n0(K);return{device:W,source:"exec",kind:"rotate",action:z,status:J,summary:z?`Rotate ${z}`:"Rotate",details:Y}}if(H==="memory-warning")return{device:W,source:"exec",kind:"memory-warning",action:"trigger",status:J,summary:"Memory warning",details:Y};if(H==="ca-debug"){let z=n0(K),U=K.find((M)=>M==="on"||M==="off");return{device:W,source:"exec",kind:"ca-debug",action:z,status:J,summary:`CoreAnimation ${z??"debug"}${U?` ${U}`:""}`,details:Y}}if(H==="camera"){let z=t5(K);if(z==="status"||z==="list-webcams")return null;return{device:W,source:"exec",kind:"camera",action:z??"start",status:J,summary:z?`Camera ${z}`:"Camera",details:Y}}if(H==="ui"){let z=n0(K);return{device:W,source:"exec",kind:"ui-setting",action:z,status:J,summary:z?`UI ${z}`:"UI setting",details:Y}}}if(Z[0]==="osascript"&&$.includes('menu item "Home"'))return{source:"exec",kind:"button",action:"home",status:J,summary:"Home",details:Y};return null}function h5($){if(!Number.isFinite($??NaN))return 500;return Math.min(500,Math.max(1,Math.floor($)))}function u5($){if(!$||typeof $!=="object"||Array.isArray($))return null;return $}function U0($){return typeof $==="string"&&$.length>0?$:null}function w0($){return typeof $==="number"&&Number.isFinite($)?$:null}function p5($){return typeof $==="boolean"?$:null}function g5($){if($>=4&&$<=29)return String.fromCharCode(97+$-4);if($>=30&&$<=38)return String($-29);if($===39)return"0";return v5[$]??`usage ${$}`}function c5($){return $>=4&&$<=39||$>=44&&$<=56||$>=84&&$<=87||$>=89&&$<=99}function i4($,Q){if(!Q||Q.width<=0||Q.height<=0)return $;return{...$,screen:Q}}function S0($,Q){if(!Number.isFinite($)||!Number.isFinite(Q))return"";return`${o4($)},${o4(Q)}`}function m5($,Q){return`${D9($)},${D9(Q)}`}function o4($){return $.toFixed(3).replace(/0+$/,"").replace(/\.$/,"")}function D9($){let Q=o4($);return $>0?`+${Q}`:Q}function x9($){if($==null)return;return $===0?"ok":"error"}function l5($){return x9($?.exitCode)?{exitCode:$?.exitCode}:{}}function d5($){let Q=[],Z="",J=null,Y=!1;for(let X of $){if(Y){Z+=X,Y=!1;continue}if(X==="\\"&&J!=="'"){Y=!0;continue}if((X==="'"||X==='"')&&J===null){J=X;continue}if(X===J){J=null;continue}if(/\s/.test(X)&&J===null){if(Z)Q.push(Z),Z="";continue}Z+=X}if(Z)Q.push(Z);return Q}function i5($){if($[0]==="bash"&&$[1]==="-c"&&$[2]?.startsWith("echo "))return!0;if($[0]==="bash"&&$[1]==="-c"&&$[2]?.startsWith("rm -f "))return!0;if($[0]==="rm"&&$[1]==="-f")return!0;return!1}function n5($){let Q=$.findIndex((J)=>J==="simctl");if(Q<0||$[Q-1]!=="xcrun")return null;let Z=$[Q+1];if(!Z)return null;return{verb:Z,args:$.slice(Q+2)}}function o5($){let Q=$.findIndex((J)=>J==="serve-sim"||/(?:^|\/)serve-sim(?:\.js)?$/.test(J));if(Q<0)return null;let Z=$[Q+1];if(!Z)return null;return{verb:Z,args:$.slice(Q+2)}}function a5($){for(let Q=0;Q<$.length;Q++){let Z=$[Q];if((Z==="-d"||Z==="--device")&&$[Q+1])return $[Q+1]}return}function n0($){for(let Q=0;Q<$.length;Q++){let Z=$[Q];if(Z==="-d"||Z==="--device"){Q++;continue}if(Z.startsWith("-"))continue;return Z}return}function r5($){if($.includes("--list-webcams"))return"list-webcams";if($.includes("--stop-webcam"))return"stop-webcam";return n0($)}function t5($){let Q=r5($);if(Q==="status"||Q==="list-webcams"||Q==="stop-webcam")return Q;return"start"}var w9=262144;class m extends Error{status;code;constructor($,Q,Z){super($);this.status=Q;this.code=Z;this.name="WebRtcSignalingError"}}function t4($){return typeof $==="object"&&$!==null&&!Array.isArray($)}function S9($){if(typeof $!=="string"||!/^[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i.test($))throw new m("Invalid WebRTC session ID",400,"invalid_session_id");return $}function q9($,Q,Z){if($===void 0)return;if(typeof $!=="string"||$.length>Z)throw new m(`Invalid ${Q}`,400,"invalid_offer");return $}function s5($){if($===void 0)return;if(!Array.isArray($)||$.length>16)throw new m("Invalid ICE servers",400,"invalid_offer");return $.map((Q)=>{if(!t4(Q)||!Array.isArray(Q.urls)||Q.urls.length===0||Q.urls.length>16)throw new m("Invalid ICE server",400,"invalid_offer");let Z=Q.urls.map((X)=>{if(typeof X!=="string"||X.length===0||X.length>2048||!/^(stun|stuns|turn|turns):/i.test(X))throw new m("Invalid ICE server URL",400,"invalid_offer");return X}),J=q9(Q.username,"ICE username",1024),Y=q9(Q.credential,"ICE credential",1024);return{urls:Z,...J!==void 0?{username:J}:{},...Y!==void 0?{credential:Y}:{}}})}function y9($){if(!t4($)||$.type!=="offer")throw new m("Expected a WebRTC offer",400,"invalid_offer");if(typeof $.sdp!=="string"||$.sdp.length===0||$.sdp.length>245760)throw new m("Invalid WebRTC offer SDP",400,"invalid_offer");let Q=$.codec;if(Q!==void 0&&Q!=="vp8"&&Q!=="vp9"&&Q!=="h264")throw new m("Invalid WebRTC codec",400,"invalid_offer");return{type:"offer",sdp:$.sdp,sessionId:S9($.sessionId),...Q!==void 0?{codec:Q}:{},...$.iceServers!==void 0?{iceServers:s5($.iceServers)}:{}}}function k9($){if(!t4($))throw new m("Invalid WebRTC close request",400,"invalid_close_request");return{sessionId:S9($.sessionId)}}var o0={"Access-Control-Allow-Origin":"*","Access-Control-Allow-Methods":"GET, POST, PATCH, OPTIONS","Access-Control-Allow-Headers":"Content-Type"};function Q8($){$.writeHead(204,o0),$.end()}var e5=4,$Q=130,f9=Buffer.from(`\r
48
- `,"ascii"),QQ=0.004;function M4($){return`Drag ${S0($.startX,$.startY)} -> ${S0($.lastX,$.lastY)}`}function v9($){let Q=$.lastX-$.startX,Z=$.lastY-$.startY;return Math.hypot(Q,Z)>QQ}function b9($){return{startX:$.x,startY:$.y,lastX:$.x,lastY:$.y,moveCount:0,edge:$.edge}}function ZQ($){return Buffer.from(`--frame\r
45
+ `}function D5({udid:$}){let Q=new Set,Z=null,J=null,Y=U9,X=!1,G=!1,H=()=>{if(G||Q.size===0||Z)return;Z=setTimeout(K,Y)},K=async()=>{if(Z=null,G||X||Q.size===0){H();return}X=!0;try{let W=await R5($),z=C5(W);if(z!==J){for(let U of Q)U.write(z);Y=U9}else Y=Math.min(Y*2,F5);if(J=z,A5(W))Y=N5}finally{X=!1,H()}};return{addClient(W){if(G)return()=>{};if(Q.add(W),J)W.write(J);return K(),()=>{if(Q.delete(W),Q.size===0&&Z)clearTimeout(Z),Z=null}},dispose(){if(G)return;if(G=!0,Z)clearTimeout(Z),Z=null;Q.clear(),J=null}}}function B9(){let $=new Map;return{get(Q){let Z=$.get(Q);if(Z)return Z;let J=D5({udid:Q});return $.set(Q,J),J},prune(Q){let Z=Q instanceof Set?Q:new Set(Q);for(let[J,Y]of $)if(!Z.has(J))Y.dispose(),$.delete(J)},size(){return $.size}}}import{createHash as q5}from"crypto";import{existsSync as A9,readFileSync as j9}from"fs";import{join as d4}from"path";import{tmpdir as P5}from"os";import{join as l4}from"path";import{readdirSync as O1,mkdirSync as T5,writeFileSync as E5,renameSync as I5}from"fs";var i0=l4(P5(),"serve-sim"),A1=l4(i0,"server.json");function x5($){return l4(i0,`server-${$}.json`)}function L9($,Q,Z="/",J="127.0.0.1",Y){let X=J==="0.0.0.0"||J==="::"?"127.0.0.1":J,G=Z.replace(/^\/+/,"").replace(/\/+$/,""),H=G===""?"":`/${G}`;return{pid:process.pid,port:Q,device:$,url:`http://${X}:${Q}`,streamUrl:`http://${X}:${Q}${H}/helper/${$}/stream.mjpeg`,wsUrl:`ws://${X}:${Q}${H}/helper/${$}/ws`,...Y?{streamSettings:Y}:{}}}function O9($){T5(i0,{recursive:!0});let Q=x5($.device),Z=`${Q}.${process.pid}.tmp`;E5(Z,JSON.stringify($,null,2),{mode:384}),I5(Z,Q)}var R9=d4(i0,"simcam"),w5=3000;function S5($){return d4(R9,`${$}.pid`)}function y5($){return d4(R9,`${$}.bundles.json`)}function C9($){return`/tmp/serve-sim-cam-${q5("sha1").update($).digest("hex").slice(0,12)}.sock`}function k5($){try{return process.kill($,0),!0}catch{return!1}}function i4($){try{let Q=Number(j9(S5($),"utf-8").trim());return Number.isInteger(Q)&&Q>0?Q:null}catch{return null}}function f5($){if(!$||typeof $!=="object"||Array.isArray($))throw Error("invalid camera helper reply");return $}async function v5($,Q){let Z=C9($);if(!A9(Z))throw Error("camera helper socket not found");let J=await import("net");return new Promise((Y,X)=>{let G=J.createConnection(Z);G.setEncoding("utf8");let H="",K=!1,W,z=(U,M)=>{if(K)return;if(K=!0,W)clearTimeout(W);if(U)X(U);else Y(M??{})};G.on("data",(U)=>{H+=U;let M=H.indexOf(`
46
+ `);if(M<0)return;try{z(void 0,f5(JSON.parse(H.slice(0,M))))}catch(F){z(F)}G.end()}),G.on("error",z),G.on("close",()=>z(Error("socket closed"))),W=setTimeout(()=>{G.destroy(),z(Error("helper timeout"))},w5),G.write(JSON.stringify(Q)+`
47
+ `)})}function b5($){let Q=i4($);return Q!==null&&k5(Q)&&A9(C9($))}function h5($){let Q;try{let J=JSON.parse(j9(y5($),"utf-8"));if(!J||typeof J!=="object"||Array.isArray(J))return[];let Y=J;if(typeof Y.helperPid!=="number"||!Array.isArray(Y.bundleIds))return[];Q={helperPid:Y.helperPid,bundleIds:Y.bundleIds}}catch{return[]}let Z=i4($);if(Z===null||Q.helperPid!==Z)return[];return Q.bundleIds.filter((J)=>typeof J==="string")}async function D9($){if(!b5($))return{udid:$,alive:!1};let Q=i4($),Z=h5($);try{return{...await v5($,{action:"status"}),udid:$,alive:!0,helperPid:Q,bundleIds:Z}}catch(J){return{udid:$,alive:!0,helperPid:Q,bundleIds:Z,error:J instanceof Error?J.message:String(J)}}}var u5={40:"Enter",41:"Escape",42:"Backspace",43:"Tab",44:"Space",45:"-",46:"=",47:"[",48:"]",49:"\\",50:"#",51:";",52:"'",53:"`",54:",",55:".",56:"/",57:"CapsLock",58:"F1",59:"F2",60:"F3",61:"F4",62:"F5",63:"F6",64:"F7",65:"F8",66:"F9",67:"F10",68:"F11",69:"F12",70:"PrintScreen",71:"ScrollLock",72:"Pause",73:"Insert",74:"Home",75:"PageUp",76:"Delete",77:"End",78:"PageDown",79:"ArrowRight",80:"ArrowLeft",81:"ArrowDown",82:"ArrowUp",83:"NumLock",84:"NumpadDivide",85:"NumpadMultiply",86:"NumpadSubtract",87:"NumpadAdd",88:"NumpadEnter",89:"Numpad1",90:"Numpad2",91:"Numpad3",92:"Numpad4",93:"Numpad5",94:"Numpad6",95:"Numpad7",96:"Numpad8",97:"Numpad9",98:"Numpad0",99:"NumpadDecimal",224:"ControlLeft",225:"ShiftLeft",226:"AltLeft",227:"MetaLeft",228:"ControlRight",229:"ShiftRight",230:"AltRight",231:"MetaRight"},p5=1,X0=[],o4=new Set;function T9($){for(let Q of o4)try{Q($)}catch{}}function K0($){let Q={...$,id:p5++,timestamp:$.timestamp??new Date().toISOString(),msg:$.msg??$.summary};if(X0.push(Q),X0.length>500)X0=X0.slice(X0.length-500);return T9(Q),Q}function r4($,Q,Z={}){let J=X0.findIndex((X)=>X.id===$);if(J<0)return null;let Y={...X0[J],...Q,id:$,...Q.summary!=null&&Q.msg==null?{msg:Q.summary}:{}};if(X0[J]=Y,Z.notify!==!1)T9(Y);return Y}function t4($={}){let{device:Q,sinceId:Z}=$,J=g5($.limit),Y=X0.filter((X)=>{if(Q&&X.device!==Q)return!1;if(Z!=null&&X.id<=Z)return!1;return!0});return Y.slice(Math.max(0,Y.length-J))}function E9($){return o4.add($),()=>o4.delete($)}function I9($,Q,Z,J){let Y=c5(Z);if(!Y)return null;switch(Q){case 3:{let X=B0(Y.type),G=w0(Y.x),H=w0(Y.y);if(!X||G==null||H==null)return null;return{device:$,source:"hid",kind:"touch",action:X,summary:`Touch ${X} ${S0(G,H)}`,details:n4({...Y,x:G,y:H},J)}}case 4:{let X=B0(Y.button);if(!X)return null;let G=B0(Y.phase)??"press";return{device:$,source:"hid",kind:"button",action:X,summary:G==="press"?`Button ${X}`:`Button ${X} ${G}`,details:{...Y,phase:G}}}case 5:{let X=B0(Y.type);if(!X)return null;return{device:$,source:"hid",kind:"multi-touch",action:X,summary:`Multi-touch ${X}`,details:n4(Y,J)}}case 6:{let X=B0(Y.type),G=w0(Y.usage);if(!X||G==null)return null;let H=l5(G),K=d5(G),W={...Y};if(K)delete W.usage,W.key="character",W.redacted=!0;else W.usage=G,W.key=H;return{device:$,source:"hid",kind:"key",action:X,summary:K?`Key ${X} character`:`Key ${X} ${H}`,details:W}}case 7:{let X=B0(Y.orientation);if(!X)return null;return{device:$,source:"hid",kind:"rotate",action:X,summary:`Rotate ${X}`,details:Y}}case 8:{let X=B0(Y.option),G=m5(Y.enabled);if(!X||G==null)return null;return{device:$,source:"hid",kind:"ca-debug",action:X,summary:`CoreAnimation ${X} ${G?"on":"off"}`,details:{...Y,enabled:G}}}case 9:return{device:$,source:"hid",kind:"memory-warning",action:"trigger",summary:"Memory warning"};case 10:{let X=w0(Y.delta);if(X==null)return null;return{device:$,source:"hid",kind:"digital-crown",action:"rotate",summary:`Digital Crown ${X>0?"up":"down"}`,details:{...Y,delta:X}}}case 11:{let X=w0(Y.dx),G=w0(Y.dy);if(X==null||G==null)return null;return{device:$,source:"hid",kind:"scroll",action:"wheel",summary:`Scroll ${i5(X,G)}`,details:n4({...Y,dx:X,dy:G},J)}}case 12:return{device:$,source:"hid",kind:"software-keyboard",action:"toggle",summary:"Software keyboard"};default:return null}}function x9($,Q){let Z=o5($);if(Z.length===0)return null;if(a5(Z))return null;let J=q9(Q?.exitCode),Y=n5(Q),X=r5(Z);if(X){let{verb:H,args:K}=X;if(H==="install"&&K.length>=2){let[W]=K;return{device:W,source:"exec",kind:"app",action:"install",status:J,summary:"Install app",details:Y}}if(H==="addmedia"&&K.length>=2){let[W]=K;return{device:W,source:"exec",kind:"media",action:"addmedia",status:J,summary:"Add media",details:Y}}if(H==="launch"&&K.length>=2){let[W,z]=K,U=z==="com.apple.springboard";return{device:W,source:"exec",kind:U?"button":"app",action:U?"home":"launch",status:J,summary:U?"Home":`Launch ${z}`,details:{...Y,bundleId:z}}}if(H==="terminate"&&K.length>=2){let[W,z]=K;return{device:W,source:"exec",kind:"app",action:"terminate",status:J,summary:`Terminate ${z}`,details:{...Y,bundleId:z}}}if(H==="io"&&K.length>=2&&K[1]==="screenshot")return{device:K[0],source:"exec",kind:"screenshot",action:"capture",status:J,summary:"Screenshot",details:Y}}let G=t5(Z);if(G){let{verb:H,args:K}=G,W=s5(K);if(H==="button"){let z=n0(K)??"home";return{device:W,source:"exec",kind:"button",action:z,status:J,summary:`Button ${z}`,details:Y}}if(H==="tap"){let[z,U]=K;return{device:W,source:"exec",kind:"tap",action:"tap",status:J,summary:`Tap ${S0(Number(z),Number(U))}`,details:Y}}if(H==="gesture")return{device:W,source:"exec",kind:"gesture",action:"send",status:J,summary:"Gesture",details:Y};if(H==="rotate"){let z=n0(K);return{device:W,source:"exec",kind:"rotate",action:z,status:J,summary:z?`Rotate ${z}`:"Rotate",details:Y}}if(H==="memory-warning")return{device:W,source:"exec",kind:"memory-warning",action:"trigger",status:J,summary:"Memory warning",details:Y};if(H==="ca-debug"){let z=n0(K),U=K.find((M)=>M==="on"||M==="off");return{device:W,source:"exec",kind:"ca-debug",action:z,status:J,summary:`CoreAnimation ${z??"debug"}${U?` ${U}`:""}`,details:Y}}if(H==="camera"){let z=$Q(K);if(z==="status"||z==="list-webcams")return null;return{device:W,source:"exec",kind:"camera",action:z??"start",status:J,summary:z?`Camera ${z}`:"Camera",details:Y}}if(H==="ui"){let z=n0(K);return{device:W,source:"exec",kind:"ui-setting",action:z,status:J,summary:z?`UI ${z}`:"UI setting",details:Y}}}if(Z[0]==="osascript"&&$.includes('menu item "Home"'))return{source:"exec",kind:"button",action:"home",status:J,summary:"Home",details:Y};return null}function g5($){if(!Number.isFinite($??NaN))return 500;return Math.min(500,Math.max(1,Math.floor($)))}function c5($){if(!$||typeof $!=="object"||Array.isArray($))return null;return $}function B0($){return typeof $==="string"&&$.length>0?$:null}function w0($){return typeof $==="number"&&Number.isFinite($)?$:null}function m5($){return typeof $==="boolean"?$:null}function l5($){if($>=4&&$<=29)return String.fromCharCode(97+$-4);if($>=30&&$<=38)return String($-29);if($===39)return"0";return u5[$]??`usage ${$}`}function d5($){return $>=4&&$<=39||$>=44&&$<=56||$>=84&&$<=87||$>=89&&$<=99}function n4($,Q){if(!Q||Q.width<=0||Q.height<=0)return $;return{...$,screen:Q}}function S0($,Q){if(!Number.isFinite($)||!Number.isFinite(Q))return"";return`${a4($)},${a4(Q)}`}function i5($,Q){return`${P9($)},${P9(Q)}`}function a4($){return $.toFixed(3).replace(/0+$/,"").replace(/\.$/,"")}function P9($){let Q=a4($);return $>0?`+${Q}`:Q}function q9($){if($==null)return;return $===0?"ok":"error"}function n5($){return q9($?.exitCode)?{exitCode:$?.exitCode}:{}}function o5($){let Q=[],Z="",J=null,Y=!1;for(let X of $){if(Y){Z+=X,Y=!1;continue}if(X==="\\"&&J!=="'"){Y=!0;continue}if((X==="'"||X==='"')&&J===null){J=X;continue}if(X===J){J=null;continue}if(/\s/.test(X)&&J===null){if(Z)Q.push(Z),Z="";continue}Z+=X}if(Z)Q.push(Z);return Q}function a5($){if($[0]==="bash"&&$[1]==="-c"&&$[2]?.startsWith("echo "))return!0;if($[0]==="bash"&&$[1]==="-c"&&$[2]?.startsWith("rm -f "))return!0;if($[0]==="rm"&&$[1]==="-f")return!0;return!1}function r5($){let Q=$.findIndex((J)=>J==="simctl");if(Q<0||$[Q-1]!=="xcrun")return null;let Z=$[Q+1];if(!Z)return null;return{verb:Z,args:$.slice(Q+2)}}function t5($){let Q=$.findIndex((J)=>J==="serve-sim"||/(?:^|\/)serve-sim(?:\.js)?$/.test(J));if(Q<0)return null;let Z=$[Q+1];if(!Z)return null;return{verb:Z,args:$.slice(Q+2)}}function s5($){for(let Q=0;Q<$.length;Q++){let Z=$[Q];if((Z==="-d"||Z==="--device")&&$[Q+1])return $[Q+1]}return}function n0($){for(let Q=0;Q<$.length;Q++){let Z=$[Q];if(Z==="-d"||Z==="--device"){Q++;continue}if(Z.startsWith("-"))continue;return Z}return}function e5($){if($.includes("--list-webcams"))return"list-webcams";if($.includes("--stop-webcam"))return"stop-webcam";return n0($)}function $Q($){let Q=e5($);if(Q==="status"||Q==="list-webcams"||Q==="stop-webcam")return Q;return"start"}var S9=262144;class m extends Error{status;code;constructor($,Q,Z){super($);this.status=Q;this.code=Z;this.name="WebRtcSignalingError"}}function s4($){return typeof $==="object"&&$!==null&&!Array.isArray($)}function y9($){if(typeof $!=="string"||!/^[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i.test($))throw new m("Invalid WebRTC session ID",400,"invalid_session_id");return $}function w9($,Q,Z){if($===void 0)return;if(typeof $!=="string"||$.length>Z)throw new m(`Invalid ${Q}`,400,"invalid_offer");return $}function QQ($){if($===void 0)return;if(!Array.isArray($)||$.length>16)throw new m("Invalid ICE servers",400,"invalid_offer");return $.map((Q)=>{if(!s4(Q)||!Array.isArray(Q.urls)||Q.urls.length===0||Q.urls.length>16)throw new m("Invalid ICE server",400,"invalid_offer");let Z=Q.urls.map((X)=>{if(typeof X!=="string"||X.length===0||X.length>2048||!/^(stun|stuns|turn|turns):/i.test(X))throw new m("Invalid ICE server URL",400,"invalid_offer");return X}),J=w9(Q.username,"ICE username",1024),Y=w9(Q.credential,"ICE credential",1024);return{urls:Z,...J!==void 0?{username:J}:{},...Y!==void 0?{credential:Y}:{}}})}function k9($){if(!s4($)||$.type!=="offer")throw new m("Expected a WebRTC offer",400,"invalid_offer");if(typeof $.sdp!=="string"||$.sdp.length===0||$.sdp.length>245760)throw new m("Invalid WebRTC offer SDP",400,"invalid_offer");let Q=$.codec;if(Q!==void 0&&Q!=="vp8"&&Q!=="vp9"&&Q!=="h264")throw new m("Invalid WebRTC codec",400,"invalid_offer");return{type:"offer",sdp:$.sdp,sessionId:y9($.sessionId),...Q!==void 0?{codec:Q}:{},...$.iceServers!==void 0?{iceServers:QQ($.iceServers)}:{}}}function f9($){if(!s4($))throw new m("Invalid WebRTC close request",400,"invalid_close_request");return{sessionId:y9($.sessionId)}}var o0={"Access-Control-Allow-Origin":"*","Access-Control-Allow-Methods":"GET, POST, PATCH, OPTIONS","Access-Control-Allow-Headers":"Content-Type"};function Z8($){$.writeHead(204,o0),$.end()}var ZQ=4,JQ=130,v9=Buffer.from(`\r
48
+ `,"ascii"),YQ=0.004;function M4($){return`Drag ${S0($.startX,$.startY)} -> ${S0($.lastX,$.lastY)}`}function b9($){let Q=$.lastX-$.startX,Z=$.lastY-$.startY;return Math.hypot(Q,Z)>YQ}function h9($){return{startX:$.x,startY:$.y,lastX:$.x,lastY:$.y,moveCount:0,edge:$.edge}}function XQ($){return Buffer.from(`--frame\r
49
49
  Content-Type: image/jpeg\r
50
50
  Content-Length: ${$}\r
51
51
  \r
52
- `,"ascii")}function h9($){let Q=Buffer.allocUnsafe(5+$.length);return Q.writeUInt32BE($.length+1,0),Q[4]=e5,Q.set($,5),Q}var JQ={portrait:d0.portrait,portrait_upside_down:d0.portraitUpsideDown,landscape_left:d0.landscapeLeft,landscape_right:d0.landscapeRight};function s4($){if($.writableEnded||$.destroyed||!$.writableNeedDrain)return Promise.resolve();return new Promise((Q)=>{let Z=()=>{J(),Q()},J=()=>{$.off("drain",Z),$.off("close",Z),$.off("error",Z)};$.once("drain",Z),$.once("close",Z),$.once("error",Z)})}function YQ($,Q){if($.writableEnded||$.destroyed)return Promise.resolve();return new Promise((Z)=>{let J=!1,Y=()=>{if(J)return;J=!0,$.off("close",Y),$.off("error",Y),Z()};$.once("close",Y),$.once("error",Y);try{$.write(Q,Y)}catch{Y()}})}function e4($,Q,Z=new m("WebRTC signaling body is too large",413,"body_too_large")){return new Promise((J,Y)=>{let X=[],G=0,H=!1,K=(W)=>{if(H)return;H=!0,Y(W)};$.on("data",(W)=>{if(H)return;let z=Buffer.isBuffer(W)?W:Buffer.from(W);if(G+=z.length,G>Q){K(Z);return}X.push(z)}),$.on("end",()=>{if(H)return;H=!0,J(Buffer.concat(X))}),$.on("aborted",()=>K(new m("Request aborted",400,"request_aborted"))),$.on("error",K)})}function u9($){let Q=$.headers["content-type"];return(Array.isArray(Q)?Q[0]:Q)?.split(";",1)[0]?.trim().toLowerCase()==="application/json"}function $8($,Q){try{return JSON.parse($.toString("utf8"))}catch{throw new m("Malformed JSON request body",400,Q)}}class p9{udid;capture;hid;captureStart;phase="unstarted";width=0;height=0;orientation="portrait";latestJpegBuffer=null;latestJpegLength=0;hidSockets=new Set;touchGestureLog;encoderSettings;streamSettingsUpdate=Promise.resolve();constructor($,Q){this.udid=$;let Z=_9(Q);this.encoderSettings=M9(Z),this.hid=new p4($),this.capture=new g4($,this.encoderSettings)}start(){if(this.phase==="running")return this.captureStart??Promise.resolve();if(this.phase==="stopped")return Promise.reject(Error("Capture session is stopped"));return this.phase="running",this.captureStart=this.capture.start(),this.captureStart}close(){if(this.phase!=="running")return;for(let $ of this.hidSockets)$.close();this.hidSockets.clear(),this.capture.stop().catch(()=>{}),this.phase="stopped"}onSharedMjpegFrame($){let{width:Q,height:Z,data:J}=$;if(this.updateScreenSize(Q,Z),!this.latestJpegBuffer||this.latestJpegBuffer.length<J.length){let Y=this.latestJpegBuffer?.length??0;this.latestJpegBuffer=Buffer.allocUnsafe(Math.max(J.length,Y*2))}this.latestJpegBuffer.set(J,0),this.latestJpegLength=J.length}async waitForCapture(){if(await this.captureStart,this.phase!=="running")throw Error("Capture session is stopped")}latestJpeg(){if(!this.latestJpegBuffer)return null;return this.latestJpegBuffer.subarray(0,this.latestJpegLength)}async writeMjpegFrame($,Q){if($.writableEnded||$.destroyed)return;let Z=ZQ(Q.length),J=Buffer.allocUnsafe(Z.length+Q.length+f9.length);Z.copy(J,0),J.set(Q,Z.length),f9.copy(J,Z.length+Q.length),$.write(J),await s4($)}handleMjpeg($,Q){let Z=new URL($.url??"","http://x").searchParams.get("raw")==="1";Q.writeHead(200,{"Content-Type":Z?"application/octet-stream":"multipart/x-mixed-replace; boundary=frame","Cache-Control":"no-cache, no-store",Connection:"keep-alive",...o0}),(async()=>{let J=()=>{},Y=!1,X=()=>{Y=!0,J()};$.once("aborted",X),Q.once("close",X),Q.once("error",X);try{if(await this.waitForCapture(),Y||Q.writableEnded||Q.destroyed)return;let G=this.latestJpeg();if(G)await this.writeMjpegFrame(Q,G);let H=await this.capture.subscribeMjpeg(async(W)=>{if(this.onSharedMjpegFrame(W),await s4(Q),!Q.writableEnded&&!Q.destroyed)await this.writeMjpegFrame(Q,W.data)}),K=!1;if(J=()=>{if(K)return;K=!0,H().catch(()=>{})},Y||Q.writableEnded||Q.destroyed)J()}catch{J(),Q.destroy()}})()}handleAvcc($,Q){Q.writeHead(200,{"Content-Type":"application/octet-stream","Cache-Control":"no-cache, no-store",Connection:"keep-alive",...o0}),(async()=>{let Z=()=>{},J=!1,Y=()=>{J=!0,Z()};$.once("aborted",Y),Q.once("close",Y),Q.once("error",Y);try{if(await this.waitForCapture(),J||Q.writableEnded||Q.destroyed)return;let X=!1,G=!1,H,K=()=>{G=!0;let M=H;if(H=void 0,M)M().catch(()=>{})};Z=K;let W=this.latestJpeg();if(W)X=!0,Q.write(h9(W));else if(H=await this.capture.subscribeMjpeg(async(M)=>{if(X||Q.writableEnded||Q.destroyed){K();return}this.onSharedMjpegFrame(M),X=!0,Q.write(h9(M.data)),K()}),G)K();if(J||Q.writableEnded||Q.destroyed){K();return}let z=await this.capture.subscribeAvcc(async(M)=>{if(this.updateScreenSize(M.width,M.height),!X)X=!0,K();if(await s4(Q),!Q.writableEnded&&!Q.destroyed)await YQ(Q,M.data)}),U=!1;if(Z=()=>{if(U)return;U=!0,K(),z().catch(()=>{})},J||Q.writableEnded||Q.destroyed)Z()}catch{Z(),Q.destroy()}})()}handleConfig($,Q){this.sendJson(Q,200,this.screenConfig())}handleHealth($,Q){this.sendJson(Q,200,{status:"ok"})}async handleStreamSettings($,Q){if($.method==="GET"){if(await this.streamSettingsUpdate,!Q.writableEnded&&!Q.destroyed)this.sendJson(Q,200,this.encoderSettings);return}if($.method!=="PATCH"){this.sendJson(Q,405,{error:"method_not_allowed"});return}if(!u9($)){this.sendJson(Q,415,{error:"unsupported_media_type"});return}try{let Z=await e4($,16384,new m("Stream settings body is too large",413,"body_too_large")),J=H9($8(Z,"invalid_stream_settings"));if(!J)throw new m("Invalid stream settings",400,"invalid_stream_settings");let Y=await this.updateStreamSettings(J);if(!Q.writableEnded&&!Q.destroyed)this.sendJson(Q,200,Y)}catch(Z){if(Q.writableEnded||Q.destroyed)return;let J=Z instanceof m?Z.status:500,Y=Z instanceof m?Z.code:"stream_settings_failed";this.sendJson(Q,J,{error:Y})}}updateStreamSettings($){let Q=this.streamSettingsUpdate.then(async()=>{let Z=v4({...this.encoderSettings,...$},this.encoderSettings);return await this.capture.updateStreamSettings(Z),this.encoderSettings=Z,Z});return this.streamSettingsUpdate=Q.then(()=>{},()=>{}),Q}async handleWebRTCOffer($,Q){let Z,J=!1,Y,X=()=>{if(!Z)return Promise.resolve();return Y??=this.capture.closeWebRTCSession(Z),Y},G=()=>{if(!Q.writableFinished)X()};Q.once("close",G);try{if($.method!=="POST")throw new m("WebRTC offers require POST",405,"method_not_allowed");if(!u9($))throw new m("WebRTC offers require application/json",415,"unsupported_media_type");let H=await e4($,w9),K=y9($8(H,"invalid_offer"));if(Z=K.sessionId,await this.waitForCapture(),await this.refreshScreenSizeFromNative())this.broadcastConfig();let W=await this.capture.handleWebRTCOffer(K);if(J=!0,Q.writableEnded||Q.destroyed){await X();return}this.sendJson(Q,200,W)}catch(H){if(J)await X();if(Q.writableEnded||Q.destroyed)return;let K=H instanceof Error&&H.message.includes("WebRTC signaling already in progress"),W=H instanceof m?H.status:K?409:500,z=H instanceof m?H.code:K?"webrtc_session_busy":"webrtc_offer_failed";this.sendJson(Q,W,{error:z,message:H instanceof Error?H.message:String(H)})}finally{if(Q.writableFinished)Q.off("close",G)}}async handleWebRTCClose($,Q){try{if($.method!=="POST")throw new m("WebRTC close requires POST",405,"method_not_allowed");let Z=await e4($,4096),J=k9($8(Z,"invalid_close_request"));if(await this.capture.closeWebRTCSession(J.sessionId),Q.writableEnded||Q.destroyed)return;Q.writeHead(204,o0),Q.end()}catch(Z){if(Q.writableEnded||Q.destroyed)return;let J=Z instanceof m?Z.status:400,Y=Z instanceof m?Z.code:"invalid_close_request";this.sendJson(Q,J,{error:Y,message:Z instanceof Error?Z.message:String(Z)})}}handleOptions($,Q){Q8(Q)}handleAx($,Q){return this.serveAxJson(Q,()=>z4(this.udid),"ax_unavailable")}handleForeground($,Q){return this.serveAxJson(Q,()=>H4(this.udid),"foreground_unavailable")}async serveAxJson($,Q,Z){try{let J=await Q();if($.writableEnded)return;this.sendJsonString($,200,J)}catch(J){if($.writableEnded)return;this.sendJson($,503,{error:Z,message:J instanceof Error?J.message:String(J)})}}attachHidSocket($){this.hidSockets.add($);let Q=this.configFrame();if(Q)$.send(Q);$.on("message",(Z)=>this.handleHidMessage(Buffer.isBuffer(Z)?Z:Buffer.from(Z))),$.on("close",()=>this.hidSockets.delete($)),$.on("error",()=>this.hidSockets.delete($))}async handleHidMessage($){if($.length<1)return;let Q=$[0],Z=$.length>1?$.subarray(1):null,J=()=>{if(!Z)return null;try{return JSON.parse(Z.toString("utf8"))}catch{return null}},Y=this.width,X=this.height;switch(Q){case 3:{let G=J();if(G)this.recordTouchEvent(G),this.hid.touch(G.type,G.x,G.y,Y,X,G.edge??0);break}case 4:{let G=J();if(!G)break;if(this.recordHidEvent(Q,G),G.page!=null&&G.usage!=null)this.hid.buttonHid(G.page,G.usage,G.phase??"press");else this.hid.button(G.button);break}case 5:{let G=J();if(G)this.recordHidEvent(Q,G),this.hid.multiTouch(G.type,G.x1,G.y1,G.x2,G.y2,Y,X);break}case 6:{let G=J();if(G)this.recordHidEvent(Q,G),this.hid.key(G.type,G.usage);break}case 7:{let G=J();if(!G)break;let H=JQ[G.orientation];if(H!=null&&await this.hid.orientation(H)){if(this.recordHidEvent(Q,G),G.orientation!==this.orientation)this.orientation=G.orientation,this.broadcastConfig()}break}case 8:{let G=J();if(G)this.recordHidEvent(Q,G),this.hid.caDebug(G.option,G.enabled);break}case 9:this.recordHidEvent(Q,{}),this.hid.memoryWarning();break;case 10:{let G=J();if(G)this.recordHidEvent(Q,G),this.hid.digitalCrown(G.delta);break}case 11:{let G=J();if(G)this.recordHidEvent(Q,G),this.hid.scroll(G.dx*Y,G.dy*X,Y,X,G.x,G.y);break}case 12:this.recordHidEvent(Q,{}),this.hid.softwareKeyboard();break}}recordTouchEvent($){if($.type==="begin"){this.touchGestureLog=b9($);return}if($.type==="move"){let Q=this.touchGestureLog;if(!Q)Q=b9($),this.touchGestureLog=Q;if(Q.lastX=$.x,Q.lastY=$.y,Q.moveCount++,$.edge!=null)Q.edge=$.edge;if(v9(Q))if(Q.eventId==null){let Z=K0({device:this.udid,source:"hid",kind:"drag",action:"drag",summary:M4(Q),details:this.touchGestureDetails(Q,"drag","move")});Q.eventId=Z.id}else a4(Q.eventId,{kind:"drag",action:"drag",summary:M4(Q),details:this.touchGestureDetails(Q,"drag","move")},{notify:!1});return}if($.type==="end"){let Q=this.touchGestureLog;if(Q){if(Q.lastX=$.x,Q.lastY=$.y,$.edge!=null)Q.edge=$.edge;if(Q.moveCount>0&&v9(Q))if(Q.eventId==null)K0({device:this.udid,source:"hid",kind:"drag",action:"drag",summary:M4(Q),details:this.touchGestureDetails(Q,"drag","end")});else a4(Q.eventId,{kind:"drag",action:"drag",summary:M4(Q),details:this.touchGestureDetails(Q,"drag","end")});else K0({device:this.udid,source:"hid",kind:"tap",action:"tap",summary:`Tap ${S0($.x,$.y)}`,details:this.touchGestureDetails(Q,"tap")});this.touchGestureLog=void 0;return}}this.recordHidEvent(3,$)}eventLogScreen(){return this.width>0&&this.height>0?{width:this.width,height:this.height}:void 0}touchGestureDetails($,Q,Z){return{type:Q,...Z?{phase:Z}:{},start:{x:$.startX,y:$.startY},current:{x:$.lastX,y:$.lastY},moveCount:$.moveCount,...$.edge!=null?{edge:$.edge}:{},...this.eventLogScreen()?{screen:this.eventLogScreen()}:{}}}recordHidEvent($,Q){let Z=E9(this.udid,$,Q,this.eventLogScreen());if(Z)K0(Z)}screenConfig(){return{width:this.width,height:this.height,orientation:this.orientation}}configFrame(){if(this.width===0&&this.height===0)return null;return Buffer.concat([Buffer.from([$Q]),Buffer.from(JSON.stringify(this.screenConfig()))])}async refreshScreenSizeFromNative(){let{width:$,height:Q}=await this.capture.screenSize();if(!$||!Q||$===this.width&&Q===this.height)return!1;return this.width=$,this.height=Q,!0}updateScreenSize($,Q){if(!$||!Q||$===this.width&&Q===this.height)return;this.width=$,this.height=Q,this.broadcastConfig()}broadcastConfig(){let $=this.configFrame();if(!$)return;for(let Q of this.hidSockets)Q.send($)}sendJson($,Q,Z){this.sendJsonString($,Q,JSON.stringify(Z))}sendJsonString($,Q,Z){let J=Buffer.from(Z,"utf8");$.writeHead(Q,{"Content-Type":"application/json","Cache-Control":"no-cache, no-store","Content-Length":String(J.length),...o0}),$.end(J)}}var B0=new Map;function _4($,Q){let Z=B0.get($);if(!Z){let J=new p9($,Q);Z=J,B0.set($,J);try{J.start().catch(()=>{if(B0.get($)!==J)return;J.close(),B0.delete($)})}catch(Y){throw J.close(),B0.delete($),Y}}return Z}function Z8($){let Q=B0.get($);if(Q)Q.close(),B0.delete($)}var r0=V9(Q6(),1),u1=r0.default("serve-sim:cli"),p1=r0.default("serve-sim:helper"),g1=r0.default("serve-sim:state"),t0=r0.default("serve-sim:mw");import{execFileSync as L4}from"child_process";import{createHash as K6}from"crypto";import{existsSync as s,mkdirSync as W6,readdirSync as gQ,readFileSync as V0,renameSync as z6,statSync as H6,unlinkSync as Z6}from"fs";import{tmpdir as M6}from"os";import{basename as _6,dirname as F8,join as i}from"path";import{inflateSync as cQ}from"zlib";var N8="/Library/Developer/CoreSimulator/Profiles/DeviceTypes",F6="/Library/Developer/DeviceKit/Chrome",J6="com.apple.dt.devicekit.chrome.",Y6=i(M6(),"serve-sim-devicekit-chrome"),X6=i(M6(),"serve-sim-device-placeholder-assets"),z0="/System/Library/CoreServices/CoreTypes.bundle/Contents/Library/MobileDevices.bundle/Contents/Resources",mQ="/System/Library/CoreServices/CoreTypes.bundle/Contents/Library/CoreTypes-0006.bundle/Contents/Resources",G6={"vision-pro":{paths:[i(z0,"com.apple.vision-pro.icns"),i(mQ,"com.apple.visionpro.icns")]},"iphone-17e":{paths:[i(z0,"com.apple.iphone-16-e-1.icns")]},"ipad-air-11-inch-m4":{paths:[i(z0,"com.apple.ipad-air-m3-1.icns")]},"ipad-air-13-inch-m4":{paths:[i(z0,"com.apple.ipad-air-m3-1.icns")]}},V8=null,K8=new Map,W8=new Map,z8=new Map,H8=null,M8=new Map;function j4($){return $.startsWith(J6)?$.slice(J6.length):$}function U8($){let Q=typeof $==="string"?$:$.toString("latin1"),Z=/\/CropBox\s*\[\s*(-?\d+(?:\.\d+)?)\s+(-?\d+(?:\.\d+)?)\s+(-?\d+(?:\.\d+)?)\s+(-?\d+(?:\.\d+)?)\s*\]/.exec(Q)??/\/MediaBox\s*\[\s*(-?\d+(?:\.\d+)?)\s+(-?\d+(?:\.\d+)?)\s+(-?\d+(?:\.\d+)?)\s+(-?\d+(?:\.\d+)?)\s*\]/.exec(Q);if(!Z)return null;let J=Number(Z[1]),Y=Number(Z[2]),X=Number(Z[3]),G=Number(Z[4]),H=Math.abs(X-J),K=Math.abs(G-Y);return H>0&&K>0?{width:H,height:K}:null}function lQ($,Q){let Z=X7($);if(Z)return Z;let J=typeof $.framebufferMask==="string"?$.framebufferMask:null;if(!J)return null;let Y=typeof $.__profileDir==="string"?$.__profileDir:null;if(!Y)return null;let X=i(Y,`${J}.pdf`);if(!s(X))return null;let G=U8(V0(X));if(!G)return null;let H=G7(Q);return{width:G.width/H,height:G.height/H}}function N6($){let Q=B8($),Z=Q;if(W8.has(Z))return W8.get(Z)??null;let J=oQ(Q);return W8.set(Z,J),J}function U6($){let Q=B8($);if(z8.has(Q))return z8.get(Q)??null;let Z=dQ($);return z8.set(Q,Z),Z}function dQ($){let Q=rQ($),Z=Q?A6(Q):null,J=tQ(Z)??sQ($.name);if(!J)return null;let Y=O6(J);return Y?{name:J,width:Y.width,height:Y.height}:null}function B6($,Q){let Z=j4($.searchParams.get("chrome")??""),J=$.searchParams.get("image")??"";if(!/^[A-Za-z0-9_-]+$/.test(Z)||!J){v0(Q,400,"Invalid chrome asset request");return}let Y=C6(Z);if(!Y||!Y.allowedImages.has(J)||J.includes("/")){v0(Q,404,"Chrome asset not found");return}let X=L8(Z,J);if(!s(X)){v0(Q,404,"Chrome asset not found");return}try{let G=D6(Z,J,X),H=V0(G);Q.writeHead(200,{"Content-Type":"image/png","Cache-Control":"public, max-age=604800, immutable","Content-Length":String(H.byteLength)}),Q.end(H)}catch(G){v0(Q,500,G instanceof Error?G.message:"Failed to render chrome asset")}}function L6($,Q){let Z=$.searchParams.get("name")??"";try{let J=O6(Z);if(!J){v0(Q,404,"Placeholder asset not found");return}let Y=V0(J.pngPath);Q.writeHead(200,{"Content-Type":"image/png","Cache-Control":"public, max-age=604800, immutable","Content-Length":String(Y.byteLength)}),Q.end(Y)}catch(J){v0(Q,500,J instanceof Error?J.message:"Failed to render placeholder asset")}}function O6($){if(!/^[A-Za-z0-9._-]+$/.test($))return null;if(M8.has($))return M8.get($)??null;let Q=iQ($),Z=Q?V7($,Q):null;return M8.set($,Z),Z}function iQ($){let Z=nQ($)?.paths.find((Y)=>s(Y));if(Z)return Z;if(!R6().some((Y)=>Y.iconName===$))return null;let J=i(z0,`${$}.icns`);return s(J)?J:null}function nQ($){return Object.prototype.hasOwnProperty.call(G6,$)?G6[$]:null}function oQ($){let Q=j6($);if(!s(Q))return null;let Z=A6(Q);if(!Z?.chromeIdentifier)return null;let J=C6(Z.chromeIdentifier);if(!J)return null;let Y=null;if(J.compositeImage)Y=_8(J.identifier,J.compositeImage);let X=J.compositeImage?z7(J.identifier,J.compositeImage):null,G=(X&&Z.framebufferMaskSize?W7(Z.framebufferMaskSize,X):null)??Z.screenSize??(Y?{width:Y.width-J.insets.left-J.insets.right,height:Y.height-J.insets.top-J.insets.bottom}:null);if(!G||G.width<=0||G.height<=0)return null;let H=Y??{width:G.width+J.insets.left+J.insets.right,height:G.height+J.insets.top+J.insets.bottom},K={x:J.devicePadding.left,y:J.devicePadding.top,width:H.width,height:H.height},W={width:H.width+J.devicePadding.left+J.devicePadding.right,height:H.height+J.devicePadding.top+J.devicePadding.bottom},z={x:K.x+(H.width-G.width)/2,y:K.y+(H.height-G.height)/2,width:G.width,height:G.height},U=X?Math.max(0,X.radius-(X.width-G.width)/2):J.innerCornerRadius,M=J.slice?_8(J.identifier,J.slice.topLeft):null,F=J.identifier.startsWith("watch"),A=J.buttons.flatMap((R)=>{let x=_8(J.identifier,R.image);if(!x)return[];let j=Z7(R,x,H,J.devicePadding),D={x:x.width>0?(R.rolloverOffset.x-R.normalOffset.x)/x.width:0,y:x.height>0?(R.rolloverOffset.y-R.normalOffset.y)/x.height:0};return[{name:R.name,image:R.image,imageDown:R.imageDown,onTop:R.onTop||F,frame:{...j,...x},hover:D,usagePage:R.usagePage,usage:R.usage}]});return{identifier:J.identifier,frame:W,body:K,screen:z,insets:J.insets,outerCornerRadius:J.outerCornerRadius,innerCornerRadius:J.innerCornerRadius,screenRadius:U,compositeImage:J.compositeImage,slice:J.slice,corner:M,buttons:A}}function A6($){let Q=O4($);if(!Q)return null;let Z=typeof Q.chromeIdentifier==="string"?Q.chromeIdentifier:null,J=Z?j4(Z):null;return{chromeIdentifier:J,modelIdentifier:typeof Q.modelIdentifier==="string"?Q.modelIdentifier:null,productClass:typeof Q.productClass==="string"?Q.productClass:null,screenSize:J?lQ({...Q,__profileDir:F8($)},J):null,framebufferMaskSize:aQ({...Q,__profileDir:F8($)})}}function aQ($){let Q=typeof $.framebufferMask==="string"?$.framebufferMask:null,Z=typeof $.__profileDir==="string"?$.__profileDir:null;if(!Q||!Z)return null;let J=i(Z,`${Q}.pdf`);if(!s(J))return null;return U8(V0(J))}function B8($){return J7($.deviceTypeIdentifier)??$.name}function rQ($){let Q=j6(B8($));return s(Q)?Q:null}function j6($){return i(N8,`${$}.simdevicetype`,"Contents","Resources","profile.plist")}function tQ($){if(!$)return null;let Q=new Set;if($.modelIdentifier)Q.add($.modelIdentifier);if($.productClass)Q.add($.productClass),Q.add(`${$.productClass}AP`);if(Q.size===0)return null;for(let Z of R6())if(Z.modelCodes.some((J)=>Q.has(J)))return Z.iconName;return null}function sQ($){let Q=$.toLowerCase();if(Q.includes("vision"))return"vision-pro";if(/iphone\s+17e\b/.test(Q))return"iphone-17e";if(/ipad\s+air\s+11-inch\s+\(m4\)/.test(Q))return"ipad-air-11-inch-m4";if(/ipad\s+air\s+13-inch\s+\(m4\)/.test(Q))return"ipad-air-13-inch-m4";return null}function R6(){if(H8)return H8;let $=O4(i(z0,"MobileDevices-Info.plist"))??O4(i(F8(z0),"Info.plist")),Q=Array.isArray($?.UTExportedTypeDeclarations)?$.UTExportedTypeDeclarations:[],Z=[];for(let J of Q){let Y=Z0(J),X=r(Y.UTTypeIconFile);if(!X||!X.endsWith(".icns"))continue;let G=i(z0,X);if(!s(G))continue;let K=Z0(Y.UTTypeTagSpecification)["com.apple.device-model-code"],W=Array.isArray(K)?K.filter((z)=>typeof z==="string"&&z.length>0):[];if(W.length===0)continue;Z.push({description:r(Y.UTTypeDescription)??"",iconFile:X,iconName:_6(X,".icns"),modelCodes:W})}return H8=Z,Z}function C6($){let Q=j4($);if(!/^[A-Za-z0-9_-]+$/.test(Q))return null;if(K8.has(Q))return K8.get(Q)??null;let Z=i(F6,`${Q}.devicechrome`,"Contents","Resources","chrome.json"),J=null;try{let Y=JSON.parse(V0(Z,"utf-8"));J=eQ(Y)}catch{J=null}return K8.set(Q,J),J}function eQ($){let Q=typeof $.identifier==="string"?$.identifier:null;if(!Q)return null;let Z=j4(Q),J=Z0($.images),Y=Z0(J.sizing),X=Z0($.paths),G=G0(Z0(X.simpleOutsideBorder).cornerRadiusX),H={top:G0(Y.topHeight),left:G0(Y.leftWidth),bottom:G0(Y.bottomHeight),right:G0(Y.rightWidth)},K=Z0(J.devicePadding),W={top:G0(K.top),left:G0(K.left),bottom:G0(K.bottom),right:G0(K.right)},z=typeof J.composite==="string"?J.composite:null,U=$7(J),M=Array.isArray($.inputs)?$.inputs.flatMap((A)=>{let R=Q7(Z0(A));return R?[R]:[]}):[],F=new Set;for(let A of Object.values(J))if(typeof A==="string")F.add(A);for(let A of M)F.add(A.image);if(Array.isArray($.inputs))for(let A of $.inputs){let R=Z0(A);if(typeof R.imageDown==="string")F.add(R.imageDown)}return{identifier:Z,insets:H,devicePadding:W,outerCornerRadius:G,innerCornerRadius:Math.max(G-Math.max(H.left,H.top),0),compositeImage:z,slice:U,buttons:M,allowedImages:F}}function $7($){let Q=r($.topLeft),Z=r($.top),J=r($.topRight),Y=r($.right),X=r($.bottomRight),G=r($.bottom),H=r($.bottomLeft),K=r($.left);if(!Q||!Z||!J||!Y||!X||!G||!H||!K)return null;return{topLeft:Q,top:Z,topRight:J,right:Y,bottomRight:X,bottom:G,bottomLeft:H,left:K}}function Q7($){let Q=r($.name),Z=r($.image);if(!Q||!Z)return null;let J=r($.anchor),Y=r($.align),X=Z0($.offsets),G=V6(Z0(X.normal)),H=V6(Z0(X.rollover));return{name:Q,image:Z,imageDown:r($.imageDown),onTop:$.onTop===!0,anchor:J==="right"||J==="top"||J==="bottom"?J:"left",align:Y==="trailing"?"trailing":"leading",normalOffset:G??H??{x:0,y:0},rolloverOffset:H??G??{x:0,y:0},usagePage:H0($.usagePage),usage:H0($.usage)}}function Z7($,Q,Z,J){let{left:Y,top:X}=J,G=2*$.normalOffset.x-$.rolloverOffset.x,H=2*$.normalOffset.y-$.rolloverOffset.y,K=$.align==="trailing"?Y+Z.width+G-Q.width:Y+G;switch($.anchor){case"left":return{x:Y+$.rolloverOffset.x-Q.width/2,y:X+$.rolloverOffset.y};case"right":return{x:Y+Z.width+G,y:X+H};case"top":return{x:K,y:X+H-Q.height};case"bottom":return{x:K,y:X+Z.height+H}}}function J7($){if(!$)return null;if(!V8)V8=Y7();return V8.get($)??null}function Y7(){let $=new Map;try{for(let Q of gQ(N8)){if(!Q.endsWith(".simdevicetype"))continue;let Z=i(N8,Q),J=O4(i(Z,"Contents","Info.plist")),Y=typeof J?.CFBundleIdentifier==="string"?J.CFBundleIdentifier:null,X=typeof J?.CFBundleName==="string"?J.CFBundleName:_6(Q,".simdevicetype");if(Y)$.set(Y,X)}}catch{}return $}function O4($){try{let Q=L4("plutil",["-convert","json","-o","-",$],{encoding:"utf-8",stdio:["ignore","pipe","ignore"],timeout:2000});return JSON.parse(Q)}catch{return null}}function X7($){let Q=H0($.mainScreenWidth),Z=H0($.mainScreenHeight),J=H0($.mainScreenScale);if(!Q||!Z||!J||J<=0)return null;return{width:Q/J,height:Z/J}}function G7($){if($.startsWith("phone"))return 3;if($.startsWith("tablet"))return 2;if($.startsWith("watch"))return 2;return 1}function _8($,Q){let Z=L8($,Q);if(!s(Z))return null;return U8(V0(Z))}function L8($,Q){return i(F6,`${$}.devicechrome`,"Contents","Resources",`${Q}.pdf`)}function D6($,Q,Z){W6(Y6,{recursive:!0});let J=H6(Z),Y=K6("sha1").update($).update("\x00").update(Q).update("\x00").update(String(J.mtimeMs)).update("\x00").update(String(J.size)).digest("hex"),X=i(Y6,`${$}-${Y}.png`);if(s(X))return X;let G=`${X}.${process.pid}.tmp`;return L4("sips",["-s","format","png",Z,"--out",G],{stdio:["ignore","ignore","ignore"],timeout:1e4}),z6(G,X),X}function V7($,Q){W6(X6,{recursive:!0});let Z=H6(Q),J=K6("sha1").update($).update("\x00").update(Q).update("\x00").update(String(Z.mtimeMs)).update("\x00").update(String(Z.size)).digest("hex"),Y=i(X6,`${$}-${J}.png`);if(s(Y)){let H=A4(V0(Y));return{sourcePath:Q,pngPath:Y,width:H.width,height:H.height}}let X=`${Y}.${process.pid}.tmp`,G=`${Y}.${process.pid}.raw.png`;try{L4("sips",["-s","format","png",Q,"--out",G],{stdio:["ignore","ignore","ignore"],timeout:1e4});let H=V0(G),K=K7(H)??{x:0,y:0,...A4(H)};return L4("sips",["-c",String(K.height),String(K.width),"--cropOffset",String(K.y),String(K.x),"-s","format","png",Q,"--out",X],{stdio:["ignore","ignore","ignore"],timeout:1e4}),z6(X,Y),{sourcePath:Q,pngPath:Y,width:K.width,height:K.height}}finally{try{if(s(G))Z6(G)}catch{}try{if(s(X))Z6(X)}catch{}}}function A4($){if($.byteLength<24||$[0]!==137||$.toString("ascii",1,4)!=="PNG")throw Error("Invalid PNG placeholder asset");return{width:$.readUInt32BE(16),height:$.readUInt32BE(20)}}function P6($,Q){let{width:Z,height:J}=A4($),Y=8,X=0,G=0,H=[];while(Y<$.byteLength){let R=$.readUInt32BE(Y);Y+=4;let x=$.toString("ascii",Y,Y+4);Y+=4;let j=$.subarray(Y,Y+R);if(Y+=R+4,x==="IHDR")X=j[8]??0,G=j[9]??0;else if(x==="IDAT")H.push(j);else if(x==="IEND")break}let K=G===6?4:G===4?2:0;if(X!==8||K===0||H.length===0)return null;let W=G===6,z=cQ(Buffer.concat(H)),U=Z*K,M=new Uint8Array(Z*J),F=Buffer.alloc(U),A=0;for(let R=0;R<J;R++){let x=z[A++]??0,j=Buffer.from(z.subarray(A,A+U));A+=U,M7(j,F,K,x);for(let D=0;D<Z;D++){let L=D*K,C=j[L]??0,I=W?j[L+1]??0:C,_=W?j[L+2]??0:C,V=j[L+K-1]??0;if(Q(C,I,_,V))M[R*Z+D]=1}F=j}return{width:Z,height:J,mask:M}}function K7($){let{width:Q,height:Z}=A4($),J=P6($,(K,W,z,U)=>U>0);if(!J)return{x:0,y:0,width:Q,height:Z};let Y=Q,X=Z,G=-1,H=-1;for(let K=0;K<Z;K++)for(let W=0;W<Q;W++){if(!J.mask[K*Q+W])continue;if(W<Y)Y=W;if(K<X)X=K;if(W>G)G=W;if(K>H)H=K}if(G<Y||H<X)return{x:0,y:0,width:Q,height:Z};return{x:Y,y:X,width:G-Y+1,height:H-X+1}}function W7($,Q){if(Q.width<=0)return null;let Z=Math.max(1,Math.round($.width/Q.width));return{width:$.width/Z,height:$.height/Z}}function z7($,Q){let Z=H7($,Q);if(!Z)return null;let J=P6(Z,(D,L,C,I)=>I>200&&D<30&&L<30&&C<30);if(!J)return null;let{width:Y,height:X,mask:G}=J,H=Math.floor(Y/2),K=Math.floor(X/2),W=(D,L)=>D>=0&&L>=0&&D<Y&&L<X&&G[L*Y+D]===1;if(!W(H,K))return null;let z=H;while(z>0&&W(z-1,K))z--;let U=H;while(U<Y-1&&W(U+1,K))U++;let M=K;while(M>0&&W(H,M-1))M--;let F=K;while(F<X-1&&W(H,F+1))F++;let A=F-M,R=(D,L)=>{let C=0;while(C<A&&!W(D,L?M+C:F-C))C++;return C},x=[R(z,!0),R(U,!0),R(z,!1),R(U,!1)],j=x.reduce((D,L)=>D+L,0)/x.length;return{x:z,y:M,width:U-z+1,height:F-M+1,radius:j}}function H7($,Q){let Z=L8($,Q);if(!s(Z))return null;try{return V0(D6($,Q,Z))}catch{return null}}function M7($,Q,Z,J){for(let Y=0;Y<$.byteLength;Y++){let X=Y>=Z?$[Y-Z]:0,G=Q[Y]??0,H=Y>=Z?Q[Y-Z]:0;switch(J){case 0:break;case 1:$[Y]=$[Y]+X&255;break;case 2:$[Y]=$[Y]+G&255;break;case 3:$[Y]=$[Y]+Math.floor((X+G)/2)&255;break;case 4:$[Y]=$[Y]+_7(X,G,H)&255;break;default:throw Error(`Unsupported PNG filter ${J}`)}}}function _7($,Q,Z){let J=$+Q-Z,Y=Math.abs(J-$),X=Math.abs(J-Q),G=Math.abs(J-Z);if(Y<=X&&Y<=G)return $;return X<=G?Q:Z}function v0($,Q,Z){$.writeHead(Q,{"Content-Type":"application/json","Cache-Control":"no-store"}),$.end(JSON.stringify({ok:!1,error:Z}))}function G0($){return H0($)??0}function H0($){if(typeof $==="number"&&Number.isFinite($))return $;if(typeof $==="string"&&$.trim()){let Q=Number($);return Number.isFinite(Q)?Q:null}return null}function r($){return typeof $==="string"&&$?$:null}function Z0($){return $&&typeof $==="object"&&!Array.isArray($)?$:{}}function V6($){let Q=H0($.x),Z=H0($.y);return Q===null||Z===null?null:{x:Q,y:Z}}import{exec as F7}from"child_process";import{createHash as I6,timingSafeEqual as N7}from"crypto";function T6($){let Q=new TextDecoder;if(typeof $==="string")return $;if($ instanceof ArrayBuffer)return Q.decode(new Uint8Array($));if(ArrayBuffer.isView($))return Q.decode(new Uint8Array($.buffer,$.byteOffset,$.byteLength));return String($)}function E6($){return $.headers.get("host")??new URL($.url).host}var U7=1e4;function B7($,Q){let Z=I6("sha256").update($).digest(),J=I6("sha256").update(Q).digest();return N7(Z,J)}function L7($,Q,Z){let J=!1,Y=new Map,X=Z.ssePrefixes??[],G=(W)=>{if($.readyState===$.OPEN)$.send(JSON.stringify(W))},H=setTimeout(()=>{if(!J)$.close()},U7);H.unref?.();let K=(W,z)=>{if(Y.has(W))return;let U=z.split("?")[0];if(!z.startsWith("/")||!X.some((j)=>U===j)){G({sub:W,end:!0,error:"path not allowed"});return}if(!Z.onSseRequest){G({sub:W,end:!0,error:"sse requests not supported"});return}let M=!0,F=!1,A=null,R=(j)=>{if(F)return;F=!0,G(j?{sub:W,end:!0,error:j}:{sub:W,end:!0})},x={destroy(){M=!1,A?.cancel().catch(()=>{})}};Y.set(W,x),(async()=>{try{let j=await Z.onSseRequest(z,Q);if(!M)return;if(!j?.body){R();return}let D=new TextDecoder;A=j.body.getReader();while(M){let{done:L,value:C}=await A.read();if(L)break;G({sub:W,data:D.decode(C,{stream:!0})})}if(M){let L=D.decode();if(L)G({sub:W,data:L})}}catch{if(M)R();return}finally{if(M=!1,A)try{A.releaseLock()}catch{}if(Y.get(W)===x)Y.delete(W),R()}})()};$.on("message",(W)=>{let z;try{z=JSON.parse(T6(W))}catch{return}if(!J){if(typeof z.token==="string"&&B7(z.token,Z.execToken))J=!0,clearTimeout(H),G({ready:!0});else $.close();return}if(typeof z.unsub==="number"){Y.get(z.unsub)?.destroy(),Y.delete(z.unsub);return}if(typeof z.sub==="number"&&typeof z.path==="string"){K(z.sub,z.path);return}if(typeof z.id==="number"&&z.ui!==void 0){let{id:F}=z;if(!Z.onUiRequest){G({id:F,error:"ui requests not supported"});return}Z.onUiRequest(z.ui).then((A)=>G({id:F,...A})).catch((A)=>G({id:F,error:A instanceof Error?A.message:String(A)}));return}if(typeof z.id!=="number"||typeof z.command!=="string"||!z.command)return;let{id:U,command:M}=z;F7(M,{maxBuffer:16777216},(F,A,R)=>{let x={id:U,stdout:A.toString(),stderr:R.toString(),exitCode:F?F.code??1:0};try{Z.onCommandResult?.(M,x)}catch{}G(x)})}),$.on("error",()=>$.close()),$.on("close",()=>{clearTimeout(H);for(let W of Y.values())W.destroy();Y.clear()})}function x6($){return function(Z,J){let Y=new URL(Z.url);if(Y.pathname!==$.path&&Y.pathname!==`${$.path}/`)return!1;let X=Z.headers.get("origin");if(X)try{if(new URL(X).host!==E6(Z))return J.close(),!0}catch{return J.close(),!0}return L7(J,Z,$),!0}}function q6($,Q,{helperProxyTarget:Z,fallbackDevice:J,resolveSession:Y}){let X=new URL($.url,"http://serve-sim.local"),G=Z(`${X.pathname}${X.search}`);if(!G||G.upstreamPath!=="/ws")return!1;let H=G.device??J??null;if(!H)return Q.close(),!0;let K;try{K=Y(H)}catch{return Q.close(),!0}return K.attachHidSocket(Q),!0}import{execFile as j7}from"child_process";import{existsSync as y6}from"fs";import{join as O8,resolve as R7}from"path";import{fileURLToPath as O7}from"url";import{dirname as A7}from"path";import{WebSocketServer as zJ}from"ws";function w6($){return A7(O7($))}var A8=w6(import.meta.url),k6=["extra-small","small","medium","large","extra-large","extra-extra-large","extra-extra-extra-large","accessibility-medium","accessibility-large","accessibility-extra-large","accessibility-extra-extra-large","accessibility-extra-extra-extra-large"],C7=["none","grayscale","red-green","green-red","blue-yellow"],D7={protanopia:"red-green",deuteranopia:"green-red",tritanopia:"blue-yellow"},s0=["on","off"],P7=new Set(["on","true","enabled","1","yes"]),T7=new Set(["off","false","disabled","0","no"]),A0={appearance:{via:"appearance",values:["light","dark"]},"liquid-glass":{via:"ax",values:["clear","tinted"]},"color-filter":{via:"ax",values:C7,aliases:D7},"text-size":{via:"content_size",values:k6,extraValues:["increment","decrement"]},"reduce-motion":{via:"ax",values:s0,toggle:!0},"increase-contrast":{via:"increase_contrast",values:s0,toggle:!0},"show-borders":{via:"ax",values:s0,toggle:!0},"reduce-transparency":{via:"ax",values:s0,toggle:!0},voiceover:{via:"ax",values:s0,toggle:!0}};function f6($,Q){let Z=A0[$];if(!Z)return null;let J=Q.toLowerCase();if(Z.toggle){if(P7.has(J))return"on";if(T7.has(J))return"off";return null}let Y=Z.aliases?.[J]??J;if(Z.values.includes(Y))return Y;if(Z.extraValues?.includes(Y))return Y;return null}function S6(){let $=[O8(A8,"..","dist","simax","serve-sim-ax-settings"),O8(A8,"simax","serve-sim-ax-settings")];for(let Q of $)if(y6(Q))return R7(Q);return null}var R4=null;function E7(){return R4??=(async()=>{let $=S6();if($)return $;let Q=O8(A8,"..","Sources","SimAXSettings","build.sh");if(!y6(Q))throw Error("sim-ax-settings binary not found — this build of serve-sim does not "+"include the simulator settings helper. Reinstall from a recent release.");console.error("[serve-sim] building sim-ax-settings (one-time)…"),await j8("bash",[Q]);let Z=S6();if(!Z)throw Error("Build succeeded but sim-ax-settings not found.");return Z})(),R4.catch(()=>{R4=null}),R4}function j8($,Q){return new Promise((Z,J)=>{j7($,Q,{encoding:"utf-8",maxBuffer:4194304},(Y,X,G)=>{if(Y)J(Error(String(G).trim()||Y.message));else Z(String(X).trim())})})}function v6($,Q,Z){let J=["simctl","ui",$,Q];if(Z!==void 0)J.push(Z);return j8("xcrun",J)}async function R8($,...Q){let Z=await E7();return j8("xcrun",["simctl","spawn",$,Z,...Q])}function I7($){return $==="enabled"?"on":"off"}function x7($){return $==="on"?"enabled":"disabled"}async function q7($,Q){let Z=A0[Q];if(!Z)throw Error(`unknown option: ${Q}`);if(Z.via==="ax")return R8($,"get",Q);let J=(await v6($,Z.via)).toLowerCase();return Z.toggle?I7(J):J}async function b6($,Q,Z){let J=A0[Q];if(!J)throw Error(`unknown option: ${Q}`);if(J.via==="ax"){await R8($,"set",Q,Z);return}await v6($,J.via,J.toggle?x7(Z):Z)}async function h6($){let Q=Object.entries(A0).filter(([,X])=>X.via!=="ax"),[Z,...J]=await Promise.all([R8($,"status").then((X)=>JSON.parse(X)).catch(()=>({})),...Q.map(([X])=>q7($,X).catch(()=>"unsupported"))]),Y={};for(let[X,G]of Object.entries(A0))if(G.via==="ax")Y[X]=Z[X]??"unsupported";return Q.forEach(([X],G)=>{Y[X]=J[G]}),Y}var jJ=`Usage: serve-sim ui [status] [--json] [-d udid]
52
+ `,"ascii")}function u9($){let Q=Buffer.allocUnsafe(5+$.length);return Q.writeUInt32BE($.length+1,0),Q[4]=ZQ,Q.set($,5),Q}var GQ={portrait:d0.portrait,portrait_upside_down:d0.portraitUpsideDown,landscape_left:d0.landscapeLeft,landscape_right:d0.landscapeRight};function e4($){if($.writableEnded||$.destroyed||!$.writableNeedDrain)return Promise.resolve();return new Promise((Q)=>{let Z=()=>{J(),Q()},J=()=>{$.off("drain",Z),$.off("close",Z),$.off("error",Z)};$.once("drain",Z),$.once("close",Z),$.once("error",Z)})}function VQ($,Q){if($.writableEnded||$.destroyed)return Promise.resolve();return new Promise((Z)=>{let J=!1,Y=()=>{if(J)return;J=!0,$.off("close",Y),$.off("error",Y),Z()};$.once("close",Y),$.once("error",Y);try{$.write(Q,Y)}catch{Y()}})}function $8($,Q,Z=new m("WebRTC signaling body is too large",413,"body_too_large")){return new Promise((J,Y)=>{let X=[],G=0,H=!1,K=(W)=>{if(H)return;H=!0,Y(W)};$.on("data",(W)=>{if(H)return;let z=Buffer.isBuffer(W)?W:Buffer.from(W);if(G+=z.length,G>Q){K(Z);return}X.push(z)}),$.on("end",()=>{if(H)return;H=!0,J(Buffer.concat(X))}),$.on("aborted",()=>K(new m("Request aborted",400,"request_aborted"))),$.on("error",K)})}function p9($){let Q=$.headers["content-type"];return(Array.isArray(Q)?Q[0]:Q)?.split(";",1)[0]?.trim().toLowerCase()==="application/json"}function Q8($,Q){try{return JSON.parse($.toString("utf8"))}catch{throw new m("Malformed JSON request body",400,Q)}}class g9{udid;capture;hid;captureStart;phase="unstarted";width=0;height=0;orientation="portrait";latestJpegBuffer=null;latestJpegLength=0;hidSockets=new Set;touchGestureLog;encoderSettings;streamSettingsUpdate=Promise.resolve();constructor($,Q){this.udid=$;let Z=F9(Q);this.encoderSettings=_9(Z),this.hid=new g4($),this.capture=new c4($,this.encoderSettings)}start(){if(this.phase==="running")return this.captureStart??Promise.resolve();if(this.phase==="stopped")return Promise.reject(Error("Capture session is stopped"));return this.phase="running",this.captureStart=this.capture.start(),this.captureStart}close(){if(this.phase!=="running")return;for(let $ of this.hidSockets)$.close();this.hidSockets.clear(),this.capture.stop().catch(()=>{}),this.phase="stopped"}onSharedMjpegFrame($){let{width:Q,height:Z,data:J}=$;if(this.updateScreenSize(Q,Z),!this.latestJpegBuffer||this.latestJpegBuffer.length<J.length){let Y=this.latestJpegBuffer?.length??0;this.latestJpegBuffer=Buffer.allocUnsafe(Math.max(J.length,Y*2))}this.latestJpegBuffer.set(J,0),this.latestJpegLength=J.length}async waitForCapture(){if(await this.captureStart,this.phase!=="running")throw Error("Capture session is stopped")}latestJpeg(){if(!this.latestJpegBuffer)return null;return this.latestJpegBuffer.subarray(0,this.latestJpegLength)}async writeMjpegFrame($,Q){if($.writableEnded||$.destroyed)return;let Z=XQ(Q.length),J=Buffer.allocUnsafe(Z.length+Q.length+v9.length);Z.copy(J,0),J.set(Q,Z.length),v9.copy(J,Z.length+Q.length),$.write(J),await e4($)}handleMjpeg($,Q){let Z=new URL($.url??"","http://x").searchParams.get("raw")==="1";Q.writeHead(200,{"Content-Type":Z?"application/octet-stream":"multipart/x-mixed-replace; boundary=frame","Cache-Control":"no-cache, no-store",Connection:"keep-alive",...o0}),(async()=>{let J=()=>{},Y=!1,X=()=>{Y=!0,J()};$.once("aborted",X),Q.once("close",X),Q.once("error",X);try{if(await this.waitForCapture(),Y||Q.writableEnded||Q.destroyed)return;let G=this.latestJpeg();if(G)await this.writeMjpegFrame(Q,G);let H=await this.capture.subscribeMjpeg(async(W)=>{if(this.onSharedMjpegFrame(W),await e4(Q),!Q.writableEnded&&!Q.destroyed)await this.writeMjpegFrame(Q,W.data)}),K=!1;if(J=()=>{if(K)return;K=!0,H().catch(()=>{})},Y||Q.writableEnded||Q.destroyed)J()}catch{J(),Q.destroy()}})()}handleAvcc($,Q){Q.writeHead(200,{"Content-Type":"application/octet-stream","Cache-Control":"no-cache, no-store",Connection:"keep-alive",...o0}),(async()=>{let Z=()=>{},J=!1,Y=()=>{J=!0,Z()};$.once("aborted",Y),Q.once("close",Y),Q.once("error",Y);try{if(await this.waitForCapture(),J||Q.writableEnded||Q.destroyed)return;let X=!1,G=!1,H,K=()=>{G=!0;let M=H;if(H=void 0,M)M().catch(()=>{})};Z=K;let W=this.latestJpeg();if(W)X=!0,Q.write(u9(W));else if(H=await this.capture.subscribeMjpeg(async(M)=>{if(X||Q.writableEnded||Q.destroyed){K();return}this.onSharedMjpegFrame(M),X=!0,Q.write(u9(M.data)),K()}),G)K();if(J||Q.writableEnded||Q.destroyed){K();return}let z=await this.capture.subscribeAvcc(async(M)=>{if(this.updateScreenSize(M.width,M.height),!X)X=!0,K();if(await e4(Q),!Q.writableEnded&&!Q.destroyed)await VQ(Q,M.data)}),U=!1;if(Z=()=>{if(U)return;U=!0,K(),z().catch(()=>{})},J||Q.writableEnded||Q.destroyed)Z()}catch{Z(),Q.destroy()}})()}handleConfig($,Q){this.sendJson(Q,200,this.screenConfig())}handleHealth($,Q){this.sendJson(Q,200,{status:"ok"})}async handleStreamSettings($,Q){if($.method==="GET"){if(await this.streamSettingsUpdate,!Q.writableEnded&&!Q.destroyed)this.sendJson(Q,200,this.encoderSettings);return}if($.method!=="PATCH"){this.sendJson(Q,405,{error:"method_not_allowed"});return}if(!p9($)){this.sendJson(Q,415,{error:"unsupported_media_type"});return}try{let Z=await $8($,16384,new m("Stream settings body is too large",413,"body_too_large")),J=M9(Q8(Z,"invalid_stream_settings"));if(!J)throw new m("Invalid stream settings",400,"invalid_stream_settings");let Y=await this.updateStreamSettings(J);if(!Q.writableEnded&&!Q.destroyed)this.sendJson(Q,200,Y)}catch(Z){if(Q.writableEnded||Q.destroyed)return;let J=Z instanceof m?Z.status:500,Y=Z instanceof m?Z.code:"stream_settings_failed";this.sendJson(Q,J,{error:Y})}}updateStreamSettings($){let Q=this.streamSettingsUpdate.then(async()=>{let Z=b4({...this.encoderSettings,...$},this.encoderSettings);return await this.capture.updateStreamSettings(Z),this.encoderSettings=Z,Z});return this.streamSettingsUpdate=Q.then(()=>{},()=>{}),Q}async handleWebRTCOffer($,Q){let Z,J=!1,Y,X=()=>{if(!Z)return Promise.resolve();return Y??=this.capture.closeWebRTCSession(Z),Y},G=()=>{if(!Q.writableFinished)X()};Q.once("close",G);try{if($.method!=="POST")throw new m("WebRTC offers require POST",405,"method_not_allowed");if(!p9($))throw new m("WebRTC offers require application/json",415,"unsupported_media_type");let H=await $8($,S9),K=k9(Q8(H,"invalid_offer"));if(Z=K.sessionId,await this.waitForCapture(),await this.refreshScreenSizeFromNative())this.broadcastConfig();let W=await this.capture.handleWebRTCOffer(K);if(J=!0,Q.writableEnded||Q.destroyed){await X();return}this.sendJson(Q,200,W)}catch(H){if(J)await X();if(Q.writableEnded||Q.destroyed)return;let K=H instanceof Error&&H.message.includes("WebRTC signaling already in progress"),W=H instanceof m?H.status:K?409:500,z=H instanceof m?H.code:K?"webrtc_session_busy":"webrtc_offer_failed";this.sendJson(Q,W,{error:z,message:H instanceof Error?H.message:String(H)})}finally{if(Q.writableFinished)Q.off("close",G)}}async handleWebRTCClose($,Q){try{if($.method!=="POST")throw new m("WebRTC close requires POST",405,"method_not_allowed");let Z=await $8($,4096),J=f9(Q8(Z,"invalid_close_request"));if(await this.capture.closeWebRTCSession(J.sessionId),Q.writableEnded||Q.destroyed)return;Q.writeHead(204,o0),Q.end()}catch(Z){if(Q.writableEnded||Q.destroyed)return;let J=Z instanceof m?Z.status:400,Y=Z instanceof m?Z.code:"invalid_close_request";this.sendJson(Q,J,{error:Y,message:Z instanceof Error?Z.message:String(Z)})}}handleOptions($,Q){Z8(Q)}handleAx($,Q){return this.serveAxJson(Q,()=>z4(this.udid),"ax_unavailable")}handleForeground($,Q){return this.serveAxJson(Q,()=>H4(this.udid),"foreground_unavailable")}async serveAxJson($,Q,Z){try{let J=await Q();if($.writableEnded)return;this.sendJsonString($,200,J)}catch(J){if($.writableEnded)return;this.sendJson($,503,{error:Z,message:J instanceof Error?J.message:String(J)})}}attachHidSocket($){this.hidSockets.add($);let Q=this.configFrame();if(Q)$.send(Q);$.on("message",(Z)=>this.handleHidMessage(Buffer.isBuffer(Z)?Z:Buffer.from(Z))),$.on("close",()=>this.hidSockets.delete($)),$.on("error",()=>this.hidSockets.delete($))}async handleHidMessage($){if($.length<1)return;let Q=$[0],Z=$.length>1?$.subarray(1):null,J=()=>{if(!Z)return null;try{return JSON.parse(Z.toString("utf8"))}catch{return null}},Y=this.width,X=this.height;switch(Q){case 3:{let G=J();if(G)this.recordTouchEvent(G),this.hid.touch(G.type,G.x,G.y,Y,X,G.edge??0);break}case 4:{let G=J();if(!G)break;if(this.recordHidEvent(Q,G),G.page!=null&&G.usage!=null)this.hid.buttonHid(G.page,G.usage,G.phase??"press");else this.hid.button(G.button);break}case 5:{let G=J();if(G)this.recordHidEvent(Q,G),this.hid.multiTouch(G.type,G.x1,G.y1,G.x2,G.y2,Y,X);break}case 6:{let G=J();if(G)this.recordHidEvent(Q,G),this.hid.key(G.type,G.usage);break}case 7:{let G=J();if(!G)break;let H=GQ[G.orientation];if(H!=null&&await this.hid.orientation(H)){if(this.recordHidEvent(Q,G),G.orientation!==this.orientation)this.orientation=G.orientation,this.broadcastConfig()}break}case 8:{let G=J();if(G)this.recordHidEvent(Q,G),this.hid.caDebug(G.option,G.enabled);break}case 9:this.recordHidEvent(Q,{}),this.hid.memoryWarning();break;case 10:{let G=J();if(G)this.recordHidEvent(Q,G),this.hid.digitalCrown(G.delta);break}case 11:{let G=J();if(G)this.recordHidEvent(Q,G),this.hid.scroll(G.dx*Y,G.dy*X,Y,X,G.x,G.y);break}case 12:this.recordHidEvent(Q,{}),this.hid.softwareKeyboard();break}}recordTouchEvent($){if($.type==="begin"){this.touchGestureLog=h9($);return}if($.type==="move"){let Q=this.touchGestureLog;if(!Q)Q=h9($),this.touchGestureLog=Q;if(Q.lastX=$.x,Q.lastY=$.y,Q.moveCount++,$.edge!=null)Q.edge=$.edge;if(b9(Q))if(Q.eventId==null){let Z=K0({device:this.udid,source:"hid",kind:"drag",action:"drag",summary:M4(Q),details:this.touchGestureDetails(Q,"drag","move")});Q.eventId=Z.id}else r4(Q.eventId,{kind:"drag",action:"drag",summary:M4(Q),details:this.touchGestureDetails(Q,"drag","move")},{notify:!1});return}if($.type==="end"){let Q=this.touchGestureLog;if(Q){if(Q.lastX=$.x,Q.lastY=$.y,$.edge!=null)Q.edge=$.edge;if(Q.moveCount>0&&b9(Q))if(Q.eventId==null)K0({device:this.udid,source:"hid",kind:"drag",action:"drag",summary:M4(Q),details:this.touchGestureDetails(Q,"drag","end")});else r4(Q.eventId,{kind:"drag",action:"drag",summary:M4(Q),details:this.touchGestureDetails(Q,"drag","end")});else K0({device:this.udid,source:"hid",kind:"tap",action:"tap",summary:`Tap ${S0($.x,$.y)}`,details:this.touchGestureDetails(Q,"tap")});this.touchGestureLog=void 0;return}}this.recordHidEvent(3,$)}eventLogScreen(){return this.width>0&&this.height>0?{width:this.width,height:this.height}:void 0}touchGestureDetails($,Q,Z){return{type:Q,...Z?{phase:Z}:{},start:{x:$.startX,y:$.startY},current:{x:$.lastX,y:$.lastY},moveCount:$.moveCount,...$.edge!=null?{edge:$.edge}:{},...this.eventLogScreen()?{screen:this.eventLogScreen()}:{}}}recordHidEvent($,Q){let Z=I9(this.udid,$,Q,this.eventLogScreen());if(Z)K0(Z)}screenConfig(){return{width:this.width,height:this.height,orientation:this.orientation}}configFrame(){if(this.width===0&&this.height===0)return null;return Buffer.concat([Buffer.from([JQ]),Buffer.from(JSON.stringify(this.screenConfig()))])}async refreshScreenSizeFromNative(){let{width:$,height:Q}=await this.capture.screenSize();if(!$||!Q||$===this.width&&Q===this.height)return!1;return this.width=$,this.height=Q,!0}updateScreenSize($,Q){if(!$||!Q||$===this.width&&Q===this.height)return;this.width=$,this.height=Q,this.broadcastConfig()}broadcastConfig(){let $=this.configFrame();if(!$)return;for(let Q of this.hidSockets)Q.send($)}sendJson($,Q,Z){this.sendJsonString($,Q,JSON.stringify(Z))}sendJsonString($,Q,Z){let J=Buffer.from(Z,"utf8");$.writeHead(Q,{"Content-Type":"application/json","Cache-Control":"no-cache, no-store","Content-Length":String(J.length),...o0}),$.end(J)}}var L0=new Map;function _4($,Q){let Z=L0.get($);if(!Z){let J=new g9($,Q);Z=J,L0.set($,J);try{J.start().catch(()=>{if(L0.get($)!==J)return;J.close(),L0.delete($)})}catch(Y){throw J.close(),L0.delete($),Y}}return Z}function J8($){let Q=L0.get($);if(Q)Q.close(),L0.delete($)}var r0=K9(Z6(),1),g1=r0.default("serve-sim:cli"),c1=r0.default("serve-sim:helper"),m1=r0.default("serve-sim:state"),t0=r0.default("serve-sim:mw");import{execFileSync as L4}from"child_process";import{createHash as W6}from"crypto";import{existsSync as s,mkdirSync as z6,readdirSync as lQ,readFileSync as V0,renameSync as H6,statSync as M6,unlinkSync as J6}from"fs";import{tmpdir as _6}from"os";import{basename as F6,dirname as N8,join as i}from"path";import{inflateSync as dQ}from"zlib";var U8="/Library/Developer/CoreSimulator/Profiles/DeviceTypes",N6="/Library/Developer/DeviceKit/Chrome",Y6="com.apple.dt.devicekit.chrome.",X6=i(_6(),"serve-sim-devicekit-chrome"),G6=i(_6(),"serve-sim-device-placeholder-assets"),z0="/System/Library/CoreServices/CoreTypes.bundle/Contents/Library/MobileDevices.bundle/Contents/Resources",iQ="/System/Library/CoreServices/CoreTypes.bundle/Contents/Library/CoreTypes-0006.bundle/Contents/Resources",V6={"vision-pro":{paths:[i(z0,"com.apple.vision-pro.icns"),i(iQ,"com.apple.visionpro.icns")]},"iphone-17e":{paths:[i(z0,"com.apple.iphone-16-e-1.icns")]},"ipad-air-11-inch-m4":{paths:[i(z0,"com.apple.ipad-air-m3-1.icns")]},"ipad-air-13-inch-m4":{paths:[i(z0,"com.apple.ipad-air-m3-1.icns")]}},K8=null,W8=new Map,z8=new Map,H8=new Map,M8=null,_8=new Map;function j4($){return $.startsWith(Y6)?$.slice(Y6.length):$}function B8($){let Q=typeof $==="string"?$:$.toString("latin1"),Z=/\/CropBox\s*\[\s*(-?\d+(?:\.\d+)?)\s+(-?\d+(?:\.\d+)?)\s+(-?\d+(?:\.\d+)?)\s+(-?\d+(?:\.\d+)?)\s*\]/.exec(Q)??/\/MediaBox\s*\[\s*(-?\d+(?:\.\d+)?)\s+(-?\d+(?:\.\d+)?)\s+(-?\d+(?:\.\d+)?)\s+(-?\d+(?:\.\d+)?)\s*\]/.exec(Q);if(!Z)return null;let J=Number(Z[1]),Y=Number(Z[2]),X=Number(Z[3]),G=Number(Z[4]),H=Math.abs(X-J),K=Math.abs(G-Y);return H>0&&K>0?{width:H,height:K}:null}function nQ($,Q){let Z=K7($);if(Z)return Z;let J=typeof $.framebufferMask==="string"?$.framebufferMask:null;if(!J)return null;let Y=typeof $.__profileDir==="string"?$.__profileDir:null;if(!Y)return null;let X=i(Y,`${J}.pdf`);if(!s(X))return null;let G=B8(V0(X));if(!G)return null;let H=W7(Q);return{width:G.width/H,height:G.height/H}}function U6($){let Q=L8($),Z=Q;if(z8.has(Z))return z8.get(Z)??null;let J=tQ(Q);return z8.set(Z,J),J}function B6($){let Q=L8($);if(H8.has(Q))return H8.get(Q)??null;let Z=oQ($);return H8.set(Q,Z),Z}function oQ($){let Q=eQ($),Z=Q?j6(Q):null,J=$7(Z)??Q7($.name);if(!J)return null;let Y=A6(J);return Y?{name:J,width:Y.width,height:Y.height}:null}function L6($,Q){let Z=j4($.searchParams.get("chrome")??""),J=$.searchParams.get("image")??"";if(!/^[A-Za-z0-9_-]+$/.test(Z)||!J){v0(Q,400,"Invalid chrome asset request");return}let Y=D6(Z);if(!Y||!Y.allowedImages.has(J)||J.includes("/")){v0(Q,404,"Chrome asset not found");return}let X=O8(Z,J);if(!s(X)){v0(Q,404,"Chrome asset not found");return}try{let G=P6(Z,J,X),H=V0(G);Q.writeHead(200,{"Content-Type":"image/png","Cache-Control":"public, max-age=604800, immutable","Content-Length":String(H.byteLength)}),Q.end(H)}catch(G){v0(Q,500,G instanceof Error?G.message:"Failed to render chrome asset")}}function O6($,Q){let Z=$.searchParams.get("name")??"";try{let J=A6(Z);if(!J){v0(Q,404,"Placeholder asset not found");return}let Y=V0(J.pngPath);Q.writeHead(200,{"Content-Type":"image/png","Cache-Control":"public, max-age=604800, immutable","Content-Length":String(Y.byteLength)}),Q.end(Y)}catch(J){v0(Q,500,J instanceof Error?J.message:"Failed to render placeholder asset")}}function A6($){if(!/^[A-Za-z0-9._-]+$/.test($))return null;if(_8.has($))return _8.get($)??null;let Q=aQ($),Z=Q?z7($,Q):null;return _8.set($,Z),Z}function aQ($){let Z=rQ($)?.paths.find((Y)=>s(Y));if(Z)return Z;if(!C6().some((Y)=>Y.iconName===$))return null;let J=i(z0,`${$}.icns`);return s(J)?J:null}function rQ($){return Object.prototype.hasOwnProperty.call(V6,$)?V6[$]:null}function tQ($){let Q=R6($);if(!s(Q))return null;let Z=j6(Q);if(!Z?.chromeIdentifier)return null;let J=D6(Z.chromeIdentifier);if(!J)return null;let Y=null;if(J.compositeImage)Y=F8(J.identifier,J.compositeImage);let X=J.compositeImage?_7(J.identifier,J.compositeImage):null,G=(X&&Z.framebufferMaskSize?M7(Z.framebufferMaskSize,X):null)??Z.screenSize??(Y?{width:Y.width-J.insets.left-J.insets.right,height:Y.height-J.insets.top-J.insets.bottom}:null);if(!G||G.width<=0||G.height<=0)return null;let H=Y??{width:G.width+J.insets.left+J.insets.right,height:G.height+J.insets.top+J.insets.bottom},K={x:J.devicePadding.left,y:J.devicePadding.top,width:H.width,height:H.height},W={width:H.width+J.devicePadding.left+J.devicePadding.right,height:H.height+J.devicePadding.top+J.devicePadding.bottom},z={x:K.x+(H.width-G.width)/2,y:K.y+(H.height-G.height)/2,width:G.width,height:G.height},U=X?Math.max(0,X.radius-(X.width-G.width)/2):J.innerCornerRadius,M=J.slice?F8(J.identifier,J.slice.topLeft):null,F=J.identifier.startsWith("watch"),A=J.buttons.flatMap((R)=>{let x=F8(J.identifier,R.image);if(!x)return[];let j=X7(R,x,H,J.devicePadding),P={x:x.width>0?(R.rolloverOffset.x-R.normalOffset.x)/x.width:0,y:x.height>0?(R.rolloverOffset.y-R.normalOffset.y)/x.height:0};return[{name:R.name,image:R.image,imageDown:R.imageDown,onTop:R.onTop||F,frame:{...j,...x},hover:P,usagePage:R.usagePage,usage:R.usage}]});return{identifier:J.identifier,frame:W,body:K,screen:z,insets:J.insets,outerCornerRadius:J.outerCornerRadius,innerCornerRadius:J.innerCornerRadius,screenRadius:U,compositeImage:J.compositeImage,slice:J.slice,corner:M,buttons:A}}function j6($){let Q=O4($);if(!Q)return null;let Z=typeof Q.chromeIdentifier==="string"?Q.chromeIdentifier:null,J=Z?j4(Z):null;return{chromeIdentifier:J,modelIdentifier:typeof Q.modelIdentifier==="string"?Q.modelIdentifier:null,productClass:typeof Q.productClass==="string"?Q.productClass:null,screenSize:J?nQ({...Q,__profileDir:N8($)},J):null,framebufferMaskSize:sQ({...Q,__profileDir:N8($)})}}function sQ($){let Q=typeof $.framebufferMask==="string"?$.framebufferMask:null,Z=typeof $.__profileDir==="string"?$.__profileDir:null;if(!Q||!Z)return null;let J=i(Z,`${Q}.pdf`);if(!s(J))return null;return B8(V0(J))}function L8($){return G7($.deviceTypeIdentifier)??$.name}function eQ($){let Q=R6(L8($));return s(Q)?Q:null}function R6($){return i(U8,`${$}.simdevicetype`,"Contents","Resources","profile.plist")}function $7($){if(!$)return null;let Q=new Set;if($.modelIdentifier)Q.add($.modelIdentifier);if($.productClass)Q.add($.productClass),Q.add(`${$.productClass}AP`);if(Q.size===0)return null;for(let Z of C6())if(Z.modelCodes.some((J)=>Q.has(J)))return Z.iconName;return null}function Q7($){let Q=$.toLowerCase();if(Q.includes("vision"))return"vision-pro";if(/iphone\s+17e\b/.test(Q))return"iphone-17e";if(/ipad\s+air\s+11-inch\s+\(m4\)/.test(Q))return"ipad-air-11-inch-m4";if(/ipad\s+air\s+13-inch\s+\(m4\)/.test(Q))return"ipad-air-13-inch-m4";return null}function C6(){if(M8)return M8;let $=O4(i(z0,"MobileDevices-Info.plist"))??O4(i(N8(z0),"Info.plist")),Q=Array.isArray($?.UTExportedTypeDeclarations)?$.UTExportedTypeDeclarations:[],Z=[];for(let J of Q){let Y=Z0(J),X=r(Y.UTTypeIconFile);if(!X||!X.endsWith(".icns"))continue;let G=i(z0,X);if(!s(G))continue;let K=Z0(Y.UTTypeTagSpecification)["com.apple.device-model-code"],W=Array.isArray(K)?K.filter((z)=>typeof z==="string"&&z.length>0):[];if(W.length===0)continue;Z.push({description:r(Y.UTTypeDescription)??"",iconFile:X,iconName:F6(X,".icns"),modelCodes:W})}return M8=Z,Z}function D6($){let Q=j4($);if(!/^[A-Za-z0-9_-]+$/.test(Q))return null;if(W8.has(Q))return W8.get(Q)??null;let Z=i(N6,`${Q}.devicechrome`,"Contents","Resources","chrome.json"),J=null;try{let Y=JSON.parse(V0(Z,"utf-8"));J=Z7(Y)}catch{J=null}return W8.set(Q,J),J}function Z7($){let Q=typeof $.identifier==="string"?$.identifier:null;if(!Q)return null;let Z=j4(Q),J=Z0($.images),Y=Z0(J.sizing),X=Z0($.paths),G=G0(Z0(X.simpleOutsideBorder).cornerRadiusX),H={top:G0(Y.topHeight),left:G0(Y.leftWidth),bottom:G0(Y.bottomHeight),right:G0(Y.rightWidth)},K=Z0(J.devicePadding),W={top:G0(K.top),left:G0(K.left),bottom:G0(K.bottom),right:G0(K.right)},z=typeof J.composite==="string"?J.composite:null,U=J7(J),M=Array.isArray($.inputs)?$.inputs.flatMap((A)=>{let R=Y7(Z0(A));return R?[R]:[]}):[],F=new Set;for(let A of Object.values(J))if(typeof A==="string")F.add(A);for(let A of M)F.add(A.image);if(Array.isArray($.inputs))for(let A of $.inputs){let R=Z0(A);if(typeof R.imageDown==="string")F.add(R.imageDown)}return{identifier:Z,insets:H,devicePadding:W,outerCornerRadius:G,innerCornerRadius:Math.max(G-Math.max(H.left,H.top),0),compositeImage:z,slice:U,buttons:M,allowedImages:F}}function J7($){let Q=r($.topLeft),Z=r($.top),J=r($.topRight),Y=r($.right),X=r($.bottomRight),G=r($.bottom),H=r($.bottomLeft),K=r($.left);if(!Q||!Z||!J||!Y||!X||!G||!H||!K)return null;return{topLeft:Q,top:Z,topRight:J,right:Y,bottomRight:X,bottom:G,bottomLeft:H,left:K}}function Y7($){let Q=r($.name),Z=r($.image);if(!Q||!Z)return null;let J=r($.anchor),Y=r($.align),X=Z0($.offsets),G=K6(Z0(X.normal)),H=K6(Z0(X.rollover));return{name:Q,image:Z,imageDown:r($.imageDown),onTop:$.onTop===!0,anchor:J==="right"||J==="top"||J==="bottom"?J:"left",align:Y==="trailing"?"trailing":"leading",normalOffset:G??H??{x:0,y:0},rolloverOffset:H??G??{x:0,y:0},usagePage:H0($.usagePage),usage:H0($.usage)}}function X7($,Q,Z,J){let{left:Y,top:X}=J,G=2*$.normalOffset.x-$.rolloverOffset.x,H=2*$.normalOffset.y-$.rolloverOffset.y,K=$.align==="trailing"?Y+Z.width+G-Q.width:Y+G;switch($.anchor){case"left":return{x:Y+$.rolloverOffset.x-Q.width/2,y:X+$.rolloverOffset.y};case"right":return{x:Y+Z.width+G,y:X+H};case"top":return{x:K,y:X+H-Q.height};case"bottom":return{x:K,y:X+Z.height+H}}}function G7($){if(!$)return null;if(!K8)K8=V7();return K8.get($)??null}function V7(){let $=new Map;try{for(let Q of lQ(U8)){if(!Q.endsWith(".simdevicetype"))continue;let Z=i(U8,Q),J=O4(i(Z,"Contents","Info.plist")),Y=typeof J?.CFBundleIdentifier==="string"?J.CFBundleIdentifier:null,X=typeof J?.CFBundleName==="string"?J.CFBundleName:F6(Q,".simdevicetype");if(Y)$.set(Y,X)}}catch{}return $}function O4($){try{let Q=L4("plutil",["-convert","json","-o","-",$],{encoding:"utf-8",stdio:["ignore","pipe","ignore"],timeout:2000});return JSON.parse(Q)}catch{return null}}function K7($){let Q=H0($.mainScreenWidth),Z=H0($.mainScreenHeight),J=H0($.mainScreenScale);if(!Q||!Z||!J||J<=0)return null;return{width:Q/J,height:Z/J}}function W7($){if($.startsWith("phone"))return 3;if($.startsWith("tablet"))return 2;if($.startsWith("watch"))return 2;return 1}function F8($,Q){let Z=O8($,Q);if(!s(Z))return null;return B8(V0(Z))}function O8($,Q){return i(N6,`${$}.devicechrome`,"Contents","Resources",`${Q}.pdf`)}function P6($,Q,Z){z6(X6,{recursive:!0});let J=M6(Z),Y=W6("sha1").update($).update("\x00").update(Q).update("\x00").update(String(J.mtimeMs)).update("\x00").update(String(J.size)).digest("hex"),X=i(X6,`${$}-${Y}.png`);if(s(X))return X;let G=`${X}.${process.pid}.tmp`;return L4("sips",["-s","format","png",Z,"--out",G],{stdio:["ignore","ignore","ignore"],timeout:1e4}),H6(G,X),X}function z7($,Q){z6(G6,{recursive:!0});let Z=M6(Q),J=W6("sha1").update($).update("\x00").update(Q).update("\x00").update(String(Z.mtimeMs)).update("\x00").update(String(Z.size)).digest("hex"),Y=i(G6,`${$}-${J}.png`);if(s(Y)){let H=A4(V0(Y));return{sourcePath:Q,pngPath:Y,width:H.width,height:H.height}}let X=`${Y}.${process.pid}.tmp`,G=`${Y}.${process.pid}.raw.png`;try{L4("sips",["-s","format","png",Q,"--out",G],{stdio:["ignore","ignore","ignore"],timeout:1e4});let H=V0(G),K=H7(H)??{x:0,y:0,...A4(H)};return L4("sips",["-c",String(K.height),String(K.width),"--cropOffset",String(K.y),String(K.x),"-s","format","png",Q,"--out",X],{stdio:["ignore","ignore","ignore"],timeout:1e4}),H6(X,Y),{sourcePath:Q,pngPath:Y,width:K.width,height:K.height}}finally{try{if(s(G))J6(G)}catch{}try{if(s(X))J6(X)}catch{}}}function A4($){if($.byteLength<24||$[0]!==137||$.toString("ascii",1,4)!=="PNG")throw Error("Invalid PNG placeholder asset");return{width:$.readUInt32BE(16),height:$.readUInt32BE(20)}}function T6($,Q){let{width:Z,height:J}=A4($),Y=8,X=0,G=0,H=[];while(Y<$.byteLength){let R=$.readUInt32BE(Y);Y+=4;let x=$.toString("ascii",Y,Y+4);Y+=4;let j=$.subarray(Y,Y+R);if(Y+=R+4,x==="IHDR")X=j[8]??0,G=j[9]??0;else if(x==="IDAT")H.push(j);else if(x==="IEND")break}let K=G===6?4:G===4?2:0;if(X!==8||K===0||H.length===0)return null;let W=G===6,z=dQ(Buffer.concat(H)),U=Z*K,M=new Uint8Array(Z*J),F=Buffer.alloc(U),A=0;for(let R=0;R<J;R++){let x=z[A++]??0,j=Buffer.from(z.subarray(A,A+U));A+=U,N7(j,F,K,x);for(let P=0;P<Z;P++){let L=P*K,C=j[L]??0,I=W?j[L+1]??0:C,_=W?j[L+2]??0:C,V=j[L+K-1]??0;if(Q(C,I,_,V))M[R*Z+P]=1}F=j}return{width:Z,height:J,mask:M}}function H7($){let{width:Q,height:Z}=A4($),J=T6($,(K,W,z,U)=>U>0);if(!J)return{x:0,y:0,width:Q,height:Z};let Y=Q,X=Z,G=-1,H=-1;for(let K=0;K<Z;K++)for(let W=0;W<Q;W++){if(!J.mask[K*Q+W])continue;if(W<Y)Y=W;if(K<X)X=K;if(W>G)G=W;if(K>H)H=K}if(G<Y||H<X)return{x:0,y:0,width:Q,height:Z};return{x:Y,y:X,width:G-Y+1,height:H-X+1}}function M7($,Q){if(Q.width<=0)return null;let Z=Math.max(1,Math.round($.width/Q.width));return{width:$.width/Z,height:$.height/Z}}function _7($,Q){let Z=F7($,Q);if(!Z)return null;let J=T6(Z,(P,L,C,I)=>I>200&&P<30&&L<30&&C<30);if(!J)return null;let{width:Y,height:X,mask:G}=J,H=Math.floor(Y/2),K=Math.floor(X/2),W=(P,L)=>P>=0&&L>=0&&P<Y&&L<X&&G[L*Y+P]===1;if(!W(H,K))return null;let z=H;while(z>0&&W(z-1,K))z--;let U=H;while(U<Y-1&&W(U+1,K))U++;let M=K;while(M>0&&W(H,M-1))M--;let F=K;while(F<X-1&&W(H,F+1))F++;let A=F-M,R=(P,L)=>{let C=0;while(C<A&&!W(P,L?M+C:F-C))C++;return C},x=[R(z,!0),R(U,!0),R(z,!1),R(U,!1)],j=x.reduce((P,L)=>P+L,0)/x.length;return{x:z,y:M,width:U-z+1,height:F-M+1,radius:j}}function F7($,Q){let Z=O8($,Q);if(!s(Z))return null;try{return V0(P6($,Q,Z))}catch{return null}}function N7($,Q,Z,J){for(let Y=0;Y<$.byteLength;Y++){let X=Y>=Z?$[Y-Z]:0,G=Q[Y]??0,H=Y>=Z?Q[Y-Z]:0;switch(J){case 0:break;case 1:$[Y]=$[Y]+X&255;break;case 2:$[Y]=$[Y]+G&255;break;case 3:$[Y]=$[Y]+Math.floor((X+G)/2)&255;break;case 4:$[Y]=$[Y]+U7(X,G,H)&255;break;default:throw Error(`Unsupported PNG filter ${J}`)}}}function U7($,Q,Z){let J=$+Q-Z,Y=Math.abs(J-$),X=Math.abs(J-Q),G=Math.abs(J-Z);if(Y<=X&&Y<=G)return $;return X<=G?Q:Z}function v0($,Q,Z){$.writeHead(Q,{"Content-Type":"application/json","Cache-Control":"no-store"}),$.end(JSON.stringify({ok:!1,error:Z}))}function G0($){return H0($)??0}function H0($){if(typeof $==="number"&&Number.isFinite($))return $;if(typeof $==="string"&&$.trim()){let Q=Number($);return Number.isFinite(Q)?Q:null}return null}function r($){return typeof $==="string"&&$?$:null}function Z0($){return $&&typeof $==="object"&&!Array.isArray($)?$:{}}function K6($){let Q=H0($.x),Z=H0($.y);return Q===null||Z===null?null:{x:Q,y:Z}}import{exec as B7}from"child_process";import{createHash as x6,timingSafeEqual as L7}from"crypto";function E6($){let Q=new TextDecoder;if(typeof $==="string")return $;if($ instanceof ArrayBuffer)return Q.decode(new Uint8Array($));if(ArrayBuffer.isView($))return Q.decode(new Uint8Array($.buffer,$.byteOffset,$.byteLength));return String($)}function I6($){return $.headers.get("host")??new URL($.url).host}var O7=1e4;function A7($,Q){let Z=x6("sha256").update($).digest(),J=x6("sha256").update(Q).digest();return L7(Z,J)}function j7($,Q,Z){let J=!1,Y=new Map,X=Z.ssePrefixes??[],G=(W)=>{if($.readyState===$.OPEN)$.send(JSON.stringify(W))},H=setTimeout(()=>{if(!J)$.close()},O7);H.unref?.();let K=(W,z)=>{if(Y.has(W))return;let U=z.split("?")[0];if(!z.startsWith("/")||!X.some((j)=>U===j)){G({sub:W,end:!0,error:"path not allowed"});return}if(!Z.onSseRequest){G({sub:W,end:!0,error:"sse requests not supported"});return}let M=!0,F=!1,A=null,R=(j)=>{if(F)return;F=!0,G(j?{sub:W,end:!0,error:j}:{sub:W,end:!0})},x={destroy(){M=!1,A?.cancel().catch(()=>{})}};Y.set(W,x),(async()=>{try{let j=await Z.onSseRequest(z,Q);if(!M)return;if(!j?.body){R();return}let P=new TextDecoder;A=j.body.getReader();while(M){let{done:L,value:C}=await A.read();if(L)break;G({sub:W,data:P.decode(C,{stream:!0})})}if(M){let L=P.decode();if(L)G({sub:W,data:L})}}catch{if(M)R();return}finally{if(M=!1,A)try{A.releaseLock()}catch{}if(Y.get(W)===x)Y.delete(W),R()}})()};$.on("message",(W)=>{let z;try{z=JSON.parse(E6(W))}catch{return}if(!J){if(typeof z.token==="string"&&A7(z.token,Z.execToken))J=!0,clearTimeout(H),G({ready:!0});else $.close();return}if(typeof z.unsub==="number"){Y.get(z.unsub)?.destroy(),Y.delete(z.unsub);return}if(typeof z.sub==="number"&&typeof z.path==="string"){K(z.sub,z.path);return}if(typeof z.id==="number"&&z.ui!==void 0){let{id:F}=z;if(!Z.onUiRequest){G({id:F,error:"ui requests not supported"});return}Z.onUiRequest(z.ui).then((A)=>G({id:F,...A})).catch((A)=>G({id:F,error:A instanceof Error?A.message:String(A)}));return}if(typeof z.id!=="number"||typeof z.command!=="string"||!z.command)return;let{id:U,command:M}=z;B7(M,{maxBuffer:16777216},(F,A,R)=>{let x={id:U,stdout:A.toString(),stderr:R.toString(),exitCode:F?F.code??1:0};try{Z.onCommandResult?.(M,x)}catch{}G(x)})}),$.on("error",()=>$.close()),$.on("close",()=>{clearTimeout(H);for(let W of Y.values())W.destroy();Y.clear()})}function q6($){return function(Z,J){let Y=new URL(Z.url);if(Y.pathname!==$.path&&Y.pathname!==`${$.path}/`)return!1;let X=Z.headers.get("origin");if(X)try{if(new URL(X).host!==I6(Z))return J.close(),!0}catch{return J.close(),!0}return j7(J,Z,$),!0}}function w6($,Q,{helperProxyTarget:Z,fallbackDevice:J,resolveSession:Y}){let X=new URL($.url,"http://serve-sim.local"),G=Z(`${X.pathname}${X.search}`);if(!G||G.upstreamPath!=="/ws")return!1;let H=G.device??J??null;if(!H)return Q.close(),!0;let K;try{K=Y(H)}catch{return Q.close(),!0}return K.attachHidSocket(Q),!0}import{execFile as D7}from"child_process";import{existsSync as k6}from"fs";import{join as A8,resolve as P7}from"path";import{fileURLToPath as R7}from"url";import{dirname as C7}from"path";import{WebSocketServer as MJ}from"ws";function S6($){return C7(R7($))}var j8=S6(import.meta.url),f6=["extra-small","small","medium","large","extra-large","extra-extra-large","extra-extra-extra-large","accessibility-medium","accessibility-large","accessibility-extra-large","accessibility-extra-extra-large","accessibility-extra-extra-extra-large"],T7=["none","grayscale","red-green","green-red","blue-yellow"],E7={protanopia:"red-green",deuteranopia:"green-red",tritanopia:"blue-yellow"},s0=["on","off"],I7=new Set(["on","true","enabled","1","yes"]),x7=new Set(["off","false","disabled","0","no"]),j0={appearance:{via:"appearance",values:["light","dark"]},"liquid-glass":{via:"ax",values:["clear","tinted"]},"color-filter":{via:"ax",values:T7,aliases:E7},"text-size":{via:"content_size",values:f6,extraValues:["increment","decrement"]},"reduce-motion":{via:"ax",values:s0,toggle:!0},"increase-contrast":{via:"increase_contrast",values:s0,toggle:!0},"show-borders":{via:"ax",values:s0,toggle:!0},"reduce-transparency":{via:"ax",values:s0,toggle:!0},voiceover:{via:"ax",values:s0,toggle:!0}};function v6($,Q){let Z=j0[$];if(!Z)return null;let J=Q.toLowerCase();if(Z.toggle){if(I7.has(J))return"on";if(x7.has(J))return"off";return null}let Y=Z.aliases?.[J]??J;if(Z.values.includes(Y))return Y;if(Z.extraValues?.includes(Y))return Y;return null}function y6(){let $=[A8(j8,"..","dist","simax","serve-sim-ax-settings"),A8(j8,"simax","serve-sim-ax-settings")];for(let Q of $)if(k6(Q))return P7(Q);return null}var R4=null;function q7(){return R4??=(async()=>{let $=y6();if($)return $;let Q=A8(j8,"..","Sources","SimAXSettings","build.sh");if(!k6(Q))throw Error("sim-ax-settings binary not found — this build of serve-sim does not "+"include the simulator settings helper. Reinstall from a recent release.");console.error("[serve-sim] building sim-ax-settings (one-time)…"),await R8("bash",[Q]);let Z=y6();if(!Z)throw Error("Build succeeded but sim-ax-settings not found.");return Z})(),R4.catch(()=>{R4=null}),R4}function R8($,Q){return new Promise((Z,J)=>{D7($,Q,{encoding:"utf-8",maxBuffer:4194304},(Y,X,G)=>{if(Y)J(Error(String(G).trim()||Y.message));else Z(String(X).trim())})})}function b6($,Q,Z){let J=["simctl","ui",$,Q];if(Z!==void 0)J.push(Z);return R8("xcrun",J)}async function C8($,...Q){let Z=await q7();return R8("xcrun",["simctl","spawn",$,Z,...Q])}function w7($){return $==="enabled"?"on":"off"}function S7($){return $==="on"?"enabled":"disabled"}async function y7($,Q){let Z=j0[Q];if(!Z)throw Error(`unknown option: ${Q}`);if(Z.via==="ax")return C8($,"get",Q);let J=(await b6($,Z.via)).toLowerCase();return Z.toggle?w7(J):J}async function h6($,Q,Z){let J=j0[Q];if(!J)throw Error(`unknown option: ${Q}`);if(J.via==="ax"){await C8($,"set",Q,Z);return}await b6($,J.via,J.toggle?S7(Z):Z)}async function u6($){let Q=Object.entries(j0).filter(([,X])=>X.via!=="ax"),[Z,...J]=await Promise.all([C8($,"status").then((X)=>JSON.parse(X)).catch(()=>({})),...Q.map(([X])=>y7($,X).catch(()=>"unsupported"))]),Y={};for(let[X,G]of Object.entries(j0))if(G.via==="ax")Y[X]=Z[X]??"unsupported";return Q.forEach(([X],G)=>{Y[X]=J[G]}),Y}var CJ=`Usage: serve-sim ui [status] [--json] [-d udid]
53
53
  serve-sim ui <option> [-d udid] Print the current value
54
54
  serve-sim ui <option> <value> [-d udid] Change the value
55
55
 
@@ -58,58 +58,58 @@ Simulator-wide UI options:
58
58
  liquid-glass clear | tinted
59
59
  color-filter none | grayscale | red-green | green-red | blue-yellow
60
60
  (protanopia/deuteranopia/tritanopia aliases accepted)
61
- text-size ${k6.slice(0,4).join(" | ")} | …
61
+ text-size ${f6.slice(0,4).join(" | ")} | …
62
62
  (12 content-size categories, or increment | decrement)
63
63
  reduce-motion on | off
64
64
  increase-contrast on | off
65
65
  show-borders on | off
66
66
  reduce-transparency on | off
67
- voiceover on | off`;import{EventEmitter as u6}from"events";function w7($){let Q={};if($.headers.forEach((Z,J)=>{Q[J.toLowerCase()]=Z}),!Q.host)Q.host=new URL($.url).host;return Q}function p6($,Q){let Z=new URL(Q.url),J=new u6,Y=new u6,X=new AbortController,G=null,H=!1,K=(E=!1)=>{if(H)return;if(H=!0,X.abort(),G?.cancel().catch(()=>{}),Q.signal.removeEventListener("abort",W),E)J.emit("aborted");J.emit("close")},W=()=>K(!0),z=Q.signal.aborted;Q.signal.addEventListener("abort",W,{once:!0});let U=Object.assign(J,{method:Q.method,url:`${Z.pathname}${Z.search}`,headers:w7(Q),socket:{localPort:Number(Z.port)||void 0},destroy(){K()}}),M=200,F=new Headers,A=!1,R=!1,x=!1,j=!1,D=!1,L=!1,C=null,I,_,V=!1,N=new TextEncoder,B=()=>{if(D)return;D=!0,Y.emit("close")},P=new ReadableStream({start(E){C=E},cancel(){j=!0,K(),B()},pull(){if(!L)return;L=!1,Y.emit("drain")}}),T=(E)=>{if(V)return;V=!0,I(E)},q=()=>M!==101&&M!==204&&M!==205&&M!==304,S=()=>{if(A)return;A=!0,T(new Response(q()?P:null,{status:M,headers:F}))},y=(E)=>{if(S(),!q()||!C||R)return!0;let u=typeof E==="string"?N.encode(E):new Uint8Array(E);try{C.enqueue(u)}catch{return!1}return L=(C.desiredSize??0)<=0,!L},k={get headersSent(){return A},get writableEnded(){return R},get writableFinished(){return x},get destroyed(){return j},get writableNeedDrain(){return L},get statusCode(){return M},set statusCode(E){M=E},writeHead(E,u){if(M=E,u){F=new Headers;for(let[d,Y0]of Object.entries(u))if(Array.isArray(Y0))for(let T0 of Y0)F.append(d,T0);else F.set(d,String(Y0))}S()},write(E,u,d){let Y0=y(E);return(typeof u==="function"?u:d)?.(),Y0},end(E){if(E!==void 0)y(E);S(),R=!0,x=!0;try{C?.close()}catch{}Y.emit("finish"),B(),K()},destroy(E){if(j)return k;S(),j=!0,R=!0;try{C?.error(E??Error("Response destroyed"))}catch{}if(E&&Y.listenerCount("error")>0)Y.emit("error",E);return B(),K(),k},on(E,u){return Y.on(E,u),k},once(E,u){return Y.once(E,u),k},off(E,u){return Y.off(E,u),k}},b=new Promise((E,u)=>{I=E,_=u}),c;try{c=Promise.resolve($(U,k,()=>T(void 0)))}catch(E){c=Promise.reject(E)}if(z)W();return c.then(()=>{if(!V&&R)T(new Response(null,{status:M,headers:F}))},(E)=>{if(V)k.destroy(E instanceof Error?E:void 0);else _(E)}),(async()=>{let E=null;try{if(E=Q.body?.getReader()??null,G=E,E)while(!X.signal.aborted){let{done:u,value:d}=await E.read();if(u)break;J.emit("data",Buffer.from(d))}if(!X.signal.aborted)J.emit("end")}catch{K(!0)}finally{if(G===E)G=null;if(E){if(X.signal.aborted)await E.cancel().catch(()=>{});try{E.releaseLock()}catch{}}}})(),b}var i8=n8(B2(),"serve-sim"),j$,R2="854a02be78c7ffea104cb523636efa991bef5c5b",I4=9222,R$=U9(),C$=1048576,C0=null;function D$($){let Q=new URL($,"http://x").searchParams.get("limit");if(!Q)return;let Z=Number(Q);return Number.isFinite(Z)?Z:void 0}function P$($){let Q=new URL($,"http://x").searchParams.get("since");if(!Q)return;let Z=Number(Q);return Number.isFinite(Z)?Z:void 0}function T$($,Q){try{let Z=I9($,Q);if(Z)K0(Z)}catch{}}var C2=new Set(["host.exp.Exponent","dev.expo.Exponent"]),D2=["Frameworks/React.framework","Frameworks/hermes.framework","Frameworks/Hermes.framework","Frameworks/ExpoModulesCore.framework","main.jsbundle"],P2=/(WidgetRenderer|ExtensionHost|\.extension(\.|$)|Service|PlaceholderApp|InCallService|CallUI|InCallUI|com\.apple\.Preferences\.Cellular|com\.apple\.purplebuddy|com\.apple\.chrono|com\.apple\.shuttle|com\.apple\.usernotificationsui)/i;function E$($){return!P2.test($)}function k$($){return/^[0-9A-F]{8}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{12}$/i.test($)}function T2($,Q,Z){if(Q&&k$($.device)&&!Q.has($.device))return $.pid===Z?"recycle-self":"recycle-helper";return"keep"}function E2($){let Q=/\[app<([^>]+)>:(\d+)\] Setting process visibility to: Foreground/.exec($);if(!Q)return null;return{bundleId:Q[1],pid:parseInt(Q[2],10)}}function I$($,Q){if(C2.has(Q))return Promise.resolve(!0);return new Promise((Z)=>{P0("xcrun",["simctl","get_app_container",$,Q,"app"],{timeout:2000},(J,Y)=>{if(J)return Z(!1);let X=Y.trim();if(!X)return Z(!1);for(let G of D2)if(y$(n8(X,G)))return Z(!0);Z(!1)})})}function x$($){return $.trim().replace(/\s+/g," ").toLowerCase()}function sJ($,Q){let Z=x$(Q);if(!Z)return null;for(let[J,Y]of Object.entries($))if([Y.CFBundleDisplayName,Y.CFBundleName,Y.CFBundleExecutable].filter((G)=>typeof G==="string").some((G)=>x$(G)===Z))return Y.CFBundleIdentifier||J;return null}var J4={at:0,booted:null};async function I2(){let $=Date.now();if(J4.booted&&$-J4.at<1500)return J4.booted;try{let Q=await new Promise((Y,X)=>{P0("xcrun",["simctl","list","devices","booted","-j"],{encoding:"utf-8",timeout:3000},(G,H)=>{if(G)X(G);else Y(H)})}),Z=JSON.parse(Q),J=new Set;for(let Y of Object.values(Z.devices))for(let X of Y)if(X.state==="Booted")J.add(X.udid);return J4={at:$,booted:J},J}catch{return null}}var g8={at:0,udid:null};function x2(){let $=Date.now();if($-g8.at<1500)return g8.udid;let Q=null;try{Q=Y4("defaults read com.apple.iphonesimulator CurrentDeviceUDID",{encoding:"utf-8",stdio:["ignore","pipe","ignore"],timeout:1500}).trim()||null}catch{Q=null}return g8={at:$,udid:Q},Q}async function F0(){let $;try{$=_2(i8).filter((J)=>J.startsWith("server-")&&J.endsWith(".json"))}catch{return[]}let Q=await I2(),Z=[];for(let J of $){let Y=n8(i8,J);try{let X=JSON.parse(F2(Y,"utf-8"));try{process.kill(X.pid,0)}catch{t0("helper pid=%d gone, removing %s",X.pid,Y);try{L$(Y)}catch{}continue}let G=T2(X,Q,process.pid);if(G!=="keep"){if(G==="recycle-self")t0("closing in-process session for shut-down device %s (own pid %d)",X.device,X.pid),Z8(X.device);else{t0("recycling stale helper pid=%d (device %s no longer booted)",X.pid,X.device);try{process.kill(X.pid,"SIGTERM")}catch{}}try{L$(Y)}catch{}continue}Z.push(X)}catch{}}return Z}function D0($,Q){if(Q)return $.find((Z)=>Z.device===Q)??null;return $[0]??null}function q$($){let Q=$.indexOf("?");if(Q===-1)return null;return new URLSearchParams($.slice(Q+1)).get("device")}function q2($){let Q=$.indexOf("?");if(Q===-1)return{limit:null,offset:0};let Z=new URLSearchParams($.slice(Q+1)),J=Z.get("limit"),Y=Z.get("offset"),X=J==null||!/^\d+$/.test(J)?null:Math.min(Math.max(Number(J),1),1000),G=Y==null||!/^\d+$/.test(Y)?0:Math.max(Number(Y),0);return{limit:X,offset:G}}function Z4($){let Q=$.headers?.host;if(Q)return Q;let Z=$.socket.localPort;return Z?`localhost:${Z}`:void 0}function h0($,Q,Z){return`${`${$}${Q}`}?device=${encodeURIComponent(Z)}`}function w2($){let Q=new URL($);return Q.pathname=`${Q.pathname.slice(0,Q.pathname.lastIndexOf("/")+1)}stream-settings`,Q.search="",Q.hash="",Q.toString()}function x4($,Q,Z="",J="http",Y=!1){if(!Q)return $;if(!Y){let z;try{z=new URL(`http://${Q}`).hostname}catch{return $}if(z==="localhost"||z==="127.0.0.1"||z==="[::1]")return $;let U=(M)=>M.replace("127.0.0.1",z);return{...$,url:U($.url),streamUrl:U($.streamUrl),wsUrl:U($.wsUrl)}}let H=`${`${Z==="/"?"":Z.replace(/\/+$/,"")}/helper`}/${encodeURIComponent($.device)}`,K=`${J}://${Q}`,W=`${J==="https"?"wss":"ws"}://${Q}`;return{...$,url:`${K}${H}`,streamUrl:`${K}${H}/stream.mjpeg`,wsUrl:`${W}${H}/ws`}}function S2($){return`${$==="/"?"":$}/helper`}function y2($){return`${$==="/"?"":$}/devtools`}function k2($,Q){let Z=new URL($,"http://serve-sim.local");if(!Z.pathname.startsWith(`${Q}/page/`))return null;return{upstreamPath:`/devtools${Z.pathname.slice(Q.length)}${Z.search}`}}function c8($,Q){let Z=new URL($,"http://serve-sim.local");if(Z.pathname!==Q&&!Z.pathname.startsWith(`${Q}/`))return null;let Y=Z.pathname.slice(Q.length).replace(/^\/+/,"").split("/").filter(Boolean),X=new Set(["ax","config","foreground","health","stream.avcc","stream.mjpeg","webrtc","ws"]),G=Z.searchParams.get("device"),H=Y;if(Y[0]&&!X.has(Y[0]))G=decodeURIComponent(Y[0]),H=Y.slice(1);let K=H.length>0?`/${H.join("/")}`:"/";return Z.searchParams.delete("device"),{device:G,upstreamPath:`${K}${Z.search}`}}var f2="258EAFA5-E914-47DA-95CA-C5AB0DC85B11";function o8($,Q){let Z=Q.length,J;if(Z<126)J=Buffer.from([128|$,Z]);else if(Z<=65535)J=Buffer.alloc(4),J[0]=128|$,J[1]=126,J.writeUInt16BE(Z,2);else J=Buffer.alloc(10),J[0]=128|$,J[1]=127,J.writeBigUInt64BE(BigInt(Z),2);return Buffer.concat([J,Q])}function f$($){if($.length<2)return null;let Q=$[0]&15,Z=($[1]&128)!==0,J=$[1]&127,Y=2;if(J===126){if($.length<Y+2)return null;J=$.readUInt16BE(Y),Y+=2}else if(J===127){if($.length<Y+8)return null;let H=$.readBigUInt64BE(Y);if(H>BigInt(Number.MAX_SAFE_INTEGER))throw Error("WebSocket frame too large");J=Number(H),Y+=8}let X=Y;if(Z)Y+=4;if($.length<Y+J)return null;let G=Buffer.from($.subarray(Y,Y+J));if(Z){let H=$.subarray(X,X+4);for(let K=0;K<G.length;K++)G[K]=G[K]^H[K%4]}return{opcode:Q,payload:G,consumed:Y+J}}function X4($,Q,Z=Buffer.alloc(0)){if($.destroyed||!$.writable)return;$.write(o8(Q,Z))}function w$($){let Q=new Uint8Array($.length);return Q.set($),Q}function v$($,Q){let Z=$.headers["sec-websocket-key"];if(typeof Z!=="string")return Q.end(`HTTP/1.1 400 Bad Request\r
67
+ voiceover on | off`;import{EventEmitter as p6}from"events";function k7($){let Q={};if($.headers.forEach((Z,J)=>{Q[J.toLowerCase()]=Z}),!Q.host)Q.host=new URL($.url).host;return Q}function g6($,Q){let Z=new URL(Q.url),J=new p6,Y=new p6,X=new AbortController,G=null,H=!1,K=(E=!1)=>{if(H)return;if(H=!0,X.abort(),G?.cancel().catch(()=>{}),Q.signal.removeEventListener("abort",W),E)J.emit("aborted");J.emit("close")},W=()=>K(!0),z=Q.signal.aborted;Q.signal.addEventListener("abort",W,{once:!0});let U=Object.assign(J,{method:Q.method,url:`${Z.pathname}${Z.search}`,headers:k7(Q),socket:{localPort:Number(Z.port)||void 0},destroy(){K()}}),M=200,F=new Headers,A=!1,R=!1,x=!1,j=!1,P=!1,L=!1,C=null,I,_,V=!1,N=new TextEncoder,B=()=>{if(P)return;P=!0,Y.emit("close")},D=new ReadableStream({start(E){C=E},cancel(){j=!0,K(),B()},pull(){if(!L)return;L=!1,Y.emit("drain")}}),T=(E)=>{if(V)return;V=!0,I(E)},q=()=>M!==101&&M!==204&&M!==205&&M!==304,w=()=>{if(A)return;A=!0,T(new Response(q()?D:null,{status:M,headers:F}))},y=(E)=>{if(w(),!q()||!C||R)return!0;let u=typeof E==="string"?N.encode(E):new Uint8Array(E);try{C.enqueue(u)}catch{return!1}return L=(C.desiredSize??0)<=0,!L},k={get headersSent(){return A},get writableEnded(){return R},get writableFinished(){return x},get destroyed(){return j},get writableNeedDrain(){return L},get statusCode(){return M},set statusCode(E){M=E},writeHead(E,u){if(M=E,u){F=new Headers;for(let[d,Y0]of Object.entries(u))if(Array.isArray(Y0))for(let T0 of Y0)F.append(d,T0);else F.set(d,String(Y0))}w()},write(E,u,d){let Y0=y(E);return(typeof u==="function"?u:d)?.(),Y0},end(E){if(E!==void 0)y(E);w(),R=!0,x=!0;try{C?.close()}catch{}Y.emit("finish"),B(),K()},destroy(E){if(j)return k;w(),j=!0,R=!0;try{C?.error(E??Error("Response destroyed"))}catch{}if(E&&Y.listenerCount("error")>0)Y.emit("error",E);return B(),K(),k},on(E,u){return Y.on(E,u),k},once(E,u){return Y.once(E,u),k},off(E,u){return Y.off(E,u),k}},b=new Promise((E,u)=>{I=E,_=u}),c;try{c=Promise.resolve($(U,k,()=>T(void 0)))}catch(E){c=Promise.reject(E)}if(z)W();return c.then(()=>{if(!V&&R)T(new Response(null,{status:M,headers:F}))},(E)=>{if(V)k.destroy(E instanceof Error?E:void 0);else _(E)}),(async()=>{let E=null;try{if(E=Q.body?.getReader()??null,G=E,E)while(!X.signal.aborted){let{done:u,value:d}=await E.read();if(u)break;J.emit("data",Buffer.from(d))}if(!X.signal.aborted)J.emit("end")}catch{K(!0)}finally{if(G===E)G=null;if(E){if(X.signal.aborted)await E.cancel().catch(()=>{});try{E.releaseLock()}catch{}}}})(),b}var n8=w4(v$(),"serve-sim"),C$,P2="854a02be78c7ffea104cb523636efa991bef5c5b",I4=9222,D$=B9(),P$=1048576,D0=null;function T$($){let Q=new URL($,"http://x").searchParams.get("limit");if(!Q)return;let Z=Number(Q);return Number.isFinite(Z)?Z:void 0}function E$($){let Q=new URL($,"http://x").searchParams.get("since");if(!Q)return;let Z=Number(Q);return Number.isFinite(Z)?Z:void 0}function I$($,Q){try{let Z=x9($,Q);if(Z)K0(Z)}catch{}}var T2=new Set(["host.exp.Exponent","dev.expo.Exponent"]),E2=["Frameworks/React.framework","Frameworks/hermes.framework","Frameworks/Hermes.framework","Frameworks/ExpoModulesCore.framework","main.jsbundle"],I2=/(WidgetRenderer|ExtensionHost|\.extension(\.|$)|Service|PlaceholderApp|InCallService|CallUI|InCallUI|com\.apple\.Preferences\.Cellular|com\.apple\.purplebuddy|com\.apple\.chrono|com\.apple\.shuttle|com\.apple\.usernotificationsui)/i;function x$($){return!I2.test($)}function o8($){return/^[0-9A-F]{8}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{12}$/i.test($)}function x2($,Q,Z){if(Q&&o8($.device)&&!Q.has($.device))return $.pid===Z?"recycle-self":"recycle-helper";return"keep"}function q2($){let Q=/\[app<([^>]+)>:(\d+)\] Setting process visibility to: Foreground/.exec($);if(!Q)return null;return{bundleId:Q[1],pid:parseInt(Q[2],10)}}function q$($,Q){if(T2.has(Q))return Promise.resolve(!0);return new Promise((Z)=>{N0("xcrun",["simctl","get_app_container",$,Q,"app"],{timeout:2000},(J,Y)=>{if(J)return Z(!1);let X=Y.trim();if(!X)return Z(!1);for(let G of E2)if(f$(w4(X,G)))return Z(!0);Z(!1)})})}function w$($){return $.trim().replace(/\s+/g," ").toLowerCase()}function Q3($,Q){let Z=w$(Q);if(!Z)return null;for(let[J,Y]of Object.entries($))if([Y.CFBundleDisplayName,Y.CFBundleName,Y.CFBundleExecutable].filter((G)=>typeof G==="string").some((G)=>w$(G)===Z))return Y.CFBundleIdentifier||J;return null}var J4={at:0,booted:null};async function b$(){let $=Date.now();if(J4.booted&&$-J4.at<1500)return J4.booted;try{let Q=await new Promise((Y,X)=>{N0("xcrun",["simctl","list","devices","booted","-j"],{encoding:"utf-8",timeout:3000},(G,H)=>{if(G)X(G);else Y(H)})}),Z=JSON.parse(Q),J=new Set;for(let Y of Object.values(Z.devices))for(let X of Y)if(X.state==="Booted")J.add(X.udid);return J4={at:$,booted:J},J}catch{return null}}var c8={at:0,udid:null};function w2(){let $=Date.now();if($-c8.at<1500)return c8.udid;let Q=null;try{Q=Y4("defaults read com.apple.iphonesimulator CurrentDeviceUDID",{encoding:"utf-8",stdio:["ignore","pipe","ignore"],timeout:1500}).trim()||null}catch{Q=null}return c8={at:$,udid:Q},Q}async function F0(){let $;try{$=U2(n8).filter((J)=>J.startsWith("server-")&&J.endsWith(".json"))}catch{return[]}let Q=await b$(),Z=[];for(let J of $){let Y=w4(n8,J);try{let X=JSON.parse(B2(Y,"utf-8"));try{process.kill(X.pid,0)}catch{t0("helper pid=%d gone, removing %s",X.pid,Y);try{O$(Y)}catch{}continue}let G=x2(X,Q,process.pid);if(G!=="keep"){if(G==="recycle-self")t0("closing in-process session for shut-down device %s (own pid %d)",X.device,X.pid),J8(X.device);else{t0("recycling stale helper pid=%d (device %s no longer booted)",X.pid,X.device);try{process.kill(X.pid,"SIGTERM")}catch{}}try{O$(Y)}catch{}continue}Z.push(X)}catch{}}return Z}function P0($,Q){if(Q)return $.find((Z)=>Z.device===Q)??null;return $[0]??null}function S$($){let Q=$.indexOf("?");if(Q===-1)return null;return new URLSearchParams($.slice(Q+1)).get("device")}function S2($){let Q=$.indexOf("?");if(Q===-1)return{limit:null,offset:0};let Z=new URLSearchParams($.slice(Q+1)),J=Z.get("limit"),Y=Z.get("offset"),X=J==null||!/^\d+$/.test(J)?null:Math.min(Math.max(Number(J),1),1000),G=Y==null||!/^\d+$/.test(Y)?0:Math.max(Number(Y),0);return{limit:X,offset:G}}function Z4($){let Q=$.headers?.host;if(Q)return Q;let Z=$.socket.localPort;return Z?`localhost:${Z}`:void 0}function h0($,Q,Z){return`${`${$}${Q}`}?device=${encodeURIComponent(Z)}`}function y2($){let Q=new URL($);return Q.pathname=`${Q.pathname.slice(0,Q.pathname.lastIndexOf("/")+1)}stream-settings`,Q.search="",Q.hash="",Q.toString()}function x4($,Q,Z="",J="http",Y=!1){if(!Q)return $;if(!Y){let z;try{z=new URL(`http://${Q}`).hostname}catch{return $}if(z==="localhost"||z==="127.0.0.1"||z==="[::1]")return $;let U=(M)=>M.replace("127.0.0.1",z);return{...$,url:U($.url),streamUrl:U($.streamUrl),wsUrl:U($.wsUrl)}}let H=`${`${Z==="/"?"":Z.replace(/\/+$/,"")}/helper`}/${encodeURIComponent($.device)}`,K=`${J}://${Q}`,W=`${J==="https"?"wss":"ws"}://${Q}`;return{...$,url:`${K}${H}`,streamUrl:`${K}${H}/stream.mjpeg`,wsUrl:`${W}${H}/ws`}}function k2($){return`${$==="/"?"":$}/helper`}function f2($){return`${$==="/"?"":$}/devtools`}function v2($,Q){let Z=new URL($,"http://serve-sim.local");if(!Z.pathname.startsWith(`${Q}/page/`))return null;return{upstreamPath:`/devtools${Z.pathname.slice(Q.length)}${Z.search}`}}function m8($,Q){let Z=new URL($,"http://serve-sim.local");if(Z.pathname!==Q&&!Z.pathname.startsWith(`${Q}/`))return null;let Y=Z.pathname.slice(Q.length).replace(/^\/+/,"").split("/").filter(Boolean),X=new Set(["ax","config","foreground","health","stream.avcc","stream.mjpeg","webrtc","ws"]),G=Z.searchParams.get("device"),H=Y;if(Y[0]&&!X.has(Y[0]))G=decodeURIComponent(Y[0]),H=Y.slice(1);let K=H.length>0?`/${H.join("/")}`:"/";return Z.searchParams.delete("device"),{device:G,upstreamPath:`${K}${Z.search}`}}var b2="258EAFA5-E914-47DA-95CA-C5AB0DC85B11";function a8($,Q){let Z=Q.length,J;if(Z<126)J=Buffer.from([128|$,Z]);else if(Z<=65535)J=Buffer.alloc(4),J[0]=128|$,J[1]=126,J.writeUInt16BE(Z,2);else J=Buffer.alloc(10),J[0]=128|$,J[1]=127,J.writeBigUInt64BE(BigInt(Z),2);return Buffer.concat([J,Q])}function h$($){if($.length<2)return null;let Q=$[0]&15,Z=($[1]&128)!==0,J=$[1]&127,Y=2;if(J===126){if($.length<Y+2)return null;J=$.readUInt16BE(Y),Y+=2}else if(J===127){if($.length<Y+8)return null;let H=$.readBigUInt64BE(Y);if(H>BigInt(Number.MAX_SAFE_INTEGER))throw Error("WebSocket frame too large");J=Number(H),Y+=8}let X=Y;if(Z)Y+=4;if($.length<Y+J)return null;let G=Buffer.from($.subarray(Y,Y+J));if(Z){let H=$.subarray(X,X+4);for(let K=0;K<G.length;K++)G[K]=G[K]^H[K%4]}return{opcode:Q,payload:G,consumed:Y+J}}function X4($,Q,Z=Buffer.alloc(0)){if($.destroyed||!$.writable)return;$.write(a8(Q,Z))}function y$($){let Q=new Uint8Array($.length);return Q.set($),Q}function u$($,Q){let Z=$.headers["sec-websocket-key"];if(typeof Z!=="string")return Q.end(`HTTP/1.1 400 Bad Request\r
68
68
  \r
69
- `),!1;let J=O2("sha1").update(Z+f2).digest("base64");return Q.write(`HTTP/1.1 101 Switching Protocols\r
69
+ `),!1;let J=C2("sha1").update(Z+b2).digest("base64");return Q.write(`HTTP/1.1 101 Switching Protocols\r
70
70
  Upgrade: websocket\r
71
71
  Connection: Upgrade\r
72
72
  Sec-WebSocket-Accept: ${J}\r
73
73
  \r
74
- `),Q.resume(),!0}function v2($,Q,Z,J){if(!v$($,Q))return;let Y=new A$(J);Y.binaryType="arraybuffer";let X=!1,G=!1,H=[],K=Buffer.from(Z),W=()=>{if(G)return;G=!0;try{Y.close()}catch{}try{Q.end(o8(8,Buffer.alloc(0)))}catch{}try{Q.destroy()}catch{}},z=(M)=>{if(X&&Y.readyState===A$.OPEN){Y.send(M.opcode===1?M.payload.toString("utf8"):w$(M.payload));return}H.push({opcode:M.opcode,payload:Buffer.from(M.payload)})},U=()=>{try{while(K.length>0){let M=f$(K);if(!M)break;if(K=K.subarray(M.consumed),M.opcode===8){X4(Q,8,M.payload),W();return}if(M.opcode===9){X4(Q,10,M.payload);continue}if(M.opcode===1||M.opcode===2)z({opcode:M.opcode,payload:M.payload})}}catch{W()}};Y.onopen=()=>{X=!0;for(let M of H)Y.send(M.opcode===1?M.payload.toString("utf8"):w$(M.payload));H=[]},Y.onmessage=(M)=>{let F=M.data,A=typeof F==="string"?Buffer.from(F):Buffer.from(F);X4(Q,typeof F==="string"?1:2,A)},Y.onerror=W,Y.onclose=W,Q.on("data",(M)=>{if(typeof M==="string")M=Buffer.from(M);K=Buffer.concat([K,M]),U()}),Q.on("error",W),Q.on("close",W),U()}async function b2($,Q,Z){if(!k$(Z)){Q.writeHead(400,{"Content-Type":"application/json","Cache-Control":"no-store"}),Q.end(JSON.stringify({error:"invalid_device"}));return}if($.method!=="GET"){Q.writeHead(405,{Allow:"GET","Content-Type":"application/json","Cache-Control":"no-store"}),Q.end(JSON.stringify({error:"method_not_allowed"}));return}try{let J=await C9(Z);Q.writeHead(200,{"Content-Type":"application/json","Cache-Control":"no-store"}),Q.end(JSON.stringify(J))}catch(J){Q.writeHead(500,{"Content-Type":"application/json","Cache-Control":"no-store"}),Q.end(JSON.stringify({udid:Z,alive:!1,error:J instanceof Error?J.message:String(J)}))}}function h2($,Q,Z,J,Y){if(!Z)return!1;let X=J.split("?")[0];if(X==="/camera/status")return b2($,Q,Z),!0;if((X==="/webrtc/offer"||X==="/webrtc/close"||X==="/stream-settings")&&$.method==="OPTIONS")return Q8(Q),!0;let G;try{G=_4(Z,Y)}catch{return!1}switch(X){case"/stream.mjpeg":return G.handleMjpeg($,Q),!0;case"/stream.avcc":return G.handleAvcc($,Q),!0;case"/stream-settings":return G.handleStreamSettings($,Q),!0;case"/config":return G.handleConfig($,Q),!0;case"/health":return G.handleHealth($,Q),!0;case"/webrtc/offer":return G.handleWebRTCOffer($,Q),!0;case"/webrtc/close":return G.handleWebRTCClose($,Q),!0;case"/ax":return G.handleAx($,Q),!0;case"/foreground":return G.handleForeground($,Q),!0;default:return!1}}async function u2($,Q,Z,J){if(await new Promise((X)=>P0("xcrun",["simctl","boot",$],()=>X())),!await new Promise((X)=>{P0("xcrun",["simctl","bootstatus",$,"-b"],{timeout:180000},(G)=>X(!G))})){if(!await new Promise((G)=>{P0("xcrun",["simctl","list","devices","-j"],(H,K)=>{if(H)return G(!1);try{let W=JSON.parse(K);G(Object.values(W.devices).flat().some((z)=>z.udid===$&&z.state==="Booted"))}catch{G(!1)}})}))return`Device ${$} failed to reach booted state`}return L9(B9($,Q,Z,"127.0.0.1",J)),null}function p2($,Q){let Z=[],J=[],Y=Buffer.from(Q),X=!1,G=()=>{if(X)return;X=!0;for(let W of J)W()},H=()=>{G();try{$.end(o8(8,Buffer.alloc(0)))}catch{}try{$.destroy()}catch{}},K=()=>{for(;;){let W;try{W=f$(Y)}catch{H();return}if(!W)return;if(Y=Y.subarray(W.consumed),W.opcode===8)return H();if(W.opcode===9){X4($,10,W.payload);continue}if(W.opcode===1||W.opcode===2)for(let z of Z)z(W.payload)}};if($.on("data",(W)=>{Y=Buffer.concat([Y,W]),K()}),$.on("close",G),$.on("error",G),Q.length)K();return{send(W){X4($,2,W)},on(W,z){if(W==="message")Z.push(z);else J.push(z)},close:H}}function g2($,Q,Z,J,Y){if(!J)return!1;let X;try{X=_4(J,Y)}catch{return!1}if(!v$($,Q))return!0;return X.attachHidSocket(p2(Q,Z)),!0}function m8($,Q,Z,J,Y,X=!1){let G=(Q===""?"":Q)+"/grid/api",H=typeof Y==="string"?Y:void 0,K=typeof Y==="object"?Y:h$(H);return{...$,basePath:Q,logsEndpoint:h0(Q,"/logs",$.device),appStateEndpoint:h0(Q,"/appstate",$.device),eventLogEndpoint:h0(Q,"/api/event-log",$.device),eventLogEventsEndpoint:h0(Q,"/api/event-log/events",$.device),axEndpoint:h0(Q,"/ax",$.device),cameraStatusEndpoint:`${Q==="/"?"":Q}/helper/${encodeURIComponent($.device)}/camera/status`,devtoolsEndpoint:h0(Q,"/devtools",$.device),streamSettingsEndpoint:w2($.streamUrl),serveSimBin:Z,gridApiEndpoint:G,gridStartEndpoint:G+"/start",gridShutdownEndpoint:G+"/shutdown",gridMemoryEndpoint:G+"/memory",previewEndpoint:Q===""?"/":Q,execToken:J,...H?{codec:H}:{},...K?{streamSettings:K}:{},...X?{proxyHelpers:!0}:{}}}async function c2($){return new Promise((Q)=>{let Z=L2();Z.once("error",()=>Q(!1)),Z.once("listening",()=>Z.close(()=>Q(!0))),Z.listen($,"127.0.0.1")})}async function S$($){let Q=`http://127.0.0.1:${$}`;try{let Z=await fetch(`${Q}/json/version`);if(!Z.ok)return null;if((await Z.json()).Browser!=="Safari/inspect-webkit")return null;return{port:$,cdpUrl:Q,async listTargets(){return(await(await fetch(`${Q}/json/list`)).json()).filter((G)=>G.id.startsWith("sim:")).map((G)=>{let K=G.id.split(":")[1],W=G.description?.match(/\(([^)]+)\)/)?.[1];return{id:G.id,title:G.title||G.url||"Untitled",url:/^https?:/i.test(G.url)?G.url:"about:blank",type:G.type||"page",udid:K,bundleId:W}})}}}catch{return null}}async function m2(){if(C0)try{return await(await C0).listTargets(),C0}catch{C0=null}return C0=(async()=>{let{startCdpServer:$}=await Promise.resolve().then(() => (B$(),U$));for(let Q=I4;Q<I4+50;Q++){if(!await c2(Q)){let Z=await S$(Q);if(Z)return Z;continue}try{let Z=await $({host:"127.0.0.1",port:Q});return{port:Q,cdpUrl:`http://127.0.0.1:${Q}`,async listTargets(){return Z.getTargets().filter((J)=>J.source?.kind==="simulator").map((J)=>{let Y=J.url??"";return{id:J.targetId,title:J.title||J.appName||Y||"Untitled",url:/^https?:/i.test(Y)?Y:"about:blank",type:J.type||"page",appName:J.appName,bundleId:J.bundleId,udid:J.source?.id,inUseByOtherInspector:!!J.inUseByOtherInspector}})},highlightTarget:Z.highlightTarget?.bind(Z),releaseHighlight:Z.releaseHighlight?.bind(Z)}}catch(Z){if(Z?.code==="EADDRINUSE"){let J=await S$(Q);if(J)return J;continue}throw Z}}throw Error(`No available inspect-webkit port found in ${I4}-${I4+49}`)})().catch(($)=>{throw C0=null,$}),C0}function l2($){return Array.isArray($)?$[0]:$}function b$($){return l2($.headers["x-forwarded-proto"])?.split(",",1)[0]?.trim().toLowerCase()}function d2($){return b$($)==="https"?"wss":"ws"}function q4($){return b$($)==="https"?"https":"http"}function i2($,Q,Z,J){let Y=new URL(`${$}/inspector.html`,"http://serve-sim.local");return Y.searchParams.set(Q,`${Z}/page/${encodeURIComponent(J)}`),`${Y.pathname}${Y.search}`}var l8=null;function d8(){try{let $=process.argv;if($[1]&&y$($[1]))return $[1]}catch{}return"serve-sim"}function n2(){if(!l8)l8=Buffer.from("PCFkb2N0eXBlIGh0bWw+CjxodG1sPjxoZWFkPgo8bWV0YSBjaGFyc2V0PSJ1dGYtOCI+CjxtZXRhIG5hbWU9InZpZXdwb3J0IiBjb250ZW50PSJ3aWR0aD1kZXZpY2Utd2lkdGgsaW5pdGlhbC1zY2FsZT0xIj4KPHRpdGxlPlNpbXVsYXRvciBQcmV2aWV3PC90aXRsZT4KPGxpbmsgcmVsPSJpY29uIiB0eXBlPSJpbWFnZS94LWljb24iIGhyZWY9ImRhdGE6aW1hZ2UveC1pY29uO2Jhc2U2NCxBQUFCQUFVQUVCQUFBQUVBSUFBNEJnQUFWZ0FBQUNBZ0FBQUJBQ0FBUEFvQUFJNEdBQUF3TUFBQUFRQWdBS0VQQUFES0VBQUFnSUFBQUFFQUlBQ2NPQUFBYXlBQUFBQUFBQUFCQUNBQS9wb0FBQWRaQUFDSlVFNUhEUW9hQ2dBQUFBMUpTRVJTQUFBQUVBQUFBQkFJQmdBQUFCL3ovMkVBQUFBRVowRk5RUUFBc1k4TC9HRUZBQUFBSUdOSVVrMEFBSG9tQUFDQWhBQUErZ0FBQUlEb0FBQjFNQUFBNm1BQUFEcVlBQUFYY0p5NlVUd0FBQUI0WlZoSlprMU5BQ29BQUFBSUFBUUJHZ0FGQUFBQUFRQUFBRDRCR3dBRkFBQUFBUUFBQUVZQktBQURBQUFBQVFBQ0FBQ0hhUUFFQUFBQUFRQUFBRTRBQUFBQUFBQUFrQUFBQUFFQUFBQ1FBQUFBQVFBRG9BRUFBd0FBQUFFQUFRQUFvQUlBQkFBQUFBRUFBQUFRb0FNQUJBQUFBQUVBQUFBUUFBQUFBT2JZeVZNQUFBQUpjRWhaY3dBQUZpVUFBQllsQVVsU0pQQUFBQUtjYVZSWWRGaE5URHBqYjIwdVlXUnZZbVV1ZUcxd0FBQUFBQUE4ZURwNGJYQnRaWFJoSUhodGJHNXpPbmc5SW1Ga2IySmxPbTV6T20xbGRHRXZJaUI0T25odGNIUnJQU0pZVFZBZ1EyOXlaU0EyTGpBdU1DSStDaUFnSUR4eVpHWTZVa1JHSUhodGJHNXpPbkprWmowaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1UazVPUzh3TWk4eU1pMXlaR1l0YzNsdWRHRjRMVzV6SXlJK0NpQWdJQ0FnSUR4eVpHWTZSR1Z6WTNKcGNIUnBiMjRnY21SbU9tRmliM1YwUFNJaUNpQWdJQ0FnSUNBZ0lDQWdJSGh0Ykc1ek9uUnBabVk5SW1oMGRIQTZMeTl1Y3k1aFpHOWlaUzVqYjIwdmRHbG1aaTh4TGpBdklnb2dJQ0FnSUNBZ0lDQWdJQ0I0Yld4dWN6cGxlR2xtUFNKb2RIUndPaTh2Ym5NdVlXUnZZbVV1WTI5dEwyVjRhV1l2TVM0d0x5SStDaUFnSUNBZ0lDQWdJRHgwYVdabU9saFNaWE52YkhWMGFXOXVQakUwTkR3dmRHbG1aanBZVW1WemIyeDFkR2x2Ymo0S0lDQWdJQ0FnSUNBZ1BIUnBabVk2V1ZKbGMyOXNkWFJwYjI0K01UUTBQQzkwYVdabU9sbFNaWE52YkhWMGFXOXVQZ29nSUNBZ0lDQWdJQ0E4ZEdsbVpqcFNaWE52YkhWMGFXOXVWVzVwZEQ0eVBDOTBhV1ptT2xKbGMyOXNkWFJwYjI1VmJtbDBQZ29nSUNBZ0lDQWdJQ0E4WlhocFpqcFFhWGhsYkZsRWFXMWxibk5wYjI0K01qVTJQQzlsZUdsbU9sQnBlR1ZzV1VScGJXVnVjMmx2Ymo0S0lDQWdJQ0FnSUNBZ1BHVjRhV1k2VUdsNFpXeFlSR2x0Wlc1emFXOXVQakkxTmp3dlpYaHBaanBRYVhobGJGaEVhVzFsYm5OcGIyNCtDaUFnSUNBZ0lDQWdJRHhsZUdsbU9rTnZiRzl5VTNCaFkyVStNVHd2WlhocFpqcERiMnh2Y2xOd1lXTmxQZ29nSUNBZ0lDQThMM0prWmpwRVpYTmpjbWx3ZEdsdmJqNEtJQ0FnUEM5eVpHWTZVa1JHUGdvOEwzZzZlRzF3YldWMFlUNEs2ZjdKY1FBQUFvSkpSRUZVT0JHbFVzOXJFMEVVL21abWs5MU5paVd4MHRvcVZSRHhvQ0NtSUhnVVdpaWV2UFRrU2NHVENJSUhFUS8xRC9BaWluK0NKdzhxZUZERVMrMUZnZ0VWV3l5MDBDYllObW1iNXNkbXM3c3pmck90cGZjK2RuYmY3SHZ2ZTkvN1pvQWptamhjYndEMWJIZTNVRzA2N2tZdkVBR0RXMTB1T2x1ZWIzUWNoN1dKWS9YRE5RY0FkNVo2NTc1MW5PZk5VSlFTcmQxWUE0WlJUZFNFdnJhWlVvWUNwdXlZK1A3bU5XL0pBcVVBNXN1c2M4bC85R0ZGdUpNNk1QeHBZRmdvNUY1QzZqUFRScVRIMVEwL05UZmZUV05tSm5Fc3l0UGlyV0tyTGt2OVVHT2lZSEJqUkNLeDg2UkZUS0NmSWRqbkRZMjVob0FqWkduWXVYSjhIZGhJQVdvdDRTVmRPQ01zbUM0S1hQVU5hcDBFemI2QXNCeEp3WFVraGpnS3V1U2g0S2kyOExoREN0Q2pTSjFkNE1GRmdTZm5iUVV3VjR2d2FqbUJiMXNUd0ZFSzFSYjlEdU1xVFVsZktVRFE0Nnc5ZHJFZGFGYkFJVTlpY2xTZzZOdHNnNGdxanUwQXl3Mmd6WHpFTm5PZndmWTJ2YTVBMUdlRHlLVEtEeWlEVTVrRWl0MnRpRW9LVEExTHhLSEV5N0pCUWZ1b0hRYXc2b2NjcGRIUkZFeGd2YVh4ZlMyQ2w3RWtMU2hucHlBNnpNTHRhM2dwOS84YWtBSGxRa0lHOVRibmxScTFIWU9mVmY1WDdNcVI4bVJqcmRyV2tJSEE2QW1nekgySzArMTNRektPRjFZTnlqbnlaY2NmYXhxVkZRZDFKc2QyL2tGN2ZCcXJUWWxjRnZGQTBBZ3RZQW93UHYrbThhZjBzUEoxTVg5OS9oYzdFU05Lc2xEc3pnZVMreW9QM2ZCcUtsY2luM1FxTjBkLzExOFRZTy9NNkp5NXUzZ2g5c2RlUUdRdUcyTmNLNXk5QTVRai9UcEVVWTRNZlJWVnhnYzI3NzEvZkhiQk1qZ0FzQnVhT0gzNzQwa0Izek1KYnhITmRZRkJya0krYTNKZTBIczdPL1dYZ2YwRHR4bEh0SDg0aWhRSmZTYXpqUUFBQUFCSlJVNUVya0pnZ29sUVRrY05DaG9LQUFBQURVbElSRklBQUFBZ0FBQUFJQWdHQUFBQWMzcDY5QUFBQUFSblFVMUJBQUN4and2OFlRVUFBQUFnWTBoU1RRQUFlaVlBQUlDRUFBRDZBQUFBZ09nQUFIVXdBQURxWUFBQU9wZ0FBQmR3bkxwUlBBQUFBSGhsV0VsbVRVMEFLZ0FBQUFnQUJBRWFBQVVBQUFBQkFBQUFQZ0ViQUFVQUFBQUJBQUFBUmdFb0FBTUFBQUFCQUFJQUFJZHBBQVFBQUFBQkFBQUFUZ0FBQUFBQUFBQ1FBQUFBQVFBQUFKQUFBQUFCQUFPZ0FRQURBQUFBQVFBQkFBQ2dBZ0FFQUFBQUFRQUFBQ0NnQXdBRUFBQUFBUUFBQUNBQUFBQUFmZ3ZhVWdBQUFBbHdTRmx6QUFBV0pRQUFGaVVCU1ZJazhBQUFBcHhwVkZoMFdFMU1PbU52YlM1aFpHOWlaUzU0YlhBQUFBQUFBRHg0T25odGNHMWxkR0VnZUcxc2JuTTZlRDBpWVdSdlltVTZibk02YldWMFlTOGlJSGc2ZUcxd2RHczlJbGhOVUNCRGIzSmxJRFl1TUM0d0lqNEtJQ0FnUEhKa1pqcFNSRVlnZUcxc2JuTTZjbVJtUFNKb2RIUndPaTh2ZDNkM0xuY3pMbTl5Wnk4eE9UazVMekF5THpJeUxYSmtaaTF6ZVc1MFlYZ3Ribk1qSWo0S0lDQWdJQ0FnUEhKa1pqcEVaWE5qY21sd2RHbHZiaUJ5WkdZNllXSnZkWFE5SWlJS0lDQWdJQ0FnSUNBZ0lDQWdlRzFzYm5NNmRHbG1aajBpYUhSMGNEb3ZMMjV6TG1Ga2IySmxMbU52YlM5MGFXWm1MekV1TUM4aUNpQWdJQ0FnSUNBZ0lDQWdJSGh0Ykc1ek9tVjRhV1k5SW1oMGRIQTZMeTl1Y3k1aFpHOWlaUzVqYjIwdlpYaHBaaTh4TGpBdklqNEtJQ0FnSUNBZ0lDQWdQSFJwWm1ZNldGSmxjMjlzZFhScGIyNCtNVFEwUEM5MGFXWm1PbGhTWlhOdmJIVjBhVzl1UGdvZ0lDQWdJQ0FnSUNBOGRHbG1aanBaVW1WemIyeDFkR2x2Ymo0eE5EUThMM1JwWm1ZNldWSmxjMjlzZFhScGIyNCtDaUFnSUNBZ0lDQWdJRHgwYVdabU9sSmxjMjlzZFhScGIyNVZibWwwUGpJOEwzUnBabVk2VW1WemIyeDFkR2x2YmxWdWFYUStDaUFnSUNBZ0lDQWdJRHhsZUdsbU9sQnBlR1ZzV1VScGJXVnVjMmx2Ymo0eU5UWThMMlY0YVdZNlVHbDRaV3haUkdsdFpXNXphVzl1UGdvZ0lDQWdJQ0FnSUNBOFpYaHBaanBRYVhobGJGaEVhVzFsYm5OcGIyNCtNalUyUEM5bGVHbG1PbEJwZUdWc1dFUnBiV1Z1YzJsdmJqNEtJQ0FnSUNBZ0lDQWdQR1Y0YVdZNlEyOXNiM0pUY0dGalpUNHhQQzlsZUdsbU9rTnZiRzl5VTNCaFkyVStDaUFnSUNBZ0lEd3ZjbVJtT2tSbGMyTnlhWEIwYVc5dVBnb2dJQ0E4TDNKa1pqcFNSRVkrQ2p3dmVEcDRiWEJ0WlhSaFBncnAvc2x4QUFBR2hrbEVRVlJZQ2UxV3pZOFVSUlIvVlYwOTNiUExmbVVYa0JESTdvVUVSU1ZySUFvbTNreU1GeEtQbmpRbXhJTlhUTlNMQ1RHR2kvNEZHaE1UalViQ3djQkJFMDFBQ0pKZEVrRUlBbUVGQVlGZGxtVm1kcVkvcXN2ZnIyYUc2VmtXcm5yd0pkWFZYZjNxdmQvN3JCTDVuLzVsRDZoSDZYZUgzNGtPN056LzdKKzE0TWtrTUJPdFhFVlpManJIaHJ3UVNUQUtMWkppWGs0eFk3MkZueTE4NXdxL2pFdXlMSjgzeXA1YlAvdjE2Wm05ZTdQVmRLMEs0T1ByQzd1T0xvOGN1RnhUTDlSRmF4ZEFxSVZDMXhiaE9yUEdPbDh0RkhQdURnV3BBZmRBcGJKRllZdzdVY21XOXQzWU5YNThKWWlIQU95ZnU3WHJjR1BpK3pNMVBXWmJWclJ5WW93U2E1MTBGVk1JTndhQjhrb0wvQ3RURzRDU1BPZTZFaFVGWXFSWXJOcDdyMTdmUFg2aXpBc245dWo0OFcrcXgycWpuL3kycE1lS0p2eE5qWEFwaDFzeENueHpjTDM3WHA1Ny9FNG9LeTMwV0t0WTgrbms1ei9GUFkwQ1lDVTZNanc5UFZjek8yemRDb3p6NURFQVIwQXNaUmZncjBlUGRkZU5UVWVXeGw0UERLSGh1eWZFMElabVI3cDJhaHJmRDBMUkIrQjJNdkpVM1dxbEVUenVnM0V5Q0k0M3BnSlpXMEdzb2F4TWREVnBCUzRQL2o1eTVvdUx1ZHhwQWJ6blF3aE5xS3dNYnNPVzFRRWtFa3dnNUZLQlpPNWh0bThjVURLOVJvbEdtaGY4U2VMa2hmS0JqODdFWDN6bnA0NlVURldWTERTZGhCMDNjREk2bVBCOG5VZWZCNUxNUlRrUUYwazc0UnJJNGlZc24yOWlEUW1KaFBiV2hqQ0pTbFRIQlc2RkN6UTBtVEFRQ3psRkM2T3JCVEd6cVlzZUNjQW15RHRhbWlvWlFORGYzNmJsdVhFbG13ZGhwNFZLcCtWR3M1Q2pONEVNTmFpN0FPaUZMZ2lzYWEwbFJQd3RLeC9ERllTTEdhVXAyWU9zOEd0ZGJQNGp4eVp1eU9DRkZ6Y3AyYmVWTzdyVUxwZ3RJNEdjdXRHU0t6V1J5TFQvdHozUUNRL1kwVGtrcXNCeXlGSWNUQ2FRZ2piZnlkcWYvdGtQQU5ZckQ4SUp3dTZKWWt2R2VkZmZiMXE1ZGs5SlhFRWY4TVo3cnZZR2NMQUpEY1RPTnlqS1V4MEJCQ09VWDZLSEFEZ3dPVEFWSFVZbVlqZkdqQzB6T29TYnA0WUQyWXhSRGZrTkpSZ1d2QWxLcFo0cHVZY21WRUY1SnVqTkJvM0kyME9aandVQUFheDM0eEJIV2daKzlucGZqNUJBaDdQOXZyWWxGcVZEcVJpRUJkYVJyMHhNVHFiTUs1TmF2anlYeTZHTERsN1JYbVpBZVNYcTgwREtFTUFEUGs2bzR4U1NVeUNtQjJrNXJTUTFtNW5VWUtHQjBCNkJpVWpBUkFBQnZEV0VaSHo3NlJCblFpYUhMcUFER0NQbWNRQmFLTGNjSUh6NUFFZ0NFQzBvWWd4cExFUEFwcmVFSEZoTTRQcE9FaEtFMTkxQlF3RGtSZW5BWTRIc1hxL2x5TytaV0NSMzNER2l3OXJmaXJNVkh1RHgyc3djV2k3aUNkZnpZS0psTmRUMjNXV3NoVlJib2c0S2YwUUJSQUcwRG51Y0NtVVFNVjJHVVRINlNwbjZRd0NFTklWaEFIaHBZVjVHSENqUUFvQkRnMWRJZ29WNklUZFJobkVGYnVsYTVMSDA1d09UVXBFRmZpOGdCMmtqbGNjQmFBRUFlbzNQVkFMZ1JhTU9hMkdMWklCcWVRT0JSYmRyVHY1YUxDU09BQWdhWXJpSDNiR1pXa2t6NnpGMW9SakVqaTI4VmtkcGpnQkEyWHk4OTNrQTVWY3d5d01vWi9Ob0FuVUQ3WlE1a0VCQmhud2d3SVdHa3IrWGxBd1BCakkrRk1yY2dwVmJPSDIyYlF4eFlBV3lXSWNndUI5UmtBMWpSazVmemFTQUM1bUFsUlZIWng4QVpWM0taQXRRaGdWQXBMaGJKYWhwRnFCR2ZjTTRDYkREd0pjREZXUTAwSjY4bE1rZmQranFRSzdNRjdKOW84akVtb3Evd0xCSXpsN0w1ZHgxSllNUitCR21XTEhaOTZnUFFOWklGM0ljRlJxSk4zT3BrRk9iUkVaeGZTZ0FpRVJ3cDY4bTh0MnZLZTk5MGtTWHltQnhCZVdtd0pQZzVEdDJvWkNoS0lkQ1ZFc2psM3JLRUJsVUZnV3d4TzI4RjlaNTlBR1F4dng1SmVza3dPRnhGeTcrOEdDS294U1hFNWhpa1ZIc2lHZ0JLSzBCOUFERVBkU0MyNXEzbG9IbkdSbXBRTmhQVVBwWUQzQ280UWRjWDBCbWpNUWFjcmZPbHdIQXBoNDF6aHljTVhsckZvZXBCMkVrUkNoaW5HWVJSZ3doVmFtYUt0eklob0phNzdaV3psRFlIVnpuL3dEdHNIMjJJSFRZc3pacXpZN09INXp0YVdSd1M3UTg5M002dm5YUFpSMnQyNFBhalhnRkFuNWYrN1FDeWV5SDd6cDQ1M0hNTlY2L3V2ODRrOWlNZUo0NHRuVVR5dWJSN1A1a2NPYXR6ejU0L1VLYm8vMmsvSWRvNnMxZlhpNUduL2tJaFRhTkM3NEtFU2hleTltU3k4UlRqd0o4dldObTF2T2J0YzhtU1dDeHp0MjY0V1RtQ1RuNzNsZnZQdjlEZVQvZlZ3WEFINk9UMjBlSFhqcXdVOFVidG9hVjZnVEtDeFZFMFQzU0FNYkVSQ3BJekZNUjMreE5KblFGY2ljMXJqay9ZRytmVjhmMm5mejJ4NW1sM3M3LzMvNURIdmdIYWtRU1dLMGpJVXdBQUFBQVNVVk9SSzVDWUlLSlVFNUhEUW9hQ2dBQUFBMUpTRVJTQUFBQU1BQUFBREFJQmdBQUFGY0MrWWNBQUFBRVowRk5RUUFBc1k4TC9HRUZBQUFBSUdOSVVrMEFBSG9tQUFDQWhBQUErZ0FBQUlEb0FBQjFNQUFBNm1BQUFEcVlBQUFYY0p5NlVUd0FBQUI0WlZoSlprMU5BQ29BQUFBSUFBUUJHZ0FGQUFBQUFRQUFBRDRCR3dBRkFBQUFBUUFBQUVZQktBQURBQUFBQVFBQ0FBQ0hhUUFFQUFBQUFRQUFBRTRBQUFBQUFBQUFrQUFBQUFFQUFBQ1FBQUFBQVFBRG9BRUFBd0FBQUFFQUFRQUFvQUlBQkFBQUFBRUFBQUF3b0FNQUJBQUFBQUVBQUFBd0FBQUFBQW02MUswQUFBQUpjRWhaY3dBQUZpVUFBQllsQVVsU0pQQUFBQUtjYVZSWWRGaE5URHBqYjIwdVlXUnZZbVV1ZUcxd0FBQUFBQUE4ZURwNGJYQnRaWFJoSUhodGJHNXpPbmc5SW1Ga2IySmxPbTV6T20xbGRHRXZJaUI0T25odGNIUnJQU0pZVFZBZ1EyOXlaU0EyTGpBdU1DSStDaUFnSUR4eVpHWTZVa1JHSUhodGJHNXpPbkprWmowaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1UazVPUzh3TWk4eU1pMXlaR1l0YzNsdWRHRjRMVzV6SXlJK0NpQWdJQ0FnSUR4eVpHWTZSR1Z6WTNKcGNIUnBiMjRnY21SbU9tRmliM1YwUFNJaUNpQWdJQ0FnSUNBZ0lDQWdJSGh0Ykc1ek9uUnBabVk5SW1oMGRIQTZMeTl1Y3k1aFpHOWlaUzVqYjIwdmRHbG1aaTh4TGpBdklnb2dJQ0FnSUNBZ0lDQWdJQ0I0Yld4dWN6cGxlR2xtUFNKb2RIUndPaTh2Ym5NdVlXUnZZbVV1WTI5dEwyVjRhV1l2TVM0d0x5SStDaUFnSUNBZ0lDQWdJRHgwYVdabU9saFNaWE52YkhWMGFXOXVQakUwTkR3dmRHbG1aanBZVW1WemIyeDFkR2x2Ymo0S0lDQWdJQ0FnSUNBZ1BIUnBabVk2V1ZKbGMyOXNkWFJwYjI0K01UUTBQQzkwYVdabU9sbFNaWE52YkhWMGFXOXVQZ29nSUNBZ0lDQWdJQ0E4ZEdsbVpqcFNaWE52YkhWMGFXOXVWVzVwZEQ0eVBDOTBhV1ptT2xKbGMyOXNkWFJwYjI1VmJtbDBQZ29nSUNBZ0lDQWdJQ0E4WlhocFpqcFFhWGhsYkZsRWFXMWxibk5wYjI0K01qVTJQQzlsZUdsbU9sQnBlR1ZzV1VScGJXVnVjMmx2Ymo0S0lDQWdJQ0FnSUNBZ1BHVjRhV1k2VUdsNFpXeFlSR2x0Wlc1emFXOXVQakkxTmp3dlpYaHBaanBRYVhobGJGaEVhVzFsYm5OcGIyNCtDaUFnSUNBZ0lDQWdJRHhsZUdsbU9rTnZiRzl5VTNCaFkyVStNVHd2WlhocFpqcERiMnh2Y2xOd1lXTmxQZ29nSUNBZ0lDQThMM0prWmpwRVpYTmpjbWx3ZEdsdmJqNEtJQ0FnUEM5eVpHWTZVa1JHUGdvOEwzZzZlRzF3YldWMFlUNEs2ZjdKY1FBQUMrdEpSRUZVYUFYdFdWMklIV2NaZnIvNVBidG5mMDIyS1UzU2xqYjlTUk1DcFdCU1c5QkFiU0V0MUp2Y0ZoUzhLSUpDUVJTdDRJVUI5Y0tmNG9XVW9ONUpJc1ZDSU1YRzJpYUlwaWxwU2tvYTA2aHBaZFBkVFRiWjdPNDVlMmJtekkvUDg4NlozZGt6czBrS3hSdnpuWjJaYjc2ZjkzdWY5L2Y3WmtWdWxWc1MrUCtXZ1BtMDhETVJJd2YzdWxPUFArY3NMSXpiMTJ6SExNNHZtcmtTSWRhWDMxRXAzb3MyZmNmTkdSck9yblhqYk1pYVMrVFFvZTdKbDEvdWxzamNWUFdtQUV4UC82bDV3SC8waVU5Q2IvZHNhTGEyWXVzMnNhMkJvQ3RPa29vRlVCTGp5bEJKV2NjelJzWFllUjNqSkVFYnIyN3Z3anl0NHpYMVBZbURJTzJJbFY2eVRIYld5YUkzbzdOLy8vUE1jMCsxYjRUaWhnQitkZW5xbmxQUjZJL2VYN0Flbm81RVdpR1lTa1JjVHlRTXJrL2VjZkwrbU9oUTFsck1iNEFXYUJzckIyMWpvR1BTVTE1My9zWEpYWjg3bk0rdXY2OUZVMGYvZE9yYTgyKzJSMzV4L0lyeGdrNHNvQzhHTXpqSjk0MkVJZVIzbmVJNE9mbVlLcmxPcWFObGZFZGNxS0tSdEw5MWNlZndyOWVhVHA1cXk4OC9tbnI2TDYyUlh4NmRFcThMNXNtTDFXTytkc0puM0ppRnNVUWQ4UUtyK2RLbW81ZjJyRVcrRnNEQkl3ZEhUeWZyZm54ODFyaUc5Z0lCWnJEWlQzT2xuM0o4TFcyc0hYV05HN2xqUDlueTB1R1JPaEMxQVA2MStRdFBubGx5dHdldFdBd1lVYy9zZnhMWFozalZya0VoTE1VU0czZDc1NzRkVDlVQjZMblo2cTdMMXZEdTZTVVJHd1JNamZreXdsaVk2VU0xakR5MUJlYm05UG9zVldIdEtQVXBOelhTUVhpaTh4bzZXVjlKS0NodmVEZWEvOURYSlJVQWU4SDN0Y2g5c0EwQUt2MitHVEU0M2psaHlkTjMyc0pmdWhZQXpDdDRXUk5rYWN6eHkwWmUrMDlNcUJVUUdTSlVJdDRENkVKZ1JyVlVLZ0MyN2QwMmNMWnJKbUxFYnF1UE94Skh4Sk05bXl4NWdER2VraWtSNjY4V3NyelJHQWFINWpwTFRrNkpUSGN5Y2NobXVUQzlHVE94WWNlT3hzenAwNnR5UXdXQWJOdmxHY2RxZVBRT1o3V0xLQUJ0TXJJRXFTQ0pxZ25oWGw1TzY0YkJ0b1RnZW1NY0lHQ1NhMkk5RHh5NXRLVnlBU0RmTmdPeS9URlBiZ1RBODI2emc0NDRJVTJJNmJKVXVuaE5RQ3pvV3RMS2pBSkllbU80SkNXNVV2QlN2Q3UrS2tpT05aYWxERE9sUkFHaUR0Yk43TldDRTl1bXp6bjIwSVorM1ZSOUlISjlrekJuTVh2Q3VZclNoVGx0SEJDWjhETVpSYk9IZHd1eGo3OE1SdDdHK0NXWWxLdkpndk95WlZ0bWYxNktKOTlVUndDUUFVQW1BZDlwM1dyaEsrdm04ekNhM1pibTBxSkpueFVUaXFMSU1DYlRnZFdKc1NhWi8rNTJTNzV4dndVMW0xSkM2MDNIbUVXRXBsY3ZoUExoUWlZK2paZ3I5a0tZOHI4TW9yZSs5b0VXQUhCNFFKNFQzR0JMeW40WmcvWXQ2L1A2QU9naEthV2dHZ0E5TUg5WFUrU0ZyYlkwS3dyczBjSUM0M0NheHpZNGNtSnFTUm8rUkFVcktFSWlOZERQUDJjU0lNYzUwRUFNdTFlaDZiNkptaW9oS0N1dXQyVHhxR2lBSFJtSVVKMGt5SXc2aWdXOEVyMWljdi9UaC9rc0JyRUVxWXQ5RE5IbUs2c0RvMXJtZytRSWtDYWtDblBSZ0xWNHFTbWhXaTRNeWVYNVJWOHRBQ1lPRFF1UVBqV3RhYjQzZzJ1VXBaa3pna1hSemh3eDMwbkZCV29MRXFVeGNHeXVnZFhMa3lFTE54dmo2QU1OZEd2WVZoL2dZcVh4Sk5MbjF4ekJVZ0hRaGczQmlaZWx3ZTBDSFVzWlp4VzBGSURlY2luU2J5bHZadWlyN1V6R0lOVjFycEVSN0ZnYjZHQlk3RzFNbFMwR3JnaUVPcURiUmdadVJTbk9CcGJ1Ym5WdFNxT3ZHUEswS2dQa0F5b0EyTXdFcGRHQVhHczlVd0Nrd2NWWG9nb0FLQkJJRWhJYWdlMC8vOGlRM0x1dUllTURDSTlvQSs5YXlqeFJ0cndvRFBBdWkxRW1NemhickljZi9mRmNMUFB3YUI4NWdWclNRcUVWOVY1VDhhZ0FJRWhLazR2RFFuVWxGNTRHYTFJSmE5aFhhbVFoai8xcVpxZ1BRZW9QalhKdUpsMHd4ZE1YaTVwUVhsVlR5Mjg1ZlI1aVJvQnlmRmprL29jOWVmSWVSMTQ2RWN2SkdaaVZabE5NeEJnUFROV2RueW9BcUNhZW9Bb256aldRUzR2Q0xqUkFnYWhRUUJ4L0t0RVVuWE90U1B5R0JZMVFER3d2VU9DbGtDS2JVS2VBMUpFaGFndDJTSi9aQkthL3M4dVRIeDRMNWV4c0lnMFhkUERIYURXRWFUTzR5cVVDZ0JxSUFEVU9RUnpxamFIbkJLSWs0MVE1UXl5QmNMazhaeG5WRG5taWxoYVpUV0Z3bWt6Sk1EdldLajBRWko1QTFPbEJtWG5rMlh0c09UTVp3RmNBem5iUVdsOXFBWlExb0NHdHh6eWpVMG9VWkI1M01rbVFCTUxtR0FoYUFSeVNBQXF2TGRaVklHVTB5bjB1Q0FMUUdvVkFoa1UyRDl0eUczYU9sMEdQOUhFRUZ3LzVxTDlVQU5DRUdBa014WWxMa3dzMWdhdXJBRWdpQjdDODN5Y0FiRHM0cG8xTlhnd2ZzT244MXkwRVE4bm4yaVJOMWJBQ1FEdWNlQnhSYkhvUk9RaGhsb3pTaFBwTEJVQUxJN2lWTGlTdlR6QkRFNG9BakptWlRtdmpscHNTR2NBRk1VVVl0d2lKUmVpd25WU2xtaSs0N0FsOTY5Tm9PSnV5eWdHd2hTYmxJekh3UUpYeGd3RG9Ncy9kRkFENmdNWmlTaEFFaW5CSzZlS2NyU2FVSWJQWldJVCt0YnhOQUIvc24yc2prV0d3bzJFUWkwUEVPWXVnMVN1cm8xSU9qc0tnMGptWSs2TWhQRHNRaGtteENOYUdFbXBMUlFNYWhYaUFLQUdnR1hFckhkS1pxV2Y4V1doTUVQNHkyRG9YWm1URkxrS3VJSkY1a0pwRERaQjVjcC9mOUVGR1dUSms2Nkt1N3lTS1loQlhzWHVXRENCbUZ5QU1HQSt0Z09iYXJGRkJCVURIOGJJTU1aeE1FM24reEdZTFJDaGhQWjlpWlRxeFJpaHd6NlNUd2FRSVlCNzdlWmNMZ2pKTkFiYUZmWkVsNjRZY0RZVUVlM1V4aGpCQVFCSGtwb2czQlVxOFk4T1dmRHdiSXlTTERBNWlKZENqckhSTTM2MEN3QVFoTE1Ud3B3QUtFQVFRUUFPTVFqUUJMa1F6b21uUkx5QlBaV294dE1UQlhBZVowRUk0V1Qvc3lOaWdrYitkRCtRQ21OcXl3Wk5kOS9weXRXWExwWGtnNWdJS0JCeUN4UUY4MEJxRWJiNzZiZ3NIUW9DR2FnMHVLRFJ6YXI2a1ZRQjBybDVNUnh6a01tb0FKd2h1ZVQzRVpmVUJTRTIzMmoycnBvQUpyQXRRdEt3WWpGUHBTZVlpSzd0eSs1Z0RqY1J5NEoydXpDNVp5S3dEOHU1RmtjbHJzWHp4UGx2dVd1L0p6SHdxN1pBT2oxMHZwRDB4Yk9USW1Vam1PcDZNREZCcjRBRW0xWEFsSG5FdVliWFZwUUlnbkh3N0NscHBFSElvUWcrbE8zT0Y1dUZBUXBRNHFCWDJtZzlCRzA1VjhJVzVWaXJETGlUWWRLU0RrSFQwZzY1OE9FTTdSRlJCT3o3d2FEaThkQzJWQThkRHVYZEM1SUhiSFprWXNtR2FxVnhaN01vYjcwY3kyN1prY01DVmJrQk5BeHdFbUlacHNIRHFPSUwwNmxJQk1IdnVYRENjSnJQd0lmMXd4Uno0eVpWVTlyOFZ5ak03T0J5eW9zZFNaTFJLNk4zR3k4ZFhZdm5aNFFVNVBZazlESTZlQ2NZMGZGY0djYVVBQ0RsQ2ZaeUVoQVNSOHR6N2J3ajAvRlFNczhIT05JZ29MM0dodVNHWUVXTVh6WmhMTUNjMjdHVDI4bHRuS3R1aENnQ003MXBSNTd6bE5ML0U1RVF1dVpsNzVVUWlyNTFxaTJmbFoyQVAzOFJEZkZMT1J6RCtjNHZzeXVpUXE3YlBEcGR4bGdVQXRHZzA2bFhSNVBIckdIelVBNGNaTm9MOFpSakRQS1A1aCtOUjU1YThhY0lQRDBHSCtleVZleDBBU1Jlbmo5bWo2Nyt1SVJOalNiaUJzQkxESnlMZFltS25DU21HRVdOUlhoeUVDUjlNTU9vUUZCY0dWcFVnL1RRdmFDd1ZqdU5GUjdWd0htQWg4eXNGd1FGengzMUVvMmo2MkVyN1NtMkZnNVUyYWIrei80Z2RkLzVoR2VRLzlZV2NHYmdVdEdIamNpQTlXeVZJS2ZKeUFJaE1rT2xpenMwK2kyeGZOOTUzWE5uWURNN092Zi9iSXlVV2w2czlIUysvYTZWOThlMzIyTlpuWnAzbUhWOUpFa1J6bWdBbGcwdlZpeWNsbmlCaEZlOHF1YjR4UERLeW5hZTY4cmh5blRUWG9wVmx0ank0TVl2dlNOLzc1dS8zZmZYRWFpN3p0MW9Oc091ai9ZKytZaGJPdnRqd3M5aEFDdityd2x4UU9QTzJPN1A0YnYvYzkzL3p3dWRmV1d0OU5kZTFPdEh1M2ZPMW8zdk51a2UrRjV2bVE0ejFtZ2Z3aEE5TGdIODM5YXk4bGtUbFB6U1lWeTU4cFgveFgwd1JBaVMzRUEzWSs5aWd5TWFSOWdkandYdjdmdmZ0eC9sRm1ubTd0dHdJQUNlWjhXMVBiQjdiK1lNdm0rRzdIeGQ3YUV0bTNQVytiemZDeU5qSXl0QmlQUmxFUk4zLzBHUVlrUGo1aEV3eUxQSXNrWC9VTW1uRHk1SzBtd1MrMjUxdG1QWS8zZkRDWHlmZjJQZjZzZGRmbjhUNmZiQlg0NmhmZWZXWThodHRhYkE1TVRIZ3JyL1B6NXh4QkhRWDUvcGVnQytQUkIzQzFKcytXVVdGWDdmWndUWjhGODBzcTV2RlMzTkpOSDgrUEhQbWNnZk4yRTJ0TFhIMDNTcTNKSEJMQWlVSi9CY1lHc1pyMjk1WnJRQUFBQUJKUlU1RXJrSmdnb2xRVGtjTkNob0tBQUFBRFVsSVJGSUFBQUNBQUFBQWdBZ0dBQUFBd3o1aHl3QUFBQVJuUVUxQkFBQ3hqd3Y4WVFVQUFBQWdZMGhTVFFBQWVpWUFBSUNFQUFENkFBQUFnT2dBQUhVd0FBRHFZQUFBT3BnQUFCZHduTHBSUEFBQUFIaGxXRWxtVFUwQUtnQUFBQWdBQkFFYUFBVUFBQUFCQUFBQVBnRWJBQVVBQUFBQkFBQUFSZ0VvQUFNQUFBQUJBQUlBQUlkcEFBUUFBQUFCQUFBQVRnQUFBQUFBQUFDUUFBQUFBUUFBQUpBQUFBQUJBQU9nQVFBREFBQUFBUUFCQUFDZ0FnQUVBQUFBQVFBQUFJQ2dBd0FFQUFBQUFRQUFBSUFBQUFBQW1nTzgxZ0FBQUFsd1NGbHpBQUFXSlFBQUZpVUJTVklrOEFBQUFweHBWRmgwV0UxTU9tTnZiUzVoWkc5aVpTNTRiWEFBQUFBQUFEeDRPbmh0Y0cxbGRHRWdlRzFzYm5NNmVEMGlZV1J2WW1VNmJuTTZiV1YwWVM4aUlIZzZlRzF3ZEdzOUlsaE5VQ0JEYjNKbElEWXVNQzR3SWo0S0lDQWdQSEprWmpwU1JFWWdlRzFzYm5NNmNtUm1QU0pvZEhSd09pOHZkM2QzTG5jekxtOXlaeTh4T1RrNUx6QXlMekl5TFhKa1ppMXplVzUwWVhndGJuTWpJajRLSUNBZ0lDQWdQSEprWmpwRVpYTmpjbWx3ZEdsdmJpQnlaR1k2WVdKdmRYUTlJaUlLSUNBZ0lDQWdJQ0FnSUNBZ2VHMXNibk02ZEdsbVpqMGlhSFIwY0RvdkwyNXpMbUZrYjJKbExtTnZiUzkwYVdabUx6RXVNQzhpQ2lBZ0lDQWdJQ0FnSUNBZ0lIaHRiRzV6T21WNGFXWTlJbWgwZEhBNkx5OXVjeTVoWkc5aVpTNWpiMjB2WlhocFppOHhMakF2SWo0S0lDQWdJQ0FnSUNBZ1BIUnBabVk2V0ZKbGMyOXNkWFJwYjI0K01UUTBQQzkwYVdabU9saFNaWE52YkhWMGFXOXVQZ29nSUNBZ0lDQWdJQ0E4ZEdsbVpqcFpVbVZ6YjJ4MWRHbHZiajR4TkRROEwzUnBabVk2V1ZKbGMyOXNkWFJwYjI0K0NpQWdJQ0FnSUNBZ0lEeDBhV1ptT2xKbGMyOXNkWFJwYjI1VmJtbDBQakk4TDNScFptWTZVbVZ6YjJ4MWRHbHZibFZ1YVhRK0NpQWdJQ0FnSUNBZ0lEeGxlR2xtT2xCcGVHVnNXVVJwYldWdWMybHZiajR5TlRZOEwyVjRhV1k2VUdsNFpXeFpSR2x0Wlc1emFXOXVQZ29nSUNBZ0lDQWdJQ0E4WlhocFpqcFFhWGhsYkZoRWFXMWxibk5wYjI0K01qVTJQQzlsZUdsbU9sQnBlR1ZzV0VScGJXVnVjMmx2Ymo0S0lDQWdJQ0FnSUNBZ1BHVjRhV1k2UTI5c2IzSlRjR0ZqWlQ0eFBDOWxlR2xtT2tOdmJHOXlVM0JoWTJVK0NpQWdJQ0FnSUR3dmNtUm1Pa1JsYzJOeWFYQjBhVzl1UGdvZ0lDQThMM0prWmpwU1JFWStDand2ZURwNGJYQnRaWFJoUGdycC9zbHhBQUEwNWtsRVFWUjRBZTJkYVpBa3gzWGZzKytlYzYvWjJRT0xhNEVsUUFJbUtkQ0VMRktrUk5BMmd3ckxsTU1mek1PbUltelJKaDBNaDBnNS9FRmhpYklWVmppc2d3aUhlSVJOU3FBc0tpZ0xFbmpia0hpSUpnaVFPQWlBd3BKWVhBdnNpY1VlTTdPN2MvWDA0Zi92WldaMWRVLzNUTmRzTHdTU2t6TlZlYjE4NytWN0wxOW1WV1ZWTzdjWk5pV3dLWUZOQ1d4S1lGTUNteExZbE1DbUJEWWxzQ21CVFFsc1NtQlRBcHNTMkpUQXBnUTJKYkFwZ1I5OUNlUmVZbDE4cWZGenVjVFR1bHlJcytMOTJ4SjRwQnZqTk44STV5VWpvRFJqUTBqVDMzNTlCdjJMM3U5ZXpBeWhuNnRRUkRveDdsWnk0YWYydWZMUC9PcEhxN3R1dnJsYTNUbFJHUzFQbGk4MG02VjhvVnFvNXh1RlZqMlhiK1J5dVh6ZDVlcEY1eHIxdXVGYWdWVGQwd3VSWmF4Y3FYUmNqNWxRWGlyNStvV0ZCRVViWHJBUlgyeEd2S0xDWHVYMVpyRkZmYTdsV3ZWV3E1VnJ0SnFOU3FGUnFDODF4c2J5SzNQbnp0ZGFaeTRzdHc0K3RuVGt2LzdiSllIV2REUjBwRU0rWktJaHhEZ05NOVIwVk1oUWthYVFSZngwTEhhMi9JbnZmbmRQYzhldUEvbXg4UnR6b3lQWExkZGIxOVNhK1YzMWh0dldMT1NxdVVLdVhDeTYwbnpORlpvdWwyKzJYTDZKYkZ2K1VOcUdpc283WXFTVmxJVTBlUWdUMnhIU0RlV3JJMUtvS2hlbERtQW9pL0F4SGZNV2kzQWRtSWdqM1VibDFrWXNLV2tIWUxsOHE3bGx3alZtNTl4S3M5R3FpY0NTbUo1eHVlYXBWajczYkc1eDhlbld3c1hIQytkT1BYbjRuOTV5UW0yaXZSVm9yMFBvTGwrSUNobzJoWWdYeGRNSjl6K2ZlT0xHMHM3ZFA3ZGNxdno5UlZlOCtXSTl2MmNoN3dybk5ad3VhaXdzcU51TE9wYlJoRnFWcTg1SmFDYlVLTTBZZ3crcGtDZFkyaWU5dEZRUXFoSzRKQi9xWUdwc1RBckZBQlo5WTJEc0NEQ1IzcXJ5QUlkUlVFZEl3L29TblNXRmd2b3lPZW5jM0FVUGswTWlPdktvbHhqZ2htdmtjODJUdVdiOU1iZXkvSlhDMmJOZmV2WXQxeDVTRGVndnF5RkVSY0hHc0FJNDZaZko3Uk5QUHZucXd0NTk3NXR0bGYvSjJWWis2dmk4Yzg5ZmRPNnMzTzVjcmVVV05LUnFVb0xjcGgraDBreEJybmwwTE8vbVpodUpnSWZGWElKSDNJMVA1TDBCTE1qUEJFa01XeUI1U1dKeVM4R2RuMnU2cGcwRnp3SDBOS01aM1p5c3BLQnByVkRSb1RqZmJKN0pOMWYrb243cTZNZFAvSU1ERDZ1RjJZbGlrMm5TaHlFa2h0MWY4TUZzNDdmdnZudDYrcWRlLzRHWi9NaDdqOVh6Vzc5L3hybm41bHJ1N0ZMTExjcFhOcVJ3UmswTVVRR1VsVXM1TnpidURTRFdEejN1WXdERHB0TTJnRWFIQWF5bWd6SGs1Qmx5cmxET3ViSzhVNkhSbk0zWGx6NjIvRGYzM0g3cTNXOTVRVzJHN2cyR2FRRGdnc0g2SGM4OTkvcjY3ajIvZDdSZXV2WGg1NTE3L0Z6TG5WNXF1bHJ3bVdiOXF5VmdKUmhBNmNmU0FOSUNrUkhJY29yVm5LdU00eEZXN3MrZE92bkJJN2RkL1MxQkRkVUlvbXRKVTk5SU9pcS8rWWZQUC8vTytlbDluLzN1aGRLdFgzckt1WHRQTnR6eGhZWldRRnJKQ1hOZWtNTzB1bzB3KzlKdkl3L1piTGpseFlaYm1OSGxRck4wYTNQWHZzL3V1K2Y1ZDRwM0poS01ZQ2hpSElZQndJaG1MdGU2NDlUcFg1cWJuUDdrZldmeVUzOTF1T1VPemRiZGt0dzlSSWJDcmZEOFdBVzV3N3F1TzVjMGRkWnErU20zYmZxVCsrNDkvUjdKWUdoR2NLa0dnRjZ4eHNZbmp4NTkrK3pranR2dk81MnJmdk40MDUzUXFHZUszMVM4aEhDSm9kbVFON2pRZE10THVhcmJ1dVAyZlY4LytnNmg1SHJwa2ozQnBSZ0F1cVY5ODZNSEQ3MSthV3J2N1ErZXpZMTgrMlRUbmRGOHZ6bnFKWmtoaG1aTGE2aDVIVXU1RVRlOTkvWXJ2M2pvcDRYK2tqM0JSZzBBNVpzQi9QS0hQN3lyY1BVMXR4K2N6MC9kZjdMbHppeEwrWnZEZm9pcWI2UENDSmJuVzFwUGFUcllkODN0TzMvakk5T2hkc01TMzZnQlFCZjM0Mjc2NTcvNGdaTzU4aTMzSDJ1NTUrWDI0OGlQRnZKU2plR2Q4Rkxscng5ZnVzSHNhbG9UTkN2bFd5ci84QjBmOUwzWStGVEE0aTFyZ0RmMDNQcXRyMzN6TmZQVkxlL2hVdThaelZFMU9hUkxIZjFjQnVaMUVIUGI5WElGOEhOd1pRb2RPblU1UWlGRkExckRDSTE2MHhVdUZGeDFiTXQ3ZG4vNi85MzUvTHZlK0pEdzBvWE1GRFppQVBTQjBaK2ZldVVyMy91RWJ2SThmcmJsbGxkYXJpZ1c5RERra2tJMGdKeU1DZUZkcnRCTjUzSVpBTWJNZ3d6NmNxbXlhY3RDMDREV1dhV1IvTmJTZ1ZlL1YrWHYwOEY2QUlsbGt0cEdwZ0N6dE4rNDY2NGI1NHZqLy9nSHVqOTFTb3VUOUlqQzBpLzFpS1B6VXZHczFYN1lQUGVpZGJsbzFPVzJWblJidlZVY2U5c1YvLzBMTndiRlo3YmpyQjRBQW96KzF2UXRQL25XazduODl1ZG14WWl1OVhVSE02UHRDYjVIUUdDTUdrS01mVzY0Witnd1ZtQWJPcGtsTnlBN2NkUmJYMEsvQm15NkRwanVFU3pxZHZwb2ZudnU3N3ptclFJK3FNT21ac1VEVThwcUFEQ1YzNzU5ZTZVMU92bm1FM3FvYzBiMzloRW0vbWNZSVk0WUVGcDZHRWg3NFJEUFpnU2l3OGk5bkFhZ3hYdmlFU09kZ1RYVWkvZFlwcWRMalZwQlQwNjN2TmxOVFgzRW5UbXpyQ3J1RHd3Y3NrNEJ4dis3Zi9NM3Ixak9WMTV4OGp5UGNNT2RQb1E0aE1OR0k5TGhrR2JZQk9BM0JQZzRSOW5RRHVnTUUxOHZYRUV1TWdMNHRqNHBwcCt4cnh1Vkc0T2tvYjBNclVMNXBoM3YveTlYQksxSEd3dlp0YU1zSGdERTVtS21iNzdsd0tJcjdEeWpPYWhCWjlhbXNXNHR1aVlRYXpPTlBUWGowYWtXdTc2d3k2TkZlTnBzT0FnSitEbVl3dUxUeUEzajY5TVFMOU13T3ZLVWlwT3JKQ29JSWh3MUZtTmZzZjVaR0YxRGV5aWFsY0xPeXY2Zk9LQVdUNE54L1padGlDd0dRQ3REUHJwcjF3Mm5XN25pZWJsL2U4YWRpV1NiZUV6bG9vSWxFK1F5cVFYRmJ1MEptTllqNFo0aHlJNjZWSElWNkNxMlVnVzBxMVp5eG4rdFVPaVVXaGZTcm13SG5SUktYOTVWZ01JcjZzdWtudXp4S1B5Q0ZtOEZGVVl3UEp6UGlKY096SU5sbWxoWFBsOHNiSisrUVMzK3J3NkVCcXExMkZhMUQxa05BT1Q1OHVUay9ndTJneWU0c29odGd6R2NhaEM2cXJELzVNNkN1M1U2NzdielBMeFlzRjVZVDFMZFNTVUhwb2pBYVJjRmJ3bERwSkpZbWNJMkxCcTRkN1N4cEkyTUp5KzAzUDI2VmY2OW1icks5T3hmbzU4Nm13SjB5cmU1UzNHeVRsSUl6TE9NVCs0WEpBdDBVQTRjc2hnQVl1SW8xMTM1U3JaeExjbWFtOUdWRFV5eUI2Q0VCQ052bWk2Nlg3ZytwOUdpcldIQzMySTVvN3FleXVoWDNvVWVoaTBraVpCUEkwMm5RM1VrMnFzcWdzUTRRWjBrdW1pb3ZGRjJibXBYem0wZktiaUNIUFVEWjdXN1ZRWnZ1NElFamhoYldFTFdvQ200cFcxMWNzaFhxYWw4alcwMkhSaExGZ013cE5Oalk5VjZvN0JyUWV2TnBvZ1h4WE4zdndlbFRuYzVtSWV2MGhhd04xeVJjeFBhRnJVd0t5dEx5UUw4MGM1U3hZT1M2WUNMdkRMblIxeklQYVpqM05Fb1F5YmlwMGxjVjRDekZHaG9GNXA3MVZUQlBUVlhkN05hUUxObnNIc2RrTVlCbmpXREJLTzd3NUpQY2RxTmoxZmRSWWFtcVdTZ3JrQiswR0I4M2Z5V242azJjb1V0Yk9CRWNReFMyY0dHRHBUS0hUOVd3MWVONXR5MkNlZm10YkFzcTR3QVhtQ1k1a2d6VGNReXlyTWMzVHlDRTlmSkVmSEcrRkpvcEhGQUkvSXVkcDBjbTZ0S2J1TXk4bDJhNzFoQXMraWxJellOd0Uvb1l6ZS8vZkxXSENWSUp5T3Zlek1rTXRuUG9CNGdJczN0dmY2V2Fpdm5xalYxQk8zYkxVNGxOeG9RREVJWWsvTnFpa29UZDZZeUZwZldPUkJUa0FxVzdTcExWYTlPQ20vc3dPckszaVhEcElFbmlJZGQvb25rS0hmT3NCWlYwRzhXd3F3SnFNOGFiS29zdW1ycDJyOWJYWFNmby9uQTNSM1VBQktlSnZidXJlU0toWktNd09XNStiOEJoaE5rSk5RZUl5cHBaU3lkbStLanRkc0lWVjFDSWlSOGxKUjJvT3VYU2RiZGE0a21oWkpMckt5aEh3MnVCS0lCMkFoWFI0c3FMQlh6cmlSRGlMdUQ1UWN5cU01ekIwMmgwVDdLZkhsa3g1NkticzFrQ3BrTm9McDl2RndxdTFKWmJteDhWSlN6eXlsaE1EWkZLRVVKQXNYak1uazZaNk5mTVdYbUptbWxOQ2VMU0dZSS9sSXphTCtmRVNTSUw1RkdDai9LeGJBcFlyNk5VMDlaV2h1WDIwTjV0aHNZZ05BdTFWeUY2NGV5WG5BWkhja1Y2OXRIcEpVa2dDYnBVVkxhbGNoaUFJYXcxYXFXNWhkeitWa3QxTTdOTVBtc1M2T0xaR2NXbDRlQzZ4TkZZZEs4cUh6aUFVaExldDRZSXAwWWQrSVpMRWZiSGxMdVFObVJHUXh0QjFTYlJoelowUU8wcEd6NlI2Z3RhUkY0YmtXR3I0cy9BUlJ3RWVLTjZTQkxBTHl5Vk5KMk1WZFlybzFsMGFlUnlkb2dWeWdWQ3kyOThJUmllTXc1akdBM2s0UUlSYWM5Z0JtQ1RoaEkyd3RzVUVFREN6Ymczd2dabzhGSmpSWFp3azV4WGdxbWxBVXZDMmY2U2Qvc2hBZFFHWXJIVUpnT3Fjb1NtQ3AxSGFpWGpYSlo5V21YMzFsb3lXSUw2SjNiODhZb0hkdG9RQkJnTWVFb0RVNEV4QlJnK0JYVE9STVdhUXdoSWRaT21iUjdsQ2R6Y3F3elptblhXZFBHcEJTTG14UVYzN1FORVZHMTR5NEpTT3VHWFNQYTVuMEJZdUNrVWJCTkFVSVhMejJKRVFCWXJIKzBheU1mS0dVNHVDZUhPL0ZoWUJTWkxVYTdsQXZTZzUvWU9oU3lOcStSSSt0dklrK2ZhRW5ER0FQdWtYZjFkSGxzZWNxNDF4QTlBSGxUanNXQm5oQmpGaEYvd29VS1lobmdNVzMxcGlSU2xLYU1LdUszMHE0MmdLOFIwalJRTmhxT1U0QVpnc3FpQVdEUUtNMHJUZ2taSGUyajlraG5DU1lYa1pNTlJCUUROODlzQUxwVWlXL3ArazRNU01vNnBST3lRUUM4S01KZFJKU0xrdGxSeER1Q1M3cThwRU8rVGh0TlZOZVNHL0I1aUtsUy96RWdWQzZmd0d2RHJCMUZFRTgwNUF3T2FFdWtFRmt5WlF6dDF1dWtVamdFNlVkL1VENTVTT0htaVhYZ0FZeC9tcEdtQTByVGppTGxFa05RY3FCZ2hzUzk1VmJ6OGh1QTAzdmI2b1E5dzlCYjhHbGQ5R1NXRGxsQTBlcmhzb2I1Tmwzejc5TWJzOXYwTUthRVZGVHh5aTA1dDFmczE2b3RWeFpXREFOTE1BUEJMU01keWhGUlNMTUhjVjR2bU00cWdTeTVsUFFLME5ra2JvQkczdmlneklJdjc4eWxxOXJ0MnFsUTN5T0tlRXpEY0NnNkpobFZvRjhiN2ZDbXRLMEJoTU9QZmhWQVFQMVR5Zzc2UjE4eUJYQklKNFhzTTNyMkZucEp3V3RkWExLQ2gvRitJUW9QSldMNUpmWDZYOTFRY1A5aWY5NWRPNVp6dWkzdWR4SUZCTURueGhHR3g3b1dicHFZUWVsMDlHTFRmZk5relQycmQ4M0xyS28xNUZoWm14R0FzMXZ4U1I0czdXQkcxODV1SU9XVmoxYk5DTlFCU05tQnJKUzJTMXpEckV3d2JCYUJYQ0hRZjRadzFtRnN4Z1RPWnRackNQOE1ocWFaQW9KbmdCS3ZGZFJGQXdTdXBPNTkrTmFpKzhWcnNuYXZQd1Z1cG5FajVlVjYvZnJxaWFxNzg2a2w5K2pabXF2bzhXNWUwNkZORFF4QkJUc25pbWVjaVRWZlphTXgzUlh6TStrQ3c3REdTWGdBOTZhcmxPaVkwcVVaSDRlOFlHd1JLQkY0RDZBQ2dkUFdycWdDbnF3ZWdPY3hoa1JSMXBCNURiQlNhK1NxY0NpaU1CMWsySk11Z3VSZlh3Qnh2L1NLdkh2M0VKWGZUWEJVaXY3NWE2dnU4RnpOemVvckV5VjVGek1DN0Mwb0pKRVMrUzRFeU5Dc3VxdmNpbnVVeGFKT1BNSml1THNVYjRiZ2pjQ21BQnBCa0FNWmlrZVM1bEU3RWFwMC9aQVkwL3FncXlBeUd3QVlqSGVkYkpwZWhUSlZJQmhHLzNiTitlL2EzN1hwSWdVMnJPUTJ2VmIrcXFteSsvSXppMjVFNzlnWHVNMnFZWjZYWkUzbEVxNlhMejFJTXI1RDZoV2xGcEpFMzRKWW9UaG9MQjBGZzZNb2VlUUxPUjNSQU1JaXl2aERqdGdwWkZlUlZ0bDZnVXRsTTRMMUFIdlViOGdBN01iTk9rUlpLTkN4dWhaOVYybkJkN1hlYzM4eHdyN3hnbWpxRlNwNW5hSVl5T3ZPU2g1ZjcvL0ZnaCtKcTNrUnh5WjlyNEpPUmFqeE9pRkNvR1FDc1IxQ3BPc21IWjZ1M1FrTUl6NXFIT1ZCejV3VmNvdEdaWmpXUDcyb0hrQVA2K3ptREJ3anNOanhiamJqK2dEcjNLYk5FTlV3RjNmRERUcy9KaS9BWTlibEZlMllGWGVGNkFFa1hlOEZFRFhCY3BieUphRzhJNHF3QnJiR0tlQXlZUVQzRC81b0JOREdDUFNIL0ZBMGgya2RFaGlxWmYzNnVwOU1hZEl6R0E3VmdEeGp5TzRCZEsyTzRrMzVpdnN4RzYyYTYzZ3U5YXpER1puYkNEZ0x2eFg4ckJZb3VtT3RhUUFQd0lFUzJrcjMwby9jSTBFZjRycUZrbGdiNi9ySG9YM0VyNGFvVWxsL05XSzBQVDVkUTltdDM3YnlsVmQ5cERjNHpSUTNOT2JZUU1oc0FCZ1pLMWtJMmgyaEhrU05uOGhRekt6UnN3aWFSclVHZUJwc1ZSclBVK05hUzRwdlNlczhZbUpuSVdzQkpPM3grdEdabGhvR1RaNEltSkNsY1AwQWFrRjU1dzF1bE84TE1UNUxrdFZSMXdtaEErOUhrby9pQVBIMEk1OEFEUkJvWkF3UEFOc0ZrdGtBYUcvQ0VrSGlmblRwSU5mVkVkWUFyZGVkSE5DK0Y0NWVaYkVsYUhxZ3NtcG9zczNic01vQXNGVWVzT2g3ZmFZVWxPQXBwakVFYW9wOEtuVU9WYlRxR1lTbWpTa29ueEwrZFREekVjY0REOUFoRStHUEhpQnRCT3VSN2VBbDRPZ29HekN6WVFPZ0V6Q3UvdlFNQ042a0tSaGc5YjkrR0FTb0g4R0FIVnIrWTFSS1NLSzZtYXkxZ0Y4SWV1VjdaWGlPUU9hSm1sSlNYSGJtMXlFcUxCNDN1S0lIOEdWeDhXZFhBL0FvbnNCdHNnTmNCM21VVHhaSzBSQ1VIQ2lBSzhYNlFHMGlVR1lEWUFlQUxmQ2tZUmlIZHE5Z29nMk1wY1ZIVWN5SGFrT0N3Y1R5WHZoaW1ZMldBTmdMSHB4OC9kT1FLYWFEWEFYWVl4STFTTnFrRTE3YnZpOGdTSWVRajhWSk0yQTZNcjZSR1lMS3UwYytkL3VpQVVJb1VScUlBM0xRcGJJZTRTRG5EVFh5aURNYkFDdE5MZ1BOYWtXNGh3d01Nd28xdVFvbXh1bSt3RE13aE1oLzBJTndVdElPUHFlUnBhSXdsU2VFSTMxZ3JGNkpGVnRwcVVCckFZeVYrd0FZUUU1YThMaEE1T2thRDViMkJiNCtuUmJzR2lIU2p5UGRLNTViMGQ0STh0STBpcmVMSUdKeGFaZlJFSW9IOGd6RG5pamlYSU5zVW1YOFJqd1lmc2FRMlFCWUJISnBoN0tZYXZzeEMwL2V5cFZDYTdRTEIya0UzeGEraDQzMTFnNmdkTEJDNFRIRTZZclZQTEFHaUs0L3B3OHNtZkoxS3JBb2xDYTRmVnpSblVMaXNvNlNwSzZyUjl1V3hqWkhGZGwyN1dURVFnNjZDanlWcE44c2hMblk0S21tUDd6bllmcFprWWJySzdvY2xYUllHTElocENDTDRNNGt0OFMxb1VieUl4WWk4V1E5aVBpTlNzWlRhSnV4bFlGbk5nRHpBQkJVNTlHSlpOVXpVSTZSR0l4aW1oQlFPblhFRkFKREhiRVBpR3gxQUE4MStJR2tQaEEzV21vU3NtNUJUd2Naa1ZWdHh0ODVWbkM3dFBkdWwyNFFUU3U5UTY5b2JkRXhxcnVUVldtN0xFTmdYNTRwWFFpSTQzemRZUURDRDkyRVgzVUFRK0NDQTJQUWJRZWJlbmhaWmw2UHRQVmRjRGVqNDdSZTRlWTRxKzhSejRrdmRsUFg2Z1h0NVplUjZ1QktoUVVxQW1HYzJFMHJ1aDg3UTNxOUFHTnF2NUdRMlFEd0FIRUtzRUhaaHlvOGVZbUZlSFcyWFczQW9VR1NKdDhPRktNUWk5dkZxK1JVbGpKZnF4Y0xiOWhadGVPS0xTVzNiU1R2UnFSd3ZXbG1nWUZuaDNMRTRMUTRwTTBZU1ZQUkk1aGhDQmZvRUdEYVlIRHhOZzNBbWY3WjRLTHRmKzY4WHFSNVFkOUhQbkpleHFEMGpQWlV0bVE1ZWwzUVZZVEVOdlBRUHgwMDlBYnYrMHpKbWtFNDF0TEZXbTB6R3dESW9yQk1jbjJ3TTVkRlFVWVE1QmxsYWlOSm1TamtHRWZZN2hpNUFNTTFOdnNRd0U5QVlBbE81YmVQRnR6NzM3RERUZXBac3cwc0FUQkM1eVQwU05Oa0hCcFpXdTFpREU1Q3hPbHpnNTJUTmhHWm1NUVkrREw0TnIzck9LVVhYMTYrTytjdWlwZlg3cW5vS0xpN24xNXhqN3pRc084blYyU2hmcTNpNmVIdHpCQWl2bjVzUURnaDNnK29kM2xtQTZpbkZvRVE3Y2ViOFVPOWpyUnk4VlN4TENyRVdBT3VBNXRoc0Nwb1dDNGswcDZnRFdXZzl1YnQwcElFT2wvWE40dllkNjl0RXZaNFdQV0IyWFNiam5RNjQ5RUZ5djE2bVFDWmQ0bzUra2V3ZmlwR1p1WTVsY1pnMmJxNWI2dHpWMnd2dWpkZVYzVGZmcTdoN3Z6K2ludjBkRVA4Nnh2QmJPMkRwSkhWU2ZpNnB5UFZKc0hvSVZpSVpBeVpEUUQ4akNoYkNCTDNJV2k4cXhLNE9EOEJHK0U3MHFIUW91UVVDaU4rSWN5eFZJN1NEYmlNVG9BaGpWdXR6Uys1TXY2K1dKSzMwcFp6elZsYWdrVk1YWEdiZUNmRmRDNmRwbm1hcWtmWFZwQ3ZpL2xWc1ZDMTVBRnErckFEdjNreXFwMzh0OTFZY0RmdExyalBQcmJpN255OHBvOXU2QU5RdHJGRkFFTEFYek1pNnVLZXJNbTRtOFVlY0wyS01odUFkb1RwdlhxOUZDS1hOcW5QazZ3V1Jac01VMFZSZS8xRzljYWFqWFpWc1g2Z1RUTDZFVWlhK1NUVHhteWp4c29CYkpkSG1hU2JVOHNlUTFiaUdBTmVoYW1BbzNjSUZVa1VBZHQweEdHcUtlWGsyMlVHQ1RPZVVWRlVuVEVuMWFrWUJmS2ZoSkRXejZHNHV0NkZyQ25QRlBITzE1YmNYcjA5K3FtRFRUZXZLd1Y3YTBoekNEak1mTk00RW1TNmdwRStSa2UxUFM3OVdraXFmcTFrWmdQQW5hMW9KYnVpZDFEcmJOL3RFK0FWblRVRW95c3hDK1F4Q2pwRE91WWpyQWZTT2RWUlN3cldDcnZLRFVlb0lvcWhycFdYN1pIVU9ScUFmWjdGbEJLaEFobjRTQ21UV2lQWFZkWnU1V3RqdnMyU244QmFva0ZaTkFLcnR6S2xBakFSME5nTG9TUkRxT2tYUlhpNSt3MHYwemQvNUwwKzh0Q3liWkExVDJCRzRBMEIrRTRPL0JxRGR5bzNFakliQUQvcFVwVDc0bWRXbHZpbGpUNVVZWkpyM1VWdDlWMWVSdVU4bHZFRzRPdW85MGU3UjlRQWxNaXFuZkJTOC9VNjIyQUx1ZEFxeVhFZklJL3lkZU1IRHUxWmdDM1Z2WklTSk9EcGJKemc4SWxldllzTmV0V0pYWnVpZkIzMjFqWUV5d1I1V2FtUndHQUlTQ2pQMUNCRnZucWZjLy9vYk03ZDhjaVMzdm5UOXdTMExyQjlqaGlTb2ZGdHJLRk9yYWFNUmtWMXRjOGFNaHNBSG9BMUFQMjBKMng5S1VyWTBwTDlDUmF4Y1VRUFFHekNqM0hiQ3F3aXlNWFRNUnJXY3k5UXhFZzdjSGJLd25DdWlFR2I4OFVrUnRqa2tYQlVUQUpQNnhoQ1licklxbFlWeEFhSzAzV2h2YUsyYWxHV2g3R25nOENqUUhoWDJuc2RvUFZuV3ZVMUJYbFd6YXp1dHV2TDdwR1RkZmZ3ODNWWGxYWU5SOGM4RUdnS0c4WGN2K0RkOEt3aHN3RkFnSG1jUTd6M0RKRzFxT0FJQnpoSFZINnNOelJkdUtnelBCR1oyaUZQd0NqcTlnQUptQURzbzArQzVJc2JkREN2TkpkamhrRFI2Z0RXWGlFUTdGV1ZFRFJ1T2lEOHFQZEZxTldNejVSUFdac1dFMVRvcGVkTlhzcjRsQkZ3YitDdEJ5cnU0S2tWM1RDU0g1T1c5WUZZWFNZbWhEMEJuYU1CYk9CT3NNa25RVFJJZ3FrRzVVZmw5V3BEdDZ5YlNjSVhwQldmYm0rM1JhMEIyRHJkTk1WMEdTWEcrVFdXQVEwaDhoZ0VOMlpJK3lsQWVHUUEzQlRXVFdBSlZrS01ia1V3Z3dianN4ZHcwRU43eEhjQ1JWTFVHMTN4MG9adHArRFh1RFl2QUkrNkRGUUpMOGdjMEpkRURtd3J1SU5uR3JxcmlTblJIN1V3WTZLbFo0SUhUZlNkQlhyV2tMMUptQUxTQ3V4RkZOYUFpZE1FN0hKdys5UkdjaWhJQkV6ZUlQeloycXZFdXFnVGNLRUpnRDZ2Y2h5UmVVWXJ4YnY0L1FDMkNVUkxmLzRZZ2V3VUFvUGhDN0JyUmNiT1dnQmRkUjE0RXdXSi81Z1dnTEZnN2NTVkxOYjNoek9WSGlFUHJIaW5nV3ZFc2hhRnI5WmR6Yi9STk5DU2hnMFM0VVZnWDJJNXBnQmtrVFZrTmdEY2pIa0FVVE5lK2xBME5qbHhCTTVRSW0zcHF5bFVlVWEveHdOZ093QVRkR2FGakhDdlRtdnRCUWhlYWQrbUEzQUJvNWlITk9aZXpXMEtoRVVoUkV3WmJScURwRHhYL3B6dUw3VG9pVVhkaUFUb3kvMm9wUjllK1I3ZStpR1VZRzNqVjUwQmFocnduYlZuQzlmdDBLYy9wUHdHNnhxYkI0VE1ybW5idEJrQUtGSk9JM1BJYkFEY2JXSVJDT2NvYjgxZ1dnNndpbWlHQjRCL1d0ck5KTVdtTlFwTWFsSVdSU0ZMa1JVbm9xWStqQjRxd0FVd1NlV1pacmovRGcwZXNsQmxVd05JMFNBRkVaZEhITW9vdDBvU0E0WmU4Q2pTTnpjdWxZNVRqK2ZhVTdGcEwxQ0prME0wRkM1WnZhejBWVEY5aEdPclhxSGpnVkxST2lXYXVrY0FyS2Z1QjVCTkFRTnluUWJMYkFDc0FiaHVSWG53MHk5UVpZcXhoSWNpMldzZEVCVklBMlFISEIwRVAwcU5Cb0ZRQ0I1R1FsS2wxY0dQQ28yVVRoaUFEWGpjSnVWQ1pxT1gyS1BvYzE2N3RyT1JjZGxabE1yQlA2RlQrUlJpbERJRitrYk9ZcDFVUlJ0YjdZZTIzQ21zNklubDFrcmVuZExyYnkzMk9RSkRweFVDbU1VOFE4aXNUT0hJM0FiaHhrVmdvamhqcDhmSmV0Z3VSL2tjTUc1Vm9aN0lsN1E3RlkwcmdiVVdmZ3laZTVlMHpFRFVNaG9HTWZodFU3RFM4SXJBZ0xlUE5FU0pxVzZ3NERrejByMGFtRldsSzlvRUxLV1RMd2w0aENqMnRkTUFBUFExOFhJUFUyVmZDNzhrT3E0RklIYzNyYkVKRUZpUEdlcllnNVlMdXR3bGx5MWtOZ0RRRDdJR0FNNE1CTDdoVjBkVUVLeWIrdy9sUkhRSTlmcng0V0ZSWHZKOFhCQjJKU0FvVTdodlpDMVpNMEVqNHVmRkVKNGI2SFZaM1E3MlUwcmNuV3NOa2xOYmlNWmdVcjUrSXBKUFkwampzSEp6QXhIUzQ3UWVxcWpEQUFRYzRURUEvNTZnbm1Hb1BRYkFKV0hiZFpKV2UyazlPQUlqdXdIZEcwT1pEU0JlQnBvMWR2Yk45ekNjcWNLbzQwR2VvM3NSU0tFWmlCSmVtREtFSUJBLzNtbEY4TFZnWVEzQWF0OEhsWU5ER1F5QVl2WUUyb0NTOHYyWGg0UWJqMkdGdEFxNHlOTndvREF3b0xDMWVVMlMwQWprNHZ3ZmpjQ1RWeHZ4UTkrOXQ5SXRkR21ZQVkraURaWU9nbHBsYk1sSFltU3A1OGlzekkyMGFjZ0M3TXVVV09FYU1qRSs2VEF3NFNCaUFkbXU4d0J4TVVrNXdORUFiR1FyWS9Vb2kxNEdDZVI0RTVvR0tvczBFQmFMVEQ0MFllL2VLWVA3dDB0Q2hHdk52YWNoYVlGQ3RSa2s5QWFqMURDblVBUmFIU1UrQTYrZEJxQzIvdC9IU2pPMUlRUDZZNlBkTEZ0cDh2RkFqb0loeTZuSC9TRnExZzNaalVZR3dCeExSK0k4M1lzS1BNT1lEVExGTmhjcnRpbU1Lc3JBRTlLazFCOS9xREIyRHJkdkFqTEFBS3plQW11dHFjWVl5Q2tOZmw0TXNTc0FGZlBxTkI4MEFwOEp5WU1hUEdVV0JHTkJlWklVeDloWCtEUDRMeVZZbjRYQTQwbjd0MkF3TW1aN3BkMzRWUjgxc1FQTDExT1FvekVWNDhBSXZISzhhQjZBS1lDbmU4a2NIaGhKUjRtY0FyT1JlWlREWVFJMkk1SWJVdys5UUR3R3hHTHVHcmpZdXhoalZmUlVzZTJqQTVPbGZWdHdtd2VBU2NFMVJWaXN5cVhxVUJxOHZoM3dJRjA3cENHRXVrZndwZEdEUlFCcmwycHNVRG9SMnhFS0xMSkc0a3Z3eU1rdkFqRnd2VktuNGNtVWVUSDhFR2NiZ2FjVTI5UHVSVE1BMnhTS0ltQTJjdUQ1U2M2eDd5akRhOWRiTzgyU0tVRGFRdkYyZ014d2haRWd4SFRJVHdHcWtuVHdJQ3g4ZUliT1BmNjhSajJ4TFJRaEk1R1pnYW1lTjROeFQ5NEFCSXNCbUY4VnoxZ0V3clkyUGxZeUJLK0ltSU9sMkpkWVJwendIQXZURmh6TGlLMnhUcUZ2UkJIVWlneFc5ZW9Ib0dZRTZyVDNXTG9UcU1JVmpmNFpQWFZsM1NPdzVLRGZQT1VFRDIyUjEwWkM1aW1Bd2NWOUFDelRkNnczV2Fvand4R096bmNzQWdVVTU4TkVNZ0pHRUlqRWxFN3ZRRVFQdzd3Znk4MmxxeHh2Uk1EZ1dCeXlNeGNEQUs2dVBDK0lldUY2WWRuWmhBNXloU1JTdTVpeEN1VkNIVFd4SDBreUZIYlhoYVloRWgrcGdrNXZJZVNCRCtPUHJQcUN3WkpuQy92c2ZNTU1vS0I5Wk1ZS3lIUmd6eVpqWlUwOHF1U0tJV3ZJM0lScmE5dmdJUWFpTmZjaWF2b0t6TUl3eWVpaTZRaHQyMGNBQ0tJeVlTaU5BdGtLUmN4bGpvMTRDUVZjaGs4aTRaTEpEQ0dGMzE0T3RSRXY1WXVJL2VZUVFQcVBzS1QxNzBOSTRIZ0owRy9YSmxBcTg1U05iMkJKS0RZVms3UjY0aGg4VzZzS2RUd0Q4TUhqNHVFUHdmb3M1b3hOOVVuZi90VzJkZWNlTzdPaVBSWE84UkhZNVBFNkRkUThZb3JqZytLc0liTUI1SEw2VUtnWVpOUkJ1RitneXVwOVA0MWhNd0RhcVE3WkdSNEp4T1JvQXZJcVlBV1BJSUJuN2tabW9PRnpxZ2piVHduQlV3aVFPcERHS2FDbVcyZ3R5bFhHOXdIc0oxb1lWUndlVkltZzd1N1ljQ1dtWUVaSGtTRlRSSTNSRTQvdzdkTWhOcmhVbW53U29FeWR0VEE4c2NxVXIycEdQenl5RUJ6UlZuWmVWbm5zUk0xZ29XdC9hbzRoZ0NYMmhSZ3p5cXpNamJScGFIZUZ1WCtNd1BkRmFEcERaTXpxQXd3UitmUVU0QTFBaGFyd1lQNU1lK1p2T3VWN1NZbkFWSVpDZVprQ0k4QlYybVZTSUdnR0lCUmNCa2IveUZVQTE5TmVzSW9qY3dLSmdvZUlVVkNCcCtRck1VTGU1cUVlRGpGNmFIZzNya3JTL0dGcDFnZGFXNkZpSDVSTGhYU090T2lwVDdZNFZWUGpSelJLdXYzTGJ3eWR1OUJ3UDNoK3haVzFyNXdiWW1DM29LYko4eEFWQ0lYSkttY0xuUUF6WUpUZGFMUWxTUGNCVExkNDJYNkJLZ095aEluRmoxRGw2VWhVUGpEeGlMaW9SeWlTaFhrQ3ZBQUNRQmUyQUJRR0huK2E4QlhieUJhZWh0WUlLSWhkUytnRVFuWWZRQVJNZ0ZZbVBCQUthUk0rR2ZKVzdEMUdWYThNamZOQ2lkNDBZWmMyWHgxWjFKcytGeGVidHMydHFRNndUakY5Qzc5L3ZDdmlWa2JjRGgyNW1JbkdScHdjdnI4VGVyZGhtNzRBL21WdENUdXZoMENqZWhnVS82eGo4Q284OUFOMFpDVVAzVHBraFpZdFpEYUF1bFpaZXVQS0hsZWh1SDdCR09NVUR5VnRoS0pWQmQ2TEk1OG9IeUg2S3V1UVpHSXg2ejV6L1lxTm5uck5Rczl1aFFhalFCQUl3UzhDOVlVUWVRQXpBQTFoM1JTMmUrU01Fc05wZUNWTzFkbWZDVi93YW0rdVY0cmZNVmwwZS9UaFNyNXJlTzVpM1MxSUNSTXlodDA3Q25xQlF3OW16aGZjV2Yza0Mvc2Q2UU9OazM0bzB6blBlOXlDVWdJdVF6QStsRmFNcDRFMzBpT2lQejJaZCtjdk50dzNubHdPM3owVXAvQ3A5Z1lIdllDR21LYVNRVXZ2SHdicGhzb0Jvc3dHa05OZWE2TVA1Y2hGRDBJb3hRc0hhSm1uSXZMSlpTQjVzV3RYQVNZOTBLbFF3V1NoazFlUU5RK2VBQmd2TU9DUUozbmZ5dU9EQm04SE0wV1lWQlN6a1BRZUlBaFNlUzlNbjRjU1c3QzM2TjNCSzdVTFo3czIxeDA4dXVUKzh1Q2lPM3l1WVFiRlY4Y083Q3k1dDl3MDRnN3MwZXRtNHlWMzVIVGV6Y2hOODk2Qjc0ZG5LdmFEYm5XR2RBRzlGR1Y0Q1FlL0lUQzFwZWgyYW92M0gzMXJ3WjI5eU9objZ6MS93Y3d4Z2hSUzB0U1lBWmhFVTVVREpMTWFRSzZoSFpkYXJEQXdiZTdwUllOdUpxWklKdlNiTWtZcGJSUGxteEY0a0k2T0FhZUNPSEpSTmtRUnFrMEZJYmJPQTZzRXl1ZW82NU81K25xNkZsVXFsREhrNVM2WXk2T2d1ZGVPZ1VDUEJlS0loTHhIVzYrdTNaSFRieFkxM0NlL2ZkRjkrOWxsNGNwcmk3YW1BTUd5UmV2aFl3MzMvWk1YM1J1dUs3bTMvY1NvdS9uS2dqc3NJemloWHdCYldKWlFSQnorOE1aZStjb290Tk5RYkFmNHNVNnFSVm56L283SmtydE9QRHp3OUpMN3hoTkx1Z29JeWxkZjZDZXRPZkF3NUFtZWdwVTNtendGeXhpeUdvQkdZcjJoaFV2VDNCYW5IaUVwRlhjSUQ5Y0tveWlkQTdiYkM2b2dJT3RKMHJKRCtSZ0J5b2NjaG1EWHdJcTVFV0kzUXlRTmd3bjRXUXZZSXBGRzBKZllPTXdBUUtJcEFwNHF1dFRhcnJlR3I5cVpkM3YwR2J0SG5xdTV6OXcvNzA3UHQ3UUhyeHkyWS90Mm5pSFJsNUsvL25UVFBYVm13YjNqdFNQdTVWY1U5QjVpeVQxN3FtbUx0cHAwWUYxSitoT05RWFFUZFpIeUJzaFVoS0ozYlMyNEczZm4zYkhUZGZjbjl5OXFmMS9KakMrbmkzdTJoZHNESXNGYUsvRWVBeW5lYnRabUVkMHQ0aUk5Vzhoc0FGV05oUzBUcnFIWDdiUm5iZTJIa0ZoK2VhVm9iNjBnRDBabm5BSzhCNGdHc1pwcEZLcmVlZzlBVW1uekFrcWpReGE4MkpKdENoRXNYZ0hjMEZnSkJzRG94LzJiRWFvT0E4QVFHTlVUZW5tVVViOS9TdkI2YmZ2T2g1cnVPMGRVVzVwd3U2ZTgwZHJpVW5neGxpU29VN0Myb1BYV0hRODY5OU5uVys2MkEzcXo1K3E4ZStaTTNwMDgxM1FYRnYyMEFDOSs5Q2V0MjNuaDVPUFdFL0krKzlqOE9aMXp4ODgyM1I4Slo2RTY0YVprblBRcHI2bkpYaFZVR2paU25CaFM4bHYxMHVuRW1Hdk0xZlZDNUdxUU52RWVxY3dHTURzN3UrSm1tbzJGSlMySUZ2b2JIR0pDaVV0YWtaM2ZwaEhaOHU4dGVRK2d2S1NEOHBDbXJhWlhNZWZiVTJ3ZFIvQUlRQWVDeFF0d2NFbG84N3ZTZmhFb281TjExcE54ai92VVRsdEpzNklGRm91NW5Wdnk3a3J4cEduY1Bmak1rdnVMaHpUcTlVdm9yUHlaS3BaMStCRW5neEJCT3dKL0tKUyt3WDlEbmZtc0RPZUJwNXo3aFZkWE5DV1UzVjR0NEk3TjV0Mlo4eGdDM3dPZ244RFRFZkVxcGFQNEVWM203WmdvdUd2azhuZG94WC92b1VYM3B3OHU2aTRtbTBIenJpWWVDdlpTcTNnUVBIMmcvK2pYb3NBUG1lMGpSVGQvc1ZWZm1iSGZES1JHWEE0V3NoaUFJVjJhT2JuY3FqZHI1c0pOLy8xb0lTWnhvbzZmWDlDSEcyV2I2cE1wandvRWlTSkRyNHhiV3JRNzU2Y044b0RSYmRxWU1VaVFwZ2psaWUwVE1LRytvR3ZtbTY2YWtDRDlPa0EvY0dMWDFhUGFWclZWaTZ2dE9pRDgrUEVsZDk5ekJmZlk4YnFyNlkwYTNEQ2JMdm1EbG0wb2tTZXhxd1hvV0NsOFdNYjRWZ3ZickhGeXR1aysrdGVMN3FZOU5mZm1sNWZkeTNacExwL1NBbkV4NytiMFRZQkZmZExlREYrZFlhN254ekg1YVZ4KzRlZllHVTA3OXl5Nmg0K3VtS3N2cXQ2clcveEw0Mlk0aXJrdkVrTTdoVHlBbGd5YWpaVUxGMDVrZmpjb2l3RVkvZnFwN3k3cmQrcVdVQXlFK3dWVGtDcHh2eWNrb0JmbVdtNUsxbzRWZS9ldlJKQ2xhVmluS09SdW5QUWR4Uk44T3VCUm5nc2ZWdlFhTkJLdWM4K2QwdnlwZDZTdTJWcDFaYTNjY1o4WVhrM1RJNWR1MzNtODdoNDl1dXlPempUZDVNUzQ1bm90dExTWEtzL05GZ0dhUUVWTU4xV2tDS09ZT3Z1ODl3amV3RTFadG1VcnA3dDJUWGZ3eEtLOHk1SjcxYjZpdTM1WDBVM3J4N0RLOGdwNERBSmVneW5pMGFmMTFzK1JtdnVCM3Y3aHhsVkZmRURmNW5zV3NDbGpOS3JXWEh3Rk9WQkdFWk13TTdFVzVrc3p6enlZTmdCUEVNQTFRbVlEbUh2NjNxVTlqY1ljaktEa3ZrRjE4Q3FEZHFmMW84bDNINnk3ZjMxYlNVTFhyNDJkbzYzdmlhR3dFM2t2MUY0NDR3Q0FMdW13dnZNME5FK082NWRIZVhMMk8xK1ljOTg3V25QYnRpekp6UlpOcUEydDV2bWwwd1hWczA3Z0lRc2p2aXFyNFlaTzNaUXZRMER4T3BqeitiTmd2UFhrU0lYQXc3Tk1GNXhoNzk1UnJRTU9uNjVKbWN0dVFudTZkMjRiZHd2ekYwUmJENnIwNnJmZVhyY0hWdERodHdOSGRiUEozRHhLTnlQMGhwaHdrY2pIS3oxeVE3R2EyR2R1dElOdzd2Z0QzeFRtYkdGUUE0Q1dGOFhDd25LdXVYSTZyNWFpM2Q4SUJHME5kRUxnZjNqUGlrWkYzcjN5V3UzUGtjVmYxTXVsOGJjbkFtWmhDMEx2MlFkUEhnakp6U0NGMXR3N1B6bXJBZTkrNzB2bjNhTzZWTXRYeXZvZVQwRS8xZTZWeWJ6TDVSNGV3b1JxQ0h3Wkk3aWd6WVB4NVV2ckUxQ2VYT0FrRUNRWE82VWtzSHdJS3JhQk1hYWpBb1lnMThQY3Z5d2U1cVNXbVFzcWt3RUFqZUpIOWYza2FIQVdpejhiOWFvajd6blZPYzBIeGVtODBnV05zS3JXTWtWWGYrSDAvTHdlRzFsSVE0V2kzdEdnQmhCYmcxanovL0pSZUVTWW5ZODNJNWppaEFWOUdsWEE1M1JwOWNIUExMcjN2Nm5zM25pamJxUm9FY1pUMjdRWFNaclFYQm1UUTRJU2F1MUEybGJIaWwrWXJidmYvZnk4KzlQdnpMdWlsRi9rMnQxR05RcVJhelZtUTJ0Rk9IY3VFekVLNWlUdmJzSHZZUkE2dkZnK05HdjNCeDVvSnkra1UyaGh2TnFpVkhqdHp4YW5ZZEVuS2ZQNWwyYjZKMzNVME9DQUQveVpJVVM2TUpBRUEvWk1KV1ZLQ0lZSFJoaEF2clYwVENXOEc5TFJNZzNlSzcwUkEyZzF6NTk3TmpjMUxYd1lnQmRCTjNLRXFOcFFyTkVuTjMxR28rRFg3bHAwMTA0dHVldW44MjZiRm1SY3cxcVF4aU0wcTk5eXVheFgwT1VtVWlGTmlVVTFpNnNUK3ZIS3g0NnZDSGRUcTN4K2lWTUtsMlg0YTJjaFoyVHhoNUJEaUdrTUEvWnRWRklYR1RDNHNPcnVLQXNJUXVSSFp4c0FPdkJGOERSa0lLTEJPZ2lEYk11akRXTmNKYnpCaVVLQ0V2NEMzMG1aYjJ0Z0ttTlJ5UWV3YWhkbUQ2dU1aVG1RUGFCcHNUcGtNUUNRV3Y5V3poNTVzclQ5WlEzZGU5Ymo5dGpsMWNqVHhzRUtHeGZjbENBT24ybTZKL1MrR3dzaUhpMmFGeEYyNDFxR1VDcVYzUGhFeWMzTWRCcEFKd1hFTFVHYmF5KzRNVjBLMlNxZWVWVEd4bHhxcjFKSmdBWVo1QWdPa294ZGowR3BZTVFKU0VoMHVGOGFyZ29BNmdodURQNHBpWDRCLzQyM3dkRjRYcXlIQ1JaZ2FSSGhJejFmVHBVNDdHeGlMZUtKS3RZUGxWeXpjZkhja1NkRGVYK0Z4SWFwT0lzQjBNeVExNDdkOTFSbC84K2VMaFRLdTJzMjYvVG0wdHk0R3BtZ0JlTG5PRndXSDJyMGN5U3JZeHY3aGtJcERFQ1dNajZpS1dKSkUyVlhTSVJqNWNyWnZ5aG82TVE1bERtZkFrYWYwVTRhSlFtek5vUnJBbFpNeCtKZ0UwTUtkaklxZzU3YS9ZMHRSRDBnWld4M2U0QUVLa1dxazQ5VVJRUU9NVFY0bGtsNTBYS3VmdnI0RS9mcGJnVFN5TVo0VmdNd2pvNy8xVzgvZjhQcmZ2bnhRckdzbTVmcVZoZ0JnYmNrTW5FbmZUQlZtSklZRjF5LzhiS0dGdWhpR2NYVHpNZDgxY3QvMFhNOTloQ3dtdW5rSTUxSiswS1ZkYnJVaEJWUHlrUmxSZ0NLV0VhOHdXQTRZdHRBTEJwWmpHTjF6eGoycWVoZ3RDZWt3WENacXdzTVYyd3UvK0N2UC8zZlRnYklRVm9uU05lVGNBS29CSWc1WktUemk2MExwNzVSM0xIbFo3RkNMcTM2aHNDT1diWjFENlhveG9pdHZGVkp2WG90MVJzS0RJRzdkaXpRQ2dOdGN2UEtwN0VmOGVBS3F2QW9EUzlGb2RUeXBDMHZtR2dFSG5ENDU0Zy9UYjhubFRTL1BRRlNoWUtkckdvZEpRTlltVC8xallzWHVhNHlSd2FXZ1RIWm1pT0ZkcjBraUcyaGNlSFE1NzZhYnpSbVdISGJIU3ZWb0x6dUE4WFR5QVN1aEJlR2xLc1N2RWY4MDR5ZCtsT2REQ3RkMGovdE1YajRnQzJoNDJrYkQxMjgyWDBaR09zcTcrWi9HUGxoMDRCM0J0NU83VmtZTHpabWpqend4YStvSjRTNENQUzVBYzVaRFNBU2NTZS85QjhPTlJmUC9KK0tyci90STBaaUtycTVkTXlsVVRwUDJpekN5cjBScEEwQkZXSXU4UnhVbWhoS2Q1NjIxcDZGWE1EZFRhOFhENUdQYnRnZmlyd3Nlb3QyRGUzVGhWaGgrZXlYUC8vN0h6Z1VwSXF0WndwWkRRQVJRNFRyelpVTGozM3VVOW9nTXNmREMxYlM2NDRXTlVycHZ5T3RxblpsT3QydkFlVUthMVd2eHcrTjE0TzUxUHFoMDVEMHVhUytRazhzZDFRYmM4Y2UvTklkRWdQNjBOT1daQXBRY3JDUTFRREFpc3doMWpqeGhYL3pTSFB1eUIrYkY5RENiVzF0aEpacmFVd2doRGdLZlc2TjgxcTRma1RyOEl3N0ovVVllNDhTRjQ3OXIvLzlPLy95RWFXaVRvZ3poWTBhQUhPTldkM3ByL3pLeDNPMStlOVZkUysreU1KT0xBempvQmZEd0xNV0RzUm1VODJRZU81RmE1ZzB3TFZOanhCZmRwV2VLQmJtdi9lMU8zN2w0eEpUMUFXZVdSRFp3a1lNQUFvUXNtbGc1bnQzblZ3ODlNVmZMK1hyNXlyNm5BazNZRGJEOENYQVZNUVgwQTljS2ZlL3RYN3V4S05mL1BWSHYvN25YUHFaSGhSblZqNWNibFJiRU1QaXVBM1VmUGJPdDkrM2VPeWVENVhMamVVS24ybmZOQUtKWlhnQllVOXEwWGZneXJ5N2ZrOXo2ZnpoZXo3MEovLzU3ZmVxT05HQjBpK3FBZEE3Q0xJVzRCRms0L0FuMy9Ubnl5Y2YrbENsMGx5dWlsbnU1MitHUzVOQTFDajdGbDkrVGQ3ZHNMZTV2SGo4dXgvNkh4OTgwNTNJWElmSlhuRUV6VXh3R0ZxQ09FZGg1cUZQSE55eS83WmpsZTFYL0wxOHFUaWlyYU5hWldmbmpSOTlMdXNlOTVKZWk3NmNvYUpkUXJESFBnSzdlWGdaaUhGenFxb2JOc3Q2cVdSUVVaakVkT0xxYXMrMm9udkYvcHk3WmtvYnZwNzcxcTkrL04rOS9qTmlFN2VQOHMwREs4NHVaRFVpRE5NQTBGWis1dUU3RG8xT0hYaTR1dk82RzR2VnltNW1tZlJESWFPNnp1bkgxUUNpZ2JBdGJLdEcvYlY3dGIxdHYzUFRvL09QSEhuZ3ovNzlwLzdqMis2VzZGQStkLzB1V2Ztb1lSZ0dBQjRza01PTVlPNzdkNTJvblQ3MHRkRjlyMm1XeHladktGVUxlcm1KNVVaNDhyV092ZjZvRzRCMVB5MERYWXB3NjdzaXI3ZE5pcjk2Rnk0LzU2N2FYajlmbkgvbUQ3NzZzZmQvNkt1Zi9xM3ZTNEJSK2NTWjcvcXB6YXJBVmRDd0FyZ3dLSjR2NlA2Z0hhVXJmdTUzWHpWeDh6OTdWNjQ2L1pabXZyU05id3cxeEQ2dm1QTVJaS1lJTzlTQXl5aHVjL0tKMURFSllsWWJQUzVYWUxSTmFGZHVRMXVKRi9qcy9RWWxrZFpqbWxlUFRtWXZ1OSt5cGVET2E1ZXc3UWhTQlE4clViajJpTmk3Q2FQYUlUeWhwM3BiSjdWWlZQZjJ4MHYxYzduRlUzLzU5TDEvOXNlZi85Z0hIaFZlRk01K1A5dythUVphUDlLcUdqeHNzTnQ5Q1lDUG9ZNFI4Q3lYdmVDa0s5TnYvazh2bTd6aDUyOHJUbDc5dWx4cDdJWm1yaklsU0Y3ZmwyRFVtM0NRNXFQSC9DSUp2NnpWM2MyaDlCcTBRc1QrUkF4eVVXSkZLUndZQXAyd3g4dkVNWitPQWFDT0k1U1RpZWtrbGlSUThxUVVPNjl0NXhnREd6Z3hjRzFjc2w5ZVlUT0hkcU0zS3JtbE0vbkd3cUhsMlNQZmV1YkJMMzd0N2ovNHRTZUVIcVhIeFI0dW54R0JDSVlsQnV1RDhBMDFtRnlFc2RzUThBNlVqZTI4OVgyN1I2NTgvZjdTanV1dkswenN1aXBmSEwyaTVUQ0kwcVMwVU5FQ3NEUTJrUy9PenVCUndvTjlQVGptT1lBOEJQZ3ZQV0FBVWd5ZWlHM2hLSW90WnNraEtpZ3M1akVPMGhZcmpZR1FqdVZLMnErRGFmMnFUVHhpVXA4bjEzY09Xc1ZpcXprKzZocUxDL3BOajJaVFB5ZlpXczQzVjg3bjNQS1pYSFBoK09Mc3FTTnpKNTk2K3RTVDl6NTl6MTBmUFNVMCtoRVpVenFLeHdBWThTZytqdnFoS1Y4NGh5Uk1NSzBPeUlRRHhYUEkxczBiRUV0OEZ0SjFsZEc5cjZsV2QreXY1TWVueXFPVE8wcTFsVktwVlJ6UjFuNkpucGZmc1FFZWd4SDQrYzFMRENNYWhValpuOFFrUnFCc3ZJS05lUW9qb3pGTnN3Uk9hVzFHc1I4bktHb25xTDc0clgwdWN2aThTTnRZYkpSMG5URi80ZXpLeFhObmF1ZFBIMTQ2K2RTRHk5cElnM0xqUWc0MlVDeEtSdGxSNlpkTjhhSmg0WktGR0JHdEVVT0RBNlhISThxVE9KWkZ1RFJQNmJSQWYyZ0N5a3p6bmg2MXBPT0J3cVBTaVRHRVdFWWM0WlM4UENITjVPV2gwTVlhYVJHbkR3d2c1b0dPZWRLRTJNN25mdmpPM2NxUGlxVW5NUjBWSFdQcTB1M0lYNWJ3dHlYY2JycnBmRHBOcDd2emwwVVFseEZwdHlMVCtYUWFGcnJ6bDVFdGovcWxLdHlYS2wrWHFwQVhYY0dYeXZCbSswMEpiRXBnVXdLYkV0aVV3S1lFTmlXd0tZRk5DV3hLWUZNQ214TFlsTUNtQkg1MEpQRC9BYVVjdVE1N1EyS0lBQUFBQUVsRlRrU3VRbUNDaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQVFBQUFBRUFDQVlBQUFCY2NxaG1BQUFBQkdkQlRVRUFBTEdQQy94aEJRQUFBQ0JqU0ZKTkFBQjZKZ0FBZ0lRQUFQb0FBQUNBNkFBQWRUQUFBT3BnQUFBNm1BQUFGM0NjdWxFOEFBQUFlR1ZZU1daTlRRQXFBQUFBQ0FBRUFSb0FCUUFBQUFFQUFBQStBUnNBQlFBQUFBRUFBQUJHQVNnQUF3QUFBQUVBQWdBQWgya0FCQUFBQUFFQUFBQk9BQUFBQUFBQUFKQUFBQUFCQUFBQWtBQUFBQUVBQTZBQkFBTUFBQUFCQUFFQUFLQUNBQVFBQUFBQkFBQUJBS0FEQUFRQUFBQUJBQUFCQUFBQUFBQzFaNkxvQUFBQUNYQklXWE1BQUJZbEFBQVdKUUZKVWlUd0FBQUJuV2xVV0hSWVRVdzZZMjl0TG1Ga2IySmxMbmh0Y0FBQUFBQUFQSGc2ZUcxd2JXVjBZU0I0Yld4dWN6cDRQU0poWkc5aVpUcHVjenB0WlhSaEx5SWdlRHA0YlhCMGF6MGlXRTFRSUVOdmNtVWdOaTR3TGpBaVBnb2dJQ0E4Y21SbU9sSkVSaUI0Yld4dWN6cHlaR1k5SW1oMGRIQTZMeTkzZDNjdWR6TXViM0puTHpFNU9Ua3ZNREl2TWpJdGNtUm1MWE41Ym5SaGVDMXVjeU1pUGdvZ0lDQWdJQ0E4Y21SbU9rUmxjMk55YVhCMGFXOXVJSEprWmpwaFltOTFkRDBpSWdvZ0lDQWdJQ0FnSUNBZ0lDQjRiV3h1Y3pwbGVHbG1QU0pvZEhSd09pOHZibk11WVdSdlltVXVZMjl0TDJWNGFXWXZNUzR3THlJK0NpQWdJQ0FnSUNBZ0lEeGxlR2xtT2xCcGVHVnNXRVJwYldWdWMybHZiajR5TlRZOEwyVjRhV1k2VUdsNFpXeFlSR2x0Wlc1emFXOXVQZ29nSUNBZ0lDQWdJQ0E4WlhocFpqcFFhWGhsYkZsRWFXMWxibk5wYjI0K01qVTJQQzlsZUdsbU9sQnBlR1ZzV1VScGJXVnVjMmx2Ymo0S0lDQWdJQ0FnUEM5eVpHWTZSR1Z6WTNKcGNIUnBiMjQrQ2lBZ0lEd3ZjbVJtT2xKRVJqNEtQQzk0T25odGNHMWxkR0UrQ2w2d0hoc0FBRUFBU1VSQlZIZ0I3TDE3dEc5TFZ0ZTNmdnQ5bnZmOTZOdjMzbjdjaGdhYTdzWldCSU5nVkh3Z3daWVlEUWl0S01NWGYraUl3YUFSa1dIVWtXaFFFOGVBa0JBRDBhQXlJc0pBVVFNa21nd0lBU0tTRmtUZ2RqZmR0Mi9mUjkvWGVaLzl6UGZ6blRWcjFWcjd0OC9aZTUvOSs1MTltbC90dlZiTm1uUFdyRGxuVmMycXRYN3J0MzVkdDBnTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhjRGM4TUxrYmpkNGpiUzU4YzQ5MDFCSFUzRHNDNzY4STFsK3Bnenp0WmtBa2ZKUU9QMDZkbzhoZjhCN1BBOGVaNE8wWU9FNzk0Mmw2U21yOVNocklCOWs2eG8vTGJWZmRpdGJ5TGVDNzY0R0RKdkkwL0RRYzJoK0V2N3VXblhEckt5Y3M3elNJWTVMU2VkTW1hNHRMT0hOMFB3Z2UweWhuYXVza2JwSFB6d01IVGRScCtNUmxqcFlId2EwRjhORFBMVzlMdjJmaFQ2WEJPODJXeEpHM01CM1dsaE1HVHlkblIrODJjT0xneVpUMU1oL2pzN3pJVDhZRDR6N0ljdVp0SzlrbjVPTUR2cXpUNWkwOGpRZGNwdVROOGoyWnA1UHVTZVVicFZzN0VoNTNlb3VuODVqY09jR1hCSysrKzkzdjN2aThyLzdxY3crKzVkTXVuSC8wa1lzWDdyL3ZRbmRtNCtMeSt0bnp5MHZMNTFmWFY4NnVyNjJjMmR5YmJHeHVkZXRMeTh1cjNXUnBWWFZYOWlaN0t4SzYzSFZMUzhxWDl2WjJrVG5aNjVZbTNkN2VaSmRzZDg4NlpPT2l4eWdVQWtWSSsyZ2lwSkxRQjdDWWs5KzVpRm0yTEJXUzN6a25wUjBkeTlMMHpKbXUyMUxoeXJWU3I2bS9ONlZ1eXJvVnpUeXFTeHVHZGNwNnU4THJmejllT0dTNmpwajNsaVp5MzU3NGxBc1FYbzViMmhYUDd1N2U3dTVrMHUzSXBkdVN0TDIzMjIxMXV6dGI5OTNYM1Z5ZTdOMTQvZFh0NjV1YjI5ZjJkbmV1VEc1ZXU3SjM4OGFsM1V0dlhONTU1ZVZMTnovMGk1ZDMvc1hmdmZyR0J6OTRRMDF1RlZYb0UvcksvYVVjRmZNUVdHRndwTXpIc0luMzJpa254YjJtTi9xMnVpZE1QdTJnMHpSZ25OYS83bHYrMGtPZjl1dC95NU5uSG4vaW1kV3o1NTlaV2xsN1c3ZXkrcVFHM0dPN1M4c1BhT3hkRUh4R2xWWTdYU1F4YlRsV05kV1o3ZGQxM05Ud1FTaURHaUFIT2JEeFFpZGNXTUI0b0dlWmZCK1BrQzE5R2crVHBmSUl5TGFuNGJQTmxnZVlBSEQrZkFTQVM1ZDd2UWFUdExTVE9OcE1PSFByMGVpUStKcGo0a2pPbUdiZGtxZnc3OE1KZjJCUzM5ei9RTmowK3F2cWFQVTBiZG94UkpXOWJtdXYyN3V1L1BKa2IrYzFSWklYSjl0YnorMXViWDU0OStxVlovZGVmZjdaNnovK1E4KzkrdGUvOFJWeDN5enR5RU1PQ2tnNjZDaXNwaWQ4VCtWTWxuc3R0VG9ubk5HYmNoNTBQY2ZaYi82KzczdjZ6ZTk5MzN2WEgzencxKzR0cmIxUGsvd2QyOTNTbzN0cjNjcTJ1RGMxMmpZMWFHN3FZRVhrMkJadWgwTmR6N0VyZUhXajY5YldGUUFVQWE2emhpZ0pIYjB2bm5hVVFQTWdCRkJLV3NJZ3dOV3lBUE1VNUQ1YWc2ODBBY0NITHNOYjZpd3JzRjI0SUZzVnlCd0FVbzdvMkVSSzNuSFpiUlk1aHMzYytFSmxKam5KZFFXM01pb3NlcmFSY2dabElZdVltbHZvbEZNR2dOZGVpMzZEeFFOQko4dlFDTkhPd1ZONm9xazlLU05tSW1WMk43dnR5ZDd1UzVOdTl4ZjN0bS8rOU43cnIvN0UxaS8rcTU5NTRZLzlybytxaHZaSERnVGNMMHMxTVNGaGdRUDFVbVh3cHo3aGtuc2x0Ym9tbkJNL2Myelplc2M3SGp6M0o3NzNYL3lxQjU5Nnl4ZnZyWjM1amR0TEs1Kzlzeks1YjFPMXJtNnFSM1ZjMThDL29RbnZ5YS91Wk1KdmthdjdPQWFUWDBJcHJ5c0FiR2piZkZWRDRocmJaclFRTHowdWNwOEtEbnlic3N3Z0wxVXJHVnJTS3pKeGhkRFNCM0JEYi9ISXlRbVZNcUZ6ckdnNDMzY3hBc0FibC9xMnN6NzFTRmxPdUpWWGFRWEFCeFVIWEFwa0EzeWhKUzV6b1FkMVhBYW5ZK3d2YUNUd0hHMEFvQy9CWmZMRXI0VkNLeFVaT0V4dmdzS1NmRExod0pDdHZUZDBoZkZ2OW01ZS96LzJYdmpsSDM3dWEvNzluKzVlZmZXS0tHd0NxWjNtWmo0d1EvUjdJclYrT3MwS3QzcVdycXZYYkd6VmNQNzJuL3oyYjMvaWZWLyt1OSsvZk9HKzM3ZlpMWC91MXRwaytaSTJkSmUxV2pQeHIydGx2OUVjVFA2YktwTXphSnhMa2xkLzVUdGF4a1QyYWtZQU9IT1dZOUpkdnJLbkFDQUdORkVtVXA5VTFyK1BIcmtmZ3VlNEtaM1J5OUFHdHk4VXNja1Z4UUZaaFJVTjQvc2ZXUElPNEkzWHNmTGdsSFVuTWpoZ25SMzlwdGVSTm9VUU9neEx2Vzk2dm1BUHZxSGViUXN0SldVbS9RSFpzcUtSOE5wcjZqTnQyU1psMXNNSEdIVURxR1dLUWVCT2pabE1FN3hFUUZpTG9MQjNjMjluYVcvbkovZXV2dkhkbC8vNVAveisxNzc1ajM1YzNPd0lxRVgzMDB6bXJXb3RMSmJUbDRyNXAwK3hScVBVa1R3UEFuZXUrcHQvNXU5OHo5cysrei80Ylg5Zzc4ejUzNys1dXZUMDY1cjByMnFGdnF4SmYxV3IvRldONyt2S0NRQ1pFd2h1YXFDdzZtOHFaOVhuTHBPMys4cmRjenBsRDdLbFBYZCtxVHQzYnFtN2NtVzN1M1pWZHdsU3MwYlpld0tVTFN1ckV3V0E1VzVUVjhlWGJoTUE3Z1V6c1dWNWVkSzkvdHFPQTBEMkEvM1g2eThvL3BVVHppQXFCMWR6b3dwT2c0emRnWTVsWGZwNWg3QzUrOUhkYTFmKzU1cy8vcjkvNTB0LzRzcy9JZ25zQ0VnRWdEWUk1TkRKM0V5bjdXUWZuRGFsR24xU1AvS2M4T1NzK2x0Zi9aZi84c08vOVk5KzNkY3VuYi80eDIrc0xUM3hzalpvcjJqaXY4RjFyWTdMT3E1d2FQSmYwd3lQSFlBbXZXYTViaVBYRzFwTmV3YXowUmJQQ3Zzck5RQzBmaml0OEVFQjRORDZFZ1dVSWhEb013Y0NBcE5mYUlJQU93UUhBdTBLQ0FiYUxqNC91WHpwMjY1OTcvL3dIUy8vdGYvc2s4SVFDRElJdElGQTZMcU9BSitxTkcyc254WUZVemNtUEFmbDNPNVB2dVBESDMzLzJUZTk2UnR2cksyODYwVk4vSmMxOFYvWGl2K2FqamQwQUYvYTNOTU9ZRS9iZmsxNExlSDBTcVlVbnVYYjVZc0FjRHNQM1YzNkhRZUFzZm9FQVA0MDh6TVlPQkFRREhRczEwQ3cvYk43TDN6aUwzM3NpNS8rdmlLQ29jVTFWUWFCZHRpZHV0MEFFK3UwSlJ5WUIvcmx3VFhYOXAvNW51OTU4bis1Zk8wN1ZwNTQ2dSs5c0x2eXJwOS91ZXQrNmZXdSs3Q0N3TFA2T091WGRFUHJGeS90ZGgrNXZOTzlxQ1gvc3ZiNFc1cjhlRDZGa2kvU3dnTzM5QUNYZ1hySVlIZG5wOXZtMEkyaGJTMG1mTVRJc2FYN1Nwc2FiN3VUbFhkTjN2VFUzM3ZMVDEvN2prZi8yMy8wWnNrVTFmY0hXS3h5N09hUXkveVdUYytUZU5vVVNuM0kwM21aYjMvYnYvdWxMNzN2clcvOXI2K3NMTC85T1UzNlQ2b1RQcW5yZmVlQ1g3dTUyMTJtazdoZ1YwcGhMdHpoYWJFRHVFTUh6cmo2aWU4QUR0QjNvdVYvU2NleVJxVjNCSnJtUEZPeGNrN2piWFBuUXpzZis4alhQL2NsNy9qSHFwNlhCTzF1SUhjQW1SL1F5dnpRVEs3VGtuSyt0cE9mS0RwNVdENytyaGRmK2M4dnZQMlp2Ly9penZMYmYwR3Iva2UwNHJQcWYwaFIrTmxMZTkzSGRLZnZOZDNHWjZ1UGdCUjJXb3hiNlBHcDRRRTlpTmp0Yk85MFcrd0lOTFYzMkJIb1BoTzdnWjNKOHR1WDMvck0zMy82UjEvNWM3S1d1Y1V3Wk9lYXU0RWNscG1MZEhmVGFRa0E2UkJ5ZE9MQWNkMVgvc2svZWZHL2VmM0tmOWM5OHVCZitPV3IzZHF6V3ZtVk93Qjg2UEtldC9xdjZMTTh0dmtwaEhxTHRQREE3RHlneXdNRmdtMEhBdTA0U3lEWTBnTmkyNXZkR21QMUxUOTE1ZHZQZitEcjlhaVZyejR6QUdSUVFMVlRNVnhSN0c2bmRNUjQ4dS85c2IveE54NzdMWC82ejM3WHpmTm4zdjloUGVMNW5DYit4M1d6aitOalYvZTZWL1JaSGgvalVUR0Z6TktZdGJWSng3R3BtNHRiK3ZpczNEaWVaWk16azcya2o4dzJ6aXo1QWFlYk4wN05qdlRZOW1MTGttN1kzWkF0WEs3TksrbkxDcVU5alVDMVM5dDhlV0hwNHRxN3o3enZON3h2OHZEalAzTGovL3BCN1ZXOXFJM1Ztc2V3SGJjNUtOL3RBSkFPSUNjNm9nOHIvOTZmL3ZidmZPTFgvYUUvOU4zWE50YS82RmxOL284cnVqTHhueU1BNkRQNFM4eDhwUlRnd294UGl3QXdZd2ZmZ2ZpN0ZRQ3NzbVk5ejVDMFM5R2VMZ3VXejYrOGZlUFRQK2Z6Tjk3eW1UOTA5VWUrVnhjSlU0UEFIVmg5NTFWUFF3REl5ViszL2F6OHYrNFBmdTEzWDlsWSsveG45UWxydStwLzR0cXVQOWFiNThSUE55OENRSHJpOU9WM05RQVVkM2oxMXhPUy9Ia1RvaUN3ZEg3NXlkVzNmc2JuVFI1NjdKOXBKNkE5N09rS0FuY3pBRENIeDVOLzhudSs3dXN1L3JaditIUGZkZTNzK2hjK3ErOW01Y3IvVVczNVg3d1JIK25kamNsUEh5OENBRjQ0bmVrMEJBQTg0MHNDaDRBK0NFd1VCRGJlOFo3M2JMLzYyai9aK3JtZjFCTXFIdmRtcDBwVEJqZlh4S3A3TjFMTzRRd0FCS0tsQng1NFlPWEwvb3YvNm0vY1BMZnhtejZrbGYvNWNyMy9VVDE3LzVJKzArZmp2YXg0TjVSZXRMbnd3R0U4NEdjSDlISDBydTRGY0lOd216c0FGelorMDhOZi8xZi9ldmZnZzF6aU11L2FBN0YzWldqZmpRQ1FocllPSUFEcy9QVVAvdngvMmoxdy9pcytvbXYrVCtoei9lZDEzYy9OdnBkMXM0OW45TE1pM2xxa2hRZE9zd2QyTmZ1M2VRS1ZUd2gwYkNrSTdEMXc3aXVmK3Q1LysvWFNXNWpUOGZIZ3ZBTkF6bUh5REFCRXhPMi8rYTkrNW5lc1B2Ym9OM3hNVC9KOVFoUC9FNzdacDBkOEY1TmY3bG1rZTlFRDdBVDRacUtEZ0o0WDJORzRYbnIwMFc5NDB6LzZtUytWUFR3eDZKMnZjdVpDT3pkVW5FK2Fad0JvRFV5RGZRL2lqLy9OYjMzTHc1LzVybTk1YWF0YlkrSy9JRWV4L1g5Ums1K3Y1bWJGK2JoazBjckNBeWZuZ1YwZUhOSjY3OHNCM1JSVVBGaGJlL3U3dnVYaGIvN3ZueTZ0NUVLWWMrTGtHaitFcEhrR2dGU0grY3pCNU9lWWZONVhmZFZmdkw2Ky9KYm50ZnEvcU1sUEFIangrcTYvcHJ1WS9QTFFJdDI3SHRCSEF6dmVDWlFnb0V2YjNUUExiem43MjcveUw4cW9uQWM1K1hPNFp6NXp1K2NWQU5JZ2NnN2FaZkp2LzgxLy9jSDNUKzYvK0h1ZTA2dWNYdFp6L1JFQTlIMTdMZjFaU1h5bklxWHlldFBucDBUS2p2aFVNQ2I3NWxUYVFoQm9kZ0k3ZkJoNDhmenZmZFAzLyt6N0JiV1hBbk0zdzQvYnpzbHBhVnhPL3NtWC9aRS84c2hENzNqbk43NjgxVTFlMXFyUDhkSjF2YmxSWCtyaDFicW5LZms1RDNRcWVxRWZCdDJUU2JyYnY4V2UwK2JyWS9tMHNjVjlkU3doczZ1MHAxZEs3V2pFOE5YaUhRMGN2VXQ2c3ZyMHAvMzVCNy9pNi83UFYvLyt0MnI1ODZKWXJLZ2ZEVktlYVpwSEFHam5DWk0vQThET2wvM1p2L0MxVzJkWDMvbkNTL0d0dnBlMFBYcFpuL1VyQnB5NnlVVlA4QjRJbmova0V3bHRWazZkamxMcFVLbTFCWHV3NVY1T0RERHNJT2REZGwxcW44cStXZEV1WUdsbjJZK1E3MmlzTDExWWZlZlpQL3pudmxZQjRMK1V5c3hGdWlaTkFaNTU4azI0R2JkQ3YrVEI1TWZRcFQvNHpYL2w2VS83cmIvOWI3MXdZM0tlWi95NTZmZWNQdko3UTkvb2d5a3JuSnBjM2JHdTd3R3M2MVZhL2k2QXZnOXdLdlU4ak85a3k2cWVteit6c2VTYlV6dy9mMnI4ZkJqOVJ6ejB3MW5ad3VwNlU2dUh2c1ovS3UycHUwZGVOaUtINC9PVk0rYytjMlhqM1BkZi8vRWYxaDB3SnlaK0hyRE1OT0c3ZVNYYXlodC9PMS93dFYvNyt6YzNsaDU3V1pQL1ZTMUJyeWdpTXZteEdNYlRlSER0bjhkcDFPOG9PdUZuMzh1UVRVZXBkeHA1MDVhOE4zTWFkVVFuOVBTbkFucWdUWnVCYmxmamZrOXo0TXo3ditZUGlNU3pBY3lQWklXZGxIbVVUdmc4NjBzQTk0MTBUcVBJdXkvL1UzL3F6YXYzUC9TQjUvWDFDRjdoOVpvYzhhcFdvVjN0cldldDBISDl4M1ZsYThReXdlQzR3dTUyUFd3cCttTVR0dHpyS1FlYWJUbkY5cUFhNDV5Zk45cVYwbHdLTE4vMzBBY3VmczJmL2g4dmZlZGZlMEZrdW9RanJjaGNxSk5QODVwdjlFOGF0dlBGZi9qcmZ1Zk9tZVVuWHRHMVArL3VlMVZPdUtUVm4ydTMwNXJvaFEyZEZMeDlENkI5b1B1MDZudzd2YkNGQTF2dTVjVGd3ZzUyQUl3aGJxdWY1clRFdlFETmZnNzlLSW0rTmJqOHhJWGYrOGQvcHdMQXQwbHY1a25HTTFrMDJ6VExBSUFScERUR0FlQnRiM3ZiMlhPUFAva1ZiUGt2eVhoZTRmM2FUVjdQSGRmVVVlWDBuZlBPY3ZaSXJxQ25UOVBiYTRRdFRCWnM0YmpYUHdWZ2dMVzIzQXYydEx1QVhVV3M1WWVlK01yenp6enpkNjQ4KzZ4bWhvUEFYRzRHTWlsbm1YTHlrOVBXN2dmKzFyZCt6dTc2K250ZjFiVS9yKzUrUXdIZ3FyN2IzektlVmhoSFdUZU50dE9xNDJIMXFyYWtUZmR3ZmkvYTRoOC8xUlRuaGlYM0Fqck5pYk4vNnRzK1J4QVQzNHVsOHJZN1ZUejVOTXNkUUdxTEVXblE3cHMvKzNOKzg3Witjdk9LVm45K3VJTlhkL084OUR3VVNZV09rL3NlQUJPL1RQNTcvUjZBOVMvMmZFcmNBeWkyc1ByZkcvWndJMUJ2SGRhUFNPOXh6WEsyVzFuNzlIZDlzYUFmMWNITlFHNEtNbmRtbW1ZMTcxTHhqR0FPQU9mT25UdXpkdUgrTDJMNzcxL3MwUTdnaWw2dHhYVmJWcGlwdFhjZ1hPTXFYdjBrZ0dCd0wraDhrTG5ZZ3IreEkyMDVpUGRld0xlMk1KZkc5d0J5RUdJTHRwK1dwQjg4angwQS9hQUJ0WHord1MvU1R6YWYxVTlQYVdtY3oyWEFyQUlBUGs2L1o5Nzl4OS8wVFUvdHJhNS8xbVU5OFVjQTRGZDcrTkVPQnVGcFQ1NHNVcEw5R2VybVRxRFgreDR3SXBWbHdIRlVXKzRoM2RPR1VkN2FNdkdBWXRqMUtTM012S2ZjUFVnajN6Y3ZmUm1nS2IrMHN2NVpELy9SYjM3Nms5L3k5YjhrclhMZXBDSGtKNjcrTEFNQW5rWHB1djEvMTIvNExlL1pYWnRjdUtwSEh2aDEzcXM2K000MERLY3hwZWZSRGM5NzBnc2dYOUlnTTcwd2didG5rblJsbTh4MitkN1pNdC9hdTJsTDJyTkhoK2gvblBaNEFtZVVwckNOT0daVVJFWHZBdlJwQUJ2K3M1TUxhNS83eGU4UjlBczZtQmFwTFBsTTFKeGxBRURwUERCbTcrTGpiLzQxbXZQeEE1M2FBVnpYVzFQb3Axa3FvZVpPSlBHcUo0eHhyNVN1WURkQXQ5eXFkMmJTYTNkb0VUbzU2QXBnc1dUczNhc0ozN2VKUHNsK1NkL2JWdUU5R0ROd3U5VFd2RHV3QXdDL3RDeWw5NlRvOGtOditseHA4ci9xOEZCVDNwb0luR1lKdlBNMGk3bVhDcFBuZ1RHcksrZlB2NWZmN2RQWC9CMEUrSFhlMDVEUW90VmtBRE5Eb0N2ajRQTm1CaGlxcDNFQzc2bmszWXFVcm5wWDRKNHl3OHFpT3YyUS9ZTlJwY3VxZmVNQUIzOWFuejhqRGlid1FIM2ZSbWwyWjc5RFVBT0tjY1Y5Z0tVekY5Z0JuTkdSOXdIYVlYYmlQVFdMQUlDM1dsODZBSC94Qno3d1lMZXkvdlpyK3NqamhsWi9EZ0tBTmdFRFppcmZyY1ExV2F0NHE0Znh1TDhjYkRXZE1oZWhnb1dVMlVINHBNODlsMEs3UElUQ3dQTng2alE4bEV2YXZ1STYycDJuMlUvZlFFdXJEQ2RDT2Zpa01RRXpKWjYzK3M0cjZUTUFCU3kxclA3d3B3RXJhODljK0xLdmVmRHlEM3puaTlJQlJkcWpWL2FFRkp4VkFFQzlnZUx2L2ExZjh1VDJaUG5oNjRwcitpRWZCNERUOUxZZjN1R2EzWjdYODJrQVl3dGQ2U2Q5RjZnN3E1QzJvbDkrNDdmaGZLa0pJOXU0ZXlUWkRobHluejVzMG9jdzNVUmZjcnFYRTlwZmtDMFRIVmZWSjllMHNPUVB4dmhudmQwL0RFZzlmU2Q3V1pFS3ltYm5yS0lMd1pNU0Y2WFpuZWtMZ3BkamdCYkZwWlhsaDgvK2UxL3lwQUlBandXalRxcUVFc0FucXRwSkI0QlcyVlRZU2ovMnpEdmZwcDlMWExucGxUOVcvNG4yUFNldEFJMmVWR0xpNndubDdyd215enN2VHJvbnowKzY4MUo0YVcxSlBjRXdHaVU2YzRSeWNTcnlBTjVwOVVlNHNaTkg1T0dRS1VUWEdWVjB4ekQ1ei9JN2xpVWQwWWFtV29KSHprZHFEZXRQSVJvMXdsTmtBbTgvdHVxZDVldDZ2dVNqK2dHWjUvVTdFbHl1RVFqd2VGd09SR1hPNEd0UDFuNENDQjVxelRMUmtvTUFnTWFhM2hPd3N2clVwNzlOcFovUWtVcGtMdFRKcGxuTlB4VE9BLy91bm52bzRiZnhJZ1FtMUpaNllYTjhZWGF5ZGgxUld2UzhvN0JxbHI2d0FlKytmNm43TEMyVlRQd3ptaWZuOVZLQWRlWDhJaXdHdWdNUGFBMTU4SkNpaFlCbmRSNjBwVUtXNzdROWRNOWQwVHpzUU4vVTNlM2R4aFo0NFdPaWIybUJ1YjQ1NmE3cGVNZjVwZTRGZmNuc3AxN1o3bDdTZXliV05OdERyaGdGc09lakRrTVJQSWQzQjJaQ29nSGxzMHUwRVBjQnRBZFZrOTZGUFBEUTIwcUxWcWZBWmoxcFRVNDZBT0MxR2xBRm96VEg4c3FaODIvbDVoOFRQNFBBYWJqKzU4b2RwUWRKQ0xiNlgvREljdmMyRGFJSGRFdm1NeC9xdXZ2UCtsTE5BNGJkQWNlK3VrWFFRZmhCTzNNbzRQempwdE5pQS9vZnhnNzA1V0JDWDFjZ2VFRWZONis5T3VrZVdsdnRmbFN2bmZyd2xkMU9QNG1vRlBzM3JyK0JYVS80N05QczFMZ3NQRXpMeUR4K1d0Yk05K1NYSXVSTGErZmVLbWs1K1ZHZ1ZRSVlsVThrblhRQVNFVlQ2Y3hYbGxmWG45aFVwM0J0UmhEZ3l6KzdzaU1ybklnMXh4Q1NDckxDSmN3ZDJjOS9lTGw3KzRXbDd1MzNkOTE3SHRIV1VrU05uMjVMOXpENDhvWnZPcFZ1b05NT2xaTC9VTXlIWTJyOTExN0RVcHZtV3ZyaEpCNkNxN0czQVE5UjhkWXNyYTVqVzI1ZFUxUXE2NkRlbm5ablN6cmVwTDQ3cDZEOXk4OTMzUmMrb2tzRC9ZNzNDM3JaN0xJNm01SEhoR2VTOHlLUnZLbUxQVDZLTW96UldhY2xLMTBhMXR6UXczSnZWbWxOQjUrYUYwMEV6U0NkZEFCb1ZVUnhLLy80NDQrZjBaWE5JNXN5aDV0cC9GcktMdGYvOHUxTXJXdTFPU1NNZnF6NnoyanlQNmtmZDM3Zm8vcStndXBlMGRPTHUzcHIwWkowMTlpeTNsTjFsMDJ6SHpLSE5LYXdWVDByY0p2NnA5Q0cxTmdtSEdBSGZpZDRxNHY4bWZxMlJ2ZXFwdEZqMnIxOTRxV3UrOXlIVjdvZmZHN1QyLzVsSmo1OG12dzdpdUJjSExBN1FMVEZ6N1VUbXgyQWxGOWFYbjJrZStLSmplNzU1N1hVVkpVT3NGb2NkNUJtR1FCUXkvNzh6Qy80Z25ON1M4djNiMnIxZEFEUUpPUFhWS3V6NzhDQUU2bGFCanplNXFiUVordTZuK3Q5Vm41KzB2V1N2cms0MFMrNzZLMVQzVXE1d0duSFIvYU1jUTJoQVU5RXphTUtTYjFxUFNGYVhPcTNENWVFVW5GVXJPTG1CYlQ2dWMyUkhlQmFIWUVaWjN6a3ZLVkZoL3MxWjNVWjk0aTJjYzhvdVAvOEczbzlaOXdWZERCbkV1eHFWN0N0bFppMk1zQVBuQ1g4ekJJS3M0MVUrL3kwdUNMQS9lYy82d3ZQWFhuK0gvQ2pZcTM1d0sycEt0NVptbFVBUU5FOHVzYys2NzNuTmQzUGMvT3ZEd0RpT0ZGVGp1WUkrMXhWTkU2c2hqMHI1T01iays1KzNSbC9RcXYva3J6RCt3cjIxQTM2K1hrSEIvZlRxS2swQTlwcFN2dlVFV0xLazdCOU40aStyODRwTUdpZlR0aUJYajVOVnpBL3JtVzNlVTNIdXZyeXFtYjIyODR2ZC85T0FZQUp4ME5BclA1OHBzT2s1NTRBWDB6bmNvL0VaU0h4bnVJdG1vTDFqcFBIbGRyajBsSjZuVjkveDdzdlhQbmhmOEN6QUtTWk5UK0xBREJXZHUrUk56MTVZVyt5dEpHVDM3bU1WVGZjdFpSSzBza1o4ZEhyTVFXQUZSRWZQcStCSSswMnRmWG5iY0FzR0RuQk14OHJmeEIrekhkWHk3TDN3T0hFQUx5cnloMis4VnVaWVNucUw3YjBYRWl2cWw5NVpvUDdBZzhvdUNzR2RGYzArSmp3VEg2K044RHFEejlqZ2U5SklKL0ZRYy9uT00zU0w5YURCckxSbGFXTmxVZTVBSFZDZ3p3SzZ1U3lXUVNBMUs0cWZlN2hSeTdvMm14VnIwYVBhelRsK1dXVVpMN2JPY3B5YStnOEgvRnBzS3dxMXlkSDhUVk5FYm0ycElQSWFnNmN5WVFzRkw2K2VOY2c3R3BUNnQvaURvSkhKaDNFTmpmOFBsdGFCUnNpSUNSeWdya0R2QkFUK2xXUi9LeG1PaStoSWFycmJEcjM0ZmhVYWtVMXVTbElvbDUwT01Ec2t4ZVFzR2wxNytLakJJQTBZMmFObjJRQUNLK0ZxZ21UNzIyY1AzZUJKMzU0N0pRZ3dMYXJmUVJ6WnRiZFFuQXFpSXZ4TXJkYkdRd2JHaFIrd2srOXp5VUwxMlFNbk9UTFRvcCtFajVUZzJqQXBONjFQSFdwOWg1U2s2eDNTUGE1c0tWT1UyMkJtQVRsN095WTFDUmdRT1kxK1lZQ0FKLy9yNWtuVm44bXZ0N1k3KzAvbndnNGFKVDZ5QkJxdGtrRGE0TENOS1RHbDgrZHpSMUEyeTRhbmFncUp4a0FXa1dCcS92V3psODhoMjA0blpXVVFKQ2RNcTQwanpJZXpJTkp6OEhYZTdYb2U4Vmd1NC8yNkFrams5NTlVMkJoKzhzQkZ6amRPdEdlVXdVU2NVSzU5RVh0ZzlKSk5WdmxWT0NnRnU4QWYweGJCdlpUU0IyVkp3aWErd084TTREeHlLUm42MjlZT1o5TThkSGZscUpGKzlndzlUaG1sVHpHSkp5Y2hwWTJMcDZqR0tYWk5UM0xBQ0RkUTNHOTZPQWNsbmoxMTZRaTE1T2FweUpsdExjeTBvbjd3S3dVVEhoL1VhYm82UTRTVE5HZFZPQTZzc0JQczJpQUhCU21jUjhmWjMyYUlkcUFZNkhUU0xmVmJNQXdLSXpGMzNtNXRXV2FzcVdGQVlrQ2FwVzhncFlWTkhEWmQ0ekJmdUwzTndTWG1maUlLZlh5aHFCUU0wMXIwaWUvRTRDZTNlbzZBWUNVWm1ZZTJCTTZuM1FBbUtya3h0bTFzMnU2RzdQR1k3UWJmQ1F6NlM3cWpzeFU1aE15N0RCaUdBem9nTU41SUlUeWlrWUZPVGdmT3JGcllWZVFaUThpNkVZRVhrVXdrUld3S2ZYNG1VSk5pd0x0MzMxT3h0S0Qwb2hTaWlQc1FaVlBHRDlzZkw4dFF6c3FuV29VU3U2K0ZFd3grKzNNaGg3dDNsbnlUc0M4bXZScytibmhSOVhvNi9oSTBHSXNYSVFacGlVMXluMm5GYzNJZGQyQTNyNndxa2VZRGt4cDRZRU1oeVdjZEFBb2JnKzNTZ203YnUzTTJzYUtBc0M2amcwRmdETXk3Wnp1dE0zQnJ3ZjZJUld0REVLQVcyRWtGSmdCbzhEc2daTjVTK3RoYXZhSkVpdElwQUJxTWRFenlzT25jWGFibkFhT1Bwd21ycmFQbGR1azgwdGpXNnhUYlQ0MUtUczJGZUhuTUY4QmZNa3BCRHM2Q1BUTCt2cHlkMEc1UHhrQUxab3Yrd1FqZ0IzQTBHY2dacHZRaFFEQXdkcS9kV0ZOTTZXYWhQWXpTU2NkQUZCeW43SmJ1NU9OaVY0RWVvMTNBZXFobWl0WDlycXIraTJBZll3ek1YRy9VUFc5QndrNUFCL0RKTHpEMHo3U3JQSUlZUEo3UWdzMnZoREhjRkRqbkZ0SW1waC9RclBvaURyd2o2Z0VFaktJaGJRakNqZ3g5c2FXSXJNZk4weCtkbTVORUlDb0ttUUZkQUJQRzhEZHVMN1RYZEp6M2F2dTZxZ0xONWQrcnNkSnlTK3JUNXpLQlczYVNaOTRNR2xWSDFud05YTjlqNm5idnI1RUFKaDVPdWtBTU5WSE96dEw2emYwUU0xMWdvQStYTCtpSHdHOXBKY0NUR1dldWNsOUE3UWZnN3dFSTQyU25RZU1OVk91SHI0RUVJWkIxRzc3V3hpaUI1bFBCUTZNWlJXMDRWbWR4djYwVlFOOTFQS1lxVlZtcEdSZm5BYTFGVThlSHF1NXp4WXh3SU5tQitZaXVBOExYM2JIcHQ1R2MxVnZwZVhiZ1o3MWtnREl6M1d0SUUzL1liRVdnZ3FmdkkydHhGVnRBVmEwL1dRSHNLM0F0SHR6d3VNbk0wOG5IUURHQ3N0OWVpeGJEemYzUXdpTVArbHd4NDByekx2c3FDOTkwSSt2SzZOd3J0NU04SG93RUpveWVycE1UZU4xQWxmS0xzejVGQnEwamU3SHRGUjNUb3NBdm5XVk1mZk15dnZWYUREMGsyWW12dGE2clVtcW5KbWFCbVV1N1FnQTBVL0ZOSlVoYzZWSFloT1ExLzdnR0FPYWcwNkpMOFhaWnlpbVJEYVpMS09HUVhDelNyTU9BT2c5bVN3dHIvQXhTMDZnV1JseldMbkZ6NTdvd0F3dGZ3OEFCWnRFS1hjQm9FMHVkbkJaUUVYWEtMaktBK0JrYWhiNi9BQjB6M0JFS0EzYVYyMUlvTm5ZOGV4anJBanoxRklDUTRVcnp4Q2R6SGVXRDFVdXN2WWpFK05jZWhESVNXUXRqVDV6RUlCWTlHMmZRQVhGSjBGTWRnSUFNSGYrbVJqNVJDQ3hoVlNxUitHa3p4TGU5czFraWR1QjFSUmFTN05PdE9WWkJvQkc0UWtmcjhZRVFuMFZjRzdEY0tKR0hWWVlPbTJqalA1WkNlaDhyLzZCc3I3akFOQUdNYi9Jd2J4Um9WLzlEWVVhSXMwOFpSdjdIT3FOODZENS9aZ0JXWVZHZDVkRzlHeHJoRDZ4WXNvZjJCTElRTFhuTW9hRXl0OEN5R3JrSE5sL0tSWTl3Yk1nc1MwbGtMUDlkNzlDOHdEUUEwR0MrWmpRdHduYXlzTFBKS0VVN2Vnb3VyUnpFeXFKUERtTnVOTlQyOGlkeW1ycnA4TGdlTFNPZHg3VUNaWE9iaXZNRTY0clFtblVYcFYrdnROdmhYdGRjd0RCbWpiMHNHb0t5YVNLSnh2N1BIam9VVU1sbjBYbVRiQUVvMHVSYisvN1ZGR0hiem5xN2VQSCtKckM1aWkyK01wd1RDRGE5am5GdWhCNG93VEc5bDlOYU5tUFZSTWYyQU45dTBLZ3N2dGF1YS9sbGNNZmRjSmRCSDM5bDQvK1loR3dNT0g0eGlvM0FuMnJvSmM4RXloMVFobkRtak16YVdna2RGWUJJSnR4ejJseThQWHJHSXpPNHlrc0U1Tnp6cmtIVERPbzR6dmh4ZmxGMXh4QURDSVNaVmRwNkdHWEpvUjVnaENnejJGempxaVE0dlB3ZERSUGpMbjNyZW8wWFVjVUxmVTFlbWlvQWFYUXVNVVh6RDVDSzZXRjI3ckhod2ZOVWJBdE1jbVJhcFRGSnhTNXo2Z2pnSXdqQTNqMkc5V1k5QnpRK0s2QWR3R0NTZHdEWUx0SzBVRkRlZlkvOUZrbGRodHRCMmdwSVFDTXNDZmYrcXdEQUJyckU0NGxmZ2F0TjdBNCsrVE5DWStONWJaelFZNDFPVlhJYTNtMmVwREFlNklyOStBUmczNi84UllUUHlxeEp1NExBdGxXTmtZYlUxUFBRSTg3VlNBUjQzdy9RNHRCRjVkOTZ1WDNVZ2JjUFhvTXFTcTFiODg5clkyeHNJUEtyZlRnMlk4SkxRSlB5QXNvK2FibDRPaEQ5eWM1b25WcUp6d3dsdzk4QXNBWTRDTkZnb0JuWDZrenIzc0FxR2NsVVZTM3psMmU4V2tlQVFDSDg2aDkzeEdDNTMwUEFKL2kzVjMxWnNBTWFtL2U3WFFHUWlnSVlGUjlGSmpIUm5PQVZUdVFvb0xMQlhiR2lmck9zcVVvcHd3ejVBa2tiR05pcmRvVDhrWlhWSzBNS1dtVWwzckpwbUl2Q2RZa2pLb2xaVUFlRlBaWHVHUE1yZVJMYTVIRGRnSHF2d3JMb3VoRExFT0d5c2xiY2dkeHFrSG1LSWtiZ2VzcTArLytDQkM4eW5FL0lMNGx1Q1JoU0c0WEVOaG1rV3hUMGMrNlJqeWFSVk1EbVhNSkFHclJZOC8yNldTbkpuS2d6cDBYb28yYzVLekxPVFNRYlRVYzhYTTBtQjZ6VlNpVitDOUg3Z0JZRWVxTm91UVJvNi83WFNVcTZPektrYnZnOW9HY1RCQVVhZ3h4aGRhVEJMa1FCTUJVMDRTZU1lVHNPL2Yxeks5aXJtVDdXRnRFMFVQY3h0Wml5ek5IT0hveSt6TmNram94TWJFcFhXRWZTYmUyUEFnQVJXL1RFYUlqNnNSczh5Y0I0SVVrWTdIZ2owQXc4MVNhb0NuYnRjY1BoUlgxWnRqNFhBS0FKb3AzQUhqVmRzcXg0ZHlUczZ6NHp3S0JjOGpZb2FVWndrRzBIOXd4b1pqSU1PZ2tJSDZzTVZZR3ZnekVTMElJQUZrM0puM0lxVEJWczM2MjFjOVdpeTRjaFJvOTJ4YzhKUHNpVUl4TTQwd2RMUDlhbWNLRVdxY3NpMzE1QU1WS2hvcVdHNmNCUnhSc2lNRjk0b1VkNDNvQkIxTjZubHRCUS92SG5ObVhLSjhCQVo2RS9RbUEvSk5TMm54d0NTQTE4ZHRTMmRHeCtyTVRaZUw3eFNDTVM4SDU4Ujh3bG5GWlFJcXp3Uk0vc2NCNENCWEowbk9XelZYOTV4UUE5T0dLUElrejAwaWNmeElXdGpKaVVzVExIa3RUcFUyMi9ucStXaWUyODB4YzVwUHJlcUpxK2hZRnQvVDVFTytLNE9VUWZvVzV5cHVGSHg3ellVYkM1S1hzTmxWMkt2Z282R3gwMEFxSFVibkNNQUFHdjFOWERIT0dza1Z1eTFObEF5UWRlQkFzUUlTdHZRcEFTRTVONElnMEhSdTB0RDE1VHk2Zm9zZllCckZVbEd4TlA5Zy9Vc1Q1Rkh6ZEFUVEtldXd4RG55VnJacWE0R2hRZDNsQ0lTOERRWm4vdmx4b3hKd29XQU02aXZod1NLQU5tM2FpalRYQzVoUUFpb2N4VEFsalozTVBJQnF3L3d6R2hPYzNDQi9RRjVIZTkrQlM5eG4zVGJxbnp1bGQ4WHJROHB5ZXRlTHVLeDVPTHordWwvOXRDSzhmQWVxMjlWcnBYYjFNY2tVakx3WmZXV1dLYkJ0VFRtWCtxUlNoT3pScE9aSXhQb1BlMU1pOHF0L2xlazJ2SFhwUnI2citwSTR0YlRsNFkwME03aGprMXFzb1p4MGt1TWNWUWhGTktWUkxKZ2hEbmg2elg4TURNZnNKaUhHNkJTbFpEcDIzbWtaWXBXcGd3elphaXo3SWRzRUhiWHBlQXdBVlNpVjZDSkRYY1h2MVYrZUJ5M2hBSGQrVkw3THI1RlI1Vm9tK3BSMXNjWnFnMmV6VFBBSUFwcFdCS1lOYUkrL1F2dFpEckU1RTlwcFU1Z2RJSDlNRS9xcG5WcnJmOVpZbHZSQnkwcDNSN2QzOGZJWDZLU056QmtZZUUzMGRRMTlqcWp6SVRyNGhGc3IrbEx6N0tYVXN1aTE5TDZwN1VUOWg5YS8xNHhVZmZHVkxyMDNYdStzSkJQeVZrVkZoMVloQWdQUndKclI5Q1NPY0N2ODBubVNaa25zQ1ZobGhkMU9jVXVQa1VMWXNHOU9zcVBZSjV3ZDF3QkJ4UzBTMGIrekp3dG1UdlBOREZPekZYZmFFTDBHRjg1aFJnMHkrM1A2VDg2Q1F4MG5qV2tUTUt0VWdReU54TkMzUHF0VjQ0bkYyMGh2SmRFQzFUWUNmdW12b1J3V1JSYUlEYzdYSUNNb0RIRGUwaC8vU3A1YTZiL3ljbGU3VDlidCtlSk5veHdFOGw4OVkxTTZ0VXZwRHIwZm8zbkp1cVh2NjNIcjNub2RYdXgvOHlQWHVlYjIxY3MzYmt4amVqZ00yVUdYMnBJSnRGVUlNMHhLV2pSSW9PU2tuem9nNnBSaWU5VG5BS1R3dDZsQk1iWVZid0ZQMEYzZGU2MU94NVVqWXVkUndQTkJvQ0k4RjgyQUhnQUR4NWRoalRESU9HRU80bW5zK1hCYjRHUUdWK2FRQWw4TkRHN01jTTNTcGc1VGFtV2VheHc1Z01QRXA2UDlFZnZLRVRrR2E1MFdBaXR5NlpsZjQvaU9mdnR6OStmZXRlTVhuYTFYNUJRL1lUa3RDLzdBaE5HTEE4YU1rSC9pTXM5MzMvTUwxN3BkZTMrcFdOVExaQmRTRE9xb1VnNzNrakI3ajhXejQxOEVoQ3lXUElFQWhlQUtLYzZ2SHRJRllnMnhiNmNUaGJBVy9GSTFrVWs3c0J1dVdIUmhrZXdhM3RLSG1xc3RLVGhEUXY0K2srZWFmY0V3QTAzU2lIYitXdXdRQjQ0V0xSY1pOenV4VWZ5UW5GWjFaUzBQQjh3a0E3WWZ2eGNDTXdrTjFEbGZLVHFUckRFdW1PMGtqOTZaVy92L3dyY3ZkTi8zcWxVNjc5MDR2VjhtaGREamhkNUdMTFNmdXVhakgwLzZqVHp2VC9lMS9zOU85b0pmYTgxWFJuUFI5THVOWStjdHV3Sk9EeXFUZVFWRXVad0tsMHdGME55NkdaQ3ZjK3pIN0dYcldPNEVHZXNWS1RsUFd1OUFDTnJhYW1kVUlDTzIzQXZHVlYzV3h0MEVOR0FsZTZjbDE0RVlIaFZMSDl3QUUrMUtqdEVTZG1TVzFOWEE4QTNvT2FaWUJBSk9jN1BDbUV5RGtVVmlPbEZtd2hKSjdpMGR0bGZuSTdxMjZ6di96djJxNVd4ZVJHM25tUFpMMHU4dU12Z1NDKy9YbXlpOTkrOW51YjMvd2t0NU92S3V2VTdEU1JTRGcvbkFFQW9BYzlBelBzbTU2cE9wVWpRK2dGazJmYnVlUVZFcEQ1TlNLaDJDWldnL2tnWG8xRVdzdzhXbXMybTNRUW9JSDBBeVdPNzRFb0MybzROa1ZlcDZCVUNJSTVQWWZPZ0VCSVNaWEpjMTY0cWRxS28zcG1IRnpWZjlaQm9EYWlGZm5VaUlZWU9DeWtNY3hrdW9rY3JiTTVEaVBuSS81L3ZBN1Y3b25kWmQvUTRqanlKZVl1NTdRbStNZCtsbnlkejI4MXYzVUoyN3FsMjAwK2ZVQk5rR0FtMVFFZ0FnRUZFb1F3QXNpVU5jSnB5UmdaRU5MMGlpUEtxVmlyVDlpVW5FL2FUOW1mNjJETUtGeDFUdlpVcVFJcGxIR1ZrcUd3UWZnMVQrNHhCSVZxTU5FcmdzUUNKVTlzV2xEc044R1ZYd0duLzFLSGZIR1Y4UmpoeEM4VkpwTjhrZVN0Ri9FQzV4TG1rc0FzQ1ZZVkt6QzBUZzNqVDJLcGRVeEJmRDJUUUpaL1o4K08rbCt4OVBDQ0Y2RGNBOG5kZ0VFenM5OWZGMEI0SVoyQVhxK1FUYnJXeFVPQWt6K1BaOFl0Sm9TeFpuOTNmRXd2dm9ZZjNtWnVaVmp4RVRubE5SRGljbThVQTVtU01aRDVrVlFHdEhVc3Y2ZW1hRjNhMThFQWdVRTZrbUVjOVZObXpHM3ZRZUEyS0RwTndCRXc3L2sramVlU1U5VHVEWEhLano1Z1Z6S0ZlckVFOWJaOVdyZjNZUlNjMGh6Q1FBWWhqMXBvTzA2cG9IWmdjakFhVVI0T21sYlBmMXJIbG5TeDM2VFRyLys5Q21STU9QTjUxZTZCL1VXMjVldTd2aVZVUkVFWWxCNjFXUHlpOCtEcHNBeEdYREJ5QkgyT1JNRzJ2N2svaG5YcVd5cUhQL0NIQ0NnOGg0VGtIeEw3azlWVUQveHcxNElpVXR0bkNNRG9PUWVIK2l0SXhQamhTSStLNXVGbVBqQzhkUW5lSTh0WUNvMWRTbk9KS21Ob25ib05wTkc5Z3VkU3dDZzJYYnllN0R1MStWUUdBLzYwaUh1U0FtT1FMRFh2VWZ2OCtQbXpkeU1PcFRHeDJmQ3JqTXk1dEd6eTkxemw3YTh3dkVsTWU2Vk04aVpDdjdDQ2lPSHlZK1R5K3dPSDBjWjhpQVYvdzF3bzBKbE1WQkxNNThMMXJWdEU3c2EzWUl1aG9MUGN1d0N5bTVBL0ZtbnZRUm94SGpoZ0FlWDVXU0g3cDJCQ05CeWQ4QXJ4MGlTN253V0p6ZUJXVFFWemMyaW1YMHk1ekpYNnAxWW1zZElaVGozdU83RVB6SDUrMTBBMyt0K1NoK2hrYnlGTTNSdm4vQVBGajJvTnhWekNiQ3M1ZDgvSkNrbjhtVlJ2bVB0RlV5d0I4NDRDR0IrRXhRb2txYjVmZCtZVXoxd0xlOCtIa3ViemFtMjIraWZBYzYwb2x6eWtWZTQxTUVuakpNTUFza0EzcmJvVk9LbEw2L0FNWGI0NGdvdkFzRzMrSjlkMTh5VDJrcjkzUmFLenlITkpRQlVPK1JJK3NaSFJSNGVZRWpTRis1ZjVYUk95TnZ6aXgwZTRBTi9NWHlxQkFCWjQzUmU3Ni9lMWlqZVljTFhQeDVqSlJCb2hkUmc4VUNXN1pIM0s2RUY0Q1NuR0dXRGdWWW9aT2JxVHcwbHdKVFNNTzdqdVRQRUFmcTV3OHRPUUhCYzY3TWVpei9MSlUvYk1tL3ZBVER4d1hNd3FabGp2dGNpMkE4Q1laaG1mUVlGbXZYRFFLcVE5ZTdNdm9OckQ0SVNhaHpNZXFLVXVRUUFqTUdabVFDSnlqajFPTWtkcUlyeGhSekprU3c2a01kOFA1VlMrb2NuQW5mM0JZQ1kvSHg3a1FuQnd6QU0zREpOWWtlQU0xSklPdVlXZnFkZnBnNjlJQlFKRVlSTDRZUXoyYUMybU5wT3JlN29uV2owQVM0NDZsQTJPZmxLUUdDY01mWTRYRis1NnltcnM2eklZa0hoSGtBK2xKTTMvK0FyMWFnMWsrUkZpMFpLc2kxWm1HRStsd0JnQitMRTlLSnlERHlPa1hRMjlSQkY1OUpwZkhQUDEvN2VFZ2p4S1pTd0U5dFkvZGtGOEc2MTlvOGZsTWlQd096VE12RERRNkloZ0dSblp5RlFmUStNOGFJWFZHVDc2V0FzTWtXZFFON0xMSkF5dDZFVE52cjUvV0xINEFHbzByYkhCcWR5Wnc5V3hnaUgwVVdlc2dnSTBIWGtkVC9yQnpzRGdnQndmdzlBaFJtbjJrOVdUbzJSenlITkpRRGs1VXdHQUl6RjBlN0xZeGlKYjl5cHlpMFRiekh3S1RmeWdJL2JSaVBtN29NeWhBQ1Fsd0RldGtvcjRwM3ZDWGdISUZ1THNaa3o2bk5Ia0k0WitNaXo0bGJtTmF0OTQ5Z0VUOXEzZy80cU04TDZsd2I5eUMrVFd5bFhjL0tLeDk2Yy9FVVk0d09RSXplSTZZTnFmakVFM3BUTG1HVlZobFJVRVRURFJGc29PZWMwbHdDUXYzcUtiV0VqQXpNbTdHSHRUZC9RU1JsUUhLMlJDRkVPVEo3RHlreStvOVJqUU13em9SdjI4aDREdjh1QXhqVlN1RkhsU3lEdFUvM0RHSW9HSHF3K3c2U2t5dm1jZkNDQ0oyRVArQ3lVdlBlRm9QZzNwYlc3NXhsVlBvRml0b051cE5UZmVIQUNrc2QwVU1MbnhJMWNZNnNnMkRWNE1qZEtVNThiaWlGT2RBRU9xaUw0L2ZYS29lVWk0KzA1alJrN2JOL29remdSdUdnMGo1T1FlUWdaY3drQTZPRU9UZU9VcDNNUG9hTlpzbXJ5eDUxYUJCZU1janAyMWltYk8ybzd4OVpORFRMUjJ4MEFocUlIT3dCR1B3OEU4WlliVHc0YUVuOU1BR0FkeFVrVkIrb1dpZlp1bThSekNLN2JpbWtaUEdmSHZWajBiM1hIeFBxSkFMcXFvbGRQRVV3clFzSGhGcnNHT2JDNmJ1UlV4WWQ1clE5LzNnTUFWNnI0WVNLeFZjMlFjZElKbVRZRndkbndTVGN5UmQ1Y0FrRGFnNEdaeW5qTjRxRnlkNTQ0NlNqTDFNbWRrWEl6UDVTMGtKR3NSNnlhMVE2VnUzTUxwL1U5VksxZ1FpLzh4dDFzRGh1dTZGbi91QWNnUENRU0U4T1R4YU9wWGdBRXNlQ2lNT1VNZlpRcXhrQXQxZlpHN0hkVXhJNXFTVVNET3VscVVCdlpsV09DZW5HNUVQWmJsb2lJOUtHVHhXY0xLbVMvMUU4RWhHQmg4ajJBd3B3TGM2TlpsUVB1cEZKZW50ZzhDVTFkVDByK1FYTG1FZ0NpQjBJRmp6RlpkeWZQQVNBcEEwaktvemR4bXN2UmxNdDA4cEhUU1hyL0dBcU1tOGRXdHY4OFQrR0VUQnNiOXNiekFCcit3bnZlUUFNdWVWUXE1K3FnREE0SHJPUkZpY2hLSWNTNjZTcXpKMVhVa1lDUmY5STBUM2dMd3BDUW1QYjB1Um92cTMvYTNlZWlhZlppWGI3eUc4VmRGNUpFNXNSbmkyL1hDbWxZT1RzQWRnZndsK1pEaVJtZDBkdTZJUi9sNXBUbUVnQndMdU91VHRZN05NNHJvV1RFUFlBaWJJNU91MFAxajE1ZHR2R2VBOThFWkpUSW9aakx3U0JsbFpySUdRelV2RHVlZVF5bW5PeGl5RlJIbXhBSWFsSVVDM0pFZzYxSDlWQlQvV2pnUU1RQmVzcEFUMEowTnF5Y2lhK1dQT0dGbi9CdEd2eGdaMlJPQUloVTR4NTFRQlVDTURUOG1OdC9aSUpqM0JJUTVwSlNIK1VGbkV1emN3a0E5U1lnbHJYSEVVMTBJQ2wxTW5wWGVWTTY2aUJISmo1emkxUmhVRDZpYmdleGU4eENsSDZvbUcxTVVmY2dFYTdqbTRCVXhnbkNNTTRacER3SE1IZ1lpSFk4Q1RSQnNqSFY4RVNKb1krQVhwRW8xYlAzQTY0WEd2WWlnSFJJTmxCUTQxd3JIeEhvWlVmRktxMEIwZ2JybjVPYjFsVTU3d3Rrc0t1VHYrb1htbkllQkFEcUNzZDJ2d1pRVkZDWkp2SmpRZXF4Mk1DYkIyd3pTVFJBZzVuY3oxbVlYVDZYQUpBVHQ3WFBUMWdkd3k1M1JPbVVjYWNlUTl6dHE2QTBqYzQ1alp0bHNISjRrRElKeXdEaEJpQitZRDMwbWdqc3dSUkFWWjI2Z3hHbVlrUUZvVTJFb1VrS0JmdlFWWnI0UkJ6UWd6WkFGV2x0cld5Z3pPVXNEdk1xUklBcVY3dG9VRG83QkpIYmNPVTBFQ1RiUW1CSW5BVnJsdHVXRUdlMU03QkFUNWc2K0ppY0JVYi9FV2pKWVp4aEl1ZzRLVWVmTE02d1NZdWVTd0RBR2pvZ0Q4bzRtSDQ3U21yNVBSbW9MRGsrQ3BFaUtkRlJpbk5MU3p6ektBZEExc2x5OGxoWUxSd2VRQ1VHdWhQQ0MyeDhRU2U1RkNzclFOVlhBTmYvN0FKcUtrSThXSVQzajFjSWx6Y0FNNi84TkI3L1BjcXpvclNUamRWV2d5MVlLckd2MjBJbTM0YW41UWRHLzl1bU1wRlRKeWEyRkVyYlBORnBWazVvY2JEejhhRnhGUGlvVkJtc21YQWx2dzRNam0wK094L2VFa3gvc2VxdlVKKy9wbElEcHBpVHkvR0hHckMvYVdpbWpmVnF6eVVBMko0MGpyWUZZeS9IVVJOMXZCb3FwM09RN1pUeUs2S2hKYzhkNVkzZ0ErVWN4NklEaFEwSXZnUW9BWURQL2YwREpySStYMmpCVFN0V0xnOThQT3VSMityRGdJNDBXSDN4MjZBbENvRUVUNTJnRjY2U3dYV2NsRElQckdzbFExT3Y5REFtVGpZeEtUM2hnV3lqaWdRR3RDU0hYT0ZvVGU5UUNSc282dkRpbzl6VXpFWENoL3lNTlRjTkNRTGNtVWNlZkNTQk0wdkZsSm0yTVUzNXVRUUFKcXdqR3hvVWJ4NW5CMEJWTGgyWUIra3d5ME40UllnNFNxWEpiRHFxSkkrSVpWNVpCSjJjNVdSQjZWdUlyMno1dFZGa2xDRVo5Z29Cem1vS1NIMk1NMjhWWWFDbGc2RE1nUFN1UjdudnFSUTh0Rmp0eURuNnlkQzNGTzJMZFdwQ1JwdmE1d0JNSzUzWDh0WCtiQ3ZlQnNaZXB3cE1MY3BYYWdsalNrclFtSUt1T0pXQlFSdG5tSlA2ekFnRlNlVytaRUtzK0hMOFpIL2dKOTgvRUkzZzZPMi9jbDVhazU5V1VZOWpWc2xCR1FjWEozTnZZaDVwTGdIQWR1bUV3L000emh1QkxFZGVvWU5JZzBGWWNFR0pjL0tQY1cyNWhhZUlxT1JiMFdBYUQ0NldIMXFXRXg3ejE0WkdnTWV3Y08yRFFMNVJaNWxBREhBVmRDSkl4YW9vQkJPZ3lNcTI3WHZxRlVUaWc2M25weDd0a2lPN3pST2ZlZFRkZjdac25jaDVUVHM1N2VaaWtIbmdDNzJLb2NYUXgrM29SRkR3elU1UkFoZk13Q2pvakx6QXhvRTBFTjhqc1AxRmtSM0p5NThCNTJmQi9MR2ZhSkF0UXdEVndXZHF3RVNkV0o1ajJnSlJZazVwTGdHQWtJdE5PZkN3cllVUGF5c2RrSjNBWUVlbUI3MkIvVkxjWnFrRFRCcmtwZUFzQ2NGbXhrQ05DY213UDBlWFBtbFFlM1NHamlaSmVROUM1ZGdCcnMzN3VqMEVIVVoyQUZ3R1VDY090djlNaTlpeXhnMHhsYlNVN0pwRHNsVjVXU2QrYldoTis5bDF2VFJoUTk4czJpRFhzUzU0WFhpK2JRZ2RQZzY5ZnRBSGRRa0FjUVNNUHNqTkhQWDJKUlJVcXJvS0FDWVFNUEU1SE5DVTh5bzN2dVRFK3h5M3RMM2pGNVA0SlNkK2xvMDNQTjhRekc4OGtOOFVqdmNpYk9JSER5QUZCam1kd01BcXp6c1NVaS9yV1BXVW4xQ0FnMVJnOUdDYlQ1RjZmcVRhL3BQTjREeklvRVRLNmxrKzBWeHRvV01kUTdKeEhta3VBUUJIdXdPd3FCanBqanFHaGE0bkdWd0sxQTVObUhaR01yTTh6bUUwcmhDU1BoUlFzU09wcWlzU2d5elRWRTU0eE1EMkRucHVMZDIyY0tZSjMrYklneGNjUjZiNEdGQ0RSTTdrajhua080TzZ3T1U5Z1d2TFM5MVp2UWp4NHZwUzk0QmVJWGEvWGlKeW4xNk5mRUc0czNyRE1KT2RpZTdKTGNGaTk0UmhBakJ4UlBLZzk0dEdKTnAwK0FxZDYyaFBDdEU4MFlweTZFcWltTEFSNVpScVF1UGEybVYxSHYzSHVNQXV4anB3SHByakFZc0FYd1NKbVB3RWd1djZTYlhMT2k1dDduVnY2R2VWWHRkeFJmQjEwUWdtN0IzNFpTVUNGM1l3a1hlMWxOTzJrNVZRUVhUYXhpNUkzbWNJNSs5WkZGMmh3YWQvODZRSTBDZWFpbURyS0JpOTVwSG1FZ0N3RGNQcW9US1RBYWNlSldVbnNIM2ozK3VmOHRKNyswUkJ5dFRDaVR2cGZOeEcydGZpZ2RPT3BOOUtqK1RaMGVDK3FZRTgwZHMvK0xHUUMvclpza2YwcXJESEw2eDJqNTliNlI0NnUrTEpmMFl2RDFsWHIvSlNWRloxOGcyVk9XS1ZaNldQZzhuaGlhL2M3ZWlVN1kxMVNoc3loOTdDWS81cDVXbXlVd2E1eDRkeVB2RWdHTlNKcnpJLzJMcXBKM1UydDNVb0tyQUxBTWZCenVDNnJpbXY4RnVMK28zRmw2L3ZkUy9wZU8zR1huZE51d2UrRUxRcW52WlNoQjBFN1pGNCs0OWNvQ1QvQ3NmT2piR0ZOOWhOb1RkbmN2alNqbEpkbUR0UExDWjE5WmZnd1NYQm5Zcy9VTUo4QW9BNktTYy9tbFJERDFSclB3Rm5TMHgwUzNxZXZJV2JhaWJwbEt0dnNzR1NIWjk1aSt0RlVMa3ZUWVBhK2dNNm5TbEVyTldDSkljT1J2L0FSMDQ1QnQ2ZzlxQUFQNG1QK1o0NnY5eTk5WUhWN3FtTGE5MGplbG5vUmUzZnoycFdNK25QNjAyb0YzU2MxNCtnS2hZNENMRGFzd3BpQmdmdGNiQ3Frbk1mWmxPSGFUcGxIemtIRDY3UURSU2NNcWNEN1UrR29uemFnQStjbEZjUXVKUXpYMUxnZ281dmVNbVRmdDZ4VHJ5c1oxc0lCR1h5WDVNeDF6WW4yZ1VzNjlKQkFVSDRxekx1VlFXQkY2OHBGMDd4UVR1TzNXNWJrV1ZYQVpXeDRZYmtXOThES0FwNFlTazk1WnVxOW9ONGl0YlZEbFVucFpnb0hmT01vNVU4TndvY21ObWU1eElBTUlHSTNvK21LR2RuSHNYRWREYU9ZaUE3SWZzQVlhMHZEZXVVT1hWYjJHVWpnSTZmMEsyS1VjSHJpUkFNSENiTklDL05vRDUxeG1iZ3Q4Zk82dWZDM25WT3EvMUtkMTdMKzBVdDV3K2VXKzRlMEN1UTd0ZlBINjFyaTg5S1RuMG1OY2QxY2lHOHhkWnNRUTRycXlkMTVsUWdrZXNnYy91Smh6WktZLzFHNUFPTFk1SGpzaXVtY09XZVpDVUg5bEVDbWk5VGhGdFdvT0M0b0tDbkgzSzI3dGhKVUdEeVg5Rng2ZVpFdXdBRmg2MnV1NndBY1hWcnFmdkk2OHZkczY5dkM4ZHVha2t5WWc4UU9uR08xWjZjSUo3bHVNR0tEOVY0aytDSXVnM3lpQ0NCK282RkhMRk4yT2NTQU9pVXVwb1UrQmk2eHVCVVJiWkhUUDdCUkp2U0ExTlF0MnoycVB5M0ZIWUN4QndUOStsNi9yMVBiSFJ2MW0rY1A2d2djRWI3ZW1oTWRGWncvYkN3WG9zdW4ranc5bGxsbG5pdjBESUtQM25JNnVSY1pQSThBQkl2OUtoZ3pGeE85ajhuQTVGbEVaTkloZVRWTzRPQzcwOG9FUGhlaG9MRWlrYTFOa2pkZldmMVduWFY0UkxoOGczdEFoUVZYNzh4Nlg3ZnV6YTYzL2lXdGU0bm50L3FmdXpqVzNyak1yKzhGSmRXUkJybXR5ZWsvWUpuV1AxeFMxNEdvRVY0TEdOQjZpWENzVklkeXhJRVBLODBsd0F3K0M1QXNleW85d0RDM1ZHWnp2QktTaEZuY1lnaFFkQ2s5R1BOQytDSlVSaVNsc3hScmxnSmFWdTIyT1lFMzVET0t0SFVqaURWc0FDMnRWb1l3VmszcTZEci9ick8vNXdIVnowSWI4ajR5emMxNGJtMlZRVHc1OXZDTVRRWnRIbDRjcUFkZ2xJWURZeFRhYkQ2WkV3ZmxWTy9FZnBZeFZ1cGhjQzB3WERUUXVxQXpudjRRRFIyTzNRVkJ3SEJRVUdqTzNjSjU4OHBJT2pnbnNIckNnUVA2ZGVZMzNMZmV2ZWIzN3JlL2ZRTFc5MFBmMlJUdXdKK2xsMEJSTUdFTWVhSmlKSldsQk45RzNjSElKcWtCazBXTlZQcWwrVkQ1UkpTSno0Q1VHQU9hUzRCQUZ0c0U1MmtBMFB0dkdNWWFGbFpIM2twQXlDUGdtdUxPY0FQeWxOTUNDeWRYSkV0VUZ1c3JmUURRUFV5WUpRQkFyYzdGaVlWUEVDTkRIVUwycko2T1VVMGRZVmtkWC94bXI0TnFLVnNWOWV2RTIycCtJaHVXZnYrRlMxNzVId001Z25UQ0tHWnRMZEtCRGxPVTNDSmF2VWJWK3VkdjQ4U2lOU2xGWFlBSytoc0s2c041QXRaOFVYR3dONUNwS2xkK1l2QXNLM3RFVHNrYmlCTU5OS1hDQWc2TGlnUVhOUnhYY1NYTG5lNmxGcnRmdlhqcTkxUGZHS3IrNmNmMnV3K2Zqa3VEZGhST0RISjFZbmxZazU2UkdPMGxaY0kzakdvREdXc3AyWGM1dVF4QWsvNjZqYjhKMFdlU3dCZ0VIb2doc2NNYzFsd0hFZWxmOWhCMUNnTmNpVE1mRHA1d3AyVXQ5dzdsanhGSWdva2JhVE1GTzdEb2hqazI3cXI5Y1pMMStJdXZwYW9GUzFyeXhxZE1lazFCR1ZrM0szT29kbW9jdGlHcGxWSmMyNHI0d0RHTVpyT3VFM0NYdmZybUM5bGlWNmxGQngxTWdIbTlsMExlWXcxQ2R6UnJtbExsd0dibXRUWENRYjZaZEFWSFU4ODFIVVAzNmNBKzdvdUc5Wlh1L2MrdXRMOTBFZTBJL2p3cHA4LzRCNEJFUndmdTUxQld5cTRyTjJZZFFsaXc1SnEzVGEzem1ramVjSzNyWGxuREhNSkFMbHF0emExOEZGTXdMblRvbVhGTmNKYVA3bzluY1k1N0lscnFob2M0aWtaNHo0SHlvNE9yTTRGNFV3RHhqd01IdjB4TmNkMXJITUtHVFhlb3FtNU91Rm53cGRqY0NOUkVkWFBBakF3TFQrYUQ1bHQ3U0k0bEt3NkdydHZleEM4eVRwU3FTa2V4REdsM2FaVytxK2lXb2NrVWppa3VBV0xHOHJFdnA0V2xjWiszRmVXQ0g0NGhzZDZkZk0vZ29FQ3dxWWl4SVJBb0k4YUhuOVlsMW9YOVhIcEs1UHVkNit0ZGU5NVpLWDdlejkzbzN2MnRWMC9RSlZCeGpzOE5SQmVSNVA0Q0RHMFZMK0kwZnFsUFlmTnMxTG1oNjEzaDN4ekNRQjR4UGNCRkFseU4wQW5EYnYyMXBZTWVGV1hvR0s1T0F6NVdTWXZLZHVpbUdOOW5MYzBWN01nUXdlZWtpWHp5aWdFZXVaQ1p4aWNBTnIxSUZJT2ZUeElxNHdSZ0F4V0IxWHpoUGNUY01Vd0xnV2dJTGM5d2hralFWbWtTazJEUXNWUy93Qkt6ek1WT2thdFVSWHNUZjhGTUdTd0QybTdNRlgrd2pZdWo5VmtWKyt3ZFFJWUFBQkFBRWxFUVZUN0ErTGYxbVhDbGo0ZFlHY3cwU2NKSzNxMjRzbkhkWS9nQ3BjS1M5MS84cmxudTMvNDcyNTIvL0tYTitQQkluVUVmempiZllnc0ZYbVJTS0dvWCtrUHRPalQwSUllUDRhbTNTc2I4NXgwZVM0QmdHc3Bic1p3ZDVaalRlR1lEMTZHYmpxOGFjUmZUeWdOVStZQWQ3NTV1TVdPTDk0bXl3UEpSdXMwemxzYThMNUVRelhkUW1NUEF0WjZKUVlCbVFZQ2Y3RURLRzBMMzBwSjZTME9FWU1rZWZ3d2lEK3JsclQ2cUsrdmc5UVd0cXVDanhwZEJoTDJGN0xoL1JSaGVtSVBUV1U4VVNUNnU3MCtBZ3ljWmJvWkJEbUNGbktaalgxOUNhTFFaNDFGUGQ3UFNVaWVIeWpTc3dJM3RDdFlVaEE0cHdjUG5ucENZL1dscnZ2cWQ2MTNENTlaNnY3eHMvdzJJMDlkU3JUN05YSVZhb0NtdjBYT3BxT2hRNTZSdVZvdVM4ajN1SDZaUTVwTEFOaVFRL2ZPNithTEl1MTFkY3hOZWZIR2RueVVkU3diMVdrZUkrUTZIQUFrbHlBelRpS0xLYkFseTJMTnN3NzBNbTRTTmRQOE1PMmxQdjVsSUgxVXRhZFhYL2twTmhtdDRhZ1Jxd0NnQUtqeDR3T0ZnWSthMGpkRHAxVHNVY1hkQVQrR05NdkRGQlZzWDRQMzUvTWxhTmgwR0JxNmxabmlFMWc0OG9FcG5oL1kwdXJQemNObEJZSTNhVGZ3MGllNzdrdWVXZTBlT0xmYS9jQXZoMjhqQ0FSc3YwdUdtMVFiTkZPYnFvQ1F0MGtFOFZVV1NPMUVOalJYZUFweUhta3VBWUN0MWk1YkxSMmJjdTZXamsxZGpCM0JQL1pGQ2ZxRzNiODZaUUJnSW5oeUZLKzVjMzBxWXdGZWFGUHlVc1YwNUkzVDdmUTAzWElGK1Q5MkF1anJ4VW1uL0tMSlFVWm5zK08yc3V3ZFFOeHBrbnJpWnZWSFdSMjA0NEhJOGlOYWZyVTEycElFMGNzSklGSUtOcTJuZ2k2b3dqZ3N4ZkFlNHdycnRBeFdsQnVrVzlmSG5ud0V0MVpyUk5SeElKeDNXQmFuVXluYkwxU3NkY1JWbWl4WnRiSEVEVGZEWTlNRTA1dmNIOUNZbmVqZXdFTVBoSnpQVjBWMkN0Ly83STQvS3ZRTldQZ2h5ejc3WHdYa0c3YkU0YWx0YTBpSnk3enNOK1lISC9IT0k4MGxBRnpWOW1wYnEvT2xTenIwc2N2cmwzZTBBeURLSHkzMS9FeDJuTzJUSCs5YzFZVFkyVkhZOWlZczVOSVpISmx5Y285ejAwTlVzcFo4S3JMeVdKL1M2WWxrb09XejVJUTRlTkFob01KbG5oZzhoWmpWRDh6OVRUcXZDaUVOUnV6bmozc0Uxa1YwMnFuUElzQmEwNkJRSjBRbEZ5QzVNcGY0bWdKc0VKVnlHeUFkUG9YTmVpZmVoWDVoeUphY2EvYVlyQk1YVlU2ZVVlSlBJVUpYV0F5ZTlFWjRwRVFWbjZ1RU9rQ3lMVzc2OC9neGp4UHo3VVFlcnJydmduS1ZmNzEyQk0vcm1lSi85dXhOM1JqTVQySHdkMytra3FqVTZ4SUtaaHRXWVhUaUc0MnIyZ0tzYWZ1L3JvVnk3NDBSdzR5S2N3a0FmanBOMXJjT3NJT09ZUlQxR0UvTUJSWkIzd2xIVGl1OEZPR3JZdys0OEkxejBKbUMzeHlKR29zMlBycFVZTU5LaDFQc2cwQzBYOGFnQ0QxN3JWOWJPUmhneTgvWFozbnpyN2YvS3BQN0ZWYkN4d3R4TlFoUkhzRmtkZlExQ3JaTjdFTUhZaCs2clROcmVOUjQrRWhuQTRXb3pNWHFWSlVoQlZJK0taUGQxWFJTR1ZJdk91N0pWRk1rcDZjRkkveDhjWXBWZUVzUERmRTQ5WDM2aEdCTDVkLzF6blU5T2JqZC9lekxPdzRDeUtHK04xL0tDVk51QWJraWdFZFZlSkI3dXdRUEFYMWVhUzRCQUVlMEJ4M0c1RDJPblV4OEJXWFhyMDRxM3FXTk5sRTBxdUNUbmpuRVFtcUFBUmppQ2hQNjlqcHpVeTVLMmZuSXJaMk5iQm5LY0NCbE8zMzlnaXdJNklESko5QXArWGt0T08vL2h5T0dlT1Jjais3cDdtQzhFekNEZ0dxSlArc1dVVk96Y1h0VG1TcFMzRWVyVUd0T0JZci9wdElLMHRPemJiUFVjYkNEcHhnWjIrZTRVV3BVMlIxQVR6OE1RMEhCeWsvN1BGWHFjRW5BUTBXYnVuZUY2eStXbmNCWGZ2YVo3cS8rNkJWL2wyQlpXd1lrdFNyU29sL1ZwcHdidC81a3dMaGkxTFJNQXBnWHlNcnhOSTN0cEhGekNRQk1XaVlIUjNvSzhDZ3BxNUxuRzFUcEZFZC80VEp2NWJzTm4wcjdOTmlVWFN4bFlDY3JtWVZodnA5VmsxSXNjVzBYVTUzcWJSQ2dSeE1YOG5YT0VRT3ROQUhxb0VSOWRsRTdNaEorRHhEQkVSRFVMbmdoOFlGWGZ0c2dpVVhvVUhhMkdIcjFiU1lYZE9DZXIrYzVZY2g2VHBPWnVvZ21vNkxFV1VkUnl6aE9LanZEZUpMTHdvekxoWmpTUXBDbHFJcisybUNFakNENTY5UnMvLzFSb2E0Tnp1cjdCVS91TG5WZitta2IzWGQvOEhvSnZCSU9QMHUzYktJdUY3aStOSk1zTk9PZVJyWUJLMGViR0QySk4yMU9VV0F1QVlEUE44dmlWUU1CRDFUZ21LT2tjRkNwRmJNdXFqT1Fpa2NITWxYSWhjQjR5dFJvOGxJc2hCQlh6MmJPVWhUYVpta1NMTTNueXptTlV6a0hVSEEweWpVZ2trc1IwTExhc3BFRjc1dUFqallTVHFORVZjcksvVEVndVNwNzNLY1ErSlFvRnJDVXdCNlVzbkxtQi9HQjc2WGVpdXR3dEFQYWs4TXJKU2UxTU1iUmZDRTJKS0ZFS0IyRlQxb3RtZXlScU5pWGFpd3FIZGY2a1krWWVSeDdTemNIbDNXWG5zZUt2L0RwdGU3LytkaG05K0hYZC9TeGRwbXRYcEg0aUR1N2huQ2pIWUtFaGI2aExCcWtGcUZMTEdwUU9aQVduRW1kWFQ2WEFJQzFPTGc2dWN6SzR4ckpkZzhuMDBrT0xGUDhnNE45Y0FKV1RudXBRK2JJS0N6bUd4WUNOZUFvekttN3QzakkxUkhYNEVrcHRVVHdtRktPMmRZQjNoUk43c28xMjZjQzEvdDhMTVNEUDdCeVprZ1oxclhVUkVwNDhpUGZCakZCUkIwMDBqWjRTSmdHU21yQVJKMXdIaTFVbFN1UXpRaFJsQmpZSnB6RGdjaXVranhaMytXQ1RGSDJUdmdTdGdFMTZ5RXQvcjJTTTFHNEI2RC9ibDFCZ1BzRFgvS085ZTViZi9LcW45SGdVaXdscFV3K3BzMVdJa1NvcEk2cVRWQ2xKSEFjbnZ3Q2dqK3BzOHZuRWdCd01CTXVEeHpGT0ozbWlGdWJHbDNGNUVkV3JRODZqMFpBb3BLUHNsTUZvbHFpYTNTb2lGc0RqWmpCSUhKN0VMUGhSb3pSQjlCZ2EyWFdha0p5czVQSFdQTW1JTG9hNXZxZklDRG1hSzVNZmtvcERBSndNRlN4RlVpK2lyZ1ZjQ1RtV3dscWFGTVVhNXNST2NKZFU2VkUwNmhaeHBNTGdhazNSR3VWd0VjeHBtWGZCTFJTU21SQnhTVlZQQ3VnMXdaMDI3cEQzeWtBOE5LU2R6KzIyajN6Z040dDhLcStQS1NaeEUzYVByRkk2VEpORTU2eG1ndEZ2WGN4Nm95Y0R6VHJJTkFMbWlrMGx3REFLbzBUT0p5VXQ5MXhGQXVaL1BTVjY2ZThLUUlndWMxQ002dE9XYVhxQXIzQkYvYWVzU0lDOEdvZVZZeklIUVQ0YkNPTmEyMkVWblVlRWJ3aEt2U3FYL0lyQjhlZDZMd0ptTXF4dm5BM2xKdUF0QjlIdE9TZGdPbzV0VUlUZDFKNXlqNkt2TmIrZ1lJSENLbHRsTlV6SFNsOGlBcjdzd095ai9JeUFLa0VrQ3BHNVI1dUtUaXhVSkR0VGxWd0tRTDVQZ0VQQyswb0NQQkVLNjllKzRLbjE3dGYrT1JWdldGWXZjRkE5OUtOVmdUbENGdmNvSTB2YkNFVFhUaG9CeWlTUzdTcFloV1J4Qm5tY3drQStZd3pSc2JFay9tREdYaDdDNm5iSm9JdDJ6SDNsd1VITmNVbUt1dFZmQkxFYmxwaDhQQkk1dHJRRUVIbnBCeFlQRDdJQ3o3R0NaS2lZeDBjVEF4ZTZyVEpza1EzTjAxRnRkQ3JNSUtHcjM4T29QQ0JKSElvTU1RUGc4WndpeW5DaXBpQ2k2RGpaRFIraUhSSXRsN1NxRUl4dTZjbnRJOFFrNm82cUpvWUFzTjJWYVpvMnFnaHk0MnBsMDNBSFAxQVkrSjNGU3JqUXhVRGRCQmdZbkw0Y2t3N0FHNjh2dWZSMWU1QlBTcDhTUzhtbmVqdWRINGFFWjBaN2Z1R0lBMDJUUVFsVUpDaTNTZzdBQmc1KzlOY0FnQ0JNWGNCTnBTeWJNTWZSMDNVb1dOY3YzZ3g1SXlraWVhT0ZUOXNGUzUxUUNhWVFDMmpWRllBVmtLNjZhVVpsNFZ3cmxPV0FkQ1B2R1NsSmtHdkNGSUdzU3dzaG5NWEFBbGFXeVpZZWdkQTFFTUl4bWNTenZjQXlQa1QyVHFNaFNUL3NYTUV6eVlOSmVQSmtvYUUzcTZHN2tsdjUwTldoYXd1QnlhWTdKRTcxRmRVTkNIT3RyOHREMm55YWVrazM4Z1R6S3ZYK0J4NlI3T1V5NEQ3ejB5NnozaDRwZnV4ai9LRklkWFFRSjlNK1NCL1Z4MnpMSjNjSHMwVkRUSlBoUkJQay9NS0FuTUpBQmhwL3dwSVB6T1dNZlk0S2VWUlArUUtFbUI4RVpod08xZXliWExxRXBSSTdwWUNSMVlLcHBtbGRoaUEyNDJLUFZGSTQ2bXF6bVlsWUJJekljbGRqNXhrbmdJVzJLUUNrN1dKY3Q0RDhBVEhnSG93MEtNOVpNUVE2eHNDS21KYmtiZUZiMVVIMnV5U2JKa3F2TWYyME5CZTQ0dmkrT0VnUGJPRnBQZWNSYklKT21rbTVyMEVoeFA1bkp3KzRQa0FQZzFnc3I1YnU0QWYrK1dibXZ6eU5VR0FxbTVmUlAzemNCSUE5d0U4c1UzSHlNQURJVk5rMCtIaGs1MTVwTGtFQUQ3RHp2RnFvNm9Eam1kaU9GaDE4VjlKT0s4dHUxam96blJxYyt0VDZvQjNmY3JpcXZKZE1qSk9Zb0xQY3BUbjVEYXVDRWs1THVya0lPRGF3WURzMnBoZ0JsQ1NNMkJRaG8xa1BWWHcwNVNLV0JwM2xwbDRCbDE4REtqQktWbDUzVW9qVmJZbHplYVVlbzZsTzFDTmtTbzdHSTd3NllJUmVsUlVTL3IzUkN3VmFqMDVJMjAxSGFYd3hVZ0NSZXNyZm5MRGhTZUNRbyt4UElvQ0NBSXU5OGh1ajQ3Z2FVRTE4dGI3VjdwemVqRXJQMnJpajdjdEgwMVVUeks0ODgrQ2h6Z1dwQ2tiQkdGRFgzUjJBREJtOXFlNUJBRDVvdzVrWU5KQkF5U28wOC9wd0t4UDJYSUFpdHlzbVNnY25yUnNPM1B3TVJSQ1AxaHowSXpFUVlyT05DUllqUEM0ZzhtcGlMeVNRNGdoVUhnSzNuekljT1hJS0pLeWF0SUNLeDd4K2tsQTZsRElyUXNNR2xuc05xanJvOGl0c3VDNTA0VE0yNlloMDdEVVZCNFEwSExvQXlNQ2JiQTloVTBTa0RMa3pNb3FYUGdXdnl1WnA2ZEhsZXh0R0dLdkJGL1N3TnFMN3RUU2V3aWpIZm5kOGt1Ylh1MFpYS0kvb0hzQWorZ3R6Ui9WTXdGK0ZvaEFRTCtJbCs1aVFoTW8rT0ZSZ2dIZFo3SENrNEJKTkF0OFVJQXcwd21mNWhNQXBEUkc0d3g3V3dBLzdwR0czODRtcW1XeTR3ckM4cEtRZWRKVWhsN3JKa3hla1VNWTdwYVdJc2s5WElyQ1pQQjVpS2lRWlFBNk1SRGlJUWhvY2hJVUtoNWg2RUFsSmVNTkZKbkNJMko4NEQ4UG5KS0hjU293K1RVUTQzTm82dUZYdEEwYW9sTWZ3M2txN1djUjlvUFRMWWtIVjdzdDVRQzVBM1E2S3N4b1JUSXA4K2s2OEswdm85WkFVRytpMFBaUEVSWmM3dUh3bkR0SFdDWTdSQW1MblpYS0NLYnp4Y05sQUxPYjd3MDhlV0c1Ky9Dck8vbzBJUHp2eHVDelJJdUlTd0JRSk1ueDRsUzA0bnNkaU01alRsY0FjM290dUN6TlR3S3czVzVKUjRDNFRVcW50R3oxVXdUazVGRkErQkxsUHFCYzJuTXVPSW9CdERCMSt4U1U3SXpvc09na2VIeGpLRVNVZ1NGTlVSWWNvSEo0Nk56QUl5OWhKQ2dsUDJEQ1JhYnBPcUd6TDZPa2dIVW9mR21raDI3NUtORGlTek5wcFpWSllabkRjOHQwVzRaYjFqNDVZaGlETDYwUnRwZGtFT2NJQ0pjVVlxQ1N6Ym5yRm94aG5ZYTRDSjFaS1NhOFNzaUdVU2Y2SjRLcjZpb2E4M05qRHJ6Q1AzR2hmQXdvZmVodVA2UGhTUjJoUmlnTGN5c0lrc3pBOVhwUVpxeHhlQ3dvbjNXYXp3NEFaM1BJR3ZkWFkveFJEY1JKS1l1T3lVbHBPVFJRVXJaRlo5QXdkVWpKa21YakVtbU9saXM2Q2JKWmRMSTRuVklQZ0I0V1E1bnNNV2lpb2xHRjVDYVFReVVsNjFGa1dNK0NOdzE2NFdIMTV6TEFDSXgybzhvRjUxM25ySnE1cUU2eHRtVXBjdVMyYVZ3SDJwaW41WjhuWFBZejBXVHhMNFdxc3hRMWJLY0hXNnlud0RFQkErdGl0UXY3V0s5akxCUnBLVlRJZWo5Rk9GOW1JVDhhY2gyQ2NySS9xbDl0OHZZZmx1eFVHbEFxOHozdUExaFdqek1kbnNLYi9Mbm9VSjVsbWtzQThBMHNHV2kvWUtpTzF1RERHSmlPcHJySFB3Q3B5SXBPREZSQnU2TVRYd05CSWJwNmtlRWhrdko2RVJWS1V1bjdhQk9xRUNuZkV4cEdtSlJuZXpGQ0hQY0xLTGpPZnJFWHd5d242NFlJblFOQWJGd0MwR0Jwa3dhMEF2RlpkTjVnb25vZCtLS25iTVRNTGFIc1lSTEtIaU81R20wVTR3WmloSGZaZzJ1b2lGL21XZHFEa3YzV2M1VkFVVHF1VG40OEtxSHhZSlZnS3Fqc0ZSNy9hekFpNno3OUtDdmZHWWhCRncyWlI1VnpyQ09hdmxJMTU4cXNiK3BBbVNEaUhjQ2NJc0JjQWdBRzJ1RUMwdkhob3NPZm1mVHBLSnhJWWxKa3dubmpSRnZ1VHhHeTNab2pqVXAwWUszWVE2QWdtNzhSVHBrQmtVR29qTU9lcnpEa1FFRU9xREt1TEhRZ3R6U0puSlJ0L2xJSGNreitZcThReU9iTFFZd2lMaThBa2VsRE1BQXc0TnhTTm5iYmhndGpkc3cwQlpGeFFLb2tuRVJpZ2dYVW53K1FuWUUrVlhYdUUzdU1USUt5TXlUWkU5OG90Y0kvenVlL0hEa0d6K2wzR2ZscGRUNEpnSmozZnd5cllzWUdaR1RBVGpYUm40TkVEdStjNXYrYzdnRTBEc05JbkplT28zellsRTR5djJTUTNCL0F0QkVaNk9pZ0xCZGE4Z1JkMHFpZ0U5dkFVZ0F4VEcyajhMZXNDU3RQTm91MDRJSVJJc1pUQVpBdUIrUTFaZzRDcXVTNFF3WkhUU3JFeDREQzBGWXlsTHg5SjJCZHFaQlFoVmRKQWFTeUkvU3cwVEZ4WEtieEtla0E5SDdPV3pCVzBraFJiQjhMd3BjdHJpMFVPVldjK0JoN3BNUkZ1YXorS2NrT1JwQzRDREFDdmEwbnB5d0s0NWMrTVl1eStQbjFlSk1RYm05RndNU3V6emN0VmJ2ZTVXOTBRUThtUGJKcDcxTXFBR0JjSHVsNUREMU9zb01ranh1d0thdUNPSlNqWkc0eml0SHg2RUdaVlgra0FMemhmdkpNSUUxd3AyVEhCcXNFQUNBbldGeUp6Z3U4T3QwVnN0endWUjVWVjkyUTEvT2wzc2JyeERqemdCT0J5VTQ1MjJVTEdsOEdpb0dKYU1zRWFCVnpGU1BIYUJpZGFLOXcxUEtCekZGbHhtZDd3RzJFT2MxSzNTcGF0QWllb1VwVmdvQ0V2VFV2Yk9EcTVZRm5MUWdrOVVHYW9Kb0JPK0RvRDhJRzM4TkFNS3MvbHdBZVJ4WnF3VWp4MklHQWpHZ3ZKampOVUxiZXlpa0FaeUFBTmVzMGwwc0FJcVVIdFF4TUI2V3ZEMnRnZFpJcU1BR1FBeTdsMlpPTk1CenJOZ3ZPZk1tdmlsRkdvV0FvV1MxWElCdXVET0xQaHAzcmxEeUlnczk0WlRrVFZYWjdOcHBDendPdjJSdGM2ZzNLaHhEY0FQU0xVSlF6Z0NNS3FLNzNrMHgraHByS0pVcEZMc1FnSWExTjFDQ0JiMkVqVC9aVW1qNUlBemRtUnpUTnBrb1ZGYldOOWlTdGhGNzlSQTNhaXdKdUsralMvMWxPZWpUb2FVb2tGenI3a0tKaCtZbHVkRUNtTGNGTVdENE5XR0dDRTVGSmJveEt3RFZ6a1poQm91c0syVHpnS1Bzb1BPQm1tZVlTQUdTbkhZWlAwaG5IdGErZC9NZ2lrWTNsbGFhQ1JRV1hPWkVvSit3eXNieE5NWm1NYXdkYVJxMWtEb2Ftb3JSQUVmQTFWMEV5UEo2eW5ta3FsRUZtQVpVL3F1ZjRjUzVXZ2lqZkIwZ1JqRUlDd1JJM29taE85Zk1Ba1FQWHNnODh3YWgvQ3gzNzRNQktzeU5ZajBiOHVGeEl1S3A2SWdxMVdGaGNicXNYRTZ2LzJ2N3YrWUNLUUdjcXk2bUE5aWV3Q3BRZEFMVHFaekF3VHphT2NERmFXaEZac3NiWC9hUEJiVjFnQjVTVU5lTjhQZ0ZBMWpzd2ttTVF1WUdqV1ZkaXF5dmhlRVI0OEFJVWVTVUx3U3BVRW5BaHRqa09KeVd1Q2dwMGY0WXhnMEhNbUo2R1hOTUxZRGh4NURSZWdvQ05GMFBMZzZRcVF5RHNCV1dTQ3J3VWRKbFJWK3I1N2pNOEdpMThUWmlQQWlGUnVXNVhMVVU0UnUxQmlZWk9PdlhPUEpSa1ZMaUZoaUhEREZPNGJxTi9yd29CTTBTUkdkU3BvSG9OM0xkcUIyWW12SFAwQXdiRmlRQ2dDUzYvYy9uZ0tpbUlYQWZWV09Hejd3WFpSb1lRL09Ud2NDa3IwTHM3OHZaUWNlWnBMZ0dndlFTd2MyUldPNW1QWXFVZGhHT1ZjT0FnVVU2YVFPWUw3UmlsVS9LVEU1OWpQa0hJYWdKS29wMUk3QWJFclVwNURWZWY3aE1EQTZLTUNjYUxPaDBaZlcxa2dJbDN3eUNwVDZ5NVlCSkg1Q2Nod2dld0RteGc5ZmNMUVJoMFlLbGtva3BNZnVHVm9aQXJXMm9LdGs2dFZpSWtUVldja0RWSSt4QnVEcGFzdXA5aklPQmtDMjRNZjQzVGZvejlrMnlxbDNxU0YxZjB1Q1I2Rmt1V3l6clZ5UzlQUnRHRzB4cGxKaTZzMldjQys0WmNLR1dZU0tsbWtZVU1Cd0dSWU9GSUZycHdYbWt1QVFDbk05azhxSXUxOXZjUnJCejdwSFpra1ljSEFVbEdsVUxMWjVSTzFnTStZT1hJYm04TXFWZzYxaldnSmhNa3c5R0Jxa2t2UWkrc1RGYS9xTU5vbmZnWGpldSthbk5VenJtS1JNTU9TT0pEVk9ybVhBZ0hBQWszelJVaUVQanVzckFFSjdjaDJSRlN4Q2xaNVJRZ1JTZWtOTWw4S28vUURjZXh3TU9MUzg1V2tZU0hUZS9IWnQyZUx6SE9kYXBsbkttVVpZQStwRWl5T3dqdkFjTXBxRFJJSGtjQUhzK2EvWWlFaFRLN05BdFhadG13QXNOUVNNaHduVUlycEdoT1BQQ0RHd1FXbFdlVjVoSUF4anVBTlBJNFJ0bGg2VXpsVERodzR5UlNUS0xpNFN4blIwUWVna3hEQUlDVGRnZktVMjdkdG9GcjVQa3F6NGdCMHUxYURJYTZzdW9aTE9YU2hsdUFRRXNsczE2d0NjdEJ5c0hGQUl1L29MSEY1T1lUZzhVN0VTczhITFM5RkJNdHI3QVpkaU5KeWdhekxJNUVCZk1SemxNclRrVTJRbHQ2Q3ljTGlvRnZGRXpTS1BjdW9JaElTVEgvbzI3aXFCYXd6ZzdtUlRwc09ySjdYQlJMdlFRUTBiVFM3cmI2WnF2NXRTdTNnbUNBekNtV1pzak40MVBoS2V6dVQ4SHpTSE1KQURqZXdSSGppMVcrUGpxaWhkVGw4T1FzZ3V6UUpCUTZZczJuVTBaU2RJZ0JRRTRoZU9DRm9HSkpQYzF6RzZ4UUtTZTVhc2U2cG5veG1TV0xsYmkzRDhuUVE4NGdSMWpmTUNVbnF4ZHFtRXg1dkFPZ1dudXdBL0MxUDAxQlVBcVZhSGhLYXREQjN5UHNuMUlGTE9MTW8wSVJEVVovZmFtd0J5OTE5cE5jSi9tT24vZDYza3FHVi9haVE2b3l5S1ZnZlNLekNvSWo3Y0xZMkZtRjdjQkJoZDJYaEw3bWlyN2UzTjZMbnhNekVRWWRxTnJtMEpBaG5NY0lSY0U1NFdIUEk3L2NSWlZacHJrRUFFOSt0cTg0UXdjNWsvZ29xVlIxRlp5R281Q2JpWEltOCtxVU9YamFwSnp0SjQ2Y1pOMkNJeEFGbDNLdHJ3cE1iT1FZenltRlVxc0dnZExCeVdqaFRGRGFFZElBRlpxVXN1QVIydm9LQU1aT1hrTzFwQXRQQnN1MEkzY0FERjlHbFlPQjZubkZLcnVRcHJVUWZHdkVnT29DeXRUa0tWWkxMVEJnYXdsakdFYnNEaWVXYzJHcXRGSldadFp5N3JFOU5HaFhoUXpyeHJzODRvMU9MOGlRYnQvUmh2amRuYzZSWU05Nnd1SlRYdlBGeDdMVTRyaTJ1YWVmRThNblJRNVNvMXFmZ3hMT2NVTTVRWUJFWmxtTnZFYUtlV1oxbWtzQXdBOTFRRk1vNVlBT2Z4NnN3cEpqVVJhT3dPWklFSjdpeWVTMUhqUXBJSENaZzFReU1rQ2ZpVFpLOFNTWE9rMXdEZ3dUT05FR2JBalBuaE9vMzQrSUNGL29KbU1Fdk1ZVmdEYktKTFYrRkJ1UjRQcWJnTkNHZi9WSEtOeDJtZncwa2JwWXZoQk9pZXhWVGNxaDhyNzZvZGh0aURpekg3SWNGa0pveExSd2d4NkFwVDhHdUZFQmY3V0o0alJjeTJORlNtQzJpV3FuUGxPaHpuS3pJc0FTN2xRQWtBREtUTjVMTjNiMTJ2QTl2UjI0OEFxWC9yYzh5dWpoVTlEU0ZQUnJFeXlEc2Q0U1R4aWVUd0RRck1tQjdRNHZ6amlPTGVsTWYzd2lPV1BucFV6d3RPbVZHNzdDV1BVb2RQTkRIMGdxekNKbUp5SEFuVjl3TVJEVTJWSUluWHdBcTJyRnFYRmdFdHRscjhxT0lMUVdhNFhwK0llNndWcDlsVnJFRG9EUC9IV29Kb09Ed1ljb1lIQnhBNUQyUWk0VzhlOVVjWlFTR2FTcVlDbU9zOVNwNGtmVksvNDJRUHEvZGtUeUkwK043Qk5iSzZDQnFHbkRQc1lRTkVDWFF1TGN0eU5jMUJwWlY0cDViOGRGbmVnakgraGttRlBvVFgrem9yOThaY2RCZXJWMEpHU1N4MDloenpKOTVZZTZsS2VPTmxFTTlLZmJnbmtPYVM0QmdBR003OXlueW5GT25WaEhNSko2SkNaL09zeDlvcE5sZzFmQ3FmVUFLR1dRYk1HTkFqYWl6NFB6OW1mM3NlcXpGWXhyL2RTc3Fac284WG5PcTh4bnl2bWUrQnhrS0o3UGlZZG54STlzNnVuQUxuSmZBa2hRVG5pK2JFSkE4THZuNWRFNlNOMXVCS3VVaDRYUSszS2paM2pEZlFKV1RWWFlVTnJSVmprdWpIQ2xra1VoRWRrdlBiWkF5WjE1UVEvMEtnV3o5SHdWS2tBdDF6WVNVK3A3VURhQldlVjhvaklucGYwb2RxN1JnYU0vOUt2QmIrdzBmb3NHUXB5WXNobWhxVU9STVpHWEVKU0ZyZ200TFZmQ0RJQzVCQUEvdENJckdjd1l5K2s0QmxJWHh5R0gralVYbkRla0xGOWwycWp0RlY3alJuRGlxQUpjVGdCT29LeXJHd3hxcTdzbnR5b3lFTXhaK0N3TDJHV2RpckxtVHg3WEthY0dsM3FuTFFRdEFzQ3lJaCs0aW1jUXVzd0VMMEVBcWtkcHpXb3J2aDhRMWxTY0FZU1UxSUNCeWNhU0lmUFVWL200anF0TXJSZkkvZlNEOE5uWTdmTDlqUTB3cFREQU5TTHJqN2pDd0tRdkZqR0JjV1hreGNmVUU1NmY4L2FOT3NGY25qM24xNEdWNE1FSzBXN3BFRXU5a3BDbi85aTFLVGNOUklFZFZOb0tRWnJKZVM0QmdCWE1GbU40T1l3N29rbkZSM1pZT2pIbE9rZGVZU0tqclppZ2ZidUIxem4rZzFCNGpVVEdJREVnbE1RZjgwcWRYT0NhQjFsQklIZ1pCblhnaU1iRU00NTY4R2h3bUc1K0tPeEZJb2NEbmZOVEJGWHhEb0NQQVBtb2lSK1pvQjN3c2Zwb0Y0QThWUWlaeUlZcXJkMnVRT0NhMFZJdEdEcTRXT1QwWEFFaEFCSkplWkdlUmVlRFUvS0tNelNQZWkxUFphbEFTejBjUEsycTI1dEdhTFcyQWRFRG9GMHNmZVp5Z2RPdHZva25aNi9vT294Vi9QTE4zZTRGL1dTNFh4aytVdFYxd0NHMDZFRS9rVExRbDJLTUsrRXBKdzYrV2FhNUJBRHN6bDFBT21GcW54ekNVanRIbFpra0tTdXJwVVBkSG1RQkxld3E0SXdzUXhGWWlhMTA3U3hqQ3NGd2V4SWVKU0NySjVGRmtjbm9pYXZjZ25JRmdJL0RNMXFjQmU5SFNHbFRLTnBGaGhNc0tuTms0QVQyRGtBTkNQVEJtYis0QVlqdVRIekpRUkM1dVF5NEJ1SEZxV1FocFdJYkJZSXR6NVc5QXFLZ1JFMk5qSXBMbGdHamtRT01Db015OVFzaXNuM1Vwb1ZXb1FhZEFoSWxFZE9sSkZaeWlpaG5wVmo5S0RiZnUwazh1eTRSZWZTYTN3UmRFZjNqcjI5M2IxelhEVUIrS3J6MHIyV05ZR1RTYWgwS1JVZVA1ZFIzenZsY0FvQmZuaWpMTWQ0bkFjUEpkbnVyN2RDV0RSbUlRNmdGdDhUQWV5S1pxVFJiZUkybnRzcTVRbFF4QW1MeURPV1ozYlRBd3c5ZkRuODZNWFdNRGc0T2MwTXdnMXBqOENESGVtV05NbDJOYTNSMzVRZ0U4U21BNnF1dVgwa3RtbHZRaVU4YldKV1FhYmxGckRQYU0yZHBsRXBLUVJQZ1FTcGt3WnNJM1lLeUJGK3BZMVEyMU5DbmdyU0M3QkFlWisxZlhJNlNwYXFjcFY2TU1QdVJQYmtRWWJFdGhUS3RDcjAwVEQyWEtmaUFwS3hPWVB0RnZqTk9lUHpJb1g1YzF0N2ZxNytxOEhOaFAvZkNwaThEZURsb3BKREh1WWNLUlUybnk0Tld6QlErK1ZsTU9PYVI1aElBTk9oam5zbDVaU3pzNjVLakdCc0RpTTdxNVhrODlQMWFpM1VWVlFQUmRwa09SUkYvbnh2MTZCWFhMejNSYU1qei9iU1ZQZFRhNENCQUZWV1BEdTNQcG9HWDdEcVFrS1BleFFZUHFGS1h0cE9QV01FQks0bjJIQUIyaXU3VUY0TUhpazc4TWhEcW80RGI0VVJ5Mndtb2FJR0ZCamxCOUlPTmxJQUZCaXJ4RFZldlhGc24yVlB4ckZpRXhpQm9Lb2d2V0xHRVBrZ0JrYnM0d2cwNURsZmFMeUtON00ydHZoSXArN3JtNE5RVTVXVkZXbGIvOVZYNVgrVXREYkNmL2NTV2RnUG1zRUxCV3lyaFJ4Qks5QzlGN0RRcThVRU9IdmpLMGFCbkJzNG5BSlNKWHpzWUIrZzRTa3AySmdhSitnd28reENpanVKUHdEZ0FTbkxiS2pQeFRDOG5zNkNmK2VKY245QW9kWGZMVEtGTmZ6dE1lS05nejk3S3FwS0VWZ3hwazZpamlrd2V5djZoU0UzWU92bEFwcHdDVXZSQlhSMEVNUWNBOUJRL1BsaVdOUE1JUnBiSEdiSjA1RDJBYUFPdWFOc0txRVNxK2tjeFNOU0h2VEJTckhWb0lJc0JacW5VTVhsMHNqRFRBeW9OcUJBOVp5Q2FwR1lVaHpLaW9uRU5PT1M1YldsY3N4cFFhMlovREhLeHVjL0p5N0VzWUVVWCsydWFPVXllajcyMjNUMzNtbDRITGp4U09aT1RFcktNUU1TNEZRTjk2SjBpZUpKVVREN2FXaHIrMUhEd3pPQTh5d0JRdmM3UFdybVh5UXh5N1hyMGhFQTdHVURKa3pyQUtCY1lzdHNwZktETnEzTFErdFdteWlpMElxTEpncGQyUGJVQmxHS2JyMExUUmxBNHg3VTVyQVNDbW9SZ010UEJVWS9LckFxYURwN0JnUWZiNmc4Y2x3Q3FMOGZGVGpNQ2pTV2doZzdMTFRsTjFKRUlDQUptcFo1bXlBaERaWkticDVBc3VGUktWT0pjcmtpWWhzbVR2TFJKNHdiZHhoQ21WcnlWSjVpalR4QmN5b0tZSE9NMEJUVmk2ZXUzaEFpZGplS04vOTJPU0RVdk1QN1RKYjd1L0M5MTYvcDVjQ2FPM2dQYS9ZUitFb3duQU0rc3RUMmRVNy80dW1uY3JVb3QzSkJ6QUp6eEpRODRxVTNsR1lDekRBQ3BybDZTSW5mS0huZXNqTGR6Yjk5N1dkOTU2eVFRTVVoNm1jbWMrTXFqaXVBU1grR0NLMFBSREZVbEE3WGt6b201b1k2VkFBWUQzY05BQ3IyaXcxUEh5Sm5VTUNWTmQrOVY5ajBBMXd1OGg0M3hLYStzN09DS1VlaE1BUENOd01RcGg4N0I3cFAzQXRBdUNFOTJnWU1jUnBLWWttOEFsNEpwOE1GZkJGVCtoaWRsNjdaWFljdWE4cWpxVXQyN3JRSzdWUWpna1ZOZzhIbEoxK0xOV1lLRks5M2lGRkl0dU9HcTJBYTNIN1Fkc0VxbE91bWJzdW1pMFUrczhpdUtBbWZYRlF6RWMwVlAvLzJrQXNCYXVmMVBqOFlmNHZnYnBaUUxEYmdrZ3pyQnowRmJud283Z0dLZUI0TG5tZnU4R0w3UE9aWDcxZ0QxY29CNWxDVjc0MUJRbFlmQVkwU1BDejF5Rldyb0tXc2dPT2g5aC9YckJ6aHY3eVdRZ1pMWDhJWWxLMjBrYjJFM0EwTDFIVWdLREQ3TllLZkF3VUFEUndCZzlTZFJSbUQvVWhDMVh5NHJRbytnNTRDbWd0dUhPSVpOUUtCNFJNdEFad1M4cmhKTW5DbnpNTk95SnNLS1ZzTmxEWDQrRXdkUHdyZThzWmlQTFhlazlMYU9zSVhBVUppa1JJVlZ3UlBmT0NTSXh6aGdFblVrbElSK0FSM3RYT3E1OVZRaEpZam1HNTdPbzQyMm5OT1lJTHVzbndNK284blBZcThmQmU3KzVVZHZkaTlkMnUwMjlETEE1QXV4MlFoNUhPbGJqeG1hU1phbzRIT2k4T1dFdDQzTUljMWpCMEJuOHltYk84OVc0ZXc3TUM5bDJEOFVrTmM0cTZBWVI1R1V0N2pFai9QVXNSRzFINlNoSXBkT2pFa2ZxM3N6ZzJvOWY3eFloZ2ZWaU82SWlNL3lHVFlNZi8wMUk0VEo0ZDFDMFRzbVVBU0Vhb2lDQVEraVlBT0J3SU5HZ3JuSFFNSCt0YTdJRG5VcURoMVFwdENoQm84UUJWK3FxQnoxbVFCTTlGWGQvbDdUNTE5cm1nWGNDRnZWQ0dKcjNDWitNV2RMRHkzZDNGenVibTdwYTdJcWJHbjdzaTFsdVJ5TXlVOUQ2RzhsYXQ3aUF1WWNQRUNERkNLTWFzQ0R1S09xR2NNNm40dG8yKzhPRGQ4NENLZ0dmdkpEUC9vRlZtdyt2eUY3NWU4dE9lcEhmdjY2YndxaUgySjhVemZobW90QW02VVREQmE1eW1vS2paQVVCMTFiaVRNRTVoTUFtQVdZbzhNRDc1Z0dGUkVoQjNHdGl5b3hoSHRpQ0djVzhoYW1yanF4MG9CY0lDc0FZZ3BJM3lVMko0NDdURWhvZVhlWFNSczMvQUlIamJrUmQveWhVVXNUWGdQTlk0MjZ3bmlRQ1RCT01uQVhuKy9UWnRyQkRvRERPRXZSU1luNktPRmZDQmJJaEhJenlJYVpCQnduQzhqQm5aUGJQRm1QZ3V1RkhHUng0MnRWazM1OWRiazd1NkZKY0VZcm9DYi9paHF3N2pUUnRDVTFkUjkxMHUyYzdicnJteE50bFZlNjZ6ZjN1aHMzQ1FRN0pSRElQdGZoQkp5NWlsWWdjWlNWY0E2Wi9nSXFhaG83NVZUNFc2NVFzZmducTZUZEl0cHZveHdjazRUQXgrVGYwQTJZcytyVUgzMzJadmVoVCs3SUo2eitKRHpNWDBCR1JZTWduUEFSYXVHZjRBczhaOHlIbm5oSmdtM21hVDRCZ1BHQU16aEl5dTkwZzJOblN0UkFib2gyTXpSRkc1NkFpUyt6Q1JvSFhvKzhMeHZOcVUxbWFoRUZwcmNhV25Rc2c0QkJtZ00xQmtYV05vL3FEVHBiWlE4QU1hWElvcXJGTTZsWlZmTVNJSmlvcEoyQ0JNWjdBYU15QTlZdFNxK2M2TWdrMlZkaXFMbHd0T01BMHNBQ1BSblk2cTlxaXg4VGY3bTdUeFA2Z2lZQmcwYjN3Znd1L0UyOUJPUDE2enZkVlUxdzBubmRHYnRmdjViTHp1Q0dkZ0hyMmpJemNhN2VuSFJ2WEYzcHJ0NVlpa0RBNVFIK1owYUVFckpWTXZ6ZjRpVFVkSk5VU0d0NnZDQ24wQ0JMbVRmOGlSSmp4UXFvL2dBdm00czY5cU92K3pYNUNYd1hGZmhXNU8rYnN2a0gvcjlyWHYzeE5YWDRjektNL1A0UFBHMWdxdHRTR1YwNVNPU3BEN25oZUNBMFdXQ2JTWnBQQU5pTG9XdHJUc0FrVmxvbVV2VmdDeGY1WkQ1MHlod2c0VEttY216VlBIa1FHWWthVFZJSFcwaURvc2VRbDUxSDF4TjRZUFNFRnhRMEh1TUZRdWIrM0ZpaGtaV0hHTTBkbHdFTVRqRW9HR1RpZllDK1hCQUNyQ25vSXFCeXFVNlVBNVA0TEpGbnVFSXUyMzArMTE1anhWOWY3aTZlblhUM240dTczbXVTdmFGUjg3SFh0clFLM3VnKytQRk5mUk51VjNmQ3FTbmE2cVI3VkQrVStkNDNyM1ZmOE14Rzk4UjlXdjBWQ0ZZVkJNN3BlUDNxVXZmNmxhWHVtcEEzZEduQVBRSi9qUWJqbGFKZlNtQ1FWa1pqTTdRb0dRWnNkYVowVUlJU0VzWWM5RlFrOGp5QURPdkVUYjhOUGVHRC9mcnhuKzZjYlAvZW43N1dmVXkvQkx5aFM0S29nMytwRTM5dGE5RFp6WkVpQ0FSc3hPaVVGSExkQS9BUUYzaXdZYVA2eHluT0l3RG9VNjRKdndaZW94K2hNRDlQUDRyUzZTQThraE91ZnNUWUNFbzZQTHhJaytTQkpaaWNnVlRMS0ZadzVIM3FDd25SZmc1Q3VocCtUeXdZVklUdVEyWEdMRnQ5SmxOT3hsd0ZCampxRkRrSXBBN0plaUtud0R2Q1l3dVRQWkNSVzZZQ2dtL0VxZlVjZ2t3T3k2SjlzNGJjaXJPQ3RrTHlnb21neGZVOHEvNlo5UlZ0OVplNkJ5OW9CZGR5djZwMnoybjcrL0xsN2U3di9zeTE3c2MrZEVQYmUvR1htNERZUkxxNVBlays4c3B1OSt6TE43ci83ZC9lN0w3d0hldmRsMzcybWU0aFZiNnFRUERveFFnRW43eTAzRjBpRUNoeTdIRi9RTVBkRTFxRzkzbkl4Tjd3ZTJrRUh6aGxiMUFvTk1DR1RwRlVVY2xYMklmK29DOUVVSWZ4VVNzM09UZjBnZi85NXlmYTJlaXlSN2lQZkhLcit5Y2Z2S2I3SU1YWGRHNlJtYjR2bEI2UC9tTER2L1FYcWRjbnloNERBaHRwOHRiczB6d0NnSzYzZDNkaVJaUkJzcnczOG5nR01qbVFNZkRpMktPUUU2ZmNFeXFyTkdWa21DMXo4VXdMVHRtQmd6WlJvdFN6UGlxU2tKYzJBcnZqaFVrZnhLN0FVMVRZekl0TjFGZGw2dm5RaVR4M0FFR0VJUTdmL1dmMktRaDRGZEtBZEU0OUJxZHl5cGtqaTVhRXFUaEExckpsalFhdWFWbjFHZlFQbnRlS0xrYnVlTVA4VC8vTnRlNzdOZmw1N3AwSnNLN1YzckpGZFp1d0tTM3pmS3dTay9xZi85eE5mVlMyMWIzL1BSdmRiL3owalc1WEFXS2lkalllN3JwUGFrbDk5ZEpxZCtXYWRnUGFCL0JPUGI5dW04cFdGTzlnQ0Foa3FoUUdnRkFLSE5BUUQ0WVVlZ1E4T2t0T3VDVjhFYjFBQzlGUEs3S0J5WC9mT2ZtQjFaOEFwVm42UC8zZlY3cnJXL0tUNkZ3aSthL2tDQXhwMFZhMjdoeTlFekVFQjRyQmdsN3EwRStkQUtBSW9EQXZtN0x6Y0g3QzJIcUlsT3hNSGhJK010ektLa3hrT2VHenpjUlJqdnNQWlRDcERJMlQ4d0RCREJMNjFyYXpJN01DNVFLVEpUa0ZVSStnd29UTVlNRFF6b0FRZkZHVGVZMHNkTXhCemJZL0QzL3pyNVFOcTdXNEpDcURrYlo4cEJZNUpQdWM5b0lhT0cvM05hRFBhT0t6Nmora1ZmOCtMWGVyVXZ5Q2J2WTkrL0pXOTNkKy9ITDNieit4cld0N0pyN0NSUm5zREZaTGFYTGtPd25IemNJcnVqL3dYVDkrdmZ0L0ZRaSs2dGVlN1o1NlVQY0NkTW53K0gyaWEzZng4dXZMdWo4dzBZM0NIYjFYTDE2dTZVc2RPL1gvYis5c2dDdzdydnArNTgzMzU4NStTR3ZKdHJCazdFaE9RRFlRd0NUQlpRcENnZ1BZVUU1VmtncEpwWkpLa1pTTFZFd3FUaWpLVUs3WUlWUkNnWTBEd1NZQ2JGbUlzdVVQWkRuSXNtVFpzaTFMU0VMU3JsYUxySlYycFYzdGgzWjNkcjduemN6TC8zZTZ6NzM5N3J6NTNQZG1aK3piTTMxUDkrbnUwNmRQOXpuZHQyL2YrMmc3MUlKOEFCYU5WMjlKZ2ZlOHhzRWFGNWNIV1dKWWN2VVZVRkQrV25hVlZpd29QNnVnVzZUOFQ3OVUxMjJPem1GYSsxV3lEQ08xSUYrbDAxY3hRbitsZmU1NUFnZWhKZURNYTFHa1lHZ3FHVHJrdG1zRm9HNk5MbmFnSzVPajE0SjVXYy9rQ0VHRVpWRmRnTG5TZUJpOGU4cDdHT2p4Q0FIQjVWUXRTc3o1dGFGQ1daQnlCaFFQaWxEZ2JFbW5SRE4wZ3Jic1Y0ME1iQjdWTVhDZ1liT0lEeUtLV3dONFlTWUVnVGI3c3dsSVdTQ1ZVVmhlMXh3U0JoT3hxMElycDh3TTlqNWRiTmJYSnRjNHM1MlVmMGpyWDVhNzNUcUU4TG5IWnJKUHljL3FjUjdQdTJrbzFWc3RGallPckQyd1lva0FlYkd1UUVOdnpLRllEYjAwczVUOXQ3dW1zcDk3VTMvMkV6Y05aZ3VhU2NlMXRCNjRTbDczMCtjbnU3THBXVWw2UVovWDBtcUFweDQ0ZjBJUXduYlZKZFJMelByVUF3YVROSXUzdnZqeW4vTDBCK2Y4T2RTRElSd2Y2YzRPeWtDSnZXeE15di9GcDJheUx6dzVxNW0vTUg2Qmh5RHY1aXYxRlR3d0J1Z3VuSStqRUF1NVRFNFJRVGJrcTZWUzNGWHhuSjJCblRZQW9XM0w5WG9oamxRMEcydFVXcFlTSnA4SVcxR2dVbGNnSHh4U1BVTTYzaGhUcEJtbTFJcGFMUS8xQ1VVNGxBbDgwTEdXMHpNNUNmSUtSeGtHQUIwUGRCck1CRll1UXNJTVNPdDhoU21icmdMWVNMS1ZpeE5RT293dzhCejZsaFJKNE11UThneDBqQkd6UG9ONVVMdjJJM3F1dFYvTGZYYjUyZVFiMWFnNG8zdjlXeDZZeWg0OVViZFozNVFmcWlydk5HQ1dQNE0wZ0hBWkdCTVlQbTR2Tkx1TGlZODlPSjg5SldQd3o3VWEyRHNzU1VnNDErNlYwZW52eXM1TmFHOUFHNFV6V2czTTF6VU54dHVDUUJoaWNwSlREQkV4RklEbGUrR0tIQVhPUXlHZlh4RXB1LzNJWTBqUCtmYU4xVXo1dFJqSzlrajVIMzV1UHZ2amIwemJoaUJIZ1RIYXdYQkhZeUJja0VSeHBYYVRUYXd5RFRzWEtTVGR4b1I0QWFybE1vL1d1TUJtbXJtTjRVNFpnQ2JwajQ1azgvM2pzdktxYlVFYlJ3djFibGwzbXJsRlo1MnRza0I1QmphVEV4dFNDcG9Ea29iSGVkamk0Qk9jWmRqQXhXbDVqMENqVlJnY3lrNmlLMzBPWXhsTVQ0MkJUQjRsaGdGVjNJa3kyeHZQeWcrMHg0QmtWdGlXbFFxRFkvUFBsNWJjTklhNk5ad0lHUEdRbndUcVlLQnovODdPOWpDenZoU2ZlLzBoOVkwMjZhV2tPdDkrdkpIZDhVU21lLzNoN0JWWE1jZ0RZUU9LRUUrOVVrTWVhekN4a2xNREVBY1hiOU8zTGpXeTMvbGFscjM5YjJYWm02N1ZJMFBOZC92RXdKQVU3cHdNd1lYSm5teFNxNEU1clFZVzRpYWhHVUFqQkNrUHdKVzdpRk0wTndZRkttUktzcU4wR2pJMjY3T3NIeG5zenZhUGRkbXluNzJQY2NuaThPa3N1L1V4UFFrWjIyc3ZBVm03SlhPTWFBajdLcTZRaVlraDFoT0JFcDNIMW5CSSt5RjdkTHV4Unl1d01mbUZtV3krZGM3MllqdGxBSnE0bExyUGQydFp5WkxUb0N3K3d0K3E4OW1Vdm1WQWhYZTBDMnFPdDhFV0I0Q0hIWkk3RFJlbDF3N0J0WkYwOWhVaGJuaGRUUEVoa1dja1V1UUo3eEpFQlNXL0RkVmd1TndrVXBUQlRqdWRSek1JY2ZsdlMxY3BOd3BOUGd3Sks0UWcwMERMNVF2a3hDQXpQb2Q1bU1tWjlYbTBoK0tQU2VsWTVqTHJuNXZSN1B5WGpleXhGNVZmSFRVa1JXU2dpMFN6d2h2ZkRQeVFadWtFaWJkeTRnOFowUllja1BmcFp6VEgvY2tqV1hib3BTejdSemRKNFhUZndhZlByOUhTbTBlRzV5N1ZiRFV3cXkvdXpHazFZS2NKSlJTT0dydUNCNXFSTUl5VW5aSTh0NVZSSEQ3aFBaeHhrRHhrRE1lMENqcWdldmRxRmRTdlBNejhmL2xDSS92NEk3b1YwVE9Cc09HcHNwS2xsWSt3S2F5NlRRYWlEU2ZSL3JiaXFzeWx5UU9ab0IvQWhlV2wxQUI0QXltWGhsZlEyU3lpa3dZZ1ovVEMrWVc1UG5YdS9KUzhPcjJ1emx6Mkc3eE5jQXpCY0xSV2dVaWQrMFBPbmZmcUhuTnhzVS9DRG1wRXNubGRBdFFnakFqYlVDT2R1RGwxbDRWemhDZXNnSlpEV3U2SzdpWG9jSnpEd0VXSU93Nlllc3FTejNCaXhsNFVVb1JCaEdKN0czbjhCODRITURNL2hleWJBQnJKRG9VeVdyYWFVQWlEeTNQc3NHUGZyVm0vS3h2VmxqNnpQb3F2QllEZDczTXMrUXVIWnJOUFB6YW56MXVGR1JFYVZPcEwvaEJ0amxzNk5lcWZSVEFEdnFXTFFySlptM1lxVHI4Rm4yWDNuRzlrRHovVHlINzI1cjdzTGEvcjArTk85YUptMzhGOVdvVm8zSEJ1WUdxMnBzZU9PbStnc2NQaEk3czFrREdBcHZkblhyZlZGeXJsbWh0RHRkY1YzL1krdE84d3JDVS96L2paK0dRVkpMdG9LOVU3SHAzTzduZ01IUXl2Lzdvc1RMWVNCcmNDaFd5UVFUU1dsRUJZY2k0UDZnY1RzSmEwNHJLZ3poalFpUzQxTjV2aUJPWGt3dHlLVERTM3phNlRCZ0JXVGY3MStiblpiaW0rVG9GbVMxcnFMY1dkM3EyMUpkcCtVYWJ6R1UxTDhzdWlpWEhCV2FYQWtHeHhEMXNSWFloYlFnRVVXcXVMbEJ3TDJCS2NxT1VYUHlvR3VVQTBvRkZncU5rc0VNTmt3WkVYQTJMbi8xV1k4dWJCUjIvOEtvekRWZzVybHVJOTlFYWNncm9FYlRCcVJQT0JDc0pzWW5GTHdHeVA0dnVPUFJ0c0hOL2xKQnNuK1ZCOFBEdjB6NXhaeWo3MjlVdlpZWDNVZ2hrUkdoaVlZSXpnTFhweGx2TVptWFNlWVpyYkR4VTEvbzNwZUtHdGVKZU5LejFZd3VBNVVzeWp4VDk4WURaNzhOaEM5czd2Rzh4ZWQzVlBOcU94d2dHaVVTMVJNRXlYWm1wMmtwQmp4ZmEwUUgyT0lXQUNDTzhZZUYwQk9uKzB3WXloR0tTTmZYRVZOQ3A1N0pVeFpJZGZpeDNiN0x1Z3d3cS85N1dwN0J2UHp0dUtDWGtzNlVNc0xnZUVnT3oxaW11Tzh6Ujc3S3FtSWg0WGhMV2QrRHB1UUFMazZJOTV0UnVkaVVXY2hNTjFLRzB1dWQwR29DV1RqZnI4dEN1Y0NVZlNDWEJ6ekhwdWxDZXRpRGpQbkhuY1pQVW9JM3FDSTE4Y1p4WnBpdWRjUkdyTndNbzM4eGxpYnRuSlFFdnlPalU0aklUVEVXUHdoa3NOUVVwVGJCc1g0SUlQcHdXZERuQlpTOUFEZXdaTXlURXNZYUNoOUpxRjJKVFNJQ1hNSGdodjZUSEllL1dNZmtBS3psSWFwVWZaR2VUTWN0cmt0bzlZM1B0c0xYdncyYVhzbkQ1cVlXKzBNYmo1czBIZUdzSmtrVWZNQllTdEFPQy83QnpIb2dYaFFCdkRUYnVnRTBJeUFsckJZUWdPbjF6TzNuOTZLbnZ6RGIzWjI3NW5JSHZsZUhjMks0WGdubnlQREFGR1lXcXVLNXVSbjVQQlgxQjhVWVlnR0FGVkFXRmtwRDlWWlRLeld5QmtJajhnWlVjbUhFOGVqaklCc2dxNi8rbTU3UGFIcDdOelV3MTdNZ0t2WVNVVVpudkNablFoTEorbkI0bFkwMDAyZ1lVOGJvRjFMZ3hYdkZnMHVMdzRQNjJvWXJTbWM2N2RCZ0JPbldHSFhZMjVTOVBjME5JYWQ2NFlIdDhLaEFZZERsMVdGM1FjbFM0cHJOdGRNd0k2Z1dET2pZQXhKVzBNT1pWa2lJSXppK1pOS0JwVDVQQXlrYTZBcGVuaXZKQUNuVERBWTdvdzVHdnBsVG1PS1lNYVpaQXd4NHlBU1hqTjFVTjJuNzhvVGVLV3dLajdJRlJibWVHNGYrUkxOWGlVWDRmNTdLTVZmTGhpU0hHWSt0YVpoZXp1dzdQWlk3cS9IUmdaVjMxNkRDaGhtZExEc1RGWURHN0RSK1pDSHFvT2l1QnRMTGdOZkxtQkxQbzRHalZsWk5ZM09pb2M3MlJNSnRCQ1FnUDZ5aVlydXZ1ZXJtZmZQRmJQZnZBMXZkbVAzZGlmWFgrZ0IvWXpMUUpzdjJKQnkyUTlLTEFqeUp3K1hOUXN6UmlnRDFKbk0zK1VDL0pnSTFvTElqT0dLRDRqNFlrWEZyTFA2RkhuSVoxellQWFV5aGk2NHVmeVFGYjZzMzZJb1dEbFErMUYyMU51Vmc4SHVoZ3NVVlFiRnVlbWRNUGNlU2R4ZE1SNU54aGNuSnVleEFDNGF4NHdqdDA0TktKZWczV0NPbDVUNDdOblF5VjFLVDFLd01tMmVUMTFjRWNSUDJCaTZwZ1Fjbkx3RmxUVlM2MFBLUnM2UEZMeEJqWVJqVWdCTXhTQ2xBRmI5Z3dDWmkzd0dJQ2U1Ym5zbWtHZG1kY1JPbFlEeTEzZFlheDVQc0d3eE1Yd2FZbXJzcnBqc01FT3JmTmExajcwekh6MlZmbWpweGQxRDYwWlVDZHdVQWllTnZ2Z1JySHRMeW80ZzlKd0FuQVQwcGlod3FhanFnbE1LcDY2bFlNL3BLTnMwS0NYSU0yM0RxekhJbjBrajJNV0hOUXluYytnMzNlMG5uM3RXL1hzOVZkM1p6L3kzYjNaOTc2cU45dXZnd3FzaE13QXFDMnMvclFJTU1Qb1cwdE9FbHA2NkdHZWxROXRabktZME9uREI1NWJ5TzQ3TXBjZGtVd1lGd05tQ09FdHROWGw0Zkp4NVRlNXFCM0lJYlFJcnEzRzBJUVl6SEVrcitISWJuMnVBSkE5bllXWlNRd0FTWWdvQ0VhQmRqdUpvK091YTNucXBTa05ldTdRdFRDVlUzTU1iclpxbFd1U1JCS2hVeDg3d1hGU3ZYbW03Wk1oUFZMaFRiU1ptU0JReStvenYwMVJ2Z2FJbklRTVJ0L0pwanc2cmhYTDVMTjBEUnlnSzRDRlk1cm5jWnFtL0lxRU9JTXBoRzNvS2RMSDdDUUM1L1NUVS9jZW1zNWV0VSszQVdNTjdjd3Y2LzUrT1c1Q2FRaHlDOENBWmVTSUdrdmhHVzJXOFVNVno1NWR6QTY5V00vKytreGRiK3lGUjQxOHVwcmJBVjd4RFlNT3FBcWhnZWNQdnNJbHg4RW9PUGkwL1lISTcrYU1KZFF4SUx3a0JhM0FFOHBzMVVGYkh1dG1yMVZMQURXZEhXRFZjUGpVVXZia2k0dlorTkNjOWdlNnM1dXU3Y2x1MEtyZ3FsRzlwYWpOVFc1L3pCbUJFUFFyOU5sQVBIdHBLVHNtbVR5cEY1aU9hTFovZVRyY3gvTjBCR1htSDFuQ2pQMEI1UzNOTUdTaEhtUVdvRiticWxVazVJc2NrR2tOUnpKOVljdC9RZjNYRnk2ZW1WeWpTRk4xYStSYk42bVRCZ0FtOFYzekYxL1FDbUI1VHN2TjN0RERVcFF0TkNFdGduSVljYUE4RzJTSGRQOTRWQWRNYnJwV1gyNlJJUmpUN3U2MDdxVG1aQkRJaXl2cURjcWFJSlJLVnhUT3l4U1kxaUh5R2JWWUlNU0ZFemxEUmJ5Uno4TkJCdFNJRDQveFFqdnNtM1BTTk83WjczNWlPcnZsTHlhem1tYTlNYjFRczNla1I1NW4rT0hESEJnQWxKQlZEM3NnRi9Ycy9LSWU1L0Y2THJ2bHRpa28yZkNXbnYxUm1VSmhWZ3M4Y2hzQXI0VUJzRWpBS1M4S2orS25nem9vaFhCcWo5bFR5SzdqeUl1RERsejc3TW5nZHlOQWF0RmJHQXNreTdzSEZGYTc5Q3U4RHorL2FMY0hQQzRia1pERzlRanYxVmVQYXEramxpM016YWhMMWZseVRBWXplb1NJOGJzZ1paK1FiSGhya1JvWUwrRmRmbkZEYzhFcTRISWdRTjBtazRDMHNHV3ozTmJqRnFLdVZBNjB5N3ZaMDRDck9lcFFVNElSa0tCcmplVzVpYlBIZlFYZ3BCeXVSbVpMK0U0YUFCZ3lwdXNubjVpU0FkQnA3OW9vd3Nmak50dWlGUy9weEprY1dneFFYdEw0K0lQMTdBTS9wN1Bsc3A4Y3FKalNMaS8zaG5YZENnVGxqNTJUVzRMbXpncE1iWll6MmhKYXhWakJRYUVZOERIdStCUXFZNWhsMUFZR3BWWXRROXFnWWx2OW9nYnZIMzFaRGRIYWRWbEtlbkcyeXhUODJEa0thV1dJNXFoQ0g2UW9OYmNPQVdxbTE2Z3lkc2dqa2pqeUJzaktJWkFJeGlEUXlmUEVNcm55eDNKUVJOYXA4M2FtdVBYQ0JVZkJES0FBckhYaGpxcENENUFyck5TSWs1UE53bTVWYUhIMUlUL0x6YmY1SmxXWWhjejU4M1gxdDdROE91aDVPekYwN0kyQU03bFpIdHBkeEUwK1FnVGxqM2d5eUR2UHlBdFhZQ3lhOTNmUjJ3b3BhMmhMeU5QcUNyV3drWXRoRXQzRzh2VHA1eDVQRGNCNkpGcVIzUkN1MHdiQW1KZzUvdlVaUGZpL3FKdnlWNENnd1NiTVhBa3QyNll1Wm5FcElkRkFEd254aHRiZGh4ZXpINzhKMzVOcE1zajI2bGFBKzF6V1V4eXVaS1loYzFCWUl0RWx3VUF4NEIxTkhlczdEVXd2NEpsVkVKU1Y5elJubUVHbE1NdDNOdkJRL0RGdGJ1bmxhVnVtLzlhZGw3Sm45WGl1aXh0WHk2djgrWkpmUTFRNEc0d3hqVXJ5UVdrVm1wUkJHaDVvRVYzTlNJQTNHdEtjUEUva1NRZ0dMNHFBd2dmV0F6M3BvRzNnUVcybHMwcEthRzk0Z1NZWG5wV1A5WWFBSFdoU3g5cEJwNERPK1hJelFMOFJEbi9LcFB3OHFrTkVHRC9iTzlDMys1eGpCUklYNVFHR291RmlFWWtoeG92MkIyTWdQUExWbjhzakVMVFNwdlEyRHdWa3ZNSjhjSXpUdFJ6SjhDM2JIL1p4alBXbGk2ZWUxdG5qbFc0ZGFpc0xySWRwcHdHQU9Wb09USDAyZituc1hHT3BmcmFydC85R0dBcmlKTFJKSjBuVC9UaG1DNXhWR0hzZ0RJMnU3QU9mbjh1dTFiR3ltNjdobTNSNmZLUmJBV2FCR2QwS1lBellLRUpSdzRaZ29CUEp4c2hXQWR3ME84TkVOTURqUUp1WjFPRjhQWWVQVGZLMVdiN3d3KzcwN1EvT1pCKzlkOUtVSHdOaGc5Q1ZYek1aTTBZWW9ERU5xWG85SHFDK2x1RmdPRWlDaDNTQWh6QnRDSW9mU1ZvY3JEdU1nTHNROU1vZG0wRHJuNlpjU1NMQjBLdGMrYjBEK2hacThHZjlKQmlNRUZoTVFPanBZQlRBaGJ3b2tzMms5c3d4NEMyeGRHa2xFOGRaKzExbWdsQUpWM2dJb1RCNUJLS1dIbVdSaUNRMG9GVHZhbEdNTVh0WTVqRUEwcFdKMDZmOUpDQmszYTlHWXN2NGRocUExWmlBK1hxalBuMnFhM0RFQk9vWjE3T09ucThNWFJwcCtSRFdzMTRKOG1VOUR2eWxUOHhtNzN2N1FQYm0xK3JWVXkzL2VmN2RKMFBBZlNHZWxRQTc3R1VIYlRvVnVLcHJrYmpxY0lzSk5sQ2NvQ0lvbmoraTBqSDA4TjA1OGNNZ3VPWCs2ZXo5bjcxb3kvNmFNdm1nREVwZmJQbzUzb2FsNkRuTWh5eVZ5aFg0UEVVMHd5MkEweUJGVlVlbkVrYVBhQ0NDZk5Gam1vNlBwTWtRNkZ0SWx4YXlDVWxlb3NpUWl0LzdEd0xJSnB6dWs2cWhoQ3BDM1VENGdnTFV3bXFBY05oTUpJME5UZnN3YXFoMDVaV0NjaXRrSWp3NGFCajFHQmNxNUxaNERFZCs0TU41Q1NuRjFSS0lic0Q1N0E5a01saWVuenVwWXNuenF3MFEyV0tXVGhrQWwwME9sK2VtbnU4Wk8yaHNJbVNHR3grRDJwVFRLQWhXMzdvb0ZxV0hxS1p3SEgwOXE4ODF2K3ZqTTlrLytjSGU3Si8rY0g5MlVHOTQ2UlJwcGx2R1RJK05iUlhBKzBpK1pHK21VTkM2M0JEY2xSMEQzQTBBQm92SGRpZ2Y3NXAvK0l0VDJWMlB6V1kxV1FJK1N1RUtDaXdmUDAzVHFJTjQ0WHd3Qnd5RE93eG00cUpGTktKSW8yUTRZQlI0U1RJSEFwU0tRZ0tFWUN6cENYbk8xUUxxdjF6UVRxR2NGMDdnSVR3cHNGeEM1YmNkUXBpQk1KNkwwZUF5Tlpsb0tXRHRLU29MTFF5azh3cFRtVmc1cFlUNmdqRk01VUhld0hFbzdrMEdGL0NibFVYT2h0M0NwQ3VBK2RtSjR6blpzTmhOcXk0S3RpSFVLUU1BYXk0YllGZjkwdW5uZWc2ODFqcUdSQk9vTFEySmJjWloxK1lGdkNPc00zT3NsRXJLdytiZlIrNWYwRHZ0QzlsYmIrekozcXpueU5jZjBHTWpuWWZuNVE2YlVaTXlIbHhOMmpaK1l2V3I1WEVhcGJIbWFJT1U1UWdyUjFwZjBHTytwL1ZJNmt0UHpXVmZlWHBlNzhQcnZRWlpoRlM1N2NTZnROVnZCVmd5bXJKSDZHMUhvWFBGVFJob1RsZkgySFFhaklBWkFnWjN6TThTM0p5WWRGeEFwRmZ5aEh3bWg5VXpwb1ZpT05LM1dHc3BoajROU3VnZmxLWStqS1JYWlhsRXlxblI5bURVYUZmQWVydXRLcy9ZeEFWeWpJaElpWGhham1TTHcycWUxOHM0RExrMkw0dFEzbDdVWWhVb3o5bUkrUXRuajBYS1J0SnJFU3pIazZTdEJUdHBBT0FJaHZIZEM2Y1BQemR3M1k4c1NzQlN6YTA3Vi9pVWdtMGFSZGxBTzBoSkcyc2FNVU5TSmg0QjNmcU5sWWxHOVFBQUdDOUpSRUZVaGV3MnZZYytyS09nSEkwZDF2MjJiUnlwUUZGR0pVUGhsTHlGZVJZOU5EU1VEUTRPNm15QlBwQXhPeHVVY0VYT3RSSGNldkNzbm1Pc2s5cTludEFqdTFtV0pYSWMzKzNuMko2RTVFcmViQWdZc0lVbm54bUNXR1ZUT09JTUtKODdDMUd1YVRTSGRCUXNkYTFremR5TWMwVk04Mjh1TEE2TUNHMWZSZWhLWVM2M2o0WmFubkQvYi9YRVR2T1NOQkVVK2YwZVBlVXh0TkJLaGt0WkpwUnV5a1FFbytNMUtGWUVJNkdRSjYwbnFXSGRvSlhXeFc0QnBmd2NYdFBEbmNWekx4NStUb1ZKNWk2Sld0MHIyRjdYYmdNQW96RHVERHVzVFIyNTgrVFk5LzNMbDd0cVBRZkpFR2FlbUZOZzQ4N0poeExGUmw0WUhNWUFXWENSRzU3NURtbFp5R2xCbm8yZm1kVHljc0pmSUZFbSt5ZHpMQk5DOFJyd0dJRGhrVVkyb3EvbVRPb3J1RFA2cGxXcWNFMUYxb3lJdWZCdk1tQjI1M3g2d0hsYVVPeFUyVmZNL2lvUXhuQlN4amtXcW5DRnFqczZ0dFE2S3VCUVJyR3djb1FYWkpMY0lOZk1tcFJhUHdnSGVMaHl6cHBMc2Z3UFN1MzVTRGVHN2RhQW1MWERTT2tTbGR0d0pLNXdMV1NTRXlCektHa2JuYXNTSVNFa1hvNHNtS1RzM1EzQllBQVdYLzdyYi80NWV3QllXcDVudGhhS0V0cmgybTBBa0FnTU95UnMvdUtoVDErNFpuSDJXSzEvOUdDdzFuU0NaOXRrVXhLVDY5S0JGbmVFcHBRUlNUMWhvMGtiUTZTcVJ6bExZTC9RYTZNcTNFT2kzTGxUT0lubEhKS0hNK0o4TUdOQkpudEpmck1HSUcwdFlSK29JV2lZbkdhVDhxc2h6WEVyWWZLTFl4MWkrYXdjS1Bud0pLKzdtRWZ5QzMrT2o5RHdKWnhIaTRvYzAxNlk5R21aY05vZlJhdThsVVVxR0ZZQTRkRmltVXFJZTZraTFlVzJNb1U4WVpWUzVNNURiWkFIblBNSUU4WEhjd0NzSVIwNWRPOGQ1Mk05clZZQVJZTnpaclllYUxjQktITUNzOTZJdWFXNWlTZTZoMFovR0ZFalB3YmhNZ2VmdCtBZzNDUUpHN3htQWtRMU9NWVVadFR6RnBCT1Z3eGxCNmt3d0M1VzJHSmdjb2NCWU04QWkwMm4rWVpjbm1HVmdQT3lNam1tQ0lSUUNKaGlFclFCcHBnZ3F5VUVaampEczRJeUpBbjZEL3pTMXVCSVMxMFJiNXF0U3Mya0p6eW53NXlLQ1NxUGJVc0E5a29zTnRVYjJvTEVtdDFLVEhONmlCV2xYQ1psRzBUZGJGT1RzOGdkU2llN21SR3hOY0IzQ1ZCK2JnTllDZFl2VER3aFN1VkhnRnNqdm9GUzdUWUF5QXhaZWQ4NVpHelZGbDcrMXFORDQ2OWlMQWVoS3VBWk5zQnJrWVZDY2lzNlJSZzYwMjRHbE1pWXRUeFdIM1hGUDJVS3R3NkNsc0VLV2VaSU9sUmcxNERCQUFURmx3RVEzOTNzTkpzU0psblhEVnBsSzNJRk1uSFlLaEo0Rm94OFUwOVJGL2VsdENYUTRvb1A4WUJiVVVFWmdWeThvV2s0NWlPcHJBeGxFaDJQUi80MjJLSW9EYmphYUltVkxjaGxVa295ZVZ3ZTZSTEZFTVZnczFuTmkxc1lBUjREbmo5MVROOUlVbmNXbnN4UkdnVGI2OXB0QU1yY3BRMnBUVDk5NTVPRDEvMjlLYzJlSXd4dVpqWWI3bTJhWFh5NWhwcEQyWmI5cWloOGV5L2czQXpBS0t1QVVMWFM0cmhaeVFybDZJSHdyQm1lN2JDSjd0MExwYlFzRzdqRVNtSk9aRkM0b1BERVRlRmh5TklkSCtLbS9MRWd5Y1JOV3kxdm9CWTREdUd0WEkzVTVSTFpTc1dYVVFhZUV4RmNCcVdWUlhPNmJaUUpwTUlKUnA1SWhkZTN1K3JMVTg4K2RPZVRTc0kyYUpzNFh6MHJhSU82alJ4QU1wdy9DYUgyWG1IVVBiTy9yUzdQUHZqQkYvYS85YjFIYW4zRFA4QVlSdm41QzFtM3dFQVVSOTVCT1lsQUV4TUFiYkpaUFdiaWkvcHMvYUZvMHg1QVRpeVU4MkdGWVdEWmJRWUFxT09tVVEveldqY2FnSmZBVTFHaU1DWml3UDRESTZHT1psd29GVnJuRk5MWks1VDBsQUNqcVBJSWVTaGp2am5yem80MU5TU3dhdTBGTHgrM2RqYlVoaGFraW5LdGhGaWtYbjVJbFljdk5vV25VWVAyL3NmY1U5KzQ0N2RmRUhGcWp5M0tJWFU2bm5CYlhDZFdBRENlaW85NE1BSnpjN05MazZjZjZMdjZoaDhJaWhTVXF0V0p2SzIyanNwdy9vakpURXdxTm9WSnN6MkF5R1pnMWt1RzhselRoaEF1RElDK3ZxTjM4amRyQUx5R1ZEaWhOcGdLSWE3QldDWHhwb3FVS2tLYlhhSW41RU5Wb2tHbndGTnFQSXBhZDFmSVpic1pybE9ackNpM0ZZSXJpS3lPb0c2K1ArQWZic0VBekowKzg4RGNIRyt3bVBQdWdaT09jVlBzRzhWYTJ3aWM4YUQ4Y1Q5bDl2aFh2Nnl2Tnl4aEFCalh4V2JXRm12MldnU1pwZkhGZ0ViTWVOVmpvUmlQOWJKOERnWkNWeTNwN1hVeW1JcmVadVZTM1BuMlBKdUJ0clJQNklXeTRWWUNQdURIbHZUR2N1QXRQNWlqTkc4TDdURWprTFI5SzBNRUdvV3NvTHA3M1c1ckM4dC9QZ1hPdHhuNGRhVGFVbVBweEZQU2pUQlVYV2U4aDcxamlMZlZkV0lGa0RMb0RmQUcxYzcrdjE5K1l1d05QLzlFZDkvd0cvbDBGd1lBeGVCVHo1dDFHeTNoZXdPMko2QksyREN6c3VoNlFtVGx3cnpnaUd6b0xub0l2OEY0Rk9sYkQwRTBPSi9WWXpXbThsUUlqNTdtZVlId2xMQnZrWUphbXJNNWJQc2NTVUdMTjJmWlZiRzB6VDRKN1BRRzhFaVpsNy93STNwSHBhcysrL2dYUC9wdW5nRFFITmNYNElwdWJtZmJPbVVBZkhnNTgzbUQ5R2JnZFAzc2tVLzF2ZnI3Mzhoc2FtOXdhZllOUno2OTJPYWFtQTRBS3huSnJNQ2pUTW9ROEp3MWwzUVZLWXpBeWhJcEo2U0dsUVRZdGZPbTVUWVNOajRpMWNCbFVZcWFuTWRjUXFYcUhlK3dLTDB5UkI2ODBWUmdJMlZXVXRsWkdOcXlRa1k3aThXY0c1NGlEZXZFSjZkUitTRVVQbEI2NmJtam41dzRjNFp2QU9CNCtsanVsbkxjTWw3dXBWTUd3UG1DYWZjMEN0OTM1djRQM1BYS2Q5NzJpOTNkUGRmd0c2Z3NoK3hUMUZ0WUJYaEZtNGVheGFOSVU4bW00WlUwWGV0TUpWY21id0hqRkoyWDlleUs1eThQanh5L0FSN1MyeVRLNVhWdm9PeE96NElSMk1udFlYenh3eXg4bWRobWY3Ny9VRjg4OWVYYjN2OEZKZW1Cb0wwRm1FK1lpdnVRcEtzOHJHQjdYQ2YzQUp4RG1QWUdtV1diZVBLVHArb1hqLzFaTi9jK2FsWllDUlJ6cXhlOExFaXQ2L2xZQVpKMUR4ZnVIZWN3WmpmZ3VNMUNwKzNReStlMDErT1o5RFk0cTlmcmFnTzlLMDBpWFFGY2FWN1dxcDhYZi9oMEdlK2pqR2dGc0VkZnJKbysrL3p0VDl6N1p5ZFZqaDVCUjJ4eFdxTFRwcDV2cHNvNDdLVHpJUWFrVVRTTzg4MjFsKy83NzdmcFlQNFp2dHpMYlVENFNLV0daVnJpY3NLcVpMT3VYRjI1UEVxRDg2Vm1pRzN1dWw0ZEc2SldKcktGdU4wcnF6S0t0azNtVytDakhYWFRIMTUxSG5ERURvT0Rlam1OSHlSaDJjODNLN3VYbHM1OC9YYnBRcGgzWFBsOXdreTVwNmZhN2pwcEFHQWVCL1FHMFVCODQveWpmM2hpNGR6UlA3SlZnTGl3dllCNHVpNXQ5UlVMcTJMZlVIS1lEeTRhMENKOXd6aktYMkd2NnEwTk1IS2xlV2xML2JRRFFyUnJoM25uaVM4eWora25oNW45OGVQNlhOM1VxV2R1ZWZDdWp4d25qeHlUb3hzQmI0WWxkT3JTU1FQZ1BIdEQwaFVBcDV4cUp6LzM3MjV0ek0wOTA2TkhJZmtaZXg3SGVZbHRocjZNTkNnR2ZYbnUwQnNFZE55V29OcmxkVjJwdGxxOTNxQnRsbk5IMmh6YllrWmdoN1VIbm5ocU5Dcmw1eWZZUitWUmZuMnUrcG5QLys0djNxb1E5LzdvUkQ1Qkt1eXRVTEJ6cnRNR2dFYmd2REZ1Qk16S1RUOTMzem41MzlMRTM4QUEySzJBTHZhZCtsQnVaMTNWQ2hTM1NYbDJGb2ViNHViYnJTM1duazFKWVBzeUQybmpiMXkvUE1wSFgvbU5SdDBDTkU0ZXV2OS9IWDMwM25QaUFuMUlaMy8weEhXbm8weDIraWxBeWp5TllzTDB4bUx4QnA3LzQzLzRoYi94bjE3NmJNK2Vneis3ekk5NHlCYjI2TUx2dlRVZDBVMHBYWWt3eXAvVWF6TjRFdDlWd2NTSTJRcG1XNGJhOWtqSSttVUh0UWRXZU9hL2QxaXp2Kzc1TVFBSDltcTZ2M2o2cy8vM3YvNGtPLzlNd3J6OVo1T2lvUGVPdDhLaGt0cnZPcjBDZ09PMFFZUjlGWURGczJYUG1YdC81VGV6aFlVVFBYb3FZTGNDTWdMZCtrNjJuY1NEUXVVcUNleENDVERZK2RqSHVIN0loWjhneHdEczM2TUpibW5oeEpjKzlxdi9ROGsrR2Zyc254b0JXdHhSNWFlQzdUQUExSU56NVM4YmdPVUxEMy8weE5Rem4vLzE3bHFqYms4RnpBRG9PYjE5M3owVXJxNlZCSGFiQkhqa042NWZjOXFuUjMzajhudjFReldqQTQzNmM0OTgvdGNmdXZNUFRxZzk2QUtUb0JzQTR1aEp4eFZmZFpqYlRnTkFoVzRFVXN1SEFHclAzL3FPZXhiT0hQbFFyNTZOOGlNWjV2V3VOQ3VCeWxVUzJHMFM0SWc3UCtXMlQ3K0ZaY292QTNCZ1hEOUtldUxJaC83a3ZlKzRXKzFCOTlaUy9tMHhBdHRsQUx3eHdMSVJRQWo0cnFOLzhLYmZYN3A0OGpOOWVrU0MzdHRYVW5WUFVLdU1nTVJUdWQwaUFWZisvVkorWnYyOVV2NnI5L08xMzlPZi9yMTN2ZWwvcXgzb0hkLzlYOHNBYkV0enQ4c0EwSmkxakVBUXh2ejh3dkZQdlAzWGxxY3ZQTkNybmRLd0NzQVE2UFhieWdoc3k0Q29Lcms4Q2ZDeG1EMjY1ejh3MXBYdDE2TStsdit2T0NDYUd0TzN2KzluZm0xK250K3FNc1ZQbGQvdi9ia0Z3TG11aEZnSHI5dHBBTHdadmdJbzd3VmdCSmFtWDN4bzRvVlAvK3RmYnN4ZWVyUlhLd0ZiQmVoWlJiZmVuZGE3QTlYR29FdXhnanRPQW54OW1sOXV2cXFrL04wTFU0OTg5a1AvNXQzSERuMXpnakV1WDU3OTBZbHRVL3BVY0ZmaUJ0dWZwamxNK1FIWFBYL3VxZG5GeVZOZkdiN2h4OTdZTTloL0RTS3p4MVh4ZmR3cjlYaXdUOGM0Ky9RTzk0Sys0MSt2NjZYaVZpMUlXN09EdzkwYXJJTTZtTUxIV09iMCt3UzczZEVXWmwvYTRpY0N0N05OL05UNFB2MTBPelAvUGkzNzhkZGNwUWxzL3RJamQzMzRsOTcxNkQyM3ZpUitFRFRLajA4My9zQzdBWEFvVk9mZGxUQUF0QXJWS1RjMFZhZnV1WmYrYW5yKzdOUDNqNzMyNzkvWU16UjRuWDA4T0ZnQktWNVl1R3kzSWFnTVFPY0g1RlpydUZJR2dFZlZ3d1BkV3U3amcrTHZaOWt2NWUrYXZmalZ6L3pPdi9vUGo5N3pDWlNmOGM3ei9yTHlnM2RkY0NqVTlyZ3JaUUJvblN1OHczS0x1eGZPSFptZGZ2YUw5NDY4L3FjUDlvMk0zb2lZTExNdXdRaXNWclJNcWozeHlnQzBSNDZkb0hJbERFQ3Zia3YzYUtmL2dINTMwbWQ5bnZOZnZVOWFmdkhVcDI5OTcwKzk1K2hEOTV4WGU1bmhVWDYvL3kvUC9vaGsyNVdmU25lQ0FZQ1AxVnhYZmZMVTRzdGYrNS8zN2ZtYjc2ejNqVjcxL1YxOGpBOVJtUkVJWHhPaThIWklyeklBcTNYVGxjZHZwd0hnK3hVam12WDNqV3JXMTA0L3lzOXUvOVU2NGJkM3VGR2ZlT0h3QnovNEwxNzdHK2ZQbnB5VlpGQjJYL1pqQU5nRDhFMC9IN1lPbGJTOTdrb2FBRnE2MmhUdUFnRmFudlBmL1BBM0I2NTU0NUdCZmRmZjNEM1FzMGUvb1JidXdiVUU2K0l0d2tqS0MzWkNqSlVCNklSVTIwTnpPd3lBZmNldlg2ZjZ0TkhIOC8xOWNjbVBBVGlvbmY3QnJ2bmp4eDc2OC8veWY5NzlsdHVrNGN6NktIeTY3UGVabjJIcXZqMEMyQ0tWSzIwQVlIczlJK0JONjVsNDRrK2ZsWG45MHNncmYyaHY5K0Rvalg1UUVBTGNpM0ZiME1uanc1VUI4SzdZZWJBVEJzQm5IM2IzQjZYNExQZE44WFdQNzgvM3I5TGhIcDd6TDAyZStzemRIL21QLy9tdWo3em5NWWFqdk0vNndQTE1mOFUyL2NvOXQ1cnlsZk4xT3U1OEFObmh3Mk9jOEhwWjJMemVGTWp3aHIvK0Z6Ny9FNFBmOWFQdnF2VVB2MjVSNGwyU1owYzc5OW9LNXNkQTJTaGNabHY0TXJlR0tUNGl5eitzbHpyQ2o0UHFOMnVkYXpHMW14eHQ0WmVJOSs3dHNhY1pGeTh5TWUxdVIxdDRzbkhod21LMnBCK0EzWXFqRkYxS3Z6TGJvL2k4eURQWXowWmYrSVFYRU0vSFBNWTE4OWNXWm8rZWVQSytEOTN5S3ovMUZ5cnF5M3RYZmhRZjRhWXovNDVSZnZHMTZ1eEwyblk3VnllZ0d3RWdieXppVTBOQWVIbndOWC8zd0t0LytzUC91SGYvamY4czYrazlpQkZZa3FneEFqdzFNS2hleFFBdzZCdENLQlJzQVloTk9MSlhCbUFUQXR2bXJCczFBR212KzREajVCNnZvcVB3K0g1K3B0MjgzdVRUbE1ObnUvRkRVbnplNVIvVGpOKzlWRDk5NmRTUmozL3V0Ly85bng0NzlKVnphaTVqRllYM0dkK1YzNDJDSzc2ejRIQ2JKZFZjbmN1Z0dYdmxZczRQRU8rR0FBT1FyZ2JjR0lCZkhyLzVGMTU5OVZ2ZTgvTzllMjk0UjliYmZ5MGZHc1VZbUJHUW1JRm1BQWliandaQkVmN3Nud1M1L0JvQ2hqTzg0cFVCeU1WeDJRSEU2NTFkRW5VVGJmS3NsZTZaOTYyeUFyQTZkR0dQaUpuZFozZi9vVmNVbnQvbjQ4QlpuMFpWL2t1OU1jd1Bkd3pvL1pSUnpmak0vTFhGK1pPVFo0NTk2b0hiZnVPVEQzL3hsaE9xbnpIS0RJL0N1MDluZlJSL1J5cS8rTXI3Z1BCT2N0WnZZc2dOZ0VOZkRhUXJBb3dCNmN1anIzL2JOUWZmK3FzLzNuZmdwcCtwOVkxOWp6NHIwSTB4V0U1V0Jia2hVQUhUZVkydXFQdUNaZzd5RVplZU0rQ0R4U1BEV2dyS1QwMDFzdWxwL1FpMWN5bGF1STBNMUpEenlsNXByOTBDak5mQ0xjREV5aC9VTGpYTkdBYVgvajZCeFlWcmxkZGI2REpDTnF2bGE4SjdwRVVCVHpJWUNSTW1PTDYzWmtvOE1kR3dXNER3ZXhNYUdFcGpkamVGVjlpT2x5dXVKM2dXNWxkNVVmNWVqU2ovbFY0TUFUL1Z6WXpQTC9iVWxyUzBYNXA2L09LSnB6NTMvKzN2dS92UVZ6LzNVbXdPaXUxS0Qwd1ZuNW5mRlIvb2JrY05FK1MzVTUzekJrVEIzYXU3N0pZQWlQSzdVY2dOUWRZN1BITHRQL2pOTjR4Yy82Ti9wM3YwMVQ5VTZ4MSt2WHA3bEJGb0JrRmRZNnNDZFl2MWhpNG9oWWRGYzBXWS9DTmErZzFySnBqVTE5dW5wOFBBSTY4NUsreVJuUTJEQWREbUZSK20wTENkNElDcW5BbGNGNkFyYmc3WHdLWGx5blNJUTlEeUpPRnlQQ2JsR1QwOXJUK2xBOTd5QU9YSDlmeWRWOGtuMVJadS9WQjg4S2I4Z3NVWHAwTFlEWUROL0NnL1NxK1pIc1hYZ2lEcldsNmVYSzVQSFowOS8rSTNqaCs2LzRFN2YvZmRoK3YxYWI3Ynp6aEVvWDNXZDZWM1NGcnFmV1E0VlBMT2NXcnFqblVwYjRRUnZFUENHQUEzQm00RUhJSjNnUS91Kzl2Lzl0cXhHOTkyVTkvK04zeHY5OUNCTjlSNmhyNHJxL1h1VjJtOVhCQ1ZYMTNtdHdxVU5JUGdGR0ljNWNkUHRUSUFxckNWY3hLdDBxNFVqcll4NEZNRGdHQk5xUlJ3NVhJbGFrcEw4NjBYcG9IUTgzeWJpYStSMTJnNlhXaHJOT3pSSXpsbTk2bkphQUNFODluZlBqS2pPT2tvUE4rZ1pNWW5ySC9VZFZHZm9uaDVlV0htK2ZucGM0ZlB2M0Q0OFdjZXV2T3ByMy8yOTA4cWxkL3Fvd2s0Wm5WWGRJZmczSmNWMzd2ZklUUjJsUE9HN1NpbVNzdzRqMEQzR0FEQzlGL1pZd1RBT2ZTOGRBNWwrclV5MkR2eStwOTh4ZUJWTjEvWHMrZFYxM1gzNzN0VlY5L3dLN3E2Ky9kMzFmcjJOR3ExNFM1RjFHdTlkdXBZcGVoQlZnRDRTUTB5WHdHZ1RPdTZqZVJabDBqN01wZ0IwRXlYR2dCVEZyWFRaczBFdWhGWUMzcGFXdGFOU0JOT1RUQjhwQzlRMUplbXBlRlNYaStUMDFGZVp2a3g3Y2lqNE16UnJBQXNIM0tYVjdpZU5aYm1hNDNsNmF5eE1MRzhPUC95MHNMMFMvTlQ1MStZdW5EeStYUEhIajl4N0xHN1R4MTk1SjZMS3NGemUwcENBdWZLN2NxZlFrOXp4WTgxMmdvZ2xBNjBQTHpqb0RkeXh6RldZaWpsazdCN2xEdjFaV05BbXVNODdHV3BnZzdEa2RiYk83U252Ly9nelVPOTQ5ODkzTFBudXVHKzBZTWpYUU5qSXowRGU0ZXk3c0doNFpHQndhR3hnZjdaK1o3K3VibGFmNjI3cDBjZks5QXFRZytndW1yYVRxcnBSMmthZ2h4STBQZERPWlRRMEYwemYxVFJXS2J1SGVIRWViWkh5K1pGeldOVGx5UlFzU2ZHRFpwQ2kwdFRYdUVSanVFSWswZnhwcndSaHlLYVlwS2ZzSmZ6ZE1VaFpuUVZOT01LVkxyUWVWbkpVcUpqajZXcm9mclVSeEtpQkN1MEh1TjBMVW1PVXJqbEpSWFR6OHd1TERVYWk0dURBOHZ6V1dOeGZ2TFMzUHpTL056c1luMTJabUhxd3N6Q3pLV3BtWW5UVXhObmowOWZQUFhNOU9uamZ6VXpNekV4cCtxNFowZHhjVlNQWXp5NE1xUGNoRjNKVStoNG9KY0J1bGZRSFBFZDdlaWozZVJTZmdtN3B3TnRERVdJMGpzT1dJNm5hZER3c2dvYVRTRE9PNVE4M3BrZUJ1SWNsc09XV0VwM1hBVTNMZ0dYZTFvaXhYbllZWnFQc1BkUDJtL2tkZVgxTVBIVXV3RndYRG51NVlEdUZUUkhmRmM0Rjg2dVlEWmhNdVdiY09wZG1WUFlTdUU5bmJKcE9LWGxZYW9takhOWURsdGlLZDF4Rld5UEJGb3BWaG5uY1dBNTdEaUhiZ1JTV0E2N0FTaVg4VGpRWFJwMjNJNkc2V0RlMFl5dXdsektQK0gxZktyb2FiaFZPYXAwdklkYlFYQ3BvMHpsT2lPQnRSVE0wMXJCRkVlNDdGM3B3YWRoajlNYThMaTBiTUFVaHNianV3Wit1d3pXdEIwZUJwYkRhK0hLZWVuRWN2NjBZejEvaWl1SE41S25YS2FLcjVRQVNyY1JsK2J6c0NzczVWdUZIZWN3elZmR2VSb1FSL3F1ZHQ5T0E1UzIwQ0hsTm5rY21JYnB1TlZ3cExrcmwzRTgwTk5TWEJwZUx6M05XNFZYbDhCNml0WXEzWEVPb2U3aGpjQnlIdWZPOFI3ZjFmRGJmWUNXMjVmR054S21jOU44YVdldmhrL3pWT0h0bFVBcjVVeHhhUmpPUE80d3hhV2NrMDUvcC9uUzlGMGIvazRaeE41NWE3VzNuTGFWTXJ0MklPeHl4dGRTek5YUzFzTDdXRmd0enk0WFY4RytON1RBZkdlRkxyZjlsMXYrTzB2YW5XdnQ1U3JxNVpidlhNczZUTGthd0JzVGNDV25qY2xwcCtYNmpsWHNuZFlSRlQrVkJDb0pWQktvSkZCSm9KSkFKWUZLQXBVRUtnbFVFcWdrVUVtZ2trQWxnVW9DbFFRcUNWUVNxQ1JRU2FDU1FDV0JTZ0tWQkNvSlZCS29KRkJKb0pKQUpZRktBcFVFS2dsVUVxZ2tVRW1na2tBbGdVb0NsUVFxQ1ZRU3FDUlFTYUNTUUNXQlNnS1ZCQ29KVkJLb0pGQkpvSkpBSllGS0FwVUVLZ2xVRXFna1VFbWdrc0RHSmZEL0FiUEhaeUY3ZWlnRkFBQUFBRWxGVGtTdVFtQ0MiPgo8c3R5bGU+KiwqOjpiZWZvcmUsKjo6YWZ0ZXJ7Ym94LXNpemluZzpib3JkZXItYm94fWh0bWwsYm9keXttYXJnaW46MDtoZWlnaHQ6MTAwJTtvdmVyZmxvdzpoaWRkZW59PC9zdHlsZT4KPHN0eWxlPi8qISB0YWlsd2luZGNzcyB2NC4xLjE0IHwgTUlUIExpY2Vuc2UgfCBodHRwczovL3RhaWx3aW5kY3NzLmNvbSAqL0BsYXllciBwcm9wZXJ0aWVzO0BsYXllciB0aGVtZSxiYXNlLGNvbXBvbmVudHMsdXRpbGl0aWVzO0BsYXllciB0aGVtZXs6cm9vdCw6aG9zdHstLWZvbnQtc2Fuczp1aS1zYW5zLXNlcmlmLHN5c3RlbS11aSxzYW5zLXNlcmlmLCJBcHBsZSBDb2xvciBFbW9qaSIsIlNlZ29lIFVJIEVtb2ppIiwiU2Vnb2UgVUkgU3ltYm9sIiwiTm90byBDb2xvciBFbW9qaSI7LS1mb250LW1vbm86dWktbW9ub3NwYWNlLFNGTW9uby1SZWd1bGFyLE1lbmxvLG1vbm9zcGFjZTstLWNvbG9yLWJsYWNrOiMwMDA7LS1jb2xvci13aGl0ZTojZmZmOy0tc3BhY2luZzouMjVyZW07LS1mb250LXdlaWdodC1tZWRpdW06NTAwOy0tZm9udC13ZWlnaHQtc2VtaWJvbGQ6NjAwOy0tdHJhY2tpbmctd2lkZTouMDI1ZW07LS1sZWFkaW5nLXRpZ2h0OjEuMjU7LS1yYWRpdXMteHM6LjEyNXJlbTstLXJhZGl1cy1tZDouMzc1cmVtOy0tcmFkaXVzLWxnOi41cmVtOy0tcmFkaXVzLXhsOi43NXJlbTstLWVhc2Utb3V0OmN1YmljLWJlemllcigwLDAsLjIsMSk7LS1ibHVyLW1kOjEycHg7LS1kZWZhdWx0LXRyYW5zaXRpb24tZHVyYXRpb246LjE1czstLWRlZmF1bHQtdHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb246Y3ViaWMtYmV6aWVyKC40LDAsLjIsMSk7LS1kZWZhdWx0LWZvbnQtZmFtaWx5OnZhcigtLWZvbnQtc2Fucyk7LS1kZWZhdWx0LW1vbm8tZm9udC1mYW1pbHk6dmFyKC0tZm9udC1tb25vKTstLWNvbG9yLXBhbmVsOiMxYzFjMWU7LS1jb2xvci1wYW5lbC1iZzp2YXIoLS1zZXJ2ZS1zaW0tcGFuZWwtYmcpOy0tY29sb3ItcGFuZWwtYmctdHJhbnNsdWNlbnQ6dmFyKC0tc2VydmUtc2ltLXBhbmVsLWJnLXRyYW5zbHVjZW50KTstLWNvbG9yLXBhbmVsLW92ZXJsYXk6IzE4MTgxOGE2Oy0tY29sb3ItcGFuZWwtZGVlcDojMTExMTEzOy0tY29sb3ItcGFnZTojMGEwYTBhOy0tY29sb3ItYWNjZW50OiNhNWI0ZmM7LS1jb2xvci1zdWNjZXNzLWVtZXJhbGQ6IzM0ZDM5OTstLWNvbG9yLWRhbmdlcjojZjg3MTcxOy0tY29sb3ItZGFuZ2VyLXNvZnQ6I2ZjYTVhNTstLWNvbG9yLXdhcm5pbmc6I2ZiYmYyNDstLWNvbG9yLXdhcm5pbmctc29mdDojZmNkMzRkOy0tZm9udC1zeXN0ZW06LWFwcGxlLXN5c3RlbSxzeXN0ZW0tdWksc2Fucy1zZXJpZn19QGxheWVyIGJhc2V7Kiw6YWZ0ZXIsOmJlZm9yZXtib3gtc2l6aW5nOmJvcmRlci1ib3g7Ym9yZGVyOjAgc29saWQ7bWFyZ2luOjA7cGFkZGluZzowfTo6YmFja2Ryb3B7Ym94LXNpemluZzpib3JkZXItYm94O2JvcmRlcjowIHNvbGlkO21hcmdpbjowO3BhZGRpbmc6MH06Oi13ZWJraXQtZmlsZS11cGxvYWQtYnV0dG9ue2JveC1zaXppbmc6Ym9yZGVyLWJveDtib3JkZXI6MCBzb2xpZDttYXJnaW46MDtwYWRkaW5nOjB9OjpmaWxlLXNlbGVjdG9yLWJ1dHRvbntib3gtc2l6aW5nOmJvcmRlci1ib3g7Ym9yZGVyOjAgc29saWQ7bWFyZ2luOjA7cGFkZGluZzowfWh0bWwsOmhvc3R7LXdlYmtpdC10ZXh0LXNpemUtYWRqdXN0OjEwMCU7dGFiLXNpemU6NDtsaW5lLWhlaWdodDoxLjU7Zm9udC1mYW1pbHk6dmFyKC0tZGVmYXVsdC1mb250LWZhbWlseSx1aS1zYW5zLXNlcmlmLHN5c3RlbS11aSxzYW5zLXNlcmlmLCJBcHBsZSBDb2xvciBFbW9qaSIsIlNlZ29lIFVJIEVtb2ppIiwiU2Vnb2UgVUkgU3ltYm9sIiwiTm90byBDb2xvciBFbW9qaSIpO2ZvbnQtZmVhdHVyZS1zZXR0aW5nczp2YXIoLS1kZWZhdWx0LWZvbnQtZmVhdHVyZS1zZXR0aW5ncyxub3JtYWwpO2ZvbnQtdmFyaWF0aW9uLXNldHRpbmdzOnZhcigtLWRlZmF1bHQtZm9udC12YXJpYXRpb24tc2V0dGluZ3Msbm9ybWFsKTstd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6dHJhbnNwYXJlbnR9aHJ7Y29sb3I6aW5oZXJpdDtib3JkZXItdG9wLXdpZHRoOjFweDtoZWlnaHQ6MH1hYmJyOndoZXJlKFt0aXRsZV0pey13ZWJraXQtdGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZSBkb3R0ZWQ7dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZSBkb3R0ZWR9aDEsaDIsaDMsaDQsaDUsaDZ7Zm9udC1zaXplOmluaGVyaXQ7Zm9udC13ZWlnaHQ6aW5oZXJpdH1he2NvbG9yOmluaGVyaXQ7LXdlYmtpdC10ZXh0LWRlY29yYXRpb246aW5oZXJpdDt0ZXh0LWRlY29yYXRpb246aW5oZXJpdH1iLHN0cm9uZ3tmb250LXdlaWdodDpib2xkZXJ9Y29kZSxrYmQsc2FtcCxwcmV7Zm9udC1mYW1pbHk6dmFyKC0tZGVmYXVsdC1tb25vLWZvbnQtZmFtaWx5LHVpLW1vbm9zcGFjZSxTRk1vbm8tUmVndWxhcixNZW5sbyxNb25hY28sQ29uc29sYXMsIkxpYmVyYXRpb24gTW9ubyIsIkNvdXJpZXIgTmV3Iixtb25vc3BhY2UpO2ZvbnQtZmVhdHVyZS1zZXR0aW5nczp2YXIoLS1kZWZhdWx0LW1vbm8tZm9udC1mZWF0dXJlLXNldHRpbmdzLG5vcm1hbCk7Zm9udC12YXJpYXRpb24tc2V0dGluZ3M6dmFyKC0tZGVmYXVsdC1tb25vLWZvbnQtdmFyaWF0aW9uLXNldHRpbmdzLG5vcm1hbCk7Zm9udC1zaXplOjFlbX1zbWFsbHtmb250LXNpemU6ODAlfXN1YixzdXB7cG9zaXRpb246cmVsYXRpdmU7dmVydGljYWwtYWxpZ246YmFzZWxpbmU7Zm9udC1zaXplOjc1JTtsaW5lLWhlaWdodDowfXN1Yntib3R0b206LS4yNWVtfXN1cHt0b3A6LS41ZW19dGFibGV7dGV4dC1pbmRlbnQ6MDtib3JkZXItY29sb3I6aW5oZXJpdDtib3JkZXItY29sbGFwc2U6Y29sbGFwc2V9Oi1tb3otZm9jdXNyaW5ne291dGxpbmU6YXV0b31wcm9ncmVzc3t2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZX1zdW1tYXJ5e2Rpc3BsYXk6bGlzdC1pdGVtfW9sLHVsLG1lbnV7bGlzdC1zdHlsZTpub25lfWltZyxzdmcsdmlkZW8sY2FudmFzLGF1ZGlvLGlmcmFtZSxlbWJlZCxvYmplY3R7ZGlzcGxheTpibG9jazt2ZXJ0aWNhbC1hbGlnbjptaWRkbGV9aW1nLHZpZGVve21heC13aWR0aDoxMDAlO2hlaWdodDphdXRvfWJ1dHRvbixpbnB1dCxzZWxlY3Qsb3B0Z3JvdXAsdGV4dGFyZWF7Zm9udDppbmhlcml0O2ZvbnQtZmVhdHVyZS1zZXR0aW5nczppbmhlcml0O2ZvbnQtdmFyaWF0aW9uLXNldHRpbmdzOmluaGVyaXQ7bGV0dGVyLXNwYWNpbmc6aW5oZXJpdDtjb2xvcjppbmhlcml0O29wYWNpdHk6MTtiYWNrZ3JvdW5kLWNvbG9yOiMwMDAwO2JvcmRlci1yYWRpdXM6MH06Oi13ZWJraXQtZmlsZS11cGxvYWQtYnV0dG9ue2ZvbnQ6aW5oZXJpdDtmb250LWZlYXR1cmUtc2V0dGluZ3M6aW5oZXJpdDtmb250LXZhcmlhdGlvbi1zZXR0aW5nczppbmhlcml0O2xldHRlci1zcGFjaW5nOmluaGVyaXQ7Y29sb3I6aW5oZXJpdDtvcGFjaXR5OjE7YmFja2dyb3VuZC1jb2xvcjojMDAwMDtib3JkZXItcmFkaXVzOjB9OjpmaWxlLXNlbGVjdG9yLWJ1dHRvbntmb250OmluaGVyaXQ7Zm9udC1mZWF0dXJlLXNldHRpbmdzOmluaGVyaXQ7Zm9udC12YXJpYXRpb24tc2V0dGluZ3M6aW5oZXJpdDtsZXR0ZXItc3BhY2luZzppbmhlcml0O2NvbG9yOmluaGVyaXQ7b3BhY2l0eToxO2JhY2tncm91bmQtY29sb3I6IzAwMDA7Ym9yZGVyLXJhZGl1czowfTp3aGVyZShzZWxlY3Q6LXdlYmtpdC1hbnkoW211bHRpcGxlXSxbc2l6ZV0pKSBvcHRncm91cHtmb250LXdlaWdodDpib2xkZXJ9OndoZXJlKHNlbGVjdDotbW96LWFueShbbXVsdGlwbGVdLFtzaXplXSkpIG9wdGdyb3Vwe2ZvbnQtd2VpZ2h0OmJvbGRlcn06d2hlcmUoc2VsZWN0OmlzKFttdWx0aXBsZV0sW3NpemVdKSkgb3B0Z3JvdXB7Zm9udC13ZWlnaHQ6Ym9sZGVyfTp3aGVyZShzZWxlY3Q6LXdlYmtpdC1hbnkoW211bHRpcGxlXSxbc2l6ZV0pKSBvcHRncm91cCBvcHRpb257cGFkZGluZy1pbmxpbmUtc3RhcnQ6MjBweH06d2hlcmUoc2VsZWN0Oi1tb3otYW55KFttdWx0aXBsZV0sW3NpemVdKSkgb3B0Z3JvdXAgb3B0aW9ue3BhZGRpbmctaW5saW5lLXN0YXJ0OjIwcHh9OndoZXJlKHNlbGVjdDppcyhbbXVsdGlwbGVdLFtzaXplXSkpIG9wdGdyb3VwIG9wdGlvbntwYWRkaW5nLWlubGluZS1zdGFydDoyMHB4fTo6LXdlYmtpdC1maWxlLXVwbG9hZC1idXR0b257bWFyZ2luLWlubGluZS1lbmQ6NHB4fTo6ZmlsZS1zZWxlY3Rvci1idXR0b257bWFyZ2luLWlubGluZS1lbmQ6NHB4fTo6cGxhY2Vob2xkZXJ7b3BhY2l0eToxfUBzdXBwb3J0cyAoIG5vdCAoLXdlYmtpdC1hcHBlYXJhbmNlOiAtYXBwbGUtcGF5LWJ1dHRvbikpIG9yIChjb250YWluLWludHJpbnNpYy1zaXplOiAxcHgpezo6cGxhY2Vob2xkZXJ7Y29sb3I6Y3VycmVudENvbG9yfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7OjpwbGFjZWhvbGRlcntjb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsY3VycmVudGNvbG9yIDUwJSx0cmFuc3BhcmVudCl9fX10ZXh0YXJlYXtyZXNpemU6dmVydGljYWx9Ojotd2Via2l0LXNlYXJjaC1kZWNvcmF0aW9uey13ZWJraXQtYXBwZWFyYW5jZTpub25lfTo6LXdlYmtpdC1kYXRlLWFuZC10aW1lLXZhbHVle3RleHQtYWxpZ246aW5oZXJpdDttaW4taGVpZ2h0OjFsaH06Oi13ZWJraXQtZGF0ZXRpbWUtZWRpdHtkaXNwbGF5OmlubGluZS1mbGV4fTo6LXdlYmtpdC1kYXRldGltZS1lZGl0LWZpZWxkcy13cmFwcGVye3BhZGRpbmc6MH06Oi13ZWJraXQtZGF0ZXRpbWUtZWRpdHtwYWRkaW5nLWJsb2NrLXN0YXJ0OjA7cGFkZGluZy1ibG9jay1lbmQ6MH06Oi13ZWJraXQtZGF0ZXRpbWUtZWRpdC15ZWFyLWZpZWxke3BhZGRpbmctYmxvY2stc3RhcnQ6MDtwYWRkaW5nLWJsb2NrLWVuZDowfTo6LXdlYmtpdC1kYXRldGltZS1lZGl0LW1vbnRoLWZpZWxke3BhZGRpbmctYmxvY2stc3RhcnQ6MDtwYWRkaW5nLWJsb2NrLWVuZDowfTo6LXdlYmtpdC1kYXRldGltZS1lZGl0LWRheS1maWVsZHtwYWRkaW5nLWJsb2NrLXN0YXJ0OjA7cGFkZGluZy1ibG9jay1lbmQ6MH06Oi13ZWJraXQtZGF0ZXRpbWUtZWRpdC1ob3VyLWZpZWxke3BhZGRpbmctYmxvY2stc3RhcnQ6MDtwYWRkaW5nLWJsb2NrLWVuZDowfTo6LXdlYmtpdC1kYXRldGltZS1lZGl0LW1pbnV0ZS1maWVsZHtwYWRkaW5nLWJsb2NrLXN0YXJ0OjA7cGFkZGluZy1ibG9jay1lbmQ6MH06Oi13ZWJraXQtZGF0ZXRpbWUtZWRpdC1zZWNvbmQtZmllbGR7cGFkZGluZy1ibG9jay1zdGFydDowO3BhZGRpbmctYmxvY2stZW5kOjB9Ojotd2Via2l0LWRhdGV0aW1lLWVkaXQtbWlsbGlzZWNvbmQtZmllbGR7cGFkZGluZy1ibG9jay1zdGFydDowO3BhZGRpbmctYmxvY2stZW5kOjB9Ojotd2Via2l0LWRhdGV0aW1lLWVkaXQtbWVyaWRpZW0tZmllbGR7cGFkZGluZy1ibG9jay1zdGFydDowO3BhZGRpbmctYmxvY2stZW5kOjB9Ojotd2Via2l0LWNhbGVuZGFyLXBpY2tlci1pbmRpY2F0b3J7bGluZS1oZWlnaHQ6MX06LW1vei11aS1pbnZhbGlke2JveC1zaGFkb3c6bm9uZX1idXR0b257YXBwZWFyYW5jZTpidXR0b259aW5wdXQ6d2hlcmUoW3R5cGU9YnV0dG9uXSxbdHlwZT1yZXNldF0sW3R5cGU9c3VibWl0XSl7YXBwZWFyYW5jZTpidXR0b259Ojotd2Via2l0LWZpbGUtdXBsb2FkLWJ1dHRvbnthcHBlYXJhbmNlOmJ1dHRvbn06OmZpbGUtc2VsZWN0b3ItYnV0dG9ue2FwcGVhcmFuY2U6YnV0dG9ufTo6LXdlYmtpdC1pbm5lci1zcGluLWJ1dHRvbntoZWlnaHQ6YXV0b306Oi13ZWJraXQtb3V0ZXItc3Bpbi1idXR0b257aGVpZ2h0OmF1dG99W2hpZGRlbl06d2hlcmUoOm5vdChbaGlkZGVuPXVudGlsLWZvdW5kXSkpe2Rpc3BsYXk6bm9uZSFpbXBvcnRhbnR9fUBsYXllciB1dGlsaXRpZXN7LlxbY29udGFpbmVyLXR5cGVcOmlubGluZS1zaXplXF17Y29udGFpbmVyLXR5cGU6aW5saW5lLXNpemV9LnBvaW50ZXItZXZlbnRzLWF1dG97cG9pbnRlci1ldmVudHM6YXV0b30ucG9pbnRlci1ldmVudHMtbm9uZXtwb2ludGVyLWV2ZW50czpub25lfS5jb2xsYXBzZXt2aXNpYmlsaXR5OmNvbGxhcHNlfS5pbnZpc2libGV7dmlzaWJpbGl0eTpoaWRkZW59LnZpc2libGV7dmlzaWJpbGl0eTp2aXNpYmxlfS5hYnNvbHV0ZXtwb3NpdGlvbjphYnNvbHV0ZX0uZml4ZWR7cG9zaXRpb246Zml4ZWR9LnJlbGF0aXZle3Bvc2l0aW9uOnJlbGF0aXZlfS5zdGF0aWN7cG9zaXRpb246c3RhdGljfS5zdGlja3l7cG9zaXRpb246c3RpY2t5fS5pbnNldC0we2luc2V0OmNhbGModmFyKC0tc3BhY2luZykqMCl9LnRvcC0we3RvcDpjYWxjKHZhcigtLXNwYWNpbmcpKjApfS50b3AtMVwvMnt0b3A6NTAlfS50b3AtMnt0b3A6Y2FsYyh2YXIoLS1zcGFjaW5nKSoyKX0udG9wLTN7dG9wOmNhbGModmFyKC0tc3BhY2luZykqMyl9LnRvcC1cWzJweFxde3RvcDoycHh9LnRvcC1cW2NhbGNcKDEwMFwlXCs0cHhcKVxde3RvcDpjYWxjKDEwMCUgKyA0cHgpfS50b3AtXFtjYWxjXCgxMDBcJVwrNnB4XClcXXt0b3A6Y2FsYygxMDAlICsgNnB4KX0ucmlnaHQtMHtyaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpKjApfS5yaWdodC0wXC41e3JpZ2h0OmNhbGModmFyKC0tc3BhY2luZykqLjUpfS5yaWdodC0yXC41e3JpZ2h0OmNhbGModmFyKC0tc3BhY2luZykqMi41KX0ucmlnaHQtM3tyaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpKjMpfS5yaWdodC1cWzlweFxde3JpZ2h0OjlweH0uYm90dG9tLTB7Ym90dG9tOmNhbGModmFyKC0tc3BhY2luZykqMCl9LmJvdHRvbS0wXC41e2JvdHRvbTpjYWxjKHZhcigtLXNwYWNpbmcpKi41KX0uYm90dG9tLTN7Ym90dG9tOmNhbGModmFyKC0tc3BhY2luZykqMyl9LmxlZnQtMHtsZWZ0OmNhbGModmFyKC0tc3BhY2luZykqMCl9LmxlZnQtMVwvMntsZWZ0OjUwJX0ubGVmdC0yXC41e2xlZnQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSoyLjUpfS5sZWZ0LTN7bGVmdDpjYWxjKHZhcigtLXNwYWNpbmcpKjMpfS56LTF7ei1pbmRleDoxfS56LTEwe3otaW5kZXg6MTB9LnotMjB7ei1pbmRleDoyMH0uei0zMHt6LWluZGV4OjMwfS56LTM1e3otaW5kZXg6MzV9LnotMzZ7ei1pbmRleDozNn0uei00MHt6LWluZGV4OjQwfS56LTUwe3otaW5kZXg6NTB9LmNvbnRhaW5lcnt3aWR0aDoxMDAlfUBtZWRpYSAobWluLXdpZHRoOjQwcmVtKXsuY29udGFpbmVye21heC13aWR0aDo0MHJlbX19QG1lZGlhIChtaW4td2lkdGg6NDhyZW0pey5jb250YWluZXJ7bWF4LXdpZHRoOjQ4cmVtfX1AbWVkaWEgKG1pbi13aWR0aDo2NHJlbSl7LmNvbnRhaW5lcnttYXgtd2lkdGg6NjRyZW19fUBtZWRpYSAobWluLXdpZHRoOjgwcmVtKXsuY29udGFpbmVye21heC13aWR0aDo4MHJlbX19QG1lZGlhIChtaW4td2lkdGg6OTZyZW0pey5jb250YWluZXJ7bWF4LXdpZHRoOjk2cmVtfX0ubS0we21hcmdpbjpjYWxjKHZhcigtLXNwYWNpbmcpKjApfS4tbXgtMXttYXJnaW4taW5saW5lOmNhbGModmFyKC0tc3BhY2luZykqLTEpfS5teC0wXC41e21hcmdpbi1pbmxpbmU6Y2FsYyh2YXIoLS1zcGFjaW5nKSouNSl9Li1teS0ye21hcmdpbi1ibG9jazpjYWxjKHZhcigtLXNwYWNpbmcpKi0yKX0ubXktMXttYXJnaW4tYmxvY2s6Y2FsYyh2YXIoLS1zcGFjaW5nKSoxKX0ubXQtMFwuNXttYXJnaW4tdG9wOmNhbGModmFyKC0tc3BhY2luZykqLjUpfS5tdC0ye21hcmdpbi10b3A6Y2FsYyh2YXIoLS1zcGFjaW5nKSoyKX0ubXQtXFszcHhcXXttYXJnaW4tdG9wOjNweH0ubXItXFszcHhcXXttYXJnaW4tcmlnaHQ6M3B4fS5tbC0wXC41e21hcmdpbi1sZWZ0OmNhbGModmFyKC0tc3BhY2luZykqLjUpfS5tbC1hdXRve21hcmdpbi1sZWZ0OmF1dG99LmJveC1ib3JkZXJ7Ym94LXNpemluZzpib3JkZXItYm94fS5ibG9ja3tkaXNwbGF5OmJsb2NrfS5jb250ZW50c3tkaXNwbGF5OmNvbnRlbnRzfS5mbGV4e2Rpc3BsYXk6ZmxleH0uZ3JpZHtkaXNwbGF5OmdyaWR9LmhpZGRlbntkaXNwbGF5Om5vbmV9LmlubGluZXtkaXNwbGF5OmlubGluZX0uaW5saW5lLWJsb2Nre2Rpc3BsYXk6aW5saW5lLWJsb2NrfS5pbmxpbmUtZmxleHtkaXNwbGF5OmlubGluZS1mbGV4fS50YWJsZXtkaXNwbGF5OnRhYmxlfS5cW2FzcGVjdC1yYXRpb1w6MTZcLzExXF17YXNwZWN0LXJhdGlvOjE2LzExfS5zaXplLTFcLjV7d2lkdGg6Y2FsYyh2YXIoLS1zcGFjaW5nKSoxLjUpO2hlaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpKjEuNSl9LnNpemUtMlwuNXt3aWR0aDpjYWxjKHZhcigtLXNwYWNpbmcpKjIuNSk7aGVpZ2h0OmNhbGModmFyKC0tc3BhY2luZykqMi41KX0uc2l6ZS0zXC41e3dpZHRoOmNhbGModmFyKC0tc3BhY2luZykqMy41KTtoZWlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSozLjUpfS5zaXplLTR7d2lkdGg6Y2FsYyh2YXIoLS1zcGFjaW5nKSo0KTtoZWlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSo0KX0uc2l6ZS01e3dpZHRoOmNhbGModmFyKC0tc3BhY2luZykqNSk7aGVpZ2h0OmNhbGModmFyKC0tc3BhY2luZykqNSl9LnNpemUtOXt3aWR0aDpjYWxjKHZhcigtLXNwYWNpbmcpKjkpO2hlaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpKjkpfS5zaXplLVxbMnB4XF17d2lkdGg6MnB4O2hlaWdodDoycHh9LnNpemUtXFsxNHB4XF17d2lkdGg6MTRweDtoZWlnaHQ6MTRweH0uc2l6ZS1cWzE4cHhcXXt3aWR0aDoxOHB4O2hlaWdodDoxOHB4fS5zaXplLVxbMTlweFxde3dpZHRoOjE5cHg7aGVpZ2h0OjE5cHh9LnNpemUtZnVsbHt3aWR0aDoxMDAlO2hlaWdodDoxMDAlfS5oLTJcLjV7aGVpZ2h0OmNhbGModmFyKC0tc3BhY2luZykqMi41KX0uaC0ze2hlaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpKjMpfS5oLTNcLjV7aGVpZ2h0OmNhbGModmFyKC0tc3BhY2luZykqMy41KX0uaC00e2hlaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpKjQpfS5oLTV7aGVpZ2h0OmNhbGModmFyKC0tc3BhY2luZykqNSl9LmgtNVwuNXtoZWlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSo1LjUpfS5oLTZ7aGVpZ2h0OmNhbGModmFyKC0tc3BhY2luZykqNil9LmgtN3toZWlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSo3KX0uaC04e2hlaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpKjgpfS5oLTEwe2hlaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpKjEwKX0uaC1cWzNweFxde2hlaWdodDozcHh9LmgtXFsxM3B4XF17aGVpZ2h0OjEzcHh9LmgtXFsxNHB4XF17aGVpZ2h0OjE0cHh9LmgtXFsxNnB4XF17aGVpZ2h0OjE2cHh9LmgtXFsxOHB4XF17aGVpZ2h0OjE4cHh9LmgtXFsyMnB4XF17aGVpZ2h0OjIycHh9LmgtXFsyNnB4XF17aGVpZ2h0OjI2cHh9LmgtXFszMHB4XF17aGVpZ2h0OjMwcHh9LmgtZnVsbHtoZWlnaHQ6MTAwJX0uaC1weHtoZWlnaHQ6MXB4fS5oLXNjcmVlbntoZWlnaHQ6MTAwdmh9Lm1heC1oLTkwe21heC1oZWlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSo5MCl9Lm1heC1oLVxbMjYwcHhcXXttYXgtaGVpZ2h0OjI2MHB4fS5tYXgtaC1cWzMyMHB4XF17bWF4LWhlaWdodDozMjBweH0ubWF4LWgtZnVsbHttYXgtaGVpZ2h0OjEwMCV9Lm1pbi1oLTB7bWluLWhlaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpKjApfS5taW4taC1cWzIycHhcXXttaW4taGVpZ2h0OjIycHh9Lm1pbi1oLVxbMzBweFxde21pbi1oZWlnaHQ6MzBweH0ubWluLWgtXFszNnB4XF17bWluLWhlaWdodDozNnB4fS5taW4taC1cWzQ0cHhcXXttaW4taGVpZ2h0OjQ0cHh9Lm1pbi1oLXB4e21pbi1oZWlnaHQ6MXB4fS53LTF7d2lkdGg6Y2FsYyh2YXIoLS1zcGFjaW5nKSoxKX0udy0yXC41e3dpZHRoOmNhbGModmFyKC0tc3BhY2luZykqMi41KX0udy00e3dpZHRoOmNhbGModmFyKC0tc3BhY2luZykqNCl9LnctNXt3aWR0aDpjYWxjKHZhcigtLXNwYWNpbmcpKjUpfS53LTZ7d2lkdGg6Y2FsYyh2YXIoLS1zcGFjaW5nKSo2KX0udy03e3dpZHRoOmNhbGModmFyKC0tc3BhY2luZykqNyl9LnctOHt3aWR0aDpjYWxjKHZhcigtLXNwYWNpbmcpKjgpfS53LTEwe3dpZHRoOmNhbGModmFyKC0tc3BhY2luZykqMTApfS53LTIxe3dpZHRoOmNhbGModmFyKC0tc3BhY2luZykqMjEpfS53LVxbMjJweFxde3dpZHRoOjIycHh9LnctXFszMHB4XF17d2lkdGg6MzBweH0udy1cWzMyXCVcXXt3aWR0aDozMiV9LnctXFszNlwlXF17d2lkdGg6MzYlfS53LVxbNDBcJVxde3dpZHRoOjQwJX0udy1cWzQyXCVcXXt3aWR0aDo0MiV9LnctXFs0NlwlXF17d2lkdGg6NDYlfS53LVxbNDhcJVxde3dpZHRoOjQ4JX0udy1cWzU4XCVcXXt3aWR0aDo1OCV9LnctXFs2MlwlXF17d2lkdGg6NjIlfS53LVxbNjhcJVxde3dpZHRoOjY4JX0udy1cWzcwXCVcXXt3aWR0aDo3MCV9LnctXFs3NFwlXF17d2lkdGg6NzQlfS53LVxbMTIwcHhcXXt3aWR0aDoxMjBweH0udy1cW2NhbGNcKDEwMFwlXCs4cHhcKVxde3dpZHRoOmNhbGMoMTAwJSArIDhweCl9LnctXFttaW5cKDMyMHB4XCxjYWxjXCgxMDB2dy0zMnB4XClcKVxde3dpZHRoOm1pbigzMjBweCwxMDB2dyAtIDMycHgpfS53LWZ1bGx7d2lkdGg6MTAwJX0udy1weHt3aWR0aDoxcHh9Lm1heC13LTkwe21heC13aWR0aDpjYWxjKHZhcigtLXNwYWNpbmcpKjkwKX0ubWF4LXctMTIwe21heC13aWR0aDpjYWxjKHZhcigtLXNwYWNpbmcpKjEyMCl9Lm1heC13LVxbMTUwcHhcXXttYXgtd2lkdGg6MTUwcHh9Lm1heC13LVxbMzYwcHhcXXttYXgtd2lkdGg6MzYwcHh9Lm1heC13LWZ1bGx7bWF4LXdpZHRoOjEwMCV9Lm1pbi13LTB7bWluLXdpZHRoOmNhbGModmFyKC0tc3BhY2luZykqMCl9Lm1pbi13LVxbNTZweFxde21pbi13aWR0aDo1NnB4fS5taW4tdy1cWzIwMHB4XF17bWluLXdpZHRoOjIwMHB4fS5taW4tdy1cWzIyMHB4XF17bWluLXdpZHRoOjIyMHB4fS5taW4tdy1weHttaW4td2lkdGg6MXB4fS5mbGV4LTF7ZmxleDoxfS5zaHJpbmt7ZmxleC1zaHJpbms6MX0uc2hyaW5rLTB7ZmxleC1zaHJpbms6MH0uZ3Jvd3tmbGV4LWdyb3c6MX0uLXRyYW5zbGF0ZS14LTFcLzJ7LS10dy10cmFuc2xhdGUteDpjYWxjKGNhbGMoMS8yKjEwMCUpKi0xKTt0cmFuc2xhdGU6dmFyKC0tdHctdHJhbnNsYXRlLXgpdmFyKC0tdHctdHJhbnNsYXRlLXkpfS50cmFuc2xhdGUteC0xey0tdHctdHJhbnNsYXRlLXg6Y2FsYyh2YXIoLS1zcGFjaW5nKSoxKTt0cmFuc2xhdGU6dmFyKC0tdHctdHJhbnNsYXRlLXgpdmFyKC0tdHctdHJhbnNsYXRlLXkpfS4tdHJhbnNsYXRlLXktMVwvMnstLXR3LXRyYW5zbGF0ZS15OmNhbGMoY2FsYygxLzIqMTAwJSkqLTEpO3RyYW5zbGF0ZTp2YXIoLS10dy10cmFuc2xhdGUteCl2YXIoLS10dy10cmFuc2xhdGUteSl9LnRyYW5zZm9ybXt0cmFuc2Zvcm06dmFyKC0tdHctcm90YXRlLXgsKXZhcigtLXR3LXJvdGF0ZS15LCl2YXIoLS10dy1yb3RhdGUteiwpdmFyKC0tdHctc2tldy14LCl2YXIoLS10dy1za2V3LXksKX0uYW5pbWF0ZS1cW2dyaWQtc3Bpbl8wXC43c19saW5lYXJfaW5maW5pdGVcXXthbmltYXRpb246Z3JpZC1zcGluIC43cyBsaW5lYXIgaW5maW5pdGV9LmFuaW1hdGUtXFtncmlkLXNwaW5fMFwuOHNfbGluZWFyX2luZmluaXRlXF17YW5pbWF0aW9uOmdyaWQtc3BpbiAuOHMgbGluZWFyIGluZmluaXRlfS5jdXJzb3ItY29sLXJlc2l6ZXtjdXJzb3I6Y29sLXJlc2l6ZX0uY3Vyc29yLWRlZmF1bHR7Y3Vyc29yOmRlZmF1bHR9LmN1cnNvci1ub3QtYWxsb3dlZHtjdXJzb3I6bm90LWFsbG93ZWR9LmN1cnNvci1wb2ludGVye2N1cnNvcjpwb2ludGVyfS5jdXJzb3ItcHJvZ3Jlc3N7Y3Vyc29yOnByb2dyZXNzfS5jdXJzb3ItdGV4dHtjdXJzb3I6dGV4dH0udG91Y2gtbm9uZXt0b3VjaC1hY3Rpb246bm9uZX0ucmVzaXple3Jlc2l6ZTpib3RofS5saXN0LW5vbmV7bGlzdC1zdHlsZS10eXBlOm5vbmV9LmFwcGVhcmFuY2Utbm9uZXthcHBlYXJhbmNlOm5vbmV9LlxbZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zXDoxZnJfMWZyXzFmclxde2dyaWQtdGVtcGxhdGUtY29sdW1uczoxZnIgMWZyIDFmcn0uXFtncmlkLXRlbXBsYXRlLWNvbHVtbnNcOmF1dG9fMWZyX2F1dG9cXXtncmlkLXRlbXBsYXRlLWNvbHVtbnM6YXV0byAxZnIgYXV0b30uXFtncmlkLXRlbXBsYXRlLWNvbHVtbnNcOmF1dG9fbWlubWF4XCgwXCwxZnJcKV9hdXRvXF17Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOmF1dG8gbWlubWF4KDAsMWZyKWF1dG99LmdyaWQtY29scy1cWzU2cHhfMWZyX2F1dG9cXXtncmlkLXRlbXBsYXRlLWNvbHVtbnM6NTZweCAxZnIgYXV0b30uZmxleC1jb2x7ZmxleC1kaXJlY3Rpb246Y29sdW1ufS5mbGV4LXJvd3tmbGV4LWRpcmVjdGlvbjpyb3d9LmZsZXgtbm93cmFwe2ZsZXgtd3JhcDpub3dyYXB9LnBsYWNlLWl0ZW1zLWNlbnRlcntwbGFjZS1pdGVtczogY2VudGVyfS5pdGVtcy1iYXNlbGluZXthbGlnbi1pdGVtczpiYXNlbGluZX0uaXRlbXMtY2VudGVye2FsaWduLWl0ZW1zOiBjZW50ZXJ9Lml0ZW1zLXN0cmV0Y2h7YWxpZ24taXRlbXM6c3RyZXRjaH0uanVzdGlmeS1iZXR3ZWVue2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVufS5qdXN0aWZ5LWNlbnRlcntqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyfS5qdXN0aWZ5LWVuZHtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1lbmR9LmdhcC0wXC41e2dhcDpjYWxjKHZhcigtLXNwYWNpbmcpKi41KX0uZ2FwLTF7Z2FwOmNhbGModmFyKC0tc3BhY2luZykqMSl9LmdhcC0xXC41e2dhcDpjYWxjKHZhcigtLXNwYWNpbmcpKjEuNSl9LmdhcC0ye2dhcDpjYWxjKHZhcigtLXNwYWNpbmcpKjIpfS5nYXAtMlwuNXtnYXA6Y2FsYyh2YXIoLS1zcGFjaW5nKSoyLjUpfS5nYXAtM3tnYXA6Y2FsYyh2YXIoLS1zcGFjaW5nKSozKX0uZ2FwLTV7Z2FwOmNhbGModmFyKC0tc3BhY2luZykqNSl9LmdhcC1cWzVweFxde2dhcDo1cHh9LmdhcC1weHtnYXA6MXB4fS5qdXN0aWZ5LXNlbGYtZW5ke2p1c3RpZnktc2VsZjpmbGV4LWVuZH0udHJ1bmNhdGV7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7d2hpdGUtc3BhY2U6bm93cmFwfS5vdmVyZmxvdy1oaWRkZW57b3ZlcmZsb3c6aGlkZGVufS5vdmVyZmxvdy15LWF1dG97b3ZlcmZsb3cteTphdXRvfS5yb3VuZGVke2JvcmRlci1yYWRpdXM6LjI1cmVtfS5yb3VuZGVkLVxbMnB4XF17Ym9yZGVyLXJhZGl1czoycHh9LnJvdW5kZWQtXFszcHhcXXtib3JkZXItcmFkaXVzOjNweH0ucm91bmRlZC1cWzRweFxde2JvcmRlci1yYWRpdXM6NHB4fS5yb3VuZGVkLVxbNXB4XF17Ym9yZGVyLXJhZGl1czo1cHh9LnJvdW5kZWQtXFs3cHhcXXtib3JkZXItcmFkaXVzOjdweH0ucm91bmRlZC1cWzhweFxde2JvcmRlci1yYWRpdXM6OHB4fS5yb3VuZGVkLVxbOXB4XF17Ym9yZGVyLXJhZGl1czo5cHh9LnJvdW5kZWQtXFsxMHB4XF17Ym9yZGVyLXJhZGl1czoxMHB4fS5yb3VuZGVkLVxbMTRweFxde2JvcmRlci1yYWRpdXM6MTRweH0ucm91bmRlZC1mdWxse2JvcmRlci1yYWRpdXM6My40MDI4MmUzOHB4fS5yb3VuZGVkLWxne2JvcmRlci1yYWRpdXM6dmFyKC0tcmFkaXVzLWxnKX0ucm91bmRlZC1tZHtib3JkZXItcmFkaXVzOnZhcigtLXJhZGl1cy1tZCl9LnJvdW5kZWQtbm9uZXtib3JkZXItcmFkaXVzOjB9LnJvdW5kZWQteGx7Ym9yZGVyLXJhZGl1czp2YXIoLS1yYWRpdXMteGwpfS5yb3VuZGVkLXhze2JvcmRlci1yYWRpdXM6dmFyKC0tcmFkaXVzLXhzKX0ucm91bmRlZC10LVxbMTBweFxde2JvcmRlci10b3AtbGVmdC1yYWRpdXM6MTBweDtib3JkZXItdG9wLXJpZ2h0LXJhZGl1czoxMHB4fS5ib3JkZXJ7Ym9yZGVyLXN0eWxlOnZhcigtLXR3LWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOjFweH0uYm9yZGVyLTB7Ym9yZGVyLXN0eWxlOnZhcigtLXR3LWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOjB9LmJvcmRlci0ye2JvcmRlci1zdHlsZTp2YXIoLS10dy1ib3JkZXItc3R5bGUpO2JvcmRlci13aWR0aDoycHh9LmJvcmRlci10e2JvcmRlci10b3Atc3R5bGU6dmFyKC0tdHctYm9yZGVyLXN0eWxlKTtib3JkZXItdG9wLXdpZHRoOjFweH0uYm9yZGVyLXJ7Ym9yZGVyLXJpZ2h0LXN0eWxlOnZhcigtLXR3LWJvcmRlci1zdHlsZSk7Ym9yZGVyLXJpZ2h0LXdpZHRoOjFweH0uYm9yZGVyLWRhc2hlZHstLXR3LWJvcmRlci1zdHlsZTpkYXNoZWQ7Ym9yZGVyLXN0eWxlOmRhc2hlZH0uYm9yZGVyLW5vbmV7LS10dy1ib3JkZXItc3R5bGU6bm9uZTtib3JkZXItc3R5bGU6bm9uZX0uXCFib3JkZXItXFtyZ2JhXCgxMFwsMTMyXCwyNTVcLDBcLjZcKVxde2JvcmRlci1jb2xvcjojMGE4NGZmOTkhaW1wb3J0YW50fS5ib3JkZXItXFtcIzNiNWY5OVxde2JvcmRlci1jb2xvcjojM2I1Zjk5fS5ib3JkZXItXFtcIzVmNjI2OFxde2JvcmRlci1jb2xvcjojNWY2MjY4fS5ib3JkZXItXFtcIzIyMlxde2JvcmRlci1jb2xvcjojMjIyfS5ib3JkZXItXFtcI2ZmNDUzYVxdXC81MHtib3JkZXItY29sb3I6I2ZmNDUzYTgwO2JvcmRlci1jb2xvcjpjb2xvcihkaXNwbGF5LXAzIC45MjI2NzMgLjMzMzEzNCAuMjcxNTEvLjUpO2JvcmRlci1jb2xvcjpsYWIoNTguNzYyOCUgNjkuODQ2NyA1MC4zODg2Ly41KX0uYm9yZGVyLWFjY2VudHtib3JkZXItY29sb3I6dmFyKC0tY29sb3ItYWNjZW50KX0uYm9yZGVyLWRhbmdlclwvMjB7Ym9yZGVyLWNvbG9yOiNmODcxNzEzM31Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5ib3JkZXItZGFuZ2VyXC8yMHtib3JkZXItY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLWRhbmdlcikyMCUsdHJhbnNwYXJlbnQpfX0uYm9yZGVyLWRhbmdlclwvMzB7Ym9yZGVyLWNvbG9yOiNmODcxNzE0ZH1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5ib3JkZXItZGFuZ2VyXC8zMHtib3JkZXItY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLWRhbmdlcikzMCUsdHJhbnNwYXJlbnQpfX0uYm9yZGVyLXdhcm5pbmdcLzI1e2JvcmRlci1jb2xvcjojZmJiZjI0NDB9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuYm9yZGVyLXdhcm5pbmdcLzI1e2JvcmRlci1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2FybmluZykyNSUsdHJhbnNwYXJlbnQpfX0uYm9yZGVyLXdoaXRle2JvcmRlci1jb2xvcjp2YXIoLS1jb2xvci13aGl0ZSl9LmJvcmRlci13aGl0ZVwvOHtib3JkZXItY29sb3I6I2ZmZmZmZjE0fUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmJvcmRlci13aGl0ZVwvOHtib3JkZXItY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTglLHRyYW5zcGFyZW50KX19LmJvcmRlci13aGl0ZVwvMTB7Ym9yZGVyLWNvbG9yOiNmZmZmZmYxYX1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5ib3JkZXItd2hpdGVcLzEwe2JvcmRlci1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpMTAlLHRyYW5zcGFyZW50KX19LmJvcmRlci13aGl0ZVwvMTJ7Ym9yZGVyLWNvbG9yOiNmZmZmZmYxZn1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5ib3JkZXItd2hpdGVcLzEye2JvcmRlci1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpMTIlLHRyYW5zcGFyZW50KX19LmJvcmRlci13aGl0ZVwvMjB7Ym9yZGVyLWNvbG9yOiNmZmYzfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmJvcmRlci13aGl0ZVwvMjB7Ym9yZGVyLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSkyMCUsdHJhbnNwYXJlbnQpfX0uYm9yZGVyLXdoaXRlXC8yNXtib3JkZXItY29sb3I6I2ZmZmZmZjQwfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmJvcmRlci13aGl0ZVwvMjV7Ym9yZGVyLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSkyNSUsdHJhbnNwYXJlbnQpfX0uYm9yZGVyLXdoaXRlXC8zMHtib3JkZXItY29sb3I6I2ZmZmZmZjRkfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmJvcmRlci13aGl0ZVwvMzB7Ym9yZGVyLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSkzMCUsdHJhbnNwYXJlbnQpfX0uYm9yZGVyLXdoaXRlXC9cWzBcLjA2XF17Ym9yZGVyLWNvbG9yOiNmZmZmZmYwZn1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5ib3JkZXItd2hpdGVcL1xbMFwuMDZcXXtib3JkZXItY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTYlLHRyYW5zcGFyZW50KX19LmJvcmRlci10LVxbXCNmNGY0ZjVcXXtib3JkZXItdG9wLWNvbG9yOiNmNGY0ZjV9LmJvcmRlci10LXdoaXRle2JvcmRlci10b3AtY29sb3I6dmFyKC0tY29sb3Itd2hpdGUpfS5ib3JkZXItdC13aGl0ZVwvNjB7Ym9yZGVyLXRvcC1jb2xvcjojZmZmOX1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5ib3JkZXItdC13aGl0ZVwvNjB7Ym9yZGVyLXRvcC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpNjAlLHRyYW5zcGFyZW50KX19LlwhYmctXFtyZ2JhXCgxMFwsMTMyXCwyNTVcLDBcLjA4XClcXXtiYWNrZ3JvdW5kLWNvbG9yOiMwYTg0ZmYxNCFpbXBvcnRhbnR9LlwhYmctd2hpdGVcL1xbMFwuMTJcXXtiYWNrZ3JvdW5kLWNvbG9yOiNmZmZmZmYxZiFpbXBvcnRhbnR9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuXCFiZy13aGl0ZVwvXFswXC4xMlxde2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTEyJSx0cmFuc3BhcmVudCkhaW1wb3J0YW50fX0uYmctXFtcIzBhMGEwY1xde2JhY2tncm91bmQtY29sb3I6IzBhMGEwY30uYmctXFtcIzBhODRmZlxde2JhY2tncm91bmQtY29sb3I6IzBhODRmZn0uYmctXFtcIzFjMWMxY1xde2JhY2tncm91bmQtY29sb3I6IzFjMWMxY30uYmctXFtcIzZlNmU3Mlxde2JhY2tncm91bmQtY29sb3I6IzZlNmU3Mn0uYmctXFtcIzlhOWE5ZVxde2JhY2tncm91bmQtY29sb3I6IzlhOWE5ZX0uYmctXFtcIzIwMmIzYVxde2JhY2tncm91bmQtY29sb3I6IzIwMmIzYX0uYmctXFtcIzIyMlxde2JhY2tncm91bmQtY29sb3I6IzIyMn0uYmctXFtcIzI2MzY0Y1xde2JhY2tncm91bmQtY29sb3I6IzI2MzY0Y30uYmctXFtcIzEwMTAxMFxde2JhY2tncm91bmQtY29sb3I6IzEwMTAxMH0uYmctXFtcI2Y4NzE3MVxde2JhY2tncm91bmQtY29sb3I6I2Y4NzE3MX0uYmctXFtcI2ZmNDUzYVxdXC8xMHtiYWNrZ3JvdW5kLWNvbG9yOiNmZjQ1M2ExYTtiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yKGRpc3BsYXktcDMgLjkyMjY3MyAuMzMzMTM0IC4yNzE1MS8uMSk7YmFja2dyb3VuZC1jb2xvcjpsYWIoNTguNzYyOCUgNjkuODQ2NyA1MC4zODg2Ly4xKX0uYmctXFtyZ2JhXCgxMFwsMTMyXCwyNTVcLDBcLjIyXClcXXtiYWNrZ3JvdW5kLWNvbG9yOiMwYTg0ZmYzOH0uYmctXFtyZ2JhXCg5OVwsMTAyXCwyNDFcLDBcLjE4XClcXXtiYWNrZ3JvdW5kLWNvbG9yOiM2MzY2ZjEyZX0uYmctYWNjZW50e2JhY2tncm91bmQtY29sb3I6dmFyKC0tY29sb3ItYWNjZW50KX0uYmctYmxhY2t7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jb2xvci1ibGFjayl9LmJnLWRhbmdlci1zb2Z0e2JhY2tncm91bmQtY29sb3I6dmFyKC0tY29sb3ItZGFuZ2VyLXNvZnQpfS5iZy1kYW5nZXJcLzEwe2JhY2tncm91bmQtY29sb3I6I2Y4NzE3MTFhfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmJnLWRhbmdlclwvMTB7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3ItZGFuZ2VyKTEwJSx0cmFuc3BhcmVudCl9fS5iZy1wYWdle2JhY2tncm91bmQtY29sb3I6dmFyKC0tY29sb3ItcGFnZSl9LmJnLXBhbmVse2JhY2tncm91bmQtY29sb3I6dmFyKC0tY29sb3ItcGFuZWwpfS5iZy1wYW5lbC1iZ3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNvbG9yLXBhbmVsLWJnKX0uYmctcGFuZWwtYmctdHJhbnNsdWNlbnR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jb2xvci1wYW5lbC1iZy10cmFuc2x1Y2VudCl9LmJnLXBhbmVsLWRlZXB7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jb2xvci1wYW5lbC1kZWVwKX0uYmctcGFuZWwtb3ZlcmxheXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNvbG9yLXBhbmVsLW92ZXJsYXkpfS5iZy1zdWNjZXNzLWVtZXJhbGR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jb2xvci1zdWNjZXNzLWVtZXJhbGQpfS5iZy10cmFuc3BhcmVudHtiYWNrZ3JvdW5kLWNvbG9yOiMwMDAwfS5iZy13YXJuaW5nXC8xMHtiYWNrZ3JvdW5kLWNvbG9yOiNmYmJmMjQxYX1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5iZy13YXJuaW5nXC8xMHtiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13YXJuaW5nKTEwJSx0cmFuc3BhcmVudCl9fS5iZy13aGl0ZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNvbG9yLXdoaXRlKX0uYmctd2hpdGVcLzZ7YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmMGZ9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuYmctd2hpdGVcLzZ7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpNiUsdHJhbnNwYXJlbnQpfX0uYmctd2hpdGVcLzh7YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmMTR9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuYmctd2hpdGVcLzh7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpOCUsdHJhbnNwYXJlbnQpfX0uYmctd2hpdGVcLzEwe2JhY2tncm91bmQtY29sb3I6I2ZmZmZmZjFhfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmJnLXdoaXRlXC8xMHtiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSkxMCUsdHJhbnNwYXJlbnQpfX0uYmctd2hpdGVcLzEye2JhY2tncm91bmQtY29sb3I6I2ZmZmZmZjFmfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmJnLXdoaXRlXC8xMntiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSkxMiUsdHJhbnNwYXJlbnQpfX0uYmctd2hpdGVcLzE1e2JhY2tncm91bmQtY29sb3I6I2ZmZmZmZjI2fUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmJnLXdoaXRlXC8xNXtiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSkxNSUsdHJhbnNwYXJlbnQpfX0uYmctd2hpdGVcLzIwe2JhY2tncm91bmQtY29sb3I6I2ZmZjN9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuYmctd2hpdGVcLzIwe2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTIwJSx0cmFuc3BhcmVudCl9fS5iZy13aGl0ZVwvNDB7YmFja2dyb3VuZC1jb2xvcjojZmZmNn1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5iZy13aGl0ZVwvNDB7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpNDAlLHRyYW5zcGFyZW50KX19LmJnLXdoaXRlXC81MHtiYWNrZ3JvdW5kLWNvbG9yOiNmZmZmZmY4MH1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5iZy13aGl0ZVwvNTB7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpNTAlLHRyYW5zcGFyZW50KX19LmJnLXdoaXRlXC9cWzBcLjAzXF17YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmMDh9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuYmctd2hpdGVcL1xbMFwuMDNcXXtiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSkzJSx0cmFuc3BhcmVudCl9fS5iZy13aGl0ZVwvXFswXC4wNFxde2JhY2tncm91bmQtY29sb3I6I2ZmZmZmZjBhfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmJnLXdoaXRlXC9cWzBcLjA0XF17YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpNCUsdHJhbnNwYXJlbnQpfX0uYmctd2hpdGVcL1xbMFwuMDZcXXtiYWNrZ3JvdW5kLWNvbG9yOiNmZmZmZmYwZn1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5iZy13aGl0ZVwvXFswXC4wNlxde2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTYlLHRyYW5zcGFyZW50KX19LmJnLXdoaXRlXC9cWzBcLjA4XF17YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmMTR9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuYmctd2hpdGVcL1xbMFwuMDhcXXtiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk4JSx0cmFuc3BhcmVudCl9fS5iZy13aGl0ZVwvXFswXC4xMlxde2JhY2tncm91bmQtY29sb3I6I2ZmZmZmZjFmfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmJnLXdoaXRlXC9cWzBcLjEyXF17YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpMTIlLHRyYW5zcGFyZW50KX19LmJnLXdoaXRlXC9cWzBcLjE2XF17YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmMjl9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuYmctd2hpdGVcL1xbMFwuMTZcXXtiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSkxNiUsdHJhbnNwYXJlbnQpfX0uYmctXFtsaW5lYXItZ3JhZGllbnRcKDE0NWRlZ1wsXCMyNTNhNWZcLFwjMTYyMTMyXClcXXtiYWNrZ3JvdW5kLWltYWdlOmxpbmVhci1ncmFkaWVudCgxNDVkZWcsIzI1M2E1ZiwjMTYyMTMyKX0uYmctXFtsaW5lYXItZ3JhZGllbnRcKHRvX2JvdHRvbVwsXCMxYzFjMWVfMFwlXCxyZ2JhXCgyOFwsMjhcLDMwXCwwXClfMTAwXCVcKVxde2JhY2tncm91bmQtaW1hZ2U6bGluZWFyLWdyYWRpZW50KCMxYzFjMWUgMCUsIzFjMWMxZTAwIDEwMCUpfS5iZy1cW2xpbmVhci1ncmFkaWVudFwodG9fcmlnaHRcLHJnYmFcKDI4XCwyOFwsMzBcLDBcKV8wXCVcLFwjMWMxYzFlXzU1XCVcKVxde2JhY2tncm91bmQtaW1hZ2U6bGluZWFyLWdyYWRpZW50KDkwZGVnLCMxYzFjMWUwMCAwJSwjMWMxYzFlIDU1JSl9LmJnLVxbbGluZWFyLWdyYWRpZW50XCh0b190b3BcLFwjMWMxYzFlXzBcJVwscmdiYVwoMjhcLDI4XCwzMFwsMFwpXzEwMFwlXClcXXtiYWNrZ3JvdW5kLWltYWdlOmxpbmVhci1ncmFkaWVudCgjMWMxYzFlMDAgMCUsIzFjMWMxZSAxMDAlKX0ub2JqZWN0LWNvbnRhaW57b2JqZWN0LWZpdDpjb250YWlufS5vYmplY3QtY292ZXJ7b2JqZWN0LWZpdDpjb3Zlcn0ucC0we3BhZGRpbmc6Y2FsYyh2YXIoLS1zcGFjaW5nKSowKX0ucC0wXC41e3BhZGRpbmc6Y2FsYyh2YXIoLS1zcGFjaW5nKSouNSl9LnAtMXtwYWRkaW5nOmNhbGModmFyKC0tc3BhY2luZykqMSl9LnAtM1wuNXtwYWRkaW5nOmNhbGModmFyKC0tc3BhY2luZykqMy41KX0ucC02e3BhZGRpbmc6Y2FsYyh2YXIoLS1zcGFjaW5nKSo2KX0ucHgtMFwuNXtwYWRkaW5nLWlubGluZTpjYWxjKHZhcigtLXNwYWNpbmcpKi41KX0ucHgtMXtwYWRkaW5nLWlubGluZTpjYWxjKHZhcigtLXNwYWNpbmcpKjEpfS5weC0xXC41e3BhZGRpbmctaW5saW5lOmNhbGModmFyKC0tc3BhY2luZykqMS41KX0ucHgtMntwYWRkaW5nLWlubGluZTpjYWxjKHZhcigtLXNwYWNpbmcpKjIpfS5weC0yXC41e3BhZGRpbmctaW5saW5lOmNhbGModmFyKC0tc3BhY2luZykqMi41KX0ucHgtM3twYWRkaW5nLWlubGluZTpjYWxjKHZhcigtLXNwYWNpbmcpKjMpfS5weC0zXC41e3BhZGRpbmctaW5saW5lOmNhbGModmFyKC0tc3BhY2luZykqMy41KX0ucHgtNHtwYWRkaW5nLWlubGluZTpjYWxjKHZhcigtLXNwYWNpbmcpKjQpfS5weC01e3BhZGRpbmctaW5saW5lOmNhbGModmFyKC0tc3BhY2luZykqNSl9LnB4LVxbNVwuNXB4XF17cGFkZGluZy1pbmxpbmUtc3RhcnQ6NS41cHg7cGFkZGluZy1pbmxpbmUtZW5kOjUuNXB4fS5weC1cWzdweFxde3BhZGRpbmctaW5saW5lLXN0YXJ0OjdweDtwYWRkaW5nLWlubGluZS1lbmQ6N3B4fS5weS0wXC41e3BhZGRpbmctYmxvY2s6Y2FsYyh2YXIoLS1zcGFjaW5nKSouNSl9LnB5LTF7cGFkZGluZy1ibG9jazpjYWxjKHZhcigtLXNwYWNpbmcpKjEpfS5weS0xXC41e3BhZGRpbmctYmxvY2s6Y2FsYyh2YXIoLS1zcGFjaW5nKSoxLjUpfS5weS0ye3BhZGRpbmctYmxvY2s6Y2FsYyh2YXIoLS1zcGFjaW5nKSoyKX0ucHktMlwuNXtwYWRkaW5nLWJsb2NrOmNhbGModmFyKC0tc3BhY2luZykqMi41KX0ucHktNHtwYWRkaW5nLWJsb2NrOmNhbGModmFyKC0tc3BhY2luZykqNCl9LnB5LTZ7cGFkZGluZy1ibG9jazpjYWxjKHZhcigtLXNwYWNpbmcpKjYpfS5weS1cWzJweFxde3BhZGRpbmctYmxvY2stc3RhcnQ6MnB4O3BhZGRpbmctYmxvY2stZW5kOjJweH0ucHktXFszcHhcXXtwYWRkaW5nLWJsb2NrLXN0YXJ0OjNweDtwYWRkaW5nLWJsb2NrLWVuZDozcHh9LnB5LVxbNXB4XF17cGFkZGluZy1ibG9jay1zdGFydDo1cHg7cGFkZGluZy1ibG9jay1lbmQ6NXB4fS5weS1cWzdweFxde3BhZGRpbmctYmxvY2stc3RhcnQ6N3B4O3BhZGRpbmctYmxvY2stZW5kOjdweH0ucHQtMFwuNXtwYWRkaW5nLXRvcDpjYWxjKHZhcigtLXNwYWNpbmcpKi41KX0ucHQtMXtwYWRkaW5nLXRvcDpjYWxjKHZhcigtLXNwYWNpbmcpKjEpfS5wdC0yXC41e3BhZGRpbmctdG9wOmNhbGModmFyKC0tc3BhY2luZykqMi41KX0ucHItMntwYWRkaW5nLXJpZ2h0OmNhbGModmFyKC0tc3BhY2luZykqMil9LnByLTNcLjV7cGFkZGluZy1yaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpKjMuNSl9LnByLVxbMjZweFxde3BhZGRpbmctcmlnaHQ6MjZweH0ucGItMFwuNXtwYWRkaW5nLWJvdHRvbTpjYWxjKHZhcigtLXNwYWNpbmcpKi41KX0ucGItMXtwYWRkaW5nLWJvdHRvbTpjYWxjKHZhcigtLXNwYWNpbmcpKjEpfS5wYi0xXC41e3BhZGRpbmctYm90dG9tOmNhbGModmFyKC0tc3BhY2luZykqMS41KX0ucGItMntwYWRkaW5nLWJvdHRvbTpjYWxjKHZhcigtLXNwYWNpbmcpKjIpfS5wYi1cWzJweFxde3BhZGRpbmctYm90dG9tOjJweH0ucGwtMntwYWRkaW5nLWxlZnQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSoyKX0ucGwtMlwuNXtwYWRkaW5nLWxlZnQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSoyLjUpfS5wbC0ze3BhZGRpbmctbGVmdDpjYWxjKHZhcigtLXNwYWNpbmcpKjMpfS5wbC03e3BhZGRpbmctbGVmdDpjYWxjKHZhcigtLXNwYWNpbmcpKjcpfS5wbC1cWzI2cHhcXXtwYWRkaW5nLWxlZnQ6MjZweH0udGV4dC1jZW50ZXJ7dGV4dC1hbGlnbjpjZW50ZXJ9LnRleHQtbGVmdHt0ZXh0LWFsaWduOmxlZnR9LlxbZm9udC1mYW1pbHlcOi1hcHBsZS1zeXN0ZW1cLHN5c3RlbS11aVwsc2Fucy1zZXJpZlxde2ZvbnQtZmFtaWx5Oi1hcHBsZS1zeXN0ZW0sc3lzdGVtLXVpLEJsaW5rTWFjU3lzdGVtRm9udCxTZWdvZSBVSSxSb2JvdG8sTm90byBTYW5zLFVidW50dSxDYW50YXJlbGwsSGVsdmV0aWNhIE5ldWUsc2Fucy1zZXJpZn0uZm9udC1cW2luaGVyaXRcXXtmb250LWZhbWlseTppbmhlcml0fS5mb250LW1vbm97Zm9udC1mYW1pbHk6dmFyKC0tZm9udC1tb25vKX0uZm9udC1zeXN0ZW17Zm9udC1mYW1pbHk6dmFyKC0tZm9udC1zeXN0ZW0pfS50ZXh0LVxbOXB4XF17Zm9udC1zaXplOjlweH0udGV4dC1cWzEwcHhcXXtmb250LXNpemU6MTBweH0udGV4dC1cWzExXC41cHhcXXtmb250LXNpemU6MTEuNXB4fS50ZXh0LVxbMTFweFxde2ZvbnQtc2l6ZToxMXB4fS50ZXh0LVxbMTJweFxde2ZvbnQtc2l6ZToxMnB4fS50ZXh0LVxbMTNweFxde2ZvbnQtc2l6ZToxM3B4fS50ZXh0LVxbMTRweFxde2ZvbnQtc2l6ZToxNHB4fS50ZXh0LVxbMTdweFxde2ZvbnQtc2l6ZToxN3B4fS50ZXh0LVxbMThweFxde2ZvbnQtc2l6ZToxOHB4fS5sZWFkaW5nLVxbMVwuNVxdey0tdHctbGVhZGluZzoxLjU7bGluZS1oZWlnaHQ6MS41fS5sZWFkaW5nLVxbMVwuMzVcXXstLXR3LWxlYWRpbmc6MS4zNTtsaW5lLWhlaWdodDoxLjM1fS5sZWFkaW5nLW5vbmV7LS10dy1sZWFkaW5nOjE7bGluZS1oZWlnaHQ6MX0ubGVhZGluZy10aWdodHstLXR3LWxlYWRpbmc6dmFyKC0tbGVhZGluZy10aWdodCk7bGluZS1oZWlnaHQ6dmFyKC0tbGVhZGluZy10aWdodCl9LmZvbnQtbWVkaXVtey0tdHctZm9udC13ZWlnaHQ6dmFyKC0tZm9udC13ZWlnaHQtbWVkaXVtKTtmb250LXdlaWdodDp2YXIoLS1mb250LXdlaWdodC1tZWRpdW0pfS5mb250LXNlbWlib2xkey0tdHctZm9udC13ZWlnaHQ6dmFyKC0tZm9udC13ZWlnaHQtc2VtaWJvbGQpO2ZvbnQtd2VpZ2h0OnZhcigtLWZvbnQtd2VpZ2h0LXNlbWlib2xkKX0udHJhY2tpbmctXFswXC4xZW1cXXstLXR3LXRyYWNraW5nOi4xZW07bGV0dGVyLXNwYWNpbmc6LjFlbX0udHJhY2tpbmctXFswXC4wMmVtXF17LS10dy10cmFja2luZzouMDJlbTtsZXR0ZXItc3BhY2luZzouMDJlbX0udHJhY2tpbmctXFswXC4wNGVtXF17LS10dy10cmFja2luZzouMDRlbTtsZXR0ZXItc3BhY2luZzouMDRlbX0udHJhY2tpbmctXFswXC4wNmVtXF17LS10dy10cmFja2luZzouMDZlbTtsZXR0ZXItc3BhY2luZzouMDZlbX0udHJhY2tpbmctXFswXC4wOGVtXF17LS10dy10cmFja2luZzouMDhlbTtsZXR0ZXItc3BhY2luZzouMDhlbX0udHJhY2tpbmctd2lkZXstLXR3LXRyYWNraW5nOnZhcigtLXRyYWNraW5nLXdpZGUpO2xldHRlci1zcGFjaW5nOnZhcigtLXRyYWNraW5nLXdpZGUpfS5icmVhay13b3Jkc3tvdmVyZmxvdy13cmFwOmJyZWFrLXdvcmR9LnRleHQtZWxsaXBzaXN7dGV4dC1vdmVyZmxvdzplbGxpcHNpc30ud2hpdGVzcGFjZS1ub3dyYXB7d2hpdGUtc3BhY2U6bm93cmFwfS5cIXRleHQtd2hpdGV7Y29sb3I6dmFyKC0tY29sb3Itd2hpdGUpIWltcG9ydGFudH0udGV4dC1cW1wjMGEwYTBjXF17Y29sb3I6IzBhMGEwY30udGV4dC1cW1wjOGU4ZTkzXF17Y29sb3I6IzhlOGU5M30udGV4dC1cW1wjMzRkMzk5XF17Y29sb3I6IzM0ZDM5OX0udGV4dC1cW1wjMDYyMDE4XF17Y29sb3I6IzA2MjAxOH0udGV4dC1cW1wjYzhkN2ZmXF17Y29sb3I6I2M4ZDdmZn0udGV4dC1cW1wjZDJlN2ZmXF17Y29sb3I6I2QyZTdmZn0udGV4dC1cW1wjZmZiM2FkXF17Y29sb3I6I2ZmYjNhZH0udGV4dC1hY2NlbnR7Y29sb3I6dmFyKC0tY29sb3ItYWNjZW50KX0udGV4dC1kYW5nZXJ7Y29sb3I6dmFyKC0tY29sb3ItZGFuZ2VyKX0udGV4dC1kYW5nZXItc29mdHtjb2xvcjp2YXIoLS1jb2xvci1kYW5nZXItc29mdCl9LnRleHQtd2FybmluZy1zb2Z0e2NvbG9yOnZhcigtLWNvbG9yLXdhcm5pbmctc29mdCl9LnRleHQtd2hpdGV7Y29sb3I6dmFyKC0tY29sb3Itd2hpdGUpfS50ZXh0LXdoaXRlXC8zNXtjb2xvcjojZmZmZmZmNTl9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsudGV4dC13aGl0ZVwvMzV7Y29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTM1JSx0cmFuc3BhcmVudCl9fS50ZXh0LXdoaXRlXC80MHtjb2xvcjojZmZmNn1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey50ZXh0LXdoaXRlXC80MHtjb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpNDAlLHRyYW5zcGFyZW50KX19LnRleHQtd2hpdGVcLzQ1e2NvbG9yOiNmZmZmZmY3M31Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey50ZXh0LXdoaXRlXC80NXtjb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpNDUlLHRyYW5zcGFyZW50KX19LnRleHQtd2hpdGVcLzUwe2NvbG9yOiNmZmZmZmY4MH1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey50ZXh0LXdoaXRlXC81MHtjb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpNTAlLHRyYW5zcGFyZW50KX19LnRleHQtd2hpdGVcLzU1e2NvbG9yOiNmZmZmZmY4Y31Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey50ZXh0LXdoaXRlXC81NXtjb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpNTUlLHRyYW5zcGFyZW50KX19LnRleHQtd2hpdGVcLzYwe2NvbG9yOiNmZmY5fUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LnRleHQtd2hpdGVcLzYwe2NvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk2MCUsdHJhbnNwYXJlbnQpfX0udGV4dC13aGl0ZVwvNjV7Y29sb3I6I2ZmZmZmZmE2fUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LnRleHQtd2hpdGVcLzY1e2NvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk2NSUsdHJhbnNwYXJlbnQpfX0udGV4dC13aGl0ZVwvNzB7Y29sb3I6I2ZmZmZmZmIzfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LnRleHQtd2hpdGVcLzcwe2NvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk3MCUsdHJhbnNwYXJlbnQpfX0udGV4dC13aGl0ZVwvNzV7Y29sb3I6I2ZmZmZmZmJmfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LnRleHQtd2hpdGVcLzc1e2NvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk3NSUsdHJhbnNwYXJlbnQpfX0udGV4dC13aGl0ZVwvODB7Y29sb3I6I2ZmZmN9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsudGV4dC13aGl0ZVwvODB7Y29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTgwJSx0cmFuc3BhcmVudCl9fS50ZXh0LXdoaXRlXC84NXtjb2xvcjojZmZmZmZmZDl9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsudGV4dC13aGl0ZVwvODV7Y29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTg1JSx0cmFuc3BhcmVudCl9fS50ZXh0LXdoaXRlXC85MHtjb2xvcjojZmZmZmZmZTZ9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsudGV4dC13aGl0ZVwvOTB7Y29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTkwJSx0cmFuc3BhcmVudCl9fS50ZXh0LXdoaXRlXC85NXtjb2xvcjojZmZmZmZmZjJ9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsudGV4dC13aGl0ZVwvOTV7Y29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTk1JSx0cmFuc3BhcmVudCl9fS50ZXh0LXdoaXRlXC9cWzBcLjQyXF17Y29sb3I6I2ZmZmZmZjZifUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LnRleHQtd2hpdGVcL1xbMFwuNDJcXXtjb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpNDIlLHRyYW5zcGFyZW50KX19LnRleHQtd2hpdGVcL1xbMFwuNDhcXXtjb2xvcjojZmZmZmZmN2F9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsudGV4dC13aGl0ZVwvXFswXC40OFxde2NvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk0OCUsdHJhbnNwYXJlbnQpfX0udGV4dC13aGl0ZVwvXFswXC41OFxde2NvbG9yOiNmZmZmZmY5NH1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey50ZXh0LXdoaXRlXC9cWzBcLjU4XF17Y29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTU4LjAlLHRyYW5zcGFyZW50KX19LnRleHQtd2hpdGVcL1xbMFwuOTJcXXtjb2xvcjojZmZmZmZmZWJ9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsudGV4dC13aGl0ZVwvXFswXC45Mlxde2NvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk5MiUsdHJhbnNwYXJlbnQpfX0ubG93ZXJjYXNle3RleHQtdHJhbnNmb3JtOmxvd2VyY2FzZX0udXBwZXJjYXNle3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZX0uaXRhbGlje2ZvbnQtc3R5bGU6aXRhbGljfS50YWJ1bGFyLW51bXN7LS10dy1udW1lcmljLXNwYWNpbmc6dGFidWxhci1udW1zO2ZvbnQtdmFyaWFudC1udW1lcmljOnZhcigtLXR3LW9yZGluYWwsKXZhcigtLXR3LXNsYXNoZWQtemVybywpdmFyKC0tdHctbnVtZXJpYy1maWd1cmUsKXZhcigtLXR3LW51bWVyaWMtc3BhY2luZywpdmFyKC0tdHctbnVtZXJpYy1mcmFjdGlvbiwpfS5cW2ZvbnQtdmFyaWFudC1udW1lcmljXDp0YWJ1bGFyLW51bXNcXXtmb250LXZhcmlhbnQtbnVtZXJpYzp0YWJ1bGFyLW51bXN9Lm5vLXVuZGVybGluZXt0ZXh0LWRlY29yYXRpb24tbGluZTpub25lfS5hbnRpYWxpYXNlZHstd2Via2l0LWZvbnQtc21vb3RoaW5nOmFudGlhbGlhc2VkOy1tb3otb3N4LWZvbnQtc21vb3RoaW5nOmdyYXlzY2FsZX0ub3BhY2l0eS0we29wYWNpdHk6MH0ub3BhY2l0eS00MHtvcGFjaXR5Oi40fS5vcGFjaXR5LTYwe29wYWNpdHk6LjZ9Lm9wYWNpdHktMTAwe29wYWNpdHk6MX0uc2hhZG93ey0tdHctc2hhZG93OjAgMXB4IDNweCAwIHZhcigtLXR3LXNoYWRvdy1jb2xvciwjMDAwMDAwMWEpLDAgMXB4IDJweCAtMXB4IHZhcigtLXR3LXNoYWRvdy1jb2xvciwjMDAwMDAwMWEpO2JveC1zaGFkb3c6dmFyKC0tdHctaW5zZXQtc2hhZG93KSx2YXIoLS10dy1pbnNldC1yaW5nLXNoYWRvdyksdmFyKC0tdHctcmluZy1vZmZzZXQtc2hhZG93KSx2YXIoLS10dy1yaW5nLXNoYWRvdyksdmFyKC0tdHctc2hhZG93KX0uc2hhZG93LVxbMF8xcHhfMnB4X3JnYmFcKDBcLDBcLDBcLDBcLjE4XClcLDBfNnB4XzE4cHhfcmdiYVwoMFwsMFwsMFwsMFwuMjhcKVwsaW5zZXRfMF8wXzBfMXB4X3JnYmFcKDI1NVwsMjU1XCwyNTVcLDBcLjA2XClcXXstLXR3LXNoYWRvdzowIDFweCAycHggdmFyKC0tdHctc2hhZG93LWNvbG9yLCMwMDAwMDAyZSksMCA2cHggMThweCB2YXIoLS10dy1zaGFkb3ctY29sb3IsIzAwMDAwMDQ3KSxpbnNldCAwIDAgMCAxcHggdmFyKC0tdHctc2hhZG93LWNvbG9yLCNmZmZmZmYwZik7Ym94LXNoYWRvdzp2YXIoLS10dy1pbnNldC1zaGFkb3cpLHZhcigtLXR3LWluc2V0LXJpbmctc2hhZG93KSx2YXIoLS10dy1yaW5nLW9mZnNldC1zaGFkb3cpLHZhcigtLXR3LXJpbmctc2hhZG93KSx2YXIoLS10dy1zaGFkb3cpfS5zaGFkb3ctXFswXzhweF8yNHB4X3JnYmFcKDBcLDBcLDBcLDBcLjRcKVxdey0tdHctc2hhZG93OjAgOHB4IDI0cHggdmFyKC0tdHctc2hhZG93LWNvbG9yLCMwMDA2KTtib3gtc2hhZG93OnZhcigtLXR3LWluc2V0LXNoYWRvdyksdmFyKC0tdHctaW5zZXQtcmluZy1zaGFkb3cpLHZhcigtLXR3LXJpbmctb2Zmc2V0LXNoYWRvdyksdmFyKC0tdHctcmluZy1zaGFkb3cpLHZhcigtLXR3LXNoYWRvdyl9LnNoYWRvdy1cWzBfOHB4XzI0cHhfcmdiYVwoMFwsMFwsMFwsMFwuNVwpXF17LS10dy1zaGFkb3c6MCA4cHggMjRweCB2YXIoLS10dy1zaGFkb3ctY29sb3IsIzAwMDAwMDgwKTtib3gtc2hhZG93OnZhcigtLXR3LWluc2V0LXNoYWRvdyksdmFyKC0tdHctaW5zZXQtcmluZy1zaGFkb3cpLHZhcigtLXR3LXJpbmctb2Zmc2V0LXNoYWRvdyksdmFyKC0tdHctcmluZy1zaGFkb3cpLHZhcigtLXR3LXNoYWRvdyl9LnNoYWRvdy1cWzBfOHB4XzI0cHhfcmdiYVwoMFwsMFwsMFwsMFwuNDVcKVxdey0tdHctc2hhZG93OjAgOHB4IDI0cHggdmFyKC0tdHctc2hhZG93LWNvbG9yLCMwMDAwMDA3Myk7Ym94LXNoYWRvdzp2YXIoLS10dy1pbnNldC1zaGFkb3cpLHZhcigtLXR3LWluc2V0LXJpbmctc2hhZG93KSx2YXIoLS10dy1yaW5nLW9mZnNldC1zaGFkb3cpLHZhcigtLXR3LXJpbmctc2hhZG93KSx2YXIoLS10dy1zaGFkb3cpfS5zaGFkb3ctXFswXzEycHhfNDBweF9yZ2JhXCgwXCwwXCwwXCwwXC41NVwpXF17LS10dy1zaGFkb3c6MCAxMnB4IDQwcHggdmFyKC0tdHctc2hhZG93LWNvbG9yLCMwMDAwMDA4Yyk7Ym94LXNoYWRvdzp2YXIoLS10dy1pbnNldC1zaGFkb3cpLHZhcigtLXR3LWluc2V0LXJpbmctc2hhZG93KSx2YXIoLS10dy1yaW5nLW9mZnNldC1zaGFkb3cpLHZhcigtLXR3LXJpbmctc2hhZG93KSx2YXIoLS10dy1zaGFkb3cpfS5zaGFkb3ctXFs4cHhfMF8zMnB4X3JnYmFcKDBcLDBcLDBcLDBcLjM1XClcXXstLXR3LXNoYWRvdzo4cHggMCAzMnB4IHZhcigtLXR3LXNoYWRvdy1jb2xvciwjMDAwMDAwNTkpO2JveC1zaGFkb3c6dmFyKC0tdHctaW5zZXQtc2hhZG93KSx2YXIoLS10dy1pbnNldC1yaW5nLXNoYWRvdyksdmFyKC0tdHctcmluZy1vZmZzZXQtc2hhZG93KSx2YXIoLS10dy1yaW5nLXNoYWRvdyksdmFyKC0tdHctc2hhZG93KX0ucmluZywucmluZy0xey0tdHctcmluZy1zaGFkb3c6dmFyKC0tdHctcmluZy1pbnNldCwpMCAwIDAgY2FsYygxcHggKyB2YXIoLS10dy1yaW5nLW9mZnNldC13aWR0aCkpdmFyKC0tdHctcmluZy1jb2xvcixjdXJyZW50Y29sb3IpO2JveC1zaGFkb3c6dmFyKC0tdHctaW5zZXQtc2hhZG93KSx2YXIoLS10dy1pbnNldC1yaW5nLXNoYWRvdyksdmFyKC0tdHctcmluZy1vZmZzZXQtc2hhZG93KSx2YXIoLS10dy1yaW5nLXNoYWRvdyksdmFyKC0tdHctc2hhZG93KX0ucmluZy0yey0tdHctcmluZy1zaGFkb3c6dmFyKC0tdHctcmluZy1pbnNldCwpMCAwIDAgY2FsYygycHggKyB2YXIoLS10dy1yaW5nLW9mZnNldC13aWR0aCkpdmFyKC0tdHctcmluZy1jb2xvcixjdXJyZW50Y29sb3IpO2JveC1zaGFkb3c6dmFyKC0tdHctaW5zZXQtc2hhZG93KSx2YXIoLS10dy1pbnNldC1yaW5nLXNoYWRvdyksdmFyKC0tdHctcmluZy1vZmZzZXQtc2hhZG93KSx2YXIoLS10dy1yaW5nLXNoYWRvdyksdmFyKC0tdHctc2hhZG93KX0uXFtib3gtc2hhZG93XDowXzBfNnB4X3JnYmFcKDc0XCwyMjJcLDEyOFwsMFwuN1wpXF17Ym94LXNoYWRvdzowIDAgNnB4ICM0YWRlODBiM30uXFtib3gtc2hhZG93XDowXzBfNnB4X3JnYmFcKDI0OFwsMTEzXCwxMTNcLDBcLjU1XClcXXtib3gtc2hhZG93OjAgMCA2cHggI2Y4NzE3MThjfS5yaW5nLVxbXCMxYzFjMWVcXXstLXR3LXJpbmctY29sb3I6IzFjMWMxZX0ucmluZy13aGl0ZVwvMTB7LS10dy1yaW5nLWNvbG9yOiNmZmZmZmYxYX1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5yaW5nLXdoaXRlXC8xMHstLXR3LXJpbmctY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTEwJSx0cmFuc3BhcmVudCl9fS5vdXRsaW5le291dGxpbmUtc3R5bGU6dmFyKC0tdHctb3V0bGluZS1zdHlsZSk7b3V0bGluZS13aWR0aDoxcHh9LmJsdXJ7LS10dy1ibHVyOmJsdXIoOHB4KTtmaWx0ZXI6dmFyKC0tdHctYmx1ciwpdmFyKC0tdHctYnJpZ2h0bmVzcywpdmFyKC0tdHctY29udHJhc3QsKXZhcigtLXR3LWdyYXlzY2FsZSwpdmFyKC0tdHctaHVlLXJvdGF0ZSwpdmFyKC0tdHctaW52ZXJ0LCl2YXIoLS10dy1zYXR1cmF0ZSwpdmFyKC0tdHctc2VwaWEsKXZhcigtLXR3LWRyb3Atc2hhZG93LCl9LmdyYXlzY2FsZXstLXR3LWdyYXlzY2FsZTpncmF5c2NhbGUoMTAwJSk7ZmlsdGVyOnZhcigtLXR3LWJsdXIsKXZhcigtLXR3LWJyaWdodG5lc3MsKXZhcigtLXR3LWNvbnRyYXN0LCl2YXIoLS10dy1ncmF5c2NhbGUsKXZhcigtLXR3LWh1ZS1yb3RhdGUsKXZhcigtLXR3LWludmVydCwpdmFyKC0tdHctc2F0dXJhdGUsKXZhcigtLXR3LXNlcGlhLCl2YXIoLS10dy1kcm9wLXNoYWRvdywpfS5maWx0ZXJ7ZmlsdGVyOnZhcigtLXR3LWJsdXIsKXZhcigtLXR3LWJyaWdodG5lc3MsKXZhcigtLXR3LWNvbnRyYXN0LCl2YXIoLS10dy1ncmF5c2NhbGUsKXZhcigtLXR3LWh1ZS1yb3RhdGUsKXZhcigtLXR3LWludmVydCwpdmFyKC0tdHctc2F0dXJhdGUsKXZhcigtLXR3LXNlcGlhLCl2YXIoLS10dy1kcm9wLXNoYWRvdywpfS5iYWNrZHJvcC1ibHVyey0tdHctYmFja2Ryb3AtYmx1cjpibHVyKDhweCk7LXdlYmtpdC1iYWNrZHJvcC1maWx0ZXI6dmFyKC0tdHctYmFja2Ryb3AtYmx1ciwpdmFyKC0tdHctYmFja2Ryb3AtYnJpZ2h0bmVzcywpdmFyKC0tdHctYmFja2Ryb3AtY29udHJhc3QsKXZhcigtLXR3LWJhY2tkcm9wLWdyYXlzY2FsZSwpdmFyKC0tdHctYmFja2Ryb3AtaHVlLXJvdGF0ZSwpdmFyKC0tdHctYmFja2Ryb3AtaW52ZXJ0LCl2YXIoLS10dy1iYWNrZHJvcC1vcGFjaXR5LCl2YXIoLS10dy1iYWNrZHJvcC1zYXR1cmF0ZSwpdmFyKC0tdHctYmFja2Ryb3Atc2VwaWEsKTtiYWNrZHJvcC1maWx0ZXI6dmFyKC0tdHctYmFja2Ryb3AtYmx1ciwpdmFyKC0tdHctYmFja2Ryb3AtYnJpZ2h0bmVzcywpdmFyKC0tdHctYmFja2Ryb3AtY29udHJhc3QsKXZhcigtLXR3LWJhY2tkcm9wLWdyYXlzY2FsZSwpdmFyKC0tdHctYmFja2Ryb3AtaHVlLXJvdGF0ZSwpdmFyKC0tdHctYmFja2Ryb3AtaW52ZXJ0LCl2YXIoLS10dy1iYWNrZHJvcC1vcGFjaXR5LCl2YXIoLS10dy1iYWNrZHJvcC1zYXR1cmF0ZSwpdmFyKC0tdHctYmFja2Ryb3Atc2VwaWEsKX0uYmFja2Ryb3AtYmx1ci1cWzEycHhcXXstLXR3LWJhY2tkcm9wLWJsdXI6Ymx1cigxMnB4KTstd2Via2l0LWJhY2tkcm9wLWZpbHRlcjp2YXIoLS10dy1iYWNrZHJvcC1ibHVyLCl2YXIoLS10dy1iYWNrZHJvcC1icmlnaHRuZXNzLCl2YXIoLS10dy1iYWNrZHJvcC1jb250cmFzdCwpdmFyKC0tdHctYmFja2Ryb3AtZ3JheXNjYWxlLCl2YXIoLS10dy1iYWNrZHJvcC1odWUtcm90YXRlLCl2YXIoLS10dy1iYWNrZHJvcC1pbnZlcnQsKXZhcigtLXR3LWJhY2tkcm9wLW9wYWNpdHksKXZhcigtLXR3LWJhY2tkcm9wLXNhdHVyYXRlLCl2YXIoLS10dy1iYWNrZHJvcC1zZXBpYSwpO2JhY2tkcm9wLWZpbHRlcjp2YXIoLS10dy1iYWNrZHJvcC1ibHVyLCl2YXIoLS10dy1iYWNrZHJvcC1icmlnaHRuZXNzLCl2YXIoLS10dy1iYWNrZHJvcC1jb250cmFzdCwpdmFyKC0tdHctYmFja2Ryb3AtZ3JheXNjYWxlLCl2YXIoLS10dy1iYWNrZHJvcC1odWUtcm90YXRlLCl2YXIoLS10dy1iYWNrZHJvcC1pbnZlcnQsKXZhcigtLXR3LWJhY2tkcm9wLW9wYWNpdHksKXZhcigtLXR3LWJhY2tkcm9wLXNhdHVyYXRlLCl2YXIoLS10dy1iYWNrZHJvcC1zZXBpYSwpfS5iYWNrZHJvcC1ibHVyLVxbMThweFxdey0tdHctYmFja2Ryb3AtYmx1cjpibHVyKDE4cHgpOy13ZWJraXQtYmFja2Ryb3AtZmlsdGVyOnZhcigtLXR3LWJhY2tkcm9wLWJsdXIsKXZhcigtLXR3LWJhY2tkcm9wLWJyaWdodG5lc3MsKXZhcigtLXR3LWJhY2tkcm9wLWNvbnRyYXN0LCl2YXIoLS10dy1iYWNrZHJvcC1ncmF5c2NhbGUsKXZhcigtLXR3LWJhY2tkcm9wLWh1ZS1yb3RhdGUsKXZhcigtLXR3LWJhY2tkcm9wLWludmVydCwpdmFyKC0tdHctYmFja2Ryb3Atb3BhY2l0eSwpdmFyKC0tdHctYmFja2Ryb3Atc2F0dXJhdGUsKXZhcigtLXR3LWJhY2tkcm9wLXNlcGlhLCk7YmFja2Ryb3AtZmlsdGVyOnZhcigtLXR3LWJhY2tkcm9wLWJsdXIsKXZhcigtLXR3LWJhY2tkcm9wLWJyaWdodG5lc3MsKXZhcigtLXR3LWJhY2tkcm9wLWNvbnRyYXN0LCl2YXIoLS10dy1iYWNrZHJvcC1ncmF5c2NhbGUsKXZhcigtLXR3LWJhY2tkcm9wLWh1ZS1yb3RhdGUsKXZhcigtLXR3LWJhY2tkcm9wLWludmVydCwpdmFyKC0tdHctYmFja2Ryb3Atb3BhY2l0eSwpdmFyKC0tdHctYmFja2Ryb3Atc2F0dXJhdGUsKXZhcigtLXR3LWJhY2tkcm9wLXNlcGlhLCl9LmJhY2tkcm9wLWJsdXItbWR7LS10dy1iYWNrZHJvcC1ibHVyOmJsdXIodmFyKC0tYmx1ci1tZCkpOy13ZWJraXQtYmFja2Ryb3AtZmlsdGVyOnZhcigtLXR3LWJhY2tkcm9wLWJsdXIsKXZhcigtLXR3LWJhY2tkcm9wLWJyaWdodG5lc3MsKXZhcigtLXR3LWJhY2tkcm9wLWNvbnRyYXN0LCl2YXIoLS10dy1iYWNrZHJvcC1ncmF5c2NhbGUsKXZhcigtLXR3LWJhY2tkcm9wLWh1ZS1yb3RhdGUsKXZhcigtLXR3LWJhY2tkcm9wLWludmVydCwpdmFyKC0tdHctYmFja2Ryb3Atb3BhY2l0eSwpdmFyKC0tdHctYmFja2Ryb3Atc2F0dXJhdGUsKXZhcigtLXR3LWJhY2tkcm9wLXNlcGlhLCk7YmFja2Ryb3AtZmlsdGVyOnZhcigtLXR3LWJhY2tkcm9wLWJsdXIsKXZhcigtLXR3LWJhY2tkcm9wLWJyaWdodG5lc3MsKXZhcigtLXR3LWJhY2tkcm9wLWNvbnRyYXN0LCl2YXIoLS10dy1iYWNrZHJvcC1ncmF5c2NhbGUsKXZhcigtLXR3LWJhY2tkcm9wLWh1ZS1yb3RhdGUsKXZhcigtLXR3LWJhY2tkcm9wLWludmVydCwpdmFyKC0tdHctYmFja2Ryb3Atb3BhY2l0eSwpdmFyKC0tdHctYmFja2Ryb3Atc2F0dXJhdGUsKXZhcigtLXR3LWJhY2tkcm9wLXNlcGlhLCl9LmJhY2tkcm9wLXNhdHVyYXRlLTE1MHstLXR3LWJhY2tkcm9wLXNhdHVyYXRlOnNhdHVyYXRlKDE1MCUpOy13ZWJraXQtYmFja2Ryb3AtZmlsdGVyOnZhcigtLXR3LWJhY2tkcm9wLWJsdXIsKXZhcigtLXR3LWJhY2tkcm9wLWJyaWdodG5lc3MsKXZhcigtLXR3LWJhY2tkcm9wLWNvbnRyYXN0LCl2YXIoLS10dy1iYWNrZHJvcC1ncmF5c2NhbGUsKXZhcigtLXR3LWJhY2tkcm9wLWh1ZS1yb3RhdGUsKXZhcigtLXR3LWJhY2tkcm9wLWludmVydCwpdmFyKC0tdHctYmFja2Ryb3Atb3BhY2l0eSwpdmFyKC0tdHctYmFja2Ryb3Atc2F0dXJhdGUsKXZhcigtLXR3LWJhY2tkcm9wLXNlcGlhLCk7YmFja2Ryb3AtZmlsdGVyOnZhcigtLXR3LWJhY2tkcm9wLWJsdXIsKXZhcigtLXR3LWJhY2tkcm9wLWJyaWdodG5lc3MsKXZhcigtLXR3LWJhY2tkcm9wLWNvbnRyYXN0LCl2YXIoLS10dy1iYWNrZHJvcC1ncmF5c2NhbGUsKXZhcigtLXR3LWJhY2tkcm9wLWh1ZS1yb3RhdGUsKXZhcigtLXR3LWJhY2tkcm9wLWludmVydCwpdmFyKC0tdHctYmFja2Ryb3Atb3BhY2l0eSwpdmFyKC0tdHctYmFja2Ryb3Atc2F0dXJhdGUsKXZhcigtLXR3LWJhY2tkcm9wLXNlcGlhLCl9LmJhY2tkcm9wLWZpbHRlcnstd2Via2l0LWJhY2tkcm9wLWZpbHRlcjp2YXIoLS10dy1iYWNrZHJvcC1ibHVyLCl2YXIoLS10dy1iYWNrZHJvcC1icmlnaHRuZXNzLCl2YXIoLS10dy1iYWNrZHJvcC1jb250cmFzdCwpdmFyKC0tdHctYmFja2Ryb3AtZ3JheXNjYWxlLCl2YXIoLS10dy1iYWNrZHJvcC1odWUtcm90YXRlLCl2YXIoLS10dy1iYWNrZHJvcC1pbnZlcnQsKXZhcigtLXR3LWJhY2tkcm9wLW9wYWNpdHksKXZhcigtLXR3LWJhY2tkcm9wLXNhdHVyYXRlLCl2YXIoLS10dy1iYWNrZHJvcC1zZXBpYSwpO2JhY2tkcm9wLWZpbHRlcjp2YXIoLS10dy1iYWNrZHJvcC1ibHVyLCl2YXIoLS10dy1iYWNrZHJvcC1icmlnaHRuZXNzLCl2YXIoLS10dy1iYWNrZHJvcC1jb250cmFzdCwpdmFyKC0tdHctYmFja2Ryb3AtZ3JheXNjYWxlLCl2YXIoLS10dy1iYWNrZHJvcC1odWUtcm90YXRlLCl2YXIoLS10dy1iYWNrZHJvcC1pbnZlcnQsKXZhcigtLXR3LWJhY2tkcm9wLW9wYWNpdHksKXZhcigtLXR3LWJhY2tkcm9wLXNhdHVyYXRlLCl2YXIoLS10dy1iYWNrZHJvcC1zZXBpYSwpfS50cmFuc2l0aW9ue3RyYW5zaXRpb24tcHJvcGVydHk6Y29sb3IsYmFja2dyb3VuZC1jb2xvcixib3JkZXItY29sb3Isb3V0bGluZS1jb2xvcix0ZXh0LWRlY29yYXRpb24tY29sb3IsZmlsbCxzdHJva2UsLS10dy1ncmFkaWVudC1mcm9tLC0tdHctZ3JhZGllbnQtdmlhLC0tdHctZ3JhZGllbnQtdG8sb3BhY2l0eSxib3gtc2hhZG93LHRyYW5zZm9ybSx0cmFuc2xhdGUsc2NhbGUscm90YXRlLGZpbHRlciwtd2Via2l0LWJhY2tkcm9wLWZpbHRlcixiYWNrZHJvcC1maWx0ZXIsZGlzcGxheSxjb250ZW50LXZpc2liaWxpdHksb3ZlcmxheSxwb2ludGVyLWV2ZW50czt0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbjp2YXIoLS10dy1lYXNlLHZhcigtLWRlZmF1bHQtdHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb24pKTt0cmFuc2l0aW9uLWR1cmF0aW9uOnZhcigtLXR3LWR1cmF0aW9uLHZhcigtLWRlZmF1bHQtdHJhbnNpdGlvbi1kdXJhdGlvbikpfS50cmFuc2l0aW9uLVxbYm9yZGVyLWNvbG9yXCxiYWNrZ3JvdW5kXF17dHJhbnNpdGlvbi1wcm9wZXJ0eTpib3JkZXItY29sb3IsYmFja2dyb3VuZDt0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbjp2YXIoLS10dy1lYXNlLHZhcigtLWRlZmF1bHQtdHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb24pKTt0cmFuc2l0aW9uLWR1cmF0aW9uOnZhcigtLXR3LWR1cmF0aW9uLHZhcigtLWRlZmF1bHQtdHJhbnNpdGlvbi1kdXJhdGlvbikpfS50cmFuc2l0aW9uLVxbd2lkdGhcLGJhY2tncm91bmRcXXt0cmFuc2l0aW9uLXByb3BlcnR5OndpZHRoLGJhY2tncm91bmQ7dHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb246dmFyKC0tdHctZWFzZSx2YXIoLS1kZWZhdWx0LXRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uKSk7dHJhbnNpdGlvbi1kdXJhdGlvbjp2YXIoLS10dy1kdXJhdGlvbix2YXIoLS1kZWZhdWx0LXRyYW5zaXRpb24tZHVyYXRpb24pKX0udHJhbnNpdGlvbi1jb2xvcnN7dHJhbnNpdGlvbi1wcm9wZXJ0eTpjb2xvcixiYWNrZ3JvdW5kLWNvbG9yLGJvcmRlci1jb2xvcixvdXRsaW5lLWNvbG9yLHRleHQtZGVjb3JhdGlvbi1jb2xvcixmaWxsLHN0cm9rZSwtLXR3LWdyYWRpZW50LWZyb20sLS10dy1ncmFkaWVudC12aWEsLS10dy1ncmFkaWVudC10bzt0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbjp2YXIoLS10dy1lYXNlLHZhcigtLWRlZmF1bHQtdHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb24pKTt0cmFuc2l0aW9uLWR1cmF0aW9uOnZhcigtLXR3LWR1cmF0aW9uLHZhcigtLWRlZmF1bHQtdHJhbnNpdGlvbi1kdXJhdGlvbikpfS50cmFuc2l0aW9uLW9wYWNpdHl7dHJhbnNpdGlvbi1wcm9wZXJ0eTpvcGFjaXR5O3RyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uOnZhcigtLXR3LWVhc2UsdmFyKC0tZGVmYXVsdC10cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbikpO3RyYW5zaXRpb24tZHVyYXRpb246dmFyKC0tdHctZHVyYXRpb24sdmFyKC0tZGVmYXVsdC10cmFuc2l0aW9uLWR1cmF0aW9uKSl9LmR1cmF0aW9uLTE1MHstLXR3LWR1cmF0aW9uOi4xNXM7dHJhbnNpdGlvbi1kdXJhdGlvbjouMTVzfS5kdXJhdGlvbi0yMDB7LS10dy1kdXJhdGlvbjouMnM7dHJhbnNpdGlvbi1kdXJhdGlvbjouMnN9LmR1cmF0aW9uLTMwMHstLXR3LWR1cmF0aW9uOi4zczt0cmFuc2l0aW9uLWR1cmF0aW9uOi4zc30uZWFzZS1vdXR7LS10dy1lYXNlOnZhcigtLWVhc2Utb3V0KTt0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbjp2YXIoLS1lYXNlLW91dCl9Lm91dGxpbmUtbm9uZXstLXR3LW91dGxpbmUtc3R5bGU6bm9uZTtvdXRsaW5lLXN0eWxlOm5vbmV9LnNlbGVjdC1ub25ley13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lfS5zZWxlY3QtdGV4dHstd2Via2l0LXVzZXItc2VsZWN0OnRleHQ7dXNlci1zZWxlY3Q6dGV4dH0uXFstd2Via2l0LWJhY2tkcm9wLWZpbHRlclw6Ymx1clwoMTJweFwpXF17LXdlYmtpdC1iYWNrZHJvcC1maWx0ZXI6Ymx1cigxMnB4KX0uXFtzY3JvbGxiYXItd2lkdGhcOnRoaW5cXXtzY3JvbGxiYXItd2lkdGg6dGhpbn0uXFtzdHJlYW1cOmF2Y2NcXXtzdHJlYW06YXZjY30uXFtzdHJlYW1cOmgyNjRcXXtzdHJlYW06aDI2NH0uXFt0cmFuc2l0aW9uXDpiYWNrZ3JvdW5kXzBcLjJzXCxib3gtc2hhZG93XzBcLjJzXF17dHJhbnNpdGlvbjpiYWNrZ3JvdW5kIC4ycyxib3gtc2hhZG93IC4yc30uXFt0cmFuc2l0aW9uXDpiYWNrZ3JvdW5kXzBcLjNzXF17dHJhbnNpdGlvbjpiYWNrZ3JvdW5kIC4zc30uXFt0cmFuc2l0aW9uXDpiYWNrZ3JvdW5kXzBcLjEyc1wsYm9yZGVyLWNvbG9yXzBcLjEyc1xde3RyYW5zaXRpb246YmFja2dyb3VuZCAuMTJzLGJvcmRlci1jb2xvciAuMTJzfS5cW3RyYW5zaXRpb25cOmJhY2tncm91bmRfMFwuMTJzXCxjb2xvcl8wXC4xMnNcXXt0cmFuc2l0aW9uOmJhY2tncm91bmQgLjEycyxjb2xvciAuMTJzfS5cW3RyYW5zaXRpb25cOmJhY2tncm91bmRfMFwuMTJzXF17dHJhbnNpdGlvbjpiYWNrZ3JvdW5kIC4xMnN9LlxbdHJhbnNpdGlvblw6YmFja2dyb3VuZF8wXC4xNXNcXXt0cmFuc2l0aW9uOmJhY2tncm91bmQgLjE1c30uXFt0cmFuc2l0aW9uXDpiYWNrZ3JvdW5kXzBcLjE1c19lYXNlXCxjb2xvcl8wXC4xNXNfZWFzZVxde3RyYW5zaXRpb246YmFja2dyb3VuZCAuMTVzLGNvbG9yIC4xNXN9LlxbdHJhbnNpdGlvblw6YmFja2dyb3VuZF8wXC4xNXNfZWFzZVxde3RyYW5zaXRpb246YmFja2dyb3VuZCAuMTVzfS5cW3RyYW5zaXRpb25cOmJhY2tncm91bmRfMFwuMThzX2Vhc2VcXXt0cmFuc2l0aW9uOmJhY2tncm91bmQgLjE4c30uXFt0cmFuc2l0aW9uXDpsZWZ0XzBcLjE1c1xde3RyYW5zaXRpb246bGVmdCAuMTVzfS5cW3RyYW5zaXRpb25cOm9wYWNpdHlfMFwuMTJzXCxiYWNrZ3JvdW5kXzBcLjEyc1wsY29sb3JfMFwuMTJzXF17dHJhbnNpdGlvbjpvcGFjaXR5IC4xMnMsYmFja2dyb3VuZCAuMTJzLGNvbG9yIC4xMnN9LlxbdHJhbnNpdGlvblw6b3BhY2l0eV8wXC4xMnNcXXt0cmFuc2l0aW9uOm9wYWNpdHkgLjEyc30uXFt0cmFuc2l0aW9uXDpvcGFjaXR5XzBcLjE1c19lYXNlXCxiYWNrZ3JvdW5kXzBcLjE1c19lYXNlXF17dHJhbnNpdGlvbjpvcGFjaXR5IC4xNXMsYmFja2dyb3VuZCAuMTVzfS5cW3RyYW5zaXRpb25cOm9wYWNpdHlfMFwuMTVzX2Vhc2VcLHRyYW5zZm9ybV8wXC4xNXNfZWFzZVxde3RyYW5zaXRpb246b3BhY2l0eSAuMTVzLHRyYW5zZm9ybSAuMTVzfS5cW3RyYW5zaXRpb25cOm9wYWNpdHlfMFwuMThzX2Vhc2VcXXt0cmFuc2l0aW9uOm9wYWNpdHkgLjE4c30uXFt0cmFuc2l0aW9uXDpwYWRkaW5nXzBcLjI1c19lYXNlXF17dHJhbnNpdGlvbjpwYWRkaW5nIC4yNXN9LlxbdHJhbnNpdGlvblw6dHJhbnNmb3JtXzBcLjI1c19lYXNlXCxvcGFjaXR5XzBcLjJzX2Vhc2VcXXt0cmFuc2l0aW9uOnRyYW5zZm9ybSAuMjVzLG9wYWNpdHkgLjJzfS5cW3RyYW5zaXRpb25cOndpZHRoXzEyMG1zX2xpbmVhclxde3RyYW5zaXRpb246d2lkdGggLjEycyBsaW5lYXJ9Lmdyb3VwLWZvY3VzLXdpdGhpblw6b3BhY2l0eS0wOmlzKDp3aGVyZSguZ3JvdXApOmZvY3VzLXdpdGhpbiAqKXtvcGFjaXR5OjB9QG1lZGlhIChob3Zlcjpob3Zlcil7Lmdyb3VwLWhvdmVyXDpwb2ludGVyLWV2ZW50cy1hdXRvOmlzKDp3aGVyZSguZ3JvdXApOmhvdmVyICope3BvaW50ZXItZXZlbnRzOmF1dG99fUBtZWRpYSAoaG92ZXI6aG92ZXIpey5ncm91cC1ob3Zlclw6aGlkZGVuOmlzKDp3aGVyZSguZ3JvdXApOmhvdmVyICope2Rpc3BsYXk6bm9uZX19QG1lZGlhIChob3Zlcjpob3Zlcil7Lmdyb3VwLWhvdmVyXDp0cmFuc2xhdGUteC0wOmlzKDp3aGVyZSguZ3JvdXApOmhvdmVyICopey0tdHctdHJhbnNsYXRlLXg6Y2FsYyh2YXIoLS1zcGFjaW5nKSowKTt0cmFuc2xhdGU6dmFyKC0tdHctdHJhbnNsYXRlLXgpdmFyKC0tdHctdHJhbnNsYXRlLXkpfX1AbWVkaWEgKGhvdmVyOmhvdmVyKXsuZ3JvdXAtaG92ZXJcOm9wYWNpdHktMDppcyg6d2hlcmUoLmdyb3VwKTpob3ZlciAqKXtvcGFjaXR5OjB9fUBtZWRpYSAoaG92ZXI6aG92ZXIpey5ncm91cC1ob3Zlclw6b3BhY2l0eS0xMDA6aXMoOndoZXJlKC5ncm91cCk6aG92ZXIgKil7b3BhY2l0eToxfX0ucGxhY2Vob2xkZXJcOnRleHQtd2hpdGVcLzQwOjpwbGFjZWhvbGRlcntjb2xvcjojZmZmNn1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5wbGFjZWhvbGRlclw6dGV4dC13aGl0ZVwvNDA6OnBsYWNlaG9sZGVye2NvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk0MCUsdHJhbnNwYXJlbnQpfX0uZm9jdXMtd2l0aGluXDpiZy13aGl0ZVwvMTA6Zm9jdXMtd2l0aGlue2JhY2tncm91bmQtY29sb3I6I2ZmZmZmZjFhfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmZvY3VzLXdpdGhpblw6Ymctd2hpdGVcLzEwOmZvY3VzLXdpdGhpbntiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSkxMCUsdHJhbnNwYXJlbnQpfX1AbWVkaWEgKGhvdmVyOmhvdmVyKXsuaG92ZXJcOmJvcmRlci1cW3JnYmFcKDI1NVwsMjU1XCwyNTVcLDBcLjE2XClcXTpob3Zlcntib3JkZXItY29sb3I6I2ZmZmZmZjI5fX1AbWVkaWEgKGhvdmVyOmhvdmVyKXsuaG92ZXJcOmJvcmRlci1cW3JnYmFcKDI1NVwsMjU1XCwyNTVcLDBcLjE4XClcXTpob3Zlcntib3JkZXItY29sb3I6I2ZmZmZmZjJlfX1AbWVkaWEgKGhvdmVyOmhvdmVyKXsuaG92ZXJcOmJvcmRlci13aGl0ZVwvMjA6aG92ZXJ7Ym9yZGVyLWNvbG9yOiNmZmYzfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmhvdmVyXDpib3JkZXItd2hpdGVcLzIwOmhvdmVye2JvcmRlci1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpMjAlLHRyYW5zcGFyZW50KX19fUBtZWRpYSAoaG92ZXI6aG92ZXIpey5ob3Zlclw6Ym9yZGVyLXdoaXRlXC9cWzBcLjg4XF06aG92ZXJ7Ym9yZGVyLWNvbG9yOiNmZmZmZmZlMH1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5ob3Zlclw6Ym9yZGVyLXdoaXRlXC9cWzBcLjg4XF06aG92ZXJ7Ym9yZGVyLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk4OCUsdHJhbnNwYXJlbnQpfX19QG1lZGlhIChob3Zlcjpob3Zlcil7LmhvdmVyXDpiZy13aGl0ZVwvODpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiNmZmZmZmYxNH1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5ob3Zlclw6Ymctd2hpdGVcLzg6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpOCUsdHJhbnNwYXJlbnQpfX19QG1lZGlhIChob3Zlcjpob3Zlcil7LmhvdmVyXDpiZy13aGl0ZVwvMTI6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmMWZ9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuaG92ZXJcOmJnLXdoaXRlXC8xMjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSkxMiUsdHJhbnNwYXJlbnQpfX19QG1lZGlhIChob3Zlcjpob3Zlcil7LmhvdmVyXDpiZy13aGl0ZVwvMTg6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmMmV9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuaG92ZXJcOmJnLXdoaXRlXC8xODpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSkxOCUsdHJhbnNwYXJlbnQpfX19QG1lZGlhIChob3Zlcjpob3Zlcil7LmhvdmVyXDpiZy13aGl0ZVwvMjA6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojZmZmM31Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5ob3Zlclw6Ymctd2hpdGVcLzIwOmhvdmVye2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTIwJSx0cmFuc3BhcmVudCl9fX1AbWVkaWEgKGhvdmVyOmhvdmVyKXsuaG92ZXJcOmJnLXdoaXRlXC8yNTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiNmZmZmZmY0MH1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5ob3Zlclw6Ymctd2hpdGVcLzI1OmhvdmVye2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTI1JSx0cmFuc3BhcmVudCl9fX1AbWVkaWEgKGhvdmVyOmhvdmVyKXsuaG92ZXJcOmJnLXdoaXRlXC9cWzBcLjA1XF06aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmMGR9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuaG92ZXJcOmJnLXdoaXRlXC9cWzBcLjA1XF06aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpNSUsdHJhbnNwYXJlbnQpfX19QG1lZGlhIChob3Zlcjpob3Zlcil7LmhvdmVyXDpiZy13aGl0ZVwvXFswXC4wNlxdOmhvdmVye2JhY2tncm91bmQtY29sb3I6I2ZmZmZmZjBmfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmhvdmVyXDpiZy13aGl0ZVwvXFswXC4wNlxdOmhvdmVye2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTYlLHRyYW5zcGFyZW50KX19fUBtZWRpYSAoaG92ZXI6aG92ZXIpey5ob3Zlclw6Ymctd2hpdGVcL1xbMFwuMDdcXTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiNmZmZmZmYxMn1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5ob3Zlclw6Ymctd2hpdGVcL1xbMFwuMDdcXTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk3LjAlLHRyYW5zcGFyZW50KX19fUBtZWRpYSAoaG92ZXI6aG92ZXIpey5ob3Zlclw6Ymctd2hpdGVcL1xbMFwuMDlcXTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiNmZmZmZmYxN31Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5ob3Zlclw6Ymctd2hpdGVcL1xbMFwuMDlcXTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk5JSx0cmFuc3BhcmVudCl9fX1AbWVkaWEgKGhvdmVyOmhvdmVyKXsuaG92ZXJcOmJnLXdoaXRlXC9cWzBcLjg4XF06aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmZTB9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuaG92ZXJcOmJnLXdoaXRlXC9cWzBcLjg4XF06aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpODglLHRyYW5zcGFyZW50KX19fUBtZWRpYSAoaG92ZXI6aG92ZXIpey5ob3Zlclw6dGV4dC1cW1wjMGEwYTBjXF06aG92ZXJ7Y29sb3I6IzBhMGEwY319QG1lZGlhIChob3Zlcjpob3Zlcil7LmhvdmVyXDp0ZXh0LXdoaXRlOmhvdmVye2NvbG9yOnZhcigtLWNvbG9yLXdoaXRlKX19QG1lZGlhIChob3Zlcjpob3Zlcil7LmhvdmVyXDp0ZXh0LXdoaXRlXC84NTpob3Zlcntjb2xvcjojZmZmZmZmZDl9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuaG92ZXJcOnRleHQtd2hpdGVcLzg1OmhvdmVye2NvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk4NSUsdHJhbnNwYXJlbnQpfX19QG1lZGlhIChob3Zlcjpob3Zlcil7LmhvdmVyXDp0ZXh0LXdoaXRlXC85MDpob3Zlcntjb2xvcjojZmZmZmZmZTZ9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuaG92ZXJcOnRleHQtd2hpdGVcLzkwOmhvdmVye2NvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk5MCUsdHJhbnNwYXJlbnQpfX19LmZvY3VzXDpib3JkZXItXFtyZ2JhXCgyNTVcLDI1NVwsMjU1XCwwXC4yNFwpXF06Zm9jdXN7Ym9yZGVyLWNvbG9yOiNmZmZmZmYzZH0uZm9jdXNcOmJnLXdoaXRlXC9cWzBcLjA4XF06Zm9jdXN7YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmMTR9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuZm9jdXNcOmJnLXdoaXRlXC9cWzBcLjA4XF06Zm9jdXN7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpOCUsdHJhbnNwYXJlbnQpfX0uZm9jdXNcOm91dGxpbmUtbm9uZTpmb2N1c3stLXR3LW91dGxpbmUtc3R5bGU6bm9uZTtvdXRsaW5lLXN0eWxlOm5vbmV9LmZvY3VzLXZpc2libGVcOmJnLXdoaXRlXC84OmZvY3VzLXZpc2libGV7YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmMTR9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuZm9jdXMtdmlzaWJsZVw6Ymctd2hpdGVcLzg6Zm9jdXMtdmlzaWJsZXtiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk4JSx0cmFuc3BhcmVudCl9fS5mb2N1cy12aXNpYmxlXDpvcGFjaXR5LTEwMDpmb2N1cy12aXNpYmxle29wYWNpdHk6MX0uZm9jdXMtdmlzaWJsZVw6XFtvdXRsaW5lXDoxXC41cHhfc29saWRfcmdiYVwoMTBcLDEzMlwsMjU1XCwwXC41NVwpXF06Zm9jdXMtdmlzaWJsZXtvdXRsaW5lOjEuNXB4IHNvbGlkICMwYTg0ZmY4Y30uZm9jdXMtdmlzaWJsZVw6b3V0bGluZTpmb2N1cy12aXNpYmxle291dGxpbmUtc3R5bGU6dmFyKC0tdHctb3V0bGluZS1zdHlsZSk7b3V0bGluZS13aWR0aDoxcHh9LmZvY3VzLXZpc2libGVcOm91dGxpbmUtMjpmb2N1cy12aXNpYmxle291dGxpbmUtc3R5bGU6dmFyKC0tdHctb3V0bGluZS1zdHlsZSk7b3V0bGluZS13aWR0aDoycHh9LmZvY3VzLXZpc2libGVcOm91dGxpbmUtb2Zmc2V0LTI6Zm9jdXMtdmlzaWJsZXtvdXRsaW5lLW9mZnNldDoycHh9LmZvY3VzLXZpc2libGVcOm91dGxpbmUtb2Zmc2V0LTQ6Zm9jdXMtdmlzaWJsZXtvdXRsaW5lLW9mZnNldDo0cHh9LmZvY3VzLXZpc2libGVcOm91dGxpbmUtd2hpdGVcLzYwOmZvY3VzLXZpc2libGV7b3V0bGluZS1jb2xvcjojZmZmOX1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5mb2N1cy12aXNpYmxlXDpvdXRsaW5lLXdoaXRlXC82MDpmb2N1cy12aXNpYmxle291dGxpbmUtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTYwJSx0cmFuc3BhcmVudCl9fS5hY3RpdmVcOnNjYWxlLVxbMFwuOTdcXTphY3RpdmV7c2NhbGU6Ljk3fUBtZWRpYSAoaG92ZXI6aG92ZXIpey5lbmFibGVkXDpob3Zlclw6Ym9yZGVyLVxbcmdiYVwoMjU1XCwyNTVcLDI1NVwsMFwuMThcKVxdOmVuYWJsZWQ6aG92ZXJ7Ym9yZGVyLWNvbG9yOiNmZmZmZmYyZX19QG1lZGlhIChob3Zlcjpob3Zlcil7LmVuYWJsZWRcOmhvdmVyXDpib3JkZXItd2hpdGVcLzIwOmVuYWJsZWQ6aG92ZXJ7Ym9yZGVyLWNvbG9yOiNmZmYzfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmVuYWJsZWRcOmhvdmVyXDpib3JkZXItd2hpdGVcLzIwOmVuYWJsZWQ6aG92ZXJ7Ym9yZGVyLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSkyMCUsdHJhbnNwYXJlbnQpfX19QG1lZGlhIChob3Zlcjpob3Zlcil7LmVuYWJsZWRcOmhvdmVyXDpib3JkZXItd2hpdGVcL1xbMFwuODhcXTplbmFibGVkOmhvdmVye2JvcmRlci1jb2xvcjojZmZmZmZmZTB9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuZW5hYmxlZFw6aG92ZXJcOmJvcmRlci13aGl0ZVwvXFswXC44OFxdOmVuYWJsZWQ6aG92ZXJ7Ym9yZGVyLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk4OCUsdHJhbnNwYXJlbnQpfX19QG1lZGlhIChob3Zlcjpob3Zlcil7LmVuYWJsZWRcOmhvdmVyXDpiZy1cW1wjMmEyYTJjXF06ZW5hYmxlZDpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiMyYTJhMmN9fUBtZWRpYSAoaG92ZXI6aG92ZXIpey5lbmFibGVkXDpob3Zlclw6Ymctd2hpdGVcL1xbMFwuMDZcXTplbmFibGVkOmhvdmVye2JhY2tncm91bmQtY29sb3I6I2ZmZmZmZjBmfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmVuYWJsZWRcOmhvdmVyXDpiZy13aGl0ZVwvXFswXC4wNlxdOmVuYWJsZWQ6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpNiUsdHJhbnNwYXJlbnQpfX19QG1lZGlhIChob3Zlcjpob3Zlcil7LmVuYWJsZWRcOmhvdmVyXDpiZy13aGl0ZVwvXFswXC4wOVxdOmVuYWJsZWQ6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmMTd9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuZW5hYmxlZFw6aG92ZXJcOmJnLXdoaXRlXC9cWzBcLjA5XF06ZW5hYmxlZDpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk5JSx0cmFuc3BhcmVudCl9fX1AbWVkaWEgKGhvdmVyOmhvdmVyKXsuZW5hYmxlZFw6aG92ZXJcOmJnLXdoaXRlXC9cWzBcLjIyXF06ZW5hYmxlZDpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiNmZmZmZmYzOH1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5lbmFibGVkXDpob3Zlclw6Ymctd2hpdGVcL1xbMFwuMjJcXTplbmFibGVkOmhvdmVye2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTIyJSx0cmFuc3BhcmVudCl9fX1AbWVkaWEgKGhvdmVyOmhvdmVyKXsuZW5hYmxlZFw6aG92ZXJcOmJnLXdoaXRlXC9cWzBcLjg4XF06ZW5hYmxlZDpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiNmZmZmZmZlMH1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5lbmFibGVkXDpob3Zlclw6Ymctd2hpdGVcL1xbMFwuODhcXTplbmFibGVkOmhvdmVye2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTg4JSx0cmFuc3BhcmVudCl9fX1AbWVkaWEgKGhvdmVyOmhvdmVyKXsuZW5hYmxlZFw6aG92ZXJcOnRleHQtXFtcIzBhMGEwY1xdOmVuYWJsZWQ6aG92ZXJ7Y29sb3I6IzBhMGEwY319QG1lZGlhIChob3Zlcjpob3Zlcil7LmVuYWJsZWRcOmhvdmVyXDp0ZXh0LXdoaXRlOmVuYWJsZWQ6aG92ZXJ7Y29sb3I6dmFyKC0tY29sb3Itd2hpdGUpfX1AbWVkaWEgKGhvdmVyOmhvdmVyKXsuZW5hYmxlZFw6aG92ZXJcOmJyaWdodG5lc3MtXFsxXC4wOFxdOmVuYWJsZWQ6aG92ZXJ7LS10dy1icmlnaHRuZXNzOmJyaWdodG5lc3MoMS4wOCk7ZmlsdGVyOnZhcigtLXR3LWJsdXIsKXZhcigtLXR3LWJyaWdodG5lc3MsKXZhcigtLXR3LWNvbnRyYXN0LCl2YXIoLS10dy1ncmF5c2NhbGUsKXZhcigtLXR3LWh1ZS1yb3RhdGUsKXZhcigtLXR3LWludmVydCwpdmFyKC0tdHctc2F0dXJhdGUsKXZhcigtLXR3LXNlcGlhLCl2YXIoLS10dy1kcm9wLXNoYWRvdywpfX0uZGlzYWJsZWRcOmN1cnNvci1kZWZhdWx0OmRpc2FibGVke2N1cnNvcjpkZWZhdWx0fS5kaXNhYmxlZFw6Y3Vyc29yLW5vdC1hbGxvd2VkOmRpc2FibGVke2N1cnNvcjpub3QtYWxsb3dlZH0uZGlzYWJsZWRcOnRleHQtd2hpdGVcLzQwOmRpc2FibGVke2NvbG9yOiNmZmY2fUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmRpc2FibGVkXDp0ZXh0LXdoaXRlXC80MDpkaXNhYmxlZHtjb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpNDAlLHRyYW5zcGFyZW50KX19LmRpc2FibGVkXDpvcGFjaXR5LTQwOmRpc2FibGVke29wYWNpdHk6LjR9LmRpc2FibGVkXDpvcGFjaXR5LTUwOmRpc2FibGVke29wYWNpdHk6LjV9QG1lZGlhIChtYXgtd2lkdGg6ODk5Ljk5OXB4KXsubWF4LVxbOTAwcHhcXVw6aGlkZGVue2Rpc3BsYXk6bm9uZX19LlxbXCZcOlw6LW1vei1yYW5nZS1wcm9ncmVzc1xdXDpoLVxbNHB4XF06Oi1tb3otcmFuZ2UtcHJvZ3Jlc3N7aGVpZ2h0OjRweH0uXFtcJlw6XDotbW96LXJhbmdlLXByb2dyZXNzXF1cOnJvdW5kZWQtZnVsbDo6LW1vei1yYW5nZS1wcm9ncmVzc3tib3JkZXItcmFkaXVzOjMuNDAyODJlMzhweH0uXFtcJlw6XDotbW96LXJhbmdlLXByb2dyZXNzXF1cOmJnLVxbdmFyXCgtLXNsaWRlci1maWxsLWNvbG9yXClcXTo6LW1vei1yYW5nZS1wcm9ncmVzc3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLXNsaWRlci1maWxsLWNvbG9yKX0uXFtcJlw6XDotbW96LXJhbmdlLXRodW1iXF1cOnNpemUtXFsxM3B4XF06Oi1tb3otcmFuZ2UtdGh1bWJ7d2lkdGg6MTNweDtoZWlnaHQ6MTNweH0uXFtcJlw6XDotbW96LXJhbmdlLXRodW1iXF1cOnJvdW5kZWQtZnVsbDo6LW1vei1yYW5nZS10aHVtYntib3JkZXItcmFkaXVzOjMuNDAyODJlMzhweH0uXFtcJlw6XDotbW96LXJhbmdlLXRodW1iXF1cOmJvcmRlci1ub25lOjotbW96LXJhbmdlLXRodW1iey0tdHctYm9yZGVyLXN0eWxlOm5vbmU7Ym9yZGVyLXN0eWxlOm5vbmV9LlxbXCZcOlw6LW1vei1yYW5nZS10aHVtYlxdXDpiZy13aGl0ZTo6LW1vei1yYW5nZS10aHVtYntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNvbG9yLXdoaXRlKX0uXFtcJlw6XDotbW96LXJhbmdlLXRyYWNrXF1cOmgtXFs0cHhcXTo6LW1vei1yYW5nZS10cmFja3toZWlnaHQ6NHB4fS5cW1wmXDpcOi1tb3otcmFuZ2UtdHJhY2tcXVw6cm91bmRlZC1mdWxsOjotbW96LXJhbmdlLXRyYWNre2JvcmRlci1yYWRpdXM6My40MDI4MmUzOHB4fS5cW1wmXDpcOi1tb3otcmFuZ2UtdHJhY2tcXVw6Ymctd2hpdGVcLzIwOjotbW96LXJhbmdlLXRyYWNre2JhY2tncm91bmQtY29sb3I6I2ZmZjN9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuXFtcJlw6XDotbW96LXJhbmdlLXRyYWNrXF1cOmJnLXdoaXRlXC8yMDo6LW1vei1yYW5nZS10cmFja3tiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSkyMCUsdHJhbnNwYXJlbnQpfX0uXFtcJlw6XDotd2Via2l0LXNsaWRlci1ydW5uYWJsZS10cmFja1xdXDpoLVxbNHB4XF06Oi13ZWJraXQtc2xpZGVyLXJ1bm5hYmxlLXRyYWNre2hlaWdodDo0cHh9LlxbXCZcOlw6LXdlYmtpdC1zbGlkZXItcnVubmFibGUtdHJhY2tcXVw6cm91bmRlZC1mdWxsOjotd2Via2l0LXNsaWRlci1ydW5uYWJsZS10cmFja3tib3JkZXItcmFkaXVzOjMuNDAyODJlMzhweH0uXFtcJlw6XDotd2Via2l0LXNsaWRlci1ydW5uYWJsZS10cmFja1xdXDpcW2JhY2tncm91bmRcOmxpbmVhci1ncmFkaWVudFwodG9fcmlnaHRcLHZhclwoLS1zbGlkZXItZmlsbC1jb2xvclwpX3ZhclwoLS1zbGlkZXItZmlsbFwpXCxyZ2JhXCgyNTVcLDI1NVwsMjU1XCwwXC4yMlwpX3ZhclwoLS1zbGlkZXItZmlsbFwpXClcXTo6LXdlYmtpdC1zbGlkZXItcnVubmFibGUtdHJhY2t7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsdmFyKC0tc2xpZGVyLWZpbGwtY29sb3IpdmFyKC0tc2xpZGVyLWZpbGwpLCNmZmZmZmYzOCB2YXIoLS1zbGlkZXItZmlsbCkpfS5cW1wmXDpcOi13ZWJraXQtc2xpZGVyLXRodW1iXF1cOi1tdC1cWzRcLjVweFxdOjotd2Via2l0LXNsaWRlci10aHVtYnttYXJnaW4tdG9wOi00LjVweH0uXFtcJlw6XDotd2Via2l0LXNsaWRlci10aHVtYlxdXDpzaXplLVxbMTNweFxdOjotd2Via2l0LXNsaWRlci10aHVtYnt3aWR0aDoxM3B4O2hlaWdodDoxM3B4fS5cW1wmXDpcOi13ZWJraXQtc2xpZGVyLXRodW1iXF1cOmFwcGVhcmFuY2Utbm9uZTo6LXdlYmtpdC1zbGlkZXItdGh1bWJ7YXBwZWFyYW5jZTpub25lfS5cW1wmXDpcOi13ZWJraXQtc2xpZGVyLXRodW1iXF1cOnJvdW5kZWQtZnVsbDo6LXdlYmtpdC1zbGlkZXItdGh1bWJ7Ym9yZGVyLXJhZGl1czozLjQwMjgyZTM4cHh9LlxbXCZcOlw6LXdlYmtpdC1zbGlkZXItdGh1bWJcXVw6Ymctd2hpdGU6Oi13ZWJraXQtc2xpZGVyLXRodW1ie2JhY2tncm91bmQtY29sb3I6dmFyKC0tY29sb3Itd2hpdGUpfS5cW1wmXDpcOi13ZWJraXQtc2xpZGVyLXRodW1iXF1cOnNoYWRvdy1cWzBfMXB4XzNweF9yZ2JhXCgwXCwwXCwwXCwwXC40NVwpXF06Oi13ZWJraXQtc2xpZGVyLXRodW1iey0tdHctc2hhZG93OjAgMXB4IDNweCB2YXIoLS10dy1zaGFkb3ctY29sb3IsIzAwMDAwMDczKTtib3gtc2hhZG93OnZhcigtLXR3LWluc2V0LXNoYWRvdyksdmFyKC0tdHctaW5zZXQtcmluZy1zaGFkb3cpLHZhcigtLXR3LXJpbmctb2Zmc2V0LXNoYWRvdyksdmFyKC0tdHctcmluZy1zaGFkb3cpLHZhcigtLXR3LXNoYWRvdyl9LlxbXCZcOmRpc2FibGVkXDpcOi1tb3otcmFuZ2UtdGh1bWJcXVw6Ymctd2hpdGVcLzUwOmRpc2FibGVkOjotbW96LXJhbmdlLXRodW1ie2JhY2tncm91bmQtY29sb3I6I2ZmZmZmZjgwfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LlxbXCZcOmRpc2FibGVkXDpcOi1tb3otcmFuZ2UtdGh1bWJcXVw6Ymctd2hpdGVcLzUwOmRpc2FibGVkOjotbW96LXJhbmdlLXRodW1ie2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTUwJSx0cmFuc3BhcmVudCl9fS5cW1wmXDpkaXNhYmxlZFw6XDotd2Via2l0LXNsaWRlci10aHVtYlxdXDpiZy13aGl0ZVwvNTA6ZGlzYWJsZWQ6Oi13ZWJraXQtc2xpZGVyLXRodW1ie2JhY2tncm91bmQtY29sb3I6I2ZmZmZmZjgwfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LlxbXCZcOmRpc2FibGVkXDpcOi13ZWJraXQtc2xpZGVyLXRodW1iXF1cOmJnLXdoaXRlXC81MDpkaXNhYmxlZDo6LXdlYmtpdC1zbGlkZXItdGh1bWJ7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpNTAlLHRyYW5zcGFyZW50KX19fTpyb290ey0tYnVuY3NzLWxpZ2h0OiA7LS1idW5jc3MtZGFyazppbml0aWFsO2NvbG9yLXNjaGVtZTpkYXJrOy0tc2VydmUtc2ltLXBhbmVsLWJnOiMxODE4MTg7LS1zZXJ2ZS1zaW0tcGFuZWwtYmctdHJhbnNsdWNlbnQ6IzE4MTgxOGM3Oy0tc2VydmUtc2ltLXBhbmVsLWJnLXRyYW5zcGFyZW50OiMxODE4MTgwMH1Ac3VwcG9ydHMgKGludGVycG9sYXRlLXNpemU6IGFsbG93LWtleXdvcmRzKXs6cm9vdHtpbnRlcnBvbGF0ZS1zaXplOmFsbG93LWtleXdvcmRzfX1kZXRhaWxzLmxlbS1zZWN0aW9uOjpkZXRhaWxzLWNvbnRlbnR7b3ZlcmZsb3c6Y2xpcDt0cmFuc2l0aW9uOmhlaWdodCAuMjJzIGVhc2UsY29udGVudC12aXNpYmlsaXR5IC4yMnMgYWxsb3ctZGlzY3JldGU7aGVpZ2h0OjB9ZGV0YWlscy5sZW0tc2VjdGlvbltvcGVuXTo6ZGV0YWlscy1jb250ZW50e2hlaWdodDphdXRvfWRldGFpbHMubGVtLXNlY3Rpb24+c3VtbWFyeXtsaXN0LXN0eWxlOm5vbmV9ZGV0YWlscy5sZW0tc2VjdGlvbj5zdW1tYXJ5Ojotd2Via2l0LWRldGFpbHMtbWFya2Vye2Rpc3BsYXk6bm9uZX1kZXRhaWxzLmxlbS1zZWN0aW9uPnN1bW1hcnk6aG92ZXJ7Y29sb3I6I2ZmZn1kZXRhaWxzLmxlbS1zZWN0aW9uPnN1bW1hcnk6aG92ZXIgLmxlbS1jaGV2cm9ue2NvbG9yOiNmZmZmZmZkOSFpbXBvcnRhbnR9LmxlbS1jaGV2cm9ue3RyYW5zZm9ybS1vcmlnaW46Y2VudGVyO3RyYW5zaXRpb246dHJhbnNmb3JtIC4xNnMsY29sb3IgLjEyc31AY29udGFpbmVyICh3aWR0aDw9MjEwcHgpe1tkYXRhLWxvY2F0aW9uLXN0YXR1cy10b3RhbF17ZGlzcGxheTpub25lfX1Aa2V5ZnJhbWVzIGdyaWQtc3Bpbnt0b3t0cmFuc2Zvcm06cm90YXRlKDM2MGRlZyl9fUBrZXlmcmFtZXMgc2VydmUtc2ltLXRvYXN0LWluZGV0ZXJtaW5hdGV7MCV7dHJhbnNmb3JtOnRyYW5zbGF0ZSgtMTAwJSl9dG97dHJhbnNmb3JtOnRyYW5zbGF0ZSgyNTAlKX19QGtleWZyYW1lcyBzZXJ2ZS1zaW0tdG9hc3QtcG9wLWluezAle29wYWNpdHk6MDt0cmFuc2Zvcm06dHJhbnNsYXRlWSgxMnB4KXNjYWxlKC45Nil9dG97b3BhY2l0eToxO3RyYW5zZm9ybTp0cmFuc2xhdGVZKDApc2NhbGUoMSl9fUBrZXlmcmFtZXMgc2VydmUtc2ltLXRvYXN0LXBvcC1vdXR7MCV7b3BhY2l0eToxO3RyYW5zZm9ybTp0cmFuc2xhdGVZKDApc2NhbGUoMSl9dG97b3BhY2l0eTowO3RyYW5zZm9ybTp0cmFuc2xhdGVZKDhweClzY2FsZSguOTYpfX0uc2VydmUtc2ltLXRvYXN0LWluZGV0ZXJtaW5hdGV7YW5pbWF0aW9uOnNlcnZlLXNpbS10b2FzdC1pbmRldGVybWluYXRlIDEuMXMgZWFzZS1pbi1vdXQgaW5maW5pdGV9LmdyaWQtc2h1dGRvd24tYnRue29wYWNpdHk6MDt0cmFuc2l0aW9uOm9wYWNpdHkgLjEycyxiYWNrZ3JvdW5kIC4xMnMsY29sb3IgLjEyc30uZ3JpZC10aWxlOmhvdmVyIC5ncmlkLXNodXRkb3duLWJ0bntvcGFjaXR5OjF9LmdyaWQtc2h1dGRvd24tYnRuOmhvdmVyOm5vdCg6ZGlzYWJsZWQpe2NvbG9yOiNmZmY7YmFja2dyb3VuZDojNWExZDFkO2JvcmRlci1jb2xvcjojYTMzfS5ncmlkLXRpbGU6aG92ZXJ7Ym9yZGVyLWNvbG9yOiM1NTUhaW1wb3J0YW50fUBwcm9wZXJ0eSAtLXR3LXRyYW5zbGF0ZS14e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2U7aW5pdGlhbC12YWx1ZTowfUBwcm9wZXJ0eSAtLXR3LXRyYW5zbGF0ZS15e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2U7aW5pdGlhbC12YWx1ZTowfUBwcm9wZXJ0eSAtLXR3LXRyYW5zbGF0ZS16e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2U7aW5pdGlhbC12YWx1ZTowfUBwcm9wZXJ0eSAtLXR3LXJvdGF0ZS14e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctcm90YXRlLXl7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1yb3RhdGUtentzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LXNrZXcteHtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LXNrZXcteXtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LWJvcmRlci1zdHlsZXtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlO2luaXRpYWwtdmFsdWU6c29saWR9QHByb3BlcnR5IC0tdHctbGVhZGluZ3tzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LWZvbnQtd2VpZ2h0e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctdHJhY2tpbmd7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1vcmRpbmFse3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctc2xhc2hlZC16ZXJve3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctbnVtZXJpYy1maWd1cmV7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1udW1lcmljLXNwYWNpbmd7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1udW1lcmljLWZyYWN0aW9ue3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctc2hhZG93e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2U7aW5pdGlhbC12YWx1ZTowIDAgIzAwMDB9QHByb3BlcnR5IC0tdHctc2hhZG93LWNvbG9ye3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctc2hhZG93LWFscGhhe3N5bnRheDoiPHBlcmNlbnRhZ2U+Ijtpbmhlcml0czpmYWxzZTtpbml0aWFsLXZhbHVlOjEwMCV9QHByb3BlcnR5IC0tdHctaW5zZXQtc2hhZG93e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2U7aW5pdGlhbC12YWx1ZTowIDAgIzAwMDB9QHByb3BlcnR5IC0tdHctaW5zZXQtc2hhZG93LWNvbG9ye3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctaW5zZXQtc2hhZG93LWFscGhhe3N5bnRheDoiPHBlcmNlbnRhZ2U+Ijtpbmhlcml0czpmYWxzZTtpbml0aWFsLXZhbHVlOjEwMCV9QHByb3BlcnR5IC0tdHctcmluZy1jb2xvcntzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LXJpbmctc2hhZG93e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2U7aW5pdGlhbC12YWx1ZTowIDAgIzAwMDB9QHByb3BlcnR5IC0tdHctaW5zZXQtcmluZy1jb2xvcntzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LWluc2V0LXJpbmctc2hhZG93e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2U7aW5pdGlhbC12YWx1ZTowIDAgIzAwMDB9QHByb3BlcnR5IC0tdHctcmluZy1pbnNldHtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LXJpbmctb2Zmc2V0LXdpZHRoe3N5bnRheDoiPGxlbmd0aD4iO2luaGVyaXRzOmZhbHNlO2luaXRpYWwtdmFsdWU6MH1AcHJvcGVydHkgLS10dy1yaW5nLW9mZnNldC1jb2xvcntzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlO2luaXRpYWwtdmFsdWU6I2ZmZn1AcHJvcGVydHkgLS10dy1yaW5nLW9mZnNldC1zaGFkb3d7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZTtpbml0aWFsLXZhbHVlOjAgMCAjMDAwMH1AcHJvcGVydHkgLS10dy1vdXRsaW5lLXN0eWxle3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2U7aW5pdGlhbC12YWx1ZTpzb2xpZH1AcHJvcGVydHkgLS10dy1ibHVye3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctYnJpZ2h0bmVzc3tzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LWNvbnRyYXN0e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctZ3JheXNjYWxle3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctaHVlLXJvdGF0ZXtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LWludmVydHtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LW9wYWNpdHl7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1zYXR1cmF0ZXtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LXNlcGlhe3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctZHJvcC1zaGFkb3d7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1kcm9wLXNoYWRvdy1jb2xvcntzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LWRyb3Atc2hhZG93LWFscGhhe3N5bnRheDoiPHBlcmNlbnRhZ2U+Ijtpbmhlcml0czpmYWxzZTtpbml0aWFsLXZhbHVlOjEwMCV9QHByb3BlcnR5IC0tdHctZHJvcC1zaGFkb3ctc2l6ZXtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LWJhY2tkcm9wLWJsdXJ7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1iYWNrZHJvcC1icmlnaHRuZXNze3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctYmFja2Ryb3AtY29udHJhc3R7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1iYWNrZHJvcC1ncmF5c2NhbGV7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1iYWNrZHJvcC1odWUtcm90YXRle3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctYmFja2Ryb3AtaW52ZXJ0e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctYmFja2Ryb3Atb3BhY2l0eXtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LWJhY2tkcm9wLXNhdHVyYXRle3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctYmFja2Ryb3Atc2VwaWF7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1kdXJhdGlvbntzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LWVhc2V7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AbGF5ZXIgcHJvcGVydGllc3tAc3VwcG9ydHMgKCgtd2Via2l0LWh5cGhlbnM6IG5vbmUpIGFuZCAoIG5vdCAobWFyZ2luLXRyaW06IGlubGluZSkpKSBvciAoKC1tb3otb3JpZW50OiBpbmxpbmUpIGFuZCAoIG5vdCAoY29sb3I6cmdiKGZyb20gcmVkIHIgZyBiKSkpKXsqLDpiZWZvcmUsOmFmdGVyLDo6YmFja2Ryb3B7LS10dy10cmFuc2xhdGUteDowOy0tdHctdHJhbnNsYXRlLXk6MDstLXR3LXRyYW5zbGF0ZS16OjA7LS10dy1yb3RhdGUteDppbml0aWFsOy0tdHctcm90YXRlLXk6aW5pdGlhbDstLXR3LXJvdGF0ZS16OmluaXRpYWw7LS10dy1za2V3LXg6aW5pdGlhbDstLXR3LXNrZXcteTppbml0aWFsOy0tdHctYm9yZGVyLXN0eWxlOnNvbGlkOy0tdHctbGVhZGluZzppbml0aWFsOy0tdHctZm9udC13ZWlnaHQ6aW5pdGlhbDstLXR3LXRyYWNraW5nOmluaXRpYWw7LS10dy1vcmRpbmFsOmluaXRpYWw7LS10dy1zbGFzaGVkLXplcm86aW5pdGlhbDstLXR3LW51bWVyaWMtZmlndXJlOmluaXRpYWw7LS10dy1udW1lcmljLXNwYWNpbmc6aW5pdGlhbDstLXR3LW51bWVyaWMtZnJhY3Rpb246aW5pdGlhbDstLXR3LXNoYWRvdzowIDAgIzAwMDA7LS10dy1zaGFkb3ctY29sb3I6aW5pdGlhbDstLXR3LXNoYWRvdy1hbHBoYToxMDAlOy0tdHctaW5zZXQtc2hhZG93OjAgMCAjMDAwMDstLXR3LWluc2V0LXNoYWRvdy1jb2xvcjppbml0aWFsOy0tdHctaW5zZXQtc2hhZG93LWFscGhhOjEwMCU7LS10dy1yaW5nLWNvbG9yOmluaXRpYWw7LS10dy1yaW5nLXNoYWRvdzowIDAgIzAwMDA7LS10dy1pbnNldC1yaW5nLWNvbG9yOmluaXRpYWw7LS10dy1pbnNldC1yaW5nLXNoYWRvdzowIDAgIzAwMDA7LS10dy1yaW5nLWluc2V0OmluaXRpYWw7LS10dy1yaW5nLW9mZnNldC13aWR0aDowcHg7LS10dy1yaW5nLW9mZnNldC1jb2xvcjojZmZmOy0tdHctcmluZy1vZmZzZXQtc2hhZG93OjAgMCAjMDAwMDstLXR3LW91dGxpbmUtc3R5bGU6c29saWQ7LS10dy1ibHVyOmluaXRpYWw7LS10dy1icmlnaHRuZXNzOmluaXRpYWw7LS10dy1jb250cmFzdDppbml0aWFsOy0tdHctZ3JheXNjYWxlOmluaXRpYWw7LS10dy1odWUtcm90YXRlOmluaXRpYWw7LS10dy1pbnZlcnQ6aW5pdGlhbDstLXR3LW9wYWNpdHk6aW5pdGlhbDstLXR3LXNhdHVyYXRlOmluaXRpYWw7LS10dy1zZXBpYTppbml0aWFsOy0tdHctZHJvcC1zaGFkb3c6aW5pdGlhbDstLXR3LWRyb3Atc2hhZG93LWNvbG9yOmluaXRpYWw7LS10dy1kcm9wLXNoYWRvdy1hbHBoYToxMDAlOy0tdHctZHJvcC1zaGFkb3ctc2l6ZTppbml0aWFsOy0tdHctYmFja2Ryb3AtYmx1cjppbml0aWFsOy0tdHctYmFja2Ryb3AtYnJpZ2h0bmVzczppbml0aWFsOy0tdHctYmFja2Ryb3AtY29udHJhc3Q6aW5pdGlhbDstLXR3LWJhY2tkcm9wLWdyYXlzY2FsZTppbml0aWFsOy0tdHctYmFja2Ryb3AtaHVlLXJvdGF0ZTppbml0aWFsOy0tdHctYmFja2Ryb3AtaW52ZXJ0OmluaXRpYWw7LS10dy1iYWNrZHJvcC1vcGFjaXR5OmluaXRpYWw7LS10dy1iYWNrZHJvcC1zYXR1cmF0ZTppbml0aWFsOy0tdHctYmFja2Ryb3Atc2VwaWE6aW5pdGlhbDstLXR3LWR1cmF0aW9uOmluaXRpYWw7LS10dy1lYXNlOmluaXRpYWx9fX0KPC9zdHlsZT4KPC9oZWFkPjxib2R5Pgo8ZGl2IGlkPSJyb290Ij48L2Rpdj4KPCEtLV9fU0lNX1BSRVZJRVdfQ09ORklHX18tLT4KPHNjcmlwdCB0eXBlPSJtb2R1bGUiPnZhciBGMixzLFY4LG80LGgwLFk4LEI4LE44LGk1LFo1LGsyLEw4LHQ1LGE1LG41LHo4LEs1PXt9LFg1PVtdLHI0PS9hY2l0fGV4KD86c3xnfG58cHwkKXxycGh8Z3JpZHxvd3N8bW5jfG50d3xpbmVbY2hdfHpvb3xeb3JkfGl0ZXJhL2ksTTI9QXJyYXkuaXNBcnJheTtmdW5jdGlvbiBUMCgkLEope2Zvcih2YXIgUSBpbiBKKSRbUV09SltRXTtyZXR1cm4gJH1mdW5jdGlvbiBlNSgkKXskJiYkLnBhcmVudE5vZGUmJiQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCgkKX1mdW5jdGlvbiBwMSgkLEosUSl7dmFyIFosWCxZLHE9e307Zm9yKFkgaW4gSilZPT0ia2V5Ij9aPUpbWV06WT09InJlZiI/WD1KW1ldOnFbWV09SltZXTtpZihhcmd1bWVudHMubGVuZ3RoPjImJihxLmNoaWxkcmVuPWFyZ3VtZW50cy5sZW5ndGg+Mz9GMi5jYWxsKGFyZ3VtZW50cywyKTpRKSx0eXBlb2YgJD09ImZ1bmN0aW9uIiYmJC5kZWZhdWx0UHJvcHMhPW51bGwpZm9yKFkgaW4gJC5kZWZhdWx0UHJvcHMpcVtZXT09PXZvaWQgMCYmKHFbWV09JC5kZWZhdWx0UHJvcHNbWV0pO3JldHVybiBPMigkLHEsWixYLG51bGwpfWZ1bmN0aW9uIE8yKCQsSixRLFosWCl7dmFyIFk9e3R5cGU6JCxwcm9wczpKLGtleTpRLHJlZjpaLF9fazpudWxsLF9fOm51bGwsX19iOjAsX19lOm51bGwsX19jOm51bGwsY29uc3RydWN0b3I6dm9pZCAwLF9fdjpYPT1udWxsPysrVjg6WCxfX2k6LTEsX191OjB9O3JldHVybiBYPT1udWxsJiZzLnZub2RlIT1udWxsJiZzLnZub2RlKFkpLFl9ZnVuY3Rpb24gVzIoKXtyZXR1cm57Y3VycmVudDpudWxsfX1mdW5jdGlvbiBaMSgkKXtyZXR1cm4gJC5jaGlsZHJlbn1mdW5jdGlvbiBvMSgkLEope3RoaXMucHJvcHM9JCx0aGlzLmNvbnRleHQ9Sn1mdW5jdGlvbiB0MCgkLEope2lmKEo9PW51bGwpcmV0dXJuICQuX18/dDAoJC5fXywkLl9faSsxKTpudWxsO2Zvcih2YXIgUTtKPCQuX19rLmxlbmd0aDtKKyspaWYoKFE9JC5fX2tbSl0pIT1udWxsJiZRLl9fZSE9bnVsbClyZXR1cm4gUS5fX2U7cmV0dXJuIHR5cGVvZiAkLnR5cGU9PSJmdW5jdGlvbiI/dDAoJCk6bnVsbH1mdW5jdGlvbiBpNCgkKXtpZigkLl9fUCYmJC5fX2Qpe3ZhciBKPSQuX192LFE9Si5fX2UsWj1bXSxYPVtdLFk9VDAoe30sSik7WS5fX3Y9Si5fX3YrMSxzLnZub2RlJiZzLnZub2RlKFkpLCQzKCQuX19QLFksSiwkLl9fbiwkLl9fUC5uYW1lc3BhY2VVUkksMzImSi5fX3U/W1FdOm51bGwsWixRPT1udWxsP3QwKEopOlEsISEoMzImSi5fX3UpLFgpLFkuX192PUouX192LFkuX18uX19rW1kuX19pXT1ZLGs4KFosWSxYKSxKLl9fZT1KLl9fPW51bGwsWS5fX2UhPVEmJkM4KFkpfX1mdW5jdGlvbiBDOCgkKXtpZigoJD0kLl9fKSE9bnVsbCYmJC5fX2MhPW51bGwpcmV0dXJuICQuX19lPSQuX19jLmJhc2U9bnVsbCwkLl9fay5zb21lKGZ1bmN0aW9uKEope2lmKEohPW51bGwmJkouX19lIT1udWxsKXJldHVybiAkLl9fZT0kLl9fYy5iYXNlPUouX19lfSksQzgoJCl9ZnVuY3Rpb24gczUoJCl7KCEkLl9fZCYmKCQuX19kPSEwKSYmaDAucHVzaCgkKSYmIVk1Ll9fcisrfHxZOCE9cy5kZWJvdW5jZVJlbmRlcmluZykmJigoWTg9cy5kZWJvdW5jZVJlbmRlcmluZyl8fEI4KShZNSl9ZnVuY3Rpb24gWTUoKXt0cnl7Zm9yKHZhciAkLEo9MTtoMC5sZW5ndGg7KWgwLmxlbmd0aD5KJiZoMC5zb3J0KE44KSwkPWgwLnNoaWZ0KCksSj1oMC5sZW5ndGgsaTQoJCl9ZmluYWxseXtoMC5sZW5ndGg9WTUuX19yPTB9fWZ1bmN0aW9uIFU4KCQsSixRLFosWCxZLHEsRyxWLEIsTil7dmFyIHosTCxDLEEsVSxILGssRj1aJiZaLl9fa3x8WDUsdz1KLmxlbmd0aDtmb3IoVj1hNChRLEosRixWLHcpLHo9MDt6PHc7eisrKShDPVEuX19rW3pdKSE9bnVsbCYmKEw9Qy5fX2khPS0xJiZGW0MuX19pXXx8SzUsQy5fX2k9eixIPSQzKCQsQyxMLFgsWSxxLEcsVixCLE4pLEE9Qy5fX2UsQy5yZWYmJkwucmVmIT1DLnJlZiYmKEwucmVmJiZKMyhMLnJlZixudWxsLEMpLE4ucHVzaChDLnJlZixDLl9fY3x8QSxDKSksVT09bnVsbCYmQSE9bnVsbCYmKFU9QSksKGs9ISEoNCZDLl9fdSkpfHxMLl9faz09PUMuX19rPyhWPUg4KEMsViwkLGspLGsmJkwuX19lJiYoTC5fX2U9bnVsbCkpOnR5cGVvZiBDLnR5cGU9PSJmdW5jdGlvbiImJkghPT12b2lkIDA/Vj1IOkEmJihWPUEubmV4dFNpYmxpbmcpLEMuX191Jj0tNyk7cmV0dXJuIFEuX19lPVUsVn1mdW5jdGlvbiBhNCgkLEosUSxaLFgpe3ZhciBZLHEsRyxWLEIsTj1RLmxlbmd0aCx6PU4sTD0wO2ZvcigkLl9faz1BcnJheShYKSxZPTA7WTxYO1krKykocT1KW1ldKSE9bnVsbCYmdHlwZW9mIHEhPSJib29sZWFuIiYmdHlwZW9mIHEhPSJmdW5jdGlvbiI/KHR5cGVvZiBxPT0ic3RyaW5nInx8dHlwZW9mIHE9PSJudW1iZXIifHx0eXBlb2YgcT09ImJpZ2ludCJ8fHEuY29uc3RydWN0b3I9PVN0cmluZz9xPSQuX19rW1ldPU8yKG51bGwscSxudWxsLG51bGwsbnVsbCk6TTIocSk/cT0kLl9fa1tZXT1PMihaMSx7Y2hpbGRyZW46cX0sbnVsbCxudWxsLG51bGwpOnEuY29uc3RydWN0b3I9PT12b2lkIDAmJnEuX19iPjA/cT0kLl9fa1tZXT1PMihxLnR5cGUscS5wcm9wcyxxLmtleSxxLnJlZj9xLnJlZjpudWxsLHEuX192KTokLl9fa1tZXT1xLFY9WStMLHEuX189JCxxLl9fYj0kLl9fYisxLEc9bnVsbCwoQj1xLl9faT1uNChxLFEsVix6KSkhPS0xJiYoei0tLChHPVFbQl0pJiYoRy5fX3V8PTIpKSxHPT1udWxsfHxHLl9fdj09bnVsbD8oQj09LTEmJihYPk4/TC0tOlg8TiYmTCsrKSx0eXBlb2YgcS50eXBlIT0iZnVuY3Rpb24iJiYocS5fX3V8PTQpKTpCIT1WJiYoQj09Vi0xP0wtLTpCPT1WKzE/TCsrOihCPlY/TC0tOkwrKyxxLl9fdXw9NCkpKTokLl9fa1tZXT1udWxsO2lmKHopZm9yKFk9MDtZPE47WSsrKShHPVFbWV0pIT1udWxsJiYoMiZHLl9fdSk9PTAmJihHLl9fZT09WiYmKFo9dDAoRykpLEY4KEcsRykpO3JldHVybiBafWZ1bmN0aW9uIEg4KCQsSixRLFope3ZhciBYLFk7aWYodHlwZW9mICQudHlwZT09ImZ1bmN0aW9uIil7Zm9yKFg9JC5fX2ssWT0wO1gmJlk8WC5sZW5ndGg7WSsrKVhbWV0mJihYW1ldLl9fPSQsSj1IOChYW1ldLEosUSxaKSk7cmV0dXJuIEp9JC5fX2UhPUomJihaJiYoSiYmJC50eXBlJiYhSi5wYXJlbnROb2RlJiYoSj10MCgkKSksUS5pbnNlcnRCZWZvcmUoJC5fX2UsSnx8bnVsbCkpLEo9JC5fX2UpO2RvIEo9SiYmSi5uZXh0U2libGluZzt3aGlsZShKIT1udWxsJiZKLm5vZGVUeXBlPT04KTtyZXR1cm4gSn1mdW5jdGlvbiBaMCgkLEope3JldHVybiBKPUp8fFtdLCQ9PW51bGx8fHR5cGVvZiAkPT0iYm9vbGVhbiJ8fChNMigkKT8kLnNvbWUoZnVuY3Rpb24oUSl7WjAoUSxKKX0pOkoucHVzaCgkKSksSn1mdW5jdGlvbiBuNCgkLEosUSxaKXt2YXIgWCxZLHEsRz0kLmtleSxWPSQudHlwZSxCPUpbUV0sTj1CIT1udWxsJiYoMiZCLl9fdSk9PTA7aWYoQj09PW51bGwmJkc9PW51bGx8fE4mJkc9PUIua2V5JiZWPT1CLnR5cGUpcmV0dXJuIFE7aWYoWj4oTj8xOjApKXtmb3IoWD1RLTEsWT1RKzE7WD49MHx8WTxKLmxlbmd0aDspaWYoKEI9SltxPVg+PTA/WC0tOlkrK10pIT1udWxsJiYoMiZCLl9fdSk9PTAmJkc9PUIua2V5JiZWPT1CLnR5cGUpcmV0dXJuIHF9cmV0dXJuLTF9ZnVuY3Rpb24gcTgoJCxKLFEpe0pbMF09PSItIj8kLnNldFByb3BlcnR5KEosUT09bnVsbD8iIjpRKTokW0pdPVE9PW51bGw/IiI6dHlwZW9mIFEhPSJudW1iZXIifHxyNC50ZXN0KEopP1E6USsicHgifWZ1bmN0aW9uIFE1KCQsSixRLFosWCl7dmFyIFkscTskOmlmKEo9PSJzdHlsZSIpaWYodHlwZW9mIFE9PSJzdHJpbmciKSQuc3R5bGUuY3NzVGV4dD1RO2Vsc2V7aWYodHlwZW9mIFo9PSJzdHJpbmciJiYoJC5zdHlsZS5jc3NUZXh0PVo9IiIpLFopZm9yKEogaW4gWilRJiZKIGluIFF8fHE4KCQuc3R5bGUsSiwiIik7aWYoUSlmb3IoSiBpbiBRKVomJlFbSl09PVpbSl18fHE4KCQuc3R5bGUsSixRW0pdKX1lbHNlIGlmKEpbMF09PSJvIiYmSlsxXT09Im4iKVk9SiE9KEo9Si5yZXBsYWNlKEw4LCIkMSIpKSxxPUoudG9Mb3dlckNhc2UoKSxKPXEgaW4gJHx8Sj09Im9uRm9jdXNPdXQifHxKPT0ib25Gb2N1c0luIj9xLnNsaWNlKDIpOkouc2xpY2UoMiksJC5sfHwoJC5sPXt9KSwkLmxbSitZXT1RLFE/Wj9RW2syXT1aW2syXTooUVtrMl09dDUsJC5hZGRFdmVudExpc3RlbmVyKEosWT9uNTphNSxZKSk6JC5yZW1vdmVFdmVudExpc3RlbmVyKEosWT9uNTphNSxZKTtlbHNle2lmKFg9PSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIpSj1KLnJlcGxhY2UoL3hsaW5rKEh8OmgpLywiaCIpLnJlcGxhY2UoL3NOYW1lJC8sInMiKTtlbHNlIGlmKEohPSJ3aWR0aCImJkohPSJoZWlnaHQiJiZKIT0iaHJlZiImJkohPSJsaXN0IiYmSiE9ImZvcm0iJiZKIT0idGFiSW5kZXgiJiZKIT0iZG93bmxvYWQiJiZKIT0icm93U3BhbiImJkohPSJjb2xTcGFuIiYmSiE9InJvbGUiJiZKIT0icG9wb3ZlciImJkogaW4gJCl0cnl7JFtKXT1RPT1udWxsPyIiOlE7YnJlYWsgJH1jYXRjaChHKXt9dHlwZW9mIFE9PSJmdW5jdGlvbiJ8fChRPT1udWxsfHxRPT09ITEmJkpbNF0hPSItIj8kLnJlbW92ZUF0dHJpYnV0ZShKKTokLnNldEF0dHJpYnV0ZShKLEo9PSJwb3BvdmVyIiYmUT09MT8iIjpRKSl9fWZ1bmN0aW9uIEc4KCQpe3JldHVybiBmdW5jdGlvbihKKXtpZih0aGlzLmwpe3ZhciBRPXRoaXMubFtKLnR5cGUrJF07aWYoSltaNV09PW51bGwpSltaNV09dDUrKztlbHNlIGlmKEpbWjVdPFFbazJdKXJldHVybjtyZXR1cm4gUShzLmV2ZW50P3MuZXZlbnQoSik6Sil9fX1mdW5jdGlvbiAkMygkLEosUSxaLFgsWSxxLEcsVixCKXt2YXIgTix6LEwsQyxBLFUsSCxrLEYsdyxULFMseCwkMSxmLGkscj1KLnR5cGU7aWYoSi5jb25zdHJ1Y3RvciE9PXZvaWQgMClyZXR1cm4gbnVsbDsxMjgmUS5fX3UmJihWPSEhKDMyJlEuX191KSxZPVtHPUouX19lPVEuX19lXSksKE49cy5fX2IpJiZOKEopOyQ6aWYodHlwZW9mIHI9PSJmdW5jdGlvbiIpe3o9cS5sZW5ndGg7dHJ5e2lmKEY9Si5wcm9wcyx3PXIucHJvdG90eXBlJiZyLnByb3RvdHlwZS5yZW5kZXIsVD0oTj1yLmNvbnRleHRUeXBlKSYmWltOLl9fY10sUz1OP1Q/VC5wcm9wcy52YWx1ZTpOLl9fOlosUS5fX2M/az0oTD1KLl9fYz1RLl9fYykuX189TC5fX0U6KHc/Si5fX2M9TD1uZXcgcihGLFMpOihKLl9fYz1MPW5ldyBvMShGLFMpLEwuY29uc3RydWN0b3I9cixMLnJlbmRlcj10NCksVCYmVC5zdWIoTCksTC5zdGF0ZXx8KEwuc3RhdGU9e30pLEwuX19uPVosQz1MLl9fZD0hMCxMLl9faD1bXSxMLl9zYj1bXSksdyYmTC5fX3M9PW51bGwmJihMLl9fcz1MLnN0YXRlKSx3JiZyLmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyE9bnVsbCYmKEwuX19zPT1MLnN0YXRlJiYoTC5fX3M9VDAoe30sTC5fX3MpKSxUMChMLl9fcyxyLmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyhGLEwuX19zKSkpLEE9TC5wcm9wcyxVPUwuc3RhdGUsTC5fX3Y9SixDKXcmJnIuZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzPT1udWxsJiZMLmNvbXBvbmVudFdpbGxNb3VudCE9bnVsbCYmTC5jb21wb25lbnRXaWxsTW91bnQoKSx3JiZMLmNvbXBvbmVudERpZE1vdW50IT1udWxsJiZMLl9faC5wdXNoKEwuY29tcG9uZW50RGlkTW91bnQpO2Vsc2V7aWYodyYmci5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHM9PW51bGwmJkYhPT1BJiZMLmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMhPW51bGwmJkwuY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyhGLFMpLEouX192PT1RLl9fdnx8IUwuX19lJiZMLnNob3VsZENvbXBvbmVudFVwZGF0ZSE9bnVsbCYmTC5zaG91bGRDb21wb25lbnRVcGRhdGUoRixMLl9fcyxTKT09PSExKXtKLl9fdiE9US5fX3YmJihMLnByb3BzPUYsTC5zdGF0ZT1MLl9fcyxMLl9fZD0hMSksSi5fX2U9US5fX2UsSi5fX2s9US5fX2ssSi5fX2suc29tZShmdW5jdGlvbihsKXtsJiYobC5fXz1KKX0pLFg1LnB1c2guYXBwbHkoTC5fX2gsTC5fc2IpLEwuX3NiPVtdLEwuX19oLmxlbmd0aCYmcS5wdXNoKEwpO2JyZWFrICR9TC5jb21wb25lbnRXaWxsVXBkYXRlIT1udWxsJiZMLmNvbXBvbmVudFdpbGxVcGRhdGUoRixMLl9fcyxTKSx3JiZMLmNvbXBvbmVudERpZFVwZGF0ZSE9bnVsbCYmTC5fX2gucHVzaChmdW5jdGlvbigpe0wuY29tcG9uZW50RGlkVXBkYXRlKEEsVSxIKX0pfWlmKEwuY29udGV4dD1TLEwucHJvcHM9RixMLl9fUD0kLEwuX19lPSExLHg9cy5fX3IsJDE9MCx3KUwuc3RhdGU9TC5fX3MsTC5fX2Q9ITEseCYmeChKKSxOPUwucmVuZGVyKEwucHJvcHMsTC5zdGF0ZSxMLmNvbnRleHQpLFg1LnB1c2guYXBwbHkoTC5fX2gsTC5fc2IpLEwuX3NiPVtdO2Vsc2UgZG8gTC5fX2Q9ITEseCYmeChKKSxOPUwucmVuZGVyKEwucHJvcHMsTC5zdGF0ZSxMLmNvbnRleHQpLEwuc3RhdGU9TC5fX3M7d2hpbGUoTC5fX2QmJisrJDE8MjUpO0wuc3RhdGU9TC5fX3MsTC5nZXRDaGlsZENvbnRleHQhPW51bGwmJihaPVQwKFQwKHt9LFopLEwuZ2V0Q2hpbGRDb250ZXh0KCkpKSx3JiYhQyYmTC5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZSE9bnVsbCYmKEg9TC5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZShBLFUpKSxmPU4hPW51bGwmJk4udHlwZT09PVoxJiZOLmtleT09bnVsbD9POChOLnByb3BzLmNoaWxkcmVuKTpOLEc9VTgoJCxNMihmKT9mOltmXSxKLFEsWixYLFkscSxHLFYsQiksTC5iYXNlPUouX19lLEouX191Jj0tMTYxLEwuX19oLmxlbmd0aCYmcS5wdXNoKEwpLGsmJihMLl9fRT1MLl9fPW51bGwpfWNhdGNoKGwpe2lmKHEubGVuZ3RoPXosSi5fX3Y9bnVsbCxWfHxZIT1udWxsKXtpZihsLnRoZW4pe2ZvcihKLl9fdXw9Vj8xNjA6MTI4O0cmJkcubm9kZVR5cGU9PTgmJkcubmV4dFNpYmxpbmc7KUc9Ry5uZXh0U2libGluZztZIT1udWxsJiYoWVtZLmluZGV4T2YoRyldPW51bGwpLEouX19lPUd9ZWxzZSBpZihZIT1udWxsKWZvcihpPVkubGVuZ3RoO2ktLTspZTUoWVtpXSl9ZWxzZSBKLl9fZT1RLl9fZTtKLl9faz09bnVsbCYmKEouX19rPVEuX19rfHxbXSksbC50aGVufHxBOChKKSxzLl9fZShsLEosUSl9fWVsc2UgWT09bnVsbCYmSi5fX3Y9PVEuX192PyhKLl9faz1RLl9fayxKLl9fZT1RLl9fZSk6Rz1KLl9fZT1zNChRLl9fZSxKLFEsWixYLFkscSxWLEIpO3JldHVybihOPXMuZGlmZmVkKSYmTihKKSwxMjgmSi5fX3U/dm9pZCAwOkd9ZnVuY3Rpb24gQTgoJCl7JCYmKCQuX19jJiYoJC5fX2MuX19lPSEwKSwkLl9fayYmJC5fX2suc29tZShBOCkpfWZ1bmN0aW9uIGs4KCQsSixRKXtmb3IodmFyIFo9MDtaPFEubGVuZ3RoO1orKylKMyhRW1pdLFFbKytaXSxRWysrWl0pO3MuX19jJiZzLl9fYyhKLCQpLCQuc29tZShmdW5jdGlvbihYKXt0cnl7JD1YLl9faCxYLl9faD1bXSwkLnNvbWUoZnVuY3Rpb24oWSl7WS5jYWxsKFgpfSl9Y2F0Y2goWSl7cy5fX2UoWSxYLl9fdil9fSl9ZnVuY3Rpb24gTzgoJCl7cmV0dXJuIHR5cGVvZiAkIT0ib2JqZWN0Inx8JD09bnVsbHx8JC5fX2I+MD8kOk0yKCQpPyQubWFwKE84KTokLmNvbnN0cnVjdG9yIT09dm9pZCAwP251bGw6VDAoe30sJCl9ZnVuY3Rpb24gczQoJCxKLFEsWixYLFkscSxHLFYpe3ZhciBCLE4seixMLEMsQSxVLEg9US5wcm9wc3x8SzUsaz1KLnByb3BzLEY9Si50eXBlO2lmKEY9PSJzdmciP1g9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIjpGPT0ibWF0aCI/WD0iaHR0cDovL3d3dy53My5vcmcvMTk5OC9NYXRoL01hdGhNTCI6WHx8KFg9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiKSxZIT1udWxsKXtmb3IoQj0wO0I8WS5sZW5ndGg7QisrKWlmKChDPVlbQl0pJiYic2V0QXR0cmlidXRlImluIEM9PSEhRiYmKEY/Qy5sb2NhbE5hbWU9PUY6Qy5ub2RlVHlwZT09MykpeyQ9QyxZW0JdPW51bGw7YnJlYWt9fWlmKCQ9PW51bGwpe2lmKEY9PW51bGwpcmV0dXJuIGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGspOyQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKFgsRixrLmlzJiZrKSxHJiYocy5fX20mJnMuX19tKEosWSksRz0hMSksWT1udWxsfWlmKEY9PW51bGwpSD09PWt8fEcmJiQuZGF0YT09a3x8KCQuZGF0YT1rKTtlbHNle2lmKFk9Rj09InRleHRhcmVhIiYmay5kZWZhdWx0VmFsdWUhPW51bGw/bnVsbDpZJiZGMi5jYWxsKCQuY2hpbGROb2RlcyksIUcmJlkhPW51bGwpZm9yKEg9e30sQj0wO0I8JC5hdHRyaWJ1dGVzLmxlbmd0aDtCKyspSFsoQz0kLmF0dHJpYnV0ZXNbQl0pLm5hbWVdPUMudmFsdWU7Zm9yKEIgaW4gSClDPUhbQl0sQj09ImRhbmdlcm91c2x5U2V0SW5uZXJIVE1MIj96PUM6Qj09ImNoaWxkcmVuInx8KEIgaW4gayl8fEI9PSJ2YWx1ZSImJigiZGVmYXVsdFZhbHVlImluIGspfHxCPT0iY2hlY2tlZCImJigiZGVmYXVsdENoZWNrZWQiaW4gayl8fFE1KCQsQixudWxsLEMsWCk7Zm9yKEIgaW4gaylDPWtbQl0sQj09ImNoaWxkcmVuIj9MPUM6Qj09ImRhbmdlcm91c2x5U2V0SW5uZXJIVE1MIj9OPUM6Qj09InZhbHVlIj9BPUM6Qj09ImNoZWNrZWQiP1U9QzpHJiZ0eXBlb2YgQyE9ImZ1bmN0aW9uInx8SFtCXT09PUN8fFE1KCQsQixDLEhbQl0sWCk7aWYoTilHfHx6JiYoTi5fX2h0bWw9PXouX19odG1sfHxOLl9faHRtbD09JC5pbm5lckhUTUwpfHwoJC5pbm5lckhUTUw9Ti5fX2h0bWwpLEouX19rPVtdO2Vsc2UgaWYoeiYmKCQuaW5uZXJIVE1MPSIiKSxVOChKLnR5cGU9PSJ0ZW1wbGF0ZSI/JC5jb250ZW50OiQsTTIoTCk/TDpbTF0sSixRLFosRj09ImZvcmVpZ25PYmplY3QiPyJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIjpYLFkscSxZP1lbMF06US5fX2smJnQwKFEsMCksRyxWKSxZIT1udWxsKWZvcihCPVkubGVuZ3RoO0ItLTspZTUoWVtCXSk7RyYmRiE9InRleHRhcmVhInx8KEI9InZhbHVlIixGPT0icHJvZ3Jlc3MiJiZBPT1udWxsPyQucmVtb3ZlQXR0cmlidXRlKCJ2YWx1ZSIpOkEhPW51bGwmJihBIT09JFtCXXx8Rj09InByb2dyZXNzIiYmIUF8fEY9PSJvcHRpb24iJiZBIT1IW0JdKSYmUTUoJCxCLEEsSFtCXSxYKSxCPSJjaGVja2VkIixVIT1udWxsJiZVIT0kW0JdJiZRNSgkLEIsVSxIW0JdLFgpKX1yZXR1cm4gJH1mdW5jdGlvbiBKMygkLEosUSl7dHJ5e2lmKHR5cGVvZiAkPT0iZnVuY3Rpb24iKXt2YXIgWj10eXBlb2YgJC5fX3U9PSJmdW5jdGlvbiI7WiYmJC5fX3UoKSxaJiZKPT1udWxsfHwoJC5fX3U9JChKKSl9ZWxzZSAkLmN1cnJlbnQ9Sn1jYXRjaChYKXtzLl9fZShYLFEpfX1mdW5jdGlvbiBGOCgkLEosUSl7dmFyIFosWDtpZihzLnVubW91bnQmJnMudW5tb3VudCgkKSwoWj0kLnJlZikmJihaLmN1cnJlbnQmJlouY3VycmVudCE9JC5fX2V8fEozKFosbnVsbCxKKSksKFo9JC5fX2MpIT1udWxsKXtpZihaLmNvbXBvbmVudFdpbGxVbm1vdW50KXRyeXtaLmNvbXBvbmVudFdpbGxVbm1vdW50KCl9Y2F0Y2goWSl7cy5fX2UoWSxKKX1aLmJhc2U9Wi5fX1A9Wi5fX249bnVsbH1pZihaPSQuX19rKWZvcihYPTA7WDxaLmxlbmd0aDtYKyspWltYXSYmRjgoWltYXSxKLFF8fHR5cGVvZiAkLnR5cGUhPSJmdW5jdGlvbiIpO1F8fGU1KCQuX19lKSwkLl9fYz0kLl9fPSQuX19lPXZvaWQgMH1mdW5jdGlvbiB0NCgkLEosUSl7cmV0dXJuIHRoaXMuY29uc3RydWN0b3IoJCxRKX1mdW5jdGlvbiBTMCgkLEosUSl7dmFyIFosWCxZLHE7Sj09ZG9jdW1lbnQmJihKPWRvY3VtZW50LmRvY3VtZW50RWxlbWVudCkscy5fXyYmcy5fXygkLEopLFg9KFo9dHlwZW9mIFE9PSJmdW5jdGlvbiIpP251bGw6USYmUS5fX2t8fEouX19rLFk9W10scT1bXSwkMyhKLCQ9KCFaJiZRfHxKKS5fX2s9cDEoWjEsbnVsbCxbJF0pLFh8fEs1LEs1LEoubmFtZXNwYWNlVVJJLCFaJiZRP1tRXTpYP251bGw6Si5maXJzdENoaWxkP0YyLmNhbGwoSi5jaGlsZE5vZGVzKTpudWxsLFksIVomJlE/UTpYP1guX19lOkouZmlyc3RDaGlsZCxaLHEpLGs4KFksJCxxKSwkLnByb3BzLmNoaWxkcmVuPW51bGx9ZnVuY3Rpb24gcTUoJCxKKXtTMCgkLEoscTUpfWZ1bmN0aW9uIFEzKCQsSixRKXt2YXIgWixYLFkscSxHPVQwKHt9LCQucHJvcHMpO2ZvcihZIGluICQudHlwZSYmJC50eXBlLmRlZmF1bHRQcm9wcyYmKHE9JC50eXBlLmRlZmF1bHRQcm9wcyksSilZPT0ia2V5Ij9aPUpbWV06WT09InJlZiI/WD1KW1ldOkdbWV09SltZXT09PXZvaWQgMCYmcSE9bnVsbD9xW1ldOkpbWV07cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+MiYmKEcuY2hpbGRyZW49YXJndW1lbnRzLmxlbmd0aD4zP0YyLmNhbGwoYXJndW1lbnRzLDIpOlEpLE8yKCQudHlwZSxHLFp8fCQua2V5LFh8fCQucmVmLG51bGwpfWZ1bmN0aW9uIHowKCQpe2Z1bmN0aW9uIEooUSl7dmFyIFosWDtyZXR1cm4gdGhpcy5nZXRDaGlsZENvbnRleHR8fChaPW5ldyBTZXQsKFg9e30pW0ouX19jXT10aGlzLHRoaXMuZ2V0Q2hpbGRDb250ZXh0PWZ1bmN0aW9uKCl7cmV0dXJuIFh9LHRoaXMuY29tcG9uZW50V2lsbFVubW91bnQ9ZnVuY3Rpb24oKXtaPW51bGx9LHRoaXMuc2hvdWxkQ29tcG9uZW50VXBkYXRlPWZ1bmN0aW9uKFkpe3RoaXMucHJvcHMudmFsdWUhPVkudmFsdWUmJlouZm9yRWFjaChmdW5jdGlvbihxKXtxLl9fZT0hMCxzNShxKX0pfSx0aGlzLnN1Yj1mdW5jdGlvbihZKXtaLmFkZChZKTt2YXIgcT1ZLmNvbXBvbmVudFdpbGxVbm1vdW50O1kuY29tcG9uZW50V2lsbFVubW91bnQ9ZnVuY3Rpb24oKXtaJiZaLmRlbGV0ZShZKSxxJiZxLmNhbGwoWSl9fSksUS5jaGlsZHJlbn1yZXR1cm4gSi5fX2M9Il9fY0MiK3o4KyssSi5fXz0kLEouUHJvdmlkZXI9Si5fX2w9KEouQ29uc3VtZXI9ZnVuY3Rpb24oUSxaKXtyZXR1cm4gUS5jaGlsZHJlbihaKX0pLmNvbnRleHRUeXBlPUosSn1GMj1YNS5zbGljZSxzPXtfX2U6ZnVuY3Rpb24oJCxKLFEsWil7Zm9yKHZhciBYLFkscTtKPUouX187KWlmKChYPUouX19jKSYmIVguX18pdHJ5e2lmKChZPVguY29uc3RydWN0b3IpJiZZLmdldERlcml2ZWRTdGF0ZUZyb21FcnJvciE9bnVsbCYmKFguc2V0U3RhdGUoWS5nZXREZXJpdmVkU3RhdGVGcm9tRXJyb3IoJCkpLHE9WC5fX2QpLFguY29tcG9uZW50RGlkQ2F0Y2ghPW51bGwmJihYLmNvbXBvbmVudERpZENhdGNoKCQsWnx8e30pLHE9WC5fX2QpLHEpcmV0dXJuIFguX19FPVh9Y2F0Y2goRyl7JD1HfXRocm93ICR9fSxWOD0wLG80PWZ1bmN0aW9uKCQpe3JldHVybiAkIT1udWxsJiYkLmNvbnN0cnVjdG9yPT09dm9pZCAwfSxvMS5wcm90b3R5cGUuc2V0U3RhdGU9ZnVuY3Rpb24oJCxKKXt2YXIgUTtRPXRoaXMuX19zIT1udWxsJiZ0aGlzLl9fcyE9dGhpcy5zdGF0ZT90aGlzLl9fczp0aGlzLl9fcz1UMCh7fSx0aGlzLnN0YXRlKSx0eXBlb2YgJD09ImZ1bmN0aW9uIiYmKCQ9JChUMCh7fSxRKSx0aGlzLnByb3BzKSksJCYmVDAoUSwkKSwkIT1udWxsJiZ0aGlzLl9fdiYmKEomJnRoaXMuX3NiLnB1c2goSiksczUodGhpcykpfSxvMS5wcm90b3R5cGUuZm9yY2VVcGRhdGU9ZnVuY3Rpb24oJCl7dGhpcy5fX3YmJih0aGlzLl9fZT0hMCwkJiZ0aGlzLl9faC5wdXNoKCQpLHM1KHRoaXMpKX0sbzEucHJvdG90eXBlLnJlbmRlcj1aMSxoMD1bXSxCOD10eXBlb2YgUHJvbWlzZT09ImZ1bmN0aW9uIj9Qcm9taXNlLnByb3RvdHlwZS50aGVuLmJpbmQoUHJvbWlzZS5yZXNvbHZlKCkpOnNldFRpbWVvdXQsTjg9ZnVuY3Rpb24oJCxKKXtyZXR1cm4gJC5fX3YuX19iLUouX192Ll9fYn0sWTUuX19yPTAsaTU9TWF0aC5yYW5kb20oKS50b1N0cmluZyg4KSxaNT0iX19kIitpNSxrMj0iX19hIitpNSxMOD0vKFBvaW50ZXJDYXB0dXJlKSR8Q2FwdHVyZSQvaSx0NT0wLGE1PUc4KCExKSxuNT1HOCghMCksejg9MDt2YXIgUjAsYjEsWjMsTTgsZTA9MCxJOD1bXSxoMT1zLFc4PWgxLl9fYixQOD1oMS5fX3IsXzg9aDEuZGlmZmVkLEQ4PWgxLl9fYyxUOD1oMS51bm1vdW50LHc4PWgxLl9fO2Z1bmN0aW9uICQyKCQsSil7aDEuX19oJiZoMS5fX2goYjEsJCxlMHx8SiksZTA9MDt2YXIgUT1iMS5fX0h8fChiMS5fX0g9e19fOltdLF9faDpbXX0pO3JldHVybiAkPj1RLl9fLmxlbmd0aCYmUS5fXy5wdXNoKHt9KSxRLl9fWyRdfWZ1bmN0aW9uIFcoJCl7cmV0dXJuIGUwPTEsbDAoeTgsJCl9ZnVuY3Rpb24gbDAoJCxKLFEpe3ZhciBaPSQyKFIwKyssMik7aWYoWi50PSQsIVouX19jJiYoWi5fXz1bUT9RKEopOnk4KHZvaWQgMCxKKSxmdW5jdGlvbihHKXt2YXIgVj1aLl9fTj9aLl9fTlswXTpaLl9fWzBdLEI9Wi50KFYsRyk7ViE9PUImJihaLl9fTj1bQixaLl9fWzFdXSxaLl9fYy5zZXRTdGF0ZSh7fSkpfV0sWi5fX2M9YjEsIWIxLl9fZikpe3ZhciBYPWZ1bmN0aW9uKEcsVixCKXtpZighWi5fX2MuX19IKXJldHVybiEwO3ZhciBOPSExLHo9Wi5fX2MucHJvcHMhPT1HO2lmKFouX19jLl9fSC5fXy5zb21lKGZ1bmN0aW9uKEMpe2lmKEMuX19OKXtOPSEwO3ZhciBBPUMuX19bMF07Qy5fXz1DLl9fTixDLl9fTj12b2lkIDAsQSE9PUMuX19bMF0mJih6PSEwKX19KSxZKXt2YXIgTD1ZLmNhbGwodGhpcyxHLFYsQik7cmV0dXJuIE4/THx8ejpMfXJldHVybiFOfHx6fTtiMS5fX2Y9ITA7dmFye3Nob3VsZENvbXBvbmVudFVwZGF0ZTpZLGNvbXBvbmVudFdpbGxVcGRhdGU6cX09YjE7YjEuY29tcG9uZW50V2lsbFVwZGF0ZT1mdW5jdGlvbihHLFYsQil7aWYodGhpcy5fX2Upe3ZhciBOPVk7WT12b2lkIDAsWChHLFYsQiksWT1OfXEmJnEuY2FsbCh0aGlzLEcsVixCKX0sYjEuc2hvdWxkQ29tcG9uZW50VXBkYXRlPVh9cmV0dXJuIFouX19OfHxaLl9ffWZ1bmN0aW9uIGIoJCxKKXt2YXIgUT0kMihSMCsrLDMpOyFoMS5fX3MmJlgzKFEuX19ILEopJiYoUS5fXz0kLFEudT1KLGIxLl9fSC5fX2gucHVzaChRKSl9ZnVuY3Rpb24gdzAoJCxKKXt2YXIgUT0kMihSMCsrLDQpOyFoMS5fX3MmJlgzKFEuX19ILEopJiYoUS5fXz0kLFEudT1KLGIxLl9faC5wdXNoKFEpKX1mdW5jdGlvbiBFKCQpe3JldHVybiBlMD01LEUxKGZ1bmN0aW9uKCl7cmV0dXJue2N1cnJlbnQ6JH19LFtdKX1mdW5jdGlvbiBWNSgkLEosUSl7ZTA9Nix3MChmdW5jdGlvbigpe2lmKHR5cGVvZiAkPT0iZnVuY3Rpb24iKXt2YXIgWj0kKEooKSk7cmV0dXJuIGZ1bmN0aW9uKCl7JChudWxsKSxaJiZ0eXBlb2YgWj09ImZ1bmN0aW9uIiYmWigpfX1pZigkKXJldHVybiAkLmN1cnJlbnQ9SigpLGZ1bmN0aW9uKCl7cmV0dXJuICQuY3VycmVudD1udWxsfX0sUT09bnVsbD9ROlEuY29uY2F0KCQpKX1mdW5jdGlvbiBFMSgkLEope3ZhciBRPSQyKFIwKyssNyk7cmV0dXJuIFgzKFEuX19ILEopJiYoUS5fXz0kKCksUS5fX0g9SixRLl9faD0kKSxRLl9ffWZ1bmN0aW9uIEQoJCxKKXtyZXR1cm4gZTA9OCxFMShmdW5jdGlvbigpe3JldHVybiAkfSxKKX1mdW5jdGlvbiBDMCgkKXt2YXIgSj1iMS5jb250ZXh0WyQuX19jXSxRPSQyKFIwKyssOSk7cmV0dXJuIFEuYz0kLEo/KFEuX189PW51bGwmJihRLl9fPSEwLEouc3ViKGIxKSksSi5wcm9wcy52YWx1ZSk6JC5fX31mdW5jdGlvbiBCNSgkLEope2gxLnVzZURlYnVnVmFsdWUmJmgxLnVzZURlYnVnVmFsdWUoSj9KKCQpOiQpfWZ1bmN0aW9uIEoyKCl7dmFyICQ9JDIoUjArKywxMSk7aWYoISQuX18pe2Zvcih2YXIgSj1iMS5fX3Y7SiE9PW51bGwmJiFKLl9fbSYmSi5fXyE9PW51bGw7KUo9Si5fXzt2YXIgUT1KLl9fbXx8KEouX19tPVswLDBdKTskLl9fPSJQIitRWzBdKyItIitRWzFdKyt9cmV0dXJuICQuX199ZnVuY3Rpb24gZTQoKXtmb3IodmFyICQ7JD1JOC5zaGlmdCgpOyl7dmFyIEo9JC5fX0g7aWYoJC5fX1AmJkopdHJ5e0ouX19oLnNvbWUoRzUpLEouX19oLnNvbWUoSzMpLEouX19oPVtdfWNhdGNoKFEpe0ouX19oPVtdLGgxLl9fZShRLCQuX192KX19fWgxLl9fYj1mdW5jdGlvbigkKXtiMT1udWxsLFc4JiZXOCgkKX0saDEuX189ZnVuY3Rpb24oJCxKKXskJiZKLl9fayYmSi5fX2suX19tJiYoJC5fX209Si5fX2suX19tKSx3OCYmdzgoJCxKKX0saDEuX19yPWZ1bmN0aW9uKCQpe1A4JiZQOCgkKSxSMD0wO3ZhciBKPShiMT0kLl9fYykuX19IO0omJihaMz09PWIxPyhKLl9faD1bXSxiMS5fX2g9W10sSi5fXy5zb21lKGZ1bmN0aW9uKFEpe1EuX19OJiYoUS5fXz1RLl9fTiksUS51PVEuX19OPXZvaWQgMH0pKTooSi5fX2guc29tZShHNSksSi5fX2guc29tZShLMyksSi5fX2g9W10sUjA9MCkpLFozPWIxfSxoMS5kaWZmZWQ9ZnVuY3Rpb24oJCl7XzgmJl84KCQpO3ZhciBKPSQuX19jO0omJkouX19IJiYoSi5fX0guX19oLmxlbmd0aCYmKEk4LnB1c2goSikhPT0xJiZNOD09PWgxLnJlcXVlc3RBbmltYXRpb25GcmFtZXx8KChNOD1oMS5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUpfHwkNykoZTQpKSxKLl9fSC5fXy5zb21lKGZ1bmN0aW9uKFEpe1EudSYmKFEuX19IPVEudSxRLnU9dm9pZCAwKX0pKSxaMz1iMT1udWxsfSxoMS5fX2M9ZnVuY3Rpb24oJCxKKXtKLnNvbWUoZnVuY3Rpb24oUSl7dHJ5e1EuX19oLnNvbWUoRzUpLFEuX19oPVEuX19oLmZpbHRlcihmdW5jdGlvbihaKXtyZXR1cm4hWi5fX3x8SzMoWil9KX1jYXRjaChaKXtKLnNvbWUoZnVuY3Rpb24oWCl7WC5fX2gmJihYLl9faD1bXSl9KSxKPVtdLGgxLl9fZShaLFEuX192KX19KSxEOCYmRDgoJCxKKX0saDEudW5tb3VudD1mdW5jdGlvbigkKXtUOCYmVDgoJCk7dmFyIEosUT0kLl9fYztRJiZRLl9fSCYmKFEuX19ILl9fLnNvbWUoZnVuY3Rpb24oWil7dHJ5e0c1KFopfWNhdGNoKFgpe0o9WH19KSxRLl9fSD12b2lkIDAsSiYmaDEuX19lKEosUS5fX3YpKX07dmFyIEU4PXR5cGVvZiByZXF1ZXN0QW5pbWF0aW9uRnJhbWU9PSJmdW5jdGlvbiI7ZnVuY3Rpb24gJDcoJCl7dmFyIEosUT1mdW5jdGlvbigpe2NsZWFyVGltZW91dChaKSxFOCYmY2FuY2VsQW5pbWF0aW9uRnJhbWUoSiksc2V0VGltZW91dCgkKX0sWj1zZXRUaW1lb3V0KFEsMzUpO0U4JiYoSj1yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoUSkpfWZ1bmN0aW9uIEc1KCQpe3ZhciBKPWIxLFE9JC5fX2M7dHlwZW9mIFE9PSJmdW5jdGlvbiImJigkLl9fYz12b2lkIDAsUSgpKSxiMT1KfWZ1bmN0aW9uIEszKCQpe3ZhciBKPWIxOyQuX19jPSQuX18oKSxiMT1KfWZ1bmN0aW9uIFgzKCQsSil7cmV0dXJuISR8fCQubGVuZ3RoIT09Si5sZW5ndGh8fEouc29tZShmdW5jdGlvbihRLFope3JldHVybiBRIT09JFtaXX0pfWZ1bmN0aW9uIHk4KCQsSil7cmV0dXJuIHR5cGVvZiBKPT0iZnVuY3Rpb24iP0ooJCk6Sn1mdW5jdGlvbiBKNygkLEope2Zvcih2YXIgUSBpbiBKKSRbUV09SltRXTtyZXR1cm4gJH1mdW5jdGlvbiBiOCgkLEope2Zvcih2YXIgUSBpbiAkKWlmKFEhPT0iX19zb3VyY2UiJiYhKFEgaW4gSikpcmV0dXJuITA7Zm9yKHZhciBaIGluIEopaWYoWiE9PSJfX3NvdXJjZSImJiRbWl0hPT1KW1pdKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIFM4KCQsSil7dGhpcy5wcm9wcz0kLHRoaXMuY29udGV4dD1KfShTOC5wcm90b3R5cGU9bmV3IG8xKS5pc1B1cmVSZWFjdENvbXBvbmVudD0hMCxTOC5wcm90b3R5cGUuc2hvdWxkQ29tcG9uZW50VXBkYXRlPWZ1bmN0aW9uKCQsSil7cmV0dXJuIGI4KHRoaXMucHJvcHMsJCl8fGI4KHRoaXMuc3RhdGUsSil9O3ZhciB4OD1zLl9fYjtzLl9fYj1mdW5jdGlvbigkKXskLnR5cGUmJiQudHlwZS5fX2YmJiQucmVmJiYoJC5wcm9wcy5yZWY9JC5yZWYsJC5yZWY9bnVsbCkseDgmJng4KCQpfTt2YXIgUTc9cy5fX2U7cy5fX2U9ZnVuY3Rpb24oJCxKLFEsWil7aWYoJC50aGVuKXtmb3IodmFyIFgsWT1KO1k9WS5fXzspaWYoKFg9WS5fX2MpJiZYLl9fYylyZXR1cm4gSi5fX2U9PW51bGwmJihKLl9fZT1RLl9fZSxKLl9faz1RLl9fa3x8W10pLFguX19jKCQsSil9UTcoJCxKLFEsWil9O3ZhciB2OD1zLnVubW91bnQ7ZnVuY3Rpb24gZjgoJCxKLFEpe3JldHVybiAkJiYoJC5fX2MmJiQuX19jLl9fSCYmKCQuX19jLl9fSC5fXy5mb3JFYWNoKGZ1bmN0aW9uKFope3R5cGVvZiBaLl9fYz09ImZ1bmN0aW9uIiYmWi5fX2MoKX0pLCQuX19jLl9fSD1udWxsKSwoJD1KNyh7fSwkKSkuX19jIT1udWxsJiYoJC5fX2MuX19QPT09USYmKCQuX19jLl9fUD1KKSwkLl9fYy5fX2U9ITAsJC5fX2M9bnVsbCksJC5fX2s9JC5fX2smJiQuX19rLm1hcChmdW5jdGlvbihaKXtyZXR1cm4gZjgoWixKLFEpfSkpLCR9ZnVuY3Rpb24gcDgoJCxKLFEpe3JldHVybiAkJiZRJiYoJC5fX3Y9bnVsbCwkLl9faz0kLl9fayYmJC5fX2subWFwKGZ1bmN0aW9uKFope3JldHVybiBwOChaLEosUSl9KSwkLl9fYyYmJC5fX2MuX19QPT09SiYmKCQuX19lJiZRLmFwcGVuZENoaWxkKCQuX19lKSwkLl9fYy5fX2U9ITAsJC5fX2MuX19QPVEpKSwkfWZ1bmN0aW9uIFkzKCl7dGhpcy5fX3U9MCx0aGlzLm89bnVsbCx0aGlzLl9fYj1udWxsfWZ1bmN0aW9uIHU4KCQpe3ZhciBKPSQuX18mJiQuX18uX19jO3JldHVybiBKJiZKLl9fYSYmSi5fX2EoJCl9ZnVuY3Rpb24gTjUoKXt0aGlzLmk9bnVsbCx0aGlzLmw9bnVsbH1zLnVubW91bnQ9ZnVuY3Rpb24oJCl7dmFyIEo9JC5fX2M7SiYmKEouX196PSEwKSxKJiZKLl9fUiYmSi5fX1IoKSxKJiYzMiYkLl9fdSYmKCQudHlwZT1udWxsKSx2OCYmdjgoJCl9LChZMy5wcm90b3R5cGU9bmV3IG8xKS5fX2M9ZnVuY3Rpb24oJCxKKXt2YXIgUT1KLl9fYyxaPXRoaXM7Wi5vPT1udWxsJiYoWi5vPVtdKSxaLm8ucHVzaChRKTt2YXIgWD11OChaLl9fdiksWT0hMSxxPWZ1bmN0aW9uKCl7WXx8Wi5fX3p8fChZPSEwLFEuX19SPW51bGwsWD9YKFYpOlYoKSl9O1EuX19SPXE7dmFyIEc9US5fX1A7US5fX1A9bnVsbDt2YXIgVj1mdW5jdGlvbigpe2lmKCEtLVouX191KXtpZihaLnN0YXRlLl9fYSl7dmFyIEI9Wi5zdGF0ZS5fX2E7Wi5fX3YuX19rWzBdPXA4KEIsQi5fX2MuX19QLEIuX19jLl9fTyl9dmFyIE47Zm9yKFouc2V0U3RhdGUoe19fYTpaLl9fYj1udWxsfSk7Tj1aLm8ucG9wKCk7KU4uX19QPUcsTi5mb3JjZVVwZGF0ZSgpfX07Wi5fX3UrK3x8MzImSi5fX3V8fFouc2V0U3RhdGUoe19fYTpaLl9fYj1aLl9fdi5fX2tbMF19KSwkLnRoZW4ocSxxKX0sWTMucHJvdG90eXBlLmNvbXBvbmVudFdpbGxVbm1vdW50PWZ1bmN0aW9uKCl7dGhpcy5vPVtdfSxZMy5wcm90b3R5cGUucmVuZGVyPWZ1bmN0aW9uKCQsSil7aWYodGhpcy5fX2Ipe2lmKHRoaXMuX192Ll9fayl7dmFyIFE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksWj10aGlzLl9fdi5fX2tbMF0uX19jO3RoaXMuX192Ll9fa1swXT1mOCh0aGlzLl9fYixRLFouX19PPVouX19QKX10aGlzLl9fYj1udWxsfXZhciBYPUouX19hJiZwMShaMSxudWxsLCQuZmFsbGJhY2spO3JldHVybiBYJiYoWC5fX3UmPS0zMyksW3AxKFoxLG51bGwsSi5fX2E/bnVsbDokLmNoaWxkcmVuKSxYXX07dmFyIGo4PWZ1bmN0aW9uKCQsSixRKXtpZigrK1FbMV09PT1RWzBdJiYkLmwuZGVsZXRlKEopLCQucHJvcHMucmV2ZWFsT3JkZXImJigkLnByb3BzLnJldmVhbE9yZGVyWzBdIT09InQifHwhJC5sLnNpemUpKWZvcihRPSQuaTtROyl7Zm9yKDtRLmxlbmd0aD4zOylRLnBvcCgpKCk7aWYoUVsxXTxRWzBdKWJyZWFrOyQuaT1RPVFbMl19fTsoTjUucHJvdG90eXBlPW5ldyBvMSkuX19hPWZ1bmN0aW9uKCQpe3ZhciBKPXRoaXMsUT11OChKLl9fdiksWj1KLmwuZ2V0KCQpO3JldHVybiBaWzBdKyssZnVuY3Rpb24oWCl7dmFyIFk9ZnVuY3Rpb24oKXtKLnByb3BzLnJldmVhbE9yZGVyPyhaLnB1c2goWCksajgoSiwkLFopKTpYKCl9O1E/UShZKTpZKCl9fSxONS5wcm90b3R5cGUucmVuZGVyPWZ1bmN0aW9uKCQpe3RoaXMuaT1udWxsLHRoaXMubD1uZXcgTWFwO3ZhciBKPVowKCQuY2hpbGRyZW4pOyQucmV2ZWFsT3JkZXImJiQucmV2ZWFsT3JkZXJbMF09PT0iYiImJkoucmV2ZXJzZSgpO2Zvcih2YXIgUT1KLmxlbmd0aDtRLS07KXRoaXMubC5zZXQoSltRXSx0aGlzLmk9WzEsMCx0aGlzLmldKTtyZXR1cm4gJC5jaGlsZHJlbn0sTjUucHJvdG90eXBlLmNvbXBvbmVudERpZFVwZGF0ZT1ONS5wcm90b3R5cGUuY29tcG9uZW50RGlkTW91bnQ9ZnVuY3Rpb24oKXt2YXIgJD10aGlzO3RoaXMubC5mb3JFYWNoKGZ1bmN0aW9uKEosUSl7ajgoJCxRLEopfSl9O3ZhciBaNz10eXBlb2YgU3ltYm9sPCJ1IiYmU3ltYm9sLmZvciYmU3ltYm9sLmZvcigicmVhY3QuZWxlbWVudCIpfHw2MDEwMyxLNz0vXig/OmFjY2VudHxhbGlnbm1lbnR8YXJhYmljfGJhc2VsaW5lfGNhcHxjbGlwKD8hUGF0aFUpfGNvbG9yfGRvbWluYW50fGZpbGx8Zmxvb2R8Zm9udHxnbHlwaCg/IVIpfGhvcml6fGltYWdlKCFTKXxsZXR0ZXJ8bGlnaHRpbmd8bWFya2VyKD8hSHxXfFUpfG92ZXJsaW5lfHBhaW50fHBvaW50ZXJ8c2hhcGV8c3RvcHxzdHJpa2V0aHJvdWdofHN0cm9rZXx0ZXh0KD8hTCl8dHJhbnNmb3JtfHVuZGVybGluZXx1bmljb2RlfHVuaXRzfHZ8dmVjdG9yfHZlcnR8d29yZHx3cml0aW5nfHgoPyFDKSlbQS1aXS8sWDc9L15vbihBbml8VHJhfFRvdXxCZWZvcmVJbnB8Q29tcG8pLyxZNz0vW0EtWjAtOV0vZyxxNz10eXBlb2YgZG9jdW1lbnQ8InUiLEc3PWZ1bmN0aW9uKCQpe3JldHVybih0eXBlb2YgU3ltYm9sPCJ1IiYmdHlwZW9mIFN5bWJvbCgpPT0ic3ltYm9sIj8vZmlsfGNoZXxyYWQvOi9maWx8Y2hlfHJhLykudGVzdCgkKX07ZnVuY3Rpb24gbDgoJCxKLFEpe3JldHVybiBKLl9faz09bnVsbCYmKEoudGV4dENvbnRlbnQ9IiIpLFMwKCQsSiksdHlwZW9mIFE9PSJmdW5jdGlvbiImJlEoKSwkPyQuX19jOm51bGx9bzEucHJvdG90eXBlLmlzUmVhY3RDb21wb25lbnQ9ITAsWyJjb21wb25lbnRXaWxsTW91bnQiLCJjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzIiwiY29tcG9uZW50V2lsbFVwZGF0ZSJdLmZvckVhY2goZnVuY3Rpb24oJCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KG8xLnByb3RvdHlwZSwkLHtjb25maWd1cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXNbIlVOU0FGRV8iKyRdfSxzZXQ6ZnVuY3Rpb24oSil7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsJCx7Y29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOkp9KX19KX0pO3ZhciBoOD1zLmV2ZW50O3MuZXZlbnQ9ZnVuY3Rpb24oJCl7cmV0dXJuIGg4JiYoJD1oOCgkKSksJC5wZXJzaXN0PWZ1bmN0aW9uKCl7fSwkLmlzUHJvcGFnYXRpb25TdG9wcGVkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2FuY2VsQnViYmxlfSwkLmlzRGVmYXVsdFByZXZlbnRlZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmRlZmF1bHRQcmV2ZW50ZWR9LCQubmF0aXZlRXZlbnQ9JH07dmFyIGQ4LFY3PXtjb25maWd1cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xhc3N9fSxSOD1zLnZub2RlO3Mudm5vZGU9ZnVuY3Rpb24oJCl7dHlwZW9mICQudHlwZT09InN0cmluZyImJmZ1bmN0aW9uKEope3Zhcntwcm9wczpRLHR5cGU6Wn09SixYPXt9LFk9Wi5pbmRleE9mKCItIik9PS0xO2Zvcih2YXIgcSBpbiBRKXt2YXIgRz1RW3FdO2lmKCEocT09PSJ2YWx1ZSImJigiZGVmYXVsdFZhbHVlImluIFEpJiZHPT1udWxsfHxxNyYmcT09PSJjaGlsZHJlbiImJlo9PT0ibm9zY3JpcHQifHxxPT09ImNsYXNzInx8cT09PSJjbGFzc05hbWUiKSl7dmFyIFY9cS50b0xvd2VyQ2FzZSgpO3E9PT0iZGVmYXVsdFZhbHVlIiYmInZhbHVlImluIFEmJlEudmFsdWU9PW51bGw/cT0idmFsdWUiOnE9PT0iZG93bmxvYWQiJiZHPT09ITA/Rz0iIjpWPT09InRyYW5zbGF0ZSImJkc9PT0ibm8iP0c9ITE6VlswXT09PSJvIiYmVlsxXT09PSJuIj9WPT09Im9uZG91YmxlY2xpY2siP3E9Im9uZGJsY2xpY2siOlYhPT0ib25jaGFuZ2UifHxaIT09ImlucHV0IiYmWiE9PSJ0ZXh0YXJlYSJ8fEc3KFEudHlwZSk/Vj09PSJvbmZvY3VzIj9xPSJvbmZvY3VzaW4iOlY9PT0ib25ibHVyIj9xPSJvbmZvY3Vzb3V0IjpYNy50ZXN0KHEpJiYocT1WKTpWPXE9Im9uaW5wdXQiOlkmJks3LnRlc3QocSk/cT1xLnJlcGxhY2UoWTcsIi0kJiIpLnRvTG93ZXJDYXNlKCk6Rz09PW51bGwmJihHPXZvaWQgMCksVj09PSJvbmlucHV0IiYmWFtxPVZdJiYocT0ib25pbnB1dENhcHR1cmUiKSxYW3FdPUd9fVo9PSJzZWxlY3QiJiYoWC5tdWx0aXBsZSYmQXJyYXkuaXNBcnJheShYLnZhbHVlKSYmKFgudmFsdWU9WjAoUS5jaGlsZHJlbikuZm9yRWFjaChmdW5jdGlvbihCKXtCLnByb3BzLnNlbGVjdGVkPVgudmFsdWUuaW5kZXhPZihCLnByb3BzLnZhbHVlKSE9LTF9KSksWC5kZWZhdWx0VmFsdWUhPW51bGwmJihYLnZhbHVlPVowKFEuY2hpbGRyZW4pLmZvckVhY2goZnVuY3Rpb24oQil7Qi5wcm9wcy5zZWxlY3RlZD1YLm11bHRpcGxlP1guZGVmYXVsdFZhbHVlLmluZGV4T2YoQi5wcm9wcy52YWx1ZSkhPS0xOlguZGVmYXVsdFZhbHVlPT1CLnByb3BzLnZhbHVlfSkpKSxRLmNsYXNzJiYhUS5jbGFzc05hbWU/KFguY2xhc3M9US5jbGFzcyxPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiY2xhc3NOYW1lIixWNykpOlEuY2xhc3NOYW1lJiYoWC5jbGFzcz1YLmNsYXNzTmFtZT1RLmNsYXNzTmFtZSksSi5wcm9wcz1YfSgkKSwkLiQkdHlwZW9mPVo3LFI4JiZSOCgkKX07dmFyIGc4PXMuX19yO3MuX19yPWZ1bmN0aW9uKCQpe2c4JiZnOCgkKSxkOD0kLl9fY307dmFyIG04PXMuZGlmZmVkO3MuZGlmZmVkPWZ1bmN0aW9uKCQpe204JiZtOCgkKTt2YXJ7cHJvcHM6SixfX2U6UX09JDtRIT1udWxsJiYkLnR5cGU9PT0idGV4dGFyZWEiJiYidmFsdWUiaW4gSiYmSi52YWx1ZSE9PVEudmFsdWUmJihRLnZhbHVlPUoudmFsdWU9PW51bGw/IiI6Si52YWx1ZSksZDg9bnVsbH07ZnVuY3Rpb24gYzgoJCl7cmV0dXJuISEkLl9fayYmKFMwKG51bGwsJCksITApfWZ1bmN0aW9uIG84KCQpe3JldHVybntyZW5kZXI6ZnVuY3Rpb24oSil7bDgoSiwkKX0sdW5tb3VudDpmdW5jdGlvbigpe2M4KCQpfX19ZnVuY3Rpb24gSjkoJCxKKXtmb3IodmFyIFEgaW4gSikkW1FdPUpbUV07cmV0dXJuICR9ZnVuY3Rpb24gRzMoJCxKKXtmb3IodmFyIFEgaW4gJClpZihRIT09Il9fc291cmNlIiYmIShRIGluIEopKXJldHVybiEwO2Zvcih2YXIgWiBpbiBKKWlmKFohPT0iX19zb3VyY2UiJiYkW1pdIT09SltaXSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiBROSgkLEope3ZhciBRPUooKSxaPVcoe3Q6e19fOlEsdTpKfX0pLFg9WlswXS50LFk9WlsxXTtyZXR1cm4gdzAoZnVuY3Rpb24oKXtYLl9fPVEsWC51PUoscTMoWCkmJlkoe3Q6WH0pfSxbJCxRLEpdKSxiKGZ1bmN0aW9uKCl7cmV0dXJuIHEzKFgpJiZZKHt0Olh9KSwkKGZ1bmN0aW9uKCl7cTMoWCkmJlkoe3Q6WH0pfSl9LFskXSksUX1mdW5jdGlvbiBxMygkKXt0cnl7cmV0dXJuISgoSj0kLl9fKT09PShRPSQudSgpKSYmKEohPT0wfHwxL0o9PTEvUSl8fEohPUomJlEhPVEpfWNhdGNoKFope3JldHVybiEwfXZhciBKLFF9ZnVuY3Rpb24gWjkoJCl7JCgpfWZ1bmN0aW9uIEs5KCQpe3JldHVybiAkfWZ1bmN0aW9uIFg5KCl7cmV0dXJuWyExLFo5XX12YXIgWTk9dzA7ZnVuY3Rpb24gVjMoJCxKKXt0aGlzLnByb3BzPSQsdGhpcy5jb250ZXh0PUp9ZnVuY3Rpb24gZDAoJCxKKXtmdW5jdGlvbiBRKFgpe3ZhciBZPXRoaXMucHJvcHMucmVmO3JldHVybiBZIT1YLnJlZiYmWSYmKHR5cGVvZiBZPT0iZnVuY3Rpb24iP1kobnVsbCk6WS5jdXJyZW50PW51bGwpLEo/IUoodGhpcy5wcm9wcyxYKXx8WSE9WC5yZWY6RzModGhpcy5wcm9wcyxYKX1mdW5jdGlvbiBaKFgpe3JldHVybiB0aGlzLnNob3VsZENvbXBvbmVudFVwZGF0ZT1RLHAxKCQsWCl9cmV0dXJuIFouZGlzcGxheU5hbWU9Ik1lbW8oIisoJC5kaXNwbGF5TmFtZXx8JC5uYW1lKSsiKSIsWi5fX2Y9Wi5wcm90b3R5cGUuaXNSZWFjdENvbXBvbmVudD0hMCxaLnR5cGU9JCxafShWMy5wcm90b3R5cGU9bmV3IG8xKS5pc1B1cmVSZWFjdENvbXBvbmVudD0hMCxWMy5wcm90b3R5cGUuc2hvdWxkQ29tcG9uZW50VXBkYXRlPWZ1bmN0aW9uKCQsSil7cmV0dXJuIEczKHRoaXMucHJvcHMsJCl8fEczKHRoaXMuc3RhdGUsSil9O3ZhciByOD1zLl9fYjtzLl9fYj1mdW5jdGlvbigkKXskLnR5cGUmJiQudHlwZS5fX2YmJiQucmVmJiYoJC5wcm9wcy5yZWY9JC5yZWYsJC5yZWY9bnVsbCkscjgmJnI4KCQpfTt2YXIgQjc9dHlwZW9mIFN5bWJvbDwidSImJlN5bWJvbC5mb3ImJlN5bWJvbC5mb3IoInJlYWN0LmZvcndhcmRfcmVmIil8fDM5MTE7ZnVuY3Rpb24gVzAoJCl7ZnVuY3Rpb24gSihRKXt2YXIgWj1KOSh7fSxRKTtyZXR1cm4gZGVsZXRlIFoucmVmLCQoWixRLnJlZnx8bnVsbCl9cmV0dXJuIEouJCR0eXBlb2Y9QjcsSi5yZW5kZXI9JCxKLnByb3RvdHlwZS5pc1JlYWN0Q29tcG9uZW50PUouX19mPSEwLEouZGlzcGxheU5hbWU9IkZvcndhcmRSZWYoIisoJC5kaXNwbGF5TmFtZXx8JC5uYW1lKSsiKSIsSn12YXIgaTg9ZnVuY3Rpb24oJCxKKXtyZXR1cm4gJD09bnVsbD9udWxsOlowKFowKCQpLm1hcChKKSl9LE43PXttYXA6aTgsZm9yRWFjaDppOCxjb3VudDpmdW5jdGlvbigkKXtyZXR1cm4gJD9aMCgkKS5sZW5ndGg6MH0sb25seTpmdW5jdGlvbigkKXt2YXIgSj1aMCgkKTtpZihKLmxlbmd0aCE9PTEpdGhyb3ciQ2hpbGRyZW4ub25seSI7cmV0dXJuIEpbMF19LHRvQXJyYXk6WjB9LEw3PXMuX19lO3MuX19lPWZ1bmN0aW9uKCQsSixRLFope2lmKCQudGhlbil7Zm9yKHZhciBYLFk9SjtZPVkuX187KWlmKChYPVkuX19jKSYmWC5fX2MpcmV0dXJuIEouX19lPT1udWxsJiYoSi5fX2U9US5fX2UsSi5fX2s9US5fX2t8fFtdKSxYLl9fYygkLEopfUw3KCQsSixRLFopfTt2YXIgYTg9cy51bm1vdW50O2Z1bmN0aW9uIHE5KCQsSixRKXtyZXR1cm4gJCYmKCQuX19jJiYkLl9fYy5fX0gmJigkLl9fYy5fX0guX18uZm9yRWFjaChmdW5jdGlvbihaKXt0eXBlb2YgWi5fX2M9PSJmdW5jdGlvbiImJlouX19jKCl9KSwkLl9fYy5fX0g9bnVsbCksKCQ9Sjkoe30sJCkpLl9fYyE9bnVsbCYmKCQuX19jLl9fUD09PVEmJigkLl9fYy5fX1A9SiksJC5fX2MuX19lPSEwLCQuX19jPW51bGwpLCQuX19rPSQuX19rJiYkLl9fay5tYXAoZnVuY3Rpb24oWil7cmV0dXJuIHE5KFosSixRKX0pKSwkfWZ1bmN0aW9uIEc5KCQsSixRKXtyZXR1cm4gJCYmUSYmKCQuX192PW51bGwsJC5fX2s9JC5fX2smJiQuX19rLm1hcChmdW5jdGlvbihaKXtyZXR1cm4gRzkoWixKLFEpfSksJC5fX2MmJiQuX19jLl9fUD09PUomJigkLl9fZSYmUS5hcHBlbmRDaGlsZCgkLl9fZSksJC5fX2MuX19lPSEwLCQuX19jLl9fUD1RKSksJH1mdW5jdGlvbiBMNSgpe3RoaXMuX191PTAsdGhpcy5vPW51bGwsdGhpcy5fX2I9bnVsbH1mdW5jdGlvbiBWOSgkKXt2YXIgSj0kLl9fJiYkLl9fLl9fYztyZXR1cm4gSiYmSi5fX2EmJkouX19hKCQpfWZ1bmN0aW9uIHo3KCQpe3ZhciBKLFEsWixYPW51bGw7ZnVuY3Rpb24gWShxKXtpZihKfHwoSj0kKCkpLnRoZW4oZnVuY3Rpb24oRyl7RyYmKFg9Ry5kZWZhdWx0fHxHKSxaPSEwfSxmdW5jdGlvbihHKXtRPUcsWj0hMH0pLFEpdGhyb3cgUTtpZighWil0aHJvdyBKO3JldHVybiBYP3AxKFgscSk6bnVsbH1yZXR1cm4gWS5kaXNwbGF5TmFtZT0iTGF6eSIsWS5fX2Y9ITAsWX1mdW5jdGlvbiBQMigpe3RoaXMuaT1udWxsLHRoaXMubD1udWxsfXMudW5tb3VudD1mdW5jdGlvbigkKXt2YXIgSj0kLl9fYztKJiYoSi5fX3o9ITApLEomJkouX19SJiZKLl9fUigpLEomJjMyJiQuX191JiYoJC50eXBlPW51bGwpLGE4JiZhOCgkKX0sKEw1LnByb3RvdHlwZT1uZXcgbzEpLl9fYz1mdW5jdGlvbigkLEope3ZhciBRPUouX19jLFo9dGhpcztaLm89PW51bGwmJihaLm89W10pLFouby5wdXNoKFEpO3ZhciBYPVY5KFouX192KSxZPSExLHE9ZnVuY3Rpb24oKXtZfHxaLl9fenx8KFk9ITAsUS5fX1I9bnVsbCxYP1goVik6VigpKX07US5fX1I9cTt2YXIgRz1RLl9fUDtRLl9fUD1udWxsO3ZhciBWPWZ1bmN0aW9uKCl7aWYoIS0tWi5fX3Upe2lmKFouc3RhdGUuX19hKXt2YXIgQj1aLnN0YXRlLl9fYTtaLl9fdi5fX2tbMF09RzkoQixCLl9fYy5fX1AsQi5fX2MuX19PKX12YXIgTjtmb3IoWi5zZXRTdGF0ZSh7X19hOlouX19iPW51bGx9KTtOPVouby5wb3AoKTspTi5fX1A9RyxOLmZvcmNlVXBkYXRlKCl9fTtaLl9fdSsrfHwzMiZKLl9fdXx8Wi5zZXRTdGF0ZSh7X19hOlouX19iPVouX192Ll9fa1swXX0pLCQudGhlbihxLHEpfSxMNS5wcm90b3R5cGUuY29tcG9uZW50V2lsbFVubW91bnQ9ZnVuY3Rpb24oKXt0aGlzLm89W119LEw1LnByb3RvdHlwZS5yZW5kZXI9ZnVuY3Rpb24oJCxKKXtpZih0aGlzLl9fYil7aWYodGhpcy5fX3YuX19rKXt2YXIgUT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSxaPXRoaXMuX192Ll9fa1swXS5fX2M7dGhpcy5fX3YuX19rWzBdPXE5KHRoaXMuX19iLFEsWi5fX089Wi5fX1ApfXRoaXMuX19iPW51bGx9dmFyIFg9Si5fX2EmJnAxKFoxLG51bGwsJC5mYWxsYmFjayk7cmV0dXJuIFgmJihYLl9fdSY9LTMzKSxbcDEoWjEsbnVsbCxKLl9fYT9udWxsOiQuY2hpbGRyZW4pLFhdfTt2YXIgbjg9ZnVuY3Rpb24oJCxKLFEpe2lmKCsrUVsxXT09PVFbMF0mJiQubC5kZWxldGUoSiksJC5wcm9wcy5yZXZlYWxPcmRlciYmKCQucHJvcHMucmV2ZWFsT3JkZXJbMF0hPT0idCJ8fCEkLmwuc2l6ZSkpZm9yKFE9JC5pO1E7KXtmb3IoO1EubGVuZ3RoPjM7KVEucG9wKCkoKTtpZihRWzFdPFFbMF0pYnJlYWs7JC5pPVE9UVsyXX19O2Z1bmN0aW9uIEM3KCQpe3JldHVybiB0aGlzLmdldENoaWxkQ29udGV4dD1mdW5jdGlvbigpe3JldHVybiAkLmNvbnRleHR9LCQuY2hpbGRyZW59ZnVuY3Rpb24gVTcoJCl7dmFyIEo9dGhpcyxRPSQuaDtpZihKLmNvbXBvbmVudFdpbGxVbm1vdW50PWZ1bmN0aW9uKCl7UzAobnVsbCxKLnYpLEoudj1udWxsLEouaD1udWxsfSxKLmgmJkouaCE9PVEmJkouY29tcG9uZW50V2lsbFVubW91bnQoKSwhSi52KXtmb3IodmFyIFo9Si5fX3Y7WiE9PW51bGwmJiFaLl9fbSYmWi5fXyE9PW51bGw7KVo9Wi5fXztKLmg9USxKLnY9e25vZGVUeXBlOjEscGFyZW50Tm9kZTpRLGNoaWxkTm9kZXM6W10sX19rOntfX206Wi5fX219LGNvbnRhaW5zOmZ1bmN0aW9uKCl7cmV0dXJuITB9LG5hbWVzcGFjZVVSSTpRLm5hbWVzcGFjZVVSSSxpbnNlcnRCZWZvcmU6ZnVuY3Rpb24oWCxZKXt0aGlzLmNoaWxkTm9kZXMucHVzaChYKSxKLmguaW5zZXJ0QmVmb3JlKFgsWSl9LHJlbW92ZUNoaWxkOmZ1bmN0aW9uKFgpe3RoaXMuY2hpbGROb2Rlcy5zcGxpY2UodGhpcy5jaGlsZE5vZGVzLmluZGV4T2YoWCk+Pj4xLDEpLEouaC5yZW1vdmVDaGlsZChYKX19fVMwKHAxKEM3LHtjb250ZXh0OkouY29udGV4dH0sJC5fX3YpLEoudil9ZnVuY3Rpb24gQjMoJCxKKXt2YXIgUT1wMShVNyx7X192OiQsaDpKfSk7cmV0dXJuIFEuY29udGFpbmVySW5mbz1KLFF9KFAyLnByb3RvdHlwZT1uZXcgbzEpLl9fYT1mdW5jdGlvbigkKXt2YXIgSj10aGlzLFE9VjkoSi5fX3YpLFo9Si5sLmdldCgkKTtyZXR1cm4gWlswXSsrLGZ1bmN0aW9uKFgpe3ZhciBZPWZ1bmN0aW9uKCl7Si5wcm9wcy5yZXZlYWxPcmRlcj8oWi5wdXNoKFgpLG44KEosJCxaKSk6WCgpfTtRP1EoWSk6WSgpfX0sUDIucHJvdG90eXBlLnJlbmRlcj1mdW5jdGlvbigkKXt0aGlzLmk9bnVsbCx0aGlzLmw9bmV3IE1hcDt2YXIgSj1aMCgkLmNoaWxkcmVuKTskLnJldmVhbE9yZGVyJiYkLnJldmVhbE9yZGVyWzBdPT09ImIiJiZKLnJldmVyc2UoKTtmb3IodmFyIFE9Si5sZW5ndGg7US0tOyl0aGlzLmwuc2V0KEpbUV0sdGhpcy5pPVsxLDAsdGhpcy5pXSk7cmV0dXJuICQuY2hpbGRyZW59LFAyLnByb3RvdHlwZS5jb21wb25lbnREaWRVcGRhdGU9UDIucHJvdG90eXBlLmNvbXBvbmVudERpZE1vdW50PWZ1bmN0aW9uKCl7dmFyICQ9dGhpczt0aGlzLmwuZm9yRWFjaChmdW5jdGlvbihKLFEpe244KCQsUSxKKX0pfTt2YXIgQjk9dHlwZW9mIFN5bWJvbDwidSImJlN5bWJvbC5mb3ImJlN5bWJvbC5mb3IoInJlYWN0LmVsZW1lbnQiKXx8NjAxMDMsSDc9L14oPzphY2NlbnR8YWxpZ25tZW50fGFyYWJpY3xiYXNlbGluZXxjYXB8Y2xpcCg/IVBhdGhVKXxjb2xvcnxkb21pbmFudHxmaWxsfGZsb29kfGZvbnR8Z2x5cGgoPyFSKXxob3JpenxpbWFnZSghUyl8bGV0dGVyfGxpZ2h0aW5nfG1hcmtlcig/IUh8V3xVKXxvdmVybGluZXxwYWludHxwb2ludGVyfHNoYXBlfHN0b3B8c3RyaWtldGhyb3VnaHxzdHJva2V8dGV4dCg/IUwpfHRyYW5zZm9ybXx1bmRlcmxpbmV8dW5pY29kZXx1bml0c3x2fHZlY3Rvcnx2ZXJ0fHdvcmR8d3JpdGluZ3x4KD8hQykpW0EtWl0vLEE3PS9eb24oQW5pfFRyYXxUb3V8QmVmb3JlSW5wfENvbXBvKS8sazc9L1tBLVowLTldL2csTzc9dHlwZW9mIGRvY3VtZW50PCJ1IixGNz1mdW5jdGlvbigkKXtyZXR1cm4odHlwZW9mIFN5bWJvbDwidSImJnR5cGVvZiBTeW1ib2woKT09InN5bWJvbCI/L2ZpbHxjaGV8cmFkLzovZmlsfGNoZXxyYS8pLnRlc3QoJCl9O2Z1bmN0aW9uIE03KCQsSixRKXtyZXR1cm4gSi5fX2s9PW51bGwmJihKLnRleHRDb250ZW50PSIiKSxTMCgkLEopLHR5cGVvZiBRPT0iZnVuY3Rpb24iJiZRKCksJD8kLl9fYzpudWxsfWZ1bmN0aW9uIFc3KCQsSixRKXtyZXR1cm4gcTUoJCxKKSx0eXBlb2YgUT09ImZ1bmN0aW9uIiYmUSgpLCQ/JC5fX2M6bnVsbH1vMS5wcm90b3R5cGUuaXNSZWFjdENvbXBvbmVudD0hMCxbImNvbXBvbmVudFdpbGxNb3VudCIsImNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMiLCJjb21wb25lbnRXaWxsVXBkYXRlIl0uZm9yRWFjaChmdW5jdGlvbigkKXtPYmplY3QuZGVmaW5lUHJvcGVydHkobzEucHJvdG90eXBlLCQse2NvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc1siVU5TQUZFXyIrJF19LHNldDpmdW5jdGlvbihKKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywkLHtjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6Sn0pfX0pfSk7dmFyIHM4PXMuZXZlbnQ7cy5ldmVudD1mdW5jdGlvbigkKXtyZXR1cm4gczgmJigkPXM4KCQpKSwkLnBlcnNpc3Q9ZnVuY3Rpb24oKXt9LCQuaXNQcm9wYWdhdGlvblN0b3BwZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jYW5jZWxCdWJibGV9LCQuaXNEZWZhdWx0UHJldmVudGVkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGVmYXVsdFByZXZlbnRlZH0sJC5uYXRpdmVFdmVudD0kfTt2YXIgTjMsUDc9e2NvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbGFzc319LHQ4PXMudm5vZGU7cy52bm9kZT1mdW5jdGlvbigkKXt0eXBlb2YgJC50eXBlPT0ic3RyaW5nIiYmZnVuY3Rpb24oSil7dmFye3Byb3BzOlEsdHlwZTpafT1KLFg9e30sWT1aLmluZGV4T2YoIi0iKT09LTE7Zm9yKHZhciBxIGluIFEpe3ZhciBHPVFbcV07aWYoIShxPT09InZhbHVlIiYmKCJkZWZhdWx0VmFsdWUiaW4gUSkmJkc9PW51bGx8fE83JiZxPT09ImNoaWxkcmVuIiYmWj09PSJub3NjcmlwdCJ8fHE9PT0iY2xhc3MifHxxPT09ImNsYXNzTmFtZSIpKXt2YXIgVj1xLnRvTG93ZXJDYXNlKCk7cT09PSJkZWZhdWx0VmFsdWUiJiYidmFsdWUiaW4gUSYmUS52YWx1ZT09bnVsbD9xPSJ2YWx1ZSI6cT09PSJkb3dubG9hZCImJkc9PT0hMD9HPSIiOlY9PT0idHJhbnNsYXRlIiYmRz09PSJubyI/Rz0hMTpWWzBdPT09Im8iJiZWWzFdPT09Im4iP1Y9PT0ib25kb3VibGVjbGljayI/cT0ib25kYmxjbGljayI6ViE9PSJvbmNoYW5nZSJ8fFohPT0iaW5wdXQiJiZaIT09InRleHRhcmVhInx8RjcoUS50eXBlKT9WPT09Im9uZm9jdXMiP3E9Im9uZm9jdXNpbiI6Vj09PSJvbmJsdXIiP3E9Im9uZm9jdXNvdXQiOkE3LnRlc3QocSkmJihxPVYpOlY9cT0ib25pbnB1dCI6WSYmSDcudGVzdChxKT9xPXEucmVwbGFjZShrNywiLSQmIikudG9Mb3dlckNhc2UoKTpHPT09bnVsbCYmKEc9dm9pZCAwKSxWPT09Im9uaW5wdXQiJiZYW3E9Vl0mJihxPSJvbmlucHV0Q2FwdHVyZSIpLFhbcV09R319Wj09InNlbGVjdCImJihYLm11bHRpcGxlJiZBcnJheS5pc0FycmF5KFgudmFsdWUpJiYoWC52YWx1ZT1aMChRLmNoaWxkcmVuKS5mb3JFYWNoKGZ1bmN0aW9uKEIpe0IucHJvcHMuc2VsZWN0ZWQ9WC52YWx1ZS5pbmRleE9mKEIucHJvcHMudmFsdWUpIT0tMX0pKSxYLmRlZmF1bHRWYWx1ZSE9bnVsbCYmKFgudmFsdWU9WjAoUS5jaGlsZHJlbikuZm9yRWFjaChmdW5jdGlvbihCKXtCLnByb3BzLnNlbGVjdGVkPVgubXVsdGlwbGU/WC5kZWZhdWx0VmFsdWUuaW5kZXhPZihCLnByb3BzLnZhbHVlKSE9LTE6WC5kZWZhdWx0VmFsdWU9PUIucHJvcHMudmFsdWV9KSkpLFEuY2xhc3MmJiFRLmNsYXNzTmFtZT8oWC5jbGFzcz1RLmNsYXNzLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJjbGFzc05hbWUiLFA3KSk6US5jbGFzc05hbWUmJihYLmNsYXNzPVguY2xhc3NOYW1lPVEuY2xhc3NOYW1lKSxKLnByb3BzPVh9KCQpLCQuJCR0eXBlb2Y9QjksdDgmJnQ4KCQpfTt2YXIgZTg9cy5fX3I7cy5fX3I9ZnVuY3Rpb24oJCl7ZTgmJmU4KCQpLE4zPSQuX19jfTt2YXIgJDk9cy5kaWZmZWQ7cy5kaWZmZWQ9ZnVuY3Rpb24oJCl7JDkmJiQ5KCQpO3Zhcntwcm9wczpKLF9fZTpRfT0kO1EhPW51bGwmJiQudHlwZT09PSJ0ZXh0YXJlYSImJiJ2YWx1ZSJpbiBKJiZKLnZhbHVlIT09US52YWx1ZSYmKFEudmFsdWU9Si52YWx1ZT09bnVsbD8iIjpKLnZhbHVlKSxOMz1udWxsfTt2YXIgXzc9e1JlYWN0Q3VycmVudERpc3BhdGNoZXI6e2N1cnJlbnQ6e3JlYWRDb250ZXh0OmZ1bmN0aW9uKCQpe3JldHVybiBOMy5fX25bJC5fX2NdLnByb3BzLnZhbHVlfSx1c2VDYWxsYmFjazpELHVzZUNvbnRleHQ6QzAsdXNlRGVidWdWYWx1ZTpCNSx1c2VEZWZlcnJlZFZhbHVlOks5LHVzZUVmZmVjdDpiLHVzZUlkOkoyLHVzZUltcGVyYXRpdmVIYW5kbGU6VjUsdXNlSW5zZXJ0aW9uRWZmZWN0Olk5LHVzZUxheW91dEVmZmVjdDp3MCx1c2VNZW1vOkUxLHVzZVJlZHVjZXI6bDAsdXNlUmVmOkUsdXNlU3RhdGU6Vyx1c2VTeW5jRXh0ZXJuYWxTdG9yZTpROSx1c2VUcmFuc2l0aW9uOlg5fX19O2Z1bmN0aW9uIEQ3KCQpe3JldHVybiBwMS5iaW5kKG51bGwsJCl9ZnVuY3Rpb24gejUoJCl7cmV0dXJuISEkJiYkLiQkdHlwZW9mPT09Qjl9ZnVuY3Rpb24gVDcoJCl7cmV0dXJuIHo1KCQpJiYkLnR5cGU9PT1aMX1mdW5jdGlvbiB3NygkKXtyZXR1cm4hISQmJnR5cGVvZiAkLmRpc3BsYXlOYW1lPT0ic3RyaW5nIiYmJC5kaXNwbGF5TmFtZS5pbmRleE9mKCJNZW1vKCIpPT0wfWZ1bmN0aW9uIEU3KCQpe3JldHVybiB6NSgkKT9RMy5hcHBseShudWxsLGFyZ3VtZW50cyk6JH1mdW5jdGlvbiBJNygkKXtyZXR1cm4hISQuX19rJiYoUzAobnVsbCwkKSwhMCl9ZnVuY3Rpb24geTcoJCl7cmV0dXJuICQmJigkLmJhc2V8fCQubm9kZVR5cGU9PT0xJiYkKXx8bnVsbH12YXIgYjc9ZnVuY3Rpb24oJCxKKXtyZXR1cm4gJChKKX0sUzc9ZnVuY3Rpb24oJCxKKXt2YXIgUT1zLmRlYm91bmNlUmVuZGVyaW5nO3MuZGVib3VuY2VSZW5kZXJpbmc9ZnVuY3Rpb24oWCl7cmV0dXJuIFgoKX07dmFyIFo9JChKKTtyZXR1cm4gcy5kZWJvdW5jZVJlbmRlcmluZz1RLFp9LHg3PXo1LG09e3VzZVN0YXRlOlcsdXNlSWQ6SjIsdXNlUmVkdWNlcjpsMCx1c2VFZmZlY3Q6Yix1c2VMYXlvdXRFZmZlY3Q6dzAsdXNlSW5zZXJ0aW9uRWZmZWN0Olk5LHVzZVRyYW5zaXRpb246WDksdXNlRGVmZXJyZWRWYWx1ZTpLOSx1c2VTeW5jRXh0ZXJuYWxTdG9yZTpROSxzdGFydFRyYW5zaXRpb246WjksdXNlUmVmOkUsdXNlSW1wZXJhdGl2ZUhhbmRsZTpWNSx1c2VNZW1vOkUxLHVzZUNhbGxiYWNrOkQsdXNlQ29udGV4dDpDMCx1c2VEZWJ1Z1ZhbHVlOkI1LHZlcnNpb246IjE4LjMuMSIsQ2hpbGRyZW46TjcscmVuZGVyOk03LGh5ZHJhdGU6VzcsdW5tb3VudENvbXBvbmVudEF0Tm9kZTpJNyxjcmVhdGVQb3J0YWw6QjMsY3JlYXRlRWxlbWVudDpwMSxjcmVhdGVDb250ZXh0OnowLGNyZWF0ZUZhY3Rvcnk6RDcsY2xvbmVFbGVtZW50OkU3LGNyZWF0ZVJlZjpXMixGcmFnbWVudDpaMSxpc1ZhbGlkRWxlbWVudDp6NSxpc0VsZW1lbnQ6eDcsaXNGcmFnbWVudDpUNyxpc01lbW86dzcsZmluZERPTU5vZGU6eTcsQ29tcG9uZW50Om8xLFB1cmVDb21wb25lbnQ6VjMsbWVtbzpkMCxmb3J3YXJkUmVmOlcwLGZsdXNoU3luYzpTNyx1bnN0YWJsZV9iYXRjaGVkVXBkYXRlczpiNyxTdHJpY3RNb2RlOloxLFN1c3BlbnNlOkw1LFN1c3BlbnNlTGlzdDpQMixsYXp5Ono3LF9fU0VDUkVUX0lOVEVSTkFMU19ET19OT1RfVVNFX09SX1lPVV9XSUxMX0JFX0ZJUkVEOl83fTt2YXIgXzI9e3BvcnRyYWl0OiJsYW5kc2NhcGVfbGVmdCIsbGFuZHNjYXBlX2xlZnQ6InBvcnRyYWl0X3Vwc2lkZV9kb3duIixwb3J0cmFpdF91cHNpZGVfZG93bjoibGFuZHNjYXBlX3JpZ2h0IixsYW5kc2NhcGVfcmlnaHQ6InBvcnRyYWl0In0sTDM9e3BvcnRyYWl0OiJsYW5kc2NhcGVfcmlnaHQiLGxhbmRzY2FwZV9yaWdodDoicG9ydHJhaXRfdXBzaWRlX2Rvd24iLHBvcnRyYWl0X3Vwc2lkZV9kb3duOiJsYW5kc2NhcGVfbGVmdCIsbGFuZHNjYXBlX2xlZnQ6InBvcnRyYWl0In07dmFyIFEyPTM7ZnVuY3Rpb24gejMoJCl7cmV0dXJuICQ+PTAuOTM/Mzp2b2lkIDB9ZnVuY3Rpb24gQzMoJCl7cmV0dXJuICQ9PT0ibGFuZHNjYXBlX2xlZnQifHwkPT09ImxhbmRzY2FwZV9yaWdodCJ9ZnVuY3Rpb24gZzAoJCl7cmV0dXJuISEkJiYoQzMoJC5vcmllbnRhdGlvbil8fCQud2lkdGg+JC5oZWlnaHQpfWZ1bmN0aW9uIFoyKCQpe2lmKCEkfHwkLndpZHRoPD0wfHwkLmhlaWdodDw9MClyZXR1cm4gbnVsbDtsZXQgSj1DMygkLm9yaWVudGF0aW9uKXx8JC53aWR0aD4kLmhlaWdodCxRPUo/TWF0aC5tYXgoJC53aWR0aCwkLmhlaWdodCk6TWF0aC5taW4oJC53aWR0aCwkLmhlaWdodCksWj1KP01hdGgubWluKCQud2lkdGgsJC5oZWlnaHQpOk1hdGgubWF4KCQud2lkdGgsJC5oZWlnaHQpO2lmKFE9PT0kLndpZHRoJiZaPT09JC5oZWlnaHQpcmV0dXJuICQ7cmV0dXJuey4uLiQsd2lkdGg6USxoZWlnaHQ6Wn19ZnVuY3Rpb24gSzIoJCl7bGV0IEo9WjIoJCksUT1OOSgkPy5vcmllbnRhdGlvbiksWj1NYXRoLmFicyhRKT09PTkwLFg9ISEkJiYkLndpZHRoPiQuaGVpZ2h0LFk9UT09PTE4MHx8WiYmIVg7cmV0dXJue2Rpc3BsYXlDb25maWc6Sixyb3RhdGlvbkRlZ3JlZXM6WT9ROjAsbmVlZHNDc3NSb3RhdGlvbjpZLGlucHV0T3JpZW50YXRpb246WT8kPy5vcmllbnRhdGlvbjp2b2lkIDB9fWZ1bmN0aW9uIE45KCQpe3N3aXRjaCgkKXtjYXNlImxhbmRzY2FwZV9sZWZ0IjpyZXR1cm4gOTA7Y2FzZSJsYW5kc2NhcGVfcmlnaHQiOnJldHVybi05MDtjYXNlInBvcnRyYWl0X3Vwc2lkZV9kb3duIjpyZXR1cm4gMTgwO2RlZmF1bHQ6cmV0dXJuIDB9fWZ1bmN0aW9uIFgyKCQsSixRKXtzd2l0Y2goJCl7Y2FzZSJsYW5kc2NhcGVfbGVmdCI6cmV0dXJue3g6USx5OjEtSn07Y2FzZSJsYW5kc2NhcGVfcmlnaHQiOnJldHVybnt4OjEtUSx5Okp9O2Nhc2UicG9ydHJhaXRfdXBzaWRlX2Rvd24iOnJldHVybnt4OjEtSix5OjEtUX07ZGVmYXVsdDpyZXR1cm57eDpKLHk6UX19fWZ1bmN0aW9uIEw5KCQsSixRKXtzd2l0Y2goJCl7Y2FzZSJsYW5kc2NhcGVfbGVmdCI6cmV0dXJue2R4OlEsZHk6LUp9O2Nhc2UibGFuZHNjYXBlX3JpZ2h0IjpyZXR1cm57ZHg6LVEsZHk6Sn07Y2FzZSJwb3J0cmFpdF91cHNpZGVfZG93biI6cmV0dXJue2R4Oi1KLGR5Oi1RfTtkZWZhdWx0OnJldHVybntkeDpKLGR5OlF9fX1mdW5jdGlvbiBVMygkLEope3N3aXRjaCgkKXtjYXNlImxhbmRzY2FwZV9sZWZ0Ijpzd2l0Y2goSil7Y2FzZSAxOnJldHVybiAzO2Nhc2UgNDpyZXR1cm4gMjtjYXNlIDI6cmV0dXJuIDE7Y2FzZSAzOnJldHVybiA0O2RlZmF1bHQ6cmV0dXJuIEp9Y2FzZSJsYW5kc2NhcGVfcmlnaHQiOnN3aXRjaChKKXtjYXNlIDE6cmV0dXJuIDI7Y2FzZSA0OnJldHVybiAzO2Nhc2UgMjpyZXR1cm4gNDtjYXNlIDM6cmV0dXJuIDE7ZGVmYXVsdDpyZXR1cm4gSn1jYXNlInBvcnRyYWl0X3Vwc2lkZV9kb3duIjpzd2l0Y2goSil7Y2FzZSAxOnJldHVybiA0O2Nhc2UgNDpyZXR1cm4gMTtjYXNlIDI6cmV0dXJuIDM7Y2FzZSAzOnJldHVybiAyO2RlZmF1bHQ6cmV0dXJuIEp9ZGVmYXVsdDpyZXR1cm4gSn19dmFyIHo5PTE2O2Z1bmN0aW9uIEQyKCQsSixRKXtpZighTnVtYmVyLmlzRmluaXRlKCQpKXJldHVybiBudWxsO2xldCBaPU51bWJlci5pc0Zpbml0ZShRKSYmUT4wP1E6MSxYPUo9PT0xPyQqMTY6Sj09PTI/JCpaOiQsWT1NYXRoLm1heCgtMjAwLE1hdGgubWluKDIwMCxYKSk7cmV0dXJuIE1hdGguYWJzKFkpPDAuMDE/bnVsbDpZfWZ1bmN0aW9uIEgzKCQsSixRKXtpZighTnVtYmVyLmlzRmluaXRlKCQpKXJldHVybiAwO2xldCBaPU51bWJlci5pc0Zpbml0ZShRKSYmUT4wP1E6MTtpZihKPT09MSlyZXR1cm4gJCp6OTtpZihKPT09MilyZXR1cm4gJCpaO3JldHVybiAkfWZ1bmN0aW9uIEM5KCQsSixRKXtpZighSnx8Si53aWR0aDw9MHx8Si5oZWlnaHQ8PTApcmV0dXJuIG51bGw7bGV0IFo9Si5vcmllbnRhdGlvbj09PXZvaWQgMCYmJD8ub3JpZW50YXRpb24/ey4uLkosb3JpZW50YXRpb246JC5vcmllbnRhdGlvbn06SjtpZigkJiYkLndpZHRoPT09Wi53aWR0aCYmJC5oZWlnaHQ9PT1aLmhlaWdodCYmJC5vcmllbnRhdGlvbj09PVoub3JpZW50YXRpb24pcmV0dXJuIG51bGw7cmV0dXJue2NvbmZpZzpaLG5vdGlmeVBhcmVudDpRIT09ImV4dGVybmFsIn19ZnVuY3Rpb24gVTkoe3N0cmVhbU1vZGU6JCxhdmNjU3VwcG9ydGVkOkosaGFzRXh0ZXJuYWxJbnB1dDpRLGhhc0V4dGVybmFsRnJhbWVzOlp9KXtsZXQgWD0kPT09ImF2Y2MiJiYhSj8ibWpwZWciOiQsWT1YPT09IndlYnJ0YyIscT1YPT09ImF2Y2MiLEc9WD09PSJtanBlZyImJlo7cmV0dXJue2VmZmVjdGl2ZVN0cmVhbU1vZGU6WCx1c2VXZWJSdGM6WSx1c2VBdmNjOnEsZXh0ZXJuYWxJbnB1dDpRLGV4dGVybmFsTWpwZWc6RyxvcGVuRGlyZWN0Q29udHJvbFNvY2tldDohUSxvcGVuRGlyZWN0TWpwZWc6WD09PSJtanBlZyImJiFHfX12YXIgdjc9e1sxXToiZGVzY3JpcHRpb24iLFsyXToia2V5ZnJhbWUiLFszXToiZGVsdGEiLFs0XToic2VlZCJ9O2NsYXNzIEM1e2J1ZmZlcj1uZXcgVWludDhBcnJheSg2NTUzNik7bGVuPTA7c3RhcnQ9MDthcHBlbmQoJCl7aWYodGhpcy5sZW4rJC5sZW5ndGg+dGhpcy5idWZmZXIubGVuZ3RoKXtpZih0aGlzLnN0YXJ0PjApdGhpcy5idWZmZXIuY29weVdpdGhpbigwLHRoaXMuc3RhcnQsdGhpcy5sZW4pLHRoaXMubGVuLT10aGlzLnN0YXJ0LHRoaXMuc3RhcnQ9MDtpZih0aGlzLmxlbiskLmxlbmd0aD50aGlzLmJ1ZmZlci5sZW5ndGgpe2xldCBKPXRoaXMuYnVmZmVyLmxlbmd0aDt3aGlsZShKPHRoaXMubGVuKyQubGVuZ3RoKUoqPTI7bGV0IFE9bmV3IFVpbnQ4QXJyYXkoSik7US5zZXQodGhpcy5idWZmZXIuc3ViYXJyYXkoMCx0aGlzLmxlbikpLHRoaXMuYnVmZmVyPVF9fXRoaXMuYnVmZmVyLnNldCgkLHRoaXMubGVuKSx0aGlzLmxlbis9JC5sZW5ndGh9cHVzaCgkKXtpZigkLmxlbmd0aD4wKXRoaXMuYXBwZW5kKCQpO2xldCBKPVtdLFE9dGhpcy5idWZmZXI7d2hpbGUodGhpcy5sZW4tdGhpcy5zdGFydD49NCl7bGV0IFo9dGhpcy5zdGFydCxYPShRW1pdPDwyNHxRW1orMV08PDE2fFFbWisyXTw8OHxRW1orM10pPj4+MDtpZih0aGlzLmxlbi1aLTQ8WClicmVhaztpZihYPDEpe3RoaXMuc3RhcnQrPTQ7Y29udGludWV9bGV0IFk9UVtaKzRdLHE9djdbWV07aWYocSlKLnB1c2goe3R5cGU6cSxwYXlsb2FkOlEuc2xpY2UoWis1LForNCtYKX0pO3RoaXMuc3RhcnQrPTQrWH1pZih0aGlzLnN0YXJ0PjApe2lmKHRoaXMuc3RhcnQ8dGhpcy5sZW4pdGhpcy5idWZmZXIuY29weVdpdGhpbigwLHRoaXMuc3RhcnQsdGhpcy5sZW4pO3RoaXMubGVuLT10aGlzLnN0YXJ0LHRoaXMuc3RhcnQ9MH1yZXR1cm4gSn1yZXNldCgpe3RoaXMubGVuPTAsdGhpcy5zdGFydD0wfX1mdW5jdGlvbiBBMygkKXtpZigkLmxlbmd0aDw0KXJldHVybiJhdmMxLjQyRTAxRSI7bGV0IEo9KFEpPT5RLnRvU3RyaW5nKDE2KS5wYWRTdGFydCgyLCIwIik7cmV0dXJuImF2YzEuIitKKCRbMV0pK0ooJFsyXSkrSigkWzNdKX1mdW5jdGlvbiBjMCgpe3JldHVybiB0eXBlb2YgZ2xvYmFsVGhpczwidSImJnR5cGVvZiBnbG9iYWxUaGlzLlZpZGVvRGVjb2RlcjwidSJ9dmFyIGo3PTEwMDAsaDc9MTY2Njc7ZnVuY3Rpb24gazMoe3VybDokLGVuYWJsZWQ6SixjYW52YXNSZWY6USxvbkZpcnN0RnJhbWU6WixvbkZyYW1lOlgsb25EZWNvZGVkRnJhbWU6WSxvbkVycm9yOnEsb25EZWNvZGVyRXJyb3I6R30pe2xldCBWPUUoe29uRmlyc3RGcmFtZTpaLG9uRnJhbWU6WCxvbkRlY29kZWRGcmFtZTpZLG9uRXJyb3I6cSxvbkRlY29kZXJFcnJvcjpHfSk7Vi5jdXJyZW50PXtvbkZpcnN0RnJhbWU6WixvbkZyYW1lOlgsb25EZWNvZGVkRnJhbWU6WSxvbkVycm9yOnEsb25EZWNvZGVyRXJyb3I6R30sYigoKT0+e2lmKCFKfHwhJHx8IWMwKCkpcmV0dXJuO2xldCBCPW5ldyBBYm9ydENvbnRyb2xsZXIsTj1uZXcgQzUsej0hMSxMPSExLEM9ITEsQT0wLFU9bnVsbCxIPW51bGwsaz0oKT0+IXomJiFCLnNpZ25hbC5hYm9ydGVkLEY9KGwpPT57aWYoVi5jdXJyZW50Lm9uRGVjb2RlckVycm9yKVYuY3VycmVudC5vbkRlY29kZXJFcnJvcigpO2Vsc2UgVi5jdXJyZW50Lm9uRXJyb3I/LihsKX0sdz0obCxvLFExLE4xKT0+e2lmKCFrKCkpcmV0dXJuO2xldCBjPVEuY3VycmVudDtpZighYylyZXR1cm47aWYoYy53aWR0aCE9PW98fGMuaGVpZ2h0IT09UTEpYy53aWR0aD1vLGMuaGVpZ2h0PVExO2xldCB2PWMuZ2V0Q29udGV4dCgiMmQiKTtpZighdilyZXR1cm47aWYodi5kcmF3SW1hZ2UobCwwLDAsbyxRMSksVi5jdXJyZW50Lm9uRnJhbWU/LigpLE4xJiYhQylDPSEwLFYuY3VycmVudC5vbkRlY29kZWRGcmFtZT8uKCk7aWYoIUwpTD0hMCxWLmN1cnJlbnQub25GaXJzdEZyYW1lPy4oKX0sVD0oKT0+bmV3IFZpZGVvRGVjb2Rlcih7b3V0cHV0OihsKT0+e3RyeXtpZihrKCkpdyhsLGwuZGlzcGxheVdpZHRoLGwuZGlzcGxheUhlaWdodCwhMCl9ZmluYWxseXtsLmNsb3NlKCl9fSxlcnJvcjoobCk9PkYoYGRlY29kZXI6ICR7bC5tZXNzYWdlfWApfSksUz1hc3luYyhsKT0+e2xldCBvPWF3YWl0IGNyZWF0ZUltYWdlQml0bWFwKG5ldyBCbG9iKFtsXSx7dHlwZToiaW1hZ2UvanBlZyJ9KSk7dHJ5e2lmKGsoKSl3KG8sby53aWR0aCxvLmhlaWdodCwhMSl9ZmluYWxseXtvLmNsb3NlKCl9fSx4PShsKT0+e2lmKCFIfHxILnN0YXRlPT09ImNsb3NlZCIpSD1UKCk7dHJ5e0guY29uZmlndXJlKHtjb2RlYzpBMyhsKSxkZXNjcmlwdGlvbjpsLG9wdGltaXplRm9yOiJsYXRlbmN5IixoYXJkd2FyZUFjY2VsZXJhdGlvbjoicHJlZmVyLWhhcmR3YXJlIn0pfWNhdGNoKG8pe0YoYGNvbmZpZzogJHtvLm1lc3NhZ2V9YCl9fSwkMT0obCxvKT0+e2lmKEg/LnN0YXRlIT09ImNvbmZpZ3VyZWQiKXJldHVybjt0cnl7SC5kZWNvZGUobmV3IEVuY29kZWRWaWRlb0NodW5rKHt0eXBlOmw9PT0ia2V5ZnJhbWUiPyJrZXkiOiJkZWx0YSIsdGltZXN0YW1wOkEsZGF0YTpvfSkpLEErPWg3fWNhdGNoe319LGY9KGwsbyk9Pntzd2l0Y2gobCl7Y2FzZSJzZWVkIjpTKG8pLmNhdGNoKCgpPT57fSk7cmV0dXJuO2Nhc2UiZGVzY3JpcHRpb24iOngobyk7cmV0dXJuO2Nhc2Uia2V5ZnJhbWUiOmNhc2UiZGVsdGEiOiQxKGwsbyk7cmV0dXJufX0saT0oKT0+e2lmKCFrKCl8fFUpcmV0dXJuO1U9c2V0VGltZW91dCgoKT0+e1U9bnVsbCxyKCl9LGo3KX0scj1hc3luYygpPT57Ti5yZXNldCgpO3RyeXtsZXQgbz0oYXdhaXQgZmV0Y2goYCR7JH0vc3RyZWFtLmF2Y2NgLHtzaWduYWw6Qi5zaWduYWx9KSkuYm9keT8uZ2V0UmVhZGVyKCk7aWYoIW8pcmV0dXJuO2Zvcig7Oyl7bGV0e2RvbmU6UTEsdmFsdWU6TjF9PWF3YWl0IG8ucmVhZCgpO2lmKFExKWJyZWFrO2lmKCFOMSljb250aW51ZTtmb3IobGV0IGMgb2YgTi5wdXNoKE4xKSlmKGMudHlwZSxjLnBheWxvYWQpfX1jYXRjaHt9ZmluYWxseXtpZihrKCkpaSgpfX07cmV0dXJuIHIoKSwoKT0+e2lmKHo9ITAsVSljbGVhclRpbWVvdXQoVSk7aWYoQi5hYm9ydCgpLE4ucmVzZXQoKSxIJiZILnN0YXRlIT09ImNsb3NlZCIpdHJ5e0guY2xvc2UoKX1jYXRjaHt9SD1udWxsfX0sWyQsSixRXSl9ZnVuY3Rpb24gSDkoJCxKKXtsZXQgUT0wLFo9MCxYPSgpPT57bGV0e3ZpZGVvV2lkdGg6WSx2aWRlb0hlaWdodDpxfT0kO2lmKFk8PTB8fHE8PTB8fFk9PT1RJiZxPT09WilyZXR1cm47UT1ZLFo9cSxKKHt3aWR0aDpZLGhlaWdodDpxfSl9O3JldHVybiAkLmFkZEV2ZW50TGlzdGVuZXIoImxvYWRlZG1ldGFkYXRhIixYKSwkLmFkZEV2ZW50TGlzdGVuZXIoInJlc2l6ZSIsWCksWCgpLHtjaGVjazpYLGRpc2Nvbm5lY3QoKXskLnJlbW92ZUV2ZW50TGlzdGVuZXIoImxvYWRlZG1ldGFkYXRhIixYKSwkLnJlbW92ZUV2ZW50TGlzdGVuZXIoInJlc2l6ZSIsWCl9fX12YXIgUjc9MDtmdW5jdGlvbiBLKCQsSixRLFosWCxZKXtKfHwoSj17fSk7dmFyIHEsRyxWPUo7aWYoInJlZiJpbiBWKWZvcihHIGluIFY9e30sSilHPT0icmVmIj9xPUpbR106VltHXT1KW0ddO3ZhciBCPXt0eXBlOiQscHJvcHM6VixrZXk6USxyZWY6cSxfX2s6bnVsbCxfXzpudWxsLF9fYjowLF9fZTpudWxsLF9fYzpudWxsLGNvbnN0cnVjdG9yOnZvaWQgMCxfX3Y6LS1SNyxfX2k6LTEsX191OjAsX19zb3VyY2U6WCxfX3NlbGY6WX07aWYodHlwZW9mICQ9PSJmdW5jdGlvbiImJihxPSQuZGVmYXVsdFByb3BzKSlmb3IoRyBpbiBxKVZbR109PT12b2lkIDAmJihWW0ddPXFbR10pO3JldHVybiBzLnZub2RlJiZzLnZub2RlKEIpLEJ9dmFyIEE5PWB1cmwoImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMjQnIGhlaWdodD0nMjQnJTNFJTNDY2lyY2xlIGN4PScxMicgY3k9JzEyJyByPSc5JyBmaWxsPSdyZ2JhKDI1NSwyNTUsMjU1LDAuNDUpJyBzdHJva2U9J3JnYmEoMCwwLDAsMC41NSknIHN0cm9rZS13aWR0aD0nMS4yNScgZmlsdGVyPSdkcm9wLXNoYWRvdygwIDFweCAycHggcmdiYSgwLDAsMCwwLjQ1KSknLyUzRSUzQy9zdmclM0UiKSAxMiAxMiwgcG9pbnRlcmAsZzc9MS4wMDQsbTc9MyxmNz00LHA3PTUsdTc9MTAsbDc9MTE7ZnVuY3Rpb24gVTUoe3VybDokLHdzVXJsOkosc3R5bGU6USxpbWFnZVN0eWxlOlosY2xhc3NOYW1lOlgsb25Ib21lUHJlc3M6WSxvblN0cmVhbVRvdWNoOnEsb25TdHJlYW1NdWx0aVRvdWNoOkcsb25TdHJlYW1CdXR0b246VixvblN0cmVhbURpZ2l0YWxDcm93bjpCLG9uU3RyZWFtU2Nyb2xsOk4sZW5hYmxlRGlnaXRhbENyb3duOnosc3Vic2NyaWJlRnJhbWU6TCxzdHJlYW1GcmFtZTpDLHN0cmVhbUNvbmZpZzpBLG9uU2NyZWVuQ29uZmlnQ2hhbmdlOlUsaGlkZUNvbnRyb2xzOkgsb25TdHJlYW1pbmdDaGFuZ2U6ayxjb25uZWN0aW9uUXVhbGl0eTpGLHN0cmVhbU1vZGU6dz0iYXZjYyIsd2ViUnRjU3RyZWFtOlQsb25XZWJSdGNGcmFtZTpTLHN0cmVhbUVycm9yOngsb25BdmNjRXJyb3I6JDEsb25BdmNjRGVjb2RlZEZyYW1lOmZ9KXtsZXR7dXNlV2ViUnRjOmksdXNlQXZjYzpyLGV4dGVybmFsSW5wdXQ6bCxleHRlcm5hbE1qcGVnOm8sb3BlbkRpcmVjdENvbnRyb2xTb2NrZXQ6UTEsb3BlbkRpcmVjdE1qcGVnOk4xfT1VOSh7c3RyZWFtTW9kZTp3LGF2Y2NTdXBwb3J0ZWQ6YzAoKSxoYXNFeHRlcm5hbElucHV0OiEhcSxoYXNFeHRlcm5hbEZyYW1lczohIUx9KSxjPUUobnVsbCksdj1FKG51bGwpLG49RShudWxsKSxYMT1FKG51bGwpLEwxPUUobnVsbCksSjE9RShudWxsKSxZMT1FKG51bGwpLFtIMSx5XT1XKCExKSxbZyxQXT1XKG51bGwpLFtwLHVdPVcobnVsbCksaj1FKG51bGwpLEcxPUUoITEpLHoxPUUoVSk7ejEuY3VycmVudD1VO2xldCBNMT1FKG51bGwpLFtXMSxpMV09VyhudWxsKTtiKCgpPT57bGV0IE09TTEuY3VycmVudDtpZighTXx8dHlwZW9mIFJlc2l6ZU9ic2VydmVyPiJ1IilyZXR1cm47bGV0IE89bmV3IFJlc2l6ZU9ic2VydmVyKChJKT0+e2xldCBoPUlbMF0/LmNvbnRlbnRSZWN0O2lmKGgpaTEoe3dpZHRoOmgud2lkdGgsaGVpZ2h0OmguaGVpZ2h0fSl9KTtyZXR1cm4gTy5vYnNlcnZlKE0pLCgpPT5PLmRpc2Nvbm5lY3QoKX0sW10pO2xldFtGMSx2MV09VygwKSxQMT1FKDApLFt1MSxDMV09VyghMSksdzE9RCgoTSxPPSJyZXBvcnRlZCIpPT57aWYoTz09PSJtZWRpYSImJkcxLmN1cnJlbnQpcmV0dXJuO2lmKE8hPT0ibWVkaWEiJiZNJiZNLndpZHRoPjAmJk0uaGVpZ2h0PjApRzEuY3VycmVudD0hMDtsZXQgST1DOShqLmN1cnJlbnQsTSxPKTtpZighSSlyZXR1cm47aWYoai5jdXJyZW50PUkuY29uZmlnLHUoSS5jb25maWcpLEkubm90aWZ5UGFyZW50KXoxLmN1cnJlbnQ/LihJLmNvbmZpZyl9LFtdKTtiKCgpPT57aWYoIWkpcmV0dXJuO2lmKHgpeSghMSksUCh4KTtlbHNlIFAobnVsbCl9LFt4LGldKTtsZXQgbDE9RShudWxsKTtiKCgpPT57aWYoRj09PSJwb29yIil7aWYoQzEoITApLGwxLmN1cnJlbnQpY2xlYXJUaW1lb3V0KGwxLmN1cnJlbnQpO2wxLmN1cnJlbnQ9c2V0VGltZW91dCgoKT0+e0MxKCExKSxsMS5jdXJyZW50PW51bGx9LDMwMDApfWVsc2UgaWYoQzEoITEpLGwxLmN1cnJlbnQpY2xlYXJUaW1lb3V0KGwxLmN1cnJlbnQpLGwxLmN1cnJlbnQ9bnVsbDtyZXR1cm4oKT0+e2lmKGwxLmN1cnJlbnQpY2xlYXJUaW1lb3V0KGwxLmN1cnJlbnQpfX0sW0ZdKTtsZXQgdDE9YCR7JH0vc3RyZWFtLm1qcGVnYDtiKCgpPT57aWYoIWkpcmV0dXJuO2xldCBNPW4uY3VycmVudDtpZighTSlyZXR1cm47bGV0IE89ITEsST0hMSxoPTAsdD1udWxsLHExPSgpPT57aWYoSXx8TylyZXR1cm47dD8uY2hlY2soKSxPPSEwLFM/LigpLHkoITApLFAobnVsbCl9LFUxPSgpPT57aWYoSSlyZXR1cm47dD8uY2hlY2soKSxuMS5jdXJyZW50PURhdGUubm93KCksUDEuY3VycmVudCsrLHExKCkseSghMCksaD1NLnJlcXVlc3RWaWRlb0ZyYW1lQ2FsbGJhY2soVTEpfSxfMT0oKT0+e2lmKEkpcmV0dXJuO3Q/LmNoZWNrKCksbjEuY3VycmVudD1EYXRlLm5vdygpLHExKCkseSghMCl9O2lmKE0uc3JjT2JqZWN0PVQ/P251bGwsVCl7aWYodD1IOShNLChqMCk9Pnt3MShqMCwibWVkaWEiKX0pLHkoITEpLE0uYWRkRXZlbnRMaXN0ZW5lcigibG9hZGVkZGF0YSIscTEse29uY2U6ITB9KSx0eXBlb2YgTS5yZXF1ZXN0VmlkZW9GcmFtZUNhbGxiYWNrPT09ImZ1bmN0aW9uIiloPU0ucmVxdWVzdFZpZGVvRnJhbWVDYWxsYmFjayhVMSk7ZWxzZSBNLmFkZEV2ZW50TGlzdGVuZXIoInRpbWV1cGRhdGUiLF8xKTtNLnBsYXkoKS5jYXRjaCgoKT0+e30pfWVsc2UgeSghMSk7cmV0dXJuKCk9PntpZihJPSEwLE0ucmVtb3ZlRXZlbnRMaXN0ZW5lcigibG9hZGVkZGF0YSIscTEpLE0ucmVtb3ZlRXZlbnRMaXN0ZW5lcigidGltZXVwZGF0ZSIsXzEpLHQ/LmRpc2Nvbm5lY3QoKSxoJiZ0eXBlb2YgTS5jYW5jZWxWaWRlb0ZyYW1lQ2FsbGJhY2s9PT0iZnVuY3Rpb24iKU0uY2FuY2VsVmlkZW9GcmFtZUNhbGxiYWNrKGgpO00uc3JjT2JqZWN0PW51bGx9fSxbaSxULFMsdzFdKSxiKCgpPT57RzEuY3VycmVudD0hMSxqLmN1cnJlbnQ9bnVsbCx1KG51bGwpfSxbJCxKXSk7bGV0IFIxPUUoayk7UjEuY3VycmVudD1rLGIoKCk9PntSMS5jdXJyZW50Py4oSDEpfSxbSDFdKSxiKCgpPT57aWYoQSl3MShBLCJleHRlcm5hbCIpfSxbQSx3MSwkXSk7bGV0IGExPUUoITEpO2ExLmN1cnJlbnQ9SDE7bGV0IGUxPUUobnVsbCksVjA9RShudWxsKTtiKCgpPT57aWYoIW98fCFMKXJldHVybjtsZXQgTz1zZXRUaW1lb3V0KCgpPT57aWYoIWExLmN1cnJlbnQpUCgiU3RyZWFtIGlzIG5vdCBwcm9kdWNpbmcgZnJhbWVzLiBUaGUgc2ltdWxhdG9yIG1heSBoYXZlIHN0b3BwZWQg4oCUIHRyeSByZWNvbm5lY3RpbmcuIil9LDYwMDApLEk9cmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZ1bmN0aW9uIHQoKXtsZXQgcTE9ZTEuY3VycmVudDtpZihxMSl7ZTEuY3VycmVudD1udWxsO2xldCBVMT1YMS5jdXJyZW50O2lmKFUxKXtpZihWMC5jdXJyZW50KVVSTC5yZXZva2VPYmplY3RVUkwoVjAuY3VycmVudCk7VjAuY3VycmVudD1xMSxVMS5zcmM9cTEsUDEuY3VycmVudCsrfWVsc2UgVVJMLnJldm9rZU9iamVjdFVSTChxMSl9ST1yZXF1ZXN0QW5pbWF0aW9uRnJhbWUodCl9KSxoPUwoKHQpPT57aWYobjEuY3VycmVudD1EYXRlLm5vdygpLGUxLmN1cnJlbnQpVVJMLnJldm9rZU9iamVjdFVSTChlMS5jdXJyZW50KTtpZihlMS5jdXJyZW50PXQsIWExLmN1cnJlbnQpY2xlYXJUaW1lb3V0KE8pLHkoITApLFAobnVsbCl9KTtyZXR1cm4oKT0+e2lmKGNsZWFyVGltZW91dChPKSxjYW5jZWxBbmltYXRpb25GcmFtZShJKSxoPy4oKSxlMS5jdXJyZW50KVVSTC5yZXZva2VPYmplY3RVUkwoZTEuY3VycmVudCksZTEuY3VycmVudD1udWxsO2lmKFYwLmN1cnJlbnQpVVJMLnJldm9rZU9iamVjdFVSTChWMC5jdXJyZW50KSxWMC5jdXJyZW50PW51bGx9fSxbbyxMXSk7bGV0IHMxPUQoKCk9PntuMS5jdXJyZW50PURhdGUubm93KCkseSghMCksUChudWxsKX0sW10pLHYwPUQoKCk9PntpZihQMS5jdXJyZW50KyssbjEuY3VycmVudD1EYXRlLm5vdygpLCFhMS5jdXJyZW50KXkoITApLFAobnVsbCl9LFtdKTtrMyh7dXJsOiQsZW5hYmxlZDpyLGNhbnZhc1JlZjp2LG9uRmlyc3RGcmFtZTpzMSxvbkZyYW1lOnYwLG9uRGVjb2RlZEZyYW1lOmYsb25FcnJvcjpQLG9uRGVjb2RlckVycm9yOiQxfSk7bGV0IG0xPUQoKE0pPT57bGV0IE89SzIoai5jdXJyZW50KS5pbnB1dE9yaWVudGF0aW9uLEk9WDIoTyxNLngsTS55KSxoPU0uZWRnZT09PXZvaWQgMD92b2lkIDA6VTMoTyxNLmVkZ2UpLHQ9aD09PXZvaWQgMD97dHlwZTpNLnR5cGUsLi4uSX06e3R5cGU6TS50eXBlLC4uLkksZWRnZTpofTtpZihsKXtxPy4odCk7cmV0dXJufWxldCBxMT1ZMS5jdXJyZW50O2lmKCFxMXx8cTEucmVhZHlTdGF0ZSE9PVdlYlNvY2tldC5PUEVOKXJldHVybjtsZXQgVTE9bmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKEpTT04uc3RyaW5naWZ5KHQpKSxfMT1uZXcgVWludDhBcnJheSgxK1UxLmxlbmd0aCk7XzFbMF09bTcsXzEuc2V0KFUxLDEpLHExLnNlbmQoXzEpfSxbbCxxXSkscTA9RCgoTSk9PntpZihsKXtWPy4oTSk7cmV0dXJufWxldCBPPVkxLmN1cnJlbnQ7aWYoIU98fE8ucmVhZHlTdGF0ZSE9PVdlYlNvY2tldC5PUEVOKXJldHVybjtsZXQgST1uZXcgVGV4dEVuY29kZXIoKS5lbmNvZGUoSlNPTi5zdHJpbmdpZnkoe2J1dHRvbjpNfSkpLGg9bmV3IFVpbnQ4QXJyYXkoMStJLmxlbmd0aCk7aFswXT1mNyxoLnNldChJLDEpLE8uc2VuZChoKX0sW2wsVl0pLCQwPUQoKE0pPT57aWYoIU51bWJlci5pc0Zpbml0ZShNKXx8TT09PTApcmV0dXJuO2lmKGwpe0I/LihNKTtyZXR1cm59bGV0IE89WTEuY3VycmVudDtpZighT3x8Ty5yZWFkeVN0YXRlIT09V2ViU29ja2V0Lk9QRU4pcmV0dXJuO2xldCBJPW5ldyBUZXh0RW5jb2RlcigpLmVuY29kZShKU09OLnN0cmluZ2lmeSh7ZGVsdGE6TX0pKSxoPW5ldyBVaW50OEFycmF5KDErSS5sZW5ndGgpO2hbMF09dTcsaC5zZXQoSSwxKSxPLnNlbmQoaCl9LFtsLEJdKSxQMD1EKChNLE8sSSxoKT0+e2lmKCFOdW1iZXIuaXNGaW5pdGUoTSl8fCFOdW1iZXIuaXNGaW5pdGUoTyl8fE09PT0wJiZPPT09MClyZXR1cm47bGV0IHQ9SzIoai5jdXJyZW50KS5pbnB1dE9yaWVudGF0aW9uLHExPUw5KHQsTSxPKSxVMT1YMih0LEksaCksXzE9e2R4OnExLmR4LGR5OnExLmR5LHg6VTEueCx5OlUxLnl9O2lmKGwpe04/LihfMSk7cmV0dXJufWxldCBNMD1ZMS5jdXJyZW50O2lmKCFNMHx8TTAucmVhZHlTdGF0ZSE9PVdlYlNvY2tldC5PUEVOKXJldHVybjtsZXQgajA9bmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKEpTT04uc3RyaW5naWZ5KF8xKSksdTA9bmV3IFVpbnQ4QXJyYXkoMStqMC5sZW5ndGgpO3UwWzBdPWw3LHUwLnNldChqMCwxKSxNMC5zZW5kKHUwKX0sW2wsTl0pLGQxPUQoKE0pPT57bGV0IE89SzIoai5jdXJyZW50KS5pbnB1dE9yaWVudGF0aW9uLEk9WDIoTyxNLngxLE0ueTEpLGg9WDIoTyxNLngyLE0ueTIpLHQ9e3R5cGU6TS50eXBlLHgxOkkueCx5MTpJLnkseDI6aC54LHkyOmgueX07aWYobCl7Rz8uKHQpO3JldHVybn1sZXQgcTE9WTEuY3VycmVudDtpZighcTF8fHExLnJlYWR5U3RhdGUhPT1XZWJTb2NrZXQuT1BFTilyZXR1cm47bGV0IFUxPW5ldyBUZXh0RW5jb2RlcigpLmVuY29kZShKU09OLnN0cmluZ2lmeSh0KSksXzE9bmV3IFVpbnQ4QXJyYXkoMStVMS5sZW5ndGgpO18xWzBdPXA3LF8xLnNldChVMSwxKSxxMS5zZW5kKF8xKX0sW2wsR10pO2IoKCk9PntpZighUTEmJiFOMSYmIXIpcmV0dXJuO2xldCBNPW51bGw7aWYoUTEpe2xldCBxMT1KPz8kLnJlcGxhY2UoL15odHRwLywid3MiKSsiL3dzIjtNPW5ldyBXZWJTb2NrZXQocTEpLE0uYmluYXJ5VHlwZT0iYXJyYXlidWZmZXIiLFkxLmN1cnJlbnQ9TSxNLm9ubWVzc2FnZT0oVTEpPT57aWYoIShVMS5kYXRhIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpKXJldHVybjtsZXQgXzE9bmV3IFVpbnQ4QXJyYXkoVTEuZGF0YSk7aWYoXzEubGVuZ3RoPDF8fF8xWzBdIT09MTMwKXJldHVybjt0cnl7dzEoSlNPTi5wYXJzZShuZXcgVGV4dERlY29kZXIoKS5kZWNvZGUoXzEuc3ViYXJyYXkoMSkpKSl9Y2F0Y2h7fX0sTS5vbm9wZW49KCk9PlAobnVsbCksTS5vbmNsb3NlPSgpPT55KCExKSxNLm9uZXJyb3I9KCk9PntQKCJXZWJTb2NrZXQgY29ubmVjdGlvbiBmYWlsZWQiKSx5KCExKX19bGV0IE89cnx8TjE/c2V0SW50ZXJ2YWwoKCk9Pnt2MShQMS5jdXJyZW50KSxQMS5jdXJyZW50PTB9LDEwMDApOm51bGwsST1OMT9uZXcgQWJvcnRDb250cm9sbGVyOm51bGwsaD0hMSx0PU4xP3NldFRpbWVvdXQoKCk9PntpZighaClQKCJTdHJlYW0gaXMgbm90IHByb2R1Y2luZyBmcmFtZXMuIFRoZSBzaW11bGF0b3IgbWF5IGhhdmUgc3RvcHBlZCDigJQgdHJ5IHJlY29ubmVjdGluZy4iKX0sNjAwMCk6bnVsbDtpZihOMSYmSSkoYXN5bmMoKT0+e3RyeXtsZXQgVTE9KGF3YWl0IGZldGNoKHQxLHtzaWduYWw6SS5zaWduYWx9KSkuYm9keT8uZ2V0UmVhZGVyKCk7aWYoIVUxKXJldHVybjtsZXQgXzE9bmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKCItLWZyYW1lIik7d2hpbGUoITApe2xldHtkb25lOk0wLHZhbHVlOmowfT1hd2FpdCBVMS5yZWFkKCk7aWYoTTApYnJlYWs7aWYoajApZm9yKGxldCB1MD0wO3UwPD1qMC5sZW5ndGgtXzEubGVuZ3RoO3UwKyspe2xldCBYOD0hMDtmb3IobGV0IEo1PTA7SjU8XzEubGVuZ3RoO0o1KyspaWYoajBbdTArSjVdIT09XzFbSjVdKXtYOD0hMTticmVha31pZihYOCl7aWYoUDEuY3VycmVudCsrLCFoKXtpZihoPSEwLHQpY2xlYXJUaW1lb3V0KHQpO3koITApLFAobnVsbCl9fX19fWNhdGNoe319KSgpO3JldHVybigpPT57aWYoST8uYWJvcnQoKSxPKWNsZWFySW50ZXJ2YWwoTyk7aWYodCljbGVhclRpbWVvdXQodCk7aWYoTT8uY2xvc2UoKSxZMS5jdXJyZW50PT09TSlZMS5jdXJyZW50PW51bGx9fSxbUTEsTjEsdDEsdzEsJCxyLEpdKSxiKCgpPT57aWYoIWkpcmV0dXJuO2xldCBNPXNldEludGVydmFsKCgpPT57djEoUDEuY3VycmVudCksUDEuY3VycmVudD0wO2xldCBPPW4xLmN1cnJlbnQ7aWYoIWRvY3VtZW50LmhpZGRlbiYmTyYmRGF0ZS5ub3coKS1PPjMwMDApeSghMSl9LDEwMDApO3JldHVybigpPT5jbGVhckludGVydmFsKE0pfSxbaV0pO2xldCBuMT1FKDApO2IoKCk9PntpZighbylyZXR1cm47bGV0IE09MjAwMCxPPSgpPT57bGV0IHQ9bjEuY3VycmVudDtpZighdHx8IWExLmN1cnJlbnQpcmV0dXJuO2lmKERhdGUubm93KCktdD5NKXkoITEpfSxJPXNldEludGVydmFsKCgpPT57djEoUDEuY3VycmVudCksUDEuY3VycmVudD0wLE8oKX0sMTAwMCksaD0oKT0+e2lmKCFkb2N1bWVudC5oaWRkZW4pTygpfTtyZXR1cm4gZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigidmlzaWJpbGl0eWNoYW5nZSIsaCksKCk9PntjbGVhckludGVydmFsKEkpLGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInZpc2liaWxpdHljaGFuZ2UiLGgpfX0sW29dKTtsZXQgXzA9RCgoKT0+e2lmKGkpcmV0dXJuIG4uY3VycmVudDtpZihyKXJldHVybiB2LmN1cnJlbnQ7cmV0dXJuIG8/WDEuY3VycmVudDpjLmN1cnJlbnR9LFtvLHIsaV0pLGoxPUQoKCk9PntyZXR1cm4gTDEuY3VycmVudD8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk/P18wKCk/LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpPz9udWxsfSxbXzBdKSxIMD1EKChNLE8pPT57bGV0IEk9ajEoKTtpZighSSlyZXR1cm47bGV0IGg9KE8uY2xpZW50WC1JLmxlZnQpL0kud2lkdGgsdD0oTy5jbGllbnRZLUkudG9wKS9JLmhlaWdodDttMSh7dHlwZTpNLHg6aCx5OnR9KX0sW2oxLG0xXSksQjA9RCgoTSxPKT0+e2xldCBoPWoxKCk/LmhlaWdodHx8MSx0PUQyKE0sTyxoKTtpZih0PT09bnVsbClyZXR1cm4hMTtyZXR1cm4gJDAodCksITB9LFtqMSwkMF0pLEQxPUUoITEpLHkxPUUoITEpLEowPUUoITEpLEEwPUUoe2R4OjAsZHk6MH0pLE4wPUUoITEpLFtrMCxLMV09VyghMSksXz1FKHt4OjAuNSx5OjAuNX0pLFtkLGFdPVcobnVsbCk7YigoKT0+e2xldCBNPShJKT0+e2lmKEkua2V5PT09IkFsdCIpSzEoITApfSxPPShJKT0+e2lmKEkua2V5PT09IkFsdCIpe2lmKEsxKCExKSwheTEuY3VycmVudClhKG51bGwpfX07cmV0dXJuIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIixNKSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigia2V5dXAiLE8pLCgpPT57d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoImtleWRvd24iLE0pLHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJrZXl1cCIsTyl9fSxbXSksYigoKT0+e2lmKGswJiYheTEuY3VycmVudCl7bGV0IE09Xy5jdXJyZW50O2Eoe3gxOk0ueCx5MTpNLnkseDI6MS1NLngseTI6MS1NLnl9KX1lbHNlIGlmKCFrMCYmIXkxLmN1cnJlbnQpYShudWxsKX0sW2swXSk7bGV0IGsxPUUobnVsbCksVjE9RSghMSksQjE9RSgwKSxnMT1EKChNLE8pPT57VjEuY3VycmVudD0hMDtsZXQgST1rMS5jdXJyZW50O2lmKEkpY2FuY2VsQW5pbWF0aW9uRnJhbWUoQjEuY3VycmVudCksQjEuY3VycmVudD1yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9PntJLnN0eWxlLmxlZnQ9YCR7TSoxMDB9JWAsSS5zdHlsZS50b3A9YCR7TyoxMDB9JWAsSS5zdHlsZS5kaXNwbGF5PSJibG9jayJ9KX0sW10pLGYxPUQoKE0sTyk9PntpZighVjEuY3VycmVudClyZXR1cm47bGV0IEk9azEuY3VycmVudDtpZihJKWNhbmNlbEFuaW1hdGlvbkZyYW1lKEIxLmN1cnJlbnQpLEIxLmN1cnJlbnQ9cmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT57SS5zdHlsZS5sZWZ0PWAke00qMTAwfSVgLEkuc3R5bGUudG9wPWAke08qMTAwfSVgfSl9LFtdKSx4MT1EKCgpPT57VjEuY3VycmVudD0hMTtsZXQgTT1rMS5jdXJyZW50O2lmKE0pY2FuY2VsQW5pbWF0aW9uRnJhbWUoQjEuY3VycmVudCksTS5zdHlsZS5kaXNwbGF5PSJub25lIn0sW10pLE8wPUQoKE0pPT57aWYoVjEuY3VycmVudHx8eTEuY3VycmVudClyZXR1cm4hMTtsZXQgTz1qMSgpO2lmKCFPKXJldHVybiExO2xldCBJPUgzKE0uZGVsdGFYLE0uZGVsdGFNb2RlLE8ud2lkdGgpLGg9SDMoTS5kZWx0YVksTS5kZWx0YU1vZGUsTy5oZWlnaHQpO2lmKEk9PT0wJiZoPT09MClyZXR1cm4hMTtsZXQgdD1NYXRoLm1pbihNYXRoLm1heCgoTS5jbGllbnRYLU8ubGVmdCkvTy53aWR0aCwwKSwxKSxxMT1NYXRoLm1pbihNYXRoLm1heCgoTS5jbGllbnRZLU8udG9wKS9PLmhlaWdodCwwKSwxKTtyZXR1cm4gUDAoSS9PLndpZHRoLGgvTy5oZWlnaHQsdCxxMSksITB9LFtqMSxQMF0pO2IoKCk9PntsZXQgTT1KMS5jdXJyZW50O2lmKCFNKXJldHVybjtsZXQgTz0oSSk9PntpZighKHo/QjAoSS5kZWx0YVksSS5kZWx0YU1vZGUpOk8wKEkpKSlyZXR1cm47SS5wcmV2ZW50RGVmYXVsdCgpLEkuc3RvcFByb3BhZ2F0aW9uKCl9O3JldHVybiBNLmFkZEV2ZW50TGlzdGVuZXIoIndoZWVsIixPLHtwYXNzaXZlOiExfSksKCk9Pk0ucmVtb3ZlRXZlbnRMaXN0ZW5lcigid2hlZWwiLE8pfSxbeixCMCxPMF0pO2xldCBRMD1FKDApLFQxPUUobnVsbCksTDA9RCgoKT0+e2xldCBNPURhdGUubm93KCksTz1NLVEwLmN1cnJlbnQ7aWYoUTAuY3VycmVudD1NLE88MzAwKXtpZihUMS5jdXJyZW50KWNsZWFyVGltZW91dChUMS5jdXJyZW50KSxUMS5jdXJyZW50PW51bGw7aWYoWSlZKCk7ZWxzZSBxMCgiYXBwX3N3aXRjaGVyIil9ZWxzZSBUMS5jdXJyZW50PXNldFRpbWVvdXQoKCk9PntpZihZKVkoKTtlbHNlIHEwKCJob21lIik7VDEuY3VycmVudD1udWxsfSwzMDApfSxbcTAsWV0pLEQwPUsyKHApLGIwPUQwLmRpc3BsYXlDb25maWcsRjA9KCgpPT57aWYoIWIwfHwhVzEpcmV0dXJuIG51bGw7aWYoVzEud2lkdGg9PT0wfHxXMS5oZWlnaHQ9PT0wKXJldHVybiBudWxsO2xldCBNPU1hdGgubWluKFcxLndpZHRoL2IwLndpZHRoLFcxLmhlaWdodC9iMC5oZWlnaHQpO3JldHVybnt3aWR0aDpiMC53aWR0aCpNLGhlaWdodDpiMC5oZWlnaHQqTX19KSgpLEEyPUQwLnJvdGF0aW9uRGVncmVlcyxlMj1EMC5uZWVkc0Nzc1JvdGF0aW9uJiZNYXRoLmFicyhBMik9PT05MCwkNT1aLFI9e3Bvc2l0aW9uOiJhYnNvbHV0ZSIsdG9wOiI1MCUiLGxlZnQ6IjUwJSIsd2lkdGg6ZTImJkYwP2Ake0YwLmhlaWdodH1weGA6IjEwMCUiLGhlaWdodDplMiYmRjA/YCR7RjAud2lkdGh9cHhgOiIxMDAlIix0cmFuc2Zvcm06YHRyYW5zbGF0ZSgtNTAlLCAtNTAlKSR7QTI9PT0wPyIiOmAgcm90YXRlKCR7QTJ9ZGVnKWB9YCx0cmFuc2Zvcm1PcmlnaW46ImNlbnRlciBjZW50ZXIiLGN1cnNvcjpBOSxkaXNwbGF5OiJibG9jayIsdXNlclNlbGVjdDoibm9uZSIsV2Via2l0VXNlclNlbGVjdDoibm9uZSIsdG91Y2hBY3Rpb246Im5vbmUiLC4uLlosLi4uQTI9PT0wP3t9Ontib3JkZXJSYWRpdXM6MCxjb3JuZXJTaGFwZTp2b2lkIDB9fSxlPXsuLi5SLHRyYW5zZm9ybTpgJHtSLnRyYW5zZm9ybT8/IiJ9IHNjYWxlKCR7Zzd9KWB9O3JldHVybiBLKCJkaXYiLHtzdHlsZTp7ZGlzcGxheToiZmxleCIsZmxleERpcmVjdGlvbjoiY29sdW1uIixmbGV4OjEsLi4uSD97fTp7Ym9yZGVyOiIxcHggc29saWQgcmdiYSgyNTUsMjU1LDI1NSwwLjEyKSJ9LG92ZXJmbG93OiJoaWRkZW4iLG1pbldpZHRoOjAsbWluSGVpZ2h0OjAsLi4uUX0sY2xhc3NOYW1lOlgsY2hpbGRyZW46W0soImRpdiIse3JlZjpNMSxzdHlsZTp7cG9zaXRpb246InJlbGF0aXZlIixmbGV4OjEsbWluSGVpZ2h0OjAsbWluV2lkdGg6MCxkaXNwbGF5OiJmbGV4IixhbGlnbkl0ZW1zOiJjZW50ZXIiLGp1c3RpZnlDb250ZW50OiJjZW50ZXIifSxjaGlsZHJlbjpLKCJkaXYiLHtyZWY6TDEsc3R5bGU6e3Bvc2l0aW9uOiJyZWxhdGl2ZSIsd2lkdGg6RjA/YCR7RjAud2lkdGh9cHhgOiIxMDAlIixoZWlnaHQ6RjA/YCR7RjAuaGVpZ2h0fXB4YDoiMTAwJSIsb3ZlcmZsb3c6ImhpZGRlbiIsYm9yZGVyUmFkaXVzOiQ1Py5ib3JkZXJSYWRpdXMsY29ybmVyU2hhcGU6JDU/LmNvcm5lclNoYXBlfSxjaGlsZHJlbjpbaT9LKCJ2aWRlbyIse3JlZjpuLG11dGVkOiEwLHBsYXlzSW5saW5lOiEwLGF1dG9QbGF5OiEwLHN0eWxlOlJ9KTpyP0soImNhbnZhcyIse3JlZjp2LHN0eWxlOmV9KTpLKCJpbWciLHtyZWY6YyxzcmM6bz92b2lkIDA6dDEsZHJhZ2dhYmxlOiExLG9uTG9hZDooTSk9PntsZXQgTz1NLmN1cnJlbnRUYXJnZXQ7aWYoTy5uYXR1cmFsV2lkdGg+MCYmTy5uYXR1cmFsSGVpZ2h0PjApdzEoe3dpZHRoOk8ubmF0dXJhbFdpZHRoLGhlaWdodDpPLm5hdHVyYWxIZWlnaHR9LCJtZWRpYSIpfSxzdHlsZTpvP3tkaXNwbGF5OiJub25lIn06Un0pLG8mJksoImltZyIse3JlZjpYMSxkcmFnZ2FibGU6ITEsb25Mb2FkOihNKT0+e2xldCBPPU0uY3VycmVudFRhcmdldDtpZihPLm5hdHVyYWxXaWR0aD4wJiZPLm5hdHVyYWxIZWlnaHQ+MCl3MSh7d2lkdGg6Ty5uYXR1cmFsV2lkdGgsaGVpZ2h0Ok8ubmF0dXJhbEhlaWdodH0sIm1lZGlhIil9LHN0eWxlOlJ9KSxLKCJkaXYiLHtyZWY6SjEsc3R5bGU6e3Bvc2l0aW9uOiJhYnNvbHV0ZSIsaW5zZXQ6MCxjdXJzb3I6QTksdG91Y2hBY3Rpb246Im5vbmUifSxvbk1vdXNlRG93bjooTSk9PntNLnByZXZlbnREZWZhdWx0KCk7bGV0IE89ajEoKTtpZighTylyZXR1cm47bGV0IEk9KE0uY2xpZW50WC1PLmxlZnQpL08ud2lkdGgsaD0oTS5jbGllbnRZLU8udG9wKS9PLmhlaWdodDtpZihNLmFsdEtleSl7eTEuY3VycmVudD0hMCxKMC5jdXJyZW50PU0uc2hpZnRLZXk7bGV0IHExPXt4MTpJLHkxOmgseDI6MS1JLHkyOjEtaH07QTAuY3VycmVudD17ZHg6MS1JLUksZHk6MS1oLWh9LGEocTEpLGQxKHt0eXBlOiJiZWdpbiIsLi4ucTF9KTtyZXR1cm59ZzEoSSxoKTtsZXQgdD16MyhoKTtpZih0IT09dm9pZCAwKUQxLmN1cnJlbnQ9ITAsbTEoe3R5cGU6ImJlZ2luIix4OkkseTpoLGVkZ2U6dH0pO2Vsc2UgRDEuY3VycmVudD0hMSxIMCgiYmVnaW4iLE0pfSxvbk1vdXNlTW92ZTooTSk9PntsZXQgTz1qMSgpO2lmKCFPKXJldHVybjtsZXQgST0oTS5jbGllbnRYLU8ubGVmdCkvTy53aWR0aCxoPShNLmNsaWVudFktTy50b3ApL08uaGVpZ2h0O2lmKF8uY3VycmVudD17eDpJLHk6aH0sTS5idXR0b25zPT09MCl7aWYoTS5hbHRLZXkpYSh7eDE6SSx5MTpoLHgyOjEtSSx5MjoxLWh9KTtyZXR1cm59aWYoeTEuY3VycmVudCl7bGV0IHQ7aWYoSjAuY3VycmVudCl7bGV0IHExPUEwLmN1cnJlbnQ7dD17eDE6SSx5MTpoLHgyOkkrcTEuZHgseTI6aCtxMS5keX19ZWxzZSB0PXt4MTpJLHkxOmgseDI6MS1JLHkyOjEtaH07YSh0KSxkMSh7dHlwZToibW92ZSIsLi4udH0pO3JldHVybn1pZihmMShJLGgpLEQxLmN1cnJlbnQpbTEoe3R5cGU6Im1vdmUiLHg6SSx5OmgsZWRnZTpRMn0pO2Vsc2UgSDAoIm1vdmUiLE0pfSxvbk1vdXNlVXA6KE0pPT57aWYoeTEuY3VycmVudCl7bGV0IE89ajEoKTtpZihPKXtsZXQgST0oTS5jbGllbnRYLU8ubGVmdCkvTy53aWR0aCxoPShNLmNsaWVudFktTy50b3ApL08uaGVpZ2h0O2lmKEowLmN1cnJlbnQpe2xldCB0PUEwLmN1cnJlbnQ7ZDEoe3R5cGU6ImVuZCIseDE6SSx5MTpoLHgyOkkrdC5keCx5MjpoK3QuZHl9KX1lbHNlIGQxKHt0eXBlOiJlbmQiLHgxOkkseTE6aCx4MjoxLUkseTI6MS1ofSl9aWYoeTEuY3VycmVudD0hMSwhTS5hbHRLZXkpYShudWxsKTtyZXR1cm59aWYoeDEoKSxEMS5jdXJyZW50KXtsZXQgTz1qMSgpO2lmKE8pe2xldCBJPShNLmNsaWVudFgtTy5sZWZ0KS9PLndpZHRoLGg9KE0uY2xpZW50WS1PLnRvcCkvTy5oZWlnaHQ7bTEoe3R5cGU6ImVuZCIseDpJLHk6aCxlZGdlOlEyfSl9RDEuY3VycmVudD0hMTtyZXR1cm59SDAoImVuZCIsTSl9LG9uTW91c2VMZWF2ZTooTSk9PntpZih5MS5jdXJyZW50KXtpZihkKWQxKHt0eXBlOiJlbmQiLC4uLmR9KTt5MS5jdXJyZW50PSExLGEobnVsbCk7cmV0dXJufWlmKHgxKCksRDEuY3VycmVudCl7bGV0IE89ajEoKTtpZihPKXtsZXQgST0oTS5jbGllbnRYLU8ubGVmdCkvTy53aWR0aCxoPShNLmNsaWVudFktTy50b3ApL08uaGVpZ2h0O20xKHt0eXBlOiJlbmQiLHg6SSx5OmgsZWRnZTpRMn0pfUQxLmN1cnJlbnQ9ITE7cmV0dXJufWlmKE0uYnV0dG9ucz4wKUgwKCJlbmQiLE0pO2EobnVsbCl9LG9uVG91Y2hTdGFydDooTSk9PntNLnByZXZlbnREZWZhdWx0KCk7bGV0IE89ajEoKTtpZighTylyZXR1cm47aWYoTS50b3VjaGVzLmxlbmd0aD49Mil7eDEoKTtsZXQgVTE9TS50b3VjaGVzWzBdLF8xPU0udG91Y2hlc1sxXSxNMD17eDE6KFUxLmNsaWVudFgtTy5sZWZ0KS9PLndpZHRoLHkxOihVMS5jbGllbnRZLU8udG9wKS9PLmhlaWdodCx4MjooXzEuY2xpZW50WC1PLmxlZnQpL08ud2lkdGgseTI6KF8xLmNsaWVudFktTy50b3ApL08uaGVpZ2h0fTtpZighTjAuY3VycmVudCYmIUQxLmN1cnJlbnQpbTEoe3R5cGU6ImVuZCIseDpNMC54MSx5Ok0wLnkxfSk7TjAuY3VycmVudD0hMCx5MS5jdXJyZW50PSEwLEQxLmN1cnJlbnQ9ITEsYShNMCksZDEoe3R5cGU6ImJlZ2luIiwuLi5NMH0pO3JldHVybn1sZXQgST1NLnRvdWNoZXNbMF07aWYoIUkpcmV0dXJuO2xldCBoPShJLmNsaWVudFgtTy5sZWZ0KS9PLndpZHRoLHQ9KEkuY2xpZW50WS1PLnRvcCkvTy5oZWlnaHQ7ZzEoaCx0KTtsZXQgcTE9ejModCk7aWYocTEhPT12b2lkIDApRDEuY3VycmVudD0hMCxtMSh7dHlwZToiYmVnaW4iLHg6aCx5OnQsZWRnZTpxMX0pO2Vsc2UgRDEuY3VycmVudD0hMSxtMSh7dHlwZToiYmVnaW4iLHg6aCx5OnR9KX0sb25Ub3VjaE1vdmU6KE0pPT57TS5wcmV2ZW50RGVmYXVsdCgpO2xldCBPPWoxKCk7aWYoIU8pcmV0dXJuO2lmKE4wLmN1cnJlbnQmJk0udG91Y2hlcy5sZW5ndGg+PTIpe2xldCBxMT1NLnRvdWNoZXNbMF0sVTE9TS50b3VjaGVzWzFdLF8xPXt4MToocTEuY2xpZW50WC1PLmxlZnQpL08ud2lkdGgseTE6KHExLmNsaWVudFktTy50b3ApL08uaGVpZ2h0LHgyOihVMS5jbGllbnRYLU8ubGVmdCkvTy53aWR0aCx5MjooVTEuY2xpZW50WS1PLnRvcCkvTy5oZWlnaHR9O2EoXzEpLGQxKHt0eXBlOiJtb3ZlIiwuLi5fMX0pO3JldHVybn1sZXQgST1NLnRvdWNoZXNbMF07aWYoIUkpcmV0dXJuO2xldCBoPShJLmNsaWVudFgtTy5sZWZ0KS9PLndpZHRoLHQ9KEkuY2xpZW50WS1PLnRvcCkvTy5oZWlnaHQ7aWYoZjEoaCx0KSxEMS5jdXJyZW50KW0xKHt0eXBlOiJtb3ZlIix4OmgseTp0LGVkZ2U6UTJ9KTtlbHNlIG0xKHt0eXBlOiJtb3ZlIix4OmgseTp0fSl9LG9uVG91Y2hFbmQ6KE0pPT57TS5wcmV2ZW50RGVmYXVsdCgpO2xldCBPPWoxKCk7aWYoIU8pcmV0dXJuO2lmKE4wLmN1cnJlbnQpe2lmKE0udG91Y2hlcy5sZW5ndGg8Mil7bGV0IHExPU0uY2hhbmdlZFRvdWNoZXNbMF0sVTE9ZDtpZihxMSYmVTEpZDEoe3R5cGU6ImVuZCIseDE6KHExLmNsaWVudFgtTy5sZWZ0KS9PLndpZHRoLHkxOihxMS5jbGllbnRZLU8udG9wKS9PLmhlaWdodCx4MjpVMS54Mix5MjpVMS55Mn0pO2Vsc2UgaWYoVTEpZDEoe3R5cGU6ImVuZCIsLi4uVTF9KTtOMC5jdXJyZW50PSExLHkxLmN1cnJlbnQ9ITEsYShudWxsKX1yZXR1cm59bGV0IEk9TS5jaGFuZ2VkVG91Y2hlc1swXTtpZighSSlyZXR1cm47bGV0IGg9KEkuY2xpZW50WC1PLmxlZnQpL08ud2lkdGgsdD0oSS5jbGllbnRZLU8udG9wKS9PLmhlaWdodDtpZih4MSgpLEQxLmN1cnJlbnQpbTEoe3R5cGU6ImVuZCIseDpoLHk6dCxlZGdlOlEyfSksRDEuY3VycmVudD0hMTtlbHNlIG0xKHt0eXBlOiJlbmQiLHg6aCx5OnR9KX19KSxLKCJkaXYiLHtyZWY6azEsImRhdGEtdGVzdGlkIjoidG91Y2gtaW5kaWNhdG9yIixzdHlsZTp7cG9zaXRpb246ImFic29sdXRlIixkaXNwbGF5OiJub25lIix3aWR0aDoyNCxoZWlnaHQ6MjQsYm9yZGVyUmFkaXVzOiI1MCUiLGJhY2tncm91bmQ6InJnYmEoNTksMTMwLDI0NiwwLjUpIixib3hTaGFkb3c6IjAgMCA4cHggcmdiYSg1OSwxMzAsMjQ2LDAuMykiLHRyYW5zZm9ybToidHJhbnNsYXRlKC01MCUsIC01MCUpIixwb2ludGVyRXZlbnRzOiJub25lIn19KSxkJiZLKFoxLHtjaGlsZHJlbjpbSygiZGl2Iix7ImRhdGEtdGVzdGlkIjoiZmluZ2VyLWRvdCIsc3R5bGU6RjkoZC54MSxkLnkxKX0pLEsoImRpdiIseyJkYXRhLXRlc3RpZCI6ImZpbmdlci1kb3QiLHN0eWxlOkY5KGQueDIsZC55Mil9KV19KSwhSDEmJiFnJiZLKCJkaXYiLHtzdHlsZTp7Li4uazksLi4uWnx8e319LGNoaWxkcmVuOksoInNwYW4iLHtzdHlsZTp7Y29sb3I6IiM4ODgiLGZvbnRTaXplOjE0fSxjaGlsZHJlbjoiQ29ubmVjdGluZy4uLiJ9KX0pLGcmJksoImRpdiIse3N0eWxlOms5LGNoaWxkcmVuOksoInNwYW4iLHtzdHlsZTp7Y29sb3I6IiNmNDQiLGZvbnRTaXplOjE0LHBhZGRpbmc6MjAsdGV4dEFsaWduOiJjZW50ZXIifSxjaGlsZHJlbjpnfSl9KSx1MSYmSygiZGl2Iix7c3R5bGU6ZDcsY2hpbGRyZW46Sygic3BhbiIse3N0eWxlOntjb2xvcjoiI2ZiYmYyNCIsZm9udFNpemU6MTMsZm9udEZhbWlseToibW9ub3NwYWNlIn0sY2hpbGRyZW46IlNsb3cgY29ubmVjdGlvbiJ9KX0pXX0pfSksIUgmJksoImRpdiIse3N0eWxlOntkaXNwbGF5OiJmbGV4IixhbGlnbkl0ZW1zOiJjZW50ZXIiLGp1c3RpZnlDb250ZW50OiJzcGFjZS1iZXR3ZWVuIixwYWRkaW5nOiI0cHggOHB4Iixib3JkZXJUb3A6IjFweCBzb2xpZCByZ2JhKDI1NSwyNTUsMjU1LDAuMTIpIn0sY2hpbGRyZW46W0soImJ1dHRvbiIse29uQ2xpY2s6TDAsc3R5bGU6e2JhY2tncm91bmQ6Im5vbmUiLGJvcmRlcjoiMXB4IHNvbGlkIHJnYmEoMjU1LDI1NSwyNTUsMC4yKSIsY29sb3I6IiNhYWEiLGZvbnRTaXplOjExLGZvbnRGYW1pbHk6Im1vbm9zcGFjZSIscGFkZGluZzoiMnB4IDEwcHgiLGN1cnNvcjoicG9pbnRlciIsYm9yZGVyUmFkaXVzOjR9LGNoaWxkcmVuOiJIb21lIn0pLEsoInNwYW4iLHtzdHlsZTp7Y29sb3I6RjE+MD8iIzRmNCI6IiM4ODgiLGZvbnRTaXplOjEyLGZvbnRGYW1pbHk6Im1vbm9zcGFjZSIsZGlzcGxheToiZmxleCIsYWxpZ25JdGVtczoiY2VudGVyIixnYXA6Nn0sY2hpbGRyZW46W0YmJksoInNwYW4iLHsiZGF0YS10ZXN0aWQiOiJxdWFsaXR5LWRvdCIsc3R5bGU6e3dpZHRoOjgsaGVpZ2h0OjgsYm9yZGVyUmFkaXVzOiI1MCUiLGRpc3BsYXk6ImlubGluZS1ibG9jayIsYmFja2dyb3VuZDpGPT09Imdvb2QiPyIjNGFkZTgwIjpGPT09ImRlZ3JhZGVkIj8iI2ZhY2MxNSI6IiNlZjQ0NDQifX0pLEYxLCIgZnBzIl19KV19KV19KX12YXIgZDc9e3Bvc2l0aW9uOiJhYnNvbHV0ZSIsdG9wOjgsbGVmdDoiNTAlIix0cmFuc2Zvcm06InRyYW5zbGF0ZVgoLTUwJSkiLGJhY2tncm91bmQ6InJnYmEoMCwwLDAsMC43KSIsYm9yZGVyUmFkaXVzOjYscGFkZGluZzoiNHB4IDEycHgiLHBvaW50ZXJFdmVudHM6Im5vbmUifSxrOT17cG9zaXRpb246ImFic29sdXRlIixpbnNldDowLGRpc3BsYXk6ImZsZXgiLGFsaWduSXRlbXM6ImNlbnRlciIsanVzdGlmeUNvbnRlbnQ6ImNlbnRlciIsYmFja2dyb3VuZDoicmdiYSgwLDAsMCwwLjgpIn0sTzk9MjA7ZnVuY3Rpb24gRjkoJCxKKXtyZXR1cm57cG9zaXRpb246ImFic29sdXRlIixsZWZ0OmAkeyQqMTAwfSVgLHRvcDpgJHtKKjEwMH0lYCx3aWR0aDpPOSxoZWlnaHQ6TzksYm9yZGVyUmFkaXVzOiI1MCUiLGJhY2tncm91bmQ6InJnYmEoMjU1LDI1NSwyNTUsMC40NSkiLGJvcmRlcjoiMS4yNXB4IHNvbGlkIHJnYmEoMCwwLDAsMC41NSkiLGJveFNoYWRvdzoiMCAxcHggM3B4IHJnYmEoMCwwLDAsMC40NSkiLHRyYW5zZm9ybToidHJhbnNsYXRlKC01MCUsIC01MCUpIixwb2ludGVyRXZlbnRzOiJub25lIn19ZnVuY3Rpb24gRTAoJCl7aWYoISQpcmV0dXJuImlwaG9uZSI7bGV0IEo9JC50b0xvd2VyQ2FzZSgpO2lmKEouaW5jbHVkZXMoImlwYWQiKSlyZXR1cm4iaXBhZCI7aWYoSi5pbmNsdWRlcygid2F0Y2giKSlyZXR1cm4id2F0Y2giO2lmKEouaW5jbHVkZXMoInZpc2lvbiIpKXJldHVybiJ2aXNpb24iO3JldHVybiJpcGhvbmUifXZhciBTMT17aXBob25lOnt3aWR0aDo0MjcsaGVpZ2h0Ojg4MSxiZXplbFg6MTgsYmV6ZWxZOjE4LGlubmVyUmFkaXVzOjU1fSxpcGFkOnt3aWR0aDo0MzAsaGVpZ2h0OjYwNSxiZXplbFg6MTYsYmV6ZWxZOjE2LGlubmVyUmFkaXVzOjEyfSx3YXRjaDp7d2lkdGg6Mjc0LGhlaWdodDozMjIsYmV6ZWxYOjEyLGJlemVsWToxMixpbm5lclJhZGl1czo3OX0sdmlzaW9uOnt3aWR0aDo2NDAsaGVpZ2h0OjQwMCxiZXplbFg6MTIsYmV6ZWxZOjEyLGlubmVyUmFkaXVzOjMyfX0sc1o9UzEuaXBob25lLndpZHRoLHRaPVMxLmlwaG9uZS5oZWlnaHQsZVo9UzEuaXBob25lLmJlemVsWCwkSz1TMS5pcGhvbmUuYmV6ZWxZLEpLPVMxLmlwaG9uZS5pbm5lclJhZGl1cyxNOT17ImlQaG9uZSAxNyBQcm8gTWF4Ijp7d2lkdGg6MTMyMCxoZWlnaHQ6Mjg2OH0sImlQaG9uZSAxNyBQcm8iOnt3aWR0aDoxMjA2LGhlaWdodDoyNjIyfSwiaVBob25lIDE3Ijp7d2lkdGg6MTIwNixoZWlnaHQ6MjYyMn0sImlQaG9uZSBBaXIiOnt3aWR0aDoxMjYwLGhlaWdodDoyNzM2fSwiaVBob25lIDE2IFBybyBNYXgiOnt3aWR0aDoxMzIwLGhlaWdodDoyODY4fSwiaVBob25lIDE2IFBybyI6e3dpZHRoOjEyMDYsaGVpZ2h0OjI2MjJ9LCJpUGhvbmUgMTYgUGx1cyI6e3dpZHRoOjEyOTAsaGVpZ2h0OjI3OTZ9LCJpUGhvbmUgMTYiOnt3aWR0aDoxMTc5LGhlaWdodDoyNTU2fSwiaVBob25lIDE2ZSI6e3dpZHRoOjExNzAsaGVpZ2h0OjI1MzJ9LCJpUGhvbmUgMTUgUHJvIE1heCI6e3dpZHRoOjEyOTAsaGVpZ2h0OjI3OTZ9LCJpUGhvbmUgMTUgUHJvIjp7d2lkdGg6MTE3OSxoZWlnaHQ6MjU1Nn0sImlQaG9uZSAxNSBQbHVzIjp7d2lkdGg6MTI5MCxoZWlnaHQ6Mjc5Nn0sImlQaG9uZSAxNSI6e3dpZHRoOjExNzksaGVpZ2h0OjI1NTZ9LCJpUGFkIFBybyAxMy1pbmNoIChNNSkiOnt3aWR0aDoyMDY0LGhlaWdodDoyNzUyfSwiaVBhZCBQcm8gMTEtaW5jaCAoTTUpIjp7d2lkdGg6MTY2OCxoZWlnaHQ6MjQyMH0sImlQYWQgUHJvIDEzLWluY2ggKE00KSI6e3dpZHRoOjIwNjQsaGVpZ2h0OjI3NTJ9LCJpUGFkIFBybyAxMS1pbmNoIChNNCkiOnt3aWR0aDoxNjY4LGhlaWdodDoyNDIwfSwiaVBhZCBBaXIgMTMtaW5jaCAoTTMpIjp7d2lkdGg6MjA0OCxoZWlnaHQ6MjczMn0sImlQYWQgQWlyIDExLWluY2ggKE0zKSI6e3dpZHRoOjE2NDAsaGVpZ2h0OjIzNjB9LCJpUGFkIChBMTYpIjp7d2lkdGg6MTY0MCxoZWlnaHQ6MjM2MH0sImlQYWQgbWluaSAoQTE3IFBybykiOnt3aWR0aDoxNDg4LGhlaWdodDoyMjY2fSwiQXBwbGUgV2F0Y2ggVWx0cmEgMyAoNDltbSkiOnt3aWR0aDo0MjIsaGVpZ2h0OjUxNH0sIkFwcGxlIFdhdGNoIFVsdHJhIDIgKDQ5bW0pIjp7d2lkdGg6NDEwLGhlaWdodDo1MDJ9LCJBcHBsZSBXYXRjaCBTZXJpZXMgMTEgKDQ2bW0pIjp7d2lkdGg6NDE2LGhlaWdodDo0OTZ9LCJBcHBsZSBXYXRjaCBTZXJpZXMgMTEgKDQybW0pIjp7d2lkdGg6Mzc0LGhlaWdodDo0NDZ9LCJBcHBsZSBXYXRjaCBTZXJpZXMgMTAgKDQ2bW0pIjp7d2lkdGg6NDE2LGhlaWdodDo0OTZ9LCJBcHBsZSBXYXRjaCBTZXJpZXMgMTAgKDQybW0pIjp7d2lkdGg6Mzc0LGhlaWdodDo0NDZ9LCJBcHBsZSBXYXRjaCBTRSAzICg0NG1tKSI6e3dpZHRoOjM2OCxoZWlnaHQ6NDQ4fSwiQXBwbGUgV2F0Y2ggU0UgMyAoNDBtbSkiOnt3aWR0aDozMjQsaGVpZ2h0OjM5NH0sIkFwcGxlIFdhdGNoIFNFICg0NG1tKSI6e3dpZHRoOjM2OCxoZWlnaHQ6NDQ4fSwiQXBwbGUgV2F0Y2ggU0UgKDQwbW0pIjp7d2lkdGg6MzI0LGhlaWdodDozOTR9LCJBcHBsZSBWaXNpb24gUHJvIjp7d2lkdGg6MTkyMCxoZWlnaHQ6MTA4MH19O2Z1bmN0aW9uIEg1KCQsSil7bGV0IFE9JCYmJC53aWR0aD4wJiYkLmhlaWdodD4wPyQ6SixaPVoyKFEpO2lmKFopcmV0dXJuYCR7Wi53aWR0aH0gLyAke1ouaGVpZ2h0fWA7cmV0dXJuYCR7UzEuaXBob25lLndpZHRoLTIqUzEuaXBob25lLmJlemVsWH0gLyAke1MxLmlwaG9uZS5oZWlnaHQtMipTMS5pcGhvbmUuYmV6ZWxZfWB9ZnVuY3Rpb24gWTIoJD0iaXBob25lIixKKXtsZXQgUT1KP005W0pdOm51bGw7aWYoUSlyZXR1cm4gUTtsZXQgWj1TMVskXTtyZXR1cm57d2lkdGg6Wi53aWR0aC0yKlouYmV6ZWxYLGhlaWdodDpaLmhlaWdodC0yKlouYmV6ZWxZfX1mdW5jdGlvbiBxMigkPSJpcGhvbmUiLEope2lmKGcwKEopKXN3aXRjaCgkKXtjYXNlImlwYWQiOnJldHVybiA3MjA7Y2FzZSJ2aXNpb24iOnJldHVybiA1ODA7Y2FzZSJ3YXRjaCI6cmV0dXJuIDIwMDtkZWZhdWx0OnJldHVybiA2MjB9c3dpdGNoKCQpe2Nhc2UiaXBhZCI6cmV0dXJuIDQwMDtjYXNlIndhdGNoIjpyZXR1cm4gMjAwO2Nhc2UidmlzaW9uIjpyZXR1cm4gNTgwO2RlZmF1bHQ6cmV0dXJuIDMyMH19ZnVuY3Rpb24gQTUoJD0iaXBob25lIixKKXtsZXQgUT1TMVskXSxaPVEud2lkdGgtMipRLmJlemVsWCxYPVEuaGVpZ2h0LTIqUS5iZXplbFk7aWYoWjxYJiZnMChKKSlyZXR1cm5gJHtRLmlubmVyUmFkaXVzL1gqMTAwfSUgLyAke1EuaW5uZXJSYWRpdXMvWioxMDB9JWA7cmV0dXJuYCR7US5pbm5lclJhZGl1cy9aKjEwMH0lIC8gJHtRLmlubmVyUmFkaXVzL1gqMTAwfSVgfWZ1bmN0aW9uIFc5KCQpe2xldCBKPVMxWyQudHlwZV0sUT1KLndpZHRoLTIqSi5iZXplbFgsWj1KLmhlaWdodC0yKkouYmV6ZWxZLFgsWTtpZihRPFomJmcwKCQuY29uZmlnPz9udWxsKSlYPUouaW5uZXJSYWRpdXMvWixZPUouaW5uZXJSYWRpdXMvUTtlbHNlIFg9Si5pbm5lclJhZGl1cy9RLFk9Si5pbm5lclJhZGl1cy9aO2xldCBxPVgqJC5jb250YWluZXJXaWR0aCxHPVkqJC5jb250YWluZXJIZWlnaHQsVj1NYXRoLnNxcnQoTWF0aC5tYXgocSpHLDApKTtyZXR1cm57cng6cSxyeTpHLHJHZW9tOlZ9fXZhciBvNz0xMyxyNz02MjtmdW5jdGlvbiBPMygkKXtsZXR7Y29udGFpbmVyV2lkdGg6Sixjb250YWluZXJIZWlnaHQ6UX09JCxaPShIKT0+SC50b0ZpeGVkKDMpLFg9KEgsayk9PntsZXQgRj1rLHc9ayxUPXI3LzIqKE1hdGguUEkvMTgwKSxTPTIyNSpNYXRoLlBJLzE4MCx4PVMrVCwkMT1TLVQsZj1GK0gqTWF0aC5jb3MoeCksaT13K0gqTWF0aC5zaW4oeCkscj1GK0gqTWF0aC5jb3MoJDEpLGw9dytIKk1hdGguc2luKCQxKSxvPWBNICR7WihmKX0gJHtaKGkpfSBBICR7WihIKX0gJHtaKEgpfSAwIDAgMSAke1oocil9ICR7WihsKX1gLFExPWBNICR7WihyKX0gJHtaKGwpfSBBICR7WihIKX0gJHtaKEgpfSAwIDAgMCAke1ooZil9ICR7WihpKX1gO3JldHVybntkOm8sZEZpbGw6UTF9fTtpZighKEo+MCl8fCEoUT4wKSl7bGV0IEg9bzcsaz1NYXRoLmNlaWwoSCsxNCkse2Q6RixkRmlsbDp3fT1YKEgsayk7cmV0dXJue2Q6RixkRmlsbDp3LHZpZXdCb3hTaXplOmt9fWxldHtyR2VvbTpZfT1XOSgkKSxxPU1hdGgubWF4KDIuMixNYXRoLm1pbig1LjIsMC4wMTEqTWF0aC5taW4oSixRKSkpLEc9WSowLjM0K3EsVj1NYXRoLm1pbihKLFEpLEI9TWF0aC5taW4oMjIsTWF0aC5tYXgoMTIsViowLjA1MikpO0c9TWF0aC5taW4oMjQsTWF0aC5tYXgoMTIsRyxCKSk7bGV0IEM9TWF0aC5tYXgoMjYsTWF0aC5jZWlsKEcrMTMpKSx7ZDpBLGRGaWxsOlV9PVgoRyxDKTtyZXR1cm57ZDpBLGRGaWxsOlUsdmlld0JveFNpemU6Q319ZnVuY3Rpb24gazUoe3R5cGU6JD0iaXBob25lIixzdHJlYW1pbmc6Sj0hMX0pe3N3aXRjaCgkKXtjYXNlImlwYWQiOnJldHVybiBLKGE3LHtzdHJlYW1pbmc6Sn0pO2Nhc2Uid2F0Y2giOnJldHVybiBLKG43LHtzdHJlYW1pbmc6Sn0pO2Nhc2UidmlzaW9uIjpyZXR1cm4gSyhzNyx7c3RyZWFtaW5nOkp9KTtkZWZhdWx0OnJldHVybiBLKGk3LHtzdHJlYW1pbmc6Sn0pfX1mdW5jdGlvbiBpNyh7c3RyZWFtaW5nOiQ9ITF9KXtyZXR1cm4gSygic3ZnIix7dmlld0JveDoiMCAwIDQyNyA4ODEiLHN0eWxlOnt3aWR0aDoiMTAwJSIsaGVpZ2h0OiIxMDAlIn0sZmlsbDoibm9uZSIseG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIixjaGlsZHJlbjpbSygiZGVmcyIse2NoaWxkcmVuOltLKCJmaWx0ZXIiLHtpZDoiY2hyb21lLWZpbHRlcjAiLHg6Ii0wLjE2Njk5MiIseToiMC4xNjY1MDQiLHdpZHRoOiI0MjciLGhlaWdodDoiODgwLjY2NyIsZmlsdGVyVW5pdHM6InVzZXJTcGFjZU9uVXNlIixjb2xvckludGVycG9sYXRpb25GaWx0ZXJzOiJzUkdCIixjaGlsZHJlbjpbSygiZmVGbG9vZCIse2Zsb29kT3BhY2l0eToiMCIscmVzdWx0OiJCYWNrZ3JvdW5kSW1hZ2VGaXgifSksSygiZmVCbGVuZCIse21vZGU6Im5vcm1hbCIsaW46IlNvdXJjZUdyYXBoaWMiLGluMjoiQmFja2dyb3VuZEltYWdlRml4IixyZXN1bHQ6InNoYXBlIn0pLEsoImZlR2F1c3NpYW5CbHVyIix7c3RkRGV2aWF0aW9uOiIwLjUiLHJlc3VsdDoiZWZmZWN0MV9mb3JlZ3JvdW5kQmx1ciJ9KV19KSxLKCJmaWx0ZXIiLHtpZDoiY2hyb21lLWZpbHRlcjEiLHg6IjYuMzMyMzYiLHk6IjYuMzMzODIiLHdpZHRoOiI0MTQiLGhlaWdodDoiODY4IixmaWx0ZXJVbml0czoidXNlclNwYWNlT25Vc2UiLGNvbG9ySW50ZXJwb2xhdGlvbkZpbHRlcnM6InNSR0IiLGNoaWxkcmVuOltLKCJmZUZsb29kIix7Zmxvb2RPcGFjaXR5OiIwIixyZXN1bHQ6IkJhY2tncm91bmRJbWFnZUZpeCJ9KSxLKCJmZUJsZW5kIix7bW9kZToibm9ybWFsIixpbjoiU291cmNlR3JhcGhpYyIsaW4yOiJCYWNrZ3JvdW5kSW1hZ2VGaXgiLHJlc3VsdDoic2hhcGUifSksSygiZmVHYXVzc2lhbkJsdXIiLHtzdGREZXZpYXRpb246IjAuMzMzMzMzIixyZXN1bHQ6ImVmZmVjdDFfZm9yZWdyb3VuZEJsdXIifSldfSldfSksSygicmVjdCIse3g6IjMuODMyNjgiLHk6IjMuODMzNjYiLHdpZHRoOiI0MTkiLGhlaWdodDoiODczIixyeDoiNjYuMTY2NyIsc3Ryb2tlOiIjNDU0NTQ4IixzdHJva2VXaWR0aDoiNC4zMzMzMyJ9KSxLKCJyZWN0Iix7eDoiMC44MzMzMzMiLHk6IjAuODMzMzMzIix3aWR0aDoiNDI1IixoZWlnaHQ6Ijg3OSIscng6IjY5LjE2NjciLHN0cm9rZToiIzM3MzczYSIsc3Ryb2tlV2lkdGg6IjEuNjY2NjcifSksSygiZyIse29wYWNpdHk6IjAuOSIsZmlsdGVyOiJ1cmwoI2Nocm9tZS1maWx0ZXIwKSIsY2hpbGRyZW46SygicmVjdCIse3g6IjEuNjY2MDIiLHk6IjIiLHdpZHRoOiI0MjMuMzMzIixoZWlnaHQ6Ijg3NyIscng6IjY4LjY2NjciLHN0cm9rZToiIzQ1NDU0OCIsc3Ryb2tlV2lkdGg6IjEuNjY2NjcifSl9KSxLKCJnIix7b3BhY2l0eToiMC44IixmaWx0ZXI6InVybCgjY2hyb21lLWZpbHRlcjEpIixjaGlsZHJlbjpLKCJyZWN0Iix7eDoiNy4zMzI2OCIseToiNy4zMzM2NiIsd2lkdGg6IjQxMiIsaGVpZ2h0OiI4NjYiLHJ4OiI2Mi42NjY3IixzdHJva2U6IiM2NDY0NjQiLHN0cm9rZVdpZHRoOiIwLjY2NjY2NyJ9KX0pLEsoInJlY3QiLHt4OiIxNTEuNjY2Iix5OiIzMS42NjciLHdpZHRoOiIxMjMuMzMzIixoZWlnaHQ6IjM2IixyeDoiMTgiLGZpbGw6ImJsYWNrIixzdHlsZTp7b3BhY2l0eTokPzA6MSx0cmFuc2l0aW9uOiJvcGFjaXR5IDAuM3MgZWFzZSJ9fSldfSl9ZnVuY3Rpb24gYTcoe3N0cmVhbWluZzokPSExfSl7bGV0IEo9UzEuaXBhZC53aWR0aCxRPVMxLmlwYWQuaGVpZ2h0LFo9MzAsWD0yNjtyZXR1cm4gSygic3ZnIix7dmlld0JveDpgMCAwICR7Sn0gJHtRfWAsc3R5bGU6e3dpZHRoOiIxMDAlIixoZWlnaHQ6IjEwMCUifSxmaWxsOiJub25lIix4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLGNoaWxkcmVuOltLKCJkZWZzIix7Y2hpbGRyZW46W0soImZpbHRlciIse2lkOiJpcGFkLWdsb3cwIix4OiIwIix5OiIwIix3aWR0aDpKLGhlaWdodDpRLGZpbHRlclVuaXRzOiJ1c2VyU3BhY2VPblVzZSIsY29sb3JJbnRlcnBvbGF0aW9uRmlsdGVyczoic1JHQiIsY2hpbGRyZW46W0soImZlRmxvb2QiLHtmbG9vZE9wYWNpdHk6IjAiLHJlc3VsdDoiQmFja2dyb3VuZEltYWdlRml4In0pLEsoImZlQmxlbmQiLHttb2RlOiJub3JtYWwiLGluOiJTb3VyY2VHcmFwaGljIixpbjI6IkJhY2tncm91bmRJbWFnZUZpeCIscmVzdWx0OiJzaGFwZSJ9KSxLKCJmZUdhdXNzaWFuQmx1ciIse3N0ZERldmlhdGlvbjoiMC41IixyZXN1bHQ6ImJsdXIifSldfSksSygiZmlsdGVyIix7aWQ6ImlwYWQtZ2xvdzEiLHg6IjUiLHk6IjUiLHdpZHRoOkotMTAsaGVpZ2h0OlEtMTAsZmlsdGVyVW5pdHM6InVzZXJTcGFjZU9uVXNlIixjb2xvckludGVycG9sYXRpb25GaWx0ZXJzOiJzUkdCIixjaGlsZHJlbjpbSygiZmVGbG9vZCIse2Zsb29kT3BhY2l0eToiMCIscmVzdWx0OiJCYWNrZ3JvdW5kSW1hZ2VGaXgifSksSygiZmVCbGVuZCIse21vZGU6Im5vcm1hbCIsaW46IlNvdXJjZUdyYXBoaWMiLGluMjoiQmFja2dyb3VuZEltYWdlRml4IixyZXN1bHQ6InNoYXBlIn0pLEsoImZlR2F1c3NpYW5CbHVyIix7c3RkRGV2aWF0aW9uOiIwLjMzMzMzMyIscmVzdWx0OiJibHVyIn0pXX0pXX0pLEsoInJlY3QiLHt4OiIzLjUiLHk6IjMuNSIsd2lkdGg6Si03LGhlaWdodDpRLTcscng6MjYsc3Ryb2tlOiIjNDU0NTQ4IixzdHJva2VXaWR0aDoiNCJ9KSxLKCJyZWN0Iix7eDoiMC44MzMiLHk6IjAuODMzIix3aWR0aDpKLTEuNjY2LGhlaWdodDpRLTEuNjY2LHJ4OjMwLHN0cm9rZToiIzM3MzczYSIsc3Ryb2tlV2lkdGg6IjEuNjY2In0pLEsoImciLHtvcGFjaXR5OiIwLjkiLGZpbHRlcjoidXJsKCNpcGFkLWdsb3cwKSIsY2hpbGRyZW46SygicmVjdCIse3g6IjEuNSIseToiMS41Iix3aWR0aDpKLTMsaGVpZ2h0OlEtMyxyeDoyOSxzdHJva2U6IiM0NTQ1NDgiLHN0cm9rZVdpZHRoOiIxLjY2NiJ9KX0pLEsoImciLHtvcGFjaXR5OiIwLjgiLGZpbHRlcjoidXJsKCNpcGFkLWdsb3cxKSIsY2hpbGRyZW46SygicmVjdCIse3g6IjYiLHk6IjYiLHdpZHRoOkotMTIsaGVpZ2h0OlEtMTIscng6MjQsc3Ryb2tlOiIjNjQ2NDY0IixzdHJva2VXaWR0aDoiMC42NjYifSl9KSxLKCJjaXJjbGUiLHtjeDpKLzIsY3k6UzEuaXBhZC5iZXplbFkvMisxLHI6IjMiLGZpbGw6IiMxYTFhMWEiLHN0eWxlOntvcGFjaXR5OiQ/MDowLjgsdHJhbnNpdGlvbjoib3BhY2l0eSAwLjNzIGVhc2UifX0pLEsoInJlY3QiLHt4OihKLTEyMCkvMix5OlEtUzEuaXBhZC5iZXplbFkvMi0yLjUsd2lkdGg6IjEyMCIsaGVpZ2h0OiI1IixyeDoiMi41IixmaWxsOiJ3aGl0ZSIsc3R5bGU6e29wYWNpdHk6JD8wOjAuMzUsbWl4QmxlbmRNb2RlOiJkaWZmZXJlbmNlIix0cmFuc2l0aW9uOiJvcGFjaXR5IDAuM3MgZWFzZSJ9fSldfSl9ZnVuY3Rpb24gbjcoe3N0cmVhbWluZzokPSExfSl7bGV0IEo9UzEud2F0Y2gud2lkdGgsUT1TMS53YXRjaC5oZWlnaHQsWj04OCxYPTgyLFk9OCxxPTM2LEc9US8yLTE4LTE2LFY9MjIsQj1RLzItMTErMTY7cmV0dXJuIEsoInN2ZyIse3ZpZXdCb3g6YDAgMCAke0p9ICR7UX1gLHN0eWxlOnt3aWR0aDoiMTAwJSIsaGVpZ2h0OiIxMDAlIixvdmVyZmxvdzoidmlzaWJsZSJ9LGZpbGw6Im5vbmUiLHhtbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsY2hpbGRyZW46W0soImRlZnMiLHtjaGlsZHJlbjpLKCJmaWx0ZXIiLHtpZDoid2F0Y2gtZ2xvdzAiLHg6IjAiLHk6IjAiLHdpZHRoOkorMTIsaGVpZ2h0OlEsZmlsdGVyVW5pdHM6InVzZXJTcGFjZU9uVXNlIixjb2xvckludGVycG9sYXRpb25GaWx0ZXJzOiJzUkdCIixjaGlsZHJlbjpbSygiZmVGbG9vZCIse2Zsb29kT3BhY2l0eToiMCIscmVzdWx0OiJCYWNrZ3JvdW5kSW1hZ2VGaXgifSksSygiZmVCbGVuZCIse21vZGU6Im5vcm1hbCIsaW46IlNvdXJjZUdyYXBoaWMiLGluMjoiQmFja2dyb3VuZEltYWdlRml4IixyZXN1bHQ6InNoYXBlIn0pLEsoImZlR2F1c3NpYW5CbHVyIix7c3RkRGV2aWF0aW9uOiIwLjUiLHJlc3VsdDoiYmx1ciJ9KV19KX0pLEsoInJlY3QiLHt4OkotMix5Okcsd2lkdGg6OCxoZWlnaHQ6MzYscng6IjMiLGZpbGw6IiMyYTJhMmMiLHN0cm9rZToiIzQ1NDU0OCIsc3Ryb2tlV2lkdGg6IjEifSksSygicmVjdCIse3g6Si0xLHk6Qix3aWR0aDo2LGhlaWdodDoyMixyeDoiMi41IixmaWxsOiIjMmEyYTJjIixzdHJva2U6IiM0NTQ1NDgiLHN0cm9rZVdpZHRoOiIwLjgifSksSygicmVjdCIse3g6IjMuNSIseToiMy41Iix3aWR0aDpKLTcsaGVpZ2h0OlEtNyxyeDo4MixzdHJva2U6IiM0NTQ1NDgiLHN0cm9rZVdpZHRoOiIzLjUifSksSygicmVjdCIse3g6IjAuODMzIix5OiIwLjgzMyIsd2lkdGg6Si0xLjY2NixoZWlnaHQ6US0xLjY2NixyeDo4OCxzdHJva2U6IiMzNzM3M2EiLHN0cm9rZVdpZHRoOiIxLjY2NiJ9KSxLKCJnIix7b3BhY2l0eToiMC45IixmaWx0ZXI6InVybCgjd2F0Y2gtZ2xvdzApIixjaGlsZHJlbjpLKCJyZWN0Iix7eDoiMS41Iix5OiIxLjUiLHdpZHRoOkotMyxoZWlnaHQ6US0zLHJ4Ojg3LHN0cm9rZToiIzQ1NDU0OCIsc3Ryb2tlV2lkdGg6IjEuNjY2In0pfSldfSl9ZnVuY3Rpb24gczcoe3N0cmVhbWluZzokPSExfSl7bGV0IEo9UzEudmlzaW9uLndpZHRoLFE9UzEudmlzaW9uLmhlaWdodCxaPTQwLFg9MzQ7cmV0dXJuIEsoInN2ZyIse3ZpZXdCb3g6YDAgMCAke0p9ICR7UX1gLHN0eWxlOnt3aWR0aDoiMTAwJSIsaGVpZ2h0OiIxMDAlIn0sZmlsbDoibm9uZSIseG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIixjaGlsZHJlbjpbSygiZGVmcyIse2NoaWxkcmVuOltLKCJmaWx0ZXIiLHtpZDoidmlzaW9uLWdsb3cwIix4OiIwIix5OiIwIix3aWR0aDpKLGhlaWdodDpRLGZpbHRlclVuaXRzOiJ1c2VyU3BhY2VPblVzZSIsY29sb3JJbnRlcnBvbGF0aW9uRmlsdGVyczoic1JHQiIsY2hpbGRyZW46W0soImZlRmxvb2QiLHtmbG9vZE9wYWNpdHk6IjAiLHJlc3VsdDoiQmFja2dyb3VuZEltYWdlRml4In0pLEsoImZlQmxlbmQiLHttb2RlOiJub3JtYWwiLGluOiJTb3VyY2VHcmFwaGljIixpbjI6IkJhY2tncm91bmRJbWFnZUZpeCIscmVzdWx0OiJzaGFwZSJ9KSxLKCJmZUdhdXNzaWFuQmx1ciIse3N0ZERldmlhdGlvbjoiMC41IixyZXN1bHQ6ImJsdXIifSldfSksSygiZmlsdGVyIix7aWQ6InZpc2lvbi1nbG93MSIseDoiNSIseToiNSIsd2lkdGg6Si0xMCxoZWlnaHQ6US0xMCxmaWx0ZXJVbml0czoidXNlclNwYWNlT25Vc2UiLGNvbG9ySW50ZXJwb2xhdGlvbkZpbHRlcnM6InNSR0IiLGNoaWxkcmVuOltLKCJmZUZsb29kIix7Zmxvb2RPcGFjaXR5OiIwIixyZXN1bHQ6IkJhY2tncm91bmRJbWFnZUZpeCJ9KSxLKCJmZUJsZW5kIix7bW9kZToibm9ybWFsIixpbjoiU291cmNlR3JhcGhpYyIsaW4yOiJCYWNrZ3JvdW5kSW1hZ2VGaXgiLHJlc3VsdDoic2hhcGUifSksSygiZmVHYXVzc2lhbkJsdXIiLHtzdGREZXZpYXRpb246IjAuMzMzIixyZXN1bHQ6ImJsdXIifSldfSksSygibGluZWFyR3JhZGllbnQiLHtpZDoidmlzaW9uLWdsYXNzIix4MToiMCIseTE6IjAiLHgyOiIwIix5MjoiMSIsY2hpbGRyZW46W0soInN0b3AiLHtvZmZzZXQ6IjAlIixzdG9wQ29sb3I6IiM1NTU1NTgiLHN0b3BPcGFjaXR5OiIwLjMifSksSygic3RvcCIse29mZnNldDoiMTAwJSIsc3RvcENvbG9yOiIjM2EzYTNkIixzdG9wT3BhY2l0eToiMC4xIn0pXX0pXX0pLEsoInJlY3QiLHt4OiIwIix5OiIwIix3aWR0aDpKLGhlaWdodDpRLHJ4OjQwLGZpbGw6InVybCgjdmlzaW9uLWdsYXNzKSJ9KSxLKCJyZWN0Iix7eDoiMy41Iix5OiIzLjUiLHdpZHRoOkotNyxoZWlnaHQ6US03LHJ4OjM0LHN0cm9rZToiIzQ1NDU0OCIsc3Ryb2tlV2lkdGg6IjMifSksSygicmVjdCIse3g6IjAuODMzIix5OiIwLjgzMyIsd2lkdGg6Si0xLjY2NixoZWlnaHQ6US0xLjY2NixyeDo0MCxzdHJva2U6IiMzNzM3M2EiLHN0cm9rZVdpZHRoOiIxLjY2NiJ9KSxLKCJnIix7b3BhY2l0eToiMC45IixmaWx0ZXI6InVybCgjdmlzaW9uLWdsb3cwKSIsY2hpbGRyZW46SygicmVjdCIse3g6IjEuNSIseToiMS41Iix3aWR0aDpKLTMsaGVpZ2h0OlEtMyxyeDozOSxzdHJva2U6IiM0NTQ1NDgiLHN0cm9rZVdpZHRoOiIxLjY2NiJ9KX0pLEsoImciLHtvcGFjaXR5OiIwLjgiLGZpbHRlcjoidXJsKCN2aXNpb24tZ2xvdzEpIixjaGlsZHJlbjpLKCJyZWN0Iix7eDoiNiIseToiNiIsd2lkdGg6Si0xMixoZWlnaHQ6US0xMixyeDozMixzdHJva2U6IiM2NDY0NjQiLHN0cm9rZVdpZHRoOiIwLjY2NiJ9KX0pLEsoImVsbGlwc2UiLHtjeDpKLzIsY3k6US8yLHJ4OkovMi0zMCxyeTpRLzItMjQsc3Ryb2tlOiIjNGE0YTRkIixzdHJva2VXaWR0aDoiMC41IixvcGFjaXR5OiIwLjMiLHN0eWxlOntvcGFjaXR5OiQ/MDowLjMsdHJhbnNpdGlvbjoib3BhY2l0eSAwLjNzIGVhc2UifX0pXX0pfXZhciBGMz16MChudWxsKTtmdW5jdGlvbiBPNSgkKXtsZXQgSj1DMChGMyk7aWYoIUopdGhyb3cgRXJyb3IoYDxTaW11bGF0b3JUb29sYmFyLiR7JH0+IG11c3QgYmUgcmVuZGVyZWQgaW5zaWRlIDxTaW11bGF0b3JUb29sYmFyPmApO3JldHVybiBKfXZhciBlNz17ZGlzcGxheToiZmxleCIsZmxleFdyYXA6IndyYXAiLGFsaWduSXRlbXM6ImNlbnRlciIsanVzdGlmeUNvbnRlbnQ6InNwYWNlLWJldHdlZW4iLGdhcDoiNHB4IDEycHgiLHBhZGRpbmc6IjhweCAxMnB4Iixib3JkZXJSYWRpdXM6MjQsYmFja2dyb3VuZDoidmFyKC0tc2VydmUtc2ltLXBhbmVsLWJnLCAjMTgxODE4KSIsYm9yZGVyOiIxcHggc29saWQgcmdiYSgyNTUsMjU1LDI1NSwwLjEpIixib3hTaGFkb3c6IjAgMXB4IDJweCByZ2JhKDAsMCwwLDAuMikiLG1pbldpZHRoOjI0MCx3aWR0aDoiMTAwJSJ9O2Z1bmN0aW9uICQkKHtleGVjOiQsb25Sb3RhdGU6SixvcmllbnRhdGlvbjpRLGRldmljZVVkaWQ6WixkZXZpY2VOYW1lOlgsZGV2aWNlUnVudGltZTpZLHN0cmVhbWluZzpxPSExLGRpc2FibGVkOkc9ITEsY2hpbGRyZW46VixzdHlsZTpCLC4uLk59KXtsZXQgej1FMChYKSxDPXtleGVjOiQsb25Sb3RhdGU6SixvcmllbnRhdGlvbjpRLGRldmljZVVkaWQ6WixkZXZpY2VOYW1lOlgsZGV2aWNlUnVudGltZTpZLGRldmljZVR5cGU6eixzdHJlYW1pbmc6cSxkaXNhYmxlZDpHfHwhWnx8IXF9O3JldHVybiBLKEYzLlByb3ZpZGVyLHt2YWx1ZTpDLGNoaWxkcmVuOksoImRpdiIseyJkYXRhLXNpbXVsYXRvci10b29sYmFyIjohMCxzdHlsZTp7Li4uZTcsLi4uQn0sLi4uTixjaGlsZHJlbjpWfSl9KX12YXIgSiQ9e2Rpc3BsYXk6ImZsZXgiLGZsZXhEaXJlY3Rpb246ImNvbHVtbiIsYWxpZ25JdGVtczoiZmxleC1zdGFydCIsdGV4dEFsaWduOiJsZWZ0IixiYWNrZ3JvdW5kOiJ0cmFuc3BhcmVudCIsYm9yZGVyOiJub25lIixjb2xvcjoiI2ZmZiIscGFkZGluZzoiMnB4IDRweCIsbWFyZ2luOiItMnB4IC00cHgiLGJvcmRlclJhZGl1czo2LGN1cnNvcjoicG9pbnRlciIsbWluV2lkdGg6MCxtYXhXaWR0aDoiMTAwJSIsbGluZUhlaWdodDoxLjIsZm9udEZhbWlseToiaW5oZXJpdCJ9LFEkPVcwKGZ1bmN0aW9uKHtuYW1lOkosc3VidGl0bGU6USxoaWRlQ2hldnJvbjpaLGhpZGVTdWJ0aXRsZTpYLHN0eWxlOlksb25Nb3VzZUVudGVyOnEsb25Nb3VzZUxlYXZlOkcsLi4uVn0sQil7bGV0IE49TzUoIlRpdGxlIiksW3osTF09VyghMSksQz1KPz9OLmRldmljZU5hbWU/PyJObyBzaW11bGF0b3IiLEE9UT8/KE4uZGV2aWNlUnVudGltZT9OLmRldmljZVJ1bnRpbWUucmVwbGFjZSgvXC4vLCIgIik6IuKAlCIpO3JldHVybiBLKCJidXR0b24iLHtyZWY6Qix0eXBlOiJidXR0b24iLCJkYXRhLXNpbXVsYXRvci10b29sYmFyLXRpdGxlIjohMCxvbk1vdXNlRW50ZXI6KFUpPT57TCghMCkscT8uKFUpfSxvbk1vdXNlTGVhdmU6KFUpPT57TCghMSksRz8uKFUpfSxzdHlsZTp7Li4uSiQsYmFja2dyb3VuZDp6PyJyZ2JhKDI1NSwyNTUsMjU1LDAuMSkiOiJ0cmFuc3BhcmVudCIsLi4uWX0sLi4uVixjaGlsZHJlbjpbSygic3BhbiIse3N0eWxlOntkaXNwbGF5OiJpbmxpbmUtZmxleCIsYWxpZ25JdGVtczoiY2VudGVyIixnYXA6NCxmb250U2l6ZToxMixmb250V2VpZ2h0OjYwMCxjb2xvcjoiI2ZmZiIsbWF4V2lkdGg6IjEwMCUiLG92ZXJmbG93OiJoaWRkZW4iLHRleHRPdmVyZmxvdzoiZWxsaXBzaXMiLHdoaXRlU3BhY2U6Im5vd3JhcCJ9LGNoaWxkcmVuOltDLCFaJiZLKCJzdmciLHt3aWR0aDoiMTAiLGhlaWdodDoiMTAiLHZpZXdCb3g6IjAgMCAyNCAyNCIsZmlsbDoibm9uZSIsc3Ryb2tlOiJjdXJyZW50Q29sb3IiLHN0cm9rZVdpZHRoOiIyLjUiLHN0cm9rZUxpbmVjYXA6InJvdW5kIixzdHJva2VMaW5lam9pbjoicm91bmQiLHN0eWxlOntjb2xvcjoicmdiYSgyNTUsMjU1LDI1NSwwLjYpIixmbGV4U2hyaW5rOjB9LGNoaWxkcmVuOksoInBvbHlsaW5lIix7cG9pbnRzOiI2IDkgMTIgMTUgMTggOSJ9KX0pXX0pLCFYJiZLKCJzcGFuIix7c3R5bGU6e2ZvbnRTaXplOjEwLGNvbG9yOiJyZ2JhKDI1NSwyNTUsMjU1LDAuNSkiLG1heFdpZHRoOiIxMDAlIixvdmVyZmxvdzoiaGlkZGVuIix0ZXh0T3ZlcmZsb3c6ImVsbGlwc2lzIix3aGl0ZVNwYWNlOiJub3dyYXAifSxjaGlsZHJlbjpBfSldfSl9KSxaJD17ZGlzcGxheToiZmxleCIsYWxpZ25JdGVtczoiY2VudGVyIixnYXA6NCxmbGV4U2hyaW5rOjB9O2Z1bmN0aW9uIEskKHtzdHlsZTokLC4uLkp9KXtyZXR1cm4gSygiZGl2Iix7c3R5bGU6ey4uLlokLC4uLiR9LC4uLkp9KX12YXIgWCQ9e2JhY2tncm91bmQ6InRyYW5zcGFyZW50Iixib3JkZXI6Im5vbmUiLHBhZGRpbmc6Nixib3JkZXJSYWRpdXM6MTIsY3Vyc29yOiJwb2ludGVyIixkaXNwbGF5OiJpbmxpbmUtZmxleCIsYWxpZ25JdGVtczoiY2VudGVyIixqdXN0aWZ5Q29udGVudDoiY2VudGVyIixjb2xvcjoicmdiYSgyNTUsMjU1LDI1NSwwLjgpIix0cmFuc2l0aW9uOiJiYWNrZ3JvdW5kLWNvbG9yIDAuMTVzLCBjb2xvciAwLjE1cyIscG9zaXRpb246InJlbGF0aXZlIixvdmVyZmxvdzoidmlzaWJsZSJ9LEY1PVcwKGZ1bmN0aW9uKHtmb3JjZURpc2FibGVkOkosdG9vbHRpcDpRLHN0eWxlOlosZGlzYWJsZWQ6WCx0aXRsZTpZLG9uTW91c2VFbnRlcjpxLG9uTW91c2VMZWF2ZTpHLG9uUG9pbnRlckRvd246VixvbkZvY3VzOkIsb25CbHVyOk4sb25DbGljazp6LGNoaWxkcmVuOkwsImFyaWEtbGFiZWwiOkMsLi4uQX0sVSl7bGV0IEg9QzAoRjMpLGs9WHx8Snx8SD8uZGlzYWJsZWQsW0Ysd109VyghMSksW1QsU109VyghMSkseD1FKCExKSwkMT1KMigpLGY9UT8/WT8/KHR5cGVvZiBDPT09InN0cmluZyI/QzpudWxsKSxpPSEhZiYmIWsmJihGfHxUKTtyZXR1cm4gSygiYnV0dG9uIix7cmVmOlUsdHlwZToiYnV0dG9uIixkaXNhYmxlZDprLCJhcmlhLWxhYmVsIjpDLCJhcmlhLWRlc2NyaWJlZGJ5IjpmPyQxOnZvaWQgMCxvblBvaW50ZXJEb3duOihyKT0+e3guY3VycmVudD0hMCxWPy4ocil9LG9uTW91c2VFbnRlcjoocik9Pnt3KCEwKSxxPy4ocil9LG9uTW91c2VMZWF2ZToocik9Pnt3KCExKSxHPy4ocil9LG9uRm9jdXM6KHIpPT57UygheC5jdXJyZW50KSxCPy4ocil9LG9uQmx1cjoocik9Pnt4LmN1cnJlbnQ9ITEsUyghMSksTj8uKHIpfSxvbkNsaWNrOihyKT0+e3coITEpLFMoITEpLHIuY3VycmVudFRhcmdldC5ibHVyKCksej8uKHIpfSxzdHlsZTp7Li4uWCQsY29sb3I6az8icmdiYSgyNTUsMjU1LDI1NSwwLjI1KSI6InJnYmEoMjU1LDI1NSwyNTUsMC44KSIsYmFja2dyb3VuZDpGJiYhaz8icmdiYSgyNTUsMjU1LDI1NSwwLjEpIjoidHJhbnNwYXJlbnQiLGN1cnNvcjprPyJub3QtYWxsb3dlZCI6InBvaW50ZXIiLC4uLlp9LC4uLkEsY2hpbGRyZW46W0wsZiYmSygic3BhbiIse2lkOiQxLHJvbGU6InRvb2x0aXAiLCJhcmlhLWhpZGRlbiI6IWksc3R5bGU6e3Bvc2l0aW9uOiJhYnNvbHV0ZSIsbGVmdDoiNTAlIixib3R0b206ImNhbGMoMTAwJSArIDhweCkiLHRyYW5zZm9ybTpgdHJhbnNsYXRlWCgtNTAlKSB0cmFuc2xhdGVZKCR7aT8wOjJ9cHgpYCxvcGFjaXR5Omk/MTowLHBvaW50ZXJFdmVudHM6Im5vbmUiLHdoaXRlU3BhY2U6Im5vd3JhcCIscGFkZGluZzoiNHB4IDdweCIsYm9yZGVyUmFkaXVzOjYsYmFja2dyb3VuZDoidmFyKC0tc2VydmUtc2ltLXBhbmVsLWJnLCAjMTgxODE4KSIsYm9yZGVyOiIxcHggc29saWQgcmdiYSgyNTUsMjU1LDI1NSwwLjEyKSIsY29sb3I6InJnYmEoMjU1LDI1NSwyNTUsMC45MikiLGZvbnRTaXplOjExLGZvbnRXZWlnaHQ6NTAwLGxpbmVIZWlnaHQ6MSxib3hTaGFkb3c6IjAgNHB4IDE0cHggcmdiYSgwLDAsMCwwLjMyKSIsdHJhbnNpdGlvbjoib3BhY2l0eSAwLjEycyBlYXNlLCB0cmFuc2Zvcm0gMC4xMnMgZWFzZSIsekluZGV4OjEwMH0sY2hpbGRyZW46Zn0pXX0pfSk7ZnVuY3Rpb24gWSQoJCxKKXtpZigkPT09IndhdGNoIilyZXR1cm4gcSQoKTtpZihKKXJldHVybmB4Y3J1biBzaW1jdGwgbGF1bmNoICR7Sn0gY29tLmFwcGxlLnNwcmluZ2JvYXJkYDtyZXR1cm4ic2VydmUtc2ltIGJ1dHRvbiBob21lIn1mdW5jdGlvbiBxJCgpe3JldHVyblsndGVsbCBhcHBsaWNhdGlvbiAiU3lzdGVtIEV2ZW50cyIgdG8gdGVsbCBwcm9jZXNzICJTaW11bGF0b3IiIHRvIHNldCBmcm9udG1vc3QgdG8gdHJ1ZScsJ3RlbGwgYXBwbGljYXRpb24gIlN5c3RlbSBFdmVudHMiIHRvIHRlbGwgcHJvY2VzcyAiU2ltdWxhdG9yIiB0byBwZXJmb3JtIGFjdGlvbiAiQVhSYWlzZSIgb2YgKGZpcnN0IHdpbmRvdyB3aG9zZSBuYW1lIGNvbnRhaW5zICJ3YXRjaE9TIiknLCd0ZWxsIGFwcGxpY2F0aW9uICJTeXN0ZW0gRXZlbnRzIiB0byB0ZWxsIHByb2Nlc3MgIlNpbXVsYXRvciIgdG8gY2xpY2sgbWVudSBpdGVtICJIb21lIiBvZiBtZW51ICJEZXZpY2UiIG9mIG1lbnUgYmFyIGl0ZW0gIkRldmljZSIgb2YgbWVudSBiYXIgMSddLm1hcCgoSik9PmAtZSAnJHtKfSdgKS5yZWR1Y2UoKEosUSk9PmAke0p9ICR7UX1gLCJvc2FzY3JpcHQiKX12YXIgRyQ9Sygic3ZnIix7d2lkdGg6IjE4IixoZWlnaHQ6IjE4Iix2aWV3Qm94OiIwIDAgMjQgMjQiLGZpbGw6Im5vbmUiLHN0cm9rZToiY3VycmVudENvbG9yIixzdHJva2VXaWR0aDoiMiIsc3Ryb2tlTGluZWNhcDoicm91bmQiLHN0cm9rZUxpbmVqb2luOiJyb3VuZCIsY2hpbGRyZW46SygicGF0aCIse2Q6Ik0zIDEwLjUgMTIgM2w5IDcuNVYyMGExIDEgMCAwIDEtMSAxaC01di03aC02djdINGExIDEgMCAwIDEtMS0xeiJ9KX0pLFYkPUsoInN2ZyIse3dpZHRoOiIxOCIsaGVpZ2h0OiIxOCIsdmlld0JveDoiMCAwIDQ0IDQ0IixmaWxsOiJub25lIix4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLGNoaWxkcmVuOksoInBhdGgiLHtmaWxsUnVsZToiZXZlbm9kZCIsY2xpcFJ1bGU6ImV2ZW5vZGQiLGZpbGw6ImN1cnJlbnRDb2xvciIsZDoiTTQzLjY4NzUgMTIuNDY4OFY4LjI3MzQ0QzQzLjY4NzUgNS43MjY1NiA0Mi45NTMxIDMuNzEwOTQgNDEuNDg0NCAyLjIyNjU2QzQwLjAxNTYgMC43NDIxODggMzggMCAzNS40Mzc1IDBIMzEuMTQ4NEMzMC42MDE2IDAgMzAuMTMyOCAwLjE5NTMxMiAyOS43NDIyIDAuNTg1OTM4QzI5LjM1MTYgMC45NzY1NjIgMjkuMTU2MiAxLjQ0NTMxIDI5LjE1NjIgMS45OTIxOUMyOS4xNTYyIDIuNTIzNDQgMjkuMzUxNiAyLjk4NDM4IDI5Ljc0MjIgMy4zNzVDMzAuMTMyOCAzLjc2NTYyIDMwLjYwMTYgMy45NjA5NCAzMS4xNDg0IDMuOTYwOTRIMzUuNDM3NUMzNi43ODEyIDMuOTYwOTQgMzcuODM1OSA0LjM0Mzc1IDM4LjYwMTYgNS4xMDkzOEMzOS4zNTE2IDUuODc1IDM5LjcyNjYgNi45Mjk2OSAzOS43MjY2IDguMjczNDRWMTIuNDY4OEMzOS43MjY2IDEzIDM5LjkyMTkgMTMuNDYwOSA0MC4zMTI1IDEzLjg1MTZDNDAuNzAzMSAxNC4yNDIyIDQxLjE3MTkgMTQuNDM3NSA0MS43MTg4IDE0LjQzNzVDNDIuMjUgMTQuNDM3NSA0Mi43MTA5IDE0LjI0MjIgNDMuMTAxNiAxMy44NTE2QzQzLjQ5MjIgMTMuNDYwOSA0My42ODc1IDEzIDQzLjY4NzUgMTIuNDY4OFpNMCAxMi40Njg4QzAgMTMgMC4xOTUzMTIgMTMuNDYwOSAwLjU4NTkzOCAxMy44NTE2QzAuOTc2NTYyIDE0LjI0MjIgMS40Mzc1IDE0LjQzNzUgMS45Njg3NSAxNC40Mzc1QzIuNSAxNC40Mzc1IDIuOTYwOTQgMTQuMjQyMiAzLjM1MTU2IDEzLjg1MTZDMy43NDIxOSAxMy40NjA5IDMuOTM3NSAxMyAzLjkzNzUgMTIuNDY4OFY4LjI3MzQ0QzMuOTM3NSA2LjkyOTY5IDQuMzIwMzEgNS44NzUgNS4wODU5NCA1LjEwOTM4QzUuODM1OTQgNC4zNDM3NSA2Ljg5MDYyIDMuOTYwOTQgOC4yNSAzLjk2MDk0SDEyLjUzOTFDMTMuMDg1OSAzLjk2MDk0IDEzLjU1NDcgMy43NjU2MiAxMy45NDUzIDMuMzc1QzE0LjMyMDMgMi45ODQzOCAxNC41MDc4IDIuNTIzNDQgMTQuNTA3OCAxLjk5MjE5QzE0LjUwNzggMS40NDUzMSAxNC4zMjAzIDAuOTc2NTYyIDEzLjk0NTMgMC41ODU5MzhDMTMuNTU0NyAwLjE5NTMxMiAxMy4wODU5IDAgMTIuNTM5MSAwSDguMjVDNS42ODc1IDAgMy42NzE4OCAwLjc0MjE4OCAyLjIwMzEyIDIuMjI2NTZDMC43MzQzNzUgMy43MTA5NCAwIDUuNzI2NTYgMCA4LjI3MzQ0VjEyLjQ2ODhaTTQzLjY4NzUgMzEuMjQyMkM0My42ODc1IDMwLjcxMDkgNDMuNDkyMiAzMC4yNSA0My4xMDE2IDI5Ljg1OTRDNDIuNzEwOSAyOS40Njg4IDQyLjI1IDI5LjI3MzQgNDEuNzE4OCAyOS4yNzM0QzQxLjE3MTkgMjkuMjczNCA0MC43MDMxIDI5LjQ2ODggNDAuMzEyNSAyOS44NTk0QzM5LjkyMTkgMzAuMjUgMzkuNzI2NiAzMC43MTA5IDM5LjcyNjYgMzEuMjQyMlYzNS40Mzc1QzM5LjcyNjYgMzYuNzgxMiAzOS4zNTE2IDM3LjgzNTkgMzguNjAxNiAzOC42MDE2QzM3LjgzNTkgMzkuMzY3MiAzNi43ODEyIDM5Ljc1IDM1LjQzNzUgMzkuNzVIMzEuMTQ4NEMzMC42MDE2IDM5Ljc1IDMwLjEzMjggMzkuOTQ1MyAyOS43NDIyIDQwLjMzNTlDMjkuMzUxNiA0MC43MjY2IDI5LjE1NjIgNDEuMTg3NSAyOS4xNTYyIDQxLjcxODhDMjkuMTU2MiA0Mi4yNjU2IDI5LjM1MTYgNDIuNzI2NiAyOS43NDIyIDQzLjEwMTZDMzAuMTMyOCA0My40OTIyIDMwLjYwMTYgNDMuNjg3NSAzMS4xNDg0IDQzLjY4NzVIMzUuNDM3NUMzOCA0My42ODc1IDQwLjAxNTYgNDIuOTQ1MyA0MS40ODQ0IDQxLjQ2MDlDNDIuOTUzMSAzOS45OTIyIDQzLjY4NzUgMzcuOTg0NCA0My42ODc1IDM1LjQzNzVWMzEuMjQyMlpNMCAzMS4yNDIyVjM1LjQzNzVDMCAzNy45ODQ0IDAuNzM0Mzc1IDM5Ljk5MjIgMi4yMDMxMiA0MS40NjA5QzMuNjcxODggNDIuOTQ1MyA1LjY4NzUgNDMuNjg3NSA4LjI1IDQzLjY4NzVIMTIuNTM5MUMxMy4wODU5IDQzLjY4NzUgMTMuNTU0NyA0My40OTIyIDEzLjk0NTMgNDMuMTAxNkMxNC4zMjAzIDQyLjcyNjYgMTQuNTA3OCA0Mi4yNjU2IDE0LjUwNzggNDEuNzE4OEMxNC41MDc4IDQxLjE4NzUgMTQuMzIwMyA0MC43MjY2IDEzLjk0NTMgNDAuMzM1OUMxMy41NTQ3IDM5Ljk0NTMgMTMuMDg1OSAzOS43NSAxMi41MzkxIDM5Ljc1SDguMjVDNi44OTA2MiAzOS43NSA1LjgzNTk0IDM5LjM2NzIgNS4wODU5NCAzOC42MDE2QzQuMzIwMzEgMzcuODM1OSAzLjkzNzUgMzYuNzgxMiAzLjkzNzUgMzUuNDM3NVYzMS4yNDIyQzMuOTM3NSAzMC43MTA5IDMuNzQyMTkgMzAuMjUgMy4zNTE1NiAyOS44NTk0QzIuOTYwOTQgMjkuNDY4OCAyLjUgMjkuMjczNCAxLjk2ODc1IDI5LjI3MzRDMS40Mzc1IDI5LjI3MzQgMC45NzY1NjIgMjkuNDY4OCAwLjU4NTkzOCAyOS44NTk0QzAuMTk1MzEyIDMwLjI1IDAgMzAuNzEwOSAwIDMxLjI0MjJaTTMxLjU5MzggMzEuODA0N0MzMi43ODEyIDMxLjgwNDcgMzMuNjcxOSAzMS41MTU2IDM0LjI2NTYgMzAuOTM3NUMzNC44NTk0IDMwLjM0MzggMzUuMTU2MiAyOS40Njg4IDM1LjE1NjIgMjguMzEyNVYxNi43MTA5QzM1LjE1NjIgMTUuNTM5MSAzNC44NTk0IDE0LjY2NDEgMzQuMjY1NiAxNC4wODU5QzMzLjY3MTkgMTMuNDkyMiAzMi43ODEyIDEzLjE5NTMgMzEuNTkzOCAxMy4xOTUzSDI4Ljg5ODRDMjguNDYwOSAxMy4xOTUzIDI4LjE0ODQgMTMuMTQwNiAyNy45NjA5IDEzLjAzMTJDMjcuNzU3OCAxMi45MjE5IDI3LjUyMzQgMTIuNzI2NiAyNy4yNTc4IDEyLjQ0NTNMMjYuMzY3MiAxMS41MDc4QzI2LjA4NTkgMTEuMTk1MyAyNS43ODEyIDEwLjk2ODggMjUuNDUzMSAxMC44MjgxQzI1LjEwOTQgMTAuNjcxOSAyNC42NTYyIDEwLjU5MzggMjQuMDkzOCAxMC41OTM4SDE5LjYxNzJDMTkuMDU0NyAxMC41OTM4IDE4LjYwOTQgMTAuNjcxOSAxOC4yODEyIDEwLjgyODFDMTcuOTM3NSAxMC45Njg4IDE3LjYyNSAxMS4xOTUzIDE3LjM0MzggMTEuNTA3OEwxNi40NzY2IDEyLjQ0NTNDMTYuMjEwOSAxMi43NDIyIDE1Ljk3NjYgMTIuOTQ1MyAxNS43NzM0IDEzLjA1NDdDMTUuNTU0NyAxMy4xNDg0IDE1LjIzNDQgMTMuMTk1MyAxNC44MTI1IDEzLjE5NTNIMTIuMDQ2OUMxMC44OTA2IDEzLjE5NTMgMTAuMDE1NiAxMy40OTIyIDkuNDIxODggMTQuMDg1OUM4LjgxMjUgMTQuNjY0MSA4LjUwNzgxIDE1LjUzOTEgOC41MDc4MSAxNi43MTA5VjI4LjMxMjVDOC41MDc4MSAyOS40Njg4IDguODEyNSAzMC4zNDM4IDkuNDIxODggMzAuOTM3NUMxMC4wMTU2IDMxLjUxNTYgMTAuODkwNiAzMS44MDQ3IDEyLjA0NjkgMzEuODA0N0gzMS41OTM4Wk0yMS43OTY5IDI4Ljk0NTNDMjAuNTkzOCAyOC45NDUzIDE5LjUgMjguNjY0MSAxOC41MTU2IDI4LjEwMTZDMTcuNTE1NiAyNy41MjM0IDE2LjcyNjYgMjYuNzQyMiAxNi4xNDg0IDI1Ljc1NzhDMTUuNTU0NyAyNC43NTc4IDE1LjI1NzggMjMuNjMyOCAxNS4yNTc4IDIyLjM4MjhDMTUuMjU3OCAyMS4xNzk3IDE1LjU1NDcgMjAuMDg1OSAxNi4xNDg0IDE5LjEwMTZDMTYuNzI2NiAxOC4xMDE2IDE3LjUxNTYgMTcuMzEyNSAxOC41MTU2IDE2LjczNDRDMTkuNSAxNi4xNDA2IDIwLjU5MzggMTUuODQzOCAyMS43OTY5IDE1Ljg0MzhDMjMuMDE1NiAxNS44NDM4IDI0LjEyNSAxNi4xNDA2IDI1LjEyNSAxNi43MzQ0QzI2LjEwOTQgMTcuMzEyNSAyNi44OTg0IDE4LjEwMTYgMjcuNDkyMiAxOS4xMDE2QzI4LjA3MDMgMjAuMDg1OSAyOC4zNTk0IDIxLjE3OTcgMjguMzU5NCAyMi4zODI4QzI4LjM1OTQgMjMuNjE3MiAyOC4wNzAzIDI0LjcyNjYgMjcuNDkyMiAyNS43MTA5QzI2Ljg5ODQgMjYuNjk1MyAyNi4xMDk0IDI3LjQ4NDQgMjUuMTI1IDI4LjA3ODFDMjQuMTI1IDI4LjY1NjIgMjMuMDE1NiAyOC45NDUzIDIxLjc5NjkgMjguOTQ1M1pNMjEuODIwMyAyNi45MDYyQzIyLjY0ODQgMjYuOTA2MiAyMy40MDYyIDI2LjcxMDkgMjQuMDkzOCAyNi4zMjAzQzI0Ljc4MTIgMjUuOTE0MSAyNS4zMjgxIDI1LjM2NzIgMjUuNzM0NCAyNC42Nzk3QzI2LjEyNSAyMy45OTIyIDI2LjMyMDMgMjMuMjI2NiAyNi4zMjAzIDIyLjM4MjhDMjYuMzIwMyAyMS41NzAzIDI2LjEyNSAyMC44MjAzIDI1LjczNDQgMjAuMTMyOEMyNS4zMjgxIDE5LjQ0NTMgMjQuNzgxMiAxOC45MDYyIDI0LjA5MzggMTguNTE1NkMyMy40MDYyIDE4LjEwOTQgMjIuNjQ4NCAxNy45MDYyIDIxLjgyMDMgMTcuOTA2MkMyMC45OTIyIDE3LjkwNjIgMjAuMjQyMiAxOC4xMDk0IDE5LjU3MDMgMTguNTE1NkMxOC44ODI4IDE4LjkwNjIgMTguMzM1OSAxOS40NDUzIDE3LjkyOTcgMjAuMTMyOEMxNy41MjM0IDIwLjgyMDMgMTcuMzIwMyAyMS41NzAzIDE3LjMyMDMgMjIuMzgyOEMxNy4zMjAzIDIzLjIyNjYgMTcuNTIzNCAyMy45OTIyIDE3LjkyOTcgMjQuNjc5N0MxOC4zMzU5IDI1LjM2NzIgMTguODgyOCAyNS45MTQxIDE5LjU3MDMgMjYuMzIwM0MyMC4yNDIyIDI2LjcxMDkgMjAuOTkyMiAyNi45MDYyIDIxLjgyMDMgMjYuOTA2MlpNMTIuNjMyOCAxOC45ODQ0QzEyLjIxMDkgMTguOTg0NCAxMS44NTk0IDE4LjgzNTkgMTEuNTc4MSAxOC41MzkxQzExLjI4MTIgMTguMjQyMiAxMS4xMzI4IDE3Ljg5MDYgMTEuMTMyOCAxNy40ODQ0QzExLjEzMjggMTcuMDYyNSAxMS4yODEyIDE2LjcxMDkgMTEuNTc4MSAxNi40Mjk3QzExLjg1OTQgMTYuMTMyOCAxMi4yMTA5IDE1Ljk4NDQgMTIuNjMyOCAxNS45ODQ0QzEzLjAzOTEgMTUuOTg0NCAxMy4zOTA2IDE2LjEzMjggMTMuNjg3NSAxNi40Mjk3QzEzLjk4NDQgMTYuNzEwOSAxNC4xMzI4IDE3LjA2MjUgMTQuMTMyOCAxNy40ODQ0QzE0LjEzMjggMTcuODkwNiAxMy45ODQ0IDE4LjI0MjIgMTMuNjg3NSAxOC41MzkxQzEzLjM5MDYgMTguODM1OSAxMy4wMzkxIDE4Ljk4NDQgMTIuNjMyOCAxOC45ODQ0WiJ9KX0pLEIkPUsoInN2ZyIse3dpZHRoOiIyMSIsaGVpZ2h0OiIyMSIsdmlld0JveDoiMCAwIDI0IDI0IixmaWxsOiJub25lIixzdHJva2U6ImN1cnJlbnRDb2xvciIsc3Ryb2tlV2lkdGg6IjIiLHN0cm9rZUxpbmVjYXA6InJvdW5kIixzdHJva2VMaW5lam9pbjoicm91bmQiLHhtbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsY2hpbGRyZW46W0soInBhdGgiLHtkOiJNMTIgNUg2YTIgMiAwIDAgMC0yIDJ2MyJ9KSxLKCJwYXRoIix7ZDoibTkgOCAzLTMtMy0zIn0pLEsoInBhdGgiLHtkOiJNNCAxNHY0YTIgMiAwIDAgMCAyIDJoMTJhMiAyIDAgMCAwIDItMlY3YTIgMiAwIDAgMC0yLTJoLTIifSldfSksTiQ9VzAoZnVuY3Rpb24oe29uQ2xpY2s6SiwuLi5RfSxaKXtsZXQgWD1PNSgiSG9tZUJ1dHRvbiIpO3JldHVybiBLKEY1LHtyZWY6WiwiYXJpYS1sYWJlbCI6IkhvbWUiLG9uQ2xpY2s6KFkpPT57aWYoSj8uKFkpLFkuZGVmYXVsdFByZXZlbnRlZClyZXR1cm47WC5leGVjKFkkKFguZGV2aWNlVHlwZSxYLmRldmljZVVkaWQpKX0sLi4uUSxjaGlsZHJlbjpHJH0pfSksTCQ9VzAoZnVuY3Rpb24oe29uQ2xpY2s6SiwuLi5RfSxaKXtsZXQgWD1PNSgiU2NyZWVuc2hvdEJ1dHRvbiIpO3JldHVybiBLKEY1LHtyZWY6WiwiYXJpYS1sYWJlbCI6IlNjcmVlbnNob3QiLG9uQ2xpY2s6KFkpPT57aWYoSj8uKFkpLFkuZGVmYXVsdFByZXZlbnRlZClyZXR1cm47aWYoWC5kZXZpY2VVZGlkKVguZXhlYyhgeGNydW4gc2ltY3RsIGlvICR7WC5kZXZpY2VVZGlkfSBzY3JlZW5zaG90IH4vRGVza3RvcC9zZXJ2ZS1zaW0tc2NyZWVuc2hvdC0kKGRhdGUgKyVzKS5wbmdgKX0sLi4uUSxjaGlsZHJlbjpWJH0pfSkseiQ9VzAoZnVuY3Rpb24oe29uQ2xpY2s6Sixmb3JjZURpc2FibGVkOlEsLi4uWn0sWCl7bGV0IFk9TzUoIlJvdGF0ZUJ1dHRvbiIpLHE9WS5kZXZpY2VUeXBlPT09IndhdGNoInx8WS5kZXZpY2VUeXBlPT09InZpc2lvbiIsW0csVl09VygicG9ydHJhaXQiKTtyZXR1cm4gYigoKT0+e1YoWS5vcmllbnRhdGlvbj8/InBvcnRyYWl0Iil9LFtZLmRldmljZVVkaWQsWS5vcmllbnRhdGlvbl0pLEsoRjUse3JlZjpYLCJhcmlhLWxhYmVsIjoiUm90YXRlIGRldmljZSIsZm9yY2VEaXNhYmxlZDpRfHxxLG9uQ2xpY2s6KEIpPT57aWYoSj8uKEIpLEIuZGVmYXVsdFByZXZlbnRlZClyZXR1cm47aWYoIVkuZGV2aWNlVWRpZHx8cSlyZXR1cm47bGV0IE49XzJbWS5vcmllbnRhdGlvbj8/R107aWYoVihOKSxZLm9uUm90YXRlKVkub25Sb3RhdGUoTik7ZWxzZSBZLmV4ZWMoYHNlcnZlLXNpbSByb3RhdGUgJHtOfSAtZCAke1kuZGV2aWNlVWRpZH1gKX0sLi4uWixjaGlsZHJlbjpCJH0pfSkscjE9JCQ7cjEuVGl0bGU9USQ7cjEuQWN0aW9ucz1LJDtyMS5CdXR0b249RjU7cjEuSG9tZUJ1dHRvbj1OJDtyMS5TY3JlZW5zaG90QnV0dG9uPUwkO3IxLlJvdGF0ZUJ1dHRvbj16JDt2YXIgTTU9KC4uLiQpPT4kLmZpbHRlcigoSixRLFopPT57cmV0dXJuIEJvb2xlYW4oSikmJkoudHJpbSgpIT09IiImJlouaW5kZXhPZihKKT09PVF9KS5qb2luKCIgIikudHJpbSgpO3ZhciBQOT0oJCk9PiQucmVwbGFjZSgvKFthLXowLTldKShbQS1aXSkvZywiJDEtJDIiKS50b0xvd2VyQ2FzZSgpO3ZhciBfOT0oJCk9PiQucmVwbGFjZSgvXihbQS1aXSl8W1xzLV9dKyhcdykvZywoSixRLFopPT5aP1oudG9VcHBlckNhc2UoKTpRLnRvTG93ZXJDYXNlKCkpO3ZhciBNMz0oJCk9PntsZXQgSj1fOSgkKTtyZXR1cm4gSi5jaGFyQXQoMCkudG9VcHBlckNhc2UoKStKLnNsaWNlKDEpfTt2YXIgVzU9e3htbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsd2lkdGg6MjQsaGVpZ2h0OjI0LHZpZXdCb3g6IjAgMCAyNCAyNCIsZmlsbDoibm9uZSIsc3Ryb2tlOiJjdXJyZW50Q29sb3IiLHN0cm9rZVdpZHRoOjIsc3Ryb2tlTGluZWNhcDoicm91bmQiLHN0cm9rZUxpbmVqb2luOiJyb3VuZCJ9O3ZhciBEOT0oJCk9Pntmb3IobGV0IEogaW4gJClpZihKLnN0YXJ0c1dpdGgoImFyaWEtIil8fEo9PT0icm9sZSJ8fEo9PT0idGl0bGUiKXJldHVybiEwO3JldHVybiExfTt2YXIgQyQ9ejAoe30pO3ZhciBUOT0oKT0+QzAoQyQpO3ZhciB3OT1XMCgoe2NvbG9yOiQsc2l6ZTpKLHN0cm9rZVdpZHRoOlEsYWJzb2x1dGVTdHJva2VXaWR0aDpaLGNsYXNzTmFtZTpYPSIiLGNoaWxkcmVuOlksaWNvbk5vZGU6cSwuLi5HfSxWKT0+e2xldHtzaXplOkI9MjQsc3Ryb2tlV2lkdGg6Tj0yLGFic29sdXRlU3Ryb2tlV2lkdGg6ej0hMSxjb2xvcjpMPSJjdXJyZW50Q29sb3IiLGNsYXNzTmFtZTpDPSIifT1UOSgpPz97fSxBPVo/P3o/TnVtYmVyKFE/P04pKjI0L051bWJlcihKPz9CKTpRPz9OO3JldHVybiBwMSgic3ZnIix7cmVmOlYsLi4uVzUsd2lkdGg6Sj8/Qj8/VzUud2lkdGgsaGVpZ2h0Oko/P0I/P1c1LmhlaWdodCxzdHJva2U6JD8/TCxzdHJva2VXaWR0aDpBLGNsYXNzTmFtZTpNNSgibHVjaWRlIixDLFgpLC4uLiFZJiYhRDkoRykmJnsiYXJpYS1oaWRkZW4iOiJ0cnVlIn0sLi4uR30sWy4uLnEubWFwKChbVSxIXSk9PnAxKFUsSCkpLC4uLkFycmF5LmlzQXJyYXkoWSk/WTpbWV1dKX0pO3ZhciBBMT0oJCxKKT0+e2xldCBRPVcwKCh7Y2xhc3NOYW1lOlosLi4uWH0sWSk9PnAxKHc5LHtyZWY6WSxpY29uTm9kZTpKLGNsYXNzTmFtZTpNNShgbHVjaWRlLSR7UDkoTTMoJCkpfWAsYGx1Y2lkZS0keyR9YCxaKSwuLi5YfSkpO3JldHVybiBRLmRpc3BsYXlOYW1lPU0zKCQpLFF9O3ZhciBVJD1bWyJyZWN0Iix7eDoiMiIseToiNCIsd2lkdGg6IjIwIixoZWlnaHQ6IjE2IixyeDoiMiIsa2V5OiJpenhsYW8ifV0sWyJwYXRoIix7ZDoiTTEwIDR2NCIsa2V5OiJwcDh1ODAifV0sWyJwYXRoIix7ZDoiTTIgOGgyMCIsa2V5OiJkMTFjczcifV0sWyJwYXRoIix7ZDoiTTYgNHY0IixrZXk6IjFzdnRqdyJ9XV0sVDI9QTEoImFwcC13aW5kb3ciLFUkKTt2YXIgSCQ9W1sicGF0aCIse2Q6Ik03IDdoMTB2MTAiLGtleToiMXRpdm45In1dLFsicGF0aCIse2Q6Ik03IDE3IDE3IDciLGtleToiMXZraXphIn1dXSx3Mj1BMSgiYXJyb3ctdXAtcmlnaHQiLEgkKTt2YXIgQSQ9W1sicGF0aCIse2Q6Ik0yMCA2IDkgMTdsLTUtNSIsa2V5OiIxZ21mMmMifV1dLEUyPUExKCJjaGVjayIsQSQpO3ZhciBrJD1bWyJwYXRoIix7ZDoibTYgOSA2IDYgNi02IixrZXk6InFydW5zbCJ9XV0sSTI9QTEoImNoZXZyb24tZG93biIsayQpO3ZhciBPJD1bWyJwYXRoIix7ZDoibTkgMTggNi02LTYtNiIsa2V5OiJtdGhod3EifV1dLHkyPUExKCJjaGV2cm9uLXJpZ2h0IixPJCk7dmFyIEYkPVtbInBhdGgiLHtkOiJNMTIgNmEyIDIgMCAwIDEgMy40MTQtMS40MTRsNiA2YTIgMiAwIDAgMSAwIDIuODI4bC02IDZBMiAyIDAgMCAxIDEyIDE4eiIsa2V5OiJiMTloNXEifV0sWyJwYXRoIix7ZDoiTTIgNmEyIDIgMCAwIDEgMy40MTQtMS40MTRsNiA2YTIgMiAwIDAgMSAwIDIuODI4bC02IDZBMiAyIDAgMCAxIDIgMTh6IixrZXk6Img3aDVnZSJ9XV0sYjI9QTEoImZhc3QtZm9yd2FyZCIsRiQpO3ZhciBNJD1bWyJwYXRoIix7ZDoibTMgNyA1IDUtNSA1VjciLGtleToiY291aGk3In1dLFsicGF0aCIse2Q6Im0yMSA3LTUgNSA1IDVWNyIsa2V5OiI2b3VpYTcifV0sWyJwYXRoIix7ZDoiTTEyIDIwdjIiLGtleToiMWxoMWtnIn1dLFsicGF0aCIse2Q6Ik0xMiAxNHYyIixrZXk6IjhqY3h1ZCJ9XSxbInBhdGgiLHtkOiJNMTIgOHYyIixrZXk6IjF3b3FpdiJ9XSxbInBhdGgiLHtkOiJNMTIgMnYyIixrZXk6InR1czAzbSJ9XV0sUzI9QTEoImZsaXAtaG9yaXpvbnRhbC0yIixNJCk7dmFyIFckPVtbImNpcmNsZSIse2N4OiIxMiIsY3k6IjEyIixyOiIxMCIsa2V5OiIxbWdsYXkifV0sWyJwYXRoIix7ZDoiTTEyIDJhMTQuNSAxNC41IDAgMCAwIDAgMjAgMTQuNSAxNC41IDAgMCAwIDAtMjAiLGtleToiMTNvMXpsIn1dLFsicGF0aCIse2Q6Ik0yIDEyaDIwIixrZXk6IjlpNHB1NCJ9XV0seDI9QTEoImdsb2JlIixXJCk7dmFyIFAkPVtbInBhdGgiLHtkOiJtMjIgMTEtMS4yOTYtMS4yOTZhMi40IDIuNCAwIDAgMC0zLjQwOCAwTDExIDE2IixrZXk6IjlrenkzNSJ9XSxbInBhdGgiLHtkOiJNNCA4YTIgMiAwIDAgMC0yIDJ2MTBhMiAyIDAgMCAwIDIgMmgxMGEyIDIgMCAwIDAgMi0yIixrZXk6IjF0MGYwdCJ9XSxbImNpcmNsZSIse2N4OiIxMyIsY3k6IjciLHI6IjEiLGZpbGw6ImN1cnJlbnRDb2xvciIsa2V5OiIxb2J1czYifV0sWyJyZWN0Iix7eDoiOCIseToiMiIsd2lkdGg6IjE0IixoZWlnaHQ6IjE0IixyeDoiMiIsa2V5OiIxZ3ZoYnkifV1dLHYyPUExKCJpbWFnZXMiLFAkKTt2YXIgXyQ9W1sicmVjdCIse3dpZHRoOiIxOCIsaGVpZ2h0OiIxOCIseDoiMyIseToiMyIscng6IjIiLGtleToiYWZpdHY3In1dLFsicGF0aCIse2Q6Ik05IDN2MTgiLGtleToiZmgzaHFhIn1dXSxJMD1BMSgicGFuZWwtbGVmdCIsXyQpO3ZhciBEJD1bWyJyZWN0Iix7d2lkdGg6IjE4IixoZWlnaHQ6IjE4Iix4OiIzIix5OiIzIixyeDoiMiIsa2V5OiJhZml0djcifV0sWyJwYXRoIix7ZDoiTTE1IDN2MTgiLGtleToiMTRudnAwIn1dXSxqMj1BMSgicGFuZWwtcmlnaHQiLEQkKTt2YXIgVCQ9W1sicGF0aCIse2Q6Ik0zIDEyYTkgOSAwIDEgMCA5LTkgOS43NSA5Ljc1IDAgMCAwLTYuNzQgMi43NEwzIDgiLGtleToiMTM1N2UzIn1dLFsicGF0aCIse2Q6Ik0zIDN2NWg1IixrZXk6IjF4aHE4YSJ9XV0saDI9QTEoInJvdGF0ZS1jY3ciLFQkKTt2YXIgdyQ9W1sicGF0aCIse2Q6Im0yMSAyMS00LjM0LTQuMzQiLGtleToiMTRqN3JqIn1dLFsiY2lyY2xlIix7Y3g6IjExIixjeToiMTEiLHI6IjgiLGtleToiNGVqOTd1In1dXSxSMj1BMSgic2VhcmNoIix3JCk7dmFyIEUkPVtbInBhdGgiLHtkOiJNMTAgNUgzIixrZXk6IjFxZ2ZhdyJ9XSxbInBhdGgiLHtkOiJNMTIgMTlIMyIsa2V5OiJ5aG1uMWoifV0sWyJwYXRoIix7ZDoiTTE0IDN2NCIsa2V5OiIxc3VhMDMifV0sWyJwYXRoIix7ZDoiTTE2IDE3djQiLGtleToiMXEwcjE0In1dLFsicGF0aCIse2Q6Ik0yMSAxMmgtOSIsa2V5OiIxbzRsc3EifV0sWyJwYXRoIix7ZDoiTTIxIDE5aC01IixrZXk6IjFybHQxcCJ9XSxbInBhdGgiLHtkOiJNMjEgNWgtNyIsa2V5OiIxb3N6ejIifV0sWyJwYXRoIix7ZDoiTTggMTB2NCIsa2V5OiJ0Z3B4cWsifV0sWyJwYXRoIix7ZDoiTTggMTJIMyIsa2V5OiJhN3M0amIifV1dLHgwPUExKCJzbGlkZXJzLWhvcml6b250YWwiLEUkKTt2YXIgSSQ9W1sicGF0aCIse2Q6Ik0xMi4wMzQgMTIuNjgxYS40OTguNDk4IDAgMCAxIC42NDctLjY0N2w5IDMuNWEuNS41IDAgMCAxLS4wMzMuOTQzbC0zLjQ0NCAxLjA2OGExIDEgMCAwIDAtLjY2LjY2bC0xLjA2NyAzLjQ0M2EuNS41IDAgMCAxLS45NDMuMDMzeiIsa2V5OiJ4d256aXAifV0sWyJwYXRoIix7ZDoiTTIxIDExVjVhMiAyIDAgMCAwLTItMkg1YTIgMiAwIDAgMC0yIDJ2MTRhMiAyIDAgMCAwIDIgMmg2IixrZXk6IjE0cnN2cSJ9XV0sbTA9QTEoInNxdWFyZS1tb3VzZS1wb2ludGVyIixJJCk7dmFyIHkkPVtbInBhdGgiLHtkOiJNMTIgM3YxMiIsa2V5OiIxeDBqNXMifV0sWyJwYXRoIix7ZDoibTE3IDgtNS01LTUgNSIsa2V5OiI3cTk3cjgifV0sWyJwYXRoIix7ZDoiTTIxIDE1djRhMiAyIDAgMCAxLTIgMkg1YTIgMiAwIDAgMS0yLTJ2LTQiLGtleToiaWg3bjNoIn1dXSxnMj1BMSgidXBsb2FkIix5JCk7dmFyIGIkPVtbInBhdGgiLHtkOiJtMTYgMTMgNS4yMjMgMy40ODJhLjUuNSAwIDAgMCAuNzc3LS40MTZWNy44N2EuNS41IDAgMCAwLS43NTItLjQzMkwxNiAxMC41IixrZXk6ImZ0eW1lYyJ9XSxbInJlY3QiLHt4OiIyIix5OiI2Iix3aWR0aDoiMTQiLGhlaWdodDoiMTIiLHJ4OiIyIixrZXk6IjE1OHgwMSJ9XV0sbzA9QTEoInZpZGVvIixiJCk7dmFyIFMkPVtbInBhdGgiLHtkOiJNMTggNiA2IDE4IixrZXk6IjFibDVmOCJ9XSxbInBhdGgiLHtkOiJtNiA2IDEyIDEyIixrZXk6ImQ4Yms2diJ9XV0sRzA9QTEoIngiLFMkKTtmdW5jdGlvbiBtMih7b3BlbjokfSl7cmV0dXJuIEsoInN2ZyIse3dpZHRoOiIxMCIsaGVpZ2h0OiIxMCIsdmlld0JveDoiMCAwIDI0IDI0IixmaWxsOiJub25lIixzdHJva2U6ImN1cnJlbnRDb2xvciIsc3Ryb2tlV2lkdGg6IjIuNSIsc3Ryb2tlTGluZWNhcDoicm91bmQiLHN0cm9rZUxpbmVqb2luOiJyb3VuZCIsY2xhc3NOYW1lOiJsZW0tY2hldnJvbiB0ZXh0LXdoaXRlLzUwIixzdHlsZTp7dHJhbnNmb3JtOiQ/InJvdGF0ZSgxODBkZWcpIjoicm90YXRlKDBkZWcpIn0sY2hpbGRyZW46SygicG9seWxpbmUiLHtwb2ludHM6IjYgOSAxMiAxNSAxOCA5In0pfSl9ZnVuY3Rpb24gUDUoe2RpcjokfSl7cmV0dXJuIEsoInN2ZyIse3dpZHRoOiI5IixoZWlnaHQ6IjkiLHZpZXdCb3g6IjAgMCAyNCAyNCIsZmlsbDoiY3VycmVudENvbG9yIixjbGFzc05hbWU6Im1yLVszcHhdIixjaGlsZHJlbjokPT09InVwIj9LKCJwb2x5Z29uIix7cG9pbnRzOiIxMiw0IDIwLDE4IDQsMTgifSk6SygicG9seWdvbiIse3BvaW50czoiNCw2IDIwLDYgMTIsMjAifSl9KX1mdW5jdGlvbiBmMigpe3JldHVybiBLKCJzdmciLHt3aWR0aDoiMTEiLGhlaWdodDoiMTEiLHZpZXdCb3g6IjAgMCAyNCAyNCIsZmlsbDoiY3VycmVudENvbG9yIixjaGlsZHJlbjpLKCJwb2x5Z29uIix7cG9pbnRzOiI2LDQgMjAsMTIgNiwyMCJ9KX0pfWZ1bmN0aW9uIFczKCl7cmV0dXJuIEsoInN2ZyIse3dpZHRoOiIxMSIsaGVpZ2h0OiIxMSIsdmlld0JveDoiMCAwIDI0IDI0IixmaWxsOiJjdXJyZW50Q29sb3IiLGNoaWxkcmVuOltLKCJyZWN0Iix7eDoiNiIseToiNCIsd2lkdGg6IjQiLGhlaWdodDoiMTYifSksSygicmVjdCIse3g6IjE0Iix5OiI0Iix3aWR0aDoiNCIsaGVpZ2h0OiIxNiJ9KV19KX1mdW5jdGlvbiBwMigpe3JldHVybiBLKCJzdmciLHt3aWR0aDoiMTAiLGhlaWdodDoiMTAiLHZpZXdCb3g6IjAgMCAyNCAyNCIsZmlsbDoiY3VycmVudENvbG9yIixjaGlsZHJlbjpLKCJyZWN0Iix7eDoiNSIseToiNSIsd2lkdGg6IjE0IixoZWlnaHQ6IjE0IixyeDoiMS41In0pfSl9ZnVuY3Rpb24gUDMoKXtyZXR1cm4gSyhiMix7c2l6ZToxMixzdHJva2VXaWR0aDoyLCJhcmlhLWhpZGRlbiI6InRydWUifSl9ZnVuY3Rpb24gXzMoKXtyZXR1cm4gSygic3ZnIix7d2lkdGg6IjkiLGhlaWdodDoiMTQiLHZpZXdCb3g6IjQgMiA5IDEzIixmaWxsOiJjdXJyZW50Q29sb3IiLHhtbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsImFyaWEtaGlkZGVuIjoidHJ1ZSIsY2hpbGRyZW46SygicGF0aCIse2Q6Ik02LjAwODUyIDE0LjgwNTRDNS44OTE4MSAxNC45MzUgNS43NTgxNSAxNC45OTk4IDUuNjA3NTYgMTQuOTk5OEM1LjQ1Njk2IDE1LjAwMzMgNS4zMjMzIDE0Ljk2MTMgNS4yMDY1OSAxNC44NzM3QzUuMDkzNjQgMTQuNzg2MSA1LjAyNTg3IDE0LjY3MjMgNS4wMDMyOCAxNC41MzIyQzQuOTg0NDYgMTQuMzkyMSA1LjA0NjU4IDE0LjI0NSA1LjE4OTY1IDE0LjA5MDlMNi45NDU5OSAxMi4xNTIyTDcuMjQ1MyAxMC44NzU1TDguMTk5NzEgMTEuOTg5M0w4LjA1ODUzIDEyLjM5MzlDOC4wMjA4OCAxMi40OTU1IDcuOTg2OTkgMTIuNTcwOCA3Ljk1Njg3IDEyLjYxOThDNy45MzA1MiAxMi42Njg4IDcuODc0MDQgMTIuNzQwNiA3Ljc4NzQ1IDEyLjgzNTJMNi4wMDg1MiAxNC44MDU0Wk0xMC4zNDU3IDE0LjY0MjVMOS4xMDMyOSAxMi4zMDQ2QzkuMDc2OTQgMTIuMjYyNSA5LjA1NDM1IDEyLjIyMjMgOS4wMzU1MyAxMi4xODM3QzkuMDE2NyAxMi4xNDUyIDguOTc3MTcgMTIuMDkwOSA4LjkxNjkzIDEyLjAyMDlMNy43MTk2OCAxMC42MTgxQzcuNDkzNzkgMTAuMzU1NCA3LjMzNzU0IDEwLjEyOTUgNy4yNTA5NSA5Ljk0MDM0QzcuMTY0MzUgOS43NDc3IDcuMTM0MjQgOS40OTkwMSA3LjE2MDU5IDkuMTk0MjlMNy4yNjIyNCA3Ljk4MDY1QzcuMjY5NzcgNy45MDcxIDcuMjMyMTIgNy44NTQ1NiA3LjE0OTI5IDcuODIzMDRDNy4wNjY0NyA3Ljc5MTUxIDYuOTg1NTIgNy44MDkwMyA2LjkwNjQ2IDcuODc1NTdMNi40NzE2MSA4LjI0MzM0TDYuMzQxNzIgOS42NzIzOUM2LjMyMjg5IDkuODQ3NTIgNi4yNjQ1NCA5Ljk3ODg3IDYuMTY2NjUgMTAuMDY2NEM2LjA2ODc2IDEwLjE1NCA1LjkzODg3IDEwLjE5MjUgNS43NzY5OCAxMC4xODJDNS42MTEzMiAxMC4xNzUgNS40ODMzMSAxMC4xMTkgNS4zOTI5NSAxMC4wMTM5QzUuMzA2MzYgOS45MDg4MiA1LjI2ODcxIDkuNzczOTcgNS4yODAwMSA5LjYwOTM1TDUuMzg3MzEgOC4zMDYzOUM1LjQwMjM3IDguMTI3NzYgNS40MzgxMyA3Ljk3NTQgNS40OTQ2MSA3Ljg0OTMxQzUuNTU0ODUgNy43MjMyMSA1LjY2MDI2IDcuNTkxODcgNS44MTA4NiA3LjQ1NTI3TDYuNzE0NDUgNi42MjUxNkM3LjAwNDM1IDYuMzYyNDcgNy4yNjk3NyA2LjE2MTA3IDcuNTEwNzMgNi4wMjA5NkM3Ljc1MTY4IDUuODc3MzYgOC4wMjg0MSA1LjgwNTU2IDguMzQwOSA1LjgwNTU2QzguNzU4OCA1LjgwNTU2IDkuMDc4ODIgNS45MzM0IDkuMzAwOTUgNi4xODkwOUM5LjUyNjg1IDYuNDQ0NzggOS42MjQ3NCA2Ljc2MTc2IDkuNTk0NjIgNy4xNDAwNEw5LjQ3NjAyIDguNzMxOTVDOS40NTM0MyA5LjAxNTY2IDkuNDE5NTUgOS4yNjI1OSA5LjM3NDM3IDkuNDcyNzVDOS4zMjkxOSA5LjY4MjkgOS4yNTM4OSA5LjkyOTgzIDkuMTQ4NDcgMTAuMjEzNUw5LjA5MiAxMC4zNjA2TDkuODY1NjkgMTEuMzc5OUM5LjkyMjE3IDExLjQ1MzQgOS45ODA1MiAxMS41MzQgMTAuMDQwOCAxMS42MjE2QzEwLjEwMSAxMS43MDkxIDEwLjE1MzcgMTEuNzk2NyAxMC4xOTg5IDExLjg4NDNMMTEuNDA3NCAxNC4xNjQ0QzExLjUwNTMgMTQuMzUwMSAxMS41MjQxIDE0LjUxMTIgMTEuNDYzOSAxNC42NDc4QzExLjQwMzcgMTQuNzg0NCAxMS4zMDIgMTQuODgyNSAxMS4xNTg5IDE0Ljk0MkMxMS4wMTk2IDE1LjAwMTUgMTAuODcwOSAxNS4wMTAzIDEwLjcxMjggMTQuOTY4M0MxMC41NTg0IDE0LjkyNjIgMTAuNDM2MSAxNC44MTc3IDEwLjM0NTcgMTQuNjQyNVpNMTIuNDA3IDcuOTY0ODlDMTIuNTg0IDcuOTY0ODkgMTIuNzI3IDguMDEwNDIgMTIuODM2MiA4LjEwMTQ5QzEyLjk0NTQgOC4xODkwNSAxMyA4LjMwNjM5IDEzIDguNDUzNUMxMyA4LjYxMTExIDEyLjk0NTQgOC43MzM3IDEyLjgzNjIgOC44MjEyN0MxMi43MzA4IDguOTA4ODMgMTIuNTg3NyA4Ljk1MjYxIDEyLjQwNyA4Ljk1MjYxSDExLjEzMDdDMTAuOTUzOCA4Ljk1MjYxIDEwLjgxNDUgOC45MzY4NSAxMC43MTI4IDguOTA1MzNDMTAuNjExMiA4Ljg3MDMgMTAuNTEzMyA4LjgwNzI2IDEwLjQxOTEgOC43MTYxOUwxMC4wNTIxIDguMzc5OTRMMTAuMTQyNCA3LjA0MDIxTDExLjAzNDcgNy45NjQ4OUgxMi40MDdaTTkuMDAxNjQgNS4zMTE2OUM4Ljc3MTk4IDUuMzExNjkgOC41NjMwMyA1LjI2MDkxIDguMzc0NzggNS4xNTkzM0M4LjE4NjUzIDUuMDU0MjYgOC4wMzU5NCA0LjkxNDE1IDcuOTIyOTkgNC43MzkwM0M3LjgxMzgxIDQuNTYzOSA3Ljc1OTIxIDQuMzY5NSA3Ljc1OTIxIDQuMTU1ODVDNy43NTkyMSAzLjk0MjE5IDcuODEzODEgMy43NDc4IDcuOTIyOTkgMy41NzI2N0M4LjAzNTk0IDMuMzk3NTQgOC4xODY1MyAzLjI1OTE5IDguMzc0NzggMy4xNTc2MkM4LjU2MzAzIDMuMDUyNTQgOC43NzE5OCAzIDkuMDAxNjQgM0M5LjIzMTMgMyA5LjQ0MDI2IDMuMDUyNTQgOS42Mjg1IDMuMTU3NjJDOS44MTY3NSAzLjI1OTE5IDkuOTY1NDYgMy4zOTc1NCAxMC4wNzQ2IDMuNTcyNjdDMTAuMTg3NiAzLjc0NzggMTAuMjQ0MSAzLjk0MjE5IDEwLjI0NDEgNC4xNTU4NUMxMC4yNDQxIDQuMzY5NSAxMC4xODc2IDQuNTYzOSAxMC4wNzQ2IDQuNzM5MDNDOS45NjU0NiA0LjkxNDE1IDkuODE2NzUgNS4wNTQyNiA5LjYyODUgNS4xNTkzM0M5LjQ0MDI2IDUuMjYwOTEgOS4yMzEzIDUuMzExNjkgOS4wMDE2NCA1LjMxMTY5WiJ9KX0pfWZ1bmN0aW9uIEQzKCl7cmV0dXJuIEsoInN2ZyIse3dpZHRoOiIxMSIsaGVpZ2h0OiIxNCIsdmlld0JveDoiMjYgMSAxMiAxNCIsZmlsbDoiY3VycmVudENvbG9yIix4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJhcmlhLWhpZGRlbiI6InRydWUiLGNoaWxkcmVuOksoInBhdGgiLHtkOiJNMzMuMjQzNyA0LjU4NDU5QzMzLjAwMDggNC41ODQ1OSAzMi43ODE3IDQuNTI3MjggMzIuNTg2NiA0LjQxMjY4QzMyLjM5MTUgNC4yOTQxMiAzMi4yMzQyIDQuMTM4MDEgMzIuMTE0NyAzLjk0NDM3QzMxLjk5OTIgMy43NDY3NyAzMS45NDE0IDMuNTI5NDEgMzEuOTQxNCAzLjI5MjI5QzMxLjk0MTQgMy4wNTEyMiAzMS45OTkyIDIuODMzODcgMzIuMTE0NyAyLjY0MDIyQzMyLjIzNDIgMi40NDY1NyAzMi4zOTE1IDIuMjkyNDUgMzIuNTg2NiAyLjE3Nzg0QzMyLjc4MTcgMi4wNTkyOCAzMy4wMDA4IDIgMzMuMjQzNyAyQzMzLjQ4MjYgMiAzMy42OTk3IDIuMDU5MjggMzMuODk0OCAyLjE3Nzg0QzM0LjA5MzkgMi4yOTI0NSAzNC4yNTEyIDIuNDQ2NTcgMzQuMzY2NyAyLjY0MDIyQzM0LjQ4NjIgMi44MzM4NyAzNC41NDU5IDMuMDUxMjIgMzQuNTQ1OSAzLjI5MjI5QzM0LjU0NTkgMy41Mjk0MSAzNC40ODYyIDMuNzQ2NzcgMzQuMzY2NyAzLjk0NDM3QzM0LjI1MTIgNC4xMzgwMSAzNC4wOTM5IDQuMjk0MTIgMzMuODk0OCA0LjQxMjY4QzMzLjY5OTcgNC41MjcyOCAzMy40ODI2IDQuNTg0NTkgMzMuMjQzNyA0LjU4NDU5Wk0zMS4yMDA3IDkuNzQxOTFDMzEuMDczMyA5LjY3MDc3IDMwLjk0MTkgOS41OTU2OCAzMC44MDY1IDkuNTE2NjRDMzAuNjc1IDkuNDM3NiAzMC41NTk2IDkuMzQyNzYgMzAuNDYgOS4yMzIxQzMwLjM2MDQgOS4xMTc0OSAzMC4yOTI3IDguOTc3MiAzMC4yNTY5IDguODExMjJDMzAuMjI1IDguNjQxMjggMzAuMjQ0OSA4LjQyOTg1IDMwLjMxNjYgOC4xNzY5M0wzMC44MDY1IDYuNDgxNTNDMzAuODM4MyA2LjM2NjkyIDMwLjgxODQgNi4yNzk5OCAzMC43NDY3IDYuMjIwN0MzMC42NzkgNi4xNTc0NyAzMC41OTc0IDYuMTI5ODEgMzAuNTAxOCA2LjEzNzcxTDI5LjY1OTUgNi4xOTY5OUwyOS40MDI3IDcuOTIyMDJDMjkuMzc4OCA4LjEwNzc3IDI5LjMxNTEgOC4yNDYwOSAyOS4yMTE1IDguMzM2OThDMjkuMTA4IDguNDI3ODggMjguOTcyNiA4LjQ2NTQyIDI4LjgwNTMgOC40NDk2MUMyOC42NDIgOC40MzM4IDI4LjUxODYgOC4zNjY2MiAyOC40MzQ5IDguMjQ4MDZDMjguMzUxMyA4LjEyOTUgMjguMzIxNCA3Ljk3NzM1IDI4LjM0NTMgNy43OTE2MUwyOC42MjYxIDUuNjgxMjZDMjguNjUgNS41MTEzMiAyOC43MTU3IDUuMzc0OTggMjguODIzMiA1LjI3MjIzQzI4LjkzMDggNS4xNjk0OCAyOS4wNjgxIDUuMTEyMTcgMjkuMjM1NCA1LjEwMDMyTDMxLjMzMjEgNC45NTIxMkMzMS44ODE3IDQuOTEyNiAzMi4zMzU3IDQuOTY5OSAzMi42OTQxIDUuMTI0MDNDMzMuMDUyNSA1LjI3ODE2IDMzLjM2NzEgNS41Mzg5OSAzMy42Mzc5IDUuOTA2NTJMMzQuNjcxNCA3LjMyMzNMMzYuMTcwOCA2LjY2NTNDMzYuMzM4IDYuNTkwMjEgMzYuNDg5MyA2LjU3NDQgMzYuNjI0OCA2LjYxNzg3QzM2Ljc2MDIgNi42NTczOSAzNi44NjU3IDYuNzUyMjQgMzYuOTQxNCA2LjkwMjQyQzM3LjAxMyA3LjA1MjU5IDM3LjAxOSA3LjE5NDg2IDM2Ljk1OTMgNy4zMjkyM0MzNi45MDM1IDcuNDYzNiAzNi43OTIgNy41NjgzMiAzNi42MjQ4IDcuNjQzNDFMMzQuNzMxMSA4LjQ3OTI1QzM0LjYwMzcgOC41Mzg1MyAzNC40NzQzIDguNTUwMzkgMzQuMzQyOCA4LjUxNDgyQzM0LjIxNTQgOC40NzUzIDM0LjExMzggOC40MDAyMSAzNC4wMzgyIDguMjg5NTZMMzMuMzgxMSA3LjMzNTE2QzMzLjMxMzQgNy4yNDAzMSAzMy4yMjk4IDcuMTk4ODEgMzMuMTMwMiA3LjIxMDY3QzMzLjAzMDYgNy4yMjI1MyAzMi45NjQ5IDcuMjgzNzggMzIuOTMzMSA3LjM5NDQ0TDMyLjQ5MSA4LjkyOTc4TDM0LjczMTEgMTAuMzg4MUMzNC44NDI2IDEwLjQ1OTIgMzQuOTIyMyAxMC41NTYgMzQuOTcwMSAxMC42Nzg1QzM1LjAxNzkgMTAuODAxIDM1LjAyOTggMTAuOTI1NSAzNS4wMDU5IDExLjA1MkMzNC45ODYgMTEuMTc0NSAzNC45MjgyIDExLjI3NTMgMzQuODMyNyAxMS4zNTQzTDMyLjc3MTggMTMuMDk3MUMzMi42MDg1IDEzLjIzNTQgMzIuNDQ1MiAxMy4yOTg3IDMyLjI4MTkgMTMuMjg2OEMzMi4xMjI2IDEzLjI3NSAzMS45OTMyIDEzLjIxMzcgMzEuODkzNyAxMy4xMDMxQzMxLjc5ODEgMTIuOTk2NCAzMS43NTQzIDEyLjg2NTkgMzEuNzYyMiAxMi43MTE4QzMxLjc3MDIgMTIuNTUzNyAzMS44NTM4IDEyLjQwNzUgMzIuMDEzMSAxMi4yNzMxTDMzLjQ4ODYgMTEuMDE2NEwzMS4yMDA3IDkuNzQxOTFaTTI3LjIwNDQgMTQuODYzN0MyNy4wODQ5IDE0Ljc1NyAyNy4wMTcyIDE0LjYxODYgMjcuMDAxMyAxNC40NDg3QzI2Ljk4OTMgMTQuMjc4OCAyNy4wNjEgMTQuMTE2NyAyNy4yMTYzIDEzLjk2MjZMMjkuMjIzNSAxMS45NzY3TDI5LjkzNDMgOS40ODEwOEMzMC4wNDE4IDkuNjE1NDQgMzAuMTc1MyA5Ljc0NTg2IDMwLjMzNDUgOS44NzIzMkMzMC40OTc4IDkuOTk0ODMgMzAuNjkzIDEwLjExNzMgMzAuOTIgMTAuMjM5OUwzMS4xMTcxIDEwLjM0NjZMMzAuMzA0NyAxMi40MzMyQzMwLjI1MjkgMTIuNTU1NyAzMC4yMDkxIDEyLjY0MDcgMzAuMTczMyAxMi42ODgxQzMwLjE0MTQgMTIuNzM1NSAzMC4wODU2IDEyLjc5ODggMzAuMDA2IDEyLjg3NzhMMjguMDcwNiAxNC43ODA3QzI3LjkxOTIgMTQuOTI2OSAyNy43NjM5IDE1IDI3LjYwNDYgMTVDMjcuNDQ5MyAxNSAyNy4zMTU5IDE0Ljk1NDYgMjcuMjA0NCAxNC44NjM3WiJ9KX0pfWZ1bmN0aW9uIFQzKCl7cmV0dXJuIEsoInN2ZyIse3dpZHRoOiIxNCIsaGVpZ2h0OiIxNCIsdmlld0JveDoiNDkgMyAxNiAxMiIsZmlsbDoiY3VycmVudENvbG9yIix4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJhcmlhLWhpZGRlbiI6InRydWUiLGNoaWxkcmVuOksoInBhdGgiLHtkOiJNNTcuMDAyOCAxMS45NDlDNTYuODQ4IDExLjk0OSA1Ni43MTcyIDExLjg5ODcgNTYuNjEwMyAxMS43OThDNTYuNTAzNSAxMS42OTM5IDU2LjQ1MDEgMTEuNTcwNyA1Ni40NTAxIDExLjQyODRWOS4wMjg2M0w1NC40MjE2IDcuMTA3NzZDNTQuMjIyNyA2LjkyMDM1IDU0LjA5NTUgNi42OTgyNSA1NC4wNDAzIDYuNDQxNDRDNTMuOTg1IDYuMTgxMTYgNTQuMDEwOCA1LjkyNzgyIDU0LjExNzYgNS42ODE0MkM1NC4yMjgyIDUuNDM4NDkgNTQuMzk3NyA1LjI0NDE0IDU0LjYyNjEgNS4wOTgzOUM1NC44NTgzIDQuOTQ5MTYgNTUuMTE2MiA0Ljg3NDU0IDU1LjM5OTkgNC44NzQ1NEg1OC4xMTM3QzU4LjQyMzIgNC44NzQ1NCA1OC42ODQ4IDQuOTc2OTIgNTguODk4NSA1LjE4MTY4QzU5LjExNTkgNS4zODI5NiA1OS4yMjQ2IDUuNjI5MzYgNTkuMjI0NiA1LjkyMDg3VjcuNzYzNjZINjAuODk5M0M2MS4wNTA0IDcuNzYzNjYgNjEuMTc5NCA3LjgxMzk5IDYxLjI4NjIgNy45MTQ2M0M2MS4zOTMxIDguMDE1MjcgNjEuNDQ2NSA4LjEzODQ3IDYxLjQ0NjUgOC4yODQyM0M2MS40NDY1IDguNDI2NTEgNjEuMzkzMSA4LjU0Nzk4IDYxLjI4NjIgOC42NDg2MkM2MS4xNzk0IDguNzQ5MjYgNjEuMDUwNCA4Ljc5OTU4IDYwLjg5OTMgOC43OTk1OEg1OC42NzE5QzU4LjUyMDkgOC43OTk1OCA1OC4zOTAxIDguNzQ5MjYgNTguMjc5NSA4LjY0ODYyQzU4LjE3MjcgOC41NDc5OCA1OC4xMTkyIDguNDI2NTEgNTguMTE5MiA4LjI4NDIzVjYuOTg4MDNDNTguMTE5MiA2LjkxODYyIDU4LjA5OSA2Ljg1NDQyIDU4LjA1ODQgNi43OTU0MkM1OC4wMTc5IDYuNzMyOTUgNTcuOTQ0MiA2LjcwMTcyIDU3LjgzNzMgNi43MDE3Mkg1Ni4wNjMyQzU1Ljk5MzIgNi43MDE3MiA1NS45NDUzIDYuNzI5NDggNTUuOTE5NSA2Ljc4NTAxQzU1Ljg5NzQgNi44MzcwNiA1NS45MDg0IDYuODg3MzkgNTUuOTUyNiA2LjkzNTk3TDU3LjQwMDcgOC40NTYwMUM1Ny41MDM5IDguNTYzNiA1Ny41NTU1IDguNjgxNTkgNTcuNTU1NSA4LjgwOTk5VjExLjQyODRDNTcuNTU1NSAxMS41NzA3IDU3LjUwMDIgMTEuNjkzOSA1Ny4zODk3IDExLjc5OEM1Ny4yODI4IDExLjg5ODcgNTcuMTUzOCAxMS45NDkgNTcuMDAyOCAxMS45NDlaTTUzLjAwMTIgMTRDNTIuNTg0OCAxNCA1Mi4xOTQyIDEzLjkyNzEgNTEuODI5NSAxMy43ODE0QzUxLjQ2ODQgMTMuNjM1NiA1MS4xNDk2IDEzLjQzMjYgNTAuODczMyAxMy4xNzIzQzUwLjYwMDYgMTIuOTEyIDUwLjM4NjkgMTIuNjExOCA1MC4yMzIxIDEyLjI3MTdDNTAuMDc3NCAxMS45MjgyIDUwIDExLjU2MDMgNTAgMTEuMTY4MUM1MCAxMC43NzYgNTAuMDc3NCAxMC40MDk5IDUwLjIzMjEgMTAuMDY5OEM1MC4zODY5IDkuNzI2MTggNTAuNjAwNiA5LjQyNDI2IDUwLjg3MzMgOS4xNjM5OEM1MS4xNDk2IDguOTAzNyA1MS40Njg0IDguNzAwNjggNTEuODI5NSA4LjU1NDkyQzUyLjE5NDIgOC40MDkxNiA1Mi41ODQ4IDguMzM2MjggNTMuMDAxMiA4LjMzNjI4QzUzLjQyMTIgOC4zMzYyOCA1My44MTE4IDguNDA5MTYgNTQuMTcyOSA4LjU1NDkyQzU0LjUzNzcgOC43MDA2OCA1NC44NTY0IDguOTAzNyA1NS4xMjkxIDkuMTYzOThDNTUuNDA1NCA5LjQyNDI2IDU1LjYyMSA5LjcyNjE4IDU1Ljc3NTggMTAuMDY5OEM1NS45MzA1IDEwLjQwOTkgNTYuMDA3OSAxMC43NzYgNTYuMDA3OSAxMS4xNjgxQzU2LjAwNzkgMTEuNTYwMyA1NS45MzA1IDExLjkyODIgNTUuNzc1OCAxMi4yNzE3QzU1LjYyMSAxMi42MTE4IDU1LjQwNTQgMTIuOTEyIDU1LjEyOTEgMTMuMTcyM0M1NC44NTY0IDEzLjQzMjYgNTQuNTM3NyAxMy42MzU2IDU0LjE3MjkgMTMuNzgxNEM1My44MTE4IDEzLjkyNzEgNTMuNDIxMiAxNCA1My4wMDEyIDE0Wk01My4wMDEyIDEzLjI2NkM1My40MTAyIDEzLjI2NiA1My43ODIzIDEzLjE3MDYgNTQuMTE3NiAxMi45Nzk3QzU0LjQ1NjYgMTIuNzkyMyA1NC43MjU2IDEyLjU0MDcgNTQuOTI0NiAxMi4yMjQ5QzU1LjEyNzMgMTEuOTA1NiA1NS4yMjg2IDExLjU1MzQgNTUuMjI4NiAxMS4xNjgxQzU1LjIyODYgMTAuNzgyOSA1NS4xMjczIDEwLjQzMjQgNTQuOTI0NiAxMC4xMTY2QzU0LjcyNTYgOS43OTczMyA1NC40NTY2IDkuNTQzOTkgNTQuMTE3NiA5LjM1NjU5QzUzLjc4MjMgOS4xNjU3MSA1My40MTAyIDkuMDcwMjggNTMuMDAxMiA5LjA3MDI4QzUyLjU5NTkgOS4wNzAyOCA1Mi4yMjM3IDkuMTY1NzEgNTEuODg0NyA5LjM1NjU5QzUxLjU0OTQgOS41NDM5OSA1MS4yODA0IDkuNzk3MzMgNTEuMDc3OCAxMC4xMTY2QzUwLjg3ODggMTAuNDMyNCA1MC43NzkzIDEwLjc4MjkgNTAuNzc5MyAxMS4xNjgxQzUwLjc3OTMgMTEuNTUzNCA1MC44Nzg4IDExLjkwNTYgNTEuMDc3OCAxMi4yMjQ5QzUxLjI4MDQgMTIuNTQwNyA1MS41NDk0IDEyLjc5MjMgNTEuODg0NyAxMi45Nzk3QzUyLjIyMzcgMTMuMTcwNiA1Mi41OTU5IDEzLjI2NiA1My4wMDEyIDEzLjI2NlpNNjIuNDgwMSA5LjYxMTY2QzYyLjM2MjIgOS41MTQ0OSA2Mi4zMDE0IDkuNDE1NTggNjIuMjk3NyA5LjMxNDk0QzYyLjI5NzcgOS4yMTA4MyA2Mi4zMzA4IDkuMTI0MDcgNjIuMzk3MiA5LjA1NDY2QzYyLjQ2NzIgOC45ODUyNSA2Mi41NTM4IDguOTQ1MzQgNjIuNjU2OSA4LjkzNDkzQzYyLjc2MzggOC45MjEwNSA2Mi44Njg4IDguOTU1NzUgNjIuOTcyIDkuMDM5MDRDNjMuMjg4OSA5LjMwMjc5IDYzLjUzOTQgOS42MTY4NyA2My43MjM2IDkuOTgxMjZDNjMuOTA3OSAxMC4zNDU3IDY0IDEwLjc0MTMgNjQgMTEuMTY4MUM2NCAxMS41NjAzIDYzLjkyMjYgMTEuOTI4MiA2My43Njc5IDEyLjI3MTdDNjMuNjEzMSAxMi42MTE4IDYzLjM5NzYgMTIuOTEyIDYzLjEyMTIgMTMuMTcyM0M2Mi44NDg1IDEzLjQzMjYgNjIuNTI5OCAxMy42MzU2IDYyLjE2NSAxMy43ODE0QzYxLjgwMzkgMTMuOTI3MSA2MS40MTUyIDE0IDYwLjk5ODggMTRDNjAuNTgyNCAxNCA2MC4xOTE5IDEzLjkyNzEgNTkuODI3MSAxMy43ODE0QzU5LjQ2MjMgMTMuNjM1NiA1OS4xNDE3IDEzLjQzMjYgNTguODY1NCAxMy4xNzIzQzU4LjU5MjcgMTIuOTEyIDU4LjM3OSAxMi42MTE4IDU4LjIyNDIgMTIuMjcxN0M1OC4wNjk1IDExLjkyODIgNTcuOTkyMSAxMS41NjAzIDU3Ljk5MjEgMTEuMTY4MUM1Ny45OTIxIDEwLjk2MzQgNTguMDE0MiAxMC43NjU2IDU4LjA1ODQgMTAuNTc0N0M1OC4xMDYzIDEwLjM4MDQgNTguMTcyNyAxMC4xOTMgNTguMjU3NCAxMC4wMTI1QzU4LjMwOSA5LjkwMTQ0IDU4LjM4MDggOS44MzAzIDU4LjQ3MyA5Ljc5OTA2QzU4LjU2ODggOS43NjQzNiA1OC42NjI3IDkuNzY0MzYgNTguNzU0OCA5Ljc5OTA2QzU4Ljg1MDYgOS44MzAzIDU4LjkyMjUgOS44OTI3NiA1OC45NzA0IDkuOTg2NDdDNTkuMDE4MyAxMC4wODAyIDU5LjAxMDkgMTAuMTk4MiA1OC45NDgzIDEwLjM0MDRDNTguODMwNCAxMC42MDA3IDU4Ljc3MTQgMTAuODc2NiA1OC43NzE0IDExLjE2ODFDNTguNzcxNCAxMS41NTM0IDU4Ljg3MDkgMTEuOTA1NiA1OS4wNjk5IDEyLjIyNDlDNTkuMjcyNSAxMi41NDA3IDU5LjU0MTUgMTIuNzkyMyA1OS44NzY4IDEyLjk3OTdDNjAuMjE1OCAxMy4xNzA2IDYwLjU4OTggMTMuMjY2IDYwLjk5ODggMTMuMjY2QzYxLjQwNzggMTMuMjY2IDYxLjc4IDEzLjE3MDYgNjIuMTE1MyAxMi45Nzk3QzYyLjQ1MDYgMTIuNzkyMyA2Mi43MTc3IDEyLjU0MDcgNjIuOTE2NyAxMi4yMjQ5QzYzLjExOTQgMTEuOTA1NiA2My4yMjA3IDExLjU1MzQgNjMuMjIwNyAxMS4xNjgxQzYzLjIyMDcgMTAuODU5MyA2My4xNTI1IDEwLjU3MTIgNjMuMDE2MiAxMC4zMDRDNjIuODgzNSAxMC4wMzMzIDYyLjcwNDggOS44MDI1MyA2Mi40ODAxIDkuNjExNjZaTTYwLjk5ODggNi4yNzQ4NkM2MC43NzQgNi4yNzQ4NiA2MC41Njk1IDYuMjI0NTQgNjAuMzg1MyA2LjEyMzg5QzYwLjIwMTEgNi4wMTk3OCA2MC4wNTM3IDUuODgyNyA1OS45NDMyIDUuNzEyNjVDNTkuODM2MyA1LjUzOTEzIDU5Ljc4MjkgNS4zNDY1MiA1OS43ODI5IDUuMTM0ODNDNTkuNzgyOSA0LjkyNjYgNTkuODM2MyA0LjczNzQ2IDU5Ljk0MzIgNC41Njc0MUM2MC4wNTM3IDQuMzkzODkgNjAuMjAxMSA0LjI1NjgxIDYwLjM4NTMgNC4xNTYxN0M2MC41Njk1IDQuMDUyMDYgNjAuNzc0IDQgNjAuOTk4OCA0QzYxLjIxOTkgNCA2MS40MjA3IDQuMDUyMDYgNjEuNjAxMyA0LjE1NjE3QzYxLjc4MTggNC4yNTY4MSA2MS45MjU1IDQuMzkzODkgNjIuMDMyNCA0LjU2NzQxQzYyLjE0MjkgNC43Mzc0NiA2Mi4xOTgyIDQuOTI2NiA2Mi4xOTgyIDUuMTM0ODNDNjIuMTk4MiA1LjM0NjUyIDYyLjE0MjkgNS41MzkxMyA2Mi4wMzI0IDUuNzEyNjVDNjEuOTI1NSA1Ljg4MjcgNjEuNzgxOCA2LjAxOTc4IDYxLjYwMTMgNi4xMjM4OUM2MS40MjA3IDYuMjI0NTQgNjEuMjE5OSA2LjI3NDg2IDYwLjk5ODggNi4yNzQ4NloifSl9KX1mdW5jdGlvbiB3Mygpe3JldHVybiBLKCJzdmciLHt3aWR0aDoiMTYiLGhlaWdodDoiMTQiLHZpZXdCb3g6IjcwIDUgMTggOSIsZmlsbDoiY3VycmVudENvbG9yIix4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJhcmlhLWhpZGRlbiI6InRydWUiLGNoaWxkcmVuOksoInBhdGgiLHtkOiJNODUuNTcyIDEyLjEwMzhDODYuMDYgMTIuMTAzOCA4Ni40MjA3IDExLjk4OTIgODYuNjU0MiAxMS43NjAxQzg2Ljg4NDcgMTEuNTI4MSA4NyAxMS4xNjQxIDg3IDEwLjY2ODFWMTAuMTExMkM4NyA5Ljc2OTAxIDg2LjkyMDcgOS40NjMwMiA4Ni43NjIgOS4xOTMyOUM4Ni42MDMzIDguOTIwNjUgODYuMzc1OCA4LjY5NzMzIDg2LjA3OTQgOC41MjMzMUM4NS43ODAxIDguMzQ5MjkgODUuNDIyMyA4LjIzNzYyIDg1LjAwNjIgOC4xODgzMkw4My4wMTY4IDcuOTUzMzlMODEuMTk4MSA2Ljg0ODM1QzgwLjkyMjcgNi42ODAxMyA4MC42NjA4IDYuNTQyMzcgODAuNDEyMyA2LjQzNTA1QzgwLjE2MDggNi4zMjQ4NCA3OS44OTc0IDYuMjM3ODMgNzkuNjIxOSA2LjE3NDAyQzc5LjM0NjUgNi4xMTAyMSA3OS4wMzgyIDYuMDY1MjYgNzguNjk2OSA2LjAzOTE1Qzc4LjM1MjYgNi4wMTMwNSA3Ny45NTE0IDYgNzcuNDkzNCA2SDc2LjgxMDhDNzYuMzg4NyA2IDc1Ljk5NSA2LjA0OTMxIDc1LjYyOTggNi4xNDc5MkM3NS4yNjE2IDYuMjQzNjMgNzQuOTE4OCA2LjM3MTI1IDc0LjYwMTUgNi41MzA3NkM3NC4yODExIDYuNjkwMjggNzMuOTg2MiA2Ljg2NTc2IDczLjcxNjggNy4wNTcxOEM3My40NDQ0IDcuMjQ4NiA3My4xOTU5IDcuNDM3MTIgNzIuOTcxNCA3LjYyMjc1TDcyLjI1NzQgNy44NTMzM0M3MS44MzIzIDcuOTg2NzQgNzEuNTE2NCA4LjE4Mzk3IDcxLjMwOTkgOC40NDVDNzEuMTAzMyA4LjcwMzEzIDcxIDkuMDMzNzcgNzEgOS40MzY5MlYxMC42NDJDNzEgMTEuMTQ2NyA3MS4xMTUzIDExLjUxNjUgNzEuMzQ1OCAxMS43NTE0QzcxLjU3NjMgMTEuOTg2MyA3MS45MzcgMTIuMTAzOCA3Mi40MjggMTIuMTAzOEg3Mi43MTU0QzcyLjcwMDQgMTIuMDM3MSA3Mi42ODg1IDExLjk3MDQgNzIuNjc5NSAxMS45MDM3QzcyLjY3MDUgMTEuODM0MSA3Mi42NjYgMTEuNzY0NSA3Mi42NjYgMTEuNjk0OEM3Mi42NjYgMTEuMzU1NSA3Mi43NDk4IDExLjA0OTUgNzIuOTE3NSAxMC43NzY5QzczLjA4NTEgMTAuNTA0MiA3My4zMTEyIDEwLjI4ODIgNzMuNTk1NiAxMC4xMjg3QzczLjg3NyA5Ljk2NjIzIDc0LjE5MjggOS44ODUwMiA3NC41NDMxIDkuODg1MDJDNzQuODkwNCA5Ljg4NTAyIDc1LjIwNjIgOS45NjYyMyA3NS40OTA2IDEwLjEyODdDNzUuNzcyIDEwLjI4ODIgNzUuOTk2NSAxMC41MDQyIDc2LjE2NDIgMTAuNzc2OUM3Ni4zMzE4IDExLjA0OTUgNzYuNDE1NyAxMS4zNTU1IDc2LjQxNTcgMTEuNjk0OEM3Ni40MTU3IDExLjc2NDUgNzYuNDExMiAxMS44MzQxIDc2LjQwMjIgMTEuOTAzN0M3Ni4zOTMyIDExLjk3MDQgNzYuMzgyNyAxMi4wMzcxIDc2LjM3MDggMTIuMTAzOEg4MS42MzgyQzgxLjYyMDMgMTIuMDM3MSA4MS42MDgzIDExLjk3MDQgODEuNjAyMyAxMS45MDM3QzgxLjU5MzMgMTEuODM0MSA4MS41ODg4IDExLjc2NDUgODEuNTg4OCAxMS42OTQ4QzgxLjU4ODggMTEuMzU1NSA4MS42NzI3IDExLjA0OTUgODEuODQwMyAxMC43NzY5QzgyLjAwNSAxMC41MDQyIDgyLjIyOTUgMTAuMjg4MiA4Mi41MTM5IDEwLjEyODdDODIuNzk1MyA5Ljk2NjIzIDgzLjExMTEgOS44ODUwMiA4My40NjE0IDkuODg1MDJDODMuODExNyA5Ljg4NTAyIDg0LjEyOSA5Ljk2NjIzIDg0LjQxMzQgMTAuMTI4N0M4NC42OTQ4IDEwLjI4ODIgODQuOTE5NCAxMC41MDQyIDg1LjA4NyAxMC43NzY5Qzg1LjI1MTcgMTEuMDQ5NSA4NS4zMzQgMTEuMzU1NSA4NS4zMzQgMTEuNjk0OEM4NS4zMzQgMTEuNzY0NSA4NS4zMzEgMTEuODM0MSA4NS4zMjUgMTEuOTAzN0M4NS4zMTYgMTEuOTcwNCA4NS4zMDQxIDEyLjAzNzEgODUuMjg5MSAxMi4xMDM4SDg1LjU3MlpNODMuNDYxNCAxM0M4My43MTI5IDEzIDgzLjk0MDQgMTIuOTQyIDg0LjE0NCAxMi44MjZDODQuMzQ3NiAxMi43MSA4NC41MDkyIDEyLjU1MzMgODQuNjI5IDEyLjM1NjFDODQuNzQ4NyAxMi4xNTg5IDg0LjgwODYgMTEuOTM4NSA4NC44MDg2IDExLjY5NDhDODQuODA4NiAxMS40NTEyIDg0Ljc0ODcgMTEuMjMwOCA4NC42MjkgMTEuMDMzNkM4NC41MDkyIDEwLjgzNjMgODQuMzQ3NiAxMC42Nzk3IDg0LjE0NCAxMC41NjM3QzgzLjk0MDQgMTAuNDQ3NyA4My43MTI5IDEwLjM4OTcgODMuNDYxNCAxMC4zODk3QzgzLjIwNjkgMTAuMzg5NyA4Mi45Nzc5IDEwLjQ0NzcgODIuNzc0MyAxMC41NjM3QzgyLjU3MDggMTAuNjc5NyA4Mi40MDkxIDEwLjgzNjMgODIuMjg5NCAxMS4wMzM2QzgyLjE2OTYgMTEuMjMwOCA4Mi4xMDk3IDExLjQ1MTIgODIuMTA5NyAxMS42OTQ4QzgyLjEwOTcgMTEuOTM4NSA4Mi4xNjk2IDEyLjE1ODkgODIuMjg5NCAxMi4zNTYxQzgyLjQwOTEgMTIuNTUzMyA4Mi41NzA4IDEyLjcxIDgyLjc3NDMgMTIuODI2QzgyLjk3NzkgMTIuOTQyIDgzLjIwNjkgMTMgODMuNDYxNCAxM1pNNzQuNTQzMSAxM0M3NC43OTQ2IDEzIDc1LjAyMjEgMTIuOTQyIDc1LjIyNTcgMTIuODI2Qzc1LjQyOTIgMTIuNzEgNzUuNTkwOSAxMi41NTMzIDc1LjcxMDYgMTIuMzU2MUM3NS44MzA0IDEyLjE1ODkgNzUuODkwMyAxMS45Mzg1IDc1Ljg5MDMgMTEuNjk0OEM3NS44OTAzIDExLjQ1MTIgNzUuODMwNCAxMS4yMzA4IDc1LjcxMDYgMTEuMDMzNkM3NS41OTA5IDEwLjgzNjMgNzUuNDI5MiAxMC42Nzk3IDc1LjIyNTcgMTAuNTYzN0M3NS4wMjIxIDEwLjQ0NzcgNzQuNzk0NiAxMC4zODk3IDc0LjU0MzEgMTAuMzg5N0M3NC4yODg2IDEwLjM4OTcgNzQuMDU5NiAxMC40NDc3IDczLjg1NiAxMC41NjM3QzczLjY1MjQgMTAuNjc5NyA3My40OTA4IDEwLjgzNjMgNzMuMzcxIDExLjAzMzZDNzMuMjUxMyAxMS4yMzA4IDczLjE5MTQgMTEuNDUxMiA3My4xOTE0IDExLjY5NDhDNzMuMTkxNCAxMS45Mzg1IDczLjI1MTMgMTIuMTU4OSA3My4zNzEgMTIuMzU2MUM3My40OTA4IDEyLjU1MzMgNzMuNjUyNCAxMi43MSA3My44NTYgMTIuODI2Qzc0LjA1OTYgMTIuOTQyIDc0LjI4ODYgMTMgNzQuNTQzMSAxM1oifSl9KX1mdW5jdGlvbiByMCh7c2l6ZTokPTE4LHN0cm9rZVdpZHRoOko9Mn0pe3JldHVybiBLKGgyLHtzaXplOiQsc3Ryb2tlV2lkdGg6Sn0pfXZhciBFOT0iQWNjZXNzaWJpbGl0eSB1bmF2YWlsYWJsZSBvbiB0aGlzIHNpbXVsYXRvci4iO2Z1bmN0aW9uIF81KCQpe3JldHVybiAkPy5lcnJvcnM/LmluY2x1ZGVzKEU5KT8/ITF9ZnVuY3Rpb24gRDUoJCxKKXtpZigkPT09SilyZXR1cm4hMDtpZigkLmlkIT09Si5pZHx8JC5wYXRoIT09Si5wYXRofHwkLmxhYmVsIT09Si5sYWJlbHx8JC52YWx1ZSE9PUoudmFsdWV8fCQucm9sZSE9PUoucm9sZXx8JC50eXBlIT09Si50eXBlfHwkLmVuYWJsZWQhPT1KLmVuYWJsZWQpcmV0dXJuITE7bGV0IFE9JC5mcmFtZSxaPUouZnJhbWU7cmV0dXJuIFE9PT1afHxRLng9PT1aLngmJlEueT09PVoueSYmUS53aWR0aD09PVoud2lkdGgmJlEuaGVpZ2h0PT09Wi5oZWlnaHR9ZnVuY3Rpb24gVDUoJCxKKXtsZXQgUT0kLmxhYmVsfHwkLnJvbGV8fGBlbGVtZW50ICR7SisxfWAsWj0kLnJvbGV8fCQudHlwZTtyZXR1cm57aWQ6JC5pZCxwYXRoOiQucGF0aCxsYWJlbDpRLHZhbHVlOiQudmFsdWUscm9sZTpaLHR5cGU6JC50eXBlLGVuYWJsZWQ6JC5lbmFibGVkLGZyYW1lOiQuZnJhbWV9fWZ1bmN0aW9uIEk5KCQsSil7bGV0IFE9TWF0aC5tYXgoMCwkLngpLFo9TWF0aC5tYXgoMCwkLnkpLFg9TWF0aC5taW4oSi53aWR0aCwkLngrJC53aWR0aCksWT1NYXRoLm1pbihKLmhlaWdodCwkLnkrJC5oZWlnaHQpLHE9TWF0aC5tYXgoMCxYLVEpLEc9TWF0aC5tYXgoMCxZLVopO3JldHVybiBxPjAmJkc+MD97eDpRLHk6Wix3aWR0aDpxLGhlaWdodDpHfTpudWxsfWZ1bmN0aW9uIGkwKCQpe3JldHVybiAkLmlkfWZ1bmN0aW9uIEUzKCQpe3JldHVybmAkeyQueH0sJHskLnl9ICR7JC53aWR0aH14JHskLmhlaWdodH1gfWZ1bmN0aW9uIHk5KCQpe3JldHVybltgQVggbGFiZWw6ICR7JC5sYWJlbHx8IlVubGFiZWxlZCJ9YCwkLnJvbGU/YHJvbGU6ICR7JC5yb2xlfWA6IiIsJC50eXBlP2B0eXBlOiAkeyQudHlwZX1gOiIiLCQudmFsdWU/YHZhbHVlOiAkeyQudmFsdWV9YDoiIiwkLmlkP2BpZDogJHskLmlkfWA6IiIsYHBhdGg6ICR7JC5wYXRofWAsYGZyYW1lOiAke0UzKCQuZnJhbWUpfWBdLmZpbHRlcihCb29sZWFuKS5qb2luKCI7ICIpfWZ1bmN0aW9uIHUyKCQpe3JldHVybiAkJiZ0eXBlb2YgJC5kZXZpY2U9PT0ic3RyaW5nIiYmdHlwZW9mICQudXJsPT09InN0cmluZyI/JDpudWxsfWZ1bmN0aW9uIGI5KCQpe2xldCBKPW5ldyBVUkwoJC5zdHJlYW1VcmwpO3JldHVybiBKLnBhdGhuYW1lPUoucGF0aG5hbWUucmVwbGFjZSgvXC9zdHJlYW1cLlteL10rJC8sIi9zdHJlYW0ubWpwZWciKSxKLnNlYXJjaD0iIixKLmhhc2g9IiIsSi50b1N0cmluZygpfWZ1bmN0aW9uIEkzKCQpe2xldCBKPW5ldyBVUkwoJC5zdHJlYW1VcmwpO3JldHVybiBKLnBhdGhuYW1lPUoucGF0aG5hbWUucmVwbGFjZSgvXC9zdHJlYW1cLlteL10rJC8sIi93ZWJydGMvb2ZmZXIiKSxKLnNlYXJjaD0iIixKLmhhc2g9IiIsSi50b1N0cmluZygpfWZ1bmN0aW9uIFM5KCQpe2xldCBKPW5ldyBVUkwoSTMoJCkpO3JldHVybiBKLnBhdGhuYW1lPUoucGF0aG5hbWUucmVwbGFjZSgvXC9vZmZlciQvLCIvY2xvc2UiKSxKLnRvU3RyaW5nKCl9ZnVuY3Rpb24gYzEoJCl7bGV0IFE9d2luZG93Ll9fU0lNX1BSRVZJRVdfXz8uYmFzZVBhdGg/Pyh3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUucmVwbGFjZSgvXC8rJC8sIiIpfHwiLyIpO3JldHVybiBRPT09Ii8iP2AvJHskfWA6YCR7UX0vJHskfWB9dmFyIHgkPTUwMDAsdiQ9MjAwMCxsMj1udWxsLHkzPW51bGwsaiQ9MSxoJD0xLFYyPW5ldyBNYXAsRzI9bmV3IE1hcDtmdW5jdGlvbiBSJCgpe2xldCAkPW5ldyBVUkwoYzEoImV4ZWMtd3MiKSx3aW5kb3cubG9jYXRpb24uaHJlZik7cmV0dXJuICQucHJvdG9jb2w9JC5wcm90b2NvbD09PSJodHRwczoiPyJ3c3M6Ijoid3M6IiwkLnRvU3RyaW5nKCl9ZnVuY3Rpb24gZyQoJCl7Zm9yKGxldCBKIG9mIFYyLnZhbHVlcygpKUoucmVqZWN0KCQpO1YyLmNsZWFyKCl9ZnVuY3Rpb24geDkoKXtyZXR1cm4gbDI/Pz1uZXcgUHJvbWlzZSgoJCxKKT0+e2xldCBRPSExLFo7dHJ5e1o9bmV3IFdlYlNvY2tldChSJCgpKX1jYXRjaChxKXtsMj1udWxsLEoocSk7cmV0dXJufWxldCBYPXNldFRpbWVvdXQoKCk9PntpZighUSlRPSEwLGwyPW51bGwsSihFcnJvcigiY29udHJvbCBzb2NrZXQgY29ubmVjdCB0aW1lb3V0IikpLFouY2xvc2UoKX0seCQpO1oub25vcGVuPSgpPT57Wi5zZW5kKEpTT04uc3RyaW5naWZ5KHt0b2tlbjp3aW5kb3cuX19TSU1fUFJFVklFV19fPy5leGVjVG9rZW4/PyIifSkpfSxaLm9ubWVzc2FnZT0ocSk9PntsZXQgRzt0cnl7Rz1KU09OLnBhcnNlKFN0cmluZyhxLmRhdGEpKX1jYXRjaHtyZXR1cm59aWYoRy5yZWFkeSl7aWYoIVEpUT0hMCxjbGVhclRpbWVvdXQoWCkseTM9WiwkKFopO3JldHVybn1pZih0eXBlb2YgRy5zdWI9PT0ibnVtYmVyIil7bGV0IEI9RzIuZ2V0KEcuc3ViKTtpZighQilyZXR1cm47aWYoRy5lbmQpRzIuZGVsZXRlKEcuc3ViKSxCLm9uRW5kKCk7ZWxzZSBpZih0eXBlb2YgRy5kYXRhPT09InN0cmluZyIpQi5vbkRhdGEoRy5kYXRhKTtyZXR1cm59aWYodHlwZW9mIEcuaWQhPT0ibnVtYmVyIilyZXR1cm47bGV0IFY9VjIuZ2V0KEcuaWQpO2lmKCFWKXJldHVybjtWMi5kZWxldGUoRy5pZCksVi5yZXNvbHZlKEcpfTtsZXQgWT0oKT0+e2wyPW51bGwseTM9bnVsbDtsZXQgcT1FcnJvcigiY29udHJvbCBzb2NrZXQgY2xvc2VkIOKAlCByZWxvYWQgdGhlIHBhZ2UgaWYgdGhpcyBwZXJzaXN0cyIpO2ckKHEpO2xldCBHPVsuLi5HMi52YWx1ZXMoKV07RzIuY2xlYXIoKTtmb3IobGV0IFYgb2YgRylWLm9uRW5kKCk7aWYoIVEpUT0hMCxjbGVhclRpbWVvdXQoWCksSihxKX07Wi5vbmVycm9yPVksWi5vbmNsb3NlPVl9KSxsMn1hc3luYyBmdW5jdGlvbiB2OSgkLEope2xldCBRPWF3YWl0IHg5KCk7aWYoUS5yZWFkeVN0YXRlIT09V2ViU29ja2V0Lk9QRU4pdGhyb3cgRXJyb3IoImNvbnRyb2wgc29ja2V0IG5vdCBvcGVuIik7cmV0dXJuIG5ldyBQcm9taXNlKChaLFgpPT57bGV0IFk9aiQrKyxxPSgpPT57VjIuZGVsZXRlKFkpLFgoSj8ucmVhc29uPz9uZXcgRE9NRXhjZXB0aW9uKCJBYm9ydGVkIiwiQWJvcnRFcnJvciIpKX07aWYoSil7aWYoSi5hYm9ydGVkKXtxKCk7cmV0dXJufUouYWRkRXZlbnRMaXN0ZW5lcigiYWJvcnQiLHEse29uY2U6ITB9KX1WMi5zZXQoWSx7cmVzb2x2ZTooRyk9PntKPy5yZW1vdmVFdmVudExpc3RlbmVyKCJhYm9ydCIscSksWihHKX0scmVqZWN0OihHKT0+e0o/LnJlbW92ZUV2ZW50TGlzdGVuZXIoImFib3J0IixxKSxYKEcpfX0pLFEuc2VuZChKU09OLnN0cmluZ2lmeSh7aWQ6WSwuLi4kfSkpfSl9YXN5bmMgZnVuY3Rpb24gSTEoJCxKKXtsZXQgUT1hd2FpdCB2OSh7Y29tbWFuZDokfSxKPy5zaWduYWwpO3JldHVybntzdGRvdXQ6US5zdGRvdXQ/PyIiLHN0ZGVycjpRLnN0ZGVycj8/IiIsZXhpdENvZGU6US5leGl0Q29kZT8/MX19YXN5bmMgZnVuY3Rpb24gYjMoJCxKKXtsZXQgUT1hd2FpdCB2OSh7dWk6JH0sSj8uc2lnbmFsKTtpZihRLmVycm9yKXRocm93IEVycm9yKFEuZXJyb3IpO3JldHVybiBRLnN0YXR1cz8/bnVsbH1mdW5jdGlvbiBmMCgkKXtsZXQgSj17b25tZXNzYWdlOm51bGwsb25lcnJvcjpudWxsLGNsb3NlOigpPT57fX0sUT0hMSxaPW51bGwsWD1udWxsLFk9IiIscT0oQik9PntZKz1CLnJlcGxhY2UoL1xyXG4vZyxgCmApO2xldCBOO3doaWxlKChOPVkuaW5kZXhPZihgCgpgKSkhPT0tMSl7bGV0IHo9WS5zbGljZSgwLE4pO1k9WS5zbGljZShOKzIpO2xldCBMPXouc3BsaXQoYApgKS5maWx0ZXIoKEMpPT5DLnN0YXJ0c1dpdGgoImRhdGE6IikpLm1hcCgoQyk9PkMuc2xpY2UoNSkucmVwbGFjZSgvXiAvLCIiKSkuam9pbihgCmApO2lmKEwpSi5vbm1lc3NhZ2U/Lih7ZGF0YTpMfSl9fSxHPSgpPT57aWYoUXx8WClyZXR1cm47Si5vbmVycm9yPy4oKSxYPXNldFRpbWVvdXQoKCk9PntYPW51bGwsVigpfSx2JCl9LFY9YXN5bmMoKT0+e2lmKFEpcmV0dXJuO3RyeXtsZXQgQj1hd2FpdCB4OSgpO2lmKFEpcmV0dXJuO1k9IiIsWj1oJCsrLEcyLnNldChaLHtvbkRhdGE6cSxvbkVuZDpHfSksQi5zZW5kKEpTT04uc3RyaW5naWZ5KHtzdWI6WixwYXRoOiR9KSl9Y2F0Y2h7RygpfX07cmV0dXJuIFYoKSxKLmNsb3NlPSgpPT57aWYoUT0hMCxYKWNsZWFyVGltZW91dChYKTtpZihaIT09bnVsbCl7RzIuZGVsZXRlKFopO3RyeXt5Mz8uc2VuZChKU09OLnN0cmluZ2lmeSh7dW5zdWI6Wn0pKX1jYXRjaHt9Wj1udWxsfX0sSn1mdW5jdGlvbiBPMSgkKXtyZXR1cm5gJyR7JC5yZXBsYWNlKC8nL2csIidcXCcnIil9J2B9ZnVuY3Rpb24gajkoJCl7bGV0W0osUV09VyhudWxsKSxbWixYXT1XKCJBWCBvZmYiKTtyZXR1cm4gYigoKT0+e2lmKCEkKXtRKG51bGwpLFgoIkFYIG9mZiIpO3JldHVybn1RKG51bGwpLFgoIkFYIHdhaXRpbmciKTtsZXQgWT1mMCgkKTtyZXR1cm4gWS5vbm1lc3NhZ2U9KHEpPT57dHJ5e2xldCBHPUpTT04ucGFyc2UocS5kYXRhKTtRKEcpLFgoXzUoRyk/IkFYIHVuYXZhaWxhYmxlIjpgJHtHLmVsZW1lbnRzLmxlbmd0aH0gQVggZWxlbWVudHNgKX1jYXRjaHtYKCJBWCBwYXJzZSBlcnJvciIpfX0sWS5vbmVycm9yPSgpPT57WCgiQVggcmVjb25uZWN0aW5nIil9LCgpPT5ZLmNsb3NlKCl9LFskXSkse3NuYXBzaG90Okosc3RhdHVzOlp9fXZhciBTMz16MCh7c25hcHNob3Q6bnVsbCxzdGF0dXM6IkFYIG9mZiJ9KSx4Mz16MChudWxsKTtmdW5jdGlvbiBCMigpe3JldHVybiBDMChTMyl9ZnVuY3Rpb24gdzUoKXtsZXQgJD1DMCh4Myk7aWYoISQpdGhyb3cgRXJyb3IoIkFYIHNlbGVjdGlvbiBjb250ZXh0IGlzIHVuYXZhaWxhYmxlIik7cmV0dXJuICR9dmFyIGg5PWQwKGZ1bmN0aW9uKHtlbGVtZW50OkosaW5kZXg6USxzY3JlZW46WixoaWdobGlnaHRlZDpYLHNlbGVjdGVkOlksb25IaWdobGlnaHQ6cSxvblNlbGVjdDpHfSl7bGV0IFY9aTAoSiksQj1UNShKLFEpLE49STkoSi5mcmFtZSxaKTtpZighTilyZXR1cm4gbnVsbDtsZXQgej15OShCKTtyZXR1cm4gSygiYnV0dG9uIix7dHlwZToiYnV0dG9uIiwiZGF0YS1heC1rZXkiOlYsImRhdGEtYXgtaWQiOkIuaWQsImRhdGEtYXgtcGF0aCI6Qi5wYXRoLCJkYXRhLWF4LWxhYmVsIjpCLmxhYmVsLCJkYXRhLWF4LXZhbHVlIjpCLnZhbHVlLCJkYXRhLWF4LXJvbGUiOkIucm9sZSwiZGF0YS1heC10eXBlIjpCLnR5cGUsImRhdGEtYXgtZW5hYmxlZCI6U3RyaW5nKEIuZW5hYmxlZCksImRhdGEtYXgtZnJhbWUiOkUzKEIuZnJhbWUpLCJkYXRhLWF4LXNlbGVjdGVkIjpTdHJpbmcoWSksImFyaWEtbGFiZWwiOkoubGFiZWx8fHosdGl0bGU6eixvbkNsaWNrOigpPT5HKFYpLG9uTW91c2VFbnRlcjooKT0+cShWKSxvbk1vdXNlTGVhdmU6KCk9PnEobnVsbCksY2xhc3NOYW1lOiJhYnNvbHV0ZSBib3gtYm9yZGVyIG1pbi13LXB4IG1pbi1oLXB4IHAtMCByb3VuZGVkLVszcHhdIGJvcmRlciBjdXJzb3ItcG9pbnRlciBwb2ludGVyLWV2ZW50cy1hdXRvIixzdHlsZTp7bGVmdDpgJHtOLngvWi53aWR0aCoxMDB9JWAsdG9wOmAke04ueS9aLmhlaWdodCoxMDB9JWAsd2lkdGg6YCR7Ti53aWR0aC9aLndpZHRoKjEwMH0lYCxoZWlnaHQ6YCR7Ti5oZWlnaHQvWi5oZWlnaHQqMTAwfSVgLGJvcmRlckNvbG9yOlk/IiM2MGE1ZmEiOlg/IiNmYmJmMjQiOiIjMzRkMzk5IixiYWNrZ3JvdW5kOlk/InJnYmEoOTYsMTY1LDI1MCwwLjI0KSI6WD8icmdiYSgyNDUsMTU4LDExLDAuMjgpIjoicmdiYSgxNiwxODUsMTI5LDAuMTIpIn19KX0sKCQsSik9PiQuaW5kZXg9PT1KLmluZGV4JiYkLmhpZ2hsaWdodGVkPT09Si5oaWdobGlnaHRlZCYmJC5zZWxlY3RlZD09PUouc2VsZWN0ZWQmJiQub25IaWdobGlnaHQ9PT1KLm9uSGlnaGxpZ2h0JiYkLm9uU2VsZWN0PT09Si5vblNlbGVjdCYmJC5zY3JlZW4ud2lkdGg9PT1KLnNjcmVlbi53aWR0aCYmJC5zY3JlZW4uaGVpZ2h0PT09Si5zY3JlZW4uaGVpZ2h0JiZENSgkLmVsZW1lbnQsSi5lbGVtZW50KSk7ZnVuY3Rpb24gUjkoKXtsZXR7c25hcHNob3Q6JH09QjIoKSx7aGlnaGxpZ2h0ZWRLZXk6SixzZWxlY3RlZEtleTpRLHNldEhpZ2hsaWdodGVkS2V5Olosc2V0U2VsZWN0ZWRLZXk6WH09dzUoKTtpZighJD8uc2NyZWVuLndpZHRofHwhJD8uc2NyZWVuLmhlaWdodClyZXR1cm4gbnVsbDtyZXR1cm4gSygiZGl2Iix7Y2xhc3NOYW1lOiJhYnNvbHV0ZSBpbnNldC0wIHotMTAgb3ZlcmZsb3ctaGlkZGVuIHBvaW50ZXItZXZlbnRzLW5vbmUiLGNoaWxkcmVuOiQuZWxlbWVudHMubWFwKChZLHEpPT57bGV0IEc9aTAoWSk7cmV0dXJuIEsoaDkse2VsZW1lbnQ6WSxpbmRleDpxLHNjcmVlbjokLnNjcmVlbixoaWdobGlnaHRlZDpHPT09SixzZWxlY3RlZDpHPT09USxvbkhpZ2hsaWdodDpaLG9uU2VsZWN0Olh9LEcpfSl9KX1mdW5jdGlvbiBnOSh7ZW5kcG9pbnQ6JCxjaGlsZHJlbjpKfSl7bGV0e3NuYXBzaG90OlEsc3RhdHVzOlp9PWo5KCQpLFtYLFldPVcobnVsbCksW3EsR109VyhudWxsKTtiKCgpPT57aWYoISQpWShudWxsKSxHKG51bGwpfSxbJF0pO2xldCBWPUUxKCgpPT4oe3NuYXBzaG90OlEsc3RhdHVzOlp9KSxbUSxaXSksQj1FMSgoKT0+KHtoaWdobGlnaHRlZEtleTpYLHNlbGVjdGVkS2V5OnEsc2V0SGlnaGxpZ2h0ZWRLZXk6WSxzZXRTZWxlY3RlZEtleTpHfSksW1gscV0pO3JldHVybiBLKFMzLHt2YWx1ZTpWLGNoaWxkcmVuOksoeDMse3ZhbHVlOkIsY2hpbGRyZW46Sn0pfSl9ZnVuY3Rpb24gbTkoe292ZXJsYXlFbmFibGVkOiQsc3RyZWFtaW5nOkosb25Ub2dnbGVPdmVybGF5OlF9KXtsZXR7c3RhdHVzOlp9PUIyKCksW1gsWV09VyghMSkscT0kJiZKO3JldHVybiBLKHIxLkJ1dHRvbix7ImFyaWEtbGFiZWwiOiQ/IkhpZGUgYWNjZXNzaWJpbGl0eSBvdmVybGF5IjoiU2hvdyBhY2Nlc3NpYmlsaXR5IG92ZXJsYXkiLCJhcmlhLXByZXNzZWQiOiQsdGl0bGU6WixvbkNsaWNrOlEsb25Nb3VzZUVudGVyOigpPT5ZKCEwKSxvbk1vdXNlTGVhdmU6KCk9PlkoITEpLHN0eWxlOnE/e2JhY2tncm91bmQ6WD8icmdiYSgyNTUsMjU1LDI1NSwwLjEyKSI6InJnYmEoMjU1LDI1NSwyNTUsMC4wOCkiLGNvbG9yOiJyZ2JhKDI1NSwyNTUsMjU1LDAuOTUpIn06dm9pZCAwLGNoaWxkcmVuOksobTAse3NpemU6MTksc3Ryb2tlV2lkdGg6Mn0pfSl9ZnVuY3Rpb24gRTUoe2NsYXNzTmFtZTokPSIifSl7cmV0dXJuIEsoImEiLHtocmVmOiJodHRwczovL2dpdGh1Yi5jb20vZXhwby9zZXJ2ZS1zaW0iLHRhcmdldDoiX2JsYW5rIixyZWw6Im5vcmVmZXJyZXIiLGNsYXNzTmFtZTpgaW5saW5lLWZsZXggaC1bMzBweF0gbWluLXctMCBpdGVtcy1jZW50ZXIgd2hpdGVzcGFjZS1ub3dyYXAgcm91bmRlZC1tZCBweC0xLjUgZm9udC1tb25vIHRleHQtWzEycHhdIGZvbnQtc2VtaWJvbGQgdGV4dC13aGl0ZS82NSBuby11bmRlcmxpbmUgW3RyYW5zaXRpb246YmFja2dyb3VuZF8wLjE1c19lYXNlLGNvbG9yXzAuMTVzX2Vhc2VdIGhvdmVyOmJnLXdoaXRlLzggaG92ZXI6dGV4dC13aGl0ZS84NSBmb2N1cy12aXNpYmxlOm91dGxpbmUgZm9jdXMtdmlzaWJsZTpvdXRsaW5lLTIgZm9jdXMtdmlzaWJsZTpvdXRsaW5lLW9mZnNldC0yIGZvY3VzLXZpc2libGU6b3V0bGluZS13aGl0ZS82MCAkeyR9YC50cmltKCksImFyaWEtbGFiZWwiOiJPcGVuIHNlcnZlLXNpbSIsdGl0bGU6Ik9wZW4gc2VydmUtc2ltIixjaGlsZHJlbjoic2VydmUtc2ltIn0pfWZ1bmN0aW9uIGY5KHtvcGVuOiQsb25DbGljazpKfSl7cmV0dXJuIEsoImRpdiIse2NsYXNzTmFtZTpgZml4ZWQgdG9wLTMgbGVmdC0zIHotMzAgZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTEgcC0xIFt0cmFuc2l0aW9uOm9wYWNpdHlfMC4xOHNfZWFzZV0gJHskPyJvcGFjaXR5LTAgcG9pbnRlci1ldmVudHMtbm9uZSI6Im9wYWNpdHktMTAwIHBvaW50ZXItZXZlbnRzLWF1dG8ifWAsY2hpbGRyZW46W0soImJ1dHRvbiIse29uQ2xpY2s6SixjbGFzc05hbWU6InctWzMwcHhdIGgtWzMwcHhdIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGJnLXRyYW5zcGFyZW50IGJvcmRlci1ub25lIHJvdW5kZWQtbWQgdGV4dC1bIzhlOGU5M10gY3Vyc29yLXBvaW50ZXIgW3RyYW5zaXRpb246YmFja2dyb3VuZF8wLjE1c19lYXNlLGNvbG9yXzAuMTVzX2Vhc2VdIGhvdmVyOmJnLXdoaXRlLzggaG92ZXI6dGV4dC13aGl0ZSIsImFyaWEtbGFiZWwiOiJPcGVuIGRldmljZXMgc2lkZWJhciIsImFyaWEtcHJlc3NlZCI6JCx0aXRsZToiRGV2aWNlcyIsY2hpbGRyZW46SyhJMCx7c2l6ZToxOCxzdHJva2VXaWR0aDoxLjc1fSl9KSxLKEU1LHt9KV19KX1mdW5jdGlvbiBwOSgkKXtpZighTnVtYmVyLmlzRmluaXRlKCQpfHwkPD0wKXJldHVybiIwIEIiO2xldCBKPSQvMTA3Mzc0MTgyNDtpZihKPj0xKXJldHVybmAke0oudG9GaXhlZChKPj0xMD8wOjEpfSBHQmA7cmV0dXJuYCR7KCQvMTA0ODU3NikudG9GaXhlZCgwKX0gTUJgfWZ1bmN0aW9uIEk1KCQpe2xldCBKPSQubWF0Y2goL14oW2EtekEtWl0rKS0oLispJC8pO2lmKCFKKXJldHVybntvczokLHZlcnNpb246IiJ9O3JldHVybntvczpKWzFdLHZlcnNpb246SlsyXS5yZXBsYWNlKC8tL2csIi4iKX19ZnVuY3Rpb24gdTkoJCl7cmV0dXJuIEk1KCQpLnZlcnNpb258fCR9ZnVuY3Rpb24geTUoJCl7bGV0e29zOkosdmVyc2lvbjpRfT1JNSgkKTtyZXR1cm4gUT9gJHtKfSAke1F9YDpKfWZ1bmN0aW9uIFM1KHtjaHJvbWU6JCxzY3JlZW46SixpbnRlcmFjdGl2ZTpRPSExLG9uQnV0dG9uOlosb25Dcm93bldoZWVsOlh9KXtyZXR1cm4gSygiZGl2Iix7Y2xhc3NOYW1lOiJhYnNvbHV0ZSBpbnNldC0wIixjaGlsZHJlbjpbJC5idXR0b25zLm1hcCgoWSk9PksoZiQse2Nocm9tZTokLGJ1dHRvbjpZLGludGVyYWN0aXZlOlEsb25CdXR0b246WixvbldoZWVsOlEmJlkubmFtZT09PSJkaWdpdGFsLWNyb3duIj9YOnZvaWQgMH0sYGJ1dHRvbi0ke1kubmFtZX1gKSksJC5jb21wb3NpdGVJbWFnZT9LKGQ5LHtjaHJvbWU6JCxpbWFnZTokLmNvbXBvc2l0ZUltYWdlLHJlY3Q6JC5ib2R5LHpJbmRleDoxfSk6JC5zbGljZSYmJC5jb3JuZXI/SyhwJCx7Y2hyb21lOiR9KTpudWxsLEsoImRpdiIse2NsYXNzTmFtZToiYWJzb2x1dGUgb3ZlcmZsb3ctaGlkZGVuIGJnLWJsYWNrIixzdHlsZTp7Li4udjMoJCwkLnNjcmVlbiwyKSxib3JkZXJSYWRpdXM6bSQoJCl9LGNoaWxkcmVuOkp9KV19KX1mdW5jdGlvbiBtJCgkKXtyZXR1cm5gJHskLnNjcmVlblJhZGl1cy8kLnNjcmVlbi53aWR0aCoxMDB9JSAvICR7JC5zY3JlZW5SYWRpdXMvJC5zY3JlZW4uaGVpZ2h0KjEwMH0lYH1mdW5jdGlvbiBmJCh7Y2hyb21lOiQsYnV0dG9uOkosaW50ZXJhY3RpdmU6USxvbkJ1dHRvbjpaLG9uV2hlZWw6WH0pe2xldFtZLHFdPVcoITEpLFtHLFZdPVcoITEpLEI9RShudWxsKSxOPUUobnVsbCksej1FKFgpO3ouY3VycmVudD1YLGIoKCk9PntsZXQgUz1OLmN1cnJlbnQ7aWYoIVN8fCFYKXJldHVybjtsZXQgeD0oJDEpPT57JDEucHJldmVudERlZmF1bHQoKSwkMS5zdG9wUHJvcGFnYXRpb24oKSx6LmN1cnJlbnQ/LigkMS5kZWx0YVksJDEuZGVsdGFNb2RlKX07cmV0dXJuIFMuYWRkRXZlbnRMaXN0ZW5lcigid2hlZWwiLHgse3Bhc3NpdmU6ITF9KSwoKT0+Uy5yZW1vdmVFdmVudExpc3RlbmVyKCJ3aGVlbCIseCl9LFshIVhdKTtsZXQgTD1RJiZKLnVzYWdlUGFnZSE9bnVsbCYmSi51c2FnZSE9bnVsbCxDPUQoKCk9PntpZihCLmN1cnJlbnQ9PT1udWxsKXJldHVybjtCLmN1cnJlbnQ9bnVsbCxWKCExKSxaPy4oe3BoYXNlOiJ1cCIsYnV0dG9uOkp9KX0sW0osWl0pLEE9RCgoUyk9PntpZihTLmJ1dHRvbiE9PTAmJlMucG9pbnRlclR5cGU9PT0ibW91c2UiKXJldHVybjtTLnByZXZlbnREZWZhdWx0KCksUy5zdG9wUHJvcGFnYXRpb24oKSxCLmN1cnJlbnQ9Uy5wb2ludGVySWQ7dHJ5e1MuY3VycmVudFRhcmdldC5zZXRQb2ludGVyQ2FwdHVyZShTLnBvaW50ZXJJZCl9Y2F0Y2h7fVYoITApLFo/Lih7cGhhc2U6ImRvd24iLGJ1dHRvbjpKfSl9LFtKLFpdKSxVPUoub25Ub3A/NTowLEg9TCYmKFl8fEcpLGs9KEg/Si5ob3Zlci54OjApKjEwMCxGPShIP0ouaG92ZXIueTowKSoxMDAsdz1HJiZKLmltYWdlRG93bj9KLmltYWdlRG93bjpKLmltYWdlLFQ9TD97b25Qb2ludGVyRG93bjpBLG9uUG9pbnRlclVwOkMsb25Qb2ludGVyQ2FuY2VsOkMsb25Qb2ludGVyRW50ZXI6KCk9PnEoITApLG9uUG9pbnRlckxlYXZlOigpPT57cSghMSksQygpfX06e307cmV0dXJuIEsoImRpdiIse3JlZjpOLHJvbGU6TD8iYnV0dG9uIjp2b2lkIDAsImFyaWEtbGFiZWwiOkw/bDkoSi5uYW1lKTp2b2lkIDAsImFyaWEtaGlkZGVuIjpMP3ZvaWQgMDohMCx0aXRsZTpMP2w5KEoubmFtZSk6dm9pZCAwLGNsYXNzTmFtZToiYWJzb2x1dGUgc2VsZWN0LW5vbmUiLHN0eWxlOnsuLi52MygkLEouZnJhbWUsVSksdHJhbnNmb3JtOmt8fEY/YHRyYW5zbGF0ZSgke2t9JSwgJHtGfSUpYDp2b2lkIDAsdHJhbnNpdGlvbjoidHJhbnNmb3JtIDAuMTJzIGVhc2UiLGN1cnNvcjpMPyJwb2ludGVyIjp2b2lkIDAscG9pbnRlckV2ZW50czpMPyJhdXRvIjoibm9uZSIsdG91Y2hBY3Rpb246Im5vbmUifSwuLi5ULGNoaWxkcmVuOncmJksoImltZyIse2FsdDoiIiwiYXJpYS1oaWRkZW4iOiEwLGRyYWdnYWJsZTohMSxzcmM6YzkoJC5pZGVudGlmaWVyLHcpLGNsYXNzTmFtZToiYWJzb2x1dGUgaW5zZXQtMCBzaXplLWZ1bGwgc2VsZWN0LW5vbmUiLHN0eWxlOntvYmplY3RGaXQ6ImZpbGwiLGZpbHRlcjpHJiYhSi5pbWFnZURvd24/ImJyaWdodG5lc3MoMS40KSI6dm9pZCAwLHRyYW5zaXRpb246ImZpbHRlciAwLjEycyBlYXNlIixXZWJraXRVc2VyRHJhZzoibm9uZSJ9fSl9KX1mdW5jdGlvbiBsOSgkKXtyZXR1cm4gJC5zcGxpdCgiLSIpLm1hcCgoSik9PkouY2hhckF0KDApLnRvVXBwZXJDYXNlKCkrSi5zbGljZSgxKSkuam9pbigiICIpfWZ1bmN0aW9uIHAkKHtjaHJvbWU6JH0pe2lmKCEkLnNsaWNlfHwhJC5jb3JuZXIpcmV0dXJuIG51bGw7bGV0e2JvZHk6Sixjb3JuZXI6USxzbGljZTpafT0kLFg9TWF0aC5tYXgoSi53aWR0aC1RLndpZHRoKjIsMCksWT1NYXRoLm1heChKLmhlaWdodC1RLmhlaWdodCoyLDApLHE9W3trZXk6InRvcC1sZWZ0IixpbWFnZTpaLnRvcExlZnQscmVjdDp7eDpKLngseTpKLnksd2lkdGg6US53aWR0aCxoZWlnaHQ6US5oZWlnaHR9fSx7a2V5OiJ0b3AtcmlnaHQiLGltYWdlOloudG9wUmlnaHQscmVjdDp7eDpKLngrSi53aWR0aC1RLndpZHRoLHk6Si55LHdpZHRoOlEud2lkdGgsaGVpZ2h0OlEuaGVpZ2h0fX0se2tleToiYm90dG9tLWxlZnQiLGltYWdlOlouYm90dG9tTGVmdCxyZWN0Ont4OkoueCx5OkoueStKLmhlaWdodC1RLmhlaWdodCx3aWR0aDpRLndpZHRoLGhlaWdodDpRLmhlaWdodH19LHtrZXk6ImJvdHRvbS1yaWdodCIsaW1hZ2U6Wi5ib3R0b21SaWdodCxyZWN0Ont4OkoueCtKLndpZHRoLVEud2lkdGgseTpKLnkrSi5oZWlnaHQtUS5oZWlnaHQsd2lkdGg6US53aWR0aCxoZWlnaHQ6US5oZWlnaHR9fSx7a2V5OiJ0b3AiLGltYWdlOloudG9wLHJlY3Q6e3g6Si54K1Eud2lkdGgseTpKLnksd2lkdGg6WCxoZWlnaHQ6US5oZWlnaHR9fSx7a2V5OiJib3R0b20iLGltYWdlOlouYm90dG9tLHJlY3Q6e3g6Si54K1Eud2lkdGgseTpKLnkrSi5oZWlnaHQtUS5oZWlnaHQsd2lkdGg6WCxoZWlnaHQ6US5oZWlnaHR9fSx7a2V5OiJsZWZ0IixpbWFnZTpaLmxlZnQscmVjdDp7eDpKLngseTpKLnkrUS5oZWlnaHQsd2lkdGg6US53aWR0aCxoZWlnaHQ6WX19LHtrZXk6InJpZ2h0IixpbWFnZTpaLnJpZ2h0LHJlY3Q6e3g6Si54K0oud2lkdGgtUS53aWR0aCx5OkoueStRLmhlaWdodCx3aWR0aDpRLndpZHRoLGhlaWdodDpZfX1dO3JldHVybiBLKFoxLHtjaGlsZHJlbjpxLmZpbHRlcigoRyk9PkcucmVjdC53aWR0aD4wJiZHLnJlY3QuaGVpZ2h0PjApLm1hcCgoRyk9PksoZDkse2Nocm9tZTokLGltYWdlOkcuaW1hZ2UscmVjdDpHLnJlY3QsekluZGV4OjF9LEcua2V5KSl9KX1mdW5jdGlvbiBkOSh7Y2hyb21lOiQsaW1hZ2U6SixyZWN0OlEsekluZGV4Olp9KXtyZXR1cm4gSygiaW1nIix7YWx0OiIiLCJhcmlhLWhpZGRlbiI6ITAsZHJhZ2dhYmxlOiExLHNyYzpjOSgkLmlkZW50aWZpZXIsSiksY2xhc3NOYW1lOiJhYnNvbHV0ZSBzZWxlY3Qtbm9uZSIsc3R5bGU6ey4uLnYzKCQsUSxaKSxvYmplY3RGaXQ6ImZpbGwiLHBvaW50ZXJFdmVudHM6Im5vbmUiLFdlYmtpdFVzZXJEcmFnOiJub25lIn19KX1mdW5jdGlvbiBjOSgkLEope2xldCBRPWBncmlkL2FwaS9kZXZpY2VraXQtY2hyb21lP2Nocm9tZT0ke2VuY29kZVVSSUNvbXBvbmVudCgkKX0maW1hZ2U9JHtlbmNvZGVVUklDb21wb25lbnQoSil9YDtyZXR1cm4gdHlwZW9mIHdpbmRvdz4idSI/YC8ke1F9YDpjMShRKX1mdW5jdGlvbiB2MygkLEosUSl7cmV0dXJue2xlZnQ6YjUoSi54LCQuZnJhbWUud2lkdGgpLHRvcDpiNShKLnksJC5mcmFtZS5oZWlnaHQpLHdpZHRoOmI1KEoud2lkdGgsJC5mcmFtZS53aWR0aCksaGVpZ2h0OmI1KEouaGVpZ2h0LCQuZnJhbWUuaGVpZ2h0KSx6SW5kZXg6UX19ZnVuY3Rpb24gYjUoJCxKKXtyZXR1cm5gJHskL0oqMTAwfSVgfWZ1bmN0aW9uIG85KHtuYW1lOiQscnVudGltZTpKLGNocm9tZTpRLHBsYWNlaG9sZGVyQXNzZXQ6WixidXN5OlgsYnVzeUxhYmVsOlk9IlN0YXJ0aW5n4oCmIixlcnJvcjpxLG9uU3RhcnQ6R30pe2xldCBWPUUwKCQpLEI9UzFbVl0sTj1aPz9udWxsLHo9Tj9udWxsOlE/P251bGwsTD16P3t3aWR0aDp6LnNjcmVlbi53aWR0aCxoZWlnaHQ6ei5zY3JlZW4uaGVpZ2h0fTpZMihWLCQpLEM9cTIoVixMKSxBPU4/dSQoVixOLm5hbWUpOno/Qyp6LmZyYW1lLndpZHRoL3ouc2NyZWVuLndpZHRoOkMqQi53aWR0aC8oQi53aWR0aC0yKkIuYmV6ZWxYKSxVPU4/e3dpZHRoOk4ud2lkdGgsaGVpZ2h0Ok4uaGVpZ2h0fTp6P3t3aWR0aDp6LmZyYW1lLndpZHRoLGhlaWdodDp6LmZyYW1lLmhlaWdodH06e3dpZHRoOkIud2lkdGgsaGVpZ2h0OkIuaGVpZ2h0fSxIPWAke1Uud2lkdGh9IC8gJHtVLmhlaWdodH1gLGs9KFUud2lkdGgvVS5oZWlnaHQqbCQoVikpLnRvRml4ZWQoMiksRj1WPT09InZpc2lvbiI/SyhvJCx7fSk6SyhkJCx7dHlwZTpWfSk7cmV0dXJuIEsoImRpdiIse2NsYXNzTmFtZToiZmxleCBmbGV4LWNvbCBpdGVtcy1jZW50ZXIgZ2FwLTUgbWluLXctMCB3LWZ1bGwiLGNoaWxkcmVuOltLKCJkaXYiLHtjbGFzc05hbWU6InJlbGF0aXZlIHctZnVsbCIsc3R5bGU6e3dpZHRoOmBtaW4oMTAwJSwgJHtBfXB4LCAke2t9ZHZoKWAsbWF4V2lkdGg6QSxhc3BlY3RSYXRpbzpIfSxjaGlsZHJlbjpOP0soYyQse25hbWU6Ti5uYW1lLGZhbGxiYWNrOkZ9KTp6P0soImRpdiIse2NsYXNzTmFtZToiYWJzb2x1dGUgaW5zZXQtMCBwb2ludGVyLWV2ZW50cy1ub25lIixjaGlsZHJlbjpLKFM1LHtjaHJvbWU6en0pfSk6Rn0pLEsoImRpdiIse2NsYXNzTmFtZToiZmxleCBmbGV4LWNvbCBpdGVtcy1jZW50ZXIgZ2FwLTEgdGV4dC1jZW50ZXIiLGNoaWxkcmVuOltLKCJkaXYiLHtjbGFzc05hbWU6InRleHQtWzE3cHhdIGZvbnQtc2VtaWJvbGQgdGV4dC13aGl0ZS85MCIsY2hpbGRyZW46JH0pLEsoImRpdiIse2NsYXNzTmFtZToidGV4dC1bMTNweF0gdGV4dC13aGl0ZS80NSIsY2hpbGRyZW46W3k1KEopLCIgU2ltdWxhdG9yIl19KV19KSxxJiZLKCJkaXYiLHtjbGFzc05hbWU6InRleHQtZGFuZ2VyIHRleHQtWzEycHhdIGZvbnQtbW9ubyBtYXgtdy05MCB0ZXh0LWNlbnRlciIsY2hpbGRyZW46cX0pLEsoImJ1dHRvbiIse3R5cGU6ImJ1dHRvbiIsb25DbGljazpHLGRpc2FibGVkOlgsY2xhc3NOYW1lOmBmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMiBweC01IHB5LTIgcm91bmRlZC1mdWxsIHRleHQtWzE0cHhdIGZvbnQtbWVkaXVtIFt0cmFuc2l0aW9uOmJhY2tncm91bmRfMC4xNXNdICR7WD8iYmctd2hpdGUvOCB0ZXh0LXdoaXRlLzU1IGN1cnNvci1kZWZhdWx0IjoiYmctd2hpdGUvMTIgdGV4dC13aGl0ZS85MCBob3ZlcjpiZy13aGl0ZS8xOCBjdXJzb3ItcG9pbnRlciJ9YCxjaGlsZHJlbjpbWCYmSygic3BhbiIseyJhcmlhLWhpZGRlbiI6ITAsY2xhc3NOYW1lOiJzaXplLTMuNSByb3VuZGVkLWZ1bGwgYm9yZGVyLTIgYm9yZGVyLXdoaXRlLzI1IGFuaW1hdGUtW2dyaWQtc3Bpbl8wLjhzX2xpbmVhcl9pbmZpbml0ZV0iLHN0eWxlOntib3JkZXJUb3BDb2xvcjoicmdiYSgyNTUsMjU1LDI1NSwwLjkpIn19KSxYP1k6IlN0YXJ0Il19KV19KX1mdW5jdGlvbiB1JCgkLEope2lmKCQ9PT0id2F0Y2giKXtpZihKLmluY2x1ZGVzKCJ1bHRyYSIpKXJldHVybiAyNTU7aWYoSi5pbmNsdWRlcygid2F0Y2gtc2UtIil8fEouaW5jbHVkZXMoImFwcGxlLXdhdGNoLXNlLSIpKXJldHVybiAyMzg7cmV0dXJuIDI1MH1pZigkPT09InZpc2lvbiIpcmV0dXJuIDM5MDtpZigkPT09ImlwYWQiKXJldHVybiAzNDA7cmV0dXJuIDI4MH1mdW5jdGlvbiBsJCgkKXtpZigkPT09InZpc2lvbiIpcmV0dXJuIDM0O2lmKCQ9PT0iaXBhZCIpcmV0dXJuIDUwO2lmKCQ9PT0id2F0Y2giKXJldHVybiA1NjtyZXR1cm4gNTJ9ZnVuY3Rpb24gZCQoe3R5cGU6JH0pe2xldCBKPVMxWyRdO3JldHVybiBLKFoxLHtjaGlsZHJlbjpbSygic3ZnIix7dmlld0JveDpgMCAwICR7Si53aWR0aH0gJHtKLmhlaWdodH1gLGNsYXNzTmFtZToiYWJzb2x1dGUgaW5zZXQtMCBzaXplLWZ1bGwiLHByZXNlcnZlQXNwZWN0UmF0aW86InhNaWRZTWlkIG1lZXQiLGNoaWxkcmVuOltLKCJkZWZzIix7Y2hpbGRyZW46SygibGluZWFyR3JhZGllbnQiLHtpZDoicGxhY2Vob2xkZXItc2NyZWVuIix4MToiMCIseTE6IjAiLHgyOiIxIix5MjoiMSIsY2hpbGRyZW46W0soInN0b3AiLHtvZmZzZXQ6IjAlIixzdG9wQ29sb3I6IiM2ZmE4ZTYifSksSygic3RvcCIse29mZnNldDoiNTUlIixzdG9wQ29sb3I6IiM1YjkzZDYifSksSygic3RvcCIse29mZnNldDoiMTAwJSIsc3RvcENvbG9yOiIjNTE4OGNmIn0pXX0pfSksSygicmVjdCIse3g6Si5iZXplbFgseTpKLmJlemVsWSx3aWR0aDpKLndpZHRoLTIqSi5iZXplbFgsaGVpZ2h0OkouaGVpZ2h0LTIqSi5iZXplbFkscng6Si5pbm5lclJhZGl1cyxmaWxsOiJ1cmwoI3BsYWNlaG9sZGVyLXNjcmVlbikifSldfSksSygiZGl2Iix7Y2xhc3NOYW1lOiJhYnNvbHV0ZSBpbnNldC0wIHBvaW50ZXItZXZlbnRzLW5vbmUiLGNoaWxkcmVuOksoazUse3R5cGU6JH0pfSldfSl9ZnVuY3Rpb24gYyQoe25hbWU6JCxmYWxsYmFjazpKfSl7bGV0W1EsWl09VygibG9hZGluZyIpO3JldHVybiBLKCJkaXYiLHtjbGFzc05hbWU6ImFic29sdXRlIGluc2V0LTAgc2l6ZS1mdWxsIHBvaW50ZXItZXZlbnRzLW5vbmUiLGNoaWxkcmVuOltRIT09ImxvYWRlZCImJkosUSE9PSJlcnJvciImJksoImltZyIse2FsdDoiIiwiYXJpYS1oaWRkZW4iOiEwLGRyYWdnYWJsZTohMSxzcmM6ciQoJCksY2xhc3NOYW1lOiJhYnNvbHV0ZSBpbnNldC0wIHNpemUtZnVsbCBzZWxlY3Qtbm9uZSBvYmplY3QtY29udGFpbiIsc3R5bGU6e1dlYmtpdFVzZXJEcmFnOiJub25lIn0sb25Mb2FkOigpPT5aKCJsb2FkZWQiKSxvbkVycm9yOigpPT5aKCJlcnJvciIpfSldfSl9ZnVuY3Rpb24gbyQoKXtsZXR7d2lkdGg6JCxoZWlnaHQ6Sn09UzEudmlzaW9uO3JldHVybiBLKCJzdmciLHt2aWV3Qm94OmAwIDAgJHskfSAke0p9YCxjbGFzc05hbWU6ImFic29sdXRlIGluc2V0LTAgc2l6ZS1mdWxsIixwcmVzZXJ2ZUFzcGVjdFJhdGlvOiJ4TWlkWU1pZCBtZWV0IixmaWxsOiJub25lIiwiYXJpYS1oaWRkZW4iOiEwLGNoaWxkcmVuOltLKCJkZWZzIix7Y2hpbGRyZW46W0soImxpbmVhckdyYWRpZW50Iix7aWQ6InZpc2lvbi1wbGFjZWhvbGRlci1zaGVsbCIseDE6IjAiLHkxOiIwIix4MjoiMCIseTI6IjEiLGNoaWxkcmVuOltLKCJzdG9wIix7b2Zmc2V0OiIwJSIsc3RvcENvbG9yOiIjMjgyODJiIn0pLEsoInN0b3AiLHtvZmZzZXQ6IjU0JSIsc3RvcENvbG9yOiIjMTIxMjE0In0pLEsoInN0b3AiLHtvZmZzZXQ6IjEwMCUiLHN0b3BDb2xvcjoiIzA3MDcwOCJ9KV19KSxLKCJsaW5lYXJHcmFkaWVudCIse2lkOiJ2aXNpb24tcGxhY2Vob2xkZXItZ2xhc3MiLHgxOiIwIix5MToiMCIseDI6IjEiLHkyOiIxIixjaGlsZHJlbjpbSygic3RvcCIse29mZnNldDoiMCUiLHN0b3BDb2xvcjoiIzMxMzUzYSJ9KSxLKCJzdG9wIix7b2Zmc2V0OiI0OCUiLHN0b3BDb2xvcjoiIzBhMGIwZCJ9KSxLKCJzdG9wIix7b2Zmc2V0OiIxMDAlIixzdG9wQ29sb3I6IiMwMTAxMDIifSldfSksSygicmFkaWFsR3JhZGllbnQiLHtpZDoidmlzaW9uLXBsYWNlaG9sZGVyLWxlbnMiLGN4OiI1MCUiLGN5OiI0NiUiLHI6IjYwJSIsY2hpbGRyZW46W0soInN0b3AiLHtvZmZzZXQ6IjAlIixzdG9wQ29sb3I6IiMyMDI4MzIifSksSygic3RvcCIse29mZnNldDoiNzIlIixzdG9wQ29sb3I6IiMwOTBhMGQifSksSygic3RvcCIse29mZnNldDoiMTAwJSIsc3RvcENvbG9yOiIjMDEwMTAyIn0pXX0pXX0pLEsoInBhdGgiLHtkOiJNOTUgMTc3Qzk1IDExOSAxNDcgODYgMjE4IDkxQzI1NyA5NCAyODYgMTExIDMyMCAxMTFDMzU0IDExMSAzODMgOTQgNDIyIDkxQzQ5MyA4NiA1NDUgMTE5IDU0NSAxNzdWMjIyQzU0NSAyNzggNTAxIDMxMSA0NDMgMzEwQzM5OCAzMDkgMzcxIDI4NiAzNDUgMjY4QzMyOSAyNTcgMzExIDI1NyAyOTUgMjY4QzI2OSAyODYgMjQyIDMwOSAxOTcgMzEwQzEzOSAzMTEgOTUgMjc4IDk1IDIyMlYxNzdaIixmaWxsOiJ1cmwoI3Zpc2lvbi1wbGFjZWhvbGRlci1zaGVsbCkiLHN0cm9rZToiIzNkM2Q0MiIsc3Ryb2tlV2lkdGg6IjcifSksSygicGF0aCIse2Q6Ik0xMTcgMTgxQzExNyAxMzQgMTU3IDExMiAyMjAgMTE2QzI2MCAxMTkgMjg3IDEzNiAzMjAgMTM2QzM1MyAxMzYgMzgwIDExOSA0MjAgMTE2QzQ4MyAxMTIgNTIzIDEzNCA1MjMgMTgxVjIxN0M1MjMgMjYzIDQ4OCAyODcgNDM5IDI4N0MzOTkgMjg3IDM2OSAyNjQgMzQ1IDI1MEMzMjkgMjQwIDMxMSAyNDAgMjk1IDI1MEMyNzEgMjY0IDI0MSAyODcgMjAxIDI4N0MxNTIgMjg3IDExNyAyNjMgMTE3IDIxN1YxODFaIixmaWxsOiJ1cmwoI3Zpc2lvbi1wbGFjZWhvbGRlci1nbGFzcykiLHN0cm9rZToiIzE3MTgxYiIsc3Ryb2tlV2lkdGg6IjUifSksSygicGF0aCIse2Q6Ik0xNDMgMTg2QzE0NSAxNDggMTc2IDEzNSAyMjYgMTM4QzI2NCAxNDEgMjg5IDE1NiAzMjAgMTU2QzM1MSAxNTYgMzc2IDE0MSA0MTQgMTM4QzQ2NCAxMzUgNDk1IDE0OCA0OTcgMTg2VjIxM0M0OTcgMjUwIDQ2OSAyNjYgNDMyIDI2NkMzOTQgMjY2IDM2OSAyNDYgMzQzIDIzNUMzMjggMjI5IDMxMiAyMjkgMjk3IDIzNUMyNzEgMjQ2IDI0NiAyNjYgMjA4IDI2NkMxNzEgMjY2IDE0MyAyNTAgMTQzIDIxM1YxODZaIixmaWxsOiJ1cmwoI3Zpc2lvbi1wbGFjZWhvbGRlci1sZW5zKSIsc3Ryb2tlOiIjMjYyYTJmIixzdHJva2VXaWR0aDoiMiJ9KSxLKCJwYXRoIix7ZDoiTTE1MSAxNzFDMTc5IDE1MCAyMTcgMTQ3IDI1MSAxNTRNMzg5IDE1NEM0MjMgMTQ3IDQ2MSAxNTAgNDg5IDE3MSIsc3Ryb2tlOiIjNGU1MzVhIixzdHJva2VXaWR0aDoiMyIsc3Ryb2tlTGluZWNhcDoicm91bmQifSksSygicGF0aCIse2Q6Ik0yNzcgMjMzQzI4OSAyMjQgMzA0IDIxOSAzMjAgMjE5QzMzNiAyMTkgMzUxIDIyNCAzNjMgMjMzIixzdHJva2U6IiMzYjQwNDYiLHN0cm9rZVdpZHRoOiI0IixzdHJva2VMaW5lY2FwOiJyb3VuZCJ9KV19KX1mdW5jdGlvbiByJCgkKXtsZXQgSj1gZ3JpZC9hcGkvZGV2aWNlLXBsYWNlaG9sZGVyLWFzc2V0P25hbWU9JHtlbmNvZGVVUklDb21wb25lbnQoJCl9YDtyZXR1cm4gdHlwZW9mIHdpbmRvdz4idSI/YC8ke0p9YDpjMShKKX1mdW5jdGlvbiBOMih7b3BlbjokLHdpZHRoOkosY2hpbGRyZW46USxzdHlsZTpaLHNpZGU6WD0icmlnaHQifSl7cmV0dXJuIEsoImFzaWRlIix7Y2xhc3NOYW1lOmBmaXhlZCB6LTM1IG1pbi13LTAgb3ZlcmZsb3ctaGlkZGVuIGJnLXBhbmVsLWJnIHRleHQtd2hpdGUvOTAgYmFja2Ryb3AtYmx1ci1bMThweF0gW2ZvbnQtZmFtaWx5Oi1hcHBsZS1zeXN0ZW0sc3lzdGVtLXVpLHNhbnMtc2VyaWZdIFt0cmFuc2l0aW9uOnRyYW5zZm9ybV8wLjI1c19lYXNlLG9wYWNpdHlfMC4yc19lYXNlXSBmbGV4IGZsZXgtY29sICR7WD09PSJsZWZ0Ij8idG9wLTAgYm90dG9tLTAgbGVmdC0wIHJvdW5kZWQtbm9uZSBib3JkZXItMCBib3JkZXItciBib3JkZXItd2hpdGUvMTAgc2hhZG93LVs4cHhfMF8zMnB4X3JnYmEoMCwwLDAsMC4zNSldIjoidG9wLTMgYm90dG9tLTMgcmlnaHQtMyByb3VuZGVkLVsxNHB4XSBib3JkZXIgYm9yZGVyLXdoaXRlLzEwIHNoYWRvdy1bMF8xMnB4XzQwcHhfcmdiYSgwLDAsMCwwLjU1KV0ifWAsc3R5bGU6e3dpZHRoOkosdHJhbnNmb3JtOiQ/InRyYW5zbGF0ZVgoMCkiOlg9PT0ibGVmdCI/InRyYW5zbGF0ZVgoLTEwMCUpIjoidHJhbnNsYXRlWChjYWxjKDEwMCUgKyAyNHB4KSkiLG9wYWNpdHk6JD8xOjAscG9pbnRlckV2ZW50czokPyJhdXRvIjoibm9uZSIsLi4uWn0sImFyaWEtaGlkZGVuIjohJCxjaGlsZHJlbjpRfSl9ZnVuY3Rpb24gTDIoe2NoaWxkcmVuOiQsc3R5bGU6Sn0pe3JldHVybiBLKCJoZWFkZXIiLHtjbGFzc05hbWU6ImZsZXggc2hyaW5rLTAgaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiBnYXAtMi41IHB4LTIuNSBweS0xLjUgcGwtMyIsc3R5bGU6SixjaGlsZHJlbjokfSl9ZnVuY3Rpb24gcjkoe2NoaWxkcmVuOiR9KXtyZXR1cm4gSygic3BhbiIse2NsYXNzTmFtZToidGV4dC1bMTFweF0gZm9udC1tZWRpdW0gdGV4dC13aGl0ZS81NSIsY2hpbGRyZW46JH0pfWZ1bmN0aW9uIHg1KHtvbkNsaWNrOiQsYXJpYUxhYmVsOko9IkNsb3NlIHBhbmVsIix0aXRsZTpRLGljb25TaXplOlo9MTZ9KXtyZXR1cm4gSygiYnV0dG9uIix7dHlwZToiYnV0dG9uIixvbkNsaWNrOiQsY2xhc3NOYW1lOiJmbGV4IGgtWzMwcHhdIHctWzMwcHhdIHNocmluay0wIGN1cnNvci1wb2ludGVyIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciByb3VuZGVkLW1kIGJvcmRlci1ub25lIGJnLXRyYW5zcGFyZW50IHAtMCB0ZXh0LVsjOGU4ZTkzXSBbdHJhbnNpdGlvbjpiYWNrZ3JvdW5kXzAuMTVzX2Vhc2UsY29sb3JfMC4xNXNfZWFzZV0gaG92ZXI6Ymctd2hpdGUvOCBob3Zlcjp0ZXh0LXdoaXRlIiwiYXJpYS1sYWJlbCI6Six0aXRsZTpRLGNoaWxkcmVuOksoRzAse3NpemU6WixzdHJva2VXaWR0aDoyfSl9KX1mdW5jdGlvbiBpOSgkLEope2xldFtRLFpdPVcobnVsbCk7cmV0dXJuIGIoKCk9PntpZighSnx8ISQpcmV0dXJuO2xldCBYPSExLFk9YXN5bmMoKT0+e3RyeXtsZXQgVj1hd2FpdChhd2FpdCBmZXRjaCgkLHtjYWNoZToibm8tc3RvcmUifSkpLmpzb24oKTtpZighWClaKFYpfWNhdGNoe319O1koKTtsZXQgcT1zZXRJbnRlcnZhbChZLDUwMDApO3JldHVybigpPT57WD0hMCxjbGVhckludGVydmFsKHEpfX0sWyQsSl0pLFF9ZnVuY3Rpb24gYTkoe3JlcG9ydDokfSl7aWYoISR8fCQudG90YWxCeXRlcz09PTApcmV0dXJuIG51bGw7bGV0e2VzdGltYXRlZEFkZGl0aW9uYWw6SixhdmFpbGFibGVCeXRlczpRLHRvdGFsQnl0ZXM6WixydW5uaW5nU2ltdWxhdG9yczpYfT0kLFk9TWF0aC5tYXgoMCxNYXRoLm1pbigxLDEtUS9aKSkscT1YK0osRz1KPT09MD8iI2U2NiI6Sjw9MT8iI2U5YTEzYiI6IiMzYjMiLFY9WT4wLjk/IiNlNjYiOlk+MC43NT8iI2U5YTEzYiI6IiMzYjMiO3JldHVybiBLKCJkaXYiLHtjbGFzc05hbWU6ImlubGluZS1mbGV4IG1heC13LWZ1bGwgbWluLXctMCBmbGV4LW5vd3JhcCBpdGVtcy1jZW50ZXIgZ2FwLTEuNSBvdmVyZmxvdy1oaWRkZW4gd2hpdGVzcGFjZS1ub3dyYXAgcHgtMiBweS1bM3B4XSByb3VuZGVkLWZ1bGwgYmctWyMxMDEwMTBdIGJvcmRlciBib3JkZXItWyMyMjJdIGZvbnQtbW9ubyB0ZXh0LVsxMXB4XSB0ZXh0LXdoaXRlLzcwIGxlYWRpbmctbm9uZSIsY2hpbGRyZW46W0soInNwYW4iLHtjbGFzc05hbWU6InNpemUtMS41IHJvdW5kZWQtWzNweF0gc2hyaW5rLTAiLHN0eWxlOntiYWNrZ3JvdW5kOkd9fSksSygic3BhbiIse2NsYXNzTmFtZToibWluLXctMCB0cnVuY2F0ZSIsY2hpbGRyZW46W0soInNwYW4iLHtjaGlsZHJlbjpbWCwiLyIscSwiIHNpbXMiXX0pLEsoInNwYW4iLHtjbGFzc05hbWU6InRleHQtd2hpdGUvNDAiLGNoaWxkcmVuOiIgwrcgIn0pLEsoInNwYW4iLHtjbGFzc05hbWU6InRleHQtd2hpdGUvNTUiLGNoaWxkcmVuOltwOShRKSwiIGZyZWUiXX0pXX0pLEsoInNwYW4iLHsiYXJpYS1oaWRkZW4iOiEwLGNsYXNzTmFtZToibWwtMC41IHctNyBoLVszcHhdIHNocmluay0wIGJnLVsjMWMxYzFjXSByb3VuZGVkLVsycHhdIG92ZXJmbG93LWhpZGRlbiBpbmxpbmUtYmxvY2siLGNoaWxkcmVuOksoInNwYW4iLHtjbGFzc05hbWU6ImJsb2NrIGgtZnVsbCB0cmFuc2l0aW9uLVt3aWR0aCxiYWNrZ3JvdW5kXSBkdXJhdGlvbi0zMDAgZWFzZS1vdXQiLHN0eWxlOnt3aWR0aDpgJHsoWSoxMDApLnRvRml4ZWQoMSl9JWAsYmFja2dyb3VuZDpWfX0pfSldfSl9ZnVuY3Rpb24gbjkoe3R5cGU6JCxzaXplOko9MjAsc2NyZWVuT246UT0hMX0pe2xldCBaPXt3aWR0aDpKLGhlaWdodDpKLHZpZXdCb3g6IjAgMCAyNCAyNCIsZmlsbDoibm9uZSIsc3Ryb2tlOiJjdXJyZW50Q29sb3IiLHN0cm9rZVdpZHRoOjEuNixzdHJva2VMaW5lY2FwOiJyb3VuZCIsc3Ryb2tlTGluZWpvaW46InJvdW5kIn07c3dpdGNoKCQpe2Nhc2UiaXBhZCI6cmV0dXJuIEsoInN2ZyIsey4uLlosY2hpbGRyZW46W1EmJksoInJlY3QiLHt4OiI1Iix5OiIzIix3aWR0aDoiMTUiLGhlaWdodDoiMTkiLHJ4OiIxLjY1IixmaWxsOiIjNDdiN2ZmIixzdHJva2U6Im5vbmUiLCJkYXRhLXRlc3RpZCI6ImRldmljZS1nbHlwaC1zY3JlZW4tb24ifSksSygicmVjdCIse3g6IjQiLHk6IjIuNSIsd2lkdGg6IjE2IixoZWlnaHQ6IjE5IixyeDoiMi41In0pLEsoImxpbmUiLHt4MToiMTIiLHkxOiIxOC41Iix4MjoiMTIiLHkyOiIxOC41In0pXX0pO2Nhc2Uid2F0Y2giOnJldHVybiBLKCJzdmciLHsuLi5aLGNoaWxkcmVuOltLKCJyZWN0Iix7eDoiNi41Iix5OiI3Iix3aWR0aDoiMTEiLGhlaWdodDoiMTAiLHJ4OiIzIn0pLEsoInBhdGgiLHtkOiJNOC41IDdsLjYtMy4yQTEuNSAxLjUgMCAwIDEgMTAuNiAyLjVoMi44YTEuNSAxLjUgMCAwIDEgMS41IDEuM0wxNS41IDcifSksSygicGF0aCIse2Q6Ik04LjUgMTdsLjYgMy4yYTEuNSAxLjUgMCAwIDAgMS41IDEuM2gyLjhhMS41IDEuNSAwIDAgMCAxLjUtMS4zbC42LTMuMiJ9KV19KTtjYXNlInZpc2lvbiI6cmV0dXJuIEsoInN2ZyIsey4uLlosY2hpbGRyZW46SygicGF0aCIse2Q6Ik0zIDExYTQgNCAwIDAgMSA0LTRoMTBhNCA0IDAgMCAxIDQgNHYyLjVhMi41IDIuNSAwIDAgMS0yLjUgMi41Yy0xLjggMC0yLjUtMS4yLTMuNS0xLjgtLjktLjUtMS42LS43LTIuNS0uN3MtMS42LjItMi41LjdjLTEgLjYtMS43IDEuOC0zLjUgMS44QTIuNSAyLjUgMCAwIDEgMyAxMy41eiJ9KX0pO2RlZmF1bHQ6cmV0dXJuIEsoInN2ZyIsey4uLlosY2hpbGRyZW46W1EmJksoInJlY3QiLHt4OiI2Iix5OiIzIix3aWR0aDoiMTEiLGhlaWdodDoiMTkiLHJ4OiIyIixmaWxsOiIjNDdiN2ZmIixzdHJva2U6Im5vbmUiLCJkYXRhLXRlc3RpZCI6ImRldmljZS1nbHlwaC1zY3JlZW4tb24ifSksSygicmVjdCIse3g6IjYuNSIseToiMi41Iix3aWR0aDoiMTEiLGhlaWdodDoiMTkiLHJ4OiIyLjgifSksSygibGluZSIse3gxOiIxMC41Iix5MToiNSIseDI6IjEzLjUiLHkyOiI1In0pXX0pfX1mdW5jdGlvbiBzOSh7ZGV2aWNlOiQsYWN0aXZlOkosc3RhcnRpbmc6USxzaHV0dGluZ0Rvd246WixvblNlbGVjdDpYLG9uU2h1dGRvd246WX0pe2xldCBxPSQuaGVscGVyLEc9JC5zdGF0ZT09PSJCb290ZWQiLFY9RTAoJC5uYW1lKSxCPXU5KCQucnVudGltZSksTj1xPyJTdHJlYW1pbmciOlE/Rz8iU3RhcnRpbmfigKYiOiJCb290aW5n4oCmIjpaPyJTaHV0dGluZyBkb3du4oCmIjpHPyJCb290ZWQiOm51bGwsej1xPyIjMzRkMzk5IjpHPyIjZTlhMTNiIjpudWxsLEw9cXx8RyxDPXE/Sj8iYmctWyMyNjM2NGNdIjoiYmctWyMyMDJiM2FdIjpKPyJiZy13aGl0ZS8xNSI6ImJnLXdoaXRlLzYiLEE9cT8idGV4dC1bI2QyZTdmZl0iOko/InRleHQtd2hpdGUvOTAiOiJ0ZXh0LXdoaXRlLzU1IjtyZXR1cm4gSygiZGl2Iix7cm9sZToiYnV0dG9uIix0YWJJbmRleDowLCJhcmlhLXByZXNzZWQiOkosb25DbGljazpYLG9uS2V5RG93bjooVSk9PntpZihVLmtleT09PSJFbnRlciJ8fFUua2V5PT09IiAiKVUucHJldmVudERlZmF1bHQoKSxYKCl9LGNsYXNzTmFtZTpgZ3JvdXAgcmVsYXRpdmUgZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTIuNSBweC0yIHB5LTEuNSByb3VuZGVkLWxnIGN1cnNvci1wb2ludGVyIHNlbGVjdC1ub25lIFt0cmFuc2l0aW9uOmJhY2tncm91bmRfMC4xMnNdICR7Sj8iYmctd2hpdGUvMTAgdGV4dC13aGl0ZSI6InRleHQtd2hpdGUvOTAgaG92ZXI6Ymctd2hpdGUvOCJ9YCxjaGlsZHJlbjpbSygiZGl2Iix7Y2xhc3NOYW1lOmByZWxhdGl2ZSBzaHJpbmstMCBncmlkIHBsYWNlLWl0ZW1zLWNlbnRlciBzaXplLTkgcm91bmRlZC1bOXB4XSBvdmVyZmxvdy1oaWRkZW4gJHtDfWAsY2hpbGRyZW46W0soInNwYW4iLHtjbGFzc05hbWU6QSxjaGlsZHJlbjpLKG45LHt0eXBlOlYsc2NyZWVuT246Qm9vbGVhbihxKX0pfSkseiYmIXEmJksoInNwYW4iLHtjbGFzc05hbWU6ImFic29sdXRlIGJvdHRvbS0wLjUgcmlnaHQtMC41IHNpemUtMS41IHJvdW5kZWQtZnVsbCByaW5nLTIgcmluZy1bIzFjMWMxZV0iLHN0eWxlOntiYWNrZ3JvdW5kOnp9fSldfSksSygiZGl2Iix7Y2xhc3NOYW1lOiJtaW4tdy0wIGZsZXgtMSIsY2hpbGRyZW46W0soImRpdiIse2NsYXNzTmFtZToidHJ1bmNhdGUgdGV4dC1bMTNweF0gZm9udC1zZW1pYm9sZCBsZWFkaW5nLXRpZ2h0IixjaGlsZHJlbjokLm5hbWV9KSxOJiZLKCJkaXYiLHtjbGFzc05hbWU6YHRydW5jYXRlIHRleHQtWzExcHhdIGxlYWRpbmctdGlnaHQgJHtxPyJ0ZXh0LVsjMzRkMzk5XSI6Sj8idGV4dC13aGl0ZS83NSI6InRleHQtd2hpdGUvNDUifWAsY2hpbGRyZW46Tn0pXX0pLEsoImRpdiIseyJkYXRhLXRlc3RpZCI6ImRldmljZS1yb3ctdHJhaWxpbmctc2xvdCIsY2xhc3NOYW1lOiJyZWxhdGl2ZSBzaHJpbmstMCB3LTggaC02IGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktZW5kIixjaGlsZHJlbjpbSygic3BhbiIse2NsYXNzTmFtZTpgYWJzb2x1dGUgcmlnaHQtMCB0ZXh0LVsxMXB4XSBmb250LW1vbm8gdGFidWxhci1udW1zIFt0cmFuc2l0aW9uOm9wYWNpdHlfMC4xMnNdICR7Sj8idGV4dC13aGl0ZS84NSI6InRleHQtd2hpdGUvNDAifSAke0w/Imdyb3VwLWhvdmVyOm9wYWNpdHktMCBncm91cC1mb2N1cy13aXRoaW46b3BhY2l0eS0wIjoiIn1gLGNoaWxkcmVuOkJ9KSxMJiZLKCJidXR0b24iLHt0eXBlOiJidXR0b24iLHRpdGxlOlo/IlNodXR0aW5nIGRvd27igKYiOiJTaHV0IGRvd24gc2ltdWxhdG9yIiwiYXJpYS1sYWJlbCI6IlNodXQgZG93biBzaW11bGF0b3IiLG9uQ2xpY2s6KFUpPT57VS5wcmV2ZW50RGVmYXVsdCgpLFUuc3RvcFByb3BhZ2F0aW9uKCksWSgpfSxkaXNhYmxlZDpaLGNsYXNzTmFtZTpgYWJzb2x1dGUgcmlnaHQtMCB0b3AtMS8yIC10cmFuc2xhdGUteS0xLzIgZ3JpZCBwbGFjZS1pdGVtcy1jZW50ZXIgc2l6ZS01IHJvdW5kZWQtbWQgb3BhY2l0eS0wIGdyb3VwLWhvdmVyOm9wYWNpdHktMTAwIGZvY3VzLXZpc2libGU6b3BhY2l0eS0xMDAgW3RyYW5zaXRpb246b3BhY2l0eV8wLjEycyxiYWNrZ3JvdW5kXzAuMTJzLGNvbG9yXzAuMTJzXSAke0o/InRleHQtd2hpdGUvODAgaG92ZXI6Ymctd2hpdGUvMjAiOiJ0ZXh0LXdoaXRlLzcwIGhvdmVyOmJnLXdoaXRlLzEyIGhvdmVyOnRleHQtd2hpdGUifWAsY2hpbGRyZW46SyhHMCx7c2l6ZToxMyxzdHJva2VXaWR0aDoyLjJ9KX0pXX0pXX0pfXZhciB6Mj0idmFyKC0tc2VydmUtc2ltLXBhbmVsLWJnKSIsajM9InZhcigtLXNlcnZlLXNpbS1wYW5lbC1iZy10cmFuc3BhcmVudCkiO3ZhciBpJD0xMjtmdW5jdGlvbiB0OSh7b3BlbjokLG9uQ2xvc2U6Six3aWR0aDpRLHNpZGU6Wj0icmlnaHQiLGRldmljZXM6WCx0b3RhbDpZPTAsaGFzTW9yZTpxPSExLG9uTG9hZE1vcmU6RyxvbkxvYWRBbGw6VixvblJlc2V0UGFnZTpCLHNlbGVjdGVkVWRpZDpOLG9uU2VsZWN0Onosc3RhcnRpbmc6TCxzaHV0dGluZ0Rvd246QyxvblNodXRkb3duOkF9KXtsZXQgSD0odHlwZW9mIHdpbmRvdz4idSI/dm9pZCAwOndpbmRvdy5fX1NJTV9QUkVWSUVXX18pPy5ncmlkTWVtb3J5RW5kcG9pbnQ/Pyh0eXBlb2Ygd2luZG93PiJ1Ij92b2lkIDA6YzEoImdyaWQvYXBpL21lbW9yeSIpKSxrPWk5KEgsJCksW0Ysd109VygiIiksVD1FMSgoKT0+e2xldCBmPUYudHJpbSgpLnRvTG93ZXJDYXNlKCk7aWYoIWZ8fCFYKXJldHVybiBYO3JldHVybiBYLmZpbHRlcigoaSk9PmkubmFtZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKGYpfHx5NShpLnJ1bnRpbWUpLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoZikpfSxbWCxGXSksUz1FKCExKTtiKCgpPT57bGV0IGY9ISFGLnRyaW0oKTtpZihmJiZxKVY/LigpO2Vsc2UgaWYoIWYmJlMuY3VycmVudClCPy4oKTtTLmN1cnJlbnQ9Zn0sW0YscSxWLEJdKTtsZXQgeD1FKG51bGwpO3JldHVybiBLKE4yLHtvcGVuOiQsd2lkdGg6USxzaWRlOlosc3R5bGU6e2JhY2tncm91bmRDb2xvcjp6Mn0sY2hpbGRyZW46W0soTDIse3N0eWxlOntqdXN0aWZ5Q29udGVudDoiZmxleC1zdGFydCIscGFkZGluZ0xlZnQ6MTYscGFkZGluZ1RvcDoxNixnYXA6NH0sY2hpbGRyZW46W0soImJ1dHRvbiIse3R5cGU6ImJ1dHRvbiIsb25DbGljazpKLGNsYXNzTmFtZToiZmxleCBoLVszMHB4XSB3LVszMHB4XSBzaHJpbmstMCBjdXJzb3ItcG9pbnRlciBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgcm91bmRlZC1tZCBib3JkZXItbm9uZSBiZy10cmFuc3BhcmVudCB0ZXh0LVsjOGU4ZTkzXSBbdHJhbnNpdGlvbjpiYWNrZ3JvdW5kXzAuMTVzX2Vhc2UsY29sb3JfMC4xNXNfZWFzZV0gaG92ZXI6Ymctd2hpdGUvOCBob3Zlcjp0ZXh0LXdoaXRlIiwiYXJpYS1sYWJlbCI6IkNsb3NlIGRldmljZXMgc2lkZWJhciIsImFyaWEtcHJlc3NlZCI6ITAsdGl0bGU6IkRldmljZXMiLGNoaWxkcmVuOksoSTAse3NpemU6MTgsc3Ryb2tlV2lkdGg6MS43NX0pfSksSyhFNSx7fSldfSksSygiZGl2Iix7Y2xhc3NOYW1lOiJweC00IHBiLTIgcHQtMC41IHNocmluay0wIixjaGlsZHJlbjpLKCJsYWJlbCIse2NsYXNzTmFtZToiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTIgcHgtMi41IGgtOCByb3VuZGVkLWxnIGJnLXdoaXRlLzYgZm9jdXMtd2l0aGluOmJnLXdoaXRlLzEwIFt0cmFuc2l0aW9uOmJhY2tncm91bmRfMC4xMnNdIixjaGlsZHJlbjpbSyhSMix7c2l6ZToxNCxzdHJva2VXaWR0aDoyLGNsYXNzTmFtZToidGV4dC13aGl0ZS80MCBzaHJpbmstMCJ9KSxLKCJpbnB1dCIse3ZhbHVlOkYsb25DaGFuZ2U6KGYpPT53KGYudGFyZ2V0LnZhbHVlKSxwbGFjZWhvbGRlcjoiU2VhcmNoIixjbGFzc05hbWU6Im1pbi13LTAgZmxleC0xIGJnLXRyYW5zcGFyZW50IGJvcmRlci1ub25lIG91dGxpbmUtbm9uZSB0ZXh0LVsxM3B4XSB0ZXh0LXdoaXRlLzkwIHBsYWNlaG9sZGVyOnRleHQtd2hpdGUvNDAifSksRiYmSygiYnV0dG9uIix7dHlwZToiYnV0dG9uIiwiYXJpYS1sYWJlbCI6IkNsZWFyIHNlYXJjaCIsb25DbGljazooKT0+dygiIiksY2xhc3NOYW1lOiJzaHJpbmstMCBncmlkIHBsYWNlLWl0ZW1zLWNlbnRlciBzaXplLTQgcm91bmRlZC1mdWxsIGJnLXdoaXRlLzE1IHRleHQtd2hpdGUvNzAgaG92ZXI6Ymctd2hpdGUvMjUiLGNoaWxkcmVuOksoRzAse3NpemU6OSxzdHJva2VXaWR0aDozfSl9KV19KX0pLEsoImRpdiIse2NsYXNzTmFtZToicmVsYXRpdmUgZmxleC0xIG1pbi1oLTAiLGNoaWxkcmVuOltLKCJkaXYiLHtyZWY6eCxvblNjcm9sbDooKT0+e2lmKEYudHJpbSgpfHwhcXx8IUcpcmV0dXJuO2xldCBmPXguY3VycmVudDtpZighZilyZXR1cm47aWYoZi5zY3JvbGxUb3ArZi5jbGllbnRIZWlnaHQ+PWYuc2Nyb2xsSGVpZ2h0LTI0MClHKCl9LGNsYXNzTmFtZToiaC1mdWxsIG1pbi1oLTAgb3ZlcmZsb3cteS1hdXRvIHB4LTQgcHktMiBbc2Nyb2xsYmFyLXdpZHRoOnRoaW5dIixjaGlsZHJlbjpUPT09bnVsbD9LKGEkLHt9KTpULmxlbmd0aD09PTA/SygiZGl2Iix7Y2xhc3NOYW1lOiJweC0yIHB5LTYgdGV4dC13aGl0ZS80MCB0ZXh0LVsxMnB4XSB0ZXh0LWNlbnRlciIsY2hpbGRyZW46Rj8iTm8gbWF0Y2hpbmcgc2ltdWxhdG9ycy4iOiJObyBpT1Mgc2ltdWxhdG9ycyBhdmFpbGFibGUuIn0pOksoWjEse2NoaWxkcmVuOltLKCJkaXYiLHtjbGFzc05hbWU6InB0LTEgcGItMSB0ZXh0LVsxMXB4XSBmb250LXNlbWlib2xkIHRleHQtd2hpdGUvNDAgdXBwZXJjYXNlIHRyYWNraW5nLXdpZGUiLGNoaWxkcmVuOiJBdmFpbGFibGUifSksSygiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGZsZXgtY29sIGdhcC0wLjUgcGItMSIsY2hpbGRyZW46VC5tYXAoKGYpPT5LKHM5LHtkZXZpY2U6ZixhY3RpdmU6Zi5kZXZpY2U9PT1OLHN0YXJ0aW5nOiEhTFtmLmRldmljZV0sc2h1dHRpbmdEb3duOiEhQ1tmLmRldmljZV0sb25TZWxlY3Q6KCk9PnooZi5kZXZpY2UpLG9uU2h1dGRvd246KCk9PkEoZi5kZXZpY2UpfSxmLmRldmljZSkpfSksIUYmJnEmJksoImRpdiIse2NsYXNzTmFtZToicHgtMiBweS0yIHRleHQtWzExcHhdIHRleHQtd2hpdGUvMzUgdGV4dC1jZW50ZXIiLGNoaWxkcmVuOlg/YCR7WC5sZW5ndGh9IG9mICR7WX1gOm51bGx9KV19KX0pLEsoImRpdiIseyJkYXRhLXRlc3RpZCI6ImRldmljZS1saXN0LXRvcC1mYWRlIixjbGFzc05hbWU6ImFic29sdXRlIHRvcC0wIGxlZnQtMCByaWdodC0wIGgtWzE2cHhdIHBvaW50ZXItZXZlbnRzLW5vbmUiLHN0eWxlOntiYWNrZ3JvdW5kOmBsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCAke3oyfSAwJSwgJHtqM30gMTAwJSlgfX0pLEsoImRpdiIseyJkYXRhLXRlc3RpZCI6ImRldmljZS1saXN0LWJvdHRvbS1mYWRlIixjbGFzc05hbWU6ImFic29sdXRlIGJvdHRvbS0wIGxlZnQtMCByaWdodC0wIGgtWzE2cHhdIHBvaW50ZXItZXZlbnRzLW5vbmUiLHN0eWxlOntiYWNrZ3JvdW5kOmBsaW5lYXItZ3JhZGllbnQodG8gdG9wLCAke3oyfSAwJSwgJHtqM30gMTAwJSlgfX0pXX0pLEsocyQse3JlcG9ydDprfSldfSl9ZnVuY3Rpb24gYSQoKXtyZXR1cm4gSyhaMSx7Y2hpbGRyZW46W0soImRpdiIse2NsYXNzTmFtZToicHgtMiBwdC0xIHBiLTEgdGV4dC1bMTFweF0gZm9udC1zZW1pYm9sZCB0ZXh0LXdoaXRlLzQwIHVwcGVyY2FzZSB0cmFja2luZy13aWRlIixjaGlsZHJlbjoiQXZhaWxhYmxlIn0pLEsoImRpdiIseyJkYXRhLXRlc3RpZCI6ImRldmljZS1saXN0LXNrZWxldG9uIixjbGFzc05hbWU6ImZsZXggZmxleC1jb2wgZ2FwLTAuNSBwYi0xIiwiYXJpYS1sYWJlbCI6IkxvYWRpbmcgc2ltdWxhdG9ycyIsImFyaWEtYnVzeSI6InRydWUiLGNoaWxkcmVuOkFycmF5LmZyb20oe2xlbmd0aDppJH0sKCQsSik9PksobiQse2luZGV4Okp9LEopKX0pXX0pfWZ1bmN0aW9uIG4kKHtpbmRleDokfSl7bGV0IEo9WyJ3LVs2MiVdIiwidy1bNzQlXSIsInctWzU4JV0iLCJ3LVs3MCVdIl1bJCU0XSxRPVsidy1bNDIlXSIsInctWzM2JV0iLCJ3LVs0OCVdIiwidy1bMzIlXSJdWyQlNF0sWj1bInctNyIsInctNiIsInctOCJdWyQlM107cmV0dXJuIEsoImRpdiIseyJkYXRhLXRlc3RpZCI6ImRldmljZS1yb3ctc2tlbGV0b24iLGNsYXNzTmFtZToiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTIuNSBweC0yIHB5LTEuNSByb3VuZGVkLWxnIHNlbGVjdC1ub25lIiwiYXJpYS1oaWRkZW4iOiJ0cnVlIixjaGlsZHJlbjpbSygiZGl2Iix7Y2xhc3NOYW1lOiJyZWxhdGl2ZSBzaHJpbmstMCBncmlkIHBsYWNlLWl0ZW1zLWNlbnRlciBzaXplLTkgcm91bmRlZC1bOXB4XSBvdmVyZmxvdy1oaWRkZW4gYmctd2hpdGUvNiIsY2hpbGRyZW46Sygic3BhbiIse2NsYXNzTmFtZToic2l6ZS00IHJvdW5kZWQtWzRweF0gYmctd2hpdGUvWzAuMTJdIn0pfSksSygiZGl2Iix7Y2xhc3NOYW1lOiJtaW4tdy0wIGZsZXgtMSBmbGV4IGZsZXgtY29sIGdhcC0xLjUiLGNoaWxkcmVuOltLKCJzcGFuIix7Y2xhc3NOYW1lOmBoLTMgcm91bmRlZC1mdWxsIGJnLXdoaXRlL1swLjEyXSAke0p9YH0pLEsoInNwYW4iLHtjbGFzc05hbWU6YGgtMi41IHJvdW5kZWQtZnVsbCBiZy13aGl0ZS9bMC4wOF0gJHtRfWB9KV19KSxLKCJzcGFuIix7Y2xhc3NOYW1lOmBzaHJpbmstMCBoLTIuNSByb3VuZGVkLWZ1bGwgYmctd2hpdGUvWzAuMDhdICR7Wn1gfSldfSl9ZnVuY3Rpb24gcyQoe3JlcG9ydDokfSl7aWYoISR8fCQudG90YWxCeXRlczw9MClyZXR1cm4gbnVsbDtyZXR1cm4gSygiZGl2Iix7Y2xhc3NOYW1lOiJzaHJpbmstMCBtaW4tdy0wIG92ZXJmbG93LWhpZGRlbiBweC0zIHB5LTIgZmxleCBqdXN0aWZ5LWNlbnRlciIsY2hpbGRyZW46SyhhOSx7cmVwb3J0OiR9KX0pfWZ1bmN0aW9uIHY1KHtwYW5lbFdpZHRoOiQsdmlzaWJsZTpKLG9uUG9pbnRlckRvd246USxhcmlhTGFiZWw6WixzaWRlOlg9InJpZ2h0In0pe2xldFtZLHFdPVcoITEpLFtHLFZdPVcoITEpLEI9WXx8RyxOPShYPT09ImxlZnQiPzA6MTIpKyQtOTtyZXR1cm4gSygiZGl2Iix7cm9sZToic2VwYXJhdG9yIiwiYXJpYS1vcmllbnRhdGlvbiI6InZlcnRpY2FsIiwiYXJpYS1sYWJlbCI6WiwiYXJpYS1oaWRkZW4iOiFKLG9uUG9pbnRlckRvd246KEwpPT57VighMCksUShMKX0sb25Qb2ludGVyVXA6KCk9PlYoITEpLG9uUG9pbnRlckNhbmNlbDooKT0+VighMSksb25Qb2ludGVyRW50ZXI6KCk9PnEoITApLG9uUG9pbnRlckxlYXZlOigpPT5xKCExKSxjbGFzc05hbWU6YGZpeGVkICR7WD09PSJsZWZ0Ij8idG9wLTAgYm90dG9tLTAiOiJ0b3AtMyBib3R0b20tMyJ9IHctNCB6LTM2IGN1cnNvci1jb2wtcmVzaXplIHRvdWNoLW5vbmUgdHJhbnNpdGlvbi1vcGFjaXR5IGR1cmF0aW9uLTIwMCAke0o/Im9wYWNpdHktMTAwIHBvaW50ZXItZXZlbnRzLWF1dG8iOiJvcGFjaXR5LTAgcG9pbnRlci1ldmVudHMtbm9uZSJ9YCxzdHlsZTpYPT09ImxlZnQiP3tsZWZ0Ok59OntyaWdodDpOfSxjaGlsZHJlbjpbSygiZGl2Iix7Y2xhc3NOYW1lOmBhYnNvbHV0ZSB0b3AtMCBib3R0b20tMCBsZWZ0LTEvMiB3LXB4IHBvaW50ZXItZXZlbnRzLW5vbmUgdHJhbnNpdGlvbi1vcGFjaXR5IGR1cmF0aW9uLTE1MCAke0I/Im9wYWNpdHktMTAwIjoib3BhY2l0eS0wIn1gLHN0eWxlOnt0cmFuc2Zvcm06InRyYW5zbGF0ZVgoLTAuNXB4KSIsYmFja2dyb3VuZDoibGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSwgcmdiYSgyNTUsMjU1LDI1NSwwKSAwJSwgcmdiYSgyNTUsMjU1LDI1NSwwLjI4KSAzMCUsIHJnYmEoMjU1LDI1NSwyNTUsMC4yOCkgNzAlLCByZ2JhKDI1NSwyNTUsMjU1LDApIDEwMCUpIn19KSxLKCJkaXYiLHtjbGFzc05hbWU6YGFic29sdXRlIHRvcC0xLzIgbGVmdC0xLzIgdy0xIGgtNyByb3VuZGVkLXhzIC10cmFuc2xhdGUteC0xLzIgLXRyYW5zbGF0ZS15LTEvMiB6LTEgcG9pbnRlci1ldmVudHMtbm9uZSBbdHJhbnNpdGlvbjpvcGFjaXR5XzAuMTVzX2Vhc2UsYmFja2dyb3VuZF8wLjE1c19lYXNlXSAke0I/Im9wYWNpdHktMTAwIjoib3BhY2l0eS0wIn0gJHtHPyJiZy1bIzlhOWE5ZV0iOiJiZy1bIzZlNmU3Ml0ifWB9KV19KX1mdW5jdGlvbiBlOSgpe2xldFskLEpdPVcoKCk9PnR5cGVvZiB3aW5kb3c8InUiJiZ3aW5kb3cubWF0Y2hNZWRpYT8uKCIocHJlZmVycy1jb250cmFzdDogbW9yZSkiKS5tYXRjaGVzPT09ITApO3JldHVybiBiKCgpPT57aWYodHlwZW9mIHdpbmRvdz4idSJ8fCF3aW5kb3cubWF0Y2hNZWRpYSlyZXR1cm47bGV0IFE9d2luZG93Lm1hdGNoTWVkaWEoIihwcmVmZXJzLWNvbnRyYXN0OiBtb3JlKSIpLFo9KCk9PkooUS5tYXRjaGVzKTtyZXR1cm4gWigpLFEuYWRkRXZlbnRMaXN0ZW5lcigiY2hhbmdlIixaKSwoKT0+US5yZW1vdmVFdmVudExpc3RlbmVyKCJjaGFuZ2UiLFopfSxbXSksJH1mdW5jdGlvbiBqNSgpe2xldFskLEpdPVcoKCk9PnR5cGVvZiB3aW5kb3c8InUiJiZ3aW5kb3cubWF0Y2hNZWRpYT8uKCIocHJlZmVycy1yZWR1Y2VkLW1vdGlvbjogcmVkdWNlKSIpLm1hdGNoZXM9PT0hMCk7cmV0dXJuIGIoKCk9PntpZih0eXBlb2Ygd2luZG93PiJ1Inx8IXdpbmRvdy5tYXRjaE1lZGlhKXJldHVybjtsZXQgUT13aW5kb3cubWF0Y2hNZWRpYSgiKHByZWZlcnMtcmVkdWNlZC1tb3Rpb246IHJlZHVjZSkiKSxaPSgpPT5KKFEubWF0Y2hlcyk7cmV0dXJuIFooKSxRLmFkZEV2ZW50TGlzdGVuZXIoImNoYW5nZSIsWiksKCk9PlEucmVtb3ZlRXZlbnRMaXN0ZW5lcigiY2hhbmdlIixaKX0sW10pLCR9dmFyICQ2PTI4MDt2YXIgaDM9IndpZHRoIDcwbXMgbGluZWFyIixSMz0id2lkdGggMC4yNHMgY3ViaWMtYmV6aWVyKDAuMjIsIDEsIDAuMzYsIDEpIixKNj0icGFkZGluZy1yaWdodCAwLjI0cyBjdWJpYy1iZXppZXIoMC4yMiwgMSwgMC4zNiwgMSkiLFE2PSJjdWJpYy1iZXppZXIoMC4yLCAwLjgyLCAwLjIyLCAxKSIsUjU9ImN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSkiLFo2PSJsaW5lYXIoMCwgMC4zMiA5JSwgMC42MiAxOCUsIDAuODUgMjclLCAxLjAxIDM2JSwgMS4wNyA0NSUsIDEuMDUgNTYlLCAxLjAyIDcwJSwgMSkiLEs2PSIwLjE2cyIsWDY9IjAuMnMiLFk2PTUscTY9e2lkbGU6MSxob3ZlcjoxLjA5LGRyYWc6MS4xMn0sRzY9e2lkbGU6IiM2ODZlNzgiLGhvdmVyOiIjYjdiYmMyIixkcmFnOiIjZjRmNmZhIn0sVjY9e2lkbGU6Mi42NSxob3Zlcjo0LjE1LGRyYWc6NC42NX0sQjY9e2lkbGU6MC4zOCxob3ZlcjowLjg2LGRyYWc6MX0saDU9bnVsbDtmdW5jdGlvbiBONigpe2lmKGg1IT1udWxsKXJldHVybiBoNTtpZih0eXBlb2YgQ1NTPiJ1Inx8dHlwZW9mIENTUy5zdXBwb3J0cyE9PSJmdW5jdGlvbiIpcmV0dXJuITE7cmV0dXJuIGg1PUNTUy5zdXBwb3J0cygiYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbiIsImxpbmVhcigwLCAxKSIpLGg1fXZhciB0JD00MCxMNj0xNCx6Nj0yNDAsQzY9MzAsVTY9MC4xNSxlJD04MCxINj0xNTAsQTY9MjUwLGczPSJzZXJ2ZS1zaW06c2ltdWxhdG9yLWZyYW1lLXNjYWxlIjtmdW5jdGlvbiBtMygkLEosUSxaKXtsZXQgWD0kKjMsWT1KPjA/TWF0aC5tYXgoMTgwLEotNDgpOlgscT1RPjAmJk51bWJlci5pc0Zpbml0ZShaKSYmWj4wP01hdGgubWF4KDE4MCwoUS0xMzYpKlopOlg7cmV0dXJuIE1hdGgubWF4KDE4MCxNYXRoLm1pbihYLFkscSkpfWZ1bmN0aW9uIGEwKCQsSixRLFosWCl7bGV0IFk9bTMoSixRLFosWCkscT1NYXRoLm1pbigyODAsWSk7cmV0dXJuIE1hdGgubWluKFksTWF0aC5tYXgocSwkKSl9ZnVuY3Rpb24gazYoJCxKLFEsWixYKXtsZXQgWT1OdW1iZXIuaXNGaW5pdGUoWCk/JCpYOiQ7cmV0dXJuIGEwKFksJCxKLFEsWil9ZnVuY3Rpb24gZzUoJCl7aWYoIU51bWJlci5pc0Zpbml0ZSgkKSlyZXR1cm4gJDtsZXQgSj10eXBlb2Ygd2luZG93PCJ1Ij9NYXRoLm1heCgxLHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvfHwxKToxO3JldHVybiBNYXRoLnJvdW5kKCQqSikvSn1mdW5jdGlvbiBmMygkLEope2lmKCQ8PTB8fEo8PTApcmV0dXJuIDA7bGV0IFE9MC41NSxaPSQqSipRLyhKK1EqJCk7cmV0dXJuIE1hdGgubWluKHQkLFopfWZ1bmN0aW9uIE82KCQsSixRKXtsZXQgWj0kLFg9UTtmb3IobGV0IFkgb2YgSil7bGV0IHE9TWF0aC5hYnMoJC1ZKTtpZihxPFgpWj1ZLFg9cX1yZXR1cm4gWn1mdW5jdGlvbiBGNigkKXtsZXR7ZnJvbTpKLHRvOlEsdmVsb2NpdHk6WixzdGlmZm5lc3M6WCxkYW1waW5nOlksb25VcGRhdGU6cSxvbkNvbXBsZXRlOkd9PSQsVj0wLjQsQj0wLjAzMzMzMzMzMzMzMzMzMzMzLE49Six6PVosTD1wZXJmb3JtYW5jZS5ub3coKSxDPTAsQT0hMSxVPShIKT0+e2lmKEEpcmV0dXJuO2xldCBrPU1hdGgubWluKChILUwpLzEwMDAsMC4wMzMzMzMzMzMzMzMzMzMzMyk7TD1IO2xldCBGPS1YKihOLVEpLVkqejtpZih6Kz1GKmssTis9eiprLE1hdGguYWJzKHopPDAuNCYmTWF0aC5hYnMoTi1RKTwwLjQpe3EoUSksRz8uKCk7cmV0dXJufXEoTiksQz1yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoVSl9O3JldHVybiBDPXJlcXVlc3RBbmltYXRpb25GcmFtZShVKSwoKT0+e2lmKEE9ITAsQyljYW5jZWxBbmltYXRpb25GcmFtZShDKX19ZnVuY3Rpb24gTTYoJCl7aWYoJC5sZW5ndGg8MilyZXR1cm4gMDtsZXQgSj0kWyQubGVuZ3RoLTFdLFE9JFswXTtmb3IobGV0IFg9JC5sZW5ndGgtMTtYPj0wO1gtLSlpZihKLnQtJFtYXS50Pj1lJCl7UT0kW1hdO2JyZWFrfWxldCBaPShKLnQtUS50KS8xMDAwO3JldHVybiBaPjA/KEoueC1RLngpL1o6MH12YXIgVzY9ImRyb3Atc2hhZG93KDAgMC41cHggMXB4IHJnYmEoMCwwLDAsMC4xKSkgZHJvcC1zaGFkb3coMCAycHggNXB4IHJnYmEoMCwwLDAsMC4xMykpIjtmdW5jdGlvbiAkSih7YXJjOiQscGhhc2U6SixyZWR1Y2VkTW90aW9uOlEsaGlnaENvbnRyYXN0OlosZm9jdXNWaXNpYmxlOlh9KXtsZXQgWT1KIT09ImlkbGUiLHE9Wj8xLjEyOjEsRz1RPzE6cTZbSl0sVj1WNltKXSpxLEI9Wj8xOkI2W0pdLE49WT9LNjpYNix6PVk/UTY6UjUsTD1ZJiZONigpP1o2OnosQz1RPyJub25lIjpgdHJhbnNmb3JtICR7Tn0gJHtMfWAsQT1RPyJub25lIjpgc3Ryb2tlICR7Tn0gJHt6fSwgc3Ryb2tlLXdpZHRoICR7Tn0gJHt6fWAsVT0kLnZpZXdCb3hTaXplLEg9JC5kLGs9e3RyYW5zZm9ybTpgdHJhbnNsYXRlM2QoMCwwLDApIHNjYWxlKCR7R30pYCx0cmFuc2Zvcm1PcmlnaW46IjEwMCUgMTAwJSIsdHJhbnNpdGlvbjpDLHdpbGxDaGFuZ2U6UT92b2lkIDA6InRyYW5zZm9ybSIsYmFja2ZhY2VWaXNpYmlsaXR5OiJoaWRkZW4iLFdlYmtpdEJhY2tmYWNlVmlzaWJpbGl0eToiaGlkZGVuIn07cmV0dXJuIEsoInN2ZyIse3dpZHRoOlUsaGVpZ2h0OlUsdmlld0JveDpgMCAwICR7VX0gJHtVfWAsZmlsbDoibm9uZSIseG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiYXJpYS1oaWRkZW4iOiJ0cnVlIixzaGFwZVJlbmRlcmluZzoiZ2VvbWV0cmljUHJlY2lzaW9uIixzdHlsZTp7ZGlzcGxheToiYmxvY2siLG92ZXJmbG93OiJ2aXNpYmxlIixjdXJzb3I6ImluaGVyaXQiLHRvdWNoQWN0aW9uOiJub25lIixwb2ludGVyRXZlbnRzOiJub25lIn0sY2hpbGRyZW46W0soImciLHsiYXJpYS1oaWRkZW4iOiJ0cnVlIixzdHlsZTp7cG9pbnRlckV2ZW50czoibm9uZSJ9LGNoaWxkcmVuOltLKCJwYXRoIix7ZDpILGZpbGw6Im5vbmUiLHN0cm9rZToicmdiYSgxMCwgMTMyLCAyNTUsIDAuOTUpIixzdHJva2VXaWR0aDooWTYqMis2KSpxLHN0cm9rZUxpbmVjYXA6InJvdW5kIix2ZWN0b3JFZmZlY3Q6Im5vbi1zY2FsaW5nLXN0cm9rZSIsc3R5bGU6e29wYWNpdHk6WD8wLjk1OjAsdHJhbnNpdGlvbjpRPyJvcGFjaXR5IDgwbXMgbGluZWFyIjpgb3BhY2l0eSAyMDBtcyAke1I1fWAsZmlsdGVyOiJkcm9wLXNoYWRvdygwIDAgMnB4IHJnYmEoMTAsMTMyLDI1NSwwLjU1KSkgZHJvcC1zaGFkb3coMCAwIDRweCByZ2JhKDEwLDEzMiwyNTUsMC4zMikpIn19KSxLKCJwYXRoIix7ZDpILGZpbGw6Im5vbmUiLHN0cm9rZToicmdiYSgyNTUsMjU1LDI1NSwwLjk1KSIsc3Ryb2tlV2lkdGg6MS41KnEsc3Ryb2tlTGluZWNhcDoicm91bmQiLHZlY3RvckVmZmVjdDoibm9uLXNjYWxpbmctc3Ryb2tlIixzdHlsZTp7b3BhY2l0eTpYPzAuNzowLHRyYW5zaXRpb246UT8ib3BhY2l0eSA4MG1zIGxpbmVhciI6YG9wYWNpdHkgMjAwbXMgJHtSNX1gfX0pXX0pLEsoImciLHsiYXJpYS1oaWRkZW4iOiJ0cnVlIixzdHlsZTprLGNoaWxkcmVuOksoImciLHtzdHlsZTp7cG9pbnRlckV2ZW50czoibm9uZSJ9LGNoaWxkcmVuOltLKCJwYXRoIix7ZDpILHN0cm9rZToiIzM0MzYzYiIsc3Ryb2tlV2lkdGg6VisyLjIqcSxzdHJva2VMaW5lY2FwOiJyb3VuZCIsdmVjdG9yRWZmZWN0OiJub24tc2NhbGluZy1zdHJva2UiLHN0eWxlOntvcGFjaXR5Ok1hdGgubWluKDEsQiswLjA4KSx0cmFuc2l0aW9uOmAke0F9LCBvcGFjaXR5ICR7Tn0gJHt6fWAsZmlsdGVyOlc2fX0pLEsoInBhdGgiLHtkOkgsc3Ryb2tlOkc2W0pdLHN0cm9rZVdpZHRoOlYsc3Ryb2tlTGluZWNhcDoicm91bmQiLHZlY3RvckVmZmVjdDoibm9uLXNjYWxpbmctc3Ryb2tlIixzdHlsZTp7b3BhY2l0eTpCLHRyYW5zaXRpb246YCR7QX0sIG9wYWNpdHkgJHtOfSAke3p9YCxmaWx0ZXI6VzZ9fSldfSl9KV19KX1mdW5jdGlvbiBQNih7c2ltdWxhdG9yUmVzaXplOiQsZGV2aWNlVHlwZTpKLHN0cmVhbUNvbmZpZzpRLGNvbnRhaW5lcldpZHRoOlosY29udGFpbmVySGVpZ2h0Olh9KXtsZXQgWT1qNSgpLHE9ZTkoKSxbRyxWXT1XKCExKSxCPUUxKCgpPT5PMyh7dHlwZTpKLGNvbmZpZzpRPz9udWxsLGNvbnRhaW5lcldpZHRoOlosY29udGFpbmVySGVpZ2h0Olh9KSxbSixRLFosWF0pLE49JC5pc1Jlc2l6aW5nfHwkLmlzSW5lcnRpYT8iZHJhZyI6JC5oYW5kbGVIb3ZlcmVkPyJob3ZlciI6ImlkbGUiO3JldHVybiBLKCJkaXYiLHtyb2xlOiJzZXBhcmF0b3IiLCJhcmlhLWxhYmVsIjoiUmVzaXplIHNpbXVsYXRvciB3aWR0aC4gRHJhZyB0aGUgY29ybmVyIG9yIHVzZSBMZWZ0IGFuZCBSaWdodCBBcnJvdyBrZXlzOyBob2xkIFNoaWZ0IGZvciBsYXJnZXIgc3RlcHMuIiwiYXJpYS1vcmllbnRhdGlvbiI6InZlcnRpY2FsIiwiYXJpYS12YWx1ZW1pbiI6TWF0aC5yb3VuZCgkLm1pbldpZHRoKSwiYXJpYS12YWx1ZW1heCI6TWF0aC5yb3VuZCgkLm1heFdpZHRoKSwiYXJpYS12YWx1ZW5vdyI6TWF0aC5yb3VuZCgkLmNvbW1pdHRlZFdpZHRoKSx0YWJJbmRleDowLHJlZjokLmhhbmRsZVJlZixvbktleURvd246JC5vbktleURvd24sb25Qb2ludGVyRG93bjokLm9uUG9pbnRlckRvd24sb25Qb2ludGVyTW92ZTokLm9uUG9pbnRlck1vdmUsb25Qb2ludGVyVXA6JC5vblBvaW50ZXJFbmQsb25Qb2ludGVyQ2FuY2VsOiQub25Qb2ludGVyRW5kLG9uTG9zdFBvaW50ZXJDYXB0dXJlOiQub25Qb2ludGVyRW5kLG9uUG9pbnRlckVudGVyOigpPT4kLnNldEhhbmRsZUhvdmVyZWQoITApLG9uUG9pbnRlckxlYXZlOigpPT4kLnNldEhhbmRsZUhvdmVyZWQoITEpLG9uRm9jdXM6KHopPT57Vih6LmN1cnJlbnRUYXJnZXQubWF0Y2hlcz8uKCI6Zm9jdXMtdmlzaWJsZSIpPz8hMSl9LG9uQmx1cjooKT0+VighMSksc3R5bGU6e3Bvc2l0aW9uOiJhYnNvbHV0ZSIscmlnaHQ6LTE0LGJvdHRvbTotMTQsd2lkdGg6NjAsaGVpZ2h0OjYwLGJvcmRlcjoibm9uZSIscGFkZGluZzowLG1hcmdpbjowLGRpc3BsYXk6ImZsZXgiLGFsaWduSXRlbXM6ImZsZXgtZW5kIixqdXN0aWZ5Q29udGVudDoiZmxleC1lbmQiLGJhY2tncm91bmQ6InRyYW5zcGFyZW50IixjdXJzb3I6Im53c2UtcmVzaXplIix0b3VjaEFjdGlvbjoibm9uZSIscG9pbnRlckV2ZW50czoiYXV0byIsb3V0bGluZToibm9uZSIsekluZGV4OjI1LFdlYmtpdFRhcEhpZ2hsaWdodENvbG9yOiJ0cmFuc3BhcmVudCJ9LGNoaWxkcmVuOksoJEose2FyYzpCLHBoYXNlOk4scmVkdWNlZE1vdGlvbjpZLGhpZ2hDb250cmFzdDpxLGZvY3VzVmlzaWJsZTpHfSl9KX1mdW5jdGlvbiBKSigkKXtpZighJHx8dHlwZW9mIGRvY3VtZW50PiJ1IilyZXR1cm47bGV0IEo9ZG9jdW1lbnQuaGVhZHx8ZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImhlYWQiKVswXSxRPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInN0eWxlIik7US50eXBlPSJ0ZXh0L2NzcyIsSi5hcHBlbmRDaGlsZChRKSxRLnN0eWxlU2hlZXQ/US5zdHlsZVNoZWV0LmNzc1RleHQ9JDpRLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCQpKX12YXIgUUo9KCQpPT57c3dpdGNoKCQpe2Nhc2Uic3VjY2VzcyI6cmV0dXJuIFhKO2Nhc2UiaW5mbyI6cmV0dXJuIHFKO2Nhc2Uid2FybmluZyI6cmV0dXJuIFlKO2Nhc2UiZXJyb3IiOnJldHVybiBHSjtkZWZhdWx0OnJldHVybiBudWxsfX0sWko9QXJyYXkoMTIpLmZpbGwoMCksS0o9KHt2aXNpYmxlOiQsY2xhc3NOYW1lOkp9KT0+e3JldHVybiBtLmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZTpbInNvbm5lci1sb2FkaW5nLXdyYXBwZXIiLEpdLmZpbHRlcihCb29sZWFuKS5qb2luKCIgIiksImRhdGEtdmlzaWJsZSI6JH0sbS5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6InNvbm5lci1zcGlubmVyIn0sWkoubWFwKChRLFopPT5tLmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZToic29ubmVyLWxvYWRpbmctYmFyIixrZXk6YHNwaW5uZXItYmFyLSR7Wn1gfSkpKSl9LFhKPW0uY3JlYXRlRWxlbWVudCgic3ZnIix7eG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIix2aWV3Qm94OiIwIDAgMjAgMjAiLGZpbGw6ImN1cnJlbnRDb2xvciIsaGVpZ2h0OiIyMCIsd2lkdGg6IjIwIn0sbS5jcmVhdGVFbGVtZW50KCJwYXRoIix7ZmlsbFJ1bGU6ImV2ZW5vZGQiLGQ6Ik0xMCAxOGE4IDggMCAxMDAtMTYgOCA4IDAgMDAwIDE2em0zLjg1Ny05LjgwOWEuNzUuNzUgMCAwMC0xLjIxNC0uODgybC0zLjQ4MyA0Ljc5LTEuODgtMS44OGEuNzUuNzUgMCAxMC0xLjA2IDEuMDYxbDIuNSAyLjVhLjc1Ljc1IDAgMDAxLjEzNy0uMDg5bDQtNS41eiIsY2xpcFJ1bGU6ImV2ZW5vZGQifSkpLFlKPW0uY3JlYXRlRWxlbWVudCgic3ZnIix7eG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIix2aWV3Qm94OiIwIDAgMjQgMjQiLGZpbGw6ImN1cnJlbnRDb2xvciIsaGVpZ2h0OiIyMCIsd2lkdGg6IjIwIn0sbS5jcmVhdGVFbGVtZW50KCJwYXRoIix7ZmlsbFJ1bGU6ImV2ZW5vZGQiLGQ6Ik05LjQwMSAzLjAwM2MxLjE1NS0yIDQuMDQzLTIgNS4xOTcgMGw3LjM1NSAxMi43NDhjMS4xNTQgMi0uMjkgNC41LTIuNTk5IDQuNUg0LjY0NWMtMi4zMDkgMC0zLjc1Mi0yLjUtMi41OTgtNC41TDkuNCAzLjAwM3pNMTIgOC4yNWEuNzUuNzUgMCAwMS43NS43NXYzLjc1YS43NS43NSAwIDAxLTEuNSAwVjlhLjc1Ljc1IDAgMDEuNzUtLjc1em0wIDguMjVhLjc1Ljc1IDAgMTAwLTEuNS43NS43NSAwIDAwMCAxLjV6IixjbGlwUnVsZToiZXZlbm9kZCJ9KSkscUo9bS5jcmVhdGVFbGVtZW50KCJzdmciLHt4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLHZpZXdCb3g6IjAgMCAyMCAyMCIsZmlsbDoiY3VycmVudENvbG9yIixoZWlnaHQ6IjIwIix3aWR0aDoiMjAifSxtLmNyZWF0ZUVsZW1lbnQoInBhdGgiLHtmaWxsUnVsZToiZXZlbm9kZCIsZDoiTTE4IDEwYTggOCAwIDExLTE2IDAgOCA4IDAgMDExNiAwem0tNy00YTEgMSAwIDExLTIgMCAxIDEgMCAwMTIgMHpNOSA5YS43NS43NSAwIDAwMCAxLjVoLjI1M2EuMjUuMjUgMCAwMS4yNDQuMzA0bC0uNDU5IDIuMDY2QTEuNzUgMS43NSAwIDAwMTAuNzQ3IDE1SDExYS43NS43NSAwIDAwMC0xLjVoLS4yNTNhLjI1LjI1IDAgMDEtLjI0NC0uMzA0bC40NTktMi4wNjZBMS43NSAxLjc1IDAgMDA5LjI1MyA5SDl6IixjbGlwUnVsZToiZXZlbm9kZCJ9KSksR0o9bS5jcmVhdGVFbGVtZW50KCJzdmciLHt4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLHZpZXdCb3g6IjAgMCAyMCAyMCIsZmlsbDoiY3VycmVudENvbG9yIixoZWlnaHQ6IjIwIix3aWR0aDoiMjAifSxtLmNyZWF0ZUVsZW1lbnQoInBhdGgiLHtmaWxsUnVsZToiZXZlbm9kZCIsZDoiTTE4IDEwYTggOCAwIDExLTE2IDAgOCA4IDAgMDExNiAwem0tOC01YS43NS43NSAwIDAxLjc1Ljc1djQuNWEuNzUuNzUgMCAwMS0xLjUgMHYtNC41QS43NS43NSAwIDAxMTAgNXptMCAxMGExIDEgMCAxMDAtMiAxIDEgMCAwMDAgMnoiLGNsaXBSdWxlOiJldmVub2RkIn0pKSxWSj1tLmNyZWF0ZUVsZW1lbnQoInN2ZyIse3htbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsd2lkdGg6IjEyIixoZWlnaHQ6IjEyIix2aWV3Qm94OiIwIDAgMjQgMjQiLGZpbGw6Im5vbmUiLHN0cm9rZToiY3VycmVudENvbG9yIixzdHJva2VXaWR0aDoiMS41IixzdHJva2VMaW5lY2FwOiJyb3VuZCIsc3Ryb2tlTGluZWpvaW46InJvdW5kIn0sbS5jcmVhdGVFbGVtZW50KCJsaW5lIix7eDE6IjE4Iix5MToiNiIseDI6IjYiLHkyOiIxOCJ9KSxtLmNyZWF0ZUVsZW1lbnQoImxpbmUiLHt4MToiNiIseTE6IjYiLHgyOiIxOCIseTI6IjE4In0pKSxCSj0oKT0+e2xldFskLEpdPW0udXNlU3RhdGUoZG9jdW1lbnQuaGlkZGVuKTtyZXR1cm4gbS51c2VFZmZlY3QoKCk9PntsZXQgUT0oKT0+e0ooZG9jdW1lbnQuaGlkZGVuKX07cmV0dXJuIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoInZpc2liaWxpdHljaGFuZ2UiLFEpLCgpPT53aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigidmlzaWJpbGl0eWNoYW5nZSIsUSl9LFtdKSwkfSxwMz0xO2NsYXNzIFQ2e2NvbnN0cnVjdG9yKCl7dGhpcy5zdWJzY3JpYmU9KCQpPT57cmV0dXJuIHRoaXMuc3Vic2NyaWJlcnMucHVzaCgkKSwoKT0+e2xldCBKPXRoaXMuc3Vic2NyaWJlcnMuaW5kZXhPZigkKTt0aGlzLnN1YnNjcmliZXJzLnNwbGljZShKLDEpfX0sdGhpcy5wdWJsaXNoPSgkKT0+e3RoaXMuc3Vic2NyaWJlcnMuZm9yRWFjaCgoSik9PkooJCkpfSx0aGlzLmFkZFRvYXN0PSgkKT0+e3RoaXMucHVibGlzaCgkKSx0aGlzLnRvYXN0cz1bLi4udGhpcy50b2FzdHMsJF19LHRoaXMuY3JlYXRlPSgkKT0+e3ZhciBKO2xldHttZXNzYWdlOlEsLi4uWn09JCxYPXR5cGVvZigkPT1udWxsP3ZvaWQgMDokLmlkKT09PSJudW1iZXIifHwoKEo9JC5pZCk9PW51bGw/dm9pZCAwOkoubGVuZ3RoKT4wPyQuaWQ6cDMrKyxZPXRoaXMudG9hc3RzLmZpbmQoKEcpPT57cmV0dXJuIEcuaWQ9PT1YfSkscT0kLmRpc21pc3NpYmxlPT09dm9pZCAwPyEwOiQuZGlzbWlzc2libGU7aWYodGhpcy5kaXNtaXNzZWRUb2FzdHMuaGFzKFgpKXRoaXMuZGlzbWlzc2VkVG9hc3RzLmRlbGV0ZShYKTtpZihZKXRoaXMudG9hc3RzPXRoaXMudG9hc3RzLm1hcCgoRyk9PntpZihHLmlkPT09WClyZXR1cm4gdGhpcy5wdWJsaXNoKHsuLi5HLC4uLiQsaWQ6WCx0aXRsZTpRfSksey4uLkcsLi4uJCxpZDpYLGRpc21pc3NpYmxlOnEsdGl0bGU6UX07cmV0dXJuIEd9KTtlbHNlIHRoaXMuYWRkVG9hc3Qoe3RpdGxlOlEsLi4uWixkaXNtaXNzaWJsZTpxLGlkOlh9KTtyZXR1cm4gWH0sdGhpcy5kaXNtaXNzPSgkKT0+e2lmKCQpdGhpcy5kaXNtaXNzZWRUb2FzdHMuYWRkKCQpLHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+dGhpcy5zdWJzY3JpYmVycy5mb3JFYWNoKChKKT0+Sih7aWQ6JCxkaXNtaXNzOiEwfSkpKTtlbHNlIHRoaXMudG9hc3RzLmZvckVhY2goKEopPT57dGhpcy5zdWJzY3JpYmVycy5mb3JFYWNoKChRKT0+USh7aWQ6Si5pZCxkaXNtaXNzOiEwfSkpfSk7cmV0dXJuICR9LHRoaXMubWVzc2FnZT0oJCxKKT0+e3JldHVybiB0aGlzLmNyZWF0ZSh7Li4uSixtZXNzYWdlOiR9KX0sdGhpcy5lcnJvcj0oJCxKKT0+e3JldHVybiB0aGlzLmNyZWF0ZSh7Li4uSixtZXNzYWdlOiQsdHlwZToiZXJyb3IifSl9LHRoaXMuc3VjY2Vzcz0oJCxKKT0+e3JldHVybiB0aGlzLmNyZWF0ZSh7Li4uSix0eXBlOiJzdWNjZXNzIixtZXNzYWdlOiR9KX0sdGhpcy5pbmZvPSgkLEopPT57cmV0dXJuIHRoaXMuY3JlYXRlKHsuLi5KLHR5cGU6ImluZm8iLG1lc3NhZ2U6JH0pfSx0aGlzLndhcm5pbmc9KCQsSik9PntyZXR1cm4gdGhpcy5jcmVhdGUoey4uLkosdHlwZToid2FybmluZyIsbWVzc2FnZTokfSl9LHRoaXMubG9hZGluZz0oJCxKKT0+e3JldHVybiB0aGlzLmNyZWF0ZSh7Li4uSix0eXBlOiJsb2FkaW5nIixtZXNzYWdlOiR9KX0sdGhpcy5wcm9taXNlPSgkLEopPT57aWYoIUopcmV0dXJuO2xldCBRPXZvaWQgMDtpZihKLmxvYWRpbmchPT12b2lkIDApUT10aGlzLmNyZWF0ZSh7Li4uSixwcm9taXNlOiQsdHlwZToibG9hZGluZyIsbWVzc2FnZTpKLmxvYWRpbmcsZGVzY3JpcHRpb246dHlwZW9mIEouZGVzY3JpcHRpb24hPT0iZnVuY3Rpb24iP0ouZGVzY3JpcHRpb246dm9pZCAwfSk7bGV0IFo9UHJvbWlzZS5yZXNvbHZlKCQgaW5zdGFuY2VvZiBGdW5jdGlvbj8kKCk6JCksWD1RIT09dm9pZCAwLFkscT1aLnRoZW4oYXN5bmMoVik9PntpZihZPVsicmVzb2x2ZSIsVl0sbS5pc1ZhbGlkRWxlbWVudChWKSlYPSExLHRoaXMuY3JlYXRlKHtpZDpRLHR5cGU6ImRlZmF1bHQiLG1lc3NhZ2U6Vn0pO2Vsc2UgaWYoTEooVikmJiFWLm9rKXtYPSExO2xldCBOPXR5cGVvZiBKLmVycm9yPT09ImZ1bmN0aW9uIj9hd2FpdCBKLmVycm9yKGBIVFRQIGVycm9yISBzdGF0dXM6ICR7Vi5zdGF0dXN9YCk6Si5lcnJvcix6PXR5cGVvZiBKLmRlc2NyaXB0aW9uPT09ImZ1bmN0aW9uIj9hd2FpdCBKLmRlc2NyaXB0aW9uKGBIVFRQIGVycm9yISBzdGF0dXM6ICR7Vi5zdGF0dXN9YCk6Si5kZXNjcmlwdGlvbixDPXR5cGVvZiBOPT09Im9iamVjdCImJiFtLmlzVmFsaWRFbGVtZW50KE4pP046e21lc3NhZ2U6Tn07dGhpcy5jcmVhdGUoe2lkOlEsdHlwZToiZXJyb3IiLGRlc2NyaXB0aW9uOnosLi4uQ30pfWVsc2UgaWYoViBpbnN0YW5jZW9mIEVycm9yKXtYPSExO2xldCBOPXR5cGVvZiBKLmVycm9yPT09ImZ1bmN0aW9uIj9hd2FpdCBKLmVycm9yKFYpOkouZXJyb3Isej10eXBlb2YgSi5kZXNjcmlwdGlvbj09PSJmdW5jdGlvbiI/YXdhaXQgSi5kZXNjcmlwdGlvbihWKTpKLmRlc2NyaXB0aW9uLEM9dHlwZW9mIE49PT0ib2JqZWN0IiYmIW0uaXNWYWxpZEVsZW1lbnQoTik/Tjp7bWVzc2FnZTpOfTt0aGlzLmNyZWF0ZSh7aWQ6USx0eXBlOiJlcnJvciIsZGVzY3JpcHRpb246eiwuLi5DfSl9ZWxzZSBpZihKLnN1Y2Nlc3MhPT12b2lkIDApe1g9ITE7bGV0IE49dHlwZW9mIEouc3VjY2Vzcz09PSJmdW5jdGlvbiI/YXdhaXQgSi5zdWNjZXNzKFYpOkouc3VjY2Vzcyx6PXR5cGVvZiBKLmRlc2NyaXB0aW9uPT09ImZ1bmN0aW9uIj9hd2FpdCBKLmRlc2NyaXB0aW9uKFYpOkouZGVzY3JpcHRpb24sQz10eXBlb2YgTj09PSJvYmplY3QiJiYhbS5pc1ZhbGlkRWxlbWVudChOKT9OOnttZXNzYWdlOk59O3RoaXMuY3JlYXRlKHtpZDpRLHR5cGU6InN1Y2Nlc3MiLGRlc2NyaXB0aW9uOnosLi4uQ30pfX0pLmNhdGNoKGFzeW5jKFYpPT57aWYoWT1bInJlamVjdCIsVl0sSi5lcnJvciE9PXZvaWQgMCl7WD0hMTtsZXQgQj10eXBlb2YgSi5lcnJvcj09PSJmdW5jdGlvbiI/YXdhaXQgSi5lcnJvcihWKTpKLmVycm9yLE49dHlwZW9mIEouZGVzY3JpcHRpb249PT0iZnVuY3Rpb24iP2F3YWl0IEouZGVzY3JpcHRpb24oVik6Si5kZXNjcmlwdGlvbixMPXR5cGVvZiBCPT09Im9iamVjdCImJiFtLmlzVmFsaWRFbGVtZW50KEIpP0I6e21lc3NhZ2U6Qn07dGhpcy5jcmVhdGUoe2lkOlEsdHlwZToiZXJyb3IiLGRlc2NyaXB0aW9uOk4sLi4uTH0pfX0pLmZpbmFsbHkoKCk9PntpZihYKXRoaXMuZGlzbWlzcyhRKSxRPXZvaWQgMDtKLmZpbmFsbHk9PW51bGx8fEouZmluYWxseS5jYWxsKEopfSksRz0oKT0+bmV3IFByb21pc2UoKFYsQik9PnEudGhlbigoKT0+WVswXT09PSJyZWplY3QiP0IoWVsxXSk6VihZWzFdKSkuY2F0Y2goQikpO2lmKHR5cGVvZiBRIT09InN0cmluZyImJnR5cGVvZiBRIT09Im51bWJlciIpcmV0dXJue3Vud3JhcDpHfTtlbHNlIHJldHVybiBPYmplY3QuYXNzaWduKFEse3Vud3JhcDpHfSl9LHRoaXMuY3VzdG9tPSgkLEopPT57bGV0IFE9KEo9PW51bGw/dm9pZCAwOkouaWQpfHxwMysrO3JldHVybiB0aGlzLmNyZWF0ZSh7anN4OiQoUSksaWQ6USwuLi5KfSksUX0sdGhpcy5nZXRBY3RpdmVUb2FzdHM9KCk9PntyZXR1cm4gdGhpcy50b2FzdHMuZmlsdGVyKCgkKT0+IXRoaXMuZGlzbWlzc2VkVG9hc3RzLmhhcygkLmlkKSl9LHRoaXMuc3Vic2NyaWJlcnM9W10sdGhpcy50b2FzdHM9W10sdGhpcy5kaXNtaXNzZWRUb2FzdHM9bmV3IFNldH19dmFyIEswPW5ldyBUNixOSj0oJCxKKT0+e2xldCBRPShKPT1udWxsP3ZvaWQgMDpKLmlkKXx8cDMrKztyZXR1cm4gSzAuYWRkVG9hc3Qoe3RpdGxlOiQsLi4uSixpZDpRfSksUX0sTEo9KCQpPT57cmV0dXJuICQmJnR5cGVvZiAkPT09Im9iamVjdCImJiJvayJpbiAkJiZ0eXBlb2YgJC5vaz09PSJib29sZWFuIiYmInN0YXR1cyJpbiAkJiZ0eXBlb2YgJC5zdGF0dXM9PT0ibnVtYmVyIn0seko9TkosQ0o9KCk9PkswLnRvYXN0cyxVSj0oKT0+SzAuZ2V0QWN0aXZlVG9hc3RzKCksZDI9T2JqZWN0LmFzc2lnbih6Six7c3VjY2VzczpLMC5zdWNjZXNzLGluZm86SzAuaW5mbyx3YXJuaW5nOkswLndhcm5pbmcsZXJyb3I6SzAuZXJyb3IsY3VzdG9tOkswLmN1c3RvbSxtZXNzYWdlOkswLm1lc3NhZ2UscHJvbWlzZTpLMC5wcm9taXNlLGRpc21pc3M6SzAuZGlzbWlzcyxsb2FkaW5nOkswLmxvYWRpbmd9LHtnZXRIaXN0b3J5OkNKLGdldFRvYXN0czpVSn0pO0pKKCJbZGF0YS1zb25uZXItdG9hc3Rlcl1bZGlyPWx0cl0saHRtbFtkaXI9bHRyXXstLXRvYXN0LWljb24tbWFyZ2luLXN0YXJ0Oi0zcHg7LS10b2FzdC1pY29uLW1hcmdpbi1lbmQ6NHB4Oy0tdG9hc3Qtc3ZnLW1hcmdpbi1zdGFydDotMXB4Oy0tdG9hc3Qtc3ZnLW1hcmdpbi1lbmQ6MHB4Oy0tdG9hc3QtYnV0dG9uLW1hcmdpbi1zdGFydDphdXRvOy0tdG9hc3QtYnV0dG9uLW1hcmdpbi1lbmQ6MDstLXRvYXN0LWNsb3NlLWJ1dHRvbi1zdGFydDowOy0tdG9hc3QtY2xvc2UtYnV0dG9uLWVuZDp1bnNldDstLXRvYXN0LWNsb3NlLWJ1dHRvbi10cmFuc2Zvcm06dHJhbnNsYXRlKC0zNSUsIC0zNSUpfVtkYXRhLXNvbm5lci10b2FzdGVyXVtkaXI9cnRsXSxodG1sW2Rpcj1ydGxdey0tdG9hc3QtaWNvbi1tYXJnaW4tc3RhcnQ6NHB4Oy0tdG9hc3QtaWNvbi1tYXJnaW4tZW5kOi0zcHg7LS10b2FzdC1zdmctbWFyZ2luLXN0YXJ0OjBweDstLXRvYXN0LXN2Zy1tYXJnaW4tZW5kOi0xcHg7LS10b2FzdC1idXR0b24tbWFyZ2luLXN0YXJ0OjA7LS10b2FzdC1idXR0b24tbWFyZ2luLWVuZDphdXRvOy0tdG9hc3QtY2xvc2UtYnV0dG9uLXN0YXJ0OnVuc2V0Oy0tdG9hc3QtY2xvc2UtYnV0dG9uLWVuZDowOy0tdG9hc3QtY2xvc2UtYnV0dG9uLXRyYW5zZm9ybTp0cmFuc2xhdGUoMzUlLCAtMzUlKX1bZGF0YS1zb25uZXItdG9hc3Rlcl17cG9zaXRpb246Zml4ZWQ7d2lkdGg6dmFyKC0td2lkdGgpO2ZvbnQtZmFtaWx5OnVpLXNhbnMtc2VyaWYsc3lzdGVtLXVpLC1hcHBsZS1zeXN0ZW0sQmxpbmtNYWNTeXN0ZW1Gb250LFNlZ29lIFVJLFJvYm90byxIZWx2ZXRpY2EgTmV1ZSxBcmlhbCxOb3RvIFNhbnMsc2Fucy1zZXJpZixBcHBsZSBDb2xvciBFbW9qaSxTZWdvZSBVSSBFbW9qaSxTZWdvZSBVSSBTeW1ib2wsTm90byBDb2xvciBFbW9qaTstLWdyYXkxOmhzbCgwLCAwJSwgOTklKTstLWdyYXkyOmhzbCgwLCAwJSwgOTcuMyUpOy0tZ3JheTM6aHNsKDAsIDAlLCA5NS4xJSk7LS1ncmF5NDpoc2woMCwgMCUsIDkzJSk7LS1ncmF5NTpoc2woMCwgMCUsIDkwLjklKTstLWdyYXk2OmhzbCgwLCAwJSwgODguNyUpOy0tZ3JheTc6aHNsKDAsIDAlLCA4NS44JSk7LS1ncmF5ODpoc2woMCwgMCUsIDc4JSk7LS1ncmF5OTpoc2woMCwgMCUsIDU2LjElKTstLWdyYXkxMDpoc2woMCwgMCUsIDUyLjMlKTstLWdyYXkxMTpoc2woMCwgMCUsIDQzLjUlKTstLWdyYXkxMjpoc2woMCwgMCUsIDklKTstLWJvcmRlci1yYWRpdXM6OHB4O2JveC1zaXppbmc6Ym9yZGVyLWJveDtwYWRkaW5nOjA7bWFyZ2luOjA7bGlzdC1zdHlsZTpub25lO291dGxpbmU6MDt6LWluZGV4Ojk5OTk5OTk5OTt0cmFuc2l0aW9uOnRyYW5zZm9ybSAuNHMgZWFzZX1AbWVkaWEgKGhvdmVyOm5vbmUpIGFuZCAocG9pbnRlcjpjb2Fyc2Upe1tkYXRhLXNvbm5lci10b2FzdGVyXVtkYXRhLWxpZnRlZD10cnVlXXt0cmFuc2Zvcm06bm9uZX19W2RhdGEtc29ubmVyLXRvYXN0ZXJdW2RhdGEteC1wb3NpdGlvbj1yaWdodF17cmlnaHQ6dmFyKC0tb2Zmc2V0LXJpZ2h0KX1bZGF0YS1zb25uZXItdG9hc3Rlcl1bZGF0YS14LXBvc2l0aW9uPWxlZnRde2xlZnQ6dmFyKC0tb2Zmc2V0LWxlZnQpfVtkYXRhLXNvbm5lci10b2FzdGVyXVtkYXRhLXgtcG9zaXRpb249Y2VudGVyXXtsZWZ0OjUwJTt0cmFuc2Zvcm06dHJhbnNsYXRlWCgtNTAlKX1bZGF0YS1zb25uZXItdG9hc3Rlcl1bZGF0YS15LXBvc2l0aW9uPXRvcF17dG9wOnZhcigtLW9mZnNldC10b3ApfVtkYXRhLXNvbm5lci10b2FzdGVyXVtkYXRhLXktcG9zaXRpb249Ym90dG9tXXtib3R0b206dmFyKC0tb2Zmc2V0LWJvdHRvbSl9W2RhdGEtc29ubmVyLXRvYXN0XXstLXk6dHJhbnNsYXRlWSgxMDAlKTstLWxpZnQtYW1vdW50OmNhbGModmFyKC0tbGlmdCkgKiB2YXIoLS1nYXApKTt6LWluZGV4OnZhcigtLXotaW5kZXgpO3Bvc2l0aW9uOmFic29sdXRlO29wYWNpdHk6MDt0cmFuc2Zvcm06dmFyKC0teSk7dG91Y2gtYWN0aW9uOm5vbmU7dHJhbnNpdGlvbjp0cmFuc2Zvcm0gLjRzLG9wYWNpdHkgLjRzLGhlaWdodCAuNHMsYm94LXNoYWRvdyAuMnM7Ym94LXNpemluZzpib3JkZXItYm94O291dGxpbmU6MDtvdmVyZmxvdy13cmFwOmFueXdoZXJlfVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1zdHlsZWQ9dHJ1ZV17cGFkZGluZzoxNnB4O2JhY2tncm91bmQ6dmFyKC0tbm9ybWFsLWJnKTtib3JkZXI6MXB4IHNvbGlkIHZhcigtLW5vcm1hbC1ib3JkZXIpO2NvbG9yOnZhcigtLW5vcm1hbC10ZXh0KTtib3JkZXItcmFkaXVzOnZhcigtLWJvcmRlci1yYWRpdXMpO2JveC1zaGFkb3c6MCA0cHggMTJweCByZ2JhKDAsMCwwLC4xKTt3aWR0aDp2YXIoLS13aWR0aCk7Zm9udC1zaXplOjEzcHg7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6NnB4fVtkYXRhLXNvbm5lci10b2FzdF06Zm9jdXMtdmlzaWJsZXtib3gtc2hhZG93OjAgNHB4IDEycHggcmdiYSgwLDAsMCwuMSksMCAwIDAgMnB4IHJnYmEoMCwwLDAsLjIpfVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS15LXBvc2l0aW9uPXRvcF17dG9wOjA7LS15OnRyYW5zbGF0ZVkoLTEwMCUpOy0tbGlmdDoxOy0tbGlmdC1hbW91bnQ6Y2FsYygxICogdmFyKC0tZ2FwKSl9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXktcG9zaXRpb249Ym90dG9tXXtib3R0b206MDstLXk6dHJhbnNsYXRlWSgxMDAlKTstLWxpZnQ6LTE7LS1saWZ0LWFtb3VudDpjYWxjKHZhcigtLWxpZnQpICogdmFyKC0tZ2FwKSl9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXN0eWxlZD10cnVlXSBbZGF0YS1kZXNjcmlwdGlvbl17Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OjEuNDtjb2xvcjojM2YzZjNmfVtkYXRhLXJpY2gtY29sb3JzPXRydWVdW2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXN0eWxlZD10cnVlXSBbZGF0YS1kZXNjcmlwdGlvbl17Y29sb3I6aW5oZXJpdH1bZGF0YS1zb25uZXItdG9hc3Rlcl1bZGF0YS1zb25uZXItdGhlbWU9ZGFya10gW2RhdGEtZGVzY3JpcHRpb25de2NvbG9yOiNlOGU4ZTh9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXN0eWxlZD10cnVlXSBbZGF0YS10aXRsZV17Zm9udC13ZWlnaHQ6NTAwO2xpbmUtaGVpZ2h0OjEuNTtjb2xvcjppbmhlcml0fVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1zdHlsZWQ9dHJ1ZV0gW2RhdGEtaWNvbl17ZGlzcGxheTpmbGV4O2hlaWdodDoxNnB4O3dpZHRoOjE2cHg7cG9zaXRpb246cmVsYXRpdmU7anVzdGlmeS1jb250ZW50OmZsZXgtc3RhcnQ7YWxpZ24taXRlbXM6Y2VudGVyO2ZsZXgtc2hyaW5rOjA7bWFyZ2luLWxlZnQ6dmFyKC0tdG9hc3QtaWNvbi1tYXJnaW4tc3RhcnQpO21hcmdpbi1yaWdodDp2YXIoLS10b2FzdC1pY29uLW1hcmdpbi1lbmQpfVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1wcm9taXNlPXRydWVdIFtkYXRhLWljb25dPnN2Z3tvcGFjaXR5OjA7dHJhbnNmb3JtOnNjYWxlKC44KTt0cmFuc2Zvcm0tb3JpZ2luOmNlbnRlcjthbmltYXRpb246c29ubmVyLWZhZGUtaW4gLjNzIGVhc2UgZm9yd2FyZHN9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXN0eWxlZD10cnVlXSBbZGF0YS1pY29uXT4qe2ZsZXgtc2hyaW5rOjB9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXN0eWxlZD10cnVlXSBbZGF0YS1pY29uXSBzdmd7bWFyZ2luLWxlZnQ6dmFyKC0tdG9hc3Qtc3ZnLW1hcmdpbi1zdGFydCk7bWFyZ2luLXJpZ2h0OnZhcigtLXRvYXN0LXN2Zy1tYXJnaW4tZW5kKX1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtc3R5bGVkPXRydWVdIFtkYXRhLWNvbnRlbnRde2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47Z2FwOjJweH1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtc3R5bGVkPXRydWVdIFtkYXRhLWJ1dHRvbl17Ym9yZGVyLXJhZGl1czo0cHg7cGFkZGluZy1sZWZ0OjhweDtwYWRkaW5nLXJpZ2h0OjhweDtoZWlnaHQ6MjRweDtmb250LXNpemU6MTJweDtjb2xvcjp2YXIoLS1ub3JtYWwtYmcpO2JhY2tncm91bmQ6dmFyKC0tbm9ybWFsLXRleHQpO21hcmdpbi1sZWZ0OnZhcigtLXRvYXN0LWJ1dHRvbi1tYXJnaW4tc3RhcnQpO21hcmdpbi1yaWdodDp2YXIoLS10b2FzdC1idXR0b24tbWFyZ2luLWVuZCk7Ym9yZGVyOm5vbmU7Zm9udC13ZWlnaHQ6NTAwO2N1cnNvcjpwb2ludGVyO291dGxpbmU6MDtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2ZsZXgtc2hyaW5rOjA7dHJhbnNpdGlvbjpvcGFjaXR5IC40cyxib3gtc2hhZG93IC4yc31bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtc3R5bGVkPXRydWVdIFtkYXRhLWJ1dHRvbl06Zm9jdXMtdmlzaWJsZXtib3gtc2hhZG93OjAgMCAwIDJweCByZ2JhKDAsMCwwLC40KX1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtc3R5bGVkPXRydWVdIFtkYXRhLWJ1dHRvbl06Zmlyc3Qtb2YtdHlwZXttYXJnaW4tbGVmdDp2YXIoLS10b2FzdC1idXR0b24tbWFyZ2luLXN0YXJ0KTttYXJnaW4tcmlnaHQ6dmFyKC0tdG9hc3QtYnV0dG9uLW1hcmdpbi1lbmQpfVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1zdHlsZWQ9dHJ1ZV0gW2RhdGEtY2FuY2VsXXtjb2xvcjp2YXIoLS1ub3JtYWwtdGV4dCk7YmFja2dyb3VuZDpyZ2JhKDAsMCwwLC4wOCl9W2RhdGEtc29ubmVyLXRvYXN0ZXJdW2RhdGEtc29ubmVyLXRoZW1lPWRhcmtdIFtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1zdHlsZWQ9dHJ1ZV0gW2RhdGEtY2FuY2VsXXtiYWNrZ3JvdW5kOnJnYmEoMjU1LDI1NSwyNTUsLjMpfVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1zdHlsZWQ9dHJ1ZV0gW2RhdGEtY2xvc2UtYnV0dG9uXXtwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OnZhcigtLXRvYXN0LWNsb3NlLWJ1dHRvbi1zdGFydCk7cmlnaHQ6dmFyKC0tdG9hc3QtY2xvc2UtYnV0dG9uLWVuZCk7dG9wOjA7aGVpZ2h0OjIwcHg7d2lkdGg6MjBweDtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXI7cGFkZGluZzowO2NvbG9yOnZhcigtLWdyYXkxMik7YmFja2dyb3VuZDp2YXIoLS1ub3JtYWwtYmcpO2JvcmRlcjoxcHggc29saWQgdmFyKC0tZ3JheTQpO3RyYW5zZm9ybTp2YXIoLS10b2FzdC1jbG9zZS1idXR0b24tdHJhbnNmb3JtKTtib3JkZXItcmFkaXVzOjUwJTtjdXJzb3I6cG9pbnRlcjt6LWluZGV4OjE7dHJhbnNpdGlvbjpvcGFjaXR5IC4xcyxiYWNrZ3JvdW5kIC4ycyxib3JkZXItY29sb3IgLjJzfVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1zdHlsZWQ9dHJ1ZV0gW2RhdGEtY2xvc2UtYnV0dG9uXTpmb2N1cy12aXNpYmxle2JveC1zaGFkb3c6MCA0cHggMTJweCByZ2JhKDAsMCwwLC4xKSwwIDAgMCAycHggcmdiYSgwLDAsMCwuMil9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXN0eWxlZD10cnVlXSBbZGF0YS1kaXNhYmxlZD10cnVlXXtjdXJzb3I6bm90LWFsbG93ZWR9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXN0eWxlZD10cnVlXTpob3ZlciBbZGF0YS1jbG9zZS1idXR0b25dOmhvdmVye2JhY2tncm91bmQ6dmFyKC0tZ3JheTIpO2JvcmRlci1jb2xvcjp2YXIoLS1ncmF5NSl9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXN3aXBpbmc9dHJ1ZV06OmJlZm9yZXtjb250ZW50OicnO3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6LTEwMCU7cmlnaHQ6LTEwMCU7aGVpZ2h0OjEwMCU7ei1pbmRleDotMX1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEteS1wb3NpdGlvbj10b3BdW2RhdGEtc3dpcGluZz10cnVlXTo6YmVmb3Jle2JvdHRvbTo1MCU7dHJhbnNmb3JtOnNjYWxlWSgzKSB0cmFuc2xhdGVZKDUwJSl9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXktcG9zaXRpb249Ym90dG9tXVtkYXRhLXN3aXBpbmc9dHJ1ZV06OmJlZm9yZXt0b3A6NTAlO3RyYW5zZm9ybTpzY2FsZVkoMykgdHJhbnNsYXRlWSgtNTAlKX1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtc3dpcGluZz1mYWxzZV1bZGF0YS1yZW1vdmVkPXRydWVdOjpiZWZvcmV7Y29udGVudDonJztwb3NpdGlvbjphYnNvbHV0ZTtpbnNldDowO3RyYW5zZm9ybTpzY2FsZVkoMil9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLWV4cGFuZGVkPXRydWVdOjphZnRlcntjb250ZW50OicnO3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6MDtoZWlnaHQ6Y2FsYyh2YXIoLS1nYXApICsgMXB4KTtib3R0b206MTAwJTt3aWR0aDoxMDAlfVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1tb3VudGVkPXRydWVdey0teTp0cmFuc2xhdGVZKDApO29wYWNpdHk6MX1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtZXhwYW5kZWQ9ZmFsc2VdW2RhdGEtZnJvbnQ9ZmFsc2Vdey0tc2NhbGU6dmFyKC0tdG9hc3RzLWJlZm9yZSkgKiAwLjA1ICsgMTstLXk6dHJhbnNsYXRlWShjYWxjKHZhcigtLWxpZnQtYW1vdW50KSAqIHZhcigtLXRvYXN0cy1iZWZvcmUpKSkgc2NhbGUoY2FsYygtMSAqIHZhcigtLXNjYWxlKSkpO2hlaWdodDp2YXIoLS1mcm9udC10b2FzdC1oZWlnaHQpfVtkYXRhLXNvbm5lci10b2FzdF0+Knt0cmFuc2l0aW9uOm9wYWNpdHkgLjRzfVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS14LXBvc2l0aW9uPXJpZ2h0XXtyaWdodDowfVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS14LXBvc2l0aW9uPWxlZnRde2xlZnQ6MH1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtZXhwYW5kZWQ9ZmFsc2VdW2RhdGEtZnJvbnQ9ZmFsc2VdW2RhdGEtc3R5bGVkPXRydWVdPip7b3BhY2l0eTowfVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS12aXNpYmxlPWZhbHNlXXtvcGFjaXR5OjA7cG9pbnRlci1ldmVudHM6bm9uZX1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtbW91bnRlZD10cnVlXVtkYXRhLWV4cGFuZGVkPXRydWVdey0teTp0cmFuc2xhdGVZKGNhbGModmFyKC0tbGlmdCkgKiB2YXIoLS1vZmZzZXQpKSk7aGVpZ2h0OnZhcigtLWluaXRpYWwtaGVpZ2h0KX1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtcmVtb3ZlZD10cnVlXVtkYXRhLWZyb250PXRydWVdW2RhdGEtc3dpcGUtb3V0PWZhbHNlXXstLXk6dHJhbnNsYXRlWShjYWxjKHZhcigtLWxpZnQpICogLTEwMCUpKTtvcGFjaXR5OjB9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXJlbW92ZWQ9dHJ1ZV1bZGF0YS1mcm9udD1mYWxzZV1bZGF0YS1zd2lwZS1vdXQ9ZmFsc2VdW2RhdGEtZXhwYW5kZWQ9dHJ1ZV17LS15OnRyYW5zbGF0ZVkoY2FsYyh2YXIoLS1saWZ0KSAqIHZhcigtLW9mZnNldCkgKyB2YXIoLS1saWZ0KSAqIC0xMDAlKSk7b3BhY2l0eTowfVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1yZW1vdmVkPXRydWVdW2RhdGEtZnJvbnQ9ZmFsc2VdW2RhdGEtc3dpcGUtb3V0PWZhbHNlXVtkYXRhLWV4cGFuZGVkPWZhbHNlXXstLXk6dHJhbnNsYXRlWSg0MCUpO29wYWNpdHk6MDt0cmFuc2l0aW9uOnRyYW5zZm9ybSAuNXMsb3BhY2l0eSAuMnN9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXJlbW92ZWQ9dHJ1ZV1bZGF0YS1mcm9udD1mYWxzZV06OmJlZm9yZXtoZWlnaHQ6Y2FsYyh2YXIoLS1pbml0aWFsLWhlaWdodCkgKyAyMCUpfVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1zd2lwaW5nPXRydWVde3RyYW5zZm9ybTp2YXIoLS15KSB0cmFuc2xhdGVZKHZhcigtLXN3aXBlLWFtb3VudC15LDApKSB0cmFuc2xhdGVYKHZhcigtLXN3aXBlLWFtb3VudC14LDApKTt0cmFuc2l0aW9uOm5vbmV9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXN3aXBlZD10cnVlXXt1c2VyLXNlbGVjdDpub25lfVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1zd2lwZS1vdXQ9dHJ1ZV1bZGF0YS15LXBvc2l0aW9uPWJvdHRvbV0sW2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXN3aXBlLW91dD10cnVlXVtkYXRhLXktcG9zaXRpb249dG9wXXthbmltYXRpb24tZHVyYXRpb246LjJzO2FuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246ZWFzZS1vdXQ7YW5pbWF0aW9uLWZpbGwtbW9kZTpmb3J3YXJkc31bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtc3dpcGUtb3V0PXRydWVdW2RhdGEtc3dpcGUtZGlyZWN0aW9uPWxlZnRde2FuaW1hdGlvbi1uYW1lOnN3aXBlLW91dC1sZWZ0fVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1zd2lwZS1vdXQ9dHJ1ZV1bZGF0YS1zd2lwZS1kaXJlY3Rpb249cmlnaHRde2FuaW1hdGlvbi1uYW1lOnN3aXBlLW91dC1yaWdodH1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtc3dpcGUtb3V0PXRydWVdW2RhdGEtc3dpcGUtZGlyZWN0aW9uPXVwXXthbmltYXRpb24tbmFtZTpzd2lwZS1vdXQtdXB9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXN3aXBlLW91dD10cnVlXVtkYXRhLXN3aXBlLWRpcmVjdGlvbj1kb3duXXthbmltYXRpb24tbmFtZTpzd2lwZS1vdXQtZG93bn1Aa2V5ZnJhbWVzIHN3aXBlLW91dC1sZWZ0e2Zyb217dHJhbnNmb3JtOnZhcigtLXkpIHRyYW5zbGF0ZVgodmFyKC0tc3dpcGUtYW1vdW50LXgpKTtvcGFjaXR5OjF9dG97dHJhbnNmb3JtOnZhcigtLXkpIHRyYW5zbGF0ZVgoY2FsYyh2YXIoLS1zd2lwZS1hbW91bnQteCkgLSAxMDAlKSk7b3BhY2l0eTowfX1Aa2V5ZnJhbWVzIHN3aXBlLW91dC1yaWdodHtmcm9te3RyYW5zZm9ybTp2YXIoLS15KSB0cmFuc2xhdGVYKHZhcigtLXN3aXBlLWFtb3VudC14KSk7b3BhY2l0eToxfXRve3RyYW5zZm9ybTp2YXIoLS15KSB0cmFuc2xhdGVYKGNhbGModmFyKC0tc3dpcGUtYW1vdW50LXgpICsgMTAwJSkpO29wYWNpdHk6MH19QGtleWZyYW1lcyBzd2lwZS1vdXQtdXB7ZnJvbXt0cmFuc2Zvcm06dmFyKC0teSkgdHJhbnNsYXRlWSh2YXIoLS1zd2lwZS1hbW91bnQteSkpO29wYWNpdHk6MX10b3t0cmFuc2Zvcm06dmFyKC0teSkgdHJhbnNsYXRlWShjYWxjKHZhcigtLXN3aXBlLWFtb3VudC15KSAtIDEwMCUpKTtvcGFjaXR5OjB9fUBrZXlmcmFtZXMgc3dpcGUtb3V0LWRvd257ZnJvbXt0cmFuc2Zvcm06dmFyKC0teSkgdHJhbnNsYXRlWSh2YXIoLS1zd2lwZS1hbW91bnQteSkpO29wYWNpdHk6MX10b3t0cmFuc2Zvcm06dmFyKC0teSkgdHJhbnNsYXRlWShjYWxjKHZhcigtLXN3aXBlLWFtb3VudC15KSArIDEwMCUpKTtvcGFjaXR5OjB9fUBtZWRpYSAobWF4LXdpZHRoOjYwMHB4KXtbZGF0YS1zb25uZXItdG9hc3Rlcl17cG9zaXRpb246Zml4ZWQ7cmlnaHQ6dmFyKC0tbW9iaWxlLW9mZnNldC1yaWdodCk7bGVmdDp2YXIoLS1tb2JpbGUtb2Zmc2V0LWxlZnQpO3dpZHRoOjEwMCV9W2RhdGEtc29ubmVyLXRvYXN0ZXJdW2Rpcj1ydGxde2xlZnQ6Y2FsYyh2YXIoLS1tb2JpbGUtb2Zmc2V0LWxlZnQpICogLTEpfVtkYXRhLXNvbm5lci10b2FzdGVyXSBbZGF0YS1zb25uZXItdG9hc3Rde2xlZnQ6MDtyaWdodDowO3dpZHRoOmNhbGMoMTAwJSAtIHZhcigtLW1vYmlsZS1vZmZzZXQtbGVmdCkgKiAyKX1bZGF0YS1zb25uZXItdG9hc3Rlcl1bZGF0YS14LXBvc2l0aW9uPWxlZnRde2xlZnQ6dmFyKC0tbW9iaWxlLW9mZnNldC1sZWZ0KX1bZGF0YS1zb25uZXItdG9hc3Rlcl1bZGF0YS15LXBvc2l0aW9uPWJvdHRvbV17Ym90dG9tOnZhcigtLW1vYmlsZS1vZmZzZXQtYm90dG9tKX1bZGF0YS1zb25uZXItdG9hc3Rlcl1bZGF0YS15LXBvc2l0aW9uPXRvcF17dG9wOnZhcigtLW1vYmlsZS1vZmZzZXQtdG9wKX1bZGF0YS1zb25uZXItdG9hc3Rlcl1bZGF0YS14LXBvc2l0aW9uPWNlbnRlcl17bGVmdDp2YXIoLS1tb2JpbGUtb2Zmc2V0LWxlZnQpO3JpZ2h0OnZhcigtLW1vYmlsZS1vZmZzZXQtcmlnaHQpO3RyYW5zZm9ybTpub25lfX1bZGF0YS1zb25uZXItdG9hc3Rlcl1bZGF0YS1zb25uZXItdGhlbWU9bGlnaHRdey0tbm9ybWFsLWJnOiNmZmY7LS1ub3JtYWwtYm9yZGVyOnZhcigtLWdyYXk0KTstLW5vcm1hbC10ZXh0OnZhcigtLWdyYXkxMik7LS1zdWNjZXNzLWJnOmhzbCgxNDMsIDg1JSwgOTYlKTstLXN1Y2Nlc3MtYm9yZGVyOmhzbCgxNDUsIDkyJSwgODclKTstLXN1Y2Nlc3MtdGV4dDpoc2woMTQwLCAxMDAlLCAyNyUpOy0taW5mby1iZzpoc2woMjA4LCAxMDAlLCA5NyUpOy0taW5mby1ib3JkZXI6aHNsKDIyMSwgOTElLCA5MyUpOy0taW5mby10ZXh0OmhzbCgyMTAsIDkyJSwgNDUlKTstLXdhcm5pbmctYmc6aHNsKDQ5LCAxMDAlLCA5NyUpOy0td2FybmluZy1ib3JkZXI6aHNsKDQ5LCA5MSUsIDg0JSk7LS13YXJuaW5nLXRleHQ6aHNsKDMxLCA5MiUsIDQ1JSk7LS1lcnJvci1iZzpoc2woMzU5LCAxMDAlLCA5NyUpOy0tZXJyb3ItYm9yZGVyOmhzbCgzNTksIDEwMCUsIDk0JSk7LS1lcnJvci10ZXh0OmhzbCgzNjAsIDEwMCUsIDQ1JSl9W2RhdGEtc29ubmVyLXRvYXN0ZXJdW2RhdGEtc29ubmVyLXRoZW1lPWxpZ2h0XSBbZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtaW52ZXJ0PXRydWVdey0tbm9ybWFsLWJnOiMwMDA7LS1ub3JtYWwtYm9yZGVyOmhzbCgwLCAwJSwgMjAlKTstLW5vcm1hbC10ZXh0OnZhcigtLWdyYXkxKX1bZGF0YS1zb25uZXItdG9hc3Rlcl1bZGF0YS1zb25uZXItdGhlbWU9ZGFya10gW2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLWludmVydD10cnVlXXstLW5vcm1hbC1iZzojZmZmOy0tbm9ybWFsLWJvcmRlcjp2YXIoLS1ncmF5Myk7LS1ub3JtYWwtdGV4dDp2YXIoLS1ncmF5MTIpfVtkYXRhLXNvbm5lci10b2FzdGVyXVtkYXRhLXNvbm5lci10aGVtZT1kYXJrXXstLW5vcm1hbC1iZzojMDAwOy0tbm9ybWFsLWJnLWhvdmVyOmhzbCgwLCAwJSwgMTIlKTstLW5vcm1hbC1ib3JkZXI6aHNsKDAsIDAlLCAyMCUpOy0tbm9ybWFsLWJvcmRlci1ob3Zlcjpoc2woMCwgMCUsIDI1JSk7LS1ub3JtYWwtdGV4dDp2YXIoLS1ncmF5MSk7LS1zdWNjZXNzLWJnOmhzbCgxNTAsIDEwMCUsIDYlKTstLXN1Y2Nlc3MtYm9yZGVyOmhzbCgxNDcsIDEwMCUsIDEyJSk7LS1zdWNjZXNzLXRleHQ6aHNsKDE1MCwgODYlLCA2NSUpOy0taW5mby1iZzpoc2woMjE1LCAxMDAlLCA2JSk7LS1pbmZvLWJvcmRlcjpoc2woMjIzLCA0MyUsIDE3JSk7LS1pbmZvLXRleHQ6aHNsKDIxNiwgODclLCA2NSUpOy0td2FybmluZy1iZzpoc2woNjQsIDEwMCUsIDYlKTstLXdhcm5pbmctYm9yZGVyOmhzbCg2MCwgMTAwJSwgOSUpOy0td2FybmluZy10ZXh0OmhzbCg0NiwgODclLCA2NSUpOy0tZXJyb3ItYmc6aHNsKDM1OCwgNzYlLCAxMCUpOy0tZXJyb3ItYm9yZGVyOmhzbCgzNTcsIDg5JSwgMTYlKTstLWVycm9yLXRleHQ6aHNsKDM1OCwgMTAwJSwgODElKX1bZGF0YS1zb25uZXItdG9hc3Rlcl1bZGF0YS1zb25uZXItdGhlbWU9ZGFya10gW2RhdGEtc29ubmVyLXRvYXN0XSBbZGF0YS1jbG9zZS1idXR0b25de2JhY2tncm91bmQ6dmFyKC0tbm9ybWFsLWJnKTtib3JkZXItY29sb3I6dmFyKC0tbm9ybWFsLWJvcmRlcik7Y29sb3I6dmFyKC0tbm9ybWFsLXRleHQpfVtkYXRhLXNvbm5lci10b2FzdGVyXVtkYXRhLXNvbm5lci10aGVtZT1kYXJrXSBbZGF0YS1zb25uZXItdG9hc3RdIFtkYXRhLWNsb3NlLWJ1dHRvbl06aG92ZXJ7YmFja2dyb3VuZDp2YXIoLS1ub3JtYWwtYmctaG92ZXIpO2JvcmRlci1jb2xvcjp2YXIoLS1ub3JtYWwtYm9yZGVyLWhvdmVyKX1bZGF0YS1yaWNoLWNvbG9ycz10cnVlXVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS10eXBlPXN1Y2Nlc3Nde2JhY2tncm91bmQ6dmFyKC0tc3VjY2Vzcy1iZyk7Ym9yZGVyLWNvbG9yOnZhcigtLXN1Y2Nlc3MtYm9yZGVyKTtjb2xvcjp2YXIoLS1zdWNjZXNzLXRleHQpfVtkYXRhLXJpY2gtY29sb3JzPXRydWVdW2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXR5cGU9c3VjY2Vzc10gW2RhdGEtY2xvc2UtYnV0dG9uXXtiYWNrZ3JvdW5kOnZhcigtLXN1Y2Nlc3MtYmcpO2JvcmRlci1jb2xvcjp2YXIoLS1zdWNjZXNzLWJvcmRlcik7Y29sb3I6dmFyKC0tc3VjY2Vzcy10ZXh0KX1bZGF0YS1yaWNoLWNvbG9ycz10cnVlXVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS10eXBlPWluZm9de2JhY2tncm91bmQ6dmFyKC0taW5mby1iZyk7Ym9yZGVyLWNvbG9yOnZhcigtLWluZm8tYm9yZGVyKTtjb2xvcjp2YXIoLS1pbmZvLXRleHQpfVtkYXRhLXJpY2gtY29sb3JzPXRydWVdW2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXR5cGU9aW5mb10gW2RhdGEtY2xvc2UtYnV0dG9uXXtiYWNrZ3JvdW5kOnZhcigtLWluZm8tYmcpO2JvcmRlci1jb2xvcjp2YXIoLS1pbmZvLWJvcmRlcik7Y29sb3I6dmFyKC0taW5mby10ZXh0KX1bZGF0YS1yaWNoLWNvbG9ycz10cnVlXVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS10eXBlPXdhcm5pbmdde2JhY2tncm91bmQ6dmFyKC0td2FybmluZy1iZyk7Ym9yZGVyLWNvbG9yOnZhcigtLXdhcm5pbmctYm9yZGVyKTtjb2xvcjp2YXIoLS13YXJuaW5nLXRleHQpfVtkYXRhLXJpY2gtY29sb3JzPXRydWVdW2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXR5cGU9d2FybmluZ10gW2RhdGEtY2xvc2UtYnV0dG9uXXtiYWNrZ3JvdW5kOnZhcigtLXdhcm5pbmctYmcpO2JvcmRlci1jb2xvcjp2YXIoLS13YXJuaW5nLWJvcmRlcik7Y29sb3I6dmFyKC0td2FybmluZy10ZXh0KX1bZGF0YS1yaWNoLWNvbG9ycz10cnVlXVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS10eXBlPWVycm9yXXtiYWNrZ3JvdW5kOnZhcigtLWVycm9yLWJnKTtib3JkZXItY29sb3I6dmFyKC0tZXJyb3ItYm9yZGVyKTtjb2xvcjp2YXIoLS1lcnJvci10ZXh0KX1bZGF0YS1yaWNoLWNvbG9ycz10cnVlXVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS10eXBlPWVycm9yXSBbZGF0YS1jbG9zZS1idXR0b25de2JhY2tncm91bmQ6dmFyKC0tZXJyb3ItYmcpO2JvcmRlci1jb2xvcjp2YXIoLS1lcnJvci1ib3JkZXIpO2NvbG9yOnZhcigtLWVycm9yLXRleHQpfS5zb25uZXItbG9hZGluZy13cmFwcGVyey0tc2l6ZToxNnB4O2hlaWdodDp2YXIoLS1zaXplKTt3aWR0aDp2YXIoLS1zaXplKTtwb3NpdGlvbjphYnNvbHV0ZTtpbnNldDowO3otaW5kZXg6MTB9LnNvbm5lci1sb2FkaW5nLXdyYXBwZXJbZGF0YS12aXNpYmxlPWZhbHNlXXt0cmFuc2Zvcm0tb3JpZ2luOmNlbnRlcjthbmltYXRpb246c29ubmVyLWZhZGUtb3V0IC4ycyBlYXNlIGZvcndhcmRzfS5zb25uZXItc3Bpbm5lcntwb3NpdGlvbjpyZWxhdGl2ZTt0b3A6NTAlO2xlZnQ6NTAlO2hlaWdodDp2YXIoLS1zaXplKTt3aWR0aDp2YXIoLS1zaXplKX0uc29ubmVyLWxvYWRpbmctYmFye2FuaW1hdGlvbjpzb25uZXItc3BpbiAxLjJzIGxpbmVhciBpbmZpbml0ZTtiYWNrZ3JvdW5kOnZhcigtLWdyYXkxMSk7Ym9yZGVyLXJhZGl1czo2cHg7aGVpZ2h0OjglO2xlZnQ6LTEwJTtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6LTMuOSU7d2lkdGg6MjQlfS5zb25uZXItbG9hZGluZy1iYXI6Zmlyc3QtY2hpbGR7YW5pbWF0aW9uLWRlbGF5Oi0xLjJzO3RyYW5zZm9ybTpyb3RhdGUoLjAwMDFkZWcpIHRyYW5zbGF0ZSgxNDYlKX0uc29ubmVyLWxvYWRpbmctYmFyOm50aC1jaGlsZCgyKXthbmltYXRpb24tZGVsYXk6LTEuMXM7dHJhbnNmb3JtOnJvdGF0ZSgzMGRlZykgdHJhbnNsYXRlKDE0NiUpfS5zb25uZXItbG9hZGluZy1iYXI6bnRoLWNoaWxkKDMpe2FuaW1hdGlvbi1kZWxheTotMXM7dHJhbnNmb3JtOnJvdGF0ZSg2MGRlZykgdHJhbnNsYXRlKDE0NiUpfS5zb25uZXItbG9hZGluZy1iYXI6bnRoLWNoaWxkKDQpe2FuaW1hdGlvbi1kZWxheTotLjlzO3RyYW5zZm9ybTpyb3RhdGUoOTBkZWcpIHRyYW5zbGF0ZSgxNDYlKX0uc29ubmVyLWxvYWRpbmctYmFyOm50aC1jaGlsZCg1KXthbmltYXRpb24tZGVsYXk6LS44czt0cmFuc2Zvcm06cm90YXRlKDEyMGRlZykgdHJhbnNsYXRlKDE0NiUpfS5zb25uZXItbG9hZGluZy1iYXI6bnRoLWNoaWxkKDYpe2FuaW1hdGlvbi1kZWxheTotLjdzO3RyYW5zZm9ybTpyb3RhdGUoMTUwZGVnKSB0cmFuc2xhdGUoMTQ2JSl9LnNvbm5lci1sb2FkaW5nLWJhcjpudGgtY2hpbGQoNyl7YW5pbWF0aW9uLWRlbGF5Oi0uNnM7dHJhbnNmb3JtOnJvdGF0ZSgxODBkZWcpIHRyYW5zbGF0ZSgxNDYlKX0uc29ubmVyLWxvYWRpbmctYmFyOm50aC1jaGlsZCg4KXthbmltYXRpb24tZGVsYXk6LS41czt0cmFuc2Zvcm06cm90YXRlKDIxMGRlZykgdHJhbnNsYXRlKDE0NiUpfS5zb25uZXItbG9hZGluZy1iYXI6bnRoLWNoaWxkKDkpe2FuaW1hdGlvbi1kZWxheTotLjRzO3RyYW5zZm9ybTpyb3RhdGUoMjQwZGVnKSB0cmFuc2xhdGUoMTQ2JSl9LnNvbm5lci1sb2FkaW5nLWJhcjpudGgtY2hpbGQoMTApe2FuaW1hdGlvbi1kZWxheTotLjNzO3RyYW5zZm9ybTpyb3RhdGUoMjcwZGVnKSB0cmFuc2xhdGUoMTQ2JSl9LnNvbm5lci1sb2FkaW5nLWJhcjpudGgtY2hpbGQoMTEpe2FuaW1hdGlvbi1kZWxheTotLjJzO3RyYW5zZm9ybTpyb3RhdGUoMzAwZGVnKSB0cmFuc2xhdGUoMTQ2JSl9LnNvbm5lci1sb2FkaW5nLWJhcjpudGgtY2hpbGQoMTIpe2FuaW1hdGlvbi1kZWxheTotLjFzO3RyYW5zZm9ybTpyb3RhdGUoMzMwZGVnKSB0cmFuc2xhdGUoMTQ2JSl9QGtleWZyYW1lcyBzb25uZXItZmFkZS1pbnswJXtvcGFjaXR5OjA7dHJhbnNmb3JtOnNjYWxlKC44KX0xMDAle29wYWNpdHk6MTt0cmFuc2Zvcm06c2NhbGUoMSl9fUBrZXlmcmFtZXMgc29ubmVyLWZhZGUtb3V0ezAle29wYWNpdHk6MTt0cmFuc2Zvcm06c2NhbGUoMSl9MTAwJXtvcGFjaXR5OjA7dHJhbnNmb3JtOnNjYWxlKC44KX19QGtleWZyYW1lcyBzb25uZXItc3BpbnswJXtvcGFjaXR5OjF9MTAwJXtvcGFjaXR5Oi4xNX19QG1lZGlhIChwcmVmZXJzLXJlZHVjZWQtbW90aW9uKXsuc29ubmVyLWxvYWRpbmctYmFyLFtkYXRhLXNvbm5lci10b2FzdF0sW2RhdGEtc29ubmVyLXRvYXN0XT4qe3RyYW5zaXRpb246bm9uZSFpbXBvcnRhbnQ7YW5pbWF0aW9uOm5vbmUhaW1wb3J0YW50fX0uc29ubmVyLWxvYWRlcntwb3NpdGlvbjphYnNvbHV0ZTt0b3A6NTAlO2xlZnQ6NTAlO3RyYW5zZm9ybTp0cmFuc2xhdGUoLTUwJSwtNTAlKTt0cmFuc2Zvcm0tb3JpZ2luOmNlbnRlcjt0cmFuc2l0aW9uOm9wYWNpdHkgLjJzLHRyYW5zZm9ybSAuMnN9LnNvbm5lci1sb2FkZXJbZGF0YS12aXNpYmxlPWZhbHNlXXtvcGFjaXR5OjA7dHJhbnNmb3JtOnNjYWxlKC44KSB0cmFuc2xhdGUoLTUwJSwtNTAlKX0iKTtmdW5jdGlvbiBtNSgkKXtyZXR1cm4gJC5sYWJlbCE9PXZvaWQgMH12YXIgSEo9MyxBSj0iMjRweCIsa0o9IjE2cHgiLF82PTQwMDAsT0o9MzU2LEZKPTE0LE1KPTQ1LFdKPTIwMDtmdW5jdGlvbiB5MCguLi4kKXtyZXR1cm4gJC5maWx0ZXIoQm9vbGVhbikuam9pbigiICIpfWZ1bmN0aW9uIFBKKCQpe2xldFtKLFFdPSQuc3BsaXQoIi0iKSxaPVtdO2lmKEopWi5wdXNoKEopO2lmKFEpWi5wdXNoKFEpO3JldHVybiBafXZhciBfSj0oJCk9Pnt2YXIgSixRLFosWCxZLHEsRyxWLEI7bGV0e2ludmVydDpOLHRvYXN0OnosdW5zdHlsZWQ6TCxpbnRlcmFjdGluZzpDLHNldEhlaWdodHM6QSx2aXNpYmxlVG9hc3RzOlUsaGVpZ2h0czpILGluZGV4OmssdG9hc3RzOkYsZXhwYW5kZWQ6dyxyZW1vdmVUb2FzdDpULGRlZmF1bHRSaWNoQ29sb3JzOlMsY2xvc2VCdXR0b246eCxzdHlsZTokMSxjYW5jZWxCdXR0b25TdHlsZTpmLGFjdGlvbkJ1dHRvblN0eWxlOmksY2xhc3NOYW1lOnI9IiIsZGVzY3JpcHRpb25DbGFzc05hbWU6bD0iIixkdXJhdGlvbjpvLHBvc2l0aW9uOlExLGdhcDpOMSxleHBhbmRCeURlZmF1bHQ6YyxjbGFzc05hbWVzOnYsaWNvbnM6bixjbG9zZUJ1dHRvbkFyaWFMYWJlbDpYMT0iQ2xvc2UgdG9hc3QifT0kLFtMMSxKMV09bS51c2VTdGF0ZShudWxsKSxbWTEsSDFdPW0udXNlU3RhdGUobnVsbCksW3ksZ109bS51c2VTdGF0ZSghMSksW1AscF09bS51c2VTdGF0ZSghMSksW3Usal09bS51c2VTdGF0ZSghMSksW0cxLHoxXT1tLnVzZVN0YXRlKCExKSxbTTEsVzFdPW0udXNlU3RhdGUoITEpLFtpMSxGMV09bS51c2VTdGF0ZSgwKSxbdjEsUDFdPW0udXNlU3RhdGUoMCksdTE9bS51c2VSZWYoei5kdXJhdGlvbnx8b3x8XzYpLEMxPW0udXNlUmVmKG51bGwpLHcxPW0udXNlUmVmKG51bGwpLGwxPWs9PT0wLHQxPWsrMTw9VSxSMT16LnR5cGUsYTE9ei5kaXNtaXNzaWJsZSE9PSExLGUxPXouY2xhc3NOYW1lfHwiIixWMD16LmRlc2NyaXB0aW9uQ2xhc3NOYW1lfHwiIixzMT1tLnVzZU1lbW8oKCk9PkguZmluZEluZGV4KChLMSk9PksxLnRvYXN0SWQ9PT16LmlkKXx8MCxbSCx6LmlkXSksdjA9bS51c2VNZW1vKCgpPT57dmFyIEsxO3JldHVybihLMT16LmNsb3NlQnV0dG9uKSE9bnVsbD9LMTp4fSxbei5jbG9zZUJ1dHRvbix4XSksbTE9bS51c2VNZW1vKCgpPT56LmR1cmF0aW9ufHxvfHxfNixbei5kdXJhdGlvbixvXSkscTA9bS51c2VSZWYoMCksJDA9bS51c2VSZWYoMCksUDA9bS51c2VSZWYoMCksZDE9bS51c2VSZWYobnVsbCksW24xLF8wXT1RMS5zcGxpdCgiLSIpLGoxPW0udXNlTWVtbygoKT0+e3JldHVybiBILnJlZHVjZSgoSzEsXyxkKT0+e2lmKGQ+PXMxKXJldHVybiBLMTtyZXR1cm4gSzErXy5oZWlnaHR9LDApfSxbSCxzMV0pLEgwPUJKKCksQjA9ei5pbnZlcnR8fE4sRDE9UjE9PT0ibG9hZGluZyI7JDAuY3VycmVudD1tLnVzZU1lbW8oKCk9PnMxKk4xK2oxLFtzMSxqMV0pLG0udXNlRWZmZWN0KCgpPT57dTEuY3VycmVudD1tMX0sW20xXSksbS51c2VFZmZlY3QoKCk9PntnKCEwKX0sW10pLG0udXNlRWZmZWN0KCgpPT57bGV0IEsxPXcxLmN1cnJlbnQ7aWYoSzEpe2xldCBfPUsxLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmhlaWdodDtyZXR1cm4gUDEoXyksQSgoZCk9Plt7dG9hc3RJZDp6LmlkLGhlaWdodDpfLHBvc2l0aW9uOnoucG9zaXRpb259LC4uLmRdKSwoKT0+QSgoZCk9PmQuZmlsdGVyKChhKT0+YS50b2FzdElkIT09ei5pZCkpfX0sW0Esei5pZF0pLG0udXNlTGF5b3V0RWZmZWN0KCgpPT57aWYoIXkpcmV0dXJuO2xldCBLMT13MS5jdXJyZW50LF89SzEuc3R5bGUuaGVpZ2h0O0sxLnN0eWxlLmhlaWdodD0iYXV0byI7bGV0IGQ9SzEuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0O0sxLnN0eWxlLmhlaWdodD1fLFAxKGQpLEEoKGEpPT57aWYoIWEuZmluZCgoVjEpPT5WMS50b2FzdElkPT09ei5pZCkpcmV0dXJuW3t0b2FzdElkOnouaWQsaGVpZ2h0OmQscG9zaXRpb246ei5wb3NpdGlvbn0sLi4uYV07ZWxzZSByZXR1cm4gYS5tYXAoKFYxKT0+VjEudG9hc3RJZD09PXouaWQ/ey4uLlYxLGhlaWdodDpkfTpWMSl9KX0sW3ksei50aXRsZSx6LmRlc2NyaXB0aW9uLEEsei5pZCx6LmpzeCx6LmFjdGlvbix6LmNhbmNlbF0pO2xldCB5MT1tLnVzZUNhbGxiYWNrKCgpPT57cCghMCksRjEoJDAuY3VycmVudCksQSgoSzEpPT5LMS5maWx0ZXIoKF8pPT5fLnRvYXN0SWQhPT16LmlkKSksc2V0VGltZW91dCgoKT0+e1Qoeil9LFdKKX0sW3osVCxBLCQwXSk7bS51c2VFZmZlY3QoKCk9PntpZih6LnByb21pc2UmJlIxPT09ImxvYWRpbmcifHx6LmR1cmF0aW9uPT09MS8wfHx6LnR5cGU9PT0ibG9hZGluZyIpcmV0dXJuO2xldCBLMSxfPSgpPT57aWYoUDAuY3VycmVudDxxMC5jdXJyZW50KXtsZXQgYT1uZXcgRGF0ZSgpLmdldFRpbWUoKS1xMC5jdXJyZW50O3UxLmN1cnJlbnQ9dTEuY3VycmVudC1hfVAwLmN1cnJlbnQ9bmV3IERhdGUoKS5nZXRUaW1lKCl9LGQ9KCk9PntpZih1MS5jdXJyZW50PT09MS8wKXJldHVybjtxMC5jdXJyZW50PW5ldyBEYXRlKCkuZ2V0VGltZSgpLEsxPXNldFRpbWVvdXQoKCk9Pnt6Lm9uQXV0b0Nsb3NlPT1udWxsfHx6Lm9uQXV0b0Nsb3NlLmNhbGwoeix6KSx5MSgpfSx1MS5jdXJyZW50KX07aWYod3x8Q3x8SDApXygpO2Vsc2UgZCgpO3JldHVybigpPT5jbGVhclRpbWVvdXQoSzEpfSxbdyxDLHosUjEsSDAseTFdKSxtLnVzZUVmZmVjdCgoKT0+e2lmKHouZGVsZXRlKXkxKCksei5vbkRpc21pc3M9PW51bGx8fHoub25EaXNtaXNzLmNhbGwoeix6KX0sW3kxLHouZGVsZXRlXSk7ZnVuY3Rpb24gSjAoKXt2YXIgSzE7aWYobj09bnVsbD92b2lkIDA6bi5sb2FkaW5nKXt2YXIgXztyZXR1cm4gbS5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6eTAodj09bnVsbD92b2lkIDA6di5sb2FkZXIsej09bnVsbD92b2lkIDA6KF89ei5jbGFzc05hbWVzKT09bnVsbD92b2lkIDA6Xy5sb2FkZXIsInNvbm5lci1sb2FkZXIiKSwiZGF0YS12aXNpYmxlIjpSMT09PSJsb2FkaW5nIn0sbi5sb2FkaW5nKX1yZXR1cm4gbS5jcmVhdGVFbGVtZW50KEtKLHtjbGFzc05hbWU6eTAodj09bnVsbD92b2lkIDA6di5sb2FkZXIsej09bnVsbD92b2lkIDA6KEsxPXouY2xhc3NOYW1lcyk9PW51bGw/dm9pZCAwOksxLmxvYWRlciksdmlzaWJsZTpSMT09PSJsb2FkaW5nIn0pfWxldCBBMD16Lmljb258fChuPT1udWxsP3ZvaWQgMDpuW1IxXSl8fFFKKFIxKTt2YXIgTjAsazA7cmV0dXJuIG0uY3JlYXRlRWxlbWVudCgibGkiLHt0YWJJbmRleDowLHJlZjp3MSxjbGFzc05hbWU6eTAocixlMSx2PT1udWxsP3ZvaWQgMDp2LnRvYXN0LHo9PW51bGw/dm9pZCAwOihKPXouY2xhc3NOYW1lcyk9PW51bGw/dm9pZCAwOkoudG9hc3Qsdj09bnVsbD92b2lkIDA6di5kZWZhdWx0LHY9PW51bGw/dm9pZCAwOnZbUjFdLHo9PW51bGw/dm9pZCAwOihRPXouY2xhc3NOYW1lcyk9PW51bGw/dm9pZCAwOlFbUjFdKSwiZGF0YS1zb25uZXItdG9hc3QiOiIiLCJkYXRhLXJpY2gtY29sb3JzIjooTjA9ei5yaWNoQ29sb3JzKSE9bnVsbD9OMDpTLCJkYXRhLXN0eWxlZCI6IUJvb2xlYW4oei5qc3h8fHoudW5zdHlsZWR8fEwpLCJkYXRhLW1vdW50ZWQiOnksImRhdGEtcHJvbWlzZSI6Qm9vbGVhbih6LnByb21pc2UpLCJkYXRhLXN3aXBlZCI6TTEsImRhdGEtcmVtb3ZlZCI6UCwiZGF0YS12aXNpYmxlIjp0MSwiZGF0YS15LXBvc2l0aW9uIjpuMSwiZGF0YS14LXBvc2l0aW9uIjpfMCwiZGF0YS1pbmRleCI6aywiZGF0YS1mcm9udCI6bDEsImRhdGEtc3dpcGluZyI6dSwiZGF0YS1kaXNtaXNzaWJsZSI6YTEsImRhdGEtdHlwZSI6UjEsImRhdGEtaW52ZXJ0IjpCMCwiZGF0YS1zd2lwZS1vdXQiOkcxLCJkYXRhLXN3aXBlLWRpcmVjdGlvbiI6WTEsImRhdGEtZXhwYW5kZWQiOkJvb2xlYW4od3x8YyYmeSksImRhdGEtdGVzdGlkIjp6LnRlc3RJZCxzdHlsZTp7Ii0taW5kZXgiOmssIi0tdG9hc3RzLWJlZm9yZSI6aywiLS16LWluZGV4IjpGLmxlbmd0aC1rLCItLW9mZnNldCI6YCR7UD9pMTokMC5jdXJyZW50fXB4YCwiLS1pbml0aWFsLWhlaWdodCI6Yz8iYXV0byI6YCR7djF9cHhgLC4uLiQxLC4uLnouc3R5bGV9LG9uRHJhZ0VuZDooKT0+e2ooITEpLEoxKG51bGwpLGQxLmN1cnJlbnQ9bnVsbH0sb25Qb2ludGVyRG93bjooSzEpPT57aWYoSzEuYnV0dG9uPT09MilyZXR1cm47aWYoRDF8fCFhMSlyZXR1cm47aWYoQzEuY3VycmVudD1uZXcgRGF0ZSxGMSgkMC5jdXJyZW50KSxLMS50YXJnZXQuc2V0UG9pbnRlckNhcHR1cmUoSzEucG9pbnRlcklkKSxLMS50YXJnZXQudGFnTmFtZT09PSJCVVRUT04iKXJldHVybjtqKCEwKSxkMS5jdXJyZW50PXt4OksxLmNsaWVudFgseTpLMS5jbGllbnRZfX0sb25Qb2ludGVyVXA6KCk9Pnt2YXIgSzEsXyxkO2lmKEcxfHwhYTEpcmV0dXJuO2QxLmN1cnJlbnQ9bnVsbDtsZXQgYT1OdW1iZXIoKChLMT13MS5jdXJyZW50KT09bnVsbD92b2lkIDA6SzEuc3R5bGUuZ2V0UHJvcGVydHlWYWx1ZSgiLS1zd2lwZS1hbW91bnQteCIpLnJlcGxhY2UoInB4IiwiIikpfHwwKSxrMT1OdW1iZXIoKChfPXcxLmN1cnJlbnQpPT1udWxsP3ZvaWQgMDpfLnN0eWxlLmdldFByb3BlcnR5VmFsdWUoIi0tc3dpcGUtYW1vdW50LXkiKS5yZXBsYWNlKCJweCIsIiIpKXx8MCksVjE9bmV3IERhdGUoKS5nZXRUaW1lKCktKChkPUMxLmN1cnJlbnQpPT1udWxsP3ZvaWQgMDpkLmdldFRpbWUoKSksQjE9TDE9PT0ieCI/YTprMSxnMT1NYXRoLmFicyhCMSkvVjE7aWYoTWF0aC5hYnMoQjEpPj1NSnx8ZzE+MC4xMSl7aWYoRjEoJDAuY3VycmVudCksei5vbkRpc21pc3M9PW51bGx8fHoub25EaXNtaXNzLmNhbGwoeix6KSxMMT09PSJ4IilIMShhPjA/InJpZ2h0IjoibGVmdCIpO2Vsc2UgSDEoazE+MD8iZG93biI6InVwIik7eTEoKSx6MSghMCk7cmV0dXJufWVsc2V7dmFyIGYxLHgxOyhmMT13MS5jdXJyZW50KT09bnVsbHx8ZjEuc3R5bGUuc2V0UHJvcGVydHkoIi0tc3dpcGUtYW1vdW50LXgiLCIwcHgiKSwoeDE9dzEuY3VycmVudCk9PW51bGx8fHgxLnN0eWxlLnNldFByb3BlcnR5KCItLXN3aXBlLWFtb3VudC15IiwiMHB4Iil9VzEoITEpLGooITEpLEoxKG51bGwpfSxvblBvaW50ZXJNb3ZlOihLMSk9Pnt2YXIgXyxkLGE7aWYoIWQxLmN1cnJlbnR8fCFhMSlyZXR1cm47aWYoKChfPXdpbmRvdy5nZXRTZWxlY3Rpb24oKSk9PW51bGw/dm9pZCAwOl8udG9TdHJpbmcoKS5sZW5ndGgpPjApcmV0dXJuO2xldCBWMT1LMS5jbGllbnRZLWQxLmN1cnJlbnQueSxCMT1LMS5jbGllbnRYLWQxLmN1cnJlbnQueDt2YXIgZzE7bGV0IGYxPShnMT0kLnN3aXBlRGlyZWN0aW9ucykhPW51bGw/ZzE6UEooUTEpO2lmKCFMMSYmKE1hdGguYWJzKEIxKT4xfHxNYXRoLmFicyhWMSk+MSkpSjEoTWF0aC5hYnMoQjEpPk1hdGguYWJzKFYxKT8ieCI6InkiKTtsZXQgeDE9e3g6MCx5OjB9LE8wPShRMCk9PntyZXR1cm4gMS8oMS41K01hdGguYWJzKFEwKS8yMCl9O2lmKEwxPT09InkiKXtpZihmMS5pbmNsdWRlcygidG9wIil8fGYxLmluY2x1ZGVzKCJib3R0b20iKSlpZihmMS5pbmNsdWRlcygidG9wIikmJlYxPDB8fGYxLmluY2x1ZGVzKCJib3R0b20iKSYmVjE+MCl4MS55PVYxO2Vsc2V7bGV0IFEwPVYxKk8wKFYxKTt4MS55PU1hdGguYWJzKFEwKTxNYXRoLmFicyhWMSk/UTA6VjF9fWVsc2UgaWYoTDE9PT0ieCIpe2lmKGYxLmluY2x1ZGVzKCJsZWZ0Iil8fGYxLmluY2x1ZGVzKCJyaWdodCIpKWlmKGYxLmluY2x1ZGVzKCJsZWZ0IikmJkIxPDB8fGYxLmluY2x1ZGVzKCJyaWdodCIpJiZCMT4wKXgxLng9QjE7ZWxzZXtsZXQgUTA9QjEqTzAoQjEpO3gxLng9TWF0aC5hYnMoUTApPE1hdGguYWJzKEIxKT9RMDpCMX19aWYoTWF0aC5hYnMoeDEueCk+MHx8TWF0aC5hYnMoeDEueSk+MClXMSghMCk7KGQ9dzEuY3VycmVudCk9PW51bGx8fGQuc3R5bGUuc2V0UHJvcGVydHkoIi0tc3dpcGUtYW1vdW50LXgiLGAke3gxLnh9cHhgKSwoYT13MS5jdXJyZW50KT09bnVsbHx8YS5zdHlsZS5zZXRQcm9wZXJ0eSgiLS1zd2lwZS1hbW91bnQteSIsYCR7eDEueX1weGApfX0sdjAmJiF6LmpzeCYmUjEhPT0ibG9hZGluZyI/bS5jcmVhdGVFbGVtZW50KCJidXR0b24iLHsiYXJpYS1sYWJlbCI6WDEsImRhdGEtZGlzYWJsZWQiOkQxLCJkYXRhLWNsb3NlLWJ1dHRvbiI6ITAsb25DbGljazpEMXx8IWExPygpPT57fTooKT0+e3kxKCksei5vbkRpc21pc3M9PW51bGx8fHoub25EaXNtaXNzLmNhbGwoeix6KX0sY2xhc3NOYW1lOnkwKHY9PW51bGw/dm9pZCAwOnYuY2xvc2VCdXR0b24sej09bnVsbD92b2lkIDA6KFo9ei5jbGFzc05hbWVzKT09bnVsbD92b2lkIDA6Wi5jbG9zZUJ1dHRvbil9LChrMD1uPT1udWxsP3ZvaWQgMDpuLmNsb3NlKSE9bnVsbD9rMDpWSik6bnVsbCwoUjF8fHouaWNvbnx8ei5wcm9taXNlKSYmei5pY29uIT09bnVsbCYmKChuPT1udWxsP3ZvaWQgMDpuW1IxXSkhPT1udWxsfHx6Lmljb24pP20uY3JlYXRlRWxlbWVudCgiZGl2Iix7ImRhdGEtaWNvbiI6IiIsY2xhc3NOYW1lOnkwKHY9PW51bGw/dm9pZCAwOnYuaWNvbix6PT1udWxsP3ZvaWQgMDooWD16LmNsYXNzTmFtZXMpPT1udWxsP3ZvaWQgMDpYLmljb24pfSx6LnByb21pc2V8fHoudHlwZT09PSJsb2FkaW5nIiYmIXouaWNvbj96Lmljb258fEowKCk6bnVsbCx6LnR5cGUhPT0ibG9hZGluZyI/QTA6bnVsbCk6bnVsbCxtLmNyZWF0ZUVsZW1lbnQoImRpdiIseyJkYXRhLWNvbnRlbnQiOiIiLGNsYXNzTmFtZTp5MCh2PT1udWxsP3ZvaWQgMDp2LmNvbnRlbnQsej09bnVsbD92b2lkIDA6KFk9ei5jbGFzc05hbWVzKT09bnVsbD92b2lkIDA6WS5jb250ZW50KX0sbS5jcmVhdGVFbGVtZW50KCJkaXYiLHsiZGF0YS10aXRsZSI6IiIsY2xhc3NOYW1lOnkwKHY9PW51bGw/dm9pZCAwOnYudGl0bGUsej09bnVsbD92b2lkIDA6KHE9ei5jbGFzc05hbWVzKT09bnVsbD92b2lkIDA6cS50aXRsZSl9LHouanN4P3ouanN4OnR5cGVvZiB6LnRpdGxlPT09ImZ1bmN0aW9uIj96LnRpdGxlKCk6ei50aXRsZSksei5kZXNjcmlwdGlvbj9tLmNyZWF0ZUVsZW1lbnQoImRpdiIseyJkYXRhLWRlc2NyaXB0aW9uIjoiIixjbGFzc05hbWU6eTAobCxWMCx2PT1udWxsP3ZvaWQgMDp2LmRlc2NyaXB0aW9uLHo9PW51bGw/dm9pZCAwOihHPXouY2xhc3NOYW1lcyk9PW51bGw/dm9pZCAwOkcuZGVzY3JpcHRpb24pfSx0eXBlb2Ygei5kZXNjcmlwdGlvbj09PSJmdW5jdGlvbiI/ei5kZXNjcmlwdGlvbigpOnouZGVzY3JpcHRpb24pOm51bGwpLG0uaXNWYWxpZEVsZW1lbnQoei5jYW5jZWwpP3ouY2FuY2VsOnouY2FuY2VsJiZtNSh6LmNhbmNlbCk/bS5jcmVhdGVFbGVtZW50KCJidXR0b24iLHsiZGF0YS1idXR0b24iOiEwLCJkYXRhLWNhbmNlbCI6ITAsc3R5bGU6ei5jYW5jZWxCdXR0b25TdHlsZXx8ZixvbkNsaWNrOihLMSk9PntpZighbTUoei5jYW5jZWwpKXJldHVybjtpZighYTEpcmV0dXJuO3ouY2FuY2VsLm9uQ2xpY2s9PW51bGx8fHouY2FuY2VsLm9uQ2xpY2suY2FsbCh6LmNhbmNlbCxLMSkseTEoKX0sY2xhc3NOYW1lOnkwKHY9PW51bGw/dm9pZCAwOnYuY2FuY2VsQnV0dG9uLHo9PW51bGw/dm9pZCAwOihWPXouY2xhc3NOYW1lcyk9PW51bGw/dm9pZCAwOlYuY2FuY2VsQnV0dG9uKX0sei5jYW5jZWwubGFiZWwpOm51bGwsbS5pc1ZhbGlkRWxlbWVudCh6LmFjdGlvbik/ei5hY3Rpb246ei5hY3Rpb24mJm01KHouYWN0aW9uKT9tLmNyZWF0ZUVsZW1lbnQoImJ1dHRvbiIseyJkYXRhLWJ1dHRvbiI6ITAsImRhdGEtYWN0aW9uIjohMCxzdHlsZTp6LmFjdGlvbkJ1dHRvblN0eWxlfHxpLG9uQ2xpY2s6KEsxKT0+e2lmKCFtNSh6LmFjdGlvbikpcmV0dXJuO2lmKHouYWN0aW9uLm9uQ2xpY2s9PW51bGx8fHouYWN0aW9uLm9uQ2xpY2suY2FsbCh6LmFjdGlvbixLMSksSzEuZGVmYXVsdFByZXZlbnRlZClyZXR1cm47eTEoKX0sY2xhc3NOYW1lOnkwKHY9PW51bGw/dm9pZCAwOnYuYWN0aW9uQnV0dG9uLHo9PW51bGw/dm9pZCAwOihCPXouY2xhc3NOYW1lcyk9PW51bGw/dm9pZCAwOkIuYWN0aW9uQnV0dG9uKX0sei5hY3Rpb24ubGFiZWwpOm51bGwpfTtmdW5jdGlvbiBENigpe2lmKHR5cGVvZiB3aW5kb3c+InUiKXJldHVybiJsdHIiO2lmKHR5cGVvZiBkb2N1bWVudD4idSIpcmV0dXJuImx0ciI7bGV0ICQ9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmdldEF0dHJpYnV0ZSgiZGlyIik7aWYoJD09PSJhdXRvInx8ISQpcmV0dXJuIHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCkuZGlyZWN0aW9uO3JldHVybiAkfWZ1bmN0aW9uIERKKCQsSil7bGV0IFE9e307cmV0dXJuWyQsSl0uZm9yRWFjaCgoWixYKT0+e2xldCBZPVg9PT0xLHE9WT8iLS1tb2JpbGUtb2Zmc2V0IjoiLS1vZmZzZXQiLEc9WT9rSjpBSjtmdW5jdGlvbiBWKEIpe1sidG9wIiwicmlnaHQiLCJib3R0b20iLCJsZWZ0Il0uZm9yRWFjaCgoTik9PntRW2Ake3F9LSR7Tn1gXT10eXBlb2YgQj09PSJudW1iZXIiP2Ake0J9cHhgOkJ9KX1pZih0eXBlb2YgWj09PSJudW1iZXIifHx0eXBlb2YgWj09PSJzdHJpbmciKVYoWik7ZWxzZSBpZih0eXBlb2YgWj09PSJvYmplY3QiKVsidG9wIiwicmlnaHQiLCJib3R0b20iLCJsZWZ0Il0uZm9yRWFjaCgoQik9PntpZihaW0JdPT09dm9pZCAwKVFbYCR7cX0tJHtCfWBdPUc7ZWxzZSBRW2Ake3F9LSR7Qn1gXT10eXBlb2YgWltCXT09PSJudW1iZXIiP2Ake1pbQl19cHhgOlpbQl19KTtlbHNlIFYoRyl9KSxRfXZhciB3Nj1tLmZvcndhcmRSZWYoZnVuY3Rpb24oSixRKXtsZXR7aWQ6WixpbnZlcnQ6WCxwb3NpdGlvbjpZPSJib3R0b20tcmlnaHQiLGhvdGtleTpxPVsiYWx0S2V5IiwiS2V5VCJdLGV4cGFuZDpHLGNsb3NlQnV0dG9uOlYsY2xhc3NOYW1lOkIsb2Zmc2V0Ok4sbW9iaWxlT2Zmc2V0OnosdGhlbWU6TD0ibGlnaHQiLHJpY2hDb2xvcnM6QyxkdXJhdGlvbjpBLHN0eWxlOlUsdmlzaWJsZVRvYXN0czpIPUhKLHRvYXN0T3B0aW9uczprLGRpcjpGPUQ2KCksZ2FwOnc9RkosaWNvbnM6VCxjb250YWluZXJBcmlhTGFiZWw6Uz0iTm90aWZpY2F0aW9ucyJ9PUosW3gsJDFdPW0udXNlU3RhdGUoW10pLGY9bS51c2VNZW1vKCgpPT57aWYoWilyZXR1cm4geC5maWx0ZXIoKHkpPT55LnRvYXN0ZXJJZD09PVopO3JldHVybiB4LmZpbHRlcigoeSk9PiF5LnRvYXN0ZXJJZCl9LFt4LFpdKSxpPW0udXNlTWVtbygoKT0+e3JldHVybiBBcnJheS5mcm9tKG5ldyBTZXQoW1ldLmNvbmNhdChmLmZpbHRlcigoeSk9PnkucG9zaXRpb24pLm1hcCgoeSk9PnkucG9zaXRpb24pKSkpfSxbZixZXSksW3IsbF09bS51c2VTdGF0ZShbXSksW28sUTFdPW0udXNlU3RhdGUoITEpLFtOMSxjXT1tLnVzZVN0YXRlKCExKSxbdixuXT1tLnVzZVN0YXRlKEwhPT0ic3lzdGVtIj9MOnR5cGVvZiB3aW5kb3c8InUiP3dpbmRvdy5tYXRjaE1lZGlhJiZ3aW5kb3cubWF0Y2hNZWRpYSgiKHByZWZlcnMtY29sb3Itc2NoZW1lOiBkYXJrKSIpLm1hdGNoZXM/ImRhcmsiOiJsaWdodCI6ImxpZ2h0IiksWDE9bS51c2VSZWYobnVsbCksTDE9cS5qb2luKCIrIikucmVwbGFjZSgvS2V5L2csIiIpLnJlcGxhY2UoL0RpZ2l0L2csIiIpLEoxPW0udXNlUmVmKG51bGwpLFkxPW0udXNlUmVmKCExKSxIMT1tLnVzZUNhbGxiYWNrKCh5KT0+eyQxKChnKT0+e3ZhciBQO2lmKCEoKFA9Zy5maW5kKChwKT0+cC5pZD09PXkuaWQpKT09bnVsbD92b2lkIDA6UC5kZWxldGUpKUswLmRpc21pc3MoeS5pZCk7cmV0dXJuIGcuZmlsdGVyKCh7aWQ6cH0pPT5wIT09eS5pZCl9KX0sW10pO3JldHVybiBtLnVzZUVmZmVjdCgoKT0+e3JldHVybiBLMC5zdWJzY3JpYmUoKHkpPT57aWYoeS5kaXNtaXNzKXtyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9PnskMSgoZyk9PmcubWFwKChQKT0+UC5pZD09PXkuaWQ/ey4uLlAsZGVsZXRlOiEwfTpQKSl9KTtyZXR1cm59c2V0VGltZW91dCgoKT0+e20uZmx1c2hTeW5jKCgpPT57JDEoKGcpPT57bGV0IFA9Zy5maW5kSW5kZXgoKHApPT5wLmlkPT09eS5pZCk7aWYoUCE9PS0xKXJldHVyblsuLi5nLnNsaWNlKDAsUCksey4uLmdbUF0sLi4ueX0sLi4uZy5zbGljZShQKzEpXTtyZXR1cm5beSwuLi5nXX0pfSl9KX0pfSxbeF0pLG0udXNlRWZmZWN0KCgpPT57aWYoTCE9PSJzeXN0ZW0iKXtuKEwpO3JldHVybn1pZihMPT09InN5c3RlbSIpaWYod2luZG93Lm1hdGNoTWVkaWEmJndpbmRvdy5tYXRjaE1lZGlhKCIocHJlZmVycy1jb2xvci1zY2hlbWU6IGRhcmspIikubWF0Y2hlcyluKCJkYXJrIik7ZWxzZSBuKCJsaWdodCIpO2lmKHR5cGVvZiB3aW5kb3c+InUiKXJldHVybjtsZXQgeT13aW5kb3cubWF0Y2hNZWRpYSgiKHByZWZlcnMtY29sb3Itc2NoZW1lOiBkYXJrKSIpO3RyeXt5LmFkZEV2ZW50TGlzdGVuZXIoImNoYW5nZSIsKHttYXRjaGVzOmd9KT0+e2lmKGcpbigiZGFyayIpO2Vsc2UgbigibGlnaHQiKX0pfWNhdGNoKGcpe3kuYWRkTGlzdGVuZXIoKHttYXRjaGVzOlB9KT0+e3RyeXtpZihQKW4oImRhcmsiKTtlbHNlIG4oImxpZ2h0Iil9Y2F0Y2gocCl7Y29uc29sZS5lcnJvcihwKX19KX19LFtMXSksbS51c2VFZmZlY3QoKCk9PntpZih4Lmxlbmd0aDw9MSlRMSghMSl9LFt4XSksbS51c2VFZmZlY3QoKCk9PntsZXQgeT0oZyk9Pnt2YXIgUDtpZihxLmV2ZXJ5KChqKT0+Z1tqXXx8Zy5jb2RlPT09aikpe3ZhciB1O1ExKCEwKSwodT1YMS5jdXJyZW50KT09bnVsbHx8dS5mb2N1cygpfWlmKGcuY29kZT09PSJFc2NhcGUiJiYoZG9jdW1lbnQuYWN0aXZlRWxlbWVudD09PVgxLmN1cnJlbnR8fCgoUD1YMS5jdXJyZW50KT09bnVsbD92b2lkIDA6UC5jb250YWlucyhkb2N1bWVudC5hY3RpdmVFbGVtZW50KSkpKVExKCExKX07cmV0dXJuIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLHkpLCgpPT5kb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJrZXlkb3duIix5KX0sW3FdKSxtLnVzZUVmZmVjdCgoKT0+e2lmKFgxLmN1cnJlbnQpcmV0dXJuKCk9PntpZihKMS5jdXJyZW50KUoxLmN1cnJlbnQuZm9jdXMoe3ByZXZlbnRTY3JvbGw6ITB9KSxKMS5jdXJyZW50PW51bGwsWTEuY3VycmVudD0hMX19LFtYMS5jdXJyZW50XSksbS5jcmVhdGVFbGVtZW50KCJzZWN0aW9uIix7cmVmOlEsImFyaWEtbGFiZWwiOmAke1N9ICR7TDF9YCx0YWJJbmRleDotMSwiYXJpYS1saXZlIjoicG9saXRlIiwiYXJpYS1yZWxldmFudCI6ImFkZGl0aW9ucyB0ZXh0IiwiYXJpYS1hdG9taWMiOiJmYWxzZSIsc3VwcHJlc3NIeWRyYXRpb25XYXJuaW5nOiEwfSxpLm1hcCgoeSxnKT0+e3ZhciBQO2xldFtwLHVdPXkuc3BsaXQoIi0iKTtpZighZi5sZW5ndGgpcmV0dXJuIG51bGw7cmV0dXJuIG0uY3JlYXRlRWxlbWVudCgib2wiLHtrZXk6eSxkaXI6Rj09PSJhdXRvIj9ENigpOkYsdGFiSW5kZXg6LTEscmVmOlgxLGNsYXNzTmFtZTpCLCJkYXRhLXNvbm5lci10b2FzdGVyIjohMCwiZGF0YS1zb25uZXItdGhlbWUiOnYsImRhdGEteS1wb3NpdGlvbiI6cCwiZGF0YS14LXBvc2l0aW9uIjp1LHN0eWxlOnsiLS1mcm9udC10b2FzdC1oZWlnaHQiOmAkeygoUD1yWzBdKT09bnVsbD92b2lkIDA6UC5oZWlnaHQpfHwwfXB4YCwiLS13aWR0aCI6YCR7T0p9cHhgLCItLWdhcCI6YCR7d31weGAsLi4uVSwuLi5ESihOLHopfSxvbkJsdXI6KGopPT57aWYoWTEuY3VycmVudCYmIWouY3VycmVudFRhcmdldC5jb250YWlucyhqLnJlbGF0ZWRUYXJnZXQpKXtpZihZMS5jdXJyZW50PSExLEoxLmN1cnJlbnQpSjEuY3VycmVudC5mb2N1cyh7cHJldmVudFNjcm9sbDohMH0pLEoxLmN1cnJlbnQ9bnVsbH19LG9uRm9jdXM6KGopPT57aWYoai50YXJnZXQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCYmai50YXJnZXQuZGF0YXNldC5kaXNtaXNzaWJsZT09PSJmYWxzZSIpcmV0dXJuO2lmKCFZMS5jdXJyZW50KVkxLmN1cnJlbnQ9ITAsSjEuY3VycmVudD1qLnJlbGF0ZWRUYXJnZXR9LG9uTW91c2VFbnRlcjooKT0+UTEoITApLG9uTW91c2VNb3ZlOigpPT5RMSghMCksb25Nb3VzZUxlYXZlOigpPT57aWYoIU4xKVExKCExKX0sb25EcmFnRW5kOigpPT5RMSghMSksb25Qb2ludGVyRG93bjooaik9PntpZihqLnRhcmdldCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50JiZqLnRhcmdldC5kYXRhc2V0LmRpc21pc3NpYmxlPT09ImZhbHNlIilyZXR1cm47YyghMCl9LG9uUG9pbnRlclVwOigpPT5jKCExKX0sZi5maWx0ZXIoKGopPT4hai5wb3NpdGlvbiYmZz09PTB8fGoucG9zaXRpb249PT15KS5tYXAoKGosRzEpPT57dmFyIHoxLE0xO3JldHVybiBtLmNyZWF0ZUVsZW1lbnQoX0ose2tleTpqLmlkLGljb25zOlQsaW5kZXg6RzEsdG9hc3Q6aixkZWZhdWx0UmljaENvbG9yczpDLGR1cmF0aW9uOih6MT1rPT1udWxsP3ZvaWQgMDprLmR1cmF0aW9uKSE9bnVsbD96MTpBLGNsYXNzTmFtZTprPT1udWxsP3ZvaWQgMDprLmNsYXNzTmFtZSxkZXNjcmlwdGlvbkNsYXNzTmFtZTprPT1udWxsP3ZvaWQgMDprLmRlc2NyaXB0aW9uQ2xhc3NOYW1lLGludmVydDpYLHZpc2libGVUb2FzdHM6SCxjbG9zZUJ1dHRvbjooTTE9az09bnVsbD92b2lkIDA6ay5jbG9zZUJ1dHRvbikhPW51bGw/TTE6VixpbnRlcmFjdGluZzpOMSxwb3NpdGlvbjp5LHN0eWxlOms9PW51bGw/dm9pZCAwOmsuc3R5bGUsdW5zdHlsZWQ6az09bnVsbD92b2lkIDA6ay51bnN0eWxlZCxjbGFzc05hbWVzOms9PW51bGw/dm9pZCAwOmsuY2xhc3NOYW1lcyxjYW5jZWxCdXR0b25TdHlsZTprPT1udWxsP3ZvaWQgMDprLmNhbmNlbEJ1dHRvblN0eWxlLGFjdGlvbkJ1dHRvblN0eWxlOms9PW51bGw/dm9pZCAwOmsuYWN0aW9uQnV0dG9uU3R5bGUsY2xvc2VCdXR0b25BcmlhTGFiZWw6az09bnVsbD92b2lkIDA6ay5jbG9zZUJ1dHRvbkFyaWFMYWJlbCxyZW1vdmVUb2FzdDpIMSx0b2FzdHM6Zi5maWx0ZXIoKFcxKT0+VzEucG9zaXRpb249PWoucG9zaXRpb24pLGhlaWdodHM6ci5maWx0ZXIoKFcxKT0+VzEucG9zaXRpb249PWoucG9zaXRpb24pLHNldEhlaWdodHM6bCxleHBhbmRCeURlZmF1bHQ6RyxnYXA6dyxleHBhbmRlZDpvLHN3aXBlRGlyZWN0aW9uczpKLnN3aXBlRGlyZWN0aW9uc30pfSkpfSkpfSk7ZnVuY3Rpb24gRTYoKXtyZXR1cm4gSyh3Nix7dGhlbWU6ImRhcmsiLHBvc2l0aW9uOiJib3R0b20tY2VudGVyIix2aXNpYmxlVG9hc3RzOjQsZ2FwOjgsb2Zmc2V0Ontib3R0b206MjR9LHRvYXN0T3B0aW9uczp7dW5zdHlsZWQ6ITB9LHN0eWxlOnt6SW5kZXg6MjE0NzQ4MzY0N30sY29udGFpbmVyQXJpYUxhYmVsOiJzZXJ2ZS1zaW0gbm90aWZpY2F0aW9ucyJ9KX1mdW5jdGlvbiBJNih7dG9hc3Q6JH0pe2xldCBKPSQuc3RhdHVzPT09ImVycm9yIixRPSQuc3RhdHVzPT09InVwbG9hZGluZyIsWj1RJiYkLnByb2dyZXNzIT09bnVsbCxYPSQucHJvZ3Jlc3MhPW51bGw/TWF0aC5yb3VuZCgkLnByb2dyZXNzKjEwMCk6MDtyZXR1cm4gSygiZGl2Iix7ImRhdGEtdGVzdGlkIjoidXBsb2FkLXRvYXN0IixjbGFzc05hbWU6YGZsZXggdy1bbWluKDMyMHB4LGNhbGMoMTAwdnctMzJweCkpXSBmbGV4LWNvbCBnYXAtMS41IHB4LTMgcHktMiBiZy1wYW5lbCBib3JkZXIgYm9yZGVyLXdoaXRlLzEyIHJvdW5kZWQtbGcgdGV4dC13aGl0ZS85MCB0ZXh0LVsxMnB4XSBmb250LW1vbm8gc2hhZG93LVswXzhweF8yNHB4X3JnYmEoMCwwLDAsMC40NSldICR7Sj8ic2VsZWN0LXRleHQgY3Vyc29yLXRleHQiOiJzZWxlY3Qtbm9uZSBjdXJzb3ItZGVmYXVsdCJ9YCxjaGlsZHJlbjpbSygiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMiBtaW4tdy0wIixjaGlsZHJlbjpbSygic3BhbiIse2NsYXNzTmFtZToic2l6ZS0xLjUgcm91bmRlZC1mdWxsIHNocmluay0wIFt0cmFuc2l0aW9uOmJhY2tncm91bmRfMC4zc10iLHN0eWxlOntiYWNrZ3JvdW5kOlE/IiNhNWI0ZmMiOiQuc3RhdHVzPT09InN1Y2Nlc3MiPyIjNGFkZTgwIjoiI2Y4NzE3MSJ9fSksSygic3BhbiIse2NsYXNzTmFtZToiZmxleC0xIG92ZXJmbG93LWhpZGRlbiB0ZXh0LWVsbGlwc2lzIHdoaXRlc3BhY2Utbm93cmFwIixjaGlsZHJlbjpbUSYmWiYmYFVwbG9hZGluZyAkeyQubmFtZX3igKYgJHtYfSVgLFEmJiFaJiYoJC5raW5kPT09ImlwYSI/YEluc3RhbGxpbmcgJHskLm5hbWV94oCmYDpgQWRkaW5nICR7JC5uYW1lfeKApmApLCQuc3RhdHVzPT09InN1Y2Nlc3MiJiYoJC5raW5kPT09ImlwYSI/YEluc3RhbGxlZCAkeyQubmFtZX1gOmBBZGRlZCAkeyQubmFtZX0gdG8gUGhvdG9zYCksSiYmYCR7JC5uYW1lfTogJHskLm1lc3NhZ2U/PyJVcGxvYWQgZmFpbGVkIn1gXX0pXX0pLFEmJksoImRpdiIse2NsYXNzTmFtZToicmVsYXRpdmUgaC1bM3B4XSB3LWZ1bGwgYmctd2hpdGUvOCByb3VuZGVkLVsycHhdIG92ZXJmbG93LWhpZGRlbiIsY2hpbGRyZW46Wj9LKCJkaXYiLHtjbGFzc05hbWU6ImgtZnVsbCBiZy1hY2NlbnQgcm91bmRlZC1bMnB4XSBbdHJhbnNpdGlvbjp3aWR0aF8xMjBtc19saW5lYXJdIixzdHlsZTp7d2lkdGg6YCR7WH0lYH19KTpLKCJkaXYiLHtjbGFzc05hbWU6InNlcnZlLXNpbS10b2FzdC1pbmRldGVybWluYXRlIGFic29sdXRlIHRvcC0wIGxlZnQtMCBoLWZ1bGwgdy1bNDAlXSBiZy1hY2NlbnQgcm91bmRlZC1bMnB4XSJ9KX0pXX0pfWZ1bmN0aW9uIHk2KHt3aWR0aDokLGhlaWdodDpKLHZpc2libGU6UX0pe3JldHVybiBLKCJkaXYiLHsiYXJpYS1oaWRkZW4iOiJ0cnVlIixjbGFzc05hbWU6ImFic29sdXRlIHJpZ2h0LTMgYm90dG9tLTMgei0yMCBwb2ludGVyLWV2ZW50cy1ub25lIHNlbGVjdC1ub25lIHJvdW5kZWQtbGcgcHgtMi41IHB5LTEgdGV4dC1bMTEuNXB4XSBmb250LW1vbm8gbGVhZGluZy1ub25lIHRyYWNraW5nLXdpZGUgdGV4dC13aGl0ZS85NSBiZy1wYW5lbC1iZy10cmFuc2x1Y2VudCBzaGFkb3ctWzBfMXB4XzJweF9yZ2JhKDAsMCwwLDAuMTgpLDBfNnB4XzE4cHhfcmdiYSgwLDAsMCwwLjI4KSxpbnNldF8wXzBfMF8xcHhfcmdiYSgyNTUsMjU1LDI1NSwwLjA2KV0gYmFja2Ryb3AtYmx1ci1tZCBiYWNrZHJvcC1zYXR1cmF0ZS0xNTAgd2hpdGVzcGFjZS1ub3dyYXAiLHN0eWxlOntvcGFjaXR5OlE/MTowLHRyYW5zZm9ybTpgdHJhbnNsYXRlWSgke1E/MDo0fXB4KSBzY2FsZSgke1E/MTowLjk2fSlgLHRyYW5zZm9ybU9yaWdpbjoiMTAwJSAxMDAlIix0cmFuc2l0aW9uOiJvcGFjaXR5IDE4MG1zIGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSksIHRyYW5zZm9ybSAyMjBtcyBjdWJpYy1iZXppZXIoMC4yLCAwLjgyLCAwLjIyLCAxKSJ9LGNoaWxkcmVuOltNYXRoLnJvdW5kKCQpLCIgIixLKCJzcGFuIix7Y2xhc3NOYW1lOiJvcGFjaXR5LTYwIG14LTAuNSIsY2hpbGRyZW46IsOXIn0pLCIgIixNYXRoLnJvdW5kKEopXX0pfWZ1bmN0aW9uIGI2KHtzdHJlYW1pbmc6JH0pe2xldCBKPSQ/IiM0YWRlODAiOiIjOGU4ZTkzIjtyZXR1cm4gSygic3BhbiIseyJkYXRhLXRlc3RpZCI6InN0cmVhbS1zdGF0dXMtcGlsbCIsY2xhc3NOYW1lOiJpbmxpbmUtZmxleCBpdGVtcy1jZW50ZXIgZ2FwLVs1cHhdIHRleHQtWzEycHhdIGZvbnQtbW9ubyBmb250LW1lZGl1bSBsZWFkaW5nLW5vbmUgd2hpdGVzcGFjZS1ub3dyYXAiLHN0eWxlOntjb2xvcjpKfSwiYXJpYS1saXZlIjoicG9saXRlIixjaGlsZHJlbjpbSygic3BhbiIseyJhcmlhLWhpZGRlbiI6InRydWUiLGNsYXNzTmFtZToic2l6ZS0xLjUgcm91bmRlZC1mdWxsIFt0cmFuc2l0aW9uOmJhY2tncm91bmRfMC4xOHNfZWFzZV0iLHN0eWxlOntiYWNrZ3JvdW5kOkp9fSksJD8ibGl2ZSI6ImNvbm5lY3RpbmciXX0pfWZ1bmN0aW9uIFRKKCQsSixRKXtsZXQgWj1RLmxhdCpNYXRoLlBJLzE4MCxYPSgkLVEubGF0KSpNYXRoLlBJLzE4MDtyZXR1cm57eDooSi1RLmxuZykqTWF0aC5QSS8xODAqTWF0aC5jb3MoWikqNjM3MTAwMCx6Oi1YKjYzNzEwMDB9fWZ1bmN0aW9uIHdKKCQsSixRKXtsZXQgWj1RLmxhdCpNYXRoLlBJLzE4MCxYPS1KLzYzNzEwMDAqKDE4MC9NYXRoLlBJKSxZPSQvKDYzNzEwMDAqTWF0aC5jb3MoWikpKigxODAvTWF0aC5QSSk7cmV0dXJue2xhdDpRLmxhdCtYLGxuZzpRLmxuZytZfX1mdW5jdGlvbiBFSigkLEosUSxaLFgpe2xldCBZPVgqWCxxPVkqWCxHPShWLEIsTix6KT0+MC41KigyKkIrKC1WK04pKlgrKDIqVi01KkIrNCpOLXopKlkrKC1WKzMqQi0zKk4reikqcSk7cmV0dXJue3g6RygkLngsSi54LFEueCxaLngpLHo6RygkLnosSi56LFEueixaLnopLHk6RygkLnksSi55LFEueSxaLnkpLHJhd0FsdDpHKCQucmF3QWx0LEoucmF3QWx0LFEucmF3QWx0LFoucmF3QWx0KX19ZnVuY3Rpb24gSUooJCxKLFEpe2lmKCQubGVuZ3RoPDIpcmV0dXJuICQuc2xpY2UoKTtsZXQgWj1bXSxYPSQubGVuZ3RoLFk9UT9YOlgtMTtmb3IobGV0IHE9MDtxPFk7cSsrKXtsZXQgRz0kW1E/KHEtMStYKSVYOk1hdGgubWF4KDAscS0xKV0sVj0kW3ElWF0sQj0kWyhxKzEpJVhdLE49JFtRPyhxKzIpJVg6TWF0aC5taW4oWC0xLHErMildLHo9Qi54LVYueCxMPUIuei1WLnosQz1NYXRoLmh5cG90KHosTCksQT1NYXRoLm1heCgyLE1hdGguY2VpbChDL0opKTtmb3IobGV0IFU9MDtVPEE7VSsrKXtsZXQgSD1VL0E7Wi5wdXNoKEVKKEcsVixCLE4sSCkpfX1pZighUSlaLnB1c2goJFtYLTFdKTtyZXR1cm4gWn1mdW5jdGlvbiBTNigkKXtpZigkLndheXBvaW50cy5sZW5ndGg8Mil0aHJvdyBFcnJvcihgVHJhaWwgJHskLmlkfSBuZWVkcyBhdCBsZWFzdCAyIHdheXBvaW50c2ApO2xldCBKPXtsYXQ6JC53YXlwb2ludHMucmVkdWNlKChVLEgpPT5VK0gubGF0LDApLyQud2F5cG9pbnRzLmxlbmd0aCxsbmc6JC53YXlwb2ludHMucmVkdWNlKChVLEgpPT5VK0gubG5nLDApLyQud2F5cG9pbnRzLmxlbmd0aH0sUT0kLndheXBvaW50cy5tYXAoKFUpPT5VLmFsdD8/MCksWj1NYXRoLm1pbiguLi5RKSxYPU1hdGgubWF4KC4uLlEpLFk9JC53YXlwb2ludHMubWFwKChVKT0+e2xldHt4OkgsejprfT1USihVLmxhdCxVLmxuZyxKKSxGPVUuYWx0Pz8wO3JldHVybnt4OkgsejprLHk6Ri1aLHJhd0FsdDpGfX0pLHE9SUooWSw4LCEhJC5sb29wKSxHPVtdLFY9MDtmb3IobGV0IFU9MDtVPHEubGVuZ3RoO1UrKyl7bGV0IEg9cVtVXTtpZihVPjApe2xldCBUPXFbVS0xXTtWKz1NYXRoLmh5cG90KEgueC1ULngsSC56LVQueixILnktVC55KX1sZXR7bGF0OmssbG5nOkZ9PXdKKEgueCxILnosSiksdz1NYXRoLm1heCgwLEgueSk7Ry5wdXNoKHt4OkgueCx6Okgueix5OncsYXJjOlYsbGF0OmssbG5nOkZ9KX1sZXQgQj0xLzAsTj0tMS8wLHo9MS8wLEw9LTEvMCxDPTEvMCxBPS0xLzA7Zm9yKGxldCBVIG9mIEcpe2lmKFUueDxCKUI9VS54O2lmKFUueD5OKU49VS54O2lmKFUuejx6KXo9VS56O2lmKFUuej5MKUw9VS56O2lmKFUueTxDKUM9VS55O2lmKFUueT5BKUE9VS55fXJldHVybnt0cmFpbDokLG9yaWdpbjpKLHBvaW50czpHLHRvdGFsRGlzdGFuY2U6R1tHLmxlbmd0aC0xXS5hcmMsYm91bmRzOnt4OltCLE5dLHk6W0MsQV0sejpbeixMXX0scmF3TWluQWx0OloscmF3TWF4QWx0Olh9fWZ1bmN0aW9uIG4wKCQsSil7bGV0IFE9JC50b3RhbERpc3RhbmNlO2lmKFE9PT0wKXJldHVybiAkLnBvaW50c1swXTtsZXQgWj1KO2lmKCQudHJhaWwubG9vcClaPShaJVErUSklUTtlbHNle2lmKFo8PTApcmV0dXJuICQucG9pbnRzWzBdO2lmKFo+PVEpcmV0dXJuICQucG9pbnRzWyQucG9pbnRzLmxlbmd0aC0xXX1sZXQgWD0wLFk9JC5wb2ludHMubGVuZ3RoLTE7d2hpbGUoWCsxPFkpe2xldCBOPVgrWT4+PjE7aWYoJC5wb2ludHNbTl0uYXJjPD1aKVg9TjtlbHNlIFk9Tn1sZXQgcT0kLnBvaW50c1tYXSxHPSQucG9pbnRzW1ldLFY9Ry5hcmMtcS5hcmMsQj1WPT09MD8wOihaLXEuYXJjKS9WO3JldHVybnt4OnEueCsoRy54LXEueCkqQix6OnEueisoRy56LXEueikqQix5OnEueSsoRy55LXEueSkqQixhcmM6WixsYXQ6cS5sYXQrKEcubGF0LXEubGF0KSpCLGxuZzpxLmxuZysoRy5sbmctcS5sbmcpKkJ9fWZ1bmN0aW9uIHUzKCQpe3N3aXRjaCgkKXtjYXNlIndhbGsiOnJldHVybiAxLjQ7Y2FzZSJydW4iOnJldHVybiAzO2Nhc2UiY3ljbGUiOnJldHVybiA1LjU7Y2FzZSJkcml2ZSI6cmV0dXJuIDEzLjR9fXZhciB5Sj1be2xhdDozNy4zMzI3Mixsbmc6LTEyMi4wMDgzMyxhbHQ6NDl9LHtsYXQ6MzcuMzMzMDksbG5nOi0xMjIuMDA3MzUsYWx0OjQ4fSx7bGF0OjM3LjMzMzczLGxuZzotMTIyLjAwNjYzLGFsdDo0OX0se2xhdDozNy4zMzQ1NCxsbmc6LTEyMi4wMDYyNyxhbHQ6NDl9LHtsYXQ6MzcuMzM1NCxsbmc6LTEyMi4wMDYzMyxhbHQ6NDl9LHtsYXQ6MzcuMzM2MTgsbG5nOi0xMjIuMDA2NzksYWx0OjQ1fSx7bGF0OjM3LjMzNjc1LGxuZzotMTIyLjAwNzU5LGFsdDo0NX0se2xhdDozNy4zMzcwNCxsbmc6LTEyMi4wMDg2MSxhbHQ6NDZ9LHtsYXQ6MzcuMzM2OTgsbG5nOi0xMjIuMDA5NjksYWx0OjQ4fSx7bGF0OjM3LjMzNjYyLGxuZzotMTIyLjAxMDY2LGFsdDo0OH0se2xhdDozNy4zMzU5OCxsbmc6LTEyMi4wMTEzOCxhbHQ6NDl9LHtsYXQ6MzcuMzM1MTcsbG5nOi0xMjIuMDExNzQsYWx0OjUwfSx7bGF0OjM3LjMzNDMxLGxuZzotMTIyLjAxMTY5LGFsdDo1MH0se2xhdDozNy4zMzM1NCxsbmc6LTEyMi4wMTEyMixhbHQ6NTB9LHtsYXQ6MzcuMzMyOTYsbG5nOi0xMjIuMDEwNDIsYWx0OjUxfSx7bGF0OjM3LjMzMjY4LGxuZzotMTIyLjAwOTQsYWx0OjUwfV0sYko9W3tsYXQ6MzcuODMyMTIsbG5nOi0xMjIuNDgwNjUsYWx0OjMwfSx7bGF0OjM3LjgyOTM3LGxuZzotMTIyLjQ3OTc0LGFsdDozMH0se2xhdDozNy44MjY0OSxsbmc6LTEyMi40Nzk0LGFsdDozMH0se2xhdDozNy44MjM2Mixsbmc6LTEyMi40NzkwNyxhbHQ6NDV9LHtsYXQ6MzcuODIwNzQsbG5nOi0xMjIuNDc4NzMsYWx0OjU5fSx7bGF0OjM3LjgxNzg2LGxuZzotMTIyLjQ3ODM5LGFsdDo2Nn0se2xhdDozNy44MTQ5OCxsbmc6LTEyMi40NzgwNixhbHQ6NjZ9LHtsYXQ6MzcuODEyMTEsbG5nOi0xMjIuNDc3NzIsYWx0OjU4fSx7bGF0OjM3LjgwOTIzLGxuZzotMTIyLjQ3NzM0LGFsdDo0NH0se2xhdDozNy44MDk0OSxsbmc6LTEyMi40NzczLGFsdDo0NX0se2xhdDozNy44MTIzNixsbmc6LTEyMi40Nzc2NSxhbHQ6NTl9LHtsYXQ6MzcuODE1MjQsbG5nOi0xMjIuNDc3OTgsYWx0OjY2fSx7bGF0OjM3LjgxODEyLGxuZzotMTIyLjQ3ODMyLGFsdDo2Nn0se2xhdDozNy44MjEsbG5nOi0xMjIuNDc4NjYsYWx0OjU4fSx7bGF0OjM3LjgyMzg3LGxuZzotMTIyLjQ3OSxhbHQ6NDR9LHtsYXQ6MzcuODI2NzUsbG5nOi0xMjIuNDc5MzMsYWx0OjMwfSx7bGF0OjM3LjgyOTYzLGxuZzotMTIyLjQ3OTY3LGFsdDozMH0se2xhdDozNy44MzIzMyxsbmc6LTEyMi40ODA3MixhbHQ6MzB9XSxTSj1be2xhdDozNy44ODY2NCxsbmc6LTEyMi42MjU5OSxhbHQ6MTIxfSx7bGF0OjM3Ljg4ODg3LGxuZzotMTIyLjYyMzMyLGFsdDoxMzV9LHtsYXQ6MzcuODkxMTUsbG5nOi0xMjIuNjIxNixhbHQ6MTY0fSx7bGF0OjM3Ljg5MzUzLGxuZzotMTIyLjYxOTIxLGFsdDoxODB9LHtsYXQ6MzcuODk0NjYsbG5nOi0xMjIuNjE1NzcsYWx0OjIyMH0se2xhdDozNy44OTYzMSxsbmc6LTEyMi42MTI2OCxhbHQ6MjczfSx7bGF0OjM3Ljg5OTE3LGxuZzotMTIyLjYxMDk4LGFsdDozMTN9LHtsYXQ6MzcuOTAxNjYsbG5nOi0xMjIuNjA4NTUsYWx0OjM0Mn0se2xhdDozNy45MDE5OSxsbmc6LTEyMi42MDYwMSxhbHQ6NDA4fSx7bGF0OjM3LjkwMzM5LGxuZzotMTIyLjYwNDAxLGFsdDo0NTB9LHtsYXQ6MzcuOTA2NjIsbG5nOi0xMjIuNjAyOTEsYWx0OjQ0MH0se2xhdDozNy45MDk3MSxsbmc6LTEyMi42MDE3MyxhbHQ6NDMyfSx7bGF0OjM3LjkxMjEzLGxuZzotMTIyLjYwMDA3LGFsdDo0MzZ9LHtsYXQ6MzcuOTE0MzksbG5nOi0xMjIuNTk3OCxhbHQ6NDEwfSx7bGF0OjM3LjkxMjg1LGxuZzotMTIyLjU5NTA0LGFsdDo0MjJ9LHtsYXQ6MzcuOTEyNzQsbG5nOi0xMjIuNTkyMDIsYWx0OjQyNX0se2xhdDozNy45MTUsbG5nOi0xMjIuNTkwMzIsYWx0OjQxMn0se2xhdDozNy45MTYzNyxsbmc6LTEyMi41ODkwMyxhbHQ6NDA2fSx7bGF0OjM3LjkxNDgxLGxuZzotMTIyLjU4NTk1LGFsdDozODJ9LHtsYXQ6MzcuOTE3NCxsbmc6LTEyMi41ODM5OCxhbHQ6MzcyfSx7bGF0OjM3LjkxNjQyLGxuZzotMTIyLjU4MjM2LGFsdDozNTJ9LHtsYXQ6MzcuOTE0ODEsbG5nOi0xMjIuNTgwMTEsYWx0OjM0Mn1dLHhKPVt7bGF0OjQwLjc4MjE2LGxuZzotNzMuOTYyNTQsYWx0OjM3fSx7bGF0OjQwLjc4MjIxLGxuZzotNzMuOTYwOTgsYWx0OjM2fSx7bGF0OjQwLjc4MzI4LGxuZzotNzMuOTYwMSxhbHQ6MzZ9LHtsYXQ6NDAuNzg0NCxsbmc6LTczLjk1OTMsYWx0OjM2fSx7bGF0OjQwLjc4NTUsbG5nOi03My45NTg0OCxhbHQ6MzZ9LHtsYXQ6NDAuNzg2NjQsbG5nOi03My45NTc3NCxhbHQ6MzZ9LHtsYXQ6NDAuNzg3OSxsbmc6LTczLjk1NzY0LGFsdDozNn0se2xhdDo0MC43ODg5OCxsbmc6LTczLjk1NzkyLGFsdDozNn0se2xhdDo0MC43ODg2OCxsbmc6LTczLjk1OTUxLGFsdDozN30se2xhdDo0MC43ODg5Nyxsbmc6LTczLjk2MTEyLGFsdDozNn0se2xhdDo0MC43ODgzMyxsbmc6LTczLjk2MjUsYWx0OjM3fSx7bGF0OjQwLjc4ODI4LGxuZzotNzMuOTY0MTYsYWx0OjM3fSx7bGF0OjQwLjc4ODA1LGxuZzotNzMuOTY1NzMsYWx0OjM2fSx7bGF0OjQwLjc4NjkxLGxuZzotNzMuOTY2MzYsYWx0OjM2fSx7bGF0OjQwLjc4NTY2LGxuZzotNzMuOTY2NjUsYWx0OjM2fSx7bGF0OjQwLjc4NDU4LGxuZzotNzMuOTY2MDgsYWx0OjM2fSx7bGF0OjQwLjc4NDAyLGxuZzotNzMuOTY0NTksYWx0OjM2fSx7bGF0OjQwLjc4MzIyLGxuZzotNzMuOTYzMzQsYWx0OjM3fV0sdko9W3tsYXQ6MzcuNTk2NTksbG5nOi0xMjIuNTAzMTYsYWx0OjR9LHtsYXQ6MzcuNTk1NTUsbG5nOi0xMjIuNTA0MjQsYWx0OjR9LHtsYXQ6MzcuNTk0NTIsbG5nOi0xMjIuNTA1MzQsYWx0OjV9LHtsYXQ6MzcuNTkzMjksbG5nOi0xMjIuNTA1ODgsYWx0Ojl9LHtsYXQ6MzcuNTkyMTIsbG5nOi0xMjIuNTA1MDgsYWx0OjIwfSx7bGF0OjM3LjU5MSxsbmc6LTEyMi41MDQxMyxhbHQ6Mjl9LHtsYXQ6MzcuNTg5NzQsbG5nOi0xMjIuNTA0MTYsYWx0OjQwfSx7bGF0OjM3LjU4ODcsbG5nOi0xMjIuNTA1MjQsYWx0OjUxfSx7bGF0OjM3LjU4NzQ1LGxuZzotMTIyLjUwNDk2LGFsdDo2MH0se2xhdDozNy41ODYyNyxsbmc6LTEyMi41MDQyMixhbHQ6NzF9LHtsYXQ6MzcuNTg1MzksbG5nOi0xMjIuNTA1MzQsYWx0OjgyfSx7bGF0OjM3LjU4NTA1LGxuZzotMTIyLjUwNjk4LGFsdDo5M30se2xhdDozNy41ODUzOSxsbmc6LTEyMi41MDUzNCxhbHQ6ODJ9LHtsYXQ6MzcuNTg2MjcsbG5nOi0xMjIuNTA0MjIsYWx0OjcxfSx7bGF0OjM3LjU4NzQ1LGxuZzotMTIyLjUwNDk2LGFsdDo2MH0se2xhdDozNy41ODg3LGxuZzotMTIyLjUwNTI0LGFsdDo1MX0se2xhdDozNy41ODk3NCxsbmc6LTEyMi41MDQxNixhbHQ6NDB9LHtsYXQ6MzcuNTkxLGxuZzotMTIyLjUwNDEzLGFsdDoyOX0se2xhdDozNy41OTIxMixsbmc6LTEyMi41MDUwOCxhbHQ6MjB9LHtsYXQ6MzcuNTkzMjksbG5nOi0xMjIuNTA1ODgsYWx0Ojl9LHtsYXQ6MzcuNTk0NTIsbG5nOi0xMjIuNTA1MzQsYWx0OjV9LHtsYXQ6MzcuNTk1NTUsbG5nOi0xMjIuNTA0MjQsYWx0OjR9XSxzMD1be2lkOiJhcHBsZS1wYXJrLWxvb3AiLG5hbWU6IkFwcGxlIFBhcmsgTG9vcCIsZGVzY3JpcHRpb246IkN1cGVydGlubyDigKIgZmxhdCByaW5nIHJvYWQiLG1vZGU6IndhbGsiLHdheXBvaW50czp5Sixsb29wOiEwfSx7aWQ6ImdvbGRlbi1nYXRlIixuYW1lOiJHb2xkZW4gR2F0ZSBDcm9zc2luZyIsZGVzY3JpcHRpb246IlNhbiBGcmFuY2lzY28g4oCiIGJyaWRnZSByb3VuZC10cmlwIixtb2RlOiJydW4iLHdheXBvaW50czpiSixsb29wOiEwfSx7aWQ6InRhbS1yaWRnZSIsbmFtZToiTXQuIFRhbSBSaWRnZSIsZGVzY3JpcHRpb246IlN0aW5zb24gQmVhY2gg4oCiIFN0ZWVwIFJhdmluZSArIE1hdHQgRGF2aXMgbG9vcCIsbW9kZToid2FsayIsd2F5cG9pbnRzOlNKLGxvb3A6ITB9LHtpZDoiY2VudHJhbC1wYXJrIixuYW1lOiJSZXNlcnZvaXIgTG9vcCIsZGVzY3JpcHRpb246IkNlbnRyYWwgUGFyayDigKIgMi41IGttIixtb2RlOiJydW4iLHdheXBvaW50czp4Sixsb29wOiEwfSx7aWQ6InBjaC1wYWNpZmljYSIsbmFtZToiUGFjaWZpYyBDb2FzdCBId3kiLGRlc2NyaXB0aW9uOiJQYWNpZmljYSDigKIgRGV2aWwncyBTbGlkZSByb3VuZC10cmlwIixtb2RlOiJkcml2ZSIsd2F5cG9pbnRzOnZKLGxvb3A6ITB9XTtmdW5jdGlvbiBYMCh7b3BlbjokLG9uT3BlbkNoYW5nZTpKLHN1bW1hcnk6USxjaGlsZHJlbjpaLHN1bW1hcnlDbGFzc05hbWU6WD0iIixib2R5Q2xhc3NOYW1lOlk9ImZsZXggZmxleC1jb2wgZ2FwLTIuNSBwdC0yLjUiLGNsYXNzTmFtZTpxPSIiLC4uLkd9KXtyZXR1cm4gSygiZGV0YWlscyIse29wZW46JCxvblRvZ2dsZTooVik9PkooVi5jdXJyZW50VGFyZ2V0Lm9wZW4pLGNsYXNzTmFtZTpgbGVtLXNlY3Rpb24gYmctcGFuZWwgcm91bmRlZC1bMTBweF0gcHgtMyBweS0yICR7cX1gLC4uLkcsY2hpbGRyZW46W0soInN1bW1hcnkiLHtjbGFzc05hbWU6YGxlbS10b2dnbGUgY3Vyc29yLXBvaW50ZXIgc2VsZWN0LW5vbmUgdGV4dC13aGl0ZS85MCBtaW4taC1bMzZweF0gbGVhZGluZy1ub25lIHB5LTIuNSBweC0xIC1teS0yIC1teC0xIHctW2NhbGMoMTAwJSs4cHgpXSAke1h9YCxjaGlsZHJlbjpbUSxLKG0yLHtvcGVuOiR9KV19KSxLKCJkaXYiLHtjbGFzc05hbWU6WSxjaGlsZHJlbjpafSldfSl9ZnVuY3Rpb24gZjUoe2xhYmVsOiQsdmFsdWU6SixvcHRpb25zOlEsZGlzYWJsZWQ6WixvbkNoYW5nZTpYLGNsYXNzTmFtZTpZfSl7bGV0W3EsR109VyghMSksVj1FKG51bGwpLEI9RShudWxsKSxbTix6XT1XKG51bGwpLEw9KCk9PntsZXQgSD1WLmN1cnJlbnQ/LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2lmKCFIKXJldHVybjt6KHt0b3A6SC5ib3R0b20rNCxsZWZ0OkgubGVmdCxtaW5XaWR0aDpILndpZHRofSl9O3cwKCgpPT57aWYocSlMKCl9LFtxXSksdzAoKCk9PntpZighcXx8IU4pcmV0dXJuO2xldCBIPUIuY3VycmVudDtpZighSClyZXR1cm47bGV0IGs9OCxGPXdpbmRvdy5pbm5lcldpZHRoLUgub2Zmc2V0V2lkdGgtaztpZihOLmxlZnQ+Ril6KHsuLi5OLGxlZnQ6TWF0aC5tYXgoayxGKX0pfSxbcSxOXSksYigoKT0+e2lmKCFxKXJldHVybjtsZXQgSD0oKT0+RyghMSksaz0odyk9PntsZXQgVD13LnRhcmdldDtpZighQi5jdXJyZW50Py5jb250YWlucyhUKSYmIVYuY3VycmVudD8uY29udGFpbnMoVCkpSCgpfSxGPSh3KT0+e2lmKCFCLmN1cnJlbnQ/LmNvbnRhaW5zKHcudGFyZ2V0KSlMKCl9O3JldHVybiB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIixrKSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigic2Nyb2xsIixGLCEwKSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigicmVzaXplIixIKSwoKT0+e3dpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZWRvd24iLGspLHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJzY3JvbGwiLEYsITApLHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJyZXNpemUiLEgpfX0sW3FdKTtsZXQgQz1FKCExKTtiKCgpPT57aWYoIXEpe0MuY3VycmVudD0hMTtyZXR1cm59aWYoIU58fEMuY3VycmVudClyZXR1cm47bGV0IEg9Qi5jdXJyZW50Py5xdWVyeVNlbGVjdG9yQWxsKCJbcm9sZT1vcHRpb25dIik7aWYoIUg/Lmxlbmd0aClyZXR1cm47Qy5jdXJyZW50PSEwO2xldCBrPVEuZmluZEluZGV4KChGKT0+Ri52YWx1ZT09PUopO0hbTWF0aC5tYXgoaywwKV0/LmZvY3VzKCl9LFtxLE4sUSxKXSk7bGV0IEE9KEgpPT57bGV0IGs9Wy4uLkIuY3VycmVudD8ucXVlcnlTZWxlY3RvckFsbCgiW3JvbGU9b3B0aW9uXSIpPz9bXV0sRj1rLmluZGV4T2YoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCk7aWYoSC5rZXk9PT0iQXJyb3dEb3duInx8SC5rZXk9PT0iQXJyb3dVcCIpe0gucHJldmVudERlZmF1bHQoKTtsZXQgdz1ILmtleT09PSJBcnJvd0Rvd24iP01hdGgubWluKEYrMSxrLmxlbmd0aC0xKTpNYXRoLm1heChGLTEsMCk7a1t3XT8uZm9jdXMoKX1lbHNlIGlmKEgua2V5PT09IkVzY2FwZSIpSC5wcmV2ZW50RGVmYXVsdCgpLEcoITEpLFYuY3VycmVudD8uZm9jdXMoKX0sVT1RLmZpbmQoKEgpPT5ILnZhbHVlPT09Sik7cmV0dXJuIEsoWjEse2NoaWxkcmVuOltLKCJidXR0b24iLHtyZWY6Vix0eXBlOiJidXR0b24iLCJhcmlhLWxhYmVsIjokLCJhcmlhLWhhc3BvcHVwIjoibGlzdGJveCIsImFyaWEtZXhwYW5kZWQiOnEsZGlzYWJsZWQ6WixvbkNsaWNrOigpPT5HKChIKT0+IUgpLGNsYXNzTmFtZTpgdGV4dC1sZWZ0IGZvbnQtW2luaGVyaXRdIGN1cnNvci1wb2ludGVyIGRpc2FibGVkOmN1cnNvci1kZWZhdWx0ICR7WT8/IiJ9YCxjaGlsZHJlbjpLKCJzcGFuIix7Y2xhc3NOYW1lOiJibG9jayB0cnVuY2F0ZSIsY2hpbGRyZW46VT8ubGFiZWw/P0p9KX0pLHEmJk4mJkIzKEsoImRpdiIse3JlZjpCLHJvbGU6Imxpc3Rib3giLCJhcmlhLWxhYmVsIjokLG9uS2V5RG93bjpBLHN0eWxlOnt0b3A6Ti50b3AsbGVmdDpOLmxlZnQsbWluV2lkdGg6Ti5taW5XaWR0aH0sY2xhc3NOYW1lOiJmaXhlZCBtYXgtaC05MCBvdmVyZmxvdy15LWF1dG8gYmctcGFuZWwgYm9yZGVyIGJvcmRlci13aGl0ZS8xMiByb3VuZGVkLVsxMHB4XSBwLTEgc2hhZG93LVswXzhweF8yNHB4X3JnYmEoMCwwLDAsMC41KV0gdGV4dC1bMTJweF0gdGV4dC13aGl0ZS85MCB6LTUwIixjaGlsZHJlbjpRLm1hcCgoSCk9PksoImJ1dHRvbiIse3R5cGU6ImJ1dHRvbiIscm9sZToib3B0aW9uIiwiYXJpYS1zZWxlY3RlZCI6SC52YWx1ZT09PUosb25DbGljazooKT0+e1goSC52YWx1ZSksRyghMSksVi5jdXJyZW50Py5mb2N1cygpfSxjbGFzc05hbWU6YGJsb2NrIHctZnVsbCB0ZXh0LWxlZnQgZm9udC1baW5oZXJpdF0gcHgtMi41IHB5LTEgcm91bmRlZC1tZCBjdXJzb3ItcG9pbnRlciB3aGl0ZXNwYWNlLW5vd3JhcCB0cmFuc2l0aW9uLWNvbG9ycyBob3ZlcjpiZy13aGl0ZS84IGZvY3VzLXZpc2libGU6Ymctd2hpdGUvOCBvdXRsaW5lLW5vbmUgJHtILnZhbHVlPT09Sj8idGV4dC1hY2NlbnQiOiIifWAsY2hpbGRyZW46SC5sYWJlbH0sSC52YWx1ZSkpfSksZG9jdW1lbnQuYm9keSldfSl9dmFyIGpKPTY1MCxsMz1bMSwyLDUsMjBdLHg2PTEwMDAsZDM9e3N0YXR1czoiaWRsZSIsYXJjOjAsZWxhcHNlZE1zOjB9O2Z1bmN0aW9uIG02KHt1ZGlkOiQsZXhlYzpKfSl7bGV0W1EsWl09VyghMSksW1gsWV09VyhzMFswXS5pZCksW3EsR109VyhzMFswXS5tb2RlKSxbVixCXT1XKDEpLFtOLHpdPVcoZDMpLFtMLENdPVcobnVsbCksQT1FMSgoKT0+czAuZmluZCgoYyk9PmMuaWQ9PT1YKT8/czBbMF0sW1hdKSxVPUUxKCgpPT5TNihBKSxbQV0pLEg9RSgwKSxrPUUoImlkbGUiKSxGPUUodTMocSkqViksdz1FKDApLFQ9RShVKSxTPUUobnVsbCk7YigoKT0+e0YuY3VycmVudD11MyhxKSpWfSxbcSxWXSk7bGV0IHg9RShudWxsKTtiKCgpPT57bGV0IGM9VC5jdXJyZW50LHY9SC5jdXJyZW50O2lmKFQuY3VycmVudD1VLGMmJmMhPT1VKXguY3VycmVudD1nSihjLHYsVSxwZXJmb3JtYW5jZS5ub3coKSk7SC5jdXJyZW50PTAsdy5jdXJyZW50PTAsay5jdXJyZW50PSJpZGxlIixTLmN1cnJlbnQ9bnVsbCx6KGQzKX0sW1VdKTtsZXQgJDE9RSgwKSxmPUUobnVsbCksaT1FKG51bGwpO2IoKCk9PntsZXQgYz0wLHY9KG4pPT57bGV0IFgxPWYuY3VycmVudCxMMT1YMT09bnVsbD8xNjpNYXRoLm1pbig2NCxuLVgxKTtpZihmLmN1cnJlbnQ9biwkMS5jdXJyZW50PSgkMS5jdXJyZW50K0wxKjAuMDAwMTIpJShNYXRoLlBJKjIpLGsuY3VycmVudD09PSJwbGF5aW5nIil7bGV0IFkxPUYuY3VycmVudCpMMS8xMDAwO0guY3VycmVudCs9WTEsdy5jdXJyZW50Kz1MMTtsZXQgSDE9VC5jdXJyZW50LnRvdGFsRGlzdGFuY2U7aWYoIVQuY3VycmVudC50cmFpbC5sb29wJiZILmN1cnJlbnQ+PUgxKUguY3VycmVudD1IMSxrLmN1cnJlbnQ9InBhdXNlZCIseih7c3RhdHVzOiJwYXVzZWQiLGFyYzpIMSxlbGFwc2VkTXM6dy5jdXJyZW50fSl9bGV0IEoxPWkuY3VycmVudDtpZihKMSl7bGV0IFkxPVQuY3VycmVudCxIMT1udWxsLHk9eC5jdXJyZW50O2lmKHkpe2xldCBnPShuLXkuc3RhcnRNcykvako7aWYoZz49MSl4LmN1cnJlbnQ9bnVsbDtlbHNle2xldCBQPXBKKGcpO1kxPWZKKHksUCksSDE9e3g6eS5wcmV2TWFya2VyLngrKHkubmV4dE1hcmtlci54LXkucHJldk1hcmtlci54KSpQLHk6eS5wcmV2TWFya2VyLnkrKHkubmV4dE1hcmtlci55LXkucHJldk1hcmtlci55KSpQLHo6eS5wcmV2TWFya2VyLnorKHkubmV4dE1hcmtlci56LXkucHJldk1hcmtlci56KSpQfX19dUooSjEsWTEsSC5jdXJyZW50LCQxLmN1cnJlbnQsbixrLmN1cnJlbnQ9PT0icGxheWluZyIsSDEpfWM9cmVxdWVzdEFuaW1hdGlvbkZyYW1lKHYpfTtyZXR1cm4gYz1yZXF1ZXN0QW5pbWF0aW9uRnJhbWUodiksKCk9PmNhbmNlbEFuaW1hdGlvbkZyYW1lKGMpfSxbXSksYigoKT0+e2xldCBjPXNldEludGVydmFsKCgpPT57aWYoay5jdXJyZW50PT09InBsYXlpbmciKXooe3N0YXR1czoicGxheWluZyIsYXJjOkguY3VycmVudCxlbGFwc2VkTXM6dy5jdXJyZW50fSl9LDI1MCk7cmV0dXJuKCk9PmNsZWFySW50ZXJ2YWwoYyl9LFtdKSxiKCgpPT57aWYoTi5zdGF0dXMhPT0icGxheWluZyIpcmV0dXJuO2xldCBjPSExLHY9MCxuPW51bGwsWDE9YXN5bmMoKT0+e2lmKGN8fG4pcmV0dXJuO2xldCBKMT1EYXRlLm5vdygpO2lmKEoxLXY8eDYpcmV0dXJuO3Y9SjE7bGV0IFkxPW4wKFQuY3VycmVudCxILmN1cnJlbnQpLEgxPWB4Y3J1biBzaW1jdGwgbG9jYXRpb24gJHskfSBzZXQgJHtZMS5sYXQudG9GaXhlZCg3KX0sJHtZMS5sbmcudG9GaXhlZCg3KX1gO249SihIMSkudGhlbigoeSk9PntpZihjKXJldHVybjtpZih5LmV4aXRDb2RlIT09MClDKGc2KHkuc3RkZXJyKXx8InNpbWN0bCBsb2NhdGlvbiBzZXQgZmFpbGVkIik7ZWxzZSBDKG51bGwpfSkuY2F0Y2goKHkpPT57aWYoIWMpQyh5IGluc3RhbmNlb2YgRXJyb3I/eS5tZXNzYWdlOlN0cmluZyh5KSl9KS5maW5hbGx5KCgpPT57bj1udWxsfSl9O1gxKCk7bGV0IEwxPXNldEludGVydmFsKFgxLHg2KTtyZXR1cm4oKT0+e2M9ITAsY2xlYXJJbnRlcnZhbChMMSl9fSxbTi5zdGF0dXMsJCxKXSk7bGV0IHI9RCgoKT0+e2lmKGsuY3VycmVudD09PSJwbGF5aW5nIil7ay5jdXJyZW50PSJwYXVzZWQiLHooKGMpPT4oey4uLmMsc3RhdHVzOiJwYXVzZWQifSkpO3JldHVybn1pZihILmN1cnJlbnQ+PVQuY3VycmVudC50b3RhbERpc3RhbmNlJiYhVC5jdXJyZW50LnRyYWlsLmxvb3ApSC5jdXJyZW50PTAsdy5jdXJyZW50PTA7aWYoUy5jdXJyZW50PT1udWxsKXtsZXQgYz1uMChULmN1cnJlbnQsSC5jdXJyZW50KTtTLmN1cnJlbnQ9e2xhdDpjLmxhdCxsbmc6Yy5sbmd9fWsuY3VycmVudD0icGxheWluZyIseigoYyk9Pih7Li4uYyxzdGF0dXM6InBsYXlpbmciLGFyYzpILmN1cnJlbnQsZWxhcHNlZE1zOncuY3VycmVudH0pKX0sW10pLGw9RCgoKT0+e2suY3VycmVudD0iaWRsZSIsSC5jdXJyZW50PTAsdy5jdXJyZW50PTAseihkMyk7bGV0IGM9Uy5jdXJyZW50O1MuY3VycmVudD1udWxsO2xldCB2PWM/YHhjcnVuIHNpbWN0bCBsb2NhdGlvbiAkeyR9IHNldCAke2MubGF0LnRvRml4ZWQoNyl9LCR7Yy5sbmcudG9GaXhlZCg3KX1gOmB4Y3J1biBzaW1jdGwgbG9jYXRpb24gJHskfSBjbGVhcmA7Sih2KS50aGVuKChuKT0+e2lmKG4uZXhpdENvZGUhPT0wKUMoZzYobi5zdGRlcnIpfHxudWxsKTtlbHNlIEMobnVsbCl9KX0sW0osJF0pLG89RCgoYyk9PntZKGMpO2xldCB2PXMwLmZpbmQoKG4pPT5uLmlkPT09Yyk7aWYodilHKHYubW9kZSl9LFtdKTtiKCgpPT4oKT0+e2lmKGsuY3VycmVudD09PSJpZGxlIilyZXR1cm47bGV0IGM9Uy5jdXJyZW50LHY9Yz9geGNydW4gc2ltY3RsIGxvY2F0aW9uICR7JH0gc2V0ICR7Yy5sYXQudG9GaXhlZCg3KX0sJHtjLmxuZy50b0ZpeGVkKDcpfWA6YHhjcnVuIHNpbWN0bCBsb2NhdGlvbiAkeyR9IGNsZWFyYDtKKHYpLmNhdGNoKCgpPT57fSl9LFtKLCRdKTtsZXQgUTE9Ti5zdGF0dXM9PT0icGxheWluZyIsTjE9UTE/YCR7bzMoTi5hcmMpfSDCtyAke2g2KE4uZWxhcHNlZE1zKX1gOm8zKFUudG90YWxEaXN0YW5jZSk7cmV0dXJuIEsoWDAse29wZW46USxvbk9wZW5DaGFuZ2U6WixzdW1tYXJ5Q2xhc3NOYW1lOiJncmlkIFtncmlkLXRlbXBsYXRlLWNvbHVtbnM6YXV0b19taW5tYXgoMCwxZnIpX2F1dG9dIFtjb250YWluZXItdHlwZTppbmxpbmUtc2l6ZV0gaXRlbXMtY2VudGVyIGdhcC0yIHRleHQtbGVmdCIsc3VtbWFyeTpLKFoxLHtjaGlsZHJlbjpbSygic3BhbiIse2NsYXNzTmFtZToidGV4dC1bMTFweF0gZm9udC1zZW1pYm9sZCB0ZXh0LXdoaXRlLzUwIHVwcGVyY2FzZSB0cmFja2luZy1bMC4wOGVtXSBsZWFkaW5nLW5vbmUgaW5saW5lLWZsZXggaXRlbXMtY2VudGVyIixjaGlsZHJlbjoiTG9jYXRpb24ifSksUT9LKCJzcGFuIix7ImRhdGEtbG9jYXRpb24tc3RhdHVzIjohMCxjbGFzc05hbWU6Im1pbi13LTAgdGV4dC1bMTFweF0gdGV4dC13aGl0ZS81NSBmb250LW1vbm8gaW5saW5lLWZsZXggaXRlbXMtY2VudGVyIGdhcC0xLjUganVzdGlmeS1zZWxmLWVuZCBsZWFkaW5nLW5vbmUgd2hpdGVzcGFjZS1ub3dyYXAgb3ZlcmZsb3ctaGlkZGVuIHRleHQtZWxsaXBzaXMgbWF4LXctZnVsbCIsY2hpbGRyZW46W0soInNwYW4iLHtjbGFzc05hbWU6InNpemUtMS41IHJvdW5kZWQtZnVsbCBzaHJpbmstMCBbdHJhbnNpdGlvbjpiYWNrZ3JvdW5kXzAuMnMsYm94LXNoYWRvd18wLjJzXSIsc3R5bGU6e2JhY2tncm91bmQ6UTE/IiM0YWRlODAiOlUudG90YWxEaXN0YW5jZT4wPyJyZ2JhKDI1NSwyNTUsMjU1LDAuMykiOiJ0cmFuc3BhcmVudCIsYm94U2hhZG93OlExPyIwIDAgNnB4IHJnYmEoNzQsMjIyLDEyOCwwLjcpIjoibm9uZSJ9fSksSygic3BhbiIse2NsYXNzTmFtZToibWluLXctMCBvdmVyZmxvdy1oaWRkZW4gdGV4dC1lbGxpcHNpcyIsY2hpbGRyZW46TjF9KSwhUTEmJksoInNwYW4iLHsiZGF0YS1sb2NhdGlvbi1zdGF0dXMtdG90YWwiOiEwLGNsYXNzTmFtZToic2hyaW5rLTAiLGNoaWxkcmVuOiJ0b3RhbCJ9KV19KTpLKCJzcGFuIix7fSldfSksY2hpbGRyZW46W0soImRpdiIse2NsYXNzTmFtZToiZmxleCBmbGV4LWNvbCBnYXAtMSIsY2hpbGRyZW46W0soImRpdiIse2NsYXNzTmFtZToicmVsYXRpdmUgYmxvY2siLGNoaWxkcmVuOltLKGY1LHtsYWJlbDoiVHJhaWwiLHZhbHVlOlgsb25DaGFuZ2U6byxvcHRpb25zOnMwLm1hcCgoYyk9Pih7dmFsdWU6Yy5pZCxsYWJlbDpjLm5hbWV9KSksY2xhc3NOYW1lOiJiZy13aGl0ZS9bMC4wNF0gYm9yZGVyIGJvcmRlci13aGl0ZS84IHJvdW5kZWQtbWQgdGV4dC13aGl0ZS85MCB0ZXh0LVsxMnB4XSBweS0xLjUgcHItWzI2cHhdIHBsLTIgdy1mdWxsIFt0cmFuc2l0aW9uOmJhY2tncm91bmRfMC4xMnMsYm9yZGVyLWNvbG9yXzAuMTJzXSBob3ZlcjpiZy13aGl0ZS9bMC4wN10gaG92ZXI6Ym9yZGVyLVtyZ2JhKDI1NSwyNTUsMjU1LDAuMTYpXSBmb2N1czpvdXRsaW5lLW5vbmUgZm9jdXM6Ymctd2hpdGUvWzAuMDhdIGZvY3VzOmJvcmRlci1bcmdiYSgyNTUsMjU1LDI1NSwwLjI0KV0ifSksSygic3BhbiIse2NsYXNzTmFtZToiYWJzb2x1dGUgcmlnaHQtWzlweF0gdG9wLTEvMiAtdHJhbnNsYXRlLXktMS8yIHBvaW50ZXItZXZlbnRzLW5vbmUgZmxleCBpdGVtcy1jZW50ZXIiLCJhcmlhLWhpZGRlbiI6InRydWUiLGNoaWxkcmVuOksobTIse29wZW46ITF9KX0pXX0pLEsoImRpdiIse2NsYXNzTmFtZToidGV4dC1bMTBweF0gdGV4dC13aGl0ZS80NSIsY2hpbGRyZW46QS5kZXNjcmlwdGlvbn0pXX0pLEsoImRpdiIse2NsYXNzTmFtZToicmVsYXRpdmUgdy1mdWxsIHJvdW5kZWQtWzEwcHhdIG92ZXJmbG93LWhpZGRlbiBiZy1bIzBhMGEwY10gYm9yZGVyIGJvcmRlci13aGl0ZS9bMC4wNl0gW2FzcGVjdC1yYXRpbzoxNi8xMV0iLGNoaWxkcmVuOltLKCJjYW52YXMiLHtyZWY6aSxjbGFzc05hbWU6InctZnVsbCBoLWZ1bGwgYmxvY2sifSksSyhSSix7cHJlcGFyZWQ6VX0pXX0pLEsoImRpdiIse2NsYXNzTmFtZToiZ3JpZCBbZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOjFmcl8xZnJfMWZyXSBnYXAtMS41IixjaGlsZHJlbjpbSyhjMyx7bGFiZWw6IkRpc3RhbmNlIix2YWx1ZTpvMyhOLmFyYyl9KSxLKGMzLHtsYWJlbDoiUGFjZSIsdmFsdWU6ZEooRi5jdXJyZW50KX0pLEsoYzMse2xhYmVsOiJFbGFwc2VkIix2YWx1ZTpoNihOLmVsYXBzZWRNcyl9KV19KSxLKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggZ2FwLTEuNSIsY2hpbGRyZW46W0soImJ1dHRvbiIse3R5cGU6ImJ1dHRvbiIsb25DbGljazpyLGNsYXNzTmFtZTpgZmxleC0xIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGdhcC0xLjUgcHktMiBweC0yLjUgYm9yZGVyLW5vbmUgcm91bmRlZC1bN3B4XSB0ZXh0LVsxMnB4XSBmb250LXNlbWlib2xkIGN1cnNvci1wb2ludGVyIGZvbnQtW2luaGVyaXRdICR7UTE/ImJnLXdoaXRlL1swLjE2XSB0ZXh0LXdoaXRlIGVuYWJsZWQ6aG92ZXI6Ymctd2hpdGUvWzAuMjJdIjoiYmctc3VjY2Vzcy1lbWVyYWxkIHRleHQtWyMwNjIwMThdIGVuYWJsZWQ6aG92ZXI6YnJpZ2h0bmVzcy1bMS4wOF0ifWAsImFyaWEtcHJlc3NlZCI6UTEsdGl0bGU6UTE/IlBhdXNlIjoiUGxheSIsY2hpbGRyZW46W1ExP0soVzMse30pOksoZjIse30pLEsoInNwYW4iLHtjaGlsZHJlbjpRMT8iUGF1c2UiOiJQbGF5In0pXX0pLEsoImJ1dHRvbiIse3R5cGU6ImJ1dHRvbiIsb25DbGljazpsLGNsYXNzTmFtZToiZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgZ2FwLTEuNSBweS0yIHB4LTMgYm9yZGVyIGJvcmRlci13aGl0ZS8xMiByb3VuZGVkLVs3cHhdIHRleHQtWzEycHhdIGZvbnQtbWVkaXVtIGJnLXRyYW5zcGFyZW50IHRleHQtd2hpdGUvODUgY3Vyc29yLXBvaW50ZXIgZm9udC1baW5oZXJpdF0gZW5hYmxlZDpob3ZlcjpiZy13aGl0ZS9bMC4wNl0gZW5hYmxlZDpob3Zlcjpib3JkZXItd2hpdGUvMjAgZW5hYmxlZDpob3Zlcjp0ZXh0LXdoaXRlIGRpc2FibGVkOm9wYWNpdHktNDAgZGlzYWJsZWQ6Y3Vyc29yLW5vdC1hbGxvd2VkIixkaXNhYmxlZDpOLnN0YXR1cz09PSJpZGxlIiYmTi5hcmM9PT0wLHRpdGxlOiJTdG9wIGFuZCBjbGVhciBzaW11bGF0ZWQgbG9jYXRpb24iLGNoaWxkcmVuOltLKHAyLHt9KSxLKCJzcGFuIix7Y2hpbGRyZW46IlN0b3AifSldfSldfSksSygiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGZsZXgtcm93IGl0ZW1zLXN0cmV0Y2ggZ2FwLTEuNSIsY2hpbGRyZW46W0soImRpdiIse2NsYXNzTmFtZToiZmxleC0xIG1pbi13LTAiLGNoaWxkcmVuOksoaEose2FyaWFMYWJlbDoiVHJhbnNwb3J0IG1vZGUiLHZhbHVlOnEsb25DaGFuZ2U6KGMpPT5HKGMpLG9wdGlvbnM6W3t2YWx1ZToid2FsayIsbGFiZWw6IldhbGsiLGljb246SyhfMyx7fSl9LHt2YWx1ZToicnVuIixsYWJlbDoiUnVuIixpY29uOksoRDMse30pfSx7dmFsdWU6ImN5Y2xlIixsYWJlbDoiQ3ljbGUiLGljb246SyhUMyx7fSl9LHt2YWx1ZToiZHJpdmUiLGxhYmVsOiJEcml2ZSIsaWNvbjpLKHczLHt9KX1dfSl9KSxLKCJidXR0b24iLHt0eXBlOiJidXR0b24iLG9uQ2xpY2s6KCk9PntsZXQgYz1sMy5pbmRleE9mKFYpLHY9bDNbKGMrMSklbDMubGVuZ3RoXTtCKHYpfSxjbGFzc05hbWU6YGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGdhcC0xIHB4LTIuNSBib3JkZXIgcm91bmRlZC1bN3B4XSBjdXJzb3ItcG9pbnRlciBmb250LVtpbmhlcml0XSB0ZXh0LVsxMXB4XSBmb250LXNlbWlib2xkIG1pbi13LVs1NnB4XSBhY3RpdmU6c2NhbGUtWzAuOTddICR7Vj4xPyJiZy13aGl0ZSBib3JkZXItd2hpdGUgdGV4dC1bIzBhMGEwY10gaG92ZXI6Ymctd2hpdGUvWzAuODhdIGhvdmVyOmJvcmRlci13aGl0ZS9bMC44OF0gaG92ZXI6dGV4dC1bIzBhMGEwY10iOiJiZy13aGl0ZS9bMC4wNF0gYm9yZGVyLXdoaXRlLzggdGV4dC13aGl0ZS84NSBob3ZlcjpiZy13aGl0ZS9bMC4wOV0gaG92ZXI6Ym9yZGVyLVtyZ2JhKDI1NSwyNTUsMjU1LDAuMTgpXSBob3Zlcjp0ZXh0LXdoaXRlIn1gLCJhcmlhLWxhYmVsIjpgU3BlZWQgJHtWfcOXIOKAlCB0YXAgdG8gY3ljbGVgLHRpdGxlOmBTcGVlZCAke1Z9w5cg4oCUIHRhcCB0byBjeWNsZWAsY2hpbGRyZW46W0soUDMse30pLFY+MSYmSygic3BhbiIse2NsYXNzTmFtZToiZm9udC1tb25vIFtmb250LXZhcmlhbnQtbnVtZXJpYzp0YWJ1bGFyLW51bXNdIixjaGlsZHJlbjpbViwiw5ciXX0pXX0pXX0pLEwmJksoImRpdiIse2NsYXNzTmFtZToiYmctZGFuZ2VyLzEwIGJvcmRlciBib3JkZXItZGFuZ2VyLzIwIHRleHQtZGFuZ2VyLXNvZnQgdGV4dC1bMTFweF0gcHgtMiBweS0xLjUgcm91bmRlZC1tZCIsY2hpbGRyZW46TH0pXX0pfXZhciBjMz1kMChmdW5jdGlvbih7bGFiZWw6Six2YWx1ZTpRfSl7cmV0dXJuIEsoImRpdiIse2NsYXNzTmFtZToiZmxleCBmbGV4LWNvbCBnYXAtMC41IGJnLXdoaXRlL1swLjAzXSBib3JkZXIgYm9yZGVyLXdoaXRlL1swLjA2XSByb3VuZGVkLW1kIHB5LVs1cHhdIHB4LVs3cHhdIG1pbi13LTAiLGNoaWxkcmVuOltLKCJkaXYiLHtjbGFzc05hbWU6InRleHQtWzlweF0gdXBwZXJjYXNlIHRyYWNraW5nLVswLjA2ZW1dIHRleHQtd2hpdGUvNDUiLGNoaWxkcmVuOkp9KSxLKCJkaXYiLHtjbGFzc05hbWU6InRleHQtWzEycHhdIGZvbnQtbW9ubyB0ZXh0LXdoaXRlIG92ZXJmbG93LWhpZGRlbiB0ZXh0LWVsbGlwc2lzIHdoaXRlc3BhY2Utbm93cmFwIixjaGlsZHJlbjpRfSldfSl9KTtmdW5jdGlvbiBoSih7dmFsdWU6JCxvbkNoYW5nZTpKLG9wdGlvbnM6USxhcmlhTGFiZWw6Wn0pe3JldHVybiBLKCJkaXYiLHtyb2xlOiJncm91cCIsImFyaWEtbGFiZWwiOlosY2xhc3NOYW1lOiJmbGV4IGJnLXdoaXRlL1swLjA0XSBib3JkZXIgYm9yZGVyLXdoaXRlLzggcm91bmRlZC1bN3B4XSBwLTAuNSBnYXAtMC41IixjaGlsZHJlbjpRLm1hcCgoWCk9PntsZXQgWT1YLnZhbHVlPT09JDtyZXR1cm4gSygiYnV0dG9uIix7dHlwZToiYnV0dG9uIixvbkNsaWNrOigpPT5KKFgudmFsdWUpLGNsYXNzTmFtZTpgZmxleC0xIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGJvcmRlci1ub25lIHJvdW5kZWQtWzVweF0gcHktWzVweF0gcHgtMiB0ZXh0LVsxMXB4XSBmb250LW1lZGl1bSBjdXJzb3ItcG9pbnRlciBmb250LVtpbmhlcml0XSBbdHJhbnNpdGlvbjpiYWNrZ3JvdW5kXzAuMTJzLGNvbG9yXzAuMTJzXSBtaW4taC1bMjJweF0gJHtZPyJiZy13aGl0ZS9bMC4xMl0gdGV4dC13aGl0ZSI6ImJnLXRyYW5zcGFyZW50IHRleHQtd2hpdGUvNjAgaG92ZXI6Ymctd2hpdGUvWzAuMDVdIGhvdmVyOnRleHQtd2hpdGUvOTAifWAsImFyaWEtcHJlc3NlZCI6WSwiYXJpYS1sYWJlbCI6WC5pY29uP1gubGFiZWw6dm9pZCAwLHRpdGxlOlguaWNvbj9YLmxhYmVsOnZvaWQgMCxjaGlsZHJlbjpYLmljb24/P1gubGFiZWx9LFgudmFsdWUpfSl9KX1mdW5jdGlvbiBSSih7cHJlcGFyZWQ6JH0pe2lmKCQucmF3TWF4QWx0LSQucmF3TWluQWx0PDUpcmV0dXJuIG51bGw7cmV0dXJuIEsoWjEse2NoaWxkcmVuOltLKCJkaXYiLHtjbGFzc05hbWU6ImFic29sdXRlIHRvcC0yIGxlZnQtMi41IGJnLXBhbmVsLW92ZXJsYXkgdGV4dC13aGl0ZS84NSB0ZXh0LVsxMHB4XSBmb250LW1vbm8gcHgtMS41IHB5LTAuNSByb3VuZGVkLVs1cHhdIGZsZXggaXRlbXMtY2VudGVyIHRyYWNraW5nLVswLjAyZW1dIGJvcmRlciBib3JkZXItd2hpdGUvWzAuMDZdIixjaGlsZHJlbjpbSyhQNSx7ZGlyOiJ1cCJ9KSwiICIsUjYoJC5yYXdNYXhBbHQpXX0pLEsoImRpdiIse2NsYXNzTmFtZToiYWJzb2x1dGUgdG9wLTIgcmlnaHQtMi41IGJnLXBhbmVsLW92ZXJsYXkgdGV4dC13aGl0ZS84NSB0ZXh0LVsxMHB4XSBmb250LW1vbm8gcHgtMS41IHB5LTAuNSByb3VuZGVkLVs1cHhdIGZsZXggaXRlbXMtY2VudGVyIHRyYWNraW5nLVswLjAyZW1dIGJvcmRlciBib3JkZXItd2hpdGUvWzAuMDZdIixjaGlsZHJlbjpbSyhQNSx7ZGlyOiJkb3duIn0pLCIgIixSNigkLnJhd01pbkFsdCldfSldfSl9dmFyIHY2PTE0MDtmdW5jdGlvbiBqNigkLEope2xldCBRPUFycmF5KEopO2ZvcihsZXQgWj0wO1o8SjtaKyspe2xldCBYPUo9PT0xPzA6Wi8oSi0xKSxZPW4wKCQsWCokLnRvdGFsRGlzdGFuY2UpO1FbWl09e3g6WS54LHk6WS55LHo6WS56fX1yZXR1cm4gUX1mdW5jdGlvbiBnSigkLEosUSxaKXtsZXQgWD0oJC5ib3VuZHMueFswXSskLmJvdW5kcy54WzFdKS8yLFk9KCQuYm91bmRzLnpbMF0rJC5ib3VuZHMuelsxXSkvMixxPSQuYm91bmRzLnlbMF0sRz1NYXRoLm1heCgxLCQuYm91bmRzLnhbMV0tJC5ib3VuZHMueFswXSwkLmJvdW5kcy56WzFdLSQuYm91bmRzLnpbMF0pLFY9KFEuYm91bmRzLnhbMF0rUS5ib3VuZHMueFsxXSkvMixCPShRLmJvdW5kcy56WzBdK1EuYm91bmRzLnpbMV0pLzIsTj1RLmJvdW5kcy55WzBdLEw9TWF0aC5tYXgoMSxRLmJvdW5kcy54WzFdLVEuYm91bmRzLnhbMF0sUS5ib3VuZHMuelsxXS1RLmJvdW5kcy56WzBdKS9HLEE9ajYoJCx2NikubWFwKCh4KT0+KHt4Oih4LngtWCkqTCtWLHk6KHgueS1xKSpMK04sejooeC56LVkpKkwrQn0pKSxVPWo2KFEsdjYpLEg9KCQudHJhaWwubG9vcHx8US50cmFpbC5sb29wKT8/ITEsaz1tSihBLFUsSCksRj1uMCgkLEopLHc9e3g6KEYueC1YKSpMK1YseTooRi55LXEpKkwrTix6OihGLnotWSkqTCtCfSxUPW4wKFEsMCksUz17eDpULngseTpULnksejpULnp9O3JldHVybntmcm9tOiQsdG86USxmcm9tUHRzOkEsdG9QdHM6ayxwcmV2TWFya2VyOncsbmV4dE1hcmtlcjpTLHN0YXJ0TXM6Wn19ZnVuY3Rpb24gbUooJCxKLFEpe2xldCBaPSQubGVuZ3RoLFg9MS8wLFk9MCxxPSExLEc9W0osWy4uLkpdLnJldmVyc2UoKV07Zm9yKGxldCBOPTA7TjxHLmxlbmd0aDtOKyspe2xldCB6PUdbTl0sTD1RP1o6MTtmb3IobGV0IEM9MDtDPEw7QysrKXtsZXQgQT0wO2ZvcihsZXQgVT0wO1U8WjtVKyspe2xldCBIPSRbVV0saz16WyhVK0MpJVpdLEY9SC54LWsueCx3PUgueS1rLnksVD1ILnotay56O2lmKEErPUYqRit3KncrVCpULEE+PVgpYnJlYWt9aWYoQTxYKVg9QSxZPUMscT1OPT09MX19bGV0IFY9cT9bLi4uSl0ucmV2ZXJzZSgpOkosQj1BcnJheShaKTtmb3IobGV0IE49MDtOPFo7TisrKUJbTl09VlsoTitZKSVaXTtyZXR1cm4gQn1mdW5jdGlvbiBmSigkLEope2xldCBRPSQuZnJvbVB0cy5sZW5ndGgsWj1BcnJheShRKSxYPTAsWT1udWxsLHE9MS8wLEc9LTEvMCxWPTEvMCxCPS0xLzAsTj0xLzAsej0tMS8wO2ZvcihsZXQgTD0wO0w8UTtMKyspe2xldCBDPSQuZnJvbVB0c1tMXSxBPSQudG9QdHNbTF0sVT1DLngrKEEueC1DLngpKkosSD1DLnkrKEEueS1DLnkpKkosaz1DLnorKEEuei1DLnopKko7aWYoWSl7bGV0IHc9VS1ZLngsVD1ILVkueSxTPWstWS56O1grPU1hdGguc3FydCh3KncrVCpUK1MqUyl9bGV0IEY9e3g6VSx5OkgsejprLGFyYzpYLGxhdDowLGxuZzowfTtpZihaW0xdPUYsWT1GLFU8cSlxPVU7aWYoVT5HKUc9VTtpZihIPFYpVj1IO2lmKEg+QilCPUg7aWYoazxOKU49aztpZihrPnopej1rfXJldHVybnt0cmFpbDokLnRvLnRyYWlsLG9yaWdpbjokLnRvLm9yaWdpbixwb2ludHM6Wix0b3RhbERpc3RhbmNlOlgsYm91bmRzOnt4OltxLEddLHk6W1YsQl0sejpbTix6XX0scmF3TWluQWx0OiQudG8ucmF3TWluQWx0KygkLmZyb20ucmF3TWluQWx0LSQudG8ucmF3TWluQWx0KSooMS1KKSxyYXdNYXhBbHQ6JC50by5yYXdNYXhBbHQrKCQuZnJvbS5yYXdNYXhBbHQtJC50by5yYXdNYXhBbHQpKigxLUopfX1mdW5jdGlvbiBwSigkKXtyZXR1cm4gJDwwLjU/MiokKiQ6MS1NYXRoLnBvdygtMiokKzIsMikvMn1mdW5jdGlvbiB1SigkLEosUSxaLFgsWSxxKXtsZXQgRz0kLmdldENvbnRleHQoIjJkIik7aWYoIUcpcmV0dXJuO2xldHtjbGllbnRXaWR0aDpWLGNsaWVudEhlaWdodDpCfT0kO2lmKFY9PT0wfHxCPT09MClyZXR1cm47bGV0IE49dHlwZW9mIHdpbmRvdzwidSI/d2luZG93LmRldmljZVBpeGVsUmF0aW98fDE6MSx6PU1hdGgucm91bmQoVipOKSxMPU1hdGgucm91bmQoQipOKTtpZigkLndpZHRoIT09enx8JC5oZWlnaHQhPT1MKSQud2lkdGg9eiwkLmhlaWdodD1MO0cuc2V0VHJhbnNmb3JtKE4sMCwwLE4sMCwwKSxHLmNsZWFyUmVjdCgwLDAsVixCKTtsZXQgQz1HLmNyZWF0ZVJhZGlhbEdyYWRpZW50KFYqMC41LEIqMC41NSxNYXRoLm1pbihWLEIpKjAuMixWKjAuNSxCKjAuNTUsTWF0aC5tYXgoVixCKSowLjg1KTtDLmFkZENvbG9yU3RvcCgwLCIjMWExYTFkIiksQy5hZGRDb2xvclN0b3AoMSwiIzBhMGEwYyIpLEcuZmlsbFN0eWxlPUMsRy5maWxsUmVjdCgwLDAsVixCKSxsSihHLFYsQik7bGV0e3BvaW50czpBLGJvdW5kczpVfT1KO2lmKEEubGVuZ3RoPDIpcmV0dXJuO2xldCBIPTI4Kk1hdGguUEkvMTgwLGs9TWF0aC5zaW4oSCksRj1NYXRoLmNvcyhIKSx3PU1hdGguc2luKFopLFQ9TWF0aC5jb3MoWiksUz0oVS54WzBdK1UueFsxXSkvMix4PShVLnpbMF0rVS56WzFdKS8yLCQxPVUueFsxXS1VLnhbMF0sZj1VLnpbMV0tVS56WzBdLGk9VS55WzFdLVUueVswXSxyPU1hdGgubWF4KCQxLGYpKjEuMDUsbD1NYXRoLm1heChmKkYraSprLCQxKjAuNCkqMS4xNSxvPVYqMC4wOCxRMT1CKjAuMTgsTjE9TWF0aC5taW4oKFYtbyoyKS9yLChCLVExKjIpL2wpKjEuNDUsYz1pPDE/MTpNYXRoLm1pbigyNCwxNDAvTWF0aC5tYXgoMjAsaSkpLHY9KHksZyxQKT0+e2xldCBwPXktUyx1PVAteCxqPXAqVCt1KncsRzE9LXAqdyt1KlQsejE9ZypjLE0xPXoxKkYtRzEqayxXMT16MSprK0cxKkY7cmV0dXJue3N4OlYvMitqKk4xLHN5OkIqMC41NS1NMSpOMSxkZXB0aDpXMX19LG49MzgsWDE9QS5tYXAoKHkpPT57bGV0IGc9dih5LngseS55LHkueiksUD12KHkueCwwLHkueikscD17c3g6Zy5zeCxzeTpNYXRoLm1heChQLnN5LGcuc3krbiksZGVwdGg6UC5kZXB0aH07cmV0dXJue3A6eSx0b3A6Zyxib3Q6cH19KTtmb3IobGV0IHk9MTt5PFgxLmxlbmd0aDt5Kyspe2xldCBnPVgxW3ktMV0sUD1YMVt5XSxwPUcuY3JlYXRlTGluZWFyR3JhZGllbnQoKGcudG9wLnN4K1AudG9wLnN4KS8yLChnLnRvcC5zeStQLnRvcC5zeSkvMiwoZy5ib3Quc3grUC5ib3Quc3gpLzIsKGcuYm90LnN5K1AuYm90LnN5KS8yKTtwLmFkZENvbG9yU3RvcCgwLCJyZ2JhKDI1NSwyNTUsMjU1LDAuNTUpIikscC5hZGRDb2xvclN0b3AoMC40NSwicmdiYSgxODAsMTgwLDE4NSwwLjI4KSIpLHAuYWRkQ29sb3JTdG9wKDAuODUsInJnYmEoNDAsNDAsNDUsMC4xOCkiKSxwLmFkZENvbG9yU3RvcCgxLCJyZ2JhKDAsMCwwLDApIiksRy5maWxsU3R5bGU9cCxHLmJlZ2luUGF0aCgpLEcubW92ZVRvKGcudG9wLnN4LGcudG9wLnN5KSxHLmxpbmVUbyhQLnRvcC5zeCxQLnRvcC5zeSksRy5saW5lVG8oUC5ib3Quc3gsUC5ib3Quc3kpLEcubGluZVRvKGcuYm90LnN4LGcuYm90LnN5KSxHLmNsb3NlUGF0aCgpLEcuZmlsbCgpfUcuc3Ryb2tlU3R5bGU9IiNmZmZmZmYiLEcubGluZVdpZHRoPTEuNixHLmxpbmVDYXA9InJvdW5kIixHLmxpbmVKb2luPSJyb3VuZCIsRy5iZWdpblBhdGgoKTtmb3IobGV0IHk9MDt5PFgxLmxlbmd0aDt5Kyspe2xldHt0b3A6Z309WDFbeV07aWYoeT09PTApRy5tb3ZlVG8oZy5zeCxnLnN5KTtlbHNlIEcubGluZVRvKGcuc3gsZy5zeSl9Ry5zdHJva2UoKTtsZXQgTDE9UTtHLnN0cm9rZVN0eWxlPSIjZjlkMmE0IixHLmxpbmVXaWR0aD0yLjIsRy5iZWdpblBhdGgoKTtsZXQgSjE9ITE7Zm9yKGxldCB5PTA7eTxYMS5sZW5ndGg7eSsrKXtsZXR7cDpnLHRvcDpQfT1YMVt5XTtpZihnLmFyYz5MMSlicmVhaztpZighSjEpRy5tb3ZlVG8oUC5zeCxQLnN5KSxKMT0hMDtlbHNlIEcubGluZVRvKFAuc3gsUC5zeSl9aWYoSjEpRy5zdHJva2UoKTtsZXQgWTE9cT8/bjAoSixRKSxIMT12KFkxLngsWTEueSxZMS56KTtpZihZKXtsZXQgUD1YJTI2MDAvMjYwMCxwPTQrMjIqUCx1PTAuMjIqKDEtUCksaj1HLmNyZWF0ZVJhZGlhbEdyYWRpZW50KEgxLnN4LEgxLnN5LHAqMC41LEgxLnN4LEgxLnN5LHApO2ouYWRkQ29sb3JTdG9wKDAsInJnYmEoMjU1LDI1NSwyNTUsMCkiKSxqLmFkZENvbG9yU3RvcCgwLjcsYHJnYmEoMjU1LDI1NSwyNTUsJHt1LnRvRml4ZWQoMyl9KWApLGouYWRkQ29sb3JTdG9wKDEsInJnYmEoMjU1LDI1NSwyNTUsMCkiKSxHLmZpbGxTdHlsZT1qLEcuYmVnaW5QYXRoKCksRy5hcmMoSDEuc3gsSDEuc3kscCwwLE1hdGguUEkqMiksRy5maWxsKCl9Ry5maWxsU3R5bGU9IiNmZmYiLEcuYmVnaW5QYXRoKCksRy5hcmMoSDEuc3gsSDEuc3ksMy44LDAsTWF0aC5QSSoyKSxHLmZpbGwoKX1mdW5jdGlvbiBsSigkLEosUSl7JC5maWxsU3R5bGU9InJnYmEoMjU1LDI1NSwyNTUsMC4wNikiO2ZvcihsZXQgWT03O1k8UTtZKz0xNClmb3IobGV0IHE9NztxPEo7cSs9MTQpJC5iZWdpblBhdGgoKSwkLmFyYyhxLFksMC43LDAsTWF0aC5QSSoyKSwkLmZpbGwoKX1mdW5jdGlvbiBvMygkKXtpZigkPDEwMDApcmV0dXJuYCR7JC50b0ZpeGVkKDApfSBtYDtyZXR1cm5gJHsoJC8xMDAwKS50b0ZpeGVkKDIpfSBrbWB9ZnVuY3Rpb24gaDYoJCl7bGV0IEo9TWF0aC5mbG9vcigkLzEwMDApLFE9TWF0aC5mbG9vcihKLzM2MDApLFo9TWF0aC5mbG9vcihKJTM2MDAvNjApLFg9SiU2MDtpZihRPjApcmV0dXJuYCR7UX06JHtaLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwiMCIpfToke1gudG9TdHJpbmcoKS5wYWRTdGFydCgyLCIwIil9YDtyZXR1cm5gJHtafToke1gudG9TdHJpbmcoKS5wYWRTdGFydCgyLCIwIil9YH1mdW5jdGlvbiBkSigkKXtpZigkPD0wKXJldHVybiLigJQiO2lmKCQ+NylyZXR1cm5gJHsoJCozLjYpLnRvRml4ZWQoMCl9IGttL2hgO2xldCBKPTEwMDAvJCxRPU1hdGguZmxvb3IoSi82MCksWj1NYXRoLnJvdW5kKEolNjApO3JldHVybmAke1F9OiR7Wi50b1N0cmluZygpLnBhZFN0YXJ0KDIsIjAiKX0va21gfWZ1bmN0aW9uIFI2KCQpe3JldHVybmAkeyQudG9GaXhlZCgwKX0gbWB9ZnVuY3Rpb24gZzYoJCl7bGV0IEo9JC50cmltKCk7aWYoIUopcmV0dXJuIiI7bGV0IFE9Si5tYXRjaCgvUmVhc29uOlxzKiguKykkL20pO2lmKFEpcmV0dXJuIFFbMV07cmV0dXJuIEouc3BsaXQoYApgKS5zbGljZSgtMSlbMF0/P0p9YXN5bmMgZnVuY3Rpb24gcjMoJCxKLFEpe2xldCBaPWF3YWl0ICQoYHhjcnVuIHNpbWN0bCBnZXRfYXBwX2NvbnRhaW5lciAke0p9ICR7TzEoUSl9IGFwcGApO2lmKFouZXhpdENvZGUhPT0wKXJldHVybntlcnJvcjpaLnN0ZGVyci50cmltKCl8fCJBcHAgbm90IGZvdW5kIG9uIHNpbXVsYXRvciJ9O2xldCBYPVouc3Rkb3V0LnRyaW0oKTtpZighWClyZXR1cm57ZXJyb3I6IkVtcHR5IGFwcCBwYXRoIn07bGV0IFk9YXdhaXQgJChgcGx1dGlsIC1jb252ZXJ0IGpzb24gLW8gLSAke08xKFgrIi9JbmZvLnBsaXN0Iil9YCkscT17fTtpZihZLmV4aXRDb2RlPT09MCl0cnl7cT1KU09OLnBhcnNlKFkuc3Rkb3V0KX1jYXRjaHt9bGV0IEcsQj0ocT8uQ0ZCdW5kbGVJY29ucz8uQ0ZCdW5kbGVQcmltYXJ5SWNvbj8/cT8uWyJDRkJ1bmRsZUljb25zfmlwYWQiXT8uQ0ZCdW5kbGVQcmltYXJ5SWNvbik/LkNGQnVuZGxlSWNvbkZpbGVzPz9xPy5DRkJ1bmRsZUljb25GaWxlcztpZihCJiZCLmxlbmd0aD4wKUc9QltCLmxlbmd0aC0xXTtlbHNlIGlmKHR5cGVvZiBxPy5DRkJ1bmRsZUljb25GaWxlPT09InN0cmluZyIpRz1xLkNGQnVuZGxlSWNvbkZpbGU7bGV0IE49bnVsbDtpZihHKXtsZXQgej1bYCR7R31AM3gucG5nYCxgJHtHfUAyeC5wbmdgLGAke0d9LnBuZ2AsYCR7R302MHg2MEAzeC5wbmdgLGAke0d9NjB4NjBAMngucG5nYF0sQz0oYXdhaXQgJChgYmFzaCAtYyAke08xKHoubWFwKChBKT0+YFsgLWYgJHtPMShYKyIvIitBKX0gXSAmJiBlY2hvICR7TzEoWCsiLyIrQSl9ICYmIGV4aXQgMGApLmpvaW4oIjsgIikrIjsgZXhpdCAxIil9YCkpLnN0ZG91dC50cmltKCk7aWYoQyl7bGV0IEE9YXdhaXQgJChgYmFzZTY0IC1pICR7TzEoQyl9YCk7aWYoQS5leGl0Q29kZT09PTApTj1gZGF0YTppbWFnZS9wbmc7YmFzZTY0LCR7QS5zdGRvdXQucmVwbGFjZSgvXHMrL2csIiIpfWB9fXJldHVybnthcHBQYXRoOlgsZGlzcGxheU5hbWU6cS5DRkJ1bmRsZURpc3BsYXlOYW1lPz9xLkNGQnVuZGxlTmFtZSxzaG9ydFZlcnNpb246cS5DRkJ1bmRsZVNob3J0VmVyc2lvblN0cmluZyxidW5kbGVWZXJzaW9uOnEuQ0ZCdW5kbGVWZXJzaW9uLG1pbk9TOnEuTWluaW11bU9TVmVyc2lvbixleGVjdXRhYmxlOnEuQ0ZCdW5kbGVFeGVjdXRhYmxlLGljb25EYXRhVXJsOk59fXZhciBDMj1uZXcgTWFwO2Z1bmN0aW9uIGY2KCQsSixRKXtsZXQgWj1gJHtKfToke1F9YCxYPUMyLmdldChaKTtpZihYIT09dm9pZCAwKXJldHVybiBQcm9taXNlLnJlc29sdmUoWCk7bGV0IFk9cjMoJCxKLFEpLnRoZW4oKHEpPT57bGV0IEc9cS5pY29uRGF0YVVybD8/bnVsbDtyZXR1cm4gQzIuc2V0KFosRyksR30pLmNhdGNoKCgpPT57cmV0dXJuIEMyLnNldChaLG51bGwpLG51bGx9KTtyZXR1cm4gQzIuc2V0KFosWSksWX1mdW5jdGlvbiBjSigkKXtyZXR1cm4gJC5zdGFydHNXaXRoKCJjb20uYXBwbGUuIil9ZnVuY3Rpb24gb0ooJCl7aWYoJD09PSJjb20uYXBwbGUuc3ByaW5nYm9hcmQiKXJldHVybiJTcHJpbmdCb2FyZCI7cmV0dXJuICR9ZnVuY3Rpb24gckooe2J1bmRsZUlkOiR9KXtsZXQgSj1jSigkKTtyZXR1cm4gSygiZGl2Iix7ImRhdGEtdGVzdGlkIjpKPyJzeXN0ZW0tYXBwLWljb24iOiJhcHAtaWNvbi1mYWxsYmFjayIsY2xhc3NOYW1lOmB3LTEwIGgtMTAgcm91bmRlZC1bOHB4XSBzaHJpbmstMCBib3JkZXIgZ3JpZCBwbGFjZS1pdGVtcy1jZW50ZXIgJHtKPyJib3JkZXItWyMzYjVmOTldIGJnLVtsaW5lYXItZ3JhZGllbnQoMTQ1ZGVnLCMyNTNhNWYsIzE2MjEzMildIHRleHQtWyNjOGQ3ZmZdIjoiYm9yZGVyLXdoaXRlLzEwIGJnLXdoaXRlL1swLjA2XSB0ZXh0LXdoaXRlLzgwIn1gLCJhcmlhLWxhYmVsIjpKPyJTeXN0ZW0gYXBwIjoiQXBwIGljb24gdW5hdmFpbGFibGUiLHRpdGxlOko/IlN5c3RlbSBhcHAiOiJBcHAgaWNvbiB1bmF2YWlsYWJsZSIsY2hpbGRyZW46Sj9LKCJzdmciLHtyb2xlOiJpbWciLHZpZXdCb3g6IjAgMCAyNCAyNCIseG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIixjbGFzc05hbWU6InNpemUtWzE5cHhdIixmaWxsOiJjdXJyZW50Q29sb3IiLGNoaWxkcmVuOltLKCJ0aXRsZSIse2NoaWxkcmVuOiJBcHBsZSJ9KSxLKCJwYXRoIix7ZDoiTTEyLjE1MiA2Ljg5NmMtLjk0OCAwLTIuNDE1LTEuMDc4LTMuOTYtMS4wNC0yLjA0LjAyNy0zLjkxIDEuMTgzLTQuOTYxIDMuMDE0LTIuMTE3IDMuNjc1LS41NDYgOS4xMDMgMS41MTkgMTIuMDkgMS4wMTMgMS40NTQgMi4yMDggMy4wOSAzLjc5MiAzLjAzOSAxLjUyLS4wNjUgMi4wOS0uOTg3IDMuOTM1LS45ODcgMS44MzEgMCAyLjM1Ljk4NyAzLjk2Ljk0OCAxLjYzNy0uMDI2IDIuNjc2LTEuNDggMy42NzYtMi45NDggMS4xNTYtMS42ODggMS42MzYtMy4zMjUgMS42NjItMy40MTUtLjAzOS0uMDEzLTMuMTgyLTEuMjIxLTMuMjItNC44NTctLjAyNi0zLjA0IDIuNDgtNC40OTQgMi41OTctNC41NTktMS40MjktMi4wOS0zLjYyMy0yLjMyNC00LjM5LTIuMzc2LTItLjE1Ni0zLjY3NSAxLjA5LTQuNjEgMS4wOXpNMTUuNTMgMy44M2MuODQzLTEuMDEyIDEuNC0yLjQyNyAxLjI0NS0zLjgzLTEuMjA3LjA1Mi0yLjY2Mi44MDUtMy41MzIgMS44MTgtLjc4Ljg5Ni0xLjQ1NCAyLjMzOC0xLjI3MyAzLjcxNCAxLjMzOC4xMDQgMi43MTUtLjY4OCAzLjU1OS0xLjcwMSJ9KV19KTpLKFQyLHtzaXplOjE5LHN0cm9rZVdpZHRoOjEuOX0pfSl9ZnVuY3Rpb24gaUooe2J1bmRsZUlkOiQsaWNvbkRhdGFVcmw6Sn0pe2lmKEopcmV0dXJuIEsoImltZyIse3NyYzpKLGNsYXNzTmFtZToidy0xMCBoLTEwIHJvdW5kZWQtWzhweF0gc2hyaW5rLTAgb2JqZWN0LWNvdmVyIGJvcmRlciBib3JkZXItd2hpdGUvOCIsYWx0OiIifSk7cmV0dXJuIEsockose2J1bmRsZUlkOiR9KX1mdW5jdGlvbiBwNih7dWRpZDokLGN1cnJlbnRBcHA6Sn0pe2xldFtRLFpdPVcobnVsbCksW1gsWV09VyghMSk7aWYoYigoKT0+e2lmKCFKKXtaKG51bGwpO3JldHVybn1sZXQgcT0hMTtyZXR1cm4gWih7YnVuZGxlSWQ6Si5idW5kbGVJZCxpc1JlYWN0TmF0aXZlOkouaXNSZWFjdE5hdGl2ZSxwaWQ6Si5waWQsbG9hZGluZzohMH0pLHIzKEkxLCQsSi5idW5kbGVJZCkudGhlbigoRyk9PntpZihxKXJldHVybjtaKHtidW5kbGVJZDpKLmJ1bmRsZUlkLGlzUmVhY3ROYXRpdmU6Si5pc1JlYWN0TmF0aXZlLHBpZDpKLnBpZCxsb2FkaW5nOiExLC4uLkd9KX0pLCgpPT57cT0hMH19LFskLEosSj8uYnVuZGxlSWQsSj8ucGlkLEo/LmlzUmVhY3ROYXRpdmVdKSwhUSlyZXR1cm4gSyhhSix7fSk7cmV0dXJuIEsoWDAse29wZW46WCxvbk9wZW5DaGFuZ2U6WSxzdW1tYXJ5Q2xhc3NOYW1lOiJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMyB0ZXh0LWxlZnQiLHN1bW1hcnk6SyhaMSx7Y2hpbGRyZW46W0soaUose2J1bmRsZUlkOlEuYnVuZGxlSWQsaWNvbkRhdGFVcmw6US5pY29uRGF0YVVybH0pLEsobkose2J1bmRsZUlkOlEuYnVuZGxlSWQsZGlzcGxheU5hbWU6US5kaXNwbGF5TmFtZX0pXX0pLGNoaWxkcmVuOltRLmVycm9yJiZLKCJkaXYiLHtjbGFzc05hbWU6ImJnLWRhbmdlci8xMCBib3JkZXIgYm9yZGVyLWRhbmdlci8yMCB0ZXh0LWRhbmdlci1zb2Z0IHRleHQtWzExcHhdIHB4LTIgcHktMS41IHJvdW5kZWQtbWQiLGNoaWxkcmVuOlEuZXJyb3J9KSxLKCJkbCIse2NsYXNzTmFtZToibS0wIGZsZXggZmxleC1jb2wgZ2FwLTEuNSIsY2hpbGRyZW46W0soVTIse2xhYmVsOiJWZXJzaW9uIix2YWx1ZTpRLnNob3J0VmVyc2lvbj9gJHtRLnNob3J0VmVyc2lvbn0gKCR7US5idW5kbGVWZXJzaW9uPz8i4oCUIn0pYDpRLmxvYWRpbmc/IuKApiI6IuKAlCJ9KSxLKFUyLHtsYWJlbDoiTWluIGlPUyIsdmFsdWU6US5taW5PUz8/KFEubG9hZGluZz8i4oCmIjoi4oCUIil9KSxLKFUyLHtsYWJlbDoiRXhlY3V0YWJsZSIsdmFsdWU6US5leGVjdXRhYmxlPz8oUS5sb2FkaW5nPyLigKYiOiLigJQiKX0pLEsoVTIse2xhYmVsOiJQSUQiLHZhbHVlOlEucGlkIT1udWxsP1N0cmluZyhRLnBpZCk6IuKAlCJ9KSxRLmlzUmVhY3ROYXRpdmUmJksoVTIse2xhYmVsOiJSZWFjdCBOYXRpdmUiLHZhbHVlOiJZZXMifSksSyhVMix7bGFiZWw6IkFwcCBwYXRoIix2YWx1ZTpRLmFwcFBhdGg/PyhRLmxvYWRpbmc/IuKApiI6IuKAlCIpLG1vbm86ITAsYWN0aW9uOlEuYXBwUGF0aD97dGl0bGU6IlJldmVhbCBpbiBGaW5kZXIiLG9uQ2xpY2s6KCk9PntJMShgb3BlbiAtUiAke08xKFEuYXBwUGF0aCl9YCl9LGljb246Syh3Mix7c2l6ZToxMSxzdHJva2VXaWR0aDoyLjJ9KX06dm9pZCAwfSldfSldfSl9ZnVuY3Rpb24gYUooKXtyZXR1cm4gSygiZGl2Iix7ImRhdGEtdGVzdGlkIjoiYXBwLWRldGVjdGlvbi1za2VsZXRvbiIsY2xhc3NOYW1lOiJiZy1wYW5lbCByb3VuZGVkLVsxMHB4XSBweC0zIHB5LTIiLCJhcmlhLWxhYmVsIjoiV2FpdGluZyBmb3IgZm9yZWdyb3VuZCBhcHAiLGNoaWxkcmVuOksoImRpdiIse2NsYXNzTmFtZToiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTMgdGV4dC1sZWZ0IG1pbi1oLVszNnB4XSBsZWFkaW5nLW5vbmUgcHktMi41IHB4LTEgLW15LTIgLW14LTEgdy1bY2FsYygxMDAlKzhweCldIixjaGlsZHJlbjpbSygic3BhbiIse2NsYXNzTmFtZToidy0xMCBoLTEwIHJvdW5kZWQtWzhweF0gc2hyaW5rLTAgYmctd2hpdGUvWzAuMDhdIn0pLEsoInNwYW4iLHtjbGFzc05hbWU6Im1pbi13LTAgZmxleC0xIGZsZXggZmxleC1jb2wgZ2FwLTIiLGNoaWxkcmVuOltLKCJzcGFuIix7Y2xhc3NOYW1lOiJoLTMuNSB3LVs0NiVdIHJvdW5kZWQtZnVsbCBiZy13aGl0ZS9bMC4xMl0ifSksSygic3BhbiIse2NsYXNzTmFtZToiaC0yLjUgdy1bNjglXSByb3VuZGVkLWZ1bGwgYmctd2hpdGUvWzAuMDhdIn0pXX0pLEsoInNwYW4iLHtjbGFzc05hbWU6InctMi41IGgtMi41IHJvdW5kZWQtZnVsbCBiZy13aGl0ZS9bMC4wOF0ifSldfSl9KX1mdW5jdGlvbiBuSih7YnVuZGxlSWQ6JCxkaXNwbGF5TmFtZTpKfSl7cmV0dXJuIEsoImRpdiIse2NsYXNzTmFtZToibWluLXctMCBmbGV4LTEgbGVhZGluZy10aWdodCB0ZXh0LWxlZnQiLGNoaWxkcmVuOltLKCJkaXYiLHtjbGFzc05hbWU6InRleHQtWzEzcHhdIGZvbnQtc2VtaWJvbGQgdGV4dC13aGl0ZS85MCB0cnVuY2F0ZSIsY2hpbGRyZW46Sj8/b0ooJCl9KSxLKCJkaXYiLHtjbGFzc05hbWU6InRleHQtWzExcHhdIHRleHQtd2hpdGUvNTUgZm9udC1tb25vIHRydW5jYXRlIix0aXRsZTokLGNoaWxkcmVuOiR9KV19KX1mdW5jdGlvbiBVMih7bGFiZWw6JCx2YWx1ZTpKLG1vbm86USxhY3Rpb246Wn0pe3JldHVybiBLKCJkaXYiLHtjbGFzc05hbWU6Imdyb3VwIGZsZXggaXRlbXMtYmFzZWxpbmUgZ2FwLTIgbWluLXctMCIsY2hpbGRyZW46W0soImR0Iix7Y2xhc3NOYW1lOiJtLTAgdGV4dC1bMTFweF0gdGV4dC13aGl0ZS81MCB3LTIxIHNocmluay0wIixjaGlsZHJlbjokfSksSygiZGQiLHtjbGFzc05hbWU6YG0tMCB0ZXh0LXdoaXRlLzkwIGZsZXgtMSBtaW4tdy0wIG92ZXJmbG93LWhpZGRlbiB0ZXh0LWVsbGlwc2lzIHdoaXRlc3BhY2Utbm93cmFwIHJlbGF0aXZlICR7UT8iZm9udC1tb25vIHRleHQtWzExcHhdIjoidGV4dC1bMTJweF0ifWAsdGl0bGU6SixjaGlsZHJlbjpbSixaJiZLKCJkaXYiLHtjbGFzc05hbWU6ImFic29sdXRlIHRvcC0wIHJpZ2h0LTAgYm90dG9tLTAgcGwtNyBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWVuZCBiZy1bbGluZWFyLWdyYWRpZW50KHRvX3JpZ2h0LHJnYmEoMjgsMjgsMzAsMClfMCUsIzFjMWMxZV81NSUpXSBbdHJhbnNpdGlvbjpvcGFjaXR5XzAuMTVzX2Vhc2UsdHJhbnNmb3JtXzAuMTVzX2Vhc2VdIG9wYWNpdHktMCB0cmFuc2xhdGUteC0xIHBvaW50ZXItZXZlbnRzLW5vbmUgZ3JvdXAtaG92ZXI6b3BhY2l0eS0xMDAgZ3JvdXAtaG92ZXI6dHJhbnNsYXRlLXgtMCBncm91cC1ob3Zlcjpwb2ludGVyLWV2ZW50cy1hdXRvIixjaGlsZHJlbjpLKCJidXR0b24iLHt0eXBlOiJidXR0b24iLG9uQ2xpY2s6Wi5vbkNsaWNrLHRpdGxlOloudGl0bGUsImFyaWEtbGFiZWwiOloudGl0bGUsY2xhc3NOYW1lOiJ3LTUgaC01IGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGJnLXRyYW5zcGFyZW50IGJvcmRlci1ub25lIHJvdW5kZWQgdGV4dC13aGl0ZSBjdXJzb3ItcG9pbnRlciBwLTAiLGNoaWxkcmVuOlouaWNvbn0pfSldfSldfSl9dmFyIHU2PVt7a2V5OiJjYW1lcmEiLGxhYmVsOiJDYW1lcmEifSx7a2V5OiJtaWNyb3Bob25lIixsYWJlbDoiTWljcm9waG9uZSJ9LHtrZXk6InBob3RvcyIsbGFiZWw6IlBob3RvcyJ9LHtrZXk6InBob3Rvcy1hZGQiLGxhYmVsOiJBZGQgdG8gUGhvdG9zIn0se2tleToiY29udGFjdHMiLGxhYmVsOiJDb250YWN0cyJ9LHtrZXk6ImNhbGVuZGFyIixsYWJlbDoiQ2FsZW5kYXIifSx7a2V5OiJyZW1pbmRlcnMiLGxhYmVsOiJSZW1pbmRlcnMifSx7a2V5OiJsb2NhdGlvbiIsbGFiZWw6IkxvY2F0aW9uIn0se2tleToibG9jYXRpb24tYWx3YXlzIixsYWJlbDoiTG9jYXRpb24gKEFsd2F5cykifSx7a2V5OiJub3RpZmljYXRpb25zIixsYWJlbDoiTm90aWZpY2F0aW9ucyJ9LHtrZXk6Im1vdGlvbiIsbGFiZWw6Ik1vdGlvbiJ9LHtrZXk6Im1lZGlhLWxpYnJhcnkiLGxhYmVsOiJNZWRpYSBMaWJyYXJ5In0se2tleToic2lyaSIsbGFiZWw6IlNpcmkifV07ZnVuY3Rpb24gbDYoe3VkaWQ6JCxidW5kbGVJZDpKfSl7bGV0W1EsWl09Vyh7fSksW1gsWV09VyhudWxsKSxbcSxHXT1XKG51bGwpLFtWLEJdPVcoITEpLE49RTEoKCk9PntsZXQgQz10eXBlb2Ygd2luZG93PiJ1Ij92b2lkIDA6d2luZG93Ll9fU0lNX1BSRVZJRVdfXz8uc2VydmVTaW1CaW47aWYoIUMpcmV0dXJuInNlcnZlLXNpbSI7aWYoL1wudHMkLy50ZXN0KEMpKXJldHVybmBidW4gJHtPMShDKX1gO2lmKC9cLmpzJC8udGVzdChDKSlyZXR1cm5gbm9kZSAke08xKEMpfWA7cmV0dXJuIE8xKEMpfSxbXSk7YigoKT0+e1ooe30pLEcobnVsbCl9LFtKXSk7bGV0IHo9RChhc3luYyhDLEEpPT57aWYoIUopcmV0dXJuO2xldCBVPWAke0N9OiR7QX1gO1koVSksRyhudWxsKTt0cnl7bGV0IEg9YXdhaXQgSTEoYCR7Tn0gcGVybWlzc2lvbnMgJHtBfSAke0N9ICR7TzEoSil9IC1kICR7TzEoJCl9YCk7aWYoSC5leGl0Q29kZSE9PTApe0coSC5zdGRlcnIudHJpbSgpfHxgc2VydmUtc2ltIHBlcm1pc3Npb25zIGZhaWxlZCAoZXhpdCAke0guZXhpdENvZGV9KWApO3JldHVybn1aKChrKT0+KHsuLi5rLFtDXTpBPT09InJlc2V0Ij92b2lkIDA6QX0pKX1maW5hbGx5e1kobnVsbCl9fSxbTiwkLEpdKSxMPUQoYXN5bmMoKT0+e2lmKCFKKXJldHVybjtZKCJfX2FsbF9fIiksRyhudWxsKTt0cnl7bGV0IEM9YXdhaXQgSTEoYCR7Tn0gcGVybWlzc2lvbnMgcmVzZXQgYWxsICR7TzEoSil9IC1kICR7TzEoJCl9YCk7aWYoQy5leGl0Q29kZSE9PTApe0coQy5zdGRlcnIudHJpbSgpfHxgc2VydmUtc2ltIHBlcm1pc3Npb25zIGZhaWxlZCAoZXhpdCAke0MuZXhpdENvZGV9KWApO3JldHVybn1aKHt9KX1maW5hbGx5e1kobnVsbCl9fSxbTiwkLEpdKTtpZighSilyZXR1cm4gSyhzSix7fSk7cmV0dXJuIEsoWDAse29wZW46Vixvbk9wZW5DaGFuZ2U6QixzdW1tYXJ5Q2xhc3NOYW1lOiJncmlkIFtncmlkLXRlbXBsYXRlLWNvbHVtbnM6YXV0b18xZnJfYXV0b10gaXRlbXMtY2VudGVyIGdhcC0yIHRleHQtbGVmdCIsc3VtbWFyeTpLKFoxLHtjaGlsZHJlbjpbSygic3BhbiIse2NsYXNzTmFtZToidGV4dC1bMTFweF0gZm9udC1zZW1pYm9sZCB0ZXh0LXdoaXRlLzUwIHVwcGVyY2FzZSB0cmFja2luZy1bMC4wOGVtXSBsZWFkaW5nLW5vbmUgaW5saW5lLWZsZXggaXRlbXMtY2VudGVyIixjaGlsZHJlbjoiUGVybWlzc2lvbnMifSksSygic3BhbiIse30pXX0pLGNoaWxkcmVuOltxJiZLKCJkaXYiLHtjbGFzc05hbWU6ImJnLWRhbmdlci8xMCBib3JkZXIgYm9yZGVyLWRhbmdlci8yMCB0ZXh0LWRhbmdlci1zb2Z0IHRleHQtWzExcHhdIHB4LTIgcHktMS41IHJvdW5kZWQtbWQiLGNoaWxkcmVuOnF9KSxLKCJkaXYiLHtjbGFzc05hbWU6InJlbGF0aXZlIixjaGlsZHJlbjpbSygiZGl2Iix7Y2xhc3NOYW1lOiJtYXgtaC1bMjYwcHhdIG92ZXJmbG93LXktYXV0byBmbGV4IGZsZXgtY29sIGdhcC0xIHB5LTIgW3Njcm9sbGJhci13aWR0aDp0aGluXSIsY2hpbGRyZW46dTYubWFwKCh7a2V5OkMsbGFiZWw6QX0pPT57bGV0IFU9UVtDXTtyZXR1cm4gSygiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gZ2FwLTIgcHgtMC41IHB5LTEiLGNoaWxkcmVuOltLKCJzcGFuIix7Y2xhc3NOYW1lOiJ0ZXh0LVsxMnB4XSB0ZXh0LXdoaXRlLzkwIG92ZXJmbG93LWhpZGRlbiB0ZXh0LWVsbGlwc2lzIHdoaXRlc3BhY2Utbm93cmFwIGZsZXgtMSBtaW4tdy0wIixjaGlsZHJlbjpBfSksSygiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGdhcC0wLjUgYmctd2hpdGUvWzAuMDRdIGJvcmRlciBib3JkZXItd2hpdGUvOCByb3VuZGVkLW1kIHAtMC41Iixyb2xlOiJncm91cCIsImFyaWEtbGFiZWwiOkEsY2hpbGRyZW46W0soaTMse2FjdGl2ZTpVPT09ImdyYW50IixwZW5kaW5nOlg9PT1gJHtDfTpncmFudGAsb25DbGljazooKT0+eihDLCJncmFudCIpLHZhcmlhbnQ6ImdyYW50Iix0aXRsZToiQWxsb3ciLGNoaWxkcmVuOksoRTIse3NpemU6MTEsc3Ryb2tlV2lkdGg6M30pfSksSyhpMyx7YWN0aXZlOlU9PT0icmV2b2tlIixwZW5kaW5nOlg9PT1gJHtDfTpyZXZva2VgLG9uQ2xpY2s6KCk9PnooQywicmV2b2tlIiksdmFyaWFudDoicmV2b2tlIix0aXRsZToiRGVueSIsY2hpbGRyZW46SyhHMCx7c2l6ZToxMSxzdHJva2VXaWR0aDozfSl9KSxLKGkzLHthY3RpdmU6ITEscGVuZGluZzpYPT09YCR7Q306cmVzZXRgLG9uQ2xpY2s6KCk9PnooQywicmVzZXQiKSx2YXJpYW50OiJyZXNldCIsdGl0bGU6IlJlc2V0IixjaGlsZHJlbjpLKHIwLHtzaXplOjExLHN0cm9rZVdpZHRoOjIuNH0pfSldfSldfSxDKX0pfSksSygiZGl2Iix7Y2xhc3NOYW1lOiJhYnNvbHV0ZSB0b3AtMCBsZWZ0LTAgcmlnaHQtMCBoLVsxNHB4XSBwb2ludGVyLWV2ZW50cy1ub25lIHJvdW5kZWQtdC1bMTBweF0gYmctW2xpbmVhci1ncmFkaWVudCh0b19ib3R0b20sIzFjMWMxZV8wJSxyZ2JhKDI4LDI4LDMwLDApXzEwMCUpXSJ9KSxLKCJkaXYiLHtjbGFzc05hbWU6ImFic29sdXRlIGJvdHRvbS0wIGxlZnQtMCByaWdodC0wIGgtWzE0cHhdIHBvaW50ZXItZXZlbnRzLW5vbmUgYmctW2xpbmVhci1ncmFkaWVudCh0b190b3AsIzFjMWMxZV8wJSxyZ2JhKDI4LDI4LDMwLDApXzEwMCUpXSJ9KV19KSxLKCJkaXYiLHtjbGFzc05hbWU6ImZsZXgganVzdGlmeS1lbmQiLGNoaWxkcmVuOksoImJ1dHRvbiIse29uQ2xpY2s6TCxkaXNhYmxlZDpYPT09Il9fYWxsX18iLGNsYXNzTmFtZToiYmctdHJhbnNwYXJlbnQgYm9yZGVyIGJvcmRlci13aGl0ZS8xMiB0ZXh0LXdoaXRlLzcwIHRleHQtWzEwcHhdIHB4LTIgcHktWzNweF0gcm91bmRlZC1bNXB4XSBjdXJzb3ItcG9pbnRlciB1cHBlcmNhc2UgdHJhY2tpbmctWzAuMDRlbV0iLHRpdGxlOiJzZXJ2ZS1zaW0gcGVybWlzc2lvbnMgcmVzZXQgYWxsIixjaGlsZHJlbjpYPT09Il9fYWxsX18iPyLigKYiOiJSZXNldCBhbGwifSl9KV19KX1mdW5jdGlvbiBzSigpe3JldHVybiBLKCJkaXYiLHsiZGF0YS10ZXN0aWQiOiJhcHAtcGVybWlzc2lvbnMtbG9hZGluZyIsY2xhc3NOYW1lOiJiZy1wYW5lbCByb3VuZGVkLVsxMHB4XSBweC0zIHB5LTIiLCJhcmlhLWRpc2FibGVkIjoidHJ1ZSIsImFyaWEtYnVzeSI6InRydWUiLGNoaWxkcmVuOksoImRpdiIse2NsYXNzTmFtZToic2VsZWN0LW5vbmUgdGV4dC13aGl0ZS81NSBtaW4taC1bMzZweF0gbGVhZGluZy1ub25lIHB5LTIuNSBweC0xIC1teS0yIC1teC0xIHctW2NhbGMoMTAwJSs4cHgpXSBncmlkIFtncmlkLXRlbXBsYXRlLWNvbHVtbnM6YXV0b18xZnJfYXV0b10gaXRlbXMtY2VudGVyIGdhcC0yIHRleHQtbGVmdCBjdXJzb3ItZGVmYXVsdCIsY2hpbGRyZW46W0soInNwYW4iLHtjbGFzc05hbWU6InRleHQtWzExcHhdIGZvbnQtc2VtaWJvbGQgdXBwZXJjYXNlIHRyYWNraW5nLVswLjA4ZW1dIGxlYWRpbmctbm9uZSBpbmxpbmUtZmxleCBpdGVtcy1jZW50ZXIiLGNoaWxkcmVuOiJQZXJtaXNzaW9ucyJ9KSxLKCJzcGFuIix7fSksSygic3BhbiIseyJkYXRhLXRlc3RpZCI6InBlcm1pc3Npb25zLWxvYWRpbmctaW5kaWNhdG9yIixyb2xlOiJzdGF0dXMiLCJhcmlhLWxhYmVsIjoiTG9hZGluZyBwZXJtaXNzaW9ucyIsY2xhc3NOYW1lOiJzaXplLTIuNSByb3VuZGVkLWZ1bGwgYm9yZGVyIGJvcmRlci1bIzVmNjI2OF0gYm9yZGVyLXQtWyNmNGY0ZjVdIGFuaW1hdGUtW2dyaWQtc3Bpbl8wLjdzX2xpbmVhcl9pbmZpbml0ZV0ifSldfSl9KX1mdW5jdGlvbiBpMyh7YWN0aXZlOiQscGVuZGluZzpKLG9uQ2xpY2s6USx2YXJpYW50OlosdGl0bGU6WCxjaGlsZHJlbjpZfSl7bGV0IHE9Wj09PSJncmFudCI/IiM0YWRlODAiOlo9PT0icmV2b2tlIj8iI2Y4NzE3MSI6IiNhNWI0ZmMiO3JldHVybiBLKCJidXR0b24iLHtvbkNsaWNrOlEsZGlzYWJsZWQ6Six0aXRsZTpYLCJhcmlhLWxhYmVsIjpYLGNsYXNzTmFtZToidy02IGgtNS41IGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGJvcmRlci1ub25lIHJvdW5kZWQgcC0wIGN1cnNvci1wb2ludGVyIFt0cmFuc2l0aW9uOmJhY2tncm91bmRfMC4xMnMsY29sb3JfMC4xMnNdIixzdHlsZTp7YmFja2dyb3VuZDokP2Ake3F9MjJgOiJ0cmFuc3BhcmVudCIsY29sb3I6JD9xOiJyZ2JhKDI1NSwyNTUsMjU1LDAuNTUpIixvcGFjaXR5Oko/MC41OjF9LGNoaWxkcmVuOll9KX1mdW5jdGlvbiBwNSh7bGFiZWw6JCxjaGVja2VkOkosZGlzYWJsZWQ6UT0hMSxvbkNoYW5nZTpafSl7cmV0dXJuIEsoImJ1dHRvbiIse3R5cGU6ImJ1dHRvbiIscm9sZToic3dpdGNoIiwiYXJpYS1jaGVja2VkIjpKLCJhcmlhLWxhYmVsIjokLGRpc2FibGVkOlEsb25DbGljazooKT0+WighSiksY2xhc3NOYW1lOmByZWxhdGl2ZSBoLVsxOHB4XSB3LTggc2hyaW5rLTAgcm91bmRlZC1mdWxsIGJvcmRlci1ub25lIHAtMCBbdHJhbnNpdGlvbjpiYWNrZ3JvdW5kXzAuMTVzXSAke1E/ImN1cnNvci1kZWZhdWx0IGJnLXdoaXRlLzIwIjpKPyJjdXJzb3ItcG9pbnRlciBiZy1bIzBhODRmZl0iOiJjdXJzb3ItcG9pbnRlciBiZy13aGl0ZS8yMCJ9YCxjaGlsZHJlbjpLKCJzcGFuIix7Y2xhc3NOYW1lOmBhYnNvbHV0ZSB0b3AtWzJweF0gc2l6ZS1bMTRweF0gcm91bmRlZC1mdWxsIFt0cmFuc2l0aW9uOmxlZnRfMC4xNXNdICR7UT8iYmctd2hpdGUvNTAiOiJiZy13aGl0ZSJ9YCxzdHlsZTp7bGVmdDpKPzE2OjJ9fSl9KX12YXIgdEo9ImJnLXBhbmVsIHJvdW5kZWQtWzEwcHhdIixlSj0idGV4dC1bMTFweF0gZm9udC1zZW1pYm9sZCB0ZXh0LXdoaXRlLzUwIHVwcGVyY2FzZSB0cmFja2luZy1bMC4wOGVtXSBtLTAiO2Z1bmN0aW9uIGM2KHtvdmVybGF5RW5hYmxlZDokLG9uVG9nZ2xlT3ZlcmxheTpKfSl7bGV0e3NuYXBzaG90OlF9PUIyKCkse2hpZ2hsaWdodGVkS2V5Olosc2V0SGlnaGxpZ2h0ZWRLZXk6WH09dzUoKSxZPVE/LmVsZW1lbnRzPz9bXSxxPV81KFEpLEc9UT8uZXJyb3JzPy5bMF0/P251bGw7cmV0dXJuIEsoImRpdiIse2NsYXNzTmFtZTpgJHt0Sn0gcHgtMyBweS0yYCxjaGlsZHJlbjpbSygiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gZ2FwLTIiLGNoaWxkcmVuOltLKCJzcGFuIix7Y2xhc3NOYW1lOmVKLGNoaWxkcmVuOiJBWCBUcmVlIn0pLEsocDUse2xhYmVsOiJFbmFibGUgb3ZlcmxheSIsY2hlY2tlZDokLG9uQ2hhbmdlOkp9KV19KSwhJD9udWxsOnE/SyhkNix7Y2hpbGRyZW46IkFYIHVuYXZhaWxhYmxlIG9uIHRoaXMgc2ltdWxhdG9yLiJ9KTpZLmxlbmd0aD09PTA/SyhkNix7c3Bpbm5lcjohRyxjaGlsZHJlbjpHPz8iV2FpdGluZyBmb3IgYWNjZXNzaWJpbGl0eSBkYXRh4oCmIn0pOksoImRpdiIse2NsYXNzTmFtZToiZmxleCBmbGV4LWNvbCBnYXAtMSBtdC0yIHB5LTIgbWF4LWgtWzI2MHB4XSBvdmVyZmxvdy15LWF1dG8gW3Njcm9sbGJhci13aWR0aDp0aGluXSIscm9sZToibGlzdCIsY2hpbGRyZW46WS5tYXAoKFYsQik9PntsZXQgTj1pMChWKTtyZXR1cm4gSygkUSx7ZWxlbWVudDpWLGluZGV4OkIsYWN0aXZlOk49PT1aLG9uSGlnaGxpZ2h0Olh9LE4pfSl9KV19KX1mdW5jdGlvbiBkNih7Y2hpbGRyZW46JCxzcGlubmVyOko9ITF9KXtyZXR1cm4gSygiZGl2Iix7cm9sZToic3RhdHVzIiwiYXJpYS1saXZlIjoicG9saXRlIixjbGFzc05hbWU6Im10LTIgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgZ2FwLTIgcHktNCB0ZXh0LVsxMnB4XSB0ZXh0LXdoaXRlLzQ1IixjaGlsZHJlbjpbSj9LKCJzcGFuIix7ImFyaWEtaGlkZGVuIjoidHJ1ZSIsY2xhc3NOYW1lOiJzaXplLTMuNSBzaHJpbmstMCByb3VuZGVkLWZ1bGwgYm9yZGVyLTIgYm9yZGVyLXdoaXRlLzIwIGJvcmRlci10LXdoaXRlLzYwIGFuaW1hdGUtW2dyaWQtc3Bpbl8wLjhzX2xpbmVhcl9pbmZpbml0ZV0ifSk6bnVsbCxLKCJzcGFuIix7Y2hpbGRyZW46JH0pXX0pfXZhciAkUT1kMChmdW5jdGlvbih7ZWxlbWVudDpKLGluZGV4OlEsYWN0aXZlOlosb25IaWdobGlnaHQ6WH0pe2xldCBZPWkwKEopLHE9VDUoSixRKSxHPWAke01hdGgucm91bmQoSi5mcmFtZS53aWR0aCl9eCR7TWF0aC5yb3VuZChKLmZyYW1lLmhlaWdodCl9YCxWPVtxLmxhYmVsLHEucm9sZXx8cS50eXBlfHwiZWxlbWVudCIsR10uZmlsdGVyKEJvb2xlYW4pLmpvaW4oIiDCtyAiKTtyZXR1cm4gSygiZGl2Iix7cm9sZToibGlzdGl0ZW0iLHRhYkluZGV4OjAsImRhdGEtYXgta2V5IjpZLHRpdGxlOlYsb25Nb3VzZUVudGVyOigpPT5YKFkpLG9uTW91c2VMZWF2ZTooKT0+WChudWxsKSxvbkZvY3VzOigpPT5YKFkpLG9uQmx1cjooKT0+WChudWxsKSxjbGFzc05hbWU6YGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiBnYXAtMiByb3VuZGVkLW1kIHB5LTEgcHgtMC41IG1pbi13LTAgJHtaPyJiZy13aGl0ZS9bMC4wNl0iOiIifWAsY2hpbGRyZW46W0soInNwYW4iLHtjbGFzc05hbWU6ImZsZXggZmxleC1jb2wgZ2FwLTAuNSBmbGV4LTEgbWluLXctMCIsY2hpbGRyZW46W0soInNwYW4iLHtjbGFzc05hbWU6Im92ZXJmbG93LWhpZGRlbiB0ZXh0LWVsbGlwc2lzIHdoaXRlc3BhY2Utbm93cmFwIHRleHQtd2hpdGUvOTAgdGV4dC1bMTJweF0gZm9udC1tZWRpdW0iLGNoaWxkcmVuOkoubGFiZWx8fEoucm9sZXx8IlVubGFiZWxlZCJ9KSxLKCJzcGFuIix7Y2xhc3NOYW1lOiJvdmVyZmxvdy1oaWRkZW4gdGV4dC1lbGxpcHNpcyB3aGl0ZXNwYWNlLW5vd3JhcCB0ZXh0LXdoaXRlLzQ1IGZvbnQtbW9ubyB0ZXh0LVsxMHB4XSIsY2hpbGRyZW46Si5yb2xlfHxKLnR5cGV8fCJlbGVtZW50In0pXX0pLEsoImNvZGUiLHtjbGFzc05hbWU6InNocmluay0wIGJnLXdoaXRlL1swLjA0XSBib3JkZXIgYm9yZGVyLXdoaXRlLzggcm91bmRlZC1tZCB0ZXh0LXdoaXRlLzU1IGZvbnQtbW9ubyB0ZXh0LVsxMHB4XSBweC0xLjUgcHktWzNweF0iLGNoaWxkcmVuOkd9KV19KX0sKCQsSik9PiQuaW5kZXg9PT1KLmluZGV4JiYkLmFjdGl2ZT09PUouYWN0aXZlJiYkLm9uSGlnaGxpZ2h0PT09Si5vbkhpZ2hsaWdodCYmRDUoJC5lbGVtZW50LEouZWxlbWVudCkpO3ZhciBKUT1uZXcgU2V0KFsiaW1hZ2UvanBlZyIsImltYWdlL3BuZyIsImltYWdlL2dpZiIsImltYWdlL2hlaWMiLCJpbWFnZS9oZWlmIiwiaW1hZ2Uvd2VicCIsInZpZGVvL21wNCIsInZpZGVvL3F1aWNrdGltZSJdKSxhMz0xOTY2MDgsbzY9NTI0Mjg4MDAwLHU1PSJhcHBsaWNhdGlvbi94LXNlcnZlLXNpbS1ob3N0LXBhdGgiO2FzeW5jIGZ1bmN0aW9uIHI2KCQsSixRKXtsZXQgWj1hd2FpdCBKKGB4Y3J1biBzaW1jdGwgYWRkbWVkaWEgJHtRfSAke08xKCQpfWApO2lmKFouZXhpdENvZGUhPT0wKXRocm93IEVycm9yKFouc3RkZXJyfHxgYWRkbWVkaWEgZmFpbGVkIChleGl0ICR7Wi5leGl0Q29kZX0pYCl9ZnVuY3Rpb24gSDIoJCl7bGV0IEo9JC5uYW1lLFE9Si5sYXN0SW5kZXhPZigiLiIpO2lmKFE+PTApcmV0dXJuIEouc2xpY2UoUSsxKS50b0xvd2VyQ2FzZSgpO2lmKCQudHlwZS5zdGFydHNXaXRoKCJ2aWRlby8iKSlyZXR1cm4ibXA0IjtyZXR1cm4ianBnIn1mdW5jdGlvbiBpNigkKXtpZihIMigkKT09PSJpcGEiKXJldHVybiJpcGEiO2lmKEpRLmhhcygkLnR5cGUpKXJldHVybiJtZWRpYSI7cmV0dXJuIG51bGx9ZnVuY3Rpb24gUVEoJCl7bGV0IEo9bmV3IFVpbnQ4QXJyYXkoJCksUT0iIjtmb3IobGV0IFo9MDtaPEoubGVuZ3RoO1orPTMyNzY4KVErPVN0cmluZy5mcm9tQ2hhckNvZGUoLi4uSi5zdWJhcnJheShaLForMzI3NjgpKTtyZXR1cm4gYnRvYShRKX1hc3luYyBmdW5jdGlvbiBhNigkLEosUSxaKXtsZXQgWD0wO2ZvcihsZXQgWT0wO1k8JC5zaXplO1krPWEzKXtsZXQgcT1hd2FpdCAkLnNsaWNlKFksWSthMykuYXJyYXlCdWZmZXIoKSxHPVFRKHEpLEI9YXdhaXQgUShgYmFzaCAtYyAnZWNobyAke0d9IHwgYmFzZTY0IC1kICR7WT09PTA/Ij4iOiI+PiJ9ICR7Sn0nYCk7aWYoQi5leGl0Q29kZSE9PTApdGhyb3cgRXJyb3IoQi5zdGRlcnJ8fGBXcml0ZSBmYWlsZWQgKGV4aXQgJHtCLmV4aXRDb2RlfSlgKTtpZighWiljb250aW51ZTtsZXQgTj1NYXRoLm1pbihZK2EzLCQuc2l6ZSksej1NYXRoLmZsb29yKE4vJC5zaXplKjEwMCk7aWYoeiE9PVgpWD16LFooTi8kLnNpemUpfX1hc3luYyBmdW5jdGlvbiBuNigkLEosUSxaKXtpZigkLnNpemU+bzYpdGhyb3cgRXJyb3IoIkZpbGUgdG9vIGxhcmdlIChtYXggNTAwTUIpIik7bGV0IFg9YC90bXAvJHtKfS0ke2NyeXB0by5yYW5kb21VVUlEKCl9LiR7UX1gO3JldHVybiBhd2FpdCBhNigkLFgsWiksWH1hc3luYyBmdW5jdGlvbiBzNigkLEosUSxaLFgpe2lmKCQuc2l6ZT5vNil0aHJvdyBFcnJvcigiRmlsZSB0b28gbGFyZ2UgKG1heCA1MDBNQikiKTtsZXQgWT1KPT09ImlwYSI/ImlwYSI6SDIoJCksRz1gL3RtcC8ke0o9PT0iaXBhIj8ic2VydmUtc2ltLWluc3RhbGwiOiJzZXJ2ZS1zaW0tdXBsb2FkIn0tJHtjcnlwdG8ucmFuZG9tVVVJRCgpfS4ke1l9YDt0cnl7WCgwKSxhd2FpdCBhNigkLEcsUSxYKSxYKG51bGwpO2xldCBWPUo9PT0iaXBhIj9geGNydW4gc2ltY3RsIGluc3RhbGwgJHtafSAke0d9YDpgeGNydW4gc2ltY3RsIGFkZG1lZGlhICR7Wn0gJHtHfWAsQj1hd2FpdCBRKFYpO2lmKEIuZXhpdENvZGUhPT0wKXtsZXQgTj1KPT09ImlwYSI/Imluc3RhbGwiOiJhZGRtZWRpYSI7dGhyb3cgRXJyb3IoQi5zdGRlcnJ8fGAke059IGZhaWxlZCAoZXhpdCAke0IuZXhpdENvZGV9KWApfX1maW5hbGx5e1EoYGJhc2ggLWMgJ3JtIC1mICR7R30nYCkuY2F0Y2goKCk9Pnt9KX19dmFyIFpRPTMwMDA7YXN5bmMgZnVuY3Rpb24gS1EoJCxKPWZldGNoKXt0cnl7bGV0IFE9YXdhaXQgSigkLHtjYWNoZToibm8tc3RvcmUifSk7aWYoIVEub2spcmV0dXJuIG51bGw7bGV0IFo9YXdhaXQgUS5qc29uKCk7cmV0dXJuIFomJnR5cGVvZiBaPT09Im9iamVjdCImJiFBcnJheS5pc0FycmF5KFopP1o6bnVsbH1jYXRjaHtyZXR1cm4gbnVsbH19dmFyIFhRPTIwOTcxNTIwMCxZUT0iTGFyZ2UgdmlkZW8gKD4yMDAgTUIpIOKAlCBtYXkgc3R1dHRlciBvbiBzaGFyZWQgbWVtb3J5IixlNj0iSEVJQyBkZWNvZGUgZmFpbGVkIOKAlCBleHBvcnQgYXMgSlBFRyBvciBQTkcgYW5kIHJldHJ5IjtmdW5jdGlvbiBxUSgkLEope2lmKEopcmV0dXJuImFjdGl2ZSI7aWYoJD09PSJhY3RpdmUiKXJldHVybiJkaXNjb25uZWN0ZWQiO2lmKCQ9PT0iZGlzY29ubmVjdGVkIilyZXR1cm4icmVhZHkiO3JldHVybiAkfWZ1bmN0aW9uIEdRKCQpe2lmKCEkLmluamVjdGVkKXJldHVybiJwbGF5IjtpZigkLnNvdXJjZT09PSJwbGFjZWhvbGRlciIpcmV0dXJuInBsYXkiO2lmKCQuYnVuZGxlSWQmJiEkLmZvcmVncm91bmRJc0luamVjdGVkKXJldHVybiJhdHRhY2giO3JldHVybiJzdG9wIn1mdW5jdGlvbiBWUSgkKXtyZXR1cm4gJC5zcGxpdChgCmApLm1hcCgoSik9PkoudHJpbSgpKS5maWx0ZXIoQm9vbGVhbikuZmxhdE1hcCgoSik9PntsZXQgUT1KLmluZGV4T2YoIlx0Iik7aWYoUTw9MClyZXR1cm5bXTtsZXQgWj1KLnNsaWNlKDAsUSkudHJpbSgpLFg9Si5zbGljZShRKzEpLnRyaW0oKTtpZighWnx8IVgpcmV0dXJuW107cmV0dXJuW3tpZDpaLG5hbWU6WH1dfSl9dmFyIEJRPW5ldyBTZXQoWyJtcDQiLCJtNHYiLCJtb3YiLCJxdCIsImF2aSIsIm1rdiIsIndlYm0iLCJtcGciLCJtcGVnIiwiM2dwIiwiM2cyIiwidHMiLCJ3bXYiXSk7ZnVuY3Rpb24gJDQoJCl7aWYoJC50eXBlJiYkLnR5cGUuc3RhcnRzV2l0aCgidmlkZW8vIikpcmV0dXJuITA7bGV0IEo9KCQubmFtZT8/IiIpLnRvTG93ZXJDYXNlKCksUT1KLmxhc3RJbmRleE9mKCIuIik7aWYoUTwwKXJldHVybiExO3JldHVybiBCUS5oYXMoSi5zbGljZShRKzEpKX1mdW5jdGlvbiBOUSgkKXtyZXR1cm4gJDQoJCkmJiQuc2l6ZT5YUX1mdW5jdGlvbiBMUSgkKXtsZXQgSj0oJC50eXBlPz8iIikudG9Mb3dlckNhc2UoKTtpZihKPT09ImltYWdlL2hlaWMifHxKPT09ImltYWdlL2hlaWYiKXJldHVybiEwO2xldCBRPSgkLm5hbWU/PyIiKS50b0xvd2VyQ2FzZSgpO3JldHVybiBRLmVuZHNXaXRoKCIuaGVpYyIpfHxRLmVuZHNXaXRoKCIuaGVpZiIpfWZ1bmN0aW9uIHpRKHtyYXdNZXNzYWdlOiQsbGFzdEZpbGVJc0hlaWM6Sixzb3VyY2U6UX0pe2lmKEomJihRPT09ImltYWdlInx8UT09PSJ2aWRlbyIpKXJldHVybiBlNjtyZXR1cm4gJH1mdW5jdGlvbiBDUSh7c3RhdGU6JH0pe2xldCBKPSQ9PT0iYWN0aXZlIj8iQWN0aXZlIjokPT09ImRpc2Nvbm5lY3RlZCI/IkRpc2Nvbm5lY3RlZCI6IlJlYWR5IixRPSQ9PT0iYWN0aXZlIj8ic2l6ZS0xLjUgcm91bmRlZC1mdWxsIGJnLXN1Y2Nlc3MtZW1lcmFsZCBbYm94LXNoYWRvdzowXzBfNnB4X3JnYmEoNzQsMjIyLDEyOCwwLjcpXSI6JD09PSJkaXNjb25uZWN0ZWQiPyJzaXplLTEuNSByb3VuZGVkLWZ1bGwgYmctZGFuZ2VyLXNvZnQgW2JveC1zaGFkb3c6MF8wXzZweF9yZ2JhKDI0OCwxMTMsMTEzLDAuNTUpXSI6bnVsbDtyZXR1cm4gSygic3BhbiIse2NsYXNzTmFtZToidGV4dC1bMTFweF0gdGV4dC13aGl0ZS81NSBmb250LW1vbm8gaW5saW5lLWZsZXggaXRlbXMtY2VudGVyIGdhcC0xLjUganVzdGlmeS1zZWxmLWVuZCBsZWFkaW5nLW5vbmUiLCJkYXRhLWNhbWVyYS1waWxsLXN0YXRlIjokLGNoaWxkcmVuOltRJiZLKCJzcGFuIix7Y2xhc3NOYW1lOlF9KSxKXX0pfWZ1bmN0aW9uIFVRKCl7cmV0dXJuIEsoInAiLHtjbGFzc05hbWU6Im0tMCB0ZXh0LWNlbnRlciB0ZXh0LVsxMHB4XSBsZWFkaW5nLVsxLjVdIHRleHQtd2hpdGUvNDUiLCJkYXRhLWNhbWVyYS10ZXN0LXBhdHRlcm4taGludCI6ITAsY2hpbGRyZW46IlRlc3QtcGF0dGVybiBmZWVkIn0pfWZ1bmN0aW9uIEhRKHttb2RlOiQsZmlsZU5hbWU6Six3ZWJjYW1OYW1lOlEsc291cmNlS2luZDpafSl7aWYoJD09PSJ1cGxvYWRpbmciKXJldHVybiBLKCJzcGFuIix7Y2xhc3NOYW1lOiJ0ZXh0LVsxMXB4XSB0ZXh0LXdoaXRlLzU1IixjaGlsZHJlbjoiVXBsb2FkaW5n4oCmIn0pO2lmKCQ9PT0iZmlsZSIpcmV0dXJuIEsoWjEse2NoaWxkcmVuOltLKCJkaXYiLHtjbGFzc05hbWU6InNocmluay0wIHRleHQtWzlweF0gdHJhY2tpbmctWzAuMWVtXSB1cHBlcmNhc2UgdGV4dC13aGl0ZS81NSBiZy13aGl0ZS9bMC4wNl0gYm9yZGVyIGJvcmRlci13aGl0ZS84IHB4LVs3cHhdIHB5LVsycHhdIHJvdW5kZWQtZnVsbCIsY2hpbGRyZW46Wj09PSJ2aWRlbyI/IlZpZGVvIjoiSW1hZ2UifSksSygic3BhbiIse2NsYXNzTmFtZToiZmxleC0xIG1pbi13LTAgdHJ1bmNhdGUgdGV4dC1bMTJweF0gdGV4dC13aGl0ZS85MCBmb250LW1vbm8iLGNoaWxkcmVuOko/PyIifSldfSk7aWYoJD09PSJ3ZWJjYW0iKXJldHVybiBLKFoxLHtjaGlsZHJlbjpbSygiZGl2Iix7Y2xhc3NOYW1lOiJzaHJpbmstMCB0ZXh0LVs5cHhdIHRyYWNraW5nLVswLjFlbV0gdXBwZXJjYXNlIHRleHQtd2hpdGUvNTUgYmctd2hpdGUvWzAuMDZdIGJvcmRlciBib3JkZXItd2hpdGUvOCBweC1bN3B4XSBweS1bMnB4XSByb3VuZGVkLWZ1bGwiLGNoaWxkcmVuOiJXZWJjYW0ifSksSygic3BhbiIse2NsYXNzTmFtZToiZmxleC0xIG1pbi13LTAgdHJ1bmNhdGUgdGV4dC1bMTJweF0gdGV4dC13aGl0ZS85MCBmb250LW1vbm8iLGNoaWxkcmVuOlE/PyIifSldfSk7cmV0dXJuIEsoInNwYW4iLHtjbGFzc05hbWU6InRleHQtWzEycHhdIHRleHQtd2hpdGUvODUgZm9udC1tZWRpdW0iLGNoaWxkcmVuOiJTZWxlY3Qgb3IgZHJvcCBtZWRpYSJ9KX1mdW5jdGlvbiB0Nih7a2luZDokLG1lc3NhZ2U6Sn0pe3JldHVybiBLKCJkaXYiLHtjbGFzc05hbWU6JD09PSJ3YXJuaW5nIj8iYmctd2FybmluZy8xMCBib3JkZXIgYm9yZGVyLXdhcm5pbmcvMjUgdGV4dC13YXJuaW5nLXNvZnQgdGV4dC1bMTFweF0gcHgtMiBweS0xLjUgcm91bmRlZC1tZCBicmVhay13b3JkcyI6ImJnLWRhbmdlci8xMCBib3JkZXIgYm9yZGVyLWRhbmdlci8yMCB0ZXh0LWRhbmdlci1zb2Z0IHRleHQtWzExcHhdIHB4LTIgcHktMS41IHJvdW5kZWQtbWQgYnJlYWstd29yZHMiLCJkYXRhLWNhbWVyYS1iYW5uZXIta2luZCI6JCxyb2xlOiQ9PT0iZXJyb3IiPyJhbGVydCI6InN0YXR1cyIsY2hpbGRyZW46Sn0pfWZ1bmN0aW9uIEo0KHt1ZGlkOiQsYnVuZGxlSWQ6Sn0pe2xldFtRLFpdPVcoITEpLFtYLFldPVcoInBsYWNlaG9sZGVyIiksW3EsR109VygiIiksW1YsQl09VyhudWxsKSxbTix6XT1XKCExKSxMPUUoMCksW0MsQV09VyghMSksW1UsSF09VyghMSksaz1FKG51bGwpLFtGLHddPVcoW10pLFtULFNdPVcoITEpLFt4LCQxXT1XKCIiKSxbZixpXT1XKCJvZmYiKSxbcixsXT1XKG51bGwpLFtvLFExXT1XKG51bGwpLE4xPXIhPT1udWxsfHxvIT09bnVsbCxbYyx2XT1XKG51bGwpLFtuLFgxXT1XKG51bGwpLFssTDFdPVcobnVsbCksW0oxLFkxXT1XKCExKSxbSDEseV09VygicmVhZHkiKSxbZyxQXT1XKCgpPT5uZXcgU2V0KSxbcCx1XT1XKG51bGwpLFtqLEcxXT1XKG51bGwpLHoxPUUoITEpLE0xPUUoITEpLFcxPUUoIm9mZiIpLGkxPUUoITEpLEYxPUUxKCgpPT57bGV0IF89d2luZG93Ll9fU0lNX1BSRVZJRVdfXz8uc2VydmVTaW1CaW47aWYoIV8pcmV0dXJuInNlcnZlLXNpbSI7aWYoL1wudHMkLy50ZXN0KF8pKXJldHVybmBidW4gJHtPMShfKX1gO2lmKC9cLmpzJC8udGVzdChfKSlyZXR1cm5gbm9kZSAke08xKF8pfWA7cmV0dXJuIE8xKF8pfSxbXSksdjE9RChhc3luYygpPT57bGV0IF89d2luZG93Ll9fU0lNX1BSRVZJRVdfXz8uY2FtZXJhU3RhdHVzRW5kcG9pbnQ7cmV0dXJuIF8/S1EoXyk6bnVsbH0sW10pLFAxPUUoYXN5bmMoKT0+e30pLHUxPUUoSik7YigoKT0+e3UxLmN1cnJlbnQ9Sn0sW0pdKSxiKCgpPT57bGV0IF89ITE7cmV0dXJuKGFzeW5jKCk9PntsZXQgZD1hd2FpdCB2MSgpO2lmKF98fCFkfHwhZC5hbGl2ZSlyZXR1cm47TTEuY3VycmVudD0hMDtsZXQgYT1kLnNvdXJjZTtpZihhPT09InBsYWNlaG9sZGVyInx8YT09PSJ3ZWJjYW0ifHxhPT09ImltYWdlInx8YT09PSJ2aWRlbyIpWShhKTtpZigoYT09PSJpbWFnZSJ8fGE9PT0idmlkZW8iKSYmZC5hcmcpRyhkLmFyZyksQihkLmFyZy5zcGxpdCgiLyIpLnBvcCgpPz9udWxsKTtpZihhPT09IndlYmNhbSImJmQuYXJnKSQxKGQuYXJnKSxQMS5jdXJyZW50KCk7bGV0IGsxPWQubWlycm9yPT09Im9uIj8ib24iOiJvZmYiO2koazEpLFcxLmN1cnJlbnQ9azEsdShkLmhlbHBlclBpZD8/bnVsbCksWTEoITApO2xldCBWMT1BcnJheS5pc0FycmF5KGQuYnVuZGxlSWRzKT9kLmJ1bmRsZUlkczpbXTtpZihWMS5sZW5ndGg+MClQKG5ldyBTZXQoVjEpKTtsZXQgQjE9dTEuY3VycmVudCxnMT1hJiZhIT09InBsYWNlaG9sZGVyIjt5KEIxJiZWMS5pbmNsdWRlcyhCMSkmJmcxPyJhY3RpdmUiOiJyZWFkeSIpLEwxKGBSZWF0dGFjaGVkIOKGkiAke2E/PyJydW5uaW5nIGhlbHBlciJ9JHtkLmFyZz9gICgke2QuYXJnfSlgOiIifWApfSkoKSwoKT0+e189ITB9fSxbJCx2MV0pLGIoKCk9PntsZXQgXz0hMSxkPSExLGE9bnVsbCxrMT1hc3luYygpPT57aWYoX3x8ZClyZXR1cm47aWYodHlwZW9mIGRvY3VtZW50PCJ1IiYmZG9jdW1lbnQudmlzaWJpbGl0eVN0YXRlPT09ImhpZGRlbiIpcmV0dXJuO2Q9ITA7dHJ5e2xldCBCMT1hd2FpdCB2MSgpO2lmKF8pcmV0dXJuO2xldCBnMT0hIUIxPy5hbGl2ZSxmMT1BcnJheS5pc0FycmF5KEIxPy5idW5kbGVJZHMpP0IxLmJ1bmRsZUlkczpudWxsLHgxPSEhSiYmKGYxP2YxLmluY2x1ZGVzKEopOmcuaGFzKEopKSxPMD1CMT8uc291cmNlPz9udWxsLFQxPUoxJiZnMSYmeDEmJiEhKE8wJiZPMCE9PSJwbGFjZWhvbGRlciIpJiYocD09bnVsbHx8QjE/LmhlbHBlclBpZD09PXApO2lmKHkoKEwwKT0+cVEoTDAsVDEpKSwhZzEpWTEoKEwwKT0+e2lmKCFMMClyZXR1cm4gTDA7cmV0dXJuIFAobmV3IFNldCksdShudWxsKSxXMS5jdXJyZW50PSJvZmYiLCExfSk7ZWxzZSBpZihKMSYmcCE9bnVsbCYmQjE/LmhlbHBlclBpZCE9PXApWTEoITEpLFAobmV3IFNldCksdShudWxsKSxXMS5jdXJyZW50PSJvZmYiO2Vsc2UgaWYoZzEmJkFycmF5LmlzQXJyYXkoQjE/LmJ1bmRsZUlkcykpe2xldCBMMD1CMS5idW5kbGVJZHM7UCgoRDApPT57aWYoRDAuc2l6ZT09PUwwLmxlbmd0aCYmTDAuZXZlcnkoKGIwKT0+RDAuaGFzKGIwKSkpcmV0dXJuIEQwO3JldHVybiBuZXcgU2V0KEwwKX0pfX1maW5hbGx5e2Q9ITF9fTthPXNldEludGVydmFsKCgpPT57azEoKX0sWlEpO2xldCBWMT0oKT0+e2lmKGRvY3VtZW50LnZpc2liaWxpdHlTdGF0ZT09PSJ2aXNpYmxlIilrMSgpfTtpZih0eXBlb2YgZG9jdW1lbnQ8InUiKWRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoInZpc2liaWxpdHljaGFuZ2UiLFYxKTtyZXR1cm4oKT0+e2lmKF89ITAsYSljbGVhckludGVydmFsKGEpO2lmKHR5cGVvZiBkb2N1bWVudDwidSIpZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigidmlzaWJpbGl0eWNoYW5nZSIsVjEpfX0sW3YxLEoxLHAsSixnXSk7bGV0IEMxPUQoYXN5bmMoKT0+e1MoITApLHYobnVsbCk7dHJ5e2xldCBfPWF3YWl0IEkxKGAke0YxfSBjYW1lcmEgLS1saXN0LXdlYmNhbXNgKTtpZihfLmV4aXRDb2RlIT09MCl7dihfLnN0ZGVyci50cmltKCl8fGAtLWxpc3Qtd2ViY2FtcyBmYWlsZWQgKCR7Xy5leGl0Q29kZX0pYCk7cmV0dXJufWxldCBkPVZRKF8uc3Rkb3V0KTtpZih3KGQpLGQubGVuZ3RoPjAmJiF4KSQxKGRbMF0uaWQpfWZpbmFsbHl7UyghMSl9fSxbeCxGMV0pO2IoKCk9PntQMS5jdXJyZW50PUMxfSxbQzFdKSxiKCgpPT57aWYoVSYmRi5sZW5ndGg9PT0wJiYhVClDMSgpfSxbVSxGLmxlbmd0aCxULEMxXSk7bGV0IHcxPUQoKF8pPT57dih6USh7cmF3TWVzc2FnZTpfLGxhc3RGaWxlSXNIZWljOnoxLmN1cnJlbnQsc291cmNlOlh9KSl9LFtYXSksbDE9RChhc3luYyhfLGQsYSk9PntsZXQgazE9Xz09PSJpbWFnZSJ8fF89PT0idmlkZW8iLFYxPVsiY2FtZXJhIiwic3dpdGNoIixrMT8iZmlsZSI6X107aWYoXz09PSJ3ZWJjYW0iJiZkKVYxLnB1c2goTzEoZCkpO2lmKGsxKXtpZighYS50cmltKCkpcmV0dXJuIHYoIkRyb3AgYSBmaWxlIGludG8gdGhlIHBhbmVsIG9yIHBpY2sgYW5vdGhlciBzb3VyY2UuIiksITE7VjEucHVzaChPMShhLnRyaW0oKSkpfVYxLnB1c2goIi1kIiwkLCItLXF1aWV0Iik7bGV0IEIxPWF3YWl0IEkxKGAke0YxfSAke1YxLmpvaW4oIiAiKX1gKTtpZihCMS5leGl0Q29kZSE9PTApcmV0dXJuIHcxKEIxLnN0ZGVyci50cmltKCl8fEIxLnN0ZG91dC50cmltKCl8fGBzd2l0Y2ggZmFpbGVkICgke0IxLmV4aXRDb2RlfSlgKSwhMTt6MS5jdXJyZW50PSExO3RyeXtsZXQgZzE9SlNPTi5wYXJzZShCMS5zdGRvdXQudHJpbSgpKTtMMShgU3dpdGNoZWQg4oaSICR7ZzEuc291cmNlPz9ffSR7ZzEuYXJnP2AgKCR7ZzEuYXJnfSlgOiIifWApfWNhdGNoe0wxKGBTd2l0Y2hlZCDihpIgJHtffWApfXJldHVybiEwfSxbJCxGMSx3MV0pLHQxPUQoYXN5bmMoKT0+e2lmKCFKKXJldHVybjtsKCJpbmplY3QiKSx2KG51bGwpLEwxKG51bGwpO3RyeXtsZXQgXz1bImNhbWVyYSIsTzEoSiksIi1kIiwkLCItLXF1aWV0Il07aWYoWD09PSJpbWFnZSJ8fFg9PT0idmlkZW8iKXtpZighcS50cmltKCkpe3YoIkRyb3AgYSBmaWxlIGludG8gdGhlIHBhbmVsIG9yIHBpY2sgYW5vdGhlciBzb3VyY2UuIik7cmV0dXJufV8ucHVzaCgiLS1maWxlIixPMShxLnRyaW0oKSkpfWVsc2UgaWYoWD09PSJ3ZWJjYW0iKWlmKHgpXy5wdXNoKCItLXdlYmNhbSIsTzEoeCkpO2Vsc2UgXy5wdXNoKCItLXdlYmNhbSIpO18ucHVzaCgiLS1taXJyb3IiLGYpO2xldCBkPWF3YWl0IEkxKGAke0YxfSAke18uam9pbigiICIpfWApO2lmKGQuZXhpdENvZGUhPT0wKXt3MShkLnN0ZGVyci50cmltKCl8fGQuc3Rkb3V0LnRyaW0oKXx8YGluamVjdCBmYWlsZWQgKCR7ZC5leGl0Q29kZX0pYCk7cmV0dXJufXoxLmN1cnJlbnQ9ITE7bGV0IGE9bnVsbDt0cnl7bGV0IGsxPUpTT04ucGFyc2UoZC5zdGRvdXQudHJpbSgpKTthPWsxLmhlbHBlclBpZD8/bnVsbDtsZXQgVjE9azEuaGVscGVyUmVsYXVuY2hlZD09PSExPyJBdHRhY2hlZCI6IkluamVjdGVkIixCMT1rMS5waWQ/YCBwaWQgJHtrMS5waWR9YDoiIixnMT1rMS5oZWxwZXJQaWQ/YCwgaGVscGVyIHBpZCAke2sxLmhlbHBlclBpZH1gOiIiO0wxKGAke1YxfSAke2sxLnNvdXJjZT8/WH0gaW50byAke0p9JHtCMX0ke2cxfWApfWNhdGNoe0wxKGQuc3Rkb3V0LnRyaW0oKXx8IkluamVjdGVkLiIpfVkxKCEwKSx5KFg9PT0icGxhY2Vob2xkZXIiPyJyZWFkeSI6ImFjdGl2ZSIpLHUoYSksUCgoazEpPT5rMS5oYXMoSik/azE6bmV3IFNldChrMSkuYWRkKEopKSxXMS5jdXJyZW50PWZ9ZmluYWxseXtsKG51bGwpfX0sW0osJCxYLHEseCxmLEYxLHcxXSksUjE9SjE/YCR7WH06OiR7WD09PSJ3ZWJjYW0iP3g6IiJ9Ojoke1g9PT0iaW1hZ2UifHxYPT09InZpZGVvIj9xOiIifWA6bnVsbCxhMT0hIUomJmcuaGFzKEopLGUxPWExJiZYIT09InBsYWNlaG9sZGVyIjtiKCgpPT57aWYoIWUxKXtpMS5jdXJyZW50PSExO3JldHVybn1pZihpMS5jdXJyZW50KXJldHVybjtpMS5jdXJyZW50PSEwLFooITApfSxbZTFdKSxiKCgpPT57aWYoIWopcmV0dXJuO2lmKCFKfHxOMXx8QylyZXR1cm47aWYoWCE9PSJ3ZWJjYW0ifHx4IT09ailyZXR1cm47aWYoRzEobnVsbCksSjEpcmV0dXJuO3QxKCl9LFtqLEosTjEsQyxYLHgsSjEsdDFdKSxiKCgpPT57aWYoIUoxKXJldHVybjtpZigoWD09PSJpbWFnZSJ8fFg9PT0idmlkZW8iKSYmIXEudHJpbSgpKXJldHVybjtpZihYPT09IndlYmNhbSImJiF4KXJldHVybjtpZihNMS5jdXJyZW50KXtNMS5jdXJyZW50PSExO3JldHVybn1sZXQgXz0hMTtyZXR1cm4oYXN5bmMoKT0+e1ExKCJzd2l0Y2giKSx2KG51bGwpO3RyeXtpZihfKXJldHVybjthd2FpdCBsMShYLHgscSl9ZmluYWxseXtpZighXylRMShudWxsKX19KSgpLCgpPT57Xz0hMH19LFtSMV0pLGIoKCk9PntpZighSjEpcmV0dXJuO2lmKFcxLmN1cnJlbnQ9PT1mKXJldHVybjtsZXQgXz1mLGQ9ITE7cmV0dXJuKGFzeW5jKCk9PntRMSgibWlycm9yIiksdihudWxsKTt0cnl7bGV0IGE9YXdhaXQgSTEoYCR7RjF9IGNhbWVyYSBtaXJyb3IgJHtffSAtZCAkeyR9IC0tcXVpZXRgKTtpZihkKXJldHVybjtpZihhLmV4aXRDb2RlIT09MCl7dihhLnN0ZGVyci50cmltKCl8fGEuc3Rkb3V0LnRyaW0oKXx8YG1pcnJvciBmYWlsZWQgKCR7YS5leGl0Q29kZX0pYCk7cmV0dXJufVcxLmN1cnJlbnQ9XyxMMShgTWlycm9yIOKGkiAke199YCl9ZmluYWxseXtpZighZClRMShudWxsKX19KSgpLCgpPT57ZD0hMH19LFtmLEoxXSk7bGV0IFYwPUQoYXN5bmMoKT0+e2woInN0b3AiKSx2KG51bGwpO3RyeXtsZXQgXz1hd2FpdCBJMShgJHtGMX0gY2FtZXJhIC0tc3RvcC13ZWJjYW0gLWQgJHskfWApO2lmKF8uZXhpdENvZGUhPT0wKXt2KF8uc3RkZXJyLnRyaW0oKXx8YHN0b3Atd2ViY2FtIGZhaWxlZCAoJHtfLmV4aXRDb2RlfSlgKTtyZXR1cm59TDEoIkNhbWVyYSBoZWxwZXIgc3RvcHBlZC4iKSxZMSghMSkseSgicmVhZHkiKSxQKG5ldyBTZXQpLFcxLmN1cnJlbnQ9Im9mZiJ9ZmluYWxseXtsKG51bGwpfX0sWyQsRjFdKSxzMT1EKGFzeW5jKF8pPT57bGV0IGQ9TFEoe3R5cGU6Xy50eXBlLG5hbWU6Xy5uYW1lfSksYT1fLnR5cGUuc3RhcnRzV2l0aCgiaW1hZ2UvIil8fGQsazE9Xy50eXBlLnN0YXJ0c1dpdGgoInZpZGVvLyIpfHwkNCh7dHlwZTpfLnR5cGUsbmFtZTpfLm5hbWV9KTtpZighYSYmIWsxKXt6MS5jdXJyZW50PSExLHYoYFVuc3VwcG9ydGVkIGZpbGUgdHlwZTogJHtfLnR5cGV8fF8ubmFtZX1gKTtyZXR1cm59aWYoQSghMCksdihudWxsKSxYMShudWxsKSxOUSh7dHlwZTpfLnR5cGUsbmFtZTpfLm5hbWUsc2l6ZTpfLnNpemV9KSlYMShZUSk7ejEuY3VycmVudD1kO3RyeXtsZXQgVjE9SDIoXyksQjE9YXdhaXQgbjYoXywic2VydmUtc2ltLWNhbXNyYyIsVjEsSTEpO0IoXy5uYW1lKSxZKGsxPyJ2aWRlbyI6ImltYWdlIiksRyhCMSksTDEoYExvYWRlZCAke18ubmFtZX1gKX1jYXRjaChWMSl7aWYoejEuY3VycmVudCl2KGU2KTtlbHNlIHYoVjE/Lm1lc3NhZ2U/PyJVcGxvYWQgZmFpbGVkIil9ZmluYWxseXtBKCExKX19LFtdKSx2MD1EKGFzeW5jKF8pPT57Xy5wcmV2ZW50RGVmYXVsdCgpLF8uc3RvcFByb3BhZ2F0aW9uKCksTC5jdXJyZW50PTAseighMSk7bGV0IGQ9Xy5kYXRhVHJhbnNmZXI/LmZpbGVzPy5bMF07aWYoZClhd2FpdCBzMShkKX0sW3MxXSksbTE9RCgoKT0+e1koInBsYWNlaG9sZGVyIiksRygiIiksQihudWxsKSx2KG51bGwpLFgxKG51bGwpLHoxLmN1cnJlbnQ9ITF9LFtdKSxxMD1EKCgpPT57ay5jdXJyZW50Py5jbGljaygpfSxbXSksJDA9RChhc3luYyhfKT0+e2xldCBkPV8udGFyZ2V0LGE9ZC5maWxlcz8uWzBdO2lmKGQudmFsdWU9IiIsYSlhd2FpdCBzMShhKX0sW3MxXSk7YigoKT0+e2lmKCFVKXJldHVybjtsZXQgXz0oZCk9PntsZXQgYT1kLnRhcmdldDtpZihhIGluc3RhbmNlb2YgRWxlbWVudCYmYS5jbG9zZXN0KCJbZGF0YS1jYW1lcmEtc291cmNlLW1lbnVdIikpcmV0dXJuO0goITEpfTtyZXR1cm4gd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsXyksKCk9PndpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZWRvd24iLF8pfSxbVV0pO2xldCBQMD1EKChfKT0+e2lmKCQxKF8uaWQpLFkoIndlYmNhbSIpLEIobnVsbCksdihudWxsKSx6MS5jdXJyZW50PSExLEgoITEpLEopRzEoXy5pZCl9LFtKXSksZDE9RCgoKT0+e2koKF8pPT5fPT09Im9uIj8ib2ZmIjoib24iKX0sW10pLG4xPSFKMXx8WD09PSJwbGFjZWhvbGRlciIsXzA9RCgoXyk9PntpZihfLnByZXZlbnREZWZhdWx0KCksTC5jdXJyZW50KyssTC5jdXJyZW50PT09MSl6KCEwKX0sW10pLGoxPUQoKF8pPT57aWYoXy5wcmV2ZW50RGVmYXVsdCgpLF8uZGF0YVRyYW5zZmVyKV8uZGF0YVRyYW5zZmVyLmRyb3BFZmZlY3Q9ImNvcHkifSxbXSksSDA9RCgoXyk9PntpZihfLnByZXZlbnREZWZhdWx0KCksTC5jdXJyZW50LS0sTC5jdXJyZW50PD0wKUwuY3VycmVudD0wLHooITEpfSxbXSksQjA9R1Eoe2J1bmRsZUlkOkosaW5qZWN0ZWQ6SjEsc291cmNlOlgsZm9yZWdyb3VuZElzSW5qZWN0ZWQ6YTF9KSxEMT1CMD09PSJzdG9wIj97bGFiZWw6cj09PSJzdG9wIj8iU3RvcHBpbmfigKYiOiJTdG9wIixvbkNsaWNrOlYwLGtpbmQ6InN0b3AifTpCMD09PSJhdHRhY2giP3tsYWJlbDpyPT09ImluamVjdCI/IkluamVjdGluZ+KApiI6YEluamVjdCAke0p9YCxvbkNsaWNrOnQxLGtpbmQ6ImF0dGFjaCJ9OntsYWJlbDpyPT09ImluamVjdCI/IlN0YXJ0aW5n4oCmIjoiUGxheSIsb25DbGljazp0MSxraW5kOiJwbGF5In0seTE9QjA9PT0ic3RvcCI/Q3x8ciE9PW51bGw6IUp8fEN8fHIhPT1udWxsLEowPVg9PT0icGxhY2Vob2xkZXIiLEEwPVg9PT0id2ViY2FtIixOMD0oWD09PSJpbWFnZSJ8fFg9PT0idmlkZW8iKSYmISFWLGswPUEwP0YuZmluZCgoXyk9Pl8uaWQ9PT14KT8ubmFtZT8/eD8/IldlYmNhbSI6bnVsbCxLMT1DPyJ1cGxvYWRpbmciOk4wPyJmaWxlIjpBMD8id2ViY2FtIjoicGxhY2Vob2xkZXIiO3JldHVybiBLKFgwLHtvcGVuOlEsb25PcGVuQ2hhbmdlOlosYm9keUNsYXNzTmFtZToicHQtMi41IixzdW1tYXJ5Q2xhc3NOYW1lOiJncmlkIFtncmlkLXRlbXBsYXRlLWNvbHVtbnM6YXV0b18xZnJfYXV0b10gaXRlbXMtY2VudGVyIGdhcC0yIHRleHQtbGVmdCIsc3VtbWFyeTpLKFoxLHtjaGlsZHJlbjpbSygic3BhbiIse2NsYXNzTmFtZToidGV4dC1bMTFweF0gZm9udC1zZW1pYm9sZCB0ZXh0LXdoaXRlLzUwIHVwcGVyY2FzZSB0cmFja2luZy1bMC4wOGVtXSBsZWFkaW5nLW5vbmUgaW5saW5lLWZsZXggaXRlbXMtY2VudGVyIixjaGlsZHJlbjoiQ2FtZXJhIn0pLEsoQ1Ese3N0YXRlOkgxfSldfSksY2hpbGRyZW46SygiZGl2Iix7b25EcmFnRW50ZXI6XzAsb25EcmFnT3ZlcjpqMSxvbkRyYWdMZWF2ZTpIMCxvbkRyb3A6djAsY2xhc3NOYW1lOiJmbGV4IGZsZXgtY29sIGdhcC0yLjUiLGNoaWxkcmVuOltLKCJwIix7Y2xhc3NOYW1lOiJtLTAgdGV4dC1bMTBweF0gbGVhZGluZy1bMS41XSB0ZXh0LXdoaXRlLzQ1IixjaGlsZHJlbjoiUmVwbGFjZXMgdGhlIHNpbXVsYXRvcidzIGNhbWVyYSBmZWVkIGJ5IGluamVjdGluZyBhIGR5bGliIGF0IGFwcCBsYXVuY2ggYW5kIHN0cmVhbWluZyBmcmFtZXMgaW50byBzaGFyZWQgbWVtb3J5LiBQaWNrIG1lZGlhIG9yIGEgd2ViY2FtLCB0aGVuIFBsYXkgdG8gaW5qZWN0IGludG8gdGhlIGZvcmVncm91bmQgYXBwLiJ9KSxLKCJpbnB1dCIse3JlZjprLHR5cGU6ImZpbGUiLGFjY2VwdDoiaW1hZ2UvKix2aWRlby8qIixjbGFzc05hbWU6ImhpZGRlbiIsb25DaGFuZ2U6JDB9KSxLKCJkaXYiLHtvbkNsaWNrOihfKT0+e2lmKCFKMClyZXR1cm47aWYoXy50YXJnZXQuY2xvc2VzdCgiW2RhdGEtY2xlYXItbWVkaWFdIikpcmV0dXJuO3EwKCl9LHRpdGxlOkowPyJObyBzb3VyY2Ugc2VsZWN0ZWQg4oCUIFBsYXkgdXNlcyBhIHRlc3QtcGF0dGVybiBmZWVkLiBDbGljayB0byBwaWNrIGFuIGltYWdlL3ZpZGVvLCBvciBkcm9wIG9uZSBoZXJlLiI6QTA/YFNvdXJjZTogJHtrMH1gOmBTb3VyY2U6ICR7Vj8/WH1gLGNsYXNzTmFtZTpbInJlbGF0aXZlIG1pbi1oLVs0NHB4XSBmbGV4IGZsZXgtcm93IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBnYXAtMi41IHB4LTMuNSBweS0yLjUgcm91bmRlZC1bN3B4XSB0ZXh0LWNlbnRlciB0cmFuc2l0aW9uLVtib3JkZXItY29sb3IsYmFja2dyb3VuZF0gZHVyYXRpb24tMTUwIixKMD8iYmctd2hpdGUvWzAuMDRdIGJvcmRlciBib3JkZXItZGFzaGVkIGJvcmRlci13aGl0ZS8xMiI6ImJnLXdoaXRlL1swLjA0XSBib3JkZXIgYm9yZGVyLXdoaXRlLzgiLE4/IiFiZy1bcmdiYSgxMCwxMzIsMjU1LDAuMDgpXSAhYm9yZGVyLVtyZ2JhKDEwLDEzMiwyNTUsMC42KV0iOiIiLEM/ImN1cnNvci1wcm9ncmVzcyI6SjA/ImN1cnNvci1wb2ludGVyIjoiY3Vyc29yLWRlZmF1bHQiXS5qb2luKCIgIiksY2hpbGRyZW46W0soSFEse21vZGU6SzEsZmlsZU5hbWU6Vix3ZWJjYW1OYW1lOmswLHNvdXJjZUtpbmQ6WH0pLCFKMCYmIUMmJksoImJ1dHRvbiIseyJkYXRhLWNsZWFyLW1lZGlhIjohMCxvbkNsaWNrOihfKT0+e18uc3RvcFByb3BhZ2F0aW9uKCksbTEoKX0sY2xhc3NOYW1lOiJzaHJpbmstMCB3LTUgaC01IGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGJnLXRyYW5zcGFyZW50IGJvcmRlci1ub25lIHRleHQtd2hpdGUvNTUgaG92ZXI6dGV4dC13aGl0ZS85MCBjdXJzb3ItcG9pbnRlciBwLTAiLCJhcmlhLWxhYmVsIjoiQ2xlYXIgc291cmNlIix0aXRsZToiQ2xlYXIg4oaSIHBsYWNlaG9sZGVyIixjaGlsZHJlbjpLKEcwLHtzaXplOjE0LHN0cm9rZVdpZHRoOjJ9KX0pXX0pLEowJiYhQyYmSyhVUSx7fSksSygiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGl0ZW1zLXN0cmV0Y2ggZ2FwLTEuNSIsY2hpbGRyZW46W0soImRpdiIse2NsYXNzTmFtZToicmVsYXRpdmUiLCJkYXRhLWNhbWVyYS1zb3VyY2UtbWVudSI6ITAsY2hpbGRyZW46W0soImJ1dHRvbiIse29uQ2xpY2s6KCk9PkgoKF8pPT4hXyksY2xhc3NOYW1lOiJoLWZ1bGwgbWluLWgtWzM2cHhdIHctMTAgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgYmctdHJhbnNwYXJlbnQgYm9yZGVyIGJvcmRlci13aGl0ZS8xMiB0ZXh0LXdoaXRlLzg1IHJvdW5kZWQtWzdweF0gY3Vyc29yLXBvaW50ZXIgcC0wIGhvdmVyOmJnLXdoaXRlL1swLjA2XSBob3Zlcjpib3JkZXItd2hpdGUvMjAgaG92ZXI6dGV4dC13aGl0ZSIsImFyaWEtaGFzcG9wdXAiOiJtZW51IiwiYXJpYS1leHBhbmRlZCI6VSx0aXRsZTpYPT09IndlYmNhbSI/YFNvdXJjZTogd2ViY2FtJHt4P2AgKCR7Ri5maW5kKChfKT0+Xy5pZD09PXgpPy5uYW1lPz94fSlgOiIifSDigJQgY2xpY2sgdG8gY2hhbmdlYDpgU291cmNlOiAke1h9IOKAlCBjbGljayB0byBwaWNrIG1lZGlhIG9yIHdlYmNhbWAsImFyaWEtbGFiZWwiOiJDaG9vc2UgY2FtZXJhIHNvdXJjZSIsY2hpbGRyZW46Syh2Mix7c2l6ZToyMCxzdHJva2VXaWR0aDoyfSl9KSxVJiZLKCJkaXYiLHtyb2xlOiJtZW51IixjbGFzc05hbWU6ImFic29sdXRlIHRvcC1bY2FsYygxMDAlKzZweCldIGxlZnQtMCB6LTEwIG1pbi13LVsyMDBweF0gZmxleCBmbGV4LWNvbCBnYXAtcHggcC0xIGJnLXBhbmVsIGJvcmRlciBib3JkZXItd2hpdGUvOCByb3VuZGVkLVs3cHhdIHNoYWRvdy1bMF84cHhfMjRweF9yZ2JhKDAsMCwwLDAuNCldIixjaGlsZHJlbjpbSygiYnV0dG9uIix7cm9sZToibWVudWl0ZW0iLGNsYXNzTmFtZToidGV4dC1sZWZ0IGJnLXRyYW5zcGFyZW50IGJvcmRlci1ub25lIHRleHQtd2hpdGUvODUgdGV4dC1bMTJweF0gcHgtMi41IHB5LVs3cHhdIHJvdW5kZWQtbWQgY3Vyc29yLXBvaW50ZXIgaG92ZXI6Ymctd2hpdGUvWzAuMDZdIixvbkNsaWNrOigpPT57SCghMSkscTAoKX0sdGl0bGU6IlBpY2sgYW4gaW1hZ2Ugb3IgdmlkZW8gZnJvbSBkaXNrIixjaGlsZHJlbjoiQnJvd3NlIG1lZGlh4oCmIn0pLEsoImRpdiIse2NsYXNzTmFtZToiaC1weCBiZy13aGl0ZS84IG15LTEifSksSygiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gcGwtMi41IHByLTIgcHQtMSBwYi1bMnB4XSIsY2hpbGRyZW46W0soInNwYW4iLHtjbGFzc05hbWU6InRleHQtWzEwcHhdIHRleHQtd2hpdGUvNDUgdXBwZXJjYXNlIHRyYWNraW5nLVswLjA4ZW1dIixjaGlsZHJlbjpUPyJDYW1lcmFzIChsb2FkaW5n4oCmKSI6Ri5sZW5ndGg9PT0wPyJObyBjYW1lcmFzIjoiQ2FtZXJhcyJ9KSxLKCJidXR0b24iLHtvbkNsaWNrOihfKT0+e18uc3RvcFByb3BhZ2F0aW9uKCksQzEoKX0sZGlzYWJsZWQ6VCxjbGFzc05hbWU6ImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHctWzIycHhdIGgtWzIycHhdIGJnLXRyYW5zcGFyZW50IGJvcmRlci1ub25lIHJvdW5kZWQtWzVweF0gdGV4dC13aGl0ZS81NSBob3Zlcjp0ZXh0LXdoaXRlLzkwIGN1cnNvci1wb2ludGVyIHAtMCBkaXNhYmxlZDpvcGFjaXR5LTUwIiwiYXJpYS1sYWJlbCI6IlJlZnJlc2ggY2FtZXJhcyIsdGl0bGU6IlJlZnJlc2ggY2FtZXJhcyIsY2hpbGRyZW46SyhyMCx7c2l6ZToxMyxzdHJva2VXaWR0aDoyfSl9KV19KSxGLm1hcCgoXyk9PntsZXQgZD1YPT09IndlYmNhbSImJng9PT1fLmlkO3JldHVybiBLKCJidXR0b24iLHtyb2xlOiJtZW51aXRlbSIsY2xhc3NOYW1lOlsidGV4dC1sZWZ0IGJnLXRyYW5zcGFyZW50IGJvcmRlci1ub25lIHRleHQtWzEycHhdIHB4LTIuNSBweS1bN3B4XSByb3VuZGVkLW1kIGN1cnNvci1wb2ludGVyIGhvdmVyOmJnLXdoaXRlL1swLjA2XSIsZD8iIWJnLXdoaXRlL1swLjEyXSAhdGV4dC13aGl0ZSI6InRleHQtd2hpdGUvODUiXS5qb2luKCIgIiksb25DbGljazooKT0+UDAoXyksdGl0bGU6Xy5uYW1lLGNoaWxkcmVuOl8ubmFtZX0sXy5pZCl9KV19KV19KSxLKCJidXR0b24iLHtvbkNsaWNrOkQxLm9uQ2xpY2ssZGlzYWJsZWQ6eTEsY2xhc3NOYW1lOlsiZmxleC0xIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGdhcC0xLjUgcHktMiBweC0yLjUgYm9yZGVyLW5vbmUgcm91bmRlZC1bN3B4XSB0ZXh0LVsxMnB4XSBmb250LXNlbWlib2xkIGN1cnNvci1wb2ludGVyIGRpc2FibGVkOm9wYWNpdHktNTAgbWluLWgtWzM2cHhdIixEMS5raW5kPT09InN0b3AiPyJiZy13aGl0ZS9bMC4xNl0gdGV4dC13aGl0ZSBlbmFibGVkOmhvdmVyOmJnLXdoaXRlL1swLjIyXSI6ImJnLXN1Y2Nlc3MtZW1lcmFsZCB0ZXh0LVsjMDYyMDE4XSBlbmFibGVkOmhvdmVyOmJyaWdodG5lc3MtWzEuMDhdIl0uam9pbigiICIpLHRpdGxlOkQxLmtpbmQ9PT0ic3RvcCI/IlN0b3AgdGhlIGNhbWVyYSBoZWxwZXIgYW5kIHRlcm1pbmF0ZSBpbmplY3RlZCBhcHBzIjpEMS5raW5kPT09ImF0dGFjaCI/YEluamVjdCAke0p9IHNvIGl0IGpvaW5zIHRoZSBjYW1lcmEgZmVlZGA6IUo/IkJyaW5nIGFuIGFwcCB0byB0aGUgZm9yZWdyb3VuZCBmaXJzdCI6IlN0YXJ0OiBpbmplY3QgdGhlIGR5bGliIGFuZCBsYXVuY2ggdGhlIGZvcmVncm91bmQgYXBwIHdpdGggdGhlIGNob3NlbiBzb3VyY2UiLCJhcmlhLXByZXNzZWQiOkQxLmtpbmQ9PT0ic3RvcCIsImFyaWEtbGFiZWwiOkQxLmtpbmQ9PT0ic3RvcCI/IlN0b3AiOiJQbGF5IixjaGlsZHJlbjpbRDEua2luZD09PSJzdG9wIj9LKHAyLHt9KTpLKGYyLHt9KSxLKCJzcGFuIix7Y2hpbGRyZW46RDEua2luZD09PSJzdG9wIj8iU3RvcCI6RDEua2luZD09PSJhdHRhY2giPyJJbmplY3QiOiJQbGF5In0pXX0pLEsoImJ1dHRvbiIse3R5cGU6ImJ1dHRvbiIsb25DbGljazpkMSxkaXNhYmxlZDpuMSxjbGFzc05hbWU6YGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHctMTAgbWluLWgtWzM2cHhdIGJvcmRlciByb3VuZGVkLVs3cHhdIGZvbnQtW2luaGVyaXRdIGRpc2FibGVkOm9wYWNpdHktNTAgZGlzYWJsZWQ6Y3Vyc29yLW5vdC1hbGxvd2VkIGFjdGl2ZTpzY2FsZS1bMC45N10gJHtmPT09Im9uIj8iYmctd2hpdGUgYm9yZGVyLXdoaXRlIHRleHQtWyMwYTBhMGNdIGN1cnNvci1wb2ludGVyIGVuYWJsZWQ6aG92ZXI6Ymctd2hpdGUvWzAuODhdIGVuYWJsZWQ6aG92ZXI6Ym9yZGVyLXdoaXRlL1swLjg4XSBlbmFibGVkOmhvdmVyOnRleHQtWyMwYTBhMGNdIjoiYmctd2hpdGUvWzAuMDRdIGJvcmRlci13aGl0ZS84IHRleHQtd2hpdGUvODUgY3Vyc29yLXBvaW50ZXIgZW5hYmxlZDpob3ZlcjpiZy13aGl0ZS9bMC4wOV0gZW5hYmxlZDpob3Zlcjpib3JkZXItW3JnYmEoMjU1LDI1NSwyNTUsMC4xOCldIGVuYWJsZWQ6aG92ZXI6dGV4dC13aGl0ZSJ9YCwiYXJpYS1sYWJlbCI6YE1pcnJvcjogJHtmfSDigJQgdGFwIHRvIHRvZ2dsZWAsdGl0bGU6bjE/Ik1pcnJvciB0b2dnbGUgYXZhaWxhYmxlIG9uY2UgYSBzb3VyY2UgaXMgc3RyZWFtaW5nIjpgTWlycm9yOiAke2Z9IOKAlCBjbGljayB0byB0b2dnbGVgLCJhcmlhLXByZXNzZWQiOmY9PT0ib24iLGNoaWxkcmVuOksoUzIse3NpemU6MjAsc3Ryb2tlV2lkdGg6MixmaWxsOmY9PT0ib24iPyJjdXJyZW50Q29sb3IiOiJub25lIn0pfSldfSksbiYmSyh0Nix7a2luZDoid2FybmluZyIsbWVzc2FnZTpufSksYyYmSyh0Nix7a2luZDoiZXJyb3IiLG1lc3NhZ2U6Y30pXX0pfSl9dmFyIFE0PTUwMDtmdW5jdGlvbiBaNCh7dWRpZDokLGV2ZW50c0VuZHBvaW50Okp9KXtsZXRbUSxaXT1XKCExKSxbWCxZXT1XKFtdKSxbcSxHXT1XKCExKSxWPUUxKCgpPT5KPz9gJHtjMSgiYXBpL2V2ZW50LWxvZy9ldmVudHMiKX0/ZGV2aWNlPSR7ZW5jb2RlVVJJQ29tcG9uZW50KCQpfWAsW0osJF0pO2IoKCk9PntHKCExKSxZKFtdKTtsZXQgTj1mMChWKTtyZXR1cm4gTi5vbm1lc3NhZ2U9KHtkYXRhOnp9KT0+e3RyeXtsZXQgTD1KU09OLnBhcnNlKHopO2lmKEcoITEpLEFycmF5LmlzQXJyYXkoTC5ldmVudHMpKVkoTC5ldmVudHMuc2xpY2UoLVE0KSk7ZWxzZSBpZihMLmV2ZW50KVkoKEMpPT57cmV0dXJuWy4uLkMuZmlsdGVyKChVKT0+VS5pZCE9PUwuZXZlbnQuaWQpLEwuZXZlbnRdLnNsaWNlKC1RNCl9KX1jYXRjaHt9fSxOLm9uZXJyb3I9KCk9PkcoITApLCgpPT5OLmNsb3NlKCl9LFtWXSk7bGV0IEI9RTEoKCk9Plguc2xpY2UoKS5yZXZlcnNlKCksW1hdKTtyZXR1cm4gSyhYMCx7b3BlbjpRLG9uT3BlbkNoYW5nZTpaLCJkYXRhLWV2ZW50LWxvZyI6IiIsc3VtbWFyeUNsYXNzTmFtZToiZ3JpZCBbZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOmF1dG9fMWZyX2F1dG9dIGl0ZW1zLWNlbnRlciBnYXAtMiB0ZXh0LWxlZnQiLHN1bW1hcnk6SyhaMSx7Y2hpbGRyZW46W0soInNwYW4iLHtjbGFzc05hbWU6InRleHQtWzExcHhdIGZvbnQtc2VtaWJvbGQgdGV4dC13aGl0ZS81MCB1cHBlcmNhc2UgdHJhY2tpbmctWzAuMDhlbV0gbGVhZGluZy1ub25lIixjaGlsZHJlbjoiRXZlbnQgTG9nIn0pLEsoInNwYW4iLHt9KSxLKCJzcGFuIix7Y2xhc3NOYW1lOiJyb3VuZGVkLW1kIGJvcmRlciBib3JkZXItd2hpdGUvOCBiZy13aGl0ZS9bMC4wNF0gcHgtMS41IHB5LVszcHhdIHRleHQtWzEwcHhdIGZvbnQtbW9ubyB0ZXh0LXdoaXRlLzYwIixjaGlsZHJlbjpYLmxlbmd0aH0pXX0pLGNoaWxkcmVuOkIubGVuZ3RoPT09MD9LKCJkaXYiLHtyb2xlOiJzdGF0dXMiLCJhcmlhLWxpdmUiOiJwb2xpdGUiLGNsYXNzTmFtZToiZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgcHktNCB0ZXh0LVsxMnB4XSB0ZXh0LXdoaXRlLzQ1IixjaGlsZHJlbjpxPyJEaXNjb25uZWN0ZWQiOiJObyBldmVudHMgeWV0In0pOksoImRpdiIse2NsYXNzTmFtZToiZmxleCBtYXgtaC1bMzIwcHhdIGZsZXgtY29sIGdhcC0xIG92ZXJmbG93LXktYXV0byBweS0wLjUgW3Njcm9sbGJhci13aWR0aDp0aGluXSIscm9sZToibGlzdCIsY2hpbGRyZW46Qi5tYXAoKE4pPT5LKEFRLHtldmVudDpOfSxOLmlkKSl9KX0pfWZ1bmN0aW9uIEFRKHtldmVudDokfSl7bGV0IEo9a1EoJC50aW1lc3RhbXApLFE9WyQuc291cmNlLCQua2luZCwkLmFjdGlvbl0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oIiAvICIpLFo9JC5tc2c/PyQuc3VtbWFyeSxYPSQuc3RhdHVzPT09ImVycm9yIj8iYm9yZGVyLVsjZmY0NTNhXS81MCBiZy1bI2ZmNDUzYV0vMTAgdGV4dC1bI2ZmYjNhZF0iOiJib3JkZXItd2hpdGUvOCBiZy13aGl0ZS9bMC4wNF0gdGV4dC13aGl0ZS81MCI7cmV0dXJuIEsoImRpdiIse3JvbGU6Imxpc3RpdGVtIix0aXRsZTpRLGNsYXNzTmFtZToiZ3JpZCBncmlkLWNvbHMtWzU2cHhfMWZyX2F1dG9dIGl0ZW1zLWNlbnRlciBnYXAtMiByb3VuZGVkLW1kIHB4LTEuNSBweS0xLjUgdGV4dC1bMTJweF0gbGVhZGluZy10aWdodCBob3ZlcjpiZy13aGl0ZS9bMC4wNV0iLGNoaWxkcmVuOltLKCJzcGFuIix7Y2xhc3NOYW1lOiJmb250LW1vbm8gdGV4dC1bMTBweF0gdGV4dC13aGl0ZS80NSIsY2hpbGRyZW46Sn0pLEsoInNwYW4iLHtjbGFzc05hbWU6Im1pbi13LTAiLGNoaWxkcmVuOltLKCJzcGFuIix7Y2xhc3NOYW1lOiJibG9jayBvdmVyZmxvdy1oaWRkZW4gdGV4dC1lbGxpcHNpcyB3aGl0ZXNwYWNlLW5vd3JhcCB0ZXh0LXdoaXRlLzkwIixjaGlsZHJlbjpafSksSygic3BhbiIse2NsYXNzTmFtZToibXQtMC41IGJsb2NrIG92ZXJmbG93LWhpZGRlbiB0ZXh0LWVsbGlwc2lzIHdoaXRlc3BhY2Utbm93cmFwIGZvbnQtbW9ubyB0ZXh0LVsxMHB4XSB0ZXh0LXdoaXRlLzQwIixjaGlsZHJlbjpRfSldfSksJC5zdGF0dXM/Sygic3BhbiIse2NsYXNzTmFtZTpgcm91bmRlZC1tZCBib3JkZXIgcHgtMS41IHB5LVszcHhdIHRleHQtWzEwcHhdIGZvbnQtbW9ubyAke1h9YCxjaGlsZHJlbjokLnN0YXR1c30pOm51bGxdfSl9ZnVuY3Rpb24ga1EoJCl7bGV0IEo9bmV3IERhdGUoJCk7aWYoTnVtYmVyLmlzTmFOKEouZ2V0VGltZSgpKSlyZXR1cm4iIjtyZXR1cm4gSi50b0xvY2FsZVRpbWVTdHJpbmcoW10se2hvdXI6IjItZGlnaXQiLG1pbnV0ZToiMi1kaWdpdCIsc2Vjb25kOiIyLWRpZ2l0In0pfXZhciBvMj1bImV4dHJhLXNtYWxsIiwic21hbGwiLCJtZWRpdW0iLCJsYXJnZSIsImV4dHJhLWxhcmdlIiwiZXh0cmEtZXh0cmEtbGFyZ2UiLCJleHRyYS1leHRyYS1leHRyYS1sYXJnZSJdLE9RPTI1MCxGUT17YXBwZWFyYW5jZToibGlnaHQiLCJsaXF1aWQtZ2xhc3MiOiJjbGVhciIsImNvbG9yLWZpbHRlciI6Im5vbmUiLCJ0ZXh0LXNpemUiOiJsYXJnZSIsInJlZHVjZS1tb3Rpb24iOiJvZmYiLCJpbmNyZWFzZS1jb250cmFzdCI6Im9mZiIsInNob3ctYm9yZGVycyI6Im9mZiIsInJlZHVjZS10cmFuc3BhcmVuY3kiOiJvZmYiLHZvaWNlb3Zlcjoib2ZmIn0sbjM9e2FwcGVhcmFuY2U6W3t2YWx1ZToibGlnaHQiLGxhYmVsOiJMaWdodCJ9LHt2YWx1ZToiZGFyayIsbGFiZWw6IkRhcmsifV0sImxpcXVpZC1nbGFzcyI6W3t2YWx1ZToiY2xlYXIiLGxhYmVsOiJDbGVhciJ9LHt2YWx1ZToidGludGVkIixsYWJlbDoiVGludGVkIn1dLCJjb2xvci1maWx0ZXIiOlt7dmFsdWU6Im5vbmUiLGxhYmVsOiJOb25lIn0se3ZhbHVlOiJyZWQtZ3JlZW4iLGxhYmVsOiJSZWQvR3JlZW4gKFByb3Rhbm9waWEpIn0se3ZhbHVlOiJncmVlbi1yZWQiLGxhYmVsOiJHcmVlbi9SZWQgKERldXRlcmFub3BpYSkifSx7dmFsdWU6ImJsdWUteWVsbG93IixsYWJlbDoiQmx1ZS9ZZWxsb3cgKFRyaXRhbm9waWEpIn0se3ZhbHVlOiJncmF5c2NhbGUiLGxhYmVsOiJHcmF5c2NhbGUifV19LE1RPVt7a2V5OiJyZWR1Y2UtbW90aW9uIixsYWJlbDoiUmVkdWNlIE1vdGlvbiJ9LHtrZXk6ImluY3JlYXNlLWNvbnRyYXN0IixsYWJlbDoiSW5jcmVhc2UgQ29udHJhc3QifSx7a2V5OiJzaG93LWJvcmRlcnMiLGxhYmVsOiJTaG93IEJvcmRlcnMifSx7a2V5OiJyZWR1Y2UtdHJhbnNwYXJlbmN5IixsYWJlbDoiUmVkdWNlIFRyYW5zcGFyZW5jeSJ9LHtrZXk6InZvaWNlb3ZlciIsbGFiZWw6IlZvaWNlT3ZlciJ9XTtmdW5jdGlvbiBZMCh7aWNvbjokLGxhYmVsOkosY2hpbGRyZW46UX0pe3JldHVybiBLKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiBnYXAtMiBtaW4taC1bMzBweF0iLCJkYXRhLXNldHRpbmctcm93IjpKLGNoaWxkcmVuOltLKCJzcGFuIix7Y2xhc3NOYW1lOiJmbGV4IHNocmluay0wIGl0ZW1zLWNlbnRlciBnYXAtMiB0ZXh0LVsxMnB4XSB0ZXh0LXdoaXRlLzkwIHdoaXRlc3BhY2Utbm93cmFwIixjaGlsZHJlbjpbSygic3BhbiIse2NsYXNzTmFtZToiZmxleCBzaXplLVsxOHB4XSBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgdGV4dC13aGl0ZSIsY2hpbGRyZW46JH0pLEpdfSksSygic3BhbiIse2NsYXNzTmFtZToiZmxleCBtaW4tdy0wIGp1c3RpZnktZW5kIixjaGlsZHJlbjpRfSldfSl9ZnVuY3Rpb24gV1Eoe3ZhbHVlOiQsZGlzYWJsZWQ6SixvbkNoYW5nZTpRfSl7bGV0W1osWF09VyhudWxsKSxZPUUobnVsbCkscT1FKG51bGwpLEc9RCgoSCk9PntpZihxLmN1cnJlbnQ9PT1IKXJldHVybjtxLmN1cnJlbnQ9SCxRKEgpfSxbUV0pLFY9RCgoSCk9PntpZihYKEgpLFkuY3VycmVudCljbGVhclRpbWVvdXQoWS5jdXJyZW50KTtZLmN1cnJlbnQ9c2V0VGltZW91dCgoKT0+RyhIKSxPUSl9LFtHXSksQj1EKCgpPT57aWYoWS5jdXJyZW50KWNsZWFyVGltZW91dChZLmN1cnJlbnQpLFkuY3VycmVudD1udWxsO1goKEgpPT57aWYoSCE9PW51bGwpRyhIKTtyZXR1cm4gbnVsbH0pLHEuY3VycmVudD1udWxsfSxbR10pLE49bzIubGVuZ3RoLTEsej1aPz8kLEw9YCR7ei9OKjEwMH0lYDtyZXR1cm4gSygic3BhbiIse2NsYXNzTmFtZToiZmxleCB3LVsxMjBweF0gbWluLXctMCBmbGV4LWNvbCIsY2hpbGRyZW46W0soImlucHV0Iix7dHlwZToicmFuZ2UiLCJhcmlhLWxhYmVsIjoiVGV4dCBTaXplIixtaW46MCxtYXg6TixzdGVwOjEsdmFsdWU6eixkaXNhYmxlZDpKLG9uQ2hhbmdlOihIKT0+VihOdW1iZXIoSC50YXJnZXQudmFsdWUpKSxvblBvaW50ZXJVcDpCLG9uS2V5VXA6QixvbkJsdXI6QixzdHlsZTp7Ii0tc2xpZGVyLWZpbGwiOkwsIi0tc2xpZGVyLWZpbGwtY29sb3IiOko/InJnYmEoMjU1LDI1NSwyNTUsMC4zKSI6IiMwYTg0ZmYifSxjbGFzc05hbWU6YGgtWzEzcHhdIHctZnVsbCBhcHBlYXJhbmNlLW5vbmUgcm91bmRlZC1mdWxsIGJnLXRyYW5zcGFyZW50IG91dGxpbmUtbm9uZSBmb2N1cy12aXNpYmxlOltvdXRsaW5lOjEuNXB4X3NvbGlkX3JnYmEoMTAsMTMyLDI1NSwwLjU1KV0gZm9jdXMtdmlzaWJsZTpvdXRsaW5lLW9mZnNldC00ICR7Sj8iY3Vyc29yLWRlZmF1bHQiOiJjdXJzb3ItcG9pbnRlciJ9ICR7IlsmOjotd2Via2l0LXNsaWRlci1ydW5uYWJsZS10cmFja106aC1bNHB4XSBbJjo6LXdlYmtpdC1zbGlkZXItcnVubmFibGUtdHJhY2tdOnJvdW5kZWQtZnVsbCBbJjo6LXdlYmtpdC1zbGlkZXItcnVubmFibGUtdHJhY2tdOltiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCh0b19yaWdodCx2YXIoLS1zbGlkZXItZmlsbC1jb2xvcilfdmFyKC0tc2xpZGVyLWZpbGwpLHJnYmEoMjU1LDI1NSwyNTUsMC4yMilfdmFyKC0tc2xpZGVyLWZpbGwpKV0gWyY6Oi1tb3otcmFuZ2UtdHJhY2tdOmgtWzRweF0gWyY6Oi1tb3otcmFuZ2UtdHJhY2tdOnJvdW5kZWQtZnVsbCBbJjo6LW1vei1yYW5nZS10cmFja106Ymctd2hpdGUvMjAgWyY6Oi1tb3otcmFuZ2UtcHJvZ3Jlc3NdOmgtWzRweF0gWyY6Oi1tb3otcmFuZ2UtcHJvZ3Jlc3NdOnJvdW5kZWQtZnVsbCBbJjo6LW1vei1yYW5nZS1wcm9ncmVzc106YmctW3ZhcigtLXNsaWRlci1maWxsLWNvbG9yKV0ifSAkeyJbJjo6LXdlYmtpdC1zbGlkZXItdGh1bWJdOmFwcGVhcmFuY2Utbm9uZSBbJjo6LXdlYmtpdC1zbGlkZXItdGh1bWJdOnNpemUtWzEzcHhdIFsmOjotd2Via2l0LXNsaWRlci10aHVtYl06cm91bmRlZC1mdWxsIFsmOjotd2Via2l0LXNsaWRlci10aHVtYl06Ymctd2hpdGUgWyY6ZGlzYWJsZWQ6Oi13ZWJraXQtc2xpZGVyLXRodW1iXTpiZy13aGl0ZS81MCBbJjo6LXdlYmtpdC1zbGlkZXItdGh1bWJdOnNoYWRvdy1bMF8xcHhfM3B4X3JnYmEoMCwwLDAsMC40NSldIFsmOjotd2Via2l0LXNsaWRlci10aHVtYl06LW10LVs0LjVweF0gWyY6Oi1tb3otcmFuZ2UtdGh1bWJdOnNpemUtWzEzcHhdIFsmOjotbW96LXJhbmdlLXRodW1iXTpyb3VuZGVkLWZ1bGwgWyY6Oi1tb3otcmFuZ2UtdGh1bWJdOmJvcmRlci1ub25lIFsmOjotbW96LXJhbmdlLXRodW1iXTpiZy13aGl0ZSBbJjpkaXNhYmxlZDo6LW1vei1yYW5nZS10aHVtYl06Ymctd2hpdGUvNTAifWB9KSxLKCJzcGFuIix7ImFyaWEtaGlkZGVuIjohMCxjbGFzc05hbWU6InBvaW50ZXItZXZlbnRzLW5vbmUgbXQtWzNweF0gZmxleCBqdXN0aWZ5LWJldHdlZW4gcHgtWzUuNXB4XSIsY2hpbGRyZW46bzIubWFwKChIKT0+Sygic3BhbiIse2NsYXNzTmFtZToic2l6ZS1bMnB4XSByb3VuZGVkLWZ1bGwgYmctd2hpdGUvNDAifSxIKSl9KV19KX1mdW5jdGlvbiBVMCh7bGFiZWw6JCx2YWx1ZTpKLG9wdGlvbnM6USxkaXNhYmxlZDpaLG9uQ2hhbmdlOlh9KXtyZXR1cm4gSyhmNSx7bGFiZWw6JCx2YWx1ZTpKLG9wdGlvbnM6USxkaXNhYmxlZDpaLG9uQ2hhbmdlOlgsY2xhc3NOYW1lOiJiZy13aGl0ZS9bMC4wNl0gYm9yZGVyIGJvcmRlci13aGl0ZS8xMCByb3VuZGVkLW1kIHRleHQtd2hpdGUvOTAgdGV4dC1bMTJweF0gcHktMC41IHB4LTIgbWluLXctMCBtYXgtdy1bMTUwcHhdIGRpc2FibGVkOnRleHQtd2hpdGUvNDAifSl9dmFyIGMyPXthcHBlYXJhbmNlOksoInN2ZyIse3dpZHRoOiIxNCIsaGVpZ2h0OiIxNCIsdmlld0JveDoiMCAwIDI0IDI0IixmaWxsOiJub25lIixzdHJva2U6ImN1cnJlbnRDb2xvciIsc3Ryb2tlV2lkdGg6IjIiLHN0cm9rZUxpbmVjYXA6InJvdW5kIixzdHJva2VMaW5lam9pbjoicm91bmQiLGNoaWxkcmVuOltLKCJwYXRoIix7ZDoiTTEyIDJ2MiJ9KSxLKCJwYXRoIix7ZDoiTTE0LjgzNyAxNi4zODVhNiA2IDAgMSAxLTcuMjIzLTcuMjIyYy42MjQtLjE0Ny45Ny42Ni43MTUgMS4yNDhhNCA0IDAgMCAwIDUuMjYgNS4yNTljLjU4OS0uMjU1IDEuMzk2LjA5IDEuMjQ4LjcxNSJ9KSxLKCJwYXRoIix7ZDoiTTE2IDEyYTQgNCAwIDAgMC00LTQifSksSygicGF0aCIse2Q6Im0xOSA1LTEuMjU2IDEuMjU2In0pLEsoInBhdGgiLHtkOiJNMjAgMTJoMiJ9KV19KSxnbGFzczpLKCJzdmciLHt3aWR0aDoiMTQiLGhlaWdodDoiMTQiLHZpZXdCb3g6IjAgMCAyMjAgMjIwIixmaWxsOiJjdXJyZW50Q29sb3IiLHN0cm9rZToibm9uZSIsY2hpbGRyZW46W0soInBhdGgiLHtkOiJNMTUyIDE4M1YxOTVIMTAwVjE4M0gxNTJaTTE5NiAxMzlWMTI2QzE5NiAxMDEuNjk5IDE3Ni4zMDEgODIgMTUyIDgySDEwMEM3NS42OTk1IDgyIDU2IDEwMS42OTkgNTYgMTI2VjEzOUM1NiAxNjMuMzAxIDc1LjY5OTUgMTgzIDEwMCAxODNWMTk1TDk5LjI3NjQgMTk0Ljk5NUM2OC45MjI4IDE5NC42MTEgNDQuMzg5MyAxNzAuMDc3IDQ0LjAwNDkgMTM5LjcyNEw0NCAxMzlWMTI2QzQ0IDk1LjA3MjEgNjkuMDcyMSA3MCAxMDAgNzBIMTUyQzE4Mi45MjggNzAgMjA4IDk1LjA3MjEgMjA4IDEyNlYxMzlMMjA3Ljk5NSAxMzkuNzI0QzIwNy42MTEgMTcwLjA3NyAxODMuMDc3IDE5NC42MTEgMTUyLjcyNCAxOTQuOTk1TDE1MiAxOTVWMTgzQzE3Ni4zMDEgMTgzIDE5NiAxNjMuMzAxIDE5NiAxMzlaIn0pLEsoInBhdGgiLHtkOiJNMTM2IDI1QzE0Ny4wNDYgMjUgMTU2IDMzLjk1NDMgMTU2IDQ1VjcwSDE0M1Y0NUMxNDMgNDEuMTM0IDEzOS44NjYgMzggMTM2IDM4SDQxQzM3LjEzNCAzOCAzNCA0MS4xMzQgMzQgNDVWMTQwQzM0IDE0My44NjYgMzcuMTM0IDE0NyA0MSAxNDdINDQuODYwNEM0NS42NDg3IDE1MS41MzYgNDYuOTYzNCAxNTUuODkxIDQ4Ljc0MDIgMTYwSDQxTDQwLjQ4MzQgMTU5Ljk5M0MyOS44NDgxIDE1OS43MjQgMjEuMjc2NSAxNTEuMTUyIDIxLjAwNjggMTQwLjUxN0wyMSAxNDBWNDVDMjEgMzMuOTU0MyAyOS45NTQzIDI1IDQxIDI1SDEzNloifSksSygicGF0aCIse2Q6Ik0xNTYuMTk5IDE0MEMxNTYuMTk5IDE1MC44NzMgMTQ3LjUyMyAxNTkuNzE5IDEzNi43MTYgMTU5Ljk5M0wxMzYuMTk5IDE2MEg4MC45MTdDNzcuOTQ2MSAxNjAgNzYuMTYzOSAxNjMuMyA3Ny43OTMgMTY1Ljc4NEM3OS4yNDUxIDE2Ny45OTkgNzYuMTY0NyAxNzAuMzUzIDc0LjQwOTQgMTY4LjM3TDczLjYwNTkgMTY3LjQ2MkM2OS4zNDk3IDE2Mi42NTQgNjcgMTU2LjQ1NSA2NyAxNTAuMDM0QzY3IDE0OC4zNTggNjguMzU4MyAxNDcgNzAuMDMzOSAxNDdIMTM2LjE5OUMxNDAuMDY1IDE0NyAxNDMuMTk5IDE0My44NjYgMTQzLjE5OSAxNDBWOTYuOTk1NUMxNDMuMTk5IDkzLjk4MjIgMTQxLjM1NCA5MS4yNzYzIDEzOC41NDkgOTAuMTc2MUMxMzcuMzg5IDg5LjcyMTUgMTM3LjcxNSA4OCAxMzguOTYgODhMMTQzLjE5OSA4OEMxNTAuMzc5IDg4IDE1Ni4xOTkgOTMuODIwMyAxNTYuMTk5IDEwMVYxNDBaIn0pXX0pLGZpbHRlcjpLKCJzdmciLHt3aWR0aDoiMTQiLGhlaWdodDoiMTQiLHZpZXdCb3g6IjAgMCAyNCAyNCIsZmlsbDoibm9uZSIsc3Ryb2tlOiJjdXJyZW50Q29sb3IiLHN0cm9rZVdpZHRoOiIyIixzdHJva2VMaW5lY2FwOiJyb3VuZCIsc3Ryb2tlTGluZWpvaW46InJvdW5kIixjaGlsZHJlbjpbSygicGF0aCIse2Q6Ik0xMSAxN2E0IDQgMCAwIDEtOCAwVjVhMiAyIDAgMCAxIDItMmg0YTIgMiAwIDAgMSAyIDJaIn0pLEsoInBhdGgiLHtkOiJNMTYuNyAxM0gxOWEyIDIgMCAwIDEgMiAydjRhMiAyIDAgMCAxLTIgMkg3In0pLEsoInBhdGgiLHtkOiJNIDcgMTdoLjAxIn0pLEsoInBhdGgiLHtkOiJtMTEgOCAyLjMtMi4zYTIuNCAyLjQgMCAwIDEgMy40MDQuMDA0TDE4LjYgNy42YTIuNCAyLjQgMCAwIDEgLjAyNiAzLjQzNEw5LjkgMTkuOCJ9KV19KSx0ZXh0U2l6ZTpLKCJzdmciLHt3aWR0aDoiMTQiLGhlaWdodDoiMTQiLHZpZXdCb3g6IjAgMCA1MiAzNCIsZmlsbDoiY3VycmVudENvbG9yIixzdHJva2U6Im5vbmUiLGNoaWxkcmVuOksoInBhdGgiLHtkOiJNMzkuNzI2NiAzMy4wMjM0QzM4LjE0ODQgMzMuMDIzNCAzNi43NSAzMi43MjY2IDM1LjUzMTIgMzIuMTMyOEMzNC4zMTI1IDMxLjUzOTEgMzMuMzU5NCAzMC43MTA5IDMyLjY3MTkgMjkuNjQ4NEMzMiAyOC41NzAzIDMxLjY2NDEgMjcuMzEyNSAzMS42NjQxIDI1Ljg3NUMzMS42NjQxIDIzLjc4MTIgMzIuNDI5NyAyMi4xMDk0IDMzLjk2MDkgMjAuODU5NEMzNS41MDc4IDE5LjYwOTQgMzcuNzEwOSAxOC45MDYyIDQwLjU3MDMgMTguNzVMNDcuNjAxNiAxOC4zNTE2VjE2LjVDNDcuNjAxNiAxNS4wMTU2IDQ3LjEzMjggMTMuODM1OSA0Ni4xOTUzIDEyLjk2MDlDNDUuMjU3OCAxMi4wODU5IDQzLjk1MzEgMTEuNjQ4NCA0Mi4yODEyIDExLjY0ODRDNDAuOTA2MiAxMS42NDg0IDM5Ljc1IDExLjk0NTMgMzguODEyNSAxMi41MzkxQzM3Ljg3NSAxMy4xMzI4IDM3LjA5MzggMTQuMDQ2OSAzNi40Njg4IDE1LjI4MTJDMzYuMjY1NiAxNS42MDk0IDM2LjAxNTYgMTUuODUxNiAzNS43MTg4IDE2LjAwNzhDMzUuNDIxOSAxNi4xNjQxIDM1LjA3ODEgMTYuMjQyMiAzNC42ODc1IDE2LjI0MjJDMzQuMTU2MiAxNi4yNDIyIDMzLjcxMDkgMTYuMDc4MSAzMy4zNTE2IDE1Ljc1QzMzLjAwNzggMTUuNDIxOSAzMi44MzU5IDE0Ljk5MjIgMzIuODM1OSAxNC40NjA5QzMyLjgzNTkgMTQuMjI2NiAzMi44NjcyIDEzLjk3NjYgMzIuOTI5NyAxMy43MTA5QzMzLjAwNzggMTMuNDQ1MyAzMy4xMDk0IDEzLjE3OTcgMzMuMjM0NCAxMi45MTQxQzMzLjg3NSAxMS40NjA5IDM1LjAxNTYgMTAuMzA0NyAzNi42NTYyIDkuNDQ1MzFDMzguMzEyNSA4LjU4NTk0IDQwLjIyNjYgOC4xNTYyNSA0Mi4zOTg0IDguMTU2MjVDNDQuMzIwMyA4LjE1NjI1IDQ1Ljk4NDQgOC40OTIxOSA0Ny4zOTA2IDkuMTY0MDZDNDguODEyNSA5LjgyMDMxIDQ5Ljg5ODQgMTAuNzUgNTAuNjQ4NCAxMS45NTMxQzUxLjQxNDEgMTMuMTU2MiA1MS43OTY5IDE0LjU3MDMgNTEuNzk2OSAxNi4xOTUzVjMwLjkxNDFDNTEuNzk2OSAzMS41ODU5IDUxLjYwOTQgMzIuMTA5NCA1MS4yMzQ0IDMyLjQ4NDRDNTAuODU5NCAzMi44NTk0IDUwLjM2NzIgMzMuMDQ2OSA0OS43NTc4IDMzLjA0NjlDNDkuMTY0MSAzMy4wNDY5IDQ4LjY3OTcgMzIuODY3MiA0OC4zMDQ3IDMyLjUwNzhDNDcuOTI5NyAzMi4xNDg0IDQ3LjczNDQgMzEuNjY0MSA0Ny43MTg4IDMxLjA1NDdWMjguMzU5NEg0Ny42NzE5QzQ2Ljk4NDQgMjkuNzgxMiA0NS45MDYyIDMwLjkxNDEgNDQuNDM3NSAzMS43NTc4QzQyLjk4NDQgMzIuNjAxNiA0MS40MTQxIDMzLjAyMzQgMzkuNzI2NiAzMy4wMjM0Wk00MC44MDQ3IDI5LjY3MTlDNDIuMDcwMyAyOS42NzE5IDQzLjIxMDkgMjkuNDA2MiA0NC4yMjY2IDI4Ljg3NUM0NS4yNTc4IDI4LjM0MzggNDYuMDc4MSAyNy42MTcyIDQ2LjY4NzUgMjYuNjk1M0M0Ny4yOTY5IDI1Ljc3MzQgNDcuNjAxNiAyNC43NSA0Ny42MDE2IDIzLjYyNVYyMS4zMjgxTDQxLjEzMjggMjEuNzVDMzkuNDQ1MyAyMS44NTk0IDM4LjE2NDEgMjIuMjczNCAzNy4yODkxIDIyLjk5MjJDMzYuNDE0MSAyMy42OTUzIDM1Ljk3NjYgMjQuNjA5NCAzNS45NzY2IDI1LjczNDRDMzUuOTc2NiAyNi45MjE5IDM2LjQyMTkgMjcuODc1IDM3LjMxMjUgMjguNTkzOEMzOC4yMDMxIDI5LjMxMjUgMzkuMzY3MiAyOS42NzE5IDQwLjgwNDcgMjkuNjcxOVpNMi4xNzk2OSAzMy4wMjM0QzEuNTA3ODEgMzMuMDIzNCAwLjk3NjU2MiAzMi44MzU5IDAuNTg1OTM4IDMyLjQ2MDlDMC4xOTUzMTIgMzIuMDg1OSAwIDMxLjU3ODEgMCAzMC45Mzc1QzAgMzAuNTMxMiAwLjA4NTkzNzUgMzAuMDcwMyAwLjI1NzgxMiAyOS41NTQ3TDEwLjQwNjIgMi40MTQwNkMxMC45ODQ0IDAuODA0Njg4IDEyLjEwMTYgMCAxMy43NTc4IDBDMTQuNjE3MiAwIDE1LjMyODEgMC4yMDMxMjUgMTUuODkwNiAwLjYwOTM3NUMxNi40NTMxIDEuMDE1NjIgMTYuODc1IDEuNjI1IDE3LjE1NjIgMi40Mzc1TDI3LjI1NzggMjkuNDg0NEMyNy40NDUzIDMwIDI3LjUzOTEgMzAuNDY4OCAyNy41MzkxIDMwLjg5MDZDMjcuNTM5MSAzMS41NDY5IDI3LjMzNTkgMzIuMDcwMyAyNi45Mjk3IDMyLjQ2MDlDMjYuNTIzNCAzMi44MzU5IDI1Ljk3NjYgMzMuMDIzNCAyNS4yODkxIDMzLjAyMzRDMjQuNjMyOCAzMy4wMjM0IDI0LjEwOTQgMzIuODc1IDIzLjcxODggMzIuNTc4MUMyMy4zNDM4IDMyLjI4MTIgMjMuMDM5MSAzMS43ODkxIDIyLjgwNDcgMzEuMTAxNkwxMy44MjgxIDUuMzQzNzVIMTMuNjY0MUw0LjY2NDA2IDMxLjEwMTZDNC40Mjk2OSAzMS43ODkxIDQuMTI1IDMyLjI4MTIgMy43NSAzMi41NzgxQzMuMzc1IDMyLjg3NSAyLjg1MTU2IDMzLjAyMzQgMi4xNzk2OSAzMy4wMjM0Wk02LjY3OTY5IDIzLjc0MjJDNi4xNDg0NCAyMy43NDIyIDUuNzAzMTIgMjMuNTYyNSA1LjM0Mzc1IDIzLjIwMzFDNC45ODQzOCAyMi44NDM4IDQuODA0NjkgMjIuMzk4NCA0LjgwNDY5IDIxLjg2NzJDNC44MDQ2OSAyMS4zNTE2IDQuOTg0MzggMjAuOTE0MSA1LjM0Mzc1IDIwLjU1NDdDNS43MDMxMiAyMC4xOTUzIDYuMTQ4NDQgMjAuMDE1NiA2LjY3OTY5IDIwLjAxNTZIMjAuODU5NEMyMS4zNzUgMjAuMDE1NiAyMS44MTI1IDIwLjE5NTMgMjIuMTcxOSAyMC41NTQ3QzIyLjUzMTIgMjAuOTE0MSAyMi43MTA5IDIxLjM1MTYgMjIuNzEwOSAyMS44NjcyQzIyLjcxMDkgMjIuMzk4NCAyMi41MzEyIDIyLjg0MzggMjIuMTcxOSAyMy4yMDMxQzIxLjgxMjUgMjMuNTYyNSAyMS4zNzUgMjMuNzQyMiAyMC44NTk0IDIzLjc0MjJINi42Nzk2OVoifSl9KSxtb3Rpb246Sygic3ZnIix7d2lkdGg6IjE0IixoZWlnaHQ6IjE0Iix2aWV3Qm94OiIwIDAgMjQgMjQiLGZpbGw6Im5vbmUiLHN0cm9rZToiY3VycmVudENvbG9yIixzdHJva2VXaWR0aDoiMiIsc3Ryb2tlTGluZWNhcDoicm91bmQiLGNoaWxkcmVuOltLKCJjaXJjbGUiLHtjeDoiMTQiLGN5OiIxMiIscjoiNiJ9KSxLKCJwYXRoIix7ZDoiTTMgOGg0TTIgMTJoNE0zIDE2aDQifSldfSksY29udHJhc3Q6Sygic3ZnIix7d2lkdGg6IjE0IixoZWlnaHQ6IjE0Iix2aWV3Qm94OiIwIDAgMjQgMjQiLGZpbGw6Im5vbmUiLHN0cm9rZToiY3VycmVudENvbG9yIixzdHJva2VXaWR0aDoiMiIsc3Ryb2tlTGluZWNhcDoicm91bmQiLHN0cm9rZUxpbmVqb2luOiJyb3VuZCIsY2hpbGRyZW46W0soImNpcmNsZSIse2N4OiIxMiIsY3k6IjEyIixyOiIxMCJ9KSxLKCJwYXRoIix7ZDoiTTEyIDE4YTYgNiAwIDAgMCAwLTEydjEyeiJ9KV19KSxib3JkZXJzOksoInN2ZyIse3dpZHRoOiIxNCIsaGVpZ2h0OiIxNCIsdmlld0JveDoiMCAwIDI0IDI0IixmaWxsOiJub25lIixzdHJva2U6ImN1cnJlbnRDb2xvciIsc3Ryb2tlV2lkdGg6IjIiLHN0cm9rZUxpbmVjYXA6InJvdW5kIixzdHJva2VMaW5lam9pbjoicm91bmQiLGNoaWxkcmVuOltLKCJwYXRoIix7ZDoiTTUgMjFhMiAyIDAgMCAxLTItMlY1YTIgMiAwIDAgMSAyLTJoMTRhMiAyIDAgMCAxIDIgMnYxNGEyIDIgMCAwIDEtMiAyIn0pLEsoInBhdGgiLHtkOiJNOSAyMWgxIn0pLEsoInBhdGgiLHtkOiJNMTQgMjFoMSJ9KV19KSx0cmFuc3BhcmVuY3k6Sygic3ZnIix7d2lkdGg6IjE0IixoZWlnaHQ6IjE0Iix2aWV3Qm94OiIwIDAgNjMgNDYiLGZpbGw6ImN1cnJlbnRDb2xvciIsc3Ryb2tlOiJub25lIixjaGlsZHJlbjpLKCJwYXRoIix7ZDoiTTIyLjczNDQgNC4xNzE4OEMyMi4xODc1IDQuMTcxODggMjEuNzE4OCAzLjk3NjU2IDIxLjMyODEgMy41ODU5NEMyMC45Mzc1IDMuMTk1MzEgMjAuNzQyMiAyLjcxODc1IDIwLjc0MjIgMi4xNTYyNUMyMC43NDIyIDEuNjA5MzggMjAuOTM3NSAxLjE0MDYyIDIxLjMyODEgMC43NUMyMS43MTg4IDAuMzU5Mzc1IDIyLjE4NzUgMC4xNjQwNjIgMjIuNzM0NCAwLjE2NDA2MkMyMy4yODEyIDAuMTY0MDYyIDIzLjc1IDAuMzU5Mzc1IDI0LjE0MDYgMC43NUMyNC41MzEyIDEuMTQwNjIgMjQuNzI2NiAxLjYwOTM4IDI0LjcyNjYgMi4xNTYyNUMyNC43MjY2IDIuNzE4NzUgMjQuNTMxMiAzLjE5NTMxIDI0LjE0MDYgMy41ODU5NEMyMy43NSAzLjk3NjU2IDIzLjI4MTIgNC4xNzE4OCAyMi43MzQ0IDQuMTcxODhaTTI5LjEwOTQgNS4yMDMxMkMyOC41NDY5IDUuMjAzMTIgMjguMDcwMyA1LjAwNzgxIDI3LjY3OTcgNC42MTcxOUMyNy4yODkxIDQuMjI2NTYgMjcuMDkzOCAzLjc1NzgxIDI3LjA5MzggMy4yMTA5NEMyNy4wOTM4IDIuNjY0MDYgMjcuMjg5MSAyLjE5NTMxIDI3LjY3OTcgMS44MDQ2OUMyOC4wNzAzIDEuMzk4NDQgMjguNTQ2OSAxLjE5NTMxIDI5LjEwOTQgMS4xOTUzMUMyOS42NTYyIDEuMTk1MzEgMzAuMTI1IDEuMzk4NDQgMzAuNTE1NiAxLjgwNDY5QzMwLjkwNjIgMi4xOTUzMSAzMS4xMDE2IDIuNjY0MDYgMzEuMTAxNiAzLjIxMDk0QzMxLjEwMTYgMy43NTc4MSAzMC45MDYyIDQuMjI2NTYgMzAuNTE1NiA0LjYxNzE5QzMwLjEyNSA1LjAwNzgxIDI5LjY1NjIgNS4yMDMxMiAyOS4xMDk0IDUuMjAzMTJaTTM0Ljg3NSA4LjEzMjgxQzM0LjMyODEgOC4xMzI4MSAzMy44NTE2IDcuOTM3NSAzMy40NDUzIDcuNTQ2ODhDMzMuMDU0NyA3LjE0MDYyIDMyLjg1OTQgNi42NzE4OCAzMi44NTk0IDYuMTQwNjJDMzIuODU5NCA1LjU3ODEyIDMzLjA1NDcgNS4xMDE1NiAzMy40NDUzIDQuNzEwOTRDMzMuODUxNiA0LjMyMDMxIDM0LjMyODEgNC4xMjUgMzQuODc1IDQuMTI1QzM1LjQyMTkgNC4xMjUgMzUuODkwNiA0LjMyMDMxIDM2LjI4MTIgNC43MTA5NEMzNi42ODc1IDUuMTAxNTYgMzYuODkwNiA1LjU3ODEyIDM2Ljg5MDYgNi4xNDA2MkMzNi44OTA2IDYuNjcxODggMzYuNjg3NSA3LjE0MDYyIDM2LjI4MTIgNy41NDY4OEMzNS44OTA2IDcuOTM3NSAzNS40MjE5IDguMTMyODEgMzQuODc1IDguMTMyODFaTTM5LjQ0NTMgMTIuNjc5N0MzOC44OTg0IDEyLjY3OTcgMzguNDIxOSAxMi40ODQ0IDM4LjAxNTYgMTIuMDkzOEMzNy42MjUgMTEuNzAzMSAzNy40Mjk3IDExLjIzNDQgMzcuNDI5NyAxMC42ODc1QzM3LjQyOTcgMTAuMTU2MiAzNy42MjUgOS42OTUzMSAzOC4wMTU2IDkuMzA0NjlDMzguNDIxOSA4Ljg5ODQ0IDM4Ljg5ODQgOC42OTUzMSAzOS40NDUzIDguNjk1MzFDMzkuOTkyMiA4LjY5NTMxIDQwLjQ2MDkgOC44OTg0NCA0MC44NTE2IDkuMzA0NjlDNDEuMjQyMiA5LjY5NTMxIDQxLjQzNzUgMTAuMTU2MiA0MS40Mzc1IDEwLjY4NzVDNDEuNDM3NSAxMS4yMzQ0IDQxLjI0MjIgMTEuNzAzMSA0MC44NTE2IDEyLjA5MzhDNDAuNDYwOSAxMi40ODQ0IDM5Ljk5MjIgMTIuNjc5NyAzOS40NDUzIDEyLjY3OTdaTTQyLjM3NSAxOC4zOTg0QzQxLjgxMjUgMTguMzk4NCA0MS4zMjgxIDE4LjIwMzEgNDAuOTIxOSAxNy44MTI1QzQwLjUzMTIgMTcuNDIxOSA0MC4zMzU5IDE2Ljk1MzEgNDAuMzM1OSAxNi40MDYyQzQwLjMzNTkgMTUuODQzOCA0MC41MzEyIDE1LjM2NzIgNDAuOTIxOSAxNC45NzY2QzQxLjMyODEgMTQuNTg1OSA0MS44MTI1IDE0LjM5MDYgNDIuMzc1IDE0LjM5MDZDNDIuOTA2MiAxNC4zOTA2IDQzLjM2NzIgMTQuNTg1OSA0My43NTc4IDE0Ljk3NjZDNDQuMTY0MSAxNS4zNjcyIDQ0LjM2NzIgMTUuODQzOCA0NC4zNjcyIDE2LjQwNjJDNDQuMzY3MiAxNi45NTMxIDQ0LjE2NDEgMTcuNDIxOSA0My43NTc4IDE3LjgxMjVDNDMuMzY3MiAxOC4yMDMxIDQyLjkwNjIgMTguMzk4NCA0Mi4zNzUgMTguMzk4NFpNNDMuNDUzMSAyNC43OTY5QzQyLjkwNjIgMjQuNzk2OSA0Mi40Mzc1IDI0LjYwMTYgNDIuMDQ2OSAyNC4yMTA5QzQxLjY1NjIgMjMuODIwMyA0MS40NjA5IDIzLjM0MzggNDEuNDYwOSAyMi43ODEyQzQxLjQ2MDkgMjIuMjM0NCA0MS42NTYyIDIxLjc2NTYgNDIuMDQ2OSAyMS4zNzVDNDIuNDM3NSAyMC45ODQ0IDQyLjkwNjIgMjAuNzg5MSA0My40NTMxIDIwLjc4OTFDNDQgMjAuNzg5MSA0NC40Njg4IDIwLjk4NDQgNDQuODU5NCAyMS4zNzVDNDUuMjY1NiAyMS43NjU2IDQ1LjQ2ODggMjIuMjM0NCA0NS40Njg4IDIyLjc4MTJDNDUuNDY4OCAyMy4zNDM4IDQ1LjI2NTYgMjMuODIwMyA0NC44NTk0IDI0LjIxMDlDNDQuNDY4OCAyNC42MDE2IDQ0IDI0Ljc5NjkgNDMuNDUzMSAyNC43OTY5Wk00Mi4zNzUgMzEuMTcxOUM0MS44MTI1IDMxLjE3MTkgNDEuMzI4MSAzMC45NzY2IDQwLjkyMTkgMzAuNTg1OUM0MC41MzEyIDMwLjE5NTMgNDAuMzM1OSAyOS43MjY2IDQwLjMzNTkgMjkuMTc5N0M0MC4zMzU5IDI4LjYxNzIgNDAuNTMxMiAyOC4xNDA2IDQwLjkyMTkgMjcuNzVDNDEuMzI4MSAyNy4zNTk0IDQxLjgxMjUgMjcuMTY0MSA0Mi4zNzUgMjcuMTY0MUM0Mi45MDYyIDI3LjE2NDEgNDMuMzY3MiAyNy4zNTk0IDQzLjc1NzggMjcuNzVDNDQuMTY0MSAyOC4xNDA2IDQ0LjM2NzIgMjguNjE3MiA0NC4zNjcyIDI5LjE3OTdDNDQuMzY3MiAyOS43MjY2IDQ0LjE2NDEgMzAuMTk1MyA0My43NTc4IDMwLjU4NTlDNDMuMzY3MiAzMC45NzY2IDQyLjkwNjIgMzEuMTcxOSA0Mi4zNzUgMzEuMTcxOVpNMzkuNDQ1MyAzNi44OTA2QzM4Ljg5ODQgMzYuODkwNiAzOC40MjE5IDM2LjY5NTMgMzguMDE1NiAzNi4zMDQ3QzM3LjYyNSAzNS44OTg0IDM3LjQyOTcgMzUuNDIxOSAzNy40Mjk3IDM0Ljg3NUMzNy40Mjk3IDM0LjMyODEgMzcuNjI1IDMzLjg1OTQgMzguMDE1NiAzMy40Njg4QzM4LjQyMTkgMzMuMDYyNSAzOC44OTg0IDMyLjg1OTQgMzkuNDQ1MyAzMi44NTk0QzM5Ljk5MjIgMzIuODU5NCA0MC40NjA5IDMzLjA2MjUgNDAuODUxNiAzMy40Njg4QzQxLjI0MjIgMzMuODU5NCA0MS40Mzc1IDM0LjMyODEgNDEuNDM3NSAzNC44NzVDNDEuNDM3NSAzNS40MjE5IDQxLjI0MjIgMzUuODk4NCA0MC44NTE2IDM2LjMwNDdDNDAuNDYwOSAzNi42OTUzIDM5Ljk5MjIgMzYuODkwNiAzOS40NDUzIDM2Ljg5MDZaTTM0Ljg3NSA0MS40Mzc1QzM0LjMyODEgNDEuNDM3NSAzMy44NTE2IDQxLjI0MjIgMzMuNDQ1MyA0MC44NTE2QzMzLjA1NDcgNDAuNDYwOSAzMi44NTk0IDM5Ljk5MjIgMzIuODU5NCAzOS40NDUzQzMyLjg1OTQgMzguODk4NCAzMy4wNTQ3IDM4LjQyOTcgMzMuNDQ1MyAzOC4wMzkxQzMzLjg1MTYgMzcuNjMyOCAzNC4zMjgxIDM3LjQyOTcgMzQuODc1IDM3LjQyOTdDMzUuNDIxOSAzNy40Mjk3IDM1Ljg5MDYgMzcuNjMyOCAzNi4yODEyIDM4LjAzOTFDMzYuNjg3NSAzOC40Mjk3IDM2Ljg5MDYgMzguODk4NCAzNi44OTA2IDM5LjQ0NTNDMzYuODkwNiAzOS45OTIyIDM2LjY4NzUgNDAuNDYwOSAzNi4yODEyIDQwLjg1MTZDMzUuODkwNiA0MS4yNDIyIDM1LjQyMTkgNDEuNDM3NSAzNC44NzUgNDEuNDM3NVpNMjkuMTA5NCA0NC4zNjcyQzI4LjU0NjkgNDQuMzY3MiAyOC4wNzAzIDQ0LjE2NDEgMjcuNjc5NyA0My43NTc4QzI3LjI4OTEgNDMuMzY3MiAyNy4wOTM4IDQyLjg5ODQgMjcuMDkzOCA0Mi4zNTE2QzI3LjA5MzggNDEuODA0NyAyNy4yODkxIDQxLjMzNTkgMjcuNjc5NyA0MC45NDUzQzI4LjA3MDMgNDAuNTU0NyAyOC41NDY5IDQwLjM1OTQgMjkuMTA5NCA0MC4zNTk0QzI5LjY1NjIgNDAuMzU5NCAzMC4xMjUgNDAuNTU0NyAzMC41MTU2IDQwLjk0NTNDMzAuOTA2MiA0MS4zMzU5IDMxLjEwMTYgNDEuODA0NyAzMS4xMDE2IDQyLjM1MTZDMzEuMTAxNiA0Mi44OTg0IDMwLjkwNjIgNDMuMzY3MiAzMC41MTU2IDQzLjc1NzhDMzAuMTI1IDQ0LjE2NDEgMjkuNjU2MiA0NC4zNjcyIDI5LjEwOTQgNDQuMzY3MlpNMjIuNzM0NCA0NS4zOTg0QzIyLjE4NzUgNDUuMzk4NCAyMS43MTg4IDQ1LjIwMzEgMjEuMzI4MSA0NC44MTI1QzIwLjkzNzUgNDQuNDIxOSAyMC43NDIyIDQzLjk1MzEgMjAuNzQyMiA0My40MDYyQzIwLjc0MjIgNDIuODQzOCAyMC45Mzc1IDQyLjM2NzIgMjEuMzI4MSA0MS45NzY2QzIxLjcxODggNDEuNTg1OSAyMi4xODc1IDQxLjM5MDYgMjIuNzM0NCA0MS4zOTA2QzIzLjI4MTIgNDEuMzkwNiAyMy43NSA0MS41ODU5IDI0LjE0MDYgNDEuOTc2NkMyNC41MzEyIDQyLjM2NzIgMjQuNzI2NiA0Mi44NDM4IDI0LjcyNjYgNDMuNDA2MkMyNC43MjY2IDQzLjk1MzEgMjQuNTMxMiA0NC40MjE5IDI0LjE0MDYgNDQuODEyNUMyMy43NSA0NS4yMDMxIDIzLjI4MTIgNDUuMzk4NCAyMi43MzQ0IDQ1LjM5ODRaTTE2LjM1OTQgNDQuMzY3MkMxNS44MTI1IDQ0LjM2NzIgMTUuMzQzOCA0NC4xNjQxIDE0Ljk1MzEgNDMuNzU3OEMxNC41NjI1IDQzLjM2NzIgMTQuMzY3MiA0Mi44OTg0IDE0LjM2NzIgNDIuMzUxNkMxNC4zNjcyIDQxLjgwNDcgMTQuNTYyNSA0MS4zMzU5IDE0Ljk1MzEgNDAuOTQ1M0MxNS4zNDM4IDQwLjU1NDcgMTUuODEyNSA0MC4zNTk0IDE2LjM1OTQgNDAuMzU5NEMxNi45MjE5IDQwLjM1OTQgMTcuMzk4NCA0MC41NTQ3IDE3Ljc4OTEgNDAuOTQ1M0MxOC4xNzk3IDQxLjMzNTkgMTguMzc1IDQxLjgwNDcgMTguMzc1IDQyLjM1MTZDMTguMzc1IDQyLjg5ODQgMTguMTc5NyA0My4zNjcyIDE3Ljc4OTEgNDMuNzU3OEMxNy4zOTg0IDQ0LjE2NDEgMTYuOTIxOSA0NC4zNjcyIDE2LjM1OTQgNDQuMzY3MlpNMTAuNTcwMyA0MS40Mzc1QzEwLjAzOTEgNDEuNDM3NSA5LjU3MDMxIDQxLjI0MjIgOS4xNjQwNiA0MC44NTE2QzguNzczNDQgNDAuNDYwOSA4LjU3ODEyIDM5Ljk5MjIgOC41NzgxMiAzOS40NDUzQzguNTc4MTIgMzguODk4NCA4Ljc3MzQ0IDM4LjQyOTcgOS4xNjQwNiAzOC4wMzkxQzkuNTcwMzEgMzcuNjMyOCAxMC4wMzkxIDM3LjQyOTcgMTAuNTcwMyAzNy40Mjk3QzExLjEzMjggMzcuNDI5NyAxMS42MDk0IDM3LjYzMjggMTIgMzguMDM5MUMxMi4zOTA2IDM4LjQyOTcgMTIuNTg1OSAzOC44OTg0IDEyLjU4NTkgMzkuNDQ1M0MxMi41ODU5IDM5Ljk5MjIgMTIuMzkwNiA0MC40NjA5IDEyIDQwLjg1MTZDMTEuNjA5NCA0MS4yNDIyIDExLjEzMjggNDEuNDM3NSAxMC41NzAzIDQxLjQzNzVaTTYuMDIzNDQgMzYuODkwNkM1LjQ3NjU2IDM2Ljg5MDYgNSAzNi42OTUzIDQuNTkzNzUgMzYuMzA0N0M0LjIwMzEyIDM1Ljg5ODQgNC4wMDc4MSAzNS40MjE5IDQuMDA3ODEgMzQuODc1QzQuMDA3ODEgMzQuMzI4MSA0LjIwMzEyIDMzLjg1OTQgNC41OTM3NSAzMy40Njg4QzUgMzMuMDYyNSA1LjQ3NjU2IDMyLjg1OTQgNi4wMjM0NCAzMi44NTk0QzYuNTcwMzEgMzIuODU5NCA3LjAzOTA2IDMzLjA2MjUgNy40Mjk2OSAzMy40Njg4QzcuODIwMzEgMzMuODU5NCA4LjAxNTYyIDM0LjMyODEgOC4wMTU2MiAzNC44NzVDOC4wMTU2MiAzNS40MjE5IDcuODIwMzEgMzUuODk4NCA3LjQyOTY5IDM2LjMwNDdDNy4wMzkwNiAzNi42OTUzIDYuNTcwMzEgMzYuODkwNiA2LjAyMzQ0IDM2Ljg5MDZaTTMuMDkzNzUgMzEuMTcxOUMyLjU2MjUgMzEuMTcxOSAyLjA5Mzc1IDMwLjk3NjYgMS42ODc1IDMwLjU4NTlDMS4yOTY4OCAzMC4xOTUzIDEuMTAxNTYgMjkuNzI2NiAxLjEwMTU2IDI5LjE3OTdDMS4xMDE1NiAyOC42MTcyIDEuMjk2ODggMjguMTQwNiAxLjY4NzUgMjcuNzVDMi4wOTM3NSAyNy4zNTk0IDIuNTYyNSAyNy4xNjQxIDMuMDkzNzUgMjcuMTY0MUMzLjY1NjI1IDI3LjE2NDEgNC4xMzI4MSAyNy4zNTk0IDQuNTIzNDQgMjcuNzVDNC45MTQwNiAyOC4xNDA2IDUuMTA5MzggMjguNjE3MiA1LjEwOTM4IDI5LjE3OTdDNS4xMDkzOCAyOS43MjY2IDQuOTE0MDYgMzAuMTk1MyA0LjUyMzQ0IDMwLjU4NTlDNC4xMzI4MSAzMC45NzY2IDMuNjU2MjUgMzEuMTcxOSAzLjA5Mzc1IDMxLjE3MTlaTTIuMDE1NjIgMjQuNzk2OUMxLjQ1MzEyIDI0Ljc5NjkgMC45NzY1NjIgMjQuNjAxNiAwLjU4NTkzOCAyNC4yMTA5QzAuMTk1MzEyIDIzLjgyMDMgMCAyMy4zNDM4IDAgMjIuNzgxMkMwIDIyLjIzNDQgMC4xOTUzMTIgMjEuNzY1NiAwLjU4NTkzOCAyMS4zNzVDMC45NzY1NjIgMjAuOTg0NCAxLjQ1MzEyIDIwLjc4OTEgMi4wMTU2MiAyMC43ODkxQzIuNTYyNSAyMC43ODkxIDMuMDMxMjUgMjAuOTg0NCAzLjQyMTg4IDIxLjM3NUMzLjgxMjUgMjEuNzY1NiA0LjAwNzgxIDIyLjIzNDQgNC4wMDc4MSAyMi43ODEyQzQuMDA3ODEgMjMuMzQzOCAzLjgxMjUgMjMuODIwMyAzLjQyMTg4IDI0LjIxMDlDMy4wMzEyNSAyNC42MDE2IDIuNTYyNSAyNC43OTY5IDIuMDE1NjIgMjQuNzk2OVpNMy4wOTM3NSAxOC4zOTg0QzIuNTYyNSAxOC4zOTg0IDIuMDkzNzUgMTguMjAzMSAxLjY4NzUgMTcuODEyNUMxLjI5Njg4IDE3LjQyMTkgMS4xMDE1NiAxNi45NTMxIDEuMTAxNTYgMTYuNDA2MkMxLjEwMTU2IDE1Ljg0MzggMS4yOTY4OCAxNS4zNjcyIDEuNjg3NSAxNC45NzY2QzIuMDkzNzUgMTQuNTg1OSAyLjU2MjUgMTQuMzkwNiAzLjA5Mzc1IDE0LjM5MDZDMy42NTYyNSAxNC4zOTA2IDQuMTMyODEgMTQuNTg1OSA0LjUyMzQ0IDE0Ljk3NjZDNC45MTQwNiAxNS4zNjcyIDUuMTA5MzggMTUuODQzOCA1LjEwOTM4IDE2LjQwNjJDNS4xMDkzOCAxNi45NTMxIDQuOTE0MDYgMTcuNDIxOSA0LjUyMzQ0IDE3LjgxMjVDNC4xMzI4MSAxOC4yMDMxIDMuNjU2MjUgMTguMzk4NCAzLjA5Mzc1IDE4LjM5ODRaTTYuMDIzNDQgMTIuNjc5N0M1LjQ3NjU2IDEyLjY3OTcgNSAxMi40ODQ0IDQuNTkzNzUgMTIuMDkzOEM0LjIwMzEyIDExLjcwMzEgNC4wMDc4MSAxMS4yMzQ0IDQuMDA3ODEgMTAuNjg3NUM0LjAwNzgxIDEwLjE1NjIgNC4yMDMxMiA5LjY5NTMxIDQuNTkzNzUgOS4zMDQ2OUM1IDguODk4NDQgNS40NzY1NiA4LjY5NTMxIDYuMDIzNDQgOC42OTUzMUM2LjU3MDMxIDguNjk1MzEgNy4wMzkwNiA4Ljg5ODQ0IDcuNDI5NjkgOS4zMDQ2OUM3LjgyMDMxIDkuNjk1MzEgOC4wMTU2MiAxMC4xNTYyIDguMDE1NjIgMTAuNjg3NUM4LjAxNTYyIDExLjIzNDQgNy44MjAzMSAxMS43MDMxIDcuNDI5NjkgMTIuMDkzOEM3LjAzOTA2IDEyLjQ4NDQgNi41NzAzMSAxMi42Nzk3IDYuMDIzNDQgMTIuNjc5N1pNMTAuNTcwMyA4LjEzMjgxQzEwLjAzOTEgOC4xMzI4MSA5LjU3MDMxIDcuOTM3NSA5LjE2NDA2IDcuNTQ2ODhDOC43NzM0NCA3LjE0MDYyIDguNTc4MTIgNi42NzE4OCA4LjU3ODEyIDYuMTQwNjJDOC41NzgxMiA1LjU3ODEyIDguNzczNDQgNS4xMDE1NiA5LjE2NDA2IDQuNzEwOTRDOS41NzAzMSA0LjMyMDMxIDEwLjAzOTEgNC4xMjUgMTAuNTcwMyA0LjEyNUMxMS4xMzI4IDQuMTI1IDExLjYwOTQgNC4zMjAzMSAxMiA0LjcxMDk0QzEyLjM5MDYgNS4xMDE1NiAxMi41ODU5IDUuNTc4MTIgMTIuNTg1OSA2LjE0MDYyQzEyLjU4NTkgNi42NzE4OCAxMi4zOTA2IDcuMTQwNjIgMTIgNy41NDY4OEMxMS42MDk0IDcuOTM3NSAxMS4xMzI4IDguMTMyODEgMTAuNTcwMyA4LjEzMjgxWk0xNi4zNTk0IDUuMjAzMTJDMTUuODEyNSA1LjIwMzEyIDE1LjM0MzggNS4wMDc4MSAxNC45NTMxIDQuNjE3MTlDMTQuNTYyNSA0LjIyNjU2IDE0LjM2NzIgMy43NTc4MSAxNC4zNjcyIDMuMjEwOTRDMTQuMzY3MiAyLjY2NDA2IDE0LjU2MjUgMi4xOTUzMSAxNC45NTMxIDEuODA0NjlDMTUuMzQzOCAxLjM5ODQ0IDE1LjgxMjUgMS4xOTUzMSAxNi4zNTk0IDEuMTk1MzFDMTYuOTIxOSAxLjE5NTMxIDE3LjM5ODQgMS4zOTg0NCAxNy43ODkxIDEuODA0NjlDMTguMTc5NyAyLjE5NTMxIDE4LjM3NSAyLjY2NDA2IDE4LjM3NSAzLjIxMDk0QzE4LjM3NSAzLjc1NzgxIDE4LjE3OTcgNC4yMjY1NiAxNy43ODkxIDQuNjE3MTlDMTcuMzk4NCA1LjAwNzgxIDE2LjkyMTkgNS4yMDMxMiAxNi4zNTk0IDUuMjAzMTJaTTQwLjEwMTYgNDUuNTYyNUMzNi45NDUzIDQ1LjU2MjUgMzMuOTkyMiA0NC45Njg4IDMxLjI0MjIgNDMuNzgxMkMyOC41MDc4IDQyLjYwOTQgMjYuMDkzOCA0MC45NzY2IDI0IDM4Ljg4MjhDMjEuOTA2MiAzNi43ODkxIDIwLjI2NTYgMzQuMzY3MiAxOS4wNzgxIDMxLjYxNzJDMTcuOTA2MiAyOC44NjcyIDE3LjMyMDMgMjUuOTIxOSAxNy4zMjAzIDIyLjc4MTJDMTcuMzIwMyAxOS42NDA2IDE3LjkwNjIgMTYuNjk1MyAxOS4wNzgxIDEzLjk0NTNDMjAuMjY1NiAxMS4xNzk3IDIxLjkwNjIgOC43NTc4MSAyNCA2LjY3OTY5QzI2LjA5MzggNC41ODU5NCAyOC41MDc4IDIuOTUzMTIgMzEuMjQyMiAxLjc4MTI1QzMzLjk5MjIgMC41OTM3NSAzNi45NDUzIDAgNDAuMTAxNiAwQzQzLjI0MjIgMCA0Ni4xODc1IDAuNTkzNzUgNDguOTM3NSAxLjc4MTI1QzUxLjY4NzUgMi45NTMxMiA1NC4xMDE2IDQuNTg1OTQgNTYuMTc5NyA2LjY3OTY5QzU4LjI3MzQgOC43NTc4MSA1OS45MDYyIDExLjE3OTcgNjEuMDc4MSAxMy45NDUzQzYyLjI2NTYgMTYuNjk1MyA2Mi44NTk0IDE5LjY0MDYgNjIuODU5NCAyMi43ODEyQzYyLjg1OTQgMjUuOTIxOSA2Mi4yNjU2IDI4Ljg2NzIgNjEuMDc4MSAzMS42MTcyQzU5LjkwNjIgMzQuMzY3MiA1OC4yNzM0IDM2Ljc4OTEgNTYuMTc5NyAzOC44ODI4QzU0LjEwMTYgNDAuOTc2NiA1MS42ODc1IDQyLjYwOTQgNDguOTM3NSA0My43ODEyQzQ2LjE4NzUgNDQuOTY4OCA0My4yNDIyIDQ1LjU2MjUgNDAuMTAxNiA0NS41NjI1Wk00MC4xMDE2IDQxLjM5MDZDNDIuNjY0MSA0MS4zOTA2IDQ1LjA3MDMgNDAuOTA2MiA0Ny4zMjAzIDM5LjkzNzVDNDkuNTcwMyAzOC45Njg4IDUxLjU0NjkgMzcuNjMyOCA1My4yNSAzNS45Mjk3QzU0Ljk2ODggMzQuMjI2NiA1Ni4zMDQ3IDMyLjI1NzggNTcuMjU3OCAzMC4wMjM0QzU4LjIxMDkgMjcuNzczNCA1OC42ODc1IDI1LjM1OTQgNTguNjg3NSAyMi43ODEyQzU4LjY4NzUgMjAuMjAzMSA1OC4yMTA5IDE3Ljc5NjkgNTcuMjU3OCAxNS41NjI1QzU2LjMwNDcgMTMuMzEyNSA1NC45Njg4IDExLjMzNTkgNTMuMjUgOS42MzI4MUM1MS41NDY5IDcuOTI5NjkgNDkuNTcwMyA2LjU5Mzc1IDQ3LjMyMDMgNS42MjVDNDUuMDcwMyA0LjY1NjI1IDQyLjY2NDEgNC4xNzE4OCA0MC4xMDE2IDQuMTcxODhDMzcuNTIzNCA0LjE3MTg4IDM1LjEwOTQgNC42NTYyNSAzMi44NTk0IDUuNjI1QzMwLjYyNSA2LjU5Mzc1IDI4LjY0ODQgNy45Mjk2OSAyNi45Mjk3IDkuNjMyODFDMjUuMjI2NiAxMS4zMzU5IDIzLjg5MDYgMTMuMzEyNSAyMi45MjE5IDE1LjU2MjVDMjEuOTY4OCAxNy43OTY5IDIxLjQ5MjIgMjAuMjAzMSAyMS40OTIyIDIyLjc4MTJDMjEuNDkyMiAyNS4zNTk0IDIxLjk2ODggMjcuNzczNCAyMi45MjE5IDMwLjAyMzRDMjMuODkwNiAzMi4yNTc4IDI1LjIyNjYgMzQuMjI2NiAyNi45Mjk3IDM1LjkyOTdDMjguNjQ4NCAzNy42MzI4IDMwLjYyNSAzOC45Njg4IDMyLjg1OTQgMzkuOTM3NUMzNS4xMDk0IDQwLjkwNjIgMzcuNTIzNCA0MS4zOTA2IDQwLjEwMTYgNDEuMzkwNloifSl9KSx2b2ljZW92ZXI6Sygic3ZnIix7d2lkdGg6IjE0IixoZWlnaHQ6IjE0Iix2aWV3Qm94OiIwIDAgMjQgMjQiLGZpbGw6Im5vbmUiLHN0cm9rZToiY3VycmVudENvbG9yIixzdHJva2VXaWR0aDoiMiIsc3Ryb2tlTGluZWNhcDoicm91bmQiLHN0cm9rZUxpbmVqb2luOiJyb3VuZCIsY2hpbGRyZW46W0soInBhdGgiLHtkOiJtMTEgNy42MDEtNS45OTQgOC4xOWExIDEgMCAwIDAgLjEgMS4yOThsLjgxNy44MThhMSAxIDAgMCAwIDEuMzE0LjA4N0wxNS4wOSAxMiJ9KSxLKCJwYXRoIix7ZDoiTTE2LjUgMjEuMTc0QzE1LjUgMjAuNSAxNC4zNzIgMjAgMTMgMjBjLTIuMDU4IDAtMy45MjggMi4zNTYtNiAyLTIuMDcyLS4zNTYtMi43NzUtMy4zNjktMS41LTQuNSJ9KSxLKCJjaXJjbGUiLHtjeDoiMTYiLGN5OiI3IixyOiI1In0pXX0pfTtmdW5jdGlvbiBQUSgkKXtpZighJClyZXR1cm4hMDtyZXR1cm4gSTUoJCkub3MudG9Mb3dlckNhc2UoKT09PSJpb3MifWZ1bmN0aW9uIEs0KHt1ZGlkOiQscnVudGltZTpKfSl7bGV0W1EsWl09VyghMCksW1gsWV09VyhudWxsKSxbcSxHXT1XKG51bGwpLFtWLEJdPVcobnVsbCksTj1QUShKKSx6PUQoYXN5bmMoKT0+e0IobnVsbCk7dHJ5e2xldCBUPWF3YWl0IGIzKHtkZXZpY2U6JH0se3NpZ25hbDpBYm9ydFNpZ25hbC50aW1lb3V0KDE1MDAwKX0pO2lmKFQpWShUKTtlbHNlIEIoIlVuZXhwZWN0ZWQgc2ltdWxhdG9yLXNldHRpbmdzIHJlcGx5Iil9Y2F0Y2goVCl7QihUIGluc3RhbmNlb2YgRE9NRXhjZXB0aW9uJiZULm5hbWU9PT0iVGltZW91dEVycm9yIj8iVGltZWQgb3V0IHJlYWRpbmcgc2ltdWxhdG9yIHNldHRpbmdzIjpUIGluc3RhbmNlb2YgRXJyb3ImJlQubWVzc2FnZSE9PSJGYWlsZWQgdG8gZmV0Y2giP1QubWVzc2FnZToiQ291bGQgbm90IHJlYWNoIHRoZSBwcmV2aWV3IHNlcnZlciDigJQgcmVsb2FkIHRoZSBwYWdlIGlmIHRoaXMgcGVyc2lzdHMiKX19LFskXSk7YigoKT0+e2lmKFkobnVsbCksIU4pcmV0dXJuO3ooKX0sW3osTl0pO2xldCBMPUQoYXN5bmMoVCxTKT0+e0coVCksQihudWxsKSxZKCh4KT0+eD97Li4ueCxbVF06U306eCk7dHJ5e2F3YWl0IGIzKHtkZXZpY2U6JCxvcHRpb246VCx2YWx1ZTpTfSx7c2lnbmFsOkFib3J0U2lnbmFsLnRpbWVvdXQoMTUwMDApfSl9Y2F0Y2goeCl7Qih4IGluc3RhbmNlb2YgRXJyb3I/eC5tZXNzYWdlOmBGYWlsZWQgdG8gc2V0ICR7VH1gKSx6KCl9ZmluYWxseXtHKG51bGwpfX0sWyQsel0pLEM9RSh7cnVubmluZzohMSxuZXh0Om51bGx9KSxBPUUoTCk7QS5jdXJyZW50PUw7bGV0IFU9RCgoVCk9PntsZXQgUz1DLmN1cnJlbnQ7aWYoUy5uZXh0PVQsUy5ydW5uaW5nKXJldHVybjtTLnJ1bm5pbmc9ITAsKGFzeW5jKCk9Pnt3aGlsZShTLm5leHQhPT1udWxsKXtsZXQgeD1TLm5leHQ7Uy5uZXh0PW51bGwsYXdhaXQgQS5jdXJyZW50KCJ0ZXh0LXNpemUiLG8yW3hdKX1TLnJ1bm5pbmc9ITF9KSgpfSxbXSksSD1YIT09bnVsbCxrPVg/P0ZRLEY9bzIuaW5kZXhPZihrWyJ0ZXh0LXNpemUiXSksdz1GPj0wP0Y6a1sidGV4dC1zaXplIl0/LnN0YXJ0c1dpdGgoImFjY2Vzc2liaWxpdHkiKT9vMi5sZW5ndGgtMTozO3JldHVybiBLKFgwLHtvcGVuOlEsb25PcGVuQ2hhbmdlOlosImRhdGEtc2ltdWxhdG9yLXNldHRpbmdzIjoiIixzdW1tYXJ5Q2xhc3NOYW1lOiJncmlkIFtncmlkLXRlbXBsYXRlLWNvbHVtbnM6YXV0b18xZnJfYXV0b10gaXRlbXMtY2VudGVyIGdhcC0yIHRleHQtbGVmdCIsc3VtbWFyeTpLKFoxLHtjaGlsZHJlbjpbSygic3BhbiIse2NsYXNzTmFtZToidGV4dC1bMTFweF0gZm9udC1zZW1pYm9sZCB0ZXh0LXdoaXRlLzUwIHVwcGVyY2FzZSB0cmFja2luZy1bMC4wOGVtXSBsZWFkaW5nLW5vbmUgaW5saW5lLWZsZXggaXRlbXMtY2VudGVyIixjaGlsZHJlbjoiU2ltdWxhdG9yIn0pLEsoInNwYW4iLHt9KV19KSxjaGlsZHJlbjohTj9LKCJkaXYiLHtjbGFzc05hbWU6InRleHQtd2hpdGUvNDUgdGV4dC1bMTFweF0gcHgtMC41IHB5LTEiLGNoaWxkcmVuOiJTaW11bGF0b3Igc2V0dGluZ3MgYXJlIGF2YWlsYWJsZSBvbiBpT1Mgc2ltdWxhdG9ycyBvbmx5LiJ9KTpLKFoxLHtjaGlsZHJlbjpbViYmSygiZGl2Iix7Y2xhc3NOYW1lOiJiZy1kYW5nZXIvMTAgYm9yZGVyIGJvcmRlci1kYW5nZXIvMjAgdGV4dC1kYW5nZXItc29mdCB0ZXh0LVsxMXB4XSBweC0yIHB5LTEuNSByb3VuZGVkLW1kIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiBnYXAtMiIsY2hpbGRyZW46W0soInNwYW4iLHtjbGFzc05hbWU6Im1pbi13LTAiLGNoaWxkcmVuOlZ9KSxLKCJidXR0b24iLHt0eXBlOiJidXR0b24iLG9uQ2xpY2s6KCk9PnZvaWQgeigpLGNsYXNzTmFtZToic2hyaW5rLTAgY3Vyc29yLXBvaW50ZXIgcm91bmRlZCBib3JkZXIgYm9yZGVyLWRhbmdlci8zMCBiZy10cmFuc3BhcmVudCBweC0xLjUgcHktMC41IHRleHQtWzExcHhdIHRleHQtZGFuZ2VyLXNvZnQiLGNoaWxkcmVuOiJSZXRyeSJ9KV19KSxLKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggZmxleC1jb2wgZ2FwLTEuNSBwYi0xLjUiLGNoaWxkcmVuOltLKFkwLHtpY29uOmMyLmFwcGVhcmFuY2UsbGFiZWw6IkFwcGVhcmFuY2UiLGNoaWxkcmVuOksoVTAse2xhYmVsOiJBcHBlYXJhbmNlIix2YWx1ZTprLmFwcGVhcmFuY2U/PyJsaWdodCIsb3B0aW9uczpuMy5hcHBlYXJhbmNlLGRpc2FibGVkOiFIfHxxPT09ImFwcGVhcmFuY2UiLG9uQ2hhbmdlOihUKT0+TCgiYXBwZWFyYW5jZSIsVCl9KX0pLEsoWTAse2ljb246YzIuZ2xhc3MsbGFiZWw6IkxpcXVpZCBHbGFzcyIsY2hpbGRyZW46SyhVMCx7bGFiZWw6IkxpcXVpZCBHbGFzcyIsdmFsdWU6a1sibGlxdWlkLWdsYXNzIl0/PyJjbGVhciIsb3B0aW9uczpuM1sibGlxdWlkLWdsYXNzIl0sZGlzYWJsZWQ6IUh8fHE9PT0ibGlxdWlkLWdsYXNzIixvbkNoYW5nZTooVCk9PkwoImxpcXVpZC1nbGFzcyIsVCl9KX0pLEsoWTAse2ljb246YzIuZmlsdGVyLGxhYmVsOiJDb2xvciBGaWx0ZXIiLGNoaWxkcmVuOksoVTAse2xhYmVsOiJDb2xvciBGaWx0ZXIiLHZhbHVlOmtbImNvbG9yLWZpbHRlciJdPz8ibm9uZSIsb3B0aW9uczpuM1siY29sb3ItZmlsdGVyIl0sZGlzYWJsZWQ6IUh8fHE9PT0iY29sb3ItZmlsdGVyIixvbkNoYW5nZTooVCk9PkwoImNvbG9yLWZpbHRlciIsVCl9KX0pLEsoWTAse2ljb246YzIudGV4dFNpemUsbGFiZWw6IlRleHQgU2l6ZSIsY2hpbGRyZW46SyhXUSx7dmFsdWU6dyxkaXNhYmxlZDohSCxvbkNoYW5nZTpVfSl9KSxNUS5tYXAoKHtrZXk6VCxsYWJlbDpTfSk9PksoWTAse2ljb246YzJbVD09PSJyZWR1Y2UtbW90aW9uIj8ibW90aW9uIjpUPT09ImluY3JlYXNlLWNvbnRyYXN0Ij8iY29udHJhc3QiOlQ9PT0ic2hvdy1ib3JkZXJzIj8iYm9yZGVycyI6VD09PSJyZWR1Y2UtdHJhbnNwYXJlbmN5Ij8idHJhbnNwYXJlbmN5Ijoidm9pY2VvdmVyIl0sbGFiZWw6UyxjaGlsZHJlbjpLKHA1LHtsYWJlbDpTLGNoZWNrZWQ6a1tUXT09PSJvbiIsZGlzYWJsZWQ6IUh8fHE9PT1ULG9uQ2hhbmdlOih4KT0+TChULHg/Im9uIjoib2ZmIil9KX0sVCkpXX0pXX0pfSl9dmFyIF9RPVt7dmFsdWU6Imh0dHAiLGxhYmVsOiJIVFRQIn0se3ZhbHVlOiJ3ZWJydGMiLGxhYmVsOiJXZWJSVEMifV0sRFE9W3t2YWx1ZToiYXV0byIsbGFiZWw6IkF1dG8ifSx7dmFsdWU6ImgyNjQiLGxhYmVsOiJILjI2NCJ9LHt2YWx1ZToibWpwZWciLGxhYmVsOiJNSlBFRyJ9XSxUUT1be3ZhbHVlOiJoMjY0IixsYWJlbDoiSC4yNjQifSx7dmFsdWU6InZwOSIsbGFiZWw6IlZQOSJ9LHt2YWx1ZToidnA4IixsYWJlbDoiVlA4In1dLHdRPVt7dmFsdWU6IjAiLGxhYmVsOiJGdWxsIn0se3ZhbHVlOiIxOTIwIixsYWJlbDoiMTkyMCJ9LHt2YWx1ZToiMTYwMCIsbGFiZWw6IjE2MDAifSx7dmFsdWU6IjEyODAiLGxhYmVsOiIxMjgwIn0se3ZhbHVlOiI5NjAiLGxhYmVsOiI5NjAifSx7dmFsdWU6IjcyMCIsbGFiZWw6IjcyMCJ9XSxYND1bIjYwIiwiMzAiLCIyMCIsIjE1IiwiMTAiLCI1Il0ubWFwKCgkKT0+KHt2YWx1ZTokLGxhYmVsOiR9KSksRVE9W3t2YWx1ZToiMC40NSIsbGFiZWw6IjQ1JSJ9LHt2YWx1ZToiMC41NSIsbGFiZWw6IjU1JSJ9LHt2YWx1ZToiMC43IixsYWJlbDoiNzAlIn0se3ZhbHVlOiIwLjg1IixsYWJlbDoiODUlIn0se3ZhbHVlOiIxIixsYWJlbDoiMTAwJSJ9XSxJUT1be3ZhbHVlOiIxNTAwMDAwIixsYWJlbDoiMS41IE1icHMifSx7dmFsdWU6IjMwMDAwMDAiLGxhYmVsOiIzIE1icHMifSx7dmFsdWU6IjYwMDAwMDAiLGxhYmVsOiI2IE1icHMifSx7dmFsdWU6IjEwMDAwMDAwIixsYWJlbDoiMTAgTWJwcyJ9LHt2YWx1ZToiMTYwMDAwMDAiLGxhYmVsOiIxNiBNYnBzIn1dLHAwPSJzaXplLTMuNSI7ZnVuY3Rpb24gcjIoJCxKLFEpe2xldCBaPVN0cmluZygkKTtyZXR1cm4gSi5zb21lKChYKT0+WC52YWx1ZT09PVopP0o6W3t2YWx1ZTpaLGxhYmVsOlEoJCl9LC4uLkpdfWZ1bmN0aW9uIFk0KHtzZXR0aW5nczokLG9uUGxheWJhY2tTZXR0aW5nc0NoYW5nZTpKLG9uRW5jb2RlclNldHRpbmdzQ2hhbmdlOlEsYWN0aXZlQ29kZWM6WixhdmNjU3VwcG9ydGVkOlgsZW5jb2RlclNldHRpbmdzRGlzYWJsZWQ6WT0hMX0pe2xldFtxLEddPVcoITEpLFY9JC50cmFuc3BvcnQ9PT0iaHR0cCIsQj0kLnRyYW5zcG9ydD09PSJ3ZWJydGMiO3JldHVybiBLKFgwLHtvcGVuOnEsb25PcGVuQ2hhbmdlOkcsImRhdGEtc3RyZWFtLXNldHRpbmdzIjoiIixzdW1tYXJ5Q2xhc3NOYW1lOiJncmlkIFtncmlkLXRlbXBsYXRlLWNvbHVtbnM6YXV0b18xZnJfYXV0b10gaXRlbXMtY2VudGVyIGdhcC0yIHRleHQtbGVmdCIsc3VtbWFyeTpLKFoxLHtjaGlsZHJlbjpbSygic3BhbiIse2NsYXNzTmFtZToidGV4dC1bMTFweF0gZm9udC1zZW1pYm9sZCB0ZXh0LXdoaXRlLzUwIHVwcGVyY2FzZSB0cmFja2luZy1bMC4wOGVtXSBsZWFkaW5nLW5vbmUgaW5saW5lLWZsZXggaXRlbXMtY2VudGVyIixjaGlsZHJlbjoiU3RyZWFtIn0pLEsoInNwYW4iLHtjbGFzc05hbWU6InRleHQtWzExcHhdIHRleHQtd2hpdGUvNDAganVzdGlmeS1zZWxmLWVuZCB1cHBlcmNhc2UiLGNoaWxkcmVuOlp9KV19KSxjaGlsZHJlbjpLKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggZmxleC1jb2wgZ2FwLTEuNSBwYi0xLjUiLGNoaWxkcmVuOltLKFkwLHtpY29uOksobzAse2NsYXNzTmFtZTpwMH0pLGxhYmVsOiJUcmFuc3BvcnQiLGNoaWxkcmVuOksoVTAse2xhYmVsOiJUcmFuc3BvcnQiLHZhbHVlOiQudHJhbnNwb3J0LG9wdGlvbnM6X1EsZGlzYWJsZWQ6ITEsb25DaGFuZ2U6KE4pPT5KKHt0cmFuc3BvcnQ6Tn0pfSl9KSxLKFkwLHtpY29uOksobzAse2NsYXNzTmFtZTpwMH0pLGxhYmVsOiJIVFRQIGNvZGVjIixjaGlsZHJlbjpLKFUwLHtsYWJlbDoiSFRUUCBjb2RlYyIsdmFsdWU6WD8kLmh0dHBDb2RlYzoibWpwZWciLG9wdGlvbnM6RFEsZGlzYWJsZWQ6IVZ8fCFYLG9uQ2hhbmdlOihOKT0+Sih7aHR0cENvZGVjOk59KX0pfSksSyhZMCx7aWNvbjpLKG8wLHtjbGFzc05hbWU6cDB9KSxsYWJlbDoiV2ViUlRDIGNvZGVjIixjaGlsZHJlbjpLKFUwLHtsYWJlbDoiV2ViUlRDIGNvZGVjIix2YWx1ZTokLndlYlJ0Y0NvZGVjLG9wdGlvbnM6VFEsZGlzYWJsZWQ6IUIsb25DaGFuZ2U6KE4pPT5KKHt3ZWJSdGNDb2RlYzpOfSl9KX0pLEsoWTAse2ljb246Syh4MCx7Y2xhc3NOYW1lOnAwfSksbGFiZWw6Ik1heCBzaXplIixjaGlsZHJlbjpLKFUwLHtsYWJlbDoiTWF4IHNpemUiLHZhbHVlOlN0cmluZygkLm1heERpbWVuc2lvbiksb3B0aW9uczpyMigkLm1heERpbWVuc2lvbix3USxTdHJpbmcpLGRpc2FibGVkOll8fCFWLG9uQ2hhbmdlOihOKT0+USh7bWF4RGltZW5zaW9uOk51bWJlcihOKX0pfSl9KSxLKFkwLHtpY29uOksoeDAse2NsYXNzTmFtZTpwMH0pLGxhYmVsOiJNSlBFRyBGUFMiLGNoaWxkcmVuOksoVTAse2xhYmVsOiJNSlBFRyBGUFMiLHZhbHVlOlN0cmluZygkLm1qcGVnRnBzKSxvcHRpb25zOnIyKCQubWpwZWdGcHMsWDQsU3RyaW5nKSxkaXNhYmxlZDpZfHwhVixvbkNoYW5nZTooTik9PlEoe21qcGVnRnBzOk51bWJlcihOKX0pfSl9KSxLKFkwLHtpY29uOksoeDAse2NsYXNzTmFtZTpwMH0pLGxhYmVsOiJNSlBFRyBxdWFsaXR5IixjaGlsZHJlbjpLKFUwLHtsYWJlbDoiTUpQRUcgcXVhbGl0eSIsdmFsdWU6U3RyaW5nKCQubWpwZWdRdWFsaXR5KSxvcHRpb25zOnIyKCQubWpwZWdRdWFsaXR5LEVRLChOKT0+YCR7TWF0aC5yb3VuZChOKjEwMCl9JWApLGRpc2FibGVkOll8fCFWLG9uQ2hhbmdlOihOKT0+USh7bWpwZWdRdWFsaXR5Ok51bWJlcihOKX0pfSl9KSxLKFkwLHtpY29uOksoeDAse2NsYXNzTmFtZTpwMH0pLGxhYmVsOiJILjI2NCBGUFMiLGNoaWxkcmVuOksoVTAse2xhYmVsOiJILjI2NCBGUFMiLHZhbHVlOlN0cmluZygkLmgyNjRGcHMpLG9wdGlvbnM6cjIoJC5oMjY0RnBzLFg0LFN0cmluZyksZGlzYWJsZWQ6WXx8IVZ8fCFYfHwkLmh0dHBDb2RlYz09PSJtanBlZyIsb25DaGFuZ2U6KE4pPT5RKHtoMjY0RnBzOk51bWJlcihOKX0pfSl9KSxLKFkwLHtpY29uOksoeDAse2NsYXNzTmFtZTpwMH0pLGxhYmVsOiJILjI2NCBiaXRyYXRlIixjaGlsZHJlbjpLKFUwLHtsYWJlbDoiSC4yNjQgYml0cmF0ZSIsdmFsdWU6U3RyaW5nKCQuaDI2NEJpdHJhdGUpLG9wdGlvbnM6cjIoJC5oMjY0Qml0cmF0ZSxJUSwoTik9PmAke04vMWU2fSBNYnBzYCksZGlzYWJsZWQ6WXx8IVZ8fCFYfHwkLmh0dHBDb2RlYz09PSJtanBlZyIsb25DaGFuZ2U6KE4pPT5RKHtoMjY0Qml0cmF0ZTpOdW1iZXIoTil9KX0pfSldfSl9KX1mdW5jdGlvbiBxNCh7b3BlbjokLG9uQ2xvc2U6Six1ZGlkOlEsZGV2aWNlUnVudGltZTpaLGN1cnJlbnRBcHA6WCxldmVudExvZ0V2ZW50c0VuZHBvaW50OlksYXhPdmVybGF5RW5hYmxlZDpxLG9uVG9nZ2xlQXhPdmVybGF5Okcsc3RyZWFtU2V0dGluZ3M6VixvblN0cmVhbVBsYXliYWNrU2V0dGluZ3NDaGFuZ2U6QixvblN0cmVhbUVuY29kZXJTZXR0aW5nc0NoYW5nZTpOLGFjdGl2ZUNvZGVjOnosYXZjY1N1cHBvcnRlZDpMLHN0cmVhbVNldHRpbmdzUGVuZGluZzpDLHdpZHRoOkF9KXtyZXR1cm4gSyhOMix7b3BlbjokLHdpZHRoOkEsc3R5bGU6e2JhY2tncm91bmRDb2xvcjp6Mn0sY2hpbGRyZW46W0soTDIse2NoaWxkcmVuOltLKHI5LHtjaGlsZHJlbjoiVG9vbHMifSksSyh4NSx7b25DbGljazpKfSldfSksJCYmSygiZGl2Iix7Y2xhc3NOYW1lOiJwLTMuNSBvdmVyZmxvdy15LWF1dG8gZmxleC0xIGZsZXggZmxleC1jb2wgZ2FwLTMiLGNoaWxkcmVuOltLKHA2LHt1ZGlkOlEsY3VycmVudEFwcDpYfSksSyhaNCx7dWRpZDpRLGV2ZW50c0VuZHBvaW50Oll9KSxLKEs0LHt1ZGlkOlEscnVudGltZTpafSksSyhjNix7b3ZlcmxheUVuYWJsZWQ6cSxvblRvZ2dsZU92ZXJsYXk6R30pLEsoSjQse3VkaWQ6USxidW5kbGVJZDpYPy5idW5kbGVJZD8/bnVsbH0pLEsobTYse3VkaWQ6USxleGVjOkkxfSksSyhsNix7dWRpZDpRLGJ1bmRsZUlkOlg/LmJ1bmRsZUlkPz9udWxsfSksSyhZNCx7c2V0dGluZ3M6VixvblBsYXliYWNrU2V0dGluZ3NDaGFuZ2U6QixvbkVuY29kZXJTZXR0aW5nc0NoYW5nZTpOLGFjdGl2ZUNvZGVjOnosYXZjY1N1cHBvcnRlZDpMLGVuY29kZXJTZXR0aW5nc0Rpc2FibGVkOkN9KV19KV19KX1mdW5jdGlvbiBHNCgkLEope2xldCBRO3RyeXtRPW5ldyBVUkwoJC53ZWJTb2NrZXREZWJ1Z2dlclVybCl9Y2F0Y2h7cmV0dXJuICR9bGV0IFo9YCR7US5wYXRobmFtZX0ke1Euc2VhcmNofWAsWD1KLnByb3RvY29sPT09Imh0dHBzOiI/IndzczoiOiJ3czoiLFk9Si5wcm90b2NvbD09PSJodHRwczoiPyJ3c3MiOiJ3cyIscT1gJHtKLmhvc3R9JHtafWAsRz0kLmRldnRvb2xzRnJvbnRlbmRVcmw7dHJ5e2xldCBWPW5ldyBVUkwoJC5kZXZ0b29sc0Zyb250ZW5kVXJsLGAke0oucHJvdG9jb2x9Ly8ke0ouaG9zdH1gKTtWLnNlYXJjaFBhcmFtcy5kZWxldGUoIndzIiksVi5zZWFyY2hQYXJhbXMuZGVsZXRlKCJ3c3MiKSxWLnNlYXJjaFBhcmFtcy5zZXQoWSxxKSxHPWAke1YucGF0aG5hbWV9JHtWLnNlYXJjaH0ke1YuaGFzaH1gfWNhdGNoe31yZXR1cm57Li4uJCx3ZWJTb2NrZXREZWJ1Z2dlclVybDpgJHtYfS8vJHtKLmhvc3R9JHtafWAsZGV2dG9vbHNGcm9udGVuZFVybDpHfX1mdW5jdGlvbiBpMigkLEope2ZldGNoKGMxKCJkZXZ0b29scy9oaWdobGlnaHQiKSx7bWV0aG9kOiJQT1NUIixoZWFkZXJzOnsiQ29udGVudC1UeXBlIjoiYXBwbGljYXRpb24vanNvbiJ9LGJvZHk6SlNPTi5zdHJpbmdpZnkoe3RhcmdldElkOiQsb246Sn0pLGtlZXBhbGl2ZTohMH0pLmNhdGNoKCgpPT57fSl9ZnVuY3Rpb24gczMoKXtsZXQgJD1jMSgiZGV2dG9vbHMvcmVsZWFzZSIpO3RyeXtpZih0eXBlb2YgbmF2aWdhdG9yPCJ1IiYmbmF2aWdhdG9yLnNlbmRCZWFjb24pe2xldCBKPW5ldyBCbG9iKFsie30iXSx7dHlwZToiYXBwbGljYXRpb24vanNvbiJ9KTtpZihuYXZpZ2F0b3Iuc2VuZEJlYWNvbigkLEopKXJldHVybn19Y2F0Y2h7fWZldGNoKCQse21ldGhvZDoiUE9TVCIsaGVhZGVyczp7IkNvbnRlbnQtVHlwZSI6ImFwcGxpY2F0aW9uL2pzb24ifSxib2R5OiJ7fSIsa2VlcGFsaXZlOiEwfSkuY2F0Y2goKCk9Pnt9KX1mdW5jdGlvbiBWNCgkKXtsZXQgSj0kLmNvbnRlbnREb2N1bWVudDtpZighSilyZXR1cm47bGV0IFE9KCk9PntsZXQgWT1bSl07d2hpbGUoWS5sZW5ndGgpe2xldCBxPVkucG9wKCksRz1xLnF1ZXJ5U2VsZWN0b3JBbGwoIlthcmlhLWxhYmVsXSxbdGl0bGVdIik7Zm9yKGxldCBWIG9mIEcpe2xldCBCPVYuZ2V0QXR0cmlidXRlKCJhcmlhLWxhYmVsIil8fFYudGl0bGV8fCIiO2lmKC9edG9nZ2xlIHNjcmVlbmNhc3QkL2kudGVzdChCKSlyZXR1cm4gVn1mb3IobGV0IFYgb2YgcS5xdWVyeVNlbGVjdG9yQWxsKCIqIikpaWYoVi5zaGFkb3dSb290KVkucHVzaChWLnNoYWRvd1Jvb3QpfXJldHVybiBudWxsfSxaPTAsWD0oKT0+e1orKztsZXQgWT1RKCk7aWYoWSYmWS5nZXRBdHRyaWJ1dGUoImFyaWEtcHJlc3NlZCIpIT09ImZhbHNlIil7WS5jbGljaygpO3JldHVybn1pZihaPDIwKXNldFRpbWVvdXQoWCwxMDApfTtYKCl9ZnVuY3Rpb24gQjQoJCl7bGV0IEo9W10sUT1uZXcgTWFwO2ZvcihsZXQgWiBvZiAkKXtsZXQgWD1aLmFwcE5hbWV8fFouYnVuZGxlSWR8fCJVbmtub3duIixZPVouYnVuZGxlSWR8fFgscT1RLmdldChZKTtpZighcSlxPXtrZXk6WSxhcHBOYW1lOlgsYnVuZGxlSWQ6Wi5idW5kbGVJZCx0YXJnZXRzOltdfSxRLnNldChZLHEpLEoucHVzaChZKTtxLnRhcmdldHMucHVzaChaKX1yZXR1cm4gSi5tYXAoKFopPT5RLmdldChaKSl9ZnVuY3Rpb24gTjQoJCxKKXtsZXRbUSxaXT1XKHt9KSxYPUUxKCgpPT5KLnNsaWNlKCkuc29ydCgpLmpvaW4oInwiKSxbSl0pO3JldHVybiBiKCgpPT57aWYoISQpcmV0dXJuO2xldCBZPSExO2ZvcihsZXQgcSBvZiBKKXtpZighcSljb250aW51ZTtsZXQgRz1gJHskfToke3F9YCxWPUMyLmdldChHKTtpZih0eXBlb2YgVj09PSJzdHJpbmcifHxWPT09bnVsbCl7WigoQik9PkJbcV09PT1WP0I6ey4uLkIsW3FdOlZ9KTtjb250aW51ZX1mNihJMSwkLHEpLnRoZW4oKEIpPT57aWYoWSlyZXR1cm47WigoTik9Pih7Li4uTixbcV06Qn0pKX0pfXJldHVybigpPT57WT0hMH19LFskLFhdKSxRfWZ1bmN0aW9uIEw0KHt1ZGlkOiQsdGFyZ2V0czpKLHNlbGVjdGVkOlEsb25TZWxlY3RUYXJnZXQ6WixvblJlZnJlc2g6WH0pe2xldCBZPUI0KEopLHE9WS5tYXAoKFUpPT5VLmJ1bmRsZUlkKS5maWx0ZXIoKFUpPT4hIVUpLEc9TjQoJCxxKSxbVixCXT1XKCExKSxbTix6XT1XKG51bGwpLEw9RShudWxsKSxDPUUobnVsbCk7YigoKT0+e2lmKCFWKXJldHVybjtsZXQgVT0oSCk9PntpZighQy5jdXJyZW50KXJldHVybjtpZighQy5jdXJyZW50LmNvbnRhaW5zKEgudGFyZ2V0KSlCKCExKX07cmV0dXJuIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsVSksKCk9PmRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsVSl9LFtWXSksYigoKT0+e2lmKFYpcmV0dXJuO2lmKEwuY3VycmVudClpMihMLmN1cnJlbnQsITEpLEwuY3VycmVudD1udWxsO3MzKCl9LFtWXSksYigoKT0+e2xldCBVPSgpPT5zMygpO3JldHVybiB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigicGFnZWhpZGUiLFUpLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJiZWZvcmV1bmxvYWQiLFUpLCgpPT57d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoInBhZ2VoaWRlIixVKSx3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigiYmVmb3JldW5sb2FkIixVKX19LFtdKTtsZXQgQT1RPyhRLnRpdGxlfHxRLnVybHx8US5hcHBOYW1lfHwiVW50aXRsZWQiKS5zbGljZSgwLDkwKToiU2VsZWN0IHRhcmdldCI7cmV0dXJuIEsoImRpdiIse3JlZjpDLGNsYXNzTmFtZToicmVsYXRpdmUgdy1mdWxsIG1pbi13LTAiLGNoaWxkcmVuOltLKCJidXR0b24iLHt0eXBlOiJidXR0b24iLG9uQ2xpY2s6KCk9PntCKChVKT0+e2lmKCFVKVgoKTtyZXR1cm4hVX0pfSxjbGFzc05hbWU6InctZnVsbCBtaW4tdy0wIGgtWzI2cHhdIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiBnYXAtMiBiZy1wYW5lbCB0ZXh0LXdoaXRlLzkwIGJvcmRlciBib3JkZXItd2hpdGUvMTIgcm91bmRlZC1tZCB0ZXh0LVsxMnB4XSBweC0yIGN1cnNvci1wb2ludGVyIHRleHQtbGVmdCIsImFyaWEtaGFzcG9wdXAiOiJsaXN0Ym94IiwiYXJpYS1leHBhbmRlZCI6ViwiYXJpYS1sYWJlbCI6IldlYktpdCB0YXJnZXQiLGNoaWxkcmVuOltLKCJzcGFuIix7Y2xhc3NOYW1lOiJvdmVyZmxvdy1oaWRkZW4gdGV4dC1lbGxpcHNpcyB3aGl0ZXNwYWNlLW5vd3JhcCBtaW4tdy0wIixjaGlsZHJlbjpBfSksSyhJMix7c2l6ZToxMixzdHJva2VXaWR0aDoyfSldfSksViYmSygidWwiLHtyb2xlOiJsaXN0Ym94IixjbGFzc05hbWU6ImFic29sdXRlIHRvcC1bY2FsYygxMDAlKzRweCldIGxlZnQtMCBtLTAgcC0xIGxpc3Qtbm9uZSBiZy1wYW5lbCBib3JkZXIgYm9yZGVyLXdoaXRlLzEyIHJvdW5kZWQtbGcgc2hhZG93LVswXzhweF8yNHB4X3JnYmEoMCwwLDAsMC41KV0gbWluLXctWzIyMHB4XSBtYXgtdy1bMzYwcHhdIG1heC1oLVszMjBweF0gb3ZlcmZsb3cteS1hdXRvIHotNTAiLGNoaWxkcmVuOlkubWFwKChVKT0+e2xldCBIPVUuYnVuZGxlSWQ/R1tVLmJ1bmRsZUlkXTpudWxsO3JldHVybiBLKCJsaSIse2NsYXNzTmFtZToibGlzdC1ub25lIG0tMCBwLTAiLGNoaWxkcmVuOltLKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggaXRlbXMtY2VudGVyIGdhcC0yIHB4LTEuNSBwdC0xIHBiLTAuNSB0ZXh0LVsxMnB4XSBmb250LXNlbWlib2xkIHRleHQtd2hpdGUvWzAuOTJdIixjaGlsZHJlbjpbSD9LKCJpbWciLHtzcmM6SCxhbHQ6IiIsY2xhc3NOYW1lOiJ3LTQgaC00IHJvdW5kZWQtWzNweF0gc2hyaW5rLTAgb2JqZWN0LWNvdmVyIn0pOksoInNwYW4iLHtjbGFzc05hbWU6InctNCBoLTQgcm91bmRlZC1bM3B4XSBzaHJpbmstMCBvYmplY3QtY292ZXIiLCJhcmlhLWhpZGRlbiI6InRydWUifSksSygic3BhbiIse2NsYXNzTmFtZToib3ZlcmZsb3ctaGlkZGVuIHRleHQtZWxsaXBzaXMgd2hpdGVzcGFjZS1ub3dyYXAiLGNoaWxkcmVuOlUuYXBwTmFtZX0pXX0pLEsoInVsIix7cm9sZToiZ3JvdXAiLGNsYXNzTmFtZToibGlzdC1ub25lIG0tMCBwLTAgcGwtWzI2cHhdIixjaGlsZHJlbjpVLnRhcmdldHMubWFwKChrKT0+e2xldCBGPVE/LmlkPT09ay5pZCx3PSEhay5pblVzZUJ5T3RoZXJJbnNwZWN0b3ImJiFGLFQ9KGsudGl0bGV8fGsudXJsfHxrLmFwcE5hbWV8fCJVbnRpdGxlZCIpLnNsaWNlKDAsOTApLFM9Tj09PWsuaWQmJiF3LHg9ImZsZXggZmxleC1jb2wgcHgtMiBweS1bM3B4XSByb3VuZGVkIHRleHQtWzEycHhdIGxlYWRpbmctWzEuMzVdIjtyZXR1cm4gSygibGkiLHtyb2xlOiJvcHRpb24iLCJhcmlhLXNlbGVjdGVkIjpGLCJhcmlhLWRpc2FibGVkIjp3LHRhYkluZGV4Onc/LTE6MCx0aXRsZTp3PyJBbHJlYWR5IGJlaW5nIGluc3BlY3RlZCBieSBhbm90aGVyIGRlYnVnZ2VyIjp2b2lkIDAsb25Nb3VzZUVudGVyOigpPT57aWYodylyZXR1cm47aWYoTC5jdXJyZW50JiZMLmN1cnJlbnQhPT1rLmlkKWkyKEwuY3VycmVudCwhMSk7TC5jdXJyZW50PWsuaWQseihrLmlkKSxpMihrLmlkLCEwKX0sb25Nb3VzZUxlYXZlOigpPT57aWYoTC5jdXJyZW50PT09ay5pZClpMihrLmlkLCExKSxMLmN1cnJlbnQ9bnVsbDt6KChmKT0+Zj09PWsuaWQ/bnVsbDpmKX0sb25DbGljazooKT0+e2lmKHcpcmV0dXJuO1ooay5pZCksQighMSl9LGNsYXNzTmFtZTpgZmxleCBmbGV4LWNvbCBweC0yIHB5LVszcHhdIHJvdW5kZWQgdGV4dC1bMTJweF0gbGVhZGluZy1bMS4zNV0gJHt3PyJvcGFjaXR5LTQwIGN1cnNvci1ub3QtYWxsb3dlZCBpdGFsaWMgdGV4dC13aGl0ZS84NSI6Uz8iYmctW3JnYmEoMTAsMTMyLDI1NSwwLjIyKV0gdGV4dC13aGl0ZS84NSBjdXJzb3ItcG9pbnRlciI6Rj8iYmctd2hpdGUvWzAuMDZdIHRleHQtd2hpdGUvODUgY3Vyc29yLXBvaW50ZXIiOiJ0ZXh0LXdoaXRlLzg1IGN1cnNvci1wb2ludGVyIn1gLGNoaWxkcmVuOltLKCJzcGFuIix7Y2xhc3NOYW1lOiJibG9jayBvdmVyZmxvdy1oaWRkZW4gdGV4dC1lbGxpcHNpcyB3aGl0ZXNwYWNlLW5vd3JhcCIsY2hpbGRyZW46VH0pLGsudXJsJiZrLnVybCE9PSJhYm91dDpibGFuayImJksoInNwYW4iLHtjbGFzc05hbWU6ImJsb2NrIGZvbnQtbW9ubyB0ZXh0LVsxMHB4XSB0ZXh0LXdoaXRlL1swLjQyXSBvdmVyZmxvdy1oaWRkZW4gdGV4dC1lbGxpcHNpcyB3aGl0ZXNwYWNlLW5vd3JhcCIsY2hpbGRyZW46ay51cmx9KV19LGsuaWQpfSl9KV19LFUua2V5KX0pfSldfSl9ZnVuY3Rpb24gejQoe29wZW46JCxvbkNsb3NlOkosdWRpZDpRLHRhcmdldHM6WixzZWxlY3RlZFRhcmdldElkOlgsb25TZWxlY3RUYXJnZXQ6WSxsb2FkaW5nOnEsZXJyb3I6RyxvblJlZnJlc2g6Vix3aWR0aDpCfSl7bGV0IE49WD9aLmZpbmQoKHopPT56LmlkPT09WCk/P251bGw6bnVsbDtyZXR1cm4gSyhOMix7b3BlbjokLHdpZHRoOkIsY2hpbGRyZW46W0soTDIse2NoaWxkcmVuOltaLmxlbmd0aD4wP0soTDQse3VkaWQ6USx0YXJnZXRzOlosc2VsZWN0ZWQ6TixvblNlbGVjdFRhcmdldDpZLG9uUmVmcmVzaDpWfSk6Sygic3BhbiIse2NsYXNzTmFtZToidGV4dC1bMTJweF0gdGV4dC13aGl0ZS9bMC40OF0gb3ZlcmZsb3ctaGlkZGVuIHRleHQtZWxsaXBzaXMgd2hpdGVzcGFjZS1ub3dyYXAiLGNoaWxkcmVuOnE/Ikxvb2tpbmcgZm9yIFNhZmFyaSBhbmQgaW5zcGVjdGFibGUgd2Vidmlld3MuLi4iOiJObyBpbnNwZWN0YWJsZSBTYWZhcmkgb3IgV0tXZWJWaWV3IHRhcmdldHMifSksSyh4NSx7b25DbGljazpKLGFyaWFMYWJlbDoiQ2xvc2UgV2ViS2l0IERldlRvb2xzIix0aXRsZToiQ2xvc2UiLGljb25TaXplOjE1fSldfSksSygiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4LTEgbWluLWgtMCBiZy13aGl0ZSByZWxhdGl2ZSIsY2hpbGRyZW46Rz9LKCJkaXYiLHtjbGFzc05hbWU6ImgtZnVsbCBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBwLTYgYmctcGFuZWwtZGVlcCB0ZXh0LXdoaXRlL1swLjU4XSB0ZXh0LWNlbnRlciB0ZXh0LVsxM3B4XSIsY2hpbGRyZW46R30pOk4mJiQ/SygiaWZyYW1lIix7c3JjOk4uZGV2dG9vbHNGcm9udGVuZFVybCx0aXRsZTpgV2ViS2l0IERldlRvb2xzIC0gJHtOLnRpdGxlfHxOLnVybHx8Ti5pZH1gLGNsYXNzTmFtZToidy1mdWxsIGgtZnVsbCBib3JkZXItbm9uZSBibG9jayBiZy13aGl0ZSIsb25Mb2FkOih6KT0+VjQoei5jdXJyZW50VGFyZ2V0KX0sTi5pZCk6SygiZGl2Iix7Y2xhc3NOYW1lOiJoLWZ1bGwgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgcC02IGJnLXBhbmVsLWRlZXAgdGV4dC13aGl0ZS9bMC41OF0gdGV4dC1jZW50ZXIgdGV4dC1bMTNweF0iLGNoaWxkcmVuOk4/IkRldlRvb2xzIHBhdXNlZCDigJQgb3BlbiB0aGUgcGFuZWwgdG8gcmVhdHRhY2guIjoiT3BlbiBTYWZhcmkgb3IgYW4gaW5zcGVjdGFibGUgV0tXZWJWaWV3IGluIHRoZSBzaW11bGF0b3IuIn0pfSldfSl9ZnVuY3Rpb24geVEoe2hvc3RQYXRoOiQsZXhlYzpKLHVkaWQ6USxvblVwbG9hZFN0YXJ0Olosb25VcGxvYWRQcm9ncmVzczpYLG9uVXBsb2FkRW5kOlksb25Ib3N0UGF0aERyb3A6cX0pe3E/LigkKTtsZXQgRz0kLnNwbGl0KCIvIikucG9wKCk/PyJpbWFnZSIsVj1aKEcsIm1lZGlhIik7cmV0dXJuIFgoVixudWxsKSxyNigkLEosUSkudGhlbigoKT0+WShWLCEwKSkuY2F0Y2goKEIpPT5ZKFYsITEsQiBpbnN0YW5jZW9mIEVycm9yP0IubWVzc2FnZToiQWRkIGZhaWxlZCIpKX1mdW5jdGlvbiBDNCh7ZXhlYzokLHVkaWQ6SixlbmFibGVkOlEsb25VcGxvYWRTdGFydDpaLG9uVXBsb2FkUHJvZ3Jlc3M6WCxvblVwbG9hZEVuZDpZLG9uVW5zdXBwb3J0ZWQ6cSxvbkhvc3RQYXRoRHJvcDpHfSl7bGV0W1YsQl09VyghMSksTj1FKDApLHo9RChhc3luYyhVKT0+e2lmKFUucHJldmVudERlZmF1bHQoKSxVLnN0b3BQcm9wYWdhdGlvbigpLE4uY3VycmVudD0wLEIoITEpLCFRfHwhSilyZXR1cm47bGV0IEg9VS5kYXRhVHJhbnNmZXIuZ2V0RGF0YSh1NSk7aWYoSCl7eVEoe2hvc3RQYXRoOkgsZXhlYzokLHVkaWQ6SixvblVwbG9hZFN0YXJ0Olosb25VcGxvYWRQcm9ncmVzczpYLG9uVXBsb2FkRW5kOlksb25Ib3N0UGF0aERyb3A6R30pO3JldHVybn1sZXQgaz1BcnJheS5mcm9tKFUuZGF0YVRyYW5zZmVyLmZpbGVzKTtpZihrLmxlbmd0aD09PTApcmV0dXJuO2ZvcihsZXQgRiBvZiBrKXtsZXQgdz1pNihGKTtpZighdyl7cShGKTtjb250aW51ZX1sZXQgVD1aKEYubmFtZSx3KTtzNihGLHcsJCxKLChTKT0+WChULFMpKS50aGVuKCgpPT5ZKFQsITApKS5jYXRjaCgoUyk9PlkoVCwhMSxTIGluc3RhbmNlb2YgRXJyb3I/Uy5tZXNzYWdlOiJVcGxvYWQgZmFpbGVkIikpfX0sW1EsSiwkLFosWCxZLHEsR10pLEw9RCgoVSk9PntpZihVLnByZXZlbnREZWZhdWx0KCksUSlVLmRhdGFUcmFuc2Zlci5kcm9wRWZmZWN0PSJjb3B5In0sW1FdKSxDPUQoKFUpPT57aWYoVS5wcmV2ZW50RGVmYXVsdCgpLCFRKXJldHVybjtpZihOLmN1cnJlbnQrKyxOLmN1cnJlbnQ9PT0xKUIoITApfSxbUV0pLEE9RCgoVSk9PntpZihVLnByZXZlbnREZWZhdWx0KCksTi5jdXJyZW50LS0sTi5jdXJyZW50PD0wKU4uY3VycmVudD0wLEIoITEpfSxbXSk7cmV0dXJue2lzRHJhZ092ZXI6Vixkcm9wWm9uZVByb3BzOntvbkRyYWdPdmVyOkwsb25EcmFnRW50ZXI6QyxvbkRyYWdMZWF2ZTpBLG9uRHJvcDp6fX19ZnVuY3Rpb24gVTQoJCl7bGV0IEo9bmV3IFVpbnQ4QXJyYXkoNjU1MzYpLFE9MCxaPTAsWD0xMDI0LFk9bmV3IFRleHREZWNvZGVyKCJsYXRpbjEiKSxxPShMKT0+e2lmKFErTC5sZW5ndGg+Si5sZW5ndGgpe2lmKFo+MClKLmNvcHlXaXRoaW4oMCxaLFEpLFEtPVosWj0wO2lmKFErTC5sZW5ndGg+Si5sZW5ndGgpe2xldCBDPUoubGVuZ3RoO3doaWxlKEM8UStMLmxlbmd0aClDKj0yO2xldCBBPW5ldyBVaW50OEFycmF5KEMpO0Euc2V0KEouc3ViYXJyYXkoMCxRKSksSj1BfX1KLnNldChMLFEpLFErPUwubGVuZ3RofSxHPShMKT0+e2xldCBDPU1hdGgubWluKFEtNCxMK1gpO2ZvcihsZXQgQT1MO0E8PUM7QSsrKWlmKEpbQV09PT0xMyYmSltBKzFdPT09MTAmJkpbQSsyXT09PTEzJiZKW0ErM109PT0xMClyZXR1cm4gQTtyZXR1cm4tMX0sVj0oTCxDKT0+e2xldCBBPVkuZGVjb2RlKEouc3ViYXJyYXkoTCxDKSksVT0vY29udGVudC1sZW5ndGg6XHMqKFxkKykvaS5leGVjKEEpO3JldHVybiBVP051bWJlcihVWzFdKTpudWxsfSxCPTAsTj0oTCk9PntsZXQgQz0tMTtmb3IobGV0IEE9TDtBPFEtMTtBKyspaWYoSltBXT09PTI1NSYmSltBKzFdPT09MjE2KXtDPUE7YnJlYWt9aWYoQz09PS0xKXJldHVybiBudWxsO2ZvcihsZXQgQT1NYXRoLm1heChDKzIsQik7QTxRLTE7QSsrKWlmKEpbQV09PT0yNTUmJkpbQSsxXT09PTIxNylyZXR1cm4gQj0wLHtzOkMsZTpBKzJ9O3JldHVybiBCPU1hdGgubWF4KEMrMixRLTEpLG51bGx9LHo9KCk9Pnt3aGlsZShaPFEpe2xldCBMPUcoWik7aWYoTD49MCl7bGV0IEE9VihaLEwpO2lmKEEhPW51bGwmJkE+MCl7bGV0IFU9TCs0LEg9VStBO2lmKFE8SClicmVhazskKEouc3ViYXJyYXkoVSxIKSksWj1IO2NvbnRpbnVlfX1lbHNlIGlmKFEtWjw9WClicmVhaztsZXQgQz1OKFopO2lmKCFDKWJyZWFrOyQoSi5zdWJhcnJheShDLnMsQy5lKSksWj1DLmV9aWYoWj4wKXtpZihaPFEpSi5jb3B5V2l0aGluKDAsWixRKTtRLT1aLEI9Qj5aP0ItWjowLFo9MH19O3JldHVybntwdXNoKEwpe2lmKEwubGVuZ3RoPT09MClyZXR1cm47cShMKSx6KCl9fX1mdW5jdGlvbiBINCgkKXtsZXQgSj1FKG5ldyBTZXQpLFE9RCgoWik9PntyZXR1cm4gSi5jdXJyZW50LmFkZChaKSwoKT0+e0ouY3VycmVudC5kZWxldGUoWil9fSxbXSk7cmV0dXJuIGIoKCk9PntpZighJClyZXR1cm47bGV0IFo9bmV3IEFib3J0Q29udHJvbGxlcixYPSExLFk9bnVsbCxxPW5ldyBVUkwoJCk7cS5zZWFyY2hQYXJhbXMuc2V0KCJyYXciLCIxIik7bGV0IEc9cS50b1N0cmluZygpLFY9KCk9PntpZihYfHxaLnNpZ25hbC5hYm9ydGVkfHxZKXJldHVybjtZPXNldFRpbWVvdXQoKCk9PntZPW51bGwsTigpfSwxMDAwKX0sQj0oeik9PntpZihKLmN1cnJlbnQuc2l6ZT09PTApcmV0dXJuO2xldCBMPVVSTC5jcmVhdGVPYmplY3RVUkwobmV3IEJsb2IoW3pdLHt0eXBlOiJpbWFnZS9qcGVnIn0pKTtmb3IobGV0IEMgb2YgSi5jdXJyZW50KUMoTCl9LE49YXN5bmMoKT0+e3RyeXtsZXQgTD0oYXdhaXQgZmV0Y2goRyx7c2lnbmFsOlouc2lnbmFsfSkpLmJvZHk/LmdldFJlYWRlcigpO2lmKCFMKXtWKCk7cmV0dXJufWxldCBDPVU0KEIpO3doaWxlKCEwKXtsZXR7ZG9uZTpBLHZhbHVlOlV9PWF3YWl0IEwucmVhZCgpO2lmKEEpYnJlYWs7aWYoVSYmVS5sZW5ndGgpQy5wdXNoKFUpfX1jYXRjaHt9ZmluYWxseXtWKCl9fTtyZXR1cm4gTigpLCgpPT57aWYoWD0hMCxZKWNsZWFyVGltZW91dChZKTtaLmFib3J0KCl9fSxbJF0pLHtzdWJzY3JpYmVGcmFtZTpRLGZyYW1lOm51bGx9fWZ1bmN0aW9uIEE0KCl7bGV0WyRdPVcoYzApO3JldHVybntzdXBwb3J0ZWQ6JH19ZnVuY3Rpb24gbDUoJCxKKXtyZXR1cm4gJD09PSJmaXJzdC1mcmFtZS10aW1lb3V0IiYmSj09PSJjb25uZWN0ZWQiPyJjb2RlYyI6InRyYW5zcG9ydCJ9dmFyIGs0PSJhbGwiO2NsYXNzIGEyIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IoKXtzdXBlcigiV2ViUlRDIHNpZ25hbGluZyBzdGF5ZWQgYnVzeSBmb3IgdG9vIGxvbmcuIFJlbG9hZCB0byB0cnkgYWdhaW4uIik7dGhpcy5uYW1lPSJXZWJSdGNTaWduYWxpbmdCdXN5RXJyb3IifX1jbGFzcyBjNSBleHRlbmRzIEVycm9ye2NvbnN0cnVjdG9yKCl7c3VwZXIoIldlYlJUQyBzaWduYWxpbmcgdGltZWQgb3V0LiIpO3RoaXMubmFtZT0iV2ViUnRjU2lnbmFsaW5nVGltZW91dEVycm9yIn19ZnVuY3Rpb24gZDUoJCl7cmV0dXJuICQucmVhc29uPz9uZXcgRE9NRXhjZXB0aW9uKCJUaGUgb3BlcmF0aW9uIHdhcyBhYm9ydGVkIiwiQWJvcnRFcnJvciIpfWZ1bmN0aW9uIGJRKCQsSil7aWYoSj8uYWJvcnRlZClyZXR1cm4gUHJvbWlzZS5yZWplY3QoZDUoSikpO3JldHVybiBuZXcgUHJvbWlzZSgoUSxaKT0+e2xldCBYPXNldFRpbWVvdXQoWSwkKTtmdW5jdGlvbiBZKCl7Sj8ucmVtb3ZlRXZlbnRMaXN0ZW5lcigiYWJvcnQiLHEpLFEoKX1mdW5jdGlvbiBxKCl7Y2xlYXJUaW1lb3V0KFgpLFooSj9kNShKKTpuZXcgRE9NRXhjZXB0aW9uKCJUaGUgb3BlcmF0aW9uIHdhcyBhYm9ydGVkIiwiQWJvcnRFcnJvciIpKX1KPy5hZGRFdmVudExpc3RlbmVyKCJhYm9ydCIscSx7b25jZTohMH0pfSl9YXN5bmMgZnVuY3Rpb24gTzQoe3VybDokLHNlc3Npb25JZDpKLGtlZXBhbGl2ZTpRPSExLHNlbmRCZWFjb246WixmZXRjaEltcGw6WD1mZXRjaH0pe2xldCBZPUpTT04uc3RyaW5naWZ5KHtzZXNzaW9uSWQ6Sn0pLHE9Wj8/KHR5cGVvZiBuYXZpZ2F0b3I8InUiJiZ0eXBlb2YgbmF2aWdhdG9yLnNlbmRCZWFjb249PT0iZnVuY3Rpb24iP25hdmlnYXRvci5zZW5kQmVhY29uLmJpbmQobmF2aWdhdG9yKTp2b2lkIDApO2lmKFEmJnEpdHJ5e2lmKHEoJCxuZXcgQmxvYihbWV0se3R5cGU6InRleHQvcGxhaW47Y2hhcnNldD1VVEYtOCJ9KSkpcmV0dXJufWNhdGNoe31hd2FpdCBYKCQse21ldGhvZDoiUE9TVCIsaGVhZGVyczp7IkNvbnRlbnQtVHlwZSI6ImFwcGxpY2F0aW9uL2pzb24ifSxib2R5Olksa2VlcGFsaXZlOlF9KS50aGVuKCgpPT57cmV0dXJufSwoKT0+e3JldHVybn0pfWFzeW5jIGZ1bmN0aW9uIEY0KHt1cmw6JCxib2R5Okosc2lnbmFsOlEscmVxdWVzdFRpbWVvdXRNczpaLGJ1c3lSZXRyeUludGVydmFsTXM6WCxidXN5UmV0cnlDb3VudDpZLGZldGNoSW1wbDpxPWZldGNofSl7Zm9yKGxldCBHPTA7Rzw9WTtHKyspe2lmKFE/LmFib3J0ZWQpdGhyb3cgZDUoUSk7bGV0IFY9bmV3IEFib3J0Q29udHJvbGxlcixCPSExLE49KCk9PlYuYWJvcnQoUT9kNShRKTp2b2lkIDApO1E/LmFkZEV2ZW50TGlzdGVuZXIoImFib3J0IixOLHtvbmNlOiEwfSk7bGV0IHo9c2V0VGltZW91dCgoKT0+e0I9ITAsVi5hYm9ydCgpfSxaKSxMO3RyeXtMPWF3YWl0IHEoJCx7bWV0aG9kOiJQT1NUIixoZWFkZXJzOnsiQ29udGVudC1UeXBlIjoiYXBwbGljYXRpb24vanNvbiJ9LHNpZ25hbDpWLnNpZ25hbCxib2R5Okp9KX1jYXRjaChDKXtpZihCJiYhUT8uYWJvcnRlZCl0aHJvdyBuZXcgYzU7dGhyb3cgQ31maW5hbGx5e2NsZWFyVGltZW91dCh6KSxRPy5yZW1vdmVFdmVudExpc3RlbmVyKCJhYm9ydCIsTil9aWYoTC5zdGF0dXMhPT00MDkpcmV0dXJuIEw7aWYoYXdhaXQgTC5ib2R5Py5jYW5jZWwoKSxHPT09WSl0aHJvdyBuZXcgYTI7YXdhaXQgYlEoWCxRKX10aHJvdyBuZXcgYTJ9dmFyIFNRPVt7dXJsczpbInN0dW46c3R1bi5sLmdvb2dsZS5jb206MTkzMDIiXX0se3VybHM6WyJzdHVuOnN0dW4xLmwuZ29vZ2xlLmNvbToxOTMwMiJdfV0seFE9MzAwMCx2UT0yMDAwMCxqUT00MDAwLGhRPTUwMCxSUT0zMCxnUT01MDAsbVE9NTAwMDtmdW5jdGlvbiBNNCgpe2lmKHR5cGVvZiBjcnlwdG8ucmFuZG9tVVVJRD09PSJmdW5jdGlvbiIpcmV0dXJuIGNyeXB0by5yYW5kb21VVUlEKCk7bGV0ICQ9Y3J5cHRvLmdldFJhbmRvbVZhbHVlcyhuZXcgVWludDhBcnJheSgxNikpOyRbNl09JFs2XSYxNXw2NCwkWzhdPSRbOF0mNjN8MTI4O2xldCBKPUFycmF5LmZyb20oJCwoUSk9PlEudG9TdHJpbmcoMTYpLnBhZFN0YXJ0KDIsIjAiKSkuam9pbigiIik7cmV0dXJuYCR7Si5zbGljZSgwLDgpfS0ke0ouc2xpY2UoOCwxMil9LSR7Si5zbGljZSgxMiwxNil9LSR7Si5zbGljZSgxNiwyMCl9LSR7Si5zbGljZSgyMCl9YH1mdW5jdGlvbiBXNCh7b2ZmZXJVcmw6JCxjbG9zZVVybDpKLGVuYWJsZWQ6USxjb2RlYzpaPSJoMjY0IixpY2VTZXJ2ZXJzOlh9KXtsZXRbWSxxXT1XKG51bGwpLFtHLFZdPVcobnVsbCksW0IsTl09VyhudWxsKSxbeixMXT1XKDApLEM9RSh2b2lkIDApLEE9RSghMSksVT1FKDApLEg9RCgoKT0+e2lmKEEuY3VycmVudD0hMCxVLmN1cnJlbnQ9MCxDLmN1cnJlbnQhPT12b2lkIDApd2luZG93LmNsZWFyVGltZW91dChDLmN1cnJlbnQpLEMuY3VycmVudD12b2lkIDA7VihudWxsKSxOKG51bGwpfSxbXSk7cmV0dXJuIGIoKCk9PntVLmN1cnJlbnQ9MH0sW1EsJCxKLFosWF0pLGIoKCk9PntpZighUXx8ISQpcmV0dXJuO2lmKFYobnVsbCksdHlwZW9mIFJUQ1BlZXJDb25uZWN0aW9uPiJ1Inx8dHlwZW9mIFJUQ1J0cFJlY2VpdmVyPiJ1Iil7cShudWxsKSxOKCJXZWJSVEMgaXMgbm90IHN1cHBvcnRlZCBieSB0aGlzIGJyb3dzZXIuIiksVih7c2Vzc2lvbklkOk00KCksa2luZDoicGVybWFuZW50In0pO3JldHVybn1sZXQgaz0hMSxGPW51bGwsdyxUPW51bGwsUz0hMSx4PW5ldyBBYm9ydENvbnRyb2xsZXIsJDE9TTQoKSxmPVg/Lmxlbmd0aD9YOlNRO2lmKHEobnVsbCksVihudWxsKSxOKG51bGwpLEEuY3VycmVudD0hMSxDLmN1cnJlbnQhPT12b2lkIDApd2luZG93LmNsZWFyVGltZW91dChDLmN1cnJlbnQpLEMuY3VycmVudD12b2lkIDA7bGV0IGk9KHY9ITEpPT57aWYoVClyZXR1cm4gVDtyZXR1cm4gVD1PNCh7dXJsOkosc2Vzc2lvbklkOiQxLGtlZXBhbGl2ZTp2fSksVH0scj0oKT0+dm9pZCBpKCEwKTt3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigicGFnZWhpZGUiLHIpLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJiZWZvcmV1bmxvYWQiLHIpO2xldCBsPSgpPT57cShudWxsKSxGPy5jbG9zZSgpfSxvPSh2KT0+e2lmKGt8fFMpcmV0dXJuO1M9ITAsTih2KSxWKHtzZXNzaW9uSWQ6JDEsa2luZDoicGVybWFuZW50In0pLGwoKSxpKCl9LFExPSgpPT57aWYoa3x8UylyZXR1cm47Uz0hMCxsKCksaSgpLmZpbmFsbHkoKCk9PntpZighaylWKHtzZXNzaW9uSWQ6JDEsa2luZDoiY29kZWMiLGNvZGVjOlp9KX0pfSxOMT0odik9PntpZihrfHxTKXJldHVybjtTPSEwLFYobnVsbCk7bGV0IG49VS5jdXJyZW50KyssWDE9TWF0aC5taW4oZ1EqMioqTWF0aC5taW4obiw0KSxtUSk7TihgJHt2fSBSZXRyeWluZy4uLmApLGwoKSxpKCkuZmluYWxseSgoKT0+e2lmKGspcmV0dXJuO3c9d2luZG93LnNldFRpbWVvdXQoKCk9PntpZighaylMKChMMSk9PkwxKzEpfSxYMSl9KX0sYz0odik9Pm5ldyBQcm9taXNlKChuKT0+e2lmKHYuaWNlR2F0aGVyaW5nU3RhdGU9PT0iY29tcGxldGUiKXtuKCk7cmV0dXJufWxldCBYMSxMMT0hMSxKMT0oKT0+e2lmKEwxKXJldHVybjtpZihMMT0hMCx2LnJlbW92ZUV2ZW50TGlzdGVuZXIoImljZWdhdGhlcmluZ3N0YXRlY2hhbmdlIixZMSksWDEhPT12b2lkIDApd2luZG93LmNsZWFyVGltZW91dChYMSk7bigpfSxZMT0oKT0+e2lmKHYuaWNlR2F0aGVyaW5nU3RhdGU9PT0iY29tcGxldGUiKUoxKCl9O3YuYWRkRXZlbnRMaXN0ZW5lcigiaWNlZ2F0aGVyaW5nc3RhdGVjaGFuZ2UiLFkxKSxYMT13aW5kb3cuc2V0VGltZW91dChKMSx4USl9KTtyZXR1cm4oYXN5bmMoKT0+e3RyeXtGPW5ldyBSVENQZWVyQ29ubmVjdGlvbih7aWNlU2VydmVyczpmLGljZVRyYW5zcG9ydFBvbGljeTprNH0pO2xldCB2PUYuYWRkVHJhbnNjZWl2ZXIoInZpZGVvIix7ZGlyZWN0aW9uOiJyZWN2b25seSJ9KSxuPVJUQ1J0cFJlY2VpdmVyLmdldENhcGFiaWxpdGllcygidmlkZW8iKSxYMT1aPT09ImgyNjQiPyJ2aWRlby9IMjY0IjpaPT09InZwOSI/InZpZGVvL1ZQOSI6InZpZGVvL1ZQOCI7aWYobj8uY29kZWNzLmxlbmd0aCYmInNldENvZGVjUHJlZmVyZW5jZXMiaW4gdil7bGV0IHk9WDEudG9Mb3dlckNhc2UoKTt2LnNldENvZGVjUHJlZmVyZW5jZXMoWy4uLm4uY29kZWNzLmZpbHRlcigoZyk9PmcubWltZVR5cGUudG9Mb3dlckNhc2UoKT09PXkpLC4uLm4uY29kZWNzLmZpbHRlcigoZyk9PmcubWltZVR5cGUudG9Mb3dlckNhc2UoKSE9PXkpXSl9Ri5vbnRyYWNrPSh5KT0+e2lmKGspcmV0dXJuO2lmKEEuY3VycmVudD0hMSx5LnRyYWNrLm9uZW5kZWQ9KCk9Pk4xKCJXZWJSVEMgdmlkZW8gdHJhY2sgZW5kZWQuIikscSh5LnN0cmVhbXNbMF0/P25ldyBNZWRpYVN0cmVhbShbeS50cmFja10pKSxDLmN1cnJlbnQhPT12b2lkIDApd2luZG93LmNsZWFyVGltZW91dChDLmN1cnJlbnQpO0MuY3VycmVudD13aW5kb3cuc2V0VGltZW91dCgoKT0+e2lmKEMuY3VycmVudD12b2lkIDAsa3x8QS5jdXJyZW50KXJldHVybjtsZXQgZz1GPy5jb25uZWN0aW9uU3RhdGU/PyJjbG9zZWQiO2lmKGw1KCJmaXJzdC1mcmFtZS10aW1lb3V0IixnKT09PSJjb2RlYyIpUTEoKTtlbHNlIE4xKCJXZWJSVEMgZGlkIG5vdCBlc3RhYmxpc2ggYSB2aWRlbyBwYXRoLiIpfSxqUSl9LEYub25jb25uZWN0aW9uc3RhdGVjaGFuZ2U9KCk9PntpZihrfHwhRnx8Ri5jb25uZWN0aW9uU3RhdGUhPT0iZmFpbGVkIilyZXR1cm47aWYobDUoImNvbm5lY3Rpb24tZmFpbGVkIixGLmNvbm5lY3Rpb25TdGF0ZSk9PT0idHJhbnNwb3J0IilOMSgiV2ViUlRDIGNvbm5lY3Rpb24gZmFpbGVkLiIpfTtsZXQgTDE9YXdhaXQgRi5jcmVhdGVPZmZlcigpO2F3YWl0IEYuc2V0TG9jYWxEZXNjcmlwdGlvbihMMSksYXdhaXQgYyhGKTtsZXQgSjE9Ri5sb2NhbERlc2NyaXB0aW9uO2lmKCFKMSl0aHJvdyBFcnJvcigiV2ViUlRDIG9mZmVyIHdhcyBub3QgY3JlYXRlZCIpO2xldCBZMT1hd2FpdCBGNCh7dXJsOiQsc2lnbmFsOnguc2lnbmFsLHJlcXVlc3RUaW1lb3V0TXM6dlEsYnVzeVJldHJ5SW50ZXJ2YWxNczpoUSxidXN5UmV0cnlDb3VudDpSUSxib2R5OkpTT04uc3RyaW5naWZ5KHt0eXBlOkoxLnR5cGUsc2RwOkoxLnNkcCxzZXNzaW9uSWQ6JDEsY29kZWM6WixpY2VTZXJ2ZXJzOmZ9KX0pO2lmKCFZMS5vayl7YXdhaXQgWTEuYm9keT8uY2FuY2VsKCksbyhgV2ViUlRDIG9mZmVyIGZhaWxlZDogSFRUUCAke1kxLnN0YXR1c31gKTtyZXR1cm59bGV0IEgxPWF3YWl0IFkxLmpzb24oKTtpZihrKXthd2FpdCBpKCEwKTtyZXR1cm59dHJ5e2F3YWl0IEYuc2V0UmVtb3RlRGVzY3JpcHRpb24oSDEpfWNhdGNoe28oIldlYlJUQyByZXR1cm5lZCBhbiBpbnZhbGlkIHNlc3Npb24gZGVzY3JpcHRpb24uIil9fWNhdGNoKHYpe2lmKGt8fHguc2lnbmFsLmFib3J0ZWQpcmV0dXJuO2lmKHYgaW5zdGFuY2VvZiBhMil7byh2Lm1lc3NhZ2UpO3JldHVybn1sZXQgbj12IGluc3RhbmNlb2YgYzU/IldlYlJUQyBzaWduYWxpbmcgdGltZWQgb3V0LiI6IldlYlJUQyBzaWduYWxpbmcgZmFpbGVkLiI7aWYobDUoInNpZ25hbGluZy1mYWlsZWQiLEY/LmNvbm5lY3Rpb25TdGF0ZT8/ImNsb3NlZCIpPT09InRyYW5zcG9ydCIpTjEobil9fSkoKSwoKT0+e2lmKGs9ITAsd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoInBhZ2VoaWRlIixyKSx3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigiYmVmb3JldW5sb2FkIixyKSx4LmFib3J0KCksdyE9PXZvaWQgMCl3aW5kb3cuY2xlYXJUaW1lb3V0KHcpO2lmKEMuY3VycmVudCE9PXZvaWQgMCl3aW5kb3cuY2xlYXJUaW1lb3V0KEMuY3VycmVudCksQy5jdXJyZW50PXZvaWQgMDtpKCEwKSxxKG51bGwpLEY/LmNsb3NlKCl9fSxbUSwkLEosWixYLHpdKSx7c3RyZWFtOlksZmFpbHVyZTpHLGVycm9yOkIsbWFya0ZyYW1lRGVjb2RlZDpIfX1mdW5jdGlvbiBvNSgkLEosUSxaLFg9ImxlZnQiKXtsZXQgWT1EKChMLEMpPT5YPT09ImxlZnQiP0wtQzpDLUwsW1hdKSxxPUQoKEwpPT5NYXRoLm1heChRLE1hdGgubWluKFosTCkpLFtRLFpdKSxbRyxWXT1XKCgpPT57aWYodHlwZW9mIHdpbmRvdz4idSIpcmV0dXJuIEo7bGV0IEw9d2luZG93LmxvY2FsU3RvcmFnZS5nZXRJdGVtKCQpLEM9TCE9bnVsbD9OdW1iZXIoTCk6TmFOO3JldHVybiBOdW1iZXIuaXNGaW5pdGUoQyk/cShDKTpKfSksQj10eXBlb2Ygd2luZG93PCJ1Ij9NYXRoLm1pbihaLHdpbmRvdy5pbm5lcldpZHRoLTMyKTpaLE49TWF0aC5tYXgoUSxNYXRoLm1pbihCLEcpKSx6PUQoKEwpPT57TC5wcmV2ZW50RGVmYXVsdCgpO2xldCBDPUwuY2xpZW50WCxBPU4sVT1MLmN1cnJlbnRUYXJnZXQ7VS5zZXRQb2ludGVyQ2FwdHVyZShMLnBvaW50ZXJJZCk7bGV0IEg9KEYpPT57bGV0IHc9cShBK1koQyxGLmNsaWVudFgpKTtWKHcpfSxrPShGKT0+e1UucmVsZWFzZVBvaW50ZXJDYXB0dXJlKEYucG9pbnRlcklkKSxVLnJlbW92ZUV2ZW50TGlzdGVuZXIoInBvaW50ZXJtb3ZlIixIKSxVLnJlbW92ZUV2ZW50TGlzdGVuZXIoInBvaW50ZXJ1cCIsayksVS5yZW1vdmVFdmVudExpc3RlbmVyKCJwb2ludGVyY2FuY2VsIixrKTt0cnl7d2luZG93LmxvY2FsU3RvcmFnZS5zZXRJdGVtKCQsU3RyaW5nKHEoQStZKEMsRi5jbGllbnRYKSkpKX1jYXRjaHt9fTtVLmFkZEV2ZW50TGlzdGVuZXIoInBvaW50ZXJtb3ZlIixIKSxVLmFkZEV2ZW50TGlzdGVuZXIoInBvaW50ZXJ1cCIsayksVS5hZGRFdmVudExpc3RlbmVyKCJwb2ludGVyY2FuY2VsIixrKX0sW3EsWSxOLCRdKTtyZXR1cm57d2lkdGg6TixvblBvaW50ZXJEb3duOnp9fXZhciBmUT04MDAwO2Z1bmN0aW9uIHBRKCQpe3JldHVybiJmaWxlOi8vIiskLnNwbGl0KCIvIikubWFwKGVuY29kZVVSSUNvbXBvbmVudCkuam9pbigiLyIpfWZ1bmN0aW9uIHVRKCQpe3JldHVybiAkIT09Im5vbmUifWZ1bmN0aW9uIFA0KHt0b2FzdDokLG9uUmV2ZWFsOkosb25EaXNtaXNzOlEsb25QYXVzZTpaLG9uUmVzdW1lOlh9KXtsZXRbWSxxXT1XKCExKSxHPUUobnVsbCksVj1FKG51bGwpLEI9KCk9PntpZihWLmN1cnJlbnQpY2xlYXJUaW1lb3V0KFYuY3VycmVudCk7Vi5jdXJyZW50PW51bGx9O2IoKCk9PigpPT5CKCksW10pO2xldCBOPShMKT0+e2lmKCEkLnBhdGgpe0wucHJldmVudERlZmF1bHQoKTtyZXR1cm59QigpLFooKSxWLmN1cnJlbnQ9c2V0VGltZW91dCgoKT0+e1YuY3VycmVudD1udWxsLHEoITEpLFgoKX0sZlEpLEwuZGF0YVRyYW5zZmVyLnNldERhdGEoInRleHQvcGxhaW4iLHBRKCQucGF0aCkpLEwuZGF0YVRyYW5zZmVyLnNldERhdGEodTUsJC5wYXRoKSxMLmRhdGFUcmFuc2Zlci5lZmZlY3RBbGxvd2VkPSJjb3B5IjtsZXQgQz1HLmN1cnJlbnQ7aWYoQylMLmRhdGFUcmFuc2Zlci5zZXREcmFnSW1hZ2UoQyxDLm9mZnNldFdpZHRoLzIsQy5vZmZzZXRIZWlnaHQvMik7cmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT5xKCEwKSl9LHo9KEwpPT57aWYoQigpLHEoITEpLHVRKEwuZGF0YVRyYW5zZmVyLmRyb3BFZmZlY3QpKVEoKTtlbHNlIFgoKX07cmV0dXJuIEsoImRpdiIseyJkYXRhLXRlc3RpZCI6InNjcmVlbnNob3QtdG9hc3QiLGNsYXNzTmFtZToidy1bbWluKDMyMHB4LGNhbGMoMTAwdnctMzJweCkpXSIsb25Nb3VzZUVudGVyOlosb25Nb3VzZUxlYXZlOlgsY2hpbGRyZW46WyQudGh1bWImJksoImltZyIse3JlZjpHLCJkYXRhLXRlc3RpZCI6ImRyYWctaW1hZ2UiLHNyYzokLnRodW1iLGFsdDoiIiwiYXJpYS1oaWRkZW4iOiEwLGRyYWdnYWJsZTohMSxzdHlsZTp7cG9zaXRpb246ImFic29sdXRlIix0b3A6LTk5OTksbGVmdDowLHdpZHRoOjgwLGhlaWdodDo4MCxib3JkZXJSYWRpdXM6MTIsb2JqZWN0Rml0OiJjb3ZlciIscG9pbnRlckV2ZW50czoibm9uZSJ9fSksJC5zdGF0dXM9PT0iZXJyb3IiP0soImRpdiIse2NsYXNzTmFtZToiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTIgcHgtMy41IHB5LTIuNSBiZy1wYW5lbCBib3JkZXIgYm9yZGVyLXdoaXRlLzEyIHJvdW5kZWQteGwgdGV4dC13aGl0ZS85MCB0ZXh0LVsxMnB4XSBzaGFkb3ctWzBfOHB4XzI0cHhfcmdiYSgwLDAsMCwwLjQ1KV0iLGNoaWxkcmVuOltLKCJzcGFuIix7Y2xhc3NOYW1lOiJzaXplLTEuNSByb3VuZGVkLWZ1bGwgc2hyaW5rLTAgYmctWyNmODcxNzFdIn0pLEsoInNwYW4iLHtjbGFzc05hbWU6InNlbGVjdC10ZXh0IixjaGlsZHJlbjokLm1lc3NhZ2U/PyJTY3JlZW5zaG90IGZhaWxlZCJ9KV19KTpLKCJidXR0b24iLHt0eXBlOiJidXR0b24iLG9uQ2xpY2s6SixkaXNhYmxlZDokLnN0YXR1cyE9PSJzYXZlZCIsZHJhZ2dhYmxlOiQuc3RhdHVzPT09InNhdmVkIixvbkRyYWdTdGFydDpOLG9uRHJhZ0VuZDp6LCJhcmlhLWxhYmVsIjoiT3BlbiBzY3JlZW5zaG90IGluIEZpbmRlciIsdGl0bGU6IkNsaWNrIHRvIHJldmVhbCBpbiBGaW5kZXIgwrcgZHJhZyB0byBjb3B5IHRoZSBmaWxlIixjbGFzc05hbWU6YGdyb3VwIGZsZXggdy1mdWxsIGl0ZW1zLWNlbnRlciBnYXAtMyBwbC0yIHByLTMuNSBweS0yIGJnLXBhbmVsIGJvcmRlciBib3JkZXItd2hpdGUvMTIgcm91bmRlZC14bCBzaGFkb3ctWzBfOHB4XzI0cHhfcmdiYSgwLDAsMCwwLjQ1KV0gdGV4dC1sZWZ0IGN1cnNvci1wb2ludGVyIGVuYWJsZWQ6aG92ZXI6YmctWyMyYTJhMmNdIGRpc2FibGVkOmN1cnNvci1kZWZhdWx0IFt0cmFuc2l0aW9uOmJhY2tncm91bmRfMC4xNXNfZWFzZV0gJHtZPyJpbnZpc2libGUiOiIifWAsY2hpbGRyZW46W0soImRpdiIse2NsYXNzTmFtZToic2l6ZS05IHJvdW5kZWQtbWQgb3ZlcmZsb3ctaGlkZGVuIGJnLXdoaXRlLzEwIHNocmluay0wIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHJpbmctMSByaW5nLXdoaXRlLzEwIHBvaW50ZXItZXZlbnRzLW5vbmUiLGNoaWxkcmVuOiQudGh1bWI/SygiaW1nIix7c3JjOiQudGh1bWIsYWx0OiIiLGNsYXNzTmFtZToic2l6ZS1mdWxsIG9iamVjdC1jb3ZlciIsZHJhZ2dhYmxlOiExfSk6Sygic3BhbiIse2NsYXNzTmFtZToiYmxvY2sgc2l6ZS00IHJvdW5kZWQtZnVsbCBib3JkZXItMiBib3JkZXItd2hpdGUvMzAgYm9yZGVyLXQtd2hpdGUgYW5pbWF0ZS1bZ3JpZC1zcGluXzAuOHNfbGluZWFyX2luZmluaXRlXSJ9KX0pLEsoImRpdiIse2NsYXNzTmFtZToiZmxleCBmbGV4LWNvbCBsZWFkaW5nLXRpZ2h0IHBvaW50ZXItZXZlbnRzLW5vbmUiLGNoaWxkcmVuOltLKCJzcGFuIix7Y2xhc3NOYW1lOiJ0ZXh0LVsxM3B4XSBmb250LXNlbWlib2xkIHRleHQtd2hpdGUiLGNoaWxkcmVuOiQuc3RhdHVzPT09InNhdmluZyI/IlNhdmluZyBTY3JlZW5zaG904oCmIjoiU2NyZWVuc2hvdCBTYXZlZCJ9KSwkLnN0YXR1cz09PSJzYXZlZCImJksoInNwYW4iLHtjbGFzc05hbWU6InRleHQtWzExcHhdIHRleHQtd2hpdGUvNjAiLGNoaWxkcmVuOiJPcGVuIGluIEZpbmRlciJ9KV19KSwkLnN0YXR1cz09PSJzYXZlZCImJksoeTIse2NsYXNzTmFtZToibWwtYXV0byB0ZXh0LXdoaXRlLzgwIHBvaW50ZXItZXZlbnRzLW5vbmUiLHNpemU6MTYsc3Ryb2tlV2lkdGg6Mi4yNX0pXX0pXX0pfXZhciBfND0zNTAwLEQ0PTQwMDA7ZnVuY3Rpb24gbFEoKXtyZXR1cm4gbmV3IERhdGUoKS50b0lTT1N0cmluZygpLnJlcGxhY2UoL1s6Ll0vZywiLSIpLnNsaWNlKDAsMjMpfWZ1bmN0aW9uIFQ0KCQpe2xldCBKPUUobnVsbCksUT1FKG51bGwpLFo9RShudWxsKSxYPUUobnVsbCksWT1FKG51bGwpLHE9RCgoKT0+e2lmKFouY3VycmVudCljbGVhclRpbWVvdXQoWi5jdXJyZW50KTtaLmN1cnJlbnQ9bnVsbCxYLmN1cnJlbnQ9bnVsbH0sW10pLEc9RCgoQSk9PntsZXQgVT1BPz9RLmN1cnJlbnQ/P3ZvaWQgMDtpZihxKCksWS5jdXJyZW50PW51bGwsZDIuZGlzbWlzcyhVKSxVPT09dm9pZCAwfHxRLmN1cnJlbnQ9PT1TdHJpbmcoVSkpSi5jdXJyZW50PW51bGwsUS5jdXJyZW50PW51bGx9LFtxXSksVj1EKCgpPT57bGV0IEE9Si5jdXJyZW50O2lmKEE/LnBhdGgpSTEoYG9wZW4gLVIgJHtPMShBLnBhdGgpfWApfSxbXSksQj1EKChBKT0+e3EoKTtsZXQgVT1NYXRoLm1heCgwLEEpLEg9US5jdXJyZW50O1kuY3VycmVudD1VLFguY3VycmVudD1EYXRlLm5vdygpK1UsWi5jdXJyZW50PXNldFRpbWVvdXQoKCk9PkcoSD8/dm9pZCAwKSxVKX0sW3EsR10pLE49RCgoKT0+e2lmKCFaLmN1cnJlbnR8fFguY3VycmVudD09bnVsbClyZXR1cm47WS5jdXJyZW50PU1hdGgubWF4KDAsWC5jdXJyZW50LURhdGUubm93KCkpLHEoKX0sW3FdKSx6PUQoKCk9PntsZXQgQT1ZLmN1cnJlbnQ7aWYoQT09bnVsbClyZXR1cm47QihBKX0sW0JdKSxMPUQoKEEsVT0xLzApPT57aWYoSi5jdXJyZW50PUEsUS5jdXJyZW50PUEuaWQsZDIuY3VzdG9tKChIKT0+SyhQNCx7dG9hc3Q6QSxvblJldmVhbDpWLG9uRGlzbWlzczooKT0+RyhIKSxvblBhdXNlOk4sb25SZXN1bWU6en0pLHtpZDpBLmlkLGR1cmF0aW9uOjEvMH0pLE51bWJlci5pc0Zpbml0ZShVKSlCKFUpO2Vsc2UgcSgpLFkuY3VycmVudD1udWxsfSxbcSxHLE4seixWLEJdKTtyZXR1cm57Y2FwdHVyZTpEKGFzeW5jKCk9PntpZighJClyZXR1cm47bGV0IEE9Y3J5cHRvLnJhbmRvbVVVSUQoKTtMKHtpZDpBLHN0YXR1czoic2F2aW5nIixwaGFzZToiaW4ifSk7bGV0IEg9YEY9IiR7YCRIT01FL0Rlc2t0b3Avc2VydmUtc2ltLXNjcmVlbnNob3QtJHtsUSgpfS5wbmdgfSI7IHhjcnVuIHNpbWN0bCBpbyAke08xKCQpfSBzY3JlZW5zaG90ICIkRiIgJiYgcHJpbnRmICclcycgIiRGImAsazt0cnl7bGV0IHc9YXdhaXQgSTEoSCk7aWYoaz13LnN0ZG91dC50cmltKCksdy5leGl0Q29kZSE9PTB8fCFrKXtMKHtpZDpBLHN0YXR1czoiZXJyb3IiLHBoYXNlOiJpbiIsbWVzc2FnZTp3LnN0ZGVyci50cmltKCl8fCJTY3JlZW5zaG90IGZhaWxlZCJ9LEQ0KTtyZXR1cm59fWNhdGNoKHcpe0woe2lkOkEsc3RhdHVzOiJlcnJvciIscGhhc2U6ImluIixtZXNzYWdlOncgaW5zdGFuY2VvZiBFcnJvcj93Lm1lc3NhZ2U6IlNjcmVlbnNob3QgZmFpbGVkIn0sRDQpO3JldHVybn1MKHtpZDpBLHN0YXR1czoic2F2ZWQiLHBoYXNlOiJpbiIscGF0aDprfSxfNCk7bGV0IEY9YC90bXAvc2VydmUtc2ltLXNjcmVlbnNob3QtdGh1bWItJHtBfS5wbmdgO3RyeXtsZXQgVD0oYXdhaXQgSTEoYHNpcHMgLVogMzIwICR7TzEoayl9IC0tb3V0ICR7TzEoRil9ID4vZGV2L251bGwgMj4mMSAmJiBiYXNlNjQgLWkgJHtPMShGKX07IHJtIC1mICR7TzEoRil9YCkpLnN0ZG91dC5yZXBsYWNlKC9ccysvZywiIik7aWYoVCl7bGV0IFM9Si5jdXJyZW50O2lmKFM/LmlkPT09QSlMKHsuLi5TLHRodW1iOmBkYXRhOmltYWdlL3BuZztiYXNlNjQsJHtUfWB9LF80KX19Y2F0Y2h7fX0sWyQsTF0pLHJldmVhbDpWLGRpc21pc3M6R319ZnVuY3Rpb24gRTQoe2RlZmF1bHRXaWR0aDokLHZpZXdwb3J0V2lkdGg6Six2aWV3cG9ydEhlaWdodDpRLGFzcGVjdFJhdGlvOlosb25TdGFydDpYfSl7bGV0IFk9ajUoKSxbcSxHXT1XKCExKSxbVixCXT1XKCExKSxbTix6XT1XKCExKSxMPUUobnVsbCksQz1FKFtdKSxBPUUobnVsbCksVT1FKG51bGwpLEg9RShudWxsKSxrPUUobnVsbCksRj1EKCgpPT57aWYodHlwZW9mIHdpbmRvdz4idSIpcmV0dXJuICQ7bGV0IFA9TmFOO3RyeXtsZXQgcD13aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0oZzMpO1A9cCE9bnVsbD9OdW1iZXIocCk6TmFOfWNhdGNoe31yZXR1cm4gazYoJCxKLFEsWixQKX0sW1osJCxRLEpdKSx3PUUxKCgpPT5GKCksW0ZdKSxbVCxTXT1XKHcpLHg9RSh3KSwkMT1FKCQpLGY9bTMoJCxKLFEsWiksaT1NYXRoLm1pbigkNixmKSxyPVQ/PyQsbD1hMChyLCQsSixRLFopLG89RCgoUCk9PntsZXQgcD1nNShQKTt4LmN1cnJlbnQ9cCxTKHApfSxbXSksUTE9RCgoUCk9PntpZih0eXBlb2Ygd2luZG93PiJ1Inx8JDw9MClyZXR1cm47bGV0IHA9YTAoUCwkLEosUSxaKTt0cnl7d2luZG93LmxvY2FsU3RvcmFnZS5zZXRJdGVtKGczLFN0cmluZyhwLyQpKX1jYXRjaHt9fSxbWiwkLFEsSl0pLE4xPUQoKFApPT57aWYoSC5jdXJyZW50IT1udWxsKWNsZWFyVGltZW91dChILmN1cnJlbnQpO0guY3VycmVudD1zZXRUaW1lb3V0KCgpPT57SC5jdXJyZW50PW51bGwsUTEoUCl9LEE2KX0sW1ExXSk7YigoKT0+e2lmKHF8fFYpcmV0dXJuO2xldCBQPXguY3VycmVudDtpZihQPT1udWxsKXJldHVybjtsZXQgcD1hMChQLCQsSixRLFopO2lmKHAhPT1QKW8ocCl9LFtaLCQsVixxLFEsSixvXSksYigoKT0+e2lmKCQxLmN1cnJlbnQ9PT0kKXJldHVybjskMS5jdXJyZW50PSQsbyhGKCkpfSxbJCxGLG9dKSxiKCgpPT57aWYoIXEmJiFWKXJldHVybjtsZXQgUD1kb2N1bWVudC5ib2R5LnN0eWxlLmN1cnNvcixwPWRvY3VtZW50LmJvZHkuc3R5bGUudXNlclNlbGVjdCx1PWRvY3VtZW50LmJvZHkuc3R5bGUud2Via2l0VXNlclNlbGVjdDtyZXR1cm4gZG9jdW1lbnQuYm9keS5zdHlsZS5jdXJzb3I9Im53c2UtcmVzaXplIixkb2N1bWVudC5ib2R5LnN0eWxlLnVzZXJTZWxlY3Q9Im5vbmUiLGRvY3VtZW50LmJvZHkuc3R5bGUud2Via2l0VXNlclNlbGVjdD0ibm9uZSIsKCk9Pntkb2N1bWVudC5ib2R5LnN0eWxlLmN1cnNvcj1QLGRvY3VtZW50LmJvZHkuc3R5bGUudXNlclNlbGVjdD1wLGRvY3VtZW50LmJvZHkuc3R5bGUud2Via2l0VXNlclNlbGVjdD11fX0sW3EsVl0pLGIoKCk9PntpZih0eXBlb2Ygd2luZG93PiJ1IilyZXR1cm47bGV0IFA9KCk9PntsZXQgdT14LmN1cnJlbnQ7aWYodT09bnVsbClyZXR1cm47aWYoSC5jdXJyZW50IT1udWxsKWNsZWFyVGltZW91dChILmN1cnJlbnQpLEguY3VycmVudD1udWxsO1ExKHUpfSxwPSgpPT57aWYoZG9jdW1lbnQudmlzaWJpbGl0eVN0YXRlPT09ImhpZGRlbiIpUCgpfTtyZXR1cm4gd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInBhZ2VoaWRlIixQKSxkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJ2aXNpYmlsaXR5Y2hhbmdlIixwKSwoKT0+e3dpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJwYWdlaGlkZSIsUCksZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigidmlzaWJpbGl0eWNoYW5nZSIscCl9fSxbUTFdKTtsZXQgYz1EKChQKT0+e2lmKFA+ZilyZXR1cm4gZitmMyhQLWYsZik7aWYoUDxpKXJldHVybiBpLWYzKGktUCxmKTtyZXR1cm4gUH0sW2YsaV0pLHY9RCgoKT0+e2lmKFUuY3VycmVudClVLmN1cnJlbnQoKSxVLmN1cnJlbnQ9bnVsbDtCKCExKX0sW10pLG49RCgoUCk9PntsZXQgcD1wZXJmb3JtYW5jZS5ub3coKSx1PUMuY3VycmVudDt1LnB1c2goe3Q6cCx4OlB9KTt3aGlsZSh1Lmxlbmd0aD4xJiZwLXVbMF0udD5INil1LnNoaWZ0KCl9LFtdKSxYMT1EKChQKT0+e2xldCBwPWMoUCk7aWYoQS5jdXJyZW50IT1udWxsKWNhbmNlbEFuaW1hdGlvbkZyYW1lKEEuY3VycmVudCk7QS5jdXJyZW50PXJlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+e0EuY3VycmVudD1udWxsLG8ocCksbihwKX0pfSxbYyxuLG9dKSxMMT1EKChQLHAsdSk9Pnt2KCk7bGV0IGo9eC5jdXJyZW50Pz8kO0wuY3VycmVudD17cG9pbnRlcklkOlAsc3RhcnRYOnAsc3RhcnRZOnUsc3RhcnRXaWR0aDpqfSxDLmN1cnJlbnQ9W3t0OnBlcmZvcm1hbmNlLm5vdygpLHg6an1dLFgoKSxHKCEwKX0sW3YsJCxYXSksSjE9RCgoKT0+e2xldCBQPUwuY3VycmVudDtpZihMLmN1cnJlbnQ9bnVsbCxBLmN1cnJlbnQhPW51bGwpY2FuY2VsQW5pbWF0aW9uRnJhbWUoQS5jdXJyZW50KSxBLmN1cnJlbnQ9bnVsbDtpZihQJiZQLnBvaW50ZXJJZD49MCl7bGV0IE0xPWsuY3VycmVudDtpZihNMT8uaGFzUG9pbnRlckNhcHR1cmUoUC5wb2ludGVySWQpKU0xLnJlbGVhc2VQb2ludGVyQ2FwdHVyZShQLnBvaW50ZXJJZCl9RyghMSk7bGV0IHA9eC5jdXJyZW50Pz8kLHU9TTYoQy5jdXJyZW50KTtDLmN1cnJlbnQ9W107bGV0IGo9YTAocCt1KlU2LCQsSixRLFopLEcxPWc1KE82KGosWyRdLEw2KSksejE9TWF0aC5hYnMocC1HMSk8MC41JiZNYXRoLmFicyh1KTw4O2lmKFl8fHoxKXtvKEcxKSxOMShHMSk7cmV0dXJufUIoITApLFUuY3VycmVudD1GNih7ZnJvbTpwLHRvOkcxLHZlbG9jaXR5OnUsc3RpZmZuZXNzOno2LGRhbXBpbmc6QzYsb25VcGRhdGU6byxvbkNvbXBsZXRlOigpPT57VS5jdXJyZW50PW51bGwsQighMSksTjEoRzEpfX0pfSxbWiwkLFksTjEsUSxKLG9dKTtiKCgpPT57cmV0dXJuKCk9PntpZih2KCksQS5jdXJyZW50IT1udWxsKWNhbmNlbEFuaW1hdGlvbkZyYW1lKEEuY3VycmVudCk7aWYoSC5jdXJyZW50IT1udWxsKXtpZihjbGVhclRpbWVvdXQoSC5jdXJyZW50KSx4LmN1cnJlbnQhPW51bGwpUTEoeC5jdXJyZW50KX19fSxbdixRMV0pLGIoKCk9PntpZighcSlyZXR1cm47bGV0IFA9KCk9PkoxKCkscD0oKT0+e2lmKGRvY3VtZW50LnZpc2liaWxpdHlTdGF0ZT09PSJoaWRkZW4iKUoxKCl9LHU9KGopPT57bGV0IEcxPUwuY3VycmVudDtpZighRzF8fEcxLnBvaW50ZXJJZCE9PWoucG9pbnRlcklkKXJldHVybjtqLnByZXZlbnREZWZhdWx0KCksWDEodzQoRzEsai5jbGllbnRYLGouY2xpZW50WSxaKSl9O3JldHVybiB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigiYmx1ciIsUCksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInBvaW50ZXJtb3ZlIix1LHtjYXB0dXJlOiEwLHBhc3NpdmU6ITF9KSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigicG9pbnRlcnVwIixQLCEwKSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigicG9pbnRlcmNhbmNlbCIsUCwhMCksZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigidmlzaWJpbGl0eWNoYW5nZSIscCksKCk9Pnt3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigiYmx1ciIsUCksd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoInBvaW50ZXJtb3ZlIix1LCEwKSx3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigicG9pbnRlcnVwIixQLCEwKSx3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigicG9pbnRlcmNhbmNlbCIsUCwhMCksZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigidmlzaWJpbGl0eWNoYW5nZSIscCl9fSxbWixKMSxxLFgxXSk7bGV0IFkxPUQoKFApPT57bGV0IHA9TC5jdXJyZW50O2lmKCFwfHxwLnBvaW50ZXJJZCE9PVAucG9pbnRlcklkKXJldHVybjtQLnByZXZlbnREZWZhdWx0KCksUC5zdG9wUHJvcGFnYXRpb24oKSxKMSgpfSxbSjFdKSxIMT1EKChQKT0+e2lmKFAuYnV0dG9uIT09MClyZXR1cm47UC5wcmV2ZW50RGVmYXVsdCgpLFAuc3RvcFByb3BhZ2F0aW9uKCksUC5jdXJyZW50VGFyZ2V0LnNldFBvaW50ZXJDYXB0dXJlKFAucG9pbnRlcklkKSxMMShQLnBvaW50ZXJJZCxQLmNsaWVudFgsUC5jbGllbnRZKX0sW0wxXSkseT1EKChQKT0+e2xldCBwPUwuY3VycmVudDtpZighcHx8cC5wb2ludGVySWQhPT1QLnBvaW50ZXJJZClyZXR1cm47UC5wcmV2ZW50RGVmYXVsdCgpLFgxKHc0KHAsUC5jbGllbnRYLFAuY2xpZW50WSxaKSl9LFtaLFgxXSksZz1EKChQKT0+e2xldCBwPVAua2V5PT09IkFycm93UmlnaHQifHxQLmtleT09PSJBcnJvd0Rvd24iPzE6UC5rZXk9PT0iQXJyb3dMZWZ0Inx8UC5rZXk9PT0iQXJyb3dVcCI/LTE6MDtpZihwPT09MClyZXR1cm47UC5wcmV2ZW50RGVmYXVsdCgpLHYoKTtsZXQgdT1QLnNoaWZ0S2V5PzgwOjI0LGo9ZzUoYTAobCtwKnUsJCxKLFEsWikpO28oaiksTjEoail9LFtaLHYsbCwkLE4xLFEsSixvXSk7cmV0dXJue2hhbmRsZVJlZjprLHdpZHRoOnIsY29tbWl0dGVkV2lkdGg6bCxtaW5XaWR0aDppLG1heFdpZHRoOmYsaXNSZXNpemluZzpxLGlzSW5lcnRpYTpWLGhhbmRsZUhvdmVyZWQ6TixoYW5kbGVBY3RpdmU6Tnx8cXx8VixzZXRIYW5kbGVIb3ZlcmVkOnosb25Qb2ludGVyRG93bjpIMSxvblBvaW50ZXJNb3ZlOnksb25Qb2ludGVyRW5kOlkxLG9uS2V5RG93bjpnfX1mdW5jdGlvbiB3NCgkLEosUSxaKXtsZXQgWD1KLSQuc3RhcnRYLFk9KFEtJC5zdGFydFkpKlo7cmV0dXJuICQuc3RhcnRXaWR0aCsoTWF0aC5hYnMoWCk+PU1hdGguYWJzKFkpP1g6WSl9ZnVuY3Rpb24gSTQoKXtsZXQgJD1FKG5ldyBNYXApLEo9RShuZXcgTWFwKSxRPUQoKEcpPT57bGV0IFY9Si5jdXJyZW50LmdldChHKTtpZihWKWNsZWFyVGltZW91dChWKTtKLmN1cnJlbnQuZGVsZXRlKEcpfSxbXSksWj1EKChHLFY9MS8wKT0+e2QyLmN1c3RvbSgoKT0+SyhJNix7dG9hc3Q6R30pLHtpZDpHLmlkLGR1cmF0aW9uOlZ9KX0sW10pLFg9RCgoRyxWKT0+e2xldCBCPWNyeXB0by5yYW5kb21VVUlEKCksTj17aWQ6QixuYW1lOkcsa2luZDpWLHN0YXR1czoidXBsb2FkaW5nIixwcm9ncmVzczowfTtyZXR1cm4gJC5jdXJyZW50LnNldChCLE4pLFooTiksQn0sW1pdKSxZPUQoKEcsVik9PntsZXQgQj0kLmN1cnJlbnQuZ2V0KEcpO2lmKCFCKXJldHVybjtRKEcpO2xldCBOPXsuLi5CLC4uLlZ9O2lmKCQuY3VycmVudC5zZXQoRyxOKSxaKE4sVi5zdGF0dXM9PT0ic3VjY2VzcyJ8fFYuc3RhdHVzPT09ImVycm9yIj8zMDAwOjEvMCksVi5zdGF0dXM9PT0ic3VjY2VzcyJ8fFYuc3RhdHVzPT09ImVycm9yIil7bGV0IHo9c2V0VGltZW91dCgoKT0+eyQuY3VycmVudC5kZWxldGUoRyksSi5jdXJyZW50LmRlbGV0ZShHKX0sMzAwMCk7Si5jdXJyZW50LnNldChHLHopfX0sW1EsWl0pLHE9RCgoRyxWKT0+e2xldCBCPSQuY3VycmVudC5nZXQoRyk7aWYoIUIpcmV0dXJuO2xldCBOPXsuLi5CLHByb2dyZXNzOlZ9OyQuY3VycmVudC5zZXQoRyxOKSxaKE4pfSxbWl0pO3JldHVybnthZGQ6WCx1cGRhdGU6WSxzZXRQcm9ncmVzczpxfX1mdW5jdGlvbiB5NCgkLEope2xldFtRLFpdPVcoW10pLFtYLFldPVcobnVsbCksW3EsR109VyghMSksVj1EKGFzeW5jKCk9PntpZighJClyZXR1cm47RyghMCksWShudWxsKTt0cnl7bGV0IEI9YXdhaXQgZmV0Y2goJCx7Y2FjaGU6Im5vLXN0b3JlIn0pLE49YXdhaXQgQi5qc29uKCk7aWYoIUIub2t8fE4uZXJyb3IpdGhyb3cgRXJyb3IoTi5lcnJvcnx8IkZhaWxlZCB0byBsaXN0IFdlYktpdCB0YXJnZXRzIik7bGV0IHo9dHlwZW9mIHdpbmRvdz4idSI/bnVsbDp3aW5kb3cubG9jYXRpb24sTD1OLnRhcmdldHM/P1tdO1ooej9MLm1hcCgoQyk9Pkc0KEMseikpOkwpfWNhdGNoKEIpe1koQiBpbnN0YW5jZW9mIEVycm9yP0IubWVzc2FnZToiRmFpbGVkIHRvIHN0YXJ0IFdlYktpdCBEZXZUb29scyIpfWZpbmFsbHl7RyghMSl9fSxbJF0pO3JldHVybiBiKCgpPT57aWYoIUopcmV0dXJuO1YoKTtsZXQgQj1zZXRJbnRlcnZhbCgoKT0+dm9pZCBWKCksMjUwMCk7cmV0dXJuKCk9PmNsZWFySW50ZXJ2YWwoQil9LFtKLFZdKSx7dGFyZ2V0czpRLGVycm9yOlgsbG9hZGluZzpxLHJlZnJlc2g6Vn19dmFyIGRRPTYwLGNRPTEwMDA7ZnVuY3Rpb24gYjQoJCxKLFEsWj1kUSl7bGV0W1gsWV09VyhudWxsKSxbcSxHXT1XKDApLFtWLEJdPVcoWiksW04sel09VygwKTtiKCgpPT57aWYoIUp8fCEkKXJldHVybjtsZXQgaz0hMSxGPSQuaW5jbHVkZXMoIj8iKT8iJiI6Ij8iLHc9YXN5bmMoKT0+e3RyeXtsZXQgeD1hd2FpdChhd2FpdCBmZXRjaChgJHskfSR7Rn1saW1pdD0ke1Z9Jm9mZnNldD0wYCx7Y2FjaGU6Im5vLXN0b3JlIn0pKS5qc29uKCk7aWYoaylyZXR1cm47aWYoWSh4LmRldmljZXM/P1tdKSx0eXBlb2YgeC50b3RhbD09PSJudW1iZXIiKUcoeC50b3RhbCl9Y2F0Y2h7aWYoIWspWShbXSl9fTt3KCk7bGV0IFQ9c2V0SW50ZXJ2YWwodyxRPzc1MDozMDAwKTtyZXR1cm4oKT0+e2s9ITAsY2xlYXJJbnRlcnZhbChUKX19LFskLEosTixRLFZdKTtsZXQgTD1EKCgpPT56KChrKT0+aysxKSxbXSksQz1EKCgpPT5CKChrKT0+aytaKSxbWl0pLEE9RCgoKT0+QihjUSksW10pLFU9RCgoKT0+QihaKSxbWl0pLEg9cT4oWD8ubGVuZ3RoPz8wKTtyZXR1cm57ZGV2aWNlczpYLHRvdGFsOnEscmVmcmVzaDpMLGxvYWRNb3JlOkMsbG9hZEFsbDpBLHJlc2V0UGFnZTpVLGhhc01vcmU6SH19dmFyIFM0PXttanBlZ0Zwczo2MCxtanBlZ1F1YWxpdHk6MC43LG1heERpbWVuc2lvbjowLGgyNjRCaXRyYXRlOjYwMDAwMDAsaDI2NEZwczo2MH0sb1E9e3RyYW5zcG9ydDoiaHR0cCIsaHR0cENvZGVjOiJhdXRvIix3ZWJSdGNDb2RlYzoiaDI2NCIsLi4uUzR9O2Z1bmN0aW9uIHJRKCQpe3JldHVybiB0eXBlb2YgJD09PSJudW1iZXIiJiZOdW1iZXIuaXNGaW5pdGUoJCk/JDpudWxsfWZ1bmN0aW9uIHg0KCQsSixRLFope2xldCBYPXJRKCQpO3JldHVybiBYPT1udWxsP0o6TWF0aC5taW4oWixNYXRoLm1heChRLFgpKX1mdW5jdGlvbiByNSgkLEosUSxaKXtyZXR1cm4gTWF0aC5yb3VuZCh4NCgkLEosUSxaKSl9ZnVuY3Rpb24gaVEoJCl7aWYoIUFycmF5LmlzQXJyYXkoJCl8fCQubGVuZ3RoPjE2KXJldHVybiBudWxsO2xldCBKPVtdO2ZvcihsZXQgUSBvZiAkKXtpZighUXx8dHlwZW9mIFEhPT0ib2JqZWN0IilyZXR1cm4gbnVsbDtsZXQgWj1RLnVybHM7aWYoIUFycmF5LmlzQXJyYXkoWil8fFoubGVuZ3RoPT09MHx8Wi5sZW5ndGg+MTZ8fCFaLmV2ZXJ5KChxKT0+dHlwZW9mIHE9PT0ic3RyaW5nIiYmcS5sZW5ndGg8PTIwNDgmJi9eKHN0dW58c3R1bnN8dHVybnx0dXJucyk6L2kudGVzdChxKSkpcmV0dXJuIG51bGw7bGV0e3VzZXJuYW1lOlgsY3JlZGVudGlhbDpZfT1RO2lmKFghPT12b2lkIDAmJnR5cGVvZiBYIT09InN0cmluZyIpcmV0dXJuIG51bGw7aWYoWSE9PXZvaWQgMCYmdHlwZW9mIFkhPT0ic3RyaW5nIilyZXR1cm4gbnVsbDtKLnB1c2goe3VybHM6WiwuLi50eXBlb2YgWD09PSJzdHJpbmciP3t1c2VybmFtZTpYfTp7fSwuLi50eXBlb2YgWT09PSJzdHJpbmciP3tjcmVkZW50aWFsOll9Ont9fSl9cmV0dXJuIEp9ZnVuY3Rpb24gdDMoJD17fSxKPW9RKXtsZXQgWj1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoJCwiaWNlU2VydmVycyIpP2lRKCQuaWNlU2VydmVycyk6Si5pY2VTZXJ2ZXJzLFg9Wj09PW51bGw/Si5pY2VTZXJ2ZXJzOlomJloubGVuZ3RoPjA/Wjp2b2lkIDA7cmV0dXJue3RyYW5zcG9ydDokLnRyYW5zcG9ydD09PSJodHRwInx8JC50cmFuc3BvcnQ9PT0id2VicnRjIj8kLnRyYW5zcG9ydDpKLnRyYW5zcG9ydCxodHRwQ29kZWM6JC5odHRwQ29kZWM9PT0iYXV0byJ8fCQuaHR0cENvZGVjPT09Im1qcGVnInx8JC5odHRwQ29kZWM9PT0iaDI2NCI/JC5odHRwQ29kZWM6Si5odHRwQ29kZWMsd2ViUnRjQ29kZWM6JC53ZWJSdGNDb2RlYz09PSJ2cDgifHwkLndlYlJ0Y0NvZGVjPT09InZwOSJ8fCQud2ViUnRjQ29kZWM9PT0iaDI2NCI/JC53ZWJSdGNDb2RlYzpKLndlYlJ0Y0NvZGVjLC4uLlg/e2ljZVNlcnZlcnM6WH06e30sLi4ubjIoJCxKKX19ZnVuY3Rpb24gbjIoJD17fSxKPVM0KXtyZXR1cm57bWpwZWdGcHM6cjUoJC5tanBlZ0ZwcyxKLm1qcGVnRnBzLDEsMTIwKSxtanBlZ1F1YWxpdHk6eDQoJC5tanBlZ1F1YWxpdHksSi5tanBlZ1F1YWxpdHksMC4wNSwxKSxtYXhEaW1lbnNpb246cjUoJC5tYXhEaW1lbnNpb24sSi5tYXhEaW1lbnNpb24sMCw0MDk2KSxoMjY0Qml0cmF0ZTpyNSgkLmgyNjRCaXRyYXRlLEouaDI2NEJpdHJhdGUsMWU1LDUwMDAwMDAwKSxoMjY0RnBzOnI1KCQuaDI2NEZwcyxKLmgyNjRGcHMsMSwxMjApfX1mdW5jdGlvbiBzMigkKXtyZXR1cm57bWpwZWdGcHM6JC5tanBlZ0ZwcyxtanBlZ1F1YWxpdHk6JC5tanBlZ1F1YWxpdHksbWF4RGltZW5zaW9uOiQubWF4RGltZW5zaW9uLGgyNjRCaXRyYXRlOiQuaDI2NEJpdHJhdGUsaDI2NEZwczokLmgyNjRGcHN9fWZ1bmN0aW9uIHY0KCQpe2lmKCQ/LnRyYW5zcG9ydD09PSJ3ZWJydGMiKXJldHVybiB0Myh7dHJhbnNwb3J0OiJ3ZWJydGMiLHdlYlJ0Y0NvZGVjOiQuY29kZWMsaWNlU2VydmVyczokLmljZVNlcnZlcnN9KTtyZXR1cm4gdDMoe3RyYW5zcG9ydDoiaHR0cCIsaHR0cENvZGVjOiQ/LmNvZGVjPz8iYXV0byJ9KX1mdW5jdGlvbiBlMygkLEope3JldHVybiB0Myh7Li4uJCwuLi5KfSwkKX1mdW5jdGlvbiB0MigkLEope2xldCBRPXMyKCQpLFo9bjIoey4uLlEsLi4uSn0sUSk7aWYoWi5tanBlZ0Zwcz09PVEubWpwZWdGcHMmJloubWpwZWdRdWFsaXR5PT09US5tanBlZ1F1YWxpdHkmJloubWF4RGltZW5zaW9uPT09US5tYXhEaW1lbnNpb24mJlouaDI2NEJpdHJhdGU9PT1RLmgyNjRCaXRyYXRlJiZaLmgyNjRGcHM9PT1RLmgyNjRGcHMpcmV0dXJuICQ7cmV0dXJuey4uLiQsLi4uWn19dmFyIGg0PSJzZXJ2ZS1zaW06Y29kZWMiLGFRPTMwMDA7ZnVuY3Rpb24gajQoJCl7bGV0IEo9djQoJCk7aWYoSi50cmFuc3BvcnQhPT0iaHR0cCJ8fEouaHR0cENvZGVjIT09ImF1dG8iKXJldHVybiBKO3RyeXtsZXQgUT13aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0oaDQpO2lmKFE9PT0iYXV0byJ8fFE9PT0ibWpwZWcifHxRPT09ImgyNjQiKXJldHVybiBlMyhKLHtodHRwQ29kZWM6UX0pfWNhdGNoe31yZXR1cm4gSn1mdW5jdGlvbiBSNCh7ZGV2aWNlOiQsZW5kcG9pbnQ6Sixpbml0aWFsU2V0dGluZ3M6UX0pe2xldFtaLFhdPVcoKCk9Pmo0KFEpKSxbWSxxXT1XKCExKSxHPUUoWiksVj1FKCExKSxCPUUoMCksTj1FKG51bGwpLHo9RShudWxsKTtiKCgpPT57KytCLmN1cnJlbnQ7bGV0IEE9ajQoUSk7aWYoTi5jdXJyZW50Py5hYm9ydCgpLHouY3VycmVudD8uYWJvcnQoKSxOLmN1cnJlbnQ9bnVsbCx6LmN1cnJlbnQ9bnVsbCxHLmN1cnJlbnQ9QSxWLmN1cnJlbnQ9ITEsWChBKSxxKCExKSwhSilyZXR1cm47bGV0IFU9ITEsSD0hMSxrPWFzeW5jKCk9PntpZihVfHxWLmN1cnJlbnR8fE4uY3VycmVudClyZXR1cm47bGV0IFQ9KytCLmN1cnJlbnQsUz1uZXcgQWJvcnRDb250cm9sbGVyO04uY3VycmVudD1TO3RyeXtsZXQgeD1hd2FpdCBmZXRjaChKLHtjYWNoZToibm8tc3RvcmUiLHNpZ25hbDpTLnNpZ25hbH0pO2lmKCF4Lm9rKXRocm93IEVycm9yKGBTdHJlYW0gc2V0dGluZ3MgcmVxdWVzdCBmYWlsZWQgKCR7eC5zdGF0dXN9KWApO2xldCAkMT1uMihhd2FpdCB4Lmpzb24oKSxzMihHLmN1cnJlbnQpKTtpZighUy5zaWduYWwuYWJvcnRlZCYmQi5jdXJyZW50PT09VCl7bGV0IGY9Ry5jdXJyZW50LGk9dDIoZiwkMSk7aWYoaSE9PWYpRy5jdXJyZW50PWksWChpKX1IPSExfWNhdGNoKHgpe2lmKCFTLnNpZ25hbC5hYm9ydGVkJiYhSClIPSEwLGNvbnNvbGUud2FybigiRmFpbGVkIHRvIGxvYWQgc3RyZWFtIHNldHRpbmdzIix4KX1maW5hbGx5e2lmKE4uY3VycmVudD09PVMpTi5jdXJyZW50PW51bGx9fTtrKCk7bGV0IEY9KCk9PntpZih0eXBlb2YgZG9jdW1lbnQ+InUifHxkb2N1bWVudC52aXNpYmlsaXR5U3RhdGUhPT0iaGlkZGVuIilrKCl9LHc9c2V0SW50ZXJ2YWwoRixhUSk7aWYodHlwZW9mIHdpbmRvdzwidSIpd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImZvY3VzIixGKTtpZih0eXBlb2YgZG9jdW1lbnQ8InUiKWRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoInZpc2liaWxpdHljaGFuZ2UiLEYpO3JldHVybigpPT57aWYoVT0hMCxjbGVhckludGVydmFsKHcpLHR5cGVvZiB3aW5kb3c8InUiKXdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJmb2N1cyIsRik7aWYodHlwZW9mIGRvY3VtZW50PCJ1Iilkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJ2aXNpYmlsaXR5Y2hhbmdlIixGKTtOLmN1cnJlbnQ/LmFib3J0KCksei5jdXJyZW50Py5hYm9ydCgpLE4uY3VycmVudD1udWxsLHouY3VycmVudD1udWxsfX0sWyQsSixRXSk7bGV0IEw9RCgoQSk9PntpZihBLmh0dHBDb2RlYyE9PXZvaWQgMCl0cnl7d2luZG93LmxvY2FsU3RvcmFnZS5zZXRJdGVtKGg0LEEuaHR0cENvZGVjKX1jYXRjaHt9bGV0IFU9ZTMoRy5jdXJyZW50LEEpO0cuY3VycmVudD1VLFgoVSl9LFtdKSxDPUQoKEEpPT57aWYoIUp8fFYuY3VycmVudHx8T2JqZWN0LmtleXMoQSkubGVuZ3RoPT09MClyZXR1cm47bGV0IFU9Ry5jdXJyZW50LEg9dDIoVSxBKTtHLmN1cnJlbnQ9SCxYKEgpLE4uY3VycmVudD8uYWJvcnQoKSxOLmN1cnJlbnQ9bnVsbDtsZXQgaz0rK0IuY3VycmVudCxGPW5ldyBBYm9ydENvbnRyb2xsZXI7ei5jdXJyZW50PUYsVi5jdXJyZW50PSEwLHEoITApLGZldGNoKEose21ldGhvZDoiUEFUQ0giLGhlYWRlcnM6eyJDb250ZW50LVR5cGUiOiJhcHBsaWNhdGlvbi9qc29uIn0sYm9keTpKU09OLnN0cmluZ2lmeShBKSxzaWduYWw6Ri5zaWduYWx9KS50aGVuKGFzeW5jKHcpPT57aWYoIXcub2spdGhyb3cgRXJyb3IoYFN0cmVhbSBzZXR0aW5ncyB1cGRhdGUgZmFpbGVkICgke3cuc3RhdHVzfSlgKTtsZXQgVD1uMihhd2FpdCB3Lmpzb24oKSxzMihIKSk7aWYoIUYuc2lnbmFsLmFib3J0ZWQmJkIuY3VycmVudD09PWspe2xldCBTPXQyKEcuY3VycmVudCxUKTtHLmN1cnJlbnQ9UyxYKFMpfX0pLmNhdGNoKCh3KT0+e2lmKEYuc2lnbmFsLmFib3J0ZWQpcmV0dXJuO2lmKGNvbnNvbGUud2FybigiRmFpbGVkIHRvIHVwZGF0ZSBzdHJlYW0gc2V0dGluZ3MiLHcpLEIuY3VycmVudD09PWspe2xldCBUPXQyKEcuY3VycmVudCxzMihVKSk7Ry5jdXJyZW50PVQsWChUKX19KS5maW5hbGx5KCgpPT57aWYoei5jdXJyZW50PT09Ril6LmN1cnJlbnQ9bnVsbDtpZighRi5zaWduYWwuYWJvcnRlZCYmQi5jdXJyZW50PT09aylWLmN1cnJlbnQ9ITEscSghMSl9KX0sW0pdKTtyZXR1cm57c2V0dGluZ3M6Wix1cGRhdGVQbGF5YmFjazpMLHVwZGF0ZUVuY29kZXI6QyxwZW5kaW5nOlksZW5jb2RlclNldHRpbmdzQXZhaWxhYmxlOiEhSn19dmFyICQ4PXtzdHJlYW1lZDohMSxmZWxsQmFjazohMX07ZnVuY3Rpb24gZzQoJCxKKXtzd2l0Y2goSil7Y2FzZSJkZWNvZGVkLWZyYW1lIjpyZXR1cm4gJC5zdHJlYW1lZD8kOnsuLi4kLHN0cmVhbWVkOiEwfTtjYXNlInRpbWVvdXQiOnJldHVybiAkLnN0cmVhbWVkfHwkLmZlbGxCYWNrPyQ6ey4uLiQsZmVsbEJhY2s6ITB9O2Nhc2UiZXJyb3IiOnJldHVybiAkLmZlbGxCYWNrPyQ6ey4uLiQsZmVsbEJhY2s6ITB9O2Nhc2UicmVzZXQiOnJldHVybiAkOH19dmFyIG00PTQwMDA7dmFyIG5RPXtLZXlBOjQsS2V5Qjo1LEtleUM6NixLZXlEOjcsS2V5RTo4LEtleUY6OSxLZXlHOjEwLEtleUg6MTEsS2V5SToxMixLZXlKOjEzLEtleUs6MTQsS2V5TDoxNSxLZXlNOjE2LEtleU46MTcsS2V5TzoxOCxLZXlQOjE5LEtleVE6MjAsS2V5UjoyMSxLZXlTOjIyLEtleVQ6MjMsS2V5VToyNCxLZXlWOjI1LEtleVc6MjYsS2V5WDoyNyxLZXlZOjI4LEtleVo6MjksRGlnaXQxOjMwLERpZ2l0MjozMSxEaWdpdDM6MzIsRGlnaXQ0OjMzLERpZ2l0NTozNCxEaWdpdDY6MzUsRGlnaXQ3OjM2LERpZ2l0ODozNyxEaWdpdDk6MzgsRGlnaXQwOjM5LEVudGVyOjQwLEVzY2FwZTo0MSxCYWNrc3BhY2U6NDIsVGFiOjQzLFNwYWNlOjQ0LE1pbnVzOjQ1LEVxdWFsOjQ2LEJyYWNrZXRMZWZ0OjQ3LEJyYWNrZXRSaWdodDo0OCxCYWNrc2xhc2g6NDksU2VtaWNvbG9uOjUxLFF1b3RlOjUyLEJhY2txdW90ZTo1MyxDb21tYTo1NCxQZXJpb2Q6NTUsU2xhc2g6NTYsQ2Fwc0xvY2s6NTcsRjE6NTgsRjI6NTksRjM6NjAsRjQ6NjEsRjU6NjIsRjY6NjMsRjc6NjQsRjg6NjUsRjk6NjYsRjEwOjY3LEYxMTo2OCxGMTI6NjksUHJpbnRTY3JlZW46NzAsU2Nyb2xsTG9jazo3MSxQYXVzZTo3MixJbnNlcnQ6NzMsSG9tZTo3NCxQYWdlVXA6NzUsRGVsZXRlOjc2LEVuZDo3NyxQYWdlRG93bjo3OCxBcnJvd1JpZ2h0Ojc5LEFycm93TGVmdDo4MCxBcnJvd0Rvd246ODEsQXJyb3dVcDo4MixOdW1Mb2NrOjgzLE51bXBhZERpdmlkZTo4NCxOdW1wYWRNdWx0aXBseTo4NSxOdW1wYWRTdWJ0cmFjdDo4NixOdW1wYWRBZGQ6ODcsTnVtcGFkRW50ZXI6ODgsTnVtcGFkMTo4OSxOdW1wYWQyOjkwLE51bXBhZDM6OTEsTnVtcGFkNDo5MixOdW1wYWQ1OjkzLE51bXBhZDY6OTQsTnVtcGFkNzo5NSxOdW1wYWQ4Ojk2LE51bXBhZDk6OTcsTnVtcGFkMDo5OCxOdW1wYWREZWNpbWFsOjk5LENvbnRyb2xMZWZ0OjIyNCxTaGlmdExlZnQ6MjI1LEFsdExlZnQ6MjI2LE1ldGFMZWZ0OjIyNyxDb250cm9sUmlnaHQ6MjI4LFNoaWZ0UmlnaHQ6MjI5LEFsdFJpZ2h0OjIzMCxNZXRhUmlnaHQ6MjMxfTtmdW5jdGlvbiBmNCgkKXtyZXR1cm4gblFbJF0/P251bGx9dmFyIEo4PTMyMCxwND03NjAsUTg9MzAwO2Z1bmN0aW9uIFo4KCQsSil7aWYoISQpcmV0dXJuIG51bGw7aWYoISQuZGV2aWNlKXJldHVybiAkO2lmKCEkLnByb3h5SGVscGVycylyZXR1cm4gJDtsZXQgWj1gJHskLmJhc2VQYXRoPT09Ii8iPyIiOigkLmJhc2VQYXRoPz8iIikucmVwbGFjZSgvXC8rJC8sIiIpfS9oZWxwZXIvJHtlbmNvZGVVUklDb21wb25lbnQoJC5kZXZpY2UpfWAsWD1gJHtKLnByb3RvY29sfS8vJHtKLmhvc3R9YCxZPUoucHJvdG9jb2w9PT0iaHR0cHM6Ij8id3NzOiI6IndzOiI7cmV0dXJuey4uLiQsdXJsOmAke1h9JHtafWAsc3RyZWFtVXJsOmAke1h9JHtafS9zdHJlYW0ubWpwZWdgLHdzVXJsOmAke1l9Ly8ke0ouaG9zdH0ke1p9L3dzYH19ZnVuY3Rpb24gdTQoJCxKKXtsZXQgUT1uZXcgVGV4dEVuY29kZXIoKS5lbmNvZGUoSlNPTi5zdHJpbmdpZnkoSikpLFo9bmV3IFVpbnQ4QXJyYXkoMStRLmxlbmd0aCk7cmV0dXJuIFpbMF09JCxaLnNldChRLDEpLFp9ZnVuY3Rpb24gc1EoJCxKLFE9MzIpe2xldCBaPVsuLi4kLEpdO3JldHVybiBaLmxlbmd0aD5RP1ouc2xpY2UoWi5sZW5ndGgtUSk6Wn1mdW5jdGlvbiBLOCgkLEosUT1EYXRlLm5vdygpLFo9MTUwMCl7bGV0IFg9Si5maWx0ZXIoKFkpPT5RLVkuY3JlYXRlZEF0PD1aKTtpZighJHx8JC5yZWFkeVN0YXRlIT09MSlyZXR1cm4gWDtmb3IobGV0IFkgb2YgWCkkLnNlbmQodTQoWS50YWcsWS5wYXlsb2FkKS5idWZmZXIpO3JldHVybltdfWZ1bmN0aW9uIGw0KCQsSixRLFosWD1EYXRlLm5vdygpKXtsZXQgWT1LOCgkLEosWCk7aWYoJD8ucmVhZHlTdGF0ZT09PTEpcmV0dXJuICQuc2VuZCh1NChRLFopLmJ1ZmZlciksWTtyZXR1cm4gc1EoWSx7dGFnOlEscGF5bG9hZDpaLGNyZWF0ZWRBdDpYfSl9dmFyIHRRPXtoMjY0OlsiaDI2NCIsInZwOCIsInZwOSJdLHZwOTpbInZwOSIsInZwOCJdLHZwODpbInZwOCJdfTtmdW5jdGlvbiBlUSgkLEope2xldCBRPXRRWyRdLFo9US5pbmRleE9mKEopO2lmKFo9PT0tMSlyZXR1cm4gUVswXT8/bnVsbDtyZXR1cm4gUVtaKzFdPz9udWxsfWZ1bmN0aW9uIGQ0KCQsSixRKXtpZihRLmtpbmQ9PT0icGVybWFuZW50IilyZXR1cm57dHlwZToic3dpdGNoLXRvLWh0dHAifTtpZihRLmNvZGVjIT09SilyZXR1cm4gbnVsbDtsZXQgWj1lUSgkLEopO3JldHVybiBaJiZaIT09Sj97dHlwZToicmV0cnktY29kZWMiLGNvZGVjOlp9Ont0eXBlOiJzd2l0Y2gtdG8taHR0cCJ9fWZ1bmN0aW9uIGM0KCQpe3JldHVybiAkP2AkeyQuZGV2aWNlfTokeyQucGlkfTokeyQuc3RyZWFtVXJsfTokeyQud3NVcmx9OiR7SlNPTi5zdHJpbmdpZnkoJC5zdHJlYW1TZXR0aW5ncz8/bnVsbCl9YDoiIn1mdW5jdGlvbiAkWigpe2xldFskLEpdPVcoKCk9Plo4KHUyKHdpbmRvdy5fX1NJTV9QUkVWSUVXX18pLHdpbmRvdy5sb2NhdGlvbikpLFtRLFpdPVcoITEpLFtYLFldPVcoKCk9PntsZXQgdT11Mih3aW5kb3cuX19TSU1fUFJFVklFV19fKTtpZih1KXJldHVybiB1LmRldmljZTtyZXR1cm4gbmV3IFVSTFNlYXJjaFBhcmFtcyh3aW5kb3cubG9jYXRpb24uc2VhcmNoKS5nZXQoImRldmljZSIpfSksW3EsR109VyghMSksW1YsQl09VyghMSksW04sel09VygoKT0+e2lmKHR5cGVvZiB3aW5kb3c+InUiKXJldHVybiExO3JldHVybiB3aW5kb3cuaW5uZXJXaWR0aD49UTgrNTIwfSkse3dpZHRoOkwsb25Qb2ludGVyRG93bjpDfT1vNSgic2VydmUtc2ltOmRldmljZS1zaWRlYmFyLXdpZHRoIixROCwyNDAsNjQwLCJyaWdodCIpLFtBLFVdPVcobnVsbCksSD13aW5kb3cuX19TSU1fUFJFVklFV19fLGs9SD8uZ3JpZEFwaUVuZHBvaW50Pz9jMSgiZ3JpZC9hcGkiKSxGPUg/LmdyaWRTdGFydEVuZHBvaW50Pz9jMSgiZ3JpZC9hcGkvc3RhcnQiKSx3PUg/LmdyaWRTaHV0ZG93bkVuZHBvaW50Pz9jMSgiZ3JpZC9hcGkvc2h1dGRvd24iKSxbVCxTXT1XKHt9KSxbeCwkMV09Vyh7fSksW2YsaV09Vyh7fSkscj1PYmplY3QudmFsdWVzKFQpLnNvbWUoQm9vbGVhbil8fE9iamVjdC52YWx1ZXMoeCkuc29tZShCb29sZWFuKSx7ZGV2aWNlczpsLHRvdGFsOm8scmVmcmVzaDpRMSxsb2FkTW9yZTpOMSxsb2FkQWxsOmMscmVzZXRQYWdlOnYsaGFzTW9yZTpufT1iNChrLCEwLHIpLFgxPSEhKFgmJmw/LmZpbmQoKHUpPT51LmRldmljZT09PVgpPy5oZWxwZXIpLEwxPUQoKHUpPT57WSh1KTt0cnl7bGV0IGo9bmV3IFVSTCh3aW5kb3cubG9jYXRpb24uaHJlZik7ai5zZWFyY2hQYXJhbXMuc2V0KCJkZXZpY2UiLHUpLHdpbmRvdy5oaXN0b3J5LnJlcGxhY2VTdGF0ZShudWxsLCIiLGoudG9TdHJpbmcoKSl9Y2F0Y2h7fX0sW10pLEoxPUQoYXN5bmModSxqPTIwMDAwKT0+e2xldCBHMT1EYXRlLm5vdygpK2o7d2hpbGUoRGF0ZS5ub3coKTxHMSl7dHJ5e2lmKCgoYXdhaXQoYXdhaXQgZmV0Y2goayx7Y2FjaGU6Im5vLXN0b3JlIn0pKS5qc29uKCkpLmRldmljZXM/P1tdKS5zb21lKChXMSk9PlcxLmRldmljZT09PXUmJlcxLmhlbHBlcikpcmV0dXJuITB9Y2F0Y2h7fWF3YWl0IG5ldyBQcm9taXNlKCh6MSk9PnNldFRpbWVvdXQoejEsNDAwKSl9cmV0dXJuITF9LFtrXSksWTE9RChhc3luYyh1KT0+e1MoKGopPT4oey4uLmosW3VdOiEwfSkpLGkoKGopPT4oey4uLmosW3VdOm51bGx9KSk7dHJ5e2xldCBqPWF3YWl0IGZldGNoKEYse21ldGhvZDoiUE9TVCIsaGVhZGVyczp7IkNvbnRlbnQtVHlwZSI6ImFwcGxpY2F0aW9uL2pzb24ifSxib2R5OkpTT04uc3RyaW5naWZ5KHt1ZGlkOnV9KX0pLEcxPWF3YWl0IGouanNvbigpLmNhdGNoKCgpPT4oe30pKTtpZighai5va3x8IUcxLm9rKXtpKCh6MSk9Pih7Li4uejEsW3VdOkcxLmVycm9yPz9gSFRUUCAke2ouc3RhdHVzfWB9KSk7cmV0dXJufWF3YWl0IEoxKHUpfWNhdGNoKGope2koKEcxKT0+KHsuLi5HMSxbdV06aj8ubWVzc2FnZT8/IlJlcXVlc3QgZmFpbGVkIn0pKX1maW5hbGx5e1MoKGopPT4oey4uLmosW3VdOiExfSkpLFExKCl9fSxbRixKMSxRMV0pLEgxPUQoYXN5bmModSk9PnskMSgoaik9Pih7Li4uaixbdV06ITB9KSksaSgoaik9Pih7Li4uaixbdV06bnVsbH0pKTt0cnl7bGV0IGo9YXdhaXQgZmV0Y2godyx7bWV0aG9kOiJQT1NUIixoZWFkZXJzOnsiQ29udGVudC1UeXBlIjoiYXBwbGljYXRpb24vanNvbiJ9LGJvZHk6SlNPTi5zdHJpbmdpZnkoe3VkaWQ6dX0pfSksRzE9YXdhaXQgai5qc29uKCkuY2F0Y2goKCk9Pih7fSkpO2lmKCFqLm9rfHwhRzEub2spaSgoejEpPT4oey4uLnoxLFt1XTpHMS5lcnJvcj8/YEhUVFAgJHtqLnN0YXR1c31gfSkpfWNhdGNoKGope2koKEcxKT0+KHsuLi5HMSxbdV06aj8ubWVzc2FnZT8/IlJlcXVlc3QgZmFpbGVkIn0pKX1maW5hbGx5eyQxKChqKT0+KHsuLi5qLFt1XTohMX0pKSxRMSgpfX0sW3csUTFdKTtiKCgpPT57aWYoWClyZXR1cm47aWYoJD8uZGV2aWNlKXtZKCQuZGV2aWNlKTtyZXR1cm59aWYoIWx8fGwubGVuZ3RoPT09MClyZXR1cm47bGV0IHU9bC5maW5kKChqKT0+ai5oZWxwZXIpPz9sLmZpbmQoKGopPT5qLnN0YXRlPT09IkJvb3RlZCIpPz9sWzBdO2lmKHUpWSh1LmRldmljZSl9LFtYLCQ/LmRldmljZSxsXSksYigoKT0+e2xldCB1PWAke2MxKCJhcGkvZXZlbnRzIil9JHtYP2A/ZGV2aWNlPSR7ZW5jb2RlVVJJQ29tcG9uZW50KFgpfWA6IiJ9YCxqPSh6MSk9PntKKChNMSk9PntpZih6MT1aOCh1Mih6MSksd2luZG93LmxvY2F0aW9uKSxjNChNMSk9PT1jNCh6MSkpcmV0dXJuIE0xO2lmKHoxKXdpbmRvdy5fX1NJTV9QUkVWSUVXX189ejE7ZWxzZSBpZih3aW5kb3cuX19TSU1fUFJFVklFV19fKXtsZXR7YmFzZVBhdGg6VzEsZXhlY1Rva2VuOmkxfT13aW5kb3cuX19TSU1fUFJFVklFV19fO3dpbmRvdy5fX1NJTV9QUkVWSUVXX189e2Jhc2VQYXRoOlcxLGV4ZWNUb2tlbjppMX19cmV0dXJuIHoxfSl9LEcxPWYwKHUpO3JldHVybiBHMS5vbm1lc3NhZ2U9KHoxKT0+e3RyeXtqKHUyKEpTT04ucGFyc2UoejEuZGF0YSkpKX1jYXRjaHt9fSwoKT0+RzEuY2xvc2UoKX0sW1gsWDFdKSxiKCgpPT57aWYoISQ/LmxvZ3NFbmRwb2ludClyZXR1cm47bGV0IHU9ZjAoJC5sb2dzRW5kcG9pbnQpLGo9bmV3IE1hcCxHMT1bIiM4YmU5ZmQiLCIjNTBmYTdiIiwiI2ZmYjg2YyIsIiNmZjc5YzYiLCIjYmQ5M2Y5IiwiI2YxZmE4YyIsIiM2MjcyYTQiLCIjZmY1NTU1IiwiIzY5ZmY5NCIsIiNkNmFjZmYiLCIjZmZmZmE1IiwiI2E0ZmZmZiIsIiNmZjZlNmUiLCIjY2FhOWZhIiwiIzVhZjc4ZSJdO2Z1bmN0aW9uIHoxKGkxKXtsZXQgRjE9ai5nZXQoaTEpO2lmKCFGMSl7bGV0IHYxPTA7Zm9yKGxldCBQMT0wO1AxPGkxLmxlbmd0aDtQMSsrKXYxPSh2MTw8NSktdjEraTEuY2hhckNvZGVBdChQMSl8MDtGMT1HMVtNYXRoLmFicyh2MSklRzEubGVuZ3RoXSxqLnNldChpMSxGMSl9cmV0dXJuIEYxfWxldCBNMT0iIixXMT0hMTtyZXR1cm4gdS5vbm1lc3NhZ2U9KGkxKT0+e3RyeXtsZXQgRjE9SlNPTi5wYXJzZShpMS5kYXRhKSx2MT1GMS5wcm9jZXNzSW1hZ2VQYXRoPy5zcGxpdCgiLyIpLnBvcCgpPz9GMS5zZW5kZXJJbWFnZVBhdGg/LnNwbGl0KCIvIikucG9wKCk/PyIiLFAxPUYxLnN1YnN5c3RlbT8/IiIsdTE9RjEuY2F0ZWdvcnk/PyIiLEMxPUYxLmV2ZW50TWVzc2FnZT8/IiI7aWYoIUMxKXJldHVybjtpZih2MSE9PU0xKXtpZihXMSljb25zb2xlLmdyb3VwRW5kKCk7bGV0IFIxPXoxKHYxKTtjb25zb2xlLmdyb3VwQ29sbGFwc2VkKGAlYyR7djF9JHtQMT9gICVjJHtQMX0ke3UxPyI6Iit1MToiIn1gOiIifWAsYGNvbG9yOiR7UjF9O2ZvbnQtd2VpZ2h0OmJvbGRgLC4uLlAxP1siY29sb3I6Izg4ODtmb250LXdlaWdodDpub3JtYWwiXTpbXSksVzE9ITAsTTE9djF9bGV0IHcxPShGMS5tZXNzYWdlVHlwZT8/IiIpLnRvTG93ZXJDYXNlKCksbDE9UDEmJnYxPT09TTE/YCVjJHt1MXx8UDF9JWMgYDoiIix0MT1sMT9bImNvbG9yOiM4ODg7Zm9udC1zdHlsZTppdGFsaWMiLCJjb2xvcjppbmhlcml0Il06W107aWYodzE9PT0iZmF1bHQifHx3MT09PSJlcnJvciIpY29uc29sZS5sb2coYCR7bDF9JWMke0MxfWAsLi4udDEsImNvbG9yOiNmZjU1NTUiKTtlbHNlIGlmKHcxPT09ImRlYnVnIiljb25zb2xlLmxvZyhgJHtsMX0lYyR7QzF9YCwuLi50MSwiY29sb3I6IzYyNzJhNCIpO2Vsc2UgY29uc29sZS5sb2coYCR7bDF9JWMke0MxfWAsLi4udDEsImNvbG9yOmluaGVyaXQiKX1jYXRjaHt9fSwoKT0+e2lmKFcxKWNvbnNvbGUuZ3JvdXBFbmQoKTt1LmNsb3NlKCl9fSxbJD8ubG9nc0VuZHBvaW50XSk7bGV0IHk9WD8/JD8uZGV2aWNlPz9udWxsLGc9bD8uZmluZCgodSk9PnUuZGV2aWNlPT09eSk/P251bGwsUD0hISQmJiQuZGV2aWNlPT09eSxwO2lmKFAmJiQpcD1LKEpaLHtjb25maWc6JCxkZXZpY2VOYW1lOmc/Lm5hbWU/P251bGwsZGV2aWNlUnVudGltZTpnPy5ydW50aW1lPz9udWxsLGNocm9tZTpnPy5jaHJvbWU/P251bGwsYXhPdmVybGF5RW5hYmxlZDpxLHNldEF4T3ZlcmxheUVuYWJsZWQ6RyxkZXZ0b29sc09wZW46VixzZXREZXZ0b29sc09wZW46QixncmlkT3BlbjpOLHNldEdyaWRPcGVuOnosZ3JpZFBhbmVsV2lkdGg6TCxzZWxlY3RlZERldnRvb2xzVGFyZ2V0SWQ6QSxzZXRTZWxlY3RlZERldnRvb2xzVGFyZ2V0SWQ6VSxzdHJlYW1pbmc6USxzZXRTdHJlYW1pbmc6Wn0pO2Vsc2V7bGV0IHU9Tj9MKzM2OjI0O3A9SygiZGl2Iix7Y2xhc3NOYW1lOiJoLXNjcmVlbiBmbGV4IGZsZXgtY29sIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBnYXAtMyBiZy1wYWdlIGZvbnQtc3lzdGVtIGJveC1ib3JkZXIgW3RyYW5zaXRpb246cGFkZGluZ18wLjI1c19lYXNlXSIsc3R5bGU6e3BhZGRpbmdMZWZ0OnUscGFkZGluZ1JpZ2h0OjI0fSxjaGlsZHJlbjpnP0sobzkse25hbWU6Zy5uYW1lLHJ1bnRpbWU6Zy5ydW50aW1lLGNocm9tZTpnLmNocm9tZT8/bnVsbCxwbGFjZWhvbGRlckFzc2V0OmcucGxhY2Vob2xkZXJBc3NldD8/bnVsbCxidXN5OiEhZy5oZWxwZXJ8fCEhVFtnLmRldmljZV0sYnVzeUxhYmVsOmcuaGVscGVyPyJDb25uZWN0aW5n4oCmIjoiU3RhcnRpbmfigKYiLGVycm9yOmZbZy5kZXZpY2VdPz9udWxsLG9uU3RhcnQ6KCk9PlkxKGcuZGV2aWNlKX0pOksoImRpdiIse2NsYXNzTmFtZToiZmxleCBmbGV4LWNvbCBpdGVtcy1jZW50ZXIgZ2FwLTMgdGV4dC1jZW50ZXIiLGNoaWxkcmVuOltLKCJoMSIse2NsYXNzTmFtZToidGV4dC1bMThweF0gbS0wIHRleHQtd2hpdGUvOTAiLGNoaWxkcmVuOiJObyBzaW11bGF0b3JzIGF2YWlsYWJsZSJ9KSxLKCJwIix7Y2xhc3NOYW1lOiJ0ZXh0LXdoaXRlLzU1IHRleHQtWzE0cHhdIG1heC13LTEyMCIsY2hpbGRyZW46WyJDcmVhdGUgYSBzaW11bGF0b3IgaW4gWGNvZGUsIG9yIHN0YXJ0IG9uZSB3aXRoIiwiICIsSygiY29kZSIse2NsYXNzTmFtZToiYmctWyMyMjJdIHB4LTEuNSBweS0wLjUgcm91bmRlZCB0ZXh0LVsxM3B4XSIsY2hpbGRyZW46ImJ1bnggc2VydmUtc2ltIC0tZGV0YWNoIn0pLCIuIl19KV19KX0pfXJldHVybiBLKFoxLHtjaGlsZHJlbjpbcCxLKEU2LHt9KSxLKHQ5LHtvcGVuOk4sb25DbG9zZTooKT0+eighMSksd2lkdGg6TCxzaWRlOiJsZWZ0IixkZXZpY2VzOmwsdG90YWw6byxoYXNNb3JlOm4sb25Mb2FkTW9yZTpOMSxvbkxvYWRBbGw6YyxvblJlc2V0UGFnZTp2LHNlbGVjdGVkVWRpZDp5LG9uU2VsZWN0OkwxLHN0YXJ0aW5nOlQsc2h1dHRpbmdEb3duOngsb25TaHV0ZG93bjpIMX0pLEsodjUse3BhbmVsV2lkdGg6TCx2aXNpYmxlOk4sb25Qb2ludGVyRG93bjpDLGFyaWFMYWJlbDoiUmVzaXplIHNpbXVsYXRvcnMgc2lkZWJhciIsc2lkZToibGVmdCJ9KSxLKGY5LHtvcGVuOk4sb25DbGljazooKT0+eighMCl9KV19KX1mdW5jdGlvbiBKWih7Y29uZmlnOiQsZGV2aWNlTmFtZTpKLGRldmljZVJ1bnRpbWU6USxjaHJvbWU6WixheE92ZXJsYXlFbmFibGVkOlgsc2V0QXhPdmVybGF5RW5hYmxlZDpZLGRldnRvb2xzT3BlbjpxLHNldERldnRvb2xzT3BlbjpHLGdyaWRPcGVuOlYsc2V0R3JpZE9wZW46QixncmlkUGFuZWxXaWR0aDpOLHNlbGVjdGVkRGV2dG9vbHNUYXJnZXRJZDp6LHNldFNlbGVjdGVkRGV2dG9vbHNUYXJnZXRJZDpMLHN0cmVhbWluZzpDLHNldFN0cmVhbWluZzpBfSl7YigoKT0+e2RvY3VtZW50LnRpdGxlPUo/YFNpbXVsYXRvciAtICR7Sn1gOiJTaW11bGF0b3IgUHJldmlldyJ9LFtKXSk7bGV0IFU9RTAoSiksSD15NCgkLmRldnRvb2xzRW5kcG9pbnQ/P2MxKCJkZXZ0b29scyIpLHEpO2IoKCk9PntpZighcSlyZXR1cm47aWYoeiYmSC50YXJnZXRzLnNvbWUoKFIpPT5SLmlkPT09eikpcmV0dXJuO0woSC50YXJnZXRzLmxlbmd0aD09PTE/SC50YXJnZXRzWzBdLmlkOm51bGwpfSxbcSxILnRhcmdldHMseixMXSksYigoKT0+e0wobnVsbCl9LFskLmRldmljZSxMXSk7bGV0IGs9QTQoKSxGPVI0KHtkZXZpY2U6JC5kZXZpY2UsZW5kcG9pbnQ6JC5zdHJlYW1TZXR0aW5nc0VuZHBvaW50LGluaXRpYWxTZXR0aW5nczokLnN0cmVhbVNldHRpbmdzfSksdz1GLnNldHRpbmdzLFQ9Ri51cGRhdGVQbGF5YmFjayxTPXcudHJhbnNwb3J0PT09IndlYnJ0YyIseD1FKG51bGwpLCQxPVMsW2YsaV09VyhudWxsKSxyPXcud2ViUnRjQ29kZWMsbD1mPz9yLG89VzQoe29mZmVyVXJsOkkzKCQpLGNsb3NlVXJsOlM5KCQpLGVuYWJsZWQ6JDEsY29kZWM6bCxpY2VTZXJ2ZXJzOncuaWNlU2VydmVyc30pLFtRMSxOMV09bDAoZzQsJDgpLFtjXT1XKCgpPT5uZXcgVVJMU2VhcmNoUGFyYW1zKHdpbmRvdy5sb2NhdGlvbi5zZWFyY2gpLmdldCgiY29kZWMiKT09PSJtanBlZyIpLHY9dy5odHRwQ29kZWM9PT0ibWpwZWciLG49ISQxJiYhdiYmay5zdXBwb3J0ZWQmJiFRMS5mZWxsQmFjayYmIWMsWDE9SDQobnx8JDE/bnVsbDpiOSgkKSk7YigoKT0+e0EoITEpLE4xKCJyZXNldCIpLGkobnVsbCl9LFskLnN0cmVhbVVybCxBLHcudHJhbnNwb3J0LHcuaHR0cENvZGVjLHcud2ViUnRjQ29kZWNdKSxiKCgpPT57aWYoIVN8fCFvLmZhaWx1cmUpcmV0dXJuO2lmKHguY3VycmVudD09PW8uZmFpbHVyZS5zZXNzaW9uSWQpcmV0dXJuO3guY3VycmVudD1vLmZhaWx1cmUuc2Vzc2lvbklkO2xldCBSPWQ0KHIsbCxvLmZhaWx1cmUpO2lmKCFSKXJldHVybjtpZihSLnR5cGU9PT0ic3dpdGNoLXRvLWh0dHAiKXtUKHt0cmFuc3BvcnQ6Imh0dHAifSk7cmV0dXJufWkoUi5jb2RlYyl9LFtyLGwsVCxTLG8uZmFpbHVyZV0pLGIoKCk9PntpZighbilyZXR1cm47bGV0IFI9c2V0VGltZW91dCgoKT0+TjEoInRpbWVvdXQiKSxtNCk7cmV0dXJuKCk9PmNsZWFyVGltZW91dChSKX0sW24sJC5zdHJlYW1VcmxdKTtsZXRbTDEsSjFdPVcobnVsbCksW1kxLEgxXT1XKG51bGwpLHk9WTEsZz1MMT8/eT8/WTIoVSxKKSxQPUE1KFUsZykscD1xMihVLGcpLHU9SDUoZyksaj1aMihnKSxHMT1qP2oud2lkdGgvai5oZWlnaHQ6MSx6MT1nMChnKSxNMT0hIVomJiF6MSxXMT1NMT9aLmZyYW1lLndpZHRoL1ouc2NyZWVuLndpZHRoOjEsaTE9cCpXMSxGMT1NMT9aLmZyYW1lLndpZHRoL1ouZnJhbWUuaGVpZ2h0OkcxLHYxPU0xP2Ake1ouZnJhbWUud2lkdGh9IC8gJHtaLmZyYW1lLmhlaWdodH1gOnUsUDE9RShudWxsKSx1MT1FKFtdKTtiKCgpPT57bGV0IFI9ITEsZT1udWxsLE09bnVsbDt1MS5jdXJyZW50PVtdO2xldCBPPSgpPT57aWYoUnx8ZSlyZXR1cm47ZT1zZXRUaW1lb3V0KCgpPT57ZT1udWxsLEkoKX0sMTAwMCl9LEk9KCk9PntsZXQgaD1uZXcgV2ViU29ja2V0KCQud3NVcmwpO2guYmluYXJ5VHlwZT0iYXJyYXlidWZmZXIiLE09aCxQMS5jdXJyZW50PWgsaC5vbm9wZW49KCk9Pnt1MS5jdXJyZW50PUs4KGgsdTEuY3VycmVudCl9LGgub25tZXNzYWdlPSh0KT0+e2lmKCEodC5kYXRhIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpKXJldHVybjtsZXQgcTE9bmV3IFVpbnQ4QXJyYXkodC5kYXRhKTtpZihxMS5sZW5ndGg8MXx8cTFbMF0hPT0xMzApcmV0dXJuO3RyeXtsZXQgVTE9SlNPTi5wYXJzZShuZXcgVGV4dERlY29kZXIoKS5kZWNvZGUocTEuc3ViYXJyYXkoMSkpKTtpZihVMS53aWR0aDw9MHx8VTEuaGVpZ2h0PD0wKXJldHVybjtIMSgoXzEpPT5fMSYmXzEud2lkdGg9PT1VMS53aWR0aCYmXzEuaGVpZ2h0PT09VTEuaGVpZ2h0JiZfMS5vcmllbnRhdGlvbj09PVUxLm9yaWVudGF0aW9uP18xOlUxKX1jYXRjaHt9fSxoLm9uY2xvc2U9KCk9PntpZihQMS5jdXJyZW50PT09aClQMS5jdXJyZW50PW51bGw7TygpfSxoLm9uZXJyb3I9KCk9PntoLmNsb3NlKCl9fTtyZXR1cm4gSSgpLCgpPT57aWYoUj0hMCxlKWNsZWFyVGltZW91dChlKTtpZihQMS5jdXJyZW50PT09TSlQMS5jdXJyZW50PW51bGw7TT8uY2xvc2UoKX19LFskLndzVXJsXSk7bGV0IEMxPUQoKFIsZSk9Pnt1MS5jdXJyZW50PWw0KFAxLmN1cnJlbnQsdTEuY3VycmVudCxSLGUpfSxbXSksdzE9RCgoUik9PkMxKDMsUiksW0MxXSksbDE9RCgoUik9PkMxKDUsUiksW0MxXSksdDE9RCgoUik9PkMxKDQse2J1dHRvbjpSfSksW0MxXSksUjE9RCgoe3BoYXNlOlIsYnV0dG9uOmV9KT0+e2lmKGUudXNhZ2VQYWdlPT1udWxsfHxlLnVzYWdlPT1udWxsKXJldHVybjtDMSg0LHtidXR0b246ZS5uYW1lLHBhZ2U6ZS51c2FnZVBhZ2UsdXNhZ2U6ZS51c2FnZSxwaGFzZTpSfSl9LFtDMV0pLGExPUQoKFIpPT5DMSgxMCx7ZGVsdGE6Un0pLFtDMV0pLGUxPUQoKFIpPT5DMSgxMSxSKSxbQzFdKSxWMD1EKChSKT0+e0oxKChlKT0+ZSYmZS53aWR0aD09PVIud2lkdGgmJmUuaGVpZ2h0PT09Ui5oZWlnaHQmJmUub3JpZW50YXRpb249PT1SLm9yaWVudGF0aW9uP2U6Uil9LFtdKSxzMT1EKChSKT0+e0MxKDcse29yaWVudGF0aW9uOlJ9KX0sW0MxXSksdjA9Zy5vcmllbnRhdGlvbj8/InBvcnRyYWl0IixtMT1VIT09IndhdGNoIiYmVSE9PSJ2aXNpb24iLHEwPUQoKFIpPT57aWYoIW0xKXJldHVybjtsZXQgZT0oUj09PSJsZWZ0Ij9fMjpMMylbdjBdO3MxKGUpfSxbbTEsdjAsczFdKTtiKCgpPT57SjEobnVsbCksSDEobnVsbCl9LFskLnN0cmVhbVVybF0pLGIoKCk9PntsZXQgUj15O2lmKCFSKXJldHVybjtKMSgoZSk9PmUmJmUud2lkdGg9PT1SLndpZHRoJiZlLmhlaWdodD09PVIuaGVpZ2h0JiZlLm9yaWVudGF0aW9uPT09Ui5vcmllbnRhdGlvbj9lOm51bGwpfSxbeSx5Py53aWR0aCx5Py5oZWlnaHQseT8ub3JpZW50YXRpb25dKTtsZXQgJDA9RCgoUixlKT0+e0MxKDYse3R5cGU6Uix1c2FnZTplfSl9LFtDMV0pLFtQMCxkMV09VyhudWxsKSxbbjEsXzBdPVcoKCk9PntpZih0eXBlb2Ygd2luZG93PiJ1IilyZXR1cm4hMTtsZXQgUj1OdW1iZXIod2luZG93LmxvY2FsU3RvcmFnZS5nZXRJdGVtKCJzZXJ2ZS1zaW06dG9vbHMtcGFuZWwtd2lkdGgiKSksZT1OdW1iZXIuaXNGaW5pdGUoUikmJlI+MD9SOko4O3JldHVybiB3aW5kb3cuaW5uZXJXaWR0aD49ZSs0ODB9KSx7d2lkdGg6ajEsb25Qb2ludGVyRG93bjpIMH09bzUoInNlcnZlLXNpbTp0b29scy1wYW5lbC13aWR0aCIsSjgsMjQwLDcyMCkse3dpZHRoOkIwLG9uUG9pbnRlckRvd246RDF9PW81KCJzZXJ2ZS1zaW06ZGV2dG9vbHMtcGFuZWwtd2lkdGgiLHA0LDQyMCwxNDAwKSxbeTEsSjBdPVcoKCk9PnR5cGVvZiB3aW5kb3c8InUiP3dpbmRvdy5pbm5lcldpZHRoOjApLFtBMCxOMF09VygoKT0+dHlwZW9mIHdpbmRvdzwidSI/d2luZG93LmlubmVySGVpZ2h0OjApO2IoKCk9PntsZXQgUj0oKT0+e0owKHdpbmRvdy5pbm5lcldpZHRoKSxOMCh3aW5kb3cuaW5uZXJIZWlnaHQpfTtyZXR1cm4gd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInJlc2l6ZSIsUiksKCk9PndpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJyZXNpemUiLFIpfSxbXSksYigoKT0+e2xldCBSPWYwKCQuYXBwU3RhdGVFbmRwb2ludD8/YzEoImFwcHN0YXRlIikpLGU9bnVsbDtyZXR1cm4gUi5vbm1lc3NhZ2U9KE0pPT57dHJ5e2xldCBPPUpTT04ucGFyc2UoTS5kYXRhKTtpZihlKWNsZWFyVGltZW91dChlKTtsZXQgST1PPy5pc1JlYWN0TmF0aXZlPzA6NjAwO2U9c2V0VGltZW91dCgoKT0+ZDEoTyksSSl9Y2F0Y2h7fX0sKCk9PntpZihlKWNsZWFyVGltZW91dChlKTtSLmNsb3NlKCl9fSxbJC5hcHBTdGF0ZUVuZHBvaW50XSk7bGV0IGswPUQoYXN5bmMoKT0+eyQwKCJkb3duIiwyMSksYXdhaXQgbmV3IFByb21pc2UoKGUpPT5zZXRUaW1lb3V0KGUsMzApKSwkMCgidXAiLDIxKX0sWyQwXSksSzE9RShudWxsKSxbXyxkXT1XKDApLFthLGsxXT1XKDApO2IoKCk9PntsZXQgUj1LMS5jdXJyZW50O2lmKCFSfHx0eXBlb2YgUmVzaXplT2JzZXJ2ZXI+InUiKXJldHVybjtsZXQgZT1uZXcgUmVzaXplT2JzZXJ2ZXIoKE0pPT57bGV0IE89TVswXT8uY29udGVudFJlY3Q7ZChPPy53aWR0aD8/MCksazEoTz8uaGVpZ2h0Pz8wKX0pO3JldHVybiBlLm9ic2VydmUoUiksKCk9PmUuZGlzY29ubmVjdCgpfSxbXSk7bGV0W1YxLEIxXT1XKCEwKSxnMT1FKCEwKTtnMS5jdXJyZW50PVYxO2xldCBmMT1FKG5ldyBTZXQpO2IoKCk9PntsZXQgUj0oZSk9PntsZXQgTT0hIUsxLmN1cnJlbnQ/LmNvbnRhaW5zKGUudGFyZ2V0KTtCMShNKX07cmV0dXJuIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoInBvaW50ZXJkb3duIixSLCEwKSwoKT0+ZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigicG9pbnRlcmRvd24iLFIsITApfSxbXSksYigoKT0+e2lmKFYxKXJldHVybjtsZXQgUj1mMS5jdXJyZW50O2lmKFIuc2l6ZT09PTApcmV0dXJuO2ZvcihsZXQgZSBvZiBSKUMxKDYse3R5cGU6InVwIix1c2FnZTplfSk7Ui5jbGVhcigpfSxbVjEsQzFdKSxiKCgpPT57bGV0IFI9KE8sSSk9PntpZighZzEuY3VycmVudClyZXR1cm47aWYoTy5jb2RlPT09IktleUgiJiZPLm1ldGFLZXkmJk8uc2hpZnRLZXkpe2lmKE8ucHJldmVudERlZmF1bHQoKSxJPT09ImRvd24iJiYhTy5yZXBlYXQpQzEoNCx7YnV0dG9uOiJob21lIn0pO3JldHVybn1pZigoTy5jb2RlPT09IkFycm93TGVmdCJ8fE8uY29kZT09PSJBcnJvd1JpZ2h0IikmJk8ubWV0YUtleSYmIU8uc2hpZnRLZXkmJiFPLmFsdEtleSYmIU8uY3RybEtleSl7aWYoTy5wcmV2ZW50RGVmYXVsdCgpLEk9PT0iZG93biImJiFPLnJlcGVhdClxMChPLmNvZGU9PT0iQXJyb3dMZWZ0Ij8ibGVmdCI6InJpZ2h0Iik7cmV0dXJufWlmKE8uY29kZT09PSJLZXlBIiYmTy5tZXRhS2V5JiZPLnNoaWZ0S2V5KXtpZihPLnByZXZlbnREZWZhdWx0KCksST09PSJkb3duIiYmIU8ucmVwZWF0KUkxKGB4Y3J1biBzaW1jdGwgdWkgJHskLmRldmljZX0gYXBwZWFyYW5jZWApLnRoZW4oKHQpPT57bGV0IHExPXQuc3Rkb3V0LnRyaW0oKT09PSJkYXJrIj8ibGlnaHQiOiJkYXJrIjtyZXR1cm4gSTEoYHhjcnVuIHNpbWN0bCB1aSAkeyQuZGV2aWNlfSBhcHBlYXJhbmNlICR7cTF9YCl9KS5jYXRjaCgoKT0+e30pO3JldHVybn1pZihPLmNvZGU9PT0iS2V5SyImJk8ubWV0YUtleSYmIU8uc2hpZnRLZXkmJiFPLmFsdEtleSYmIU8uY3RybEtleSl7aWYoTy5wcmV2ZW50RGVmYXVsdCgpLEk9PT0iZG93biImJiFPLnJlcGVhdClDMSgxMix7fSk7cmV0dXJufWxldCBoPWY0KE8uY29kZSk7aWYoaD09bnVsbClyZXR1cm47aWYoTy5wcmV2ZW50RGVmYXVsdCgpLEk9PT0iZG93biIpZjEuY3VycmVudC5hZGQoaCk7ZWxzZSBmMS5jdXJyZW50LmRlbGV0ZShoKTtDMSg2LHt0eXBlOkksdXNhZ2U6aH0pfSxlPShPKT0+UihPLCJkb3duIiksTT0oTyk9PlIoTywidXAiKTtyZXR1cm4gd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLGUpLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJrZXl1cCIsTSksKCk9Pnt3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsZSksd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoImtleXVwIixNKX19LFtDMSwkLmRldmljZSxxMF0pO2xldCB4MT1JNCgpLE8wPVQ0KCQuZGV2aWNlKSxRMD1DNCh7ZXhlYzpJMSx1ZGlkOiQuZGV2aWNlLGVuYWJsZWQ6QyxvblVwbG9hZFN0YXJ0OngxLmFkZCxvblVwbG9hZFByb2dyZXNzOngxLnNldFByb2dyZXNzLG9uVXBsb2FkRW5kOihSLGUsTSk9PngxLnVwZGF0ZShSLHtzdGF0dXM6ZT8ic3VjY2VzcyI6ImVycm9yIixtZXNzYWdlOk19KSxvblVuc3VwcG9ydGVkOihSKT0+e2xldCBlPXgxLmFkZChSLm5hbWUsIm1lZGlhIik7eDEudXBkYXRlKGUse3N0YXR1czoiZXJyb3IiLG1lc3NhZ2U6YFVuc3VwcG9ydGVkOiAke1IudHlwZXx8SDIoUil9YH0pfSxvbkhvc3RQYXRoRHJvcDpPMC5kaXNtaXNzfSksVDE9RTQoe2RlZmF1bHRXaWR0aDppMSx2aWV3cG9ydFdpZHRoOnkxLHZpZXdwb3J0SGVpZ2h0OkEwLGFzcGVjdFJhdGlvOkYxLG9uU3RhcnQ6KCk9PkIxKCExKX0pLEwwPTEyLEQwPTI0LGIwPV8+MD9NYXRoLm1pbihfLFQxLndpZHRoKTpUMS53aWR0aCxGMD0oUik9PntpZihSPD0wKXJldHVybiAwO2xldCBlPXkxLUwwLVIsTz15MS8yK2IwLzItKGUtRDApO2lmKE88PTApcmV0dXJuIDA7bGV0IEk9MipPO3JldHVybiBJPD1SK0QwP0k6MH0sZTI9RjAocT9CMDpuMT9qMTowKSwkNT1GMChWP046MCk7cmV0dXJuIEsoZzkse2VuZHBvaW50Olg/JD8uYXhFbmRwb2ludDp2b2lkIDAsY2hpbGRyZW46SygiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGZsZXgtY29sIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBoLXNjcmVlbiBiZy1wYWdlIHB5LTYgZ2FwLTMgZm9udC1zeXN0ZW0gYm94LWJvcmRlciIsc3R5bGU6e3BhZGRpbmdMZWZ0OjI0KyQ1LHBhZGRpbmdSaWdodDoyNCtlMix0cmFuc2l0aW9uOlQxLmlzUmVzaXppbmd8fFQxLmlzSW5lcnRpYT8ibm9uZSI6SjZ9LGNoaWxkcmVuOltLKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggZmxleC1jb2wgaXRlbXMtY2VudGVyIGdhcC0zIG1pbi13LTAiLHN0eWxlOnt3aWR0aDpUMS53aWR0aCx0cmFuc2l0aW9uOlQxLmlzUmVzaXppbmd8fFQxLmlzSW5lcnRpYT9oMzpSM30sY2hpbGRyZW46W0socjEse2V4ZWM6STEsb25Sb3RhdGU6czEsb3JpZW50YXRpb246Zy5vcmllbnRhdGlvbj8/bnVsbCxkZXZpY2VVZGlkOiQuZGV2aWNlLGRldmljZU5hbWU6SixkZXZpY2VSdW50aW1lOlEsc3RyZWFtaW5nOkMsImFyaWEtbGFiZWwiOiJTaW11bGF0b3Igc3RhdHVzIixzdHlsZTp7YWxpZ25TZWxmOiJjZW50ZXIiLHdpZHRoOiJhdXRvIixtaW5XaWR0aDowLG1heFdpZHRoOiIxMDAlIixmbGV4V3JhcDoibm93cmFwIixqdXN0aWZ5Q29udGVudDoiY2VudGVyIixnYXA6MTAscGFkZGluZzoiNnB4IDEwcHgiLGJvcmRlclJhZGl1czoxOH0sY2hpbGRyZW46W0socjEuVGl0bGUse29uQ2xpY2s6KCk9PkIoKFIpPT4hUiksImFyaWEtbGFiZWwiOiJUb2dnbGUgc2ltdWxhdG9ycyBzaWRlYmFyIiwiYXJpYS1wcmVzc2VkIjpWLHRpdGxlOiJTaW11bGF0b3JzIixoaWRlU3VidGl0bGU6ITAsaGlkZUNoZXZyb246ITAsc3R5bGU6e21heFdpZHRoOiJtaW4oMjMwcHgsIGNhbGMoMTAwdncgLSAxNzBweCkpIn19KSxLKGI2LHtzdHJlYW1pbmc6Q30pXX0pLEsoImRpdiIse3JlZjpLMSxjbGFzc05hbWU6InJlbGF0aXZlIG1heC1oLWZ1bGwiLHN0eWxlOnt3aWR0aDpUMS53aWR0aCxhc3BlY3RSYXRpbzp2MSx0cmFuc2l0aW9uOlQxLmlzUmVzaXppbmd8fFQxLmlzSW5lcnRpYT9oMzpSMyx3aWxsQ2hhbmdlOlQxLmlzUmVzaXppbmd8fFQxLmlzSW5lcnRpYT8id2lkdGgiOnZvaWQgMH0sLi4uUTAuZHJvcFpvbmVQcm9wcyxjaGlsZHJlbjpbKCgpPT57bGV0IFI9SyhVNSx7dXJsOiQudXJsLHdzVXJsOiQud3NVcmwsc3R5bGU6e3dpZHRoOiIxMDAlIixoZWlnaHQ6IjEwMCUiLGJvcmRlcjoibm9uZSIscG9pbnRlckV2ZW50czpUMS5pc1Jlc2l6aW5nfHxUMS5pc0luZXJ0aWE/Im5vbmUiOnZvaWQgMH0saW1hZ2VTdHlsZTp7Ym9yZGVyUmFkaXVzOk0xPzA6UCxjb3JuZXJTaGFwZTpNMT92b2lkIDA6InN1cGVyZWxsaXBzZSgxLjMpIiwuLi5NMT97fTp7Ym94U2hhZG93OiJpbnNldCAwIDAgMCAxcHggcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjIpIn19LGhpZGVDb250cm9sczohMCxvblN0cmVhbWluZ0NoYW5nZTpBLG9uU3RyZWFtVG91Y2g6dzEsb25TdHJlYW1NdWx0aVRvdWNoOmwxLG9uU3RyZWFtQnV0dG9uOnQxLG9uU3RyZWFtRGlnaXRhbENyb3duOmExLG9uU3RyZWFtU2Nyb2xsOmUxLHN0cmVhbU1vZGU6JDE/IndlYnJ0YyI6bj8iYXZjYyI6Im1qcGVnIix3ZWJSdGNTdHJlYW06by5zdHJlYW0sb25XZWJSdGNGcmFtZTpvLm1hcmtGcmFtZURlY29kZWQsc3RyZWFtRXJyb3I6JDE/by5lcnJvcjpudWxsLG9uQXZjY0Vycm9yOigpPT5OMSgiZXJyb3IiKSxvbkF2Y2NEZWNvZGVkRnJhbWU6KCk9Pk4xKCJkZWNvZGVkLWZyYW1lIiksc3Vic2NyaWJlRnJhbWU6bj92b2lkIDA6WDEuc3Vic2NyaWJlRnJhbWUsc3RyZWFtRnJhbWU6bj92b2lkIDA6WDEuZnJhbWUsc3RyZWFtQ29uZmlnOmcsZW5hYmxlRGlnaXRhbENyb3duOlU9PT0id2F0Y2giLG9uU2NyZWVuQ29uZmlnQ2hhbmdlOlYwfSksZT1LKFoxLHtjaGlsZHJlbjpbUixYJiZLKFI5LHt9KV19KTtpZighTTEpcmV0dXJuIGU7cmV0dXJuIEsoUzUse2Nocm9tZTpaLGludGVyYWN0aXZlOiEwLG9uQnV0dG9uOlIxLG9uQ3Jvd25XaGVlbDooTSxPKT0+e2xldCBJPUQyKE0sTyxhfHwxKTtpZihJIT1udWxsKWExKEkpfSxzY3JlZW46ZX0pfSkoKSxRMC5pc0RyYWdPdmVyJiZLKCJkaXYiLHtjbGFzc05hbWU6ImFic29sdXRlIGluc2V0LTAgZmxleCBmbGV4LWNvbCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgZ2FwLTIgYm9yZGVyLTIgYm9yZGVyLWRhc2hlZCBib3JkZXItYWNjZW50IGJnLVtyZ2JhKDk5LDEwMiwyNDEsMC4xOCldIHRleHQtYWNjZW50IHBvaW50ZXItZXZlbnRzLW5vbmUgei0yMCIsc3R5bGU6e2JvcmRlclJhZGl1czpNMT92b2lkIDA6UH0sY2hpbGRyZW46W0soZzIse3NpemU6MzIsc3Ryb2tlV2lkdGg6MS41fSksSygic3BhbiIse2NsYXNzTmFtZToidGV4dC1bMTNweF0gZm9udC1tZWRpdW0iLGNoaWxkcmVuOiJEcm9wIG1lZGlhIG9yIC5pcGEifSldfSksSyhQNix7c2ltdWxhdG9yUmVzaXplOlQxLGRldmljZVR5cGU6VSxzdHJlYW1Db25maWc6Zyxjb250YWluZXJXaWR0aDpffHxUMS53aWR0aCxjb250YWluZXJIZWlnaHQ6YXx8KEYxPjA/VDEud2lkdGgvRjE6MCl9KSxLKHk2LHt3aWR0aDpffHxUMS53aWR0aCxoZWlnaHQ6YXx8KEYxPjA/VDEud2lkdGgvRjE6MCksdmlzaWJsZTpUMS5pc1Jlc2l6aW5nfHxUMS5pc0luZXJ0aWF9KV19KSxLKCJkaXYiLHtjbGFzc05hbWU6ImlubGluZS1mbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBnYXAtMiBtYXgtdy1mdWxsIixjaGlsZHJlbjpbSyhyMSx7ZXhlYzpJMSxvblJvdGF0ZTpzMSxvcmllbnRhdGlvbjpnLm9yaWVudGF0aW9uPz9udWxsLGRldmljZVVkaWQ6JC5kZXZpY2UsZGV2aWNlTmFtZTpKLGRldmljZVJ1bnRpbWU6USxzdHJlYW1pbmc6QywiYXJpYS1sYWJlbCI6IlNpbXVsYXRvciBhY3Rpb25zIixzdHlsZTp7YWxpZ25TZWxmOiJjZW50ZXIiLHdpZHRoOiJhdXRvIixtaW5XaWR0aDowLG1heFdpZHRoOiIxMDAlIixqdXN0aWZ5Q29udGVudDoiY2VudGVyIixwYWRkaW5nOiI2cHggOHB4Iixib3JkZXJSYWRpdXM6MTh9LGNoaWxkcmVuOksocjEuQWN0aW9ucyx7Y2hpbGRyZW46W1AwPy5pc1JlYWN0TmF0aXZlJiZLKHIxLkJ1dHRvbix7ImFyaWEtbGFiZWwiOiJSZWxvYWQgUmVhY3QgTmF0aXZlIGJ1bmRsZSIsdGl0bGU6IlJlbG9hZCAoUikiLG9uQ2xpY2s6KCk9PnZvaWQgazAoKSxjaGlsZHJlbjpLKHIwLHt9KX0pLEsocjEuSG9tZUJ1dHRvbix7dGl0bGU6IkhvbWUifSksSyhyMS5TY3JlZW5zaG90QnV0dG9uLHt0aXRsZToiU2NyZWVuc2hvdCIsb25DbGljazooUik9PntSLnByZXZlbnREZWZhdWx0KCksTzAuY2FwdHVyZSgpfX0pLEsocjEuUm90YXRlQnV0dG9uLHt0aXRsZToiUm90YXRlIGRldmljZSJ9KV19KX0pLEsocjEse2V4ZWM6STEsb25Sb3RhdGU6czEsb3JpZW50YXRpb246Zy5vcmllbnRhdGlvbj8/bnVsbCxkZXZpY2VVZGlkOiQuZGV2aWNlLGRldmljZU5hbWU6SixkZXZpY2VSdW50aW1lOlEsc3RyZWFtaW5nOkMsImFyaWEtbGFiZWwiOiJBY2Nlc3NpYmlsaXR5IG92ZXJsYXkiLHN0eWxlOnt3aWR0aDoiYXV0byIsbWluV2lkdGg6MCxqdXN0aWZ5Q29udGVudDoiY2VudGVyIixwYWRkaW5nOjYsYm9yZGVyUmFkaXVzOjIyfSxjaGlsZHJlbjpLKG05LHtvdmVybGF5RW5hYmxlZDpYLHN0cmVhbWluZzpDLG9uVG9nZ2xlT3ZlcmxheTooKT0+WSgoUik9PiFSKX0pfSldfSldfSksSygiZGl2Iix7Y2xhc3NOYW1lOmBmaXhlZCB0b3AtMyByaWdodC0zIGZsZXggZmxleC1jb2wgZ2FwLTEgcC0xIGJnLXBhbmVsLWJnIGJvcmRlciBib3JkZXItd2hpdGUvOCByb3VuZGVkLVsxMHB4XSBiYWNrZHJvcC1ibHVyLVsxMnB4XSBbLXdlYmtpdC1iYWNrZHJvcC1maWx0ZXI6Ymx1cigxMnB4KV0gW3RyYW5zaXRpb246b3BhY2l0eV8wLjE4c19lYXNlXSB6LTQwICR7bjF8fHE/Im9wYWNpdHktMCBwb2ludGVyLWV2ZW50cy1ub25lIjoib3BhY2l0eS0xMDAgcG9pbnRlci1ldmVudHMtYXV0byJ9YCxjaGlsZHJlbjpbSygiYnV0dG9uIix7b25DbGljazooKT0+e0coITEpLF8wKChSKT0+IVIpfSxjbGFzc05hbWU6InctWzMwcHhdIGgtWzMwcHhdIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGJnLXRyYW5zcGFyZW50IGJvcmRlci1ub25lIHJvdW5kZWQtbWQgdGV4dC1bIzhlOGU5M10gY3Vyc29yLXBvaW50ZXIgW3RyYW5zaXRpb246YmFja2dyb3VuZF8wLjE1c19lYXNlLGNvbG9yXzAuMTVzX2Vhc2VdIGhvdmVyOmJnLXdoaXRlLzggaG92ZXI6dGV4dC13aGl0ZSIsImFyaWEtbGFiZWwiOiJPcGVuIHRvb2xzIHBhbmVsIiwiYXJpYS1wcmVzc2VkIjpuMSx0aXRsZToiVG9vbHMiLGNoaWxkcmVuOksoajIse3NpemU6MTgsc3Ryb2tlV2lkdGg6MS43NX0pfSksSygiYnV0dG9uIix7b25DbGljazooKT0+e18wKCExKSxHKChSKT0+IVIpfSxjbGFzc05hbWU6InctWzMwcHhdIGgtWzMwcHhdIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGJnLXRyYW5zcGFyZW50IGJvcmRlci1ub25lIHJvdW5kZWQtbWQgdGV4dC1bIzhlOGU5M10gY3Vyc29yLXBvaW50ZXIgW3RyYW5zaXRpb246YmFja2dyb3VuZF8wLjE1c19lYXNlLGNvbG9yXzAuMTVzX2Vhc2VdIGhvdmVyOmJnLXdoaXRlLzggaG92ZXI6dGV4dC13aGl0ZSIsImFyaWEtbGFiZWwiOiJPcGVuIFdlYktpdCBEZXZUb29scyIsImFyaWEtcHJlc3NlZCI6cSx0aXRsZToiV2ViS2l0IERldlRvb2xzIixjaGlsZHJlbjpLKHgyLHtzaXplOjE4LHN0cm9rZVdpZHRoOjEuNzV9KX0pXX0pLEsocTQse29wZW46bjEsb25DbG9zZTooKT0+XzAoITEpLHVkaWQ6JC5kZXZpY2UsZGV2aWNlUnVudGltZTpRLGN1cnJlbnRBcHA6UDAsZXZlbnRMb2dFdmVudHNFbmRwb2ludDokLmV2ZW50TG9nRXZlbnRzRW5kcG9pbnQsYXhPdmVybGF5RW5hYmxlZDpYLG9uVG9nZ2xlQXhPdmVybGF5OigpPT5ZKChSKT0+IVIpLHN0cmVhbVNldHRpbmdzOncsb25TdHJlYW1QbGF5YmFja1NldHRpbmdzQ2hhbmdlOkYudXBkYXRlUGxheWJhY2ssb25TdHJlYW1FbmNvZGVyU2V0dGluZ3NDaGFuZ2U6Ri51cGRhdGVFbmNvZGVyLGFjdGl2ZUNvZGVjOiQxP2B3ZWJydGMvJHtsfWA6bj8iaDI2NCI6Im1qcGVnIixhdmNjU3VwcG9ydGVkOmsuc3VwcG9ydGVkLHN0cmVhbVNldHRpbmdzUGVuZGluZzpGLnBlbmRpbmd8fCFGLmVuY29kZXJTZXR0aW5nc0F2YWlsYWJsZSx3aWR0aDpqMX0pLEsodjUse3BhbmVsV2lkdGg6ajEsdmlzaWJsZTpuMSxvblBvaW50ZXJEb3duOkgwLGFyaWFMYWJlbDoiUmVzaXplIHRvb2xzIHBhbmVsIn0pLEsoejQse29wZW46cSxvbkNsb3NlOigpPT5HKCExKSx1ZGlkOiQuZGV2aWNlLHRhcmdldHM6SC50YXJnZXRzLHNlbGVjdGVkVGFyZ2V0SWQ6eixvblNlbGVjdFRhcmdldDpMLGxvYWRpbmc6SC5sb2FkaW5nLGVycm9yOkguZXJyb3Isb25SZWZyZXNoOigpPT52b2lkIEgucmVmcmVzaCgpLHdpZHRoOkIwfSksSyh2NSx7cGFuZWxXaWR0aDpCMCx2aXNpYmxlOnEsb25Qb2ludGVyRG93bjpEMSxhcmlhTGFiZWw6IlJlc2l6ZSBXZWJLaXQgRGV2VG9vbHMgcGFuZWwifSldfSl9KX1vOChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicm9vdCIpKS5yZW5kZXIoSygkWix7fSkpOwo8L3NjcmlwdD4KPC9ib2R5PjwvaHRtbD4=","base64").toString("utf-8");return l8}function o2(){return new Promise(($)=>{P0("xcrun",["simctl","list","devices","-j"],{encoding:"utf-8",timeout:3000},(Q,Z)=>{if(Q)return $([]);try{let J=JSON.parse(Z),Y=[];for(let[X,G]of Object.entries(J.devices)){if(!/SimRuntime\.(iOS|watchOS|visionOS|xrOS)-/i.test(X))continue;for(let H of G){if(H.isAvailable===!1)continue;Y.push({...H,runtime:X.replace(/^.*SimRuntime\./,"")})}}$(Y)}catch{$([])}})})}var a2=1610612736;function r2(){try{let $=Number(Y4("sysctl -n hw.memsize",{encoding:"utf-8",stdio:["ignore","pipe","ignore"],timeout:1500}).trim()),Q=Number(Y4("sysctl -n hw.pagesize",{encoding:"utf-8",stdio:["ignore","pipe","ignore"],timeout:1500}).trim()),Z=Y4("vm_stat",{encoding:"utf-8",stdio:["ignore","pipe","ignore"],timeout:1500}),J=(X)=>{let G=Z.match(X);return G?Number(G[1]):0},Y=J(/Pages free:\s+(\d+)/)+J(/Pages inactive:\s+(\d+)/)+J(/Pages speculative:\s+(\d+)/);return{totalBytes:Number.isFinite($)?$:0,availableBytes:Y*(Number.isFinite(Q)?Q:4096)}}catch{return{totalBytes:0,availableBytes:0}}}function t2(){try{let $=Y4("ps -axo rss=,args=",{encoding:"utf-8",stdio:["ignore","pipe","ignore"],timeout:3000,maxBuffer:8388608}),Q={},Z=0,J=/\/Devices\/([0-9A-F-]{36})\//i;for(let Y of $.split(`
75
- `)){let X=Y.trimStart();if(!X)continue;let G=J.exec(X);if(!G)continue;let H=Number(X.split(/\s+/,1)[0]);if(!Number.isFinite(H))continue;let K=H*1024,W=G[1].toUpperCase();Q[W]=(Q[W]??0)+K,Z+=K}return{perUdid:Q,totalBytes:Z}}catch{return{perUdid:{},totalBytes:0}}}function s2(){let{totalBytes:$,availableBytes:Q}=r2(),Z=t2(),J=Object.keys(Z.perUdid).length,Y=J>0?Z.totalBytes/J:0,X=Y>=268435456?"measured":"estimated",G=X==="measured"?Y:a2,H=G>0?Math.max(0,Math.floor(Q/G)):0;return{totalBytes:$,availableBytes:Q,runningSimulators:J,perSimAvgBytes:G,perSimSource:X,estimatedAdditional:H}}function h$($){if($==="auto"||$==="h264"||$==="mjpeg")return{transport:"http",codec:$};return}function e2($,Q){let Z=Buffer.from($),J=Buffer.from(Q);if(Z.length!==J.length)return!1;return j2(Z,J)}function $1($){if(!$)return!1;return $.split(";",1)[0].trim().toLowerCase()==="application/json"}function eJ($){let Q=$?.streamSettings??h$($?.codec),Z=($?.basePath??"/.sim").replace(/\/+$/,""),J=S2(Z),Y=y2(Z),X=$?.proxyHelpers??!1,G=$?.inspectWebKitBridge??m2,H=$?.execToken??A2(32).toString("base64url"),K=async(M)=>{let F=M??{};if(typeof F.device!=="string"||!/^[0-9A-Za-z-]+$/.test(F.device))throw Error("missing or invalid device udid");if(F.option===void 0)return{status:await h6(F.device)};if(!A0[F.option])throw Error(`unknown option: ${F.option}`);let A=typeof F.value==="string"?f6(F.option,F.value):null;if(A===null)throw Error(`invalid value for ${F.option}: ${F.value}`);await b6(F.device,F.option,A);try{K0({device:F.device,source:"ui",kind:"ui-setting",action:F.option,status:"ok",summary:`UI ${F.option} ${A}`,details:{option:F.option,value:A}})}catch{}return{ok:!0}},W=async(M,F,A)=>{let R=M.url??"",x=R.indexOf("?"),j=x===-1?R:R.slice(0,x),D=q$(R),L=D??$?.device??null,C=Z==="/"?"/devtools-frontend":`${Z}/devtools-frontend`,I=c8(R,J);if(I){let _=I.device??L;if(h2(M,F,_,I.upstreamPath,Q))return;F.writeHead(404,{"Content-Type":"text/plain; charset=utf-8"}),F.end("No serve-sim device");return}if(j===C||j.startsWith(`${C}/`)){let _=j===C?"inspector.html":j.slice(C.length+1);if(_.split("/").some((V)=>V==="..")){F.writeHead(400,{"Content-Type":"text/plain; charset=utf-8"}),F.end("Invalid asset path");return}try{let V=await fetch(`https://chrome-devtools-frontend.appspot.com/serve_rev/@${R2}/${_}${x===-1?"":R.slice(x)}`),N={"Cache-Control":"public, max-age=604800"},B=V.headers.get("content-type");if(B)N["Content-Type"]=B;F.writeHead(V.status,N),F.end(Buffer.from(await V.arrayBuffer()))}catch(V){F.writeHead(502,{"Content-Type":"text/plain; charset=utf-8"}),F.end(V instanceof Error?V.message:"Failed to load DevTools frontend")}return}if(j===Z||j===Z+"/"){let _=await F0(),V=D0(_,L),N=n2();if(!V){let B=JSON.stringify({basePath:Z,execToken:H});N=N.replace("<!--__SIM_PREVIEW_CONFIG__-->",`<script>window.__SIM_PREVIEW__=${B}</script>`)}if(V){let B=x4(V,Z4(M),Z,q4(M),X),T=`<script>window.__SIM_PREVIEW__=${JSON.stringify(m8(B,Z,d8(),H,Q,X))}</script>`;N=N.replace("<!--__SIM_PREVIEW_CONFIG__-->",T)}F.writeHead(200,{"Content-Type":"text/html; charset=utf-8","Cache-Control":"no-store"}),F.end(N);return}if(j===Z+"/grid/api/memory"){F.writeHead(200,{"Content-Type":"application/json","Cache-Control":"no-store"}),F.end(JSON.stringify(s2()));return}if(j===Z+"/grid/api/devicekit-chrome"){B6(new URL(R||"/","http://serve-sim.local"),F);return}if(j===Z+"/grid/api/device-placeholder-asset"){L6(new URL(R||"/","http://serve-sim.local"),F);return}if(j===Z+"/grid/api"){let _=await F0(),V=new Map(_.map((E)=>[E.device,E])),N=await o2(),B=x2(),P=(E)=>{if(/iphone/i.test(E))return 0;if(/ipad/i.test(E))return 1;if(/watch/i.test(E))return 2;if(/(apple\s*tv|^tv\b)/i.test(E))return 3;if(/vision|reality/i.test(E))return 4;return 5},T=(E)=>{if(V.has(E.udid))return 0;if(L&&E.udid===L)return 1;if(E.state==="Booted")return 2;if(E.udid===B)return 3;return 4},q=(E)=>{let u=E.match(/-(\d+)-(\d+)/),d=u?Number(u[1]):0,Y0=u?Number(u[2]):0;return-(d*1000+Y0)};N.sort((E,u)=>T(E)-T(u)||P(E.name)-P(u.name)||E.name.localeCompare(u.name)||q(E.runtime)-q(u.runtime));let S=N.length,{limit:y,offset:k}=q2(R),c=(y==null?N:N.slice(k,k+y)).map((E)=>{let u=V.get(E.udid),d=u?x4(u,Z4(M),Z,q4(M),X):null;return{device:E.udid,name:E.name,runtime:E.runtime,state:E.state,chrome:N6(E),placeholderAsset:U6(E),helper:d?{port:d.port,url:d.url,streamUrl:d.streamUrl,wsUrl:d.wsUrl}:null}});F.writeHead(200,{"Content-Type":"application/json","Cache-Control":"no-store"}),F.end(JSON.stringify({devices:c,total:S,offset:y==null?0:k,limit:y??S}));return}if(j===Z+"/grid/api/shutdown"&&M.method==="POST"){let _="";M.on("data",(V)=>{_+=typeof V==="string"?V:V.toString()}),M.on("end",()=>{let V="";try{V=JSON.parse(_).udid??""}catch{}if(!/^[0-9A-F]{8}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{12}$/i.test(V)){F.writeHead(400,{"Content-Type":"application/json"}),F.end(JSON.stringify({ok:!1,error:"Invalid or missing udid"}));return}Z8(V),J4={at:0,booted:null},P0("xcrun",["simctl","shutdown",V],{timeout:30000},(N,B,P)=>{if(N){F.writeHead(500,{"Content-Type":"application/json"}),F.end(JSON.stringify({ok:!1,error:P?.toString().trim()||N.message}));return}F.writeHead(200,{"Content-Type":"application/json"}),F.end(JSON.stringify({ok:!0}))})});return}if(j===Z+"/grid/api/start"&&M.method==="POST"){let _="";M.on("data",(V)=>{_+=typeof V==="string"?V:V.toString()}),M.on("end",()=>{let V="";try{V=JSON.parse(_).udid??""}catch{}if(!/^[0-9A-F]{8}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{12}$/i.test(V)){F.writeHead(400,{"Content-Type":"application/json"}),F.end(JSON.stringify({ok:!1,error:"Invalid or missing udid"}));return}let N=M.socket.localPort??0;u2(V,N,Z,Q).then((B)=>{if(F.writableEnded)return;if(B)F.writeHead(500,{"Content-Type":"application/json"}),F.end(JSON.stringify({ok:!1,error:B}));else F.writeHead(200,{"Content-Type":"application/json"}),F.end(JSON.stringify({ok:!0}))})});return}if(j===Z+"/devtools"){let _=await F0();if(!D0(_,L)){F.writeHead(404,{"Content-Type":"application/json"}),F.end(JSON.stringify({error:"No serve-sim device"}));return}try{let N=await G(),B=await N.listTargets(),P=X?d2(M):"ws",T=X?`${Z4(M)??`127.0.0.1:${N.port}`}${Y}`:`127.0.0.1:${N.port}/devtools`,q=B.map((S)=>({...S,webSocketDebuggerUrl:`${P}://${T}/page/${encodeURIComponent(S.id)}`,devtoolsFrontendUrl:i2(C,P,T,S.id)}));F.writeHead(200,{"Content-Type":"application/json","Cache-Control":"no-store"}),F.end(JSON.stringify({port:N.port,targets:q}))}catch(N){F.writeHead(500,{"Content-Type":"application/json"}),F.end(JSON.stringify({error:N instanceof Error?N.message:"Failed to start inspect-webkit"}))}return}if(j===Z+"/devtools/release"&&M.method==="POST"){let _="";M.on("data",(V)=>_+=V),M.on("end",async()=>{try{let V=_?JSON.parse(_):{};(await G()).releaseHighlight?.(V.targetId),F.writeHead(200,{"Content-Type":"application/json"}),F.end("{}")}catch(V){F.writeHead(500,{"Content-Type":"application/json"}),F.end(JSON.stringify({error:V instanceof Error?V.message:"Failed to release"}))}});return}if(j===Z+"/devtools/highlight"&&M.method==="POST"){let _="";M.on("data",(V)=>_+=V),M.on("end",async()=>{try{let{targetId:V,on:N}=JSON.parse(_||"{}");if(!V){F.writeHead(400,{"Content-Type":"application/json"}),F.end(JSON.stringify({error:"Missing targetId"}));return}let B=await G();if(!B.highlightTarget){F.writeHead(501,{"Content-Type":"application/json"}),F.end(JSON.stringify({error:"highlightTarget not supported by inspect-webkit"}));return}await B.highlightTarget(V,!!N),F.writeHead(200,{"Content-Type":"application/json"}),F.end("{}")}catch(V){F.writeHead(500,{"Content-Type":"application/json"}),F.end(JSON.stringify({error:V instanceof Error?V.message:"Failed to highlight target"}))}});return}if(j===Z+"/api"){let _=await F0(),V=D0(_,L),N=`${L??"(any)"}|${_.length}|${V?`${V.device}@${V.port}`:"none"}`;if(N!==j$)j$=N,t0("GET /api selectedDevice=%s states=%d chose=%s",L??"(any)",_.length,V?`${V.device}@${V.port}`:"none");F.writeHead(200,{"Content-Type":"application/json","Cache-Control":"no-store"});let B=V?x4(V,Z4(M),Z,q4(M),X):null;F.end(JSON.stringify(B?m8(B,Z,d8(),H,Q,X):null));return}if(j===Z+"/api/event-log"){F.writeHead(200,{"Content-Type":"application/json","Cache-Control":"no-store"}),F.end(JSON.stringify({events:r4({device:D,sinceId:P$(R),limit:D$(R)})}));return}if(j===Z+"/api/event-log/events"){F.writeHead(200,{"Content-Type":"text/event-stream","Cache-Control":"no-cache",Connection:"keep-alive","X-Accel-Buffering":"no"}),F.write(`:
74
+ `),Q.resume(),!0}function h2($,Q,Z,J){if(!u$($,Q))return;let Y=new R$(J);Y.binaryType="arraybuffer";let X=!1,G=!1,H=[],K=Buffer.from(Z),W=()=>{if(G)return;G=!0;try{Y.close()}catch{}try{Q.end(a8(8,Buffer.alloc(0)))}catch{}try{Q.destroy()}catch{}},z=(M)=>{if(X&&Y.readyState===R$.OPEN){Y.send(M.opcode===1?M.payload.toString("utf8"):y$(M.payload));return}H.push({opcode:M.opcode,payload:Buffer.from(M.payload)})},U=()=>{try{while(K.length>0){let M=h$(K);if(!M)break;if(K=K.subarray(M.consumed),M.opcode===8){X4(Q,8,M.payload),W();return}if(M.opcode===9){X4(Q,10,M.payload);continue}if(M.opcode===1||M.opcode===2)z({opcode:M.opcode,payload:M.payload})}}catch{W()}};Y.onopen=()=>{X=!0;for(let M of H)Y.send(M.opcode===1?M.payload.toString("utf8"):y$(M.payload));H=[]},Y.onmessage=(M)=>{let F=M.data,A=typeof F==="string"?Buffer.from(F):Buffer.from(F);X4(Q,typeof F==="string"?1:2,A)},Y.onerror=W,Y.onclose=W,Q.on("data",(M)=>{if(typeof M==="string")M=Buffer.from(M);K=Buffer.concat([K,M]),U()}),Q.on("error",W),Q.on("close",W),U()}async function u2($,Q,Z){if(!o8(Z)){Q.writeHead(400,{"Content-Type":"application/json","Cache-Control":"no-store"}),Q.end(JSON.stringify({error:"invalid_device"}));return}if($.method!=="GET"){Q.writeHead(405,{Allow:"GET","Content-Type":"application/json","Cache-Control":"no-store"}),Q.end(JSON.stringify({error:"method_not_allowed"}));return}try{let J=await D9(Z);Q.writeHead(200,{"Content-Type":"application/json","Cache-Control":"no-store"}),Q.end(JSON.stringify(J))}catch(J){Q.writeHead(500,{"Content-Type":"application/json","Cache-Control":"no-store"}),Q.end(JSON.stringify({udid:Z,alive:!1,error:J instanceof Error?J.message:String(J)}))}}function p2($,Q,Z,J,Y){if(!Z)return!1;let X=J.split("?")[0];if(X==="/camera/status")return u2($,Q,Z),!0;if((X==="/webrtc/offer"||X==="/webrtc/close"||X==="/stream-settings")&&$.method==="OPTIONS")return Z8(Q),!0;let G;try{G=_4(Z,Y)}catch{return!1}switch(X){case"/stream.mjpeg":return G.handleMjpeg($,Q),!0;case"/stream.avcc":return G.handleAvcc($,Q),!0;case"/stream-settings":return G.handleStreamSettings($,Q),!0;case"/config":return G.handleConfig($,Q),!0;case"/health":return G.handleHealth($,Q),!0;case"/webrtc/offer":return G.handleWebRTCOffer($,Q),!0;case"/webrtc/close":return G.handleWebRTCClose($,Q),!0;case"/ax":return G.handleAx($,Q),!0;case"/foreground":return G.handleForeground($,Q),!0;default:return!1}}async function g2($,Q,Z,J){if(await new Promise((X)=>N0("xcrun",["simctl","boot",$],()=>X())),!await new Promise((X)=>{N0("xcrun",["simctl","bootstatus",$,"-b"],{timeout:180000},(G)=>X(!G))})){if(!await new Promise((G)=>{N0("xcrun",["simctl","list","devices","-j"],(H,K)=>{if(H)return G(!1);try{let W=JSON.parse(K);G(Object.values(W.devices).flat().some((z)=>z.udid===$&&z.state==="Booted"))}catch{G(!1)}})}))return`Device ${$} failed to reach booted state`}return O9(L9($,Q,Z,"127.0.0.1",J)),null}function c2($,Q){let Z=[],J=[],Y=Buffer.from(Q),X=!1,G=()=>{if(X)return;X=!0;for(let W of J)W()},H=()=>{G();try{$.end(a8(8,Buffer.alloc(0)))}catch{}try{$.destroy()}catch{}},K=()=>{for(;;){let W;try{W=h$(Y)}catch{H();return}if(!W)return;if(Y=Y.subarray(W.consumed),W.opcode===8)return H();if(W.opcode===9){X4($,10,W.payload);continue}if(W.opcode===1||W.opcode===2)for(let z of Z)z(W.payload)}};if($.on("data",(W)=>{Y=Buffer.concat([Y,W]),K()}),$.on("close",G),$.on("error",G),Q.length)K();return{send(W){X4($,2,W)},on(W,z){if(W==="message")Z.push(z);else J.push(z)},close:H}}function m2($,Q,Z,J,Y){if(!J)return!1;let X;try{X=_4(J,Y)}catch{return!1}if(!u$($,Q))return!0;return X.attachHidSocket(c2(Q,Z)),!0}function l8($,Q,Z,J,Y,X=!1){let G=(Q===""?"":Q)+"/grid/api",H=typeof Y==="string"?Y:void 0,K=typeof Y==="object"?Y:g$(H);return{...$,basePath:Q,logsEndpoint:h0(Q,"/logs",$.device),appStateEndpoint:h0(Q,"/appstate",$.device),eventLogEndpoint:h0(Q,"/api/event-log",$.device),eventLogEventsEndpoint:h0(Q,"/api/event-log/events",$.device),axEndpoint:h0(Q,"/ax",$.device),cameraStatusEndpoint:`${Q==="/"?"":Q}/helper/${encodeURIComponent($.device)}/camera/status`,devtoolsEndpoint:h0(Q,"/devtools",$.device),streamSettingsEndpoint:y2($.streamUrl),serveSimBin:Z,gridApiEndpoint:G,gridStartEndpoint:G+"/start",gridShutdownEndpoint:G+"/shutdown",gridMemoryEndpoint:G+"/memory",previewEndpoint:Q===""?"/":Q,execToken:J,...H?{codec:H}:{},...K?{streamSettings:K}:{},...X?{proxyHelpers:!0}:{}}}async function l2($){return new Promise((Q)=>{let Z=R2();Z.once("error",()=>Q(!1)),Z.once("listening",()=>Z.close(()=>Q(!0))),Z.listen($,"127.0.0.1")})}async function k$($){let Q=`http://127.0.0.1:${$}`;try{let Z=await fetch(`${Q}/json/version`);if(!Z.ok)return null;if((await Z.json()).Browser!=="Safari/inspect-webkit")return null;return{port:$,cdpUrl:Q,async listTargets(){return(await(await fetch(`${Q}/json/list`)).json()).filter((G)=>G.id.startsWith("sim:")).map((G)=>{let K=G.id.split(":")[1],W=G.description?.match(/\(([^)]+)\)/)?.[1];return{id:G.id,title:G.title||G.url||"Untitled",url:/^https?:/i.test(G.url)?G.url:"about:blank",type:G.type||"page",udid:K,bundleId:W}})}}}catch{return null}}async function d2(){if(D0)try{return await(await D0).listTargets(),D0}catch{D0=null}return D0=(async()=>{let{startCdpServer:$}=await Promise.resolve().then(() => (L$(),B$));for(let Q=I4;Q<I4+50;Q++){if(!await l2(Q)){let Z=await k$(Q);if(Z)return Z;continue}try{let Z=await $({host:"127.0.0.1",port:Q});return{port:Q,cdpUrl:`http://127.0.0.1:${Q}`,async listTargets(){return Z.getTargets().filter((J)=>J.source?.kind==="simulator").map((J)=>{let Y=J.url??"";return{id:J.targetId,title:J.title||J.appName||Y||"Untitled",url:/^https?:/i.test(Y)?Y:"about:blank",type:J.type||"page",appName:J.appName,bundleId:J.bundleId,udid:J.source?.id,inUseByOtherInspector:!!J.inUseByOtherInspector}})},highlightTarget:Z.highlightTarget?.bind(Z),releaseHighlight:Z.releaseHighlight?.bind(Z)}}catch(Z){if(Z?.code==="EADDRINUSE"){let J=await k$(Q);if(J)return J;continue}throw Z}}throw Error(`No available inspect-webkit port found in ${I4}-${I4+49}`)})().catch(($)=>{throw D0=null,$}),D0}function i2($){return Array.isArray($)?$[0]:$}function p$($){return i2($.headers["x-forwarded-proto"])?.split(",",1)[0]?.trim().toLowerCase()}function n2($){return p$($)==="https"?"wss":"ws"}function q4($){return p$($)==="https"?"https":"http"}function o2($,Q,Z,J){let Y=new URL(`${$}/inspector.html`,"http://serve-sim.local");return Y.searchParams.set(Q,`${Z}/page/${encodeURIComponent(J)}`),`${Y.pathname}${Y.search}`}var d8=null;function i8(){try{let $=process.argv;if($[1]&&f$($[1]))return $[1]}catch{}return"serve-sim"}function a2(){if(!d8)d8=Buffer.from("PCFkb2N0eXBlIGh0bWw+CjxodG1sPjxoZWFkPgo8bWV0YSBjaGFyc2V0PSJ1dGYtOCI+CjxtZXRhIG5hbWU9InZpZXdwb3J0IiBjb250ZW50PSJ3aWR0aD1kZXZpY2Utd2lkdGgsaW5pdGlhbC1zY2FsZT0xIj4KPHRpdGxlPlNpbXVsYXRvciBQcmV2aWV3PC90aXRsZT4KPGxpbmsgcmVsPSJpY29uIiB0eXBlPSJpbWFnZS94LWljb24iIGhyZWY9ImRhdGE6aW1hZ2UveC1pY29uO2Jhc2U2NCxBQUFCQUFVQUVCQUFBQUVBSUFBNEJnQUFWZ0FBQUNBZ0FBQUJBQ0FBUEFvQUFJNEdBQUF3TUFBQUFRQWdBS0VQQUFES0VBQUFnSUFBQUFFQUlBQ2NPQUFBYXlBQUFBQUFBQUFCQUNBQS9wb0FBQWRaQUFDSlVFNUhEUW9hQ2dBQUFBMUpTRVJTQUFBQUVBQUFBQkFJQmdBQUFCL3ovMkVBQUFBRVowRk5RUUFBc1k4TC9HRUZBQUFBSUdOSVVrMEFBSG9tQUFDQWhBQUErZ0FBQUlEb0FBQjFNQUFBNm1BQUFEcVlBQUFYY0p5NlVUd0FBQUI0WlZoSlprMU5BQ29BQUFBSUFBUUJHZ0FGQUFBQUFRQUFBRDRCR3dBRkFBQUFBUUFBQUVZQktBQURBQUFBQVFBQ0FBQ0hhUUFFQUFBQUFRQUFBRTRBQUFBQUFBQUFrQUFBQUFFQUFBQ1FBQUFBQVFBRG9BRUFBd0FBQUFFQUFRQUFvQUlBQkFBQUFBRUFBQUFRb0FNQUJBQUFBQUVBQUFBUUFBQUFBT2JZeVZNQUFBQUpjRWhaY3dBQUZpVUFBQllsQVVsU0pQQUFBQUtjYVZSWWRGaE5URHBqYjIwdVlXUnZZbVV1ZUcxd0FBQUFBQUE4ZURwNGJYQnRaWFJoSUhodGJHNXpPbmc5SW1Ga2IySmxPbTV6T20xbGRHRXZJaUI0T25odGNIUnJQU0pZVFZBZ1EyOXlaU0EyTGpBdU1DSStDaUFnSUR4eVpHWTZVa1JHSUhodGJHNXpPbkprWmowaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1UazVPUzh3TWk4eU1pMXlaR1l0YzNsdWRHRjRMVzV6SXlJK0NpQWdJQ0FnSUR4eVpHWTZSR1Z6WTNKcGNIUnBiMjRnY21SbU9tRmliM1YwUFNJaUNpQWdJQ0FnSUNBZ0lDQWdJSGh0Ykc1ek9uUnBabVk5SW1oMGRIQTZMeTl1Y3k1aFpHOWlaUzVqYjIwdmRHbG1aaTh4TGpBdklnb2dJQ0FnSUNBZ0lDQWdJQ0I0Yld4dWN6cGxlR2xtUFNKb2RIUndPaTh2Ym5NdVlXUnZZbVV1WTI5dEwyVjRhV1l2TVM0d0x5SStDaUFnSUNBZ0lDQWdJRHgwYVdabU9saFNaWE52YkhWMGFXOXVQakUwTkR3dmRHbG1aanBZVW1WemIyeDFkR2x2Ymo0S0lDQWdJQ0FnSUNBZ1BIUnBabVk2V1ZKbGMyOXNkWFJwYjI0K01UUTBQQzkwYVdabU9sbFNaWE52YkhWMGFXOXVQZ29nSUNBZ0lDQWdJQ0E4ZEdsbVpqcFNaWE52YkhWMGFXOXVWVzVwZEQ0eVBDOTBhV1ptT2xKbGMyOXNkWFJwYjI1VmJtbDBQZ29nSUNBZ0lDQWdJQ0E4WlhocFpqcFFhWGhsYkZsRWFXMWxibk5wYjI0K01qVTJQQzlsZUdsbU9sQnBlR1ZzV1VScGJXVnVjMmx2Ymo0S0lDQWdJQ0FnSUNBZ1BHVjRhV1k2VUdsNFpXeFlSR2x0Wlc1emFXOXVQakkxTmp3dlpYaHBaanBRYVhobGJGaEVhVzFsYm5OcGIyNCtDaUFnSUNBZ0lDQWdJRHhsZUdsbU9rTnZiRzl5VTNCaFkyVStNVHd2WlhocFpqcERiMnh2Y2xOd1lXTmxQZ29nSUNBZ0lDQThMM0prWmpwRVpYTmpjbWx3ZEdsdmJqNEtJQ0FnUEM5eVpHWTZVa1JHUGdvOEwzZzZlRzF3YldWMFlUNEs2ZjdKY1FBQUFvSkpSRUZVT0JHbFVzOXJFMEVVL21abWs5MU5paVd4MHRvcVZSRHhvQ0NtSUhnVVdpaWV2UFRrU2NHVENJSUhFUS8xRC9BaWluK0NKdzhxZUZERVMrMUZnZ0VWV3l5MDBDYllObW1iNXNkbXM3c3pmck90cGZjK2RuYmY3SHZ2ZTkvN1pvQWptamhjYndEMWJIZTNVRzA2N2tZdkVBR0RXMTB1T2x1ZWIzUWNoN1dKWS9YRE5RY0FkNVo2NTc1MW5PZk5VSlFTcmQxWUE0WlJUZFNFdnJhWlVvWUNwdXlZK1A3bU5XL0pBcVVBNXN1c2M4bC85R0ZGdUpNNk1QeHBZRmdvNUY1QzZqUFRScVRIMVEwL05UZmZUV05tSm5Fc3l0UGlyV0tyTGt2OVVHT2lZSEJqUkNLeDg2UkZUS0NmSWRqbkRZMjVob0FqWkduWXVYSjhIZGhJQVdvdDRTVmRPQ01zbUM0S1hQVU5hcDBFemI2QXNCeEp3WFVraGpnS3V1U2g0S2kyOExoREN0Q2pTSjFkNE1GRmdTZm5iUVV3VjR2d2FqbUJiMXNUd0ZFSzFSYjlEdU1xVFVsZktVRFE0Nnc5ZHJFZGFGYkFJVTlpY2xTZzZOdHNnNGdxanUwQXl3Mmd6WHpFTm5PZndmWTJ2YTVBMUdlRHlLVEtEeWlEVTVrRWl0MnRpRW9LVEExTHhLSEV5N0pCUWZ1b0hRYXc2b2NjcGRIUkZFeGd2YVh4ZlMyQ2w3RWtMU2hucHlBNnpNTHRhM2dwOS84YWtBSGxRa0lHOVRibmxScTFIWU9mVmY1WDdNcVI4bVJqcmRyV2tJSEE2QW1nekgySzArMTNRektPRjFZTnlqbnlaY2NmYXhxVkZRZDFKc2QyL2tGN2ZCcXJUWWxjRnZGQTBBZ3RZQW93UHYrbThhZjBzUEoxTVg5OS9oYzdFU05Lc2xEc3pnZVMreW9QM2ZCcUtsY2luM1FxTjBkLzExOFRZTy9NNkp5NXUzZ2g5c2RlUUdRdUcyTmNLNXk5QTVRai9UcEVVWTRNZlJWVnhnYzI3NzEvZkhiQk1qZ0FzQnVhT0gzNzQwa0Izek1KYnhITmRZRkJya0krYTNKZTBIczdPL1dYZ2YwRHR4bEh0SDg0aWhRSmZTYXpqUUFBQUFCSlJVNUVya0pnZ29sUVRrY05DaG9LQUFBQURVbElSRklBQUFBZ0FBQUFJQWdHQUFBQWMzcDY5QUFBQUFSblFVMUJBQUN4and2OFlRVUFBQUFnWTBoU1RRQUFlaVlBQUlDRUFBRDZBQUFBZ09nQUFIVXdBQURxWUFBQU9wZ0FBQmR3bkxwUlBBQUFBSGhsV0VsbVRVMEFLZ0FBQUFnQUJBRWFBQVVBQUFBQkFBQUFQZ0ViQUFVQUFBQUJBQUFBUmdFb0FBTUFBQUFCQUFJQUFJZHBBQVFBQUFBQkFBQUFUZ0FBQUFBQUFBQ1FBQUFBQVFBQUFKQUFBQUFCQUFPZ0FRQURBQUFBQVFBQkFBQ2dBZ0FFQUFBQUFRQUFBQ0NnQXdBRUFBQUFBUUFBQUNBQUFBQUFmZ3ZhVWdBQUFBbHdTRmx6QUFBV0pRQUFGaVVCU1ZJazhBQUFBcHhwVkZoMFdFMU1PbU52YlM1aFpHOWlaUzU0YlhBQUFBQUFBRHg0T25odGNHMWxkR0VnZUcxc2JuTTZlRDBpWVdSdlltVTZibk02YldWMFlTOGlJSGc2ZUcxd2RHczlJbGhOVUNCRGIzSmxJRFl1TUM0d0lqNEtJQ0FnUEhKa1pqcFNSRVlnZUcxc2JuTTZjbVJtUFNKb2RIUndPaTh2ZDNkM0xuY3pMbTl5Wnk4eE9UazVMekF5THpJeUxYSmtaaTF6ZVc1MFlYZ3Ribk1qSWo0S0lDQWdJQ0FnUEhKa1pqcEVaWE5qY21sd2RHbHZiaUJ5WkdZNllXSnZkWFE5SWlJS0lDQWdJQ0FnSUNBZ0lDQWdlRzFzYm5NNmRHbG1aajBpYUhSMGNEb3ZMMjV6TG1Ga2IySmxMbU52YlM5MGFXWm1MekV1TUM4aUNpQWdJQ0FnSUNBZ0lDQWdJSGh0Ykc1ek9tVjRhV1k5SW1oMGRIQTZMeTl1Y3k1aFpHOWlaUzVqYjIwdlpYaHBaaTh4TGpBdklqNEtJQ0FnSUNBZ0lDQWdQSFJwWm1ZNldGSmxjMjlzZFhScGIyNCtNVFEwUEM5MGFXWm1PbGhTWlhOdmJIVjBhVzl1UGdvZ0lDQWdJQ0FnSUNBOGRHbG1aanBaVW1WemIyeDFkR2x2Ymo0eE5EUThMM1JwWm1ZNldWSmxjMjlzZFhScGIyNCtDaUFnSUNBZ0lDQWdJRHgwYVdabU9sSmxjMjlzZFhScGIyNVZibWwwUGpJOEwzUnBabVk2VW1WemIyeDFkR2x2YmxWdWFYUStDaUFnSUNBZ0lDQWdJRHhsZUdsbU9sQnBlR1ZzV1VScGJXVnVjMmx2Ymo0eU5UWThMMlY0YVdZNlVHbDRaV3haUkdsdFpXNXphVzl1UGdvZ0lDQWdJQ0FnSUNBOFpYaHBaanBRYVhobGJGaEVhVzFsYm5OcGIyNCtNalUyUEM5bGVHbG1PbEJwZUdWc1dFUnBiV1Z1YzJsdmJqNEtJQ0FnSUNBZ0lDQWdQR1Y0YVdZNlEyOXNiM0pUY0dGalpUNHhQQzlsZUdsbU9rTnZiRzl5VTNCaFkyVStDaUFnSUNBZ0lEd3ZjbVJtT2tSbGMyTnlhWEIwYVc5dVBnb2dJQ0E4TDNKa1pqcFNSRVkrQ2p3dmVEcDRiWEJ0WlhSaFBncnAvc2x4QUFBR2hrbEVRVlJZQ2UxV3pZOFVSUlIvVlYwOTNiUExmbVVYa0JESTdvVUVSU1ZySUFvbTNreU1GeEtQbmpRbXhJTlhUTlNMQ1RHR2kvNEZHaE1UalViQ3djQkJFMDFBQ0pKZEVrRUlBbUVGQVlGZGxtVm1kcVkvcXN2ZnIyYUc2VmtXcm5yd0pkWFZYZjNxdmQvN3JCTDVuLzVsRDZoSDZYZUgzNGtPN056LzdKKzE0TWtrTUJPdFhFVlpManJIaHJ3UVNUQUtMWkppWGs0eFk3MkZueTE4NXdxL2pFdXlMSjgzeXA1YlAvdjE2Wm05ZTdQVmRLMEs0T1ByQzd1T0xvOGN1RnhUTDlSRmF4ZEFxSVZDMXhiaE9yUEdPbDh0RkhQdURnV3BBZmRBcGJKRllZdzdVY21XOXQzWU5YNThKWWlIQU95ZnU3WHJjR1BpK3pNMVBXWmJWclJ5WW93U2E1MTBGVk1JTndhQjhrb0wvQ3RURzRDU1BPZTZFaFVGWXFSWXJOcDdyMTdmUFg2aXpBc245dWo0OFcrcXgycWpuL3kycE1lS0p2eE5qWEFwaDFzeENueHpjTDM3WHA1Ny9FNG9LeTMwV0t0WTgrbms1ei9GUFkwQ1lDVTZNanc5UFZjek8yemRDb3p6NURFQVIwQXNaUmZncjBlUGRkZU5UVWVXeGw0UERLSGh1eWZFMElabVI3cDJhaHJmRDBMUkIrQjJNdkpVM1dxbEVUenVnM0V5Q0k0M3BnSlpXMEdzb2F4TWREVnBCUzRQL2o1eTVvdUx1ZHhwQWJ6blF3aE5xS3dNYnNPVzFRRWtFa3dnNUZLQlpPNWh0bThjVURLOVJvbEdtaGY4U2VMa2hmS0JqODdFWDN6bnA0NlVURldWTERTZGhCMDNjREk2bVBCOG5VZWZCNUxNUlRrUUYwazc0UnJJNGlZc24yOWlEUW1KaFBiV2hqQ0pTbFRIQlc2RkN6UTBtVEFRQ3psRkM2T3JCVEd6cVlzZUNjQW15RHRhbWlvWlFORGYzNmJsdVhFbG13ZGhwNFZLcCtWR3M1Q2pONEVNTmFpN0FPaUZMZ2lzYWEwbFJQd3RLeC9ERllTTEdhVXAyWU9zOEd0ZGJQNGp4eVp1eU9DRkZ6Y3AyYmVWTzdyVUxwZ3RJNEdjdXRHU0t6V1J5TFQvdHozUUNRL1kwVGtrcXNCeXlGSWNUQ2FRZ2piZnlkcWYvdGtQQU5ZckQ4SUp3dTZKWWt2R2VkZmZiMXE1ZGs5SlhFRWY4TVo3cnZZR2NMQUpEY1RPTnlqS1V4MEJCQ09VWDZLSEFEZ3dPVEFWSFVZbVlqZkdqQzB6T29TYnA0WUQyWXhSRGZrTkpSZ1d2QWxLcFo0cHVZY21WRUY1SnVqTkJvM0kyME9aandVQUFheDM0eEJIV2daKzlucGZqNUJBaDdQOXZyWWxGcVZEcVJpRUJkYVJyMHhNVHFiTUs1TmF2anlYeTZHTERsN1JYbVpBZVNYcTgwREtFTUFEUGs2bzR4U1NVeUNtQjJrNXJTUTFtNW5VWUtHQjBCNkJpVWpBUkFBQnZEV0VaSHo3NlJCblFpYUhMcUFER0NQbWNRQmFLTGNjSUh6NUFFZ0NFQzBvWWd4cExFUEFwcmVFSEZoTTRQcE9FaEtFMTkxQlF3RGtSZW5BWTRIc1hxL2x5TytaV0NSMzNER2l3OXJmaXJNVkh1RHgyc3djV2k3aUNkZnpZS0psTmRUMjNXV3NoVlJib2c0S2YwUUJSQUcwRG51Y0NtVVFNVjJHVVRINlNwbjZRd0NFTklWaEFIaHBZVjVHSENqUUFvQkRnMWRJZ29WNklUZFJobkVGYnVsYTVMSDA1d09UVXBFRmZpOGdCMmtqbGNjQmFBRUFlbzNQVkFMZ1JhTU9hMkdMWklCcWVRT0JSYmRyVHY1YUxDU09BQWdhWXJpSDNiR1pXa2t6NnpGMW9SakVqaTI4VmtkcGpnQkEyWHk4OTNrQTVWY3d5d01vWi9Ob0FuVUQ3WlE1a0VCQmhud2d3SVdHa3IrWGxBd1BCakkrRk1yY2dwVmJPSDIyYlF4eFlBV3lXSWNndUI5UmtBMWpSazVmemFTQUM1bUFsUlZIWng4QVpWM0taQXRRaGdWQXBMaGJKYWhwRnFCR2ZjTTRDYkREd0pjREZXUTAwSjY4bE1rZmQranFRSzdNRjdKOW84akVtb3Evd0xCSXpsN0w1ZHgxSllNUitCR21XTEhaOTZnUFFOWklGM0ljRlJxSk4zT3BrRk9iUkVaeGZTZ0FpRVJ3cDY4bTh0MnZLZTk5MGtTWHltQnhCZVdtd0pQZzVEdDJvWkNoS0lkQ1ZFc2psM3JLRUJsVUZnV3d4TzI4RjlaNTlBR1F4dng1SmVza3dPRnhGeTcrOEdDS294U1hFNWhpa1ZIc2lHZ0JLSzBCOUFERVBkU0MyNXEzbG9IbkdSbXBRTmhQVVBwWUQzQ280UWRjWDBCbWpNUWFjcmZPbHdIQXBoNDF6aHljTVhsckZvZXBCMkVrUkNoaW5HWVJSZ3doVmFtYUt0eklob0phNzdaV3psRFlIVnpuL3dEdHNIMjJJSFRZc3pacXpZN09INXp0YVdSd1M3UTg5M002dm5YUFpSMnQyNFBhalhnRkFuNWYrN1FDeWV5SDd6cDQ1M0hNTlY2L3V2ODRrOWlNZUo0NHRuVVR5dWJSN1A1a2NPYXR6ejU0L1VLYm8vMmsvSWRvNnMxZlhpNUduL2tJaFRhTkM3NEtFU2hleTltU3k4UlRqd0o4dldObTF2T2J0YzhtU1dDeHp0MjY0V1RtQ1RuNzNsZnZQdjlEZVQvZlZ3WEFINk9UMjBlSFhqcXdVOFVidG9hVjZnVEtDeFZFMFQzU0FNYkVSQ3BJekZNUjMreE5KblFGY2ljMXJqay9ZRytmVjhmMm5mejJ4NW1sM3M3LzMvNURIdmdIYWtRU1dLMGpJVXdBQUFBQVNVVk9SSzVDWUlLSlVFNUhEUW9hQ2dBQUFBMUpTRVJTQUFBQU1BQUFBREFJQmdBQUFGY0MrWWNBQUFBRVowRk5RUUFBc1k4TC9HRUZBQUFBSUdOSVVrMEFBSG9tQUFDQWhBQUErZ0FBQUlEb0FBQjFNQUFBNm1BQUFEcVlBQUFYY0p5NlVUd0FBQUI0WlZoSlprMU5BQ29BQUFBSUFBUUJHZ0FGQUFBQUFRQUFBRDRCR3dBRkFBQUFBUUFBQUVZQktBQURBQUFBQVFBQ0FBQ0hhUUFFQUFBQUFRQUFBRTRBQUFBQUFBQUFrQUFBQUFFQUFBQ1FBQUFBQVFBRG9BRUFBd0FBQUFFQUFRQUFvQUlBQkFBQUFBRUFBQUF3b0FNQUJBQUFBQUVBQUFBd0FBQUFBQW02MUswQUFBQUpjRWhaY3dBQUZpVUFBQllsQVVsU0pQQUFBQUtjYVZSWWRGaE5URHBqYjIwdVlXUnZZbVV1ZUcxd0FBQUFBQUE4ZURwNGJYQnRaWFJoSUhodGJHNXpPbmc5SW1Ga2IySmxPbTV6T20xbGRHRXZJaUI0T25odGNIUnJQU0pZVFZBZ1EyOXlaU0EyTGpBdU1DSStDaUFnSUR4eVpHWTZVa1JHSUhodGJHNXpPbkprWmowaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1UazVPUzh3TWk4eU1pMXlaR1l0YzNsdWRHRjRMVzV6SXlJK0NpQWdJQ0FnSUR4eVpHWTZSR1Z6WTNKcGNIUnBiMjRnY21SbU9tRmliM1YwUFNJaUNpQWdJQ0FnSUNBZ0lDQWdJSGh0Ykc1ek9uUnBabVk5SW1oMGRIQTZMeTl1Y3k1aFpHOWlaUzVqYjIwdmRHbG1aaTh4TGpBdklnb2dJQ0FnSUNBZ0lDQWdJQ0I0Yld4dWN6cGxlR2xtUFNKb2RIUndPaTh2Ym5NdVlXUnZZbVV1WTI5dEwyVjRhV1l2TVM0d0x5SStDaUFnSUNBZ0lDQWdJRHgwYVdabU9saFNaWE52YkhWMGFXOXVQakUwTkR3dmRHbG1aanBZVW1WemIyeDFkR2x2Ymo0S0lDQWdJQ0FnSUNBZ1BIUnBabVk2V1ZKbGMyOXNkWFJwYjI0K01UUTBQQzkwYVdabU9sbFNaWE52YkhWMGFXOXVQZ29nSUNBZ0lDQWdJQ0E4ZEdsbVpqcFNaWE52YkhWMGFXOXVWVzVwZEQ0eVBDOTBhV1ptT2xKbGMyOXNkWFJwYjI1VmJtbDBQZ29nSUNBZ0lDQWdJQ0E4WlhocFpqcFFhWGhsYkZsRWFXMWxibk5wYjI0K01qVTJQQzlsZUdsbU9sQnBlR1ZzV1VScGJXVnVjMmx2Ymo0S0lDQWdJQ0FnSUNBZ1BHVjRhV1k2VUdsNFpXeFlSR2x0Wlc1emFXOXVQakkxTmp3dlpYaHBaanBRYVhobGJGaEVhVzFsYm5OcGIyNCtDaUFnSUNBZ0lDQWdJRHhsZUdsbU9rTnZiRzl5VTNCaFkyVStNVHd2WlhocFpqcERiMnh2Y2xOd1lXTmxQZ29nSUNBZ0lDQThMM0prWmpwRVpYTmpjbWx3ZEdsdmJqNEtJQ0FnUEM5eVpHWTZVa1JHUGdvOEwzZzZlRzF3YldWMFlUNEs2ZjdKY1FBQUMrdEpSRUZVYUFYdFdWMklIV2NaZnIvNVBidG5mMDIyS1UzU2xqYjlTUk1DcFdCU1c5QkFiU0V0MUp2Y0ZoUzhLSUpDUVJTdDRJVUI5Y0tmNG9XVW9ONUpJc1ZDSU1YRzJpYUlwaWxwU2tvYTA2aHBaZFBkVFRiWjdPNDVlMmJtekkvUDg4NlozZGt6czBrS3hSdnpuWjJaYjc2ZjkzdWY5L2Y3WmtWdWxWc1MrUCtXZ1BtMDhETVJJd2YzdWxPUFArY3NMSXpiMTJ6SExNNHZtcmtTSWRhWDMxRXAzb3MyZmNmTkdSck9yblhqYk1pYVMrVFFvZTdKbDEvdWxzamNWUFdtQUV4UC82bDV3SC8waVU5Q2IvZHNhTGEyWXVzMnNhMkJvQ3RPa29vRlVCTGp5bEJKV2NjelJzWFllUjNqSkVFYnIyN3Z3anl0NHpYMVBZbURJTzJJbFY2eVRIYld5YUkzbzdOLy8vUE1jMCsxYjRUaWhnQitkZW5xbmxQUjZJL2VYN0Flbm81RVdpR1lTa1JjVHlRTXJrL2VjZkwrbU9oUTFsck1iNEFXYUJzckIyMWpvR1BTVTE1My9zWEpYWjg3bk0rdXY2OUZVMGYvZE9yYTgyKzJSMzV4L0lyeGdrNHNvQzhHTXpqSjk0MkVJZVIzbmVJNE9mbVlLcmxPcWFObGZFZGNxS0tSdEw5MWNlZndyOWVhVHA1cXk4OC9tbnI2TDYyUlh4NmRFcThMNXNtTDFXTytkc0puM0ppRnNVUWQ4UUtyK2RLbW81ZjJyRVcrRnNEQkl3ZEhUeWZyZm54ODFyaUc5Z0lCWnJEWlQzT2xuM0o4TFcyc0hYV05HN2xqUDlueTB1R1JPaEMxQVA2MStRdFBubGx5dHdldFdBd1lVYy9zZnhMWFozalZya0VoTE1VU0czZDc1NzRkVDlVQjZMblo2cTdMMXZEdTZTVVJHd1JNamZreXdsaVk2VU0xakR5MUJlYm05UG9zVldIdEtQVXBOelhTUVhpaTh4bzZXVjlKS0NodmVEZWEvOURYSlJVQWU4SDN0Y2g5c0EwQUt2MitHVEU0M2psaHlkTjMyc0pmdWhZQXpDdDRXUk5rYWN6eHkwWmUrMDlNcUJVUUdTSlVJdDRENkVKZ1JyVlVLZ0MyN2QwMmNMWnJKbUxFYnF1UE94Skh4Sk05bXl4NWdER2VraWtSNjY4V3NyelJHQWFINWpwTFRrNkpUSGN5Y2NobXVUQzlHVE94WWNlT3hzenAwNnR5UXdXQWJOdmxHY2RxZVBRT1o3V0xLQUJ0TXJJRXFTQ0pxZ25oWGw1TzY0YkJ0b1RnZW1NY0lHQ1NhMkk5RHh5NXRLVnlBU0RmTmdPeS9URlBiZ1RBODI2emc0NDRJVTJJNmJKVXVuaE5RQ3pvV3RMS2pBSkllbU80SkNXNVV2QlN2Q3UrS2tpT05aYWxERE9sUkFHaUR0Yk43TldDRTl1bXp6bjIwSVorM1ZSOUlISjlrekJuTVh2Q3VZclNoVGx0SEJDWjhETVpSYk9IZHd1eGo3OE1SdDdHK0NXWWxLdkpndk95WlZ0bWYxNktKOTlVUndDUUFVQW1BZDlwM1dyaEsrdm04ekNhM1pibTBxSkpueFVUaXFMSU1DYlRnZFdKc1NhWi8rNTJTNzV4dndVMW0xSkM2MDNIbUVXRXBsY3ZoUExoUWlZK2paZ3I5a0tZOHI4TW9yZSs5b0VXQUhCNFFKNFQzR0JMeW40WmcvWXQ2L1A2QU9naEthV2dHZ0E5TUg5WFUrU0ZyYlkwS3dyczBjSUM0M0NheHpZNGNtSnFTUm8rUkFVcktFSWlOZERQUDJjU0lNYzUwRUFNdTFlaDZiNkptaW9oS0N1dXQyVHhxR2lBSFJtSVVKMGt5SXc2aWdXOEVyMWljdi9UaC9rc0JyRUVxWXQ5RE5IbUs2c0RvMXJtZytRSWtDYWtDblBSZ0xWNHFTbWhXaTRNeWVYNVJWOHRBQ1lPRFF1UVBqV3RhYjQzZzJ1VXBaa3pna1hSemh3eDMwbkZCV29MRXFVeGNHeXVnZFhMa3lFTE54dmo2QU1OZEd2WVZoL2dZcVh4Sk5MbjF4ekJVZ0hRaGczQmlaZWx3ZTBDSFVzWlp4VzBGSURlY2luU2J5bHZadWlyN1V6R0lOVjFycEVSN0ZnYjZHQlk3RzFNbFMwR3JnaUVPcURiUmdadVJTbk9CcGJ1Ym5WdFNxT3ZHUEswS2dQa0F5b0EyTXdFcGRHQVhHczlVd0Nrd2NWWG9nb0FLQkJJRWhJYWdlMC8vOGlRM0x1dUllTURDSTlvQSs5YXlqeFJ0cndvRFBBdWkxRW1NemhickljZi9mRmNMUFB3YUI4NWdWclNRcUVWOVY1VDhhZ0FJRWhLazR2RFFuVWxGNTRHYTFJSmE5aFhhbVFoai8xcVpxZ1BRZW9QalhKdUpsMHd4ZE1YaTVwUVhsVlR5Mjg1ZlI1aVJvQnlmRmprL29jOWVmSWVSMTQ2RWN2SkdaaVZabE5NeEJnUFROV2RueW9BcUNhZW9Bb256aldRUzR2Q0xqUkFnYWhRUUJ4L0t0RVVuWE90U1B5R0JZMVFER3d2VU9DbGtDS2JVS2VBMUpFaGFndDJTSi9aQkthL3M4dVRIeDRMNWV4c0lnMFhkUERIYURXRWFUTzR5cVVDZ0JxSUFEVU9RUnpxamFIbkJLSWs0MVE1UXl5QmNMazhaeG5WRG5taWxoYVpUV0Z3bWt6Sk1EdldLajBRWko1QTFPbEJtWG5rMlh0c09UTVp3RmNBem5iUVdsOXFBWlExb0NHdHh6eWpVMG9VWkI1M01rbVFCTUxtR0FoYUFSeVNBQXF2TGRaVklHVTB5bjB1Q0FMUUdvVkFoa1UyRDl0eUczYU9sMEdQOUhFRUZ3LzVxTDlVQU5DRUdBa014WWxMa3dzMWdhdXJBRWdpQjdDODN5Y0FiRHM0cG8xTlhnd2ZzT244MXkwRVE4bm4yaVJOMWJBQ1FEdWNlQnhSYkhvUk9RaGhsb3pTaFBwTEJVQUxJN2lWTGlTdlR6QkRFNG9BakptWlRtdmpscHNTR2NBRk1VVVl0d2lKUmVpd25WU2xtaSs0N0FsOTY5Tm9PSnV5eWdHd2hTYmxJekh3UUpYeGd3RG9Ncy9kRkFENmdNWmlTaEFFaW5CSzZlS2NyU2FVSWJQWldJVCt0YnhOQUIvc24yc2prV0d3bzJFUWkwUEVPWXVnMVN1cm8xSU9qc0tnMGptWSs2TWhQRHNRaGtteENOYUdFbXBMUlFNYWhYaUFLQUdnR1hFckhkS1pxV2Y4V1doTUVQNHkyRG9YWm1URkxrS3VJSkY1a0pwRERaQjVjcC9mOUVGR1dUSms2Nkt1N3lTS1loQlhzWHVXRENCbUZ5QU1HQSt0Z09iYXJGRkJCVURIOGJJTU1aeE1FM24reEdZTFJDaGhQWjlpWlRxeFJpaHd6NlNUd2FRSVlCNzdlWmNMZ2pKTkFiYUZmWkVsNjRZY0RZVUVlM1V4aGpCQVFCSGtwb2czQlVxOFk4T1dmRHdiSXlTTERBNWlKZENqckhSTTM2MEN3QVFoTE1Ud3B3QUtFQVFRUUFPTVFqUUJMa1F6b21uUkx5QlBaV294dE1UQlhBZVowRUk0V1Qvc3lOaWdrYitkRCtRQ21OcXl3Wk5kOS9weXRXWExwWGtnNWdJS0JCeUN4UUY4MEJxRWJiNzZiZ3NIUW9DR2FnMHVLRFJ6YXI2a1ZRQjBybDVNUnh6a01tb0FKd2h1ZVQzRVpmVUJTRTIzMmoycnBvQUpyQXRRdEt3WWpGUHBTZVlpSzd0eSs1Z0RqY1J5NEoydXpDNVp5S3dEOHU1RmtjbHJzWHp4UGx2dVd1L0p6SHdxN1pBT2oxMHZwRDB4Yk9USW1Vam1PcDZNREZCcjRBRW0xWEFsSG5FdVliWFZwUUlnbkh3N0NscHBFSElvUWcrbE8zT0Y1dUZBUXBRNHFCWDJtZzlCRzA1VjhJVzVWaXJETGlUWWRLU0RrSFQwZzY1OE9FTTdSRlJCT3o3d2FEaThkQzJWQThkRHVYZEM1SUhiSFprWXNtR2FxVnhaN01vYjcwY3kyN1prY01DVmJrQk5BeHdFbUlacHNIRHFPSUwwNmxJQk1IdnVYRENjSnJQd0lmMXd4Uno0eVpWVTlyOFZ5ak03T0J5eW9zZFNaTFJLNk4zR3k4ZFhZdm5aNFFVNVBZazlESTZlQ2NZMGZGY0djYVVBQ0RsQ2ZaeUVoQVNSOHR6N2J3ajAvRlFNczhIT05JZ29MM0dodVNHWUVXTVh6WmhMTUNjMjdHVDI4bHRuS3R1aENnQ003MXBSNTd6bE5ML0U1RVF1dVpsNzVVUWlyNTFxaTJmbFoyQVAzOFJEZkZMT1J6RCtjNHZzeXVpUXE3YlBEcGR4bGdVQXRHZzA2bFhSNVBIckdIelVBNGNaTm9MOFpSakRQS1A1aCtOUjU1YThhY0lQRDBHSCtleVZleDBBU1Jlbmo5bWo2Nyt1SVJOalNiaUJzQkxESnlMZFltS25DU21HRVdOUlhoeUVDUjlNTU9vUUZCY0dWcFVnL1RRdmFDd1ZqdU5GUjdWd0htQWg4eXNGd1FGengzMUVvMmo2MkVyN1NtMkZnNVUyYWIrei80Z2RkLzVoR2VRLzlZV2NHYmdVdEdIamNpQTlXeVZJS2ZKeUFJaE1rT2xpenMwK2kyeGZOOTUzWE5uWURNN092Zi9iSXlVV2w2czlIUysvYTZWOThlMzIyTlpuWnAzbUhWOUpFa1J6bWdBbGcwdlZpeWNsbmlCaEZlOHF1YjR4UERLeW5hZTY4cmh5blRUWG9wVmx0ank0TVl2dlNOLzc1dS8zZmZYRWFpN3p0MW9Oc091ai9ZKytZaGJPdnRqd3M5aEFDdityd2x4UU9QTzJPN1A0YnYvYzkzL3p3dWRmV1d0OU5kZTFPdEh1M2ZPMW8zdk51a2UrRjV2bVE0ejFtZ2Z3aEE5TGdIODM5YXk4bGtUbFB6U1lWeTU4cFgveFgwd1JBaVMzRUEzWSs5aWd5TWFSOWdkandYdjdmdmZ0eC9sRm1ubTd0dHdJQUNlWjhXMVBiQjdiK1lNdm0rRzdIeGQ3YUV0bTNQVytiemZDeU5qSXl0QmlQUmxFUk4zLzBHUVlrUGo1aEV3eUxQSXNrWC9VTW1uRHk1SzBtd1MrMjUxdG1QWS8zZkRDWHlmZjJQZjZzZGRmbjhUNmZiQlg0NmhmZWZXWThodHRhYkE1TVRIZ3JyL1B6NXh4QkhRWDUvcGVnQytQUkIzQzFKcytXVVdGWDdmWndUWjhGODBzcTV2RlMzTkpOSDgrUEhQbWNnZk4yRTJ0TFhIMDNTcTNKSEJMQWlVSi9CY1lHc1pyMjk1WnJRQUFBQUJKUlU1RXJrSmdnb2xRVGtjTkNob0tBQUFBRFVsSVJGSUFBQUNBQUFBQWdBZ0dBQUFBd3o1aHl3QUFBQVJuUVUxQkFBQ3hqd3Y4WVFVQUFBQWdZMGhTVFFBQWVpWUFBSUNFQUFENkFBQUFnT2dBQUhVd0FBRHFZQUFBT3BnQUFCZHduTHBSUEFBQUFIaGxXRWxtVFUwQUtnQUFBQWdBQkFFYUFBVUFBQUFCQUFBQVBnRWJBQVVBQUFBQkFBQUFSZ0VvQUFNQUFBQUJBQUlBQUlkcEFBUUFBQUFCQUFBQVRnQUFBQUFBQUFDUUFBQUFBUUFBQUpBQUFBQUJBQU9nQVFBREFBQUFBUUFCQUFDZ0FnQUVBQUFBQVFBQUFJQ2dBd0FFQUFBQUFRQUFBSUFBQUFBQW1nTzgxZ0FBQUFsd1NGbHpBQUFXSlFBQUZpVUJTVklrOEFBQUFweHBWRmgwV0UxTU9tTnZiUzVoWkc5aVpTNTRiWEFBQUFBQUFEeDRPbmh0Y0cxbGRHRWdlRzFzYm5NNmVEMGlZV1J2WW1VNmJuTTZiV1YwWVM4aUlIZzZlRzF3ZEdzOUlsaE5VQ0JEYjNKbElEWXVNQzR3SWo0S0lDQWdQSEprWmpwU1JFWWdlRzFzYm5NNmNtUm1QU0pvZEhSd09pOHZkM2QzTG5jekxtOXlaeTh4T1RrNUx6QXlMekl5TFhKa1ppMXplVzUwWVhndGJuTWpJajRLSUNBZ0lDQWdQSEprWmpwRVpYTmpjbWx3ZEdsdmJpQnlaR1k2WVdKdmRYUTlJaUlLSUNBZ0lDQWdJQ0FnSUNBZ2VHMXNibk02ZEdsbVpqMGlhSFIwY0RvdkwyNXpMbUZrYjJKbExtTnZiUzkwYVdabUx6RXVNQzhpQ2lBZ0lDQWdJQ0FnSUNBZ0lIaHRiRzV6T21WNGFXWTlJbWgwZEhBNkx5OXVjeTVoWkc5aVpTNWpiMjB2WlhocFppOHhMakF2SWo0S0lDQWdJQ0FnSUNBZ1BIUnBabVk2V0ZKbGMyOXNkWFJwYjI0K01UUTBQQzkwYVdabU9saFNaWE52YkhWMGFXOXVQZ29nSUNBZ0lDQWdJQ0E4ZEdsbVpqcFpVbVZ6YjJ4MWRHbHZiajR4TkRROEwzUnBabVk2V1ZKbGMyOXNkWFJwYjI0K0NpQWdJQ0FnSUNBZ0lEeDBhV1ptT2xKbGMyOXNkWFJwYjI1VmJtbDBQakk4TDNScFptWTZVbVZ6YjJ4MWRHbHZibFZ1YVhRK0NpQWdJQ0FnSUNBZ0lEeGxlR2xtT2xCcGVHVnNXVVJwYldWdWMybHZiajR5TlRZOEwyVjRhV1k2VUdsNFpXeFpSR2x0Wlc1emFXOXVQZ29nSUNBZ0lDQWdJQ0E4WlhocFpqcFFhWGhsYkZoRWFXMWxibk5wYjI0K01qVTJQQzlsZUdsbU9sQnBlR1ZzV0VScGJXVnVjMmx2Ymo0S0lDQWdJQ0FnSUNBZ1BHVjRhV1k2UTI5c2IzSlRjR0ZqWlQ0eFBDOWxlR2xtT2tOdmJHOXlVM0JoWTJVK0NpQWdJQ0FnSUR3dmNtUm1Pa1JsYzJOeWFYQjBhVzl1UGdvZ0lDQThMM0prWmpwU1JFWStDand2ZURwNGJYQnRaWFJoUGdycC9zbHhBQUEwNWtsRVFWUjRBZTJkYVpBa3gzWGZzKytlYzYvWjJRT0xhNEVsUUFJbUtkQ0VMRktrUk5BMmd3ckxsTU1mek1PbUltelJKaDBNaDBnNS9FRmhpYklWVmppc2d3aUhlSVJOU3FBc0tpZ0xFbmpia0hpSUpnaVFPQWlBd3BKWVhBdnNpY1VlTTdPN2MvWDA0Zi92WldaMWRVLzNUTmRzTHdTU2t6TlZlYjE4NytWN0wxOW1WV1ZWTzdjWk5pV3dLWUZOQ1d4S1lGTUNteExZbE1DbUJEWWxzQ21CVFFsc1NtQlRBcHNTMkpUQXBnUTJKYkFwZ1I5OUNlUmVZbDE4cWZGenVjVFR1bHlJcytMOTJ4SjRwQnZqTk44STV5VWpvRFJqUTBqVDMzNTlCdjJMM3U5ZXpBeWhuNnRRUkRveDdsWnk0YWYydWZMUC9PcEhxN3R1dnJsYTNUbFJHUzFQbGk4MG02VjhvVnFvNXh1RlZqMlhiK1J5dVh6ZDVlcEY1eHIxdXVGYWdWVGQwd3VSWmF4Y3FYUmNqNWxRWGlyNStvV0ZCRVViWHJBUlgyeEd2S0xDWHVYMVpyRkZmYTdsV3ZWV3E1VnJ0SnFOU3FGUnFDODF4c2J5SzNQbnp0ZGFaeTRzdHc0K3RuVGt2LzdiSllIV2REUjBwRU0rWktJaHhEZ05NOVIwVk1oUWthYVFSZngwTEhhMi9JbnZmbmRQYzhldUEvbXg4UnR6b3lQWExkZGIxOVNhK1YzMWh0dldMT1NxdVVLdVhDeTYwbnpORlpvdWwyKzJYTDZKYkZ2K1VOcUdpc283WXFTVmxJVTBlUWdUMnhIU0RlV3JJMUtvS2hlbERtQW9pL0F4SGZNV2kzQWRtSWdqM1VibDFrWXNLV2tIWUxsOHE3bGx3alZtNTl4S3M5R3FpY0NTbUo1eHVlYXBWajczYkc1eDhlbld3c1hIQytkT1BYbjRuOTV5UW0yaXZSVm9yMFBvTGwrSUNobzJoWWdYeGRNSjl6K2ZlT0xHMHM3ZFA3ZGNxdno5UlZlOCtXSTl2MmNoN3dybk5ad3VhaXdzcU51TE9wYlJoRnFWcTg1SmFDYlVLTTBZZ3crcGtDZFkyaWU5dEZRUXFoSzRKQi9xWUdwc1RBckZBQlo5WTJEc0NEQ1IzcXJ5QUlkUlVFZEl3L29TblNXRmd2b3lPZW5jM0FVUGswTWlPdktvbHhqZ2htdmtjODJUdVdiOU1iZXkvSlhDMmJOZmV2WXQxeDVTRGVndnF5RkVSY0hHc0FJNDZaZko3Uk5QUHZucXd0NTk3NXR0bGYvSjJWWis2dmk4Yzg5ZmRPNnMzTzVjcmVVV05LUnFVb0xjcGgraDBreEJybmwwTE8vbVpodUpnSWZGWElKSDNJMVA1TDBCTE1qUEJFa01XeUI1U1dKeVM4R2RuMnU2cGcwRnp3SDBOS01aM1p5c3BLQnByVkRSb1RqZmJKN0pOMWYrb243cTZNZFAvSU1ERDZ1RjJZbGlrMm5TaHlFa2h0MWY4TUZzNDdmdnZudDYrcWRlLzRHWi9NaDdqOVh6Vzc5L3hybm41bHJ1N0ZMTExjcFhOcVJ3UmswTVVRR1VsVXM1TnpidURTRFdEejN1WXdERHB0TTJnRWFIQWF5bWd6SGs1Qmx5cmxET3ViSzhVNkhSbk0zWGx6NjIvRGYzM0g3cTNXOTVRVzJHN2cyR2FRRGdnc0g2SGM4OTkvcjY3ajIvZDdSZXV2WGg1NTE3L0Z6TG5WNXF1bHJ3bVdiOXF5VmdKUmhBNmNmU0FOSUNrUkhJY29yVm5LdU00eEZXN3MrZE92bkJJN2RkL1MxQkRkVUlvbXRKVTk5SU9pcS8rWWZQUC8vTytlbDluLzN1aGRLdFgzckt1WHRQTnR6eGhZWldRRnJKQ1hOZWtNTzB1bzB3KzlKdkl3L1piTGpseFlaYm1OSGxRck4wYTNQWHZzL3V1K2Y1ZDRwM0poS01ZQ2hpSElZQndJaG1MdGU2NDlUcFg1cWJuUDdrZldmeVUzOTF1T1VPemRiZGt0dzlSSWJDcmZEOFdBVzV3N3F1TzVjMGRkWnErU20zYmZxVCsrNDkvUjdKWUdoR2NLa0dnRjZ4eHNZbmp4NTkrK3pranR2dk81MnJmdk40MDUzUXFHZUszMVM4aEhDSm9kbVFON2pRZE10THVhcmJ1dVAyZlY4LytnNmg1SHJwa2ozQnBSZ0F1cVY5ODZNSEQ3MSthV3J2N1ErZXpZMTgrMlRUbmRGOHZ6bnFKWmtoaG1aTGE2aDVIVXU1RVRlOTkvWXJ2M2pvcDRYK2tqM0JSZzBBNVpzQi9QS0hQN3lyY1BVMXR4K2N6MC9kZjdMbHppeEwrWnZEZm9pcWI2UENDSmJuVzFwUGFUcllkODN0TzMvakk5T2hkc01TMzZnQlFCZjM0Mjc2NTcvNGdaTzU4aTMzSDJ1NTUrWDI0OGlQRnZKU2plR2Q4Rkxscng5ZnVzSHNhbG9UTkN2bFd5ci84QjBmOUwzWStGVEE0aTFyZ0RmMDNQcXRyMzN6TmZQVkxlL2hVdThaelZFMU9hUkxIZjFjQnVaMUVIUGI5WElGOEhOd1pRb2RPblU1UWlGRkExckRDSTE2MHhVdUZGeDFiTXQ3ZG4vNi85MzUvTHZlK0pEdzBvWE1GRFppQVBTQjBaK2ZldVVyMy91RWJ2SThmcmJsbGxkYXJpZ1c5RERra2tJMGdKeU1DZUZkcnRCTjUzSVpBTWJNZ3d6NmNxbXlhY3RDMDREV1dhV1IvTmJTZ1ZlL1YrWHYwOEY2QUlsbGt0cEdwZ0N6dE4rNDY2NGI1NHZqLy9nSHVqOTFTb3VUOUlqQzBpLzFpS1B6VXZHczFYN1lQUGVpZGJsbzFPVzJWblJidlZVY2U5c1YvLzBMTndiRlo3YmpyQjRBQW96KzF2UXRQL25XazduODl1ZG14WWl1OVhVSE02UHRDYjVIUUdDTUdrS01mVzY0Witnd1ZtQWJPcGtsTnlBN2NkUmJYMEsvQm15NkRwanVFU3pxZHZwb2ZudnU3N3ptclFJK3FNT21ac1VEVThwcUFEQ1YzNzU5ZTZVMU92bm1FM3FvYzBiMzloRW0vbWNZSVk0WUVGcDZHRWg3NFJEUFpnU2l3OGk5bkFhZ3hYdmlFU09kZ1RYVWkvZFlwcWRMalZwQlQwNjN2TmxOVFgzRW5UbXpyQ3J1RHd3Y3NrNEJ4dis3Zi9NM3Ixak9WMTV4OGp5UGNNT2RQb1E0aE1OR0k5TGhrR2JZQk9BM0JQZzRSOW5RRHVnTUUxOHZYRUV1TWdMNHRqNHBwcCt4cnh1Vkc0T2tvYjBNclVMNXBoM3YveTlYQksxSEd3dlp0YU1zSGdERTVtS21iNzdsd0tJcjdEeWpPYWhCWjlhbXNXNHR1aVlRYXpPTlBUWGowYWtXdTc2d3k2TkZlTnBzT0FnSitEbVl3dUxUeUEzajY5TVFMOU13T3ZLVWlwT3JKQ29JSWh3MUZtTmZzZjVaR0YxRGV5aWFsY0xPeXY2Zk9LQVdUNE54L1padGlDd0dRQ3REUHJwcjF3Mm5XN25pZWJsL2U4YWRpV1NiZUV6bG9vSWxFK1F5cVFYRmJ1MEptTllqNFo0aHlJNjZWSElWNkNxMlVnVzBxMVp5eG4rdFVPaVVXaGZTcm13SG5SUktYOTVWZ01JcjZzdWtudXp4S1B5Q0ZtOEZGVVl3UEp6UGlKY096SU5sbWxoWFBsOHNiSisrUVMzK3J3NkVCcXExMkZhMUQxa05BT1Q1OHVUay9ndTJneWU0c29odGd6R2NhaEM2cXJELzVNNkN1M1U2NzdielBMeFlzRjVZVDFMZFNTVUhwb2pBYVJjRmJ3bERwSkpZbWNJMkxCcTRkN1N4cEkyTUp5KzAzUDI2VmY2OW1icks5T3hmbzU4Nm13SjB5cmU1UzNHeVRsSUl6TE9NVCs0WEpBdDBVQTRjc2hnQVl1SW8xMTM1U3JaeExjbWFtOUdWRFV5eUI2Q0VCQ052bWk2Nlg3ZytwOUdpcldIQzMySTVvN3FleXVoWDNvVWVoaTBraVpCUEkwMm5RM1VrMnFzcWdzUTRRWjBrdW1pb3ZGRjJibXBYem0wZktiaUNIUFVEWjdXN1ZRWnZ1NElFamhoYldFTFdvQ200cFcxMWNzaFhxYWw4alcwMkhSaExGZ013cE5Oalk5VjZvN0JyUWV2TnBvZ1h4WE4zdndlbFRuYzVtSWV2MGhhd04xeVJjeFBhRnJVd0t5dEx5UUw4MGM1U3hZT1M2WUNMdkRMblIxeklQYVpqM05Fb1F5YmlwMGxjVjRDekZHaG9GNXA3MVZUQlBUVlhkN05hUUxObnNIc2RrTVlCbmpXREJLTzd3NUpQY2RxTmoxZmRSWWFtcVdTZ3JrQiswR0I4M2Z5V242azJjb1V0Yk9CRWNReFMyY0dHRHBUS0hUOVd3MWVONXR5MkNlZm10YkFzcTR3QVhtQ1k1a2d6VGNReXlyTWMzVHlDRTlmSkVmSEcrRkpvcEhGQUkvSXVkcDBjbTZ0S2J1TXk4bDJhNzFoQXMraWxJellOd0Uvb1l6ZS8vZkxXSENWSUp5T3Zlek1rTXRuUG9CNGdJczN0dmY2V2Fpdm5xalYxQk8zYkxVNGxOeG9RREVJWWsvTnFpa29UZDZZeUZwZldPUkJUa0FxVzdTcExWYTlPQ20vc3dPckszaVhEcElFbmlJZGQvb25rS0hmT3NCWlYwRzhXd3F3SnFNOGFiS29zdW1ycDJyOWJYWFNmby9uQTNSM1VBQktlSnZidXJlU0toWktNd09XNStiOEJoaE5rSk5RZUl5cHBaU3lkbStLanRkc0lWVjFDSWlSOGxKUjJvT3VYU2RiZGE0a21oWkpMckt5aEh3MnVCS0lCMkFoWFI0c3FMQlh6cmlSRGlMdUQ1UWN5cU01ekIwMmgwVDdLZkhsa3g1NkticzFrQ3BrTm9McDl2RndxdTFKWmJteDhWSlN6eXlsaE1EWkZLRVVKQXNYak1uazZaNk5mTVdYbUptbWxOQ2VMU0dZSS9sSXphTCtmRVNTSUw1RkdDai9LeGJBcFlyNk5VMDlaV2h1WDIwTjV0aHNZZ05BdTFWeUY2NGV5WG5BWkhja1Y2OXRIcEpVa2dDYnBVVkxhbGNoaUFJYXcxYXFXNWhkeitWa3QxTTdOTVBtc1M2T0xaR2NXbDRlQzZ4TkZZZEs4cUh6aUFVaExldDRZSXAwWWQrSVpMRWZiSGxMdVFObVJHUXh0QjFTYlJoelowUU8wcEd6NlI2Z3RhUkY0YmtXR3I0cy9BUlJ3RWVLTjZTQkxBTHl5Vk5KMk1WZFlybzFsMGFlUnlkb2dWeWdWQ3kyOThJUmllTXc1akdBM2s0UUlSYWM5Z0JtQ1RoaEkyd3RzVUVFREN6Ymczd2dabzhGSmpSWFp3azV4WGdxbWxBVXZDMmY2U2Qvc2hBZFFHWXJIVUpnT3Fjb1NtQ3AxSGFpWGpYSlo5V21YMzFsb3lXSUw2SjNiODhZb0hkdG9RQkJnTWVFb0RVNEV4QlJnK0JYVE9STVdhUXdoSWRaT21iUjdsQ2R6Y3F3elptblhXZFBHcEJTTG14UVYzN1FORVZHMTR5NEpTT3VHWFNQYTVuMEJZdUNrVWJCTkFVSVhMejJKRVFCWXJIKzBheU1mS0dVNHVDZUhPL0ZoWUJTWkxVYTdsQXZTZzUvWU9oU3lOcStSSSt0dklrK2ZhRW5ER0FQdWtYZjFkSGxzZWNxNDF4QTlBSGxUanNXQm5oQmpGaEYvd29VS1lobmdNVzMxcGlSU2xLYU1LdUszMHE0MmdLOFIwalJRTmhxT1U0QVpnc3FpQVdEUUtNMHJUZ2taSGUyajlraG5DU1lYa1pNTlJCUUROODlzQUxwVWlXL3ArazRNU01vNnBST3lRUUM4S01KZFJKU0xrdGxSeER1Q1M3cThwRU8rVGh0TlZOZVNHL0I1aUtsUy96RWdWQzZmd0d2RHJCMUZFRTgwNUF3T2FFdWtFRmt5WlF6dDF1dWtVamdFNlVkL1VENTVTT0htaVhYZ0FZeC9tcEdtQTByVGppTGxFa05RY3FCZ2hzUzk1VmJ6OGh1QTAzdmI2b1E5dzlCYjhHbGQ5R1NXRGxsQTBlcmhzb2I1Tmwzejc5TWJzOXYwTUthRVZGVHh5aTA1dDFmczE2b3RWeFpXREFOTE1BUEJMU01keWhGUlNMTUhjVjR2bU00cWdTeTVsUFFLME5ra2JvQkczdmlneklJdjc4eWxxOXJ0MnFsUTN5T0tlRXpEY0NnNkpobFZvRjhiN2ZDbXRLMEJoTU9QZmhWQVFQMVR5Zzc2UjE4eUJYQklKNFhzTTNyMkZucEp3V3RkWExLQ2gvRitJUW9QSldMNUpmWDZYOTFRY1A5aWY5NWRPNVp6dWkzdWR4SUZCTURueGhHR3g3b1dicHFZUWVsMDlHTFRmZk5relQycmQ4M0xyS28xNUZoWm14R0FzMXZ4U1I0czdXQkcxODV1SU9XVmoxYk5DTlFCU05tQnJKUzJTMXpEckV3d2JCYUJYQ0hRZjRadzFtRnN4Z1RPWnRackNQOE1ocWFaQW9KbmdCS3ZGZFJGQXdTdXBPNTkrTmFpKzhWcnNuYXZQd1Z1cG5FajVlVjYvZnJxaWFxNzg2a2w5K2pabXF2bzhXNWUwNkZORFF4QkJUc25pbWVjaVRWZlphTXgzUlh6TStrQ3c3REdTWGdBOTZhcmxPaVkwcVVaSDRlOFlHd1JLQkY0RDZBQ2dkUFdycWdDbnF3ZWdPY3hoa1JSMXBCNURiQlNhK1NxY0NpaU1CMWsySk11Z3VSZlh3Qnh2L1NLdkh2M0VKWGZUWEJVaXY3NWE2dnU4RnpOemVvckV5VjVGek1DN0Mwb0pKRVMrUzRFeU5Dc3VxdmNpbnVVeGFKT1BNSml1THNVYjRiZ2pjQ21BQnBCa0FNWmlrZVM1bEU3RWFwMC9aQVkwL3FncXlBeUd3QVlqSGVkYkpwZWhUSlZJQmhHLzNiTitlL2EzN1hwSWdVMnJPUTJ2VmIrcXFteSsvSXppMjVFNzlnWHVNMnFZWjZYWkUzbEVxNlhMejFJTXI1RDZoV2xGcEpFMzRKWW9UaG9MQjBGZzZNb2VlUUxPUjNSQU1JaXl2aERqdGdwWkZlUlZ0bDZnVXRsTTRMMUFIdlViOGdBN01iTk9rUlpLTkN4dWhaOVYybkJkN1hlYzM4eHdyN3hnbWpxRlNwNW5hSVl5T3ZPU2g1ZjcvL0ZnaCtKcTNrUnh5WjlyNEpPUmFqeE9pRkNvR1FDc1IxQ3BPc21IWjZ1M1FrTUl6NXFIT1ZCejV3VmNvdEdaWmpXUDcyb0hrQVA2K3ptREJ3anNOanhiamJqK2dEcjNLYk5FTlV3RjNmRERUcy9KaS9BWTlibEZlMllGWGVGNkFFa1hlOEZFRFhCY3BieUphRzhJNHF3QnJiR0tlQXlZUVQzRC81b0JOREdDUFNIL0ZBMGgya2RFaGlxWmYzNnVwOU1hZEl6R0E3VmdEeGp5TzRCZEsyTzRrMzVpdnN4RzYyYTYzZ3U5YXpER1puYkNEZ0x2eFg4ckJZb3VtT3RhUUFQd0lFUzJrcjMwby9jSTBFZjRycUZrbGdiNi9ySG9YM0VyNGFvVWxsL05XSzBQVDVkUTltdDM3YnlsVmQ5cERjNHpSUTNOT2JZUU1oc0FCZ1pLMWtJMmgyaEhrU05uOGhRekt6UnN3aWFSclVHZUJwc1ZSclBVK05hUzRwdlNlczhZbUpuSVdzQkpPM3grdEdabGhvR1RaNEltSkNsY1AwQWFrRjU1dzF1bE84TE1UNUxrdFZSMXdtaEErOUhrby9pQVBIMEk1OEFEUkJvWkF3UEFOc0ZrdGtBYUcvQ0VrSGlmblRwSU5mVkVkWUFyZGVkSE5DK0Y0NWVaYkVsYUhxZ3NtcG9zczNic01vQXNGVWVzT2g3ZmFZVWxPQXBwakVFYW9wOEtuVU9WYlRxR1lTbWpTa29ueEwrZFREekVjY0REOUFoRStHUEhpQnRCT3VSN2VBbDRPZ29HekN6WVFPZ0V6Q3UvdlFNQ042a0tSaGc5YjkrR0FTb0g4R0FIVnIrWTFSS1NLSzZtYXkxZ0Y4SWV1VjdaWGlPUU9hSm1sSlNYSGJtMXlFcUxCNDN1S0lIOEdWeDhXZFhBL0FvbnNCdHNnTmNCM21VVHhaSzBSQ1VIQ2lBSzhYNlFHMGlVR1lEWUFlQUxmQ2tZUmlIZHE5Z29nMk1wY1ZIVWN5SGFrT0N3Y1R5WHZoaW1ZMldBTmdMSHB4OC9kT1FLYWFEWEFYWVl4STFTTnFrRTE3YnZpOGdTSWVRajhWSk0yQTZNcjZSR1lMS3UwYytkL3VpQVVJb1VScUlBM0xRcGJJZTRTRG5EVFh5aURNYkFDdE5MZ1BOYWtXNGh3d01Nd28xdVFvbXh1bSt3RE13aE1oLzBJTndVdElPUHFlUnBhSXdsU2VFSTMxZ3JGNkpGVnRwcVVCckFZeVYrd0FZUUU1YThMaEE1T2thRDViMkJiNCtuUmJzR2lIU2p5UGRLNTViMGQ0STh0STBpcmVMSUdKeGFaZlJFSW9IOGd6RG5pamlYSU5zVW1YOFJqd1lmc2FRMlFCWUJISnBoN0tZYXZzeEMwL2V5cFZDYTdRTEIya0UzeGEraDQzMTFnNmdkTEJDNFRIRTZZclZQTEFHaUs0L3B3OHNtZkoxS3JBb2xDYTRmVnpSblVMaXNvNlNwSzZyUjl1V3hqWkhGZGwyN1dURVFnNjZDanlWcE44c2hMblk0S21tUDd6bllmcFprWWJySzdvY2xYUllHTElocENDTDRNNGt0OFMxb1VieUl4WWk4V1E5aVBpTlNzWlRhSnV4bFlGbk5nRHpBQkJVNTlHSlpOVXpVSTZSR0l4aW1oQlFPblhFRkFKREhiRVBpR3gxQUE4MStJR2tQaEEzV21vU3NtNUJUd2Naa1ZWdHh0ODVWbkM3dFBkdWwyNFFUU3U5UTY5b2JkRXhxcnVUVldtN0xFTmdYNTRwWFFpSTQzemRZUURDRDkyRVgzVUFRK0NDQTJQUWJRZWJlbmhaWmw2UHRQVmRjRGVqNDdSZTRlWTRxKzhSejRrdmRsUFg2Z1h0NVplUjZ1QktoUVVxQW1HYzJFMHJ1aDg3UTNxOUFHTnF2NUdRMlFEd0FIRUtzRUhaaHlvOGVZbUZlSFcyWFczQW9VR1NKdDhPRktNUWk5dkZxK1JVbGpKZnF4Y0xiOWhadGVPS0xTVzNiU1R2UnFSd3ZXbG1nWUZuaDNMRTRMUTRwTTBZU1ZQUkk1aGhDQmZvRUdEYVlIRHhOZzNBbWY3WjRLTHRmKzY4WHFSNVFkOUhQbkpleHFEMGpQWlV0bVE1ZWwzUVZZVEVOdlBRUHgwMDlBYnYrMHpKbWtFNDF0TEZXbTB6R3dESW9yQk1jbjJ3TTVkRlFVWVE1QmxsYWlOSm1TamtHRWZZN2hpNUFNTTFOdnNRd0U5QVlBbE81YmVQRnR6NzM3RERUZXBac3cwc0FUQkM1eVQwU05Oa0hCcFpXdTFpREU1Q3hPbHpnNTJUTmhHWm1NUVkrREw0TnIzck9LVVhYMTYrTytjdWlwZlg3cW5vS0xpN24xNXhqN3pRc084blYyU2hmcTNpNmVIdHpCQWl2bjVzUURnaDNnK29kM2xtQTZpbkZvRVE3Y2ViOFVPOWpyUnk4VlN4TENyRVdBT3VBNXRoc0Nwb1dDNGswcDZnRFdXZzl1YnQwcElFT2wvWE40dllkNjl0RXZaNFdQV0IyWFNiam5RNjQ5RUZ5djE2bVFDWmQ0bzUra2V3ZmlwR1p1WTVsY1pnMmJxNWI2dHpWMnd2dWpkZVYzVGZmcTdoN3Z6K2ludjBkRVA4Nnh2QmJPMkRwSkhWU2ZpNnB5UFZKc0hvSVZpSVpBeVpEUUQ4akNoYkNCTDNJV2k4cXhLNE9EOEJHK0U3MHFIUW91UVVDaU4rSWN5eFZJN1NEYmlNVG9BaGpWdXR6Uys1TXY2K1dKSzMwcFp6elZsYWdrVk1YWEdiZUNmRmRDNmRwbm1hcWtmWFZwQ3ZpL2xWc1ZDMTVBRnErckFEdjNreXFwMzh0OTFZY0RmdExyalBQcmJpN255OHBvOXU2QU5RdHJGRkFFTEFYek1pNnVLZXJNbTRtOFVlY0wyS01odUFkb1RwdlhxOUZDS1hOcW5QazZ3V1Jac01VMFZSZS8xRzljYWFqWFpWc1g2Z1RUTDZFVWlhK1NUVHhteWp4c29CYkpkSG1hU2JVOHNlUTFiaUdBTmVoYW1BbzNjSUZVa1VBZHQweEdHcUtlWGsyMlVHQ1RPZVVWRlVuVEVuMWFrWUJmS2ZoSkRXejZHNHV0NkZyQ25QRlBITzE1YmNYcjA5K3FtRFRUZXZLd1Y3YTBoekNEak1mTk00RW1TNmdwRStSa2UxUFM3OVdraXFmcTFrWmdQQW5hMW9KYnVpZDFEcmJOL3RFK0FWblRVRW95c3hDK1F4Q2pwRE91WWpyQWZTT2RWUlN3cldDcnZLRFVlb0lvcWhycFdYN1pIVU9ScUFmWjdGbEJLaEFobjRTQ21UV2lQWFZkWnU1V3RqdnMyU244QmFva0ZaTkFLcnR6S2xBakFSME5nTG9TUkRxT2tYUlhpNSt3MHYwemQvNUwwKzh0Q3liWkExVDJCRzRBMEIrRTRPL0JxRGR5bzNFakliQUQvcFVwVDc0bWRXbHZpbGpUNVVZWkpyM1VWdDlWMWVSdVU4bHZFRzRPdW85MGU3UjlRQWxNaXFuZkJTOC9VNjIyQUx1ZEFxeVhFZklJL3lkZU1IRHUxWmdDM1Z2WklTSk9EcGJKemc4SWxldllzTmV0V0pYWnVpZkIzMjFqWUV5d1I1V2FtUndHQUlTQ2pQMUNCRnZucWZjLy9vYk03ZDhjaVMzdm5UOXdTMExyQjlqaGlTb2ZGdHJLRk9yYWFNUmtWMXRjOGFNaHNBSG9BMUFQMjBKMng5S1VyWTBwTDlDUmF4Y1VRUFFHekNqM0hiQ3F3aXlNWFRNUnJXY3k5UXhFZzdjSGJLd25DdWlFR2I4OFVrUnRqa2tYQlVUQUpQNnhoQ1licklxbFlWeEFhSzAzV2h2YUsyYWxHV2g3R25nOENqUUhoWDJuc2RvUFZuV3ZVMUJYbFd6YXp1dHV2TDdwR1RkZmZ3ODNWWGxYWU5SOGM4RUdnS0c4WGN2K0RkOEt3aHN3RkFnSG1jUTd6M0RKRzFxT0FJQnpoSFZINnNOelJkdUtnelBCR1oyaUZQd0NqcTlnQUptQURzbzArQzVJc2JkREN2TkpkamhrRFI2Z0RXWGlFUTdGV1ZFRFJ1T2lEOHFQZEZxTldNejVSUFdac1dFMVRvcGVkTlhzcjRsQkZ3YitDdEJ5cnU0S2tWM1RDU0g1T1c5WUZZWFNZbWhEMEJuYU1CYk9CT3NNa25RVFJJZ3FrRzVVZmw5V3BEdDZ5YlNjSVhwQldmYm0rM1JhMEIyRHJkTk1WMEdTWEcrVFdXQVEwaDhoZ0VOMlpJK3lsQWVHUUEzQlRXVFdBSlZrS01ia1V3Z3dianN4ZHcwRU43eEhjQ1JWTFVHMTN4MG9adHArRFh1RFl2QUkrNkRGUUpMOGdjMEpkRURtd3J1SU5uR3JxcmlTblJIN1V3WTZLbFo0SUhUZlNkQlhyV2tMMUptQUxTQ3V4RkZOYUFpZE1FN0hKdys5UkdjaWhJQkV6ZUlQeloycXZFdXFnVGNLRUpnRDZ2Y2h5UmVVWXJ4YnY0L1FDMkNVUkxmLzRZZ2V3VUFvUGhDN0JyUmNiT1dnQmRkUjE0RXdXSi81Z1dnTEZnN2NTVkxOYjNoek9WSGlFUHJIaW5nV3ZFc2hhRnI5WmR6Yi9STk5DU2hnMFM0VVZnWDJJNXBnQmtrVFZrTmdEY2pIa0FVVE5lK2xBME5qbHhCTTVRSW0zcHF5bFVlVWEveHdOZ093QVRkR2FGakhDdlRtdnRCUWhlYWQrbUEzQUJvNWlITk9aZXpXMEtoRVVoUkV3WmJScURwRHhYL3B6dUw3VG9pVVhkaUFUb3kvMm9wUjllK1I3ZStpR1VZRzNqVjUwQmFocnduYlZuQzlmdDBLYy9wUHdHNnhxYkI0VE1ybW5idEJrQUtGSk9JM1BJYkFEY2JXSVJDT2NvYjgxZ1dnNndpbWlHQjRCL1d0ck5KTVdtTlFwTWFsSVdSU0ZMa1JVbm9xWStqQjRxd0FVd1NlV1pacmovRGcwZXNsQmxVd05JMFNBRkVaZEhITW9vdDBvU0E0WmU4Q2pTTnpjdWxZNVRqK2ZhVTdGcEwxQ0prME0wRkM1WnZhejBWVEY5aEdPclhxSGpnVkxST2lXYXVrY0FyS2Z1QjVCTkFRTnluUWJMYkFDc0FiaHVSWG53MHk5UVpZcXhoSWNpMldzZEVCVklBMlFISEIwRVAwcU5Cb0ZRQ0I1R1FsS2wxY0dQQ28yVVRoaUFEWGpjSnVWQ1pxT1gyS1BvYzE2N3RyT1JjZGxabE1yQlA2RlQrUlJpbERJRitrYk9ZcDFVUlJ0YjdZZTIzQ21zNklubDFrcmVuZExyYnkzMk9RSkRweFVDbU1VOFE4aXNUT0hJM0FiaHhrVmdvamhqcDhmSmV0Z3VSL2tjTUc1Vm9aN0lsN1E3RlkwcmdiVVdmZ3laZTVlMHpFRFVNaG9HTWZodFU3RFM4SXJBZ0xlUE5FU0pxVzZ3NERrejByMGFtRldsSzlvRUxLV1RMd2w0aENqMnRkTUFBUFExOFhJUFUyVmZDNzhrT3E0RklIYzNyYkVKRUZpUEdlcllnNVlMdXR3bGx5MWtOZ0RRRDdJR0FNNE1CTDdoVjBkVUVLeWIrdy9sUkhRSTlmcng0V0ZSWHZKOFhCQjJKU0FvVTdodlpDMVpNMEVqNHVmRkVKNGI2SFZaM1E3MlUwcmNuV3NOa2xOYmlNWmdVcjUrSXBKUFkwampzSEp6QXhIUzQ3UWVxcWpEQUFRYzRURUEvNTZnbm1Hb1BRYkFKV0hiZFpKV2UyazlPQUlqdXdIZEcwT1pEU0JlQnBvMWR2Yk45ekNjcWNLbzQwR2VvM3NSU0tFWmlCSmVtREtFSUJBLzNtbEY4TFZnWVEzQWF0OEhsWU5ER1F5QVl2WUUyb0NTOHYyWGg0UWJqMkdGdEFxNHlOTndvREF3b0xDMWVVMlMwQWprNHZ3ZmpjQ1RWeHZ4UTkrOXQ5SXRkR21ZQVkraURaWU9nbHBsYk1sSFltU3A1OGlzekkyMGFjZ0M3TXVVV09FYU1qRSs2VEF3NFNCaUFkbXU4d0J4TVVrNXdORUFiR1FyWS9Vb2kxNEdDZVI0RTVvR0tvczBFQmFMVEQ0MFllL2VLWVA3dDB0Q2hHdk52YWNoYVlGQ3RSa2s5QWFqMURDblVBUmFIU1UrQTYrZEJxQzIvdC9IU2pPMUlRUDZZNlBkTEZ0cDh2RkFqb0loeTZuSC9TRnExZzNaalVZR3dCeExSK0k4M1lzS1BNT1lEVExGTmhjcnRpbU1Lc3JBRTlLazFCOS9xREIyRHJkdkFqTEFBS3plQW11dHFjWVl5Q2tOZmw0TXNTc0FGZlBxTkI4MEFwOEp5WU1hUEdVV0JHTkJlWklVeDloWCtEUDRMeVZZbjRYQTQwbjd0MkF3TW1aN3BkMzRWUjgxc1FQTDExT1FvekVWNDhBSXZISzhhQjZBS1lDbmU4a2NIaGhKUjRtY0FyT1JlWlREWVFJMkk1SWJVdys5UUR3R3hHTHVHcmpZdXhoalZmUlVzZTJqQTVPbGZWdHdtd2VBU2NFMVJWaXN5cVhxVUJxOHZoM3dJRjA3cENHRXVrZndwZEdEUlFCcmwycHNVRG9SMnhFS0xMSkc0a3Z3eU1rdkFqRnd2VktuNGNtVWVUSDhFR2NiZ2FjVTI5UHVSVE1BMnhTS0ltQTJjdUQ1U2M2eDd5akRhOWRiTzgyU0tVRGFRdkYyZ014d2haRWd4SFRJVHdHcWtuVHdJQ3g4ZUliT1BmNjhSajJ4TFJRaEk1R1pnYW1lTjROeFQ5NEFCSXNCbUY4VnoxZ0V3clkyUGxZeUJLK0ltSU9sMkpkWVJwendIQXZURmh6TGlLMnhUcUZ2UkJIVWlneFc5ZW9Ib0dZRTZyVDNXTG9UcU1JVmpmNFpQWFZsM1NPdzVLRGZQT1VFRDIyUjEwWkM1aW1Bd2NWOUFDelRkNnczV2Fvand4R096bmNzQWdVVTU4TkVNZ0pHRUlqRWxFN3ZRRVFQdzd3Znk4MmxxeHh2Uk1EZ1dCeXlNeGNEQUs2dVBDK0lldUY2WWRuWmhBNXloU1JTdTVpeEN1VkNIVFd4SDBreUZIYlhoYVloRWgrcGdrNXZJZVNCRCtPUHJQcUN3WkpuQy92c2ZNTU1vS0I5Wk1ZS3lIUmd6eVpqWlUwOHF1U0tJV3ZJM0lScmE5dmdJUWFpTmZjaWF2b0t6TUl3eWVpaTZRaHQyMGNBQ0tJeVlTaU5BdGtLUmN4bGpvMTRDUVZjaGs4aTRaTEpEQ0dGMzE0T3RSRXY1WXVJL2VZUVFQcVBzS1QxNzBOSTRIZ0owRy9YSmxBcTg1U05iMkJKS0RZVms3UjY0aGg4VzZzS2RUd0Q4TUhqNHVFUHdmb3M1b3hOOVVuZi90VzJkZWNlTzdPaVBSWE84UkhZNVBFNkRkUThZb3JqZytLc0liTUI1SEw2VUtnWVpOUkJ1RitneXVwOVA0MWhNd0RhcVE3WkdSNEp4T1JvQXZJcVlBV1BJSUJuN2tabW9PRnpxZ2piVHduQlV3aVFPcERHS2FDbVcyZ3R5bFhHOXdIc0oxb1lWUndlVkltZzd1N1ljQ1dtWUVaSGtTRlRSSTNSRTQvdzdkTWhOcmhVbW53U29FeWR0VEE4c2NxVXIycEdQenl5RUJ6UlZuWmVWbm5zUk0xZ29XdC9hbzRoZ0NYMmhSZ3p5cXpNamJScGFIZUZ1WCtNd1BkRmFEcERaTXpxQXd3UitmUVU0QTFBaGFyd1lQNU1lK1p2T3VWN1NZbkFWSVpDZVprQ0k4QlYybVZTSUdnR0lCUmNCa2IveUZVQTE5TmVzSW9qY3dLSmdvZUlVVkNCcCtRck1VTGU1cUVlRGpGNmFIZzNya3JTL0dGcDFnZGFXNkZpSDVSTGhYU090T2lwVDdZNFZWUGpSelJLdXYzTGJ3eWR1OUJ3UDNoK3haVzFyNXdiWW1DM29LYko4eEFWQ0lYSkttY0xuUUF6WUpUZGFMUWxTUGNCVExkNDJYNkJLZ095aEluRmoxRGw2VWhVUGpEeGlMaW9SeWlTaFhrQ3ZBQUNRQmUyQUJRR0huK2E4QlhieUJhZWh0WUlLSWhkUytnRVFuWWZRQVJNZ0ZZbVBCQUthUk0rR2ZKVzdEMUdWYThNamZOQ2lkNDBZWmMyWHgxWjFKcytGeGVidHMydHFRNndUakY5Qzc5L3ZDdmlWa2JjRGgyNW1JbkdScHdjdnI4VGVyZGhtNzRBL21WdENUdXZoMENqZWhnVS82eGo4Q284OUFOMFpDVVAzVHBraFpZdFpEYUF1bFpaZXVQS0hsZWh1SDdCR09NVUR5VnRoS0pWQmQ2TEk1OG9IeUg2S3V1UVpHSXg2ejV6L1lxTm5uck5Rczl1aFFhalFCQUl3UzhDOVlVUWVRQXpBQTFoM1JTMmUrU01Fc05wZUNWTzFkbWZDVi93YW0rdVY0cmZNVmwwZS9UaFNyNXJlTzVpM1MxSUNSTXlodDA3Q25xQlF3OW16aGZjV2Yza0Mvc2Q2UU9OazM0bzB6blBlOXlDVWdJdVF6QStsRmFNcDRFMzBpT2lQejJaZCtjdk50dzNubHdPM3owVXAvQ3A5Z1lIdllDR21LYVNRVXZ2SHdicGhzb0Jvc3dHa05OZWE2TVA1Y2hGRDBJb3hRc0hhSm1uSXZMSlpTQjVzV3RYQVNZOTBLbFF3V1NoazFlUU5RK2VBQmd2TU9DUUozbmZ5dU9EQm04SE0wV1lWQlN6a1BRZUlBaFNlUzlNbjRjU1c3QzM2TjNCSzdVTFo3czIxeDA4dXVUKzh1Q2lPM3l1WVFiRlY4Y083Q3k1dDl3MDRnN3MwZXRtNHlWMzVIVGV6Y2hOODk2Qjc0ZG5LdmFEYm5XR2RBRzlGR1Y0Q1FlL0lUQzFwZWgyYW92M0gzMXJ3WjI5eU9objZ6MS93Y3d4Z2hSUzB0U1lBWmhFVTVVREpMTWFRSzZoSFpkYXJEQXdiZTdwUllOdUpxWklKdlNiTWtZcGJSUGxteEY0a0k2T0FhZUNPSEpSTmtRUnFrMEZJYmJPQTZzRXl1ZW82NU81K25xNkZsVXFsREhrNVM2WXk2T2d1ZGVPZ1VDUEJlS0loTHhIVzYrdTNaSFRieFkxM0NlL2ZkRjkrOWxsNGNwcmk3YW1BTUd5UmV2aFl3MzMvWk1YM1J1dUs3bTMvY1NvdS9uS2dqc3NJemloWHdCYldKWlFSQnorOE1aZStjb290Tk5RYkFmNHNVNnFSVm56L283SmtydE9QRHp3OUpMN3hoTkx1Z29JeWxkZjZDZXRPZkF3NUFtZWdwVTNtendGeXhpeUdvQkdZcjJoaFV2VDNCYW5IaUVwRlhjSUQ5Y0tveWlkQTdiYkM2b2dJT3RKMHJKRCtSZ0J5b2NjaG1EWHdJcTVFV0kzUXlRTmd3bjRXUXZZSXBGRzBKZllPTXdBUUtJcEFwNHF1dFRhcnJlR3I5cVpkM3YwR2J0SG5xdTV6OXcvNzA3UHQ3UUhyeHkyWS90Mm5pSFJsNUsvL25UVFBYVm13YjNqdFNQdTVWY1U5QjVpeVQxN3FtbUx0cHAwWUYxSitoT05RWFFUZFpIeUJzaFVoS0ozYlMyNEczZm4zYkhUZGZjbjl5OXFmMS9KakMrbmkzdTJoZHNESXNGYUsvRWVBeW5lYnRabUVkMHQ0aUk5Vzhoc0FGV05oUzBUcnFIWDdiUm5iZTJIa0ZoK2VhVm9iNjBnRDBabm5BSzhCNGdHc1pwcEZLcmVlZzlBVW1uekFrcWpReGE4MkpKdENoRXNYZ0hjMEZnSkJzRG94LzJiRWFvT0E4QVFHTlVUZW5tVVViOS9TdkI2YmZ2T2g1cnVPMGRVVzVwd3U2ZTgwZHJpVW5neGxpU29VN0Myb1BYV0hRODY5OU5uVys2MkEzcXo1K3E4ZStaTTNwMDgxM1FYRnYyMEFDOSs5Q2V0MjNuaDVPUFdFL0krKzlqOE9aMXp4ODgyM1I4Slo2RTY0YVprblBRcHI2bkpYaFZVR2paU25CaFM4bHYxMHVuRW1Hdk0xZlZDNUdxUU52RWVxY3dHTURzN3UrSm1tbzJGSlMySUZ2b2JIR0pDaVV0YWtaM2ZwaEhaOHU4dGVRK2d2S1NEOHBDbXJhWlhNZWZiVTJ3ZFIvQUlRQWVDeFF0d2NFbG84N3ZTZmhFb281TjExcE54ai92VVRsdEpzNklGRm91NW5Wdnk3a3J4cEduY1Bmak1rdnVMaHpUcTlVdm9yUHlaS3BaMStCRW5neEJCT3dKL0tKUyt3WDlEbmZtc0RPZUJwNXo3aFZkWE5DV1UzVjR0NEk3TjV0Mlo4eGdDM3dPZ244RFRFZkVxcGFQNEVWM203WmdvdUd2azhuZG94WC92b1VYM3B3OHU2aTRtbTBIenJpWWVDdlpTcTNnUVBIMmcvK2pYb3NBUG1lMGpSVGQvc1ZWZm1iSGZES1JHWEE0V3NoaUFJVjJhT2JuY3FqZHI1c0pOLy8xb0lTWnhvbzZmWDlDSEcyV2I2cE1wandvRWlTSkRyNHhiV3JRNzU2Y044b0RSYmRxWU1VaVFwZ2psaWUwVE1LRytvR3ZtbTY2YWtDRDlPa0EvY0dMWDFhUGFWclZWaTZ2dE9pRDgrUEVsZDk5ekJmZlk4YnFyNlkwYTNEQ2JMdm1EbG0wb2tTZXhxd1hvV0NsOFdNYjRWZ3ZickhGeXR1aysrdGVMN3FZOU5mZm1sNWZkeTNacExwL1NBbkV4NytiMFRZQkZmZExlREYrZFlhN254ekg1YVZ4KzRlZllHVTA3OXl5Nmg0K3VtS3N2cXQ2clcveEw0Mlk0aXJrdkVrTTdoVHlBbGd5YWpaVUxGMDVrZmpjb2l3RVkvZnFwN3k3cmQrcVdVQXlFK3dWVGtDcHh2eWNrb0JmbVdtNUsxbzRWZS9ldlJKQ2xhVmluS09SdW5QUWR4Uk44T3VCUm5nc2ZWdlFhTkJLdWM4K2QwdnlwZDZTdTJWcDFaYTNjY1o4WVhrM1RJNWR1MzNtODdoNDl1dXlPempUZDVNUzQ1bm90dExTWEtzL05GZ0dhUUVWTU4xV2tDS09ZT3Z1ODl3amV3RTFadG1VcnA3dDJUWGZ3eEtLOHk1SjcxYjZpdTM1WDBVM3J4N0RLOGdwNERBSmVneW5pMGFmMTFzK1JtdnVCM3Y3aHhsVkZmRURmNW5zV3NDbGpOS3JXWEh3Rk9WQkdFWk13TTdFVzVrc3p6enlZTmdCUEVNQTFRbVlEbUh2NjNxVTlqY1ljaktEa3ZrRjE4Q3FEZHFmMW84bDNINnk3ZjMxYlNVTFhyNDJkbzYzdmlhR3dFM2t2MUY0NDR3Q0FMdW13dnZNME5FK082NWRIZVhMMk8xK1ljOTg3V25QYnRpekp6UlpOcUEydDV2bWwwd1hWczA3Z0lRc2p2aXFyNFlaTzNaUXZRMER4T3BqeitiTmd2UFhrU0lYQXc3Tk1GNXhoNzk1UnJRTU9uNjVKbWN0dVFudTZkMjRiZHd2ekYwUmJENnIwNnJmZVhyY0hWdERodHdOSGRiUEozRHhLTnlQMGhwaHdrY2pIS3oxeVE3R2EyR2R1dElOdzd2Z0QzeFRtYkdGUUE0Q1dGOFhDd25LdXVYSTZyNWFpM2Q4SUJHME5kRUxnZjNqUGlrWkYzcjN5V3UzUGtjVmYxTXVsOGJjbkFtWmhDMEx2MlFkUEhnakp6U0NGMXR3N1B6bXJBZTkrNzB2bjNhTzZWTXRYeXZvZVQwRS8xZTZWeWJ6TDVSNGV3b1JxQ0h3Wkk3aWd6WVB4NVV2ckUxQ2VYT0FrRUNRWE82VWtzSHdJS3JhQk1hYWpBb1lnMThQY3Z5d2U1cVNXbVFzcWt3RUFqZUpIOWYza2FIQVdpejhiOWFvajd6blZPYzBIeGVtODBnV05zS3JXTWtWWGYrSDAvTHdlRzFsSVE0V2kzdEdnQmhCYmcxanovL0pSZUVTWW5ZODNJNWppaEFWOUdsWEE1M1JwOWNIUExMcjN2Nm5zM25pamJxUm9FY1pUMjdRWFNaclFYQm1UUTRJU2F1MUEybGJIaWwrWXJidmYvZnk4KzlQdnpMdWlsRi9rMnQxR05RcVJhelZtUTJ0Rk9IY3VFekVLNWlUdmJzSHZZUkE2dkZnK05HdjNCeDVvSnkra1UyaGh2TnFpVkhqdHp4YW5ZZEVuS2ZQNWwyYjZKMzNVME9DQUQveVpJVVM2TUpBRUEvWk1KV1ZLQ0lZSFJoaEF2clYwVENXOEc5TFJNZzNlSzcwUkEyZzF6NTk3TmpjMUxYd1lnQmRCTjNLRXFOcFFyTkVuTjMxR28rRFg3bHAwMTA0dHVldW44MjZiRm1SY3cxcVF4aU0wcTk5eXVheFgwT1VtVWlGTmlVVTFpNnNUK3ZIS3g0NnZDSGRUcTN4K2lWTUtsMlg0YTJjaFoyVHhoNUJEaUdrTUEvWnRWRklYR1RDNHNPcnVLQXNJUXVSSFp4c0FPdkJGOERSa0lLTEJPZ2lEYk11akRXTmNKYnpCaVVLQ0V2NEMzMG1aYjJ0Z0ttTlJ5UWV3YWhkbUQ2dU1aVG1RUGFCcHNUcGtNUUNRV3Y5V3poNTVzclQ5WlEzZGU5Ymo5dGpsMWNqVHhzRUtHeGZjbENBT24ybTZKL1MrR3dzaUhpMmFGeEYyNDFxR1VDcVYzUGhFeWMzTWRCcEFKd1hFTFVHYmF5KzRNVjBLMlNxZWVWVEd4bHhxcjFKSmdBWVo1QWdPa294ZGowR3BZTVFKU0VoMHVGOGFyZ29BNmdodURQNHBpWDRCLzQyM3dkRjRYcXlIQ1JaZ2FSSGhJejFmVHBVNDdHeGlMZUtKS3RZUGxWeXpjZkhja1NkRGVYK0Z4SWFwT0lzQjBNeVExNDdkOTFSbC84K2VMaFRLdTJzMjYvVG0wdHk0R3BtZ0JlTG5PRndXSDJyMGN5U3JZeHY3aGtJcERFQ1dNajZpS1dKSkUyVlhTSVJqNWNyWnZ5aG82TVE1bERtZkFrYWYwVTRhSlFtek5vUnJBbFpNeCtKZ0UwTUtkaklxZzU3YS9ZMHRSRDBnWld4M2U0QUVLa1dxazQ5VVJRUU9NVFY0bGtsNTBYS3VmdnI0RS9mcGJnVFN5TVo0VmdNd2pvNy8xVzgvZjhQcmZ2bnhRckdzbTVmcVZoZ0JnYmNrTW5FbmZUQlZtSklZRjF5LzhiS0dGdWhpR2NYVHpNZDgxY3QvMFhNOTloQ3dtdW5rSTUxSiswS1ZkYnJVaEJWUHlrUmxSZ0NLV0VhOHdXQTRZdHRBTEJwWmpHTjF6eGoycWVoZ3RDZWt3WENacXdzTVYyd3UvK0N2UC8zZlRnYklRVm9uU05lVGNBS29CSWc1WktUemk2MExwNzVSM0xIbFo3RkNMcTM2aHNDT1diWjFENlhveG9pdHZGVkp2WG90MVJzS0RJRzdkaXpRQ2dOdGN2UEtwN0VmOGVBS3F2QW9EUzlGb2RUeXBDMHZtR2dFSG5ENDU0Zy9UYjhubFRTL1BRRlNoWUtkckdvZEpRTlltVC8xallzWHVhNHlSd2FXZ1RIWm1pT0ZkcjBraUcyaGNlSFE1NzZhYnpSbVdISGJIU3ZWb0x6dUE4WFR5QVN1aEJlR2xLc1N2RWY4MDR5ZCtsT2REQ3RkMGovdE1YajRnQzJoNDJrYkQxMjgyWDBaR09zcTcrWi9HUGxoMDRCM0J0NU83VmtZTHpabWpqend4YStvSjRTNENQUzVBYzVaRFNBU2NTZS85QjhPTlJmUC9KK0tyci90STBaaUtycTVkTXlsVVRwUDJpekN5cjBScEEwQkZXSXU4UnhVbWhoS2Q1NjIxcDZGWE1EZFRhOFhENUdQYnRnZmlyd3Nlb3QyRGUzVGhWaGgrZXlYUC8vN0h6Z1VwSXF0WndwWkRRQVJRNFRyelpVTGozM3VVOW9nTXNmREMxYlM2NDRXTlVycHZ5T3RxblpsT3QydkFlVUthMVd2eHcrTjE0TzUxUHFoMDVEMHVhUytRazhzZDFRYmM4Y2UvTklkRWdQNjBOT1daQXBRY3JDUTFRREFpc3doMWpqeGhYL3pTSFB1eUIrYkY5RENiVzF0aEpacmFVd2doRGdLZlc2TjgxcTRma1RyOEl3N0ovVVllNDhTRjQ3OXIvLzlPLy95RWFXaVRvZ3poWTBhQUhPTldkM3ByL3pLeDNPMStlOVZkUysreU1KT0xBempvQmZEd0xNV0RzUm1VODJRZU81RmE1ZzB3TFZOanhCZmRwV2VLQmJtdi9lMU8zN2w0eEpUMUFXZVdSRFp3a1lNQUFvUXNtbGc1bnQzblZ3ODlNVmZMK1hyNXlyNm5BazNZRGJEOENYQVZNUVgwQTljS2ZlL3RYN3V4S05mL1BWSHYvN25YUHFaSGhSblZqNWNibFJiRU1QaXVBM1VmUGJPdDkrM2VPeWVENVhMamVVS24ybmZOQUtKWlhnQllVOXEwWGZneXJ5N2ZrOXo2ZnpoZXo3MEovLzU3ZmVxT05HQjBpK3FBZEE3Q0xJVzRCRms0L0FuMy9Ubnl5Y2YrbENsMGx5dWlsbnU1MitHUzVOQTFDajdGbDkrVGQ3ZHNMZTV2SGo4dXgvNkh4OTgwNTNJWElmSlhuRUV6VXh3R0ZxQ09FZGg1cUZQSE55eS83WmpsZTFYL0wxOHFUaWlyYU5hWldmbmpSOTlMdXNlOTVKZWk3NmNvYUpkUXJESFBnSzdlWGdaaUhGenFxb2JOc3Q2cVdSUVVaakVkT0xxYXMrMm9udkYvcHk3WmtvYnZwNzcxcTkrL04rOS9qTmlFN2VQOHMwREs4NHVaRFVpRE5NQTBGWis1dUU3RG8xT0hYaTR1dk82RzR2VnltNW1tZlJESWFPNnp1bkgxUUNpZ2JBdGJLdEcvYlY3dGIxdHYzUFRvL09QSEhuZ3ovNzlwLzdqMis2VzZGQStkLzB1V2Ztb1lSZ0dBQjRza01PTVlPNzdkNTJvblQ3MHRkRjlyMm1XeHladktGVUxlcm1KNVVaNDhyV092ZjZvRzRCMVB5MERYWXB3NjdzaXI3ZE5pcjk2Rnk0LzU2N2FYajlmbkgvbUQ3NzZzZmQvNkt1Zi9xM3ZTNEJSK2NTWjcvcXB6YXJBVmRDd0FyZ3dLSjR2NlA2Z0hhVXJmdTUzWHpWeDh6OTdWNjQ2L1pabXZyU05id3cxeEQ2dm1QTVJaS1lJTzlTQXl5aHVjL0tKMURFSllsWWJQUzVYWUxSTmFGZHVRMXVKRi9qcy9RWWxrZFpqbWxlUFRtWXZ1OSt5cGVET2E1ZXc3UWhTQlE4clViajJpTmk3Q2FQYUlUeWhwM3BiSjdWWlZQZjJ4MHYxYzduRlUzLzU5TDEvOXNlZi85Z0hIaFZlRk01K1A5dythUVphUDlLcUdqeHNzTnQ5Q1lDUG9ZNFI4Q3lYdmVDa0s5TnYvazh2bTd6aDUyOHJUbDc5dWx4cDdJWm1yaklsU0Y3ZmwyRFVtM0NRNXFQSC9DSUp2NnpWM2MyaDlCcTBRc1QrUkF4eVVXSkZLUndZQXAyd3g4dkVNWitPQWFDT0k1U1RpZWtrbGlSUThxUVVPNjl0NXhnREd6Z3hjRzFjc2w5ZVlUT0hkcU0zS3JtbE0vbkd3cUhsMlNQZmV1YkJMMzd0N2ovNHRTZUVIcVhIeFI0dW54R0JDSVlsQnV1RDhBMDFtRnlFc2RzUThBNlVqZTI4OVgyN1I2NTgvZjdTanV1dkswenN1aXBmSEwyaTVUQ0kwcVMwVU5FQ3NEUTJrUy9PenVCUndvTjlQVGptT1lBOEJQZ3ZQV0FBVWd5ZWlHM2hLSW90WnNraEtpZ3M1akVPMGhZcmpZR1FqdVZLMnErRGFmMnFUVHhpVXA4bjEzY09Xc1ZpcXprKzZocUxDL3BOajJaVFB5ZlpXczQzVjg3bjNQS1pYSFBoK09Mc3FTTnpKNTk2K3RTVDl6NTl6MTBmUFNVMCtoRVpVenFLeHdBWThTZytqdnFoS1Y4NGh5Uk1NSzBPeUlRRHhYUEkxczBiRUV0OEZ0SjFsZEc5cjZsV2QreXY1TWVueXFPVE8wcTFsVktwVlJ6UjFuNkpucGZmc1FFZWd4SDQrYzFMRENNYWhValpuOFFrUnFCc3ZJS05lUW9qb3pGTnN3Uk9hVzFHc1I4bktHb25xTDc0clgwdWN2aThTTnRZYkpSMG5URi80ZXpLeFhObmF1ZFBIMTQ2K2RTRHk5cElnM0xqUWc0MlVDeEtSdGxSNlpkTjhhSmg0WktGR0JHdEVVT0RBNlhISThxVE9KWkZ1RFJQNmJSQWYyZ0N5a3p6bmg2MXBPT0J3cVBTaVRHRVdFWWM0WlM4UENITjVPV2gwTVlhYVJHbkR3d2c1b0dPZWRLRTJNN25mdmpPM2NxUGlxVW5NUjBWSFdQcTB1M0lYNWJ3dHlYY2JycnBmRHBOcDd2emwwVVFseEZwdHlMVCtYUWFGcnJ6bDVFdGovcWxLdHlYS2wrWHFwQVhYY0dYeXZCbSswMEpiRXBnVXdLYkV0aVV3S1lFTmlXd0tZRk5DV3hLWUZNQ214TFlsTUNtQkg1MEpQRC9BYVVjdVE1N1EyS0lBQUFBQUVsRlRrU3VRbUNDaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQVFBQUFBRUFDQVlBQUFCY2NxaG1BQUFBQkdkQlRVRUFBTEdQQy94aEJRQUFBQ0JqU0ZKTkFBQjZKZ0FBZ0lRQUFQb0FBQUNBNkFBQWRUQUFBT3BnQUFBNm1BQUFGM0NjdWxFOEFBQUFlR1ZZU1daTlRRQXFBQUFBQ0FBRUFSb0FCUUFBQUFFQUFBQStBUnNBQlFBQUFBRUFBQUJHQVNnQUF3QUFBQUVBQWdBQWgya0FCQUFBQUFFQUFBQk9BQUFBQUFBQUFKQUFBQUFCQUFBQWtBQUFBQUVBQTZBQkFBTUFBQUFCQUFFQUFLQUNBQVFBQUFBQkFBQUJBS0FEQUFRQUFBQUJBQUFCQUFBQUFBQzFaNkxvQUFBQUNYQklXWE1BQUJZbEFBQVdKUUZKVWlUd0FBQUJuV2xVV0hSWVRVdzZZMjl0TG1Ga2IySmxMbmh0Y0FBQUFBQUFQSGc2ZUcxd2JXVjBZU0I0Yld4dWN6cDRQU0poWkc5aVpUcHVjenB0WlhSaEx5SWdlRHA0YlhCMGF6MGlXRTFRSUVOdmNtVWdOaTR3TGpBaVBnb2dJQ0E4Y21SbU9sSkVSaUI0Yld4dWN6cHlaR1k5SW1oMGRIQTZMeTkzZDNjdWR6TXViM0puTHpFNU9Ua3ZNREl2TWpJdGNtUm1MWE41Ym5SaGVDMXVjeU1pUGdvZ0lDQWdJQ0E4Y21SbU9rUmxjMk55YVhCMGFXOXVJSEprWmpwaFltOTFkRDBpSWdvZ0lDQWdJQ0FnSUNBZ0lDQjRiV3h1Y3pwbGVHbG1QU0pvZEhSd09pOHZibk11WVdSdlltVXVZMjl0TDJWNGFXWXZNUzR3THlJK0NpQWdJQ0FnSUNBZ0lEeGxlR2xtT2xCcGVHVnNXRVJwYldWdWMybHZiajR5TlRZOEwyVjRhV1k2VUdsNFpXeFlSR2x0Wlc1emFXOXVQZ29nSUNBZ0lDQWdJQ0E4WlhocFpqcFFhWGhsYkZsRWFXMWxibk5wYjI0K01qVTJQQzlsZUdsbU9sQnBlR1ZzV1VScGJXVnVjMmx2Ymo0S0lDQWdJQ0FnUEM5eVpHWTZSR1Z6WTNKcGNIUnBiMjQrQ2lBZ0lEd3ZjbVJtT2xKRVJqNEtQQzk0T25odGNHMWxkR0UrQ2w2d0hoc0FBRUFBU1VSQlZIZ0I3TDE3dEc5TFZ0ZTNmdnQ5bnZmOTZOdjMzbjdjaGdhYTdzWldCSU5nVkh3Z3daWVlEUWl0S01NWGYraUl3YUFSa1dIVWtXaFFFOGVBa0JBRDBhQXlJc0pBVVFNa21nd0lBU0tTRmtUZ2RqZmR0Mi9mUjkvWGVaLzl6UGZ6blRWcjFWcjd0OC9aZTUvOSs1MTltbC90dlZiTm1uUFdyRGxuVmMycXRYN3J0MzVkdDBnTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhjRGM4TUxrYmpkNGpiUzU4YzQ5MDFCSFUzRHNDNzY4STFsK3Bnenp0WmtBa2ZKUU9QMDZkbzhoZjhCN1BBOGVaNE8wWU9FNzk0Mmw2U21yOVNocklCOWs2eG8vTGJWZmRpdGJ5TGVDNzY0R0RKdkkwL0RRYzJoK0V2N3VXblhEckt5Y3M3elNJWTVMU2VkTW1hNHRMT0hOMFB3Z2UweWhuYXVza2JwSFB6d01IVGRScCtNUmxqcFlId2EwRjhORFBMVzlMdjJmaFQ2WEJPODJXeEpHM01CM1dsaE1HVHlkblIrODJjT0xneVpUMU1oL2pzN3pJVDhZRDR6N0ljdVp0SzlrbjVPTUR2cXpUNWkwOGpRZGNwdVROOGoyWnA1UHVTZVVicFZzN0VoNTNlb3VuODVqY09jR1hCSysrKzkzdjN2aThyLzdxY3crKzVkTXVuSC8wa1lzWDdyL3ZRbmRtNCtMeSt0bnp5MHZMNTFmWFY4NnVyNjJjMmR5YmJHeHVkZXRMeTh1cjNXUnBWWFZYOWlaN0t4SzYzSFZMUzhxWDl2WjJrVG5aNjVZbTNkN2VaSmRzZDg4NlpPT2l4eWdVQWtWSSsyZ2lwSkxRQjdDWWs5KzVpRm0yTEJXUzN6a25wUjBkeTlMMHpKbXUyMUxoeXJWU3I2bS9ONlZ1eXJvVnpUeXFTeHVHZGNwNnU4THJmejllT0dTNmpwajNsaVp5MzU3NGxBc1FYbzViMmhYUDd1N2U3dTVrMHUzSXBkdVN0TDIzMjIxMXV6dGI5OTNYM1Z5ZTdOMTQvZFh0NjV1YjI5ZjJkbmV1VEc1ZXU3SjM4OGFsM1V0dlhONTU1ZVZMTnovMGk1ZDMvc1hmdmZyR0J6OTRRMDF1RlZYb0UvcksvYVVjRmZNUVdHRndwTXpIc0luMzJpa254YjJtTi9xMnVpZE1QdTJnMHpSZ25OYS83bHYrMGtPZjl1dC95NU5uSG4vaW1kV3o1NTlaV2xsN1c3ZXkrcVFHM0dPN1M4c1BhT3hkRUh4R2xWWTdYU1F4YlRsV05kV1o3ZGQxM05Ud1FTaURHaUFIT2JEeFFpZGNXTUI0b0dlWmZCK1BrQzE5R2crVHBmSUl5TGFuNGJQTmxnZVlBSEQrZkFTQVM1ZDd2UWFUdExTVE9OcE1PSFByMGVpUStKcGo0a2pPbUdiZGtxZnc3OE1KZjJCUzM5ei9RTmowK3F2cWFQVTBiZG94UkpXOWJtdXYyN3V1L1BKa2IrYzFSWklYSjl0YnorMXViWDU0OStxVlovZGVmZjdaNnovK1E4KzkrdGUvOFJWeDN5enR5RU1PQ2tnNjZDaXNwaWQ4VCtWTWxuc3R0VG9ubk5HYmNoNTBQY2ZaYi82KzczdjZ6ZTk5MzN2WEgzencxKzR0cmIxUGsvd2QyOTNTbzN0cjNjcTJ1RGMxMmpZMWFHN3FZRVhrMkJadWgwTmR6N0VyZUhXajY5YldGUUFVQWE2emhpZ0pIYjB2bm5hVVFQTWdCRkJLV3NJZ3dOV3lBUE1VNUQ1YWc2ODBBY0NITHNOYjZpd3JzRjI0SUZzVnlCd0FVbzdvMkVSSzNuSFpiUlk1aHMzYytFSmxKam5KZFFXM01pb3NlcmFSY2dabElZdVltbHZvbEZNR2dOZGVpMzZEeFFOQko4dlFDTkhPd1ZONm9xazlLU05tSW1WMk43dnR5ZDd1UzVOdTl4ZjN0bS8rOU43cnIvN0UxaS8rcTU5NTRZLzlybytxaHZaSERnVGNMMHMxTVNGaGdRUDFVbVh3cHo3aGtuc2x0Ym9tbkJNL2Myelplc2M3SGp6M0o3NzNYL3lxQjU5Nnl4ZnZyWjM1amR0TEs1Kzlzeks1YjFPMXJtNnFSM1ZjMThDL29RbnZ5YS91Wk1KdmthdjdPQWFUWDBJcHJ5c0FiR2piZkZWRDRocmJaclFRTHowdWNwOEtEbnlic3N3Z0wxVXJHVnJTS3pKeGhkRFNCM0JEYi9ISXlRbVZNcUZ6ckdnNDMzY3hBc0FibC9xMnN6NzFTRmxPdUpWWGFRWEFCeFVIWEFwa0EzeWhKUzV6b1FkMVhBYW5ZK3d2YUNUd0hHMEFvQy9CWmZMRXI0VkNLeFVaT0V4dmdzS1NmRExod0pDdHZUZDBoZkZ2OW01ZS96LzJYdmpsSDM3dWEvNzluKzVlZmZXS0tHd0NxWjNtWmo0d1EvUjdJclYrT3MwS3QzcVdycXZYYkd6VmNQNzJuL3oyYjMvaWZWLyt1OSsvZk9HKzM3ZlpMWC91MXRwaytaSTJkSmUxV2pQeHIydGx2OUVjVFA2YktwTXphSnhMa2xkLzVUdGF4a1QyYWtZQU9IT1dZOUpkdnJLbkFDQUdORkVtVXA5VTFyK1BIcmtmZ3VlNEtaM1J5OUFHdHk4VXNja1Z4UUZaaFJVTjQvc2ZXUElPNEkzWHNmTGdsSFVuTWpoZ25SMzlwdGVSTm9VUU9neEx2Vzk2dm1BUHZxSGViUXN0SldVbS9RSFpzcUtSOE5wcjZqTnQyU1psMXNNSEdIVURxR1dLUWVCT2pabE1FN3hFUUZpTG9MQjNjMjluYVcvbkovZXV2dkhkbC8vNVAveisxNzc1ajM1YzNPd0lxRVgzMDB6bXJXb3RMSmJUbDRyNXAwK3hScVBVa1R3UEFuZXUrcHQvNXU5OHo5cysrei80Ylg5Zzc4ejUzNys1dXZUMDY1cjByMnFGdnF4SmYxV3IvRldONyt2S0NRQ1pFd2h1YXFDdzZtOHFaOVhuTHBPMys4cmRjenBsRDdLbFBYZCtxVHQzYnFtN2NtVzN1M1pWZHdsU3MwYlpld0tVTFN1ckV3V0E1VzVUVjhlWGJoTUE3Z1V6c1dWNWVkSzkvdHFPQTBEMkEvM1g2eThvL3BVVHppQXFCMWR6b3dwT2c0emRnWTVsWGZwNWg3QzUrOUhkYTFmKzU1cy8vcjkvNTB0LzRzcy9JZ25zQ0VnRWdEWUk1TkRKM0V5bjdXUWZuRGFsR24xU1AvS2M4T1NzK2x0Zi9aZi84c08vOVk5KzNkY3VuYi80eDIrc0xUM3hzalpvcjJqaXY4RjFyWTdMT3E1d2FQSmYwd3lQSFlBbXZXYTViaVBYRzFwTmV3YXowUmJQQ3Zzck5RQzBmaml0OEVFQjRORDZFZ1dVSWhEb013Y0NBcE5mYUlJQU93UUhBdTBLQ0FiYUxqNC91WHpwMjY1OTcvL3dIUy8vdGYvc2s4SVFDRElJdElGQTZMcU9BSitxTkcyc254WUZVemNtUEFmbDNPNVB2dVBESDMzLzJUZTk2UnR2cksyODYwVk4vSmMxOFYvWGl2K2FqamQwQUYvYTNOTU9ZRS9iZmsxNExlSDBTcVlVbnVYYjVZc0FjRHNQM1YzNkhRZUFzZm9FQVA0MDh6TVlPQkFRREhRczEwQ3cvYk43TDN6aUwzM3NpNS8rdmlLQ29jVTFWUWFCZHRpZHV0MEFFK3UwSlJ5WUIvcmx3VFhYOXAvNW51OTU4bis1Zk8wN1ZwNTQ2dSs5c0x2eXJwOS91ZXQrNmZXdSs3Q0N3TFA2T091WGRFUHJGeS90ZGgrNXZOTzlxQ1gvc3ZiNFc1cjhlRDZGa2kvU3dnTzM5QUNYZ1hySVlIZG5wOXZtMEkyaGJTMG1mTVRJc2FYN1Nwc2FiN3VUbFhkTjN2VFUzM3ZMVDEvN2prZi8yMy8wWnNrVTFmY0hXS3h5N09hUXkveVdUYytUZU5vVVNuM0kwM21aYjMvYnYvdWxMNzN2clcvOXI2K3NMTC85T1UzNlQ2b1RQcW5yZmVlQ1g3dTUyMTJtazdoZ1YwcGhMdHpoYWJFRHVFTUh6cmo2aWU4QUR0QjNvdVYvU2NleVJxVjNCSnJtUEZPeGNrN2piWFBuUXpzZis4alhQL2NsNy9qSHFwNlhCTzF1SUhjQW1SL1F5dnpRVEs3VGtuSyt0cE9mS0RwNVdENytyaGRmK2M4dnZQMlp2Ly9penZMYmYwR3Iva2UwNHJQcWYwaFIrTmxMZTkzSGRLZnZOZDNHWjZ1UGdCUjJXb3hiNlBHcDRRRTlpTmp0Yk85MFcrd0lOTFYzMkJIb1BoTzdnWjNKOHR1WDMvck0zMy82UjEvNWM3S1d1Y1V3Wk9lYXU0RWNscG1MZEhmVGFRa0E2UkJ5ZE9MQWNkMVgvc2svZWZHL2VmM0tmOWM5OHVCZitPV3IzZHF6V3ZtVk93Qjg2UEtldC9xdjZMTTh0dmtwaEhxTHRQREE3RHlneXdNRmdtMEhBdTA0U3lEWTBnTmkyNXZkR21QMUxUOTE1ZHZQZitEcjlhaVZyejR6QUdSUVFMVlRNVnhSN0c2bmRNUjQ4dS85c2IveE54NzdMWC82ejM3WHpmTm4zdjloUGVMNW5DYit4M1d6aitOalYvZTZWL1JaSGgvalVUR0Z6TktZdGJWSng3R3BtNHRiK3ZpczNEaWVaWk16azcya2o4dzJ6aXo1QWFlYk4wN05qdlRZOW1MTGttN1kzWkF0WEs3TksrbkxDcVU5alVDMVM5dDhlV0hwNHRxN3o3enZON3h2OHZEalAzTGovL3BCN1ZXOXFJM1Ztc2V3SGJjNUtOL3RBSkFPSUNjNm9nOHIvOTZmL3ZidmZPTFgvYUUvOU4zWE50YS82RmxOL284cnVqTHhueU1BNkRQNFM4eDhwUlRnd294UGl3QXdZd2ZmZ2ZpN0ZRQ3NzbVk5ejVDMFM5R2VMZ3VXejYrOGZlUFRQK2Z6Tjk3eW1UOTA5VWUrVnhjSlU0UEFIVmg5NTFWUFF3REl5ViszL2F6OHYrNFBmdTEzWDlsWSsveG45UWxydStwLzR0cXVQOWFiNThSUE55OENRSHJpOU9WM05RQVVkM2oxMXhPUy9Ia1RvaUN3ZEg3NXlkVzNmc2JuVFI1NjdKOXBKNkE5N09rS0FuY3pBRENIeDVOLzhudSs3dXN1L3JaditIUGZkZTNzK2hjK3ErOW01Y3IvVVczNVg3d1JIK25kamNsUEh5OENBRjQ0bmVrMEJBQTg0MHNDaDRBK0NFd1VCRGJlOFo3M2JMLzYyai9aK3JtZjFCTXFIdmRtcDBwVEJqZlh4S3A3TjFMTzRRd0FCS0tsQng1NFlPWEwvb3YvNm0vY1BMZnhtejZrbGYvNWNyMy9VVDE3LzVJKzArZmp2YXg0TjVSZXRMbnd3R0U4NEdjSDlISDBydTRGY0lOd216c0FGelorMDhOZi8xZi9ldmZnZzF6aU11L2FBN0YzWldqZmpRQ1FocllPSUFEcy9QVVAvdngvMmoxdy9pcytvbXYrVCtoei9lZDEzYy9OdnBkMXM0OW45TE1pM2xxa2hRZE9zd2QyTmZ1M2VRS1ZUd2gwYkNrSTdEMXc3aXVmK3Q1LysvWFNXNWpUOGZIZ3ZBTkF6bUh5REFCRXhPMi8rYTkrNW5lc1B2Ym9OM3hNVC9KOVFoUC9FNzdacDBkOEY1TmY3bG1rZTlFRDdBVDRacUtEZ0o0WDJORzRYbnIwMFc5NDB6LzZtUytWUFR3eDZKMnZjdVpDT3pkVW5FK2Fad0JvRFV5RGZRL2lqLy9OYjMzTHc1LzVybTk1YWF0YlkrSy9JRWV4L1g5Ums1K3Y1bWJGK2JoazBjckNBeWZuZ1YwZUhOSjY3OHNCM1JSVVBGaGJlL3U3dnVYaGIvN3ZueTZ0NUVLWWMrTGtHaitFcEhrR2dGU0grY3pCNU9lWWZONVhmZFZmdkw2Ky9KYm50ZnEvcU1sUEFIangrcTYvcHJ1WS9QTFFJdDI3SHRCSEF6dmVDWlFnb0V2YjNUUExiem43MjcveUw4cW9uQWM1K1hPNFp6NXp1K2NWQU5JZ2NnN2FaZkp2LzgxLy9jSDNUKzYvK0h1ZTA2dWNYdFp6L1JFQTlIMTdMZjFaU1h5bklxWHlldFBucDBUS2p2aFVNQ2I3NWxUYVFoQm9kZ0k3ZkJoNDhmenZmZFAzLyt6N0JiV1hBbk0zdzQvYnpzbHBhVnhPL3NtWC9aRS84c2hENzNqbk43NjgxVTFlMXFyUDhkSjF2YmxSWCtyaDFicW5LZms1RDNRcWVxRWZCdDJUU2JyYnY4V2UwK2JyWS9tMHNjVjlkU3doczZ1MHAxZEs3V2pFOE5YaUhRMGN2VXQ2c3ZyMHAvMzVCNy9pNi83UFYvLyt0MnI1ODZKWXJLZ2ZEVktlYVpwSEFHam5DWk0vQThET2wvM1p2L0MxVzJkWDMvbkNTL0d0dnBlMFBYcFpuL1VyQnB5NnlVVlA4QjRJbmova0V3bHRWazZkamxMcFVLbTFCWHV3NVY1T0RERHNJT2REZGwxcW44cStXZEV1WUdsbjJZK1E3MmlzTDExWWZlZlpQL3pudmxZQjRMK1V5c3hGdWlaTkFaNTU4azI0R2JkQ3YrVEI1TWZRcFQvNHpYL2w2VS83cmIvOWI3MXdZM0tlWi95NTZmZWNQdko3UTkvb2d5a3JuSnBjM2JHdTd3R3M2MVZhL2k2QXZnOXdLdlU4ak85a3k2cWVteit6c2VTYlV6dy9mMnI4ZkJqOVJ6ejB3MW5ad3VwNlU2dUh2c1ovS3UycHUwZGVOaUtINC9PVk0rYytjMlhqM1BkZi8vRWYxaDB3SnlaK0hyRE1OT0c3ZVNYYXlodC9PMS93dFYvNyt6YzNsaDU3V1pQL1ZTMUJyeWdpTXZteEdNYlRlSER0bjhkcDFPOG9PdUZuMzh1UVRVZXBkeHA1MDVhOE4zTWFkVVFuOVBTbkFucWdUWnVCYmxmamZrOXo0TXo3ditZUGlNU3pBY3lQWklXZGxIbVVUdmc4NjBzQTk0MTBUcVBJdXkvL1UzL3F6YXYzUC9TQjUvWDFDRjdoOVpvYzhhcFdvVjN0cldldDBISDl4M1ZsYThReXdlQzR3dTUyUFd3cCttTVR0dHpyS1FlYWJUbkY5cUFhNDV5Zk45cVYwbHdLTE4vMzBBY3VmczJmL2g4dmZlZGZlMEZrdW9RanJjaGNxSk5QODVwdjlFOGF0dlBGZi9qcmZ1Zk9tZVVuWHRHMVArL3VlMVZPdUtUVm4ydTMwNXJvaFEyZEZMeDlENkI5b1B1MDZudzd2YkNGQTF2dTVjVGd3ZzUyQUl3aGJxdWY1clRFdlFETmZnNzlLSW0rTmJqOHhJWGYrOGQvcHdMQXQwbHY1a25HTTFrMDJ6VExBSUFScERUR0FlQnRiM3ZiMlhPUFAva1ZiUGt2eVhoZTRmM2FUVjdQSGRmVVVlWDBuZlBPY3ZaSXJxQ25UOVBiYTRRdFRCWnM0YmpYUHdWZ2dMVzIzQXYydEx1QVhVV3M1WWVlK01yenp6enpkNjQ4KzZ4bWhvUEFYRzRHTWlsbm1YTHlrOVBXN2dmKzFyZCt6dTc2K250ZjFiVS9yKzUrUXdIZ3FyN2IzektlVmhoSFdUZU50dE9xNDJIMXFyYWtUZmR3ZmkvYTRoOC8xUlRuaGlYM0Fqck5pYk4vNnRzK1J4QVQzNHVsOHJZN1ZUejVOTXNkUUdxTEVXblE3cHMvKzNOKzg3Witjdk9LVm45K3VJTlhkL084OUR3VVNZV09rL3NlQUJPL1RQNTcvUjZBOVMvMmZFcmNBeWkyc1ByZkcvWndJMUJ2SGRhUFNPOXh6WEsyVzFuNzlIZDlzYUFmMWNITlFHNEtNbmRtbW1ZMTcxTHhqR0FPQU9mT25UdXpkdUgrTDJMNzcxL3MwUTdnaWw2dHhYVmJWcGlwdFhjZ1hPTXFYdjBrZ0dCd0wraDhrTG5ZZ3IreEkyMDVpUGRld0xlMk1KZkc5d0J5RUdJTHRwK1dwQjg4angwQS9hQUJ0WHord1MvU1R6YWYxVTlQYVdtY3oyWEFyQUlBUGs2L1o5Nzl4OS8wVFUvdHJhNS8xbVU5OFVjQTRGZDcrTkVPQnVGcFQ1NHNVcEw5R2VybVRxRFgreDR3SXBWbHdIRlVXKzRoM2RPR1VkN2FNdkdBWXRqMUtTM012S2ZjUFVnajN6Y3ZmUm1nS2IrMHN2NVpELy9SYjM3Nms5L3k5YjhrclhMZXBDSGtKNjcrTEFNQW5rWHB1djEvMTIvNExlL1pYWnRjdUtwSEh2aDEzcXM2K000MERLY3hwZWZSRGM5NzBnc2dYOUlnTTcwd2didG5rblJsbTh4MitkN1pNdC9hdTJsTDJyTkhoK2gvblBaNEFtZVVwckNOT0daVVJFWHZBdlJwQUJ2K3M1TUxhNS83eGU4UjlBczZtQmFwTFBsTTFKeGxBRURwUERCbTcrTGpiLzQxbXZQeEE1M2FBVnpYVzFQb3Axa3FvZVpPSlBHcUo0eHhyNVN1WURkQXQ5eXFkMmJTYTNkb0VUbzU2QXBnc1dUczNhc0ozN2VKUHNsK1NkL2JWdUU5R0ROd3U5VFd2RHV3QXdDL3RDeWw5NlRvOGtOditseHA4ci9xOEZCVDNwb0luR1lKdlBNMGk3bVhDcFBuZ1RHcksrZlB2NWZmN2RQWC9CMEUrSFhlMDVEUW90VmtBRE5Eb0N2ajRQTm1CaGlxcDNFQzc2bmszWXFVcm5wWDRKNHl3OHFpT3YyUS9ZTlJwY3VxZmVNQUIzOWFuejhqRGlid1FIM2ZSbWwyWjc5RFVBT0tjY1Y5Z0tVekY5Z0JuTkdSOXdIYVlYYmlQVFdMQUlDM1dsODZBSC94Qno3d1lMZXkvdlpyK3NqamhsWi9EZ0tBTmdFRFppcmZyY1ExV2F0NHE0Znh1TDhjYkRXZE1oZWhnb1dVMlVINHBNODlsMEs3UElUQ3dQTng2alE4bEV2YXZ1STYycDJuMlUvZlFFdXJEQ2RDT2Zpa01RRXpKWjYzK3M0cjZUTUFCU3kxclA3d3B3RXJhODljK0xLdmVmRHlEM3puaTlJQlJkcWpWL2FFRkp4VkFFQzlnZUx2L2ExZjh1VDJaUG5oNjRwcitpRWZCNERUOUxZZjN1R2EzWjdYODJrQVl3dGQ2U2Q5RjZnN3E1QzJvbDkrNDdmaGZLa0pJOXU0ZXlUWkRobHluejVzMG9jdzNVUmZjcnFYRTlwZmtDMFRIVmZWSjllMHNPUVB4dmhudmQwL0RFZzlmU2Q3V1pFS3ltYm5yS0lMd1pNU0Y2WFpuZWtMZ3BkamdCYkZwWlhsaDgvK2UxL3lwQUlBandXalRxcUVFc0FucXRwSkI0QlcyVlRZU2ovMnpEdmZwcDlMWExucGxUOVcvNG4yUFNldEFJMmVWR0xpNndubDdyd215enN2VHJvbnowKzY4MUo0YVcxSlBjRXdHaVU2YzRSeWNTcnlBTjVwOVVlNHNaTkg1T0dRS1VUWEdWVjB4ekQ1ei9JN2xpVWQwWWFtV29KSHprZHFEZXRQSVJvMXdsTmtBbTgvdHVxZDVldDZ2dVNqK2dHWjUvVTdFbHl1RVFqd2VGd09SR1hPNEd0UDFuNENDQjVxelRMUmtvTUFnTWFhM2hPd3N2clVwNzlOcFovUWtVcGtMdFRKcGxuTlB4VE9BLy91bm52bzRiZnhJZ1FtMUpaNllYTjhZWGF5ZGgxUld2UzhvN0JxbHI2d0FlKytmNm43TEMyVlRQd3ptaWZuOVZLQWRlWDhJaXdHdWdNUGFBMTU4SkNpaFlCbmRSNjBwVUtXNzdROWRNOWQwVHpzUU4vVTNlM2R4aFo0NFdPaWIybUJ1YjQ1NmE3cGVNZjVwZTRGZmNuc3AxN1o3bDdTZXliV05OdERyaGdGc09lakRrTVJQSWQzQjJaQ29nSGxzMHUwRVBjQnRBZFZrOTZGUFBEUTIwcUxWcWZBWmoxcFRVNDZBT0MxR2xBRm96VEg4c3FaODIvbDVoOFRQNFBBYWJqKzU4b2RwUWRKQ0xiNlgvREljdmMyRGFJSGRFdm1NeC9xdXZ2UCtsTE5BNGJkQWNlK3VrWFFRZmhCTzNNbzRQempwdE5pQS9vZnhnNzA1V0JDWDFjZ2VFRWZONis5T3VrZVdsdnRmbFN2bmZyd2xkMU9QNG1vRlBzM3JyK0JYVS80N05QczFMZ3NQRXpMeUR4K1d0Yk05K1NYSXVSTGErZmVLbWs1K1ZHZ1ZRSVlsVThrblhRQVNFVlQ2Y3hYbGxmWG45aFVwM0J0UmhEZ3l6KzdzaU1ybklnMXh4Q1NDckxDSmN3ZDJjOS9lTGw3KzRXbDd1MzNkOTE3SHRIV1VrU05uMjVMOXpENDhvWnZPcFZ1b05NT2xaTC9VTXlIWTJyOTExN0RVcHZtV3ZyaEpCNkNxN0czQVE5UjhkWXNyYTVqVzI1ZFUxUXE2NkRlbm5ablN6cmVwTDQ3cDZEOXk4OTMzUmMrb2tzRC9ZNzNDM3JaN0xJNm01SEhoR2VTOHlLUnZLbUxQVDZLTW96UldhY2xLMTBhMXR6UXczSnZWbWxOQjUrYUYwMEV6U0NkZEFCb1ZVUnhLLy80NDQrZjBaWE5JNXN5aDV0cC9GcktMdGYvOHUxTXJXdTFPU1NNZnF6NnoyanlQNmtmZDM3Zm8vcStndXBlMGRPTHUzcHIwWkowMTlpeTNsTjFsMDJ6SHpLSE5LYXdWVDByY0p2NnA5Q0cxTmdtSEdBSGZpZDRxNHY4bWZxMlJ2ZXFwdEZqMnIxOTRxV3UrOXlIVjdvZmZHN1QyLzVsSmo1OG12dzdpdUJjSExBN1FMVEZ6N1VUbXgyQWxGOWFYbjJrZStLSmplNzU1N1hVVkpVT3NGb2NkNUJtR1FCUXkvNzh6Qy80Z25ON1M4djNiMnIxZEFEUUpPUFhWS3V6NzhDQUU2bGFCanplNXFiUVordTZuK3Q5Vm41KzB2V1N2cms0MFMrNzZLMVQzVXE1d0duSFIvYU1jUTJoQVU5RXphTUtTYjFxUFNGYVhPcTNENWVFVW5GVXJPTG1CYlQ2dWMyUkhlQmFIWUVaWjN6a3ZLVkZoL3MxWjNVWjk0aTJjYzhvdVAvOEczbzlaOXdWZERCbkV1eHFWN0N0bFppMk1zQVBuQ1g4ekJJS3M0MVUrL3kwdUNMQS9lYy82d3ZQWFhuK0gvQ2pZcTM1d0sycEt0NVptbFVBUU5FOHVzYys2NzNuTmQzUGMvT3ZEd0RpT0ZGVGp1WUkrMXhWTkU2c2hqMHI1T01iays1KzNSbC9RcXYva3J6RCt3cjIxQTM2K1hrSEIvZlRxS2swQTlwcFN2dlVFV0xLazdCOU40aStyODRwTUdpZlR0aUJYajVOVnpBL3JtVzNlVTNIdXZyeXFtYjIyODR2ZC85T0FZQUp4ME5BclA1OHBzT2s1NTRBWDB6bmNvL0VaU0h4bnVJdG1vTDFqcFBIbGRyajBsSjZuVjkveDdzdlhQbmhmOEN6QUtTWk5UK0xBREJXZHUrUk56MTVZVyt5dEpHVDM3bU1WVGZjdFpSSzBza1o4ZEhyTVFXQUZSRWZQcStCSSswMnRmWG5iY0FzR0RuQk14OHJmeEIrekhkWHk3TDN3T0hFQUx5cnloMis4VnVaWVNucUw3YjBYRWl2cWw5NVpvUDdBZzhvdUNzR2RGYzArSmp3VEg2K044RHFEejlqZ2U5SklKL0ZRYy9uT00zU0w5YURCckxSbGFXTmxVZTVBSFZDZ3p3SzZ1U3lXUVNBMUs0cWZlN2hSeTdvMm14VnIwYVBhelRsK1dXVVpMN2JPY3B5YStnOEgvRnBzS3dxMXlkSDhUVk5FYm0ycElQSWFnNmN5WVFzRkw2K2VOY2c3R3BUNnQvaURvSkhKaDNFTmpmOFBsdGFCUnNpSUNSeWdya0R2QkFUK2xXUi9LeG1PaStoSWFycmJEcjM0ZmhVYWtVMXVTbElvbDUwT01Ec2t4ZVFzR2wxNytLakJJQTBZMmFObjJRQUNLK0ZxZ21UNzIyY1AzZUJKMzU0N0pRZ3dMYXJmUVJ6WnRiZFFuQXFpSXZ4TXJkYkdRd2JHaFIrd2srOXp5VUwxMlFNbk9UTFRvcCtFajVUZzJqQXBONjFQSFdwOWg1U2s2eDNTUGE1c0tWT1UyMkJtQVRsN095WTFDUmdRT1kxK1lZQ0FKLy9yNWtuVm44bXZ0N1k3KzAvbndnNGFKVDZ5QkJxdGtrRGE0TENOS1RHbDgrZHpSMUEyeTRhbmFncUp4a0FXa1dCcS92V3psODhoMjA0blpXVVFKQ2RNcTQwanpJZXpJTkp6OEhYZTdYb2U4Vmd1NC8yNkFrams5NTlVMkJoKzhzQkZ6amRPdEdlVXdVU2NVSzU5RVh0ZzlKSk5WdmxWT0NnRnU4QWYweGJCdlpUU0IyVkp3aWErd084TTREeHlLUm42MjlZT1o5TThkSGZscUpGKzlndzlUaG1sVHpHSkp5Y2hwWTJMcDZqR0tYWk5UM0xBQ0RkUTNHOTZPQWNsbmoxMTZRaTE1T2FweUpsdExjeTBvbjd3S3dVVEhoL1VhYm82UTRTVE5HZFZPQTZzc0JQczJpQUhCU21jUjhmWjMyYUlkcUFZNkhUU0xmVmJNQXdLSXpGMzNtNXRXV2FzcVdGQVlrQ2FwVzhncFlWTkhEWmQ0ekJmdUwzTndTWG1maUlLZlh5aHFCUU0wMXIwaWUvRTRDZTNlbzZBWUNVWm1ZZTJCTTZuM1FBbUtya3h0bTFzMnU2RzdQR1k3UWJmQ1F6NlM3cWpzeFU1aE15N0RCaUdBem9nTU41SUlUeWlrWUZPVGdmT3JGcllWZVFaUThpNkVZRVhrVXdrUld3S2ZYNG1VSk5pd0x0MzMxT3h0S0Qwb2hTaWlQc1FaVlBHRDlzZkw4dFF6c3FuV29VU3U2K0ZFd3grKzNNaGg3dDNsbnlUc0M4bXZScytibmhSOVhvNi9oSTBHSXNYSVFacGlVMXluMm5GYzNJZGQyQTNyNndxa2VZRGt4cDRZRU1oeVdjZEFBb2JnKzNTZ203YnUzTTJzYUtBc0M2amcwRmdETXk3Wnp1dE0zQnJ3ZjZJUld0REVLQVcyRWtGSmdCbzhEc2daTjVTK3RoYXZhSkVpdElwQUJxTWRFenlzT25jWGFibkFhT1Bwd21ycmFQbGR1azgwdGpXNnhUYlQ0MUtUczJGZUhuTUY4QmZNa3BCRHM2Q1BUTCt2cHlkMEc1UHhrQUxab3Yrd1FqZ0IzQTBHY2dacHZRaFFEQXdkcS9kV0ZOTTZXYWhQWXpTU2NkQUZCeW43SmJ1NU9OaVY0RWVvMTNBZXFobWl0WDlycXIraTJBZll3ek1YRy9VUFc5QndrNUFCL0RKTHpEMHo3U3JQSUlZUEo3UWdzMnZoREhjRkRqbkZ0SW1waC9RclBvaURyd2o2Z0VFaktJaGJRakNqZ3g5c2FXSXJNZk4weCtkbTVORUlDb0ttUUZkQUJQRzhEZHVMN1RYZEp6M2F2dTZxZ0xONWQrcnNkSnlTK3JUNXpLQlczYVNaOTRNR2xWSDFud05YTjlqNm5idnI1RUFKaDVPdWtBTU5WSE96dEw2emYwUU0xMWdvQStYTCtpSHdHOXBKY0NUR1dldWNsOUE3UWZnN3dFSTQyU25RZU1OVk91SHI0RUVJWkIxRzc3V3hpaUI1bFBCUTZNWlJXMDRWbWR4djYwVlFOOTFQS1lxVlZtcEdSZm5BYTFGVThlSHF1NXp4WXh3SU5tQitZaXVBOExYM2JIcHQ1R2MxVnZwZVhiZ1o3MWtnREl6M1d0SUUzL1liRVdnZ3FmdkkydHhGVnRBVmEwL1dRSHNLM0F0SHR6d3VNbk0wOG5IUURHQ3N0OWVpeGJEemYzUXdpTVArbHd4NDByekx2c3FDOTkwSSt2SzZOd3J0NU04SG93RUpveWVycE1UZU4xQWxmS0xzejVGQnEwamU3SHRGUjNUb3NBdm5XVk1mZk15dnZWYUREMGsyWW12dGE2clVtcW5KbWFCbVV1N1FnQTBVL0ZOSlVoYzZWSFloT1ExLzdnR0FPYWcwNkpMOFhaWnlpbVJEYVpMS09HUVhDelNyTU9BT2c5bVN3dHIvQXhTMDZnV1JseldMbkZ6NTdvd0F3dGZ3OEFCWnRFS1hjQm9FMHVkbkJaUUVYWEtMaktBK0JrYWhiNi9BQjB6M0JFS0EzYVYyMUlvTm5ZOGV4anJBanoxRklDUTRVcnp4Q2R6SGVXRDFVdXN2WWpFK05jZWhESVNXUXRqVDV6RUlCWTlHMmZRQVhGSjBGTWRnSUFNSGYrbVJqNVJDQ3hoVlNxUitHa3p4TGU5czFraWR1QjFSUmFTN05PdE9WWkJvQkc0UWtmcjhZRVFuMFZjRzdEY0tKR0hWWVlPbTJqalA1WkNlaDhyLzZCc3I3akFOQUdNYi9Jd2J4Um9WLzlEWVVhSXMwOFpSdjdIT3FOODZENS9aZ0JXWVZHZDVkRzlHeHJoRDZ4WXNvZjJCTElRTFhuTW9hRXl0OEN5R3JrSE5sL0tSWTl3Yk1nc1MwbGtMUDlkNzlDOHdEUUEwR0MrWmpRdHduYXlzTFBKS0VVN2Vnb3VyUnpFeXFKUERtTnVOTlQyOGlkeW1ycnA4TGdlTFNPZHg3VUNaWE9iaXZNRTY0clFtblVYcFYrdnROdmhYdGRjd0RCbWpiMHNHb0t5YVNLSnh2N1BIam9VVU1sbjBYbVRiQUVvMHVSYisvN1ZGR0hiem5xN2VQSCtKckM1aWkyK01wd1RDRGE5am5GdWhCNG93VEc5bDlOYU5tUFZSTWYyQU45dTBLZ3N2dGF1YS9sbGNNZmRjSmRCSDM5bDQvK1loR3dNT0g0eGlvM0FuMnJvSmM4RXloMVFobkRtak16YVdna2RGWUJJSnR4ejJseThQWHJHSXpPNHlrc0U1Tnp6cmtIVERPbzR6dmh4ZmxGMXh4QURDSVNaVmRwNkdHWEpvUjVnaENnejJGempxaVE0dlB3ZERSUGpMbjNyZW8wWFVjVUxmVTFlbWlvQWFYUXVNVVh6RDVDSzZXRjI3ckhod2ZOVWJBdE1jbVJhcFRGSnhTNXo2Z2pnSXdqQTNqMkc5V1k5QnpRK0s2QWR3R0NTZHdEWUx0SzBVRkRlZlkvOUZrbGRodHRCMmdwSVFDTXNDZmYrcXdEQUJyckU0NGxmZ2F0TjdBNCsrVE5DWStONWJaelFZNDFPVlhJYTNtMmVwREFlNklyOStBUmczNi84UllUUHlxeEp1NExBdGxXTmtZYlUxUFBRSTg3VlNBUjQzdy9RNHRCRjVkOTZ1WDNVZ2JjUFhvTXFTcTFiODg5clkyeHNJUEtyZlRnMlk4SkxRSlB5QXNvK2FibDRPaEQ5eWM1b25WcUp6d3dsdzk4QXNBWTRDTkZnb0JuWDZrenIzc0FxR2NsVVZTM3psMmU4V2tlQVFDSDg2aDkzeEdDNTMwUEFKL2kzVjMxWnNBTWFtL2U3WFFHUWlnSVlGUjlGSmpIUm5PQVZUdVFvb0xMQlhiR2lmck9zcVVvcHd3ejVBa2tiR05pcmRvVDhrWlhWSzBNS1dtVWwzckpwbUl2Q2RZa2pLb2xaVUFlRlBaWHVHUE1yZVJMYTVIRGRnSHF2d3JMb3VoRExFT0d5c2xiY2dkeHFrSG1LSWtiZ2VzcTArLytDQkM4eW5FL0lMNGx1Q1JoU0c0WEVOaG1rV3hUMGMrNlJqeWFSVk1EbVhNSkFHclJZOC8yNldTbkpuS2d6cDBYb28yYzVLekxPVFNRYlRVYzhYTTBtQjZ6VlNpVitDOUg3Z0JZRWVxTm91UVJvNi83WFNVcTZPektrYnZnOW9HY1RCQVVhZ3h4aGRhVEJMa1FCTUJVMDRTZU1lVHNPL2Yxeks5aXJtVDdXRnRFMFVQY3h0Wml5ek5IT0hveSt6TmNram94TWJFcFhXRWZTYmUyUEFnQVJXL1RFYUlqNnNSczh5Y0I0SVVrWTdIZ2owQXc4MVNhb0NuYnRjY1BoUlgxWnRqNFhBS0FKb3AzQUhqVmRzcXg0ZHlUczZ6NHp3S0JjOGpZb2FVWndrRzBIOXd4b1pqSU1PZ2tJSDZzTVZZR3ZnekVTMElJQUZrM0puM0lxVEJWczM2MjFjOVdpeTRjaFJvOTJ4YzhKUHNpVUl4TTQwd2RMUDlhbWNLRVdxY3NpMzE1QU1WS2hvcVdHNmNCUnhSc2lNRjk0b1VkNDNvQkIxTjZubHRCUS92SG5ObVhLSjhCQVo2RS9RbUEvSk5TMm54d0NTQTE4ZHRTMmRHeCtyTVRaZUw3eFNDTVM4SDU4Ujh3bG5GWlFJcXp3Uk0vc2NCNENCWEowbk9XelZYOTV4UUE5T0dLUElrejAwaWNmeElXdGpKaVVzVExIa3RUcFUyMi9ucStXaWUyODB4YzVwUHJlcUpxK2hZRnQvVDVFTytLNE9VUWZvVzV5cHVGSHg3ellVYkM1S1hzTmxWMkt2Z282R3gwMEFxSFVibkNNQUFHdjFOWERIT0dza1Z1eTFObEF5UWRlQkFzUUlTdHZRcEFTRTVONElnMEhSdTB0RDE1VHk2Zm9zZllCckZVbEd4TlA5Zy9Vc1Q1Rkh6ZEFUVEtldXd4RG55VnJacWE0R2hRZDNsQ0lTOERRWm4vdmx4b3hKd29XQU02aXZod1NLQU5tM2FpalRYQzVoUUFpb2N4VEFsalozTVBJQnF3L3d6R2hPYzNDQi9RRjVIZTkrQlM5eG4zVGJxbnp1bGQ4WHJROHB5ZXRlTHVLeDVPTHordWwvOXRDSzhmQWVxMjlWcnBYYjFNY2tVakx3WmZXV1dLYkJ0VFRtWCtxUlNoT3pScE9aSXhQb1BlMU1pOHF0L2xlazJ2SFhwUnI2citwSTR0YlRsNFkwME03aGprMXFzb1p4MGt1TWNWUWhGTktWUkxKZ2hEbmg2elg4TURNZnNKaUhHNkJTbFpEcDIzbWtaWXBXcGd3elphaXo3SWRzRUhiWHBlQXdBVlNpVjZDSkRYY1h2MVYrZUJ5M2hBSGQrVkw3THI1RlI1Vm9tK3BSMXNjWnFnMmV6VFBBSUFwcFdCS1lOYUkrL1F2dFpEckU1RTlwcFU1Z2RJSDlNRS9xcG5WcnJmOVpZbHZSQnkwcDNSN2QzOGZJWDZLU056QmtZZUUzMGRRMTlqcWp6SVRyNGhGc3IrbEx6N0tYVXN1aTE5TDZwN1VUOWg5YS8xNHhVZmZHVkxyMDNYdStzSkJQeVZrVkZoMVloQWdQUndKclI5Q1NPY0N2ODBubVNaa25zQ1ZobGhkMU9jVXVQa1VMWXNHOU9zcVBZSjV3ZDF3QkJ4UzBTMGIrekp3dG1UdlBOREZPekZYZmFFTDBHRjg1aFJnMHkrM1A2VDg2Q1F4MG5qV2tUTUt0VWdReU54TkMzUHF0VjQ0bkYyMGh2SmRFQzFUWUNmdW12b1J3V1JSYUlEYzdYSUNNb0RIRGUwaC8vU3A1YTZiL3ljbGU3VDlidCtlSk5veHdFOGw4OVkxTTZ0VXZwRHIwZm8zbkp1cVh2NjNIcjNub2RYdXgvOHlQWHVlYjIxY3MzYmt4amVqZ00yVUdYMnBJSnRGVUlNMHhLV2pSSW9PU2tuem9nNnBSaWU5VG5BS1R3dDZsQk1iWVZid0ZQMEYzZGU2MU94NVVqWXVkUndQTkJvQ0k4RjgyQUhnQUR4NWRoalRESU9HRU80bW5zK1hCYjRHUUdWK2FRQWw4TkRHN01jTTNTcGc1VGFtV2VheHc1Z01QRXA2UDlFZnZLRVRrR2E1MFdBaXR5NlpsZjQvaU9mdnR6OStmZXRlTVhuYTFYNUJRL1lUa3RDLzdBaE5HTEE4YU1rSC9pTXM5MzMvTUwxN3BkZTMrcFdOVExaQmRTRE9xb1VnNzNrakI3ajhXejQxOEVoQ3lXUElFQWhlQUtLYzZ2SHRJRllnMnhiNmNUaGJBVy9GSTFrVWs3c0J1dVdIUmhrZXdhM3RLSG1xc3RLVGhEUXY0K2srZWFmY0V3QTAzU2lIYitXdXdRQjQ0V0xSY1pOenV4VWZ5UW5GWjFaUzBQQjh3a0E3WWZ2eGNDTXdrTjFEbGZLVHFUckRFdW1PMGtqOTZaVy92L3dyY3ZkTi8zcWxVNjc5MDR2VjhtaGREamhkNUdMTFNmdXVhakgwLzZqVHp2VC9lMS9zOU85b0pmYTgxWFJuUFI5THVOWStjdHV3Sk9EeXFUZVFWRXVad0tsMHdGME55NkdaQ3ZjK3pIN0dYcldPNEVHZXNWS1RsUFd1OUFDTnJhYW1kVUlDTzIzQXZHVlYzV3h0MEVOR0FsZTZjbDE0RVlIaFZMSDl3QUUrMUtqdEVTZG1TVzFOWEE4QTNvT2FaWUJBSk9jN1BDbUV5RGtVVmlPbEZtd2hKSjdpMGR0bGZuSTdxMjZ6di96djJxNVd4ZVJHM25tUFpMMHU4dU12Z1NDKy9YbXlpOTkrOW51YjMvd2t0NU92S3V2VTdEU1JTRGcvbkFFQW9BYzlBelBzbTU2cE9wVWpRK2dGazJmYnVlUVZFcEQ1TlNLaDJDWldnL2tnWG8xRVdzdzhXbXMybTNRUW9JSDBBeVdPNzRFb0MybzROa1ZlcDZCVUNJSTVQWWZPZ0VCSVNaWEpjMTY0cWRxS28zcG1IRnpWZjlaQm9EYWlGZm5VaUlZWU9DeWtNY3hrdW9rY3JiTTVEaVBuSS81L3ZBN1Y3b25kWmQvUTRqanlKZVl1NTdRbStNZCtsbnlkejI4MXYzVUoyN3FsMjAwK2ZVQk5rR0FtMVFFZ0FnRUZFb1F3QXNpVU5jSnB5UmdaRU5MMGlpUEtxVmlyVDlpVW5FL2FUOW1mNjJETUtGeDFUdlpVcVFJcGxIR1ZrcUd3UWZnMVQrNHhCSVZxTU5FcmdzUUNKVTlzV2xEc044R1ZYd0duLzFLSGZIR1Y4UmpoeEM4VkpwTjhrZVN0Ri9FQzV4TG1rc0FzQ1ZZVkt6QzBUZzNqVDJLcGRVeEJmRDJUUUpaL1o4K08rbCt4OVBDQ0Y2RGNBOG5kZ0VFenM5OWZGMEI0SVoyQVhxK1FUYnJXeFVPQWt6K1BaOFl0Sm9TeFpuOTNmRXd2dm9ZZjNtWnVaVmp4RVRubE5SRGljbThVQTVtU01aRDVrVlFHdEhVc3Y2ZW1hRjNhMThFQWdVRTZrbUVjOVZObXpHM3ZRZUEyS0RwTndCRXc3L2sramVlU1U5VHVEWEhLano1Z1Z6S0ZlckVFOWJaOVdyZjNZUlNjMGh6Q1FBWWhqMXBvTzA2cG9IWmdjakFhVVI0T21sYlBmMXJIbG5TeDM2VFRyLys5Q21STU9QTjUxZTZCL1VXMjVldTd2aVZVUkVFWWxCNjFXUHlpOCtEcHNBeEdYREJ5QkgyT1JNRzJ2N2svaG5YcVd5cUhQL0NIQ0NnOGg0VGtIeEw3azlWVUQveHcxNElpVXR0bkNNRG9PUWVIK2l0SXhQamhTSStLNXVGbVBqQzhkUW5lSTh0WUNvMWRTbk9KS21Ob25ib05wTkc5Z3VkU3dDZzJYYnllN0R1MStWUUdBLzYwaUh1U0FtT1FMRFh2VWZ2OCtQbXpkeU1PcFRHeDJmQ3JqTXk1dEd6eTkxemw3YTh3dkVsTWU2Vk04aVpDdjdDQ2lPSHlZK1R5K3dPSDBjWjhpQVYvdzF3bzBKbE1WQkxNNThMMXJWdEU3c2EzWUl1aG9MUGN1d0N5bTVBL0ZtbnZRUm94SGpoZ0FlWDVXU0g3cDJCQ05CeWQ4QXJ4MGlTN253V0p6ZUJXVFFWemMyaW1YMHk1ekpYNnAxWW1zZElaVGozdU83RVB6SDUrMTBBMyt0K1NoK2hrYnlGTTNSdm4vQVBGajJvTnhWekNiQ3M1ZDgvSkNrbjhtVlJ2bVB0RlV5d0I4NDRDR0IrRXhRb2txYjVmZCtZVXoxd0xlOCtIa3ViemFtMjIraWZBYzYwb2x6eWtWZTQxTUVuakpNTUFza0EzcmJvVk9LbEw2L0FNWGI0NGdvdkFzRzMrSjlkMTh5VDJrcjkzUmFLenlITkpRQlVPK1JJK3NaSFJSNGVZRWpTRis1ZjVYUk95TnZ6aXgwZTRBTi9NWHlxQkFCWjQzUmU3Ni9lMWlqZVljTFhQeDVqSlJCb2hkUmc4VUNXN1pIM0s2RUY0Q1NuR0dXRGdWWW9aT2JxVHcwbHdKVFNNTzdqdVRQRUFmcTV3OHRPUUhCYzY3TWVpei9MSlUvYk1tL3ZBVER4d1hNd3FabGp2dGNpMkE4Q1laaG1mUVlGbXZYRFFLcVE5ZTdNdm9OckQ0SVNhaHpNZXFLVXVRUUFqTUdabVFDSnlqajFPTWtkcUlyeGhSekprU3c2a01kOFA1VlMrb2NuQW5mM0JZQ1kvSHg3a1FuQnd6QU0zREpOWWtlQU0xSklPdVlXZnFkZnBnNjlJQlFKRVlSTDRZUXoyYUMybU5wT3JlN29uV2owQVM0NDZsQTJPZmxLUUdDY01mWTRYRis1NnltcnM2eklZa0hoSGtBK2xKTTMvK0FyMWFnMWsrUkZpMFpLc2kxWm1HRStsd0JnQitMRTlLSnlERHlPa1hRMjlSQkY1OUpwZkhQUDEvN2VFZ2p4S1pTd0U5dFkvZGtGOEc2MTlvOGZsTWlQd096VE12RERRNkloZ0dSblp5RlFmUStNOGFJWFZHVDc2V0FzTWtXZFFON0xMSkF5dDZFVE52cjUvV0xINEFHbzByYkhCcWR5Wnc5V3hnaUgwVVdlc2dnSTBIWGtkVC9yQnpzRGdnQndmdzlBaFJtbjJrOVdUbzJSenlITkpRRGs1VXdHQUl6RjBlN0xZeGlKYjl5cHlpMFRiekh3S1RmeWdJL2JSaVBtN29NeWhBQ1Fsd0RldGtvcjRwM3ZDWGdISUZ1THNaa3o2bk5Ia0k0WitNaXo0bGJtTmF0OTQ5Z0VUOXEzZy80cU04TDZsd2I5eUMrVFd5bFhjL0tLeDk2Yy9FVVk0d09RSXplSTZZTnFmakVFM3BUTG1HVlZobFJVRVRURFJGc29PZWMwbHdDUXYzcUtiV0VqQXpNbTdHSHRUZC9RU1JsUUhLMlJDRkVPVEo3RHlreStvOVJqUU13em9SdjI4aDREdjh1QXhqVlN1RkhsU3lEdFUvM0RHSW9HSHF3K3c2U2t5dm1jZkNDQ0oyRVArQ3lVdlBlRm9QZzNwYlc3NXhsVlBvRml0b051cE5UZmVIQUNrc2QwVU1MbnhJMWNZNnNnMkRWNE1qZEtVNThiaWlGT2RBRU9xaUw0L2ZYS29lVWk0KzA1alJrN2JOL29remdSdUdnMGo1T1FlUWdaY3drQTZPRU9UZU9VcDNNUG9hTlpzbXJ5eDUxYUJCZU1janAyMWltYk8ybzd4OVpORFRMUjJ4MEFocUlIT3dCR1B3OEU4WlliVHc0YUVuOU1BR0FkeFVrVkIrb1dpZlp1bThSekNLN2JpbWtaUEdmSHZWajBiM1hIeFBxSkFMcXFvbGRQRVV3clFzSGhGcnNHT2JDNmJ1UlV4WWQ1clE5LzNnTUFWNnI0WVNLeFZjMlFjZElKbVRZRndkbndTVGN5UmQ1Y0FrRGFnNEdaeW5qTjRxRnlkNTQ0NlNqTDFNbWRrWEl6UDVTMGtKR3NSNnlhMVE2VnUzTUxwL1U5VksxZ1FpLzh4dDFzRGh1dTZGbi91QWNnUENRU0U4T1R4YU9wWGdBRXNlQ2lNT1VNZlpRcXhrQXQxZlpHN0hkVXhJNXFTVVNET3VscVVCdlpsV09DZW5HNUVQWmJsb2lJOUtHVHhXY0xLbVMvMUU4RWhHQmg4ajJBd3B3TGM2TlpsUVB1cEZKZW50ZzhDVTFkVDByK1FYTG1FZ0NpQjBJRmp6RlpkeWZQQVNBcEEwaktvemR4bXN2UmxNdDA4cEhUU1hyL0dBcU1tOGRXdHY4OFQrR0VUQnNiOXNiekFCcit3bnZlUUFNdWVWUXE1K3FnREE0SHJPUkZpY2hLSWNTNjZTcXpKMVhVa1lDUmY5STBUM2dMd3BDUW1QYjB1Um92cTMvYTNlZWlhZlppWGI3eUc4VmRGNUpFNXNSbmkyL1hDbWxZT1RzQWRnZndsK1pEaVJtZDBkdTZJUi9sNXBUbUVnQndMdU91VHRZN05NNHJvV1RFUFlBaWJJNU91MFAxajE1ZHR2R2VBOThFWkpUSW9aakx3U0JsbFpySUdRelV2RHVlZVF5bW5PeGl5RlJIbXhBSWFsSVVDM0pFZzYxSDlWQlQvV2pnUU1RQmVzcEFUMEowTnF5Y2lhK1dQT0dGbi9CdEd2eGdaMlJPQUloVTR4NTFRQlVDTURUOG1OdC9aSUpqM0JJUTVwSlNIK1VGbkV1emN3a0E5U1lnbHJYSEVVMTBJQ2wxTW5wWGVWTTY2aUJISmo1emkxUmhVRDZpYmdleGU4eENsSDZvbUcxTVVmY2dFYTdqbTRCVXhnbkNNTTRacER3SE1IZ1lpSFk4Q1RSQnNqSFY4RVNKb1krQVhwRW8xYlAzQTY0WEd2WWlnSFJJTmxCUTQxd3JIeEhvWlVmRktxMEIwZ2JybjVPYjFsVTU3d3Rrc0t1VHYrb1htbkllQkFEcUNzZDJ2d1pRVkZDWkp2SmpRZXF4Mk1DYkIyd3pTVFJBZzVuY3oxbVlYVDZYQUpBVHQ3WFBUMWdkd3k1M1JPbVVjYWNlUTl6dHE2QTBqYzQ1alp0bHNISjRrRElKeXdEaEJpQitZRDMwbWdqc3dSUkFWWjI2Z3hHbVlrUUZvVTJFb1VrS0JmdlFWWnI0UkJ6UWd6WkFGV2x0cld5Z3pPVXNEdk1xUklBcVY3dG9VRG83QkpIYmNPVTBFQ1RiUW1CSW5BVnJsdHVXRUdlMU03QkFUNWc2K0ppY0JVYi9FV2pKWVp4aEl1ZzRLVWVmTE02d1NZdWVTd0RBR2pvZ0Q4bzRtSDQ3U21yNVBSbW9MRGsrQ3BFaUtkRlJpbk5MU3p6ektBZEExc2x5OGxoWUxSd2VRQ1VHdWhQQ0MyeDhRU2U1RkNzclFOVlhBTmYvN0FKcUtrSThXSVQzajFjSWx6Y0FNNi84TkI3L1BjcXpvclNUamRWV2d5MVlLckd2MjBJbTM0YW41UWRHLzl1bU1wRlRKeWEyRkVyYlBORnBWazVvY2JEejhhRnhGUGlvVkJtc21YQWx2dzRNam0wK094L2VFa3gvc2VxdlVKKy9wbElEcHBpVHkvR0hHckMvYVdpbWpmVnF6eVVBMko0MGpyWUZZeS9IVVJOMXZCb3FwM09RN1pUeUs2S2hKYzhkNVkzZ0ErVWN4NklEaFEwSXZnUW9BWURQL2YwREpySStYMmpCVFN0V0xnOThQT3VSMityRGdJNDBXSDN4MjZBbENvRUVUNTJnRjY2U3dYV2NsRElQckdzbFExT3Y5REFtVGpZeEtUM2hnV3lqaWdRR3RDU0hYT0ZvVGU5UUNSc282dkRpbzl6VXpFWENoL3lNTlRjTkNRTGNtVWNlZkNTQk0wdkZsSm0yTVUzNXVRUUFKcXdqR3hvVWJ4NW5CMEJWTGgyWUIra3d5ME40UllnNFNxWEpiRHFxSkkrSVpWNVpCSjJjNVdSQjZWdUlyMno1dFZGa2xDRVo5Z29Cem1vS1NIMk1NMjhWWWFDbGc2RE1nUFN1UjdudnFSUTh0Rmp0eURuNnlkQzNGTzJMZFdwQ1JwdmE1d0JNSzUzWDh0WCtiQ3ZlQnNaZXB3cE1MY3BYYWdsalNrclFtSUt1T0pXQlFSdG5tSlA2ekFnRlNlVytaRUtzK0hMOFpIL2dKOTgvRUkzZzZPMi9jbDVhazU5V1VZOWpWc2xCR1FjWEozTnZZaDVwTGdIQWR1bUV3L000emh1QkxFZGVvWU5JZzBGWWNFR0pjL0tQY1cyNWhhZUlxT1JiMFdBYUQ0NldIMXFXRXg3ejE0WkdnTWV3Y08yRFFMNVJaNWxBREhBVmRDSkl4YW9vQkJPZ3lNcTI3WHZxRlVUaWc2M25weDd0a2lPN3pST2ZlZFRkZjdac25jaDVUVHM1N2VaaWtIbmdDNzJLb2NYUXgrM29SRkR3elU1UkFoZk13Q2pvakx6QXhvRTBFTjhqc1AxRmtSM0p5NThCNTJmQi9MR2ZhSkF0UXdEVndXZHF3RVNkV0o1ajJnSlJZazVwTGdHQWtJdE5PZkN3cllVUGF5c2RrSjNBWUVlbUI3MkIvVkxjWnFrRFRCcmtwZUFzQ2NGbXhrQ05DY213UDBlWFBtbFFlM1NHamlaSmVROUM1ZGdCcnMzN3VqMEVIVVoyQUZ3R1VDY090djlNaTlpeXhnMHhsYlNVN0pwRHNsVjVXU2QrYldoTis5bDF2VFJoUTk4czJpRFhzUzU0WFhpK2JRZ2RQZzY5ZnRBSGRRa0FjUVNNUHNqTkhQWDJKUlJVcXJvS0FDWVFNUEU1SE5DVTh5bzN2dVRFK3h5M3RMM2pGNVA0SlNkK2xvMDNQTjhRekc4OGtOOFVqdmNpYk9JSER5QUZCam1kd01BcXp6c1NVaS9yV1BXVW4xQ0FnMVJnOUdDYlQ1RjZmcVRhL3BQTjREeklvRVRLNmxrKzBWeHRvV01kUTdKeEhta3VBUUJIdXdPd3FCanBqanFHaGE0bkdWd0sxQTVObUhaR01yTTh6bUUwcmhDU1BoUlFzU09wcWlzU2d5elRWRTU0eE1EMkRucHVMZDIyY0tZSjMrYklneGNjUjZiNEdGQ0RSTTdrajhua080TzZ3T1U5Z1d2TFM5MVp2UWp4NHZwUzk0QmVJWGEvWGlKeW4xNk5mRUc0czNyRE1KT2RpZTdKTGNGaTk0UmhBakJ4UlBLZzk0dEdKTnAwK0FxZDYyaFBDdEU4MFlweTZFcWltTEFSNVpScVF1UGEybVYxSHYzSHVNQXV4anB3SHByakFZc0FYd1NKbVB3RWd1djZTYlhMT2k1dDduVnY2R2VWWHRkeFJmQjEwUWdtN0IzNFpTVUNGM1l3a1hlMWxOTzJrNVZRUVhUYXhpNUkzbWNJNSs5WkZGMmh3YWQvODZRSTBDZWFpbURyS0JpOTVwSG1FZ0N3RGNQcW9US1RBYWNlSldVbnNIM2ozK3VmOHRKNyswUkJ5dFRDaVR2cGZOeEcydGZpZ2RPT3BOOUtqK1RaMGVDK3FZRTgwZHMvK0xHUUMvclpza2YwcXJESEw2eDJqNTliNlI0NnUrTEpmMFl2RDFsWHIvSlNWRloxOGcyVk9XS1ZaNldQZzhuaGlhL2M3ZWlVN1kxMVNoc3loOTdDWS81cDVXbXlVd2E1eDRkeVB2RWdHTlNKcnpJLzJMcXBKM1UydDNVb0tyQUxBTWZCenVDNnJpbXY4RnVMK28zRmw2L3ZkUy9wZU8zR1huZE51d2UrRUxRcW52WlNoQjBFN1pGNCs0OWNvQ1QvQ3NmT2piR0ZOOWhOb1RkbmN2alNqbEpkbUR0UExDWjE5WmZnd1NYQm5Zcy9VTUo4QW9BNktTYy9tbFJERDFSclB3Rm5TMHgwUzNxZXZJV2JhaWJwbEt0dnNzR1NIWjk1aSt0RlVMa3ZUWVBhK2dNNm5TbEVyTldDSkljT1J2L0FSMDQ1QnQ2ZzlxQUFQNG1QK1o0NnY5eTk5WUhWN3FtTGE5MGplbG5vUmUzZnoycFdNK25QNjAyb0YzU2MxNCtnS2hZNENMRGFzd3BpQmdmdGNiQ3Frbk1mWmxPSGFUcGxIemtIRDY3UURSU2NNcWNEN1UrR29uemFnQStjbEZjUXVKUXpYMUxnZ281dmVNbVRmdDZ4VHJ5c1oxc0lCR1h5WDVNeDF6WW4yZ1VzNjlKQkFVSDRxekx1VlFXQkY2OHBGMDd4UVR1TzNXNWJrV1ZYQVpXeDRZYmtXOThES0FwNFlTazk1WnVxOW9ONGl0YlZEbFVucFpnb0hmT01vNVU4TndvY21ObWU1eElBTUlHSTNvK21LR2RuSHNYRWREYU9ZaUE3SWZzQVlhMHZEZXVVT1hWYjJHVWpnSTZmMEsyS1VjSHJpUkFNSENiTklDL05vRDUxeG1iZ3Q4Zk82dWZDM25WT3EvMUtkMTdMKzBVdDV3K2VXKzRlMEN1UTd0ZlBINjFyaTg5S1RuMG1OY2QxY2lHOHhkWnNRUTRycXlkMTVsUWdrZXNnYy91Smh6WktZLzFHNUFPTFk1SGpzaXVtY09XZVpDVUg5bEVDbWk5VGhGdFdvT0M0b0tDbkgzSzI3dGhKVUdEeVg5Rng2ZVpFdXdBRmg2MnV1NndBY1hWcnFmdkk2OHZkczY5dkM4ZHVha2t5WWc4UU9uR08xWjZjSUo3bHVNR0tEOVY0aytDSXVnM3lpQ0NCK282RkhMRk4yT2NTQU9pVXVwb1UrQmk2eHVCVVJiWkhUUDdCUkp2U0ExTlF0MnoycVB5M0ZIWUN4QndUOStsNi9yMVBiSFJ2MW0rY1A2d2djRWI3ZW1oTWRGWncvYkN3WG9zdW4ranc5bGxsbG5pdjBESUtQM25JNnVSY1pQSThBQkl2OUtoZ3pGeE85ajhuQTVGbEVaTkloZVRWTzRPQzcwOG9FUGhlaG9MRWlrYTFOa2pkZldmMVduWFY0UkxoOGczdEFoUVZYNzh4Nlg3ZnV6YTYzL2lXdGU0bm50L3FmdXpqVzNyak1yKzhGSmRXUkJybXR5ZWsvWUpuV1AxeFMxNEdvRVY0TEdOQjZpWENzVklkeXhJRVBLODBsd0F3K0M1QXNleW85d0RDM1ZHWnp2QktTaEZuY1lnaFFkQ2s5R1BOQytDSlVSaVNsc3hScmxnSmFWdTIyT1lFMzVET0t0SFVqaURWc0FDMnRWb1l3VmszcTZEci9ick8vNXdIVnowSWI4ajR5emMxNGJtMlZRVHc1OXZDTVRRWnRIbDRjcUFkZ2xJWURZeFRhYkQ2WkV3ZmxWTy9FZnBZeFZ1cGhjQzB3WERUUXVxQXpudjRRRFIyTzNRVkJ3SEJRVUdqTzNjSjU4OHBJT2pnbnNIckNnUVA2ZGVZMzNMZmV2ZWIzN3JlL2ZRTFc5MFBmMlJUdXdKK2xsMEJSTUdFTWVhSmlKSldsQk45RzNjSElKcWtCazBXTlZQcWwrVkQ1UkpTSno0Q1VHQU9hUzRCQUZ0c0U1MmtBMFB0dkdNWWFGbFpIM2twQXlDUGdtdUxPY0FQeWxOTUNDeWRYSkV0VUZ1c3JmUURRUFV5WUpRQkFyYzdGaVlWUEVDTkRIVUwycko2T1VVMGRZVmtkWC94bXI0TnFLVnNWOWV2RTIycCtJaHVXZnYrRlMxNzVId001Z25UQ0tHWnRMZEtCRGxPVTNDSmF2VWJWK3VkdjQ4U2lOU2xGWFlBSytoc0s2c041QXRaOFVYR3dONUNwS2xkK1l2QXNLM3RFVHNrYmlCTU5OS1hDQWc2TGlnUVhOUnhYY1NYTG5lNmxGcnRmdlhqcTkxUGZHS3IrNmNmMnV3K2Zqa3VEZGhST0RISjFZbmxZazU2UkdPMGxaY0kzakdvREdXc3AyWGM1dVF4QWsvNjZqYjhKMFdlU3dCZ0VIb2doc2NNYzFsd0hFZWxmOWhCMUNnTmNpVE1mRHA1d3AyVXQ5dzdsanhGSWdva2JhVE1GTzdEb2hqazI3cXI5Y1pMMStJdXZwYW9GUzFyeXhxZE1lazFCR1ZrM0szT29kbW9jdGlHcGxWSmMyNHI0d0RHTVpyT3VFM0NYdmZybUM5bGlWNmxGQngxTWdIbTlsMExlWXcxQ2R6UnJtbExsd0dibXRUWENRYjZaZEFWSFU4ODFIVVAzNmNBKzdvdUc5Wlh1L2MrdXRMOTBFZTBJL2p3cHA4LzRCNEJFUndmdTUxQld5cTRyTjJZZFFsaXc1SnEzVGEzem1ramVjSzNyWGxuREhNSkFMbHF0emExOEZGTXdMblRvbVhGTmNKYVA3bzluY1k1N0lscnFob2M0aWtaNHo0SHlvNE9yTTRGNFV3RHhqd01IdjB4TmNkMXJITUtHVFhlb3FtNU91Rm53cGRqY0NOUkVkWFBBakF3TFQrYUQ1bHQ3U0k0bEt3NkdydHZleEM4eVRwU3FTa2V4REdsM2FaVytxK2lXb2NrVWppa3VBV0xHOHJFdnA0V2xjWiszRmVXQ0g0NGhzZDZkZk0vZ29FQ3dxWWl4SVJBb0k4YUhuOVlsMW9YOVhIcEs1UHVkNit0ZGU5NVpLWDdlejkzbzN2MnRWMC9RSlZCeGpzOE5SQmVSNVA0Q0RHMFZMK0kwZnFsUFlmTnMxTG1oNjEzaDN4ekNRQjR4UGNCRkFseU4wQW5EYnYyMXBZTWVGV1hvR0s1T0F6NVdTWXZLZHVpbUdOOW5MYzBWN01nUXdlZWtpWHp5aWdFZXVaQ1p4aWNBTnIxSUZJT2ZUeElxNHdSZ0F4V0IxWHpoUGNUY01Vd0xnV2dJTGM5d2hralFWbWtTazJEUXNWUy93Qkt6ek1WT2thdFVSWHNUZjhGTUdTd0QybTdNRlgrd2pZdWo5VmtWKyt3ZFFJWUFBQkFBRWxFUVZUN0ErTGYxbVhDbGo0ZFlHY3cwU2NKSzNxMjRzbkhkWS9nQ3BjS1M5MS84cmxudTMvNDcyNTIvL0tYTitQQkluVUVmempiZllnc0ZYbVJTS0dvWCtrUHRPalQwSUllUDRhbTNTc2I4NXgwZVM0QmdHc3Bic1p3ZDVaalRlR1lEMTZHYmpxOGFjUmZUeWdOVStZQWQ3NTV1TVdPTDk0bXl3UEpSdXMwemxzYThMNUVRelhkUW1NUEF0WjZKUVlCbVFZQ2Y3RURLRzBMMzBwSjZTME9FWU1rZWZ3d2lEK3JsclQ2cUsrdmc5UVd0cXVDanhwZEJoTDJGN0xoL1JSaGVtSVBUV1U4VVNUNnU3MCtBZ3ljWmJvWkJEbUNGbktaalgxOUNhTFFaNDFGUGQ3UFNVaWVIeWpTc3dJM3RDdFlVaEE0cHdjUG5ucENZL1dscnZ2cWQ2MTNENTlaNnY3eHMvdzJJMDlkU3JUN05YSVZhb0NtdjBYT3BxT2hRNTZSdVZvdVM4ajN1SDZaUTVwTEFOaVFRL2ZPNithTEl1MTFkY3hOZWZIR2RueVVkU3diMVdrZUkrUTZIQUFrbHlBelRpS0xLYkFseTJMTnN3NzBNbTRTTmRQOE1PMmxQdjVsSUgxVXRhZFhYL2twTmhtdDRhZ1Jxd0NnQUtqeDR3T0ZnWSthMGpkRHAxVHNVY1hkQVQrR05NdkRGQlZzWDRQMzUvTWxhTmgwR0JxNmxabmlFMWc0OG9FcG5oL1kwdXJQemNObEJZSTNhVGZ3MGllNzdrdWVXZTBlT0xmYS9jQXZoMjhqQ0FSc3YwdUdtMVFiTkZPYnFvQ1F0MGtFOFZVV1NPMUVOalJYZUFweUhta3VBWUN0MWk1YkxSMmJjdTZXamsxZGpCM0JQL1pGQ2ZxRzNiODZaUUJnSW5oeUZLKzVjMzBxWXdGZWFGUHlVc1YwNUkzVDdmUTAzWElGK1Q5MkF1anJ4VW1uL0tMSlFVWm5zK08yc3V3ZFFOeHBrbnJpWnZWSFdSMjA0NEhJOGlOYWZyVTEycElFMGNzSklGSUtOcTJuZ2k2b3dqZ3N4ZkFlNHdycnRBeFdsQnVrVzlmSG5ud0V0MVpyUk5SeElKeDNXQmFuVXluYkwxU3NkY1JWbWl4WnRiSEVEVGZEWTlNRTA1dmNIOUNZbmVqZXdFTVBoSnpQVjBWMkN0Ly83STQvS3ZRTldQZ2h5ejc3WHdYa0c3YkU0YWx0YTBpSnk3enNOK1lISC9IT0k4MGxBRnpWOW1wYnEvT2xTenIwc2N2cmwzZTBBeURLSHkzMS9FeDJuTzJUSCs5YzFZVFkyVkhZOWlZczVOSVpISmx5Y285ejAwTlVzcFo4S3JMeVdKL1M2WWxrb09XejVJUTRlTkFob01KbG5oZzhoWmpWRDh6OVRUcXZDaUVOUnV6bmozc0Uxa1YwMnFuUElzQmEwNkJRSjBRbEZ5QzVNcGY0bWdKc0VKVnlHeUFkUG9YTmVpZmVoWDVoeUphY2EvYVlyQk1YVlU2ZVVlSlBJVUpYV0F5ZTlFWjRwRVFWbjZ1RU9rQ3lMVzc2OC9neGp4UHo3VVFlcnJydmduS1ZmNzEyQk0vcm1lSi85dXhOM1JqTVQySHdkMytra3FqVTZ4SUtaaHRXWVhUaUc0MnIyZ0tzYWZ1L3JvVnk3NDBSdzR5S2N3a0FmanBOMXJjT3NJT09ZUlQxR0UvTUJSWkIzd2xIVGl1OEZPR3JZdys0OEkxejBKbUMzeHlKR29zMlBycFVZTU5LaDFQc2cwQzBYOGFnQ0QxN3JWOWJPUmhneTgvWFozbnpyN2YvS3BQN0ZWYkN4d3R4TlFoUkhzRmtkZlExQ3JaTjdFTUhZaCs2clROcmVOUjQrRWhuQTRXb3pNWHFWSlVoQlZJK0taUGQxWFJTR1ZJdk91N0pWRk1rcDZjRkkveDhjWXBWZUVzUERmRTQ5WDM2aEdCTDVkLzF6blU5T2JqZC9lekxPdzRDeUtHK04xL0tDVk51QWJraWdFZFZlSkI3dXdRUEFYMWVhUzRCQUVlMEJ4M0c1RDJPblV4OEJXWFhyMDRxM3FXTk5sRTBxdUNUbmpuRVFtcUFBUmppQ2hQNjlqcHpVeTVLMmZuSXJaMk5iQm5LY0NCbE8zMzlnaXdJNklESko5QXArWGt0T08vL2h5T0dlT1Jjais3cDdtQzhFekNEZ0dxSlArc1dVVk96Y1h0VG1TcFMzRWVyVUd0T0JZci9wdElLMHRPemJiUFVjYkNEcHhnWjIrZTRVV3BVMlIxQVR6OE1RMEhCeWsvN1BGWHFjRW5BUTBXYnVuZUY2eStXbmNCWGZ2YVo3cS8rNkJWL2wyQlpXd1lrdFNyU29sL1ZwcHdidC81a3dMaGkxTFJNQXBnWHlNcnhOSTN0cEhGekNRQk1XaVlIUjNvSzhDZ3BxNUxuRzFUcEZFZC80VEp2NWJzTm4wcjdOTmlVWFN4bFlDY3JtWVZodnA5VmsxSXNjVzBYVTUzcWJSQ2dSeE1YOG5YT0VRT3ROQUhxb0VSOWRsRTdNaEorRHhEQkVSRFVMbmdoOFlGWGZ0c2dpVVhvVUhhMkdIcjFiU1lYZE9DZXIrYzVZY2g2VHBPWnVvZ21vNkxFV1VkUnl6aE9LanZEZUpMTHdvekxoWmpTUXBDbHFJcisybUNFakNENTY5UnMvLzFSb2E0Tnp1cjdCVS91TG5WZitta2IzWGQvOEhvSnZCSU9QMHUzYktJdUY3aStOSk1zTk9PZVJyWUJLMGViR0QySk4yMU9VV0F1QVlEUE44dmlWUU1CRDFUZ21LT2tjRkNwRmJNdXFqT1Fpa2NITWxYSWhjQjR5dFJvOGxJc2hCQlh6MmJPVWhUYVpta1NMTTNueXptTlV6a0hVSEEweWpVZ2trc1IwTExhc3BFRjc1dUFqallTVHFORVZjcksvVEVndVNwNzNLY1ErSlFvRnJDVXdCNlVzbkxtQi9HQjc2WGVpdXR3dEFQYWs4TXJKU2UxTU1iUmZDRTJKS0ZFS0IyRlQxb3RtZXlScU5pWGFpd3FIZGY2a1krWWVSeDdTemNIbDNXWG5zZUt2L0RwdGU3LytkaG05K0hYZC9TeGRwbXRYcEg0aUR1N2huQ2pIWUtFaGI2aExCcWtGcUZMTEdwUU9aQVduRW1kWFQ2WEFJQzFPTGc2dWN6SzR4ckpkZzhuMDBrT0xGUDhnNE45Y0FKV1RudXBRK2JJS0N6bUd4WUNOZUFvekttN3QzakkxUkhYNEVrcHRVVHdtRktPMmRZQjNoUk43c28xMjZjQzEvdDhMTVNEUDdCeVprZ1oxclhVUkVwNDhpUGZCakZCUkIwMDBqWjRTSmdHU21yQVJKMXdIaTFVbFN1UXpRaFJsQmpZSnB6RGdjaXVranhaMytXQ1RGSDJUdmdTdGdFMTZ5RXQvcjJTTTFHNEI2RC9ibDFCZ1BzRFgvS085ZTViZi9LcW45SGdVaXdscFV3K3BzMVdJa1NvcEk2cVRWQ2xKSEFjbnZ3Q2dqK3BzOHZuRWdCd01CTXVEeHpGT0ozbWlGdWJHbDNGNUVkV3JRODZqMFpBb3BLUHNsTUZvbHFpYTNTb2lGc0RqWmpCSUhKN0VMUGhSb3pSQjlCZ2EyWFdha0p5czVQSFdQTW1JTG9hNXZxZklDRG1hSzVNZmtvcERBSndNRlN4RlVpK2lyZ1ZjQ1RtV3dscWFGTVVhNXNST2NKZFU2VkUwNmhaeHBNTGdhazNSR3VWd0VjeHBtWGZCTFJTU21SQnhTVlZQQ3VnMXdaMDI3cEQzeWtBOE5LU2R6KzIyajN6Z040dDhLcStQS1NaeEUzYVByRkk2VEpORTU2eG1ndEZ2WGN4Nm95Y0R6VHJJTkFMbWlrMGx3REFLbzBUT0p5VXQ5MXhGQXVaL1BTVjY2ZThLUUlndWMxQ002dE9XYVhxQXIzQkYvYWVzU0lDOEdvZVZZeklIUVQ0YkNPTmEyMkVWblVlRWJ3aEt2U3FYL0lyQjhlZDZMd0ptTXF4dm5BM2xKdUF0QjlIdE9TZGdPbzV0VUlUZDFKNXlqNkt2TmIrZ1lJSENLbHRsTlV6SFNsOGlBcjdzd095ai9JeUFLa0VrQ3BHNVI1dUtUaXhVSkR0VGxWd0tRTDVQZ0VQQyswb0NQQkVLNjllKzRLbjE3dGYrT1JWdldGWXZjRkE5OUtOVmdUbENGdmNvSTB2YkNFVFhUaG9CeWlTUzdTcFloV1J4Qm5tY3drQStZd3pSc2JFay9tREdYaDdDNm5iSm9JdDJ6SDNsd1VITmNVbUt1dFZmQkxFYmxwaDhQQkk1dHJRRUVIbnBCeFlQRDdJQ3o3R0NaS2lZeDBjVEF4ZTZyVEpza1EzTjAxRnRkQ3JNSUtHcjM4T29QQ0JKSElvTU1RUGc4WndpeW5DaXBpQ2k2RGpaRFIraUhSSXRsN1NxRUl4dTZjbnRJOFFrNm82cUpvWUFzTjJWYVpvMnFnaHk0MnBsMDNBSFAxQVkrSjNGU3JqUXhVRGRCQmdZbkw0Y2t3N0FHNjh2dWZSMWU1QlBTcDhTUzhtbmVqdWRINGFFWjBaN2Z1R0lBMDJUUVFsVUpDaTNTZzdBQmc1KzlOY0FnQ0JNWGNCTnBTeWJNTWZSMDNVb1dOY3YzZ3g1SXlraWVhT0ZUOXNGUzUxUUNhWVFDMmpWRllBVmtLNjZhVVpsNFZ3cmxPV0FkQ1B2R1NsSmtHdkNGSUdzU3dzaG5NWEFBbGFXeVpZZWdkQTFFTUl4bWNTenZjQXlQa1QyVHFNaFNUL3NYTUV6eVlOSmVQSmtvYUUzcTZHN2tsdjUwTldoYXd1QnlhWTdKRTcxRmRVTkNIT3RyOHREMm55YWVrazM4Z1R6S3ZYK0J4NlI3T1V5NEQ3ejB5NnozaDRwZnV4ai9LRklkWFFRSjlNK1NCL1Z4MnpMSjNjSHMwVkRUSlBoUkJQay9NS0FuTUpBQmhwL3dwSVB6T1dNZlk0S2VWUlArUUtFbUI4RVpod08xZXliWExxRXBSSTdwWUNSMVlLcHBtbGRoaUEyNDJLUFZGSTQ2bXF6bVlsWUJJekljbGRqNXhrbmdJVzJLUUNrN1dKY3Q0RDhBVEhnSG93MEtNOVpNUVE2eHNDS21KYmtiZUZiMVVIMnV5U2JKa3F2TWYyME5CZTQ0dmkrT0VnUGJPRnBQZWNSYklKT21rbTVyMEVoeFA1bkp3KzRQa0FQZzFnc3I1YnU0QWYrK1dibXZ6eU5VR0FxbTVmUlAzemNCSUE5d0U4c1UzSHlNQURJVk5rMCtIaGs1MTVwTGtFQUQ3RHp2RnFvNm9Eam1kaU9GaDE4VjlKT0s4dHUxam96blJxYyt0VDZvQjNmY3JpcXZKZE1qSk9Zb0xQY3BUbjVEYXVDRWs1THVya0lPRGF3WURzMnBoZ0JsQ1NNMkJRaG8xa1BWWHcwNVNLV0JwM2xwbDRCbDE4REtqQktWbDUzVW9qVmJZbHplYVVlbzZsTzFDTmtTbzdHSTd3NllJUmVsUlVTL3IzUkN3VmFqMDVJMjAxSGFYd3hVZ0NSZXNyZm5MRGhTZUNRbyt4UElvQ0NBSXU5OGh1ajQ3Z2FVRTE4dGI3VjdwemVqRXJQMnJpajdjdEgwMVVUeks0ODgrQ2h6Z1dwQ2tiQkdGRFgzUjJBREJtOXFlNUJBRDVvdzVrWU5KQkF5U28wOC9wd0t4UDJYSUFpdHlzbVNnY25yUnNPM1B3TVJSQ1AxaHowSXpFUVlyT05DUllqUEM0ZzhtcGlMeVNRNGdoVUhnSzNuekljT1hJS0pLeWF0SUNLeDd4K2tsQTZsRElyUXNNR2xuc05xanJvOGl0c3VDNTA0VE0yNlloMDdEVVZCNFEwSExvQXlNQ2JiQTloVTBTa0RMa3pNb3FYUGdXdnl1WnA2ZEhsZXh0R0dLdkJGL1N3TnFMN3RUU2V3aWpIZm5kOGt1Ylh1MFpYS0kvb0hzQWorZ3R6Ui9WTXdGK0ZvaEFRTCtJbCs1aVFoTW8rT0ZSZ2dIZFo3SENrNEJKTkF0OFVJQXcwd21mNWhNQXBEUkc0d3g3V3dBLzdwR0czODRtcW1XeTR3ckM4cEtRZWRKVWhsN3JKa3hla1VNWTdwYVdJc2s5WElyQ1pQQjVpS2lRWlFBNk1SRGlJUWhvY2hJVUtoNWg2RUFsSmVNTkZKbkNJMko4NEQ4UG5KS0hjU293K1RVUTQzTm82dUZYdEEwYW9sTWZ3M2txN1djUjlvUFRMWWtIVjdzdDVRQzVBM1E2S3N4b1JUSXA4K2s2OEswdm85WkFVRytpMFBaUEVSWmM3dUh3bkR0SFdDWTdSQW1MblpYS0NLYnp4Y05sQUxPYjd3MDhlV0c1Ky9Dck8vbzBJUHp2eHVDelJJdUlTd0JRSk1ueDRsUzA0bnNkaU01alRsY0FjM290dUN6TlR3S3czVzVKUjRDNFRVcW50R3oxVXdUazVGRkErQkxsUHFCYzJuTXVPSW9CdERCMSt4U1U3SXpvc09na2VIeGpLRVNVZ1NGTlVSWWNvSEo0Nk56QUl5OWhKQ2dsUDJEQ1JhYnBPcUd6TDZPa2dIVW9mR21raDI3NUtORGlTek5wcFpWSllabkRjOHQwVzRaYjFqNDVZaGlETDYwUnRwZGtFT2NJQ0pjVVlxQ1N6Ym5yRm94aG5ZYTRDSjFaS1NhOFNzaUdVU2Y2SjRLcjZpb2E4M05qRHJ6Q1AzR2hmQXdvZmVodVA2UGhTUjJoUmlnTGN5c0lrc3pBOVhwUVpxeHhlQ3dvbjNXYXp3NEFaM1BJR3ZkWFkveFJEY1JKS1l1T3lVbHBPVFJRVXJaRlo5QXdkVWpKa21YakVtbU9saXM2Q2JKWmRMSTRuVklQZ0I0V1E1bnNNV2lpb2xHRjVDYVFReVVsNjFGa1dNK0NOdzE2NFdIMTV6TEFDSXgybzhvRjUxM25ySnE1cUU2eHRtVXBjdVMyYVZ3SDJwaW41WjhuWFBZejBXVHhMNFdxc3hRMWJLY0hXNnlud0RFQkErdGl0UXY3V0s5akxCUnBLVlRJZWo5Rk9GOW1JVDhhY2gyQ2NySS9xbDl0OHZZZmx1eFVHbEFxOHozdUExaFdqek1kbnNLYi9Mbm9VSjVsbWtzQThBMHNHV2kvWUtpTzF1RERHSmlPcHJySFB3Q3B5SXBPREZSQnU2TVRYd05CSWJwNmtlRWhrdko2RVJWS1V1bjdhQk9xRUNuZkV4cEdtSlJuZXpGQ0hQY0xLTGpPZnJFWHd5d242NFlJblFOQWJGd0MwR0Jwa3dhMEF2RlpkTjVnb25vZCtLS25iTVRNTGFIc1lSTEtIaU81R20wVTR3WmloSGZaZzJ1b2lGL21XZHFEa3YzV2M1VkFVVHF1VG40OEtxSHhZSlZnS3Fqc0ZSNy9hekFpNno3OUtDdmZHWWhCRncyWlI1VnpyQ09hdmxJMTU4cXNiK3BBbVNEaUhjQ2NJc0JjQWdBRzJ1RUMwdkhob3NPZm1mVHBLSnhJWWxKa3dubmpSRnZ1VHhHeTNab2pqVXAwWUszWVE2QWdtNzhSVHBrQmtVR29qTU9lcnpEa1FFRU9xREt1TEhRZ3R6U0puSlJ0L2xJSGNreitZcThReU9iTFFZd2lMaThBa2VsRE1BQXc0TnhTTm5iYmhndGpkc3cwQlpGeFFLb2tuRVJpZ2dYVW53K1FuWUUrVlhYdUUzdU1USUt5TXlUWkU5OG90Y0kvenVlL0hEa0d6K2wzR2ZscGRUNEpnSmozZnd5cllzWUdaR1RBVGpYUm40TkVEdStjNXYrYzdnRTBEc05JbkplT28zellsRTR5djJTUTNCL0F0QkVaNk9pZ0xCZGE4Z1JkMHFpZ0U5dkFVZ0F4VEcyajhMZXNDU3RQTm91MDRJSVJJc1pUQVpBdUIrUTFaZzRDcXVTNFF3WkhUU3JFeDREQzBGWXlsTHg5SjJCZHFaQlFoVmRKQWFTeUkvU3cwVEZ4WEtieEtla0E5SDdPV3pCVzBraFJiQjhMd3BjdHJpMFVPVldjK0JoN3BNUkZ1YXorS2NrT1JwQzRDREFDdmEwbnB5d0s0NWMrTVl1eStQbjFlSk1RYm05RndNU3V6emN0VmJ2ZTVXOTBRUThtUGJKcDcxTXFBR0JjSHVsNUREMU9zb01ranh1d0thdUNPSlNqWkc0eml0SHg2RUdaVlgra0FMemhmdkpNSUUxd3AyVEhCcXNFQUNBbldGeUp6Z3U4T3QwVnN0endWUjVWVjkyUTEvT2wzc2JyeERqemdCT0J5VTQ1MjJVTEdsOEdpb0dKYU1zRWFCVnpGU1BIYUJpZGFLOXcxUEtCekZGbHhtZDd3RzJFT2MxSzNTcGF0QWllb1VwVmdvQ0V2VFV2Yk9EcTVZRm5MUWdrOVVHYW9Kb0JPK0RvRDhJRzM4TkFNS3MvbHdBZVJ4WnF3VWp4MklHQWpHZ3ZKampOVUxiZXlpa0FaeUFBTmVzMGwwc0FJcVVIdFF4TUI2V3ZEMnRnZFpJcU1BR1FBeTdsMlpPTk1CenJOZ3ZPZk1tdmlsRkdvV0FvV1MxWElCdXVET0xQaHAzcmxEeUlnczk0WlRrVFZYWjdOcHBDendPdjJSdGM2ZzNLaHhEY0FQU0xVSlF6Z0NNS3FLNzNrMHgraHByS0pVcEZMc1FnSWExTjFDQ0JiMkVqVC9aVW1qNUlBemRtUnpUTnBrb1ZGYldOOWlTdGhGNzlSQTNhaXdKdUsralMvMWxPZWpUb2FVb2tGenI3a0tKaCtZbHVkRUNtTGNGTVdENE5XR0dDRTVGSmJveEt3RFZ6a1poQm91c0syVHpnS1Bzb1BPQm1tZVlTQUdTbkhZWlAwaG5IdGErZC9NZ2lrWTNsbGFhQ1JRV1hPWkVvSit3eXNieE5NWm1NYXdkYVJxMWtEb2Ftb3JSQUVmQTFWMEV5UEo2eW5ta3FsRUZtQVpVL3F1ZjRjUzVXZ2lqZkIwZ1JqRUlDd1JJM29taE85Zk1Ba1FQWHNnODh3YWgvQ3gzNzRNQktzeU5ZajBiOHVGeEl1S3A2SWdxMVdGaGNicXNYRTZ2LzJ2N3YrWUNLUUdjcXk2bUE5aWV3Q3BRZEFMVHFaekF3VHphT2NERmFXaEZac3NiWC9hUEJiVjFnQjVTVU5lTjhQZ0ZBMWpzd2ttTVF1WUdqV1ZkaXF5dmhlRVI0OEFJVWVTVUx3U3BVRW5BaHRqa09KeVd1Q2dwMGY0WXhnMEhNbUo2R1hOTUxZRGh4NURSZWdvQ05GMFBMZzZRcVF5RHNCV1dTQ3J3VWRKbFJWK3I1N2pNOEdpMThUWmlQQWlGUnVXNVhMVVU0UnUxQmlZWk9PdlhPUEpSa1ZMaUZoaUhEREZPNGJxTi9yd29CTTBTUkdkU3BvSG9OM0xkcUIyWW12SFAwQXdiRmlRQ2dDUzYvYy9uZ0tpbUlYQWZWV09Hejd3WFpSb1lRL09Ud2NDa3IwTHM3OHZaUWNlWnBMZ0dndlFTd2MyUldPNW1QWXFVZGhHT1ZjT0FnVVU2YVFPWUw3UmlsVS9LVEU1OWpQa0hJYWdKS29wMUk3QWJFclVwNURWZWY3aE1EQTZLTUNjYUxPaDBaZlcxa2dJbDN3eUNwVDZ5NVlCSkg1Q2Nod2dld0RteGc5ZmNMUVJoMFlLbGtva3BNZnVHVm9aQXJXMm9LdGs2dFZpSWtUVldja0RWSSt4QnVEcGFzdXA5aklPQmtDMjRNZjQzVGZvejlrMnlxbDNxU0YxZjB1Q1I2Rmt1V3l6clZ5UzlQUnRHRzB4cGxKaTZzMldjQys0WmNLR1dZU0tsbWtZVU1Cd0dSWU9GSUZycHdYbWt1QVFDbk05azhxSXUxOXZjUnJCejdwSFpra1ljSEFVbEdsVUxMWjVSTzFnTStZT1hJYm04TXFWZzYxaldnSmhNa3c5R0Jxa2t2UWkrc1RGYS9xTU5vbmZnWGpldSthbk5VenJtS1JNTU9TT0pEVk9ybVhBZ0hBQWszelJVaUVQanVzckFFSjdjaDJSRlN4Q2xaNVJRZ1JTZWtOTWw4S28vUURjZXh3TU9MUzg1V2tZU0hUZS9IWnQyZUx6SE9kYXBsbkttVVpZQStwRWl5T3dqdkFjTXBxRFJJSGtjQUhzK2EvWWlFaFRLN05BdFhadG13QXNOUVNNaHduVUlycEdoT1BQQ0RHd1FXbFdlVjVoSUF4anVBTlBJNFJ0bGg2VXpsVERodzR5UlNUS0xpNFN4blIwUWVna3hEQUlDVGRnZktVMjdkdG9GcjVQa3F6NGdCMHUxYURJYTZzdW9aTE9YU2hsdUFRRXNsczE2d0NjdEJ5c0hGQUl1L29MSEY1T1lUZzhVN0VTczhITFM5RkJNdHI3QVpkaU5KeWdhekxJNUVCZk1SemxNclRrVTJRbHQ2Q3ljTGlvRnZGRXpTS1BjdW9JaElTVEgvbzI3aXFCYXd6ZzdtUlRwc09ySjdYQlJMdlFRUTBiVFM3cmI2WnF2NXRTdTNnbUNBekNtV1pzak40MVBoS2V6dVQ4SHpTSE1KQURqZXdSSGppMVcrUGpxaWhkVGw4T1FzZ3V6UUpCUTZZczJuVTBaU2RJZ0JRRTRoZU9DRm9HSkpQYzF6RzZ4UUtTZTVhc2U2cG5veG1TV0xsYmkzRDhuUVE4NGdSMWpmTUNVbnF4ZHFtRXg1dkFPZ1dudXdBL0MxUDAxQlVBcVZhSGhLYXREQjN5UHNuMUlGTE9MTW8wSVJEVVovZmFtd0J5OTE5cE5jSi9tT24vZDYza3FHVi9haVE2b3l5S1ZnZlNLekNvSWo3Y0xZMkZtRjdjQkJoZDJYaEw3bWlyN2UzTjZMbnhNekVRWWRxTnJtMEpBaG5NY0lSY0U1NFdIUEk3L2NSWlZacHJrRUFFOSt0cTg0UXdjNWsvZ29xVlIxRlp5R281Q2JpWEltOCtxVU9YamFwSnp0SjQ2Y1pOMkNJeEFGbDNLdHJ3cE1iT1FZenltRlVxc0dnZExCeVdqaFRGRGFFZElBRlpxVXN1QVIydm9LQU1aT1hrTzFwQXRQQnN1MEkzY0FERjlHbFlPQjZubkZLcnVRcHJVUWZHdkVnT29DeXRUa0tWWkxMVEJnYXdsakdFYnNEaWVXYzJHcXRGSldadFp5N3JFOU5HaFhoUXpyeHJzODRvMU9MOGlRYnQvUmh2amRuYzZSWU05Nnd1SlRYdlBGeDdMVTRyaTJ1YWVmRThNblJRNVNvMXFmZ3hMT2NVTTVRWUJFWmxtTnZFYUtlV1oxbWtzQXdBOTFRRk1vNVlBT2Z4NnN3cEpqVVJhT3dPWklFSjdpeWVTMUhqUXBJSENaZzFReU1rQ2ZpVFpLOFNTWE9rMXdEZ3dUT05FR2JBalBuaE9vMzQrSUNGL29KbU1Fdk1ZVmdEYktKTFYrRkJ1UjRQcWJnTkNHZi9WSEtOeDJtZncwa2JwWXZoQk9pZXhWVGNxaDhyNzZvZGh0aURpekg3SWNGa0pveExSd2d4NkFwVDhHdUZFQmY3V0o0alJjeTJORlNtQzJpV3FuUGxPaHpuS3pJc0FTN2xRQWtBREtUTjVMTjNiMTJ2QTl2UjI0OEFxWC9yYzh5dWpoVTlEU0ZQUnJFeXlEc2Q0U1R4aWVUd0RRck1tQjdRNHZ6amlPTGVsTWYzd2lPV1BucFV6d3RPbVZHNzdDV1BVb2RQTkRIMGdxekNKbUp5SEFuVjl3TVJEVTJWSUluWHdBcTJyRnFYRmdFdHRscjhxT0lMUVdhNFhwK0llNndWcDlsVnJFRG9EUC9IV29Kb09Ed1ljb1lIQnhBNUQyUWk0VzhlOVVjWlFTR2FTcVlDbU9zOVNwNGtmVksvNDJRUHEvZGtUeUkwK043Qk5iSzZDQnFHbkRQc1lRTkVDWFF1TGN0eU5jMUJwWlY0cDViOGRGbmVnakgraGttRlBvVFgrem9yOThaY2RCZXJWMEpHU1N4MDloenpKOTVZZTZsS2VPTmxFTTlLZmJnbmtPYVM0QmdBR003OXlueW5GT25WaEhNSko2SkNaL09zeDlvcE5sZzFmQ3FmVUFLR1dRYk1HTkFqYWl6NFB6OW1mM3NlcXpGWXhyL2RTc3Fac284WG5PcTh4bnl2bWUrQnhrS0o3UGlZZG54STlzNnVuQUxuSmZBa2hRVG5pK2JFSkE4THZuNWRFNlNOMXVCS3VVaDRYUSszS2paM2pEZlFKV1RWWFlVTnJSVmprdWpIQ2xra1VoRWRrdlBiWkF5WjE1UVEvMEtnV3o5SHdWS2tBdDF6WVNVK3A3VURhQldlVjhvaklucGYwb2RxN1JnYU0vOUt2QmIrdzBmb3NHUXB5WXNobWhxVU9STVpHWEVKU0ZyZ200TFZmQ0RJQzVCQUEvdENJckdjd1l5K2s0QmxJWHh5R0gralVYbkRla0xGOWwycWp0RlY3alJuRGlxQUpjVGdCT29LeXJHd3hxcTdzbnR5b3lFTXhaK0N3TDJHV2RpckxtVHg3WEthY0dsM3FuTFFRdEFzQ3lJaCs0aW1jUXVzd0VMMEVBcWtkcHpXb3J2aDhRMWxTY0FZU1UxSUNCeWNhU0lmUFVWL200anF0TXJSZkkvZlNEOE5uWTdmTDlqUTB3cFREQU5TTHJqN2pDd0tRdkZqR0JjV1hreGNmVUU1NmY4L2FOT3NGY25qM24xNEdWNE1FSzBXN3BFRXU5a3BDbi85aTFLVGNOUklFZFZOb0tRWnJKZVM0QmdCWE1GbU40T1l3N29rbkZSM1pZT2pIbE9rZGVZU0tqclppZ2ZidUIxem4rZzFCNGpVVEdJREVnbE1RZjgwcWRYT0NhQjFsQklIZ1pCblhnaU1iRU00NTY4R2h3bUc1K0tPeEZJb2NEbmZOVEJGWHhEb0NQQVBtb2lSK1pvQjN3c2Zwb0Y0QThWUWlaeUlZcXJkMnVRT0NhMFZJdEdEcTRXT1QwWEFFaEFCSkplWkdlUmVlRFUvS0tNelNQZWkxUFphbEFTejBjUEsycTI1dEdhTFcyQWRFRG9GMHNmZVp5Z2RPdHZva25aNi9vT294Vi9QTE4zZTRGL1dTNFh4aytVdFYxd0NHMDZFRS9rVExRbDJLTUsrRXBKdzYrV2FhNUJBRHN6bDFBT21GcW54ekNVanRIbFpra0tTdXJwVVBkSG1RQkxld3E0SXdzUXhGWWlhMTA3U3hqQ3NGd2V4SWVKU0NySjVGRmtjbm9pYXZjZ25JRmdJL0RNMXFjQmU5SFNHbFRLTnBGaGhNc0tuTms0QVQyRGtBTkNQVEJtYis0QVlqdVRIekpRUkM1dVF5NEJ1SEZxV1FocFdJYkJZSXR6NVc5QXFLZ1JFMk5qSXBMbGdHamtRT01Db015OVFzaXNuM1Vwb1ZXb1FhZEFoSWxFZE9sSkZaeWlpaG5wVmo5S0RiZnUwazh1eTRSZWZTYTN3UmRFZjNqcjI5M2IxelhEVUIrS3J6MHIyV05ZR1RTYWgwS1JVZVA1ZFIzenZsY0FvQmZuaWpMTWQ0bkFjUEpkbnVyN2RDV0RSbUlRNmdGdDhUQWV5S1pxVFJiZUkybnRzcTVRbFF4QW1MeURPV1ozYlRBd3c5ZkRuODZNWFdNRGc0T2MwTXdnMXBqOENESGVtV05NbDJOYTNSMzVRZ0U4U21BNnF1dVgwa3RtbHZRaVU4YldKV1FhYmxGckRQYU0yZHBsRXBLUVJQZ1FTcGt3WnNJM1lLeUJGK3BZMVEyMU5DbmdyU0M3QkFlWisxZlhJNlNwYXFjcFY2TU1QdVJQYmtRWWJFdGhUS3RDcjAwVEQyWEtmaUFwS3hPWVB0RnZqTk9lUHpJb1g1YzF0N2ZxNytxOEhOaFAvZkNwaThEZURsb3BKREh1WWNLUlUybnk0Tld6QlErK1ZsTU9PYVI1aElBTk9oam5zbDVaU3pzNjVLakdCc0RpTTdxNVhrODlQMWFpM1VWVlFQUmRwa09SUkYvbnh2MTZCWFhMejNSYU1qei9iU1ZQZFRhNENCQUZWV1BEdTNQcG9HWDdEcVFrS1BleFFZUHFGS1h0cE9QV01FQks0bjJIQUIyaXU3VUY0TUhpazc4TWhEcW80RGI0VVJ5Mndtb2FJR0ZCamxCOUlPTmxJQUZCaXJ4RFZldlhGc24yVlB4ckZpRXhpQm9Lb2d2V0xHRVBrZ0JrYnM0d2cwNURsZmFMeUtON00ydHZoSXArN3JtNE5RVTVXVkZXbGIvOVZYNVgrVXREYkNmL2NTV2RnUG1zRUxCV3lyaFJ4Qks5QzlGN0RRcThVRU9IdmpLMGFCbkJzNG5BSlNKWHpzWUIrZzRTa3AySmdhSitnd28reENpanVKUHdEZ0FTbkxiS2pQeFRDOG5zNkNmK2VKY245QW9kWGZMVEtGTmZ6dE1lS05nejk3S3FwS0VWZ3hwazZpamlrd2V5djZoU0UzWU92bEFwcHdDVXZSQlhSMEVNUWNBOUJRL1BsaVdOUE1JUnBiSEdiSjA1RDJBYUFPdWFOc0txRVNxK2tjeFNOU0h2VEJTckhWb0lJc0JacW5VTVhsMHNqRFRBeW9OcUJBOVp5Q2FwR1lVaHpLaW9uRU5PT1M1YldsY3N4cFFhMlovREhLeHVjL0p5N0VzWUVVWCsydWFPVXllajcyMjNUMzNtbDRITGp4U09aT1RFcktNUU1TNEZRTjk2SjBpZUpKVVREN2FXaHIrMUhEd3pPQTh5d0JRdmM3UFdybVh5UXh5N1hyMGhFQTdHVURKa3pyQUtCY1lzdHNwZktETnEzTFErdFdteWlpMElxTEpncGQyUGJVQmxHS2JyMExUUmxBNHg3VTVyQVNDbW9SZ010UEJVWS9LckFxYURwN0JnUWZiNmc4Y2x3Q3FMOGZGVGpNQ2pTV2doZzdMTFRsTjFKRUlDQUptcFo1bXlBaERaWkticDVBc3VGUktWT0pjcmtpWWhzbVR2TFJKNHdiZHhoQ21WcnlWSjVpalR4QmN5b0tZSE9NMEJUVmk2ZXUzaEFpZGplS04vOTJPU0RVdk1QN1RKYjd1L0M5MTYvcDVjQ2FPM2dQYS9ZUitFb3duQU0rc3RUMmRVNy80dW1uY3JVb3QzSkJ6QUp6eEpRODRxVTNsR1lDekRBQ3BybDZTSW5mS0huZXNqTGR6Yjk5N1dkOTU2eVFRTVVoNm1jbWMrTXFqaXVBU1grR0NLMFBSREZVbEE3WGt6b201b1k2VkFBWUQzY05BQ3IyaXcxUEh5Sm5VTUNWTmQrOVY5ajBBMXd1OGg0M3hLYStzN09DS1VlaE1BUENOd01RcGg4N0I3cFAzQXRBdUNFOTJnWU1jUnBLWWttOEFsNEpwOE1GZkJGVCtoaWRsNjdaWFljdWE4cWpxVXQyN3JRSzdWUWpna1ZOZzhIbEoxK0xOV1lLRks5M2lGRkl0dU9HcTJBYTNIN1Fkc0VxbE91bWJzdW1pMFUrczhpdUtBbWZYRlF6RWMwVlAvLzJrQXNCYXVmMVBqOFlmNHZnYnBaUUxEYmdrZ3pyQnowRmJud283Z0dLZUI0TG5tZnU4R0w3UE9aWDcxZ0QxY29CNWxDVjc0MUJRbFlmQVkwU1BDejF5Rldyb0tXc2dPT2g5aC9YckJ6aHY3eVdRZ1pMWDhJWWxLMjBrYjJFM0EwTDFIVWdLREQ3TllLZkF3VUFEUndCZzlTZFJSbUQvVWhDMVh5NHJRbytnNTRDbWd0dUhPSVpOUUtCNFJNdEFad1M4cmhKTW5DbnpNTk95SnNLS1ZzTmxEWDQrRXdkUHdyZThzWmlQTFhlazlMYU9zSVhBVUppa1JJVlZ3UlBmT0NTSXh6aGdFblVrbElSK0FSM3RYT3E1OVZRaEpZam1HNTdPbzQyMm5OT1lJTHVzbndNK284blBZcThmQmU3KzVVZHZkaTlkMnUwMjlETEE1QXV4MlFoNUhPbGJqeG1hU1phbzRIT2k4T1dFdDQzTUljMWpCMEJuOHltYk84OVc0ZXc3TUM5bDJEOFVrTmM0cTZBWVI1R1V0N2pFai9QVXNSRzFINlNoSXBkT2pFa2ZxM3N6ZzJvOWY3eFloZ2ZWaU82SWlNL3lHVFlNZi8wMUk0VEo0ZDFDMFRzbVVBU0Vhb2lDQVEraVlBT0J3SU5HZ3JuSFFNSCt0YTdJRG5VcURoMVFwdENoQm84UUJWK3FxQnoxbVFCTTlGWGQvbDdUNTE5cm1nWGNDRnZWQ0dKcjNDWitNV2RMRHkzZDNGenVibTdwYTdJcWJHbjdzaTFsdVJ5TXlVOUQ2RzhsYXQ3aUF1WWNQRUNERkNLTWFzQ0R1S09xR2NNNm40dG8yKzhPRGQ4NENLZ0dmdkpEUC9vRlZtdyt2eUY3NWU4dE9lcEhmdjY2YndxaUgySjhVemZobW90QW02VVREQmE1eW1vS2paQVVCMTFiaVRNRTVoTUFtQVdZbzhNRDc1Z0dGUkVoQjNHdGl5b3hoSHRpQ0djVzhoYW1yanF4MG9CY0lDc0FZZ3BJM3lVMko0NDdURWhvZVhlWFNSczMvQUlIamJrUmQveWhVVXNUWGdQTlk0MjZ3bmlRQ1RCT01uQVhuKy9UWnRyQkRvRERPRXZSU1luNktPRmZDQmJJaEhJenlJYVpCQnduQzhqQm5aUGJQRm1QZ3V1RkhHUng0MnRWazM1OWRiazd1NkZKY0VZcm9DYi9paHF3N2pUUnRDVTFkUjkxMHUyYzdicnJteE50bFZlNjZ6ZjN1aHMzQ1FRN0pSRElQdGZoQkp5NWlsWWdjWlNWY0E2Wi9nSXFhaG83NVZUNFc2NVFzZmducTZUZEl0cHZveHdjazRUQXgrVGYwQTJZcytyVUgzMzJadmVoVCs3SUo2eitKRHpNWDBCR1JZTWduUEFSYXVHZjRBczhaOHlIbm5oSmdtM21hVDRCZ1BHQU16aEl5dTkwZzJOblN0UkFib2gyTXpSRkc1NkFpUyt6Q1JvSFhvKzhMeHZOcVUxbWFoRUZwcmNhV25Rc2c0QkJtZ00xQmtYV05vL3FEVHBiWlE4QU1hWElvcXJGTTZsWlZmTVNJSmlvcEoyQ0JNWjdBYU15QTlZdFNxK2M2TWdrMlZkaXFMbHd0T01BMHNBQ1BSblk2cTlxaXg4VGY3bTdUeFA2Z2lZQmcwYjN3Znd1L0UyOUJPUDE2enZkVlUxdzBubmRHYnRmdjViTHp1Q0dkZ0hyMmpJemNhN2VuSFJ2WEYzcHJ0NVlpa0RBNVFIK1owYUVFckpWTXZ6ZjRpVFVkSk5VU0d0NnZDQ24wQ0JMbVRmOGlSSmp4UXFvL2dBdm00czY5cU92K3pYNUNYd1hGZmhXNU8rYnN2a0gvcjlyWHYzeE5YWDRjektNL1A0UFBHMWdxdHRTR1YwNVNPU3BEN25oZUNBMFdXQ2JTWnBQQU5pTG9XdHJUc0FrVmxvbVV2VmdDeGY1WkQ1MHlod2c0VEttY216VlBIa1FHWWthVFZJSFcwaURvc2VRbDUxSDF4TjRZUFNFRnhRMEh1TUZRdWIrM0ZpaGtaV0hHTTBkbHdFTVRqRW9HR1RpZllDK1hCQUNyQ25vSXFCeXFVNlVBNVA0TEpGbnVFSXUyMzArMTE1anhWOWY3aTZlblhUM240dTczbXVTdmFGUjg3SFh0clFLM3VnKytQRk5mUk51VjNmQ3FTbmE2cVI3VkQrVStkNDNyM1ZmOE14Rzk4UjlXdjBWQ0ZZVkJNN3BlUDNxVXZmNmxhWHVtcEEzZEduQVBRSi9qUWJqbGFKZlNtQ1FWa1pqTTdRb0dRWnNkYVowVUlJU0VzWWM5RlFrOGp5QURPdkVUYjhOUGVHRC9mcnhuKzZjYlAvZW43N1dmVXkvQkx5aFM0S29nMytwRTM5dGE5RFp6WkVpQ0FSc3hPaVVGSExkQS9BUUYzaXdZYVA2eHluT0l3RG9VNjRKdndaZW94K2hNRDlQUDRyUzZTQThraE91ZnNUWUNFbzZQTHhJaytTQkpaaWNnVlRMS0ZadzVIM3FDd25SZmc1Q3VocCtUeXdZVklUdVEyWEdMRnQ5SmxOT3hsd0ZCampxRkRrSXBBN0plaUtud0R2Q1l3dVRQWkNSVzZZQ2dtL0VxZlVjZ2t3T3k2SjlzNGJjaXJPQ3RrTHlnb21neGZVOHEvNlo5UlZ0OVplNkJ5OW9CZGR5djZwMnoybjcrL0xsN2U3di9zeTE3c2MrZEVQYmUvR1htNERZUkxxNVBlays4c3B1OSt6TE43ci83ZC9lN0w3d0hldmRsMzcybWU0aFZiNnFRUERveFFnRW43eTAzRjBpRUNoeTdIRi9RTVBkRTFxRzkzbkl4Tjd3ZTJrRUh6aGxiMUFvTk1DR1RwRlVVY2xYMklmK29DOUVVSWZ4VVNzM09UZjBnZi85NXlmYTJlaXlSN2lQZkhLcit5Y2Z2S2I3SU1YWGRHNlJtYjR2bEI2UC9tTER2L1FYcWRjbnloNERBaHRwOHRiczB6d0NnSzYzZDNkaVJaUkJzcnczOG5nR01qbVFNZkRpMktPUUU2ZmNFeXFyTkdWa21DMXo4VXdMVHRtQmd6WlJvdFN6UGlxU2tKYzJBcnZqaFVrZnhLN0FVMVRZekl0TjFGZGw2dm5RaVR4M0FFR0VJUTdmL1dmMktRaDRGZEtBZEU0OUJxZHl5cGtqaTVhRXFUaEExckpsalFhdWFWbjFHZlFQbnRlS0xrYnVlTVA4VC8vTnRlNzdOZmw1N3AwSnNLN1YzckpGZFp1d0tTM3pmS3dTay9xZi85eE5mVlMyMWIzL1BSdmRiL3owalc1WEFXS2lkalllN3JwUGFrbDk5ZEpxZCtXYWRnUGFCL0JPUGI5dW04cFdGTzlnQ0Foa3FoUUdnRkFLSE5BUUQ0WVVlZ1E4T2t0T3VDVjhFYjFBQzlGUEs3S0J5WC9mT2ZtQjFaOEFwVm42UC8zZlY3cnJXL0tUNkZ3aSthL2tDQXhwMFZhMjdoeTlFekVFQjRyQmdsN3EwRStkQUtBSW9EQXZtN0x6Y0g3QzJIcUlsT3hNSGhJK010ektLa3hrT2VHenpjUlJqdnNQWlRDcERJMlQ4d0RCREJMNjFyYXpJN01DNVFLVEpUa0ZVSStnd29UTVlNRFF6b0FRZkZHVGVZMHNkTXhCemJZL0QzL3pyNVFOcTdXNEpDcURrYlo4cEJZNUpQdWM5b0lhT0cvM05hRFBhT0t6Nmora1ZmOCtMWGVyVXZ5Q2J2WTkrL0pXOTNkKy9ITDNieit4cld0N0pyN0NSUm5zREZaTGFYTGtPd25IemNJcnVqL3dYVDkrdmZ0L0ZRaSs2dGVlN1o1NlVQY0NkTW53K0gyaWEzZng4dXZMdWo4dzBZM0NIYjFYTDE2dTZVc2RPL1gvYis5c2dDdzdydnArNTgzMzU4NStTR3ZKdHJCazdFaE9RRFlRd0NUQlpRcENnZ1BZVUU1VmtncEpwWkpLa1pTTFZFd3FUaWpLVUs3WUlWUkNnWTBEd1NZQ2JGbUlzdVVQWkRuSXNtVFpzaTFMU0VMU3JsYUxySlYycFYzdGgzWjNkcjduemN6TC8zZTZ6NzM5N3J6NTNQZG1aK3piTTMxUDkrbnUwNmRQOXpuZHQyL2YrMmc3MUlKOEFCYU5WMjlKZ2ZlOHhzRWFGNWNIV1dKWWN2VVZVRkQrV25hVlZpd29QNnVnVzZUOFQ3OVUxMjJPem1GYSsxV3lEQ08xSUYrbDAxY3hRbitsZmU1NUFnZWhKZURNYTFHa1lHZ3FHVHJrdG1zRm9HNk5MbmFnSzVPajE0SjVXYy9rQ0VHRVpWRmRnTG5TZUJpOGU4cDdHT2p4Q0FIQjVWUXRTc3o1dGFGQ1daQnlCaFFQaWxEZ2JFbW5SRE4wZ3Jic1Y0ME1iQjdWTVhDZ1liT0lEeUtLV3dONFlTWUVnVGI3c3dsSVdTQ1ZVVmhlMXh3U0JoT3hxMElycDh3TTlqNWRiTmJYSnRjNHM1MlVmMGpyWDVhNzNUcUU4TG5IWnJKUHljL3FjUjdQdTJrbzFWc3RGallPckQyd1lva0FlYkd1UUVOdnpLRllEYjAwczVUOXQ3dW1zcDk3VTMvMkV6Y05aZ3VhU2NlMXRCNjRTbDczMCtjbnU3THBXVWw2UVovWDBtcUFweDQ0ZjBJUXduYlZKZFJMelByVUF3YVROSXUzdnZqeW4vTDBCK2Y4T2RTRElSd2Y2YzRPeWtDSnZXeE15di9GcDJheUx6dzVxNW0vTUg2Qmh5RHY1aXYxRlR3d0J1Z3VuSStqRUF1NVRFNFJRVGJrcTZWUzNGWHhuSjJCblRZQW9XM0w5WG9oamxRMEcydFVXcFlTSnA4SVcxR2dVbGNnSHh4U1BVTTYzaGhUcEJtbTFJcGFMUS8xQ1VVNGxBbDgwTEdXMHpNNUNmSUtSeGtHQUIwUGRCck1CRll1UXNJTVNPdDhoU21icmdMWVNMS1ZpeE5RT293dzhCejZsaFJKNE11UThneDBqQkd6UG9ONVVMdjJJM3F1dFYvTGZYYjUyZVFiMWFnNG8zdjlXeDZZeWg0OVViZFozNVFmcWlydk5HQ1dQNE0wZ0hBWkdCTVlQbTR2Tkx1TGlZODlPSjg5SldQd3o3VWEyRHNzU1VnNDErNlYwZW52eXM1TmFHOUFHNFV6V2czTTF6VU54dHVDUUJoaWNwSlREQkV4RklEbGUrR0tIQVhPUXlHZlh4RXB1LzNJWTBqUCtmYU4xVXo1dFJqSzlrajVIMzV1UHZ2amIwemJoaUJIZ1RIYXdYQkhZeUJja0VSeHBYYVRUYXd5RFRzWEtTVGR4b1I0QWFybE1vL1d1TUJtbXJtTjRVNFpnQ2JwajQ1azgvM2pzdktxYlVFYlJ3djFibGwzbXJsRlo1MnRza0I1QmphVEV4dFNDcG9Ea29iSGVkamk0Qk9jWmRqQXhXbDVqMENqVlJnY3lrNmlLMzBPWXhsTVQ0MkJUQjRsaGdGVjNJa3kyeHZQeWcrMHg0QmtWdGlXbFFxRFkvUFBsNWJjTklhNk5ad0lHUEdRbndUcVlLQnovODdPOWpDenZoU2ZlLzBoOVkwMjZhV2tPdDkrdkpIZDhVU21lLzNoN0JWWE1jZ0RZUU9LRUUrOVVrTWVhekN4a2xNREVBY1hiOU8zTGpXeTMvbGFscjM5YjJYWm02N1ZJMFBOZC92RXdKQVU3cHdNd1lYSm5teFNxNEU1clFZVzRpYWhHVUFqQkNrUHdKVzdpRk0wTndZRkttUktzcU4wR2pJMjY3T3NIeG5zenZhUGRkbXluNzJQY2NuaThPa3N1L1V4UFFrWjIyc3ZBVm03SlhPTWFBajdLcTZRaVlraDFoT0JFcDNIMW5CSSt5RjdkTHV4Unl1d01mbUZtV3krZGM3MllqdGxBSnE0bExyUGQydFp5WkxUb0N3K3d0K3E4OW1Vdm1WQWhYZTBDMnFPdDhFV0I0Q0hIWkk3RFJlbDF3N0J0WkYwOWhVaGJuaGRUUEVoa1dja1V1UUo3eEpFQlNXL0RkVmd1TndrVXBUQlRqdWRSek1JY2ZsdlMxY3BOd3BOUGd3Sks0UWcwMERMNVF2a3hDQXpQb2Q1bU1tWjlYbTBoK0tQU2VsWTVqTHJuNXZSN1B5WGpleXhGNVZmSFRVa1JXU2dpMFN6d2h2ZkRQeVFadWtFaWJkeTRnOFowUllja1BmcFp6VEgvY2tqV1hib3BTejdSemRKNFhUZndhZlByOUhTbTBlRzV5N1ZiRFV3cXkvdXpHazFZS2NKSlJTT0dydUNCNXFSTUl5VW5aSTh0NVZSSEQ3aFBaeHhrRHhrRE1lMENqcWdldmRxRmRTdlBNejhmL2xDSS92NEk3b1YwVE9Cc09HcHNwS2xsWSt3S2F5NlRRYWlEU2ZSL3JiaXFzeWx5UU9ab0IvQWhlV2wxQUI0QXltWGhsZlEyU3lpa3dZZ1ovVEMrWVc1UG5YdS9KUzhPcjJ1emx6Mkc3eE5jQXpCY0xSV2dVaWQrMFBPbmZmcUhuTnhzVS9DRG1wRXNubGRBdFFnakFqYlVDT2R1RGwxbDRWemhDZXNnSlpEV3U2SzdpWG9jSnpEd0VXSU93Nlllc3FTejNCaXhsNFVVb1JCaEdKN0czbjhCODRITURNL2hleWJBQnJKRG9VeVdyYWFVQWlEeTNQc3NHUGZyVm0vS3h2VmxqNnpQb3F2QllEZDczTXMrUXVIWnJOUFB6YW56MXVGR1JFYVZPcEwvaEJ0amxzNk5lcWZSVEFEdnFXTFFySlptM1lxVHI4Rm4yWDNuRzlrRHovVHlINzI1cjdzTGEvcjArTk85YUptMzhGOVdvVm8zSEJ1WUdxMnBzZU9PbStnc2NQaEk3czFrREdBcHZkblhyZlZGeXJsbWh0RHRkY1YzL1krdE84d3JDVS96L2paK0dRVkpMdG9LOVU3SHAzTzduZ01IUXl2Lzdvc1RMWVNCcmNDaFd5UVFUU1dsRUJZY2k0UDZnY1RzSmEwNHJLZ3poalFpUzQxTjV2aUJPWGt3dHlLVERTM3phNlRCZ0JXVGY3MStiblpiaW0rVG9GbVMxcnFMY1dkM3EyMUpkcCtVYWJ6R1UxTDhzdWlpWEhCV2FYQWtHeHhEMXNSWFloYlFnRVVXcXVMbEJ3TDJCS2NxT1VYUHlvR3VVQTBvRkZncU5rc0VNTmt3WkVYQTJMbi8xV1k4dWJCUjIvOEtvekRWZzVybHVJOTlFYWNncm9FYlRCcVJQT0JDc0pzWW5GTHdHeVA0dnVPUFJ0c0hOL2xKQnNuK1ZCOFBEdjB6NXhaeWo3MjlVdlpZWDNVZ2hrUkdoaVlZSXpnTFhweGx2TVptWFNlWVpyYkR4VTEvbzNwZUtHdGVKZU5LejFZd3VBNVVzeWp4VDk4WURaNzhOaEM5czd2Rzh4ZWQzVlBOcU94d2dHaVVTMVJNRXlYWm1wMmtwQmp4ZmEwUUgyT0lXQUNDTzhZZUYwQk9uKzB3WXloR0tTTmZYRVZOQ3A1N0pVeFpJZGZpeDNiN0x1Z3d3cS85N1dwN0J2UHp0dUtDWGtzNlVNc0xnZUVnT3oxaW11Tzh6Ujc3S3FtSWg0WGhMV2QrRHB1UUFMazZJOTV0UnVkaVVXY2hNTjFLRzB1dWQwR29DV1RqZnI4dEN1Y0NVZlNDWEJ6ekhwdWxDZXRpRGpQbkhuY1pQVW9JM3FDSTE4Y1p4WnBpdWRjUkdyTndNbzM4eGxpYnRuSlFFdnlPalU0aklUVEVXUHdoa3NOUVVwVGJCc1g0SUlQcHdXZERuQlpTOUFEZXdaTXlURXNZYUNoOUpxRjJKVFNJQ1hNSGdodjZUSEllL1dNZmtBS3psSWFwVWZaR2VUTWN0cmt0bzlZM1B0c0xYdncyYVhzbkQ1cVlXKzBNYmo1czBIZUdzSmtrVWZNQllTdEFPQy83QnpIb2dYaFFCdkRUYnVnRTBJeUFsckJZUWdPbjF6TzNuOTZLbnZ6RGIzWjI3NW5JSHZsZUhjMks0WGdubnlQREFGR1lXcXVLNXVSbjVQQlgxQjhVWVlnR0FGVkFXRmtwRDlWWlRLeld5QmtJajhnWlVjbUhFOGVqaklCc2dxNi8rbTU3UGFIcDdOelV3MTdNZ0t2WVNVVVpudkNablFoTEorbkI0bFkwMDAyZ1lVOGJvRjFMZ3hYdkZnMHVMdzRQNjJvWXJTbWM2N2RCZ0JPbldHSFhZMjVTOVBjME5JYWQ2NFlIdDhLaEFZZERsMVdGM1FjbFM0cHJOdGRNd0k2Z1dET2pZQXhKVzBNT1pWa2lJSXppK1pOS0JwVDVQQXlrYTZBcGVuaXZKQUNuVERBWTdvdzVHdnBsVG1PS1lNYVpaQXd4NHlBU1hqTjFVTjJuNzhvVGVLV3dLajdJRlJibWVHNGYrUkxOWGlVWDRmNTdLTVZmTGhpU0hHWSt0YVpoZXp1dzdQWlk3cS9IUmdaVjMxNkRDaGhtZExEc1RGWURHN0RSK1pDSHFvT2l1QnRMTGdOZkxtQkxQbzRHalZsWk5ZM09pb2M3MlJNSnRCQ1FnUDZ5aVlydXZ1ZXJtZmZQRmJQZnZBMXZkbVAzZGlmWFgrZ0IvWXpMUUpzdjJKQnkyUTlLTEFqeUp3K1hOUXN6UmlnRDFKbk0zK1VDL0pnSTFvTElqT0dLRDRqNFlrWEZyTFA2RkhuSVoxellQWFV5aGk2NHVmeVFGYjZzMzZJb1dEbFErMUYyMU51Vmc4SHVoZ3NVVlFiRnVlbWRNUGNlU2R4ZE1SNU54aGNuSnVleEFDNGF4NHdqdDA0TktKZWczV0NPbDVUNDdOblF5VjFLVDFLd01tMmVUMTFjRWNSUDJCaTZwZ1Fjbkx3RmxUVlM2MFBLUnM2UEZMeEJqWVJqVWdCTXhTQ2xBRmI5Z3dDWmkzd0dJQ2U1Ym5zbWtHZG1kY1JPbFlEeTEzZFlheDVQc0d3eE1Yd2FZbXJzcnBqc01FT3JmTmExajcwekh6MlZmbWpweGQxRDYwWlVDZHdVQWllTnZ2Z1JySHRMeW80ZzlKd0FuQVQwcGlod3FhanFnbE1LcDY2bFlNL3BLTnMwS0NYSU0yM0RxekhJbjBrajJNV0hOUXluYytnMzNlMG5uM3RXL1hzOVZkM1p6L3kzYjNaOTc2cU45dXZnd3FzaE13QXFDMnMvclFJTU1Qb1cwdE9FbHA2NkdHZWxROXRabktZME9uREI1NWJ5TzQ3TXBjZGtVd1lGd05tQ09FdHROWGw0Zkp4NVRlNXFCM0lJYlFJcnEzRzBJUVl6SEVrcitISWJuMnVBSkE5bllXWlNRd0FTWWdvQ0VhQmRqdUpvK091YTNucXBTa05ldTdRdFRDVlUzTU1iclpxbFd1U1JCS2hVeDg3d1hGU3ZYbW03Wk1oUFZMaFRiU1ptU0JReStvenYwMVJ2Z2FJbklRTVJ0L0pwanc2cmhYTDVMTjBEUnlnSzRDRlk1cm5jWnFtL0lxRU9JTXBoRzNvS2RMSDdDUUM1L1NUVS9jZW1zNWV0VSszQVdNTjdjd3Y2LzUrT1c1Q2FRaHlDOENBWmVTSUdrdmhHVzJXOFVNVno1NWR6QTY5V00vKytreGRiK3lGUjQxOHVwcmJBVjd4RFlNT3FBcWhnZWNQdnNJbHg4RW9PUGkwL1lISTcrYU1KZFF4SUx3a0JhM0FFOHBzMVVGYkh1dG1yMVZMQURXZEhXRFZjUGpVVXZia2k0dlorTkNjOWdlNnM1dXU3Y2x1MEtyZ3FsRzlwYWpOVFc1L3pCbUJFUFFyOU5sQVBIdHBLVHNtbVR5cEY1aU9hTFovZVRyY3gvTjBCR1htSDFuQ2pQMEI1UzNOTUdTaEhtUVdvRiticWxVazVJc2NrR2tOUnpKOVljdC9RZjNYRnk2ZW1WeWpTRk4xYStSYk42bVRCZ0FtOFYzekYxL1FDbUI1VHN2TjN0RERVcFF0TkNFdGduSVljYUE4RzJTSGRQOTRWQWRNYnJwV1gyNlJJUmpUN3U2MDdxVG1aQkRJaXl2cURjcWFJSlJLVnhUT3l4U1kxaUh5R2JWWUlNU0ZFemxEUmJ5Uno4TkJCdFNJRDQveFFqdnNtM1BTTk83WjczNWlPcnZsTHlhem1tYTlNYjFRczNla1I1NW4rT0hESEJnQWxKQlZEM3NnRi9Ycy9LSWU1L0Y2THJ2bHRpa28yZkNXbnYxUm1VSmhWZ3M4Y2hzQXI0VUJzRWpBS1M4S2orS25nem9vaFhCcWo5bFR5SzdqeUl1RERsejc3TW5nZHlOQWF0RmJHQXNreTdzSEZGYTc5Q3U4RHorL2FMY0hQQzRia1pERzlRanYxVmVQYXEramxpM016YWhMMWZseVRBWXplb1NJOGJzZ1paK1FiSGhya1JvWUwrRmRmbkZEYzhFcTRISWdRTjBtazRDMHNHV3ozTmJqRnFLdVZBNjB5N3ZaMDRDck9lcFFVNElSa0tCcmplVzVpYlBIZlFYZ3BCeXVSbVpMK0U0YUFCZ3lwdXNubjVpU0FkQnA3OW9vd3Nmak50dWlGUy9weEprY1dneFFYdEw0K0lQMTdBTS9wN1Bsc3A4Y3FKalNMaS8zaG5YZENnVGxqNTJUVzRMbXpncE1iWll6MmhKYXhWakJRYUVZOERIdStCUXFZNWhsMUFZR3BWWXRROXFnWWx2OW9nYnZIMzFaRGRIYWRWbEtlbkcyeXhUODJEa0thV1dJNXFoQ0g2UW9OYmNPQVdxbTE2Z3lkc2dqa2pqeUJzaktJWkFJeGlEUXlmUEVNcm55eDNKUVJOYXA4M2FtdVBYQ0JVZkJES0FBckhYaGpxcENENUFyck5TSWs1UE53bTVWYUhIMUlUL0x6YmY1SmxXWWhjejU4M1gxdDdROE91aDVPekYwN0kyQU03bFpIdHBkeEUwK1FnVGxqM2d5eUR2UHlBdFhZQ3lhOTNmUjJ3b3BhMmhMeU5QcUNyV3drWXRoRXQzRzh2VHA1eDVQRGNCNkpGcVIzUkN1MHdiQW1KZzUvdlVaUGZpL3FKdnlWNENnd1NiTVhBa3QyNll1Wm5FcElkRkFEd254aHRiZGh4ZXpINzhKMzVOcE1zajI2bGFBKzF6V1V4eXVaS1loYzFCWUl0RWx3VUF4NEIxTkhlczdEVXd2NEpsVkVKU1Y5elJubUVHbE1NdDNOdkJRL0RGdGJ1bmxhVnVtLzlhZGw3Sm45WGl1aXh0WHk2djgrWkpmUTFRNEc0d3hqVXJ5UVdrVm1wUkJHaDVvRVYzTlNJQTNHdEtjUEUva1NRZ0dMNHFBd2dmV0F6M3BvRzNnUVcybHMwcEthRzk0Z1NZWG5wV1A5WWFBSFdoU3g5cEJwNERPK1hJelFMOFJEbi9LcFB3OHFrTkVHRC9iTzlDMys1eGpCUklYNVFHR291RmlFWWtoeG92MkIyTWdQUExWbjhzakVMVFNwdlEyRHdWa3ZNSjhjSXpUdFJ6SjhDM2JIL1p4alBXbGk2ZWUxdG5qbFc0ZGFpc0xySWRwcHdHQU9Wb09USDAyZituc1hHT3BmcmFydC85R0dBcmlKTFJKSjBuVC9UaG1DNXhWR0hzZ0RJMnU3QU9mbjh1dTFiR3ltNjdobTNSNmZLUmJBV2FCR2QwS1lBellLRUpSdzRaZ29CUEp4c2hXQWR3ME84TkVOTURqUUp1WjFPRjhQWWVQVGZLMVdiN3d3KzcwN1EvT1pCKzlkOUtVSHdOaGc5Q1ZYek1aTTBZWW9ERU5xWG85SHFDK2x1RmdPRWlDaDNTQWh6QnRDSW9mU1ZvY3JEdU1nTHNROU1vZG0wRHJuNlpjU1NMQjBLdGMrYjBEK2hacThHZjlKQmlNRUZoTVFPanBZQlRBaGJ3b2tzMms5c3d4NEMyeGRHa2xFOGRaKzExbWdsQUpWM2dJb1RCNUJLS1dIbVdSaUNRMG9GVHZhbEdNTVh0WTVqRUEwcFdKMDZmOUpDQmszYTlHWXN2NGRocUExWmlBK1hxalBuMnFhM0RFQk9vWjE3T09ucThNWFJwcCtSRFdzMTRKOG1VOUR2eWxUOHhtNzN2N1FQYm0xK3JWVXkzL2VmN2RKMFBBZlNHZWxRQTc3R1VIYlRvVnVLcHJrYmpxY0lzSk5sQ2NvQ0lvbmoraTBqSDA4TjA1OGNNZ3VPWCs2ZXo5bjcxb3kvNmFNdm1nREVwZmJQbzUzb2FsNkRuTWh5eVZ5aFg0UEVVMHd5MkEweUJGVlVlbkVrYVBhQ0NDZk5Gam1vNlBwTWtRNkZ0SWx4YXlDVWxlb3NpUWl0LzdEd0xJSnB6dWs2cWhoQ3BDM1VENGdnTFV3bXFBY05oTUpJME5UZnN3YXFoMDVaV0NjaXRrSWp3NGFCajFHQmNxNUxaNERFZCs0TU41Q1NuRjFSS0lic0Q1N0E5a01saWVuenVwWXNuenF3MFEyV0tXVGhrQWwwME9sK2VtbnU4Wk8yaHNJbVNHR3grRDJwVFRLQWhXMzdvb0ZxV0hxS1p3SEgwOXE4ODF2K3ZqTTlrLytjSGU3Si8rY0g5MlVHOTQ2UlJwcGx2R1RJK05iUlhBKzBpK1pHK21VTkM2M0JEY2xSMEQzQTBBQm92SGRpZ2Y3NXAvK0l0VDJWMlB6V1kxV1FJK1N1RUtDaXdmUDAzVHFJTjQ0WHd3Qnd5RE93eG00cUpGTktKSW8yUTRZQlI0U1RJSEFwU0tRZ0tFWUN6cENYbk8xUUxxdjF6UVRxR2NGMDdnSVR3cHNGeEM1YmNkUXBpQk1KNkwwZUF5Tlpsb0tXRHRLU29MTFF5azh3cFRtVmc1cFlUNmdqRk01VUhld0hFbzdrMEdGL0NibFVYT2h0M0NwQ3VBK2RtSjR6blpzTmhOcXk0S3RpSFVLUU1BYXk0YllGZjkwdW5uZWc2ODFqcUdSQk9vTFEySmJjWloxK1lGdkNPc00zT3NsRXJLdytiZlIrNWYwRHZ0QzlsYmIrekozcXpueU5jZjBHTWpuWWZuNVE2YlVaTXlIbHhOMmpaK1l2V3I1WEVhcGJIbWFJT1U1UWdyUjFwZjBHTytwL1ZJNmt0UHpXVmZlWHBlNzhQcnZRWlpoRlM1N2NTZnROVnZCVmd5bXJKSDZHMUhvWFBGVFJob1RsZkgySFFhaklBWkFnWjN6TThTM0p5WWRGeEFwRmZ5aEh3bWg5VXpwb1ZpT05LM1dHc3BoajROU3VnZmxLWStqS1JYWlhsRXlxblI5bURVYUZmQWVydXRLcy9ZeEFWeWpJaElpWGhham1TTHcycWUxOHM0RExrMkw0dFEzbDdVWWhVb3o5bUkrUXRuajBYS1J0SnJFU3pIazZTdEJUdHBBT0FJaHZIZEM2Y1BQemR3M1k4c1NzQlN6YTA3Vi9pVWdtMGFSZGxBTzBoSkcyc2FNVU5TSmg0QjNmcU5sWWxHOVFBQUdDOUpSRUZVaGV3MnZZYytyS09nSEkwZDF2MjJiUnlwUUZGR0pVUGhsTHlGZVJZOU5EU1VEUTRPNm15QlBwQXhPeHVVY0VYT3RSSGNldkNzbm1Pc2s5cTludEFqdTFtV0pYSWMzKzNuMko2RTVFcmViQWdZc0lVbm54bUNXR1ZUT09JTUtKODdDMUd1YVRTSGRCUXNkYTFremR5TWMwVk04Mjh1TEE2TUNHMWZSZWhLWVM2M2o0WmFubkQvYi9YRVR2T1NOQkVVK2YwZVBlVXh0TkJLaGt0WkpwUnV5a1FFbytNMUtGWUVJNkdRSjYwbnFXSGRvSlhXeFc0QnBmd2NYdFBEbmNWekx4NStUb1ZKNWk2Sld0MHIyRjdYYmdNQW96RHVERHVzVFIyNTgrVFk5LzNMbDd0cVBRZkpFR2FlbUZOZzQ4N0poeExGUmw0WUhNWUFXWENSRzU3NURtbFp5R2xCbm8yZm1kVHljc0pmSUZFbSt5ZHpMQk5DOFJyd0dJRGhrVVkyb3EvbVRPb3J1RFA2cGxXcWNFMUYxb3lJdWZCdk1tQjI1M3g2d0hsYVVPeFUyVmZNL2lvUXhuQlN4amtXcW5DRnFqczZ0dFE2S3VCUVJyR3djb1FYWkpMY0lOZk1tcFJhUHdnSGVMaHl6cHBMc2Z3UFN1MzVTRGVHN2RhQW1MWERTT2tTbGR0d0pLNXdMV1NTRXlCektHa2JuYXNTSVNFa1hvNHNtS1RzM1EzQllBQVdYLzdyYi80NWV3QllXcDVudGhhS0V0cmgybTBBa0FnTU95UnMvdUtoVDErNFpuSDJXSzEvOUdDdzFuU0NaOXRrVXhLVDY5S0JGbmVFcHBRUlNUMWhvMGtiUTZTcVJ6bExZTC9RYTZNcTNFT2kzTGxUT0lubEhKS0hNK0o4TUdOQkpudEpmck1HSUcwdFlSK29JV2lZbkdhVDhxc2h6WEVyWWZLTFl4MWkrYXdjS1Bud0pLKzdtRWZ5QzMrT2o5RHdKWnhIaTRvYzAxNlk5R21aY05vZlJhdThsVVVxR0ZZQTRkRmltVXFJZTZraTFlVzJNb1U4WVpWUzVNNURiWkFIblBNSUU4WEhjd0NzSVIwNWRPOGQ1Mk05clZZQVJZTnpaclllYUxjQktITUNzOTZJdWFXNWlTZTZoMFovR0ZFalB3YmhNZ2VmdCtBZzNDUUpHN3htQWtRMU9NWVVadFR6RnBCT1Z3eGxCNmt3d0M1VzJHSmdjb2NCWU04QWkwMm4rWVpjbm1HVmdQT3lNam1tQ0lSUUNKaGlFclFCcHBnZ3F5VUVaampEczRJeUpBbjZEL3pTMXVCSVMxMFJiNXF0U3Mya0p6eW53NXlLQ1NxUGJVc0E5a29zTnRVYjJvTEVtdDFLVEhONmlCV2xYQ1psRzBUZGJGT1RzOGdkU2llN21SR3hOY0IzQ1ZCK2JnTllDZFl2VER3aFN1VkhnRnNqdm9GUzdUWUF5QXhaZWQ4NVpHelZGbDcrMXFORDQ2OWlMQWVoS3VBWk5zQnJrWVZDY2lzNlJSZzYwMjRHbE1pWXRUeFdIM1hGUDJVS3R3NkNsc0VLV2VaSU9sUmcxNERCQUFURmx3RVEzOTNzTkpzU0psblhEVnBsSzNJRk1uSFlLaEo0Rm94OFUwOVJGL2VsdENYUTRvb1A4WUJiVVVFWmdWeThvV2s0NWlPcHJBeGxFaDJQUi80MjJLSW9EYmphYUltVkxjaGxVa295ZVZ3ZTZSTEZFTVZnczFuTmkxc1lBUjREbmo5MVROOUlVbmNXbnN4UkdnVGI2OXB0QU1yY3BRMnBUVDk5NTVPRDEvMjlLYzJlSXd4dVpqWWI3bTJhWFh5NWhwcEQyWmI5cWloOGV5L2czQXpBS0t1QVVMWFM0cmhaeVFybDZJSHdyQm1lN2JDSjd0MExwYlFzRzdqRVNtSk9aRkM0b1BERVRlRmh5TklkSCtLbS9MRWd5Y1JOV3kxdm9CWTREdUd0WEkzVTVSTFpTc1dYVVFhZUV4RmNCcVdWUlhPNmJaUUpwTUlKUnA1SWhkZTN1K3JMVTg4K2RPZVRTc0kyYUpzNFh6MHJhSU82alJ4QU1wdy9DYUgyWG1IVVBiTy9yUzdQUHZqQkYvYS85YjFIYW4zRFA4QVlSdm41QzFtM3dFQVVSOTVCT1lsQUV4TUFiYkpaUFdiaWkvcHMvYUZvMHg1QVRpeVU4MkdGWVdEWmJRWUFxT09tVVEveldqY2FnSmZBVTFHaU1DWml3UDRESTZHT1psd29GVnJuRk5MWks1VDBsQUNqcVBJSWVTaGp2am5yem80MU5TU3dhdTBGTHgrM2RqYlVoaGFraW5LdGhGaWtYbjVJbFljdk5vV25VWVAyL3NmY1U5KzQ0N2RmRUhGcWp5M0tJWFU2bm5CYlhDZFdBRENlaW85NE1BSnpjN05MazZjZjZMdjZoaDhJaWhTVXF0V0p2SzIyanNwdy9vakpURXdxTm9WSnN6MkF5R1pnMWt1RzhselRoaEF1RElDK3ZxTjM4amRyQUx5R1ZEaWhOcGdLSWE3QldDWHhwb3FVS2tLYlhhSW41RU5Wb2tHbndGTnFQSXBhZDFmSVpic1pybE9ackNpM0ZZSXJpS3lPb0c2K1ArQWZic0VBekowKzg4RGNIRyt3bVBQdWdaT09jVlBzRzhWYTJ3aWM4YUQ4Y1Q5bDl2aFh2Nnl2Tnl4aEFCalh4V2JXRm12MldnU1pwZkhGZ0ViTWVOVmpvUmlQOWJKOERnWkNWeTNwN1hVeW1JcmVadVZTM1BuMlBKdUJ0clJQNklXeTRWWUNQdURIbHZUR2N1QXRQNWlqTkc4TDdURWprTFI5SzBNRUdvV3NvTHA3M1c1ckM4dC9QZ1hPdHhuNGRhVGFVbVBweEZQU2pUQlVYV2U4aDcxamlMZlZkV0lGa0RMb0RmQUcxYzcrdjE5K1l1d05QLzlFZDkvd0cvbDBGd1lBeGVCVHo1dDFHeTNoZXdPMko2QksyREN6c3VoNlFtVGx3cnpnaUd6b0xub0l2OEY0Rk9sYkQwRTBPSi9WWXpXbThsUUlqNTdtZVlId2xMQnZrWUphbXJNNWJQc2NTVUdMTjJmWlZiRzB6VDRKN1BRRzhFaVpsNy93STNwSHBhcysrL2dYUC9wdW5nRFFITmNYNElwdWJtZmJPbVVBZkhnNTgzbUQ5R2JnZFAzc2tVLzF2ZnI3Mzhoc2FtOXdhZllOUno2OTJPYWFtQTRBS3huSnJNQ2pUTW9ROEp3MWwzUVZLWXpBeWhJcEo2U0dsUVRZdGZPbTVUWVNOajRpMWNCbFVZcWFuTWRjUXFYcUhlK3dLTDB5UkI2ODBWUmdJMlZXVXRsWkdOcXlRa1k3aThXY0c1NGlEZXZFSjZkUitTRVVQbEI2NmJtam41dzRjNFp2QU9CNCtsanVsbkxjTWw3dXBWTUd3UG1DYWZjMEN0OTM1djRQM1BYS2Q5NzJpOTNkUGRmd0c2Z3NoK3hUMUZ0WUJYaEZtNGVheGFOSVU4bW00WlUwWGV0TUpWY21id0hqRkoyWDlleUs1eThQanh5L0FSN1MyeVRLNVhWdm9PeE96NElSMk1udFlYenh3eXg4bWRobWY3Ny9VRjg4OWVYYjN2OEZKZW1Cb0wwRm1FK1lpdnVRcEtzOHJHQjdYQ2YzQUp4RG1QWUdtV1diZVBLVHArb1hqLzFaTi9jK2FsWllDUlJ6cXhlOExFaXQ2L2xZQVpKMUR4ZnVIZWN3WmpmZ3VNMUNwKzNReStlMDErT1o5RFk0cTlmcmFnTzlLMDBpWFFGY2FWN1dxcDhYZi9oMEdlK2pqR2dGc0VkZnJKbysrL3p0VDl6N1p5ZFZqaDVCUjJ4eFdxTFRwcDV2cHNvNDdLVHpJUWFrVVRTTzg4MjFsKy83NzdmcFlQNFp2dHpMYlVENFNLV0daVnJpY3NLcVpMT3VYRjI1UEVxRDg2Vm1pRzN1dWw0ZEc2SldKcktGdU4wcnF6S0t0azNtVytDakhYWFRIMTUxSG5ERURvT0Rlam1OSHlSaDJjODNLN3VYbHM1OC9YYnBRcGgzWFBsOXdreTVwNmZhN2pwcEFHQWVCL1FHMFVCODQveWpmM2hpNGR6UlA3SlZnTGl3dllCNHVpNXQ5UlVMcTJMZlVIS1lEeTRhMENKOXd6aktYMkd2NnEwTk1IS2xlV2xML2JRRFFyUnJoM25uaVM4eWora25oNW45OGVQNlhOM1VxV2R1ZWZDdWp4d25qeHlUb3hzQmI0WWxkT3JTU1FQZ1BIdEQwaFVBcDV4cUp6LzM3MjV0ek0wOTA2TkhJZmtaZXg3SGVZbHRocjZNTkNnR2ZYbnUwQnNFZE55V29OcmxkVjJwdGxxOTNxQnRsbk5IMmh6YllrWmdoN1VIbm5ocU5Dcmw1eWZZUitWUmZuMnUrcG5QLys0djNxb1E5LzdvUkQ1Qkt1eXRVTEJ6cnRNR2dFYmd2REZ1Qk16S1RUOTMzem41MzlMRTM4QUEySzJBTHZhZCtsQnVaMTNWQ2hTM1NYbDJGb2ViNHViYnJTM1duazFKWVBzeUQybmpiMXkvUE1wSFgvbU5SdDBDTkU0ZXV2OS9IWDMwM25QaUFuMUlaMy8weEhXbm8weDIraWxBeWp5TllzTDB4bUx4QnA3LzQzLzRoYi94bjE3NmJNK2Vneis3ekk5NHlCYjI2TUx2dlRVZDBVMHBYWWt3eXAvVWF6TjRFdDlWd2NTSTJRcG1XNGJhOWtqSSttVUh0UWRXZU9hL2QxaXp2Kzc1TVFBSDltcTZ2M2o2cy8vM3YvNGtPLzlNd3J6OVo1T2lvUGVPdDhLaGt0cnZPcjBDZ09PMFFZUjlGWURGczJYUG1YdC81VGV6aFlVVFBYb3FZTGNDTWdMZCtrNjJuY1NEUXVVcUNleENDVERZK2RqSHVIN0loWjhneHdEczM2TUpibW5oeEpjKzlxdi9ROGsrR2Zyc254b0JXdHhSNWFlQzdUQUExSU56NVM4YmdPVUxEMy8weE5Rem4vLzE3bHFqYms4RnpBRG9PYjE5M3owVXJxNlZCSGFiQkhqa042NWZjOXFuUjMzajhudjFReldqQTQzNmM0OTgvdGNmdXZNUFRxZzk2QUtUb0JzQTR1aEp4eFZmZFpqYlRnTkFoVzRFVXN1SEFHclAzL3FPZXhiT0hQbFFyNTZOOGlNWjV2V3VOQ3VCeWxVUzJHMFM0SWc3UCtXMlQ3K0ZaY292QTNCZ1hEOUtldUxJaC83a3ZlKzRXKzFCOTlaUy9tMHhBdHRsQUx3eHdMSVJRQWo0cnFOLzhLYmZYN3A0OGpOOWVrU0MzdHRYVW5WUFVLdU1nTVJUdWQwaUFWZisvVkorWnYyOVV2NnI5L08xMzlPZi9yMTN2ZWwvcXgzb0hkLzlYOHNBYkV0enQ4c0EwSmkxakVBUXh2ejh3dkZQdlAzWGxxY3ZQTkNybmRLd0NzQVE2UFhieWdoc3k0Q29Lcms4Q2ZDeG1EMjY1ejh3MXBYdDE2TStsdit2T0NDYUd0TzN2KzluZm0xK250K3FNc1ZQbGQvdi9ia0Z3TG11aEZnSHI5dHBBTHdadmdJbzd3VmdCSmFtWDN4bzRvVlAvK3RmYnN4ZWVyUlhLd0ZiQmVoWlJiZmVuZGE3QTlYR29FdXhnanRPQW54OW1sOXV2cXFrL04wTFU0OTg5a1AvNXQzSERuMXpnakV1WDU3OTBZbHRVL3BVY0ZmaUJ0dWZwamxNK1FIWFBYL3VxZG5GeVZOZkdiN2h4OTdZTTloL0RTS3p4MVh4ZmR3cjlYaXdUOGM0Ky9RTzk0Sys0MSt2NjZYaVZpMUlXN09EdzkwYXJJTTZtTUxIV09iMCt3UzczZEVXWmwvYTRpY0N0N05OL05UNFB2MTBPelAvUGkzNzhkZGNwUWxzL3RJamQzMzRsOTcxNkQyM3ZpUitFRFRLajA4My9zQzdBWEFvVk9mZGxUQUF0QXJWS1RjMFZhZnV1WmYrYW5yKzdOUDNqNzMyNzkvWU16UjRuWDA4T0ZnQktWNVl1R3kzSWFnTVFPY0g1RlpydUZJR2dFZlZ3d1BkV3U3amcrTHZaOWt2NWUrYXZmalZ6L3pPdi9vUGo5N3pDWlNmOGM3ei9yTHlnM2RkY0NqVTlyZ3JaUUJvblN1OHczS0x1eGZPSFptZGZ2YUw5NDY4L3FjUDlvMk0zb2lZTExNdXdRaXNWclJNcWozeHlnQzBSNDZkb0hJbERFQ3Zia3YzYUtmL2dINTMwbWQ5bnZOZnZVOWFmdkhVcDI5OTcwKzk1K2hEOTV4WGU1bmhVWDYvL3kvUC9vaGsyNVdmU25lQ0FZQ1AxVnhYZmZMVTRzdGYrNS8zN2ZtYjc2ejNqVjcxL1YxOGpBOVJtUkVJWHhPaThIWklyeklBcTNYVGxjZHZwd0hnK3hVam12WDNqV3JXMTA0L3lzOXUvOVU2NGJkM3VGR2ZlT0h3QnovNEwxNzdHK2ZQbnB5VlpGQjJYL1pqQU5nRDhFMC9IN1lPbGJTOTdrb2FBRnE2MmhUdUFnRmFudlBmL1BBM0I2NTU0NUdCZmRmZjNEM1FzMGUvb1JidXdiVUU2K0l0d2tqS0MzWkNqSlVCNklSVTIwTnpPd3lBZmNldlg2ZjZ0TkhIOC8xOWNjbVBBVGlvbmY3QnJ2bmp4eDc2OC8veWY5NzlsdHVrNGN6NktIeTY3UGVabjJIcXZqMEMyQ0tWSzIwQVlIczlJK0JONjVsNDRrK2ZsWG45MHNncmYyaHY5K0Rvalg1UUVBTGNpM0ZiME1uanc1VUI4SzdZZWJBVEJzQm5IM2IzQjZYNExQZE44WFdQNzgvM3I5TGhIcDd6TDAyZStzemRIL21QLy9tdWo3em5NWWFqdk0vNndQTE1mOFUyL2NvOXQ1cnlsZk4xT3U1OEFObmh3Mk9jOEhwWjJMemVGTWp3aHIvK0Z6Ny9FNFBmOWFQdnF2VVB2MjVSNGwyU1owYzc5OW9LNXNkQTJTaGNabHY0TXJlR0tUNGl5eitzbHpyQ2o0UHFOMnVkYXpHMW14eHQ0WmVJOSs3dHNhY1pGeTh5TWUxdVIxdDRzbkhod21LMnBCK0EzWXFqRkYxS3Z6TGJvL2k4eURQWXowWmYrSVFYRU0vSFBNWTE4OWNXWm8rZWVQSytEOTN5S3ovMUZ5cnF5M3RYZmhRZjRhWXovNDVSZnZHMTZ1eEwyblk3VnllZ0d3RWdieXppVTBOQWVIbndOWC8zd0t0LytzUC91SGYvamY4czYrazlpQkZZa3FneEFqdzFNS2hleFFBdzZCdENLQlJzQVloTk9MSlhCbUFUQXR2bXJCczFBR212KzREajVCNnZvcVB3K0g1K3B0MjgzdVRUbE1ObnUvRkRVbnplNVIvVGpOKzlWRDk5NmRTUmozL3V0Ly85bng0NzlKVnphaTVqRllYM0dkK1YzNDJDSzc2ejRIQ2JKZFZjbmN1Z0dYdmxZczRQRU8rR0FBT1FyZ2JjR0lCZkhyLzVGMTU5OVZ2ZTgvTzllMjk0UjliYmZ5MGZHc1VZbUJHUW1JRm1BQWliandaQkVmN3Nud1M1L0JvQ2hqTzg0cFVCeU1WeDJRSEU2NTFkRW5VVGJmS3NsZTZaOTYyeUFyQTZkR0dQaUpuZFozZi9vVmNVbnQvbjQ4QlpuMFpWL2t1OU1jd1Bkd3pvL1pSUnpmak0vTFhGK1pPVFo0NTk2b0hiZnVPVEQzL3hsaE9xbnpIS0RJL0N1MDluZlJSL1J5cS8rTXI3Z1BCT2N0WnZZc2dOZ0VOZkRhUXJBb3dCNmN1anIzL2JOUWZmK3FzLzNuZmdwcCtwOVkxOWp6NHIwSTB4V0U1V0Jia2hVQUhUZVkydXFQdUNaZzd5RVplZU0rQ0R4U1BEV2dyS1QwMDFzdWxwL1FpMWN5bGF1STBNMUpEenlsNXByOTBDak5mQ0xjREV5aC9VTGpYTkdBYVgvajZCeFlWcmxkZGI2REpDTnF2bGE4SjdwRVVCVHpJWUNSTW1PTDYzWmtvOE1kR3dXNER3ZXhNYUdFcGpkamVGVjlpT2x5dXVKM2dXNWxkNVVmNWVqU2ovbFY0TUFUL1Z6WXpQTC9iVWxyUzBYNXA2L09LSnB6NTMvKzN2dS92UVZ6LzNVbXdPaXUxS0Qwd1ZuNW5mRlIvb2JrY05FK1MzVTUzekJrVEIzYXU3N0pZQWlQSzdVY2dOUWRZN1BITHRQL2pOTjR4Yy82Ti9wM3YwMVQ5VTZ4MSt2WHA3bEJGb0JrRmRZNnNDZFl2MWhpNG9oWWRGYzBXWS9DTmErZzFySnBqVTE5dW5wOFBBSTY4NUsreVJuUTJEQWREbUZSK20wTENkNElDcW5BbGNGNkFyYmc3WHdLWGx5blNJUTlEeUpPRnlQQ2JsR1QwOXJUK2xBOTd5QU9YSDlmeWRWOGtuMVJadS9WQjg4S2I4Z3NVWHAwTFlEWUROL0NnL1NxK1pIc1hYZ2lEcldsNmVYSzVQSFowOS8rSTNqaCs2LzRFN2YvZmRoK3YxYWI3Ynp6aEVvWDNXZDZWM1NGcnFmV1E0VlBMT2NXcnFqblVwYjRRUnZFUENHQUEzQm00RUhJSjNnUS91Kzl2Lzl0cXhHOTkyVTkvK04zeHY5OUNCTjlSNmhyNHJxL1h1VjJtOVhCQ1ZYMTNtdHdxVU5JUGdGR0ljNWNkUHRUSUFxckNWY3hLdDBxNFVqcll4NEZNRGdHQk5xUlJ3NVhJbGFrcEw4NjBYcG9IUTgzeWJpYStSMTJnNlhXaHJOT3pSSXpsbTk2bkphQUNFODluZlBqS2pPT2tvUE4rZ1pNWW5ySC9VZFZHZm9uaDVlV0htK2ZucGM0ZlB2M0Q0OFdjZXV2T3ByMy8yOTA4cWxkL3Fvd2s0Wm5WWGRJZmczSmNWMzd2ZklUUjJsUE9HN1NpbVNzdzRqMEQzR0FEQzlGL1pZd1RBT2ZTOGRBNWwrclV5MkR2eStwOTh4ZUJWTjEvWHMrZFYxM1gzNzN0VlY5L3dLN3E2Ky9kMzFmcjJOR3ExNFM1RjFHdTlkdXBZcGVoQlZnRDRTUTB5WHdHZ1RPdTZqZVJabDBqN01wZ0IwRXlYR2dCVEZyWFRaczBFdWhGWUMzcGFXdGFOU0JOT1RUQjhwQzlRMUplbXBlRlNYaStUMDFGZVp2a3g3Y2lqNE16UnJBQXNIM0tYVjdpZU5aYm1hNDNsNmF5eE1MRzhPUC95MHNMMFMvTlQ1MStZdW5EeStYUEhIajl4N0xHN1R4MTk1SjZMS3NGemUwcENBdWZLN2NxZlFrOXp4WTgxMmdvZ2xBNjBQTHpqb0RkeXh6RldZaWpsazdCN2xEdjFaV05BbXVNODdHV3BnZzdEa2RiYk83U252Ly9nelVPOTQ5ODkzTFBudXVHKzBZTWpYUU5qSXowRGU0ZXk3c0doNFpHQndhR3hnZjdaK1o3K3VibGFmNjI3cDBjZks5QXFRZytndW1yYVRxcnBSMmthZ2h4STBQZERPWlRRMEYwemYxVFJXS2J1SGVIRWViWkh5K1pGeldOVGx5UlFzU2ZHRFpwQ2kwdFRYdUVSanVFSWswZnhwcndSaHlLYVlwS2ZzSmZ6ZE1VaFpuUVZOT01LVkxyUWVWbkpVcUpqajZXcm9mclVSeEtpQkN1MEh1TjBMVW1PVXJqbEpSWFR6OHd1TERVYWk0dURBOHZ6V1dOeGZ2TFMzUHpTL056c1luMTJabUhxd3N6Q3pLV3BtWW5UVXhObmowOWZQUFhNOU9uamZ6VXpNekV4cCtxNFowZHhjVlNQWXp5NE1xUGNoRjNKVStoNG9KY0J1bGZRSFBFZDdlaWozZVJTZmdtN3B3TnRERVdJMGpzT1dJNm5hZER3c2dvYVRTRE9PNVE4M3BrZUJ1SWNsc09XV0VwM1hBVTNMZ0dYZTFvaXhYbllZWnFQc1BkUDJtL2tkZVgxTVBIVXV3RndYRG51NVlEdUZUUkhmRmM0Rjg2dVlEWmhNdVdiY09wZG1WUFlTdUU5bmJKcE9LWGxZYW9takhOWURsdGlLZDF4Rld5UEJGb3BWaG5uY1dBNTdEaUhiZ1JTV0E2N0FTaVg4VGpRWFJwMjNJNkc2V0RlMFl5dXdsektQK0gxZktyb2FiaFZPYXAwdklkYlFYQ3BvMHpsT2lPQnRSVE0wMXJCRkVlNDdGM3B3YWRoajlNYThMaTBiTUFVaHNianV3Wit1d3pXdEIwZUJwYkRhK0hLZWVuRWN2NjBZejEvaWl1SE41S25YS2FLcjVRQVNyY1JsK2J6c0NzczVWdUZIZWN3elZmR2VSb1FSL3F1ZHQ5T0E1UzIwQ0hsTm5rY21JYnB1TlZ3cExrcmwzRTgwTk5TWEJwZUx6M05XNFZYbDhCNml0WXEzWEVPb2U3aGpjQnlIdWZPOFI3ZjFmRGJmWUNXMjVmR054S21jOU44YVdldmhrL3pWT0h0bFVBcjVVeHhhUmpPUE80d3hhV2NrMDUvcC9uUzlGMGIvazRaeE41NWE3VzNuTGFWTXJ0MklPeHl4dGRTek5YUzFzTDdXRmd0enk0WFY4RytON1RBZkdlRkxyZjlsMXYrTzB2YW5XdnQ1U3JxNVpidlhNczZUTGthd0JzVGNDV25qY2xwcCtYNmpsWHNuZFlSRlQrVkJDb0pWQktvSkZCSm9KSkFKWUZLQXBVRUtnbFVFcWdrVUVtZ2trQWxnVW9DbFFRcUNWUVNxQ1JRU2FDU1FDV0JTZ0tWQkNvSlZCS29KRkJKb0pKQUpZRktBcFVFS2dsVUVxZ2tVRW1na2tBbGdVb0NsUVFxQ1ZRU3FDUlFTYUNTUUNXQlNnS1ZCQ29KVkJLb0pGQkpvSkpBSllGS0FwVUVLZ2xVRXFna1VFbWdrc0RHSmZEL0FiUEhaeUY3ZWlnRkFBQUFBRWxGVGtTdVFtQ0MiPgo8c3R5bGU+KiwqOjpiZWZvcmUsKjo6YWZ0ZXJ7Ym94LXNpemluZzpib3JkZXItYm94fWh0bWwsYm9keXttYXJnaW46MDtoZWlnaHQ6MTAwJTtvdmVyZmxvdzpoaWRkZW59PC9zdHlsZT4KPHN0eWxlPi8qISB0YWlsd2luZGNzcyB2NC4xLjE0IHwgTUlUIExpY2Vuc2UgfCBodHRwczovL3RhaWx3aW5kY3NzLmNvbSAqL0BsYXllciBwcm9wZXJ0aWVzO0BsYXllciB0aGVtZSxiYXNlLGNvbXBvbmVudHMsdXRpbGl0aWVzO0BsYXllciB0aGVtZXs6cm9vdCw6aG9zdHstLWZvbnQtc2Fuczp1aS1zYW5zLXNlcmlmLHN5c3RlbS11aSxzYW5zLXNlcmlmLCJBcHBsZSBDb2xvciBFbW9qaSIsIlNlZ29lIFVJIEVtb2ppIiwiU2Vnb2UgVUkgU3ltYm9sIiwiTm90byBDb2xvciBFbW9qaSI7LS1mb250LW1vbm86dWktbW9ub3NwYWNlLFNGTW9uby1SZWd1bGFyLE1lbmxvLG1vbm9zcGFjZTstLWNvbG9yLWJsYWNrOiMwMDA7LS1jb2xvci13aGl0ZTojZmZmOy0tc3BhY2luZzouMjVyZW07LS1mb250LXdlaWdodC1tZWRpdW06NTAwOy0tZm9udC13ZWlnaHQtc2VtaWJvbGQ6NjAwOy0tdHJhY2tpbmctd2lkZTouMDI1ZW07LS1sZWFkaW5nLXRpZ2h0OjEuMjU7LS1yYWRpdXMteHM6LjEyNXJlbTstLXJhZGl1cy1tZDouMzc1cmVtOy0tcmFkaXVzLWxnOi41cmVtOy0tcmFkaXVzLXhsOi43NXJlbTstLWVhc2Utb3V0OmN1YmljLWJlemllcigwLDAsLjIsMSk7LS1ibHVyLW1kOjEycHg7LS1kZWZhdWx0LXRyYW5zaXRpb24tZHVyYXRpb246LjE1czstLWRlZmF1bHQtdHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb246Y3ViaWMtYmV6aWVyKC40LDAsLjIsMSk7LS1kZWZhdWx0LWZvbnQtZmFtaWx5OnZhcigtLWZvbnQtc2Fucyk7LS1kZWZhdWx0LW1vbm8tZm9udC1mYW1pbHk6dmFyKC0tZm9udC1tb25vKTstLWNvbG9yLXBhbmVsOiMxYzFjMWU7LS1jb2xvci1wYW5lbC1iZzp2YXIoLS1zZXJ2ZS1zaW0tcGFuZWwtYmcpOy0tY29sb3ItcGFuZWwtYmctdHJhbnNsdWNlbnQ6dmFyKC0tc2VydmUtc2ltLXBhbmVsLWJnLXRyYW5zbHVjZW50KTstLWNvbG9yLXBhbmVsLW92ZXJsYXk6IzE4MTgxOGE2Oy0tY29sb3ItcGFuZWwtZGVlcDojMTExMTEzOy0tY29sb3ItcGFnZTojMGEwYTBhOy0tY29sb3ItYWNjZW50OiNhNWI0ZmM7LS1jb2xvci1zdWNjZXNzLWVtZXJhbGQ6IzM0ZDM5OTstLWNvbG9yLWRhbmdlcjojZjg3MTcxOy0tY29sb3ItZGFuZ2VyLXNvZnQ6I2ZjYTVhNTstLWNvbG9yLXdhcm5pbmc6I2ZiYmYyNDstLWNvbG9yLXdhcm5pbmctc29mdDojZmNkMzRkOy0tZm9udC1zeXN0ZW06LWFwcGxlLXN5c3RlbSxzeXN0ZW0tdWksc2Fucy1zZXJpZn19QGxheWVyIGJhc2V7Kiw6YWZ0ZXIsOmJlZm9yZXtib3gtc2l6aW5nOmJvcmRlci1ib3g7Ym9yZGVyOjAgc29saWQ7bWFyZ2luOjA7cGFkZGluZzowfTo6YmFja2Ryb3B7Ym94LXNpemluZzpib3JkZXItYm94O2JvcmRlcjowIHNvbGlkO21hcmdpbjowO3BhZGRpbmc6MH06Oi13ZWJraXQtZmlsZS11cGxvYWQtYnV0dG9ue2JveC1zaXppbmc6Ym9yZGVyLWJveDtib3JkZXI6MCBzb2xpZDttYXJnaW46MDtwYWRkaW5nOjB9OjpmaWxlLXNlbGVjdG9yLWJ1dHRvbntib3gtc2l6aW5nOmJvcmRlci1ib3g7Ym9yZGVyOjAgc29saWQ7bWFyZ2luOjA7cGFkZGluZzowfWh0bWwsOmhvc3R7LXdlYmtpdC10ZXh0LXNpemUtYWRqdXN0OjEwMCU7dGFiLXNpemU6NDtsaW5lLWhlaWdodDoxLjU7Zm9udC1mYW1pbHk6dmFyKC0tZGVmYXVsdC1mb250LWZhbWlseSx1aS1zYW5zLXNlcmlmLHN5c3RlbS11aSxzYW5zLXNlcmlmLCJBcHBsZSBDb2xvciBFbW9qaSIsIlNlZ29lIFVJIEVtb2ppIiwiU2Vnb2UgVUkgU3ltYm9sIiwiTm90byBDb2xvciBFbW9qaSIpO2ZvbnQtZmVhdHVyZS1zZXR0aW5nczp2YXIoLS1kZWZhdWx0LWZvbnQtZmVhdHVyZS1zZXR0aW5ncyxub3JtYWwpO2ZvbnQtdmFyaWF0aW9uLXNldHRpbmdzOnZhcigtLWRlZmF1bHQtZm9udC12YXJpYXRpb24tc2V0dGluZ3Msbm9ybWFsKTstd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6dHJhbnNwYXJlbnR9aHJ7Y29sb3I6aW5oZXJpdDtib3JkZXItdG9wLXdpZHRoOjFweDtoZWlnaHQ6MH1hYmJyOndoZXJlKFt0aXRsZV0pey13ZWJraXQtdGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZSBkb3R0ZWQ7dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZSBkb3R0ZWR9aDEsaDIsaDMsaDQsaDUsaDZ7Zm9udC1zaXplOmluaGVyaXQ7Zm9udC13ZWlnaHQ6aW5oZXJpdH1he2NvbG9yOmluaGVyaXQ7LXdlYmtpdC10ZXh0LWRlY29yYXRpb246aW5oZXJpdDt0ZXh0LWRlY29yYXRpb246aW5oZXJpdH1iLHN0cm9uZ3tmb250LXdlaWdodDpib2xkZXJ9Y29kZSxrYmQsc2FtcCxwcmV7Zm9udC1mYW1pbHk6dmFyKC0tZGVmYXVsdC1tb25vLWZvbnQtZmFtaWx5LHVpLW1vbm9zcGFjZSxTRk1vbm8tUmVndWxhcixNZW5sbyxNb25hY28sQ29uc29sYXMsIkxpYmVyYXRpb24gTW9ubyIsIkNvdXJpZXIgTmV3Iixtb25vc3BhY2UpO2ZvbnQtZmVhdHVyZS1zZXR0aW5nczp2YXIoLS1kZWZhdWx0LW1vbm8tZm9udC1mZWF0dXJlLXNldHRpbmdzLG5vcm1hbCk7Zm9udC12YXJpYXRpb24tc2V0dGluZ3M6dmFyKC0tZGVmYXVsdC1tb25vLWZvbnQtdmFyaWF0aW9uLXNldHRpbmdzLG5vcm1hbCk7Zm9udC1zaXplOjFlbX1zbWFsbHtmb250LXNpemU6ODAlfXN1YixzdXB7cG9zaXRpb246cmVsYXRpdmU7dmVydGljYWwtYWxpZ246YmFzZWxpbmU7Zm9udC1zaXplOjc1JTtsaW5lLWhlaWdodDowfXN1Yntib3R0b206LS4yNWVtfXN1cHt0b3A6LS41ZW19dGFibGV7dGV4dC1pbmRlbnQ6MDtib3JkZXItY29sb3I6aW5oZXJpdDtib3JkZXItY29sbGFwc2U6Y29sbGFwc2V9Oi1tb3otZm9jdXNyaW5ne291dGxpbmU6YXV0b31wcm9ncmVzc3t2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZX1zdW1tYXJ5e2Rpc3BsYXk6bGlzdC1pdGVtfW9sLHVsLG1lbnV7bGlzdC1zdHlsZTpub25lfWltZyxzdmcsdmlkZW8sY2FudmFzLGF1ZGlvLGlmcmFtZSxlbWJlZCxvYmplY3R7ZGlzcGxheTpibG9jazt2ZXJ0aWNhbC1hbGlnbjptaWRkbGV9aW1nLHZpZGVve21heC13aWR0aDoxMDAlO2hlaWdodDphdXRvfWJ1dHRvbixpbnB1dCxzZWxlY3Qsb3B0Z3JvdXAsdGV4dGFyZWF7Zm9udDppbmhlcml0O2ZvbnQtZmVhdHVyZS1zZXR0aW5nczppbmhlcml0O2ZvbnQtdmFyaWF0aW9uLXNldHRpbmdzOmluaGVyaXQ7bGV0dGVyLXNwYWNpbmc6aW5oZXJpdDtjb2xvcjppbmhlcml0O29wYWNpdHk6MTtiYWNrZ3JvdW5kLWNvbG9yOiMwMDAwO2JvcmRlci1yYWRpdXM6MH06Oi13ZWJraXQtZmlsZS11cGxvYWQtYnV0dG9ue2ZvbnQ6aW5oZXJpdDtmb250LWZlYXR1cmUtc2V0dGluZ3M6aW5oZXJpdDtmb250LXZhcmlhdGlvbi1zZXR0aW5nczppbmhlcml0O2xldHRlci1zcGFjaW5nOmluaGVyaXQ7Y29sb3I6aW5oZXJpdDtvcGFjaXR5OjE7YmFja2dyb3VuZC1jb2xvcjojMDAwMDtib3JkZXItcmFkaXVzOjB9OjpmaWxlLXNlbGVjdG9yLWJ1dHRvbntmb250OmluaGVyaXQ7Zm9udC1mZWF0dXJlLXNldHRpbmdzOmluaGVyaXQ7Zm9udC12YXJpYXRpb24tc2V0dGluZ3M6aW5oZXJpdDtsZXR0ZXItc3BhY2luZzppbmhlcml0O2NvbG9yOmluaGVyaXQ7b3BhY2l0eToxO2JhY2tncm91bmQtY29sb3I6IzAwMDA7Ym9yZGVyLXJhZGl1czowfTp3aGVyZShzZWxlY3Q6LXdlYmtpdC1hbnkoW211bHRpcGxlXSxbc2l6ZV0pKSBvcHRncm91cHtmb250LXdlaWdodDpib2xkZXJ9OndoZXJlKHNlbGVjdDotbW96LWFueShbbXVsdGlwbGVdLFtzaXplXSkpIG9wdGdyb3Vwe2ZvbnQtd2VpZ2h0OmJvbGRlcn06d2hlcmUoc2VsZWN0OmlzKFttdWx0aXBsZV0sW3NpemVdKSkgb3B0Z3JvdXB7Zm9udC13ZWlnaHQ6Ym9sZGVyfTp3aGVyZShzZWxlY3Q6LXdlYmtpdC1hbnkoW211bHRpcGxlXSxbc2l6ZV0pKSBvcHRncm91cCBvcHRpb257cGFkZGluZy1pbmxpbmUtc3RhcnQ6MjBweH06d2hlcmUoc2VsZWN0Oi1tb3otYW55KFttdWx0aXBsZV0sW3NpemVdKSkgb3B0Z3JvdXAgb3B0aW9ue3BhZGRpbmctaW5saW5lLXN0YXJ0OjIwcHh9OndoZXJlKHNlbGVjdDppcyhbbXVsdGlwbGVdLFtzaXplXSkpIG9wdGdyb3VwIG9wdGlvbntwYWRkaW5nLWlubGluZS1zdGFydDoyMHB4fTo6LXdlYmtpdC1maWxlLXVwbG9hZC1idXR0b257bWFyZ2luLWlubGluZS1lbmQ6NHB4fTo6ZmlsZS1zZWxlY3Rvci1idXR0b257bWFyZ2luLWlubGluZS1lbmQ6NHB4fTo6cGxhY2Vob2xkZXJ7b3BhY2l0eToxfUBzdXBwb3J0cyAoIG5vdCAoLXdlYmtpdC1hcHBlYXJhbmNlOiAtYXBwbGUtcGF5LWJ1dHRvbikpIG9yIChjb250YWluLWludHJpbnNpYy1zaXplOiAxcHgpezo6cGxhY2Vob2xkZXJ7Y29sb3I6Y3VycmVudENvbG9yfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7OjpwbGFjZWhvbGRlcntjb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsY3VycmVudGNvbG9yIDUwJSx0cmFuc3BhcmVudCl9fX10ZXh0YXJlYXtyZXNpemU6dmVydGljYWx9Ojotd2Via2l0LXNlYXJjaC1kZWNvcmF0aW9uey13ZWJraXQtYXBwZWFyYW5jZTpub25lfTo6LXdlYmtpdC1kYXRlLWFuZC10aW1lLXZhbHVle3RleHQtYWxpZ246aW5oZXJpdDttaW4taGVpZ2h0OjFsaH06Oi13ZWJraXQtZGF0ZXRpbWUtZWRpdHtkaXNwbGF5OmlubGluZS1mbGV4fTo6LXdlYmtpdC1kYXRldGltZS1lZGl0LWZpZWxkcy13cmFwcGVye3BhZGRpbmc6MH06Oi13ZWJraXQtZGF0ZXRpbWUtZWRpdHtwYWRkaW5nLWJsb2NrLXN0YXJ0OjA7cGFkZGluZy1ibG9jay1lbmQ6MH06Oi13ZWJraXQtZGF0ZXRpbWUtZWRpdC15ZWFyLWZpZWxke3BhZGRpbmctYmxvY2stc3RhcnQ6MDtwYWRkaW5nLWJsb2NrLWVuZDowfTo6LXdlYmtpdC1kYXRldGltZS1lZGl0LW1vbnRoLWZpZWxke3BhZGRpbmctYmxvY2stc3RhcnQ6MDtwYWRkaW5nLWJsb2NrLWVuZDowfTo6LXdlYmtpdC1kYXRldGltZS1lZGl0LWRheS1maWVsZHtwYWRkaW5nLWJsb2NrLXN0YXJ0OjA7cGFkZGluZy1ibG9jay1lbmQ6MH06Oi13ZWJraXQtZGF0ZXRpbWUtZWRpdC1ob3VyLWZpZWxke3BhZGRpbmctYmxvY2stc3RhcnQ6MDtwYWRkaW5nLWJsb2NrLWVuZDowfTo6LXdlYmtpdC1kYXRldGltZS1lZGl0LW1pbnV0ZS1maWVsZHtwYWRkaW5nLWJsb2NrLXN0YXJ0OjA7cGFkZGluZy1ibG9jay1lbmQ6MH06Oi13ZWJraXQtZGF0ZXRpbWUtZWRpdC1zZWNvbmQtZmllbGR7cGFkZGluZy1ibG9jay1zdGFydDowO3BhZGRpbmctYmxvY2stZW5kOjB9Ojotd2Via2l0LWRhdGV0aW1lLWVkaXQtbWlsbGlzZWNvbmQtZmllbGR7cGFkZGluZy1ibG9jay1zdGFydDowO3BhZGRpbmctYmxvY2stZW5kOjB9Ojotd2Via2l0LWRhdGV0aW1lLWVkaXQtbWVyaWRpZW0tZmllbGR7cGFkZGluZy1ibG9jay1zdGFydDowO3BhZGRpbmctYmxvY2stZW5kOjB9Ojotd2Via2l0LWNhbGVuZGFyLXBpY2tlci1pbmRpY2F0b3J7bGluZS1oZWlnaHQ6MX06LW1vei11aS1pbnZhbGlke2JveC1zaGFkb3c6bm9uZX1idXR0b257YXBwZWFyYW5jZTpidXR0b259aW5wdXQ6d2hlcmUoW3R5cGU9YnV0dG9uXSxbdHlwZT1yZXNldF0sW3R5cGU9c3VibWl0XSl7YXBwZWFyYW5jZTpidXR0b259Ojotd2Via2l0LWZpbGUtdXBsb2FkLWJ1dHRvbnthcHBlYXJhbmNlOmJ1dHRvbn06OmZpbGUtc2VsZWN0b3ItYnV0dG9ue2FwcGVhcmFuY2U6YnV0dG9ufTo6LXdlYmtpdC1pbm5lci1zcGluLWJ1dHRvbntoZWlnaHQ6YXV0b306Oi13ZWJraXQtb3V0ZXItc3Bpbi1idXR0b257aGVpZ2h0OmF1dG99W2hpZGRlbl06d2hlcmUoOm5vdChbaGlkZGVuPXVudGlsLWZvdW5kXSkpe2Rpc3BsYXk6bm9uZSFpbXBvcnRhbnR9fUBsYXllciB1dGlsaXRpZXN7LlxbY29udGFpbmVyLXR5cGVcOmlubGluZS1zaXplXF17Y29udGFpbmVyLXR5cGU6aW5saW5lLXNpemV9LnBvaW50ZXItZXZlbnRzLWF1dG97cG9pbnRlci1ldmVudHM6YXV0b30ucG9pbnRlci1ldmVudHMtbm9uZXtwb2ludGVyLWV2ZW50czpub25lfS5jb2xsYXBzZXt2aXNpYmlsaXR5OmNvbGxhcHNlfS5pbnZpc2libGV7dmlzaWJpbGl0eTpoaWRkZW59LnZpc2libGV7dmlzaWJpbGl0eTp2aXNpYmxlfS5hYnNvbHV0ZXtwb3NpdGlvbjphYnNvbHV0ZX0uZml4ZWR7cG9zaXRpb246Zml4ZWR9LnJlbGF0aXZle3Bvc2l0aW9uOnJlbGF0aXZlfS5zdGF0aWN7cG9zaXRpb246c3RhdGljfS5zdGlja3l7cG9zaXRpb246c3RpY2t5fS5pbnNldC0we2luc2V0OmNhbGModmFyKC0tc3BhY2luZykqMCl9LnRvcC0we3RvcDpjYWxjKHZhcigtLXNwYWNpbmcpKjApfS50b3AtMVwvMnt0b3A6NTAlfS50b3AtMnt0b3A6Y2FsYyh2YXIoLS1zcGFjaW5nKSoyKX0udG9wLTN7dG9wOmNhbGModmFyKC0tc3BhY2luZykqMyl9LnRvcC1cWzJweFxde3RvcDoycHh9LnRvcC1cW2NhbGNcKDEwMFwlXCs0cHhcKVxde3RvcDpjYWxjKDEwMCUgKyA0cHgpfS50b3AtXFtjYWxjXCgxMDBcJVwrNnB4XClcXXt0b3A6Y2FsYygxMDAlICsgNnB4KX0ucmlnaHQtMHtyaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpKjApfS5yaWdodC0wXC41e3JpZ2h0OmNhbGModmFyKC0tc3BhY2luZykqLjUpfS5yaWdodC0yXC41e3JpZ2h0OmNhbGModmFyKC0tc3BhY2luZykqMi41KX0ucmlnaHQtM3tyaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpKjMpfS5yaWdodC1cWzlweFxde3JpZ2h0OjlweH0uYm90dG9tLTB7Ym90dG9tOmNhbGModmFyKC0tc3BhY2luZykqMCl9LmJvdHRvbS0wXC41e2JvdHRvbTpjYWxjKHZhcigtLXNwYWNpbmcpKi41KX0uYm90dG9tLTN7Ym90dG9tOmNhbGModmFyKC0tc3BhY2luZykqMyl9LmxlZnQtMHtsZWZ0OmNhbGModmFyKC0tc3BhY2luZykqMCl9LmxlZnQtMVwvMntsZWZ0OjUwJX0ubGVmdC0yXC41e2xlZnQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSoyLjUpfS5sZWZ0LTN7bGVmdDpjYWxjKHZhcigtLXNwYWNpbmcpKjMpfS56LTF7ei1pbmRleDoxfS56LTEwe3otaW5kZXg6MTB9LnotMjB7ei1pbmRleDoyMH0uei0zMHt6LWluZGV4OjMwfS56LTM1e3otaW5kZXg6MzV9LnotMzZ7ei1pbmRleDozNn0uei00MHt6LWluZGV4OjQwfS56LTUwe3otaW5kZXg6NTB9LmNvbnRhaW5lcnt3aWR0aDoxMDAlfUBtZWRpYSAobWluLXdpZHRoOjQwcmVtKXsuY29udGFpbmVye21heC13aWR0aDo0MHJlbX19QG1lZGlhIChtaW4td2lkdGg6NDhyZW0pey5jb250YWluZXJ7bWF4LXdpZHRoOjQ4cmVtfX1AbWVkaWEgKG1pbi13aWR0aDo2NHJlbSl7LmNvbnRhaW5lcnttYXgtd2lkdGg6NjRyZW19fUBtZWRpYSAobWluLXdpZHRoOjgwcmVtKXsuY29udGFpbmVye21heC13aWR0aDo4MHJlbX19QG1lZGlhIChtaW4td2lkdGg6OTZyZW0pey5jb250YWluZXJ7bWF4LXdpZHRoOjk2cmVtfX0ubS0we21hcmdpbjpjYWxjKHZhcigtLXNwYWNpbmcpKjApfS4tbXgtMXttYXJnaW4taW5saW5lOmNhbGModmFyKC0tc3BhY2luZykqLTEpfS5teC0wXC41e21hcmdpbi1pbmxpbmU6Y2FsYyh2YXIoLS1zcGFjaW5nKSouNSl9Li1teS0ye21hcmdpbi1ibG9jazpjYWxjKHZhcigtLXNwYWNpbmcpKi0yKX0ubXktMXttYXJnaW4tYmxvY2s6Y2FsYyh2YXIoLS1zcGFjaW5nKSoxKX0ubXQtMFwuNXttYXJnaW4tdG9wOmNhbGModmFyKC0tc3BhY2luZykqLjUpfS5tdC0ye21hcmdpbi10b3A6Y2FsYyh2YXIoLS1zcGFjaW5nKSoyKX0ubXQtXFszcHhcXXttYXJnaW4tdG9wOjNweH0ubXItXFszcHhcXXttYXJnaW4tcmlnaHQ6M3B4fS5tbC0wXC41e21hcmdpbi1sZWZ0OmNhbGModmFyKC0tc3BhY2luZykqLjUpfS5tbC1hdXRve21hcmdpbi1sZWZ0OmF1dG99LmJveC1ib3JkZXJ7Ym94LXNpemluZzpib3JkZXItYm94fS5ibG9ja3tkaXNwbGF5OmJsb2NrfS5jb250ZW50c3tkaXNwbGF5OmNvbnRlbnRzfS5mbGV4e2Rpc3BsYXk6ZmxleH0uZ3JpZHtkaXNwbGF5OmdyaWR9LmhpZGRlbntkaXNwbGF5Om5vbmV9LmlubGluZXtkaXNwbGF5OmlubGluZX0uaW5saW5lLWJsb2Nre2Rpc3BsYXk6aW5saW5lLWJsb2NrfS5pbmxpbmUtZmxleHtkaXNwbGF5OmlubGluZS1mbGV4fS50YWJsZXtkaXNwbGF5OnRhYmxlfS5cW2FzcGVjdC1yYXRpb1w6MTZcLzExXF17YXNwZWN0LXJhdGlvOjE2LzExfS5zaXplLTFcLjV7d2lkdGg6Y2FsYyh2YXIoLS1zcGFjaW5nKSoxLjUpO2hlaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpKjEuNSl9LnNpemUtMlwuNXt3aWR0aDpjYWxjKHZhcigtLXNwYWNpbmcpKjIuNSk7aGVpZ2h0OmNhbGModmFyKC0tc3BhY2luZykqMi41KX0uc2l6ZS0zXC41e3dpZHRoOmNhbGModmFyKC0tc3BhY2luZykqMy41KTtoZWlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSozLjUpfS5zaXplLTR7d2lkdGg6Y2FsYyh2YXIoLS1zcGFjaW5nKSo0KTtoZWlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSo0KX0uc2l6ZS01e3dpZHRoOmNhbGModmFyKC0tc3BhY2luZykqNSk7aGVpZ2h0OmNhbGModmFyKC0tc3BhY2luZykqNSl9LnNpemUtOXt3aWR0aDpjYWxjKHZhcigtLXNwYWNpbmcpKjkpO2hlaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpKjkpfS5zaXplLVxbMnB4XF17d2lkdGg6MnB4O2hlaWdodDoycHh9LnNpemUtXFsxNHB4XF17d2lkdGg6MTRweDtoZWlnaHQ6MTRweH0uc2l6ZS1cWzE4cHhcXXt3aWR0aDoxOHB4O2hlaWdodDoxOHB4fS5zaXplLVxbMTlweFxde3dpZHRoOjE5cHg7aGVpZ2h0OjE5cHh9LnNpemUtZnVsbHt3aWR0aDoxMDAlO2hlaWdodDoxMDAlfS5oLTJcLjV7aGVpZ2h0OmNhbGModmFyKC0tc3BhY2luZykqMi41KX0uaC0ze2hlaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpKjMpfS5oLTNcLjV7aGVpZ2h0OmNhbGModmFyKC0tc3BhY2luZykqMy41KX0uaC00e2hlaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpKjQpfS5oLTV7aGVpZ2h0OmNhbGModmFyKC0tc3BhY2luZykqNSl9LmgtNVwuNXtoZWlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSo1LjUpfS5oLTZ7aGVpZ2h0OmNhbGModmFyKC0tc3BhY2luZykqNil9LmgtN3toZWlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSo3KX0uaC04e2hlaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpKjgpfS5oLTEwe2hlaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpKjEwKX0uaC1cWzNweFxde2hlaWdodDozcHh9LmgtXFsxM3B4XF17aGVpZ2h0OjEzcHh9LmgtXFsxNHB4XF17aGVpZ2h0OjE0cHh9LmgtXFsxNnB4XF17aGVpZ2h0OjE2cHh9LmgtXFsxOHB4XF17aGVpZ2h0OjE4cHh9LmgtXFsyMnB4XF17aGVpZ2h0OjIycHh9LmgtXFsyNnB4XF17aGVpZ2h0OjI2cHh9LmgtXFszMHB4XF17aGVpZ2h0OjMwcHh9LmgtZnVsbHtoZWlnaHQ6MTAwJX0uaC1weHtoZWlnaHQ6MXB4fS5oLXNjcmVlbntoZWlnaHQ6MTAwdmh9Lm1heC1oLTkwe21heC1oZWlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSo5MCl9Lm1heC1oLVxbMjYwcHhcXXttYXgtaGVpZ2h0OjI2MHB4fS5tYXgtaC1cWzMyMHB4XF17bWF4LWhlaWdodDozMjBweH0ubWF4LWgtZnVsbHttYXgtaGVpZ2h0OjEwMCV9Lm1pbi1oLTB7bWluLWhlaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpKjApfS5taW4taC1cWzIycHhcXXttaW4taGVpZ2h0OjIycHh9Lm1pbi1oLVxbMzBweFxde21pbi1oZWlnaHQ6MzBweH0ubWluLWgtXFszNnB4XF17bWluLWhlaWdodDozNnB4fS5taW4taC1cWzQ0cHhcXXttaW4taGVpZ2h0OjQ0cHh9Lm1pbi1oLXB4e21pbi1oZWlnaHQ6MXB4fS53LTF7d2lkdGg6Y2FsYyh2YXIoLS1zcGFjaW5nKSoxKX0udy0yXC41e3dpZHRoOmNhbGModmFyKC0tc3BhY2luZykqMi41KX0udy00e3dpZHRoOmNhbGModmFyKC0tc3BhY2luZykqNCl9LnctNXt3aWR0aDpjYWxjKHZhcigtLXNwYWNpbmcpKjUpfS53LTZ7d2lkdGg6Y2FsYyh2YXIoLS1zcGFjaW5nKSo2KX0udy03e3dpZHRoOmNhbGModmFyKC0tc3BhY2luZykqNyl9LnctOHt3aWR0aDpjYWxjKHZhcigtLXNwYWNpbmcpKjgpfS53LTEwe3dpZHRoOmNhbGModmFyKC0tc3BhY2luZykqMTApfS53LTIxe3dpZHRoOmNhbGModmFyKC0tc3BhY2luZykqMjEpfS53LVxbMjJweFxde3dpZHRoOjIycHh9LnctXFszMHB4XF17d2lkdGg6MzBweH0udy1cWzMyXCVcXXt3aWR0aDozMiV9LnctXFszNlwlXF17d2lkdGg6MzYlfS53LVxbNDBcJVxde3dpZHRoOjQwJX0udy1cWzQyXCVcXXt3aWR0aDo0MiV9LnctXFs0NlwlXF17d2lkdGg6NDYlfS53LVxbNDhcJVxde3dpZHRoOjQ4JX0udy1cWzU4XCVcXXt3aWR0aDo1OCV9LnctXFs2MlwlXF17d2lkdGg6NjIlfS53LVxbNjhcJVxde3dpZHRoOjY4JX0udy1cWzcwXCVcXXt3aWR0aDo3MCV9LnctXFs3NFwlXF17d2lkdGg6NzQlfS53LVxbMTIwcHhcXXt3aWR0aDoxMjBweH0udy1cW2NhbGNcKDEwMFwlXCs4cHhcKVxde3dpZHRoOmNhbGMoMTAwJSArIDhweCl9LnctXFttaW5cKDMyMHB4XCxjYWxjXCgxMDB2dy0zMnB4XClcKVxde3dpZHRoOm1pbigzMjBweCwxMDB2dyAtIDMycHgpfS53LWZ1bGx7d2lkdGg6MTAwJX0udy1weHt3aWR0aDoxcHh9Lm1heC13LTkwe21heC13aWR0aDpjYWxjKHZhcigtLXNwYWNpbmcpKjkwKX0ubWF4LXctMTIwe21heC13aWR0aDpjYWxjKHZhcigtLXNwYWNpbmcpKjEyMCl9Lm1heC13LVxbMTUwcHhcXXttYXgtd2lkdGg6MTUwcHh9Lm1heC13LVxbMzYwcHhcXXttYXgtd2lkdGg6MzYwcHh9Lm1heC13LWZ1bGx7bWF4LXdpZHRoOjEwMCV9Lm1pbi13LTB7bWluLXdpZHRoOmNhbGModmFyKC0tc3BhY2luZykqMCl9Lm1pbi13LVxbNTZweFxde21pbi13aWR0aDo1NnB4fS5taW4tdy1cWzIwMHB4XF17bWluLXdpZHRoOjIwMHB4fS5taW4tdy1cWzIyMHB4XF17bWluLXdpZHRoOjIyMHB4fS5taW4tdy1weHttaW4td2lkdGg6MXB4fS5mbGV4LTF7ZmxleDoxfS5zaHJpbmt7ZmxleC1zaHJpbms6MX0uc2hyaW5rLTB7ZmxleC1zaHJpbms6MH0uZ3Jvd3tmbGV4LWdyb3c6MX0uLXRyYW5zbGF0ZS14LTFcLzJ7LS10dy10cmFuc2xhdGUteDpjYWxjKGNhbGMoMS8yKjEwMCUpKi0xKTt0cmFuc2xhdGU6dmFyKC0tdHctdHJhbnNsYXRlLXgpdmFyKC0tdHctdHJhbnNsYXRlLXkpfS50cmFuc2xhdGUteC0xey0tdHctdHJhbnNsYXRlLXg6Y2FsYyh2YXIoLS1zcGFjaW5nKSoxKTt0cmFuc2xhdGU6dmFyKC0tdHctdHJhbnNsYXRlLXgpdmFyKC0tdHctdHJhbnNsYXRlLXkpfS4tdHJhbnNsYXRlLXktMVwvMnstLXR3LXRyYW5zbGF0ZS15OmNhbGMoY2FsYygxLzIqMTAwJSkqLTEpO3RyYW5zbGF0ZTp2YXIoLS10dy10cmFuc2xhdGUteCl2YXIoLS10dy10cmFuc2xhdGUteSl9LnRyYW5zZm9ybXt0cmFuc2Zvcm06dmFyKC0tdHctcm90YXRlLXgsKXZhcigtLXR3LXJvdGF0ZS15LCl2YXIoLS10dy1yb3RhdGUteiwpdmFyKC0tdHctc2tldy14LCl2YXIoLS10dy1za2V3LXksKX0uYW5pbWF0ZS1cW2dyaWQtc3Bpbl8wXC43c19saW5lYXJfaW5maW5pdGVcXXthbmltYXRpb246Z3JpZC1zcGluIC43cyBsaW5lYXIgaW5maW5pdGV9LmFuaW1hdGUtXFtncmlkLXNwaW5fMFwuOHNfbGluZWFyX2luZmluaXRlXF17YW5pbWF0aW9uOmdyaWQtc3BpbiAuOHMgbGluZWFyIGluZmluaXRlfS5jdXJzb3ItY29sLXJlc2l6ZXtjdXJzb3I6Y29sLXJlc2l6ZX0uY3Vyc29yLWRlZmF1bHR7Y3Vyc29yOmRlZmF1bHR9LmN1cnNvci1ub3QtYWxsb3dlZHtjdXJzb3I6bm90LWFsbG93ZWR9LmN1cnNvci1wb2ludGVye2N1cnNvcjpwb2ludGVyfS5jdXJzb3ItcHJvZ3Jlc3N7Y3Vyc29yOnByb2dyZXNzfS5jdXJzb3ItdGV4dHtjdXJzb3I6dGV4dH0udG91Y2gtbm9uZXt0b3VjaC1hY3Rpb246bm9uZX0ucmVzaXple3Jlc2l6ZTpib3RofS5saXN0LW5vbmV7bGlzdC1zdHlsZS10eXBlOm5vbmV9LmFwcGVhcmFuY2Utbm9uZXthcHBlYXJhbmNlOm5vbmV9LlxbZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zXDoxZnJfMWZyXzFmclxde2dyaWQtdGVtcGxhdGUtY29sdW1uczoxZnIgMWZyIDFmcn0uXFtncmlkLXRlbXBsYXRlLWNvbHVtbnNcOmF1dG9fMWZyX2F1dG9cXXtncmlkLXRlbXBsYXRlLWNvbHVtbnM6YXV0byAxZnIgYXV0b30uXFtncmlkLXRlbXBsYXRlLWNvbHVtbnNcOmF1dG9fbWlubWF4XCgwXCwxZnJcKV9hdXRvXF17Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOmF1dG8gbWlubWF4KDAsMWZyKWF1dG99LmdyaWQtY29scy1cWzU2cHhfMWZyX2F1dG9cXXtncmlkLXRlbXBsYXRlLWNvbHVtbnM6NTZweCAxZnIgYXV0b30uZmxleC1jb2x7ZmxleC1kaXJlY3Rpb246Y29sdW1ufS5mbGV4LXJvd3tmbGV4LWRpcmVjdGlvbjpyb3d9LmZsZXgtbm93cmFwe2ZsZXgtd3JhcDpub3dyYXB9LnBsYWNlLWl0ZW1zLWNlbnRlcntwbGFjZS1pdGVtczogY2VudGVyfS5pdGVtcy1iYXNlbGluZXthbGlnbi1pdGVtczpiYXNlbGluZX0uaXRlbXMtY2VudGVye2FsaWduLWl0ZW1zOiBjZW50ZXJ9Lml0ZW1zLXN0cmV0Y2h7YWxpZ24taXRlbXM6c3RyZXRjaH0uanVzdGlmeS1iZXR3ZWVue2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVufS5qdXN0aWZ5LWNlbnRlcntqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyfS5qdXN0aWZ5LWVuZHtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1lbmR9LmdhcC0wXC41e2dhcDpjYWxjKHZhcigtLXNwYWNpbmcpKi41KX0uZ2FwLTF7Z2FwOmNhbGModmFyKC0tc3BhY2luZykqMSl9LmdhcC0xXC41e2dhcDpjYWxjKHZhcigtLXNwYWNpbmcpKjEuNSl9LmdhcC0ye2dhcDpjYWxjKHZhcigtLXNwYWNpbmcpKjIpfS5nYXAtMlwuNXtnYXA6Y2FsYyh2YXIoLS1zcGFjaW5nKSoyLjUpfS5nYXAtM3tnYXA6Y2FsYyh2YXIoLS1zcGFjaW5nKSozKX0uZ2FwLTV7Z2FwOmNhbGModmFyKC0tc3BhY2luZykqNSl9LmdhcC1cWzVweFxde2dhcDo1cHh9LmdhcC1weHtnYXA6MXB4fS5qdXN0aWZ5LXNlbGYtZW5ke2p1c3RpZnktc2VsZjpmbGV4LWVuZH0udHJ1bmNhdGV7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7d2hpdGUtc3BhY2U6bm93cmFwfS5vdmVyZmxvdy1oaWRkZW57b3ZlcmZsb3c6aGlkZGVufS5vdmVyZmxvdy15LWF1dG97b3ZlcmZsb3cteTphdXRvfS5yb3VuZGVke2JvcmRlci1yYWRpdXM6LjI1cmVtfS5yb3VuZGVkLVxbMnB4XF17Ym9yZGVyLXJhZGl1czoycHh9LnJvdW5kZWQtXFszcHhcXXtib3JkZXItcmFkaXVzOjNweH0ucm91bmRlZC1cWzRweFxde2JvcmRlci1yYWRpdXM6NHB4fS5yb3VuZGVkLVxbNXB4XF17Ym9yZGVyLXJhZGl1czo1cHh9LnJvdW5kZWQtXFs3cHhcXXtib3JkZXItcmFkaXVzOjdweH0ucm91bmRlZC1cWzhweFxde2JvcmRlci1yYWRpdXM6OHB4fS5yb3VuZGVkLVxbOXB4XF17Ym9yZGVyLXJhZGl1czo5cHh9LnJvdW5kZWQtXFsxMHB4XF17Ym9yZGVyLXJhZGl1czoxMHB4fS5yb3VuZGVkLVxbMTRweFxde2JvcmRlci1yYWRpdXM6MTRweH0ucm91bmRlZC1mdWxse2JvcmRlci1yYWRpdXM6My40MDI4MmUzOHB4fS5yb3VuZGVkLWxne2JvcmRlci1yYWRpdXM6dmFyKC0tcmFkaXVzLWxnKX0ucm91bmRlZC1tZHtib3JkZXItcmFkaXVzOnZhcigtLXJhZGl1cy1tZCl9LnJvdW5kZWQtbm9uZXtib3JkZXItcmFkaXVzOjB9LnJvdW5kZWQteGx7Ym9yZGVyLXJhZGl1czp2YXIoLS1yYWRpdXMteGwpfS5yb3VuZGVkLXhze2JvcmRlci1yYWRpdXM6dmFyKC0tcmFkaXVzLXhzKX0ucm91bmRlZC10LVxbMTBweFxde2JvcmRlci10b3AtbGVmdC1yYWRpdXM6MTBweDtib3JkZXItdG9wLXJpZ2h0LXJhZGl1czoxMHB4fS5ib3JkZXJ7Ym9yZGVyLXN0eWxlOnZhcigtLXR3LWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOjFweH0uYm9yZGVyLTB7Ym9yZGVyLXN0eWxlOnZhcigtLXR3LWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOjB9LmJvcmRlci0ye2JvcmRlci1zdHlsZTp2YXIoLS10dy1ib3JkZXItc3R5bGUpO2JvcmRlci13aWR0aDoycHh9LmJvcmRlci10e2JvcmRlci10b3Atc3R5bGU6dmFyKC0tdHctYm9yZGVyLXN0eWxlKTtib3JkZXItdG9wLXdpZHRoOjFweH0uYm9yZGVyLXJ7Ym9yZGVyLXJpZ2h0LXN0eWxlOnZhcigtLXR3LWJvcmRlci1zdHlsZSk7Ym9yZGVyLXJpZ2h0LXdpZHRoOjFweH0uYm9yZGVyLWRhc2hlZHstLXR3LWJvcmRlci1zdHlsZTpkYXNoZWQ7Ym9yZGVyLXN0eWxlOmRhc2hlZH0uYm9yZGVyLW5vbmV7LS10dy1ib3JkZXItc3R5bGU6bm9uZTtib3JkZXItc3R5bGU6bm9uZX0uXCFib3JkZXItXFtyZ2JhXCgxMFwsMTMyXCwyNTVcLDBcLjZcKVxde2JvcmRlci1jb2xvcjojMGE4NGZmOTkhaW1wb3J0YW50fS5ib3JkZXItXFtcIzNiNWY5OVxde2JvcmRlci1jb2xvcjojM2I1Zjk5fS5ib3JkZXItXFtcIzVmNjI2OFxde2JvcmRlci1jb2xvcjojNWY2MjY4fS5ib3JkZXItXFtcIzIyMlxde2JvcmRlci1jb2xvcjojMjIyfS5ib3JkZXItXFtcI2ZmNDUzYVxdXC81MHtib3JkZXItY29sb3I6I2ZmNDUzYTgwO2JvcmRlci1jb2xvcjpjb2xvcihkaXNwbGF5LXAzIC45MjI2NzMgLjMzMzEzNCAuMjcxNTEvLjUpO2JvcmRlci1jb2xvcjpsYWIoNTguNzYyOCUgNjkuODQ2NyA1MC4zODg2Ly41KX0uYm9yZGVyLWFjY2VudHtib3JkZXItY29sb3I6dmFyKC0tY29sb3ItYWNjZW50KX0uYm9yZGVyLWRhbmdlclwvMjB7Ym9yZGVyLWNvbG9yOiNmODcxNzEzM31Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5ib3JkZXItZGFuZ2VyXC8yMHtib3JkZXItY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLWRhbmdlcikyMCUsdHJhbnNwYXJlbnQpfX0uYm9yZGVyLWRhbmdlclwvMzB7Ym9yZGVyLWNvbG9yOiNmODcxNzE0ZH1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5ib3JkZXItZGFuZ2VyXC8zMHtib3JkZXItY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLWRhbmdlcikzMCUsdHJhbnNwYXJlbnQpfX0uYm9yZGVyLXdhcm5pbmdcLzI1e2JvcmRlci1jb2xvcjojZmJiZjI0NDB9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuYm9yZGVyLXdhcm5pbmdcLzI1e2JvcmRlci1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2FybmluZykyNSUsdHJhbnNwYXJlbnQpfX0uYm9yZGVyLXdoaXRle2JvcmRlci1jb2xvcjp2YXIoLS1jb2xvci13aGl0ZSl9LmJvcmRlci13aGl0ZVwvOHtib3JkZXItY29sb3I6I2ZmZmZmZjE0fUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmJvcmRlci13aGl0ZVwvOHtib3JkZXItY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTglLHRyYW5zcGFyZW50KX19LmJvcmRlci13aGl0ZVwvMTB7Ym9yZGVyLWNvbG9yOiNmZmZmZmYxYX1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5ib3JkZXItd2hpdGVcLzEwe2JvcmRlci1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpMTAlLHRyYW5zcGFyZW50KX19LmJvcmRlci13aGl0ZVwvMTJ7Ym9yZGVyLWNvbG9yOiNmZmZmZmYxZn1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5ib3JkZXItd2hpdGVcLzEye2JvcmRlci1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpMTIlLHRyYW5zcGFyZW50KX19LmJvcmRlci13aGl0ZVwvMjB7Ym9yZGVyLWNvbG9yOiNmZmYzfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmJvcmRlci13aGl0ZVwvMjB7Ym9yZGVyLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSkyMCUsdHJhbnNwYXJlbnQpfX0uYm9yZGVyLXdoaXRlXC8yNXtib3JkZXItY29sb3I6I2ZmZmZmZjQwfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmJvcmRlci13aGl0ZVwvMjV7Ym9yZGVyLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSkyNSUsdHJhbnNwYXJlbnQpfX0uYm9yZGVyLXdoaXRlXC8zMHtib3JkZXItY29sb3I6I2ZmZmZmZjRkfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmJvcmRlci13aGl0ZVwvMzB7Ym9yZGVyLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSkzMCUsdHJhbnNwYXJlbnQpfX0uYm9yZGVyLXdoaXRlXC9cWzBcLjA2XF17Ym9yZGVyLWNvbG9yOiNmZmZmZmYwZn1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5ib3JkZXItd2hpdGVcL1xbMFwuMDZcXXtib3JkZXItY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTYlLHRyYW5zcGFyZW50KX19LmJvcmRlci10LVxbXCNmNGY0ZjVcXXtib3JkZXItdG9wLWNvbG9yOiNmNGY0ZjV9LmJvcmRlci10LXdoaXRle2JvcmRlci10b3AtY29sb3I6dmFyKC0tY29sb3Itd2hpdGUpfS5ib3JkZXItdC13aGl0ZVwvNjB7Ym9yZGVyLXRvcC1jb2xvcjojZmZmOX1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5ib3JkZXItdC13aGl0ZVwvNjB7Ym9yZGVyLXRvcC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpNjAlLHRyYW5zcGFyZW50KX19LlwhYmctXFtyZ2JhXCgxMFwsMTMyXCwyNTVcLDBcLjA4XClcXXtiYWNrZ3JvdW5kLWNvbG9yOiMwYTg0ZmYxNCFpbXBvcnRhbnR9LlwhYmctd2hpdGVcL1xbMFwuMTJcXXtiYWNrZ3JvdW5kLWNvbG9yOiNmZmZmZmYxZiFpbXBvcnRhbnR9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuXCFiZy13aGl0ZVwvXFswXC4xMlxde2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTEyJSx0cmFuc3BhcmVudCkhaW1wb3J0YW50fX0uYmctXFtcIzBhMGEwY1xde2JhY2tncm91bmQtY29sb3I6IzBhMGEwY30uYmctXFtcIzBhODRmZlxde2JhY2tncm91bmQtY29sb3I6IzBhODRmZn0uYmctXFtcIzFjMWMxY1xde2JhY2tncm91bmQtY29sb3I6IzFjMWMxY30uYmctXFtcIzZlNmU3Mlxde2JhY2tncm91bmQtY29sb3I6IzZlNmU3Mn0uYmctXFtcIzlhOWE5ZVxde2JhY2tncm91bmQtY29sb3I6IzlhOWE5ZX0uYmctXFtcIzIwMmIzYVxde2JhY2tncm91bmQtY29sb3I6IzIwMmIzYX0uYmctXFtcIzIyMlxde2JhY2tncm91bmQtY29sb3I6IzIyMn0uYmctXFtcIzI2MzY0Y1xde2JhY2tncm91bmQtY29sb3I6IzI2MzY0Y30uYmctXFtcIzEwMTAxMFxde2JhY2tncm91bmQtY29sb3I6IzEwMTAxMH0uYmctXFtcI2Y4NzE3MVxde2JhY2tncm91bmQtY29sb3I6I2Y4NzE3MX0uYmctXFtcI2ZmNDUzYVxdXC8xMHtiYWNrZ3JvdW5kLWNvbG9yOiNmZjQ1M2ExYTtiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yKGRpc3BsYXktcDMgLjkyMjY3MyAuMzMzMTM0IC4yNzE1MS8uMSk7YmFja2dyb3VuZC1jb2xvcjpsYWIoNTguNzYyOCUgNjkuODQ2NyA1MC4zODg2Ly4xKX0uYmctXFtyZ2JhXCgxMFwsMTMyXCwyNTVcLDBcLjIyXClcXXtiYWNrZ3JvdW5kLWNvbG9yOiMwYTg0ZmYzOH0uYmctXFtyZ2JhXCg5OVwsMTAyXCwyNDFcLDBcLjE4XClcXXtiYWNrZ3JvdW5kLWNvbG9yOiM2MzY2ZjEyZX0uYmctYWNjZW50e2JhY2tncm91bmQtY29sb3I6dmFyKC0tY29sb3ItYWNjZW50KX0uYmctYmxhY2t7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jb2xvci1ibGFjayl9LmJnLWRhbmdlci1zb2Z0e2JhY2tncm91bmQtY29sb3I6dmFyKC0tY29sb3ItZGFuZ2VyLXNvZnQpfS5iZy1kYW5nZXJcLzEwe2JhY2tncm91bmQtY29sb3I6I2Y4NzE3MTFhfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmJnLWRhbmdlclwvMTB7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3ItZGFuZ2VyKTEwJSx0cmFuc3BhcmVudCl9fS5iZy1wYWdle2JhY2tncm91bmQtY29sb3I6dmFyKC0tY29sb3ItcGFnZSl9LmJnLXBhbmVse2JhY2tncm91bmQtY29sb3I6dmFyKC0tY29sb3ItcGFuZWwpfS5iZy1wYW5lbC1iZ3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNvbG9yLXBhbmVsLWJnKX0uYmctcGFuZWwtYmctdHJhbnNsdWNlbnR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jb2xvci1wYW5lbC1iZy10cmFuc2x1Y2VudCl9LmJnLXBhbmVsLWRlZXB7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jb2xvci1wYW5lbC1kZWVwKX0uYmctcGFuZWwtb3ZlcmxheXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNvbG9yLXBhbmVsLW92ZXJsYXkpfS5iZy1zdWNjZXNzLWVtZXJhbGR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jb2xvci1zdWNjZXNzLWVtZXJhbGQpfS5iZy10cmFuc3BhcmVudHtiYWNrZ3JvdW5kLWNvbG9yOiMwMDAwfS5iZy13YXJuaW5nXC8xMHtiYWNrZ3JvdW5kLWNvbG9yOiNmYmJmMjQxYX1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5iZy13YXJuaW5nXC8xMHtiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13YXJuaW5nKTEwJSx0cmFuc3BhcmVudCl9fS5iZy13aGl0ZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNvbG9yLXdoaXRlKX0uYmctd2hpdGVcLzZ7YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmMGZ9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuYmctd2hpdGVcLzZ7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpNiUsdHJhbnNwYXJlbnQpfX0uYmctd2hpdGVcLzh7YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmMTR9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuYmctd2hpdGVcLzh7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpOCUsdHJhbnNwYXJlbnQpfX0uYmctd2hpdGVcLzEwe2JhY2tncm91bmQtY29sb3I6I2ZmZmZmZjFhfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmJnLXdoaXRlXC8xMHtiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSkxMCUsdHJhbnNwYXJlbnQpfX0uYmctd2hpdGVcLzEye2JhY2tncm91bmQtY29sb3I6I2ZmZmZmZjFmfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmJnLXdoaXRlXC8xMntiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSkxMiUsdHJhbnNwYXJlbnQpfX0uYmctd2hpdGVcLzE1e2JhY2tncm91bmQtY29sb3I6I2ZmZmZmZjI2fUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmJnLXdoaXRlXC8xNXtiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSkxNSUsdHJhbnNwYXJlbnQpfX0uYmctd2hpdGVcLzIwe2JhY2tncm91bmQtY29sb3I6I2ZmZjN9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuYmctd2hpdGVcLzIwe2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTIwJSx0cmFuc3BhcmVudCl9fS5iZy13aGl0ZVwvNDB7YmFja2dyb3VuZC1jb2xvcjojZmZmNn1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5iZy13aGl0ZVwvNDB7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpNDAlLHRyYW5zcGFyZW50KX19LmJnLXdoaXRlXC81MHtiYWNrZ3JvdW5kLWNvbG9yOiNmZmZmZmY4MH1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5iZy13aGl0ZVwvNTB7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpNTAlLHRyYW5zcGFyZW50KX19LmJnLXdoaXRlXC9cWzBcLjAzXF17YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmMDh9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuYmctd2hpdGVcL1xbMFwuMDNcXXtiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSkzJSx0cmFuc3BhcmVudCl9fS5iZy13aGl0ZVwvXFswXC4wNFxde2JhY2tncm91bmQtY29sb3I6I2ZmZmZmZjBhfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmJnLXdoaXRlXC9cWzBcLjA0XF17YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpNCUsdHJhbnNwYXJlbnQpfX0uYmctd2hpdGVcL1xbMFwuMDZcXXtiYWNrZ3JvdW5kLWNvbG9yOiNmZmZmZmYwZn1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5iZy13aGl0ZVwvXFswXC4wNlxde2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTYlLHRyYW5zcGFyZW50KX19LmJnLXdoaXRlXC9cWzBcLjA4XF17YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmMTR9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuYmctd2hpdGVcL1xbMFwuMDhcXXtiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk4JSx0cmFuc3BhcmVudCl9fS5iZy13aGl0ZVwvXFswXC4xMlxde2JhY2tncm91bmQtY29sb3I6I2ZmZmZmZjFmfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmJnLXdoaXRlXC9cWzBcLjEyXF17YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpMTIlLHRyYW5zcGFyZW50KX19LmJnLXdoaXRlXC9cWzBcLjE2XF17YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmMjl9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuYmctd2hpdGVcL1xbMFwuMTZcXXtiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSkxNiUsdHJhbnNwYXJlbnQpfX0uYmctXFtsaW5lYXItZ3JhZGllbnRcKDE0NWRlZ1wsXCMyNTNhNWZcLFwjMTYyMTMyXClcXXtiYWNrZ3JvdW5kLWltYWdlOmxpbmVhci1ncmFkaWVudCgxNDVkZWcsIzI1M2E1ZiwjMTYyMTMyKX0uYmctXFtsaW5lYXItZ3JhZGllbnRcKHRvX2JvdHRvbVwsXCMxYzFjMWVfMFwlXCxyZ2JhXCgyOFwsMjhcLDMwXCwwXClfMTAwXCVcKVxde2JhY2tncm91bmQtaW1hZ2U6bGluZWFyLWdyYWRpZW50KCMxYzFjMWUgMCUsIzFjMWMxZTAwIDEwMCUpfS5iZy1cW2xpbmVhci1ncmFkaWVudFwodG9fcmlnaHRcLHJnYmFcKDI4XCwyOFwsMzBcLDBcKV8wXCVcLFwjMWMxYzFlXzU1XCVcKVxde2JhY2tncm91bmQtaW1hZ2U6bGluZWFyLWdyYWRpZW50KDkwZGVnLCMxYzFjMWUwMCAwJSwjMWMxYzFlIDU1JSl9LmJnLVxbbGluZWFyLWdyYWRpZW50XCh0b190b3BcLFwjMWMxYzFlXzBcJVwscmdiYVwoMjhcLDI4XCwzMFwsMFwpXzEwMFwlXClcXXtiYWNrZ3JvdW5kLWltYWdlOmxpbmVhci1ncmFkaWVudCgjMWMxYzFlMDAgMCUsIzFjMWMxZSAxMDAlKX0ub2JqZWN0LWNvbnRhaW57b2JqZWN0LWZpdDpjb250YWlufS5vYmplY3QtY292ZXJ7b2JqZWN0LWZpdDpjb3Zlcn0ucC0we3BhZGRpbmc6Y2FsYyh2YXIoLS1zcGFjaW5nKSowKX0ucC0wXC41e3BhZGRpbmc6Y2FsYyh2YXIoLS1zcGFjaW5nKSouNSl9LnAtMXtwYWRkaW5nOmNhbGModmFyKC0tc3BhY2luZykqMSl9LnAtM1wuNXtwYWRkaW5nOmNhbGModmFyKC0tc3BhY2luZykqMy41KX0ucC02e3BhZGRpbmc6Y2FsYyh2YXIoLS1zcGFjaW5nKSo2KX0ucHgtMFwuNXtwYWRkaW5nLWlubGluZTpjYWxjKHZhcigtLXNwYWNpbmcpKi41KX0ucHgtMXtwYWRkaW5nLWlubGluZTpjYWxjKHZhcigtLXNwYWNpbmcpKjEpfS5weC0xXC41e3BhZGRpbmctaW5saW5lOmNhbGModmFyKC0tc3BhY2luZykqMS41KX0ucHgtMntwYWRkaW5nLWlubGluZTpjYWxjKHZhcigtLXNwYWNpbmcpKjIpfS5weC0yXC41e3BhZGRpbmctaW5saW5lOmNhbGModmFyKC0tc3BhY2luZykqMi41KX0ucHgtM3twYWRkaW5nLWlubGluZTpjYWxjKHZhcigtLXNwYWNpbmcpKjMpfS5weC0zXC41e3BhZGRpbmctaW5saW5lOmNhbGModmFyKC0tc3BhY2luZykqMy41KX0ucHgtNHtwYWRkaW5nLWlubGluZTpjYWxjKHZhcigtLXNwYWNpbmcpKjQpfS5weC01e3BhZGRpbmctaW5saW5lOmNhbGModmFyKC0tc3BhY2luZykqNSl9LnB4LVxbNVwuNXB4XF17cGFkZGluZy1pbmxpbmUtc3RhcnQ6NS41cHg7cGFkZGluZy1pbmxpbmUtZW5kOjUuNXB4fS5weC1cWzdweFxde3BhZGRpbmctaW5saW5lLXN0YXJ0OjdweDtwYWRkaW5nLWlubGluZS1lbmQ6N3B4fS5weS0wXC41e3BhZGRpbmctYmxvY2s6Y2FsYyh2YXIoLS1zcGFjaW5nKSouNSl9LnB5LTF7cGFkZGluZy1ibG9jazpjYWxjKHZhcigtLXNwYWNpbmcpKjEpfS5weS0xXC41e3BhZGRpbmctYmxvY2s6Y2FsYyh2YXIoLS1zcGFjaW5nKSoxLjUpfS5weS0ye3BhZGRpbmctYmxvY2s6Y2FsYyh2YXIoLS1zcGFjaW5nKSoyKX0ucHktMlwuNXtwYWRkaW5nLWJsb2NrOmNhbGModmFyKC0tc3BhY2luZykqMi41KX0ucHktNHtwYWRkaW5nLWJsb2NrOmNhbGModmFyKC0tc3BhY2luZykqNCl9LnB5LTZ7cGFkZGluZy1ibG9jazpjYWxjKHZhcigtLXNwYWNpbmcpKjYpfS5weS1cWzJweFxde3BhZGRpbmctYmxvY2stc3RhcnQ6MnB4O3BhZGRpbmctYmxvY2stZW5kOjJweH0ucHktXFszcHhcXXtwYWRkaW5nLWJsb2NrLXN0YXJ0OjNweDtwYWRkaW5nLWJsb2NrLWVuZDozcHh9LnB5LVxbNXB4XF17cGFkZGluZy1ibG9jay1zdGFydDo1cHg7cGFkZGluZy1ibG9jay1lbmQ6NXB4fS5weS1cWzdweFxde3BhZGRpbmctYmxvY2stc3RhcnQ6N3B4O3BhZGRpbmctYmxvY2stZW5kOjdweH0ucHQtMFwuNXtwYWRkaW5nLXRvcDpjYWxjKHZhcigtLXNwYWNpbmcpKi41KX0ucHQtMXtwYWRkaW5nLXRvcDpjYWxjKHZhcigtLXNwYWNpbmcpKjEpfS5wdC0yXC41e3BhZGRpbmctdG9wOmNhbGModmFyKC0tc3BhY2luZykqMi41KX0ucHItMntwYWRkaW5nLXJpZ2h0OmNhbGModmFyKC0tc3BhY2luZykqMil9LnByLTNcLjV7cGFkZGluZy1yaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpKjMuNSl9LnByLVxbMjZweFxde3BhZGRpbmctcmlnaHQ6MjZweH0ucGItMFwuNXtwYWRkaW5nLWJvdHRvbTpjYWxjKHZhcigtLXNwYWNpbmcpKi41KX0ucGItMXtwYWRkaW5nLWJvdHRvbTpjYWxjKHZhcigtLXNwYWNpbmcpKjEpfS5wYi0xXC41e3BhZGRpbmctYm90dG9tOmNhbGModmFyKC0tc3BhY2luZykqMS41KX0ucGItMntwYWRkaW5nLWJvdHRvbTpjYWxjKHZhcigtLXNwYWNpbmcpKjIpfS5wYi1cWzJweFxde3BhZGRpbmctYm90dG9tOjJweH0ucGwtMntwYWRkaW5nLWxlZnQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSoyKX0ucGwtMlwuNXtwYWRkaW5nLWxlZnQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSoyLjUpfS5wbC0ze3BhZGRpbmctbGVmdDpjYWxjKHZhcigtLXNwYWNpbmcpKjMpfS5wbC03e3BhZGRpbmctbGVmdDpjYWxjKHZhcigtLXNwYWNpbmcpKjcpfS5wbC1cWzI2cHhcXXtwYWRkaW5nLWxlZnQ6MjZweH0udGV4dC1jZW50ZXJ7dGV4dC1hbGlnbjpjZW50ZXJ9LnRleHQtbGVmdHt0ZXh0LWFsaWduOmxlZnR9LlxbZm9udC1mYW1pbHlcOi1hcHBsZS1zeXN0ZW1cLHN5c3RlbS11aVwsc2Fucy1zZXJpZlxde2ZvbnQtZmFtaWx5Oi1hcHBsZS1zeXN0ZW0sc3lzdGVtLXVpLEJsaW5rTWFjU3lzdGVtRm9udCxTZWdvZSBVSSxSb2JvdG8sTm90byBTYW5zLFVidW50dSxDYW50YXJlbGwsSGVsdmV0aWNhIE5ldWUsc2Fucy1zZXJpZn0uZm9udC1cW2luaGVyaXRcXXtmb250LWZhbWlseTppbmhlcml0fS5mb250LW1vbm97Zm9udC1mYW1pbHk6dmFyKC0tZm9udC1tb25vKX0uZm9udC1zeXN0ZW17Zm9udC1mYW1pbHk6dmFyKC0tZm9udC1zeXN0ZW0pfS50ZXh0LVxbOXB4XF17Zm9udC1zaXplOjlweH0udGV4dC1cWzEwcHhcXXtmb250LXNpemU6MTBweH0udGV4dC1cWzExXC41cHhcXXtmb250LXNpemU6MTEuNXB4fS50ZXh0LVxbMTFweFxde2ZvbnQtc2l6ZToxMXB4fS50ZXh0LVxbMTJweFxde2ZvbnQtc2l6ZToxMnB4fS50ZXh0LVxbMTNweFxde2ZvbnQtc2l6ZToxM3B4fS50ZXh0LVxbMTRweFxde2ZvbnQtc2l6ZToxNHB4fS50ZXh0LVxbMTdweFxde2ZvbnQtc2l6ZToxN3B4fS50ZXh0LVxbMThweFxde2ZvbnQtc2l6ZToxOHB4fS5sZWFkaW5nLVxbMVwuNVxdey0tdHctbGVhZGluZzoxLjU7bGluZS1oZWlnaHQ6MS41fS5sZWFkaW5nLVxbMVwuMzVcXXstLXR3LWxlYWRpbmc6MS4zNTtsaW5lLWhlaWdodDoxLjM1fS5sZWFkaW5nLW5vbmV7LS10dy1sZWFkaW5nOjE7bGluZS1oZWlnaHQ6MX0ubGVhZGluZy10aWdodHstLXR3LWxlYWRpbmc6dmFyKC0tbGVhZGluZy10aWdodCk7bGluZS1oZWlnaHQ6dmFyKC0tbGVhZGluZy10aWdodCl9LmZvbnQtbWVkaXVtey0tdHctZm9udC13ZWlnaHQ6dmFyKC0tZm9udC13ZWlnaHQtbWVkaXVtKTtmb250LXdlaWdodDp2YXIoLS1mb250LXdlaWdodC1tZWRpdW0pfS5mb250LXNlbWlib2xkey0tdHctZm9udC13ZWlnaHQ6dmFyKC0tZm9udC13ZWlnaHQtc2VtaWJvbGQpO2ZvbnQtd2VpZ2h0OnZhcigtLWZvbnQtd2VpZ2h0LXNlbWlib2xkKX0udHJhY2tpbmctXFswXC4xZW1cXXstLXR3LXRyYWNraW5nOi4xZW07bGV0dGVyLXNwYWNpbmc6LjFlbX0udHJhY2tpbmctXFswXC4wMmVtXF17LS10dy10cmFja2luZzouMDJlbTtsZXR0ZXItc3BhY2luZzouMDJlbX0udHJhY2tpbmctXFswXC4wNGVtXF17LS10dy10cmFja2luZzouMDRlbTtsZXR0ZXItc3BhY2luZzouMDRlbX0udHJhY2tpbmctXFswXC4wNmVtXF17LS10dy10cmFja2luZzouMDZlbTtsZXR0ZXItc3BhY2luZzouMDZlbX0udHJhY2tpbmctXFswXC4wOGVtXF17LS10dy10cmFja2luZzouMDhlbTtsZXR0ZXItc3BhY2luZzouMDhlbX0udHJhY2tpbmctd2lkZXstLXR3LXRyYWNraW5nOnZhcigtLXRyYWNraW5nLXdpZGUpO2xldHRlci1zcGFjaW5nOnZhcigtLXRyYWNraW5nLXdpZGUpfS5icmVhay13b3Jkc3tvdmVyZmxvdy13cmFwOmJyZWFrLXdvcmR9LnRleHQtZWxsaXBzaXN7dGV4dC1vdmVyZmxvdzplbGxpcHNpc30ud2hpdGVzcGFjZS1ub3dyYXB7d2hpdGUtc3BhY2U6bm93cmFwfS5cIXRleHQtd2hpdGV7Y29sb3I6dmFyKC0tY29sb3Itd2hpdGUpIWltcG9ydGFudH0udGV4dC1cW1wjMGEwYTBjXF17Y29sb3I6IzBhMGEwY30udGV4dC1cW1wjOGU4ZTkzXF17Y29sb3I6IzhlOGU5M30udGV4dC1cW1wjMzRkMzk5XF17Y29sb3I6IzM0ZDM5OX0udGV4dC1cW1wjMDYyMDE4XF17Y29sb3I6IzA2MjAxOH0udGV4dC1cW1wjYzhkN2ZmXF17Y29sb3I6I2M4ZDdmZn0udGV4dC1cW1wjZDJlN2ZmXF17Y29sb3I6I2QyZTdmZn0udGV4dC1cW1wjZmZiM2FkXF17Y29sb3I6I2ZmYjNhZH0udGV4dC1hY2NlbnR7Y29sb3I6dmFyKC0tY29sb3ItYWNjZW50KX0udGV4dC1kYW5nZXJ7Y29sb3I6dmFyKC0tY29sb3ItZGFuZ2VyKX0udGV4dC1kYW5nZXItc29mdHtjb2xvcjp2YXIoLS1jb2xvci1kYW5nZXItc29mdCl9LnRleHQtd2FybmluZy1zb2Z0e2NvbG9yOnZhcigtLWNvbG9yLXdhcm5pbmctc29mdCl9LnRleHQtd2hpdGV7Y29sb3I6dmFyKC0tY29sb3Itd2hpdGUpfS50ZXh0LXdoaXRlXC8zNXtjb2xvcjojZmZmZmZmNTl9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsudGV4dC13aGl0ZVwvMzV7Y29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTM1JSx0cmFuc3BhcmVudCl9fS50ZXh0LXdoaXRlXC80MHtjb2xvcjojZmZmNn1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey50ZXh0LXdoaXRlXC80MHtjb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpNDAlLHRyYW5zcGFyZW50KX19LnRleHQtd2hpdGVcLzQ1e2NvbG9yOiNmZmZmZmY3M31Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey50ZXh0LXdoaXRlXC80NXtjb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpNDUlLHRyYW5zcGFyZW50KX19LnRleHQtd2hpdGVcLzUwe2NvbG9yOiNmZmZmZmY4MH1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey50ZXh0LXdoaXRlXC81MHtjb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpNTAlLHRyYW5zcGFyZW50KX19LnRleHQtd2hpdGVcLzU1e2NvbG9yOiNmZmZmZmY4Y31Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey50ZXh0LXdoaXRlXC81NXtjb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpNTUlLHRyYW5zcGFyZW50KX19LnRleHQtd2hpdGVcLzYwe2NvbG9yOiNmZmY5fUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LnRleHQtd2hpdGVcLzYwe2NvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk2MCUsdHJhbnNwYXJlbnQpfX0udGV4dC13aGl0ZVwvNjV7Y29sb3I6I2ZmZmZmZmE2fUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LnRleHQtd2hpdGVcLzY1e2NvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk2NSUsdHJhbnNwYXJlbnQpfX0udGV4dC13aGl0ZVwvNzB7Y29sb3I6I2ZmZmZmZmIzfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LnRleHQtd2hpdGVcLzcwe2NvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk3MCUsdHJhbnNwYXJlbnQpfX0udGV4dC13aGl0ZVwvNzV7Y29sb3I6I2ZmZmZmZmJmfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LnRleHQtd2hpdGVcLzc1e2NvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk3NSUsdHJhbnNwYXJlbnQpfX0udGV4dC13aGl0ZVwvODB7Y29sb3I6I2ZmZmN9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsudGV4dC13aGl0ZVwvODB7Y29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTgwJSx0cmFuc3BhcmVudCl9fS50ZXh0LXdoaXRlXC84NXtjb2xvcjojZmZmZmZmZDl9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsudGV4dC13aGl0ZVwvODV7Y29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTg1JSx0cmFuc3BhcmVudCl9fS50ZXh0LXdoaXRlXC85MHtjb2xvcjojZmZmZmZmZTZ9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsudGV4dC13aGl0ZVwvOTB7Y29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTkwJSx0cmFuc3BhcmVudCl9fS50ZXh0LXdoaXRlXC85NXtjb2xvcjojZmZmZmZmZjJ9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsudGV4dC13aGl0ZVwvOTV7Y29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTk1JSx0cmFuc3BhcmVudCl9fS50ZXh0LXdoaXRlXC9cWzBcLjQyXF17Y29sb3I6I2ZmZmZmZjZifUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LnRleHQtd2hpdGVcL1xbMFwuNDJcXXtjb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpNDIlLHRyYW5zcGFyZW50KX19LnRleHQtd2hpdGVcL1xbMFwuNDhcXXtjb2xvcjojZmZmZmZmN2F9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsudGV4dC13aGl0ZVwvXFswXC40OFxde2NvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk0OCUsdHJhbnNwYXJlbnQpfX0udGV4dC13aGl0ZVwvXFswXC41OFxde2NvbG9yOiNmZmZmZmY5NH1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey50ZXh0LXdoaXRlXC9cWzBcLjU4XF17Y29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTU4LjAlLHRyYW5zcGFyZW50KX19LnRleHQtd2hpdGVcL1xbMFwuOTJcXXtjb2xvcjojZmZmZmZmZWJ9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsudGV4dC13aGl0ZVwvXFswXC45Mlxde2NvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk5MiUsdHJhbnNwYXJlbnQpfX0ubG93ZXJjYXNle3RleHQtdHJhbnNmb3JtOmxvd2VyY2FzZX0udXBwZXJjYXNle3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZX0uaXRhbGlje2ZvbnQtc3R5bGU6aXRhbGljfS50YWJ1bGFyLW51bXN7LS10dy1udW1lcmljLXNwYWNpbmc6dGFidWxhci1udW1zO2ZvbnQtdmFyaWFudC1udW1lcmljOnZhcigtLXR3LW9yZGluYWwsKXZhcigtLXR3LXNsYXNoZWQtemVybywpdmFyKC0tdHctbnVtZXJpYy1maWd1cmUsKXZhcigtLXR3LW51bWVyaWMtc3BhY2luZywpdmFyKC0tdHctbnVtZXJpYy1mcmFjdGlvbiwpfS5cW2ZvbnQtdmFyaWFudC1udW1lcmljXDp0YWJ1bGFyLW51bXNcXXtmb250LXZhcmlhbnQtbnVtZXJpYzp0YWJ1bGFyLW51bXN9Lm5vLXVuZGVybGluZXt0ZXh0LWRlY29yYXRpb24tbGluZTpub25lfS5hbnRpYWxpYXNlZHstd2Via2l0LWZvbnQtc21vb3RoaW5nOmFudGlhbGlhc2VkOy1tb3otb3N4LWZvbnQtc21vb3RoaW5nOmdyYXlzY2FsZX0ub3BhY2l0eS0we29wYWNpdHk6MH0ub3BhY2l0eS00MHtvcGFjaXR5Oi40fS5vcGFjaXR5LTYwe29wYWNpdHk6LjZ9Lm9wYWNpdHktMTAwe29wYWNpdHk6MX0uc2hhZG93ey0tdHctc2hhZG93OjAgMXB4IDNweCAwIHZhcigtLXR3LXNoYWRvdy1jb2xvciwjMDAwMDAwMWEpLDAgMXB4IDJweCAtMXB4IHZhcigtLXR3LXNoYWRvdy1jb2xvciwjMDAwMDAwMWEpO2JveC1zaGFkb3c6dmFyKC0tdHctaW5zZXQtc2hhZG93KSx2YXIoLS10dy1pbnNldC1yaW5nLXNoYWRvdyksdmFyKC0tdHctcmluZy1vZmZzZXQtc2hhZG93KSx2YXIoLS10dy1yaW5nLXNoYWRvdyksdmFyKC0tdHctc2hhZG93KX0uc2hhZG93LVxbMF8xcHhfMnB4X3JnYmFcKDBcLDBcLDBcLDBcLjE4XClcLDBfNnB4XzE4cHhfcmdiYVwoMFwsMFwsMFwsMFwuMjhcKVwsaW5zZXRfMF8wXzBfMXB4X3JnYmFcKDI1NVwsMjU1XCwyNTVcLDBcLjA2XClcXXstLXR3LXNoYWRvdzowIDFweCAycHggdmFyKC0tdHctc2hhZG93LWNvbG9yLCMwMDAwMDAyZSksMCA2cHggMThweCB2YXIoLS10dy1zaGFkb3ctY29sb3IsIzAwMDAwMDQ3KSxpbnNldCAwIDAgMCAxcHggdmFyKC0tdHctc2hhZG93LWNvbG9yLCNmZmZmZmYwZik7Ym94LXNoYWRvdzp2YXIoLS10dy1pbnNldC1zaGFkb3cpLHZhcigtLXR3LWluc2V0LXJpbmctc2hhZG93KSx2YXIoLS10dy1yaW5nLW9mZnNldC1zaGFkb3cpLHZhcigtLXR3LXJpbmctc2hhZG93KSx2YXIoLS10dy1zaGFkb3cpfS5zaGFkb3ctXFswXzhweF8yNHB4X3JnYmFcKDBcLDBcLDBcLDBcLjRcKVxdey0tdHctc2hhZG93OjAgOHB4IDI0cHggdmFyKC0tdHctc2hhZG93LWNvbG9yLCMwMDA2KTtib3gtc2hhZG93OnZhcigtLXR3LWluc2V0LXNoYWRvdyksdmFyKC0tdHctaW5zZXQtcmluZy1zaGFkb3cpLHZhcigtLXR3LXJpbmctb2Zmc2V0LXNoYWRvdyksdmFyKC0tdHctcmluZy1zaGFkb3cpLHZhcigtLXR3LXNoYWRvdyl9LnNoYWRvdy1cWzBfOHB4XzI0cHhfcmdiYVwoMFwsMFwsMFwsMFwuNVwpXF17LS10dy1zaGFkb3c6MCA4cHggMjRweCB2YXIoLS10dy1zaGFkb3ctY29sb3IsIzAwMDAwMDgwKTtib3gtc2hhZG93OnZhcigtLXR3LWluc2V0LXNoYWRvdyksdmFyKC0tdHctaW5zZXQtcmluZy1zaGFkb3cpLHZhcigtLXR3LXJpbmctb2Zmc2V0LXNoYWRvdyksdmFyKC0tdHctcmluZy1zaGFkb3cpLHZhcigtLXR3LXNoYWRvdyl9LnNoYWRvdy1cWzBfOHB4XzI0cHhfcmdiYVwoMFwsMFwsMFwsMFwuNDVcKVxdey0tdHctc2hhZG93OjAgOHB4IDI0cHggdmFyKC0tdHctc2hhZG93LWNvbG9yLCMwMDAwMDA3Myk7Ym94LXNoYWRvdzp2YXIoLS10dy1pbnNldC1zaGFkb3cpLHZhcigtLXR3LWluc2V0LXJpbmctc2hhZG93KSx2YXIoLS10dy1yaW5nLW9mZnNldC1zaGFkb3cpLHZhcigtLXR3LXJpbmctc2hhZG93KSx2YXIoLS10dy1zaGFkb3cpfS5zaGFkb3ctXFswXzEycHhfNDBweF9yZ2JhXCgwXCwwXCwwXCwwXC41NVwpXF17LS10dy1zaGFkb3c6MCAxMnB4IDQwcHggdmFyKC0tdHctc2hhZG93LWNvbG9yLCMwMDAwMDA4Yyk7Ym94LXNoYWRvdzp2YXIoLS10dy1pbnNldC1zaGFkb3cpLHZhcigtLXR3LWluc2V0LXJpbmctc2hhZG93KSx2YXIoLS10dy1yaW5nLW9mZnNldC1zaGFkb3cpLHZhcigtLXR3LXJpbmctc2hhZG93KSx2YXIoLS10dy1zaGFkb3cpfS5zaGFkb3ctXFs4cHhfMF8zMnB4X3JnYmFcKDBcLDBcLDBcLDBcLjM1XClcXXstLXR3LXNoYWRvdzo4cHggMCAzMnB4IHZhcigtLXR3LXNoYWRvdy1jb2xvciwjMDAwMDAwNTkpO2JveC1zaGFkb3c6dmFyKC0tdHctaW5zZXQtc2hhZG93KSx2YXIoLS10dy1pbnNldC1yaW5nLXNoYWRvdyksdmFyKC0tdHctcmluZy1vZmZzZXQtc2hhZG93KSx2YXIoLS10dy1yaW5nLXNoYWRvdyksdmFyKC0tdHctc2hhZG93KX0ucmluZywucmluZy0xey0tdHctcmluZy1zaGFkb3c6dmFyKC0tdHctcmluZy1pbnNldCwpMCAwIDAgY2FsYygxcHggKyB2YXIoLS10dy1yaW5nLW9mZnNldC13aWR0aCkpdmFyKC0tdHctcmluZy1jb2xvcixjdXJyZW50Y29sb3IpO2JveC1zaGFkb3c6dmFyKC0tdHctaW5zZXQtc2hhZG93KSx2YXIoLS10dy1pbnNldC1yaW5nLXNoYWRvdyksdmFyKC0tdHctcmluZy1vZmZzZXQtc2hhZG93KSx2YXIoLS10dy1yaW5nLXNoYWRvdyksdmFyKC0tdHctc2hhZG93KX0ucmluZy0yey0tdHctcmluZy1zaGFkb3c6dmFyKC0tdHctcmluZy1pbnNldCwpMCAwIDAgY2FsYygycHggKyB2YXIoLS10dy1yaW5nLW9mZnNldC13aWR0aCkpdmFyKC0tdHctcmluZy1jb2xvcixjdXJyZW50Y29sb3IpO2JveC1zaGFkb3c6dmFyKC0tdHctaW5zZXQtc2hhZG93KSx2YXIoLS10dy1pbnNldC1yaW5nLXNoYWRvdyksdmFyKC0tdHctcmluZy1vZmZzZXQtc2hhZG93KSx2YXIoLS10dy1yaW5nLXNoYWRvdyksdmFyKC0tdHctc2hhZG93KX0uXFtib3gtc2hhZG93XDowXzBfNnB4X3JnYmFcKDc0XCwyMjJcLDEyOFwsMFwuN1wpXF17Ym94LXNoYWRvdzowIDAgNnB4ICM0YWRlODBiM30uXFtib3gtc2hhZG93XDowXzBfNnB4X3JnYmFcKDI0OFwsMTEzXCwxMTNcLDBcLjU1XClcXXtib3gtc2hhZG93OjAgMCA2cHggI2Y4NzE3MThjfS5yaW5nLVxbXCMxYzFjMWVcXXstLXR3LXJpbmctY29sb3I6IzFjMWMxZX0ucmluZy13aGl0ZVwvMTB7LS10dy1yaW5nLWNvbG9yOiNmZmZmZmYxYX1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5yaW5nLXdoaXRlXC8xMHstLXR3LXJpbmctY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTEwJSx0cmFuc3BhcmVudCl9fS5vdXRsaW5le291dGxpbmUtc3R5bGU6dmFyKC0tdHctb3V0bGluZS1zdHlsZSk7b3V0bGluZS13aWR0aDoxcHh9LmJsdXJ7LS10dy1ibHVyOmJsdXIoOHB4KTtmaWx0ZXI6dmFyKC0tdHctYmx1ciwpdmFyKC0tdHctYnJpZ2h0bmVzcywpdmFyKC0tdHctY29udHJhc3QsKXZhcigtLXR3LWdyYXlzY2FsZSwpdmFyKC0tdHctaHVlLXJvdGF0ZSwpdmFyKC0tdHctaW52ZXJ0LCl2YXIoLS10dy1zYXR1cmF0ZSwpdmFyKC0tdHctc2VwaWEsKXZhcigtLXR3LWRyb3Atc2hhZG93LCl9LmdyYXlzY2FsZXstLXR3LWdyYXlzY2FsZTpncmF5c2NhbGUoMTAwJSk7ZmlsdGVyOnZhcigtLXR3LWJsdXIsKXZhcigtLXR3LWJyaWdodG5lc3MsKXZhcigtLXR3LWNvbnRyYXN0LCl2YXIoLS10dy1ncmF5c2NhbGUsKXZhcigtLXR3LWh1ZS1yb3RhdGUsKXZhcigtLXR3LWludmVydCwpdmFyKC0tdHctc2F0dXJhdGUsKXZhcigtLXR3LXNlcGlhLCl2YXIoLS10dy1kcm9wLXNoYWRvdywpfS5maWx0ZXJ7ZmlsdGVyOnZhcigtLXR3LWJsdXIsKXZhcigtLXR3LWJyaWdodG5lc3MsKXZhcigtLXR3LWNvbnRyYXN0LCl2YXIoLS10dy1ncmF5c2NhbGUsKXZhcigtLXR3LWh1ZS1yb3RhdGUsKXZhcigtLXR3LWludmVydCwpdmFyKC0tdHctc2F0dXJhdGUsKXZhcigtLXR3LXNlcGlhLCl2YXIoLS10dy1kcm9wLXNoYWRvdywpfS5iYWNrZHJvcC1ibHVyey0tdHctYmFja2Ryb3AtYmx1cjpibHVyKDhweCk7LXdlYmtpdC1iYWNrZHJvcC1maWx0ZXI6dmFyKC0tdHctYmFja2Ryb3AtYmx1ciwpdmFyKC0tdHctYmFja2Ryb3AtYnJpZ2h0bmVzcywpdmFyKC0tdHctYmFja2Ryb3AtY29udHJhc3QsKXZhcigtLXR3LWJhY2tkcm9wLWdyYXlzY2FsZSwpdmFyKC0tdHctYmFja2Ryb3AtaHVlLXJvdGF0ZSwpdmFyKC0tdHctYmFja2Ryb3AtaW52ZXJ0LCl2YXIoLS10dy1iYWNrZHJvcC1vcGFjaXR5LCl2YXIoLS10dy1iYWNrZHJvcC1zYXR1cmF0ZSwpdmFyKC0tdHctYmFja2Ryb3Atc2VwaWEsKTtiYWNrZHJvcC1maWx0ZXI6dmFyKC0tdHctYmFja2Ryb3AtYmx1ciwpdmFyKC0tdHctYmFja2Ryb3AtYnJpZ2h0bmVzcywpdmFyKC0tdHctYmFja2Ryb3AtY29udHJhc3QsKXZhcigtLXR3LWJhY2tkcm9wLWdyYXlzY2FsZSwpdmFyKC0tdHctYmFja2Ryb3AtaHVlLXJvdGF0ZSwpdmFyKC0tdHctYmFja2Ryb3AtaW52ZXJ0LCl2YXIoLS10dy1iYWNrZHJvcC1vcGFjaXR5LCl2YXIoLS10dy1iYWNrZHJvcC1zYXR1cmF0ZSwpdmFyKC0tdHctYmFja2Ryb3Atc2VwaWEsKX0uYmFja2Ryb3AtYmx1ci1cWzEycHhcXXstLXR3LWJhY2tkcm9wLWJsdXI6Ymx1cigxMnB4KTstd2Via2l0LWJhY2tkcm9wLWZpbHRlcjp2YXIoLS10dy1iYWNrZHJvcC1ibHVyLCl2YXIoLS10dy1iYWNrZHJvcC1icmlnaHRuZXNzLCl2YXIoLS10dy1iYWNrZHJvcC1jb250cmFzdCwpdmFyKC0tdHctYmFja2Ryb3AtZ3JheXNjYWxlLCl2YXIoLS10dy1iYWNrZHJvcC1odWUtcm90YXRlLCl2YXIoLS10dy1iYWNrZHJvcC1pbnZlcnQsKXZhcigtLXR3LWJhY2tkcm9wLW9wYWNpdHksKXZhcigtLXR3LWJhY2tkcm9wLXNhdHVyYXRlLCl2YXIoLS10dy1iYWNrZHJvcC1zZXBpYSwpO2JhY2tkcm9wLWZpbHRlcjp2YXIoLS10dy1iYWNrZHJvcC1ibHVyLCl2YXIoLS10dy1iYWNrZHJvcC1icmlnaHRuZXNzLCl2YXIoLS10dy1iYWNrZHJvcC1jb250cmFzdCwpdmFyKC0tdHctYmFja2Ryb3AtZ3JheXNjYWxlLCl2YXIoLS10dy1iYWNrZHJvcC1odWUtcm90YXRlLCl2YXIoLS10dy1iYWNrZHJvcC1pbnZlcnQsKXZhcigtLXR3LWJhY2tkcm9wLW9wYWNpdHksKXZhcigtLXR3LWJhY2tkcm9wLXNhdHVyYXRlLCl2YXIoLS10dy1iYWNrZHJvcC1zZXBpYSwpfS5iYWNrZHJvcC1ibHVyLVxbMThweFxdey0tdHctYmFja2Ryb3AtYmx1cjpibHVyKDE4cHgpOy13ZWJraXQtYmFja2Ryb3AtZmlsdGVyOnZhcigtLXR3LWJhY2tkcm9wLWJsdXIsKXZhcigtLXR3LWJhY2tkcm9wLWJyaWdodG5lc3MsKXZhcigtLXR3LWJhY2tkcm9wLWNvbnRyYXN0LCl2YXIoLS10dy1iYWNrZHJvcC1ncmF5c2NhbGUsKXZhcigtLXR3LWJhY2tkcm9wLWh1ZS1yb3RhdGUsKXZhcigtLXR3LWJhY2tkcm9wLWludmVydCwpdmFyKC0tdHctYmFja2Ryb3Atb3BhY2l0eSwpdmFyKC0tdHctYmFja2Ryb3Atc2F0dXJhdGUsKXZhcigtLXR3LWJhY2tkcm9wLXNlcGlhLCk7YmFja2Ryb3AtZmlsdGVyOnZhcigtLXR3LWJhY2tkcm9wLWJsdXIsKXZhcigtLXR3LWJhY2tkcm9wLWJyaWdodG5lc3MsKXZhcigtLXR3LWJhY2tkcm9wLWNvbnRyYXN0LCl2YXIoLS10dy1iYWNrZHJvcC1ncmF5c2NhbGUsKXZhcigtLXR3LWJhY2tkcm9wLWh1ZS1yb3RhdGUsKXZhcigtLXR3LWJhY2tkcm9wLWludmVydCwpdmFyKC0tdHctYmFja2Ryb3Atb3BhY2l0eSwpdmFyKC0tdHctYmFja2Ryb3Atc2F0dXJhdGUsKXZhcigtLXR3LWJhY2tkcm9wLXNlcGlhLCl9LmJhY2tkcm9wLWJsdXItbWR7LS10dy1iYWNrZHJvcC1ibHVyOmJsdXIodmFyKC0tYmx1ci1tZCkpOy13ZWJraXQtYmFja2Ryb3AtZmlsdGVyOnZhcigtLXR3LWJhY2tkcm9wLWJsdXIsKXZhcigtLXR3LWJhY2tkcm9wLWJyaWdodG5lc3MsKXZhcigtLXR3LWJhY2tkcm9wLWNvbnRyYXN0LCl2YXIoLS10dy1iYWNrZHJvcC1ncmF5c2NhbGUsKXZhcigtLXR3LWJhY2tkcm9wLWh1ZS1yb3RhdGUsKXZhcigtLXR3LWJhY2tkcm9wLWludmVydCwpdmFyKC0tdHctYmFja2Ryb3Atb3BhY2l0eSwpdmFyKC0tdHctYmFja2Ryb3Atc2F0dXJhdGUsKXZhcigtLXR3LWJhY2tkcm9wLXNlcGlhLCk7YmFja2Ryb3AtZmlsdGVyOnZhcigtLXR3LWJhY2tkcm9wLWJsdXIsKXZhcigtLXR3LWJhY2tkcm9wLWJyaWdodG5lc3MsKXZhcigtLXR3LWJhY2tkcm9wLWNvbnRyYXN0LCl2YXIoLS10dy1iYWNrZHJvcC1ncmF5c2NhbGUsKXZhcigtLXR3LWJhY2tkcm9wLWh1ZS1yb3RhdGUsKXZhcigtLXR3LWJhY2tkcm9wLWludmVydCwpdmFyKC0tdHctYmFja2Ryb3Atb3BhY2l0eSwpdmFyKC0tdHctYmFja2Ryb3Atc2F0dXJhdGUsKXZhcigtLXR3LWJhY2tkcm9wLXNlcGlhLCl9LmJhY2tkcm9wLXNhdHVyYXRlLTE1MHstLXR3LWJhY2tkcm9wLXNhdHVyYXRlOnNhdHVyYXRlKDE1MCUpOy13ZWJraXQtYmFja2Ryb3AtZmlsdGVyOnZhcigtLXR3LWJhY2tkcm9wLWJsdXIsKXZhcigtLXR3LWJhY2tkcm9wLWJyaWdodG5lc3MsKXZhcigtLXR3LWJhY2tkcm9wLWNvbnRyYXN0LCl2YXIoLS10dy1iYWNrZHJvcC1ncmF5c2NhbGUsKXZhcigtLXR3LWJhY2tkcm9wLWh1ZS1yb3RhdGUsKXZhcigtLXR3LWJhY2tkcm9wLWludmVydCwpdmFyKC0tdHctYmFja2Ryb3Atb3BhY2l0eSwpdmFyKC0tdHctYmFja2Ryb3Atc2F0dXJhdGUsKXZhcigtLXR3LWJhY2tkcm9wLXNlcGlhLCk7YmFja2Ryb3AtZmlsdGVyOnZhcigtLXR3LWJhY2tkcm9wLWJsdXIsKXZhcigtLXR3LWJhY2tkcm9wLWJyaWdodG5lc3MsKXZhcigtLXR3LWJhY2tkcm9wLWNvbnRyYXN0LCl2YXIoLS10dy1iYWNrZHJvcC1ncmF5c2NhbGUsKXZhcigtLXR3LWJhY2tkcm9wLWh1ZS1yb3RhdGUsKXZhcigtLXR3LWJhY2tkcm9wLWludmVydCwpdmFyKC0tdHctYmFja2Ryb3Atb3BhY2l0eSwpdmFyKC0tdHctYmFja2Ryb3Atc2F0dXJhdGUsKXZhcigtLXR3LWJhY2tkcm9wLXNlcGlhLCl9LmJhY2tkcm9wLWZpbHRlcnstd2Via2l0LWJhY2tkcm9wLWZpbHRlcjp2YXIoLS10dy1iYWNrZHJvcC1ibHVyLCl2YXIoLS10dy1iYWNrZHJvcC1icmlnaHRuZXNzLCl2YXIoLS10dy1iYWNrZHJvcC1jb250cmFzdCwpdmFyKC0tdHctYmFja2Ryb3AtZ3JheXNjYWxlLCl2YXIoLS10dy1iYWNrZHJvcC1odWUtcm90YXRlLCl2YXIoLS10dy1iYWNrZHJvcC1pbnZlcnQsKXZhcigtLXR3LWJhY2tkcm9wLW9wYWNpdHksKXZhcigtLXR3LWJhY2tkcm9wLXNhdHVyYXRlLCl2YXIoLS10dy1iYWNrZHJvcC1zZXBpYSwpO2JhY2tkcm9wLWZpbHRlcjp2YXIoLS10dy1iYWNrZHJvcC1ibHVyLCl2YXIoLS10dy1iYWNrZHJvcC1icmlnaHRuZXNzLCl2YXIoLS10dy1iYWNrZHJvcC1jb250cmFzdCwpdmFyKC0tdHctYmFja2Ryb3AtZ3JheXNjYWxlLCl2YXIoLS10dy1iYWNrZHJvcC1odWUtcm90YXRlLCl2YXIoLS10dy1iYWNrZHJvcC1pbnZlcnQsKXZhcigtLXR3LWJhY2tkcm9wLW9wYWNpdHksKXZhcigtLXR3LWJhY2tkcm9wLXNhdHVyYXRlLCl2YXIoLS10dy1iYWNrZHJvcC1zZXBpYSwpfS50cmFuc2l0aW9ue3RyYW5zaXRpb24tcHJvcGVydHk6Y29sb3IsYmFja2dyb3VuZC1jb2xvcixib3JkZXItY29sb3Isb3V0bGluZS1jb2xvcix0ZXh0LWRlY29yYXRpb24tY29sb3IsZmlsbCxzdHJva2UsLS10dy1ncmFkaWVudC1mcm9tLC0tdHctZ3JhZGllbnQtdmlhLC0tdHctZ3JhZGllbnQtdG8sb3BhY2l0eSxib3gtc2hhZG93LHRyYW5zZm9ybSx0cmFuc2xhdGUsc2NhbGUscm90YXRlLGZpbHRlciwtd2Via2l0LWJhY2tkcm9wLWZpbHRlcixiYWNrZHJvcC1maWx0ZXIsZGlzcGxheSxjb250ZW50LXZpc2liaWxpdHksb3ZlcmxheSxwb2ludGVyLWV2ZW50czt0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbjp2YXIoLS10dy1lYXNlLHZhcigtLWRlZmF1bHQtdHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb24pKTt0cmFuc2l0aW9uLWR1cmF0aW9uOnZhcigtLXR3LWR1cmF0aW9uLHZhcigtLWRlZmF1bHQtdHJhbnNpdGlvbi1kdXJhdGlvbikpfS50cmFuc2l0aW9uLVxbYm9yZGVyLWNvbG9yXCxiYWNrZ3JvdW5kXF17dHJhbnNpdGlvbi1wcm9wZXJ0eTpib3JkZXItY29sb3IsYmFja2dyb3VuZDt0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbjp2YXIoLS10dy1lYXNlLHZhcigtLWRlZmF1bHQtdHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb24pKTt0cmFuc2l0aW9uLWR1cmF0aW9uOnZhcigtLXR3LWR1cmF0aW9uLHZhcigtLWRlZmF1bHQtdHJhbnNpdGlvbi1kdXJhdGlvbikpfS50cmFuc2l0aW9uLVxbd2lkdGhcLGJhY2tncm91bmRcXXt0cmFuc2l0aW9uLXByb3BlcnR5OndpZHRoLGJhY2tncm91bmQ7dHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb246dmFyKC0tdHctZWFzZSx2YXIoLS1kZWZhdWx0LXRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uKSk7dHJhbnNpdGlvbi1kdXJhdGlvbjp2YXIoLS10dy1kdXJhdGlvbix2YXIoLS1kZWZhdWx0LXRyYW5zaXRpb24tZHVyYXRpb24pKX0udHJhbnNpdGlvbi1jb2xvcnN7dHJhbnNpdGlvbi1wcm9wZXJ0eTpjb2xvcixiYWNrZ3JvdW5kLWNvbG9yLGJvcmRlci1jb2xvcixvdXRsaW5lLWNvbG9yLHRleHQtZGVjb3JhdGlvbi1jb2xvcixmaWxsLHN0cm9rZSwtLXR3LWdyYWRpZW50LWZyb20sLS10dy1ncmFkaWVudC12aWEsLS10dy1ncmFkaWVudC10bzt0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbjp2YXIoLS10dy1lYXNlLHZhcigtLWRlZmF1bHQtdHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb24pKTt0cmFuc2l0aW9uLWR1cmF0aW9uOnZhcigtLXR3LWR1cmF0aW9uLHZhcigtLWRlZmF1bHQtdHJhbnNpdGlvbi1kdXJhdGlvbikpfS50cmFuc2l0aW9uLW9wYWNpdHl7dHJhbnNpdGlvbi1wcm9wZXJ0eTpvcGFjaXR5O3RyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uOnZhcigtLXR3LWVhc2UsdmFyKC0tZGVmYXVsdC10cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbikpO3RyYW5zaXRpb24tZHVyYXRpb246dmFyKC0tdHctZHVyYXRpb24sdmFyKC0tZGVmYXVsdC10cmFuc2l0aW9uLWR1cmF0aW9uKSl9LmR1cmF0aW9uLTE1MHstLXR3LWR1cmF0aW9uOi4xNXM7dHJhbnNpdGlvbi1kdXJhdGlvbjouMTVzfS5kdXJhdGlvbi0yMDB7LS10dy1kdXJhdGlvbjouMnM7dHJhbnNpdGlvbi1kdXJhdGlvbjouMnN9LmR1cmF0aW9uLTMwMHstLXR3LWR1cmF0aW9uOi4zczt0cmFuc2l0aW9uLWR1cmF0aW9uOi4zc30uZWFzZS1vdXR7LS10dy1lYXNlOnZhcigtLWVhc2Utb3V0KTt0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbjp2YXIoLS1lYXNlLW91dCl9Lm91dGxpbmUtbm9uZXstLXR3LW91dGxpbmUtc3R5bGU6bm9uZTtvdXRsaW5lLXN0eWxlOm5vbmV9LnNlbGVjdC1ub25ley13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lfS5zZWxlY3QtdGV4dHstd2Via2l0LXVzZXItc2VsZWN0OnRleHQ7dXNlci1zZWxlY3Q6dGV4dH0uXFstd2Via2l0LWJhY2tkcm9wLWZpbHRlclw6Ymx1clwoMTJweFwpXF17LXdlYmtpdC1iYWNrZHJvcC1maWx0ZXI6Ymx1cigxMnB4KX0uXFtzY3JvbGxiYXItd2lkdGhcOnRoaW5cXXtzY3JvbGxiYXItd2lkdGg6dGhpbn0uXFtzdHJlYW1cOmF2Y2NcXXtzdHJlYW06YXZjY30uXFtzdHJlYW1cOmgyNjRcXXtzdHJlYW06aDI2NH0uXFt0cmFuc2l0aW9uXDpiYWNrZ3JvdW5kXzBcLjJzXCxib3gtc2hhZG93XzBcLjJzXF17dHJhbnNpdGlvbjpiYWNrZ3JvdW5kIC4ycyxib3gtc2hhZG93IC4yc30uXFt0cmFuc2l0aW9uXDpiYWNrZ3JvdW5kXzBcLjNzXF17dHJhbnNpdGlvbjpiYWNrZ3JvdW5kIC4zc30uXFt0cmFuc2l0aW9uXDpiYWNrZ3JvdW5kXzBcLjEyc1wsYm9yZGVyLWNvbG9yXzBcLjEyc1xde3RyYW5zaXRpb246YmFja2dyb3VuZCAuMTJzLGJvcmRlci1jb2xvciAuMTJzfS5cW3RyYW5zaXRpb25cOmJhY2tncm91bmRfMFwuMTJzXCxjb2xvcl8wXC4xMnNcXXt0cmFuc2l0aW9uOmJhY2tncm91bmQgLjEycyxjb2xvciAuMTJzfS5cW3RyYW5zaXRpb25cOmJhY2tncm91bmRfMFwuMTJzXF17dHJhbnNpdGlvbjpiYWNrZ3JvdW5kIC4xMnN9LlxbdHJhbnNpdGlvblw6YmFja2dyb3VuZF8wXC4xNXNcXXt0cmFuc2l0aW9uOmJhY2tncm91bmQgLjE1c30uXFt0cmFuc2l0aW9uXDpiYWNrZ3JvdW5kXzBcLjE1c19lYXNlXCxjb2xvcl8wXC4xNXNfZWFzZVxde3RyYW5zaXRpb246YmFja2dyb3VuZCAuMTVzLGNvbG9yIC4xNXN9LlxbdHJhbnNpdGlvblw6YmFja2dyb3VuZF8wXC4xNXNfZWFzZVxde3RyYW5zaXRpb246YmFja2dyb3VuZCAuMTVzfS5cW3RyYW5zaXRpb25cOmJhY2tncm91bmRfMFwuMThzX2Vhc2VcXXt0cmFuc2l0aW9uOmJhY2tncm91bmQgLjE4c30uXFt0cmFuc2l0aW9uXDpsZWZ0XzBcLjE1c1xde3RyYW5zaXRpb246bGVmdCAuMTVzfS5cW3RyYW5zaXRpb25cOm9wYWNpdHlfMFwuMTJzXCxiYWNrZ3JvdW5kXzBcLjEyc1wsY29sb3JfMFwuMTJzXF17dHJhbnNpdGlvbjpvcGFjaXR5IC4xMnMsYmFja2dyb3VuZCAuMTJzLGNvbG9yIC4xMnN9LlxbdHJhbnNpdGlvblw6b3BhY2l0eV8wXC4xMnNcXXt0cmFuc2l0aW9uOm9wYWNpdHkgLjEyc30uXFt0cmFuc2l0aW9uXDpvcGFjaXR5XzBcLjE1c19lYXNlXCxiYWNrZ3JvdW5kXzBcLjE1c19lYXNlXF17dHJhbnNpdGlvbjpvcGFjaXR5IC4xNXMsYmFja2dyb3VuZCAuMTVzfS5cW3RyYW5zaXRpb25cOm9wYWNpdHlfMFwuMTVzX2Vhc2VcLHRyYW5zZm9ybV8wXC4xNXNfZWFzZVxde3RyYW5zaXRpb246b3BhY2l0eSAuMTVzLHRyYW5zZm9ybSAuMTVzfS5cW3RyYW5zaXRpb25cOm9wYWNpdHlfMFwuMThzX2Vhc2VcXXt0cmFuc2l0aW9uOm9wYWNpdHkgLjE4c30uXFt0cmFuc2l0aW9uXDpwYWRkaW5nXzBcLjI1c19lYXNlXF17dHJhbnNpdGlvbjpwYWRkaW5nIC4yNXN9LlxbdHJhbnNpdGlvblw6dHJhbnNmb3JtXzBcLjI1c19lYXNlXCxvcGFjaXR5XzBcLjJzX2Vhc2VcXXt0cmFuc2l0aW9uOnRyYW5zZm9ybSAuMjVzLG9wYWNpdHkgLjJzfS5cW3RyYW5zaXRpb25cOndpZHRoXzEyMG1zX2xpbmVhclxde3RyYW5zaXRpb246d2lkdGggLjEycyBsaW5lYXJ9Lmdyb3VwLWZvY3VzLXdpdGhpblw6b3BhY2l0eS0wOmlzKDp3aGVyZSguZ3JvdXApOmZvY3VzLXdpdGhpbiAqKXtvcGFjaXR5OjB9QG1lZGlhIChob3Zlcjpob3Zlcil7Lmdyb3VwLWhvdmVyXDpwb2ludGVyLWV2ZW50cy1hdXRvOmlzKDp3aGVyZSguZ3JvdXApOmhvdmVyICope3BvaW50ZXItZXZlbnRzOmF1dG99fUBtZWRpYSAoaG92ZXI6aG92ZXIpey5ncm91cC1ob3Zlclw6aGlkZGVuOmlzKDp3aGVyZSguZ3JvdXApOmhvdmVyICope2Rpc3BsYXk6bm9uZX19QG1lZGlhIChob3Zlcjpob3Zlcil7Lmdyb3VwLWhvdmVyXDp0cmFuc2xhdGUteC0wOmlzKDp3aGVyZSguZ3JvdXApOmhvdmVyICopey0tdHctdHJhbnNsYXRlLXg6Y2FsYyh2YXIoLS1zcGFjaW5nKSowKTt0cmFuc2xhdGU6dmFyKC0tdHctdHJhbnNsYXRlLXgpdmFyKC0tdHctdHJhbnNsYXRlLXkpfX1AbWVkaWEgKGhvdmVyOmhvdmVyKXsuZ3JvdXAtaG92ZXJcOm9wYWNpdHktMDppcyg6d2hlcmUoLmdyb3VwKTpob3ZlciAqKXtvcGFjaXR5OjB9fUBtZWRpYSAoaG92ZXI6aG92ZXIpey5ncm91cC1ob3Zlclw6b3BhY2l0eS0xMDA6aXMoOndoZXJlKC5ncm91cCk6aG92ZXIgKil7b3BhY2l0eToxfX0ucGxhY2Vob2xkZXJcOnRleHQtd2hpdGVcLzQwOjpwbGFjZWhvbGRlcntjb2xvcjojZmZmNn1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5wbGFjZWhvbGRlclw6dGV4dC13aGl0ZVwvNDA6OnBsYWNlaG9sZGVye2NvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk0MCUsdHJhbnNwYXJlbnQpfX0uZm9jdXMtd2l0aGluXDpiZy13aGl0ZVwvMTA6Zm9jdXMtd2l0aGlue2JhY2tncm91bmQtY29sb3I6I2ZmZmZmZjFhfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmZvY3VzLXdpdGhpblw6Ymctd2hpdGVcLzEwOmZvY3VzLXdpdGhpbntiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSkxMCUsdHJhbnNwYXJlbnQpfX1AbWVkaWEgKGhvdmVyOmhvdmVyKXsuaG92ZXJcOmJvcmRlci1cW3JnYmFcKDI1NVwsMjU1XCwyNTVcLDBcLjE2XClcXTpob3Zlcntib3JkZXItY29sb3I6I2ZmZmZmZjI5fX1AbWVkaWEgKGhvdmVyOmhvdmVyKXsuaG92ZXJcOmJvcmRlci1cW3JnYmFcKDI1NVwsMjU1XCwyNTVcLDBcLjE4XClcXTpob3Zlcntib3JkZXItY29sb3I6I2ZmZmZmZjJlfX1AbWVkaWEgKGhvdmVyOmhvdmVyKXsuaG92ZXJcOmJvcmRlci13aGl0ZVwvMjA6aG92ZXJ7Ym9yZGVyLWNvbG9yOiNmZmYzfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmhvdmVyXDpib3JkZXItd2hpdGVcLzIwOmhvdmVye2JvcmRlci1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpMjAlLHRyYW5zcGFyZW50KX19fUBtZWRpYSAoaG92ZXI6aG92ZXIpey5ob3Zlclw6Ym9yZGVyLXdoaXRlXC9cWzBcLjg4XF06aG92ZXJ7Ym9yZGVyLWNvbG9yOiNmZmZmZmZlMH1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5ob3Zlclw6Ym9yZGVyLXdoaXRlXC9cWzBcLjg4XF06aG92ZXJ7Ym9yZGVyLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk4OCUsdHJhbnNwYXJlbnQpfX19QG1lZGlhIChob3Zlcjpob3Zlcil7LmhvdmVyXDpiZy13aGl0ZVwvODpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiNmZmZmZmYxNH1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5ob3Zlclw6Ymctd2hpdGVcLzg6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpOCUsdHJhbnNwYXJlbnQpfX19QG1lZGlhIChob3Zlcjpob3Zlcil7LmhvdmVyXDpiZy13aGl0ZVwvMTI6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmMWZ9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuaG92ZXJcOmJnLXdoaXRlXC8xMjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSkxMiUsdHJhbnNwYXJlbnQpfX19QG1lZGlhIChob3Zlcjpob3Zlcil7LmhvdmVyXDpiZy13aGl0ZVwvMTg6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmMmV9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuaG92ZXJcOmJnLXdoaXRlXC8xODpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSkxOCUsdHJhbnNwYXJlbnQpfX19QG1lZGlhIChob3Zlcjpob3Zlcil7LmhvdmVyXDpiZy13aGl0ZVwvMjA6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojZmZmM31Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5ob3Zlclw6Ymctd2hpdGVcLzIwOmhvdmVye2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTIwJSx0cmFuc3BhcmVudCl9fX1AbWVkaWEgKGhvdmVyOmhvdmVyKXsuaG92ZXJcOmJnLXdoaXRlXC8yNTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiNmZmZmZmY0MH1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5ob3Zlclw6Ymctd2hpdGVcLzI1OmhvdmVye2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTI1JSx0cmFuc3BhcmVudCl9fX1AbWVkaWEgKGhvdmVyOmhvdmVyKXsuaG92ZXJcOmJnLXdoaXRlXC9cWzBcLjA1XF06aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmMGR9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuaG92ZXJcOmJnLXdoaXRlXC9cWzBcLjA1XF06aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpNSUsdHJhbnNwYXJlbnQpfX19QG1lZGlhIChob3Zlcjpob3Zlcil7LmhvdmVyXDpiZy13aGl0ZVwvXFswXC4wNlxdOmhvdmVye2JhY2tncm91bmQtY29sb3I6I2ZmZmZmZjBmfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmhvdmVyXDpiZy13aGl0ZVwvXFswXC4wNlxdOmhvdmVye2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTYlLHRyYW5zcGFyZW50KX19fUBtZWRpYSAoaG92ZXI6aG92ZXIpey5ob3Zlclw6Ymctd2hpdGVcL1xbMFwuMDdcXTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiNmZmZmZmYxMn1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5ob3Zlclw6Ymctd2hpdGVcL1xbMFwuMDdcXTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk3LjAlLHRyYW5zcGFyZW50KX19fUBtZWRpYSAoaG92ZXI6aG92ZXIpey5ob3Zlclw6Ymctd2hpdGVcL1xbMFwuMDlcXTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiNmZmZmZmYxN31Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5ob3Zlclw6Ymctd2hpdGVcL1xbMFwuMDlcXTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk5JSx0cmFuc3BhcmVudCl9fX1AbWVkaWEgKGhvdmVyOmhvdmVyKXsuaG92ZXJcOmJnLXdoaXRlXC9cWzBcLjg4XF06aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmZTB9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuaG92ZXJcOmJnLXdoaXRlXC9cWzBcLjg4XF06aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpODglLHRyYW5zcGFyZW50KX19fUBtZWRpYSAoaG92ZXI6aG92ZXIpey5ob3Zlclw6dGV4dC1cW1wjMGEwYTBjXF06aG92ZXJ7Y29sb3I6IzBhMGEwY319QG1lZGlhIChob3Zlcjpob3Zlcil7LmhvdmVyXDp0ZXh0LXdoaXRlOmhvdmVye2NvbG9yOnZhcigtLWNvbG9yLXdoaXRlKX19QG1lZGlhIChob3Zlcjpob3Zlcil7LmhvdmVyXDp0ZXh0LXdoaXRlXC84NTpob3Zlcntjb2xvcjojZmZmZmZmZDl9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuaG92ZXJcOnRleHQtd2hpdGVcLzg1OmhvdmVye2NvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk4NSUsdHJhbnNwYXJlbnQpfX19QG1lZGlhIChob3Zlcjpob3Zlcil7LmhvdmVyXDp0ZXh0LXdoaXRlXC85MDpob3Zlcntjb2xvcjojZmZmZmZmZTZ9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuaG92ZXJcOnRleHQtd2hpdGVcLzkwOmhvdmVye2NvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk5MCUsdHJhbnNwYXJlbnQpfX19LmZvY3VzXDpib3JkZXItXFtyZ2JhXCgyNTVcLDI1NVwsMjU1XCwwXC4yNFwpXF06Zm9jdXN7Ym9yZGVyLWNvbG9yOiNmZmZmZmYzZH0uZm9jdXNcOmJnLXdoaXRlXC9cWzBcLjA4XF06Zm9jdXN7YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmMTR9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuZm9jdXNcOmJnLXdoaXRlXC9cWzBcLjA4XF06Zm9jdXN7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpOCUsdHJhbnNwYXJlbnQpfX0uZm9jdXNcOm91dGxpbmUtbm9uZTpmb2N1c3stLXR3LW91dGxpbmUtc3R5bGU6bm9uZTtvdXRsaW5lLXN0eWxlOm5vbmV9LmZvY3VzLXZpc2libGVcOmJnLXdoaXRlXC84OmZvY3VzLXZpc2libGV7YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmMTR9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuZm9jdXMtdmlzaWJsZVw6Ymctd2hpdGVcLzg6Zm9jdXMtdmlzaWJsZXtiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk4JSx0cmFuc3BhcmVudCl9fS5mb2N1cy12aXNpYmxlXDpvcGFjaXR5LTEwMDpmb2N1cy12aXNpYmxle29wYWNpdHk6MX0uZm9jdXMtdmlzaWJsZVw6XFtvdXRsaW5lXDoxXC41cHhfc29saWRfcmdiYVwoMTBcLDEzMlwsMjU1XCwwXC41NVwpXF06Zm9jdXMtdmlzaWJsZXtvdXRsaW5lOjEuNXB4IHNvbGlkICMwYTg0ZmY4Y30uZm9jdXMtdmlzaWJsZVw6b3V0bGluZTpmb2N1cy12aXNpYmxle291dGxpbmUtc3R5bGU6dmFyKC0tdHctb3V0bGluZS1zdHlsZSk7b3V0bGluZS13aWR0aDoxcHh9LmZvY3VzLXZpc2libGVcOm91dGxpbmUtMjpmb2N1cy12aXNpYmxle291dGxpbmUtc3R5bGU6dmFyKC0tdHctb3V0bGluZS1zdHlsZSk7b3V0bGluZS13aWR0aDoycHh9LmZvY3VzLXZpc2libGVcOm91dGxpbmUtb2Zmc2V0LTI6Zm9jdXMtdmlzaWJsZXtvdXRsaW5lLW9mZnNldDoycHh9LmZvY3VzLXZpc2libGVcOm91dGxpbmUtb2Zmc2V0LTQ6Zm9jdXMtdmlzaWJsZXtvdXRsaW5lLW9mZnNldDo0cHh9LmZvY3VzLXZpc2libGVcOm91dGxpbmUtd2hpdGVcLzYwOmZvY3VzLXZpc2libGV7b3V0bGluZS1jb2xvcjojZmZmOX1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5mb2N1cy12aXNpYmxlXDpvdXRsaW5lLXdoaXRlXC82MDpmb2N1cy12aXNpYmxle291dGxpbmUtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTYwJSx0cmFuc3BhcmVudCl9fS5hY3RpdmVcOnNjYWxlLVxbMFwuOTdcXTphY3RpdmV7c2NhbGU6Ljk3fUBtZWRpYSAoaG92ZXI6aG92ZXIpey5lbmFibGVkXDpob3Zlclw6Ym9yZGVyLVxbcmdiYVwoMjU1XCwyNTVcLDI1NVwsMFwuMThcKVxdOmVuYWJsZWQ6aG92ZXJ7Ym9yZGVyLWNvbG9yOiNmZmZmZmYyZX19QG1lZGlhIChob3Zlcjpob3Zlcil7LmVuYWJsZWRcOmhvdmVyXDpib3JkZXItd2hpdGVcLzIwOmVuYWJsZWQ6aG92ZXJ7Ym9yZGVyLWNvbG9yOiNmZmYzfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmVuYWJsZWRcOmhvdmVyXDpib3JkZXItd2hpdGVcLzIwOmVuYWJsZWQ6aG92ZXJ7Ym9yZGVyLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSkyMCUsdHJhbnNwYXJlbnQpfX19QG1lZGlhIChob3Zlcjpob3Zlcil7LmVuYWJsZWRcOmhvdmVyXDpib3JkZXItd2hpdGVcL1xbMFwuODhcXTplbmFibGVkOmhvdmVye2JvcmRlci1jb2xvcjojZmZmZmZmZTB9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuZW5hYmxlZFw6aG92ZXJcOmJvcmRlci13aGl0ZVwvXFswXC44OFxdOmVuYWJsZWQ6aG92ZXJ7Ym9yZGVyLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk4OCUsdHJhbnNwYXJlbnQpfX19QG1lZGlhIChob3Zlcjpob3Zlcil7LmVuYWJsZWRcOmhvdmVyXDpiZy1cW1wjMmEyYTJjXF06ZW5hYmxlZDpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiMyYTJhMmN9fUBtZWRpYSAoaG92ZXI6aG92ZXIpey5lbmFibGVkXDpob3Zlclw6Ymctd2hpdGVcL1xbMFwuMDZcXTplbmFibGVkOmhvdmVye2JhY2tncm91bmQtY29sb3I6I2ZmZmZmZjBmfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmVuYWJsZWRcOmhvdmVyXDpiZy13aGl0ZVwvXFswXC4wNlxdOmVuYWJsZWQ6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpNiUsdHJhbnNwYXJlbnQpfX19QG1lZGlhIChob3Zlcjpob3Zlcil7LmVuYWJsZWRcOmhvdmVyXDpiZy13aGl0ZVwvXFswXC4wOVxdOmVuYWJsZWQ6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmMTd9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuZW5hYmxlZFw6aG92ZXJcOmJnLXdoaXRlXC9cWzBcLjA5XF06ZW5hYmxlZDpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk5JSx0cmFuc3BhcmVudCl9fX1AbWVkaWEgKGhvdmVyOmhvdmVyKXsuZW5hYmxlZFw6aG92ZXJcOmJnLXdoaXRlXC9cWzBcLjIyXF06ZW5hYmxlZDpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiNmZmZmZmYzOH1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5lbmFibGVkXDpob3Zlclw6Ymctd2hpdGVcL1xbMFwuMjJcXTplbmFibGVkOmhvdmVye2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTIyJSx0cmFuc3BhcmVudCl9fX1AbWVkaWEgKGhvdmVyOmhvdmVyKXsuZW5hYmxlZFw6aG92ZXJcOmJnLXdoaXRlXC9cWzBcLjg4XF06ZW5hYmxlZDpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiNmZmZmZmZlMH1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5lbmFibGVkXDpob3Zlclw6Ymctd2hpdGVcL1xbMFwuODhcXTplbmFibGVkOmhvdmVye2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTg4JSx0cmFuc3BhcmVudCl9fX1AbWVkaWEgKGhvdmVyOmhvdmVyKXsuZW5hYmxlZFw6aG92ZXJcOnRleHQtXFtcIzBhMGEwY1xdOmVuYWJsZWQ6aG92ZXJ7Y29sb3I6IzBhMGEwY319QG1lZGlhIChob3Zlcjpob3Zlcil7LmVuYWJsZWRcOmhvdmVyXDp0ZXh0LXdoaXRlOmVuYWJsZWQ6aG92ZXJ7Y29sb3I6dmFyKC0tY29sb3Itd2hpdGUpfX1AbWVkaWEgKGhvdmVyOmhvdmVyKXsuZW5hYmxlZFw6aG92ZXJcOmJyaWdodG5lc3MtXFsxXC4wOFxdOmVuYWJsZWQ6aG92ZXJ7LS10dy1icmlnaHRuZXNzOmJyaWdodG5lc3MoMS4wOCk7ZmlsdGVyOnZhcigtLXR3LWJsdXIsKXZhcigtLXR3LWJyaWdodG5lc3MsKXZhcigtLXR3LWNvbnRyYXN0LCl2YXIoLS10dy1ncmF5c2NhbGUsKXZhcigtLXR3LWh1ZS1yb3RhdGUsKXZhcigtLXR3LWludmVydCwpdmFyKC0tdHctc2F0dXJhdGUsKXZhcigtLXR3LXNlcGlhLCl2YXIoLS10dy1kcm9wLXNoYWRvdywpfX0uZGlzYWJsZWRcOmN1cnNvci1kZWZhdWx0OmRpc2FibGVke2N1cnNvcjpkZWZhdWx0fS5kaXNhYmxlZFw6Y3Vyc29yLW5vdC1hbGxvd2VkOmRpc2FibGVke2N1cnNvcjpub3QtYWxsb3dlZH0uZGlzYWJsZWRcOnRleHQtd2hpdGVcLzQwOmRpc2FibGVke2NvbG9yOiNmZmY2fUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmRpc2FibGVkXDp0ZXh0LXdoaXRlXC80MDpkaXNhYmxlZHtjb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpNDAlLHRyYW5zcGFyZW50KX19LmRpc2FibGVkXDpvcGFjaXR5LTQwOmRpc2FibGVke29wYWNpdHk6LjR9LmRpc2FibGVkXDpvcGFjaXR5LTUwOmRpc2FibGVke29wYWNpdHk6LjV9QG1lZGlhIChtYXgtd2lkdGg6ODk5Ljk5OXB4KXsubWF4LVxbOTAwcHhcXVw6aGlkZGVue2Rpc3BsYXk6bm9uZX19LlxbXCZcOlw6LW1vei1yYW5nZS1wcm9ncmVzc1xdXDpoLVxbNHB4XF06Oi1tb3otcmFuZ2UtcHJvZ3Jlc3N7aGVpZ2h0OjRweH0uXFtcJlw6XDotbW96LXJhbmdlLXByb2dyZXNzXF1cOnJvdW5kZWQtZnVsbDo6LW1vei1yYW5nZS1wcm9ncmVzc3tib3JkZXItcmFkaXVzOjMuNDAyODJlMzhweH0uXFtcJlw6XDotbW96LXJhbmdlLXByb2dyZXNzXF1cOmJnLVxbdmFyXCgtLXNsaWRlci1maWxsLWNvbG9yXClcXTo6LW1vei1yYW5nZS1wcm9ncmVzc3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLXNsaWRlci1maWxsLWNvbG9yKX0uXFtcJlw6XDotbW96LXJhbmdlLXRodW1iXF1cOnNpemUtXFsxM3B4XF06Oi1tb3otcmFuZ2UtdGh1bWJ7d2lkdGg6MTNweDtoZWlnaHQ6MTNweH0uXFtcJlw6XDotbW96LXJhbmdlLXRodW1iXF1cOnJvdW5kZWQtZnVsbDo6LW1vei1yYW5nZS10aHVtYntib3JkZXItcmFkaXVzOjMuNDAyODJlMzhweH0uXFtcJlw6XDotbW96LXJhbmdlLXRodW1iXF1cOmJvcmRlci1ub25lOjotbW96LXJhbmdlLXRodW1iey0tdHctYm9yZGVyLXN0eWxlOm5vbmU7Ym9yZGVyLXN0eWxlOm5vbmV9LlxbXCZcOlw6LW1vei1yYW5nZS10aHVtYlxdXDpiZy13aGl0ZTo6LW1vei1yYW5nZS10aHVtYntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNvbG9yLXdoaXRlKX0uXFtcJlw6XDotbW96LXJhbmdlLXRyYWNrXF1cOmgtXFs0cHhcXTo6LW1vei1yYW5nZS10cmFja3toZWlnaHQ6NHB4fS5cW1wmXDpcOi1tb3otcmFuZ2UtdHJhY2tcXVw6cm91bmRlZC1mdWxsOjotbW96LXJhbmdlLXRyYWNre2JvcmRlci1yYWRpdXM6My40MDI4MmUzOHB4fS5cW1wmXDpcOi1tb3otcmFuZ2UtdHJhY2tcXVw6Ymctd2hpdGVcLzIwOjotbW96LXJhbmdlLXRyYWNre2JhY2tncm91bmQtY29sb3I6I2ZmZjN9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuXFtcJlw6XDotbW96LXJhbmdlLXRyYWNrXF1cOmJnLXdoaXRlXC8yMDo6LW1vei1yYW5nZS10cmFja3tiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSkyMCUsdHJhbnNwYXJlbnQpfX0uXFtcJlw6XDotd2Via2l0LXNsaWRlci1ydW5uYWJsZS10cmFja1xdXDpoLVxbNHB4XF06Oi13ZWJraXQtc2xpZGVyLXJ1bm5hYmxlLXRyYWNre2hlaWdodDo0cHh9LlxbXCZcOlw6LXdlYmtpdC1zbGlkZXItcnVubmFibGUtdHJhY2tcXVw6cm91bmRlZC1mdWxsOjotd2Via2l0LXNsaWRlci1ydW5uYWJsZS10cmFja3tib3JkZXItcmFkaXVzOjMuNDAyODJlMzhweH0uXFtcJlw6XDotd2Via2l0LXNsaWRlci1ydW5uYWJsZS10cmFja1xdXDpcW2JhY2tncm91bmRcOmxpbmVhci1ncmFkaWVudFwodG9fcmlnaHRcLHZhclwoLS1zbGlkZXItZmlsbC1jb2xvclwpX3ZhclwoLS1zbGlkZXItZmlsbFwpXCxyZ2JhXCgyNTVcLDI1NVwsMjU1XCwwXC4yMlwpX3ZhclwoLS1zbGlkZXItZmlsbFwpXClcXTo6LXdlYmtpdC1zbGlkZXItcnVubmFibGUtdHJhY2t7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsdmFyKC0tc2xpZGVyLWZpbGwtY29sb3IpdmFyKC0tc2xpZGVyLWZpbGwpLCNmZmZmZmYzOCB2YXIoLS1zbGlkZXItZmlsbCkpfS5cW1wmXDpcOi13ZWJraXQtc2xpZGVyLXRodW1iXF1cOi1tdC1cWzRcLjVweFxdOjotd2Via2l0LXNsaWRlci10aHVtYnttYXJnaW4tdG9wOi00LjVweH0uXFtcJlw6XDotd2Via2l0LXNsaWRlci10aHVtYlxdXDpzaXplLVxbMTNweFxdOjotd2Via2l0LXNsaWRlci10aHVtYnt3aWR0aDoxM3B4O2hlaWdodDoxM3B4fS5cW1wmXDpcOi13ZWJraXQtc2xpZGVyLXRodW1iXF1cOmFwcGVhcmFuY2Utbm9uZTo6LXdlYmtpdC1zbGlkZXItdGh1bWJ7YXBwZWFyYW5jZTpub25lfS5cW1wmXDpcOi13ZWJraXQtc2xpZGVyLXRodW1iXF1cOnJvdW5kZWQtZnVsbDo6LXdlYmtpdC1zbGlkZXItdGh1bWJ7Ym9yZGVyLXJhZGl1czozLjQwMjgyZTM4cHh9LlxbXCZcOlw6LXdlYmtpdC1zbGlkZXItdGh1bWJcXVw6Ymctd2hpdGU6Oi13ZWJraXQtc2xpZGVyLXRodW1ie2JhY2tncm91bmQtY29sb3I6dmFyKC0tY29sb3Itd2hpdGUpfS5cW1wmXDpcOi13ZWJraXQtc2xpZGVyLXRodW1iXF1cOnNoYWRvdy1cWzBfMXB4XzNweF9yZ2JhXCgwXCwwXCwwXCwwXC40NVwpXF06Oi13ZWJraXQtc2xpZGVyLXRodW1iey0tdHctc2hhZG93OjAgMXB4IDNweCB2YXIoLS10dy1zaGFkb3ctY29sb3IsIzAwMDAwMDczKTtib3gtc2hhZG93OnZhcigtLXR3LWluc2V0LXNoYWRvdyksdmFyKC0tdHctaW5zZXQtcmluZy1zaGFkb3cpLHZhcigtLXR3LXJpbmctb2Zmc2V0LXNoYWRvdyksdmFyKC0tdHctcmluZy1zaGFkb3cpLHZhcigtLXR3LXNoYWRvdyl9LlxbXCZcOmRpc2FibGVkXDpcOi1tb3otcmFuZ2UtdGh1bWJcXVw6Ymctd2hpdGVcLzUwOmRpc2FibGVkOjotbW96LXJhbmdlLXRodW1ie2JhY2tncm91bmQtY29sb3I6I2ZmZmZmZjgwfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LlxbXCZcOmRpc2FibGVkXDpcOi1tb3otcmFuZ2UtdGh1bWJcXVw6Ymctd2hpdGVcLzUwOmRpc2FibGVkOjotbW96LXJhbmdlLXRodW1ie2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTUwJSx0cmFuc3BhcmVudCl9fS5cW1wmXDpkaXNhYmxlZFw6XDotd2Via2l0LXNsaWRlci10aHVtYlxdXDpiZy13aGl0ZVwvNTA6ZGlzYWJsZWQ6Oi13ZWJraXQtc2xpZGVyLXRodW1ie2JhY2tncm91bmQtY29sb3I6I2ZmZmZmZjgwfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LlxbXCZcOmRpc2FibGVkXDpcOi13ZWJraXQtc2xpZGVyLXRodW1iXF1cOmJnLXdoaXRlXC81MDpkaXNhYmxlZDo6LXdlYmtpdC1zbGlkZXItdGh1bWJ7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpNTAlLHRyYW5zcGFyZW50KX19fTpyb290ey0tYnVuY3NzLWxpZ2h0OiA7LS1idW5jc3MtZGFyazppbml0aWFsO2NvbG9yLXNjaGVtZTpkYXJrOy0tc2VydmUtc2ltLXBhbmVsLWJnOiMxODE4MTg7LS1zZXJ2ZS1zaW0tcGFuZWwtYmctdHJhbnNsdWNlbnQ6IzE4MTgxOGM3Oy0tc2VydmUtc2ltLXBhbmVsLWJnLXRyYW5zcGFyZW50OiMxODE4MTgwMH1Ac3VwcG9ydHMgKGludGVycG9sYXRlLXNpemU6IGFsbG93LWtleXdvcmRzKXs6cm9vdHtpbnRlcnBvbGF0ZS1zaXplOmFsbG93LWtleXdvcmRzfX1kZXRhaWxzLmxlbS1zZWN0aW9uOjpkZXRhaWxzLWNvbnRlbnR7b3ZlcmZsb3c6Y2xpcDt0cmFuc2l0aW9uOmhlaWdodCAuMjJzIGVhc2UsY29udGVudC12aXNpYmlsaXR5IC4yMnMgYWxsb3ctZGlzY3JldGU7aGVpZ2h0OjB9ZGV0YWlscy5sZW0tc2VjdGlvbltvcGVuXTo6ZGV0YWlscy1jb250ZW50e2hlaWdodDphdXRvfWRldGFpbHMubGVtLXNlY3Rpb24+c3VtbWFyeXtsaXN0LXN0eWxlOm5vbmV9ZGV0YWlscy5sZW0tc2VjdGlvbj5zdW1tYXJ5Ojotd2Via2l0LWRldGFpbHMtbWFya2Vye2Rpc3BsYXk6bm9uZX1kZXRhaWxzLmxlbS1zZWN0aW9uPnN1bW1hcnk6aG92ZXJ7Y29sb3I6I2ZmZn1kZXRhaWxzLmxlbS1zZWN0aW9uPnN1bW1hcnk6aG92ZXIgLmxlbS1jaGV2cm9ue2NvbG9yOiNmZmZmZmZkOSFpbXBvcnRhbnR9LmxlbS1jaGV2cm9ue3RyYW5zZm9ybS1vcmlnaW46Y2VudGVyO3RyYW5zaXRpb246dHJhbnNmb3JtIC4xNnMsY29sb3IgLjEyc31AY29udGFpbmVyICh3aWR0aDw9MjEwcHgpe1tkYXRhLWxvY2F0aW9uLXN0YXR1cy10b3RhbF17ZGlzcGxheTpub25lfX1Aa2V5ZnJhbWVzIGdyaWQtc3Bpbnt0b3t0cmFuc2Zvcm06cm90YXRlKDM2MGRlZyl9fUBrZXlmcmFtZXMgc2VydmUtc2ltLXRvYXN0LWluZGV0ZXJtaW5hdGV7MCV7dHJhbnNmb3JtOnRyYW5zbGF0ZSgtMTAwJSl9dG97dHJhbnNmb3JtOnRyYW5zbGF0ZSgyNTAlKX19QGtleWZyYW1lcyBzZXJ2ZS1zaW0tdG9hc3QtcG9wLWluezAle29wYWNpdHk6MDt0cmFuc2Zvcm06dHJhbnNsYXRlWSgxMnB4KXNjYWxlKC45Nil9dG97b3BhY2l0eToxO3RyYW5zZm9ybTp0cmFuc2xhdGVZKDApc2NhbGUoMSl9fUBrZXlmcmFtZXMgc2VydmUtc2ltLXRvYXN0LXBvcC1vdXR7MCV7b3BhY2l0eToxO3RyYW5zZm9ybTp0cmFuc2xhdGVZKDApc2NhbGUoMSl9dG97b3BhY2l0eTowO3RyYW5zZm9ybTp0cmFuc2xhdGVZKDhweClzY2FsZSguOTYpfX0uc2VydmUtc2ltLXRvYXN0LWluZGV0ZXJtaW5hdGV7YW5pbWF0aW9uOnNlcnZlLXNpbS10b2FzdC1pbmRldGVybWluYXRlIDEuMXMgZWFzZS1pbi1vdXQgaW5maW5pdGV9LmdyaWQtc2h1dGRvd24tYnRue29wYWNpdHk6MDt0cmFuc2l0aW9uOm9wYWNpdHkgLjEycyxiYWNrZ3JvdW5kIC4xMnMsY29sb3IgLjEyc30uZ3JpZC10aWxlOmhvdmVyIC5ncmlkLXNodXRkb3duLWJ0bntvcGFjaXR5OjF9LmdyaWQtc2h1dGRvd24tYnRuOmhvdmVyOm5vdCg6ZGlzYWJsZWQpe2NvbG9yOiNmZmY7YmFja2dyb3VuZDojNWExZDFkO2JvcmRlci1jb2xvcjojYTMzfS5ncmlkLXRpbGU6aG92ZXJ7Ym9yZGVyLWNvbG9yOiM1NTUhaW1wb3J0YW50fUBwcm9wZXJ0eSAtLXR3LXRyYW5zbGF0ZS14e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2U7aW5pdGlhbC12YWx1ZTowfUBwcm9wZXJ0eSAtLXR3LXRyYW5zbGF0ZS15e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2U7aW5pdGlhbC12YWx1ZTowfUBwcm9wZXJ0eSAtLXR3LXRyYW5zbGF0ZS16e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2U7aW5pdGlhbC12YWx1ZTowfUBwcm9wZXJ0eSAtLXR3LXJvdGF0ZS14e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctcm90YXRlLXl7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1yb3RhdGUtentzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LXNrZXcteHtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LXNrZXcteXtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LWJvcmRlci1zdHlsZXtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlO2luaXRpYWwtdmFsdWU6c29saWR9QHByb3BlcnR5IC0tdHctbGVhZGluZ3tzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LWZvbnQtd2VpZ2h0e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctdHJhY2tpbmd7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1vcmRpbmFse3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctc2xhc2hlZC16ZXJve3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctbnVtZXJpYy1maWd1cmV7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1udW1lcmljLXNwYWNpbmd7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1udW1lcmljLWZyYWN0aW9ue3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctc2hhZG93e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2U7aW5pdGlhbC12YWx1ZTowIDAgIzAwMDB9QHByb3BlcnR5IC0tdHctc2hhZG93LWNvbG9ye3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctc2hhZG93LWFscGhhe3N5bnRheDoiPHBlcmNlbnRhZ2U+Ijtpbmhlcml0czpmYWxzZTtpbml0aWFsLXZhbHVlOjEwMCV9QHByb3BlcnR5IC0tdHctaW5zZXQtc2hhZG93e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2U7aW5pdGlhbC12YWx1ZTowIDAgIzAwMDB9QHByb3BlcnR5IC0tdHctaW5zZXQtc2hhZG93LWNvbG9ye3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctaW5zZXQtc2hhZG93LWFscGhhe3N5bnRheDoiPHBlcmNlbnRhZ2U+Ijtpbmhlcml0czpmYWxzZTtpbml0aWFsLXZhbHVlOjEwMCV9QHByb3BlcnR5IC0tdHctcmluZy1jb2xvcntzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LXJpbmctc2hhZG93e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2U7aW5pdGlhbC12YWx1ZTowIDAgIzAwMDB9QHByb3BlcnR5IC0tdHctaW5zZXQtcmluZy1jb2xvcntzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LWluc2V0LXJpbmctc2hhZG93e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2U7aW5pdGlhbC12YWx1ZTowIDAgIzAwMDB9QHByb3BlcnR5IC0tdHctcmluZy1pbnNldHtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LXJpbmctb2Zmc2V0LXdpZHRoe3N5bnRheDoiPGxlbmd0aD4iO2luaGVyaXRzOmZhbHNlO2luaXRpYWwtdmFsdWU6MH1AcHJvcGVydHkgLS10dy1yaW5nLW9mZnNldC1jb2xvcntzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlO2luaXRpYWwtdmFsdWU6I2ZmZn1AcHJvcGVydHkgLS10dy1yaW5nLW9mZnNldC1zaGFkb3d7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZTtpbml0aWFsLXZhbHVlOjAgMCAjMDAwMH1AcHJvcGVydHkgLS10dy1vdXRsaW5lLXN0eWxle3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2U7aW5pdGlhbC12YWx1ZTpzb2xpZH1AcHJvcGVydHkgLS10dy1ibHVye3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctYnJpZ2h0bmVzc3tzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LWNvbnRyYXN0e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctZ3JheXNjYWxle3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctaHVlLXJvdGF0ZXtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LWludmVydHtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LW9wYWNpdHl7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1zYXR1cmF0ZXtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LXNlcGlhe3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctZHJvcC1zaGFkb3d7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1kcm9wLXNoYWRvdy1jb2xvcntzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LWRyb3Atc2hhZG93LWFscGhhe3N5bnRheDoiPHBlcmNlbnRhZ2U+Ijtpbmhlcml0czpmYWxzZTtpbml0aWFsLXZhbHVlOjEwMCV9QHByb3BlcnR5IC0tdHctZHJvcC1zaGFkb3ctc2l6ZXtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LWJhY2tkcm9wLWJsdXJ7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1iYWNrZHJvcC1icmlnaHRuZXNze3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctYmFja2Ryb3AtY29udHJhc3R7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1iYWNrZHJvcC1ncmF5c2NhbGV7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1iYWNrZHJvcC1odWUtcm90YXRle3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctYmFja2Ryb3AtaW52ZXJ0e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctYmFja2Ryb3Atb3BhY2l0eXtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LWJhY2tkcm9wLXNhdHVyYXRle3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctYmFja2Ryb3Atc2VwaWF7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1kdXJhdGlvbntzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LWVhc2V7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AbGF5ZXIgcHJvcGVydGllc3tAc3VwcG9ydHMgKCgtd2Via2l0LWh5cGhlbnM6IG5vbmUpIGFuZCAoIG5vdCAobWFyZ2luLXRyaW06IGlubGluZSkpKSBvciAoKC1tb3otb3JpZW50OiBpbmxpbmUpIGFuZCAoIG5vdCAoY29sb3I6cmdiKGZyb20gcmVkIHIgZyBiKSkpKXsqLDpiZWZvcmUsOmFmdGVyLDo6YmFja2Ryb3B7LS10dy10cmFuc2xhdGUteDowOy0tdHctdHJhbnNsYXRlLXk6MDstLXR3LXRyYW5zbGF0ZS16OjA7LS10dy1yb3RhdGUteDppbml0aWFsOy0tdHctcm90YXRlLXk6aW5pdGlhbDstLXR3LXJvdGF0ZS16OmluaXRpYWw7LS10dy1za2V3LXg6aW5pdGlhbDstLXR3LXNrZXcteTppbml0aWFsOy0tdHctYm9yZGVyLXN0eWxlOnNvbGlkOy0tdHctbGVhZGluZzppbml0aWFsOy0tdHctZm9udC13ZWlnaHQ6aW5pdGlhbDstLXR3LXRyYWNraW5nOmluaXRpYWw7LS10dy1vcmRpbmFsOmluaXRpYWw7LS10dy1zbGFzaGVkLXplcm86aW5pdGlhbDstLXR3LW51bWVyaWMtZmlndXJlOmluaXRpYWw7LS10dy1udW1lcmljLXNwYWNpbmc6aW5pdGlhbDstLXR3LW51bWVyaWMtZnJhY3Rpb246aW5pdGlhbDstLXR3LXNoYWRvdzowIDAgIzAwMDA7LS10dy1zaGFkb3ctY29sb3I6aW5pdGlhbDstLXR3LXNoYWRvdy1hbHBoYToxMDAlOy0tdHctaW5zZXQtc2hhZG93OjAgMCAjMDAwMDstLXR3LWluc2V0LXNoYWRvdy1jb2xvcjppbml0aWFsOy0tdHctaW5zZXQtc2hhZG93LWFscGhhOjEwMCU7LS10dy1yaW5nLWNvbG9yOmluaXRpYWw7LS10dy1yaW5nLXNoYWRvdzowIDAgIzAwMDA7LS10dy1pbnNldC1yaW5nLWNvbG9yOmluaXRpYWw7LS10dy1pbnNldC1yaW5nLXNoYWRvdzowIDAgIzAwMDA7LS10dy1yaW5nLWluc2V0OmluaXRpYWw7LS10dy1yaW5nLW9mZnNldC13aWR0aDowcHg7LS10dy1yaW5nLW9mZnNldC1jb2xvcjojZmZmOy0tdHctcmluZy1vZmZzZXQtc2hhZG93OjAgMCAjMDAwMDstLXR3LW91dGxpbmUtc3R5bGU6c29saWQ7LS10dy1ibHVyOmluaXRpYWw7LS10dy1icmlnaHRuZXNzOmluaXRpYWw7LS10dy1jb250cmFzdDppbml0aWFsOy0tdHctZ3JheXNjYWxlOmluaXRpYWw7LS10dy1odWUtcm90YXRlOmluaXRpYWw7LS10dy1pbnZlcnQ6aW5pdGlhbDstLXR3LW9wYWNpdHk6aW5pdGlhbDstLXR3LXNhdHVyYXRlOmluaXRpYWw7LS10dy1zZXBpYTppbml0aWFsOy0tdHctZHJvcC1zaGFkb3c6aW5pdGlhbDstLXR3LWRyb3Atc2hhZG93LWNvbG9yOmluaXRpYWw7LS10dy1kcm9wLXNoYWRvdy1hbHBoYToxMDAlOy0tdHctZHJvcC1zaGFkb3ctc2l6ZTppbml0aWFsOy0tdHctYmFja2Ryb3AtYmx1cjppbml0aWFsOy0tdHctYmFja2Ryb3AtYnJpZ2h0bmVzczppbml0aWFsOy0tdHctYmFja2Ryb3AtY29udHJhc3Q6aW5pdGlhbDstLXR3LWJhY2tkcm9wLWdyYXlzY2FsZTppbml0aWFsOy0tdHctYmFja2Ryb3AtaHVlLXJvdGF0ZTppbml0aWFsOy0tdHctYmFja2Ryb3AtaW52ZXJ0OmluaXRpYWw7LS10dy1iYWNrZHJvcC1vcGFjaXR5OmluaXRpYWw7LS10dy1iYWNrZHJvcC1zYXR1cmF0ZTppbml0aWFsOy0tdHctYmFja2Ryb3Atc2VwaWE6aW5pdGlhbDstLXR3LWR1cmF0aW9uOmluaXRpYWw7LS10dy1lYXNlOmluaXRpYWx9fX0KPC9zdHlsZT4KPC9oZWFkPjxib2R5Pgo8ZGl2IGlkPSJyb290Ij48L2Rpdj4KPCEtLV9fU0lNX1BSRVZJRVdfQ09ORklHX18tLT4KPHNjcmlwdCB0eXBlPSJtb2R1bGUiPnZhciBGMixzLFY4LG80LGgwLFk4LEI4LE44LGk1LFo1LGsyLEw4LHQ1LGE1LG41LHo4LEs1PXt9LFg1PVtdLHI0PS9hY2l0fGV4KD86c3xnfG58cHwkKXxycGh8Z3JpZHxvd3N8bW5jfG50d3xpbmVbY2hdfHpvb3xeb3JkfGl0ZXJhL2ksTTI9QXJyYXkuaXNBcnJheTtmdW5jdGlvbiBUMCgkLEope2Zvcih2YXIgUSBpbiBKKSRbUV09SltRXTtyZXR1cm4gJH1mdW5jdGlvbiBlNSgkKXskJiYkLnBhcmVudE5vZGUmJiQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCgkKX1mdW5jdGlvbiBwMSgkLEosUSl7dmFyIFosWCxZLHE9e307Zm9yKFkgaW4gSilZPT0ia2V5Ij9aPUpbWV06WT09InJlZiI/WD1KW1ldOnFbWV09SltZXTtpZihhcmd1bWVudHMubGVuZ3RoPjImJihxLmNoaWxkcmVuPWFyZ3VtZW50cy5sZW5ndGg+Mz9GMi5jYWxsKGFyZ3VtZW50cywyKTpRKSx0eXBlb2YgJD09ImZ1bmN0aW9uIiYmJC5kZWZhdWx0UHJvcHMhPW51bGwpZm9yKFkgaW4gJC5kZWZhdWx0UHJvcHMpcVtZXT09PXZvaWQgMCYmKHFbWV09JC5kZWZhdWx0UHJvcHNbWV0pO3JldHVybiBPMigkLHEsWixYLG51bGwpfWZ1bmN0aW9uIE8yKCQsSixRLFosWCl7dmFyIFk9e3R5cGU6JCxwcm9wczpKLGtleTpRLHJlZjpaLF9fazpudWxsLF9fOm51bGwsX19iOjAsX19lOm51bGwsX19jOm51bGwsY29uc3RydWN0b3I6dm9pZCAwLF9fdjpYPT1udWxsPysrVjg6WCxfX2k6LTEsX191OjB9O3JldHVybiBYPT1udWxsJiZzLnZub2RlIT1udWxsJiZzLnZub2RlKFkpLFl9ZnVuY3Rpb24gVzIoKXtyZXR1cm57Y3VycmVudDpudWxsfX1mdW5jdGlvbiBaMSgkKXtyZXR1cm4gJC5jaGlsZHJlbn1mdW5jdGlvbiBvMSgkLEope3RoaXMucHJvcHM9JCx0aGlzLmNvbnRleHQ9Sn1mdW5jdGlvbiB0MCgkLEope2lmKEo9PW51bGwpcmV0dXJuICQuX18/dDAoJC5fXywkLl9faSsxKTpudWxsO2Zvcih2YXIgUTtKPCQuX19rLmxlbmd0aDtKKyspaWYoKFE9JC5fX2tbSl0pIT1udWxsJiZRLl9fZSE9bnVsbClyZXR1cm4gUS5fX2U7cmV0dXJuIHR5cGVvZiAkLnR5cGU9PSJmdW5jdGlvbiI/dDAoJCk6bnVsbH1mdW5jdGlvbiBpNCgkKXtpZigkLl9fUCYmJC5fX2Qpe3ZhciBKPSQuX192LFE9Si5fX2UsWj1bXSxYPVtdLFk9VDAoe30sSik7WS5fX3Y9Si5fX3YrMSxzLnZub2RlJiZzLnZub2RlKFkpLCQzKCQuX19QLFksSiwkLl9fbiwkLl9fUC5uYW1lc3BhY2VVUkksMzImSi5fX3U/W1FdOm51bGwsWixRPT1udWxsP3QwKEopOlEsISEoMzImSi5fX3UpLFgpLFkuX192PUouX192LFkuX18uX19rW1kuX19pXT1ZLGs4KFosWSxYKSxKLl9fZT1KLl9fPW51bGwsWS5fX2UhPVEmJkM4KFkpfX1mdW5jdGlvbiBDOCgkKXtpZigoJD0kLl9fKSE9bnVsbCYmJC5fX2MhPW51bGwpcmV0dXJuICQuX19lPSQuX19jLmJhc2U9bnVsbCwkLl9fay5zb21lKGZ1bmN0aW9uKEope2lmKEohPW51bGwmJkouX19lIT1udWxsKXJldHVybiAkLl9fZT0kLl9fYy5iYXNlPUouX19lfSksQzgoJCl9ZnVuY3Rpb24gczUoJCl7KCEkLl9fZCYmKCQuX19kPSEwKSYmaDAucHVzaCgkKSYmIVk1Ll9fcisrfHxZOCE9cy5kZWJvdW5jZVJlbmRlcmluZykmJigoWTg9cy5kZWJvdW5jZVJlbmRlcmluZyl8fEI4KShZNSl9ZnVuY3Rpb24gWTUoKXt0cnl7Zm9yKHZhciAkLEo9MTtoMC5sZW5ndGg7KWgwLmxlbmd0aD5KJiZoMC5zb3J0KE44KSwkPWgwLnNoaWZ0KCksSj1oMC5sZW5ndGgsaTQoJCl9ZmluYWxseXtoMC5sZW5ndGg9WTUuX19yPTB9fWZ1bmN0aW9uIFU4KCQsSixRLFosWCxZLHEsRyxWLEIsTil7dmFyIHosTCxDLEEsVSxILGssRj1aJiZaLl9fa3x8WDUsdz1KLmxlbmd0aDtmb3IoVj1hNChRLEosRixWLHcpLHo9MDt6PHc7eisrKShDPVEuX19rW3pdKSE9bnVsbCYmKEw9Qy5fX2khPS0xJiZGW0MuX19pXXx8SzUsQy5fX2k9eixIPSQzKCQsQyxMLFgsWSxxLEcsVixCLE4pLEE9Qy5fX2UsQy5yZWYmJkwucmVmIT1DLnJlZiYmKEwucmVmJiZKMyhMLnJlZixudWxsLEMpLE4ucHVzaChDLnJlZixDLl9fY3x8QSxDKSksVT09bnVsbCYmQSE9bnVsbCYmKFU9QSksKGs9ISEoNCZDLl9fdSkpfHxMLl9faz09PUMuX19rPyhWPUg4KEMsViwkLGspLGsmJkwuX19lJiYoTC5fX2U9bnVsbCkpOnR5cGVvZiBDLnR5cGU9PSJmdW5jdGlvbiImJkghPT12b2lkIDA/Vj1IOkEmJihWPUEubmV4dFNpYmxpbmcpLEMuX191Jj0tNyk7cmV0dXJuIFEuX19lPVUsVn1mdW5jdGlvbiBhNCgkLEosUSxaLFgpe3ZhciBZLHEsRyxWLEIsTj1RLmxlbmd0aCx6PU4sTD0wO2ZvcigkLl9faz1BcnJheShYKSxZPTA7WTxYO1krKykocT1KW1ldKSE9bnVsbCYmdHlwZW9mIHEhPSJib29sZWFuIiYmdHlwZW9mIHEhPSJmdW5jdGlvbiI/KHR5cGVvZiBxPT0ic3RyaW5nInx8dHlwZW9mIHE9PSJudW1iZXIifHx0eXBlb2YgcT09ImJpZ2ludCJ8fHEuY29uc3RydWN0b3I9PVN0cmluZz9xPSQuX19rW1ldPU8yKG51bGwscSxudWxsLG51bGwsbnVsbCk6TTIocSk/cT0kLl9fa1tZXT1PMihaMSx7Y2hpbGRyZW46cX0sbnVsbCxudWxsLG51bGwpOnEuY29uc3RydWN0b3I9PT12b2lkIDAmJnEuX19iPjA/cT0kLl9fa1tZXT1PMihxLnR5cGUscS5wcm9wcyxxLmtleSxxLnJlZj9xLnJlZjpudWxsLHEuX192KTokLl9fa1tZXT1xLFY9WStMLHEuX189JCxxLl9fYj0kLl9fYisxLEc9bnVsbCwoQj1xLl9faT1uNChxLFEsVix6KSkhPS0xJiYoei0tLChHPVFbQl0pJiYoRy5fX3V8PTIpKSxHPT1udWxsfHxHLl9fdj09bnVsbD8oQj09LTEmJihYPk4/TC0tOlg8TiYmTCsrKSx0eXBlb2YgcS50eXBlIT0iZnVuY3Rpb24iJiYocS5fX3V8PTQpKTpCIT1WJiYoQj09Vi0xP0wtLTpCPT1WKzE/TCsrOihCPlY/TC0tOkwrKyxxLl9fdXw9NCkpKTokLl9fa1tZXT1udWxsO2lmKHopZm9yKFk9MDtZPE47WSsrKShHPVFbWV0pIT1udWxsJiYoMiZHLl9fdSk9PTAmJihHLl9fZT09WiYmKFo9dDAoRykpLEY4KEcsRykpO3JldHVybiBafWZ1bmN0aW9uIEg4KCQsSixRLFope3ZhciBYLFk7aWYodHlwZW9mICQudHlwZT09ImZ1bmN0aW9uIil7Zm9yKFg9JC5fX2ssWT0wO1gmJlk8WC5sZW5ndGg7WSsrKVhbWV0mJihYW1ldLl9fPSQsSj1IOChYW1ldLEosUSxaKSk7cmV0dXJuIEp9JC5fX2UhPUomJihaJiYoSiYmJC50eXBlJiYhSi5wYXJlbnROb2RlJiYoSj10MCgkKSksUS5pbnNlcnRCZWZvcmUoJC5fX2UsSnx8bnVsbCkpLEo9JC5fX2UpO2RvIEo9SiYmSi5uZXh0U2libGluZzt3aGlsZShKIT1udWxsJiZKLm5vZGVUeXBlPT04KTtyZXR1cm4gSn1mdW5jdGlvbiBaMCgkLEope3JldHVybiBKPUp8fFtdLCQ9PW51bGx8fHR5cGVvZiAkPT0iYm9vbGVhbiJ8fChNMigkKT8kLnNvbWUoZnVuY3Rpb24oUSl7WjAoUSxKKX0pOkoucHVzaCgkKSksSn1mdW5jdGlvbiBuNCgkLEosUSxaKXt2YXIgWCxZLHEsRz0kLmtleSxWPSQudHlwZSxCPUpbUV0sTj1CIT1udWxsJiYoMiZCLl9fdSk9PTA7aWYoQj09PW51bGwmJkc9PW51bGx8fE4mJkc9PUIua2V5JiZWPT1CLnR5cGUpcmV0dXJuIFE7aWYoWj4oTj8xOjApKXtmb3IoWD1RLTEsWT1RKzE7WD49MHx8WTxKLmxlbmd0aDspaWYoKEI9SltxPVg+PTA/WC0tOlkrK10pIT1udWxsJiYoMiZCLl9fdSk9PTAmJkc9PUIua2V5JiZWPT1CLnR5cGUpcmV0dXJuIHF9cmV0dXJuLTF9ZnVuY3Rpb24gcTgoJCxKLFEpe0pbMF09PSItIj8kLnNldFByb3BlcnR5KEosUT09bnVsbD8iIjpRKTokW0pdPVE9PW51bGw/IiI6dHlwZW9mIFEhPSJudW1iZXIifHxyNC50ZXN0KEopP1E6USsicHgifWZ1bmN0aW9uIFE1KCQsSixRLFosWCl7dmFyIFkscTskOmlmKEo9PSJzdHlsZSIpaWYodHlwZW9mIFE9PSJzdHJpbmciKSQuc3R5bGUuY3NzVGV4dD1RO2Vsc2V7aWYodHlwZW9mIFo9PSJzdHJpbmciJiYoJC5zdHlsZS5jc3NUZXh0PVo9IiIpLFopZm9yKEogaW4gWilRJiZKIGluIFF8fHE4KCQuc3R5bGUsSiwiIik7aWYoUSlmb3IoSiBpbiBRKVomJlFbSl09PVpbSl18fHE4KCQuc3R5bGUsSixRW0pdKX1lbHNlIGlmKEpbMF09PSJvIiYmSlsxXT09Im4iKVk9SiE9KEo9Si5yZXBsYWNlKEw4LCIkMSIpKSxxPUoudG9Mb3dlckNhc2UoKSxKPXEgaW4gJHx8Sj09Im9uRm9jdXNPdXQifHxKPT0ib25Gb2N1c0luIj9xLnNsaWNlKDIpOkouc2xpY2UoMiksJC5sfHwoJC5sPXt9KSwkLmxbSitZXT1RLFE/Wj9RW2syXT1aW2syXTooUVtrMl09dDUsJC5hZGRFdmVudExpc3RlbmVyKEosWT9uNTphNSxZKSk6JC5yZW1vdmVFdmVudExpc3RlbmVyKEosWT9uNTphNSxZKTtlbHNle2lmKFg9PSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIpSj1KLnJlcGxhY2UoL3hsaW5rKEh8OmgpLywiaCIpLnJlcGxhY2UoL3NOYW1lJC8sInMiKTtlbHNlIGlmKEohPSJ3aWR0aCImJkohPSJoZWlnaHQiJiZKIT0iaHJlZiImJkohPSJsaXN0IiYmSiE9ImZvcm0iJiZKIT0idGFiSW5kZXgiJiZKIT0iZG93bmxvYWQiJiZKIT0icm93U3BhbiImJkohPSJjb2xTcGFuIiYmSiE9InJvbGUiJiZKIT0icG9wb3ZlciImJkogaW4gJCl0cnl7JFtKXT1RPT1udWxsPyIiOlE7YnJlYWsgJH1jYXRjaChHKXt9dHlwZW9mIFE9PSJmdW5jdGlvbiJ8fChRPT1udWxsfHxRPT09ITEmJkpbNF0hPSItIj8kLnJlbW92ZUF0dHJpYnV0ZShKKTokLnNldEF0dHJpYnV0ZShKLEo9PSJwb3BvdmVyIiYmUT09MT8iIjpRKSl9fWZ1bmN0aW9uIEc4KCQpe3JldHVybiBmdW5jdGlvbihKKXtpZih0aGlzLmwpe3ZhciBRPXRoaXMubFtKLnR5cGUrJF07aWYoSltaNV09PW51bGwpSltaNV09dDUrKztlbHNlIGlmKEpbWjVdPFFbazJdKXJldHVybjtyZXR1cm4gUShzLmV2ZW50P3MuZXZlbnQoSik6Sil9fX1mdW5jdGlvbiAkMygkLEosUSxaLFgsWSxxLEcsVixCKXt2YXIgTix6LEwsQyxBLFUsSCxrLEYsdyxULFMseCwkMSxmLGkscj1KLnR5cGU7aWYoSi5jb25zdHJ1Y3RvciE9PXZvaWQgMClyZXR1cm4gbnVsbDsxMjgmUS5fX3UmJihWPSEhKDMyJlEuX191KSxZPVtHPUouX19lPVEuX19lXSksKE49cy5fX2IpJiZOKEopOyQ6aWYodHlwZW9mIHI9PSJmdW5jdGlvbiIpe3o9cS5sZW5ndGg7dHJ5e2lmKEY9Si5wcm9wcyx3PXIucHJvdG90eXBlJiZyLnByb3RvdHlwZS5yZW5kZXIsVD0oTj1yLmNvbnRleHRUeXBlKSYmWltOLl9fY10sUz1OP1Q/VC5wcm9wcy52YWx1ZTpOLl9fOlosUS5fX2M/az0oTD1KLl9fYz1RLl9fYykuX189TC5fX0U6KHc/Si5fX2M9TD1uZXcgcihGLFMpOihKLl9fYz1MPW5ldyBvMShGLFMpLEwuY29uc3RydWN0b3I9cixMLnJlbmRlcj10NCksVCYmVC5zdWIoTCksTC5zdGF0ZXx8KEwuc3RhdGU9e30pLEwuX19uPVosQz1MLl9fZD0hMCxMLl9faD1bXSxMLl9zYj1bXSksdyYmTC5fX3M9PW51bGwmJihMLl9fcz1MLnN0YXRlKSx3JiZyLmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyE9bnVsbCYmKEwuX19zPT1MLnN0YXRlJiYoTC5fX3M9VDAoe30sTC5fX3MpKSxUMChMLl9fcyxyLmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyhGLEwuX19zKSkpLEE9TC5wcm9wcyxVPUwuc3RhdGUsTC5fX3Y9SixDKXcmJnIuZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzPT1udWxsJiZMLmNvbXBvbmVudFdpbGxNb3VudCE9bnVsbCYmTC5jb21wb25lbnRXaWxsTW91bnQoKSx3JiZMLmNvbXBvbmVudERpZE1vdW50IT1udWxsJiZMLl9faC5wdXNoKEwuY29tcG9uZW50RGlkTW91bnQpO2Vsc2V7aWYodyYmci5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHM9PW51bGwmJkYhPT1BJiZMLmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMhPW51bGwmJkwuY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyhGLFMpLEouX192PT1RLl9fdnx8IUwuX19lJiZMLnNob3VsZENvbXBvbmVudFVwZGF0ZSE9bnVsbCYmTC5zaG91bGRDb21wb25lbnRVcGRhdGUoRixMLl9fcyxTKT09PSExKXtKLl9fdiE9US5fX3YmJihMLnByb3BzPUYsTC5zdGF0ZT1MLl9fcyxMLl9fZD0hMSksSi5fX2U9US5fX2UsSi5fX2s9US5fX2ssSi5fX2suc29tZShmdW5jdGlvbihsKXtsJiYobC5fXz1KKX0pLFg1LnB1c2guYXBwbHkoTC5fX2gsTC5fc2IpLEwuX3NiPVtdLEwuX19oLmxlbmd0aCYmcS5wdXNoKEwpO2JyZWFrICR9TC5jb21wb25lbnRXaWxsVXBkYXRlIT1udWxsJiZMLmNvbXBvbmVudFdpbGxVcGRhdGUoRixMLl9fcyxTKSx3JiZMLmNvbXBvbmVudERpZFVwZGF0ZSE9bnVsbCYmTC5fX2gucHVzaChmdW5jdGlvbigpe0wuY29tcG9uZW50RGlkVXBkYXRlKEEsVSxIKX0pfWlmKEwuY29udGV4dD1TLEwucHJvcHM9RixMLl9fUD0kLEwuX19lPSExLHg9cy5fX3IsJDE9MCx3KUwuc3RhdGU9TC5fX3MsTC5fX2Q9ITEseCYmeChKKSxOPUwucmVuZGVyKEwucHJvcHMsTC5zdGF0ZSxMLmNvbnRleHQpLFg1LnB1c2guYXBwbHkoTC5fX2gsTC5fc2IpLEwuX3NiPVtdO2Vsc2UgZG8gTC5fX2Q9ITEseCYmeChKKSxOPUwucmVuZGVyKEwucHJvcHMsTC5zdGF0ZSxMLmNvbnRleHQpLEwuc3RhdGU9TC5fX3M7d2hpbGUoTC5fX2QmJisrJDE8MjUpO0wuc3RhdGU9TC5fX3MsTC5nZXRDaGlsZENvbnRleHQhPW51bGwmJihaPVQwKFQwKHt9LFopLEwuZ2V0Q2hpbGRDb250ZXh0KCkpKSx3JiYhQyYmTC5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZSE9bnVsbCYmKEg9TC5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZShBLFUpKSxmPU4hPW51bGwmJk4udHlwZT09PVoxJiZOLmtleT09bnVsbD9POChOLnByb3BzLmNoaWxkcmVuKTpOLEc9VTgoJCxNMihmKT9mOltmXSxKLFEsWixYLFkscSxHLFYsQiksTC5iYXNlPUouX19lLEouX191Jj0tMTYxLEwuX19oLmxlbmd0aCYmcS5wdXNoKEwpLGsmJihMLl9fRT1MLl9fPW51bGwpfWNhdGNoKGwpe2lmKHEubGVuZ3RoPXosSi5fX3Y9bnVsbCxWfHxZIT1udWxsKXtpZihsLnRoZW4pe2ZvcihKLl9fdXw9Vj8xNjA6MTI4O0cmJkcubm9kZVR5cGU9PTgmJkcubmV4dFNpYmxpbmc7KUc9Ry5uZXh0U2libGluZztZIT1udWxsJiYoWVtZLmluZGV4T2YoRyldPW51bGwpLEouX19lPUd9ZWxzZSBpZihZIT1udWxsKWZvcihpPVkubGVuZ3RoO2ktLTspZTUoWVtpXSl9ZWxzZSBKLl9fZT1RLl9fZTtKLl9faz09bnVsbCYmKEouX19rPVEuX19rfHxbXSksbC50aGVufHxBOChKKSxzLl9fZShsLEosUSl9fWVsc2UgWT09bnVsbCYmSi5fX3Y9PVEuX192PyhKLl9faz1RLl9fayxKLl9fZT1RLl9fZSk6Rz1KLl9fZT1zNChRLl9fZSxKLFEsWixYLFkscSxWLEIpO3JldHVybihOPXMuZGlmZmVkKSYmTihKKSwxMjgmSi5fX3U/dm9pZCAwOkd9ZnVuY3Rpb24gQTgoJCl7JCYmKCQuX19jJiYoJC5fX2MuX19lPSEwKSwkLl9fayYmJC5fX2suc29tZShBOCkpfWZ1bmN0aW9uIGs4KCQsSixRKXtmb3IodmFyIFo9MDtaPFEubGVuZ3RoO1orKylKMyhRW1pdLFFbKytaXSxRWysrWl0pO3MuX19jJiZzLl9fYyhKLCQpLCQuc29tZShmdW5jdGlvbihYKXt0cnl7JD1YLl9faCxYLl9faD1bXSwkLnNvbWUoZnVuY3Rpb24oWSl7WS5jYWxsKFgpfSl9Y2F0Y2goWSl7cy5fX2UoWSxYLl9fdil9fSl9ZnVuY3Rpb24gTzgoJCl7cmV0dXJuIHR5cGVvZiAkIT0ib2JqZWN0Inx8JD09bnVsbHx8JC5fX2I+MD8kOk0yKCQpPyQubWFwKE84KTokLmNvbnN0cnVjdG9yIT09dm9pZCAwP251bGw6VDAoe30sJCl9ZnVuY3Rpb24gczQoJCxKLFEsWixYLFkscSxHLFYpe3ZhciBCLE4seixMLEMsQSxVLEg9US5wcm9wc3x8SzUsaz1KLnByb3BzLEY9Si50eXBlO2lmKEY9PSJzdmciP1g9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIjpGPT0ibWF0aCI/WD0iaHR0cDovL3d3dy53My5vcmcvMTk5OC9NYXRoL01hdGhNTCI6WHx8KFg9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiKSxZIT1udWxsKXtmb3IoQj0wO0I8WS5sZW5ndGg7QisrKWlmKChDPVlbQl0pJiYic2V0QXR0cmlidXRlImluIEM9PSEhRiYmKEY/Qy5sb2NhbE5hbWU9PUY6Qy5ub2RlVHlwZT09MykpeyQ9QyxZW0JdPW51bGw7YnJlYWt9fWlmKCQ9PW51bGwpe2lmKEY9PW51bGwpcmV0dXJuIGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGspOyQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKFgsRixrLmlzJiZrKSxHJiYocy5fX20mJnMuX19tKEosWSksRz0hMSksWT1udWxsfWlmKEY9PW51bGwpSD09PWt8fEcmJiQuZGF0YT09a3x8KCQuZGF0YT1rKTtlbHNle2lmKFk9Rj09InRleHRhcmVhIiYmay5kZWZhdWx0VmFsdWUhPW51bGw/bnVsbDpZJiZGMi5jYWxsKCQuY2hpbGROb2RlcyksIUcmJlkhPW51bGwpZm9yKEg9e30sQj0wO0I8JC5hdHRyaWJ1dGVzLmxlbmd0aDtCKyspSFsoQz0kLmF0dHJpYnV0ZXNbQl0pLm5hbWVdPUMudmFsdWU7Zm9yKEIgaW4gSClDPUhbQl0sQj09ImRhbmdlcm91c2x5U2V0SW5uZXJIVE1MIj96PUM6Qj09ImNoaWxkcmVuInx8KEIgaW4gayl8fEI9PSJ2YWx1ZSImJigiZGVmYXVsdFZhbHVlImluIGspfHxCPT0iY2hlY2tlZCImJigiZGVmYXVsdENoZWNrZWQiaW4gayl8fFE1KCQsQixudWxsLEMsWCk7Zm9yKEIgaW4gaylDPWtbQl0sQj09ImNoaWxkcmVuIj9MPUM6Qj09ImRhbmdlcm91c2x5U2V0SW5uZXJIVE1MIj9OPUM6Qj09InZhbHVlIj9BPUM6Qj09ImNoZWNrZWQiP1U9QzpHJiZ0eXBlb2YgQyE9ImZ1bmN0aW9uInx8SFtCXT09PUN8fFE1KCQsQixDLEhbQl0sWCk7aWYoTilHfHx6JiYoTi5fX2h0bWw9PXouX19odG1sfHxOLl9faHRtbD09JC5pbm5lckhUTUwpfHwoJC5pbm5lckhUTUw9Ti5fX2h0bWwpLEouX19rPVtdO2Vsc2UgaWYoeiYmKCQuaW5uZXJIVE1MPSIiKSxVOChKLnR5cGU9PSJ0ZW1wbGF0ZSI/JC5jb250ZW50OiQsTTIoTCk/TDpbTF0sSixRLFosRj09ImZvcmVpZ25PYmplY3QiPyJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIjpYLFkscSxZP1lbMF06US5fX2smJnQwKFEsMCksRyxWKSxZIT1udWxsKWZvcihCPVkubGVuZ3RoO0ItLTspZTUoWVtCXSk7RyYmRiE9InRleHRhcmVhInx8KEI9InZhbHVlIixGPT0icHJvZ3Jlc3MiJiZBPT1udWxsPyQucmVtb3ZlQXR0cmlidXRlKCJ2YWx1ZSIpOkEhPW51bGwmJihBIT09JFtCXXx8Rj09InByb2dyZXNzIiYmIUF8fEY9PSJvcHRpb24iJiZBIT1IW0JdKSYmUTUoJCxCLEEsSFtCXSxYKSxCPSJjaGVja2VkIixVIT1udWxsJiZVIT0kW0JdJiZRNSgkLEIsVSxIW0JdLFgpKX1yZXR1cm4gJH1mdW5jdGlvbiBKMygkLEosUSl7dHJ5e2lmKHR5cGVvZiAkPT0iZnVuY3Rpb24iKXt2YXIgWj10eXBlb2YgJC5fX3U9PSJmdW5jdGlvbiI7WiYmJC5fX3UoKSxaJiZKPT1udWxsfHwoJC5fX3U9JChKKSl9ZWxzZSAkLmN1cnJlbnQ9Sn1jYXRjaChYKXtzLl9fZShYLFEpfX1mdW5jdGlvbiBGOCgkLEosUSl7dmFyIFosWDtpZihzLnVubW91bnQmJnMudW5tb3VudCgkKSwoWj0kLnJlZikmJihaLmN1cnJlbnQmJlouY3VycmVudCE9JC5fX2V8fEozKFosbnVsbCxKKSksKFo9JC5fX2MpIT1udWxsKXtpZihaLmNvbXBvbmVudFdpbGxVbm1vdW50KXRyeXtaLmNvbXBvbmVudFdpbGxVbm1vdW50KCl9Y2F0Y2goWSl7cy5fX2UoWSxKKX1aLmJhc2U9Wi5fX1A9Wi5fX249bnVsbH1pZihaPSQuX19rKWZvcihYPTA7WDxaLmxlbmd0aDtYKyspWltYXSYmRjgoWltYXSxKLFF8fHR5cGVvZiAkLnR5cGUhPSJmdW5jdGlvbiIpO1F8fGU1KCQuX19lKSwkLl9fYz0kLl9fPSQuX19lPXZvaWQgMH1mdW5jdGlvbiB0NCgkLEosUSl7cmV0dXJuIHRoaXMuY29uc3RydWN0b3IoJCxRKX1mdW5jdGlvbiBTMCgkLEosUSl7dmFyIFosWCxZLHE7Sj09ZG9jdW1lbnQmJihKPWRvY3VtZW50LmRvY3VtZW50RWxlbWVudCkscy5fXyYmcy5fXygkLEopLFg9KFo9dHlwZW9mIFE9PSJmdW5jdGlvbiIpP251bGw6USYmUS5fX2t8fEouX19rLFk9W10scT1bXSwkMyhKLCQ9KCFaJiZRfHxKKS5fX2s9cDEoWjEsbnVsbCxbJF0pLFh8fEs1LEs1LEoubmFtZXNwYWNlVVJJLCFaJiZRP1tRXTpYP251bGw6Si5maXJzdENoaWxkP0YyLmNhbGwoSi5jaGlsZE5vZGVzKTpudWxsLFksIVomJlE/UTpYP1guX19lOkouZmlyc3RDaGlsZCxaLHEpLGs4KFksJCxxKSwkLnByb3BzLmNoaWxkcmVuPW51bGx9ZnVuY3Rpb24gcTUoJCxKKXtTMCgkLEoscTUpfWZ1bmN0aW9uIFEzKCQsSixRKXt2YXIgWixYLFkscSxHPVQwKHt9LCQucHJvcHMpO2ZvcihZIGluICQudHlwZSYmJC50eXBlLmRlZmF1bHRQcm9wcyYmKHE9JC50eXBlLmRlZmF1bHRQcm9wcyksSilZPT0ia2V5Ij9aPUpbWV06WT09InJlZiI/WD1KW1ldOkdbWV09SltZXT09PXZvaWQgMCYmcSE9bnVsbD9xW1ldOkpbWV07cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+MiYmKEcuY2hpbGRyZW49YXJndW1lbnRzLmxlbmd0aD4zP0YyLmNhbGwoYXJndW1lbnRzLDIpOlEpLE8yKCQudHlwZSxHLFp8fCQua2V5LFh8fCQucmVmLG51bGwpfWZ1bmN0aW9uIHowKCQpe2Z1bmN0aW9uIEooUSl7dmFyIFosWDtyZXR1cm4gdGhpcy5nZXRDaGlsZENvbnRleHR8fChaPW5ldyBTZXQsKFg9e30pW0ouX19jXT10aGlzLHRoaXMuZ2V0Q2hpbGRDb250ZXh0PWZ1bmN0aW9uKCl7cmV0dXJuIFh9LHRoaXMuY29tcG9uZW50V2lsbFVubW91bnQ9ZnVuY3Rpb24oKXtaPW51bGx9LHRoaXMuc2hvdWxkQ29tcG9uZW50VXBkYXRlPWZ1bmN0aW9uKFkpe3RoaXMucHJvcHMudmFsdWUhPVkudmFsdWUmJlouZm9yRWFjaChmdW5jdGlvbihxKXtxLl9fZT0hMCxzNShxKX0pfSx0aGlzLnN1Yj1mdW5jdGlvbihZKXtaLmFkZChZKTt2YXIgcT1ZLmNvbXBvbmVudFdpbGxVbm1vdW50O1kuY29tcG9uZW50V2lsbFVubW91bnQ9ZnVuY3Rpb24oKXtaJiZaLmRlbGV0ZShZKSxxJiZxLmNhbGwoWSl9fSksUS5jaGlsZHJlbn1yZXR1cm4gSi5fX2M9Il9fY0MiK3o4KyssSi5fXz0kLEouUHJvdmlkZXI9Si5fX2w9KEouQ29uc3VtZXI9ZnVuY3Rpb24oUSxaKXtyZXR1cm4gUS5jaGlsZHJlbihaKX0pLmNvbnRleHRUeXBlPUosSn1GMj1YNS5zbGljZSxzPXtfX2U6ZnVuY3Rpb24oJCxKLFEsWil7Zm9yKHZhciBYLFkscTtKPUouX187KWlmKChYPUouX19jKSYmIVguX18pdHJ5e2lmKChZPVguY29uc3RydWN0b3IpJiZZLmdldERlcml2ZWRTdGF0ZUZyb21FcnJvciE9bnVsbCYmKFguc2V0U3RhdGUoWS5nZXREZXJpdmVkU3RhdGVGcm9tRXJyb3IoJCkpLHE9WC5fX2QpLFguY29tcG9uZW50RGlkQ2F0Y2ghPW51bGwmJihYLmNvbXBvbmVudERpZENhdGNoKCQsWnx8e30pLHE9WC5fX2QpLHEpcmV0dXJuIFguX19FPVh9Y2F0Y2goRyl7JD1HfXRocm93ICR9fSxWOD0wLG80PWZ1bmN0aW9uKCQpe3JldHVybiAkIT1udWxsJiYkLmNvbnN0cnVjdG9yPT09dm9pZCAwfSxvMS5wcm90b3R5cGUuc2V0U3RhdGU9ZnVuY3Rpb24oJCxKKXt2YXIgUTtRPXRoaXMuX19zIT1udWxsJiZ0aGlzLl9fcyE9dGhpcy5zdGF0ZT90aGlzLl9fczp0aGlzLl9fcz1UMCh7fSx0aGlzLnN0YXRlKSx0eXBlb2YgJD09ImZ1bmN0aW9uIiYmKCQ9JChUMCh7fSxRKSx0aGlzLnByb3BzKSksJCYmVDAoUSwkKSwkIT1udWxsJiZ0aGlzLl9fdiYmKEomJnRoaXMuX3NiLnB1c2goSiksczUodGhpcykpfSxvMS5wcm90b3R5cGUuZm9yY2VVcGRhdGU9ZnVuY3Rpb24oJCl7dGhpcy5fX3YmJih0aGlzLl9fZT0hMCwkJiZ0aGlzLl9faC5wdXNoKCQpLHM1KHRoaXMpKX0sbzEucHJvdG90eXBlLnJlbmRlcj1aMSxoMD1bXSxCOD10eXBlb2YgUHJvbWlzZT09ImZ1bmN0aW9uIj9Qcm9taXNlLnByb3RvdHlwZS50aGVuLmJpbmQoUHJvbWlzZS5yZXNvbHZlKCkpOnNldFRpbWVvdXQsTjg9ZnVuY3Rpb24oJCxKKXtyZXR1cm4gJC5fX3YuX19iLUouX192Ll9fYn0sWTUuX19yPTAsaTU9TWF0aC5yYW5kb20oKS50b1N0cmluZyg4KSxaNT0iX19kIitpNSxrMj0iX19hIitpNSxMOD0vKFBvaW50ZXJDYXB0dXJlKSR8Q2FwdHVyZSQvaSx0NT0wLGE1PUc4KCExKSxuNT1HOCghMCksejg9MDt2YXIgUjAsYjEsWjMsTTgsZTA9MCxJOD1bXSxoMT1zLFc4PWgxLl9fYixQOD1oMS5fX3IsXzg9aDEuZGlmZmVkLEQ4PWgxLl9fYyxUOD1oMS51bm1vdW50LHc4PWgxLl9fO2Z1bmN0aW9uICQyKCQsSil7aDEuX19oJiZoMS5fX2goYjEsJCxlMHx8SiksZTA9MDt2YXIgUT1iMS5fX0h8fChiMS5fX0g9e19fOltdLF9faDpbXX0pO3JldHVybiAkPj1RLl9fLmxlbmd0aCYmUS5fXy5wdXNoKHt9KSxRLl9fWyRdfWZ1bmN0aW9uIFcoJCl7cmV0dXJuIGUwPTEsbDAoeTgsJCl9ZnVuY3Rpb24gbDAoJCxKLFEpe3ZhciBaPSQyKFIwKyssMik7aWYoWi50PSQsIVouX19jJiYoWi5fXz1bUT9RKEopOnk4KHZvaWQgMCxKKSxmdW5jdGlvbihHKXt2YXIgVj1aLl9fTj9aLl9fTlswXTpaLl9fWzBdLEI9Wi50KFYsRyk7ViE9PUImJihaLl9fTj1bQixaLl9fWzFdXSxaLl9fYy5zZXRTdGF0ZSh7fSkpfV0sWi5fX2M9YjEsIWIxLl9fZikpe3ZhciBYPWZ1bmN0aW9uKEcsVixCKXtpZighWi5fX2MuX19IKXJldHVybiEwO3ZhciBOPSExLHo9Wi5fX2MucHJvcHMhPT1HO2lmKFouX19jLl9fSC5fXy5zb21lKGZ1bmN0aW9uKEMpe2lmKEMuX19OKXtOPSEwO3ZhciBBPUMuX19bMF07Qy5fXz1DLl9fTixDLl9fTj12b2lkIDAsQSE9PUMuX19bMF0mJih6PSEwKX19KSxZKXt2YXIgTD1ZLmNhbGwodGhpcyxHLFYsQik7cmV0dXJuIE4/THx8ejpMfXJldHVybiFOfHx6fTtiMS5fX2Y9ITA7dmFye3Nob3VsZENvbXBvbmVudFVwZGF0ZTpZLGNvbXBvbmVudFdpbGxVcGRhdGU6cX09YjE7YjEuY29tcG9uZW50V2lsbFVwZGF0ZT1mdW5jdGlvbihHLFYsQil7aWYodGhpcy5fX2Upe3ZhciBOPVk7WT12b2lkIDAsWChHLFYsQiksWT1OfXEmJnEuY2FsbCh0aGlzLEcsVixCKX0sYjEuc2hvdWxkQ29tcG9uZW50VXBkYXRlPVh9cmV0dXJuIFouX19OfHxaLl9ffWZ1bmN0aW9uIGIoJCxKKXt2YXIgUT0kMihSMCsrLDMpOyFoMS5fX3MmJlgzKFEuX19ILEopJiYoUS5fXz0kLFEudT1KLGIxLl9fSC5fX2gucHVzaChRKSl9ZnVuY3Rpb24gdzAoJCxKKXt2YXIgUT0kMihSMCsrLDQpOyFoMS5fX3MmJlgzKFEuX19ILEopJiYoUS5fXz0kLFEudT1KLGIxLl9faC5wdXNoKFEpKX1mdW5jdGlvbiBFKCQpe3JldHVybiBlMD01LEUxKGZ1bmN0aW9uKCl7cmV0dXJue2N1cnJlbnQ6JH19LFtdKX1mdW5jdGlvbiBWNSgkLEosUSl7ZTA9Nix3MChmdW5jdGlvbigpe2lmKHR5cGVvZiAkPT0iZnVuY3Rpb24iKXt2YXIgWj0kKEooKSk7cmV0dXJuIGZ1bmN0aW9uKCl7JChudWxsKSxaJiZ0eXBlb2YgWj09ImZ1bmN0aW9uIiYmWigpfX1pZigkKXJldHVybiAkLmN1cnJlbnQ9SigpLGZ1bmN0aW9uKCl7cmV0dXJuICQuY3VycmVudD1udWxsfX0sUT09bnVsbD9ROlEuY29uY2F0KCQpKX1mdW5jdGlvbiBFMSgkLEope3ZhciBRPSQyKFIwKyssNyk7cmV0dXJuIFgzKFEuX19ILEopJiYoUS5fXz0kKCksUS5fX0g9SixRLl9faD0kKSxRLl9ffWZ1bmN0aW9uIEQoJCxKKXtyZXR1cm4gZTA9OCxFMShmdW5jdGlvbigpe3JldHVybiAkfSxKKX1mdW5jdGlvbiBDMCgkKXt2YXIgSj1iMS5jb250ZXh0WyQuX19jXSxRPSQyKFIwKyssOSk7cmV0dXJuIFEuYz0kLEo/KFEuX189PW51bGwmJihRLl9fPSEwLEouc3ViKGIxKSksSi5wcm9wcy52YWx1ZSk6JC5fX31mdW5jdGlvbiBCNSgkLEope2gxLnVzZURlYnVnVmFsdWUmJmgxLnVzZURlYnVnVmFsdWUoSj9KKCQpOiQpfWZ1bmN0aW9uIEoyKCl7dmFyICQ9JDIoUjArKywxMSk7aWYoISQuX18pe2Zvcih2YXIgSj1iMS5fX3Y7SiE9PW51bGwmJiFKLl9fbSYmSi5fXyE9PW51bGw7KUo9Si5fXzt2YXIgUT1KLl9fbXx8KEouX19tPVswLDBdKTskLl9fPSJQIitRWzBdKyItIitRWzFdKyt9cmV0dXJuICQuX199ZnVuY3Rpb24gZTQoKXtmb3IodmFyICQ7JD1JOC5zaGlmdCgpOyl7dmFyIEo9JC5fX0g7aWYoJC5fX1AmJkopdHJ5e0ouX19oLnNvbWUoRzUpLEouX19oLnNvbWUoSzMpLEouX19oPVtdfWNhdGNoKFEpe0ouX19oPVtdLGgxLl9fZShRLCQuX192KX19fWgxLl9fYj1mdW5jdGlvbigkKXtiMT1udWxsLFc4JiZXOCgkKX0saDEuX189ZnVuY3Rpb24oJCxKKXskJiZKLl9fayYmSi5fX2suX19tJiYoJC5fX209Si5fX2suX19tKSx3OCYmdzgoJCxKKX0saDEuX19yPWZ1bmN0aW9uKCQpe1A4JiZQOCgkKSxSMD0wO3ZhciBKPShiMT0kLl9fYykuX19IO0omJihaMz09PWIxPyhKLl9faD1bXSxiMS5fX2g9W10sSi5fXy5zb21lKGZ1bmN0aW9uKFEpe1EuX19OJiYoUS5fXz1RLl9fTiksUS51PVEuX19OPXZvaWQgMH0pKTooSi5fX2guc29tZShHNSksSi5fX2guc29tZShLMyksSi5fX2g9W10sUjA9MCkpLFozPWIxfSxoMS5kaWZmZWQ9ZnVuY3Rpb24oJCl7XzgmJl84KCQpO3ZhciBKPSQuX19jO0omJkouX19IJiYoSi5fX0guX19oLmxlbmd0aCYmKEk4LnB1c2goSikhPT0xJiZNOD09PWgxLnJlcXVlc3RBbmltYXRpb25GcmFtZXx8KChNOD1oMS5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUpfHwkNykoZTQpKSxKLl9fSC5fXy5zb21lKGZ1bmN0aW9uKFEpe1EudSYmKFEuX19IPVEudSxRLnU9dm9pZCAwKX0pKSxaMz1iMT1udWxsfSxoMS5fX2M9ZnVuY3Rpb24oJCxKKXtKLnNvbWUoZnVuY3Rpb24oUSl7dHJ5e1EuX19oLnNvbWUoRzUpLFEuX19oPVEuX19oLmZpbHRlcihmdW5jdGlvbihaKXtyZXR1cm4hWi5fX3x8SzMoWil9KX1jYXRjaChaKXtKLnNvbWUoZnVuY3Rpb24oWCl7WC5fX2gmJihYLl9faD1bXSl9KSxKPVtdLGgxLl9fZShaLFEuX192KX19KSxEOCYmRDgoJCxKKX0saDEudW5tb3VudD1mdW5jdGlvbigkKXtUOCYmVDgoJCk7dmFyIEosUT0kLl9fYztRJiZRLl9fSCYmKFEuX19ILl9fLnNvbWUoZnVuY3Rpb24oWil7dHJ5e0c1KFopfWNhdGNoKFgpe0o9WH19KSxRLl9fSD12b2lkIDAsSiYmaDEuX19lKEosUS5fX3YpKX07dmFyIEU4PXR5cGVvZiByZXF1ZXN0QW5pbWF0aW9uRnJhbWU9PSJmdW5jdGlvbiI7ZnVuY3Rpb24gJDcoJCl7dmFyIEosUT1mdW5jdGlvbigpe2NsZWFyVGltZW91dChaKSxFOCYmY2FuY2VsQW5pbWF0aW9uRnJhbWUoSiksc2V0VGltZW91dCgkKX0sWj1zZXRUaW1lb3V0KFEsMzUpO0U4JiYoSj1yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoUSkpfWZ1bmN0aW9uIEc1KCQpe3ZhciBKPWIxLFE9JC5fX2M7dHlwZW9mIFE9PSJmdW5jdGlvbiImJigkLl9fYz12b2lkIDAsUSgpKSxiMT1KfWZ1bmN0aW9uIEszKCQpe3ZhciBKPWIxOyQuX19jPSQuX18oKSxiMT1KfWZ1bmN0aW9uIFgzKCQsSil7cmV0dXJuISR8fCQubGVuZ3RoIT09Si5sZW5ndGh8fEouc29tZShmdW5jdGlvbihRLFope3JldHVybiBRIT09JFtaXX0pfWZ1bmN0aW9uIHk4KCQsSil7cmV0dXJuIHR5cGVvZiBKPT0iZnVuY3Rpb24iP0ooJCk6Sn1mdW5jdGlvbiBKNygkLEope2Zvcih2YXIgUSBpbiBKKSRbUV09SltRXTtyZXR1cm4gJH1mdW5jdGlvbiBiOCgkLEope2Zvcih2YXIgUSBpbiAkKWlmKFEhPT0iX19zb3VyY2UiJiYhKFEgaW4gSikpcmV0dXJuITA7Zm9yKHZhciBaIGluIEopaWYoWiE9PSJfX3NvdXJjZSImJiRbWl0hPT1KW1pdKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIFM4KCQsSil7dGhpcy5wcm9wcz0kLHRoaXMuY29udGV4dD1KfShTOC5wcm90b3R5cGU9bmV3IG8xKS5pc1B1cmVSZWFjdENvbXBvbmVudD0hMCxTOC5wcm90b3R5cGUuc2hvdWxkQ29tcG9uZW50VXBkYXRlPWZ1bmN0aW9uKCQsSil7cmV0dXJuIGI4KHRoaXMucHJvcHMsJCl8fGI4KHRoaXMuc3RhdGUsSil9O3ZhciB4OD1zLl9fYjtzLl9fYj1mdW5jdGlvbigkKXskLnR5cGUmJiQudHlwZS5fX2YmJiQucmVmJiYoJC5wcm9wcy5yZWY9JC5yZWYsJC5yZWY9bnVsbCkseDgmJng4KCQpfTt2YXIgUTc9cy5fX2U7cy5fX2U9ZnVuY3Rpb24oJCxKLFEsWil7aWYoJC50aGVuKXtmb3IodmFyIFgsWT1KO1k9WS5fXzspaWYoKFg9WS5fX2MpJiZYLl9fYylyZXR1cm4gSi5fX2U9PW51bGwmJihKLl9fZT1RLl9fZSxKLl9faz1RLl9fa3x8W10pLFguX19jKCQsSil9UTcoJCxKLFEsWil9O3ZhciB2OD1zLnVubW91bnQ7ZnVuY3Rpb24gZjgoJCxKLFEpe3JldHVybiAkJiYoJC5fX2MmJiQuX19jLl9fSCYmKCQuX19jLl9fSC5fXy5mb3JFYWNoKGZ1bmN0aW9uKFope3R5cGVvZiBaLl9fYz09ImZ1bmN0aW9uIiYmWi5fX2MoKX0pLCQuX19jLl9fSD1udWxsKSwoJD1KNyh7fSwkKSkuX19jIT1udWxsJiYoJC5fX2MuX19QPT09USYmKCQuX19jLl9fUD1KKSwkLl9fYy5fX2U9ITAsJC5fX2M9bnVsbCksJC5fX2s9JC5fX2smJiQuX19rLm1hcChmdW5jdGlvbihaKXtyZXR1cm4gZjgoWixKLFEpfSkpLCR9ZnVuY3Rpb24gcDgoJCxKLFEpe3JldHVybiAkJiZRJiYoJC5fX3Y9bnVsbCwkLl9faz0kLl9fayYmJC5fX2subWFwKGZ1bmN0aW9uKFope3JldHVybiBwOChaLEosUSl9KSwkLl9fYyYmJC5fX2MuX19QPT09SiYmKCQuX19lJiZRLmFwcGVuZENoaWxkKCQuX19lKSwkLl9fYy5fX2U9ITAsJC5fX2MuX19QPVEpKSwkfWZ1bmN0aW9uIFkzKCl7dGhpcy5fX3U9MCx0aGlzLm89bnVsbCx0aGlzLl9fYj1udWxsfWZ1bmN0aW9uIHU4KCQpe3ZhciBKPSQuX18mJiQuX18uX19jO3JldHVybiBKJiZKLl9fYSYmSi5fX2EoJCl9ZnVuY3Rpb24gTjUoKXt0aGlzLmk9bnVsbCx0aGlzLmw9bnVsbH1zLnVubW91bnQ9ZnVuY3Rpb24oJCl7dmFyIEo9JC5fX2M7SiYmKEouX196PSEwKSxKJiZKLl9fUiYmSi5fX1IoKSxKJiYzMiYkLl9fdSYmKCQudHlwZT1udWxsKSx2OCYmdjgoJCl9LChZMy5wcm90b3R5cGU9bmV3IG8xKS5fX2M9ZnVuY3Rpb24oJCxKKXt2YXIgUT1KLl9fYyxaPXRoaXM7Wi5vPT1udWxsJiYoWi5vPVtdKSxaLm8ucHVzaChRKTt2YXIgWD11OChaLl9fdiksWT0hMSxxPWZ1bmN0aW9uKCl7WXx8Wi5fX3p8fChZPSEwLFEuX19SPW51bGwsWD9YKFYpOlYoKSl9O1EuX19SPXE7dmFyIEc9US5fX1A7US5fX1A9bnVsbDt2YXIgVj1mdW5jdGlvbigpe2lmKCEtLVouX191KXtpZihaLnN0YXRlLl9fYSl7dmFyIEI9Wi5zdGF0ZS5fX2E7Wi5fX3YuX19rWzBdPXA4KEIsQi5fX2MuX19QLEIuX19jLl9fTyl9dmFyIE47Zm9yKFouc2V0U3RhdGUoe19fYTpaLl9fYj1udWxsfSk7Tj1aLm8ucG9wKCk7KU4uX19QPUcsTi5mb3JjZVVwZGF0ZSgpfX07Wi5fX3UrK3x8MzImSi5fX3V8fFouc2V0U3RhdGUoe19fYTpaLl9fYj1aLl9fdi5fX2tbMF19KSwkLnRoZW4ocSxxKX0sWTMucHJvdG90eXBlLmNvbXBvbmVudFdpbGxVbm1vdW50PWZ1bmN0aW9uKCl7dGhpcy5vPVtdfSxZMy5wcm90b3R5cGUucmVuZGVyPWZ1bmN0aW9uKCQsSil7aWYodGhpcy5fX2Ipe2lmKHRoaXMuX192Ll9fayl7dmFyIFE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksWj10aGlzLl9fdi5fX2tbMF0uX19jO3RoaXMuX192Ll9fa1swXT1mOCh0aGlzLl9fYixRLFouX19PPVouX19QKX10aGlzLl9fYj1udWxsfXZhciBYPUouX19hJiZwMShaMSxudWxsLCQuZmFsbGJhY2spO3JldHVybiBYJiYoWC5fX3UmPS0zMyksW3AxKFoxLG51bGwsSi5fX2E/bnVsbDokLmNoaWxkcmVuKSxYXX07dmFyIGo4PWZ1bmN0aW9uKCQsSixRKXtpZigrK1FbMV09PT1RWzBdJiYkLmwuZGVsZXRlKEopLCQucHJvcHMucmV2ZWFsT3JkZXImJigkLnByb3BzLnJldmVhbE9yZGVyWzBdIT09InQifHwhJC5sLnNpemUpKWZvcihRPSQuaTtROyl7Zm9yKDtRLmxlbmd0aD4zOylRLnBvcCgpKCk7aWYoUVsxXTxRWzBdKWJyZWFrOyQuaT1RPVFbMl19fTsoTjUucHJvdG90eXBlPW5ldyBvMSkuX19hPWZ1bmN0aW9uKCQpe3ZhciBKPXRoaXMsUT11OChKLl9fdiksWj1KLmwuZ2V0KCQpO3JldHVybiBaWzBdKyssZnVuY3Rpb24oWCl7dmFyIFk9ZnVuY3Rpb24oKXtKLnByb3BzLnJldmVhbE9yZGVyPyhaLnB1c2goWCksajgoSiwkLFopKTpYKCl9O1E/UShZKTpZKCl9fSxONS5wcm90b3R5cGUucmVuZGVyPWZ1bmN0aW9uKCQpe3RoaXMuaT1udWxsLHRoaXMubD1uZXcgTWFwO3ZhciBKPVowKCQuY2hpbGRyZW4pOyQucmV2ZWFsT3JkZXImJiQucmV2ZWFsT3JkZXJbMF09PT0iYiImJkoucmV2ZXJzZSgpO2Zvcih2YXIgUT1KLmxlbmd0aDtRLS07KXRoaXMubC5zZXQoSltRXSx0aGlzLmk9WzEsMCx0aGlzLmldKTtyZXR1cm4gJC5jaGlsZHJlbn0sTjUucHJvdG90eXBlLmNvbXBvbmVudERpZFVwZGF0ZT1ONS5wcm90b3R5cGUuY29tcG9uZW50RGlkTW91bnQ9ZnVuY3Rpb24oKXt2YXIgJD10aGlzO3RoaXMubC5mb3JFYWNoKGZ1bmN0aW9uKEosUSl7ajgoJCxRLEopfSl9O3ZhciBaNz10eXBlb2YgU3ltYm9sPCJ1IiYmU3ltYm9sLmZvciYmU3ltYm9sLmZvcigicmVhY3QuZWxlbWVudCIpfHw2MDEwMyxLNz0vXig/OmFjY2VudHxhbGlnbm1lbnR8YXJhYmljfGJhc2VsaW5lfGNhcHxjbGlwKD8hUGF0aFUpfGNvbG9yfGRvbWluYW50fGZpbGx8Zmxvb2R8Zm9udHxnbHlwaCg/IVIpfGhvcml6fGltYWdlKCFTKXxsZXR0ZXJ8bGlnaHRpbmd8bWFya2VyKD8hSHxXfFUpfG92ZXJsaW5lfHBhaW50fHBvaW50ZXJ8c2hhcGV8c3RvcHxzdHJpa2V0aHJvdWdofHN0cm9rZXx0ZXh0KD8hTCl8dHJhbnNmb3JtfHVuZGVybGluZXx1bmljb2RlfHVuaXRzfHZ8dmVjdG9yfHZlcnR8d29yZHx3cml0aW5nfHgoPyFDKSlbQS1aXS8sWDc9L15vbihBbml8VHJhfFRvdXxCZWZvcmVJbnB8Q29tcG8pLyxZNz0vW0EtWjAtOV0vZyxxNz10eXBlb2YgZG9jdW1lbnQ8InUiLEc3PWZ1bmN0aW9uKCQpe3JldHVybih0eXBlb2YgU3ltYm9sPCJ1IiYmdHlwZW9mIFN5bWJvbCgpPT0ic3ltYm9sIj8vZmlsfGNoZXxyYWQvOi9maWx8Y2hlfHJhLykudGVzdCgkKX07ZnVuY3Rpb24gbDgoJCxKLFEpe3JldHVybiBKLl9faz09bnVsbCYmKEoudGV4dENvbnRlbnQ9IiIpLFMwKCQsSiksdHlwZW9mIFE9PSJmdW5jdGlvbiImJlEoKSwkPyQuX19jOm51bGx9bzEucHJvdG90eXBlLmlzUmVhY3RDb21wb25lbnQ9ITAsWyJjb21wb25lbnRXaWxsTW91bnQiLCJjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzIiwiY29tcG9uZW50V2lsbFVwZGF0ZSJdLmZvckVhY2goZnVuY3Rpb24oJCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KG8xLnByb3RvdHlwZSwkLHtjb25maWd1cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXNbIlVOU0FGRV8iKyRdfSxzZXQ6ZnVuY3Rpb24oSil7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsJCx7Y29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOkp9KX19KX0pO3ZhciBoOD1zLmV2ZW50O3MuZXZlbnQ9ZnVuY3Rpb24oJCl7cmV0dXJuIGg4JiYoJD1oOCgkKSksJC5wZXJzaXN0PWZ1bmN0aW9uKCl7fSwkLmlzUHJvcGFnYXRpb25TdG9wcGVkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2FuY2VsQnViYmxlfSwkLmlzRGVmYXVsdFByZXZlbnRlZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmRlZmF1bHRQcmV2ZW50ZWR9LCQubmF0aXZlRXZlbnQ9JH07dmFyIGQ4LFY3PXtjb25maWd1cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xhc3N9fSxSOD1zLnZub2RlO3Mudm5vZGU9ZnVuY3Rpb24oJCl7dHlwZW9mICQudHlwZT09InN0cmluZyImJmZ1bmN0aW9uKEope3Zhcntwcm9wczpRLHR5cGU6Wn09SixYPXt9LFk9Wi5pbmRleE9mKCItIik9PS0xO2Zvcih2YXIgcSBpbiBRKXt2YXIgRz1RW3FdO2lmKCEocT09PSJ2YWx1ZSImJigiZGVmYXVsdFZhbHVlImluIFEpJiZHPT1udWxsfHxxNyYmcT09PSJjaGlsZHJlbiImJlo9PT0ibm9zY3JpcHQifHxxPT09ImNsYXNzInx8cT09PSJjbGFzc05hbWUiKSl7dmFyIFY9cS50b0xvd2VyQ2FzZSgpO3E9PT0iZGVmYXVsdFZhbHVlIiYmInZhbHVlImluIFEmJlEudmFsdWU9PW51bGw/cT0idmFsdWUiOnE9PT0iZG93bmxvYWQiJiZHPT09ITA/Rz0iIjpWPT09InRyYW5zbGF0ZSImJkc9PT0ibm8iP0c9ITE6VlswXT09PSJvIiYmVlsxXT09PSJuIj9WPT09Im9uZG91YmxlY2xpY2siP3E9Im9uZGJsY2xpY2siOlYhPT0ib25jaGFuZ2UifHxaIT09ImlucHV0IiYmWiE9PSJ0ZXh0YXJlYSJ8fEc3KFEudHlwZSk/Vj09PSJvbmZvY3VzIj9xPSJvbmZvY3VzaW4iOlY9PT0ib25ibHVyIj9xPSJvbmZvY3Vzb3V0IjpYNy50ZXN0KHEpJiYocT1WKTpWPXE9Im9uaW5wdXQiOlkmJks3LnRlc3QocSk/cT1xLnJlcGxhY2UoWTcsIi0kJiIpLnRvTG93ZXJDYXNlKCk6Rz09PW51bGwmJihHPXZvaWQgMCksVj09PSJvbmlucHV0IiYmWFtxPVZdJiYocT0ib25pbnB1dENhcHR1cmUiKSxYW3FdPUd9fVo9PSJzZWxlY3QiJiYoWC5tdWx0aXBsZSYmQXJyYXkuaXNBcnJheShYLnZhbHVlKSYmKFgudmFsdWU9WjAoUS5jaGlsZHJlbikuZm9yRWFjaChmdW5jdGlvbihCKXtCLnByb3BzLnNlbGVjdGVkPVgudmFsdWUuaW5kZXhPZihCLnByb3BzLnZhbHVlKSE9LTF9KSksWC5kZWZhdWx0VmFsdWUhPW51bGwmJihYLnZhbHVlPVowKFEuY2hpbGRyZW4pLmZvckVhY2goZnVuY3Rpb24oQil7Qi5wcm9wcy5zZWxlY3RlZD1YLm11bHRpcGxlP1guZGVmYXVsdFZhbHVlLmluZGV4T2YoQi5wcm9wcy52YWx1ZSkhPS0xOlguZGVmYXVsdFZhbHVlPT1CLnByb3BzLnZhbHVlfSkpKSxRLmNsYXNzJiYhUS5jbGFzc05hbWU/KFguY2xhc3M9US5jbGFzcyxPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiY2xhc3NOYW1lIixWNykpOlEuY2xhc3NOYW1lJiYoWC5jbGFzcz1YLmNsYXNzTmFtZT1RLmNsYXNzTmFtZSksSi5wcm9wcz1YfSgkKSwkLiQkdHlwZW9mPVo3LFI4JiZSOCgkKX07dmFyIGc4PXMuX19yO3MuX19yPWZ1bmN0aW9uKCQpe2c4JiZnOCgkKSxkOD0kLl9fY307dmFyIG04PXMuZGlmZmVkO3MuZGlmZmVkPWZ1bmN0aW9uKCQpe204JiZtOCgkKTt2YXJ7cHJvcHM6SixfX2U6UX09JDtRIT1udWxsJiYkLnR5cGU9PT0idGV4dGFyZWEiJiYidmFsdWUiaW4gSiYmSi52YWx1ZSE9PVEudmFsdWUmJihRLnZhbHVlPUoudmFsdWU9PW51bGw/IiI6Si52YWx1ZSksZDg9bnVsbH07ZnVuY3Rpb24gYzgoJCl7cmV0dXJuISEkLl9fayYmKFMwKG51bGwsJCksITApfWZ1bmN0aW9uIG84KCQpe3JldHVybntyZW5kZXI6ZnVuY3Rpb24oSil7bDgoSiwkKX0sdW5tb3VudDpmdW5jdGlvbigpe2M4KCQpfX19ZnVuY3Rpb24gSjkoJCxKKXtmb3IodmFyIFEgaW4gSikkW1FdPUpbUV07cmV0dXJuICR9ZnVuY3Rpb24gRzMoJCxKKXtmb3IodmFyIFEgaW4gJClpZihRIT09Il9fc291cmNlIiYmIShRIGluIEopKXJldHVybiEwO2Zvcih2YXIgWiBpbiBKKWlmKFohPT0iX19zb3VyY2UiJiYkW1pdIT09SltaXSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiBROSgkLEope3ZhciBRPUooKSxaPVcoe3Q6e19fOlEsdTpKfX0pLFg9WlswXS50LFk9WlsxXTtyZXR1cm4gdzAoZnVuY3Rpb24oKXtYLl9fPVEsWC51PUoscTMoWCkmJlkoe3Q6WH0pfSxbJCxRLEpdKSxiKGZ1bmN0aW9uKCl7cmV0dXJuIHEzKFgpJiZZKHt0Olh9KSwkKGZ1bmN0aW9uKCl7cTMoWCkmJlkoe3Q6WH0pfSl9LFskXSksUX1mdW5jdGlvbiBxMygkKXt0cnl7cmV0dXJuISgoSj0kLl9fKT09PShRPSQudSgpKSYmKEohPT0wfHwxL0o9PTEvUSl8fEohPUomJlEhPVEpfWNhdGNoKFope3JldHVybiEwfXZhciBKLFF9ZnVuY3Rpb24gWjkoJCl7JCgpfWZ1bmN0aW9uIEs5KCQpe3JldHVybiAkfWZ1bmN0aW9uIFg5KCl7cmV0dXJuWyExLFo5XX12YXIgWTk9dzA7ZnVuY3Rpb24gVjMoJCxKKXt0aGlzLnByb3BzPSQsdGhpcy5jb250ZXh0PUp9ZnVuY3Rpb24gZDAoJCxKKXtmdW5jdGlvbiBRKFgpe3ZhciBZPXRoaXMucHJvcHMucmVmO3JldHVybiBZIT1YLnJlZiYmWSYmKHR5cGVvZiBZPT0iZnVuY3Rpb24iP1kobnVsbCk6WS5jdXJyZW50PW51bGwpLEo/IUoodGhpcy5wcm9wcyxYKXx8WSE9WC5yZWY6RzModGhpcy5wcm9wcyxYKX1mdW5jdGlvbiBaKFgpe3JldHVybiB0aGlzLnNob3VsZENvbXBvbmVudFVwZGF0ZT1RLHAxKCQsWCl9cmV0dXJuIFouZGlzcGxheU5hbWU9Ik1lbW8oIisoJC5kaXNwbGF5TmFtZXx8JC5uYW1lKSsiKSIsWi5fX2Y9Wi5wcm90b3R5cGUuaXNSZWFjdENvbXBvbmVudD0hMCxaLnR5cGU9JCxafShWMy5wcm90b3R5cGU9bmV3IG8xKS5pc1B1cmVSZWFjdENvbXBvbmVudD0hMCxWMy5wcm90b3R5cGUuc2hvdWxkQ29tcG9uZW50VXBkYXRlPWZ1bmN0aW9uKCQsSil7cmV0dXJuIEczKHRoaXMucHJvcHMsJCl8fEczKHRoaXMuc3RhdGUsSil9O3ZhciByOD1zLl9fYjtzLl9fYj1mdW5jdGlvbigkKXskLnR5cGUmJiQudHlwZS5fX2YmJiQucmVmJiYoJC5wcm9wcy5yZWY9JC5yZWYsJC5yZWY9bnVsbCkscjgmJnI4KCQpfTt2YXIgQjc9dHlwZW9mIFN5bWJvbDwidSImJlN5bWJvbC5mb3ImJlN5bWJvbC5mb3IoInJlYWN0LmZvcndhcmRfcmVmIil8fDM5MTE7ZnVuY3Rpb24gVzAoJCl7ZnVuY3Rpb24gSihRKXt2YXIgWj1KOSh7fSxRKTtyZXR1cm4gZGVsZXRlIFoucmVmLCQoWixRLnJlZnx8bnVsbCl9cmV0dXJuIEouJCR0eXBlb2Y9QjcsSi5yZW5kZXI9JCxKLnByb3RvdHlwZS5pc1JlYWN0Q29tcG9uZW50PUouX19mPSEwLEouZGlzcGxheU5hbWU9IkZvcndhcmRSZWYoIisoJC5kaXNwbGF5TmFtZXx8JC5uYW1lKSsiKSIsSn12YXIgaTg9ZnVuY3Rpb24oJCxKKXtyZXR1cm4gJD09bnVsbD9udWxsOlowKFowKCQpLm1hcChKKSl9LE43PXttYXA6aTgsZm9yRWFjaDppOCxjb3VudDpmdW5jdGlvbigkKXtyZXR1cm4gJD9aMCgkKS5sZW5ndGg6MH0sb25seTpmdW5jdGlvbigkKXt2YXIgSj1aMCgkKTtpZihKLmxlbmd0aCE9PTEpdGhyb3ciQ2hpbGRyZW4ub25seSI7cmV0dXJuIEpbMF19LHRvQXJyYXk6WjB9LEw3PXMuX19lO3MuX19lPWZ1bmN0aW9uKCQsSixRLFope2lmKCQudGhlbil7Zm9yKHZhciBYLFk9SjtZPVkuX187KWlmKChYPVkuX19jKSYmWC5fX2MpcmV0dXJuIEouX19lPT1udWxsJiYoSi5fX2U9US5fX2UsSi5fX2s9US5fX2t8fFtdKSxYLl9fYygkLEopfUw3KCQsSixRLFopfTt2YXIgYTg9cy51bm1vdW50O2Z1bmN0aW9uIHE5KCQsSixRKXtyZXR1cm4gJCYmKCQuX19jJiYkLl9fYy5fX0gmJigkLl9fYy5fX0guX18uZm9yRWFjaChmdW5jdGlvbihaKXt0eXBlb2YgWi5fX2M9PSJmdW5jdGlvbiImJlouX19jKCl9KSwkLl9fYy5fX0g9bnVsbCksKCQ9Sjkoe30sJCkpLl9fYyE9bnVsbCYmKCQuX19jLl9fUD09PVEmJigkLl9fYy5fX1A9SiksJC5fX2MuX19lPSEwLCQuX19jPW51bGwpLCQuX19rPSQuX19rJiYkLl9fay5tYXAoZnVuY3Rpb24oWil7cmV0dXJuIHE5KFosSixRKX0pKSwkfWZ1bmN0aW9uIEc5KCQsSixRKXtyZXR1cm4gJCYmUSYmKCQuX192PW51bGwsJC5fX2s9JC5fX2smJiQuX19rLm1hcChmdW5jdGlvbihaKXtyZXR1cm4gRzkoWixKLFEpfSksJC5fX2MmJiQuX19jLl9fUD09PUomJigkLl9fZSYmUS5hcHBlbmRDaGlsZCgkLl9fZSksJC5fX2MuX19lPSEwLCQuX19jLl9fUD1RKSksJH1mdW5jdGlvbiBMNSgpe3RoaXMuX191PTAsdGhpcy5vPW51bGwsdGhpcy5fX2I9bnVsbH1mdW5jdGlvbiBWOSgkKXt2YXIgSj0kLl9fJiYkLl9fLl9fYztyZXR1cm4gSiYmSi5fX2EmJkouX19hKCQpfWZ1bmN0aW9uIHo3KCQpe3ZhciBKLFEsWixYPW51bGw7ZnVuY3Rpb24gWShxKXtpZihKfHwoSj0kKCkpLnRoZW4oZnVuY3Rpb24oRyl7RyYmKFg9Ry5kZWZhdWx0fHxHKSxaPSEwfSxmdW5jdGlvbihHKXtRPUcsWj0hMH0pLFEpdGhyb3cgUTtpZighWil0aHJvdyBKO3JldHVybiBYP3AxKFgscSk6bnVsbH1yZXR1cm4gWS5kaXNwbGF5TmFtZT0iTGF6eSIsWS5fX2Y9ITAsWX1mdW5jdGlvbiBQMigpe3RoaXMuaT1udWxsLHRoaXMubD1udWxsfXMudW5tb3VudD1mdW5jdGlvbigkKXt2YXIgSj0kLl9fYztKJiYoSi5fX3o9ITApLEomJkouX19SJiZKLl9fUigpLEomJjMyJiQuX191JiYoJC50eXBlPW51bGwpLGE4JiZhOCgkKX0sKEw1LnByb3RvdHlwZT1uZXcgbzEpLl9fYz1mdW5jdGlvbigkLEope3ZhciBRPUouX19jLFo9dGhpcztaLm89PW51bGwmJihaLm89W10pLFouby5wdXNoKFEpO3ZhciBYPVY5KFouX192KSxZPSExLHE9ZnVuY3Rpb24oKXtZfHxaLl9fenx8KFk9ITAsUS5fX1I9bnVsbCxYP1goVik6VigpKX07US5fX1I9cTt2YXIgRz1RLl9fUDtRLl9fUD1udWxsO3ZhciBWPWZ1bmN0aW9uKCl7aWYoIS0tWi5fX3Upe2lmKFouc3RhdGUuX19hKXt2YXIgQj1aLnN0YXRlLl9fYTtaLl9fdi5fX2tbMF09RzkoQixCLl9fYy5fX1AsQi5fX2MuX19PKX12YXIgTjtmb3IoWi5zZXRTdGF0ZSh7X19hOlouX19iPW51bGx9KTtOPVouby5wb3AoKTspTi5fX1A9RyxOLmZvcmNlVXBkYXRlKCl9fTtaLl9fdSsrfHwzMiZKLl9fdXx8Wi5zZXRTdGF0ZSh7X19hOlouX19iPVouX192Ll9fa1swXX0pLCQudGhlbihxLHEpfSxMNS5wcm90b3R5cGUuY29tcG9uZW50V2lsbFVubW91bnQ9ZnVuY3Rpb24oKXt0aGlzLm89W119LEw1LnByb3RvdHlwZS5yZW5kZXI9ZnVuY3Rpb24oJCxKKXtpZih0aGlzLl9fYil7aWYodGhpcy5fX3YuX19rKXt2YXIgUT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSxaPXRoaXMuX192Ll9fa1swXS5fX2M7dGhpcy5fX3YuX19rWzBdPXE5KHRoaXMuX19iLFEsWi5fX089Wi5fX1ApfXRoaXMuX19iPW51bGx9dmFyIFg9Si5fX2EmJnAxKFoxLG51bGwsJC5mYWxsYmFjayk7cmV0dXJuIFgmJihYLl9fdSY9LTMzKSxbcDEoWjEsbnVsbCxKLl9fYT9udWxsOiQuY2hpbGRyZW4pLFhdfTt2YXIgbjg9ZnVuY3Rpb24oJCxKLFEpe2lmKCsrUVsxXT09PVFbMF0mJiQubC5kZWxldGUoSiksJC5wcm9wcy5yZXZlYWxPcmRlciYmKCQucHJvcHMucmV2ZWFsT3JkZXJbMF0hPT0idCJ8fCEkLmwuc2l6ZSkpZm9yKFE9JC5pO1E7KXtmb3IoO1EubGVuZ3RoPjM7KVEucG9wKCkoKTtpZihRWzFdPFFbMF0pYnJlYWs7JC5pPVE9UVsyXX19O2Z1bmN0aW9uIEM3KCQpe3JldHVybiB0aGlzLmdldENoaWxkQ29udGV4dD1mdW5jdGlvbigpe3JldHVybiAkLmNvbnRleHR9LCQuY2hpbGRyZW59ZnVuY3Rpb24gVTcoJCl7dmFyIEo9dGhpcyxRPSQuaDtpZihKLmNvbXBvbmVudFdpbGxVbm1vdW50PWZ1bmN0aW9uKCl7UzAobnVsbCxKLnYpLEoudj1udWxsLEouaD1udWxsfSxKLmgmJkouaCE9PVEmJkouY29tcG9uZW50V2lsbFVubW91bnQoKSwhSi52KXtmb3IodmFyIFo9Si5fX3Y7WiE9PW51bGwmJiFaLl9fbSYmWi5fXyE9PW51bGw7KVo9Wi5fXztKLmg9USxKLnY9e25vZGVUeXBlOjEscGFyZW50Tm9kZTpRLGNoaWxkTm9kZXM6W10sX19rOntfX206Wi5fX219LGNvbnRhaW5zOmZ1bmN0aW9uKCl7cmV0dXJuITB9LG5hbWVzcGFjZVVSSTpRLm5hbWVzcGFjZVVSSSxpbnNlcnRCZWZvcmU6ZnVuY3Rpb24oWCxZKXt0aGlzLmNoaWxkTm9kZXMucHVzaChYKSxKLmguaW5zZXJ0QmVmb3JlKFgsWSl9LHJlbW92ZUNoaWxkOmZ1bmN0aW9uKFgpe3RoaXMuY2hpbGROb2Rlcy5zcGxpY2UodGhpcy5jaGlsZE5vZGVzLmluZGV4T2YoWCk+Pj4xLDEpLEouaC5yZW1vdmVDaGlsZChYKX19fVMwKHAxKEM3LHtjb250ZXh0OkouY29udGV4dH0sJC5fX3YpLEoudil9ZnVuY3Rpb24gQjMoJCxKKXt2YXIgUT1wMShVNyx7X192OiQsaDpKfSk7cmV0dXJuIFEuY29udGFpbmVySW5mbz1KLFF9KFAyLnByb3RvdHlwZT1uZXcgbzEpLl9fYT1mdW5jdGlvbigkKXt2YXIgSj10aGlzLFE9VjkoSi5fX3YpLFo9Si5sLmdldCgkKTtyZXR1cm4gWlswXSsrLGZ1bmN0aW9uKFgpe3ZhciBZPWZ1bmN0aW9uKCl7Si5wcm9wcy5yZXZlYWxPcmRlcj8oWi5wdXNoKFgpLG44KEosJCxaKSk6WCgpfTtRP1EoWSk6WSgpfX0sUDIucHJvdG90eXBlLnJlbmRlcj1mdW5jdGlvbigkKXt0aGlzLmk9bnVsbCx0aGlzLmw9bmV3IE1hcDt2YXIgSj1aMCgkLmNoaWxkcmVuKTskLnJldmVhbE9yZGVyJiYkLnJldmVhbE9yZGVyWzBdPT09ImIiJiZKLnJldmVyc2UoKTtmb3IodmFyIFE9Si5sZW5ndGg7US0tOyl0aGlzLmwuc2V0KEpbUV0sdGhpcy5pPVsxLDAsdGhpcy5pXSk7cmV0dXJuICQuY2hpbGRyZW59LFAyLnByb3RvdHlwZS5jb21wb25lbnREaWRVcGRhdGU9UDIucHJvdG90eXBlLmNvbXBvbmVudERpZE1vdW50PWZ1bmN0aW9uKCl7dmFyICQ9dGhpczt0aGlzLmwuZm9yRWFjaChmdW5jdGlvbihKLFEpe244KCQsUSxKKX0pfTt2YXIgQjk9dHlwZW9mIFN5bWJvbDwidSImJlN5bWJvbC5mb3ImJlN5bWJvbC5mb3IoInJlYWN0LmVsZW1lbnQiKXx8NjAxMDMsSDc9L14oPzphY2NlbnR8YWxpZ25tZW50fGFyYWJpY3xiYXNlbGluZXxjYXB8Y2xpcCg/IVBhdGhVKXxjb2xvcnxkb21pbmFudHxmaWxsfGZsb29kfGZvbnR8Z2x5cGgoPyFSKXxob3JpenxpbWFnZSghUyl8bGV0dGVyfGxpZ2h0aW5nfG1hcmtlcig/IUh8V3xVKXxvdmVybGluZXxwYWludHxwb2ludGVyfHNoYXBlfHN0b3B8c3RyaWtldGhyb3VnaHxzdHJva2V8dGV4dCg/IUwpfHRyYW5zZm9ybXx1bmRlcmxpbmV8dW5pY29kZXx1bml0c3x2fHZlY3Rvcnx2ZXJ0fHdvcmR8d3JpdGluZ3x4KD8hQykpW0EtWl0vLEE3PS9eb24oQW5pfFRyYXxUb3V8QmVmb3JlSW5wfENvbXBvKS8sazc9L1tBLVowLTldL2csTzc9dHlwZW9mIGRvY3VtZW50PCJ1IixGNz1mdW5jdGlvbigkKXtyZXR1cm4odHlwZW9mIFN5bWJvbDwidSImJnR5cGVvZiBTeW1ib2woKT09InN5bWJvbCI/L2ZpbHxjaGV8cmFkLzovZmlsfGNoZXxyYS8pLnRlc3QoJCl9O2Z1bmN0aW9uIE03KCQsSixRKXtyZXR1cm4gSi5fX2s9PW51bGwmJihKLnRleHRDb250ZW50PSIiKSxTMCgkLEopLHR5cGVvZiBRPT0iZnVuY3Rpb24iJiZRKCksJD8kLl9fYzpudWxsfWZ1bmN0aW9uIFc3KCQsSixRKXtyZXR1cm4gcTUoJCxKKSx0eXBlb2YgUT09ImZ1bmN0aW9uIiYmUSgpLCQ/JC5fX2M6bnVsbH1vMS5wcm90b3R5cGUuaXNSZWFjdENvbXBvbmVudD0hMCxbImNvbXBvbmVudFdpbGxNb3VudCIsImNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMiLCJjb21wb25lbnRXaWxsVXBkYXRlIl0uZm9yRWFjaChmdW5jdGlvbigkKXtPYmplY3QuZGVmaW5lUHJvcGVydHkobzEucHJvdG90eXBlLCQse2NvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc1siVU5TQUZFXyIrJF19LHNldDpmdW5jdGlvbihKKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywkLHtjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6Sn0pfX0pfSk7dmFyIHM4PXMuZXZlbnQ7cy5ldmVudD1mdW5jdGlvbigkKXtyZXR1cm4gczgmJigkPXM4KCQpKSwkLnBlcnNpc3Q9ZnVuY3Rpb24oKXt9LCQuaXNQcm9wYWdhdGlvblN0b3BwZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jYW5jZWxCdWJibGV9LCQuaXNEZWZhdWx0UHJldmVudGVkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGVmYXVsdFByZXZlbnRlZH0sJC5uYXRpdmVFdmVudD0kfTt2YXIgTjMsUDc9e2NvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbGFzc319LHQ4PXMudm5vZGU7cy52bm9kZT1mdW5jdGlvbigkKXt0eXBlb2YgJC50eXBlPT0ic3RyaW5nIiYmZnVuY3Rpb24oSil7dmFye3Byb3BzOlEsdHlwZTpafT1KLFg9e30sWT1aLmluZGV4T2YoIi0iKT09LTE7Zm9yKHZhciBxIGluIFEpe3ZhciBHPVFbcV07aWYoIShxPT09InZhbHVlIiYmKCJkZWZhdWx0VmFsdWUiaW4gUSkmJkc9PW51bGx8fE83JiZxPT09ImNoaWxkcmVuIiYmWj09PSJub3NjcmlwdCJ8fHE9PT0iY2xhc3MifHxxPT09ImNsYXNzTmFtZSIpKXt2YXIgVj1xLnRvTG93ZXJDYXNlKCk7cT09PSJkZWZhdWx0VmFsdWUiJiYidmFsdWUiaW4gUSYmUS52YWx1ZT09bnVsbD9xPSJ2YWx1ZSI6cT09PSJkb3dubG9hZCImJkc9PT0hMD9HPSIiOlY9PT0idHJhbnNsYXRlIiYmRz09PSJubyI/Rz0hMTpWWzBdPT09Im8iJiZWWzFdPT09Im4iP1Y9PT0ib25kb3VibGVjbGljayI/cT0ib25kYmxjbGljayI6ViE9PSJvbmNoYW5nZSJ8fFohPT0iaW5wdXQiJiZaIT09InRleHRhcmVhInx8RjcoUS50eXBlKT9WPT09Im9uZm9jdXMiP3E9Im9uZm9jdXNpbiI6Vj09PSJvbmJsdXIiP3E9Im9uZm9jdXNvdXQiOkE3LnRlc3QocSkmJihxPVYpOlY9cT0ib25pbnB1dCI6WSYmSDcudGVzdChxKT9xPXEucmVwbGFjZShrNywiLSQmIikudG9Mb3dlckNhc2UoKTpHPT09bnVsbCYmKEc9dm9pZCAwKSxWPT09Im9uaW5wdXQiJiZYW3E9Vl0mJihxPSJvbmlucHV0Q2FwdHVyZSIpLFhbcV09R319Wj09InNlbGVjdCImJihYLm11bHRpcGxlJiZBcnJheS5pc0FycmF5KFgudmFsdWUpJiYoWC52YWx1ZT1aMChRLmNoaWxkcmVuKS5mb3JFYWNoKGZ1bmN0aW9uKEIpe0IucHJvcHMuc2VsZWN0ZWQ9WC52YWx1ZS5pbmRleE9mKEIucHJvcHMudmFsdWUpIT0tMX0pKSxYLmRlZmF1bHRWYWx1ZSE9bnVsbCYmKFgudmFsdWU9WjAoUS5jaGlsZHJlbikuZm9yRWFjaChmdW5jdGlvbihCKXtCLnByb3BzLnNlbGVjdGVkPVgubXVsdGlwbGU/WC5kZWZhdWx0VmFsdWUuaW5kZXhPZihCLnByb3BzLnZhbHVlKSE9LTE6WC5kZWZhdWx0VmFsdWU9PUIucHJvcHMudmFsdWV9KSkpLFEuY2xhc3MmJiFRLmNsYXNzTmFtZT8oWC5jbGFzcz1RLmNsYXNzLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJjbGFzc05hbWUiLFA3KSk6US5jbGFzc05hbWUmJihYLmNsYXNzPVguY2xhc3NOYW1lPVEuY2xhc3NOYW1lKSxKLnByb3BzPVh9KCQpLCQuJCR0eXBlb2Y9QjksdDgmJnQ4KCQpfTt2YXIgZTg9cy5fX3I7cy5fX3I9ZnVuY3Rpb24oJCl7ZTgmJmU4KCQpLE4zPSQuX19jfTt2YXIgJDk9cy5kaWZmZWQ7cy5kaWZmZWQ9ZnVuY3Rpb24oJCl7JDkmJiQ5KCQpO3Zhcntwcm9wczpKLF9fZTpRfT0kO1EhPW51bGwmJiQudHlwZT09PSJ0ZXh0YXJlYSImJiJ2YWx1ZSJpbiBKJiZKLnZhbHVlIT09US52YWx1ZSYmKFEudmFsdWU9Si52YWx1ZT09bnVsbD8iIjpKLnZhbHVlKSxOMz1udWxsfTt2YXIgXzc9e1JlYWN0Q3VycmVudERpc3BhdGNoZXI6e2N1cnJlbnQ6e3JlYWRDb250ZXh0OmZ1bmN0aW9uKCQpe3JldHVybiBOMy5fX25bJC5fX2NdLnByb3BzLnZhbHVlfSx1c2VDYWxsYmFjazpELHVzZUNvbnRleHQ6QzAsdXNlRGVidWdWYWx1ZTpCNSx1c2VEZWZlcnJlZFZhbHVlOks5LHVzZUVmZmVjdDpiLHVzZUlkOkoyLHVzZUltcGVyYXRpdmVIYW5kbGU6VjUsdXNlSW5zZXJ0aW9uRWZmZWN0Olk5LHVzZUxheW91dEVmZmVjdDp3MCx1c2VNZW1vOkUxLHVzZVJlZHVjZXI6bDAsdXNlUmVmOkUsdXNlU3RhdGU6Vyx1c2VTeW5jRXh0ZXJuYWxTdG9yZTpROSx1c2VUcmFuc2l0aW9uOlg5fX19O2Z1bmN0aW9uIEQ3KCQpe3JldHVybiBwMS5iaW5kKG51bGwsJCl9ZnVuY3Rpb24gejUoJCl7cmV0dXJuISEkJiYkLiQkdHlwZW9mPT09Qjl9ZnVuY3Rpb24gVDcoJCl7cmV0dXJuIHo1KCQpJiYkLnR5cGU9PT1aMX1mdW5jdGlvbiB3NygkKXtyZXR1cm4hISQmJnR5cGVvZiAkLmRpc3BsYXlOYW1lPT0ic3RyaW5nIiYmJC5kaXNwbGF5TmFtZS5pbmRleE9mKCJNZW1vKCIpPT0wfWZ1bmN0aW9uIEU3KCQpe3JldHVybiB6NSgkKT9RMy5hcHBseShudWxsLGFyZ3VtZW50cyk6JH1mdW5jdGlvbiBJNygkKXtyZXR1cm4hISQuX19rJiYoUzAobnVsbCwkKSwhMCl9ZnVuY3Rpb24geTcoJCl7cmV0dXJuICQmJigkLmJhc2V8fCQubm9kZVR5cGU9PT0xJiYkKXx8bnVsbH12YXIgYjc9ZnVuY3Rpb24oJCxKKXtyZXR1cm4gJChKKX0sUzc9ZnVuY3Rpb24oJCxKKXt2YXIgUT1zLmRlYm91bmNlUmVuZGVyaW5nO3MuZGVib3VuY2VSZW5kZXJpbmc9ZnVuY3Rpb24oWCl7cmV0dXJuIFgoKX07dmFyIFo9JChKKTtyZXR1cm4gcy5kZWJvdW5jZVJlbmRlcmluZz1RLFp9LHg3PXo1LG09e3VzZVN0YXRlOlcsdXNlSWQ6SjIsdXNlUmVkdWNlcjpsMCx1c2VFZmZlY3Q6Yix1c2VMYXlvdXRFZmZlY3Q6dzAsdXNlSW5zZXJ0aW9uRWZmZWN0Olk5LHVzZVRyYW5zaXRpb246WDksdXNlRGVmZXJyZWRWYWx1ZTpLOSx1c2VTeW5jRXh0ZXJuYWxTdG9yZTpROSxzdGFydFRyYW5zaXRpb246WjksdXNlUmVmOkUsdXNlSW1wZXJhdGl2ZUhhbmRsZTpWNSx1c2VNZW1vOkUxLHVzZUNhbGxiYWNrOkQsdXNlQ29udGV4dDpDMCx1c2VEZWJ1Z1ZhbHVlOkI1LHZlcnNpb246IjE4LjMuMSIsQ2hpbGRyZW46TjcscmVuZGVyOk03LGh5ZHJhdGU6VzcsdW5tb3VudENvbXBvbmVudEF0Tm9kZTpJNyxjcmVhdGVQb3J0YWw6QjMsY3JlYXRlRWxlbWVudDpwMSxjcmVhdGVDb250ZXh0OnowLGNyZWF0ZUZhY3Rvcnk6RDcsY2xvbmVFbGVtZW50OkU3LGNyZWF0ZVJlZjpXMixGcmFnbWVudDpaMSxpc1ZhbGlkRWxlbWVudDp6NSxpc0VsZW1lbnQ6eDcsaXNGcmFnbWVudDpUNyxpc01lbW86dzcsZmluZERPTU5vZGU6eTcsQ29tcG9uZW50Om8xLFB1cmVDb21wb25lbnQ6VjMsbWVtbzpkMCxmb3J3YXJkUmVmOlcwLGZsdXNoU3luYzpTNyx1bnN0YWJsZV9iYXRjaGVkVXBkYXRlczpiNyxTdHJpY3RNb2RlOloxLFN1c3BlbnNlOkw1LFN1c3BlbnNlTGlzdDpQMixsYXp5Ono3LF9fU0VDUkVUX0lOVEVSTkFMU19ET19OT1RfVVNFX09SX1lPVV9XSUxMX0JFX0ZJUkVEOl83fTt2YXIgXzI9e3BvcnRyYWl0OiJsYW5kc2NhcGVfbGVmdCIsbGFuZHNjYXBlX2xlZnQ6InBvcnRyYWl0X3Vwc2lkZV9kb3duIixwb3J0cmFpdF91cHNpZGVfZG93bjoibGFuZHNjYXBlX3JpZ2h0IixsYW5kc2NhcGVfcmlnaHQ6InBvcnRyYWl0In0sTDM9e3BvcnRyYWl0OiJsYW5kc2NhcGVfcmlnaHQiLGxhbmRzY2FwZV9yaWdodDoicG9ydHJhaXRfdXBzaWRlX2Rvd24iLHBvcnRyYWl0X3Vwc2lkZV9kb3duOiJsYW5kc2NhcGVfbGVmdCIsbGFuZHNjYXBlX2xlZnQ6InBvcnRyYWl0In07dmFyIFEyPTM7ZnVuY3Rpb24gejMoJCl7cmV0dXJuICQ+PTAuOTM/Mzp2b2lkIDB9ZnVuY3Rpb24gQzMoJCl7cmV0dXJuICQ9PT0ibGFuZHNjYXBlX2xlZnQifHwkPT09ImxhbmRzY2FwZV9yaWdodCJ9ZnVuY3Rpb24gZzAoJCl7cmV0dXJuISEkJiYoQzMoJC5vcmllbnRhdGlvbil8fCQud2lkdGg+JC5oZWlnaHQpfWZ1bmN0aW9uIFoyKCQpe2lmKCEkfHwkLndpZHRoPD0wfHwkLmhlaWdodDw9MClyZXR1cm4gbnVsbDtsZXQgSj1DMygkLm9yaWVudGF0aW9uKXx8JC53aWR0aD4kLmhlaWdodCxRPUo/TWF0aC5tYXgoJC53aWR0aCwkLmhlaWdodCk6TWF0aC5taW4oJC53aWR0aCwkLmhlaWdodCksWj1KP01hdGgubWluKCQud2lkdGgsJC5oZWlnaHQpOk1hdGgubWF4KCQud2lkdGgsJC5oZWlnaHQpO2lmKFE9PT0kLndpZHRoJiZaPT09JC5oZWlnaHQpcmV0dXJuICQ7cmV0dXJuey4uLiQsd2lkdGg6USxoZWlnaHQ6Wn19ZnVuY3Rpb24gSzIoJCl7bGV0IEo9WjIoJCksUT1OOSgkPy5vcmllbnRhdGlvbiksWj1NYXRoLmFicyhRKT09PTkwLFg9ISEkJiYkLndpZHRoPiQuaGVpZ2h0LFk9UT09PTE4MHx8WiYmIVg7cmV0dXJue2Rpc3BsYXlDb25maWc6Sixyb3RhdGlvbkRlZ3JlZXM6WT9ROjAsbmVlZHNDc3NSb3RhdGlvbjpZLGlucHV0T3JpZW50YXRpb246WT8kPy5vcmllbnRhdGlvbjp2b2lkIDB9fWZ1bmN0aW9uIE45KCQpe3N3aXRjaCgkKXtjYXNlImxhbmRzY2FwZV9sZWZ0IjpyZXR1cm4gOTA7Y2FzZSJsYW5kc2NhcGVfcmlnaHQiOnJldHVybi05MDtjYXNlInBvcnRyYWl0X3Vwc2lkZV9kb3duIjpyZXR1cm4gMTgwO2RlZmF1bHQ6cmV0dXJuIDB9fWZ1bmN0aW9uIFgyKCQsSixRKXtzd2l0Y2goJCl7Y2FzZSJsYW5kc2NhcGVfbGVmdCI6cmV0dXJue3g6USx5OjEtSn07Y2FzZSJsYW5kc2NhcGVfcmlnaHQiOnJldHVybnt4OjEtUSx5Okp9O2Nhc2UicG9ydHJhaXRfdXBzaWRlX2Rvd24iOnJldHVybnt4OjEtSix5OjEtUX07ZGVmYXVsdDpyZXR1cm57eDpKLHk6UX19fWZ1bmN0aW9uIEw5KCQsSixRKXtzd2l0Y2goJCl7Y2FzZSJsYW5kc2NhcGVfbGVmdCI6cmV0dXJue2R4OlEsZHk6LUp9O2Nhc2UibGFuZHNjYXBlX3JpZ2h0IjpyZXR1cm57ZHg6LVEsZHk6Sn07Y2FzZSJwb3J0cmFpdF91cHNpZGVfZG93biI6cmV0dXJue2R4Oi1KLGR5Oi1RfTtkZWZhdWx0OnJldHVybntkeDpKLGR5OlF9fX1mdW5jdGlvbiBVMygkLEope3N3aXRjaCgkKXtjYXNlImxhbmRzY2FwZV9sZWZ0Ijpzd2l0Y2goSil7Y2FzZSAxOnJldHVybiAzO2Nhc2UgNDpyZXR1cm4gMjtjYXNlIDI6cmV0dXJuIDE7Y2FzZSAzOnJldHVybiA0O2RlZmF1bHQ6cmV0dXJuIEp9Y2FzZSJsYW5kc2NhcGVfcmlnaHQiOnN3aXRjaChKKXtjYXNlIDE6cmV0dXJuIDI7Y2FzZSA0OnJldHVybiAzO2Nhc2UgMjpyZXR1cm4gNDtjYXNlIDM6cmV0dXJuIDE7ZGVmYXVsdDpyZXR1cm4gSn1jYXNlInBvcnRyYWl0X3Vwc2lkZV9kb3duIjpzd2l0Y2goSil7Y2FzZSAxOnJldHVybiA0O2Nhc2UgNDpyZXR1cm4gMTtjYXNlIDI6cmV0dXJuIDM7Y2FzZSAzOnJldHVybiAyO2RlZmF1bHQ6cmV0dXJuIEp9ZGVmYXVsdDpyZXR1cm4gSn19dmFyIHo5PTE2O2Z1bmN0aW9uIEQyKCQsSixRKXtpZighTnVtYmVyLmlzRmluaXRlKCQpKXJldHVybiBudWxsO2xldCBaPU51bWJlci5pc0Zpbml0ZShRKSYmUT4wP1E6MSxYPUo9PT0xPyQqMTY6Sj09PTI/JCpaOiQsWT1NYXRoLm1heCgtMjAwLE1hdGgubWluKDIwMCxYKSk7cmV0dXJuIE1hdGguYWJzKFkpPDAuMDE/bnVsbDpZfWZ1bmN0aW9uIEgzKCQsSixRKXtpZighTnVtYmVyLmlzRmluaXRlKCQpKXJldHVybiAwO2xldCBaPU51bWJlci5pc0Zpbml0ZShRKSYmUT4wP1E6MTtpZihKPT09MSlyZXR1cm4gJCp6OTtpZihKPT09MilyZXR1cm4gJCpaO3JldHVybiAkfWZ1bmN0aW9uIEM5KCQsSixRKXtpZighSnx8Si53aWR0aDw9MHx8Si5oZWlnaHQ8PTApcmV0dXJuIG51bGw7bGV0IFo9Si5vcmllbnRhdGlvbj09PXZvaWQgMCYmJD8ub3JpZW50YXRpb24/ey4uLkosb3JpZW50YXRpb246JC5vcmllbnRhdGlvbn06SjtpZigkJiYkLndpZHRoPT09Wi53aWR0aCYmJC5oZWlnaHQ9PT1aLmhlaWdodCYmJC5vcmllbnRhdGlvbj09PVoub3JpZW50YXRpb24pcmV0dXJuIG51bGw7cmV0dXJue2NvbmZpZzpaLG5vdGlmeVBhcmVudDpRIT09ImV4dGVybmFsIn19ZnVuY3Rpb24gVTkoe3N0cmVhbU1vZGU6JCxhdmNjU3VwcG9ydGVkOkosaGFzRXh0ZXJuYWxJbnB1dDpRLGhhc0V4dGVybmFsRnJhbWVzOlp9KXtsZXQgWD0kPT09ImF2Y2MiJiYhSj8ibWpwZWciOiQsWT1YPT09IndlYnJ0YyIscT1YPT09ImF2Y2MiLEc9WD09PSJtanBlZyImJlo7cmV0dXJue2VmZmVjdGl2ZVN0cmVhbU1vZGU6WCx1c2VXZWJSdGM6WSx1c2VBdmNjOnEsZXh0ZXJuYWxJbnB1dDpRLGV4dGVybmFsTWpwZWc6RyxvcGVuRGlyZWN0Q29udHJvbFNvY2tldDohUSxvcGVuRGlyZWN0TWpwZWc6WD09PSJtanBlZyImJiFHfX12YXIgdjc9e1sxXToiZGVzY3JpcHRpb24iLFsyXToia2V5ZnJhbWUiLFszXToiZGVsdGEiLFs0XToic2VlZCJ9O2NsYXNzIEM1e2J1ZmZlcj1uZXcgVWludDhBcnJheSg2NTUzNik7bGVuPTA7c3RhcnQ9MDthcHBlbmQoJCl7aWYodGhpcy5sZW4rJC5sZW5ndGg+dGhpcy5idWZmZXIubGVuZ3RoKXtpZih0aGlzLnN0YXJ0PjApdGhpcy5idWZmZXIuY29weVdpdGhpbigwLHRoaXMuc3RhcnQsdGhpcy5sZW4pLHRoaXMubGVuLT10aGlzLnN0YXJ0LHRoaXMuc3RhcnQ9MDtpZih0aGlzLmxlbiskLmxlbmd0aD50aGlzLmJ1ZmZlci5sZW5ndGgpe2xldCBKPXRoaXMuYnVmZmVyLmxlbmd0aDt3aGlsZShKPHRoaXMubGVuKyQubGVuZ3RoKUoqPTI7bGV0IFE9bmV3IFVpbnQ4QXJyYXkoSik7US5zZXQodGhpcy5idWZmZXIuc3ViYXJyYXkoMCx0aGlzLmxlbikpLHRoaXMuYnVmZmVyPVF9fXRoaXMuYnVmZmVyLnNldCgkLHRoaXMubGVuKSx0aGlzLmxlbis9JC5sZW5ndGh9cHVzaCgkKXtpZigkLmxlbmd0aD4wKXRoaXMuYXBwZW5kKCQpO2xldCBKPVtdLFE9dGhpcy5idWZmZXI7d2hpbGUodGhpcy5sZW4tdGhpcy5zdGFydD49NCl7bGV0IFo9dGhpcy5zdGFydCxYPShRW1pdPDwyNHxRW1orMV08PDE2fFFbWisyXTw8OHxRW1orM10pPj4+MDtpZih0aGlzLmxlbi1aLTQ8WClicmVhaztpZihYPDEpe3RoaXMuc3RhcnQrPTQ7Y29udGludWV9bGV0IFk9UVtaKzRdLHE9djdbWV07aWYocSlKLnB1c2goe3R5cGU6cSxwYXlsb2FkOlEuc2xpY2UoWis1LForNCtYKX0pO3RoaXMuc3RhcnQrPTQrWH1pZih0aGlzLnN0YXJ0PjApe2lmKHRoaXMuc3RhcnQ8dGhpcy5sZW4pdGhpcy5idWZmZXIuY29weVdpdGhpbigwLHRoaXMuc3RhcnQsdGhpcy5sZW4pO3RoaXMubGVuLT10aGlzLnN0YXJ0LHRoaXMuc3RhcnQ9MH1yZXR1cm4gSn1yZXNldCgpe3RoaXMubGVuPTAsdGhpcy5zdGFydD0wfX1mdW5jdGlvbiBBMygkKXtpZigkLmxlbmd0aDw0KXJldHVybiJhdmMxLjQyRTAxRSI7bGV0IEo9KFEpPT5RLnRvU3RyaW5nKDE2KS5wYWRTdGFydCgyLCIwIik7cmV0dXJuImF2YzEuIitKKCRbMV0pK0ooJFsyXSkrSigkWzNdKX1mdW5jdGlvbiBjMCgpe3JldHVybiB0eXBlb2YgZ2xvYmFsVGhpczwidSImJnR5cGVvZiBnbG9iYWxUaGlzLlZpZGVvRGVjb2RlcjwidSJ9dmFyIGo3PTEwMDAsaDc9MTY2Njc7ZnVuY3Rpb24gazMoe3VybDokLGVuYWJsZWQ6SixjYW52YXNSZWY6USxvbkZpcnN0RnJhbWU6WixvbkZyYW1lOlgsb25EZWNvZGVkRnJhbWU6WSxvbkVycm9yOnEsb25EZWNvZGVyRXJyb3I6R30pe2xldCBWPUUoe29uRmlyc3RGcmFtZTpaLG9uRnJhbWU6WCxvbkRlY29kZWRGcmFtZTpZLG9uRXJyb3I6cSxvbkRlY29kZXJFcnJvcjpHfSk7Vi5jdXJyZW50PXtvbkZpcnN0RnJhbWU6WixvbkZyYW1lOlgsb25EZWNvZGVkRnJhbWU6WSxvbkVycm9yOnEsb25EZWNvZGVyRXJyb3I6R30sYigoKT0+e2lmKCFKfHwhJHx8IWMwKCkpcmV0dXJuO2xldCBCPW5ldyBBYm9ydENvbnRyb2xsZXIsTj1uZXcgQzUsej0hMSxMPSExLEM9ITEsQT0wLFU9bnVsbCxIPW51bGwsaz0oKT0+IXomJiFCLnNpZ25hbC5hYm9ydGVkLEY9KGwpPT57aWYoVi5jdXJyZW50Lm9uRGVjb2RlckVycm9yKVYuY3VycmVudC5vbkRlY29kZXJFcnJvcigpO2Vsc2UgVi5jdXJyZW50Lm9uRXJyb3I/LihsKX0sdz0obCxvLFExLE4xKT0+e2lmKCFrKCkpcmV0dXJuO2xldCBjPVEuY3VycmVudDtpZighYylyZXR1cm47aWYoYy53aWR0aCE9PW98fGMuaGVpZ2h0IT09UTEpYy53aWR0aD1vLGMuaGVpZ2h0PVExO2xldCB2PWMuZ2V0Q29udGV4dCgiMmQiKTtpZighdilyZXR1cm47aWYodi5kcmF3SW1hZ2UobCwwLDAsbyxRMSksVi5jdXJyZW50Lm9uRnJhbWU/LigpLE4xJiYhQylDPSEwLFYuY3VycmVudC5vbkRlY29kZWRGcmFtZT8uKCk7aWYoIUwpTD0hMCxWLmN1cnJlbnQub25GaXJzdEZyYW1lPy4oKX0sVD0oKT0+bmV3IFZpZGVvRGVjb2Rlcih7b3V0cHV0OihsKT0+e3RyeXtpZihrKCkpdyhsLGwuZGlzcGxheVdpZHRoLGwuZGlzcGxheUhlaWdodCwhMCl9ZmluYWxseXtsLmNsb3NlKCl9fSxlcnJvcjoobCk9PkYoYGRlY29kZXI6ICR7bC5tZXNzYWdlfWApfSksUz1hc3luYyhsKT0+e2xldCBvPWF3YWl0IGNyZWF0ZUltYWdlQml0bWFwKG5ldyBCbG9iKFtsXSx7dHlwZToiaW1hZ2UvanBlZyJ9KSk7dHJ5e2lmKGsoKSl3KG8sby53aWR0aCxvLmhlaWdodCwhMSl9ZmluYWxseXtvLmNsb3NlKCl9fSx4PShsKT0+e2lmKCFIfHxILnN0YXRlPT09ImNsb3NlZCIpSD1UKCk7dHJ5e0guY29uZmlndXJlKHtjb2RlYzpBMyhsKSxkZXNjcmlwdGlvbjpsLG9wdGltaXplRm9yOiJsYXRlbmN5IixoYXJkd2FyZUFjY2VsZXJhdGlvbjoicHJlZmVyLWhhcmR3YXJlIn0pfWNhdGNoKG8pe0YoYGNvbmZpZzogJHtvLm1lc3NhZ2V9YCl9fSwkMT0obCxvKT0+e2lmKEg/LnN0YXRlIT09ImNvbmZpZ3VyZWQiKXJldHVybjt0cnl7SC5kZWNvZGUobmV3IEVuY29kZWRWaWRlb0NodW5rKHt0eXBlOmw9PT0ia2V5ZnJhbWUiPyJrZXkiOiJkZWx0YSIsdGltZXN0YW1wOkEsZGF0YTpvfSkpLEErPWg3fWNhdGNoe319LGY9KGwsbyk9Pntzd2l0Y2gobCl7Y2FzZSJzZWVkIjpTKG8pLmNhdGNoKCgpPT57fSk7cmV0dXJuO2Nhc2UiZGVzY3JpcHRpb24iOngobyk7cmV0dXJuO2Nhc2Uia2V5ZnJhbWUiOmNhc2UiZGVsdGEiOiQxKGwsbyk7cmV0dXJufX0saT0oKT0+e2lmKCFrKCl8fFUpcmV0dXJuO1U9c2V0VGltZW91dCgoKT0+e1U9bnVsbCxyKCl9LGo3KX0scj1hc3luYygpPT57Ti5yZXNldCgpO3RyeXtsZXQgbz0oYXdhaXQgZmV0Y2goYCR7JH0vc3RyZWFtLmF2Y2NgLHtzaWduYWw6Qi5zaWduYWx9KSkuYm9keT8uZ2V0UmVhZGVyKCk7aWYoIW8pcmV0dXJuO2Zvcig7Oyl7bGV0e2RvbmU6UTEsdmFsdWU6TjF9PWF3YWl0IG8ucmVhZCgpO2lmKFExKWJyZWFrO2lmKCFOMSljb250aW51ZTtmb3IobGV0IGMgb2YgTi5wdXNoKE4xKSlmKGMudHlwZSxjLnBheWxvYWQpfX1jYXRjaHt9ZmluYWxseXtpZihrKCkpaSgpfX07cmV0dXJuIHIoKSwoKT0+e2lmKHo9ITAsVSljbGVhclRpbWVvdXQoVSk7aWYoQi5hYm9ydCgpLE4ucmVzZXQoKSxIJiZILnN0YXRlIT09ImNsb3NlZCIpdHJ5e0guY2xvc2UoKX1jYXRjaHt9SD1udWxsfX0sWyQsSixRXSl9ZnVuY3Rpb24gSDkoJCxKKXtsZXQgUT0wLFo9MCxYPSgpPT57bGV0e3ZpZGVvV2lkdGg6WSx2aWRlb0hlaWdodDpxfT0kO2lmKFk8PTB8fHE8PTB8fFk9PT1RJiZxPT09WilyZXR1cm47UT1ZLFo9cSxKKHt3aWR0aDpZLGhlaWdodDpxfSl9O3JldHVybiAkLmFkZEV2ZW50TGlzdGVuZXIoImxvYWRlZG1ldGFkYXRhIixYKSwkLmFkZEV2ZW50TGlzdGVuZXIoInJlc2l6ZSIsWCksWCgpLHtjaGVjazpYLGRpc2Nvbm5lY3QoKXskLnJlbW92ZUV2ZW50TGlzdGVuZXIoImxvYWRlZG1ldGFkYXRhIixYKSwkLnJlbW92ZUV2ZW50TGlzdGVuZXIoInJlc2l6ZSIsWCl9fX12YXIgUjc9MDtmdW5jdGlvbiBLKCQsSixRLFosWCxZKXtKfHwoSj17fSk7dmFyIHEsRyxWPUo7aWYoInJlZiJpbiBWKWZvcihHIGluIFY9e30sSilHPT0icmVmIj9xPUpbR106VltHXT1KW0ddO3ZhciBCPXt0eXBlOiQscHJvcHM6VixrZXk6USxyZWY6cSxfX2s6bnVsbCxfXzpudWxsLF9fYjowLF9fZTpudWxsLF9fYzpudWxsLGNvbnN0cnVjdG9yOnZvaWQgMCxfX3Y6LS1SNyxfX2k6LTEsX191OjAsX19zb3VyY2U6WCxfX3NlbGY6WX07aWYodHlwZW9mICQ9PSJmdW5jdGlvbiImJihxPSQuZGVmYXVsdFByb3BzKSlmb3IoRyBpbiBxKVZbR109PT12b2lkIDAmJihWW0ddPXFbR10pO3JldHVybiBzLnZub2RlJiZzLnZub2RlKEIpLEJ9dmFyIEE5PWB1cmwoImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMjQnIGhlaWdodD0nMjQnJTNFJTNDY2lyY2xlIGN4PScxMicgY3k9JzEyJyByPSc5JyBmaWxsPSdyZ2JhKDI1NSwyNTUsMjU1LDAuNDUpJyBzdHJva2U9J3JnYmEoMCwwLDAsMC41NSknIHN0cm9rZS13aWR0aD0nMS4yNScgZmlsdGVyPSdkcm9wLXNoYWRvdygwIDFweCAycHggcmdiYSgwLDAsMCwwLjQ1KSknLyUzRSUzQy9zdmclM0UiKSAxMiAxMiwgcG9pbnRlcmAsZzc9MS4wMDQsbTc9MyxmNz00LHA3PTUsdTc9MTAsbDc9MTE7ZnVuY3Rpb24gVTUoe3VybDokLHdzVXJsOkosc3R5bGU6USxpbWFnZVN0eWxlOlosY2xhc3NOYW1lOlgsb25Ib21lUHJlc3M6WSxvblN0cmVhbVRvdWNoOnEsb25TdHJlYW1NdWx0aVRvdWNoOkcsb25TdHJlYW1CdXR0b246VixvblN0cmVhbURpZ2l0YWxDcm93bjpCLG9uU3RyZWFtU2Nyb2xsOk4sZW5hYmxlRGlnaXRhbENyb3duOnosc3Vic2NyaWJlRnJhbWU6TCxzdHJlYW1GcmFtZTpDLHN0cmVhbUNvbmZpZzpBLG9uU2NyZWVuQ29uZmlnQ2hhbmdlOlUsaGlkZUNvbnRyb2xzOkgsb25TdHJlYW1pbmdDaGFuZ2U6ayxjb25uZWN0aW9uUXVhbGl0eTpGLHN0cmVhbU1vZGU6dz0iYXZjYyIsd2ViUnRjU3RyZWFtOlQsb25XZWJSdGNGcmFtZTpTLHN0cmVhbUVycm9yOngsb25BdmNjRXJyb3I6JDEsb25BdmNjRGVjb2RlZEZyYW1lOmZ9KXtsZXR7dXNlV2ViUnRjOmksdXNlQXZjYzpyLGV4dGVybmFsSW5wdXQ6bCxleHRlcm5hbE1qcGVnOm8sb3BlbkRpcmVjdENvbnRyb2xTb2NrZXQ6UTEsb3BlbkRpcmVjdE1qcGVnOk4xfT1VOSh7c3RyZWFtTW9kZTp3LGF2Y2NTdXBwb3J0ZWQ6YzAoKSxoYXNFeHRlcm5hbElucHV0OiEhcSxoYXNFeHRlcm5hbEZyYW1lczohIUx9KSxjPUUobnVsbCksdj1FKG51bGwpLG49RShudWxsKSxYMT1FKG51bGwpLEwxPUUobnVsbCksSjE9RShudWxsKSxZMT1FKG51bGwpLFtIMSx5XT1XKCExKSxbZyxQXT1XKG51bGwpLFtwLHVdPVcobnVsbCksaj1FKG51bGwpLEcxPUUoITEpLHoxPUUoVSk7ejEuY3VycmVudD1VO2xldCBNMT1FKG51bGwpLFtXMSxpMV09VyhudWxsKTtiKCgpPT57bGV0IE09TTEuY3VycmVudDtpZighTXx8dHlwZW9mIFJlc2l6ZU9ic2VydmVyPiJ1IilyZXR1cm47bGV0IE89bmV3IFJlc2l6ZU9ic2VydmVyKChJKT0+e2xldCBoPUlbMF0/LmNvbnRlbnRSZWN0O2lmKGgpaTEoe3dpZHRoOmgud2lkdGgsaGVpZ2h0OmguaGVpZ2h0fSl9KTtyZXR1cm4gTy5vYnNlcnZlKE0pLCgpPT5PLmRpc2Nvbm5lY3QoKX0sW10pO2xldFtGMSx2MV09VygwKSxQMT1FKDApLFt1MSxDMV09VyghMSksdzE9RCgoTSxPPSJyZXBvcnRlZCIpPT57aWYoTz09PSJtZWRpYSImJkcxLmN1cnJlbnQpcmV0dXJuO2lmKE8hPT0ibWVkaWEiJiZNJiZNLndpZHRoPjAmJk0uaGVpZ2h0PjApRzEuY3VycmVudD0hMDtsZXQgST1DOShqLmN1cnJlbnQsTSxPKTtpZighSSlyZXR1cm47aWYoai5jdXJyZW50PUkuY29uZmlnLHUoSS5jb25maWcpLEkubm90aWZ5UGFyZW50KXoxLmN1cnJlbnQ/LihJLmNvbmZpZyl9LFtdKTtiKCgpPT57aWYoIWkpcmV0dXJuO2lmKHgpeSghMSksUCh4KTtlbHNlIFAobnVsbCl9LFt4LGldKTtsZXQgbDE9RShudWxsKTtiKCgpPT57aWYoRj09PSJwb29yIil7aWYoQzEoITApLGwxLmN1cnJlbnQpY2xlYXJUaW1lb3V0KGwxLmN1cnJlbnQpO2wxLmN1cnJlbnQ9c2V0VGltZW91dCgoKT0+e0MxKCExKSxsMS5jdXJyZW50PW51bGx9LDMwMDApfWVsc2UgaWYoQzEoITEpLGwxLmN1cnJlbnQpY2xlYXJUaW1lb3V0KGwxLmN1cnJlbnQpLGwxLmN1cnJlbnQ9bnVsbDtyZXR1cm4oKT0+e2lmKGwxLmN1cnJlbnQpY2xlYXJUaW1lb3V0KGwxLmN1cnJlbnQpfX0sW0ZdKTtsZXQgdDE9YCR7JH0vc3RyZWFtLm1qcGVnYDtiKCgpPT57aWYoIWkpcmV0dXJuO2xldCBNPW4uY3VycmVudDtpZighTSlyZXR1cm47bGV0IE89ITEsST0hMSxoPTAsdD1udWxsLHExPSgpPT57aWYoSXx8TylyZXR1cm47dD8uY2hlY2soKSxPPSEwLFM/LigpLHkoITApLFAobnVsbCl9LFUxPSgpPT57aWYoSSlyZXR1cm47dD8uY2hlY2soKSxuMS5jdXJyZW50PURhdGUubm93KCksUDEuY3VycmVudCsrLHExKCkseSghMCksaD1NLnJlcXVlc3RWaWRlb0ZyYW1lQ2FsbGJhY2soVTEpfSxfMT0oKT0+e2lmKEkpcmV0dXJuO3Q/LmNoZWNrKCksbjEuY3VycmVudD1EYXRlLm5vdygpLHExKCkseSghMCl9O2lmKE0uc3JjT2JqZWN0PVQ/P251bGwsVCl7aWYodD1IOShNLChqMCk9Pnt3MShqMCwibWVkaWEiKX0pLHkoITEpLE0uYWRkRXZlbnRMaXN0ZW5lcigibG9hZGVkZGF0YSIscTEse29uY2U6ITB9KSx0eXBlb2YgTS5yZXF1ZXN0VmlkZW9GcmFtZUNhbGxiYWNrPT09ImZ1bmN0aW9uIiloPU0ucmVxdWVzdFZpZGVvRnJhbWVDYWxsYmFjayhVMSk7ZWxzZSBNLmFkZEV2ZW50TGlzdGVuZXIoInRpbWV1cGRhdGUiLF8xKTtNLnBsYXkoKS5jYXRjaCgoKT0+e30pfWVsc2UgeSghMSk7cmV0dXJuKCk9PntpZihJPSEwLE0ucmVtb3ZlRXZlbnRMaXN0ZW5lcigibG9hZGVkZGF0YSIscTEpLE0ucmVtb3ZlRXZlbnRMaXN0ZW5lcigidGltZXVwZGF0ZSIsXzEpLHQ/LmRpc2Nvbm5lY3QoKSxoJiZ0eXBlb2YgTS5jYW5jZWxWaWRlb0ZyYW1lQ2FsbGJhY2s9PT0iZnVuY3Rpb24iKU0uY2FuY2VsVmlkZW9GcmFtZUNhbGxiYWNrKGgpO00uc3JjT2JqZWN0PW51bGx9fSxbaSxULFMsdzFdKSxiKCgpPT57RzEuY3VycmVudD0hMSxqLmN1cnJlbnQ9bnVsbCx1KG51bGwpfSxbJCxKXSk7bGV0IFIxPUUoayk7UjEuY3VycmVudD1rLGIoKCk9PntSMS5jdXJyZW50Py4oSDEpfSxbSDFdKSxiKCgpPT57aWYoQSl3MShBLCJleHRlcm5hbCIpfSxbQSx3MSwkXSk7bGV0IGExPUUoITEpO2ExLmN1cnJlbnQ9SDE7bGV0IGUxPUUobnVsbCksVjA9RShudWxsKTtiKCgpPT57aWYoIW98fCFMKXJldHVybjtsZXQgTz1zZXRUaW1lb3V0KCgpPT57aWYoIWExLmN1cnJlbnQpUCgiU3RyZWFtIGlzIG5vdCBwcm9kdWNpbmcgZnJhbWVzLiBUaGUgc2ltdWxhdG9yIG1heSBoYXZlIHN0b3BwZWQg4oCUIHRyeSByZWNvbm5lY3RpbmcuIil9LDYwMDApLEk9cmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZ1bmN0aW9uIHQoKXtsZXQgcTE9ZTEuY3VycmVudDtpZihxMSl7ZTEuY3VycmVudD1udWxsO2xldCBVMT1YMS5jdXJyZW50O2lmKFUxKXtpZihWMC5jdXJyZW50KVVSTC5yZXZva2VPYmplY3RVUkwoVjAuY3VycmVudCk7VjAuY3VycmVudD1xMSxVMS5zcmM9cTEsUDEuY3VycmVudCsrfWVsc2UgVVJMLnJldm9rZU9iamVjdFVSTChxMSl9ST1yZXF1ZXN0QW5pbWF0aW9uRnJhbWUodCl9KSxoPUwoKHQpPT57aWYobjEuY3VycmVudD1EYXRlLm5vdygpLGUxLmN1cnJlbnQpVVJMLnJldm9rZU9iamVjdFVSTChlMS5jdXJyZW50KTtpZihlMS5jdXJyZW50PXQsIWExLmN1cnJlbnQpY2xlYXJUaW1lb3V0KE8pLHkoITApLFAobnVsbCl9KTtyZXR1cm4oKT0+e2lmKGNsZWFyVGltZW91dChPKSxjYW5jZWxBbmltYXRpb25GcmFtZShJKSxoPy4oKSxlMS5jdXJyZW50KVVSTC5yZXZva2VPYmplY3RVUkwoZTEuY3VycmVudCksZTEuY3VycmVudD1udWxsO2lmKFYwLmN1cnJlbnQpVVJMLnJldm9rZU9iamVjdFVSTChWMC5jdXJyZW50KSxWMC5jdXJyZW50PW51bGx9fSxbbyxMXSk7bGV0IHMxPUQoKCk9PntuMS5jdXJyZW50PURhdGUubm93KCkseSghMCksUChudWxsKX0sW10pLHYwPUQoKCk9PntpZihQMS5jdXJyZW50KyssbjEuY3VycmVudD1EYXRlLm5vdygpLCFhMS5jdXJyZW50KXkoITApLFAobnVsbCl9LFtdKTtrMyh7dXJsOiQsZW5hYmxlZDpyLGNhbnZhc1JlZjp2LG9uRmlyc3RGcmFtZTpzMSxvbkZyYW1lOnYwLG9uRGVjb2RlZEZyYW1lOmYsb25FcnJvcjpQLG9uRGVjb2RlckVycm9yOiQxfSk7bGV0IG0xPUQoKE0pPT57bGV0IE89SzIoai5jdXJyZW50KS5pbnB1dE9yaWVudGF0aW9uLEk9WDIoTyxNLngsTS55KSxoPU0uZWRnZT09PXZvaWQgMD92b2lkIDA6VTMoTyxNLmVkZ2UpLHQ9aD09PXZvaWQgMD97dHlwZTpNLnR5cGUsLi4uSX06e3R5cGU6TS50eXBlLC4uLkksZWRnZTpofTtpZihsKXtxPy4odCk7cmV0dXJufWxldCBxMT1ZMS5jdXJyZW50O2lmKCFxMXx8cTEucmVhZHlTdGF0ZSE9PVdlYlNvY2tldC5PUEVOKXJldHVybjtsZXQgVTE9bmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKEpTT04uc3RyaW5naWZ5KHQpKSxfMT1uZXcgVWludDhBcnJheSgxK1UxLmxlbmd0aCk7XzFbMF09bTcsXzEuc2V0KFUxLDEpLHExLnNlbmQoXzEpfSxbbCxxXSkscTA9RCgoTSk9PntpZihsKXtWPy4oTSk7cmV0dXJufWxldCBPPVkxLmN1cnJlbnQ7aWYoIU98fE8ucmVhZHlTdGF0ZSE9PVdlYlNvY2tldC5PUEVOKXJldHVybjtsZXQgST1uZXcgVGV4dEVuY29kZXIoKS5lbmNvZGUoSlNPTi5zdHJpbmdpZnkoe2J1dHRvbjpNfSkpLGg9bmV3IFVpbnQ4QXJyYXkoMStJLmxlbmd0aCk7aFswXT1mNyxoLnNldChJLDEpLE8uc2VuZChoKX0sW2wsVl0pLCQwPUQoKE0pPT57aWYoIU51bWJlci5pc0Zpbml0ZShNKXx8TT09PTApcmV0dXJuO2lmKGwpe0I/LihNKTtyZXR1cm59bGV0IE89WTEuY3VycmVudDtpZighT3x8Ty5yZWFkeVN0YXRlIT09V2ViU29ja2V0Lk9QRU4pcmV0dXJuO2xldCBJPW5ldyBUZXh0RW5jb2RlcigpLmVuY29kZShKU09OLnN0cmluZ2lmeSh7ZGVsdGE6TX0pKSxoPW5ldyBVaW50OEFycmF5KDErSS5sZW5ndGgpO2hbMF09dTcsaC5zZXQoSSwxKSxPLnNlbmQoaCl9LFtsLEJdKSxQMD1EKChNLE8sSSxoKT0+e2lmKCFOdW1iZXIuaXNGaW5pdGUoTSl8fCFOdW1iZXIuaXNGaW5pdGUoTyl8fE09PT0wJiZPPT09MClyZXR1cm47bGV0IHQ9SzIoai5jdXJyZW50KS5pbnB1dE9yaWVudGF0aW9uLHExPUw5KHQsTSxPKSxVMT1YMih0LEksaCksXzE9e2R4OnExLmR4LGR5OnExLmR5LHg6VTEueCx5OlUxLnl9O2lmKGwpe04/LihfMSk7cmV0dXJufWxldCBNMD1ZMS5jdXJyZW50O2lmKCFNMHx8TTAucmVhZHlTdGF0ZSE9PVdlYlNvY2tldC5PUEVOKXJldHVybjtsZXQgajA9bmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKEpTT04uc3RyaW5naWZ5KF8xKSksdTA9bmV3IFVpbnQ4QXJyYXkoMStqMC5sZW5ndGgpO3UwWzBdPWw3LHUwLnNldChqMCwxKSxNMC5zZW5kKHUwKX0sW2wsTl0pLGQxPUQoKE0pPT57bGV0IE89SzIoai5jdXJyZW50KS5pbnB1dE9yaWVudGF0aW9uLEk9WDIoTyxNLngxLE0ueTEpLGg9WDIoTyxNLngyLE0ueTIpLHQ9e3R5cGU6TS50eXBlLHgxOkkueCx5MTpJLnkseDI6aC54LHkyOmgueX07aWYobCl7Rz8uKHQpO3JldHVybn1sZXQgcTE9WTEuY3VycmVudDtpZighcTF8fHExLnJlYWR5U3RhdGUhPT1XZWJTb2NrZXQuT1BFTilyZXR1cm47bGV0IFUxPW5ldyBUZXh0RW5jb2RlcigpLmVuY29kZShKU09OLnN0cmluZ2lmeSh0KSksXzE9bmV3IFVpbnQ4QXJyYXkoMStVMS5sZW5ndGgpO18xWzBdPXA3LF8xLnNldChVMSwxKSxxMS5zZW5kKF8xKX0sW2wsR10pO2IoKCk9PntpZighUTEmJiFOMSYmIXIpcmV0dXJuO2xldCBNPW51bGw7aWYoUTEpe2xldCBxMT1KPz8kLnJlcGxhY2UoL15odHRwLywid3MiKSsiL3dzIjtNPW5ldyBXZWJTb2NrZXQocTEpLE0uYmluYXJ5VHlwZT0iYXJyYXlidWZmZXIiLFkxLmN1cnJlbnQ9TSxNLm9ubWVzc2FnZT0oVTEpPT57aWYoIShVMS5kYXRhIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpKXJldHVybjtsZXQgXzE9bmV3IFVpbnQ4QXJyYXkoVTEuZGF0YSk7aWYoXzEubGVuZ3RoPDF8fF8xWzBdIT09MTMwKXJldHVybjt0cnl7dzEoSlNPTi5wYXJzZShuZXcgVGV4dERlY29kZXIoKS5kZWNvZGUoXzEuc3ViYXJyYXkoMSkpKSl9Y2F0Y2h7fX0sTS5vbm9wZW49KCk9PlAobnVsbCksTS5vbmNsb3NlPSgpPT55KCExKSxNLm9uZXJyb3I9KCk9PntQKCJXZWJTb2NrZXQgY29ubmVjdGlvbiBmYWlsZWQiKSx5KCExKX19bGV0IE89cnx8TjE/c2V0SW50ZXJ2YWwoKCk9Pnt2MShQMS5jdXJyZW50KSxQMS5jdXJyZW50PTB9LDEwMDApOm51bGwsST1OMT9uZXcgQWJvcnRDb250cm9sbGVyOm51bGwsaD0hMSx0PU4xP3NldFRpbWVvdXQoKCk9PntpZighaClQKCJTdHJlYW0gaXMgbm90IHByb2R1Y2luZyBmcmFtZXMuIFRoZSBzaW11bGF0b3IgbWF5IGhhdmUgc3RvcHBlZCDigJQgdHJ5IHJlY29ubmVjdGluZy4iKX0sNjAwMCk6bnVsbDtpZihOMSYmSSkoYXN5bmMoKT0+e3RyeXtsZXQgVTE9KGF3YWl0IGZldGNoKHQxLHtzaWduYWw6SS5zaWduYWx9KSkuYm9keT8uZ2V0UmVhZGVyKCk7aWYoIVUxKXJldHVybjtsZXQgXzE9bmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKCItLWZyYW1lIik7d2hpbGUoITApe2xldHtkb25lOk0wLHZhbHVlOmowfT1hd2FpdCBVMS5yZWFkKCk7aWYoTTApYnJlYWs7aWYoajApZm9yKGxldCB1MD0wO3UwPD1qMC5sZW5ndGgtXzEubGVuZ3RoO3UwKyspe2xldCBYOD0hMDtmb3IobGV0IEo1PTA7SjU8XzEubGVuZ3RoO0o1KyspaWYoajBbdTArSjVdIT09XzFbSjVdKXtYOD0hMTticmVha31pZihYOCl7aWYoUDEuY3VycmVudCsrLCFoKXtpZihoPSEwLHQpY2xlYXJUaW1lb3V0KHQpO3koITApLFAobnVsbCl9fX19fWNhdGNoe319KSgpO3JldHVybigpPT57aWYoST8uYWJvcnQoKSxPKWNsZWFySW50ZXJ2YWwoTyk7aWYodCljbGVhclRpbWVvdXQodCk7aWYoTT8uY2xvc2UoKSxZMS5jdXJyZW50PT09TSlZMS5jdXJyZW50PW51bGx9fSxbUTEsTjEsdDEsdzEsJCxyLEpdKSxiKCgpPT57aWYoIWkpcmV0dXJuO2xldCBNPXNldEludGVydmFsKCgpPT57djEoUDEuY3VycmVudCksUDEuY3VycmVudD0wO2xldCBPPW4xLmN1cnJlbnQ7aWYoIWRvY3VtZW50LmhpZGRlbiYmTyYmRGF0ZS5ub3coKS1PPjMwMDApeSghMSl9LDEwMDApO3JldHVybigpPT5jbGVhckludGVydmFsKE0pfSxbaV0pO2xldCBuMT1FKDApO2IoKCk9PntpZighbylyZXR1cm47bGV0IE09MjAwMCxPPSgpPT57bGV0IHQ9bjEuY3VycmVudDtpZighdHx8IWExLmN1cnJlbnQpcmV0dXJuO2lmKERhdGUubm93KCktdD5NKXkoITEpfSxJPXNldEludGVydmFsKCgpPT57djEoUDEuY3VycmVudCksUDEuY3VycmVudD0wLE8oKX0sMTAwMCksaD0oKT0+e2lmKCFkb2N1bWVudC5oaWRkZW4pTygpfTtyZXR1cm4gZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigidmlzaWJpbGl0eWNoYW5nZSIsaCksKCk9PntjbGVhckludGVydmFsKEkpLGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInZpc2liaWxpdHljaGFuZ2UiLGgpfX0sW29dKTtsZXQgXzA9RCgoKT0+e2lmKGkpcmV0dXJuIG4uY3VycmVudDtpZihyKXJldHVybiB2LmN1cnJlbnQ7cmV0dXJuIG8/WDEuY3VycmVudDpjLmN1cnJlbnR9LFtvLHIsaV0pLGoxPUQoKCk9PntyZXR1cm4gTDEuY3VycmVudD8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk/P18wKCk/LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpPz9udWxsfSxbXzBdKSxIMD1EKChNLE8pPT57bGV0IEk9ajEoKTtpZighSSlyZXR1cm47bGV0IGg9KE8uY2xpZW50WC1JLmxlZnQpL0kud2lkdGgsdD0oTy5jbGllbnRZLUkudG9wKS9JLmhlaWdodDttMSh7dHlwZTpNLHg6aCx5OnR9KX0sW2oxLG0xXSksQjA9RCgoTSxPKT0+e2xldCBoPWoxKCk/LmhlaWdodHx8MSx0PUQyKE0sTyxoKTtpZih0PT09bnVsbClyZXR1cm4hMTtyZXR1cm4gJDAodCksITB9LFtqMSwkMF0pLEQxPUUoITEpLHkxPUUoITEpLEowPUUoITEpLEEwPUUoe2R4OjAsZHk6MH0pLE4wPUUoITEpLFtrMCxLMV09VyghMSksXz1FKHt4OjAuNSx5OjAuNX0pLFtkLGFdPVcobnVsbCk7YigoKT0+e2xldCBNPShJKT0+e2lmKEkua2V5PT09IkFsdCIpSzEoITApfSxPPShJKT0+e2lmKEkua2V5PT09IkFsdCIpe2lmKEsxKCExKSwheTEuY3VycmVudClhKG51bGwpfX07cmV0dXJuIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIixNKSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigia2V5dXAiLE8pLCgpPT57d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoImtleWRvd24iLE0pLHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJrZXl1cCIsTyl9fSxbXSksYigoKT0+e2lmKGswJiYheTEuY3VycmVudCl7bGV0IE09Xy5jdXJyZW50O2Eoe3gxOk0ueCx5MTpNLnkseDI6MS1NLngseTI6MS1NLnl9KX1lbHNlIGlmKCFrMCYmIXkxLmN1cnJlbnQpYShudWxsKX0sW2swXSk7bGV0IGsxPUUobnVsbCksVjE9RSghMSksQjE9RSgwKSxnMT1EKChNLE8pPT57VjEuY3VycmVudD0hMDtsZXQgST1rMS5jdXJyZW50O2lmKEkpY2FuY2VsQW5pbWF0aW9uRnJhbWUoQjEuY3VycmVudCksQjEuY3VycmVudD1yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9PntJLnN0eWxlLmxlZnQ9YCR7TSoxMDB9JWAsSS5zdHlsZS50b3A9YCR7TyoxMDB9JWAsSS5zdHlsZS5kaXNwbGF5PSJibG9jayJ9KX0sW10pLGYxPUQoKE0sTyk9PntpZighVjEuY3VycmVudClyZXR1cm47bGV0IEk9azEuY3VycmVudDtpZihJKWNhbmNlbEFuaW1hdGlvbkZyYW1lKEIxLmN1cnJlbnQpLEIxLmN1cnJlbnQ9cmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT57SS5zdHlsZS5sZWZ0PWAke00qMTAwfSVgLEkuc3R5bGUudG9wPWAke08qMTAwfSVgfSl9LFtdKSx4MT1EKCgpPT57VjEuY3VycmVudD0hMTtsZXQgTT1rMS5jdXJyZW50O2lmKE0pY2FuY2VsQW5pbWF0aW9uRnJhbWUoQjEuY3VycmVudCksTS5zdHlsZS5kaXNwbGF5PSJub25lIn0sW10pLE8wPUQoKE0pPT57aWYoVjEuY3VycmVudHx8eTEuY3VycmVudClyZXR1cm4hMTtsZXQgTz1qMSgpO2lmKCFPKXJldHVybiExO2xldCBJPUgzKE0uZGVsdGFYLE0uZGVsdGFNb2RlLE8ud2lkdGgpLGg9SDMoTS5kZWx0YVksTS5kZWx0YU1vZGUsTy5oZWlnaHQpO2lmKEk9PT0wJiZoPT09MClyZXR1cm4hMTtsZXQgdD1NYXRoLm1pbihNYXRoLm1heCgoTS5jbGllbnRYLU8ubGVmdCkvTy53aWR0aCwwKSwxKSxxMT1NYXRoLm1pbihNYXRoLm1heCgoTS5jbGllbnRZLU8udG9wKS9PLmhlaWdodCwwKSwxKTtyZXR1cm4gUDAoSS9PLndpZHRoLGgvTy5oZWlnaHQsdCxxMSksITB9LFtqMSxQMF0pO2IoKCk9PntsZXQgTT1KMS5jdXJyZW50O2lmKCFNKXJldHVybjtsZXQgTz0oSSk9PntpZighKHo/QjAoSS5kZWx0YVksSS5kZWx0YU1vZGUpOk8wKEkpKSlyZXR1cm47SS5wcmV2ZW50RGVmYXVsdCgpLEkuc3RvcFByb3BhZ2F0aW9uKCl9O3JldHVybiBNLmFkZEV2ZW50TGlzdGVuZXIoIndoZWVsIixPLHtwYXNzaXZlOiExfSksKCk9Pk0ucmVtb3ZlRXZlbnRMaXN0ZW5lcigid2hlZWwiLE8pfSxbeixCMCxPMF0pO2xldCBRMD1FKDApLFQxPUUobnVsbCksTDA9RCgoKT0+e2xldCBNPURhdGUubm93KCksTz1NLVEwLmN1cnJlbnQ7aWYoUTAuY3VycmVudD1NLE88MzAwKXtpZihUMS5jdXJyZW50KWNsZWFyVGltZW91dChUMS5jdXJyZW50KSxUMS5jdXJyZW50PW51bGw7aWYoWSlZKCk7ZWxzZSBxMCgiYXBwX3N3aXRjaGVyIil9ZWxzZSBUMS5jdXJyZW50PXNldFRpbWVvdXQoKCk9PntpZihZKVkoKTtlbHNlIHEwKCJob21lIik7VDEuY3VycmVudD1udWxsfSwzMDApfSxbcTAsWV0pLEQwPUsyKHApLGIwPUQwLmRpc3BsYXlDb25maWcsRjA9KCgpPT57aWYoIWIwfHwhVzEpcmV0dXJuIG51bGw7aWYoVzEud2lkdGg9PT0wfHxXMS5oZWlnaHQ9PT0wKXJldHVybiBudWxsO2xldCBNPU1hdGgubWluKFcxLndpZHRoL2IwLndpZHRoLFcxLmhlaWdodC9iMC5oZWlnaHQpO3JldHVybnt3aWR0aDpiMC53aWR0aCpNLGhlaWdodDpiMC5oZWlnaHQqTX19KSgpLEEyPUQwLnJvdGF0aW9uRGVncmVlcyxlMj1EMC5uZWVkc0Nzc1JvdGF0aW9uJiZNYXRoLmFicyhBMik9PT05MCwkNT1aLFI9e3Bvc2l0aW9uOiJhYnNvbHV0ZSIsdG9wOiI1MCUiLGxlZnQ6IjUwJSIsd2lkdGg6ZTImJkYwP2Ake0YwLmhlaWdodH1weGA6IjEwMCUiLGhlaWdodDplMiYmRjA/YCR7RjAud2lkdGh9cHhgOiIxMDAlIix0cmFuc2Zvcm06YHRyYW5zbGF0ZSgtNTAlLCAtNTAlKSR7QTI9PT0wPyIiOmAgcm90YXRlKCR7QTJ9ZGVnKWB9YCx0cmFuc2Zvcm1PcmlnaW46ImNlbnRlciBjZW50ZXIiLGN1cnNvcjpBOSxkaXNwbGF5OiJibG9jayIsdXNlclNlbGVjdDoibm9uZSIsV2Via2l0VXNlclNlbGVjdDoibm9uZSIsdG91Y2hBY3Rpb246Im5vbmUiLC4uLlosLi4uQTI9PT0wP3t9Ontib3JkZXJSYWRpdXM6MCxjb3JuZXJTaGFwZTp2b2lkIDB9fSxlPXsuLi5SLHRyYW5zZm9ybTpgJHtSLnRyYW5zZm9ybT8/IiJ9IHNjYWxlKCR7Zzd9KWB9O3JldHVybiBLKCJkaXYiLHtzdHlsZTp7ZGlzcGxheToiZmxleCIsZmxleERpcmVjdGlvbjoiY29sdW1uIixmbGV4OjEsLi4uSD97fTp7Ym9yZGVyOiIxcHggc29saWQgcmdiYSgyNTUsMjU1LDI1NSwwLjEyKSJ9LG92ZXJmbG93OiJoaWRkZW4iLG1pbldpZHRoOjAsbWluSGVpZ2h0OjAsLi4uUX0sY2xhc3NOYW1lOlgsY2hpbGRyZW46W0soImRpdiIse3JlZjpNMSxzdHlsZTp7cG9zaXRpb246InJlbGF0aXZlIixmbGV4OjEsbWluSGVpZ2h0OjAsbWluV2lkdGg6MCxkaXNwbGF5OiJmbGV4IixhbGlnbkl0ZW1zOiJjZW50ZXIiLGp1c3RpZnlDb250ZW50OiJjZW50ZXIifSxjaGlsZHJlbjpLKCJkaXYiLHtyZWY6TDEsc3R5bGU6e3Bvc2l0aW9uOiJyZWxhdGl2ZSIsd2lkdGg6RjA/YCR7RjAud2lkdGh9cHhgOiIxMDAlIixoZWlnaHQ6RjA/YCR7RjAuaGVpZ2h0fXB4YDoiMTAwJSIsb3ZlcmZsb3c6ImhpZGRlbiIsYm9yZGVyUmFkaXVzOiQ1Py5ib3JkZXJSYWRpdXMsY29ybmVyU2hhcGU6JDU/LmNvcm5lclNoYXBlfSxjaGlsZHJlbjpbaT9LKCJ2aWRlbyIse3JlZjpuLG11dGVkOiEwLHBsYXlzSW5saW5lOiEwLGF1dG9QbGF5OiEwLHN0eWxlOlJ9KTpyP0soImNhbnZhcyIse3JlZjp2LHN0eWxlOmV9KTpLKCJpbWciLHtyZWY6YyxzcmM6bz92b2lkIDA6dDEsZHJhZ2dhYmxlOiExLG9uTG9hZDooTSk9PntsZXQgTz1NLmN1cnJlbnRUYXJnZXQ7aWYoTy5uYXR1cmFsV2lkdGg+MCYmTy5uYXR1cmFsSGVpZ2h0PjApdzEoe3dpZHRoOk8ubmF0dXJhbFdpZHRoLGhlaWdodDpPLm5hdHVyYWxIZWlnaHR9LCJtZWRpYSIpfSxzdHlsZTpvP3tkaXNwbGF5OiJub25lIn06Un0pLG8mJksoImltZyIse3JlZjpYMSxkcmFnZ2FibGU6ITEsb25Mb2FkOihNKT0+e2xldCBPPU0uY3VycmVudFRhcmdldDtpZihPLm5hdHVyYWxXaWR0aD4wJiZPLm5hdHVyYWxIZWlnaHQ+MCl3MSh7d2lkdGg6Ty5uYXR1cmFsV2lkdGgsaGVpZ2h0Ok8ubmF0dXJhbEhlaWdodH0sIm1lZGlhIil9LHN0eWxlOlJ9KSxLKCJkaXYiLHtyZWY6SjEsc3R5bGU6e3Bvc2l0aW9uOiJhYnNvbHV0ZSIsaW5zZXQ6MCxjdXJzb3I6QTksdG91Y2hBY3Rpb246Im5vbmUifSxvbk1vdXNlRG93bjooTSk9PntNLnByZXZlbnREZWZhdWx0KCk7bGV0IE89ajEoKTtpZighTylyZXR1cm47bGV0IEk9KE0uY2xpZW50WC1PLmxlZnQpL08ud2lkdGgsaD0oTS5jbGllbnRZLU8udG9wKS9PLmhlaWdodDtpZihNLmFsdEtleSl7eTEuY3VycmVudD0hMCxKMC5jdXJyZW50PU0uc2hpZnRLZXk7bGV0IHExPXt4MTpJLHkxOmgseDI6MS1JLHkyOjEtaH07QTAuY3VycmVudD17ZHg6MS1JLUksZHk6MS1oLWh9LGEocTEpLGQxKHt0eXBlOiJiZWdpbiIsLi4ucTF9KTtyZXR1cm59ZzEoSSxoKTtsZXQgdD16MyhoKTtpZih0IT09dm9pZCAwKUQxLmN1cnJlbnQ9ITAsbTEoe3R5cGU6ImJlZ2luIix4OkkseTpoLGVkZ2U6dH0pO2Vsc2UgRDEuY3VycmVudD0hMSxIMCgiYmVnaW4iLE0pfSxvbk1vdXNlTW92ZTooTSk9PntsZXQgTz1qMSgpO2lmKCFPKXJldHVybjtsZXQgST0oTS5jbGllbnRYLU8ubGVmdCkvTy53aWR0aCxoPShNLmNsaWVudFktTy50b3ApL08uaGVpZ2h0O2lmKF8uY3VycmVudD17eDpJLHk6aH0sTS5idXR0b25zPT09MCl7aWYoTS5hbHRLZXkpYSh7eDE6SSx5MTpoLHgyOjEtSSx5MjoxLWh9KTtyZXR1cm59aWYoeTEuY3VycmVudCl7bGV0IHQ7aWYoSjAuY3VycmVudCl7bGV0IHExPUEwLmN1cnJlbnQ7dD17eDE6SSx5MTpoLHgyOkkrcTEuZHgseTI6aCtxMS5keX19ZWxzZSB0PXt4MTpJLHkxOmgseDI6MS1JLHkyOjEtaH07YSh0KSxkMSh7dHlwZToibW92ZSIsLi4udH0pO3JldHVybn1pZihmMShJLGgpLEQxLmN1cnJlbnQpbTEoe3R5cGU6Im1vdmUiLHg6SSx5OmgsZWRnZTpRMn0pO2Vsc2UgSDAoIm1vdmUiLE0pfSxvbk1vdXNlVXA6KE0pPT57aWYoeTEuY3VycmVudCl7bGV0IE89ajEoKTtpZihPKXtsZXQgST0oTS5jbGllbnRYLU8ubGVmdCkvTy53aWR0aCxoPShNLmNsaWVudFktTy50b3ApL08uaGVpZ2h0O2lmKEowLmN1cnJlbnQpe2xldCB0PUEwLmN1cnJlbnQ7ZDEoe3R5cGU6ImVuZCIseDE6SSx5MTpoLHgyOkkrdC5keCx5MjpoK3QuZHl9KX1lbHNlIGQxKHt0eXBlOiJlbmQiLHgxOkkseTE6aCx4MjoxLUkseTI6MS1ofSl9aWYoeTEuY3VycmVudD0hMSwhTS5hbHRLZXkpYShudWxsKTtyZXR1cm59aWYoeDEoKSxEMS5jdXJyZW50KXtsZXQgTz1qMSgpO2lmKE8pe2xldCBJPShNLmNsaWVudFgtTy5sZWZ0KS9PLndpZHRoLGg9KE0uY2xpZW50WS1PLnRvcCkvTy5oZWlnaHQ7bTEoe3R5cGU6ImVuZCIseDpJLHk6aCxlZGdlOlEyfSl9RDEuY3VycmVudD0hMTtyZXR1cm59SDAoImVuZCIsTSl9LG9uTW91c2VMZWF2ZTooTSk9PntpZih5MS5jdXJyZW50KXtpZihkKWQxKHt0eXBlOiJlbmQiLC4uLmR9KTt5MS5jdXJyZW50PSExLGEobnVsbCk7cmV0dXJufWlmKHgxKCksRDEuY3VycmVudCl7bGV0IE89ajEoKTtpZihPKXtsZXQgST0oTS5jbGllbnRYLU8ubGVmdCkvTy53aWR0aCxoPShNLmNsaWVudFktTy50b3ApL08uaGVpZ2h0O20xKHt0eXBlOiJlbmQiLHg6SSx5OmgsZWRnZTpRMn0pfUQxLmN1cnJlbnQ9ITE7cmV0dXJufWlmKE0uYnV0dG9ucz4wKUgwKCJlbmQiLE0pO2EobnVsbCl9LG9uVG91Y2hTdGFydDooTSk9PntNLnByZXZlbnREZWZhdWx0KCk7bGV0IE89ajEoKTtpZighTylyZXR1cm47aWYoTS50b3VjaGVzLmxlbmd0aD49Mil7eDEoKTtsZXQgVTE9TS50b3VjaGVzWzBdLF8xPU0udG91Y2hlc1sxXSxNMD17eDE6KFUxLmNsaWVudFgtTy5sZWZ0KS9PLndpZHRoLHkxOihVMS5jbGllbnRZLU8udG9wKS9PLmhlaWdodCx4MjooXzEuY2xpZW50WC1PLmxlZnQpL08ud2lkdGgseTI6KF8xLmNsaWVudFktTy50b3ApL08uaGVpZ2h0fTtpZighTjAuY3VycmVudCYmIUQxLmN1cnJlbnQpbTEoe3R5cGU6ImVuZCIseDpNMC54MSx5Ok0wLnkxfSk7TjAuY3VycmVudD0hMCx5MS5jdXJyZW50PSEwLEQxLmN1cnJlbnQ9ITEsYShNMCksZDEoe3R5cGU6ImJlZ2luIiwuLi5NMH0pO3JldHVybn1sZXQgST1NLnRvdWNoZXNbMF07aWYoIUkpcmV0dXJuO2xldCBoPShJLmNsaWVudFgtTy5sZWZ0KS9PLndpZHRoLHQ9KEkuY2xpZW50WS1PLnRvcCkvTy5oZWlnaHQ7ZzEoaCx0KTtsZXQgcTE9ejModCk7aWYocTEhPT12b2lkIDApRDEuY3VycmVudD0hMCxtMSh7dHlwZToiYmVnaW4iLHg6aCx5OnQsZWRnZTpxMX0pO2Vsc2UgRDEuY3VycmVudD0hMSxtMSh7dHlwZToiYmVnaW4iLHg6aCx5OnR9KX0sb25Ub3VjaE1vdmU6KE0pPT57TS5wcmV2ZW50RGVmYXVsdCgpO2xldCBPPWoxKCk7aWYoIU8pcmV0dXJuO2lmKE4wLmN1cnJlbnQmJk0udG91Y2hlcy5sZW5ndGg+PTIpe2xldCBxMT1NLnRvdWNoZXNbMF0sVTE9TS50b3VjaGVzWzFdLF8xPXt4MToocTEuY2xpZW50WC1PLmxlZnQpL08ud2lkdGgseTE6KHExLmNsaWVudFktTy50b3ApL08uaGVpZ2h0LHgyOihVMS5jbGllbnRYLU8ubGVmdCkvTy53aWR0aCx5MjooVTEuY2xpZW50WS1PLnRvcCkvTy5oZWlnaHR9O2EoXzEpLGQxKHt0eXBlOiJtb3ZlIiwuLi5fMX0pO3JldHVybn1sZXQgST1NLnRvdWNoZXNbMF07aWYoIUkpcmV0dXJuO2xldCBoPShJLmNsaWVudFgtTy5sZWZ0KS9PLndpZHRoLHQ9KEkuY2xpZW50WS1PLnRvcCkvTy5oZWlnaHQ7aWYoZjEoaCx0KSxEMS5jdXJyZW50KW0xKHt0eXBlOiJtb3ZlIix4OmgseTp0LGVkZ2U6UTJ9KTtlbHNlIG0xKHt0eXBlOiJtb3ZlIix4OmgseTp0fSl9LG9uVG91Y2hFbmQ6KE0pPT57TS5wcmV2ZW50RGVmYXVsdCgpO2xldCBPPWoxKCk7aWYoIU8pcmV0dXJuO2lmKE4wLmN1cnJlbnQpe2lmKE0udG91Y2hlcy5sZW5ndGg8Mil7bGV0IHExPU0uY2hhbmdlZFRvdWNoZXNbMF0sVTE9ZDtpZihxMSYmVTEpZDEoe3R5cGU6ImVuZCIseDE6KHExLmNsaWVudFgtTy5sZWZ0KS9PLndpZHRoLHkxOihxMS5jbGllbnRZLU8udG9wKS9PLmhlaWdodCx4MjpVMS54Mix5MjpVMS55Mn0pO2Vsc2UgaWYoVTEpZDEoe3R5cGU6ImVuZCIsLi4uVTF9KTtOMC5jdXJyZW50PSExLHkxLmN1cnJlbnQ9ITEsYShudWxsKX1yZXR1cm59bGV0IEk9TS5jaGFuZ2VkVG91Y2hlc1swXTtpZighSSlyZXR1cm47bGV0IGg9KEkuY2xpZW50WC1PLmxlZnQpL08ud2lkdGgsdD0oSS5jbGllbnRZLU8udG9wKS9PLmhlaWdodDtpZih4MSgpLEQxLmN1cnJlbnQpbTEoe3R5cGU6ImVuZCIseDpoLHk6dCxlZGdlOlEyfSksRDEuY3VycmVudD0hMTtlbHNlIG0xKHt0eXBlOiJlbmQiLHg6aCx5OnR9KX19KSxLKCJkaXYiLHtyZWY6azEsImRhdGEtdGVzdGlkIjoidG91Y2gtaW5kaWNhdG9yIixzdHlsZTp7cG9zaXRpb246ImFic29sdXRlIixkaXNwbGF5OiJub25lIix3aWR0aDoyNCxoZWlnaHQ6MjQsYm9yZGVyUmFkaXVzOiI1MCUiLGJhY2tncm91bmQ6InJnYmEoNTksMTMwLDI0NiwwLjUpIixib3hTaGFkb3c6IjAgMCA4cHggcmdiYSg1OSwxMzAsMjQ2LDAuMykiLHRyYW5zZm9ybToidHJhbnNsYXRlKC01MCUsIC01MCUpIixwb2ludGVyRXZlbnRzOiJub25lIn19KSxkJiZLKFoxLHtjaGlsZHJlbjpbSygiZGl2Iix7ImRhdGEtdGVzdGlkIjoiZmluZ2VyLWRvdCIsc3R5bGU6RjkoZC54MSxkLnkxKX0pLEsoImRpdiIseyJkYXRhLXRlc3RpZCI6ImZpbmdlci1kb3QiLHN0eWxlOkY5KGQueDIsZC55Mil9KV19KSwhSDEmJiFnJiZLKCJkaXYiLHtzdHlsZTp7Li4uazksLi4uWnx8e319LGNoaWxkcmVuOksoInNwYW4iLHtzdHlsZTp7Y29sb3I6IiM4ODgiLGZvbnRTaXplOjE0fSxjaGlsZHJlbjoiQ29ubmVjdGluZy4uLiJ9KX0pLGcmJksoImRpdiIse3N0eWxlOms5LGNoaWxkcmVuOksoInNwYW4iLHtzdHlsZTp7Y29sb3I6IiNmNDQiLGZvbnRTaXplOjE0LHBhZGRpbmc6MjAsdGV4dEFsaWduOiJjZW50ZXIifSxjaGlsZHJlbjpnfSl9KSx1MSYmSygiZGl2Iix7c3R5bGU6ZDcsY2hpbGRyZW46Sygic3BhbiIse3N0eWxlOntjb2xvcjoiI2ZiYmYyNCIsZm9udFNpemU6MTMsZm9udEZhbWlseToibW9ub3NwYWNlIn0sY2hpbGRyZW46IlNsb3cgY29ubmVjdGlvbiJ9KX0pXX0pfSksIUgmJksoImRpdiIse3N0eWxlOntkaXNwbGF5OiJmbGV4IixhbGlnbkl0ZW1zOiJjZW50ZXIiLGp1c3RpZnlDb250ZW50OiJzcGFjZS1iZXR3ZWVuIixwYWRkaW5nOiI0cHggOHB4Iixib3JkZXJUb3A6IjFweCBzb2xpZCByZ2JhKDI1NSwyNTUsMjU1LDAuMTIpIn0sY2hpbGRyZW46W0soImJ1dHRvbiIse29uQ2xpY2s6TDAsc3R5bGU6e2JhY2tncm91bmQ6Im5vbmUiLGJvcmRlcjoiMXB4IHNvbGlkIHJnYmEoMjU1LDI1NSwyNTUsMC4yKSIsY29sb3I6IiNhYWEiLGZvbnRTaXplOjExLGZvbnRGYW1pbHk6Im1vbm9zcGFjZSIscGFkZGluZzoiMnB4IDEwcHgiLGN1cnNvcjoicG9pbnRlciIsYm9yZGVyUmFkaXVzOjR9LGNoaWxkcmVuOiJIb21lIn0pLEsoInNwYW4iLHtzdHlsZTp7Y29sb3I6RjE+MD8iIzRmNCI6IiM4ODgiLGZvbnRTaXplOjEyLGZvbnRGYW1pbHk6Im1vbm9zcGFjZSIsZGlzcGxheToiZmxleCIsYWxpZ25JdGVtczoiY2VudGVyIixnYXA6Nn0sY2hpbGRyZW46W0YmJksoInNwYW4iLHsiZGF0YS10ZXN0aWQiOiJxdWFsaXR5LWRvdCIsc3R5bGU6e3dpZHRoOjgsaGVpZ2h0OjgsYm9yZGVyUmFkaXVzOiI1MCUiLGRpc3BsYXk6ImlubGluZS1ibG9jayIsYmFja2dyb3VuZDpGPT09Imdvb2QiPyIjNGFkZTgwIjpGPT09ImRlZ3JhZGVkIj8iI2ZhY2MxNSI6IiNlZjQ0NDQifX0pLEYxLCIgZnBzIl19KV19KV19KX12YXIgZDc9e3Bvc2l0aW9uOiJhYnNvbHV0ZSIsdG9wOjgsbGVmdDoiNTAlIix0cmFuc2Zvcm06InRyYW5zbGF0ZVgoLTUwJSkiLGJhY2tncm91bmQ6InJnYmEoMCwwLDAsMC43KSIsYm9yZGVyUmFkaXVzOjYscGFkZGluZzoiNHB4IDEycHgiLHBvaW50ZXJFdmVudHM6Im5vbmUifSxrOT17cG9zaXRpb246ImFic29sdXRlIixpbnNldDowLGRpc3BsYXk6ImZsZXgiLGFsaWduSXRlbXM6ImNlbnRlciIsanVzdGlmeUNvbnRlbnQ6ImNlbnRlciIsYmFja2dyb3VuZDoicmdiYSgwLDAsMCwwLjgpIn0sTzk9MjA7ZnVuY3Rpb24gRjkoJCxKKXtyZXR1cm57cG9zaXRpb246ImFic29sdXRlIixsZWZ0OmAkeyQqMTAwfSVgLHRvcDpgJHtKKjEwMH0lYCx3aWR0aDpPOSxoZWlnaHQ6TzksYm9yZGVyUmFkaXVzOiI1MCUiLGJhY2tncm91bmQ6InJnYmEoMjU1LDI1NSwyNTUsMC40NSkiLGJvcmRlcjoiMS4yNXB4IHNvbGlkIHJnYmEoMCwwLDAsMC41NSkiLGJveFNoYWRvdzoiMCAxcHggM3B4IHJnYmEoMCwwLDAsMC40NSkiLHRyYW5zZm9ybToidHJhbnNsYXRlKC01MCUsIC01MCUpIixwb2ludGVyRXZlbnRzOiJub25lIn19ZnVuY3Rpb24gRTAoJCl7aWYoISQpcmV0dXJuImlwaG9uZSI7bGV0IEo9JC50b0xvd2VyQ2FzZSgpO2lmKEouaW5jbHVkZXMoImlwYWQiKSlyZXR1cm4iaXBhZCI7aWYoSi5pbmNsdWRlcygid2F0Y2giKSlyZXR1cm4id2F0Y2giO2lmKEouaW5jbHVkZXMoInZpc2lvbiIpKXJldHVybiJ2aXNpb24iO3JldHVybiJpcGhvbmUifXZhciBTMT17aXBob25lOnt3aWR0aDo0MjcsaGVpZ2h0Ojg4MSxiZXplbFg6MTgsYmV6ZWxZOjE4LGlubmVyUmFkaXVzOjU1fSxpcGFkOnt3aWR0aDo0MzAsaGVpZ2h0OjYwNSxiZXplbFg6MTYsYmV6ZWxZOjE2LGlubmVyUmFkaXVzOjEyfSx3YXRjaDp7d2lkdGg6Mjc0LGhlaWdodDozMjIsYmV6ZWxYOjEyLGJlemVsWToxMixpbm5lclJhZGl1czo3OX0sdmlzaW9uOnt3aWR0aDo2NDAsaGVpZ2h0OjQwMCxiZXplbFg6MTIsYmV6ZWxZOjEyLGlubmVyUmFkaXVzOjMyfX0sc1o9UzEuaXBob25lLndpZHRoLHRaPVMxLmlwaG9uZS5oZWlnaHQsZVo9UzEuaXBob25lLmJlemVsWCwkSz1TMS5pcGhvbmUuYmV6ZWxZLEpLPVMxLmlwaG9uZS5pbm5lclJhZGl1cyxNOT17ImlQaG9uZSAxNyBQcm8gTWF4Ijp7d2lkdGg6MTMyMCxoZWlnaHQ6Mjg2OH0sImlQaG9uZSAxNyBQcm8iOnt3aWR0aDoxMjA2LGhlaWdodDoyNjIyfSwiaVBob25lIDE3Ijp7d2lkdGg6MTIwNixoZWlnaHQ6MjYyMn0sImlQaG9uZSBBaXIiOnt3aWR0aDoxMjYwLGhlaWdodDoyNzM2fSwiaVBob25lIDE2IFBybyBNYXgiOnt3aWR0aDoxMzIwLGhlaWdodDoyODY4fSwiaVBob25lIDE2IFBybyI6e3dpZHRoOjEyMDYsaGVpZ2h0OjI2MjJ9LCJpUGhvbmUgMTYgUGx1cyI6e3dpZHRoOjEyOTAsaGVpZ2h0OjI3OTZ9LCJpUGhvbmUgMTYiOnt3aWR0aDoxMTc5LGhlaWdodDoyNTU2fSwiaVBob25lIDE2ZSI6e3dpZHRoOjExNzAsaGVpZ2h0OjI1MzJ9LCJpUGhvbmUgMTUgUHJvIE1heCI6e3dpZHRoOjEyOTAsaGVpZ2h0OjI3OTZ9LCJpUGhvbmUgMTUgUHJvIjp7d2lkdGg6MTE3OSxoZWlnaHQ6MjU1Nn0sImlQaG9uZSAxNSBQbHVzIjp7d2lkdGg6MTI5MCxoZWlnaHQ6Mjc5Nn0sImlQaG9uZSAxNSI6e3dpZHRoOjExNzksaGVpZ2h0OjI1NTZ9LCJpUGFkIFBybyAxMy1pbmNoIChNNSkiOnt3aWR0aDoyMDY0LGhlaWdodDoyNzUyfSwiaVBhZCBQcm8gMTEtaW5jaCAoTTUpIjp7d2lkdGg6MTY2OCxoZWlnaHQ6MjQyMH0sImlQYWQgUHJvIDEzLWluY2ggKE00KSI6e3dpZHRoOjIwNjQsaGVpZ2h0OjI3NTJ9LCJpUGFkIFBybyAxMS1pbmNoIChNNCkiOnt3aWR0aDoxNjY4LGhlaWdodDoyNDIwfSwiaVBhZCBBaXIgMTMtaW5jaCAoTTMpIjp7d2lkdGg6MjA0OCxoZWlnaHQ6MjczMn0sImlQYWQgQWlyIDExLWluY2ggKE0zKSI6e3dpZHRoOjE2NDAsaGVpZ2h0OjIzNjB9LCJpUGFkIChBMTYpIjp7d2lkdGg6MTY0MCxoZWlnaHQ6MjM2MH0sImlQYWQgbWluaSAoQTE3IFBybykiOnt3aWR0aDoxNDg4LGhlaWdodDoyMjY2fSwiQXBwbGUgV2F0Y2ggVWx0cmEgMyAoNDltbSkiOnt3aWR0aDo0MjIsaGVpZ2h0OjUxNH0sIkFwcGxlIFdhdGNoIFVsdHJhIDIgKDQ5bW0pIjp7d2lkdGg6NDEwLGhlaWdodDo1MDJ9LCJBcHBsZSBXYXRjaCBTZXJpZXMgMTEgKDQ2bW0pIjp7d2lkdGg6NDE2LGhlaWdodDo0OTZ9LCJBcHBsZSBXYXRjaCBTZXJpZXMgMTEgKDQybW0pIjp7d2lkdGg6Mzc0LGhlaWdodDo0NDZ9LCJBcHBsZSBXYXRjaCBTZXJpZXMgMTAgKDQ2bW0pIjp7d2lkdGg6NDE2LGhlaWdodDo0OTZ9LCJBcHBsZSBXYXRjaCBTZXJpZXMgMTAgKDQybW0pIjp7d2lkdGg6Mzc0LGhlaWdodDo0NDZ9LCJBcHBsZSBXYXRjaCBTRSAzICg0NG1tKSI6e3dpZHRoOjM2OCxoZWlnaHQ6NDQ4fSwiQXBwbGUgV2F0Y2ggU0UgMyAoNDBtbSkiOnt3aWR0aDozMjQsaGVpZ2h0OjM5NH0sIkFwcGxlIFdhdGNoIFNFICg0NG1tKSI6e3dpZHRoOjM2OCxoZWlnaHQ6NDQ4fSwiQXBwbGUgV2F0Y2ggU0UgKDQwbW0pIjp7d2lkdGg6MzI0LGhlaWdodDozOTR9LCJBcHBsZSBWaXNpb24gUHJvIjp7d2lkdGg6MTkyMCxoZWlnaHQ6MTA4MH19O2Z1bmN0aW9uIEg1KCQsSil7bGV0IFE9JCYmJC53aWR0aD4wJiYkLmhlaWdodD4wPyQ6SixaPVoyKFEpO2lmKFopcmV0dXJuYCR7Wi53aWR0aH0gLyAke1ouaGVpZ2h0fWA7cmV0dXJuYCR7UzEuaXBob25lLndpZHRoLTIqUzEuaXBob25lLmJlemVsWH0gLyAke1MxLmlwaG9uZS5oZWlnaHQtMipTMS5pcGhvbmUuYmV6ZWxZfWB9ZnVuY3Rpb24gWTIoJD0iaXBob25lIixKKXtsZXQgUT1KP005W0pdOm51bGw7aWYoUSlyZXR1cm4gUTtsZXQgWj1TMVskXTtyZXR1cm57d2lkdGg6Wi53aWR0aC0yKlouYmV6ZWxYLGhlaWdodDpaLmhlaWdodC0yKlouYmV6ZWxZfX1mdW5jdGlvbiBxMigkPSJpcGhvbmUiLEope2lmKGcwKEopKXN3aXRjaCgkKXtjYXNlImlwYWQiOnJldHVybiA3MjA7Y2FzZSJ2aXNpb24iOnJldHVybiA1ODA7Y2FzZSJ3YXRjaCI6cmV0dXJuIDIwMDtkZWZhdWx0OnJldHVybiA2MjB9c3dpdGNoKCQpe2Nhc2UiaXBhZCI6cmV0dXJuIDQwMDtjYXNlIndhdGNoIjpyZXR1cm4gMjAwO2Nhc2UidmlzaW9uIjpyZXR1cm4gNTgwO2RlZmF1bHQ6cmV0dXJuIDMyMH19ZnVuY3Rpb24gQTUoJD0iaXBob25lIixKKXtsZXQgUT1TMVskXSxaPVEud2lkdGgtMipRLmJlemVsWCxYPVEuaGVpZ2h0LTIqUS5iZXplbFk7aWYoWjxYJiZnMChKKSlyZXR1cm5gJHtRLmlubmVyUmFkaXVzL1gqMTAwfSUgLyAke1EuaW5uZXJSYWRpdXMvWioxMDB9JWA7cmV0dXJuYCR7US5pbm5lclJhZGl1cy9aKjEwMH0lIC8gJHtRLmlubmVyUmFkaXVzL1gqMTAwfSVgfWZ1bmN0aW9uIFc5KCQpe2xldCBKPVMxWyQudHlwZV0sUT1KLndpZHRoLTIqSi5iZXplbFgsWj1KLmhlaWdodC0yKkouYmV6ZWxZLFgsWTtpZihRPFomJmcwKCQuY29uZmlnPz9udWxsKSlYPUouaW5uZXJSYWRpdXMvWixZPUouaW5uZXJSYWRpdXMvUTtlbHNlIFg9Si5pbm5lclJhZGl1cy9RLFk9Si5pbm5lclJhZGl1cy9aO2xldCBxPVgqJC5jb250YWluZXJXaWR0aCxHPVkqJC5jb250YWluZXJIZWlnaHQsVj1NYXRoLnNxcnQoTWF0aC5tYXgocSpHLDApKTtyZXR1cm57cng6cSxyeTpHLHJHZW9tOlZ9fXZhciBvNz0xMyxyNz02MjtmdW5jdGlvbiBPMygkKXtsZXR7Y29udGFpbmVyV2lkdGg6Sixjb250YWluZXJIZWlnaHQ6UX09JCxaPShIKT0+SC50b0ZpeGVkKDMpLFg9KEgsayk9PntsZXQgRj1rLHc9ayxUPXI3LzIqKE1hdGguUEkvMTgwKSxTPTIyNSpNYXRoLlBJLzE4MCx4PVMrVCwkMT1TLVQsZj1GK0gqTWF0aC5jb3MoeCksaT13K0gqTWF0aC5zaW4oeCkscj1GK0gqTWF0aC5jb3MoJDEpLGw9dytIKk1hdGguc2luKCQxKSxvPWBNICR7WihmKX0gJHtaKGkpfSBBICR7WihIKX0gJHtaKEgpfSAwIDAgMSAke1oocil9ICR7WihsKX1gLFExPWBNICR7WihyKX0gJHtaKGwpfSBBICR7WihIKX0gJHtaKEgpfSAwIDAgMCAke1ooZil9ICR7WihpKX1gO3JldHVybntkOm8sZEZpbGw6UTF9fTtpZighKEo+MCl8fCEoUT4wKSl7bGV0IEg9bzcsaz1NYXRoLmNlaWwoSCsxNCkse2Q6RixkRmlsbDp3fT1YKEgsayk7cmV0dXJue2Q6RixkRmlsbDp3LHZpZXdCb3hTaXplOmt9fWxldHtyR2VvbTpZfT1XOSgkKSxxPU1hdGgubWF4KDIuMixNYXRoLm1pbig1LjIsMC4wMTEqTWF0aC5taW4oSixRKSkpLEc9WSowLjM0K3EsVj1NYXRoLm1pbihKLFEpLEI9TWF0aC5taW4oMjIsTWF0aC5tYXgoMTIsViowLjA1MikpO0c9TWF0aC5taW4oMjQsTWF0aC5tYXgoMTIsRyxCKSk7bGV0IEM9TWF0aC5tYXgoMjYsTWF0aC5jZWlsKEcrMTMpKSx7ZDpBLGRGaWxsOlV9PVgoRyxDKTtyZXR1cm57ZDpBLGRGaWxsOlUsdmlld0JveFNpemU6Q319ZnVuY3Rpb24gazUoe3R5cGU6JD0iaXBob25lIixzdHJlYW1pbmc6Sj0hMX0pe3N3aXRjaCgkKXtjYXNlImlwYWQiOnJldHVybiBLKGE3LHtzdHJlYW1pbmc6Sn0pO2Nhc2Uid2F0Y2giOnJldHVybiBLKG43LHtzdHJlYW1pbmc6Sn0pO2Nhc2UidmlzaW9uIjpyZXR1cm4gSyhzNyx7c3RyZWFtaW5nOkp9KTtkZWZhdWx0OnJldHVybiBLKGk3LHtzdHJlYW1pbmc6Sn0pfX1mdW5jdGlvbiBpNyh7c3RyZWFtaW5nOiQ9ITF9KXtyZXR1cm4gSygic3ZnIix7dmlld0JveDoiMCAwIDQyNyA4ODEiLHN0eWxlOnt3aWR0aDoiMTAwJSIsaGVpZ2h0OiIxMDAlIn0sZmlsbDoibm9uZSIseG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIixjaGlsZHJlbjpbSygiZGVmcyIse2NoaWxkcmVuOltLKCJmaWx0ZXIiLHtpZDoiY2hyb21lLWZpbHRlcjAiLHg6Ii0wLjE2Njk5MiIseToiMC4xNjY1MDQiLHdpZHRoOiI0MjciLGhlaWdodDoiODgwLjY2NyIsZmlsdGVyVW5pdHM6InVzZXJTcGFjZU9uVXNlIixjb2xvckludGVycG9sYXRpb25GaWx0ZXJzOiJzUkdCIixjaGlsZHJlbjpbSygiZmVGbG9vZCIse2Zsb29kT3BhY2l0eToiMCIscmVzdWx0OiJCYWNrZ3JvdW5kSW1hZ2VGaXgifSksSygiZmVCbGVuZCIse21vZGU6Im5vcm1hbCIsaW46IlNvdXJjZUdyYXBoaWMiLGluMjoiQmFja2dyb3VuZEltYWdlRml4IixyZXN1bHQ6InNoYXBlIn0pLEsoImZlR2F1c3NpYW5CbHVyIix7c3RkRGV2aWF0aW9uOiIwLjUiLHJlc3VsdDoiZWZmZWN0MV9mb3JlZ3JvdW5kQmx1ciJ9KV19KSxLKCJmaWx0ZXIiLHtpZDoiY2hyb21lLWZpbHRlcjEiLHg6IjYuMzMyMzYiLHk6IjYuMzMzODIiLHdpZHRoOiI0MTQiLGhlaWdodDoiODY4IixmaWx0ZXJVbml0czoidXNlclNwYWNlT25Vc2UiLGNvbG9ySW50ZXJwb2xhdGlvbkZpbHRlcnM6InNSR0IiLGNoaWxkcmVuOltLKCJmZUZsb29kIix7Zmxvb2RPcGFjaXR5OiIwIixyZXN1bHQ6IkJhY2tncm91bmRJbWFnZUZpeCJ9KSxLKCJmZUJsZW5kIix7bW9kZToibm9ybWFsIixpbjoiU291cmNlR3JhcGhpYyIsaW4yOiJCYWNrZ3JvdW5kSW1hZ2VGaXgiLHJlc3VsdDoic2hhcGUifSksSygiZmVHYXVzc2lhbkJsdXIiLHtzdGREZXZpYXRpb246IjAuMzMzMzMzIixyZXN1bHQ6ImVmZmVjdDFfZm9yZWdyb3VuZEJsdXIifSldfSldfSksSygicmVjdCIse3g6IjMuODMyNjgiLHk6IjMuODMzNjYiLHdpZHRoOiI0MTkiLGhlaWdodDoiODczIixyeDoiNjYuMTY2NyIsc3Ryb2tlOiIjNDU0NTQ4IixzdHJva2VXaWR0aDoiNC4zMzMzMyJ9KSxLKCJyZWN0Iix7eDoiMC44MzMzMzMiLHk6IjAuODMzMzMzIix3aWR0aDoiNDI1IixoZWlnaHQ6Ijg3OSIscng6IjY5LjE2NjciLHN0cm9rZToiIzM3MzczYSIsc3Ryb2tlV2lkdGg6IjEuNjY2NjcifSksSygiZyIse29wYWNpdHk6IjAuOSIsZmlsdGVyOiJ1cmwoI2Nocm9tZS1maWx0ZXIwKSIsY2hpbGRyZW46SygicmVjdCIse3g6IjEuNjY2MDIiLHk6IjIiLHdpZHRoOiI0MjMuMzMzIixoZWlnaHQ6Ijg3NyIscng6IjY4LjY2NjciLHN0cm9rZToiIzQ1NDU0OCIsc3Ryb2tlV2lkdGg6IjEuNjY2NjcifSl9KSxLKCJnIix7b3BhY2l0eToiMC44IixmaWx0ZXI6InVybCgjY2hyb21lLWZpbHRlcjEpIixjaGlsZHJlbjpLKCJyZWN0Iix7eDoiNy4zMzI2OCIseToiNy4zMzM2NiIsd2lkdGg6IjQxMiIsaGVpZ2h0OiI4NjYiLHJ4OiI2Mi42NjY3IixzdHJva2U6IiM2NDY0NjQiLHN0cm9rZVdpZHRoOiIwLjY2NjY2NyJ9KX0pLEsoInJlY3QiLHt4OiIxNTEuNjY2Iix5OiIzMS42NjciLHdpZHRoOiIxMjMuMzMzIixoZWlnaHQ6IjM2IixyeDoiMTgiLGZpbGw6ImJsYWNrIixzdHlsZTp7b3BhY2l0eTokPzA6MSx0cmFuc2l0aW9uOiJvcGFjaXR5IDAuM3MgZWFzZSJ9fSldfSl9ZnVuY3Rpb24gYTcoe3N0cmVhbWluZzokPSExfSl7bGV0IEo9UzEuaXBhZC53aWR0aCxRPVMxLmlwYWQuaGVpZ2h0LFo9MzAsWD0yNjtyZXR1cm4gSygic3ZnIix7dmlld0JveDpgMCAwICR7Sn0gJHtRfWAsc3R5bGU6e3dpZHRoOiIxMDAlIixoZWlnaHQ6IjEwMCUifSxmaWxsOiJub25lIix4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLGNoaWxkcmVuOltLKCJkZWZzIix7Y2hpbGRyZW46W0soImZpbHRlciIse2lkOiJpcGFkLWdsb3cwIix4OiIwIix5OiIwIix3aWR0aDpKLGhlaWdodDpRLGZpbHRlclVuaXRzOiJ1c2VyU3BhY2VPblVzZSIsY29sb3JJbnRlcnBvbGF0aW9uRmlsdGVyczoic1JHQiIsY2hpbGRyZW46W0soImZlRmxvb2QiLHtmbG9vZE9wYWNpdHk6IjAiLHJlc3VsdDoiQmFja2dyb3VuZEltYWdlRml4In0pLEsoImZlQmxlbmQiLHttb2RlOiJub3JtYWwiLGluOiJTb3VyY2VHcmFwaGljIixpbjI6IkJhY2tncm91bmRJbWFnZUZpeCIscmVzdWx0OiJzaGFwZSJ9KSxLKCJmZUdhdXNzaWFuQmx1ciIse3N0ZERldmlhdGlvbjoiMC41IixyZXN1bHQ6ImJsdXIifSldfSksSygiZmlsdGVyIix7aWQ6ImlwYWQtZ2xvdzEiLHg6IjUiLHk6IjUiLHdpZHRoOkotMTAsaGVpZ2h0OlEtMTAsZmlsdGVyVW5pdHM6InVzZXJTcGFjZU9uVXNlIixjb2xvckludGVycG9sYXRpb25GaWx0ZXJzOiJzUkdCIixjaGlsZHJlbjpbSygiZmVGbG9vZCIse2Zsb29kT3BhY2l0eToiMCIscmVzdWx0OiJCYWNrZ3JvdW5kSW1hZ2VGaXgifSksSygiZmVCbGVuZCIse21vZGU6Im5vcm1hbCIsaW46IlNvdXJjZUdyYXBoaWMiLGluMjoiQmFja2dyb3VuZEltYWdlRml4IixyZXN1bHQ6InNoYXBlIn0pLEsoImZlR2F1c3NpYW5CbHVyIix7c3RkRGV2aWF0aW9uOiIwLjMzMzMzMyIscmVzdWx0OiJibHVyIn0pXX0pXX0pLEsoInJlY3QiLHt4OiIzLjUiLHk6IjMuNSIsd2lkdGg6Si03LGhlaWdodDpRLTcscng6MjYsc3Ryb2tlOiIjNDU0NTQ4IixzdHJva2VXaWR0aDoiNCJ9KSxLKCJyZWN0Iix7eDoiMC44MzMiLHk6IjAuODMzIix3aWR0aDpKLTEuNjY2LGhlaWdodDpRLTEuNjY2LHJ4OjMwLHN0cm9rZToiIzM3MzczYSIsc3Ryb2tlV2lkdGg6IjEuNjY2In0pLEsoImciLHtvcGFjaXR5OiIwLjkiLGZpbHRlcjoidXJsKCNpcGFkLWdsb3cwKSIsY2hpbGRyZW46SygicmVjdCIse3g6IjEuNSIseToiMS41Iix3aWR0aDpKLTMsaGVpZ2h0OlEtMyxyeDoyOSxzdHJva2U6IiM0NTQ1NDgiLHN0cm9rZVdpZHRoOiIxLjY2NiJ9KX0pLEsoImciLHtvcGFjaXR5OiIwLjgiLGZpbHRlcjoidXJsKCNpcGFkLWdsb3cxKSIsY2hpbGRyZW46SygicmVjdCIse3g6IjYiLHk6IjYiLHdpZHRoOkotMTIsaGVpZ2h0OlEtMTIscng6MjQsc3Ryb2tlOiIjNjQ2NDY0IixzdHJva2VXaWR0aDoiMC42NjYifSl9KSxLKCJjaXJjbGUiLHtjeDpKLzIsY3k6UzEuaXBhZC5iZXplbFkvMisxLHI6IjMiLGZpbGw6IiMxYTFhMWEiLHN0eWxlOntvcGFjaXR5OiQ/MDowLjgsdHJhbnNpdGlvbjoib3BhY2l0eSAwLjNzIGVhc2UifX0pLEsoInJlY3QiLHt4OihKLTEyMCkvMix5OlEtUzEuaXBhZC5iZXplbFkvMi0yLjUsd2lkdGg6IjEyMCIsaGVpZ2h0OiI1IixyeDoiMi41IixmaWxsOiJ3aGl0ZSIsc3R5bGU6e29wYWNpdHk6JD8wOjAuMzUsbWl4QmxlbmRNb2RlOiJkaWZmZXJlbmNlIix0cmFuc2l0aW9uOiJvcGFjaXR5IDAuM3MgZWFzZSJ9fSldfSl9ZnVuY3Rpb24gbjcoe3N0cmVhbWluZzokPSExfSl7bGV0IEo9UzEud2F0Y2gud2lkdGgsUT1TMS53YXRjaC5oZWlnaHQsWj04OCxYPTgyLFk9OCxxPTM2LEc9US8yLTE4LTE2LFY9MjIsQj1RLzItMTErMTY7cmV0dXJuIEsoInN2ZyIse3ZpZXdCb3g6YDAgMCAke0p9ICR7UX1gLHN0eWxlOnt3aWR0aDoiMTAwJSIsaGVpZ2h0OiIxMDAlIixvdmVyZmxvdzoidmlzaWJsZSJ9LGZpbGw6Im5vbmUiLHhtbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsY2hpbGRyZW46W0soImRlZnMiLHtjaGlsZHJlbjpLKCJmaWx0ZXIiLHtpZDoid2F0Y2gtZ2xvdzAiLHg6IjAiLHk6IjAiLHdpZHRoOkorMTIsaGVpZ2h0OlEsZmlsdGVyVW5pdHM6InVzZXJTcGFjZU9uVXNlIixjb2xvckludGVycG9sYXRpb25GaWx0ZXJzOiJzUkdCIixjaGlsZHJlbjpbSygiZmVGbG9vZCIse2Zsb29kT3BhY2l0eToiMCIscmVzdWx0OiJCYWNrZ3JvdW5kSW1hZ2VGaXgifSksSygiZmVCbGVuZCIse21vZGU6Im5vcm1hbCIsaW46IlNvdXJjZUdyYXBoaWMiLGluMjoiQmFja2dyb3VuZEltYWdlRml4IixyZXN1bHQ6InNoYXBlIn0pLEsoImZlR2F1c3NpYW5CbHVyIix7c3RkRGV2aWF0aW9uOiIwLjUiLHJlc3VsdDoiYmx1ciJ9KV19KX0pLEsoInJlY3QiLHt4OkotMix5Okcsd2lkdGg6OCxoZWlnaHQ6MzYscng6IjMiLGZpbGw6IiMyYTJhMmMiLHN0cm9rZToiIzQ1NDU0OCIsc3Ryb2tlV2lkdGg6IjEifSksSygicmVjdCIse3g6Si0xLHk6Qix3aWR0aDo2LGhlaWdodDoyMixyeDoiMi41IixmaWxsOiIjMmEyYTJjIixzdHJva2U6IiM0NTQ1NDgiLHN0cm9rZVdpZHRoOiIwLjgifSksSygicmVjdCIse3g6IjMuNSIseToiMy41Iix3aWR0aDpKLTcsaGVpZ2h0OlEtNyxyeDo4MixzdHJva2U6IiM0NTQ1NDgiLHN0cm9rZVdpZHRoOiIzLjUifSksSygicmVjdCIse3g6IjAuODMzIix5OiIwLjgzMyIsd2lkdGg6Si0xLjY2NixoZWlnaHQ6US0xLjY2NixyeDo4OCxzdHJva2U6IiMzNzM3M2EiLHN0cm9rZVdpZHRoOiIxLjY2NiJ9KSxLKCJnIix7b3BhY2l0eToiMC45IixmaWx0ZXI6InVybCgjd2F0Y2gtZ2xvdzApIixjaGlsZHJlbjpLKCJyZWN0Iix7eDoiMS41Iix5OiIxLjUiLHdpZHRoOkotMyxoZWlnaHQ6US0zLHJ4Ojg3LHN0cm9rZToiIzQ1NDU0OCIsc3Ryb2tlV2lkdGg6IjEuNjY2In0pfSldfSl9ZnVuY3Rpb24gczcoe3N0cmVhbWluZzokPSExfSl7bGV0IEo9UzEudmlzaW9uLndpZHRoLFE9UzEudmlzaW9uLmhlaWdodCxaPTQwLFg9MzQ7cmV0dXJuIEsoInN2ZyIse3ZpZXdCb3g6YDAgMCAke0p9ICR7UX1gLHN0eWxlOnt3aWR0aDoiMTAwJSIsaGVpZ2h0OiIxMDAlIn0sZmlsbDoibm9uZSIseG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIixjaGlsZHJlbjpbSygiZGVmcyIse2NoaWxkcmVuOltLKCJmaWx0ZXIiLHtpZDoidmlzaW9uLWdsb3cwIix4OiIwIix5OiIwIix3aWR0aDpKLGhlaWdodDpRLGZpbHRlclVuaXRzOiJ1c2VyU3BhY2VPblVzZSIsY29sb3JJbnRlcnBvbGF0aW9uRmlsdGVyczoic1JHQiIsY2hpbGRyZW46W0soImZlRmxvb2QiLHtmbG9vZE9wYWNpdHk6IjAiLHJlc3VsdDoiQmFja2dyb3VuZEltYWdlRml4In0pLEsoImZlQmxlbmQiLHttb2RlOiJub3JtYWwiLGluOiJTb3VyY2VHcmFwaGljIixpbjI6IkJhY2tncm91bmRJbWFnZUZpeCIscmVzdWx0OiJzaGFwZSJ9KSxLKCJmZUdhdXNzaWFuQmx1ciIse3N0ZERldmlhdGlvbjoiMC41IixyZXN1bHQ6ImJsdXIifSldfSksSygiZmlsdGVyIix7aWQ6InZpc2lvbi1nbG93MSIseDoiNSIseToiNSIsd2lkdGg6Si0xMCxoZWlnaHQ6US0xMCxmaWx0ZXJVbml0czoidXNlclNwYWNlT25Vc2UiLGNvbG9ySW50ZXJwb2xhdGlvbkZpbHRlcnM6InNSR0IiLGNoaWxkcmVuOltLKCJmZUZsb29kIix7Zmxvb2RPcGFjaXR5OiIwIixyZXN1bHQ6IkJhY2tncm91bmRJbWFnZUZpeCJ9KSxLKCJmZUJsZW5kIix7bW9kZToibm9ybWFsIixpbjoiU291cmNlR3JhcGhpYyIsaW4yOiJCYWNrZ3JvdW5kSW1hZ2VGaXgiLHJlc3VsdDoic2hhcGUifSksSygiZmVHYXVzc2lhbkJsdXIiLHtzdGREZXZpYXRpb246IjAuMzMzIixyZXN1bHQ6ImJsdXIifSldfSksSygibGluZWFyR3JhZGllbnQiLHtpZDoidmlzaW9uLWdsYXNzIix4MToiMCIseTE6IjAiLHgyOiIwIix5MjoiMSIsY2hpbGRyZW46W0soInN0b3AiLHtvZmZzZXQ6IjAlIixzdG9wQ29sb3I6IiM1NTU1NTgiLHN0b3BPcGFjaXR5OiIwLjMifSksSygic3RvcCIse29mZnNldDoiMTAwJSIsc3RvcENvbG9yOiIjM2EzYTNkIixzdG9wT3BhY2l0eToiMC4xIn0pXX0pXX0pLEsoInJlY3QiLHt4OiIwIix5OiIwIix3aWR0aDpKLGhlaWdodDpRLHJ4OjQwLGZpbGw6InVybCgjdmlzaW9uLWdsYXNzKSJ9KSxLKCJyZWN0Iix7eDoiMy41Iix5OiIzLjUiLHdpZHRoOkotNyxoZWlnaHQ6US03LHJ4OjM0LHN0cm9rZToiIzQ1NDU0OCIsc3Ryb2tlV2lkdGg6IjMifSksSygicmVjdCIse3g6IjAuODMzIix5OiIwLjgzMyIsd2lkdGg6Si0xLjY2NixoZWlnaHQ6US0xLjY2NixyeDo0MCxzdHJva2U6IiMzNzM3M2EiLHN0cm9rZVdpZHRoOiIxLjY2NiJ9KSxLKCJnIix7b3BhY2l0eToiMC45IixmaWx0ZXI6InVybCgjdmlzaW9uLWdsb3cwKSIsY2hpbGRyZW46SygicmVjdCIse3g6IjEuNSIseToiMS41Iix3aWR0aDpKLTMsaGVpZ2h0OlEtMyxyeDozOSxzdHJva2U6IiM0NTQ1NDgiLHN0cm9rZVdpZHRoOiIxLjY2NiJ9KX0pLEsoImciLHtvcGFjaXR5OiIwLjgiLGZpbHRlcjoidXJsKCN2aXNpb24tZ2xvdzEpIixjaGlsZHJlbjpLKCJyZWN0Iix7eDoiNiIseToiNiIsd2lkdGg6Si0xMixoZWlnaHQ6US0xMixyeDozMixzdHJva2U6IiM2NDY0NjQiLHN0cm9rZVdpZHRoOiIwLjY2NiJ9KX0pLEsoImVsbGlwc2UiLHtjeDpKLzIsY3k6US8yLHJ4OkovMi0zMCxyeTpRLzItMjQsc3Ryb2tlOiIjNGE0YTRkIixzdHJva2VXaWR0aDoiMC41IixvcGFjaXR5OiIwLjMiLHN0eWxlOntvcGFjaXR5OiQ/MDowLjMsdHJhbnNpdGlvbjoib3BhY2l0eSAwLjNzIGVhc2UifX0pXX0pfXZhciBGMz16MChudWxsKTtmdW5jdGlvbiBPNSgkKXtsZXQgSj1DMChGMyk7aWYoIUopdGhyb3cgRXJyb3IoYDxTaW11bGF0b3JUb29sYmFyLiR7JH0+IG11c3QgYmUgcmVuZGVyZWQgaW5zaWRlIDxTaW11bGF0b3JUb29sYmFyPmApO3JldHVybiBKfXZhciBlNz17ZGlzcGxheToiZmxleCIsZmxleFdyYXA6IndyYXAiLGFsaWduSXRlbXM6ImNlbnRlciIsanVzdGlmeUNvbnRlbnQ6InNwYWNlLWJldHdlZW4iLGdhcDoiNHB4IDEycHgiLHBhZGRpbmc6IjhweCAxMnB4Iixib3JkZXJSYWRpdXM6MjQsYmFja2dyb3VuZDoidmFyKC0tc2VydmUtc2ltLXBhbmVsLWJnLCAjMTgxODE4KSIsYm9yZGVyOiIxcHggc29saWQgcmdiYSgyNTUsMjU1LDI1NSwwLjEpIixib3hTaGFkb3c6IjAgMXB4IDJweCByZ2JhKDAsMCwwLDAuMikiLG1pbldpZHRoOjI0MCx3aWR0aDoiMTAwJSJ9O2Z1bmN0aW9uICQkKHtleGVjOiQsb25Sb3RhdGU6SixvcmllbnRhdGlvbjpRLGRldmljZVVkaWQ6WixkZXZpY2VOYW1lOlgsZGV2aWNlUnVudGltZTpZLHN0cmVhbWluZzpxPSExLGRpc2FibGVkOkc9ITEsY2hpbGRyZW46VixzdHlsZTpCLC4uLk59KXtsZXQgej1FMChYKSxDPXtleGVjOiQsb25Sb3RhdGU6SixvcmllbnRhdGlvbjpRLGRldmljZVVkaWQ6WixkZXZpY2VOYW1lOlgsZGV2aWNlUnVudGltZTpZLGRldmljZVR5cGU6eixzdHJlYW1pbmc6cSxkaXNhYmxlZDpHfHwhWnx8IXF9O3JldHVybiBLKEYzLlByb3ZpZGVyLHt2YWx1ZTpDLGNoaWxkcmVuOksoImRpdiIseyJkYXRhLXNpbXVsYXRvci10b29sYmFyIjohMCxzdHlsZTp7Li4uZTcsLi4uQn0sLi4uTixjaGlsZHJlbjpWfSl9KX12YXIgSiQ9e2Rpc3BsYXk6ImZsZXgiLGZsZXhEaXJlY3Rpb246ImNvbHVtbiIsYWxpZ25JdGVtczoiZmxleC1zdGFydCIsdGV4dEFsaWduOiJsZWZ0IixiYWNrZ3JvdW5kOiJ0cmFuc3BhcmVudCIsYm9yZGVyOiJub25lIixjb2xvcjoiI2ZmZiIscGFkZGluZzoiMnB4IDRweCIsbWFyZ2luOiItMnB4IC00cHgiLGJvcmRlclJhZGl1czo2LGN1cnNvcjoicG9pbnRlciIsbWluV2lkdGg6MCxtYXhXaWR0aDoiMTAwJSIsbGluZUhlaWdodDoxLjIsZm9udEZhbWlseToiaW5oZXJpdCJ9LFEkPVcwKGZ1bmN0aW9uKHtuYW1lOkosc3VidGl0bGU6USxoaWRlQ2hldnJvbjpaLGhpZGVTdWJ0aXRsZTpYLHN0eWxlOlksb25Nb3VzZUVudGVyOnEsb25Nb3VzZUxlYXZlOkcsLi4uVn0sQil7bGV0IE49TzUoIlRpdGxlIiksW3osTF09VyghMSksQz1KPz9OLmRldmljZU5hbWU/PyJObyBzaW11bGF0b3IiLEE9UT8/KE4uZGV2aWNlUnVudGltZT9OLmRldmljZVJ1bnRpbWUucmVwbGFjZSgvXC4vLCIgIik6IuKAlCIpO3JldHVybiBLKCJidXR0b24iLHtyZWY6Qix0eXBlOiJidXR0b24iLCJkYXRhLXNpbXVsYXRvci10b29sYmFyLXRpdGxlIjohMCxvbk1vdXNlRW50ZXI6KFUpPT57TCghMCkscT8uKFUpfSxvbk1vdXNlTGVhdmU6KFUpPT57TCghMSksRz8uKFUpfSxzdHlsZTp7Li4uSiQsYmFja2dyb3VuZDp6PyJyZ2JhKDI1NSwyNTUsMjU1LDAuMSkiOiJ0cmFuc3BhcmVudCIsLi4uWX0sLi4uVixjaGlsZHJlbjpbSygic3BhbiIse3N0eWxlOntkaXNwbGF5OiJpbmxpbmUtZmxleCIsYWxpZ25JdGVtczoiY2VudGVyIixnYXA6NCxmb250U2l6ZToxMixmb250V2VpZ2h0OjYwMCxjb2xvcjoiI2ZmZiIsbWF4V2lkdGg6IjEwMCUiLG92ZXJmbG93OiJoaWRkZW4iLHRleHRPdmVyZmxvdzoiZWxsaXBzaXMiLHdoaXRlU3BhY2U6Im5vd3JhcCJ9LGNoaWxkcmVuOltDLCFaJiZLKCJzdmciLHt3aWR0aDoiMTAiLGhlaWdodDoiMTAiLHZpZXdCb3g6IjAgMCAyNCAyNCIsZmlsbDoibm9uZSIsc3Ryb2tlOiJjdXJyZW50Q29sb3IiLHN0cm9rZVdpZHRoOiIyLjUiLHN0cm9rZUxpbmVjYXA6InJvdW5kIixzdHJva2VMaW5lam9pbjoicm91bmQiLHN0eWxlOntjb2xvcjoicmdiYSgyNTUsMjU1LDI1NSwwLjYpIixmbGV4U2hyaW5rOjB9LGNoaWxkcmVuOksoInBvbHlsaW5lIix7cG9pbnRzOiI2IDkgMTIgMTUgMTggOSJ9KX0pXX0pLCFYJiZLKCJzcGFuIix7c3R5bGU6e2ZvbnRTaXplOjEwLGNvbG9yOiJyZ2JhKDI1NSwyNTUsMjU1LDAuNSkiLG1heFdpZHRoOiIxMDAlIixvdmVyZmxvdzoiaGlkZGVuIix0ZXh0T3ZlcmZsb3c6ImVsbGlwc2lzIix3aGl0ZVNwYWNlOiJub3dyYXAifSxjaGlsZHJlbjpBfSldfSl9KSxaJD17ZGlzcGxheToiZmxleCIsYWxpZ25JdGVtczoiY2VudGVyIixnYXA6NCxmbGV4U2hyaW5rOjB9O2Z1bmN0aW9uIEskKHtzdHlsZTokLC4uLkp9KXtyZXR1cm4gSygiZGl2Iix7c3R5bGU6ey4uLlokLC4uLiR9LC4uLkp9KX12YXIgWCQ9e2JhY2tncm91bmQ6InRyYW5zcGFyZW50Iixib3JkZXI6Im5vbmUiLHBhZGRpbmc6Nixib3JkZXJSYWRpdXM6MTIsY3Vyc29yOiJwb2ludGVyIixkaXNwbGF5OiJpbmxpbmUtZmxleCIsYWxpZ25JdGVtczoiY2VudGVyIixqdXN0aWZ5Q29udGVudDoiY2VudGVyIixjb2xvcjoicmdiYSgyNTUsMjU1LDI1NSwwLjgpIix0cmFuc2l0aW9uOiJiYWNrZ3JvdW5kLWNvbG9yIDAuMTVzLCBjb2xvciAwLjE1cyIscG9zaXRpb246InJlbGF0aXZlIixvdmVyZmxvdzoidmlzaWJsZSJ9LEY1PVcwKGZ1bmN0aW9uKHtmb3JjZURpc2FibGVkOkosdG9vbHRpcDpRLHN0eWxlOlosZGlzYWJsZWQ6WCx0aXRsZTpZLG9uTW91c2VFbnRlcjpxLG9uTW91c2VMZWF2ZTpHLG9uUG9pbnRlckRvd246VixvbkZvY3VzOkIsb25CbHVyOk4sb25DbGljazp6LGNoaWxkcmVuOkwsImFyaWEtbGFiZWwiOkMsLi4uQX0sVSl7bGV0IEg9QzAoRjMpLGs9WHx8Snx8SD8uZGlzYWJsZWQsW0Ysd109VyghMSksW1QsU109VyghMSkseD1FKCExKSwkMT1KMigpLGY9UT8/WT8/KHR5cGVvZiBDPT09InN0cmluZyI/QzpudWxsKSxpPSEhZiYmIWsmJihGfHxUKTtyZXR1cm4gSygiYnV0dG9uIix7cmVmOlUsdHlwZToiYnV0dG9uIixkaXNhYmxlZDprLCJhcmlhLWxhYmVsIjpDLCJhcmlhLWRlc2NyaWJlZGJ5IjpmPyQxOnZvaWQgMCxvblBvaW50ZXJEb3duOihyKT0+e3guY3VycmVudD0hMCxWPy4ocil9LG9uTW91c2VFbnRlcjoocik9Pnt3KCEwKSxxPy4ocil9LG9uTW91c2VMZWF2ZToocik9Pnt3KCExKSxHPy4ocil9LG9uRm9jdXM6KHIpPT57UygheC5jdXJyZW50KSxCPy4ocil9LG9uQmx1cjoocik9Pnt4LmN1cnJlbnQ9ITEsUyghMSksTj8uKHIpfSxvbkNsaWNrOihyKT0+e3coITEpLFMoITEpLHIuY3VycmVudFRhcmdldC5ibHVyKCksej8uKHIpfSxzdHlsZTp7Li4uWCQsY29sb3I6az8icmdiYSgyNTUsMjU1LDI1NSwwLjI1KSI6InJnYmEoMjU1LDI1NSwyNTUsMC44KSIsYmFja2dyb3VuZDpGJiYhaz8icmdiYSgyNTUsMjU1LDI1NSwwLjEpIjoidHJhbnNwYXJlbnQiLGN1cnNvcjprPyJub3QtYWxsb3dlZCI6InBvaW50ZXIiLC4uLlp9LC4uLkEsY2hpbGRyZW46W0wsZiYmSygic3BhbiIse2lkOiQxLHJvbGU6InRvb2x0aXAiLCJhcmlhLWhpZGRlbiI6IWksc3R5bGU6e3Bvc2l0aW9uOiJhYnNvbHV0ZSIsbGVmdDoiNTAlIixib3R0b206ImNhbGMoMTAwJSArIDhweCkiLHRyYW5zZm9ybTpgdHJhbnNsYXRlWCgtNTAlKSB0cmFuc2xhdGVZKCR7aT8wOjJ9cHgpYCxvcGFjaXR5Omk/MTowLHBvaW50ZXJFdmVudHM6Im5vbmUiLHdoaXRlU3BhY2U6Im5vd3JhcCIscGFkZGluZzoiNHB4IDdweCIsYm9yZGVyUmFkaXVzOjYsYmFja2dyb3VuZDoidmFyKC0tc2VydmUtc2ltLXBhbmVsLWJnLCAjMTgxODE4KSIsYm9yZGVyOiIxcHggc29saWQgcmdiYSgyNTUsMjU1LDI1NSwwLjEyKSIsY29sb3I6InJnYmEoMjU1LDI1NSwyNTUsMC45MikiLGZvbnRTaXplOjExLGZvbnRXZWlnaHQ6NTAwLGxpbmVIZWlnaHQ6MSxib3hTaGFkb3c6IjAgNHB4IDE0cHggcmdiYSgwLDAsMCwwLjMyKSIsdHJhbnNpdGlvbjoib3BhY2l0eSAwLjEycyBlYXNlLCB0cmFuc2Zvcm0gMC4xMnMgZWFzZSIsekluZGV4OjEwMH0sY2hpbGRyZW46Zn0pXX0pfSk7ZnVuY3Rpb24gWSQoJCxKKXtpZigkPT09IndhdGNoIilyZXR1cm4gcSQoKTtpZihKKXJldHVybmB4Y3J1biBzaW1jdGwgbGF1bmNoICR7Sn0gY29tLmFwcGxlLnNwcmluZ2JvYXJkYDtyZXR1cm4ic2VydmUtc2ltIGJ1dHRvbiBob21lIn1mdW5jdGlvbiBxJCgpe3JldHVyblsndGVsbCBhcHBsaWNhdGlvbiAiU3lzdGVtIEV2ZW50cyIgdG8gdGVsbCBwcm9jZXNzICJTaW11bGF0b3IiIHRvIHNldCBmcm9udG1vc3QgdG8gdHJ1ZScsJ3RlbGwgYXBwbGljYXRpb24gIlN5c3RlbSBFdmVudHMiIHRvIHRlbGwgcHJvY2VzcyAiU2ltdWxhdG9yIiB0byBwZXJmb3JtIGFjdGlvbiAiQVhSYWlzZSIgb2YgKGZpcnN0IHdpbmRvdyB3aG9zZSBuYW1lIGNvbnRhaW5zICJ3YXRjaE9TIiknLCd0ZWxsIGFwcGxpY2F0aW9uICJTeXN0ZW0gRXZlbnRzIiB0byB0ZWxsIHByb2Nlc3MgIlNpbXVsYXRvciIgdG8gY2xpY2sgbWVudSBpdGVtICJIb21lIiBvZiBtZW51ICJEZXZpY2UiIG9mIG1lbnUgYmFyIGl0ZW0gIkRldmljZSIgb2YgbWVudSBiYXIgMSddLm1hcCgoSik9PmAtZSAnJHtKfSdgKS5yZWR1Y2UoKEosUSk9PmAke0p9ICR7UX1gLCJvc2FzY3JpcHQiKX12YXIgRyQ9Sygic3ZnIix7d2lkdGg6IjE4IixoZWlnaHQ6IjE4Iix2aWV3Qm94OiIwIDAgMjQgMjQiLGZpbGw6Im5vbmUiLHN0cm9rZToiY3VycmVudENvbG9yIixzdHJva2VXaWR0aDoiMiIsc3Ryb2tlTGluZWNhcDoicm91bmQiLHN0cm9rZUxpbmVqb2luOiJyb3VuZCIsY2hpbGRyZW46SygicGF0aCIse2Q6Ik0zIDEwLjUgMTIgM2w5IDcuNVYyMGExIDEgMCAwIDEtMSAxaC01di03aC02djdINGExIDEgMCAwIDEtMS0xeiJ9KX0pLFYkPUsoInN2ZyIse3dpZHRoOiIxOCIsaGVpZ2h0OiIxOCIsdmlld0JveDoiMCAwIDQ0IDQ0IixmaWxsOiJub25lIix4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLGNoaWxkcmVuOksoInBhdGgiLHtmaWxsUnVsZToiZXZlbm9kZCIsY2xpcFJ1bGU6ImV2ZW5vZGQiLGZpbGw6ImN1cnJlbnRDb2xvciIsZDoiTTQzLjY4NzUgMTIuNDY4OFY4LjI3MzQ0QzQzLjY4NzUgNS43MjY1NiA0Mi45NTMxIDMuNzEwOTQgNDEuNDg0NCAyLjIyNjU2QzQwLjAxNTYgMC43NDIxODggMzggMCAzNS40Mzc1IDBIMzEuMTQ4NEMzMC42MDE2IDAgMzAuMTMyOCAwLjE5NTMxMiAyOS43NDIyIDAuNTg1OTM4QzI5LjM1MTYgMC45NzY1NjIgMjkuMTU2MiAxLjQ0NTMxIDI5LjE1NjIgMS45OTIxOUMyOS4xNTYyIDIuNTIzNDQgMjkuMzUxNiAyLjk4NDM4IDI5Ljc0MjIgMy4zNzVDMzAuMTMyOCAzLjc2NTYyIDMwLjYwMTYgMy45NjA5NCAzMS4xNDg0IDMuOTYwOTRIMzUuNDM3NUMzNi43ODEyIDMuOTYwOTQgMzcuODM1OSA0LjM0Mzc1IDM4LjYwMTYgNS4xMDkzOEMzOS4zNTE2IDUuODc1IDM5LjcyNjYgNi45Mjk2OSAzOS43MjY2IDguMjczNDRWMTIuNDY4OEMzOS43MjY2IDEzIDM5LjkyMTkgMTMuNDYwOSA0MC4zMTI1IDEzLjg1MTZDNDAuNzAzMSAxNC4yNDIyIDQxLjE3MTkgMTQuNDM3NSA0MS43MTg4IDE0LjQzNzVDNDIuMjUgMTQuNDM3NSA0Mi43MTA5IDE0LjI0MjIgNDMuMTAxNiAxMy44NTE2QzQzLjQ5MjIgMTMuNDYwOSA0My42ODc1IDEzIDQzLjY4NzUgMTIuNDY4OFpNMCAxMi40Njg4QzAgMTMgMC4xOTUzMTIgMTMuNDYwOSAwLjU4NTkzOCAxMy44NTE2QzAuOTc2NTYyIDE0LjI0MjIgMS40Mzc1IDE0LjQzNzUgMS45Njg3NSAxNC40Mzc1QzIuNSAxNC40Mzc1IDIuOTYwOTQgMTQuMjQyMiAzLjM1MTU2IDEzLjg1MTZDMy43NDIxOSAxMy40NjA5IDMuOTM3NSAxMyAzLjkzNzUgMTIuNDY4OFY4LjI3MzQ0QzMuOTM3NSA2LjkyOTY5IDQuMzIwMzEgNS44NzUgNS4wODU5NCA1LjEwOTM4QzUuODM1OTQgNC4zNDM3NSA2Ljg5MDYyIDMuOTYwOTQgOC4yNSAzLjk2MDk0SDEyLjUzOTFDMTMuMDg1OSAzLjk2MDk0IDEzLjU1NDcgMy43NjU2MiAxMy45NDUzIDMuMzc1QzE0LjMyMDMgMi45ODQzOCAxNC41MDc4IDIuNTIzNDQgMTQuNTA3OCAxLjk5MjE5QzE0LjUwNzggMS40NDUzMSAxNC4zMjAzIDAuOTc2NTYyIDEzLjk0NTMgMC41ODU5MzhDMTMuNTU0NyAwLjE5NTMxMiAxMy4wODU5IDAgMTIuNTM5MSAwSDguMjVDNS42ODc1IDAgMy42NzE4OCAwLjc0MjE4OCAyLjIwMzEyIDIuMjI2NTZDMC43MzQzNzUgMy43MTA5NCAwIDUuNzI2NTYgMCA4LjI3MzQ0VjEyLjQ2ODhaTTQzLjY4NzUgMzEuMjQyMkM0My42ODc1IDMwLjcxMDkgNDMuNDkyMiAzMC4yNSA0My4xMDE2IDI5Ljg1OTRDNDIuNzEwOSAyOS40Njg4IDQyLjI1IDI5LjI3MzQgNDEuNzE4OCAyOS4yNzM0QzQxLjE3MTkgMjkuMjczNCA0MC43MDMxIDI5LjQ2ODggNDAuMzEyNSAyOS44NTk0QzM5LjkyMTkgMzAuMjUgMzkuNzI2NiAzMC43MTA5IDM5LjcyNjYgMzEuMjQyMlYzNS40Mzc1QzM5LjcyNjYgMzYuNzgxMiAzOS4zNTE2IDM3LjgzNTkgMzguNjAxNiAzOC42MDE2QzM3LjgzNTkgMzkuMzY3MiAzNi43ODEyIDM5Ljc1IDM1LjQzNzUgMzkuNzVIMzEuMTQ4NEMzMC42MDE2IDM5Ljc1IDMwLjEzMjggMzkuOTQ1MyAyOS43NDIyIDQwLjMzNTlDMjkuMzUxNiA0MC43MjY2IDI5LjE1NjIgNDEuMTg3NSAyOS4xNTYyIDQxLjcxODhDMjkuMTU2MiA0Mi4yNjU2IDI5LjM1MTYgNDIuNzI2NiAyOS43NDIyIDQzLjEwMTZDMzAuMTMyOCA0My40OTIyIDMwLjYwMTYgNDMuNjg3NSAzMS4xNDg0IDQzLjY4NzVIMzUuNDM3NUMzOCA0My42ODc1IDQwLjAxNTYgNDIuOTQ1MyA0MS40ODQ0IDQxLjQ2MDlDNDIuOTUzMSAzOS45OTIyIDQzLjY4NzUgMzcuOTg0NCA0My42ODc1IDM1LjQzNzVWMzEuMjQyMlpNMCAzMS4yNDIyVjM1LjQzNzVDMCAzNy45ODQ0IDAuNzM0Mzc1IDM5Ljk5MjIgMi4yMDMxMiA0MS40NjA5QzMuNjcxODggNDIuOTQ1MyA1LjY4NzUgNDMuNjg3NSA4LjI1IDQzLjY4NzVIMTIuNTM5MUMxMy4wODU5IDQzLjY4NzUgMTMuNTU0NyA0My40OTIyIDEzLjk0NTMgNDMuMTAxNkMxNC4zMjAzIDQyLjcyNjYgMTQuNTA3OCA0Mi4yNjU2IDE0LjUwNzggNDEuNzE4OEMxNC41MDc4IDQxLjE4NzUgMTQuMzIwMyA0MC43MjY2IDEzLjk0NTMgNDAuMzM1OUMxMy41NTQ3IDM5Ljk0NTMgMTMuMDg1OSAzOS43NSAxMi41MzkxIDM5Ljc1SDguMjVDNi44OTA2MiAzOS43NSA1LjgzNTk0IDM5LjM2NzIgNS4wODU5NCAzOC42MDE2QzQuMzIwMzEgMzcuODM1OSAzLjkzNzUgMzYuNzgxMiAzLjkzNzUgMzUuNDM3NVYzMS4yNDIyQzMuOTM3NSAzMC43MTA5IDMuNzQyMTkgMzAuMjUgMy4zNTE1NiAyOS44NTk0QzIuOTYwOTQgMjkuNDY4OCAyLjUgMjkuMjczNCAxLjk2ODc1IDI5LjI3MzRDMS40Mzc1IDI5LjI3MzQgMC45NzY1NjIgMjkuNDY4OCAwLjU4NTkzOCAyOS44NTk0QzAuMTk1MzEyIDMwLjI1IDAgMzAuNzEwOSAwIDMxLjI0MjJaTTMxLjU5MzggMzEuODA0N0MzMi43ODEyIDMxLjgwNDcgMzMuNjcxOSAzMS41MTU2IDM0LjI2NTYgMzAuOTM3NUMzNC44NTk0IDMwLjM0MzggMzUuMTU2MiAyOS40Njg4IDM1LjE1NjIgMjguMzEyNVYxNi43MTA5QzM1LjE1NjIgMTUuNTM5MSAzNC44NTk0IDE0LjY2NDEgMzQuMjY1NiAxNC4wODU5QzMzLjY3MTkgMTMuNDkyMiAzMi43ODEyIDEzLjE5NTMgMzEuNTkzOCAxMy4xOTUzSDI4Ljg5ODRDMjguNDYwOSAxMy4xOTUzIDI4LjE0ODQgMTMuMTQwNiAyNy45NjA5IDEzLjAzMTJDMjcuNzU3OCAxMi45MjE5IDI3LjUyMzQgMTIuNzI2NiAyNy4yNTc4IDEyLjQ0NTNMMjYuMzY3MiAxMS41MDc4QzI2LjA4NTkgMTEuMTk1MyAyNS43ODEyIDEwLjk2ODggMjUuNDUzMSAxMC44MjgxQzI1LjEwOTQgMTAuNjcxOSAyNC42NTYyIDEwLjU5MzggMjQuMDkzOCAxMC41OTM4SDE5LjYxNzJDMTkuMDU0NyAxMC41OTM4IDE4LjYwOTQgMTAuNjcxOSAxOC4yODEyIDEwLjgyODFDMTcuOTM3NSAxMC45Njg4IDE3LjYyNSAxMS4xOTUzIDE3LjM0MzggMTEuNTA3OEwxNi40NzY2IDEyLjQ0NTNDMTYuMjEwOSAxMi43NDIyIDE1Ljk3NjYgMTIuOTQ1MyAxNS43NzM0IDEzLjA1NDdDMTUuNTU0NyAxMy4xNDg0IDE1LjIzNDQgMTMuMTk1MyAxNC44MTI1IDEzLjE5NTNIMTIuMDQ2OUMxMC44OTA2IDEzLjE5NTMgMTAuMDE1NiAxMy40OTIyIDkuNDIxODggMTQuMDg1OUM4LjgxMjUgMTQuNjY0MSA4LjUwNzgxIDE1LjUzOTEgOC41MDc4MSAxNi43MTA5VjI4LjMxMjVDOC41MDc4MSAyOS40Njg4IDguODEyNSAzMC4zNDM4IDkuNDIxODggMzAuOTM3NUMxMC4wMTU2IDMxLjUxNTYgMTAuODkwNiAzMS44MDQ3IDEyLjA0NjkgMzEuODA0N0gzMS41OTM4Wk0yMS43OTY5IDI4Ljk0NTNDMjAuNTkzOCAyOC45NDUzIDE5LjUgMjguNjY0MSAxOC41MTU2IDI4LjEwMTZDMTcuNTE1NiAyNy41MjM0IDE2LjcyNjYgMjYuNzQyMiAxNi4xNDg0IDI1Ljc1NzhDMTUuNTU0NyAyNC43NTc4IDE1LjI1NzggMjMuNjMyOCAxNS4yNTc4IDIyLjM4MjhDMTUuMjU3OCAyMS4xNzk3IDE1LjU1NDcgMjAuMDg1OSAxNi4xNDg0IDE5LjEwMTZDMTYuNzI2NiAxOC4xMDE2IDE3LjUxNTYgMTcuMzEyNSAxOC41MTU2IDE2LjczNDRDMTkuNSAxNi4xNDA2IDIwLjU5MzggMTUuODQzOCAyMS43OTY5IDE1Ljg0MzhDMjMuMDE1NiAxNS44NDM4IDI0LjEyNSAxNi4xNDA2IDI1LjEyNSAxNi43MzQ0QzI2LjEwOTQgMTcuMzEyNSAyNi44OTg0IDE4LjEwMTYgMjcuNDkyMiAxOS4xMDE2QzI4LjA3MDMgMjAuMDg1OSAyOC4zNTk0IDIxLjE3OTcgMjguMzU5NCAyMi4zODI4QzI4LjM1OTQgMjMuNjE3MiAyOC4wNzAzIDI0LjcyNjYgMjcuNDkyMiAyNS43MTA5QzI2Ljg5ODQgMjYuNjk1MyAyNi4xMDk0IDI3LjQ4NDQgMjUuMTI1IDI4LjA3ODFDMjQuMTI1IDI4LjY1NjIgMjMuMDE1NiAyOC45NDUzIDIxLjc5NjkgMjguOTQ1M1pNMjEuODIwMyAyNi45MDYyQzIyLjY0ODQgMjYuOTA2MiAyMy40MDYyIDI2LjcxMDkgMjQuMDkzOCAyNi4zMjAzQzI0Ljc4MTIgMjUuOTE0MSAyNS4zMjgxIDI1LjM2NzIgMjUuNzM0NCAyNC42Nzk3QzI2LjEyNSAyMy45OTIyIDI2LjMyMDMgMjMuMjI2NiAyNi4zMjAzIDIyLjM4MjhDMjYuMzIwMyAyMS41NzAzIDI2LjEyNSAyMC44MjAzIDI1LjczNDQgMjAuMTMyOEMyNS4zMjgxIDE5LjQ0NTMgMjQuNzgxMiAxOC45MDYyIDI0LjA5MzggMTguNTE1NkMyMy40MDYyIDE4LjEwOTQgMjIuNjQ4NCAxNy45MDYyIDIxLjgyMDMgMTcuOTA2MkMyMC45OTIyIDE3LjkwNjIgMjAuMjQyMiAxOC4xMDk0IDE5LjU3MDMgMTguNTE1NkMxOC44ODI4IDE4LjkwNjIgMTguMzM1OSAxOS40NDUzIDE3LjkyOTcgMjAuMTMyOEMxNy41MjM0IDIwLjgyMDMgMTcuMzIwMyAyMS41NzAzIDE3LjMyMDMgMjIuMzgyOEMxNy4zMjAzIDIzLjIyNjYgMTcuNTIzNCAyMy45OTIyIDE3LjkyOTcgMjQuNjc5N0MxOC4zMzU5IDI1LjM2NzIgMTguODgyOCAyNS45MTQxIDE5LjU3MDMgMjYuMzIwM0MyMC4yNDIyIDI2LjcxMDkgMjAuOTkyMiAyNi45MDYyIDIxLjgyMDMgMjYuOTA2MlpNMTIuNjMyOCAxOC45ODQ0QzEyLjIxMDkgMTguOTg0NCAxMS44NTk0IDE4LjgzNTkgMTEuNTc4MSAxOC41MzkxQzExLjI4MTIgMTguMjQyMiAxMS4xMzI4IDE3Ljg5MDYgMTEuMTMyOCAxNy40ODQ0QzExLjEzMjggMTcuMDYyNSAxMS4yODEyIDE2LjcxMDkgMTEuNTc4MSAxNi40Mjk3QzExLjg1OTQgMTYuMTMyOCAxMi4yMTA5IDE1Ljk4NDQgMTIuNjMyOCAxNS45ODQ0QzEzLjAzOTEgMTUuOTg0NCAxMy4zOTA2IDE2LjEzMjggMTMuNjg3NSAxNi40Mjk3QzEzLjk4NDQgMTYuNzEwOSAxNC4xMzI4IDE3LjA2MjUgMTQuMTMyOCAxNy40ODQ0QzE0LjEzMjggMTcuODkwNiAxMy45ODQ0IDE4LjI0MjIgMTMuNjg3NSAxOC41MzkxQzEzLjM5MDYgMTguODM1OSAxMy4wMzkxIDE4Ljk4NDQgMTIuNjMyOCAxOC45ODQ0WiJ9KX0pLEIkPUsoInN2ZyIse3dpZHRoOiIyMSIsaGVpZ2h0OiIyMSIsdmlld0JveDoiMCAwIDI0IDI0IixmaWxsOiJub25lIixzdHJva2U6ImN1cnJlbnRDb2xvciIsc3Ryb2tlV2lkdGg6IjIiLHN0cm9rZUxpbmVjYXA6InJvdW5kIixzdHJva2VMaW5lam9pbjoicm91bmQiLHhtbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsY2hpbGRyZW46W0soInBhdGgiLHtkOiJNMTIgNUg2YTIgMiAwIDAgMC0yIDJ2MyJ9KSxLKCJwYXRoIix7ZDoibTkgOCAzLTMtMy0zIn0pLEsoInBhdGgiLHtkOiJNNCAxNHY0YTIgMiAwIDAgMCAyIDJoMTJhMiAyIDAgMCAwIDItMlY3YTIgMiAwIDAgMC0yLTJoLTIifSldfSksTiQ9VzAoZnVuY3Rpb24oe29uQ2xpY2s6SiwuLi5RfSxaKXtsZXQgWD1PNSgiSG9tZUJ1dHRvbiIpO3JldHVybiBLKEY1LHtyZWY6WiwiYXJpYS1sYWJlbCI6IkhvbWUiLG9uQ2xpY2s6KFkpPT57aWYoSj8uKFkpLFkuZGVmYXVsdFByZXZlbnRlZClyZXR1cm47WC5leGVjKFkkKFguZGV2aWNlVHlwZSxYLmRldmljZVVkaWQpKX0sLi4uUSxjaGlsZHJlbjpHJH0pfSksTCQ9VzAoZnVuY3Rpb24oe29uQ2xpY2s6SiwuLi5RfSxaKXtsZXQgWD1PNSgiU2NyZWVuc2hvdEJ1dHRvbiIpO3JldHVybiBLKEY1LHtyZWY6WiwiYXJpYS1sYWJlbCI6IlNjcmVlbnNob3QiLG9uQ2xpY2s6KFkpPT57aWYoSj8uKFkpLFkuZGVmYXVsdFByZXZlbnRlZClyZXR1cm47aWYoWC5kZXZpY2VVZGlkKVguZXhlYyhgeGNydW4gc2ltY3RsIGlvICR7WC5kZXZpY2VVZGlkfSBzY3JlZW5zaG90IH4vRGVza3RvcC9zZXJ2ZS1zaW0tc2NyZWVuc2hvdC0kKGRhdGUgKyVzKS5wbmdgKX0sLi4uUSxjaGlsZHJlbjpWJH0pfSkseiQ9VzAoZnVuY3Rpb24oe29uQ2xpY2s6Sixmb3JjZURpc2FibGVkOlEsLi4uWn0sWCl7bGV0IFk9TzUoIlJvdGF0ZUJ1dHRvbiIpLHE9WS5kZXZpY2VUeXBlPT09IndhdGNoInx8WS5kZXZpY2VUeXBlPT09InZpc2lvbiIsW0csVl09VygicG9ydHJhaXQiKTtyZXR1cm4gYigoKT0+e1YoWS5vcmllbnRhdGlvbj8/InBvcnRyYWl0Iil9LFtZLmRldmljZVVkaWQsWS5vcmllbnRhdGlvbl0pLEsoRjUse3JlZjpYLCJhcmlhLWxhYmVsIjoiUm90YXRlIGRldmljZSIsZm9yY2VEaXNhYmxlZDpRfHxxLG9uQ2xpY2s6KEIpPT57aWYoSj8uKEIpLEIuZGVmYXVsdFByZXZlbnRlZClyZXR1cm47aWYoIVkuZGV2aWNlVWRpZHx8cSlyZXR1cm47bGV0IE49XzJbWS5vcmllbnRhdGlvbj8/R107aWYoVihOKSxZLm9uUm90YXRlKVkub25Sb3RhdGUoTik7ZWxzZSBZLmV4ZWMoYHNlcnZlLXNpbSByb3RhdGUgJHtOfSAtZCAke1kuZGV2aWNlVWRpZH1gKX0sLi4uWixjaGlsZHJlbjpCJH0pfSkscjE9JCQ7cjEuVGl0bGU9USQ7cjEuQWN0aW9ucz1LJDtyMS5CdXR0b249RjU7cjEuSG9tZUJ1dHRvbj1OJDtyMS5TY3JlZW5zaG90QnV0dG9uPUwkO3IxLlJvdGF0ZUJ1dHRvbj16JDt2YXIgTTU9KC4uLiQpPT4kLmZpbHRlcigoSixRLFopPT57cmV0dXJuIEJvb2xlYW4oSikmJkoudHJpbSgpIT09IiImJlouaW5kZXhPZihKKT09PVF9KS5qb2luKCIgIikudHJpbSgpO3ZhciBQOT0oJCk9PiQucmVwbGFjZSgvKFthLXowLTldKShbQS1aXSkvZywiJDEtJDIiKS50b0xvd2VyQ2FzZSgpO3ZhciBfOT0oJCk9PiQucmVwbGFjZSgvXihbQS1aXSl8W1xzLV9dKyhcdykvZywoSixRLFopPT5aP1oudG9VcHBlckNhc2UoKTpRLnRvTG93ZXJDYXNlKCkpO3ZhciBNMz0oJCk9PntsZXQgSj1fOSgkKTtyZXR1cm4gSi5jaGFyQXQoMCkudG9VcHBlckNhc2UoKStKLnNsaWNlKDEpfTt2YXIgVzU9e3htbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsd2lkdGg6MjQsaGVpZ2h0OjI0LHZpZXdCb3g6IjAgMCAyNCAyNCIsZmlsbDoibm9uZSIsc3Ryb2tlOiJjdXJyZW50Q29sb3IiLHN0cm9rZVdpZHRoOjIsc3Ryb2tlTGluZWNhcDoicm91bmQiLHN0cm9rZUxpbmVqb2luOiJyb3VuZCJ9O3ZhciBEOT0oJCk9Pntmb3IobGV0IEogaW4gJClpZihKLnN0YXJ0c1dpdGgoImFyaWEtIil8fEo9PT0icm9sZSJ8fEo9PT0idGl0bGUiKXJldHVybiEwO3JldHVybiExfTt2YXIgQyQ9ejAoe30pO3ZhciBUOT0oKT0+QzAoQyQpO3ZhciB3OT1XMCgoe2NvbG9yOiQsc2l6ZTpKLHN0cm9rZVdpZHRoOlEsYWJzb2x1dGVTdHJva2VXaWR0aDpaLGNsYXNzTmFtZTpYPSIiLGNoaWxkcmVuOlksaWNvbk5vZGU6cSwuLi5HfSxWKT0+e2xldHtzaXplOkI9MjQsc3Ryb2tlV2lkdGg6Tj0yLGFic29sdXRlU3Ryb2tlV2lkdGg6ej0hMSxjb2xvcjpMPSJjdXJyZW50Q29sb3IiLGNsYXNzTmFtZTpDPSIifT1UOSgpPz97fSxBPVo/P3o/TnVtYmVyKFE/P04pKjI0L051bWJlcihKPz9CKTpRPz9OO3JldHVybiBwMSgic3ZnIix7cmVmOlYsLi4uVzUsd2lkdGg6Sj8/Qj8/VzUud2lkdGgsaGVpZ2h0Oko/P0I/P1c1LmhlaWdodCxzdHJva2U6JD8/TCxzdHJva2VXaWR0aDpBLGNsYXNzTmFtZTpNNSgibHVjaWRlIixDLFgpLC4uLiFZJiYhRDkoRykmJnsiYXJpYS1oaWRkZW4iOiJ0cnVlIn0sLi4uR30sWy4uLnEubWFwKChbVSxIXSk9PnAxKFUsSCkpLC4uLkFycmF5LmlzQXJyYXkoWSk/WTpbWV1dKX0pO3ZhciBBMT0oJCxKKT0+e2xldCBRPVcwKCh7Y2xhc3NOYW1lOlosLi4uWH0sWSk9PnAxKHc5LHtyZWY6WSxpY29uTm9kZTpKLGNsYXNzTmFtZTpNNShgbHVjaWRlLSR7UDkoTTMoJCkpfWAsYGx1Y2lkZS0keyR9YCxaKSwuLi5YfSkpO3JldHVybiBRLmRpc3BsYXlOYW1lPU0zKCQpLFF9O3ZhciBVJD1bWyJyZWN0Iix7eDoiMiIseToiNCIsd2lkdGg6IjIwIixoZWlnaHQ6IjE2IixyeDoiMiIsa2V5OiJpenhsYW8ifV0sWyJwYXRoIix7ZDoiTTEwIDR2NCIsa2V5OiJwcDh1ODAifV0sWyJwYXRoIix7ZDoiTTIgOGgyMCIsa2V5OiJkMTFjczcifV0sWyJwYXRoIix7ZDoiTTYgNHY0IixrZXk6IjFzdnRqdyJ9XV0sVDI9QTEoImFwcC13aW5kb3ciLFUkKTt2YXIgSCQ9W1sicGF0aCIse2Q6Ik03IDdoMTB2MTAiLGtleToiMXRpdm45In1dLFsicGF0aCIse2Q6Ik03IDE3IDE3IDciLGtleToiMXZraXphIn1dXSx3Mj1BMSgiYXJyb3ctdXAtcmlnaHQiLEgkKTt2YXIgQSQ9W1sicGF0aCIse2Q6Ik0yMCA2IDkgMTdsLTUtNSIsa2V5OiIxZ21mMmMifV1dLEUyPUExKCJjaGVjayIsQSQpO3ZhciBrJD1bWyJwYXRoIix7ZDoibTYgOSA2IDYgNi02IixrZXk6InFydW5zbCJ9XV0sSTI9QTEoImNoZXZyb24tZG93biIsayQpO3ZhciBPJD1bWyJwYXRoIix7ZDoibTkgMTggNi02LTYtNiIsa2V5OiJtdGhod3EifV1dLHkyPUExKCJjaGV2cm9uLXJpZ2h0IixPJCk7dmFyIEYkPVtbInBhdGgiLHtkOiJNMTIgNmEyIDIgMCAwIDEgMy40MTQtMS40MTRsNiA2YTIgMiAwIDAgMSAwIDIuODI4bC02IDZBMiAyIDAgMCAxIDEyIDE4eiIsa2V5OiJiMTloNXEifV0sWyJwYXRoIix7ZDoiTTIgNmEyIDIgMCAwIDEgMy40MTQtMS40MTRsNiA2YTIgMiAwIDAgMSAwIDIuODI4bC02IDZBMiAyIDAgMCAxIDIgMTh6IixrZXk6Img3aDVnZSJ9XV0sYjI9QTEoImZhc3QtZm9yd2FyZCIsRiQpO3ZhciBNJD1bWyJwYXRoIix7ZDoibTMgNyA1IDUtNSA1VjciLGtleToiY291aGk3In1dLFsicGF0aCIse2Q6Im0yMSA3LTUgNSA1IDVWNyIsa2V5OiI2b3VpYTcifV0sWyJwYXRoIix7ZDoiTTEyIDIwdjIiLGtleToiMWxoMWtnIn1dLFsicGF0aCIse2Q6Ik0xMiAxNHYyIixrZXk6IjhqY3h1ZCJ9XSxbInBhdGgiLHtkOiJNMTIgOHYyIixrZXk6IjF3b3FpdiJ9XSxbInBhdGgiLHtkOiJNMTIgMnYyIixrZXk6InR1czAzbSJ9XV0sUzI9QTEoImZsaXAtaG9yaXpvbnRhbC0yIixNJCk7dmFyIFckPVtbImNpcmNsZSIse2N4OiIxMiIsY3k6IjEyIixyOiIxMCIsa2V5OiIxbWdsYXkifV0sWyJwYXRoIix7ZDoiTTEyIDJhMTQuNSAxNC41IDAgMCAwIDAgMjAgMTQuNSAxNC41IDAgMCAwIDAtMjAiLGtleToiMTNvMXpsIn1dLFsicGF0aCIse2Q6Ik0yIDEyaDIwIixrZXk6IjlpNHB1NCJ9XV0seDI9QTEoImdsb2JlIixXJCk7dmFyIFAkPVtbInBhdGgiLHtkOiJtMjIgMTEtMS4yOTYtMS4yOTZhMi40IDIuNCAwIDAgMC0zLjQwOCAwTDExIDE2IixrZXk6IjlrenkzNSJ9XSxbInBhdGgiLHtkOiJNNCA4YTIgMiAwIDAgMC0yIDJ2MTBhMiAyIDAgMCAwIDIgMmgxMGEyIDIgMCAwIDAgMi0yIixrZXk6IjF0MGYwdCJ9XSxbImNpcmNsZSIse2N4OiIxMyIsY3k6IjciLHI6IjEiLGZpbGw6ImN1cnJlbnRDb2xvciIsa2V5OiIxb2J1czYifV0sWyJyZWN0Iix7eDoiOCIseToiMiIsd2lkdGg6IjE0IixoZWlnaHQ6IjE0IixyeDoiMiIsa2V5OiIxZ3ZoYnkifV1dLHYyPUExKCJpbWFnZXMiLFAkKTt2YXIgXyQ9W1sicmVjdCIse3dpZHRoOiIxOCIsaGVpZ2h0OiIxOCIseDoiMyIseToiMyIscng6IjIiLGtleToiYWZpdHY3In1dLFsicGF0aCIse2Q6Ik05IDN2MTgiLGtleToiZmgzaHFhIn1dXSxJMD1BMSgicGFuZWwtbGVmdCIsXyQpO3ZhciBEJD1bWyJyZWN0Iix7d2lkdGg6IjE4IixoZWlnaHQ6IjE4Iix4OiIzIix5OiIzIixyeDoiMiIsa2V5OiJhZml0djcifV0sWyJwYXRoIix7ZDoiTTE1IDN2MTgiLGtleToiMTRudnAwIn1dXSxqMj1BMSgicGFuZWwtcmlnaHQiLEQkKTt2YXIgVCQ9W1sicGF0aCIse2Q6Ik0zIDEyYTkgOSAwIDEgMCA5LTkgOS43NSA5Ljc1IDAgMCAwLTYuNzQgMi43NEwzIDgiLGtleToiMTM1N2UzIn1dLFsicGF0aCIse2Q6Ik0zIDN2NWg1IixrZXk6IjF4aHE4YSJ9XV0saDI9QTEoInJvdGF0ZS1jY3ciLFQkKTt2YXIgdyQ9W1sicGF0aCIse2Q6Im0yMSAyMS00LjM0LTQuMzQiLGtleToiMTRqN3JqIn1dLFsiY2lyY2xlIix7Y3g6IjExIixjeToiMTEiLHI6IjgiLGtleToiNGVqOTd1In1dXSxSMj1BMSgic2VhcmNoIix3JCk7dmFyIEUkPVtbInBhdGgiLHtkOiJNMTAgNUgzIixrZXk6IjFxZ2ZhdyJ9XSxbInBhdGgiLHtkOiJNMTIgMTlIMyIsa2V5OiJ5aG1uMWoifV0sWyJwYXRoIix7ZDoiTTE0IDN2NCIsa2V5OiIxc3VhMDMifV0sWyJwYXRoIix7ZDoiTTE2IDE3djQiLGtleToiMXEwcjE0In1dLFsicGF0aCIse2Q6Ik0yMSAxMmgtOSIsa2V5OiIxbzRsc3EifV0sWyJwYXRoIix7ZDoiTTIxIDE5aC01IixrZXk6IjFybHQxcCJ9XSxbInBhdGgiLHtkOiJNMjEgNWgtNyIsa2V5OiIxb3N6ejIifV0sWyJwYXRoIix7ZDoiTTggMTB2NCIsa2V5OiJ0Z3B4cWsifV0sWyJwYXRoIix7ZDoiTTggMTJIMyIsa2V5OiJhN3M0amIifV1dLHgwPUExKCJzbGlkZXJzLWhvcml6b250YWwiLEUkKTt2YXIgSSQ9W1sicGF0aCIse2Q6Ik0xMi4wMzQgMTIuNjgxYS40OTguNDk4IDAgMCAxIC42NDctLjY0N2w5IDMuNWEuNS41IDAgMCAxLS4wMzMuOTQzbC0zLjQ0NCAxLjA2OGExIDEgMCAwIDAtLjY2LjY2bC0xLjA2NyAzLjQ0M2EuNS41IDAgMCAxLS45NDMuMDMzeiIsa2V5OiJ4d256aXAifV0sWyJwYXRoIix7ZDoiTTIxIDExVjVhMiAyIDAgMCAwLTItMkg1YTIgMiAwIDAgMC0yIDJ2MTRhMiAyIDAgMCAwIDIgMmg2IixrZXk6IjE0cnN2cSJ9XV0sbTA9QTEoInNxdWFyZS1tb3VzZS1wb2ludGVyIixJJCk7dmFyIHkkPVtbInBhdGgiLHtkOiJNMTIgM3YxMiIsa2V5OiIxeDBqNXMifV0sWyJwYXRoIix7ZDoibTE3IDgtNS01LTUgNSIsa2V5OiI3cTk3cjgifV0sWyJwYXRoIix7ZDoiTTIxIDE1djRhMiAyIDAgMCAxLTIgMkg1YTIgMiAwIDAgMS0yLTJ2LTQiLGtleToiaWg3bjNoIn1dXSxnMj1BMSgidXBsb2FkIix5JCk7dmFyIGIkPVtbInBhdGgiLHtkOiJtMTYgMTMgNS4yMjMgMy40ODJhLjUuNSAwIDAgMCAuNzc3LS40MTZWNy44N2EuNS41IDAgMCAwLS43NTItLjQzMkwxNiAxMC41IixrZXk6ImZ0eW1lYyJ9XSxbInJlY3QiLHt4OiIyIix5OiI2Iix3aWR0aDoiMTQiLGhlaWdodDoiMTIiLHJ4OiIyIixrZXk6IjE1OHgwMSJ9XV0sbzA9QTEoInZpZGVvIixiJCk7dmFyIFMkPVtbInBhdGgiLHtkOiJNMTggNiA2IDE4IixrZXk6IjFibDVmOCJ9XSxbInBhdGgiLHtkOiJtNiA2IDEyIDEyIixrZXk6ImQ4Yms2diJ9XV0sRzA9QTEoIngiLFMkKTtmdW5jdGlvbiBtMih7b3BlbjokfSl7cmV0dXJuIEsoInN2ZyIse3dpZHRoOiIxMCIsaGVpZ2h0OiIxMCIsdmlld0JveDoiMCAwIDI0IDI0IixmaWxsOiJub25lIixzdHJva2U6ImN1cnJlbnRDb2xvciIsc3Ryb2tlV2lkdGg6IjIuNSIsc3Ryb2tlTGluZWNhcDoicm91bmQiLHN0cm9rZUxpbmVqb2luOiJyb3VuZCIsY2xhc3NOYW1lOiJsZW0tY2hldnJvbiB0ZXh0LXdoaXRlLzUwIixzdHlsZTp7dHJhbnNmb3JtOiQ/InJvdGF0ZSgxODBkZWcpIjoicm90YXRlKDBkZWcpIn0sY2hpbGRyZW46SygicG9seWxpbmUiLHtwb2ludHM6IjYgOSAxMiAxNSAxOCA5In0pfSl9ZnVuY3Rpb24gUDUoe2RpcjokfSl7cmV0dXJuIEsoInN2ZyIse3dpZHRoOiI5IixoZWlnaHQ6IjkiLHZpZXdCb3g6IjAgMCAyNCAyNCIsZmlsbDoiY3VycmVudENvbG9yIixjbGFzc05hbWU6Im1yLVszcHhdIixjaGlsZHJlbjokPT09InVwIj9LKCJwb2x5Z29uIix7cG9pbnRzOiIxMiw0IDIwLDE4IDQsMTgifSk6SygicG9seWdvbiIse3BvaW50czoiNCw2IDIwLDYgMTIsMjAifSl9KX1mdW5jdGlvbiBmMigpe3JldHVybiBLKCJzdmciLHt3aWR0aDoiMTEiLGhlaWdodDoiMTEiLHZpZXdCb3g6IjAgMCAyNCAyNCIsZmlsbDoiY3VycmVudENvbG9yIixjaGlsZHJlbjpLKCJwb2x5Z29uIix7cG9pbnRzOiI2LDQgMjAsMTIgNiwyMCJ9KX0pfWZ1bmN0aW9uIFczKCl7cmV0dXJuIEsoInN2ZyIse3dpZHRoOiIxMSIsaGVpZ2h0OiIxMSIsdmlld0JveDoiMCAwIDI0IDI0IixmaWxsOiJjdXJyZW50Q29sb3IiLGNoaWxkcmVuOltLKCJyZWN0Iix7eDoiNiIseToiNCIsd2lkdGg6IjQiLGhlaWdodDoiMTYifSksSygicmVjdCIse3g6IjE0Iix5OiI0Iix3aWR0aDoiNCIsaGVpZ2h0OiIxNiJ9KV19KX1mdW5jdGlvbiBwMigpe3JldHVybiBLKCJzdmciLHt3aWR0aDoiMTAiLGhlaWdodDoiMTAiLHZpZXdCb3g6IjAgMCAyNCAyNCIsZmlsbDoiY3VycmVudENvbG9yIixjaGlsZHJlbjpLKCJyZWN0Iix7eDoiNSIseToiNSIsd2lkdGg6IjE0IixoZWlnaHQ6IjE0IixyeDoiMS41In0pfSl9ZnVuY3Rpb24gUDMoKXtyZXR1cm4gSyhiMix7c2l6ZToxMixzdHJva2VXaWR0aDoyLCJhcmlhLWhpZGRlbiI6InRydWUifSl9ZnVuY3Rpb24gXzMoKXtyZXR1cm4gSygic3ZnIix7d2lkdGg6IjkiLGhlaWdodDoiMTQiLHZpZXdCb3g6IjQgMiA5IDEzIixmaWxsOiJjdXJyZW50Q29sb3IiLHhtbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsImFyaWEtaGlkZGVuIjoidHJ1ZSIsY2hpbGRyZW46SygicGF0aCIse2Q6Ik02LjAwODUyIDE0LjgwNTRDNS44OTE4MSAxNC45MzUgNS43NTgxNSAxNC45OTk4IDUuNjA3NTYgMTQuOTk5OEM1LjQ1Njk2IDE1LjAwMzMgNS4zMjMzIDE0Ljk2MTMgNS4yMDY1OSAxNC44NzM3QzUuMDkzNjQgMTQuNzg2MSA1LjAyNTg3IDE0LjY3MjMgNS4wMDMyOCAxNC41MzIyQzQuOTg0NDYgMTQuMzkyMSA1LjA0NjU4IDE0LjI0NSA1LjE4OTY1IDE0LjA5MDlMNi45NDU5OSAxMi4xNTIyTDcuMjQ1MyAxMC44NzU1TDguMTk5NzEgMTEuOTg5M0w4LjA1ODUzIDEyLjM5MzlDOC4wMjA4OCAxMi40OTU1IDcuOTg2OTkgMTIuNTcwOCA3Ljk1Njg3IDEyLjYxOThDNy45MzA1MiAxMi42Njg4IDcuODc0MDQgMTIuNzQwNiA3Ljc4NzQ1IDEyLjgzNTJMNi4wMDg1MiAxNC44MDU0Wk0xMC4zNDU3IDE0LjY0MjVMOS4xMDMyOSAxMi4zMDQ2QzkuMDc2OTQgMTIuMjYyNSA5LjA1NDM1IDEyLjIyMjMgOS4wMzU1MyAxMi4xODM3QzkuMDE2NyAxMi4xNDUyIDguOTc3MTcgMTIuMDkwOSA4LjkxNjkzIDEyLjAyMDlMNy43MTk2OCAxMC42MTgxQzcuNDkzNzkgMTAuMzU1NCA3LjMzNzU0IDEwLjEyOTUgNy4yNTA5NSA5Ljk0MDM0QzcuMTY0MzUgOS43NDc3IDcuMTM0MjQgOS40OTkwMSA3LjE2MDU5IDkuMTk0MjlMNy4yNjIyNCA3Ljk4MDY1QzcuMjY5NzcgNy45MDcxIDcuMjMyMTIgNy44NTQ1NiA3LjE0OTI5IDcuODIzMDRDNy4wNjY0NyA3Ljc5MTUxIDYuOTg1NTIgNy44MDkwMyA2LjkwNjQ2IDcuODc1NTdMNi40NzE2MSA4LjI0MzM0TDYuMzQxNzIgOS42NzIzOUM2LjMyMjg5IDkuODQ3NTIgNi4yNjQ1NCA5Ljk3ODg3IDYuMTY2NjUgMTAuMDY2NEM2LjA2ODc2IDEwLjE1NCA1LjkzODg3IDEwLjE5MjUgNS43NzY5OCAxMC4xODJDNS42MTEzMiAxMC4xNzUgNS40ODMzMSAxMC4xMTkgNS4zOTI5NSAxMC4wMTM5QzUuMzA2MzYgOS45MDg4MiA1LjI2ODcxIDkuNzczOTcgNS4yODAwMSA5LjYwOTM1TDUuMzg3MzEgOC4zMDYzOUM1LjQwMjM3IDguMTI3NzYgNS40MzgxMyA3Ljk3NTQgNS40OTQ2MSA3Ljg0OTMxQzUuNTU0ODUgNy43MjMyMSA1LjY2MDI2IDcuNTkxODcgNS44MTA4NiA3LjQ1NTI3TDYuNzE0NDUgNi42MjUxNkM3LjAwNDM1IDYuMzYyNDcgNy4yNjk3NyA2LjE2MTA3IDcuNTEwNzMgNi4wMjA5NkM3Ljc1MTY4IDUuODc3MzYgOC4wMjg0MSA1LjgwNTU2IDguMzQwOSA1LjgwNTU2QzguNzU4OCA1LjgwNTU2IDkuMDc4ODIgNS45MzM0IDkuMzAwOTUgNi4xODkwOUM5LjUyNjg1IDYuNDQ0NzggOS42MjQ3NCA2Ljc2MTc2IDkuNTk0NjIgNy4xNDAwNEw5LjQ3NjAyIDguNzMxOTVDOS40NTM0MyA5LjAxNTY2IDkuNDE5NTUgOS4yNjI1OSA5LjM3NDM3IDkuNDcyNzVDOS4zMjkxOSA5LjY4MjkgOS4yNTM4OSA5LjkyOTgzIDkuMTQ4NDcgMTAuMjEzNUw5LjA5MiAxMC4zNjA2TDkuODY1NjkgMTEuMzc5OUM5LjkyMjE3IDExLjQ1MzQgOS45ODA1MiAxMS41MzQgMTAuMDQwOCAxMS42MjE2QzEwLjEwMSAxMS43MDkxIDEwLjE1MzcgMTEuNzk2NyAxMC4xOTg5IDExLjg4NDNMMTEuNDA3NCAxNC4xNjQ0QzExLjUwNTMgMTQuMzUwMSAxMS41MjQxIDE0LjUxMTIgMTEuNDYzOSAxNC42NDc4QzExLjQwMzcgMTQuNzg0NCAxMS4zMDIgMTQuODgyNSAxMS4xNTg5IDE0Ljk0MkMxMS4wMTk2IDE1LjAwMTUgMTAuODcwOSAxNS4wMTAzIDEwLjcxMjggMTQuOTY4M0MxMC41NTg0IDE0LjkyNjIgMTAuNDM2MSAxNC44MTc3IDEwLjM0NTcgMTQuNjQyNVpNMTIuNDA3IDcuOTY0ODlDMTIuNTg0IDcuOTY0ODkgMTIuNzI3IDguMDEwNDIgMTIuODM2MiA4LjEwMTQ5QzEyLjk0NTQgOC4xODkwNSAxMyA4LjMwNjM5IDEzIDguNDUzNUMxMyA4LjYxMTExIDEyLjk0NTQgOC43MzM3IDEyLjgzNjIgOC44MjEyN0MxMi43MzA4IDguOTA4ODMgMTIuNTg3NyA4Ljk1MjYxIDEyLjQwNyA4Ljk1MjYxSDExLjEzMDdDMTAuOTUzOCA4Ljk1MjYxIDEwLjgxNDUgOC45MzY4NSAxMC43MTI4IDguOTA1MzNDMTAuNjExMiA4Ljg3MDMgMTAuNTEzMyA4LjgwNzI2IDEwLjQxOTEgOC43MTYxOUwxMC4wNTIxIDguMzc5OTRMMTAuMTQyNCA3LjA0MDIxTDExLjAzNDcgNy45NjQ4OUgxMi40MDdaTTkuMDAxNjQgNS4zMTE2OUM4Ljc3MTk4IDUuMzExNjkgOC41NjMwMyA1LjI2MDkxIDguMzc0NzggNS4xNTkzM0M4LjE4NjUzIDUuMDU0MjYgOC4wMzU5NCA0LjkxNDE1IDcuOTIyOTkgNC43MzkwM0M3LjgxMzgxIDQuNTYzOSA3Ljc1OTIxIDQuMzY5NSA3Ljc1OTIxIDQuMTU1ODVDNy43NTkyMSAzLjk0MjE5IDcuODEzODEgMy43NDc4IDcuOTIyOTkgMy41NzI2N0M4LjAzNTk0IDMuMzk3NTQgOC4xODY1MyAzLjI1OTE5IDguMzc0NzggMy4xNTc2MkM4LjU2MzAzIDMuMDUyNTQgOC43NzE5OCAzIDkuMDAxNjQgM0M5LjIzMTMgMyA5LjQ0MDI2IDMuMDUyNTQgOS42Mjg1IDMuMTU3NjJDOS44MTY3NSAzLjI1OTE5IDkuOTY1NDYgMy4zOTc1NCAxMC4wNzQ2IDMuNTcyNjdDMTAuMTg3NiAzLjc0NzggMTAuMjQ0MSAzLjk0MjE5IDEwLjI0NDEgNC4xNTU4NUMxMC4yNDQxIDQuMzY5NSAxMC4xODc2IDQuNTYzOSAxMC4wNzQ2IDQuNzM5MDNDOS45NjU0NiA0LjkxNDE1IDkuODE2NzUgNS4wNTQyNiA5LjYyODUgNS4xNTkzM0M5LjQ0MDI2IDUuMjYwOTEgOS4yMzEzIDUuMzExNjkgOS4wMDE2NCA1LjMxMTY5WiJ9KX0pfWZ1bmN0aW9uIEQzKCl7cmV0dXJuIEsoInN2ZyIse3dpZHRoOiIxMSIsaGVpZ2h0OiIxNCIsdmlld0JveDoiMjYgMSAxMiAxNCIsZmlsbDoiY3VycmVudENvbG9yIix4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJhcmlhLWhpZGRlbiI6InRydWUiLGNoaWxkcmVuOksoInBhdGgiLHtkOiJNMzMuMjQzNyA0LjU4NDU5QzMzLjAwMDggNC41ODQ1OSAzMi43ODE3IDQuNTI3MjggMzIuNTg2NiA0LjQxMjY4QzMyLjM5MTUgNC4yOTQxMiAzMi4yMzQyIDQuMTM4MDEgMzIuMTE0NyAzLjk0NDM3QzMxLjk5OTIgMy43NDY3NyAzMS45NDE0IDMuNTI5NDEgMzEuOTQxNCAzLjI5MjI5QzMxLjk0MTQgMy4wNTEyMiAzMS45OTkyIDIuODMzODcgMzIuMTE0NyAyLjY0MDIyQzMyLjIzNDIgMi40NDY1NyAzMi4zOTE1IDIuMjkyNDUgMzIuNTg2NiAyLjE3Nzg0QzMyLjc4MTcgMi4wNTkyOCAzMy4wMDA4IDIgMzMuMjQzNyAyQzMzLjQ4MjYgMiAzMy42OTk3IDIuMDU5MjggMzMuODk0OCAyLjE3Nzg0QzM0LjA5MzkgMi4yOTI0NSAzNC4yNTEyIDIuNDQ2NTcgMzQuMzY2NyAyLjY0MDIyQzM0LjQ4NjIgMi44MzM4NyAzNC41NDU5IDMuMDUxMjIgMzQuNTQ1OSAzLjI5MjI5QzM0LjU0NTkgMy41Mjk0MSAzNC40ODYyIDMuNzQ2NzcgMzQuMzY2NyAzLjk0NDM3QzM0LjI1MTIgNC4xMzgwMSAzNC4wOTM5IDQuMjk0MTIgMzMuODk0OCA0LjQxMjY4QzMzLjY5OTcgNC41MjcyOCAzMy40ODI2IDQuNTg0NTkgMzMuMjQzNyA0LjU4NDU5Wk0zMS4yMDA3IDkuNzQxOTFDMzEuMDczMyA5LjY3MDc3IDMwLjk0MTkgOS41OTU2OCAzMC44MDY1IDkuNTE2NjRDMzAuNjc1IDkuNDM3NiAzMC41NTk2IDkuMzQyNzYgMzAuNDYgOS4yMzIxQzMwLjM2MDQgOS4xMTc0OSAzMC4yOTI3IDguOTc3MiAzMC4yNTY5IDguODExMjJDMzAuMjI1IDguNjQxMjggMzAuMjQ0OSA4LjQyOTg1IDMwLjMxNjYgOC4xNzY5M0wzMC44MDY1IDYuNDgxNTNDMzAuODM4MyA2LjM2NjkyIDMwLjgxODQgNi4yNzk5OCAzMC43NDY3IDYuMjIwN0MzMC42NzkgNi4xNTc0NyAzMC41OTc0IDYuMTI5ODEgMzAuNTAxOCA2LjEzNzcxTDI5LjY1OTUgNi4xOTY5OUwyOS40MDI3IDcuOTIyMDJDMjkuMzc4OCA4LjEwNzc3IDI5LjMxNTEgOC4yNDYwOSAyOS4yMTE1IDguMzM2OThDMjkuMTA4IDguNDI3ODggMjguOTcyNiA4LjQ2NTQyIDI4LjgwNTMgOC40NDk2MUMyOC42NDIgOC40MzM4IDI4LjUxODYgOC4zNjY2MiAyOC40MzQ5IDguMjQ4MDZDMjguMzUxMyA4LjEyOTUgMjguMzIxNCA3Ljk3NzM1IDI4LjM0NTMgNy43OTE2MUwyOC42MjYxIDUuNjgxMjZDMjguNjUgNS41MTEzMiAyOC43MTU3IDUuMzc0OTggMjguODIzMiA1LjI3MjIzQzI4LjkzMDggNS4xNjk0OCAyOS4wNjgxIDUuMTEyMTcgMjkuMjM1NCA1LjEwMDMyTDMxLjMzMjEgNC45NTIxMkMzMS44ODE3IDQuOTEyNiAzMi4zMzU3IDQuOTY5OSAzMi42OTQxIDUuMTI0MDNDMzMuMDUyNSA1LjI3ODE2IDMzLjM2NzEgNS41Mzg5OSAzMy42Mzc5IDUuOTA2NTJMMzQuNjcxNCA3LjMyMzNMMzYuMTcwOCA2LjY2NTNDMzYuMzM4IDYuNTkwMjEgMzYuNDg5MyA2LjU3NDQgMzYuNjI0OCA2LjYxNzg3QzM2Ljc2MDIgNi42NTczOSAzNi44NjU3IDYuNzUyMjQgMzYuOTQxNCA2LjkwMjQyQzM3LjAxMyA3LjA1MjU5IDM3LjAxOSA3LjE5NDg2IDM2Ljk1OTMgNy4zMjkyM0MzNi45MDM1IDcuNDYzNiAzNi43OTIgNy41NjgzMiAzNi42MjQ4IDcuNjQzNDFMMzQuNzMxMSA4LjQ3OTI1QzM0LjYwMzcgOC41Mzg1MyAzNC40NzQzIDguNTUwMzkgMzQuMzQyOCA4LjUxNDgyQzM0LjIxNTQgOC40NzUzIDM0LjExMzggOC40MDAyMSAzNC4wMzgyIDguMjg5NTZMMzMuMzgxMSA3LjMzNTE2QzMzLjMxMzQgNy4yNDAzMSAzMy4yMjk4IDcuMTk4ODEgMzMuMTMwMiA3LjIxMDY3QzMzLjAzMDYgNy4yMjI1MyAzMi45NjQ5IDcuMjgzNzggMzIuOTMzMSA3LjM5NDQ0TDMyLjQ5MSA4LjkyOTc4TDM0LjczMTEgMTAuMzg4MUMzNC44NDI2IDEwLjQ1OTIgMzQuOTIyMyAxMC41NTYgMzQuOTcwMSAxMC42Nzg1QzM1LjAxNzkgMTAuODAxIDM1LjAyOTggMTAuOTI1NSAzNS4wMDU5IDExLjA1MkMzNC45ODYgMTEuMTc0NSAzNC45MjgyIDExLjI3NTMgMzQuODMyNyAxMS4zNTQzTDMyLjc3MTggMTMuMDk3MUMzMi42MDg1IDEzLjIzNTQgMzIuNDQ1MiAxMy4yOTg3IDMyLjI4MTkgMTMuMjg2OEMzMi4xMjI2IDEzLjI3NSAzMS45OTMyIDEzLjIxMzcgMzEuODkzNyAxMy4xMDMxQzMxLjc5ODEgMTIuOTk2NCAzMS43NTQzIDEyLjg2NTkgMzEuNzYyMiAxMi43MTE4QzMxLjc3MDIgMTIuNTUzNyAzMS44NTM4IDEyLjQwNzUgMzIuMDEzMSAxMi4yNzMxTDMzLjQ4ODYgMTEuMDE2NEwzMS4yMDA3IDkuNzQxOTFaTTI3LjIwNDQgMTQuODYzN0MyNy4wODQ5IDE0Ljc1NyAyNy4wMTcyIDE0LjYxODYgMjcuMDAxMyAxNC40NDg3QzI2Ljk4OTMgMTQuMjc4OCAyNy4wNjEgMTQuMTE2NyAyNy4yMTYzIDEzLjk2MjZMMjkuMjIzNSAxMS45NzY3TDI5LjkzNDMgOS40ODEwOEMzMC4wNDE4IDkuNjE1NDQgMzAuMTc1MyA5Ljc0NTg2IDMwLjMzNDUgOS44NzIzMkMzMC40OTc4IDkuOTk0ODMgMzAuNjkzIDEwLjExNzMgMzAuOTIgMTAuMjM5OUwzMS4xMTcxIDEwLjM0NjZMMzAuMzA0NyAxMi40MzMyQzMwLjI1MjkgMTIuNTU1NyAzMC4yMDkxIDEyLjY0MDcgMzAuMTczMyAxMi42ODgxQzMwLjE0MTQgMTIuNzM1NSAzMC4wODU2IDEyLjc5ODggMzAuMDA2IDEyLjg3NzhMMjguMDcwNiAxNC43ODA3QzI3LjkxOTIgMTQuOTI2OSAyNy43NjM5IDE1IDI3LjYwNDYgMTVDMjcuNDQ5MyAxNSAyNy4zMTU5IDE0Ljk1NDYgMjcuMjA0NCAxNC44NjM3WiJ9KX0pfWZ1bmN0aW9uIFQzKCl7cmV0dXJuIEsoInN2ZyIse3dpZHRoOiIxNCIsaGVpZ2h0OiIxNCIsdmlld0JveDoiNDkgMyAxNiAxMiIsZmlsbDoiY3VycmVudENvbG9yIix4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJhcmlhLWhpZGRlbiI6InRydWUiLGNoaWxkcmVuOksoInBhdGgiLHtkOiJNNTcuMDAyOCAxMS45NDlDNTYuODQ4IDExLjk0OSA1Ni43MTcyIDExLjg5ODcgNTYuNjEwMyAxMS43OThDNTYuNTAzNSAxMS42OTM5IDU2LjQ1MDEgMTEuNTcwNyA1Ni40NTAxIDExLjQyODRWOS4wMjg2M0w1NC40MjE2IDcuMTA3NzZDNTQuMjIyNyA2LjkyMDM1IDU0LjA5NTUgNi42OTgyNSA1NC4wNDAzIDYuNDQxNDRDNTMuOTg1IDYuMTgxMTYgNTQuMDEwOCA1LjkyNzgyIDU0LjExNzYgNS42ODE0MkM1NC4yMjgyIDUuNDM4NDkgNTQuMzk3NyA1LjI0NDE0IDU0LjYyNjEgNS4wOTgzOUM1NC44NTgzIDQuOTQ5MTYgNTUuMTE2MiA0Ljg3NDU0IDU1LjM5OTkgNC44NzQ1NEg1OC4xMTM3QzU4LjQyMzIgNC44NzQ1NCA1OC42ODQ4IDQuOTc2OTIgNTguODk4NSA1LjE4MTY4QzU5LjExNTkgNS4zODI5NiA1OS4yMjQ2IDUuNjI5MzYgNTkuMjI0NiA1LjkyMDg3VjcuNzYzNjZINjAuODk5M0M2MS4wNTA0IDcuNzYzNjYgNjEuMTc5NCA3LjgxMzk5IDYxLjI4NjIgNy45MTQ2M0M2MS4zOTMxIDguMDE1MjcgNjEuNDQ2NSA4LjEzODQ3IDYxLjQ0NjUgOC4yODQyM0M2MS40NDY1IDguNDI2NTEgNjEuMzkzMSA4LjU0Nzk4IDYxLjI4NjIgOC42NDg2MkM2MS4xNzk0IDguNzQ5MjYgNjEuMDUwNCA4Ljc5OTU4IDYwLjg5OTMgOC43OTk1OEg1OC42NzE5QzU4LjUyMDkgOC43OTk1OCA1OC4zOTAxIDguNzQ5MjYgNTguMjc5NSA4LjY0ODYyQzU4LjE3MjcgOC41NDc5OCA1OC4xMTkyIDguNDI2NTEgNTguMTE5MiA4LjI4NDIzVjYuOTg4MDNDNTguMTE5MiA2LjkxODYyIDU4LjA5OSA2Ljg1NDQyIDU4LjA1ODQgNi43OTU0MkM1OC4wMTc5IDYuNzMyOTUgNTcuOTQ0MiA2LjcwMTcyIDU3LjgzNzMgNi43MDE3Mkg1Ni4wNjMyQzU1Ljk5MzIgNi43MDE3MiA1NS45NDUzIDYuNzI5NDggNTUuOTE5NSA2Ljc4NTAxQzU1Ljg5NzQgNi44MzcwNiA1NS45MDg0IDYuODg3MzkgNTUuOTUyNiA2LjkzNTk3TDU3LjQwMDcgOC40NTYwMUM1Ny41MDM5IDguNTYzNiA1Ny41NTU1IDguNjgxNTkgNTcuNTU1NSA4LjgwOTk5VjExLjQyODRDNTcuNTU1NSAxMS41NzA3IDU3LjUwMDIgMTEuNjkzOSA1Ny4zODk3IDExLjc5OEM1Ny4yODI4IDExLjg5ODcgNTcuMTUzOCAxMS45NDkgNTcuMDAyOCAxMS45NDlaTTUzLjAwMTIgMTRDNTIuNTg0OCAxNCA1Mi4xOTQyIDEzLjkyNzEgNTEuODI5NSAxMy43ODE0QzUxLjQ2ODQgMTMuNjM1NiA1MS4xNDk2IDEzLjQzMjYgNTAuODczMyAxMy4xNzIzQzUwLjYwMDYgMTIuOTEyIDUwLjM4NjkgMTIuNjExOCA1MC4yMzIxIDEyLjI3MTdDNTAuMDc3NCAxMS45MjgyIDUwIDExLjU2MDMgNTAgMTEuMTY4MUM1MCAxMC43NzYgNTAuMDc3NCAxMC40MDk5IDUwLjIzMjEgMTAuMDY5OEM1MC4zODY5IDkuNzI2MTggNTAuNjAwNiA5LjQyNDI2IDUwLjg3MzMgOS4xNjM5OEM1MS4xNDk2IDguOTAzNyA1MS40Njg0IDguNzAwNjggNTEuODI5NSA4LjU1NDkyQzUyLjE5NDIgOC40MDkxNiA1Mi41ODQ4IDguMzM2MjggNTMuMDAxMiA4LjMzNjI4QzUzLjQyMTIgOC4zMzYyOCA1My44MTE4IDguNDA5MTYgNTQuMTcyOSA4LjU1NDkyQzU0LjUzNzcgOC43MDA2OCA1NC44NTY0IDguOTAzNyA1NS4xMjkxIDkuMTYzOThDNTUuNDA1NCA5LjQyNDI2IDU1LjYyMSA5LjcyNjE4IDU1Ljc3NTggMTAuMDY5OEM1NS45MzA1IDEwLjQwOTkgNTYuMDA3OSAxMC43NzYgNTYuMDA3OSAxMS4xNjgxQzU2LjAwNzkgMTEuNTYwMyA1NS45MzA1IDExLjkyODIgNTUuNzc1OCAxMi4yNzE3QzU1LjYyMSAxMi42MTE4IDU1LjQwNTQgMTIuOTEyIDU1LjEyOTEgMTMuMTcyM0M1NC44NTY0IDEzLjQzMjYgNTQuNTM3NyAxMy42MzU2IDU0LjE3MjkgMTMuNzgxNEM1My44MTE4IDEzLjkyNzEgNTMuNDIxMiAxNCA1My4wMDEyIDE0Wk01My4wMDEyIDEzLjI2NkM1My40MTAyIDEzLjI2NiA1My43ODIzIDEzLjE3MDYgNTQuMTE3NiAxMi45Nzk3QzU0LjQ1NjYgMTIuNzkyMyA1NC43MjU2IDEyLjU0MDcgNTQuOTI0NiAxMi4yMjQ5QzU1LjEyNzMgMTEuOTA1NiA1NS4yMjg2IDExLjU1MzQgNTUuMjI4NiAxMS4xNjgxQzU1LjIyODYgMTAuNzgyOSA1NS4xMjczIDEwLjQzMjQgNTQuOTI0NiAxMC4xMTY2QzU0LjcyNTYgOS43OTczMyA1NC40NTY2IDkuNTQzOTkgNTQuMTE3NiA5LjM1NjU5QzUzLjc4MjMgOS4xNjU3MSA1My40MTAyIDkuMDcwMjggNTMuMDAxMiA5LjA3MDI4QzUyLjU5NTkgOS4wNzAyOCA1Mi4yMjM3IDkuMTY1NzEgNTEuODg0NyA5LjM1NjU5QzUxLjU0OTQgOS41NDM5OSA1MS4yODA0IDkuNzk3MzMgNTEuMDc3OCAxMC4xMTY2QzUwLjg3ODggMTAuNDMyNCA1MC43NzkzIDEwLjc4MjkgNTAuNzc5MyAxMS4xNjgxQzUwLjc3OTMgMTEuNTUzNCA1MC44Nzg4IDExLjkwNTYgNTEuMDc3OCAxMi4yMjQ5QzUxLjI4MDQgMTIuNTQwNyA1MS41NDk0IDEyLjc5MjMgNTEuODg0NyAxMi45Nzk3QzUyLjIyMzcgMTMuMTcwNiA1Mi41OTU5IDEzLjI2NiA1My4wMDEyIDEzLjI2NlpNNjIuNDgwMSA5LjYxMTY2QzYyLjM2MjIgOS41MTQ0OSA2Mi4zMDE0IDkuNDE1NTggNjIuMjk3NyA5LjMxNDk0QzYyLjI5NzcgOS4yMTA4MyA2Mi4zMzA4IDkuMTI0MDcgNjIuMzk3MiA5LjA1NDY2QzYyLjQ2NzIgOC45ODUyNSA2Mi41NTM4IDguOTQ1MzQgNjIuNjU2OSA4LjkzNDkzQzYyLjc2MzggOC45MjEwNSA2Mi44Njg4IDguOTU1NzUgNjIuOTcyIDkuMDM5MDRDNjMuMjg4OSA5LjMwMjc5IDYzLjUzOTQgOS42MTY4NyA2My43MjM2IDkuOTgxMjZDNjMuOTA3OSAxMC4zNDU3IDY0IDEwLjc0MTMgNjQgMTEuMTY4MUM2NCAxMS41NjAzIDYzLjkyMjYgMTEuOTI4MiA2My43Njc5IDEyLjI3MTdDNjMuNjEzMSAxMi42MTE4IDYzLjM5NzYgMTIuOTEyIDYzLjEyMTIgMTMuMTcyM0M2Mi44NDg1IDEzLjQzMjYgNjIuNTI5OCAxMy42MzU2IDYyLjE2NSAxMy43ODE0QzYxLjgwMzkgMTMuOTI3MSA2MS40MTUyIDE0IDYwLjk5ODggMTRDNjAuNTgyNCAxNCA2MC4xOTE5IDEzLjkyNzEgNTkuODI3MSAxMy43ODE0QzU5LjQ2MjMgMTMuNjM1NiA1OS4xNDE3IDEzLjQzMjYgNTguODY1NCAxMy4xNzIzQzU4LjU5MjcgMTIuOTEyIDU4LjM3OSAxMi42MTE4IDU4LjIyNDIgMTIuMjcxN0M1OC4wNjk1IDExLjkyODIgNTcuOTkyMSAxMS41NjAzIDU3Ljk5MjEgMTEuMTY4MUM1Ny45OTIxIDEwLjk2MzQgNTguMDE0MiAxMC43NjU2IDU4LjA1ODQgMTAuNTc0N0M1OC4xMDYzIDEwLjM4MDQgNTguMTcyNyAxMC4xOTMgNTguMjU3NCAxMC4wMTI1QzU4LjMwOSA5LjkwMTQ0IDU4LjM4MDggOS44MzAzIDU4LjQ3MyA5Ljc5OTA2QzU4LjU2ODggOS43NjQzNiA1OC42NjI3IDkuNzY0MzYgNTguNzU0OCA5Ljc5OTA2QzU4Ljg1MDYgOS44MzAzIDU4LjkyMjUgOS44OTI3NiA1OC45NzA0IDkuOTg2NDdDNTkuMDE4MyAxMC4wODAyIDU5LjAxMDkgMTAuMTk4MiA1OC45NDgzIDEwLjM0MDRDNTguODMwNCAxMC42MDA3IDU4Ljc3MTQgMTAuODc2NiA1OC43NzE0IDExLjE2ODFDNTguNzcxNCAxMS41NTM0IDU4Ljg3MDkgMTEuOTA1NiA1OS4wNjk5IDEyLjIyNDlDNTkuMjcyNSAxMi41NDA3IDU5LjU0MTUgMTIuNzkyMyA1OS44NzY4IDEyLjk3OTdDNjAuMjE1OCAxMy4xNzA2IDYwLjU4OTggMTMuMjY2IDYwLjk5ODggMTMuMjY2QzYxLjQwNzggMTMuMjY2IDYxLjc4IDEzLjE3MDYgNjIuMTE1MyAxMi45Nzk3QzYyLjQ1MDYgMTIuNzkyMyA2Mi43MTc3IDEyLjU0MDcgNjIuOTE2NyAxMi4yMjQ5QzYzLjExOTQgMTEuOTA1NiA2My4yMjA3IDExLjU1MzQgNjMuMjIwNyAxMS4xNjgxQzYzLjIyMDcgMTAuODU5MyA2My4xNTI1IDEwLjU3MTIgNjMuMDE2MiAxMC4zMDRDNjIuODgzNSAxMC4wMzMzIDYyLjcwNDggOS44MDI1MyA2Mi40ODAxIDkuNjExNjZaTTYwLjk5ODggNi4yNzQ4NkM2MC43NzQgNi4yNzQ4NiA2MC41Njk1IDYuMjI0NTQgNjAuMzg1MyA2LjEyMzg5QzYwLjIwMTEgNi4wMTk3OCA2MC4wNTM3IDUuODgyNyA1OS45NDMyIDUuNzEyNjVDNTkuODM2MyA1LjUzOTEzIDU5Ljc4MjkgNS4zNDY1MiA1OS43ODI5IDUuMTM0ODNDNTkuNzgyOSA0LjkyNjYgNTkuODM2MyA0LjczNzQ2IDU5Ljk0MzIgNC41Njc0MUM2MC4wNTM3IDQuMzkzODkgNjAuMjAxMSA0LjI1NjgxIDYwLjM4NTMgNC4xNTYxN0M2MC41Njk1IDQuMDUyMDYgNjAuNzc0IDQgNjAuOTk4OCA0QzYxLjIxOTkgNCA2MS40MjA3IDQuMDUyMDYgNjEuNjAxMyA0LjE1NjE3QzYxLjc4MTggNC4yNTY4MSA2MS45MjU1IDQuMzkzODkgNjIuMDMyNCA0LjU2NzQxQzYyLjE0MjkgNC43Mzc0NiA2Mi4xOTgyIDQuOTI2NiA2Mi4xOTgyIDUuMTM0ODNDNjIuMTk4MiA1LjM0NjUyIDYyLjE0MjkgNS41MzkxMyA2Mi4wMzI0IDUuNzEyNjVDNjEuOTI1NSA1Ljg4MjcgNjEuNzgxOCA2LjAxOTc4IDYxLjYwMTMgNi4xMjM4OUM2MS40MjA3IDYuMjI0NTQgNjEuMjE5OSA2LjI3NDg2IDYwLjk5ODggNi4yNzQ4NloifSl9KX1mdW5jdGlvbiB3Mygpe3JldHVybiBLKCJzdmciLHt3aWR0aDoiMTYiLGhlaWdodDoiMTQiLHZpZXdCb3g6IjcwIDUgMTggOSIsZmlsbDoiY3VycmVudENvbG9yIix4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJhcmlhLWhpZGRlbiI6InRydWUiLGNoaWxkcmVuOksoInBhdGgiLHtkOiJNODUuNTcyIDEyLjEwMzhDODYuMDYgMTIuMTAzOCA4Ni40MjA3IDExLjk4OTIgODYuNjU0MiAxMS43NjAxQzg2Ljg4NDcgMTEuNTI4MSA4NyAxMS4xNjQxIDg3IDEwLjY2ODFWMTAuMTExMkM4NyA5Ljc2OTAxIDg2LjkyMDcgOS40NjMwMiA4Ni43NjIgOS4xOTMyOUM4Ni42MDMzIDguOTIwNjUgODYuMzc1OCA4LjY5NzMzIDg2LjA3OTQgOC41MjMzMUM4NS43ODAxIDguMzQ5MjkgODUuNDIyMyA4LjIzNzYyIDg1LjAwNjIgOC4xODgzMkw4My4wMTY4IDcuOTUzMzlMODEuMTk4MSA2Ljg0ODM1QzgwLjkyMjcgNi42ODAxMyA4MC42NjA4IDYuNTQyMzcgODAuNDEyMyA2LjQzNTA1QzgwLjE2MDggNi4zMjQ4NCA3OS44OTc0IDYuMjM3ODMgNzkuNjIxOSA2LjE3NDAyQzc5LjM0NjUgNi4xMTAyMSA3OS4wMzgyIDYuMDY1MjYgNzguNjk2OSA2LjAzOTE1Qzc4LjM1MjYgNi4wMTMwNSA3Ny45NTE0IDYgNzcuNDkzNCA2SDc2LjgxMDhDNzYuMzg4NyA2IDc1Ljk5NSA2LjA0OTMxIDc1LjYyOTggNi4xNDc5MkM3NS4yNjE2IDYuMjQzNjMgNzQuOTE4OCA2LjM3MTI1IDc0LjYwMTUgNi41MzA3NkM3NC4yODExIDYuNjkwMjggNzMuOTg2MiA2Ljg2NTc2IDczLjcxNjggNy4wNTcxOEM3My40NDQ0IDcuMjQ4NiA3My4xOTU5IDcuNDM3MTIgNzIuOTcxNCA3LjYyMjc1TDcyLjI1NzQgNy44NTMzM0M3MS44MzIzIDcuOTg2NzQgNzEuNTE2NCA4LjE4Mzk3IDcxLjMwOTkgOC40NDVDNzEuMTAzMyA4LjcwMzEzIDcxIDkuMDMzNzcgNzEgOS40MzY5MlYxMC42NDJDNzEgMTEuMTQ2NyA3MS4xMTUzIDExLjUxNjUgNzEuMzQ1OCAxMS43NTE0QzcxLjU3NjMgMTEuOTg2MyA3MS45MzcgMTIuMTAzOCA3Mi40MjggMTIuMTAzOEg3Mi43MTU0QzcyLjcwMDQgMTIuMDM3MSA3Mi42ODg1IDExLjk3MDQgNzIuNjc5NSAxMS45MDM3QzcyLjY3MDUgMTEuODM0MSA3Mi42NjYgMTEuNzY0NSA3Mi42NjYgMTEuNjk0OEM3Mi42NjYgMTEuMzU1NSA3Mi43NDk4IDExLjA0OTUgNzIuOTE3NSAxMC43NzY5QzczLjA4NTEgMTAuNTA0MiA3My4zMTEyIDEwLjI4ODIgNzMuNTk1NiAxMC4xMjg3QzczLjg3NyA5Ljk2NjIzIDc0LjE5MjggOS44ODUwMiA3NC41NDMxIDkuODg1MDJDNzQuODkwNCA5Ljg4NTAyIDc1LjIwNjIgOS45NjYyMyA3NS40OTA2IDEwLjEyODdDNzUuNzcyIDEwLjI4ODIgNzUuOTk2NSAxMC41MDQyIDc2LjE2NDIgMTAuNzc2OUM3Ni4zMzE4IDExLjA0OTUgNzYuNDE1NyAxMS4zNTU1IDc2LjQxNTcgMTEuNjk0OEM3Ni40MTU3IDExLjc2NDUgNzYuNDExMiAxMS44MzQxIDc2LjQwMjIgMTEuOTAzN0M3Ni4zOTMyIDExLjk3MDQgNzYuMzgyNyAxMi4wMzcxIDc2LjM3MDggMTIuMTAzOEg4MS42MzgyQzgxLjYyMDMgMTIuMDM3MSA4MS42MDgzIDExLjk3MDQgODEuNjAyMyAxMS45MDM3QzgxLjU5MzMgMTEuODM0MSA4MS41ODg4IDExLjc2NDUgODEuNTg4OCAxMS42OTQ4QzgxLjU4ODggMTEuMzU1NSA4MS42NzI3IDExLjA0OTUgODEuODQwMyAxMC43NzY5QzgyLjAwNSAxMC41MDQyIDgyLjIyOTUgMTAuMjg4MiA4Mi41MTM5IDEwLjEyODdDODIuNzk1MyA5Ljk2NjIzIDgzLjExMTEgOS44ODUwMiA4My40NjE0IDkuODg1MDJDODMuODExNyA5Ljg4NTAyIDg0LjEyOSA5Ljk2NjIzIDg0LjQxMzQgMTAuMTI4N0M4NC42OTQ4IDEwLjI4ODIgODQuOTE5NCAxMC41MDQyIDg1LjA4NyAxMC43NzY5Qzg1LjI1MTcgMTEuMDQ5NSA4NS4zMzQgMTEuMzU1NSA4NS4zMzQgMTEuNjk0OEM4NS4zMzQgMTEuNzY0NSA4NS4zMzEgMTEuODM0MSA4NS4zMjUgMTEuOTAzN0M4NS4zMTYgMTEuOTcwNCA4NS4zMDQxIDEyLjAzNzEgODUuMjg5MSAxMi4xMDM4SDg1LjU3MlpNODMuNDYxNCAxM0M4My43MTI5IDEzIDgzLjk0MDQgMTIuOTQyIDg0LjE0NCAxMi44MjZDODQuMzQ3NiAxMi43MSA4NC41MDkyIDEyLjU1MzMgODQuNjI5IDEyLjM1NjFDODQuNzQ4NyAxMi4xNTg5IDg0LjgwODYgMTEuOTM4NSA4NC44MDg2IDExLjY5NDhDODQuODA4NiAxMS40NTEyIDg0Ljc0ODcgMTEuMjMwOCA4NC42MjkgMTEuMDMzNkM4NC41MDkyIDEwLjgzNjMgODQuMzQ3NiAxMC42Nzk3IDg0LjE0NCAxMC41NjM3QzgzLjk0MDQgMTAuNDQ3NyA4My43MTI5IDEwLjM4OTcgODMuNDYxNCAxMC4zODk3QzgzLjIwNjkgMTAuMzg5NyA4Mi45Nzc5IDEwLjQ0NzcgODIuNzc0MyAxMC41NjM3QzgyLjU3MDggMTAuNjc5NyA4Mi40MDkxIDEwLjgzNjMgODIuMjg5NCAxMS4wMzM2QzgyLjE2OTYgMTEuMjMwOCA4Mi4xMDk3IDExLjQ1MTIgODIuMTA5NyAxMS42OTQ4QzgyLjEwOTcgMTEuOTM4NSA4Mi4xNjk2IDEyLjE1ODkgODIuMjg5NCAxMi4zNTYxQzgyLjQwOTEgMTIuNTUzMyA4Mi41NzA4IDEyLjcxIDgyLjc3NDMgMTIuODI2QzgyLjk3NzkgMTIuOTQyIDgzLjIwNjkgMTMgODMuNDYxNCAxM1pNNzQuNTQzMSAxM0M3NC43OTQ2IDEzIDc1LjAyMjEgMTIuOTQyIDc1LjIyNTcgMTIuODI2Qzc1LjQyOTIgMTIuNzEgNzUuNTkwOSAxMi41NTMzIDc1LjcxMDYgMTIuMzU2MUM3NS44MzA0IDEyLjE1ODkgNzUuODkwMyAxMS45Mzg1IDc1Ljg5MDMgMTEuNjk0OEM3NS44OTAzIDExLjQ1MTIgNzUuODMwNCAxMS4yMzA4IDc1LjcxMDYgMTEuMDMzNkM3NS41OTA5IDEwLjgzNjMgNzUuNDI5MiAxMC42Nzk3IDc1LjIyNTcgMTAuNTYzN0M3NS4wMjIxIDEwLjQ0NzcgNzQuNzk0NiAxMC4zODk3IDc0LjU0MzEgMTAuMzg5N0M3NC4yODg2IDEwLjM4OTcgNzQuMDU5NiAxMC40NDc3IDczLjg1NiAxMC41NjM3QzczLjY1MjQgMTAuNjc5NyA3My40OTA4IDEwLjgzNjMgNzMuMzcxIDExLjAzMzZDNzMuMjUxMyAxMS4yMzA4IDczLjE5MTQgMTEuNDUxMiA3My4xOTE0IDExLjY5NDhDNzMuMTkxNCAxMS45Mzg1IDczLjI1MTMgMTIuMTU4OSA3My4zNzEgMTIuMzU2MUM3My40OTA4IDEyLjU1MzMgNzMuNjUyNCAxMi43MSA3My44NTYgMTIuODI2Qzc0LjA1OTYgMTIuOTQyIDc0LjI4ODYgMTMgNzQuNTQzMSAxM1oifSl9KX1mdW5jdGlvbiByMCh7c2l6ZTokPTE4LHN0cm9rZVdpZHRoOko9Mn0pe3JldHVybiBLKGgyLHtzaXplOiQsc3Ryb2tlV2lkdGg6Sn0pfXZhciBFOT0iQWNjZXNzaWJpbGl0eSB1bmF2YWlsYWJsZSBvbiB0aGlzIHNpbXVsYXRvci4iO2Z1bmN0aW9uIF81KCQpe3JldHVybiAkPy5lcnJvcnM/LmluY2x1ZGVzKEU5KT8/ITF9ZnVuY3Rpb24gRDUoJCxKKXtpZigkPT09SilyZXR1cm4hMDtpZigkLmlkIT09Si5pZHx8JC5wYXRoIT09Si5wYXRofHwkLmxhYmVsIT09Si5sYWJlbHx8JC52YWx1ZSE9PUoudmFsdWV8fCQucm9sZSE9PUoucm9sZXx8JC50eXBlIT09Si50eXBlfHwkLmVuYWJsZWQhPT1KLmVuYWJsZWQpcmV0dXJuITE7bGV0IFE9JC5mcmFtZSxaPUouZnJhbWU7cmV0dXJuIFE9PT1afHxRLng9PT1aLngmJlEueT09PVoueSYmUS53aWR0aD09PVoud2lkdGgmJlEuaGVpZ2h0PT09Wi5oZWlnaHR9ZnVuY3Rpb24gVDUoJCxKKXtsZXQgUT0kLmxhYmVsfHwkLnJvbGV8fGBlbGVtZW50ICR7SisxfWAsWj0kLnJvbGV8fCQudHlwZTtyZXR1cm57aWQ6JC5pZCxwYXRoOiQucGF0aCxsYWJlbDpRLHZhbHVlOiQudmFsdWUscm9sZTpaLHR5cGU6JC50eXBlLGVuYWJsZWQ6JC5lbmFibGVkLGZyYW1lOiQuZnJhbWV9fWZ1bmN0aW9uIEk5KCQsSil7bGV0IFE9TWF0aC5tYXgoMCwkLngpLFo9TWF0aC5tYXgoMCwkLnkpLFg9TWF0aC5taW4oSi53aWR0aCwkLngrJC53aWR0aCksWT1NYXRoLm1pbihKLmhlaWdodCwkLnkrJC5oZWlnaHQpLHE9TWF0aC5tYXgoMCxYLVEpLEc9TWF0aC5tYXgoMCxZLVopO3JldHVybiBxPjAmJkc+MD97eDpRLHk6Wix3aWR0aDpxLGhlaWdodDpHfTpudWxsfWZ1bmN0aW9uIGkwKCQpe3JldHVybiAkLmlkfWZ1bmN0aW9uIEUzKCQpe3JldHVybmAkeyQueH0sJHskLnl9ICR7JC53aWR0aH14JHskLmhlaWdodH1gfWZ1bmN0aW9uIHk5KCQpe3JldHVybltgQVggbGFiZWw6ICR7JC5sYWJlbHx8IlVubGFiZWxlZCJ9YCwkLnJvbGU/YHJvbGU6ICR7JC5yb2xlfWA6IiIsJC50eXBlP2B0eXBlOiAkeyQudHlwZX1gOiIiLCQudmFsdWU/YHZhbHVlOiAkeyQudmFsdWV9YDoiIiwkLmlkP2BpZDogJHskLmlkfWA6IiIsYHBhdGg6ICR7JC5wYXRofWAsYGZyYW1lOiAke0UzKCQuZnJhbWUpfWBdLmZpbHRlcihCb29sZWFuKS5qb2luKCI7ICIpfWZ1bmN0aW9uIHUyKCQpe3JldHVybiAkJiZ0eXBlb2YgJC5kZXZpY2U9PT0ic3RyaW5nIiYmdHlwZW9mICQudXJsPT09InN0cmluZyI/JDpudWxsfWZ1bmN0aW9uIGI5KCQpe2xldCBKPW5ldyBVUkwoJC5zdHJlYW1VcmwpO3JldHVybiBKLnBhdGhuYW1lPUoucGF0aG5hbWUucmVwbGFjZSgvXC9zdHJlYW1cLlteL10rJC8sIi9zdHJlYW0ubWpwZWciKSxKLnNlYXJjaD0iIixKLmhhc2g9IiIsSi50b1N0cmluZygpfWZ1bmN0aW9uIEkzKCQpe2xldCBKPW5ldyBVUkwoJC5zdHJlYW1VcmwpO3JldHVybiBKLnBhdGhuYW1lPUoucGF0aG5hbWUucmVwbGFjZSgvXC9zdHJlYW1cLlteL10rJC8sIi93ZWJydGMvb2ZmZXIiKSxKLnNlYXJjaD0iIixKLmhhc2g9IiIsSi50b1N0cmluZygpfWZ1bmN0aW9uIFM5KCQpe2xldCBKPW5ldyBVUkwoSTMoJCkpO3JldHVybiBKLnBhdGhuYW1lPUoucGF0aG5hbWUucmVwbGFjZSgvXC9vZmZlciQvLCIvY2xvc2UiKSxKLnRvU3RyaW5nKCl9ZnVuY3Rpb24gYzEoJCl7bGV0IFE9d2luZG93Ll9fU0lNX1BSRVZJRVdfXz8uYmFzZVBhdGg/Pyh3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUucmVwbGFjZSgvXC8rJC8sIiIpfHwiLyIpO3JldHVybiBRPT09Ii8iP2AvJHskfWA6YCR7UX0vJHskfWB9dmFyIHgkPTUwMDAsdiQ9MjAwMCxsMj1udWxsLHkzPW51bGwsaiQ9MSxoJD0xLFYyPW5ldyBNYXAsRzI9bmV3IE1hcDtmdW5jdGlvbiBSJCgpe2xldCAkPW5ldyBVUkwoYzEoImV4ZWMtd3MiKSx3aW5kb3cubG9jYXRpb24uaHJlZik7cmV0dXJuICQucHJvdG9jb2w9JC5wcm90b2NvbD09PSJodHRwczoiPyJ3c3M6Ijoid3M6IiwkLnRvU3RyaW5nKCl9ZnVuY3Rpb24gZyQoJCl7Zm9yKGxldCBKIG9mIFYyLnZhbHVlcygpKUoucmVqZWN0KCQpO1YyLmNsZWFyKCl9ZnVuY3Rpb24geDkoKXtyZXR1cm4gbDI/Pz1uZXcgUHJvbWlzZSgoJCxKKT0+e2xldCBRPSExLFo7dHJ5e1o9bmV3IFdlYlNvY2tldChSJCgpKX1jYXRjaChxKXtsMj1udWxsLEoocSk7cmV0dXJufWxldCBYPXNldFRpbWVvdXQoKCk9PntpZighUSlRPSEwLGwyPW51bGwsSihFcnJvcigiY29udHJvbCBzb2NrZXQgY29ubmVjdCB0aW1lb3V0IikpLFouY2xvc2UoKX0seCQpO1oub25vcGVuPSgpPT57Wi5zZW5kKEpTT04uc3RyaW5naWZ5KHt0b2tlbjp3aW5kb3cuX19TSU1fUFJFVklFV19fPy5leGVjVG9rZW4/PyIifSkpfSxaLm9ubWVzc2FnZT0ocSk9PntsZXQgRzt0cnl7Rz1KU09OLnBhcnNlKFN0cmluZyhxLmRhdGEpKX1jYXRjaHtyZXR1cm59aWYoRy5yZWFkeSl7aWYoIVEpUT0hMCxjbGVhclRpbWVvdXQoWCkseTM9WiwkKFopO3JldHVybn1pZih0eXBlb2YgRy5zdWI9PT0ibnVtYmVyIil7bGV0IEI9RzIuZ2V0KEcuc3ViKTtpZighQilyZXR1cm47aWYoRy5lbmQpRzIuZGVsZXRlKEcuc3ViKSxCLm9uRW5kKCk7ZWxzZSBpZih0eXBlb2YgRy5kYXRhPT09InN0cmluZyIpQi5vbkRhdGEoRy5kYXRhKTtyZXR1cm59aWYodHlwZW9mIEcuaWQhPT0ibnVtYmVyIilyZXR1cm47bGV0IFY9VjIuZ2V0KEcuaWQpO2lmKCFWKXJldHVybjtWMi5kZWxldGUoRy5pZCksVi5yZXNvbHZlKEcpfTtsZXQgWT0oKT0+e2wyPW51bGwseTM9bnVsbDtsZXQgcT1FcnJvcigiY29udHJvbCBzb2NrZXQgY2xvc2VkIOKAlCByZWxvYWQgdGhlIHBhZ2UgaWYgdGhpcyBwZXJzaXN0cyIpO2ckKHEpO2xldCBHPVsuLi5HMi52YWx1ZXMoKV07RzIuY2xlYXIoKTtmb3IobGV0IFYgb2YgRylWLm9uRW5kKCk7aWYoIVEpUT0hMCxjbGVhclRpbWVvdXQoWCksSihxKX07Wi5vbmVycm9yPVksWi5vbmNsb3NlPVl9KSxsMn1hc3luYyBmdW5jdGlvbiB2OSgkLEope2xldCBRPWF3YWl0IHg5KCk7aWYoUS5yZWFkeVN0YXRlIT09V2ViU29ja2V0Lk9QRU4pdGhyb3cgRXJyb3IoImNvbnRyb2wgc29ja2V0IG5vdCBvcGVuIik7cmV0dXJuIG5ldyBQcm9taXNlKChaLFgpPT57bGV0IFk9aiQrKyxxPSgpPT57VjIuZGVsZXRlKFkpLFgoSj8ucmVhc29uPz9uZXcgRE9NRXhjZXB0aW9uKCJBYm9ydGVkIiwiQWJvcnRFcnJvciIpKX07aWYoSil7aWYoSi5hYm9ydGVkKXtxKCk7cmV0dXJufUouYWRkRXZlbnRMaXN0ZW5lcigiYWJvcnQiLHEse29uY2U6ITB9KX1WMi5zZXQoWSx7cmVzb2x2ZTooRyk9PntKPy5yZW1vdmVFdmVudExpc3RlbmVyKCJhYm9ydCIscSksWihHKX0scmVqZWN0OihHKT0+e0o/LnJlbW92ZUV2ZW50TGlzdGVuZXIoImFib3J0IixxKSxYKEcpfX0pLFEuc2VuZChKU09OLnN0cmluZ2lmeSh7aWQ6WSwuLi4kfSkpfSl9YXN5bmMgZnVuY3Rpb24gSTEoJCxKKXtsZXQgUT1hd2FpdCB2OSh7Y29tbWFuZDokfSxKPy5zaWduYWwpO3JldHVybntzdGRvdXQ6US5zdGRvdXQ/PyIiLHN0ZGVycjpRLnN0ZGVycj8/IiIsZXhpdENvZGU6US5leGl0Q29kZT8/MX19YXN5bmMgZnVuY3Rpb24gYjMoJCxKKXtsZXQgUT1hd2FpdCB2OSh7dWk6JH0sSj8uc2lnbmFsKTtpZihRLmVycm9yKXRocm93IEVycm9yKFEuZXJyb3IpO3JldHVybiBRLnN0YXR1cz8/bnVsbH1mdW5jdGlvbiBmMCgkKXtsZXQgSj17b25tZXNzYWdlOm51bGwsb25lcnJvcjpudWxsLGNsb3NlOigpPT57fX0sUT0hMSxaPW51bGwsWD1udWxsLFk9IiIscT0oQik9PntZKz1CLnJlcGxhY2UoL1xyXG4vZyxgCmApO2xldCBOO3doaWxlKChOPVkuaW5kZXhPZihgCgpgKSkhPT0tMSl7bGV0IHo9WS5zbGljZSgwLE4pO1k9WS5zbGljZShOKzIpO2xldCBMPXouc3BsaXQoYApgKS5maWx0ZXIoKEMpPT5DLnN0YXJ0c1dpdGgoImRhdGE6IikpLm1hcCgoQyk9PkMuc2xpY2UoNSkucmVwbGFjZSgvXiAvLCIiKSkuam9pbihgCmApO2lmKEwpSi5vbm1lc3NhZ2U/Lih7ZGF0YTpMfSl9fSxHPSgpPT57aWYoUXx8WClyZXR1cm47Si5vbmVycm9yPy4oKSxYPXNldFRpbWVvdXQoKCk9PntYPW51bGwsVigpfSx2JCl9LFY9YXN5bmMoKT0+e2lmKFEpcmV0dXJuO3RyeXtsZXQgQj1hd2FpdCB4OSgpO2lmKFEpcmV0dXJuO1k9IiIsWj1oJCsrLEcyLnNldChaLHtvbkRhdGE6cSxvbkVuZDpHfSksQi5zZW5kKEpTT04uc3RyaW5naWZ5KHtzdWI6WixwYXRoOiR9KSl9Y2F0Y2h7RygpfX07cmV0dXJuIFYoKSxKLmNsb3NlPSgpPT57aWYoUT0hMCxYKWNsZWFyVGltZW91dChYKTtpZihaIT09bnVsbCl7RzIuZGVsZXRlKFopO3RyeXt5Mz8uc2VuZChKU09OLnN0cmluZ2lmeSh7dW5zdWI6Wn0pKX1jYXRjaHt9Wj1udWxsfX0sSn1mdW5jdGlvbiBPMSgkKXtyZXR1cm5gJyR7JC5yZXBsYWNlKC8nL2csIidcXCcnIil9J2B9ZnVuY3Rpb24gajkoJCl7bGV0W0osUV09VyhudWxsKSxbWixYXT1XKCJBWCBvZmYiKTtyZXR1cm4gYigoKT0+e2lmKCEkKXtRKG51bGwpLFgoIkFYIG9mZiIpO3JldHVybn1RKG51bGwpLFgoIkFYIHdhaXRpbmciKTtsZXQgWT1mMCgkKTtyZXR1cm4gWS5vbm1lc3NhZ2U9KHEpPT57dHJ5e2xldCBHPUpTT04ucGFyc2UocS5kYXRhKTtRKEcpLFgoXzUoRyk/IkFYIHVuYXZhaWxhYmxlIjpgJHtHLmVsZW1lbnRzLmxlbmd0aH0gQVggZWxlbWVudHNgKX1jYXRjaHtYKCJBWCBwYXJzZSBlcnJvciIpfX0sWS5vbmVycm9yPSgpPT57WCgiQVggcmVjb25uZWN0aW5nIil9LCgpPT5ZLmNsb3NlKCl9LFskXSkse3NuYXBzaG90Okosc3RhdHVzOlp9fXZhciBTMz16MCh7c25hcHNob3Q6bnVsbCxzdGF0dXM6IkFYIG9mZiJ9KSx4Mz16MChudWxsKTtmdW5jdGlvbiBCMigpe3JldHVybiBDMChTMyl9ZnVuY3Rpb24gdzUoKXtsZXQgJD1DMCh4Myk7aWYoISQpdGhyb3cgRXJyb3IoIkFYIHNlbGVjdGlvbiBjb250ZXh0IGlzIHVuYXZhaWxhYmxlIik7cmV0dXJuICR9dmFyIGg5PWQwKGZ1bmN0aW9uKHtlbGVtZW50OkosaW5kZXg6USxzY3JlZW46WixoaWdobGlnaHRlZDpYLHNlbGVjdGVkOlksb25IaWdobGlnaHQ6cSxvblNlbGVjdDpHfSl7bGV0IFY9aTAoSiksQj1UNShKLFEpLE49STkoSi5mcmFtZSxaKTtpZighTilyZXR1cm4gbnVsbDtsZXQgej15OShCKTtyZXR1cm4gSygiYnV0dG9uIix7dHlwZToiYnV0dG9uIiwiZGF0YS1heC1rZXkiOlYsImRhdGEtYXgtaWQiOkIuaWQsImRhdGEtYXgtcGF0aCI6Qi5wYXRoLCJkYXRhLWF4LWxhYmVsIjpCLmxhYmVsLCJkYXRhLWF4LXZhbHVlIjpCLnZhbHVlLCJkYXRhLWF4LXJvbGUiOkIucm9sZSwiZGF0YS1heC10eXBlIjpCLnR5cGUsImRhdGEtYXgtZW5hYmxlZCI6U3RyaW5nKEIuZW5hYmxlZCksImRhdGEtYXgtZnJhbWUiOkUzKEIuZnJhbWUpLCJkYXRhLWF4LXNlbGVjdGVkIjpTdHJpbmcoWSksImFyaWEtbGFiZWwiOkoubGFiZWx8fHosdGl0bGU6eixvbkNsaWNrOigpPT5HKFYpLG9uTW91c2VFbnRlcjooKT0+cShWKSxvbk1vdXNlTGVhdmU6KCk9PnEobnVsbCksY2xhc3NOYW1lOiJhYnNvbHV0ZSBib3gtYm9yZGVyIG1pbi13LXB4IG1pbi1oLXB4IHAtMCByb3VuZGVkLVszcHhdIGJvcmRlciBjdXJzb3ItcG9pbnRlciBwb2ludGVyLWV2ZW50cy1hdXRvIixzdHlsZTp7bGVmdDpgJHtOLngvWi53aWR0aCoxMDB9JWAsdG9wOmAke04ueS9aLmhlaWdodCoxMDB9JWAsd2lkdGg6YCR7Ti53aWR0aC9aLndpZHRoKjEwMH0lYCxoZWlnaHQ6YCR7Ti5oZWlnaHQvWi5oZWlnaHQqMTAwfSVgLGJvcmRlckNvbG9yOlk/IiM2MGE1ZmEiOlg/IiNmYmJmMjQiOiIjMzRkMzk5IixiYWNrZ3JvdW5kOlk/InJnYmEoOTYsMTY1LDI1MCwwLjI0KSI6WD8icmdiYSgyNDUsMTU4LDExLDAuMjgpIjoicmdiYSgxNiwxODUsMTI5LDAuMTIpIn19KX0sKCQsSik9PiQuaW5kZXg9PT1KLmluZGV4JiYkLmhpZ2hsaWdodGVkPT09Si5oaWdobGlnaHRlZCYmJC5zZWxlY3RlZD09PUouc2VsZWN0ZWQmJiQub25IaWdobGlnaHQ9PT1KLm9uSGlnaGxpZ2h0JiYkLm9uU2VsZWN0PT09Si5vblNlbGVjdCYmJC5zY3JlZW4ud2lkdGg9PT1KLnNjcmVlbi53aWR0aCYmJC5zY3JlZW4uaGVpZ2h0PT09Si5zY3JlZW4uaGVpZ2h0JiZENSgkLmVsZW1lbnQsSi5lbGVtZW50KSk7ZnVuY3Rpb24gUjkoKXtsZXR7c25hcHNob3Q6JH09QjIoKSx7aGlnaGxpZ2h0ZWRLZXk6SixzZWxlY3RlZEtleTpRLHNldEhpZ2hsaWdodGVkS2V5Olosc2V0U2VsZWN0ZWRLZXk6WH09dzUoKTtpZighJD8uc2NyZWVuLndpZHRofHwhJD8uc2NyZWVuLmhlaWdodClyZXR1cm4gbnVsbDtyZXR1cm4gSygiZGl2Iix7Y2xhc3NOYW1lOiJhYnNvbHV0ZSBpbnNldC0wIHotMTAgb3ZlcmZsb3ctaGlkZGVuIHBvaW50ZXItZXZlbnRzLW5vbmUiLGNoaWxkcmVuOiQuZWxlbWVudHMubWFwKChZLHEpPT57bGV0IEc9aTAoWSk7cmV0dXJuIEsoaDkse2VsZW1lbnQ6WSxpbmRleDpxLHNjcmVlbjokLnNjcmVlbixoaWdobGlnaHRlZDpHPT09SixzZWxlY3RlZDpHPT09USxvbkhpZ2hsaWdodDpaLG9uU2VsZWN0Olh9LEcpfSl9KX1mdW5jdGlvbiBnOSh7ZW5kcG9pbnQ6JCxjaGlsZHJlbjpKfSl7bGV0e3NuYXBzaG90OlEsc3RhdHVzOlp9PWo5KCQpLFtYLFldPVcobnVsbCksW3EsR109VyhudWxsKTtiKCgpPT57aWYoISQpWShudWxsKSxHKG51bGwpfSxbJF0pO2xldCBWPUUxKCgpPT4oe3NuYXBzaG90OlEsc3RhdHVzOlp9KSxbUSxaXSksQj1FMSgoKT0+KHtoaWdobGlnaHRlZEtleTpYLHNlbGVjdGVkS2V5OnEsc2V0SGlnaGxpZ2h0ZWRLZXk6WSxzZXRTZWxlY3RlZEtleTpHfSksW1gscV0pO3JldHVybiBLKFMzLHt2YWx1ZTpWLGNoaWxkcmVuOksoeDMse3ZhbHVlOkIsY2hpbGRyZW46Sn0pfSl9ZnVuY3Rpb24gbTkoe292ZXJsYXlFbmFibGVkOiQsc3RyZWFtaW5nOkosb25Ub2dnbGVPdmVybGF5OlF9KXtsZXR7c3RhdHVzOlp9PUIyKCksW1gsWV09VyghMSkscT0kJiZKO3JldHVybiBLKHIxLkJ1dHRvbix7ImFyaWEtbGFiZWwiOiQ/IkhpZGUgYWNjZXNzaWJpbGl0eSBvdmVybGF5IjoiU2hvdyBhY2Nlc3NpYmlsaXR5IG92ZXJsYXkiLCJhcmlhLXByZXNzZWQiOiQsdGl0bGU6WixvbkNsaWNrOlEsb25Nb3VzZUVudGVyOigpPT5ZKCEwKSxvbk1vdXNlTGVhdmU6KCk9PlkoITEpLHN0eWxlOnE/e2JhY2tncm91bmQ6WD8icmdiYSgyNTUsMjU1LDI1NSwwLjEyKSI6InJnYmEoMjU1LDI1NSwyNTUsMC4wOCkiLGNvbG9yOiJyZ2JhKDI1NSwyNTUsMjU1LDAuOTUpIn06dm9pZCAwLGNoaWxkcmVuOksobTAse3NpemU6MTksc3Ryb2tlV2lkdGg6Mn0pfSl9ZnVuY3Rpb24gRTUoe2NsYXNzTmFtZTokPSIifSl7cmV0dXJuIEsoImEiLHtocmVmOiJodHRwczovL2dpdGh1Yi5jb20vZXhwby9zZXJ2ZS1zaW0iLHRhcmdldDoiX2JsYW5rIixyZWw6Im5vcmVmZXJyZXIiLGNsYXNzTmFtZTpgaW5saW5lLWZsZXggaC1bMzBweF0gbWluLXctMCBpdGVtcy1jZW50ZXIgd2hpdGVzcGFjZS1ub3dyYXAgcm91bmRlZC1tZCBweC0xLjUgZm9udC1tb25vIHRleHQtWzEycHhdIGZvbnQtc2VtaWJvbGQgdGV4dC13aGl0ZS82NSBuby11bmRlcmxpbmUgW3RyYW5zaXRpb246YmFja2dyb3VuZF8wLjE1c19lYXNlLGNvbG9yXzAuMTVzX2Vhc2VdIGhvdmVyOmJnLXdoaXRlLzggaG92ZXI6dGV4dC13aGl0ZS84NSBmb2N1cy12aXNpYmxlOm91dGxpbmUgZm9jdXMtdmlzaWJsZTpvdXRsaW5lLTIgZm9jdXMtdmlzaWJsZTpvdXRsaW5lLW9mZnNldC0yIGZvY3VzLXZpc2libGU6b3V0bGluZS13aGl0ZS82MCAkeyR9YC50cmltKCksImFyaWEtbGFiZWwiOiJPcGVuIHNlcnZlLXNpbSIsdGl0bGU6Ik9wZW4gc2VydmUtc2ltIixjaGlsZHJlbjoic2VydmUtc2ltIn0pfWZ1bmN0aW9uIGY5KHtvcGVuOiQsb25DbGljazpKfSl7cmV0dXJuIEsoImRpdiIse2NsYXNzTmFtZTpgZml4ZWQgdG9wLTMgbGVmdC0zIHotMzAgZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTEgcC0xIFt0cmFuc2l0aW9uOm9wYWNpdHlfMC4xOHNfZWFzZV0gJHskPyJvcGFjaXR5LTAgcG9pbnRlci1ldmVudHMtbm9uZSI6Im9wYWNpdHktMTAwIHBvaW50ZXItZXZlbnRzLWF1dG8ifWAsY2hpbGRyZW46W0soImJ1dHRvbiIse29uQ2xpY2s6SixjbGFzc05hbWU6InctWzMwcHhdIGgtWzMwcHhdIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGJnLXRyYW5zcGFyZW50IGJvcmRlci1ub25lIHJvdW5kZWQtbWQgdGV4dC1bIzhlOGU5M10gY3Vyc29yLXBvaW50ZXIgW3RyYW5zaXRpb246YmFja2dyb3VuZF8wLjE1c19lYXNlLGNvbG9yXzAuMTVzX2Vhc2VdIGhvdmVyOmJnLXdoaXRlLzggaG92ZXI6dGV4dC13aGl0ZSIsImFyaWEtbGFiZWwiOiJPcGVuIGRldmljZXMgc2lkZWJhciIsImFyaWEtcHJlc3NlZCI6JCx0aXRsZToiRGV2aWNlcyIsY2hpbGRyZW46SyhJMCx7c2l6ZToxOCxzdHJva2VXaWR0aDoxLjc1fSl9KSxLKEU1LHt9KV19KX1mdW5jdGlvbiBwOSgkKXtpZighTnVtYmVyLmlzRmluaXRlKCQpfHwkPD0wKXJldHVybiIwIEIiO2xldCBKPSQvMTA3Mzc0MTgyNDtpZihKPj0xKXJldHVybmAke0oudG9GaXhlZChKPj0xMD8wOjEpfSBHQmA7cmV0dXJuYCR7KCQvMTA0ODU3NikudG9GaXhlZCgwKX0gTUJgfWZ1bmN0aW9uIEk1KCQpe2xldCBKPSQubWF0Y2goL14oW2EtekEtWl0rKS0oLispJC8pO2lmKCFKKXJldHVybntvczokLHZlcnNpb246IiJ9O3JldHVybntvczpKWzFdLHZlcnNpb246SlsyXS5yZXBsYWNlKC8tL2csIi4iKX19ZnVuY3Rpb24gdTkoJCl7cmV0dXJuIEk1KCQpLnZlcnNpb258fCR9ZnVuY3Rpb24geTUoJCl7bGV0e29zOkosdmVyc2lvbjpRfT1JNSgkKTtyZXR1cm4gUT9gJHtKfSAke1F9YDpKfWZ1bmN0aW9uIFM1KHtjaHJvbWU6JCxzY3JlZW46SixpbnRlcmFjdGl2ZTpRPSExLG9uQnV0dG9uOlosb25Dcm93bldoZWVsOlh9KXtyZXR1cm4gSygiZGl2Iix7Y2xhc3NOYW1lOiJhYnNvbHV0ZSBpbnNldC0wIixjaGlsZHJlbjpbJC5idXR0b25zLm1hcCgoWSk9PksoZiQse2Nocm9tZTokLGJ1dHRvbjpZLGludGVyYWN0aXZlOlEsb25CdXR0b246WixvbldoZWVsOlEmJlkubmFtZT09PSJkaWdpdGFsLWNyb3duIj9YOnZvaWQgMH0sYGJ1dHRvbi0ke1kubmFtZX1gKSksJC5jb21wb3NpdGVJbWFnZT9LKGQ5LHtjaHJvbWU6JCxpbWFnZTokLmNvbXBvc2l0ZUltYWdlLHJlY3Q6JC5ib2R5LHpJbmRleDoxfSk6JC5zbGljZSYmJC5jb3JuZXI/SyhwJCx7Y2hyb21lOiR9KTpudWxsLEsoImRpdiIse2NsYXNzTmFtZToiYWJzb2x1dGUgb3ZlcmZsb3ctaGlkZGVuIGJnLWJsYWNrIixzdHlsZTp7Li4udjMoJCwkLnNjcmVlbiwyKSxib3JkZXJSYWRpdXM6bSQoJCl9LGNoaWxkcmVuOkp9KV19KX1mdW5jdGlvbiBtJCgkKXtyZXR1cm5gJHskLnNjcmVlblJhZGl1cy8kLnNjcmVlbi53aWR0aCoxMDB9JSAvICR7JC5zY3JlZW5SYWRpdXMvJC5zY3JlZW4uaGVpZ2h0KjEwMH0lYH1mdW5jdGlvbiBmJCh7Y2hyb21lOiQsYnV0dG9uOkosaW50ZXJhY3RpdmU6USxvbkJ1dHRvbjpaLG9uV2hlZWw6WH0pe2xldFtZLHFdPVcoITEpLFtHLFZdPVcoITEpLEI9RShudWxsKSxOPUUobnVsbCksej1FKFgpO3ouY3VycmVudD1YLGIoKCk9PntsZXQgUz1OLmN1cnJlbnQ7aWYoIVN8fCFYKXJldHVybjtsZXQgeD0oJDEpPT57JDEucHJldmVudERlZmF1bHQoKSwkMS5zdG9wUHJvcGFnYXRpb24oKSx6LmN1cnJlbnQ/LigkMS5kZWx0YVksJDEuZGVsdGFNb2RlKX07cmV0dXJuIFMuYWRkRXZlbnRMaXN0ZW5lcigid2hlZWwiLHgse3Bhc3NpdmU6ITF9KSwoKT0+Uy5yZW1vdmVFdmVudExpc3RlbmVyKCJ3aGVlbCIseCl9LFshIVhdKTtsZXQgTD1RJiZKLnVzYWdlUGFnZSE9bnVsbCYmSi51c2FnZSE9bnVsbCxDPUQoKCk9PntpZihCLmN1cnJlbnQ9PT1udWxsKXJldHVybjtCLmN1cnJlbnQ9bnVsbCxWKCExKSxaPy4oe3BoYXNlOiJ1cCIsYnV0dG9uOkp9KX0sW0osWl0pLEE9RCgoUyk9PntpZihTLmJ1dHRvbiE9PTAmJlMucG9pbnRlclR5cGU9PT0ibW91c2UiKXJldHVybjtTLnByZXZlbnREZWZhdWx0KCksUy5zdG9wUHJvcGFnYXRpb24oKSxCLmN1cnJlbnQ9Uy5wb2ludGVySWQ7dHJ5e1MuY3VycmVudFRhcmdldC5zZXRQb2ludGVyQ2FwdHVyZShTLnBvaW50ZXJJZCl9Y2F0Y2h7fVYoITApLFo/Lih7cGhhc2U6ImRvd24iLGJ1dHRvbjpKfSl9LFtKLFpdKSxVPUoub25Ub3A/NTowLEg9TCYmKFl8fEcpLGs9KEg/Si5ob3Zlci54OjApKjEwMCxGPShIP0ouaG92ZXIueTowKSoxMDAsdz1HJiZKLmltYWdlRG93bj9KLmltYWdlRG93bjpKLmltYWdlLFQ9TD97b25Qb2ludGVyRG93bjpBLG9uUG9pbnRlclVwOkMsb25Qb2ludGVyQ2FuY2VsOkMsb25Qb2ludGVyRW50ZXI6KCk9PnEoITApLG9uUG9pbnRlckxlYXZlOigpPT57cSghMSksQygpfX06e307cmV0dXJuIEsoImRpdiIse3JlZjpOLHJvbGU6TD8iYnV0dG9uIjp2b2lkIDAsImFyaWEtbGFiZWwiOkw/bDkoSi5uYW1lKTp2b2lkIDAsImFyaWEtaGlkZGVuIjpMP3ZvaWQgMDohMCx0aXRsZTpMP2w5KEoubmFtZSk6dm9pZCAwLGNsYXNzTmFtZToiYWJzb2x1dGUgc2VsZWN0LW5vbmUiLHN0eWxlOnsuLi52MygkLEouZnJhbWUsVSksdHJhbnNmb3JtOmt8fEY/YHRyYW5zbGF0ZSgke2t9JSwgJHtGfSUpYDp2b2lkIDAsdHJhbnNpdGlvbjoidHJhbnNmb3JtIDAuMTJzIGVhc2UiLGN1cnNvcjpMPyJwb2ludGVyIjp2b2lkIDAscG9pbnRlckV2ZW50czpMPyJhdXRvIjoibm9uZSIsdG91Y2hBY3Rpb246Im5vbmUifSwuLi5ULGNoaWxkcmVuOncmJksoImltZyIse2FsdDoiIiwiYXJpYS1oaWRkZW4iOiEwLGRyYWdnYWJsZTohMSxzcmM6YzkoJC5pZGVudGlmaWVyLHcpLGNsYXNzTmFtZToiYWJzb2x1dGUgaW5zZXQtMCBzaXplLWZ1bGwgc2VsZWN0LW5vbmUiLHN0eWxlOntvYmplY3RGaXQ6ImZpbGwiLGZpbHRlcjpHJiYhSi5pbWFnZURvd24/ImJyaWdodG5lc3MoMS40KSI6dm9pZCAwLHRyYW5zaXRpb246ImZpbHRlciAwLjEycyBlYXNlIixXZWJraXRVc2VyRHJhZzoibm9uZSJ9fSl9KX1mdW5jdGlvbiBsOSgkKXtyZXR1cm4gJC5zcGxpdCgiLSIpLm1hcCgoSik9PkouY2hhckF0KDApLnRvVXBwZXJDYXNlKCkrSi5zbGljZSgxKSkuam9pbigiICIpfWZ1bmN0aW9uIHAkKHtjaHJvbWU6JH0pe2lmKCEkLnNsaWNlfHwhJC5jb3JuZXIpcmV0dXJuIG51bGw7bGV0e2JvZHk6Sixjb3JuZXI6USxzbGljZTpafT0kLFg9TWF0aC5tYXgoSi53aWR0aC1RLndpZHRoKjIsMCksWT1NYXRoLm1heChKLmhlaWdodC1RLmhlaWdodCoyLDApLHE9W3trZXk6InRvcC1sZWZ0IixpbWFnZTpaLnRvcExlZnQscmVjdDp7eDpKLngseTpKLnksd2lkdGg6US53aWR0aCxoZWlnaHQ6US5oZWlnaHR9fSx7a2V5OiJ0b3AtcmlnaHQiLGltYWdlOloudG9wUmlnaHQscmVjdDp7eDpKLngrSi53aWR0aC1RLndpZHRoLHk6Si55LHdpZHRoOlEud2lkdGgsaGVpZ2h0OlEuaGVpZ2h0fX0se2tleToiYm90dG9tLWxlZnQiLGltYWdlOlouYm90dG9tTGVmdCxyZWN0Ont4OkoueCx5OkoueStKLmhlaWdodC1RLmhlaWdodCx3aWR0aDpRLndpZHRoLGhlaWdodDpRLmhlaWdodH19LHtrZXk6ImJvdHRvbS1yaWdodCIsaW1hZ2U6Wi5ib3R0b21SaWdodCxyZWN0Ont4OkoueCtKLndpZHRoLVEud2lkdGgseTpKLnkrSi5oZWlnaHQtUS5oZWlnaHQsd2lkdGg6US53aWR0aCxoZWlnaHQ6US5oZWlnaHR9fSx7a2V5OiJ0b3AiLGltYWdlOloudG9wLHJlY3Q6e3g6Si54K1Eud2lkdGgseTpKLnksd2lkdGg6WCxoZWlnaHQ6US5oZWlnaHR9fSx7a2V5OiJib3R0b20iLGltYWdlOlouYm90dG9tLHJlY3Q6e3g6Si54K1Eud2lkdGgseTpKLnkrSi5oZWlnaHQtUS5oZWlnaHQsd2lkdGg6WCxoZWlnaHQ6US5oZWlnaHR9fSx7a2V5OiJsZWZ0IixpbWFnZTpaLmxlZnQscmVjdDp7eDpKLngseTpKLnkrUS5oZWlnaHQsd2lkdGg6US53aWR0aCxoZWlnaHQ6WX19LHtrZXk6InJpZ2h0IixpbWFnZTpaLnJpZ2h0LHJlY3Q6e3g6Si54K0oud2lkdGgtUS53aWR0aCx5OkoueStRLmhlaWdodCx3aWR0aDpRLndpZHRoLGhlaWdodDpZfX1dO3JldHVybiBLKFoxLHtjaGlsZHJlbjpxLmZpbHRlcigoRyk9PkcucmVjdC53aWR0aD4wJiZHLnJlY3QuaGVpZ2h0PjApLm1hcCgoRyk9PksoZDkse2Nocm9tZTokLGltYWdlOkcuaW1hZ2UscmVjdDpHLnJlY3QsekluZGV4OjF9LEcua2V5KSl9KX1mdW5jdGlvbiBkOSh7Y2hyb21lOiQsaW1hZ2U6SixyZWN0OlEsekluZGV4Olp9KXtyZXR1cm4gSygiaW1nIix7YWx0OiIiLCJhcmlhLWhpZGRlbiI6ITAsZHJhZ2dhYmxlOiExLHNyYzpjOSgkLmlkZW50aWZpZXIsSiksY2xhc3NOYW1lOiJhYnNvbHV0ZSBzZWxlY3Qtbm9uZSIsc3R5bGU6ey4uLnYzKCQsUSxaKSxvYmplY3RGaXQ6ImZpbGwiLHBvaW50ZXJFdmVudHM6Im5vbmUiLFdlYmtpdFVzZXJEcmFnOiJub25lIn19KX1mdW5jdGlvbiBjOSgkLEope2xldCBRPWBncmlkL2FwaS9kZXZpY2VraXQtY2hyb21lP2Nocm9tZT0ke2VuY29kZVVSSUNvbXBvbmVudCgkKX0maW1hZ2U9JHtlbmNvZGVVUklDb21wb25lbnQoSil9YDtyZXR1cm4gdHlwZW9mIHdpbmRvdz4idSI/YC8ke1F9YDpjMShRKX1mdW5jdGlvbiB2MygkLEosUSl7cmV0dXJue2xlZnQ6YjUoSi54LCQuZnJhbWUud2lkdGgpLHRvcDpiNShKLnksJC5mcmFtZS5oZWlnaHQpLHdpZHRoOmI1KEoud2lkdGgsJC5mcmFtZS53aWR0aCksaGVpZ2h0OmI1KEouaGVpZ2h0LCQuZnJhbWUuaGVpZ2h0KSx6SW5kZXg6UX19ZnVuY3Rpb24gYjUoJCxKKXtyZXR1cm5gJHskL0oqMTAwfSVgfWZ1bmN0aW9uIG85KHtuYW1lOiQscnVudGltZTpKLGNocm9tZTpRLHBsYWNlaG9sZGVyQXNzZXQ6WixidXN5OlgsYnVzeUxhYmVsOlk9IlN0YXJ0aW5n4oCmIixlcnJvcjpxLG9uU3RhcnQ6R30pe2xldCBWPUUwKCQpLEI9UzFbVl0sTj1aPz9udWxsLHo9Tj9udWxsOlE/P251bGwsTD16P3t3aWR0aDp6LnNjcmVlbi53aWR0aCxoZWlnaHQ6ei5zY3JlZW4uaGVpZ2h0fTpZMihWLCQpLEM9cTIoVixMKSxBPU4/dSQoVixOLm5hbWUpOno/Qyp6LmZyYW1lLndpZHRoL3ouc2NyZWVuLndpZHRoOkMqQi53aWR0aC8oQi53aWR0aC0yKkIuYmV6ZWxYKSxVPU4/e3dpZHRoOk4ud2lkdGgsaGVpZ2h0Ok4uaGVpZ2h0fTp6P3t3aWR0aDp6LmZyYW1lLndpZHRoLGhlaWdodDp6LmZyYW1lLmhlaWdodH06e3dpZHRoOkIud2lkdGgsaGVpZ2h0OkIuaGVpZ2h0fSxIPWAke1Uud2lkdGh9IC8gJHtVLmhlaWdodH1gLGs9KFUud2lkdGgvVS5oZWlnaHQqbCQoVikpLnRvRml4ZWQoMiksRj1WPT09InZpc2lvbiI/SyhvJCx7fSk6SyhkJCx7dHlwZTpWfSk7cmV0dXJuIEsoImRpdiIse2NsYXNzTmFtZToiZmxleCBmbGV4LWNvbCBpdGVtcy1jZW50ZXIgZ2FwLTUgbWluLXctMCB3LWZ1bGwiLGNoaWxkcmVuOltLKCJkaXYiLHtjbGFzc05hbWU6InJlbGF0aXZlIHctZnVsbCIsc3R5bGU6e3dpZHRoOmBtaW4oMTAwJSwgJHtBfXB4LCAke2t9ZHZoKWAsbWF4V2lkdGg6QSxhc3BlY3RSYXRpbzpIfSxjaGlsZHJlbjpOP0soYyQse25hbWU6Ti5uYW1lLGZhbGxiYWNrOkZ9KTp6P0soImRpdiIse2NsYXNzTmFtZToiYWJzb2x1dGUgaW5zZXQtMCBwb2ludGVyLWV2ZW50cy1ub25lIixjaGlsZHJlbjpLKFM1LHtjaHJvbWU6en0pfSk6Rn0pLEsoImRpdiIse2NsYXNzTmFtZToiZmxleCBmbGV4LWNvbCBpdGVtcy1jZW50ZXIgZ2FwLTEgdGV4dC1jZW50ZXIiLGNoaWxkcmVuOltLKCJkaXYiLHtjbGFzc05hbWU6InRleHQtWzE3cHhdIGZvbnQtc2VtaWJvbGQgdGV4dC13aGl0ZS85MCIsY2hpbGRyZW46JH0pLEsoImRpdiIse2NsYXNzTmFtZToidGV4dC1bMTNweF0gdGV4dC13aGl0ZS80NSIsY2hpbGRyZW46W3k1KEopLCIgU2ltdWxhdG9yIl19KV19KSxxJiZLKCJkaXYiLHtjbGFzc05hbWU6InRleHQtZGFuZ2VyIHRleHQtWzEycHhdIGZvbnQtbW9ubyBtYXgtdy05MCB0ZXh0LWNlbnRlciIsY2hpbGRyZW46cX0pLEsoImJ1dHRvbiIse3R5cGU6ImJ1dHRvbiIsb25DbGljazpHLGRpc2FibGVkOlgsY2xhc3NOYW1lOmBmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMiBweC01IHB5LTIgcm91bmRlZC1mdWxsIHRleHQtWzE0cHhdIGZvbnQtbWVkaXVtIFt0cmFuc2l0aW9uOmJhY2tncm91bmRfMC4xNXNdICR7WD8iYmctd2hpdGUvOCB0ZXh0LXdoaXRlLzU1IGN1cnNvci1kZWZhdWx0IjoiYmctd2hpdGUvMTIgdGV4dC13aGl0ZS85MCBob3ZlcjpiZy13aGl0ZS8xOCBjdXJzb3ItcG9pbnRlciJ9YCxjaGlsZHJlbjpbWCYmSygic3BhbiIseyJhcmlhLWhpZGRlbiI6ITAsY2xhc3NOYW1lOiJzaXplLTMuNSByb3VuZGVkLWZ1bGwgYm9yZGVyLTIgYm9yZGVyLXdoaXRlLzI1IGFuaW1hdGUtW2dyaWQtc3Bpbl8wLjhzX2xpbmVhcl9pbmZpbml0ZV0iLHN0eWxlOntib3JkZXJUb3BDb2xvcjoicmdiYSgyNTUsMjU1LDI1NSwwLjkpIn19KSxYP1k6IlN0YXJ0Il19KV19KX1mdW5jdGlvbiB1JCgkLEope2lmKCQ9PT0id2F0Y2giKXtpZihKLmluY2x1ZGVzKCJ1bHRyYSIpKXJldHVybiAyNTU7aWYoSi5pbmNsdWRlcygid2F0Y2gtc2UtIil8fEouaW5jbHVkZXMoImFwcGxlLXdhdGNoLXNlLSIpKXJldHVybiAyMzg7cmV0dXJuIDI1MH1pZigkPT09InZpc2lvbiIpcmV0dXJuIDM5MDtpZigkPT09ImlwYWQiKXJldHVybiAzNDA7cmV0dXJuIDI4MH1mdW5jdGlvbiBsJCgkKXtpZigkPT09InZpc2lvbiIpcmV0dXJuIDM0O2lmKCQ9PT0iaXBhZCIpcmV0dXJuIDUwO2lmKCQ9PT0id2F0Y2giKXJldHVybiA1NjtyZXR1cm4gNTJ9ZnVuY3Rpb24gZCQoe3R5cGU6JH0pe2xldCBKPVMxWyRdO3JldHVybiBLKFoxLHtjaGlsZHJlbjpbSygic3ZnIix7dmlld0JveDpgMCAwICR7Si53aWR0aH0gJHtKLmhlaWdodH1gLGNsYXNzTmFtZToiYWJzb2x1dGUgaW5zZXQtMCBzaXplLWZ1bGwiLHByZXNlcnZlQXNwZWN0UmF0aW86InhNaWRZTWlkIG1lZXQiLGNoaWxkcmVuOltLKCJkZWZzIix7Y2hpbGRyZW46SygibGluZWFyR3JhZGllbnQiLHtpZDoicGxhY2Vob2xkZXItc2NyZWVuIix4MToiMCIseTE6IjAiLHgyOiIxIix5MjoiMSIsY2hpbGRyZW46W0soInN0b3AiLHtvZmZzZXQ6IjAlIixzdG9wQ29sb3I6IiM2ZmE4ZTYifSksSygic3RvcCIse29mZnNldDoiNTUlIixzdG9wQ29sb3I6IiM1YjkzZDYifSksSygic3RvcCIse29mZnNldDoiMTAwJSIsc3RvcENvbG9yOiIjNTE4OGNmIn0pXX0pfSksSygicmVjdCIse3g6Si5iZXplbFgseTpKLmJlemVsWSx3aWR0aDpKLndpZHRoLTIqSi5iZXplbFgsaGVpZ2h0OkouaGVpZ2h0LTIqSi5iZXplbFkscng6Si5pbm5lclJhZGl1cyxmaWxsOiJ1cmwoI3BsYWNlaG9sZGVyLXNjcmVlbikifSldfSksSygiZGl2Iix7Y2xhc3NOYW1lOiJhYnNvbHV0ZSBpbnNldC0wIHBvaW50ZXItZXZlbnRzLW5vbmUiLGNoaWxkcmVuOksoazUse3R5cGU6JH0pfSldfSl9ZnVuY3Rpb24gYyQoe25hbWU6JCxmYWxsYmFjazpKfSl7bGV0W1EsWl09VygibG9hZGluZyIpO3JldHVybiBLKCJkaXYiLHtjbGFzc05hbWU6ImFic29sdXRlIGluc2V0LTAgc2l6ZS1mdWxsIHBvaW50ZXItZXZlbnRzLW5vbmUiLGNoaWxkcmVuOltRIT09ImxvYWRlZCImJkosUSE9PSJlcnJvciImJksoImltZyIse2FsdDoiIiwiYXJpYS1oaWRkZW4iOiEwLGRyYWdnYWJsZTohMSxzcmM6ciQoJCksY2xhc3NOYW1lOiJhYnNvbHV0ZSBpbnNldC0wIHNpemUtZnVsbCBzZWxlY3Qtbm9uZSBvYmplY3QtY29udGFpbiIsc3R5bGU6e1dlYmtpdFVzZXJEcmFnOiJub25lIn0sb25Mb2FkOigpPT5aKCJsb2FkZWQiKSxvbkVycm9yOigpPT5aKCJlcnJvciIpfSldfSl9ZnVuY3Rpb24gbyQoKXtsZXR7d2lkdGg6JCxoZWlnaHQ6Sn09UzEudmlzaW9uO3JldHVybiBLKCJzdmciLHt2aWV3Qm94OmAwIDAgJHskfSAke0p9YCxjbGFzc05hbWU6ImFic29sdXRlIGluc2V0LTAgc2l6ZS1mdWxsIixwcmVzZXJ2ZUFzcGVjdFJhdGlvOiJ4TWlkWU1pZCBtZWV0IixmaWxsOiJub25lIiwiYXJpYS1oaWRkZW4iOiEwLGNoaWxkcmVuOltLKCJkZWZzIix7Y2hpbGRyZW46W0soImxpbmVhckdyYWRpZW50Iix7aWQ6InZpc2lvbi1wbGFjZWhvbGRlci1zaGVsbCIseDE6IjAiLHkxOiIwIix4MjoiMCIseTI6IjEiLGNoaWxkcmVuOltLKCJzdG9wIix7b2Zmc2V0OiIwJSIsc3RvcENvbG9yOiIjMjgyODJiIn0pLEsoInN0b3AiLHtvZmZzZXQ6IjU0JSIsc3RvcENvbG9yOiIjMTIxMjE0In0pLEsoInN0b3AiLHtvZmZzZXQ6IjEwMCUiLHN0b3BDb2xvcjoiIzA3MDcwOCJ9KV19KSxLKCJsaW5lYXJHcmFkaWVudCIse2lkOiJ2aXNpb24tcGxhY2Vob2xkZXItZ2xhc3MiLHgxOiIwIix5MToiMCIseDI6IjEiLHkyOiIxIixjaGlsZHJlbjpbSygic3RvcCIse29mZnNldDoiMCUiLHN0b3BDb2xvcjoiIzMxMzUzYSJ9KSxLKCJzdG9wIix7b2Zmc2V0OiI0OCUiLHN0b3BDb2xvcjoiIzBhMGIwZCJ9KSxLKCJzdG9wIix7b2Zmc2V0OiIxMDAlIixzdG9wQ29sb3I6IiMwMTAxMDIifSldfSksSygicmFkaWFsR3JhZGllbnQiLHtpZDoidmlzaW9uLXBsYWNlaG9sZGVyLWxlbnMiLGN4OiI1MCUiLGN5OiI0NiUiLHI6IjYwJSIsY2hpbGRyZW46W0soInN0b3AiLHtvZmZzZXQ6IjAlIixzdG9wQ29sb3I6IiMyMDI4MzIifSksSygic3RvcCIse29mZnNldDoiNzIlIixzdG9wQ29sb3I6IiMwOTBhMGQifSksSygic3RvcCIse29mZnNldDoiMTAwJSIsc3RvcENvbG9yOiIjMDEwMTAyIn0pXX0pXX0pLEsoInBhdGgiLHtkOiJNOTUgMTc3Qzk1IDExOSAxNDcgODYgMjE4IDkxQzI1NyA5NCAyODYgMTExIDMyMCAxMTFDMzU0IDExMSAzODMgOTQgNDIyIDkxQzQ5MyA4NiA1NDUgMTE5IDU0NSAxNzdWMjIyQzU0NSAyNzggNTAxIDMxMSA0NDMgMzEwQzM5OCAzMDkgMzcxIDI4NiAzNDUgMjY4QzMyOSAyNTcgMzExIDI1NyAyOTUgMjY4QzI2OSAyODYgMjQyIDMwOSAxOTcgMzEwQzEzOSAzMTEgOTUgMjc4IDk1IDIyMlYxNzdaIixmaWxsOiJ1cmwoI3Zpc2lvbi1wbGFjZWhvbGRlci1zaGVsbCkiLHN0cm9rZToiIzNkM2Q0MiIsc3Ryb2tlV2lkdGg6IjcifSksSygicGF0aCIse2Q6Ik0xMTcgMTgxQzExNyAxMzQgMTU3IDExMiAyMjAgMTE2QzI2MCAxMTkgMjg3IDEzNiAzMjAgMTM2QzM1MyAxMzYgMzgwIDExOSA0MjAgMTE2QzQ4MyAxMTIgNTIzIDEzNCA1MjMgMTgxVjIxN0M1MjMgMjYzIDQ4OCAyODcgNDM5IDI4N0MzOTkgMjg3IDM2OSAyNjQgMzQ1IDI1MEMzMjkgMjQwIDMxMSAyNDAgMjk1IDI1MEMyNzEgMjY0IDI0MSAyODcgMjAxIDI4N0MxNTIgMjg3IDExNyAyNjMgMTE3IDIxN1YxODFaIixmaWxsOiJ1cmwoI3Zpc2lvbi1wbGFjZWhvbGRlci1nbGFzcykiLHN0cm9rZToiIzE3MTgxYiIsc3Ryb2tlV2lkdGg6IjUifSksSygicGF0aCIse2Q6Ik0xNDMgMTg2QzE0NSAxNDggMTc2IDEzNSAyMjYgMTM4QzI2NCAxNDEgMjg5IDE1NiAzMjAgMTU2QzM1MSAxNTYgMzc2IDE0MSA0MTQgMTM4QzQ2NCAxMzUgNDk1IDE0OCA0OTcgMTg2VjIxM0M0OTcgMjUwIDQ2OSAyNjYgNDMyIDI2NkMzOTQgMjY2IDM2OSAyNDYgMzQzIDIzNUMzMjggMjI5IDMxMiAyMjkgMjk3IDIzNUMyNzEgMjQ2IDI0NiAyNjYgMjA4IDI2NkMxNzEgMjY2IDE0MyAyNTAgMTQzIDIxM1YxODZaIixmaWxsOiJ1cmwoI3Zpc2lvbi1wbGFjZWhvbGRlci1sZW5zKSIsc3Ryb2tlOiIjMjYyYTJmIixzdHJva2VXaWR0aDoiMiJ9KSxLKCJwYXRoIix7ZDoiTTE1MSAxNzFDMTc5IDE1MCAyMTcgMTQ3IDI1MSAxNTRNMzg5IDE1NEM0MjMgMTQ3IDQ2MSAxNTAgNDg5IDE3MSIsc3Ryb2tlOiIjNGU1MzVhIixzdHJva2VXaWR0aDoiMyIsc3Ryb2tlTGluZWNhcDoicm91bmQifSksSygicGF0aCIse2Q6Ik0yNzcgMjMzQzI4OSAyMjQgMzA0IDIxOSAzMjAgMjE5QzMzNiAyMTkgMzUxIDIyNCAzNjMgMjMzIixzdHJva2U6IiMzYjQwNDYiLHN0cm9rZVdpZHRoOiI0IixzdHJva2VMaW5lY2FwOiJyb3VuZCJ9KV19KX1mdW5jdGlvbiByJCgkKXtsZXQgSj1gZ3JpZC9hcGkvZGV2aWNlLXBsYWNlaG9sZGVyLWFzc2V0P25hbWU9JHtlbmNvZGVVUklDb21wb25lbnQoJCl9YDtyZXR1cm4gdHlwZW9mIHdpbmRvdz4idSI/YC8ke0p9YDpjMShKKX1mdW5jdGlvbiBOMih7b3BlbjokLHdpZHRoOkosY2hpbGRyZW46USxzdHlsZTpaLHNpZGU6WD0icmlnaHQifSl7cmV0dXJuIEsoImFzaWRlIix7Y2xhc3NOYW1lOmBmaXhlZCB6LTM1IG1pbi13LTAgb3ZlcmZsb3ctaGlkZGVuIGJnLXBhbmVsLWJnIHRleHQtd2hpdGUvOTAgYmFja2Ryb3AtYmx1ci1bMThweF0gW2ZvbnQtZmFtaWx5Oi1hcHBsZS1zeXN0ZW0sc3lzdGVtLXVpLHNhbnMtc2VyaWZdIFt0cmFuc2l0aW9uOnRyYW5zZm9ybV8wLjI1c19lYXNlLG9wYWNpdHlfMC4yc19lYXNlXSBmbGV4IGZsZXgtY29sICR7WD09PSJsZWZ0Ij8idG9wLTAgYm90dG9tLTAgbGVmdC0wIHJvdW5kZWQtbm9uZSBib3JkZXItMCBib3JkZXItciBib3JkZXItd2hpdGUvMTAgc2hhZG93LVs4cHhfMF8zMnB4X3JnYmEoMCwwLDAsMC4zNSldIjoidG9wLTMgYm90dG9tLTMgcmlnaHQtMyByb3VuZGVkLVsxNHB4XSBib3JkZXIgYm9yZGVyLXdoaXRlLzEwIHNoYWRvdy1bMF8xMnB4XzQwcHhfcmdiYSgwLDAsMCwwLjU1KV0ifWAsc3R5bGU6e3dpZHRoOkosdHJhbnNmb3JtOiQ/InRyYW5zbGF0ZVgoMCkiOlg9PT0ibGVmdCI/InRyYW5zbGF0ZVgoLTEwMCUpIjoidHJhbnNsYXRlWChjYWxjKDEwMCUgKyAyNHB4KSkiLG9wYWNpdHk6JD8xOjAscG9pbnRlckV2ZW50czokPyJhdXRvIjoibm9uZSIsLi4uWn0sImFyaWEtaGlkZGVuIjohJCxjaGlsZHJlbjpRfSl9ZnVuY3Rpb24gTDIoe2NoaWxkcmVuOiQsc3R5bGU6Sn0pe3JldHVybiBLKCJoZWFkZXIiLHtjbGFzc05hbWU6ImZsZXggc2hyaW5rLTAgaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiBnYXAtMi41IHB4LTIuNSBweS0xLjUgcGwtMyIsc3R5bGU6SixjaGlsZHJlbjokfSl9ZnVuY3Rpb24gcjkoe2NoaWxkcmVuOiR9KXtyZXR1cm4gSygic3BhbiIse2NsYXNzTmFtZToidGV4dC1bMTFweF0gZm9udC1tZWRpdW0gdGV4dC13aGl0ZS81NSIsY2hpbGRyZW46JH0pfWZ1bmN0aW9uIHg1KHtvbkNsaWNrOiQsYXJpYUxhYmVsOko9IkNsb3NlIHBhbmVsIix0aXRsZTpRLGljb25TaXplOlo9MTZ9KXtyZXR1cm4gSygiYnV0dG9uIix7dHlwZToiYnV0dG9uIixvbkNsaWNrOiQsY2xhc3NOYW1lOiJmbGV4IGgtWzMwcHhdIHctWzMwcHhdIHNocmluay0wIGN1cnNvci1wb2ludGVyIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciByb3VuZGVkLW1kIGJvcmRlci1ub25lIGJnLXRyYW5zcGFyZW50IHAtMCB0ZXh0LVsjOGU4ZTkzXSBbdHJhbnNpdGlvbjpiYWNrZ3JvdW5kXzAuMTVzX2Vhc2UsY29sb3JfMC4xNXNfZWFzZV0gaG92ZXI6Ymctd2hpdGUvOCBob3Zlcjp0ZXh0LXdoaXRlIiwiYXJpYS1sYWJlbCI6Six0aXRsZTpRLGNoaWxkcmVuOksoRzAse3NpemU6WixzdHJva2VXaWR0aDoyfSl9KX1mdW5jdGlvbiBpOSgkLEope2xldFtRLFpdPVcobnVsbCk7cmV0dXJuIGIoKCk9PntpZighSnx8ISQpcmV0dXJuO2xldCBYPSExLFk9YXN5bmMoKT0+e3RyeXtsZXQgVj1hd2FpdChhd2FpdCBmZXRjaCgkLHtjYWNoZToibm8tc3RvcmUifSkpLmpzb24oKTtpZighWClaKFYpfWNhdGNoe319O1koKTtsZXQgcT1zZXRJbnRlcnZhbChZLDUwMDApO3JldHVybigpPT57WD0hMCxjbGVhckludGVydmFsKHEpfX0sWyQsSl0pLFF9ZnVuY3Rpb24gYTkoe3JlcG9ydDokfSl7aWYoISR8fCQudG90YWxCeXRlcz09PTApcmV0dXJuIG51bGw7bGV0e2VzdGltYXRlZEFkZGl0aW9uYWw6SixhdmFpbGFibGVCeXRlczpRLHRvdGFsQnl0ZXM6WixydW5uaW5nU2ltdWxhdG9yczpYfT0kLFk9TWF0aC5tYXgoMCxNYXRoLm1pbigxLDEtUS9aKSkscT1YK0osRz1KPT09MD8iI2U2NiI6Sjw9MT8iI2U5YTEzYiI6IiMzYjMiLFY9WT4wLjk/IiNlNjYiOlk+MC43NT8iI2U5YTEzYiI6IiMzYjMiO3JldHVybiBLKCJkaXYiLHtjbGFzc05hbWU6ImlubGluZS1mbGV4IG1heC13LWZ1bGwgbWluLXctMCBmbGV4LW5vd3JhcCBpdGVtcy1jZW50ZXIgZ2FwLTEuNSBvdmVyZmxvdy1oaWRkZW4gd2hpdGVzcGFjZS1ub3dyYXAgcHgtMiBweS1bM3B4XSByb3VuZGVkLWZ1bGwgYmctWyMxMDEwMTBdIGJvcmRlciBib3JkZXItWyMyMjJdIGZvbnQtbW9ubyB0ZXh0LVsxMXB4XSB0ZXh0LXdoaXRlLzcwIGxlYWRpbmctbm9uZSIsY2hpbGRyZW46W0soInNwYW4iLHtjbGFzc05hbWU6InNpemUtMS41IHJvdW5kZWQtWzNweF0gc2hyaW5rLTAiLHN0eWxlOntiYWNrZ3JvdW5kOkd9fSksSygic3BhbiIse2NsYXNzTmFtZToibWluLXctMCB0cnVuY2F0ZSIsY2hpbGRyZW46W0soInNwYW4iLHtjaGlsZHJlbjpbWCwiLyIscSwiIHNpbXMiXX0pLEsoInNwYW4iLHtjbGFzc05hbWU6InRleHQtd2hpdGUvNDAiLGNoaWxkcmVuOiIgwrcgIn0pLEsoInNwYW4iLHtjbGFzc05hbWU6InRleHQtd2hpdGUvNTUiLGNoaWxkcmVuOltwOShRKSwiIGZyZWUiXX0pXX0pLEsoInNwYW4iLHsiYXJpYS1oaWRkZW4iOiEwLGNsYXNzTmFtZToibWwtMC41IHctNyBoLVszcHhdIHNocmluay0wIGJnLVsjMWMxYzFjXSByb3VuZGVkLVsycHhdIG92ZXJmbG93LWhpZGRlbiBpbmxpbmUtYmxvY2siLGNoaWxkcmVuOksoInNwYW4iLHtjbGFzc05hbWU6ImJsb2NrIGgtZnVsbCB0cmFuc2l0aW9uLVt3aWR0aCxiYWNrZ3JvdW5kXSBkdXJhdGlvbi0zMDAgZWFzZS1vdXQiLHN0eWxlOnt3aWR0aDpgJHsoWSoxMDApLnRvRml4ZWQoMSl9JWAsYmFja2dyb3VuZDpWfX0pfSldfSl9ZnVuY3Rpb24gbjkoe3R5cGU6JCxzaXplOko9MjAsc2NyZWVuT246UT0hMX0pe2xldCBaPXt3aWR0aDpKLGhlaWdodDpKLHZpZXdCb3g6IjAgMCAyNCAyNCIsZmlsbDoibm9uZSIsc3Ryb2tlOiJjdXJyZW50Q29sb3IiLHN0cm9rZVdpZHRoOjEuNixzdHJva2VMaW5lY2FwOiJyb3VuZCIsc3Ryb2tlTGluZWpvaW46InJvdW5kIn07c3dpdGNoKCQpe2Nhc2UiaXBhZCI6cmV0dXJuIEsoInN2ZyIsey4uLlosY2hpbGRyZW46W1EmJksoInJlY3QiLHt4OiI1Iix5OiIzIix3aWR0aDoiMTUiLGhlaWdodDoiMTkiLHJ4OiIxLjY1IixmaWxsOiIjNDdiN2ZmIixzdHJva2U6Im5vbmUiLCJkYXRhLXRlc3RpZCI6ImRldmljZS1nbHlwaC1zY3JlZW4tb24ifSksSygicmVjdCIse3g6IjQiLHk6IjIuNSIsd2lkdGg6IjE2IixoZWlnaHQ6IjE5IixyeDoiMi41In0pLEsoImxpbmUiLHt4MToiMTIiLHkxOiIxOC41Iix4MjoiMTIiLHkyOiIxOC41In0pXX0pO2Nhc2Uid2F0Y2giOnJldHVybiBLKCJzdmciLHsuLi5aLGNoaWxkcmVuOltLKCJyZWN0Iix7eDoiNi41Iix5OiI3Iix3aWR0aDoiMTEiLGhlaWdodDoiMTAiLHJ4OiIzIn0pLEsoInBhdGgiLHtkOiJNOC41IDdsLjYtMy4yQTEuNSAxLjUgMCAwIDEgMTAuNiAyLjVoMi44YTEuNSAxLjUgMCAwIDEgMS41IDEuM0wxNS41IDcifSksSygicGF0aCIse2Q6Ik04LjUgMTdsLjYgMy4yYTEuNSAxLjUgMCAwIDAgMS41IDEuM2gyLjhhMS41IDEuNSAwIDAgMCAxLjUtMS4zbC42LTMuMiJ9KV19KTtjYXNlInZpc2lvbiI6cmV0dXJuIEsoInN2ZyIsey4uLlosY2hpbGRyZW46SygicGF0aCIse2Q6Ik0zIDExYTQgNCAwIDAgMSA0LTRoMTBhNCA0IDAgMCAxIDQgNHYyLjVhMi41IDIuNSAwIDAgMS0yLjUgMi41Yy0xLjggMC0yLjUtMS4yLTMuNS0xLjgtLjktLjUtMS42LS43LTIuNS0uN3MtMS42LjItMi41LjdjLTEgLjYtMS43IDEuOC0zLjUgMS44QTIuNSAyLjUgMCAwIDEgMyAxMy41eiJ9KX0pO2RlZmF1bHQ6cmV0dXJuIEsoInN2ZyIsey4uLlosY2hpbGRyZW46W1EmJksoInJlY3QiLHt4OiI2Iix5OiIzIix3aWR0aDoiMTEiLGhlaWdodDoiMTkiLHJ4OiIyIixmaWxsOiIjNDdiN2ZmIixzdHJva2U6Im5vbmUiLCJkYXRhLXRlc3RpZCI6ImRldmljZS1nbHlwaC1zY3JlZW4tb24ifSksSygicmVjdCIse3g6IjYuNSIseToiMi41Iix3aWR0aDoiMTEiLGhlaWdodDoiMTkiLHJ4OiIyLjgifSksSygibGluZSIse3gxOiIxMC41Iix5MToiNSIseDI6IjEzLjUiLHkyOiI1In0pXX0pfX1mdW5jdGlvbiBzOSh7ZGV2aWNlOiQsYWN0aXZlOkosc3RhcnRpbmc6USxzaHV0dGluZ0Rvd246WixvblNlbGVjdDpYLG9uU2h1dGRvd246WX0pe2xldCBxPSQuaGVscGVyLEc9JC5zdGF0ZT09PSJCb290ZWQiLFY9RTAoJC5uYW1lKSxCPXU5KCQucnVudGltZSksTj1xPyJTdHJlYW1pbmciOlE/Rz8iU3RhcnRpbmfigKYiOiJCb290aW5n4oCmIjpaPyJTaHV0dGluZyBkb3du4oCmIjpHPyJCb290ZWQiOm51bGwsej1xPyIjMzRkMzk5IjpHPyIjZTlhMTNiIjpudWxsLEw9cXx8RyxDPXE/Sj8iYmctWyMyNjM2NGNdIjoiYmctWyMyMDJiM2FdIjpKPyJiZy13aGl0ZS8xNSI6ImJnLXdoaXRlLzYiLEE9cT8idGV4dC1bI2QyZTdmZl0iOko/InRleHQtd2hpdGUvOTAiOiJ0ZXh0LXdoaXRlLzU1IjtyZXR1cm4gSygiZGl2Iix7cm9sZToiYnV0dG9uIix0YWJJbmRleDowLCJhcmlhLXByZXNzZWQiOkosb25DbGljazpYLG9uS2V5RG93bjooVSk9PntpZihVLmtleT09PSJFbnRlciJ8fFUua2V5PT09IiAiKVUucHJldmVudERlZmF1bHQoKSxYKCl9LGNsYXNzTmFtZTpgZ3JvdXAgcmVsYXRpdmUgZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTIuNSBweC0yIHB5LTEuNSByb3VuZGVkLWxnIGN1cnNvci1wb2ludGVyIHNlbGVjdC1ub25lIFt0cmFuc2l0aW9uOmJhY2tncm91bmRfMC4xMnNdICR7Sj8iYmctd2hpdGUvMTAgdGV4dC13aGl0ZSI6InRleHQtd2hpdGUvOTAgaG92ZXI6Ymctd2hpdGUvOCJ9YCxjaGlsZHJlbjpbSygiZGl2Iix7Y2xhc3NOYW1lOmByZWxhdGl2ZSBzaHJpbmstMCBncmlkIHBsYWNlLWl0ZW1zLWNlbnRlciBzaXplLTkgcm91bmRlZC1bOXB4XSBvdmVyZmxvdy1oaWRkZW4gJHtDfWAsY2hpbGRyZW46W0soInNwYW4iLHtjbGFzc05hbWU6QSxjaGlsZHJlbjpLKG45LHt0eXBlOlYsc2NyZWVuT246Qm9vbGVhbihxKX0pfSkseiYmIXEmJksoInNwYW4iLHtjbGFzc05hbWU6ImFic29sdXRlIGJvdHRvbS0wLjUgcmlnaHQtMC41IHNpemUtMS41IHJvdW5kZWQtZnVsbCByaW5nLTIgcmluZy1bIzFjMWMxZV0iLHN0eWxlOntiYWNrZ3JvdW5kOnp9fSldfSksSygiZGl2Iix7Y2xhc3NOYW1lOiJtaW4tdy0wIGZsZXgtMSIsY2hpbGRyZW46W0soImRpdiIse2NsYXNzTmFtZToidHJ1bmNhdGUgdGV4dC1bMTNweF0gZm9udC1zZW1pYm9sZCBsZWFkaW5nLXRpZ2h0IixjaGlsZHJlbjokLm5hbWV9KSxOJiZLKCJkaXYiLHtjbGFzc05hbWU6YHRydW5jYXRlIHRleHQtWzExcHhdIGxlYWRpbmctdGlnaHQgJHtxPyJ0ZXh0LVsjMzRkMzk5XSI6Sj8idGV4dC13aGl0ZS83NSI6InRleHQtd2hpdGUvNDUifWAsY2hpbGRyZW46Tn0pXX0pLEsoImRpdiIseyJkYXRhLXRlc3RpZCI6ImRldmljZS1yb3ctdHJhaWxpbmctc2xvdCIsY2xhc3NOYW1lOiJyZWxhdGl2ZSBzaHJpbmstMCB3LTggaC02IGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktZW5kIixjaGlsZHJlbjpbSygic3BhbiIse2NsYXNzTmFtZTpgYWJzb2x1dGUgcmlnaHQtMCB0ZXh0LVsxMXB4XSBmb250LW1vbm8gdGFidWxhci1udW1zIFt0cmFuc2l0aW9uOm9wYWNpdHlfMC4xMnNdICR7Sj8idGV4dC13aGl0ZS84NSI6InRleHQtd2hpdGUvNDAifSAke0w/Imdyb3VwLWhvdmVyOm9wYWNpdHktMCBncm91cC1mb2N1cy13aXRoaW46b3BhY2l0eS0wIjoiIn1gLGNoaWxkcmVuOkJ9KSxMJiZLKCJidXR0b24iLHt0eXBlOiJidXR0b24iLHRpdGxlOlo/IlNodXR0aW5nIGRvd27igKYiOiJTaHV0IGRvd24gc2ltdWxhdG9yIiwiYXJpYS1sYWJlbCI6IlNodXQgZG93biBzaW11bGF0b3IiLG9uQ2xpY2s6KFUpPT57VS5wcmV2ZW50RGVmYXVsdCgpLFUuc3RvcFByb3BhZ2F0aW9uKCksWSgpfSxkaXNhYmxlZDpaLGNsYXNzTmFtZTpgYWJzb2x1dGUgcmlnaHQtMCB0b3AtMS8yIC10cmFuc2xhdGUteS0xLzIgZ3JpZCBwbGFjZS1pdGVtcy1jZW50ZXIgc2l6ZS01IHJvdW5kZWQtbWQgb3BhY2l0eS0wIGdyb3VwLWhvdmVyOm9wYWNpdHktMTAwIGZvY3VzLXZpc2libGU6b3BhY2l0eS0xMDAgW3RyYW5zaXRpb246b3BhY2l0eV8wLjEycyxiYWNrZ3JvdW5kXzAuMTJzLGNvbG9yXzAuMTJzXSAke0o/InRleHQtd2hpdGUvODAgaG92ZXI6Ymctd2hpdGUvMjAiOiJ0ZXh0LXdoaXRlLzcwIGhvdmVyOmJnLXdoaXRlLzEyIGhvdmVyOnRleHQtd2hpdGUifWAsY2hpbGRyZW46SyhHMCx7c2l6ZToxMyxzdHJva2VXaWR0aDoyLjJ9KX0pXX0pXX0pfXZhciB6Mj0idmFyKC0tc2VydmUtc2ltLXBhbmVsLWJnKSIsajM9InZhcigtLXNlcnZlLXNpbS1wYW5lbC1iZy10cmFuc3BhcmVudCkiO3ZhciBpJD0xMjtmdW5jdGlvbiB0OSh7b3BlbjokLG9uQ2xvc2U6Six3aWR0aDpRLHNpZGU6Wj0icmlnaHQiLGRldmljZXM6WCx0b3RhbDpZPTAsaGFzTW9yZTpxPSExLG9uTG9hZE1vcmU6RyxvbkxvYWRBbGw6VixvblJlc2V0UGFnZTpCLHNlbGVjdGVkVWRpZDpOLG9uU2VsZWN0Onosc3RhcnRpbmc6TCxzaHV0dGluZ0Rvd246QyxvblNodXRkb3duOkF9KXtsZXQgSD0odHlwZW9mIHdpbmRvdz4idSI/dm9pZCAwOndpbmRvdy5fX1NJTV9QUkVWSUVXX18pPy5ncmlkTWVtb3J5RW5kcG9pbnQ/Pyh0eXBlb2Ygd2luZG93PiJ1Ij92b2lkIDA6YzEoImdyaWQvYXBpL21lbW9yeSIpKSxrPWk5KEgsJCksW0Ysd109VygiIiksVD1FMSgoKT0+e2xldCBmPUYudHJpbSgpLnRvTG93ZXJDYXNlKCk7aWYoIWZ8fCFYKXJldHVybiBYO3JldHVybiBYLmZpbHRlcigoaSk9PmkubmFtZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKGYpfHx5NShpLnJ1bnRpbWUpLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoZikpfSxbWCxGXSksUz1FKCExKTtiKCgpPT57bGV0IGY9ISFGLnRyaW0oKTtpZihmJiZxKVY/LigpO2Vsc2UgaWYoIWYmJlMuY3VycmVudClCPy4oKTtTLmN1cnJlbnQ9Zn0sW0YscSxWLEJdKTtsZXQgeD1FKG51bGwpO3JldHVybiBLKE4yLHtvcGVuOiQsd2lkdGg6USxzaWRlOlosc3R5bGU6e2JhY2tncm91bmRDb2xvcjp6Mn0sY2hpbGRyZW46W0soTDIse3N0eWxlOntqdXN0aWZ5Q29udGVudDoiZmxleC1zdGFydCIscGFkZGluZ0xlZnQ6MTYscGFkZGluZ1RvcDoxNixnYXA6NH0sY2hpbGRyZW46W0soImJ1dHRvbiIse3R5cGU6ImJ1dHRvbiIsb25DbGljazpKLGNsYXNzTmFtZToiZmxleCBoLVszMHB4XSB3LVszMHB4XSBzaHJpbmstMCBjdXJzb3ItcG9pbnRlciBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgcm91bmRlZC1tZCBib3JkZXItbm9uZSBiZy10cmFuc3BhcmVudCB0ZXh0LVsjOGU4ZTkzXSBbdHJhbnNpdGlvbjpiYWNrZ3JvdW5kXzAuMTVzX2Vhc2UsY29sb3JfMC4xNXNfZWFzZV0gaG92ZXI6Ymctd2hpdGUvOCBob3Zlcjp0ZXh0LXdoaXRlIiwiYXJpYS1sYWJlbCI6IkNsb3NlIGRldmljZXMgc2lkZWJhciIsImFyaWEtcHJlc3NlZCI6ITAsdGl0bGU6IkRldmljZXMiLGNoaWxkcmVuOksoSTAse3NpemU6MTgsc3Ryb2tlV2lkdGg6MS43NX0pfSksSyhFNSx7fSldfSksSygiZGl2Iix7Y2xhc3NOYW1lOiJweC00IHBiLTIgcHQtMC41IHNocmluay0wIixjaGlsZHJlbjpLKCJsYWJlbCIse2NsYXNzTmFtZToiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTIgcHgtMi41IGgtOCByb3VuZGVkLWxnIGJnLXdoaXRlLzYgZm9jdXMtd2l0aGluOmJnLXdoaXRlLzEwIFt0cmFuc2l0aW9uOmJhY2tncm91bmRfMC4xMnNdIixjaGlsZHJlbjpbSyhSMix7c2l6ZToxNCxzdHJva2VXaWR0aDoyLGNsYXNzTmFtZToidGV4dC13aGl0ZS80MCBzaHJpbmstMCJ9KSxLKCJpbnB1dCIse3ZhbHVlOkYsb25DaGFuZ2U6KGYpPT53KGYudGFyZ2V0LnZhbHVlKSxwbGFjZWhvbGRlcjoiU2VhcmNoIixjbGFzc05hbWU6Im1pbi13LTAgZmxleC0xIGJnLXRyYW5zcGFyZW50IGJvcmRlci1ub25lIG91dGxpbmUtbm9uZSB0ZXh0LVsxM3B4XSB0ZXh0LXdoaXRlLzkwIHBsYWNlaG9sZGVyOnRleHQtd2hpdGUvNDAifSksRiYmSygiYnV0dG9uIix7dHlwZToiYnV0dG9uIiwiYXJpYS1sYWJlbCI6IkNsZWFyIHNlYXJjaCIsb25DbGljazooKT0+dygiIiksY2xhc3NOYW1lOiJzaHJpbmstMCBncmlkIHBsYWNlLWl0ZW1zLWNlbnRlciBzaXplLTQgcm91bmRlZC1mdWxsIGJnLXdoaXRlLzE1IHRleHQtd2hpdGUvNzAgaG92ZXI6Ymctd2hpdGUvMjUiLGNoaWxkcmVuOksoRzAse3NpemU6OSxzdHJva2VXaWR0aDozfSl9KV19KX0pLEsoImRpdiIse2NsYXNzTmFtZToicmVsYXRpdmUgZmxleC0xIG1pbi1oLTAiLGNoaWxkcmVuOltLKCJkaXYiLHtyZWY6eCxvblNjcm9sbDooKT0+e2lmKEYudHJpbSgpfHwhcXx8IUcpcmV0dXJuO2xldCBmPXguY3VycmVudDtpZighZilyZXR1cm47aWYoZi5zY3JvbGxUb3ArZi5jbGllbnRIZWlnaHQ+PWYuc2Nyb2xsSGVpZ2h0LTI0MClHKCl9LGNsYXNzTmFtZToiaC1mdWxsIG1pbi1oLTAgb3ZlcmZsb3cteS1hdXRvIHB4LTQgcHktMiBbc2Nyb2xsYmFyLXdpZHRoOnRoaW5dIixjaGlsZHJlbjpUPT09bnVsbD9LKGEkLHt9KTpULmxlbmd0aD09PTA/SygiZGl2Iix7Y2xhc3NOYW1lOiJweC0yIHB5LTYgdGV4dC13aGl0ZS80MCB0ZXh0LVsxMnB4XSB0ZXh0LWNlbnRlciIsY2hpbGRyZW46Rj8iTm8gbWF0Y2hpbmcgc2ltdWxhdG9ycy4iOiJObyBpT1Mgc2ltdWxhdG9ycyBhdmFpbGFibGUuIn0pOksoWjEse2NoaWxkcmVuOltLKCJkaXYiLHtjbGFzc05hbWU6InB0LTEgcGItMSB0ZXh0LVsxMXB4XSBmb250LXNlbWlib2xkIHRleHQtd2hpdGUvNDAgdXBwZXJjYXNlIHRyYWNraW5nLXdpZGUiLGNoaWxkcmVuOiJBdmFpbGFibGUifSksSygiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGZsZXgtY29sIGdhcC0wLjUgcGItMSIsY2hpbGRyZW46VC5tYXAoKGYpPT5LKHM5LHtkZXZpY2U6ZixhY3RpdmU6Zi5kZXZpY2U9PT1OLHN0YXJ0aW5nOiEhTFtmLmRldmljZV0sc2h1dHRpbmdEb3duOiEhQ1tmLmRldmljZV0sb25TZWxlY3Q6KCk9PnooZi5kZXZpY2UpLG9uU2h1dGRvd246KCk9PkEoZi5kZXZpY2UpfSxmLmRldmljZSkpfSksIUYmJnEmJksoImRpdiIse2NsYXNzTmFtZToicHgtMiBweS0yIHRleHQtWzExcHhdIHRleHQtd2hpdGUvMzUgdGV4dC1jZW50ZXIiLGNoaWxkcmVuOlg/YCR7WC5sZW5ndGh9IG9mICR7WX1gOm51bGx9KV19KX0pLEsoImRpdiIseyJkYXRhLXRlc3RpZCI6ImRldmljZS1saXN0LXRvcC1mYWRlIixjbGFzc05hbWU6ImFic29sdXRlIHRvcC0wIGxlZnQtMCByaWdodC0wIGgtWzE2cHhdIHBvaW50ZXItZXZlbnRzLW5vbmUiLHN0eWxlOntiYWNrZ3JvdW5kOmBsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCAke3oyfSAwJSwgJHtqM30gMTAwJSlgfX0pLEsoImRpdiIseyJkYXRhLXRlc3RpZCI6ImRldmljZS1saXN0LWJvdHRvbS1mYWRlIixjbGFzc05hbWU6ImFic29sdXRlIGJvdHRvbS0wIGxlZnQtMCByaWdodC0wIGgtWzE2cHhdIHBvaW50ZXItZXZlbnRzLW5vbmUiLHN0eWxlOntiYWNrZ3JvdW5kOmBsaW5lYXItZ3JhZGllbnQodG8gdG9wLCAke3oyfSAwJSwgJHtqM30gMTAwJSlgfX0pXX0pLEsocyQse3JlcG9ydDprfSldfSl9ZnVuY3Rpb24gYSQoKXtyZXR1cm4gSyhaMSx7Y2hpbGRyZW46W0soImRpdiIse2NsYXNzTmFtZToicHgtMiBwdC0xIHBiLTEgdGV4dC1bMTFweF0gZm9udC1zZW1pYm9sZCB0ZXh0LXdoaXRlLzQwIHVwcGVyY2FzZSB0cmFja2luZy13aWRlIixjaGlsZHJlbjoiQXZhaWxhYmxlIn0pLEsoImRpdiIseyJkYXRhLXRlc3RpZCI6ImRldmljZS1saXN0LXNrZWxldG9uIixjbGFzc05hbWU6ImZsZXggZmxleC1jb2wgZ2FwLTAuNSBwYi0xIiwiYXJpYS1sYWJlbCI6IkxvYWRpbmcgc2ltdWxhdG9ycyIsImFyaWEtYnVzeSI6InRydWUiLGNoaWxkcmVuOkFycmF5LmZyb20oe2xlbmd0aDppJH0sKCQsSik9PksobiQse2luZGV4Okp9LEopKX0pXX0pfWZ1bmN0aW9uIG4kKHtpbmRleDokfSl7bGV0IEo9WyJ3LVs2MiVdIiwidy1bNzQlXSIsInctWzU4JV0iLCJ3LVs3MCVdIl1bJCU0XSxRPVsidy1bNDIlXSIsInctWzM2JV0iLCJ3LVs0OCVdIiwidy1bMzIlXSJdWyQlNF0sWj1bInctNyIsInctNiIsInctOCJdWyQlM107cmV0dXJuIEsoImRpdiIseyJkYXRhLXRlc3RpZCI6ImRldmljZS1yb3ctc2tlbGV0b24iLGNsYXNzTmFtZToiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTIuNSBweC0yIHB5LTEuNSByb3VuZGVkLWxnIHNlbGVjdC1ub25lIiwiYXJpYS1oaWRkZW4iOiJ0cnVlIixjaGlsZHJlbjpbSygiZGl2Iix7Y2xhc3NOYW1lOiJyZWxhdGl2ZSBzaHJpbmstMCBncmlkIHBsYWNlLWl0ZW1zLWNlbnRlciBzaXplLTkgcm91bmRlZC1bOXB4XSBvdmVyZmxvdy1oaWRkZW4gYmctd2hpdGUvNiIsY2hpbGRyZW46Sygic3BhbiIse2NsYXNzTmFtZToic2l6ZS00IHJvdW5kZWQtWzRweF0gYmctd2hpdGUvWzAuMTJdIn0pfSksSygiZGl2Iix7Y2xhc3NOYW1lOiJtaW4tdy0wIGZsZXgtMSBmbGV4IGZsZXgtY29sIGdhcC0xLjUiLGNoaWxkcmVuOltLKCJzcGFuIix7Y2xhc3NOYW1lOmBoLTMgcm91bmRlZC1mdWxsIGJnLXdoaXRlL1swLjEyXSAke0p9YH0pLEsoInNwYW4iLHtjbGFzc05hbWU6YGgtMi41IHJvdW5kZWQtZnVsbCBiZy13aGl0ZS9bMC4wOF0gJHtRfWB9KV19KSxLKCJzcGFuIix7Y2xhc3NOYW1lOmBzaHJpbmstMCBoLTIuNSByb3VuZGVkLWZ1bGwgYmctd2hpdGUvWzAuMDhdICR7Wn1gfSldfSl9ZnVuY3Rpb24gcyQoe3JlcG9ydDokfSl7aWYoISR8fCQudG90YWxCeXRlczw9MClyZXR1cm4gbnVsbDtyZXR1cm4gSygiZGl2Iix7Y2xhc3NOYW1lOiJzaHJpbmstMCBtaW4tdy0wIG92ZXJmbG93LWhpZGRlbiBweC0zIHB5LTIgZmxleCBqdXN0aWZ5LWNlbnRlciIsY2hpbGRyZW46SyhhOSx7cmVwb3J0OiR9KX0pfWZ1bmN0aW9uIHY1KHtwYW5lbFdpZHRoOiQsdmlzaWJsZTpKLG9uUG9pbnRlckRvd246USxhcmlhTGFiZWw6WixzaWRlOlg9InJpZ2h0In0pe2xldFtZLHFdPVcoITEpLFtHLFZdPVcoITEpLEI9WXx8RyxOPShYPT09ImxlZnQiPzA6MTIpKyQtOTtyZXR1cm4gSygiZGl2Iix7cm9sZToic2VwYXJhdG9yIiwiYXJpYS1vcmllbnRhdGlvbiI6InZlcnRpY2FsIiwiYXJpYS1sYWJlbCI6WiwiYXJpYS1oaWRkZW4iOiFKLG9uUG9pbnRlckRvd246KEwpPT57VighMCksUShMKX0sb25Qb2ludGVyVXA6KCk9PlYoITEpLG9uUG9pbnRlckNhbmNlbDooKT0+VighMSksb25Qb2ludGVyRW50ZXI6KCk9PnEoITApLG9uUG9pbnRlckxlYXZlOigpPT5xKCExKSxjbGFzc05hbWU6YGZpeGVkICR7WD09PSJsZWZ0Ij8idG9wLTAgYm90dG9tLTAiOiJ0b3AtMyBib3R0b20tMyJ9IHctNCB6LTM2IGN1cnNvci1jb2wtcmVzaXplIHRvdWNoLW5vbmUgdHJhbnNpdGlvbi1vcGFjaXR5IGR1cmF0aW9uLTIwMCAke0o/Im9wYWNpdHktMTAwIHBvaW50ZXItZXZlbnRzLWF1dG8iOiJvcGFjaXR5LTAgcG9pbnRlci1ldmVudHMtbm9uZSJ9YCxzdHlsZTpYPT09ImxlZnQiP3tsZWZ0Ok59OntyaWdodDpOfSxjaGlsZHJlbjpbSygiZGl2Iix7Y2xhc3NOYW1lOmBhYnNvbHV0ZSB0b3AtMCBib3R0b20tMCBsZWZ0LTEvMiB3LXB4IHBvaW50ZXItZXZlbnRzLW5vbmUgdHJhbnNpdGlvbi1vcGFjaXR5IGR1cmF0aW9uLTE1MCAke0I/Im9wYWNpdHktMTAwIjoib3BhY2l0eS0wIn1gLHN0eWxlOnt0cmFuc2Zvcm06InRyYW5zbGF0ZVgoLTAuNXB4KSIsYmFja2dyb3VuZDoibGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSwgcmdiYSgyNTUsMjU1LDI1NSwwKSAwJSwgcmdiYSgyNTUsMjU1LDI1NSwwLjI4KSAzMCUsIHJnYmEoMjU1LDI1NSwyNTUsMC4yOCkgNzAlLCByZ2JhKDI1NSwyNTUsMjU1LDApIDEwMCUpIn19KSxLKCJkaXYiLHtjbGFzc05hbWU6YGFic29sdXRlIHRvcC0xLzIgbGVmdC0xLzIgdy0xIGgtNyByb3VuZGVkLXhzIC10cmFuc2xhdGUteC0xLzIgLXRyYW5zbGF0ZS15LTEvMiB6LTEgcG9pbnRlci1ldmVudHMtbm9uZSBbdHJhbnNpdGlvbjpvcGFjaXR5XzAuMTVzX2Vhc2UsYmFja2dyb3VuZF8wLjE1c19lYXNlXSAke0I/Im9wYWNpdHktMTAwIjoib3BhY2l0eS0wIn0gJHtHPyJiZy1bIzlhOWE5ZV0iOiJiZy1bIzZlNmU3Ml0ifWB9KV19KX1mdW5jdGlvbiBlOSgpe2xldFskLEpdPVcoKCk9PnR5cGVvZiB3aW5kb3c8InUiJiZ3aW5kb3cubWF0Y2hNZWRpYT8uKCIocHJlZmVycy1jb250cmFzdDogbW9yZSkiKS5tYXRjaGVzPT09ITApO3JldHVybiBiKCgpPT57aWYodHlwZW9mIHdpbmRvdz4idSJ8fCF3aW5kb3cubWF0Y2hNZWRpYSlyZXR1cm47bGV0IFE9d2luZG93Lm1hdGNoTWVkaWEoIihwcmVmZXJzLWNvbnRyYXN0OiBtb3JlKSIpLFo9KCk9PkooUS5tYXRjaGVzKTtyZXR1cm4gWigpLFEuYWRkRXZlbnRMaXN0ZW5lcigiY2hhbmdlIixaKSwoKT0+US5yZW1vdmVFdmVudExpc3RlbmVyKCJjaGFuZ2UiLFopfSxbXSksJH1mdW5jdGlvbiBqNSgpe2xldFskLEpdPVcoKCk9PnR5cGVvZiB3aW5kb3c8InUiJiZ3aW5kb3cubWF0Y2hNZWRpYT8uKCIocHJlZmVycy1yZWR1Y2VkLW1vdGlvbjogcmVkdWNlKSIpLm1hdGNoZXM9PT0hMCk7cmV0dXJuIGIoKCk9PntpZih0eXBlb2Ygd2luZG93PiJ1Inx8IXdpbmRvdy5tYXRjaE1lZGlhKXJldHVybjtsZXQgUT13aW5kb3cubWF0Y2hNZWRpYSgiKHByZWZlcnMtcmVkdWNlZC1tb3Rpb246IHJlZHVjZSkiKSxaPSgpPT5KKFEubWF0Y2hlcyk7cmV0dXJuIFooKSxRLmFkZEV2ZW50TGlzdGVuZXIoImNoYW5nZSIsWiksKCk9PlEucmVtb3ZlRXZlbnRMaXN0ZW5lcigiY2hhbmdlIixaKX0sW10pLCR9dmFyICQ2PTI4MDt2YXIgaDM9IndpZHRoIDcwbXMgbGluZWFyIixSMz0id2lkdGggMC4yNHMgY3ViaWMtYmV6aWVyKDAuMjIsIDEsIDAuMzYsIDEpIixKNj0icGFkZGluZy1yaWdodCAwLjI0cyBjdWJpYy1iZXppZXIoMC4yMiwgMSwgMC4zNiwgMSkiLFE2PSJjdWJpYy1iZXppZXIoMC4yLCAwLjgyLCAwLjIyLCAxKSIsUjU9ImN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSkiLFo2PSJsaW5lYXIoMCwgMC4zMiA5JSwgMC42MiAxOCUsIDAuODUgMjclLCAxLjAxIDM2JSwgMS4wNyA0NSUsIDEuMDUgNTYlLCAxLjAyIDcwJSwgMSkiLEs2PSIwLjE2cyIsWDY9IjAuMnMiLFk2PTUscTY9e2lkbGU6MSxob3ZlcjoxLjA5LGRyYWc6MS4xMn0sRzY9e2lkbGU6IiM2ODZlNzgiLGhvdmVyOiIjYjdiYmMyIixkcmFnOiIjZjRmNmZhIn0sVjY9e2lkbGU6Mi42NSxob3Zlcjo0LjE1LGRyYWc6NC42NX0sQjY9e2lkbGU6MC4zOCxob3ZlcjowLjg2LGRyYWc6MX0saDU9bnVsbDtmdW5jdGlvbiBONigpe2lmKGg1IT1udWxsKXJldHVybiBoNTtpZih0eXBlb2YgQ1NTPiJ1Inx8dHlwZW9mIENTUy5zdXBwb3J0cyE9PSJmdW5jdGlvbiIpcmV0dXJuITE7cmV0dXJuIGg1PUNTUy5zdXBwb3J0cygiYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbiIsImxpbmVhcigwLCAxKSIpLGg1fXZhciB0JD00MCxMNj0xNCx6Nj0yNDAsQzY9MzAsVTY9MC4xNSxlJD04MCxINj0xNTAsQTY9MjUwLGczPSJzZXJ2ZS1zaW06c2ltdWxhdG9yLWZyYW1lLXNjYWxlIjtmdW5jdGlvbiBtMygkLEosUSxaKXtsZXQgWD0kKjMsWT1KPjA/TWF0aC5tYXgoMTgwLEotNDgpOlgscT1RPjAmJk51bWJlci5pc0Zpbml0ZShaKSYmWj4wP01hdGgubWF4KDE4MCwoUS0xMzYpKlopOlg7cmV0dXJuIE1hdGgubWF4KDE4MCxNYXRoLm1pbihYLFkscSkpfWZ1bmN0aW9uIGEwKCQsSixRLFosWCl7bGV0IFk9bTMoSixRLFosWCkscT1NYXRoLm1pbigyODAsWSk7cmV0dXJuIE1hdGgubWluKFksTWF0aC5tYXgocSwkKSl9ZnVuY3Rpb24gazYoJCxKLFEsWixYKXtsZXQgWT1OdW1iZXIuaXNGaW5pdGUoWCk/JCpYOiQ7cmV0dXJuIGEwKFksJCxKLFEsWil9ZnVuY3Rpb24gZzUoJCl7aWYoIU51bWJlci5pc0Zpbml0ZSgkKSlyZXR1cm4gJDtsZXQgSj10eXBlb2Ygd2luZG93PCJ1Ij9NYXRoLm1heCgxLHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvfHwxKToxO3JldHVybiBNYXRoLnJvdW5kKCQqSikvSn1mdW5jdGlvbiBmMygkLEope2lmKCQ8PTB8fEo8PTApcmV0dXJuIDA7bGV0IFE9MC41NSxaPSQqSipRLyhKK1EqJCk7cmV0dXJuIE1hdGgubWluKHQkLFopfWZ1bmN0aW9uIE82KCQsSixRKXtsZXQgWj0kLFg9UTtmb3IobGV0IFkgb2YgSil7bGV0IHE9TWF0aC5hYnMoJC1ZKTtpZihxPFgpWj1ZLFg9cX1yZXR1cm4gWn1mdW5jdGlvbiBGNigkKXtsZXR7ZnJvbTpKLHRvOlEsdmVsb2NpdHk6WixzdGlmZm5lc3M6WCxkYW1waW5nOlksb25VcGRhdGU6cSxvbkNvbXBsZXRlOkd9PSQsVj0wLjQsQj0wLjAzMzMzMzMzMzMzMzMzMzMzLE49Six6PVosTD1wZXJmb3JtYW5jZS5ub3coKSxDPTAsQT0hMSxVPShIKT0+e2lmKEEpcmV0dXJuO2xldCBrPU1hdGgubWluKChILUwpLzEwMDAsMC4wMzMzMzMzMzMzMzMzMzMzMyk7TD1IO2xldCBGPS1YKihOLVEpLVkqejtpZih6Kz1GKmssTis9eiprLE1hdGguYWJzKHopPDAuNCYmTWF0aC5hYnMoTi1RKTwwLjQpe3EoUSksRz8uKCk7cmV0dXJufXEoTiksQz1yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoVSl9O3JldHVybiBDPXJlcXVlc3RBbmltYXRpb25GcmFtZShVKSwoKT0+e2lmKEE9ITAsQyljYW5jZWxBbmltYXRpb25GcmFtZShDKX19ZnVuY3Rpb24gTTYoJCl7aWYoJC5sZW5ndGg8MilyZXR1cm4gMDtsZXQgSj0kWyQubGVuZ3RoLTFdLFE9JFswXTtmb3IobGV0IFg9JC5sZW5ndGgtMTtYPj0wO1gtLSlpZihKLnQtJFtYXS50Pj1lJCl7UT0kW1hdO2JyZWFrfWxldCBaPShKLnQtUS50KS8xMDAwO3JldHVybiBaPjA/KEoueC1RLngpL1o6MH12YXIgVzY9ImRyb3Atc2hhZG93KDAgMC41cHggMXB4IHJnYmEoMCwwLDAsMC4xKSkgZHJvcC1zaGFkb3coMCAycHggNXB4IHJnYmEoMCwwLDAsMC4xMykpIjtmdW5jdGlvbiAkSih7YXJjOiQscGhhc2U6SixyZWR1Y2VkTW90aW9uOlEsaGlnaENvbnRyYXN0OlosZm9jdXNWaXNpYmxlOlh9KXtsZXQgWT1KIT09ImlkbGUiLHE9Wj8xLjEyOjEsRz1RPzE6cTZbSl0sVj1WNltKXSpxLEI9Wj8xOkI2W0pdLE49WT9LNjpYNix6PVk/UTY6UjUsTD1ZJiZONigpP1o2OnosQz1RPyJub25lIjpgdHJhbnNmb3JtICR7Tn0gJHtMfWAsQT1RPyJub25lIjpgc3Ryb2tlICR7Tn0gJHt6fSwgc3Ryb2tlLXdpZHRoICR7Tn0gJHt6fWAsVT0kLnZpZXdCb3hTaXplLEg9JC5kLGs9e3RyYW5zZm9ybTpgdHJhbnNsYXRlM2QoMCwwLDApIHNjYWxlKCR7R30pYCx0cmFuc2Zvcm1PcmlnaW46IjEwMCUgMTAwJSIsdHJhbnNpdGlvbjpDLHdpbGxDaGFuZ2U6UT92b2lkIDA6InRyYW5zZm9ybSIsYmFja2ZhY2VWaXNpYmlsaXR5OiJoaWRkZW4iLFdlYmtpdEJhY2tmYWNlVmlzaWJpbGl0eToiaGlkZGVuIn07cmV0dXJuIEsoInN2ZyIse3dpZHRoOlUsaGVpZ2h0OlUsdmlld0JveDpgMCAwICR7VX0gJHtVfWAsZmlsbDoibm9uZSIseG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiYXJpYS1oaWRkZW4iOiJ0cnVlIixzaGFwZVJlbmRlcmluZzoiZ2VvbWV0cmljUHJlY2lzaW9uIixzdHlsZTp7ZGlzcGxheToiYmxvY2siLG92ZXJmbG93OiJ2aXNpYmxlIixjdXJzb3I6ImluaGVyaXQiLHRvdWNoQWN0aW9uOiJub25lIixwb2ludGVyRXZlbnRzOiJub25lIn0sY2hpbGRyZW46W0soImciLHsiYXJpYS1oaWRkZW4iOiJ0cnVlIixzdHlsZTp7cG9pbnRlckV2ZW50czoibm9uZSJ9LGNoaWxkcmVuOltLKCJwYXRoIix7ZDpILGZpbGw6Im5vbmUiLHN0cm9rZToicmdiYSgxMCwgMTMyLCAyNTUsIDAuOTUpIixzdHJva2VXaWR0aDooWTYqMis2KSpxLHN0cm9rZUxpbmVjYXA6InJvdW5kIix2ZWN0b3JFZmZlY3Q6Im5vbi1zY2FsaW5nLXN0cm9rZSIsc3R5bGU6e29wYWNpdHk6WD8wLjk1OjAsdHJhbnNpdGlvbjpRPyJvcGFjaXR5IDgwbXMgbGluZWFyIjpgb3BhY2l0eSAyMDBtcyAke1I1fWAsZmlsdGVyOiJkcm9wLXNoYWRvdygwIDAgMnB4IHJnYmEoMTAsMTMyLDI1NSwwLjU1KSkgZHJvcC1zaGFkb3coMCAwIDRweCByZ2JhKDEwLDEzMiwyNTUsMC4zMikpIn19KSxLKCJwYXRoIix7ZDpILGZpbGw6Im5vbmUiLHN0cm9rZToicmdiYSgyNTUsMjU1LDI1NSwwLjk1KSIsc3Ryb2tlV2lkdGg6MS41KnEsc3Ryb2tlTGluZWNhcDoicm91bmQiLHZlY3RvckVmZmVjdDoibm9uLXNjYWxpbmctc3Ryb2tlIixzdHlsZTp7b3BhY2l0eTpYPzAuNzowLHRyYW5zaXRpb246UT8ib3BhY2l0eSA4MG1zIGxpbmVhciI6YG9wYWNpdHkgMjAwbXMgJHtSNX1gfX0pXX0pLEsoImciLHsiYXJpYS1oaWRkZW4iOiJ0cnVlIixzdHlsZTprLGNoaWxkcmVuOksoImciLHtzdHlsZTp7cG9pbnRlckV2ZW50czoibm9uZSJ9LGNoaWxkcmVuOltLKCJwYXRoIix7ZDpILHN0cm9rZToiIzM0MzYzYiIsc3Ryb2tlV2lkdGg6VisyLjIqcSxzdHJva2VMaW5lY2FwOiJyb3VuZCIsdmVjdG9yRWZmZWN0OiJub24tc2NhbGluZy1zdHJva2UiLHN0eWxlOntvcGFjaXR5Ok1hdGgubWluKDEsQiswLjA4KSx0cmFuc2l0aW9uOmAke0F9LCBvcGFjaXR5ICR7Tn0gJHt6fWAsZmlsdGVyOlc2fX0pLEsoInBhdGgiLHtkOkgsc3Ryb2tlOkc2W0pdLHN0cm9rZVdpZHRoOlYsc3Ryb2tlTGluZWNhcDoicm91bmQiLHZlY3RvckVmZmVjdDoibm9uLXNjYWxpbmctc3Ryb2tlIixzdHlsZTp7b3BhY2l0eTpCLHRyYW5zaXRpb246YCR7QX0sIG9wYWNpdHkgJHtOfSAke3p9YCxmaWx0ZXI6VzZ9fSldfSl9KV19KX1mdW5jdGlvbiBQNih7c2ltdWxhdG9yUmVzaXplOiQsZGV2aWNlVHlwZTpKLHN0cmVhbUNvbmZpZzpRLGNvbnRhaW5lcldpZHRoOlosY29udGFpbmVySGVpZ2h0Olh9KXtsZXQgWT1qNSgpLHE9ZTkoKSxbRyxWXT1XKCExKSxCPUUxKCgpPT5PMyh7dHlwZTpKLGNvbmZpZzpRPz9udWxsLGNvbnRhaW5lcldpZHRoOlosY29udGFpbmVySGVpZ2h0Olh9KSxbSixRLFosWF0pLE49JC5pc1Jlc2l6aW5nfHwkLmlzSW5lcnRpYT8iZHJhZyI6JC5oYW5kbGVIb3ZlcmVkPyJob3ZlciI6ImlkbGUiO3JldHVybiBLKCJkaXYiLHtyb2xlOiJzZXBhcmF0b3IiLCJhcmlhLWxhYmVsIjoiUmVzaXplIHNpbXVsYXRvciB3aWR0aC4gRHJhZyB0aGUgY29ybmVyIG9yIHVzZSBMZWZ0IGFuZCBSaWdodCBBcnJvdyBrZXlzOyBob2xkIFNoaWZ0IGZvciBsYXJnZXIgc3RlcHMuIiwiYXJpYS1vcmllbnRhdGlvbiI6InZlcnRpY2FsIiwiYXJpYS12YWx1ZW1pbiI6TWF0aC5yb3VuZCgkLm1pbldpZHRoKSwiYXJpYS12YWx1ZW1heCI6TWF0aC5yb3VuZCgkLm1heFdpZHRoKSwiYXJpYS12YWx1ZW5vdyI6TWF0aC5yb3VuZCgkLmNvbW1pdHRlZFdpZHRoKSx0YWJJbmRleDowLHJlZjokLmhhbmRsZVJlZixvbktleURvd246JC5vbktleURvd24sb25Qb2ludGVyRG93bjokLm9uUG9pbnRlckRvd24sb25Qb2ludGVyTW92ZTokLm9uUG9pbnRlck1vdmUsb25Qb2ludGVyVXA6JC5vblBvaW50ZXJFbmQsb25Qb2ludGVyQ2FuY2VsOiQub25Qb2ludGVyRW5kLG9uTG9zdFBvaW50ZXJDYXB0dXJlOiQub25Qb2ludGVyRW5kLG9uUG9pbnRlckVudGVyOigpPT4kLnNldEhhbmRsZUhvdmVyZWQoITApLG9uUG9pbnRlckxlYXZlOigpPT4kLnNldEhhbmRsZUhvdmVyZWQoITEpLG9uRm9jdXM6KHopPT57Vih6LmN1cnJlbnRUYXJnZXQubWF0Y2hlcz8uKCI6Zm9jdXMtdmlzaWJsZSIpPz8hMSl9LG9uQmx1cjooKT0+VighMSksc3R5bGU6e3Bvc2l0aW9uOiJhYnNvbHV0ZSIscmlnaHQ6LTE0LGJvdHRvbTotMTQsd2lkdGg6NjAsaGVpZ2h0OjYwLGJvcmRlcjoibm9uZSIscGFkZGluZzowLG1hcmdpbjowLGRpc3BsYXk6ImZsZXgiLGFsaWduSXRlbXM6ImZsZXgtZW5kIixqdXN0aWZ5Q29udGVudDoiZmxleC1lbmQiLGJhY2tncm91bmQ6InRyYW5zcGFyZW50IixjdXJzb3I6Im53c2UtcmVzaXplIix0b3VjaEFjdGlvbjoibm9uZSIscG9pbnRlckV2ZW50czoiYXV0byIsb3V0bGluZToibm9uZSIsekluZGV4OjI1LFdlYmtpdFRhcEhpZ2hsaWdodENvbG9yOiJ0cmFuc3BhcmVudCJ9LGNoaWxkcmVuOksoJEose2FyYzpCLHBoYXNlOk4scmVkdWNlZE1vdGlvbjpZLGhpZ2hDb250cmFzdDpxLGZvY3VzVmlzaWJsZTpHfSl9KX1mdW5jdGlvbiBKSigkKXtpZighJHx8dHlwZW9mIGRvY3VtZW50PiJ1IilyZXR1cm47bGV0IEo9ZG9jdW1lbnQuaGVhZHx8ZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImhlYWQiKVswXSxRPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInN0eWxlIik7US50eXBlPSJ0ZXh0L2NzcyIsSi5hcHBlbmRDaGlsZChRKSxRLnN0eWxlU2hlZXQ/US5zdHlsZVNoZWV0LmNzc1RleHQ9JDpRLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCQpKX12YXIgUUo9KCQpPT57c3dpdGNoKCQpe2Nhc2Uic3VjY2VzcyI6cmV0dXJuIFhKO2Nhc2UiaW5mbyI6cmV0dXJuIHFKO2Nhc2Uid2FybmluZyI6cmV0dXJuIFlKO2Nhc2UiZXJyb3IiOnJldHVybiBHSjtkZWZhdWx0OnJldHVybiBudWxsfX0sWko9QXJyYXkoMTIpLmZpbGwoMCksS0o9KHt2aXNpYmxlOiQsY2xhc3NOYW1lOkp9KT0+e3JldHVybiBtLmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZTpbInNvbm5lci1sb2FkaW5nLXdyYXBwZXIiLEpdLmZpbHRlcihCb29sZWFuKS5qb2luKCIgIiksImRhdGEtdmlzaWJsZSI6JH0sbS5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6InNvbm5lci1zcGlubmVyIn0sWkoubWFwKChRLFopPT5tLmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZToic29ubmVyLWxvYWRpbmctYmFyIixrZXk6YHNwaW5uZXItYmFyLSR7Wn1gfSkpKSl9LFhKPW0uY3JlYXRlRWxlbWVudCgic3ZnIix7eG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIix2aWV3Qm94OiIwIDAgMjAgMjAiLGZpbGw6ImN1cnJlbnRDb2xvciIsaGVpZ2h0OiIyMCIsd2lkdGg6IjIwIn0sbS5jcmVhdGVFbGVtZW50KCJwYXRoIix7ZmlsbFJ1bGU6ImV2ZW5vZGQiLGQ6Ik0xMCAxOGE4IDggMCAxMDAtMTYgOCA4IDAgMDAwIDE2em0zLjg1Ny05LjgwOWEuNzUuNzUgMCAwMC0xLjIxNC0uODgybC0zLjQ4MyA0Ljc5LTEuODgtMS44OGEuNzUuNzUgMCAxMC0xLjA2IDEuMDYxbDIuNSAyLjVhLjc1Ljc1IDAgMDAxLjEzNy0uMDg5bDQtNS41eiIsY2xpcFJ1bGU6ImV2ZW5vZGQifSkpLFlKPW0uY3JlYXRlRWxlbWVudCgic3ZnIix7eG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIix2aWV3Qm94OiIwIDAgMjQgMjQiLGZpbGw6ImN1cnJlbnRDb2xvciIsaGVpZ2h0OiIyMCIsd2lkdGg6IjIwIn0sbS5jcmVhdGVFbGVtZW50KCJwYXRoIix7ZmlsbFJ1bGU6ImV2ZW5vZGQiLGQ6Ik05LjQwMSAzLjAwM2MxLjE1NS0yIDQuMDQzLTIgNS4xOTcgMGw3LjM1NSAxMi43NDhjMS4xNTQgMi0uMjkgNC41LTIuNTk5IDQuNUg0LjY0NWMtMi4zMDkgMC0zLjc1Mi0yLjUtMi41OTgtNC41TDkuNCAzLjAwM3pNMTIgOC4yNWEuNzUuNzUgMCAwMS43NS43NXYzLjc1YS43NS43NSAwIDAxLTEuNSAwVjlhLjc1Ljc1IDAgMDEuNzUtLjc1em0wIDguMjVhLjc1Ljc1IDAgMTAwLTEuNS43NS43NSAwIDAwMCAxLjV6IixjbGlwUnVsZToiZXZlbm9kZCJ9KSkscUo9bS5jcmVhdGVFbGVtZW50KCJzdmciLHt4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLHZpZXdCb3g6IjAgMCAyMCAyMCIsZmlsbDoiY3VycmVudENvbG9yIixoZWlnaHQ6IjIwIix3aWR0aDoiMjAifSxtLmNyZWF0ZUVsZW1lbnQoInBhdGgiLHtmaWxsUnVsZToiZXZlbm9kZCIsZDoiTTE4IDEwYTggOCAwIDExLTE2IDAgOCA4IDAgMDExNiAwem0tNy00YTEgMSAwIDExLTIgMCAxIDEgMCAwMTIgMHpNOSA5YS43NS43NSAwIDAwMCAxLjVoLjI1M2EuMjUuMjUgMCAwMS4yNDQuMzA0bC0uNDU5IDIuMDY2QTEuNzUgMS43NSAwIDAwMTAuNzQ3IDE1SDExYS43NS43NSAwIDAwMC0xLjVoLS4yNTNhLjI1LjI1IDAgMDEtLjI0NC0uMzA0bC40NTktMi4wNjZBMS43NSAxLjc1IDAgMDA5LjI1MyA5SDl6IixjbGlwUnVsZToiZXZlbm9kZCJ9KSksR0o9bS5jcmVhdGVFbGVtZW50KCJzdmciLHt4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLHZpZXdCb3g6IjAgMCAyMCAyMCIsZmlsbDoiY3VycmVudENvbG9yIixoZWlnaHQ6IjIwIix3aWR0aDoiMjAifSxtLmNyZWF0ZUVsZW1lbnQoInBhdGgiLHtmaWxsUnVsZToiZXZlbm9kZCIsZDoiTTE4IDEwYTggOCAwIDExLTE2IDAgOCA4IDAgMDExNiAwem0tOC01YS43NS43NSAwIDAxLjc1Ljc1djQuNWEuNzUuNzUgMCAwMS0xLjUgMHYtNC41QS43NS43NSAwIDAxMTAgNXptMCAxMGExIDEgMCAxMDAtMiAxIDEgMCAwMDAgMnoiLGNsaXBSdWxlOiJldmVub2RkIn0pKSxWSj1tLmNyZWF0ZUVsZW1lbnQoInN2ZyIse3htbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsd2lkdGg6IjEyIixoZWlnaHQ6IjEyIix2aWV3Qm94OiIwIDAgMjQgMjQiLGZpbGw6Im5vbmUiLHN0cm9rZToiY3VycmVudENvbG9yIixzdHJva2VXaWR0aDoiMS41IixzdHJva2VMaW5lY2FwOiJyb3VuZCIsc3Ryb2tlTGluZWpvaW46InJvdW5kIn0sbS5jcmVhdGVFbGVtZW50KCJsaW5lIix7eDE6IjE4Iix5MToiNiIseDI6IjYiLHkyOiIxOCJ9KSxtLmNyZWF0ZUVsZW1lbnQoImxpbmUiLHt4MToiNiIseTE6IjYiLHgyOiIxOCIseTI6IjE4In0pKSxCSj0oKT0+e2xldFskLEpdPW0udXNlU3RhdGUoZG9jdW1lbnQuaGlkZGVuKTtyZXR1cm4gbS51c2VFZmZlY3QoKCk9PntsZXQgUT0oKT0+e0ooZG9jdW1lbnQuaGlkZGVuKX07cmV0dXJuIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoInZpc2liaWxpdHljaGFuZ2UiLFEpLCgpPT53aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigidmlzaWJpbGl0eWNoYW5nZSIsUSl9LFtdKSwkfSxwMz0xO2NsYXNzIFQ2e2NvbnN0cnVjdG9yKCl7dGhpcy5zdWJzY3JpYmU9KCQpPT57cmV0dXJuIHRoaXMuc3Vic2NyaWJlcnMucHVzaCgkKSwoKT0+e2xldCBKPXRoaXMuc3Vic2NyaWJlcnMuaW5kZXhPZigkKTt0aGlzLnN1YnNjcmliZXJzLnNwbGljZShKLDEpfX0sdGhpcy5wdWJsaXNoPSgkKT0+e3RoaXMuc3Vic2NyaWJlcnMuZm9yRWFjaCgoSik9PkooJCkpfSx0aGlzLmFkZFRvYXN0PSgkKT0+e3RoaXMucHVibGlzaCgkKSx0aGlzLnRvYXN0cz1bLi4udGhpcy50b2FzdHMsJF19LHRoaXMuY3JlYXRlPSgkKT0+e3ZhciBKO2xldHttZXNzYWdlOlEsLi4uWn09JCxYPXR5cGVvZigkPT1udWxsP3ZvaWQgMDokLmlkKT09PSJudW1iZXIifHwoKEo9JC5pZCk9PW51bGw/dm9pZCAwOkoubGVuZ3RoKT4wPyQuaWQ6cDMrKyxZPXRoaXMudG9hc3RzLmZpbmQoKEcpPT57cmV0dXJuIEcuaWQ9PT1YfSkscT0kLmRpc21pc3NpYmxlPT09dm9pZCAwPyEwOiQuZGlzbWlzc2libGU7aWYodGhpcy5kaXNtaXNzZWRUb2FzdHMuaGFzKFgpKXRoaXMuZGlzbWlzc2VkVG9hc3RzLmRlbGV0ZShYKTtpZihZKXRoaXMudG9hc3RzPXRoaXMudG9hc3RzLm1hcCgoRyk9PntpZihHLmlkPT09WClyZXR1cm4gdGhpcy5wdWJsaXNoKHsuLi5HLC4uLiQsaWQ6WCx0aXRsZTpRfSksey4uLkcsLi4uJCxpZDpYLGRpc21pc3NpYmxlOnEsdGl0bGU6UX07cmV0dXJuIEd9KTtlbHNlIHRoaXMuYWRkVG9hc3Qoe3RpdGxlOlEsLi4uWixkaXNtaXNzaWJsZTpxLGlkOlh9KTtyZXR1cm4gWH0sdGhpcy5kaXNtaXNzPSgkKT0+e2lmKCQpdGhpcy5kaXNtaXNzZWRUb2FzdHMuYWRkKCQpLHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+dGhpcy5zdWJzY3JpYmVycy5mb3JFYWNoKChKKT0+Sih7aWQ6JCxkaXNtaXNzOiEwfSkpKTtlbHNlIHRoaXMudG9hc3RzLmZvckVhY2goKEopPT57dGhpcy5zdWJzY3JpYmVycy5mb3JFYWNoKChRKT0+USh7aWQ6Si5pZCxkaXNtaXNzOiEwfSkpfSk7cmV0dXJuICR9LHRoaXMubWVzc2FnZT0oJCxKKT0+e3JldHVybiB0aGlzLmNyZWF0ZSh7Li4uSixtZXNzYWdlOiR9KX0sdGhpcy5lcnJvcj0oJCxKKT0+e3JldHVybiB0aGlzLmNyZWF0ZSh7Li4uSixtZXNzYWdlOiQsdHlwZToiZXJyb3IifSl9LHRoaXMuc3VjY2Vzcz0oJCxKKT0+e3JldHVybiB0aGlzLmNyZWF0ZSh7Li4uSix0eXBlOiJzdWNjZXNzIixtZXNzYWdlOiR9KX0sdGhpcy5pbmZvPSgkLEopPT57cmV0dXJuIHRoaXMuY3JlYXRlKHsuLi5KLHR5cGU6ImluZm8iLG1lc3NhZ2U6JH0pfSx0aGlzLndhcm5pbmc9KCQsSik9PntyZXR1cm4gdGhpcy5jcmVhdGUoey4uLkosdHlwZToid2FybmluZyIsbWVzc2FnZTokfSl9LHRoaXMubG9hZGluZz0oJCxKKT0+e3JldHVybiB0aGlzLmNyZWF0ZSh7Li4uSix0eXBlOiJsb2FkaW5nIixtZXNzYWdlOiR9KX0sdGhpcy5wcm9taXNlPSgkLEopPT57aWYoIUopcmV0dXJuO2xldCBRPXZvaWQgMDtpZihKLmxvYWRpbmchPT12b2lkIDApUT10aGlzLmNyZWF0ZSh7Li4uSixwcm9taXNlOiQsdHlwZToibG9hZGluZyIsbWVzc2FnZTpKLmxvYWRpbmcsZGVzY3JpcHRpb246dHlwZW9mIEouZGVzY3JpcHRpb24hPT0iZnVuY3Rpb24iP0ouZGVzY3JpcHRpb246dm9pZCAwfSk7bGV0IFo9UHJvbWlzZS5yZXNvbHZlKCQgaW5zdGFuY2VvZiBGdW5jdGlvbj8kKCk6JCksWD1RIT09dm9pZCAwLFkscT1aLnRoZW4oYXN5bmMoVik9PntpZihZPVsicmVzb2x2ZSIsVl0sbS5pc1ZhbGlkRWxlbWVudChWKSlYPSExLHRoaXMuY3JlYXRlKHtpZDpRLHR5cGU6ImRlZmF1bHQiLG1lc3NhZ2U6Vn0pO2Vsc2UgaWYoTEooVikmJiFWLm9rKXtYPSExO2xldCBOPXR5cGVvZiBKLmVycm9yPT09ImZ1bmN0aW9uIj9hd2FpdCBKLmVycm9yKGBIVFRQIGVycm9yISBzdGF0dXM6ICR7Vi5zdGF0dXN9YCk6Si5lcnJvcix6PXR5cGVvZiBKLmRlc2NyaXB0aW9uPT09ImZ1bmN0aW9uIj9hd2FpdCBKLmRlc2NyaXB0aW9uKGBIVFRQIGVycm9yISBzdGF0dXM6ICR7Vi5zdGF0dXN9YCk6Si5kZXNjcmlwdGlvbixDPXR5cGVvZiBOPT09Im9iamVjdCImJiFtLmlzVmFsaWRFbGVtZW50KE4pP046e21lc3NhZ2U6Tn07dGhpcy5jcmVhdGUoe2lkOlEsdHlwZToiZXJyb3IiLGRlc2NyaXB0aW9uOnosLi4uQ30pfWVsc2UgaWYoViBpbnN0YW5jZW9mIEVycm9yKXtYPSExO2xldCBOPXR5cGVvZiBKLmVycm9yPT09ImZ1bmN0aW9uIj9hd2FpdCBKLmVycm9yKFYpOkouZXJyb3Isej10eXBlb2YgSi5kZXNjcmlwdGlvbj09PSJmdW5jdGlvbiI/YXdhaXQgSi5kZXNjcmlwdGlvbihWKTpKLmRlc2NyaXB0aW9uLEM9dHlwZW9mIE49PT0ib2JqZWN0IiYmIW0uaXNWYWxpZEVsZW1lbnQoTik/Tjp7bWVzc2FnZTpOfTt0aGlzLmNyZWF0ZSh7aWQ6USx0eXBlOiJlcnJvciIsZGVzY3JpcHRpb246eiwuLi5DfSl9ZWxzZSBpZihKLnN1Y2Nlc3MhPT12b2lkIDApe1g9ITE7bGV0IE49dHlwZW9mIEouc3VjY2Vzcz09PSJmdW5jdGlvbiI/YXdhaXQgSi5zdWNjZXNzKFYpOkouc3VjY2Vzcyx6PXR5cGVvZiBKLmRlc2NyaXB0aW9uPT09ImZ1bmN0aW9uIj9hd2FpdCBKLmRlc2NyaXB0aW9uKFYpOkouZGVzY3JpcHRpb24sQz10eXBlb2YgTj09PSJvYmplY3QiJiYhbS5pc1ZhbGlkRWxlbWVudChOKT9OOnttZXNzYWdlOk59O3RoaXMuY3JlYXRlKHtpZDpRLHR5cGU6InN1Y2Nlc3MiLGRlc2NyaXB0aW9uOnosLi4uQ30pfX0pLmNhdGNoKGFzeW5jKFYpPT57aWYoWT1bInJlamVjdCIsVl0sSi5lcnJvciE9PXZvaWQgMCl7WD0hMTtsZXQgQj10eXBlb2YgSi5lcnJvcj09PSJmdW5jdGlvbiI/YXdhaXQgSi5lcnJvcihWKTpKLmVycm9yLE49dHlwZW9mIEouZGVzY3JpcHRpb249PT0iZnVuY3Rpb24iP2F3YWl0IEouZGVzY3JpcHRpb24oVik6Si5kZXNjcmlwdGlvbixMPXR5cGVvZiBCPT09Im9iamVjdCImJiFtLmlzVmFsaWRFbGVtZW50KEIpP0I6e21lc3NhZ2U6Qn07dGhpcy5jcmVhdGUoe2lkOlEsdHlwZToiZXJyb3IiLGRlc2NyaXB0aW9uOk4sLi4uTH0pfX0pLmZpbmFsbHkoKCk9PntpZihYKXRoaXMuZGlzbWlzcyhRKSxRPXZvaWQgMDtKLmZpbmFsbHk9PW51bGx8fEouZmluYWxseS5jYWxsKEopfSksRz0oKT0+bmV3IFByb21pc2UoKFYsQik9PnEudGhlbigoKT0+WVswXT09PSJyZWplY3QiP0IoWVsxXSk6VihZWzFdKSkuY2F0Y2goQikpO2lmKHR5cGVvZiBRIT09InN0cmluZyImJnR5cGVvZiBRIT09Im51bWJlciIpcmV0dXJue3Vud3JhcDpHfTtlbHNlIHJldHVybiBPYmplY3QuYXNzaWduKFEse3Vud3JhcDpHfSl9LHRoaXMuY3VzdG9tPSgkLEopPT57bGV0IFE9KEo9PW51bGw/dm9pZCAwOkouaWQpfHxwMysrO3JldHVybiB0aGlzLmNyZWF0ZSh7anN4OiQoUSksaWQ6USwuLi5KfSksUX0sdGhpcy5nZXRBY3RpdmVUb2FzdHM9KCk9PntyZXR1cm4gdGhpcy50b2FzdHMuZmlsdGVyKCgkKT0+IXRoaXMuZGlzbWlzc2VkVG9hc3RzLmhhcygkLmlkKSl9LHRoaXMuc3Vic2NyaWJlcnM9W10sdGhpcy50b2FzdHM9W10sdGhpcy5kaXNtaXNzZWRUb2FzdHM9bmV3IFNldH19dmFyIEswPW5ldyBUNixOSj0oJCxKKT0+e2xldCBRPShKPT1udWxsP3ZvaWQgMDpKLmlkKXx8cDMrKztyZXR1cm4gSzAuYWRkVG9hc3Qoe3RpdGxlOiQsLi4uSixpZDpRfSksUX0sTEo9KCQpPT57cmV0dXJuICQmJnR5cGVvZiAkPT09Im9iamVjdCImJiJvayJpbiAkJiZ0eXBlb2YgJC5vaz09PSJib29sZWFuIiYmInN0YXR1cyJpbiAkJiZ0eXBlb2YgJC5zdGF0dXM9PT0ibnVtYmVyIn0seko9TkosQ0o9KCk9PkswLnRvYXN0cyxVSj0oKT0+SzAuZ2V0QWN0aXZlVG9hc3RzKCksZDI9T2JqZWN0LmFzc2lnbih6Six7c3VjY2VzczpLMC5zdWNjZXNzLGluZm86SzAuaW5mbyx3YXJuaW5nOkswLndhcm5pbmcsZXJyb3I6SzAuZXJyb3IsY3VzdG9tOkswLmN1c3RvbSxtZXNzYWdlOkswLm1lc3NhZ2UscHJvbWlzZTpLMC5wcm9taXNlLGRpc21pc3M6SzAuZGlzbWlzcyxsb2FkaW5nOkswLmxvYWRpbmd9LHtnZXRIaXN0b3J5OkNKLGdldFRvYXN0czpVSn0pO0pKKCJbZGF0YS1zb25uZXItdG9hc3Rlcl1bZGlyPWx0cl0saHRtbFtkaXI9bHRyXXstLXRvYXN0LWljb24tbWFyZ2luLXN0YXJ0Oi0zcHg7LS10b2FzdC1pY29uLW1hcmdpbi1lbmQ6NHB4Oy0tdG9hc3Qtc3ZnLW1hcmdpbi1zdGFydDotMXB4Oy0tdG9hc3Qtc3ZnLW1hcmdpbi1lbmQ6MHB4Oy0tdG9hc3QtYnV0dG9uLW1hcmdpbi1zdGFydDphdXRvOy0tdG9hc3QtYnV0dG9uLW1hcmdpbi1lbmQ6MDstLXRvYXN0LWNsb3NlLWJ1dHRvbi1zdGFydDowOy0tdG9hc3QtY2xvc2UtYnV0dG9uLWVuZDp1bnNldDstLXRvYXN0LWNsb3NlLWJ1dHRvbi10cmFuc2Zvcm06dHJhbnNsYXRlKC0zNSUsIC0zNSUpfVtkYXRhLXNvbm5lci10b2FzdGVyXVtkaXI9cnRsXSxodG1sW2Rpcj1ydGxdey0tdG9hc3QtaWNvbi1tYXJnaW4tc3RhcnQ6NHB4Oy0tdG9hc3QtaWNvbi1tYXJnaW4tZW5kOi0zcHg7LS10b2FzdC1zdmctbWFyZ2luLXN0YXJ0OjBweDstLXRvYXN0LXN2Zy1tYXJnaW4tZW5kOi0xcHg7LS10b2FzdC1idXR0b24tbWFyZ2luLXN0YXJ0OjA7LS10b2FzdC1idXR0b24tbWFyZ2luLWVuZDphdXRvOy0tdG9hc3QtY2xvc2UtYnV0dG9uLXN0YXJ0OnVuc2V0Oy0tdG9hc3QtY2xvc2UtYnV0dG9uLWVuZDowOy0tdG9hc3QtY2xvc2UtYnV0dG9uLXRyYW5zZm9ybTp0cmFuc2xhdGUoMzUlLCAtMzUlKX1bZGF0YS1zb25uZXItdG9hc3Rlcl17cG9zaXRpb246Zml4ZWQ7d2lkdGg6dmFyKC0td2lkdGgpO2ZvbnQtZmFtaWx5OnVpLXNhbnMtc2VyaWYsc3lzdGVtLXVpLC1hcHBsZS1zeXN0ZW0sQmxpbmtNYWNTeXN0ZW1Gb250LFNlZ29lIFVJLFJvYm90byxIZWx2ZXRpY2EgTmV1ZSxBcmlhbCxOb3RvIFNhbnMsc2Fucy1zZXJpZixBcHBsZSBDb2xvciBFbW9qaSxTZWdvZSBVSSBFbW9qaSxTZWdvZSBVSSBTeW1ib2wsTm90byBDb2xvciBFbW9qaTstLWdyYXkxOmhzbCgwLCAwJSwgOTklKTstLWdyYXkyOmhzbCgwLCAwJSwgOTcuMyUpOy0tZ3JheTM6aHNsKDAsIDAlLCA5NS4xJSk7LS1ncmF5NDpoc2woMCwgMCUsIDkzJSk7LS1ncmF5NTpoc2woMCwgMCUsIDkwLjklKTstLWdyYXk2OmhzbCgwLCAwJSwgODguNyUpOy0tZ3JheTc6aHNsKDAsIDAlLCA4NS44JSk7LS1ncmF5ODpoc2woMCwgMCUsIDc4JSk7LS1ncmF5OTpoc2woMCwgMCUsIDU2LjElKTstLWdyYXkxMDpoc2woMCwgMCUsIDUyLjMlKTstLWdyYXkxMTpoc2woMCwgMCUsIDQzLjUlKTstLWdyYXkxMjpoc2woMCwgMCUsIDklKTstLWJvcmRlci1yYWRpdXM6OHB4O2JveC1zaXppbmc6Ym9yZGVyLWJveDtwYWRkaW5nOjA7bWFyZ2luOjA7bGlzdC1zdHlsZTpub25lO291dGxpbmU6MDt6LWluZGV4Ojk5OTk5OTk5OTt0cmFuc2l0aW9uOnRyYW5zZm9ybSAuNHMgZWFzZX1AbWVkaWEgKGhvdmVyOm5vbmUpIGFuZCAocG9pbnRlcjpjb2Fyc2Upe1tkYXRhLXNvbm5lci10b2FzdGVyXVtkYXRhLWxpZnRlZD10cnVlXXt0cmFuc2Zvcm06bm9uZX19W2RhdGEtc29ubmVyLXRvYXN0ZXJdW2RhdGEteC1wb3NpdGlvbj1yaWdodF17cmlnaHQ6dmFyKC0tb2Zmc2V0LXJpZ2h0KX1bZGF0YS1zb25uZXItdG9hc3Rlcl1bZGF0YS14LXBvc2l0aW9uPWxlZnRde2xlZnQ6dmFyKC0tb2Zmc2V0LWxlZnQpfVtkYXRhLXNvbm5lci10b2FzdGVyXVtkYXRhLXgtcG9zaXRpb249Y2VudGVyXXtsZWZ0OjUwJTt0cmFuc2Zvcm06dHJhbnNsYXRlWCgtNTAlKX1bZGF0YS1zb25uZXItdG9hc3Rlcl1bZGF0YS15LXBvc2l0aW9uPXRvcF17dG9wOnZhcigtLW9mZnNldC10b3ApfVtkYXRhLXNvbm5lci10b2FzdGVyXVtkYXRhLXktcG9zaXRpb249Ym90dG9tXXtib3R0b206dmFyKC0tb2Zmc2V0LWJvdHRvbSl9W2RhdGEtc29ubmVyLXRvYXN0XXstLXk6dHJhbnNsYXRlWSgxMDAlKTstLWxpZnQtYW1vdW50OmNhbGModmFyKC0tbGlmdCkgKiB2YXIoLS1nYXApKTt6LWluZGV4OnZhcigtLXotaW5kZXgpO3Bvc2l0aW9uOmFic29sdXRlO29wYWNpdHk6MDt0cmFuc2Zvcm06dmFyKC0teSk7dG91Y2gtYWN0aW9uOm5vbmU7dHJhbnNpdGlvbjp0cmFuc2Zvcm0gLjRzLG9wYWNpdHkgLjRzLGhlaWdodCAuNHMsYm94LXNoYWRvdyAuMnM7Ym94LXNpemluZzpib3JkZXItYm94O291dGxpbmU6MDtvdmVyZmxvdy13cmFwOmFueXdoZXJlfVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1zdHlsZWQ9dHJ1ZV17cGFkZGluZzoxNnB4O2JhY2tncm91bmQ6dmFyKC0tbm9ybWFsLWJnKTtib3JkZXI6MXB4IHNvbGlkIHZhcigtLW5vcm1hbC1ib3JkZXIpO2NvbG9yOnZhcigtLW5vcm1hbC10ZXh0KTtib3JkZXItcmFkaXVzOnZhcigtLWJvcmRlci1yYWRpdXMpO2JveC1zaGFkb3c6MCA0cHggMTJweCByZ2JhKDAsMCwwLC4xKTt3aWR0aDp2YXIoLS13aWR0aCk7Zm9udC1zaXplOjEzcHg7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6NnB4fVtkYXRhLXNvbm5lci10b2FzdF06Zm9jdXMtdmlzaWJsZXtib3gtc2hhZG93OjAgNHB4IDEycHggcmdiYSgwLDAsMCwuMSksMCAwIDAgMnB4IHJnYmEoMCwwLDAsLjIpfVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS15LXBvc2l0aW9uPXRvcF17dG9wOjA7LS15OnRyYW5zbGF0ZVkoLTEwMCUpOy0tbGlmdDoxOy0tbGlmdC1hbW91bnQ6Y2FsYygxICogdmFyKC0tZ2FwKSl9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXktcG9zaXRpb249Ym90dG9tXXtib3R0b206MDstLXk6dHJhbnNsYXRlWSgxMDAlKTstLWxpZnQ6LTE7LS1saWZ0LWFtb3VudDpjYWxjKHZhcigtLWxpZnQpICogdmFyKC0tZ2FwKSl9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXN0eWxlZD10cnVlXSBbZGF0YS1kZXNjcmlwdGlvbl17Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OjEuNDtjb2xvcjojM2YzZjNmfVtkYXRhLXJpY2gtY29sb3JzPXRydWVdW2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXN0eWxlZD10cnVlXSBbZGF0YS1kZXNjcmlwdGlvbl17Y29sb3I6aW5oZXJpdH1bZGF0YS1zb25uZXItdG9hc3Rlcl1bZGF0YS1zb25uZXItdGhlbWU9ZGFya10gW2RhdGEtZGVzY3JpcHRpb25de2NvbG9yOiNlOGU4ZTh9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXN0eWxlZD10cnVlXSBbZGF0YS10aXRsZV17Zm9udC13ZWlnaHQ6NTAwO2xpbmUtaGVpZ2h0OjEuNTtjb2xvcjppbmhlcml0fVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1zdHlsZWQ9dHJ1ZV0gW2RhdGEtaWNvbl17ZGlzcGxheTpmbGV4O2hlaWdodDoxNnB4O3dpZHRoOjE2cHg7cG9zaXRpb246cmVsYXRpdmU7anVzdGlmeS1jb250ZW50OmZsZXgtc3RhcnQ7YWxpZ24taXRlbXM6Y2VudGVyO2ZsZXgtc2hyaW5rOjA7bWFyZ2luLWxlZnQ6dmFyKC0tdG9hc3QtaWNvbi1tYXJnaW4tc3RhcnQpO21hcmdpbi1yaWdodDp2YXIoLS10b2FzdC1pY29uLW1hcmdpbi1lbmQpfVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1wcm9taXNlPXRydWVdIFtkYXRhLWljb25dPnN2Z3tvcGFjaXR5OjA7dHJhbnNmb3JtOnNjYWxlKC44KTt0cmFuc2Zvcm0tb3JpZ2luOmNlbnRlcjthbmltYXRpb246c29ubmVyLWZhZGUtaW4gLjNzIGVhc2UgZm9yd2FyZHN9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXN0eWxlZD10cnVlXSBbZGF0YS1pY29uXT4qe2ZsZXgtc2hyaW5rOjB9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXN0eWxlZD10cnVlXSBbZGF0YS1pY29uXSBzdmd7bWFyZ2luLWxlZnQ6dmFyKC0tdG9hc3Qtc3ZnLW1hcmdpbi1zdGFydCk7bWFyZ2luLXJpZ2h0OnZhcigtLXRvYXN0LXN2Zy1tYXJnaW4tZW5kKX1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtc3R5bGVkPXRydWVdIFtkYXRhLWNvbnRlbnRde2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47Z2FwOjJweH1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtc3R5bGVkPXRydWVdIFtkYXRhLWJ1dHRvbl17Ym9yZGVyLXJhZGl1czo0cHg7cGFkZGluZy1sZWZ0OjhweDtwYWRkaW5nLXJpZ2h0OjhweDtoZWlnaHQ6MjRweDtmb250LXNpemU6MTJweDtjb2xvcjp2YXIoLS1ub3JtYWwtYmcpO2JhY2tncm91bmQ6dmFyKC0tbm9ybWFsLXRleHQpO21hcmdpbi1sZWZ0OnZhcigtLXRvYXN0LWJ1dHRvbi1tYXJnaW4tc3RhcnQpO21hcmdpbi1yaWdodDp2YXIoLS10b2FzdC1idXR0b24tbWFyZ2luLWVuZCk7Ym9yZGVyOm5vbmU7Zm9udC13ZWlnaHQ6NTAwO2N1cnNvcjpwb2ludGVyO291dGxpbmU6MDtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2ZsZXgtc2hyaW5rOjA7dHJhbnNpdGlvbjpvcGFjaXR5IC40cyxib3gtc2hhZG93IC4yc31bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtc3R5bGVkPXRydWVdIFtkYXRhLWJ1dHRvbl06Zm9jdXMtdmlzaWJsZXtib3gtc2hhZG93OjAgMCAwIDJweCByZ2JhKDAsMCwwLC40KX1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtc3R5bGVkPXRydWVdIFtkYXRhLWJ1dHRvbl06Zmlyc3Qtb2YtdHlwZXttYXJnaW4tbGVmdDp2YXIoLS10b2FzdC1idXR0b24tbWFyZ2luLXN0YXJ0KTttYXJnaW4tcmlnaHQ6dmFyKC0tdG9hc3QtYnV0dG9uLW1hcmdpbi1lbmQpfVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1zdHlsZWQ9dHJ1ZV0gW2RhdGEtY2FuY2VsXXtjb2xvcjp2YXIoLS1ub3JtYWwtdGV4dCk7YmFja2dyb3VuZDpyZ2JhKDAsMCwwLC4wOCl9W2RhdGEtc29ubmVyLXRvYXN0ZXJdW2RhdGEtc29ubmVyLXRoZW1lPWRhcmtdIFtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1zdHlsZWQ9dHJ1ZV0gW2RhdGEtY2FuY2VsXXtiYWNrZ3JvdW5kOnJnYmEoMjU1LDI1NSwyNTUsLjMpfVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1zdHlsZWQ9dHJ1ZV0gW2RhdGEtY2xvc2UtYnV0dG9uXXtwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OnZhcigtLXRvYXN0LWNsb3NlLWJ1dHRvbi1zdGFydCk7cmlnaHQ6dmFyKC0tdG9hc3QtY2xvc2UtYnV0dG9uLWVuZCk7dG9wOjA7aGVpZ2h0OjIwcHg7d2lkdGg6MjBweDtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXI7cGFkZGluZzowO2NvbG9yOnZhcigtLWdyYXkxMik7YmFja2dyb3VuZDp2YXIoLS1ub3JtYWwtYmcpO2JvcmRlcjoxcHggc29saWQgdmFyKC0tZ3JheTQpO3RyYW5zZm9ybTp2YXIoLS10b2FzdC1jbG9zZS1idXR0b24tdHJhbnNmb3JtKTtib3JkZXItcmFkaXVzOjUwJTtjdXJzb3I6cG9pbnRlcjt6LWluZGV4OjE7dHJhbnNpdGlvbjpvcGFjaXR5IC4xcyxiYWNrZ3JvdW5kIC4ycyxib3JkZXItY29sb3IgLjJzfVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1zdHlsZWQ9dHJ1ZV0gW2RhdGEtY2xvc2UtYnV0dG9uXTpmb2N1cy12aXNpYmxle2JveC1zaGFkb3c6MCA0cHggMTJweCByZ2JhKDAsMCwwLC4xKSwwIDAgMCAycHggcmdiYSgwLDAsMCwuMil9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXN0eWxlZD10cnVlXSBbZGF0YS1kaXNhYmxlZD10cnVlXXtjdXJzb3I6bm90LWFsbG93ZWR9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXN0eWxlZD10cnVlXTpob3ZlciBbZGF0YS1jbG9zZS1idXR0b25dOmhvdmVye2JhY2tncm91bmQ6dmFyKC0tZ3JheTIpO2JvcmRlci1jb2xvcjp2YXIoLS1ncmF5NSl9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXN3aXBpbmc9dHJ1ZV06OmJlZm9yZXtjb250ZW50OicnO3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6LTEwMCU7cmlnaHQ6LTEwMCU7aGVpZ2h0OjEwMCU7ei1pbmRleDotMX1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEteS1wb3NpdGlvbj10b3BdW2RhdGEtc3dpcGluZz10cnVlXTo6YmVmb3Jle2JvdHRvbTo1MCU7dHJhbnNmb3JtOnNjYWxlWSgzKSB0cmFuc2xhdGVZKDUwJSl9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXktcG9zaXRpb249Ym90dG9tXVtkYXRhLXN3aXBpbmc9dHJ1ZV06OmJlZm9yZXt0b3A6NTAlO3RyYW5zZm9ybTpzY2FsZVkoMykgdHJhbnNsYXRlWSgtNTAlKX1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtc3dpcGluZz1mYWxzZV1bZGF0YS1yZW1vdmVkPXRydWVdOjpiZWZvcmV7Y29udGVudDonJztwb3NpdGlvbjphYnNvbHV0ZTtpbnNldDowO3RyYW5zZm9ybTpzY2FsZVkoMil9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLWV4cGFuZGVkPXRydWVdOjphZnRlcntjb250ZW50OicnO3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6MDtoZWlnaHQ6Y2FsYyh2YXIoLS1nYXApICsgMXB4KTtib3R0b206MTAwJTt3aWR0aDoxMDAlfVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1tb3VudGVkPXRydWVdey0teTp0cmFuc2xhdGVZKDApO29wYWNpdHk6MX1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtZXhwYW5kZWQ9ZmFsc2VdW2RhdGEtZnJvbnQ9ZmFsc2Vdey0tc2NhbGU6dmFyKC0tdG9hc3RzLWJlZm9yZSkgKiAwLjA1ICsgMTstLXk6dHJhbnNsYXRlWShjYWxjKHZhcigtLWxpZnQtYW1vdW50KSAqIHZhcigtLXRvYXN0cy1iZWZvcmUpKSkgc2NhbGUoY2FsYygtMSAqIHZhcigtLXNjYWxlKSkpO2hlaWdodDp2YXIoLS1mcm9udC10b2FzdC1oZWlnaHQpfVtkYXRhLXNvbm5lci10b2FzdF0+Knt0cmFuc2l0aW9uOm9wYWNpdHkgLjRzfVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS14LXBvc2l0aW9uPXJpZ2h0XXtyaWdodDowfVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS14LXBvc2l0aW9uPWxlZnRde2xlZnQ6MH1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtZXhwYW5kZWQ9ZmFsc2VdW2RhdGEtZnJvbnQ9ZmFsc2VdW2RhdGEtc3R5bGVkPXRydWVdPip7b3BhY2l0eTowfVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS12aXNpYmxlPWZhbHNlXXtvcGFjaXR5OjA7cG9pbnRlci1ldmVudHM6bm9uZX1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtbW91bnRlZD10cnVlXVtkYXRhLWV4cGFuZGVkPXRydWVdey0teTp0cmFuc2xhdGVZKGNhbGModmFyKC0tbGlmdCkgKiB2YXIoLS1vZmZzZXQpKSk7aGVpZ2h0OnZhcigtLWluaXRpYWwtaGVpZ2h0KX1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtcmVtb3ZlZD10cnVlXVtkYXRhLWZyb250PXRydWVdW2RhdGEtc3dpcGUtb3V0PWZhbHNlXXstLXk6dHJhbnNsYXRlWShjYWxjKHZhcigtLWxpZnQpICogLTEwMCUpKTtvcGFjaXR5OjB9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXJlbW92ZWQ9dHJ1ZV1bZGF0YS1mcm9udD1mYWxzZV1bZGF0YS1zd2lwZS1vdXQ9ZmFsc2VdW2RhdGEtZXhwYW5kZWQ9dHJ1ZV17LS15OnRyYW5zbGF0ZVkoY2FsYyh2YXIoLS1saWZ0KSAqIHZhcigtLW9mZnNldCkgKyB2YXIoLS1saWZ0KSAqIC0xMDAlKSk7b3BhY2l0eTowfVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1yZW1vdmVkPXRydWVdW2RhdGEtZnJvbnQ9ZmFsc2VdW2RhdGEtc3dpcGUtb3V0PWZhbHNlXVtkYXRhLWV4cGFuZGVkPWZhbHNlXXstLXk6dHJhbnNsYXRlWSg0MCUpO29wYWNpdHk6MDt0cmFuc2l0aW9uOnRyYW5zZm9ybSAuNXMsb3BhY2l0eSAuMnN9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXJlbW92ZWQ9dHJ1ZV1bZGF0YS1mcm9udD1mYWxzZV06OmJlZm9yZXtoZWlnaHQ6Y2FsYyh2YXIoLS1pbml0aWFsLWhlaWdodCkgKyAyMCUpfVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1zd2lwaW5nPXRydWVde3RyYW5zZm9ybTp2YXIoLS15KSB0cmFuc2xhdGVZKHZhcigtLXN3aXBlLWFtb3VudC15LDApKSB0cmFuc2xhdGVYKHZhcigtLXN3aXBlLWFtb3VudC14LDApKTt0cmFuc2l0aW9uOm5vbmV9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXN3aXBlZD10cnVlXXt1c2VyLXNlbGVjdDpub25lfVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1zd2lwZS1vdXQ9dHJ1ZV1bZGF0YS15LXBvc2l0aW9uPWJvdHRvbV0sW2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXN3aXBlLW91dD10cnVlXVtkYXRhLXktcG9zaXRpb249dG9wXXthbmltYXRpb24tZHVyYXRpb246LjJzO2FuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246ZWFzZS1vdXQ7YW5pbWF0aW9uLWZpbGwtbW9kZTpmb3J3YXJkc31bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtc3dpcGUtb3V0PXRydWVdW2RhdGEtc3dpcGUtZGlyZWN0aW9uPWxlZnRde2FuaW1hdGlvbi1uYW1lOnN3aXBlLW91dC1sZWZ0fVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1zd2lwZS1vdXQ9dHJ1ZV1bZGF0YS1zd2lwZS1kaXJlY3Rpb249cmlnaHRde2FuaW1hdGlvbi1uYW1lOnN3aXBlLW91dC1yaWdodH1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtc3dpcGUtb3V0PXRydWVdW2RhdGEtc3dpcGUtZGlyZWN0aW9uPXVwXXthbmltYXRpb24tbmFtZTpzd2lwZS1vdXQtdXB9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXN3aXBlLW91dD10cnVlXVtkYXRhLXN3aXBlLWRpcmVjdGlvbj1kb3duXXthbmltYXRpb24tbmFtZTpzd2lwZS1vdXQtZG93bn1Aa2V5ZnJhbWVzIHN3aXBlLW91dC1sZWZ0e2Zyb217dHJhbnNmb3JtOnZhcigtLXkpIHRyYW5zbGF0ZVgodmFyKC0tc3dpcGUtYW1vdW50LXgpKTtvcGFjaXR5OjF9dG97dHJhbnNmb3JtOnZhcigtLXkpIHRyYW5zbGF0ZVgoY2FsYyh2YXIoLS1zd2lwZS1hbW91bnQteCkgLSAxMDAlKSk7b3BhY2l0eTowfX1Aa2V5ZnJhbWVzIHN3aXBlLW91dC1yaWdodHtmcm9te3RyYW5zZm9ybTp2YXIoLS15KSB0cmFuc2xhdGVYKHZhcigtLXN3aXBlLWFtb3VudC14KSk7b3BhY2l0eToxfXRve3RyYW5zZm9ybTp2YXIoLS15KSB0cmFuc2xhdGVYKGNhbGModmFyKC0tc3dpcGUtYW1vdW50LXgpICsgMTAwJSkpO29wYWNpdHk6MH19QGtleWZyYW1lcyBzd2lwZS1vdXQtdXB7ZnJvbXt0cmFuc2Zvcm06dmFyKC0teSkgdHJhbnNsYXRlWSh2YXIoLS1zd2lwZS1hbW91bnQteSkpO29wYWNpdHk6MX10b3t0cmFuc2Zvcm06dmFyKC0teSkgdHJhbnNsYXRlWShjYWxjKHZhcigtLXN3aXBlLWFtb3VudC15KSAtIDEwMCUpKTtvcGFjaXR5OjB9fUBrZXlmcmFtZXMgc3dpcGUtb3V0LWRvd257ZnJvbXt0cmFuc2Zvcm06dmFyKC0teSkgdHJhbnNsYXRlWSh2YXIoLS1zd2lwZS1hbW91bnQteSkpO29wYWNpdHk6MX10b3t0cmFuc2Zvcm06dmFyKC0teSkgdHJhbnNsYXRlWShjYWxjKHZhcigtLXN3aXBlLWFtb3VudC15KSArIDEwMCUpKTtvcGFjaXR5OjB9fUBtZWRpYSAobWF4LXdpZHRoOjYwMHB4KXtbZGF0YS1zb25uZXItdG9hc3Rlcl17cG9zaXRpb246Zml4ZWQ7cmlnaHQ6dmFyKC0tbW9iaWxlLW9mZnNldC1yaWdodCk7bGVmdDp2YXIoLS1tb2JpbGUtb2Zmc2V0LWxlZnQpO3dpZHRoOjEwMCV9W2RhdGEtc29ubmVyLXRvYXN0ZXJdW2Rpcj1ydGxde2xlZnQ6Y2FsYyh2YXIoLS1tb2JpbGUtb2Zmc2V0LWxlZnQpICogLTEpfVtkYXRhLXNvbm5lci10b2FzdGVyXSBbZGF0YS1zb25uZXItdG9hc3Rde2xlZnQ6MDtyaWdodDowO3dpZHRoOmNhbGMoMTAwJSAtIHZhcigtLW1vYmlsZS1vZmZzZXQtbGVmdCkgKiAyKX1bZGF0YS1zb25uZXItdG9hc3Rlcl1bZGF0YS14LXBvc2l0aW9uPWxlZnRde2xlZnQ6dmFyKC0tbW9iaWxlLW9mZnNldC1sZWZ0KX1bZGF0YS1zb25uZXItdG9hc3Rlcl1bZGF0YS15LXBvc2l0aW9uPWJvdHRvbV17Ym90dG9tOnZhcigtLW1vYmlsZS1vZmZzZXQtYm90dG9tKX1bZGF0YS1zb25uZXItdG9hc3Rlcl1bZGF0YS15LXBvc2l0aW9uPXRvcF17dG9wOnZhcigtLW1vYmlsZS1vZmZzZXQtdG9wKX1bZGF0YS1zb25uZXItdG9hc3Rlcl1bZGF0YS14LXBvc2l0aW9uPWNlbnRlcl17bGVmdDp2YXIoLS1tb2JpbGUtb2Zmc2V0LWxlZnQpO3JpZ2h0OnZhcigtLW1vYmlsZS1vZmZzZXQtcmlnaHQpO3RyYW5zZm9ybTpub25lfX1bZGF0YS1zb25uZXItdG9hc3Rlcl1bZGF0YS1zb25uZXItdGhlbWU9bGlnaHRdey0tbm9ybWFsLWJnOiNmZmY7LS1ub3JtYWwtYm9yZGVyOnZhcigtLWdyYXk0KTstLW5vcm1hbC10ZXh0OnZhcigtLWdyYXkxMik7LS1zdWNjZXNzLWJnOmhzbCgxNDMsIDg1JSwgOTYlKTstLXN1Y2Nlc3MtYm9yZGVyOmhzbCgxNDUsIDkyJSwgODclKTstLXN1Y2Nlc3MtdGV4dDpoc2woMTQwLCAxMDAlLCAyNyUpOy0taW5mby1iZzpoc2woMjA4LCAxMDAlLCA5NyUpOy0taW5mby1ib3JkZXI6aHNsKDIyMSwgOTElLCA5MyUpOy0taW5mby10ZXh0OmhzbCgyMTAsIDkyJSwgNDUlKTstLXdhcm5pbmctYmc6aHNsKDQ5LCAxMDAlLCA5NyUpOy0td2FybmluZy1ib3JkZXI6aHNsKDQ5LCA5MSUsIDg0JSk7LS13YXJuaW5nLXRleHQ6aHNsKDMxLCA5MiUsIDQ1JSk7LS1lcnJvci1iZzpoc2woMzU5LCAxMDAlLCA5NyUpOy0tZXJyb3ItYm9yZGVyOmhzbCgzNTksIDEwMCUsIDk0JSk7LS1lcnJvci10ZXh0OmhzbCgzNjAsIDEwMCUsIDQ1JSl9W2RhdGEtc29ubmVyLXRvYXN0ZXJdW2RhdGEtc29ubmVyLXRoZW1lPWxpZ2h0XSBbZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtaW52ZXJ0PXRydWVdey0tbm9ybWFsLWJnOiMwMDA7LS1ub3JtYWwtYm9yZGVyOmhzbCgwLCAwJSwgMjAlKTstLW5vcm1hbC10ZXh0OnZhcigtLWdyYXkxKX1bZGF0YS1zb25uZXItdG9hc3Rlcl1bZGF0YS1zb25uZXItdGhlbWU9ZGFya10gW2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLWludmVydD10cnVlXXstLW5vcm1hbC1iZzojZmZmOy0tbm9ybWFsLWJvcmRlcjp2YXIoLS1ncmF5Myk7LS1ub3JtYWwtdGV4dDp2YXIoLS1ncmF5MTIpfVtkYXRhLXNvbm5lci10b2FzdGVyXVtkYXRhLXNvbm5lci10aGVtZT1kYXJrXXstLW5vcm1hbC1iZzojMDAwOy0tbm9ybWFsLWJnLWhvdmVyOmhzbCgwLCAwJSwgMTIlKTstLW5vcm1hbC1ib3JkZXI6aHNsKDAsIDAlLCAyMCUpOy0tbm9ybWFsLWJvcmRlci1ob3Zlcjpoc2woMCwgMCUsIDI1JSk7LS1ub3JtYWwtdGV4dDp2YXIoLS1ncmF5MSk7LS1zdWNjZXNzLWJnOmhzbCgxNTAsIDEwMCUsIDYlKTstLXN1Y2Nlc3MtYm9yZGVyOmhzbCgxNDcsIDEwMCUsIDEyJSk7LS1zdWNjZXNzLXRleHQ6aHNsKDE1MCwgODYlLCA2NSUpOy0taW5mby1iZzpoc2woMjE1LCAxMDAlLCA2JSk7LS1pbmZvLWJvcmRlcjpoc2woMjIzLCA0MyUsIDE3JSk7LS1pbmZvLXRleHQ6aHNsKDIxNiwgODclLCA2NSUpOy0td2FybmluZy1iZzpoc2woNjQsIDEwMCUsIDYlKTstLXdhcm5pbmctYm9yZGVyOmhzbCg2MCwgMTAwJSwgOSUpOy0td2FybmluZy10ZXh0OmhzbCg0NiwgODclLCA2NSUpOy0tZXJyb3ItYmc6aHNsKDM1OCwgNzYlLCAxMCUpOy0tZXJyb3ItYm9yZGVyOmhzbCgzNTcsIDg5JSwgMTYlKTstLWVycm9yLXRleHQ6aHNsKDM1OCwgMTAwJSwgODElKX1bZGF0YS1zb25uZXItdG9hc3Rlcl1bZGF0YS1zb25uZXItdGhlbWU9ZGFya10gW2RhdGEtc29ubmVyLXRvYXN0XSBbZGF0YS1jbG9zZS1idXR0b25de2JhY2tncm91bmQ6dmFyKC0tbm9ybWFsLWJnKTtib3JkZXItY29sb3I6dmFyKC0tbm9ybWFsLWJvcmRlcik7Y29sb3I6dmFyKC0tbm9ybWFsLXRleHQpfVtkYXRhLXNvbm5lci10b2FzdGVyXVtkYXRhLXNvbm5lci10aGVtZT1kYXJrXSBbZGF0YS1zb25uZXItdG9hc3RdIFtkYXRhLWNsb3NlLWJ1dHRvbl06aG92ZXJ7YmFja2dyb3VuZDp2YXIoLS1ub3JtYWwtYmctaG92ZXIpO2JvcmRlci1jb2xvcjp2YXIoLS1ub3JtYWwtYm9yZGVyLWhvdmVyKX1bZGF0YS1yaWNoLWNvbG9ycz10cnVlXVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS10eXBlPXN1Y2Nlc3Nde2JhY2tncm91bmQ6dmFyKC0tc3VjY2Vzcy1iZyk7Ym9yZGVyLWNvbG9yOnZhcigtLXN1Y2Nlc3MtYm9yZGVyKTtjb2xvcjp2YXIoLS1zdWNjZXNzLXRleHQpfVtkYXRhLXJpY2gtY29sb3JzPXRydWVdW2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXR5cGU9c3VjY2Vzc10gW2RhdGEtY2xvc2UtYnV0dG9uXXtiYWNrZ3JvdW5kOnZhcigtLXN1Y2Nlc3MtYmcpO2JvcmRlci1jb2xvcjp2YXIoLS1zdWNjZXNzLWJvcmRlcik7Y29sb3I6dmFyKC0tc3VjY2Vzcy10ZXh0KX1bZGF0YS1yaWNoLWNvbG9ycz10cnVlXVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS10eXBlPWluZm9de2JhY2tncm91bmQ6dmFyKC0taW5mby1iZyk7Ym9yZGVyLWNvbG9yOnZhcigtLWluZm8tYm9yZGVyKTtjb2xvcjp2YXIoLS1pbmZvLXRleHQpfVtkYXRhLXJpY2gtY29sb3JzPXRydWVdW2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXR5cGU9aW5mb10gW2RhdGEtY2xvc2UtYnV0dG9uXXtiYWNrZ3JvdW5kOnZhcigtLWluZm8tYmcpO2JvcmRlci1jb2xvcjp2YXIoLS1pbmZvLWJvcmRlcik7Y29sb3I6dmFyKC0taW5mby10ZXh0KX1bZGF0YS1yaWNoLWNvbG9ycz10cnVlXVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS10eXBlPXdhcm5pbmdde2JhY2tncm91bmQ6dmFyKC0td2FybmluZy1iZyk7Ym9yZGVyLWNvbG9yOnZhcigtLXdhcm5pbmctYm9yZGVyKTtjb2xvcjp2YXIoLS13YXJuaW5nLXRleHQpfVtkYXRhLXJpY2gtY29sb3JzPXRydWVdW2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXR5cGU9d2FybmluZ10gW2RhdGEtY2xvc2UtYnV0dG9uXXtiYWNrZ3JvdW5kOnZhcigtLXdhcm5pbmctYmcpO2JvcmRlci1jb2xvcjp2YXIoLS13YXJuaW5nLWJvcmRlcik7Y29sb3I6dmFyKC0td2FybmluZy10ZXh0KX1bZGF0YS1yaWNoLWNvbG9ycz10cnVlXVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS10eXBlPWVycm9yXXtiYWNrZ3JvdW5kOnZhcigtLWVycm9yLWJnKTtib3JkZXItY29sb3I6dmFyKC0tZXJyb3ItYm9yZGVyKTtjb2xvcjp2YXIoLS1lcnJvci10ZXh0KX1bZGF0YS1yaWNoLWNvbG9ycz10cnVlXVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS10eXBlPWVycm9yXSBbZGF0YS1jbG9zZS1idXR0b25de2JhY2tncm91bmQ6dmFyKC0tZXJyb3ItYmcpO2JvcmRlci1jb2xvcjp2YXIoLS1lcnJvci1ib3JkZXIpO2NvbG9yOnZhcigtLWVycm9yLXRleHQpfS5zb25uZXItbG9hZGluZy13cmFwcGVyey0tc2l6ZToxNnB4O2hlaWdodDp2YXIoLS1zaXplKTt3aWR0aDp2YXIoLS1zaXplKTtwb3NpdGlvbjphYnNvbHV0ZTtpbnNldDowO3otaW5kZXg6MTB9LnNvbm5lci1sb2FkaW5nLXdyYXBwZXJbZGF0YS12aXNpYmxlPWZhbHNlXXt0cmFuc2Zvcm0tb3JpZ2luOmNlbnRlcjthbmltYXRpb246c29ubmVyLWZhZGUtb3V0IC4ycyBlYXNlIGZvcndhcmRzfS5zb25uZXItc3Bpbm5lcntwb3NpdGlvbjpyZWxhdGl2ZTt0b3A6NTAlO2xlZnQ6NTAlO2hlaWdodDp2YXIoLS1zaXplKTt3aWR0aDp2YXIoLS1zaXplKX0uc29ubmVyLWxvYWRpbmctYmFye2FuaW1hdGlvbjpzb25uZXItc3BpbiAxLjJzIGxpbmVhciBpbmZpbml0ZTtiYWNrZ3JvdW5kOnZhcigtLWdyYXkxMSk7Ym9yZGVyLXJhZGl1czo2cHg7aGVpZ2h0OjglO2xlZnQ6LTEwJTtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6LTMuOSU7d2lkdGg6MjQlfS5zb25uZXItbG9hZGluZy1iYXI6Zmlyc3QtY2hpbGR7YW5pbWF0aW9uLWRlbGF5Oi0xLjJzO3RyYW5zZm9ybTpyb3RhdGUoLjAwMDFkZWcpIHRyYW5zbGF0ZSgxNDYlKX0uc29ubmVyLWxvYWRpbmctYmFyOm50aC1jaGlsZCgyKXthbmltYXRpb24tZGVsYXk6LTEuMXM7dHJhbnNmb3JtOnJvdGF0ZSgzMGRlZykgdHJhbnNsYXRlKDE0NiUpfS5zb25uZXItbG9hZGluZy1iYXI6bnRoLWNoaWxkKDMpe2FuaW1hdGlvbi1kZWxheTotMXM7dHJhbnNmb3JtOnJvdGF0ZSg2MGRlZykgdHJhbnNsYXRlKDE0NiUpfS5zb25uZXItbG9hZGluZy1iYXI6bnRoLWNoaWxkKDQpe2FuaW1hdGlvbi1kZWxheTotLjlzO3RyYW5zZm9ybTpyb3RhdGUoOTBkZWcpIHRyYW5zbGF0ZSgxNDYlKX0uc29ubmVyLWxvYWRpbmctYmFyOm50aC1jaGlsZCg1KXthbmltYXRpb24tZGVsYXk6LS44czt0cmFuc2Zvcm06cm90YXRlKDEyMGRlZykgdHJhbnNsYXRlKDE0NiUpfS5zb25uZXItbG9hZGluZy1iYXI6bnRoLWNoaWxkKDYpe2FuaW1hdGlvbi1kZWxheTotLjdzO3RyYW5zZm9ybTpyb3RhdGUoMTUwZGVnKSB0cmFuc2xhdGUoMTQ2JSl9LnNvbm5lci1sb2FkaW5nLWJhcjpudGgtY2hpbGQoNyl7YW5pbWF0aW9uLWRlbGF5Oi0uNnM7dHJhbnNmb3JtOnJvdGF0ZSgxODBkZWcpIHRyYW5zbGF0ZSgxNDYlKX0uc29ubmVyLWxvYWRpbmctYmFyOm50aC1jaGlsZCg4KXthbmltYXRpb24tZGVsYXk6LS41czt0cmFuc2Zvcm06cm90YXRlKDIxMGRlZykgdHJhbnNsYXRlKDE0NiUpfS5zb25uZXItbG9hZGluZy1iYXI6bnRoLWNoaWxkKDkpe2FuaW1hdGlvbi1kZWxheTotLjRzO3RyYW5zZm9ybTpyb3RhdGUoMjQwZGVnKSB0cmFuc2xhdGUoMTQ2JSl9LnNvbm5lci1sb2FkaW5nLWJhcjpudGgtY2hpbGQoMTApe2FuaW1hdGlvbi1kZWxheTotLjNzO3RyYW5zZm9ybTpyb3RhdGUoMjcwZGVnKSB0cmFuc2xhdGUoMTQ2JSl9LnNvbm5lci1sb2FkaW5nLWJhcjpudGgtY2hpbGQoMTEpe2FuaW1hdGlvbi1kZWxheTotLjJzO3RyYW5zZm9ybTpyb3RhdGUoMzAwZGVnKSB0cmFuc2xhdGUoMTQ2JSl9LnNvbm5lci1sb2FkaW5nLWJhcjpudGgtY2hpbGQoMTIpe2FuaW1hdGlvbi1kZWxheTotLjFzO3RyYW5zZm9ybTpyb3RhdGUoMzMwZGVnKSB0cmFuc2xhdGUoMTQ2JSl9QGtleWZyYW1lcyBzb25uZXItZmFkZS1pbnswJXtvcGFjaXR5OjA7dHJhbnNmb3JtOnNjYWxlKC44KX0xMDAle29wYWNpdHk6MTt0cmFuc2Zvcm06c2NhbGUoMSl9fUBrZXlmcmFtZXMgc29ubmVyLWZhZGUtb3V0ezAle29wYWNpdHk6MTt0cmFuc2Zvcm06c2NhbGUoMSl9MTAwJXtvcGFjaXR5OjA7dHJhbnNmb3JtOnNjYWxlKC44KX19QGtleWZyYW1lcyBzb25uZXItc3BpbnswJXtvcGFjaXR5OjF9MTAwJXtvcGFjaXR5Oi4xNX19QG1lZGlhIChwcmVmZXJzLXJlZHVjZWQtbW90aW9uKXsuc29ubmVyLWxvYWRpbmctYmFyLFtkYXRhLXNvbm5lci10b2FzdF0sW2RhdGEtc29ubmVyLXRvYXN0XT4qe3RyYW5zaXRpb246bm9uZSFpbXBvcnRhbnQ7YW5pbWF0aW9uOm5vbmUhaW1wb3J0YW50fX0uc29ubmVyLWxvYWRlcntwb3NpdGlvbjphYnNvbHV0ZTt0b3A6NTAlO2xlZnQ6NTAlO3RyYW5zZm9ybTp0cmFuc2xhdGUoLTUwJSwtNTAlKTt0cmFuc2Zvcm0tb3JpZ2luOmNlbnRlcjt0cmFuc2l0aW9uOm9wYWNpdHkgLjJzLHRyYW5zZm9ybSAuMnN9LnNvbm5lci1sb2FkZXJbZGF0YS12aXNpYmxlPWZhbHNlXXtvcGFjaXR5OjA7dHJhbnNmb3JtOnNjYWxlKC44KSB0cmFuc2xhdGUoLTUwJSwtNTAlKX0iKTtmdW5jdGlvbiBtNSgkKXtyZXR1cm4gJC5sYWJlbCE9PXZvaWQgMH12YXIgSEo9MyxBSj0iMjRweCIsa0o9IjE2cHgiLF82PTQwMDAsT0o9MzU2LEZKPTE0LE1KPTQ1LFdKPTIwMDtmdW5jdGlvbiB5MCguLi4kKXtyZXR1cm4gJC5maWx0ZXIoQm9vbGVhbikuam9pbigiICIpfWZ1bmN0aW9uIFBKKCQpe2xldFtKLFFdPSQuc3BsaXQoIi0iKSxaPVtdO2lmKEopWi5wdXNoKEopO2lmKFEpWi5wdXNoKFEpO3JldHVybiBafXZhciBfSj0oJCk9Pnt2YXIgSixRLFosWCxZLHEsRyxWLEI7bGV0e2ludmVydDpOLHRvYXN0OnosdW5zdHlsZWQ6TCxpbnRlcmFjdGluZzpDLHNldEhlaWdodHM6QSx2aXNpYmxlVG9hc3RzOlUsaGVpZ2h0czpILGluZGV4OmssdG9hc3RzOkYsZXhwYW5kZWQ6dyxyZW1vdmVUb2FzdDpULGRlZmF1bHRSaWNoQ29sb3JzOlMsY2xvc2VCdXR0b246eCxzdHlsZTokMSxjYW5jZWxCdXR0b25TdHlsZTpmLGFjdGlvbkJ1dHRvblN0eWxlOmksY2xhc3NOYW1lOnI9IiIsZGVzY3JpcHRpb25DbGFzc05hbWU6bD0iIixkdXJhdGlvbjpvLHBvc2l0aW9uOlExLGdhcDpOMSxleHBhbmRCeURlZmF1bHQ6YyxjbGFzc05hbWVzOnYsaWNvbnM6bixjbG9zZUJ1dHRvbkFyaWFMYWJlbDpYMT0iQ2xvc2UgdG9hc3QifT0kLFtMMSxKMV09bS51c2VTdGF0ZShudWxsKSxbWTEsSDFdPW0udXNlU3RhdGUobnVsbCksW3ksZ109bS51c2VTdGF0ZSghMSksW1AscF09bS51c2VTdGF0ZSghMSksW3Usal09bS51c2VTdGF0ZSghMSksW0cxLHoxXT1tLnVzZVN0YXRlKCExKSxbTTEsVzFdPW0udXNlU3RhdGUoITEpLFtpMSxGMV09bS51c2VTdGF0ZSgwKSxbdjEsUDFdPW0udXNlU3RhdGUoMCksdTE9bS51c2VSZWYoei5kdXJhdGlvbnx8b3x8XzYpLEMxPW0udXNlUmVmKG51bGwpLHcxPW0udXNlUmVmKG51bGwpLGwxPWs9PT0wLHQxPWsrMTw9VSxSMT16LnR5cGUsYTE9ei5kaXNtaXNzaWJsZSE9PSExLGUxPXouY2xhc3NOYW1lfHwiIixWMD16LmRlc2NyaXB0aW9uQ2xhc3NOYW1lfHwiIixzMT1tLnVzZU1lbW8oKCk9PkguZmluZEluZGV4KChLMSk9PksxLnRvYXN0SWQ9PT16LmlkKXx8MCxbSCx6LmlkXSksdjA9bS51c2VNZW1vKCgpPT57dmFyIEsxO3JldHVybihLMT16LmNsb3NlQnV0dG9uKSE9bnVsbD9LMTp4fSxbei5jbG9zZUJ1dHRvbix4XSksbTE9bS51c2VNZW1vKCgpPT56LmR1cmF0aW9ufHxvfHxfNixbei5kdXJhdGlvbixvXSkscTA9bS51c2VSZWYoMCksJDA9bS51c2VSZWYoMCksUDA9bS51c2VSZWYoMCksZDE9bS51c2VSZWYobnVsbCksW24xLF8wXT1RMS5zcGxpdCgiLSIpLGoxPW0udXNlTWVtbygoKT0+e3JldHVybiBILnJlZHVjZSgoSzEsXyxkKT0+e2lmKGQ+PXMxKXJldHVybiBLMTtyZXR1cm4gSzErXy5oZWlnaHR9LDApfSxbSCxzMV0pLEgwPUJKKCksQjA9ei5pbnZlcnR8fE4sRDE9UjE9PT0ibG9hZGluZyI7JDAuY3VycmVudD1tLnVzZU1lbW8oKCk9PnMxKk4xK2oxLFtzMSxqMV0pLG0udXNlRWZmZWN0KCgpPT57dTEuY3VycmVudD1tMX0sW20xXSksbS51c2VFZmZlY3QoKCk9PntnKCEwKX0sW10pLG0udXNlRWZmZWN0KCgpPT57bGV0IEsxPXcxLmN1cnJlbnQ7aWYoSzEpe2xldCBfPUsxLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmhlaWdodDtyZXR1cm4gUDEoXyksQSgoZCk9Plt7dG9hc3RJZDp6LmlkLGhlaWdodDpfLHBvc2l0aW9uOnoucG9zaXRpb259LC4uLmRdKSwoKT0+QSgoZCk9PmQuZmlsdGVyKChhKT0+YS50b2FzdElkIT09ei5pZCkpfX0sW0Esei5pZF0pLG0udXNlTGF5b3V0RWZmZWN0KCgpPT57aWYoIXkpcmV0dXJuO2xldCBLMT13MS5jdXJyZW50LF89SzEuc3R5bGUuaGVpZ2h0O0sxLnN0eWxlLmhlaWdodD0iYXV0byI7bGV0IGQ9SzEuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0O0sxLnN0eWxlLmhlaWdodD1fLFAxKGQpLEEoKGEpPT57aWYoIWEuZmluZCgoVjEpPT5WMS50b2FzdElkPT09ei5pZCkpcmV0dXJuW3t0b2FzdElkOnouaWQsaGVpZ2h0OmQscG9zaXRpb246ei5wb3NpdGlvbn0sLi4uYV07ZWxzZSByZXR1cm4gYS5tYXAoKFYxKT0+VjEudG9hc3RJZD09PXouaWQ/ey4uLlYxLGhlaWdodDpkfTpWMSl9KX0sW3ksei50aXRsZSx6LmRlc2NyaXB0aW9uLEEsei5pZCx6LmpzeCx6LmFjdGlvbix6LmNhbmNlbF0pO2xldCB5MT1tLnVzZUNhbGxiYWNrKCgpPT57cCghMCksRjEoJDAuY3VycmVudCksQSgoSzEpPT5LMS5maWx0ZXIoKF8pPT5fLnRvYXN0SWQhPT16LmlkKSksc2V0VGltZW91dCgoKT0+e1Qoeil9LFdKKX0sW3osVCxBLCQwXSk7bS51c2VFZmZlY3QoKCk9PntpZih6LnByb21pc2UmJlIxPT09ImxvYWRpbmcifHx6LmR1cmF0aW9uPT09MS8wfHx6LnR5cGU9PT0ibG9hZGluZyIpcmV0dXJuO2xldCBLMSxfPSgpPT57aWYoUDAuY3VycmVudDxxMC5jdXJyZW50KXtsZXQgYT1uZXcgRGF0ZSgpLmdldFRpbWUoKS1xMC5jdXJyZW50O3UxLmN1cnJlbnQ9dTEuY3VycmVudC1hfVAwLmN1cnJlbnQ9bmV3IERhdGUoKS5nZXRUaW1lKCl9LGQ9KCk9PntpZih1MS5jdXJyZW50PT09MS8wKXJldHVybjtxMC5jdXJyZW50PW5ldyBEYXRlKCkuZ2V0VGltZSgpLEsxPXNldFRpbWVvdXQoKCk9Pnt6Lm9uQXV0b0Nsb3NlPT1udWxsfHx6Lm9uQXV0b0Nsb3NlLmNhbGwoeix6KSx5MSgpfSx1MS5jdXJyZW50KX07aWYod3x8Q3x8SDApXygpO2Vsc2UgZCgpO3JldHVybigpPT5jbGVhclRpbWVvdXQoSzEpfSxbdyxDLHosUjEsSDAseTFdKSxtLnVzZUVmZmVjdCgoKT0+e2lmKHouZGVsZXRlKXkxKCksei5vbkRpc21pc3M9PW51bGx8fHoub25EaXNtaXNzLmNhbGwoeix6KX0sW3kxLHouZGVsZXRlXSk7ZnVuY3Rpb24gSjAoKXt2YXIgSzE7aWYobj09bnVsbD92b2lkIDA6bi5sb2FkaW5nKXt2YXIgXztyZXR1cm4gbS5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6eTAodj09bnVsbD92b2lkIDA6di5sb2FkZXIsej09bnVsbD92b2lkIDA6KF89ei5jbGFzc05hbWVzKT09bnVsbD92b2lkIDA6Xy5sb2FkZXIsInNvbm5lci1sb2FkZXIiKSwiZGF0YS12aXNpYmxlIjpSMT09PSJsb2FkaW5nIn0sbi5sb2FkaW5nKX1yZXR1cm4gbS5jcmVhdGVFbGVtZW50KEtKLHtjbGFzc05hbWU6eTAodj09bnVsbD92b2lkIDA6di5sb2FkZXIsej09bnVsbD92b2lkIDA6KEsxPXouY2xhc3NOYW1lcyk9PW51bGw/dm9pZCAwOksxLmxvYWRlciksdmlzaWJsZTpSMT09PSJsb2FkaW5nIn0pfWxldCBBMD16Lmljb258fChuPT1udWxsP3ZvaWQgMDpuW1IxXSl8fFFKKFIxKTt2YXIgTjAsazA7cmV0dXJuIG0uY3JlYXRlRWxlbWVudCgibGkiLHt0YWJJbmRleDowLHJlZjp3MSxjbGFzc05hbWU6eTAocixlMSx2PT1udWxsP3ZvaWQgMDp2LnRvYXN0LHo9PW51bGw/dm9pZCAwOihKPXouY2xhc3NOYW1lcyk9PW51bGw/dm9pZCAwOkoudG9hc3Qsdj09bnVsbD92b2lkIDA6di5kZWZhdWx0LHY9PW51bGw/dm9pZCAwOnZbUjFdLHo9PW51bGw/dm9pZCAwOihRPXouY2xhc3NOYW1lcyk9PW51bGw/dm9pZCAwOlFbUjFdKSwiZGF0YS1zb25uZXItdG9hc3QiOiIiLCJkYXRhLXJpY2gtY29sb3JzIjooTjA9ei5yaWNoQ29sb3JzKSE9bnVsbD9OMDpTLCJkYXRhLXN0eWxlZCI6IUJvb2xlYW4oei5qc3h8fHoudW5zdHlsZWR8fEwpLCJkYXRhLW1vdW50ZWQiOnksImRhdGEtcHJvbWlzZSI6Qm9vbGVhbih6LnByb21pc2UpLCJkYXRhLXN3aXBlZCI6TTEsImRhdGEtcmVtb3ZlZCI6UCwiZGF0YS12aXNpYmxlIjp0MSwiZGF0YS15LXBvc2l0aW9uIjpuMSwiZGF0YS14LXBvc2l0aW9uIjpfMCwiZGF0YS1pbmRleCI6aywiZGF0YS1mcm9udCI6bDEsImRhdGEtc3dpcGluZyI6dSwiZGF0YS1kaXNtaXNzaWJsZSI6YTEsImRhdGEtdHlwZSI6UjEsImRhdGEtaW52ZXJ0IjpCMCwiZGF0YS1zd2lwZS1vdXQiOkcxLCJkYXRhLXN3aXBlLWRpcmVjdGlvbiI6WTEsImRhdGEtZXhwYW5kZWQiOkJvb2xlYW4od3x8YyYmeSksImRhdGEtdGVzdGlkIjp6LnRlc3RJZCxzdHlsZTp7Ii0taW5kZXgiOmssIi0tdG9hc3RzLWJlZm9yZSI6aywiLS16LWluZGV4IjpGLmxlbmd0aC1rLCItLW9mZnNldCI6YCR7UD9pMTokMC5jdXJyZW50fXB4YCwiLS1pbml0aWFsLWhlaWdodCI6Yz8iYXV0byI6YCR7djF9cHhgLC4uLiQxLC4uLnouc3R5bGV9LG9uRHJhZ0VuZDooKT0+e2ooITEpLEoxKG51bGwpLGQxLmN1cnJlbnQ9bnVsbH0sb25Qb2ludGVyRG93bjooSzEpPT57aWYoSzEuYnV0dG9uPT09MilyZXR1cm47aWYoRDF8fCFhMSlyZXR1cm47aWYoQzEuY3VycmVudD1uZXcgRGF0ZSxGMSgkMC5jdXJyZW50KSxLMS50YXJnZXQuc2V0UG9pbnRlckNhcHR1cmUoSzEucG9pbnRlcklkKSxLMS50YXJnZXQudGFnTmFtZT09PSJCVVRUT04iKXJldHVybjtqKCEwKSxkMS5jdXJyZW50PXt4OksxLmNsaWVudFgseTpLMS5jbGllbnRZfX0sb25Qb2ludGVyVXA6KCk9Pnt2YXIgSzEsXyxkO2lmKEcxfHwhYTEpcmV0dXJuO2QxLmN1cnJlbnQ9bnVsbDtsZXQgYT1OdW1iZXIoKChLMT13MS5jdXJyZW50KT09bnVsbD92b2lkIDA6SzEuc3R5bGUuZ2V0UHJvcGVydHlWYWx1ZSgiLS1zd2lwZS1hbW91bnQteCIpLnJlcGxhY2UoInB4IiwiIikpfHwwKSxrMT1OdW1iZXIoKChfPXcxLmN1cnJlbnQpPT1udWxsP3ZvaWQgMDpfLnN0eWxlLmdldFByb3BlcnR5VmFsdWUoIi0tc3dpcGUtYW1vdW50LXkiKS5yZXBsYWNlKCJweCIsIiIpKXx8MCksVjE9bmV3IERhdGUoKS5nZXRUaW1lKCktKChkPUMxLmN1cnJlbnQpPT1udWxsP3ZvaWQgMDpkLmdldFRpbWUoKSksQjE9TDE9PT0ieCI/YTprMSxnMT1NYXRoLmFicyhCMSkvVjE7aWYoTWF0aC5hYnMoQjEpPj1NSnx8ZzE+MC4xMSl7aWYoRjEoJDAuY3VycmVudCksei5vbkRpc21pc3M9PW51bGx8fHoub25EaXNtaXNzLmNhbGwoeix6KSxMMT09PSJ4IilIMShhPjA/InJpZ2h0IjoibGVmdCIpO2Vsc2UgSDEoazE+MD8iZG93biI6InVwIik7eTEoKSx6MSghMCk7cmV0dXJufWVsc2V7dmFyIGYxLHgxOyhmMT13MS5jdXJyZW50KT09bnVsbHx8ZjEuc3R5bGUuc2V0UHJvcGVydHkoIi0tc3dpcGUtYW1vdW50LXgiLCIwcHgiKSwoeDE9dzEuY3VycmVudCk9PW51bGx8fHgxLnN0eWxlLnNldFByb3BlcnR5KCItLXN3aXBlLWFtb3VudC15IiwiMHB4Iil9VzEoITEpLGooITEpLEoxKG51bGwpfSxvblBvaW50ZXJNb3ZlOihLMSk9Pnt2YXIgXyxkLGE7aWYoIWQxLmN1cnJlbnR8fCFhMSlyZXR1cm47aWYoKChfPXdpbmRvdy5nZXRTZWxlY3Rpb24oKSk9PW51bGw/dm9pZCAwOl8udG9TdHJpbmcoKS5sZW5ndGgpPjApcmV0dXJuO2xldCBWMT1LMS5jbGllbnRZLWQxLmN1cnJlbnQueSxCMT1LMS5jbGllbnRYLWQxLmN1cnJlbnQueDt2YXIgZzE7bGV0IGYxPShnMT0kLnN3aXBlRGlyZWN0aW9ucykhPW51bGw/ZzE6UEooUTEpO2lmKCFMMSYmKE1hdGguYWJzKEIxKT4xfHxNYXRoLmFicyhWMSk+MSkpSjEoTWF0aC5hYnMoQjEpPk1hdGguYWJzKFYxKT8ieCI6InkiKTtsZXQgeDE9e3g6MCx5OjB9LE8wPShRMCk9PntyZXR1cm4gMS8oMS41K01hdGguYWJzKFEwKS8yMCl9O2lmKEwxPT09InkiKXtpZihmMS5pbmNsdWRlcygidG9wIil8fGYxLmluY2x1ZGVzKCJib3R0b20iKSlpZihmMS5pbmNsdWRlcygidG9wIikmJlYxPDB8fGYxLmluY2x1ZGVzKCJib3R0b20iKSYmVjE+MCl4MS55PVYxO2Vsc2V7bGV0IFEwPVYxKk8wKFYxKTt4MS55PU1hdGguYWJzKFEwKTxNYXRoLmFicyhWMSk/UTA6VjF9fWVsc2UgaWYoTDE9PT0ieCIpe2lmKGYxLmluY2x1ZGVzKCJsZWZ0Iil8fGYxLmluY2x1ZGVzKCJyaWdodCIpKWlmKGYxLmluY2x1ZGVzKCJsZWZ0IikmJkIxPDB8fGYxLmluY2x1ZGVzKCJyaWdodCIpJiZCMT4wKXgxLng9QjE7ZWxzZXtsZXQgUTA9QjEqTzAoQjEpO3gxLng9TWF0aC5hYnMoUTApPE1hdGguYWJzKEIxKT9RMDpCMX19aWYoTWF0aC5hYnMoeDEueCk+MHx8TWF0aC5hYnMoeDEueSk+MClXMSghMCk7KGQ9dzEuY3VycmVudCk9PW51bGx8fGQuc3R5bGUuc2V0UHJvcGVydHkoIi0tc3dpcGUtYW1vdW50LXgiLGAke3gxLnh9cHhgKSwoYT13MS5jdXJyZW50KT09bnVsbHx8YS5zdHlsZS5zZXRQcm9wZXJ0eSgiLS1zd2lwZS1hbW91bnQteSIsYCR7eDEueX1weGApfX0sdjAmJiF6LmpzeCYmUjEhPT0ibG9hZGluZyI/bS5jcmVhdGVFbGVtZW50KCJidXR0b24iLHsiYXJpYS1sYWJlbCI6WDEsImRhdGEtZGlzYWJsZWQiOkQxLCJkYXRhLWNsb3NlLWJ1dHRvbiI6ITAsb25DbGljazpEMXx8IWExPygpPT57fTooKT0+e3kxKCksei5vbkRpc21pc3M9PW51bGx8fHoub25EaXNtaXNzLmNhbGwoeix6KX0sY2xhc3NOYW1lOnkwKHY9PW51bGw/dm9pZCAwOnYuY2xvc2VCdXR0b24sej09bnVsbD92b2lkIDA6KFo9ei5jbGFzc05hbWVzKT09bnVsbD92b2lkIDA6Wi5jbG9zZUJ1dHRvbil9LChrMD1uPT1udWxsP3ZvaWQgMDpuLmNsb3NlKSE9bnVsbD9rMDpWSik6bnVsbCwoUjF8fHouaWNvbnx8ei5wcm9taXNlKSYmei5pY29uIT09bnVsbCYmKChuPT1udWxsP3ZvaWQgMDpuW1IxXSkhPT1udWxsfHx6Lmljb24pP20uY3JlYXRlRWxlbWVudCgiZGl2Iix7ImRhdGEtaWNvbiI6IiIsY2xhc3NOYW1lOnkwKHY9PW51bGw/dm9pZCAwOnYuaWNvbix6PT1udWxsP3ZvaWQgMDooWD16LmNsYXNzTmFtZXMpPT1udWxsP3ZvaWQgMDpYLmljb24pfSx6LnByb21pc2V8fHoudHlwZT09PSJsb2FkaW5nIiYmIXouaWNvbj96Lmljb258fEowKCk6bnVsbCx6LnR5cGUhPT0ibG9hZGluZyI/QTA6bnVsbCk6bnVsbCxtLmNyZWF0ZUVsZW1lbnQoImRpdiIseyJkYXRhLWNvbnRlbnQiOiIiLGNsYXNzTmFtZTp5MCh2PT1udWxsP3ZvaWQgMDp2LmNvbnRlbnQsej09bnVsbD92b2lkIDA6KFk9ei5jbGFzc05hbWVzKT09bnVsbD92b2lkIDA6WS5jb250ZW50KX0sbS5jcmVhdGVFbGVtZW50KCJkaXYiLHsiZGF0YS10aXRsZSI6IiIsY2xhc3NOYW1lOnkwKHY9PW51bGw/dm9pZCAwOnYudGl0bGUsej09bnVsbD92b2lkIDA6KHE9ei5jbGFzc05hbWVzKT09bnVsbD92b2lkIDA6cS50aXRsZSl9LHouanN4P3ouanN4OnR5cGVvZiB6LnRpdGxlPT09ImZ1bmN0aW9uIj96LnRpdGxlKCk6ei50aXRsZSksei5kZXNjcmlwdGlvbj9tLmNyZWF0ZUVsZW1lbnQoImRpdiIseyJkYXRhLWRlc2NyaXB0aW9uIjoiIixjbGFzc05hbWU6eTAobCxWMCx2PT1udWxsP3ZvaWQgMDp2LmRlc2NyaXB0aW9uLHo9PW51bGw/dm9pZCAwOihHPXouY2xhc3NOYW1lcyk9PW51bGw/dm9pZCAwOkcuZGVzY3JpcHRpb24pfSx0eXBlb2Ygei5kZXNjcmlwdGlvbj09PSJmdW5jdGlvbiI/ei5kZXNjcmlwdGlvbigpOnouZGVzY3JpcHRpb24pOm51bGwpLG0uaXNWYWxpZEVsZW1lbnQoei5jYW5jZWwpP3ouY2FuY2VsOnouY2FuY2VsJiZtNSh6LmNhbmNlbCk/bS5jcmVhdGVFbGVtZW50KCJidXR0b24iLHsiZGF0YS1idXR0b24iOiEwLCJkYXRhLWNhbmNlbCI6ITAsc3R5bGU6ei5jYW5jZWxCdXR0b25TdHlsZXx8ZixvbkNsaWNrOihLMSk9PntpZighbTUoei5jYW5jZWwpKXJldHVybjtpZighYTEpcmV0dXJuO3ouY2FuY2VsLm9uQ2xpY2s9PW51bGx8fHouY2FuY2VsLm9uQ2xpY2suY2FsbCh6LmNhbmNlbCxLMSkseTEoKX0sY2xhc3NOYW1lOnkwKHY9PW51bGw/dm9pZCAwOnYuY2FuY2VsQnV0dG9uLHo9PW51bGw/dm9pZCAwOihWPXouY2xhc3NOYW1lcyk9PW51bGw/dm9pZCAwOlYuY2FuY2VsQnV0dG9uKX0sei5jYW5jZWwubGFiZWwpOm51bGwsbS5pc1ZhbGlkRWxlbWVudCh6LmFjdGlvbik/ei5hY3Rpb246ei5hY3Rpb24mJm01KHouYWN0aW9uKT9tLmNyZWF0ZUVsZW1lbnQoImJ1dHRvbiIseyJkYXRhLWJ1dHRvbiI6ITAsImRhdGEtYWN0aW9uIjohMCxzdHlsZTp6LmFjdGlvbkJ1dHRvblN0eWxlfHxpLG9uQ2xpY2s6KEsxKT0+e2lmKCFtNSh6LmFjdGlvbikpcmV0dXJuO2lmKHouYWN0aW9uLm9uQ2xpY2s9PW51bGx8fHouYWN0aW9uLm9uQ2xpY2suY2FsbCh6LmFjdGlvbixLMSksSzEuZGVmYXVsdFByZXZlbnRlZClyZXR1cm47eTEoKX0sY2xhc3NOYW1lOnkwKHY9PW51bGw/dm9pZCAwOnYuYWN0aW9uQnV0dG9uLHo9PW51bGw/dm9pZCAwOihCPXouY2xhc3NOYW1lcyk9PW51bGw/dm9pZCAwOkIuYWN0aW9uQnV0dG9uKX0sei5hY3Rpb24ubGFiZWwpOm51bGwpfTtmdW5jdGlvbiBENigpe2lmKHR5cGVvZiB3aW5kb3c+InUiKXJldHVybiJsdHIiO2lmKHR5cGVvZiBkb2N1bWVudD4idSIpcmV0dXJuImx0ciI7bGV0ICQ9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmdldEF0dHJpYnV0ZSgiZGlyIik7aWYoJD09PSJhdXRvInx8ISQpcmV0dXJuIHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCkuZGlyZWN0aW9uO3JldHVybiAkfWZ1bmN0aW9uIERKKCQsSil7bGV0IFE9e307cmV0dXJuWyQsSl0uZm9yRWFjaCgoWixYKT0+e2xldCBZPVg9PT0xLHE9WT8iLS1tb2JpbGUtb2Zmc2V0IjoiLS1vZmZzZXQiLEc9WT9rSjpBSjtmdW5jdGlvbiBWKEIpe1sidG9wIiwicmlnaHQiLCJib3R0b20iLCJsZWZ0Il0uZm9yRWFjaCgoTik9PntRW2Ake3F9LSR7Tn1gXT10eXBlb2YgQj09PSJudW1iZXIiP2Ake0J9cHhgOkJ9KX1pZih0eXBlb2YgWj09PSJudW1iZXIifHx0eXBlb2YgWj09PSJzdHJpbmciKVYoWik7ZWxzZSBpZih0eXBlb2YgWj09PSJvYmplY3QiKVsidG9wIiwicmlnaHQiLCJib3R0b20iLCJsZWZ0Il0uZm9yRWFjaCgoQik9PntpZihaW0JdPT09dm9pZCAwKVFbYCR7cX0tJHtCfWBdPUc7ZWxzZSBRW2Ake3F9LSR7Qn1gXT10eXBlb2YgWltCXT09PSJudW1iZXIiP2Ake1pbQl19cHhgOlpbQl19KTtlbHNlIFYoRyl9KSxRfXZhciB3Nj1tLmZvcndhcmRSZWYoZnVuY3Rpb24oSixRKXtsZXR7aWQ6WixpbnZlcnQ6WCxwb3NpdGlvbjpZPSJib3R0b20tcmlnaHQiLGhvdGtleTpxPVsiYWx0S2V5IiwiS2V5VCJdLGV4cGFuZDpHLGNsb3NlQnV0dG9uOlYsY2xhc3NOYW1lOkIsb2Zmc2V0Ok4sbW9iaWxlT2Zmc2V0OnosdGhlbWU6TD0ibGlnaHQiLHJpY2hDb2xvcnM6QyxkdXJhdGlvbjpBLHN0eWxlOlUsdmlzaWJsZVRvYXN0czpIPUhKLHRvYXN0T3B0aW9uczprLGRpcjpGPUQ2KCksZ2FwOnc9RkosaWNvbnM6VCxjb250YWluZXJBcmlhTGFiZWw6Uz0iTm90aWZpY2F0aW9ucyJ9PUosW3gsJDFdPW0udXNlU3RhdGUoW10pLGY9bS51c2VNZW1vKCgpPT57aWYoWilyZXR1cm4geC5maWx0ZXIoKHkpPT55LnRvYXN0ZXJJZD09PVopO3JldHVybiB4LmZpbHRlcigoeSk9PiF5LnRvYXN0ZXJJZCl9LFt4LFpdKSxpPW0udXNlTWVtbygoKT0+e3JldHVybiBBcnJheS5mcm9tKG5ldyBTZXQoW1ldLmNvbmNhdChmLmZpbHRlcigoeSk9PnkucG9zaXRpb24pLm1hcCgoeSk9PnkucG9zaXRpb24pKSkpfSxbZixZXSksW3IsbF09bS51c2VTdGF0ZShbXSksW28sUTFdPW0udXNlU3RhdGUoITEpLFtOMSxjXT1tLnVzZVN0YXRlKCExKSxbdixuXT1tLnVzZVN0YXRlKEwhPT0ic3lzdGVtIj9MOnR5cGVvZiB3aW5kb3c8InUiP3dpbmRvdy5tYXRjaE1lZGlhJiZ3aW5kb3cubWF0Y2hNZWRpYSgiKHByZWZlcnMtY29sb3Itc2NoZW1lOiBkYXJrKSIpLm1hdGNoZXM/ImRhcmsiOiJsaWdodCI6ImxpZ2h0IiksWDE9bS51c2VSZWYobnVsbCksTDE9cS5qb2luKCIrIikucmVwbGFjZSgvS2V5L2csIiIpLnJlcGxhY2UoL0RpZ2l0L2csIiIpLEoxPW0udXNlUmVmKG51bGwpLFkxPW0udXNlUmVmKCExKSxIMT1tLnVzZUNhbGxiYWNrKCh5KT0+eyQxKChnKT0+e3ZhciBQO2lmKCEoKFA9Zy5maW5kKChwKT0+cC5pZD09PXkuaWQpKT09bnVsbD92b2lkIDA6UC5kZWxldGUpKUswLmRpc21pc3MoeS5pZCk7cmV0dXJuIGcuZmlsdGVyKCh7aWQ6cH0pPT5wIT09eS5pZCl9KX0sW10pO3JldHVybiBtLnVzZUVmZmVjdCgoKT0+e3JldHVybiBLMC5zdWJzY3JpYmUoKHkpPT57aWYoeS5kaXNtaXNzKXtyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9PnskMSgoZyk9PmcubWFwKChQKT0+UC5pZD09PXkuaWQ/ey4uLlAsZGVsZXRlOiEwfTpQKSl9KTtyZXR1cm59c2V0VGltZW91dCgoKT0+e20uZmx1c2hTeW5jKCgpPT57JDEoKGcpPT57bGV0IFA9Zy5maW5kSW5kZXgoKHApPT5wLmlkPT09eS5pZCk7aWYoUCE9PS0xKXJldHVyblsuLi5nLnNsaWNlKDAsUCksey4uLmdbUF0sLi4ueX0sLi4uZy5zbGljZShQKzEpXTtyZXR1cm5beSwuLi5nXX0pfSl9KX0pfSxbeF0pLG0udXNlRWZmZWN0KCgpPT57aWYoTCE9PSJzeXN0ZW0iKXtuKEwpO3JldHVybn1pZihMPT09InN5c3RlbSIpaWYod2luZG93Lm1hdGNoTWVkaWEmJndpbmRvdy5tYXRjaE1lZGlhKCIocHJlZmVycy1jb2xvci1zY2hlbWU6IGRhcmspIikubWF0Y2hlcyluKCJkYXJrIik7ZWxzZSBuKCJsaWdodCIpO2lmKHR5cGVvZiB3aW5kb3c+InUiKXJldHVybjtsZXQgeT13aW5kb3cubWF0Y2hNZWRpYSgiKHByZWZlcnMtY29sb3Itc2NoZW1lOiBkYXJrKSIpO3RyeXt5LmFkZEV2ZW50TGlzdGVuZXIoImNoYW5nZSIsKHttYXRjaGVzOmd9KT0+e2lmKGcpbigiZGFyayIpO2Vsc2UgbigibGlnaHQiKX0pfWNhdGNoKGcpe3kuYWRkTGlzdGVuZXIoKHttYXRjaGVzOlB9KT0+e3RyeXtpZihQKW4oImRhcmsiKTtlbHNlIG4oImxpZ2h0Iil9Y2F0Y2gocCl7Y29uc29sZS5lcnJvcihwKX19KX19LFtMXSksbS51c2VFZmZlY3QoKCk9PntpZih4Lmxlbmd0aDw9MSlRMSghMSl9LFt4XSksbS51c2VFZmZlY3QoKCk9PntsZXQgeT0oZyk9Pnt2YXIgUDtpZihxLmV2ZXJ5KChqKT0+Z1tqXXx8Zy5jb2RlPT09aikpe3ZhciB1O1ExKCEwKSwodT1YMS5jdXJyZW50KT09bnVsbHx8dS5mb2N1cygpfWlmKGcuY29kZT09PSJFc2NhcGUiJiYoZG9jdW1lbnQuYWN0aXZlRWxlbWVudD09PVgxLmN1cnJlbnR8fCgoUD1YMS5jdXJyZW50KT09bnVsbD92b2lkIDA6UC5jb250YWlucyhkb2N1bWVudC5hY3RpdmVFbGVtZW50KSkpKVExKCExKX07cmV0dXJuIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLHkpLCgpPT5kb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJrZXlkb3duIix5KX0sW3FdKSxtLnVzZUVmZmVjdCgoKT0+e2lmKFgxLmN1cnJlbnQpcmV0dXJuKCk9PntpZihKMS5jdXJyZW50KUoxLmN1cnJlbnQuZm9jdXMoe3ByZXZlbnRTY3JvbGw6ITB9KSxKMS5jdXJyZW50PW51bGwsWTEuY3VycmVudD0hMX19LFtYMS5jdXJyZW50XSksbS5jcmVhdGVFbGVtZW50KCJzZWN0aW9uIix7cmVmOlEsImFyaWEtbGFiZWwiOmAke1N9ICR7TDF9YCx0YWJJbmRleDotMSwiYXJpYS1saXZlIjoicG9saXRlIiwiYXJpYS1yZWxldmFudCI6ImFkZGl0aW9ucyB0ZXh0IiwiYXJpYS1hdG9taWMiOiJmYWxzZSIsc3VwcHJlc3NIeWRyYXRpb25XYXJuaW5nOiEwfSxpLm1hcCgoeSxnKT0+e3ZhciBQO2xldFtwLHVdPXkuc3BsaXQoIi0iKTtpZighZi5sZW5ndGgpcmV0dXJuIG51bGw7cmV0dXJuIG0uY3JlYXRlRWxlbWVudCgib2wiLHtrZXk6eSxkaXI6Rj09PSJhdXRvIj9ENigpOkYsdGFiSW5kZXg6LTEscmVmOlgxLGNsYXNzTmFtZTpCLCJkYXRhLXNvbm5lci10b2FzdGVyIjohMCwiZGF0YS1zb25uZXItdGhlbWUiOnYsImRhdGEteS1wb3NpdGlvbiI6cCwiZGF0YS14LXBvc2l0aW9uIjp1LHN0eWxlOnsiLS1mcm9udC10b2FzdC1oZWlnaHQiOmAkeygoUD1yWzBdKT09bnVsbD92b2lkIDA6UC5oZWlnaHQpfHwwfXB4YCwiLS13aWR0aCI6YCR7T0p9cHhgLCItLWdhcCI6YCR7d31weGAsLi4uVSwuLi5ESihOLHopfSxvbkJsdXI6KGopPT57aWYoWTEuY3VycmVudCYmIWouY3VycmVudFRhcmdldC5jb250YWlucyhqLnJlbGF0ZWRUYXJnZXQpKXtpZihZMS5jdXJyZW50PSExLEoxLmN1cnJlbnQpSjEuY3VycmVudC5mb2N1cyh7cHJldmVudFNjcm9sbDohMH0pLEoxLmN1cnJlbnQ9bnVsbH19LG9uRm9jdXM6KGopPT57aWYoai50YXJnZXQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCYmai50YXJnZXQuZGF0YXNldC5kaXNtaXNzaWJsZT09PSJmYWxzZSIpcmV0dXJuO2lmKCFZMS5jdXJyZW50KVkxLmN1cnJlbnQ9ITAsSjEuY3VycmVudD1qLnJlbGF0ZWRUYXJnZXR9LG9uTW91c2VFbnRlcjooKT0+UTEoITApLG9uTW91c2VNb3ZlOigpPT5RMSghMCksb25Nb3VzZUxlYXZlOigpPT57aWYoIU4xKVExKCExKX0sb25EcmFnRW5kOigpPT5RMSghMSksb25Qb2ludGVyRG93bjooaik9PntpZihqLnRhcmdldCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50JiZqLnRhcmdldC5kYXRhc2V0LmRpc21pc3NpYmxlPT09ImZhbHNlIilyZXR1cm47YyghMCl9LG9uUG9pbnRlclVwOigpPT5jKCExKX0sZi5maWx0ZXIoKGopPT4hai5wb3NpdGlvbiYmZz09PTB8fGoucG9zaXRpb249PT15KS5tYXAoKGosRzEpPT57dmFyIHoxLE0xO3JldHVybiBtLmNyZWF0ZUVsZW1lbnQoX0ose2tleTpqLmlkLGljb25zOlQsaW5kZXg6RzEsdG9hc3Q6aixkZWZhdWx0UmljaENvbG9yczpDLGR1cmF0aW9uOih6MT1rPT1udWxsP3ZvaWQgMDprLmR1cmF0aW9uKSE9bnVsbD96MTpBLGNsYXNzTmFtZTprPT1udWxsP3ZvaWQgMDprLmNsYXNzTmFtZSxkZXNjcmlwdGlvbkNsYXNzTmFtZTprPT1udWxsP3ZvaWQgMDprLmRlc2NyaXB0aW9uQ2xhc3NOYW1lLGludmVydDpYLHZpc2libGVUb2FzdHM6SCxjbG9zZUJ1dHRvbjooTTE9az09bnVsbD92b2lkIDA6ay5jbG9zZUJ1dHRvbikhPW51bGw/TTE6VixpbnRlcmFjdGluZzpOMSxwb3NpdGlvbjp5LHN0eWxlOms9PW51bGw/dm9pZCAwOmsuc3R5bGUsdW5zdHlsZWQ6az09bnVsbD92b2lkIDA6ay51bnN0eWxlZCxjbGFzc05hbWVzOms9PW51bGw/dm9pZCAwOmsuY2xhc3NOYW1lcyxjYW5jZWxCdXR0b25TdHlsZTprPT1udWxsP3ZvaWQgMDprLmNhbmNlbEJ1dHRvblN0eWxlLGFjdGlvbkJ1dHRvblN0eWxlOms9PW51bGw/dm9pZCAwOmsuYWN0aW9uQnV0dG9uU3R5bGUsY2xvc2VCdXR0b25BcmlhTGFiZWw6az09bnVsbD92b2lkIDA6ay5jbG9zZUJ1dHRvbkFyaWFMYWJlbCxyZW1vdmVUb2FzdDpIMSx0b2FzdHM6Zi5maWx0ZXIoKFcxKT0+VzEucG9zaXRpb249PWoucG9zaXRpb24pLGhlaWdodHM6ci5maWx0ZXIoKFcxKT0+VzEucG9zaXRpb249PWoucG9zaXRpb24pLHNldEhlaWdodHM6bCxleHBhbmRCeURlZmF1bHQ6RyxnYXA6dyxleHBhbmRlZDpvLHN3aXBlRGlyZWN0aW9uczpKLnN3aXBlRGlyZWN0aW9uc30pfSkpfSkpfSk7ZnVuY3Rpb24gRTYoKXtyZXR1cm4gSyh3Nix7dGhlbWU6ImRhcmsiLHBvc2l0aW9uOiJib3R0b20tY2VudGVyIix2aXNpYmxlVG9hc3RzOjQsZ2FwOjgsb2Zmc2V0Ontib3R0b206MjR9LHRvYXN0T3B0aW9uczp7dW5zdHlsZWQ6ITB9LHN0eWxlOnt6SW5kZXg6MjE0NzQ4MzY0N30sY29udGFpbmVyQXJpYUxhYmVsOiJzZXJ2ZS1zaW0gbm90aWZpY2F0aW9ucyJ9KX1mdW5jdGlvbiBJNih7dG9hc3Q6JH0pe2xldCBKPSQuc3RhdHVzPT09ImVycm9yIixRPSQuc3RhdHVzPT09InVwbG9hZGluZyIsWj1RJiYkLnByb2dyZXNzIT09bnVsbCxYPSQucHJvZ3Jlc3MhPW51bGw/TWF0aC5yb3VuZCgkLnByb2dyZXNzKjEwMCk6MDtyZXR1cm4gSygiZGl2Iix7ImRhdGEtdGVzdGlkIjoidXBsb2FkLXRvYXN0IixjbGFzc05hbWU6YGZsZXggdy1bbWluKDMyMHB4LGNhbGMoMTAwdnctMzJweCkpXSBmbGV4LWNvbCBnYXAtMS41IHB4LTMgcHktMiBiZy1wYW5lbCBib3JkZXIgYm9yZGVyLXdoaXRlLzEyIHJvdW5kZWQtbGcgdGV4dC13aGl0ZS85MCB0ZXh0LVsxMnB4XSBmb250LW1vbm8gc2hhZG93LVswXzhweF8yNHB4X3JnYmEoMCwwLDAsMC40NSldICR7Sj8ic2VsZWN0LXRleHQgY3Vyc29yLXRleHQiOiJzZWxlY3Qtbm9uZSBjdXJzb3ItZGVmYXVsdCJ9YCxjaGlsZHJlbjpbSygiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMiBtaW4tdy0wIixjaGlsZHJlbjpbSygic3BhbiIse2NsYXNzTmFtZToic2l6ZS0xLjUgcm91bmRlZC1mdWxsIHNocmluay0wIFt0cmFuc2l0aW9uOmJhY2tncm91bmRfMC4zc10iLHN0eWxlOntiYWNrZ3JvdW5kOlE/IiNhNWI0ZmMiOiQuc3RhdHVzPT09InN1Y2Nlc3MiPyIjNGFkZTgwIjoiI2Y4NzE3MSJ9fSksSygic3BhbiIse2NsYXNzTmFtZToiZmxleC0xIG92ZXJmbG93LWhpZGRlbiB0ZXh0LWVsbGlwc2lzIHdoaXRlc3BhY2Utbm93cmFwIixjaGlsZHJlbjpbUSYmWiYmYFVwbG9hZGluZyAkeyQubmFtZX3igKYgJHtYfSVgLFEmJiFaJiYoJC5raW5kPT09ImlwYSI/YEluc3RhbGxpbmcgJHskLm5hbWV94oCmYDpgQWRkaW5nICR7JC5uYW1lfeKApmApLCQuc3RhdHVzPT09InN1Y2Nlc3MiJiYoJC5raW5kPT09ImlwYSI/YEluc3RhbGxlZCAkeyQubmFtZX1gOmBBZGRlZCAkeyQubmFtZX0gdG8gUGhvdG9zYCksSiYmYCR7JC5uYW1lfTogJHskLm1lc3NhZ2U/PyJVcGxvYWQgZmFpbGVkIn1gXX0pXX0pLFEmJksoImRpdiIse2NsYXNzTmFtZToicmVsYXRpdmUgaC1bM3B4XSB3LWZ1bGwgYmctd2hpdGUvOCByb3VuZGVkLVsycHhdIG92ZXJmbG93LWhpZGRlbiIsY2hpbGRyZW46Wj9LKCJkaXYiLHtjbGFzc05hbWU6ImgtZnVsbCBiZy1hY2NlbnQgcm91bmRlZC1bMnB4XSBbdHJhbnNpdGlvbjp3aWR0aF8xMjBtc19saW5lYXJdIixzdHlsZTp7d2lkdGg6YCR7WH0lYH19KTpLKCJkaXYiLHtjbGFzc05hbWU6InNlcnZlLXNpbS10b2FzdC1pbmRldGVybWluYXRlIGFic29sdXRlIHRvcC0wIGxlZnQtMCBoLWZ1bGwgdy1bNDAlXSBiZy1hY2NlbnQgcm91bmRlZC1bMnB4XSJ9KX0pXX0pfWZ1bmN0aW9uIHk2KHt3aWR0aDokLGhlaWdodDpKLHZpc2libGU6UX0pe3JldHVybiBLKCJkaXYiLHsiYXJpYS1oaWRkZW4iOiJ0cnVlIixjbGFzc05hbWU6ImFic29sdXRlIHJpZ2h0LTMgYm90dG9tLTMgei0yMCBwb2ludGVyLWV2ZW50cy1ub25lIHNlbGVjdC1ub25lIHJvdW5kZWQtbGcgcHgtMi41IHB5LTEgdGV4dC1bMTEuNXB4XSBmb250LW1vbm8gbGVhZGluZy1ub25lIHRyYWNraW5nLXdpZGUgdGV4dC13aGl0ZS85NSBiZy1wYW5lbC1iZy10cmFuc2x1Y2VudCBzaGFkb3ctWzBfMXB4XzJweF9yZ2JhKDAsMCwwLDAuMTgpLDBfNnB4XzE4cHhfcmdiYSgwLDAsMCwwLjI4KSxpbnNldF8wXzBfMF8xcHhfcmdiYSgyNTUsMjU1LDI1NSwwLjA2KV0gYmFja2Ryb3AtYmx1ci1tZCBiYWNrZHJvcC1zYXR1cmF0ZS0xNTAgd2hpdGVzcGFjZS1ub3dyYXAiLHN0eWxlOntvcGFjaXR5OlE/MTowLHRyYW5zZm9ybTpgdHJhbnNsYXRlWSgke1E/MDo0fXB4KSBzY2FsZSgke1E/MTowLjk2fSlgLHRyYW5zZm9ybU9yaWdpbjoiMTAwJSAxMDAlIix0cmFuc2l0aW9uOiJvcGFjaXR5IDE4MG1zIGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSksIHRyYW5zZm9ybSAyMjBtcyBjdWJpYy1iZXppZXIoMC4yLCAwLjgyLCAwLjIyLCAxKSJ9LGNoaWxkcmVuOltNYXRoLnJvdW5kKCQpLCIgIixLKCJzcGFuIix7Y2xhc3NOYW1lOiJvcGFjaXR5LTYwIG14LTAuNSIsY2hpbGRyZW46IsOXIn0pLCIgIixNYXRoLnJvdW5kKEopXX0pfWZ1bmN0aW9uIGI2KHtzdHJlYW1pbmc6JH0pe2xldCBKPSQ/IiM0YWRlODAiOiIjOGU4ZTkzIjtyZXR1cm4gSygic3BhbiIseyJkYXRhLXRlc3RpZCI6InN0cmVhbS1zdGF0dXMtcGlsbCIsY2xhc3NOYW1lOiJpbmxpbmUtZmxleCBpdGVtcy1jZW50ZXIgZ2FwLVs1cHhdIHRleHQtWzEycHhdIGZvbnQtbW9ubyBmb250LW1lZGl1bSBsZWFkaW5nLW5vbmUgd2hpdGVzcGFjZS1ub3dyYXAiLHN0eWxlOntjb2xvcjpKfSwiYXJpYS1saXZlIjoicG9saXRlIixjaGlsZHJlbjpbSygic3BhbiIseyJhcmlhLWhpZGRlbiI6InRydWUiLGNsYXNzTmFtZToic2l6ZS0xLjUgcm91bmRlZC1mdWxsIFt0cmFuc2l0aW9uOmJhY2tncm91bmRfMC4xOHNfZWFzZV0iLHN0eWxlOntiYWNrZ3JvdW5kOkp9fSksJD8ibGl2ZSI6ImNvbm5lY3RpbmciXX0pfWZ1bmN0aW9uIFRKKCQsSixRKXtsZXQgWj1RLmxhdCpNYXRoLlBJLzE4MCxYPSgkLVEubGF0KSpNYXRoLlBJLzE4MDtyZXR1cm57eDooSi1RLmxuZykqTWF0aC5QSS8xODAqTWF0aC5jb3MoWikqNjM3MTAwMCx6Oi1YKjYzNzEwMDB9fWZ1bmN0aW9uIHdKKCQsSixRKXtsZXQgWj1RLmxhdCpNYXRoLlBJLzE4MCxYPS1KLzYzNzEwMDAqKDE4MC9NYXRoLlBJKSxZPSQvKDYzNzEwMDAqTWF0aC5jb3MoWikpKigxODAvTWF0aC5QSSk7cmV0dXJue2xhdDpRLmxhdCtYLGxuZzpRLmxuZytZfX1mdW5jdGlvbiBFSigkLEosUSxaLFgpe2xldCBZPVgqWCxxPVkqWCxHPShWLEIsTix6KT0+MC41KigyKkIrKC1WK04pKlgrKDIqVi01KkIrNCpOLXopKlkrKC1WKzMqQi0zKk4reikqcSk7cmV0dXJue3g6RygkLngsSi54LFEueCxaLngpLHo6RygkLnosSi56LFEueixaLnopLHk6RygkLnksSi55LFEueSxaLnkpLHJhd0FsdDpHKCQucmF3QWx0LEoucmF3QWx0LFEucmF3QWx0LFoucmF3QWx0KX19ZnVuY3Rpb24gSUooJCxKLFEpe2lmKCQubGVuZ3RoPDIpcmV0dXJuICQuc2xpY2UoKTtsZXQgWj1bXSxYPSQubGVuZ3RoLFk9UT9YOlgtMTtmb3IobGV0IHE9MDtxPFk7cSsrKXtsZXQgRz0kW1E/KHEtMStYKSVYOk1hdGgubWF4KDAscS0xKV0sVj0kW3ElWF0sQj0kWyhxKzEpJVhdLE49JFtRPyhxKzIpJVg6TWF0aC5taW4oWC0xLHErMildLHo9Qi54LVYueCxMPUIuei1WLnosQz1NYXRoLmh5cG90KHosTCksQT1NYXRoLm1heCgyLE1hdGguY2VpbChDL0opKTtmb3IobGV0IFU9MDtVPEE7VSsrKXtsZXQgSD1VL0E7Wi5wdXNoKEVKKEcsVixCLE4sSCkpfX1pZighUSlaLnB1c2goJFtYLTFdKTtyZXR1cm4gWn1mdW5jdGlvbiBTNigkKXtpZigkLndheXBvaW50cy5sZW5ndGg8Mil0aHJvdyBFcnJvcihgVHJhaWwgJHskLmlkfSBuZWVkcyBhdCBsZWFzdCAyIHdheXBvaW50c2ApO2xldCBKPXtsYXQ6JC53YXlwb2ludHMucmVkdWNlKChVLEgpPT5VK0gubGF0LDApLyQud2F5cG9pbnRzLmxlbmd0aCxsbmc6JC53YXlwb2ludHMucmVkdWNlKChVLEgpPT5VK0gubG5nLDApLyQud2F5cG9pbnRzLmxlbmd0aH0sUT0kLndheXBvaW50cy5tYXAoKFUpPT5VLmFsdD8/MCksWj1NYXRoLm1pbiguLi5RKSxYPU1hdGgubWF4KC4uLlEpLFk9JC53YXlwb2ludHMubWFwKChVKT0+e2xldHt4OkgsejprfT1USihVLmxhdCxVLmxuZyxKKSxGPVUuYWx0Pz8wO3JldHVybnt4OkgsejprLHk6Ri1aLHJhd0FsdDpGfX0pLHE9SUooWSw4LCEhJC5sb29wKSxHPVtdLFY9MDtmb3IobGV0IFU9MDtVPHEubGVuZ3RoO1UrKyl7bGV0IEg9cVtVXTtpZihVPjApe2xldCBUPXFbVS0xXTtWKz1NYXRoLmh5cG90KEgueC1ULngsSC56LVQueixILnktVC55KX1sZXR7bGF0OmssbG5nOkZ9PXdKKEgueCxILnosSiksdz1NYXRoLm1heCgwLEgueSk7Ry5wdXNoKHt4OkgueCx6Okgueix5OncsYXJjOlYsbGF0OmssbG5nOkZ9KX1sZXQgQj0xLzAsTj0tMS8wLHo9MS8wLEw9LTEvMCxDPTEvMCxBPS0xLzA7Zm9yKGxldCBVIG9mIEcpe2lmKFUueDxCKUI9VS54O2lmKFUueD5OKU49VS54O2lmKFUuejx6KXo9VS56O2lmKFUuej5MKUw9VS56O2lmKFUueTxDKUM9VS55O2lmKFUueT5BKUE9VS55fXJldHVybnt0cmFpbDokLG9yaWdpbjpKLHBvaW50czpHLHRvdGFsRGlzdGFuY2U6R1tHLmxlbmd0aC0xXS5hcmMsYm91bmRzOnt4OltCLE5dLHk6W0MsQV0sejpbeixMXX0scmF3TWluQWx0OloscmF3TWF4QWx0Olh9fWZ1bmN0aW9uIG4wKCQsSil7bGV0IFE9JC50b3RhbERpc3RhbmNlO2lmKFE9PT0wKXJldHVybiAkLnBvaW50c1swXTtsZXQgWj1KO2lmKCQudHJhaWwubG9vcClaPShaJVErUSklUTtlbHNle2lmKFo8PTApcmV0dXJuICQucG9pbnRzWzBdO2lmKFo+PVEpcmV0dXJuICQucG9pbnRzWyQucG9pbnRzLmxlbmd0aC0xXX1sZXQgWD0wLFk9JC5wb2ludHMubGVuZ3RoLTE7d2hpbGUoWCsxPFkpe2xldCBOPVgrWT4+PjE7aWYoJC5wb2ludHNbTl0uYXJjPD1aKVg9TjtlbHNlIFk9Tn1sZXQgcT0kLnBvaW50c1tYXSxHPSQucG9pbnRzW1ldLFY9Ry5hcmMtcS5hcmMsQj1WPT09MD8wOihaLXEuYXJjKS9WO3JldHVybnt4OnEueCsoRy54LXEueCkqQix6OnEueisoRy56LXEueikqQix5OnEueSsoRy55LXEueSkqQixhcmM6WixsYXQ6cS5sYXQrKEcubGF0LXEubGF0KSpCLGxuZzpxLmxuZysoRy5sbmctcS5sbmcpKkJ9fWZ1bmN0aW9uIHUzKCQpe3N3aXRjaCgkKXtjYXNlIndhbGsiOnJldHVybiAxLjQ7Y2FzZSJydW4iOnJldHVybiAzO2Nhc2UiY3ljbGUiOnJldHVybiA1LjU7Y2FzZSJkcml2ZSI6cmV0dXJuIDEzLjR9fXZhciB5Sj1be2xhdDozNy4zMzI3Mixsbmc6LTEyMi4wMDgzMyxhbHQ6NDl9LHtsYXQ6MzcuMzMzMDksbG5nOi0xMjIuMDA3MzUsYWx0OjQ4fSx7bGF0OjM3LjMzMzczLGxuZzotMTIyLjAwNjYzLGFsdDo0OX0se2xhdDozNy4zMzQ1NCxsbmc6LTEyMi4wMDYyNyxhbHQ6NDl9LHtsYXQ6MzcuMzM1NCxsbmc6LTEyMi4wMDYzMyxhbHQ6NDl9LHtsYXQ6MzcuMzM2MTgsbG5nOi0xMjIuMDA2NzksYWx0OjQ1fSx7bGF0OjM3LjMzNjc1LGxuZzotMTIyLjAwNzU5LGFsdDo0NX0se2xhdDozNy4zMzcwNCxsbmc6LTEyMi4wMDg2MSxhbHQ6NDZ9LHtsYXQ6MzcuMzM2OTgsbG5nOi0xMjIuMDA5NjksYWx0OjQ4fSx7bGF0OjM3LjMzNjYyLGxuZzotMTIyLjAxMDY2LGFsdDo0OH0se2xhdDozNy4zMzU5OCxsbmc6LTEyMi4wMTEzOCxhbHQ6NDl9LHtsYXQ6MzcuMzM1MTcsbG5nOi0xMjIuMDExNzQsYWx0OjUwfSx7bGF0OjM3LjMzNDMxLGxuZzotMTIyLjAxMTY5LGFsdDo1MH0se2xhdDozNy4zMzM1NCxsbmc6LTEyMi4wMTEyMixhbHQ6NTB9LHtsYXQ6MzcuMzMyOTYsbG5nOi0xMjIuMDEwNDIsYWx0OjUxfSx7bGF0OjM3LjMzMjY4LGxuZzotMTIyLjAwOTQsYWx0OjUwfV0sYko9W3tsYXQ6MzcuODMyMTIsbG5nOi0xMjIuNDgwNjUsYWx0OjMwfSx7bGF0OjM3LjgyOTM3LGxuZzotMTIyLjQ3OTc0LGFsdDozMH0se2xhdDozNy44MjY0OSxsbmc6LTEyMi40Nzk0LGFsdDozMH0se2xhdDozNy44MjM2Mixsbmc6LTEyMi40NzkwNyxhbHQ6NDV9LHtsYXQ6MzcuODIwNzQsbG5nOi0xMjIuNDc4NzMsYWx0OjU5fSx7bGF0OjM3LjgxNzg2LGxuZzotMTIyLjQ3ODM5LGFsdDo2Nn0se2xhdDozNy44MTQ5OCxsbmc6LTEyMi40NzgwNixhbHQ6NjZ9LHtsYXQ6MzcuODEyMTEsbG5nOi0xMjIuNDc3NzIsYWx0OjU4fSx7bGF0OjM3LjgwOTIzLGxuZzotMTIyLjQ3NzM0LGFsdDo0NH0se2xhdDozNy44MDk0OSxsbmc6LTEyMi40NzczLGFsdDo0NX0se2xhdDozNy44MTIzNixsbmc6LTEyMi40Nzc2NSxhbHQ6NTl9LHtsYXQ6MzcuODE1MjQsbG5nOi0xMjIuNDc3OTgsYWx0OjY2fSx7bGF0OjM3LjgxODEyLGxuZzotMTIyLjQ3ODMyLGFsdDo2Nn0se2xhdDozNy44MjEsbG5nOi0xMjIuNDc4NjYsYWx0OjU4fSx7bGF0OjM3LjgyMzg3LGxuZzotMTIyLjQ3OSxhbHQ6NDR9LHtsYXQ6MzcuODI2NzUsbG5nOi0xMjIuNDc5MzMsYWx0OjMwfSx7bGF0OjM3LjgyOTYzLGxuZzotMTIyLjQ3OTY3LGFsdDozMH0se2xhdDozNy44MzIzMyxsbmc6LTEyMi40ODA3MixhbHQ6MzB9XSxTSj1be2xhdDozNy44ODY2NCxsbmc6LTEyMi42MjU5OSxhbHQ6MTIxfSx7bGF0OjM3Ljg4ODg3LGxuZzotMTIyLjYyMzMyLGFsdDoxMzV9LHtsYXQ6MzcuODkxMTUsbG5nOi0xMjIuNjIxNixhbHQ6MTY0fSx7bGF0OjM3Ljg5MzUzLGxuZzotMTIyLjYxOTIxLGFsdDoxODB9LHtsYXQ6MzcuODk0NjYsbG5nOi0xMjIuNjE1NzcsYWx0OjIyMH0se2xhdDozNy44OTYzMSxsbmc6LTEyMi42MTI2OCxhbHQ6MjczfSx7bGF0OjM3Ljg5OTE3LGxuZzotMTIyLjYxMDk4LGFsdDozMTN9LHtsYXQ6MzcuOTAxNjYsbG5nOi0xMjIuNjA4NTUsYWx0OjM0Mn0se2xhdDozNy45MDE5OSxsbmc6LTEyMi42MDYwMSxhbHQ6NDA4fSx7bGF0OjM3LjkwMzM5LGxuZzotMTIyLjYwNDAxLGFsdDo0NTB9LHtsYXQ6MzcuOTA2NjIsbG5nOi0xMjIuNjAyOTEsYWx0OjQ0MH0se2xhdDozNy45MDk3MSxsbmc6LTEyMi42MDE3MyxhbHQ6NDMyfSx7bGF0OjM3LjkxMjEzLGxuZzotMTIyLjYwMDA3LGFsdDo0MzZ9LHtsYXQ6MzcuOTE0MzksbG5nOi0xMjIuNTk3OCxhbHQ6NDEwfSx7bGF0OjM3LjkxMjg1LGxuZzotMTIyLjU5NTA0LGFsdDo0MjJ9LHtsYXQ6MzcuOTEyNzQsbG5nOi0xMjIuNTkyMDIsYWx0OjQyNX0se2xhdDozNy45MTUsbG5nOi0xMjIuNTkwMzIsYWx0OjQxMn0se2xhdDozNy45MTYzNyxsbmc6LTEyMi41ODkwMyxhbHQ6NDA2fSx7bGF0OjM3LjkxNDgxLGxuZzotMTIyLjU4NTk1LGFsdDozODJ9LHtsYXQ6MzcuOTE3NCxsbmc6LTEyMi41ODM5OCxhbHQ6MzcyfSx7bGF0OjM3LjkxNjQyLGxuZzotMTIyLjU4MjM2LGFsdDozNTJ9LHtsYXQ6MzcuOTE0ODEsbG5nOi0xMjIuNTgwMTEsYWx0OjM0Mn1dLHhKPVt7bGF0OjQwLjc4MjE2LGxuZzotNzMuOTYyNTQsYWx0OjM3fSx7bGF0OjQwLjc4MjIxLGxuZzotNzMuOTYwOTgsYWx0OjM2fSx7bGF0OjQwLjc4MzI4LGxuZzotNzMuOTYwMSxhbHQ6MzZ9LHtsYXQ6NDAuNzg0NCxsbmc6LTczLjk1OTMsYWx0OjM2fSx7bGF0OjQwLjc4NTUsbG5nOi03My45NTg0OCxhbHQ6MzZ9LHtsYXQ6NDAuNzg2NjQsbG5nOi03My45NTc3NCxhbHQ6MzZ9LHtsYXQ6NDAuNzg3OSxsbmc6LTczLjk1NzY0LGFsdDozNn0se2xhdDo0MC43ODg5OCxsbmc6LTczLjk1NzkyLGFsdDozNn0se2xhdDo0MC43ODg2OCxsbmc6LTczLjk1OTUxLGFsdDozN30se2xhdDo0MC43ODg5Nyxsbmc6LTczLjk2MTEyLGFsdDozNn0se2xhdDo0MC43ODgzMyxsbmc6LTczLjk2MjUsYWx0OjM3fSx7bGF0OjQwLjc4ODI4LGxuZzotNzMuOTY0MTYsYWx0OjM3fSx7bGF0OjQwLjc4ODA1LGxuZzotNzMuOTY1NzMsYWx0OjM2fSx7bGF0OjQwLjc4NjkxLGxuZzotNzMuOTY2MzYsYWx0OjM2fSx7bGF0OjQwLjc4NTY2LGxuZzotNzMuOTY2NjUsYWx0OjM2fSx7bGF0OjQwLjc4NDU4LGxuZzotNzMuOTY2MDgsYWx0OjM2fSx7bGF0OjQwLjc4NDAyLGxuZzotNzMuOTY0NTksYWx0OjM2fSx7bGF0OjQwLjc4MzIyLGxuZzotNzMuOTYzMzQsYWx0OjM3fV0sdko9W3tsYXQ6MzcuNTk2NTksbG5nOi0xMjIuNTAzMTYsYWx0OjR9LHtsYXQ6MzcuNTk1NTUsbG5nOi0xMjIuNTA0MjQsYWx0OjR9LHtsYXQ6MzcuNTk0NTIsbG5nOi0xMjIuNTA1MzQsYWx0OjV9LHtsYXQ6MzcuNTkzMjksbG5nOi0xMjIuNTA1ODgsYWx0Ojl9LHtsYXQ6MzcuNTkyMTIsbG5nOi0xMjIuNTA1MDgsYWx0OjIwfSx7bGF0OjM3LjU5MSxsbmc6LTEyMi41MDQxMyxhbHQ6Mjl9LHtsYXQ6MzcuNTg5NzQsbG5nOi0xMjIuNTA0MTYsYWx0OjQwfSx7bGF0OjM3LjU4ODcsbG5nOi0xMjIuNTA1MjQsYWx0OjUxfSx7bGF0OjM3LjU4NzQ1LGxuZzotMTIyLjUwNDk2LGFsdDo2MH0se2xhdDozNy41ODYyNyxsbmc6LTEyMi41MDQyMixhbHQ6NzF9LHtsYXQ6MzcuNTg1MzksbG5nOi0xMjIuNTA1MzQsYWx0OjgyfSx7bGF0OjM3LjU4NTA1LGxuZzotMTIyLjUwNjk4LGFsdDo5M30se2xhdDozNy41ODUzOSxsbmc6LTEyMi41MDUzNCxhbHQ6ODJ9LHtsYXQ6MzcuNTg2MjcsbG5nOi0xMjIuNTA0MjIsYWx0OjcxfSx7bGF0OjM3LjU4NzQ1LGxuZzotMTIyLjUwNDk2LGFsdDo2MH0se2xhdDozNy41ODg3LGxuZzotMTIyLjUwNTI0LGFsdDo1MX0se2xhdDozNy41ODk3NCxsbmc6LTEyMi41MDQxNixhbHQ6NDB9LHtsYXQ6MzcuNTkxLGxuZzotMTIyLjUwNDEzLGFsdDoyOX0se2xhdDozNy41OTIxMixsbmc6LTEyMi41MDUwOCxhbHQ6MjB9LHtsYXQ6MzcuNTkzMjksbG5nOi0xMjIuNTA1ODgsYWx0Ojl9LHtsYXQ6MzcuNTk0NTIsbG5nOi0xMjIuNTA1MzQsYWx0OjV9LHtsYXQ6MzcuNTk1NTUsbG5nOi0xMjIuNTA0MjQsYWx0OjR9XSxzMD1be2lkOiJhcHBsZS1wYXJrLWxvb3AiLG5hbWU6IkFwcGxlIFBhcmsgTG9vcCIsZGVzY3JpcHRpb246IkN1cGVydGlubyDigKIgZmxhdCByaW5nIHJvYWQiLG1vZGU6IndhbGsiLHdheXBvaW50czp5Sixsb29wOiEwfSx7aWQ6ImdvbGRlbi1nYXRlIixuYW1lOiJHb2xkZW4gR2F0ZSBDcm9zc2luZyIsZGVzY3JpcHRpb246IlNhbiBGcmFuY2lzY28g4oCiIGJyaWRnZSByb3VuZC10cmlwIixtb2RlOiJydW4iLHdheXBvaW50czpiSixsb29wOiEwfSx7aWQ6InRhbS1yaWRnZSIsbmFtZToiTXQuIFRhbSBSaWRnZSIsZGVzY3JpcHRpb246IlN0aW5zb24gQmVhY2gg4oCiIFN0ZWVwIFJhdmluZSArIE1hdHQgRGF2aXMgbG9vcCIsbW9kZToid2FsayIsd2F5cG9pbnRzOlNKLGxvb3A6ITB9LHtpZDoiY2VudHJhbC1wYXJrIixuYW1lOiJSZXNlcnZvaXIgTG9vcCIsZGVzY3JpcHRpb246IkNlbnRyYWwgUGFyayDigKIgMi41IGttIixtb2RlOiJydW4iLHdheXBvaW50czp4Sixsb29wOiEwfSx7aWQ6InBjaC1wYWNpZmljYSIsbmFtZToiUGFjaWZpYyBDb2FzdCBId3kiLGRlc2NyaXB0aW9uOiJQYWNpZmljYSDigKIgRGV2aWwncyBTbGlkZSByb3VuZC10cmlwIixtb2RlOiJkcml2ZSIsd2F5cG9pbnRzOnZKLGxvb3A6ITB9XTtmdW5jdGlvbiBYMCh7b3BlbjokLG9uT3BlbkNoYW5nZTpKLHN1bW1hcnk6USxjaGlsZHJlbjpaLHN1bW1hcnlDbGFzc05hbWU6WD0iIixib2R5Q2xhc3NOYW1lOlk9ImZsZXggZmxleC1jb2wgZ2FwLTIuNSBwdC0yLjUiLGNsYXNzTmFtZTpxPSIiLC4uLkd9KXtyZXR1cm4gSygiZGV0YWlscyIse29wZW46JCxvblRvZ2dsZTooVik9PkooVi5jdXJyZW50VGFyZ2V0Lm9wZW4pLGNsYXNzTmFtZTpgbGVtLXNlY3Rpb24gYmctcGFuZWwgcm91bmRlZC1bMTBweF0gcHgtMyBweS0yICR7cX1gLC4uLkcsY2hpbGRyZW46W0soInN1bW1hcnkiLHtjbGFzc05hbWU6YGxlbS10b2dnbGUgY3Vyc29yLXBvaW50ZXIgc2VsZWN0LW5vbmUgdGV4dC13aGl0ZS85MCBtaW4taC1bMzZweF0gbGVhZGluZy1ub25lIHB5LTIuNSBweC0xIC1teS0yIC1teC0xIHctW2NhbGMoMTAwJSs4cHgpXSAke1h9YCxjaGlsZHJlbjpbUSxLKG0yLHtvcGVuOiR9KV19KSxLKCJkaXYiLHtjbGFzc05hbWU6WSxjaGlsZHJlbjpafSldfSl9ZnVuY3Rpb24gZjUoe2xhYmVsOiQsdmFsdWU6SixvcHRpb25zOlEsZGlzYWJsZWQ6WixvbkNoYW5nZTpYLGNsYXNzTmFtZTpZfSl7bGV0W3EsR109VyghMSksVj1FKG51bGwpLEI9RShudWxsKSxbTix6XT1XKG51bGwpLEw9KCk9PntsZXQgSD1WLmN1cnJlbnQ/LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2lmKCFIKXJldHVybjt6KHt0b3A6SC5ib3R0b20rNCxsZWZ0OkgubGVmdCxtaW5XaWR0aDpILndpZHRofSl9O3cwKCgpPT57aWYocSlMKCl9LFtxXSksdzAoKCk9PntpZighcXx8IU4pcmV0dXJuO2xldCBIPUIuY3VycmVudDtpZighSClyZXR1cm47bGV0IGs9OCxGPXdpbmRvdy5pbm5lcldpZHRoLUgub2Zmc2V0V2lkdGgtaztpZihOLmxlZnQ+Ril6KHsuLi5OLGxlZnQ6TWF0aC5tYXgoayxGKX0pfSxbcSxOXSksYigoKT0+e2lmKCFxKXJldHVybjtsZXQgSD0oKT0+RyghMSksaz0odyk9PntsZXQgVD13LnRhcmdldDtpZighQi5jdXJyZW50Py5jb250YWlucyhUKSYmIVYuY3VycmVudD8uY29udGFpbnMoVCkpSCgpfSxGPSh3KT0+e2lmKCFCLmN1cnJlbnQ/LmNvbnRhaW5zKHcudGFyZ2V0KSlMKCl9O3JldHVybiB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIixrKSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigic2Nyb2xsIixGLCEwKSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigicmVzaXplIixIKSwoKT0+e3dpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZWRvd24iLGspLHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJzY3JvbGwiLEYsITApLHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJyZXNpemUiLEgpfX0sW3FdKTtsZXQgQz1FKCExKTtiKCgpPT57aWYoIXEpe0MuY3VycmVudD0hMTtyZXR1cm59aWYoIU58fEMuY3VycmVudClyZXR1cm47bGV0IEg9Qi5jdXJyZW50Py5xdWVyeVNlbGVjdG9yQWxsKCJbcm9sZT1vcHRpb25dIik7aWYoIUg/Lmxlbmd0aClyZXR1cm47Qy5jdXJyZW50PSEwO2xldCBrPVEuZmluZEluZGV4KChGKT0+Ri52YWx1ZT09PUopO0hbTWF0aC5tYXgoaywwKV0/LmZvY3VzKCl9LFtxLE4sUSxKXSk7bGV0IEE9KEgpPT57bGV0IGs9Wy4uLkIuY3VycmVudD8ucXVlcnlTZWxlY3RvckFsbCgiW3JvbGU9b3B0aW9uXSIpPz9bXV0sRj1rLmluZGV4T2YoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCk7aWYoSC5rZXk9PT0iQXJyb3dEb3duInx8SC5rZXk9PT0iQXJyb3dVcCIpe0gucHJldmVudERlZmF1bHQoKTtsZXQgdz1ILmtleT09PSJBcnJvd0Rvd24iP01hdGgubWluKEYrMSxrLmxlbmd0aC0xKTpNYXRoLm1heChGLTEsMCk7a1t3XT8uZm9jdXMoKX1lbHNlIGlmKEgua2V5PT09IkVzY2FwZSIpSC5wcmV2ZW50RGVmYXVsdCgpLEcoITEpLFYuY3VycmVudD8uZm9jdXMoKX0sVT1RLmZpbmQoKEgpPT5ILnZhbHVlPT09Sik7cmV0dXJuIEsoWjEse2NoaWxkcmVuOltLKCJidXR0b24iLHtyZWY6Vix0eXBlOiJidXR0b24iLCJhcmlhLWxhYmVsIjokLCJhcmlhLWhhc3BvcHVwIjoibGlzdGJveCIsImFyaWEtZXhwYW5kZWQiOnEsZGlzYWJsZWQ6WixvbkNsaWNrOigpPT5HKChIKT0+IUgpLGNsYXNzTmFtZTpgdGV4dC1sZWZ0IGZvbnQtW2luaGVyaXRdIGN1cnNvci1wb2ludGVyIGRpc2FibGVkOmN1cnNvci1kZWZhdWx0ICR7WT8/IiJ9YCxjaGlsZHJlbjpLKCJzcGFuIix7Y2xhc3NOYW1lOiJibG9jayB0cnVuY2F0ZSIsY2hpbGRyZW46VT8ubGFiZWw/P0p9KX0pLHEmJk4mJkIzKEsoImRpdiIse3JlZjpCLHJvbGU6Imxpc3Rib3giLCJhcmlhLWxhYmVsIjokLG9uS2V5RG93bjpBLHN0eWxlOnt0b3A6Ti50b3AsbGVmdDpOLmxlZnQsbWluV2lkdGg6Ti5taW5XaWR0aH0sY2xhc3NOYW1lOiJmaXhlZCBtYXgtaC05MCBvdmVyZmxvdy15LWF1dG8gYmctcGFuZWwgYm9yZGVyIGJvcmRlci13aGl0ZS8xMiByb3VuZGVkLVsxMHB4XSBwLTEgc2hhZG93LVswXzhweF8yNHB4X3JnYmEoMCwwLDAsMC41KV0gdGV4dC1bMTJweF0gdGV4dC13aGl0ZS85MCB6LTUwIixjaGlsZHJlbjpRLm1hcCgoSCk9PksoImJ1dHRvbiIse3R5cGU6ImJ1dHRvbiIscm9sZToib3B0aW9uIiwiYXJpYS1zZWxlY3RlZCI6SC52YWx1ZT09PUosb25DbGljazooKT0+e1goSC52YWx1ZSksRyghMSksVi5jdXJyZW50Py5mb2N1cygpfSxjbGFzc05hbWU6YGJsb2NrIHctZnVsbCB0ZXh0LWxlZnQgZm9udC1baW5oZXJpdF0gcHgtMi41IHB5LTEgcm91bmRlZC1tZCBjdXJzb3ItcG9pbnRlciB3aGl0ZXNwYWNlLW5vd3JhcCB0cmFuc2l0aW9uLWNvbG9ycyBob3ZlcjpiZy13aGl0ZS84IGZvY3VzLXZpc2libGU6Ymctd2hpdGUvOCBvdXRsaW5lLW5vbmUgJHtILnZhbHVlPT09Sj8idGV4dC1hY2NlbnQiOiIifWAsY2hpbGRyZW46SC5sYWJlbH0sSC52YWx1ZSkpfSksZG9jdW1lbnQuYm9keSldfSl9dmFyIGpKPTY1MCxsMz1bMSwyLDUsMjBdLHg2PTEwMDAsZDM9e3N0YXR1czoiaWRsZSIsYXJjOjAsZWxhcHNlZE1zOjB9O2Z1bmN0aW9uIG02KHt1ZGlkOiQsZXhlYzpKfSl7bGV0W1EsWl09VyghMSksW1gsWV09VyhzMFswXS5pZCksW3EsR109VyhzMFswXS5tb2RlKSxbVixCXT1XKDEpLFtOLHpdPVcoZDMpLFtMLENdPVcobnVsbCksQT1FMSgoKT0+czAuZmluZCgoYyk9PmMuaWQ9PT1YKT8/czBbMF0sW1hdKSxVPUUxKCgpPT5TNihBKSxbQV0pLEg9RSgwKSxrPUUoImlkbGUiKSxGPUUodTMocSkqViksdz1FKDApLFQ9RShVKSxTPUUobnVsbCk7YigoKT0+e0YuY3VycmVudD11MyhxKSpWfSxbcSxWXSk7bGV0IHg9RShudWxsKTtiKCgpPT57bGV0IGM9VC5jdXJyZW50LHY9SC5jdXJyZW50O2lmKFQuY3VycmVudD1VLGMmJmMhPT1VKXguY3VycmVudD1nSihjLHYsVSxwZXJmb3JtYW5jZS5ub3coKSk7SC5jdXJyZW50PTAsdy5jdXJyZW50PTAsay5jdXJyZW50PSJpZGxlIixTLmN1cnJlbnQ9bnVsbCx6KGQzKX0sW1VdKTtsZXQgJDE9RSgwKSxmPUUobnVsbCksaT1FKG51bGwpO2IoKCk9PntsZXQgYz0wLHY9KG4pPT57bGV0IFgxPWYuY3VycmVudCxMMT1YMT09bnVsbD8xNjpNYXRoLm1pbig2NCxuLVgxKTtpZihmLmN1cnJlbnQ9biwkMS5jdXJyZW50PSgkMS5jdXJyZW50K0wxKjAuMDAwMTIpJShNYXRoLlBJKjIpLGsuY3VycmVudD09PSJwbGF5aW5nIil7bGV0IFkxPUYuY3VycmVudCpMMS8xMDAwO0guY3VycmVudCs9WTEsdy5jdXJyZW50Kz1MMTtsZXQgSDE9VC5jdXJyZW50LnRvdGFsRGlzdGFuY2U7aWYoIVQuY3VycmVudC50cmFpbC5sb29wJiZILmN1cnJlbnQ+PUgxKUguY3VycmVudD1IMSxrLmN1cnJlbnQ9InBhdXNlZCIseih7c3RhdHVzOiJwYXVzZWQiLGFyYzpIMSxlbGFwc2VkTXM6dy5jdXJyZW50fSl9bGV0IEoxPWkuY3VycmVudDtpZihKMSl7bGV0IFkxPVQuY3VycmVudCxIMT1udWxsLHk9eC5jdXJyZW50O2lmKHkpe2xldCBnPShuLXkuc3RhcnRNcykvako7aWYoZz49MSl4LmN1cnJlbnQ9bnVsbDtlbHNle2xldCBQPXBKKGcpO1kxPWZKKHksUCksSDE9e3g6eS5wcmV2TWFya2VyLngrKHkubmV4dE1hcmtlci54LXkucHJldk1hcmtlci54KSpQLHk6eS5wcmV2TWFya2VyLnkrKHkubmV4dE1hcmtlci55LXkucHJldk1hcmtlci55KSpQLHo6eS5wcmV2TWFya2VyLnorKHkubmV4dE1hcmtlci56LXkucHJldk1hcmtlci56KSpQfX19dUooSjEsWTEsSC5jdXJyZW50LCQxLmN1cnJlbnQsbixrLmN1cnJlbnQ9PT0icGxheWluZyIsSDEpfWM9cmVxdWVzdEFuaW1hdGlvbkZyYW1lKHYpfTtyZXR1cm4gYz1yZXF1ZXN0QW5pbWF0aW9uRnJhbWUodiksKCk9PmNhbmNlbEFuaW1hdGlvbkZyYW1lKGMpfSxbXSksYigoKT0+e2xldCBjPXNldEludGVydmFsKCgpPT57aWYoay5jdXJyZW50PT09InBsYXlpbmciKXooe3N0YXR1czoicGxheWluZyIsYXJjOkguY3VycmVudCxlbGFwc2VkTXM6dy5jdXJyZW50fSl9LDI1MCk7cmV0dXJuKCk9PmNsZWFySW50ZXJ2YWwoYyl9LFtdKSxiKCgpPT57aWYoTi5zdGF0dXMhPT0icGxheWluZyIpcmV0dXJuO2xldCBjPSExLHY9MCxuPW51bGwsWDE9YXN5bmMoKT0+e2lmKGN8fG4pcmV0dXJuO2xldCBKMT1EYXRlLm5vdygpO2lmKEoxLXY8eDYpcmV0dXJuO3Y9SjE7bGV0IFkxPW4wKFQuY3VycmVudCxILmN1cnJlbnQpLEgxPWB4Y3J1biBzaW1jdGwgbG9jYXRpb24gJHskfSBzZXQgJHtZMS5sYXQudG9GaXhlZCg3KX0sJHtZMS5sbmcudG9GaXhlZCg3KX1gO249SihIMSkudGhlbigoeSk9PntpZihjKXJldHVybjtpZih5LmV4aXRDb2RlIT09MClDKGc2KHkuc3RkZXJyKXx8InNpbWN0bCBsb2NhdGlvbiBzZXQgZmFpbGVkIik7ZWxzZSBDKG51bGwpfSkuY2F0Y2goKHkpPT57aWYoIWMpQyh5IGluc3RhbmNlb2YgRXJyb3I/eS5tZXNzYWdlOlN0cmluZyh5KSl9KS5maW5hbGx5KCgpPT57bj1udWxsfSl9O1gxKCk7bGV0IEwxPXNldEludGVydmFsKFgxLHg2KTtyZXR1cm4oKT0+e2M9ITAsY2xlYXJJbnRlcnZhbChMMSl9fSxbTi5zdGF0dXMsJCxKXSk7bGV0IHI9RCgoKT0+e2lmKGsuY3VycmVudD09PSJwbGF5aW5nIil7ay5jdXJyZW50PSJwYXVzZWQiLHooKGMpPT4oey4uLmMsc3RhdHVzOiJwYXVzZWQifSkpO3JldHVybn1pZihILmN1cnJlbnQ+PVQuY3VycmVudC50b3RhbERpc3RhbmNlJiYhVC5jdXJyZW50LnRyYWlsLmxvb3ApSC5jdXJyZW50PTAsdy5jdXJyZW50PTA7aWYoUy5jdXJyZW50PT1udWxsKXtsZXQgYz1uMChULmN1cnJlbnQsSC5jdXJyZW50KTtTLmN1cnJlbnQ9e2xhdDpjLmxhdCxsbmc6Yy5sbmd9fWsuY3VycmVudD0icGxheWluZyIseigoYyk9Pih7Li4uYyxzdGF0dXM6InBsYXlpbmciLGFyYzpILmN1cnJlbnQsZWxhcHNlZE1zOncuY3VycmVudH0pKX0sW10pLGw9RCgoKT0+e2suY3VycmVudD0iaWRsZSIsSC5jdXJyZW50PTAsdy5jdXJyZW50PTAseihkMyk7bGV0IGM9Uy5jdXJyZW50O1MuY3VycmVudD1udWxsO2xldCB2PWM/YHhjcnVuIHNpbWN0bCBsb2NhdGlvbiAkeyR9IHNldCAke2MubGF0LnRvRml4ZWQoNyl9LCR7Yy5sbmcudG9GaXhlZCg3KX1gOmB4Y3J1biBzaW1jdGwgbG9jYXRpb24gJHskfSBjbGVhcmA7Sih2KS50aGVuKChuKT0+e2lmKG4uZXhpdENvZGUhPT0wKUMoZzYobi5zdGRlcnIpfHxudWxsKTtlbHNlIEMobnVsbCl9KX0sW0osJF0pLG89RCgoYyk9PntZKGMpO2xldCB2PXMwLmZpbmQoKG4pPT5uLmlkPT09Yyk7aWYodilHKHYubW9kZSl9LFtdKTtiKCgpPT4oKT0+e2lmKGsuY3VycmVudD09PSJpZGxlIilyZXR1cm47bGV0IGM9Uy5jdXJyZW50LHY9Yz9geGNydW4gc2ltY3RsIGxvY2F0aW9uICR7JH0gc2V0ICR7Yy5sYXQudG9GaXhlZCg3KX0sJHtjLmxuZy50b0ZpeGVkKDcpfWA6YHhjcnVuIHNpbWN0bCBsb2NhdGlvbiAkeyR9IGNsZWFyYDtKKHYpLmNhdGNoKCgpPT57fSl9LFtKLCRdKTtsZXQgUTE9Ti5zdGF0dXM9PT0icGxheWluZyIsTjE9UTE/YCR7bzMoTi5hcmMpfSDCtyAke2g2KE4uZWxhcHNlZE1zKX1gOm8zKFUudG90YWxEaXN0YW5jZSk7cmV0dXJuIEsoWDAse29wZW46USxvbk9wZW5DaGFuZ2U6WixzdW1tYXJ5Q2xhc3NOYW1lOiJncmlkIFtncmlkLXRlbXBsYXRlLWNvbHVtbnM6YXV0b19taW5tYXgoMCwxZnIpX2F1dG9dIFtjb250YWluZXItdHlwZTppbmxpbmUtc2l6ZV0gaXRlbXMtY2VudGVyIGdhcC0yIHRleHQtbGVmdCIsc3VtbWFyeTpLKFoxLHtjaGlsZHJlbjpbSygic3BhbiIse2NsYXNzTmFtZToidGV4dC1bMTFweF0gZm9udC1zZW1pYm9sZCB0ZXh0LXdoaXRlLzUwIHVwcGVyY2FzZSB0cmFja2luZy1bMC4wOGVtXSBsZWFkaW5nLW5vbmUgaW5saW5lLWZsZXggaXRlbXMtY2VudGVyIixjaGlsZHJlbjoiTG9jYXRpb24ifSksUT9LKCJzcGFuIix7ImRhdGEtbG9jYXRpb24tc3RhdHVzIjohMCxjbGFzc05hbWU6Im1pbi13LTAgdGV4dC1bMTFweF0gdGV4dC13aGl0ZS81NSBmb250LW1vbm8gaW5saW5lLWZsZXggaXRlbXMtY2VudGVyIGdhcC0xLjUganVzdGlmeS1zZWxmLWVuZCBsZWFkaW5nLW5vbmUgd2hpdGVzcGFjZS1ub3dyYXAgb3ZlcmZsb3ctaGlkZGVuIHRleHQtZWxsaXBzaXMgbWF4LXctZnVsbCIsY2hpbGRyZW46W0soInNwYW4iLHtjbGFzc05hbWU6InNpemUtMS41IHJvdW5kZWQtZnVsbCBzaHJpbmstMCBbdHJhbnNpdGlvbjpiYWNrZ3JvdW5kXzAuMnMsYm94LXNoYWRvd18wLjJzXSIsc3R5bGU6e2JhY2tncm91bmQ6UTE/IiM0YWRlODAiOlUudG90YWxEaXN0YW5jZT4wPyJyZ2JhKDI1NSwyNTUsMjU1LDAuMykiOiJ0cmFuc3BhcmVudCIsYm94U2hhZG93OlExPyIwIDAgNnB4IHJnYmEoNzQsMjIyLDEyOCwwLjcpIjoibm9uZSJ9fSksSygic3BhbiIse2NsYXNzTmFtZToibWluLXctMCBvdmVyZmxvdy1oaWRkZW4gdGV4dC1lbGxpcHNpcyIsY2hpbGRyZW46TjF9KSwhUTEmJksoInNwYW4iLHsiZGF0YS1sb2NhdGlvbi1zdGF0dXMtdG90YWwiOiEwLGNsYXNzTmFtZToic2hyaW5rLTAiLGNoaWxkcmVuOiJ0b3RhbCJ9KV19KTpLKCJzcGFuIix7fSldfSksY2hpbGRyZW46W0soImRpdiIse2NsYXNzTmFtZToiZmxleCBmbGV4LWNvbCBnYXAtMSIsY2hpbGRyZW46W0soImRpdiIse2NsYXNzTmFtZToicmVsYXRpdmUgYmxvY2siLGNoaWxkcmVuOltLKGY1LHtsYWJlbDoiVHJhaWwiLHZhbHVlOlgsb25DaGFuZ2U6byxvcHRpb25zOnMwLm1hcCgoYyk9Pih7dmFsdWU6Yy5pZCxsYWJlbDpjLm5hbWV9KSksY2xhc3NOYW1lOiJiZy13aGl0ZS9bMC4wNF0gYm9yZGVyIGJvcmRlci13aGl0ZS84IHJvdW5kZWQtbWQgdGV4dC13aGl0ZS85MCB0ZXh0LVsxMnB4XSBweS0xLjUgcHItWzI2cHhdIHBsLTIgdy1mdWxsIFt0cmFuc2l0aW9uOmJhY2tncm91bmRfMC4xMnMsYm9yZGVyLWNvbG9yXzAuMTJzXSBob3ZlcjpiZy13aGl0ZS9bMC4wN10gaG92ZXI6Ym9yZGVyLVtyZ2JhKDI1NSwyNTUsMjU1LDAuMTYpXSBmb2N1czpvdXRsaW5lLW5vbmUgZm9jdXM6Ymctd2hpdGUvWzAuMDhdIGZvY3VzOmJvcmRlci1bcmdiYSgyNTUsMjU1LDI1NSwwLjI0KV0ifSksSygic3BhbiIse2NsYXNzTmFtZToiYWJzb2x1dGUgcmlnaHQtWzlweF0gdG9wLTEvMiAtdHJhbnNsYXRlLXktMS8yIHBvaW50ZXItZXZlbnRzLW5vbmUgZmxleCBpdGVtcy1jZW50ZXIiLCJhcmlhLWhpZGRlbiI6InRydWUiLGNoaWxkcmVuOksobTIse29wZW46ITF9KX0pXX0pLEsoImRpdiIse2NsYXNzTmFtZToidGV4dC1bMTBweF0gdGV4dC13aGl0ZS80NSIsY2hpbGRyZW46QS5kZXNjcmlwdGlvbn0pXX0pLEsoImRpdiIse2NsYXNzTmFtZToicmVsYXRpdmUgdy1mdWxsIHJvdW5kZWQtWzEwcHhdIG92ZXJmbG93LWhpZGRlbiBiZy1bIzBhMGEwY10gYm9yZGVyIGJvcmRlci13aGl0ZS9bMC4wNl0gW2FzcGVjdC1yYXRpbzoxNi8xMV0iLGNoaWxkcmVuOltLKCJjYW52YXMiLHtyZWY6aSxjbGFzc05hbWU6InctZnVsbCBoLWZ1bGwgYmxvY2sifSksSyhSSix7cHJlcGFyZWQ6VX0pXX0pLEsoImRpdiIse2NsYXNzTmFtZToiZ3JpZCBbZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOjFmcl8xZnJfMWZyXSBnYXAtMS41IixjaGlsZHJlbjpbSyhjMyx7bGFiZWw6IkRpc3RhbmNlIix2YWx1ZTpvMyhOLmFyYyl9KSxLKGMzLHtsYWJlbDoiUGFjZSIsdmFsdWU6ZEooRi5jdXJyZW50KX0pLEsoYzMse2xhYmVsOiJFbGFwc2VkIix2YWx1ZTpoNihOLmVsYXBzZWRNcyl9KV19KSxLKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggZ2FwLTEuNSIsY2hpbGRyZW46W0soImJ1dHRvbiIse3R5cGU6ImJ1dHRvbiIsb25DbGljazpyLGNsYXNzTmFtZTpgZmxleC0xIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGdhcC0xLjUgcHktMiBweC0yLjUgYm9yZGVyLW5vbmUgcm91bmRlZC1bN3B4XSB0ZXh0LVsxMnB4XSBmb250LXNlbWlib2xkIGN1cnNvci1wb2ludGVyIGZvbnQtW2luaGVyaXRdICR7UTE/ImJnLXdoaXRlL1swLjE2XSB0ZXh0LXdoaXRlIGVuYWJsZWQ6aG92ZXI6Ymctd2hpdGUvWzAuMjJdIjoiYmctc3VjY2Vzcy1lbWVyYWxkIHRleHQtWyMwNjIwMThdIGVuYWJsZWQ6aG92ZXI6YnJpZ2h0bmVzcy1bMS4wOF0ifWAsImFyaWEtcHJlc3NlZCI6UTEsdGl0bGU6UTE/IlBhdXNlIjoiUGxheSIsY2hpbGRyZW46W1ExP0soVzMse30pOksoZjIse30pLEsoInNwYW4iLHtjaGlsZHJlbjpRMT8iUGF1c2UiOiJQbGF5In0pXX0pLEsoImJ1dHRvbiIse3R5cGU6ImJ1dHRvbiIsb25DbGljazpsLGNsYXNzTmFtZToiZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgZ2FwLTEuNSBweS0yIHB4LTMgYm9yZGVyIGJvcmRlci13aGl0ZS8xMiByb3VuZGVkLVs3cHhdIHRleHQtWzEycHhdIGZvbnQtbWVkaXVtIGJnLXRyYW5zcGFyZW50IHRleHQtd2hpdGUvODUgY3Vyc29yLXBvaW50ZXIgZm9udC1baW5oZXJpdF0gZW5hYmxlZDpob3ZlcjpiZy13aGl0ZS9bMC4wNl0gZW5hYmxlZDpob3Zlcjpib3JkZXItd2hpdGUvMjAgZW5hYmxlZDpob3Zlcjp0ZXh0LXdoaXRlIGRpc2FibGVkOm9wYWNpdHktNDAgZGlzYWJsZWQ6Y3Vyc29yLW5vdC1hbGxvd2VkIixkaXNhYmxlZDpOLnN0YXR1cz09PSJpZGxlIiYmTi5hcmM9PT0wLHRpdGxlOiJTdG9wIGFuZCBjbGVhciBzaW11bGF0ZWQgbG9jYXRpb24iLGNoaWxkcmVuOltLKHAyLHt9KSxLKCJzcGFuIix7Y2hpbGRyZW46IlN0b3AifSldfSldfSksSygiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGZsZXgtcm93IGl0ZW1zLXN0cmV0Y2ggZ2FwLTEuNSIsY2hpbGRyZW46W0soImRpdiIse2NsYXNzTmFtZToiZmxleC0xIG1pbi13LTAiLGNoaWxkcmVuOksoaEose2FyaWFMYWJlbDoiVHJhbnNwb3J0IG1vZGUiLHZhbHVlOnEsb25DaGFuZ2U6KGMpPT5HKGMpLG9wdGlvbnM6W3t2YWx1ZToid2FsayIsbGFiZWw6IldhbGsiLGljb246SyhfMyx7fSl9LHt2YWx1ZToicnVuIixsYWJlbDoiUnVuIixpY29uOksoRDMse30pfSx7dmFsdWU6ImN5Y2xlIixsYWJlbDoiQ3ljbGUiLGljb246SyhUMyx7fSl9LHt2YWx1ZToiZHJpdmUiLGxhYmVsOiJEcml2ZSIsaWNvbjpLKHczLHt9KX1dfSl9KSxLKCJidXR0b24iLHt0eXBlOiJidXR0b24iLG9uQ2xpY2s6KCk9PntsZXQgYz1sMy5pbmRleE9mKFYpLHY9bDNbKGMrMSklbDMubGVuZ3RoXTtCKHYpfSxjbGFzc05hbWU6YGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGdhcC0xIHB4LTIuNSBib3JkZXIgcm91bmRlZC1bN3B4XSBjdXJzb3ItcG9pbnRlciBmb250LVtpbmhlcml0XSB0ZXh0LVsxMXB4XSBmb250LXNlbWlib2xkIG1pbi13LVs1NnB4XSBhY3RpdmU6c2NhbGUtWzAuOTddICR7Vj4xPyJiZy13aGl0ZSBib3JkZXItd2hpdGUgdGV4dC1bIzBhMGEwY10gaG92ZXI6Ymctd2hpdGUvWzAuODhdIGhvdmVyOmJvcmRlci13aGl0ZS9bMC44OF0gaG92ZXI6dGV4dC1bIzBhMGEwY10iOiJiZy13aGl0ZS9bMC4wNF0gYm9yZGVyLXdoaXRlLzggdGV4dC13aGl0ZS84NSBob3ZlcjpiZy13aGl0ZS9bMC4wOV0gaG92ZXI6Ym9yZGVyLVtyZ2JhKDI1NSwyNTUsMjU1LDAuMTgpXSBob3Zlcjp0ZXh0LXdoaXRlIn1gLCJhcmlhLWxhYmVsIjpgU3BlZWQgJHtWfcOXIOKAlCB0YXAgdG8gY3ljbGVgLHRpdGxlOmBTcGVlZCAke1Z9w5cg4oCUIHRhcCB0byBjeWNsZWAsY2hpbGRyZW46W0soUDMse30pLFY+MSYmSygic3BhbiIse2NsYXNzTmFtZToiZm9udC1tb25vIFtmb250LXZhcmlhbnQtbnVtZXJpYzp0YWJ1bGFyLW51bXNdIixjaGlsZHJlbjpbViwiw5ciXX0pXX0pXX0pLEwmJksoImRpdiIse2NsYXNzTmFtZToiYmctZGFuZ2VyLzEwIGJvcmRlciBib3JkZXItZGFuZ2VyLzIwIHRleHQtZGFuZ2VyLXNvZnQgdGV4dC1bMTFweF0gcHgtMiBweS0xLjUgcm91bmRlZC1tZCIsY2hpbGRyZW46TH0pXX0pfXZhciBjMz1kMChmdW5jdGlvbih7bGFiZWw6Six2YWx1ZTpRfSl7cmV0dXJuIEsoImRpdiIse2NsYXNzTmFtZToiZmxleCBmbGV4LWNvbCBnYXAtMC41IGJnLXdoaXRlL1swLjAzXSBib3JkZXIgYm9yZGVyLXdoaXRlL1swLjA2XSByb3VuZGVkLW1kIHB5LVs1cHhdIHB4LVs3cHhdIG1pbi13LTAiLGNoaWxkcmVuOltLKCJkaXYiLHtjbGFzc05hbWU6InRleHQtWzlweF0gdXBwZXJjYXNlIHRyYWNraW5nLVswLjA2ZW1dIHRleHQtd2hpdGUvNDUiLGNoaWxkcmVuOkp9KSxLKCJkaXYiLHtjbGFzc05hbWU6InRleHQtWzEycHhdIGZvbnQtbW9ubyB0ZXh0LXdoaXRlIG92ZXJmbG93LWhpZGRlbiB0ZXh0LWVsbGlwc2lzIHdoaXRlc3BhY2Utbm93cmFwIixjaGlsZHJlbjpRfSldfSl9KTtmdW5jdGlvbiBoSih7dmFsdWU6JCxvbkNoYW5nZTpKLG9wdGlvbnM6USxhcmlhTGFiZWw6Wn0pe3JldHVybiBLKCJkaXYiLHtyb2xlOiJncm91cCIsImFyaWEtbGFiZWwiOlosY2xhc3NOYW1lOiJmbGV4IGJnLXdoaXRlL1swLjA0XSBib3JkZXIgYm9yZGVyLXdoaXRlLzggcm91bmRlZC1bN3B4XSBwLTAuNSBnYXAtMC41IixjaGlsZHJlbjpRLm1hcCgoWCk9PntsZXQgWT1YLnZhbHVlPT09JDtyZXR1cm4gSygiYnV0dG9uIix7dHlwZToiYnV0dG9uIixvbkNsaWNrOigpPT5KKFgudmFsdWUpLGNsYXNzTmFtZTpgZmxleC0xIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGJvcmRlci1ub25lIHJvdW5kZWQtWzVweF0gcHktWzVweF0gcHgtMiB0ZXh0LVsxMXB4XSBmb250LW1lZGl1bSBjdXJzb3ItcG9pbnRlciBmb250LVtpbmhlcml0XSBbdHJhbnNpdGlvbjpiYWNrZ3JvdW5kXzAuMTJzLGNvbG9yXzAuMTJzXSBtaW4taC1bMjJweF0gJHtZPyJiZy13aGl0ZS9bMC4xMl0gdGV4dC13aGl0ZSI6ImJnLXRyYW5zcGFyZW50IHRleHQtd2hpdGUvNjAgaG92ZXI6Ymctd2hpdGUvWzAuMDVdIGhvdmVyOnRleHQtd2hpdGUvOTAifWAsImFyaWEtcHJlc3NlZCI6WSwiYXJpYS1sYWJlbCI6WC5pY29uP1gubGFiZWw6dm9pZCAwLHRpdGxlOlguaWNvbj9YLmxhYmVsOnZvaWQgMCxjaGlsZHJlbjpYLmljb24/P1gubGFiZWx9LFgudmFsdWUpfSl9KX1mdW5jdGlvbiBSSih7cHJlcGFyZWQ6JH0pe2lmKCQucmF3TWF4QWx0LSQucmF3TWluQWx0PDUpcmV0dXJuIG51bGw7cmV0dXJuIEsoWjEse2NoaWxkcmVuOltLKCJkaXYiLHtjbGFzc05hbWU6ImFic29sdXRlIHRvcC0yIGxlZnQtMi41IGJnLXBhbmVsLW92ZXJsYXkgdGV4dC13aGl0ZS84NSB0ZXh0LVsxMHB4XSBmb250LW1vbm8gcHgtMS41IHB5LTAuNSByb3VuZGVkLVs1cHhdIGZsZXggaXRlbXMtY2VudGVyIHRyYWNraW5nLVswLjAyZW1dIGJvcmRlciBib3JkZXItd2hpdGUvWzAuMDZdIixjaGlsZHJlbjpbSyhQNSx7ZGlyOiJ1cCJ9KSwiICIsUjYoJC5yYXdNYXhBbHQpXX0pLEsoImRpdiIse2NsYXNzTmFtZToiYWJzb2x1dGUgdG9wLTIgcmlnaHQtMi41IGJnLXBhbmVsLW92ZXJsYXkgdGV4dC13aGl0ZS84NSB0ZXh0LVsxMHB4XSBmb250LW1vbm8gcHgtMS41IHB5LTAuNSByb3VuZGVkLVs1cHhdIGZsZXggaXRlbXMtY2VudGVyIHRyYWNraW5nLVswLjAyZW1dIGJvcmRlciBib3JkZXItd2hpdGUvWzAuMDZdIixjaGlsZHJlbjpbSyhQNSx7ZGlyOiJkb3duIn0pLCIgIixSNigkLnJhd01pbkFsdCldfSldfSl9dmFyIHY2PTE0MDtmdW5jdGlvbiBqNigkLEope2xldCBRPUFycmF5KEopO2ZvcihsZXQgWj0wO1o8SjtaKyspe2xldCBYPUo9PT0xPzA6Wi8oSi0xKSxZPW4wKCQsWCokLnRvdGFsRGlzdGFuY2UpO1FbWl09e3g6WS54LHk6WS55LHo6WS56fX1yZXR1cm4gUX1mdW5jdGlvbiBnSigkLEosUSxaKXtsZXQgWD0oJC5ib3VuZHMueFswXSskLmJvdW5kcy54WzFdKS8yLFk9KCQuYm91bmRzLnpbMF0rJC5ib3VuZHMuelsxXSkvMixxPSQuYm91bmRzLnlbMF0sRz1NYXRoLm1heCgxLCQuYm91bmRzLnhbMV0tJC5ib3VuZHMueFswXSwkLmJvdW5kcy56WzFdLSQuYm91bmRzLnpbMF0pLFY9KFEuYm91bmRzLnhbMF0rUS5ib3VuZHMueFsxXSkvMixCPShRLmJvdW5kcy56WzBdK1EuYm91bmRzLnpbMV0pLzIsTj1RLmJvdW5kcy55WzBdLEw9TWF0aC5tYXgoMSxRLmJvdW5kcy54WzFdLVEuYm91bmRzLnhbMF0sUS5ib3VuZHMuelsxXS1RLmJvdW5kcy56WzBdKS9HLEE9ajYoJCx2NikubWFwKCh4KT0+KHt4Oih4LngtWCkqTCtWLHk6KHgueS1xKSpMK04sejooeC56LVkpKkwrQn0pKSxVPWo2KFEsdjYpLEg9KCQudHJhaWwubG9vcHx8US50cmFpbC5sb29wKT8/ITEsaz1tSihBLFUsSCksRj1uMCgkLEopLHc9e3g6KEYueC1YKSpMK1YseTooRi55LXEpKkwrTix6OihGLnotWSkqTCtCfSxUPW4wKFEsMCksUz17eDpULngseTpULnksejpULnp9O3JldHVybntmcm9tOiQsdG86USxmcm9tUHRzOkEsdG9QdHM6ayxwcmV2TWFya2VyOncsbmV4dE1hcmtlcjpTLHN0YXJ0TXM6Wn19ZnVuY3Rpb24gbUooJCxKLFEpe2xldCBaPSQubGVuZ3RoLFg9MS8wLFk9MCxxPSExLEc9W0osWy4uLkpdLnJldmVyc2UoKV07Zm9yKGxldCBOPTA7TjxHLmxlbmd0aDtOKyspe2xldCB6PUdbTl0sTD1RP1o6MTtmb3IobGV0IEM9MDtDPEw7QysrKXtsZXQgQT0wO2ZvcihsZXQgVT0wO1U8WjtVKyspe2xldCBIPSRbVV0saz16WyhVK0MpJVpdLEY9SC54LWsueCx3PUgueS1rLnksVD1ILnotay56O2lmKEErPUYqRit3KncrVCpULEE+PVgpYnJlYWt9aWYoQTxYKVg9QSxZPUMscT1OPT09MX19bGV0IFY9cT9bLi4uSl0ucmV2ZXJzZSgpOkosQj1BcnJheShaKTtmb3IobGV0IE49MDtOPFo7TisrKUJbTl09VlsoTitZKSVaXTtyZXR1cm4gQn1mdW5jdGlvbiBmSigkLEope2xldCBRPSQuZnJvbVB0cy5sZW5ndGgsWj1BcnJheShRKSxYPTAsWT1udWxsLHE9MS8wLEc9LTEvMCxWPTEvMCxCPS0xLzAsTj0xLzAsej0tMS8wO2ZvcihsZXQgTD0wO0w8UTtMKyspe2xldCBDPSQuZnJvbVB0c1tMXSxBPSQudG9QdHNbTF0sVT1DLngrKEEueC1DLngpKkosSD1DLnkrKEEueS1DLnkpKkosaz1DLnorKEEuei1DLnopKko7aWYoWSl7bGV0IHc9VS1ZLngsVD1ILVkueSxTPWstWS56O1grPU1hdGguc3FydCh3KncrVCpUK1MqUyl9bGV0IEY9e3g6VSx5OkgsejprLGFyYzpYLGxhdDowLGxuZzowfTtpZihaW0xdPUYsWT1GLFU8cSlxPVU7aWYoVT5HKUc9VTtpZihIPFYpVj1IO2lmKEg+QilCPUg7aWYoazxOKU49aztpZihrPnopej1rfXJldHVybnt0cmFpbDokLnRvLnRyYWlsLG9yaWdpbjokLnRvLm9yaWdpbixwb2ludHM6Wix0b3RhbERpc3RhbmNlOlgsYm91bmRzOnt4OltxLEddLHk6W1YsQl0sejpbTix6XX0scmF3TWluQWx0OiQudG8ucmF3TWluQWx0KygkLmZyb20ucmF3TWluQWx0LSQudG8ucmF3TWluQWx0KSooMS1KKSxyYXdNYXhBbHQ6JC50by5yYXdNYXhBbHQrKCQuZnJvbS5yYXdNYXhBbHQtJC50by5yYXdNYXhBbHQpKigxLUopfX1mdW5jdGlvbiBwSigkKXtyZXR1cm4gJDwwLjU/MiokKiQ6MS1NYXRoLnBvdygtMiokKzIsMikvMn1mdW5jdGlvbiB1SigkLEosUSxaLFgsWSxxKXtsZXQgRz0kLmdldENvbnRleHQoIjJkIik7aWYoIUcpcmV0dXJuO2xldHtjbGllbnRXaWR0aDpWLGNsaWVudEhlaWdodDpCfT0kO2lmKFY9PT0wfHxCPT09MClyZXR1cm47bGV0IE49dHlwZW9mIHdpbmRvdzwidSI/d2luZG93LmRldmljZVBpeGVsUmF0aW98fDE6MSx6PU1hdGgucm91bmQoVipOKSxMPU1hdGgucm91bmQoQipOKTtpZigkLndpZHRoIT09enx8JC5oZWlnaHQhPT1MKSQud2lkdGg9eiwkLmhlaWdodD1MO0cuc2V0VHJhbnNmb3JtKE4sMCwwLE4sMCwwKSxHLmNsZWFyUmVjdCgwLDAsVixCKTtsZXQgQz1HLmNyZWF0ZVJhZGlhbEdyYWRpZW50KFYqMC41LEIqMC41NSxNYXRoLm1pbihWLEIpKjAuMixWKjAuNSxCKjAuNTUsTWF0aC5tYXgoVixCKSowLjg1KTtDLmFkZENvbG9yU3RvcCgwLCIjMWExYTFkIiksQy5hZGRDb2xvclN0b3AoMSwiIzBhMGEwYyIpLEcuZmlsbFN0eWxlPUMsRy5maWxsUmVjdCgwLDAsVixCKSxsSihHLFYsQik7bGV0e3BvaW50czpBLGJvdW5kczpVfT1KO2lmKEEubGVuZ3RoPDIpcmV0dXJuO2xldCBIPTI4Kk1hdGguUEkvMTgwLGs9TWF0aC5zaW4oSCksRj1NYXRoLmNvcyhIKSx3PU1hdGguc2luKFopLFQ9TWF0aC5jb3MoWiksUz0oVS54WzBdK1UueFsxXSkvMix4PShVLnpbMF0rVS56WzFdKS8yLCQxPVUueFsxXS1VLnhbMF0sZj1VLnpbMV0tVS56WzBdLGk9VS55WzFdLVUueVswXSxyPU1hdGgubWF4KCQxLGYpKjEuMDUsbD1NYXRoLm1heChmKkYraSprLCQxKjAuNCkqMS4xNSxvPVYqMC4wOCxRMT1CKjAuMTgsTjE9TWF0aC5taW4oKFYtbyoyKS9yLChCLVExKjIpL2wpKjEuNDUsYz1pPDE/MTpNYXRoLm1pbigyNCwxNDAvTWF0aC5tYXgoMjAsaSkpLHY9KHksZyxQKT0+e2xldCBwPXktUyx1PVAteCxqPXAqVCt1KncsRzE9LXAqdyt1KlQsejE9ZypjLE0xPXoxKkYtRzEqayxXMT16MSprK0cxKkY7cmV0dXJue3N4OlYvMitqKk4xLHN5OkIqMC41NS1NMSpOMSxkZXB0aDpXMX19LG49MzgsWDE9QS5tYXAoKHkpPT57bGV0IGc9dih5LngseS55LHkueiksUD12KHkueCwwLHkueikscD17c3g6Zy5zeCxzeTpNYXRoLm1heChQLnN5LGcuc3krbiksZGVwdGg6UC5kZXB0aH07cmV0dXJue3A6eSx0b3A6Zyxib3Q6cH19KTtmb3IobGV0IHk9MTt5PFgxLmxlbmd0aDt5Kyspe2xldCBnPVgxW3ktMV0sUD1YMVt5XSxwPUcuY3JlYXRlTGluZWFyR3JhZGllbnQoKGcudG9wLnN4K1AudG9wLnN4KS8yLChnLnRvcC5zeStQLnRvcC5zeSkvMiwoZy5ib3Quc3grUC5ib3Quc3gpLzIsKGcuYm90LnN5K1AuYm90LnN5KS8yKTtwLmFkZENvbG9yU3RvcCgwLCJyZ2JhKDI1NSwyNTUsMjU1LDAuNTUpIikscC5hZGRDb2xvclN0b3AoMC40NSwicmdiYSgxODAsMTgwLDE4NSwwLjI4KSIpLHAuYWRkQ29sb3JTdG9wKDAuODUsInJnYmEoNDAsNDAsNDUsMC4xOCkiKSxwLmFkZENvbG9yU3RvcCgxLCJyZ2JhKDAsMCwwLDApIiksRy5maWxsU3R5bGU9cCxHLmJlZ2luUGF0aCgpLEcubW92ZVRvKGcudG9wLnN4LGcudG9wLnN5KSxHLmxpbmVUbyhQLnRvcC5zeCxQLnRvcC5zeSksRy5saW5lVG8oUC5ib3Quc3gsUC5ib3Quc3kpLEcubGluZVRvKGcuYm90LnN4LGcuYm90LnN5KSxHLmNsb3NlUGF0aCgpLEcuZmlsbCgpfUcuc3Ryb2tlU3R5bGU9IiNmZmZmZmYiLEcubGluZVdpZHRoPTEuNixHLmxpbmVDYXA9InJvdW5kIixHLmxpbmVKb2luPSJyb3VuZCIsRy5iZWdpblBhdGgoKTtmb3IobGV0IHk9MDt5PFgxLmxlbmd0aDt5Kyspe2xldHt0b3A6Z309WDFbeV07aWYoeT09PTApRy5tb3ZlVG8oZy5zeCxnLnN5KTtlbHNlIEcubGluZVRvKGcuc3gsZy5zeSl9Ry5zdHJva2UoKTtsZXQgTDE9UTtHLnN0cm9rZVN0eWxlPSIjZjlkMmE0IixHLmxpbmVXaWR0aD0yLjIsRy5iZWdpblBhdGgoKTtsZXQgSjE9ITE7Zm9yKGxldCB5PTA7eTxYMS5sZW5ndGg7eSsrKXtsZXR7cDpnLHRvcDpQfT1YMVt5XTtpZihnLmFyYz5MMSlicmVhaztpZighSjEpRy5tb3ZlVG8oUC5zeCxQLnN5KSxKMT0hMDtlbHNlIEcubGluZVRvKFAuc3gsUC5zeSl9aWYoSjEpRy5zdHJva2UoKTtsZXQgWTE9cT8/bjAoSixRKSxIMT12KFkxLngsWTEueSxZMS56KTtpZihZKXtsZXQgUD1YJTI2MDAvMjYwMCxwPTQrMjIqUCx1PTAuMjIqKDEtUCksaj1HLmNyZWF0ZVJhZGlhbEdyYWRpZW50KEgxLnN4LEgxLnN5LHAqMC41LEgxLnN4LEgxLnN5LHApO2ouYWRkQ29sb3JTdG9wKDAsInJnYmEoMjU1LDI1NSwyNTUsMCkiKSxqLmFkZENvbG9yU3RvcCgwLjcsYHJnYmEoMjU1LDI1NSwyNTUsJHt1LnRvRml4ZWQoMyl9KWApLGouYWRkQ29sb3JTdG9wKDEsInJnYmEoMjU1LDI1NSwyNTUsMCkiKSxHLmZpbGxTdHlsZT1qLEcuYmVnaW5QYXRoKCksRy5hcmMoSDEuc3gsSDEuc3kscCwwLE1hdGguUEkqMiksRy5maWxsKCl9Ry5maWxsU3R5bGU9IiNmZmYiLEcuYmVnaW5QYXRoKCksRy5hcmMoSDEuc3gsSDEuc3ksMy44LDAsTWF0aC5QSSoyKSxHLmZpbGwoKX1mdW5jdGlvbiBsSigkLEosUSl7JC5maWxsU3R5bGU9InJnYmEoMjU1LDI1NSwyNTUsMC4wNikiO2ZvcihsZXQgWT03O1k8UTtZKz0xNClmb3IobGV0IHE9NztxPEo7cSs9MTQpJC5iZWdpblBhdGgoKSwkLmFyYyhxLFksMC43LDAsTWF0aC5QSSoyKSwkLmZpbGwoKX1mdW5jdGlvbiBvMygkKXtpZigkPDEwMDApcmV0dXJuYCR7JC50b0ZpeGVkKDApfSBtYDtyZXR1cm5gJHsoJC8xMDAwKS50b0ZpeGVkKDIpfSBrbWB9ZnVuY3Rpb24gaDYoJCl7bGV0IEo9TWF0aC5mbG9vcigkLzEwMDApLFE9TWF0aC5mbG9vcihKLzM2MDApLFo9TWF0aC5mbG9vcihKJTM2MDAvNjApLFg9SiU2MDtpZihRPjApcmV0dXJuYCR7UX06JHtaLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwiMCIpfToke1gudG9TdHJpbmcoKS5wYWRTdGFydCgyLCIwIil9YDtyZXR1cm5gJHtafToke1gudG9TdHJpbmcoKS5wYWRTdGFydCgyLCIwIil9YH1mdW5jdGlvbiBkSigkKXtpZigkPD0wKXJldHVybiLigJQiO2lmKCQ+NylyZXR1cm5gJHsoJCozLjYpLnRvRml4ZWQoMCl9IGttL2hgO2xldCBKPTEwMDAvJCxRPU1hdGguZmxvb3IoSi82MCksWj1NYXRoLnJvdW5kKEolNjApO3JldHVybmAke1F9OiR7Wi50b1N0cmluZygpLnBhZFN0YXJ0KDIsIjAiKX0va21gfWZ1bmN0aW9uIFI2KCQpe3JldHVybmAkeyQudG9GaXhlZCgwKX0gbWB9ZnVuY3Rpb24gZzYoJCl7bGV0IEo9JC50cmltKCk7aWYoIUopcmV0dXJuIiI7bGV0IFE9Si5tYXRjaCgvUmVhc29uOlxzKiguKykkL20pO2lmKFEpcmV0dXJuIFFbMV07cmV0dXJuIEouc3BsaXQoYApgKS5zbGljZSgtMSlbMF0/P0p9YXN5bmMgZnVuY3Rpb24gcjMoJCxKLFEpe2xldCBaPWF3YWl0ICQoYHhjcnVuIHNpbWN0bCBnZXRfYXBwX2NvbnRhaW5lciAke0p9ICR7TzEoUSl9IGFwcGApO2lmKFouZXhpdENvZGUhPT0wKXJldHVybntlcnJvcjpaLnN0ZGVyci50cmltKCl8fCJBcHAgbm90IGZvdW5kIG9uIHNpbXVsYXRvciJ9O2xldCBYPVouc3Rkb3V0LnRyaW0oKTtpZighWClyZXR1cm57ZXJyb3I6IkVtcHR5IGFwcCBwYXRoIn07bGV0IFk9YXdhaXQgJChgcGx1dGlsIC1jb252ZXJ0IGpzb24gLW8gLSAke08xKFgrIi9JbmZvLnBsaXN0Iil9YCkscT17fTtpZihZLmV4aXRDb2RlPT09MCl0cnl7cT1KU09OLnBhcnNlKFkuc3Rkb3V0KX1jYXRjaHt9bGV0IEcsQj0ocT8uQ0ZCdW5kbGVJY29ucz8uQ0ZCdW5kbGVQcmltYXJ5SWNvbj8/cT8uWyJDRkJ1bmRsZUljb25zfmlwYWQiXT8uQ0ZCdW5kbGVQcmltYXJ5SWNvbik/LkNGQnVuZGxlSWNvbkZpbGVzPz9xPy5DRkJ1bmRsZUljb25GaWxlcztpZihCJiZCLmxlbmd0aD4wKUc9QltCLmxlbmd0aC0xXTtlbHNlIGlmKHR5cGVvZiBxPy5DRkJ1bmRsZUljb25GaWxlPT09InN0cmluZyIpRz1xLkNGQnVuZGxlSWNvbkZpbGU7bGV0IE49bnVsbDtpZihHKXtsZXQgej1bYCR7R31AM3gucG5nYCxgJHtHfUAyeC5wbmdgLGAke0d9LnBuZ2AsYCR7R302MHg2MEAzeC5wbmdgLGAke0d9NjB4NjBAMngucG5nYF0sQz0oYXdhaXQgJChgYmFzaCAtYyAke08xKHoubWFwKChBKT0+YFsgLWYgJHtPMShYKyIvIitBKX0gXSAmJiBlY2hvICR7TzEoWCsiLyIrQSl9ICYmIGV4aXQgMGApLmpvaW4oIjsgIikrIjsgZXhpdCAxIil9YCkpLnN0ZG91dC50cmltKCk7aWYoQyl7bGV0IEE9YXdhaXQgJChgYmFzZTY0IC1pICR7TzEoQyl9YCk7aWYoQS5leGl0Q29kZT09PTApTj1gZGF0YTppbWFnZS9wbmc7YmFzZTY0LCR7QS5zdGRvdXQucmVwbGFjZSgvXHMrL2csIiIpfWB9fXJldHVybnthcHBQYXRoOlgsZGlzcGxheU5hbWU6cS5DRkJ1bmRsZURpc3BsYXlOYW1lPz9xLkNGQnVuZGxlTmFtZSxzaG9ydFZlcnNpb246cS5DRkJ1bmRsZVNob3J0VmVyc2lvblN0cmluZyxidW5kbGVWZXJzaW9uOnEuQ0ZCdW5kbGVWZXJzaW9uLG1pbk9TOnEuTWluaW11bU9TVmVyc2lvbixleGVjdXRhYmxlOnEuQ0ZCdW5kbGVFeGVjdXRhYmxlLGljb25EYXRhVXJsOk59fXZhciBDMj1uZXcgTWFwO2Z1bmN0aW9uIGY2KCQsSixRKXtsZXQgWj1gJHtKfToke1F9YCxYPUMyLmdldChaKTtpZihYIT09dm9pZCAwKXJldHVybiBQcm9taXNlLnJlc29sdmUoWCk7bGV0IFk9cjMoJCxKLFEpLnRoZW4oKHEpPT57bGV0IEc9cS5pY29uRGF0YVVybD8/bnVsbDtyZXR1cm4gQzIuc2V0KFosRyksR30pLmNhdGNoKCgpPT57cmV0dXJuIEMyLnNldChaLG51bGwpLG51bGx9KTtyZXR1cm4gQzIuc2V0KFosWSksWX1mdW5jdGlvbiBjSigkKXtyZXR1cm4gJC5zdGFydHNXaXRoKCJjb20uYXBwbGUuIil9ZnVuY3Rpb24gb0ooJCl7aWYoJD09PSJjb20uYXBwbGUuc3ByaW5nYm9hcmQiKXJldHVybiJTcHJpbmdCb2FyZCI7cmV0dXJuICR9ZnVuY3Rpb24gckooe2J1bmRsZUlkOiR9KXtsZXQgSj1jSigkKTtyZXR1cm4gSygiZGl2Iix7ImRhdGEtdGVzdGlkIjpKPyJzeXN0ZW0tYXBwLWljb24iOiJhcHAtaWNvbi1mYWxsYmFjayIsY2xhc3NOYW1lOmB3LTEwIGgtMTAgcm91bmRlZC1bOHB4XSBzaHJpbmstMCBib3JkZXIgZ3JpZCBwbGFjZS1pdGVtcy1jZW50ZXIgJHtKPyJib3JkZXItWyMzYjVmOTldIGJnLVtsaW5lYXItZ3JhZGllbnQoMTQ1ZGVnLCMyNTNhNWYsIzE2MjEzMildIHRleHQtWyNjOGQ3ZmZdIjoiYm9yZGVyLXdoaXRlLzEwIGJnLXdoaXRlL1swLjA2XSB0ZXh0LXdoaXRlLzgwIn1gLCJhcmlhLWxhYmVsIjpKPyJTeXN0ZW0gYXBwIjoiQXBwIGljb24gdW5hdmFpbGFibGUiLHRpdGxlOko/IlN5c3RlbSBhcHAiOiJBcHAgaWNvbiB1bmF2YWlsYWJsZSIsY2hpbGRyZW46Sj9LKCJzdmciLHtyb2xlOiJpbWciLHZpZXdCb3g6IjAgMCAyNCAyNCIseG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIixjbGFzc05hbWU6InNpemUtWzE5cHhdIixmaWxsOiJjdXJyZW50Q29sb3IiLGNoaWxkcmVuOltLKCJ0aXRsZSIse2NoaWxkcmVuOiJBcHBsZSJ9KSxLKCJwYXRoIix7ZDoiTTEyLjE1MiA2Ljg5NmMtLjk0OCAwLTIuNDE1LTEuMDc4LTMuOTYtMS4wNC0yLjA0LjAyNy0zLjkxIDEuMTgzLTQuOTYxIDMuMDE0LTIuMTE3IDMuNjc1LS41NDYgOS4xMDMgMS41MTkgMTIuMDkgMS4wMTMgMS40NTQgMi4yMDggMy4wOSAzLjc5MiAzLjAzOSAxLjUyLS4wNjUgMi4wOS0uOTg3IDMuOTM1LS45ODcgMS44MzEgMCAyLjM1Ljk4NyAzLjk2Ljk0OCAxLjYzNy0uMDI2IDIuNjc2LTEuNDggMy42NzYtMi45NDggMS4xNTYtMS42ODggMS42MzYtMy4zMjUgMS42NjItMy40MTUtLjAzOS0uMDEzLTMuMTgyLTEuMjIxLTMuMjItNC44NTctLjAyNi0zLjA0IDIuNDgtNC40OTQgMi41OTctNC41NTktMS40MjktMi4wOS0zLjYyMy0yLjMyNC00LjM5LTIuMzc2LTItLjE1Ni0zLjY3NSAxLjA5LTQuNjEgMS4wOXpNMTUuNTMgMy44M2MuODQzLTEuMDEyIDEuNC0yLjQyNyAxLjI0NS0zLjgzLTEuMjA3LjA1Mi0yLjY2Mi44MDUtMy41MzIgMS44MTgtLjc4Ljg5Ni0xLjQ1NCAyLjMzOC0xLjI3MyAzLjcxNCAxLjMzOC4xMDQgMi43MTUtLjY4OCAzLjU1OS0xLjcwMSJ9KV19KTpLKFQyLHtzaXplOjE5LHN0cm9rZVdpZHRoOjEuOX0pfSl9ZnVuY3Rpb24gaUooe2J1bmRsZUlkOiQsaWNvbkRhdGFVcmw6Sn0pe2lmKEopcmV0dXJuIEsoImltZyIse3NyYzpKLGNsYXNzTmFtZToidy0xMCBoLTEwIHJvdW5kZWQtWzhweF0gc2hyaW5rLTAgb2JqZWN0LWNvdmVyIGJvcmRlciBib3JkZXItd2hpdGUvOCIsYWx0OiIifSk7cmV0dXJuIEsockose2J1bmRsZUlkOiR9KX1mdW5jdGlvbiBwNih7dWRpZDokLGN1cnJlbnRBcHA6Sn0pe2xldFtRLFpdPVcobnVsbCksW1gsWV09VyghMSk7aWYoYigoKT0+e2lmKCFKKXtaKG51bGwpO3JldHVybn1sZXQgcT0hMTtyZXR1cm4gWih7YnVuZGxlSWQ6Si5idW5kbGVJZCxpc1JlYWN0TmF0aXZlOkouaXNSZWFjdE5hdGl2ZSxwaWQ6Si5waWQsbG9hZGluZzohMH0pLHIzKEkxLCQsSi5idW5kbGVJZCkudGhlbigoRyk9PntpZihxKXJldHVybjtaKHtidW5kbGVJZDpKLmJ1bmRsZUlkLGlzUmVhY3ROYXRpdmU6Si5pc1JlYWN0TmF0aXZlLHBpZDpKLnBpZCxsb2FkaW5nOiExLC4uLkd9KX0pLCgpPT57cT0hMH19LFskLEosSj8uYnVuZGxlSWQsSj8ucGlkLEo/LmlzUmVhY3ROYXRpdmVdKSwhUSlyZXR1cm4gSyhhSix7fSk7cmV0dXJuIEsoWDAse29wZW46WCxvbk9wZW5DaGFuZ2U6WSxzdW1tYXJ5Q2xhc3NOYW1lOiJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMyB0ZXh0LWxlZnQiLHN1bW1hcnk6SyhaMSx7Y2hpbGRyZW46W0soaUose2J1bmRsZUlkOlEuYnVuZGxlSWQsaWNvbkRhdGFVcmw6US5pY29uRGF0YVVybH0pLEsobkose2J1bmRsZUlkOlEuYnVuZGxlSWQsZGlzcGxheU5hbWU6US5kaXNwbGF5TmFtZX0pXX0pLGNoaWxkcmVuOltRLmVycm9yJiZLKCJkaXYiLHtjbGFzc05hbWU6ImJnLWRhbmdlci8xMCBib3JkZXIgYm9yZGVyLWRhbmdlci8yMCB0ZXh0LWRhbmdlci1zb2Z0IHRleHQtWzExcHhdIHB4LTIgcHktMS41IHJvdW5kZWQtbWQiLGNoaWxkcmVuOlEuZXJyb3J9KSxLKCJkbCIse2NsYXNzTmFtZToibS0wIGZsZXggZmxleC1jb2wgZ2FwLTEuNSIsY2hpbGRyZW46W0soVTIse2xhYmVsOiJWZXJzaW9uIix2YWx1ZTpRLnNob3J0VmVyc2lvbj9gJHtRLnNob3J0VmVyc2lvbn0gKCR7US5idW5kbGVWZXJzaW9uPz8i4oCUIn0pYDpRLmxvYWRpbmc/IuKApiI6IuKAlCJ9KSxLKFUyLHtsYWJlbDoiTWluIGlPUyIsdmFsdWU6US5taW5PUz8/KFEubG9hZGluZz8i4oCmIjoi4oCUIil9KSxLKFUyLHtsYWJlbDoiRXhlY3V0YWJsZSIsdmFsdWU6US5leGVjdXRhYmxlPz8oUS5sb2FkaW5nPyLigKYiOiLigJQiKX0pLEsoVTIse2xhYmVsOiJQSUQiLHZhbHVlOlEucGlkIT1udWxsP1N0cmluZyhRLnBpZCk6IuKAlCJ9KSxRLmlzUmVhY3ROYXRpdmUmJksoVTIse2xhYmVsOiJSZWFjdCBOYXRpdmUiLHZhbHVlOiJZZXMifSksSyhVMix7bGFiZWw6IkFwcCBwYXRoIix2YWx1ZTpRLmFwcFBhdGg/PyhRLmxvYWRpbmc/IuKApiI6IuKAlCIpLG1vbm86ITAsYWN0aW9uOlEuYXBwUGF0aD97dGl0bGU6IlJldmVhbCBpbiBGaW5kZXIiLG9uQ2xpY2s6KCk9PntJMShgb3BlbiAtUiAke08xKFEuYXBwUGF0aCl9YCl9LGljb246Syh3Mix7c2l6ZToxMSxzdHJva2VXaWR0aDoyLjJ9KX06dm9pZCAwfSldfSldfSl9ZnVuY3Rpb24gYUooKXtyZXR1cm4gSygiZGl2Iix7ImRhdGEtdGVzdGlkIjoiYXBwLWRldGVjdGlvbi1za2VsZXRvbiIsY2xhc3NOYW1lOiJiZy1wYW5lbCByb3VuZGVkLVsxMHB4XSBweC0zIHB5LTIiLCJhcmlhLWxhYmVsIjoiV2FpdGluZyBmb3IgZm9yZWdyb3VuZCBhcHAiLGNoaWxkcmVuOksoImRpdiIse2NsYXNzTmFtZToiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTMgdGV4dC1sZWZ0IG1pbi1oLVszNnB4XSBsZWFkaW5nLW5vbmUgcHktMi41IHB4LTEgLW15LTIgLW14LTEgdy1bY2FsYygxMDAlKzhweCldIixjaGlsZHJlbjpbSygic3BhbiIse2NsYXNzTmFtZToidy0xMCBoLTEwIHJvdW5kZWQtWzhweF0gc2hyaW5rLTAgYmctd2hpdGUvWzAuMDhdIn0pLEsoInNwYW4iLHtjbGFzc05hbWU6Im1pbi13LTAgZmxleC0xIGZsZXggZmxleC1jb2wgZ2FwLTIiLGNoaWxkcmVuOltLKCJzcGFuIix7Y2xhc3NOYW1lOiJoLTMuNSB3LVs0NiVdIHJvdW5kZWQtZnVsbCBiZy13aGl0ZS9bMC4xMl0ifSksSygic3BhbiIse2NsYXNzTmFtZToiaC0yLjUgdy1bNjglXSByb3VuZGVkLWZ1bGwgYmctd2hpdGUvWzAuMDhdIn0pXX0pLEsoInNwYW4iLHtjbGFzc05hbWU6InctMi41IGgtMi41IHJvdW5kZWQtZnVsbCBiZy13aGl0ZS9bMC4wOF0ifSldfSl9KX1mdW5jdGlvbiBuSih7YnVuZGxlSWQ6JCxkaXNwbGF5TmFtZTpKfSl7cmV0dXJuIEsoImRpdiIse2NsYXNzTmFtZToibWluLXctMCBmbGV4LTEgbGVhZGluZy10aWdodCB0ZXh0LWxlZnQiLGNoaWxkcmVuOltLKCJkaXYiLHtjbGFzc05hbWU6InRleHQtWzEzcHhdIGZvbnQtc2VtaWJvbGQgdGV4dC13aGl0ZS85MCB0cnVuY2F0ZSIsY2hpbGRyZW46Sj8/b0ooJCl9KSxLKCJkaXYiLHtjbGFzc05hbWU6InRleHQtWzExcHhdIHRleHQtd2hpdGUvNTUgZm9udC1tb25vIHRydW5jYXRlIix0aXRsZTokLGNoaWxkcmVuOiR9KV19KX1mdW5jdGlvbiBVMih7bGFiZWw6JCx2YWx1ZTpKLG1vbm86USxhY3Rpb246Wn0pe3JldHVybiBLKCJkaXYiLHtjbGFzc05hbWU6Imdyb3VwIGZsZXggaXRlbXMtYmFzZWxpbmUgZ2FwLTIgbWluLXctMCIsY2hpbGRyZW46W0soImR0Iix7Y2xhc3NOYW1lOiJtLTAgdGV4dC1bMTFweF0gdGV4dC13aGl0ZS81MCB3LTIxIHNocmluay0wIixjaGlsZHJlbjokfSksSygiZGQiLHtjbGFzc05hbWU6YG0tMCB0ZXh0LXdoaXRlLzkwIGZsZXgtMSBtaW4tdy0wIG92ZXJmbG93LWhpZGRlbiB0ZXh0LWVsbGlwc2lzIHdoaXRlc3BhY2Utbm93cmFwIHJlbGF0aXZlICR7UT8iZm9udC1tb25vIHRleHQtWzExcHhdIjoidGV4dC1bMTJweF0ifWAsdGl0bGU6SixjaGlsZHJlbjpbSixaJiZLKCJkaXYiLHtjbGFzc05hbWU6ImFic29sdXRlIHRvcC0wIHJpZ2h0LTAgYm90dG9tLTAgcGwtNyBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWVuZCBiZy1bbGluZWFyLWdyYWRpZW50KHRvX3JpZ2h0LHJnYmEoMjgsMjgsMzAsMClfMCUsIzFjMWMxZV81NSUpXSBbdHJhbnNpdGlvbjpvcGFjaXR5XzAuMTVzX2Vhc2UsdHJhbnNmb3JtXzAuMTVzX2Vhc2VdIG9wYWNpdHktMCB0cmFuc2xhdGUteC0xIHBvaW50ZXItZXZlbnRzLW5vbmUgZ3JvdXAtaG92ZXI6b3BhY2l0eS0xMDAgZ3JvdXAtaG92ZXI6dHJhbnNsYXRlLXgtMCBncm91cC1ob3Zlcjpwb2ludGVyLWV2ZW50cy1hdXRvIixjaGlsZHJlbjpLKCJidXR0b24iLHt0eXBlOiJidXR0b24iLG9uQ2xpY2s6Wi5vbkNsaWNrLHRpdGxlOloudGl0bGUsImFyaWEtbGFiZWwiOloudGl0bGUsY2xhc3NOYW1lOiJ3LTUgaC01IGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGJnLXRyYW5zcGFyZW50IGJvcmRlci1ub25lIHJvdW5kZWQgdGV4dC13aGl0ZSBjdXJzb3ItcG9pbnRlciBwLTAiLGNoaWxkcmVuOlouaWNvbn0pfSldfSldfSl9dmFyIHU2PVt7a2V5OiJjYW1lcmEiLGxhYmVsOiJDYW1lcmEifSx7a2V5OiJtaWNyb3Bob25lIixsYWJlbDoiTWljcm9waG9uZSJ9LHtrZXk6InBob3RvcyIsbGFiZWw6IlBob3RvcyJ9LHtrZXk6InBob3Rvcy1hZGQiLGxhYmVsOiJBZGQgdG8gUGhvdG9zIn0se2tleToiY29udGFjdHMiLGxhYmVsOiJDb250YWN0cyJ9LHtrZXk6ImNhbGVuZGFyIixsYWJlbDoiQ2FsZW5kYXIifSx7a2V5OiJyZW1pbmRlcnMiLGxhYmVsOiJSZW1pbmRlcnMifSx7a2V5OiJsb2NhdGlvbiIsbGFiZWw6IkxvY2F0aW9uIn0se2tleToibG9jYXRpb24tYWx3YXlzIixsYWJlbDoiTG9jYXRpb24gKEFsd2F5cykifSx7a2V5OiJub3RpZmljYXRpb25zIixsYWJlbDoiTm90aWZpY2F0aW9ucyJ9LHtrZXk6Im1vdGlvbiIsbGFiZWw6Ik1vdGlvbiJ9LHtrZXk6Im1lZGlhLWxpYnJhcnkiLGxhYmVsOiJNZWRpYSBMaWJyYXJ5In0se2tleToic2lyaSIsbGFiZWw6IlNpcmkifV07ZnVuY3Rpb24gbDYoe3VkaWQ6JCxidW5kbGVJZDpKfSl7bGV0W1EsWl09Vyh7fSksW1gsWV09VyhudWxsKSxbcSxHXT1XKG51bGwpLFtWLEJdPVcoITEpLE49RTEoKCk9PntsZXQgQz10eXBlb2Ygd2luZG93PiJ1Ij92b2lkIDA6d2luZG93Ll9fU0lNX1BSRVZJRVdfXz8uc2VydmVTaW1CaW47aWYoIUMpcmV0dXJuInNlcnZlLXNpbSI7aWYoL1wudHMkLy50ZXN0KEMpKXJldHVybmBidW4gJHtPMShDKX1gO2lmKC9cLmpzJC8udGVzdChDKSlyZXR1cm5gbm9kZSAke08xKEMpfWA7cmV0dXJuIE8xKEMpfSxbXSk7YigoKT0+e1ooe30pLEcobnVsbCl9LFtKXSk7bGV0IHo9RChhc3luYyhDLEEpPT57aWYoIUopcmV0dXJuO2xldCBVPWAke0N9OiR7QX1gO1koVSksRyhudWxsKTt0cnl7bGV0IEg9YXdhaXQgSTEoYCR7Tn0gcGVybWlzc2lvbnMgJHtBfSAke0N9ICR7TzEoSil9IC1kICR7TzEoJCl9YCk7aWYoSC5leGl0Q29kZSE9PTApe0coSC5zdGRlcnIudHJpbSgpfHxgc2VydmUtc2ltIHBlcm1pc3Npb25zIGZhaWxlZCAoZXhpdCAke0guZXhpdENvZGV9KWApO3JldHVybn1aKChrKT0+KHsuLi5rLFtDXTpBPT09InJlc2V0Ij92b2lkIDA6QX0pKX1maW5hbGx5e1kobnVsbCl9fSxbTiwkLEpdKSxMPUQoYXN5bmMoKT0+e2lmKCFKKXJldHVybjtZKCJfX2FsbF9fIiksRyhudWxsKTt0cnl7bGV0IEM9YXdhaXQgSTEoYCR7Tn0gcGVybWlzc2lvbnMgcmVzZXQgYWxsICR7TzEoSil9IC1kICR7TzEoJCl9YCk7aWYoQy5leGl0Q29kZSE9PTApe0coQy5zdGRlcnIudHJpbSgpfHxgc2VydmUtc2ltIHBlcm1pc3Npb25zIGZhaWxlZCAoZXhpdCAke0MuZXhpdENvZGV9KWApO3JldHVybn1aKHt9KX1maW5hbGx5e1kobnVsbCl9fSxbTiwkLEpdKTtpZighSilyZXR1cm4gSyhzSix7fSk7cmV0dXJuIEsoWDAse29wZW46Vixvbk9wZW5DaGFuZ2U6QixzdW1tYXJ5Q2xhc3NOYW1lOiJncmlkIFtncmlkLXRlbXBsYXRlLWNvbHVtbnM6YXV0b18xZnJfYXV0b10gaXRlbXMtY2VudGVyIGdhcC0yIHRleHQtbGVmdCIsc3VtbWFyeTpLKFoxLHtjaGlsZHJlbjpbSygic3BhbiIse2NsYXNzTmFtZToidGV4dC1bMTFweF0gZm9udC1zZW1pYm9sZCB0ZXh0LXdoaXRlLzUwIHVwcGVyY2FzZSB0cmFja2luZy1bMC4wOGVtXSBsZWFkaW5nLW5vbmUgaW5saW5lLWZsZXggaXRlbXMtY2VudGVyIixjaGlsZHJlbjoiUGVybWlzc2lvbnMifSksSygic3BhbiIse30pXX0pLGNoaWxkcmVuOltxJiZLKCJkaXYiLHtjbGFzc05hbWU6ImJnLWRhbmdlci8xMCBib3JkZXIgYm9yZGVyLWRhbmdlci8yMCB0ZXh0LWRhbmdlci1zb2Z0IHRleHQtWzExcHhdIHB4LTIgcHktMS41IHJvdW5kZWQtbWQiLGNoaWxkcmVuOnF9KSxLKCJkaXYiLHtjbGFzc05hbWU6InJlbGF0aXZlIixjaGlsZHJlbjpbSygiZGl2Iix7Y2xhc3NOYW1lOiJtYXgtaC1bMjYwcHhdIG92ZXJmbG93LXktYXV0byBmbGV4IGZsZXgtY29sIGdhcC0xIHB5LTIgW3Njcm9sbGJhci13aWR0aDp0aGluXSIsY2hpbGRyZW46dTYubWFwKCh7a2V5OkMsbGFiZWw6QX0pPT57bGV0IFU9UVtDXTtyZXR1cm4gSygiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gZ2FwLTIgcHgtMC41IHB5LTEiLGNoaWxkcmVuOltLKCJzcGFuIix7Y2xhc3NOYW1lOiJ0ZXh0LVsxMnB4XSB0ZXh0LXdoaXRlLzkwIG92ZXJmbG93LWhpZGRlbiB0ZXh0LWVsbGlwc2lzIHdoaXRlc3BhY2Utbm93cmFwIGZsZXgtMSBtaW4tdy0wIixjaGlsZHJlbjpBfSksSygiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGdhcC0wLjUgYmctd2hpdGUvWzAuMDRdIGJvcmRlciBib3JkZXItd2hpdGUvOCByb3VuZGVkLW1kIHAtMC41Iixyb2xlOiJncm91cCIsImFyaWEtbGFiZWwiOkEsY2hpbGRyZW46W0soaTMse2FjdGl2ZTpVPT09ImdyYW50IixwZW5kaW5nOlg9PT1gJHtDfTpncmFudGAsb25DbGljazooKT0+eihDLCJncmFudCIpLHZhcmlhbnQ6ImdyYW50Iix0aXRsZToiQWxsb3ciLGNoaWxkcmVuOksoRTIse3NpemU6MTEsc3Ryb2tlV2lkdGg6M30pfSksSyhpMyx7YWN0aXZlOlU9PT0icmV2b2tlIixwZW5kaW5nOlg9PT1gJHtDfTpyZXZva2VgLG9uQ2xpY2s6KCk9PnooQywicmV2b2tlIiksdmFyaWFudDoicmV2b2tlIix0aXRsZToiRGVueSIsY2hpbGRyZW46SyhHMCx7c2l6ZToxMSxzdHJva2VXaWR0aDozfSl9KSxLKGkzLHthY3RpdmU6ITEscGVuZGluZzpYPT09YCR7Q306cmVzZXRgLG9uQ2xpY2s6KCk9PnooQywicmVzZXQiKSx2YXJpYW50OiJyZXNldCIsdGl0bGU6IlJlc2V0IixjaGlsZHJlbjpLKHIwLHtzaXplOjExLHN0cm9rZVdpZHRoOjIuNH0pfSldfSldfSxDKX0pfSksSygiZGl2Iix7Y2xhc3NOYW1lOiJhYnNvbHV0ZSB0b3AtMCBsZWZ0LTAgcmlnaHQtMCBoLVsxNHB4XSBwb2ludGVyLWV2ZW50cy1ub25lIHJvdW5kZWQtdC1bMTBweF0gYmctW2xpbmVhci1ncmFkaWVudCh0b19ib3R0b20sIzFjMWMxZV8wJSxyZ2JhKDI4LDI4LDMwLDApXzEwMCUpXSJ9KSxLKCJkaXYiLHtjbGFzc05hbWU6ImFic29sdXRlIGJvdHRvbS0wIGxlZnQtMCByaWdodC0wIGgtWzE0cHhdIHBvaW50ZXItZXZlbnRzLW5vbmUgYmctW2xpbmVhci1ncmFkaWVudCh0b190b3AsIzFjMWMxZV8wJSxyZ2JhKDI4LDI4LDMwLDApXzEwMCUpXSJ9KV19KSxLKCJkaXYiLHtjbGFzc05hbWU6ImZsZXgganVzdGlmeS1lbmQiLGNoaWxkcmVuOksoImJ1dHRvbiIse29uQ2xpY2s6TCxkaXNhYmxlZDpYPT09Il9fYWxsX18iLGNsYXNzTmFtZToiYmctdHJhbnNwYXJlbnQgYm9yZGVyIGJvcmRlci13aGl0ZS8xMiB0ZXh0LXdoaXRlLzcwIHRleHQtWzEwcHhdIHB4LTIgcHktWzNweF0gcm91bmRlZC1bNXB4XSBjdXJzb3ItcG9pbnRlciB1cHBlcmNhc2UgdHJhY2tpbmctWzAuMDRlbV0iLHRpdGxlOiJzZXJ2ZS1zaW0gcGVybWlzc2lvbnMgcmVzZXQgYWxsIixjaGlsZHJlbjpYPT09Il9fYWxsX18iPyLigKYiOiJSZXNldCBhbGwifSl9KV19KX1mdW5jdGlvbiBzSigpe3JldHVybiBLKCJkaXYiLHsiZGF0YS10ZXN0aWQiOiJhcHAtcGVybWlzc2lvbnMtbG9hZGluZyIsY2xhc3NOYW1lOiJiZy1wYW5lbCByb3VuZGVkLVsxMHB4XSBweC0zIHB5LTIiLCJhcmlhLWRpc2FibGVkIjoidHJ1ZSIsImFyaWEtYnVzeSI6InRydWUiLGNoaWxkcmVuOksoImRpdiIse2NsYXNzTmFtZToic2VsZWN0LW5vbmUgdGV4dC13aGl0ZS81NSBtaW4taC1bMzZweF0gbGVhZGluZy1ub25lIHB5LTIuNSBweC0xIC1teS0yIC1teC0xIHctW2NhbGMoMTAwJSs4cHgpXSBncmlkIFtncmlkLXRlbXBsYXRlLWNvbHVtbnM6YXV0b18xZnJfYXV0b10gaXRlbXMtY2VudGVyIGdhcC0yIHRleHQtbGVmdCBjdXJzb3ItZGVmYXVsdCIsY2hpbGRyZW46W0soInNwYW4iLHtjbGFzc05hbWU6InRleHQtWzExcHhdIGZvbnQtc2VtaWJvbGQgdXBwZXJjYXNlIHRyYWNraW5nLVswLjA4ZW1dIGxlYWRpbmctbm9uZSBpbmxpbmUtZmxleCBpdGVtcy1jZW50ZXIiLGNoaWxkcmVuOiJQZXJtaXNzaW9ucyJ9KSxLKCJzcGFuIix7fSksSygic3BhbiIseyJkYXRhLXRlc3RpZCI6InBlcm1pc3Npb25zLWxvYWRpbmctaW5kaWNhdG9yIixyb2xlOiJzdGF0dXMiLCJhcmlhLWxhYmVsIjoiTG9hZGluZyBwZXJtaXNzaW9ucyIsY2xhc3NOYW1lOiJzaXplLTIuNSByb3VuZGVkLWZ1bGwgYm9yZGVyIGJvcmRlci1bIzVmNjI2OF0gYm9yZGVyLXQtWyNmNGY0ZjVdIGFuaW1hdGUtW2dyaWQtc3Bpbl8wLjdzX2xpbmVhcl9pbmZpbml0ZV0ifSldfSl9KX1mdW5jdGlvbiBpMyh7YWN0aXZlOiQscGVuZGluZzpKLG9uQ2xpY2s6USx2YXJpYW50OlosdGl0bGU6WCxjaGlsZHJlbjpZfSl7bGV0IHE9Wj09PSJncmFudCI/IiM0YWRlODAiOlo9PT0icmV2b2tlIj8iI2Y4NzE3MSI6IiNhNWI0ZmMiO3JldHVybiBLKCJidXR0b24iLHtvbkNsaWNrOlEsZGlzYWJsZWQ6Six0aXRsZTpYLCJhcmlhLWxhYmVsIjpYLGNsYXNzTmFtZToidy02IGgtNS41IGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGJvcmRlci1ub25lIHJvdW5kZWQgcC0wIGN1cnNvci1wb2ludGVyIFt0cmFuc2l0aW9uOmJhY2tncm91bmRfMC4xMnMsY29sb3JfMC4xMnNdIixzdHlsZTp7YmFja2dyb3VuZDokP2Ake3F9MjJgOiJ0cmFuc3BhcmVudCIsY29sb3I6JD9xOiJyZ2JhKDI1NSwyNTUsMjU1LDAuNTUpIixvcGFjaXR5Oko/MC41OjF9LGNoaWxkcmVuOll9KX1mdW5jdGlvbiBwNSh7bGFiZWw6JCxjaGVja2VkOkosZGlzYWJsZWQ6UT0hMSxvbkNoYW5nZTpafSl7cmV0dXJuIEsoImJ1dHRvbiIse3R5cGU6ImJ1dHRvbiIscm9sZToic3dpdGNoIiwiYXJpYS1jaGVja2VkIjpKLCJhcmlhLWxhYmVsIjokLGRpc2FibGVkOlEsb25DbGljazooKT0+WighSiksY2xhc3NOYW1lOmByZWxhdGl2ZSBoLVsxOHB4XSB3LTggc2hyaW5rLTAgcm91bmRlZC1mdWxsIGJvcmRlci1ub25lIHAtMCBbdHJhbnNpdGlvbjpiYWNrZ3JvdW5kXzAuMTVzXSAke1E/ImN1cnNvci1kZWZhdWx0IGJnLXdoaXRlLzIwIjpKPyJjdXJzb3ItcG9pbnRlciBiZy1bIzBhODRmZl0iOiJjdXJzb3ItcG9pbnRlciBiZy13aGl0ZS8yMCJ9YCxjaGlsZHJlbjpLKCJzcGFuIix7Y2xhc3NOYW1lOmBhYnNvbHV0ZSB0b3AtWzJweF0gc2l6ZS1bMTRweF0gcm91bmRlZC1mdWxsIFt0cmFuc2l0aW9uOmxlZnRfMC4xNXNdICR7UT8iYmctd2hpdGUvNTAiOiJiZy13aGl0ZSJ9YCxzdHlsZTp7bGVmdDpKPzE2OjJ9fSl9KX12YXIgdEo9ImJnLXBhbmVsIHJvdW5kZWQtWzEwcHhdIixlSj0idGV4dC1bMTFweF0gZm9udC1zZW1pYm9sZCB0ZXh0LXdoaXRlLzUwIHVwcGVyY2FzZSB0cmFja2luZy1bMC4wOGVtXSBtLTAiO2Z1bmN0aW9uIGM2KHtvdmVybGF5RW5hYmxlZDokLG9uVG9nZ2xlT3ZlcmxheTpKfSl7bGV0e3NuYXBzaG90OlF9PUIyKCkse2hpZ2hsaWdodGVkS2V5Olosc2V0SGlnaGxpZ2h0ZWRLZXk6WH09dzUoKSxZPVE/LmVsZW1lbnRzPz9bXSxxPV81KFEpLEc9UT8uZXJyb3JzPy5bMF0/P251bGw7cmV0dXJuIEsoImRpdiIse2NsYXNzTmFtZTpgJHt0Sn0gcHgtMyBweS0yYCxjaGlsZHJlbjpbSygiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gZ2FwLTIiLGNoaWxkcmVuOltLKCJzcGFuIix7Y2xhc3NOYW1lOmVKLGNoaWxkcmVuOiJBWCBUcmVlIn0pLEsocDUse2xhYmVsOiJFbmFibGUgb3ZlcmxheSIsY2hlY2tlZDokLG9uQ2hhbmdlOkp9KV19KSwhJD9udWxsOnE/SyhkNix7Y2hpbGRyZW46IkFYIHVuYXZhaWxhYmxlIG9uIHRoaXMgc2ltdWxhdG9yLiJ9KTpZLmxlbmd0aD09PTA/SyhkNix7c3Bpbm5lcjohRyxjaGlsZHJlbjpHPz8iV2FpdGluZyBmb3IgYWNjZXNzaWJpbGl0eSBkYXRh4oCmIn0pOksoImRpdiIse2NsYXNzTmFtZToiZmxleCBmbGV4LWNvbCBnYXAtMSBtdC0yIHB5LTIgbWF4LWgtWzI2MHB4XSBvdmVyZmxvdy15LWF1dG8gW3Njcm9sbGJhci13aWR0aDp0aGluXSIscm9sZToibGlzdCIsY2hpbGRyZW46WS5tYXAoKFYsQik9PntsZXQgTj1pMChWKTtyZXR1cm4gSygkUSx7ZWxlbWVudDpWLGluZGV4OkIsYWN0aXZlOk49PT1aLG9uSGlnaGxpZ2h0Olh9LE4pfSl9KV19KX1mdW5jdGlvbiBkNih7Y2hpbGRyZW46JCxzcGlubmVyOko9ITF9KXtyZXR1cm4gSygiZGl2Iix7cm9sZToic3RhdHVzIiwiYXJpYS1saXZlIjoicG9saXRlIixjbGFzc05hbWU6Im10LTIgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgZ2FwLTIgcHktNCB0ZXh0LVsxMnB4XSB0ZXh0LXdoaXRlLzQ1IixjaGlsZHJlbjpbSj9LKCJzcGFuIix7ImFyaWEtaGlkZGVuIjoidHJ1ZSIsY2xhc3NOYW1lOiJzaXplLTMuNSBzaHJpbmstMCByb3VuZGVkLWZ1bGwgYm9yZGVyLTIgYm9yZGVyLXdoaXRlLzIwIGJvcmRlci10LXdoaXRlLzYwIGFuaW1hdGUtW2dyaWQtc3Bpbl8wLjhzX2xpbmVhcl9pbmZpbml0ZV0ifSk6bnVsbCxLKCJzcGFuIix7Y2hpbGRyZW46JH0pXX0pfXZhciAkUT1kMChmdW5jdGlvbih7ZWxlbWVudDpKLGluZGV4OlEsYWN0aXZlOlosb25IaWdobGlnaHQ6WH0pe2xldCBZPWkwKEopLHE9VDUoSixRKSxHPWAke01hdGgucm91bmQoSi5mcmFtZS53aWR0aCl9eCR7TWF0aC5yb3VuZChKLmZyYW1lLmhlaWdodCl9YCxWPVtxLmxhYmVsLHEucm9sZXx8cS50eXBlfHwiZWxlbWVudCIsR10uZmlsdGVyKEJvb2xlYW4pLmpvaW4oIiDCtyAiKTtyZXR1cm4gSygiZGl2Iix7cm9sZToibGlzdGl0ZW0iLHRhYkluZGV4OjAsImRhdGEtYXgta2V5IjpZLHRpdGxlOlYsb25Nb3VzZUVudGVyOigpPT5YKFkpLG9uTW91c2VMZWF2ZTooKT0+WChudWxsKSxvbkZvY3VzOigpPT5YKFkpLG9uQmx1cjooKT0+WChudWxsKSxjbGFzc05hbWU6YGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiBnYXAtMiByb3VuZGVkLW1kIHB5LTEgcHgtMC41IG1pbi13LTAgJHtaPyJiZy13aGl0ZS9bMC4wNl0iOiIifWAsY2hpbGRyZW46W0soInNwYW4iLHtjbGFzc05hbWU6ImZsZXggZmxleC1jb2wgZ2FwLTAuNSBmbGV4LTEgbWluLXctMCIsY2hpbGRyZW46W0soInNwYW4iLHtjbGFzc05hbWU6Im92ZXJmbG93LWhpZGRlbiB0ZXh0LWVsbGlwc2lzIHdoaXRlc3BhY2Utbm93cmFwIHRleHQtd2hpdGUvOTAgdGV4dC1bMTJweF0gZm9udC1tZWRpdW0iLGNoaWxkcmVuOkoubGFiZWx8fEoucm9sZXx8IlVubGFiZWxlZCJ9KSxLKCJzcGFuIix7Y2xhc3NOYW1lOiJvdmVyZmxvdy1oaWRkZW4gdGV4dC1lbGxpcHNpcyB3aGl0ZXNwYWNlLW5vd3JhcCB0ZXh0LXdoaXRlLzQ1IGZvbnQtbW9ubyB0ZXh0LVsxMHB4XSIsY2hpbGRyZW46Si5yb2xlfHxKLnR5cGV8fCJlbGVtZW50In0pXX0pLEsoImNvZGUiLHtjbGFzc05hbWU6InNocmluay0wIGJnLXdoaXRlL1swLjA0XSBib3JkZXIgYm9yZGVyLXdoaXRlLzggcm91bmRlZC1tZCB0ZXh0LXdoaXRlLzU1IGZvbnQtbW9ubyB0ZXh0LVsxMHB4XSBweC0xLjUgcHktWzNweF0iLGNoaWxkcmVuOkd9KV19KX0sKCQsSik9PiQuaW5kZXg9PT1KLmluZGV4JiYkLmFjdGl2ZT09PUouYWN0aXZlJiYkLm9uSGlnaGxpZ2h0PT09Si5vbkhpZ2hsaWdodCYmRDUoJC5lbGVtZW50LEouZWxlbWVudCkpO3ZhciBKUT1uZXcgU2V0KFsiaW1hZ2UvanBlZyIsImltYWdlL3BuZyIsImltYWdlL2dpZiIsImltYWdlL2hlaWMiLCJpbWFnZS9oZWlmIiwiaW1hZ2Uvd2VicCIsInZpZGVvL21wNCIsInZpZGVvL3F1aWNrdGltZSJdKSxhMz0xOTY2MDgsbzY9NTI0Mjg4MDAwLHU1PSJhcHBsaWNhdGlvbi94LXNlcnZlLXNpbS1ob3N0LXBhdGgiO2FzeW5jIGZ1bmN0aW9uIHI2KCQsSixRKXtsZXQgWj1hd2FpdCBKKGB4Y3J1biBzaW1jdGwgYWRkbWVkaWEgJHtRfSAke08xKCQpfWApO2lmKFouZXhpdENvZGUhPT0wKXRocm93IEVycm9yKFouc3RkZXJyfHxgYWRkbWVkaWEgZmFpbGVkIChleGl0ICR7Wi5leGl0Q29kZX0pYCl9ZnVuY3Rpb24gSDIoJCl7bGV0IEo9JC5uYW1lLFE9Si5sYXN0SW5kZXhPZigiLiIpO2lmKFE+PTApcmV0dXJuIEouc2xpY2UoUSsxKS50b0xvd2VyQ2FzZSgpO2lmKCQudHlwZS5zdGFydHNXaXRoKCJ2aWRlby8iKSlyZXR1cm4ibXA0IjtyZXR1cm4ianBnIn1mdW5jdGlvbiBpNigkKXtpZihIMigkKT09PSJpcGEiKXJldHVybiJpcGEiO2lmKEpRLmhhcygkLnR5cGUpKXJldHVybiJtZWRpYSI7cmV0dXJuIG51bGx9ZnVuY3Rpb24gUVEoJCl7bGV0IEo9bmV3IFVpbnQ4QXJyYXkoJCksUT0iIjtmb3IobGV0IFo9MDtaPEoubGVuZ3RoO1orPTMyNzY4KVErPVN0cmluZy5mcm9tQ2hhckNvZGUoLi4uSi5zdWJhcnJheShaLForMzI3NjgpKTtyZXR1cm4gYnRvYShRKX1hc3luYyBmdW5jdGlvbiBhNigkLEosUSxaKXtsZXQgWD0wO2ZvcihsZXQgWT0wO1k8JC5zaXplO1krPWEzKXtsZXQgcT1hd2FpdCAkLnNsaWNlKFksWSthMykuYXJyYXlCdWZmZXIoKSxHPVFRKHEpLEI9YXdhaXQgUShgYmFzaCAtYyAnZWNobyAke0d9IHwgYmFzZTY0IC1kICR7WT09PTA/Ij4iOiI+PiJ9ICR7Sn0nYCk7aWYoQi5leGl0Q29kZSE9PTApdGhyb3cgRXJyb3IoQi5zdGRlcnJ8fGBXcml0ZSBmYWlsZWQgKGV4aXQgJHtCLmV4aXRDb2RlfSlgKTtpZighWiljb250aW51ZTtsZXQgTj1NYXRoLm1pbihZK2EzLCQuc2l6ZSksej1NYXRoLmZsb29yKE4vJC5zaXplKjEwMCk7aWYoeiE9PVgpWD16LFooTi8kLnNpemUpfX1hc3luYyBmdW5jdGlvbiBuNigkLEosUSxaKXtpZigkLnNpemU+bzYpdGhyb3cgRXJyb3IoIkZpbGUgdG9vIGxhcmdlIChtYXggNTAwTUIpIik7bGV0IFg9YC90bXAvJHtKfS0ke2NyeXB0by5yYW5kb21VVUlEKCl9LiR7UX1gO3JldHVybiBhd2FpdCBhNigkLFgsWiksWH1hc3luYyBmdW5jdGlvbiBzNigkLEosUSxaLFgpe2lmKCQuc2l6ZT5vNil0aHJvdyBFcnJvcigiRmlsZSB0b28gbGFyZ2UgKG1heCA1MDBNQikiKTtsZXQgWT1KPT09ImlwYSI/ImlwYSI6SDIoJCksRz1gL3RtcC8ke0o9PT0iaXBhIj8ic2VydmUtc2ltLWluc3RhbGwiOiJzZXJ2ZS1zaW0tdXBsb2FkIn0tJHtjcnlwdG8ucmFuZG9tVVVJRCgpfS4ke1l9YDt0cnl7WCgwKSxhd2FpdCBhNigkLEcsUSxYKSxYKG51bGwpO2xldCBWPUo9PT0iaXBhIj9geGNydW4gc2ltY3RsIGluc3RhbGwgJHtafSAke0d9YDpgeGNydW4gc2ltY3RsIGFkZG1lZGlhICR7Wn0gJHtHfWAsQj1hd2FpdCBRKFYpO2lmKEIuZXhpdENvZGUhPT0wKXtsZXQgTj1KPT09ImlwYSI/Imluc3RhbGwiOiJhZGRtZWRpYSI7dGhyb3cgRXJyb3IoQi5zdGRlcnJ8fGAke059IGZhaWxlZCAoZXhpdCAke0IuZXhpdENvZGV9KWApfX1maW5hbGx5e1EoYGJhc2ggLWMgJ3JtIC1mICR7R30nYCkuY2F0Y2goKCk9Pnt9KX19dmFyIFpRPTMwMDA7YXN5bmMgZnVuY3Rpb24gS1EoJCxKPWZldGNoKXt0cnl7bGV0IFE9YXdhaXQgSigkLHtjYWNoZToibm8tc3RvcmUifSk7aWYoIVEub2spcmV0dXJuIG51bGw7bGV0IFo9YXdhaXQgUS5qc29uKCk7cmV0dXJuIFomJnR5cGVvZiBaPT09Im9iamVjdCImJiFBcnJheS5pc0FycmF5KFopP1o6bnVsbH1jYXRjaHtyZXR1cm4gbnVsbH19dmFyIFhRPTIwOTcxNTIwMCxZUT0iTGFyZ2UgdmlkZW8gKD4yMDAgTUIpIOKAlCBtYXkgc3R1dHRlciBvbiBzaGFyZWQgbWVtb3J5IixlNj0iSEVJQyBkZWNvZGUgZmFpbGVkIOKAlCBleHBvcnQgYXMgSlBFRyBvciBQTkcgYW5kIHJldHJ5IjtmdW5jdGlvbiBxUSgkLEope2lmKEopcmV0dXJuImFjdGl2ZSI7aWYoJD09PSJhY3RpdmUiKXJldHVybiJkaXNjb25uZWN0ZWQiO2lmKCQ9PT0iZGlzY29ubmVjdGVkIilyZXR1cm4icmVhZHkiO3JldHVybiAkfWZ1bmN0aW9uIEdRKCQpe2lmKCEkLmluamVjdGVkKXJldHVybiJwbGF5IjtpZigkLnNvdXJjZT09PSJwbGFjZWhvbGRlciIpcmV0dXJuInBsYXkiO2lmKCQuYnVuZGxlSWQmJiEkLmZvcmVncm91bmRJc0luamVjdGVkKXJldHVybiJhdHRhY2giO3JldHVybiJzdG9wIn1mdW5jdGlvbiBWUSgkKXtyZXR1cm4gJC5zcGxpdChgCmApLm1hcCgoSik9PkoudHJpbSgpKS5maWx0ZXIoQm9vbGVhbikuZmxhdE1hcCgoSik9PntsZXQgUT1KLmluZGV4T2YoIlx0Iik7aWYoUTw9MClyZXR1cm5bXTtsZXQgWj1KLnNsaWNlKDAsUSkudHJpbSgpLFg9Si5zbGljZShRKzEpLnRyaW0oKTtpZighWnx8IVgpcmV0dXJuW107cmV0dXJuW3tpZDpaLG5hbWU6WH1dfSl9dmFyIEJRPW5ldyBTZXQoWyJtcDQiLCJtNHYiLCJtb3YiLCJxdCIsImF2aSIsIm1rdiIsIndlYm0iLCJtcGciLCJtcGVnIiwiM2dwIiwiM2cyIiwidHMiLCJ3bXYiXSk7ZnVuY3Rpb24gJDQoJCl7aWYoJC50eXBlJiYkLnR5cGUuc3RhcnRzV2l0aCgidmlkZW8vIikpcmV0dXJuITA7bGV0IEo9KCQubmFtZT8/IiIpLnRvTG93ZXJDYXNlKCksUT1KLmxhc3RJbmRleE9mKCIuIik7aWYoUTwwKXJldHVybiExO3JldHVybiBCUS5oYXMoSi5zbGljZShRKzEpKX1mdW5jdGlvbiBOUSgkKXtyZXR1cm4gJDQoJCkmJiQuc2l6ZT5YUX1mdW5jdGlvbiBMUSgkKXtsZXQgSj0oJC50eXBlPz8iIikudG9Mb3dlckNhc2UoKTtpZihKPT09ImltYWdlL2hlaWMifHxKPT09ImltYWdlL2hlaWYiKXJldHVybiEwO2xldCBRPSgkLm5hbWU/PyIiKS50b0xvd2VyQ2FzZSgpO3JldHVybiBRLmVuZHNXaXRoKCIuaGVpYyIpfHxRLmVuZHNXaXRoKCIuaGVpZiIpfWZ1bmN0aW9uIHpRKHtyYXdNZXNzYWdlOiQsbGFzdEZpbGVJc0hlaWM6Sixzb3VyY2U6UX0pe2lmKEomJihRPT09ImltYWdlInx8UT09PSJ2aWRlbyIpKXJldHVybiBlNjtyZXR1cm4gJH1mdW5jdGlvbiBDUSh7c3RhdGU6JH0pe2xldCBKPSQ9PT0iYWN0aXZlIj8iQWN0aXZlIjokPT09ImRpc2Nvbm5lY3RlZCI/IkRpc2Nvbm5lY3RlZCI6IlJlYWR5IixRPSQ9PT0iYWN0aXZlIj8ic2l6ZS0xLjUgcm91bmRlZC1mdWxsIGJnLXN1Y2Nlc3MtZW1lcmFsZCBbYm94LXNoYWRvdzowXzBfNnB4X3JnYmEoNzQsMjIyLDEyOCwwLjcpXSI6JD09PSJkaXNjb25uZWN0ZWQiPyJzaXplLTEuNSByb3VuZGVkLWZ1bGwgYmctZGFuZ2VyLXNvZnQgW2JveC1zaGFkb3c6MF8wXzZweF9yZ2JhKDI0OCwxMTMsMTEzLDAuNTUpXSI6bnVsbDtyZXR1cm4gSygic3BhbiIse2NsYXNzTmFtZToidGV4dC1bMTFweF0gdGV4dC13aGl0ZS81NSBmb250LW1vbm8gaW5saW5lLWZsZXggaXRlbXMtY2VudGVyIGdhcC0xLjUganVzdGlmeS1zZWxmLWVuZCBsZWFkaW5nLW5vbmUiLCJkYXRhLWNhbWVyYS1waWxsLXN0YXRlIjokLGNoaWxkcmVuOltRJiZLKCJzcGFuIix7Y2xhc3NOYW1lOlF9KSxKXX0pfWZ1bmN0aW9uIFVRKCl7cmV0dXJuIEsoInAiLHtjbGFzc05hbWU6Im0tMCB0ZXh0LWNlbnRlciB0ZXh0LVsxMHB4XSBsZWFkaW5nLVsxLjVdIHRleHQtd2hpdGUvNDUiLCJkYXRhLWNhbWVyYS10ZXN0LXBhdHRlcm4taGludCI6ITAsY2hpbGRyZW46IlRlc3QtcGF0dGVybiBmZWVkIn0pfWZ1bmN0aW9uIEhRKHttb2RlOiQsZmlsZU5hbWU6Six3ZWJjYW1OYW1lOlEsc291cmNlS2luZDpafSl7aWYoJD09PSJ1cGxvYWRpbmciKXJldHVybiBLKCJzcGFuIix7Y2xhc3NOYW1lOiJ0ZXh0LVsxMXB4XSB0ZXh0LXdoaXRlLzU1IixjaGlsZHJlbjoiVXBsb2FkaW5n4oCmIn0pO2lmKCQ9PT0iZmlsZSIpcmV0dXJuIEsoWjEse2NoaWxkcmVuOltLKCJkaXYiLHtjbGFzc05hbWU6InNocmluay0wIHRleHQtWzlweF0gdHJhY2tpbmctWzAuMWVtXSB1cHBlcmNhc2UgdGV4dC13aGl0ZS81NSBiZy13aGl0ZS9bMC4wNl0gYm9yZGVyIGJvcmRlci13aGl0ZS84IHB4LVs3cHhdIHB5LVsycHhdIHJvdW5kZWQtZnVsbCIsY2hpbGRyZW46Wj09PSJ2aWRlbyI/IlZpZGVvIjoiSW1hZ2UifSksSygic3BhbiIse2NsYXNzTmFtZToiZmxleC0xIG1pbi13LTAgdHJ1bmNhdGUgdGV4dC1bMTJweF0gdGV4dC13aGl0ZS85MCBmb250LW1vbm8iLGNoaWxkcmVuOko/PyIifSldfSk7aWYoJD09PSJ3ZWJjYW0iKXJldHVybiBLKFoxLHtjaGlsZHJlbjpbSygiZGl2Iix7Y2xhc3NOYW1lOiJzaHJpbmstMCB0ZXh0LVs5cHhdIHRyYWNraW5nLVswLjFlbV0gdXBwZXJjYXNlIHRleHQtd2hpdGUvNTUgYmctd2hpdGUvWzAuMDZdIGJvcmRlciBib3JkZXItd2hpdGUvOCBweC1bN3B4XSBweS1bMnB4XSByb3VuZGVkLWZ1bGwiLGNoaWxkcmVuOiJXZWJjYW0ifSksSygic3BhbiIse2NsYXNzTmFtZToiZmxleC0xIG1pbi13LTAgdHJ1bmNhdGUgdGV4dC1bMTJweF0gdGV4dC13aGl0ZS85MCBmb250LW1vbm8iLGNoaWxkcmVuOlE/PyIifSldfSk7cmV0dXJuIEsoInNwYW4iLHtjbGFzc05hbWU6InRleHQtWzEycHhdIHRleHQtd2hpdGUvODUgZm9udC1tZWRpdW0iLGNoaWxkcmVuOiJTZWxlY3Qgb3IgZHJvcCBtZWRpYSJ9KX1mdW5jdGlvbiB0Nih7a2luZDokLG1lc3NhZ2U6Sn0pe3JldHVybiBLKCJkaXYiLHtjbGFzc05hbWU6JD09PSJ3YXJuaW5nIj8iYmctd2FybmluZy8xMCBib3JkZXIgYm9yZGVyLXdhcm5pbmcvMjUgdGV4dC13YXJuaW5nLXNvZnQgdGV4dC1bMTFweF0gcHgtMiBweS0xLjUgcm91bmRlZC1tZCBicmVhay13b3JkcyI6ImJnLWRhbmdlci8xMCBib3JkZXIgYm9yZGVyLWRhbmdlci8yMCB0ZXh0LWRhbmdlci1zb2Z0IHRleHQtWzExcHhdIHB4LTIgcHktMS41IHJvdW5kZWQtbWQgYnJlYWstd29yZHMiLCJkYXRhLWNhbWVyYS1iYW5uZXIta2luZCI6JCxyb2xlOiQ9PT0iZXJyb3IiPyJhbGVydCI6InN0YXR1cyIsY2hpbGRyZW46Sn0pfWZ1bmN0aW9uIEo0KHt1ZGlkOiQsYnVuZGxlSWQ6Sn0pe2xldFtRLFpdPVcoITEpLFtYLFldPVcoInBsYWNlaG9sZGVyIiksW3EsR109VygiIiksW1YsQl09VyhudWxsKSxbTix6XT1XKCExKSxMPUUoMCksW0MsQV09VyghMSksW1UsSF09VyghMSksaz1FKG51bGwpLFtGLHddPVcoW10pLFtULFNdPVcoITEpLFt4LCQxXT1XKCIiKSxbZixpXT1XKCJvZmYiKSxbcixsXT1XKG51bGwpLFtvLFExXT1XKG51bGwpLE4xPXIhPT1udWxsfHxvIT09bnVsbCxbYyx2XT1XKG51bGwpLFtuLFgxXT1XKG51bGwpLFssTDFdPVcobnVsbCksW0oxLFkxXT1XKCExKSxbSDEseV09VygicmVhZHkiKSxbZyxQXT1XKCgpPT5uZXcgU2V0KSxbcCx1XT1XKG51bGwpLFtqLEcxXT1XKG51bGwpLHoxPUUoITEpLE0xPUUoITEpLFcxPUUoIm9mZiIpLGkxPUUoITEpLEYxPUUxKCgpPT57bGV0IF89d2luZG93Ll9fU0lNX1BSRVZJRVdfXz8uc2VydmVTaW1CaW47aWYoIV8pcmV0dXJuInNlcnZlLXNpbSI7aWYoL1wudHMkLy50ZXN0KF8pKXJldHVybmBidW4gJHtPMShfKX1gO2lmKC9cLmpzJC8udGVzdChfKSlyZXR1cm5gbm9kZSAke08xKF8pfWA7cmV0dXJuIE8xKF8pfSxbXSksdjE9RChhc3luYygpPT57bGV0IF89d2luZG93Ll9fU0lNX1BSRVZJRVdfXz8uY2FtZXJhU3RhdHVzRW5kcG9pbnQ7cmV0dXJuIF8/S1EoXyk6bnVsbH0sW10pLFAxPUUoYXN5bmMoKT0+e30pLHUxPUUoSik7YigoKT0+e3UxLmN1cnJlbnQ9Sn0sW0pdKSxiKCgpPT57bGV0IF89ITE7cmV0dXJuKGFzeW5jKCk9PntsZXQgZD1hd2FpdCB2MSgpO2lmKF98fCFkfHwhZC5hbGl2ZSlyZXR1cm47TTEuY3VycmVudD0hMDtsZXQgYT1kLnNvdXJjZTtpZihhPT09InBsYWNlaG9sZGVyInx8YT09PSJ3ZWJjYW0ifHxhPT09ImltYWdlInx8YT09PSJ2aWRlbyIpWShhKTtpZigoYT09PSJpbWFnZSJ8fGE9PT0idmlkZW8iKSYmZC5hcmcpRyhkLmFyZyksQihkLmFyZy5zcGxpdCgiLyIpLnBvcCgpPz9udWxsKTtpZihhPT09IndlYmNhbSImJmQuYXJnKSQxKGQuYXJnKSxQMS5jdXJyZW50KCk7bGV0IGsxPWQubWlycm9yPT09Im9uIj8ib24iOiJvZmYiO2koazEpLFcxLmN1cnJlbnQ9azEsdShkLmhlbHBlclBpZD8/bnVsbCksWTEoITApO2xldCBWMT1BcnJheS5pc0FycmF5KGQuYnVuZGxlSWRzKT9kLmJ1bmRsZUlkczpbXTtpZihWMS5sZW5ndGg+MClQKG5ldyBTZXQoVjEpKTtsZXQgQjE9dTEuY3VycmVudCxnMT1hJiZhIT09InBsYWNlaG9sZGVyIjt5KEIxJiZWMS5pbmNsdWRlcyhCMSkmJmcxPyJhY3RpdmUiOiJyZWFkeSIpLEwxKGBSZWF0dGFjaGVkIOKGkiAke2E/PyJydW5uaW5nIGhlbHBlciJ9JHtkLmFyZz9gICgke2QuYXJnfSlgOiIifWApfSkoKSwoKT0+e189ITB9fSxbJCx2MV0pLGIoKCk9PntsZXQgXz0hMSxkPSExLGE9bnVsbCxrMT1hc3luYygpPT57aWYoX3x8ZClyZXR1cm47aWYodHlwZW9mIGRvY3VtZW50PCJ1IiYmZG9jdW1lbnQudmlzaWJpbGl0eVN0YXRlPT09ImhpZGRlbiIpcmV0dXJuO2Q9ITA7dHJ5e2xldCBCMT1hd2FpdCB2MSgpO2lmKF8pcmV0dXJuO2xldCBnMT0hIUIxPy5hbGl2ZSxmMT1BcnJheS5pc0FycmF5KEIxPy5idW5kbGVJZHMpP0IxLmJ1bmRsZUlkczpudWxsLHgxPSEhSiYmKGYxP2YxLmluY2x1ZGVzKEopOmcuaGFzKEopKSxPMD1CMT8uc291cmNlPz9udWxsLFQxPUoxJiZnMSYmeDEmJiEhKE8wJiZPMCE9PSJwbGFjZWhvbGRlciIpJiYocD09bnVsbHx8QjE/LmhlbHBlclBpZD09PXApO2lmKHkoKEwwKT0+cVEoTDAsVDEpKSwhZzEpWTEoKEwwKT0+e2lmKCFMMClyZXR1cm4gTDA7cmV0dXJuIFAobmV3IFNldCksdShudWxsKSxXMS5jdXJyZW50PSJvZmYiLCExfSk7ZWxzZSBpZihKMSYmcCE9bnVsbCYmQjE/LmhlbHBlclBpZCE9PXApWTEoITEpLFAobmV3IFNldCksdShudWxsKSxXMS5jdXJyZW50PSJvZmYiO2Vsc2UgaWYoZzEmJkFycmF5LmlzQXJyYXkoQjE/LmJ1bmRsZUlkcykpe2xldCBMMD1CMS5idW5kbGVJZHM7UCgoRDApPT57aWYoRDAuc2l6ZT09PUwwLmxlbmd0aCYmTDAuZXZlcnkoKGIwKT0+RDAuaGFzKGIwKSkpcmV0dXJuIEQwO3JldHVybiBuZXcgU2V0KEwwKX0pfX1maW5hbGx5e2Q9ITF9fTthPXNldEludGVydmFsKCgpPT57azEoKX0sWlEpO2xldCBWMT0oKT0+e2lmKGRvY3VtZW50LnZpc2liaWxpdHlTdGF0ZT09PSJ2aXNpYmxlIilrMSgpfTtpZih0eXBlb2YgZG9jdW1lbnQ8InUiKWRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoInZpc2liaWxpdHljaGFuZ2UiLFYxKTtyZXR1cm4oKT0+e2lmKF89ITAsYSljbGVhckludGVydmFsKGEpO2lmKHR5cGVvZiBkb2N1bWVudDwidSIpZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigidmlzaWJpbGl0eWNoYW5nZSIsVjEpfX0sW3YxLEoxLHAsSixnXSk7bGV0IEMxPUQoYXN5bmMoKT0+e1MoITApLHYobnVsbCk7dHJ5e2xldCBfPWF3YWl0IEkxKGAke0YxfSBjYW1lcmEgLS1saXN0LXdlYmNhbXNgKTtpZihfLmV4aXRDb2RlIT09MCl7dihfLnN0ZGVyci50cmltKCl8fGAtLWxpc3Qtd2ViY2FtcyBmYWlsZWQgKCR7Xy5leGl0Q29kZX0pYCk7cmV0dXJufWxldCBkPVZRKF8uc3Rkb3V0KTtpZih3KGQpLGQubGVuZ3RoPjAmJiF4KSQxKGRbMF0uaWQpfWZpbmFsbHl7UyghMSl9fSxbeCxGMV0pO2IoKCk9PntQMS5jdXJyZW50PUMxfSxbQzFdKSxiKCgpPT57aWYoVSYmRi5sZW5ndGg9PT0wJiYhVClDMSgpfSxbVSxGLmxlbmd0aCxULEMxXSk7bGV0IHcxPUQoKF8pPT57dih6USh7cmF3TWVzc2FnZTpfLGxhc3RGaWxlSXNIZWljOnoxLmN1cnJlbnQsc291cmNlOlh9KSl9LFtYXSksbDE9RChhc3luYyhfLGQsYSk9PntsZXQgazE9Xz09PSJpbWFnZSJ8fF89PT0idmlkZW8iLFYxPVsiY2FtZXJhIiwic3dpdGNoIixrMT8iZmlsZSI6X107aWYoXz09PSJ3ZWJjYW0iJiZkKVYxLnB1c2goTzEoZCkpO2lmKGsxKXtpZighYS50cmltKCkpcmV0dXJuIHYoIkRyb3AgYSBmaWxlIGludG8gdGhlIHBhbmVsIG9yIHBpY2sgYW5vdGhlciBzb3VyY2UuIiksITE7VjEucHVzaChPMShhLnRyaW0oKSkpfVYxLnB1c2goIi1kIiwkLCItLXF1aWV0Iik7bGV0IEIxPWF3YWl0IEkxKGAke0YxfSAke1YxLmpvaW4oIiAiKX1gKTtpZihCMS5leGl0Q29kZSE9PTApcmV0dXJuIHcxKEIxLnN0ZGVyci50cmltKCl8fEIxLnN0ZG91dC50cmltKCl8fGBzd2l0Y2ggZmFpbGVkICgke0IxLmV4aXRDb2RlfSlgKSwhMTt6MS5jdXJyZW50PSExO3RyeXtsZXQgZzE9SlNPTi5wYXJzZShCMS5zdGRvdXQudHJpbSgpKTtMMShgU3dpdGNoZWQg4oaSICR7ZzEuc291cmNlPz9ffSR7ZzEuYXJnP2AgKCR7ZzEuYXJnfSlgOiIifWApfWNhdGNoe0wxKGBTd2l0Y2hlZCDihpIgJHtffWApfXJldHVybiEwfSxbJCxGMSx3MV0pLHQxPUQoYXN5bmMoKT0+e2lmKCFKKXJldHVybjtsKCJpbmplY3QiKSx2KG51bGwpLEwxKG51bGwpO3RyeXtsZXQgXz1bImNhbWVyYSIsTzEoSiksIi1kIiwkLCItLXF1aWV0Il07aWYoWD09PSJpbWFnZSJ8fFg9PT0idmlkZW8iKXtpZighcS50cmltKCkpe3YoIkRyb3AgYSBmaWxlIGludG8gdGhlIHBhbmVsIG9yIHBpY2sgYW5vdGhlciBzb3VyY2UuIik7cmV0dXJufV8ucHVzaCgiLS1maWxlIixPMShxLnRyaW0oKSkpfWVsc2UgaWYoWD09PSJ3ZWJjYW0iKWlmKHgpXy5wdXNoKCItLXdlYmNhbSIsTzEoeCkpO2Vsc2UgXy5wdXNoKCItLXdlYmNhbSIpO18ucHVzaCgiLS1taXJyb3IiLGYpO2xldCBkPWF3YWl0IEkxKGAke0YxfSAke18uam9pbigiICIpfWApO2lmKGQuZXhpdENvZGUhPT0wKXt3MShkLnN0ZGVyci50cmltKCl8fGQuc3Rkb3V0LnRyaW0oKXx8YGluamVjdCBmYWlsZWQgKCR7ZC5leGl0Q29kZX0pYCk7cmV0dXJufXoxLmN1cnJlbnQ9ITE7bGV0IGE9bnVsbDt0cnl7bGV0IGsxPUpTT04ucGFyc2UoZC5zdGRvdXQudHJpbSgpKTthPWsxLmhlbHBlclBpZD8/bnVsbDtsZXQgVjE9azEuaGVscGVyUmVsYXVuY2hlZD09PSExPyJBdHRhY2hlZCI6IkluamVjdGVkIixCMT1rMS5waWQ/YCBwaWQgJHtrMS5waWR9YDoiIixnMT1rMS5oZWxwZXJQaWQ/YCwgaGVscGVyIHBpZCAke2sxLmhlbHBlclBpZH1gOiIiO0wxKGAke1YxfSAke2sxLnNvdXJjZT8/WH0gaW50byAke0p9JHtCMX0ke2cxfWApfWNhdGNoe0wxKGQuc3Rkb3V0LnRyaW0oKXx8IkluamVjdGVkLiIpfVkxKCEwKSx5KFg9PT0icGxhY2Vob2xkZXIiPyJyZWFkeSI6ImFjdGl2ZSIpLHUoYSksUCgoazEpPT5rMS5oYXMoSik/azE6bmV3IFNldChrMSkuYWRkKEopKSxXMS5jdXJyZW50PWZ9ZmluYWxseXtsKG51bGwpfX0sW0osJCxYLHEseCxmLEYxLHcxXSksUjE9SjE/YCR7WH06OiR7WD09PSJ3ZWJjYW0iP3g6IiJ9Ojoke1g9PT0iaW1hZ2UifHxYPT09InZpZGVvIj9xOiIifWA6bnVsbCxhMT0hIUomJmcuaGFzKEopLGUxPWExJiZYIT09InBsYWNlaG9sZGVyIjtiKCgpPT57aWYoIWUxKXtpMS5jdXJyZW50PSExO3JldHVybn1pZihpMS5jdXJyZW50KXJldHVybjtpMS5jdXJyZW50PSEwLFooITApfSxbZTFdKSxiKCgpPT57aWYoIWopcmV0dXJuO2lmKCFKfHxOMXx8QylyZXR1cm47aWYoWCE9PSJ3ZWJjYW0ifHx4IT09ailyZXR1cm47aWYoRzEobnVsbCksSjEpcmV0dXJuO3QxKCl9LFtqLEosTjEsQyxYLHgsSjEsdDFdKSxiKCgpPT57aWYoIUoxKXJldHVybjtpZigoWD09PSJpbWFnZSJ8fFg9PT0idmlkZW8iKSYmIXEudHJpbSgpKXJldHVybjtpZihYPT09IndlYmNhbSImJiF4KXJldHVybjtpZihNMS5jdXJyZW50KXtNMS5jdXJyZW50PSExO3JldHVybn1sZXQgXz0hMTtyZXR1cm4oYXN5bmMoKT0+e1ExKCJzd2l0Y2giKSx2KG51bGwpO3RyeXtpZihfKXJldHVybjthd2FpdCBsMShYLHgscSl9ZmluYWxseXtpZighXylRMShudWxsKX19KSgpLCgpPT57Xz0hMH19LFtSMV0pLGIoKCk9PntpZighSjEpcmV0dXJuO2lmKFcxLmN1cnJlbnQ9PT1mKXJldHVybjtsZXQgXz1mLGQ9ITE7cmV0dXJuKGFzeW5jKCk9PntRMSgibWlycm9yIiksdihudWxsKTt0cnl7bGV0IGE9YXdhaXQgSTEoYCR7RjF9IGNhbWVyYSBtaXJyb3IgJHtffSAtZCAkeyR9IC0tcXVpZXRgKTtpZihkKXJldHVybjtpZihhLmV4aXRDb2RlIT09MCl7dihhLnN0ZGVyci50cmltKCl8fGEuc3Rkb3V0LnRyaW0oKXx8YG1pcnJvciBmYWlsZWQgKCR7YS5leGl0Q29kZX0pYCk7cmV0dXJufVcxLmN1cnJlbnQ9XyxMMShgTWlycm9yIOKGkiAke199YCl9ZmluYWxseXtpZighZClRMShudWxsKX19KSgpLCgpPT57ZD0hMH19LFtmLEoxXSk7bGV0IFYwPUQoYXN5bmMoKT0+e2woInN0b3AiKSx2KG51bGwpO3RyeXtsZXQgXz1hd2FpdCBJMShgJHtGMX0gY2FtZXJhIC0tc3RvcC13ZWJjYW0gLWQgJHskfWApO2lmKF8uZXhpdENvZGUhPT0wKXt2KF8uc3RkZXJyLnRyaW0oKXx8YHN0b3Atd2ViY2FtIGZhaWxlZCAoJHtfLmV4aXRDb2RlfSlgKTtyZXR1cm59TDEoIkNhbWVyYSBoZWxwZXIgc3RvcHBlZC4iKSxZMSghMSkseSgicmVhZHkiKSxQKG5ldyBTZXQpLFcxLmN1cnJlbnQ9Im9mZiJ9ZmluYWxseXtsKG51bGwpfX0sWyQsRjFdKSxzMT1EKGFzeW5jKF8pPT57bGV0IGQ9TFEoe3R5cGU6Xy50eXBlLG5hbWU6Xy5uYW1lfSksYT1fLnR5cGUuc3RhcnRzV2l0aCgiaW1hZ2UvIil8fGQsazE9Xy50eXBlLnN0YXJ0c1dpdGgoInZpZGVvLyIpfHwkNCh7dHlwZTpfLnR5cGUsbmFtZTpfLm5hbWV9KTtpZighYSYmIWsxKXt6MS5jdXJyZW50PSExLHYoYFVuc3VwcG9ydGVkIGZpbGUgdHlwZTogJHtfLnR5cGV8fF8ubmFtZX1gKTtyZXR1cm59aWYoQSghMCksdihudWxsKSxYMShudWxsKSxOUSh7dHlwZTpfLnR5cGUsbmFtZTpfLm5hbWUsc2l6ZTpfLnNpemV9KSlYMShZUSk7ejEuY3VycmVudD1kO3RyeXtsZXQgVjE9SDIoXyksQjE9YXdhaXQgbjYoXywic2VydmUtc2ltLWNhbXNyYyIsVjEsSTEpO0IoXy5uYW1lKSxZKGsxPyJ2aWRlbyI6ImltYWdlIiksRyhCMSksTDEoYExvYWRlZCAke18ubmFtZX1gKX1jYXRjaChWMSl7aWYoejEuY3VycmVudCl2KGU2KTtlbHNlIHYoVjE/Lm1lc3NhZ2U/PyJVcGxvYWQgZmFpbGVkIil9ZmluYWxseXtBKCExKX19LFtdKSx2MD1EKGFzeW5jKF8pPT57Xy5wcmV2ZW50RGVmYXVsdCgpLF8uc3RvcFByb3BhZ2F0aW9uKCksTC5jdXJyZW50PTAseighMSk7bGV0IGQ9Xy5kYXRhVHJhbnNmZXI/LmZpbGVzPy5bMF07aWYoZClhd2FpdCBzMShkKX0sW3MxXSksbTE9RCgoKT0+e1koInBsYWNlaG9sZGVyIiksRygiIiksQihudWxsKSx2KG51bGwpLFgxKG51bGwpLHoxLmN1cnJlbnQ9ITF9LFtdKSxxMD1EKCgpPT57ay5jdXJyZW50Py5jbGljaygpfSxbXSksJDA9RChhc3luYyhfKT0+e2xldCBkPV8udGFyZ2V0LGE9ZC5maWxlcz8uWzBdO2lmKGQudmFsdWU9IiIsYSlhd2FpdCBzMShhKX0sW3MxXSk7YigoKT0+e2lmKCFVKXJldHVybjtsZXQgXz0oZCk9PntsZXQgYT1kLnRhcmdldDtpZihhIGluc3RhbmNlb2YgRWxlbWVudCYmYS5jbG9zZXN0KCJbZGF0YS1jYW1lcmEtc291cmNlLW1lbnVdIikpcmV0dXJuO0goITEpfTtyZXR1cm4gd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsXyksKCk9PndpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZWRvd24iLF8pfSxbVV0pO2xldCBQMD1EKChfKT0+e2lmKCQxKF8uaWQpLFkoIndlYmNhbSIpLEIobnVsbCksdihudWxsKSx6MS5jdXJyZW50PSExLEgoITEpLEopRzEoXy5pZCl9LFtKXSksZDE9RCgoKT0+e2koKF8pPT5fPT09Im9uIj8ib2ZmIjoib24iKX0sW10pLG4xPSFKMXx8WD09PSJwbGFjZWhvbGRlciIsXzA9RCgoXyk9PntpZihfLnByZXZlbnREZWZhdWx0KCksTC5jdXJyZW50KyssTC5jdXJyZW50PT09MSl6KCEwKX0sW10pLGoxPUQoKF8pPT57aWYoXy5wcmV2ZW50RGVmYXVsdCgpLF8uZGF0YVRyYW5zZmVyKV8uZGF0YVRyYW5zZmVyLmRyb3BFZmZlY3Q9ImNvcHkifSxbXSksSDA9RCgoXyk9PntpZihfLnByZXZlbnREZWZhdWx0KCksTC5jdXJyZW50LS0sTC5jdXJyZW50PD0wKUwuY3VycmVudD0wLHooITEpfSxbXSksQjA9R1Eoe2J1bmRsZUlkOkosaW5qZWN0ZWQ6SjEsc291cmNlOlgsZm9yZWdyb3VuZElzSW5qZWN0ZWQ6YTF9KSxEMT1CMD09PSJzdG9wIj97bGFiZWw6cj09PSJzdG9wIj8iU3RvcHBpbmfigKYiOiJTdG9wIixvbkNsaWNrOlYwLGtpbmQ6InN0b3AifTpCMD09PSJhdHRhY2giP3tsYWJlbDpyPT09ImluamVjdCI/IkluamVjdGluZ+KApiI6YEluamVjdCAke0p9YCxvbkNsaWNrOnQxLGtpbmQ6ImF0dGFjaCJ9OntsYWJlbDpyPT09ImluamVjdCI/IlN0YXJ0aW5n4oCmIjoiUGxheSIsb25DbGljazp0MSxraW5kOiJwbGF5In0seTE9QjA9PT0ic3RvcCI/Q3x8ciE9PW51bGw6IUp8fEN8fHIhPT1udWxsLEowPVg9PT0icGxhY2Vob2xkZXIiLEEwPVg9PT0id2ViY2FtIixOMD0oWD09PSJpbWFnZSJ8fFg9PT0idmlkZW8iKSYmISFWLGswPUEwP0YuZmluZCgoXyk9Pl8uaWQ9PT14KT8ubmFtZT8/eD8/IldlYmNhbSI6bnVsbCxLMT1DPyJ1cGxvYWRpbmciOk4wPyJmaWxlIjpBMD8id2ViY2FtIjoicGxhY2Vob2xkZXIiO3JldHVybiBLKFgwLHtvcGVuOlEsb25PcGVuQ2hhbmdlOlosYm9keUNsYXNzTmFtZToicHQtMi41IixzdW1tYXJ5Q2xhc3NOYW1lOiJncmlkIFtncmlkLXRlbXBsYXRlLWNvbHVtbnM6YXV0b18xZnJfYXV0b10gaXRlbXMtY2VudGVyIGdhcC0yIHRleHQtbGVmdCIsc3VtbWFyeTpLKFoxLHtjaGlsZHJlbjpbSygic3BhbiIse2NsYXNzTmFtZToidGV4dC1bMTFweF0gZm9udC1zZW1pYm9sZCB0ZXh0LXdoaXRlLzUwIHVwcGVyY2FzZSB0cmFja2luZy1bMC4wOGVtXSBsZWFkaW5nLW5vbmUgaW5saW5lLWZsZXggaXRlbXMtY2VudGVyIixjaGlsZHJlbjoiQ2FtZXJhIn0pLEsoQ1Ese3N0YXRlOkgxfSldfSksY2hpbGRyZW46SygiZGl2Iix7b25EcmFnRW50ZXI6XzAsb25EcmFnT3ZlcjpqMSxvbkRyYWdMZWF2ZTpIMCxvbkRyb3A6djAsY2xhc3NOYW1lOiJmbGV4IGZsZXgtY29sIGdhcC0yLjUiLGNoaWxkcmVuOltLKCJwIix7Y2xhc3NOYW1lOiJtLTAgdGV4dC1bMTBweF0gbGVhZGluZy1bMS41XSB0ZXh0LXdoaXRlLzQ1IixjaGlsZHJlbjoiUmVwbGFjZXMgdGhlIHNpbXVsYXRvcidzIGNhbWVyYSBmZWVkIGJ5IGluamVjdGluZyBhIGR5bGliIGF0IGFwcCBsYXVuY2ggYW5kIHN0cmVhbWluZyBmcmFtZXMgaW50byBzaGFyZWQgbWVtb3J5LiBQaWNrIG1lZGlhIG9yIGEgd2ViY2FtLCB0aGVuIFBsYXkgdG8gaW5qZWN0IGludG8gdGhlIGZvcmVncm91bmQgYXBwLiJ9KSxLKCJpbnB1dCIse3JlZjprLHR5cGU6ImZpbGUiLGFjY2VwdDoiaW1hZ2UvKix2aWRlby8qIixjbGFzc05hbWU6ImhpZGRlbiIsb25DaGFuZ2U6JDB9KSxLKCJkaXYiLHtvbkNsaWNrOihfKT0+e2lmKCFKMClyZXR1cm47aWYoXy50YXJnZXQuY2xvc2VzdCgiW2RhdGEtY2xlYXItbWVkaWFdIikpcmV0dXJuO3EwKCl9LHRpdGxlOkowPyJObyBzb3VyY2Ugc2VsZWN0ZWQg4oCUIFBsYXkgdXNlcyBhIHRlc3QtcGF0dGVybiBmZWVkLiBDbGljayB0byBwaWNrIGFuIGltYWdlL3ZpZGVvLCBvciBkcm9wIG9uZSBoZXJlLiI6QTA/YFNvdXJjZTogJHtrMH1gOmBTb3VyY2U6ICR7Vj8/WH1gLGNsYXNzTmFtZTpbInJlbGF0aXZlIG1pbi1oLVs0NHB4XSBmbGV4IGZsZXgtcm93IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBnYXAtMi41IHB4LTMuNSBweS0yLjUgcm91bmRlZC1bN3B4XSB0ZXh0LWNlbnRlciB0cmFuc2l0aW9uLVtib3JkZXItY29sb3IsYmFja2dyb3VuZF0gZHVyYXRpb24tMTUwIixKMD8iYmctd2hpdGUvWzAuMDRdIGJvcmRlciBib3JkZXItZGFzaGVkIGJvcmRlci13aGl0ZS8xMiI6ImJnLXdoaXRlL1swLjA0XSBib3JkZXIgYm9yZGVyLXdoaXRlLzgiLE4/IiFiZy1bcmdiYSgxMCwxMzIsMjU1LDAuMDgpXSAhYm9yZGVyLVtyZ2JhKDEwLDEzMiwyNTUsMC42KV0iOiIiLEM/ImN1cnNvci1wcm9ncmVzcyI6SjA/ImN1cnNvci1wb2ludGVyIjoiY3Vyc29yLWRlZmF1bHQiXS5qb2luKCIgIiksY2hpbGRyZW46W0soSFEse21vZGU6SzEsZmlsZU5hbWU6Vix3ZWJjYW1OYW1lOmswLHNvdXJjZUtpbmQ6WH0pLCFKMCYmIUMmJksoImJ1dHRvbiIseyJkYXRhLWNsZWFyLW1lZGlhIjohMCxvbkNsaWNrOihfKT0+e18uc3RvcFByb3BhZ2F0aW9uKCksbTEoKX0sY2xhc3NOYW1lOiJzaHJpbmstMCB3LTUgaC01IGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGJnLXRyYW5zcGFyZW50IGJvcmRlci1ub25lIHRleHQtd2hpdGUvNTUgaG92ZXI6dGV4dC13aGl0ZS85MCBjdXJzb3ItcG9pbnRlciBwLTAiLCJhcmlhLWxhYmVsIjoiQ2xlYXIgc291cmNlIix0aXRsZToiQ2xlYXIg4oaSIHBsYWNlaG9sZGVyIixjaGlsZHJlbjpLKEcwLHtzaXplOjE0LHN0cm9rZVdpZHRoOjJ9KX0pXX0pLEowJiYhQyYmSyhVUSx7fSksSygiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGl0ZW1zLXN0cmV0Y2ggZ2FwLTEuNSIsY2hpbGRyZW46W0soImRpdiIse2NsYXNzTmFtZToicmVsYXRpdmUiLCJkYXRhLWNhbWVyYS1zb3VyY2UtbWVudSI6ITAsY2hpbGRyZW46W0soImJ1dHRvbiIse29uQ2xpY2s6KCk9PkgoKF8pPT4hXyksY2xhc3NOYW1lOiJoLWZ1bGwgbWluLWgtWzM2cHhdIHctMTAgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgYmctdHJhbnNwYXJlbnQgYm9yZGVyIGJvcmRlci13aGl0ZS8xMiB0ZXh0LXdoaXRlLzg1IHJvdW5kZWQtWzdweF0gY3Vyc29yLXBvaW50ZXIgcC0wIGhvdmVyOmJnLXdoaXRlL1swLjA2XSBob3Zlcjpib3JkZXItd2hpdGUvMjAgaG92ZXI6dGV4dC13aGl0ZSIsImFyaWEtaGFzcG9wdXAiOiJtZW51IiwiYXJpYS1leHBhbmRlZCI6VSx0aXRsZTpYPT09IndlYmNhbSI/YFNvdXJjZTogd2ViY2FtJHt4P2AgKCR7Ri5maW5kKChfKT0+Xy5pZD09PXgpPy5uYW1lPz94fSlgOiIifSDigJQgY2xpY2sgdG8gY2hhbmdlYDpgU291cmNlOiAke1h9IOKAlCBjbGljayB0byBwaWNrIG1lZGlhIG9yIHdlYmNhbWAsImFyaWEtbGFiZWwiOiJDaG9vc2UgY2FtZXJhIHNvdXJjZSIsY2hpbGRyZW46Syh2Mix7c2l6ZToyMCxzdHJva2VXaWR0aDoyfSl9KSxVJiZLKCJkaXYiLHtyb2xlOiJtZW51IixjbGFzc05hbWU6ImFic29sdXRlIHRvcC1bY2FsYygxMDAlKzZweCldIGxlZnQtMCB6LTEwIG1pbi13LVsyMDBweF0gZmxleCBmbGV4LWNvbCBnYXAtcHggcC0xIGJnLXBhbmVsIGJvcmRlciBib3JkZXItd2hpdGUvOCByb3VuZGVkLVs3cHhdIHNoYWRvdy1bMF84cHhfMjRweF9yZ2JhKDAsMCwwLDAuNCldIixjaGlsZHJlbjpbSygiYnV0dG9uIix7cm9sZToibWVudWl0ZW0iLGNsYXNzTmFtZToidGV4dC1sZWZ0IGJnLXRyYW5zcGFyZW50IGJvcmRlci1ub25lIHRleHQtd2hpdGUvODUgdGV4dC1bMTJweF0gcHgtMi41IHB5LVs3cHhdIHJvdW5kZWQtbWQgY3Vyc29yLXBvaW50ZXIgaG92ZXI6Ymctd2hpdGUvWzAuMDZdIixvbkNsaWNrOigpPT57SCghMSkscTAoKX0sdGl0bGU6IlBpY2sgYW4gaW1hZ2Ugb3IgdmlkZW8gZnJvbSBkaXNrIixjaGlsZHJlbjoiQnJvd3NlIG1lZGlh4oCmIn0pLEsoImRpdiIse2NsYXNzTmFtZToiaC1weCBiZy13aGl0ZS84IG15LTEifSksSygiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gcGwtMi41IHByLTIgcHQtMSBwYi1bMnB4XSIsY2hpbGRyZW46W0soInNwYW4iLHtjbGFzc05hbWU6InRleHQtWzEwcHhdIHRleHQtd2hpdGUvNDUgdXBwZXJjYXNlIHRyYWNraW5nLVswLjA4ZW1dIixjaGlsZHJlbjpUPyJDYW1lcmFzIChsb2FkaW5n4oCmKSI6Ri5sZW5ndGg9PT0wPyJObyBjYW1lcmFzIjoiQ2FtZXJhcyJ9KSxLKCJidXR0b24iLHtvbkNsaWNrOihfKT0+e18uc3RvcFByb3BhZ2F0aW9uKCksQzEoKX0sZGlzYWJsZWQ6VCxjbGFzc05hbWU6ImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHctWzIycHhdIGgtWzIycHhdIGJnLXRyYW5zcGFyZW50IGJvcmRlci1ub25lIHJvdW5kZWQtWzVweF0gdGV4dC13aGl0ZS81NSBob3Zlcjp0ZXh0LXdoaXRlLzkwIGN1cnNvci1wb2ludGVyIHAtMCBkaXNhYmxlZDpvcGFjaXR5LTUwIiwiYXJpYS1sYWJlbCI6IlJlZnJlc2ggY2FtZXJhcyIsdGl0bGU6IlJlZnJlc2ggY2FtZXJhcyIsY2hpbGRyZW46SyhyMCx7c2l6ZToxMyxzdHJva2VXaWR0aDoyfSl9KV19KSxGLm1hcCgoXyk9PntsZXQgZD1YPT09IndlYmNhbSImJng9PT1fLmlkO3JldHVybiBLKCJidXR0b24iLHtyb2xlOiJtZW51aXRlbSIsY2xhc3NOYW1lOlsidGV4dC1sZWZ0IGJnLXRyYW5zcGFyZW50IGJvcmRlci1ub25lIHRleHQtWzEycHhdIHB4LTIuNSBweS1bN3B4XSByb3VuZGVkLW1kIGN1cnNvci1wb2ludGVyIGhvdmVyOmJnLXdoaXRlL1swLjA2XSIsZD8iIWJnLXdoaXRlL1swLjEyXSAhdGV4dC13aGl0ZSI6InRleHQtd2hpdGUvODUiXS5qb2luKCIgIiksb25DbGljazooKT0+UDAoXyksdGl0bGU6Xy5uYW1lLGNoaWxkcmVuOl8ubmFtZX0sXy5pZCl9KV19KV19KSxLKCJidXR0b24iLHtvbkNsaWNrOkQxLm9uQ2xpY2ssZGlzYWJsZWQ6eTEsY2xhc3NOYW1lOlsiZmxleC0xIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGdhcC0xLjUgcHktMiBweC0yLjUgYm9yZGVyLW5vbmUgcm91bmRlZC1bN3B4XSB0ZXh0LVsxMnB4XSBmb250LXNlbWlib2xkIGN1cnNvci1wb2ludGVyIGRpc2FibGVkOm9wYWNpdHktNTAgbWluLWgtWzM2cHhdIixEMS5raW5kPT09InN0b3AiPyJiZy13aGl0ZS9bMC4xNl0gdGV4dC13aGl0ZSBlbmFibGVkOmhvdmVyOmJnLXdoaXRlL1swLjIyXSI6ImJnLXN1Y2Nlc3MtZW1lcmFsZCB0ZXh0LVsjMDYyMDE4XSBlbmFibGVkOmhvdmVyOmJyaWdodG5lc3MtWzEuMDhdIl0uam9pbigiICIpLHRpdGxlOkQxLmtpbmQ9PT0ic3RvcCI/IlN0b3AgdGhlIGNhbWVyYSBoZWxwZXIgYW5kIHRlcm1pbmF0ZSBpbmplY3RlZCBhcHBzIjpEMS5raW5kPT09ImF0dGFjaCI/YEluamVjdCAke0p9IHNvIGl0IGpvaW5zIHRoZSBjYW1lcmEgZmVlZGA6IUo/IkJyaW5nIGFuIGFwcCB0byB0aGUgZm9yZWdyb3VuZCBmaXJzdCI6IlN0YXJ0OiBpbmplY3QgdGhlIGR5bGliIGFuZCBsYXVuY2ggdGhlIGZvcmVncm91bmQgYXBwIHdpdGggdGhlIGNob3NlbiBzb3VyY2UiLCJhcmlhLXByZXNzZWQiOkQxLmtpbmQ9PT0ic3RvcCIsImFyaWEtbGFiZWwiOkQxLmtpbmQ9PT0ic3RvcCI/IlN0b3AiOiJQbGF5IixjaGlsZHJlbjpbRDEua2luZD09PSJzdG9wIj9LKHAyLHt9KTpLKGYyLHt9KSxLKCJzcGFuIix7Y2hpbGRyZW46RDEua2luZD09PSJzdG9wIj8iU3RvcCI6RDEua2luZD09PSJhdHRhY2giPyJJbmplY3QiOiJQbGF5In0pXX0pLEsoImJ1dHRvbiIse3R5cGU6ImJ1dHRvbiIsb25DbGljazpkMSxkaXNhYmxlZDpuMSxjbGFzc05hbWU6YGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHctMTAgbWluLWgtWzM2cHhdIGJvcmRlciByb3VuZGVkLVs3cHhdIGZvbnQtW2luaGVyaXRdIGRpc2FibGVkOm9wYWNpdHktNTAgZGlzYWJsZWQ6Y3Vyc29yLW5vdC1hbGxvd2VkIGFjdGl2ZTpzY2FsZS1bMC45N10gJHtmPT09Im9uIj8iYmctd2hpdGUgYm9yZGVyLXdoaXRlIHRleHQtWyMwYTBhMGNdIGN1cnNvci1wb2ludGVyIGVuYWJsZWQ6aG92ZXI6Ymctd2hpdGUvWzAuODhdIGVuYWJsZWQ6aG92ZXI6Ym9yZGVyLXdoaXRlL1swLjg4XSBlbmFibGVkOmhvdmVyOnRleHQtWyMwYTBhMGNdIjoiYmctd2hpdGUvWzAuMDRdIGJvcmRlci13aGl0ZS84IHRleHQtd2hpdGUvODUgY3Vyc29yLXBvaW50ZXIgZW5hYmxlZDpob3ZlcjpiZy13aGl0ZS9bMC4wOV0gZW5hYmxlZDpob3Zlcjpib3JkZXItW3JnYmEoMjU1LDI1NSwyNTUsMC4xOCldIGVuYWJsZWQ6aG92ZXI6dGV4dC13aGl0ZSJ9YCwiYXJpYS1sYWJlbCI6YE1pcnJvcjogJHtmfSDigJQgdGFwIHRvIHRvZ2dsZWAsdGl0bGU6bjE/Ik1pcnJvciB0b2dnbGUgYXZhaWxhYmxlIG9uY2UgYSBzb3VyY2UgaXMgc3RyZWFtaW5nIjpgTWlycm9yOiAke2Z9IOKAlCBjbGljayB0byB0b2dnbGVgLCJhcmlhLXByZXNzZWQiOmY9PT0ib24iLGNoaWxkcmVuOksoUzIse3NpemU6MjAsc3Ryb2tlV2lkdGg6MixmaWxsOmY9PT0ib24iPyJjdXJyZW50Q29sb3IiOiJub25lIn0pfSldfSksbiYmSyh0Nix7a2luZDoid2FybmluZyIsbWVzc2FnZTpufSksYyYmSyh0Nix7a2luZDoiZXJyb3IiLG1lc3NhZ2U6Y30pXX0pfSl9dmFyIFE0PTUwMDtmdW5jdGlvbiBaNCh7dWRpZDokLGV2ZW50c0VuZHBvaW50Okp9KXtsZXRbUSxaXT1XKCExKSxbWCxZXT1XKFtdKSxbcSxHXT1XKCExKSxWPUUxKCgpPT5KPz9gJHtjMSgiYXBpL2V2ZW50LWxvZy9ldmVudHMiKX0/ZGV2aWNlPSR7ZW5jb2RlVVJJQ29tcG9uZW50KCQpfWAsW0osJF0pO2IoKCk9PntHKCExKSxZKFtdKTtsZXQgTj1mMChWKTtyZXR1cm4gTi5vbm1lc3NhZ2U9KHtkYXRhOnp9KT0+e3RyeXtsZXQgTD1KU09OLnBhcnNlKHopO2lmKEcoITEpLEFycmF5LmlzQXJyYXkoTC5ldmVudHMpKVkoTC5ldmVudHMuc2xpY2UoLVE0KSk7ZWxzZSBpZihMLmV2ZW50KVkoKEMpPT57cmV0dXJuWy4uLkMuZmlsdGVyKChVKT0+VS5pZCE9PUwuZXZlbnQuaWQpLEwuZXZlbnRdLnNsaWNlKC1RNCl9KX1jYXRjaHt9fSxOLm9uZXJyb3I9KCk9PkcoITApLCgpPT5OLmNsb3NlKCl9LFtWXSk7bGV0IEI9RTEoKCk9Plguc2xpY2UoKS5yZXZlcnNlKCksW1hdKTtyZXR1cm4gSyhYMCx7b3BlbjpRLG9uT3BlbkNoYW5nZTpaLCJkYXRhLWV2ZW50LWxvZyI6IiIsc3VtbWFyeUNsYXNzTmFtZToiZ3JpZCBbZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOmF1dG9fMWZyX2F1dG9dIGl0ZW1zLWNlbnRlciBnYXAtMiB0ZXh0LWxlZnQiLHN1bW1hcnk6SyhaMSx7Y2hpbGRyZW46W0soInNwYW4iLHtjbGFzc05hbWU6InRleHQtWzExcHhdIGZvbnQtc2VtaWJvbGQgdGV4dC13aGl0ZS81MCB1cHBlcmNhc2UgdHJhY2tpbmctWzAuMDhlbV0gbGVhZGluZy1ub25lIixjaGlsZHJlbjoiRXZlbnQgTG9nIn0pLEsoInNwYW4iLHt9KSxLKCJzcGFuIix7Y2xhc3NOYW1lOiJyb3VuZGVkLW1kIGJvcmRlciBib3JkZXItd2hpdGUvOCBiZy13aGl0ZS9bMC4wNF0gcHgtMS41IHB5LVszcHhdIHRleHQtWzEwcHhdIGZvbnQtbW9ubyB0ZXh0LXdoaXRlLzYwIixjaGlsZHJlbjpYLmxlbmd0aH0pXX0pLGNoaWxkcmVuOkIubGVuZ3RoPT09MD9LKCJkaXYiLHtyb2xlOiJzdGF0dXMiLCJhcmlhLWxpdmUiOiJwb2xpdGUiLGNsYXNzTmFtZToiZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgcHktNCB0ZXh0LVsxMnB4XSB0ZXh0LXdoaXRlLzQ1IixjaGlsZHJlbjpxPyJEaXNjb25uZWN0ZWQiOiJObyBldmVudHMgeWV0In0pOksoImRpdiIse2NsYXNzTmFtZToiZmxleCBtYXgtaC1bMzIwcHhdIGZsZXgtY29sIGdhcC0xIG92ZXJmbG93LXktYXV0byBweS0wLjUgW3Njcm9sbGJhci13aWR0aDp0aGluXSIscm9sZToibGlzdCIsY2hpbGRyZW46Qi5tYXAoKE4pPT5LKEFRLHtldmVudDpOfSxOLmlkKSl9KX0pfWZ1bmN0aW9uIEFRKHtldmVudDokfSl7bGV0IEo9a1EoJC50aW1lc3RhbXApLFE9WyQuc291cmNlLCQua2luZCwkLmFjdGlvbl0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oIiAvICIpLFo9JC5tc2c/PyQuc3VtbWFyeSxYPSQuc3RhdHVzPT09ImVycm9yIj8iYm9yZGVyLVsjZmY0NTNhXS81MCBiZy1bI2ZmNDUzYV0vMTAgdGV4dC1bI2ZmYjNhZF0iOiJib3JkZXItd2hpdGUvOCBiZy13aGl0ZS9bMC4wNF0gdGV4dC13aGl0ZS81MCI7cmV0dXJuIEsoImRpdiIse3JvbGU6Imxpc3RpdGVtIix0aXRsZTpRLGNsYXNzTmFtZToiZ3JpZCBncmlkLWNvbHMtWzU2cHhfMWZyX2F1dG9dIGl0ZW1zLWNlbnRlciBnYXAtMiByb3VuZGVkLW1kIHB4LTEuNSBweS0xLjUgdGV4dC1bMTJweF0gbGVhZGluZy10aWdodCBob3ZlcjpiZy13aGl0ZS9bMC4wNV0iLGNoaWxkcmVuOltLKCJzcGFuIix7Y2xhc3NOYW1lOiJmb250LW1vbm8gdGV4dC1bMTBweF0gdGV4dC13aGl0ZS80NSIsY2hpbGRyZW46Sn0pLEsoInNwYW4iLHtjbGFzc05hbWU6Im1pbi13LTAiLGNoaWxkcmVuOltLKCJzcGFuIix7Y2xhc3NOYW1lOiJibG9jayBvdmVyZmxvdy1oaWRkZW4gdGV4dC1lbGxpcHNpcyB3aGl0ZXNwYWNlLW5vd3JhcCB0ZXh0LXdoaXRlLzkwIixjaGlsZHJlbjpafSksSygic3BhbiIse2NsYXNzTmFtZToibXQtMC41IGJsb2NrIG92ZXJmbG93LWhpZGRlbiB0ZXh0LWVsbGlwc2lzIHdoaXRlc3BhY2Utbm93cmFwIGZvbnQtbW9ubyB0ZXh0LVsxMHB4XSB0ZXh0LXdoaXRlLzQwIixjaGlsZHJlbjpRfSldfSksJC5zdGF0dXM/Sygic3BhbiIse2NsYXNzTmFtZTpgcm91bmRlZC1tZCBib3JkZXIgcHgtMS41IHB5LVszcHhdIHRleHQtWzEwcHhdIGZvbnQtbW9ubyAke1h9YCxjaGlsZHJlbjokLnN0YXR1c30pOm51bGxdfSl9ZnVuY3Rpb24ga1EoJCl7bGV0IEo9bmV3IERhdGUoJCk7aWYoTnVtYmVyLmlzTmFOKEouZ2V0VGltZSgpKSlyZXR1cm4iIjtyZXR1cm4gSi50b0xvY2FsZVRpbWVTdHJpbmcoW10se2hvdXI6IjItZGlnaXQiLG1pbnV0ZToiMi1kaWdpdCIsc2Vjb25kOiIyLWRpZ2l0In0pfXZhciBvMj1bImV4dHJhLXNtYWxsIiwic21hbGwiLCJtZWRpdW0iLCJsYXJnZSIsImV4dHJhLWxhcmdlIiwiZXh0cmEtZXh0cmEtbGFyZ2UiLCJleHRyYS1leHRyYS1leHRyYS1sYXJnZSJdLE9RPTI1MCxGUT17YXBwZWFyYW5jZToibGlnaHQiLCJsaXF1aWQtZ2xhc3MiOiJjbGVhciIsImNvbG9yLWZpbHRlciI6Im5vbmUiLCJ0ZXh0LXNpemUiOiJsYXJnZSIsInJlZHVjZS1tb3Rpb24iOiJvZmYiLCJpbmNyZWFzZS1jb250cmFzdCI6Im9mZiIsInNob3ctYm9yZGVycyI6Im9mZiIsInJlZHVjZS10cmFuc3BhcmVuY3kiOiJvZmYiLHZvaWNlb3Zlcjoib2ZmIn0sbjM9e2FwcGVhcmFuY2U6W3t2YWx1ZToibGlnaHQiLGxhYmVsOiJMaWdodCJ9LHt2YWx1ZToiZGFyayIsbGFiZWw6IkRhcmsifV0sImxpcXVpZC1nbGFzcyI6W3t2YWx1ZToiY2xlYXIiLGxhYmVsOiJDbGVhciJ9LHt2YWx1ZToidGludGVkIixsYWJlbDoiVGludGVkIn1dLCJjb2xvci1maWx0ZXIiOlt7dmFsdWU6Im5vbmUiLGxhYmVsOiJOb25lIn0se3ZhbHVlOiJyZWQtZ3JlZW4iLGxhYmVsOiJSZWQvR3JlZW4gKFByb3Rhbm9waWEpIn0se3ZhbHVlOiJncmVlbi1yZWQiLGxhYmVsOiJHcmVlbi9SZWQgKERldXRlcmFub3BpYSkifSx7dmFsdWU6ImJsdWUteWVsbG93IixsYWJlbDoiQmx1ZS9ZZWxsb3cgKFRyaXRhbm9waWEpIn0se3ZhbHVlOiJncmF5c2NhbGUiLGxhYmVsOiJHcmF5c2NhbGUifV19LE1RPVt7a2V5OiJyZWR1Y2UtbW90aW9uIixsYWJlbDoiUmVkdWNlIE1vdGlvbiJ9LHtrZXk6ImluY3JlYXNlLWNvbnRyYXN0IixsYWJlbDoiSW5jcmVhc2UgQ29udHJhc3QifSx7a2V5OiJzaG93LWJvcmRlcnMiLGxhYmVsOiJTaG93IEJvcmRlcnMifSx7a2V5OiJyZWR1Y2UtdHJhbnNwYXJlbmN5IixsYWJlbDoiUmVkdWNlIFRyYW5zcGFyZW5jeSJ9LHtrZXk6InZvaWNlb3ZlciIsbGFiZWw6IlZvaWNlT3ZlciJ9XTtmdW5jdGlvbiBZMCh7aWNvbjokLGxhYmVsOkosY2hpbGRyZW46UX0pe3JldHVybiBLKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiBnYXAtMiBtaW4taC1bMzBweF0iLCJkYXRhLXNldHRpbmctcm93IjpKLGNoaWxkcmVuOltLKCJzcGFuIix7Y2xhc3NOYW1lOiJmbGV4IHNocmluay0wIGl0ZW1zLWNlbnRlciBnYXAtMiB0ZXh0LVsxMnB4XSB0ZXh0LXdoaXRlLzkwIHdoaXRlc3BhY2Utbm93cmFwIixjaGlsZHJlbjpbSygic3BhbiIse2NsYXNzTmFtZToiZmxleCBzaXplLVsxOHB4XSBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgdGV4dC13aGl0ZSIsY2hpbGRyZW46JH0pLEpdfSksSygic3BhbiIse2NsYXNzTmFtZToiZmxleCBtaW4tdy0wIGp1c3RpZnktZW5kIixjaGlsZHJlbjpRfSldfSl9ZnVuY3Rpb24gV1Eoe3ZhbHVlOiQsZGlzYWJsZWQ6SixvbkNoYW5nZTpRfSl7bGV0W1osWF09VyhudWxsKSxZPUUobnVsbCkscT1FKG51bGwpLEc9RCgoSCk9PntpZihxLmN1cnJlbnQ9PT1IKXJldHVybjtxLmN1cnJlbnQ9SCxRKEgpfSxbUV0pLFY9RCgoSCk9PntpZihYKEgpLFkuY3VycmVudCljbGVhclRpbWVvdXQoWS5jdXJyZW50KTtZLmN1cnJlbnQ9c2V0VGltZW91dCgoKT0+RyhIKSxPUSl9LFtHXSksQj1EKCgpPT57aWYoWS5jdXJyZW50KWNsZWFyVGltZW91dChZLmN1cnJlbnQpLFkuY3VycmVudD1udWxsO1goKEgpPT57aWYoSCE9PW51bGwpRyhIKTtyZXR1cm4gbnVsbH0pLHEuY3VycmVudD1udWxsfSxbR10pLE49bzIubGVuZ3RoLTEsej1aPz8kLEw9YCR7ei9OKjEwMH0lYDtyZXR1cm4gSygic3BhbiIse2NsYXNzTmFtZToiZmxleCB3LVsxMjBweF0gbWluLXctMCBmbGV4LWNvbCIsY2hpbGRyZW46W0soImlucHV0Iix7dHlwZToicmFuZ2UiLCJhcmlhLWxhYmVsIjoiVGV4dCBTaXplIixtaW46MCxtYXg6TixzdGVwOjEsdmFsdWU6eixkaXNhYmxlZDpKLG9uQ2hhbmdlOihIKT0+VihOdW1iZXIoSC50YXJnZXQudmFsdWUpKSxvblBvaW50ZXJVcDpCLG9uS2V5VXA6QixvbkJsdXI6QixzdHlsZTp7Ii0tc2xpZGVyLWZpbGwiOkwsIi0tc2xpZGVyLWZpbGwtY29sb3IiOko/InJnYmEoMjU1LDI1NSwyNTUsMC4zKSI6IiMwYTg0ZmYifSxjbGFzc05hbWU6YGgtWzEzcHhdIHctZnVsbCBhcHBlYXJhbmNlLW5vbmUgcm91bmRlZC1mdWxsIGJnLXRyYW5zcGFyZW50IG91dGxpbmUtbm9uZSBmb2N1cy12aXNpYmxlOltvdXRsaW5lOjEuNXB4X3NvbGlkX3JnYmEoMTAsMTMyLDI1NSwwLjU1KV0gZm9jdXMtdmlzaWJsZTpvdXRsaW5lLW9mZnNldC00ICR7Sj8iY3Vyc29yLWRlZmF1bHQiOiJjdXJzb3ItcG9pbnRlciJ9ICR7IlsmOjotd2Via2l0LXNsaWRlci1ydW5uYWJsZS10cmFja106aC1bNHB4XSBbJjo6LXdlYmtpdC1zbGlkZXItcnVubmFibGUtdHJhY2tdOnJvdW5kZWQtZnVsbCBbJjo6LXdlYmtpdC1zbGlkZXItcnVubmFibGUtdHJhY2tdOltiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCh0b19yaWdodCx2YXIoLS1zbGlkZXItZmlsbC1jb2xvcilfdmFyKC0tc2xpZGVyLWZpbGwpLHJnYmEoMjU1LDI1NSwyNTUsMC4yMilfdmFyKC0tc2xpZGVyLWZpbGwpKV0gWyY6Oi1tb3otcmFuZ2UtdHJhY2tdOmgtWzRweF0gWyY6Oi1tb3otcmFuZ2UtdHJhY2tdOnJvdW5kZWQtZnVsbCBbJjo6LW1vei1yYW5nZS10cmFja106Ymctd2hpdGUvMjAgWyY6Oi1tb3otcmFuZ2UtcHJvZ3Jlc3NdOmgtWzRweF0gWyY6Oi1tb3otcmFuZ2UtcHJvZ3Jlc3NdOnJvdW5kZWQtZnVsbCBbJjo6LW1vei1yYW5nZS1wcm9ncmVzc106YmctW3ZhcigtLXNsaWRlci1maWxsLWNvbG9yKV0ifSAkeyJbJjo6LXdlYmtpdC1zbGlkZXItdGh1bWJdOmFwcGVhcmFuY2Utbm9uZSBbJjo6LXdlYmtpdC1zbGlkZXItdGh1bWJdOnNpemUtWzEzcHhdIFsmOjotd2Via2l0LXNsaWRlci10aHVtYl06cm91bmRlZC1mdWxsIFsmOjotd2Via2l0LXNsaWRlci10aHVtYl06Ymctd2hpdGUgWyY6ZGlzYWJsZWQ6Oi13ZWJraXQtc2xpZGVyLXRodW1iXTpiZy13aGl0ZS81MCBbJjo6LXdlYmtpdC1zbGlkZXItdGh1bWJdOnNoYWRvdy1bMF8xcHhfM3B4X3JnYmEoMCwwLDAsMC40NSldIFsmOjotd2Via2l0LXNsaWRlci10aHVtYl06LW10LVs0LjVweF0gWyY6Oi1tb3otcmFuZ2UtdGh1bWJdOnNpemUtWzEzcHhdIFsmOjotbW96LXJhbmdlLXRodW1iXTpyb3VuZGVkLWZ1bGwgWyY6Oi1tb3otcmFuZ2UtdGh1bWJdOmJvcmRlci1ub25lIFsmOjotbW96LXJhbmdlLXRodW1iXTpiZy13aGl0ZSBbJjpkaXNhYmxlZDo6LW1vei1yYW5nZS10aHVtYl06Ymctd2hpdGUvNTAifWB9KSxLKCJzcGFuIix7ImFyaWEtaGlkZGVuIjohMCxjbGFzc05hbWU6InBvaW50ZXItZXZlbnRzLW5vbmUgbXQtWzNweF0gZmxleCBqdXN0aWZ5LWJldHdlZW4gcHgtWzUuNXB4XSIsY2hpbGRyZW46bzIubWFwKChIKT0+Sygic3BhbiIse2NsYXNzTmFtZToic2l6ZS1bMnB4XSByb3VuZGVkLWZ1bGwgYmctd2hpdGUvNDAifSxIKSl9KV19KX1mdW5jdGlvbiBVMCh7bGFiZWw6JCx2YWx1ZTpKLG9wdGlvbnM6USxkaXNhYmxlZDpaLG9uQ2hhbmdlOlh9KXtyZXR1cm4gSyhmNSx7bGFiZWw6JCx2YWx1ZTpKLG9wdGlvbnM6USxkaXNhYmxlZDpaLG9uQ2hhbmdlOlgsY2xhc3NOYW1lOiJiZy13aGl0ZS9bMC4wNl0gYm9yZGVyIGJvcmRlci13aGl0ZS8xMCByb3VuZGVkLW1kIHRleHQtd2hpdGUvOTAgdGV4dC1bMTJweF0gcHktMC41IHB4LTIgbWluLXctMCBtYXgtdy1bMTUwcHhdIGRpc2FibGVkOnRleHQtd2hpdGUvNDAifSl9dmFyIGMyPXthcHBlYXJhbmNlOksoInN2ZyIse3dpZHRoOiIxNCIsaGVpZ2h0OiIxNCIsdmlld0JveDoiMCAwIDI0IDI0IixmaWxsOiJub25lIixzdHJva2U6ImN1cnJlbnRDb2xvciIsc3Ryb2tlV2lkdGg6IjIiLHN0cm9rZUxpbmVjYXA6InJvdW5kIixzdHJva2VMaW5lam9pbjoicm91bmQiLGNoaWxkcmVuOltLKCJwYXRoIix7ZDoiTTEyIDJ2MiJ9KSxLKCJwYXRoIix7ZDoiTTE0LjgzNyAxNi4zODVhNiA2IDAgMSAxLTcuMjIzLTcuMjIyYy42MjQtLjE0Ny45Ny42Ni43MTUgMS4yNDhhNCA0IDAgMCAwIDUuMjYgNS4yNTljLjU4OS0uMjU1IDEuMzk2LjA5IDEuMjQ4LjcxNSJ9KSxLKCJwYXRoIix7ZDoiTTE2IDEyYTQgNCAwIDAgMC00LTQifSksSygicGF0aCIse2Q6Im0xOSA1LTEuMjU2IDEuMjU2In0pLEsoInBhdGgiLHtkOiJNMjAgMTJoMiJ9KV19KSxnbGFzczpLKCJzdmciLHt3aWR0aDoiMTQiLGhlaWdodDoiMTQiLHZpZXdCb3g6IjAgMCAyMjAgMjIwIixmaWxsOiJjdXJyZW50Q29sb3IiLHN0cm9rZToibm9uZSIsY2hpbGRyZW46W0soInBhdGgiLHtkOiJNMTUyIDE4M1YxOTVIMTAwVjE4M0gxNTJaTTE5NiAxMzlWMTI2QzE5NiAxMDEuNjk5IDE3Ni4zMDEgODIgMTUyIDgySDEwMEM3NS42OTk1IDgyIDU2IDEwMS42OTkgNTYgMTI2VjEzOUM1NiAxNjMuMzAxIDc1LjY5OTUgMTgzIDEwMCAxODNWMTk1TDk5LjI3NjQgMTk0Ljk5NUM2OC45MjI4IDE5NC42MTEgNDQuMzg5MyAxNzAuMDc3IDQ0LjAwNDkgMTM5LjcyNEw0NCAxMzlWMTI2QzQ0IDk1LjA3MjEgNjkuMDcyMSA3MCAxMDAgNzBIMTUyQzE4Mi45MjggNzAgMjA4IDk1LjA3MjEgMjA4IDEyNlYxMzlMMjA3Ljk5NSAxMzkuNzI0QzIwNy42MTEgMTcwLjA3NyAxODMuMDc3IDE5NC42MTEgMTUyLjcyNCAxOTQuOTk1TDE1MiAxOTVWMTgzQzE3Ni4zMDEgMTgzIDE5NiAxNjMuMzAxIDE5NiAxMzlaIn0pLEsoInBhdGgiLHtkOiJNMTM2IDI1QzE0Ny4wNDYgMjUgMTU2IDMzLjk1NDMgMTU2IDQ1VjcwSDE0M1Y0NUMxNDMgNDEuMTM0IDEzOS44NjYgMzggMTM2IDM4SDQxQzM3LjEzNCAzOCAzNCA0MS4xMzQgMzQgNDVWMTQwQzM0IDE0My44NjYgMzcuMTM0IDE0NyA0MSAxNDdINDQuODYwNEM0NS42NDg3IDE1MS41MzYgNDYuOTYzNCAxNTUuODkxIDQ4Ljc0MDIgMTYwSDQxTDQwLjQ4MzQgMTU5Ljk5M0MyOS44NDgxIDE1OS43MjQgMjEuMjc2NSAxNTEuMTUyIDIxLjAwNjggMTQwLjUxN0wyMSAxNDBWNDVDMjEgMzMuOTU0MyAyOS45NTQzIDI1IDQxIDI1SDEzNloifSksSygicGF0aCIse2Q6Ik0xNTYuMTk5IDE0MEMxNTYuMTk5IDE1MC44NzMgMTQ3LjUyMyAxNTkuNzE5IDEzNi43MTYgMTU5Ljk5M0wxMzYuMTk5IDE2MEg4MC45MTdDNzcuOTQ2MSAxNjAgNzYuMTYzOSAxNjMuMyA3Ny43OTMgMTY1Ljc4NEM3OS4yNDUxIDE2Ny45OTkgNzYuMTY0NyAxNzAuMzUzIDc0LjQwOTQgMTY4LjM3TDczLjYwNTkgMTY3LjQ2MkM2OS4zNDk3IDE2Mi42NTQgNjcgMTU2LjQ1NSA2NyAxNTAuMDM0QzY3IDE0OC4zNTggNjguMzU4MyAxNDcgNzAuMDMzOSAxNDdIMTM2LjE5OUMxNDAuMDY1IDE0NyAxNDMuMTk5IDE0My44NjYgMTQzLjE5OSAxNDBWOTYuOTk1NUMxNDMuMTk5IDkzLjk4MjIgMTQxLjM1NCA5MS4yNzYzIDEzOC41NDkgOTAuMTc2MUMxMzcuMzg5IDg5LjcyMTUgMTM3LjcxNSA4OCAxMzguOTYgODhMMTQzLjE5OSA4OEMxNTAuMzc5IDg4IDE1Ni4xOTkgOTMuODIwMyAxNTYuMTk5IDEwMVYxNDBaIn0pXX0pLGZpbHRlcjpLKCJzdmciLHt3aWR0aDoiMTQiLGhlaWdodDoiMTQiLHZpZXdCb3g6IjAgMCAyNCAyNCIsZmlsbDoibm9uZSIsc3Ryb2tlOiJjdXJyZW50Q29sb3IiLHN0cm9rZVdpZHRoOiIyIixzdHJva2VMaW5lY2FwOiJyb3VuZCIsc3Ryb2tlTGluZWpvaW46InJvdW5kIixjaGlsZHJlbjpbSygicGF0aCIse2Q6Ik0xMSAxN2E0IDQgMCAwIDEtOCAwVjVhMiAyIDAgMCAxIDItMmg0YTIgMiAwIDAgMSAyIDJaIn0pLEsoInBhdGgiLHtkOiJNMTYuNyAxM0gxOWEyIDIgMCAwIDEgMiAydjRhMiAyIDAgMCAxLTIgMkg3In0pLEsoInBhdGgiLHtkOiJNIDcgMTdoLjAxIn0pLEsoInBhdGgiLHtkOiJtMTEgOCAyLjMtMi4zYTIuNCAyLjQgMCAwIDEgMy40MDQuMDA0TDE4LjYgNy42YTIuNCAyLjQgMCAwIDEgLjAyNiAzLjQzNEw5LjkgMTkuOCJ9KV19KSx0ZXh0U2l6ZTpLKCJzdmciLHt3aWR0aDoiMTQiLGhlaWdodDoiMTQiLHZpZXdCb3g6IjAgMCA1MiAzNCIsZmlsbDoiY3VycmVudENvbG9yIixzdHJva2U6Im5vbmUiLGNoaWxkcmVuOksoInBhdGgiLHtkOiJNMzkuNzI2NiAzMy4wMjM0QzM4LjE0ODQgMzMuMDIzNCAzNi43NSAzMi43MjY2IDM1LjUzMTIgMzIuMTMyOEMzNC4zMTI1IDMxLjUzOTEgMzMuMzU5NCAzMC43MTA5IDMyLjY3MTkgMjkuNjQ4NEMzMiAyOC41NzAzIDMxLjY2NDEgMjcuMzEyNSAzMS42NjQxIDI1Ljg3NUMzMS42NjQxIDIzLjc4MTIgMzIuNDI5NyAyMi4xMDk0IDMzLjk2MDkgMjAuODU5NEMzNS41MDc4IDE5LjYwOTQgMzcuNzEwOSAxOC45MDYyIDQwLjU3MDMgMTguNzVMNDcuNjAxNiAxOC4zNTE2VjE2LjVDNDcuNjAxNiAxNS4wMTU2IDQ3LjEzMjggMTMuODM1OSA0Ni4xOTUzIDEyLjk2MDlDNDUuMjU3OCAxMi4wODU5IDQzLjk1MzEgMTEuNjQ4NCA0Mi4yODEyIDExLjY0ODRDNDAuOTA2MiAxMS42NDg0IDM5Ljc1IDExLjk0NTMgMzguODEyNSAxMi41MzkxQzM3Ljg3NSAxMy4xMzI4IDM3LjA5MzggMTQuMDQ2OSAzNi40Njg4IDE1LjI4MTJDMzYuMjY1NiAxNS42MDk0IDM2LjAxNTYgMTUuODUxNiAzNS43MTg4IDE2LjAwNzhDMzUuNDIxOSAxNi4xNjQxIDM1LjA3ODEgMTYuMjQyMiAzNC42ODc1IDE2LjI0MjJDMzQuMTU2MiAxNi4yNDIyIDMzLjcxMDkgMTYuMDc4MSAzMy4zNTE2IDE1Ljc1QzMzLjAwNzggMTUuNDIxOSAzMi44MzU5IDE0Ljk5MjIgMzIuODM1OSAxNC40NjA5QzMyLjgzNTkgMTQuMjI2NiAzMi44NjcyIDEzLjk3NjYgMzIuOTI5NyAxMy43MTA5QzMzLjAwNzggMTMuNDQ1MyAzMy4xMDk0IDEzLjE3OTcgMzMuMjM0NCAxMi45MTQxQzMzLjg3NSAxMS40NjA5IDM1LjAxNTYgMTAuMzA0NyAzNi42NTYyIDkuNDQ1MzFDMzguMzEyNSA4LjU4NTk0IDQwLjIyNjYgOC4xNTYyNSA0Mi4zOTg0IDguMTU2MjVDNDQuMzIwMyA4LjE1NjI1IDQ1Ljk4NDQgOC40OTIxOSA0Ny4zOTA2IDkuMTY0MDZDNDguODEyNSA5LjgyMDMxIDQ5Ljg5ODQgMTAuNzUgNTAuNjQ4NCAxMS45NTMxQzUxLjQxNDEgMTMuMTU2MiA1MS43OTY5IDE0LjU3MDMgNTEuNzk2OSAxNi4xOTUzVjMwLjkxNDFDNTEuNzk2OSAzMS41ODU5IDUxLjYwOTQgMzIuMTA5NCA1MS4yMzQ0IDMyLjQ4NDRDNTAuODU5NCAzMi44NTk0IDUwLjM2NzIgMzMuMDQ2OSA0OS43NTc4IDMzLjA0NjlDNDkuMTY0MSAzMy4wNDY5IDQ4LjY3OTcgMzIuODY3MiA0OC4zMDQ3IDMyLjUwNzhDNDcuOTI5NyAzMi4xNDg0IDQ3LjczNDQgMzEuNjY0MSA0Ny43MTg4IDMxLjA1NDdWMjguMzU5NEg0Ny42NzE5QzQ2Ljk4NDQgMjkuNzgxMiA0NS45MDYyIDMwLjkxNDEgNDQuNDM3NSAzMS43NTc4QzQyLjk4NDQgMzIuNjAxNiA0MS40MTQxIDMzLjAyMzQgMzkuNzI2NiAzMy4wMjM0Wk00MC44MDQ3IDI5LjY3MTlDNDIuMDcwMyAyOS42NzE5IDQzLjIxMDkgMjkuNDA2MiA0NC4yMjY2IDI4Ljg3NUM0NS4yNTc4IDI4LjM0MzggNDYuMDc4MSAyNy42MTcyIDQ2LjY4NzUgMjYuNjk1M0M0Ny4yOTY5IDI1Ljc3MzQgNDcuNjAxNiAyNC43NSA0Ny42MDE2IDIzLjYyNVYyMS4zMjgxTDQxLjEzMjggMjEuNzVDMzkuNDQ1MyAyMS44NTk0IDM4LjE2NDEgMjIuMjczNCAzNy4yODkxIDIyLjk5MjJDMzYuNDE0MSAyMy42OTUzIDM1Ljk3NjYgMjQuNjA5NCAzNS45NzY2IDI1LjczNDRDMzUuOTc2NiAyNi45MjE5IDM2LjQyMTkgMjcuODc1IDM3LjMxMjUgMjguNTkzOEMzOC4yMDMxIDI5LjMxMjUgMzkuMzY3MiAyOS42NzE5IDQwLjgwNDcgMjkuNjcxOVpNMi4xNzk2OSAzMy4wMjM0QzEuNTA3ODEgMzMuMDIzNCAwLjk3NjU2MiAzMi44MzU5IDAuNTg1OTM4IDMyLjQ2MDlDMC4xOTUzMTIgMzIuMDg1OSAwIDMxLjU3ODEgMCAzMC45Mzc1QzAgMzAuNTMxMiAwLjA4NTkzNzUgMzAuMDcwMyAwLjI1NzgxMiAyOS41NTQ3TDEwLjQwNjIgMi40MTQwNkMxMC45ODQ0IDAuODA0Njg4IDEyLjEwMTYgMCAxMy43NTc4IDBDMTQuNjE3MiAwIDE1LjMyODEgMC4yMDMxMjUgMTUuODkwNiAwLjYwOTM3NUMxNi40NTMxIDEuMDE1NjIgMTYuODc1IDEuNjI1IDE3LjE1NjIgMi40Mzc1TDI3LjI1NzggMjkuNDg0NEMyNy40NDUzIDMwIDI3LjUzOTEgMzAuNDY4OCAyNy41MzkxIDMwLjg5MDZDMjcuNTM5MSAzMS41NDY5IDI3LjMzNTkgMzIuMDcwMyAyNi45Mjk3IDMyLjQ2MDlDMjYuNTIzNCAzMi44MzU5IDI1Ljk3NjYgMzMuMDIzNCAyNS4yODkxIDMzLjAyMzRDMjQuNjMyOCAzMy4wMjM0IDI0LjEwOTQgMzIuODc1IDIzLjcxODggMzIuNTc4MUMyMy4zNDM4IDMyLjI4MTIgMjMuMDM5MSAzMS43ODkxIDIyLjgwNDcgMzEuMTAxNkwxMy44MjgxIDUuMzQzNzVIMTMuNjY0MUw0LjY2NDA2IDMxLjEwMTZDNC40Mjk2OSAzMS43ODkxIDQuMTI1IDMyLjI4MTIgMy43NSAzMi41NzgxQzMuMzc1IDMyLjg3NSAyLjg1MTU2IDMzLjAyMzQgMi4xNzk2OSAzMy4wMjM0Wk02LjY3OTY5IDIzLjc0MjJDNi4xNDg0NCAyMy43NDIyIDUuNzAzMTIgMjMuNTYyNSA1LjM0Mzc1IDIzLjIwMzFDNC45ODQzOCAyMi44NDM4IDQuODA0NjkgMjIuMzk4NCA0LjgwNDY5IDIxLjg2NzJDNC44MDQ2OSAyMS4zNTE2IDQuOTg0MzggMjAuOTE0MSA1LjM0Mzc1IDIwLjU1NDdDNS43MDMxMiAyMC4xOTUzIDYuMTQ4NDQgMjAuMDE1NiA2LjY3OTY5IDIwLjAxNTZIMjAuODU5NEMyMS4zNzUgMjAuMDE1NiAyMS44MTI1IDIwLjE5NTMgMjIuMTcxOSAyMC41NTQ3QzIyLjUzMTIgMjAuOTE0MSAyMi43MTA5IDIxLjM1MTYgMjIuNzEwOSAyMS44NjcyQzIyLjcxMDkgMjIuMzk4NCAyMi41MzEyIDIyLjg0MzggMjIuMTcxOSAyMy4yMDMxQzIxLjgxMjUgMjMuNTYyNSAyMS4zNzUgMjMuNzQyMiAyMC44NTk0IDIzLjc0MjJINi42Nzk2OVoifSl9KSxtb3Rpb246Sygic3ZnIix7d2lkdGg6IjE0IixoZWlnaHQ6IjE0Iix2aWV3Qm94OiIwIDAgMjQgMjQiLGZpbGw6Im5vbmUiLHN0cm9rZToiY3VycmVudENvbG9yIixzdHJva2VXaWR0aDoiMiIsc3Ryb2tlTGluZWNhcDoicm91bmQiLGNoaWxkcmVuOltLKCJjaXJjbGUiLHtjeDoiMTQiLGN5OiIxMiIscjoiNiJ9KSxLKCJwYXRoIix7ZDoiTTMgOGg0TTIgMTJoNE0zIDE2aDQifSldfSksY29udHJhc3Q6Sygic3ZnIix7d2lkdGg6IjE0IixoZWlnaHQ6IjE0Iix2aWV3Qm94OiIwIDAgMjQgMjQiLGZpbGw6Im5vbmUiLHN0cm9rZToiY3VycmVudENvbG9yIixzdHJva2VXaWR0aDoiMiIsc3Ryb2tlTGluZWNhcDoicm91bmQiLHN0cm9rZUxpbmVqb2luOiJyb3VuZCIsY2hpbGRyZW46W0soImNpcmNsZSIse2N4OiIxMiIsY3k6IjEyIixyOiIxMCJ9KSxLKCJwYXRoIix7ZDoiTTEyIDE4YTYgNiAwIDAgMCAwLTEydjEyeiJ9KV19KSxib3JkZXJzOksoInN2ZyIse3dpZHRoOiIxNCIsaGVpZ2h0OiIxNCIsdmlld0JveDoiMCAwIDI0IDI0IixmaWxsOiJub25lIixzdHJva2U6ImN1cnJlbnRDb2xvciIsc3Ryb2tlV2lkdGg6IjIiLHN0cm9rZUxpbmVjYXA6InJvdW5kIixzdHJva2VMaW5lam9pbjoicm91bmQiLGNoaWxkcmVuOltLKCJwYXRoIix7ZDoiTTUgMjFhMiAyIDAgMCAxLTItMlY1YTIgMiAwIDAgMSAyLTJoMTRhMiAyIDAgMCAxIDIgMnYxNGEyIDIgMCAwIDEtMiAyIn0pLEsoInBhdGgiLHtkOiJNOSAyMWgxIn0pLEsoInBhdGgiLHtkOiJNMTQgMjFoMSJ9KV19KSx0cmFuc3BhcmVuY3k6Sygic3ZnIix7d2lkdGg6IjE0IixoZWlnaHQ6IjE0Iix2aWV3Qm94OiIwIDAgNjMgNDYiLGZpbGw6ImN1cnJlbnRDb2xvciIsc3Ryb2tlOiJub25lIixjaGlsZHJlbjpLKCJwYXRoIix7ZDoiTTIyLjczNDQgNC4xNzE4OEMyMi4xODc1IDQuMTcxODggMjEuNzE4OCAzLjk3NjU2IDIxLjMyODEgMy41ODU5NEMyMC45Mzc1IDMuMTk1MzEgMjAuNzQyMiAyLjcxODc1IDIwLjc0MjIgMi4xNTYyNUMyMC43NDIyIDEuNjA5MzggMjAuOTM3NSAxLjE0MDYyIDIxLjMyODEgMC43NUMyMS43MTg4IDAuMzU5Mzc1IDIyLjE4NzUgMC4xNjQwNjIgMjIuNzM0NCAwLjE2NDA2MkMyMy4yODEyIDAuMTY0MDYyIDIzLjc1IDAuMzU5Mzc1IDI0LjE0MDYgMC43NUMyNC41MzEyIDEuMTQwNjIgMjQuNzI2NiAxLjYwOTM4IDI0LjcyNjYgMi4xNTYyNUMyNC43MjY2IDIuNzE4NzUgMjQuNTMxMiAzLjE5NTMxIDI0LjE0MDYgMy41ODU5NEMyMy43NSAzLjk3NjU2IDIzLjI4MTIgNC4xNzE4OCAyMi43MzQ0IDQuMTcxODhaTTI5LjEwOTQgNS4yMDMxMkMyOC41NDY5IDUuMjAzMTIgMjguMDcwMyA1LjAwNzgxIDI3LjY3OTcgNC42MTcxOUMyNy4yODkxIDQuMjI2NTYgMjcuMDkzOCAzLjc1NzgxIDI3LjA5MzggMy4yMTA5NEMyNy4wOTM4IDIuNjY0MDYgMjcuMjg5MSAyLjE5NTMxIDI3LjY3OTcgMS44MDQ2OUMyOC4wNzAzIDEuMzk4NDQgMjguNTQ2OSAxLjE5NTMxIDI5LjEwOTQgMS4xOTUzMUMyOS42NTYyIDEuMTk1MzEgMzAuMTI1IDEuMzk4NDQgMzAuNTE1NiAxLjgwNDY5QzMwLjkwNjIgMi4xOTUzMSAzMS4xMDE2IDIuNjY0MDYgMzEuMTAxNiAzLjIxMDk0QzMxLjEwMTYgMy43NTc4MSAzMC45MDYyIDQuMjI2NTYgMzAuNTE1NiA0LjYxNzE5QzMwLjEyNSA1LjAwNzgxIDI5LjY1NjIgNS4yMDMxMiAyOS4xMDk0IDUuMjAzMTJaTTM0Ljg3NSA4LjEzMjgxQzM0LjMyODEgOC4xMzI4MSAzMy44NTE2IDcuOTM3NSAzMy40NDUzIDcuNTQ2ODhDMzMuMDU0NyA3LjE0MDYyIDMyLjg1OTQgNi42NzE4OCAzMi44NTk0IDYuMTQwNjJDMzIuODU5NCA1LjU3ODEyIDMzLjA1NDcgNS4xMDE1NiAzMy40NDUzIDQuNzEwOTRDMzMuODUxNiA0LjMyMDMxIDM0LjMyODEgNC4xMjUgMzQuODc1IDQuMTI1QzM1LjQyMTkgNC4xMjUgMzUuODkwNiA0LjMyMDMxIDM2LjI4MTIgNC43MTA5NEMzNi42ODc1IDUuMTAxNTYgMzYuODkwNiA1LjU3ODEyIDM2Ljg5MDYgNi4xNDA2MkMzNi44OTA2IDYuNjcxODggMzYuNjg3NSA3LjE0MDYyIDM2LjI4MTIgNy41NDY4OEMzNS44OTA2IDcuOTM3NSAzNS40MjE5IDguMTMyODEgMzQuODc1IDguMTMyODFaTTM5LjQ0NTMgMTIuNjc5N0MzOC44OTg0IDEyLjY3OTcgMzguNDIxOSAxMi40ODQ0IDM4LjAxNTYgMTIuMDkzOEMzNy42MjUgMTEuNzAzMSAzNy40Mjk3IDExLjIzNDQgMzcuNDI5NyAxMC42ODc1QzM3LjQyOTcgMTAuMTU2MiAzNy42MjUgOS42OTUzMSAzOC4wMTU2IDkuMzA0NjlDMzguNDIxOSA4Ljg5ODQ0IDM4Ljg5ODQgOC42OTUzMSAzOS40NDUzIDguNjk1MzFDMzkuOTkyMiA4LjY5NTMxIDQwLjQ2MDkgOC44OTg0NCA0MC44NTE2IDkuMzA0NjlDNDEuMjQyMiA5LjY5NTMxIDQxLjQzNzUgMTAuMTU2MiA0MS40Mzc1IDEwLjY4NzVDNDEuNDM3NSAxMS4yMzQ0IDQxLjI0MjIgMTEuNzAzMSA0MC44NTE2IDEyLjA5MzhDNDAuNDYwOSAxMi40ODQ0IDM5Ljk5MjIgMTIuNjc5NyAzOS40NDUzIDEyLjY3OTdaTTQyLjM3NSAxOC4zOTg0QzQxLjgxMjUgMTguMzk4NCA0MS4zMjgxIDE4LjIwMzEgNDAuOTIxOSAxNy44MTI1QzQwLjUzMTIgMTcuNDIxOSA0MC4zMzU5IDE2Ljk1MzEgNDAuMzM1OSAxNi40MDYyQzQwLjMzNTkgMTUuODQzOCA0MC41MzEyIDE1LjM2NzIgNDAuOTIxOSAxNC45NzY2QzQxLjMyODEgMTQuNTg1OSA0MS44MTI1IDE0LjM5MDYgNDIuMzc1IDE0LjM5MDZDNDIuOTA2MiAxNC4zOTA2IDQzLjM2NzIgMTQuNTg1OSA0My43NTc4IDE0Ljk3NjZDNDQuMTY0MSAxNS4zNjcyIDQ0LjM2NzIgMTUuODQzOCA0NC4zNjcyIDE2LjQwNjJDNDQuMzY3MiAxNi45NTMxIDQ0LjE2NDEgMTcuNDIxOSA0My43NTc4IDE3LjgxMjVDNDMuMzY3MiAxOC4yMDMxIDQyLjkwNjIgMTguMzk4NCA0Mi4zNzUgMTguMzk4NFpNNDMuNDUzMSAyNC43OTY5QzQyLjkwNjIgMjQuNzk2OSA0Mi40Mzc1IDI0LjYwMTYgNDIuMDQ2OSAyNC4yMTA5QzQxLjY1NjIgMjMuODIwMyA0MS40NjA5IDIzLjM0MzggNDEuNDYwOSAyMi43ODEyQzQxLjQ2MDkgMjIuMjM0NCA0MS42NTYyIDIxLjc2NTYgNDIuMDQ2OSAyMS4zNzVDNDIuNDM3NSAyMC45ODQ0IDQyLjkwNjIgMjAuNzg5MSA0My40NTMxIDIwLjc4OTFDNDQgMjAuNzg5MSA0NC40Njg4IDIwLjk4NDQgNDQuODU5NCAyMS4zNzVDNDUuMjY1NiAyMS43NjU2IDQ1LjQ2ODggMjIuMjM0NCA0NS40Njg4IDIyLjc4MTJDNDUuNDY4OCAyMy4zNDM4IDQ1LjI2NTYgMjMuODIwMyA0NC44NTk0IDI0LjIxMDlDNDQuNDY4OCAyNC42MDE2IDQ0IDI0Ljc5NjkgNDMuNDUzMSAyNC43OTY5Wk00Mi4zNzUgMzEuMTcxOUM0MS44MTI1IDMxLjE3MTkgNDEuMzI4MSAzMC45NzY2IDQwLjkyMTkgMzAuNTg1OUM0MC41MzEyIDMwLjE5NTMgNDAuMzM1OSAyOS43MjY2IDQwLjMzNTkgMjkuMTc5N0M0MC4zMzU5IDI4LjYxNzIgNDAuNTMxMiAyOC4xNDA2IDQwLjkyMTkgMjcuNzVDNDEuMzI4MSAyNy4zNTk0IDQxLjgxMjUgMjcuMTY0MSA0Mi4zNzUgMjcuMTY0MUM0Mi45MDYyIDI3LjE2NDEgNDMuMzY3MiAyNy4zNTk0IDQzLjc1NzggMjcuNzVDNDQuMTY0MSAyOC4xNDA2IDQ0LjM2NzIgMjguNjE3MiA0NC4zNjcyIDI5LjE3OTdDNDQuMzY3MiAyOS43MjY2IDQ0LjE2NDEgMzAuMTk1MyA0My43NTc4IDMwLjU4NTlDNDMuMzY3MiAzMC45NzY2IDQyLjkwNjIgMzEuMTcxOSA0Mi4zNzUgMzEuMTcxOVpNMzkuNDQ1MyAzNi44OTA2QzM4Ljg5ODQgMzYuODkwNiAzOC40MjE5IDM2LjY5NTMgMzguMDE1NiAzNi4zMDQ3QzM3LjYyNSAzNS44OTg0IDM3LjQyOTcgMzUuNDIxOSAzNy40Mjk3IDM0Ljg3NUMzNy40Mjk3IDM0LjMyODEgMzcuNjI1IDMzLjg1OTQgMzguMDE1NiAzMy40Njg4QzM4LjQyMTkgMzMuMDYyNSAzOC44OTg0IDMyLjg1OTQgMzkuNDQ1MyAzMi44NTk0QzM5Ljk5MjIgMzIuODU5NCA0MC40NjA5IDMzLjA2MjUgNDAuODUxNiAzMy40Njg4QzQxLjI0MjIgMzMuODU5NCA0MS40Mzc1IDM0LjMyODEgNDEuNDM3NSAzNC44NzVDNDEuNDM3NSAzNS40MjE5IDQxLjI0MjIgMzUuODk4NCA0MC44NTE2IDM2LjMwNDdDNDAuNDYwOSAzNi42OTUzIDM5Ljk5MjIgMzYuODkwNiAzOS40NDUzIDM2Ljg5MDZaTTM0Ljg3NSA0MS40Mzc1QzM0LjMyODEgNDEuNDM3NSAzMy44NTE2IDQxLjI0MjIgMzMuNDQ1MyA0MC44NTE2QzMzLjA1NDcgNDAuNDYwOSAzMi44NTk0IDM5Ljk5MjIgMzIuODU5NCAzOS40NDUzQzMyLjg1OTQgMzguODk4NCAzMy4wNTQ3IDM4LjQyOTcgMzMuNDQ1MyAzOC4wMzkxQzMzLjg1MTYgMzcuNjMyOCAzNC4zMjgxIDM3LjQyOTcgMzQuODc1IDM3LjQyOTdDMzUuNDIxOSAzNy40Mjk3IDM1Ljg5MDYgMzcuNjMyOCAzNi4yODEyIDM4LjAzOTFDMzYuNjg3NSAzOC40Mjk3IDM2Ljg5MDYgMzguODk4NCAzNi44OTA2IDM5LjQ0NTNDMzYuODkwNiAzOS45OTIyIDM2LjY4NzUgNDAuNDYwOSAzNi4yODEyIDQwLjg1MTZDMzUuODkwNiA0MS4yNDIyIDM1LjQyMTkgNDEuNDM3NSAzNC44NzUgNDEuNDM3NVpNMjkuMTA5NCA0NC4zNjcyQzI4LjU0NjkgNDQuMzY3MiAyOC4wNzAzIDQ0LjE2NDEgMjcuNjc5NyA0My43NTc4QzI3LjI4OTEgNDMuMzY3MiAyNy4wOTM4IDQyLjg5ODQgMjcuMDkzOCA0Mi4zNTE2QzI3LjA5MzggNDEuODA0NyAyNy4yODkxIDQxLjMzNTkgMjcuNjc5NyA0MC45NDUzQzI4LjA3MDMgNDAuNTU0NyAyOC41NDY5IDQwLjM1OTQgMjkuMTA5NCA0MC4zNTk0QzI5LjY1NjIgNDAuMzU5NCAzMC4xMjUgNDAuNTU0NyAzMC41MTU2IDQwLjk0NTNDMzAuOTA2MiA0MS4zMzU5IDMxLjEwMTYgNDEuODA0NyAzMS4xMDE2IDQyLjM1MTZDMzEuMTAxNiA0Mi44OTg0IDMwLjkwNjIgNDMuMzY3MiAzMC41MTU2IDQzLjc1NzhDMzAuMTI1IDQ0LjE2NDEgMjkuNjU2MiA0NC4zNjcyIDI5LjEwOTQgNDQuMzY3MlpNMjIuNzM0NCA0NS4zOTg0QzIyLjE4NzUgNDUuMzk4NCAyMS43MTg4IDQ1LjIwMzEgMjEuMzI4MSA0NC44MTI1QzIwLjkzNzUgNDQuNDIxOSAyMC43NDIyIDQzLjk1MzEgMjAuNzQyMiA0My40MDYyQzIwLjc0MjIgNDIuODQzOCAyMC45Mzc1IDQyLjM2NzIgMjEuMzI4MSA0MS45NzY2QzIxLjcxODggNDEuNTg1OSAyMi4xODc1IDQxLjM5MDYgMjIuNzM0NCA0MS4zOTA2QzIzLjI4MTIgNDEuMzkwNiAyMy43NSA0MS41ODU5IDI0LjE0MDYgNDEuOTc2NkMyNC41MzEyIDQyLjM2NzIgMjQuNzI2NiA0Mi44NDM4IDI0LjcyNjYgNDMuNDA2MkMyNC43MjY2IDQzLjk1MzEgMjQuNTMxMiA0NC40MjE5IDI0LjE0MDYgNDQuODEyNUMyMy43NSA0NS4yMDMxIDIzLjI4MTIgNDUuMzk4NCAyMi43MzQ0IDQ1LjM5ODRaTTE2LjM1OTQgNDQuMzY3MkMxNS44MTI1IDQ0LjM2NzIgMTUuMzQzOCA0NC4xNjQxIDE0Ljk1MzEgNDMuNzU3OEMxNC41NjI1IDQzLjM2NzIgMTQuMzY3MiA0Mi44OTg0IDE0LjM2NzIgNDIuMzUxNkMxNC4zNjcyIDQxLjgwNDcgMTQuNTYyNSA0MS4zMzU5IDE0Ljk1MzEgNDAuOTQ1M0MxNS4zNDM4IDQwLjU1NDcgMTUuODEyNSA0MC4zNTk0IDE2LjM1OTQgNDAuMzU5NEMxNi45MjE5IDQwLjM1OTQgMTcuMzk4NCA0MC41NTQ3IDE3Ljc4OTEgNDAuOTQ1M0MxOC4xNzk3IDQxLjMzNTkgMTguMzc1IDQxLjgwNDcgMTguMzc1IDQyLjM1MTZDMTguMzc1IDQyLjg5ODQgMTguMTc5NyA0My4zNjcyIDE3Ljc4OTEgNDMuNzU3OEMxNy4zOTg0IDQ0LjE2NDEgMTYuOTIxOSA0NC4zNjcyIDE2LjM1OTQgNDQuMzY3MlpNMTAuNTcwMyA0MS40Mzc1QzEwLjAzOTEgNDEuNDM3NSA5LjU3MDMxIDQxLjI0MjIgOS4xNjQwNiA0MC44NTE2QzguNzczNDQgNDAuNDYwOSA4LjU3ODEyIDM5Ljk5MjIgOC41NzgxMiAzOS40NDUzQzguNTc4MTIgMzguODk4NCA4Ljc3MzQ0IDM4LjQyOTcgOS4xNjQwNiAzOC4wMzkxQzkuNTcwMzEgMzcuNjMyOCAxMC4wMzkxIDM3LjQyOTcgMTAuNTcwMyAzNy40Mjk3QzExLjEzMjggMzcuNDI5NyAxMS42MDk0IDM3LjYzMjggMTIgMzguMDM5MUMxMi4zOTA2IDM4LjQyOTcgMTIuNTg1OSAzOC44OTg0IDEyLjU4NTkgMzkuNDQ1M0MxMi41ODU5IDM5Ljk5MjIgMTIuMzkwNiA0MC40NjA5IDEyIDQwLjg1MTZDMTEuNjA5NCA0MS4yNDIyIDExLjEzMjggNDEuNDM3NSAxMC41NzAzIDQxLjQzNzVaTTYuMDIzNDQgMzYuODkwNkM1LjQ3NjU2IDM2Ljg5MDYgNSAzNi42OTUzIDQuNTkzNzUgMzYuMzA0N0M0LjIwMzEyIDM1Ljg5ODQgNC4wMDc4MSAzNS40MjE5IDQuMDA3ODEgMzQuODc1QzQuMDA3ODEgMzQuMzI4MSA0LjIwMzEyIDMzLjg1OTQgNC41OTM3NSAzMy40Njg4QzUgMzMuMDYyNSA1LjQ3NjU2IDMyLjg1OTQgNi4wMjM0NCAzMi44NTk0QzYuNTcwMzEgMzIuODU5NCA3LjAzOTA2IDMzLjA2MjUgNy40Mjk2OSAzMy40Njg4QzcuODIwMzEgMzMuODU5NCA4LjAxNTYyIDM0LjMyODEgOC4wMTU2MiAzNC44NzVDOC4wMTU2MiAzNS40MjE5IDcuODIwMzEgMzUuODk4NCA3LjQyOTY5IDM2LjMwNDdDNy4wMzkwNiAzNi42OTUzIDYuNTcwMzEgMzYuODkwNiA2LjAyMzQ0IDM2Ljg5MDZaTTMuMDkzNzUgMzEuMTcxOUMyLjU2MjUgMzEuMTcxOSAyLjA5Mzc1IDMwLjk3NjYgMS42ODc1IDMwLjU4NTlDMS4yOTY4OCAzMC4xOTUzIDEuMTAxNTYgMjkuNzI2NiAxLjEwMTU2IDI5LjE3OTdDMS4xMDE1NiAyOC42MTcyIDEuMjk2ODggMjguMTQwNiAxLjY4NzUgMjcuNzVDMi4wOTM3NSAyNy4zNTk0IDIuNTYyNSAyNy4xNjQxIDMuMDkzNzUgMjcuMTY0MUMzLjY1NjI1IDI3LjE2NDEgNC4xMzI4MSAyNy4zNTk0IDQuNTIzNDQgMjcuNzVDNC45MTQwNiAyOC4xNDA2IDUuMTA5MzggMjguNjE3MiA1LjEwOTM4IDI5LjE3OTdDNS4xMDkzOCAyOS43MjY2IDQuOTE0MDYgMzAuMTk1MyA0LjUyMzQ0IDMwLjU4NTlDNC4xMzI4MSAzMC45NzY2IDMuNjU2MjUgMzEuMTcxOSAzLjA5Mzc1IDMxLjE3MTlaTTIuMDE1NjIgMjQuNzk2OUMxLjQ1MzEyIDI0Ljc5NjkgMC45NzY1NjIgMjQuNjAxNiAwLjU4NTkzOCAyNC4yMTA5QzAuMTk1MzEyIDIzLjgyMDMgMCAyMy4zNDM4IDAgMjIuNzgxMkMwIDIyLjIzNDQgMC4xOTUzMTIgMjEuNzY1NiAwLjU4NTkzOCAyMS4zNzVDMC45NzY1NjIgMjAuOTg0NCAxLjQ1MzEyIDIwLjc4OTEgMi4wMTU2MiAyMC43ODkxQzIuNTYyNSAyMC43ODkxIDMuMDMxMjUgMjAuOTg0NCAzLjQyMTg4IDIxLjM3NUMzLjgxMjUgMjEuNzY1NiA0LjAwNzgxIDIyLjIzNDQgNC4wMDc4MSAyMi43ODEyQzQuMDA3ODEgMjMuMzQzOCAzLjgxMjUgMjMuODIwMyAzLjQyMTg4IDI0LjIxMDlDMy4wMzEyNSAyNC42MDE2IDIuNTYyNSAyNC43OTY5IDIuMDE1NjIgMjQuNzk2OVpNMy4wOTM3NSAxOC4zOTg0QzIuNTYyNSAxOC4zOTg0IDIuMDkzNzUgMTguMjAzMSAxLjY4NzUgMTcuODEyNUMxLjI5Njg4IDE3LjQyMTkgMS4xMDE1NiAxNi45NTMxIDEuMTAxNTYgMTYuNDA2MkMxLjEwMTU2IDE1Ljg0MzggMS4yOTY4OCAxNS4zNjcyIDEuNjg3NSAxNC45NzY2QzIuMDkzNzUgMTQuNTg1OSAyLjU2MjUgMTQuMzkwNiAzLjA5Mzc1IDE0LjM5MDZDMy42NTYyNSAxNC4zOTA2IDQuMTMyODEgMTQuNTg1OSA0LjUyMzQ0IDE0Ljk3NjZDNC45MTQwNiAxNS4zNjcyIDUuMTA5MzggMTUuODQzOCA1LjEwOTM4IDE2LjQwNjJDNS4xMDkzOCAxNi45NTMxIDQuOTE0MDYgMTcuNDIxOSA0LjUyMzQ0IDE3LjgxMjVDNC4xMzI4MSAxOC4yMDMxIDMuNjU2MjUgMTguMzk4NCAzLjA5Mzc1IDE4LjM5ODRaTTYuMDIzNDQgMTIuNjc5N0M1LjQ3NjU2IDEyLjY3OTcgNSAxMi40ODQ0IDQuNTkzNzUgMTIuMDkzOEM0LjIwMzEyIDExLjcwMzEgNC4wMDc4MSAxMS4yMzQ0IDQuMDA3ODEgMTAuNjg3NUM0LjAwNzgxIDEwLjE1NjIgNC4yMDMxMiA5LjY5NTMxIDQuNTkzNzUgOS4zMDQ2OUM1IDguODk4NDQgNS40NzY1NiA4LjY5NTMxIDYuMDIzNDQgOC42OTUzMUM2LjU3MDMxIDguNjk1MzEgNy4wMzkwNiA4Ljg5ODQ0IDcuNDI5NjkgOS4zMDQ2OUM3LjgyMDMxIDkuNjk1MzEgOC4wMTU2MiAxMC4xNTYyIDguMDE1NjIgMTAuNjg3NUM4LjAxNTYyIDExLjIzNDQgNy44MjAzMSAxMS43MDMxIDcuNDI5NjkgMTIuMDkzOEM3LjAzOTA2IDEyLjQ4NDQgNi41NzAzMSAxMi42Nzk3IDYuMDIzNDQgMTIuNjc5N1pNMTAuNTcwMyA4LjEzMjgxQzEwLjAzOTEgOC4xMzI4MSA5LjU3MDMxIDcuOTM3NSA5LjE2NDA2IDcuNTQ2ODhDOC43NzM0NCA3LjE0MDYyIDguNTc4MTIgNi42NzE4OCA4LjU3ODEyIDYuMTQwNjJDOC41NzgxMiA1LjU3ODEyIDguNzczNDQgNS4xMDE1NiA5LjE2NDA2IDQuNzEwOTRDOS41NzAzMSA0LjMyMDMxIDEwLjAzOTEgNC4xMjUgMTAuNTcwMyA0LjEyNUMxMS4xMzI4IDQuMTI1IDExLjYwOTQgNC4zMjAzMSAxMiA0LjcxMDk0QzEyLjM5MDYgNS4xMDE1NiAxMi41ODU5IDUuNTc4MTIgMTIuNTg1OSA2LjE0MDYyQzEyLjU4NTkgNi42NzE4OCAxMi4zOTA2IDcuMTQwNjIgMTIgNy41NDY4OEMxMS42MDk0IDcuOTM3NSAxMS4xMzI4IDguMTMyODEgMTAuNTcwMyA4LjEzMjgxWk0xNi4zNTk0IDUuMjAzMTJDMTUuODEyNSA1LjIwMzEyIDE1LjM0MzggNS4wMDc4MSAxNC45NTMxIDQuNjE3MTlDMTQuNTYyNSA0LjIyNjU2IDE0LjM2NzIgMy43NTc4MSAxNC4zNjcyIDMuMjEwOTRDMTQuMzY3MiAyLjY2NDA2IDE0LjU2MjUgMi4xOTUzMSAxNC45NTMxIDEuODA0NjlDMTUuMzQzOCAxLjM5ODQ0IDE1LjgxMjUgMS4xOTUzMSAxNi4zNTk0IDEuMTk1MzFDMTYuOTIxOSAxLjE5NTMxIDE3LjM5ODQgMS4zOTg0NCAxNy43ODkxIDEuODA0NjlDMTguMTc5NyAyLjE5NTMxIDE4LjM3NSAyLjY2NDA2IDE4LjM3NSAzLjIxMDk0QzE4LjM3NSAzLjc1NzgxIDE4LjE3OTcgNC4yMjY1NiAxNy43ODkxIDQuNjE3MTlDMTcuMzk4NCA1LjAwNzgxIDE2LjkyMTkgNS4yMDMxMiAxNi4zNTk0IDUuMjAzMTJaTTQwLjEwMTYgNDUuNTYyNUMzNi45NDUzIDQ1LjU2MjUgMzMuOTkyMiA0NC45Njg4IDMxLjI0MjIgNDMuNzgxMkMyOC41MDc4IDQyLjYwOTQgMjYuMDkzOCA0MC45NzY2IDI0IDM4Ljg4MjhDMjEuOTA2MiAzNi43ODkxIDIwLjI2NTYgMzQuMzY3MiAxOS4wNzgxIDMxLjYxNzJDMTcuOTA2MiAyOC44NjcyIDE3LjMyMDMgMjUuOTIxOSAxNy4zMjAzIDIyLjc4MTJDMTcuMzIwMyAxOS42NDA2IDE3LjkwNjIgMTYuNjk1MyAxOS4wNzgxIDEzLjk0NTNDMjAuMjY1NiAxMS4xNzk3IDIxLjkwNjIgOC43NTc4MSAyNCA2LjY3OTY5QzI2LjA5MzggNC41ODU5NCAyOC41MDc4IDIuOTUzMTIgMzEuMjQyMiAxLjc4MTI1QzMzLjk5MjIgMC41OTM3NSAzNi45NDUzIDAgNDAuMTAxNiAwQzQzLjI0MjIgMCA0Ni4xODc1IDAuNTkzNzUgNDguOTM3NSAxLjc4MTI1QzUxLjY4NzUgMi45NTMxMiA1NC4xMDE2IDQuNTg1OTQgNTYuMTc5NyA2LjY3OTY5QzU4LjI3MzQgOC43NTc4MSA1OS45MDYyIDExLjE3OTcgNjEuMDc4MSAxMy45NDUzQzYyLjI2NTYgMTYuNjk1MyA2Mi44NTk0IDE5LjY0MDYgNjIuODU5NCAyMi43ODEyQzYyLjg1OTQgMjUuOTIxOSA2Mi4yNjU2IDI4Ljg2NzIgNjEuMDc4MSAzMS42MTcyQzU5LjkwNjIgMzQuMzY3MiA1OC4yNzM0IDM2Ljc4OTEgNTYuMTc5NyAzOC44ODI4QzU0LjEwMTYgNDAuOTc2NiA1MS42ODc1IDQyLjYwOTQgNDguOTM3NSA0My43ODEyQzQ2LjE4NzUgNDQuOTY4OCA0My4yNDIyIDQ1LjU2MjUgNDAuMTAxNiA0NS41NjI1Wk00MC4xMDE2IDQxLjM5MDZDNDIuNjY0MSA0MS4zOTA2IDQ1LjA3MDMgNDAuOTA2MiA0Ny4zMjAzIDM5LjkzNzVDNDkuNTcwMyAzOC45Njg4IDUxLjU0NjkgMzcuNjMyOCA1My4yNSAzNS45Mjk3QzU0Ljk2ODggMzQuMjI2NiA1Ni4zMDQ3IDMyLjI1NzggNTcuMjU3OCAzMC4wMjM0QzU4LjIxMDkgMjcuNzczNCA1OC42ODc1IDI1LjM1OTQgNTguNjg3NSAyMi43ODEyQzU4LjY4NzUgMjAuMjAzMSA1OC4yMTA5IDE3Ljc5NjkgNTcuMjU3OCAxNS41NjI1QzU2LjMwNDcgMTMuMzEyNSA1NC45Njg4IDExLjMzNTkgNTMuMjUgOS42MzI4MUM1MS41NDY5IDcuOTI5NjkgNDkuNTcwMyA2LjU5Mzc1IDQ3LjMyMDMgNS42MjVDNDUuMDcwMyA0LjY1NjI1IDQyLjY2NDEgNC4xNzE4OCA0MC4xMDE2IDQuMTcxODhDMzcuNTIzNCA0LjE3MTg4IDM1LjEwOTQgNC42NTYyNSAzMi44NTk0IDUuNjI1QzMwLjYyNSA2LjU5Mzc1IDI4LjY0ODQgNy45Mjk2OSAyNi45Mjk3IDkuNjMyODFDMjUuMjI2NiAxMS4zMzU5IDIzLjg5MDYgMTMuMzEyNSAyMi45MjE5IDE1LjU2MjVDMjEuOTY4OCAxNy43OTY5IDIxLjQ5MjIgMjAuMjAzMSAyMS40OTIyIDIyLjc4MTJDMjEuNDkyMiAyNS4zNTk0IDIxLjk2ODggMjcuNzczNCAyMi45MjE5IDMwLjAyMzRDMjMuODkwNiAzMi4yNTc4IDI1LjIyNjYgMzQuMjI2NiAyNi45Mjk3IDM1LjkyOTdDMjguNjQ4NCAzNy42MzI4IDMwLjYyNSAzOC45Njg4IDMyLjg1OTQgMzkuOTM3NUMzNS4xMDk0IDQwLjkwNjIgMzcuNTIzNCA0MS4zOTA2IDQwLjEwMTYgNDEuMzkwNloifSl9KSx2b2ljZW92ZXI6Sygic3ZnIix7d2lkdGg6IjE0IixoZWlnaHQ6IjE0Iix2aWV3Qm94OiIwIDAgMjQgMjQiLGZpbGw6Im5vbmUiLHN0cm9rZToiY3VycmVudENvbG9yIixzdHJva2VXaWR0aDoiMiIsc3Ryb2tlTGluZWNhcDoicm91bmQiLHN0cm9rZUxpbmVqb2luOiJyb3VuZCIsY2hpbGRyZW46W0soInBhdGgiLHtkOiJtMTEgNy42MDEtNS45OTQgOC4xOWExIDEgMCAwIDAgLjEgMS4yOThsLjgxNy44MThhMSAxIDAgMCAwIDEuMzE0LjA4N0wxNS4wOSAxMiJ9KSxLKCJwYXRoIix7ZDoiTTE2LjUgMjEuMTc0QzE1LjUgMjAuNSAxNC4zNzIgMjAgMTMgMjBjLTIuMDU4IDAtMy45MjggMi4zNTYtNiAyLTIuMDcyLS4zNTYtMi43NzUtMy4zNjktMS41LTQuNSJ9KSxLKCJjaXJjbGUiLHtjeDoiMTYiLGN5OiI3IixyOiI1In0pXX0pfTtmdW5jdGlvbiBQUSgkKXtpZighJClyZXR1cm4hMDtyZXR1cm4gSTUoJCkub3MudG9Mb3dlckNhc2UoKT09PSJpb3MifWZ1bmN0aW9uIEs0KHt1ZGlkOiQscnVudGltZTpKfSl7bGV0W1EsWl09VyghMCksW1gsWV09VyhudWxsKSxbcSxHXT1XKG51bGwpLFtWLEJdPVcobnVsbCksTj1QUShKKSx6PUQoYXN5bmMoKT0+e0IobnVsbCk7dHJ5e2xldCBUPWF3YWl0IGIzKHtkZXZpY2U6JH0se3NpZ25hbDpBYm9ydFNpZ25hbC50aW1lb3V0KDE1MDAwKX0pO2lmKFQpWShUKTtlbHNlIEIoIlVuZXhwZWN0ZWQgc2ltdWxhdG9yLXNldHRpbmdzIHJlcGx5Iil9Y2F0Y2goVCl7QihUIGluc3RhbmNlb2YgRE9NRXhjZXB0aW9uJiZULm5hbWU9PT0iVGltZW91dEVycm9yIj8iVGltZWQgb3V0IHJlYWRpbmcgc2ltdWxhdG9yIHNldHRpbmdzIjpUIGluc3RhbmNlb2YgRXJyb3ImJlQubWVzc2FnZSE9PSJGYWlsZWQgdG8gZmV0Y2giP1QubWVzc2FnZToiQ291bGQgbm90IHJlYWNoIHRoZSBwcmV2aWV3IHNlcnZlciDigJQgcmVsb2FkIHRoZSBwYWdlIGlmIHRoaXMgcGVyc2lzdHMiKX19LFskXSk7YigoKT0+e2lmKFkobnVsbCksIU4pcmV0dXJuO3ooKX0sW3osTl0pO2xldCBMPUQoYXN5bmMoVCxTKT0+e0coVCksQihudWxsKSxZKCh4KT0+eD97Li4ueCxbVF06U306eCk7dHJ5e2F3YWl0IGIzKHtkZXZpY2U6JCxvcHRpb246VCx2YWx1ZTpTfSx7c2lnbmFsOkFib3J0U2lnbmFsLnRpbWVvdXQoMTUwMDApfSl9Y2F0Y2goeCl7Qih4IGluc3RhbmNlb2YgRXJyb3I/eC5tZXNzYWdlOmBGYWlsZWQgdG8gc2V0ICR7VH1gKSx6KCl9ZmluYWxseXtHKG51bGwpfX0sWyQsel0pLEM9RSh7cnVubmluZzohMSxuZXh0Om51bGx9KSxBPUUoTCk7QS5jdXJyZW50PUw7bGV0IFU9RCgoVCk9PntsZXQgUz1DLmN1cnJlbnQ7aWYoUy5uZXh0PVQsUy5ydW5uaW5nKXJldHVybjtTLnJ1bm5pbmc9ITAsKGFzeW5jKCk9Pnt3aGlsZShTLm5leHQhPT1udWxsKXtsZXQgeD1TLm5leHQ7Uy5uZXh0PW51bGwsYXdhaXQgQS5jdXJyZW50KCJ0ZXh0LXNpemUiLG8yW3hdKX1TLnJ1bm5pbmc9ITF9KSgpfSxbXSksSD1YIT09bnVsbCxrPVg/P0ZRLEY9bzIuaW5kZXhPZihrWyJ0ZXh0LXNpemUiXSksdz1GPj0wP0Y6a1sidGV4dC1zaXplIl0/LnN0YXJ0c1dpdGgoImFjY2Vzc2liaWxpdHkiKT9vMi5sZW5ndGgtMTozO3JldHVybiBLKFgwLHtvcGVuOlEsb25PcGVuQ2hhbmdlOlosImRhdGEtc2ltdWxhdG9yLXNldHRpbmdzIjoiIixzdW1tYXJ5Q2xhc3NOYW1lOiJncmlkIFtncmlkLXRlbXBsYXRlLWNvbHVtbnM6YXV0b18xZnJfYXV0b10gaXRlbXMtY2VudGVyIGdhcC0yIHRleHQtbGVmdCIsc3VtbWFyeTpLKFoxLHtjaGlsZHJlbjpbSygic3BhbiIse2NsYXNzTmFtZToidGV4dC1bMTFweF0gZm9udC1zZW1pYm9sZCB0ZXh0LXdoaXRlLzUwIHVwcGVyY2FzZSB0cmFja2luZy1bMC4wOGVtXSBsZWFkaW5nLW5vbmUgaW5saW5lLWZsZXggaXRlbXMtY2VudGVyIixjaGlsZHJlbjoiU2ltdWxhdG9yIn0pLEsoInNwYW4iLHt9KV19KSxjaGlsZHJlbjohTj9LKCJkaXYiLHtjbGFzc05hbWU6InRleHQtd2hpdGUvNDUgdGV4dC1bMTFweF0gcHgtMC41IHB5LTEiLGNoaWxkcmVuOiJTaW11bGF0b3Igc2V0dGluZ3MgYXJlIGF2YWlsYWJsZSBvbiBpT1Mgc2ltdWxhdG9ycyBvbmx5LiJ9KTpLKFoxLHtjaGlsZHJlbjpbViYmSygiZGl2Iix7Y2xhc3NOYW1lOiJiZy1kYW5nZXIvMTAgYm9yZGVyIGJvcmRlci1kYW5nZXIvMjAgdGV4dC1kYW5nZXItc29mdCB0ZXh0LVsxMXB4XSBweC0yIHB5LTEuNSByb3VuZGVkLW1kIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiBnYXAtMiIsY2hpbGRyZW46W0soInNwYW4iLHtjbGFzc05hbWU6Im1pbi13LTAiLGNoaWxkcmVuOlZ9KSxLKCJidXR0b24iLHt0eXBlOiJidXR0b24iLG9uQ2xpY2s6KCk9PnZvaWQgeigpLGNsYXNzTmFtZToic2hyaW5rLTAgY3Vyc29yLXBvaW50ZXIgcm91bmRlZCBib3JkZXIgYm9yZGVyLWRhbmdlci8zMCBiZy10cmFuc3BhcmVudCBweC0xLjUgcHktMC41IHRleHQtWzExcHhdIHRleHQtZGFuZ2VyLXNvZnQiLGNoaWxkcmVuOiJSZXRyeSJ9KV19KSxLKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggZmxleC1jb2wgZ2FwLTEuNSBwYi0xLjUiLGNoaWxkcmVuOltLKFkwLHtpY29uOmMyLmFwcGVhcmFuY2UsbGFiZWw6IkFwcGVhcmFuY2UiLGNoaWxkcmVuOksoVTAse2xhYmVsOiJBcHBlYXJhbmNlIix2YWx1ZTprLmFwcGVhcmFuY2U/PyJsaWdodCIsb3B0aW9uczpuMy5hcHBlYXJhbmNlLGRpc2FibGVkOiFIfHxxPT09ImFwcGVhcmFuY2UiLG9uQ2hhbmdlOihUKT0+TCgiYXBwZWFyYW5jZSIsVCl9KX0pLEsoWTAse2ljb246YzIuZ2xhc3MsbGFiZWw6IkxpcXVpZCBHbGFzcyIsY2hpbGRyZW46SyhVMCx7bGFiZWw6IkxpcXVpZCBHbGFzcyIsdmFsdWU6a1sibGlxdWlkLWdsYXNzIl0/PyJjbGVhciIsb3B0aW9uczpuM1sibGlxdWlkLWdsYXNzIl0sZGlzYWJsZWQ6IUh8fHE9PT0ibGlxdWlkLWdsYXNzIixvbkNoYW5nZTooVCk9PkwoImxpcXVpZC1nbGFzcyIsVCl9KX0pLEsoWTAse2ljb246YzIuZmlsdGVyLGxhYmVsOiJDb2xvciBGaWx0ZXIiLGNoaWxkcmVuOksoVTAse2xhYmVsOiJDb2xvciBGaWx0ZXIiLHZhbHVlOmtbImNvbG9yLWZpbHRlciJdPz8ibm9uZSIsb3B0aW9uczpuM1siY29sb3ItZmlsdGVyIl0sZGlzYWJsZWQ6IUh8fHE9PT0iY29sb3ItZmlsdGVyIixvbkNoYW5nZTooVCk9PkwoImNvbG9yLWZpbHRlciIsVCl9KX0pLEsoWTAse2ljb246YzIudGV4dFNpemUsbGFiZWw6IlRleHQgU2l6ZSIsY2hpbGRyZW46SyhXUSx7dmFsdWU6dyxkaXNhYmxlZDohSCxvbkNoYW5nZTpVfSl9KSxNUS5tYXAoKHtrZXk6VCxsYWJlbDpTfSk9PksoWTAse2ljb246YzJbVD09PSJyZWR1Y2UtbW90aW9uIj8ibW90aW9uIjpUPT09ImluY3JlYXNlLWNvbnRyYXN0Ij8iY29udHJhc3QiOlQ9PT0ic2hvdy1ib3JkZXJzIj8iYm9yZGVycyI6VD09PSJyZWR1Y2UtdHJhbnNwYXJlbmN5Ij8idHJhbnNwYXJlbmN5Ijoidm9pY2VvdmVyIl0sbGFiZWw6UyxjaGlsZHJlbjpLKHA1LHtsYWJlbDpTLGNoZWNrZWQ6a1tUXT09PSJvbiIsZGlzYWJsZWQ6IUh8fHE9PT1ULG9uQ2hhbmdlOih4KT0+TChULHg/Im9uIjoib2ZmIil9KX0sVCkpXX0pXX0pfSl9dmFyIF9RPVt7dmFsdWU6Imh0dHAiLGxhYmVsOiJIVFRQIn0se3ZhbHVlOiJ3ZWJydGMiLGxhYmVsOiJXZWJSVEMifV0sRFE9W3t2YWx1ZToiYXV0byIsbGFiZWw6IkF1dG8ifSx7dmFsdWU6ImgyNjQiLGxhYmVsOiJILjI2NCJ9LHt2YWx1ZToibWpwZWciLGxhYmVsOiJNSlBFRyJ9XSxUUT1be3ZhbHVlOiJoMjY0IixsYWJlbDoiSC4yNjQifSx7dmFsdWU6InZwOSIsbGFiZWw6IlZQOSJ9LHt2YWx1ZToidnA4IixsYWJlbDoiVlA4In1dLHdRPVt7dmFsdWU6IjAiLGxhYmVsOiJGdWxsIn0se3ZhbHVlOiIxOTIwIixsYWJlbDoiMTkyMCJ9LHt2YWx1ZToiMTYwMCIsbGFiZWw6IjE2MDAifSx7dmFsdWU6IjEyODAiLGxhYmVsOiIxMjgwIn0se3ZhbHVlOiI5NjAiLGxhYmVsOiI5NjAifSx7dmFsdWU6IjcyMCIsbGFiZWw6IjcyMCJ9XSxYND1bIjYwIiwiMzAiLCIyMCIsIjE1IiwiMTAiLCI1Il0ubWFwKCgkKT0+KHt2YWx1ZTokLGxhYmVsOiR9KSksRVE9W3t2YWx1ZToiMC40NSIsbGFiZWw6IjQ1JSJ9LHt2YWx1ZToiMC41NSIsbGFiZWw6IjU1JSJ9LHt2YWx1ZToiMC43IixsYWJlbDoiNzAlIn0se3ZhbHVlOiIwLjg1IixsYWJlbDoiODUlIn0se3ZhbHVlOiIxIixsYWJlbDoiMTAwJSJ9XSxJUT1be3ZhbHVlOiIxNTAwMDAwIixsYWJlbDoiMS41IE1icHMifSx7dmFsdWU6IjMwMDAwMDAiLGxhYmVsOiIzIE1icHMifSx7dmFsdWU6IjYwMDAwMDAiLGxhYmVsOiI2IE1icHMifSx7dmFsdWU6IjEwMDAwMDAwIixsYWJlbDoiMTAgTWJwcyJ9LHt2YWx1ZToiMTYwMDAwMDAiLGxhYmVsOiIxNiBNYnBzIn1dLHAwPSJzaXplLTMuNSI7ZnVuY3Rpb24gcjIoJCxKLFEpe2xldCBaPVN0cmluZygkKTtyZXR1cm4gSi5zb21lKChYKT0+WC52YWx1ZT09PVopP0o6W3t2YWx1ZTpaLGxhYmVsOlEoJCl9LC4uLkpdfWZ1bmN0aW9uIFk0KHtzZXR0aW5nczokLG9uUGxheWJhY2tTZXR0aW5nc0NoYW5nZTpKLG9uRW5jb2RlclNldHRpbmdzQ2hhbmdlOlEsYWN0aXZlQ29kZWM6WixhdmNjU3VwcG9ydGVkOlgsZW5jb2RlclNldHRpbmdzRGlzYWJsZWQ6WT0hMX0pe2xldFtxLEddPVcoITEpLFY9JC50cmFuc3BvcnQ9PT0iaHR0cCIsQj0kLnRyYW5zcG9ydD09PSJ3ZWJydGMiO3JldHVybiBLKFgwLHtvcGVuOnEsb25PcGVuQ2hhbmdlOkcsImRhdGEtc3RyZWFtLXNldHRpbmdzIjoiIixzdW1tYXJ5Q2xhc3NOYW1lOiJncmlkIFtncmlkLXRlbXBsYXRlLWNvbHVtbnM6YXV0b18xZnJfYXV0b10gaXRlbXMtY2VudGVyIGdhcC0yIHRleHQtbGVmdCIsc3VtbWFyeTpLKFoxLHtjaGlsZHJlbjpbSygic3BhbiIse2NsYXNzTmFtZToidGV4dC1bMTFweF0gZm9udC1zZW1pYm9sZCB0ZXh0LXdoaXRlLzUwIHVwcGVyY2FzZSB0cmFja2luZy1bMC4wOGVtXSBsZWFkaW5nLW5vbmUgaW5saW5lLWZsZXggaXRlbXMtY2VudGVyIixjaGlsZHJlbjoiU3RyZWFtIn0pLEsoInNwYW4iLHtjbGFzc05hbWU6InRleHQtWzExcHhdIHRleHQtd2hpdGUvNDAganVzdGlmeS1zZWxmLWVuZCB1cHBlcmNhc2UiLGNoaWxkcmVuOlp9KV19KSxjaGlsZHJlbjpLKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggZmxleC1jb2wgZ2FwLTEuNSBwYi0xLjUiLGNoaWxkcmVuOltLKFkwLHtpY29uOksobzAse2NsYXNzTmFtZTpwMH0pLGxhYmVsOiJUcmFuc3BvcnQiLGNoaWxkcmVuOksoVTAse2xhYmVsOiJUcmFuc3BvcnQiLHZhbHVlOiQudHJhbnNwb3J0LG9wdGlvbnM6X1EsZGlzYWJsZWQ6ITEsb25DaGFuZ2U6KE4pPT5KKHt0cmFuc3BvcnQ6Tn0pfSl9KSxLKFkwLHtpY29uOksobzAse2NsYXNzTmFtZTpwMH0pLGxhYmVsOiJIVFRQIGNvZGVjIixjaGlsZHJlbjpLKFUwLHtsYWJlbDoiSFRUUCBjb2RlYyIsdmFsdWU6WD8kLmh0dHBDb2RlYzoibWpwZWciLG9wdGlvbnM6RFEsZGlzYWJsZWQ6IVZ8fCFYLG9uQ2hhbmdlOihOKT0+Sih7aHR0cENvZGVjOk59KX0pfSksSyhZMCx7aWNvbjpLKG8wLHtjbGFzc05hbWU6cDB9KSxsYWJlbDoiV2ViUlRDIGNvZGVjIixjaGlsZHJlbjpLKFUwLHtsYWJlbDoiV2ViUlRDIGNvZGVjIix2YWx1ZTokLndlYlJ0Y0NvZGVjLG9wdGlvbnM6VFEsZGlzYWJsZWQ6IUIsb25DaGFuZ2U6KE4pPT5KKHt3ZWJSdGNDb2RlYzpOfSl9KX0pLEsoWTAse2ljb246Syh4MCx7Y2xhc3NOYW1lOnAwfSksbGFiZWw6Ik1heCBzaXplIixjaGlsZHJlbjpLKFUwLHtsYWJlbDoiTWF4IHNpemUiLHZhbHVlOlN0cmluZygkLm1heERpbWVuc2lvbiksb3B0aW9uczpyMigkLm1heERpbWVuc2lvbix3USxTdHJpbmcpLGRpc2FibGVkOll8fCFWLG9uQ2hhbmdlOihOKT0+USh7bWF4RGltZW5zaW9uOk51bWJlcihOKX0pfSl9KSxLKFkwLHtpY29uOksoeDAse2NsYXNzTmFtZTpwMH0pLGxhYmVsOiJNSlBFRyBGUFMiLGNoaWxkcmVuOksoVTAse2xhYmVsOiJNSlBFRyBGUFMiLHZhbHVlOlN0cmluZygkLm1qcGVnRnBzKSxvcHRpb25zOnIyKCQubWpwZWdGcHMsWDQsU3RyaW5nKSxkaXNhYmxlZDpZfHwhVixvbkNoYW5nZTooTik9PlEoe21qcGVnRnBzOk51bWJlcihOKX0pfSl9KSxLKFkwLHtpY29uOksoeDAse2NsYXNzTmFtZTpwMH0pLGxhYmVsOiJNSlBFRyBxdWFsaXR5IixjaGlsZHJlbjpLKFUwLHtsYWJlbDoiTUpQRUcgcXVhbGl0eSIsdmFsdWU6U3RyaW5nKCQubWpwZWdRdWFsaXR5KSxvcHRpb25zOnIyKCQubWpwZWdRdWFsaXR5LEVRLChOKT0+YCR7TWF0aC5yb3VuZChOKjEwMCl9JWApLGRpc2FibGVkOll8fCFWLG9uQ2hhbmdlOihOKT0+USh7bWpwZWdRdWFsaXR5Ok51bWJlcihOKX0pfSl9KSxLKFkwLHtpY29uOksoeDAse2NsYXNzTmFtZTpwMH0pLGxhYmVsOiJILjI2NCBGUFMiLGNoaWxkcmVuOksoVTAse2xhYmVsOiJILjI2NCBGUFMiLHZhbHVlOlN0cmluZygkLmgyNjRGcHMpLG9wdGlvbnM6cjIoJC5oMjY0RnBzLFg0LFN0cmluZyksZGlzYWJsZWQ6WXx8IVZ8fCFYfHwkLmh0dHBDb2RlYz09PSJtanBlZyIsb25DaGFuZ2U6KE4pPT5RKHtoMjY0RnBzOk51bWJlcihOKX0pfSl9KSxLKFkwLHtpY29uOksoeDAse2NsYXNzTmFtZTpwMH0pLGxhYmVsOiJILjI2NCBiaXRyYXRlIixjaGlsZHJlbjpLKFUwLHtsYWJlbDoiSC4yNjQgYml0cmF0ZSIsdmFsdWU6U3RyaW5nKCQuaDI2NEJpdHJhdGUpLG9wdGlvbnM6cjIoJC5oMjY0Qml0cmF0ZSxJUSwoTik9PmAke04vMWU2fSBNYnBzYCksZGlzYWJsZWQ6WXx8IVZ8fCFYfHwkLmh0dHBDb2RlYz09PSJtanBlZyIsb25DaGFuZ2U6KE4pPT5RKHtoMjY0Qml0cmF0ZTpOdW1iZXIoTil9KX0pfSldfSl9KX1mdW5jdGlvbiBxNCh7b3BlbjokLG9uQ2xvc2U6Six1ZGlkOlEsZGV2aWNlUnVudGltZTpaLGN1cnJlbnRBcHA6WCxldmVudExvZ0V2ZW50c0VuZHBvaW50OlksYXhPdmVybGF5RW5hYmxlZDpxLG9uVG9nZ2xlQXhPdmVybGF5Okcsc3RyZWFtU2V0dGluZ3M6VixvblN0cmVhbVBsYXliYWNrU2V0dGluZ3NDaGFuZ2U6QixvblN0cmVhbUVuY29kZXJTZXR0aW5nc0NoYW5nZTpOLGFjdGl2ZUNvZGVjOnosYXZjY1N1cHBvcnRlZDpMLHN0cmVhbVNldHRpbmdzUGVuZGluZzpDLHdpZHRoOkF9KXtyZXR1cm4gSyhOMix7b3BlbjokLHdpZHRoOkEsc3R5bGU6e2JhY2tncm91bmRDb2xvcjp6Mn0sY2hpbGRyZW46W0soTDIse2NoaWxkcmVuOltLKHI5LHtjaGlsZHJlbjoiVG9vbHMifSksSyh4NSx7b25DbGljazpKfSldfSksJCYmSygiZGl2Iix7Y2xhc3NOYW1lOiJwLTMuNSBvdmVyZmxvdy15LWF1dG8gZmxleC0xIGZsZXggZmxleC1jb2wgZ2FwLTMiLGNoaWxkcmVuOltLKHA2LHt1ZGlkOlEsY3VycmVudEFwcDpYfSksSyhaNCx7dWRpZDpRLGV2ZW50c0VuZHBvaW50Oll9KSxLKEs0LHt1ZGlkOlEscnVudGltZTpafSksSyhjNix7b3ZlcmxheUVuYWJsZWQ6cSxvblRvZ2dsZU92ZXJsYXk6R30pLEsoSjQse3VkaWQ6USxidW5kbGVJZDpYPy5idW5kbGVJZD8/bnVsbH0pLEsobTYse3VkaWQ6USxleGVjOkkxfSksSyhsNix7dWRpZDpRLGJ1bmRsZUlkOlg/LmJ1bmRsZUlkPz9udWxsfSksSyhZNCx7c2V0dGluZ3M6VixvblBsYXliYWNrU2V0dGluZ3NDaGFuZ2U6QixvbkVuY29kZXJTZXR0aW5nc0NoYW5nZTpOLGFjdGl2ZUNvZGVjOnosYXZjY1N1cHBvcnRlZDpMLGVuY29kZXJTZXR0aW5nc0Rpc2FibGVkOkN9KV19KV19KX1mdW5jdGlvbiBHNCgkLEope2xldCBRO3RyeXtRPW5ldyBVUkwoJC53ZWJTb2NrZXREZWJ1Z2dlclVybCl9Y2F0Y2h7cmV0dXJuICR9bGV0IFo9YCR7US5wYXRobmFtZX0ke1Euc2VhcmNofWAsWD1KLnByb3RvY29sPT09Imh0dHBzOiI/IndzczoiOiJ3czoiLFk9Si5wcm90b2NvbD09PSJodHRwczoiPyJ3c3MiOiJ3cyIscT1gJHtKLmhvc3R9JHtafWAsRz0kLmRldnRvb2xzRnJvbnRlbmRVcmw7dHJ5e2xldCBWPW5ldyBVUkwoJC5kZXZ0b29sc0Zyb250ZW5kVXJsLGAke0oucHJvdG9jb2x9Ly8ke0ouaG9zdH1gKTtWLnNlYXJjaFBhcmFtcy5kZWxldGUoIndzIiksVi5zZWFyY2hQYXJhbXMuZGVsZXRlKCJ3c3MiKSxWLnNlYXJjaFBhcmFtcy5zZXQoWSxxKSxHPWAke1YucGF0aG5hbWV9JHtWLnNlYXJjaH0ke1YuaGFzaH1gfWNhdGNoe31yZXR1cm57Li4uJCx3ZWJTb2NrZXREZWJ1Z2dlclVybDpgJHtYfS8vJHtKLmhvc3R9JHtafWAsZGV2dG9vbHNGcm9udGVuZFVybDpHfX1mdW5jdGlvbiBpMigkLEope2ZldGNoKGMxKCJkZXZ0b29scy9oaWdobGlnaHQiKSx7bWV0aG9kOiJQT1NUIixoZWFkZXJzOnsiQ29udGVudC1UeXBlIjoiYXBwbGljYXRpb24vanNvbiJ9LGJvZHk6SlNPTi5zdHJpbmdpZnkoe3RhcmdldElkOiQsb246Sn0pLGtlZXBhbGl2ZTohMH0pLmNhdGNoKCgpPT57fSl9ZnVuY3Rpb24gczMoKXtsZXQgJD1jMSgiZGV2dG9vbHMvcmVsZWFzZSIpO3RyeXtpZih0eXBlb2YgbmF2aWdhdG9yPCJ1IiYmbmF2aWdhdG9yLnNlbmRCZWFjb24pe2xldCBKPW5ldyBCbG9iKFsie30iXSx7dHlwZToiYXBwbGljYXRpb24vanNvbiJ9KTtpZihuYXZpZ2F0b3Iuc2VuZEJlYWNvbigkLEopKXJldHVybn19Y2F0Y2h7fWZldGNoKCQse21ldGhvZDoiUE9TVCIsaGVhZGVyczp7IkNvbnRlbnQtVHlwZSI6ImFwcGxpY2F0aW9uL2pzb24ifSxib2R5OiJ7fSIsa2VlcGFsaXZlOiEwfSkuY2F0Y2goKCk9Pnt9KX1mdW5jdGlvbiBWNCgkKXtsZXQgSj0kLmNvbnRlbnREb2N1bWVudDtpZighSilyZXR1cm47bGV0IFE9KCk9PntsZXQgWT1bSl07d2hpbGUoWS5sZW5ndGgpe2xldCBxPVkucG9wKCksRz1xLnF1ZXJ5U2VsZWN0b3JBbGwoIlthcmlhLWxhYmVsXSxbdGl0bGVdIik7Zm9yKGxldCBWIG9mIEcpe2xldCBCPVYuZ2V0QXR0cmlidXRlKCJhcmlhLWxhYmVsIil8fFYudGl0bGV8fCIiO2lmKC9edG9nZ2xlIHNjcmVlbmNhc3QkL2kudGVzdChCKSlyZXR1cm4gVn1mb3IobGV0IFYgb2YgcS5xdWVyeVNlbGVjdG9yQWxsKCIqIikpaWYoVi5zaGFkb3dSb290KVkucHVzaChWLnNoYWRvd1Jvb3QpfXJldHVybiBudWxsfSxaPTAsWD0oKT0+e1orKztsZXQgWT1RKCk7aWYoWSYmWS5nZXRBdHRyaWJ1dGUoImFyaWEtcHJlc3NlZCIpIT09ImZhbHNlIil7WS5jbGljaygpO3JldHVybn1pZihaPDIwKXNldFRpbWVvdXQoWCwxMDApfTtYKCl9ZnVuY3Rpb24gQjQoJCl7bGV0IEo9W10sUT1uZXcgTWFwO2ZvcihsZXQgWiBvZiAkKXtsZXQgWD1aLmFwcE5hbWV8fFouYnVuZGxlSWR8fCJVbmtub3duIixZPVouYnVuZGxlSWR8fFgscT1RLmdldChZKTtpZighcSlxPXtrZXk6WSxhcHBOYW1lOlgsYnVuZGxlSWQ6Wi5idW5kbGVJZCx0YXJnZXRzOltdfSxRLnNldChZLHEpLEoucHVzaChZKTtxLnRhcmdldHMucHVzaChaKX1yZXR1cm4gSi5tYXAoKFopPT5RLmdldChaKSl9ZnVuY3Rpb24gTjQoJCxKKXtsZXRbUSxaXT1XKHt9KSxYPUUxKCgpPT5KLnNsaWNlKCkuc29ydCgpLmpvaW4oInwiKSxbSl0pO3JldHVybiBiKCgpPT57aWYoISQpcmV0dXJuO2xldCBZPSExO2ZvcihsZXQgcSBvZiBKKXtpZighcSljb250aW51ZTtsZXQgRz1gJHskfToke3F9YCxWPUMyLmdldChHKTtpZih0eXBlb2YgVj09PSJzdHJpbmcifHxWPT09bnVsbCl7WigoQik9PkJbcV09PT1WP0I6ey4uLkIsW3FdOlZ9KTtjb250aW51ZX1mNihJMSwkLHEpLnRoZW4oKEIpPT57aWYoWSlyZXR1cm47WigoTik9Pih7Li4uTixbcV06Qn0pKX0pfXJldHVybigpPT57WT0hMH19LFskLFhdKSxRfWZ1bmN0aW9uIEw0KHt1ZGlkOiQsdGFyZ2V0czpKLHNlbGVjdGVkOlEsb25TZWxlY3RUYXJnZXQ6WixvblJlZnJlc2g6WH0pe2xldCBZPUI0KEopLHE9WS5tYXAoKFUpPT5VLmJ1bmRsZUlkKS5maWx0ZXIoKFUpPT4hIVUpLEc9TjQoJCxxKSxbVixCXT1XKCExKSxbTix6XT1XKG51bGwpLEw9RShudWxsKSxDPUUobnVsbCk7YigoKT0+e2lmKCFWKXJldHVybjtsZXQgVT0oSCk9PntpZighQy5jdXJyZW50KXJldHVybjtpZighQy5jdXJyZW50LmNvbnRhaW5zKEgudGFyZ2V0KSlCKCExKX07cmV0dXJuIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsVSksKCk9PmRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsVSl9LFtWXSksYigoKT0+e2lmKFYpcmV0dXJuO2lmKEwuY3VycmVudClpMihMLmN1cnJlbnQsITEpLEwuY3VycmVudD1udWxsO3MzKCl9LFtWXSksYigoKT0+e2xldCBVPSgpPT5zMygpO3JldHVybiB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigicGFnZWhpZGUiLFUpLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJiZWZvcmV1bmxvYWQiLFUpLCgpPT57d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoInBhZ2VoaWRlIixVKSx3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigiYmVmb3JldW5sb2FkIixVKX19LFtdKTtsZXQgQT1RPyhRLnRpdGxlfHxRLnVybHx8US5hcHBOYW1lfHwiVW50aXRsZWQiKS5zbGljZSgwLDkwKToiU2VsZWN0IHRhcmdldCI7cmV0dXJuIEsoImRpdiIse3JlZjpDLGNsYXNzTmFtZToicmVsYXRpdmUgdy1mdWxsIG1pbi13LTAiLGNoaWxkcmVuOltLKCJidXR0b24iLHt0eXBlOiJidXR0b24iLG9uQ2xpY2s6KCk9PntCKChVKT0+e2lmKCFVKVgoKTtyZXR1cm4hVX0pfSxjbGFzc05hbWU6InctZnVsbCBtaW4tdy0wIGgtWzI2cHhdIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiBnYXAtMiBiZy1wYW5lbCB0ZXh0LXdoaXRlLzkwIGJvcmRlciBib3JkZXItd2hpdGUvMTIgcm91bmRlZC1tZCB0ZXh0LVsxMnB4XSBweC0yIGN1cnNvci1wb2ludGVyIHRleHQtbGVmdCIsImFyaWEtaGFzcG9wdXAiOiJsaXN0Ym94IiwiYXJpYS1leHBhbmRlZCI6ViwiYXJpYS1sYWJlbCI6IldlYktpdCB0YXJnZXQiLGNoaWxkcmVuOltLKCJzcGFuIix7Y2xhc3NOYW1lOiJvdmVyZmxvdy1oaWRkZW4gdGV4dC1lbGxpcHNpcyB3aGl0ZXNwYWNlLW5vd3JhcCBtaW4tdy0wIixjaGlsZHJlbjpBfSksSyhJMix7c2l6ZToxMixzdHJva2VXaWR0aDoyfSldfSksViYmSygidWwiLHtyb2xlOiJsaXN0Ym94IixjbGFzc05hbWU6ImFic29sdXRlIHRvcC1bY2FsYygxMDAlKzRweCldIGxlZnQtMCBtLTAgcC0xIGxpc3Qtbm9uZSBiZy1wYW5lbCBib3JkZXIgYm9yZGVyLXdoaXRlLzEyIHJvdW5kZWQtbGcgc2hhZG93LVswXzhweF8yNHB4X3JnYmEoMCwwLDAsMC41KV0gbWluLXctWzIyMHB4XSBtYXgtdy1bMzYwcHhdIG1heC1oLVszMjBweF0gb3ZlcmZsb3cteS1hdXRvIHotNTAiLGNoaWxkcmVuOlkubWFwKChVKT0+e2xldCBIPVUuYnVuZGxlSWQ/R1tVLmJ1bmRsZUlkXTpudWxsO3JldHVybiBLKCJsaSIse2NsYXNzTmFtZToibGlzdC1ub25lIG0tMCBwLTAiLGNoaWxkcmVuOltLKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggaXRlbXMtY2VudGVyIGdhcC0yIHB4LTEuNSBwdC0xIHBiLTAuNSB0ZXh0LVsxMnB4XSBmb250LXNlbWlib2xkIHRleHQtd2hpdGUvWzAuOTJdIixjaGlsZHJlbjpbSD9LKCJpbWciLHtzcmM6SCxhbHQ6IiIsY2xhc3NOYW1lOiJ3LTQgaC00IHJvdW5kZWQtWzNweF0gc2hyaW5rLTAgb2JqZWN0LWNvdmVyIn0pOksoInNwYW4iLHtjbGFzc05hbWU6InctNCBoLTQgcm91bmRlZC1bM3B4XSBzaHJpbmstMCBvYmplY3QtY292ZXIiLCJhcmlhLWhpZGRlbiI6InRydWUifSksSygic3BhbiIse2NsYXNzTmFtZToib3ZlcmZsb3ctaGlkZGVuIHRleHQtZWxsaXBzaXMgd2hpdGVzcGFjZS1ub3dyYXAiLGNoaWxkcmVuOlUuYXBwTmFtZX0pXX0pLEsoInVsIix7cm9sZToiZ3JvdXAiLGNsYXNzTmFtZToibGlzdC1ub25lIG0tMCBwLTAgcGwtWzI2cHhdIixjaGlsZHJlbjpVLnRhcmdldHMubWFwKChrKT0+e2xldCBGPVE/LmlkPT09ay5pZCx3PSEhay5pblVzZUJ5T3RoZXJJbnNwZWN0b3ImJiFGLFQ9KGsudGl0bGV8fGsudXJsfHxrLmFwcE5hbWV8fCJVbnRpdGxlZCIpLnNsaWNlKDAsOTApLFM9Tj09PWsuaWQmJiF3LHg9ImZsZXggZmxleC1jb2wgcHgtMiBweS1bM3B4XSByb3VuZGVkIHRleHQtWzEycHhdIGxlYWRpbmctWzEuMzVdIjtyZXR1cm4gSygibGkiLHtyb2xlOiJvcHRpb24iLCJhcmlhLXNlbGVjdGVkIjpGLCJhcmlhLWRpc2FibGVkIjp3LHRhYkluZGV4Onc/LTE6MCx0aXRsZTp3PyJBbHJlYWR5IGJlaW5nIGluc3BlY3RlZCBieSBhbm90aGVyIGRlYnVnZ2VyIjp2b2lkIDAsb25Nb3VzZUVudGVyOigpPT57aWYodylyZXR1cm47aWYoTC5jdXJyZW50JiZMLmN1cnJlbnQhPT1rLmlkKWkyKEwuY3VycmVudCwhMSk7TC5jdXJyZW50PWsuaWQseihrLmlkKSxpMihrLmlkLCEwKX0sb25Nb3VzZUxlYXZlOigpPT57aWYoTC5jdXJyZW50PT09ay5pZClpMihrLmlkLCExKSxMLmN1cnJlbnQ9bnVsbDt6KChmKT0+Zj09PWsuaWQ/bnVsbDpmKX0sb25DbGljazooKT0+e2lmKHcpcmV0dXJuO1ooay5pZCksQighMSl9LGNsYXNzTmFtZTpgZmxleCBmbGV4LWNvbCBweC0yIHB5LVszcHhdIHJvdW5kZWQgdGV4dC1bMTJweF0gbGVhZGluZy1bMS4zNV0gJHt3PyJvcGFjaXR5LTQwIGN1cnNvci1ub3QtYWxsb3dlZCBpdGFsaWMgdGV4dC13aGl0ZS84NSI6Uz8iYmctW3JnYmEoMTAsMTMyLDI1NSwwLjIyKV0gdGV4dC13aGl0ZS84NSBjdXJzb3ItcG9pbnRlciI6Rj8iYmctd2hpdGUvWzAuMDZdIHRleHQtd2hpdGUvODUgY3Vyc29yLXBvaW50ZXIiOiJ0ZXh0LXdoaXRlLzg1IGN1cnNvci1wb2ludGVyIn1gLGNoaWxkcmVuOltLKCJzcGFuIix7Y2xhc3NOYW1lOiJibG9jayBvdmVyZmxvdy1oaWRkZW4gdGV4dC1lbGxpcHNpcyB3aGl0ZXNwYWNlLW5vd3JhcCIsY2hpbGRyZW46VH0pLGsudXJsJiZrLnVybCE9PSJhYm91dDpibGFuayImJksoInNwYW4iLHtjbGFzc05hbWU6ImJsb2NrIGZvbnQtbW9ubyB0ZXh0LVsxMHB4XSB0ZXh0LXdoaXRlL1swLjQyXSBvdmVyZmxvdy1oaWRkZW4gdGV4dC1lbGxpcHNpcyB3aGl0ZXNwYWNlLW5vd3JhcCIsY2hpbGRyZW46ay51cmx9KV19LGsuaWQpfSl9KV19LFUua2V5KX0pfSldfSl9ZnVuY3Rpb24gejQoe29wZW46JCxvbkNsb3NlOkosdWRpZDpRLHRhcmdldHM6WixzZWxlY3RlZFRhcmdldElkOlgsb25TZWxlY3RUYXJnZXQ6WSxsb2FkaW5nOnEsZXJyb3I6RyxvblJlZnJlc2g6Vix3aWR0aDpCfSl7bGV0IE49WD9aLmZpbmQoKHopPT56LmlkPT09WCk/P251bGw6bnVsbDtyZXR1cm4gSyhOMix7b3BlbjokLHdpZHRoOkIsY2hpbGRyZW46W0soTDIse2NoaWxkcmVuOltaLmxlbmd0aD4wP0soTDQse3VkaWQ6USx0YXJnZXRzOlosc2VsZWN0ZWQ6TixvblNlbGVjdFRhcmdldDpZLG9uUmVmcmVzaDpWfSk6Sygic3BhbiIse2NsYXNzTmFtZToidGV4dC1bMTJweF0gdGV4dC13aGl0ZS9bMC40OF0gb3ZlcmZsb3ctaGlkZGVuIHRleHQtZWxsaXBzaXMgd2hpdGVzcGFjZS1ub3dyYXAiLGNoaWxkcmVuOnE/Ikxvb2tpbmcgZm9yIFNhZmFyaSBhbmQgaW5zcGVjdGFibGUgd2Vidmlld3MuLi4iOiJObyBpbnNwZWN0YWJsZSBTYWZhcmkgb3IgV0tXZWJWaWV3IHRhcmdldHMifSksSyh4NSx7b25DbGljazpKLGFyaWFMYWJlbDoiQ2xvc2UgV2ViS2l0IERldlRvb2xzIix0aXRsZToiQ2xvc2UiLGljb25TaXplOjE1fSldfSksSygiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4LTEgbWluLWgtMCBiZy13aGl0ZSByZWxhdGl2ZSIsY2hpbGRyZW46Rz9LKCJkaXYiLHtjbGFzc05hbWU6ImgtZnVsbCBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBwLTYgYmctcGFuZWwtZGVlcCB0ZXh0LXdoaXRlL1swLjU4XSB0ZXh0LWNlbnRlciB0ZXh0LVsxM3B4XSIsY2hpbGRyZW46R30pOk4mJiQ/SygiaWZyYW1lIix7c3JjOk4uZGV2dG9vbHNGcm9udGVuZFVybCx0aXRsZTpgV2ViS2l0IERldlRvb2xzIC0gJHtOLnRpdGxlfHxOLnVybHx8Ti5pZH1gLGNsYXNzTmFtZToidy1mdWxsIGgtZnVsbCBib3JkZXItbm9uZSBibG9jayBiZy13aGl0ZSIsb25Mb2FkOih6KT0+VjQoei5jdXJyZW50VGFyZ2V0KX0sTi5pZCk6SygiZGl2Iix7Y2xhc3NOYW1lOiJoLWZ1bGwgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgcC02IGJnLXBhbmVsLWRlZXAgdGV4dC13aGl0ZS9bMC41OF0gdGV4dC1jZW50ZXIgdGV4dC1bMTNweF0iLGNoaWxkcmVuOk4/IkRldlRvb2xzIHBhdXNlZCDigJQgb3BlbiB0aGUgcGFuZWwgdG8gcmVhdHRhY2guIjoiT3BlbiBTYWZhcmkgb3IgYW4gaW5zcGVjdGFibGUgV0tXZWJWaWV3IGluIHRoZSBzaW11bGF0b3IuIn0pfSldfSl9ZnVuY3Rpb24geVEoe2hvc3RQYXRoOiQsZXhlYzpKLHVkaWQ6USxvblVwbG9hZFN0YXJ0Olosb25VcGxvYWRQcm9ncmVzczpYLG9uVXBsb2FkRW5kOlksb25Ib3N0UGF0aERyb3A6cX0pe3E/LigkKTtsZXQgRz0kLnNwbGl0KCIvIikucG9wKCk/PyJpbWFnZSIsVj1aKEcsIm1lZGlhIik7cmV0dXJuIFgoVixudWxsKSxyNigkLEosUSkudGhlbigoKT0+WShWLCEwKSkuY2F0Y2goKEIpPT5ZKFYsITEsQiBpbnN0YW5jZW9mIEVycm9yP0IubWVzc2FnZToiQWRkIGZhaWxlZCIpKX1mdW5jdGlvbiBDNCh7ZXhlYzokLHVkaWQ6SixlbmFibGVkOlEsb25VcGxvYWRTdGFydDpaLG9uVXBsb2FkUHJvZ3Jlc3M6WCxvblVwbG9hZEVuZDpZLG9uVW5zdXBwb3J0ZWQ6cSxvbkhvc3RQYXRoRHJvcDpHfSl7bGV0W1YsQl09VyghMSksTj1FKDApLHo9RChhc3luYyhVKT0+e2lmKFUucHJldmVudERlZmF1bHQoKSxVLnN0b3BQcm9wYWdhdGlvbigpLE4uY3VycmVudD0wLEIoITEpLCFRfHwhSilyZXR1cm47bGV0IEg9VS5kYXRhVHJhbnNmZXIuZ2V0RGF0YSh1NSk7aWYoSCl7eVEoe2hvc3RQYXRoOkgsZXhlYzokLHVkaWQ6SixvblVwbG9hZFN0YXJ0Olosb25VcGxvYWRQcm9ncmVzczpYLG9uVXBsb2FkRW5kOlksb25Ib3N0UGF0aERyb3A6R30pO3JldHVybn1sZXQgaz1BcnJheS5mcm9tKFUuZGF0YVRyYW5zZmVyLmZpbGVzKTtpZihrLmxlbmd0aD09PTApcmV0dXJuO2ZvcihsZXQgRiBvZiBrKXtsZXQgdz1pNihGKTtpZighdyl7cShGKTtjb250aW51ZX1sZXQgVD1aKEYubmFtZSx3KTtzNihGLHcsJCxKLChTKT0+WChULFMpKS50aGVuKCgpPT5ZKFQsITApKS5jYXRjaCgoUyk9PlkoVCwhMSxTIGluc3RhbmNlb2YgRXJyb3I/Uy5tZXNzYWdlOiJVcGxvYWQgZmFpbGVkIikpfX0sW1EsSiwkLFosWCxZLHEsR10pLEw9RCgoVSk9PntpZihVLnByZXZlbnREZWZhdWx0KCksUSlVLmRhdGFUcmFuc2Zlci5kcm9wRWZmZWN0PSJjb3B5In0sW1FdKSxDPUQoKFUpPT57aWYoVS5wcmV2ZW50RGVmYXVsdCgpLCFRKXJldHVybjtpZihOLmN1cnJlbnQrKyxOLmN1cnJlbnQ9PT0xKUIoITApfSxbUV0pLEE9RCgoVSk9PntpZihVLnByZXZlbnREZWZhdWx0KCksTi5jdXJyZW50LS0sTi5jdXJyZW50PD0wKU4uY3VycmVudD0wLEIoITEpfSxbXSk7cmV0dXJue2lzRHJhZ092ZXI6Vixkcm9wWm9uZVByb3BzOntvbkRyYWdPdmVyOkwsb25EcmFnRW50ZXI6QyxvbkRyYWdMZWF2ZTpBLG9uRHJvcDp6fX19ZnVuY3Rpb24gVTQoJCl7bGV0IEo9bmV3IFVpbnQ4QXJyYXkoNjU1MzYpLFE9MCxaPTAsWD0xMDI0LFk9bmV3IFRleHREZWNvZGVyKCJsYXRpbjEiKSxxPShMKT0+e2lmKFErTC5sZW5ndGg+Si5sZW5ndGgpe2lmKFo+MClKLmNvcHlXaXRoaW4oMCxaLFEpLFEtPVosWj0wO2lmKFErTC5sZW5ndGg+Si5sZW5ndGgpe2xldCBDPUoubGVuZ3RoO3doaWxlKEM8UStMLmxlbmd0aClDKj0yO2xldCBBPW5ldyBVaW50OEFycmF5KEMpO0Euc2V0KEouc3ViYXJyYXkoMCxRKSksSj1BfX1KLnNldChMLFEpLFErPUwubGVuZ3RofSxHPShMKT0+e2xldCBDPU1hdGgubWluKFEtNCxMK1gpO2ZvcihsZXQgQT1MO0E8PUM7QSsrKWlmKEpbQV09PT0xMyYmSltBKzFdPT09MTAmJkpbQSsyXT09PTEzJiZKW0ErM109PT0xMClyZXR1cm4gQTtyZXR1cm4tMX0sVj0oTCxDKT0+e2xldCBBPVkuZGVjb2RlKEouc3ViYXJyYXkoTCxDKSksVT0vY29udGVudC1sZW5ndGg6XHMqKFxkKykvaS5leGVjKEEpO3JldHVybiBVP051bWJlcihVWzFdKTpudWxsfSxCPTAsTj0oTCk9PntsZXQgQz0tMTtmb3IobGV0IEE9TDtBPFEtMTtBKyspaWYoSltBXT09PTI1NSYmSltBKzFdPT09MjE2KXtDPUE7YnJlYWt9aWYoQz09PS0xKXJldHVybiBudWxsO2ZvcihsZXQgQT1NYXRoLm1heChDKzIsQik7QTxRLTE7QSsrKWlmKEpbQV09PT0yNTUmJkpbQSsxXT09PTIxNylyZXR1cm4gQj0wLHtzOkMsZTpBKzJ9O3JldHVybiBCPU1hdGgubWF4KEMrMixRLTEpLG51bGx9LHo9KCk9Pnt3aGlsZShaPFEpe2xldCBMPUcoWik7aWYoTD49MCl7bGV0IEE9VihaLEwpO2lmKEEhPW51bGwmJkE+MCl7bGV0IFU9TCs0LEg9VStBO2lmKFE8SClicmVhazskKEouc3ViYXJyYXkoVSxIKSksWj1IO2NvbnRpbnVlfX1lbHNlIGlmKFEtWjw9WClicmVhaztsZXQgQz1OKFopO2lmKCFDKWJyZWFrOyQoSi5zdWJhcnJheShDLnMsQy5lKSksWj1DLmV9aWYoWj4wKXtpZihaPFEpSi5jb3B5V2l0aGluKDAsWixRKTtRLT1aLEI9Qj5aP0ItWjowLFo9MH19O3JldHVybntwdXNoKEwpe2lmKEwubGVuZ3RoPT09MClyZXR1cm47cShMKSx6KCl9fX1mdW5jdGlvbiBINCgkKXtsZXQgSj1FKG5ldyBTZXQpLFE9RCgoWik9PntyZXR1cm4gSi5jdXJyZW50LmFkZChaKSwoKT0+e0ouY3VycmVudC5kZWxldGUoWil9fSxbXSk7cmV0dXJuIGIoKCk9PntpZighJClyZXR1cm47bGV0IFo9bmV3IEFib3J0Q29udHJvbGxlcixYPSExLFk9bnVsbCxxPW5ldyBVUkwoJCk7cS5zZWFyY2hQYXJhbXMuc2V0KCJyYXciLCIxIik7bGV0IEc9cS50b1N0cmluZygpLFY9KCk9PntpZihYfHxaLnNpZ25hbC5hYm9ydGVkfHxZKXJldHVybjtZPXNldFRpbWVvdXQoKCk9PntZPW51bGwsTigpfSwxMDAwKX0sQj0oeik9PntpZihKLmN1cnJlbnQuc2l6ZT09PTApcmV0dXJuO2xldCBMPVVSTC5jcmVhdGVPYmplY3RVUkwobmV3IEJsb2IoW3pdLHt0eXBlOiJpbWFnZS9qcGVnIn0pKTtmb3IobGV0IEMgb2YgSi5jdXJyZW50KUMoTCl9LE49YXN5bmMoKT0+e3RyeXtsZXQgTD0oYXdhaXQgZmV0Y2goRyx7c2lnbmFsOlouc2lnbmFsfSkpLmJvZHk/LmdldFJlYWRlcigpO2lmKCFMKXtWKCk7cmV0dXJufWxldCBDPVU0KEIpO3doaWxlKCEwKXtsZXR7ZG9uZTpBLHZhbHVlOlV9PWF3YWl0IEwucmVhZCgpO2lmKEEpYnJlYWs7aWYoVSYmVS5sZW5ndGgpQy5wdXNoKFUpfX1jYXRjaHt9ZmluYWxseXtWKCl9fTtyZXR1cm4gTigpLCgpPT57aWYoWD0hMCxZKWNsZWFyVGltZW91dChZKTtaLmFib3J0KCl9fSxbJF0pLHtzdWJzY3JpYmVGcmFtZTpRLGZyYW1lOm51bGx9fWZ1bmN0aW9uIEE0KCl7bGV0WyRdPVcoYzApO3JldHVybntzdXBwb3J0ZWQ6JH19ZnVuY3Rpb24gbDUoJCxKKXtyZXR1cm4gJD09PSJmaXJzdC1mcmFtZS10aW1lb3V0IiYmSj09PSJjb25uZWN0ZWQiPyJjb2RlYyI6InRyYW5zcG9ydCJ9dmFyIGs0PSJhbGwiO2NsYXNzIGEyIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IoKXtzdXBlcigiV2ViUlRDIHNpZ25hbGluZyBzdGF5ZWQgYnVzeSBmb3IgdG9vIGxvbmcuIFJlbG9hZCB0byB0cnkgYWdhaW4uIik7dGhpcy5uYW1lPSJXZWJSdGNTaWduYWxpbmdCdXN5RXJyb3IifX1jbGFzcyBjNSBleHRlbmRzIEVycm9ye2NvbnN0cnVjdG9yKCl7c3VwZXIoIldlYlJUQyBzaWduYWxpbmcgdGltZWQgb3V0LiIpO3RoaXMubmFtZT0iV2ViUnRjU2lnbmFsaW5nVGltZW91dEVycm9yIn19ZnVuY3Rpb24gZDUoJCl7cmV0dXJuICQucmVhc29uPz9uZXcgRE9NRXhjZXB0aW9uKCJUaGUgb3BlcmF0aW9uIHdhcyBhYm9ydGVkIiwiQWJvcnRFcnJvciIpfWZ1bmN0aW9uIGJRKCQsSil7aWYoSj8uYWJvcnRlZClyZXR1cm4gUHJvbWlzZS5yZWplY3QoZDUoSikpO3JldHVybiBuZXcgUHJvbWlzZSgoUSxaKT0+e2xldCBYPXNldFRpbWVvdXQoWSwkKTtmdW5jdGlvbiBZKCl7Sj8ucmVtb3ZlRXZlbnRMaXN0ZW5lcigiYWJvcnQiLHEpLFEoKX1mdW5jdGlvbiBxKCl7Y2xlYXJUaW1lb3V0KFgpLFooSj9kNShKKTpuZXcgRE9NRXhjZXB0aW9uKCJUaGUgb3BlcmF0aW9uIHdhcyBhYm9ydGVkIiwiQWJvcnRFcnJvciIpKX1KPy5hZGRFdmVudExpc3RlbmVyKCJhYm9ydCIscSx7b25jZTohMH0pfSl9YXN5bmMgZnVuY3Rpb24gTzQoe3VybDokLHNlc3Npb25JZDpKLGtlZXBhbGl2ZTpRPSExLHNlbmRCZWFjb246WixmZXRjaEltcGw6WD1mZXRjaH0pe2xldCBZPUpTT04uc3RyaW5naWZ5KHtzZXNzaW9uSWQ6Sn0pLHE9Wj8/KHR5cGVvZiBuYXZpZ2F0b3I8InUiJiZ0eXBlb2YgbmF2aWdhdG9yLnNlbmRCZWFjb249PT0iZnVuY3Rpb24iP25hdmlnYXRvci5zZW5kQmVhY29uLmJpbmQobmF2aWdhdG9yKTp2b2lkIDApO2lmKFEmJnEpdHJ5e2lmKHEoJCxuZXcgQmxvYihbWV0se3R5cGU6InRleHQvcGxhaW47Y2hhcnNldD1VVEYtOCJ9KSkpcmV0dXJufWNhdGNoe31hd2FpdCBYKCQse21ldGhvZDoiUE9TVCIsaGVhZGVyczp7IkNvbnRlbnQtVHlwZSI6ImFwcGxpY2F0aW9uL2pzb24ifSxib2R5Olksa2VlcGFsaXZlOlF9KS50aGVuKCgpPT57cmV0dXJufSwoKT0+e3JldHVybn0pfWFzeW5jIGZ1bmN0aW9uIEY0KHt1cmw6JCxib2R5Okosc2lnbmFsOlEscmVxdWVzdFRpbWVvdXRNczpaLGJ1c3lSZXRyeUludGVydmFsTXM6WCxidXN5UmV0cnlDb3VudDpZLGZldGNoSW1wbDpxPWZldGNofSl7Zm9yKGxldCBHPTA7Rzw9WTtHKyspe2lmKFE/LmFib3J0ZWQpdGhyb3cgZDUoUSk7bGV0IFY9bmV3IEFib3J0Q29udHJvbGxlcixCPSExLE49KCk9PlYuYWJvcnQoUT9kNShRKTp2b2lkIDApO1E/LmFkZEV2ZW50TGlzdGVuZXIoImFib3J0IixOLHtvbmNlOiEwfSk7bGV0IHo9c2V0VGltZW91dCgoKT0+e0I9ITAsVi5hYm9ydCgpfSxaKSxMO3RyeXtMPWF3YWl0IHEoJCx7bWV0aG9kOiJQT1NUIixoZWFkZXJzOnsiQ29udGVudC1UeXBlIjoiYXBwbGljYXRpb24vanNvbiJ9LHNpZ25hbDpWLnNpZ25hbCxib2R5Okp9KX1jYXRjaChDKXtpZihCJiYhUT8uYWJvcnRlZCl0aHJvdyBuZXcgYzU7dGhyb3cgQ31maW5hbGx5e2NsZWFyVGltZW91dCh6KSxRPy5yZW1vdmVFdmVudExpc3RlbmVyKCJhYm9ydCIsTil9aWYoTC5zdGF0dXMhPT00MDkpcmV0dXJuIEw7aWYoYXdhaXQgTC5ib2R5Py5jYW5jZWwoKSxHPT09WSl0aHJvdyBuZXcgYTI7YXdhaXQgYlEoWCxRKX10aHJvdyBuZXcgYTJ9dmFyIFNRPVt7dXJsczpbInN0dW46c3R1bi5sLmdvb2dsZS5jb206MTkzMDIiXX0se3VybHM6WyJzdHVuOnN0dW4xLmwuZ29vZ2xlLmNvbToxOTMwMiJdfV0seFE9MzAwMCx2UT0yMDAwMCxqUT00MDAwLGhRPTUwMCxSUT0zMCxnUT01MDAsbVE9NTAwMDtmdW5jdGlvbiBNNCgpe2lmKHR5cGVvZiBjcnlwdG8ucmFuZG9tVVVJRD09PSJmdW5jdGlvbiIpcmV0dXJuIGNyeXB0by5yYW5kb21VVUlEKCk7bGV0ICQ9Y3J5cHRvLmdldFJhbmRvbVZhbHVlcyhuZXcgVWludDhBcnJheSgxNikpOyRbNl09JFs2XSYxNXw2NCwkWzhdPSRbOF0mNjN8MTI4O2xldCBKPUFycmF5LmZyb20oJCwoUSk9PlEudG9TdHJpbmcoMTYpLnBhZFN0YXJ0KDIsIjAiKSkuam9pbigiIik7cmV0dXJuYCR7Si5zbGljZSgwLDgpfS0ke0ouc2xpY2UoOCwxMil9LSR7Si5zbGljZSgxMiwxNil9LSR7Si5zbGljZSgxNiwyMCl9LSR7Si5zbGljZSgyMCl9YH1mdW5jdGlvbiBXNCh7b2ZmZXJVcmw6JCxjbG9zZVVybDpKLGVuYWJsZWQ6USxjb2RlYzpaPSJoMjY0IixpY2VTZXJ2ZXJzOlh9KXtsZXRbWSxxXT1XKG51bGwpLFtHLFZdPVcobnVsbCksW0IsTl09VyhudWxsKSxbeixMXT1XKDApLEM9RSh2b2lkIDApLEE9RSghMSksVT1FKDApLEg9RCgoKT0+e2lmKEEuY3VycmVudD0hMCxVLmN1cnJlbnQ9MCxDLmN1cnJlbnQhPT12b2lkIDApd2luZG93LmNsZWFyVGltZW91dChDLmN1cnJlbnQpLEMuY3VycmVudD12b2lkIDA7VihudWxsKSxOKG51bGwpfSxbXSk7cmV0dXJuIGIoKCk9PntVLmN1cnJlbnQ9MH0sW1EsJCxKLFosWF0pLGIoKCk9PntpZighUXx8ISQpcmV0dXJuO2lmKFYobnVsbCksdHlwZW9mIFJUQ1BlZXJDb25uZWN0aW9uPiJ1Inx8dHlwZW9mIFJUQ1J0cFJlY2VpdmVyPiJ1Iil7cShudWxsKSxOKCJXZWJSVEMgaXMgbm90IHN1cHBvcnRlZCBieSB0aGlzIGJyb3dzZXIuIiksVih7c2Vzc2lvbklkOk00KCksa2luZDoicGVybWFuZW50In0pO3JldHVybn1sZXQgaz0hMSxGPW51bGwsdyxUPW51bGwsUz0hMSx4PW5ldyBBYm9ydENvbnRyb2xsZXIsJDE9TTQoKSxmPVg/Lmxlbmd0aD9YOlNRO2lmKHEobnVsbCksVihudWxsKSxOKG51bGwpLEEuY3VycmVudD0hMSxDLmN1cnJlbnQhPT12b2lkIDApd2luZG93LmNsZWFyVGltZW91dChDLmN1cnJlbnQpLEMuY3VycmVudD12b2lkIDA7bGV0IGk9KHY9ITEpPT57aWYoVClyZXR1cm4gVDtyZXR1cm4gVD1PNCh7dXJsOkosc2Vzc2lvbklkOiQxLGtlZXBhbGl2ZTp2fSksVH0scj0oKT0+dm9pZCBpKCEwKTt3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigicGFnZWhpZGUiLHIpLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJiZWZvcmV1bmxvYWQiLHIpO2xldCBsPSgpPT57cShudWxsKSxGPy5jbG9zZSgpfSxvPSh2KT0+e2lmKGt8fFMpcmV0dXJuO1M9ITAsTih2KSxWKHtzZXNzaW9uSWQ6JDEsa2luZDoicGVybWFuZW50In0pLGwoKSxpKCl9LFExPSgpPT57aWYoa3x8UylyZXR1cm47Uz0hMCxsKCksaSgpLmZpbmFsbHkoKCk9PntpZighaylWKHtzZXNzaW9uSWQ6JDEsa2luZDoiY29kZWMiLGNvZGVjOlp9KX0pfSxOMT0odik9PntpZihrfHxTKXJldHVybjtTPSEwLFYobnVsbCk7bGV0IG49VS5jdXJyZW50KyssWDE9TWF0aC5taW4oZ1EqMioqTWF0aC5taW4obiw0KSxtUSk7TihgJHt2fSBSZXRyeWluZy4uLmApLGwoKSxpKCkuZmluYWxseSgoKT0+e2lmKGspcmV0dXJuO3c9d2luZG93LnNldFRpbWVvdXQoKCk9PntpZighaylMKChMMSk9PkwxKzEpfSxYMSl9KX0sYz0odik9Pm5ldyBQcm9taXNlKChuKT0+e2lmKHYuaWNlR2F0aGVyaW5nU3RhdGU9PT0iY29tcGxldGUiKXtuKCk7cmV0dXJufWxldCBYMSxMMT0hMSxKMT0oKT0+e2lmKEwxKXJldHVybjtpZihMMT0hMCx2LnJlbW92ZUV2ZW50TGlzdGVuZXIoImljZWdhdGhlcmluZ3N0YXRlY2hhbmdlIixZMSksWDEhPT12b2lkIDApd2luZG93LmNsZWFyVGltZW91dChYMSk7bigpfSxZMT0oKT0+e2lmKHYuaWNlR2F0aGVyaW5nU3RhdGU9PT0iY29tcGxldGUiKUoxKCl9O3YuYWRkRXZlbnRMaXN0ZW5lcigiaWNlZ2F0aGVyaW5nc3RhdGVjaGFuZ2UiLFkxKSxYMT13aW5kb3cuc2V0VGltZW91dChKMSx4USl9KTtyZXR1cm4oYXN5bmMoKT0+e3RyeXtGPW5ldyBSVENQZWVyQ29ubmVjdGlvbih7aWNlU2VydmVyczpmLGljZVRyYW5zcG9ydFBvbGljeTprNH0pO2xldCB2PUYuYWRkVHJhbnNjZWl2ZXIoInZpZGVvIix7ZGlyZWN0aW9uOiJyZWN2b25seSJ9KSxuPVJUQ1J0cFJlY2VpdmVyLmdldENhcGFiaWxpdGllcygidmlkZW8iKSxYMT1aPT09ImgyNjQiPyJ2aWRlby9IMjY0IjpaPT09InZwOSI/InZpZGVvL1ZQOSI6InZpZGVvL1ZQOCI7aWYobj8uY29kZWNzLmxlbmd0aCYmInNldENvZGVjUHJlZmVyZW5jZXMiaW4gdil7bGV0IHk9WDEudG9Mb3dlckNhc2UoKTt2LnNldENvZGVjUHJlZmVyZW5jZXMoWy4uLm4uY29kZWNzLmZpbHRlcigoZyk9PmcubWltZVR5cGUudG9Mb3dlckNhc2UoKT09PXkpLC4uLm4uY29kZWNzLmZpbHRlcigoZyk9PmcubWltZVR5cGUudG9Mb3dlckNhc2UoKSE9PXkpXSl9Ri5vbnRyYWNrPSh5KT0+e2lmKGspcmV0dXJuO2lmKEEuY3VycmVudD0hMSx5LnRyYWNrLm9uZW5kZWQ9KCk9Pk4xKCJXZWJSVEMgdmlkZW8gdHJhY2sgZW5kZWQuIikscSh5LnN0cmVhbXNbMF0/P25ldyBNZWRpYVN0cmVhbShbeS50cmFja10pKSxDLmN1cnJlbnQhPT12b2lkIDApd2luZG93LmNsZWFyVGltZW91dChDLmN1cnJlbnQpO0MuY3VycmVudD13aW5kb3cuc2V0VGltZW91dCgoKT0+e2lmKEMuY3VycmVudD12b2lkIDAsa3x8QS5jdXJyZW50KXJldHVybjtsZXQgZz1GPy5jb25uZWN0aW9uU3RhdGU/PyJjbG9zZWQiO2lmKGw1KCJmaXJzdC1mcmFtZS10aW1lb3V0IixnKT09PSJjb2RlYyIpUTEoKTtlbHNlIE4xKCJXZWJSVEMgZGlkIG5vdCBlc3RhYmxpc2ggYSB2aWRlbyBwYXRoLiIpfSxqUSl9LEYub25jb25uZWN0aW9uc3RhdGVjaGFuZ2U9KCk9PntpZihrfHwhRnx8Ri5jb25uZWN0aW9uU3RhdGUhPT0iZmFpbGVkIilyZXR1cm47aWYobDUoImNvbm5lY3Rpb24tZmFpbGVkIixGLmNvbm5lY3Rpb25TdGF0ZSk9PT0idHJhbnNwb3J0IilOMSgiV2ViUlRDIGNvbm5lY3Rpb24gZmFpbGVkLiIpfTtsZXQgTDE9YXdhaXQgRi5jcmVhdGVPZmZlcigpO2F3YWl0IEYuc2V0TG9jYWxEZXNjcmlwdGlvbihMMSksYXdhaXQgYyhGKTtsZXQgSjE9Ri5sb2NhbERlc2NyaXB0aW9uO2lmKCFKMSl0aHJvdyBFcnJvcigiV2ViUlRDIG9mZmVyIHdhcyBub3QgY3JlYXRlZCIpO2xldCBZMT1hd2FpdCBGNCh7dXJsOiQsc2lnbmFsOnguc2lnbmFsLHJlcXVlc3RUaW1lb3V0TXM6dlEsYnVzeVJldHJ5SW50ZXJ2YWxNczpoUSxidXN5UmV0cnlDb3VudDpSUSxib2R5OkpTT04uc3RyaW5naWZ5KHt0eXBlOkoxLnR5cGUsc2RwOkoxLnNkcCxzZXNzaW9uSWQ6JDEsY29kZWM6WixpY2VTZXJ2ZXJzOmZ9KX0pO2lmKCFZMS5vayl7YXdhaXQgWTEuYm9keT8uY2FuY2VsKCksbyhgV2ViUlRDIG9mZmVyIGZhaWxlZDogSFRUUCAke1kxLnN0YXR1c31gKTtyZXR1cm59bGV0IEgxPWF3YWl0IFkxLmpzb24oKTtpZihrKXthd2FpdCBpKCEwKTtyZXR1cm59dHJ5e2F3YWl0IEYuc2V0UmVtb3RlRGVzY3JpcHRpb24oSDEpfWNhdGNoe28oIldlYlJUQyByZXR1cm5lZCBhbiBpbnZhbGlkIHNlc3Npb24gZGVzY3JpcHRpb24uIil9fWNhdGNoKHYpe2lmKGt8fHguc2lnbmFsLmFib3J0ZWQpcmV0dXJuO2lmKHYgaW5zdGFuY2VvZiBhMil7byh2Lm1lc3NhZ2UpO3JldHVybn1sZXQgbj12IGluc3RhbmNlb2YgYzU/IldlYlJUQyBzaWduYWxpbmcgdGltZWQgb3V0LiI6IldlYlJUQyBzaWduYWxpbmcgZmFpbGVkLiI7aWYobDUoInNpZ25hbGluZy1mYWlsZWQiLEY/LmNvbm5lY3Rpb25TdGF0ZT8/ImNsb3NlZCIpPT09InRyYW5zcG9ydCIpTjEobil9fSkoKSwoKT0+e2lmKGs9ITAsd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoInBhZ2VoaWRlIixyKSx3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigiYmVmb3JldW5sb2FkIixyKSx4LmFib3J0KCksdyE9PXZvaWQgMCl3aW5kb3cuY2xlYXJUaW1lb3V0KHcpO2lmKEMuY3VycmVudCE9PXZvaWQgMCl3aW5kb3cuY2xlYXJUaW1lb3V0KEMuY3VycmVudCksQy5jdXJyZW50PXZvaWQgMDtpKCEwKSxxKG51bGwpLEY/LmNsb3NlKCl9fSxbUSwkLEosWixYLHpdKSx7c3RyZWFtOlksZmFpbHVyZTpHLGVycm9yOkIsbWFya0ZyYW1lRGVjb2RlZDpIfX1mdW5jdGlvbiBvNSgkLEosUSxaLFg9ImxlZnQiKXtsZXQgWT1EKChMLEMpPT5YPT09ImxlZnQiP0wtQzpDLUwsW1hdKSxxPUQoKEwpPT5NYXRoLm1heChRLE1hdGgubWluKFosTCkpLFtRLFpdKSxbRyxWXT1XKCgpPT57aWYodHlwZW9mIHdpbmRvdz4idSIpcmV0dXJuIEo7bGV0IEw9d2luZG93LmxvY2FsU3RvcmFnZS5nZXRJdGVtKCQpLEM9TCE9bnVsbD9OdW1iZXIoTCk6TmFOO3JldHVybiBOdW1iZXIuaXNGaW5pdGUoQyk/cShDKTpKfSksQj10eXBlb2Ygd2luZG93PCJ1Ij9NYXRoLm1pbihaLHdpbmRvdy5pbm5lcldpZHRoLTMyKTpaLE49TWF0aC5tYXgoUSxNYXRoLm1pbihCLEcpKSx6PUQoKEwpPT57TC5wcmV2ZW50RGVmYXVsdCgpO2xldCBDPUwuY2xpZW50WCxBPU4sVT1MLmN1cnJlbnRUYXJnZXQ7VS5zZXRQb2ludGVyQ2FwdHVyZShMLnBvaW50ZXJJZCk7bGV0IEg9KEYpPT57bGV0IHc9cShBK1koQyxGLmNsaWVudFgpKTtWKHcpfSxrPShGKT0+e1UucmVsZWFzZVBvaW50ZXJDYXB0dXJlKEYucG9pbnRlcklkKSxVLnJlbW92ZUV2ZW50TGlzdGVuZXIoInBvaW50ZXJtb3ZlIixIKSxVLnJlbW92ZUV2ZW50TGlzdGVuZXIoInBvaW50ZXJ1cCIsayksVS5yZW1vdmVFdmVudExpc3RlbmVyKCJwb2ludGVyY2FuY2VsIixrKTt0cnl7d2luZG93LmxvY2FsU3RvcmFnZS5zZXRJdGVtKCQsU3RyaW5nKHEoQStZKEMsRi5jbGllbnRYKSkpKX1jYXRjaHt9fTtVLmFkZEV2ZW50TGlzdGVuZXIoInBvaW50ZXJtb3ZlIixIKSxVLmFkZEV2ZW50TGlzdGVuZXIoInBvaW50ZXJ1cCIsayksVS5hZGRFdmVudExpc3RlbmVyKCJwb2ludGVyY2FuY2VsIixrKX0sW3EsWSxOLCRdKTtyZXR1cm57d2lkdGg6TixvblBvaW50ZXJEb3duOnp9fXZhciBmUT04MDAwO2Z1bmN0aW9uIHBRKCQpe3JldHVybiJmaWxlOi8vIiskLnNwbGl0KCIvIikubWFwKGVuY29kZVVSSUNvbXBvbmVudCkuam9pbigiLyIpfWZ1bmN0aW9uIHVRKCQpe3JldHVybiAkIT09Im5vbmUifWZ1bmN0aW9uIFA0KHt0b2FzdDokLG9uUmV2ZWFsOkosb25EaXNtaXNzOlEsb25QYXVzZTpaLG9uUmVzdW1lOlh9KXtsZXRbWSxxXT1XKCExKSxHPUUobnVsbCksVj1FKG51bGwpLEI9KCk9PntpZihWLmN1cnJlbnQpY2xlYXJUaW1lb3V0KFYuY3VycmVudCk7Vi5jdXJyZW50PW51bGx9O2IoKCk9PigpPT5CKCksW10pO2xldCBOPShMKT0+e2lmKCEkLnBhdGgpe0wucHJldmVudERlZmF1bHQoKTtyZXR1cm59QigpLFooKSxWLmN1cnJlbnQ9c2V0VGltZW91dCgoKT0+e1YuY3VycmVudD1udWxsLHEoITEpLFgoKX0sZlEpLEwuZGF0YVRyYW5zZmVyLnNldERhdGEoInRleHQvcGxhaW4iLHBRKCQucGF0aCkpLEwuZGF0YVRyYW5zZmVyLnNldERhdGEodTUsJC5wYXRoKSxMLmRhdGFUcmFuc2Zlci5lZmZlY3RBbGxvd2VkPSJjb3B5IjtsZXQgQz1HLmN1cnJlbnQ7aWYoQylMLmRhdGFUcmFuc2Zlci5zZXREcmFnSW1hZ2UoQyxDLm9mZnNldFdpZHRoLzIsQy5vZmZzZXRIZWlnaHQvMik7cmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT5xKCEwKSl9LHo9KEwpPT57aWYoQigpLHEoITEpLHVRKEwuZGF0YVRyYW5zZmVyLmRyb3BFZmZlY3QpKVEoKTtlbHNlIFgoKX07cmV0dXJuIEsoImRpdiIseyJkYXRhLXRlc3RpZCI6InNjcmVlbnNob3QtdG9hc3QiLGNsYXNzTmFtZToidy1bbWluKDMyMHB4LGNhbGMoMTAwdnctMzJweCkpXSIsb25Nb3VzZUVudGVyOlosb25Nb3VzZUxlYXZlOlgsY2hpbGRyZW46WyQudGh1bWImJksoImltZyIse3JlZjpHLCJkYXRhLXRlc3RpZCI6ImRyYWctaW1hZ2UiLHNyYzokLnRodW1iLGFsdDoiIiwiYXJpYS1oaWRkZW4iOiEwLGRyYWdnYWJsZTohMSxzdHlsZTp7cG9zaXRpb246ImFic29sdXRlIix0b3A6LTk5OTksbGVmdDowLHdpZHRoOjgwLGhlaWdodDo4MCxib3JkZXJSYWRpdXM6MTIsb2JqZWN0Rml0OiJjb3ZlciIscG9pbnRlckV2ZW50czoibm9uZSJ9fSksJC5zdGF0dXM9PT0iZXJyb3IiP0soImRpdiIse2NsYXNzTmFtZToiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTIgcHgtMy41IHB5LTIuNSBiZy1wYW5lbCBib3JkZXIgYm9yZGVyLXdoaXRlLzEyIHJvdW5kZWQteGwgdGV4dC13aGl0ZS85MCB0ZXh0LVsxMnB4XSBzaGFkb3ctWzBfOHB4XzI0cHhfcmdiYSgwLDAsMCwwLjQ1KV0iLGNoaWxkcmVuOltLKCJzcGFuIix7Y2xhc3NOYW1lOiJzaXplLTEuNSByb3VuZGVkLWZ1bGwgc2hyaW5rLTAgYmctWyNmODcxNzFdIn0pLEsoInNwYW4iLHtjbGFzc05hbWU6InNlbGVjdC10ZXh0IixjaGlsZHJlbjokLm1lc3NhZ2U/PyJTY3JlZW5zaG90IGZhaWxlZCJ9KV19KTpLKCJidXR0b24iLHt0eXBlOiJidXR0b24iLG9uQ2xpY2s6SixkaXNhYmxlZDokLnN0YXR1cyE9PSJzYXZlZCIsZHJhZ2dhYmxlOiQuc3RhdHVzPT09InNhdmVkIixvbkRyYWdTdGFydDpOLG9uRHJhZ0VuZDp6LCJhcmlhLWxhYmVsIjoiT3BlbiBzY3JlZW5zaG90IGluIEZpbmRlciIsdGl0bGU6IkNsaWNrIHRvIHJldmVhbCBpbiBGaW5kZXIgwrcgZHJhZyB0byBjb3B5IHRoZSBmaWxlIixjbGFzc05hbWU6YGdyb3VwIGZsZXggdy1mdWxsIGl0ZW1zLWNlbnRlciBnYXAtMyBwbC0yIHByLTMuNSBweS0yIGJnLXBhbmVsIGJvcmRlciBib3JkZXItd2hpdGUvMTIgcm91bmRlZC14bCBzaGFkb3ctWzBfOHB4XzI0cHhfcmdiYSgwLDAsMCwwLjQ1KV0gdGV4dC1sZWZ0IGN1cnNvci1wb2ludGVyIGVuYWJsZWQ6aG92ZXI6YmctWyMyYTJhMmNdIGRpc2FibGVkOmN1cnNvci1kZWZhdWx0IFt0cmFuc2l0aW9uOmJhY2tncm91bmRfMC4xNXNfZWFzZV0gJHtZPyJpbnZpc2libGUiOiIifWAsY2hpbGRyZW46W0soImRpdiIse2NsYXNzTmFtZToic2l6ZS05IHJvdW5kZWQtbWQgb3ZlcmZsb3ctaGlkZGVuIGJnLXdoaXRlLzEwIHNocmluay0wIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHJpbmctMSByaW5nLXdoaXRlLzEwIHBvaW50ZXItZXZlbnRzLW5vbmUiLGNoaWxkcmVuOiQudGh1bWI/SygiaW1nIix7c3JjOiQudGh1bWIsYWx0OiIiLGNsYXNzTmFtZToic2l6ZS1mdWxsIG9iamVjdC1jb3ZlciIsZHJhZ2dhYmxlOiExfSk6Sygic3BhbiIse2NsYXNzTmFtZToiYmxvY2sgc2l6ZS00IHJvdW5kZWQtZnVsbCBib3JkZXItMiBib3JkZXItd2hpdGUvMzAgYm9yZGVyLXQtd2hpdGUgYW5pbWF0ZS1bZ3JpZC1zcGluXzAuOHNfbGluZWFyX2luZmluaXRlXSJ9KX0pLEsoImRpdiIse2NsYXNzTmFtZToiZmxleCBmbGV4LWNvbCBsZWFkaW5nLXRpZ2h0IHBvaW50ZXItZXZlbnRzLW5vbmUiLGNoaWxkcmVuOltLKCJzcGFuIix7Y2xhc3NOYW1lOiJ0ZXh0LVsxM3B4XSBmb250LXNlbWlib2xkIHRleHQtd2hpdGUiLGNoaWxkcmVuOiQuc3RhdHVzPT09InNhdmluZyI/IlNhdmluZyBTY3JlZW5zaG904oCmIjoiU2NyZWVuc2hvdCBTYXZlZCJ9KSwkLnN0YXR1cz09PSJzYXZlZCImJksoInNwYW4iLHtjbGFzc05hbWU6InRleHQtWzExcHhdIHRleHQtd2hpdGUvNjAiLGNoaWxkcmVuOiJPcGVuIGluIEZpbmRlciJ9KV19KSwkLnN0YXR1cz09PSJzYXZlZCImJksoeTIse2NsYXNzTmFtZToibWwtYXV0byB0ZXh0LXdoaXRlLzgwIHBvaW50ZXItZXZlbnRzLW5vbmUiLHNpemU6MTYsc3Ryb2tlV2lkdGg6Mi4yNX0pXX0pXX0pfXZhciBfND0zNTAwLEQ0PTQwMDA7ZnVuY3Rpb24gbFEoKXtyZXR1cm4gbmV3IERhdGUoKS50b0lTT1N0cmluZygpLnJlcGxhY2UoL1s6Ll0vZywiLSIpLnNsaWNlKDAsMjMpfWZ1bmN0aW9uIFQ0KCQpe2xldCBKPUUobnVsbCksUT1FKG51bGwpLFo9RShudWxsKSxYPUUobnVsbCksWT1FKG51bGwpLHE9RCgoKT0+e2lmKFouY3VycmVudCljbGVhclRpbWVvdXQoWi5jdXJyZW50KTtaLmN1cnJlbnQ9bnVsbCxYLmN1cnJlbnQ9bnVsbH0sW10pLEc9RCgoQSk9PntsZXQgVT1BPz9RLmN1cnJlbnQ/P3ZvaWQgMDtpZihxKCksWS5jdXJyZW50PW51bGwsZDIuZGlzbWlzcyhVKSxVPT09dm9pZCAwfHxRLmN1cnJlbnQ9PT1TdHJpbmcoVSkpSi5jdXJyZW50PW51bGwsUS5jdXJyZW50PW51bGx9LFtxXSksVj1EKCgpPT57bGV0IEE9Si5jdXJyZW50O2lmKEE/LnBhdGgpSTEoYG9wZW4gLVIgJHtPMShBLnBhdGgpfWApfSxbXSksQj1EKChBKT0+e3EoKTtsZXQgVT1NYXRoLm1heCgwLEEpLEg9US5jdXJyZW50O1kuY3VycmVudD1VLFguY3VycmVudD1EYXRlLm5vdygpK1UsWi5jdXJyZW50PXNldFRpbWVvdXQoKCk9PkcoSD8/dm9pZCAwKSxVKX0sW3EsR10pLE49RCgoKT0+e2lmKCFaLmN1cnJlbnR8fFguY3VycmVudD09bnVsbClyZXR1cm47WS5jdXJyZW50PU1hdGgubWF4KDAsWC5jdXJyZW50LURhdGUubm93KCkpLHEoKX0sW3FdKSx6PUQoKCk9PntsZXQgQT1ZLmN1cnJlbnQ7aWYoQT09bnVsbClyZXR1cm47QihBKX0sW0JdKSxMPUQoKEEsVT0xLzApPT57aWYoSi5jdXJyZW50PUEsUS5jdXJyZW50PUEuaWQsZDIuY3VzdG9tKChIKT0+SyhQNCx7dG9hc3Q6QSxvblJldmVhbDpWLG9uRGlzbWlzczooKT0+RyhIKSxvblBhdXNlOk4sb25SZXN1bWU6en0pLHtpZDpBLmlkLGR1cmF0aW9uOjEvMH0pLE51bWJlci5pc0Zpbml0ZShVKSlCKFUpO2Vsc2UgcSgpLFkuY3VycmVudD1udWxsfSxbcSxHLE4seixWLEJdKTtyZXR1cm57Y2FwdHVyZTpEKGFzeW5jKCk9PntpZighJClyZXR1cm47bGV0IEE9Y3J5cHRvLnJhbmRvbVVVSUQoKTtMKHtpZDpBLHN0YXR1czoic2F2aW5nIixwaGFzZToiaW4ifSk7bGV0IEg9YEY9IiR7YCRIT01FL0Rlc2t0b3Avc2VydmUtc2ltLXNjcmVlbnNob3QtJHtsUSgpfS5wbmdgfSI7IHhjcnVuIHNpbWN0bCBpbyAke08xKCQpfSBzY3JlZW5zaG90ICIkRiIgJiYgcHJpbnRmICclcycgIiRGImAsazt0cnl7bGV0IHc9YXdhaXQgSTEoSCk7aWYoaz13LnN0ZG91dC50cmltKCksdy5leGl0Q29kZSE9PTB8fCFrKXtMKHtpZDpBLHN0YXR1czoiZXJyb3IiLHBoYXNlOiJpbiIsbWVzc2FnZTp3LnN0ZGVyci50cmltKCl8fCJTY3JlZW5zaG90IGZhaWxlZCJ9LEQ0KTtyZXR1cm59fWNhdGNoKHcpe0woe2lkOkEsc3RhdHVzOiJlcnJvciIscGhhc2U6ImluIixtZXNzYWdlOncgaW5zdGFuY2VvZiBFcnJvcj93Lm1lc3NhZ2U6IlNjcmVlbnNob3QgZmFpbGVkIn0sRDQpO3JldHVybn1MKHtpZDpBLHN0YXR1czoic2F2ZWQiLHBoYXNlOiJpbiIscGF0aDprfSxfNCk7bGV0IEY9YC90bXAvc2VydmUtc2ltLXNjcmVlbnNob3QtdGh1bWItJHtBfS5wbmdgO3RyeXtsZXQgVD0oYXdhaXQgSTEoYHNpcHMgLVogMzIwICR7TzEoayl9IC0tb3V0ICR7TzEoRil9ID4vZGV2L251bGwgMj4mMSAmJiBiYXNlNjQgLWkgJHtPMShGKX07IHJtIC1mICR7TzEoRil9YCkpLnN0ZG91dC5yZXBsYWNlKC9ccysvZywiIik7aWYoVCl7bGV0IFM9Si5jdXJyZW50O2lmKFM/LmlkPT09QSlMKHsuLi5TLHRodW1iOmBkYXRhOmltYWdlL3BuZztiYXNlNjQsJHtUfWB9LF80KX19Y2F0Y2h7fX0sWyQsTF0pLHJldmVhbDpWLGRpc21pc3M6R319ZnVuY3Rpb24gRTQoe2RlZmF1bHRXaWR0aDokLHZpZXdwb3J0V2lkdGg6Six2aWV3cG9ydEhlaWdodDpRLGFzcGVjdFJhdGlvOlosb25TdGFydDpYfSl7bGV0IFk9ajUoKSxbcSxHXT1XKCExKSxbVixCXT1XKCExKSxbTix6XT1XKCExKSxMPUUobnVsbCksQz1FKFtdKSxBPUUobnVsbCksVT1FKG51bGwpLEg9RShudWxsKSxrPUUobnVsbCksRj1EKCgpPT57aWYodHlwZW9mIHdpbmRvdz4idSIpcmV0dXJuICQ7bGV0IFA9TmFOO3RyeXtsZXQgcD13aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0oZzMpO1A9cCE9bnVsbD9OdW1iZXIocCk6TmFOfWNhdGNoe31yZXR1cm4gazYoJCxKLFEsWixQKX0sW1osJCxRLEpdKSx3PUUxKCgpPT5GKCksW0ZdKSxbVCxTXT1XKHcpLHg9RSh3KSwkMT1FKCQpLGY9bTMoJCxKLFEsWiksaT1NYXRoLm1pbigkNixmKSxyPVQ/PyQsbD1hMChyLCQsSixRLFopLG89RCgoUCk9PntsZXQgcD1nNShQKTt4LmN1cnJlbnQ9cCxTKHApfSxbXSksUTE9RCgoUCk9PntpZih0eXBlb2Ygd2luZG93PiJ1Inx8JDw9MClyZXR1cm47bGV0IHA9YTAoUCwkLEosUSxaKTt0cnl7d2luZG93LmxvY2FsU3RvcmFnZS5zZXRJdGVtKGczLFN0cmluZyhwLyQpKX1jYXRjaHt9fSxbWiwkLFEsSl0pLE4xPUQoKFApPT57aWYoSC5jdXJyZW50IT1udWxsKWNsZWFyVGltZW91dChILmN1cnJlbnQpO0guY3VycmVudD1zZXRUaW1lb3V0KCgpPT57SC5jdXJyZW50PW51bGwsUTEoUCl9LEE2KX0sW1ExXSk7YigoKT0+e2lmKHF8fFYpcmV0dXJuO2xldCBQPXguY3VycmVudDtpZihQPT1udWxsKXJldHVybjtsZXQgcD1hMChQLCQsSixRLFopO2lmKHAhPT1QKW8ocCl9LFtaLCQsVixxLFEsSixvXSksYigoKT0+e2lmKCQxLmN1cnJlbnQ9PT0kKXJldHVybjskMS5jdXJyZW50PSQsbyhGKCkpfSxbJCxGLG9dKSxiKCgpPT57aWYoIXEmJiFWKXJldHVybjtsZXQgUD1kb2N1bWVudC5ib2R5LnN0eWxlLmN1cnNvcixwPWRvY3VtZW50LmJvZHkuc3R5bGUudXNlclNlbGVjdCx1PWRvY3VtZW50LmJvZHkuc3R5bGUud2Via2l0VXNlclNlbGVjdDtyZXR1cm4gZG9jdW1lbnQuYm9keS5zdHlsZS5jdXJzb3I9Im53c2UtcmVzaXplIixkb2N1bWVudC5ib2R5LnN0eWxlLnVzZXJTZWxlY3Q9Im5vbmUiLGRvY3VtZW50LmJvZHkuc3R5bGUud2Via2l0VXNlclNlbGVjdD0ibm9uZSIsKCk9Pntkb2N1bWVudC5ib2R5LnN0eWxlLmN1cnNvcj1QLGRvY3VtZW50LmJvZHkuc3R5bGUudXNlclNlbGVjdD1wLGRvY3VtZW50LmJvZHkuc3R5bGUud2Via2l0VXNlclNlbGVjdD11fX0sW3EsVl0pLGIoKCk9PntpZih0eXBlb2Ygd2luZG93PiJ1IilyZXR1cm47bGV0IFA9KCk9PntsZXQgdT14LmN1cnJlbnQ7aWYodT09bnVsbClyZXR1cm47aWYoSC5jdXJyZW50IT1udWxsKWNsZWFyVGltZW91dChILmN1cnJlbnQpLEguY3VycmVudD1udWxsO1ExKHUpfSxwPSgpPT57aWYoZG9jdW1lbnQudmlzaWJpbGl0eVN0YXRlPT09ImhpZGRlbiIpUCgpfTtyZXR1cm4gd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInBhZ2VoaWRlIixQKSxkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJ2aXNpYmlsaXR5Y2hhbmdlIixwKSwoKT0+e3dpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJwYWdlaGlkZSIsUCksZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigidmlzaWJpbGl0eWNoYW5nZSIscCl9fSxbUTFdKTtsZXQgYz1EKChQKT0+e2lmKFA+ZilyZXR1cm4gZitmMyhQLWYsZik7aWYoUDxpKXJldHVybiBpLWYzKGktUCxmKTtyZXR1cm4gUH0sW2YsaV0pLHY9RCgoKT0+e2lmKFUuY3VycmVudClVLmN1cnJlbnQoKSxVLmN1cnJlbnQ9bnVsbDtCKCExKX0sW10pLG49RCgoUCk9PntsZXQgcD1wZXJmb3JtYW5jZS5ub3coKSx1PUMuY3VycmVudDt1LnB1c2goe3Q6cCx4OlB9KTt3aGlsZSh1Lmxlbmd0aD4xJiZwLXVbMF0udD5INil1LnNoaWZ0KCl9LFtdKSxYMT1EKChQKT0+e2xldCBwPWMoUCk7aWYoQS5jdXJyZW50IT1udWxsKWNhbmNlbEFuaW1hdGlvbkZyYW1lKEEuY3VycmVudCk7QS5jdXJyZW50PXJlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+e0EuY3VycmVudD1udWxsLG8ocCksbihwKX0pfSxbYyxuLG9dKSxMMT1EKChQLHAsdSk9Pnt2KCk7bGV0IGo9eC5jdXJyZW50Pz8kO0wuY3VycmVudD17cG9pbnRlcklkOlAsc3RhcnRYOnAsc3RhcnRZOnUsc3RhcnRXaWR0aDpqfSxDLmN1cnJlbnQ9W3t0OnBlcmZvcm1hbmNlLm5vdygpLHg6an1dLFgoKSxHKCEwKX0sW3YsJCxYXSksSjE9RCgoKT0+e2xldCBQPUwuY3VycmVudDtpZihMLmN1cnJlbnQ9bnVsbCxBLmN1cnJlbnQhPW51bGwpY2FuY2VsQW5pbWF0aW9uRnJhbWUoQS5jdXJyZW50KSxBLmN1cnJlbnQ9bnVsbDtpZihQJiZQLnBvaW50ZXJJZD49MCl7bGV0IE0xPWsuY3VycmVudDtpZihNMT8uaGFzUG9pbnRlckNhcHR1cmUoUC5wb2ludGVySWQpKU0xLnJlbGVhc2VQb2ludGVyQ2FwdHVyZShQLnBvaW50ZXJJZCl9RyghMSk7bGV0IHA9eC5jdXJyZW50Pz8kLHU9TTYoQy5jdXJyZW50KTtDLmN1cnJlbnQ9W107bGV0IGo9YTAocCt1KlU2LCQsSixRLFopLEcxPWc1KE82KGosWyRdLEw2KSksejE9TWF0aC5hYnMocC1HMSk8MC41JiZNYXRoLmFicyh1KTw4O2lmKFl8fHoxKXtvKEcxKSxOMShHMSk7cmV0dXJufUIoITApLFUuY3VycmVudD1GNih7ZnJvbTpwLHRvOkcxLHZlbG9jaXR5OnUsc3RpZmZuZXNzOno2LGRhbXBpbmc6QzYsb25VcGRhdGU6byxvbkNvbXBsZXRlOigpPT57VS5jdXJyZW50PW51bGwsQighMSksTjEoRzEpfX0pfSxbWiwkLFksTjEsUSxKLG9dKTtiKCgpPT57cmV0dXJuKCk9PntpZih2KCksQS5jdXJyZW50IT1udWxsKWNhbmNlbEFuaW1hdGlvbkZyYW1lKEEuY3VycmVudCk7aWYoSC5jdXJyZW50IT1udWxsKXtpZihjbGVhclRpbWVvdXQoSC5jdXJyZW50KSx4LmN1cnJlbnQhPW51bGwpUTEoeC5jdXJyZW50KX19fSxbdixRMV0pLGIoKCk9PntpZighcSlyZXR1cm47bGV0IFA9KCk9PkoxKCkscD0oKT0+e2lmKGRvY3VtZW50LnZpc2liaWxpdHlTdGF0ZT09PSJoaWRkZW4iKUoxKCl9LHU9KGopPT57bGV0IEcxPUwuY3VycmVudDtpZighRzF8fEcxLnBvaW50ZXJJZCE9PWoucG9pbnRlcklkKXJldHVybjtqLnByZXZlbnREZWZhdWx0KCksWDEodzQoRzEsai5jbGllbnRYLGouY2xpZW50WSxaKSl9O3JldHVybiB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigiYmx1ciIsUCksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInBvaW50ZXJtb3ZlIix1LHtjYXB0dXJlOiEwLHBhc3NpdmU6ITF9KSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigicG9pbnRlcnVwIixQLCEwKSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigicG9pbnRlcmNhbmNlbCIsUCwhMCksZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigidmlzaWJpbGl0eWNoYW5nZSIscCksKCk9Pnt3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigiYmx1ciIsUCksd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoInBvaW50ZXJtb3ZlIix1LCEwKSx3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigicG9pbnRlcnVwIixQLCEwKSx3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigicG9pbnRlcmNhbmNlbCIsUCwhMCksZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigidmlzaWJpbGl0eWNoYW5nZSIscCl9fSxbWixKMSxxLFgxXSk7bGV0IFkxPUQoKFApPT57bGV0IHA9TC5jdXJyZW50O2lmKCFwfHxwLnBvaW50ZXJJZCE9PVAucG9pbnRlcklkKXJldHVybjtQLnByZXZlbnREZWZhdWx0KCksUC5zdG9wUHJvcGFnYXRpb24oKSxKMSgpfSxbSjFdKSxIMT1EKChQKT0+e2lmKFAuYnV0dG9uIT09MClyZXR1cm47UC5wcmV2ZW50RGVmYXVsdCgpLFAuc3RvcFByb3BhZ2F0aW9uKCksUC5jdXJyZW50VGFyZ2V0LnNldFBvaW50ZXJDYXB0dXJlKFAucG9pbnRlcklkKSxMMShQLnBvaW50ZXJJZCxQLmNsaWVudFgsUC5jbGllbnRZKX0sW0wxXSkseT1EKChQKT0+e2xldCBwPUwuY3VycmVudDtpZighcHx8cC5wb2ludGVySWQhPT1QLnBvaW50ZXJJZClyZXR1cm47UC5wcmV2ZW50RGVmYXVsdCgpLFgxKHc0KHAsUC5jbGllbnRYLFAuY2xpZW50WSxaKSl9LFtaLFgxXSksZz1EKChQKT0+e2xldCBwPVAua2V5PT09IkFycm93UmlnaHQifHxQLmtleT09PSJBcnJvd0Rvd24iPzE6UC5rZXk9PT0iQXJyb3dMZWZ0Inx8UC5rZXk9PT0iQXJyb3dVcCI/LTE6MDtpZihwPT09MClyZXR1cm47UC5wcmV2ZW50RGVmYXVsdCgpLHYoKTtsZXQgdT1QLnNoaWZ0S2V5PzgwOjI0LGo9ZzUoYTAobCtwKnUsJCxKLFEsWikpO28oaiksTjEoail9LFtaLHYsbCwkLE4xLFEsSixvXSk7cmV0dXJue2hhbmRsZVJlZjprLHdpZHRoOnIsY29tbWl0dGVkV2lkdGg6bCxtaW5XaWR0aDppLG1heFdpZHRoOmYsaXNSZXNpemluZzpxLGlzSW5lcnRpYTpWLGhhbmRsZUhvdmVyZWQ6TixoYW5kbGVBY3RpdmU6Tnx8cXx8VixzZXRIYW5kbGVIb3ZlcmVkOnosb25Qb2ludGVyRG93bjpIMSxvblBvaW50ZXJNb3ZlOnksb25Qb2ludGVyRW5kOlkxLG9uS2V5RG93bjpnfX1mdW5jdGlvbiB3NCgkLEosUSxaKXtsZXQgWD1KLSQuc3RhcnRYLFk9KFEtJC5zdGFydFkpKlo7cmV0dXJuICQuc3RhcnRXaWR0aCsoTWF0aC5hYnMoWCk+PU1hdGguYWJzKFkpP1g6WSl9ZnVuY3Rpb24gSTQoKXtsZXQgJD1FKG5ldyBNYXApLEo9RShuZXcgTWFwKSxRPUQoKEcpPT57bGV0IFY9Si5jdXJyZW50LmdldChHKTtpZihWKWNsZWFyVGltZW91dChWKTtKLmN1cnJlbnQuZGVsZXRlKEcpfSxbXSksWj1EKChHLFY9MS8wKT0+e2QyLmN1c3RvbSgoKT0+SyhJNix7dG9hc3Q6R30pLHtpZDpHLmlkLGR1cmF0aW9uOlZ9KX0sW10pLFg9RCgoRyxWKT0+e2xldCBCPWNyeXB0by5yYW5kb21VVUlEKCksTj17aWQ6QixuYW1lOkcsa2luZDpWLHN0YXR1czoidXBsb2FkaW5nIixwcm9ncmVzczowfTtyZXR1cm4gJC5jdXJyZW50LnNldChCLE4pLFooTiksQn0sW1pdKSxZPUQoKEcsVik9PntsZXQgQj0kLmN1cnJlbnQuZ2V0KEcpO2lmKCFCKXJldHVybjtRKEcpO2xldCBOPXsuLi5CLC4uLlZ9O2lmKCQuY3VycmVudC5zZXQoRyxOKSxaKE4sVi5zdGF0dXM9PT0ic3VjY2VzcyJ8fFYuc3RhdHVzPT09ImVycm9yIj8zMDAwOjEvMCksVi5zdGF0dXM9PT0ic3VjY2VzcyJ8fFYuc3RhdHVzPT09ImVycm9yIil7bGV0IHo9c2V0VGltZW91dCgoKT0+eyQuY3VycmVudC5kZWxldGUoRyksSi5jdXJyZW50LmRlbGV0ZShHKX0sMzAwMCk7Si5jdXJyZW50LnNldChHLHopfX0sW1EsWl0pLHE9RCgoRyxWKT0+e2xldCBCPSQuY3VycmVudC5nZXQoRyk7aWYoIUIpcmV0dXJuO2xldCBOPXsuLi5CLHByb2dyZXNzOlZ9OyQuY3VycmVudC5zZXQoRyxOKSxaKE4pfSxbWl0pO3JldHVybnthZGQ6WCx1cGRhdGU6WSxzZXRQcm9ncmVzczpxfX1mdW5jdGlvbiB5NCgkLEope2xldFtRLFpdPVcoW10pLFtYLFldPVcobnVsbCksW3EsR109VyghMSksVj1EKGFzeW5jKCk9PntpZighJClyZXR1cm47RyghMCksWShudWxsKTt0cnl7bGV0IEI9YXdhaXQgZmV0Y2goJCx7Y2FjaGU6Im5vLXN0b3JlIn0pLE49YXdhaXQgQi5qc29uKCk7aWYoIUIub2t8fE4uZXJyb3IpdGhyb3cgRXJyb3IoTi5lcnJvcnx8IkZhaWxlZCB0byBsaXN0IFdlYktpdCB0YXJnZXRzIik7bGV0IHo9dHlwZW9mIHdpbmRvdz4idSI/bnVsbDp3aW5kb3cubG9jYXRpb24sTD1OLnRhcmdldHM/P1tdO1ooej9MLm1hcCgoQyk9Pkc0KEMseikpOkwpfWNhdGNoKEIpe1koQiBpbnN0YW5jZW9mIEVycm9yP0IubWVzc2FnZToiRmFpbGVkIHRvIHN0YXJ0IFdlYktpdCBEZXZUb29scyIpfWZpbmFsbHl7RyghMSl9fSxbJF0pO3JldHVybiBiKCgpPT57aWYoIUopcmV0dXJuO1YoKTtsZXQgQj1zZXRJbnRlcnZhbCgoKT0+dm9pZCBWKCksMjUwMCk7cmV0dXJuKCk9PmNsZWFySW50ZXJ2YWwoQil9LFtKLFZdKSx7dGFyZ2V0czpRLGVycm9yOlgsbG9hZGluZzpxLHJlZnJlc2g6Vn19dmFyIGRRPTYwLGNRPTEwMDA7ZnVuY3Rpb24gYjQoJCxKLFEsWj1kUSl7bGV0W1gsWV09VyhudWxsKSxbcSxHXT1XKDApLFtWLEJdPVcoWiksW04sel09VygwKTtiKCgpPT57aWYoIUp8fCEkKXJldHVybjtsZXQgaz0hMSxGPSQuaW5jbHVkZXMoIj8iKT8iJiI6Ij8iLHc9YXN5bmMoKT0+e3RyeXtsZXQgeD1hd2FpdChhd2FpdCBmZXRjaChgJHskfSR7Rn1saW1pdD0ke1Z9Jm9mZnNldD0wYCx7Y2FjaGU6Im5vLXN0b3JlIn0pKS5qc29uKCk7aWYoaylyZXR1cm47aWYoWSh4LmRldmljZXM/P1tdKSx0eXBlb2YgeC50b3RhbD09PSJudW1iZXIiKUcoeC50b3RhbCl9Y2F0Y2h7aWYoIWspWShbXSl9fTt3KCk7bGV0IFQ9c2V0SW50ZXJ2YWwodyxRPzc1MDozMDAwKTtyZXR1cm4oKT0+e2s9ITAsY2xlYXJJbnRlcnZhbChUKX19LFskLEosTixRLFZdKTtsZXQgTD1EKCgpPT56KChrKT0+aysxKSxbXSksQz1EKCgpPT5CKChrKT0+aytaKSxbWl0pLEE9RCgoKT0+QihjUSksW10pLFU9RCgoKT0+QihaKSxbWl0pLEg9cT4oWD8ubGVuZ3RoPz8wKTtyZXR1cm57ZGV2aWNlczpYLHRvdGFsOnEscmVmcmVzaDpMLGxvYWRNb3JlOkMsbG9hZEFsbDpBLHJlc2V0UGFnZTpVLGhhc01vcmU6SH19dmFyIFM0PXttanBlZ0Zwczo2MCxtanBlZ1F1YWxpdHk6MC43LG1heERpbWVuc2lvbjowLGgyNjRCaXRyYXRlOjYwMDAwMDAsaDI2NEZwczo2MH0sb1E9e3RyYW5zcG9ydDoiaHR0cCIsaHR0cENvZGVjOiJhdXRvIix3ZWJSdGNDb2RlYzoiaDI2NCIsLi4uUzR9O2Z1bmN0aW9uIHJRKCQpe3JldHVybiB0eXBlb2YgJD09PSJudW1iZXIiJiZOdW1iZXIuaXNGaW5pdGUoJCk/JDpudWxsfWZ1bmN0aW9uIHg0KCQsSixRLFope2xldCBYPXJRKCQpO3JldHVybiBYPT1udWxsP0o6TWF0aC5taW4oWixNYXRoLm1heChRLFgpKX1mdW5jdGlvbiByNSgkLEosUSxaKXtyZXR1cm4gTWF0aC5yb3VuZCh4NCgkLEosUSxaKSl9ZnVuY3Rpb24gaVEoJCl7aWYoIUFycmF5LmlzQXJyYXkoJCl8fCQubGVuZ3RoPjE2KXJldHVybiBudWxsO2xldCBKPVtdO2ZvcihsZXQgUSBvZiAkKXtpZighUXx8dHlwZW9mIFEhPT0ib2JqZWN0IilyZXR1cm4gbnVsbDtsZXQgWj1RLnVybHM7aWYoIUFycmF5LmlzQXJyYXkoWil8fFoubGVuZ3RoPT09MHx8Wi5sZW5ndGg+MTZ8fCFaLmV2ZXJ5KChxKT0+dHlwZW9mIHE9PT0ic3RyaW5nIiYmcS5sZW5ndGg8PTIwNDgmJi9eKHN0dW58c3R1bnN8dHVybnx0dXJucyk6L2kudGVzdChxKSkpcmV0dXJuIG51bGw7bGV0e3VzZXJuYW1lOlgsY3JlZGVudGlhbDpZfT1RO2lmKFghPT12b2lkIDAmJnR5cGVvZiBYIT09InN0cmluZyIpcmV0dXJuIG51bGw7aWYoWSE9PXZvaWQgMCYmdHlwZW9mIFkhPT0ic3RyaW5nIilyZXR1cm4gbnVsbDtKLnB1c2goe3VybHM6WiwuLi50eXBlb2YgWD09PSJzdHJpbmciP3t1c2VybmFtZTpYfTp7fSwuLi50eXBlb2YgWT09PSJzdHJpbmciP3tjcmVkZW50aWFsOll9Ont9fSl9cmV0dXJuIEp9ZnVuY3Rpb24gdDMoJD17fSxKPW9RKXtsZXQgWj1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoJCwiaWNlU2VydmVycyIpP2lRKCQuaWNlU2VydmVycyk6Si5pY2VTZXJ2ZXJzLFg9Wj09PW51bGw/Si5pY2VTZXJ2ZXJzOlomJloubGVuZ3RoPjA/Wjp2b2lkIDA7cmV0dXJue3RyYW5zcG9ydDokLnRyYW5zcG9ydD09PSJodHRwInx8JC50cmFuc3BvcnQ9PT0id2VicnRjIj8kLnRyYW5zcG9ydDpKLnRyYW5zcG9ydCxodHRwQ29kZWM6JC5odHRwQ29kZWM9PT0iYXV0byJ8fCQuaHR0cENvZGVjPT09Im1qcGVnInx8JC5odHRwQ29kZWM9PT0iaDI2NCI/JC5odHRwQ29kZWM6Si5odHRwQ29kZWMsd2ViUnRjQ29kZWM6JC53ZWJSdGNDb2RlYz09PSJ2cDgifHwkLndlYlJ0Y0NvZGVjPT09InZwOSJ8fCQud2ViUnRjQ29kZWM9PT0iaDI2NCI/JC53ZWJSdGNDb2RlYzpKLndlYlJ0Y0NvZGVjLC4uLlg/e2ljZVNlcnZlcnM6WH06e30sLi4ubjIoJCxKKX19ZnVuY3Rpb24gbjIoJD17fSxKPVM0KXtyZXR1cm57bWpwZWdGcHM6cjUoJC5tanBlZ0ZwcyxKLm1qcGVnRnBzLDEsMTIwKSxtanBlZ1F1YWxpdHk6eDQoJC5tanBlZ1F1YWxpdHksSi5tanBlZ1F1YWxpdHksMC4wNSwxKSxtYXhEaW1lbnNpb246cjUoJC5tYXhEaW1lbnNpb24sSi5tYXhEaW1lbnNpb24sMCw0MDk2KSxoMjY0Qml0cmF0ZTpyNSgkLmgyNjRCaXRyYXRlLEouaDI2NEJpdHJhdGUsMWU1LDUwMDAwMDAwKSxoMjY0RnBzOnI1KCQuaDI2NEZwcyxKLmgyNjRGcHMsMSwxMjApfX1mdW5jdGlvbiBzMigkKXtyZXR1cm57bWpwZWdGcHM6JC5tanBlZ0ZwcyxtanBlZ1F1YWxpdHk6JC5tanBlZ1F1YWxpdHksbWF4RGltZW5zaW9uOiQubWF4RGltZW5zaW9uLGgyNjRCaXRyYXRlOiQuaDI2NEJpdHJhdGUsaDI2NEZwczokLmgyNjRGcHN9fWZ1bmN0aW9uIHY0KCQpe2lmKCQ/LnRyYW5zcG9ydD09PSJ3ZWJydGMiKXJldHVybiB0Myh7dHJhbnNwb3J0OiJ3ZWJydGMiLHdlYlJ0Y0NvZGVjOiQuY29kZWMsaWNlU2VydmVyczokLmljZVNlcnZlcnN9KTtyZXR1cm4gdDMoe3RyYW5zcG9ydDoiaHR0cCIsaHR0cENvZGVjOiQ/LmNvZGVjPz8iYXV0byJ9KX1mdW5jdGlvbiBlMygkLEope3JldHVybiB0Myh7Li4uJCwuLi5KfSwkKX1mdW5jdGlvbiB0MigkLEope2xldCBRPXMyKCQpLFo9bjIoey4uLlEsLi4uSn0sUSk7aWYoWi5tanBlZ0Zwcz09PVEubWpwZWdGcHMmJloubWpwZWdRdWFsaXR5PT09US5tanBlZ1F1YWxpdHkmJloubWF4RGltZW5zaW9uPT09US5tYXhEaW1lbnNpb24mJlouaDI2NEJpdHJhdGU9PT1RLmgyNjRCaXRyYXRlJiZaLmgyNjRGcHM9PT1RLmgyNjRGcHMpcmV0dXJuICQ7cmV0dXJuey4uLiQsLi4uWn19dmFyIGg0PSJzZXJ2ZS1zaW06Y29kZWMiLGFRPTMwMDA7ZnVuY3Rpb24gajQoJCl7bGV0IEo9djQoJCk7aWYoSi50cmFuc3BvcnQhPT0iaHR0cCJ8fEouaHR0cENvZGVjIT09ImF1dG8iKXJldHVybiBKO3RyeXtsZXQgUT13aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0oaDQpO2lmKFE9PT0iYXV0byJ8fFE9PT0ibWpwZWcifHxRPT09ImgyNjQiKXJldHVybiBlMyhKLHtodHRwQ29kZWM6UX0pfWNhdGNoe31yZXR1cm4gSn1mdW5jdGlvbiBSNCh7ZGV2aWNlOiQsZW5kcG9pbnQ6Sixpbml0aWFsU2V0dGluZ3M6UX0pe2xldFtaLFhdPVcoKCk9Pmo0KFEpKSxbWSxxXT1XKCExKSxHPUUoWiksVj1FKCExKSxCPUUoMCksTj1FKG51bGwpLHo9RShudWxsKTtiKCgpPT57KytCLmN1cnJlbnQ7bGV0IEE9ajQoUSk7aWYoTi5jdXJyZW50Py5hYm9ydCgpLHouY3VycmVudD8uYWJvcnQoKSxOLmN1cnJlbnQ9bnVsbCx6LmN1cnJlbnQ9bnVsbCxHLmN1cnJlbnQ9QSxWLmN1cnJlbnQ9ITEsWChBKSxxKCExKSwhSilyZXR1cm47bGV0IFU9ITEsSD0hMSxrPWFzeW5jKCk9PntpZihVfHxWLmN1cnJlbnR8fE4uY3VycmVudClyZXR1cm47bGV0IFQ9KytCLmN1cnJlbnQsUz1uZXcgQWJvcnRDb250cm9sbGVyO04uY3VycmVudD1TO3RyeXtsZXQgeD1hd2FpdCBmZXRjaChKLHtjYWNoZToibm8tc3RvcmUiLHNpZ25hbDpTLnNpZ25hbH0pO2lmKCF4Lm9rKXRocm93IEVycm9yKGBTdHJlYW0gc2V0dGluZ3MgcmVxdWVzdCBmYWlsZWQgKCR7eC5zdGF0dXN9KWApO2xldCAkMT1uMihhd2FpdCB4Lmpzb24oKSxzMihHLmN1cnJlbnQpKTtpZighUy5zaWduYWwuYWJvcnRlZCYmQi5jdXJyZW50PT09VCl7bGV0IGY9Ry5jdXJyZW50LGk9dDIoZiwkMSk7aWYoaSE9PWYpRy5jdXJyZW50PWksWChpKX1IPSExfWNhdGNoKHgpe2lmKCFTLnNpZ25hbC5hYm9ydGVkJiYhSClIPSEwLGNvbnNvbGUud2FybigiRmFpbGVkIHRvIGxvYWQgc3RyZWFtIHNldHRpbmdzIix4KX1maW5hbGx5e2lmKE4uY3VycmVudD09PVMpTi5jdXJyZW50PW51bGx9fTtrKCk7bGV0IEY9KCk9PntpZih0eXBlb2YgZG9jdW1lbnQ+InUifHxkb2N1bWVudC52aXNpYmlsaXR5U3RhdGUhPT0iaGlkZGVuIilrKCl9LHc9c2V0SW50ZXJ2YWwoRixhUSk7aWYodHlwZW9mIHdpbmRvdzwidSIpd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImZvY3VzIixGKTtpZih0eXBlb2YgZG9jdW1lbnQ8InUiKWRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoInZpc2liaWxpdHljaGFuZ2UiLEYpO3JldHVybigpPT57aWYoVT0hMCxjbGVhckludGVydmFsKHcpLHR5cGVvZiB3aW5kb3c8InUiKXdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJmb2N1cyIsRik7aWYodHlwZW9mIGRvY3VtZW50PCJ1Iilkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJ2aXNpYmlsaXR5Y2hhbmdlIixGKTtOLmN1cnJlbnQ/LmFib3J0KCksei5jdXJyZW50Py5hYm9ydCgpLE4uY3VycmVudD1udWxsLHouY3VycmVudD1udWxsfX0sWyQsSixRXSk7bGV0IEw9RCgoQSk9PntpZihBLmh0dHBDb2RlYyE9PXZvaWQgMCl0cnl7d2luZG93LmxvY2FsU3RvcmFnZS5zZXRJdGVtKGg0LEEuaHR0cENvZGVjKX1jYXRjaHt9bGV0IFU9ZTMoRy5jdXJyZW50LEEpO0cuY3VycmVudD1VLFgoVSl9LFtdKSxDPUQoKEEpPT57aWYoIUp8fFYuY3VycmVudHx8T2JqZWN0LmtleXMoQSkubGVuZ3RoPT09MClyZXR1cm47bGV0IFU9Ry5jdXJyZW50LEg9dDIoVSxBKTtHLmN1cnJlbnQ9SCxYKEgpLE4uY3VycmVudD8uYWJvcnQoKSxOLmN1cnJlbnQ9bnVsbDtsZXQgaz0rK0IuY3VycmVudCxGPW5ldyBBYm9ydENvbnRyb2xsZXI7ei5jdXJyZW50PUYsVi5jdXJyZW50PSEwLHEoITApLGZldGNoKEose21ldGhvZDoiUEFUQ0giLGhlYWRlcnM6eyJDb250ZW50LVR5cGUiOiJhcHBsaWNhdGlvbi9qc29uIn0sYm9keTpKU09OLnN0cmluZ2lmeShBKSxzaWduYWw6Ri5zaWduYWx9KS50aGVuKGFzeW5jKHcpPT57aWYoIXcub2spdGhyb3cgRXJyb3IoYFN0cmVhbSBzZXR0aW5ncyB1cGRhdGUgZmFpbGVkICgke3cuc3RhdHVzfSlgKTtsZXQgVD1uMihhd2FpdCB3Lmpzb24oKSxzMihIKSk7aWYoIUYuc2lnbmFsLmFib3J0ZWQmJkIuY3VycmVudD09PWspe2xldCBTPXQyKEcuY3VycmVudCxUKTtHLmN1cnJlbnQ9UyxYKFMpfX0pLmNhdGNoKCh3KT0+e2lmKEYuc2lnbmFsLmFib3J0ZWQpcmV0dXJuO2lmKGNvbnNvbGUud2FybigiRmFpbGVkIHRvIHVwZGF0ZSBzdHJlYW0gc2V0dGluZ3MiLHcpLEIuY3VycmVudD09PWspe2xldCBUPXQyKEcuY3VycmVudCxzMihVKSk7Ry5jdXJyZW50PVQsWChUKX19KS5maW5hbGx5KCgpPT57aWYoei5jdXJyZW50PT09Ril6LmN1cnJlbnQ9bnVsbDtpZighRi5zaWduYWwuYWJvcnRlZCYmQi5jdXJyZW50PT09aylWLmN1cnJlbnQ9ITEscSghMSl9KX0sW0pdKTtyZXR1cm57c2V0dGluZ3M6Wix1cGRhdGVQbGF5YmFjazpMLHVwZGF0ZUVuY29kZXI6QyxwZW5kaW5nOlksZW5jb2RlclNldHRpbmdzQXZhaWxhYmxlOiEhSn19dmFyICQ4PXtzdHJlYW1lZDohMSxmZWxsQmFjazohMX07ZnVuY3Rpb24gZzQoJCxKKXtzd2l0Y2goSil7Y2FzZSJkZWNvZGVkLWZyYW1lIjpyZXR1cm4gJC5zdHJlYW1lZD8kOnsuLi4kLHN0cmVhbWVkOiEwfTtjYXNlInRpbWVvdXQiOnJldHVybiAkLnN0cmVhbWVkfHwkLmZlbGxCYWNrPyQ6ey4uLiQsZmVsbEJhY2s6ITB9O2Nhc2UiZXJyb3IiOnJldHVybiAkLmZlbGxCYWNrPyQ6ey4uLiQsZmVsbEJhY2s6ITB9O2Nhc2UicmVzZXQiOnJldHVybiAkOH19dmFyIG00PTQwMDA7dmFyIG5RPXtLZXlBOjQsS2V5Qjo1LEtleUM6NixLZXlEOjcsS2V5RTo4LEtleUY6OSxLZXlHOjEwLEtleUg6MTEsS2V5SToxMixLZXlKOjEzLEtleUs6MTQsS2V5TDoxNSxLZXlNOjE2LEtleU46MTcsS2V5TzoxOCxLZXlQOjE5LEtleVE6MjAsS2V5UjoyMSxLZXlTOjIyLEtleVQ6MjMsS2V5VToyNCxLZXlWOjI1LEtleVc6MjYsS2V5WDoyNyxLZXlZOjI4LEtleVo6MjksRGlnaXQxOjMwLERpZ2l0MjozMSxEaWdpdDM6MzIsRGlnaXQ0OjMzLERpZ2l0NTozNCxEaWdpdDY6MzUsRGlnaXQ3OjM2LERpZ2l0ODozNyxEaWdpdDk6MzgsRGlnaXQwOjM5LEVudGVyOjQwLEVzY2FwZTo0MSxCYWNrc3BhY2U6NDIsVGFiOjQzLFNwYWNlOjQ0LE1pbnVzOjQ1LEVxdWFsOjQ2LEJyYWNrZXRMZWZ0OjQ3LEJyYWNrZXRSaWdodDo0OCxCYWNrc2xhc2g6NDksU2VtaWNvbG9uOjUxLFF1b3RlOjUyLEJhY2txdW90ZTo1MyxDb21tYTo1NCxQZXJpb2Q6NTUsU2xhc2g6NTYsQ2Fwc0xvY2s6NTcsRjE6NTgsRjI6NTksRjM6NjAsRjQ6NjEsRjU6NjIsRjY6NjMsRjc6NjQsRjg6NjUsRjk6NjYsRjEwOjY3LEYxMTo2OCxGMTI6NjksUHJpbnRTY3JlZW46NzAsU2Nyb2xsTG9jazo3MSxQYXVzZTo3MixJbnNlcnQ6NzMsSG9tZTo3NCxQYWdlVXA6NzUsRGVsZXRlOjc2LEVuZDo3NyxQYWdlRG93bjo3OCxBcnJvd1JpZ2h0Ojc5LEFycm93TGVmdDo4MCxBcnJvd0Rvd246ODEsQXJyb3dVcDo4MixOdW1Mb2NrOjgzLE51bXBhZERpdmlkZTo4NCxOdW1wYWRNdWx0aXBseTo4NSxOdW1wYWRTdWJ0cmFjdDo4NixOdW1wYWRBZGQ6ODcsTnVtcGFkRW50ZXI6ODgsTnVtcGFkMTo4OSxOdW1wYWQyOjkwLE51bXBhZDM6OTEsTnVtcGFkNDo5MixOdW1wYWQ1OjkzLE51bXBhZDY6OTQsTnVtcGFkNzo5NSxOdW1wYWQ4Ojk2LE51bXBhZDk6OTcsTnVtcGFkMDo5OCxOdW1wYWREZWNpbWFsOjk5LENvbnRyb2xMZWZ0OjIyNCxTaGlmdExlZnQ6MjI1LEFsdExlZnQ6MjI2LE1ldGFMZWZ0OjIyNyxDb250cm9sUmlnaHQ6MjI4LFNoaWZ0UmlnaHQ6MjI5LEFsdFJpZ2h0OjIzMCxNZXRhUmlnaHQ6MjMxfTtmdW5jdGlvbiBmNCgkKXtyZXR1cm4gblFbJF0/P251bGx9dmFyIEo4PTMyMCxwND03NjAsUTg9MzAwO2Z1bmN0aW9uIFo4KCQsSil7aWYoISQpcmV0dXJuIG51bGw7aWYoISQuZGV2aWNlKXJldHVybiAkO2lmKCEkLnByb3h5SGVscGVycylyZXR1cm4gJDtsZXQgWj1gJHskLmJhc2VQYXRoPT09Ii8iPyIiOigkLmJhc2VQYXRoPz8iIikucmVwbGFjZSgvXC8rJC8sIiIpfS9oZWxwZXIvJHtlbmNvZGVVUklDb21wb25lbnQoJC5kZXZpY2UpfWAsWD1gJHtKLnByb3RvY29sfS8vJHtKLmhvc3R9YCxZPUoucHJvdG9jb2w9PT0iaHR0cHM6Ij8id3NzOiI6IndzOiI7cmV0dXJuey4uLiQsdXJsOmAke1h9JHtafWAsc3RyZWFtVXJsOmAke1h9JHtafS9zdHJlYW0ubWpwZWdgLHdzVXJsOmAke1l9Ly8ke0ouaG9zdH0ke1p9L3dzYH19ZnVuY3Rpb24gdTQoJCxKKXtsZXQgUT1uZXcgVGV4dEVuY29kZXIoKS5lbmNvZGUoSlNPTi5zdHJpbmdpZnkoSikpLFo9bmV3IFVpbnQ4QXJyYXkoMStRLmxlbmd0aCk7cmV0dXJuIFpbMF09JCxaLnNldChRLDEpLFp9ZnVuY3Rpb24gc1EoJCxKLFE9MzIpe2xldCBaPVsuLi4kLEpdO3JldHVybiBaLmxlbmd0aD5RP1ouc2xpY2UoWi5sZW5ndGgtUSk6Wn1mdW5jdGlvbiBLOCgkLEosUT1EYXRlLm5vdygpLFo9MTUwMCl7bGV0IFg9Si5maWx0ZXIoKFkpPT5RLVkuY3JlYXRlZEF0PD1aKTtpZighJHx8JC5yZWFkeVN0YXRlIT09MSlyZXR1cm4gWDtmb3IobGV0IFkgb2YgWCkkLnNlbmQodTQoWS50YWcsWS5wYXlsb2FkKS5idWZmZXIpO3JldHVybltdfWZ1bmN0aW9uIGw0KCQsSixRLFosWD1EYXRlLm5vdygpKXtsZXQgWT1LOCgkLEosWCk7aWYoJD8ucmVhZHlTdGF0ZT09PTEpcmV0dXJuICQuc2VuZCh1NChRLFopLmJ1ZmZlciksWTtyZXR1cm4gc1EoWSx7dGFnOlEscGF5bG9hZDpaLGNyZWF0ZWRBdDpYfSl9dmFyIHRRPXtoMjY0OlsiaDI2NCIsInZwOCIsInZwOSJdLHZwOTpbInZwOSIsInZwOCJdLHZwODpbInZwOCJdfTtmdW5jdGlvbiBlUSgkLEope2xldCBRPXRRWyRdLFo9US5pbmRleE9mKEopO2lmKFo9PT0tMSlyZXR1cm4gUVswXT8/bnVsbDtyZXR1cm4gUVtaKzFdPz9udWxsfWZ1bmN0aW9uIGQ0KCQsSixRKXtpZihRLmtpbmQ9PT0icGVybWFuZW50IilyZXR1cm57dHlwZToic3dpdGNoLXRvLWh0dHAifTtpZihRLmNvZGVjIT09SilyZXR1cm4gbnVsbDtsZXQgWj1lUSgkLEopO3JldHVybiBaJiZaIT09Sj97dHlwZToicmV0cnktY29kZWMiLGNvZGVjOlp9Ont0eXBlOiJzd2l0Y2gtdG8taHR0cCJ9fWZ1bmN0aW9uIGM0KCQpe3JldHVybiAkP2AkeyQuZGV2aWNlfTokeyQucGlkfTokeyQuc3RyZWFtVXJsfTokeyQud3NVcmx9OiR7SlNPTi5zdHJpbmdpZnkoJC5zdHJlYW1TZXR0aW5ncz8/bnVsbCl9YDoiIn1mdW5jdGlvbiAkWigpe2xldFskLEpdPVcoKCk9Plo4KHUyKHdpbmRvdy5fX1NJTV9QUkVWSUVXX18pLHdpbmRvdy5sb2NhdGlvbikpLFtRLFpdPVcoITEpLFtYLFldPVcoKCk9PntsZXQgdT11Mih3aW5kb3cuX19TSU1fUFJFVklFV19fKTtpZih1KXJldHVybiB1LmRldmljZTtyZXR1cm4gbmV3IFVSTFNlYXJjaFBhcmFtcyh3aW5kb3cubG9jYXRpb24uc2VhcmNoKS5nZXQoImRldmljZSIpfSksW3EsR109VyghMSksW1YsQl09VyghMSksW04sel09VygoKT0+e2lmKHR5cGVvZiB3aW5kb3c+InUiKXJldHVybiExO3JldHVybiB3aW5kb3cuaW5uZXJXaWR0aD49UTgrNTIwfSkse3dpZHRoOkwsb25Qb2ludGVyRG93bjpDfT1vNSgic2VydmUtc2ltOmRldmljZS1zaWRlYmFyLXdpZHRoIixROCwyNDAsNjQwLCJyaWdodCIpLFtBLFVdPVcobnVsbCksSD13aW5kb3cuX19TSU1fUFJFVklFV19fLGs9SD8uZ3JpZEFwaUVuZHBvaW50Pz9jMSgiZ3JpZC9hcGkiKSxGPUg/LmdyaWRTdGFydEVuZHBvaW50Pz9jMSgiZ3JpZC9hcGkvc3RhcnQiKSx3PUg/LmdyaWRTaHV0ZG93bkVuZHBvaW50Pz9jMSgiZ3JpZC9hcGkvc2h1dGRvd24iKSxbVCxTXT1XKHt9KSxbeCwkMV09Vyh7fSksW2YsaV09Vyh7fSkscj1PYmplY3QudmFsdWVzKFQpLnNvbWUoQm9vbGVhbil8fE9iamVjdC52YWx1ZXMoeCkuc29tZShCb29sZWFuKSx7ZGV2aWNlczpsLHRvdGFsOm8scmVmcmVzaDpRMSxsb2FkTW9yZTpOMSxsb2FkQWxsOmMscmVzZXRQYWdlOnYsaGFzTW9yZTpufT1iNChrLCEwLHIpLFgxPSEhKFgmJmw/LmZpbmQoKHUpPT51LmRldmljZT09PVgpPy5oZWxwZXIpLEwxPUQoKHUpPT57WSh1KTt0cnl7bGV0IGo9bmV3IFVSTCh3aW5kb3cubG9jYXRpb24uaHJlZik7ai5zZWFyY2hQYXJhbXMuc2V0KCJkZXZpY2UiLHUpLHdpbmRvdy5oaXN0b3J5LnJlcGxhY2VTdGF0ZShudWxsLCIiLGoudG9TdHJpbmcoKSl9Y2F0Y2h7fX0sW10pLEoxPUQoYXN5bmModSxqPTIwMDAwKT0+e2xldCBHMT1EYXRlLm5vdygpK2o7d2hpbGUoRGF0ZS5ub3coKTxHMSl7dHJ5e2lmKCgoYXdhaXQoYXdhaXQgZmV0Y2goayx7Y2FjaGU6Im5vLXN0b3JlIn0pKS5qc29uKCkpLmRldmljZXM/P1tdKS5zb21lKChXMSk9PlcxLmRldmljZT09PXUmJlcxLmhlbHBlcikpcmV0dXJuITB9Y2F0Y2h7fWF3YWl0IG5ldyBQcm9taXNlKCh6MSk9PnNldFRpbWVvdXQoejEsNDAwKSl9cmV0dXJuITF9LFtrXSksWTE9RChhc3luYyh1KT0+e1MoKGopPT4oey4uLmosW3VdOiEwfSkpLGkoKGopPT4oey4uLmosW3VdOm51bGx9KSk7dHJ5e2xldCBqPWF3YWl0IGZldGNoKEYse21ldGhvZDoiUE9TVCIsaGVhZGVyczp7IkNvbnRlbnQtVHlwZSI6ImFwcGxpY2F0aW9uL2pzb24ifSxib2R5OkpTT04uc3RyaW5naWZ5KHt1ZGlkOnV9KX0pLEcxPWF3YWl0IGouanNvbigpLmNhdGNoKCgpPT4oe30pKTtpZighai5va3x8IUcxLm9rKXtpKCh6MSk9Pih7Li4uejEsW3VdOkcxLmVycm9yPz9gSFRUUCAke2ouc3RhdHVzfWB9KSk7cmV0dXJufWF3YWl0IEoxKHUpfWNhdGNoKGope2koKEcxKT0+KHsuLi5HMSxbdV06aj8ubWVzc2FnZT8/IlJlcXVlc3QgZmFpbGVkIn0pKX1maW5hbGx5e1MoKGopPT4oey4uLmosW3VdOiExfSkpLFExKCl9fSxbRixKMSxRMV0pLEgxPUQoYXN5bmModSk9PnskMSgoaik9Pih7Li4uaixbdV06ITB9KSksaSgoaik9Pih7Li4uaixbdV06bnVsbH0pKTt0cnl7bGV0IGo9YXdhaXQgZmV0Y2godyx7bWV0aG9kOiJQT1NUIixoZWFkZXJzOnsiQ29udGVudC1UeXBlIjoiYXBwbGljYXRpb24vanNvbiJ9LGJvZHk6SlNPTi5zdHJpbmdpZnkoe3VkaWQ6dX0pfSksRzE9YXdhaXQgai5qc29uKCkuY2F0Y2goKCk9Pih7fSkpO2lmKCFqLm9rfHwhRzEub2spaSgoejEpPT4oey4uLnoxLFt1XTpHMS5lcnJvcj8/YEhUVFAgJHtqLnN0YXR1c31gfSkpfWNhdGNoKGope2koKEcxKT0+KHsuLi5HMSxbdV06aj8ubWVzc2FnZT8/IlJlcXVlc3QgZmFpbGVkIn0pKX1maW5hbGx5eyQxKChqKT0+KHsuLi5qLFt1XTohMX0pKSxRMSgpfX0sW3csUTFdKTtiKCgpPT57aWYoWClyZXR1cm47aWYoJD8uZGV2aWNlKXtZKCQuZGV2aWNlKTtyZXR1cm59aWYoIWx8fGwubGVuZ3RoPT09MClyZXR1cm47bGV0IHU9bC5maW5kKChqKT0+ai5oZWxwZXIpPz9sLmZpbmQoKGopPT5qLnN0YXRlPT09IkJvb3RlZCIpPz9sWzBdO2lmKHUpWSh1LmRldmljZSl9LFtYLCQ/LmRldmljZSxsXSksYigoKT0+e2xldCB1PWAke2MxKCJhcGkvZXZlbnRzIil9JHtYP2A/ZGV2aWNlPSR7ZW5jb2RlVVJJQ29tcG9uZW50KFgpfWA6IiJ9YCxqPSh6MSk9PntKKChNMSk9PntpZih6MT1aOCh1Mih6MSksd2luZG93LmxvY2F0aW9uKSxjNChNMSk9PT1jNCh6MSkpcmV0dXJuIE0xO2lmKHoxKXdpbmRvdy5fX1NJTV9QUkVWSUVXX189ejE7ZWxzZSBpZih3aW5kb3cuX19TSU1fUFJFVklFV19fKXtsZXR7YmFzZVBhdGg6VzEsZXhlY1Rva2VuOmkxfT13aW5kb3cuX19TSU1fUFJFVklFV19fO3dpbmRvdy5fX1NJTV9QUkVWSUVXX189e2Jhc2VQYXRoOlcxLGV4ZWNUb2tlbjppMX19cmV0dXJuIHoxfSl9LEcxPWYwKHUpO3JldHVybiBHMS5vbm1lc3NhZ2U9KHoxKT0+e3RyeXtqKHUyKEpTT04ucGFyc2UoejEuZGF0YSkpKX1jYXRjaHt9fSwoKT0+RzEuY2xvc2UoKX0sW1gsWDFdKSxiKCgpPT57aWYoISQ/LmxvZ3NFbmRwb2ludClyZXR1cm47bGV0IHU9ZjAoJC5sb2dzRW5kcG9pbnQpLGo9bmV3IE1hcCxHMT1bIiM4YmU5ZmQiLCIjNTBmYTdiIiwiI2ZmYjg2YyIsIiNmZjc5YzYiLCIjYmQ5M2Y5IiwiI2YxZmE4YyIsIiM2MjcyYTQiLCIjZmY1NTU1IiwiIzY5ZmY5NCIsIiNkNmFjZmYiLCIjZmZmZmE1IiwiI2E0ZmZmZiIsIiNmZjZlNmUiLCIjY2FhOWZhIiwiIzVhZjc4ZSJdO2Z1bmN0aW9uIHoxKGkxKXtsZXQgRjE9ai5nZXQoaTEpO2lmKCFGMSl7bGV0IHYxPTA7Zm9yKGxldCBQMT0wO1AxPGkxLmxlbmd0aDtQMSsrKXYxPSh2MTw8NSktdjEraTEuY2hhckNvZGVBdChQMSl8MDtGMT1HMVtNYXRoLmFicyh2MSklRzEubGVuZ3RoXSxqLnNldChpMSxGMSl9cmV0dXJuIEYxfWxldCBNMT0iIixXMT0hMTtyZXR1cm4gdS5vbm1lc3NhZ2U9KGkxKT0+e3RyeXtsZXQgRjE9SlNPTi5wYXJzZShpMS5kYXRhKSx2MT1GMS5wcm9jZXNzSW1hZ2VQYXRoPy5zcGxpdCgiLyIpLnBvcCgpPz9GMS5zZW5kZXJJbWFnZVBhdGg/LnNwbGl0KCIvIikucG9wKCk/PyIiLFAxPUYxLnN1YnN5c3RlbT8/IiIsdTE9RjEuY2F0ZWdvcnk/PyIiLEMxPUYxLmV2ZW50TWVzc2FnZT8/IiI7aWYoIUMxKXJldHVybjtpZih2MSE9PU0xKXtpZihXMSljb25zb2xlLmdyb3VwRW5kKCk7bGV0IFIxPXoxKHYxKTtjb25zb2xlLmdyb3VwQ29sbGFwc2VkKGAlYyR7djF9JHtQMT9gICVjJHtQMX0ke3UxPyI6Iit1MToiIn1gOiIifWAsYGNvbG9yOiR7UjF9O2ZvbnQtd2VpZ2h0OmJvbGRgLC4uLlAxP1siY29sb3I6Izg4ODtmb250LXdlaWdodDpub3JtYWwiXTpbXSksVzE9ITAsTTE9djF9bGV0IHcxPShGMS5tZXNzYWdlVHlwZT8/IiIpLnRvTG93ZXJDYXNlKCksbDE9UDEmJnYxPT09TTE/YCVjJHt1MXx8UDF9JWMgYDoiIix0MT1sMT9bImNvbG9yOiM4ODg7Zm9udC1zdHlsZTppdGFsaWMiLCJjb2xvcjppbmhlcml0Il06W107aWYodzE9PT0iZmF1bHQifHx3MT09PSJlcnJvciIpY29uc29sZS5sb2coYCR7bDF9JWMke0MxfWAsLi4udDEsImNvbG9yOiNmZjU1NTUiKTtlbHNlIGlmKHcxPT09ImRlYnVnIiljb25zb2xlLmxvZyhgJHtsMX0lYyR7QzF9YCwuLi50MSwiY29sb3I6IzYyNzJhNCIpO2Vsc2UgY29uc29sZS5sb2coYCR7bDF9JWMke0MxfWAsLi4udDEsImNvbG9yOmluaGVyaXQiKX1jYXRjaHt9fSwoKT0+e2lmKFcxKWNvbnNvbGUuZ3JvdXBFbmQoKTt1LmNsb3NlKCl9fSxbJD8ubG9nc0VuZHBvaW50XSk7bGV0IHk9WD8/JD8uZGV2aWNlPz9udWxsLGc9bD8uZmluZCgodSk9PnUuZGV2aWNlPT09eSk/P251bGwsUD0hISQmJiQuZGV2aWNlPT09eSxwO2lmKFAmJiQpcD1LKEpaLHtjb25maWc6JCxkZXZpY2VOYW1lOmc/Lm5hbWU/P251bGwsZGV2aWNlUnVudGltZTpnPy5ydW50aW1lPz9udWxsLGNocm9tZTpnPy5jaHJvbWU/P251bGwsYXhPdmVybGF5RW5hYmxlZDpxLHNldEF4T3ZlcmxheUVuYWJsZWQ6RyxkZXZ0b29sc09wZW46VixzZXREZXZ0b29sc09wZW46QixncmlkT3BlbjpOLHNldEdyaWRPcGVuOnosZ3JpZFBhbmVsV2lkdGg6TCxzZWxlY3RlZERldnRvb2xzVGFyZ2V0SWQ6QSxzZXRTZWxlY3RlZERldnRvb2xzVGFyZ2V0SWQ6VSxzdHJlYW1pbmc6USxzZXRTdHJlYW1pbmc6Wn0pO2Vsc2V7bGV0IHU9Tj9MKzM2OjI0O3A9SygiZGl2Iix7Y2xhc3NOYW1lOiJoLXNjcmVlbiBmbGV4IGZsZXgtY29sIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBnYXAtMyBiZy1wYWdlIGZvbnQtc3lzdGVtIGJveC1ib3JkZXIgW3RyYW5zaXRpb246cGFkZGluZ18wLjI1c19lYXNlXSIsc3R5bGU6e3BhZGRpbmdMZWZ0OnUscGFkZGluZ1JpZ2h0OjI0fSxjaGlsZHJlbjpnP0sobzkse25hbWU6Zy5uYW1lLHJ1bnRpbWU6Zy5ydW50aW1lLGNocm9tZTpnLmNocm9tZT8/bnVsbCxwbGFjZWhvbGRlckFzc2V0OmcucGxhY2Vob2xkZXJBc3NldD8/bnVsbCxidXN5OiEhZy5oZWxwZXJ8fCEhVFtnLmRldmljZV0sYnVzeUxhYmVsOmcuaGVscGVyPyJDb25uZWN0aW5n4oCmIjoiU3RhcnRpbmfigKYiLGVycm9yOmZbZy5kZXZpY2VdPz9udWxsLG9uU3RhcnQ6KCk9PlkxKGcuZGV2aWNlKX0pOksoImRpdiIse2NsYXNzTmFtZToiZmxleCBmbGV4LWNvbCBpdGVtcy1jZW50ZXIgZ2FwLTMgdGV4dC1jZW50ZXIiLGNoaWxkcmVuOltLKCJoMSIse2NsYXNzTmFtZToidGV4dC1bMThweF0gbS0wIHRleHQtd2hpdGUvOTAiLGNoaWxkcmVuOiJObyBzaW11bGF0b3JzIGF2YWlsYWJsZSJ9KSxLKCJwIix7Y2xhc3NOYW1lOiJ0ZXh0LXdoaXRlLzU1IHRleHQtWzE0cHhdIG1heC13LTEyMCIsY2hpbGRyZW46WyJDcmVhdGUgYSBzaW11bGF0b3IgaW4gWGNvZGUsIG9yIHN0YXJ0IG9uZSB3aXRoIiwiICIsSygiY29kZSIse2NsYXNzTmFtZToiYmctWyMyMjJdIHB4LTEuNSBweS0wLjUgcm91bmRlZCB0ZXh0LVsxM3B4XSIsY2hpbGRyZW46ImJ1bnggc2VydmUtc2ltIC0tZGV0YWNoIn0pLCIuIl19KV19KX0pfXJldHVybiBLKFoxLHtjaGlsZHJlbjpbcCxLKEU2LHt9KSxLKHQ5LHtvcGVuOk4sb25DbG9zZTooKT0+eighMSksd2lkdGg6TCxzaWRlOiJsZWZ0IixkZXZpY2VzOmwsdG90YWw6byxoYXNNb3JlOm4sb25Mb2FkTW9yZTpOMSxvbkxvYWRBbGw6YyxvblJlc2V0UGFnZTp2LHNlbGVjdGVkVWRpZDp5LG9uU2VsZWN0OkwxLHN0YXJ0aW5nOlQsc2h1dHRpbmdEb3duOngsb25TaHV0ZG93bjpIMX0pLEsodjUse3BhbmVsV2lkdGg6TCx2aXNpYmxlOk4sb25Qb2ludGVyRG93bjpDLGFyaWFMYWJlbDoiUmVzaXplIHNpbXVsYXRvcnMgc2lkZWJhciIsc2lkZToibGVmdCJ9KSxLKGY5LHtvcGVuOk4sb25DbGljazooKT0+eighMCl9KV19KX1mdW5jdGlvbiBKWih7Y29uZmlnOiQsZGV2aWNlTmFtZTpKLGRldmljZVJ1bnRpbWU6USxjaHJvbWU6WixheE92ZXJsYXlFbmFibGVkOlgsc2V0QXhPdmVybGF5RW5hYmxlZDpZLGRldnRvb2xzT3BlbjpxLHNldERldnRvb2xzT3BlbjpHLGdyaWRPcGVuOlYsc2V0R3JpZE9wZW46QixncmlkUGFuZWxXaWR0aDpOLHNlbGVjdGVkRGV2dG9vbHNUYXJnZXRJZDp6LHNldFNlbGVjdGVkRGV2dG9vbHNUYXJnZXRJZDpMLHN0cmVhbWluZzpDLHNldFN0cmVhbWluZzpBfSl7YigoKT0+e2RvY3VtZW50LnRpdGxlPUo/YFNpbXVsYXRvciAtICR7Sn1gOiJTaW11bGF0b3IgUHJldmlldyJ9LFtKXSk7bGV0IFU9RTAoSiksSD15NCgkLmRldnRvb2xzRW5kcG9pbnQ/P2MxKCJkZXZ0b29scyIpLHEpO2IoKCk9PntpZighcSlyZXR1cm47aWYoeiYmSC50YXJnZXRzLnNvbWUoKFIpPT5SLmlkPT09eikpcmV0dXJuO0woSC50YXJnZXRzLmxlbmd0aD09PTE/SC50YXJnZXRzWzBdLmlkOm51bGwpfSxbcSxILnRhcmdldHMseixMXSksYigoKT0+e0wobnVsbCl9LFskLmRldmljZSxMXSk7bGV0IGs9QTQoKSxGPVI0KHtkZXZpY2U6JC5kZXZpY2UsZW5kcG9pbnQ6JC5zdHJlYW1TZXR0aW5nc0VuZHBvaW50LGluaXRpYWxTZXR0aW5nczokLnN0cmVhbVNldHRpbmdzfSksdz1GLnNldHRpbmdzLFQ9Ri51cGRhdGVQbGF5YmFjayxTPXcudHJhbnNwb3J0PT09IndlYnJ0YyIseD1FKG51bGwpLCQxPVMsW2YsaV09VyhudWxsKSxyPXcud2ViUnRjQ29kZWMsbD1mPz9yLG89VzQoe29mZmVyVXJsOkkzKCQpLGNsb3NlVXJsOlM5KCQpLGVuYWJsZWQ6JDEsY29kZWM6bCxpY2VTZXJ2ZXJzOncuaWNlU2VydmVyc30pLFtRMSxOMV09bDAoZzQsJDgpLFtjXT1XKCgpPT5uZXcgVVJMU2VhcmNoUGFyYW1zKHdpbmRvdy5sb2NhdGlvbi5zZWFyY2gpLmdldCgiY29kZWMiKT09PSJtanBlZyIpLHY9dy5odHRwQ29kZWM9PT0ibWpwZWciLG49ISQxJiYhdiYmay5zdXBwb3J0ZWQmJiFRMS5mZWxsQmFjayYmIWMsWDE9SDQobnx8JDE/bnVsbDpiOSgkKSk7YigoKT0+e0EoITEpLE4xKCJyZXNldCIpLGkobnVsbCl9LFskLnN0cmVhbVVybCxBLHcudHJhbnNwb3J0LHcuaHR0cENvZGVjLHcud2ViUnRjQ29kZWNdKSxiKCgpPT57aWYoIVN8fCFvLmZhaWx1cmUpcmV0dXJuO2lmKHguY3VycmVudD09PW8uZmFpbHVyZS5zZXNzaW9uSWQpcmV0dXJuO3guY3VycmVudD1vLmZhaWx1cmUuc2Vzc2lvbklkO2xldCBSPWQ0KHIsbCxvLmZhaWx1cmUpO2lmKCFSKXJldHVybjtpZihSLnR5cGU9PT0ic3dpdGNoLXRvLWh0dHAiKXtUKHt0cmFuc3BvcnQ6Imh0dHAifSk7cmV0dXJufWkoUi5jb2RlYyl9LFtyLGwsVCxTLG8uZmFpbHVyZV0pLGIoKCk9PntpZighbilyZXR1cm47bGV0IFI9c2V0VGltZW91dCgoKT0+TjEoInRpbWVvdXQiKSxtNCk7cmV0dXJuKCk9PmNsZWFyVGltZW91dChSKX0sW24sJC5zdHJlYW1VcmxdKTtsZXRbTDEsSjFdPVcobnVsbCksW1kxLEgxXT1XKG51bGwpLHk9WTEsZz1MMT8/eT8/WTIoVSxKKSxQPUE1KFUsZykscD1xMihVLGcpLHU9SDUoZyksaj1aMihnKSxHMT1qP2oud2lkdGgvai5oZWlnaHQ6MSx6MT1nMChnKSxNMT0hIVomJiF6MSxXMT1NMT9aLmZyYW1lLndpZHRoL1ouc2NyZWVuLndpZHRoOjEsaTE9cCpXMSxGMT1NMT9aLmZyYW1lLndpZHRoL1ouZnJhbWUuaGVpZ2h0OkcxLHYxPU0xP2Ake1ouZnJhbWUud2lkdGh9IC8gJHtaLmZyYW1lLmhlaWdodH1gOnUsUDE9RShudWxsKSx1MT1FKFtdKTtiKCgpPT57bGV0IFI9ITEsZT1udWxsLE09bnVsbDt1MS5jdXJyZW50PVtdO2xldCBPPSgpPT57aWYoUnx8ZSlyZXR1cm47ZT1zZXRUaW1lb3V0KCgpPT57ZT1udWxsLEkoKX0sMTAwMCl9LEk9KCk9PntsZXQgaD1uZXcgV2ViU29ja2V0KCQud3NVcmwpO2guYmluYXJ5VHlwZT0iYXJyYXlidWZmZXIiLE09aCxQMS5jdXJyZW50PWgsaC5vbm9wZW49KCk9Pnt1MS5jdXJyZW50PUs4KGgsdTEuY3VycmVudCl9LGgub25tZXNzYWdlPSh0KT0+e2lmKCEodC5kYXRhIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpKXJldHVybjtsZXQgcTE9bmV3IFVpbnQ4QXJyYXkodC5kYXRhKTtpZihxMS5sZW5ndGg8MXx8cTFbMF0hPT0xMzApcmV0dXJuO3RyeXtsZXQgVTE9SlNPTi5wYXJzZShuZXcgVGV4dERlY29kZXIoKS5kZWNvZGUocTEuc3ViYXJyYXkoMSkpKTtpZihVMS53aWR0aDw9MHx8VTEuaGVpZ2h0PD0wKXJldHVybjtIMSgoXzEpPT5fMSYmXzEud2lkdGg9PT1VMS53aWR0aCYmXzEuaGVpZ2h0PT09VTEuaGVpZ2h0JiZfMS5vcmllbnRhdGlvbj09PVUxLm9yaWVudGF0aW9uP18xOlUxKX1jYXRjaHt9fSxoLm9uY2xvc2U9KCk9PntpZihQMS5jdXJyZW50PT09aClQMS5jdXJyZW50PW51bGw7TygpfSxoLm9uZXJyb3I9KCk9PntoLmNsb3NlKCl9fTtyZXR1cm4gSSgpLCgpPT57aWYoUj0hMCxlKWNsZWFyVGltZW91dChlKTtpZihQMS5jdXJyZW50PT09TSlQMS5jdXJyZW50PW51bGw7TT8uY2xvc2UoKX19LFskLndzVXJsXSk7bGV0IEMxPUQoKFIsZSk9Pnt1MS5jdXJyZW50PWw0KFAxLmN1cnJlbnQsdTEuY3VycmVudCxSLGUpfSxbXSksdzE9RCgoUik9PkMxKDMsUiksW0MxXSksbDE9RCgoUik9PkMxKDUsUiksW0MxXSksdDE9RCgoUik9PkMxKDQse2J1dHRvbjpSfSksW0MxXSksUjE9RCgoe3BoYXNlOlIsYnV0dG9uOmV9KT0+e2lmKGUudXNhZ2VQYWdlPT1udWxsfHxlLnVzYWdlPT1udWxsKXJldHVybjtDMSg0LHtidXR0b246ZS5uYW1lLHBhZ2U6ZS51c2FnZVBhZ2UsdXNhZ2U6ZS51c2FnZSxwaGFzZTpSfSl9LFtDMV0pLGExPUQoKFIpPT5DMSgxMCx7ZGVsdGE6Un0pLFtDMV0pLGUxPUQoKFIpPT5DMSgxMSxSKSxbQzFdKSxWMD1EKChSKT0+e0oxKChlKT0+ZSYmZS53aWR0aD09PVIud2lkdGgmJmUuaGVpZ2h0PT09Ui5oZWlnaHQmJmUub3JpZW50YXRpb249PT1SLm9yaWVudGF0aW9uP2U6Uil9LFtdKSxzMT1EKChSKT0+e0MxKDcse29yaWVudGF0aW9uOlJ9KX0sW0MxXSksdjA9Zy5vcmllbnRhdGlvbj8/InBvcnRyYWl0IixtMT1VIT09IndhdGNoIiYmVSE9PSJ2aXNpb24iLHEwPUQoKFIpPT57aWYoIW0xKXJldHVybjtsZXQgZT0oUj09PSJsZWZ0Ij9fMjpMMylbdjBdO3MxKGUpfSxbbTEsdjAsczFdKTtiKCgpPT57SjEobnVsbCksSDEobnVsbCl9LFskLnN0cmVhbVVybF0pLGIoKCk9PntsZXQgUj15O2lmKCFSKXJldHVybjtKMSgoZSk9PmUmJmUud2lkdGg9PT1SLndpZHRoJiZlLmhlaWdodD09PVIuaGVpZ2h0JiZlLm9yaWVudGF0aW9uPT09Ui5vcmllbnRhdGlvbj9lOm51bGwpfSxbeSx5Py53aWR0aCx5Py5oZWlnaHQseT8ub3JpZW50YXRpb25dKTtsZXQgJDA9RCgoUixlKT0+e0MxKDYse3R5cGU6Uix1c2FnZTplfSl9LFtDMV0pLFtQMCxkMV09VyhudWxsKSxbbjEsXzBdPVcoKCk9PntpZih0eXBlb2Ygd2luZG93PiJ1IilyZXR1cm4hMTtsZXQgUj1OdW1iZXIod2luZG93LmxvY2FsU3RvcmFnZS5nZXRJdGVtKCJzZXJ2ZS1zaW06dG9vbHMtcGFuZWwtd2lkdGgiKSksZT1OdW1iZXIuaXNGaW5pdGUoUikmJlI+MD9SOko4O3JldHVybiB3aW5kb3cuaW5uZXJXaWR0aD49ZSs0ODB9KSx7d2lkdGg6ajEsb25Qb2ludGVyRG93bjpIMH09bzUoInNlcnZlLXNpbTp0b29scy1wYW5lbC13aWR0aCIsSjgsMjQwLDcyMCkse3dpZHRoOkIwLG9uUG9pbnRlckRvd246RDF9PW81KCJzZXJ2ZS1zaW06ZGV2dG9vbHMtcGFuZWwtd2lkdGgiLHA0LDQyMCwxNDAwKSxbeTEsSjBdPVcoKCk9PnR5cGVvZiB3aW5kb3c8InUiP3dpbmRvdy5pbm5lcldpZHRoOjApLFtBMCxOMF09VygoKT0+dHlwZW9mIHdpbmRvdzwidSI/d2luZG93LmlubmVySGVpZ2h0OjApO2IoKCk9PntsZXQgUj0oKT0+e0owKHdpbmRvdy5pbm5lcldpZHRoKSxOMCh3aW5kb3cuaW5uZXJIZWlnaHQpfTtyZXR1cm4gd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInJlc2l6ZSIsUiksKCk9PndpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJyZXNpemUiLFIpfSxbXSksYigoKT0+e2xldCBSPWYwKCQuYXBwU3RhdGVFbmRwb2ludD8/YzEoImFwcHN0YXRlIikpLGU9bnVsbDtyZXR1cm4gUi5vbm1lc3NhZ2U9KE0pPT57dHJ5e2xldCBPPUpTT04ucGFyc2UoTS5kYXRhKTtpZihlKWNsZWFyVGltZW91dChlKTtsZXQgST1PPy5pc1JlYWN0TmF0aXZlPzA6NjAwO2U9c2V0VGltZW91dCgoKT0+ZDEoTyksSSl9Y2F0Y2h7fX0sKCk9PntpZihlKWNsZWFyVGltZW91dChlKTtSLmNsb3NlKCl9fSxbJC5hcHBTdGF0ZUVuZHBvaW50XSk7bGV0IGswPUQoYXN5bmMoKT0+eyQwKCJkb3duIiwyMSksYXdhaXQgbmV3IFByb21pc2UoKGUpPT5zZXRUaW1lb3V0KGUsMzApKSwkMCgidXAiLDIxKX0sWyQwXSksSzE9RShudWxsKSxbXyxkXT1XKDApLFthLGsxXT1XKDApO2IoKCk9PntsZXQgUj1LMS5jdXJyZW50O2lmKCFSfHx0eXBlb2YgUmVzaXplT2JzZXJ2ZXI+InUiKXJldHVybjtsZXQgZT1uZXcgUmVzaXplT2JzZXJ2ZXIoKE0pPT57bGV0IE89TVswXT8uY29udGVudFJlY3Q7ZChPPy53aWR0aD8/MCksazEoTz8uaGVpZ2h0Pz8wKX0pO3JldHVybiBlLm9ic2VydmUoUiksKCk9PmUuZGlzY29ubmVjdCgpfSxbXSk7bGV0W1YxLEIxXT1XKCEwKSxnMT1FKCEwKTtnMS5jdXJyZW50PVYxO2xldCBmMT1FKG5ldyBTZXQpO2IoKCk9PntsZXQgUj0oZSk9PntsZXQgTT0hIUsxLmN1cnJlbnQ/LmNvbnRhaW5zKGUudGFyZ2V0KTtCMShNKX07cmV0dXJuIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoInBvaW50ZXJkb3duIixSLCEwKSwoKT0+ZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigicG9pbnRlcmRvd24iLFIsITApfSxbXSksYigoKT0+e2lmKFYxKXJldHVybjtsZXQgUj1mMS5jdXJyZW50O2lmKFIuc2l6ZT09PTApcmV0dXJuO2ZvcihsZXQgZSBvZiBSKUMxKDYse3R5cGU6InVwIix1c2FnZTplfSk7Ui5jbGVhcigpfSxbVjEsQzFdKSxiKCgpPT57bGV0IFI9KE8sSSk9PntpZighZzEuY3VycmVudClyZXR1cm47aWYoTy5jb2RlPT09IktleUgiJiZPLm1ldGFLZXkmJk8uc2hpZnRLZXkpe2lmKE8ucHJldmVudERlZmF1bHQoKSxJPT09ImRvd24iJiYhTy5yZXBlYXQpQzEoNCx7YnV0dG9uOiJob21lIn0pO3JldHVybn1pZigoTy5jb2RlPT09IkFycm93TGVmdCJ8fE8uY29kZT09PSJBcnJvd1JpZ2h0IikmJk8ubWV0YUtleSYmIU8uc2hpZnRLZXkmJiFPLmFsdEtleSYmIU8uY3RybEtleSl7aWYoTy5wcmV2ZW50RGVmYXVsdCgpLEk9PT0iZG93biImJiFPLnJlcGVhdClxMChPLmNvZGU9PT0iQXJyb3dMZWZ0Ij8ibGVmdCI6InJpZ2h0Iik7cmV0dXJufWlmKE8uY29kZT09PSJLZXlBIiYmTy5tZXRhS2V5JiZPLnNoaWZ0S2V5KXtpZihPLnByZXZlbnREZWZhdWx0KCksST09PSJkb3duIiYmIU8ucmVwZWF0KUkxKGB4Y3J1biBzaW1jdGwgdWkgJHskLmRldmljZX0gYXBwZWFyYW5jZWApLnRoZW4oKHQpPT57bGV0IHExPXQuc3Rkb3V0LnRyaW0oKT09PSJkYXJrIj8ibGlnaHQiOiJkYXJrIjtyZXR1cm4gSTEoYHhjcnVuIHNpbWN0bCB1aSAkeyQuZGV2aWNlfSBhcHBlYXJhbmNlICR7cTF9YCl9KS5jYXRjaCgoKT0+e30pO3JldHVybn1pZihPLmNvZGU9PT0iS2V5SyImJk8ubWV0YUtleSYmIU8uc2hpZnRLZXkmJiFPLmFsdEtleSYmIU8uY3RybEtleSl7aWYoTy5wcmV2ZW50RGVmYXVsdCgpLEk9PT0iZG93biImJiFPLnJlcGVhdClDMSgxMix7fSk7cmV0dXJufWxldCBoPWY0KE8uY29kZSk7aWYoaD09bnVsbClyZXR1cm47aWYoTy5wcmV2ZW50RGVmYXVsdCgpLEk9PT0iZG93biIpZjEuY3VycmVudC5hZGQoaCk7ZWxzZSBmMS5jdXJyZW50LmRlbGV0ZShoKTtDMSg2LHt0eXBlOkksdXNhZ2U6aH0pfSxlPShPKT0+UihPLCJkb3duIiksTT0oTyk9PlIoTywidXAiKTtyZXR1cm4gd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLGUpLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJrZXl1cCIsTSksKCk9Pnt3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsZSksd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoImtleXVwIixNKX19LFtDMSwkLmRldmljZSxxMF0pO2xldCB4MT1JNCgpLE8wPVQ0KCQuZGV2aWNlKSxRMD1DNCh7ZXhlYzpJMSx1ZGlkOiQuZGV2aWNlLGVuYWJsZWQ6QyxvblVwbG9hZFN0YXJ0OngxLmFkZCxvblVwbG9hZFByb2dyZXNzOngxLnNldFByb2dyZXNzLG9uVXBsb2FkRW5kOihSLGUsTSk9PngxLnVwZGF0ZShSLHtzdGF0dXM6ZT8ic3VjY2VzcyI6ImVycm9yIixtZXNzYWdlOk19KSxvblVuc3VwcG9ydGVkOihSKT0+e2xldCBlPXgxLmFkZChSLm5hbWUsIm1lZGlhIik7eDEudXBkYXRlKGUse3N0YXR1czoiZXJyb3IiLG1lc3NhZ2U6YFVuc3VwcG9ydGVkOiAke1IudHlwZXx8SDIoUil9YH0pfSxvbkhvc3RQYXRoRHJvcDpPMC5kaXNtaXNzfSksVDE9RTQoe2RlZmF1bHRXaWR0aDppMSx2aWV3cG9ydFdpZHRoOnkxLHZpZXdwb3J0SGVpZ2h0OkEwLGFzcGVjdFJhdGlvOkYxLG9uU3RhcnQ6KCk9PkIxKCExKX0pLEwwPTEyLEQwPTI0LGIwPV8+MD9NYXRoLm1pbihfLFQxLndpZHRoKTpUMS53aWR0aCxGMD0oUik9PntpZihSPD0wKXJldHVybiAwO2xldCBlPXkxLUwwLVIsTz15MS8yK2IwLzItKGUtRDApO2lmKE88PTApcmV0dXJuIDA7bGV0IEk9MipPO3JldHVybiBJPD1SK0QwP0k6MH0sZTI9RjAocT9CMDpuMT9qMTowKSwkNT1GMChWP046MCk7cmV0dXJuIEsoZzkse2VuZHBvaW50Olg/JD8uYXhFbmRwb2ludDp2b2lkIDAsY2hpbGRyZW46SygiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGZsZXgtY29sIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBoLXNjcmVlbiBiZy1wYWdlIHB5LTYgZ2FwLTMgZm9udC1zeXN0ZW0gYm94LWJvcmRlciIsc3R5bGU6e3BhZGRpbmdMZWZ0OjI0KyQ1LHBhZGRpbmdSaWdodDoyNCtlMix0cmFuc2l0aW9uOlQxLmlzUmVzaXppbmd8fFQxLmlzSW5lcnRpYT8ibm9uZSI6SjZ9LGNoaWxkcmVuOltLKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggZmxleC1jb2wgaXRlbXMtY2VudGVyIGdhcC0zIG1pbi13LTAiLHN0eWxlOnt3aWR0aDpUMS53aWR0aCx0cmFuc2l0aW9uOlQxLmlzUmVzaXppbmd8fFQxLmlzSW5lcnRpYT9oMzpSM30sY2hpbGRyZW46W0socjEse2V4ZWM6STEsb25Sb3RhdGU6czEsb3JpZW50YXRpb246Zy5vcmllbnRhdGlvbj8/bnVsbCxkZXZpY2VVZGlkOiQuZGV2aWNlLGRldmljZU5hbWU6SixkZXZpY2VSdW50aW1lOlEsc3RyZWFtaW5nOkMsImFyaWEtbGFiZWwiOiJTaW11bGF0b3Igc3RhdHVzIixzdHlsZTp7YWxpZ25TZWxmOiJjZW50ZXIiLHdpZHRoOiJhdXRvIixtaW5XaWR0aDowLG1heFdpZHRoOiIxMDAlIixmbGV4V3JhcDoibm93cmFwIixqdXN0aWZ5Q29udGVudDoiY2VudGVyIixnYXA6MTAscGFkZGluZzoiNnB4IDEwcHgiLGJvcmRlclJhZGl1czoxOH0sY2hpbGRyZW46W0socjEuVGl0bGUse29uQ2xpY2s6KCk9PkIoKFIpPT4hUiksImFyaWEtbGFiZWwiOiJUb2dnbGUgc2ltdWxhdG9ycyBzaWRlYmFyIiwiYXJpYS1wcmVzc2VkIjpWLHRpdGxlOiJTaW11bGF0b3JzIixoaWRlU3VidGl0bGU6ITAsaGlkZUNoZXZyb246ITAsc3R5bGU6e21heFdpZHRoOiJtaW4oMjMwcHgsIGNhbGMoMTAwdncgLSAxNzBweCkpIn19KSxLKGI2LHtzdHJlYW1pbmc6Q30pXX0pLEsoImRpdiIse3JlZjpLMSxjbGFzc05hbWU6InJlbGF0aXZlIG1heC1oLWZ1bGwiLHN0eWxlOnt3aWR0aDpUMS53aWR0aCxhc3BlY3RSYXRpbzp2MSx0cmFuc2l0aW9uOlQxLmlzUmVzaXppbmd8fFQxLmlzSW5lcnRpYT9oMzpSMyx3aWxsQ2hhbmdlOlQxLmlzUmVzaXppbmd8fFQxLmlzSW5lcnRpYT8id2lkdGgiOnZvaWQgMH0sLi4uUTAuZHJvcFpvbmVQcm9wcyxjaGlsZHJlbjpbKCgpPT57bGV0IFI9SyhVNSx7dXJsOiQudXJsLHdzVXJsOiQud3NVcmwsc3R5bGU6e3dpZHRoOiIxMDAlIixoZWlnaHQ6IjEwMCUiLGJvcmRlcjoibm9uZSIscG9pbnRlckV2ZW50czpUMS5pc1Jlc2l6aW5nfHxUMS5pc0luZXJ0aWE/Im5vbmUiOnZvaWQgMH0saW1hZ2VTdHlsZTp7Ym9yZGVyUmFkaXVzOk0xPzA6UCxjb3JuZXJTaGFwZTpNMT92b2lkIDA6InN1cGVyZWxsaXBzZSgxLjMpIiwuLi5NMT97fTp7Ym94U2hhZG93OiJpbnNldCAwIDAgMCAxcHggcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjIpIn19LGhpZGVDb250cm9sczohMCxvblN0cmVhbWluZ0NoYW5nZTpBLG9uU3RyZWFtVG91Y2g6dzEsb25TdHJlYW1NdWx0aVRvdWNoOmwxLG9uU3RyZWFtQnV0dG9uOnQxLG9uU3RyZWFtRGlnaXRhbENyb3duOmExLG9uU3RyZWFtU2Nyb2xsOmUxLHN0cmVhbU1vZGU6JDE/IndlYnJ0YyI6bj8iYXZjYyI6Im1qcGVnIix3ZWJSdGNTdHJlYW06by5zdHJlYW0sb25XZWJSdGNGcmFtZTpvLm1hcmtGcmFtZURlY29kZWQsc3RyZWFtRXJyb3I6JDE/by5lcnJvcjpudWxsLG9uQXZjY0Vycm9yOigpPT5OMSgiZXJyb3IiKSxvbkF2Y2NEZWNvZGVkRnJhbWU6KCk9Pk4xKCJkZWNvZGVkLWZyYW1lIiksc3Vic2NyaWJlRnJhbWU6bj92b2lkIDA6WDEuc3Vic2NyaWJlRnJhbWUsc3RyZWFtRnJhbWU6bj92b2lkIDA6WDEuZnJhbWUsc3RyZWFtQ29uZmlnOmcsZW5hYmxlRGlnaXRhbENyb3duOlU9PT0id2F0Y2giLG9uU2NyZWVuQ29uZmlnQ2hhbmdlOlYwfSksZT1LKFoxLHtjaGlsZHJlbjpbUixYJiZLKFI5LHt9KV19KTtpZighTTEpcmV0dXJuIGU7cmV0dXJuIEsoUzUse2Nocm9tZTpaLGludGVyYWN0aXZlOiEwLG9uQnV0dG9uOlIxLG9uQ3Jvd25XaGVlbDooTSxPKT0+e2xldCBJPUQyKE0sTyxhfHwxKTtpZihJIT1udWxsKWExKEkpfSxzY3JlZW46ZX0pfSkoKSxRMC5pc0RyYWdPdmVyJiZLKCJkaXYiLHtjbGFzc05hbWU6ImFic29sdXRlIGluc2V0LTAgZmxleCBmbGV4LWNvbCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgZ2FwLTIgYm9yZGVyLTIgYm9yZGVyLWRhc2hlZCBib3JkZXItYWNjZW50IGJnLVtyZ2JhKDk5LDEwMiwyNDEsMC4xOCldIHRleHQtYWNjZW50IHBvaW50ZXItZXZlbnRzLW5vbmUgei0yMCIsc3R5bGU6e2JvcmRlclJhZGl1czpNMT92b2lkIDA6UH0sY2hpbGRyZW46W0soZzIse3NpemU6MzIsc3Ryb2tlV2lkdGg6MS41fSksSygic3BhbiIse2NsYXNzTmFtZToidGV4dC1bMTNweF0gZm9udC1tZWRpdW0iLGNoaWxkcmVuOiJEcm9wIG1lZGlhIG9yIC5pcGEifSldfSksSyhQNix7c2ltdWxhdG9yUmVzaXplOlQxLGRldmljZVR5cGU6VSxzdHJlYW1Db25maWc6Zyxjb250YWluZXJXaWR0aDpffHxUMS53aWR0aCxjb250YWluZXJIZWlnaHQ6YXx8KEYxPjA/VDEud2lkdGgvRjE6MCl9KSxLKHk2LHt3aWR0aDpffHxUMS53aWR0aCxoZWlnaHQ6YXx8KEYxPjA/VDEud2lkdGgvRjE6MCksdmlzaWJsZTpUMS5pc1Jlc2l6aW5nfHxUMS5pc0luZXJ0aWF9KV19KSxLKCJkaXYiLHtjbGFzc05hbWU6ImlubGluZS1mbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBnYXAtMiBtYXgtdy1mdWxsIixjaGlsZHJlbjpbSyhyMSx7ZXhlYzpJMSxvblJvdGF0ZTpzMSxvcmllbnRhdGlvbjpnLm9yaWVudGF0aW9uPz9udWxsLGRldmljZVVkaWQ6JC5kZXZpY2UsZGV2aWNlTmFtZTpKLGRldmljZVJ1bnRpbWU6USxzdHJlYW1pbmc6QywiYXJpYS1sYWJlbCI6IlNpbXVsYXRvciBhY3Rpb25zIixzdHlsZTp7YWxpZ25TZWxmOiJjZW50ZXIiLHdpZHRoOiJhdXRvIixtaW5XaWR0aDowLG1heFdpZHRoOiIxMDAlIixqdXN0aWZ5Q29udGVudDoiY2VudGVyIixwYWRkaW5nOiI2cHggOHB4Iixib3JkZXJSYWRpdXM6MTh9LGNoaWxkcmVuOksocjEuQWN0aW9ucyx7Y2hpbGRyZW46W1AwPy5pc1JlYWN0TmF0aXZlJiZLKHIxLkJ1dHRvbix7ImFyaWEtbGFiZWwiOiJSZWxvYWQgUmVhY3QgTmF0aXZlIGJ1bmRsZSIsdGl0bGU6IlJlbG9hZCAoUikiLG9uQ2xpY2s6KCk9PnZvaWQgazAoKSxjaGlsZHJlbjpLKHIwLHt9KX0pLEsocjEuSG9tZUJ1dHRvbix7dGl0bGU6IkhvbWUifSksSyhyMS5TY3JlZW5zaG90QnV0dG9uLHt0aXRsZToiU2NyZWVuc2hvdCIsb25DbGljazooUik9PntSLnByZXZlbnREZWZhdWx0KCksTzAuY2FwdHVyZSgpfX0pLEsocjEuUm90YXRlQnV0dG9uLHt0aXRsZToiUm90YXRlIGRldmljZSJ9KV19KX0pLEsocjEse2V4ZWM6STEsb25Sb3RhdGU6czEsb3JpZW50YXRpb246Zy5vcmllbnRhdGlvbj8/bnVsbCxkZXZpY2VVZGlkOiQuZGV2aWNlLGRldmljZU5hbWU6SixkZXZpY2VSdW50aW1lOlEsc3RyZWFtaW5nOkMsImFyaWEtbGFiZWwiOiJBY2Nlc3NpYmlsaXR5IG92ZXJsYXkiLHN0eWxlOnt3aWR0aDoiYXV0byIsbWluV2lkdGg6MCxqdXN0aWZ5Q29udGVudDoiY2VudGVyIixwYWRkaW5nOjYsYm9yZGVyUmFkaXVzOjIyfSxjaGlsZHJlbjpLKG05LHtvdmVybGF5RW5hYmxlZDpYLHN0cmVhbWluZzpDLG9uVG9nZ2xlT3ZlcmxheTooKT0+WSgoUik9PiFSKX0pfSldfSldfSksSygiZGl2Iix7Y2xhc3NOYW1lOmBmaXhlZCB0b3AtMyByaWdodC0zIGZsZXggZmxleC1jb2wgZ2FwLTEgcC0xIGJnLXBhbmVsLWJnIGJvcmRlciBib3JkZXItd2hpdGUvOCByb3VuZGVkLVsxMHB4XSBiYWNrZHJvcC1ibHVyLVsxMnB4XSBbLXdlYmtpdC1iYWNrZHJvcC1maWx0ZXI6Ymx1cigxMnB4KV0gW3RyYW5zaXRpb246b3BhY2l0eV8wLjE4c19lYXNlXSB6LTQwICR7bjF8fHE/Im9wYWNpdHktMCBwb2ludGVyLWV2ZW50cy1ub25lIjoib3BhY2l0eS0xMDAgcG9pbnRlci1ldmVudHMtYXV0byJ9YCxjaGlsZHJlbjpbSygiYnV0dG9uIix7b25DbGljazooKT0+e0coITEpLF8wKChSKT0+IVIpfSxjbGFzc05hbWU6InctWzMwcHhdIGgtWzMwcHhdIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGJnLXRyYW5zcGFyZW50IGJvcmRlci1ub25lIHJvdW5kZWQtbWQgdGV4dC1bIzhlOGU5M10gY3Vyc29yLXBvaW50ZXIgW3RyYW5zaXRpb246YmFja2dyb3VuZF8wLjE1c19lYXNlLGNvbG9yXzAuMTVzX2Vhc2VdIGhvdmVyOmJnLXdoaXRlLzggaG92ZXI6dGV4dC13aGl0ZSIsImFyaWEtbGFiZWwiOiJPcGVuIHRvb2xzIHBhbmVsIiwiYXJpYS1wcmVzc2VkIjpuMSx0aXRsZToiVG9vbHMiLGNoaWxkcmVuOksoajIse3NpemU6MTgsc3Ryb2tlV2lkdGg6MS43NX0pfSksSygiYnV0dG9uIix7b25DbGljazooKT0+e18wKCExKSxHKChSKT0+IVIpfSxjbGFzc05hbWU6InctWzMwcHhdIGgtWzMwcHhdIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGJnLXRyYW5zcGFyZW50IGJvcmRlci1ub25lIHJvdW5kZWQtbWQgdGV4dC1bIzhlOGU5M10gY3Vyc29yLXBvaW50ZXIgW3RyYW5zaXRpb246YmFja2dyb3VuZF8wLjE1c19lYXNlLGNvbG9yXzAuMTVzX2Vhc2VdIGhvdmVyOmJnLXdoaXRlLzggaG92ZXI6dGV4dC13aGl0ZSIsImFyaWEtbGFiZWwiOiJPcGVuIFdlYktpdCBEZXZUb29scyIsImFyaWEtcHJlc3NlZCI6cSx0aXRsZToiV2ViS2l0IERldlRvb2xzIixjaGlsZHJlbjpLKHgyLHtzaXplOjE4LHN0cm9rZVdpZHRoOjEuNzV9KX0pXX0pLEsocTQse29wZW46bjEsb25DbG9zZTooKT0+XzAoITEpLHVkaWQ6JC5kZXZpY2UsZGV2aWNlUnVudGltZTpRLGN1cnJlbnRBcHA6UDAsZXZlbnRMb2dFdmVudHNFbmRwb2ludDokLmV2ZW50TG9nRXZlbnRzRW5kcG9pbnQsYXhPdmVybGF5RW5hYmxlZDpYLG9uVG9nZ2xlQXhPdmVybGF5OigpPT5ZKChSKT0+IVIpLHN0cmVhbVNldHRpbmdzOncsb25TdHJlYW1QbGF5YmFja1NldHRpbmdzQ2hhbmdlOkYudXBkYXRlUGxheWJhY2ssb25TdHJlYW1FbmNvZGVyU2V0dGluZ3NDaGFuZ2U6Ri51cGRhdGVFbmNvZGVyLGFjdGl2ZUNvZGVjOiQxP2B3ZWJydGMvJHtsfWA6bj8iaDI2NCI6Im1qcGVnIixhdmNjU3VwcG9ydGVkOmsuc3VwcG9ydGVkLHN0cmVhbVNldHRpbmdzUGVuZGluZzpGLnBlbmRpbmd8fCFGLmVuY29kZXJTZXR0aW5nc0F2YWlsYWJsZSx3aWR0aDpqMX0pLEsodjUse3BhbmVsV2lkdGg6ajEsdmlzaWJsZTpuMSxvblBvaW50ZXJEb3duOkgwLGFyaWFMYWJlbDoiUmVzaXplIHRvb2xzIHBhbmVsIn0pLEsoejQse29wZW46cSxvbkNsb3NlOigpPT5HKCExKSx1ZGlkOiQuZGV2aWNlLHRhcmdldHM6SC50YXJnZXRzLHNlbGVjdGVkVGFyZ2V0SWQ6eixvblNlbGVjdFRhcmdldDpMLGxvYWRpbmc6SC5sb2FkaW5nLGVycm9yOkguZXJyb3Isb25SZWZyZXNoOigpPT52b2lkIEgucmVmcmVzaCgpLHdpZHRoOkIwfSksSyh2NSx7cGFuZWxXaWR0aDpCMCx2aXNpYmxlOnEsb25Qb2ludGVyRG93bjpEMSxhcmlhTGFiZWw6IlJlc2l6ZSBXZWJLaXQgRGV2VG9vbHMgcGFuZWwifSldfSl9KX1vOChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicm9vdCIpKS5yZW5kZXIoSygkWix7fSkpOwo8L3NjcmlwdD4KPC9ib2R5PjwvaHRtbD4=","base64").toString("utf-8");return d8}function r2(){return new Promise(($)=>{N0("xcrun",["simctl","list","devices","-j"],{encoding:"utf-8",timeout:3000},(Q,Z)=>{if(Q)return $([]);try{let J=JSON.parse(Z),Y=[];for(let[X,G]of Object.entries(J.devices)){if(!/SimRuntime\.(iOS|watchOS|visionOS|xrOS)-/i.test(X))continue;for(let H of G){if(H.isAvailable===!1)continue;Y.push({...H,runtime:X.replace(/^.*SimRuntime\./,"")})}}$(Y)}catch{$([])}})})}var t2=1610612736;function s2(){try{let $=Number(Y4("sysctl -n hw.memsize",{encoding:"utf-8",stdio:["ignore","pipe","ignore"],timeout:1500}).trim()),Q=Number(Y4("sysctl -n hw.pagesize",{encoding:"utf-8",stdio:["ignore","pipe","ignore"],timeout:1500}).trim()),Z=Y4("vm_stat",{encoding:"utf-8",stdio:["ignore","pipe","ignore"],timeout:1500}),J=(X)=>{let G=Z.match(X);return G?Number(G[1]):0},Y=J(/Pages free:\s+(\d+)/)+J(/Pages inactive:\s+(\d+)/)+J(/Pages speculative:\s+(\d+)/);return{totalBytes:Number.isFinite($)?$:0,availableBytes:Y*(Number.isFinite(Q)?Q:4096)}}catch{return{totalBytes:0,availableBytes:0}}}function e2(){try{let $=Y4("ps -axo rss=,args=",{encoding:"utf-8",stdio:["ignore","pipe","ignore"],timeout:3000,maxBuffer:8388608}),Q={},Z=0,J=/\/Devices\/([0-9A-F-]{36})\//i;for(let Y of $.split(`
75
+ `)){let X=Y.trimStart();if(!X)continue;let G=J.exec(X);if(!G)continue;let H=Number(X.split(/\s+/,1)[0]);if(!Number.isFinite(H))continue;let K=H*1024,W=G[1].toUpperCase();Q[W]=(Q[W]??0)+K,Z+=K}return{perUdid:Q,totalBytes:Z}}catch{return{perUdid:{},totalBytes:0}}}function $1(){let{totalBytes:$,availableBytes:Q}=s2(),Z=e2(),J=Object.keys(Z.perUdid).length,Y=J>0?Z.totalBytes/J:0,X=Y>=268435456?"measured":"estimated",G=X==="measured"?Y:t2,H=G>0?Math.max(0,Math.floor(Q/G)):0;return{totalBytes:$,availableBytes:Q,runningSimulators:J,perSimAvgBytes:G,perSimSource:X,estimatedAdditional:H}}function g$($){if($==="auto"||$==="h264"||$==="mjpeg")return{transport:"http",codec:$};return}function Q1($,Q){let Z=Buffer.from($),J=Buffer.from(Q);if(Z.length!==J.length)return!1;return D2(Z,J)}function Z1($){if(!$)return!1;return $.split(";",1)[0].trim().toLowerCase()==="application/json"}function Z3($){let Q=$?.streamSettings??g$($?.codec),Z=($?.basePath??"/.sim").replace(/\/+$/,""),J=k2(Z),Y=f2(Z),X=$?.proxyHelpers??!1,G=$?.inspectWebKitBridge??d2,H=$?.execToken??j$(32).toString("base64url"),K=async(M)=>{let F=M??{};if(typeof F.device!=="string"||!/^[0-9A-Za-z-]+$/.test(F.device))throw Error("missing or invalid device udid");if(F.option===void 0)return{status:await u6(F.device)};if(!j0[F.option])throw Error(`unknown option: ${F.option}`);let A=typeof F.value==="string"?v6(F.option,F.value):null;if(A===null)throw Error(`invalid value for ${F.option}: ${F.value}`);await h6(F.device,F.option,A);try{K0({device:F.device,source:"ui",kind:"ui-setting",action:F.option,status:"ok",summary:`UI ${F.option} ${A}`,details:{option:F.option,value:A}})}catch{}return{ok:!0}},W=async(M,F,A)=>{let R=M.url??"",x=R.indexOf("?"),j=x===-1?R:R.slice(0,x),P=S$(R),L=P??$?.device??null,C=Z==="/"?"/devtools-frontend":`${Z}/devtools-frontend`,I=m8(R,J);if(I){let _=I.device??L;if(p2(M,F,_,I.upstreamPath,Q))return;F.writeHead(404,{"Content-Type":"text/plain; charset=utf-8"}),F.end("No serve-sim device");return}if(j===C||j.startsWith(`${C}/`)){let _=j===C?"inspector.html":j.slice(C.length+1);if(_.split("/").some((V)=>V==="..")){F.writeHead(400,{"Content-Type":"text/plain; charset=utf-8"}),F.end("Invalid asset path");return}try{let V=await fetch(`https://chrome-devtools-frontend.appspot.com/serve_rev/@${P2}/${_}${x===-1?"":R.slice(x)}`),N={"Cache-Control":"public, max-age=604800"},B=V.headers.get("content-type");if(B)N["Content-Type"]=B;F.writeHead(V.status,N),F.end(Buffer.from(await V.arrayBuffer()))}catch(V){F.writeHead(502,{"Content-Type":"text/plain; charset=utf-8"}),F.end(V instanceof Error?V.message:"Failed to load DevTools frontend")}return}if(j===Z||j===Z+"/"){let _=await F0(),V=P0(_,L),N=a2();if(!V){let B=JSON.stringify({basePath:Z,execToken:H});N=N.replace("<!--__SIM_PREVIEW_CONFIG__-->",`<script>window.__SIM_PREVIEW__=${B}</script>`)}if(V){let B=x4(V,Z4(M),Z,q4(M),X),T=`<script>window.__SIM_PREVIEW__=${JSON.stringify(l8(B,Z,i8(),H,Q,X))}</script>`;N=N.replace("<!--__SIM_PREVIEW_CONFIG__-->",T)}F.writeHead(200,{"Content-Type":"text/html; charset=utf-8","Cache-Control":"no-store"}),F.end(N);return}if(j===Z+"/grid/api/memory"){F.writeHead(200,{"Content-Type":"application/json","Cache-Control":"no-store"}),F.end(JSON.stringify($1()));return}if(j===Z+"/grid/api/devicekit-chrome"){L6(new URL(R||"/","http://serve-sim.local"),F);return}if(j===Z+"/grid/api/device-placeholder-asset"){O6(new URL(R||"/","http://serve-sim.local"),F);return}if(j===Z+"/grid/api"){let _=await F0(),V=new Map(_.map((E)=>[E.device,E])),N=await r2(),B=w2(),D=(E)=>{if(/iphone/i.test(E))return 0;if(/ipad/i.test(E))return 1;if(/watch/i.test(E))return 2;if(/(apple\s*tv|^tv\b)/i.test(E))return 3;if(/vision|reality/i.test(E))return 4;return 5},T=(E)=>{if(V.has(E.udid))return 0;if(L&&E.udid===L)return 1;if(E.state==="Booted")return 2;if(E.udid===B)return 3;return 4},q=(E)=>{let u=E.match(/-(\d+)-(\d+)/),d=u?Number(u[1]):0,Y0=u?Number(u[2]):0;return-(d*1000+Y0)};N.sort((E,u)=>T(E)-T(u)||D(E.name)-D(u.name)||E.name.localeCompare(u.name)||q(E.runtime)-q(u.runtime));let w=N.length,{limit:y,offset:k}=S2(R),c=(y==null?N:N.slice(k,k+y)).map((E)=>{let u=V.get(E.udid),d=u?x4(u,Z4(M),Z,q4(M),X):null;return{device:E.udid,name:E.name,runtime:E.runtime,state:E.state,chrome:U6(E),placeholderAsset:B6(E),helper:d?{port:d.port,url:d.url,streamUrl:d.streamUrl,wsUrl:d.wsUrl}:null}});F.writeHead(200,{"Content-Type":"application/json","Cache-Control":"no-store"}),F.end(JSON.stringify({devices:c,total:w,offset:y==null?0:k,limit:y??w}));return}if(j===Z+"/grid/api/shutdown"&&M.method==="POST"){let _="";M.on("data",(V)=>{_+=typeof V==="string"?V:V.toString()}),M.on("end",()=>{let V="";try{V=JSON.parse(_).udid??""}catch{}if(!/^[0-9A-F]{8}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{12}$/i.test(V)){F.writeHead(400,{"Content-Type":"application/json"}),F.end(JSON.stringify({ok:!1,error:"Invalid or missing udid"}));return}J8(V),J4={at:0,booted:null},N0("xcrun",["simctl","shutdown",V],{timeout:30000},(N,B,D)=>{if(N){F.writeHead(500,{"Content-Type":"application/json"}),F.end(JSON.stringify({ok:!1,error:D?.toString().trim()||N.message}));return}F.writeHead(200,{"Content-Type":"application/json"}),F.end(JSON.stringify({ok:!0}))})});return}if(j===Z+"/grid/api/start"&&M.method==="POST"){let _="";M.on("data",(V)=>{_+=typeof V==="string"?V:V.toString()}),M.on("end",()=>{let V="";try{V=JSON.parse(_).udid??""}catch{}if(!/^[0-9A-F]{8}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{12}$/i.test(V)){F.writeHead(400,{"Content-Type":"application/json"}),F.end(JSON.stringify({ok:!1,error:"Invalid or missing udid"}));return}let N=M.socket.localPort??0;g2(V,N,Z,Q).then((B)=>{if(F.writableEnded)return;if(B)F.writeHead(500,{"Content-Type":"application/json"}),F.end(JSON.stringify({ok:!1,error:B}));else F.writeHead(200,{"Content-Type":"application/json"}),F.end(JSON.stringify({ok:!0}))})});return}if(j===Z+"/devtools"){let _=await F0();if(!P0(_,L)){F.writeHead(404,{"Content-Type":"application/json"}),F.end(JSON.stringify({error:"No serve-sim device"}));return}try{let N=await G(),B=await N.listTargets(),D=X?n2(M):"ws",T=X?`${Z4(M)??`127.0.0.1:${N.port}`}${Y}`:`127.0.0.1:${N.port}/devtools`,q=B.map((w)=>({...w,webSocketDebuggerUrl:`${D}://${T}/page/${encodeURIComponent(w.id)}`,devtoolsFrontendUrl:o2(C,D,T,w.id)}));F.writeHead(200,{"Content-Type":"application/json","Cache-Control":"no-store"}),F.end(JSON.stringify({port:N.port,targets:q}))}catch(N){F.writeHead(500,{"Content-Type":"application/json"}),F.end(JSON.stringify({error:N instanceof Error?N.message:"Failed to start inspect-webkit"}))}return}if(j===Z+"/devtools/release"&&M.method==="POST"){let _="";M.on("data",(V)=>_+=V),M.on("end",async()=>{try{let V=_?JSON.parse(_):{};(await G()).releaseHighlight?.(V.targetId),F.writeHead(200,{"Content-Type":"application/json"}),F.end("{}")}catch(V){F.writeHead(500,{"Content-Type":"application/json"}),F.end(JSON.stringify({error:V instanceof Error?V.message:"Failed to release"}))}});return}if(j===Z+"/devtools/highlight"&&M.method==="POST"){let _="";M.on("data",(V)=>_+=V),M.on("end",async()=>{try{let{targetId:V,on:N}=JSON.parse(_||"{}");if(!V){F.writeHead(400,{"Content-Type":"application/json"}),F.end(JSON.stringify({error:"Missing targetId"}));return}let B=await G();if(!B.highlightTarget){F.writeHead(501,{"Content-Type":"application/json"}),F.end(JSON.stringify({error:"highlightTarget not supported by inspect-webkit"}));return}await B.highlightTarget(V,!!N),F.writeHead(200,{"Content-Type":"application/json"}),F.end("{}")}catch(V){F.writeHead(500,{"Content-Type":"application/json"}),F.end(JSON.stringify({error:V instanceof Error?V.message:"Failed to highlight target"}))}});return}if(j===Z+"/api"){let _=await F0(),V=P0(_,L),N=`${L??"(any)"}|${_.length}|${V?`${V.device}@${V.port}`:"none"}`;if(N!==C$)C$=N,t0("GET /api selectedDevice=%s states=%d chose=%s",L??"(any)",_.length,V?`${V.device}@${V.port}`:"none");F.writeHead(200,{"Content-Type":"application/json","Cache-Control":"no-store"});let B=V?x4(V,Z4(M),Z,q4(M),X):null;F.end(JSON.stringify(B?l8(B,Z,i8(),H,Q,X):null));return}if(j===Z+"/api/screenshot"){if(M.method!=="GET"&&M.method!=="POST"){F.writeHead(405,{"Content-Type":"text/plain; charset=utf-8"}),F.end("method not allowed");return}let _=L;if(!_){let N=await b$();_=(N&&[...N][0])??null}if(!_||!o8(_)){F.writeHead(400,{"Content-Type":"application/json","Cache-Control":"no-store"}),F.end(JSON.stringify({ok:!1,error:"No booted simulator to screenshot"}));return}let V=w4(v$(),`serve-sim-screenshot-${j$(8).toString("hex")}.png`);try{await new Promise((B,D)=>{N0("xcrun",["simctl","io",_,"screenshot",V],{timeout:30000},(T,q,w)=>{if(T)D(Object.assign(T,{stderr:w?.toString()}));else B()})});let N=await O2(V);F.writeHead(200,{"Content-Type":"image/png","Cache-Control":"no-store","Access-Control-Allow-Origin":"*"}),F.end(N)}catch(N){let B=N.stderr,D=typeof B==="string"&&B.trim()||(N instanceof Error?N.message:String(N));F.writeHead(500,{"Content-Type":"application/json","Cache-Control":"no-store"}),F.end(JSON.stringify({ok:!1,error:D}))}finally{await A2(V).catch(()=>{})}return}if(j===Z+"/api/event-log"){F.writeHead(200,{"Content-Type":"application/json","Cache-Control":"no-store"}),F.end(JSON.stringify({events:t4({device:P,sinceId:E$(R),limit:T$(R)})}));return}if(j===Z+"/api/event-log/events"){F.writeHead(200,{"Content-Type":"text/event-stream","Cache-Control":"no-cache",Connection:"keep-alive","X-Accel-Buffering":"no"}),F.write(`:
76
76
 
77
- `),F.write("data: "+JSON.stringify({events:r4({device:D,sinceId:P$(R),limit:D$(R)})})+`
77
+ `),F.write("data: "+JSON.stringify({events:t4({device:P,sinceId:E$(R),limit:T$(R)})})+`
78
78
 
79
- `);let _=T9((N)=>{if(D&&N.device!==D)return;if(F.writableEnded)return;F.write("data: "+JSON.stringify({event:N})+`
79
+ `);let _=E9((N)=>{if(P&&N.device!==P)return;if(F.writableEnded)return;F.write("data: "+JSON.stringify({event:N})+`
80
80
 
81
81
  `)}),V=setInterval(()=>{if(!F.writableEnded)F.write(`:
82
82
 
83
- `)},15000);M.on("close",()=>{clearInterval(V),_()});return}if(j===Z+"/api/events"){let _=async()=>{let b=await F0(),c=D0(b,L),E=c?x4(c,Z4(M),Z,q4(M),X):null;return JSON.stringify(E?m8(E,Z,d8(),H,Q,X):null)};F.writeHead(200,{"Content-Type":"text/event-stream","Cache-Control":"no-cache",Connection:"keep-alive","X-Accel-Buffering":"no"}),F.write(`:
83
+ `)},15000);M.on("close",()=>{clearInterval(V),_()});return}if(j===Z+"/api/events"){let _=async()=>{let b=await F0(),c=P0(b,L),E=c?x4(c,Z4(M),Z,q4(M),X):null;return JSON.stringify(E?l8(E,Z,i8(),H,Q,X):null)};F.writeHead(200,{"Content-Type":"text/event-stream","Cache-Control":"no-cache",Connection:"keep-alive","X-Accel-Buffering":"no"}),F.write(`:
84
84
 
85
85
  `);let V=await _();F.write("data: "+V+`
86
86
 
87
87
  `);let N=!1,B=async()=>{if(N||F.writableEnded)return;let b=await _();if(b===V)return;V=b,F.write("data: "+b+`
88
88
 
89
- `)},P=null,T=()=>{if(P)return;P=setTimeout(()=>{P=null,B()},150)},q=null,S=null,y=()=>{if(N||F.writableEnded||q||S)return;S=setTimeout(()=>{if(S=null,N||F.writableEnded||q)return;try{q=N2(i8,T),q.on("error",()=>{q?.close(),q=null,y()}),B()}catch{y()}},250)};y();let k=setInterval(()=>{if(N||F.writableEnded)return;F.write(`:
89
+ `)},D=null,T=()=>{if(D)return;D=setTimeout(()=>{D=null,B()},150)},q=null,w=null,y=()=>{if(N||F.writableEnded||q||w)return;w=setTimeout(()=>{if(w=null,N||F.writableEnded||q)return;try{q=L2(n8,T),q.on("error",()=>{q?.close(),q=null,y()}),B()}catch{y()}},250)};y();let k=setInterval(()=>{if(N||F.writableEnded)return;F.write(`:
90
90
 
91
- `),y()},15000);M.on("close",()=>{if(N=!0,P)clearTimeout(P);if(S)clearTimeout(S);clearInterval(k),q?.close()});return}if(j===Z+"/logs"){let _=await F0(),V=D0(_,L);if(!V){F.writeHead(404),F.end("No serve-sim device");return}let N=V.device;F.writeHead(200,{"Content-Type":"text/event-stream","Cache-Control":"no-cache",Connection:"keep-alive","X-Accel-Buffering":"no"}),F.write(`:
91
+ `),y()},15000);M.on("close",()=>{if(N=!0,D)clearTimeout(D);if(w)clearTimeout(w);clearInterval(k),q?.close()});return}if(j===Z+"/logs"){let _=await F0(),V=P0(_,L);if(!V){F.writeHead(404),F.end("No serve-sim device");return}let N=V.device;F.writeHead(200,{"Content-Type":"text/event-stream","Cache-Control":"no-cache",Connection:"keep-alive","X-Accel-Buffering":"no"}),F.write(`:
92
92
 
93
- `);let B=O$("xcrun",["simctl","spawn",N,"log","stream","--style","ndjson","--level","info"],{stdio:["ignore","pipe","ignore"]}),P="";B.stdout.on("data",(T)=>{P+=T.toString();let q;while((q=P.indexOf(`
94
- `))!==-1){let S=P.slice(0,q).trim();if(P=P.slice(q+1),S)F.write("data: "+S+`
93
+ `);let B=A$("xcrun",["simctl","spawn",N,"log","stream","--style","ndjson","--level","info"],{stdio:["ignore","pipe","ignore"]}),D="";B.stdout.on("data",(T)=>{D+=T.toString();let q;while((q=D.indexOf(`
94
+ `))!==-1){let w=D.slice(0,q).trim();if(D=D.slice(q+1),w)F.write("data: "+w+`
95
95
 
96
- `)}if(P.length>C$)P=""}),B.on("error",()=>{try{F.end()}catch{}}),B.on("close",()=>F.end()),M.on("close",()=>{B.stdout?.destroy(),B.kill()});return}if(j===Z+"/ax"){let _=await F0(),V=D0(_,L);if(!V){F.writeHead(404),F.end("No serve-sim device");return}F.writeHead(200,{"Content-Type":"text/event-stream","Cache-Control":"no-cache",Connection:"keep-alive","X-Accel-Buffering":"no"}),F.write(`:
96
+ `)}if(D.length>P$)D=""}),B.on("error",()=>{try{F.end()}catch{}}),B.on("close",()=>F.end()),M.on("close",()=>{B.stdout?.destroy(),B.kill()});return}if(j===Z+"/ax"){let _=await F0(),V=P0(_,L);if(!V){F.writeHead(404),F.end("No serve-sim device");return}F.writeHead(200,{"Content-Type":"text/event-stream","Cache-Control":"no-cache",Connection:"keep-alive","X-Accel-Buffering":"no"}),F.write(`:
97
97
 
98
- `),R$.prune(_.map((P)=>P.device));let B=R$.get(V.device).addClient(F);M.on("close",B);return}if((j===Z+"/exec"||j===Z+"/exec/")&&M.method==="POST"){if(!$1(M.headers["content-type"])){F.writeHead(415,{"Content-Type":"application/json"}),F.end(JSON.stringify({stdout:"",stderr:"Unsupported Media Type",exitCode:1}));return}let _=M.headers.origin;if(_)try{if(new URL(_).host!==M.headers.host){F.writeHead(403,{"Content-Type":"application/json"}),F.end(JSON.stringify({stdout:"",stderr:"Cross-origin request blocked",exitCode:1}));return}}catch{F.writeHead(403,{"Content-Type":"application/json"}),F.end(JSON.stringify({stdout:"",stderr:"Invalid Origin",exitCode:1}));return}let V=M.headers.authorization??"",N=/^Bearer\s+(.+)$/i.exec(V);if(!N||!e2(N[1].trim(),H)){F.writeHead(401,{"Content-Type":"application/json"}),F.end(JSON.stringify({stdout:"",stderr:"Unauthorized",exitCode:1}));return}let B="",P=!1;M.on("data",(T)=>{if(B+=typeof T==="string"?T:T.toString(),B.length>4194304)P=!0,F.writeHead(413,{"Content-Type":"application/json"}),F.end(JSON.stringify({stdout:"",stderr:"Payload Too Large",exitCode:1})),M.destroy()}),M.on("end",()=>{if(P)return;let T="";try{T=JSON.parse(B).command??""}catch{}if(!T){F.writeHead(400,{"Content-Type":"application/json"}),F.end(JSON.stringify({stdout:"",stderr:"Missing command",exitCode:1}));return}U2(T,{maxBuffer:16777216},(q,S,y)=>{let k=q?q.code??1:0;T$(T,{exitCode:k}),F.writeHead(200,{"Content-Type":"application/json"}),F.end(JSON.stringify({stdout:S.toString(),stderr:y.toString(),exitCode:k}))})});return}if(j===Z+"/appstate"){let _=await F0(),V=D0(_,L);if(!V){F.writeHead(404),F.end("No serve-sim device");return}let N=V.device;F.writeHead(200,{"Content-Type":"text/event-stream","Cache-Control":"no-cache",Connection:"keep-alive","X-Accel-Buffering":"no"}),F.write(`:
98
+ `),D$.prune(_.map((D)=>D.device));let B=D$.get(V.device).addClient(F);M.on("close",B);return}if((j===Z+"/exec"||j===Z+"/exec/")&&M.method==="POST"){if(!Z1(M.headers["content-type"])){F.writeHead(415,{"Content-Type":"application/json"}),F.end(JSON.stringify({stdout:"",stderr:"Unsupported Media Type",exitCode:1}));return}let _=M.headers.origin;if(_)try{if(new URL(_).host!==M.headers.host){F.writeHead(403,{"Content-Type":"application/json"}),F.end(JSON.stringify({stdout:"",stderr:"Cross-origin request blocked",exitCode:1}));return}}catch{F.writeHead(403,{"Content-Type":"application/json"}),F.end(JSON.stringify({stdout:"",stderr:"Invalid Origin",exitCode:1}));return}let V=M.headers.authorization??"",N=/^Bearer\s+(.+)$/i.exec(V);if(!N||!Q1(N[1].trim(),H)){F.writeHead(401,{"Content-Type":"application/json"}),F.end(JSON.stringify({stdout:"",stderr:"Unauthorized",exitCode:1}));return}let B="",D=!1;M.on("data",(T)=>{if(B+=typeof T==="string"?T:T.toString(),B.length>4194304)D=!0,F.writeHead(413,{"Content-Type":"application/json"}),F.end(JSON.stringify({stdout:"",stderr:"Payload Too Large",exitCode:1})),M.destroy()}),M.on("end",()=>{if(D)return;let T="";try{T=JSON.parse(B).command??""}catch{}if(!T){F.writeHead(400,{"Content-Type":"application/json"}),F.end(JSON.stringify({stdout:"",stderr:"Missing command",exitCode:1}));return}j2(T,{maxBuffer:16777216},(q,w,y)=>{let k=q?q.code??1:0;I$(T,{exitCode:k}),F.writeHead(200,{"Content-Type":"application/json"}),F.end(JSON.stringify({stdout:w.toString(),stderr:y.toString(),exitCode:k}))})});return}if(j===Z+"/appstate"){let _=await F0(),V=P0(_,L);if(!V){F.writeHead(404),F.end("No serve-sim device");return}let N=V.device;F.writeHead(200,{"Content-Type":"text/event-stream","Cache-Control":"no-cache",Connection:"keep-alive","X-Accel-Buffering":"no"}),F.write(`:
99
99
 
100
- `);let B="";try{let y=JSON.parse(await H4(N));if(!y.bundleId||!E$(y.bundleId))return;if(F.writableEnded)return;B=y.bundleId;let k=await I$(N,y.bundleId);if(F.writableEnded)return;F.write("data: "+JSON.stringify({bundleId:y.bundleId,pid:y.pid,isReactNative:k})+`
100
+ `);let B="";try{let y=JSON.parse(await H4(N));if(!y.bundleId||!x$(y.bundleId))return;if(F.writableEnded)return;B=y.bundleId;let k=await q$(N,y.bundleId);if(F.writableEnded)return;F.write("data: "+JSON.stringify({bundleId:y.bundleId,pid:y.pid,isReactNative:k})+`
101
101
 
102
- `)}catch{}let P=O$("xcrun",["simctl","spawn",N,"log","stream","--style","ndjson","--level","info","--predicate",'process == "SpringBoard" AND eventMessage CONTAINS "Setting process visibility to: Foreground"'],{stdio:["ignore","pipe","ignore"]}),T=!1,q=async(y,k)=>{if(!E$(y))return;if(y===B)return;B=y;let b=await I$(N,y);if(!T)F.write("data: "+JSON.stringify({bundleId:y,pid:k,isReactNative:b})+`
102
+ `)}catch{}let D=A$("xcrun",["simctl","spawn",N,"log","stream","--style","ndjson","--level","info","--predicate",'process == "SpringBoard" AND eventMessage CONTAINS "Setting process visibility to: Foreground"'],{stdio:["ignore","pipe","ignore"]}),T=!1,q=async(y,k)=>{if(!x$(y))return;if(y===B)return;B=y;let b=await q$(N,y);if(!T)F.write("data: "+JSON.stringify({bundleId:y,pid:k,isReactNative:b})+`
103
103
 
104
- `)},S="";P.stdout.on("data",(y)=>{S+=y.toString();let k;while((k=S.indexOf(`
105
- `))!==-1){let b=S.slice(0,k).trim();if(S=S.slice(k+1),!b)continue;let c;try{c=JSON.parse(b).eventMessage??""}catch{continue}let E=E2(c);if(!E)continue;q(E.bundleId,E.pid)}if(S.length>C$)S=""}),P.on("error",()=>{T=!0;try{F.end()}catch{}}),P.on("close",()=>F.end()),M.on("close",()=>{T=!0,P.stdout?.destroy(),P.kill()});return}if(A)return A()};W.handleUpgrade=(M,F,A)=>{let R=M.url??"",x=q$(R)??$?.device??null,j=c8(R,J),D=k2(R,Y);if(D){(async()=>{try{let C=await G();v2(M,F,A,`ws://127.0.0.1:${C.port}${D.upstreamPath}`)}catch(C){let I=C instanceof Error?C.message:"Failed to start inspect-webkit";F.end(`HTTP/1.1 502 Bad Gateway\r
104
+ `)},w="";D.stdout.on("data",(y)=>{w+=y.toString();let k;while((k=w.indexOf(`
105
+ `))!==-1){let b=w.slice(0,k).trim();if(w=w.slice(k+1),!b)continue;let c;try{c=JSON.parse(b).eventMessage??""}catch{continue}let E=q2(c);if(!E)continue;q(E.bundleId,E.pid)}if(w.length>P$)w=""}),D.on("error",()=>{T=!0;try{F.end()}catch{}}),D.on("close",()=>F.end()),M.on("close",()=>{T=!0,D.stdout?.destroy(),D.kill()});return}if(A)return A()};W.handleUpgrade=(M,F,A)=>{let R=M.url??"",x=S$(R)??$?.device??null,j=m8(R,J),P=v2(R,Y);if(P){(async()=>{try{let C=await G();h2(M,F,A,`ws://127.0.0.1:${C.port}${P.upstreamPath}`)}catch(C){let I=C instanceof Error?C.message:"Failed to start inspect-webkit";F.end(`HTTP/1.1 502 Bad Gateway\r
106
106
  Content-Type: text/plain; charset=utf-8\r
107
107
  \r
108
- ${I}`)}})();return}if(!j){F.destroy();return}let L=j.device??x;if(j.upstreamPath==="/ws"){if(g2(M,F,A,L,Q))return;F.end(`HTTP/1.1 404 Not Found\r
108
+ ${I}`)}})();return}if(!j){F.destroy();return}let L=j.device??x;if(j.upstreamPath==="/ws"){if(m2(M,F,A,L,Q))return;F.end(`HTTP/1.1 404 Not Found\r
109
109
  \r
110
110
  `);return}F.end(`HTTP/1.1 400 Bad Request\r
111
111
  \r
112
- `)};let z=async(M)=>{return p6(W,M)},U=x6({path:`${Z}/exec-ws`,execToken:H,ssePrefixes:[`${Z}/api/events`,`${Z}/api/event-log/events`,`${Z}/appstate`,`${Z}/logs`,`${Z}/ax`],onUiRequest:K,onCommandResult:(M,F)=>T$(M,F),onSseRequest(M,F){let A=new URL(M,F.url);return z(new Request(A,{headers:{accept:"text/event-stream"}}))}});return z.handleWebSocket=(M,F)=>{if(U(M,F))return!0;if(q6(M,F,{helperProxyTarget:(A)=>c8(A,J),fallbackDevice:$?.device??null,resolveSession:(A)=>_4(A,Q)}))return!0;return!1},z.handleUpgrade=(M,F,A)=>{W.handleUpgrade?.(M,F,A)},z}export{u2 as startDeviceInProcess,eJ as simMiddleware,D0 as selectServeSimState,x4 as rewriteStateForRequestHost,F0 as readServeSimStates,m8 as previewConfigForState,q2 as parseGridPaging,E2 as parseForegroundAppLogMessage,sJ as matchInstalledAppByDisplayName};
112
+ `)};let z=async(M)=>{return g6(W,M)},U=q6({path:`${Z}/exec-ws`,execToken:H,ssePrefixes:[`${Z}/api/events`,`${Z}/api/event-log/events`,`${Z}/appstate`,`${Z}/logs`,`${Z}/ax`],onUiRequest:K,onCommandResult:(M,F)=>I$(M,F),onSseRequest(M,F){let A=new URL(M,F.url);return z(new Request(A,{headers:{accept:"text/event-stream"}}))}});return z.handleWebSocket=(M,F)=>{if(U(M,F))return!0;if(w6(M,F,{helperProxyTarget:(A)=>m8(A,J),fallbackDevice:$?.device??null,resolveSession:(A)=>_4(A,Q)}))return!0;return!1},z.handleUpgrade=(M,F,A)=>{W.handleUpgrade?.(M,F,A)},z}export{g2 as startDeviceInProcess,Z3 as simMiddleware,P0 as selectServeSimState,x4 as rewriteStateForRequestHost,F0 as readServeSimStates,l8 as previewConfigForState,S2 as parseGridPaging,q2 as parseForegroundAppLogMessage,Q3 as matchInstalledAppByDisplayName};
113
113
 
114
- //# debugId=9E15170FE92E5B1A64756E2164756E21
114
+ //# debugId=D54E1FEB46E9DB9B64756E2164756E21
115
115
  //# sourceMappingURL=middleware.js.map