serve-sim 0.1.24 → 0.1.26

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/serve-sim.js CHANGED
@@ -1,21 +1,21 @@
1
1
  #!/usr/bin/env node
2
- import{createRequire as OS}from"node:module";var uS=Object.defineProperty;var pS=(_)=>_;function lS(_,e){this[_]=pS.bind(null,e)}var _t=(_,e)=>{for(var t in e)uS(_,t,{get:e[t],enumerable:!0,configurable:!0,set:lS.bind(e,t)})};var re=(_,e)=>()=>(_&&(e=_(_=0)),e);var dS=OS(import.meta.url);var G_="Accessibility unavailable on this simulator.";function US(_){return _[0]?.frame??{x:0,y:0,width:1,height:1}}function IS(_,e){return Math.abs(_.x-e.x)<0.5&&Math.abs(_.y-e.y)<0.5&&Math.abs(_.width-e.width)<0.5&&Math.abs(_.height-e.height)<0.5}function GS(_){let e=US(_),t=[],S=(i,s)=>{if(t.length>=$e)return;let C=i.frame;if(!IS(C,e))t.push({id:i.AXUniqueId??s,path:s,label:i.AXLabel??"",value:i.AXValue??"",role:i.role_description,type:i.type,enabled:i.enabled!==!1,frame:C});for(let $=0;$<i.children.length&&t.length<$e;$++)S(i.children[$],`${s}.${$}`)};for(let i=0;i<_.length&&t.length<$e;i++)S(_[i],String(i));return{screen:{width:e.width,height:e.height},elements:t}}async function qS(_){let e=new AbortController,t=setTimeout(()=>e.abort(),WS);try{let S=await fetch(`http://127.0.0.1:${_}/ax`,{signal:e.signal});if(S.status===503)return{screen:{width:1,height:1},elements:[],errors:[G_]};if(!S.ok)throw Error(`HTTP ${S.status} ${S.statusText}`);return GS(await S.json())}finally{clearTimeout(t)}}function XS(_){return _?.errors?.includes(G_)??!1}function kS(_){return _.elements.length>0&&_.screen.width>1&&_.screen.height>1}async function KS(_){let e=[];try{let t=await qS(_);if(t.errors?.length)return t;if(!kS(t))throw Error(`helper returned ${t.elements.length} elements in ${t.screen.width}x${t.screen.height} AX space`);return{...t,errors:e}}catch(t){let S=t,i=S.cause?.code??S.code,s=S.message||String(t),C=i==="ECONNREFUSED"||i==="ECONNRESET"||/unable to connect|fetch failed|ECONNREFUSED/i.test(s);e.push(C?G_:s)}return{screen:{width:1,height:1},elements:[],errors:e}}function xS(_){return`data: ${JSON.stringify(_)}
2
+ import{createRequire as ht}from"node:module";var gt=Object.defineProperty;var Ht=(_)=>_;function Nt(_,e){this[_]=Ht.bind(null,e)}var tS=(_,e)=>{for(var S in e)gt(_,S,{get:e[S],enumerable:!0,configurable:!0,set:Nt.bind(e,S)})};var Ae=(_,e)=>()=>(_&&(e=_(_=0)),e);var Vt=ht(import.meta.url);var q_="Accessibility unavailable on this simulator.";function Kt(_){return _[0]?.frame??{x:0,y:0,width:1,height:1}}function xt(_,e){return Math.abs(_.x-e.x)<0.5&&Math.abs(_.y-e.y)<0.5&&Math.abs(_.width-e.width)<0.5&&Math.abs(_.height-e.height)<0.5}function zt(_){let e=Kt(_),S=[],t=(s,i)=>{if(S.length>=oe)return;let C=s.frame;if(!xt(C,e))S.push({id:s.AXUniqueId??i,path:i,label:s.AXLabel??"",value:s.AXValue??"",role:s.role_description,type:s.type,enabled:s.enabled!==!1,frame:C});for(let $=0;$<s.children.length&&S.length<oe;$++)t(s.children[$],`${i}.${$}`)};for(let s=0;s<_.length&&S.length<oe;s++)t(_[s],String(s));return{screen:{width:e.width,height:e.height},elements:S}}async function jt(_){let e=new AbortController,S=setTimeout(()=>e.abort(),qt);try{let t=await fetch(`http://127.0.0.1:${_}/ax`,{signal:e.signal});if(t.status===503)return{screen:{width:1,height:1},elements:[],errors:[q_]};if(!t.ok)throw Error(`HTTP ${t.status} ${t.statusText}`);return zt(await t.json())}finally{clearTimeout(S)}}function Jt(_){return _?.errors?.includes(q_)??!1}function Zt(_){return _.elements.length>0&&_.screen.width>1&&_.screen.height>1}async function Qt(_){let e=[];try{let S=await jt(_);if(S.errors?.length)return S;if(!Zt(S))throw Error(`helper returned ${S.elements.length} elements in ${S.screen.width}x${S.screen.height} AX space`);return{...S,errors:e}}catch(S){let t=S,s=t.cause?.code??t.code,i=t.message||String(S),C=s==="ECONNREFUSED"||s==="ECONNRESET"||/unable to connect|fetch failed|ECONNREFUSED/i.test(i);e.push(C?q_:i)}return{screen:{width:1,height:1},elements:[],errors:e}}function Yt(_){return`data: ${JSON.stringify(_)}
3
3
 
4
- `}function zS({port:_}){let e=new Set,t=null,S=null,i=Ae,s=!1,C=_,A=()=>{if(e.size===0||t)return;t=setTimeout($,i)},$=async()=>{if(t=null,s||e.size===0){A();return}s=!0;try{let n=await KS(C),c=xS(n);if(c!==S){for(let o of e)o.write(c);i=Ae}else i=Math.min(i*2,PS);if(S=c,XS(n))i=MS}finally{s=!1,A()}};return{setPort(n){if(n===C)return;if(C=n,S=null,i=Ae,t)clearTimeout(t),t=null;$()},addClient(n){if(e.add(n),S)n.write(S);return $(),()=>{if(e.delete(n),e.size===0&&t)clearTimeout(t),t=null}}}}function st(){let _=new Map;return{get(e,t){let S=_.get(e);if(S)return S.setPort(t),S;let i=zS({port:t});return _.set(e,i),i}}}var WS=3500,$e=500,Ae=500,PS=2000,MS=15000;var it=()=>{};var Lt={};_t(Lt,{startCdpServer:()=>Di,startBunCdpServer:()=>vi,listTargets:()=>ui,listDevices:()=>Vt});import{createRequire as jS}from"node:module";import*as Bt from"node:net";import*as Et from"node:net";import{spawnSync as Ts}from"node:child_process";import*as vt from"node:tls";import*as dt from"node:http";function _s(_){return this[_]}function rt(_){return _.replace(/[&<>'"]/g,(e)=>e==="&"?"&amp;":e==="<"?"&lt;":e===">"?"&gt;":e==="'"?"&apos;":"&quot;")}function As(_){let e="";for(let t=0;t<_.length;t++)e+=String.fromCharCode(_[t]);return btoa(e)}function os(_){let e=atob(_.replace(/\s+/g,"")),t=new Uint8Array(e.length);for(let S=0;S<e.length;S++)t[S]=e.charCodeAt(S);return t}function Re(_,e){if(_===null||_===void 0)return`${e}<string></string>`;if(typeof _==="boolean")return`${e}<${_?"true":"false"}/>`;if(typeof _==="string")return`${e}<string>${rt(_)}</string>`;if(typeof _==="number"){if(Number.isInteger(_))return`${e}<integer>${_}</integer>`;return`${e}<real>${_}</real>`}if(typeof _==="bigint")return`${e}<integer>${_.toString()}</integer>`;if(_ instanceof Uint8Array)return`${e}<data>${As(_)}</data>`;if(_ instanceof Date)return`${e}<date>${_.toISOString().replace(/\.\d+Z$/,"Z")}</date>`;if(Array.isArray(_)){if(_.length===0)return`${e}<array/>`;let i=_.map((s)=>Re(s,e+"\t")).join(`
4
+ `}function _s({port:_}){let e=new Set,S=null,t=null,s=ne,i=!1,C=_,n=()=>{if(e.size===0||S)return;S=setTimeout($,s)},$=async()=>{if(S=null,i||e.size===0){n();return}i=!0;try{let A=await Qt(C),B=Yt(A);if(B!==t){for(let c of e)c.write(B);s=ne}else s=Math.min(s*2,Xt);if(t=B,Jt(A))s=kt}finally{i=!1,n()}};return{setPort(A){if(A===C)return;if(C=A,t=null,s=ne,S)clearTimeout(S),S=null;$()},addClient(A){if(e.add(A),t)A.write(t);return $(),()=>{if(e.delete(A),e.size===0&&S)clearTimeout(S),S=null}}}}function rS(){let _=new Map;return{get(e,S){let t=_.get(e);if(t)return t.setPort(S),t;let s=_s({port:S});return _.set(e,s),s}}}var qt=3500,oe=500,ne=500,Xt=2000,kt=15000;var $S=()=>{};var MS={};tS(MS,{startCdpServer:()=>vi,startBunCdpServer:()=>wi,listTargets:()=>gi,listDevices:()=>WS});import{createRequire as es}from"node:module";import*as fS from"node:net";import*as vS from"node:net";import{spawnSync as ps}from"node:child_process";import*as OS from"node:tls";import*as HS from"node:http";function Cs(_){return this[_]}function oS(_){return _.replace(/[&<>'"]/g,(e)=>e==="&"?"&amp;":e==="<"?"&lt;":e===">"?"&gt;":e==="'"?"&apos;":"&quot;")}function Rs(_){let e="";for(let S=0;S<_.length;S++)e+=String.fromCharCode(_[S]);return btoa(e)}function Bs(_){let e=atob(_.replace(/\s+/g,"")),S=new Uint8Array(e.length);for(let t=0;t<e.length;t++)S[t]=e.charCodeAt(t);return S}function De(_,e){if(_===null||_===void 0)return`${e}<string></string>`;if(typeof _==="boolean")return`${e}<${_?"true":"false"}/>`;if(typeof _==="string")return`${e}<string>${oS(_)}</string>`;if(typeof _==="number"){if(Number.isInteger(_))return`${e}<integer>${_}</integer>`;return`${e}<real>${_}</real>`}if(typeof _==="bigint")return`${e}<integer>${_.toString()}</integer>`;if(_ instanceof Uint8Array)return`${e}<data>${Rs(_)}</data>`;if(_ instanceof Date)return`${e}<date>${_.toISOString().replace(/\.\d+Z$/,"Z")}</date>`;if(Array.isArray(_)){if(_.length===0)return`${e}<array/>`;let s=_.map((i)=>De(i,e+"\t")).join(`
5
5
  `);return`${e}<array>
6
- ${i}
7
- ${e}</array>`}let t=Object.keys(_);if(t.length===0)return`${e}<dict/>`;let S=t.map((i)=>`${e} <key>${rt(i)}</key>
8
- `+Re(_[i],e+"\t")).join(`
6
+ ${s}
7
+ ${e}</array>`}let S=Object.keys(_);if(S.length===0)return`${e}<dict/>`;let t=S.map((s)=>`${e} <key>${oS(s)}</key>
8
+ `+De(_[s],e+"\t")).join(`
9
9
  `);return`${e}<dict>
10
- ${S}
11
- ${e}</dict>`}function be(_){let e=Re(_,"");return new TextEncoder().encode(rs+e+$s)}class Dt{src;pos=0;constructor(_){this.src=_}skip(){while(this.pos<this.src.length){let _=this.src[this.pos];if(_===" "||_==="\t"||_===`
12
- `||_==="\r")this.pos++;else if(this.src.startsWith("<!--",this.pos)){let e=this.src.indexOf("-->",this.pos+4);if(e<0)throw Error("unterminated comment");this.pos=e+3}else if(this.src.startsWith("<?",this.pos)){let e=this.src.indexOf("?>",this.pos+2);if(e<0)throw Error("unterminated processing instruction");this.pos=e+2}else if(this.src.startsWith("<!DOCTYPE",this.pos)){let e=0;while(this.pos<this.src.length){let t=this.src[this.pos++];if(t==="[")e++;else if(t==="]")e--;else if(t===">"&&e===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 e=this.src.slice(this.pos+1,_);this.pos=_+1;let t=e.startsWith("/"),S=e.endsWith("/");return{name:e.replace(/^\/?/,"").replace(/\/$/,"").trim().split(/\s+/)[0],selfClose:S,isClose:t}}readText(){let _=this.src.indexOf("<",this.pos),e=_<0?this.src.slice(this.pos):this.src.slice(this.pos,_);return this.pos=_<0?this.src.length:_,e.replace(/&lt;/g,"<").replace(/&gt;/g,">").replace(/&quot;/g,'"').replace(/&apos;/g,"'").replace(/&amp;/g,"&")}}function Be(_,e){let t=(S)=>{let i=_.nextTag();if(!i||!i.isClose||i.name!==S)throw Error(`expected </${S}>`)};switch(e){case"true":case"false":throw Error(`<${e}> must be self-closing`);case"string":case"key":{let S=_.readText();return t(e),S}case"integer":{let S=_.readText().trim();if(t("integer"),/^-?\d+$/.test(S)&&Math.abs(Number(S))<=Number.MAX_SAFE_INTEGER)return Number(S);return BigInt(S)}case"real":{let S=Number(_.readText().trim());return t("real"),S}case"data":{let S=os(_.readText());return t("data"),S}case"date":{let S=new Date(_.readText().trim());return t("date"),S}case"array":{let S=[];while(!0){let i=_.nextTag();if(!i)throw Error("unterminated <array>");if(i.isClose&&i.name==="array")return S;S.push(i.selfClose?De(i.name):Be(_,i.name))}}case"dict":{let S={};while(!0){let i=_.nextTag();if(!i)throw Error("unterminated <dict>");if(i.isClose&&i.name==="dict")return S;if(i.name!=="key")throw Error(`expected <key>, got <${i.name}>`);let s=_.readText();t("key");let C=_.nextTag();if(!C)throw Error("unterminated <dict>");S[s]=C.selfClose?De(C.name):Be(_,C.name)}}default:throw Error(`unknown plist tag <${e}>`)}}function De(_){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 X_(_){let e=typeof _==="string"?_:new TextDecoder().decode(_),t=new Dt(e);while(!0){let i=t.nextTag();if(!i)throw Error("no <plist> root");if(i.name==="plist"&&!i.isClose)break}let S=t.nextTag();if(!S)throw Error("empty plist");return S.selfClose?De(S.name):Be(t,S.name)}function A_(_,e,t){let S=0;for(let i=0;i<t;i++)S=S*256+_[e+i];return S}function ns(_){if(_.length<41)throw Error("bplist too short");let e=new TextDecoder().decode(_.slice(0,8));if(e!=="bplist00")throw Error(`bad magic: ${e}`);let t=_.length-32,S=_[t+6],i=_[t+7],s=A_(_,t+8,8),C=A_(_,t+16,8),A=A_(_,t+24,8),$=Array(s);for(let o=0;o<s;o++)$[o]=A_(_,A+o*S,S);function n(o){return A_(_,o,i)}function c(o){let B=$[o],p=_[B],u=p>>4,l=p&15;function F(b){if(l!==15)return{len:l,next:b};let v=_[b];if((v&240)!==16)throw Error("expected int marker for length");let T=1<<(v&15);return{len:A_(_,b+1,T),next:b+1+T}}switch(u){case 0:if(l===0)return null;if(l===8)return!1;if(l===9)return!0;if(l===15)return null;throw Error(`unknown singleton ${l}`);case 1:{let b=1<<l,v=A_(_,B+1,b);if(b===8&&v>Number.MAX_SAFE_INTEGER)return BigInt(v);return v}case 2:{let b=1<<l,v=new DataView(_.buffer,_.byteOffset+B+1,b);return b===4?v.getFloat32(0,!1):v.getFloat64(0,!1)}case 3:{let v=new DataView(_.buffer,_.byteOffset+B+1,8).getFloat64(0,!1);return new Date(Date.UTC(2001,0,1)+v*1000)}case 4:{let{len:b,next:v}=F(B+1);return _.slice(v,v+b)}case 5:{let{len:b,next:v}=F(B+1);return new TextDecoder("ascii").decode(_.slice(v,v+b))}case 6:{let{len:b,next:v}=F(B+1),T=_.slice(v,v+b*2),D=new Uint8Array(T.length);for(let E=0;E<T.length;E+=2)D[E]=T[E+1],D[E+1]=T[E];return new TextDecoder("utf-16le").decode(D)}case 10:{let{len:b,next:v}=F(B+1),T=[];for(let D=0;D<b;D++)T.push(c(n(v+D*i)));return T}case 13:{let{len:b,next:v}=F(B+1),T={};for(let D=0;D<b;D++){let E=c(n(v+D*i)),y=c(n(v+(b+D)*i));if(typeof E!=="string")throw Error(`non-string dict key: ${typeof E}`);T[E]=y}return T}default:throw Error(`unknown bplist marker 0x${p.toString(16)} at ${B}`)}}return c(C)}function ys(_){if(_.length>=8){if(new TextDecoder().decode(_.slice(0,8))==="bplist00")return ns(_)}return X_(_)}class k_{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 e of this.waiters)e.reject(_??Error("stream closed"));this.waiters=[]}read(_){return new Promise((e,t)=>{if(this.closed&&this.size<_){t(this.closeErr??Error("stream closed"));return}this.waiters.push({n:_,resolve:e,reject:t}),this.drain()})}drain(){while(this.waiters.length>0&&this.waiters[0].n<=this.size){let _=this.waiters.shift(),e=new Uint8Array(_.n),t=0;while(t<_.n){let S=this.chunks[0],i=_.n-t;if(S.length<=i)e.set(S,t),t+=S.length,this.chunks.shift();else e.set(S.subarray(0,i),t),this.chunks[0]=S.subarray(i),t+=i}this.size-=_.n,_.resolve(e)}}}function ve(_,e){let t=(s)=>{e.push(new Uint8Array(s.buffer,s.byteOffset,s.byteLength))},S=()=>e.close(),i=(s)=>e.close(s);return _.on("data",t),_.on("close",S),_.on("error",i),()=>{_.off("data",t),_.off("close",S),_.off("error",i)}}async function ue(){let _=new k_;return new Promise((e,t)=>{let S=Bt.createConnection({path:Rs}),i=(s)=>{_.close(s),t(s)};S.once("error",i),S.once("connect",()=>{S.off("error",i);let s=ve(S,_);e({socket:S,stream:_,detach:s})})})}async function Bs(_){let e=await _.read(4),t=new DataView(e.buffer,e.byteOffset,4).getUint32(0,!0);return(await _.read(t-4)).slice(12)}function Ds(_,e,t){let S=16+t.length,i=new Uint8Array(16),s=new DataView(i.buffer);s.setUint32(0,S,!0),s.setUint32(4,as,!0),s.setUint32(8,cs,!0),s.setUint32(12,e,!0),_.write(i),_.write(t)}async function pe(_,e,t,S){let i=be({ClientVersionString:"inspect-webkit-1.0",ProgName:"inspect-webkit",kLibUSBMuxVersion:3,...S});Ds(_,t,i);let s=await Bs(e);return X_(s)}async function Tt(){let{socket:_,stream:e}=await ue();try{return(await pe(_,e,1,{MessageType:"ListDevices"})).DeviceList??[]}finally{_.end()}}async function ft(_){let{socket:e,stream:t}=await ue();try{let i=(await pe(e,t,1,{MessageType:"ReadPairRecord",PairRecordID:_})).PairRecordData;if(!i)throw Error(`no pair record for ${_} — pair the device first (open Finder/iTunes, tap "Trust")`);return X_(i)}finally{e.end()}}async function $t(_,e){let{socket:t,stream:S,detach:i}=await ue(),s=(e&255)<<8|e>>8&255,C=await pe(t,S,1,{MessageType:"Connect",DeviceID:_,PortNumber:s});if(C.MessageType!=="Result"||C.Number!==0){t.end();let A=C.Number??"?";throw Error(`Connect to device ${_} port ${e} failed (code ${A})`)}return{socket:t,stream:S,detach:i}}async function Ft(){let _=Ts("lsof",["-U"],{stdio:["ignore","pipe","ignore"]});if(_.status!==0||!_.stdout)return[];let e=_.stdout.toString("utf8"),t=new Map;for(let S of e.split(`
13
- `)){if(!/com\.apple\.webinspectord_sim\.socket\b/.test(S))continue;if(!S.startsWith("webinspec"))continue;let i=S.split(/\s+/),s=Number(i[1]),C=i[i.length-1];if(C)t.set(C,s)}return Array.from(t,([S,i])=>({socketPath:S,pid:i}))}async function bt(_){let e=new k_;return new Promise((t,S)=>{let i=Et.createConnection({path:_}),s=(C)=>{e.close(C),S(C)};i.once("error",s),i.once("connect",()=>{i.off("error",s),ve(i,e),t({socket:i,stream:e})})})}async function oe(_){let e=await _.read(4),t=new DataView(e.buffer,e.byteOffset,4).getUint32(0,!1),S=await _.read(t);return X_(S)}function ne(_,e){let t=be({Label:"inspect-webkit",...e}),S=new Uint8Array(4);new DataView(S.buffer).setUint32(0,t.length,!1),_.write(S),_.write(t)}function ye(_,e){if(_.Error)throw Error(`lockdown ${e} error: ${String(_.Error)}`);if(_.Request!==e)throw Error(`lockdown expected Request=${e}, got ${String(_.Request)}`)}function ot(_,e,t,S){return new Promise((i,s)=>{e();let C=new k_,A=vt.connect({socket:_,cert:Buffer.from(t.HostCertificate),key:Buffer.from(t.HostPrivateKey),ca:Buffer.from(t.RootCertificate),rejectUnauthorized:!1}),$=(n)=>{J(`${S} tls error:`,n),C.close(n),s(n)};A.once("error",$),A.once("secureConnect",()=>{J(`${S} tls handshake complete`),A.off("error",$);let n=ve(A,C);i({socket:A,stream:C,detach:n})})})}class K_{socket;stream;pair;udid;deviceID;detach;constructor(_,e,t,S,i,s){this.socket=_,this.stream=e,this.pair=t,this.udid=S,this.deviceID=i,this.detach=s}static async open(_,e){J("connecting usbmux tunnel to lockdown port",At);let{socket:t,stream:S,detach:i}=await $t(_.DeviceID,At),s=new K_(t,S,e,_.Properties.SerialNumber,_.DeviceID,i);J("sending QueryType"),ne(t,{Request:"QueryType"});let C=await oe(S);if(J("QueryType reply:",C),ye(C,"QueryType"),C.Type!=="com.apple.mobile.lockdown")throw Error(`unexpected lockdown Type: ${String(C.Type)}`);return s}async startSession(){J("StartSession with HostID",this.pair.HostID),ne(this.socket,{Request:"StartSession",HostID:this.pair.HostID,SystemBUID:this.pair.SystemBUID});let _=await oe(this.stream);if(J("StartSession reply:",_),ye(_,"StartSession"),_.EnableSessionSSL){J("upgrading to TLS");let e=await ot(this.socket,this.detach,this.pair,"lockdown");this.socket=e.socket,this.stream=e.stream,this.detach=e.detach,J("TLS upgrade complete")}}async startService(_){J("StartService",_),ne(this.socket,{Request:"StartService",Service:_});let e=await oe(this.stream);return J("StartService reply:",e),ye(e,"StartService"),{port:e.Port,enableServiceSSL:Boolean(e.EnableServiceSSL),service:_}}async connectService(_){J("connecting service tunnel to port",_.port,"ssl=",_.enableServiceSSL);let{socket:e,stream:t,detach:S}=await $t(this.deviceID,_.port);if(!_.enableServiceSSL)return{socket:e,stream:t};let i=await ot(e,S,this.pair,"service");return{socket:i.socket,stream:i.stream}}close(){this.socket.end()}}async function fs(_){let e=await _.read(4),t=new DataView(e.buffer,e.byteOffset,4).getUint32(0,!1),S=await _.read(t);return ys(S)}function Es(_,e){let t=be(e),S=new Uint8Array(4);new DataView(S.buffer).setUint32(0,t.length,!1),_.write(S),_.write(t)}function Fs(){let _=crypto.getRandomValues(new Uint8Array(16));_[6]=_[6]&15|64,_[8]=_[8]&63|128;let e=Array.from(_,(t)=>t.toString(16).padStart(2,"0")).join("");return`${e.slice(0,8)}-${e.slice(8,12)}-${e.slice(12,16)}-${e.slice(16,20)}-${e.slice(20)}`}class H_{socket;stream;connectionId=Fs();subscribers=new Set;reading;constructor(_,e){this.socket=_,this.stream=e,this.reading=(async()=>{try{while(!e.closed){let t=await fs(e);for(let S of[...this.subscribers])try{S(t)}catch{}}}catch{}})()}subscribe(_){return this.subscribers.add(_),()=>this.subscribers.delete(_)}waitFor(_,e=5000){return new Promise((t,S)=>{let i=setTimeout(()=>{s(),S(Error(`timeout waiting for ${_} after ${e}ms`))},e),s=this.subscribe((C)=>{if(C.__selector===_)clearTimeout(i),s(),t(C)})})}send(_,e){Es(this.socket,{__selector:_,__argument:{WIRConnectionIdentifierKey:this.connectionId,...e}})}async reportIdentifier(){this.send("_rpc_reportIdentifier:",{})}async listApplications(){this.send("_rpc_getConnectedApplications:",{});let _=await this.waitFor("_rpc_reportConnectedApplicationList:",3000).catch(()=>null);if(!_)return[];let t=_.__argument.WIRApplicationDictionaryKey??{},S=[];for(let[i,s]of Object.entries(t)){let C=s;S.push({appId:i,bundleId:C.WIRApplicationBundleIdentifierKey,name:C.WIRApplicationNameKey,isProxy:Boolean(C.WIRIsApplicationProxyKey),isActive:Boolean(C.WIRIsApplicationActiveKey),hostAppId:C.WIRHostApplicationIdentifierKey})}return S}async getListing(_){this.send("_rpc_forwardGetListing:",{WIRApplicationIdentifierKey:_});let e=await this.waitFor("_rpc_applicationSentListing:",3000).catch(()=>null);if(!e)return[];let S=e.__argument.WIRListingKey??{},i=[];for(let s of Object.values(S)){let C=s;i.push({pageId:Number(C.WIRPageIdentifierKey??0),title:C.WIRTitleKey??"",url:C.WIRURLKey??"",type:C.WIRTypeKey??""})}return i}get connection(){return this.connectionId}forwardSocketSetup(_,e,t){this.send("_rpc_forwardSocketSetup:",{WIRApplicationIdentifierKey:_,WIRPageIdentifierKey:e,WIRSenderKey:t,WIRAutomaticallyPause:!1})}forwardSocketData(_,e,t,S){this.send("_rpc_forwardSocketData:",{WIRApplicationIdentifierKey:_,WIRPageIdentifierKey:e,WIRSenderKey:t,WIRSocketDataKey:S})}forwardDidClose(_,e,t){this.send("_rpc_forwardDidClose:",{WIRApplicationIdentifierKey:_,WIRPageIdentifierKey:e,WIRSenderKey:t})}onMessage(_){return this.subscribe(_)}close(){this.socket.end()}}class le{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(_,e,t,S,i){this.ws=_,this.wi=e,this.appId=t,this.pageId=S,this.senderKey=i}addMessageFilter(_,e){let t=this.filters.get(_);if(!t)this.filters.set(_,t=[]);t.push(e)}callTarget(_,e={}){return new Promise((t,S)=>{let i=--this.requestId;this.adapterRequestMap.set(i,{resolve:t,reject:S}),this.sendRaw(JSON.stringify({id:i,method:_,params:e}))})}fireEventToTools(_,e){this.sendToTools(JSON.stringify({method:_,params:e}))}fireResultToTools(_,e){this.sendToTools(JSON.stringify({id:_,result:e}))}fireErrorToTools(_,e){this.sendToTools(JSON.stringify({id:_,error:{code:e.code??-32000,message:e.message}}))}replyEmpty(_){if(typeof _.id==="number")this.fireResultToTools(_.id,{});return Promise.resolve(null)}async onMessageFromTools(_){let e;try{e=JSON.parse(_)}catch{return}if(typeof e.method==="string"&&typeof e.id==="number")this.toolRequestMap.set(e.id,e.method);let t=`tools::${e.method}`,S=this.filters.get(t),i=e;if(S)for(let s of S){if(!i)break;i=await s(i)}if(i)this.sendRaw(JSON.stringify(i))}async onMessageFromTarget(_){let e;try{e=JSON.parse(_)}catch{return}if(e.method==="Target.targetCreated"){this.sawAnyTargetCreated=!0;let s=e.params?.targetInfo;if(s?.type==="page"&&!this.innerTargetId)this.innerTargetId=s.targetId,this.flushQueue();return}if(e.method==="Target.didCommitProvisionalTarget"){let s=e.params?.newTargetId;if(typeof s==="string")this.innerTargetId=s;return}if(e.method==="Target.targetDestroyed")return;if(e.method==="Target.dispatchMessageFromTarget"){let s=e.params?.message;if(typeof s==="string")return this.onMessageFromTarget(s);return}if(typeof e.id==="number"&&this.wrappedAckIds.has(e.id)){this.wrappedAckIds.delete(e.id);return}if(typeof e.id==="number"){let s=this.adapterRequestMap.get(e.id);if(s){if(this.adapterRequestMap.delete(e.id),"error"in e&&e.error)s.reject(e.error);else s.resolve(e.result??{});return}let C=this.toolRequestMap.get(e.id);if(C){this.toolRequestMap.delete(e.id);let A=`target::${C}`;if("error"in e&&this.filters.has("target::error"))A="target::error";let $=this.filters.get(A);if(!$)return this.sendToTools(_);let n=e;for(let c of $){if(!n)break;n=await c(n)}if(n)this.sendToTools(JSON.stringify(n));return}return this.sendToTools(_)}let t=`target::${e.method}`,S=this.filters.get(t);if(!S)return this.sendToTools(_);let i=e;for(let s of S){if(!i)break;i=await s(i)}if(i)this.sendToTools(JSON.stringify(i))}sendRaw(_){let e=null;try{e=JSON.parse(_)}catch{}let t=e&&typeof e.method==="string"&&e.method.startsWith("Target.");if(this.innerTargetId&&e&&!t){if(typeof e.id==="number")this.wrappedAckIds.add(e.id);let S={id:e.id,method:"Target.sendMessageToTarget",params:{id:e.id,message:_,targetId:this.innerTargetId}};this.writeFrame(JSON.stringify(S));return}if(!this.innerTargetId&&e&&!t){if(this.outgoingQueue.push(_),this.outgoingQueue.length===1)setTimeout(()=>{if(!this.innerTargetId&&!this.sawAnyTargetCreated&&this.outgoingQueue.length>0){let S=this.outgoingQueue;this.outgoingQueue=[];for(let i of S)this.writeFrame(i)}},250);return}this.writeFrame(_)}flushQueue(){if(this.outgoingQueue.length===0)return;let _=this.outgoingQueue;this.outgoingQueue=[];for(let e of _)this.sendRaw(e)}writeFrame(_){this.wi.forwardSocketData(this.appId,this.pageId,this.senderKey,new TextEncoder().encode(_))}sendToTools(_){if(this.ws.readyState===1)this.ws.send(_)}}function vs(){return{lastScriptEval:{value:""},pageExecCtx:{id:0,isPage:!1},lastConsoleApiCalled:{value:null}}}function N(_,e,t){return _.fireResultToTools(e.id,t),Promise.resolve(null)}function us(_,e){_.addMessageFilter("tools::Debugger.canSetScriptSource",(t)=>N(_,t,{result:!1})),_.addMessageFilter("tools::Debugger.setBlackboxPatterns",(t)=>N(_,t,{})),_.addMessageFilter("tools::Debugger.setAsyncCallStackDepth",(t)=>N(_,t,{})),_.addMessageFilter("target::Debugger.enable",(t)=>{return _.callTarget("Debugger.setBreakpointsActive",{active:!0}).catch(()=>{}),_.callTarget("Debugger.setPauseOnDebuggerStatements",{enabled:!0}).catch(()=>{}),Promise.resolve(t)}),_.addMessageFilter("target::Debugger.scriptParsed",(t)=>{if(t.params?.scriptId)e.lastScriptEval.value=String(t.params.scriptId);return Promise.resolve(t)}),_.addMessageFilter("tools::Debugger.setBreakpoint",(t)=>{let S=t.params??{};return t.params={location:S.location,options:S.condition?{condition:S.condition}:{}},Promise.resolve(t)}),_.addMessageFilter("tools::Debugger.setBreakpointByUrl",(t)=>{let S=t.params??{};return t.params={lineNumber:S.lineNumber,url:S.url,urlRegex:S.urlRegex,columnNumber:S.columnNumber,options:S.condition?{condition:S.condition}:{}},Promise.resolve(t)});for(let t of["removeBreakpoint","continueToLocation","stepInto","stepOver","stepOut","resume","pause","getScriptSource","evaluateOnCallFrame"])_.addMessageFilter(`tools::Debugger.${t}`,(S)=>Promise.resolve(S));_.addMessageFilter("target::Debugger.paused",(t)=>{let S=t.params?.callFrames;if(Array.isArray(S))for(let i of S){if(i.functionName==null&&typeof i.name==="string")i.functionName=i.name;if(!i.location&&i.sourceCodeLocation)i.location={scriptId:String(i.sourceCodeLocation.scriptId??""),lineNumber:i.sourceCodeLocation.lineNumber??0,columnNumber:i.sourceCodeLocation.columnNumber??0};if(Array.isArray(i.scopeChain)){for(let s of i.scopeChain)if(!s.object&&s.value)s.object=s.value}}return Promise.resolve(t)}),_.addMessageFilter("tools::Debugger.setBlackboxedRanges",(t)=>N(_,t,{})),_.addMessageFilter("tools::Debugger.setSkipAllPauses",(t)=>N(_,t,{})),_.addMessageFilter("tools::Debugger.setPauseOnExceptions",(t)=>{return Promise.resolve(t)})}function ps(_,e){_.addMessageFilter("target::Runtime.executionContextCreated",(t)=>{let S=t.params?.context;if(S){if(!S.origin)S.origin=S.name??"";let i=Number(S.id),s=!!(S.isPageContext||S.type==="normal");if(Number.isFinite(i)&&i>0){if(!e.pageExecCtx.id||s&&!e.pageExecCtx.isPage)e.pageExecCtx.id=i,e.pageExecCtx.isPage=s}if(S.frameId)S.auxData={frameId:S.frameId,isDefault:!0},delete S.frameId}return Promise.resolve(t)}),_.addMessageFilter("tools::Runtime.evaluate",(t)=>{let S=t.params;if(!S)return Promise.resolve(t);if("silent"in S)S.doNotPauseOnExceptionsAndMuteConsole=!!S.silent,delete S.silent;if("userGesture"in S)S.emulateUserGesture=!!S.userGesture,delete S.userGesture;return Promise.resolve(t)}),_.addMessageFilter("target::Runtime.evaluate",(t)=>{let S=t.result;if(S?.wasThrown){if(S.result)S.result.subtype="error";S.exceptionDetails={exceptionId:0,text:S.result?.description??"Uncaught",url:"",scriptId:e.lastScriptEval.value,lineNumber:0,columnNumber:0,stackTrace:{callFrames:[{functionName:"",scriptId:e.lastScriptEval.value,url:"",lineNumber:0,columnNumber:0}]},exception:S.result}}return Promise.resolve(t)}),_.addMessageFilter("target::Runtime.getProperties",(t)=>{let S=t.result;if(!S)return Promise.resolve(t);let i=Array.isArray(S.result)?S.result:Array.isArray(S.properties)?S.properties:null;if(i)S.result=i.filter((s)=>s.isOwn||s.nativeGetter).map((s)=>({...s,isOwn:!0})),delete S.properties;if(Array.isArray(S.internalProperties))S.internalProperties=S.internalProperties.map((s)=>({name:s.name,value:s.value}));return Promise.resolve(t)}),_.addMessageFilter("tools::Runtime.compileScript",(t)=>N(_,t,{scriptId:null,exceptionDetails:null})),_.addMessageFilter("tools::Runtime.globalLexicalScopeNames",(t)=>N(_,t,{names:[]})),_.addMessageFilter("tools::Runtime.terminateExecution",(t)=>N(_,t,{})),_.addMessageFilter("tools::Runtime.getIsolateId",(t)=>N(_,t,{id:"inspect-webkit"})),_.addMessageFilter("tools::Runtime.getHeapUsage",(t)=>N(_,t,{usedSize:0,totalSize:0})),_.addMessageFilter("tools::Runtime.discardConsoleEntries",(t)=>{return t.method="Console.clearMessages",Promise.resolve(t)}),_.addMessageFilter("tools::Runtime.runIfWaitingForDebugger",(t)=>N(_,t,{})),_.addMessageFilter("tools::Runtime.setAsyncCallStackDepth",(t)=>N(_,t,{})),_.addMessageFilter("tools::Runtime.releaseObject",(t)=>Promise.resolve(t)),_.addMessageFilter("tools::Runtime.releaseObjectGroup",(t)=>Promise.resolve(t)),_.addMessageFilter("tools::Runtime.callFunctionOn",(t)=>Promise.resolve(t)),_.addMessageFilter("tools::Runtime.queryObjects",(t)=>Promise.resolve(t)),_.addMessageFilter("target::Debugger.globalObjectCleared",(t)=>{return _.fireEventToTools("Runtime.executionContextsCleared",{}),Promise.resolve(null)})}function ls(_,e){_.addMessageFilter("tools::Log.startViolationsReport",(t)=>N(_,t,{})),_.addMessageFilter("tools::Log.stopViolationsReport",(t)=>N(_,t,{})),_.addMessageFilter("tools::Log.clear",(t)=>{return t.method="Console.clearMessages",Promise.resolve(t)}),_.addMessageFilter("tools::Log.disable",(t)=>{return t.method="Console.disable",Promise.resolve(t)}),_.addMessageFilter("tools::Log.enable",(t)=>{return t.method="Console.enable",Promise.resolve(t)}),_.addMessageFilter("tools::Runtime.enable",(t)=>{return _.callTarget("Console.enable",{}).catch(()=>{}),Promise.resolve(t)}),_.addMessageFilter("target::Console.messageAdded",(t)=>{let S=t.params?.message??{},s=(Array.isArray(S.stackTrace)?S.stackTrace:Array.isArray(S.stackTrace?.callFrames)?S.stackTrace.callFrames:[]).map(($)=>({functionName:$.functionName??"",scriptId:$.scriptId??"",url:$.url??"",lineNumber:Number($.lineNumber??0),columnNumber:Number($.columnNumber??0)})),C=s.length?{callFrames:s}:void 0,A=Date.now();if(S.source==="console-api"){let $=S.type==="log"?S.level??"log":S.type??"log",n=Os($),c=Array.isArray(S.parameters)&&S.parameters.length>0?S.parameters:[{type:"string",value:String(S.text??"")}],o={type:n,args:c,executionContextId:e.pageExecCtx.id||1,timestamp:A,stackTrace:C};return e.lastConsoleApiCalled.value=o,_.fireEventToTools("Runtime.consoleAPICalled",o),Promise.resolve(null)}if(S.source==="javascript"&&S.level==="error")return _.fireEventToTools("Runtime.exceptionThrown",{timestamp:A,exceptionDetails:{exceptionId:0,text:String(S.text??"Uncaught"),lineNumber:Number(S.line??0),columnNumber:Number(S.column??0),scriptId:e.lastScriptEval.value,url:S.url,stackTrace:C,exception:{type:"string",value:String(S.text??"")}}}),Promise.resolve(null);return _.fireEventToTools("Log.entryAdded",{entry:{source:S.source??"other",level:ds(S.level??S.type??"log"),text:String(S.text??""),timestamp:A,url:S.url,lineNumber:S.line,stackTrace:C,networkRequestId:S.networkRequestId}}),Promise.resolve(null)}),_.addMessageFilter("target::Console.messagesCleared",()=>{return _.fireEventToTools("Log.entriesCleared",{}),_.fireEventToTools("Runtime.consoleAPICalled",{type:"clear",args:[],executionContextId:e.pageExecCtx.id||1,timestamp:Date.now()}),e.lastConsoleApiCalled.value=null,Promise.resolve(null)}),_.addMessageFilter("target::Console.messageRepeatCountUpdated",()=>{let t=e.lastConsoleApiCalled.value;if(t)_.fireEventToTools("Runtime.consoleAPICalled",{...t,timestamp:Date.now()});return Promise.resolve(null)}),_.addMessageFilter("target::Console.heapSnapshot",()=>Promise.resolve(null))}function Os(_){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 ds(_){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 ws(_){let e=new Set;_.addMessageFilter("tools::DOM.enable",(t)=>N(_,t,{})),_.addMessageFilter("tools::DOM.setInspectMode",(t)=>{if(t.method="DOM.setInspectModeEnabled",t.params)t.params.enabled=t.params.mode==="searchForNode",delete t.params.mode,delete t.params.highlightConfig;return Promise.resolve(t)}),_.addMessageFilter("tools::DOM.setInspectedNode",(t)=>{return t.method="Console.addInspectedNode",Promise.resolve(t)}),_.addMessageFilter("tools::DOM.performSearch",(t)=>{if(t.params)t.params={query:t.params.query,caseSensitive:!!t.params.caseSensitive};return Promise.resolve(t)}),_.addMessageFilter("target::DOM.performSearch",(t)=>{let S=t.result?.searchId;if(typeof S==="string")e.add(S);return Promise.resolve(t)}),_.addMessageFilter("tools::DOM.discardSearchResults",(t)=>{let S=t.params?.searchId;if(typeof S==="string")e.delete(S);return Promise.resolve(t)}),_.addMessageFilter("tools::DOM.pushNodesByBackendIdsToFrontend",async(t)=>{let S=t.params?.backendNodeIds??[],i=await Promise.all(S.map((s)=>_.callTarget("DOM.pushNodeByBackendIdToFrontend",{backendNodeId:s}).then((C)=>C.nodeId).catch(()=>s)));return _.fireResultToTools(t.id,{nodeIds:i}),null}),_.addMessageFilter("tools::DOM.getBoxModel",(t)=>{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:t.params?.nodeId}).catch(()=>{}),Promise.resolve(null)}),_.addMessageFilter("tools::DOM.getNodeForLocation",async(t)=>{try{let i=(await _.callTarget("Runtime.evaluate",{expression:`document.elementFromPoint(${t.params?.x},${t.params?.y})`})).result?.objectId;if(!i)return _.fireResultToTools(t.id,{nodeId:0}),null;let s=await _.callTarget("DOM.requestNode",{objectId:i});_.fireResultToTools(t.id,{nodeId:s.nodeId,backendNodeId:s.nodeId})}catch(S){_.fireErrorToTools(t.id,{message:S?.message??String(S)})}return null}),_.addMessageFilter("tools::DOM.resolveNode",(t)=>{if(t.params&&t.params.objectGroup===void 0)delete t.params.objectGroup;return Promise.resolve(t)})}function gs(_){_.addMessageFilter("tools::DOMDebugger.getEventListeners",async(e)=>{try{let t=await _.callTarget("DOM.requestNode",{objectId:e.params?.objectId}),i=((await _.callTarget("DOM.getEventListenersForNode",{nodeId:t.nodeId,objectGroup:"event-listeners-panel"})).listeners??[]).map((s)=>({type:s.type,useCapture:!!s.useCapture,passive:!!s.passive,once:!!s.once,location:s.location,handler:s.handler}));_.fireResultToTools(e.id,{listeners:i})}catch(t){_.fireErrorToTools(e.id,{message:t?.message??String(t)})}return null}),_.addMessageFilter("tools::DOMDebugger.setXHRBreakpoint",(e)=>N(_,e,{})),_.addMessageFilter("tools::DOMDebugger.removeXHRBreakpoint",(e)=>N(_,e,{})),_.addMessageFilter("tools::DOMDebugger.setEventListenerBreakpoint",(e)=>N(_,e,{})),_.addMessageFilter("tools::DOMDebugger.removeEventListenerBreakpoint",(e)=>N(_,e,{}))}function Hs(_,e){_.addMessageFilter("tools::Page.setOverlayMessage",(s)=>{return s.method="Debugger.setOverlayMessage",Promise.resolve(s)}),_.addMessageFilter("tools::Page.configureOverlay",(s)=>{return s.method="Debugger.setOverlayMessage",Promise.resolve(s)}),_.addMessageFilter("tools::Page.getNavigationHistory",async(s)=>{try{let C=await _.callTarget("Runtime.evaluate",{expression:"window.location.href"}),A=await _.callTarget("Runtime.evaluate",{expression:"document.title"});_.fireResultToTools(s.id,{currentIndex:0,entries:[{id:0,url:C.result?.value??"",userTypedURL:C.result?.value??"",title:A.result?.value??"",transitionType:"link"}]})}catch(C){_.fireErrorToTools(s.id,{message:C?.message??String(C)})}return null}),_.addMessageFilter("target::Page.frameNavigated",(s)=>{return pt(s.params?.frame),Promise.resolve(s)}),_.addMessageFilter("target::Page.getResourceTree",(s)=>{return Te(s.result?.frameTree),Promise.resolve(s)}),_.addMessageFilter("tools::Page.getFrameTree",async(s)=>{if(typeof s.id!=="number")return null;try{let C=await _.callTarget("Page.getResourceTree",{}),A=lt(C?.frameTree);Te(A),_.fireResultToTools(s.id,{frameTree:A})}catch(C){_.fireErrorToTools(s.id,{message:C?.message??String(C)})}return null}),_.addMessageFilter("tools::Page.createIsolatedWorld",(s)=>{if(typeof s.id!=="number")return Promise.resolve(null);return N(_,s,{executionContextId:e.pageExecCtx.id||1})});let t=1;_.addMessageFilter("tools::Page.addScriptToEvaluateOnNewDocument",(s)=>N(_,s,{identifier:`pptr-${t++}`})),_.addMessageFilter("tools::WebMCP.enable",(s)=>N(_,s,{})),_.addMessageFilter("tools::WebMCP.disable",(s)=>N(_,s,{})),_.addMessageFilter("tools::Page.captureScreenshot",(s)=>{return _.fireErrorToTools(s.id,{message:"Page.captureScreenshot not supported by Safari"}),Promise.resolve(null)}),_.addMessageFilter("tools::Page.startScreencast",(s)=>N(_,s,{})),_.addMessageFilter("tools::Page.stopScreencast",(s)=>N(_,s,{})),_.addMessageFilter("tools::Page.screencastFrameAck",(s)=>N(_,s,{})),_.addMessageFilter("tools::Page.setLifecycleEventsEnabled",(s)=>N(_,s,{}));let S="",i="0.1";_.addMessageFilter("target::Page.frameNavigated",(s)=>{let C=s.params?.frame;if(C)i=C.id??i,S=C.loaderId??S,_.fireEventToTools("Page.frameStartedLoading",{frameId:i}),_.fireEventToTools("Page.lifecycleEvent",{frameId:i,loaderId:S,name:"init",timestamp:0}),_.fireEventToTools("Page.lifecycleEvent",{frameId:i,loaderId:S,name:"commit",timestamp:0});return Promise.resolve(s)}),_.addMessageFilter("target::Page.domContentEventFired",(s)=>{return _.fireEventToTools("Page.lifecycleEvent",{frameId:i,loaderId:S,name:"DOMContentLoaded",timestamp:s.params?.timestamp??0}),Promise.resolve(s)}),_.addMessageFilter("target::Page.loadEventFired",(s)=>{return _.fireEventToTools("Page.lifecycleEvent",{frameId:i,loaderId:S,name:"load",timestamp:s.params?.timestamp??0}),_.fireEventToTools("Page.lifecycleEvent",{frameId:i,loaderId:S,name:"networkAlmostIdle",timestamp:s.params?.timestamp??0}),_.fireEventToTools("Page.lifecycleEvent",{frameId:i,loaderId:S,name:"networkIdle",timestamp:s.params?.timestamp??0}),_.fireEventToTools("Page.frameStoppedLoading",{frameId:i}),Promise.resolve(s)})}function pt(_){if(!_)return;if(!_.securityOrigin)try{_.securityOrigin=new URL(_.url??"").origin}catch{_.securityOrigin="://"}if(!_.mimeType)_.mimeType="text/html"}function Te(_){if(!_)return;if(pt(_.frame),Array.isArray(_.childFrames))_.childFrames.forEach(Te)}function lt(_){if(!_)return _;let e={frame:_.frame};if(Array.isArray(_.childFrames))e.childFrames=_.childFrames.map(lt);return e}function hs(_){_.addMessageFilter("tools::Overlay.enable",(e)=>N(_,e,{})),_.addMessageFilter("tools::Overlay.disable",(e)=>N(_,e,{})),_.addMessageFilter("tools::Overlay.highlightNode",(e)=>{let t=e.params??{};return e.method="DOM.highlightNode",e.params={highlightConfig:t.highlightConfig,nodeId:t.nodeId,objectId:t.objectId},Promise.resolve(e)}),_.addMessageFilter("tools::Overlay.highlightFrame",(e)=>{return e.method="DOM.highlightFrame",Promise.resolve(e)}),_.addMessageFilter("tools::Overlay.highlightQuad",(e)=>{return e.method="DOM.highlightQuad",Promise.resolve(e)}),_.addMessageFilter("tools::Overlay.highlightRect",(e)=>{return e.method="DOM.highlightRect",Promise.resolve(e)}),_.addMessageFilter("tools::Overlay.hideHighlight",(e)=>{return e.method="DOM.hideHighlight",Promise.resolve(e)}),_.addMessageFilter("tools::Overlay.setShowPaintRects",(e)=>{return e.method="Page.setShowPaintRects",Promise.resolve(e)}),_.addMessageFilter("tools::Overlay.setInspectMode",(e)=>{let t=e.params??{};return e.method="DOM.setInspectModeEnabled",e.params={enabled:typeof t.mode==="string"&&t.mode!=="none",highlightConfig:t.highlightConfig},Promise.resolve(e)})}function Ns(_){_.addMessageFilter("tools::Emulation.canEmulate",(e)=>N(_,e,{result:!0})),_.addMessageFilter("tools::Emulation.setTouchEmulationEnabled",(e)=>{return e.method="Page.setTouchEmulationEnabled",Promise.resolve(e)}),_.addMessageFilter("tools::Emulation.setScriptExecutionDisabled",(e)=>{return e.method="Page.setScriptExecutionDisabled",Promise.resolve(e)}),_.addMessageFilter("tools::Emulation.setEmulatedMedia",(e)=>{return e.method="Page.setEmulatedMedia",Promise.resolve(e)}),_.addMessageFilter("tools::Rendering.setShowPaintRects",(e)=>{return e.method="Page.setShowPaintRects",Promise.resolve(e)}),_.addMessageFilter("tools::Emulation.setDeviceMetricsOverride",(e)=>N(_,e,{})),_.addMessageFilter("tools::Emulation.clearDeviceMetricsOverride",(e)=>N(_,e,{})),_.addMessageFilter("tools::Emulation.setUserAgentOverride",(e)=>{let t=e.params?.userAgent??"";return e.method="Page.overrideUserAgent",e.params={value:t},Promise.resolve(e)}),_.addMessageFilter("tools::Emulation.setFocusEmulationEnabled",(e)=>N(_,e,{})),_.addMessageFilter("tools::Emulation.setDefaultBackgroundColorOverride",(e)=>N(_,e,{}))}function ae(_){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 Is(_){if(!_)return _;return{...Ms,..._,hasPostData:_.postData!=null}}function Gs(_){if(!_)return _;let e=0,t=_.headers??{},S=t["Content-Length"]??t["content-length"];if(S!=null)e=Number(S)||0;return{...Us,..._,fromDiskCache:_.source==="disk-cache",fromServiceWorker:_.source==="service-worker",encodedDataLength:e}}function qs(_,e){if(!_)return;for(let[t,S]of Object.entries(e))if(t in _&&!(S in _))_[S]=_[t],delete _[t]}function Xs(_){let e=typeof _.size==="number"?_.size:(_.name?.length??0)+(_.value?.length??0);return{name:_.name,value:_.value,domain:_.domain,path:_.path,expires:_.expires??-1,size:e,httpOnly:!!_.httpOnly,secure:!!_.secure,session:!!_.session,..._.sameSite?{sameSite:_.sameSite}:{}}}function ks(_,e){let t=new Map,S=1024;for(let[s,C]of Object.entries(Vs))_.addMessageFilter(`tools::${s}`,(A)=>{return A.method=C,Promise.resolve(A)});_.addMessageFilter("tools::Network.setCacheDisabled",(s)=>{if(s.params&&"cacheDisabled"in s.params)s.params={disabled:!!s.params.cacheDisabled};return Promise.resolve(s)});let i=async(s)=>{try{let C=await _.callTarget("Page.getCookies",{}),A=Array.isArray(C?.cookies)?C.cookies.map(Xs):[];_.fireResultToTools(s.id,{cookies:A})}catch(C){_.fireErrorToTools(s.id,{message:C?.message??String(C)})}return null};_.addMessageFilter("tools::Network.getCookies",i),_.addMessageFilter("tools::Network.getAllCookies",i),_.addMessageFilter("tools::Network.setCookie",(s)=>{let C=s.params??{};return s.method="Page.setCookie",s.params={cookie:{name:C.name,value:C.value,domain:C.domain??"",path:C.path??"/",expires:C.expires??-1,session:!1,httpOnly:!!C.httpOnly,secure:!!C.secure,sameSite:C.sameSite??"None"}},Promise.resolve(s)}),_.addMessageFilter("tools::Network.setCookies",async(s)=>{let C=Array.isArray(s.params?.cookies)?s.params.cookies:[];try{await Promise.all(C.map((A)=>_.callTarget("Page.setCookie",{cookie:A}))),_.fireResultToTools(s.id,{})}catch(A){_.fireErrorToTools(s.id,{message:A?.message??String(A)})}return null}),_.addMessageFilter("tools::Network.deleteCookies",(s)=>{let C=s.params??{},A=C.url??`https://${(C.domain??"").replace(/^\./,"")}${C.path??"/"}`;return s.method="Page.deleteCookie",s.params={cookieName:C.name,url:A},Promise.resolve(s)}),_.addMessageFilter("tools::Network.deleteCookie",(s)=>{return s.method="Page.deleteCookie",Promise.resolve(s)}),_.addMessageFilter("tools::Network.clearBrowserCookies",async(s)=>{try{let C=await _.callTarget("Page.getCookies",{}),A=Array.isArray(C?.cookies)?C.cookies:[];await Promise.all(A.map(($)=>_.callTarget("Page.deleteCookie",{cookieName:$.name,url:`${$.secure?"https":"http"}://${($.domain??"").replace(/^\./,"")}${$.path??"/"}`}).catch(()=>{}))),_.fireResultToTools(s.id,{})}catch(C){_.fireErrorToTools(s.id,{message:C?.message??String(C)})}return null}),_.addMessageFilter("tools::Network.canEmulateNetworkConditions",(s)=>N(_,s,{result:!1})),_.addMessageFilter("tools::Network.setExtraHTTPHeaders",(s)=>N(_,s,{})),_.addMessageFilter("tools::Network.setBlockedURLs",(s)=>N(_,s,{})),_.addMessageFilter("tools::Network.emulateNetworkConditions",(s)=>N(_,s,{})),_.addMessageFilter("tools::Network.setMonitoringXHREnabled",(s)=>N(_,s,{})),_.addMessageFilter("tools::Network.getResponseBody",async(s)=>{let C=s.params?.requestId,A=typeof C==="string"?t.get(C):void 0;if(!A)return _.fireErrorToTools(s.id,{message:"Network.getResponseBody: requestId not tracked (only requests observed via requestWillBeSent are recoverable)"}),null;try{let $=await _.callTarget("Network.loadResource",{frameId:A.frameId,url:A.url}),n=String($?.content??""),c=String($?.mimeType??""),o=/^(text\/|application\/(json|xml|javascript|ecmascript|x-www-form-urlencoded))/.test(c),B=o?n:Buffer.from(n,"binary").toString("base64");_.fireResultToTools(s.id,{body:B,base64Encoded:!o})}catch($){_.fireErrorToTools(s.id,{message:`Network.getResponseBody fallback (loadResource) failed: ${$?.message??String($)}`})}return null});for(let[s,C]of Object.entries(ms))_.addMessageFilter(`target::${s}`,(A)=>{return qs(A.params,C),Promise.resolve(A)});_.addMessageFilter("target::Network.requestWillBeSent",(s)=>{let C=s.params;if(C){if(Object.assign(C,{...Ls,...C}),C.request=Is(C.request),C.type=ae(C.type),typeof C.requestId==="string"&&typeof C.request?.url==="string"){if(t.size>=1024){let A=t.keys().next().value;if(A!==void 0)t.delete(A)}t.set(C.requestId,{url:C.request.url,frameId:C.frameId})}}return Promise.resolve(s)}),_.addMessageFilter("target::Network.responseReceived",(s)=>{let C=s.params;if(C)Object.assign(C,{...Ws,...C}),C.response=Gs(C.response),C.type=ae(C.type);return Promise.resolve(s)}),_.addMessageFilter("target::Network.loadingFinished",(s)=>{let C=s.params;if(C){let A=C.metrics?.responseBodyBytesReceived;if(typeof A==="number"&&C.encodedDataLength==null)C.encodedDataLength=A;Object.assign(C,{...Ps,...C})}return Promise.resolve(s)}),_.addMessageFilter("target::Network.loadingFailed",(s)=>{let C=s.params;if(C){if(C.type=ae(C.type),!("canceled"in C))C.canceled=!1}return Promise.resolve(s)}),_.addMessageFilter("target::Network.requestServedFromMemoryCache",(s)=>{if(s.method="Network.requestServedFromCache",s.params)s.params={requestId:s.params.requestId};return Promise.resolve(s)}),_.addMessageFilter("tools::Network.loadNetworkResource",async(s)=>{let C=s.params??{};if(!e)return _.fireResultToTools(s.id,{resource:{success:!1,netError:1,netErrorName:"ERR_NOT_IMPLEMENTED"}}),null;try{let A=await _.callTarget("Network.loadResource",{frameId:C.frameId,url:C.url}),$=!!A?.content&&(A?.status??0)>=200&&(A?.status??0)<300,n;if($)n=`network-resource:${C.frameId??""}:${C.url}`,e.set(n,String(A.content));_.fireResultToTools(s.id,{resource:{success:$,stream:n,httpStatusCode:A?.status,headers:A?.headers,mimeType:A?.mimeType}})}catch(A){_.fireResultToTools(s.id,{resource:{success:!1,netError:2,netErrorName:A?.message??"ERR_FAILED"}})}return null})}function Ks(_){for(let e of["Target.setAutoAttach","Target.setDiscoverTargets","Target.setRemoteLocations"])_.addMessageFilter(`tools::${e}`,(t)=>N(_,t,{}))}function xs(_){_.addMessageFilter("target::Inspector.inspect",(e)=>{if(e.method="DOM.inspectNodeRequested",e.params)e.params.backendNodeId=e.params.object?.objectId,delete e.params.object,delete e.params.hints;return Promise.resolve(e)})}function js(_){if(!_)return _;let e=_.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:e,isConstructed:e,length:_.length??0,endLine:_.endLine??0,endColumn:_.endColumn??0,hasSourceURL:!!_.sourceURL}}function fe(_){if(!_)return _;let e={origin:_.origin==="author"?"regular":_.origin,style:o_(_.style),selectorList:Qs(_.selectorList)};if(_.ruleId?.styleSheetId)e.styleSheetId=_.ruleId.styleSheetId;if(Array.isArray(_.groupings))e.media=_.groupings.map((t)=>({text:t.text,sourceURL:t.sourceURL,source:Zs[t.type]}));return e}function ei(_){let e={lastNodeId:0},t=new Map;async function S(i,s){let C=t.get(i);if(!C)try{if(C=(await _.callTarget("CSS.getStyleSheet",{styleSheetId:i}))?.styleSheet,C)t.set(i,C)}catch{}let A=C?.rules??[];for(let $=0;$<A.length;$++)if(zs(A[$]?.style?.range,s))return{styleSheetId:i,ordinal:$};return{styleSheetId:i,ordinal:0}}_.addMessageFilter("tools::CSS.enable",(i)=>{return _.fireResultToTools(i.id,{}),Promise.resolve(null)}),_.addMessageFilter("target::CSS.styleSheetAdded",(i)=>{if(i.params?.header)i.params.header=js(i.params.header);return Promise.resolve(i)}),_.addMessageFilter("target::CSS.getInlineStylesForNode",(i)=>{let s=i.result;if(s)i.result={inlineStyle:o_(s.inlineStyle),attributesStyle:o_(s.attributesStyle)};return Promise.resolve(i)}),_.addMessageFilter("tools::CSS.getMatchedStylesForNode",async(i)=>{if(typeof i.params?.nodeId==="number")e.lastNodeId=i.params.nodeId;try{let[s,C]=await Promise.all([_.callTarget("CSS.getInlineStylesForNode",{nodeId:i.params.nodeId}),_.callTarget("CSS.getMatchedStylesForNode",{nodeId:i.params.nodeId,includePseudo:!0,includeInherited:!0})]);_.fireResultToTools(i.id,{inlineStyle:o_(s?.inlineStyle),attributesStyle:o_(s?.attributesStyle),matchedCSSRules:Oe(C?.matchedCSSRules),pseudoElements:Ys(C?.pseudoElements),inherited:_i(C?.inherited),cssKeyframesRules:[]})}catch(s){_.fireErrorToTools(i.id,{message:s?.message??String(s)})}return null}),_.addMessageFilter("tools::CSS.setStyleTexts",async(i)=>{let s=i.params?.edits??[],C=[];for(let A of s)try{let $=await S(A.styleSheetId,A.range),n=await _.callTarget("CSS.setStyleText",{styleId:$,text:A.text});C.push(o_(n?.style)),t.delete(A.styleSheetId),_.fireEventToTools("CSS.styleSheetChanged",{styleSheetId:A.styleSheetId})}catch{C.push(null)}return _.fireResultToTools(i.id,{styles:C}),null}),_.addMessageFilter("tools::CSS.setRuleSelector",async(i)=>{let{styleSheetId:s,range:C,selector:A}=i.params??{};try{let $=await S(s,C);i.params={ruleId:$,selector:A}}catch($){return _.fireErrorToTools(i.id,{message:$?.message??String($)}),null}return i}),_.addMessageFilter("target::CSS.setRuleSelector",(i)=>{if(i.result?.rule)i.result={rule:fe(i.result.rule)};return Promise.resolve(i)}),_.addMessageFilter("tools::CSS.addRule",async(i)=>{let s=i.params??{},C=String(s.ruleText??"").trim().replace(/\{\s*\}\s*$/,"").trim();try{let A=await _.callTarget("CSS.addRule",{contextNodeId:e.lastNodeId,styleSheetId:s.styleSheetId,selector:C});_.fireResultToTools(i.id,{rule:fe(A?.rule)})}catch(A){_.fireErrorToTools(i.id,{message:A?.message??String(A)})}return null})}function Si(_){_.addMessageFilter("tools::Browser.getVersion",(e)=>N(_,e,ti)),_.addMessageFilter("tools::Browser.getWindowForTarget",(e)=>N(_,e,{windowId:1,bounds:{}})),_.addMessageFilter("tools::Browser.setWindowBounds",(e)=>N(_,e,{}))}function ii(_){switch(_){case"mousePressed":return"mousedown";case"mouseReleased":return"click";case"mouseMoved":return"mousemove";default:return null}}function Ci(_){let e=async(t)=>{let S=t.params??{},i=ii(S.type);if(!i)return _.fireResultToTools(t.id,{}),null;let s=i==="click"?["mousedown","click","mouseup"]:[i];try{for(let C of s){let A={x:Number(S.x)||0,y:Number(S.y)||0,modifiers:Number(S.modifiers)||0,button:S.button??"none",type:C},$=`(${si}, __sd_simulate(${JSON.stringify(A)}))`;await _.callTarget("Runtime.evaluate",{expression:$})}_.fireResultToTools(t.id,{})}catch(C){_.fireErrorToTools(t.id,{message:C?.message??String(C)})}return null};_.addMessageFilter("tools::Input.dispatchMouseEvent",e),_.addMessageFilter("tools::Input.emulateTouchFromMouseEvent",e),_.addMessageFilter("tools::Input.setIgnoreInputEvents",(t)=>{return _.fireResultToTools(t.id,{}),Promise.resolve(null)})}function $i(_){let e=new Map;return _.addMessageFilter("tools::IO.read",(t)=>{let S=String(t.params?.handle??""),i=Number(t.params?.size)||ri,s=Number(t.params?.offset)||0,C=e.get(S);if(C===void 0)return _.fireResultToTools(t.id,{data:"",eof:!0,base64Encoded:!1}),Promise.resolve(null);let A=C.slice(s,s+i),$=s+i>=C.length;return _.fireResultToTools(t.id,{data:A,eof:$,base64Encoded:!1}),Promise.resolve(null)}),_.addMessageFilter("tools::IO.close",(t)=>{return e.delete(String(t.params?.handle??"")),_.fireResultToTools(t.id,{}),Promise.resolve(null)}),e}function Ai(_){_.addMessageFilter("tools::Accessibility.enable",(e)=>N(_,e,{})),_.addMessageFilter("tools::Accessibility.disable",(e)=>N(_,e,{})),_.addMessageFilter("tools::Accessibility.getPartialAXTree",async(e)=>{let t=e.params??{},S=t.nodeId??t.backendNodeId;if(typeof S!=="number")return _.fireResultToTools(e.id,{nodes:[]}),null;try{let s=(await _.callTarget("DOM.getAccessibilityPropertiesForNode",{nodeId:S}))?.properties??{},C={nodeId:String(S),ignored:Boolean(s.ignored),role:s.role?{type:"role",value:String(s.role)}:void 0,name:s.label?{type:"computedString",value:String(s.label)}:void 0,backendDOMNodeId:S,childIds:[],properties:[]};_.fireResultToTools(e.id,{nodes:[C]})}catch(i){_.fireResultToTools(e.id,{nodes:[]})}return null})}function yi(_){for(let[t,S]of Object.entries(ni))_.addMessageFilter(`tools::${t}`,(i)=>N(_,i,S));for(let t of oi)for(let S of["enable","disable"])_.addMessageFilter(`tools::${t}.${S}`,(i)=>N(_,i,{}));let e=[["Autofill.setAddresses",{}],["Storage.getStorageKey",{storageKey:""}],["Storage.trackCacheStorageForOrigin",{}],["Storage.trackIndexedDBForOrigin",{}],["Storage.untrackCacheStorageForOrigin",{}],["Storage.untrackIndexedDBForOrigin",{}],["Storage.getCookies",{cookies:[]}],["ServiceWorker.unregister",{}]];for(let[t,S]of e)_.addMessageFilter(`tools::${t}`,(i)=>N(_,i,S))}function Ot(_){let e=vs();yi(_);let t=$i(_);us(_,e),ps(_,e),ls(_,e),ws(_),gs(_),Hs(_,e),hs(_),Ns(_),ks(_,t),Ks(_),xs(_),ei(_),Si(_),Ci(_),Ai(_)}function wt(_){let e=`${_.reqHost}/devtools/page/${_.id}`;return{description:_.description,devtoolsFrontendUrl:`devtools://devtools/bundled/inspector.html?ws=${e}`,devtoolsFrontendUrlCompat:`devtools://devtools/bundled/inspector.html?ws=${e}`,id:_.id,title:_.title,type:_.type,url:_.url,webSocketDebuggerUrl:`ws://${e}`,faviconUrl:""}}function v_(_){return _.replace(/[&<>"']/g,(e)=>ai[e])}function gt(_){return dt.createServer((e,t)=>{let S=new URL(e.url??"/","http://placeholder"),i=e.headers.host??"";if(S.pathname==="/json/version"){let s=typeof _.version==="function"?_.version(i):_.version;return ce(t,s)}if(S.pathname==="/json"||S.pathname==="/json/list")return ce(t,_.listTargets(i));if(S.pathname==="/json/protocol")return ce(t,{});if(S.pathname==="/")return ci(t,_,i);t.writeHead(404,{"content-type":"text/plain"}),t.end("not found")})}function ce(_,e,t=200){_.writeHead(t,{"content-type":"application/json; charset=utf-8"}),_.end(JSON.stringify(e))}function ci(_,e,t){let S=e.listTargets(t),i=S.map(($)=>`<li><strong>${v_($.title||$.url||$.id)}</strong><br><small>${v_($.url)}</small><br><small>copy &amp; paste into Chrome's address bar:</small><br><code style="user-select:all">${v_($.devtoolsFrontendUrl)}</code></li>`).join(""),s=`inspect-webkit${e.brand?` (${e.brand})`:""}`,C=e.indexNote??'<p>Open <code style="display:inline;padding:1px 4px">chrome://inspect</code> → <em>Configure…</em> → add '+`<code style="display:inline;padding:1px 4px">${v_(t)}</code>.</p>`,A=`<!doctype html><meta charset=utf-8><title>${v_(s)}</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>${v_(s)} — ${S.length} target${S.length===1?"":"s"}</h1>`+C+`<ul>${i}</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(A)}function Ht(_,e,t){return new Promise((S,i)=>{_.once("error",i);let s=e==="localhost"||e==="::1"||e==="127.0.0.1"?"::":e;_.listen({port:t,host:s,ipv6Only:!1},()=>{_.off("error",i),S()})})}function ht(_){let e=!process.env.NO_COLOR&&process.stderr.isTTY===!0,t=($,n)=>e?`\x1B[${$}m${n}\x1B[0m`:n,S=($)=>t("1",$),i=($)=>t("2",$),s=($)=>t("36",$),C=($)=>t("32",$),A=`http://${_.host}:${_.port}`;console.error(`${C("●")} ${S(`${_.brand} CDP`)} ${s(A)}`),console.error(` ${i("chrome")} chrome://inspect → ${_.host}:${_.port}`),console.error(` ${i("vscode")} "type": "chrome", "port": ${_.port}`)}function Ri(_,e){let t=!!process.env.INSPECT_WEBKIT_DEBUG,S=new Map,i=!1,s=!1,C=!1,A=new Map,$=null;function n(T){if(_.readyState!==1)return;let D=JSON.stringify(T);if(t)console.error(`[browser] tools<< ${D.slice(0,240)}`);_.send(D)}function c(T,D){let E={method:T,params:D};if($)E.sessionId=$;n(E)}function o(T,D){return{targetId:T.targetId,type:T.type==="page"?"page":T.type||"other",title:T.title||"",url:T.url||"",attached:D,canAccessOpener:!1,browserContextId:"default"}}function B(T){for(let D of S.values())if(D.targetId===T)return!0;return!1}function p(T,D){let E=e.listEntries().find((f)=>f.targetId===T);if(!E)return null;let y=crypto.randomUUID(),r=(f)=>{let d;try{d=JSON.parse(f)}catch{return}d.sessionId=y,n(d)},a=e.createPageSession(T,r);if(!a)return null;return S.set(y,{handle:a,targetId:T}),c("Target.attachedToTarget",{sessionId:y,targetInfo:o(E,!0),waitingForDebugger:D}),{sessionId:y,entry:E}}function u(T){let D=S.get(T);if(!D)return!1;try{D.handle.close()}catch{}return S.delete(T),c("Target.detachedFromTarget",{sessionId:T,targetId:D.targetId}),!0}function l(){let T=e.listEntries(),D=new Set;for(let E of T){D.add(E.targetId);let y=A.get(E.targetId);if(!y){if(A.set(E.targetId,E),i)c("Target.targetCreated",{targetInfo:o(E,B(E.targetId))});if(s&&!B(E.targetId))p(E.targetId,C)}else if(y.title!==E.title||y.url!==E.url){if(A.set(E.targetId,E),i)c("Target.targetInfoChanged",{targetInfo:o(E,B(E.targetId))})}}for(let E of[...A.keys()]){if(D.has(E))continue;A.delete(E);for(let[y,r]of S)if(r.targetId===E)u(y);if(i)c("Target.targetDestroyed",{targetId:E})}}let F=setInterval(l,e.refreshMs??1000);function b(T,D){if(T)D.sessionId=T;n(D)}function v(T,D){let{id:E,method:y}=T,r=T.params??{};switch(y){case"Browser.getVersion":return b(D,{id:E,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(!$)$=crypto.randomUUID();return b(D,{id:E,result:{sessionId:$}})}case"Target.setDiscoverTargets":{if(i=!!r.discover,i)for(let a of e.listEntries())A.set(a.targetId,a),c("Target.targetCreated",{targetInfo:o(a,B(a.targetId))});if(typeof E==="number")b(D,{id:E,result:{}});return}case"Target.getTargets":{let a=e.listEntries().map((f)=>o(f,B(f.targetId)));return b(D,{id:E,result:{targetInfos:a}})}case"Target.setAutoAttach":{if(s=!!r.autoAttach,C=!!r.waitForDebuggerOnStart,s){for(let a of e.listEntries())if(!B(a.targetId))p(a.targetId,C)}if(typeof E==="number")b(D,{id:E,result:{}});return}case"Target.attachToTarget":{for(let[f,d]of S)if(d.targetId===r.targetId){if(typeof E==="number")b(D,{id:E,result:{sessionId:f}});return}let a=p(r.targetId,!1);if(!a){if(typeof E==="number")b(D,{id:E,error:{code:-32000,message:"No target with given id found"}});return}if(typeof E==="number")b(D,{id:E,result:{sessionId:a.sessionId}});return}case"Target.detachFromTarget":{if(u(r.sessionId),typeof E==="number")b(D,{id:E,result:{}});return}case"Target.sendMessageToTarget":{let a=S.get(r.sessionId);if(a)a.handle.onMessageFromTools(r.message);if(typeof E==="number")b(D,{id:E,result:{}});return}case"Target.setRemoteLocations":case"Target.exposeDevToolsProtocol":case"Target.activateTarget":case"Target.closeTarget":if(typeof E==="number")b(D,{id:E,result:{}});return;case"Target.getBrowserContexts":{if(typeof E==="number")b(D,{id:E,result:{browserContextIds:["default"]}});return}}if(typeof E==="number")b(D,{id:E,error:{code:-32601,message:`Browser-level method '${y??"?"}' not implemented`}})}_.on("message",(T,D)=>{let E=D?new TextDecoder().decode(T):T.toString();if(t)console.error(`[browser] tools>> ${E.slice(0,240)}`);let y;try{y=JSON.parse(E)}catch{return}if(typeof y.sessionId==="string"){if(y.sessionId===$){let f={...y};return delete f.sessionId,v(f,y.sessionId)}let r=S.get(y.sessionId);if(!r){if(typeof y.id==="number")n({id:y.id,sessionId:y.sessionId,error:{code:-32000,message:`Session ${y.sessionId} not found`}});return}let a={...y};delete a.sessionId,r.handle.onMessageFromTools(JSON.stringify(a));return}v(y,void 0)}),_.on("close",()=>{clearInterval(F);for(let[,T]of S)try{T.handle.close()}catch{}S.clear()})}async function Di(_={}){let e=_.port??9222,t=_.host??"localhost",S=await Ti();if(S.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 i=new Map,s=new WeakMap,C=new Map;for(let F of S)C.set(F,[]),s.set(F,new Set),F.wi.subscribe((b)=>{let{__selector:v,__argument:T}=b;if(!v||!T)return;if(v==="_rpc_reportConnectedApplicationList:"){let D=T.WIRApplicationDictionaryKey??{},E=Object.entries(D).map(([r,a])=>({appId:r,bundleId:a.WIRApplicationBundleIdentifierKey,name:a.WIRApplicationNameKey??a.WIRApplicationBundleIdentifierKey??r,isProxy:Boolean(a.WIRIsApplicationProxyKey)}));C.set(F,E);let y=s.get(F);for(let r of E){if(r.isProxy||y.has(r.appId))continue;y.add(r.appId),F.wi.send("_rpc_forwardGetListing:",{WIRApplicationIdentifierKey:r.appId})}}else if(v==="_rpc_applicationConnected:"){let D=T,E=C.get(F)??[];if(!E.find((y)=>y.appId===D.WIRApplicationIdentifierKey))E.push({appId:D.WIRApplicationIdentifierKey,bundleId:D.WIRApplicationBundleIdentifierKey,name:D.WIRApplicationNameKey??D.WIRApplicationBundleIdentifierKey,isProxy:Boolean(D.WIRIsApplicationProxyKey)}),C.set(F,E);if(!D.WIRIsApplicationProxyKey){let y=s.get(F);if(!y.has(D.WIRApplicationIdentifierKey))y.add(D.WIRApplicationIdentifierKey),F.wi.send("_rpc_forwardGetListing:",{WIRApplicationIdentifierKey:D.WIRApplicationIdentifierKey})}}else if(v==="_rpc_applicationDisconnected:"){let D=C.get(F)??[];C.set(F,D.filter((E)=>E.appId!==T.WIRApplicationIdentifierKey)),i.delete(`${F.id}:${T.WIRApplicationIdentifierKey}`)}else if(v==="_rpc_applicationSentListing:"){let D=T.WIRApplicationIdentifierKey,E=T.WIRListingKey??{},y=new Map;for(let[r,a]of Object.entries(E))y.set(r,{pageId:Number(a.WIRPageIdentifierKey??0),title:a.WIRTitleKey??"",url:a.WIRURLKey??"",type:a.WIRTypeKey??""});i.set(`${F.id}:${D}`,y)}}),F.wi.send("_rpc_reportIdentifier:",{}),F.wi.send("_rpc_getConnectedApplications:",{});let A=setInterval(()=>{for(let F of S){let b=C.get(F)??[];for(let v of b){if(v.isProxy)continue;F.wi.send("_rpc_forwardGetListing:",{WIRApplicationIdentifierKey:v.appId})}}},Bi),$=new Map;function n(){let F=[];for(let b of S){let v=C.get(b)??[];for(let T of v){if(T.isProxy)continue;let D=i.get(`${b.id}:${T.appId}`);if(!D)continue;for(let E of D.values())F.push({targetId:`${b.id}:${T.appId}:${E.pageId}`,source:b,appId:T.appId,appName:T.name,bundleId:T.bundleId,pageId:E.pageId,title:E.title,url:E.url,type:E.type})}}return F}let c=crypto.randomUUID(),o=gt({brand:"",version:(F)=>({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://${F}/devtools/browser/${c}`}),listTargets:(F)=>n().map((b)=>wt({reqHost:F,id:b.targetId,description:`${b.source.label}${b.bundleId?` (${b.bundleId})`:""}`,title:b.title||b.appName,url:/^https?:/i.test(b.url)?b.url:"about:blank",type:yt(b.type)}))}),B=new ut.default({noServer:!0}),p=`/devtools/browser/${c}`;o.on("upgrade",(F,b,v)=>{let T=new URL(F.url??"/","http://placeholder");if(console.error(`# ws upgrade: ${T.pathname}`),T.pathname===p){B.handleUpgrade(F,b,v,(E)=>{Ri(E,{listEntries:()=>n().map((y)=>({targetId:y.targetId,type:yt(y.type),title:y.title||y.appName,url:y.url})),createPageSession:(y,r)=>{let a=n().find((f)=>f.targetId===y);if(!a)return null;return u(a,r)}})});return}if(!T.pathname.startsWith("/devtools/page/")){console.error(`# ws upgrade rejected: unknown path ${T.pathname}`),b.destroy();return}let D=decodeURIComponent(T.pathname.slice(15));B.handleUpgrade(F,b,v,(E)=>{l(E,D)})});function u(F,b){let v=crypto.randomUUID(),D=new le({readyState:1,send:(r)=>b(r)},F.source.wi,F.appId,F.pageId,v);Ot(D),$.set(v,D);let E=!!process.env.INSPECT_WEBKIT_DEBUG,y=F.source.wi.subscribe((r)=>{if(r.__selector!=="_rpc_applicationSentData:")return;let a=r.__argument;if(!a)return;if(a.WIRDestinationKey&&a.WIRDestinationKey!==v)return;if(a.WIRApplicationIdentifierKey!==F.appId)return;if(a.WIRPageIdentifierKey!==void 0&&Number(a.WIRPageIdentifierKey)!==F.pageId)return;let f=a.WIRMessageDataKey??a.WIRSocketDataKey;if(!f)return;let d=typeof f==="string"?f:new TextDecoder().decode(f);if(E)console.error(`[cdp] target>> ${d.slice(0,240)}`);D.onMessageFromTarget(d)});return F.source.wi.forwardSocketSetup(F.appId,F.pageId,v),console.error(`# devtools attached: ${F.source.label} :: ${F.appName} :: ${F.title||F.url}`),{onMessageFromTools(r){if(E)console.error(`[cdp] tools>> ${r.slice(0,300)}`);D.onMessageFromTools(r)},close(){y();try{D.wi.forwardDidClose(D.appId,D.pageId,D.senderKey)}catch{}$.delete(D.senderKey)}}}function l(F,b){let v=n().find((D)=>D.targetId===b);if(!v){console.error(`# ws closed: unknown target ${b} (known: ${n().map((D)=>D.targetId).join(", ")||"none"})`),F.close(1011,`unknown target ${b}`);return}let T=u(v,(D)=>{if(F.readyState===1)F.send(D)});F.on("message",(D,E)=>{let y=E?new TextDecoder().decode(D):D.toString();T.onMessageFromTools(y)}),F.on("close",()=>T.close())}return await Ht(o,t,e),ht({brand:"safari",host:t,port:e}),{stop(){clearInterval(A),B.close(),o.close();for(let F of S)try{F.wi.close(),F.lockdown?.close()}catch{}},getTargets(){return n()}}}async function Ti(){let[_,e]=await Promise.all([fi(),Fi()]);return[..._,...e]}async function fi(){let _=[];try{_=await Tt()}catch(t){return console.error(`warn: usbmux: ${t.message}`),[]}return(await Promise.all(_.map(Ei))).filter((t)=>t!==null)}async function Ei(_){try{let e=await ft(_.Properties.SerialNumber),t=await K_.open(_,e);await t.startSession();let S=await t.startService("com.apple.webinspector"),{socket:i,stream:s}=await t.connectService(S),C=new H_(i,s);return await C.reportIdentifier(),{kind:"device",id:`device:${_.Properties.SerialNumber}`,label:`device:${_.Properties.SerialNumber.slice(0,8)}`,wi:C,lockdown:t}}catch(e){return console.error(`warn: device ${_.Properties.SerialNumber}: ${e.message}`),null}}async function Fi(){let _=[];try{_=await Ft()}catch(t){return console.error(`warn: simulator discovery: ${t.message}`),[]}return(await Promise.all(_.map(bi))).filter((t)=>t!==null)}async function bi(_){try{let{socket:e,stream:t}=await bt(_.socketPath),S=new H_(e,t);return await S.reportIdentifier(),{kind:"simulator",id:`sim:${_.pid}`,label:`sim:${_.pid}`,wi:S}}catch(e){return console.error(`warn: simulator ${_.socketPath}: ${e.message}`),null}}function yt(_){switch(_){case"WIRTypeServiceWorker":return"service_worker";case"WIRTypeWorker":case"WIRTypeJavaScript":return"worker";default:return"page"}}class Nt{url;ws;handlers=new Set;openPromise;constructor(_){this.url=_,this.ws=new nt(_),this.ws.binaryType="nodebuffer",this.openPromise=new Promise((e,t)=>{this.ws.once("open",()=>e()),this.ws.once("error",(S)=>t(S))}),this.ws.on("message",(e,t)=>{let S=t?new TextDecoder().decode(e):e.toString();for(let i of this.handlers)i(S)})}ready(){return this.openPromise}onFrame(_){return this.handlers.add(_),()=>this.handlers.delete(_)}forwardSocketData(_,e,t,S){if(this.ws.readyState!==nt.OPEN)return;this.ws.send(new TextDecoder().decode(S))}forwardDidClose(_,e,t){}close(){try{this.ws.close()}catch{}}}async function vi(_){let e=_.port??9223,t=_.host??"localhost",{upstreams:S}=_,i=gt({brand:"bun",version:{Browser:"Bun/inspect-webkit","Protocol-Version":"1.3","User-Agent":"Bun (via inspect-webkit)","WebKit-Version":"605.1.15"},listTargets:(A)=>S.map(($)=>wt({reqHost:A,id:encodeURIComponent($.url),description:$.label??"bun",title:$.label??$.url,url:$.url,type:"node"}))}),s=new ut.default({noServer:!0});i.on("upgrade",(A,$,n)=>{let c=new URL(A.url??"/","http://placeholder");if(!c.pathname.startsWith("/devtools/page/")){$.destroy();return}let o=decodeURIComponent(c.pathname.slice(15)),B=S.find((p)=>p.url===o);if(!B){$.destroy();return}s.handleUpgrade(A,$,n,(p)=>{C(p,B).catch((u)=>{console.error(`# bun attach failed: ${u.message}`);try{p.close(1011,u.message)}catch{}})})});async function C(A,$){let n=!!process.env.INSPECT_WEBKIT_DEBUG,c=new Nt($.url);await c.ready();let o=crypto.randomUUID(),B=new le(A,c,"bun",0,o);Ot(B);let p=c.onFrame((u)=>{if(n)console.error(`[bun] target>> ${u.slice(0,240)}`);B.onMessageFromTarget(u)});A.on("message",(u,l)=>{let F=l?new TextDecoder().decode(u):u.toString();if(n)console.error(`[bun] tools>> ${F.slice(0,300)}`);B.onMessageFromTools(F)}),A.on("close",()=>{p(),c.close()}),console.error(`# devtools attached: ${$.label??$.url}`)}return await Ht(i,t,e),ht({brand:"bun",host:t,port:e}),{stop(){s.close(),i.close()},getTargets(){return S.slice()}}}async function Vt(){return Tt()}async function ui(){let[_,e]=await Promise.all([pi(),li()]);return[..._.flat(),...e.flat()]}async function pi(){let _=await Vt();return Promise.all(_.map(Oi))}async function li(){let _=await Ft();return Promise.all(_.map(di))}async function Oi(_){let e=null;try{return e=await wi(_),await mt(e.client,{source:"device",udid:_.Properties.SerialNumber,deviceID:_.DeviceID})}catch(t){return console.error(`warn: ${_.Properties.SerialNumber}: ${t.message}`),[]}finally{e?.client.close(),e?.lockdown.close()}}async function di(_){let e=null;try{let{socket:t,stream:S}=await bt(_.socketPath);return e=new H_(t,S),await e.reportIdentifier(),await mt(e,{source:"simulator",udid:`sim:${_.pid}`})}catch(t){return console.error(`warn: simulator (${_.socketPath}): ${t.message}`),[]}finally{e?.close()}}async function wi(_){let e=await ft(_.Properties.SerialNumber),t=await K_.open(_,e);await t.startSession();let S=await t.startService("com.apple.webinspector"),{socket:i,stream:s}=await t.connectService(S),C=new H_(i,s);return await C.reportIdentifier(),{client:C,lockdown:t}}async function mt(_,e){let t=(await _.listApplications()).filter((s)=>!s.isProxy),S=await Promise.all(t.map((s)=>_.getListing(s.appId))),i=[];for(let s=0;s<t.length;s++){let C=t[s];for(let A of S[s])i.push({...e,appId:C.appId,appName:C.name??C.bundleId??C.appId,bundleId:C.bundleId,pageId:A.pageId,title:A.title,url:A.url,type:A.type})}return i}var JS,ZS,Ct,QS,YS,es,ts,s_=(_,e,t)=>{var S=_!=null&&typeof _==="object";if(S){var i=e?es??=new WeakMap:ts??=new WeakMap,s=i.get(_);if(s)return s}t=_!=null?JS(ZS(_)):{};let C=e||!_||!_.__esModule?Ct(t,"default",{value:_,enumerable:!0}):t;for(let A of QS(_))if(!YS.call(C,A))Ct(C,A,{get:_s.bind(_,A),enumerable:!0});if(S)i.set(_,C);return C},j=(_,e)=>()=>(e||_((e={exports:{}}).exports,e),e.exports),X,i_,q_,Ss,w_,g_,at,ct,ss,Ee,Fe,is,Rt,Cs,rs=`<?xml version="1.0" encoding="UTF-8"?>
10
+ ${t}
11
+ ${e}</dict>`}function pe(_){let e=De(_,"");return new TextEncoder().encode(as+e+cs)}class ES{src;pos=0;constructor(_){this.src=_}skip(){while(this.pos<this.src.length){let _=this.src[this.pos];if(_===" "||_==="\t"||_===`
12
+ `||_==="\r")this.pos++;else if(this.src.startsWith("<!--",this.pos)){let e=this.src.indexOf("-->",this.pos+4);if(e<0)throw Error("unterminated comment");this.pos=e+3}else if(this.src.startsWith("<?",this.pos)){let e=this.src.indexOf("?>",this.pos+2);if(e<0)throw Error("unterminated processing instruction");this.pos=e+2}else if(this.src.startsWith("<!DOCTYPE",this.pos)){let e=0;while(this.pos<this.src.length){let S=this.src[this.pos++];if(S==="[")e++;else if(S==="]")e--;else if(S===">"&&e===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 e=this.src.slice(this.pos+1,_);this.pos=_+1;let S=e.startsWith("/"),t=e.endsWith("/");return{name:e.replace(/^\/?/,"").replace(/\/$/,"").trim().split(/\s+/)[0],selfClose:t,isClose:S}}readText(){let _=this.src.indexOf("<",this.pos),e=_<0?this.src.slice(this.pos):this.src.slice(this.pos,_);return this.pos=_<0?this.src.length:_,e.replace(/&lt;/g,"<").replace(/&gt;/g,">").replace(/&quot;/g,'"').replace(/&apos;/g,"'").replace(/&amp;/g,"&")}}function Te(_,e){let S=(t)=>{let s=_.nextTag();if(!s||!s.isClose||s.name!==t)throw Error(`expected </${t}>`)};switch(e){case"true":case"false":throw Error(`<${e}> must be self-closing`);case"string":case"key":{let t=_.readText();return S(e),t}case"integer":{let t=_.readText().trim();if(S("integer"),/^-?\d+$/.test(t)&&Math.abs(Number(t))<=Number.MAX_SAFE_INTEGER)return Number(t);return BigInt(t)}case"real":{let t=Number(_.readText().trim());return S("real"),t}case"data":{let t=Bs(_.readText());return S("data"),t}case"date":{let t=new Date(_.readText().trim());return S("date"),t}case"array":{let t=[];while(!0){let s=_.nextTag();if(!s)throw Error("unterminated <array>");if(s.isClose&&s.name==="array")return t;t.push(s.selfClose?fe(s.name):Te(_,s.name))}}case"dict":{let t={};while(!0){let s=_.nextTag();if(!s)throw Error("unterminated <dict>");if(s.isClose&&s.name==="dict")return t;if(s.name!=="key")throw Error(`expected <key>, got <${s.name}>`);let i=_.readText();S("key");let C=_.nextTag();if(!C)throw Error("unterminated <dict>");t[i]=C.selfClose?fe(C.name):Te(_,C.name)}}default:throw Error(`unknown plist tag <${e}>`)}}function fe(_){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 k_(_){let e=typeof _==="string"?_:new TextDecoder().decode(_),S=new ES(e);while(!0){let s=S.nextTag();if(!s)throw Error("no <plist> root");if(s.name==="plist"&&!s.isClose)break}let t=S.nextTag();if(!t)throw Error("empty plist");return t.selfClose?fe(t.name):Te(S,t.name)}function A_(_,e,S){let t=0;for(let s=0;s<S;s++)t=t*256+_[e+s];return t}function Ds(_){if(_.length<41)throw Error("bplist too short");let e=new TextDecoder().decode(_.slice(0,8));if(e!=="bplist00")throw Error(`bad magic: ${e}`);let S=_.length-32,t=_[S+6],s=_[S+7],i=A_(_,S+8,8),C=A_(_,S+16,8),n=A_(_,S+24,8),$=Array(i);for(let c=0;c<i;c++)$[c]=A_(_,n+c*t,t);function A(c){return A_(_,c,s)}function B(c){let a=$[c],u=_[a],v=u>>4,O=u&15;function p(F){if(O!==15)return{len:O,next:F};let E=_[F];if((E&240)!==16)throw Error("expected int marker for length");let T=1<<(E&15);return{len:A_(_,F+1,T),next:F+1+T}}switch(v){case 0:if(O===0)return null;if(O===8)return!1;if(O===9)return!0;if(O===15)return null;throw Error(`unknown singleton ${O}`);case 1:{let F=1<<O,E=A_(_,a+1,F);if(F===8&&E>Number.MAX_SAFE_INTEGER)return BigInt(E);return E}case 2:{let F=1<<O,E=new DataView(_.buffer,_.byteOffset+a+1,F);return F===4?E.getFloat32(0,!1):E.getFloat64(0,!1)}case 3:{let E=new DataView(_.buffer,_.byteOffset+a+1,8).getFloat64(0,!1);return new Date(Date.UTC(2001,0,1)+E*1000)}case 4:{let{len:F,next:E}=p(a+1);return _.slice(E,E+F)}case 5:{let{len:F,next:E}=p(a+1);return new TextDecoder("ascii").decode(_.slice(E,E+F))}case 6:{let{len:F,next:E}=p(a+1),T=_.slice(E,E+F*2),f=new Uint8Array(T.length);for(let b=0;b<T.length;b+=2)f[b]=T[b+1],f[b+1]=T[b];return new TextDecoder("utf-16le").decode(f)}case 10:{let{len:F,next:E}=p(a+1),T=[];for(let f=0;f<F;f++)T.push(B(A(E+f*s)));return T}case 13:{let{len:F,next:E}=p(a+1),T={};for(let f=0;f<F;f++){let b=B(A(E+f*s)),o=B(A(E+(F+f)*s));if(typeof b!=="string")throw Error(`non-string dict key: ${typeof b}`);T[b]=o}return T}default:throw Error(`unknown bplist marker 0x${u.toString(16)} at ${a}`)}}return B(C)}function Ts(_){if(_.length>=8){if(new TextDecoder().decode(_.slice(0,8))==="bplist00")return Ds(_)}return k_(_)}class K_{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 e of this.waiters)e.reject(_??Error("stream closed"));this.waiters=[]}read(_){return new Promise((e,S)=>{if(this.closed&&this.size<_){S(this.closeErr??Error("stream closed"));return}this.waiters.push({n:_,resolve:e,reject:S}),this.drain()})}drain(){while(this.waiters.length>0&&this.waiters[0].n<=this.size){let _=this.waiters.shift(),e=new Uint8Array(_.n),S=0;while(S<_.n){let t=this.chunks[0],s=_.n-S;if(t.length<=s)e.set(t,S),S+=t.length,this.chunks.shift();else e.set(t.subarray(0,s),S),this.chunks[0]=t.subarray(s),S+=s}this.size-=_.n,_.resolve(e)}}}function ue(_,e){let S=(i)=>{e.push(new Uint8Array(i.buffer,i.byteOffset,i.byteLength))},t=()=>e.close(),s=(i)=>e.close(i);return _.on("data",S),_.on("close",t),_.on("error",s),()=>{_.off("data",S),_.off("close",t),_.off("error",s)}}async function Oe(){let _=new K_;return new Promise((e,S)=>{let t=fS.createConnection({path:Fs}),s=(i)=>{_.close(i),S(i)};t.once("error",s),t.once("connect",()=>{t.off("error",s);let i=ue(t,_);e({socket:t,stream:_,detach:i})})})}async function bs(_){let e=await _.read(4),S=new DataView(e.buffer,e.byteOffset,4).getUint32(0,!0);return(await _.read(S-4)).slice(12)}function vs(_,e,S){let t=16+S.length,s=new Uint8Array(16),i=new DataView(s.buffer);i.setUint32(0,t,!0),i.setUint32(4,fs,!0),i.setUint32(8,Es,!0),i.setUint32(12,e,!0),_.write(s),_.write(S)}async function le(_,e,S,t){let s=pe({ClientVersionString:"inspect-webkit-1.0",ProgName:"inspect-webkit",kLibUSBMuxVersion:3,...t});vs(_,S,s);let i=await bs(e);return k_(i)}async function FS(){let{socket:_,stream:e}=await Oe();try{return(await le(_,e,1,{MessageType:"ListDevices"})).DeviceList??[]}finally{_.end()}}async function bS(_){let{socket:e,stream:S}=await Oe();try{let s=(await le(e,S,1,{MessageType:"ReadPairRecord",PairRecordID:_})).PairRecordData;if(!s)throw Error(`no pair record for ${_} — pair the device first (open Finder/iTunes, tap "Trust")`);return k_(s)}finally{e.end()}}async function nS(_,e){let{socket:S,stream:t,detach:s}=await Oe(),i=(e&255)<<8|e>>8&255,C=await le(S,t,1,{MessageType:"Connect",DeviceID:_,PortNumber:i});if(C.MessageType!=="Result"||C.Number!==0){S.end();let n=C.Number??"?";throw Error(`Connect to device ${_} port ${e} failed (code ${n})`)}return{socket:S,stream:t,detach:s}}async function pS(){let _=ps("lsof",["-U"],{stdio:["ignore","pipe","ignore"]});if(_.status!==0||!_.stdout)return[];let e=_.stdout.toString("utf8"),S=new Map;for(let t of e.split(`
13
+ `)){if(!/com\.apple\.webinspectord_sim\.socket\b/.test(t))continue;if(!t.startsWith("webinspec"))continue;let s=t.split(/\s+/),i=Number(s[1]),C=s[s.length-1];if(C)S.set(C,i)}return Array.from(S,([t,s])=>({socketPath:t,pid:s}))}async function uS(_){let e=new K_;return new Promise((S,t)=>{let s=vS.createConnection({path:_}),i=(C)=>{e.close(C),t(C)};s.once("error",i),s.once("connect",()=>{s.off("error",i),ue(s,e),S({socket:s,stream:e})})})}async function ye(_){let e=await _.read(4),S=new DataView(e.buffer,e.byteOffset,4).getUint32(0,!1),t=await _.read(S);return k_(t)}function ae(_,e){let S=pe({Label:"inspect-webkit",...e}),t=new Uint8Array(4);new DataView(t.buffer).setUint32(0,S.length,!1),_.write(t),_.write(S)}function ce(_,e){if(_.Error)throw Error(`lockdown ${e} error: ${String(_.Error)}`);if(_.Request!==e)throw Error(`lockdown expected Request=${e}, got ${String(_.Request)}`)}function aS(_,e,S,t){return new Promise((s,i)=>{e();let C=new K_,n=OS.connect({socket:_,cert:Buffer.from(S.HostCertificate),key:Buffer.from(S.HostPrivateKey),ca:Buffer.from(S.RootCertificate),rejectUnauthorized:!1}),$=(A)=>{J(`${t} tls error:`,A),C.close(A),i(A)};n.once("error",$),n.once("secureConnect",()=>{J(`${t} tls handshake complete`),n.off("error",$);let A=ue(n,C);s({socket:n,stream:C,detach:A})})})}class x_{socket;stream;pair;udid;deviceID;detach;constructor(_,e,S,t,s,i){this.socket=_,this.stream=e,this.pair=S,this.udid=t,this.deviceID=s,this.detach=i}static async open(_,e){J("connecting usbmux tunnel to lockdown port",yS);let{socket:S,stream:t,detach:s}=await nS(_.DeviceID,yS),i=new x_(S,t,e,_.Properties.SerialNumber,_.DeviceID,s);J("sending QueryType"),ae(S,{Request:"QueryType"});let C=await ye(t);if(J("QueryType reply:",C),ce(C,"QueryType"),C.Type!=="com.apple.mobile.lockdown")throw Error(`unexpected lockdown Type: ${String(C.Type)}`);return i}async startSession(){J("StartSession with HostID",this.pair.HostID),ae(this.socket,{Request:"StartSession",HostID:this.pair.HostID,SystemBUID:this.pair.SystemBUID});let _=await ye(this.stream);if(J("StartSession reply:",_),ce(_,"StartSession"),_.EnableSessionSSL){J("upgrading to TLS");let e=await aS(this.socket,this.detach,this.pair,"lockdown");this.socket=e.socket,this.stream=e.stream,this.detach=e.detach,J("TLS upgrade complete")}}async startService(_){J("StartService",_),ae(this.socket,{Request:"StartService",Service:_});let e=await ye(this.stream);return J("StartService reply:",e),ce(e,"StartService"),{port:e.Port,enableServiceSSL:Boolean(e.EnableServiceSSL),service:_}}async connectService(_){J("connecting service tunnel to port",_.port,"ssl=",_.enableServiceSSL);let{socket:e,stream:S,detach:t}=await nS(this.deviceID,_.port);if(!_.enableServiceSSL)return{socket:e,stream:S};let s=await aS(e,t,this.pair,"service");return{socket:s.socket,stream:s.stream}}close(){this.socket.end()}}async function us(_){let e=await _.read(4),S=new DataView(e.buffer,e.byteOffset,4).getUint32(0,!1),t=await _.read(S);return Ts(t)}function Os(_,e){let S=pe(e),t=new Uint8Array(4);new DataView(t.buffer).setUint32(0,S.length,!1),_.write(t),_.write(S)}function ls(){let _=crypto.getRandomValues(new Uint8Array(16));_[6]=_[6]&15|64,_[8]=_[8]&63|128;let e=Array.from(_,(S)=>S.toString(16).padStart(2,"0")).join("");return`${e.slice(0,8)}-${e.slice(8,12)}-${e.slice(12,16)}-${e.slice(16,20)}-${e.slice(20)}`}class V_{socket;stream;connectionId=ls();subscribers=new Set;reading;constructor(_,e){this.socket=_,this.stream=e,this.reading=(async()=>{try{while(!e.closed){let S=await us(e);for(let t of[...this.subscribers])try{t(S)}catch{}}}catch{}})()}subscribe(_){return this.subscribers.add(_),()=>this.subscribers.delete(_)}waitFor(_,e=5000){return new Promise((S,t)=>{let s=setTimeout(()=>{i(),t(Error(`timeout waiting for ${_} after ${e}ms`))},e),i=this.subscribe((C)=>{if(C.__selector===_)clearTimeout(s),i(),S(C)})})}send(_,e){Os(this.socket,{__selector:_,__argument:{WIRConnectionIdentifierKey:this.connectionId,...e}})}async reportIdentifier(){this.send("_rpc_reportIdentifier:",{})}async listApplications(){this.send("_rpc_getConnectedApplications:",{});let _=await this.waitFor("_rpc_reportConnectedApplicationList:",3000).catch(()=>null);if(!_)return[];let S=_.__argument.WIRApplicationDictionaryKey??{},t=[];for(let[s,i]of Object.entries(S)){let C=i;t.push({appId:s,bundleId:C.WIRApplicationBundleIdentifierKey,name:C.WIRApplicationNameKey,isProxy:Boolean(C.WIRIsApplicationProxyKey),isActive:Boolean(C.WIRIsApplicationActiveKey),hostAppId:C.WIRHostApplicationIdentifierKey})}return t}async getListing(_){this.send("_rpc_forwardGetListing:",{WIRApplicationIdentifierKey:_});let e=await this.waitFor("_rpc_applicationSentListing:",3000).catch(()=>null);if(!e)return[];let t=e.__argument.WIRListingKey??{},s=[];for(let i of Object.values(t)){let C=i;s.push({pageId:Number(C.WIRPageIdentifierKey??0),title:C.WIRTitleKey??"",url:C.WIRURLKey??"",type:C.WIRTypeKey??""})}return s}get connection(){return this.connectionId}forwardSocketSetup(_,e,S){this.send("_rpc_forwardSocketSetup:",{WIRApplicationIdentifierKey:_,WIRPageIdentifierKey:e,WIRSenderKey:S,WIRAutomaticallyPause:!1})}forwardSocketData(_,e,S,t){this.send("_rpc_forwardSocketData:",{WIRApplicationIdentifierKey:_,WIRPageIdentifierKey:e,WIRSenderKey:S,WIRSocketDataKey:t})}forwardDidClose(_,e,S){this.send("_rpc_forwardDidClose:",{WIRApplicationIdentifierKey:_,WIRPageIdentifierKey:e,WIRSenderKey:S})}onMessage(_){return this.subscribe(_)}close(){this.socket.end()}}class de{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(_,e,S,t,s){this.ws=_,this.wi=e,this.appId=S,this.pageId=t,this.senderKey=s}addMessageFilter(_,e){let S=this.filters.get(_);if(!S)this.filters.set(_,S=[]);S.push(e)}callTarget(_,e={}){return new Promise((S,t)=>{let s=--this.requestId;this.adapterRequestMap.set(s,{resolve:S,reject:t}),this.sendRaw(JSON.stringify({id:s,method:_,params:e}))})}fireEventToTools(_,e){this.sendToTools(JSON.stringify({method:_,params:e}))}fireResultToTools(_,e){this.sendToTools(JSON.stringify({id:_,result:e}))}fireErrorToTools(_,e){this.sendToTools(JSON.stringify({id:_,error:{code:e.code??-32000,message:e.message}}))}replyEmpty(_){if(typeof _.id==="number")this.fireResultToTools(_.id,{});return Promise.resolve(null)}async onMessageFromTools(_){let e;try{e=JSON.parse(_)}catch{return}if(typeof e.method==="string"&&typeof e.id==="number")this.toolRequestMap.set(e.id,e.method);let S=`tools::${e.method}`,t=this.filters.get(S),s=e;if(t)for(let i of t){if(!s)break;s=await i(s)}if(s)this.sendRaw(JSON.stringify(s))}async onMessageFromTarget(_){let e;try{e=JSON.parse(_)}catch{return}if(e.method==="Target.targetCreated"){this.sawAnyTargetCreated=!0;let i=e.params?.targetInfo;if(i?.type==="page"&&!this.innerTargetId)this.innerTargetId=i.targetId,this.flushQueue();return}if(e.method==="Target.didCommitProvisionalTarget"){let i=e.params?.newTargetId;if(typeof i==="string")this.innerTargetId=i;return}if(e.method==="Target.targetDestroyed")return;if(e.method==="Target.dispatchMessageFromTarget"){let i=e.params?.message;if(typeof i==="string")return this.onMessageFromTarget(i);return}if(typeof e.id==="number"&&this.wrappedAckIds.has(e.id)){this.wrappedAckIds.delete(e.id);return}if(typeof e.id==="number"){let i=this.adapterRequestMap.get(e.id);if(i){if(this.adapterRequestMap.delete(e.id),"error"in e&&e.error)i.reject(e.error);else i.resolve(e.result??{});return}let C=this.toolRequestMap.get(e.id);if(C){this.toolRequestMap.delete(e.id);let n=`target::${C}`;if("error"in e&&this.filters.has("target::error"))n="target::error";let $=this.filters.get(n);if(!$)return this.sendToTools(_);let A=e;for(let B of $){if(!A)break;A=await B(A)}if(A)this.sendToTools(JSON.stringify(A));return}return this.sendToTools(_)}let S=`target::${e.method}`,t=this.filters.get(S);if(!t)return this.sendToTools(_);let s=e;for(let i of t){if(!s)break;s=await i(s)}if(s)this.sendToTools(JSON.stringify(s))}sendRaw(_){let e=null;try{e=JSON.parse(_)}catch{}let S=e&&typeof e.method==="string"&&e.method.startsWith("Target.");if(this.innerTargetId&&e&&!S){if(typeof e.id==="number")this.wrappedAckIds.add(e.id);let t={id:e.id,method:"Target.sendMessageToTarget",params:{id:e.id,message:_,targetId:this.innerTargetId}};this.writeFrame(JSON.stringify(t));return}if(!this.innerTargetId&&e&&!S){if(this.outgoingQueue.push(_),this.outgoingQueue.length===1)setTimeout(()=>{if(!this.innerTargetId&&!this.sawAnyTargetCreated&&this.outgoingQueue.length>0){let t=this.outgoingQueue;this.outgoingQueue=[];for(let s of t)this.writeFrame(s)}},250);return}this.writeFrame(_)}flushQueue(){if(this.outgoingQueue.length===0)return;let _=this.outgoingQueue;this.outgoingQueue=[];for(let e of _)this.sendRaw(e)}writeFrame(_){this.wi.forwardSocketData(this.appId,this.pageId,this.senderKey,new TextEncoder().encode(_))}sendToTools(_){if(this.ws.readyState===1)this.ws.send(_)}}function ws(){return{lastScriptEval:{value:""},pageExecCtx:{id:0,isPage:!1},lastConsoleApiCalled:{value:null}}}function h(_,e,S){return _.fireResultToTools(e.id,S),Promise.resolve(null)}function gs(_,e){_.addMessageFilter("tools::Debugger.canSetScriptSource",(S)=>h(_,S,{result:!1})),_.addMessageFilter("tools::Debugger.setBlackboxPatterns",(S)=>h(_,S,{})),_.addMessageFilter("tools::Debugger.setAsyncCallStackDepth",(S)=>h(_,S,{})),_.addMessageFilter("target::Debugger.enable",(S)=>{return _.callTarget("Debugger.setBreakpointsActive",{active:!0}).catch(()=>{}),_.callTarget("Debugger.setPauseOnDebuggerStatements",{enabled:!0}).catch(()=>{}),Promise.resolve(S)}),_.addMessageFilter("target::Debugger.scriptParsed",(S)=>{if(S.params?.scriptId)e.lastScriptEval.value=String(S.params.scriptId);return Promise.resolve(S)}),_.addMessageFilter("tools::Debugger.setBreakpoint",(S)=>{let t=S.params??{};return S.params={location:t.location,options:t.condition?{condition:t.condition}:{}},Promise.resolve(S)}),_.addMessageFilter("tools::Debugger.setBreakpointByUrl",(S)=>{let t=S.params??{};return S.params={lineNumber:t.lineNumber,url:t.url,urlRegex:t.urlRegex,columnNumber:t.columnNumber,options:t.condition?{condition:t.condition}:{}},Promise.resolve(S)});for(let S of["removeBreakpoint","continueToLocation","stepInto","stepOver","stepOut","resume","pause","getScriptSource","evaluateOnCallFrame"])_.addMessageFilter(`tools::Debugger.${S}`,(t)=>Promise.resolve(t));_.addMessageFilter("target::Debugger.paused",(S)=>{let t=S.params?.callFrames;if(Array.isArray(t))for(let s of t){if(s.functionName==null&&typeof s.name==="string")s.functionName=s.name;if(!s.location&&s.sourceCodeLocation)s.location={scriptId:String(s.sourceCodeLocation.scriptId??""),lineNumber:s.sourceCodeLocation.lineNumber??0,columnNumber:s.sourceCodeLocation.columnNumber??0};if(Array.isArray(s.scopeChain)){for(let i of s.scopeChain)if(!i.object&&i.value)i.object=i.value}}return Promise.resolve(S)}),_.addMessageFilter("tools::Debugger.setBlackboxedRanges",(S)=>h(_,S,{})),_.addMessageFilter("tools::Debugger.setSkipAllPauses",(S)=>h(_,S,{})),_.addMessageFilter("tools::Debugger.setPauseOnExceptions",(S)=>{return Promise.resolve(S)})}function Hs(_,e){_.addMessageFilter("target::Runtime.executionContextCreated",(S)=>{let t=S.params?.context;if(t){if(!t.origin)t.origin=t.name??"";let s=Number(t.id),i=!!(t.isPageContext||t.type==="normal");if(Number.isFinite(s)&&s>0){if(!e.pageExecCtx.id||i&&!e.pageExecCtx.isPage)e.pageExecCtx.id=s,e.pageExecCtx.isPage=i}if(t.frameId)t.auxData={frameId:t.frameId,isDefault:!0},delete t.frameId}return Promise.resolve(S)}),_.addMessageFilter("tools::Runtime.evaluate",(S)=>{let t=S.params;if(!t)return Promise.resolve(S);if("silent"in t)t.doNotPauseOnExceptionsAndMuteConsole=!!t.silent,delete t.silent;if("userGesture"in t)t.emulateUserGesture=!!t.userGesture,delete t.userGesture;return Promise.resolve(S)}),_.addMessageFilter("target::Runtime.evaluate",(S)=>{let t=S.result;if(t?.wasThrown){if(t.result)t.result.subtype="error";t.exceptionDetails={exceptionId:0,text:t.result?.description??"Uncaught",url:"",scriptId:e.lastScriptEval.value,lineNumber:0,columnNumber:0,stackTrace:{callFrames:[{functionName:"",scriptId:e.lastScriptEval.value,url:"",lineNumber:0,columnNumber:0}]},exception:t.result}}return Promise.resolve(S)}),_.addMessageFilter("target::Runtime.getProperties",(S)=>{let t=S.result;if(!t)return Promise.resolve(S);let s=Array.isArray(t.result)?t.result:Array.isArray(t.properties)?t.properties:null;if(s)t.result=s.filter((i)=>i.isOwn||i.nativeGetter).map((i)=>({...i,isOwn:!0})),delete t.properties;if(Array.isArray(t.internalProperties))t.internalProperties=t.internalProperties.map((i)=>({name:i.name,value:i.value}));return Promise.resolve(S)}),_.addMessageFilter("tools::Runtime.compileScript",(S)=>h(_,S,{scriptId:null,exceptionDetails:null})),_.addMessageFilter("tools::Runtime.globalLexicalScopeNames",(S)=>h(_,S,{names:[]})),_.addMessageFilter("tools::Runtime.terminateExecution",(S)=>h(_,S,{})),_.addMessageFilter("tools::Runtime.getIsolateId",(S)=>h(_,S,{id:"inspect-webkit"})),_.addMessageFilter("tools::Runtime.getHeapUsage",(S)=>h(_,S,{usedSize:0,totalSize:0})),_.addMessageFilter("tools::Runtime.discardConsoleEntries",(S)=>{return S.method="Console.clearMessages",Promise.resolve(S)}),_.addMessageFilter("tools::Runtime.runIfWaitingForDebugger",(S)=>h(_,S,{})),_.addMessageFilter("tools::Runtime.setAsyncCallStackDepth",(S)=>h(_,S,{})),_.addMessageFilter("tools::Runtime.releaseObject",(S)=>Promise.resolve(S)),_.addMessageFilter("tools::Runtime.releaseObjectGroup",(S)=>Promise.resolve(S)),_.addMessageFilter("tools::Runtime.callFunctionOn",(S)=>Promise.resolve(S)),_.addMessageFilter("tools::Runtime.queryObjects",(S)=>Promise.resolve(S)),_.addMessageFilter("target::Debugger.globalObjectCleared",(S)=>{return _.fireEventToTools("Runtime.executionContextsCleared",{}),Promise.resolve(null)})}function Ns(_,e){_.addMessageFilter("tools::Log.startViolationsReport",(S)=>h(_,S,{})),_.addMessageFilter("tools::Log.stopViolationsReport",(S)=>h(_,S,{})),_.addMessageFilter("tools::Log.clear",(S)=>{return S.method="Console.clearMessages",Promise.resolve(S)}),_.addMessageFilter("tools::Log.disable",(S)=>{return S.method="Console.disable",Promise.resolve(S)}),_.addMessageFilter("tools::Log.enable",(S)=>{return S.method="Console.enable",Promise.resolve(S)}),_.addMessageFilter("tools::Runtime.enable",(S)=>{return _.callTarget("Console.enable",{}).catch(()=>{}),Promise.resolve(S)}),_.addMessageFilter("target::Console.messageAdded",(S)=>{let t=S.params?.message??{},i=(Array.isArray(t.stackTrace)?t.stackTrace:Array.isArray(t.stackTrace?.callFrames)?t.stackTrace.callFrames:[]).map(($)=>({functionName:$.functionName??"",scriptId:$.scriptId??"",url:$.url??"",lineNumber:Number($.lineNumber??0),columnNumber:Number($.columnNumber??0)})),C=i.length?{callFrames:i}:void 0,n=Date.now();if(t.source==="console-api"){let $=t.type==="log"?t.level??"log":t.type??"log",A=hs($),B=Array.isArray(t.parameters)&&t.parameters.length>0?t.parameters:[{type:"string",value:String(t.text??"")}],c={type:A,args:B,executionContextId:e.pageExecCtx.id||1,timestamp:n,stackTrace:C};return e.lastConsoleApiCalled.value=c,_.fireEventToTools("Runtime.consoleAPICalled",c),Promise.resolve(null)}if(t.source==="javascript"&&t.level==="error")return _.fireEventToTools("Runtime.exceptionThrown",{timestamp:n,exceptionDetails:{exceptionId:0,text:String(t.text??"Uncaught"),lineNumber:Number(t.line??0),columnNumber:Number(t.column??0),scriptId:e.lastScriptEval.value,url:t.url,stackTrace:C,exception:{type:"string",value:String(t.text??"")}}}),Promise.resolve(null);return _.fireEventToTools("Log.entryAdded",{entry:{source:t.source??"other",level:Vs(t.level??t.type??"log"),text:String(t.text??""),timestamp:n,url:t.url,lineNumber:t.line,stackTrace:C,networkRequestId:t.networkRequestId}}),Promise.resolve(null)}),_.addMessageFilter("target::Console.messagesCleared",()=>{return _.fireEventToTools("Log.entriesCleared",{}),_.fireEventToTools("Runtime.consoleAPICalled",{type:"clear",args:[],executionContextId:e.pageExecCtx.id||1,timestamp:Date.now()}),e.lastConsoleApiCalled.value=null,Promise.resolve(null)}),_.addMessageFilter("target::Console.messageRepeatCountUpdated",()=>{let S=e.lastConsoleApiCalled.value;if(S)_.fireEventToTools("Runtime.consoleAPICalled",{...S,timestamp:Date.now()});return Promise.resolve(null)}),_.addMessageFilter("target::Console.heapSnapshot",()=>Promise.resolve(null))}function hs(_){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 Vs(_){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 ms(_){let e=new Set;_.addMessageFilter("tools::DOM.enable",(S)=>h(_,S,{})),_.addMessageFilter("tools::DOM.setInspectMode",(S)=>{if(S.method="DOM.setInspectModeEnabled",S.params)S.params.enabled=S.params.mode==="searchForNode",delete S.params.mode,delete S.params.highlightConfig;return Promise.resolve(S)}),_.addMessageFilter("tools::DOM.setInspectedNode",(S)=>{return S.method="Console.addInspectedNode",Promise.resolve(S)}),_.addMessageFilter("tools::DOM.performSearch",(S)=>{if(S.params)S.params={query:S.params.query,caseSensitive:!!S.params.caseSensitive};return Promise.resolve(S)}),_.addMessageFilter("target::DOM.performSearch",(S)=>{let t=S.result?.searchId;if(typeof t==="string")e.add(t);return Promise.resolve(S)}),_.addMessageFilter("tools::DOM.discardSearchResults",(S)=>{let t=S.params?.searchId;if(typeof t==="string")e.delete(t);return Promise.resolve(S)}),_.addMessageFilter("tools::DOM.pushNodesByBackendIdsToFrontend",async(S)=>{let t=S.params?.backendNodeIds??[],s=await Promise.all(t.map((i)=>_.callTarget("DOM.pushNodeByBackendIdToFrontend",{backendNodeId:i}).then((C)=>C.nodeId).catch(()=>i)));return _.fireResultToTools(S.id,{nodeIds:s}),null}),_.addMessageFilter("tools::DOM.getBoxModel",(S)=>{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:S.params?.nodeId}).catch(()=>{}),Promise.resolve(null)}),_.addMessageFilter("tools::DOM.getNodeForLocation",async(S)=>{try{let s=(await _.callTarget("Runtime.evaluate",{expression:`document.elementFromPoint(${S.params?.x},${S.params?.y})`})).result?.objectId;if(!s)return _.fireResultToTools(S.id,{nodeId:0}),null;let i=await _.callTarget("DOM.requestNode",{objectId:s});_.fireResultToTools(S.id,{nodeId:i.nodeId,backendNodeId:i.nodeId})}catch(t){_.fireErrorToTools(S.id,{message:t?.message??String(t)})}return null}),_.addMessageFilter("tools::DOM.resolveNode",(S)=>{if(S.params&&S.params.objectGroup===void 0)delete S.params.objectGroup;return Promise.resolve(S)})}function Ls(_){_.addMessageFilter("tools::DOMDebugger.getEventListeners",async(e)=>{try{let S=await _.callTarget("DOM.requestNode",{objectId:e.params?.objectId}),s=((await _.callTarget("DOM.getEventListenersForNode",{nodeId:S.nodeId,objectGroup:"event-listeners-panel"})).listeners??[]).map((i)=>({type:i.type,useCapture:!!i.useCapture,passive:!!i.passive,once:!!i.once,location:i.location,handler:i.handler}));_.fireResultToTools(e.id,{listeners:s})}catch(S){_.fireErrorToTools(e.id,{message:S?.message??String(S)})}return null}),_.addMessageFilter("tools::DOMDebugger.setXHRBreakpoint",(e)=>h(_,e,{})),_.addMessageFilter("tools::DOMDebugger.removeXHRBreakpoint",(e)=>h(_,e,{})),_.addMessageFilter("tools::DOMDebugger.setEventListenerBreakpoint",(e)=>h(_,e,{})),_.addMessageFilter("tools::DOMDebugger.removeEventListenerBreakpoint",(e)=>h(_,e,{}))}function Ws(_,e){_.addMessageFilter("tools::Page.setOverlayMessage",(i)=>{return i.method="Debugger.setOverlayMessage",Promise.resolve(i)}),_.addMessageFilter("tools::Page.configureOverlay",(i)=>{return i.method="Debugger.setOverlayMessage",Promise.resolve(i)}),_.addMessageFilter("tools::Page.getNavigationHistory",async(i)=>{try{let C=await _.callTarget("Runtime.evaluate",{expression:"window.location.href"}),n=await _.callTarget("Runtime.evaluate",{expression:"document.title"});_.fireResultToTools(i.id,{currentIndex:0,entries:[{id:0,url:C.result?.value??"",userTypedURL:C.result?.value??"",title:n.result?.value??"",transitionType:"link"}]})}catch(C){_.fireErrorToTools(i.id,{message:C?.message??String(C)})}return null}),_.addMessageFilter("target::Page.frameNavigated",(i)=>{return dS(i.params?.frame),Promise.resolve(i)}),_.addMessageFilter("target::Page.getResourceTree",(i)=>{return Ee(i.result?.frameTree),Promise.resolve(i)}),_.addMessageFilter("tools::Page.getFrameTree",async(i)=>{if(typeof i.id!=="number")return null;try{let C=await _.callTarget("Page.getResourceTree",{}),n=wS(C?.frameTree);Ee(n),_.fireResultToTools(i.id,{frameTree:n})}catch(C){_.fireErrorToTools(i.id,{message:C?.message??String(C)})}return null}),_.addMessageFilter("tools::Page.createIsolatedWorld",(i)=>{if(typeof i.id!=="number")return Promise.resolve(null);return h(_,i,{executionContextId:e.pageExecCtx.id||1})});let S=1;_.addMessageFilter("tools::Page.addScriptToEvaluateOnNewDocument",(i)=>h(_,i,{identifier:`pptr-${S++}`})),_.addMessageFilter("tools::WebMCP.enable",(i)=>h(_,i,{})),_.addMessageFilter("tools::WebMCP.disable",(i)=>h(_,i,{})),_.addMessageFilter("tools::Page.captureScreenshot",(i)=>{return _.fireErrorToTools(i.id,{message:"Page.captureScreenshot not supported by Safari"}),Promise.resolve(null)}),_.addMessageFilter("tools::Page.startScreencast",(i)=>h(_,i,{})),_.addMessageFilter("tools::Page.stopScreencast",(i)=>h(_,i,{})),_.addMessageFilter("tools::Page.screencastFrameAck",(i)=>h(_,i,{})),_.addMessageFilter("tools::Page.setLifecycleEventsEnabled",(i)=>h(_,i,{}));let t="",s="0.1";_.addMessageFilter("target::Page.frameNavigated",(i)=>{let C=i.params?.frame;if(C)s=C.id??s,t=C.loaderId??t,_.fireEventToTools("Page.frameStartedLoading",{frameId:s}),_.fireEventToTools("Page.lifecycleEvent",{frameId:s,loaderId:t,name:"init",timestamp:0}),_.fireEventToTools("Page.lifecycleEvent",{frameId:s,loaderId:t,name:"commit",timestamp:0});return Promise.resolve(i)}),_.addMessageFilter("target::Page.domContentEventFired",(i)=>{return _.fireEventToTools("Page.lifecycleEvent",{frameId:s,loaderId:t,name:"DOMContentLoaded",timestamp:i.params?.timestamp??0}),Promise.resolve(i)}),_.addMessageFilter("target::Page.loadEventFired",(i)=>{return _.fireEventToTools("Page.lifecycleEvent",{frameId:s,loaderId:t,name:"load",timestamp:i.params?.timestamp??0}),_.fireEventToTools("Page.lifecycleEvent",{frameId:s,loaderId:t,name:"networkAlmostIdle",timestamp:i.params?.timestamp??0}),_.fireEventToTools("Page.lifecycleEvent",{frameId:s,loaderId:t,name:"networkIdle",timestamp:i.params?.timestamp??0}),_.fireEventToTools("Page.frameStoppedLoading",{frameId:s}),Promise.resolve(i)})}function dS(_){if(!_)return;if(!_.securityOrigin)try{_.securityOrigin=new URL(_.url??"").origin}catch{_.securityOrigin="://"}if(!_.mimeType)_.mimeType="text/html"}function Ee(_){if(!_)return;if(dS(_.frame),Array.isArray(_.childFrames))_.childFrames.forEach(Ee)}function wS(_){if(!_)return _;let e={frame:_.frame};if(Array.isArray(_.childFrames))e.childFrames=_.childFrames.map(wS);return e}function Ps(_){_.addMessageFilter("tools::Overlay.enable",(e)=>h(_,e,{})),_.addMessageFilter("tools::Overlay.disable",(e)=>h(_,e,{})),_.addMessageFilter("tools::Overlay.highlightNode",(e)=>{let S=e.params??{};return e.method="DOM.highlightNode",e.params={highlightConfig:S.highlightConfig,nodeId:S.nodeId,objectId:S.objectId},Promise.resolve(e)}),_.addMessageFilter("tools::Overlay.highlightFrame",(e)=>{return e.method="DOM.highlightFrame",Promise.resolve(e)}),_.addMessageFilter("tools::Overlay.highlightQuad",(e)=>{return e.method="DOM.highlightQuad",Promise.resolve(e)}),_.addMessageFilter("tools::Overlay.highlightRect",(e)=>{return e.method="DOM.highlightRect",Promise.resolve(e)}),_.addMessageFilter("tools::Overlay.hideHighlight",(e)=>{return e.method="DOM.hideHighlight",Promise.resolve(e)}),_.addMessageFilter("tools::Overlay.setShowPaintRects",(e)=>{return e.method="Page.setShowPaintRects",Promise.resolve(e)}),_.addMessageFilter("tools::Overlay.setInspectMode",(e)=>{let S=e.params??{};return e.method="DOM.setInspectModeEnabled",e.params={enabled:typeof S.mode==="string"&&S.mode!=="none",highlightConfig:S.highlightConfig},Promise.resolve(e)})}function Ms(_){_.addMessageFilter("tools::Emulation.canEmulate",(e)=>h(_,e,{result:!0})),_.addMessageFilter("tools::Emulation.setTouchEmulationEnabled",(e)=>{return e.method="Page.setTouchEmulationEnabled",Promise.resolve(e)}),_.addMessageFilter("tools::Emulation.setScriptExecutionDisabled",(e)=>{return e.method="Page.setScriptExecutionDisabled",Promise.resolve(e)}),_.addMessageFilter("tools::Emulation.setEmulatedMedia",(e)=>{return e.method="Page.setEmulatedMedia",Promise.resolve(e)}),_.addMessageFilter("tools::Rendering.setShowPaintRects",(e)=>{return e.method="Page.setShowPaintRects",Promise.resolve(e)}),_.addMessageFilter("tools::Emulation.setDeviceMetricsOverride",(e)=>h(_,e,{})),_.addMessageFilter("tools::Emulation.clearDeviceMetricsOverride",(e)=>h(_,e,{})),_.addMessageFilter("tools::Emulation.setUserAgentOverride",(e)=>{let S=e.params?.userAgent??"";return e.method="Page.overrideUserAgent",e.params={value:S},Promise.resolve(e)}),_.addMessageFilter("tools::Emulation.setFocusEmulationEnabled",(e)=>h(_,e,{})),_.addMessageFilter("tools::Emulation.setDefaultBackgroundColorOverride",(e)=>h(_,e,{}))}function Re(_){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 xs(_){if(!_)return _;return{...ks,..._,hasPostData:_.postData!=null}}function zs(_){if(!_)return _;let e=0,S=_.headers??{},t=S["Content-Length"]??S["content-length"];if(t!=null)e=Number(t)||0;return{...Ks,..._,fromDiskCache:_.source==="disk-cache",fromServiceWorker:_.source==="service-worker",encodedDataLength:e}}function js(_,e){if(!_)return;for(let[S,t]of Object.entries(e))if(S in _&&!(t in _))_[t]=_[S],delete _[S]}function Js(_){let e=typeof _.size==="number"?_.size:(_.name?.length??0)+(_.value?.length??0);return{name:_.name,value:_.value,domain:_.domain,path:_.path,expires:_.expires??-1,size:e,httpOnly:!!_.httpOnly,secure:!!_.secure,session:!!_.session,..._.sameSite?{sameSite:_.sameSite}:{}}}function Zs(_,e){let S=new Map,t=1024;for(let[i,C]of Object.entries(Us))_.addMessageFilter(`tools::${i}`,(n)=>{return n.method=C,Promise.resolve(n)});_.addMessageFilter("tools::Network.setCacheDisabled",(i)=>{if(i.params&&"cacheDisabled"in i.params)i.params={disabled:!!i.params.cacheDisabled};return Promise.resolve(i)});let s=async(i)=>{try{let C=await _.callTarget("Page.getCookies",{}),n=Array.isArray(C?.cookies)?C.cookies.map(Js):[];_.fireResultToTools(i.id,{cookies:n})}catch(C){_.fireErrorToTools(i.id,{message:C?.message??String(C)})}return null};_.addMessageFilter("tools::Network.getCookies",s),_.addMessageFilter("tools::Network.getAllCookies",s),_.addMessageFilter("tools::Network.setCookie",(i)=>{let C=i.params??{};return i.method="Page.setCookie",i.params={cookie:{name:C.name,value:C.value,domain:C.domain??"",path:C.path??"/",expires:C.expires??-1,session:!1,httpOnly:!!C.httpOnly,secure:!!C.secure,sameSite:C.sameSite??"None"}},Promise.resolve(i)}),_.addMessageFilter("tools::Network.setCookies",async(i)=>{let C=Array.isArray(i.params?.cookies)?i.params.cookies:[];try{await Promise.all(C.map((n)=>_.callTarget("Page.setCookie",{cookie:n}))),_.fireResultToTools(i.id,{})}catch(n){_.fireErrorToTools(i.id,{message:n?.message??String(n)})}return null}),_.addMessageFilter("tools::Network.deleteCookies",(i)=>{let C=i.params??{},n=C.url??`https://${(C.domain??"").replace(/^\./,"")}${C.path??"/"}`;return i.method="Page.deleteCookie",i.params={cookieName:C.name,url:n},Promise.resolve(i)}),_.addMessageFilter("tools::Network.deleteCookie",(i)=>{return i.method="Page.deleteCookie",Promise.resolve(i)}),_.addMessageFilter("tools::Network.clearBrowserCookies",async(i)=>{try{let C=await _.callTarget("Page.getCookies",{}),n=Array.isArray(C?.cookies)?C.cookies:[];await Promise.all(n.map(($)=>_.callTarget("Page.deleteCookie",{cookieName:$.name,url:`${$.secure?"https":"http"}://${($.domain??"").replace(/^\./,"")}${$.path??"/"}`}).catch(()=>{}))),_.fireResultToTools(i.id,{})}catch(C){_.fireErrorToTools(i.id,{message:C?.message??String(C)})}return null}),_.addMessageFilter("tools::Network.canEmulateNetworkConditions",(i)=>h(_,i,{result:!1})),_.addMessageFilter("tools::Network.setExtraHTTPHeaders",(i)=>h(_,i,{})),_.addMessageFilter("tools::Network.setBlockedURLs",(i)=>h(_,i,{})),_.addMessageFilter("tools::Network.emulateNetworkConditions",(i)=>h(_,i,{})),_.addMessageFilter("tools::Network.setMonitoringXHREnabled",(i)=>h(_,i,{})),_.addMessageFilter("tools::Network.getResponseBody",async(i)=>{let C=i.params?.requestId,n=typeof C==="string"?S.get(C):void 0;if(!n)return _.fireErrorToTools(i.id,{message:"Network.getResponseBody: requestId not tracked (only requests observed via requestWillBeSent are recoverable)"}),null;try{let $=await _.callTarget("Network.loadResource",{frameId:n.frameId,url:n.url}),A=String($?.content??""),B=String($?.mimeType??""),c=/^(text\/|application\/(json|xml|javascript|ecmascript|x-www-form-urlencoded))/.test(B),a=c?A:Buffer.from(A,"binary").toString("base64");_.fireResultToTools(i.id,{body:a,base64Encoded:!c})}catch($){_.fireErrorToTools(i.id,{message:`Network.getResponseBody fallback (loadResource) failed: ${$?.message??String($)}`})}return null});for(let[i,C]of Object.entries(Gs))_.addMessageFilter(`target::${i}`,(n)=>{return js(n.params,C),Promise.resolve(n)});_.addMessageFilter("target::Network.requestWillBeSent",(i)=>{let C=i.params;if(C){if(Object.assign(C,{...Is,...C}),C.request=xs(C.request),C.type=Re(C.type),typeof C.requestId==="string"&&typeof C.request?.url==="string"){if(S.size>=1024){let n=S.keys().next().value;if(n!==void 0)S.delete(n)}S.set(C.requestId,{url:C.request.url,frameId:C.frameId})}}return Promise.resolve(i)}),_.addMessageFilter("target::Network.responseReceived",(i)=>{let C=i.params;if(C)Object.assign(C,{...qs,...C}),C.response=zs(C.response),C.type=Re(C.type);return Promise.resolve(i)}),_.addMessageFilter("target::Network.loadingFinished",(i)=>{let C=i.params;if(C){let n=C.metrics?.responseBodyBytesReceived;if(typeof n==="number"&&C.encodedDataLength==null)C.encodedDataLength=n;Object.assign(C,{...Xs,...C})}return Promise.resolve(i)}),_.addMessageFilter("target::Network.loadingFailed",(i)=>{let C=i.params;if(C){if(C.type=Re(C.type),!("canceled"in C))C.canceled=!1}return Promise.resolve(i)}),_.addMessageFilter("target::Network.requestServedFromMemoryCache",(i)=>{if(i.method="Network.requestServedFromCache",i.params)i.params={requestId:i.params.requestId};return Promise.resolve(i)}),_.addMessageFilter("tools::Network.loadNetworkResource",async(i)=>{let C=i.params??{};if(!e)return _.fireResultToTools(i.id,{resource:{success:!1,netError:1,netErrorName:"ERR_NOT_IMPLEMENTED"}}),null;try{let n=await _.callTarget("Network.loadResource",{frameId:C.frameId,url:C.url}),$=!!n?.content&&(n?.status??0)>=200&&(n?.status??0)<300,A;if($)A=`network-resource:${C.frameId??""}:${C.url}`,e.set(A,String(n.content));_.fireResultToTools(i.id,{resource:{success:$,stream:A,httpStatusCode:n?.status,headers:n?.headers,mimeType:n?.mimeType}})}catch(n){_.fireResultToTools(i.id,{resource:{success:!1,netError:2,netErrorName:n?.message??"ERR_FAILED"}})}return null})}function Qs(_){for(let e of["Target.setAutoAttach","Target.setDiscoverTargets","Target.setRemoteLocations"])_.addMessageFilter(`tools::${e}`,(S)=>h(_,S,{}))}function Ys(_){_.addMessageFilter("target::Inspector.inspect",(e)=>{if(e.method="DOM.inspectNodeRequested",e.params)e.params.backendNodeId=e.params.object?.objectId,delete e.params.object,delete e.params.hints;return Promise.resolve(e)})}function ei(_){if(!_)return _;let e=_.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:e,isConstructed:e,length:_.length??0,endLine:_.endLine??0,endColumn:_.endColumn??0,hasSourceURL:!!_.sourceURL}}function Fe(_){if(!_)return _;let e={origin:_.origin==="author"?"regular":_.origin,style:o_(_.style),selectorList:si(_.selectorList)};if(_.ruleId?.styleSheetId)e.styleSheetId=_.ruleId.styleSheetId;if(Array.isArray(_.groupings))e.media=_.groupings.map((S)=>({text:S.text,sourceURL:S.sourceURL,source:ti[S.type]}));return e}function ri(_){let e={lastNodeId:0},S=new Map;async function t(s,i){let C=S.get(s);if(!C)try{if(C=(await _.callTarget("CSS.getStyleSheet",{styleSheetId:s}))?.styleSheet,C)S.set(s,C)}catch{}let n=C?.rules??[];for(let $=0;$<n.length;$++)if(_i(n[$]?.style?.range,i))return{styleSheetId:s,ordinal:$};return{styleSheetId:s,ordinal:0}}_.addMessageFilter("tools::CSS.enable",(s)=>{return _.fireResultToTools(s.id,{}),Promise.resolve(null)}),_.addMessageFilter("target::CSS.styleSheetAdded",(s)=>{if(s.params?.header)s.params.header=ei(s.params.header);return Promise.resolve(s)}),_.addMessageFilter("target::CSS.getInlineStylesForNode",(s)=>{let i=s.result;if(i)s.result={inlineStyle:o_(i.inlineStyle),attributesStyle:o_(i.attributesStyle)};return Promise.resolve(s)}),_.addMessageFilter("tools::CSS.getMatchedStylesForNode",async(s)=>{if(typeof s.params?.nodeId==="number")e.lastNodeId=s.params.nodeId;try{let[i,C]=await Promise.all([_.callTarget("CSS.getInlineStylesForNode",{nodeId:s.params.nodeId}),_.callTarget("CSS.getMatchedStylesForNode",{nodeId:s.params.nodeId,includePseudo:!0,includeInherited:!0})]);_.fireResultToTools(s.id,{inlineStyle:o_(i?.inlineStyle),attributesStyle:o_(i?.attributesStyle),matchedCSSRules:we(C?.matchedCSSRules),pseudoElements:ii(C?.pseudoElements),inherited:Ci(C?.inherited),cssKeyframesRules:[]})}catch(i){_.fireErrorToTools(s.id,{message:i?.message??String(i)})}return null}),_.addMessageFilter("tools::CSS.setStyleTexts",async(s)=>{let i=s.params?.edits??[],C=[];for(let n of i)try{let $=await t(n.styleSheetId,n.range),A=await _.callTarget("CSS.setStyleText",{styleId:$,text:n.text});C.push(o_(A?.style)),S.delete(n.styleSheetId),_.fireEventToTools("CSS.styleSheetChanged",{styleSheetId:n.styleSheetId})}catch{C.push(null)}return _.fireResultToTools(s.id,{styles:C}),null}),_.addMessageFilter("tools::CSS.setRuleSelector",async(s)=>{let{styleSheetId:i,range:C,selector:n}=s.params??{};try{let $=await t(i,C);s.params={ruleId:$,selector:n}}catch($){return _.fireErrorToTools(s.id,{message:$?.message??String($)}),null}return s}),_.addMessageFilter("target::CSS.setRuleSelector",(s)=>{if(s.result?.rule)s.result={rule:Fe(s.result.rule)};return Promise.resolve(s)}),_.addMessageFilter("tools::CSS.addRule",async(s)=>{let i=s.params??{},C=String(i.ruleText??"").trim().replace(/\{\s*\}\s*$/,"").trim();try{let n=await _.callTarget("CSS.addRule",{contextNodeId:e.lastNodeId,styleSheetId:i.styleSheetId,selector:C});_.fireResultToTools(s.id,{rule:Fe(n?.rule)})}catch(n){_.fireErrorToTools(s.id,{message:n?.message??String(n)})}return null})}function Ai(_){_.addMessageFilter("tools::Browser.getVersion",(e)=>h(_,e,$i)),_.addMessageFilter("tools::Browser.getWindowForTarget",(e)=>h(_,e,{windowId:1,bounds:{}})),_.addMessageFilter("tools::Browser.setWindowBounds",(e)=>h(_,e,{}))}function ni(_){switch(_){case"mousePressed":return"mousedown";case"mouseReleased":return"click";case"mouseMoved":return"mousemove";default:return null}}function yi(_){let e=async(S)=>{let t=S.params??{},s=ni(t.type);if(!s)return _.fireResultToTools(S.id,{}),null;let i=s==="click"?["mousedown","click","mouseup"]:[s];try{for(let C of i){let n={x:Number(t.x)||0,y:Number(t.y)||0,modifiers:Number(t.modifiers)||0,button:t.button??"none",type:C},$=`(${oi}, __sd_simulate(${JSON.stringify(n)}))`;await _.callTarget("Runtime.evaluate",{expression:$})}_.fireResultToTools(S.id,{})}catch(C){_.fireErrorToTools(S.id,{message:C?.message??String(C)})}return null};_.addMessageFilter("tools::Input.dispatchMouseEvent",e),_.addMessageFilter("tools::Input.emulateTouchFromMouseEvent",e),_.addMessageFilter("tools::Input.setIgnoreInputEvents",(S)=>{return _.fireResultToTools(S.id,{}),Promise.resolve(null)})}function ci(_){let e=new Map;return _.addMessageFilter("tools::IO.read",(S)=>{let t=String(S.params?.handle??""),s=Number(S.params?.size)||ai,i=Number(S.params?.offset)||0,C=e.get(t);if(C===void 0)return _.fireResultToTools(S.id,{data:"",eof:!0,base64Encoded:!1}),Promise.resolve(null);let n=C.slice(i,i+s),$=i+s>=C.length;return _.fireResultToTools(S.id,{data:n,eof:$,base64Encoded:!1}),Promise.resolve(null)}),_.addMessageFilter("tools::IO.close",(S)=>{return e.delete(String(S.params?.handle??"")),_.fireResultToTools(S.id,{}),Promise.resolve(null)}),e}function Ri(_){_.addMessageFilter("tools::Accessibility.enable",(e)=>h(_,e,{})),_.addMessageFilter("tools::Accessibility.disable",(e)=>h(_,e,{})),_.addMessageFilter("tools::Accessibility.getPartialAXTree",async(e)=>{let S=e.params??{},t=S.nodeId??S.backendNodeId;if(typeof t!=="number")return _.fireResultToTools(e.id,{nodes:[]}),null;try{let i=(await _.callTarget("DOM.getAccessibilityPropertiesForNode",{nodeId:t}))?.properties??{},C={nodeId:String(t),ignored:Boolean(i.ignored),role:i.role?{type:"role",value:String(i.role)}:void 0,name:i.label?{type:"computedString",value:String(i.label)}:void 0,backendDOMNodeId:t,childIds:[],properties:[]};_.fireResultToTools(e.id,{nodes:[C]})}catch(s){_.fireResultToTools(e.id,{nodes:[]})}return null})}function Ti(_){for(let[S,t]of Object.entries(Di))_.addMessageFilter(`tools::${S}`,(s)=>h(_,s,t));for(let S of Bi)for(let t of["enable","disable"])_.addMessageFilter(`tools::${S}.${t}`,(s)=>h(_,s,{}));let e=[["Autofill.setAddresses",{}],["Storage.getStorageKey",{storageKey:""}],["Storage.trackCacheStorageForOrigin",{}],["Storage.trackIndexedDBForOrigin",{}],["Storage.untrackCacheStorageForOrigin",{}],["Storage.untrackIndexedDBForOrigin",{}],["Storage.getCookies",{cookies:[]}],["ServiceWorker.unregister",{}]];for(let[S,t]of e)_.addMessageFilter(`tools::${S}`,(s)=>h(_,s,t))}function gS(_){let e=ws();Ti(_);let S=ci(_);gs(_,e),Hs(_,e),Ns(_,e),ms(_),Ls(_),Ws(_,e),Ps(_),Ms(_),Zs(_,S),Qs(_),Ys(_),ri(_),Ai(_),yi(_),Ri(_)}function NS(_){let e=`${_.reqHost}/devtools/page/${_.id}`;return{description:_.description,devtoolsFrontendUrl:`devtools://devtools/bundled/inspector.html?ws=${e}`,devtoolsFrontendUrlCompat:`devtools://devtools/bundled/inspector.html?ws=${e}`,id:_.id,title:_.title,type:_.type,url:_.url,webSocketDebuggerUrl:`ws://${e}`,faviconUrl:""}}function p_(_){return _.replace(/[&<>"']/g,(e)=>fi[e])}function hS(_){return HS.createServer((e,S)=>{let t=new URL(e.url??"/","http://placeholder"),s=e.headers.host??"";if(t.pathname==="/json/version"){let i=typeof _.version==="function"?_.version(s):_.version;return Be(S,i)}if(t.pathname==="/json"||t.pathname==="/json/list")return Be(S,_.listTargets(s));if(t.pathname==="/json/protocol")return Be(S,{});if(t.pathname==="/")return Ei(S,_,s);S.writeHead(404,{"content-type":"text/plain"}),S.end("not found")})}function Be(_,e,S=200){_.writeHead(S,{"content-type":"application/json; charset=utf-8"}),_.end(JSON.stringify(e))}function Ei(_,e,S){let t=e.listTargets(S),s=t.map(($)=>`<li><strong>${p_($.title||$.url||$.id)}</strong><br><small>${p_($.url)}</small><br><small>copy &amp; paste into Chrome's address bar:</small><br><code style="user-select:all">${p_($.devtoolsFrontendUrl)}</code></li>`).join(""),i=`inspect-webkit${e.brand?` (${e.brand})`:""}`,C=e.indexNote??'<p>Open <code style="display:inline;padding:1px 4px">chrome://inspect</code> → <em>Configure…</em> → add '+`<code style="display:inline;padding:1px 4px">${p_(S)}</code>.</p>`,n=`<!doctype html><meta charset=utf-8><title>${p_(i)}</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>${p_(i)} — ${t.length} target${t.length===1?"":"s"}</h1>`+C+`<ul>${s}</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(n)}function VS(_,e,S){return new Promise((t,s)=>{_.once("error",s);let i=e==="localhost"||e==="::1"||e==="127.0.0.1"?"::":e;_.listen({port:S,host:i,ipv6Only:!1},()=>{_.off("error",s),t()})})}function mS(_){let e=!process.env.NO_COLOR&&process.stderr.isTTY===!0,S=($,A)=>e?`\x1B[${$}m${A}\x1B[0m`:A,t=($)=>S("1",$),s=($)=>S("2",$),i=($)=>S("36",$),C=($)=>S("32",$),n=`http://${_.host}:${_.port}`;console.error(`${C("●")} ${t(`${_.brand} CDP`)} ${i(n)}`),console.error(` ${s("chrome")} chrome://inspect → ${_.host}:${_.port}`),console.error(` ${s("vscode")} "type": "chrome", "port": ${_.port}`)}function Fi(_,e){let S=!!process.env.INSPECT_WEBKIT_DEBUG,t=new Map,s=!1,i=!1,C=!1,n=new Map,$=null;function A(T){if(_.readyState!==1)return;let f=JSON.stringify(T);if(S)console.error(`[browser] tools<< ${f.slice(0,240)}`);_.send(f)}function B(T,f){let b={method:T,params:f};if($)b.sessionId=$;A(b)}function c(T,f){return{targetId:T.targetId,type:T.type==="page"?"page":T.type||"other",title:T.title||"",url:T.url||"",attached:f,canAccessOpener:!1,browserContextId:"default"}}function a(T){for(let f of t.values())if(f.targetId===T)return!0;return!1}function u(T,f){let b=e.listEntries().find((D)=>D.targetId===T);if(!b)return null;let o=crypto.randomUUID(),r=(D)=>{let d;try{d=JSON.parse(D)}catch{return}d.sessionId=o,A(d)},y=e.createPageSession(T,r);if(!y)return null;return t.set(o,{handle:y,targetId:T}),B("Target.attachedToTarget",{sessionId:o,targetInfo:c(b,!0),waitingForDebugger:f}),{sessionId:o,entry:b}}function v(T){let f=t.get(T);if(!f)return!1;try{f.handle.close()}catch{}return t.delete(T),B("Target.detachedFromTarget",{sessionId:T,targetId:f.targetId}),!0}function O(){let T=e.listEntries(),f=new Set;for(let b of T){f.add(b.targetId);let o=n.get(b.targetId);if(!o){if(n.set(b.targetId,b),s)B("Target.targetCreated",{targetInfo:c(b,a(b.targetId))});if(i&&!a(b.targetId))u(b.targetId,C)}else if(o.title!==b.title||o.url!==b.url){if(n.set(b.targetId,b),s)B("Target.targetInfoChanged",{targetInfo:c(b,a(b.targetId))})}}for(let b of[...n.keys()]){if(f.has(b))continue;n.delete(b);for(let[o,r]of t)if(r.targetId===b)v(o);if(s)B("Target.targetDestroyed",{targetId:b})}}let p=setInterval(O,e.refreshMs??1000);function F(T,f){if(T)f.sessionId=T;A(f)}function E(T,f){let{id:b,method:o}=T,r=T.params??{};switch(o){case"Browser.getVersion":return F(f,{id:b,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(!$)$=crypto.randomUUID();return F(f,{id:b,result:{sessionId:$}})}case"Target.setDiscoverTargets":{if(s=!!r.discover,s)for(let y of e.listEntries())n.set(y.targetId,y),B("Target.targetCreated",{targetInfo:c(y,a(y.targetId))});if(typeof b==="number")F(f,{id:b,result:{}});return}case"Target.getTargets":{let y=e.listEntries().map((D)=>c(D,a(D.targetId)));return F(f,{id:b,result:{targetInfos:y}})}case"Target.setAutoAttach":{if(i=!!r.autoAttach,C=!!r.waitForDebuggerOnStart,i){for(let y of e.listEntries())if(!a(y.targetId))u(y.targetId,C)}if(typeof b==="number")F(f,{id:b,result:{}});return}case"Target.attachToTarget":{for(let[D,d]of t)if(d.targetId===r.targetId){if(typeof b==="number")F(f,{id:b,result:{sessionId:D}});return}let y=u(r.targetId,!1);if(!y){if(typeof b==="number")F(f,{id:b,error:{code:-32000,message:"No target with given id found"}});return}if(typeof b==="number")F(f,{id:b,result:{sessionId:y.sessionId}});return}case"Target.detachFromTarget":{if(v(r.sessionId),typeof b==="number")F(f,{id:b,result:{}});return}case"Target.sendMessageToTarget":{let y=t.get(r.sessionId);if(y)y.handle.onMessageFromTools(r.message);if(typeof b==="number")F(f,{id:b,result:{}});return}case"Target.setRemoteLocations":case"Target.exposeDevToolsProtocol":case"Target.activateTarget":case"Target.closeTarget":if(typeof b==="number")F(f,{id:b,result:{}});return;case"Target.getBrowserContexts":{if(typeof b==="number")F(f,{id:b,result:{browserContextIds:["default"]}});return}}if(typeof b==="number")F(f,{id:b,error:{code:-32601,message:`Browser-level method '${o??"?"}' not implemented`}})}_.on("message",(T,f)=>{let b=f?new TextDecoder().decode(T):T.toString();if(S)console.error(`[browser] tools>> ${b.slice(0,240)}`);let o;try{o=JSON.parse(b)}catch{return}if(typeof o.sessionId==="string"){if(o.sessionId===$){let D={...o};return delete D.sessionId,E(D,o.sessionId)}let r=t.get(o.sessionId);if(!r){if(typeof o.id==="number")A({id:o.id,sessionId:o.sessionId,error:{code:-32000,message:`Session ${o.sessionId} not found`}});return}let y={...o};delete y.sessionId,r.handle.onMessageFromTools(JSON.stringify(y));return}E(o,void 0)}),_.on("close",()=>{clearInterval(p);for(let[,T]of t)try{T.handle.close()}catch{}t.clear()})}async function vi(_={}){let e=_.port??9222,S=_.host??"localhost",t=await pi();if(t.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 s=new Map,i=new WeakMap,C=new Map;for(let p of t)C.set(p,[]),i.set(p,new Set),p.wi.subscribe((F)=>{let{__selector:E,__argument:T}=F;if(!E||!T)return;if(E==="_rpc_reportConnectedApplicationList:"){let f=T.WIRApplicationDictionaryKey??{},b=Object.entries(f).map(([r,y])=>({appId:r,bundleId:y.WIRApplicationBundleIdentifierKey,name:y.WIRApplicationNameKey??y.WIRApplicationBundleIdentifierKey??r,isProxy:Boolean(y.WIRIsApplicationProxyKey)}));C.set(p,b);let o=i.get(p);for(let r of b){if(r.isProxy||o.has(r.appId))continue;o.add(r.appId),p.wi.send("_rpc_forwardGetListing:",{WIRApplicationIdentifierKey:r.appId})}}else if(E==="_rpc_applicationConnected:"){let f=T,b=C.get(p)??[];if(!b.find((o)=>o.appId===f.WIRApplicationIdentifierKey))b.push({appId:f.WIRApplicationIdentifierKey,bundleId:f.WIRApplicationBundleIdentifierKey,name:f.WIRApplicationNameKey??f.WIRApplicationBundleIdentifierKey,isProxy:Boolean(f.WIRIsApplicationProxyKey)}),C.set(p,b);if(!f.WIRIsApplicationProxyKey){let o=i.get(p);if(!o.has(f.WIRApplicationIdentifierKey))o.add(f.WIRApplicationIdentifierKey),p.wi.send("_rpc_forwardGetListing:",{WIRApplicationIdentifierKey:f.WIRApplicationIdentifierKey})}}else if(E==="_rpc_applicationDisconnected:"){let f=C.get(p)??[];C.set(p,f.filter((b)=>b.appId!==T.WIRApplicationIdentifierKey)),s.delete(`${p.id}:${T.WIRApplicationIdentifierKey}`)}else if(E==="_rpc_applicationSentListing:"){let f=T.WIRApplicationIdentifierKey,b=T.WIRListingKey??{},o=new Map;for(let[r,y]of Object.entries(b))o.set(r,{pageId:Number(y.WIRPageIdentifierKey??0),title:y.WIRTitleKey??"",url:y.WIRURLKey??"",type:y.WIRTypeKey??""});s.set(`${p.id}:${f}`,o)}}),p.wi.send("_rpc_reportIdentifier:",{}),p.wi.send("_rpc_getConnectedApplications:",{});let n=setInterval(()=>{for(let p of t){let F=C.get(p)??[];for(let E of F){if(E.isProxy)continue;p.wi.send("_rpc_forwardGetListing:",{WIRApplicationIdentifierKey:E.appId})}}},bi),$=new Map;function A(){let p=[];for(let F of t){let E=C.get(F)??[];for(let T of E){if(T.isProxy)continue;let f=s.get(`${F.id}:${T.appId}`);if(!f)continue;for(let b of f.values())p.push({targetId:`${F.id}:${T.appId}:${b.pageId}`,source:F,appId:T.appId,appName:T.name,bundleId:T.bundleId,pageId:b.pageId,title:b.title,url:b.url,type:b.type})}}return p}let B=crypto.randomUUID(),c=hS({brand:"",version:(p)=>({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://${p}/devtools/browser/${B}`}),listTargets:(p)=>A().map((F)=>NS({reqHost:p,id:F.targetId,description:`${F.source.label}${F.bundleId?` (${F.bundleId})`:""}`,title:F.title||F.appName,url:/^https?:/i.test(F.url)?F.url:"about:blank",type:RS(F.type)}))}),a=new lS.default({noServer:!0}),u=`/devtools/browser/${B}`;c.on("upgrade",(p,F,E)=>{let T=new URL(p.url??"/","http://placeholder");if(console.error(`# ws upgrade: ${T.pathname}`),T.pathname===u){a.handleUpgrade(p,F,E,(b)=>{Fi(b,{listEntries:()=>A().map((o)=>({targetId:o.targetId,type:RS(o.type),title:o.title||o.appName,url:o.url})),createPageSession:(o,r)=>{let y=A().find((D)=>D.targetId===o);if(!y)return null;return v(y,r)}})});return}if(!T.pathname.startsWith("/devtools/page/")){console.error(`# ws upgrade rejected: unknown path ${T.pathname}`),F.destroy();return}let f=decodeURIComponent(T.pathname.slice(15));a.handleUpgrade(p,F,E,(b)=>{O(b,f)})});function v(p,F){let E=crypto.randomUUID(),f=new de({readyState:1,send:(r)=>F(r)},p.source.wi,p.appId,p.pageId,E);gS(f),$.set(E,f);let b=!!process.env.INSPECT_WEBKIT_DEBUG,o=p.source.wi.subscribe((r)=>{if(r.__selector!=="_rpc_applicationSentData:")return;let y=r.__argument;if(!y)return;if(y.WIRDestinationKey&&y.WIRDestinationKey!==E)return;if(y.WIRApplicationIdentifierKey!==p.appId)return;if(y.WIRPageIdentifierKey!==void 0&&Number(y.WIRPageIdentifierKey)!==p.pageId)return;let D=y.WIRMessageDataKey??y.WIRSocketDataKey;if(!D)return;let d=typeof D==="string"?D:new TextDecoder().decode(D);if(b)console.error(`[cdp] target>> ${d.slice(0,240)}`);f.onMessageFromTarget(d)});return p.source.wi.forwardSocketSetup(p.appId,p.pageId,E),console.error(`# devtools attached: ${p.source.label} :: ${p.appName} :: ${p.title||p.url}`),{onMessageFromTools(r){if(b)console.error(`[cdp] tools>> ${r.slice(0,300)}`);f.onMessageFromTools(r)},close(){o();try{f.wi.forwardDidClose(f.appId,f.pageId,f.senderKey)}catch{}$.delete(f.senderKey)}}}function O(p,F){let E=A().find((f)=>f.targetId===F);if(!E){console.error(`# ws closed: unknown target ${F} (known: ${A().map((f)=>f.targetId).join(", ")||"none"})`),p.close(1011,`unknown target ${F}`);return}let T=v(E,(f)=>{if(p.readyState===1)p.send(f)});p.on("message",(f,b)=>{let o=b?new TextDecoder().decode(f):f.toString();T.onMessageFromTools(o)}),p.on("close",()=>T.close())}return await VS(c,S,e),mS({brand:"safari",host:S,port:e}),{stop(){clearInterval(n),a.close(),c.close();for(let p of t)try{p.wi.close(),p.lockdown?.close()}catch{}},getTargets(){return A()}}}async function pi(){let[_,e]=await Promise.all([ui(),li()]);return[..._,...e]}async function ui(){let _=[];try{_=await FS()}catch(S){return console.error(`warn: usbmux: ${S.message}`),[]}return(await Promise.all(_.map(Oi))).filter((S)=>S!==null)}async function Oi(_){try{let e=await bS(_.Properties.SerialNumber),S=await x_.open(_,e);await S.startSession();let t=await S.startService("com.apple.webinspector"),{socket:s,stream:i}=await S.connectService(t),C=new V_(s,i);return await C.reportIdentifier(),{kind:"device",id:`device:${_.Properties.SerialNumber}`,label:`device:${_.Properties.SerialNumber.slice(0,8)}`,wi:C,lockdown:S}}catch(e){return console.error(`warn: device ${_.Properties.SerialNumber}: ${e.message}`),null}}async function li(){let _=[];try{_=await pS()}catch(S){return console.error(`warn: simulator discovery: ${S.message}`),[]}return(await Promise.all(_.map(di))).filter((S)=>S!==null)}async function di(_){try{let{socket:e,stream:S}=await uS(_.socketPath),t=new V_(e,S);return await t.reportIdentifier(),{kind:"simulator",id:`sim:${_.pid}`,label:`sim:${_.pid}`,wi:t}}catch(e){return console.error(`warn: simulator ${_.socketPath}: ${e.message}`),null}}function RS(_){switch(_){case"WIRTypeServiceWorker":return"service_worker";case"WIRTypeWorker":case"WIRTypeJavaScript":return"worker";default:return"page"}}class LS{url;ws;handlers=new Set;openPromise;constructor(_){this.url=_,this.ws=new cS(_),this.ws.binaryType="nodebuffer",this.openPromise=new Promise((e,S)=>{this.ws.once("open",()=>e()),this.ws.once("error",(t)=>S(t))}),this.ws.on("message",(e,S)=>{let t=S?new TextDecoder().decode(e):e.toString();for(let s of this.handlers)s(t)})}ready(){return this.openPromise}onFrame(_){return this.handlers.add(_),()=>this.handlers.delete(_)}forwardSocketData(_,e,S,t){if(this.ws.readyState!==cS.OPEN)return;this.ws.send(new TextDecoder().decode(t))}forwardDidClose(_,e,S){}close(){try{this.ws.close()}catch{}}}async function wi(_){let e=_.port??9223,S=_.host??"localhost",{upstreams:t}=_,s=hS({brand:"bun",version:{Browser:"Bun/inspect-webkit","Protocol-Version":"1.3","User-Agent":"Bun (via inspect-webkit)","WebKit-Version":"605.1.15"},listTargets:(n)=>t.map(($)=>NS({reqHost:n,id:encodeURIComponent($.url),description:$.label??"bun",title:$.label??$.url,url:$.url,type:"node"}))}),i=new lS.default({noServer:!0});s.on("upgrade",(n,$,A)=>{let B=new URL(n.url??"/","http://placeholder");if(!B.pathname.startsWith("/devtools/page/")){$.destroy();return}let c=decodeURIComponent(B.pathname.slice(15)),a=t.find((u)=>u.url===c);if(!a){$.destroy();return}i.handleUpgrade(n,$,A,(u)=>{C(u,a).catch((v)=>{console.error(`# bun attach failed: ${v.message}`);try{u.close(1011,v.message)}catch{}})})});async function C(n,$){let A=!!process.env.INSPECT_WEBKIT_DEBUG,B=new LS($.url);await B.ready();let c=crypto.randomUUID(),a=new de(n,B,"bun",0,c);gS(a);let u=B.onFrame((v)=>{if(A)console.error(`[bun] target>> ${v.slice(0,240)}`);a.onMessageFromTarget(v)});n.on("message",(v,O)=>{let p=O?new TextDecoder().decode(v):v.toString();if(A)console.error(`[bun] tools>> ${p.slice(0,300)}`);a.onMessageFromTools(p)}),n.on("close",()=>{u(),B.close()}),console.error(`# devtools attached: ${$.label??$.url}`)}return await VS(s,S,e),mS({brand:"bun",host:S,port:e}),{stop(){i.close(),s.close()},getTargets(){return t.slice()}}}async function WS(){return FS()}async function gi(){let[_,e]=await Promise.all([Hi(),Ni()]);return[..._.flat(),...e.flat()]}async function Hi(){let _=await WS();return Promise.all(_.map(hi))}async function Ni(){let _=await pS();return Promise.all(_.map(Vi))}async function hi(_){let e=null;try{return e=await mi(_),await PS(e.client,{source:"device",udid:_.Properties.SerialNumber,deviceID:_.DeviceID})}catch(S){return console.error(`warn: ${_.Properties.SerialNumber}: ${S.message}`),[]}finally{e?.client.close(),e?.lockdown.close()}}async function Vi(_){let e=null;try{let{socket:S,stream:t}=await uS(_.socketPath);return e=new V_(S,t),await e.reportIdentifier(),await PS(e,{source:"simulator",udid:`sim:${_.pid}`})}catch(S){return console.error(`warn: simulator (${_.socketPath}): ${S.message}`),[]}finally{e?.close()}}async function mi(_){let e=await bS(_.Properties.SerialNumber),S=await x_.open(_,e);await S.startSession();let t=await S.startService("com.apple.webinspector"),{socket:s,stream:i}=await S.connectService(t),C=new V_(s,i);return await C.reportIdentifier(),{client:C,lockdown:S}}async function PS(_,e){let S=(await _.listApplications()).filter((i)=>!i.isProxy),t=await Promise.all(S.map((i)=>_.getListing(i.appId))),s=[];for(let i=0;i<S.length;i++){let C=S[i];for(let n of t[i])s.push({...e,appId:C.appId,appName:C.name??C.bundleId??C.appId,bundleId:C.bundleId,pageId:n.pageId,title:n.title,url:n.url,type:n.type})}return s}var Ss,ts,AS,ss,is,rs,$s,i_=(_,e,S)=>{var t=_!=null&&typeof _==="object";if(t){var s=e?rs??=new WeakMap:$s??=new WeakMap,i=s.get(_);if(i)return i}S=_!=null?Ss(ts(_)):{};let C=e||!_||!_.__esModule?AS(S,"default",{value:_,enumerable:!0}):S;for(let n of ss(_))if(!is.call(C,n))AS(C,n,{get:Cs.bind(_,n),enumerable:!0});if(t)s.set(_,C);return C},j=(_,e)=>()=>(e||_((e={exports:{}}).exports,e),e.exports),K,C_,X_,As,N_,h_,BS,DS,os,be,ve,ns,TS,ys,as=`<?xml version="1.0" encoding="UTF-8"?>
14
14
  <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
15
15
  <plist version="1.0">
16
- `,$s=`
16
+ `,cs=`
17
17
  </plist>
18
- `,as=1,cs=8,Rs="/var/run/usbmuxd",At=62078,J=(..._)=>{if(process.env.INSPECT_WEBKIT_DEBUG)console.error("[lockdown]",..._)},QC,YC,_r,er,tr,Sr,bs,ut,nt,Vs,ms,Ls,Ws,Ps,Ms,Us,zs=(_,e)=>!!_&&!!e&&_.startLine===e.startLine&&_.endLine===e.endLine&&_.startColumn===e.startColumn&&_.endColumn===e.endColumn,Js=(_)=>_&&{name:_.name,value:_.value,text:_.text,implicit:_.implicit,parsedOk:_.parsedOk!==!1,important:!!_.priority,disabled:_.status==="disabled",range:_.range},o_=(_)=>_&&{styleSheetId:_.styleId?.styleSheetId,cssText:_.cssText,range:_.range,shorthandEntries:_.shorthandEntries??[],cssProperties:Array.isArray(_.cssProperties)?_.cssProperties.map(Js):[]},Zs,Qs=(_)=>_&&{text:_.text,selectors:Array.isArray(_.selectors)?_.selectors.map((e)=>({text:e.text,range:e.range??_.range})):[]},Oe=(_)=>Array.isArray(_)?_.map((e)=>({matchingSelectors:e.matchingSelectors,rule:fe(e.rule)})):[],Ys=(_)=>Array.isArray(_)?_.map((e)=>({pseudoType:e.pseudoId,matches:Oe(e.matches)})):[],_i=(_)=>Array.isArray(_)?_.map((e)=>({inlineStyle:o_(e.inlineStyle),matchedCSSRules:Oe(e.matchedCSSRules)})):[],ti,si=`
18
+ `,fs=1,Es=8,Fs="/var/run/usbmuxd",yS=62078,J=(..._)=>{if(process.env.INSPECT_WEBKIT_DEBUG)console.error("[lockdown]",..._)},$r,Ar,or,nr,yr,ar,ds,lS,cS,Us,Gs,Is,qs,Xs,ks,Ks,_i=(_,e)=>!!_&&!!e&&_.startLine===e.startLine&&_.endLine===e.endLine&&_.startColumn===e.startColumn&&_.endColumn===e.endColumn,Si=(_)=>_&&{name:_.name,value:_.value,text:_.text,implicit:_.implicit,parsedOk:_.parsedOk!==!1,important:!!_.priority,disabled:_.status==="disabled",range:_.range},o_=(_)=>_&&{styleSheetId:_.styleId?.styleSheetId,cssText:_.cssText,range:_.range,shorthandEntries:_.shorthandEntries??[],cssProperties:Array.isArray(_.cssProperties)?_.cssProperties.map(Si):[]},ti,si=(_)=>_&&{text:_.text,selectors:Array.isArray(_.selectors)?_.selectors.map((e)=>({text:e.text,range:e.range??_.range})):[]},we=(_)=>Array.isArray(_)?_.map((e)=>({matchingSelectors:e.matchingSelectors,rule:Fe(e.rule)})):[],ii=(_)=>Array.isArray(_)?_.map((e)=>({pseudoType:e.pseudoId,matches:we(e.matches)})):[],Ci=(_)=>Array.isArray(_)?_.map((e)=>({inlineStyle:o_(e.inlineStyle),matchedCSSRules:we(e.matchedCSSRules)})):[],$i,oi=`
19
19
  function __sd_simulate(p){
20
20
  var el = document.elementFromPoint(p.x, p.y);
21
21
  if (!el) return false;
@@ -30,37 +30,37 @@ function __sd_simulate(p){
30
30
  });
31
31
  el.dispatchEvent(ev);
32
32
  return true;
33
- }`,ri=65536,oi,ni,ai,Bi=1500;var Wt=re(()=>{JS=Object.create,ZS=Object.getPrototypeOf,Ct=Object.defineProperty,QS=Object.getOwnPropertyNames,YS=Object.prototype.hasOwnProperty;X=jS(import.meta.url),i_=j((_,e)=>{var t=["nodebuffer","arraybuffer","fragments"],S=typeof Blob<"u";if(S)t.push("blob");e.exports={BINARY_TYPES:t,CLOSE_TIMEOUT:30000,EMPTY_BUFFER:Buffer.alloc(0),GUID:"258EAFA5-E914-47DA-95CA-C5AB0DC85B11",hasBlob:S,kForOnEventAttribute:Symbol("kIsForOnEventAttribute"),kListener:Symbol("kListener"),kStatusCode:Symbol("status-code"),kWebSocket:Symbol("websocket"),NOOP:()=>{}}}),q_=j((_,e)=>{var{EMPTY_BUFFER:t}=i_(),S=Buffer[Symbol.species];function i(n,c){if(n.length===0)return t;if(n.length===1)return n[0];let o=Buffer.allocUnsafe(c),B=0;for(let p=0;p<n.length;p++){let u=n[p];o.set(u,B),B+=u.length}if(B<c)return new S(o.buffer,o.byteOffset,B);return o}function s(n,c,o,B,p){for(let u=0;u<p;u++)o[B+u]=n[u]^c[u&3]}function C(n,c){for(let o=0;o<n.length;o++)n[o]^=c[o&3]}function A(n){if(n.length===n.buffer.byteLength)return n.buffer;return n.buffer.slice(n.byteOffset,n.byteOffset+n.length)}function $(n){if($.readOnly=!0,Buffer.isBuffer(n))return n;let c;if(n instanceof ArrayBuffer)c=new S(n);else if(ArrayBuffer.isView(n))c=new S(n.buffer,n.byteOffset,n.byteLength);else c=Buffer.from(n),$.readOnly=!1;return c}if(e.exports={concat:i,mask:s,toArrayBuffer:A,toBuffer:$,unmask:C},!process.env.WS_NO_BUFFER_UTIL)try{let n=(()=>{throw Error("Cannot require module bufferutil")})();e.exports.mask=function(c,o,B,p,u){if(u<48)s(c,o,B,p,u);else n.mask(c,o,B,p,u)},e.exports.unmask=function(c,o){if(c.length<32)C(c,o);else n.unmask(c,o)}}catch(n){}}),Ss=j((_,e)=>{var t=Symbol("kDone"),S=Symbol("kRun");class i{constructor(s){this[t]=()=>{this.pending--,this[S]()},this.concurrency=s||1/0,this.jobs=[],this.pending=0}add(s){this.jobs.push(s),this[S]()}[S](){if(this.pending===this.concurrency)return;if(this.jobs.length){let s=this.jobs.shift();this.pending++,s(this[t])}}}e.exports=i}),w_=j((_,e)=>{var t=X("zlib"),S=q_(),i=Ss(),{kStatusCode:s}=i_(),C=Buffer[Symbol.species],A=Buffer.from([0,0,255,255]),$=Symbol("permessage-deflate"),n=Symbol("total-length"),c=Symbol("callback"),o=Symbol("buffers"),B=Symbol("error"),p;class u{constructor(v){if(this._options=v||{},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,!p){let T=this._options.concurrencyLimit!==void 0?this._options.concurrencyLimit:10;p=new i(T)}}static get extensionName(){return"permessage-deflate"}offer(){let v={};if(this._options.serverNoContextTakeover)v.server_no_context_takeover=!0;if(this._options.clientNoContextTakeover)v.client_no_context_takeover=!0;if(this._options.serverMaxWindowBits)v.server_max_window_bits=this._options.serverMaxWindowBits;if(this._options.clientMaxWindowBits)v.client_max_window_bits=this._options.clientMaxWindowBits;else if(this._options.clientMaxWindowBits==null)v.client_max_window_bits=!0;return v}accept(v){return v=this.normalizeParams(v),this.params=this._isServer?this.acceptAsServer(v):this.acceptAsClient(v),this.params}cleanup(){if(this._inflate)this._inflate.close(),this._inflate=null;if(this._deflate){let v=this._deflate[c];if(this._deflate.close(),this._deflate=null,v)v(Error("The deflate stream was closed while data was being processed"))}}acceptAsServer(v){let T=this._options,D=v.find((E)=>{if(T.serverNoContextTakeover===!1&&E.server_no_context_takeover||E.server_max_window_bits&&(T.serverMaxWindowBits===!1||typeof T.serverMaxWindowBits==="number"&&T.serverMaxWindowBits>E.server_max_window_bits)||typeof T.clientMaxWindowBits==="number"&&!E.client_max_window_bits)return!1;return!0});if(!D)throw Error("None of the extension offers can be accepted");if(T.serverNoContextTakeover)D.server_no_context_takeover=!0;if(T.clientNoContextTakeover)D.client_no_context_takeover=!0;if(typeof T.serverMaxWindowBits==="number")D.server_max_window_bits=T.serverMaxWindowBits;if(typeof T.clientMaxWindowBits==="number")D.client_max_window_bits=T.clientMaxWindowBits;else if(D.client_max_window_bits===!0||T.clientMaxWindowBits===!1)delete D.client_max_window_bits;return D}acceptAsClient(v){let T=v[0];if(this._options.clientNoContextTakeover===!1&&T.client_no_context_takeover)throw Error('Unexpected parameter "client_no_context_takeover"');if(!T.client_max_window_bits){if(typeof this._options.clientMaxWindowBits==="number")T.client_max_window_bits=this._options.clientMaxWindowBits}else if(this._options.clientMaxWindowBits===!1||typeof this._options.clientMaxWindowBits==="number"&&T.client_max_window_bits>this._options.clientMaxWindowBits)throw Error('Unexpected or invalid parameter "client_max_window_bits"');return T}normalizeParams(v){return v.forEach((T)=>{Object.keys(T).forEach((D)=>{let E=T[D];if(E.length>1)throw Error(`Parameter "${D}" must have only a single value`);if(E=E[0],D==="client_max_window_bits"){if(E!==!0){let y=+E;if(!Number.isInteger(y)||y<8||y>15)throw TypeError(`Invalid value for parameter "${D}": ${E}`);E=y}else if(!this._isServer)throw TypeError(`Invalid value for parameter "${D}": ${E}`)}else if(D==="server_max_window_bits"){let y=+E;if(!Number.isInteger(y)||y<8||y>15)throw TypeError(`Invalid value for parameter "${D}": ${E}`);E=y}else if(D==="client_no_context_takeover"||D==="server_no_context_takeover"){if(E!==!0)throw TypeError(`Invalid value for parameter "${D}": ${E}`)}else throw Error(`Unknown parameter "${D}"`);T[D]=E})}),v}decompress(v,T,D){p.add((E)=>{this._decompress(v,T,(y,r)=>{E(),D(y,r)})})}compress(v,T,D){p.add((E)=>{this._compress(v,T,(y,r)=>{E(),D(y,r)})})}_decompress(v,T,D){let E=this._isServer?"client":"server";if(!this._inflate){let y=`${E}_max_window_bits`,r=typeof this.params[y]!=="number"?t.Z_DEFAULT_WINDOWBITS:this.params[y];this._inflate=t.createInflateRaw({...this._options.zlibInflateOptions,windowBits:r}),this._inflate[$]=this,this._inflate[n]=0,this._inflate[o]=[],this._inflate.on("error",b),this._inflate.on("data",F)}if(this._inflate[c]=D,this._inflate.write(v),T)this._inflate.write(A);this._inflate.flush(()=>{let y=this._inflate[B];if(y){this._inflate.close(),this._inflate=null,D(y);return}let r=S.concat(this._inflate[o],this._inflate[n]);if(this._inflate._readableState.endEmitted)this._inflate.close(),this._inflate=null;else if(this._inflate[n]=0,this._inflate[o]=[],T&&this.params[`${E}_no_context_takeover`])this._inflate.reset();D(null,r)})}_compress(v,T,D){let E=this._isServer?"server":"client";if(!this._deflate){let y=`${E}_max_window_bits`,r=typeof this.params[y]!=="number"?t.Z_DEFAULT_WINDOWBITS:this.params[y];this._deflate=t.createDeflateRaw({...this._options.zlibDeflateOptions,windowBits:r}),this._deflate[n]=0,this._deflate[o]=[],this._deflate.on("data",l)}this._deflate[c]=D,this._deflate.write(v),this._deflate.flush(t.Z_SYNC_FLUSH,()=>{if(!this._deflate)return;let y=S.concat(this._deflate[o],this._deflate[n]);if(T)y=new C(y.buffer,y.byteOffset,y.length-4);if(this._deflate[c]=null,this._deflate[n]=0,this._deflate[o]=[],T&&this.params[`${E}_no_context_takeover`])this._deflate.reset();D(null,y)})}}e.exports=u;function l(v){this[o].push(v),this[n]+=v.length}function F(v){if(this[n]+=v.length,this[$]._maxPayload<1||this[n]<=this[$]._maxPayload){this[o].push(v);return}this[B]=RangeError("Max payload size exceeded"),this[B].code="WS_ERR_UNSUPPORTED_MESSAGE_LENGTH",this[B][s]=1009,this.removeListener("data",F),this.reset()}function b(v){if(this[$]._inflate=null,this[B]){this[c](this[B]);return}v[s]=1007,this[c](v)}}),g_=j((_,e)=>{var{isUtf8:t}=X("buffer"),{hasBlob:S}=i_(),i=[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 s($){return $>=1000&&$<=1014&&$!==1004&&$!==1005&&$!==1006||$>=3000&&$<=4999}function C($){let n=$.length,c=0;while(c<n)if(($[c]&128)===0)c++;else if(($[c]&224)===192){if(c+1===n||($[c+1]&192)!==128||($[c]&254)===192)return!1;c+=2}else if(($[c]&240)===224){if(c+2>=n||($[c+1]&192)!==128||($[c+2]&192)!==128||$[c]===224&&($[c+1]&224)===128||$[c]===237&&($[c+1]&224)===160)return!1;c+=3}else if(($[c]&248)===240){if(c+3>=n||($[c+1]&192)!==128||($[c+2]&192)!==128||($[c+3]&192)!==128||$[c]===240&&($[c+1]&240)===128||$[c]===244&&$[c+1]>143||$[c]>244)return!1;c+=4}else return!1;return!0}function A($){return S&&typeof $==="object"&&typeof $.arrayBuffer==="function"&&typeof $.type==="string"&&typeof $.stream==="function"&&($[Symbol.toStringTag]==="Blob"||$[Symbol.toStringTag]==="File")}if(e.exports={isBlob:A,isValidStatusCode:s,isValidUTF8:C,tokenChars:i},t)e.exports.isValidUTF8=function($){return $.length<24?C($):t($)};else if(!process.env.WS_NO_UTF_8_VALIDATE)try{let $=(()=>{throw Error("Cannot require module utf-8-validate")})();e.exports.isValidUTF8=function(n){return n.length<32?C(n):$(n)}}catch($){}}),at=j((_,e)=>{var{Writable:t}=X("stream"),S=w_(),{BINARY_TYPES:i,EMPTY_BUFFER:s,kStatusCode:C,kWebSocket:A}=i_(),{concat:$,toArrayBuffer:n,unmask:c}=q_(),{isValidStatusCode:o,isValidUTF8:B}=g_(),p=Buffer[Symbol.species],u=0,l=1,F=2,b=3,v=4,T=5,D=6;class E extends t{constructor(y={}){super();this._allowSynchronousEvents=y.allowSynchronousEvents!==void 0?y.allowSynchronousEvents:!0,this._binaryType=y.binaryType||i[0],this._extensions=y.extensions||{},this._isServer=!!y.isServer,this._maxPayload=y.maxPayload|0,this._skipUTF8Validation=!!y.skipUTF8Validation,this[A]=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=u}_write(y,r,a){if(this._opcode===8&&this._state==u)return a();this._bufferedBytes+=y.length,this._buffers.push(y),this.startLoop(a)}consume(y){if(this._bufferedBytes-=y,y===this._buffers[0].length)return this._buffers.shift();if(y<this._buffers[0].length){let a=this._buffers[0];return this._buffers[0]=new p(a.buffer,a.byteOffset+y,a.length-y),new p(a.buffer,a.byteOffset,y)}let r=Buffer.allocUnsafe(y);do{let a=this._buffers[0],f=r.length-y;if(y>=a.length)r.set(this._buffers.shift(),f);else r.set(new Uint8Array(a.buffer,a.byteOffset,y),f),this._buffers[0]=new p(a.buffer,a.byteOffset+y,a.length-y);y-=a.length}while(y>0);return r}startLoop(y){this._loop=!0;do switch(this._state){case u:this.getInfo(y);break;case l:this.getPayloadLength16(y);break;case F:this.getPayloadLength64(y);break;case b:this.getMask();break;case v:this.getData(y);break;case T:case D:this._loop=!1;return}while(this._loop);if(!this._errored)y()}getInfo(y){if(this._bufferedBytes<2){this._loop=!1;return}let r=this.consume(2);if((r[0]&48)!==0){let f=this.createError(RangeError,"RSV2 and RSV3 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_2_3");y(f);return}let a=(r[0]&64)===64;if(a&&!this._extensions[S.extensionName]){let f=this.createError(RangeError,"RSV1 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_1");y(f);return}if(this._fin=(r[0]&128)===128,this._opcode=r[0]&15,this._payloadLength=r[1]&127,this._opcode===0){if(a){let f=this.createError(RangeError,"RSV1 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_1");y(f);return}if(!this._fragmented){let f=this.createError(RangeError,"invalid opcode 0",!0,1002,"WS_ERR_INVALID_OPCODE");y(f);return}this._opcode=this._fragmented}else if(this._opcode===1||this._opcode===2){if(this._fragmented){let f=this.createError(RangeError,`invalid opcode ${this._opcode}`,!0,1002,"WS_ERR_INVALID_OPCODE");y(f);return}this._compressed=a}else if(this._opcode>7&&this._opcode<11){if(!this._fin){let f=this.createError(RangeError,"FIN must be set",!0,1002,"WS_ERR_EXPECTED_FIN");y(f);return}if(a){let f=this.createError(RangeError,"RSV1 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_1");y(f);return}if(this._payloadLength>125||this._opcode===8&&this._payloadLength===1){let f=this.createError(RangeError,`invalid payload length ${this._payloadLength}`,!0,1002,"WS_ERR_INVALID_CONTROL_PAYLOAD_LENGTH");y(f);return}}else{let f=this.createError(RangeError,`invalid opcode ${this._opcode}`,!0,1002,"WS_ERR_INVALID_OPCODE");y(f);return}if(!this._fin&&!this._fragmented)this._fragmented=this._opcode;if(this._masked=(r[1]&128)===128,this._isServer){if(!this._masked){let f=this.createError(RangeError,"MASK must be set",!0,1002,"WS_ERR_EXPECTED_MASK");y(f);return}}else if(this._masked){let f=this.createError(RangeError,"MASK must be clear",!0,1002,"WS_ERR_UNEXPECTED_MASK");y(f);return}if(this._payloadLength===126)this._state=l;else if(this._payloadLength===127)this._state=F;else this.haveLength(y)}getPayloadLength16(y){if(this._bufferedBytes<2){this._loop=!1;return}this._payloadLength=this.consume(2).readUInt16BE(0),this.haveLength(y)}getPayloadLength64(y){if(this._bufferedBytes<8){this._loop=!1;return}let r=this.consume(8),a=r.readUInt32BE(0);if(a>Math.pow(2,21)-1){let f=this.createError(RangeError,"Unsupported WebSocket frame: payload length > 2^53 - 1",!1,1009,"WS_ERR_UNSUPPORTED_DATA_PAYLOAD_LENGTH");y(f);return}this._payloadLength=a*Math.pow(2,32)+r.readUInt32BE(4),this.haveLength(y)}haveLength(y){if(this._payloadLength&&this._opcode<8){if(this._totalPayloadLength+=this._payloadLength,this._totalPayloadLength>this._maxPayload&&this._maxPayload>0){let r=this.createError(RangeError,"Max payload size exceeded",!1,1009,"WS_ERR_UNSUPPORTED_MESSAGE_LENGTH");y(r);return}}if(this._masked)this._state=b;else this._state=v}getMask(){if(this._bufferedBytes<4){this._loop=!1;return}this._mask=this.consume(4),this._state=v}getData(y){let r=s;if(this._payloadLength){if(this._bufferedBytes<this._payloadLength){this._loop=!1;return}if(r=this.consume(this._payloadLength),this._masked&&(this._mask[0]|this._mask[1]|this._mask[2]|this._mask[3])!==0)c(r,this._mask)}if(this._opcode>7){this.controlMessage(r,y);return}if(this._compressed){this._state=T,this.decompress(r,y);return}if(r.length)this._messageLength=this._totalPayloadLength,this._fragments.push(r);this.dataMessage(y)}decompress(y,r){this._extensions[S.extensionName].decompress(y,this._fin,(f,d)=>{if(f)return r(f);if(d.length){if(this._messageLength+=d.length,this._messageLength>this._maxPayload&&this._maxPayload>0){let w=this.createError(RangeError,"Max payload size exceeded",!1,1009,"WS_ERR_UNSUPPORTED_MESSAGE_LENGTH");r(w);return}this._fragments.push(d)}if(this.dataMessage(r),this._state===u)this.startLoop(r)})}dataMessage(y){if(!this._fin){this._state=u;return}let r=this._messageLength,a=this._fragments;if(this._totalPayloadLength=0,this._messageLength=0,this._fragmented=0,this._fragments=[],this._opcode===2){let f;if(this._binaryType==="nodebuffer")f=$(a,r);else if(this._binaryType==="arraybuffer")f=n($(a,r));else if(this._binaryType==="blob")f=new Blob(a);else f=a;if(this._allowSynchronousEvents)this.emit("message",f,!0),this._state=u;else this._state=D,setImmediate(()=>{this.emit("message",f,!0),this._state=u,this.startLoop(y)})}else{let f=$(a,r);if(!this._skipUTF8Validation&&!B(f)){let d=this.createError(Error,"invalid UTF-8 sequence",!0,1007,"WS_ERR_INVALID_UTF8");y(d);return}if(this._state===T||this._allowSynchronousEvents)this.emit("message",f,!1),this._state=u;else this._state=D,setImmediate(()=>{this.emit("message",f,!1),this._state=u,this.startLoop(y)})}}controlMessage(y,r){if(this._opcode===8){if(y.length===0)this._loop=!1,this.emit("conclude",1005,s),this.end();else{let a=y.readUInt16BE(0);if(!o(a)){let d=this.createError(RangeError,`invalid status code ${a}`,!0,1002,"WS_ERR_INVALID_CLOSE_CODE");r(d);return}let f=new p(y.buffer,y.byteOffset+2,y.length-2);if(!this._skipUTF8Validation&&!B(f)){let d=this.createError(Error,"invalid UTF-8 sequence",!0,1007,"WS_ERR_INVALID_UTF8");r(d);return}this._loop=!1,this.emit("conclude",a,f),this.end()}this._state=u;return}if(this._allowSynchronousEvents)this.emit(this._opcode===9?"ping":"pong",y),this._state=u;else this._state=D,setImmediate(()=>{this.emit(this._opcode===9?"ping":"pong",y),this._state=u,this.startLoop(r)})}createError(y,r,a,f,d){this._loop=!1,this._errored=!0;let w=new y(a?`Invalid WebSocket frame: ${r}`:r);return Error.captureStackTrace(w,this.createError),w.code=d,w[C]=f,w}}e.exports=E}),ct=j((_,e)=>{var{Duplex:t}=X("stream"),{randomFillSync:S}=X("crypto"),i=w_(),{EMPTY_BUFFER:s,kWebSocket:C,NOOP:A}=i_(),{isBlob:$,isValidStatusCode:n}=g_(),{mask:c,toBuffer:o}=q_(),B=Symbol("kByteLength"),p=Buffer.alloc(4),u=8192,l,F=u,b=0,v=1,T=2;class D{constructor(r,a,f){if(this._extensions=a||{},f)this._generateMask=f,this._maskBuffer=Buffer.alloc(4);this._socket=r,this._firstFragment=!0,this._compress=!1,this._bufferedBytes=0,this._queue=[],this._state=b,this.onerror=A,this[C]=void 0}static frame(r,a){let f,d=!1,w=2,V=!1;if(a.mask){if(f=a.maskBuffer||p,a.generateMask)a.generateMask(f);else{if(F===u){if(l===void 0)l=Buffer.alloc(u);S(l,0,u),F=0}f[0]=l[F++],f[1]=l[F++],f[2]=l[F++],f[3]=l[F++]}V=(f[0]|f[1]|f[2]|f[3])===0,w=6}let m;if(typeof r==="string")if((!a.mask||V)&&a[B]!==void 0)m=a[B];else r=Buffer.from(r),m=r.length;else m=r.length,d=a.mask&&a.readOnly&&!V;let G=m;if(m>=65536)w+=8,G=127;else if(m>125)w+=2,G=126;let L=Buffer.allocUnsafe(d?m+w:w);if(L[0]=a.fin?a.opcode|128:a.opcode,a.rsv1)L[0]|=64;if(L[1]=G,G===126)L.writeUInt16BE(m,2);else if(G===127)L[2]=L[3]=0,L.writeUIntBE(m,4,6);if(!a.mask)return[L,r];if(L[1]|=128,L[w-4]=f[0],L[w-3]=f[1],L[w-2]=f[2],L[w-1]=f[3],V)return[L,r];if(d)return c(r,f,L,w,m),[L];return c(r,f,r,0,m),[L,r]}close(r,a,f,d){let w;if(r===void 0)w=s;else if(typeof r!=="number"||!n(r))throw TypeError("First argument must be a valid error code number");else if(a===void 0||!a.length)w=Buffer.allocUnsafe(2),w.writeUInt16BE(r,0);else{let m=Buffer.byteLength(a);if(m>123)throw RangeError("The message must not be greater than 123 bytes");if(w=Buffer.allocUnsafe(2+m),w.writeUInt16BE(r,0),typeof a==="string")w.write(a,2);else w.set(a,2)}let V={[B]:w.length,fin:!0,generateMask:this._generateMask,mask:f,maskBuffer:this._maskBuffer,opcode:8,readOnly:!1,rsv1:!1};if(this._state!==b)this.enqueue([this.dispatch,w,!1,V,d]);else this.sendFrame(D.frame(w,V),d)}ping(r,a,f){let d,w;if(typeof r==="string")d=Buffer.byteLength(r),w=!1;else if($(r))d=r.size,w=!1;else r=o(r),d=r.length,w=o.readOnly;if(d>125)throw RangeError("The data size must not be greater than 125 bytes");let V={[B]:d,fin:!0,generateMask:this._generateMask,mask:a,maskBuffer:this._maskBuffer,opcode:9,readOnly:w,rsv1:!1};if($(r))if(this._state!==b)this.enqueue([this.getBlobData,r,!1,V,f]);else this.getBlobData(r,!1,V,f);else if(this._state!==b)this.enqueue([this.dispatch,r,!1,V,f]);else this.sendFrame(D.frame(r,V),f)}pong(r,a,f){let d,w;if(typeof r==="string")d=Buffer.byteLength(r),w=!1;else if($(r))d=r.size,w=!1;else r=o(r),d=r.length,w=o.readOnly;if(d>125)throw RangeError("The data size must not be greater than 125 bytes");let V={[B]:d,fin:!0,generateMask:this._generateMask,mask:a,maskBuffer:this._maskBuffer,opcode:10,readOnly:w,rsv1:!1};if($(r))if(this._state!==b)this.enqueue([this.getBlobData,r,!1,V,f]);else this.getBlobData(r,!1,V,f);else if(this._state!==b)this.enqueue([this.dispatch,r,!1,V,f]);else this.sendFrame(D.frame(r,V),f)}send(r,a,f){let d=this._extensions[i.extensionName],w=a.binary?2:1,V=a.compress,m,G;if(typeof r==="string")m=Buffer.byteLength(r),G=!1;else if($(r))m=r.size,G=!1;else r=o(r),m=r.length,G=o.readOnly;if(this._firstFragment){if(this._firstFragment=!1,V&&d&&d.params[d._isServer?"server_no_context_takeover":"client_no_context_takeover"])V=m>=d._threshold;this._compress=V}else V=!1,w=0;if(a.fin)this._firstFragment=!0;let L={[B]:m,fin:a.fin,generateMask:this._generateMask,mask:a.mask,maskBuffer:this._maskBuffer,opcode:w,readOnly:G,rsv1:V};if($(r))if(this._state!==b)this.enqueue([this.getBlobData,r,this._compress,L,f]);else this.getBlobData(r,this._compress,L,f);else if(this._state!==b)this.enqueue([this.dispatch,r,this._compress,L,f]);else this.dispatch(r,this._compress,L,f)}getBlobData(r,a,f,d){this._bufferedBytes+=f[B],this._state=T,r.arrayBuffer().then((w)=>{if(this._socket.destroyed){let m=Error("The socket was closed while the blob was being read");process.nextTick(E,this,m,d);return}this._bufferedBytes-=f[B];let V=o(w);if(!a)this._state=b,this.sendFrame(D.frame(V,f),d),this.dequeue();else this.dispatch(V,a,f,d)}).catch((w)=>{process.nextTick(y,this,w,d)})}dispatch(r,a,f,d){if(!a){this.sendFrame(D.frame(r,f),d);return}let w=this._extensions[i.extensionName];this._bufferedBytes+=f[B],this._state=v,w.compress(r,f.fin,(V,m)=>{if(this._socket.destroyed){let G=Error("The socket was closed while data was being compressed");E(this,G,d);return}this._bufferedBytes-=f[B],this._state=b,f.readOnly=!1,this.sendFrame(D.frame(m,f),d),this.dequeue()})}dequeue(){while(this._state===b&&this._queue.length){let r=this._queue.shift();this._bufferedBytes-=r[3][B],Reflect.apply(r[0],this,r.slice(1))}}enqueue(r){this._bufferedBytes+=r[3][B],this._queue.push(r)}sendFrame(r,a){if(r.length===2)this._socket.cork(),this._socket.write(r[0]),this._socket.write(r[1],a),this._socket.uncork();else this._socket.write(r[0],a)}}e.exports=D;function E(r,a,f){if(typeof f==="function")f(a);for(let d=0;d<r._queue.length;d++){let w=r._queue[d],V=w[w.length-1];if(typeof V==="function")V(a)}}function y(r,a,f){E(r,a,f),r.onerror(a)}}),ss=j((_,e)=>{var{kForOnEventAttribute:t,kListener:S}=i_(),i=Symbol("kCode"),s=Symbol("kData"),C=Symbol("kError"),A=Symbol("kMessage"),$=Symbol("kReason"),n=Symbol("kTarget"),c=Symbol("kType"),o=Symbol("kWasClean");class B{constructor(v){this[n]=null,this[c]=v}get target(){return this[n]}get type(){return this[c]}}Object.defineProperty(B.prototype,"target",{enumerable:!0}),Object.defineProperty(B.prototype,"type",{enumerable:!0});class p extends B{constructor(v,T={}){super(v);this[i]=T.code===void 0?0:T.code,this[$]=T.reason===void 0?"":T.reason,this[o]=T.wasClean===void 0?!1:T.wasClean}get code(){return this[i]}get reason(){return this[$]}get wasClean(){return this[o]}}Object.defineProperty(p.prototype,"code",{enumerable:!0}),Object.defineProperty(p.prototype,"reason",{enumerable:!0}),Object.defineProperty(p.prototype,"wasClean",{enumerable:!0});class u extends B{constructor(v,T={}){super(v);this[C]=T.error===void 0?null:T.error,this[A]=T.message===void 0?"":T.message}get error(){return this[C]}get message(){return this[A]}}Object.defineProperty(u.prototype,"error",{enumerable:!0}),Object.defineProperty(u.prototype,"message",{enumerable:!0});class l extends B{constructor(v,T={}){super(v);this[s]=T.data===void 0?null:T.data}get data(){return this[s]}}Object.defineProperty(l.prototype,"data",{enumerable:!0});var F={addEventListener(v,T,D={}){for(let y of this.listeners(v))if(!D[t]&&y[S]===T&&!y[t])return;let E;if(v==="message")E=function(r,a){let f=new l("message",{data:a?r:r.toString()});f[n]=this,b(T,this,f)};else if(v==="close")E=function(r,a){let f=new p("close",{code:r,reason:a.toString(),wasClean:this._closeFrameReceived&&this._closeFrameSent});f[n]=this,b(T,this,f)};else if(v==="error")E=function(r){let a=new u("error",{error:r,message:r.message});a[n]=this,b(T,this,a)};else if(v==="open")E=function(){let r=new B("open");r[n]=this,b(T,this,r)};else return;if(E[t]=!!D[t],E[S]=T,D.once)this.once(v,E);else this.on(v,E)},removeEventListener(v,T){for(let D of this.listeners(v))if(D[S]===T&&!D[t]){this.removeListener(v,D);break}}};e.exports={CloseEvent:p,ErrorEvent:u,Event:B,EventTarget:F,MessageEvent:l};function b(v,T,D){if(typeof v==="object"&&v.handleEvent)v.handleEvent.call(v,D);else v.call(T,D)}}),Ee=j((_,e)=>{var{tokenChars:t}=g_();function S(C,A,$){if(C[A]===void 0)C[A]=[$];else C[A].push($)}function i(C){let A=Object.create(null),$=Object.create(null),n=!1,c=!1,o=!1,B,p,u=-1,l=-1,F=-1,b=0;for(;b<C.length;b++)if(l=C.charCodeAt(b),B===void 0)if(F===-1&&t[l]===1){if(u===-1)u=b}else if(b!==0&&(l===32||l===9)){if(F===-1&&u!==-1)F=b}else if(l===59||l===44){if(u===-1)throw SyntaxError(`Unexpected character at index ${b}`);if(F===-1)F=b;let T=C.slice(u,F);if(l===44)S(A,T,$),$=Object.create(null);else B=T;u=F=-1}else throw SyntaxError(`Unexpected character at index ${b}`);else if(p===void 0)if(F===-1&&t[l]===1){if(u===-1)u=b}else if(l===32||l===9){if(F===-1&&u!==-1)F=b}else if(l===59||l===44){if(u===-1)throw SyntaxError(`Unexpected character at index ${b}`);if(F===-1)F=b;if(S($,C.slice(u,F),!0),l===44)S(A,B,$),$=Object.create(null),B=void 0;u=F=-1}else if(l===61&&u!==-1&&F===-1)p=C.slice(u,b),u=F=-1;else throw SyntaxError(`Unexpected character at index ${b}`);else if(c){if(t[l]!==1)throw SyntaxError(`Unexpected character at index ${b}`);if(u===-1)u=b;else if(!n)n=!0;c=!1}else if(o)if(t[l]===1){if(u===-1)u=b}else if(l===34&&u!==-1)o=!1,F=b;else if(l===92)c=!0;else throw SyntaxError(`Unexpected character at index ${b}`);else if(l===34&&C.charCodeAt(b-1)===61)o=!0;else if(F===-1&&t[l]===1){if(u===-1)u=b}else if(u!==-1&&(l===32||l===9)){if(F===-1)F=b}else if(l===59||l===44){if(u===-1)throw SyntaxError(`Unexpected character at index ${b}`);if(F===-1)F=b;let T=C.slice(u,F);if(n)T=T.replace(/\\/g,""),n=!1;if(S($,p,T),l===44)S(A,B,$),$=Object.create(null),B=void 0;p=void 0,u=F=-1}else throw SyntaxError(`Unexpected character at index ${b}`);if(u===-1||o||l===32||l===9)throw SyntaxError("Unexpected end of input");if(F===-1)F=b;let v=C.slice(u,F);if(B===void 0)S(A,v,$);else{if(p===void 0)S($,v,!0);else if(n)S($,p,v.replace(/\\/g,""));else S($,p,v);S(A,B,$)}return A}function s(C){return Object.keys(C).map((A)=>{let $=C[A];if(!Array.isArray($))$=[$];return $.map((n)=>{return[A].concat(Object.keys(n).map((c)=>{let o=n[c];if(!Array.isArray(o))o=[o];return o.map((B)=>B===!0?c:`${c}=${B}`).join("; ")})).join("; ")}).join(", ")}).join(", ")}e.exports={format:s,parse:i}}),Fe=j((_,e)=>{var t=X("events"),S=X("https"),i=X("http"),s=X("net"),C=X("tls"),{randomBytes:A,createHash:$}=X("crypto"),{Duplex:n,Readable:c}=X("stream"),{URL:o}=X("url"),B=w_(),p=at(),u=ct(),{isBlob:l}=g_(),{BINARY_TYPES:F,CLOSE_TIMEOUT:b,EMPTY_BUFFER:v,GUID:T,kForOnEventAttribute:D,kListener:E,kStatusCode:y,kWebSocket:r,NOOP:a}=i_(),{EventTarget:{addEventListener:f,removeEventListener:d}}=ss(),{format:w,parse:V}=Ee(),{toBuffer:m}=q_(),G=Symbol("kAborted"),L=[8,13],I=["CONNECTING","OPEN","CLOSING","CLOSED"],Z=/^[!#$%&'*+\-.0-9A-Z^_`|a-z~]+$/;class g extends t{constructor(R,O,h){super();if(this._binaryType=F[0],this._closeCode=1006,this._closeFrameReceived=!1,this._closeFrameSent=!1,this._closeMessage=v,this._closeTimer=null,this._errorEmitted=!1,this._extensions={},this._paused=!1,this._protocol="",this._readyState=g.CONNECTING,this._receiver=null,this._sender=null,this._socket=null,R!==null){if(this._bufferedAmount=0,this._isServer=!1,this._redirects=0,O===void 0)O=[];else if(!Array.isArray(O))if(typeof O==="object"&&O!==null)h=O,O=[];else O=[O];e_(this,R,O,h)}else this._autoPong=h.autoPong,this._closeTimeout=h.closeTimeout,this._isServer=!0}get binaryType(){return this._binaryType}set binaryType(R){if(!F.includes(R))return;if(this._binaryType=R,this._receiver)this._receiver._binaryType=R}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(R,O,h){let W=new p({allowSynchronousEvents:h.allowSynchronousEvents,binaryType:this.binaryType,extensions:this._extensions,isServer:this._isServer,maxPayload:h.maxPayload,skipUTF8Validation:h.skipUTF8Validation}),H=new u(R,this._extensions,h.generateMask);if(this._receiver=W,this._sender=H,this._socket=R,W[r]=this,H[r]=this,R[r]=this,W.on("conclude",BS),W.on("drain",DS),W.on("error",TS),W.on("message",fS),W.on("ping",ES),W.on("pong",FS),H.onerror=bS,R.setTimeout)R.setTimeout(0);if(R.setNoDelay)R.setNoDelay();if(O.length>0)R.unshift(O);R.on("close",ke),R.on("data",P_),R.on("end",Ke),R.on("error",xe),this._readyState=g.OPEN,this.emit("open")}emitClose(){if(!this._socket){this._readyState=g.CLOSED,this.emit("close",this._closeCode,this._closeMessage);return}if(this._extensions[B.extensionName])this._extensions[B.extensionName].cleanup();this._receiver.removeAllListeners(),this._readyState=g.CLOSED,this.emit("close",this._closeCode,this._closeMessage)}close(R,O){if(this.readyState===g.CLOSED)return;if(this.readyState===g.CONNECTING){z(this,this._req,"WebSocket was closed before the connection was established");return}if(this.readyState===g.CLOSING){if(this._closeFrameSent&&(this._closeFrameReceived||this._receiver._writableState.errorEmitted))this._socket.end();return}this._readyState=g.CLOSING,this._sender.close(R,O,!this._isServer,(h)=>{if(h)return;if(this._closeFrameSent=!0,this._closeFrameReceived||this._receiver._writableState.errorEmitted)this._socket.end()}),Xe(this)}pause(){if(this.readyState===g.CONNECTING||this.readyState===g.CLOSED)return;this._paused=!0,this._socket.pause()}ping(R,O,h){if(this.readyState===g.CONNECTING)throw Error("WebSocket is not open: readyState 0 (CONNECTING)");if(typeof R==="function")h=R,R=O=void 0;else if(typeof O==="function")h=O,O=void 0;if(typeof R==="number")R=R.toString();if(this.readyState!==g.OPEN){se(this,R,h);return}if(O===void 0)O=!this._isServer;this._sender.ping(R||v,O,h)}pong(R,O,h){if(this.readyState===g.CONNECTING)throw Error("WebSocket is not open: readyState 0 (CONNECTING)");if(typeof R==="function")h=R,R=O=void 0;else if(typeof O==="function")h=O,O=void 0;if(typeof R==="number")R=R.toString();if(this.readyState!==g.OPEN){se(this,R,h);return}if(O===void 0)O=!this._isServer;this._sender.pong(R||v,O,h)}resume(){if(this.readyState===g.CONNECTING||this.readyState===g.CLOSED)return;if(this._paused=!1,!this._receiver._writableState.needDrain)this._socket.resume()}send(R,O,h){if(this.readyState===g.CONNECTING)throw Error("WebSocket is not open: readyState 0 (CONNECTING)");if(typeof O==="function")h=O,O={};if(typeof R==="number")R=R.toString();if(this.readyState!==g.OPEN){se(this,R,h);return}let W={binary:typeof R!=="string",mask:!this._isServer,compress:!0,fin:!0,...O};if(!this._extensions[B.extensionName])W.compress=!1;this._sender.send(R||v,W,h)}terminate(){if(this.readyState===g.CLOSED)return;if(this.readyState===g.CONNECTING){z(this,this._req,"WebSocket was closed before the connection was established");return}if(this._socket)this._readyState=g.CLOSING,this._socket.destroy()}}Object.defineProperty(g,"CONNECTING",{enumerable:!0,value:I.indexOf("CONNECTING")}),Object.defineProperty(g.prototype,"CONNECTING",{enumerable:!0,value:I.indexOf("CONNECTING")}),Object.defineProperty(g,"OPEN",{enumerable:!0,value:I.indexOf("OPEN")}),Object.defineProperty(g.prototype,"OPEN",{enumerable:!0,value:I.indexOf("OPEN")}),Object.defineProperty(g,"CLOSING",{enumerable:!0,value:I.indexOf("CLOSING")}),Object.defineProperty(g.prototype,"CLOSING",{enumerable:!0,value:I.indexOf("CLOSING")}),Object.defineProperty(g,"CLOSED",{enumerable:!0,value:I.indexOf("CLOSED")}),Object.defineProperty(g.prototype,"CLOSED",{enumerable:!0,value:I.indexOf("CLOSED")}),["binaryType","bufferedAmount","extensions","isPaused","protocol","readyState","url"].forEach((R)=>{Object.defineProperty(g.prototype,R,{enumerable:!0})}),["open","error","close","message"].forEach((R)=>{Object.defineProperty(g.prototype,`on${R}`,{enumerable:!0,get(){for(let O of this.listeners(R))if(O[D])return O[E];return null},set(O){for(let h of this.listeners(R))if(h[D]){this.removeListener(R,h);break}if(typeof O!=="function")return;this.addEventListener(R,O,{[D]:!0})}})}),g.prototype.addEventListener=f,g.prototype.removeEventListener=d,e.exports=g;function e_(R,O,h,W){let H={allowSynchronousEvents:!0,autoPong:!0,closeTimeout:b,protocolVersion:L[1],maxPayload:104857600,skipUTF8Validation:!1,perMessageDeflate:!0,followRedirects:!1,maxRedirects:10,...W,socketPath:void 0,hostname:void 0,protocol:void 0,timeout:void 0,method:"GET",host:void 0,path:void 0,port:void 0};if(R._autoPong=H.autoPong,R._closeTimeout=H.closeTimeout,!L.includes(H.protocolVersion))throw RangeError(`Unsupported protocol version: ${H.protocolVersion} (supported versions: ${L.join(", ")})`);let M;if(O instanceof o)M=O;else try{M=new o(O)}catch{throw SyntaxError(`Invalid URL: ${O}`)}if(M.protocol==="http:")M.protocol="ws:";else if(M.protocol==="https:")M.protocol="wss:";R._url=M.href;let D_=M.protocol==="wss:",T_=M.protocol==="ws+unix:",u_;if(M.protocol!=="ws:"&&!D_&&!T_)u_=`The URL's protocol must be one of "ws:", "wss:", "http:", "https:", or "ws+unix:"`;else if(T_&&!M.pathname)u_="The URL's pathname is empty";else if(M.hash)u_="The URL contains a fragment identifier";if(u_){let P=SyntaxError(u_);if(R._redirects===0)throw P;else{$_(R,P);return}}let ze=D_?443:80,je=A(16).toString("base64"),Je=D_?S.request:i.request,p_=new Set,l_;if(H.createConnection=H.createConnection||(D_?Se:te),H.defaultPort=H.defaultPort||ze,H.port=M.port||ze,H.host=M.hostname.startsWith("[")?M.hostname.slice(1,-1):M.hostname,H.headers={...H.headers,"Sec-WebSocket-Version":H.protocolVersion,"Sec-WebSocket-Key":je,Connection:"Upgrade",Upgrade:"websocket"},H.path=M.pathname+M.search,H.timeout=H.handshakeTimeout,H.perMessageDeflate)l_=new B({...H.perMessageDeflate,isServer:!1,maxPayload:H.maxPayload}),H.headers["Sec-WebSocket-Extensions"]=w({[B.extensionName]:l_.offer()});if(h.length){for(let P of h){if(typeof P!=="string"||!Z.test(P)||p_.has(P))throw SyntaxError("An invalid or duplicated subprotocol was specified");p_.add(P)}H.headers["Sec-WebSocket-Protocol"]=h.join(",")}if(H.origin)if(H.protocolVersion<13)H.headers["Sec-WebSocket-Origin"]=H.origin;else H.headers.Origin=H.origin;if(M.username||M.password)H.auth=`${M.username}:${M.password}`;if(T_){let P=H.path.split(":");H.socketPath=P[0],H.path=P[1]}let q;if(H.followRedirects){if(R._redirects===0){R._originalIpc=T_,R._originalSecure=D_,R._originalHostOrSocketPath=T_?H.socketPath:M.host;let P=W&&W.headers;if(W={...W,headers:{}},P)for(let[x,f_]of Object.entries(P))W.headers[x.toLowerCase()]=f_}else if(R.listenerCount("redirect")===0){let P=T_?R._originalIpc?H.socketPath===R._originalHostOrSocketPath:!1:R._originalIpc?!1:M.host===R._originalHostOrSocketPath;if(!P||R._originalSecure&&!D_){if(delete H.headers.authorization,delete H.headers.cookie,!P)delete H.headers.host;H.auth=void 0}}if(H.auth&&!W.headers.authorization)W.headers.authorization="Basic "+Buffer.from(H.auth).toString("base64");if(q=R._req=Je(H),R._redirects)R.emit("redirect",R.url,q)}else q=R._req=Je(H);if(H.timeout)q.on("timeout",()=>{z(R,q,"Opening handshake has timed out")});if(q.on("error",(P)=>{if(q===null||q[G])return;q=R._req=null,$_(R,P)}),q.on("response",(P)=>{let x=P.headers.location,f_=P.statusCode;if(x&&H.followRedirects&&f_>=300&&f_<400){if(++R._redirects>H.maxRedirects){z(R,q,"Maximum redirects exceeded");return}q.abort();let O_;try{O_=new o(x,O)}catch(Ze){let E_=SyntaxError(`Invalid URL: ${x}`);$_(R,E_);return}e_(R,O_,h,W)}else if(!R.emit("unexpected-response",q,P))z(R,q,`Unexpected server response: ${P.statusCode}`)}),q.on("upgrade",(P,x,f_)=>{if(R.emit("upgrade",P),R.readyState!==g.CONNECTING)return;q=R._req=null;let O_=P.headers.upgrade;if(O_===void 0||O_.toLowerCase()!=="websocket"){z(R,x,"Invalid Upgrade header");return}let Ze=$("sha1").update(je+T).digest("base64");if(P.headers["sec-websocket-accept"]!==Ze){z(R,x,"Invalid Sec-WebSocket-Accept header");return}let E_=P.headers["sec-websocket-protocol"],d_;if(E_!==void 0){if(!p_.size)d_="Server sent a subprotocol but none was requested";else if(!p_.has(E_))d_="Server sent an invalid subprotocol"}else if(p_.size)d_="Server sent no subprotocol";if(d_){z(R,x,d_);return}if(E_)R._protocol=E_;let Qe=P.headers["sec-websocket-extensions"];if(Qe!==void 0){if(!l_){z(R,x,"Server sent a Sec-WebSocket-Extensions header but no extension was requested");return}let ie;try{ie=V(Qe)}catch(Ce){z(R,x,"Invalid Sec-WebSocket-Extensions header");return}let Ye=Object.keys(ie);if(Ye.length!==1||Ye[0]!==B.extensionName){z(R,x,"Server indicated an extension that was not requested");return}try{l_.accept(ie[B.extensionName])}catch(Ce){z(R,x,"Invalid Sec-WebSocket-Extensions header");return}R._extensions[B.extensionName]=l_}R.setSocket(x,f_,{allowSynchronousEvents:H.allowSynchronousEvents,generateMask:H.generateMask,maxPayload:H.maxPayload,skipUTF8Validation:H.skipUTF8Validation})}),H.finishRequest)H.finishRequest(q,R);else q.end()}function $_(R,O){R._readyState=g.CLOSING,R._errorEmitted=!0,R.emit("error",O),R.emitClose()}function te(R){return R.path=R.socketPath,s.connect(R)}function Se(R){if(R.path=void 0,!R.servername&&R.servername!=="")R.servername=s.isIP(R.host)?"":R.host;return C.connect(R)}function z(R,O,h){R._readyState=g.CLOSING;let W=Error(h);if(Error.captureStackTrace(W,z),O.setHeader){if(O[G]=!0,O.abort(),O.socket&&!O.socket.destroyed)O.socket.destroy();process.nextTick($_,R,W)}else O.destroy(W),O.once("error",R.emit.bind(R,"error")),O.once("close",R.emitClose.bind(R))}function se(R,O,h){if(O){let W=l(O)?O.size:m(O).length;if(R._socket)R._sender._bufferedBytes+=W;else R._bufferedAmount+=W}if(h){let W=Error(`WebSocket is not open: readyState ${R.readyState} (${I[R.readyState]})`);process.nextTick(h,W)}}function BS(R,O){let h=this[r];if(h._closeFrameReceived=!0,h._closeMessage=O,h._closeCode=R,h._socket[r]===void 0)return;if(h._socket.removeListener("data",P_),process.nextTick(qe,h._socket),R===1005)h.close();else h.close(R,O)}function DS(){let R=this[r];if(!R.isPaused)R._socket.resume()}function TS(R){let O=this[r];if(O._socket[r]!==void 0)O._socket.removeListener("data",P_),process.nextTick(qe,O._socket),O.close(R[y]);if(!O._errorEmitted)O._errorEmitted=!0,O.emit("error",R)}function Ge(){this[r].emitClose()}function fS(R,O){this[r].emit("message",R,O)}function ES(R){let O=this[r];if(O._autoPong)O.pong(R,!this._isServer,a);O.emit("ping",R)}function FS(R){this[r].emit("pong",R)}function qe(R){R.resume()}function bS(R){let O=this[r];if(O.readyState===g.CLOSED)return;if(O.readyState===g.OPEN)O._readyState=g.CLOSING,Xe(O);if(this._socket.end(),!O._errorEmitted)O._errorEmitted=!0,O.emit("error",R)}function Xe(R){R._closeTimer=setTimeout(R._socket.destroy.bind(R._socket),R._closeTimeout)}function ke(){let R=this[r];if(this.removeListener("close",ke),this.removeListener("data",P_),this.removeListener("end",Ke),R._readyState=g.CLOSING,!this._readableState.endEmitted&&!R._closeFrameReceived&&!R._receiver._writableState.errorEmitted&&this._readableState.length!==0){let O=this.read(this._readableState.length);R._receiver.write(O)}if(R._receiver.end(),this[r]=void 0,clearTimeout(R._closeTimer),R._receiver._writableState.finished||R._receiver._writableState.errorEmitted)R.emitClose();else R._receiver.on("error",Ge),R._receiver.on("finish",Ge)}function P_(R){if(!this[r]._receiver.write(R))this.pause()}function Ke(){let R=this[r];R._readyState=g.CLOSING,R._receiver.end(),this.end()}function xe(){let R=this[r];if(this.removeListener("error",xe),this.on("error",a),R)R._readyState=g.CLOSING,this.destroy()}}),is=j((_,e)=>{var t=Fe(),{Duplex:S}=X("stream");function i($){$.emit("close")}function s(){if(!this.destroyed&&this._writableState.finished)this.destroy()}function C($){if(this.removeListener("error",C),this.destroy(),this.listenerCount("error")===0)this.emit("error",$)}function A($,n){let c=!0,o=new S({...n,autoDestroy:!1,emitClose:!1,objectMode:!1,writableObjectMode:!1});return $.on("message",function(p,u){let l=!u&&o._readableState.objectMode?p.toString():p;if(!o.push(l))$.pause()}),$.once("error",function(p){if(o.destroyed)return;c=!1,o.destroy(p)}),$.once("close",function(){if(o.destroyed)return;o.push(null)}),o._destroy=function(B,p){if($.readyState===$.CLOSED){p(B),process.nextTick(i,o);return}let u=!1;if($.once("error",function(F){u=!0,p(F)}),$.once("close",function(){if(!u)p(B);process.nextTick(i,o)}),c)$.terminate()},o._final=function(B){if($.readyState===$.CONNECTING){$.once("open",function(){o._final(B)});return}if($._socket===null)return;if($._socket._writableState.finished){if(B(),o._readableState.endEmitted)o.destroy()}else $._socket.once("finish",function(){B()}),$.close()},o._read=function(){if($.isPaused)$.resume()},o._write=function(B,p,u){if($.readyState===$.CONNECTING){$.once("open",function(){o._write(B,p,u)});return}$.send(B,u)},o.on("end",s),o.on("error",C),o}e.exports=A}),Rt=j((_,e)=>{var{tokenChars:t}=g_();function S(i){let s=new Set,C=-1,A=-1,$=0;for($;$<i.length;$++){let c=i.charCodeAt($);if(A===-1&&t[c]===1){if(C===-1)C=$}else if($!==0&&(c===32||c===9)){if(A===-1&&C!==-1)A=$}else if(c===44){if(C===-1)throw SyntaxError(`Unexpected character at index ${$}`);if(A===-1)A=$;let o=i.slice(C,A);if(s.has(o))throw SyntaxError(`The "${o}" subprotocol is duplicated`);s.add(o),C=A=-1}else throw SyntaxError(`Unexpected character at index ${$}`)}if(C===-1||A!==-1)throw SyntaxError("Unexpected end of input");let n=i.slice(C,$);if(s.has(n))throw SyntaxError(`The "${n}" subprotocol is duplicated`);return s.add(n),s}e.exports={parse:S}}),Cs=j((_,e)=>{var t=X("events"),S=X("http"),{Duplex:i}=X("stream"),{createHash:s}=X("crypto"),C=Ee(),A=w_(),$=Rt(),n=Fe(),{CLOSE_TIMEOUT:c,GUID:o,kWebSocket:B}=i_(),p=/^[+/0-9A-Za-z]{22}==$/,u=0,l=1,F=2;class b extends t{constructor(r,a){super();if(r={allowSynchronousEvents:!0,autoPong:!0,maxPayload:104857600,skipUTF8Validation:!1,perMessageDeflate:!1,handleProtocols:null,clientTracking:!0,closeTimeout:c,verifyClient:null,noServer:!1,backlog:null,server:null,host:null,path:null,port:null,WebSocket:n,...r},r.port==null&&!r.server&&!r.noServer||r.port!=null&&(r.server||r.noServer)||r.server&&r.noServer)throw TypeError('One and only one of the "port", "server", or "noServer" options must be specified');if(r.port!=null)this._server=S.createServer((f,d)=>{let w=S.STATUS_CODES[426];d.writeHead(426,{"Content-Length":w.length,"Content-Type":"text/plain"}),d.end(w)}),this._server.listen(r.port,r.host,r.backlog,a);else if(r.server)this._server=r.server;if(this._server){let f=this.emit.bind(this,"connection");this._removeListeners=v(this._server,{listening:this.emit.bind(this,"listening"),error:this.emit.bind(this,"error"),upgrade:(d,w,V)=>{this.handleUpgrade(d,w,V,f)}})}if(r.perMessageDeflate===!0)r.perMessageDeflate={};if(r.clientTracking)this.clients=new Set,this._shouldEmitClose=!1;this.options=r,this._state=u}address(){if(this.options.noServer)throw Error('The server is operating in "noServer" mode');if(!this._server)return null;return this._server.address()}close(r){if(this._state===F){if(r)this.once("close",()=>{r(Error("The server is not running"))});process.nextTick(T,this);return}if(r)this.once("close",r);if(this._state===l)return;if(this._state=l,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(T,this);else this._shouldEmitClose=!0;else process.nextTick(T,this)}else{let a=this._server;this._removeListeners(),this._removeListeners=this._server=null,a.close(()=>{T(this)})}}shouldHandle(r){if(this.options.path){let a=r.url.indexOf("?");if((a!==-1?r.url.slice(0,a):r.url)!==this.options.path)return!1}return!0}handleUpgrade(r,a,f,d){a.on("error",D);let w=r.headers["sec-websocket-key"],V=r.headers.upgrade,m=+r.headers["sec-websocket-version"];if(r.method!=="GET"){y(this,r,a,405,"Invalid HTTP method");return}if(V===void 0||V.toLowerCase()!=="websocket"){y(this,r,a,400,"Invalid Upgrade header");return}if(w===void 0||!p.test(w)){y(this,r,a,400,"Missing or invalid Sec-WebSocket-Key header");return}if(m!==13&&m!==8){y(this,r,a,400,"Missing or invalid Sec-WebSocket-Version header",{"Sec-WebSocket-Version":"13, 8"});return}if(!this.shouldHandle(r)){E(a,400);return}let G=r.headers["sec-websocket-protocol"],L=new Set;if(G!==void 0)try{L=$.parse(G)}catch(g){y(this,r,a,400,"Invalid Sec-WebSocket-Protocol header");return}let I=r.headers["sec-websocket-extensions"],Z={};if(this.options.perMessageDeflate&&I!==void 0){let g=new A({...this.options.perMessageDeflate,isServer:!0,maxPayload:this.options.maxPayload});try{let e_=C.parse(I);if(e_[A.extensionName])g.accept(e_[A.extensionName]),Z[A.extensionName]=g}catch(e_){y(this,r,a,400,"Invalid or unacceptable Sec-WebSocket-Extensions header");return}}if(this.options.verifyClient){let g={origin:r.headers[`${m===8?"sec-websocket-origin":"origin"}`],secure:!!(r.socket.authorized||r.socket.encrypted),req:r};if(this.options.verifyClient.length===2){this.options.verifyClient(g,(e_,$_,te,Se)=>{if(!e_)return E(a,$_||401,te,Se);this.completeUpgrade(Z,w,L,r,a,f,d)});return}if(!this.options.verifyClient(g))return E(a,401)}this.completeUpgrade(Z,w,L,r,a,f,d)}completeUpgrade(r,a,f,d,w,V,m){if(!w.readable||!w.writable)return w.destroy();if(w[B])throw Error("server.handleUpgrade() was called more than once with the same socket, possibly due to a misconfiguration");if(this._state>u)return E(w,503);let L=["HTTP/1.1 101 Switching Protocols","Upgrade: websocket","Connection: Upgrade",`Sec-WebSocket-Accept: ${s("sha1").update(a+o).digest("base64")}`],I=new this.options.WebSocket(null,void 0,this.options);if(f.size){let Z=this.options.handleProtocols?this.options.handleProtocols(f,d):f.values().next().value;if(Z)L.push(`Sec-WebSocket-Protocol: ${Z}`),I._protocol=Z}if(r[A.extensionName]){let Z=r[A.extensionName].params,g=C.format({[A.extensionName]:[Z]});L.push(`Sec-WebSocket-Extensions: ${g}`),I._extensions=r}if(this.emit("headers",L,d),w.write(L.concat(`\r
33
+ }`,ai=65536,Bi,Di,fi,bi=1500;var US=Ae(()=>{Ss=Object.create,ts=Object.getPrototypeOf,AS=Object.defineProperty,ss=Object.getOwnPropertyNames,is=Object.prototype.hasOwnProperty;K=es(import.meta.url),C_=j((_,e)=>{var S=["nodebuffer","arraybuffer","fragments"],t=typeof Blob<"u";if(t)S.push("blob");e.exports={BINARY_TYPES:S,CLOSE_TIMEOUT:30000,EMPTY_BUFFER:Buffer.alloc(0),GUID:"258EAFA5-E914-47DA-95CA-C5AB0DC85B11",hasBlob:t,kForOnEventAttribute:Symbol("kIsForOnEventAttribute"),kListener:Symbol("kListener"),kStatusCode:Symbol("status-code"),kWebSocket:Symbol("websocket"),NOOP:()=>{}}}),X_=j((_,e)=>{var{EMPTY_BUFFER:S}=C_(),t=Buffer[Symbol.species];function s(A,B){if(A.length===0)return S;if(A.length===1)return A[0];let c=Buffer.allocUnsafe(B),a=0;for(let u=0;u<A.length;u++){let v=A[u];c.set(v,a),a+=v.length}if(a<B)return new t(c.buffer,c.byteOffset,a);return c}function i(A,B,c,a,u){for(let v=0;v<u;v++)c[a+v]=A[v]^B[v&3]}function C(A,B){for(let c=0;c<A.length;c++)A[c]^=B[c&3]}function n(A){if(A.length===A.buffer.byteLength)return A.buffer;return A.buffer.slice(A.byteOffset,A.byteOffset+A.length)}function $(A){if($.readOnly=!0,Buffer.isBuffer(A))return A;let B;if(A instanceof ArrayBuffer)B=new t(A);else if(ArrayBuffer.isView(A))B=new t(A.buffer,A.byteOffset,A.byteLength);else B=Buffer.from(A),$.readOnly=!1;return B}if(e.exports={concat:s,mask:i,toArrayBuffer:n,toBuffer:$,unmask:C},!process.env.WS_NO_BUFFER_UTIL)try{let A=(()=>{throw Error("Cannot require module bufferutil")})();e.exports.mask=function(B,c,a,u,v){if(v<48)i(B,c,a,u,v);else A.mask(B,c,a,u,v)},e.exports.unmask=function(B,c){if(B.length<32)C(B,c);else A.unmask(B,c)}}catch(A){}}),As=j((_,e)=>{var S=Symbol("kDone"),t=Symbol("kRun");class s{constructor(i){this[S]=()=>{this.pending--,this[t]()},this.concurrency=i||1/0,this.jobs=[],this.pending=0}add(i){this.jobs.push(i),this[t]()}[t](){if(this.pending===this.concurrency)return;if(this.jobs.length){let i=this.jobs.shift();this.pending++,i(this[S])}}}e.exports=s}),N_=j((_,e)=>{var S=K("zlib"),t=X_(),s=As(),{kStatusCode:i}=C_(),C=Buffer[Symbol.species],n=Buffer.from([0,0,255,255]),$=Symbol("permessage-deflate"),A=Symbol("total-length"),B=Symbol("callback"),c=Symbol("buffers"),a=Symbol("error"),u;class v{constructor(E){if(this._options=E||{},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,!u){let T=this._options.concurrencyLimit!==void 0?this._options.concurrencyLimit:10;u=new s(T)}}static get extensionName(){return"permessage-deflate"}offer(){let E={};if(this._options.serverNoContextTakeover)E.server_no_context_takeover=!0;if(this._options.clientNoContextTakeover)E.client_no_context_takeover=!0;if(this._options.serverMaxWindowBits)E.server_max_window_bits=this._options.serverMaxWindowBits;if(this._options.clientMaxWindowBits)E.client_max_window_bits=this._options.clientMaxWindowBits;else if(this._options.clientMaxWindowBits==null)E.client_max_window_bits=!0;return E}accept(E){return E=this.normalizeParams(E),this.params=this._isServer?this.acceptAsServer(E):this.acceptAsClient(E),this.params}cleanup(){if(this._inflate)this._inflate.close(),this._inflate=null;if(this._deflate){let E=this._deflate[B];if(this._deflate.close(),this._deflate=null,E)E(Error("The deflate stream was closed while data was being processed"))}}acceptAsServer(E){let T=this._options,f=E.find((b)=>{if(T.serverNoContextTakeover===!1&&b.server_no_context_takeover||b.server_max_window_bits&&(T.serverMaxWindowBits===!1||typeof T.serverMaxWindowBits==="number"&&T.serverMaxWindowBits>b.server_max_window_bits)||typeof T.clientMaxWindowBits==="number"&&!b.client_max_window_bits)return!1;return!0});if(!f)throw Error("None of the extension offers can be accepted");if(T.serverNoContextTakeover)f.server_no_context_takeover=!0;if(T.clientNoContextTakeover)f.client_no_context_takeover=!0;if(typeof T.serverMaxWindowBits==="number")f.server_max_window_bits=T.serverMaxWindowBits;if(typeof T.clientMaxWindowBits==="number")f.client_max_window_bits=T.clientMaxWindowBits;else if(f.client_max_window_bits===!0||T.clientMaxWindowBits===!1)delete f.client_max_window_bits;return f}acceptAsClient(E){let T=E[0];if(this._options.clientNoContextTakeover===!1&&T.client_no_context_takeover)throw Error('Unexpected parameter "client_no_context_takeover"');if(!T.client_max_window_bits){if(typeof this._options.clientMaxWindowBits==="number")T.client_max_window_bits=this._options.clientMaxWindowBits}else if(this._options.clientMaxWindowBits===!1||typeof this._options.clientMaxWindowBits==="number"&&T.client_max_window_bits>this._options.clientMaxWindowBits)throw Error('Unexpected or invalid parameter "client_max_window_bits"');return T}normalizeParams(E){return E.forEach((T)=>{Object.keys(T).forEach((f)=>{let b=T[f];if(b.length>1)throw Error(`Parameter "${f}" must have only a single value`);if(b=b[0],f==="client_max_window_bits"){if(b!==!0){let o=+b;if(!Number.isInteger(o)||o<8||o>15)throw TypeError(`Invalid value for parameter "${f}": ${b}`);b=o}else if(!this._isServer)throw TypeError(`Invalid value for parameter "${f}": ${b}`)}else if(f==="server_max_window_bits"){let o=+b;if(!Number.isInteger(o)||o<8||o>15)throw TypeError(`Invalid value for parameter "${f}": ${b}`);b=o}else if(f==="client_no_context_takeover"||f==="server_no_context_takeover"){if(b!==!0)throw TypeError(`Invalid value for parameter "${f}": ${b}`)}else throw Error(`Unknown parameter "${f}"`);T[f]=b})}),E}decompress(E,T,f){u.add((b)=>{this._decompress(E,T,(o,r)=>{b(),f(o,r)})})}compress(E,T,f){u.add((b)=>{this._compress(E,T,(o,r)=>{b(),f(o,r)})})}_decompress(E,T,f){let b=this._isServer?"client":"server";if(!this._inflate){let o=`${b}_max_window_bits`,r=typeof this.params[o]!=="number"?S.Z_DEFAULT_WINDOWBITS:this.params[o];this._inflate=S.createInflateRaw({...this._options.zlibInflateOptions,windowBits:r}),this._inflate[$]=this,this._inflate[A]=0,this._inflate[c]=[],this._inflate.on("error",F),this._inflate.on("data",p)}if(this._inflate[B]=f,this._inflate.write(E),T)this._inflate.write(n);this._inflate.flush(()=>{let o=this._inflate[a];if(o){this._inflate.close(),this._inflate=null,f(o);return}let r=t.concat(this._inflate[c],this._inflate[A]);if(this._inflate._readableState.endEmitted)this._inflate.close(),this._inflate=null;else if(this._inflate[A]=0,this._inflate[c]=[],T&&this.params[`${b}_no_context_takeover`])this._inflate.reset();f(null,r)})}_compress(E,T,f){let b=this._isServer?"server":"client";if(!this._deflate){let o=`${b}_max_window_bits`,r=typeof this.params[o]!=="number"?S.Z_DEFAULT_WINDOWBITS:this.params[o];this._deflate=S.createDeflateRaw({...this._options.zlibDeflateOptions,windowBits:r}),this._deflate[A]=0,this._deflate[c]=[],this._deflate.on("data",O)}this._deflate[B]=f,this._deflate.write(E),this._deflate.flush(S.Z_SYNC_FLUSH,()=>{if(!this._deflate)return;let o=t.concat(this._deflate[c],this._deflate[A]);if(T)o=new C(o.buffer,o.byteOffset,o.length-4);if(this._deflate[B]=null,this._deflate[A]=0,this._deflate[c]=[],T&&this.params[`${b}_no_context_takeover`])this._deflate.reset();f(null,o)})}}e.exports=v;function O(E){this[c].push(E),this[A]+=E.length}function p(E){if(this[A]+=E.length,this[$]._maxPayload<1||this[A]<=this[$]._maxPayload){this[c].push(E);return}this[a]=RangeError("Max payload size exceeded"),this[a].code="WS_ERR_UNSUPPORTED_MESSAGE_LENGTH",this[a][i]=1009,this.removeListener("data",p),this.reset()}function F(E){if(this[$]._inflate=null,this[a]){this[B](this[a]);return}E[i]=1007,this[B](E)}}),h_=j((_,e)=>{var{isUtf8:S}=K("buffer"),{hasBlob:t}=C_(),s=[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 i($){return $>=1000&&$<=1014&&$!==1004&&$!==1005&&$!==1006||$>=3000&&$<=4999}function C($){let A=$.length,B=0;while(B<A)if(($[B]&128)===0)B++;else if(($[B]&224)===192){if(B+1===A||($[B+1]&192)!==128||($[B]&254)===192)return!1;B+=2}else if(($[B]&240)===224){if(B+2>=A||($[B+1]&192)!==128||($[B+2]&192)!==128||$[B]===224&&($[B+1]&224)===128||$[B]===237&&($[B+1]&224)===160)return!1;B+=3}else if(($[B]&248)===240){if(B+3>=A||($[B+1]&192)!==128||($[B+2]&192)!==128||($[B+3]&192)!==128||$[B]===240&&($[B+1]&240)===128||$[B]===244&&$[B+1]>143||$[B]>244)return!1;B+=4}else return!1;return!0}function n($){return t&&typeof $==="object"&&typeof $.arrayBuffer==="function"&&typeof $.type==="string"&&typeof $.stream==="function"&&($[Symbol.toStringTag]==="Blob"||$[Symbol.toStringTag]==="File")}if(e.exports={isBlob:n,isValidStatusCode:i,isValidUTF8:C,tokenChars:s},S)e.exports.isValidUTF8=function($){return $.length<24?C($):S($)};else if(!process.env.WS_NO_UTF_8_VALIDATE)try{let $=(()=>{throw Error("Cannot require module utf-8-validate")})();e.exports.isValidUTF8=function(A){return A.length<32?C(A):$(A)}}catch($){}}),BS=j((_,e)=>{var{Writable:S}=K("stream"),t=N_(),{BINARY_TYPES:s,EMPTY_BUFFER:i,kStatusCode:C,kWebSocket:n}=C_(),{concat:$,toArrayBuffer:A,unmask:B}=X_(),{isValidStatusCode:c,isValidUTF8:a}=h_(),u=Buffer[Symbol.species],v=0,O=1,p=2,F=3,E=4,T=5,f=6;class b extends S{constructor(o={}){super();this._allowSynchronousEvents=o.allowSynchronousEvents!==void 0?o.allowSynchronousEvents:!0,this._binaryType=o.binaryType||s[0],this._extensions=o.extensions||{},this._isServer=!!o.isServer,this._maxPayload=o.maxPayload|0,this._skipUTF8Validation=!!o.skipUTF8Validation,this[n]=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=v}_write(o,r,y){if(this._opcode===8&&this._state==v)return y();this._bufferedBytes+=o.length,this._buffers.push(o),this.startLoop(y)}consume(o){if(this._bufferedBytes-=o,o===this._buffers[0].length)return this._buffers.shift();if(o<this._buffers[0].length){let y=this._buffers[0];return this._buffers[0]=new u(y.buffer,y.byteOffset+o,y.length-o),new u(y.buffer,y.byteOffset,o)}let r=Buffer.allocUnsafe(o);do{let y=this._buffers[0],D=r.length-o;if(o>=y.length)r.set(this._buffers.shift(),D);else r.set(new Uint8Array(y.buffer,y.byteOffset,o),D),this._buffers[0]=new u(y.buffer,y.byteOffset+o,y.length-o);o-=y.length}while(o>0);return r}startLoop(o){this._loop=!0;do switch(this._state){case v:this.getInfo(o);break;case O:this.getPayloadLength16(o);break;case p:this.getPayloadLength64(o);break;case F:this.getMask();break;case E:this.getData(o);break;case T:case f:this._loop=!1;return}while(this._loop);if(!this._errored)o()}getInfo(o){if(this._bufferedBytes<2){this._loop=!1;return}let r=this.consume(2);if((r[0]&48)!==0){let D=this.createError(RangeError,"RSV2 and RSV3 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_2_3");o(D);return}let y=(r[0]&64)===64;if(y&&!this._extensions[t.extensionName]){let D=this.createError(RangeError,"RSV1 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_1");o(D);return}if(this._fin=(r[0]&128)===128,this._opcode=r[0]&15,this._payloadLength=r[1]&127,this._opcode===0){if(y){let D=this.createError(RangeError,"RSV1 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_1");o(D);return}if(!this._fragmented){let D=this.createError(RangeError,"invalid opcode 0",!0,1002,"WS_ERR_INVALID_OPCODE");o(D);return}this._opcode=this._fragmented}else if(this._opcode===1||this._opcode===2){if(this._fragmented){let D=this.createError(RangeError,`invalid opcode ${this._opcode}`,!0,1002,"WS_ERR_INVALID_OPCODE");o(D);return}this._compressed=y}else if(this._opcode>7&&this._opcode<11){if(!this._fin){let D=this.createError(RangeError,"FIN must be set",!0,1002,"WS_ERR_EXPECTED_FIN");o(D);return}if(y){let D=this.createError(RangeError,"RSV1 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_1");o(D);return}if(this._payloadLength>125||this._opcode===8&&this._payloadLength===1){let D=this.createError(RangeError,`invalid payload length ${this._payloadLength}`,!0,1002,"WS_ERR_INVALID_CONTROL_PAYLOAD_LENGTH");o(D);return}}else{let D=this.createError(RangeError,`invalid opcode ${this._opcode}`,!0,1002,"WS_ERR_INVALID_OPCODE");o(D);return}if(!this._fin&&!this._fragmented)this._fragmented=this._opcode;if(this._masked=(r[1]&128)===128,this._isServer){if(!this._masked){let D=this.createError(RangeError,"MASK must be set",!0,1002,"WS_ERR_EXPECTED_MASK");o(D);return}}else if(this._masked){let D=this.createError(RangeError,"MASK must be clear",!0,1002,"WS_ERR_UNEXPECTED_MASK");o(D);return}if(this._payloadLength===126)this._state=O;else if(this._payloadLength===127)this._state=p;else this.haveLength(o)}getPayloadLength16(o){if(this._bufferedBytes<2){this._loop=!1;return}this._payloadLength=this.consume(2).readUInt16BE(0),this.haveLength(o)}getPayloadLength64(o){if(this._bufferedBytes<8){this._loop=!1;return}let r=this.consume(8),y=r.readUInt32BE(0);if(y>Math.pow(2,21)-1){let D=this.createError(RangeError,"Unsupported WebSocket frame: payload length > 2^53 - 1",!1,1009,"WS_ERR_UNSUPPORTED_DATA_PAYLOAD_LENGTH");o(D);return}this._payloadLength=y*Math.pow(2,32)+r.readUInt32BE(4),this.haveLength(o)}haveLength(o){if(this._payloadLength&&this._opcode<8){if(this._totalPayloadLength+=this._payloadLength,this._totalPayloadLength>this._maxPayload&&this._maxPayload>0){let r=this.createError(RangeError,"Max payload size exceeded",!1,1009,"WS_ERR_UNSUPPORTED_MESSAGE_LENGTH");o(r);return}}if(this._masked)this._state=F;else this._state=E}getMask(){if(this._bufferedBytes<4){this._loop=!1;return}this._mask=this.consume(4),this._state=E}getData(o){let r=i;if(this._payloadLength){if(this._bufferedBytes<this._payloadLength){this._loop=!1;return}if(r=this.consume(this._payloadLength),this._masked&&(this._mask[0]|this._mask[1]|this._mask[2]|this._mask[3])!==0)B(r,this._mask)}if(this._opcode>7){this.controlMessage(r,o);return}if(this._compressed){this._state=T,this.decompress(r,o);return}if(r.length)this._messageLength=this._totalPayloadLength,this._fragments.push(r);this.dataMessage(o)}decompress(o,r){this._extensions[t.extensionName].decompress(o,this._fin,(D,d)=>{if(D)return r(D);if(d.length){if(this._messageLength+=d.length,this._messageLength>this._maxPayload&&this._maxPayload>0){let w=this.createError(RangeError,"Max payload size exceeded",!1,1009,"WS_ERR_UNSUPPORTED_MESSAGE_LENGTH");r(w);return}this._fragments.push(d)}if(this.dataMessage(r),this._state===v)this.startLoop(r)})}dataMessage(o){if(!this._fin){this._state=v;return}let r=this._messageLength,y=this._fragments;if(this._totalPayloadLength=0,this._messageLength=0,this._fragmented=0,this._fragments=[],this._opcode===2){let D;if(this._binaryType==="nodebuffer")D=$(y,r);else if(this._binaryType==="arraybuffer")D=A($(y,r));else if(this._binaryType==="blob")D=new Blob(y);else D=y;if(this._allowSynchronousEvents)this.emit("message",D,!0),this._state=v;else this._state=f,setImmediate(()=>{this.emit("message",D,!0),this._state=v,this.startLoop(o)})}else{let D=$(y,r);if(!this._skipUTF8Validation&&!a(D)){let d=this.createError(Error,"invalid UTF-8 sequence",!0,1007,"WS_ERR_INVALID_UTF8");o(d);return}if(this._state===T||this._allowSynchronousEvents)this.emit("message",D,!1),this._state=v;else this._state=f,setImmediate(()=>{this.emit("message",D,!1),this._state=v,this.startLoop(o)})}}controlMessage(o,r){if(this._opcode===8){if(o.length===0)this._loop=!1,this.emit("conclude",1005,i),this.end();else{let y=o.readUInt16BE(0);if(!c(y)){let d=this.createError(RangeError,`invalid status code ${y}`,!0,1002,"WS_ERR_INVALID_CLOSE_CODE");r(d);return}let D=new u(o.buffer,o.byteOffset+2,o.length-2);if(!this._skipUTF8Validation&&!a(D)){let d=this.createError(Error,"invalid UTF-8 sequence",!0,1007,"WS_ERR_INVALID_UTF8");r(d);return}this._loop=!1,this.emit("conclude",y,D),this.end()}this._state=v;return}if(this._allowSynchronousEvents)this.emit(this._opcode===9?"ping":"pong",o),this._state=v;else this._state=f,setImmediate(()=>{this.emit(this._opcode===9?"ping":"pong",o),this._state=v,this.startLoop(r)})}createError(o,r,y,D,d){this._loop=!1,this._errored=!0;let w=new o(y?`Invalid WebSocket frame: ${r}`:r);return Error.captureStackTrace(w,this.createError),w.code=d,w[C]=D,w}}e.exports=b}),DS=j((_,e)=>{var{Duplex:S}=K("stream"),{randomFillSync:t}=K("crypto"),s=N_(),{EMPTY_BUFFER:i,kWebSocket:C,NOOP:n}=C_(),{isBlob:$,isValidStatusCode:A}=h_(),{mask:B,toBuffer:c}=X_(),a=Symbol("kByteLength"),u=Buffer.alloc(4),v=8192,O,p=v,F=0,E=1,T=2;class f{constructor(r,y,D){if(this._extensions=y||{},D)this._generateMask=D,this._maskBuffer=Buffer.alloc(4);this._socket=r,this._firstFragment=!0,this._compress=!1,this._bufferedBytes=0,this._queue=[],this._state=F,this.onerror=n,this[C]=void 0}static frame(r,y){let D,d=!1,w=2,V=!1;if(y.mask){if(D=y.maskBuffer||u,y.generateMask)y.generateMask(D);else{if(p===v){if(O===void 0)O=Buffer.alloc(v);t(O,0,v),p=0}D[0]=O[p++],D[1]=O[p++],D[2]=O[p++],D[3]=O[p++]}V=(D[0]|D[1]|D[2]|D[3])===0,w=6}let m;if(typeof r==="string")if((!y.mask||V)&&y[a]!==void 0)m=y[a];else r=Buffer.from(r),m=r.length;else m=r.length,d=y.mask&&y.readOnly&&!V;let I=m;if(m>=65536)w+=8,I=127;else if(m>125)w+=2,I=126;let L=Buffer.allocUnsafe(d?m+w:w);if(L[0]=y.fin?y.opcode|128:y.opcode,y.rsv1)L[0]|=64;if(L[1]=I,I===126)L.writeUInt16BE(m,2);else if(I===127)L[2]=L[3]=0,L.writeUIntBE(m,4,6);if(!y.mask)return[L,r];if(L[1]|=128,L[w-4]=D[0],L[w-3]=D[1],L[w-2]=D[2],L[w-1]=D[3],V)return[L,r];if(d)return B(r,D,L,w,m),[L];return B(r,D,r,0,m),[L,r]}close(r,y,D,d){let w;if(r===void 0)w=i;else if(typeof r!=="number"||!A(r))throw TypeError("First argument must be a valid error code number");else if(y===void 0||!y.length)w=Buffer.allocUnsafe(2),w.writeUInt16BE(r,0);else{let m=Buffer.byteLength(y);if(m>123)throw RangeError("The message must not be greater than 123 bytes");if(w=Buffer.allocUnsafe(2+m),w.writeUInt16BE(r,0),typeof y==="string")w.write(y,2);else w.set(y,2)}let V={[a]:w.length,fin:!0,generateMask:this._generateMask,mask:D,maskBuffer:this._maskBuffer,opcode:8,readOnly:!1,rsv1:!1};if(this._state!==F)this.enqueue([this.dispatch,w,!1,V,d]);else this.sendFrame(f.frame(w,V),d)}ping(r,y,D){let d,w;if(typeof r==="string")d=Buffer.byteLength(r),w=!1;else if($(r))d=r.size,w=!1;else r=c(r),d=r.length,w=c.readOnly;if(d>125)throw RangeError("The data size must not be greater than 125 bytes");let V={[a]:d,fin:!0,generateMask:this._generateMask,mask:y,maskBuffer:this._maskBuffer,opcode:9,readOnly:w,rsv1:!1};if($(r))if(this._state!==F)this.enqueue([this.getBlobData,r,!1,V,D]);else this.getBlobData(r,!1,V,D);else if(this._state!==F)this.enqueue([this.dispatch,r,!1,V,D]);else this.sendFrame(f.frame(r,V),D)}pong(r,y,D){let d,w;if(typeof r==="string")d=Buffer.byteLength(r),w=!1;else if($(r))d=r.size,w=!1;else r=c(r),d=r.length,w=c.readOnly;if(d>125)throw RangeError("The data size must not be greater than 125 bytes");let V={[a]:d,fin:!0,generateMask:this._generateMask,mask:y,maskBuffer:this._maskBuffer,opcode:10,readOnly:w,rsv1:!1};if($(r))if(this._state!==F)this.enqueue([this.getBlobData,r,!1,V,D]);else this.getBlobData(r,!1,V,D);else if(this._state!==F)this.enqueue([this.dispatch,r,!1,V,D]);else this.sendFrame(f.frame(r,V),D)}send(r,y,D){let d=this._extensions[s.extensionName],w=y.binary?2:1,V=y.compress,m,I;if(typeof r==="string")m=Buffer.byteLength(r),I=!1;else if($(r))m=r.size,I=!1;else r=c(r),m=r.length,I=c.readOnly;if(this._firstFragment){if(this._firstFragment=!1,V&&d&&d.params[d._isServer?"server_no_context_takeover":"client_no_context_takeover"])V=m>=d._threshold;this._compress=V}else V=!1,w=0;if(y.fin)this._firstFragment=!0;let L={[a]:m,fin:y.fin,generateMask:this._generateMask,mask:y.mask,maskBuffer:this._maskBuffer,opcode:w,readOnly:I,rsv1:V};if($(r))if(this._state!==F)this.enqueue([this.getBlobData,r,this._compress,L,D]);else this.getBlobData(r,this._compress,L,D);else if(this._state!==F)this.enqueue([this.dispatch,r,this._compress,L,D]);else this.dispatch(r,this._compress,L,D)}getBlobData(r,y,D,d){this._bufferedBytes+=D[a],this._state=T,r.arrayBuffer().then((w)=>{if(this._socket.destroyed){let m=Error("The socket was closed while the blob was being read");process.nextTick(b,this,m,d);return}this._bufferedBytes-=D[a];let V=c(w);if(!y)this._state=F,this.sendFrame(f.frame(V,D),d),this.dequeue();else this.dispatch(V,y,D,d)}).catch((w)=>{process.nextTick(o,this,w,d)})}dispatch(r,y,D,d){if(!y){this.sendFrame(f.frame(r,D),d);return}let w=this._extensions[s.extensionName];this._bufferedBytes+=D[a],this._state=E,w.compress(r,D.fin,(V,m)=>{if(this._socket.destroyed){let I=Error("The socket was closed while data was being compressed");b(this,I,d);return}this._bufferedBytes-=D[a],this._state=F,D.readOnly=!1,this.sendFrame(f.frame(m,D),d),this.dequeue()})}dequeue(){while(this._state===F&&this._queue.length){let r=this._queue.shift();this._bufferedBytes-=r[3][a],Reflect.apply(r[0],this,r.slice(1))}}enqueue(r){this._bufferedBytes+=r[3][a],this._queue.push(r)}sendFrame(r,y){if(r.length===2)this._socket.cork(),this._socket.write(r[0]),this._socket.write(r[1],y),this._socket.uncork();else this._socket.write(r[0],y)}}e.exports=f;function b(r,y,D){if(typeof D==="function")D(y);for(let d=0;d<r._queue.length;d++){let w=r._queue[d],V=w[w.length-1];if(typeof V==="function")V(y)}}function o(r,y,D){b(r,y,D),r.onerror(y)}}),os=j((_,e)=>{var{kForOnEventAttribute:S,kListener:t}=C_(),s=Symbol("kCode"),i=Symbol("kData"),C=Symbol("kError"),n=Symbol("kMessage"),$=Symbol("kReason"),A=Symbol("kTarget"),B=Symbol("kType"),c=Symbol("kWasClean");class a{constructor(E){this[A]=null,this[B]=E}get target(){return this[A]}get type(){return this[B]}}Object.defineProperty(a.prototype,"target",{enumerable:!0}),Object.defineProperty(a.prototype,"type",{enumerable:!0});class u extends a{constructor(E,T={}){super(E);this[s]=T.code===void 0?0:T.code,this[$]=T.reason===void 0?"":T.reason,this[c]=T.wasClean===void 0?!1:T.wasClean}get code(){return this[s]}get reason(){return this[$]}get wasClean(){return this[c]}}Object.defineProperty(u.prototype,"code",{enumerable:!0}),Object.defineProperty(u.prototype,"reason",{enumerable:!0}),Object.defineProperty(u.prototype,"wasClean",{enumerable:!0});class v extends a{constructor(E,T={}){super(E);this[C]=T.error===void 0?null:T.error,this[n]=T.message===void 0?"":T.message}get error(){return this[C]}get message(){return this[n]}}Object.defineProperty(v.prototype,"error",{enumerable:!0}),Object.defineProperty(v.prototype,"message",{enumerable:!0});class O extends a{constructor(E,T={}){super(E);this[i]=T.data===void 0?null:T.data}get data(){return this[i]}}Object.defineProperty(O.prototype,"data",{enumerable:!0});var p={addEventListener(E,T,f={}){for(let o of this.listeners(E))if(!f[S]&&o[t]===T&&!o[S])return;let b;if(E==="message")b=function(r,y){let D=new O("message",{data:y?r:r.toString()});D[A]=this,F(T,this,D)};else if(E==="close")b=function(r,y){let D=new u("close",{code:r,reason:y.toString(),wasClean:this._closeFrameReceived&&this._closeFrameSent});D[A]=this,F(T,this,D)};else if(E==="error")b=function(r){let y=new v("error",{error:r,message:r.message});y[A]=this,F(T,this,y)};else if(E==="open")b=function(){let r=new a("open");r[A]=this,F(T,this,r)};else return;if(b[S]=!!f[S],b[t]=T,f.once)this.once(E,b);else this.on(E,b)},removeEventListener(E,T){for(let f of this.listeners(E))if(f[t]===T&&!f[S]){this.removeListener(E,f);break}}};e.exports={CloseEvent:u,ErrorEvent:v,Event:a,EventTarget:p,MessageEvent:O};function F(E,T,f){if(typeof E==="object"&&E.handleEvent)E.handleEvent.call(E,f);else E.call(T,f)}}),be=j((_,e)=>{var{tokenChars:S}=h_();function t(C,n,$){if(C[n]===void 0)C[n]=[$];else C[n].push($)}function s(C){let n=Object.create(null),$=Object.create(null),A=!1,B=!1,c=!1,a,u,v=-1,O=-1,p=-1,F=0;for(;F<C.length;F++)if(O=C.charCodeAt(F),a===void 0)if(p===-1&&S[O]===1){if(v===-1)v=F}else if(F!==0&&(O===32||O===9)){if(p===-1&&v!==-1)p=F}else if(O===59||O===44){if(v===-1)throw SyntaxError(`Unexpected character at index ${F}`);if(p===-1)p=F;let T=C.slice(v,p);if(O===44)t(n,T,$),$=Object.create(null);else a=T;v=p=-1}else throw SyntaxError(`Unexpected character at index ${F}`);else if(u===void 0)if(p===-1&&S[O]===1){if(v===-1)v=F}else if(O===32||O===9){if(p===-1&&v!==-1)p=F}else if(O===59||O===44){if(v===-1)throw SyntaxError(`Unexpected character at index ${F}`);if(p===-1)p=F;if(t($,C.slice(v,p),!0),O===44)t(n,a,$),$=Object.create(null),a=void 0;v=p=-1}else if(O===61&&v!==-1&&p===-1)u=C.slice(v,F),v=p=-1;else throw SyntaxError(`Unexpected character at index ${F}`);else if(B){if(S[O]!==1)throw SyntaxError(`Unexpected character at index ${F}`);if(v===-1)v=F;else if(!A)A=!0;B=!1}else if(c)if(S[O]===1){if(v===-1)v=F}else if(O===34&&v!==-1)c=!1,p=F;else if(O===92)B=!0;else throw SyntaxError(`Unexpected character at index ${F}`);else if(O===34&&C.charCodeAt(F-1)===61)c=!0;else if(p===-1&&S[O]===1){if(v===-1)v=F}else if(v!==-1&&(O===32||O===9)){if(p===-1)p=F}else if(O===59||O===44){if(v===-1)throw SyntaxError(`Unexpected character at index ${F}`);if(p===-1)p=F;let T=C.slice(v,p);if(A)T=T.replace(/\\/g,""),A=!1;if(t($,u,T),O===44)t(n,a,$),$=Object.create(null),a=void 0;u=void 0,v=p=-1}else throw SyntaxError(`Unexpected character at index ${F}`);if(v===-1||c||O===32||O===9)throw SyntaxError("Unexpected end of input");if(p===-1)p=F;let E=C.slice(v,p);if(a===void 0)t(n,E,$);else{if(u===void 0)t($,E,!0);else if(A)t($,u,E.replace(/\\/g,""));else t($,u,E);t(n,a,$)}return n}function i(C){return Object.keys(C).map((n)=>{let $=C[n];if(!Array.isArray($))$=[$];return $.map((A)=>{return[n].concat(Object.keys(A).map((B)=>{let c=A[B];if(!Array.isArray(c))c=[c];return c.map((a)=>a===!0?B:`${B}=${a}`).join("; ")})).join("; ")}).join(", ")}).join(", ")}e.exports={format:i,parse:s}}),ve=j((_,e)=>{var S=K("events"),t=K("https"),s=K("http"),i=K("net"),C=K("tls"),{randomBytes:n,createHash:$}=K("crypto"),{Duplex:A,Readable:B}=K("stream"),{URL:c}=K("url"),a=N_(),u=BS(),v=DS(),{isBlob:O}=h_(),{BINARY_TYPES:p,CLOSE_TIMEOUT:F,EMPTY_BUFFER:E,GUID:T,kForOnEventAttribute:f,kListener:b,kStatusCode:o,kWebSocket:r,NOOP:y}=C_(),{EventTarget:{addEventListener:D,removeEventListener:d}}=os(),{format:w,parse:V}=be(),{toBuffer:m}=X_(),I=Symbol("kAborted"),L=[8,13],G=["CONNECTING","OPEN","CLOSING","CLOSED"],Q=/^[!#$%&'*+\-.0-9A-Z^_`|a-z~]+$/;class g extends S{constructor(R,l,N){super();if(this._binaryType=p[0],this._closeCode=1006,this._closeFrameReceived=!1,this._closeFrameSent=!1,this._closeMessage=E,this._closeTimer=null,this._errorEmitted=!1,this._extensions={},this._paused=!1,this._protocol="",this._readyState=g.CONNECTING,this._receiver=null,this._sender=null,this._socket=null,R!==null){if(this._bufferedAmount=0,this._isServer=!1,this._redirects=0,l===void 0)l=[];else if(!Array.isArray(l))if(typeof l==="object"&&l!==null)N=l,l=[];else l=[l];S_(this,R,l,N)}else this._autoPong=N.autoPong,this._closeTimeout=N.closeTimeout,this._isServer=!0}get binaryType(){return this._binaryType}set binaryType(R){if(!p.includes(R))return;if(this._binaryType=R,this._receiver)this._receiver._binaryType=R}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(R,l,N){let W=new u({allowSynchronousEvents:N.allowSynchronousEvents,binaryType:this.binaryType,extensions:this._extensions,isServer:this._isServer,maxPayload:N.maxPayload,skipUTF8Validation:N.skipUTF8Validation}),H=new v(R,this._extensions,N.generateMask);if(this._receiver=W,this._sender=H,this._socket=R,W[r]=this,H[r]=this,R[r]=this,W.on("conclude",bt),W.on("drain",vt),W.on("error",pt),W.on("message",ut),W.on("ping",Ot),W.on("pong",lt),H.onerror=dt,R.setTimeout)R.setTimeout(0);if(R.setNoDelay)R.setNoDelay();if(l.length>0)R.unshift(l);R.on("close",ze),R.on("data",M_),R.on("end",je),R.on("error",Je),this._readyState=g.OPEN,this.emit("open")}emitClose(){if(!this._socket){this._readyState=g.CLOSED,this.emit("close",this._closeCode,this._closeMessage);return}if(this._extensions[a.extensionName])this._extensions[a.extensionName].cleanup();this._receiver.removeAllListeners(),this._readyState=g.CLOSED,this.emit("close",this._closeCode,this._closeMessage)}close(R,l){if(this.readyState===g.CLOSED)return;if(this.readyState===g.CONNECTING){z(this,this._req,"WebSocket was closed before the connection was established");return}if(this.readyState===g.CLOSING){if(this._closeFrameSent&&(this._closeFrameReceived||this._receiver._writableState.errorEmitted))this._socket.end();return}this._readyState=g.CLOSING,this._sender.close(R,l,!this._isServer,(N)=>{if(N)return;if(this._closeFrameSent=!0,this._closeFrameReceived||this._receiver._writableState.errorEmitted)this._socket.end()}),xe(this)}pause(){if(this.readyState===g.CONNECTING||this.readyState===g.CLOSED)return;this._paused=!0,this._socket.pause()}ping(R,l,N){if(this.readyState===g.CONNECTING)throw Error("WebSocket is not open: readyState 0 (CONNECTING)");if(typeof R==="function")N=R,R=l=void 0;else if(typeof l==="function")N=l,l=void 0;if(typeof R==="number")R=R.toString();if(this.readyState!==g.OPEN){Ce(this,R,N);return}if(l===void 0)l=!this._isServer;this._sender.ping(R||E,l,N)}pong(R,l,N){if(this.readyState===g.CONNECTING)throw Error("WebSocket is not open: readyState 0 (CONNECTING)");if(typeof R==="function")N=R,R=l=void 0;else if(typeof l==="function")N=l,l=void 0;if(typeof R==="number")R=R.toString();if(this.readyState!==g.OPEN){Ce(this,R,N);return}if(l===void 0)l=!this._isServer;this._sender.pong(R||E,l,N)}resume(){if(this.readyState===g.CONNECTING||this.readyState===g.CLOSED)return;if(this._paused=!1,!this._receiver._writableState.needDrain)this._socket.resume()}send(R,l,N){if(this.readyState===g.CONNECTING)throw Error("WebSocket is not open: readyState 0 (CONNECTING)");if(typeof l==="function")N=l,l={};if(typeof R==="number")R=R.toString();if(this.readyState!==g.OPEN){Ce(this,R,N);return}let W={binary:typeof R!=="string",mask:!this._isServer,compress:!0,fin:!0,...l};if(!this._extensions[a.extensionName])W.compress=!1;this._sender.send(R||E,W,N)}terminate(){if(this.readyState===g.CLOSED)return;if(this.readyState===g.CONNECTING){z(this,this._req,"WebSocket was closed before the connection was established");return}if(this._socket)this._readyState=g.CLOSING,this._socket.destroy()}}Object.defineProperty(g,"CONNECTING",{enumerable:!0,value:G.indexOf("CONNECTING")}),Object.defineProperty(g.prototype,"CONNECTING",{enumerable:!0,value:G.indexOf("CONNECTING")}),Object.defineProperty(g,"OPEN",{enumerable:!0,value:G.indexOf("OPEN")}),Object.defineProperty(g.prototype,"OPEN",{enumerable:!0,value:G.indexOf("OPEN")}),Object.defineProperty(g,"CLOSING",{enumerable:!0,value:G.indexOf("CLOSING")}),Object.defineProperty(g.prototype,"CLOSING",{enumerable:!0,value:G.indexOf("CLOSING")}),Object.defineProperty(g,"CLOSED",{enumerable:!0,value:G.indexOf("CLOSED")}),Object.defineProperty(g.prototype,"CLOSED",{enumerable:!0,value:G.indexOf("CLOSED")}),["binaryType","bufferedAmount","extensions","isPaused","protocol","readyState","url"].forEach((R)=>{Object.defineProperty(g.prototype,R,{enumerable:!0})}),["open","error","close","message"].forEach((R)=>{Object.defineProperty(g.prototype,`on${R}`,{enumerable:!0,get(){for(let l of this.listeners(R))if(l[f])return l[b];return null},set(l){for(let N of this.listeners(R))if(N[f]){this.removeListener(R,N);break}if(typeof l!=="function")return;this.addEventListener(R,l,{[f]:!0})}})}),g.prototype.addEventListener=D,g.prototype.removeEventListener=d,e.exports=g;function S_(R,l,N,W){let H={allowSynchronousEvents:!0,autoPong:!0,closeTimeout:F,protocolVersion:L[1],maxPayload:104857600,skipUTF8Validation:!1,perMessageDeflate:!0,followRedirects:!1,maxRedirects:10,...W,socketPath:void 0,hostname:void 0,protocol:void 0,timeout:void 0,method:"GET",host:void 0,path:void 0,port:void 0};if(R._autoPong=H.autoPong,R._closeTimeout=H.closeTimeout,!L.includes(H.protocolVersion))throw RangeError(`Unsupported protocol version: ${H.protocolVersion} (supported versions: ${L.join(", ")})`);let M;if(l instanceof c)M=l;else try{M=new c(l)}catch{throw SyntaxError(`Invalid URL: ${l}`)}if(M.protocol==="http:")M.protocol="ws:";else if(M.protocol==="https:")M.protocol="wss:";R._url=M.href;let T_=M.protocol==="wss:",f_=M.protocol==="ws+unix:",l_;if(M.protocol!=="ws:"&&!T_&&!f_)l_=`The URL's protocol must be one of "ws:", "wss:", "http:", "https:", or "ws+unix:"`;else if(f_&&!M.pathname)l_="The URL's pathname is empty";else if(M.hash)l_="The URL contains a fragment identifier";if(l_){let P=SyntaxError(l_);if(R._redirects===0)throw P;else{$_(R,P);return}}let Ze=T_?443:80,Qe=n(16).toString("base64"),Ye=T_?t.request:s.request,d_=new Set,w_;if(H.createConnection=H.createConnection||(T_?ie:se),H.defaultPort=H.defaultPort||Ze,H.port=M.port||Ze,H.host=M.hostname.startsWith("[")?M.hostname.slice(1,-1):M.hostname,H.headers={...H.headers,"Sec-WebSocket-Version":H.protocolVersion,"Sec-WebSocket-Key":Qe,Connection:"Upgrade",Upgrade:"websocket"},H.path=M.pathname+M.search,H.timeout=H.handshakeTimeout,H.perMessageDeflate)w_=new a({...H.perMessageDeflate,isServer:!1,maxPayload:H.maxPayload}),H.headers["Sec-WebSocket-Extensions"]=w({[a.extensionName]:w_.offer()});if(N.length){for(let P of N){if(typeof P!=="string"||!Q.test(P)||d_.has(P))throw SyntaxError("An invalid or duplicated subprotocol was specified");d_.add(P)}H.headers["Sec-WebSocket-Protocol"]=N.join(",")}if(H.origin)if(H.protocolVersion<13)H.headers["Sec-WebSocket-Origin"]=H.origin;else H.headers.Origin=H.origin;if(M.username||M.password)H.auth=`${M.username}:${M.password}`;if(f_){let P=H.path.split(":");H.socketPath=P[0],H.path=P[1]}let k;if(H.followRedirects){if(R._redirects===0){R._originalIpc=f_,R._originalSecure=T_,R._originalHostOrSocketPath=f_?H.socketPath:M.host;let P=W&&W.headers;if(W={...W,headers:{}},P)for(let[x,E_]of Object.entries(P))W.headers[x.toLowerCase()]=E_}else if(R.listenerCount("redirect")===0){let P=f_?R._originalIpc?H.socketPath===R._originalHostOrSocketPath:!1:R._originalIpc?!1:M.host===R._originalHostOrSocketPath;if(!P||R._originalSecure&&!T_){if(delete H.headers.authorization,delete H.headers.cookie,!P)delete H.headers.host;H.auth=void 0}}if(H.auth&&!W.headers.authorization)W.headers.authorization="Basic "+Buffer.from(H.auth).toString("base64");if(k=R._req=Ye(H),R._redirects)R.emit("redirect",R.url,k)}else k=R._req=Ye(H);if(H.timeout)k.on("timeout",()=>{z(R,k,"Opening handshake has timed out")});if(k.on("error",(P)=>{if(k===null||k[I])return;k=R._req=null,$_(R,P)}),k.on("response",(P)=>{let x=P.headers.location,E_=P.statusCode;if(x&&H.followRedirects&&E_>=300&&E_<400){if(++R._redirects>H.maxRedirects){z(R,k,"Maximum redirects exceeded");return}k.abort();let g_;try{g_=new c(x,l)}catch(_S){let F_=SyntaxError(`Invalid URL: ${x}`);$_(R,F_);return}S_(R,g_,N,W)}else if(!R.emit("unexpected-response",k,P))z(R,k,`Unexpected server response: ${P.statusCode}`)}),k.on("upgrade",(P,x,E_)=>{if(R.emit("upgrade",P),R.readyState!==g.CONNECTING)return;k=R._req=null;let g_=P.headers.upgrade;if(g_===void 0||g_.toLowerCase()!=="websocket"){z(R,x,"Invalid Upgrade header");return}let _S=$("sha1").update(Qe+T).digest("base64");if(P.headers["sec-websocket-accept"]!==_S){z(R,x,"Invalid Sec-WebSocket-Accept header");return}let F_=P.headers["sec-websocket-protocol"],H_;if(F_!==void 0){if(!d_.size)H_="Server sent a subprotocol but none was requested";else if(!d_.has(F_))H_="Server sent an invalid subprotocol"}else if(d_.size)H_="Server sent no subprotocol";if(H_){z(R,x,H_);return}if(F_)R._protocol=F_;let eS=P.headers["sec-websocket-extensions"];if(eS!==void 0){if(!w_){z(R,x,"Server sent a Sec-WebSocket-Extensions header but no extension was requested");return}let re;try{re=V(eS)}catch($e){z(R,x,"Invalid Sec-WebSocket-Extensions header");return}let SS=Object.keys(re);if(SS.length!==1||SS[0]!==a.extensionName){z(R,x,"Server indicated an extension that was not requested");return}try{w_.accept(re[a.extensionName])}catch($e){z(R,x,"Invalid Sec-WebSocket-Extensions header");return}R._extensions[a.extensionName]=w_}R.setSocket(x,E_,{allowSynchronousEvents:H.allowSynchronousEvents,generateMask:H.generateMask,maxPayload:H.maxPayload,skipUTF8Validation:H.skipUTF8Validation})}),H.finishRequest)H.finishRequest(k,R);else k.end()}function $_(R,l){R._readyState=g.CLOSING,R._errorEmitted=!0,R.emit("error",l),R.emitClose()}function se(R){return R.path=R.socketPath,i.connect(R)}function ie(R){if(R.path=void 0,!R.servername&&R.servername!=="")R.servername=i.isIP(R.host)?"":R.host;return C.connect(R)}function z(R,l,N){R._readyState=g.CLOSING;let W=Error(N);if(Error.captureStackTrace(W,z),l.setHeader){if(l[I]=!0,l.abort(),l.socket&&!l.socket.destroyed)l.socket.destroy();process.nextTick($_,R,W)}else l.destroy(W),l.once("error",R.emit.bind(R,"error")),l.once("close",R.emitClose.bind(R))}function Ce(R,l,N){if(l){let W=O(l)?l.size:m(l).length;if(R._socket)R._sender._bufferedBytes+=W;else R._bufferedAmount+=W}if(N){let W=Error(`WebSocket is not open: readyState ${R.readyState} (${G[R.readyState]})`);process.nextTick(N,W)}}function bt(R,l){let N=this[r];if(N._closeFrameReceived=!0,N._closeMessage=l,N._closeCode=R,N._socket[r]===void 0)return;if(N._socket.removeListener("data",M_),process.nextTick(Ke,N._socket),R===1005)N.close();else N.close(R,l)}function vt(){let R=this[r];if(!R.isPaused)R._socket.resume()}function pt(R){let l=this[r];if(l._socket[r]!==void 0)l._socket.removeListener("data",M_),process.nextTick(Ke,l._socket),l.close(R[o]);if(!l._errorEmitted)l._errorEmitted=!0,l.emit("error",R)}function ke(){this[r].emitClose()}function ut(R,l){this[r].emit("message",R,l)}function Ot(R){let l=this[r];if(l._autoPong)l.pong(R,!this._isServer,y);l.emit("ping",R)}function lt(R){this[r].emit("pong",R)}function Ke(R){R.resume()}function dt(R){let l=this[r];if(l.readyState===g.CLOSED)return;if(l.readyState===g.OPEN)l._readyState=g.CLOSING,xe(l);if(this._socket.end(),!l._errorEmitted)l._errorEmitted=!0,l.emit("error",R)}function xe(R){R._closeTimer=setTimeout(R._socket.destroy.bind(R._socket),R._closeTimeout)}function ze(){let R=this[r];if(this.removeListener("close",ze),this.removeListener("data",M_),this.removeListener("end",je),R._readyState=g.CLOSING,!this._readableState.endEmitted&&!R._closeFrameReceived&&!R._receiver._writableState.errorEmitted&&this._readableState.length!==0){let l=this.read(this._readableState.length);R._receiver.write(l)}if(R._receiver.end(),this[r]=void 0,clearTimeout(R._closeTimer),R._receiver._writableState.finished||R._receiver._writableState.errorEmitted)R.emitClose();else R._receiver.on("error",ke),R._receiver.on("finish",ke)}function M_(R){if(!this[r]._receiver.write(R))this.pause()}function je(){let R=this[r];R._readyState=g.CLOSING,R._receiver.end(),this.end()}function Je(){let R=this[r];if(this.removeListener("error",Je),this.on("error",y),R)R._readyState=g.CLOSING,this.destroy()}}),ns=j((_,e)=>{var S=ve(),{Duplex:t}=K("stream");function s($){$.emit("close")}function i(){if(!this.destroyed&&this._writableState.finished)this.destroy()}function C($){if(this.removeListener("error",C),this.destroy(),this.listenerCount("error")===0)this.emit("error",$)}function n($,A){let B=!0,c=new t({...A,autoDestroy:!1,emitClose:!1,objectMode:!1,writableObjectMode:!1});return $.on("message",function(u,v){let O=!v&&c._readableState.objectMode?u.toString():u;if(!c.push(O))$.pause()}),$.once("error",function(u){if(c.destroyed)return;B=!1,c.destroy(u)}),$.once("close",function(){if(c.destroyed)return;c.push(null)}),c._destroy=function(a,u){if($.readyState===$.CLOSED){u(a),process.nextTick(s,c);return}let v=!1;if($.once("error",function(p){v=!0,u(p)}),$.once("close",function(){if(!v)u(a);process.nextTick(s,c)}),B)$.terminate()},c._final=function(a){if($.readyState===$.CONNECTING){$.once("open",function(){c._final(a)});return}if($._socket===null)return;if($._socket._writableState.finished){if(a(),c._readableState.endEmitted)c.destroy()}else $._socket.once("finish",function(){a()}),$.close()},c._read=function(){if($.isPaused)$.resume()},c._write=function(a,u,v){if($.readyState===$.CONNECTING){$.once("open",function(){c._write(a,u,v)});return}$.send(a,v)},c.on("end",i),c.on("error",C),c}e.exports=n}),TS=j((_,e)=>{var{tokenChars:S}=h_();function t(s){let i=new Set,C=-1,n=-1,$=0;for($;$<s.length;$++){let B=s.charCodeAt($);if(n===-1&&S[B]===1){if(C===-1)C=$}else if($!==0&&(B===32||B===9)){if(n===-1&&C!==-1)n=$}else if(B===44){if(C===-1)throw SyntaxError(`Unexpected character at index ${$}`);if(n===-1)n=$;let c=s.slice(C,n);if(i.has(c))throw SyntaxError(`The "${c}" subprotocol is duplicated`);i.add(c),C=n=-1}else throw SyntaxError(`Unexpected character at index ${$}`)}if(C===-1||n!==-1)throw SyntaxError("Unexpected end of input");let A=s.slice(C,$);if(i.has(A))throw SyntaxError(`The "${A}" subprotocol is duplicated`);return i.add(A),i}e.exports={parse:t}}),ys=j((_,e)=>{var S=K("events"),t=K("http"),{Duplex:s}=K("stream"),{createHash:i}=K("crypto"),C=be(),n=N_(),$=TS(),A=ve(),{CLOSE_TIMEOUT:B,GUID:c,kWebSocket:a}=C_(),u=/^[+/0-9A-Za-z]{22}==$/,v=0,O=1,p=2;class F extends S{constructor(r,y){super();if(r={allowSynchronousEvents:!0,autoPong:!0,maxPayload:104857600,skipUTF8Validation:!1,perMessageDeflate:!1,handleProtocols:null,clientTracking:!0,closeTimeout:B,verifyClient:null,noServer:!1,backlog:null,server:null,host:null,path:null,port:null,WebSocket:A,...r},r.port==null&&!r.server&&!r.noServer||r.port!=null&&(r.server||r.noServer)||r.server&&r.noServer)throw TypeError('One and only one of the "port", "server", or "noServer" options must be specified');if(r.port!=null)this._server=t.createServer((D,d)=>{let w=t.STATUS_CODES[426];d.writeHead(426,{"Content-Length":w.length,"Content-Type":"text/plain"}),d.end(w)}),this._server.listen(r.port,r.host,r.backlog,y);else if(r.server)this._server=r.server;if(this._server){let D=this.emit.bind(this,"connection");this._removeListeners=E(this._server,{listening:this.emit.bind(this,"listening"),error:this.emit.bind(this,"error"),upgrade:(d,w,V)=>{this.handleUpgrade(d,w,V,D)}})}if(r.perMessageDeflate===!0)r.perMessageDeflate={};if(r.clientTracking)this.clients=new Set,this._shouldEmitClose=!1;this.options=r,this._state=v}address(){if(this.options.noServer)throw Error('The server is operating in "noServer" mode');if(!this._server)return null;return this._server.address()}close(r){if(this._state===p){if(r)this.once("close",()=>{r(Error("The server is not running"))});process.nextTick(T,this);return}if(r)this.once("close",r);if(this._state===O)return;if(this._state=O,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(T,this);else this._shouldEmitClose=!0;else process.nextTick(T,this)}else{let y=this._server;this._removeListeners(),this._removeListeners=this._server=null,y.close(()=>{T(this)})}}shouldHandle(r){if(this.options.path){let y=r.url.indexOf("?");if((y!==-1?r.url.slice(0,y):r.url)!==this.options.path)return!1}return!0}handleUpgrade(r,y,D,d){y.on("error",f);let w=r.headers["sec-websocket-key"],V=r.headers.upgrade,m=+r.headers["sec-websocket-version"];if(r.method!=="GET"){o(this,r,y,405,"Invalid HTTP method");return}if(V===void 0||V.toLowerCase()!=="websocket"){o(this,r,y,400,"Invalid Upgrade header");return}if(w===void 0||!u.test(w)){o(this,r,y,400,"Missing or invalid Sec-WebSocket-Key header");return}if(m!==13&&m!==8){o(this,r,y,400,"Missing or invalid Sec-WebSocket-Version header",{"Sec-WebSocket-Version":"13, 8"});return}if(!this.shouldHandle(r)){b(y,400);return}let I=r.headers["sec-websocket-protocol"],L=new Set;if(I!==void 0)try{L=$.parse(I)}catch(g){o(this,r,y,400,"Invalid Sec-WebSocket-Protocol header");return}let G=r.headers["sec-websocket-extensions"],Q={};if(this.options.perMessageDeflate&&G!==void 0){let g=new n({...this.options.perMessageDeflate,isServer:!0,maxPayload:this.options.maxPayload});try{let S_=C.parse(G);if(S_[n.extensionName])g.accept(S_[n.extensionName]),Q[n.extensionName]=g}catch(S_){o(this,r,y,400,"Invalid or unacceptable Sec-WebSocket-Extensions header");return}}if(this.options.verifyClient){let g={origin:r.headers[`${m===8?"sec-websocket-origin":"origin"}`],secure:!!(r.socket.authorized||r.socket.encrypted),req:r};if(this.options.verifyClient.length===2){this.options.verifyClient(g,(S_,$_,se,ie)=>{if(!S_)return b(y,$_||401,se,ie);this.completeUpgrade(Q,w,L,r,y,D,d)});return}if(!this.options.verifyClient(g))return b(y,401)}this.completeUpgrade(Q,w,L,r,y,D,d)}completeUpgrade(r,y,D,d,w,V,m){if(!w.readable||!w.writable)return w.destroy();if(w[a])throw Error("server.handleUpgrade() was called more than once with the same socket, possibly due to a misconfiguration");if(this._state>v)return b(w,503);let L=["HTTP/1.1 101 Switching Protocols","Upgrade: websocket","Connection: Upgrade",`Sec-WebSocket-Accept: ${i("sha1").update(y+c).digest("base64")}`],G=new this.options.WebSocket(null,void 0,this.options);if(D.size){let Q=this.options.handleProtocols?this.options.handleProtocols(D,d):D.values().next().value;if(Q)L.push(`Sec-WebSocket-Protocol: ${Q}`),G._protocol=Q}if(r[n.extensionName]){let Q=r[n.extensionName].params,g=C.format({[n.extensionName]:[Q]});L.push(`Sec-WebSocket-Extensions: ${g}`),G._extensions=r}if(this.emit("headers",L,d),w.write(L.concat(`\r
34
34
  `).join(`\r
35
- `)),w.removeListener("error",D),I.setSocket(w,V,{allowSynchronousEvents:this.options.allowSynchronousEvents,maxPayload:this.options.maxPayload,skipUTF8Validation:this.options.skipUTF8Validation}),this.clients)this.clients.add(I),I.on("close",()=>{if(this.clients.delete(I),this._shouldEmitClose&&!this.clients.size)process.nextTick(T,this)});m(I,d)}}e.exports=b;function v(r,a){for(let f of Object.keys(a))r.on(f,a[f]);return function(){for(let d of Object.keys(a))r.removeListener(d,a[d])}}function T(r){r._state=F,r.emit("close")}function D(){this.destroy()}function E(r,a,f,d){f=f||S.STATUS_CODES[a],d={Connection:"close","Content-Type":"text/html","Content-Length":Buffer.byteLength(f),...d},r.once("finish",r.destroy),r.end(`HTTP/1.1 ${a} ${S.STATUS_CODES[a]}\r
35
+ `)),w.removeListener("error",f),G.setSocket(w,V,{allowSynchronousEvents:this.options.allowSynchronousEvents,maxPayload:this.options.maxPayload,skipUTF8Validation:this.options.skipUTF8Validation}),this.clients)this.clients.add(G),G.on("close",()=>{if(this.clients.delete(G),this._shouldEmitClose&&!this.clients.size)process.nextTick(T,this)});m(G,d)}}e.exports=F;function E(r,y){for(let D of Object.keys(y))r.on(D,y[D]);return function(){for(let d of Object.keys(y))r.removeListener(d,y[d])}}function T(r){r._state=p,r.emit("close")}function f(){this.destroy()}function b(r,y,D,d){D=D||t.STATUS_CODES[y],d={Connection:"close","Content-Type":"text/html","Content-Length":Buffer.byteLength(D),...d},r.once("finish",r.destroy),r.end(`HTTP/1.1 ${y} ${t.STATUS_CODES[y]}\r
36
36
  `+Object.keys(d).map((w)=>`${w}: ${d[w]}`).join(`\r
37
37
  `)+`\r
38
38
  \r
39
- `+f)}function y(r,a,f,d,w,V){if(r.listenerCount("wsClientError")){let m=Error(w);Error.captureStackTrace(m,y),r.emit("wsClientError",m,f,a)}else E(f,d,w,V)}});QC=s_(is(),1),YC=s_(Ee(),1),_r=s_(w_(),1),er=s_(at(),1),tr=s_(ct(),1),Sr=s_(Rt(),1),bs=s_(Fe(),1),ut=s_(Cs(),1),nt=bs.default;Vs={"Network.setUserAgentOverride":"Page.overrideUserAgent","Network.setCacheDisabled":"Network.setResourceCachingDisabled"},ms={"Network.requestWillBeSent":{walltime:"wallTime"}},Ls={hasUserGesture:!1,redirectHasExtraInfo:!1},Ws={hasExtraInfo:!1},Ps={encodedDataLength:0,shouldReportCorbBlocking:!1},Ms={initialPriority:"Medium",referrerPolicy:"origin"},Us={connectionReused:!1,connectionId:0,fromDiskCache:!1,fromServiceWorker:!1,encodedDataLength:0};Zs={"media-rule":"mediaRule","media-import-rule":"importRule","media-style-node":"inlineSheet","media-link-node":"linkedSheet"};ti={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:""};oi=["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"],ni={"Inspector.enable":{},"Inspector.disable":{},"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:[]}};ai={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;"}});var xt={};_t(xt,{simMiddleware:()=>_C,selectServeSimState:()=>a_,parseForegroundAppLogMessage:()=>Kt,matchInstalledAppByDisplayName:()=>Ui});import{readdirSync as gi,readFileSync as Hi,existsSync as Xt,unlinkSync as Pt}from"fs";import{execSync as c_,spawn as de,exec as hi,execFile as kt}from"child_process";import{tmpdir as Ni}from"os";import{join as He}from"path";import{createServer as Vi}from"net";function Ut(_){return!Mi.test(_)}function Kt(_){let e=/\[app<([^>]+)>:(\d+)\] Setting process visibility to: Foreground/.exec(_);if(!e)return null;return{bundleId:e[1],pid:parseInt(e[2],10)}}function It(_,e){if(Wi.has(e))return Promise.resolve(!0);return new Promise((t)=>{kt("xcrun",["simctl","get_app_container",_,e,"app"],{timeout:2000},(S,i)=>{if(S)return t(!1);let s=i.trim();if(!s)return t(!1);for(let C of Pi)if(Xt(He(s,C)))return t(!0);t(!1)})})}function Gt(_){return _.trim().replace(/\s+/g," ").toLowerCase()}function Ui(_,e){let t=Gt(e);if(!t)return null;for(let[S,i]of Object.entries(_))if([i.CFBundleDisplayName,i.CFBundleName,i.CFBundleExecutable].filter((C)=>typeof C==="string").some((C)=>Gt(C)===t))return i.CFBundleIdentifier||S;return null}function Ii(){let _=Date.now();if(h_.booted&&_-h_.at<1500)return h_.booted;try{let e=c_("xcrun simctl list devices booted -j",{encoding:"utf-8",stdio:["ignore","pipe","pipe"],timeout:3000}),t=JSON.parse(e),S=new Set;for(let i of Object.values(t.devices))for(let s of i)if(s.state==="Booted")S.add(s.udid);return h_={at:_,booted:S},S}catch{return null}}function y_(){let _;try{_=gi(Mt).filter((S)=>S.startsWith("server-")&&S.endsWith(".json"))}catch{return[]}let e=Ii(),t=[];for(let S of _){let i=He(Mt,S);try{let s=JSON.parse(Hi(i,"utf-8"));try{process.kill(s.pid,0)}catch{try{Pt(i)}catch{}continue}if(e&&!e.has(s.device)){try{process.kill(s.pid,"SIGTERM")}catch{}try{Pt(i)}catch{}continue}t.push(s)}catch{}}return t}function a_(_,e){if(e)return _.find((t)=>t.device===e)??null;return _[0]??null}function Gi(_){let e=_.indexOf("?");if(e===-1)return null;return new URLSearchParams(_.slice(e+1)).get("device")}function z_(_,e,t){return`${`${_}${e}`}?device=${encodeURIComponent(t)}`}async function qi(_){return new Promise((e)=>{let t=Vi();t.once("error",()=>e(!1)),t.once("listening",()=>t.close(()=>e(!0))),t.listen(_,"127.0.0.1")})}async function qt(_){let e=`http://127.0.0.1:${_}`;try{let t=await fetch(`${e}/json/version`);if(!t.ok)return null;if((await t.json()).Browser!=="Safari/inspect-webkit")return null;return{port:_,cdpUrl:e,async listTargets(){return(await(await fetch(`${e}/json/list`)).json()).filter((C)=>C.id.startsWith("sim:")).map((C)=>{let $=C.id.split(":")[1],n=C.description?.match(/\(([^)]+)\)/)?.[1];return{id:C.id,title:C.title||C.url||"Untitled",url:/^https?:/i.test(C.url)?C.url:"about:blank",type:C.type||"page",udid:$,bundleId:n}})}}}catch{return null}}async function we(){if(n_)try{return await(await n_).listTargets(),n_}catch{n_=null}return n_=(async()=>{let{startCdpServer:_}=await Promise.resolve().then(() => (Wt(),Lt));for(let e=x_;e<x_+50;e++){if(!await qi(e)){let t=await qt(e);if(t)return t;continue}try{let t=await _({host:"127.0.0.1",port:e});return{port:e,cdpUrl:`http://127.0.0.1:${e}`,async listTargets(){return t.getTargets().filter((S)=>S.source?.kind==="simulator").map((S)=>{let i=S.url??"";return{id:S.targetId,title:S.title||S.appName||i||"Untitled",url:/^https?:/i.test(i)?i:"about:blank",type:S.type||"page",appName:S.appName,bundleId:S.bundleId,udid:S.source?.id,inUseByOtherInspector:!!S.inUseByOtherInspector}})},highlightTarget:t.highlightTarget?.bind(t),releaseHighlight:t.releaseHighlight?.bind(t)}}catch(t){if(t?.code==="EADDRINUSE"){let S=await qt(e);if(S)return S;continue}throw t}}throw Error(`No available inspect-webkit port found in ${x_}-${x_+49}`)})().catch((_)=>{throw n_=null,_}),n_}function Xi(_,e,t){let S=new URL(`${_}/inspector.html`,"http://serve-sim.local");return S.searchParams.set("ws",`${e}/devtools/page/${t}`),`${S.pathname}${S.search}`}function ki(_,e){return`127.0.0.1:${e}`}function Ki(){try{let _=process.argv;if(_[1]&&Xt(_[1]))return _[1]}catch{}return"serve-sim"}function xi(){if(!ge)ge=Buffer.from("PCFkb2N0eXBlIGh0bWw+CjxodG1sPjxoZWFkPgo8bWV0YSBjaGFyc2V0PSJ1dGYtOCI+CjxtZXRhIG5hbWU9InZpZXdwb3J0IiBjb250ZW50PSJ3aWR0aD1kZXZpY2Utd2lkdGgsaW5pdGlhbC1zY2FsZT0xIj4KPHRpdGxlPlNpbXVsYXRvciBQcmV2aWV3PC90aXRsZT4KPGxpbmsgcmVsPSJpY29uIiB0eXBlPSJpbWFnZS94LWljb24iIGhyZWY9ImRhdGE6aW1hZ2UveC1pY29uO2Jhc2U2NCxBQUFCQUFVQUVCQUFBQUVBSUFBNEJnQUFWZ0FBQUNBZ0FBQUJBQ0FBUEFvQUFJNEdBQUF3TUFBQUFRQWdBS0VQQUFES0VBQUFnSUFBQUFFQUlBQ2NPQUFBYXlBQUFBQUFBQUFCQUNBQS9wb0FBQWRaQUFDSlVFNUhEUW9hQ2dBQUFBMUpTRVJTQUFBQUVBQUFBQkFJQmdBQUFCL3ovMkVBQUFBRVowRk5RUUFBc1k4TC9HRUZBQUFBSUdOSVVrMEFBSG9tQUFDQWhBQUErZ0FBQUlEb0FBQjFNQUFBNm1BQUFEcVlBQUFYY0p5NlVUd0FBQUI0WlZoSlprMU5BQ29BQUFBSUFBUUJHZ0FGQUFBQUFRQUFBRDRCR3dBRkFBQUFBUUFBQUVZQktBQURBQUFBQVFBQ0FBQ0hhUUFFQUFBQUFRQUFBRTRBQUFBQUFBQUFrQUFBQUFFQUFBQ1FBQUFBQVFBRG9BRUFBd0FBQUFFQUFRQUFvQUlBQkFBQUFBRUFBQUFRb0FNQUJBQUFBQUVBQUFBUUFBQUFBT2JZeVZNQUFBQUpjRWhaY3dBQUZpVUFBQllsQVVsU0pQQUFBQUtjYVZSWWRGaE5URHBqYjIwdVlXUnZZbVV1ZUcxd0FBQUFBQUE4ZURwNGJYQnRaWFJoSUhodGJHNXpPbmc5SW1Ga2IySmxPbTV6T20xbGRHRXZJaUI0T25odGNIUnJQU0pZVFZBZ1EyOXlaU0EyTGpBdU1DSStDaUFnSUR4eVpHWTZVa1JHSUhodGJHNXpPbkprWmowaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1UazVPUzh3TWk4eU1pMXlaR1l0YzNsdWRHRjRMVzV6SXlJK0NpQWdJQ0FnSUR4eVpHWTZSR1Z6WTNKcGNIUnBiMjRnY21SbU9tRmliM1YwUFNJaUNpQWdJQ0FnSUNBZ0lDQWdJSGh0Ykc1ek9uUnBabVk5SW1oMGRIQTZMeTl1Y3k1aFpHOWlaUzVqYjIwdmRHbG1aaTh4TGpBdklnb2dJQ0FnSUNBZ0lDQWdJQ0I0Yld4dWN6cGxlR2xtUFNKb2RIUndPaTh2Ym5NdVlXUnZZbVV1WTI5dEwyVjRhV1l2TVM0d0x5SStDaUFnSUNBZ0lDQWdJRHgwYVdabU9saFNaWE52YkhWMGFXOXVQakUwTkR3dmRHbG1aanBZVW1WemIyeDFkR2x2Ymo0S0lDQWdJQ0FnSUNBZ1BIUnBabVk2V1ZKbGMyOXNkWFJwYjI0K01UUTBQQzkwYVdabU9sbFNaWE52YkhWMGFXOXVQZ29nSUNBZ0lDQWdJQ0E4ZEdsbVpqcFNaWE52YkhWMGFXOXVWVzVwZEQ0eVBDOTBhV1ptT2xKbGMyOXNkWFJwYjI1VmJtbDBQZ29nSUNBZ0lDQWdJQ0E4WlhocFpqcFFhWGhsYkZsRWFXMWxibk5wYjI0K01qVTJQQzlsZUdsbU9sQnBlR1ZzV1VScGJXVnVjMmx2Ymo0S0lDQWdJQ0FnSUNBZ1BHVjRhV1k2VUdsNFpXeFlSR2x0Wlc1emFXOXVQakkxTmp3dlpYaHBaanBRYVhobGJGaEVhVzFsYm5OcGIyNCtDaUFnSUNBZ0lDQWdJRHhsZUdsbU9rTnZiRzl5VTNCaFkyVStNVHd2WlhocFpqcERiMnh2Y2xOd1lXTmxQZ29nSUNBZ0lDQThMM0prWmpwRVpYTmpjbWx3ZEdsdmJqNEtJQ0FnUEM5eVpHWTZVa1JHUGdvOEwzZzZlRzF3YldWMFlUNEs2ZjdKY1FBQUFvSkpSRUZVT0JHbFVzOXJFMEVVL21abWs5MU5paVd4MHRvcVZSRHhvQ0NtSUhnVVdpaWV2UFRrU2NHVENJSUhFUS8xRC9BaWluK0NKdzhxZUZERVMrMUZnZ0VWV3l5MDBDYllObW1iNXNkbXM3c3pmck90cGZjK2RuYmY3SHZ2ZTkvN1pvQWptamhjYndEMWJIZTNVRzA2N2tZdkVBR0RXMTB1T2x1ZWIzUWNoN1dKWS9YRE5RY0FkNVo2NTc1MW5PZk5VSlFTcmQxWUE0WlJUZFNFdnJhWlVvWUNwdXlZK1A3bU5XL0pBcVVBNXN1c2M4bC85R0ZGdUpNNk1QeHBZRmdvNUY1QzZqUFRScVRIMVEwL05UZmZUV05tSm5Fc3l0UGlyV0tyTGt2OVVHT2lZSEJqUkNLeDg2UkZUS0NmSWRqbkRZMjVob0FqWkduWXVYSjhIZGhJQVdvdDRTVmRPQ01zbUM0S1hQVU5hcDBFemI2QXNCeEp3WFVraGpnS3V1U2g0S2kyOExoREN0Q2pTSjFkNE1GRmdTZm5iUVV3VjR2d2FqbUJiMXNUd0ZFSzFSYjlEdU1xVFVsZktVRFE0Nnc5ZHJFZGFGYkFJVTlpY2xTZzZOdHNnNGdxanUwQXl3Mmd6WHpFTm5PZndmWTJ2YTVBMUdlRHlLVEtEeWlEVTVrRWl0MnRpRW9LVEExTHhLSEV5N0pCUWZ1b0hRYXc2b2NjcGRIUkZFeGd2YVh4ZlMyQ2w3RWtMU2hucHlBNnpNTHRhM2dwOS84YWtBSGxRa0lHOVRibmxScTFIWU9mVmY1WDdNcVI4bVJqcmRyV2tJSEE2QW1nekgySzArMTNRektPRjFZTnlqbnlaY2NmYXhxVkZRZDFKc2QyL2tGN2ZCcXJUWWxjRnZGQTBBZ3RZQW93UHYrbThhZjBzUEoxTVg5OS9oYzdFU05Lc2xEc3pnZVMreW9QM2ZCcUtsY2luM1FxTjBkLzExOFRZTy9NNkp5NXUzZ2g5c2RlUUdRdUcyTmNLNXk5QTVRai9UcEVVWTRNZlJWVnhnYzI3NzEvZkhiQk1qZ0FzQnVhT0gzNzQwa0Izek1KYnhITmRZRkJya0krYTNKZTBIczdPL1dYZ2YwRHR4bEh0SDg0aWhRSmZTYXpqUUFBQUFCSlJVNUVya0pnZ29sUVRrY05DaG9LQUFBQURVbElSRklBQUFBZ0FBQUFJQWdHQUFBQWMzcDY5QUFBQUFSblFVMUJBQUN4and2OFlRVUFBQUFnWTBoU1RRQUFlaVlBQUlDRUFBRDZBQUFBZ09nQUFIVXdBQURxWUFBQU9wZ0FBQmR3bkxwUlBBQUFBSGhsV0VsbVRVMEFLZ0FBQUFnQUJBRWFBQVVBQUFBQkFBQUFQZ0ViQUFVQUFBQUJBQUFBUmdFb0FBTUFBQUFCQUFJQUFJZHBBQVFBQUFBQkFBQUFUZ0FBQUFBQUFBQ1FBQUFBQVFBQUFKQUFBQUFCQUFPZ0FRQURBQUFBQVFBQkFBQ2dBZ0FFQUFBQUFRQUFBQ0NnQXdBRUFBQUFBUUFBQUNBQUFBQUFmZ3ZhVWdBQUFBbHdTRmx6QUFBV0pRQUFGaVVCU1ZJazhBQUFBcHhwVkZoMFdFMU1PbU52YlM1aFpHOWlaUzU0YlhBQUFBQUFBRHg0T25odGNHMWxkR0VnZUcxc2JuTTZlRDBpWVdSdlltVTZibk02YldWMFlTOGlJSGc2ZUcxd2RHczlJbGhOVUNCRGIzSmxJRFl1TUM0d0lqNEtJQ0FnUEhKa1pqcFNSRVlnZUcxc2JuTTZjbVJtUFNKb2RIUndPaTh2ZDNkM0xuY3pMbTl5Wnk4eE9UazVMekF5THpJeUxYSmtaaTF6ZVc1MFlYZ3Ribk1qSWo0S0lDQWdJQ0FnUEhKa1pqcEVaWE5qY21sd2RHbHZiaUJ5WkdZNllXSnZkWFE5SWlJS0lDQWdJQ0FnSUNBZ0lDQWdlRzFzYm5NNmRHbG1aajBpYUhSMGNEb3ZMMjV6TG1Ga2IySmxMbU52YlM5MGFXWm1MekV1TUM4aUNpQWdJQ0FnSUNBZ0lDQWdJSGh0Ykc1ek9tVjRhV1k5SW1oMGRIQTZMeTl1Y3k1aFpHOWlaUzVqYjIwdlpYaHBaaTh4TGpBdklqNEtJQ0FnSUNBZ0lDQWdQSFJwWm1ZNldGSmxjMjlzZFhScGIyNCtNVFEwUEM5MGFXWm1PbGhTWlhOdmJIVjBhVzl1UGdvZ0lDQWdJQ0FnSUNBOGRHbG1aanBaVW1WemIyeDFkR2x2Ymo0eE5EUThMM1JwWm1ZNldWSmxjMjlzZFhScGIyNCtDaUFnSUNBZ0lDQWdJRHgwYVdabU9sSmxjMjlzZFhScGIyNVZibWwwUGpJOEwzUnBabVk2VW1WemIyeDFkR2x2YmxWdWFYUStDaUFnSUNBZ0lDQWdJRHhsZUdsbU9sQnBlR1ZzV1VScGJXVnVjMmx2Ymo0eU5UWThMMlY0YVdZNlVHbDRaV3haUkdsdFpXNXphVzl1UGdvZ0lDQWdJQ0FnSUNBOFpYaHBaanBRYVhobGJGaEVhVzFsYm5OcGIyNCtNalUyUEM5bGVHbG1PbEJwZUdWc1dFUnBiV1Z1YzJsdmJqNEtJQ0FnSUNBZ0lDQWdQR1Y0YVdZNlEyOXNiM0pUY0dGalpUNHhQQzlsZUdsbU9rTnZiRzl5VTNCaFkyVStDaUFnSUNBZ0lEd3ZjbVJtT2tSbGMyTnlhWEIwYVc5dVBnb2dJQ0E4TDNKa1pqcFNSRVkrQ2p3dmVEcDRiWEJ0WlhSaFBncnAvc2x4QUFBR2hrbEVRVlJZQ2UxV3pZOFVSUlIvVlYwOTNiUExmbVVYa0JESTdvVUVSU1ZySUFvbTNreU1GeEtQbmpRbXhJTlhUTlNMQ1RHR2kvNEZHaE1UalViQ3djQkJFMDFBQ0pKZEVrRUlBbUVGQVlGZGxtVm1kcVkvcXN2ZnIyYUc2VmtXcm5yd0pkWFZYZjNxdmQvN3JCTDVuLzVsRDZoSDZYZUgzNGtPN056LzdKKzE0TWtrTUJPdFhFVlpManJIaHJ3UVNUQUtMWkppWGs0eFk3MkZueTE4NXdxL2pFdXlMSjgzeXA1YlAvdjE2Wm05ZTdQVmRLMEs0T1ByQzd1T0xvOGN1RnhUTDlSRmF4ZEFxSVZDMXhiaE9yUEdPbDh0RkhQdURnV3BBZmRBcGJKRllZdzdVY21XOXQzWU5YNThKWWlIQU95ZnU3WHJjR1BpK3pNMVBXWmJWclJ5WW93U2E1MTBGVk1JTndhQjhrb0wvQ3RURzRDU1BPZTZFaFVGWXFSWXJOcDdyMTdmUFg2aXpBc245dWo0OFcrcXgycWpuL3kycE1lS0p2eE5qWEFwaDFzeENueHpjTDM3WHA1Ny9FNG9LeTMwV0t0WTgrbms1ei9GUFkwQ1lDVTZNanc5UFZjek8yemRDb3p6NURFQVIwQXNaUmZncjBlUGRkZU5UVWVXeGw0UERLSGh1eWZFMElabVI3cDJhaHJmRDBMUkIrQjJNdkpVM1dxbEVUenVnM0V5Q0k0M3BnSlpXMEdzb2F4TWREVnBCUzRQL2o1eTVvdUx1ZHhwQWJ6blF3aE5xS3dNYnNPVzFRRWtFa3dnNUZLQlpPNWh0bThjVURLOVJvbEdtaGY4U2VMa2hmS0JqODdFWDN6bnA0NlVURldWTERTZGhCMDNjREk2bVBCOG5VZWZCNUxNUlRrUUYwazc0UnJJNGlZc24yOWlEUW1KaFBiV2hqQ0pTbFRIQlc2RkN6UTBtVEFRQ3psRkM2T3JCVEd6cVlzZUNjQW15RHRhbWlvWlFORGYzNmJsdVhFbG13ZGhwNFZLcCtWR3M1Q2pONEVNTmFpN0FPaUZMZ2lzYWEwbFJQd3RLeC9ERllTTEdhVXAyWU9zOEd0ZGJQNGp4eVp1eU9DRkZ6Y3AyYmVWTzdyVUxwZ3RJNEdjdXRHU0t6V1J5TFQvdHozUUNRL1kwVGtrcXNCeXlGSWNUQ2FRZ2piZnlkcWYvdGtQQU5ZckQ4SUp3dTZKWWt2R2VkZmZiMXE1ZGs5SlhFRWY4TVo3cnZZR2NMQUpEY1RPTnlqS1V4MEJCQ09VWDZLSEFEZ3dPVEFWSFVZbVlqZkdqQzB6T29TYnA0WUQyWXhSRGZrTkpSZ1d2QWxLcFo0cHVZY21WRUY1SnVqTkJvM0kyME9aandVQUFheDM0eEJIV2daKzlucGZqNUJBaDdQOXZyWWxGcVZEcVJpRUJkYVJyMHhNVHFiTUs1TmF2anlYeTZHTERsN1JYbVpBZVNYcTgwREtFTUFEUGs2bzR4U1NVeUNtQjJrNXJTUTFtNW5VWUtHQjBCNkJpVWpBUkFBQnZEV0VaSHo3NlJCblFpYUhMcUFER0NQbWNRQmFLTGNjSUh6NUFFZ0NFQzBvWWd4cExFUEFwcmVFSEZoTTRQcE9FaEtFMTkxQlF3RGtSZW5BWTRIc1hxL2x5TytaV0NSMzNER2l3OXJmaXJNVkh1RHgyc3djV2k3aUNkZnpZS0psTmRUMjNXV3NoVlJib2c0S2YwUUJSQUcwRG51Y0NtVVFNVjJHVVRINlNwbjZRd0NFTklWaEFIaHBZVjVHSENqUUFvQkRnMWRJZ29WNklUZFJobkVGYnVsYTVMSDA1d09UVXBFRmZpOGdCMmtqbGNjQmFBRUFlbzNQVkFMZ1JhTU9hMkdMWklCcWVRT0JSYmRyVHY1YUxDU09BQWdhWXJpSDNiR1pXa2t6NnpGMW9SakVqaTI4VmtkcGpnQkEyWHk4OTNrQTVWY3d5d01vWi9Ob0FuVUQ3WlE1a0VCQmhud2d3SVdHa3IrWGxBd1BCakkrRk1yY2dwVmJPSDIyYlF4eFlBV3lXSWNndUI5UmtBMWpSazVmemFTQUM1bUFsUlZIWng4QVpWM0taQXRRaGdWQXBMaGJKYWhwRnFCR2ZjTTRDYkREd0pjREZXUTAwSjY4bE1rZmQranFRSzdNRjdKOW84akVtb3Evd0xCSXpsN0w1ZHgxSllNUitCR21XTEhaOTZnUFFOWklGM0ljRlJxSk4zT3BrRk9iUkVaeGZTZ0FpRVJ3cDY4bTh0MnZLZTk5MGtTWHltQnhCZVdtd0pQZzVEdDJvWkNoS0lkQ1ZFc2psM3JLRUJsVUZnV3d4TzI4RjlaNTlBR1F4dng1SmVza3dPRnhGeTcrOEdDS294U1hFNWhpa1ZIc2lHZ0JLSzBCOUFERVBkU0MyNXEzbG9IbkdSbXBRTmhQVVBwWUQzQ280UWRjWDBCbWpNUWFjcmZPbHdIQXBoNDF6aHljTVhsckZvZXBCMkVrUkNoaW5HWVJSZ3doVmFtYUt0eklob0phNzdaV3psRFlIVnpuL3dEdHNIMjJJSFRZc3pacXpZN09INXp0YVdSd1M3UTg5M002dm5YUFpSMnQyNFBhalhnRkFuNWYrN1FDeWV5SDd6cDQ1M0hNTlY2L3V2ODRrOWlNZUo0NHRuVVR5dWJSN1A1a2NPYXR6ejU0L1VLYm8vMmsvSWRvNnMxZlhpNUduL2tJaFRhTkM3NEtFU2hleTltU3k4UlRqd0o4dldObTF2T2J0YzhtU1dDeHp0MjY0V1RtQ1RuNzNsZnZQdjlEZVQvZlZ3WEFINk9UMjBlSFhqcXdVOFVidG9hVjZnVEtDeFZFMFQzU0FNYkVSQ3BJekZNUjMreE5KblFGY2ljMXJqay9ZRytmVjhmMm5mejJ4NW1sM3M3LzMvNURIdmdIYWtRU1dLMGpJVXdBQUFBQVNVVk9SSzVDWUlLSlVFNUhEUW9hQ2dBQUFBMUpTRVJTQUFBQU1BQUFBREFJQmdBQUFGY0MrWWNBQUFBRVowRk5RUUFBc1k4TC9HRUZBQUFBSUdOSVVrMEFBSG9tQUFDQWhBQUErZ0FBQUlEb0FBQjFNQUFBNm1BQUFEcVlBQUFYY0p5NlVUd0FBQUI0WlZoSlprMU5BQ29BQUFBSUFBUUJHZ0FGQUFBQUFRQUFBRDRCR3dBRkFBQUFBUUFBQUVZQktBQURBQUFBQVFBQ0FBQ0hhUUFFQUFBQUFRQUFBRTRBQUFBQUFBQUFrQUFBQUFFQUFBQ1FBQUFBQVFBRG9BRUFBd0FBQUFFQUFRQUFvQUlBQkFBQUFBRUFBQUF3b0FNQUJBQUFBQUVBQUFBd0FBQUFBQW02MUswQUFBQUpjRWhaY3dBQUZpVUFBQllsQVVsU0pQQUFBQUtjYVZSWWRGaE5URHBqYjIwdVlXUnZZbVV1ZUcxd0FBQUFBQUE4ZURwNGJYQnRaWFJoSUhodGJHNXpPbmc5SW1Ga2IySmxPbTV6T20xbGRHRXZJaUI0T25odGNIUnJQU0pZVFZBZ1EyOXlaU0EyTGpBdU1DSStDaUFnSUR4eVpHWTZVa1JHSUhodGJHNXpPbkprWmowaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1UazVPUzh3TWk4eU1pMXlaR1l0YzNsdWRHRjRMVzV6SXlJK0NpQWdJQ0FnSUR4eVpHWTZSR1Z6WTNKcGNIUnBiMjRnY21SbU9tRmliM1YwUFNJaUNpQWdJQ0FnSUNBZ0lDQWdJSGh0Ykc1ek9uUnBabVk5SW1oMGRIQTZMeTl1Y3k1aFpHOWlaUzVqYjIwdmRHbG1aaTh4TGpBdklnb2dJQ0FnSUNBZ0lDQWdJQ0I0Yld4dWN6cGxlR2xtUFNKb2RIUndPaTh2Ym5NdVlXUnZZbVV1WTI5dEwyVjRhV1l2TVM0d0x5SStDaUFnSUNBZ0lDQWdJRHgwYVdabU9saFNaWE52YkhWMGFXOXVQakUwTkR3dmRHbG1aanBZVW1WemIyeDFkR2x2Ymo0S0lDQWdJQ0FnSUNBZ1BIUnBabVk2V1ZKbGMyOXNkWFJwYjI0K01UUTBQQzkwYVdabU9sbFNaWE52YkhWMGFXOXVQZ29nSUNBZ0lDQWdJQ0E4ZEdsbVpqcFNaWE52YkhWMGFXOXVWVzVwZEQ0eVBDOTBhV1ptT2xKbGMyOXNkWFJwYjI1VmJtbDBQZ29nSUNBZ0lDQWdJQ0E4WlhocFpqcFFhWGhsYkZsRWFXMWxibk5wYjI0K01qVTJQQzlsZUdsbU9sQnBlR1ZzV1VScGJXVnVjMmx2Ymo0S0lDQWdJQ0FnSUNBZ1BHVjRhV1k2VUdsNFpXeFlSR2x0Wlc1emFXOXVQakkxTmp3dlpYaHBaanBRYVhobGJGaEVhVzFsYm5OcGIyNCtDaUFnSUNBZ0lDQWdJRHhsZUdsbU9rTnZiRzl5VTNCaFkyVStNVHd2WlhocFpqcERiMnh2Y2xOd1lXTmxQZ29nSUNBZ0lDQThMM0prWmpwRVpYTmpjbWx3ZEdsdmJqNEtJQ0FnUEM5eVpHWTZVa1JHUGdvOEwzZzZlRzF3YldWMFlUNEs2ZjdKY1FBQUMrdEpSRUZVYUFYdFdWMklIV2NaZnIvNVBidG5mMDIyS1UzU2xqYjlTUk1DcFdCU1c5QkFiU0V0MUp2Y0ZoUzhLSUpDUVJTdDRJVUI5Y0tmNG9XVW9ONUpJc1ZDSU1YRzJpYUlwaWxwU2tvYTA2aHBaZFBkVFRiWjdPNDVlMmJtekkvUDg4NlozZGt6czBrS3hSdnpuWjJaYjc2ZjkzdWY5L2Y3WmtWdWxWc1MrUCtXZ1BtMDhETVJJd2YzdWxPUFArY3NMSXpiMTJ6SExNNHZtcmtTSWRhWDMxRXAzb3MyZmNmTkdSck9yblhqYk1pYVMrVFFvZTdKbDEvdWxzamNWUFdtQUV4UC82bDV3SC8waVU5Q2IvZHNhTGEyWXVzMnNhMkJvQ3RPa29vRlVCTGp5bEJKV2NjelJzWFllUjNqSkVFYnIyN3Z3anl0NHpYMVBZbURJTzJJbFY2eVRIYld5YUkzbzdOLy8vUE1jMCsxYjRUaWhnQitkZW5xbmxQUjZJL2VYN0Flbm81RVdpR1lTa1JjVHlRTXJrL2VjZkwrbU9oUTFsck1iNEFXYUJzckIyMWpvR1BTVTE1My9zWEpYWjg3bk0rdXY2OUZVMGYvZE9yYTgyKzJSMzV4L0lyeGdrNHNvQzhHTXpqSjk0MkVJZVIzbmVJNE9mbVlLcmxPcWFObGZFZGNxS0tSdEw5MWNlZndyOWVhVHA1cXk4OC9tbnI2TDYyUlh4NmRFcThMNXNtTDFXTytkc0puM0ppRnNVUWQ4UUtyK2RLbW81ZjJyRVcrRnNEQkl3ZEhUeWZyZm54ODFyaUc5Z0lCWnJEWlQzT2xuM0o4TFcyc0hYV05HN2xqUDlueTB1R1JPaEMxQVA2MStRdFBubGx5dHdldFdBd1lVYy9zZnhMWFozalZya0VoTE1VU0czZDc1NzRkVDlVQjZMblo2cTdMMXZEdTZTVVJHd1JNamZreXdsaVk2VU0xakR5MUJlYm05UG9zVldIdEtQVXBOelhTUVhpaTh4bzZXVjlKS0NodmVEZWEvOURYSlJVQWU4SDN0Y2g5c0EwQUt2MitHVEU0M2psaHlkTjMyc0pmdWhZQXpDdDRXUk5rYWN6eHkwWmUrMDlNcUJVUUdTSlVJdDRENkVKZ1JyVlVLZ0MyN2QwMmNMWnJKbUxFYnF1UE94Skh4Sk05bXl4NWdER2VraWtSNjY4V3NyelJHQWFINWpwTFRrNkpUSGN5Y2NobXVUQzlHVE94WWNlT3hzenAwNnR5UXdXQWJOdmxHY2RxZVBRT1o3V0xLQUJ0TXJJRXFTQ0pxZ25oWGw1TzY0YkJ0b1RnZW1NY0lHQ1NhMkk5RHh5NXRLVnlBU0RmTmdPeS9URlBiZ1RBODI2emc0NDRJVTJJNmJKVXVuaE5RQ3pvV3RMS2pBSkllbU80SkNXNVV2QlN2Q3UrS2tpT05aYWxERE9sUkFHaUR0Yk43TldDRTl1bXp6bjIwSVorM1ZSOUlISjlrekJuTVh2Q3VZclNoVGx0SEJDWjhETVpSYk9IZHd1eGo3OE1SdDdHK0NXWWxLdkpndk95WlZ0bWYxNktKOTlVUndDUUFVQW1BZDlwM1dyaEsrdm04ekNhM1pibTBxSkpueFVUaXFMSU1DYlRnZFdKc1NhWi8rNTJTNzV4dndVMW0xSkM2MDNIbUVXRXBsY3ZoUExoUWlZK2paZ3I5a0tZOHI4TW9yZSs5b0VXQUhCNFFKNFQzR0JMeW40WmcvWXQ2L1A2QU9naEthV2dHZ0E5TUg5WFUrU0ZyYlkwS3dyczBjSUM0M0NheHpZNGNtSnFTUm8rUkFVcktFSWlOZERQUDJjU0lNYzUwRUFNdTFlaDZiNkptaW9oS0N1dXQyVHhxR2lBSFJtSVVKMGt5SXc2aWdXOEVyMWljdi9UaC9rc0JyRUVxWXQ5RE5IbUs2c0RvMXJtZytRSWtDYWtDblBSZ0xWNHFTbWhXaTRNeWVYNVJWOHRBQ1lPRFF1UVBqV3RhYjQzZzJ1VXBaa3pna1hSemh3eDMwbkZCV29MRXFVeGNHeXVnZFhMa3lFTE54dmo2QU1OZEd2WVZoL2dZcVh4Sk5MbjF4ekJVZ0hRaGczQmlaZWx3ZTBDSFVzWlp4VzBGSURlY2luU2J5bHZadWlyN1V6R0lOVjFycEVSN0ZnYjZHQlk3RzFNbFMwR3JnaUVPcURiUmdadVJTbk9CcGJ1Ym5WdFNxT3ZHUEswS2dQa0F5b0EyTXdFcGRHQVhHczlVd0Nrd2NWWG9nb0FLQkJJRWhJYWdlMC8vOGlRM0x1dUllTURDSTlvQSs5YXlqeFJ0cndvRFBBdWkxRW1NemhickljZi9mRmNMUFB3YUI4NWdWclNRcUVWOVY1VDhhZ0FJRWhLazR2RFFuVWxGNTRHYTFJSmE5aFhhbVFoai8xcVpxZ1BRZW9QalhKdUpsMHd4ZE1YaTVwUVhsVlR5Mjg1ZlI1aVJvQnlmRmprL29jOWVmSWVSMTQ2RWN2SkdaaVZabE5NeEJnUFROV2RueW9BcUNhZW9Bb256aldRUzR2Q0xqUkFnYWhRUUJ4L0t0RVVuWE90U1B5R0JZMVFER3d2VU9DbGtDS2JVS2VBMUpFaGFndDJTSi9aQkthL3M4dVRIeDRMNWV4c0lnMFhkUERIYURXRWFUTzR5cVVDZ0JxSUFEVU9RUnpxamFIbkJLSWs0MVE1UXl5QmNMazhaeG5WRG5taWxoYVpUV0Z3bWt6Sk1EdldLajBRWko1QTFPbEJtWG5rMlh0c09UTVp3RmNBem5iUVdsOXFBWlExb0NHdHh6eWpVMG9VWkI1M01rbVFCTUxtR0FoYUFSeVNBQXF2TGRaVklHVTB5bjB1Q0FMUUdvVkFoa1UyRDl0eUczYU9sMEdQOUhFRUZ3LzVxTDlVQU5DRUdBa014WWxMa3dzMWdhdXJBRWdpQjdDODN5Y0FiRHM0cG8xTlhnd2ZzT244MXkwRVE4bm4yaVJOMWJBQ1FEdWNlQnhSYkhvUk9RaGhsb3pTaFBwTEJVQUxJN2lWTGlTdlR6QkRFNG9BakptWlRtdmpscHNTR2NBRk1VVVl0d2lKUmVpd25WU2xtaSs0N0FsOTY5Tm9PSnV5eWdHd2hTYmxJekh3UUpYeGd3RG9Ncy9kRkFENmdNWmlTaEFFaW5CSzZlS2NyU2FVSWJQWldJVCt0YnhOQUIvc24yc2prV0d3bzJFUWkwUEVPWXVnMVN1cm8xSU9qc0tnMGptWSs2TWhQRHNRaGtteENOYUdFbXBMUlFNYWhYaUFLQUdnR1hFckhkS1pxV2Y4V1doTUVQNHkyRG9YWm1URkxrS3VJSkY1a0pwRERaQjVjcC9mOUVGR1dUSms2Nkt1N3lTS1loQlhzWHVXRENCbUZ5QU1HQSt0Z09iYXJGRkJCVURIOGJJTU1aeE1FM24reEdZTFJDaGhQWjlpWlRxeFJpaHd6NlNUd2FRSVlCNzdlWmNMZ2pKTkFiYUZmWkVsNjRZY0RZVUVlM1V4aGpCQVFCSGtwb2czQlVxOFk4T1dmRHdiSXlTTERBNWlKZENqckhSTTM2MEN3QVFoTE1Ud3B3QUtFQVFRUUFPTVFqUUJMa1F6b21uUkx5QlBaV294dE1UQlhBZVowRUk0V1Qvc3lOaWdrYitkRCtRQ21OcXl3Wk5kOS9weXRXWExwWGtnNWdJS0JCeUN4UUY4MEJxRWJiNzZiZ3NIUW9DR2FnMHVLRFJ6YXI2a1ZRQjBybDVNUnh6a01tb0FKd2h1ZVQzRVpmVUJTRTIzMmoycnBvQUpyQXRRdEt3WWpGUHBTZVlpSzd0eSs1Z0RqY1J5NEoydXpDNVp5S3dEOHU1RmtjbHJzWHp4UGx2dVd1L0p6SHdxN1pBT2oxMHZwRDB4Yk9USW1Vam1PcDZNREZCcjRBRW0xWEFsSG5FdVliWFZwUUlnbkh3N0NscHBFSElvUWcrbE8zT0Y1dUZBUXBRNHFCWDJtZzlCRzA1VjhJVzVWaXJETGlUWWRLU0RrSFQwZzY1OE9FTTdSRlJCT3o3d2FEaThkQzJWQThkRHVYZEM1SUhiSFprWXNtR2FxVnhaN01vYjcwY3kyN1prY01DVmJrQk5BeHdFbUlacHNIRHFPSUwwNmxJQk1IdnVYRENjSnJQd0lmMXd4Uno0eVpWVTlyOFZ5ak03T0J5eW9zZFNaTFJLNk4zR3k4ZFhZdm5aNFFVNVBZazlESTZlQ2NZMGZGY0djYVVBQ0RsQ2ZaeUVoQVNSOHR6N2J3ajAvRlFNczhIT05JZ29MM0dodVNHWUVXTVh6WmhMTUNjMjdHVDI4bHRuS3R1aENnQ003MXBSNTd6bE5ML0U1RVF1dVpsNzVVUWlyNTFxaTJmbFoyQVAzOFJEZkZMT1J6RCtjNHZzeXVpUXE3YlBEcGR4bGdVQXRHZzA2bFhSNVBIckdIelVBNGNaTm9MOFpSakRQS1A1aCtOUjU1YThhY0lQRDBHSCtleVZleDBBU1Jlbmo5bWo2Nyt1SVJOalNiaUJzQkxESnlMZFltS25DU21HRVdOUlhoeUVDUjlNTU9vUUZCY0dWcFVnL1RRdmFDd1ZqdU5GUjdWd0htQWg4eXNGd1FGengzMUVvMmo2MkVyN1NtMkZnNVUyYWIrei80Z2RkLzVoR2VRLzlZV2NHYmdVdEdIamNpQTlXeVZJS2ZKeUFJaE1rT2xpenMwK2kyeGZOOTUzWE5uWURNN092Zi9iSXlVV2w2czlIUysvYTZWOThlMzIyTlpuWnAzbUhWOUpFa1J6bWdBbGcwdlZpeWNsbmlCaEZlOHF1YjR4UERLeW5hZTY4cmh5blRUWG9wVmx0ank0TVl2dlNOLzc1dS8zZmZYRWFpN3p0MW9Oc091ai9ZKytZaGJPdnRqd3M5aEFDdityd2x4UU9QTzJPN1A0YnYvYzkzL3p3dWRmV1d0OU5kZTFPdEh1M2ZPMW8zdk51a2UrRjV2bVE0ejFtZ2Z3aEE5TGdIODM5YXk4bGtUbFB6U1lWeTU4cFgveFgwd1JBaVMzRUEzWSs5aWd5TWFSOWdkandYdjdmdmZ0eC9sRm1ubTd0dHdJQUNlWjhXMVBiQjdiK1lNdm0rRzdIeGQ3YUV0bTNQVytiemZDeU5qSXl0QmlQUmxFUk4zLzBHUVlrUGo1aEV3eUxQSXNrWC9VTW1uRHk1SzBtd1MrMjUxdG1QWS8zZkRDWHlmZjJQZjZzZGRmbjhUNmZiQlg0NmhmZWZXWThodHRhYkE1TVRIZ3JyL1B6NXh4QkhRWDUvcGVnQytQUkIzQzFKcytXVVdGWDdmWndUWjhGODBzcTV2RlMzTkpOSDgrUEhQbWNnZk4yRTJ0TFhIMDNTcTNKSEJMQWlVSi9CY1lHc1pyMjk1WnJRQUFBQUJKUlU1RXJrSmdnb2xRVGtjTkNob0tBQUFBRFVsSVJGSUFBQUNBQUFBQWdBZ0dBQUFBd3o1aHl3QUFBQVJuUVUxQkFBQ3hqd3Y4WVFVQUFBQWdZMGhTVFFBQWVpWUFBSUNFQUFENkFBQUFnT2dBQUhVd0FBRHFZQUFBT3BnQUFCZHduTHBSUEFBQUFIaGxXRWxtVFUwQUtnQUFBQWdBQkFFYUFBVUFBQUFCQUFBQVBnRWJBQVVBQUFBQkFBQUFSZ0VvQUFNQUFBQUJBQUlBQUlkcEFBUUFBQUFCQUFBQVRnQUFBQUFBQUFDUUFBQUFBUUFBQUpBQUFBQUJBQU9nQVFBREFBQUFBUUFCQUFDZ0FnQUVBQUFBQVFBQUFJQ2dBd0FFQUFBQUFRQUFBSUFBQUFBQW1nTzgxZ0FBQUFsd1NGbHpBQUFXSlFBQUZpVUJTVklrOEFBQUFweHBWRmgwV0UxTU9tTnZiUzVoWkc5aVpTNTRiWEFBQUFBQUFEeDRPbmh0Y0cxbGRHRWdlRzFzYm5NNmVEMGlZV1J2WW1VNmJuTTZiV1YwWVM4aUlIZzZlRzF3ZEdzOUlsaE5VQ0JEYjNKbElEWXVNQzR3SWo0S0lDQWdQSEprWmpwU1JFWWdlRzFzYm5NNmNtUm1QU0pvZEhSd09pOHZkM2QzTG5jekxtOXlaeTh4T1RrNUx6QXlMekl5TFhKa1ppMXplVzUwWVhndGJuTWpJajRLSUNBZ0lDQWdQSEprWmpwRVpYTmpjbWx3ZEdsdmJpQnlaR1k2WVdKdmRYUTlJaUlLSUNBZ0lDQWdJQ0FnSUNBZ2VHMXNibk02ZEdsbVpqMGlhSFIwY0RvdkwyNXpMbUZrYjJKbExtTnZiUzkwYVdabUx6RXVNQzhpQ2lBZ0lDQWdJQ0FnSUNBZ0lIaHRiRzV6T21WNGFXWTlJbWgwZEhBNkx5OXVjeTVoWkc5aVpTNWpiMjB2WlhocFppOHhMakF2SWo0S0lDQWdJQ0FnSUNBZ1BIUnBabVk2V0ZKbGMyOXNkWFJwYjI0K01UUTBQQzkwYVdabU9saFNaWE52YkhWMGFXOXVQZ29nSUNBZ0lDQWdJQ0E4ZEdsbVpqcFpVbVZ6YjJ4MWRHbHZiajR4TkRROEwzUnBabVk2V1ZKbGMyOXNkWFJwYjI0K0NpQWdJQ0FnSUNBZ0lEeDBhV1ptT2xKbGMyOXNkWFJwYjI1VmJtbDBQakk4TDNScFptWTZVbVZ6YjJ4MWRHbHZibFZ1YVhRK0NpQWdJQ0FnSUNBZ0lEeGxlR2xtT2xCcGVHVnNXVVJwYldWdWMybHZiajR5TlRZOEwyVjRhV1k2VUdsNFpXeFpSR2x0Wlc1emFXOXVQZ29nSUNBZ0lDQWdJQ0E4WlhocFpqcFFhWGhsYkZoRWFXMWxibk5wYjI0K01qVTJQQzlsZUdsbU9sQnBlR1ZzV0VScGJXVnVjMmx2Ymo0S0lDQWdJQ0FnSUNBZ1BHVjRhV1k2UTI5c2IzSlRjR0ZqWlQ0eFBDOWxlR2xtT2tOdmJHOXlVM0JoWTJVK0NpQWdJQ0FnSUR3dmNtUm1Pa1JsYzJOeWFYQjBhVzl1UGdvZ0lDQThMM0prWmpwU1JFWStDand2ZURwNGJYQnRaWFJoUGdycC9zbHhBQUEwNWtsRVFWUjRBZTJkYVpBa3gzWGZzKytlYzYvWjJRT0xhNEVsUUFJbUtkQ0VMRktrUk5BMmd3ckxsTU1mek1PbUltelJKaDBNaDBnNS9FRmhpYklWVmppc2d3aUhlSVJOU3FBc0tpZ0xFbmpia0hpSUpnaVFPQWlBd3BKWVhBdnNpY1VlTTdPN2MvWDA0Zi92WldaMWRVLzNUTmRzTHdTU2t6TlZlYjE4NytWN0wxOW1WV1ZWTzdjWk5pV3dLWUZOQ1d4S1lGTUNteExZbE1DbUJEWWxzQ21CVFFsc1NtQlRBcHNTMkpUQXBnUTJKYkFwZ1I5OUNlUmVZbDE4cWZGenVjVFR1bHlJcytMOTJ4SjRwQnZqTk44STV5VWpvRFJqUTBqVDMzNTlCdjJMM3U5ZXpBeWhuNnRRUkRveDdsWnk0YWYydWZMUC9PcEhxN3R1dnJsYTNUbFJHUzFQbGk4MG02VjhvVnFvNXh1RlZqMlhiK1J5dVh6ZDVlcEY1eHIxdXVGYWdWVGQwd3VSWmF4Y3FYUmNqNWxRWGlyNStvV0ZCRVViWHJBUlgyeEd2S0xDWHVYMVpyRkZmYTdsV3ZWV3E1VnJ0SnFOU3FGUnFDODF4c2J5SzNQbnp0ZGFaeTRzdHc0K3RuVGt2LzdiSllIV2REUjBwRU0rWktJaHhEZ05NOVIwVk1oUWthYVFSZngwTEhhMi9JbnZmbmRQYzhldUEvbXg4UnR6b3lQWExkZGIxOVNhK1YzMWh0dldMT1NxdVVLdVhDeTYwbnpORlpvdWwyKzJYTDZKYkZ2K1VOcUdpc283WXFTVmxJVTBlUWdUMnhIU0RlV3JJMUtvS2hlbERtQW9pL0F4SGZNV2kzQWRtSWdqM1VibDFrWXNLV2tIWUxsOHE3bGx3alZtNTl4S3M5R3FpY0NTbUo1eHVlYXBWajczYkc1eDhlbld3c1hIQytkT1BYbjRuOTV5UW0yaXZSVm9yMFBvTGwrSUNobzJoWWdYeGRNSjl6K2ZlT0xHMHM3ZFA3ZGNxdno5UlZlOCtXSTl2MmNoN3dybk5ad3VhaXdzcU51TE9wYlJoRnFWcTg1SmFDYlVLTTBZZ3crcGtDZFkyaWU5dEZRUXFoSzRKQi9xWUdwc1RBckZBQlo5WTJEc0NEQ1IzcXJ5QUlkUlVFZEl3L29TblNXRmd2b3lPZW5jM0FVUGswTWlPdktvbHhqZ2htdmtjODJUdVdiOU1iZXkvSlhDMmJOZmV2WXQxeDVTRGVndnF5RkVSY0hHc0FJNDZaZko3Uk5QUHZucXd0NTk3NXR0bGYvSjJWWis2dmk4Yzg5ZmRPNnMzTzVjcmVVV05LUnFVb0xjcGgraDBreEJybmwwTE8vbVpodUpnSWZGWElKSDNJMVA1TDBCTE1qUEJFa01XeUI1U1dKeVM4R2RuMnU2cGcwRnp3SDBOS01aM1p5c3BLQnByVkRSb1RqZmJKN0pOMWYrb243cTZNZFAvSU1ERDZ1RjJZbGlrMm5TaHlFa2h0MWY4TUZzNDdmdnZudDYrcWRlLzRHWi9NaDdqOVh6Vzc5L3hybm41bHJ1N0ZMTExjcFhOcVJ3UmswTVVRR1VsVXM1TnpidURTRFdEejN1WXdERHB0TTJnRWFIQWF5bWd6SGs1Qmx5cmxET3ViSzhVNkhSbk0zWGx6NjIvRGYzM0g3cTNXOTVRVzJHN2cyR2FRRGdnc0g2SGM4OTkvcjY3ajIvZDdSZXV2WGg1NTE3L0Z6TG5WNXF1bHJ3bVdiOXF5VmdKUmhBNmNmU0FOSUNrUkhJY29yVm5LdU00eEZXN3MrZE92bkJJN2RkL1MxQkRkVUlvbXRKVTk5SU9pcS8rWWZQUC8vTytlbDluLzN1aGRLdFgzckt1WHRQTnR6eGhZWldRRnJKQ1hOZWtNTzB1bzB3KzlKdkl3L1piTGpseFlaYm1OSGxRck4wYTNQWHZzL3V1K2Y1ZDRwM0poS01ZQ2hpSElZQndJaG1MdGU2NDlUcFg1cWJuUDdrZldmeVUzOTF1T1VPemRiZGt0dzlSSWJDcmZEOFdBVzV3N3F1TzVjMGRkWnErU20zYmZxVCsrNDkvUjdKWUdoR2NLa0dnRjZ4eHNZbmp4NTkrK3pranR2dk81MnJmdk40MDUzUXFHZUszMVM4aEhDSm9kbVFON2pRZE10THVhcmJ1dVAyZlY4LytnNmg1SHJwa2ozQnBSZ0F1cVY5ODZNSEQ3MSthV3J2N1ErZXpZMTgrMlRUbmRGOHZ6bnFKWmtoaG1aTGE2aDVIVXU1RVRlOTkvWXJ2M2pvcDRYK2tqM0JSZzBBNVpzQi9QS0hQN3lyY1BVMXR4K2N6MC9kZjdMbHppeEwrWnZEZm9pcWI2UENDSmJuVzFwUGFUcllkODN0TzMvakk5T2hkc01TMzZnQlFCZjM0Mjc2NTcvNGdaTzU4aTMzSDJ1NTUrWDI0OGlQRnZKU2plR2Q4Rkxscng5ZnVzSHNhbG9UTkN2bFd5ci84QjBmOUwzWStGVEE0aTFyZ0RmMDNQcXRyMzN6TmZQVkxlL2hVdThaelZFMU9hUkxIZjFjQnVaMUVIUGI5WElGOEhOd1pRb2RPblU1UWlGRkExckRDSTE2MHhVdUZGeDFiTXQ3ZG4vNi85MzUvTHZlK0pEdzBvWE1GRFppQVBTQjBaK2ZldVVyMy91RWJ2SThmcmJsbGxkYXJpZ1c5RERra2tJMGdKeU1DZUZkcnRCTjUzSVpBTWJNZ3d6NmNxbXlhY3RDMDREV1dhV1IvTmJTZ1ZlL1YrWHYwOEY2QUlsbGt0cEdwZ0N6dE4rNDY2NGI1NHZqLy9nSHVqOTFTb3VUOUlqQzBpLzFpS1B6VXZHczFYN1lQUGVpZGJsbzFPVzJWblJidlZVY2U5c1YvLzBMTndiRlo3YmpyQjRBQW96KzF2UXRQL25XazduODl1ZG14WWl1OVhVSE02UHRDYjVIUUdDTUdrS01mVzY0Witnd1ZtQWJPcGtsTnlBN2NkUmJYMEsvQm15NkRwanVFU3pxZHZwb2ZudnU3N3ptclFJK3FNT21ac1VEVThwcUFEQ1YzNzU5ZTZVMU92bm1FM3FvYzBiMzloRW0vbWNZSVk0WUVGcDZHRWg3NFJEUFpnU2l3OGk5bkFhZ3hYdmlFU09kZ1RYVWkvZFlwcWRMalZwQlQwNjN2TmxOVFgzRW5UbXpyQ3J1RHd3Y3NrNEJ4dis3Zi9NM3Ixak9WMTV4OGp5UGNNT2RQb1E0aE1OR0k5TGhrR2JZQk9BM0JQZzRSOW5RRHVnTUUxOHZYRUV1TWdMNHRqNHBwcCt4cnh1Vkc0T2tvYjBNclVMNXBoM3YveTlYQksxSEd3dlp0YU1zSGdERTVtS21iNzdsd0tJcjdEeWpPYWhCWjlhbXNXNHR1aVlRYXpPTlBUWGowYWtXdTc2d3k2TkZlTnBzT0FnSitEbVl3dUxUeUEzajY5TVFMOU13T3ZLVWlwT3JKQ29JSWh3MUZtTmZzZjVaR0YxRGV5aWFsY0xPeXY2Zk9LQVdUNE54L1padGlDd0dRQ3REUHJwcjF3Mm5XN25pZWJsL2U4YWRpV1NiZUV6bG9vSWxFK1F5cVFYRmJ1MEptTllqNFo0aHlJNjZWSElWNkNxMlVnVzBxMVp5eG4rdFVPaVVXaGZTcm13SG5SUktYOTVWZ01JcjZzdWtudXp4S1B5Q0ZtOEZGVVl3UEp6UGlKY096SU5sbWxoWFBsOHNiSisrUVMzK3J3NkVCcXExMkZhMUQxa05BT1Q1OHVUay9ndTJneWU0c29odGd6R2NhaEM2cXJELzVNNkN1M1U2NzdielBMeFlzRjVZVDFMZFNTVUhwb2pBYVJjRmJ3bERwSkpZbWNJMkxCcTRkN1N4cEkyTUp5KzAzUDI2VmY2OW1icks5T3hmbzU4Nm13SjB5cmU1UzNHeVRsSUl6TE9NVCs0WEpBdDBVQTRjc2hnQVl1SW8xMTM1U3JaeExjbWFtOUdWRFV5eUI2Q0VCQ052bWk2Nlg3ZytwOUdpcldIQzMySTVvN3FleXVoWDNvVWVoaTBraVpCUEkwMm5RM1VrMnFzcWdzUTRRWjBrdW1pb3ZGRjJibXBYem0wZktiaUNIUFVEWjdXN1ZRWnZ1NElFamhoYldFTFdvQ200cFcxMWNzaFhxYWw4alcwMkhSaExGZ013cE5Oalk5VjZvN0JyUWV2TnBvZ1h4WE4zdndlbFRuYzVtSWV2MGhhd04xeVJjeFBhRnJVd0t5dEx5UUw4MGM1U3hZT1M2WUNMdkRMblIxeklQYVpqM05Fb1F5YmlwMGxjVjRDekZHaG9GNXA3MVZUQlBUVlhkN05hUUxObnNIc2RrTVlCbmpXREJLTzd3NUpQY2RxTmoxZmRSWWFtcVdTZ3JrQiswR0I4M2Z5V242azJjb1V0Yk9CRWNReFMyY0dHRHBUS0hUOVd3MWVONXR5MkNlZm10YkFzcTR3QVhtQ1k1a2d6VGNReXlyTWMzVHlDRTlmSkVmSEcrRkpvcEhGQUkvSXVkcDBjbTZ0S2J1TXk4bDJhNzFoQXMraWxJellOd0Uvb1l6ZS8vZkxXSENWSUp5T3Zlek1rTXRuUG9CNGdJczN0dmY2V2Fpdm5xalYxQk8zYkxVNGxOeG9RREVJWWsvTnFpa29UZDZZeUZwZldPUkJUa0FxVzdTcExWYTlPQ20vc3dPckszaVhEcElFbmlJZGQvb25rS0hmT3NCWlYwRzhXd3F3SnFNOGFiS29zdW1ycDJyOWJYWFNmby9uQTNSM1VBQktlSnZidXJlU0toWktNd09XNStiOEJoaE5rSk5RZUl5cHBaU3lkbStLanRkc0lWVjFDSWlSOGxKUjJvT3VYU2RiZGE0a21oWkpMckt5aEh3MnVCS0lCMkFoWFI0c3FMQlh6cmlSRGlMdUQ1UWN5cU01ekIwMmgwVDdLZkhsa3g1NkticzFrQ3BrTm9McDl2RndxdTFKWmJteDhWSlN6eXlsaE1EWkZLRVVKQXNYak1uazZaNk5mTVdYbUptbWxOQ2VMU0dZSS9sSXphTCtmRVNTSUw1RkdDai9LeGJBcFlyNk5VMDlaV2h1WDIwTjV0aHNZZ05BdTFWeUY2NGV5WG5BWkhja1Y2OXRIcEpVa2dDYnBVVkxhbGNoaUFJYXcxYXFXNWhkeitWa3QxTTdOTVBtc1M2T0xaR2NXbDRlQzZ4TkZZZEs4cUh6aUFVaExldDRZSXAwWWQrSVpMRWZiSGxMdVFObVJHUXh0QjFTYlJoelowUU8wcEd6NlI2Z3RhUkY0YmtXR3I0cy9BUlJ3RWVLTjZTQkxBTHl5Vk5KMk1WZFlybzFsMGFlUnlkb2dWeWdWQ3kyOThJUmllTXc1akdBM2s0UUlSYWM5Z0JtQ1RoaEkyd3RzVUVFREN6Ymczd2dabzhGSmpSWFp3azV4WGdxbWxBVXZDMmY2U2Qvc2hBZFFHWXJIVUpnT3Fjb1NtQ3AxSGFpWGpYSlo5V21YMzFsb3lXSUw2SjNiODhZb0hkdG9RQkJnTWVFb0RVNEV4QlJnK0JYVE9STVdhUXdoSWRaT21iUjdsQ2R6Y3F3elptblhXZFBHcEJTTG14UVYzN1FORVZHMTR5NEpTT3VHWFNQYTVuMEJZdUNrVWJCTkFVSVhMejJKRVFCWXJIKzBheU1mS0dVNHVDZUhPL0ZoWUJTWkxVYTdsQXZTZzUvWU9oU3lOcStSSSt0dklrK2ZhRW5ER0FQdWtYZjFkSGxzZWNxNDF4QTlBSGxUanNXQm5oQmpGaEYvd29VS1lobmdNVzMxcGlSU2xLYU1LdUszMHE0MmdLOFIwalJRTmhxT1U0QVpnc3FpQVdEUUtNMHJUZ2taSGUyajlraG5DU1lYa1pNTlJCUUROODlzQUxwVWlXL3ArazRNU01vNnBST3lRUUM4S01KZFJKU0xrdGxSeER1Q1M3cThwRU8rVGh0TlZOZVNHL0I1aUtsUy96RWdWQzZmd0d2RHJCMUZFRTgwNUF3T2FFdWtFRmt5WlF6dDF1dWtVamdFNlVkL1VENTVTT0htaVhYZ0FZeC9tcEdtQTByVGppTGxFa05RY3FCZ2hzUzk1VmJ6OGh1QTAzdmI2b1E5dzlCYjhHbGQ5R1NXRGxsQTBlcmhzb2I1Tmwzejc5TWJzOXYwTUthRVZGVHh5aTA1dDFmczE2b3RWeFpXREFOTE1BUEJMU01keWhGUlNMTUhjVjR2bU00cWdTeTVsUFFLME5ra2JvQkczdmlneklJdjc4eWxxOXJ0MnFsUTN5T0tlRXpEY0NnNkpobFZvRjhiN2ZDbXRLMEJoTU9QZmhWQVFQMVR5Zzc2UjE4eUJYQklKNFhzTTNyMkZucEp3V3RkWExLQ2gvRitJUW9QSldMNUpmWDZYOTFRY1A5aWY5NWRPNVp6dWkzdWR4SUZCTURueGhHR3g3b1dicHFZUWVsMDlHTFRmZk5relQycmQ4M0xyS28xNUZoWm14R0FzMXZ4U1I0czdXQkcxODV1SU9XVmoxYk5DTlFCU05tQnJKUzJTMXpEckV3d2JCYUJYQ0hRZjRadzFtRnN4Z1RPWnRackNQOE1ocWFaQW9KbmdCS3ZGZFJGQXdTdXBPNTkrTmFpKzhWcnNuYXZQd1Z1cG5FajVlVjYvZnJxaWFxNzg2a2w5K2pabXF2bzhXNWUwNkZORFF4QkJUc25pbWVjaVRWZlphTXgzUlh6TStrQ3c3REdTWGdBOTZhcmxPaVkwcVVaSDRlOFlHd1JLQkY0RDZBQ2dkUFdycWdDbnF3ZWdPY3hoa1JSMXBCNURiQlNhK1NxY0NpaU1CMWsySk11Z3VSZlh3Qnh2L1NLdkh2M0VKWGZUWEJVaXY3NWE2dnU4RnpOemVvckV5VjVGek1DN0Mwb0pKRVMrUzRFeU5Dc3VxdmNpbnVVeGFKT1BNSml1THNVYjRiZ2pjQ21BQnBCa0FNWmlrZVM1bEU3RWFwMC9aQVkwL3FncXlBeUd3QVlqSGVkYkpwZWhUSlZJQmhHLzNiTitlL2EzN1hwSWdVMnJPUTJ2VmIrcXFteSsvSXppMjVFNzlnWHVNMnFZWjZYWkUzbEVxNlhMejFJTXI1RDZoV2xGcEpFMzRKWW9UaG9MQjBGZzZNb2VlUUxPUjNSQU1JaXl2aERqdGdwWkZlUlZ0bDZnVXRsTTRMMUFIdlViOGdBN01iTk9rUlpLTkN4dWhaOVYybkJkN1hlYzM4eHdyN3hnbWpxRlNwNW5hSVl5T3ZPU2g1ZjcvL0ZnaCtKcTNrUnh5WjlyNEpPUmFqeE9pRkNvR1FDc1IxQ3BPc21IWjZ1M1FrTUl6NXFIT1ZCejV3VmNvdEdaWmpXUDcyb0hrQVA2K3ptREJ3anNOanhiamJqK2dEcjNLYk5FTlV3RjNmRERUcy9KaS9BWTlibEZlMllGWGVGNkFFa1hlOEZFRFhCY3BieUphRzhJNHF3QnJiR0tlQXlZUVQzRC81b0JOREdDUFNIL0ZBMGgya2RFaGlxWmYzNnVwOU1hZEl6R0E3VmdEeGp5TzRCZEsyTzRrMzVpdnN4RzYyYTYzZ3U5YXpER1puYkNEZ0x2eFg4ckJZb3VtT3RhUUFQd0lFUzJrcjMwby9jSTBFZjRycUZrbGdiNi9ySG9YM0VyNGFvVWxsL05XSzBQVDVkUTltdDM3YnlsVmQ5cERjNHpSUTNOT2JZUU1oc0FCZ1pLMWtJMmgyaEhrU05uOGhRekt6UnN3aWFSclVHZUJwc1ZSclBVK05hUzRwdlNlczhZbUpuSVdzQkpPM3grdEdabGhvR1RaNEltSkNsY1AwQWFrRjU1dzF1bE84TE1UNUxrdFZSMXdtaEErOUhrby9pQVBIMEk1OEFEUkJvWkF3UEFOc0ZrdGtBYUcvQ0VrSGlmblRwSU5mVkVkWUFyZGVkSE5DK0Y0NWVaYkVsYUhxZ3NtcG9zczNic01vQXNGVWVzT2g3ZmFZVWxPQXBwakVFYW9wOEtuVU9WYlRxR1lTbWpTa29ueEwrZFREekVjY0REOUFoRStHUEhpQnRCT3VSN2VBbDRPZ29HekN6WVFPZ0V6Q3UvdlFNQ042a0tSaGc5YjkrR0FTb0g4R0FIVnIrWTFSS1NLSzZtYXkxZ0Y4SWV1VjdaWGlPUU9hSm1sSlNYSGJtMXlFcUxCNDN1S0lIOEdWeDhXZFhBL0FvbnNCdHNnTmNCM21VVHhaSzBSQ1VIQ2lBSzhYNlFHMGlVR1lEWUFlQUxmQ2tZUmlIZHE5Z29nMk1wY1ZIVWN5SGFrT0N3Y1R5WHZoaW1ZMldBTmdMSHB4OC9kT1FLYWFEWEFYWVl4STFTTnFrRTE3YnZpOGdTSWVRajhWSk0yQTZNcjZSR1lMS3UwYytkL3VpQVVJb1VScUlBM0xRcGJJZTRTRG5EVFh5aURNYkFDdE5MZ1BOYWtXNGh3d01Nd28xdVFvbXh1bSt3RE13aE1oLzBJTndVdElPUHFlUnBhSXdsU2VFSTMxZ3JGNkpGVnRwcVVCckFZeVYrd0FZUUU1YThMaEE1T2thRDViMkJiNCtuUmJzR2lIU2p5UGRLNTViMGQ0STh0STBpcmVMSUdKeGFaZlJFSW9IOGd6RG5pamlYSU5zVW1YOFJqd1lmc2FRMlFCWUJISnBoN0tZYXZzeEMwL2V5cFZDYTdRTEIya0UzeGEraDQzMTFnNmdkTEJDNFRIRTZZclZQTEFHaUs0L3B3OHNtZkoxS3JBb2xDYTRmVnpSblVMaXNvNlNwSzZyUjl1V3hqWkhGZGwyN1dURVFnNjZDanlWcE44c2hMblk0S21tUDd6bllmcFprWWJySzdvY2xYUllHTElocENDTDRNNGt0OFMxb1VieUl4WWk4V1E5aVBpTlNzWlRhSnV4bFlGbk5nRHpBQkJVNTlHSlpOVXpVSTZSR0l4aW1oQlFPblhFRkFKREhiRVBpR3gxQUE4MStJR2tQaEEzV21vU3NtNUJUd2Naa1ZWdHh0ODVWbkM3dFBkdWwyNFFUU3U5UTY5b2JkRXhxcnVUVldtN0xFTmdYNTRwWFFpSTQzemRZUURDRDkyRVgzVUFRK0NDQTJQUWJRZWJlbmhaWmw2UHRQVmRjRGVqNDdSZTRlWTRxKzhSejRrdmRsUFg2Z1h0NVplUjZ1QktoUVVxQW1HYzJFMHJ1aDg3UTNxOUFHTnF2NUdRMlFEd0FIRUtzRUhaaHlvOGVZbUZlSFcyWFczQW9VR1NKdDhPRktNUWk5dkZxK1JVbGpKZnF4Y0xiOWhadGVPS0xTVzNiU1R2UnFSd3ZXbG1nWUZuaDNMRTRMUTRwTTBZU1ZQUkk1aGhDQmZvRUdEYVlIRHhOZzNBbWY3WjRLTHRmKzY4WHFSNVFkOUhQbkpleHFEMGpQWlV0bVE1ZWwzUVZZVEVOdlBRUHgwMDlBYnYrMHpKbWtFNDF0TEZXbTB6R3dESW9yQk1jbjJ3TTVkRlFVWVE1QmxsYWlOSm1TamtHRWZZN2hpNUFNTTFOdnNRd0U5QVlBbE81YmVQRnR6NzM3RERUZXBac3cwc0FUQkM1eVQwU05Oa0hCcFpXdTFpREU1Q3hPbHpnNTJUTmhHWm1NUVkrREw0TnIzck9LVVhYMTYrTytjdWlwZlg3cW5vS0xpN24xNXhqN3pRc084blYyU2hmcTNpNmVIdHpCQWl2bjVzUURnaDNnK29kM2xtQTZpbkZvRVE3Y2ViOFVPOWpyUnk4VlN4TENyRVdBT3VBNXRoc0Nwb1dDNGswcDZnRFdXZzl1YnQwcElFT2wvWE40dllkNjl0RXZaNFdQV0IyWFNiam5RNjQ5RUZ5djE2bVFDWmQ0bzUra2V3ZmlwR1p1WTVsY1pnMmJxNWI2dHpWMnd2dWpkZVYzVGZmcTdoN3Z6K2ludjBkRVA4Nnh2QmJPMkRwSkhWU2ZpNnB5UFZKc0hvSVZpSVpBeVpEUUQ4akNoYkNCTDNJV2k4cXhLNE9EOEJHK0U3MHFIUW91UVVDaU4rSWN5eFZJN1NEYmlNVG9BaGpWdXR6Uys1TXY2K1dKSzMwcFp6elZsYWdrVk1YWEdiZUNmRmRDNmRwbm1hcWtmWFZwQ3ZpL2xWc1ZDMTVBRnErckFEdjNreXFwMzh0OTFZY0RmdExyalBQcmJpN255OHBvOXU2QU5RdHJGRkFFTEFYek1pNnVLZXJNbTRtOFVlY0wyS01odUFkb1RwdlhxOUZDS1hOcW5QazZ3V1Jac01VMFZSZS8xRzljYWFqWFpWc1g2Z1RUTDZFVWlhK1NUVHhteWp4c29CYkpkSG1hU2JVOHNlUTFiaUdBTmVoYW1BbzNjSUZVa1VBZHQweEdHcUtlWGsyMlVHQ1RPZVVWRlVuVEVuMWFrWUJmS2ZoSkRXejZHNHV0NkZyQ25QRlBITzE1YmNYcjA5K3FtRFRUZXZLd1Y3YTBoekNEak1mTk00RW1TNmdwRStSa2UxUFM3OVdraXFmcTFrWmdQQW5hMW9KYnVpZDFEcmJOL3RFK0FWblRVRW95c3hDK1F4Q2pwRE91WWpyQWZTT2RWUlN3cldDcnZLRFVlb0lvcWhycFdYN1pIVU9ScUFmWjdGbEJLaEFobjRTQ21UV2lQWFZkWnU1V3RqdnMyU244QmFva0ZaTkFLcnR6S2xBakFSME5nTG9TUkRxT2tYUlhpNSt3MHYwemQvNUwwKzh0Q3liWkExVDJCRzRBMEIrRTRPL0JxRGR5bzNFakliQUQvcFVwVDc0bWRXbHZpbGpUNVVZWkpyM1VWdDlWMWVSdVU4bHZFRzRPdW85MGU3UjlRQWxNaXFuZkJTOC9VNjIyQUx1ZEFxeVhFZklJL3lkZU1IRHUxWmdDM1Z2WklTSk9EcGJKemc4SWxldllzTmV0V0pYWnVpZkIzMjFqWUV5d1I1V2FtUndHQUlTQ2pQMUNCRnZucWZjLy9vYk03ZDhjaVMzdm5UOXdTMExyQjlqaGlTb2ZGdHJLRk9yYWFNUmtWMXRjOGFNaHNBSG9BMUFQMjBKMng5S1VyWTBwTDlDUmF4Y1VRUFFHekNqM0hiQ3F3aXlNWFRNUnJXY3k5UXhFZzdjSGJLd25DdWlFR2I4OFVrUnRqa2tYQlVUQUpQNnhoQ1licklxbFlWeEFhSzAzV2h2YUsyYWxHV2g3R25nOENqUUhoWDJuc2RvUFZuV3ZVMUJYbFd6YXp1dHV2TDdwR1RkZmZ3ODNWWGxYWU5SOGM4RUdnS0c4WGN2K0RkOEt3aHN3RkFnSG1jUTd6M0RKRzFxT0FJQnpoSFZINnNOelJkdUtnelBCR1oyaUZQd0NqcTlnQUptQURzbzArQzVJc2JkREN2TkpkamhrRFI2Z0RXWGlFUTdGV1ZFRFJ1T2lEOHFQZEZxTldNejVSUFdac1dFMVRvcGVkTlhzcjRsQkZ3YitDdEJ5cnU0S2tWM1RDU0g1T1c5WUZZWFNZbWhEMEJuYU1CYk9CT3NNa25RVFJJZ3FrRzVVZmw5V3BEdDZ5YlNjSVhwQldmYm0rM1JhMEIyRHJkTk1WMEdTWEcrVFdXQVEwaDhoZ0VOMlpJK3lsQWVHUUEzQlRXVFdBSlZrS01ia1V3Z3dianN4ZHcwRU43eEhjQ1JWTFVHMTN4MG9adHArRFh1RFl2QUkrNkRGUUpMOGdjMEpkRURtd3J1SU5uR3JxcmlTblJIN1V3WTZLbFo0SUhUZlNkQlhyV2tMMUptQUxTQ3V4RkZOYUFpZE1FN0hKdys5UkdjaWhJQkV6ZUlQeloycXZFdXFnVGNLRUpnRDZ2Y2h5UmVVWXJ4YnY0L1FDMkNVUkxmLzRZZ2V3VUFvUGhDN0JyUmNiT1dnQmRkUjE0RXdXSi81Z1dnTEZnN2NTVkxOYjNoek9WSGlFUHJIaW5nV3ZFc2hhRnI5WmR6Yi9STk5DU2hnMFM0VVZnWDJJNXBnQmtrVFZrTmdEY2pIa0FVVE5lK2xBME5qbHhCTTVRSW0zcHF5bFVlVWEveHdOZ093QVRkR2FGakhDdlRtdnRCUWhlYWQrbUEzQUJvNWlITk9aZXpXMEtoRVVoUkV3WmJScURwRHhYL3B6dUw3VG9pVVhkaUFUb3kvMm9wUjllK1I3ZStpR1VZRzNqVjUwQmFocnduYlZuQzlmdDBLYy9wUHdHNnhxYkI0VE1ybW5idEJrQUtGSk9JM1BJYkFEY2JXSVJDT2NvYjgxZ1dnNndpbWlHQjRCL1d0ck5KTVdtTlFwTWFsSVdSU0ZMa1JVbm9xWStqQjRxd0FVd1NlV1pacmovRGcwZXNsQmxVd05JMFNBRkVaZEhITW9vdDBvU0E0WmU4Q2pTTnpjdWxZNVRqK2ZhVTdGcEwxQ0prME0wRkM1WnZhejBWVEY5aEdPclhxSGpnVkxST2lXYXVrY0FyS2Z1QjVCTkFRTnluUWJMYkFDc0FiaHVSWG53MHk5UVpZcXhoSWNpMldzZEVCVklBMlFISEIwRVAwcU5Cb0ZRQ0I1R1FsS2wxY0dQQ28yVVRoaUFEWGpjSnVWQ1pxT1gyS1BvYzE2N3RyT1JjZGxabE1yQlA2RlQrUlJpbERJRitrYk9ZcDFVUlJ0YjdZZTIzQ21zNklubDFrcmVuZExyYnkzMk9RSkRweFVDbU1VOFE4aXNUT0hJM0FiaHhrVmdvamhqcDhmSmV0Z3VSL2tjTUc1Vm9aN0lsN1E3RlkwcmdiVVdmZ3laZTVlMHpFRFVNaG9HTWZodFU3RFM4SXJBZ0xlUE5FU0pxVzZ3NERrejByMGFtRldsSzlvRUxLV1RMd2w0aENqMnRkTUFBUFExOFhJUFUyVmZDNzhrT3E0RklIYzNyYkVKRUZpUEdlcllnNVlMdXR3bGx5MWtOZ0RRRDdJR0FNNE1CTDdoVjBkVUVLeWIrdy9sUkhRSTlmcng0V0ZSWHZKOFhCQjJKU0FvVTdodlpDMVpNMEVqNHVmRkVKNGI2SFZaM1E3MlUwcmNuV3NOa2xOYmlNWmdVcjUrSXBKUFkwampzSEp6QXhIUzQ3UWVxcWpEQUFRYzRURUEvNTZnbm1Hb1BRYkFKV0hiZFpKV2UyazlPQUlqdXdIZEcwT1pEU0JlQnBvMWR2Yk45ekNjcWNLbzQwR2VvM3NSU0tFWmlCSmVtREtFSUJBLzNtbEY4TFZnWVEzQWF0OEhsWU5ER1F5QVl2WUUyb0NTOHYyWGg0UWJqMkdGdEFxNHlOTndvREF3b0xDMWVVMlMwQWprNHZ3ZmpjQ1RWeHZ4UTkrOXQ5SXRkR21ZQVkraURaWU9nbHBsYk1sSFltU3A1OGlzekkyMGFjZ0M3TXVVV09FYU1qRSs2VEF3NFNCaUFkbXU4d0J4TVVrNXdORUFiR1FyWS9Vb2kxNEdDZVI0RTVvR0tvczBFQmFMVEQ0MFllL2VLWVA3dDB0Q2hHdk52YWNoYVlGQ3RSa2s5QWFqMURDblVBUmFIU1UrQTYrZEJxQzIvdC9IU2pPMUlRUDZZNlBkTEZ0cDh2RkFqb0loeTZuSC9TRnExZzNaalVZR3dCeExSK0k4M1lzS1BNT1lEVExGTmhjcnRpbU1Lc3JBRTlLazFCOS9xREIyRHJkdkFqTEFBS3plQW11dHFjWVl5Q2tOZmw0TXNTc0FGZlBxTkI4MEFwOEp5WU1hUEdVV0JHTkJlWklVeDloWCtEUDRMeVZZbjRYQTQwbjd0MkF3TW1aN3BkMzRWUjgxc1FQTDExT1FvekVWNDhBSXZISzhhQjZBS1lDbmU4a2NIaGhKUjRtY0FyT1JlWlREWVFJMkk1SWJVdys5UUR3R3hHTHVHcmpZdXhoalZmUlVzZTJqQTVPbGZWdHdtd2VBU2NFMVJWaXN5cVhxVUJxOHZoM3dJRjA3cENHRXVrZndwZEdEUlFCcmwycHNVRG9SMnhFS0xMSkc0a3Z3eU1rdkFqRnd2VktuNGNtVWVUSDhFR2NiZ2FjVTI5UHVSVE1BMnhTS0ltQTJjdUQ1U2M2eDd5akRhOWRiTzgyU0tVRGFRdkYyZ014d2haRWd4SFRJVHdHcWtuVHdJQ3g4ZUliT1BmNjhSajJ4TFJRaEk1R1pnYW1lTjROeFQ5NEFCSXNCbUY4VnoxZ0V3clkyUGxZeUJLK0ltSU9sMkpkWVJwendIQXZURmh6TGlLMnhUcUZ2UkJIVWlneFc5ZW9Ib0dZRTZyVDNXTG9UcU1JVmpmNFpQWFZsM1NPdzVLRGZQT1VFRDIyUjEwWkM1aW1Bd2NWOUFDelRkNnczV2Fvand4R096bmNzQWdVVTU4TkVNZ0pHRUlqRWxFN3ZRRVFQdzd3Znk4MmxxeHh2Uk1EZ1dCeXlNeGNEQUs2dVBDK0lldUY2WWRuWmhBNXloU1JTdTVpeEN1VkNIVFd4SDBreUZIYlhoYVloRWgrcGdrNXZJZVNCRCtPUHJQcUN3WkpuQy92c2ZNTU1vS0I5Wk1ZS3lIUmd6eVpqWlUwOHF1U0tJV3ZJM0lScmE5dmdJUWFpTmZjaWF2b0t6TUl3eWVpaTZRaHQyMGNBQ0tJeVlTaU5BdGtLUmN4bGpvMTRDUVZjaGs4aTRaTEpEQ0dGMzE0T3RSRXY1WXVJL2VZUVFQcVBzS1QxNzBOSTRIZ0owRy9YSmxBcTg1U05iMkJKS0RZVms3UjY0aGg4VzZzS2RUd0Q4TUhqNHVFUHdmb3M1b3hOOVVuZi90VzJkZWNlTzdPaVBSWE84UkhZNVBFNkRkUThZb3JqZytLc0liTUI1SEw2VUtnWVpOUkJ1RitneXVwOVA0MWhNd0RhcVE3WkdSNEp4T1JvQXZJcVlBV1BJSUJuN2tabW9PRnpxZ2piVHduQlV3aVFPcERHS2FDbVcyZ3R5bFhHOXdIc0oxb1lWUndlVkltZzd1N1ljQ1dtWUVaSGtTRlRSSTNSRTQvdzdkTWhOcmhVbW53U29FeWR0VEE4c2NxVXIycEdQenl5RUJ6UlZuWmVWbm5zUk0xZ29XdC9hbzRoZ0NYMmhSZ3p5cXpNamJScGFIZUZ1WCtNd1BkRmFEcERaTXpxQXd3UitmUVU0QTFBaGFyd1lQNU1lK1p2T3VWN1NZbkFWSVpDZVprQ0k4QlYybVZTSUdnR0lCUmNCa2IveUZVQTE5TmVzSW9qY3dLSmdvZUlVVkNCcCtRck1VTGU1cUVlRGpGNmFIZzNya3JTL0dGcDFnZGFXNkZpSDVSTGhYU090T2lwVDdZNFZWUGpSelJLdXYzTGJ3eWR1OUJ3UDNoK3haVzFyNXdiWW1DM29LYko4eEFWQ0lYSkttY0xuUUF6WUpUZGFMUWxTUGNCVExkNDJYNkJLZ095aEluRmoxRGw2VWhVUGpEeGlMaW9SeWlTaFhrQ3ZBQUNRQmUyQUJRR0huK2E4QlhieUJhZWh0WUlLSWhkUytnRVFuWWZRQVJNZ0ZZbVBCQUthUk0rR2ZKVzdEMUdWYThNamZOQ2lkNDBZWmMyWHgxWjFKcytGeGVidHMydHFRNndUakY5Qzc5L3ZDdmlWa2JjRGgyNW1JbkdScHdjdnI4VGVyZGhtNzRBL21WdENUdXZoMENqZWhnVS82eGo4Q284OUFOMFpDVVAzVHBraFpZdFpEYUF1bFpaZXVQS0hsZWh1SDdCR09NVUR5VnRoS0pWQmQ2TEk1OG9IeUg2S3V1UVpHSXg2ejV6L1lxTm5uck5Rczl1aFFhalFCQUl3UzhDOVlVUWVRQXpBQTFoM1JTMmUrU01Fc05wZUNWTzFkbWZDVi93YW0rdVY0cmZNVmwwZS9UaFNyNXJlTzVpM1MxSUNSTXlodDA3Q25xQlF3OW16aGZjV2Yza0Mvc2Q2UU9OazM0bzB6blBlOXlDVWdJdVF6QStsRmFNcDRFMzBpT2lQejJaZCtjdk50dzNubHdPM3owVXAvQ3A5Z1lIdllDR21LYVNRVXZ2SHdicGhzb0Jvc3dHa05OZWE2TVA1Y2hGRDBJb3hRc0hhSm1uSXZMSlpTQjVzV3RYQVNZOTBLbFF3V1NoazFlUU5RK2VBQmd2TU9DUUozbmZ5dU9EQm04SE0wV1lWQlN6a1BRZUlBaFNlUzlNbjRjU1c3QzM2TjNCSzdVTFo3czIxeDA4dXVUKzh1Q2lPM3l1WVFiRlY4Y083Q3k1dDl3MDRnN3MwZXRtNHlWMzVIVGV6Y2hOODk2Qjc0ZG5LdmFEYm5XR2RBRzlGR1Y0Q1FlL0lUQzFwZWgyYW92M0gzMXJ3WjI5eU9objZ6MS93Y3d4Z2hSUzB0U1lBWmhFVTVVREpMTWFRSzZoSFpkYXJEQXdiZTdwUllOdUpxWklKdlNiTWtZcGJSUGxteEY0a0k2T0FhZUNPSEpSTmtRUnFrMEZJYmJPQTZzRXl1ZW82NU81K25xNkZsVXFsREhrNVM2WXk2T2d1ZGVPZ1VDUEJlS0loTHhIVzYrdTNaSFRieFkxM0NlL2ZkRjkrOWxsNGNwcmk3YW1BTUd5UmV2aFl3MzMvWk1YM1J1dUs3bTMvY1NvdS9uS2dqc3NJemloWHdCYldKWlFSQnorOE1aZStjb290Tk5RYkFmNHNVNnFSVm56L283SmtydE9QRHp3OUpMN3hoTkx1Z29JeWxkZjZDZXRPZkF3NUFtZWdwVTNtendGeXhpeUdvQkdZcjJoaFV2VDNCYW5IaUVwRlhjSUQ5Y0tveWlkQTdiYkM2b2dJT3RKMHJKRCtSZ0J5b2NjaG1EWHdJcTVFV0kzUXlRTmd3bjRXUXZZSXBGRzBKZllPTXdBUUtJcEFwNHF1dFRhcnJlR3I5cVpkM3YwR2J0SG5xdTV6OXcvNzA3UHQ3UUhyeHkyWS90Mm5pSFJsNUsvL25UVFBYVm13YjNqdFNQdTVWY1U5QjVpeVQxN3FtbUx0cHAwWUYxSitoT05RWFFUZFpIeUJzaFVoS0ozYlMyNEczZm4zYkhUZGZjbjl5OXFmMS9KakMrbmkzdTJoZHNESXNGYUsvRWVBeW5lYnRabUVkMHQ0aUk5Vzhoc0FGV05oUzBUcnFIWDdiUm5iZTJIa0ZoK2VhVm9iNjBnRDBabm5BSzhCNGdHc1pwcEZLcmVlZzlBVW1uekFrcWpReGE4MkpKdENoRXNYZ0hjMEZnSkJzRG94LzJiRWFvT0E4QVFHTlVUZW5tVVViOS9TdkI2YmZ2T2g1cnVPMGRVVzVwd3U2ZTgwZHJpVW5neGxpU29VN0Myb1BYV0hRODY5OU5uVys2MkEzcXo1K3E4ZStaTTNwMDgxM1FYRnYyMEFDOSs5Q2V0MjNuaDVPUFdFL0krKzlqOE9aMXp4ODgyM1I4Slo2RTY0YVprblBRcHI2bkpYaFZVR2paU25CaFM4bHYxMHVuRW1Hdk0xZlZDNUdxUU52RWVxY3dHTURzN3UrSm1tbzJGSlMySUZ2b2JIR0pDaVV0YWtaM2ZwaEhaOHU4dGVRK2d2S1NEOHBDbXJhWlhNZWZiVTJ3ZFIvQUlRQWVDeFF0d2NFbG84N3ZTZmhFb281TjExcE54ai92VVRsdEpzNklGRm91NW5Wdnk3a3J4cEduY1Bmak1rdnVMaHpUcTlVdm9yUHlaS3BaMStCRW5neEJCT3dKL0tKUyt3WDlEbmZtc0RPZUJwNXo3aFZkWE5DV1UzVjR0NEk3TjV0Mlo4eGdDM3dPZ244RFRFZkVxcGFQNEVWM203WmdvdUd2azhuZG94WC92b1VYM3B3OHU2aTRtbTBIenJpWWVDdlpTcTNnUVBIMmcvK2pYb3NBUG1lMGpSVGQvc1ZWZm1iSGZES1JHWEE0V3NoaUFJVjJhT2JuY3FqZHI1c0pOLy8xb0lTWnhvbzZmWDlDSEcyV2I2cE1wandvRWlTSkRyNHhiV3JRNzU2Y044b0RSYmRxWU1VaVFwZ2psaWUwVE1LRytvR3ZtbTY2YWtDRDlPa0EvY0dMWDFhUGFWclZWaTZ2dE9pRDgrUEVsZDk5ekJmZlk4YnFyNlkwYTNEQ2JMdm1EbG0wb2tTZXhxd1hvV0NsOFdNYjRWZ3ZickhGeXR1aysrdGVMN3FZOU5mZm1sNWZkeTNacExwL1NBbkV4NytiMFRZQkZmZExlREYrZFlhN254ekg1YVZ4KzRlZllHVTA3OXl5Nmg0K3VtS3N2cXQ2clcveEw0Mlk0aXJrdkVrTTdoVHlBbGd5YWpaVUxGMDVrZmpjb2l3RVkvZnFwN3k3cmQrcVdVQXlFK3dWVGtDcHh2eWNrb0JmbVdtNUsxbzRWZS9ldlJKQ2xhVmluS09SdW5QUWR4Uk44T3VCUm5nc2ZWdlFhTkJLdWM4K2QwdnlwZDZTdTJWcDFaYTNjY1o4WVhrM1RJNWR1MzNtODdoNDl1dXlPempUZDVNUzQ1bm90dExTWEtzL05GZ0dhUUVWTU4xV2tDS09ZT3Z1ODl3amV3RTFadG1VcnA3dDJUWGZ3eEtLOHk1SjcxYjZpdTM1WDBVM3J4N0RLOGdwNERBSmVneW5pMGFmMTFzK1JtdnVCM3Y3aHhsVkZmRURmNW5zV3NDbGpOS3JXWEh3Rk9WQkdFWk13TTdFVzVrc3p6enlZTmdCUEVNQTFRbVlEbUh2NjNxVTlqY1ljaktEa3ZrRjE4Q3FEZHFmMW84bDNINnk3ZjMxYlNVTFhyNDJkbzYzdmlhR3dFM2t2MUY0NDR3Q0FMdW13dnZNME5FK082NWRIZVhMMk8xK1ljOTg3V25QYnRpekp6UlpOcUEydDV2bWwwd1hWczA3Z0lRc2p2aXFyNFlaTzNaUXZRMER4T3BqeitiTmd2UFhrU0lYQXc3Tk1GNXhoNzk1UnJRTU9uNjVKbWN0dVFudTZkMjRiZHd2ekYwUmJENnIwNnJmZVhyY0hWdERodHdOSGRiUEozRHhLTnlQMGhwaHdrY2pIS3oxeVE3R2EyR2R1dElOdzd2Z0QzeFRtYkdGUUE0Q1dGOFhDd25LdXVYSTZyNWFpM2Q4SUJHME5kRUxnZjNqUGlrWkYzcjN5V3UzUGtjVmYxTXVsOGJjbkFtWmhDMEx2MlFkUEhnakp6U0NGMXR3N1B6bXJBZTkrNzB2bjNhTzZWTXRYeXZvZVQwRS8xZTZWeWJ6TDVSNGV3b1JxQ0h3Wkk3aWd6WVB4NVV2ckUxQ2VYT0FrRUNRWE82VWtzSHdJS3JhQk1hYWpBb1lnMThQY3Z5d2U1cVNXbVFzcWt3RUFqZUpIOWYza2FIQVdpejhiOWFvajd6blZPYzBIeGVtODBnV05zS3JXTWtWWGYrSDAvTHdlRzFsSVE0V2kzdEdnQmhCYmcxanovL0pSZUVTWW5ZODNJNWppaEFWOUdsWEE1M1JwOWNIUExMcjN2Nm5zM25pamJxUm9FY1pUMjdRWFNaclFYQm1UUTRJU2F1MUEybGJIaWwrWXJidmYvZnk4KzlQdnpMdWlsRi9rMnQxR05RcVJhelZtUTJ0Rk9IY3VFekVLNWlUdmJzSHZZUkE2dkZnK05HdjNCeDVvSnkra1UyaGh2TnFpVkhqdHp4YW5ZZEVuS2ZQNWwyYjZKMzNVME9DQUQveVpJVVM2TUpBRUEvWk1KV1ZLQ0lZSFJoaEF2clYwVENXOEc5TFJNZzNlSzcwUkEyZzF6NTk3TmpjMUxYd1lnQmRCTjNLRXFOcFFyTkVuTjMxR28rRFg3bHAwMTA0dHVldW44MjZiRm1SY3cxcVF4aU0wcTk5eXVheFgwT1VtVWlGTmlVVTFpNnNUK3ZIS3g0NnZDSGRUcTN4K2lWTUtsMlg0YTJjaFoyVHhoNUJEaUdrTUEvWnRWRklYR1RDNHNPcnVLQXNJUXVSSFp4c0FPdkJGOERSa0lLTEJPZ2lEYk11akRXTmNKYnpCaVVLQ0V2NEMzMG1aYjJ0Z0ttTlJ5UWV3YWhkbUQ2dU1aVG1RUGFCcHNUcGtNUUNRV3Y5V3poNTVzclQ5WlEzZGU5Ymo5dGpsMWNqVHhzRUtHeGZjbENBT24ybTZKL1MrR3dzaUhpMmFGeEYyNDFxR1VDcVYzUGhFeWMzTWRCcEFKd1hFTFVHYmF5KzRNVjBLMlNxZWVWVEd4bHhxcjFKSmdBWVo1QWdPa294ZGowR3BZTVFKU0VoMHVGOGFyZ29BNmdodURQNHBpWDRCLzQyM3dkRjRYcXlIQ1JaZ2FSSGhJejFmVHBVNDdHeGlMZUtKS3RZUGxWeXpjZkhja1NkRGVYK0Z4SWFwT0lzQjBNeVExNDdkOTFSbC84K2VMaFRLdTJzMjYvVG0wdHk0R3BtZ0JlTG5PRndXSDJyMGN5U3JZeHY3aGtJcERFQ1dNajZpS1dKSkUyVlhTSVJqNWNyWnZ5aG82TVE1bERtZkFrYWYwVTRhSlFtek5vUnJBbFpNeCtKZ0UwTUtkaklxZzU3YS9ZMHRSRDBnWld4M2U0QUVLa1dxazQ5VVJRUU9NVFY0bGtsNTBYS3VmdnI0RS9mcGJnVFN5TVo0VmdNd2pvNy8xVzgvZjhQcmZ2bnhRckdzbTVmcVZoZ0JnYmNrTW5FbmZUQlZtSklZRjF5LzhiS0dGdWhpR2NYVHpNZDgxY3QvMFhNOTloQ3dtdW5rSTUxSiswS1ZkYnJVaEJWUHlrUmxSZ0NLV0VhOHdXQTRZdHRBTEJwWmpHTjF6eGoycWVoZ3RDZWt3WENacXdzTVYyd3UvK0N2UC8zZlRnYklRVm9uU05lVGNBS29CSWc1WktUemk2MExwNzVSM0xIbFo3RkNMcTM2aHNDT1diWjFENlhveG9pdHZGVkp2WG90MVJzS0RJRzdkaXpRQ2dOdGN2UEtwN0VmOGVBS3F2QW9EUzlGb2RUeXBDMHZtR2dFSG5ENDU0Zy9UYjhubFRTL1BRRlNoWUtkckdvZEpRTlltVC8xallzWHVhNHlSd2FXZ1RIWm1pT0ZkcjBraUcyaGNlSFE1NzZhYnpSbVdISGJIU3ZWb0x6dUE4WFR5QVN1aEJlR2xLc1N2RWY4MDR5ZCtsT2REQ3RkMGovdE1YajRnQzJoNDJrYkQxMjgyWDBaR09zcTcrWi9HUGxoMDRCM0J0NU83VmtZTHpabWpqend4YStvSjRTNENQUzVBYzVaRFNBU2NTZS85QjhPTlJmUC9KK0tyci90STBaaUtycTVkTXlsVVRwUDJpekN5cjBScEEwQkZXSXU4UnhVbWhoS2Q1NjIxcDZGWE1EZFRhOFhENUdQYnRnZmlyd3Nlb3QyRGUzVGhWaGgrZXlYUC8vN0h6Z1VwSXF0WndwWkRRQVJRNFRyelpVTGozM3VVOW9nTXNmREMxYlM2NDRXTlVycHZ5T3RxblpsT3QydkFlVUthMVd2eHcrTjE0TzUxUHFoMDVEMHVhUytRazhzZDFRYmM4Y2UvTklkRWdQNjBOT1daQXBRY3JDUTFRREFpc3doMWpqeGhYL3pTSFB1eUIrYkY5RENiVzF0aEpacmFVd2doRGdLZlc2TjgxcTRma1RyOEl3N0ovVVllNDhTRjQ3OXIvLzlPLy95RWFXaVRvZ3poWTBhQUhPTldkM3ByL3pLeDNPMStlOVZkUysreU1KT0xBempvQmZEd0xNV0RzUm1VODJRZU81RmE1ZzB3TFZOanhCZmRwV2VLQmJtdi9lMU8zN2w0eEpUMUFXZVdSRFp3a1lNQUFvUXNtbGc1bnQzblZ3ODlNVmZMK1hyNXlyNm5BazNZRGJEOENYQVZNUVgwQTljS2ZlL3RYN3V4S05mL1BWSHYvN25YUHFaSGhSblZqNWNibFJiRU1QaXVBM1VmUGJPdDkrM2VPeWVENVhMamVVS24ybmZOQUtKWlhnQllVOXEwWGZneXJ5N2ZrOXo2ZnpoZXo3MEovLzU3ZmVxT05HQjBpK3FBZEE3Q0xJVzRCRms0L0FuMy9Ubnl5Y2YrbENsMGx5dWlsbnU1MitHUzVOQTFDajdGbDkrVGQ3ZHNMZTV2SGo4dXgvNkh4OTgwNTNJWElmSlhuRUV6VXh3R0ZxQ09FZGg1cUZQSE55eS83WmpsZTFYL0wxOHFUaWlyYU5hWldmbmpSOTlMdXNlOTVKZWk3NmNvYUpkUXJESFBnSzdlWGdaaUhGenFxb2JOc3Q2cVdSUVVaakVkT0xxYXMrMm9udkYvcHk3WmtvYnZwNzcxcTkrL04rOS9qTmlFN2VQOHMwREs4NHVaRFVpRE5NQTBGWis1dUU3RG8xT0hYaTR1dk82RzR2VnltNW1tZlJESWFPNnp1bkgxUUNpZ2JBdGJLdEcvYlY3dGIxdHYzUFRvL09QSEhuZ3ovNzlwLzdqMis2VzZGQStkLzB1V2Ztb1lSZ0dBQjRza01PTVlPNzdkNTJvblQ3MHRkRjlyMm1XeHladktGVUxlcm1KNVVaNDhyV092ZjZvRzRCMVB5MERYWXB3NjdzaXI3ZE5pcjk2Rnk0LzU2N2FYajlmbkgvbUQ3NzZzZmQvNkt1Zi9xM3ZTNEJSK2NTWjcvcXB6YXJBVmRDd0FyZ3dLSjR2NlA2Z0hhVXJmdTUzWHpWeDh6OTdWNjQ2L1pabXZyU05id3cxeEQ2dm1QTVJaS1lJTzlTQXl5aHVjL0tKMURFSllsWWJQUzVYWUxSTmFGZHVRMXVKRi9qcy9RWWxrZFpqbWxlUFRtWXZ1OSt5cGVET2E1ZXc3UWhTQlE4clViajJpTmk3Q2FQYUlUeWhwM3BiSjdWWlZQZjJ4MHYxYzduRlUzLzU5TDEvOXNlZi85Z0hIaFZlRk01K1A5dythUVphUDlLcUdqeHNzTnQ5Q1lDUG9ZNFI4Q3lYdmVDa0s5TnYvazh2bTd6aDUyOHJUbDc5dWx4cDdJWm1yaklsU0Y3ZmwyRFVtM0NRNXFQSC9DSUp2NnpWM2MyaDlCcTBRc1QrUkF4eVVXSkZLUndZQXAyd3g4dkVNWitPQWFDT0k1U1RpZWtrbGlSUThxUVVPNjl0NXhnREd6Z3hjRzFjc2w5ZVlUT0hkcU0zS3JtbE0vbkd3cUhsMlNQZmV1YkJMMzd0N2ovNHRTZUVIcVhIeFI0dW54R0JDSVlsQnV1RDhBMDFtRnlFc2RzUThBNlVqZTI4OVgyN1I2NTgvZjdTanV1dkswenN1aXBmSEwyaTVUQ0kwcVMwVU5FQ3NEUTJrUy9PenVCUndvTjlQVGptT1lBOEJQZ3ZQV0FBVWd5ZWlHM2hLSW90WnNraEtpZ3M1akVPMGhZcmpZR1FqdVZLMnErRGFmMnFUVHhpVXA4bjEzY09Xc1ZpcXprKzZocUxDL3BOajJaVFB5ZlpXczQzVjg3bjNQS1pYSFBoK09Mc3FTTnpKNTk2K3RTVDl6NTl6MTBmUFNVMCtoRVpVenFLeHdBWThTZytqdnFoS1Y4NGh5Uk1NSzBPeUlRRHhYUEkxczBiRUV0OEZ0SjFsZEc5cjZsV2QreXY1TWVueXFPVE8wcTFsVktwVlJ6UjFuNkpucGZmc1FFZWd4SDQrYzFMRENNYWhValpuOFFrUnFCc3ZJS05lUW9qb3pGTnN3Uk9hVzFHc1I4bktHb25xTDc0clgwdWN2aThTTnRZYkpSMG5URi80ZXpLeFhObmF1ZFBIMTQ2K2RTRHk5cElnM0xqUWc0MlVDeEtSdGxSNlpkTjhhSmg0WktGR0JHdEVVT0RBNlhISThxVE9KWkZ1RFJQNmJSQWYyZ0N5a3p6bmg2MXBPT0J3cVBTaVRHRVdFWWM0WlM4UENITjVPV2gwTVlhYVJHbkR3d2c1b0dPZWRLRTJNN25mdmpPM2NxUGlxVW5NUjBWSFdQcTB1M0lYNWJ3dHlYY2JycnBmRHBOcDd2emwwVVFseEZwdHlMVCtYUWFGcnJ6bDVFdGovcWxLdHlYS2wrWHFwQVhYY0dYeXZCbSswMEpiRXBnVXdLYkV0aVV3S1lFTmlXd0tZRk5DV3hLWUZNQ214TFlsTUNtQkg1MEpQRC9BYVVjdVE1N1EyS0lBQUFBQUVsRlRrU3VRbUNDaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQVFBQUFBRUFDQVlBQUFCY2NxaG1BQUFBQkdkQlRVRUFBTEdQQy94aEJRQUFBQ0JqU0ZKTkFBQjZKZ0FBZ0lRQUFQb0FBQUNBNkFBQWRUQUFBT3BnQUFBNm1BQUFGM0NjdWxFOEFBQUFlR1ZZU1daTlRRQXFBQUFBQ0FBRUFSb0FCUUFBQUFFQUFBQStBUnNBQlFBQUFBRUFBQUJHQVNnQUF3QUFBQUVBQWdBQWgya0FCQUFBQUFFQUFBQk9BQUFBQUFBQUFKQUFBQUFCQUFBQWtBQUFBQUVBQTZBQkFBTUFBQUFCQUFFQUFLQUNBQVFBQUFBQkFBQUJBS0FEQUFRQUFBQUJBQUFCQUFBQUFBQzFaNkxvQUFBQUNYQklXWE1BQUJZbEFBQVdKUUZKVWlUd0FBQUJuV2xVV0hSWVRVdzZZMjl0TG1Ga2IySmxMbmh0Y0FBQUFBQUFQSGc2ZUcxd2JXVjBZU0I0Yld4dWN6cDRQU0poWkc5aVpUcHVjenB0WlhSaEx5SWdlRHA0YlhCMGF6MGlXRTFRSUVOdmNtVWdOaTR3TGpBaVBnb2dJQ0E4Y21SbU9sSkVSaUI0Yld4dWN6cHlaR1k5SW1oMGRIQTZMeTkzZDNjdWR6TXViM0puTHpFNU9Ua3ZNREl2TWpJdGNtUm1MWE41Ym5SaGVDMXVjeU1pUGdvZ0lDQWdJQ0E4Y21SbU9rUmxjMk55YVhCMGFXOXVJSEprWmpwaFltOTFkRDBpSWdvZ0lDQWdJQ0FnSUNBZ0lDQjRiV3h1Y3pwbGVHbG1QU0pvZEhSd09pOHZibk11WVdSdlltVXVZMjl0TDJWNGFXWXZNUzR3THlJK0NpQWdJQ0FnSUNBZ0lEeGxlR2xtT2xCcGVHVnNXRVJwYldWdWMybHZiajR5TlRZOEwyVjRhV1k2VUdsNFpXeFlSR2x0Wlc1emFXOXVQZ29nSUNBZ0lDQWdJQ0E4WlhocFpqcFFhWGhsYkZsRWFXMWxibk5wYjI0K01qVTJQQzlsZUdsbU9sQnBlR1ZzV1VScGJXVnVjMmx2Ymo0S0lDQWdJQ0FnUEM5eVpHWTZSR1Z6WTNKcGNIUnBiMjQrQ2lBZ0lEd3ZjbVJtT2xKRVJqNEtQQzk0T25odGNHMWxkR0UrQ2w2d0hoc0FBRUFBU1VSQlZIZ0I3TDE3dEc5TFZ0ZTNmdnQ5bnZmOTZOdjMzbjdjaGdhYTdzWldCSU5nVkh3Z3daWVlEUWl0S01NWGYraUl3YUFSa1dIVWtXaFFFOGVBa0JBRDBhQXlJc0pBVVFNa21nd0lBU0tTRmtUZ2RqZmR0Mi9mUjkvWGVaLzl6UGZ6blRWcjFWcjd0OC9aZTUvOSs1MTltbC90dlZiTm1uUFdyRGxuVmMycXRYN3J0MzVkdDBnTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhjRGM4TUxrYmpkNGpiUzU4YzQ5MDFCSFUzRHNDNzY4STFsK3Bnenp0WmtBa2ZKUU9QMDZkbzhoZjhCN1BBOGVaNE8wWU9FNzk0Mmw2U21yOVNocklCOWs2eG8vTGJWZmRpdGJ5TGVDNzY0R0RKdkkwL0RRYzJoK0V2N3VXblhEckt5Y3M3elNJWTVMU2VkTW1hNHRMT0hOMFB3Z2UweWhuYXVza2JwSFB6d01IVGRScCtNUmxqcFlId2EwRjhORFBMVzlMdjJmaFQ2WEJPODJXeEpHM01CM1dsaE1HVHlkblIrODJjT0xneVpUMU1oL2pzN3pJVDhZRDR6N0ljdVp0SzlrbjVPTUR2cXpUNWkwOGpRZGNwdVROOGoyWnA1UHVTZVVicFZzN0VoNTNlb3VuODVqY09jR1hCSysrKzkzdjN2aThyLzdxY3crKzVkTXVuSC8wa1lzWDdyL3ZRbmRtNCtMeSt0bnp5MHZMNTFmWFY4NnVyNjJjMmR5YmJHeHVkZXRMeTh1cjNXUnBWWFZYOWlaN0t4SzYzSFZMUzhxWDl2WjJrVG5aNjVZbTNkN2VaSmRzZDg4NlpPT2l4eWdVQWtWSSsyZ2lwSkxRQjdDWWs5KzVpRm0yTEJXUzN6a25wUjBkeTlMMHpKbXUyMUxoeXJWU3I2bS9ONlZ1eXJvVnpUeXFTeHVHZGNwNnU4THJmejllT0dTNmpwajNsaVp5MzU3NGxBc1FYbzViMmhYUDd1N2U3dTVrMHUzSXBkdVN0TDIzMjIxMXV6dGI5OTNYM1Z5ZTdOMTQvZFh0NjV1YjI5ZjJkbmV1VEc1ZXU3SjM4OGFsM1V0dlhONTU1ZVZMTnovMGk1ZDMvc1hmdmZyR0J6OTRRMDF1RlZYb0UvcksvYVVjRmZNUVdHRndwTXpIc0luMzJpa254YjJtTi9xMnVpZE1QdTJnMHpSZ25OYS83bHYrMGtPZjl1dC95NU5uSG4vaW1kV3o1NTlaV2xsN1c3ZXkrcVFHM0dPN1M4c1BhT3hkRUh4R2xWWTdYU1F4YlRsV05kV1o3ZGQxM05Ud1FTaURHaUFIT2JEeFFpZGNXTUI0b0dlWmZCK1BrQzE5R2crVHBmSUl5TGFuNGJQTmxnZVlBSEQrZkFTQVM1ZDd2UWFUdExTVE9OcE1PSFByMGVpUStKcGo0a2pPbUdiZGtxZnc3OE1KZjJCUzM5ei9RTmowK3F2cWFQVTBiZG94UkpXOWJtdXYyN3V1L1BKa2IrYzFSWklYSjl0YnorMXViWDU0OStxVlovZGVmZjdaNnovK1E4KzkrdGUvOFJWeDN5enR5RU1PQ2tnNjZDaXNwaWQ4VCtWTWxuc3R0VG9ubk5HYmNoNTBQY2ZaYi82KzczdjZ6ZTk5MzN2WEgzencxKzR0cmIxUGsvd2QyOTNTbzN0cjNjcTJ1RGMxMmpZMWFHN3FZRVhrMkJadWgwTmR6N0VyZUhXajY5YldGUUFVQWE2emhpZ0pIYjB2bm5hVVFQTWdCRkJLV3NJZ3dOV3lBUE1VNUQ1YWc2ODBBY0NITHNOYjZpd3JzRjI0SUZzVnlCd0FVbzdvMkVSSzNuSFpiUlk1aHMzYytFSmxKam5KZFFXM01pb3NlcmFSY2dabElZdVltbHZvbEZNR2dOZGVpMzZEeFFOQko4dlFDTkhPd1ZONm9xazlLU05tSW1WMk43dnR5ZDd1UzVOdTl4ZjN0bS8rOU43cnIvN0UxaS8rcTU5NTRZLzlybytxaHZaSERnVGNMMHMxTVNGaGdRUDFVbVh3cHo3aGtuc2x0Ym9tbkJNL2Myelplc2M3SGp6M0o3NzNYL3lxQjU5Nnl4ZnZyWjM1amR0TEs1Kzlzeks1YjFPMXJtNnFSM1ZjMThDL29RbnZ5YS91Wk1KdmthdjdPQWFUWDBJcHJ5c0FiR2piZkZWRDRocmJaclFRTHowdWNwOEtEbnlic3N3Z0wxVXJHVnJTS3pKeGhkRFNCM0JEYi9ISXlRbVZNcUZ6ckdnNDMzY3hBc0FibC9xMnN6NzFTRmxPdUpWWGFRWEFCeFVIWEFwa0EzeWhKUzV6b1FkMVhBYW5ZK3d2YUNUd0hHMEFvQy9CWmZMRXI0VkNLeFVaT0V4dmdzS1NmRExod0pDdHZUZDBoZkZ2OW01ZS96LzJYdmpsSDM3dWEvNzluKzVlZmZXS0tHd0NxWjNtWmo0d1EvUjdJclYrT3MwS3QzcVdycXZYYkd6VmNQNzJuL3oyYjMvaWZWLyt1OSsvZk9HKzM3ZlpMWC91MXRwaytaSTJkSmUxV2pQeHIydGx2OUVjVFA2YktwTXphSnhMa2xkLzVUdGF4a1QyYWtZQU9IT1dZOUpkdnJLbkFDQUdORkVtVXA5VTFyK1BIcmtmZ3VlNEtaM1J5OUFHdHk4VXNja1Z4UUZaaFJVTjQvc2ZXUElPNEkzWHNmTGdsSFVuTWpoZ25SMzlwdGVSTm9VUU9neEx2Vzk2dm1BUHZxSGViUXN0SldVbS9RSFpzcUtSOE5wcjZqTnQyU1psMXNNSEdIVURxR1dLUWVCT2pabE1FN3hFUUZpTG9MQjNjMjluYVcvbkovZXV2dkhkbC8vNVAveisxNzc1ajM1YzNPd0lxRVgzMDB6bXJXb3RMSmJUbDRyNXAwK3hScVBVa1R3UEFuZXUrcHQvNXU5OHo5cysrei80Ylg5Zzc4ejUzNys1dXZUMDY1cjByMnFGdnF4SmYxV3IvRldONyt2S0NRQ1pFd2h1YXFDdzZtOHFaOVhuTHBPMys4cmRjenBsRDdLbFBYZCtxVHQzYnFtN2NtVzN1M1pWZHdsU3MwYlpld0tVTFN1ckV3V0E1VzVUVjhlWGJoTUE3Z1V6c1dWNWVkSzkvdHFPQTBEMkEvM1g2eThvL3BVVHppQXFCMWR6b3dwT2c0emRnWTVsWGZwNWg3QzUrOUhkYTFmKzU1cy8vcjkvNTB0LzRzcy9JZ25zQ0VnRWdEWUk1TkRKM0V5bjdXUWZuRGFsR24xU1AvS2M4T1NzK2x0Zi9aZi84c08vOVk5KzNkY3VuYi80eDIrc0xUM3hzalpvcjJqaXY4RjFyWTdMT3E1d2FQSmYwd3lQSFlBbXZXYTViaVBYRzFwTmV3YXowUmJQQ3Zzck5RQzBmaml0OEVFQjRORDZFZ1dVSWhEb013Y0NBcE5mYUlJQU93UUhBdTBLQ0FiYUxqNC91WHpwMjY1OTcvL3dIUy8vdGYvc2s4SVFDRElJdElGQTZMcU9BSitxTkcyc254WUZVemNtUEFmbDNPNVB2dVBESDMzLzJUZTk2UnR2cksyODYwVk4vSmMxOFYvWGl2K2FqamQwQUYvYTNOTU9ZRS9iZmsxNExlSDBTcVlVbnVYYjVZc0FjRHNQM1YzNkhRZUFzZm9FQVA0MDh6TVlPQkFRREhRczEwQ3cvYk43TDN6aUwzM3NpNS8rdmlLQ29jVTFWUWFCZHRpZHV0MEFFK3UwSlJ5WUIvcmx3VFhYOXAvNW51OTU4bis1Zk8wN1ZwNTQ2dSs5c0x2eXJwOS91ZXQrNmZXdSs3Q0N3TFA2T091WGRFUHJGeS90ZGgrNXZOTzlxQ1gvc3ZiNFc1cjhlRDZGa2kvU3dnTzM5QUNYZ1hySVlIZG5wOXZtMEkyaGJTMG1mTVRJc2FYN1Nwc2FiN3VUbFhkTjN2VFUzM3ZMVDEvN2prZi8yMy8wWnNrVTFmY0hXS3h5N09hUXkveVdUYytUZU5vVVNuM0kwM21aYjMvYnYvdWxMNzN2clcvOXI2K3NMTC85T1UzNlQ2b1RQcW5yZmVlQ1g3dTUyMTJtazdoZ1YwcGhMdHpoYWJFRHVFTUh6cmo2aWU4QUR0QjNvdVYvU2NleVJxVjNCSnJtUEZPeGNrN2piWFBuUXpzZis4alhQL2NsNy9qSHFwNlhCTzF1SUhjQW1SL1F5dnpRVEs3VGtuSyt0cE9mS0RwNVdENytyaGRmK2M4dnZQMlp2Ly9penZMYmYwR3Iva2UwNHJQcWYwaFIrTmxMZTkzSGRLZnZOZDNHWjZ1UGdCUjJXb3hiNlBHcDRRRTlpTmp0Yk85MFcrd0lOTFYzMkJIb1BoTzdnWjNKOHR1WDMvck0zMy82UjEvNWM3S1d1Y1V3Wk9lYXU0RWNscG1MZEhmVGFRa0E2UkJ5ZE9MQWNkMVgvc2svZWZHL2VmM0tmOWM5OHVCZitPV3IzZHF6V3ZtVk93Qjg2UEtldC9xdjZMTTh0dmtwaEhxTHRQREE3RHlneXdNRmdtMEhBdTA0U3lEWTBnTmkyNXZkR21QMUxUOTE1ZHZQZitEcjlhaVZyejR6QUdSUVFMVlRNVnhSN0c2bmRNUjQ4dS85c2IveE54NzdMWC82ejM3WHpmTm4zdjloUGVMNW5DYit4M1d6aitOalYvZTZWL1JaSGgvalVUR0Z6TktZdGJWSng3R3BtNHRiK3ZpczNEaWVaWk16azcya2o4dzJ6aXo1QWFlYk4wN05qdlRZOW1MTGttN1kzWkF0WEs3TksrbkxDcVU5alVDMVM5dDhlV0hwNHRxN3o3enZON3h2OHZEalAzTGovL3BCN1ZXOXFJM1Ztc2V3SGJjNUtOL3RBSkFPSUNjNm9nOHIvOTZmL3ZidmZPTFgvYUUvOU4zWE50YS82RmxOL284cnVqTHhueU1BNkRQNFM4eDhwUlRnd294UGl3QXdZd2ZmZ2ZpN0ZRQ3NzbVk5ejVDMFM5R2VMZ3VXejYrOGZlUFRQK2Z6Tjk3eW1UOTA5VWUrVnhjSlU0UEFIVmg5NTFWUFF3REl5ViszL2F6OHYrNFBmdTEzWDlsWSsveG45UWxydStwLzR0cXVQOWFiNThSUE55OENRSHJpOU9WM05RQVVkM2oxMXhPUy9Ia1RvaUN3ZEg3NXlkVzNmc2JuVFI1NjdKOXBKNkE5N09rS0FuY3pBRENIeDVOLzhudSs3dXN1L3JaditIUGZkZTNzK2hjK3ErOW01Y3IvVVczNVg3d1JIK25kamNsUEh5OENBRjQ0bmVrMEJBQTg0MHNDaDRBK0NFd1VCRGJlOFo3M2JMLzYyai9aK3JtZjFCTXFIdmRtcDBwVEJqZlh4S3A3TjFMTzRRd0FCS0tsQng1NFlPWEwvb3YvNm0vY1BMZnhtejZrbGYvNWNyMy9VVDE3LzVJKzArZmp2YXg0TjVSZXRMbnd3R0U4NEdjSDlISDBydTRGY0lOd216c0FGelorMDhOZi8xZi9ldmZnZzF6aU11L2FBN0YzWldqZmpRQ1FocllPSUFEcy9QVVAvdngvMmoxdy9pcytvbXYrVCtoei9lZDEzYy9OdnBkMXM0OW45TE1pM2xxa2hRZE9zd2QyTmZ1M2VRS1ZUd2gwYkNrSTdEMXc3aXVmK3Q1LysvWFNXNWpUOGZIZ3ZBTkF6bUh5REFCRXhPMi8rYTkrNW5lc1B2Ym9OM3hNVC9KOVFoUC9FNzdacDBkOEY1TmY3bG1rZTlFRDdBVDRacUtEZ0o0WDJORzRYbnIwMFc5NDB6LzZtUytWUFR3eDZKMnZjdVpDT3pkVW5FK2Fad0JvRFV5RGZRL2lqLy9OYjMzTHc1LzVybTk1YWF0YlkrSy9JRWV4L1g5Ums1K3Y1bWJGK2JoazBjckNBeWZuZ1YwZUhOSjY3OHNCM1JSVVBGaGJlL3U3dnVYaGIvN3ZueTZ0NUVLWWMrTGtHaitFcEhrR2dGU0grY3pCNU9lWWZONVhmZFZmdkw2Ky9KYm50ZnEvcU1sUEFIangrcTYvcHJ1WS9QTFFJdDI3SHRCSEF6dmVDWlFnb0V2YjNUUExiem43MjcveUw4cW9uQWM1K1hPNFp6NXp1K2NWQU5JZ2NnN2FaZkp2LzgxLy9jSDNUKzYvK0h1ZTA2dWNYdFp6L1JFQTlIMTdMZjFaU1h5bklxWHlldFBucDBUS2p2aFVNQ2I3NWxUYVFoQm9kZ0k3ZkJoNDhmenZmZFAzLyt6N0JiV1hBbk0zdzQvYnpzbHBhVnhPL3NtWC9aRS84c2hENzNqbk43NjgxVTFlMXFyUDhkSjF2YmxSWCtyaDFicW5LZms1RDNRcWVxRWZCdDJUU2JyYnY4V2UwK2JyWS9tMHNjVjlkU3doczZ1MHAxZEs3V2pFOE5YaUhRMGN2VXQ2c3ZyMHAvMzVCNy9pNi83UFYvLyt0MnI1ODZKWXJLZ2ZEVktlYVpwSEFHam5DWk0vQThET2wvM1p2L0MxVzJkWDMvbkNTL0d0dnBlMFBYcFpuL1VyQnB5NnlVVlA4QjRJbmova0V3bHRWazZkamxMcFVLbTFCWHV3NVY1T0RERHNJT2REZGwxcW44cStXZEV1WUdsbjJZK1E3MmlzTDExWWZlZlpQL3pudmxZQjRMK1V5c3hGdWlaTkFaNTU4azI0R2JkQ3YrVEI1TWZRcFQvNHpYL2w2VS83cmIvOWI3MXdZM0tlWi95NTZmZWNQdko3UTkvb2d5a3JuSnBjM2JHdTd3R3M2MVZhL2k2QXZnOXdLdlU4ak85a3k2cWVteit6c2VTYlV6dy9mMnI4ZkJqOVJ6ejB3MW5ad3VwNlU2dUh2c1ovS3UycHUwZGVOaUtINC9PVk0rYytjMlhqM1BkZi8vRWYxaDB3SnlaK0hyRE1OT0c3ZVNYYXlodC9PMS93dFYvNyt6YzNsaDU3V1pQL1ZTMUJyeWdpTXZteEdNYlRlSER0bjhkcDFPOG9PdUZuMzh1UVRVZXBkeHA1MDVhOE4zTWFkVVFuOVBTbkFucWdUWnVCYmxmamZrOXo0TXo3ditZUGlNU3pBY3lQWklXZGxIbVVUdmc4NjBzQTk0MTBUcVBJdXkvL1UzL3F6YXYzUC9TQjUvWDFDRjdoOVpvYzhhcFdvVjN0cldldDBISDl4M1ZsYThReXdlQzR3dTUyUFd3cCttTVR0dHpyS1FlYWJUbkY5cUFhNDV5Zk45cVYwbHdLTE4vMzBBY3VmczJmL2g4dmZlZGZlMEZrdW9RanJjaGNxSk5QODVwdjlFOGF0dlBGZi9qcmZ1Zk9tZVVuWHRHMVArL3VlMVZPdUtUVm4ydTMwNXJvaFEyZEZMeDlENkI5b1B1MDZudzd2YkNGQTF2dTVjVGd3ZzUyQUl3aGJxdWY1clRFdlFETmZnNzlLSW0rTmJqOHhJWGYrOGQvcHdMQXQwbHY1a25HTTFrMDJ6VExBSUFScERUR0FlQnRiM3ZiMlhPUFAva1ZiUGt2eVhoZTRmM2FUVjdQSGRmVVVlWDBuZlBPY3ZaSXJxQ25UOVBiYTRRdFRCWnM0YmpYUHdWZ2dMVzIzQXYydEx1QVhVV3M1WWVlK01yenp6enpkNjQ4KzZ4bWhvUEFYRzRHTWlsbm1YTHlrOVBXN2dmKzFyZCt6dTc2K250ZjFiVS9yKzUrUXdIZ3FyN2IzektlVmhoSFdUZU50dE9xNDJIMXFyYWtUZmR3ZmkvYTRoOC8xUlRuaGlYM0Fqck5pYk4vNnRzK1J4QVQzNHVsOHJZN1ZUejVOTXNkUUdxTEVXblE3cHMvKzNOKzg3Witjdk9LVm45K3VJTlhkL084OUR3VVNZV09rL3NlQUJPL1RQNTcvUjZBOVMvMmZFcmNBeWkyc1ByZkcvWndJMUJ2SGRhUFNPOXh6WEsyVzFuNzlIZDlzYUFmMWNITlFHNEtNbmRtbW1ZMTcxTHhqR0FPQU9mT25UdXpkdUgrTDJMNzcxL3MwUTdnaWw2dHhYVmJWcGlwdFhjZ1hPTXFYdjBrZ0dCd0wraDhrTG5ZZ3IreEkyMDVpUGRld0xlMk1KZkc5d0J5RUdJTHRwK1dwQjg4angwQS9hQUJ0WHord1MvU1R6YWYxVTlQYVdtY3oyWEFyQUlBUGs2L1o5Nzl4OS8wVFUvdHJhNS8xbVU5OFVjQTRGZDcrTkVPQnVGcFQ1NHNVcEw5R2VybVRxRFgreDR3SXBWbHdIRlVXKzRoM2RPR1VkN2FNdkdBWXRqMUtTM012S2ZjUFVnajN6Y3ZmUm1nS2IrMHN2NVpELy9SYjM3Nms5L3k5YjhrclhMZXBDSGtKNjcrTEFNQW5rWHB1djEvMTIvNExlL1pYWnRjdUtwSEh2aDEzcXM2K000MERLY3hwZWZSRGM5NzBnc2dYOUlnTTcwd2didG5rblJsbTh4MitkN1pNdC9hdTJsTDJyTkhoK2gvblBaNEFtZVVwckNOT0daVVJFWHZBdlJwQUJ2K3M1TUxhNS83eGU4UjlBczZtQmFwTFBsTTFKeGxBRURwUERCbTcrTGpiLzQxbXZQeEE1M2FBVnpYVzFQb3Axa3FvZVpPSlBHcUo0eHhyNVN1WURkQXQ5eXFkMmJTYTNkb0VUbzU2QXBnc1dUczNhc0ozN2VKUHNsK1NkL2JWdUU5R0ROd3U5VFd2RHV3QXdDL3RDeWw5NlRvOGtOditseHA4ci9xOEZCVDNwb0luR1lKdlBNMGk3bVhDcFBuZ1RHcksrZlB2NWZmN2RQWC9CMEUrSFhlMDVEUW90VmtBRE5Eb0N2ajRQTm1CaGlxcDNFQzc2bmszWXFVcm5wWDRKNHl3OHFpT3YyUS9ZTlJwY3VxZmVNQUIzOWFuejhqRGlid1FIM2ZSbWwyWjc5RFVBT0tjY1Y5Z0tVekY5Z0JuTkdSOXdIYVlYYmlQVFdMQUlDM1dsODZBSC94Qno3d1lMZXkvdlpyK3NqamhsWi9EZ0tBTmdFRFppcmZyY1ExV2F0NHE0Znh1TDhjYkRXZE1oZWhnb1dVMlVINHBNODlsMEs3UElUQ3dQTng2alE4bEV2YXZ1STYycDJuMlUvZlFFdXJEQ2RDT2Zpa01RRXpKWjYzK3M0cjZUTUFCU3kxclA3d3B3RXJhODljK0xLdmVmRHlEM3puaTlJQlJkcWpWL2FFRkp4VkFFQzlnZUx2L2ExZjh1VDJaUG5oNjRwcitpRWZCNERUOUxZZjN1R2EzWjdYODJrQVl3dGQ2U2Q5RjZnN3E1QzJvbDkrNDdmaGZLa0pJOXU0ZXlUWkRobHluejVzMG9jdzNVUmZjcnFYRTlwZmtDMFRIVmZWSjllMHNPUVB4dmhudmQwL0RFZzlmU2Q3V1pFS3ltYm5yS0lMd1pNU0Y2WFpuZWtMZ3BkamdCYkZwWlhsaDgvK2UxL3lwQUlBandXalRxcUVFc0FucXRwSkI0QlcyVlRZU2ovMnpEdmZwcDlMWExucGxUOVcvNG4yUFNldEFJMmVWR0xpNndubDdyd215enN2VHJvbnowKzY4MUo0YVcxSlBjRXdHaVU2YzRSeWNTcnlBTjVwOVVlNHNaTkg1T0dRS1VUWEdWVjB4ekQ1ei9JN2xpVWQwWWFtV29KSHprZHFEZXRQSVJvMXdsTmtBbTgvdHVxZDVldDZ2dVNqK2dHWjUvVTdFbHl1RVFqd2VGd09SR1hPNEd0UDFuNENDQjVxelRMUmtvTUFnTWFhM2hPd3N2clVwNzlOcFovUWtVcGtMdFRKcGxuTlB4VE9BLy91bm52bzRiZnhJZ1FtMUpaNllYTjhZWGF5ZGgxUld2UzhvN0JxbHI2d0FlKytmNm43TEMyVlRQd3ptaWZuOVZLQWRlWDhJaXdHdWdNUGFBMTU4SkNpaFlCbmRSNjBwVUtXNzdROWRNOWQwVHpzUU4vVTNlM2R4aFo0NFdPaWIybUJ1YjQ1NmE3cGVNZjVwZTRGZmNuc3AxN1o3bDdTZXliV05OdERyaGdGc09lakRrTVJQSWQzQjJaQ29nSGxzMHUwRVBjQnRBZFZrOTZGUFBEUTIwcUxWcWZBWmoxcFRVNDZBT0MxR2xBRm96VEg4c3FaODIvbDVoOFRQNFBBYWJqKzU4b2RwUWRKQ0xiNlgvREljdmMyRGFJSGRFdm1NeC9xdXZ2UCtsTE5BNGJkQWNlK3VrWFFRZmhCTzNNbzRQempwdE5pQS9vZnhnNzA1V0JDWDFjZ2VFRWZONis5T3VrZVdsdnRmbFN2bmZyd2xkMU9QNG1vRlBzM3JyK0JYVS80N05QczFMZ3NQRXpMeUR4K1d0Yk05K1NYSXVSTGErZmVLbWs1K1ZHZ1ZRSVlsVThrblhRQVNFVlQ2Y3hYbGxmWG45aFVwM0J0UmhEZ3l6KzdzaU1ybklnMXh4Q1NDckxDSmN3ZDJjOS9lTGw3KzRXbDd1MzNkOTE3SHRIV1VrU05uMjVMOXpENDhvWnZPcFZ1b05NT2xaTC9VTXlIWTJyOTExN0RVcHZtV3ZyaEpCNkNxN0czQVE5UjhkWXNyYTVqVzI1ZFUxUXE2NkRlbm5ablN6cmVwTDQ3cDZEOXk4OTMzUmMrb2tzRC9ZNzNDM3JaN0xJNm01SEhoR2VTOHlLUnZLbUxQVDZLTW96UldhY2xLMTBhMXR6UXczSnZWbWxOQjUrYUYwMEV6U0NkZEFCb1ZVUnhLLy80NDQrZjBaWE5JNXN5aDV0cC9GcktMdGYvOHUxTXJXdTFPU1NNZnF6NnoyanlQNmtmZDM3Zm8vcStndXBlMGRPTHUzcHIwWkowMTlpeTNsTjFsMDJ6SHpLSE5LYXdWVDByY0p2NnA5Q0cxTmdtSEdBSGZpZDRxNHY4bWZxMlJ2ZXFwdEZqMnIxOTRxV3UrOXlIVjdvZmZHN1QyLzVsSmo1OG12dzdpdUJjSExBN1FMVEZ6N1VUbXgyQWxGOWFYbjJrZStLSmplNzU1N1hVVkpVT3NGb2NkNUJtR1FCUXkvNzh6Qy80Z25ON1M4djNiMnIxZEFEUUpPUFhWS3V6NzhDQUU2bGFCanplNXFiUVordTZuK3Q5Vm41KzB2V1N2cms0MFMrNzZLMVQzVXE1d0duSFIvYU1jUTJoQVU5RXphTUtTYjFxUFNGYVhPcTNENWVFVW5GVXJPTG1CYlQ2dWMyUkhlQmFIWUVaWjN6a3ZLVkZoL3MxWjNVWjk0aTJjYzhvdVAvOEczbzlaOXdWZERCbkV1eHFWN0N0bFppMk1zQVBuQ1g4ekJJS3M0MVUrL3kwdUNMQS9lYy82d3ZQWFhuK0gvQ2pZcTM1d0sycEt0NVptbFVBUU5FOHVzYys2NzNuTmQzUGMvT3ZEd0RpT0ZGVGp1WUkrMXhWTkU2c2hqMHI1T01iays1KzNSbC9RcXYva3J6RCt3cjIxQTM2K1hrSEIvZlRxS2swQTlwcFN2dlVFV0xLazdCOU40aStyODRwTUdpZlR0aUJYajVOVnpBL3JtVzNlVTNIdXZyeXFtYjIyODR2ZC85T0FZQUp4ME5BclA1OHBzT2s1NTRBWDB6bmNvL0VaU0h4bnVJdG1vTDFqcFBIbGRyajBsSjZuVjkveDdzdlhQbmhmOEN6QUtTWk5UK0xBREJXZHUrUk56MTVZVyt5dEpHVDM3bU1WVGZjdFpSSzBza1o4ZEhyTVFXQUZSRWZQcStCSSswMnRmWG5iY0FzR0RuQk14OHJmeEIrekhkWHk3TDN3T0hFQUx5cnloMis4VnVaWVNucUw3YjBYRWl2cWw5NVpvUDdBZzhvdUNzR2RGYzArSmp3VEg2K044RHFEejlqZ2U5SklKL0ZRYy9uT00zU0w5YURCckxSbGFXTmxVZTVBSFZDZ3p3SzZ1U3lXUVNBMUs0cWZlN2hSeTdvMm14VnIwYVBhelRsK1dXVVpMN2JPY3B5YStnOEgvRnBzS3dxMXlkSDhUVk5FYm0ycElQSWFnNmN5WVFzRkw2K2VOY2c3R3BUNnQvaURvSkhKaDNFTmpmOFBsdGFCUnNpSUNSeWdya0R2QkFUK2xXUi9LeG1PaStoSWFycmJEcjM0ZmhVYWtVMXVTbElvbDUwT01Ec2t4ZVFzR2wxNytLakJJQTBZMmFObjJRQUNLK0ZxZ21UNzIyY1AzZUJKMzU0N0pRZ3dMYXJmUVJ6WnRiZFFuQXFpSXZ4TXJkYkdRd2JHaFIrd2srOXp5VUwxMlFNbk9UTFRvcCtFajVUZzJqQXBONjFQSFdwOWg1U2s2eDNTUGE1c0tWT1UyMkJtQVRsN095WTFDUmdRT1kxK1lZQ0FKLy9yNWtuVm44bXZ0N1k3KzAvbndnNGFKVDZ5QkJxdGtrRGE0TENOS1RHbDgrZHpSMUEyeTRhbmFncUp4a0FXa1dCcS92V3psODhoMjA0blpXVVFKQ2RNcTQwanpJZXpJTkp6OEhYZTdYb2U4Vmd1NC8yNkFrams5NTlVMkJoKzhzQkZ6amRPdEdlVXdVU2NVSzU5RVh0ZzlKSk5WdmxWT0NnRnU4QWYweGJCdlpUU0IyVkp3aWErd084TTREeHlLUm42MjlZT1o5TThkSGZscUpGKzlndzlUaG1sVHpHSkp5Y2hwWTJMcDZqR0tYWk5UM0xBQ0RkUTNHOTZPQWNsbmoxMTZRaTE1T2FweUpsdExjeTBvbjd3S3dVVEhoL1VhYm82UTRTVE5HZFZPQTZzc0JQczJpQUhCU21jUjhmWjMyYUlkcUFZNkhUU0xmVmJNQXdLSXpGMzNtNXRXV2FzcVdGQVlrQ2FwVzhncFlWTkhEWmQ0ekJmdUwzTndTWG1maUlLZlh5aHFCUU0wMXIwaWUvRTRDZTNlbzZBWUNVWm1ZZTJCTTZuM1FBbUtya3h0bTFzMnU2RzdQR1k3UWJmQ1F6NlM3cWpzeFU1aE15N0RCaUdBem9nTU41SUlUeWlrWUZPVGdmT3JGcllWZVFaUThpNkVZRVhrVXdrUld3S2ZYNG1VSk5pd0x0MzMxT3h0S0Qwb2hTaWlQc1FaVlBHRDlzZkw4dFF6c3FuV29VU3U2K0ZFd3grKzNNaGg3dDNsbnlUc0M4bXZScytibmhSOVhvNi9oSTBHSXNYSVFacGlVMXluMm5GYzNJZGQyQTNyNndxa2VZRGt4cDRZRU1oeVdjZEFBb2JnKzNTZ203YnUzTTJzYUtBc0M2amcwRmdETXk3Wnp1dE0zQnJ3ZjZJUld0REVLQVcyRWtGSmdCbzhEc2daTjVTK3RoYXZhSkVpdElwQUJxTWRFenlzT25jWGFibkFhT1Bwd21ycmFQbGR1azgwdGpXNnhUYlQ0MUtUczJGZUhuTUY4QmZNa3BCRHM2Q1BUTCt2cHlkMEc1UHhrQUxab3Yrd1FqZ0IzQTBHY2dacHZRaFFEQXdkcS9kV0ZOTTZXYWhQWXpTU2NkQUZCeW43SmJ1NU9OaVY0RWVvMTNBZXFobWl0WDlycXIraTJBZll3ek1YRy9VUFc5QndrNUFCL0RKTHpEMHo3U3JQSUlZUEo3UWdzMnZoREhjRkRqbkZ0SW1waC9RclBvaURyd2o2Z0VFaktJaGJRakNqZ3g5c2FXSXJNZk4weCtkbTVORUlDb0ttUUZkQUJQRzhEZHVMN1RYZEp6M2F2dTZxZ0xONWQrcnNkSnlTK3JUNXpLQlczYVNaOTRNR2xWSDFud05YTjlqNm5idnI1RUFKaDVPdWtBTU5WSE96dEw2emYwUU0xMWdvQStYTCtpSHdHOXBKY0NUR1dldWNsOUE3UWZnN3dFSTQyU25RZU1OVk91SHI0RUVJWkIxRzc3V3hpaUI1bFBCUTZNWlJXMDRWbWR4djYwVlFOOTFQS1lxVlZtcEdSZm5BYTFGVThlSHF1NXp4WXh3SU5tQitZaXVBOExYM2JIcHQ1R2MxVnZwZVhiZ1o3MWtnREl6M1d0SUUzL1liRVdnZ3FmdkkydHhGVnRBVmEwL1dRSHNLM0F0SHR6d3VNbk0wOG5IUURHQ3N0OWVpeGJEemYzUXdpTVArbHd4NDByekx2c3FDOTkwSSt2SzZOd3J0NU04SG93RUpveWVycE1UZU4xQWxmS0xzejVGQnEwamU3SHRGUjNUb3NBdm5XVk1mZk15dnZWYUREMGsyWW12dGE2clVtcW5KbWFCbVV1N1FnQTBVL0ZOSlVoYzZWSFloT1ExLzdnR0FPYWcwNkpMOFhaWnlpbVJEYVpMS09HUVhDelNyTU9BT2c5bVN3dHIvQXhTMDZnV1JseldMbkZ6NTdvd0F3dGZ3OEFCWnRFS1hjQm9FMHVkbkJaUUVYWEtMaktBK0JrYWhiNi9BQjB6M0JFS0EzYVYyMUlvTm5ZOGV4anJBanoxRklDUTRVcnp4Q2R6SGVXRDFVdXN2WWpFK05jZWhESVNXUXRqVDV6RUlCWTlHMmZRQVhGSjBGTWRnSUFNSGYrbVJqNVJDQ3hoVlNxUitHa3p4TGU5czFraWR1QjFSUmFTN05PdE9WWkJvQkc0UWtmcjhZRVFuMFZjRzdEY0tKR0hWWVlPbTJqalA1WkNlaDhyLzZCc3I3akFOQUdNYi9Jd2J4Um9WLzlEWVVhSXMwOFpSdjdIT3FOODZENS9aZ0JXWVZHZDVkRzlHeHJoRDZ4WXNvZjJCTElRTFhuTW9hRXl0OEN5R3JrSE5sL0tSWTl3Yk1nc1MwbGtMUDlkNzlDOHdEUUEwR0MrWmpRdHduYXlzTFBKS0VVN2Vnb3VyUnpFeXFKUERtTnVOTlQyOGlkeW1ycnA4TGdlTFNPZHg3VUNaWE9iaXZNRTY0clFtblVYcFYrdnROdmhYdGRjd0RCbWpiMHNHb0t5YVNLSnh2N1BIam9VVU1sbjBYbVRiQUVvMHVSYisvN1ZGR0hiem5xN2VQSCtKckM1aWkyK01wd1RDRGE5am5GdWhCNG93VEc5bDlOYU5tUFZSTWYyQU45dTBLZ3N2dGF1YS9sbGNNZmRjSmRCSDM5bDQvK1loR3dNT0g0eGlvM0FuMnJvSmM4RXloMVFobkRtak16YVdna2RGWUJJSnR4ejJseThQWHJHSXpPNHlrc0U1Tnp6cmtIVERPbzR6dmh4ZmxGMXh4QURDSVNaVmRwNkdHWEpvUjVnaENnejJGempxaVE0dlB3ZERSUGpMbjNyZW8wWFVjVUxmVTFlbWlvQWFYUXVNVVh6RDVDSzZXRjI3ckhod2ZOVWJBdE1jbVJhcFRGSnhTNXo2Z2pnSXdqQTNqMkc5V1k5QnpRK0s2QWR3R0NTZHdEWUx0SzBVRkRlZlkvOUZrbGRodHRCMmdwSVFDTXNDZmYrcXdEQUJyckU0NGxmZ2F0TjdBNCsrVE5DWStONWJaelFZNDFPVlhJYTNtMmVwREFlNklyOStBUmczNi84UllUUHlxeEp1NExBdGxXTmtZYlUxUFBRSTg3VlNBUjQzdy9RNHRCRjVkOTZ1WDNVZ2JjUFhvTXFTcTFiODg5clkyeHNJUEtyZlRnMlk4SkxRSlB5QXNvK2FibDRPaEQ5eWM1b25WcUp6d3dsdzk4QXNBWTRDTkZnb0JuWDZrenIzc0FxR2NsVVZTM3psMmU4V2tlQVFDSDg2aDkzeEdDNTMwUEFKL2kzVjMxWnNBTWFtL2U3WFFHUWlnSVlGUjlGSmpIUm5PQVZUdVFvb0xMQlhiR2lmck9zcVVvcHd3ejVBa2tiR05pcmRvVDhrWlhWSzBNS1dtVWwzckpwbUl2Q2RZa2pLb2xaVUFlRlBaWHVHUE1yZVJMYTVIRGRnSHF2d3JMb3VoRExFT0d5c2xiY2dkeHFrSG1LSWtiZ2VzcTArLytDQkM4eW5FL0lMNGx1Q1JoU0c0WEVOaG1rV3hUMGMrNlJqeWFSVk1EbVhNSkFHclJZOC8yNldTbkpuS2d6cDBYb28yYzVLekxPVFNRYlRVYzhYTTBtQjZ6VlNpVitDOUg3Z0JZRWVxTm91UVJvNi83WFNVcTZPektrYnZnOW9HY1RCQVVhZ3h4aGRhVEJMa1FCTUJVMDRTZU1lVHNPL2Yxeks5aXJtVDdXRnRFMFVQY3h0Wml5ek5IT0hveSt6TmNram94TWJFcFhXRWZTYmUyUEFnQVJXL1RFYUlqNnNSczh5Y0I0SVVrWTdIZ2owQXc4MVNhb0NuYnRjY1BoUlgxWnRqNFhBS0FKb3AzQUhqVmRzcXg0ZHlUczZ6NHp3S0JjOGpZb2FVWndrRzBIOXd4b1pqSU1PZ2tJSDZzTVZZR3ZnekVTMElJQUZrM0puM0lxVEJWczM2MjFjOVdpeTRjaFJvOTJ4YzhKUHNpVUl4TTQwd2RMUDlhbWNLRVdxY3NpMzE1QU1WS2hvcVdHNmNCUnhSc2lNRjk0b1VkNDNvQkIxTjZubHRCUS92SG5ObVhLSjhCQVo2RS9RbUEvSk5TMm54d0NTQTE4ZHRTMmRHeCtyTVRaZUw3eFNDTVM4SDU4Ujh3bG5GWlFJcXp3Uk0vc2NCNENCWEowbk9XelZYOTV4UUE5T0dLUElrejAwaWNmeElXdGpKaVVzVExIa3RUcFUyMi9ucStXaWUyODB4YzVwUHJlcUpxK2hZRnQvVDVFTytLNE9VUWZvVzV5cHVGSHg3ellVYkM1S1hzTmxWMkt2Z282R3gwMEFxSFVibkNNQUFHdjFOWERIT0dza1Z1eTFObEF5UWRlQkFzUUlTdHZRcEFTRTVONElnMEhSdTB0RDE1VHk2Zm9zZllCckZVbEd4TlA5Zy9Vc1Q1Rkh6ZEFUVEtldXd4RG55VnJacWE0R2hRZDNsQ0lTOERRWm4vdmx4b3hKd29XQU02aXZod1NLQU5tM2FpalRYQzVoUUFpb2N4VEFsalozTVBJQnF3L3d6R2hPYzNDQi9RRjVIZTkrQlM5eG4zVGJxbnp1bGQ4WHJROHB5ZXRlTHVLeDVPTHordWwvOXRDSzhmQWVxMjlWcnBYYjFNY2tVakx3WmZXV1dLYkJ0VFRtWCtxUlNoT3pScE9aSXhQb1BlMU1pOHF0L2xlazJ2SFhwUnI2citwSTR0YlRsNFkwME03aGprMXFzb1p4MGt1TWNWUWhGTktWUkxKZ2hEbmg2elg4TURNZnNKaUhHNkJTbFpEcDIzbWtaWXBXcGd3elphaXo3SWRzRUhiWHBlQXdBVlNpVjZDSkRYY1h2MVYrZUJ5M2hBSGQrVkw3THI1RlI1Vm9tK3BSMXNjWnFnMmV6VFBBSUFwcFdCS1lOYUkrL1F2dFpEckU1RTlwcFU1Z2RJSDlNRS9xcG5WcnJmOVpZbHZSQnkwcDNSN2QzOGZJWDZLU056QmtZZUUzMGRRMTlqcWp6SVRyNGhGc3IrbEx6N0tYVXN1aTE5TDZwN1VUOWg5YS8xNHhVZmZHVkxyMDNYdStzSkJQeVZrVkZoMVloQWdQUndKclI5Q1NPY0N2ODBubVNaa25zQ1ZobGhkMU9jVXVQa1VMWXNHOU9zcVBZSjV3ZDF3QkJ4UzBTMGIrekp3dG1UdlBOREZPekZYZmFFTDBHRjg1aFJnMHkrM1A2VDg2Q1F4MG5qV2tUTUt0VWdReU54TkMzUHF0VjQ0bkYyMGh2SmRFQzFUWUNmdW12b1J3V1JSYUlEYzdYSUNNb0RIRGUwaC8vU3A1YTZiL3ljbGU3VDlidCtlSk5veHdFOGw4OVkxTTZ0VXZwRHIwZm8zbkp1cVh2NjNIcjNub2RYdXgvOHlQWHVlYjIxY3MzYmt4amVqZ00yVUdYMnBJSnRGVUlNMHhLV2pSSW9PU2tuem9nNnBSaWU5VG5BS1R3dDZsQk1iWVZid0ZQMEYzZGU2MU94NVVqWXVkUndQTkJvQ0k4RjgyQUhnQUR4NWRoalRESU9HRU80bW5zK1hCYjRHUUdWK2FRQWw4TkRHN01jTTNTcGc1VGFtV2VheHc1Z01QRXA2UDlFZnZLRVRrR2E1MFdBaXR5NlpsZjQvaU9mdnR6OStmZXRlTVhuYTFYNUJRL1lUa3RDLzdBaE5HTEE4YU1rSC9pTXM5MzMvTUwxN3BkZTMrcFdOVExaQmRTRE9xb1VnNzNrakI3ajhXejQxOEVoQ3lXUElFQWhlQUtLYzZ2SHRJRllnMnhiNmNUaGJBVy9GSTFrVWs3c0J1dVdIUmhrZXdhM3RLSG1xc3RLVGhEUXY0K2srZWFmY0V3QTAzU2lIYitXdXdRQjQ0V0xSY1pOenV4VWZ5UW5GWjFaUzBQQjh3a0E3WWZ2eGNDTXdrTjFEbGZLVHFUckRFdW1PMGtqOTZaVy92L3dyY3ZkTi8zcWxVNjc5MDR2VjhtaGREamhkNUdMTFNmdXVhakgwLzZqVHp2VC9lMS9zOU85b0pmYTgxWFJuUFI5THVOWStjdHV3Sk9EeXFUZVFWRXVad0tsMHdGME55NkdaQ3ZjK3pIN0dYcldPNEVHZXNWS1RsUFd1OUFDTnJhYW1kVUlDTzIzQXZHVlYzV3h0MEVOR0FsZTZjbDE0RVlIaFZMSDl3QUUrMUtqdEVTZG1TVzFOWEE4QTNvT2FaWUJBSk9jN1BDbUV5RGtVVmlPbEZtd2hKSjdpMGR0bGZuSTdxMjZ6di96djJxNVd4ZVJHM25tUFpMMHU4dU12Z1NDKy9YbXlpOTkrOW51YjMvd2t0NU92S3V2VTdEU1JTRGcvbkFFQW9BYzlBelBzbTU2cE9wVWpRK2dGazJmYnVlUVZFcEQ1TlNLaDJDWldnL2tnWG8xRVdzdzhXbXMybTNRUW9JSDBBeVdPNzRFb0MybzROa1ZlcDZCVUNJSTVQWWZPZ0VCSVNaWEpjMTY0cWRxS28zcG1IRnpWZjlaQm9EYWlGZm5VaUlZWU9DeWtNY3hrdW9rY3JiTTVEaVBuSS81L3ZBN1Y3b25kWmQvUTRqanlKZVl1NTdRbStNZCtsbnlkejI4MXYzVUoyN3FsMjAwK2ZVQk5rR0FtMVFFZ0FnRUZFb1F3QXNpVU5jSnB5UmdaRU5MMGlpUEtxVmlyVDlpVW5FL2FUOW1mNjJETUtGeDFUdlpVcVFJcGxIR1ZrcUd3UWZnMVQrNHhCSVZxTU5FcmdzUUNKVTlzV2xEc044R1ZYd0duLzFLSGZIR1Y4UmpoeEM4VkpwTjhrZVN0Ri9FQzV4TG1rc0FzQ1ZZVkt6QzBUZzNqVDJLcGRVeEJmRDJUUUpaL1o4K08rbCt4OVBDQ0Y2RGNBOG5kZ0VFenM5OWZGMEI0SVoyQVhxK1FUYnJXeFVPQWt6K1BaOFl0Sm9TeFpuOTNmRXd2dm9ZZjNtWnVaVmp4RVRubE5SRGljbThVQTVtU01aRDVrVlFHdEhVc3Y2ZW1hRjNhMThFQWdVRTZrbUVjOVZObXpHM3ZRZUEyS0RwTndCRXc3L2sramVlU1U5VHVEWEhLano1Z1Z6S0ZlckVFOWJaOVdyZjNZUlNjMGh6Q1FBWWhqMXBvTzA2cG9IWmdjakFhVVI0T21sYlBmMXJIbG5TeDM2VFRyLys5Q21STU9QTjUxZTZCL1VXMjVldTd2aVZVUkVFWWxCNjFXUHlpOCtEcHNBeEdYREJ5QkgyT1JNRzJ2N2svaG5YcVd5cUhQL0NIQ0NnOGg0VGtIeEw3azlWVUQveHcxNElpVXR0bkNNRG9PUWVIK2l0SXhQamhTSStLNXVGbVBqQzhkUW5lSTh0WUNvMWRTbk9KS21Ob25ib05wTkc5Z3VkU3dDZzJYYnllN0R1MStWUUdBLzYwaUh1U0FtT1FMRFh2VWZ2OCtQbXpkeU1PcFRHeDJmQ3JqTXk1dEd6eTkxemw3YTh3dkVsTWU2Vk04aVpDdjdDQ2lPSHlZK1R5K3dPSDBjWjhpQVYvdzF3bzBKbE1WQkxNNThMMXJWdEU3c2EzWUl1aG9MUGN1d0N5bTVBL0ZtbnZRUm94SGpoZ0FlWDVXU0g3cDJCQ05CeWQ4QXJ4MGlTN253V0p6ZUJXVFFWemMyaW1YMHk1ekpYNnAxWW1zZElaVGozdU83RVB6SDUrMTBBMyt0K1NoK2hrYnlGTTNSdm4vQVBGajJvTnhWekNiQ3M1ZDgvSkNrbjhtVlJ2bVB0RlV5d0I4NDRDR0IrRXhRb2txYjVmZCtZVXoxd0xlOCtIa3ViemFtMjIraWZBYzYwb2x6eWtWZTQxTUVuakpNTUFza0EzcmJvVk9LbEw2L0FNWGI0NGdvdkFzRzMrSjlkMTh5VDJrcjkzUmFLenlITkpRQlVPK1JJK3NaSFJSNGVZRWpTRis1ZjVYUk95TnZ6aXgwZTRBTi9NWHlxQkFCWjQzUmU3Ni9lMWlqZVljTFhQeDVqSlJCb2hkUmc4VUNXN1pIM0s2RUY0Q1NuR0dXRGdWWW9aT2JxVHcwbHdKVFNNTzdqdVRQRUFmcTV3OHRPUUhCYzY3TWVpei9MSlUvYk1tL3ZBVER4d1hNd3FabGp2dGNpMkE4Q1laaG1mUVlGbXZYRFFLcVE5ZTdNdm9OckQ0SVNhaHpNZXFLVXVRUUFqTUdabVFDSnlqajFPTWtkcUlyeGhSekprU3c2a01kOFA1VlMrb2NuQW5mM0JZQ1kvSHg3a1FuQnd6QU0zREpOWWtlQU0xSklPdVlXZnFkZnBnNjlJQlFKRVlSTDRZUXoyYUMybU5wT3JlN29uV2owQVM0NDZsQTJPZmxLUUdDY01mWTRYRis1NnltcnM2eklZa0hoSGtBK2xKTTMvK0FyMWFnMWsrUkZpMFpLc2kxWm1HRStsd0JnQitMRTlLSnlERHlPa1hRMjlSQkY1OUpwZkhQUDEvN2VFZ2p4S1pTd0U5dFkvZGtGOEc2MTlvOGZsTWlQd096VE12RERRNkloZ0dSblp5RlFmUStNOGFJWFZHVDc2V0FzTWtXZFFON0xMSkF5dDZFVE52cjUvV0xINEFHbzByYkhCcWR5Wnc5V3hnaUgwVVdlc2dnSTBIWGtkVC9yQnpzRGdnQndmdzlBaFJtbjJrOVdUbzJSenlITkpRRGs1VXdHQUl6RjBlN0xZeGlKYjl5cHlpMFRiekh3S1RmeWdJL2JSaVBtN29NeWhBQ1Fsd0RldGtvcjRwM3ZDWGdISUZ1THNaa3o2bk5Ia0k0WitNaXo0bGJtTmF0OTQ5Z0VUOXEzZy80cU04TDZsd2I5eUMrVFd5bFhjL0tLeDk2Yy9FVVk0d09RSXplSTZZTnFmakVFM3BUTG1HVlZobFJVRVRURFJGc29PZWMwbHdDUXYzcUtiV0VqQXpNbTdHSHRUZC9RU1JsUUhLMlJDRkVPVEo3RHlreStvOVJqUU13em9SdjI4aDREdjh1QXhqVlN1RkhsU3lEdFUvM0RHSW9HSHF3K3c2U2t5dm1jZkNDQ0oyRVArQ3lVdlBlRm9QZzNwYlc3NXhsVlBvRml0b051cE5UZmVIQUNrc2QwVU1MbnhJMWNZNnNnMkRWNE1qZEtVNThiaWlGT2RBRU9xaUw0L2ZYS29lVWk0KzA1alJrN2JOL29remdSdUdnMGo1T1FlUWdaY3drQTZPRU9UZU9VcDNNUG9hTlpzbXJ5eDUxYUJCZU1janAyMWltYk8ybzd4OVpORFRMUjJ4MEFocUlIT3dCR1B3OEU4WlliVHc0YUVuOU1BR0FkeFVrVkIrb1dpZlp1bThSekNLN2JpbWtaUEdmSHZWajBiM1hIeFBxSkFMcXFvbGRQRVV3clFzSGhGcnNHT2JDNmJ1UlV4WWQ1clE5LzNnTUFWNnI0WVNLeFZjMlFjZElKbVRZRndkbndTVGN5UmQ1Y0FrRGFnNEdaeW5qTjRxRnlkNTQ0NlNqTDFNbWRrWEl6UDVTMGtKR3NSNnlhMVE2VnUzTUxwL1U5VksxZ1FpLzh4dDFzRGh1dTZGbi91QWNnUENRU0U4T1R4YU9wWGdBRXNlQ2lNT1VNZlpRcXhrQXQxZlpHN0hkVXhJNXFTVVNET3VscVVCdlpsV09DZW5HNUVQWmJsb2lJOUtHVHhXY0xLbVMvMUU4RWhHQmg4ajJBd3B3TGM2TlpsUVB1cEZKZW50ZzhDVTFkVDByK1FYTG1FZ0NpQjBJRmp6RlpkeWZQQVNBcEEwaktvemR4bXN2UmxNdDA4cEhUU1hyL0dBcU1tOGRXdHY4OFQrR0VUQnNiOXNiekFCcit3bnZlUUFNdWVWUXE1K3FnREE0SHJPUkZpY2hLSWNTNjZTcXpKMVhVa1lDUmY5STBUM2dMd3BDUW1QYjB1Um92cTMvYTNlZWlhZlppWGI3eUc4VmRGNUpFNXNSbmkyL1hDbWxZT1RzQWRnZndsK1pEaVJtZDBkdTZJUi9sNXBUbUVnQndMdU91VHRZN05NNHJvV1RFUFlBaWJJNU91MFAxajE1ZHR2R2VBOThFWkpUSW9aakx3U0JsbFpySUdRelV2RHVlZVF5bW5PeGl5RlJIbXhBSWFsSVVDM0pFZzYxSDlWQlQvV2pnUU1RQmVzcEFUMEowTnF5Y2lhK1dQT0dGbi9CdEd2eGdaMlJPQUloVTR4NTFRQlVDTURUOG1OdC9aSUpqM0JJUTVwSlNIK1VGbkV1emN3a0E5U1lnbHJYSEVVMTBJQ2wxTW5wWGVWTTY2aUJISmo1emkxUmhVRDZpYmdleGU4eENsSDZvbUcxTVVmY2dFYTdqbTRCVXhnbkNNTTRacER3SE1IZ1lpSFk4Q1RSQnNqSFY4RVNKb1krQVhwRW8xYlAzQTY0WEd2WWlnSFJJTmxCUTQxd3JIeEhvWlVmRktxMEIwZ2JybjVPYjFsVTU3d3Rrc0t1VHYrb1htbkllQkFEcUNzZDJ2d1pRVkZDWkp2SmpRZXF4Mk1DYkIyd3pTVFJBZzVuY3oxbVlYVDZYQUpBVHQ3WFBUMWdkd3k1M1JPbVVjYWNlUTl6dHE2QTBqYzQ1alp0bHNISjRrRElKeXdEaEJpQitZRDMwbWdqc3dSUkFWWjI2Z3hHbVlrUUZvVTJFb1VrS0JmdlFWWnI0UkJ6UWd6WkFGV2x0cld5Z3pPVXNEdk1xUklBcVY3dG9VRG83QkpIYmNPVTBFQ1RiUW1CSW5BVnJsdHVXRUdlMU03QkFUNWc2K0ppY0JVYi9FV2pKWVp4aEl1ZzRLVWVmTE02d1NZdWVTd0RBR2pvZ0Q4bzRtSDQ3U21yNVBSbW9MRGsrQ3BFaUtkRlJpbk5MU3p6ektBZEExc2x5OGxoWUxSd2VRQ1VHdWhQQ0MyeDhRU2U1RkNzclFOVlhBTmYvN0FKcUtrSThXSVQzajFjSWx6Y0FNNi84TkI3L1BjcXpvclNUamRWV2d5MVlLckd2MjBJbTM0YW41UWRHLzl1bU1wRlRKeWEyRkVyYlBORnBWazVvY2JEejhhRnhGUGlvVkJtc21YQWx2dzRNam0wK094L2VFa3gvc2VxdlVKKy9wbElEcHBpVHkvR0hHckMvYVdpbWpmVnF6eVVBMko0MGpyWUZZeS9IVVJOMXZCb3FwM09RN1pUeUs2S2hKYzhkNVkzZ0ErVWN4NklEaFEwSXZnUW9BWURQL2YwREpySStYMmpCVFN0V0xnOThQT3VSMityRGdJNDBXSDN4MjZBbENvRUVUNTJnRjY2U3dYV2NsRElQckdzbFExT3Y5REFtVGpZeEtUM2hnV3lqaWdRR3RDU0hYT0ZvVGU5UUNSc282dkRpbzl6VXpFWENoL3lNTlRjTkNRTGNtVWNlZkNTQk0wdkZsSm0yTVUzNXVRUUFKcXdqR3hvVWJ4NW5CMEJWTGgyWUIra3d5ME40UllnNFNxWEpiRHFxSkkrSVpWNVpCSjJjNVdSQjZWdUlyMno1dFZGa2xDRVo5Z29Cem1vS1NIMk1NMjhWWWFDbGc2RE1nUFN1UjdudnFSUTh0Rmp0eURuNnlkQzNGTzJMZFdwQ1JwdmE1d0JNSzUzWDh0WCtiQ3ZlQnNaZXB3cE1MY3BYYWdsalNrclFtSUt1T0pXQlFSdG5tSlA2ekFnRlNlVytaRUtzK0hMOFpIL2dKOTgvRUkzZzZPMi9jbDVhazU5V1VZOWpWc2xCR1FjWEozTnZZaDVwTGdIQWR1bUV3L000emh1QkxFZGVvWU5JZzBGWWNFR0pjL0tQY1cyNWhhZUlxT1JiMFdBYUQ0NldIMXFXRXg3ejE0WkdnTWV3Y08yRFFMNVJaNWxBREhBVmRDSkl4YW9vQkJPZ3lNcTI3WHZxRlVUaWc2M25weDd0a2lPN3pST2ZlZFRkZjdac25jaDVUVHM1N2VaaWtIbmdDNzJLb2NYUXgrM29SRkR3elU1UkFoZk13Q2pvakx6QXhvRTBFTjhqc1AxRmtSM0p5NThCNTJmQi9MR2ZhSkF0UXdEVndXZHF3RVNkV0o1ajJnSlJZazVwTGdHQWtJdE5PZkN3cllVUGF5c2RrSjNBWUVlbUI3MkIvVkxjWnFrRFRCcmtwZUFzQ2NGbXhrQ05DY213UDBlWFBtbFFlM1NHamlaSmVROUM1ZGdCcnMzN3VqMEVIVVoyQUZ3R1VDY090djlNaTlpeXhnMHhsYlNVN0pwRHNsVjVXU2QrYldoTis5bDF2VFJoUTk4czJpRFhzUzU0WFhpK2JRZ2RQZzY5ZnRBSGRRa0FjUVNNUHNqTkhQWDJKUlJVcXJvS0FDWVFNUEU1SE5DVTh5bzN2dVRFK3h5M3RMM2pGNVA0SlNkK2xvMDNQTjhRekc4OGtOOFVqdmNpYk9JSER5QUZCam1kd01BcXp6c1NVaS9yV1BXVW4xQ0FnMVJnOUdDYlQ1RjZmcVRhL3BQTjREeklvRVRLNmxrKzBWeHRvV01kUTdKeEhta3VBUUJIdXdPd3FCanBqanFHaGE0bkdWd0sxQTVObUhaR01yTTh6bUUwcmhDU1BoUlFzU09wcWlzU2d5elRWRTU0eE1EMkRucHVMZDIyY0tZSjMrYklneGNjUjZiNEdGQ0RSTTdrajhua080TzZ3T1U5Z1d2TFM5MVp2UWp4NHZwUzk0QmVJWGEvWGlKeW4xNk5mRUc0czNyRE1KT2RpZTdKTGNGaTk0UmhBakJ4UlBLZzk0dEdKTnAwK0FxZDYyaFBDdEU4MFlweTZFcWltTEFSNVpScVF1UGEybVYxSHYzSHVNQXV4anB3SHByakFZc0FYd1NKbVB3RWd1djZTYlhMT2k1dDduVnY2R2VWWHRkeFJmQjEwUWdtN0IzNFpTVUNGM1l3a1hlMWxOTzJrNVZRUVhUYXhpNUkzbWNJNSs5WkZGMmh3YWQvODZRSTBDZWFpbURyS0JpOTVwSG1FZ0N3RGNQcW9US1RBYWNlSldVbnNIM2ozK3VmOHRKNyswUkJ5dFRDaVR2cGZOeEcydGZpZ2RPT3BOOUtqK1RaMGVDK3FZRTgwZHMvK0xHUUMvclpza2YwcXJESEw2eDJqNTliNlI0NnUrTEpmMFl2RDFsWHIvSlNWRloxOGcyVk9XS1ZaNldQZzhuaGlhL2M3ZWlVN1kxMVNoc3loOTdDWS81cDVXbXlVd2E1eDRkeVB2RWdHTlNKcnpJLzJMcXBKM1UydDNVb0tyQUxBTWZCenVDNnJpbXY4RnVMK28zRmw2L3ZkUy9wZU8zR1huZE51d2UrRUxRcW52WlNoQjBFN1pGNCs0OWNvQ1QvQ3NmT2piR0ZOOWhOb1RkbmN2alNqbEpkbUR0UExDWjE5WmZnd1NYQm5Zcy9VTUo4QW9BNktTYy9tbFJERDFSclB3Rm5TMHgwUzNxZXZJV2JhaWJwbEt0dnNzR1NIWjk1aSt0RlVMa3ZUWVBhK2dNNm5TbEVyTldDSkljT1J2L0FSMDQ1QnQ2ZzlxQUFQNG1QK1o0NnY5eTk5WUhWN3FtTGE5MGplbG5vUmUzZnoycFdNK25QNjAyb0YzU2MxNCtnS2hZNENMRGFzd3BpQmdmdGNiQ3Frbk1mWmxPSGFUcGxIemtIRDY3UURSU2NNcWNEN1UrR29uemFnQStjbEZjUXVKUXpYMUxnZ281dmVNbVRmdDZ4VHJ5c1oxc0lCR1h5WDVNeDF6WW4yZ1VzNjlKQkFVSDRxekx1VlFXQkY2OHBGMDd4UVR1TzNXNWJrV1ZYQVpXeDRZYmtXOThES0FwNFlTazk1WnVxOW9ONGl0YlZEbFVucFpnb0hmT01vNVU4TndvY21ObWU1eElBTUlHSTNvK21LR2RuSHNYRWREYU9ZaUE3SWZzQVlhMHZEZXVVT1hWYjJHVWpnSTZmMEsyS1VjSHJpUkFNSENiTklDL05vRDUxeG1iZ3Q4Zk82dWZDM25WT3EvMUtkMTdMKzBVdDV3K2VXKzRlMEN1UTd0ZlBINjFyaTg5S1RuMG1OY2QxY2lHOHhkWnNRUTRycXlkMTVsUWdrZXNnYy91Smh6WktZLzFHNUFPTFk1SGpzaXVtY09XZVpDVUg5bEVDbWk5VGhGdFdvT0M0b0tDbkgzSzI3dGhKVUdEeVg5Rng2ZVpFdXdBRmg2MnV1NndBY1hWcnFmdkk2OHZkczY5dkM4ZHVha2t5WWc4UU9uR08xWjZjSUo3bHVNR0tEOVY0aytDSXVnM3lpQ0NCK282RkhMRk4yT2NTQU9pVXVwb1UrQmk2eHVCVVJiWkhUUDdCUkp2U0ExTlF0MnoycVB5M0ZIWUN4QndUOStsNi9yMVBiSFJ2MW0rY1A2d2djRWI3ZW1oTWRGWncvYkN3WG9zdW4ranc5bGxsbG5pdjBESUtQM25JNnVSY1pQSThBQkl2OUtoZ3pGeE85ajhuQTVGbEVaTkloZVRWTzRPQzcwOG9FUGhlaG9MRWlrYTFOa2pkZldmMVduWFY0UkxoOGczdEFoUVZYNzh4Nlg3ZnV6YTYzL2lXdGU0bm50L3FmdXpqVzNyak1yKzhGSmRXUkJybXR5ZWsvWUpuV1AxeFMxNEdvRVY0TEdOQjZpWENzVklkeXhJRVBLODBsd0F3K0M1QXNleW85d0RDM1ZHWnp2QktTaEZuY1lnaFFkQ2s5R1BOQytDSlVSaVNsc3hScmxnSmFWdTIyT1lFMzVET0t0SFVqaURWc0FDMnRWb1l3VmszcTZEci9ick8vNXdIVnowSWI4ajR5emMxNGJtMlZRVHc1OXZDTVRRWnRIbDRjcUFkZ2xJWURZeFRhYkQ2WkV3ZmxWTy9FZnBZeFZ1cGhjQzB3WERUUXVxQXpudjRRRFIyTzNRVkJ3SEJRVUdqTzNjSjU4OHBJT2pnbnNIckNnUVA2ZGVZMzNMZmV2ZWIzN3JlL2ZRTFc5MFBmMlJUdXdKK2xsMEJSTUdFTWVhSmlKSldsQk45RzNjSElKcWtCazBXTlZQcWwrVkQ1UkpTSno0Q1VHQU9hUzRCQUZ0c0U1MmtBMFB0dkdNWWFGbFpIM2twQXlDUGdtdUxPY0FQeWxOTUNDeWRYSkV0VUZ1c3JmUURRUFV5WUpRQkFyYzdGaVlWUEVDTkRIVUwycko2T1VVMGRZVmtkWC94bXI0TnFLVnNWOWV2RTIycCtJaHVXZnYrRlMxNzVId001Z25UQ0tHWnRMZEtCRGxPVTNDSmF2VWJWK3VkdjQ4U2lOU2xGWFlBSytoc0s2c041QXRaOFVYR3dONUNwS2xkK1l2QXNLM3RFVHNrYmlCTU5OS1hDQWc2TGlnUVhOUnhYY1NYTG5lNmxGcnRmdlhqcTkxUGZHS3IrNmNmMnV3K2Zqa3VEZGhST0RISjFZbmxZazU2UkdPMGxaY0kzakdvREdXc3AyWGM1dVF4QWsvNjZqYjhKMFdlU3dCZ0VIb2doc2NNYzFsd0hFZWxmOWhCMUNnTmNpVE1mRHA1d3AyVXQ5dzdsanhGSWdva2JhVE1GTzdEb2hqazI3cXI5Y1pMMStJdXZwYW9GUzFyeXhxZE1lazFCR1ZrM0szT29kbW9jdGlHcGxWSmMyNHI0d0RHTVpyT3VFM0NYdmZybUM5bGlWNmxGQngxTWdIbTlsMExlWXcxQ2R6UnJtbExsd0dibXRUWENRYjZaZEFWSFU4ODFIVVAzNmNBKzdvdUc5Wlh1L2MrdXRMOTBFZTBJL2p3cHA4LzRCNEJFUndmdTUxQld5cTRyTjJZZFFsaXc1SnEzVGEzem1ramVjSzNyWGxuREhNSkFMbHF0emExOEZGTXdMblRvbVhGTmNKYVA3bzluY1k1N0lscnFob2M0aWtaNHo0SHlvNE9yTTRGNFV3RHhqd01IdjB4TmNkMXJITUtHVFhlb3FtNU91Rm53cGRqY0NOUkVkWFBBakF3TFQrYUQ1bHQ3U0k0bEt3NkdydHZleEM4eVRwU3FTa2V4REdsM2FaVytxK2lXb2NrVWppa3VBV0xHOHJFdnA0V2xjWiszRmVXQ0g0NGhzZDZkZk0vZ29FQ3dxWWl4SVJBb0k4YUhuOVlsMW9YOVhIcEs1UHVkNit0ZGU5NVpLWDdlejkzbzN2MnRWMC9RSlZCeGpzOE5SQmVSNVA0Q0RHMFZMK0kwZnFsUFlmTnMxTG1oNjEzaDN4ekNRQjR4UGNCRkFseU4wQW5EYnYyMXBZTWVGV1hvR0s1T0F6NVdTWXZLZHVpbUdOOW5MYzBWN01nUXdlZWtpWHp5aWdFZXVaQ1p4aWNBTnIxSUZJT2ZUeElxNHdSZ0F4V0IxWHpoUGNUY01Vd0xnV2dJTGM5d2hralFWbWtTazJEUXNWUy93Qkt6ek1WT2thdFVSWHNUZjhGTUdTd0QybTdNRlgrd2pZdWo5VmtWKyt3ZFFJWUFBQkFBRWxFUVZUN0ErTGYxbVhDbGo0ZFlHY3cwU2NKSzNxMjRzbkhkWS9nQ3BjS1M5MS84cmxudTMvNDcyNTIvL0tYTitQQkluVUVmempiZllnc0ZYbVJTS0dvWCtrUHRPalQwSUllUDRhbTNTc2I4NXgwZVM0QmdHc3Bic1p3ZDVaalRlR1lEMTZHYmpxOGFjUmZUeWdOVStZQWQ3NTV1TVdPTDk0bXl3UEpSdXMwemxzYThMNUVRelhkUW1NUEF0WjZKUVlCbVFZQ2Y3RURLRzBMMzBwSjZTME9FWU1rZWZ3d2lEK3JsclQ2cUsrdmc5UVd0cXVDanhwZEJoTDJGN0xoL1JSaGVtSVBUV1U4VVNUNnU3MCtBZ3ljWmJvWkJEbUNGbktaalgxOUNhTFFaNDFGUGQ3UFNVaWVIeWpTc3dJM3RDdFlVaEE0cHdjUG5ucENZL1dscnZ2cWQ2MTNENTlaNnY3eHMvdzJJMDlkU3JUN05YSVZhb0NtdjBYT3BxT2hRNTZSdVZvdVM4ajN1SDZaUTVwTEFOaVFRL2ZPNithTEl1MTFkY3hOZWZIR2RueVVkU3diMVdrZUkrUTZIQUFrbHlBelRpS0xLYkFseTJMTnN3NzBNbTRTTmRQOE1PMmxQdjVsSUgxVXRhZFhYL2twTmhtdDRhZ1Jxd0NnQUtqeDR3T0ZnWSthMGpkRHAxVHNVY1hkQVQrR05NdkRGQlZzWDRQMzUvTWxhTmgwR0JxNmxabmlFMWc0OG9FcG5oL1kwdXJQemNObEJZSTNhVGZ3MGllNzdrdWVXZTBlT0xmYS9jQXZoMjhqQ0FSc3YwdUdtMVFiTkZPYnFvQ1F0MGtFOFZVV1NPMUVOalJYZUFweUhta3VBWUN0MWk1YkxSMmJjdTZXamsxZGpCM0JQL1pGQ2ZxRzNiODZaUUJnSW5oeUZLKzVjMzBxWXdGZWFGUHlVc1YwNUkzVDdmUTAzWElGK1Q5MkF1anJ4VW1uL0tMSlFVWm5zK08yc3V3ZFFOeHBrbnJpWnZWSFdSMjA0NEhJOGlOYWZyVTEycElFMGNzSklGSUtOcTJuZ2k2b3dqZ3N4ZkFlNHdycnRBeFdsQnVrVzlmSG5ud0V0MVpyUk5SeElKeDNXQmFuVXluYkwxU3NkY1JWbWl4WnRiSEVEVGZEWTlNRTA1dmNIOUNZbmVqZXdFTVBoSnpQVjBWMkN0Ly83STQvS3ZRTldQZ2h5ejc3WHdYa0c3YkU0YWx0YTBpSnk3enNOK1lISC9IT0k4MGxBRnpWOW1wYnEvT2xTenIwc2N2cmwzZTBBeURLSHkzMS9FeDJuTzJUSCs5YzFZVFkyVkhZOWlZczVOSVpISmx5Y285ejAwTlVzcFo4S3JMeVdKL1M2WWxrb09XejVJUTRlTkFob01KbG5oZzhoWmpWRDh6OVRUcXZDaUVOUnV6bmozc0Uxa1YwMnFuUElzQmEwNkJRSjBRbEZ5QzVNcGY0bWdKc0VKVnlHeUFkUG9YTmVpZmVoWDVoeUphY2EvYVlyQk1YVlU2ZVVlSlBJVUpYV0F5ZTlFWjRwRVFWbjZ1RU9rQ3lMVzc2OC9neGp4UHo3VVFlcnJydmduS1ZmNzEyQk0vcm1lSi85dXhOM1JqTVQySHdkMytra3FqVTZ4SUtaaHRXWVhUaUc0MnIyZ0tzYWZ1L3JvVnk3NDBSdzR5S2N3a0FmanBOMXJjT3NJT09ZUlQxR0UvTUJSWkIzd2xIVGl1OEZPR3JZdys0OEkxejBKbUMzeHlKR29zMlBycFVZTU5LaDFQc2cwQzBYOGFnQ0QxN3JWOWJPUmhneTgvWFozbnpyN2YvS3BQN0ZWYkN4d3R4TlFoUkhzRmtkZlExQ3JaTjdFTUhZaCs2clROcmVOUjQrRWhuQTRXb3pNWHFWSlVoQlZJK0taUGQxWFJTR1ZJdk91N0pWRk1rcDZjRkkveDhjWXBWZUVzUERmRTQ5WDM2aEdCTDVkLzF6blU5T2JqZC9lekxPdzRDeUtHK04xL0tDVk51QWJraWdFZFZlSkI3dXdRUEFYMWVhUzRCQUVlMEJ4M0c1RDJPblV4OEJXWFhyMDRxM3FXTk5sRTBxdUNUbmpuRVFtcUFBUmppQ2hQNjlqcHpVeTVLMmZuSXJaMk5iQm5LY0NCbE8zMzlnaXdJNklESko5QXArWGt0T08vL2h5T0dlT1Jjais3cDdtQzhFekNEZ0dxSlArc1dVVk96Y1h0VG1TcFMzRWVyVUd0T0JZci9wdElLMHRPemJiUFVjYkNEcHhnWjIrZTRVV3BVMlIxQVR6OE1RMEhCeWsvN1BGWHFjRW5BUTBXYnVuZUY2eStXbmNCWGZ2YVo3cS8rNkJWL2wyQlpXd1lrdFNyU29sL1ZwcHdidC81a3dMaGkxTFJNQXBnWHlNcnhOSTN0cEhGekNRQk1XaVlIUjNvSzhDZ3BxNUxuRzFUcEZFZC80VEp2NWJzTm4wcjdOTmlVWFN4bFlDY3JtWVZodnA5VmsxSXNjVzBYVTUzcWJSQ2dSeE1YOG5YT0VRT3ROQUhxb0VSOWRsRTdNaEorRHhEQkVSRFVMbmdoOFlGWGZ0c2dpVVhvVUhhMkdIcjFiU1lYZE9DZXIrYzVZY2g2VHBPWnVvZ21vNkxFV1VkUnl6aE9LanZEZUpMTHdvekxoWmpTUXBDbHFJcisybUNFakNENTY5UnMvLzFSb2E0Tnp1cjdCVS91TG5WZitta2IzWGQvOEhvSnZCSU9QMHUzYktJdUY3aStOSk1zTk9PZVJyWUJLMGViR0QySk4yMU9VV0F1QVlEUE44dmlWUU1CRDFUZ21LT2tjRkNwRmJNdXFqT1Fpa2NITWxYSWhjQjR5dFJvOGxJc2hCQlh6MmJPVWhUYVpta1NMTTNueXptTlV6a0hVSEEweWpVZ2trc1IwTExhc3BFRjc1dUFqallTVHFORVZjcksvVEVndVNwNzNLY1ErSlFvRnJDVXdCNlVzbkxtQi9HQjc2WGVpdXR3dEFQYWs4TXJKU2UxTU1iUmZDRTJKS0ZFS0IyRlQxb3RtZXlScU5pWGFpd3FIZGY2a1krWWVSeDdTemNIbDNXWG5zZUt2L0RwdGU3LytkaG05K0hYZC9TeGRwbXRYcEg0aUR1N2huQ2pIWUtFaGI2aExCcWtGcUZMTEdwUU9aQVduRW1kWFQ2WEFJQzFPTGc2dWN6SzR4ckpkZzhuMDBrT0xGUDhnNE45Y0FKV1RudXBRK2JJS0N6bUd4WUNOZUFvekttN3QzakkxUkhYNEVrcHRVVHdtRktPMmRZQjNoUk43c28xMjZjQzEvdDhMTVNEUDdCeVprZ1oxclhVUkVwNDhpUGZCakZCUkIwMDBqWjRTSmdHU21yQVJKMXdIaTFVbFN1UXpRaFJsQmpZSnB6RGdjaXVranhaMytXQ1RGSDJUdmdTdGdFMTZ5RXQvcjJTTTFHNEI2RC9ibDFCZ1BzRFgvS085ZTViZi9LcW45SGdVaXdscFV3K3BzMVdJa1NvcEk2cVRWQ2xKSEFjbnZ3Q2dqK3BzOHZuRWdCd01CTXVEeHpGT0ozbWlGdWJHbDNGNUVkV3JRODZqMFpBb3BLUHNsTUZvbHFpYTNTb2lGc0RqWmpCSUhKN0VMUGhSb3pSQjlCZ2EyWFdha0p5czVQSFdQTW1JTG9hNXZxZklDRG1hSzVNZmtvcERBSndNRlN4RlVpK2lyZ1ZjQ1RtV3dscWFGTVVhNXNST2NKZFU2VkUwNmhaeHBNTGdhazNSR3VWd0VjeHBtWGZCTFJTU21SQnhTVlZQQ3VnMXdaMDI3cEQzeWtBOE5LU2R6KzIyajN6Z040dDhLcStQS1NaeEUzYVByRkk2VEpORTU2eG1ndEZ2WGN4Nm95Y0R6VHJJTkFMbWlrMGx3REFLbzBUT0p5VXQ5MXhGQXVaL1BTVjY2ZThLUUlndWMxQ002dE9XYVhxQXIzQkYvYWVzU0lDOEdvZVZZeklIUVQ0YkNPTmEyMkVWblVlRWJ3aEt2U3FYL0lyQjhlZDZMd0ptTXF4dm5BM2xKdUF0QjlIdE9TZGdPbzV0VUlUZDFKNXlqNkt2TmIrZ1lJSENLbHRsTlV6SFNsOGlBcjdzd095ai9JeUFLa0VrQ3BHNVI1dUtUaXhVSkR0VGxWd0tRTDVQZ0VQQyswb0NQQkVLNjllKzRLbjE3dGYrT1JWdldGWXZjRkE5OUtOVmdUbENGdmNvSTB2YkNFVFhUaG9CeWlTUzdTcFloV1J4Qm5tY3drQStZd3pSc2JFay9tREdYaDdDNm5iSm9JdDJ6SDNsd1VITmNVbUt1dFZmQkxFYmxwaDhQQkk1dHJRRUVIbnBCeFlQRDdJQ3o3R0NaS2lZeDBjVEF4ZTZyVEpza1EzTjAxRnRkQ3JNSUtHcjM4T29QQ0JKSElvTU1RUGc4WndpeW5DaXBpQ2k2RGpaRFIraUhSSXRsN1NxRUl4dTZjbnRJOFFrNm82cUpvWUFzTjJWYVpvMnFnaHk0MnBsMDNBSFAxQVkrSjNGU3JqUXhVRGRCQmdZbkw0Y2t3N0FHNjh2dWZSMWU1QlBTcDhTUzhtbmVqdWRINGFFWjBaN2Z1R0lBMDJUUVFsVUpDaTNTZzdBQmc1KzlOY0FnQ0JNWGNCTnBTeWJNTWZSMDNVb1dOY3YzZ3g1SXlraWVhT0ZUOXNGUzUxUUNhWVFDMmpWRllBVmtLNjZhVVpsNFZ3cmxPV0FkQ1B2R1NsSmtHdkNGSUdzU3dzaG5NWEFBbGFXeVpZZWdkQTFFTUl4bWNTenZjQXlQa1QyVHFNaFNUL3NYTUV6eVlOSmVQSmtvYUUzcTZHN2tsdjUwTldoYXd1QnlhWTdKRTcxRmRVTkNIT3RyOHREMm55YWVrazM4Z1R6S3ZYK0J4NlI3T1V5NEQ3ejB5NnozaDRwZnV4ai9LRklkWFFRSjlNK1NCL1Z4MnpMSjNjSHMwVkRUSlBoUkJQay9NS0FuTUpBQmhwL3dwSVB6T1dNZlk0S2VWUlArUUtFbUI4RVpod08xZXliWExxRXBSSTdwWUNSMVlLcHBtbGRoaUEyNDJLUFZGSTQ2bXF6bVlsWUJJekljbGRqNXhrbmdJVzJLUUNrN1dKY3Q0RDhBVEhnSG93MEtNOVpNUVE2eHNDS21KYmtiZUZiMVVIMnV5U2JKa3F2TWYyME5CZTQ0dmkrT0VnUGJPRnBQZWNSYklKT21rbTVyMEVoeFA1bkp3KzRQa0FQZzFnc3I1YnU0QWYrK1dibXZ6eU5VR0FxbTVmUlAzemNCSUE5d0U4c1UzSHlNQURJVk5rMCtIaGs1MTVwTGtFQUQ3RHp2RnFvNm9Eam1kaU9GaDE4VjlKT0s4dHUxam96blJxYyt0VDZvQjNmY3JpcXZKZE1qSk9Zb0xQY3BUbjVEYXVDRWs1THVya0lPRGF3WURzMnBoZ0JsQ1NNMkJRaG8xa1BWWHcwNVNLV0JwM2xwbDRCbDE4REtqQktWbDUzVW9qVmJZbHplYVVlbzZsTzFDTmtTbzdHSTd3NllJUmVsUlVTL3IzUkN3VmFqMDVJMjAxSGFYd3hVZ0NSZXNyZm5MRGhTZUNRbyt4UElvQ0NBSXU5OGh1ajQ3Z2FVRTE4dGI3VjdwemVqRXJQMnJpajdjdEgwMVVUeks0ODgrQ2h6Z1dwQ2tiQkdGRFgzUjJBREJtOXFlNUJBRDVvdzVrWU5KQkF5U28wOC9wd0t4UDJYSUFpdHlzbVNnY25yUnNPM1B3TVJSQ1AxaHowSXpFUVlyT05DUllqUEM0ZzhtcGlMeVNRNGdoVUhnSzNuekljT1hJS0pLeWF0SUNLeDd4K2tsQTZsRElyUXNNR2xuc05xanJvOGl0c3VDNTA0VE0yNlloMDdEVVZCNFEwSExvQXlNQ2JiQTloVTBTa0RMa3pNb3FYUGdXdnl1WnA2ZEhsZXh0R0dLdkJGL1N3TnFMN3RUU2V3aWpIZm5kOGt1Ylh1MFpYS0kvb0hzQWorZ3R6Ui9WTXdGK0ZvaEFRTCtJbCs1aVFoTW8rT0ZSZ2dIZFo3SENrNEJKTkF0OFVJQXcwd21mNWhNQXBEUkc0d3g3V3dBLzdwR0czODRtcW1XeTR3ckM4cEtRZWRKVWhsN3JKa3hla1VNWTdwYVdJc2s5WElyQ1pQQjVpS2lRWlFBNk1SRGlJUWhvY2hJVUtoNWg2RUFsSmVNTkZKbkNJMko4NEQ4UG5KS0hjU293K1RVUTQzTm82dUZYdEEwYW9sTWZ3M2txN1djUjlvUFRMWWtIVjdzdDVRQzVBM1E2S3N4b1JUSXA4K2s2OEswdm85WkFVRytpMFBaUEVSWmM3dUh3bkR0SFdDWTdSQW1MblpYS0NLYnp4Y05sQUxPYjd3MDhlV0c1Ky9Dck8vbzBJUHp2eHVDelJJdUlTd0JRSk1ueDRsUzA0bnNkaU01alRsY0FjM290dUN6TlR3S3czVzVKUjRDNFRVcW50R3oxVXdUazVGRkErQkxsUHFCYzJuTXVPSW9CdERCMSt4U1U3SXpvc09na2VIeGpLRVNVZ1NGTlVSWWNvSEo0Nk56QUl5OWhKQ2dsUDJEQ1JhYnBPcUd6TDZPa2dIVW9mR21raDI3NUtORGlTek5wcFpWSllabkRjOHQwVzRaYjFqNDVZaGlETDYwUnRwZGtFT2NJQ0pjVVlxQ1N6Ym5yRm94aG5ZYTRDSjFaS1NhOFNzaUdVU2Y2SjRLcjZpb2E4M05qRHJ6Q1AzR2hmQXdvZmVodVA2UGhTUjJoUmlnTGN5c0lrc3pBOVhwUVpxeHhlQ3dvbjNXYXp3NEFaM1BJR3ZkWFkveFJEY1JKS1l1T3lVbHBPVFJRVXJaRlo5QXdkVWpKa21YakVtbU9saXM2Q2JKWmRMSTRuVklQZ0I0V1E1bnNNV2lpb2xHRjVDYVFReVVsNjFGa1dNK0NOdzE2NFdIMTV6TEFDSXgybzhvRjUxM25ySnE1cUU2eHRtVXBjdVMyYVZ3SDJwaW41WjhuWFBZejBXVHhMNFdxc3hRMWJLY0hXNnlud0RFQkErdGl0UXY3V0s5akxCUnBLVlRJZWo5Rk9GOW1JVDhhY2gyQ2NySS9xbDl0OHZZZmx1eFVHbEFxOHozdUExaFdqek1kbnNLYi9Mbm9VSjVsbWtzQThBMHNHV2kvWUtpTzF1RERHSmlPcHJySFB3Q3B5SXBPREZSQnU2TVRYd05CSWJwNmtlRWhrdko2RVJWS1V1bjdhQk9xRUNuZkV4cEdtSlJuZXpGQ0hQY0xLTGpPZnJFWHd5d242NFlJblFOQWJGd0MwR0Jwa3dhMEF2RlpkTjVnb25vZCtLS25iTVRNTGFIc1lSTEtIaU81R20wVTR3WmloSGZaZzJ1b2lGL21XZHFEa3YzV2M1VkFVVHF1VG40OEtxSHhZSlZnS3Fqc0ZSNy9hekFpNno3OUtDdmZHWWhCRncyWlI1VnpyQ09hdmxJMTU4cXNiK3BBbVNEaUhjQ2NJc0JjQWdBRzJ1RUMwdkhob3NPZm1mVHBLSnhJWWxKa3dubmpSRnZ1VHhHeTNab2pqVXAwWUszWVE2QWdtNzhSVHBrQmtVR29qTU9lcnpEa1FFRU9xREt1TEhRZ3R6U0puSlJ0L2xJSGNreitZcThReU9iTFFZd2lMaThBa2VsRE1BQXc0TnhTTm5iYmhndGpkc3cwQlpGeFFLb2tuRVJpZ2dYVW53K1FuWUUrVlhYdUUzdU1USUt5TXlUWkU5OG90Y0kvenVlL0hEa0d6K2wzR2ZscGRUNEpnSmozZnd5cllzWUdaR1RBVGpYUm40TkVEdStjNXYrYzdnRTBEc05JbkplT28zellsRTR5djJTUTNCL0F0QkVaNk9pZ0xCZGE4Z1JkMHFpZ0U5dkFVZ0F4VEcyajhMZXNDU3RQTm91MDRJSVJJc1pUQVpBdUIrUTFaZzRDcXVTNFF3WkhUU3JFeDREQzBGWXlsTHg5SjJCZHFaQlFoVmRKQWFTeUkvU3cwVEZ4WEtieEtla0E5SDdPV3pCVzBraFJiQjhMd3BjdHJpMFVPVldjK0JoN3BNUkZ1YXorS2NrT1JwQzRDREFDdmEwbnB5d0s0NWMrTVl1eStQbjFlSk1RYm05RndNU3V6emN0VmJ2ZTVXOTBRUThtUGJKcDcxTXFBR0JjSHVsNUREMU9zb01ranh1d0thdUNPSlNqWkc0eml0SHg2RUdaVlgra0FMemhmdkpNSUUxd3AyVEhCcXNFQUNBbldGeUp6Z3U4T3QwVnN0endWUjVWVjkyUTEvT2wzc2JyeERqemdCT0J5VTQ1MjJVTEdsOEdpb0dKYU1zRWFCVnpGU1BIYUJpZGFLOXcxUEtCekZGbHhtZDd3RzJFT2MxSzNTcGF0QWllb1VwVmdvQ0V2VFV2Yk9EcTVZRm5MUWdrOVVHYW9Kb0JPK0RvRDhJRzM4TkFNS3MvbHdBZVJ4WnF3VWp4MklHQWpHZ3ZKampOVUxiZXlpa0FaeUFBTmVzMGwwc0FJcVVIdFF4TUI2V3ZEMnRnZFpJcU1BR1FBeTdsMlpPTk1CenJOZ3ZPZk1tdmlsRkdvV0FvV1MxWElCdXVET0xQaHAzcmxEeUlnczk0WlRrVFZYWjdOcHBDendPdjJSdGM2ZzNLaHhEY0FQU0xVSlF6Z0NNS3FLNzNrMHgraHByS0pVcEZMc1FnSWExTjFDQ0JiMkVqVC9aVW1qNUlBemRtUnpUTnBrb1ZGYldOOWlTdGhGNzlSQTNhaXdKdUsralMvMWxPZWpUb2FVb2tGenI3a0tKaCtZbHVkRUNtTGNGTVdENE5XR0dDRTVGSmJveEt3RFZ6a1poQm91c0syVHpnS1Bzb1BPQm1tZVlTQUdTbkhZWlAwaG5IdGErZC9NZ2lrWTNsbGFhQ1JRV1hPWkVvSit3eXNieE5NWm1NYXdkYVJxMWtEb2Ftb3JSQUVmQTFWMEV5UEo2eW5ta3FsRUZtQVpVL3F1ZjRjUzVXZ2lqZkIwZ1JqRUlDd1JJM29taE85Zk1Ba1FQWHNnODh3YWgvQ3gzNzRNQktzeU5ZajBiOHVGeEl1S3A2SWdxMVdGaGNicXNYRTZ2LzJ2N3YrWUNLUUdjcXk2bUE5aWV3Q3BRZEFMVHFaekF3VHphT2NERmFXaEZac3NiWC9hUEJiVjFnQjVTVU5lTjhQZ0ZBMWpzd2ttTVF1WUdqV1ZkaXF5dmhlRVI0OEFJVWVTVUx3U3BVRW5BaHRqa09KeVd1Q2dwMGY0WXhnMEhNbUo2R1hOTUxZRGh4NURSZWdvQ05GMFBMZzZRcVF5RHNCV1dTQ3J3VWRKbFJWK3I1N2pNOEdpMThUWmlQQWlGUnVXNVhMVVU0UnUxQmlZWk9PdlhPUEpSa1ZMaUZoaUhEREZPNGJxTi9yd29CTTBTUkdkU3BvSG9OM0xkcUIyWW12SFAwQXdiRmlRQ2dDUzYvYy9uZ0tpbUlYQWZWV09Hejd3WFpSb1lRL09Ud2NDa3IwTHM3OHZaUWNlWnBMZ0dndlFTd2MyUldPNW1QWXFVZGhHT1ZjT0FnVVU2YVFPWUw3UmlsVS9LVEU1OWpQa0hJYWdKS29wMUk3QWJFclVwNURWZWY3aE1EQTZLTUNjYUxPaDBaZlcxa2dJbDN3eUNwVDZ5NVlCSkg1Q2Nod2dld0RteGc5ZmNMUVJoMFlLbGtva3BNZnVHVm9aQXJXMm9LdGs2dFZpSWtUVldja0RWSSt4QnVEcGFzdXA5aklPQmtDMjRNZjQzVGZvejlrMnlxbDNxU0YxZjB1Q1I2Rmt1V3l6clZ5UzlQUnRHRzB4cGxKaTZzMldjQys0WmNLR1dZU0tsbWtZVU1Cd0dSWU9GSUZycHdYbWt1QVFDbk05azhxSXUxOXZjUnJCejdwSFpra1ljSEFVbEdsVUxMWjVSTzFnTStZT1hJYm04TXFWZzYxaldnSmhNa3c5R0Jxa2t2UWkrc1RGYS9xTU5vbmZnWGpldSthbk5VenJtS1JNTU9TT0pEVk9ybVhBZ0hBQWszelJVaUVQanVzckFFSjdjaDJSRlN4Q2xaNVJRZ1JTZWtOTWw4S28vUURjZXh3TU9MUzg1V2tZU0hUZS9IWnQyZUx6SE9kYXBsbkttVVpZQStwRWl5T3dqdkFjTXBxRFJJSGtjQUhzK2EvWWlFaFRLN05BdFhadG13QXNOUVNNaHduVUlycEdoT1BQQ0RHd1FXbFdlVjVoSUF4anVBTlBJNFJ0bGg2VXpsVERodzR5UlNUS0xpNFN4blIwUWVna3hEQUlDVGRnZktVMjdkdG9GcjVQa3F6NGdCMHUxYURJYTZzdW9aTE9YU2hsdUFRRXNsczE2d0NjdEJ5c0hGQUl1L29MSEY1T1lUZzhVN0VTczhITFM5RkJNdHI3QVpkaU5KeWdhekxJNUVCZk1SemxNclRrVTJRbHQ2Q3ljTGlvRnZGRXpTS1BjdW9JaElTVEgvbzI3aXFCYXd6ZzdtUlRwc09ySjdYQlJMdlFRUTBiVFM3cmI2WnF2NXRTdTNnbUNBekNtV1pzak40MVBoS2V6dVQ4SHpTSE1KQURqZXdSSGppMVcrUGpxaWhkVGw4T1FzZ3V6UUpCUTZZczJuVTBaU2RJZ0JRRTRoZU9DRm9HSkpQYzF6RzZ4UUtTZTVhc2U2cG5veG1TV0xsYmkzRDhuUVE4NGdSMWpmTUNVbnF4ZHFtRXg1dkFPZ1dudXdBL0MxUDAxQlVBcVZhSGhLYXREQjN5UHNuMUlGTE9MTW8wSVJEVVovZmFtd0J5OTE5cE5jSi9tT24vZDYza3FHVi9haVE2b3l5S1ZnZlNLekNvSWo3Y0xZMkZtRjdjQkJoZDJYaEw3bWlyN2UzTjZMbnhNekVRWWRxTnJtMEpBaG5NY0lSY0U1NFdIUEk3L2NSWlZacHJrRUFFOSt0cTg0UXdjNWsvZ29xVlIxRlp5R281Q2JpWEltOCtxVU9YamFwSnp0SjQ2Y1pOMkNJeEFGbDNLdHJ3cE1iT1FZenltRlVxc0dnZExCeVdqaFRGRGFFZElBRlpxVXN1QVIydm9LQU1aT1hrTzFwQXRQQnN1MEkzY0FERjlHbFlPQjZubkZLcnVRcHJVUWZHdkVnT29DeXRUa0tWWkxMVEJnYXdsakdFYnNEaWVXYzJHcXRGSldadFp5N3JFOU5HaFhoUXpyeHJzODRvMU9MOGlRYnQvUmh2amRuYzZSWU05Nnd1SlRYdlBGeDdMVTRyaTJ1YWVmRThNblJRNVNvMXFmZ3hMT2NVTTVRWUJFWmxtTnZFYUtlV1oxbWtzQXdBOTFRRk1vNVlBT2Z4NnN3cEpqVVJhT3dPWklFSjdpeWVTMUhqUXBJSENaZzFReU1rQ2ZpVFpLOFNTWE9rMXdEZ3dUT05FR2JBalBuaE9vMzQrSUNGL29KbU1Fdk1ZVmdEYktKTFYrRkJ1UjRQcWJnTkNHZi9WSEtOeDJtZncwa2JwWXZoQk9pZXhWVGNxaDhyNzZvZGh0aURpekg3SWNGa0pveExSd2d4NkFwVDhHdUZFQmY3V0o0alJjeTJORlNtQzJpV3FuUGxPaHpuS3pJc0FTN2xRQWtBREtUTjVMTjNiMTJ2QTl2UjI0OEFxWC9yYzh5dWpoVTlEU0ZQUnJFeXlEc2Q0U1R4aWVUd0RRck1tQjdRNHZ6amlPTGVsTWYzd2lPV1BucFV6d3RPbVZHNzdDV1BVb2RQTkRIMGdxekNKbUp5SEFuVjl3TVJEVTJWSUluWHdBcTJyRnFYRmdFdHRscjhxT0lMUVdhNFhwK0llNndWcDlsVnJFRG9EUC9IV29Kb09Ed1ljb1lIQnhBNUQyUWk0VzhlOVVjWlFTR2FTcVlDbU9zOVNwNGtmVksvNDJRUHEvZGtUeUkwK043Qk5iSzZDQnFHbkRQc1lRTkVDWFF1TGN0eU5jMUJwWlY0cDViOGRGbmVnakgraGttRlBvVFgrem9yOThaY2RCZXJWMEpHU1N4MDloenpKOTVZZTZsS2VPTmxFTTlLZmJnbmtPYVM0QmdBR003OXlueW5GT25WaEhNSko2SkNaL09zeDlvcE5sZzFmQ3FmVUFLR1dRYk1HTkFqYWl6NFB6OW1mM3NlcXpGWXhyL2RTc3Fac284WG5PcTh4bnl2bWUrQnhrS0o3UGlZZG54STlzNnVuQUxuSmZBa2hRVG5pK2JFSkE4THZuNWRFNlNOMXVCS3VVaDRYUSszS2paM2pEZlFKV1RWWFlVTnJSVmprdWpIQ2xra1VoRWRrdlBiWkF5WjE1UVEvMEtnV3o5SHdWS2tBdDF6WVNVK3A3VURhQldlVjhvaklucGYwb2RxN1JnYU0vOUt2QmIrdzBmb3NHUXB5WXNobWhxVU9STVpHWEVKU0ZyZ200TFZmQ0RJQzVCQUEvdENJckdjd1l5K2s0QmxJWHh5R0gralVYbkRla0xGOWwycWp0RlY3alJuRGlxQUpjVGdCT29LeXJHd3hxcTdzbnR5b3lFTXhaK0N3TDJHV2RpckxtVHg3WEthY0dsM3FuTFFRdEFzQ3lJaCs0aW1jUXVzd0VMMEVBcWtkcHpXb3J2aDhRMWxTY0FZU1UxSUNCeWNhU0lmUFVWL200anF0TXJSZkkvZlNEOE5uWTdmTDlqUTB3cFREQU5TTHJqN2pDd0tRdkZqR0JjV1hreGNmVUU1NmY4L2FOT3NGY25qM24xNEdWNE1FSzBXN3BFRXU5a3BDbi85aTFLVGNOUklFZFZOb0tRWnJKZVM0QmdCWE1GbU40T1l3N29rbkZSM1pZT2pIbE9rZGVZU0tqclppZ2ZidUIxem4rZzFCNGpVVEdJREVnbE1RZjgwcWRYT0NhQjFsQklIZ1pCblhnaU1iRU00NTY4R2h3bUc1K0tPeEZJb2NEbmZOVEJGWHhEb0NQQVBtb2lSK1pvQjN3c2Zwb0Y0QThWUWlaeUlZcXJkMnVRT0NhMFZJdEdEcTRXT1QwWEFFaEFCSkplWkdlUmVlRFUvS0tNelNQZWkxUFphbEFTejBjUEsycTI1dEdhTFcyQWRFRG9GMHNmZVp5Z2RPdHZva25aNi9vT294Vi9QTE4zZTRGL1dTNFh4aytVdFYxd0NHMDZFRS9rVExRbDJLTUsrRXBKdzYrV2FhNUJBRHN6bDFBT21GcW54ekNVanRIbFpra0tTdXJwVVBkSG1RQkxld3E0SXdzUXhGWWlhMTA3U3hqQ3NGd2V4SWVKU0NySjVGRmtjbm9pYXZjZ25JRmdJL0RNMXFjQmU5SFNHbFRLTnBGaGhNc0tuTms0QVQyRGtBTkNQVEJtYis0QVlqdVRIekpRUkM1dVF5NEJ1SEZxV1FocFdJYkJZSXR6NVc5QXFLZ1JFMk5qSXBMbGdHamtRT01Db015OVFzaXNuM1Vwb1ZXb1FhZEFoSWxFZE9sSkZaeWlpaG5wVmo5S0RiZnUwazh1eTRSZWZTYTN3UmRFZjNqcjI5M2IxelhEVUIrS3J6MHIyV05ZR1RTYWgwS1JVZVA1ZFIzenZsY0FvQmZuaWpMTWQ0bkFjUEpkbnVyN2RDV0RSbUlRNmdGdDhUQWV5S1pxVFJiZUkybnRzcTVRbFF4QW1MeURPV1ozYlRBd3c5ZkRuODZNWFdNRGc0T2MwTXdnMXBqOENESGVtV05NbDJOYTNSMzVRZ0U4U21BNnF1dVgwa3RtbHZRaVU4YldKV1FhYmxGckRQYU0yZHBsRXBLUVJQZ1FTcGt3WnNJM1lLeUJGK3BZMVEyMU5DbmdyU0M3QkFlWisxZlhJNlNwYXFjcFY2TU1QdVJQYmtRWWJFdGhUS3RDcjAwVEQyWEtmaUFwS3hPWVB0RnZqTk9lUHpJb1g1YzF0N2ZxNytxOEhOaFAvZkNwaThEZURsb3BKREh1WWNLUlUybnk0Tld6QlErK1ZsTU9PYVI1aElBTk9oam5zbDVaU3pzNjVLakdCc0RpTTdxNVhrODlQMWFpM1VWVlFQUmRwa09SUkYvbnh2MTZCWFhMejNSYU1qei9iU1ZQZFRhNENCQUZWV1BEdTNQcG9HWDdEcVFrS1BleFFZUHFGS1h0cE9QV01FQks0bjJIQUIyaXU3VUY0TUhpazc4TWhEcW80RGI0VVJ5Mndtb2FJR0ZCamxCOUlPTmxJQUZCaXJ4RFZldlhGc24yVlB4ckZpRXhpQm9Lb2d2V0xHRVBrZ0JrYnM0d2cwNURsZmFMeUtON00ydHZoSXArN3JtNE5RVTVXVkZXbGIvOVZYNVgrVXREYkNmL2NTV2RnUG1zRUxCV3lyaFJ4Qks5QzlGN0RRcThVRU9IdmpLMGFCbkJzNG5BSlNKWHpzWUIrZzRTa3AySmdhSitnd28reENpanVKUHdEZ0FTbkxiS2pQeFRDOG5zNkNmK2VKY245QW9kWGZMVEtGTmZ6dE1lS05nejk3S3FwS0VWZ3hwazZpamlrd2V5djZoU0UzWU92bEFwcHdDVXZSQlhSMEVNUWNBOUJRL1BsaVdOUE1JUnBiSEdiSjA1RDJBYUFPdWFOc0txRVNxK2tjeFNOU0h2VEJTckhWb0lJc0JacW5VTVhsMHNqRFRBeW9OcUJBOVp5Q2FwR1lVaHpLaW9uRU5PT1M1YldsY3N4cFFhMlovREhLeHVjL0p5N0VzWUVVWCsydWFPVXllajcyMjNUMzNtbDRITGp4U09aT1RFcktNUU1TNEZRTjk2SjBpZUpKVVREN2FXaHIrMUhEd3pPQTh5d0JRdmM3UFdybVh5UXh5N1hyMGhFQTdHVURKa3pyQUtCY1lzdHNwZktETnEzTFErdFdteWlpMElxTEpncGQyUGJVQmxHS2JyMExUUmxBNHg3VTVyQVNDbW9SZ010UEJVWS9LckFxYURwN0JnUWZiNmc4Y2x3Q3FMOGZGVGpNQ2pTV2doZzdMTFRsTjFKRUlDQUptcFo1bXlBaERaWkticDVBc3VGUktWT0pjcmtpWWhzbVR2TFJKNHdiZHhoQ21WcnlWSjVpalR4QmN5b0tZSE9NMEJUVmk2ZXUzaEFpZGplS04vOTJPU0RVdk1QN1RKYjd1L0M5MTYvcDVjQ2FPM2dQYS9ZUitFb3duQU0rc3RUMmRVNy80dW1uY3JVb3QzSkJ6QUp6eEpRODRxVTNsR1lDekRBQ3BybDZTSW5mS0huZXNqTGR6Yjk5N1dkOTU2eVFRTVVoNm1jbWMrTXFqaXVBU1grR0NLMFBSREZVbEE3WGt6b201b1k2VkFBWUQzY05BQ3IyaXcxUEh5Sm5VTUNWTmQrOVY5ajBBMXd1OGg0M3hLYStzN09DS1VlaE1BUENOd01RcGg4N0I3cFAzQXRBdUNFOTJnWU1jUnBLWWttOEFsNEpwOE1GZkJGVCtoaWRsNjdaWFljdWE4cWpxVXQyN3JRSzdWUWpna1ZOZzhIbEoxK0xOV1lLRks5M2lGRkl0dU9HcTJBYTNIN1Fkc0VxbE91bWJzdW1pMFUrczhpdUtBbWZYRlF6RWMwVlAvLzJrQXNCYXVmMVBqOFlmNHZnYnBaUUxEYmdrZ3pyQnowRmJud283Z0dLZUI0TG5tZnU4R0w3UE9aWDcxZ0QxY29CNWxDVjc0MUJRbFlmQVkwU1BDejF5Rldyb0tXc2dPT2g5aC9YckJ6aHY3eVdRZ1pMWDhJWWxLMjBrYjJFM0EwTDFIVWdLREQ3TllLZkF3VUFEUndCZzlTZFJSbUQvVWhDMVh5NHJRbytnNTRDbWd0dUhPSVpOUUtCNFJNdEFad1M4cmhKTW5DbnpNTk95SnNLS1ZzTmxEWDQrRXdkUHdyZThzWmlQTFhlazlMYU9zSVhBVUppa1JJVlZ3UlBmT0NTSXh6aGdFblVrbElSK0FSM3RYT3E1OVZRaEpZam1HNTdPbzQyMm5OT1lJTHVzbndNK284blBZcThmQmU3KzVVZHZkaTlkMnUwMjlETEE1QXV4MlFoNUhPbGJqeG1hU1phbzRIT2k4T1dFdDQzTUljMWpCMEJuOHltYk84OVc0ZXc3TUM5bDJEOFVrTmM0cTZBWVI1R1V0N2pFai9QVXNSRzFINlNoSXBkT2pFa2ZxM3N6ZzJvOWY3eFloZ2ZWaU82SWlNL3lHVFlNZi8wMUk0VEo0ZDFDMFRzbVVBU0Vhb2lDQVEraVlBT0J3SU5HZ3JuSFFNSCt0YTdJRG5VcURoMVFwdENoQm84UUJWK3FxQnoxbVFCTTlGWGQvbDdUNTE5cm1nWGNDRnZWQ0dKcjNDWitNV2RMRHkzZDNGenVibTdwYTdJcWJHbjdzaTFsdVJ5TXlVOUQ2RzhsYXQ3aUF1WWNQRUNERkNLTWFzQ0R1S09xR2NNNm40dG8yKzhPRGQ4NENLZ0dmdkpEUC9vRlZtdyt2eUY3NWU4dE9lcEhmdjY2YndxaUgySjhVemZobW90QW02VVREQmE1eW1vS2paQVVCMTFiaVRNRTVoTUFtQVdZbzhNRDc1Z0dGUkVoQjNHdGl5b3hoSHRpQ0djVzhoYW1yanF4MG9CY0lDc0FZZ3BJM3lVMko0NDdURWhvZVhlWFNSczMvQUlIamJrUmQveWhVVXNUWGdQTlk0MjZ3bmlRQ1RCT01uQVhuKy9UWnRyQkRvRERPRXZSU1luNktPRmZDQmJJaEhJenlJYVpCQnduQzhqQm5aUGJQRm1QZ3V1RkhHUng0MnRWazM1OWRiazd1NkZKY0VZcm9DYi9paHF3N2pUUnRDVTFkUjkxMHUyYzdicnJteE50bFZlNjZ6ZjN1aHMzQ1FRN0pSRElQdGZoQkp5NWlsWWdjWlNWY0E2Wi9nSXFhaG83NVZUNFc2NVFzZmducTZUZEl0cHZveHdjazRUQXgrVGYwQTJZcytyVUgzMzJadmVoVCs3SUo2eitKRHpNWDBCR1JZTWduUEFSYXVHZjRBczhaOHlIbm5oSmdtM21hVDRCZ1BHQU16aEl5dTkwZzJOblN0UkFib2gyTXpSRkc1NkFpUyt6Q1JvSFhvKzhMeHZOcVUxbWFoRUZwcmNhV25Rc2c0QkJtZ00xQmtYV05vL3FEVHBiWlE4QU1hWElvcXJGTTZsWlZmTVNJSmlvcEoyQ0JNWjdBYU15QTlZdFNxK2M2TWdrMlZkaXFMbHd0T01BMHNBQ1BSblk2cTlxaXg4VGY3bTdUeFA2Z2lZQmcwYjN3Znd1L0UyOUJPUDE2enZkVlUxdzBubmRHYnRmdjViTHp1Q0dkZ0hyMmpJemNhN2VuSFJ2WEYzcHJ0NVlpa0RBNVFIK1owYUVFckpWTXZ6ZjRpVFVkSk5VU0d0NnZDQ24wQ0JMbVRmOGlSSmp4UXFvL2dBdm00czY5cU92K3pYNUNYd1hGZmhXNU8rYnN2a0gvcjlyWHYzeE5YWDRjektNL1A0UFBHMWdxdHRTR1YwNVNPU3BEN25oZUNBMFdXQ2JTWnBQQU5pTG9XdHJUc0FrVmxvbVV2VmdDeGY1WkQ1MHlod2c0VEttY216VlBIa1FHWWthVFZJSFcwaURvc2VRbDUxSDF4TjRZUFNFRnhRMEh1TUZRdWIrM0ZpaGtaV0hHTTBkbHdFTVRqRW9HR1RpZllDK1hCQUNyQ25vSXFCeXFVNlVBNVA0TEpGbnVFSXUyMzArMTE1anhWOWY3aTZlblhUM240dTczbXVTdmFGUjg3SFh0clFLM3VnKytQRk5mUk51VjNmQ3FTbmE2cVI3VkQrVStkNDNyM1ZmOE14Rzk4UjlXdjBWQ0ZZVkJNN3BlUDNxVXZmNmxhWHVtcEEzZEduQVBRSi9qUWJqbGFKZlNtQ1FWa1pqTTdRb0dRWnNkYVowVUlJU0VzWWM5RlFrOGp5QURPdkVUYjhOUGVHRC9mcnhuKzZjYlAvZW43N1dmVXkvQkx5aFM0S29nMytwRTM5dGE5RFp6WkVpQ0FSc3hPaVVGSExkQS9BUUYzaXdZYVA2eHluT0l3RG9VNjRKdndaZW94K2hNRDlQUDRyUzZTQThraE91ZnNUWUNFbzZQTHhJaytTQkpaaWNnVlRMS0ZadzVIM3FDd25SZmc1Q3VocCtUeXdZVklUdVEyWEdMRnQ5SmxOT3hsd0ZCampxRkRrSXBBN0plaUtud0R2Q1l3dVRQWkNSVzZZQ2dtL0VxZlVjZ2t3T3k2SjlzNGJjaXJPQ3RrTHlnb21neGZVOHEvNlo5UlZ0OVplNkJ5OW9CZGR5djZwMnoybjcrL0xsN2U3di9zeTE3c2MrZEVQYmUvR1htNERZUkxxNVBlays4c3B1OSt6TE43ci83ZC9lN0w3d0hldmRsMzcybWU0aFZiNnFRUERveFFnRW43eTAzRjBpRUNoeTdIRi9RTVBkRTFxRzkzbkl4Tjd3ZTJrRUh6aGxiMUFvTk1DR1RwRlVVY2xYMklmK29DOUVVSWZ4VVNzM09UZjBnZi85NXlmYTJlaXlSN2lQZkhLcit5Y2Z2S2I3SU1YWGRHNlJtYjR2bEI2UC9tTER2L1FYcWRjbnloNERBaHRwOHRiczB6d0NnSzYzZDNkaVJaUkJzcnczOG5nR01qbVFNZkRpMktPUUU2ZmNFeXFyTkdWa21DMXo4VXdMVHRtQmd6WlJvdFN6UGlxU2tKYzJBcnZqaFVrZnhLN0FVMVRZekl0TjFGZGw2dm5RaVR4M0FFR0VJUTdmL1dmMktRaDRGZEtBZEU0OUJxZHl5cGtqaTVhRXFUaEExckpsalFhdWFWbjFHZlFQbnRlS0xrYnVlTVA4VC8vTnRlNzdOZmw1N3AwSnNLN1YzckpGZFp1d0tTM3pmS3dTay9xZi85eE5mVlMyMWIzL1BSdmRiL3owalc1WEFXS2lkalllN3JwUGFrbDk5ZEpxZCtXYWRnUGFCL0JPUGI5dW04cFdGTzlnQ0Foa3FoUUdnRkFLSE5BUUQ0WVVlZ1E4T2t0T3VDVjhFYjFBQzlGUEs3S0J5WC9mT2ZtQjFaOEFwVm42UC8zZlY3cnJXL0tUNkZ3aSthL2tDQXhwMFZhMjdoeTlFekVFQjRyQmdsN3EwRStkQUtBSW9EQXZtN0x6Y0g3QzJIcUlsT3hNSGhJK010ektLa3hrT2VHenpjUlJqdnNQWlRDcERJMlQ4d0RCREJMNjFyYXpJN01DNVFLVEpUa0ZVSStnd29UTVlNRFF6b0FRZkZHVGVZMHNkTXhCemJZL0QzL3pyNVFOcTdXNEpDcURrYlo4cEJZNUpQdWM5b0lhT0cvM05hRFBhT0t6Nmora1ZmOCtMWGVyVXZ5Q2J2WTkrL0pXOTNkKy9ITDNieit4cld0N0pyN0NSUm5zREZaTGFYTGtPd25IemNJcnVqL3dYVDkrdmZ0L0ZRaSs2dGVlN1o1NlVQY0NkTW53K0gyaWEzZng4dXZMdWo4dzBZM0NIYjFYTDE2dTZVc2RPL1gvYis5c2dDdzdydnArNTgzMzU4NStTR3ZKdHJCazdFaE9RRFlRd0NUQlpRcENnZ1BZVUU1VmtncEpwWkpLa1pTTFZFd3FUaWpLVUs3WUlWUkNnWTBEd1NZQ2JGbUlzdVVQWkRuSXNtVFpzaTFMU0VMU3JsYUxySlYycFYzdGgzWjNkcjduemN6TC8zZTZ6NzM5N3J6NTNQZG1aK3piTTMxUDkrbnUwNmRQOXpuZHQyL2YrMmc3MUlKOEFCYU5WMjlKZ2ZlOHhzRWFGNWNIV1dKWWN2VVZVRkQrV25hVlZpd29QNnVnVzZUOFQ3OVUxMjJPem1GYSsxV3lEQ08xSUYrbDAxY3hRbitsZmU1NUFnZWhKZURNYTFHa1lHZ3FHVHJrdG1zRm9HNk5MbmFnSzVPajE0SjVXYy9rQ0VHRVpWRmRnTG5TZUJpOGU4cDdHT2p4Q0FIQjVWUXRTc3o1dGFGQ1daQnlCaFFQaWxEZ2JFbW5SRE4wZ3Jic1Y0ME1iQjdWTVhDZ1liT0lEeUtLV3dONFlTWUVnVGI3c3dsSVdTQ1ZVVmhlMXh3U0JoT3hxMElycDh3TTlqNWRiTmJYSnRjNHM1MlVmMGpyWDVhNzNUcUU4TG5IWnJKUHljL3FjUjdQdTJrbzFWc3RGallPckQyd1lva0FlYkd1UUVOdnpLRllEYjAwczVUOXQ3dW1zcDk3VTMvMkV6Y05aZ3VhU2NlMXRCNjRTbDczMCtjbnU3THBXVWw2UVovWDBtcUFweDQ0ZjBJUXduYlZKZFJMelByVUF3YVROSXUzdnZqeW4vTDBCK2Y4T2RTRElSd2Y2YzRPeWtDSnZXeE15di9GcDJheUx6dzVxNW0vTUg2Qmh5RHY1aXYxRlR3d0J1Z3VuSStqRUF1NVRFNFJRVGJrcTZWUzNGWHhuSjJCblRZQW9XM0w5WG9oamxRMEcydFVXcFlTSnA4SVcxR2dVbGNnSHh4U1BVTTYzaGhUcEJtbTFJcGFMUS8xQ1VVNGxBbDgwTEdXMHpNNUNmSUtSeGtHQUIwUGRCck1CRll1UXNJTVNPdDhoU21icmdMWVNMS1ZpeE5RT293dzhCejZsaFJKNE11UThneDBqQkd6UG9ONVVMdjJJM3F1dFYvTGZYYjUyZVFiMWFnNG8zdjlXeDZZeWg0OVViZFozNVFmcWlydk5HQ1dQNE0wZ0hBWkdCTVlQbTR2Tkx1TGlZODlPSjg5SldQd3o3VWEyRHNzU1VnNDErNlYwZW52eXM1TmFHOUFHNFV6V2czTTF6VU54dHVDUUJoaWNwSlREQkV4RklEbGUrR0tIQVhPUXlHZlh4RXB1LzNJWTBqUCtmYU4xVXo1dFJqSzlrajVIMzV1UHZ2amIwemJoaUJIZ1RIYXdYQkhZeUJja0VSeHBYYVRUYXd5RFRzWEtTVGR4b1I0QWFybE1vL1d1TUJtbXJtTjRVNFpnQ2JwajQ1azgvM2pzdktxYlVFYlJ3djFibGwzbXJsRlo1MnRza0I1QmphVEV4dFNDcG9Ea29iSGVkamk0Qk9jWmRqQXhXbDVqMENqVlJnY3lrNmlLMzBPWXhsTVQ0MkJUQjRsaGdGVjNJa3kyeHZQeWcrMHg0QmtWdGlXbFFxRFkvUFBsNWJjTklhNk5ad0lHUEdRbndUcVlLQnovODdPOWpDenZoU2ZlLzBoOVkwMjZhV2tPdDkrdkpIZDhVU21lLzNoN0JWWE1jZ0RZUU9LRUUrOVVrTWVhekN4a2xNREVBY1hiOU8zTGpXeTMvbGFscjM5YjJYWm02N1ZJMFBOZC92RXdKQVU3cHdNd1lYSm5teFNxNEU1clFZVzRpYWhHVUFqQkNrUHdKVzdpRk0wTndZRkttUktzcU4wR2pJMjY3T3NIeG5zenZhUGRkbXluNzJQY2NuaThPa3N1L1V4UFFrWjIyc3ZBVm03SlhPTWFBajdLcTZRaVlraDFoT0JFcDNIMW5CSSt5RjdkTHV4Unl1d01mbUZtV3krZGM3MllqdGxBSnE0bExyUGQydFp5WkxUb0N3K3d0K3E4OW1Vdm1WQWhYZTBDMnFPdDhFV0I0Q0hIWkk3RFJlbDF3N0J0WkYwOWhVaGJuaGRUUEVoa1dja1V1UUo3eEpFQlNXL0RkVmd1TndrVXBUQlRqdWRSek1JY2ZsdlMxY3BOd3BOUGd3Sks0UWcwMERMNVF2a3hDQXpQb2Q1bU1tWjlYbTBoK0tQU2VsWTVqTHJuNXZSN1B5WGpleXhGNVZmSFRVa1JXU2dpMFN6d2h2ZkRQeVFadWtFaWJkeTRnOFowUllja1BmcFp6VEgvY2tqV1hib3BTejdSemRKNFhUZndhZlByOUhTbTBlRzV5N1ZiRFV3cXkvdXpHazFZS2NKSlJTT0dydUNCNXFSTUl5VW5aSTh0NVZSSEQ3aFBaeHhrRHhrRE1lMENqcWdldmRxRmRTdlBNejhmL2xDSS92NEk3b1YwVE9Cc09HcHNwS2xsWSt3S2F5NlRRYWlEU2ZSL3JiaXFzeWx5UU9ab0IvQWhlV2wxQUI0QXltWGhsZlEyU3lpa3dZZ1ovVEMrWVc1UG5YdS9KUzhPcjJ1emx6Mkc3eE5jQXpCY0xSV2dVaWQrMFBPbmZmcUhuTnhzVS9DRG1wRXNubGRBdFFnakFqYlVDT2R1RGwxbDRWemhDZXNnSlpEV3U2SzdpWG9jSnpEd0VXSU93Nlllc3FTejNCaXhsNFVVb1JCaEdKN0czbjhCODRITURNL2hleWJBQnJKRG9VeVdyYWFVQWlEeTNQc3NHUGZyVm0vS3h2VmxqNnpQb3F2QllEZDczTXMrUXVIWnJOUFB6YW56MXVGR1JFYVZPcEwvaEJ0amxzNk5lcWZSVEFEdnFXTFFySlptM1lxVHI4Rm4yWDNuRzlrRHovVHlINzI1cjdzTGEvcjArTk85YUptMzhGOVdvVm8zSEJ1WUdxMnBzZU9PbStnc2NQaEk3czFrREdBcHZkblhyZlZGeXJsbWh0RHRkY1YzL1krdE84d3JDVS96L2paK0dRVkpMdG9LOVU3SHAzTzduZ01IUXl2Lzdvc1RMWVNCcmNDaFd5UVFUU1dsRUJZY2k0UDZnY1RzSmEwNHJLZ3poalFpUzQxTjV2aUJPWGt3dHlLVERTM3phNlRCZ0JXVGY3MStiblpiaW0rVG9GbVMxcnFMY1dkM3EyMUpkcCtVYWJ6R1UxTDhzdWlpWEhCV2FYQWtHeHhEMXNSWFloYlFnRVVXcXVMbEJ3TDJCS2NxT1VYUHlvR3VVQTBvRkZncU5rc0VNTmt3WkVYQTJMbi8xV1k4dWJCUjIvOEtvekRWZzVybHVJOTlFYWNncm9FYlRCcVJQT0JDc0pzWW5GTHdHeVA0dnVPUFJ0c0hOL2xKQnNuK1ZCOFBEdjB6NXhaeWo3MjlVdlpZWDNVZ2hrUkdoaVlZSXpnTFhweGx2TVptWFNlWVpyYkR4VTEvbzNwZUtHdGVKZU5LejFZd3VBNVVzeWp4VDk4WURaNzhOaEM5czd2Rzh4ZWQzVlBOcU94d2dHaVVTMVJNRXlYWm1wMmtwQmp4ZmEwUUgyT0lXQUNDTzhZZUYwQk9uKzB3WXloR0tTTmZYRVZOQ3A1N0pVeFpJZGZpeDNiN0x1Z3d3cS85N1dwN0J2UHp0dUtDWGtzNlVNc0xnZUVnT3oxaW11Tzh6Ujc3S3FtSWg0WGhMV2QrRHB1UUFMazZJOTV0UnVkaVVXY2hNTjFLRzB1dWQwR29DV1RqZnI4dEN1Y0NVZlNDWEJ6ekhwdWxDZXRpRGpQbkhuY1pQVW9JM3FDSTE4Y1p4WnBpdWRjUkdyTndNbzM4eGxpYnRuSlFFdnlPalU0aklUVEVXUHdoa3NOUVVwVGJCc1g0SUlQcHdXZERuQlpTOUFEZXdaTXlURXNZYUNoOUpxRjJKVFNJQ1hNSGdodjZUSEllL1dNZmtBS3psSWFwVWZaR2VUTWN0cmt0bzlZM1B0c0xYdncyYVhzbkQ1cVlXKzBNYmo1czBIZUdzSmtrVWZNQllTdEFPQy83QnpIb2dYaFFCdkRUYnVnRTBJeUFsckJZUWdPbjF6TzNuOTZLbnZ6RGIzWjI3NW5JSHZsZUhjMks0WGdubnlQREFGR1lXcXVLNXVSbjVQQlgxQjhVWVlnR0FGVkFXRmtwRDlWWlRLeld5QmtJajhnWlVjbUhFOGVqaklCc2dxNi8rbTU3UGFIcDdOelV3MTdNZ0t2WVNVVVpudkNablFoTEorbkI0bFkwMDAyZ1lVOGJvRjFMZ3hYdkZnMHVMdzRQNjJvWXJTbWM2N2RCZ0JPbldHSFhZMjVTOVBjME5JYWQ2NFlIdDhLaEFZZERsMVdGM1FjbFM0cHJOdGRNd0k2Z1dET2pZQXhKVzBNT1pWa2lJSXppK1pOS0JwVDVQQXlrYTZBcGVuaXZKQUNuVERBWTdvdzVHdnBsVG1PS1lNYVpaQXd4NHlBU1hqTjFVTjJuNzhvVGVLV3dLajdJRlJibWVHNGYrUkxOWGlVWDRmNTdLTVZmTGhpU0hHWSt0YVpoZXp1dzdQWlk3cS9IUmdaVjMxNkRDaGhtZExEc1RGWURHN0RSK1pDSHFvT2l1QnRMTGdOZkxtQkxQbzRHalZsWk5ZM09pb2M3MlJNSnRCQ1FnUDZ5aVlydXZ1ZXJtZmZQRmJQZnZBMXZkbVAzZGlmWFgrZ0IvWXpMUUpzdjJKQnkyUTlLTEFqeUp3K1hOUXN6UmlnRDFKbk0zK1VDL0pnSTFvTElqT0dLRDRqNFlrWEZyTFA2RkhuSVoxellQWFV5aGk2NHVmeVFGYjZzMzZJb1dEbFErMUYyMU51Vmc4SHVoZ3NVVlFiRnVlbWRNUGNlU2R4ZE1SNU54aGNuSnVleEFDNGF4NHdqdDA0TktKZWczV0NPbDVUNDdOblF5VjFLVDFLd01tMmVUMTFjRWNSUDJCaTZwZ1Fjbkx3RmxUVlM2MFBLUnM2UEZMeEJqWVJqVWdCTXhTQ2xBRmI5Z3dDWmkzd0dJQ2U1Ym5zbWtHZG1kY1JPbFlEeTEzZFlheDVQc0d3eE1Yd2FZbXJzcnBqc01FT3JmTmExajcwekh6MlZmbWpweGQxRDYwWlVDZHdVQWllTnZ2Z1JySHRMeW80ZzlKd0FuQVQwcGlod3FhanFnbE1LcDY2bFlNL3BLTnMwS0NYSU0yM0RxekhJbjBrajJNV0hOUXluYytnMzNlMG5uM3RXL1hzOVZkM1p6L3kzYjNaOTc2cU45dXZnd3FzaE13QXFDMnMvclFJTU1Qb1cwdE9FbHA2NkdHZWxROXRabktZME9uREI1NWJ5TzQ3TXBjZGtVd1lGd05tQ09FdHROWGw0Zkp4NVRlNXFCM0lJYlFJcnEzRzBJUVl6SEVrcitISWJuMnVBSkE5bllXWlNRd0FTWWdvQ0VhQmRqdUpvK091YTNucXBTa05ldTdRdFRDVlUzTU1iclpxbFd1U1JCS2hVeDg3d1hGU3ZYbW03Wk1oUFZMaFRiU1ptU0JReStvenYwMVJ2Z2FJbklRTVJ0L0pwanc2cmhYTDVMTjBEUnlnSzRDRlk1cm5jWnFtL0lxRU9JTXBoRzNvS2RMSDdDUUM1L1NUVS9jZW1zNWV0VSszQVdNTjdjd3Y2LzUrT1c1Q2FRaHlDOENBWmVTSUdrdmhHVzJXOFVNVno1NWR6QTY5V00vKytreGRiK3lGUjQxOHVwcmJBVjd4RFlNT3FBcWhnZWNQdnNJbHg4RW9PUGkwL1lISTcrYU1KZFF4SUx3a0JhM0FFOHBzMVVGYkh1dG1yMVZMQURXZEhXRFZjUGpVVXZia2k0dlorTkNjOWdlNnM1dXU3Y2x1MEtyZ3FsRzlwYWpOVFc1L3pCbUJFUFFyOU5sQVBIdHBLVHNtbVR5cEY1aU9hTFovZVRyY3gvTjBCR1htSDFuQ2pQMEI1UzNOTUdTaEhtUVdvRiticWxVazVJc2NrR2tOUnpKOVljdC9RZjNYRnk2ZW1WeWpTRk4xYStSYk42bVRCZ0FtOFYzekYxL1FDbUI1VHN2TjN0RERVcFF0TkNFdGduSVljYUE4RzJTSGRQOTRWQWRNYnJwV1gyNlJJUmpUN3U2MDdxVG1aQkRJaXl2cURjcWFJSlJLVnhUT3l4U1kxaUh5R2JWWUlNU0ZFemxEUmJ5Uno4TkJCdFNJRDQveFFqdnNtM1BTTk83WjczNWlPcnZsTHlhem1tYTlNYjFRczNla1I1NW4rT0hESEJnQWxKQlZEM3NnRi9Ycy9LSWU1L0Y2THJ2bHRpa28yZkNXbnYxUm1VSmhWZ3M4Y2hzQXI0VUJzRWpBS1M4S2orS25nem9vaFhCcWo5bFR5SzdqeUl1RERsejc3TW5nZHlOQWF0RmJHQXNreTdzSEZGYTc5Q3U4RHorL2FMY0hQQzRia1pERzlRanYxVmVQYXEramxpM016YWhMMWZseVRBWXplb1NJOGJzZ1paK1FiSGhya1JvWUwrRmRmbkZEYzhFcTRISWdRTjBtazRDMHNHV3ozTmJqRnFLdVZBNjB5N3ZaMDRDck9lcFFVNElSa0tCcmplVzVpYlBIZlFYZ3BCeXVSbVpMK0U0YUFCZ3lwdXNubjVpU0FkQnA3OW9vd3Nmak50dWlGUy9weEprY1dneFFYdEw0K0lQMTdBTS9wN1Bsc3A4Y3FKalNMaS8zaG5YZENnVGxqNTJUVzRMbXpncE1iWll6MmhKYXhWakJRYUVZOERIdStCUXFZNWhsMUFZR3BWWXRROXFnWWx2OW9nYnZIMzFaRGRIYWRWbEtlbkcyeXhUODJEa0thV1dJNXFoQ0g2UW9OYmNPQVdxbTE2Z3lkc2dqa2pqeUJzaktJWkFJeGlEUXlmUEVNcm55eDNKUVJOYXA4M2FtdVBYQ0JVZkJES0FBckhYaGpxcENENUFyck5TSWs1UE53bTVWYUhIMUlUL0x6YmY1SmxXWWhjejU4M1gxdDdROE91aDVPekYwN0kyQU03bFpIdHBkeEUwK1FnVGxqM2d5eUR2UHlBdFhZQ3lhOTNmUjJ3b3BhMmhMeU5QcUNyV3drWXRoRXQzRzh2VHA1eDVQRGNCNkpGcVIzUkN1MHdiQW1KZzUvdlVaUGZpL3FKdnlWNENnd1NiTVhBa3QyNll1Wm5FcElkRkFEd254aHRiZGh4ZXpINzhKMzVOcE1zajI2bGFBKzF6V1V4eXVaS1loYzFCWUl0RWx3VUF4NEIxTkhlczdEVXd2NEpsVkVKU1Y5elJubUVHbE1NdDNOdkJRL0RGdGJ1bmxhVnVtLzlhZGw3Sm45WGl1aXh0WHk2djgrWkpmUTFRNEc0d3hqVXJ5UVdrVm1wUkJHaDVvRVYzTlNJQTNHdEtjUEUva1NRZ0dMNHFBd2dmV0F6M3BvRzNnUVcybHMwcEthRzk0Z1NZWG5wV1A5WWFBSFdoU3g5cEJwNERPK1hJelFMOFJEbi9LcFB3OHFrTkVHRC9iTzlDMys1eGpCUklYNVFHR291RmlFWWtoeG92MkIyTWdQUExWbjhzakVMVFNwdlEyRHdWa3ZNSjhjSXpUdFJ6SjhDM2JIL1p4alBXbGk2ZWUxdG5qbFc0ZGFpc0xySWRwcHdHQU9Wb09USDAyZituc1hHT3BmcmFydC85R0dBcmlKTFJKSjBuVC9UaG1DNXhWR0hzZ0RJMnU3QU9mbjh1dTFiR3ltNjdobTNSNmZLUmJBV2FCR2QwS1lBellLRUpSdzRaZ29CUEp4c2hXQWR3ME84TkVOTURqUUp1WjFPRjhQWWVQVGZLMVdiN3d3KzcwN1EvT1pCKzlkOUtVSHdOaGc5Q1ZYek1aTTBZWW9ERU5xWG85SHFDK2x1RmdPRWlDaDNTQWh6QnRDSW9mU1ZvY3JEdU1nTHNROU1vZG0wRHJuNlpjU1NMQjBLdGMrYjBEK2hacThHZjlKQmlNRUZoTVFPanBZQlRBaGJ3b2tzMms5c3d4NEMyeGRHa2xFOGRaKzExbWdsQUpWM2dJb1RCNUJLS1dIbVdSaUNRMG9GVHZhbEdNTVh0WTVqRUEwcFdKMDZmOUpDQmszYTlHWXN2NGRocUExWmlBK1hxalBuMnFhM0RFQk9vWjE3T09ucThNWFJwcCtSRFdzMTRKOG1VOUR2eWxUOHhtNzN2N1FQYm0xK3JWVXkzL2VmN2RKMFBBZlNHZWxRQTc3R1VIYlRvVnVLcHJrYmpxY0lzSk5sQ2NvQ0lvbmoraTBqSDA4TjA1OGNNZ3VPWCs2ZXo5bjcxb3kvNmFNdm1nREVwZmJQbzUzb2FsNkRuTWh5eVZ5aFg0UEVVMHd5MkEweUJGVlVlbkVrYVBhQ0NDZk5Gam1vNlBwTWtRNkZ0SWx4YXlDVWxlb3NpUWl0LzdEd0xJSnB6dWs2cWhoQ3BDM1VENGdnTFV3bXFBY05oTUpJME5UZnN3YXFoMDVaV0NjaXRrSWp3NGFCajFHQmNxNUxaNERFZCs0TU41Q1NuRjFSS0lic0Q1N0E5a01saWVuenVwWXNuenF3MFEyV0tXVGhrQWwwME9sK2VtbnU4Wk8yaHNJbVNHR3grRDJwVFRLQWhXMzdvb0ZxV0hxS1p3SEgwOXE4ODF2K3ZqTTlrLytjSGU3Si8rY0g5MlVHOTQ2UlJwcGx2R1RJK05iUlhBKzBpK1pHK21VTkM2M0JEY2xSMEQzQTBBQm92SGRpZ2Y3NXAvK0l0VDJWMlB6V1kxV1FJK1N1RUtDaXdmUDAzVHFJTjQ0WHd3Qnd5RE93eG00cUpGTktKSW8yUTRZQlI0U1RJSEFwU0tRZ0tFWUN6cENYbk8xUUxxdjF6UVRxR2NGMDdnSVR3cHNGeEM1YmNkUXBpQk1KNkwwZUF5Tlpsb0tXRHRLU29MTFF5azh3cFRtVmc1cFlUNmdqRk01VUhld0hFbzdrMEdGL0NibFVYT2h0M0NwQ3VBK2RtSjR6blpzTmhOcXk0S3RpSFVLUU1BYXk0YllGZjkwdW5uZWc2ODFqcUdSQk9vTFEySmJjWloxK1lGdkNPc00zT3NsRXJLdytiZlIrNWYwRHZ0QzlsYmIrekozcXpueU5jZjBHTWpuWWZuNVE2YlVaTXlIbHhOMmpaK1l2V3I1WEVhcGJIbWFJT1U1UWdyUjFwZjBHTytwL1ZJNmt0UHpXVmZlWHBlNzhQcnZRWlpoRlM1N2NTZnROVnZCVmd5bXJKSDZHMUhvWFBGVFJob1RsZkgySFFhaklBWkFnWjN6TThTM0p5WWRGeEFwRmZ5aEh3bWg5VXpwb1ZpT05LM1dHc3BoajROU3VnZmxLWStqS1JYWlhsRXlxblI5bURVYUZmQWVydXRLcy9ZeEFWeWpJaElpWGhham1TTHcycWUxOHM0RExrMkw0dFEzbDdVWWhVb3o5bUkrUXRuajBYS1J0SnJFU3pIazZTdEJUdHBBT0FJaHZIZEM2Y1BQemR3M1k4c1NzQlN6YTA3Vi9pVWdtMGFSZGxBTzBoSkcyc2FNVU5TSmg0QjNmcU5sWWxHOVFBQUdDOUpSRUZVaGV3MnZZYytyS09nSEkwZDF2MjJiUnlwUUZGR0pVUGhsTHlGZVJZOU5EU1VEUTRPNm15QlBwQXhPeHVVY0VYT3RSSGNldkNzbm1Pc2s5cTludEFqdTFtV0pYSWMzKzNuMko2RTVFcmViQWdZc0lVbm54bUNXR1ZUT09JTUtKODdDMUd1YVRTSGRCUXNkYTFremR5TWMwVk04Mjh1TEE2TUNHMWZSZWhLWVM2M2o0WmFubkQvYi9YRVR2T1NOQkVVK2YwZVBlVXh0TkJLaGt0WkpwUnV5a1FFbytNMUtGWUVJNkdRSjYwbnFXSGRvSlhXeFc0QnBmd2NYdFBEbmNWekx4NStUb1ZKNWk2Sld0MHIyRjdYYmdNQW96RHVERHVzVFIyNTgrVFk5LzNMbDd0cVBRZkpFR2FlbUZOZzQ4N0poeExGUmw0WUhNWUFXWENSRzU3NURtbFp5R2xCbm8yZm1kVHljc0pmSUZFbSt5ZHpMQk5DOFJyd0dJRGhrVVkyb3EvbVRPb3J1RFA2cGxXcWNFMUYxb3lJdWZCdk1tQjI1M3g2d0hsYVVPeFUyVmZNL2lvUXhuQlN4amtXcW5DRnFqczZ0dFE2S3VCUVJyR3djb1FYWkpMY0lOZk1tcFJhUHdnSGVMaHl6cHBMc2Z3UFN1MzVTRGVHN2RhQW1MWERTT2tTbGR0d0pLNXdMV1NTRXlCektHa2JuYXNTSVNFa1hvNHNtS1RzM1EzQllBQVdYLzdyYi80NWV3QllXcDVudGhhS0V0cmgybTBBa0FnTU95UnMvdUtoVDErNFpuSDJXSzEvOUdDdzFuU0NaOXRrVXhLVDY5S0JGbmVFcHBRUlNUMWhvMGtiUTZTcVJ6bExZTC9RYTZNcTNFT2kzTGxUT0lubEhKS0hNK0o4TUdOQkpudEpmck1HSUcwdFlSK29JV2lZbkdhVDhxc2h6WEVyWWZLTFl4MWkrYXdjS1Bud0pLKzdtRWZ5QzMrT2o5RHdKWnhIaTRvYzAxNlk5R21aY05vZlJhdThsVVVxR0ZZQTRkRmltVXFJZTZraTFlVzJNb1U4WVpWUzVNNURiWkFIblBNSUU4WEhjd0NzSVIwNWRPOGQ1Mk05clZZQVJZTnpaclllYUxjQktITUNzOTZJdWFXNWlTZTZoMFovR0ZFalB3YmhNZ2VmdCtBZzNDUUpHN3htQWtRMU9NWVVadFR6RnBCT1Z3eGxCNmt3d0M1VzJHSmdjb2NCWU04QWkwMm4rWVpjbm1HVmdQT3lNam1tQ0lSUUNKaGlFclFCcHBnZ3F5VUVaampEczRJeUpBbjZEL3pTMXVCSVMxMFJiNXF0U3Mya0p6eW53NXlLQ1NxUGJVc0E5a29zTnRVYjJvTEVtdDFLVEhONmlCV2xYQ1psRzBUZGJGT1RzOGdkU2llN21SR3hOY0IzQ1ZCK2JnTllDZFl2VER3aFN1VkhnRnNqdm9GUzdUWUF5QXhaZWQ4NVpHelZGbDcrMXFORDQ2OWlMQWVoS3VBWk5zQnJrWVZDY2lzNlJSZzYwMjRHbE1pWXRUeFdIM1hGUDJVS3R3NkNsc0VLV2VaSU9sUmcxNERCQUFURmx3RVEzOTNzTkpzU0psblhEVnBsSzNJRk1uSFlLaEo0Rm94OFUwOVJGL2VsdENYUTRvb1A4WUJiVVVFWmdWeThvV2s0NWlPcHJBeGxFaDJQUi80MjJLSW9EYmphYUltVkxjaGxVa295ZVZ3ZTZSTEZFTVZnczFuTmkxc1lBUjREbmo5MVROOUlVbmNXbnN4UkdnVGI2OXB0QU1yY3BRMnBUVDk5NTVPRDEvMjlLYzJlSXd4dVpqWWI3bTJhWFh5NWhwcEQyWmI5cWloOGV5L2czQXpBS0t1QVVMWFM0cmhaeVFybDZJSHdyQm1lN2JDSjd0MExwYlFzRzdqRVNtSk9aRkM0b1BERVRlRmh5TklkSCtLbS9MRWd5Y1JOV3kxdm9CWTREdUd0WEkzVTVSTFpTc1dYVVFhZUV4RmNCcVdWUlhPNmJaUUpwTUlKUnA1SWhkZTN1K3JMVTg4K2RPZVRTc0kyYUpzNFh6MHJhSU82alJ4QU1wdy9DYUgyWG1IVVBiTy9yUzdQUHZqQkYvYS85YjFIYW4zRFA4QVlSdm41QzFtM3dFQVVSOTVCT1lsQUV4TUFiYkpaUFdiaWkvcHMvYUZvMHg1QVRpeVU4MkdGWVdEWmJRWUFxT09tVVEveldqY2FnSmZBVTFHaU1DWml3UDRESTZHT1psd29GVnJuRk5MWks1VDBsQUNqcVBJSWVTaGp2am5yem80MU5TU3dhdTBGTHgrM2RqYlVoaGFraW5LdGhGaWtYbjVJbFljdk5vV25VWVAyL3NmY1U5KzQ0N2RmRUhGcWp5M0tJWFU2bm5CYlhDZFdBRENlaW85NE1BSnpjN05MazZjZjZMdjZoaDhJaWhTVXF0V0p2SzIyanNwdy9vakpURXdxTm9WSnN6MkF5R1pnMWt1RzhselRoaEF1RElDK3ZxTjM4amRyQUx5R1ZEaWhOcGdLSWE3QldDWHhwb3FVS2tLYlhhSW41RU5Wb2tHbndGTnFQSXBhZDFmSVpic1pybE9ackNpM0ZZSXJpS3lPb0c2K1ArQWZic0VBekowKzg4RGNIRyt3bVBQdWdaT09jVlBzRzhWYTJ3aWM4YUQ4Y1Q5bDl2aFh2Nnl2Tnl4aEFCalh4V2JXRm12MldnU1pwZkhGZ0ViTWVOVmpvUmlQOWJKOERnWkNWeTNwN1hVeW1JcmVadVZTM1BuMlBKdUJ0clJQNklXeTRWWUNQdURIbHZUR2N1QXRQNWlqTkc4TDdURWprTFI5SzBNRUdvV3NvTHA3M1c1ckM4dC9QZ1hPdHhuNGRhVGFVbVBweEZQU2pUQlVYV2U4aDcxamlMZlZkV0lGa0RMb0RmQUcxYzcrdjE5K1l1d05QLzlFZDkvd0cvbDBGd1lBeGVCVHo1dDFHeTNoZXdPMko2QksyREN6c3VoNlFtVGx3cnpnaUd6b0xub0l2OEY0Rk9sYkQwRTBPSi9WWXpXbThsUUlqNTdtZVlId2xMQnZrWUphbXJNNWJQc2NTVUdMTjJmWlZiRzB6VDRKN1BRRzhFaVpsNy93STNwSHBhcysrL2dYUC9wdW5nRFFITmNYNElwdWJtZmJPbVVBZkhnNTgzbUQ5R2JnZFAzc2tVLzF2ZnI3Mzhoc2FtOXdhZllOUno2OTJPYWFtQTRBS3huSnJNQ2pUTW9ROEp3MWwzUVZLWXpBeWhJcEo2U0dsUVRZdGZPbTVUWVNOajRpMWNCbFVZcWFuTWRjUXFYcUhlK3dLTDB5UkI2ODBWUmdJMlZXVXRsWkdOcXlRa1k3aThXY0c1NGlEZXZFSjZkUitTRVVQbEI2NmJtam41dzRjNFp2QU9CNCtsanVsbkxjTWw3dXBWTUd3UG1DYWZjMEN0OTM1djRQM1BYS2Q5NzJpOTNkUGRmd0c2Z3NoK3hUMUZ0WUJYaEZtNGVheGFOSVU4bW00WlUwWGV0TUpWY21id0hqRkoyWDlleUs1eThQanh5L0FSN1MyeVRLNVhWdm9PeE96NElSMk1udFlYenh3eXg4bWRobWY3Ny9VRjg4OWVYYjN2OEZKZW1Cb0wwRm1FK1lpdnVRcEtzOHJHQjdYQ2YzQUp4RG1QWUdtV1diZVBLVHArb1hqLzFaTi9jK2FsWllDUlJ6cXhlOExFaXQ2L2xZQVpKMUR4ZnVIZWN3WmpmZ3VNMUNwKzNReStlMDErT1o5RFk0cTlmcmFnTzlLMDBpWFFGY2FWN1dxcDhYZi9oMEdlK2pqR2dGc0VkZnJKbysrL3p0VDl6N1p5ZFZqaDVCUjJ4eFdxTFRwcDV2cHNvNDdLVHpJUWFrVVRTTzg4MjFsKy83NzdmcFlQNFp2dHpMYlVENFNLV0daVnJpY3NLcVpMT3VYRjI1UEVxRDg2Vm1pRzN1dWw0ZEc2SldKcktGdU4wcnF6S0t0azNtVytDakhYWFRIMTUxSG5ERURvT0Rlam1OSHlSaDJjODNLN3VYbHM1OC9YYnBRcGgzWFBsOXdreTVwNmZhN2pwcEFHQWVCL1FHMFVCODQveWpmM2hpNGR6UlA3SlZnTGl3dllCNHVpNXQ5UlVMcTJMZlVIS1lEeTRhMENKOXd6aktYMkd2NnEwTk1IS2xlV2xML2JRRFFyUnJoM25uaVM4eWora25oNW45OGVQNlhOM1VxV2R1ZWZDdWp4d25qeHlUb3hzQmI0WWxkT3JTU1FQZ1BIdEQwaFVBcDV4cUp6LzM3MjV0ek0wOTA2TkhJZmtaZXg3SGVZbHRocjZNTkNnR2ZYbnUwQnNFZE55V29OcmxkVjJwdGxxOTNxQnRsbk5IMmh6YllrWmdoN1VIbm5ocU5Dcmw1eWZZUitWUmZuMnUrcG5QLys0djNxb1E5LzdvUkQ1Qkt1eXRVTEJ6cnRNR2dFYmd2REZ1Qk16S1RUOTMzem41MzlMRTM4QUEySzJBTHZhZCtsQnVaMTNWQ2hTM1NYbDJGb2ViNHViYnJTM1duazFKWVBzeUQybmpiMXkvUE1wSFgvbU5SdDBDTkU0ZXV2OS9IWDMwM25QaUFuMUlaMy8weEhXbm8weDIraWxBeWp5TllzTDB4bUx4QnA3LzQzLzRoYi94bjE3NmJNK2Vneis3ekk5NHlCYjI2TUx2dlRVZDBVMHBYWWt3eXAvVWF6TjRFdDlWd2NTSTJRcG1XNGJhOWtqSSttVUh0UWRXZU9hL2QxaXp2Kzc1TVFBSDltcTZ2M2o2cy8vM3YvNGtPLzlNd3J6OVo1T2lvUGVPdDhLaGt0cnZPcjBDZ09PMFFZUjlGWURGczJYUG1YdC81VGV6aFlVVFBYb3FZTGNDTWdMZCtrNjJuY1NEUXVVcUNleENDVERZK2RqSHVIN0loWjhneHdEczM2TUpibW5oeEpjKzlxdi9ROGsrR2Zyc254b0JXdHhSNWFlQzdUQUExSU56NVM4YmdPVUxEMy8weE5Rem4vLzE3bHFqYms4RnpBRG9PYjE5M3owVXJxNlZCSGFiQkhqa042NWZjOXFuUjMzajhudjFReldqQTQzNmM0OTgvdGNmdXZNUFRxZzk2QUtUb0JzQTR1aEp4eFZmZFpqYlRnTkFoVzRFVXN1SEFHclAzL3FPZXhiT0hQbFFyNTZOOGlNWjV2V3VOQ3VCeWxVUzJHMFM0SWc3UCtXMlQ3K0ZaY292QTNCZ1hEOUtldUxJaC83a3ZlKzRXKzFCOTlaUy9tMHhBdHRsQUx3eHdMSVJRQWo0cnFOLzhLYmZYN3A0OGpOOWVrU0MzdHRYVW5WUFVLdU1nTVJUdWQwaUFWZisvVkorWnYyOVV2NnI5L08xMzlPZi9yMTN2ZWwvcXgzb0hkLzlYOHNBYkV0enQ4c0EwSmkxakVBUXh2ejh3dkZQdlAzWGxxY3ZQTkNybmRLd0NzQVE2UFhieWdoc3k0Q29Lcms4Q2ZDeG1EMjY1ejh3MXBYdDE2TStsdit2T0NDYUd0TzN2KzluZm0xK250K3FNc1ZQbGQvdi9ia0Z3TG11aEZnSHI5dHBBTHdadmdJbzd3VmdCSmFtWDN4bzRvVlAvK3RmYnN4ZWVyUlhLd0ZiQmVoWlJiZmVuZGE3QTlYR29FdXhnanRPQW54OW1sOXV2cXFrL04wTFU0OTg5a1AvNXQzSERuMXpnakV1WDU3OTBZbHRVL3BVY0ZmaUJ0dWZwamxNK1FIWFBYL3VxZG5GeVZOZkdiN2h4OTdZTTloL0RTS3p4MVh4ZmR3cjlYaXdUOGM0Ky9RTzk0Sys0MSt2NjZYaVZpMUlXN09EdzkwYXJJTTZtTUxIV09iMCt3UzczZEVXWmwvYTRpY0N0N05OL05UNFB2MTBPelAvUGkzNzhkZGNwUWxzL3RJamQzMzRsOTcxNkQyM3ZpUitFRFRLajA4My9zQzdBWEFvVk9mZGxUQUF0QXJWS1RjMFZhZnV1WmYrYW5yKzdOUDNqNzMyNzkvWU16UjRuWDA4T0ZnQktWNVl1R3kzSWFnTVFPY0g1RlpydUZJR2dFZlZ3d1BkV3U3amcrTHZaOWt2NWUrYXZmalZ6L3pPdi9vUGo5N3pDWlNmOGM3ei9yTHlnM2RkY0NqVTlyZ3JaUUJvblN1OHczS0x1eGZPSFptZGZ2YUw5NDY4L3FjUDlvMk0zb2lZTExNdXdRaXNWclJNcWozeHlnQzBSNDZkb0hJbERFQ3Zia3YzYUtmL2dINTMwbWQ5bnZOZnZVOWFmdkhVcDI5OTcwKzk1K2hEOTV4WGU1bmhVWDYvL3kvUC9vaGsyNVdmU25lQ0FZQ1AxVnhYZmZMVTRzdGYrNS8zN2ZtYjc2ejNqVjcxL1YxOGpBOVJtUkVJWHhPaThIWklyeklBcTNYVGxjZHZwd0hnK3hVam12WDNqV3JXMTA0L3lzOXUvOVU2NGJkM3VGR2ZlT0h3QnovNEwxNzdHK2ZQbnB5VlpGQjJYL1pqQU5nRDhFMC9IN1lPbGJTOTdrb2FBRnE2MmhUdUFnRmFudlBmL1BBM0I2NTU0NUdCZmRmZjNEM1FzMGUvb1JidXdiVUU2K0l0d2tqS0MzWkNqSlVCNklSVTIwTnpPd3lBZmNldlg2ZjZ0TkhIOC8xOWNjbVBBVGlvbmY3QnJ2bmp4eDc2OC8veWY5NzlsdHVrNGN6NktIeTY3UGVabjJIcXZqMEMyQ0tWSzIwQVlIczlJK0JONjVsNDRrK2ZsWG45MHNncmYyaHY5K0Rvalg1UUVBTGNpM0ZiME1uanc1VUI4SzdZZWJBVEJzQm5IM2IzQjZYNExQZE44WFdQNzgvM3I5TGhIcDd6TDAyZStzemRIL21QLy9tdWo3em5NWWFqdk0vNndQTE1mOFUyL2NvOXQ1cnlsZk4xT3U1OEFObmh3Mk9jOEhwWjJMemVGTWp3aHIvK0Z6Ny9FNFBmOWFQdnF2VVB2MjVSNGwyU1owYzc5OW9LNXNkQTJTaGNabHY0TXJlR0tUNGl5eitzbHpyQ2o0UHFOMnVkYXpHMW14eHQ0WmVJOSs3dHNhY1pGeTh5TWUxdVIxdDRzbkhod21LMnBCK0EzWXFqRkYxS3Z6TGJvL2k4eURQWXowWmYrSVFYRU0vSFBNWTE4OWNXWm8rZWVQSytEOTN5S3ovMUZ5cnF5M3RYZmhRZjRhWXovNDVSZnZHMTZ1eEwyblk3VnllZ0d3RWdieXppVTBOQWVIbndOWC8zd0t0LytzUC91SGYvamY4czYrazlpQkZZa3FneEFqdzFNS2hleFFBdzZCdENLQlJzQVloTk9MSlhCbUFUQXR2bXJCczFBR212KzREajVCNnZvcVB3K0g1K3B0MjgzdVRUbE1ObnUvRkRVbnplNVIvVGpOKzlWRDk5NmRTUmozL3V0Ly85bng0NzlKVnphaTVqRllYM0dkK1YzNDJDSzc2ejRIQ2JKZFZjbmN1Z0dYdmxZczRQRU8rR0FBT1FyZ2JjR0lCZkhyLzVGMTU5OVZ2ZTgvTzllMjk0UjliYmZ5MGZHc1VZbUJHUW1JRm1BQWliandaQkVmN3Nud1M1L0JvQ2hqTzg0cFVCeU1WeDJRSEU2NTFkRW5VVGJmS3NsZTZaOTYyeUFyQTZkR0dQaUpuZFozZi9vVmNVbnQvbjQ4QlpuMFpWL2t1OU1jd1Bkd3pvL1pSUnpmak0vTFhGK1pPVFo0NTk2b0hiZnVPVEQzL3hsaE9xbnpIS0RJL0N1MDluZlJSL1J5cS8rTXI3Z1BCT2N0WnZZc2dOZ0VOZkRhUXJBb3dCNmN1anIzL2JOUWZmK3FzLzNuZmdwcCtwOVkxOWp6NHIwSTB4V0U1V0Jia2hVQUhUZVkydXFQdUNaZzd5RVplZU0rQ0R4U1BEV2dyS1QwMDFzdWxwL1FpMWN5bGF1STBNMUpEenlsNXByOTBDak5mQ0xjREV5aC9VTGpYTkdBYVgvajZCeFlWcmxkZGI2REpDTnF2bGE4SjdwRVVCVHpJWUNSTW1PTDYzWmtvOE1kR3dXNER3ZXhNYUdFcGpkamVGVjlpT2x5dXVKM2dXNWxkNVVmNWVqU2ovbFY0TUFUL1Z6WXpQTC9iVWxyUzBYNXA2L09LSnB6NTMvKzN2dS92UVZ6LzNVbXdPaXUxS0Qwd1ZuNW5mRlIvb2JrY05FK1MzVTUzekJrVEIzYXU3N0pZQWlQSzdVY2dOUWRZN1BITHRQL2pOTjR4Yy82Ti9wM3YwMVQ5VTZ4MSt2WHA3bEJGb0JrRmRZNnNDZFl2MWhpNG9oWWRGYzBXWS9DTmErZzFySnBqVTE5dW5wOFBBSTY4NUsreVJuUTJEQWREbUZSK20wTENkNElDcW5BbGNGNkFyYmc3WHdLWGx5blNJUTlEeUpPRnlQQ2JsR1QwOXJUK2xBOTd5QU9YSDlmeWRWOGtuMVJadS9WQjg4S2I4Z3NVWHAwTFlEWUROL0NnL1NxK1pIc1hYZ2lEcldsNmVYSzVQSFowOS8rSTNqaCs2LzRFN2YvZmRoK3YxYWI3Ynp6aEVvWDNXZDZWM1NGcnFmV1E0VlBMT2NXcnFqblVwYjRRUnZFUENHQUEzQm00RUhJSjNnUS91Kzl2Lzl0cXhHOTkyVTkvK04zeHY5OUNCTjlSNmhyNHJxL1h1VjJtOVhCQ1ZYMTNtdHdxVU5JUGdGR0ljNWNkUHRUSUFxckNWY3hLdDBxNFVqcll4NEZNRGdHQk5xUlJ3NVhJbGFrcEw4NjBYcG9IUTgzeWJpYStSMTJnNlhXaHJOT3pSSXpsbTk2bkphQUNFODluZlBqS2pPT2tvUE4rZ1pNWW5ySC9VZFZHZm9uaDVlV0htK2ZucGM0ZlB2M0Q0OFdjZXV2T3ByMy8yOTA4cWxkL3Fvd2s0Wm5WWGRJZmczSmNWMzd2ZklUUjJsUE9HN1NpbVNzdzRqMEQzR0FEQzlGL1pZd1RBT2ZTOGRBNWwrclV5MkR2eStwOTh4ZUJWTjEvWHMrZFYxM1gzNzN0VlY5L3dLN3E2Ky9kMzFmcjJOR3ExNFM1RjFHdTlkdXBZcGVoQlZnRDRTUTB5WHdHZ1RPdTZqZVJabDBqN01wZ0IwRXlYR2dCVEZyWFRaczBFdWhGWUMzcGFXdGFOU0JOT1RUQjhwQzlRMUplbXBlRlNYaStUMDFGZVp2a3g3Y2lqNE16UnJBQXNIM0tYVjdpZU5aYm1hNDNsNmF5eE1MRzhPUC95MHNMMFMvTlQ1MStZdW5EeStYUEhIajl4N0xHN1R4MTk1SjZMS3NGemUwcENBdWZLN2NxZlFrOXp4WTgxMmdvZ2xBNjBQTHpqb0RkeXh6RldZaWpsazdCN2xEdjFaV05BbXVNODdHV3BnZzdEa2RiYk83U252Ly9nelVPOTQ5ODkzTFBudXVHKzBZTWpYUU5qSXowRGU0ZXk3c0doNFpHQndhR3hnZjdaK1o3K3VibGFmNjI3cDBjZks5QXFRZytndW1yYVRxcnBSMmthZ2h4STBQZERPWlRRMEYwemYxVFJXS2J1SGVIRWViWkh5K1pGeldOVGx5UlFzU2ZHRFpwQ2kwdFRYdUVSanVFSWswZnhwcndSaHlLYVlwS2ZzSmZ6ZE1VaFpuUVZOT01LVkxyUWVWbkpVcUpqajZXcm9mclVSeEtpQkN1MEh1TjBMVW1PVXJqbEpSWFR6OHd1TERVYWk0dURBOHZ6V1dOeGZ2TFMzUHpTL056c1luMTJabUhxd3N6Q3pLV3BtWW5UVXhObmowOWZQUFhNOU9uamZ6VXpNekV4cCtxNFowZHhjVlNQWXp5NE1xUGNoRjNKVStoNG9KY0J1bGZRSFBFZDdlaWozZVJTZmdtN3B3TnRERVdJMGpzT1dJNm5hZER3c2dvYVRTRE9PNVE4M3BrZUJ1SWNsc09XV0VwM1hBVTNMZ0dYZTFvaXhYbllZWnFQc1BkUDJtL2tkZVgxTVBIVXV3RndYRG51NVlEdUZUUkhmRmM0Rjg2dVlEWmhNdVdiY09wZG1WUFlTdUU5bmJKcE9LWGxZYW9takhOWURsdGlLZDF4Rld5UEJGb3BWaG5uY1dBNTdEaUhiZ1JTV0E2N0FTaVg4VGpRWFJwMjNJNkc2V0RlMFl5dXdsektQK0gxZktyb2FiaFZPYXAwdklkYlFYQ3BvMHpsT2lPQnRSVE0wMXJCRkVlNDdGM3B3YWRoajlNYThMaTBiTUFVaHNianV3Wit1d3pXdEIwZUJwYkRhK0hLZWVuRWN2NjBZejEvaWl1SE41S25YS2FLcjVRQVNyY1JsK2J6c0NzczVWdUZIZWN3elZmR2VSb1FSL3F1ZHQ5T0E1UzIwQ0hsTm5rY21JYnB1TlZ3cExrcmwzRTgwTk5TWEJwZUx6M05XNFZYbDhCNml0WXEzWEVPb2U3aGpjQnlIdWZPOFI3ZjFmRGJmWUNXMjVmR054S21jOU44YVdldmhrL3pWT0h0bFVBcjVVeHhhUmpPUE80d3hhV2NrMDUvcC9uUzlGMGIvazRaeE41NWE3VzNuTGFWTXJ0MklPeHl4dGRTek5YUzFzTDdXRmd0enk0WFY4RytON1RBZkdlRkxyZjlsMXYrTzB2YW5XdnQ1U3JxNVpidlhNczZUTGthd0JzVGNDV25qY2xwcCtYNmpsWHNuZFlSRlQrVkJDb0pWQktvSkZCSm9KSkFKWUZLQXBVRUtnbFVFcWdrVUVtZ2trQWxnVW9DbFFRcUNWUVNxQ1JRU2FDU1FDV0JTZ0tWQkNvSlZCS29KRkJKb0pKQUpZRktBcFVFS2dsVUVxZ2tVRW1na2tBbGdVb0NsUVFxQ1ZRU3FDUlFTYUNTUUNXQlNnS1ZCQ29KVkJLb0pGQkpvSkpBSllGS0FwVUVLZ2xVRXFna1VFbWdrc0RHSmZEL0FiUEhaeUY3ZWlnRkFBQUFBRWxGVGtTdVFtQ0MiPgo8c3R5bGU+KiwqOjpiZWZvcmUsKjo6YWZ0ZXJ7Ym94LXNpemluZzpib3JkZXItYm94fWh0bWwsYm9keXttYXJnaW46MDtoZWlnaHQ6MTAwJTtvdmVyZmxvdzpoaWRkZW59PC9zdHlsZT4KPHN0eWxlPi8qISB0YWlsd2luZGNzcyB2NC4xLjE0IHwgTUlUIExpY2Vuc2UgfCBodHRwczovL3RhaWx3aW5kY3NzLmNvbSAqL0BsYXllciBwcm9wZXJ0aWVzO0BsYXllciB0aGVtZSxiYXNlLGNvbXBvbmVudHMsdXRpbGl0aWVzO0BsYXllciB0aGVtZXs6cm9vdCw6aG9zdHstLWZvbnQtc2Fuczp1aS1zYW5zLXNlcmlmLHN5c3RlbS11aSxzYW5zLXNlcmlmLCJBcHBsZSBDb2xvciBFbW9qaSIsIlNlZ29lIFVJIEVtb2ppIiwiU2Vnb2UgVUkgU3ltYm9sIiwiTm90byBDb2xvciBFbW9qaSI7LS1mb250LW1vbm86dWktbW9ub3NwYWNlLFNGTW9uby1SZWd1bGFyLE1lbmxvLG1vbm9zcGFjZTstLWNvbG9yLWJsYWNrOiMwMDA7LS1jb2xvci13aGl0ZTojZmZmOy0tc3BhY2luZzouMjVyZW07LS1mb250LXdlaWdodC1ub3JtYWw6NDAwOy0tZm9udC13ZWlnaHQtbWVkaXVtOjUwMDstLWZvbnQtd2VpZ2h0LXNlbWlib2xkOjYwMDstLXRyYWNraW5nLXdpZGU6LjAyNWVtOy0tbGVhZGluZy10aWdodDoxLjI1Oy0tcmFkaXVzLXhzOi4xMjVyZW07LS1yYWRpdXMtbWQ6LjM3NXJlbTstLXJhZGl1cy1sZzouNXJlbTstLWVhc2Utb3V0OmN1YmljLWJlemllcigwLDAsLjIsMSk7LS1ibHVyLW1kOjEycHg7LS1kZWZhdWx0LXRyYW5zaXRpb24tZHVyYXRpb246LjE1czstLWRlZmF1bHQtdHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb246Y3ViaWMtYmV6aWVyKC40LDAsLjIsMSk7LS1kZWZhdWx0LWZvbnQtZmFtaWx5OnZhcigtLWZvbnQtc2Fucyk7LS1kZWZhdWx0LW1vbm8tZm9udC1mYW1pbHk6dmFyKC0tZm9udC1tb25vKTstLWNvbG9yLXBhbmVsOiMxYzFjMWU7LS1jb2xvci1wYW5lbC1iZzojMTQxNDE2ZWI7LS1jb2xvci1wYW5lbC1vdmVybGF5OiMxNDE0MTZhNjstLWNvbG9yLXBhbmVsLWRlZXA6IzExMTExMzstLWNvbG9yLXBhZ2U6IzBhMGEwYTstLWNvbG9yLWFjY2VudDojYTViNGZjOy0tY29sb3Itc3VjY2VzczojNGFkZTgwOy0tY29sb3Itc3VjY2Vzcy1lbWVyYWxkOiMzNGQzOTk7LS1jb2xvci1kYW5nZXI6I2Y4NzE3MTstLWNvbG9yLWRhbmdlci1zb2Z0OiNmY2E1YTU7LS1mb250LXN5c3RlbTotYXBwbGUtc3lzdGVtLHN5c3RlbS11aSxzYW5zLXNlcmlmfX1AbGF5ZXIgYmFzZXsqLDphZnRlciw6YmVmb3Jle2JveC1zaXppbmc6Ym9yZGVyLWJveDtib3JkZXI6MCBzb2xpZDttYXJnaW46MDtwYWRkaW5nOjB9OjpiYWNrZHJvcHtib3gtc2l6aW5nOmJvcmRlci1ib3g7Ym9yZGVyOjAgc29saWQ7bWFyZ2luOjA7cGFkZGluZzowfTo6LXdlYmtpdC1maWxlLXVwbG9hZC1idXR0b257Ym94LXNpemluZzpib3JkZXItYm94O2JvcmRlcjowIHNvbGlkO21hcmdpbjowO3BhZGRpbmc6MH06OmZpbGUtc2VsZWN0b3ItYnV0dG9ue2JveC1zaXppbmc6Ym9yZGVyLWJveDtib3JkZXI6MCBzb2xpZDttYXJnaW46MDtwYWRkaW5nOjB9aHRtbCw6aG9zdHstd2Via2l0LXRleHQtc2l6ZS1hZGp1c3Q6MTAwJTt0YWItc2l6ZTo0O2xpbmUtaGVpZ2h0OjEuNTtmb250LWZhbWlseTp2YXIoLS1kZWZhdWx0LWZvbnQtZmFtaWx5LHVpLXNhbnMtc2VyaWYsc3lzdGVtLXVpLHNhbnMtc2VyaWYsIkFwcGxlIENvbG9yIEVtb2ppIiwiU2Vnb2UgVUkgRW1vamkiLCJTZWdvZSBVSSBTeW1ib2wiLCJOb3RvIENvbG9yIEVtb2ppIik7Zm9udC1mZWF0dXJlLXNldHRpbmdzOnZhcigtLWRlZmF1bHQtZm9udC1mZWF0dXJlLXNldHRpbmdzLG5vcm1hbCk7Zm9udC12YXJpYXRpb24tc2V0dGluZ3M6dmFyKC0tZGVmYXVsdC1mb250LXZhcmlhdGlvbi1zZXR0aW5ncyxub3JtYWwpOy13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjp0cmFuc3BhcmVudH1ocntjb2xvcjppbmhlcml0O2JvcmRlci10b3Atd2lkdGg6MXB4O2hlaWdodDowfWFiYnI6d2hlcmUoW3RpdGxlXSl7LXdlYmtpdC10ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lIGRvdHRlZDt0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lIGRvdHRlZH1oMSxoMixoMyxoNCxoNSxoNntmb250LXNpemU6aW5oZXJpdDtmb250LXdlaWdodDppbmhlcml0fWF7Y29sb3I6aW5oZXJpdDstd2Via2l0LXRleHQtZGVjb3JhdGlvbjppbmhlcml0O3RleHQtZGVjb3JhdGlvbjppbmhlcml0fWIsc3Ryb25ne2ZvbnQtd2VpZ2h0OmJvbGRlcn1jb2RlLGtiZCxzYW1wLHByZXtmb250LWZhbWlseTp2YXIoLS1kZWZhdWx0LW1vbm8tZm9udC1mYW1pbHksdWktbW9ub3NwYWNlLFNGTW9uby1SZWd1bGFyLE1lbmxvLE1vbmFjbyxDb25zb2xhcywiTGliZXJhdGlvbiBNb25vIiwiQ291cmllciBOZXciLG1vbm9zcGFjZSk7Zm9udC1mZWF0dXJlLXNldHRpbmdzOnZhcigtLWRlZmF1bHQtbW9uby1mb250LWZlYXR1cmUtc2V0dGluZ3Msbm9ybWFsKTtmb250LXZhcmlhdGlvbi1zZXR0aW5nczp2YXIoLS1kZWZhdWx0LW1vbm8tZm9udC12YXJpYXRpb24tc2V0dGluZ3Msbm9ybWFsKTtmb250LXNpemU6MWVtfXNtYWxse2ZvbnQtc2l6ZTo4MCV9c3ViLHN1cHtwb3NpdGlvbjpyZWxhdGl2ZTt2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZTtmb250LXNpemU6NzUlO2xpbmUtaGVpZ2h0OjB9c3Vie2JvdHRvbTotLjI1ZW19c3Vwe3RvcDotLjVlbX10YWJsZXt0ZXh0LWluZGVudDowO2JvcmRlci1jb2xvcjppbmhlcml0O2JvcmRlci1jb2xsYXBzZTpjb2xsYXBzZX06LW1vei1mb2N1c3Jpbmd7b3V0bGluZTphdXRvfXByb2dyZXNze3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lfXN1bW1hcnl7ZGlzcGxheTpsaXN0LWl0ZW19b2wsdWwsbWVudXtsaXN0LXN0eWxlOm5vbmV9aW1nLHN2Zyx2aWRlbyxjYW52YXMsYXVkaW8saWZyYW1lLGVtYmVkLG9iamVjdHtkaXNwbGF5OmJsb2NrO3ZlcnRpY2FsLWFsaWduOm1pZGRsZX1pbWcsdmlkZW97bWF4LXdpZHRoOjEwMCU7aGVpZ2h0OmF1dG99YnV0dG9uLGlucHV0LHNlbGVjdCxvcHRncm91cCx0ZXh0YXJlYXtmb250OmluaGVyaXQ7Zm9udC1mZWF0dXJlLXNldHRpbmdzOmluaGVyaXQ7Zm9udC12YXJpYXRpb24tc2V0dGluZ3M6aW5oZXJpdDtsZXR0ZXItc3BhY2luZzppbmhlcml0O2NvbG9yOmluaGVyaXQ7b3BhY2l0eToxO2JhY2tncm91bmQtY29sb3I6IzAwMDA7Ym9yZGVyLXJhZGl1czowfTo6LXdlYmtpdC1maWxlLXVwbG9hZC1idXR0b257Zm9udDppbmhlcml0O2ZvbnQtZmVhdHVyZS1zZXR0aW5nczppbmhlcml0O2ZvbnQtdmFyaWF0aW9uLXNldHRpbmdzOmluaGVyaXQ7bGV0dGVyLXNwYWNpbmc6aW5oZXJpdDtjb2xvcjppbmhlcml0O29wYWNpdHk6MTtiYWNrZ3JvdW5kLWNvbG9yOiMwMDAwO2JvcmRlci1yYWRpdXM6MH06OmZpbGUtc2VsZWN0b3ItYnV0dG9ue2ZvbnQ6aW5oZXJpdDtmb250LWZlYXR1cmUtc2V0dGluZ3M6aW5oZXJpdDtmb250LXZhcmlhdGlvbi1zZXR0aW5nczppbmhlcml0O2xldHRlci1zcGFjaW5nOmluaGVyaXQ7Y29sb3I6aW5oZXJpdDtvcGFjaXR5OjE7YmFja2dyb3VuZC1jb2xvcjojMDAwMDtib3JkZXItcmFkaXVzOjB9OndoZXJlKHNlbGVjdDotd2Via2l0LWFueShbbXVsdGlwbGVdLFtzaXplXSkpIG9wdGdyb3Vwe2ZvbnQtd2VpZ2h0OmJvbGRlcn06d2hlcmUoc2VsZWN0Oi1tb3otYW55KFttdWx0aXBsZV0sW3NpemVdKSkgb3B0Z3JvdXB7Zm9udC13ZWlnaHQ6Ym9sZGVyfTp3aGVyZShzZWxlY3Q6aXMoW211bHRpcGxlXSxbc2l6ZV0pKSBvcHRncm91cHtmb250LXdlaWdodDpib2xkZXJ9OndoZXJlKHNlbGVjdDotd2Via2l0LWFueShbbXVsdGlwbGVdLFtzaXplXSkpIG9wdGdyb3VwIG9wdGlvbntwYWRkaW5nLWlubGluZS1zdGFydDoyMHB4fTp3aGVyZShzZWxlY3Q6LW1vei1hbnkoW211bHRpcGxlXSxbc2l6ZV0pKSBvcHRncm91cCBvcHRpb257cGFkZGluZy1pbmxpbmUtc3RhcnQ6MjBweH06d2hlcmUoc2VsZWN0OmlzKFttdWx0aXBsZV0sW3NpemVdKSkgb3B0Z3JvdXAgb3B0aW9ue3BhZGRpbmctaW5saW5lLXN0YXJ0OjIwcHh9Ojotd2Via2l0LWZpbGUtdXBsb2FkLWJ1dHRvbnttYXJnaW4taW5saW5lLWVuZDo0cHh9OjpmaWxlLXNlbGVjdG9yLWJ1dHRvbnttYXJnaW4taW5saW5lLWVuZDo0cHh9OjpwbGFjZWhvbGRlcntvcGFjaXR5OjF9QHN1cHBvcnRzICggbm90ICgtd2Via2l0LWFwcGVhcmFuY2U6IC1hcHBsZS1wYXktYnV0dG9uKSkgb3IgKGNvbnRhaW4taW50cmluc2ljLXNpemU6IDFweCl7OjpwbGFjZWhvbGRlcntjb2xvcjpjdXJyZW50Q29sb3J9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXs6OnBsYWNlaG9sZGVye2NvbG9yOmNvbG9yLW1peChpbiBva2xhYixjdXJyZW50Y29sb3IgNTAlLHRyYW5zcGFyZW50KX19fXRleHRhcmVhe3Jlc2l6ZTp2ZXJ0aWNhbH06Oi13ZWJraXQtc2VhcmNoLWRlY29yYXRpb257LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmV9Ojotd2Via2l0LWRhdGUtYW5kLXRpbWUtdmFsdWV7dGV4dC1hbGlnbjppbmhlcml0O21pbi1oZWlnaHQ6MWxofTo6LXdlYmtpdC1kYXRldGltZS1lZGl0e2Rpc3BsYXk6aW5saW5lLWZsZXh9Ojotd2Via2l0LWRhdGV0aW1lLWVkaXQtZmllbGRzLXdyYXBwZXJ7cGFkZGluZzowfTo6LXdlYmtpdC1kYXRldGltZS1lZGl0e3BhZGRpbmctYmxvY2stc3RhcnQ6MDtwYWRkaW5nLWJsb2NrLWVuZDowfTo6LXdlYmtpdC1kYXRldGltZS1lZGl0LXllYXItZmllbGR7cGFkZGluZy1ibG9jay1zdGFydDowO3BhZGRpbmctYmxvY2stZW5kOjB9Ojotd2Via2l0LWRhdGV0aW1lLWVkaXQtbW9udGgtZmllbGR7cGFkZGluZy1ibG9jay1zdGFydDowO3BhZGRpbmctYmxvY2stZW5kOjB9Ojotd2Via2l0LWRhdGV0aW1lLWVkaXQtZGF5LWZpZWxke3BhZGRpbmctYmxvY2stc3RhcnQ6MDtwYWRkaW5nLWJsb2NrLWVuZDowfTo6LXdlYmtpdC1kYXRldGltZS1lZGl0LWhvdXItZmllbGR7cGFkZGluZy1ibG9jay1zdGFydDowO3BhZGRpbmctYmxvY2stZW5kOjB9Ojotd2Via2l0LWRhdGV0aW1lLWVkaXQtbWludXRlLWZpZWxke3BhZGRpbmctYmxvY2stc3RhcnQ6MDtwYWRkaW5nLWJsb2NrLWVuZDowfTo6LXdlYmtpdC1kYXRldGltZS1lZGl0LXNlY29uZC1maWVsZHtwYWRkaW5nLWJsb2NrLXN0YXJ0OjA7cGFkZGluZy1ibG9jay1lbmQ6MH06Oi13ZWJraXQtZGF0ZXRpbWUtZWRpdC1taWxsaXNlY29uZC1maWVsZHtwYWRkaW5nLWJsb2NrLXN0YXJ0OjA7cGFkZGluZy1ibG9jay1lbmQ6MH06Oi13ZWJraXQtZGF0ZXRpbWUtZWRpdC1tZXJpZGllbS1maWVsZHtwYWRkaW5nLWJsb2NrLXN0YXJ0OjA7cGFkZGluZy1ibG9jay1lbmQ6MH06Oi13ZWJraXQtY2FsZW5kYXItcGlja2VyLWluZGljYXRvcntsaW5lLWhlaWdodDoxfTotbW96LXVpLWludmFsaWR7Ym94LXNoYWRvdzpub25lfWJ1dHRvbnthcHBlYXJhbmNlOmJ1dHRvbn1pbnB1dDp3aGVyZShbdHlwZT1idXR0b25dLFt0eXBlPXJlc2V0XSxbdHlwZT1zdWJtaXRdKXthcHBlYXJhbmNlOmJ1dHRvbn06Oi13ZWJraXQtZmlsZS11cGxvYWQtYnV0dG9ue2FwcGVhcmFuY2U6YnV0dG9ufTo6ZmlsZS1zZWxlY3Rvci1idXR0b257YXBwZWFyYW5jZTpidXR0b259Ojotd2Via2l0LWlubmVyLXNwaW4tYnV0dG9ue2hlaWdodDphdXRvfTo6LXdlYmtpdC1vdXRlci1zcGluLWJ1dHRvbntoZWlnaHQ6YXV0b31baGlkZGVuXTp3aGVyZSg6bm90KFtoaWRkZW49dW50aWwtZm91bmRdKSl7ZGlzcGxheTpub25lIWltcG9ydGFudH19QGxheWVyIHV0aWxpdGllc3sucG9pbnRlci1ldmVudHMtYXV0b3twb2ludGVyLWV2ZW50czphdXRvfS5wb2ludGVyLWV2ZW50cy1ub25le3BvaW50ZXItZXZlbnRzOm5vbmV9LmNvbGxhcHNle3Zpc2liaWxpdHk6Y29sbGFwc2V9LmludmlzaWJsZXt2aXNpYmlsaXR5OmhpZGRlbn0udmlzaWJsZXt2aXNpYmlsaXR5OnZpc2libGV9LmFic29sdXRle3Bvc2l0aW9uOmFic29sdXRlfS5maXhlZHtwb3NpdGlvbjpmaXhlZH0ucmVsYXRpdmV7cG9zaXRpb246cmVsYXRpdmV9LnN0YXRpY3twb3NpdGlvbjpzdGF0aWN9Lmluc2V0LTB7aW5zZXQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSowKX0uLXRvcC1cWzVweFxde3RvcDotNXB4fS50b3AtMHt0b3A6Y2FsYyh2YXIoLS1zcGFjaW5nKSowKX0udG9wLTFcLjV7dG9wOmNhbGModmFyKC0tc3BhY2luZykqMS41KX0udG9wLTFcLzJ7dG9wOjUwJX0udG9wLTJ7dG9wOmNhbGModmFyKC0tc3BhY2luZykqMil9LnRvcC0ze3RvcDpjYWxjKHZhcigtLXNwYWNpbmcpKjMpfS50b3AtXFtjYWxjXCgxMDBcJVwrNHB4XClcXXt0b3A6Y2FsYygxMDAlICsgNHB4KX0udG9wLVxbY2FsY1woMTAwXCVcKzZweFwpXF17dG9wOmNhbGMoMTAwJSArIDZweCl9Li1yaWdodC1cWzVweFxde3JpZ2h0Oi01cHh9LnJpZ2h0LTB7cmlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSowKX0ucmlnaHQtMVwuNXtyaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpKjEuNSl9LnJpZ2h0LTJcLjV7cmlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSoyLjUpfS5yaWdodC0ze3JpZ2h0OmNhbGModmFyKC0tc3BhY2luZykqMyl9LnJpZ2h0LTR7cmlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSo0KX0ucmlnaHQtXFs5cHhcXXtyaWdodDo5cHh9LmJvdHRvbS0we2JvdHRvbTpjYWxjKHZhcigtLXNwYWNpbmcpKjApfS5ib3R0b20tM3tib3R0b206Y2FsYyh2YXIoLS1zcGFjaW5nKSozKX0uYm90dG9tLTR7Ym90dG9tOmNhbGModmFyKC0tc3BhY2luZykqNCl9LmxlZnQtMHtsZWZ0OmNhbGModmFyKC0tc3BhY2luZykqMCl9LmxlZnQtMVwvMntsZWZ0OjUwJX0ubGVmdC0yXC41e2xlZnQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSoyLjUpfS56LTF7ei1pbmRleDoxfS56LTEwe3otaW5kZXg6MTB9LnotMjB7ei1pbmRleDoyMH0uei0zMHt6LWluZGV4OjMwfS56LTM1e3otaW5kZXg6MzV9LnotMzZ7ei1pbmRleDozNn0uei00MHt6LWluZGV4OjQwfS56LTUwe3otaW5kZXg6NTB9LnotXFsyXF17ei1pbmRleDoyfS5jb2wtc3Bhbi1mdWxse2dyaWQtY29sdW1uOjEvLTF9LmNvbnRhaW5lcnt3aWR0aDoxMDAlfUBtZWRpYSAobWluLXdpZHRoOjQwcmVtKXsuY29udGFpbmVye21heC13aWR0aDo0MHJlbX19QG1lZGlhIChtaW4td2lkdGg6NDhyZW0pey5jb250YWluZXJ7bWF4LXdpZHRoOjQ4cmVtfX1AbWVkaWEgKG1pbi13aWR0aDo2NHJlbSl7LmNvbnRhaW5lcnttYXgtd2lkdGg6NjRyZW19fUBtZWRpYSAobWluLXdpZHRoOjgwcmVtKXsuY29udGFpbmVye21heC13aWR0aDo4MHJlbX19QG1lZGlhIChtaW4td2lkdGg6OTZyZW0pey5jb250YWluZXJ7bWF4LXdpZHRoOjk2cmVtfX0ubS0we21hcmdpbjpjYWxjKHZhcigtLXNwYWNpbmcpKjApfS4tbXgtMXttYXJnaW4taW5saW5lOmNhbGModmFyKC0tc3BhY2luZykqLTEpfS5teC0wXC41e21hcmdpbi1pbmxpbmU6Y2FsYyh2YXIoLS1zcGFjaW5nKSouNSl9Li1teS0ye21hcmdpbi1ibG9jazpjYWxjKHZhcigtLXNwYWNpbmcpKi0yKX0ubXktMXttYXJnaW4tYmxvY2s6Y2FsYyh2YXIoLS1zcGFjaW5nKSoxKX0ubXQtMnttYXJnaW4tdG9wOmNhbGModmFyKC0tc3BhY2luZykqMil9Lm1yLVxbM3B4XF17bWFyZ2luLXJpZ2h0OjNweH0ubWwtMFwuNXttYXJnaW4tbGVmdDpjYWxjKHZhcigtLXNwYWNpbmcpKi41KX0uYm94LWJvcmRlcntib3gtc2l6aW5nOmJvcmRlci1ib3h9LmJsb2Nre2Rpc3BsYXk6YmxvY2t9LmNvbnRlbnRze2Rpc3BsYXk6Y29udGVudHN9LmZsZXh7ZGlzcGxheTpmbGV4fS5ncmlke2Rpc3BsYXk6Z3JpZH0uaGlkZGVue2Rpc3BsYXk6bm9uZX0uaW5saW5le2Rpc3BsYXk6aW5saW5lfS5pbmxpbmUtYmxvY2t7ZGlzcGxheTppbmxpbmUtYmxvY2t9LmlubGluZS1mbGV4e2Rpc3BsYXk6aW5saW5lLWZsZXh9LlxbYXNwZWN0LXJhdGlvXDoxNlwvMTFcXXthc3BlY3QtcmF0aW86MTYvMTF9LnNpemUtMVwuNXt3aWR0aDpjYWxjKHZhcigtLXNwYWNpbmcpKjEuNSk7aGVpZ2h0OmNhbGModmFyKC0tc3BhY2luZykqMS41KX0uaC00e2hlaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpKjQpfS5oLTV7aGVpZ2h0OmNhbGModmFyKC0tc3BhY2luZykqNSl9LmgtNVwuNXtoZWlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSo1LjUpfS5oLTd7aGVpZ2h0OmNhbGModmFyKC0tc3BhY2luZykqNyl9LmgtMTB7aGVpZ2h0OmNhbGModmFyKC0tc3BhY2luZykqMTApfS5oLVxbM3B4XF17aGVpZ2h0OjNweH0uaC1cWzE0cHhcXXtoZWlnaHQ6MTRweH0uaC1cWzIycHhcXXtoZWlnaHQ6MjJweH0uaC1cWzI2cHhcXXtoZWlnaHQ6MjZweH0uaC1cWzMwcHhcXXtoZWlnaHQ6MzBweH0uaC1mdWxse2hlaWdodDoxMDAlfS5oLXB4e2hlaWdodDoxcHh9Lmgtc2NyZWVue2hlaWdodDoxMDB2aH0ubWF4LWgtOTB7bWF4LWhlaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpKjkwKX0ubWF4LWgtXFs3MHZoXF17bWF4LWhlaWdodDo3MHZofS5tYXgtaC1cWzI2MHB4XF17bWF4LWhlaWdodDoyNjBweH0ubWF4LWgtXFszMjBweFxde21heC1oZWlnaHQ6MzIwcHh9Lm1heC1oLWZ1bGx7bWF4LWhlaWdodDoxMDAlfS5taW4taC0we21pbi1oZWlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSowKX0ubWluLWgtXFsyMnB4XF17bWluLWhlaWdodDoyMnB4fS5taW4taC1cWzM2cHhcXXttaW4taGVpZ2h0OjM2cHh9Lm1pbi1oLVxbNDRweFxde21pbi1oZWlnaHQ6NDRweH0ubWluLWgtcHh7bWluLWhlaWdodDoxcHh9LnctMXt3aWR0aDpjYWxjKHZhcigtLXNwYWNpbmcpKjEpfS53LTR7d2lkdGg6Y2FsYyh2YXIoLS1zcGFjaW5nKSo0KX0udy01e3dpZHRoOmNhbGModmFyKC0tc3BhY2luZykqNSl9LnctNVwuNXt3aWR0aDpjYWxjKHZhcigtLXNwYWNpbmcpKjUuNSl9LnctNnt3aWR0aDpjYWxjKHZhcigtLXNwYWNpbmcpKjYpfS53LTd7d2lkdGg6Y2FsYyh2YXIoLS1zcGFjaW5nKSo3KX0udy0xMHt3aWR0aDpjYWxjKHZhcigtLXNwYWNpbmcpKjEwKX0udy0yMXt3aWR0aDpjYWxjKHZhcigtLXNwYWNpbmcpKjIxKX0udy1cWzIycHhcXXt3aWR0aDoyMnB4fS53LVxbMzBweFxde3dpZHRoOjMwcHh9LnctXFs0MFwlXF17d2lkdGg6NDAlfS53LVxbY2FsY1woMTAwXCVcKzhweFwpXF17d2lkdGg6Y2FsYygxMDAlICsgOHB4KX0udy1mdWxse3dpZHRoOjEwMCV9LnctcHh7d2lkdGg6MXB4fS5tYXgtdy05MHttYXgtd2lkdGg6Y2FsYyh2YXIoLS1zcGFjaW5nKSo5MCl9Lm1heC13LTEyMHttYXgtd2lkdGg6Y2FsYyh2YXIoLS1zcGFjaW5nKSoxMjApfS5tYXgtdy1cWzMyMHB4XF17bWF4LXdpZHRoOjMyMHB4fS5tYXgtdy1cWzM2MHB4XF17bWF4LXdpZHRoOjM2MHB4fS5tYXgtdy1mdWxse21heC13aWR0aDoxMDAlfS5taW4tdy0we21pbi13aWR0aDpjYWxjKHZhcigtLXNwYWNpbmcpKjApfS5taW4tdy02NXttaW4td2lkdGg6Y2FsYyh2YXIoLS1zcGFjaW5nKSo2NSl9Lm1pbi13LVxbNTZweFxde21pbi13aWR0aDo1NnB4fS5taW4tdy1cWzIwMHB4XF17bWluLXdpZHRoOjIwMHB4fS5taW4tdy1cWzIyMHB4XF17bWluLXdpZHRoOjIyMHB4fS5taW4tdy1weHttaW4td2lkdGg6MXB4fS5mbGV4LTF7ZmxleDoxfS5zaHJpbmstMHtmbGV4LXNocmluazowfS4tdHJhbnNsYXRlLXgtMVwvMnstLXR3LXRyYW5zbGF0ZS14OmNhbGMoY2FsYygxLzIqMTAwJSkqLTEpO3RyYW5zbGF0ZTp2YXIoLS10dy10cmFuc2xhdGUteCl2YXIoLS10dy10cmFuc2xhdGUteSl9LnRyYW5zbGF0ZS14LTF7LS10dy10cmFuc2xhdGUteDpjYWxjKHZhcigtLXNwYWNpbmcpKjEpO3RyYW5zbGF0ZTp2YXIoLS10dy10cmFuc2xhdGUteCl2YXIoLS10dy10cmFuc2xhdGUteSl9Li10cmFuc2xhdGUteS0xXC8yey0tdHctdHJhbnNsYXRlLXk6Y2FsYyhjYWxjKDEvMioxMDAlKSotMSk7dHJhbnNsYXRlOnZhcigtLXR3LXRyYW5zbGF0ZS14KXZhcigtLXR3LXRyYW5zbGF0ZS15KX0ucm90YXRlLTB7cm90YXRlOm5vbmV9LnJvdGF0ZS0xODB7cm90YXRlOjE4MGRlZ30udHJhbnNmb3Jte3RyYW5zZm9ybTp2YXIoLS10dy1yb3RhdGUteCwpdmFyKC0tdHctcm90YXRlLXksKXZhcigtLXR3LXJvdGF0ZS16LCl2YXIoLS10dy1za2V3LXgsKXZhcigtLXR3LXNrZXcteSwpfS5hbmltYXRlLVxbZ3JpZC1zcGluXzBcLjhzX2xpbmVhcl9pbmZpbml0ZVxde2FuaW1hdGlvbjpncmlkLXNwaW4gLjhzIGxpbmVhciBpbmZpbml0ZX0uY3Vyc29yLWNvbC1yZXNpemV7Y3Vyc29yOmNvbC1yZXNpemV9LmN1cnNvci1kZWZhdWx0e2N1cnNvcjpkZWZhdWx0fS5jdXJzb3Itbm90LWFsbG93ZWR7Y3Vyc29yOm5vdC1hbGxvd2VkfS5jdXJzb3ItcG9pbnRlcntjdXJzb3I6cG9pbnRlcn0uY3Vyc29yLXByb2dyZXNze2N1cnNvcjpwcm9ncmVzc30uY3Vyc29yLXRleHR7Y3Vyc29yOnRleHR9LnRvdWNoLW5vbmV7dG91Y2gtYWN0aW9uOm5vbmV9LnJlc2l6ZXtyZXNpemU6Ym90aH0ubGlzdC1ub25le2xpc3Qtc3R5bGUtdHlwZTpub25lfS5hcHBlYXJhbmNlLW5vbmV7YXBwZWFyYW5jZTpub25lfS5hdXRvLXJvd3MtXFttaW5tYXhcKDMwMHB4XCxhdXRvXClcXXtncmlkLWF1dG8tcm93czptaW5tYXgoMzAwcHgsYXV0byl9LlxbZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zXDoxZnJfMWZyXzFmclxde2dyaWQtdGVtcGxhdGUtY29sdW1uczoxZnIgMWZyIDFmcn0uXFtncmlkLXRlbXBsYXRlLWNvbHVtbnNcOmF1dG9fMWZyX2F1dG9cXXtncmlkLXRlbXBsYXRlLWNvbHVtbnM6YXV0byAxZnIgYXV0b30uZ3JpZC1jb2xzLVxbcmVwZWF0XChhdXRvLWZpbGxcLG1pbm1heFwoMjAwcHhcLDFmclwpXClcXXtncmlkLXRlbXBsYXRlLWNvbHVtbnM6cmVwZWF0KGF1dG8tZmlsbCxtaW5tYXgoMjAwcHgsMWZyKSl9LmZsZXgtY29se2ZsZXgtZGlyZWN0aW9uOmNvbHVtbn0uZmxleC1yb3d7ZmxleC1kaXJlY3Rpb246cm93fS5jb250ZW50LXN0YXJ0e2FsaWduLWNvbnRlbnQ6IGZsZXgtc3RhcnR9Lml0ZW1zLWJhc2VsaW5le2FsaWduLWl0ZW1zOmJhc2VsaW5lfS5pdGVtcy1jZW50ZXJ7YWxpZ24taXRlbXM6IGNlbnRlcn0uaXRlbXMtc3RyZXRjaHthbGlnbi1pdGVtczpzdHJldGNofS5qdXN0aWZ5LWJldHdlZW57anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW59Lmp1c3RpZnktY2VudGVye2p1c3RpZnktY29udGVudDpjZW50ZXJ9Lmp1c3RpZnktZW5ke2p1c3RpZnktY29udGVudDpmbGV4LWVuZH0uZ2FwLTBcLjV7Z2FwOmNhbGModmFyKC0tc3BhY2luZykqLjUpfS5nYXAtMXtnYXA6Y2FsYyh2YXIoLS1zcGFjaW5nKSoxKX0uZ2FwLTFcLjV7Z2FwOmNhbGModmFyKC0tc3BhY2luZykqMS41KX0uZ2FwLTJ7Z2FwOmNhbGModmFyKC0tc3BhY2luZykqMil9LmdhcC0yXC41e2dhcDpjYWxjKHZhcigtLXNwYWNpbmcpKjIuNSl9LmdhcC0ze2dhcDpjYWxjKHZhcigtLXNwYWNpbmcpKjMpfS5nYXAtXFs1cHhcXXtnYXA6NXB4fS5nYXAtcHh7Z2FwOjFweH0uanVzdGlmeS1zZWxmLWVuZHtqdXN0aWZ5LXNlbGY6ZmxleC1lbmR9LnRydW5jYXRle292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO3doaXRlLXNwYWNlOm5vd3JhcH0ub3ZlcmZsb3ctaGlkZGVue292ZXJmbG93OmhpZGRlbn0ub3ZlcmZsb3cteS1hdXRve292ZXJmbG93LXk6YXV0b30ucm91bmRlZHtib3JkZXItcmFkaXVzOi4yNXJlbX0ucm91bmRlZC1cWzJweFxde2JvcmRlci1yYWRpdXM6MnB4fS5yb3VuZGVkLVxbM3B4XF17Ym9yZGVyLXJhZGl1czozcHh9LnJvdW5kZWQtXFs1cHhcXXtib3JkZXItcmFkaXVzOjVweH0ucm91bmRlZC1cWzdweFxde2JvcmRlci1yYWRpdXM6N3B4fS5yb3VuZGVkLVxbOHB4XF17Ym9yZGVyLXJhZGl1czo4cHh9LnJvdW5kZWQtXFsxMHB4XF17Ym9yZGVyLXJhZGl1czoxMHB4fS5yb3VuZGVkLVxbMTRweFxde2JvcmRlci1yYWRpdXM6MTRweH0ucm91bmRlZC1mdWxse2JvcmRlci1yYWRpdXM6My40MDI4MmUzOHB4fS5yb3VuZGVkLWxne2JvcmRlci1yYWRpdXM6dmFyKC0tcmFkaXVzLWxnKX0ucm91bmRlZC1tZHtib3JkZXItcmFkaXVzOnZhcigtLXJhZGl1cy1tZCl9LnJvdW5kZWQteHN7Ym9yZGVyLXJhZGl1czp2YXIoLS1yYWRpdXMteHMpfS5yb3VuZGVkLXQtXFsxMHB4XF17Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1czoxMHB4O2JvcmRlci10b3AtcmlnaHQtcmFkaXVzOjEwcHh9LmJvcmRlcntib3JkZXItc3R5bGU6dmFyKC0tdHctYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6MXB4fS5ib3JkZXItMntib3JkZXItc3R5bGU6dmFyKC0tdHctYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6MnB4fS5ib3JkZXItdHtib3JkZXItdG9wLXN0eWxlOnZhcigtLXR3LWJvcmRlci1zdHlsZSk7Ym9yZGVyLXRvcC13aWR0aDoxcHh9LmJvcmRlci1kYXNoZWR7LS10dy1ib3JkZXItc3R5bGU6ZGFzaGVkO2JvcmRlci1zdHlsZTpkYXNoZWR9LmJvcmRlci1ub25ley0tdHctYm9yZGVyLXN0eWxlOm5vbmU7Ym9yZGVyLXN0eWxlOm5vbmV9LlwhYm9yZGVyLVxbcmdiYVwoMTBcLDEzMlwsMjU1XCwwXC42XClcXXtib3JkZXItY29sb3I6IzBhODRmZjk5IWltcG9ydGFudH0uYm9yZGVyLVxbXCMyYTJhMmFcXXtib3JkZXItY29sb3I6IzJhMmEyYX0uYm9yZGVyLVxbXCMyMjJcXXtib3JkZXItY29sb3I6IzIyMn0uYm9yZGVyLVxbXCMzMzNcXXtib3JkZXItY29sb3I6IzMzM30uYm9yZGVyLVxbXCM0NDRcXXtib3JkZXItY29sb3I6IzQ0NH0uYm9yZGVyLWFjY2VudHtib3JkZXItY29sb3I6dmFyKC0tY29sb3ItYWNjZW50KX0uYm9yZGVyLWRhbmdlclwvMjB7Ym9yZGVyLWNvbG9yOiNmODcxNzEzM31Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5ib3JkZXItZGFuZ2VyXC8yMHtib3JkZXItY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLWRhbmdlcikyMCUsdHJhbnNwYXJlbnQpfX0uYm9yZGVyLXBhbmVse2JvcmRlci1jb2xvcjp2YXIoLS1jb2xvci1wYW5lbCl9LmJvcmRlci13aGl0ZXtib3JkZXItY29sb3I6dmFyKC0tY29sb3Itd2hpdGUpfS5ib3JkZXItd2hpdGVcLzh7Ym9yZGVyLWNvbG9yOiNmZmZmZmYxNH1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5ib3JkZXItd2hpdGVcLzh7Ym9yZGVyLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk4JSx0cmFuc3BhcmVudCl9fS5ib3JkZXItd2hpdGVcLzEwe2JvcmRlci1jb2xvcjojZmZmZmZmMWF9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuYm9yZGVyLXdoaXRlXC8xMHtib3JkZXItY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTEwJSx0cmFuc3BhcmVudCl9fS5ib3JkZXItd2hpdGVcLzEye2JvcmRlci1jb2xvcjojZmZmZmZmMWZ9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuYm9yZGVyLXdoaXRlXC8xMntib3JkZXItY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTEyJSx0cmFuc3BhcmVudCl9fS5ib3JkZXItd2hpdGVcLzE1e2JvcmRlci1jb2xvcjojZmZmZmZmMjZ9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuYm9yZGVyLXdoaXRlXC8xNXtib3JkZXItY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTE1JSx0cmFuc3BhcmVudCl9fS5ib3JkZXItd2hpdGVcL1xbMFwuMDZcXXtib3JkZXItY29sb3I6I2ZmZmZmZjBmfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmJvcmRlci13aGl0ZVwvXFswXC4wNlxde2JvcmRlci1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpNiUsdHJhbnNwYXJlbnQpfX0uXCFiZy1cW3JnYmFcKDEwXCwxMzJcLDI1NVwsMFwuMDhcKVxde2JhY2tncm91bmQtY29sb3I6IzBhODRmZjE0IWltcG9ydGFudH0uXCFiZy13aGl0ZVwvXFswXC4xMlxde2JhY2tncm91bmQtY29sb3I6I2ZmZmZmZjFmIWltcG9ydGFudH1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5cIWJnLXdoaXRlXC9cWzBcLjEyXF17YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpMTIlLHRyYW5zcGFyZW50KSFpbXBvcnRhbnR9fS5iZy1cW1wjMGEwYTBjXF17YmFja2dyb3VuZC1jb2xvcjojMGEwYTBjfS5iZy1cW1wjMWExYTFhXF17YmFja2dyb3VuZC1jb2xvcjojMWExYTFhfS5iZy1cW1wjMWMxYzFjXF17YmFja2dyb3VuZC1jb2xvcjojMWMxYzFjfS5iZy1cW1wjMWQyYTFkXF17YmFja2dyb3VuZC1jb2xvcjojMWQyYTFkfS5iZy1cW1wjNmU2ZTcyXF17YmFja2dyb3VuZC1jb2xvcjojNmU2ZTcyfS5iZy1cW1wjOWE5YTllXF17YmFja2dyb3VuZC1jb2xvcjojOWE5YTllfS5iZy1cW1wjMTExXF17YmFja2dyb3VuZC1jb2xvcjojMTExfS5iZy1cW1wjMjIyXF17YmFja2dyb3VuZC1jb2xvcjojMjIyfS5iZy1cW1wjMTAxMDEwXF17YmFja2dyb3VuZC1jb2xvcjojMTAxMDEwfS5iZy1cW3JnYmFcKDEwXCwxMzJcLDI1NVwsMFwuMjJcKVxde2JhY2tncm91bmQtY29sb3I6IzBhODRmZjM4fS5iZy1cW3JnYmFcKDIwXCwyMFwsMjBcLDBcLjg1XClcXXtiYWNrZ3JvdW5kLWNvbG9yOiMxNDE0MTRkOX0uYmctXFtyZ2JhXCgyMFwsMjJcLDI4XCwwXC43OFwpXF17YmFja2dyb3VuZC1jb2xvcjojMTQxNjFjYzd9LmJnLVxbcmdiYVwoOTlcLDEwMlwsMjQxXCwwXC4xMlwpXF17YmFja2dyb3VuZC1jb2xvcjojNjM2NmYxMWZ9LmJnLWFjY2VudHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNvbG9yLWFjY2VudCl9LmJnLWJsYWNre2JhY2tncm91bmQtY29sb3I6dmFyKC0tY29sb3ItYmxhY2spfS5iZy1kYW5nZXJcLzEwe2JhY2tncm91bmQtY29sb3I6I2Y4NzE3MTFhfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmJnLWRhbmdlclwvMTB7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3ItZGFuZ2VyKTEwJSx0cmFuc3BhcmVudCl9fS5iZy1wYWdle2JhY2tncm91bmQtY29sb3I6dmFyKC0tY29sb3ItcGFnZSl9LmJnLXBhbmVse2JhY2tncm91bmQtY29sb3I6dmFyKC0tY29sb3ItcGFuZWwpfS5iZy1wYW5lbC1iZ3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNvbG9yLXBhbmVsLWJnKX0uYmctcGFuZWwtZGVlcHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNvbG9yLXBhbmVsLWRlZXApfS5iZy1wYW5lbC1vdmVybGF5e2JhY2tncm91bmQtY29sb3I6dmFyKC0tY29sb3ItcGFuZWwtb3ZlcmxheSl9LmJnLXN1Y2Nlc3MtZW1lcmFsZHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNvbG9yLXN1Y2Nlc3MtZW1lcmFsZCl9LmJnLXRyYW5zcGFyZW50e2JhY2tncm91bmQtY29sb3I6IzAwMDB9LmJnLXdoaXRle2JhY2tncm91bmQtY29sb3I6dmFyKC0tY29sb3Itd2hpdGUpfS5iZy13aGl0ZVwvOHtiYWNrZ3JvdW5kLWNvbG9yOiNmZmZmZmYxNH1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5iZy13aGl0ZVwvOHtiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk4JSx0cmFuc3BhcmVudCl9fS5iZy13aGl0ZVwvMjB7YmFja2dyb3VuZC1jb2xvcjojZmZmM31Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5iZy13aGl0ZVwvMjB7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpMjAlLHRyYW5zcGFyZW50KX19LmJnLXdoaXRlXC9cWzBcLjAzXF17YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmMDh9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuYmctd2hpdGVcL1xbMFwuMDNcXXtiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSkzJSx0cmFuc3BhcmVudCl9fS5iZy13aGl0ZVwvXFswXC4wNFxde2JhY2tncm91bmQtY29sb3I6I2ZmZmZmZjBhfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmJnLXdoaXRlXC9cWzBcLjA0XF17YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpNCUsdHJhbnNwYXJlbnQpfX0uYmctd2hpdGVcL1xbMFwuMDZcXXtiYWNrZ3JvdW5kLWNvbG9yOiNmZmZmZmYwZn1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5iZy13aGl0ZVwvXFswXC4wNlxde2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTYlLHRyYW5zcGFyZW50KX19LmJnLXdoaXRlXC9cWzBcLjEyXF17YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmMWZ9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuYmctd2hpdGVcL1xbMFwuMTJcXXtiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSkxMiUsdHJhbnNwYXJlbnQpfX0uYmctd2hpdGVcL1xbMFwuMTZcXXtiYWNrZ3JvdW5kLWNvbG9yOiNmZmZmZmYyOX1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5iZy13aGl0ZVwvXFswXC4xNlxde2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTE2JSx0cmFuc3BhcmVudCl9fS5iZy1cW2xpbmVhci1ncmFkaWVudFwodG9fYm90dG9tXCxcIzFjMWMxZV8wXCVcLHJnYmFcKDI4XCwyOFwsMzBcLDBcKV8xMDBcJVwpXF17YmFja2dyb3VuZC1pbWFnZTpsaW5lYXItZ3JhZGllbnQoIzFjMWMxZSAwJSwjMWMxYzFlMDAgMTAwJSl9LmJnLVxbbGluZWFyLWdyYWRpZW50XCh0b19yaWdodFwscmdiYVwoMjhcLDI4XCwzMFwsMFwpXzBcJVwsXCMxYzFjMWVfNTVcJVwpXF17YmFja2dyb3VuZC1pbWFnZTpsaW5lYXItZ3JhZGllbnQoOTBkZWcsIzFjMWMxZTAwIDAlLCMxYzFjMWUgNTUlKX0uYmctXFtsaW5lYXItZ3JhZGllbnRcKHRvX3RvcFwsXCMxYzFjMWVfMFwlXCxyZ2JhXCgyOFwsMjhcLDMwXCwwXClfMTAwXCVcKVxde2JhY2tncm91bmQtaW1hZ2U6bGluZWFyLWdyYWRpZW50KCMxYzFjMWUwMCAwJSwjMWMxYzFlIDEwMCUpfS5vYmplY3QtY29udGFpbntvYmplY3QtZml0OmNvbnRhaW59Lm9iamVjdC1jb3ZlcntvYmplY3QtZml0OmNvdmVyfS5wLTB7cGFkZGluZzpjYWxjKHZhcigtLXNwYWNpbmcpKjApfS5wLTBcLjV7cGFkZGluZzpjYWxjKHZhcigtLXNwYWNpbmcpKi41KX0ucC0xe3BhZGRpbmc6Y2FsYyh2YXIoLS1zcGFjaW5nKSoxKX0ucC0ye3BhZGRpbmc6Y2FsYyh2YXIoLS1zcGFjaW5nKSoyKX0ucC0ze3BhZGRpbmc6Y2FsYyh2YXIoLS1zcGFjaW5nKSozKX0ucC0zXC41e3BhZGRpbmc6Y2FsYyh2YXIoLS1zcGFjaW5nKSozLjUpfS5wLTR7cGFkZGluZzpjYWxjKHZhcigtLXNwYWNpbmcpKjQpfS5wLTZ7cGFkZGluZzpjYWxjKHZhcigtLXNwYWNpbmcpKjYpfS5weC0wXC41e3BhZGRpbmctaW5saW5lOmNhbGModmFyKC0tc3BhY2luZykqLjUpfS5weC0xe3BhZGRpbmctaW5saW5lOmNhbGModmFyKC0tc3BhY2luZykqMSl9LnB4LTFcLjV7cGFkZGluZy1pbmxpbmU6Y2FsYyh2YXIoLS1zcGFjaW5nKSoxLjUpfS5weC0ye3BhZGRpbmctaW5saW5lOmNhbGModmFyKC0tc3BhY2luZykqMil9LnB4LTJcLjV7cGFkZGluZy1pbmxpbmU6Y2FsYyh2YXIoLS1zcGFjaW5nKSoyLjUpfS5weC0ze3BhZGRpbmctaW5saW5lOmNhbGModmFyKC0tc3BhY2luZykqMyl9LnB4LTNcLjV7cGFkZGluZy1pbmxpbmU6Y2FsYyh2YXIoLS1zcGFjaW5nKSozLjUpfS5weC1cWzdweFxde3BhZGRpbmctaW5saW5lLXN0YXJ0OjdweDtwYWRkaW5nLWlubGluZS1lbmQ6N3B4fS5weS0wXC41e3BhZGRpbmctYmxvY2s6Y2FsYyh2YXIoLS1zcGFjaW5nKSouNSl9LnB5LTF7cGFkZGluZy1ibG9jazpjYWxjKHZhcigtLXNwYWNpbmcpKjEpfS5weS0xXC41e3BhZGRpbmctYmxvY2s6Y2FsYyh2YXIoLS1zcGFjaW5nKSoxLjUpfS5weS0ye3BhZGRpbmctYmxvY2s6Y2FsYyh2YXIoLS1zcGFjaW5nKSoyKX0ucHktMlwuNXtwYWRkaW5nLWJsb2NrOmNhbGModmFyKC0tc3BhY2luZykqMi41KX0ucHktNntwYWRkaW5nLWJsb2NrOmNhbGModmFyKC0tc3BhY2luZykqNil9LnB5LVxbMnB4XF17cGFkZGluZy1ibG9jay1zdGFydDoycHg7cGFkZGluZy1ibG9jay1lbmQ6MnB4fS5weS1cWzNweFxde3BhZGRpbmctYmxvY2stc3RhcnQ6M3B4O3BhZGRpbmctYmxvY2stZW5kOjNweH0ucHktXFs1cHhcXXtwYWRkaW5nLWJsb2NrLXN0YXJ0OjVweDtwYWRkaW5nLWJsb2NrLWVuZDo1cHh9LnB5LVxbN3B4XF17cGFkZGluZy1ibG9jay1zdGFydDo3cHg7cGFkZGluZy1ibG9jay1lbmQ6N3B4fS5weS1weHtwYWRkaW5nLWJsb2NrLXN0YXJ0OjFweDtwYWRkaW5nLWJsb2NrLWVuZDoxcHh9LnB0LTF7cGFkZGluZy10b3A6Y2FsYyh2YXIoLS1zcGFjaW5nKSoxKX0ucHQtMVwuNXtwYWRkaW5nLXRvcDpjYWxjKHZhcigtLXNwYWNpbmcpKjEuNSl9LnB0LTJ7cGFkZGluZy10b3A6Y2FsYyh2YXIoLS1zcGFjaW5nKSoyKX0ucHItMntwYWRkaW5nLXJpZ2h0OmNhbGModmFyKC0tc3BhY2luZykqMil9LnByLVxbMjZweFxde3BhZGRpbmctcmlnaHQ6MjZweH0ucGItMFwuNXtwYWRkaW5nLWJvdHRvbTpjYWxjKHZhcigtLXNwYWNpbmcpKi41KX0ucGItXFsycHhcXXtwYWRkaW5nLWJvdHRvbToycHh9LnBsLTJ7cGFkZGluZy1sZWZ0OmNhbGModmFyKC0tc3BhY2luZykqMil9LnBsLTJcLjV7cGFkZGluZy1sZWZ0OmNhbGModmFyKC0tc3BhY2luZykqMi41KX0ucGwtM3twYWRkaW5nLWxlZnQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSozKX0ucGwtNntwYWRkaW5nLWxlZnQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSo2KX0ucGwtN3twYWRkaW5nLWxlZnQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSo3KX0ucGwtXFsyNnB4XF17cGFkZGluZy1sZWZ0OjI2cHh9LnRleHQtY2VudGVye3RleHQtYWxpZ246Y2VudGVyfS50ZXh0LWxlZnR7dGV4dC1hbGlnbjpsZWZ0fS5cW2ZvbnQtZmFtaWx5XDotYXBwbGUtc3lzdGVtXCxzeXN0ZW0tdWlcLHNhbnMtc2VyaWZcXXtmb250LWZhbWlseTotYXBwbGUtc3lzdGVtLHN5c3RlbS11aSxCbGlua01hY1N5c3RlbUZvbnQsU2Vnb2UgVUksUm9ib3RvLE5vdG8gU2FucyxVYnVudHUsQ2FudGFyZWxsLEhlbHZldGljYSBOZXVlLHNhbnMtc2VyaWZ9LmZvbnQtXFtpbmhlcml0XF17Zm9udC1mYW1pbHk6aW5oZXJpdH0uZm9udC1tb25ve2ZvbnQtZmFtaWx5OnZhcigtLWZvbnQtbW9ubyl9LmZvbnQtc3lzdGVte2ZvbnQtZmFtaWx5OnZhcigtLWZvbnQtc3lzdGVtKX0udGV4dC1cWzlweFxde2ZvbnQtc2l6ZTo5cHh9LnRleHQtXFsxMHB4XF17Zm9udC1zaXplOjEwcHh9LnRleHQtXFsxMVwuNXB4XF17Zm9udC1zaXplOjExLjVweH0udGV4dC1cWzExcHhcXXtmb250LXNpemU6MTFweH0udGV4dC1cWzEycHhcXXtmb250LXNpemU6MTJweH0udGV4dC1cWzEzcHhcXXtmb250LXNpemU6MTNweH0udGV4dC1cWzE0cHhcXXtmb250LXNpemU6MTRweH0udGV4dC1cWzE4cHhcXXtmb250LXNpemU6MThweH0udGV4dC1cWzI4cHhcXXtmb250LXNpemU6MjhweH0ubGVhZGluZy1cWzFcLjVcXXstLXR3LWxlYWRpbmc6MS41O2xpbmUtaGVpZ2h0OjEuNX0ubGVhZGluZy1cWzFcLjM1XF17LS10dy1sZWFkaW5nOjEuMzU7bGluZS1oZWlnaHQ6MS4zNX0ubGVhZGluZy1ub25ley0tdHctbGVhZGluZzoxO2xpbmUtaGVpZ2h0OjF9LmxlYWRpbmctdGlnaHR7LS10dy1sZWFkaW5nOnZhcigtLWxlYWRpbmctdGlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWxlYWRpbmctdGlnaHQpfS5mb250LW1lZGl1bXstLXR3LWZvbnQtd2VpZ2h0OnZhcigtLWZvbnQtd2VpZ2h0LW1lZGl1bSk7Zm9udC13ZWlnaHQ6dmFyKC0tZm9udC13ZWlnaHQtbWVkaXVtKX0uZm9udC1ub3JtYWx7LS10dy1mb250LXdlaWdodDp2YXIoLS1mb250LXdlaWdodC1ub3JtYWwpO2ZvbnQtd2VpZ2h0OnZhcigtLWZvbnQtd2VpZ2h0LW5vcm1hbCl9LmZvbnQtc2VtaWJvbGR7LS10dy1mb250LXdlaWdodDp2YXIoLS1mb250LXdlaWdodC1zZW1pYm9sZCk7Zm9udC13ZWlnaHQ6dmFyKC0tZm9udC13ZWlnaHQtc2VtaWJvbGQpfS50cmFja2luZy1cWzBcLjFlbVxdey0tdHctdHJhY2tpbmc6LjFlbTtsZXR0ZXItc3BhY2luZzouMWVtfS50cmFja2luZy1cWzBcLjAyZW1cXXstLXR3LXRyYWNraW5nOi4wMmVtO2xldHRlci1zcGFjaW5nOi4wMmVtfS50cmFja2luZy1cWzBcLjA0ZW1cXXstLXR3LXRyYWNraW5nOi4wNGVtO2xldHRlci1zcGFjaW5nOi4wNGVtfS50cmFja2luZy1cWzBcLjA2ZW1cXXstLXR3LXRyYWNraW5nOi4wNmVtO2xldHRlci1zcGFjaW5nOi4wNmVtfS50cmFja2luZy1cWzBcLjA4ZW1cXXstLXR3LXRyYWNraW5nOi4wOGVtO2xldHRlci1zcGFjaW5nOi4wOGVtfS50cmFja2luZy13aWRley0tdHctdHJhY2tpbmc6dmFyKC0tdHJhY2tpbmctd2lkZSk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tdHJhY2tpbmctd2lkZSl9LmJyZWFrLXdvcmRze292ZXJmbG93LXdyYXA6YnJlYWstd29yZH0udGV4dC1lbGxpcHNpc3t0ZXh0LW92ZXJmbG93OmVsbGlwc2lzfS53aGl0ZXNwYWNlLW5vd3JhcHt3aGl0ZS1zcGFjZTpub3dyYXB9LlwhdGV4dC13aGl0ZXtjb2xvcjp2YXIoLS1jb2xvci13aGl0ZSkhaW1wb3J0YW50fS50ZXh0LVxbXCMwYTBhMGNcXXtjb2xvcjojMGEwYTBjfS50ZXh0LVxbXCM4ZThlOTNcXXtjb2xvcjojOGU4ZTkzfS50ZXh0LVxbXCMwNjIwMThcXXtjb2xvcjojMDYyMDE4fS50ZXh0LWFjY2VudHtjb2xvcjp2YXIoLS1jb2xvci1hY2NlbnQpfS50ZXh0LWRhbmdlcntjb2xvcjp2YXIoLS1jb2xvci1kYW5nZXIpfS50ZXh0LWRhbmdlci1zb2Z0e2NvbG9yOnZhcigtLWNvbG9yLWRhbmdlci1zb2Z0KX0udGV4dC1pbmhlcml0e2NvbG9yOmluaGVyaXR9LnRleHQtc3VjY2Vzc3tjb2xvcjp2YXIoLS1jb2xvci1zdWNjZXNzKX0udGV4dC13aGl0ZXtjb2xvcjp2YXIoLS1jb2xvci13aGl0ZSl9LnRleHQtd2hpdGVcLzQwe2NvbG9yOiNmZmY2fUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LnRleHQtd2hpdGVcLzQwe2NvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk0MCUsdHJhbnNwYXJlbnQpfX0udGV4dC13aGl0ZVwvNDV7Y29sb3I6I2ZmZmZmZjczfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LnRleHQtd2hpdGVcLzQ1e2NvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk0NSUsdHJhbnNwYXJlbnQpfX0udGV4dC13aGl0ZVwvNTB7Y29sb3I6I2ZmZmZmZjgwfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LnRleHQtd2hpdGVcLzUwe2NvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk1MCUsdHJhbnNwYXJlbnQpfX0udGV4dC13aGl0ZVwvNTV7Y29sb3I6I2ZmZmZmZjhjfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LnRleHQtd2hpdGVcLzU1e2NvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk1NSUsdHJhbnNwYXJlbnQpfX0udGV4dC13aGl0ZVwvNjB7Y29sb3I6I2ZmZjl9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsudGV4dC13aGl0ZVwvNjB7Y29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTYwJSx0cmFuc3BhcmVudCl9fS50ZXh0LXdoaXRlXC82NXtjb2xvcjojZmZmZmZmYTZ9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsudGV4dC13aGl0ZVwvNjV7Y29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTY1JSx0cmFuc3BhcmVudCl9fS50ZXh0LXdoaXRlXC83MHtjb2xvcjojZmZmZmZmYjN9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsudGV4dC13aGl0ZVwvNzB7Y29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTcwJSx0cmFuc3BhcmVudCl9fS50ZXh0LXdoaXRlXC84MHtjb2xvcjojZmZmY31Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey50ZXh0LXdoaXRlXC84MHtjb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpODAlLHRyYW5zcGFyZW50KX19LnRleHQtd2hpdGVcLzg1e2NvbG9yOiNmZmZmZmZkOX1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey50ZXh0LXdoaXRlXC84NXtjb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpODUlLHRyYW5zcGFyZW50KX19LnRleHQtd2hpdGVcLzkwe2NvbG9yOiNmZmZmZmZlNn1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey50ZXh0LXdoaXRlXC85MHtjb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpOTAlLHRyYW5zcGFyZW50KX19LnRleHQtd2hpdGVcLzk1e2NvbG9yOiNmZmZmZmZmMn1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey50ZXh0LXdoaXRlXC85NXtjb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpOTUlLHRyYW5zcGFyZW50KX19LnRleHQtd2hpdGVcL1xbMFwuNDJcXXtjb2xvcjojZmZmZmZmNmJ9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsudGV4dC13aGl0ZVwvXFswXC40Mlxde2NvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk0MiUsdHJhbnNwYXJlbnQpfX0udGV4dC13aGl0ZVwvXFswXC40OFxde2NvbG9yOiNmZmZmZmY3YX1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey50ZXh0LXdoaXRlXC9cWzBcLjQ4XF17Y29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTQ4JSx0cmFuc3BhcmVudCl9fS50ZXh0LXdoaXRlXC9cWzBcLjU4XF17Y29sb3I6I2ZmZmZmZjk0fUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LnRleHQtd2hpdGVcL1xbMFwuNThcXXtjb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpNTguMCUsdHJhbnNwYXJlbnQpfX0udGV4dC13aGl0ZVwvXFswXC45Mlxde2NvbG9yOiNmZmZmZmZlYn1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey50ZXh0LXdoaXRlXC9cWzBcLjkyXF17Y29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTkyJSx0cmFuc3BhcmVudCl9fS51cHBlcmNhc2V7dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlfS5pdGFsaWN7Zm9udC1zdHlsZTppdGFsaWN9LlxbZm9udC12YXJpYW50LW51bWVyaWNcOnRhYnVsYXItbnVtc1xde2ZvbnQtdmFyaWFudC1udW1lcmljOnRhYnVsYXItbnVtc30ubm8tdW5kZXJsaW5le3RleHQtZGVjb3JhdGlvbi1saW5lOm5vbmV9Lm9wYWNpdHktMHtvcGFjaXR5OjB9Lm9wYWNpdHktNDB7b3BhY2l0eTouNH0ub3BhY2l0eS01MHtvcGFjaXR5Oi41fS5vcGFjaXR5LTYwe29wYWNpdHk6LjZ9Lm9wYWNpdHktMTAwe29wYWNpdHk6MX0uc2hhZG93ey0tdHctc2hhZG93OjAgMXB4IDNweCAwIHZhcigtLXR3LXNoYWRvdy1jb2xvciwjMDAwMDAwMWEpLDAgMXB4IDJweCAtMXB4IHZhcigtLXR3LXNoYWRvdy1jb2xvciwjMDAwMDAwMWEpO2JveC1zaGFkb3c6dmFyKC0tdHctaW5zZXQtc2hhZG93KSx2YXIoLS10dy1pbnNldC1yaW5nLXNoYWRvdyksdmFyKC0tdHctcmluZy1vZmZzZXQtc2hhZG93KSx2YXIoLS10dy1yaW5nLXNoYWRvdyksdmFyKC0tdHctc2hhZG93KX0uc2hhZG93LVxbMF8xcHhfMnB4X3JnYmFcKDBcLDBcLDBcLDBcLjE4XClcLDBfNnB4XzE4cHhfcmdiYVwoMFwsMFwsMFwsMFwuMjhcKVwsaW5zZXRfMF8wXzBfMXB4X3JnYmFcKDI1NVwsMjU1XCwyNTVcLDBcLjA2XClcXXstLXR3LXNoYWRvdzowIDFweCAycHggdmFyKC0tdHctc2hhZG93LWNvbG9yLCMwMDAwMDAyZSksMCA2cHggMThweCB2YXIoLS10dy1zaGFkb3ctY29sb3IsIzAwMDAwMDQ3KSxpbnNldCAwIDAgMCAxcHggdmFyKC0tdHctc2hhZG93LWNvbG9yLCNmZmZmZmYwZik7Ym94LXNoYWRvdzp2YXIoLS10dy1pbnNldC1zaGFkb3cpLHZhcigtLXR3LWluc2V0LXJpbmctc2hhZG93KSx2YXIoLS10dy1yaW5nLW9mZnNldC1zaGFkb3cpLHZhcigtLXR3LXJpbmctc2hhZG93KSx2YXIoLS10dy1zaGFkb3cpfS5zaGFkb3ctXFswXzRweF8xMnB4X3JnYmFcKDBcLDBcLDBcLDBcLjRcKVxdey0tdHctc2hhZG93OjAgNHB4IDEycHggdmFyKC0tdHctc2hhZG93LWNvbG9yLCMwMDA2KTtib3gtc2hhZG93OnZhcigtLXR3LWluc2V0LXNoYWRvdyksdmFyKC0tdHctaW5zZXQtcmluZy1zaGFkb3cpLHZhcigtLXR3LXJpbmctb2Zmc2V0LXNoYWRvdyksdmFyKC0tdHctcmluZy1zaGFkb3cpLHZhcigtLXR3LXNoYWRvdyl9LnNoYWRvdy1cWzBfOHB4XzI0cHhfcmdiYVwoMFwsMFwsMFwsMFwuNFwpXF17LS10dy1zaGFkb3c6MCA4cHggMjRweCB2YXIoLS10dy1zaGFkb3ctY29sb3IsIzAwMDYpO2JveC1zaGFkb3c6dmFyKC0tdHctaW5zZXQtc2hhZG93KSx2YXIoLS10dy1pbnNldC1yaW5nLXNoYWRvdyksdmFyKC0tdHctcmluZy1vZmZzZXQtc2hhZG93KSx2YXIoLS10dy1yaW5nLXNoYWRvdyksdmFyKC0tdHctc2hhZG93KX0uc2hhZG93LVxbMF84cHhfMjRweF9yZ2JhXCgwXCwwXCwwXCwwXC41XClcXXstLXR3LXNoYWRvdzowIDhweCAyNHB4IHZhcigtLXR3LXNoYWRvdy1jb2xvciwjMDAwMDAwODApO2JveC1zaGFkb3c6dmFyKC0tdHctaW5zZXQtc2hhZG93KSx2YXIoLS10dy1pbnNldC1yaW5nLXNoYWRvdyksdmFyKC0tdHctcmluZy1vZmZzZXQtc2hhZG93KSx2YXIoLS10dy1yaW5nLXNoYWRvdyksdmFyKC0tdHctc2hhZG93KX0uc2hhZG93LVxbMF8xMnB4XzQwcHhfcmdiYVwoMFwsMFwsMFwsMFwuNTVcKVxdey0tdHctc2hhZG93OjAgMTJweCA0MHB4IHZhcigtLXR3LXNoYWRvdy1jb2xvciwjMDAwMDAwOGMpO2JveC1zaGFkb3c6dmFyKC0tdHctaW5zZXQtc2hhZG93KSx2YXIoLS10dy1pbnNldC1yaW5nLXNoYWRvdyksdmFyKC0tdHctcmluZy1vZmZzZXQtc2hhZG93KSx2YXIoLS10dy1yaW5nLXNoYWRvdyksdmFyKC0tdHctc2hhZG93KX0ucmluZ3stLXR3LXJpbmctc2hhZG93OnZhcigtLXR3LXJpbmctaW5zZXQsKTAgMCAwIGNhbGMoMXB4ICsgdmFyKC0tdHctcmluZy1vZmZzZXQtd2lkdGgpKXZhcigtLXR3LXJpbmctY29sb3IsY3VycmVudGNvbG9yKTtib3gtc2hhZG93OnZhcigtLXR3LWluc2V0LXNoYWRvdyksdmFyKC0tdHctaW5zZXQtcmluZy1zaGFkb3cpLHZhcigtLXR3LXJpbmctb2Zmc2V0LXNoYWRvdyksdmFyKC0tdHctcmluZy1zaGFkb3cpLHZhcigtLXR3LXNoYWRvdyl9LlxbYm94LXNoYWRvd1w6MF8wXzZweF9yZ2JhXCg3NFwsMjIyXCwxMjhcLDBcLjdcKVxde2JveC1zaGFkb3c6MCAwIDZweCAjNGFkZTgwYjN9Lm91dGxpbmV7b3V0bGluZS1zdHlsZTp2YXIoLS10dy1vdXRsaW5lLXN0eWxlKTtvdXRsaW5lLXdpZHRoOjFweH0uYmx1cnstLXR3LWJsdXI6Ymx1cig4cHgpO2ZpbHRlcjp2YXIoLS10dy1ibHVyLCl2YXIoLS10dy1icmlnaHRuZXNzLCl2YXIoLS10dy1jb250cmFzdCwpdmFyKC0tdHctZ3JheXNjYWxlLCl2YXIoLS10dy1odWUtcm90YXRlLCl2YXIoLS10dy1pbnZlcnQsKXZhcigtLXR3LXNhdHVyYXRlLCl2YXIoLS10dy1zZXBpYSwpdmFyKC0tdHctZHJvcC1zaGFkb3csKX0uZmlsdGVye2ZpbHRlcjp2YXIoLS10dy1ibHVyLCl2YXIoLS10dy1icmlnaHRuZXNzLCl2YXIoLS10dy1jb250cmFzdCwpdmFyKC0tdHctZ3JheXNjYWxlLCl2YXIoLS10dy1odWUtcm90YXRlLCl2YXIoLS10dy1pbnZlcnQsKXZhcigtLXR3LXNhdHVyYXRlLCl2YXIoLS10dy1zZXBpYSwpdmFyKC0tdHctZHJvcC1zaGFkb3csKX0uYmFja2Ryb3AtYmx1ci1cWzJweFxdey0tdHctYmFja2Ryb3AtYmx1cjpibHVyKDJweCk7LXdlYmtpdC1iYWNrZHJvcC1maWx0ZXI6dmFyKC0tdHctYmFja2Ryb3AtYmx1ciwpdmFyKC0tdHctYmFja2Ryb3AtYnJpZ2h0bmVzcywpdmFyKC0tdHctYmFja2Ryb3AtY29udHJhc3QsKXZhcigtLXR3LWJhY2tkcm9wLWdyYXlzY2FsZSwpdmFyKC0tdHctYmFja2Ryb3AtaHVlLXJvdGF0ZSwpdmFyKC0tdHctYmFja2Ryb3AtaW52ZXJ0LCl2YXIoLS10dy1iYWNrZHJvcC1vcGFjaXR5LCl2YXIoLS10dy1iYWNrZHJvcC1zYXR1cmF0ZSwpdmFyKC0tdHctYmFja2Ryb3Atc2VwaWEsKTtiYWNrZHJvcC1maWx0ZXI6dmFyKC0tdHctYmFja2Ryb3AtYmx1ciwpdmFyKC0tdHctYmFja2Ryb3AtYnJpZ2h0bmVzcywpdmFyKC0tdHctYmFja2Ryb3AtY29udHJhc3QsKXZhcigtLXR3LWJhY2tkcm9wLWdyYXlzY2FsZSwpdmFyKC0tdHctYmFja2Ryb3AtaHVlLXJvdGF0ZSwpdmFyKC0tdHctYmFja2Ryb3AtaW52ZXJ0LCl2YXIoLS10dy1iYWNrZHJvcC1vcGFjaXR5LCl2YXIoLS10dy1iYWNrZHJvcC1zYXR1cmF0ZSwpdmFyKC0tdHctYmFja2Ryb3Atc2VwaWEsKX0uYmFja2Ryb3AtYmx1ci1cWzEycHhcXXstLXR3LWJhY2tkcm9wLWJsdXI6Ymx1cigxMnB4KTstd2Via2l0LWJhY2tkcm9wLWZpbHRlcjp2YXIoLS10dy1iYWNrZHJvcC1ibHVyLCl2YXIoLS10dy1iYWNrZHJvcC1icmlnaHRuZXNzLCl2YXIoLS10dy1iYWNrZHJvcC1jb250cmFzdCwpdmFyKC0tdHctYmFja2Ryb3AtZ3JheXNjYWxlLCl2YXIoLS10dy1iYWNrZHJvcC1odWUtcm90YXRlLCl2YXIoLS10dy1iYWNrZHJvcC1pbnZlcnQsKXZhcigtLXR3LWJhY2tkcm9wLW9wYWNpdHksKXZhcigtLXR3LWJhY2tkcm9wLXNhdHVyYXRlLCl2YXIoLS10dy1iYWNrZHJvcC1zZXBpYSwpO2JhY2tkcm9wLWZpbHRlcjp2YXIoLS10dy1iYWNrZHJvcC1ibHVyLCl2YXIoLS10dy1iYWNrZHJvcC1icmlnaHRuZXNzLCl2YXIoLS10dy1iYWNrZHJvcC1jb250cmFzdCwpdmFyKC0tdHctYmFja2Ryb3AtZ3JheXNjYWxlLCl2YXIoLS10dy1iYWNrZHJvcC1odWUtcm90YXRlLCl2YXIoLS10dy1iYWNrZHJvcC1pbnZlcnQsKXZhcigtLXR3LWJhY2tkcm9wLW9wYWNpdHksKXZhcigtLXR3LWJhY2tkcm9wLXNhdHVyYXRlLCl2YXIoLS10dy1iYWNrZHJvcC1zZXBpYSwpfS5iYWNrZHJvcC1ibHVyLVxbMThweFxdey0tdHctYmFja2Ryb3AtYmx1cjpibHVyKDE4cHgpOy13ZWJraXQtYmFja2Ryb3AtZmlsdGVyOnZhcigtLXR3LWJhY2tkcm9wLWJsdXIsKXZhcigtLXR3LWJhY2tkcm9wLWJyaWdodG5lc3MsKXZhcigtLXR3LWJhY2tkcm9wLWNvbnRyYXN0LCl2YXIoLS10dy1iYWNrZHJvcC1ncmF5c2NhbGUsKXZhcigtLXR3LWJhY2tkcm9wLWh1ZS1yb3RhdGUsKXZhcigtLXR3LWJhY2tkcm9wLWludmVydCwpdmFyKC0tdHctYmFja2Ryb3Atb3BhY2l0eSwpdmFyKC0tdHctYmFja2Ryb3Atc2F0dXJhdGUsKXZhcigtLXR3LWJhY2tkcm9wLXNlcGlhLCk7YmFja2Ryb3AtZmlsdGVyOnZhcigtLXR3LWJhY2tkcm9wLWJsdXIsKXZhcigtLXR3LWJhY2tkcm9wLWJyaWdodG5lc3MsKXZhcigtLXR3LWJhY2tkcm9wLWNvbnRyYXN0LCl2YXIoLS10dy1iYWNrZHJvcC1ncmF5c2NhbGUsKXZhcigtLXR3LWJhY2tkcm9wLWh1ZS1yb3RhdGUsKXZhcigtLXR3LWJhY2tkcm9wLWludmVydCwpdmFyKC0tdHctYmFja2Ryb3Atb3BhY2l0eSwpdmFyKC0tdHctYmFja2Ryb3Atc2F0dXJhdGUsKXZhcigtLXR3LWJhY2tkcm9wLXNlcGlhLCl9LmJhY2tkcm9wLWJsdXItbWR7LS10dy1iYWNrZHJvcC1ibHVyOmJsdXIodmFyKC0tYmx1ci1tZCkpOy13ZWJraXQtYmFja2Ryb3AtZmlsdGVyOnZhcigtLXR3LWJhY2tkcm9wLWJsdXIsKXZhcigtLXR3LWJhY2tkcm9wLWJyaWdodG5lc3MsKXZhcigtLXR3LWJhY2tkcm9wLWNvbnRyYXN0LCl2YXIoLS10dy1iYWNrZHJvcC1ncmF5c2NhbGUsKXZhcigtLXR3LWJhY2tkcm9wLWh1ZS1yb3RhdGUsKXZhcigtLXR3LWJhY2tkcm9wLWludmVydCwpdmFyKC0tdHctYmFja2Ryb3Atb3BhY2l0eSwpdmFyKC0tdHctYmFja2Ryb3Atc2F0dXJhdGUsKXZhcigtLXR3LWJhY2tkcm9wLXNlcGlhLCk7YmFja2Ryb3AtZmlsdGVyOnZhcigtLXR3LWJhY2tkcm9wLWJsdXIsKXZhcigtLXR3LWJhY2tkcm9wLWJyaWdodG5lc3MsKXZhcigtLXR3LWJhY2tkcm9wLWNvbnRyYXN0LCl2YXIoLS10dy1iYWNrZHJvcC1ncmF5c2NhbGUsKXZhcigtLXR3LWJhY2tkcm9wLWh1ZS1yb3RhdGUsKXZhcigtLXR3LWJhY2tkcm9wLWludmVydCwpdmFyKC0tdHctYmFja2Ryb3Atb3BhY2l0eSwpdmFyKC0tdHctYmFja2Ryb3Atc2F0dXJhdGUsKXZhcigtLXR3LWJhY2tkcm9wLXNlcGlhLCl9LmJhY2tkcm9wLXNhdHVyYXRlLTE1MHstLXR3LWJhY2tkcm9wLXNhdHVyYXRlOnNhdHVyYXRlKDE1MCUpOy13ZWJraXQtYmFja2Ryb3AtZmlsdGVyOnZhcigtLXR3LWJhY2tkcm9wLWJsdXIsKXZhcigtLXR3LWJhY2tkcm9wLWJyaWdodG5lc3MsKXZhcigtLXR3LWJhY2tkcm9wLWNvbnRyYXN0LCl2YXIoLS10dy1iYWNrZHJvcC1ncmF5c2NhbGUsKXZhcigtLXR3LWJhY2tkcm9wLWh1ZS1yb3RhdGUsKXZhcigtLXR3LWJhY2tkcm9wLWludmVydCwpdmFyKC0tdHctYmFja2Ryb3Atb3BhY2l0eSwpdmFyKC0tdHctYmFja2Ryb3Atc2F0dXJhdGUsKXZhcigtLXR3LWJhY2tkcm9wLXNlcGlhLCk7YmFja2Ryb3AtZmlsdGVyOnZhcigtLXR3LWJhY2tkcm9wLWJsdXIsKXZhcigtLXR3LWJhY2tkcm9wLWJyaWdodG5lc3MsKXZhcigtLXR3LWJhY2tkcm9wLWNvbnRyYXN0LCl2YXIoLS10dy1iYWNrZHJvcC1ncmF5c2NhbGUsKXZhcigtLXR3LWJhY2tkcm9wLWh1ZS1yb3RhdGUsKXZhcigtLXR3LWJhY2tkcm9wLWludmVydCwpdmFyKC0tdHctYmFja2Ryb3Atb3BhY2l0eSwpdmFyKC0tdHctYmFja2Ryb3Atc2F0dXJhdGUsKXZhcigtLXR3LWJhY2tkcm9wLXNlcGlhLCl9LnRyYW5zaXRpb257dHJhbnNpdGlvbi1wcm9wZXJ0eTpjb2xvcixiYWNrZ3JvdW5kLWNvbG9yLGJvcmRlci1jb2xvcixvdXRsaW5lLWNvbG9yLHRleHQtZGVjb3JhdGlvbi1jb2xvcixmaWxsLHN0cm9rZSwtLXR3LWdyYWRpZW50LWZyb20sLS10dy1ncmFkaWVudC12aWEsLS10dy1ncmFkaWVudC10byxvcGFjaXR5LGJveC1zaGFkb3csdHJhbnNmb3JtLHRyYW5zbGF0ZSxzY2FsZSxyb3RhdGUsZmlsdGVyLC13ZWJraXQtYmFja2Ryb3AtZmlsdGVyLGJhY2tkcm9wLWZpbHRlcixkaXNwbGF5LGNvbnRlbnQtdmlzaWJpbGl0eSxvdmVybGF5LHBvaW50ZXItZXZlbnRzO3RyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uOnZhcigtLXR3LWVhc2UsdmFyKC0tZGVmYXVsdC10cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbikpO3RyYW5zaXRpb24tZHVyYXRpb246dmFyKC0tdHctZHVyYXRpb24sdmFyKC0tZGVmYXVsdC10cmFuc2l0aW9uLWR1cmF0aW9uKSl9LnRyYW5zaXRpb24tXFtib3JkZXItY29sb3JcLGJhY2tncm91bmRcXXt0cmFuc2l0aW9uLXByb3BlcnR5OmJvcmRlci1jb2xvcixiYWNrZ3JvdW5kO3RyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uOnZhcigtLXR3LWVhc2UsdmFyKC0tZGVmYXVsdC10cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbikpO3RyYW5zaXRpb24tZHVyYXRpb246dmFyKC0tdHctZHVyYXRpb24sdmFyKC0tZGVmYXVsdC10cmFuc2l0aW9uLWR1cmF0aW9uKSl9LnRyYW5zaXRpb24tXFt3aWR0aFwsYmFja2dyb3VuZFxde3RyYW5zaXRpb24tcHJvcGVydHk6d2lkdGgsYmFja2dyb3VuZDt0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbjp2YXIoLS10dy1lYXNlLHZhcigtLWRlZmF1bHQtdHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb24pKTt0cmFuc2l0aW9uLWR1cmF0aW9uOnZhcigtLXR3LWR1cmF0aW9uLHZhcigtLWRlZmF1bHQtdHJhbnNpdGlvbi1kdXJhdGlvbikpfS50cmFuc2l0aW9uLWNvbG9yc3t0cmFuc2l0aW9uLXByb3BlcnR5OmNvbG9yLGJhY2tncm91bmQtY29sb3IsYm9yZGVyLWNvbG9yLG91dGxpbmUtY29sb3IsdGV4dC1kZWNvcmF0aW9uLWNvbG9yLGZpbGwsc3Ryb2tlLC0tdHctZ3JhZGllbnQtZnJvbSwtLXR3LWdyYWRpZW50LXZpYSwtLXR3LWdyYWRpZW50LXRvO3RyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uOnZhcigtLXR3LWVhc2UsdmFyKC0tZGVmYXVsdC10cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbikpO3RyYW5zaXRpb24tZHVyYXRpb246dmFyKC0tdHctZHVyYXRpb24sdmFyKC0tZGVmYXVsdC10cmFuc2l0aW9uLWR1cmF0aW9uKSl9LnRyYW5zaXRpb24tb3BhY2l0eXt0cmFuc2l0aW9uLXByb3BlcnR5Om9wYWNpdHk7dHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb246dmFyKC0tdHctZWFzZSx2YXIoLS1kZWZhdWx0LXRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uKSk7dHJhbnNpdGlvbi1kdXJhdGlvbjp2YXIoLS10dy1kdXJhdGlvbix2YXIoLS1kZWZhdWx0LXRyYW5zaXRpb24tZHVyYXRpb24pKX0uZHVyYXRpb24tMTUwey0tdHctZHVyYXRpb246LjE1czt0cmFuc2l0aW9uLWR1cmF0aW9uOi4xNXN9LmR1cmF0aW9uLTIwMHstLXR3LWR1cmF0aW9uOi4yczt0cmFuc2l0aW9uLWR1cmF0aW9uOi4yc30uZHVyYXRpb24tMzAwey0tdHctZHVyYXRpb246LjNzO3RyYW5zaXRpb24tZHVyYXRpb246LjNzfS5lYXNlLW91dHstLXR3LWVhc2U6dmFyKC0tZWFzZS1vdXQpO3RyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uOnZhcigtLWVhc2Utb3V0KX0uc2VsZWN0LW5vbmV7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmV9LnNlbGVjdC10ZXh0ey13ZWJraXQtdXNlci1zZWxlY3Q6dGV4dDt1c2VyLXNlbGVjdDp0ZXh0fS5cWy13ZWJraXQtYXBwZWFyYW5jZVw6bm9uZVxdey13ZWJraXQtYXBwZWFyYW5jZTpub25lfS5cWy13ZWJraXQtYmFja2Ryb3AtZmlsdGVyXDpibHVyXCgxMnB4XClcXXstd2Via2l0LWJhY2tkcm9wLWZpbHRlcjpibHVyKDEycHgpfS5cW3Njcm9sbGJhci13aWR0aFw6dGhpblxde3Njcm9sbGJhci13aWR0aDp0aGlufS5cW3RyYW5zaXRpb25cOmJhY2tncm91bmRfMFwuMnNcLGJveC1zaGFkb3dfMFwuMnNcXXt0cmFuc2l0aW9uOmJhY2tncm91bmQgLjJzLGJveC1zaGFkb3cgLjJzfS5cW3RyYW5zaXRpb25cOmJhY2tncm91bmRfMFwuM3NcXXt0cmFuc2l0aW9uOmJhY2tncm91bmQgLjNzfS5cW3RyYW5zaXRpb25cOmJhY2tncm91bmRfMFwuMTJzXCxib3JkZXItY29sb3JfMFwuMTJzXF17dHJhbnNpdGlvbjpiYWNrZ3JvdW5kIC4xMnMsYm9yZGVyLWNvbG9yIC4xMnN9LlxbdHJhbnNpdGlvblw6YmFja2dyb3VuZF8wXC4xMnNcLGNvbG9yXzBcLjEyc1xde3RyYW5zaXRpb246YmFja2dyb3VuZCAuMTJzLGNvbG9yIC4xMnN9LlxbdHJhbnNpdGlvblw6YmFja2dyb3VuZF8wXC4xNXNfZWFzZVwsY29sb3JfMFwuMTVzX2Vhc2VcXXt0cmFuc2l0aW9uOmJhY2tncm91bmQgLjE1cyxjb2xvciAuMTVzfS5cW3RyYW5zaXRpb25cOmJvcmRlci1jb2xvcl8xMjBtc1xde3RyYW5zaXRpb246Ym9yZGVyLWNvbG9yIC4xMnN9LlxbdHJhbnNpdGlvblw6Y29sb3JfMFwuM3NcXXt0cmFuc2l0aW9uOmNvbG9yIC4zc30uXFt0cmFuc2l0aW9uXDpvcGFjaXR5XzBcLjE1c19lYXNlXCxiYWNrZ3JvdW5kXzBcLjE1c19lYXNlXF17dHJhbnNpdGlvbjpvcGFjaXR5IC4xNXMsYmFja2dyb3VuZCAuMTVzfS5cW3RyYW5zaXRpb25cOm9wYWNpdHlfMFwuMTVzX2Vhc2VcLHRyYW5zZm9ybV8wXC4xNXNfZWFzZVxde3RyYW5zaXRpb246b3BhY2l0eSAuMTVzLHRyYW5zZm9ybSAuMTVzfS5cW3RyYW5zaXRpb25cOm9wYWNpdHlfMFwuMThzX2Vhc2VcXXt0cmFuc2l0aW9uOm9wYWNpdHkgLjE4c30uXFt0cmFuc2l0aW9uXDp0cmFuc2Zvcm1fMFwuMTVzXCxjb2xvcl8wXC4xMnNcXXt0cmFuc2l0aW9uOnRyYW5zZm9ybSAuMTVzLGNvbG9yIC4xMnN9LlxbdHJhbnNpdGlvblw6dHJhbnNmb3JtXzBcLjI1c19lYXNlXCxvcGFjaXR5XzBcLjJzX2Vhc2VcXXt0cmFuc2l0aW9uOnRyYW5zZm9ybSAuMjVzLG9wYWNpdHkgLjJzfS5cW3RyYW5zaXRpb25cOndpZHRoXzEyMG1zX2xpbmVhclxde3RyYW5zaXRpb246d2lkdGggLjEycyBsaW5lYXJ9QG1lZGlhIChob3Zlcjpob3Zlcil7Lmdyb3VwLWhvdmVyXDpwb2ludGVyLWV2ZW50cy1hdXRvOmlzKDp3aGVyZSguZ3JvdXApOmhvdmVyICope3BvaW50ZXItZXZlbnRzOmF1dG99fUBtZWRpYSAoaG92ZXI6aG92ZXIpey5ncm91cC1ob3Zlclw6dHJhbnNsYXRlLXgtMDppcyg6d2hlcmUoLmdyb3VwKTpob3ZlciAqKXstLXR3LXRyYW5zbGF0ZS14OmNhbGModmFyKC0tc3BhY2luZykqMCk7dHJhbnNsYXRlOnZhcigtLXR3LXRyYW5zbGF0ZS14KXZhcigtLXR3LXRyYW5zbGF0ZS15KX19QG1lZGlhIChob3Zlcjpob3Zlcil7Lmdyb3VwLWhvdmVyXDpvcGFjaXR5LTEwMDppcyg6d2hlcmUoLmdyb3VwKTpob3ZlciAqKXtvcGFjaXR5OjF9fUBtZWRpYSAoaG92ZXI6aG92ZXIpey5ob3Zlclw6Ymctd2hpdGVcLzg6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmMTR9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuaG92ZXJcOmJnLXdoaXRlXC84OmhvdmVye2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTglLHRyYW5zcGFyZW50KX19fUBtZWRpYSAoaG92ZXI6aG92ZXIpey5ob3Zlclw6Ymctd2hpdGVcL1xbMFwuMDZcXTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiNmZmZmZmYwZn1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5ob3Zlclw6Ymctd2hpdGVcL1xbMFwuMDZcXTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk2JSx0cmFuc3BhcmVudCl9fX1AbWVkaWEgKGhvdmVyOmhvdmVyKXsuaG92ZXJcOnRleHQtd2hpdGU6aG92ZXJ7Y29sb3I6dmFyKC0tY29sb3Itd2hpdGUpfX1AbWVkaWEgKGhvdmVyOmhvdmVyKXsuaG92ZXJcOnRleHQtd2hpdGVcLzkwOmhvdmVye2NvbG9yOiNmZmZmZmZlNn1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5ob3Zlclw6dGV4dC13aGl0ZVwvOTA6aG92ZXJ7Y29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTkwJSx0cmFuc3BhcmVudCl9fX0uZGlzYWJsZWRcOm9wYWNpdHktNTA6ZGlzYWJsZWR7b3BhY2l0eTouNX19QGtleWZyYW1lcyBncmlkLXNwaW57dG97dHJhbnNmb3JtOnJvdGF0ZSgzNjBkZWcpfX1Aa2V5ZnJhbWVzIHNlcnZlLXNpbS10b2FzdC1pbmRldGVybWluYXRlezAle3RyYW5zZm9ybTp0cmFuc2xhdGUoLTEwMCUpfXRve3RyYW5zZm9ybTp0cmFuc2xhdGUoMjUwJSl9fS5zZXJ2ZS1zaW0tdG9hc3QtaW5kZXRlcm1pbmF0ZXthbmltYXRpb246c2VydmUtc2ltLXRvYXN0LWluZGV0ZXJtaW5hdGUgMS4xcyBlYXNlLWluLW91dCBpbmZpbml0ZX0uZ3JpZC1zaHV0ZG93bi1idG57b3BhY2l0eTowO3RyYW5zaXRpb246b3BhY2l0eSAuMTJzLGJhY2tncm91bmQgLjEycyxjb2xvciAuMTJzfS5ncmlkLXRpbGU6aG92ZXIgLmdyaWQtc2h1dGRvd24tYnRue29wYWNpdHk6MX0uZ3JpZC1zaHV0ZG93bi1idG46aG92ZXI6bm90KDpkaXNhYmxlZCl7Y29sb3I6I2ZmZjtiYWNrZ3JvdW5kOiM1YTFkMWQ7Ym9yZGVyLWNvbG9yOiNhMzN9LmdyaWQtdGlsZTpob3Zlcntib3JkZXItY29sb3I6IzU1NSFpbXBvcnRhbnR9QHByb3BlcnR5IC0tdHctdHJhbnNsYXRlLXh7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZTtpbml0aWFsLXZhbHVlOjB9QHByb3BlcnR5IC0tdHctdHJhbnNsYXRlLXl7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZTtpbml0aWFsLXZhbHVlOjB9QHByb3BlcnR5IC0tdHctdHJhbnNsYXRlLXp7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZTtpbml0aWFsLXZhbHVlOjB9QHByb3BlcnR5IC0tdHctcm90YXRlLXh7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1yb3RhdGUteXtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LXJvdGF0ZS16e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctc2tldy14e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctc2tldy15e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctYm9yZGVyLXN0eWxle3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2U7aW5pdGlhbC12YWx1ZTpzb2xpZH1AcHJvcGVydHkgLS10dy1sZWFkaW5ne3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctZm9udC13ZWlnaHR7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy10cmFja2luZ3tzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LXNoYWRvd3tzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlO2luaXRpYWwtdmFsdWU6MCAwICMwMDAwfUBwcm9wZXJ0eSAtLXR3LXNoYWRvdy1jb2xvcntzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LXNoYWRvdy1hbHBoYXtzeW50YXg6IjxwZXJjZW50YWdlPiI7aW5oZXJpdHM6ZmFsc2U7aW5pdGlhbC12YWx1ZToxMDAlfUBwcm9wZXJ0eSAtLXR3LWluc2V0LXNoYWRvd3tzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlO2luaXRpYWwtdmFsdWU6MCAwICMwMDAwfUBwcm9wZXJ0eSAtLXR3LWluc2V0LXNoYWRvdy1jb2xvcntzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LWluc2V0LXNoYWRvdy1hbHBoYXtzeW50YXg6IjxwZXJjZW50YWdlPiI7aW5oZXJpdHM6ZmFsc2U7aW5pdGlhbC12YWx1ZToxMDAlfUBwcm9wZXJ0eSAtLXR3LXJpbmctY29sb3J7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1yaW5nLXNoYWRvd3tzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlO2luaXRpYWwtdmFsdWU6MCAwICMwMDAwfUBwcm9wZXJ0eSAtLXR3LWluc2V0LXJpbmctY29sb3J7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1pbnNldC1yaW5nLXNoYWRvd3tzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlO2luaXRpYWwtdmFsdWU6MCAwICMwMDAwfUBwcm9wZXJ0eSAtLXR3LXJpbmctaW5zZXR7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1yaW5nLW9mZnNldC13aWR0aHtzeW50YXg6IjxsZW5ndGg+Ijtpbmhlcml0czpmYWxzZTtpbml0aWFsLXZhbHVlOjB9QHByb3BlcnR5IC0tdHctcmluZy1vZmZzZXQtY29sb3J7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZTtpbml0aWFsLXZhbHVlOiNmZmZ9QHByb3BlcnR5IC0tdHctcmluZy1vZmZzZXQtc2hhZG93e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2U7aW5pdGlhbC12YWx1ZTowIDAgIzAwMDB9QHByb3BlcnR5IC0tdHctb3V0bGluZS1zdHlsZXtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlO2luaXRpYWwtdmFsdWU6c29saWR9QHByb3BlcnR5IC0tdHctYmx1cntzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LWJyaWdodG5lc3N7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1jb250cmFzdHtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LWdyYXlzY2FsZXtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LWh1ZS1yb3RhdGV7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1pbnZlcnR7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1vcGFjaXR5e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctc2F0dXJhdGV7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1zZXBpYXtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LWRyb3Atc2hhZG93e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctZHJvcC1zaGFkb3ctY29sb3J7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1kcm9wLXNoYWRvdy1hbHBoYXtzeW50YXg6IjxwZXJjZW50YWdlPiI7aW5oZXJpdHM6ZmFsc2U7aW5pdGlhbC12YWx1ZToxMDAlfUBwcm9wZXJ0eSAtLXR3LWRyb3Atc2hhZG93LXNpemV7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1iYWNrZHJvcC1ibHVye3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctYmFja2Ryb3AtYnJpZ2h0bmVzc3tzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LWJhY2tkcm9wLWNvbnRyYXN0e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctYmFja2Ryb3AtZ3JheXNjYWxle3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctYmFja2Ryb3AtaHVlLXJvdGF0ZXtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LWJhY2tkcm9wLWludmVydHtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LWJhY2tkcm9wLW9wYWNpdHl7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1iYWNrZHJvcC1zYXR1cmF0ZXtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LWJhY2tkcm9wLXNlcGlhe3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctZHVyYXRpb257c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1lYXNle3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QGxheWVyIHByb3BlcnRpZXN7QHN1cHBvcnRzICgoLXdlYmtpdC1oeXBoZW5zOiBub25lKSBhbmQgKCBub3QgKG1hcmdpbi10cmltOiBpbmxpbmUpKSkgb3IgKCgtbW96LW9yaWVudDogaW5saW5lKSBhbmQgKCBub3QgKGNvbG9yOnJnYihmcm9tIHJlZCByIGcgYikpKSl7Kiw6YmVmb3JlLDphZnRlciw6OmJhY2tkcm9wey0tdHctdHJhbnNsYXRlLXg6MDstLXR3LXRyYW5zbGF0ZS15OjA7LS10dy10cmFuc2xhdGUtejowOy0tdHctcm90YXRlLXg6aW5pdGlhbDstLXR3LXJvdGF0ZS15OmluaXRpYWw7LS10dy1yb3RhdGUtejppbml0aWFsOy0tdHctc2tldy14OmluaXRpYWw7LS10dy1za2V3LXk6aW5pdGlhbDstLXR3LWJvcmRlci1zdHlsZTpzb2xpZDstLXR3LWxlYWRpbmc6aW5pdGlhbDstLXR3LWZvbnQtd2VpZ2h0OmluaXRpYWw7LS10dy10cmFja2luZzppbml0aWFsOy0tdHctc2hhZG93OjAgMCAjMDAwMDstLXR3LXNoYWRvdy1jb2xvcjppbml0aWFsOy0tdHctc2hhZG93LWFscGhhOjEwMCU7LS10dy1pbnNldC1zaGFkb3c6MCAwICMwMDAwOy0tdHctaW5zZXQtc2hhZG93LWNvbG9yOmluaXRpYWw7LS10dy1pbnNldC1zaGFkb3ctYWxwaGE6MTAwJTstLXR3LXJpbmctY29sb3I6aW5pdGlhbDstLXR3LXJpbmctc2hhZG93OjAgMCAjMDAwMDstLXR3LWluc2V0LXJpbmctY29sb3I6aW5pdGlhbDstLXR3LWluc2V0LXJpbmctc2hhZG93OjAgMCAjMDAwMDstLXR3LXJpbmctaW5zZXQ6aW5pdGlhbDstLXR3LXJpbmctb2Zmc2V0LXdpZHRoOjBweDstLXR3LXJpbmctb2Zmc2V0LWNvbG9yOiNmZmY7LS10dy1yaW5nLW9mZnNldC1zaGFkb3c6MCAwICMwMDAwOy0tdHctb3V0bGluZS1zdHlsZTpzb2xpZDstLXR3LWJsdXI6aW5pdGlhbDstLXR3LWJyaWdodG5lc3M6aW5pdGlhbDstLXR3LWNvbnRyYXN0OmluaXRpYWw7LS10dy1ncmF5c2NhbGU6aW5pdGlhbDstLXR3LWh1ZS1yb3RhdGU6aW5pdGlhbDstLXR3LWludmVydDppbml0aWFsOy0tdHctb3BhY2l0eTppbml0aWFsOy0tdHctc2F0dXJhdGU6aW5pdGlhbDstLXR3LXNlcGlhOmluaXRpYWw7LS10dy1kcm9wLXNoYWRvdzppbml0aWFsOy0tdHctZHJvcC1zaGFkb3ctY29sb3I6aW5pdGlhbDstLXR3LWRyb3Atc2hhZG93LWFscGhhOjEwMCU7LS10dy1kcm9wLXNoYWRvdy1zaXplOmluaXRpYWw7LS10dy1iYWNrZHJvcC1ibHVyOmluaXRpYWw7LS10dy1iYWNrZHJvcC1icmlnaHRuZXNzOmluaXRpYWw7LS10dy1iYWNrZHJvcC1jb250cmFzdDppbml0aWFsOy0tdHctYmFja2Ryb3AtZ3JheXNjYWxlOmluaXRpYWw7LS10dy1iYWNrZHJvcC1odWUtcm90YXRlOmluaXRpYWw7LS10dy1iYWNrZHJvcC1pbnZlcnQ6aW5pdGlhbDstLXR3LWJhY2tkcm9wLW9wYWNpdHk6aW5pdGlhbDstLXR3LWJhY2tkcm9wLXNhdHVyYXRlOmluaXRpYWw7LS10dy1iYWNrZHJvcC1zZXBpYTppbml0aWFsOy0tdHctZHVyYXRpb246aW5pdGlhbDstLXR3LWVhc2U6aW5pdGlhbH19fQo8L3N0eWxlPgo8L2hlYWQ+PGJvZHk+CjxkaXYgaWQ9InJvb3QiPjwvZGl2Pgo8IS0tX19TSU1fUFJFVklFV19DT05GSUdfXy0tPgo8c2NyaXB0IHR5cGU9Im1vZHVsZSI+dmFyIHAwLGwsWTUsbzgsYzEsUTUsTDUsVjUsXzIsdjAsQTAsQjUsVTIsazIsRDIsXzUsbTA9e30sUjA9W10sZDg9L2FjaXR8ZXgoPzpzfGd8bnxwfCQpfHJwaHxncmlkfG93c3xtbmN8bnR3fGluZVtjaF18em9vfF5vcmR8aXRlcmEvaSxiMD1BcnJheS5pc0FycmF5O2Z1bmN0aW9uIGwxKEMsSyl7Zm9yKHZhciAkIGluIEspQ1skXT1LWyRdO3JldHVybiBDfWZ1bmN0aW9uIHoyKEMpe0MmJkMucGFyZW50Tm9kZSYmQy5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKEMpfWZ1bmN0aW9uIFIxKEMsSywkKXt2YXIgSixOLHEsUT17fTtmb3IocSBpbiBLKXE9PSJrZXkiP0o9S1txXTpxPT0icmVmIj9OPUtbcV06UVtxXT1LW3FdO2lmKGFyZ3VtZW50cy5sZW5ndGg+MiYmKFEuY2hpbGRyZW49YXJndW1lbnRzLmxlbmd0aD4zP3AwLmNhbGwoYXJndW1lbnRzLDIpOiQpLHR5cGVvZiBDPT0iZnVuY3Rpb24iJiZDLmRlZmF1bHRQcm9wcyE9bnVsbClmb3IocSBpbiBDLmRlZmF1bHRQcm9wcylRW3FdPT09dm9pZCAwJiYoUVtxXT1DLmRlZmF1bHRQcm9wc1txXSk7cmV0dXJuIGcwKEMsUSxKLE4sbnVsbCl9ZnVuY3Rpb24gZzAoQyxLLCQsSixOKXt2YXIgcT17dHlwZTpDLHByb3BzOkssa2V5OiQscmVmOkosX19rOm51bGwsX186bnVsbCxfX2I6MCxfX2U6bnVsbCxfX2M6bnVsbCxjb25zdHJ1Y3Rvcjp2b2lkIDAsX192Ok49PW51bGw/KytZNTpOLF9faTotMSxfX3U6MH07cmV0dXJuIE49PW51bGwmJmwudm5vZGUhPW51bGwmJmwudm5vZGUocSkscX1mdW5jdGlvbiBOMShDKXtyZXR1cm4gQy5jaGlsZHJlbn1mdW5jdGlvbiBUMShDLEspe3RoaXMucHJvcHM9Qyx0aGlzLmNvbnRleHQ9S31mdW5jdGlvbiBKMChDLEspe2lmKEs9PW51bGwpcmV0dXJuIEMuX18/SjAoQy5fXyxDLl9faSsxKTpudWxsO2Zvcih2YXIgJDtLPEMuX19rLmxlbmd0aDtLKyspaWYoKCQ9Qy5fX2tbS10pIT1udWxsJiYkLl9fZSE9bnVsbClyZXR1cm4gJC5fX2U7cmV0dXJuIHR5cGVvZiBDLnR5cGU9PSJmdW5jdGlvbiI/SjAoQyk6bnVsbH1mdW5jdGlvbiBjOChDKXtpZihDLl9fUCYmQy5fX2Qpe3ZhciBLPUMuX192LCQ9Sy5fX2UsSj1bXSxOPVtdLHE9bDEoe30sSyk7cS5fX3Y9Sy5fX3YrMSxsLnZub2RlJiZsLnZub2RlKHEpLEEyKEMuX19QLHEsSyxDLl9fbixDLl9fUC5uYW1lc3BhY2VVUkksMzImSy5fX3U/WyRdOm51bGwsSiwkPT1udWxsP0owKEspOiQsISEoMzImSy5fX3UpLE4pLHEuX192PUsuX192LHEuX18uX19rW3EuX19pXT1xLEY1KEoscSxOKSxLLl9fZT1LLl9fPW51bGwscS5fX2UhPSQmJms1KHEpfX1mdW5jdGlvbiBrNShDKXtpZigoQz1DLl9fKSE9bnVsbCYmQy5fX2MhPW51bGwpcmV0dXJuIEMuX19lPUMuX19jLmJhc2U9bnVsbCxDLl9fay5zb21lKGZ1bmN0aW9uKEspe2lmKEshPW51bGwmJksuX19lIT1udWxsKXJldHVybiBDLl9fZT1DLl9fYy5iYXNlPUsuX19lfSksazUoQyl9ZnVuY3Rpb24gSDIoQyl7KCFDLl9fZCYmKEMuX19kPSEwKSYmYzEucHVzaChDKSYmIWowLl9fcisrfHxRNSE9bC5kZWJvdW5jZVJlbmRlcmluZykmJigoUTU9bC5kZWJvdW5jZVJlbmRlcmluZyl8fEw1KShqMCl9ZnVuY3Rpb24gajAoKXt0cnl7Zm9yKHZhciBDLEs9MTtjMS5sZW5ndGg7KWMxLmxlbmd0aD5LJiZjMS5zb3J0KFY1KSxDPWMxLnNoaWZ0KCksSz1jMS5sZW5ndGgsYzgoQyl9ZmluYWxseXtjMS5sZW5ndGg9ajAuX19yPTB9fWZ1bmN0aW9uIEQ1KEMsSywkLEosTixxLFEsWixZLEcsVil7dmFyIEwsayxELHosQixfLEgsTz1KJiZKLl9fa3x8UjAsRT1LLmxlbmd0aDtmb3IoWT1hOCgkLEssTyxZLEUpLEw9MDtMPEU7TCsrKShEPSQuX19rW0xdKSE9bnVsbCYmKGs9RC5fX2khPS0xJiZPW0QuX19pXXx8bTAsRC5fX2k9TCxfPUEyKEMsRCxrLE4scSxRLFosWSxHLFYpLHo9RC5fX2UsRC5yZWYmJmsucmVmIT1ELnJlZiYmKGsucmVmJiZiMihrLnJlZixudWxsLEQpLFYucHVzaChELnJlZixELl9fY3x8eixEKSksQj09bnVsbCYmeiE9bnVsbCYmKEI9eiksKEg9ISEoNCZELl9fdSkpfHxrLl9faz09PUQuX19rPyhZPUg1KEQsWSxDLEgpLEgmJmsuX19lJiYoay5fX2U9bnVsbCkpOnR5cGVvZiBELnR5cGU9PSJmdW5jdGlvbiImJl8hPT12b2lkIDA/WT1fOnomJihZPXoubmV4dFNpYmxpbmcpLEQuX191Jj0tNyk7cmV0dXJuICQuX19lPUIsWX1mdW5jdGlvbiBhOChDLEssJCxKLE4pe3ZhciBxLFEsWixZLEcsVj0kLmxlbmd0aCxMPVYsaz0wO2ZvcihDLl9faz1BcnJheShOKSxxPTA7cTxOO3ErKykoUT1LW3FdKSE9bnVsbCYmdHlwZW9mIFEhPSJib29sZWFuIiYmdHlwZW9mIFEhPSJmdW5jdGlvbiI/KHR5cGVvZiBRPT0ic3RyaW5nInx8dHlwZW9mIFE9PSJudW1iZXIifHx0eXBlb2YgUT09ImJpZ2ludCJ8fFEuY29uc3RydWN0b3I9PVN0cmluZz9RPUMuX19rW3FdPWcwKG51bGwsUSxudWxsLG51bGwsbnVsbCk6YjAoUSk/UT1DLl9fa1txXT1nMChOMSx7Y2hpbGRyZW46UX0sbnVsbCxudWxsLG51bGwpOlEuY29uc3RydWN0b3I9PT12b2lkIDAmJlEuX19iPjA/UT1DLl9fa1txXT1nMChRLnR5cGUsUS5wcm9wcyxRLmtleSxRLnJlZj9RLnJlZjpudWxsLFEuX192KTpDLl9fa1txXT1RLFk9cStrLFEuX189QyxRLl9fYj1DLl9fYisxLFo9bnVsbCwoRz1RLl9faT1pOChRLCQsWSxMKSkhPS0xJiYoTC0tLChaPSRbR10pJiYoWi5fX3V8PTIpKSxaPT1udWxsfHxaLl9fdj09bnVsbD8oRz09LTEmJihOPlY/ay0tOk48ViYmaysrKSx0eXBlb2YgUS50eXBlIT0iZnVuY3Rpb24iJiYoUS5fX3V8PTQpKTpHIT1ZJiYoRz09WS0xP2stLTpHPT1ZKzE/aysrOihHPlk/ay0tOmsrKyxRLl9fdXw9NCkpKTpDLl9fa1txXT1udWxsO2lmKEwpZm9yKHE9MDtxPFY7cSsrKShaPSRbcV0pIT1udWxsJiYoMiZaLl9fdSk9PTAmJihaLl9fZT09SiYmKEo9SjAoWikpLHo1KFosWikpO3JldHVybiBKfWZ1bmN0aW9uIEg1KEMsSywkLEope3ZhciBOLHE7aWYodHlwZW9mIEMudHlwZT09ImZ1bmN0aW9uIil7Zm9yKE49Qy5fX2sscT0wO04mJnE8Ti5sZW5ndGg7cSsrKU5bcV0mJihOW3FdLl9fPUMsSz1INShOW3FdLEssJCxKKSk7cmV0dXJuIEt9Qy5fX2UhPUsmJihKJiYoSyYmQy50eXBlJiYhSy5wYXJlbnROb2RlJiYoSz1KMChDKSksJC5pbnNlcnRCZWZvcmUoQy5fX2UsS3x8bnVsbCkpLEs9Qy5fX2UpO2RvIEs9SyYmSy5uZXh0U2libGluZzt3aGlsZShLIT1udWxsJiZLLm5vZGVUeXBlPT04KTtyZXR1cm4gS31mdW5jdGlvbiB1MShDLEspe3JldHVybiBLPUt8fFtdLEM9PW51bGx8fHR5cGVvZiBDPT0iYm9vbGVhbiJ8fChiMChDKT9DLnNvbWUoZnVuY3Rpb24oJCl7dTEoJCxLKX0pOksucHVzaChDKSksS31mdW5jdGlvbiBpOChDLEssJCxKKXt2YXIgTixxLFEsWj1DLmtleSxZPUMudHlwZSxHPUtbJF0sVj1HIT1udWxsJiYoMiZHLl9fdSk9PTA7aWYoRz09PW51bGwmJlo9PW51bGx8fFYmJlo9PUcua2V5JiZZPT1HLnR5cGUpcmV0dXJuICQ7aWYoSj4oVj8xOjApKXtmb3IoTj0kLTEscT0kKzE7Tj49MHx8cTxLLmxlbmd0aDspaWYoKEc9S1tRPU4+PTA/Ti0tOnErK10pIT1udWxsJiYoMiZHLl9fdSk9PTAmJlo9PUcua2V5JiZZPT1HLnR5cGUpcmV0dXJuIFF9cmV0dXJuLTF9ZnVuY3Rpb24gWjUoQyxLLCQpe0tbMF09PSItIj9DLnNldFByb3BlcnR5KEssJD09bnVsbD8iIjokKTpDW0tdPSQ9PW51bGw/IiI6dHlwZW9mICQhPSJudW1iZXIifHxkOC50ZXN0KEspPyQ6JCsicHgifWZ1bmN0aW9uIHgwKEMsSywkLEosTil7dmFyIHEsUTtDOmlmKEs9PSJzdHlsZSIpaWYodHlwZW9mICQ9PSJzdHJpbmciKUMuc3R5bGUuY3NzVGV4dD0kO2Vsc2V7aWYodHlwZW9mIEo9PSJzdHJpbmciJiYoQy5zdHlsZS5jc3NUZXh0PUo9IiIpLEopZm9yKEsgaW4gSikkJiZLIGluICR8fFo1KEMuc3R5bGUsSywiIik7aWYoJClmb3IoSyBpbiAkKUomJiRbS109PUpbS118fFo1KEMuc3R5bGUsSywkW0tdKX1lbHNlIGlmKEtbMF09PSJvIiYmS1sxXT09Im4iKXE9SyE9KEs9Sy5yZXBsYWNlKEI1LCIkMSIpKSxRPUsudG9Mb3dlckNhc2UoKSxLPVEgaW4gQ3x8Sz09Im9uRm9jdXNPdXQifHxLPT0ib25Gb2N1c0luIj9RLnNsaWNlKDIpOksuc2xpY2UoMiksQy5sfHwoQy5sPXt9KSxDLmxbSytxXT0kLCQ/Sj8kW0EwXT1KW0EwXTooJFtBMF09VTIsQy5hZGRFdmVudExpc3RlbmVyKEsscT9EMjprMixxKSk6Qy5yZW1vdmVFdmVudExpc3RlbmVyKEsscT9EMjprMixxKTtlbHNle2lmKE49PSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIpSz1LLnJlcGxhY2UoL3hsaW5rKEh8OmgpLywiaCIpLnJlcGxhY2UoL3NOYW1lJC8sInMiKTtlbHNlIGlmKEshPSJ3aWR0aCImJkshPSJoZWlnaHQiJiZLIT0iaHJlZiImJkshPSJsaXN0IiYmSyE9ImZvcm0iJiZLIT0idGFiSW5kZXgiJiZLIT0iZG93bmxvYWQiJiZLIT0icm93U3BhbiImJkshPSJjb2xTcGFuIiYmSyE9InJvbGUiJiZLIT0icG9wb3ZlciImJksgaW4gQyl0cnl7Q1tLXT0kPT1udWxsPyIiOiQ7YnJlYWsgQ31jYXRjaChaKXt9dHlwZW9mICQ9PSJmdW5jdGlvbiJ8fCgkPT1udWxsfHwkPT09ITEmJktbNF0hPSItIj9DLnJlbW92ZUF0dHJpYnV0ZShLKTpDLnNldEF0dHJpYnV0ZShLLEs9PSJwb3BvdmVyIiYmJD09MT8iIjokKSl9fWZ1bmN0aW9uIEc1KEMpe3JldHVybiBmdW5jdGlvbihLKXtpZih0aGlzLmwpe3ZhciAkPXRoaXMubFtLLnR5cGUrQ107aWYoS1t2MF09PW51bGwpS1t2MF09VTIrKztlbHNlIGlmKEtbdjBdPCRbQTBdKXJldHVybjtyZXR1cm4gJChsLmV2ZW50P2wuZXZlbnQoSyk6Syl9fX1mdW5jdGlvbiBBMihDLEssJCxKLE4scSxRLFosWSxHKXt2YXIgVixMLGssRCx6LEIsXyxILE8sRSx5LG8seCxnLGgsUj1LLnR5cGU7aWYoSy5jb25zdHJ1Y3RvciE9PXZvaWQgMClyZXR1cm4gbnVsbDsxMjgmJC5fX3UmJihZPSEhKDMyJiQuX191KSxxPVtaPUsuX19lPSQuX19lXSksKFY9bC5fX2IpJiZWKEspO0M6aWYodHlwZW9mIFI9PSJmdW5jdGlvbiIpdHJ5e2lmKEg9Sy5wcm9wcyxPPVIucHJvdG90eXBlJiZSLnByb3RvdHlwZS5yZW5kZXIsRT0oVj1SLmNvbnRleHRUeXBlKSYmSltWLl9fY10seT1WP0U/RS5wcm9wcy52YWx1ZTpWLl9fOkosJC5fX2M/Xz0oTD1LLl9fYz0kLl9fYykuX189TC5fX0U6KE8/Sy5fX2M9TD1uZXcgUihILHkpOihLLl9fYz1MPW5ldyBUMShILHkpLEwuY29uc3RydWN0b3I9UixMLnJlbmRlcj1uOCksRSYmRS5zdWIoTCksTC5zdGF0ZXx8KEwuc3RhdGU9e30pLEwuX19uPUosaz1MLl9fZD0hMCxMLl9faD1bXSxMLl9zYj1bXSksTyYmTC5fX3M9PW51bGwmJihMLl9fcz1MLnN0YXRlKSxPJiZSLmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyE9bnVsbCYmKEwuX19zPT1MLnN0YXRlJiYoTC5fX3M9bDEoe30sTC5fX3MpKSxsMShMLl9fcyxSLmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyhILEwuX19zKSkpLEQ9TC5wcm9wcyx6PUwuc3RhdGUsTC5fX3Y9SyxrKU8mJlIuZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzPT1udWxsJiZMLmNvbXBvbmVudFdpbGxNb3VudCE9bnVsbCYmTC5jb21wb25lbnRXaWxsTW91bnQoKSxPJiZMLmNvbXBvbmVudERpZE1vdW50IT1udWxsJiZMLl9faC5wdXNoKEwuY29tcG9uZW50RGlkTW91bnQpO2Vsc2V7aWYoTyYmUi5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHM9PW51bGwmJkghPT1EJiZMLmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMhPW51bGwmJkwuY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyhILHkpLEsuX192PT0kLl9fdnx8IUwuX19lJiZMLnNob3VsZENvbXBvbmVudFVwZGF0ZSE9bnVsbCYmTC5zaG91bGRDb21wb25lbnRVcGRhdGUoSCxMLl9fcyx5KT09PSExKXtLLl9fdiE9JC5fX3YmJihMLnByb3BzPUgsTC5zdGF0ZT1MLl9fcyxMLl9fZD0hMSksSy5fX2U9JC5fX2UsSy5fX2s9JC5fX2ssSy5fX2suc29tZShmdW5jdGlvbihhKXthJiYoYS5fXz1LKX0pLFIwLnB1c2guYXBwbHkoTC5fX2gsTC5fc2IpLEwuX3NiPVtdLEwuX19oLmxlbmd0aCYmUS5wdXNoKEwpO2JyZWFrIEN9TC5jb21wb25lbnRXaWxsVXBkYXRlIT1udWxsJiZMLmNvbXBvbmVudFdpbGxVcGRhdGUoSCxMLl9fcyx5KSxPJiZMLmNvbXBvbmVudERpZFVwZGF0ZSE9bnVsbCYmTC5fX2gucHVzaChmdW5jdGlvbigpe0wuY29tcG9uZW50RGlkVXBkYXRlKEQseixCKX0pfWlmKEwuY29udGV4dD15LEwucHJvcHM9SCxMLl9fUD1DLEwuX19lPSExLG89bC5fX3IseD0wLE8pTC5zdGF0ZT1MLl9fcyxMLl9fZD0hMSxvJiZvKEspLFY9TC5yZW5kZXIoTC5wcm9wcyxMLnN0YXRlLEwuY29udGV4dCksUjAucHVzaC5hcHBseShMLl9faCxMLl9zYiksTC5fc2I9W107ZWxzZSBkbyBMLl9fZD0hMSxvJiZvKEspLFY9TC5yZW5kZXIoTC5wcm9wcyxMLnN0YXRlLEwuY29udGV4dCksTC5zdGF0ZT1MLl9fczt3aGlsZShMLl9fZCYmKyt4PDI1KTtMLnN0YXRlPUwuX19zLEwuZ2V0Q2hpbGRDb250ZXh0IT1udWxsJiYoSj1sMShsMSh7fSxKKSxMLmdldENoaWxkQ29udGV4dCgpKSksTyYmIWsmJkwuZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUhPW51bGwmJihCPUwuZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUoRCx6KSksZz1WIT1udWxsJiZWLnR5cGU9PT1OMSYmVi5rZXk9PW51bGw/VTUoVi5wcm9wcy5jaGlsZHJlbik6VixaPUQ1KEMsYjAoZyk/ZzpbZ10sSywkLEosTixxLFEsWixZLEcpLEwuYmFzZT1LLl9fZSxLLl9fdSY9LTE2MSxMLl9faC5sZW5ndGgmJlEucHVzaChMKSxfJiYoTC5fX0U9TC5fXz1udWxsKX1jYXRjaChhKXtpZihLLl9fdj1udWxsLFl8fHEhPW51bGwpaWYoYS50aGVuKXtmb3IoSy5fX3V8PVk/MTYwOjEyODtaJiZaLm5vZGVUeXBlPT04JiZaLm5leHRTaWJsaW5nOylaPVoubmV4dFNpYmxpbmc7cVtxLmluZGV4T2YoWildPW51bGwsSy5fX2U9Wn1lbHNle2ZvcihoPXEubGVuZ3RoO2gtLTspejIocVtoXSk7RjIoSyl9ZWxzZSBLLl9fZT0kLl9fZSxLLl9faz0kLl9fayxhLnRoZW58fEYyKEspO2wuX19lKGEsSywkKX1lbHNlIHE9PW51bGwmJksuX192PT0kLl9fdj8oSy5fX2s9JC5fX2ssSy5fX2U9JC5fX2UpOlo9Sy5fX2U9cjgoJC5fX2UsSywkLEosTixxLFEsWSxHKTtyZXR1cm4oVj1sLmRpZmZlZCkmJlYoSyksMTI4JksuX191P3ZvaWQgMDpafWZ1bmN0aW9uIEYyKEMpe0MmJihDLl9fYyYmKEMuX19jLl9fZT0hMCksQy5fX2smJkMuX19rLnNvbWUoRjIpKX1mdW5jdGlvbiBGNShDLEssJCl7Zm9yKHZhciBKPTA7SjwkLmxlbmd0aDtKKyspYjIoJFtKXSwkWysrSl0sJFsrK0pdKTtsLl9fYyYmbC5fX2MoSyxDKSxDLnNvbWUoZnVuY3Rpb24oTil7dHJ5e0M9Ti5fX2gsTi5fX2g9W10sQy5zb21lKGZ1bmN0aW9uKHEpe3EuY2FsbChOKX0pfWNhdGNoKHEpe2wuX19lKHEsTi5fX3YpfX0pfWZ1bmN0aW9uIFU1KEMpe3JldHVybiB0eXBlb2YgQyE9Im9iamVjdCJ8fEM9PW51bGx8fEMuX19iPjA/QzpiMChDKT9DLm1hcChVNSk6bDEoe30sQyl9ZnVuY3Rpb24gcjgoQyxLLCQsSixOLHEsUSxaLFkpe3ZhciBHLFYsTCxrLEQseixCLF89JC5wcm9wc3x8bTAsSD1LLnByb3BzLE89Sy50eXBlO2lmKE89PSJzdmciP049Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIjpPPT0ibWF0aCI/Tj0iaHR0cDovL3d3dy53My5vcmcvMTk5OC9NYXRoL01hdGhNTCI6Tnx8KE49Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiKSxxIT1udWxsKXtmb3IoRz0wO0c8cS5sZW5ndGg7RysrKWlmKChEPXFbR10pJiYic2V0QXR0cmlidXRlImluIEQ9PSEhTyYmKE8/RC5sb2NhbE5hbWU9PU86RC5ub2RlVHlwZT09Mykpe0M9RCxxW0ddPW51bGw7YnJlYWt9fWlmKEM9PW51bGwpe2lmKE89PW51bGwpcmV0dXJuIGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKEgpO0M9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKE4sTyxILmlzJiZIKSxaJiYobC5fX20mJmwuX19tKEsscSksWj0hMSkscT1udWxsfWlmKE89PW51bGwpXz09PUh8fFomJkMuZGF0YT09SHx8KEMuZGF0YT1IKTtlbHNle2lmKHE9cSYmcDAuY2FsbChDLmNoaWxkTm9kZXMpLCFaJiZxIT1udWxsKWZvcihfPXt9LEc9MDtHPEMuYXR0cmlidXRlcy5sZW5ndGg7RysrKV9bKEQ9Qy5hdHRyaWJ1dGVzW0ddKS5uYW1lXT1ELnZhbHVlO2ZvcihHIGluIF8pRD1fW0ddLEc9PSJkYW5nZXJvdXNseVNldElubmVySFRNTCI/TD1EOkc9PSJjaGlsZHJlbiJ8fChHIGluIEgpfHxHPT0idmFsdWUiJiYoImRlZmF1bHRWYWx1ZSJpbiBIKXx8Rz09ImNoZWNrZWQiJiYoImRlZmF1bHRDaGVja2VkImluIEgpfHx4MChDLEcsbnVsbCxELE4pO2ZvcihHIGluIEgpRD1IW0ddLEc9PSJjaGlsZHJlbiI/az1EOkc9PSJkYW5nZXJvdXNseVNldElubmVySFRNTCI/Vj1EOkc9PSJ2YWx1ZSI/ej1EOkc9PSJjaGVja2VkIj9CPUQ6WiYmdHlwZW9mIEQhPSJmdW5jdGlvbiJ8fF9bR109PT1EfHx4MChDLEcsRCxfW0ddLE4pO2lmKFYpWnx8TCYmKFYuX19odG1sPT1MLl9faHRtbHx8Vi5fX2h0bWw9PUMuaW5uZXJIVE1MKXx8KEMuaW5uZXJIVE1MPVYuX19odG1sKSxLLl9faz1bXTtlbHNlIGlmKEwmJihDLmlubmVySFRNTD0iIiksRDUoSy50eXBlPT0idGVtcGxhdGUiP0MuY29udGVudDpDLGIwKGspP2s6W2tdLEssJCxKLE89PSJmb3JlaWduT2JqZWN0Ij8iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCI6TixxLFEscT9xWzBdOiQuX19rJiZKMCgkLDApLFosWSkscSE9bnVsbClmb3IoRz1xLmxlbmd0aDtHLS07KXoyKHFbR10pO1p8fChHPSJ2YWx1ZSIsTz09InByb2dyZXNzIiYmej09bnVsbD9DLnJlbW92ZUF0dHJpYnV0ZSgidmFsdWUiKTp6IT1udWxsJiYoeiE9PUNbR118fE89PSJwcm9ncmVzcyImJiF6fHxPPT0ib3B0aW9uIiYmeiE9X1tHXSkmJngwKEMsRyx6LF9bR10sTiksRz0iY2hlY2tlZCIsQiE9bnVsbCYmQiE9Q1tHXSYmeDAoQyxHLEIsX1tHXSxOKSl9cmV0dXJuIEN9ZnVuY3Rpb24gYjIoQyxLLCQpe3RyeXtpZih0eXBlb2YgQz09ImZ1bmN0aW9uIil7dmFyIEo9dHlwZW9mIEMuX191PT0iZnVuY3Rpb24iO0omJkMuX191KCksSiYmSz09bnVsbHx8KEMuX191PUMoSykpfWVsc2UgQy5jdXJyZW50PUt9Y2F0Y2goTil7bC5fX2UoTiwkKX19ZnVuY3Rpb24gejUoQyxLLCQpe3ZhciBKLE47aWYobC51bm1vdW50JiZsLnVubW91bnQoQyksKEo9Qy5yZWYpJiYoSi5jdXJyZW50JiZKLmN1cnJlbnQhPUMuX19lfHxiMihKLG51bGwsSykpLChKPUMuX19jKSE9bnVsbCl7aWYoSi5jb21wb25lbnRXaWxsVW5tb3VudCl0cnl7Si5jb21wb25lbnRXaWxsVW5tb3VudCgpfWNhdGNoKHEpe2wuX19lKHEsSyl9Si5iYXNlPUouX19QPW51bGx9aWYoSj1DLl9faylmb3IoTj0wO048Si5sZW5ndGg7TisrKUpbTl0mJno1KEpbTl0sSywkfHx0eXBlb2YgQy50eXBlIT0iZnVuY3Rpb24iKTskfHx6MihDLl9fZSksQy5fX2M9Qy5fXz1DLl9fZT12b2lkIDB9ZnVuY3Rpb24gbjgoQyxLLCQpe3JldHVybiB0aGlzLmNvbnN0cnVjdG9yKEMsJCl9ZnVuY3Rpb24gZjAoQyxLLCQpe3ZhciBKLE4scSxRO0s9PWRvY3VtZW50JiYoSz1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpLGwuX18mJmwuX18oQyxLKSxOPShKPXR5cGVvZiAkPT0iZnVuY3Rpb24iKT9udWxsOiQmJiQuX19rfHxLLl9fayxxPVtdLFE9W10sQTIoSyxDPSghSiYmJHx8SykuX19rPVIxKE4xLG51bGwsW0NdKSxOfHxtMCxtMCxLLm5hbWVzcGFjZVVSSSwhSiYmJD9bJF06Tj9udWxsOksuZmlyc3RDaGlsZD9wMC5jYWxsKEsuY2hpbGROb2Rlcyk6bnVsbCxxLCFKJiYkPyQ6Tj9OLl9fZTpLLmZpcnN0Q2hpbGQsSixRKSxGNShxLEMsUSl9ZnVuY3Rpb24gbzEoQyl7ZnVuY3Rpb24gSygkKXt2YXIgSixOO3JldHVybiB0aGlzLmdldENoaWxkQ29udGV4dHx8KEo9bmV3IFNldCwoTj17fSlbSy5fX2NdPXRoaXMsdGhpcy5nZXRDaGlsZENvbnRleHQ9ZnVuY3Rpb24oKXtyZXR1cm4gTn0sdGhpcy5jb21wb25lbnRXaWxsVW5tb3VudD1mdW5jdGlvbigpe0o9bnVsbH0sdGhpcy5zaG91bGRDb21wb25lbnRVcGRhdGU9ZnVuY3Rpb24ocSl7dGhpcy5wcm9wcy52YWx1ZSE9cS52YWx1ZSYmSi5mb3JFYWNoKGZ1bmN0aW9uKFEpe1EuX19lPSEwLEgyKFEpfSl9LHRoaXMuc3ViPWZ1bmN0aW9uKHEpe0ouYWRkKHEpO3ZhciBRPXEuY29tcG9uZW50V2lsbFVubW91bnQ7cS5jb21wb25lbnRXaWxsVW5tb3VudD1mdW5jdGlvbigpe0omJkouZGVsZXRlKHEpLFEmJlEuY2FsbChxKX19KSwkLmNoaWxkcmVufXJldHVybiBLLl9fYz0iX19jQyIrXzUrKyxLLl9fPUMsSy5Qcm92aWRlcj1LLl9fbD0oSy5Db25zdW1lcj1mdW5jdGlvbigkLEope3JldHVybiAkLmNoaWxkcmVuKEopfSkuY29udGV4dFR5cGU9SyxLfXAwPVIwLnNsaWNlLGw9e19fZTpmdW5jdGlvbihDLEssJCxKKXtmb3IodmFyIE4scSxRO0s9Sy5fXzspaWYoKE49Sy5fX2MpJiYhTi5fXyl0cnl7aWYoKHE9Ti5jb25zdHJ1Y3RvcikmJnEuZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yIT1udWxsJiYoTi5zZXRTdGF0ZShxLmdldERlcml2ZWRTdGF0ZUZyb21FcnJvcihDKSksUT1OLl9fZCksTi5jb21wb25lbnREaWRDYXRjaCE9bnVsbCYmKE4uY29tcG9uZW50RGlkQ2F0Y2goQyxKfHx7fSksUT1OLl9fZCksUSlyZXR1cm4gTi5fX0U9Tn1jYXRjaChaKXtDPVp9dGhyb3cgQ319LFk1PTAsbzg9ZnVuY3Rpb24oQyl7cmV0dXJuIEMhPW51bGwmJkMuY29uc3RydWN0b3I9PT12b2lkIDB9LFQxLnByb3RvdHlwZS5zZXRTdGF0ZT1mdW5jdGlvbihDLEspe3ZhciAkOyQ9dGhpcy5fX3MhPW51bGwmJnRoaXMuX19zIT10aGlzLnN0YXRlP3RoaXMuX19zOnRoaXMuX19zPWwxKHt9LHRoaXMuc3RhdGUpLHR5cGVvZiBDPT0iZnVuY3Rpb24iJiYoQz1DKGwxKHt9LCQpLHRoaXMucHJvcHMpKSxDJiZsMSgkLEMpLEMhPW51bGwmJnRoaXMuX192JiYoSyYmdGhpcy5fc2IucHVzaChLKSxIMih0aGlzKSl9LFQxLnByb3RvdHlwZS5mb3JjZVVwZGF0ZT1mdW5jdGlvbihDKXt0aGlzLl9fdiYmKHRoaXMuX19lPSEwLEMmJnRoaXMuX19oLnB1c2goQyksSDIodGhpcykpfSxUMS5wcm90b3R5cGUucmVuZGVyPU4xLGMxPVtdLEw1PXR5cGVvZiBQcm9taXNlPT0iZnVuY3Rpb24iP1Byb21pc2UucHJvdG90eXBlLnRoZW4uYmluZChQcm9taXNlLnJlc29sdmUoKSk6c2V0VGltZW91dCxWNT1mdW5jdGlvbihDLEspe3JldHVybiBDLl9fdi5fX2ItSy5fX3YuX19ifSxqMC5fX3I9MCxfMj1NYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDgpLHYwPSJfX2QiK18yLEEwPSJfX2EiK18yLEI1PS8oUG9pbnRlckNhcHR1cmUpJHxDYXB0dXJlJC9pLFUyPTAsazI9RzUoITEpLEQyPUc1KCEwKSxfNT0wO3ZhciBhMSxfMSxPMixBNSxPMD0wLFc1PVtdLEgxPWwsYjU9SDEuX19iLE81PUgxLl9fcixUNT1IMS5kaWZmZWQsTTU9SDEuX19jLHc1PUgxLnVubW91bnQsUDU9SDEuX187ZnVuY3Rpb24gTjAoQyxLKXtIMS5fX2gmJkgxLl9faChfMSxDLE8wfHxLKSxPMD0wO3ZhciAkPV8xLl9fSHx8KF8xLl9fSD17X186W10sX19oOltdfSk7cmV0dXJuIEM+PSQuX18ubGVuZ3RoJiYkLl9fLnB1c2goe30pLCQuX19bQ119ZnVuY3Rpb24gYihDKXtyZXR1cm4gTzA9MSxNMihFNSxDKX1mdW5jdGlvbiBNMihDLEssJCl7dmFyIEo9TjAoYTErKywyKTtpZihKLnQ9QywhSi5fX2MmJihKLl9fPVskPyQoSyk6RTUodm9pZCAwLEspLGZ1bmN0aW9uKFope3ZhciBZPUouX19OP0ouX19OWzBdOkouX19bMF0sRz1KLnQoWSxaKTtZIT09RyYmKEouX19OPVtHLEouX19bMV1dLEouX19jLnNldFN0YXRlKHt9KSl9XSxKLl9fYz1fMSwhXzEuX19mKSl7dmFyIE49ZnVuY3Rpb24oWixZLEcpe2lmKCFKLl9fYy5fX0gpcmV0dXJuITA7dmFyIFY9Si5fX2MuX19ILl9fLmZpbHRlcihmdW5jdGlvbihrKXtyZXR1cm4gay5fX2N9KTtpZihWLmV2ZXJ5KGZ1bmN0aW9uKGspe3JldHVybiFrLl9fTn0pKXJldHVybiFxfHxxLmNhbGwodGhpcyxaLFksRyk7dmFyIEw9Si5fX2MucHJvcHMhPT1aO3JldHVybiBWLnNvbWUoZnVuY3Rpb24oayl7aWYoay5fX04pe3ZhciBEPWsuX19bMF07ay5fXz1rLl9fTixrLl9fTj12b2lkIDAsRCE9PWsuX19bMF0mJihMPSEwKX19KSxxJiZxLmNhbGwodGhpcyxaLFksRyl8fEx9O18xLl9fZj0hMDt2YXJ7c2hvdWxkQ29tcG9uZW50VXBkYXRlOnEsY29tcG9uZW50V2lsbFVwZGF0ZTpRfT1fMTtfMS5jb21wb25lbnRXaWxsVXBkYXRlPWZ1bmN0aW9uKFosWSxHKXtpZih0aGlzLl9fZSl7dmFyIFY9cTtxPXZvaWQgMCxOKFosWSxHKSxxPVZ9USYmUS5jYWxsKHRoaXMsWixZLEcpfSxfMS5zaG91bGRDb21wb25lbnRVcGRhdGU9Tn1yZXR1cm4gSi5fX058fEouX199ZnVuY3Rpb24gVyhDLEspe3ZhciAkPU4wKGExKyssMyk7IUgxLl9fcyYmdzIoJC5fX0gsSykmJigkLl9fPUMsJC51PUssXzEuX19ILl9faC5wdXNoKCQpKX1mdW5jdGlvbiB1MChDLEspe3ZhciAkPU4wKGExKyssNCk7IUgxLl9fcyYmdzIoJC5fX0gsSykmJigkLl9fPUMsJC51PUssXzEuX19oLnB1c2goJCkpfWZ1bmN0aW9uIHYoQyl7cmV0dXJuIE8wPTUsTTEoZnVuY3Rpb24oKXtyZXR1cm57Y3VycmVudDpDfX0sW10pfWZ1bmN0aW9uIE0xKEMsSyl7dmFyICQ9TjAoYTErKyw3KTtyZXR1cm4gdzIoJC5fX0gsSykmJigkLl9fPUMoKSwkLl9fSD1LLCQuX19oPUMpLCQuX199ZnVuY3Rpb24gUChDLEspe3JldHVybiBPMD04LE0xKGZ1bmN0aW9uKCl7cmV0dXJuIEN9LEspfWZ1bmN0aW9uIGkxKEMpe3ZhciBLPV8xLmNvbnRleHRbQy5fX2NdLCQ9TjAoYTErKyw5KTtyZXR1cm4gJC5jPUMsSz8oJC5fXz09bnVsbCYmKCQuX189ITAsSy5zdWIoXzEpKSxLLnByb3BzLnZhbHVlKTpDLl9ffWZ1bmN0aW9uIG8wKCl7dmFyIEM9TjAoYTErKywxMSk7aWYoIUMuX18pe2Zvcih2YXIgSz1fMS5fX3Y7SyE9PW51bGwmJiFLLl9fbSYmSy5fXyE9PW51bGw7KUs9Sy5fXzt2YXIgJD1LLl9fbXx8KEsuX19tPVswLDBdKTtDLl9fPSJQIiskWzBdKyItIiskWzFdKyt9cmV0dXJuIEMuX199ZnVuY3Rpb24gczgoKXtmb3IodmFyIEM7Qz1XNS5zaGlmdCgpOyl7dmFyIEs9Qy5fX0g7aWYoQy5fX1AmJkspdHJ5e0suX19oLnNvbWUobDApLEsuX19oLnNvbWUoVDIpLEsuX19oPVtdfWNhdGNoKCQpe0suX19oPVtdLEgxLl9fZSgkLEMuX192KX19fUgxLl9fYj1mdW5jdGlvbihDKXtfMT1udWxsLGI1JiZiNShDKX0sSDEuX189ZnVuY3Rpb24oQyxLKXtDJiZLLl9fayYmSy5fX2suX19tJiYoQy5fX209Sy5fX2suX19tKSxQNSYmUDUoQyxLKX0sSDEuX19yPWZ1bmN0aW9uKEMpe081JiZPNShDKSxhMT0wO3ZhciBLPShfMT1DLl9fYykuX19IO0smJihPMj09PV8xPyhLLl9faD1bXSxfMS5fX2g9W10sSy5fXy5zb21lKGZ1bmN0aW9uKCQpeyQuX19OJiYoJC5fXz0kLl9fTiksJC51PSQuX19OPXZvaWQgMH0pKTooSy5fX2guc29tZShsMCksSy5fX2guc29tZShUMiksSy5fX2g9W10sYTE9MCkpLE8yPV8xfSxIMS5kaWZmZWQ9ZnVuY3Rpb24oQyl7VDUmJlQ1KEMpO3ZhciBLPUMuX19jO0smJksuX19IJiYoSy5fX0guX19oLmxlbmd0aCYmKFc1LnB1c2goSykhPT0xJiZBNT09PUgxLnJlcXVlc3RBbmltYXRpb25GcmFtZXx8KChBNT1IMS5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUpfHx0OCkoczgpKSxLLl9fSC5fXy5zb21lKGZ1bmN0aW9uKCQpeyQudSYmKCQuX19IPSQudSksJC51PXZvaWQgMH0pKSxPMj1fMT1udWxsfSxIMS5fX2M9ZnVuY3Rpb24oQyxLKXtLLnNvbWUoZnVuY3Rpb24oJCl7dHJ5eyQuX19oLnNvbWUobDApLCQuX19oPSQuX19oLmZpbHRlcihmdW5jdGlvbihKKXtyZXR1cm4hSi5fX3x8VDIoSil9KX1jYXRjaChKKXtLLnNvbWUoZnVuY3Rpb24oTil7Ti5fX2gmJihOLl9faD1bXSl9KSxLPVtdLEgxLl9fZShKLCQuX192KX19KSxNNSYmTTUoQyxLKX0sSDEudW5tb3VudD1mdW5jdGlvbihDKXt3NSYmdzUoQyk7dmFyIEssJD1DLl9fYzskJiYkLl9fSCYmKCQuX19ILl9fLnNvbWUoZnVuY3Rpb24oSil7dHJ5e2wwKEopfWNhdGNoKE4pe0s9Tn19KSwkLl9fSD12b2lkIDAsSyYmSDEuX19lKEssJC5fX3YpKX07dmFyIHk1PXR5cGVvZiByZXF1ZXN0QW5pbWF0aW9uRnJhbWU9PSJmdW5jdGlvbiI7ZnVuY3Rpb24gdDgoQyl7dmFyIEssJD1mdW5jdGlvbigpe2NsZWFyVGltZW91dChKKSx5NSYmY2FuY2VsQW5pbWF0aW9uRnJhbWUoSyksc2V0VGltZW91dChDKX0sSj1zZXRUaW1lb3V0KCQsMzUpO3k1JiYoSz1yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoJCkpfWZ1bmN0aW9uIGwwKEMpe3ZhciBLPV8xLCQ9Qy5fX2M7dHlwZW9mICQ9PSJmdW5jdGlvbiImJihDLl9fYz12b2lkIDAsJCgpKSxfMT1LfWZ1bmN0aW9uIFQyKEMpe3ZhciBLPV8xO0MuX19jPUMuX18oKSxfMT1LfWZ1bmN0aW9uIHcyKEMsSyl7cmV0dXJuIUN8fEMubGVuZ3RoIT09Sy5sZW5ndGh8fEsuc29tZShmdW5jdGlvbigkLEope3JldHVybiAkIT09Q1tKXX0pfWZ1bmN0aW9uIEU1KEMsSyl7cmV0dXJuIHR5cGVvZiBLPT0iZnVuY3Rpb24iP0soQyk6S31mdW5jdGlvbiBYOShDLEspe2Zvcih2YXIgJCBpbiBLKUNbJF09S1skXTtyZXR1cm4gQ31mdW5jdGlvbiBJNShDLEspe2Zvcih2YXIgJCBpbiBDKWlmKCQhPT0iX19zb3VyY2UiJiYhKCQgaW4gSykpcmV0dXJuITA7Zm9yKHZhciBKIGluIEspaWYoSiE9PSJfX3NvdXJjZSImJkNbSl0hPT1LW0pdKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIFM1KEMsSyl7dGhpcy5wcm9wcz1DLHRoaXMuY29udGV4dD1LfShTNS5wcm90b3R5cGU9bmV3IFQxKS5pc1B1cmVSZWFjdENvbXBvbmVudD0hMCxTNS5wcm90b3R5cGUuc2hvdWxkQ29tcG9uZW50VXBkYXRlPWZ1bmN0aW9uKEMsSyl7cmV0dXJuIEk1KHRoaXMucHJvcHMsQyl8fEk1KHRoaXMuc3RhdGUsSyl9O3ZhciBoNT1sLl9fYjtsLl9fYj1mdW5jdGlvbihDKXtDLnR5cGUmJkMudHlwZS5fX2YmJkMucmVmJiYoQy5wcm9wcy5yZWY9Qy5yZWYsQy5yZWY9bnVsbCksaDUmJmg1KEMpfTt2YXIgSjk9bC5fX2U7bC5fX2U9ZnVuY3Rpb24oQyxLLCQsSil7aWYoQy50aGVuKXtmb3IodmFyIE4scT1LO3E9cS5fXzspaWYoKE49cS5fX2MpJiZOLl9fYylyZXR1cm4gSy5fX2U9PW51bGwmJihLLl9fZT0kLl9fZSxLLl9faz0kLl9fayksTi5fX2MoQyxLKX1KOShDLEssJCxKKX07dmFyIHg1PWwudW5tb3VudDtmdW5jdGlvbiBwNShDLEssJCl7cmV0dXJuIEMmJihDLl9fYyYmQy5fX2MuX19IJiYoQy5fX2MuX19ILl9fLmZvckVhY2goZnVuY3Rpb24oSil7dHlwZW9mIEouX19jPT0iZnVuY3Rpb24iJiZKLl9fYygpfSksQy5fX2MuX19IPW51bGwpLChDPVg5KHt9LEMpKS5fX2MhPW51bGwmJihDLl9fYy5fX1A9PT0kJiYoQy5fX2MuX19QPUspLEMuX19jLl9fZT0hMCxDLl9fYz1udWxsKSxDLl9faz1DLl9fayYmQy5fX2subWFwKGZ1bmN0aW9uKEope3JldHVybiBwNShKLEssJCl9KSksQ31mdW5jdGlvbiBmNShDLEssJCl7cmV0dXJuIEMmJiQmJihDLl9fdj1udWxsLEMuX19rPUMuX19rJiZDLl9fay5tYXAoZnVuY3Rpb24oSil7cmV0dXJuIGY1KEosSywkKX0pLEMuX19jJiZDLl9fYy5fX1A9PT1LJiYoQy5fX2UmJiQuYXBwZW5kQ2hpbGQoQy5fX2UpLEMuX19jLl9fZT0hMCxDLl9fYy5fX1A9JCkpLEN9ZnVuY3Rpb24gUDIoKXt0aGlzLl9fdT0wLHRoaXMubz1udWxsLHRoaXMuX19iPW51bGx9ZnVuY3Rpb24gbDUoQyl7dmFyIEs9Qy5fXyYmQy5fXy5fX2M7cmV0dXJuIEsmJksuX19hJiZLLl9fYShDKX1mdW5jdGlvbiBkMCgpe3RoaXMuaT1udWxsLHRoaXMubD1udWxsfWwudW5tb3VudD1mdW5jdGlvbihDKXt2YXIgSz1DLl9fYztLJiYoSy5fX3o9ITApLEsmJksuX19SJiZLLl9fUigpLEsmJjMyJkMuX191JiYoQy50eXBlPW51bGwpLHg1JiZ4NShDKX0sKFAyLnByb3RvdHlwZT1uZXcgVDEpLl9fYz1mdW5jdGlvbihDLEspe3ZhciAkPUsuX19jLEo9dGhpcztKLm89PW51bGwmJihKLm89W10pLEouby5wdXNoKCQpO3ZhciBOPWw1KEouX192KSxxPSExLFE9ZnVuY3Rpb24oKXtxfHxKLl9fenx8KHE9ITAsJC5fX1I9bnVsbCxOP04oWSk6WSgpKX07JC5fX1I9UTt2YXIgWj0kLl9fUDskLl9fUD1udWxsO3ZhciBZPWZ1bmN0aW9uKCl7aWYoIS0tSi5fX3Upe2lmKEouc3RhdGUuX19hKXt2YXIgRz1KLnN0YXRlLl9fYTtKLl9fdi5fX2tbMF09ZjUoRyxHLl9fYy5fX1AsRy5fX2MuX19PKX12YXIgVjtmb3IoSi5zZXRTdGF0ZSh7X19hOkouX19iPW51bGx9KTtWPUouby5wb3AoKTspVi5fX1A9WixWLmZvcmNlVXBkYXRlKCl9fTtKLl9fdSsrfHwzMiZLLl9fdXx8Si5zZXRTdGF0ZSh7X19hOkouX19iPUouX192Ll9fa1swXX0pLEMudGhlbihRLFEpfSxQMi5wcm90b3R5cGUuY29tcG9uZW50V2lsbFVubW91bnQ9ZnVuY3Rpb24oKXt0aGlzLm89W119LFAyLnByb3RvdHlwZS5yZW5kZXI9ZnVuY3Rpb24oQyxLKXtpZih0aGlzLl9fYil7aWYodGhpcy5fX3YuX19rKXt2YXIgJD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSxKPXRoaXMuX192Ll9fa1swXS5fX2M7dGhpcy5fX3YuX19rWzBdPXA1KHRoaXMuX19iLCQsSi5fX089Si5fX1ApfXRoaXMuX19iPW51bGx9dmFyIE49Sy5fX2EmJlIxKE4xLG51bGwsQy5mYWxsYmFjayk7cmV0dXJuIE4mJihOLl9fdSY9LTMzKSxbUjEoTjEsbnVsbCxLLl9fYT9udWxsOkMuY2hpbGRyZW4pLE5dfTt2YXIgdjU9ZnVuY3Rpb24oQyxLLCQpe2lmKCsrJFsxXT09PSRbMF0mJkMubC5kZWxldGUoSyksQy5wcm9wcy5yZXZlYWxPcmRlciYmKEMucHJvcHMucmV2ZWFsT3JkZXJbMF0hPT0idCJ8fCFDLmwuc2l6ZSkpZm9yKCQ9Qy5pOyQ7KXtmb3IoOyQubGVuZ3RoPjM7KSQucG9wKCkoKTtpZigkWzFdPCRbMF0pYnJlYWs7Qy5pPSQ9JFsyXX19OyhkMC5wcm90b3R5cGU9bmV3IFQxKS5fX2E9ZnVuY3Rpb24oQyl7dmFyIEs9dGhpcywkPWw1KEsuX192KSxKPUsubC5nZXQoQyk7cmV0dXJuIEpbMF0rKyxmdW5jdGlvbihOKXt2YXIgcT1mdW5jdGlvbigpe0sucHJvcHMucmV2ZWFsT3JkZXI/KEoucHVzaChOKSx2NShLLEMsSikpOk4oKX07JD8kKHEpOnEoKX19LGQwLnByb3RvdHlwZS5yZW5kZXI9ZnVuY3Rpb24oQyl7dGhpcy5pPW51bGwsdGhpcy5sPW5ldyBNYXA7dmFyIEs9dTEoQy5jaGlsZHJlbik7Qy5yZXZlYWxPcmRlciYmQy5yZXZlYWxPcmRlclswXT09PSJiIiYmSy5yZXZlcnNlKCk7Zm9yKHZhciAkPUsubGVuZ3RoOyQtLTspdGhpcy5sLnNldChLWyRdLHRoaXMuaT1bMSwwLHRoaXMuaV0pO3JldHVybiBDLmNoaWxkcmVufSxkMC5wcm90b3R5cGUuY29tcG9uZW50RGlkVXBkYXRlPWQwLnByb3RvdHlwZS5jb21wb25lbnREaWRNb3VudD1mdW5jdGlvbigpe3ZhciBDPXRoaXM7dGhpcy5sLmZvckVhY2goZnVuY3Rpb24oSywkKXt2NShDLCQsSyl9KX07dmFyIE45PXR5cGVvZiBTeW1ib2w8InUiJiZTeW1ib2wuZm9yJiZTeW1ib2wuZm9yKCJyZWFjdC5lbGVtZW50Iil8fDYwMTAzLHE5PS9eKD86YWNjZW50fGFsaWdubWVudHxhcmFiaWN8YmFzZWxpbmV8Y2FwfGNsaXAoPyFQYXRoVSl8Y29sb3J8ZG9taW5hbnR8ZmlsbHxmbG9vZHxmb250fGdseXBoKD8hUil8aG9yaXp8aW1hZ2UoIVMpfGxldHRlcnxsaWdodGluZ3xtYXJrZXIoPyFIfFd8VSl8b3ZlcmxpbmV8cGFpbnR8cG9pbnRlcnxzaGFwZXxzdG9wfHN0cmlrZXRocm91Z2h8c3Ryb2tlfHRleHQoPyFMKXx0cmFuc2Zvcm18dW5kZXJsaW5lfHVuaWNvZGV8dW5pdHN8dnx2ZWN0b3J8dmVydHx3b3JkfHdyaXRpbmd8eCg/IUMpKVtBLVpdLyxROT0vXm9uKEFuaXxUcmF8VG91fEJlZm9yZUlucHxDb21wbykvLFo5PS9bQS1aMC05XS9nLEc5PXR5cGVvZiBkb2N1bWVudDwidSIsWTk9ZnVuY3Rpb24oQyl7cmV0dXJuKHR5cGVvZiBTeW1ib2w8InUiJiZ0eXBlb2YgU3ltYm9sKCk9PSJzeW1ib2wiPy9maWx8Y2hlfHJhZC86L2ZpbHxjaGV8cmEvKS50ZXN0KEMpfTtmdW5jdGlvbiB1NShDLEssJCl7cmV0dXJuIEsuX19rPT1udWxsJiYoSy50ZXh0Q29udGVudD0iIiksZjAoQyxLKSx0eXBlb2YgJD09ImZ1bmN0aW9uIiYmJCgpLEM/Qy5fX2M6bnVsbH1UMS5wcm90b3R5cGUuaXNSZWFjdENvbXBvbmVudD0hMCxbImNvbXBvbmVudFdpbGxNb3VudCIsImNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMiLCJjb21wb25lbnRXaWxsVXBkYXRlIl0uZm9yRWFjaChmdW5jdGlvbihDKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoVDEucHJvdG90eXBlLEMse2NvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc1siVU5TQUZFXyIrQ119LHNldDpmdW5jdGlvbihLKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyxDLHtjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6S30pfX0pfSk7dmFyIGc1PWwuZXZlbnQ7bC5ldmVudD1mdW5jdGlvbihDKXtyZXR1cm4gZzUmJihDPWc1KEMpKSxDLnBlcnNpc3Q9ZnVuY3Rpb24oKXt9LEMuaXNQcm9wYWdhdGlvblN0b3BwZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jYW5jZWxCdWJibGV9LEMuaXNEZWZhdWx0UHJldmVudGVkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGVmYXVsdFByZXZlbnRlZH0sQy5uYXRpdmVFdmVudD1DfTt2YXIgbzUsTDk9e2NvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbGFzc319LG01PWwudm5vZGU7bC52bm9kZT1mdW5jdGlvbihDKXt0eXBlb2YgQy50eXBlPT0ic3RyaW5nIiYmZnVuY3Rpb24oSyl7dmFye3Byb3BzOiQsdHlwZTpKfT1LLE49e30scT1KLmluZGV4T2YoIi0iKT09LTE7Zm9yKHZhciBRIGluICQpe3ZhciBaPSRbUV07aWYoIShRPT09InZhbHVlIiYmKCJkZWZhdWx0VmFsdWUiaW4gJCkmJlo9PW51bGx8fEc5JiZRPT09ImNoaWxkcmVuIiYmSj09PSJub3NjcmlwdCJ8fFE9PT0iY2xhc3MifHxRPT09ImNsYXNzTmFtZSIpKXt2YXIgWT1RLnRvTG93ZXJDYXNlKCk7UT09PSJkZWZhdWx0VmFsdWUiJiYidmFsdWUiaW4gJCYmJC52YWx1ZT09bnVsbD9RPSJ2YWx1ZSI6UT09PSJkb3dubG9hZCImJlo9PT0hMD9aPSIiOlk9PT0idHJhbnNsYXRlIiYmWj09PSJubyI/Wj0hMTpZWzBdPT09Im8iJiZZWzFdPT09Im4iP1k9PT0ib25kb3VibGVjbGljayI/UT0ib25kYmxjbGljayI6WSE9PSJvbmNoYW5nZSJ8fEohPT0iaW5wdXQiJiZKIT09InRleHRhcmVhInx8WTkoJC50eXBlKT9ZPT09Im9uZm9jdXMiP1E9Im9uZm9jdXNpbiI6WT09PSJvbmJsdXIiP1E9Im9uZm9jdXNvdXQiOlE5LnRlc3QoUSkmJihRPVkpOlk9UT0ib25pbnB1dCI6cSYmcTkudGVzdChRKT9RPVEucmVwbGFjZShaOSwiLSQmIikudG9Mb3dlckNhc2UoKTpaPT09bnVsbCYmKFo9dm9pZCAwKSxZPT09Im9uaW5wdXQiJiZOW1E9WV0mJihRPSJvbmlucHV0Q2FwdHVyZSIpLE5bUV09Wn19Sj09InNlbGVjdCImJihOLm11bHRpcGxlJiZBcnJheS5pc0FycmF5KE4udmFsdWUpJiYoTi52YWx1ZT11MSgkLmNoaWxkcmVuKS5mb3JFYWNoKGZ1bmN0aW9uKEcpe0cucHJvcHMuc2VsZWN0ZWQ9Ti52YWx1ZS5pbmRleE9mKEcucHJvcHMudmFsdWUpIT0tMX0pKSxOLmRlZmF1bHRWYWx1ZSE9bnVsbCYmKE4udmFsdWU9dTEoJC5jaGlsZHJlbikuZm9yRWFjaChmdW5jdGlvbihHKXtHLnByb3BzLnNlbGVjdGVkPU4ubXVsdGlwbGU/Ti5kZWZhdWx0VmFsdWUuaW5kZXhPZihHLnByb3BzLnZhbHVlKSE9LTE6Ti5kZWZhdWx0VmFsdWU9PUcucHJvcHMudmFsdWV9KSkpLCQuY2xhc3MmJiEkLmNsYXNzTmFtZT8oTi5jbGFzcz0kLmNsYXNzLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShOLCJjbGFzc05hbWUiLEw5KSk6JC5jbGFzc05hbWUmJihOLmNsYXNzPU4uY2xhc3NOYW1lPSQuY2xhc3NOYW1lKSxLLnByb3BzPU59KEMpLEMuJCR0eXBlb2Y9TjksbTUmJm01KEMpfTt2YXIgUjU9bC5fX3I7bC5fX3I9ZnVuY3Rpb24oQyl7UjUmJlI1KEMpLG81PUMuX19jfTt2YXIgajU9bC5kaWZmZWQ7bC5kaWZmZWQ9ZnVuY3Rpb24oQyl7ajUmJmo1KEMpO3Zhcntwcm9wczpLLF9fZTokfT1DOyQhPW51bGwmJkMudHlwZT09PSJ0ZXh0YXJlYSImJiJ2YWx1ZSJpbiBLJiZLLnZhbHVlIT09JC52YWx1ZSYmKCQudmFsdWU9Sy52YWx1ZT09bnVsbD8iIjpLLnZhbHVlKSxvNT1udWxsfTtmdW5jdGlvbiBkNShDKXtyZXR1cm4hIUMuX19rJiYoZjAobnVsbCxDKSwhMCl9ZnVuY3Rpb24gYzUoQyl7cmV0dXJue3JlbmRlcjpmdW5jdGlvbihLKXt1NShLLEMpfSx1bm1vdW50OmZ1bmN0aW9uKCl7ZDUoQyl9fX1mdW5jdGlvbiBLMyhDLEspe2Zvcih2YXIgJCBpbiBLKUNbJF09S1skXTtyZXR1cm4gQ31mdW5jdGlvbiBFMihDLEspe2Zvcih2YXIgJCBpbiBDKWlmKCQhPT0iX19zb3VyY2UiJiYhKCQgaW4gSykpcmV0dXJuITA7Zm9yKHZhciBKIGluIEspaWYoSiE9PSJfX3NvdXJjZSImJkNbSl0hPT1LW0pdKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIGE1KEMsSyl7dGhpcy5wcm9wcz1DLHRoaXMuY29udGV4dD1LfWZ1bmN0aW9uIHEwKEMsSyl7ZnVuY3Rpb24gJChOKXt2YXIgcT10aGlzLnByb3BzLnJlZjtyZXR1cm4gcSE9Ti5yZWYmJnEmJih0eXBlb2YgcT09ImZ1bmN0aW9uIj9xKG51bGwpOnEuY3VycmVudD1udWxsKSxLPyFLKHRoaXMucHJvcHMsTil8fHEhPU4ucmVmOkUyKHRoaXMucHJvcHMsTil9ZnVuY3Rpb24gSihOKXtyZXR1cm4gdGhpcy5zaG91bGRDb21wb25lbnRVcGRhdGU9JCxSMShDLE4pfXJldHVybiBKLmRpc3BsYXlOYW1lPSJNZW1vKCIrKEMuZGlzcGxheU5hbWV8fEMubmFtZSkrIikiLEouX19mPUoucHJvdG90eXBlLmlzUmVhY3RDb21wb25lbnQ9ITAsSi50eXBlPUMsSn0oYTUucHJvdG90eXBlPW5ldyBUMSkuaXNQdXJlUmVhY3RDb21wb25lbnQ9ITAsYTUucHJvdG90eXBlLnNob3VsZENvbXBvbmVudFVwZGF0ZT1mdW5jdGlvbihDLEspe3JldHVybiBFMih0aGlzLnByb3BzLEMpfHxFMih0aGlzLnN0YXRlLEspfTt2YXIgaTU9bC5fX2I7bC5fX2I9ZnVuY3Rpb24oQyl7Qy50eXBlJiZDLnR5cGUuX19mJiZDLnJlZiYmKEMucHJvcHMucmVmPUMucmVmLEMucmVmPW51bGwpLGk1JiZpNShDKX07dmFyIFY5PXR5cGVvZiBTeW1ib2w8InUiJiZTeW1ib2wuZm9yJiZTeW1ib2wuZm9yKCJyZWFjdC5mb3J3YXJkX3JlZiIpfHwzOTExO2Z1bmN0aW9uIHIxKEMpe2Z1bmN0aW9uIEsoJCl7dmFyIEo9SzMoe30sJCk7cmV0dXJuIGRlbGV0ZSBKLnJlZixDKEosJC5yZWZ8fG51bGwpfXJldHVybiBLLiQkdHlwZW9mPVY5LEsucmVuZGVyPUMsSy5wcm90b3R5cGUuaXNSZWFjdENvbXBvbmVudD1LLl9fZj0hMCxLLmRpc3BsYXlOYW1lPSJGb3J3YXJkUmVmKCIrKEMuZGlzcGxheU5hbWV8fEMubmFtZSkrIikiLEt9dmFyIEI5PWwuX19lO2wuX19lPWZ1bmN0aW9uKEMsSywkLEope2lmKEMudGhlbil7Zm9yKHZhciBOLHE9SztxPXEuX187KWlmKChOPXEuX19jKSYmTi5fX2MpcmV0dXJuIEsuX19lPT1udWxsJiYoSy5fX2U9JC5fX2UsSy5fX2s9JC5fX2spLE4uX19jKEMsSyl9QjkoQyxLLCQsSil9O3ZhciByNT1sLnVubW91bnQ7ZnVuY3Rpb24gJDMoQyxLLCQpe3JldHVybiBDJiYoQy5fX2MmJkMuX19jLl9fSCYmKEMuX19jLl9fSC5fXy5mb3JFYWNoKGZ1bmN0aW9uKEope3R5cGVvZiBKLl9fYz09ImZ1bmN0aW9uIiYmSi5fX2MoKX0pLEMuX19jLl9fSD1udWxsKSwoQz1LMyh7fSxDKSkuX19jIT1udWxsJiYoQy5fX2MuX19QPT09JCYmKEMuX19jLl9fUD1LKSxDLl9fYy5fX2U9ITAsQy5fX2M9bnVsbCksQy5fX2s9Qy5fX2smJkMuX19rLm1hcChmdW5jdGlvbihKKXtyZXR1cm4gJDMoSixLLCQpfSkpLEN9ZnVuY3Rpb24gWDMoQyxLLCQpe3JldHVybiBDJiYkJiYoQy5fX3Y9bnVsbCxDLl9faz1DLl9fayYmQy5fX2subWFwKGZ1bmN0aW9uKEope3JldHVybiBYMyhKLEssJCl9KSxDLl9fYyYmQy5fX2MuX19QPT09SyYmKEMuX19lJiYkLmFwcGVuZENoaWxkKEMuX19lKSxDLl9fYy5fX2U9ITAsQy5fX2MuX19QPSQpKSxDfWZ1bmN0aW9uIFcyKCl7dGhpcy5fX3U9MCx0aGlzLm89bnVsbCx0aGlzLl9fYj1udWxsfWZ1bmN0aW9uIEozKEMpe3ZhciBLPUMuX18mJkMuX18uX19jO3JldHVybiBLJiZLLl9fYSYmSy5fX2EoQyl9ZnVuY3Rpb24gYzAoKXt0aGlzLmk9bnVsbCx0aGlzLmw9bnVsbH1sLnVubW91bnQ9ZnVuY3Rpb24oQyl7dmFyIEs9Qy5fX2M7SyYmKEsuX196PSEwKSxLJiZLLl9fUiYmSy5fX1IoKSxLJiYzMiZDLl9fdSYmKEMudHlwZT1udWxsKSxyNSYmcjUoQyl9LChXMi5wcm90b3R5cGU9bmV3IFQxKS5fX2M9ZnVuY3Rpb24oQyxLKXt2YXIgJD1LLl9fYyxKPXRoaXM7Si5vPT1udWxsJiYoSi5vPVtdKSxKLm8ucHVzaCgkKTt2YXIgTj1KMyhKLl9fdikscT0hMSxRPWZ1bmN0aW9uKCl7cXx8Si5fX3p8fChxPSEwLCQuX19SPW51bGwsTj9OKFkpOlkoKSl9OyQuX19SPVE7dmFyIFo9JC5fX1A7JC5fX1A9bnVsbDt2YXIgWT1mdW5jdGlvbigpe2lmKCEtLUouX191KXtpZihKLnN0YXRlLl9fYSl7dmFyIEc9Si5zdGF0ZS5fX2E7Si5fX3YuX19rWzBdPVgzKEcsRy5fX2MuX19QLEcuX19jLl9fTyl9dmFyIFY7Zm9yKEouc2V0U3RhdGUoe19fYTpKLl9fYj1udWxsfSk7Vj1KLm8ucG9wKCk7KVYuX19QPVosVi5mb3JjZVVwZGF0ZSgpfX07Si5fX3UrK3x8MzImSy5fX3V8fEouc2V0U3RhdGUoe19fYTpKLl9fYj1KLl9fdi5fX2tbMF19KSxDLnRoZW4oUSxRKX0sVzIucHJvdG90eXBlLmNvbXBvbmVudFdpbGxVbm1vdW50PWZ1bmN0aW9uKCl7dGhpcy5vPVtdfSxXMi5wcm90b3R5cGUucmVuZGVyPWZ1bmN0aW9uKEMsSyl7aWYodGhpcy5fX2Ipe2lmKHRoaXMuX192Ll9fayl7dmFyICQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksSj10aGlzLl9fdi5fX2tbMF0uX19jO3RoaXMuX192Ll9fa1swXT0kMyh0aGlzLl9fYiwkLEouX19PPUouX19QKX10aGlzLl9fYj1udWxsfXZhciBOPUsuX19hJiZSMShOMSxudWxsLEMuZmFsbGJhY2spO3JldHVybiBOJiYoTi5fX3UmPS0zMyksW1IxKE4xLG51bGwsSy5fX2E/bnVsbDpDLmNoaWxkcmVuKSxOXX07dmFyIG41PWZ1bmN0aW9uKEMsSywkKXtpZigrKyRbMV09PT0kWzBdJiZDLmwuZGVsZXRlKEspLEMucHJvcHMucmV2ZWFsT3JkZXImJihDLnByb3BzLnJldmVhbE9yZGVyWzBdIT09InQifHwhQy5sLnNpemUpKWZvcigkPUMuaTskOyl7Zm9yKDskLmxlbmd0aD4zOykkLnBvcCgpKCk7aWYoJFsxXTwkWzBdKWJyZWFrO0MuaT0kPSRbMl19fTsoYzAucHJvdG90eXBlPW5ldyBUMSkuX19hPWZ1bmN0aW9uKEMpe3ZhciBLPXRoaXMsJD1KMyhLLl9fdiksSj1LLmwuZ2V0KEMpO3JldHVybiBKWzBdKyssZnVuY3Rpb24oTil7dmFyIHE9ZnVuY3Rpb24oKXtLLnByb3BzLnJldmVhbE9yZGVyPyhKLnB1c2goTiksbjUoSyxDLEopKTpOKCl9OyQ/JChxKTpxKCl9fSxjMC5wcm90b3R5cGUucmVuZGVyPWZ1bmN0aW9uKEMpe3RoaXMuaT1udWxsLHRoaXMubD1uZXcgTWFwO3ZhciBLPXUxKEMuY2hpbGRyZW4pO0MucmV2ZWFsT3JkZXImJkMucmV2ZWFsT3JkZXJbMF09PT0iYiImJksucmV2ZXJzZSgpO2Zvcih2YXIgJD1LLmxlbmd0aDskLS07KXRoaXMubC5zZXQoS1skXSx0aGlzLmk9WzEsMCx0aGlzLmldKTtyZXR1cm4gQy5jaGlsZHJlbn0sYzAucHJvdG90eXBlLmNvbXBvbmVudERpZFVwZGF0ZT1jMC5wcm90b3R5cGUuY29tcG9uZW50RGlkTW91bnQ9ZnVuY3Rpb24oKXt2YXIgQz10aGlzO3RoaXMubC5mb3JFYWNoKGZ1bmN0aW9uKEssJCl7bjUoQywkLEspfSl9O3ZhciBfOT10eXBlb2YgU3ltYm9sPCJ1IiYmU3ltYm9sLmZvciYmU3ltYm9sLmZvcigicmVhY3QuZWxlbWVudCIpfHw2MDEwMyxrOT0vXig/OmFjY2VudHxhbGlnbm1lbnR8YXJhYmljfGJhc2VsaW5lfGNhcHxjbGlwKD8hUGF0aFUpfGNvbG9yfGRvbWluYW50fGZpbGx8Zmxvb2R8Zm9udHxnbHlwaCg/IVIpfGhvcml6fGltYWdlKCFTKXxsZXR0ZXJ8bGlnaHRpbmd8bWFya2VyKD8hSHxXfFUpfG92ZXJsaW5lfHBhaW50fHBvaW50ZXJ8c2hhcGV8c3RvcHxzdHJpa2V0aHJvdWdofHN0cm9rZXx0ZXh0KD8hTCl8dHJhbnNmb3JtfHVuZGVybGluZXx1bmljb2RlfHVuaXRzfHZ8dmVjdG9yfHZlcnR8d29yZHx3cml0aW5nfHgoPyFDKSlbQS1aXS8sRDk9L15vbihBbml8VHJhfFRvdXxCZWZvcmVJbnB8Q29tcG8pLyxIOT0vW0EtWjAtOV0vZyxGOT10eXBlb2YgZG9jdW1lbnQ8InUiLFU5PWZ1bmN0aW9uKEMpe3JldHVybih0eXBlb2YgU3ltYm9sPCJ1IiYmdHlwZW9mIFN5bWJvbCgpPT0ic3ltYm9sIj8vZmlsfGNoZXxyYWQvOi9maWx8Y2hlfHJhLykudGVzdChDKX07VDEucHJvdG90eXBlLmlzUmVhY3RDb21wb25lbnQ9ITAsWyJjb21wb25lbnRXaWxsTW91bnQiLCJjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzIiwiY29tcG9uZW50V2lsbFVwZGF0ZSJdLmZvckVhY2goZnVuY3Rpb24oQyl7T2JqZWN0LmRlZmluZVByb3BlcnR5KFQxLnByb3RvdHlwZSxDLHtjb25maWd1cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXNbIlVOU0FGRV8iK0NdfSxzZXQ6ZnVuY3Rpb24oSyl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsQyx7Y29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOkt9KX19KX0pO3ZhciBzNT1sLmV2ZW50O2wuZXZlbnQ9ZnVuY3Rpb24oQyl7cmV0dXJuIHM1JiYoQz1zNShDKSksQy5wZXJzaXN0PWZ1bmN0aW9uKCl7fSxDLmlzUHJvcGFnYXRpb25TdG9wcGVkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2FuY2VsQnViYmxlfSxDLmlzRGVmYXVsdFByZXZlbnRlZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmRlZmF1bHRQcmV2ZW50ZWR9LEMubmF0aXZlRXZlbnQ9Q307dmFyIE4zLHo5PXtjb25maWd1cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xhc3N9fSx0NT1sLnZub2RlO2wudm5vZGU9ZnVuY3Rpb24oQyl7dHlwZW9mIEMudHlwZT09InN0cmluZyImJmZ1bmN0aW9uKEspe3Zhcntwcm9wczokLHR5cGU6Sn09SyxOPXt9LHE9Si5pbmRleE9mKCItIik9PS0xO2Zvcih2YXIgUSBpbiAkKXt2YXIgWj0kW1FdO2lmKCEoUT09PSJ2YWx1ZSImJigiZGVmYXVsdFZhbHVlImluICQpJiZaPT1udWxsfHxGOSYmUT09PSJjaGlsZHJlbiImJko9PT0ibm9zY3JpcHQifHxRPT09ImNsYXNzInx8UT09PSJjbGFzc05hbWUiKSl7dmFyIFk9US50b0xvd2VyQ2FzZSgpO1E9PT0iZGVmYXVsdFZhbHVlIiYmInZhbHVlImluICQmJiQudmFsdWU9PW51bGw/UT0idmFsdWUiOlE9PT0iZG93bmxvYWQiJiZaPT09ITA/Wj0iIjpZPT09InRyYW5zbGF0ZSImJlo9PT0ibm8iP1o9ITE6WVswXT09PSJvIiYmWVsxXT09PSJuIj9ZPT09Im9uZG91YmxlY2xpY2siP1E9Im9uZGJsY2xpY2siOlkhPT0ib25jaGFuZ2UifHxKIT09ImlucHV0IiYmSiE9PSJ0ZXh0YXJlYSJ8fFU5KCQudHlwZSk/WT09PSJvbmZvY3VzIj9RPSJvbmZvY3VzaW4iOlk9PT0ib25ibHVyIj9RPSJvbmZvY3Vzb3V0IjpEOS50ZXN0KFEpJiYoUT1ZKTpZPVE9Im9uaW5wdXQiOnEmJms5LnRlc3QoUSk/UT1RLnJlcGxhY2UoSDksIi0kJiIpLnRvTG93ZXJDYXNlKCk6Wj09PW51bGwmJihaPXZvaWQgMCksWT09PSJvbmlucHV0IiYmTltRPVldJiYoUT0ib25pbnB1dENhcHR1cmUiKSxOW1FdPVp9fUo9PSJzZWxlY3QiJiYoTi5tdWx0aXBsZSYmQXJyYXkuaXNBcnJheShOLnZhbHVlKSYmKE4udmFsdWU9dTEoJC5jaGlsZHJlbikuZm9yRWFjaChmdW5jdGlvbihHKXtHLnByb3BzLnNlbGVjdGVkPU4udmFsdWUuaW5kZXhPZihHLnByb3BzLnZhbHVlKSE9LTF9KSksTi5kZWZhdWx0VmFsdWUhPW51bGwmJihOLnZhbHVlPXUxKCQuY2hpbGRyZW4pLmZvckVhY2goZnVuY3Rpb24oRyl7Ry5wcm9wcy5zZWxlY3RlZD1OLm11bHRpcGxlP04uZGVmYXVsdFZhbHVlLmluZGV4T2YoRy5wcm9wcy52YWx1ZSkhPS0xOk4uZGVmYXVsdFZhbHVlPT1HLnByb3BzLnZhbHVlfSkpKSwkLmNsYXNzJiYhJC5jbGFzc05hbWU/KE4uY2xhc3M9JC5jbGFzcyxPYmplY3QuZGVmaW5lUHJvcGVydHkoTiwiY2xhc3NOYW1lIix6OSkpOiQuY2xhc3NOYW1lJiYoTi5jbGFzcz1OLmNsYXNzTmFtZT0kLmNsYXNzTmFtZSksSy5wcm9wcz1OfShDKSxDLiQkdHlwZW9mPV85LHQ1JiZ0NShDKX07dmFyIGU1PWwuX19yO2wuX19yPWZ1bmN0aW9uKEMpe2U1JiZlNShDKSxOMz1DLl9fY307dmFyIEMzPWwuZGlmZmVkO2wuZGlmZmVkPWZ1bmN0aW9uKEMpe0MzJiZDMyhDKTt2YXJ7cHJvcHM6SyxfX2U6JH09QzskIT1udWxsJiZDLnR5cGU9PT0idGV4dGFyZWEiJiYidmFsdWUiaW4gSyYmSy52YWx1ZSE9PSQudmFsdWUmJigkLnZhbHVlPUsudmFsdWU9PW51bGw/IiI6Sy52YWx1ZSksTjM9bnVsbH07dmFyIG4xPTM7ZnVuY3Rpb24gSTIoQyl7cmV0dXJuIEM9PT0ibGFuZHNjYXBlX2xlZnQifHxDPT09ImxhbmRzY2FwZV9yaWdodCJ9ZnVuY3Rpb24gUTAoQyl7cmV0dXJuISFDJiYoSTIoQy5vcmllbnRhdGlvbil8fEMud2lkdGg+Qy5oZWlnaHQpfWZ1bmN0aW9uIFowKEMpe2lmKCFDfHxDLndpZHRoPD0wfHxDLmhlaWdodDw9MClyZXR1cm4gbnVsbDtsZXQgSz1JMihDLm9yaWVudGF0aW9uKXx8Qy53aWR0aD5DLmhlaWdodCwkPUs/TWF0aC5tYXgoQy53aWR0aCxDLmhlaWdodCk6TWF0aC5taW4oQy53aWR0aCxDLmhlaWdodCksSj1LP01hdGgubWluKEMud2lkdGgsQy5oZWlnaHQpOk1hdGgubWF4KEMud2lkdGgsQy5oZWlnaHQpO2lmKCQ9PT1DLndpZHRoJiZKPT09Qy5oZWlnaHQpcmV0dXJuIEM7cmV0dXJuey4uLkMsd2lkdGg6JCxoZWlnaHQ6Sn19ZnVuY3Rpb24gVDAoQyl7bGV0IEs9WjAoQyksJD1xMyhDPy5vcmllbnRhdGlvbiksSj1NYXRoLmFicygkKT09PTkwLE49ISFDJiZDLndpZHRoPkMuaGVpZ2h0LHE9JD09PTE4MHx8SiYmIU47cmV0dXJue2Rpc3BsYXlDb25maWc6Syxyb3RhdGlvbkRlZ3JlZXM6cT8kOjAsbmVlZHNDc3NSb3RhdGlvbjpxLGlucHV0T3JpZW50YXRpb246cT9DPy5vcmllbnRhdGlvbjp2b2lkIDB9fWZ1bmN0aW9uIHEzKEMpe3N3aXRjaChDKXtjYXNlImxhbmRzY2FwZV9sZWZ0IjpyZXR1cm4gOTA7Y2FzZSJsYW5kc2NhcGVfcmlnaHQiOnJldHVybi05MDtjYXNlInBvcnRyYWl0X3Vwc2lkZV9kb3duIjpyZXR1cm4gMTgwO2RlZmF1bHQ6cmV0dXJuIDB9fWZ1bmN0aW9uIE0wKEMsSywkKXtzd2l0Y2goQyl7Y2FzZSJsYW5kc2NhcGVfbGVmdCI6cmV0dXJue3g6JCx5OjEtS307Y2FzZSJsYW5kc2NhcGVfcmlnaHQiOnJldHVybnt4OjEtJCx5Okt9O2Nhc2UicG9ydHJhaXRfdXBzaWRlX2Rvd24iOnJldHVybnt4OjEtSyx5OjEtJH07ZGVmYXVsdDpyZXR1cm57eDpLLHk6JH19fWZ1bmN0aW9uIFMyKEMsSyl7c3dpdGNoKEMpe2Nhc2UibGFuZHNjYXBlX2xlZnQiOnN3aXRjaChLKXtjYXNlIDE6cmV0dXJuIDM7Y2FzZSA0OnJldHVybiAyO2Nhc2UgMjpyZXR1cm4gMTtjYXNlIDM6cmV0dXJuIDQ7ZGVmYXVsdDpyZXR1cm4gS31jYXNlImxhbmRzY2FwZV9yaWdodCI6c3dpdGNoKEspe2Nhc2UgMTpyZXR1cm4gMjtjYXNlIDQ6cmV0dXJuIDM7Y2FzZSAyOnJldHVybiA0O2Nhc2UgMzpyZXR1cm4gMTtkZWZhdWx0OnJldHVybiBLfWNhc2UicG9ydHJhaXRfdXBzaWRlX2Rvd24iOnN3aXRjaChLKXtjYXNlIDE6cmV0dXJuIDQ7Y2FzZSA0OnJldHVybiAxO2Nhc2UgMjpyZXR1cm4gMztjYXNlIDM6cmV0dXJuIDI7ZGVmYXVsdDpyZXR1cm4gS31kZWZhdWx0OnJldHVybiBLfX12YXIgQTk9MDtmdW5jdGlvbiBYKEMsSywkLEosTixxKXtLfHwoSz17fSk7dmFyIFEsWixZPUs7aWYoInJlZiJpbiBZKWZvcihaIGluIFk9e30sSylaPT0icmVmIj9RPUtbWl06WVtaXT1LW1pdO3ZhciBHPXt0eXBlOkMscHJvcHM6WSxrZXk6JCxyZWY6USxfX2s6bnVsbCxfXzpudWxsLF9fYjowLF9fZTpudWxsLF9fYzpudWxsLGNvbnN0cnVjdG9yOnZvaWQgMCxfX3Y6LS1BOSxfX2k6LTEsX191OjAsX19zb3VyY2U6TixfX3NlbGY6cX07aWYodHlwZW9mIEM9PSJmdW5jdGlvbiImJihRPUMuZGVmYXVsdFByb3BzKSlmb3IoWiBpbiBRKVlbWl09PT12b2lkIDAmJihZW1pdPVFbWl0pO3JldHVybiBsLnZub2RlJiZsLnZub2RlKEcpLEd9dmFyIFEzPWB1cmwoImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMjQnIGhlaWdodD0nMjQnJTNFJTNDY2lyY2xlIGN4PScxMicgY3k9JzEyJyByPSc5JyBmaWxsPSdyZ2JhKDI1NSwyNTUsMjU1LDAuNDUpJyBzdHJva2U9J3JnYmEoMCwwLDAsMC41NSknIHN0cm9rZS13aWR0aD0nMS4yNScgZmlsdGVyPSdkcm9wLXNoYWRvdygwIDFweCAycHggcmdiYSgwLDAsMCwwLjQ1KSknLyUzRSUzQy9zdmclM0UiKSAxMiAxMiwgcG9pbnRlcmAsYjk9MyxPOT00LFQ5PTU7ZnVuY3Rpb24gYTAoe3VybDpDLHdzVXJsOkssc3R5bGU6JCxpbWFnZVN0eWxlOkosY2xhc3NOYW1lOk4sb25Ib21lUHJlc3M6cSxvblN0cmVhbVRvdWNoOlEsb25TdHJlYW1NdWx0aVRvdWNoOlosb25TdHJlYW1CdXR0b246WSxzdWJzY3JpYmVGcmFtZTpHLHN0cmVhbUZyYW1lOlYsc3RyZWFtQ29uZmlnOkwsb25TY3JlZW5Db25maWdDaGFuZ2U6ayxoaWRlQ29udHJvbHM6RCxvblN0cmVhbWluZ0NoYW5nZTp6LGNvbm5lY3Rpb25RdWFsaXR5OkJ9KXtsZXQgXz0hIVEsSD12KG51bGwpLE89dihudWxsKSxFPXYobnVsbCkseT12KG51bGwpLFtvLHhdPWIoITEpLFtnLGhdPWIobnVsbCksW1IsYV09YihudWxsKSx1PXYobnVsbCksWDE9dihrKTtYMS5jdXJyZW50PWs7bGV0IGQ9dihudWxsKSxbaSxTXT1iKG51bGwpO1coKCk9PntsZXQgVT1kLmN1cnJlbnQ7aWYoIVV8fHR5cGVvZiBSZXNpemVPYnNlcnZlcj4idSIpcmV0dXJuO2xldCBGPW5ldyBSZXNpemVPYnNlcnZlcigodyk9PntsZXQgcD13WzBdPy5jb250ZW50UmVjdDtpZihwKVMoe3dpZHRoOnAud2lkdGgsaGVpZ2h0OnAuaGVpZ2h0fSl9KTtyZXR1cm4gRi5vYnNlcnZlKFUpLCgpPT5GLmRpc2Nvbm5lY3QoKX0sW10pO2xldFttLEoxXT1iKDApLEsxPXYoMCksW1kxLHExXT1iKCExKSx0PXYobnVsbCk7VygoKT0+e2lmKEI9PT0icG9vciIpe2lmKHExKCEwKSx0LmN1cnJlbnQpY2xlYXJUaW1lb3V0KHQuY3VycmVudCk7dC5jdXJyZW50PXNldFRpbWVvdXQoKCk9PntxMSghMSksdC5jdXJyZW50PW51bGx9LDMwMDApfWVsc2UgaWYocTEoITEpLHQuY3VycmVudCljbGVhclRpbWVvdXQodC5jdXJyZW50KSx0LmN1cnJlbnQ9bnVsbDtyZXR1cm4oKT0+e2lmKHQuY3VycmVudCljbGVhclRpbWVvdXQodC5jdXJyZW50KX19LFtCXSk7bGV0ICQxPWAke0N9L3N0cmVhbS5tanBlZ2A7VygoKT0+e3UuY3VycmVudD1udWxsLGEobnVsbCl9LFtDXSk7bGV0IEE9UCgoVSk9PntpZighVXx8VS53aWR0aDw9MHx8VS5oZWlnaHQ8PTApcmV0dXJuO2xldCBGPXUuY3VycmVudCx3PVUub3JpZW50YXRpb249PT12b2lkIDAmJkY/Lm9yaWVudGF0aW9uP3suLi5VLG9yaWVudGF0aW9uOkYub3JpZW50YXRpb259OlU7aWYoRiYmRi53aWR0aD09PXcud2lkdGgmJkYuaGVpZ2h0PT09dy5oZWlnaHQmJkYub3JpZW50YXRpb249PT13Lm9yaWVudGF0aW9uKXJldHVybjt1LmN1cnJlbnQ9dyxhKHcpLFgxLmN1cnJlbnQ/Lih3KX0sW10pLEk9dih6KTtJLmN1cnJlbnQ9eixXKCgpPT57SS5jdXJyZW50Py4obyl9LFtvXSksVygoKT0+e2lmKF8mJkwpQShMKX0sW18sTCxBXSk7bGV0IGo9dighMSk7ai5jdXJyZW50PW87bGV0IHM9dihudWxsKTtXKCgpPT57aWYoIV98fCFHKXJldHVybjtsZXQgRj1zZXRUaW1lb3V0KCgpPT57aWYoIWouY3VycmVudCloKCJTdHJlYW0gaXMgbm90IHByb2R1Y2luZyBmcmFtZXMuIFRoZSBzaW11bGF0b3IgbWF5IGhhdmUgc3RvcHBlZCDigJQgdHJ5IHJlY29ubmVjdGluZy4iKX0sNjAwMCksdz1HKChwKT0+e0sxLmN1cnJlbnQrKyxFMS5jdXJyZW50PURhdGUubm93KCk7bGV0IG49Ty5jdXJyZW50O2lmKG4pe2lmKHMuY3VycmVudClVUkwucmV2b2tlT2JqZWN0VVJMKHMuY3VycmVudCk7cy5jdXJyZW50PXAsbi5zcmM9cH1pZighai5jdXJyZW50KWNsZWFyVGltZW91dChGKSx4KCEwKSxoKG51bGwpfSk7cmV0dXJuKCk9PntpZihjbGVhclRpbWVvdXQoRiksdz8uKCkscy5jdXJyZW50KVVSTC5yZXZva2VPYmplY3RVUkwocy5jdXJyZW50KSxzLmN1cnJlbnQ9bnVsbH19LFtfLEddKTtsZXQgZT1QKChVKT0+e2xldCBGPVQwKHUuY3VycmVudCkuaW5wdXRPcmllbnRhdGlvbix3PU0wKEYsVS54LFUueSkscD1VLmVkZ2U9PT12b2lkIDA/dm9pZCAwOlMyKEYsVS5lZGdlKSxuPXA9PT12b2lkIDA/e3R5cGU6VS50eXBlLC4uLnd9Ont0eXBlOlUudHlwZSwuLi53LGVkZ2U6cH07aWYoXyl7UT8uKG4pO3JldHVybn1sZXQgazE9eS5jdXJyZW50O2lmKCFrMXx8azEucmVhZHlTdGF0ZSE9PVdlYlNvY2tldC5PUEVOKXJldHVybjtsZXQgQTE9bmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKEpTT04uc3RyaW5naWZ5KG4pKSxiMT1uZXcgVWludDhBcnJheSgxK0ExLmxlbmd0aCk7YjFbMF09YjksYjEuc2V0KEExLDEpLGsxLnNlbmQoYjEpfSxbXyxRXSksRDE9UCgoVSk9PntpZihfKXtZPy4oVSk7cmV0dXJufWxldCBGPXkuY3VycmVudDtpZighRnx8Ri5yZWFkeVN0YXRlIT09V2ViU29ja2V0Lk9QRU4pcmV0dXJuO2xldCB3PW5ldyBUZXh0RW5jb2RlcigpLmVuY29kZShKU09OLnN0cmluZ2lmeSh7YnV0dG9uOlV9KSkscD1uZXcgVWludDhBcnJheSgxK3cubGVuZ3RoKTtwWzBdPU85LHAuc2V0KHcsMSksRi5zZW5kKHApfSxbXyxZXSksRzE9UCgoVSk9PntsZXQgRj1UMCh1LmN1cnJlbnQpLmlucHV0T3JpZW50YXRpb24sdz1NMChGLFUueDEsVS55MSkscD1NMChGLFUueDIsVS55Miksbj17dHlwZTpVLnR5cGUseDE6dy54LHkxOncueSx4MjpwLngseTI6cC55fTtpZihfKXtaPy4obik7cmV0dXJufWxldCBrMT15LmN1cnJlbnQ7aWYoIWsxfHxrMS5yZWFkeVN0YXRlIT09V2ViU29ja2V0Lk9QRU4pcmV0dXJuO2xldCBBMT1uZXcgVGV4dEVuY29kZXIoKS5lbmNvZGUoSlNPTi5zdHJpbmdpZnkobikpLGIxPW5ldyBVaW50OEFycmF5KDErQTEubGVuZ3RoKTtiMVswXT1UOSxiMS5zZXQoQTEsMSksazEuc2VuZChiMSl9LFtfLFpdKTtXKCgpPT57aWYoXylyZXR1cm47bGV0IFU9bmV3IEFib3J0Q29udHJvbGxlcixGPSgpPT57ZmV0Y2goYCR7Q30vY29uZmlnYCx7c2lnbmFsOlUuc2lnbmFsfSkudGhlbigoUzApPT5TMC5qc29uKCkpLnRoZW4oKFMwKT0+e0EoUzApfSkuY2F0Y2goKCk9Pnt9KX07RigpO2xldCB3PXNldEludGVydmFsKEYsMTAwMCkscD1LPz9DLnJlcGxhY2UoL15odHRwLywid3MiKSsiL3dzIixuPW5ldyBXZWJTb2NrZXQocCk7bi5iaW5hcnlUeXBlPSJhcnJheWJ1ZmZlciIseS5jdXJyZW50PW4sbi5vbm9wZW49KCk9Pnt4KCEwKSxoKG51bGwpfSxuLm9uY2xvc2U9KCk9Pnt4KCExKX0sbi5vbmVycm9yPSgpPT57aCgiV2ViU29ja2V0IGNvbm5lY3Rpb24gZmFpbGVkIikseCghMSl9O2xldCBrMT1uZXcgQWJvcnRDb250cm9sbGVyLEExPXNldEludGVydmFsKCgpPT57SjEoSzEuY3VycmVudCksSzEuY3VycmVudD0wfSwxMDAwKSxiMT0hMSxKNT1zZXRUaW1lb3V0KCgpPT57aWYoIWIxKWgoIlN0cmVhbSBpcyBub3QgcHJvZHVjaW5nIGZyYW1lcy4gVGhlIHNpbXVsYXRvciBtYXkgaGF2ZSBzdG9wcGVkIOKAlCB0cnkgcmVjb25uZWN0aW5nLiIpfSw2MDAwKTtyZXR1cm4oYXN5bmMoKT0+e3RyeXtsZXQgTjU9KGF3YWl0IGZldGNoKCQxLHtzaWduYWw6azEuc2lnbmFsfSkpLmJvZHk/LmdldFJlYWRlcigpO2lmKCFONSlyZXR1cm47bGV0IEwyPW5ldyBUZXh0RW5jb2RlcigpLmVuY29kZSgiLS1mcmFtZSIpO3doaWxlKCEwKXtsZXR7ZG9uZTp1OCx2YWx1ZTpWMn09YXdhaXQgTjUucmVhZCgpO2lmKHU4KWJyZWFrO2lmKFYyKWZvcihsZXQgQjI9MDtCMjw9VjIubGVuZ3RoLUwyLmxlbmd0aDtCMisrKXtsZXQgcTU9ITA7Zm9yKGxldCBoMD0wO2gwPEwyLmxlbmd0aDtoMCsrKWlmKFYyW0IyK2gwXSE9PUwyW2gwXSl7cTU9ITE7YnJlYWt9aWYocTUpe2lmKEsxLmN1cnJlbnQrKywhYjEpYjE9ITAsY2xlYXJUaW1lb3V0KEo1KX19fX1jYXRjaHt9fSkoKSwoKT0+e2sxLmFib3J0KCksVS5hYm9ydCgpLGNsZWFySW50ZXJ2YWwodyksY2xlYXJJbnRlcnZhbChBMSksY2xlYXJUaW1lb3V0KEo1KSxuLmNsb3NlKCkseS5jdXJyZW50PW51bGx9fSxbQywkMSxfLEEsS10pO2xldCBFMT12KDApO1coKCk9PntpZighXylyZXR1cm47bGV0IFU9MjAwMCxGPSgpPT57bGV0IG49RTEuY3VycmVudDtpZighbnx8IWouY3VycmVudClyZXR1cm47aWYoRGF0ZS5ub3coKS1uPlUpeCghMSl9LHc9c2V0SW50ZXJ2YWwoKCk9PntKMShLMS5jdXJyZW50KSxLMS5jdXJyZW50PTAsRigpfSwxMDAwKSxwPSgpPT57aWYoIWRvY3VtZW50LmhpZGRlbilGKCl9O3JldHVybiBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJ2aXNpYmlsaXR5Y2hhbmdlIixwKSwoKT0+e2NsZWFySW50ZXJ2YWwodyksZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigidmlzaWJpbGl0eWNoYW5nZSIscCl9fSxbX10pO2xldCBJMT1QKCgpPT57cmV0dXJuIF8/Ty5jdXJyZW50OkguY3VycmVudH0sW19dKSxGMT1QKCgpPT57cmV0dXJuIEUuY3VycmVudD8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk/P0kxKCk/LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpPz9udWxsfSxbSTFdKSx3MT1QKChVLEYpPT57bGV0IHc9RjEoKTtpZighdylyZXR1cm47bGV0IHA9KEYuY2xpZW50WC13LmxlZnQpL3cud2lkdGgsbj0oRi5jbGllbnRZLXcudG9wKS93LmhlaWdodDtlKHt0eXBlOlUseDpwLHk6bn0pfSxbRjEsZV0pLEwxPXYoITEpLFYxPXYoITEpLHAxPXYoITEpLGYxPXYoe2R4OjAsZHk6MH0pLFMxPXYoITEpLFtnMSwkMF09YighMSkseTE9dih7eDowLjUseTowLjV9KSxbaDEsVF09YihudWxsKTtXKCgpPT57bGV0IFU9KHcpPT57aWYody5rZXk9PT0iQWx0IikkMCghMCl9LEY9KHcpPT57aWYody5rZXk9PT0iQWx0Iil7aWYoJDAoITEpLCFWMS5jdXJyZW50KVQobnVsbCl9fTtyZXR1cm4gd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLFUpLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJrZXl1cCIsRiksKCk9Pnt3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsVSksd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoImtleXVwIixGKX19LFtdKSxXKCgpPT57aWYoZzEmJiFWMS5jdXJyZW50KXtsZXQgVT15MS5jdXJyZW50O1Qoe3gxOlUueCx5MTpVLnkseDI6MS1VLngseTI6MS1VLnl9KX1lbHNlIGlmKCFnMSYmIVYxLmN1cnJlbnQpVChudWxsKX0sW2cxXSk7bGV0IHI9dihudWxsKSxmPXYoITEpLEIxPXYoMCksejE9UCgoVSxGKT0+e2YuY3VycmVudD0hMDtsZXQgdz1yLmN1cnJlbnQ7aWYodyljYW5jZWxBbmltYXRpb25GcmFtZShCMS5jdXJyZW50KSxCMS5jdXJyZW50PXJlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+e3cuc3R5bGUubGVmdD1gJHtVKjEwMH0lYCx3LnN0eWxlLnRvcD1gJHtGKjEwMH0lYCx3LnN0eWxlLmRpc3BsYXk9ImJsb2NrIn0pfSxbXSksTzE9UCgoVSxGKT0+e2lmKCFmLmN1cnJlbnQpcmV0dXJuO2xldCB3PXIuY3VycmVudDtpZih3KWNhbmNlbEFuaW1hdGlvbkZyYW1lKEIxLmN1cnJlbnQpLEIxLmN1cnJlbnQ9cmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT57dy5zdHlsZS5sZWZ0PWAke1UqMTAwfSVgLHcuc3R5bGUudG9wPWAke0YqMTAwfSVgfSl9LFtdKSx4MT1QKCgpPT57Zi5jdXJyZW50PSExO2xldCBVPXIuY3VycmVudDtpZihVKWNhbmNlbEFuaW1hdGlvbkZyYW1lKEIxLmN1cnJlbnQpLFUuc3R5bGUuZGlzcGxheT0ibm9uZSJ9LFtdKSxJMD12KDApLFExPXYobnVsbCksWDA9UCgoKT0+e2xldCBVPURhdGUubm93KCksRj1VLUkwLmN1cnJlbnQ7aWYoSTAuY3VycmVudD1VLEY8MzAwKXtpZihRMS5jdXJyZW50KWNsZWFyVGltZW91dChRMS5jdXJyZW50KSxRMS5jdXJyZW50PW51bGw7aWYocSlxKCk7ZWxzZSBEMSgiYXBwX3N3aXRjaGVyIil9ZWxzZSBRMS5jdXJyZW50PXNldFRpbWVvdXQoKCk9PntpZihxKXEoKTtlbHNlIEQxKCJob21lIik7UTEuY3VycmVudD1udWxsfSwzMDApfSxbRDEscV0pLHowPVQwKFIpLGQxPXowLmRpc3BsYXlDb25maWcsbTE9KCgpPT57aWYoIWQxfHwhaSlyZXR1cm4gbnVsbDtpZihpLndpZHRoPT09MHx8aS5oZWlnaHQ9PT0wKXJldHVybiBudWxsO2xldCBVPU1hdGgubWluKGkud2lkdGgvZDEud2lkdGgsaS5oZWlnaHQvZDEuaGVpZ2h0KTtyZXR1cm57d2lkdGg6ZDEud2lkdGgqVSxoZWlnaHQ6ZDEuaGVpZ2h0KlV9fSkoKSxzMT16MC5yb3RhdGlvbkRlZ3JlZXMsTT16MC5uZWVkc0Nzc1JvdGF0aW9uJiZNYXRoLmFicyhzMSk9PT05MCxjPUosQzE9e3Bvc2l0aW9uOiJhYnNvbHV0ZSIsdG9wOiI1MCUiLGxlZnQ6IjUwJSIsd2lkdGg6TSYmbTE/YCR7bTEuaGVpZ2h0fXB4YDoiMTAwJSIsaGVpZ2h0Ok0mJm0xP2Ake20xLndpZHRofXB4YDoiMTAwJSIsdHJhbnNmb3JtOmB0cmFuc2xhdGUoLTUwJSwgLTUwJSkke3MxPT09MD8iIjpgIHJvdGF0ZSgke3MxfWRlZylgfWAsdHJhbnNmb3JtT3JpZ2luOiJjZW50ZXIgY2VudGVyIixjdXJzb3I6UTMsZGlzcGxheToiYmxvY2siLHVzZXJTZWxlY3Q6Im5vbmUiLFdlYmtpdFVzZXJTZWxlY3Q6Im5vbmUiLHRvdWNoQWN0aW9uOiJub25lIiwuLi5KLC4uLnMxPT09MD97fTp7Ym9yZGVyUmFkaXVzOjAsY29ybmVyU2hhcGU6dm9pZCAwfX07cmV0dXJuIFgoImRpdiIse3N0eWxlOntkaXNwbGF5OiJmbGV4IixmbGV4RGlyZWN0aW9uOiJjb2x1bW4iLGZsZXg6MSwuLi5EP3t9Ontib3JkZXI6IjFweCBzb2xpZCByZ2JhKDI1NSwyNTUsMjU1LDAuMTIpIn0sb3ZlcmZsb3c6ImhpZGRlbiIsbWluV2lkdGg6MCxtaW5IZWlnaHQ6MCwuLi4kfSxjbGFzc05hbWU6TixjaGlsZHJlbjpbWCgiZGl2Iix7cmVmOmQsc3R5bGU6e3Bvc2l0aW9uOiJyZWxhdGl2ZSIsZmxleDoxLG1pbkhlaWdodDowLG1pbldpZHRoOjAsZGlzcGxheToiZmxleCIsYWxpZ25JdGVtczoiY2VudGVyIixqdXN0aWZ5Q29udGVudDoiY2VudGVyIn0sY2hpbGRyZW46WCgiZGl2Iix7cmVmOkUsc3R5bGU6e3Bvc2l0aW9uOiJyZWxhdGl2ZSIsd2lkdGg6bTE/YCR7bTEud2lkdGh9cHhgOiIxMDAlIixoZWlnaHQ6bTE/YCR7bTEuaGVpZ2h0fXB4YDoiMTAwJSIsb3ZlcmZsb3c6ImhpZGRlbiIsYm9yZGVyUmFkaXVzOmM/LmJvcmRlclJhZGl1cyxjb3JuZXJTaGFwZTpjPy5jb3JuZXJTaGFwZX0sY2hpbGRyZW46W1goImltZyIse3JlZjpILHNyYzpfP3ZvaWQgMDokMSxkcmFnZ2FibGU6ITEsb25Mb2FkOihVKT0+e2xldCBGPVUuY3VycmVudFRhcmdldDtpZihGLm5hdHVyYWxXaWR0aD4wJiZGLm5hdHVyYWxIZWlnaHQ+MClBKHt3aWR0aDpGLm5hdHVyYWxXaWR0aCxoZWlnaHQ6Ri5uYXR1cmFsSGVpZ2h0fSl9LHN0eWxlOl8/e2Rpc3BsYXk6Im5vbmUifTpDMX0pLF8mJlgoImltZyIse3JlZjpPLGRyYWdnYWJsZTohMSxvbkxvYWQ6KFUpPT57bGV0IEY9VS5jdXJyZW50VGFyZ2V0O2lmKEYubmF0dXJhbFdpZHRoPjAmJkYubmF0dXJhbEhlaWdodD4wKUEoe3dpZHRoOkYubmF0dXJhbFdpZHRoLGhlaWdodDpGLm5hdHVyYWxIZWlnaHR9KX0sc3R5bGU6QzF9KSxYKCJkaXYiLHtzdHlsZTp7cG9zaXRpb246ImFic29sdXRlIixpbnNldDowLGN1cnNvcjpRMyx0b3VjaEFjdGlvbjoibm9uZSJ9LG9uTW91c2VEb3duOihVKT0+e1UucHJldmVudERlZmF1bHQoKTtsZXQgRj1GMSgpO2lmKCFGKXJldHVybjtsZXQgdz0oVS5jbGllbnRYLUYubGVmdCkvRi53aWR0aCxwPShVLmNsaWVudFktRi50b3ApL0YuaGVpZ2h0O2lmKFUuYWx0S2V5KXtWMS5jdXJyZW50PSEwLHAxLmN1cnJlbnQ9VS5zaGlmdEtleTtsZXQgbj17eDE6dyx5MTpwLHgyOjEtdyx5MjoxLXB9O2YxLmN1cnJlbnQ9e2R4OjEtdy13LGR5OjEtcC1wfSxUKG4pLEcxKHt0eXBlOiJiZWdpbiIsLi4ubn0pO3JldHVybn1pZih6MSh3LHApLHA+MC44OClMMS5jdXJyZW50PSEwLGUoe3R5cGU6ImJlZ2luIix4OncseTpwLGVkZ2U6bjF9KTtlbHNlIEwxLmN1cnJlbnQ9ITEsdzEoImJlZ2luIixVKX0sb25Nb3VzZU1vdmU6KFUpPT57bGV0IEY9RjEoKTtpZighRilyZXR1cm47bGV0IHc9KFUuY2xpZW50WC1GLmxlZnQpL0Yud2lkdGgscD0oVS5jbGllbnRZLUYudG9wKS9GLmhlaWdodDtpZih5MS5jdXJyZW50PXt4OncseTpwfSxVLmJ1dHRvbnM9PT0wKXtpZihVLmFsdEtleSlUKHt4MTp3LHkxOnAseDI6MS13LHkyOjEtcH0pO3JldHVybn1pZihWMS5jdXJyZW50KXtsZXQgbjtpZihwMS5jdXJyZW50KXtsZXQgazE9ZjEuY3VycmVudDtuPXt4MTp3LHkxOnAseDI6dytrMS5keCx5MjpwK2sxLmR5fX1lbHNlIG49e3gxOncseTE6cCx4MjoxLXcseTI6MS1wfTtUKG4pLEcxKHt0eXBlOiJtb3ZlIiwuLi5ufSk7cmV0dXJufWlmKE8xKHcscCksTDEuY3VycmVudCllKHt0eXBlOiJtb3ZlIix4OncseTpwLGVkZ2U6bjF9KTtlbHNlIHcxKCJtb3ZlIixVKX0sb25Nb3VzZVVwOihVKT0+e2lmKFYxLmN1cnJlbnQpe2xldCBGPUYxKCk7aWYoRil7bGV0IHc9KFUuY2xpZW50WC1GLmxlZnQpL0Yud2lkdGgscD0oVS5jbGllbnRZLUYudG9wKS9GLmhlaWdodDtpZihwMS5jdXJyZW50KXtsZXQgbj1mMS5jdXJyZW50O0cxKHt0eXBlOiJlbmQiLHgxOncseTE6cCx4Mjp3K24uZHgseTI6cCtuLmR5fSl9ZWxzZSBHMSh7dHlwZToiZW5kIix4MTp3LHkxOnAseDI6MS13LHkyOjEtcH0pfWlmKFYxLmN1cnJlbnQ9ITEsIVUuYWx0S2V5KVQobnVsbCk7cmV0dXJufWlmKHgxKCksTDEuY3VycmVudCl7bGV0IEY9RjEoKTtpZihGKXtsZXQgdz0oVS5jbGllbnRYLUYubGVmdCkvRi53aWR0aCxwPShVLmNsaWVudFktRi50b3ApL0YuaGVpZ2h0O2Uoe3R5cGU6ImVuZCIseDp3LHk6cCxlZGdlOm4xfSl9TDEuY3VycmVudD0hMTtyZXR1cm59dzEoImVuZCIsVSl9LG9uTW91c2VMZWF2ZTooVSk9PntpZihWMS5jdXJyZW50KXtpZihoMSlHMSh7dHlwZToiZW5kIiwuLi5oMX0pO1YxLmN1cnJlbnQ9ITEsVChudWxsKTtyZXR1cm59aWYoeDEoKSxMMS5jdXJyZW50KXtsZXQgRj1GMSgpO2lmKEYpe2xldCB3PShVLmNsaWVudFgtRi5sZWZ0KS9GLndpZHRoLHA9KFUuY2xpZW50WS1GLnRvcCkvRi5oZWlnaHQ7ZSh7dHlwZToiZW5kIix4OncseTpwLGVkZ2U6bjF9KX1MMS5jdXJyZW50PSExO3JldHVybn1pZihVLmJ1dHRvbnM+MCl3MSgiZW5kIixVKTtUKG51bGwpfSxvblRvdWNoU3RhcnQ6KFUpPT57VS5wcmV2ZW50RGVmYXVsdCgpO2xldCBGPUYxKCk7aWYoIUYpcmV0dXJuO2lmKFUudG91Y2hlcy5sZW5ndGg+PTIpe3gxKCk7bGV0IGsxPVUudG91Y2hlc1swXSxBMT1VLnRvdWNoZXNbMV0sYjE9e3gxOihrMS5jbGllbnRYLUYubGVmdCkvRi53aWR0aCx5MTooazEuY2xpZW50WS1GLnRvcCkvRi5oZWlnaHQseDI6KEExLmNsaWVudFgtRi5sZWZ0KS9GLndpZHRoLHkyOihBMS5jbGllbnRZLUYudG9wKS9GLmhlaWdodH07aWYoIVMxLmN1cnJlbnQmJiFMMS5jdXJyZW50KWUoe3R5cGU6ImVuZCIseDpiMS54MSx5OmIxLnkxfSk7UzEuY3VycmVudD0hMCxWMS5jdXJyZW50PSEwLEwxLmN1cnJlbnQ9ITEsVChiMSksRzEoe3R5cGU6ImJlZ2luIiwuLi5iMX0pO3JldHVybn1sZXQgdz1VLnRvdWNoZXNbMF07aWYoIXcpcmV0dXJuO2xldCBwPSh3LmNsaWVudFgtRi5sZWZ0KS9GLndpZHRoLG49KHcuY2xpZW50WS1GLnRvcCkvRi5oZWlnaHQ7aWYoejEocCxuKSxuPjAuODgpTDEuY3VycmVudD0hMCxlKHt0eXBlOiJiZWdpbiIseDpwLHk6bixlZGdlOm4xfSk7ZWxzZSBMMS5jdXJyZW50PSExLGUoe3R5cGU6ImJlZ2luIix4OnAseTpufSl9LG9uVG91Y2hNb3ZlOihVKT0+e1UucHJldmVudERlZmF1bHQoKTtsZXQgRj1GMSgpO2lmKCFGKXJldHVybjtpZihTMS5jdXJyZW50JiZVLnRvdWNoZXMubGVuZ3RoPj0yKXtsZXQgazE9VS50b3VjaGVzWzBdLEExPVUudG91Y2hlc1sxXSxiMT17eDE6KGsxLmNsaWVudFgtRi5sZWZ0KS9GLndpZHRoLHkxOihrMS5jbGllbnRZLUYudG9wKS9GLmhlaWdodCx4MjooQTEuY2xpZW50WC1GLmxlZnQpL0Yud2lkdGgseTI6KEExLmNsaWVudFktRi50b3ApL0YuaGVpZ2h0fTtUKGIxKSxHMSh7dHlwZToibW92ZSIsLi4uYjF9KTtyZXR1cm59bGV0IHc9VS50b3VjaGVzWzBdO2lmKCF3KXJldHVybjtsZXQgcD0ody5jbGllbnRYLUYubGVmdCkvRi53aWR0aCxuPSh3LmNsaWVudFktRi50b3ApL0YuaGVpZ2h0O2lmKE8xKHAsbiksTDEuY3VycmVudCllKHt0eXBlOiJtb3ZlIix4OnAseTpuLGVkZ2U6bjF9KTtlbHNlIGUoe3R5cGU6Im1vdmUiLHg6cCx5Om59KX0sb25Ub3VjaEVuZDooVSk9PntVLnByZXZlbnREZWZhdWx0KCk7bGV0IEY9RjEoKTtpZighRilyZXR1cm47aWYoUzEuY3VycmVudCl7aWYoVS50b3VjaGVzLmxlbmd0aDwyKXtsZXQgazE9VS5jaGFuZ2VkVG91Y2hlc1swXSxBMT1oMTtpZihrMSYmQTEpRzEoe3R5cGU6ImVuZCIseDE6KGsxLmNsaWVudFgtRi5sZWZ0KS9GLndpZHRoLHkxOihrMS5jbGllbnRZLUYudG9wKS9GLmhlaWdodCx4MjpBMS54Mix5MjpBMS55Mn0pO2Vsc2UgaWYoQTEpRzEoe3R5cGU6ImVuZCIsLi4uQTF9KTtTMS5jdXJyZW50PSExLFYxLmN1cnJlbnQ9ITEsVChudWxsKX1yZXR1cm59bGV0IHc9VS5jaGFuZ2VkVG91Y2hlc1swXTtpZighdylyZXR1cm47bGV0IHA9KHcuY2xpZW50WC1GLmxlZnQpL0Yud2lkdGgsbj0ody5jbGllbnRZLUYudG9wKS9GLmhlaWdodDtpZih4MSgpLEwxLmN1cnJlbnQpZSh7dHlwZToiZW5kIix4OnAseTpuLGVkZ2U6bjF9KSxMMS5jdXJyZW50PSExO2Vsc2UgZSh7dHlwZToiZW5kIix4OnAseTpufSl9fSksWCgiZGl2Iix7cmVmOnIsImRhdGEtdGVzdGlkIjoidG91Y2gtaW5kaWNhdG9yIixzdHlsZTp7cG9zaXRpb246ImFic29sdXRlIixkaXNwbGF5OiJub25lIix3aWR0aDoyNCxoZWlnaHQ6MjQsYm9yZGVyUmFkaXVzOiI1MCUiLGJhY2tncm91bmQ6InJnYmEoNTksMTMwLDI0NiwwLjUpIixib3hTaGFkb3c6IjAgMCA4cHggcmdiYSg1OSwxMzAsMjQ2LDAuMykiLHRyYW5zZm9ybToidHJhbnNsYXRlKC01MCUsIC01MCUpIixwb2ludGVyRXZlbnRzOiJub25lIn19KSxoMSYmWChOMSx7Y2hpbGRyZW46W1goImRpdiIseyJkYXRhLXRlc3RpZCI6ImZpbmdlci1kb3QiLHN0eWxlOlkzKGgxLngxLGgxLnkxKX0pLFgoImRpdiIseyJkYXRhLXRlc3RpZCI6ImZpbmdlci1kb3QiLHN0eWxlOlkzKGgxLngyLGgxLnkyKX0pXX0pLCFvJiYhZyYmWCgiZGl2Iix7c3R5bGU6ey4uLlozLC4uLkp8fHt9fSxjaGlsZHJlbjpYKCJzcGFuIix7c3R5bGU6e2NvbG9yOiIjODg4Iixmb250U2l6ZToxNH0sY2hpbGRyZW46IkNvbm5lY3RpbmcuLi4ifSl9KSxnJiZYKCJkaXYiLHtzdHlsZTpaMyxjaGlsZHJlbjpYKCJzcGFuIix7c3R5bGU6e2NvbG9yOiIjZjQ0Iixmb250U2l6ZToxNCxwYWRkaW5nOjIwLHRleHRBbGlnbjoiY2VudGVyIn0sY2hpbGRyZW46Z30pfSksWTEmJlgoImRpdiIse3N0eWxlOk05LGNoaWxkcmVuOlgoInNwYW4iLHtzdHlsZTp7Y29sb3I6IiNmYmJmMjQiLGZvbnRTaXplOjEzLGZvbnRGYW1pbHk6Im1vbm9zcGFjZSJ9LGNoaWxkcmVuOiJTbG93IGNvbm5lY3Rpb24ifSl9KV19KX0pLCFEJiZYKCJkaXYiLHtzdHlsZTp7ZGlzcGxheToiZmxleCIsYWxpZ25JdGVtczoiY2VudGVyIixqdXN0aWZ5Q29udGVudDoic3BhY2UtYmV0d2VlbiIscGFkZGluZzoiNHB4IDhweCIsYm9yZGVyVG9wOiIxcHggc29saWQgcmdiYSgyNTUsMjU1LDI1NSwwLjEyKSJ9LGNoaWxkcmVuOltYKCJidXR0b24iLHtvbkNsaWNrOlgwLHN0eWxlOntiYWNrZ3JvdW5kOiJub25lIixib3JkZXI6IjFweCBzb2xpZCByZ2JhKDI1NSwyNTUsMjU1LDAuMikiLGNvbG9yOiIjYWFhIixmb250U2l6ZToxMSxmb250RmFtaWx5OiJtb25vc3BhY2UiLHBhZGRpbmc6IjJweCAxMHB4IixjdXJzb3I6InBvaW50ZXIiLGJvcmRlclJhZGl1czo0fSxjaGlsZHJlbjoiSG9tZSJ9KSxYKCJzcGFuIix7c3R5bGU6e2NvbG9yOm0+MD8iIzRmNCI6IiM4ODgiLGZvbnRTaXplOjEyLGZvbnRGYW1pbHk6Im1vbm9zcGFjZSIsZGlzcGxheToiZmxleCIsYWxpZ25JdGVtczoiY2VudGVyIixnYXA6Nn0sY2hpbGRyZW46W0ImJlgoInNwYW4iLHsiZGF0YS10ZXN0aWQiOiJxdWFsaXR5LWRvdCIsc3R5bGU6e3dpZHRoOjgsaGVpZ2h0OjgsYm9yZGVyUmFkaXVzOiI1MCUiLGRpc3BsYXk6ImlubGluZS1ibG9jayIsYmFja2dyb3VuZDpCPT09Imdvb2QiPyIjNGFkZTgwIjpCPT09ImRlZ3JhZGVkIj8iI2ZhY2MxNSI6IiNlZjQ0NDQifX0pLG0sIiBmcHMiXX0pXX0pXX0pfXZhciBNOT17cG9zaXRpb246ImFic29sdXRlIix0b3A6OCxsZWZ0OiI1MCUiLHRyYW5zZm9ybToidHJhbnNsYXRlWCgtNTAlKSIsYmFja2dyb3VuZDoicmdiYSgwLDAsMCwwLjcpIixib3JkZXJSYWRpdXM6NixwYWRkaW5nOiI0cHggMTJweCIscG9pbnRlckV2ZW50czoibm9uZSJ9LFozPXtwb3NpdGlvbjoiYWJzb2x1dGUiLGluc2V0OjAsZGlzcGxheToiZmxleCIsYWxpZ25JdGVtczoiY2VudGVyIixqdXN0aWZ5Q29udGVudDoiY2VudGVyIixiYWNrZ3JvdW5kOiJyZ2JhKDAsMCwwLDAuOCkifSxHMz0yMDtmdW5jdGlvbiBZMyhDLEspe3JldHVybntwb3NpdGlvbjoiYWJzb2x1dGUiLGxlZnQ6YCR7QyoxMDB9JWAsdG9wOmAke0sqMTAwfSVgLHdpZHRoOkczLGhlaWdodDpHMyxib3JkZXJSYWRpdXM6IjUwJSIsYmFja2dyb3VuZDoicmdiYSgyNTUsMjU1LDI1NSwwLjQ1KSIsYm9yZGVyOiIxLjI1cHggc29saWQgcmdiYSgwLDAsMCwwLjU1KSIsYm94U2hhZG93OiIwIDFweCAzcHggcmdiYSgwLDAsMCwwLjQ1KSIsdHJhbnNmb3JtOiJ0cmFuc2xhdGUoLTUwJSwgLTUwJSkiLHBvaW50ZXJFdmVudHM6Im5vbmUifX1mdW5jdGlvbiBHMChDKXtpZighQylyZXR1cm4iaXBob25lIjtsZXQgSz1DLnRvTG93ZXJDYXNlKCk7aWYoSy5pbmNsdWRlcygiaXBhZCIpKXJldHVybiJpcGFkIjtpZihLLmluY2x1ZGVzKCJ3YXRjaCIpKXJldHVybiJ3YXRjaCI7aWYoSy5pbmNsdWRlcygidmlzaW9uIikpcmV0dXJuInZpc2lvbiI7cmV0dXJuImlwaG9uZSJ9dmFyIFcxPXtpcGhvbmU6e3dpZHRoOjQyNyxoZWlnaHQ6ODgxLGJlemVsWDoxOCxiZXplbFk6MTgsaW5uZXJSYWRpdXM6NTV9LGlwYWQ6e3dpZHRoOjQzMCxoZWlnaHQ6NjA1LGJlemVsWDoxNixiZXplbFk6MTYsaW5uZXJSYWRpdXM6MTJ9LHdhdGNoOnt3aWR0aDoyNzQsaGVpZ2h0OjMyMixiZXplbFg6MTIsYmV6ZWxZOjEyLGlubmVyUmFkaXVzOjc5fSx2aXNpb246e3dpZHRoOjY0MCxoZWlnaHQ6NDAwLGJlemVsWDoxMixiZXplbFk6MTIsaW5uZXJSYWRpdXM6MzJ9fSxLNj1XMS5pcGhvbmUud2lkdGgsJDY9VzEuaXBob25lLmhlaWdodCxYNj1XMS5pcGhvbmUuYmV6ZWxYLEo2PVcxLmlwaG9uZS5iZXplbFksTjY9VzEuaXBob25lLmlubmVyUmFkaXVzLEwzPXsiaVBob25lIDE3IFBybyBNYXgiOnt3aWR0aDoxMzIwLGhlaWdodDoyODY4fSwiaVBob25lIDE3IFBybyI6e3dpZHRoOjEyMDYsaGVpZ2h0OjI2MjJ9LCJpUGhvbmUgMTciOnt3aWR0aDoxMjA2LGhlaWdodDoyNjIyfSwiaVBob25lIEFpciI6e3dpZHRoOjEyNjAsaGVpZ2h0OjI3MzZ9LCJpUGhvbmUgMTYgUHJvIE1heCI6e3dpZHRoOjEzMjAsaGVpZ2h0OjI4Njh9LCJpUGhvbmUgMTYgUHJvIjp7d2lkdGg6MTIwNixoZWlnaHQ6MjYyMn0sImlQaG9uZSAxNiBQbHVzIjp7d2lkdGg6MTI5MCxoZWlnaHQ6Mjc5Nn0sImlQaG9uZSAxNiI6e3dpZHRoOjExNzksaGVpZ2h0OjI1NTZ9LCJpUGhvbmUgMTZlIjp7d2lkdGg6MTE3MCxoZWlnaHQ6MjUzMn0sImlQaG9uZSAxNSBQcm8gTWF4Ijp7d2lkdGg6MTI5MCxoZWlnaHQ6Mjc5Nn0sImlQaG9uZSAxNSBQcm8iOnt3aWR0aDoxMTc5LGhlaWdodDoyNTU2fSwiaVBob25lIDE1IFBsdXMiOnt3aWR0aDoxMjkwLGhlaWdodDoyNzk2fSwiaVBob25lIDE1Ijp7d2lkdGg6MTE3OSxoZWlnaHQ6MjU1Nn0sImlQYWQgUHJvIDEzLWluY2ggKE01KSI6e3dpZHRoOjIwNjQsaGVpZ2h0OjI3NTJ9LCJpUGFkIFBybyAxMS1pbmNoIChNNSkiOnt3aWR0aDoxNjY4LGhlaWdodDoyNDIwfSwiaVBhZCBQcm8gMTMtaW5jaCAoTTQpIjp7d2lkdGg6MjA2NCxoZWlnaHQ6Mjc1Mn0sImlQYWQgUHJvIDExLWluY2ggKE00KSI6e3dpZHRoOjE2NjgsaGVpZ2h0OjI0MjB9LCJpUGFkIEFpciAxMy1pbmNoIChNMykiOnt3aWR0aDoyMDQ4LGhlaWdodDoyNzMyfSwiaVBhZCBBaXIgMTEtaW5jaCAoTTMpIjp7d2lkdGg6MTY0MCxoZWlnaHQ6MjM2MH0sImlQYWQgKEExNikiOnt3aWR0aDoxNjQwLGhlaWdodDoyMzYwfSwiaVBhZCBtaW5pIChBMTcgUHJvKSI6e3dpZHRoOjE0ODgsaGVpZ2h0OjIyNjZ9LCJBcHBsZSBXYXRjaCBVbHRyYSAzICg0OW1tKSI6e3dpZHRoOjQyMixoZWlnaHQ6NTE0fSwiQXBwbGUgV2F0Y2ggVWx0cmEgMiAoNDltbSkiOnt3aWR0aDo0MTAsaGVpZ2h0OjUwMn0sIkFwcGxlIFdhdGNoIFNlcmllcyAxMSAoNDZtbSkiOnt3aWR0aDo0MTYsaGVpZ2h0OjQ5Nn0sIkFwcGxlIFdhdGNoIFNlcmllcyAxMSAoNDJtbSkiOnt3aWR0aDozNzQsaGVpZ2h0OjQ0Nn0sIkFwcGxlIFdhdGNoIFNlcmllcyAxMCAoNDZtbSkiOnt3aWR0aDo0MTYsaGVpZ2h0OjQ5Nn0sIkFwcGxlIFdhdGNoIFNlcmllcyAxMCAoNDJtbSkiOnt3aWR0aDozNzQsaGVpZ2h0OjQ0Nn0sIkFwcGxlIFdhdGNoIFNFIDMgKDQ0bW0pIjp7d2lkdGg6MzY4LGhlaWdodDo0NDh9LCJBcHBsZSBXYXRjaCBTRSAzICg0MG1tKSI6e3dpZHRoOjMyNCxoZWlnaHQ6Mzk0fSwiQXBwbGUgV2F0Y2ggU0UgKDQ0bW0pIjp7d2lkdGg6MzY4LGhlaWdodDo0NDh9LCJBcHBsZSBXYXRjaCBTRSAoNDBtbSkiOnt3aWR0aDozMjQsaGVpZ2h0OjM5NH0sIkFwcGxlIFZpc2lvbiBQcm8iOnt3aWR0aDoxOTIwLGhlaWdodDoxMDgwfX07ZnVuY3Rpb24gaTAoQyxLKXtsZXQgJD1DJiZDLndpZHRoPjAmJkMuaGVpZ2h0PjA/QzpLLEo9WjAoJCk7aWYoSilyZXR1cm5gJHtKLndpZHRofSAvICR7Si5oZWlnaHR9YDtyZXR1cm5gJHtXMS5pcGhvbmUud2lkdGgtMipXMS5pcGhvbmUuYmV6ZWxYfSAvICR7VzEuaXBob25lLmhlaWdodC0yKlcxLmlwaG9uZS5iZXplbFl9YH1mdW5jdGlvbiByMChDPSJpcGhvbmUiLEspe2xldCAkPUs/TDNbS106bnVsbDtpZigkKXJldHVybiAkO2xldCBKPVcxW0NdO3JldHVybnt3aWR0aDpKLndpZHRoLTIqSi5iZXplbFgsaGVpZ2h0OkouaGVpZ2h0LTIqSi5iZXplbFl9fWZ1bmN0aW9uIG4wKEM9ImlwaG9uZSIsSyl7aWYoUTAoSykpc3dpdGNoKEMpe2Nhc2UiaXBhZCI6cmV0dXJuIDcyMDtjYXNlInZpc2lvbiI6cmV0dXJuIDU4MDtjYXNlIndhdGNoIjpyZXR1cm4gMjAwO2RlZmF1bHQ6cmV0dXJuIDYyMH1zd2l0Y2goQyl7Y2FzZSJpcGFkIjpyZXR1cm4gNDAwO2Nhc2Uid2F0Y2giOnJldHVybiAyMDA7Y2FzZSJ2aXNpb24iOnJldHVybiA1ODA7ZGVmYXVsdDpyZXR1cm4gMzIwfX1mdW5jdGlvbiBzMChDPSJpcGhvbmUiLEspe2xldCAkPVcxW0NdLEo9JC53aWR0aC0yKiQuYmV6ZWxYLE49JC5oZWlnaHQtMiokLmJlemVsWTtpZihKPE4mJlEwKEspKXJldHVybmAkeyQuaW5uZXJSYWRpdXMvTioxMDB9JSAvICR7JC5pbm5lclJhZGl1cy9KKjEwMH0lYDtyZXR1cm5gJHskLmlubmVyUmFkaXVzL0oqMTAwfSUgLyAkeyQuaW5uZXJSYWRpdXMvTioxMDB9JWB9ZnVuY3Rpb24gVjMoQyl7bGV0IEs9VzFbQy50eXBlXSwkPUsud2lkdGgtMipLLmJlemVsWCxKPUsuaGVpZ2h0LTIqSy5iZXplbFksTixxO2lmKCQ8SiYmUTAoQy5jb25maWc/P251bGwpKU49Sy5pbm5lclJhZGl1cy9KLHE9Sy5pbm5lclJhZGl1cy8kO2Vsc2UgTj1LLmlubmVyUmFkaXVzLyQscT1LLmlubmVyUmFkaXVzL0o7bGV0IFE9TipDLmNvbnRhaW5lcldpZHRoLFo9cSpDLmNvbnRhaW5lckhlaWdodCxZPU1hdGguc3FydChNYXRoLm1heChRKlosMCkpO3JldHVybntyeDpRLHJ5Olosckdlb206WX19dmFyIFA5PTEzLHk5PTYyO2Z1bmN0aW9uIGgyKEMpe2xldHtjb250YWluZXJXaWR0aDpLLGNvbnRhaW5lckhlaWdodDokfT1DLEo9KF8pPT5fLnRvRml4ZWQoMyksTj0oXyxIKT0+e2xldCBPPUgsRT1ILHk9eTkvMiooTWF0aC5QSS8xODApLG89MjI1Kk1hdGguUEkvMTgwLHg9byt5LGc9by15LGg9TytfKk1hdGguY29zKHgpLFI9RStfKk1hdGguc2luKHgpLGE9TytfKk1hdGguY29zKGcpLHU9RStfKk1hdGguc2luKGcpLFgxPWBNICR7SihoKX0gJHtKKFIpfSBBICR7SihfKX0gJHtKKF8pfSAwIDAgMSAke0ooYSl9ICR7Sih1KX1gLGQ9YE0gJHtKKGEpfSAke0oodSl9IEEgJHtKKF8pfSAke0ooXyl9IDAgMCAwICR7SihoKX0gJHtKKFIpfWA7cmV0dXJue2Q6WDEsZEZpbGw6ZH19O2lmKCEoSz4wKXx8ISgkPjApKXtsZXQgXz1QOSxIPU1hdGguY2VpbChfKzE0KSx7ZDpPLGRGaWxsOkV9PU4oXyxIKTtyZXR1cm57ZDpPLGRGaWxsOkUsdmlld0JveFNpemU6SH19bGV0e3JHZW9tOnF9PVYzKEMpLFE9TWF0aC5tYXgoMi4yLE1hdGgubWluKDUuMiwwLjAxMSpNYXRoLm1pbihLLCQpKSksWj1xKjAuMzQrUSxZPU1hdGgubWluKEssJCksRz1NYXRoLm1pbigyMixNYXRoLm1heCgxMixZKjAuMDUyKSk7Wj1NYXRoLm1pbigyNCxNYXRoLm1heCgxMixaLEcpKTtsZXQgRD1NYXRoLm1heCgyNixNYXRoLmNlaWwoWisxMykpLHtkOnosZEZpbGw6Qn09TihaLEQpO3JldHVybntkOnosZEZpbGw6Qix2aWV3Qm94U2l6ZTpEfX12YXIgeDI9bzEobnVsbCk7ZnVuY3Rpb24gdDAoQyl7bGV0IEs9aTEoeDIpO2lmKCFLKXRocm93IEVycm9yKGA8U2ltdWxhdG9yVG9vbGJhci4ke0N9PiBtdXN0IGJlIHJlbmRlcmVkIGluc2lkZSA8U2ltdWxhdG9yVG9vbGJhcj5gKTtyZXR1cm4gS312YXIgSTk9e2Rpc3BsYXk6ImZsZXgiLGZsZXhXcmFwOiJ3cmFwIixhbGlnbkl0ZW1zOiJjZW50ZXIiLGp1c3RpZnlDb250ZW50OiJzcGFjZS1iZXR3ZWVuIixnYXA6IjRweCAxMnB4IixwYWRkaW5nOiI4cHggMTJweCIsYm9yZGVyUmFkaXVzOjI0LGJhY2tncm91bmQ6IiMxYzFjMWUiLGJvcmRlcjoiMXB4IHNvbGlkIHJnYmEoMjU1LDI1NSwyNTUsMC4xKSIsYm94U2hhZG93OiIwIDFweCAycHggcmdiYSgwLDAsMCwwLjIpIixtaW5XaWR0aDoyNDAsd2lkdGg6IjEwMCUifTtmdW5jdGlvbiBTOSh7ZXhlYzpDLG9uUm90YXRlOkssb3JpZW50YXRpb246JCxkZXZpY2VVZGlkOkosZGV2aWNlTmFtZTpOLGRldmljZVJ1bnRpbWU6cSxzdHJlYW1pbmc6UT0hMSxkaXNhYmxlZDpaPSExLGNoaWxkcmVuOlksc3R5bGU6RywuLi5WfSl7bGV0IEw9RzAoTiksRD17ZXhlYzpDLG9uUm90YXRlOkssb3JpZW50YXRpb246JCxkZXZpY2VVZGlkOkosZGV2aWNlTmFtZTpOLGRldmljZVJ1bnRpbWU6cSxkZXZpY2VUeXBlOkwsc3RyZWFtaW5nOlEsZGlzYWJsZWQ6Wnx8IUp8fCFRfTtyZXR1cm4gWCh4Mi5Qcm92aWRlcix7dmFsdWU6RCxjaGlsZHJlbjpYKCJkaXYiLHsiZGF0YS1zaW11bGF0b3ItdG9vbGJhciI6ITAsc3R5bGU6ey4uLkk5LC4uLkd9LC4uLlYsY2hpbGRyZW46WX0pfSl9dmFyIGg5PXtkaXNwbGF5OiJmbGV4IixmbGV4RGlyZWN0aW9uOiJjb2x1bW4iLGFsaWduSXRlbXM6ImZsZXgtc3RhcnQiLHRleHRBbGlnbjoibGVmdCIsYmFja2dyb3VuZDoidHJhbnNwYXJlbnQiLGJvcmRlcjoibm9uZSIsY29sb3I6IiNmZmYiLHBhZGRpbmc6IjJweCA0cHgiLG1hcmdpbjoiLTJweCAtNHB4Iixib3JkZXJSYWRpdXM6NixjdXJzb3I6InBvaW50ZXIiLG1pbldpZHRoOjAsbWF4V2lkdGg6IjEwMCUiLGxpbmVIZWlnaHQ6MS4yLGZvbnRGYW1pbHk6ImluaGVyaXQifSx4OT1yMShmdW5jdGlvbih7bmFtZTpLLHN1YnRpdGxlOiQsaGlkZUNoZXZyb246SixzdHlsZTpOLG9uTW91c2VFbnRlcjpxLG9uTW91c2VMZWF2ZTpRLC4uLlp9LFkpe2xldCBHPXQwKCJUaXRsZSIpLFtWLExdPWIoITEpLGs9Sz8/Ry5kZXZpY2VOYW1lPz8iTm8gc2ltdWxhdG9yIixEPSQ/PyhHLmRldmljZVJ1bnRpbWU/Ry5kZXZpY2VSdW50aW1lLnJlcGxhY2UoL1wuLywiICIpOiLigJQiKTtyZXR1cm4gWCgiYnV0dG9uIix7cmVmOlksdHlwZToiYnV0dG9uIiwiZGF0YS1zaW11bGF0b3ItdG9vbGJhci10aXRsZSI6ITAsb25Nb3VzZUVudGVyOih6KT0+e0woITApLHE/Lih6KX0sb25Nb3VzZUxlYXZlOih6KT0+e0woITEpLFE/Lih6KX0sc3R5bGU6ey4uLmg5LGJhY2tncm91bmQ6Vj8icmdiYSgyNTUsMjU1LDI1NSwwLjEpIjoidHJhbnNwYXJlbnQiLC4uLk59LC4uLlosY2hpbGRyZW46W1goInNwYW4iLHtzdHlsZTp7ZGlzcGxheToiaW5saW5lLWZsZXgiLGFsaWduSXRlbXM6ImNlbnRlciIsZ2FwOjQsZm9udFNpemU6MTIsZm9udFdlaWdodDo2MDAsY29sb3I6IiNmZmYiLG1heFdpZHRoOiIxMDAlIixvdmVyZmxvdzoiaGlkZGVuIix0ZXh0T3ZlcmZsb3c6ImVsbGlwc2lzIix3aGl0ZVNwYWNlOiJub3dyYXAifSxjaGlsZHJlbjpbaywhSiYmWCgic3ZnIix7d2lkdGg6IjEwIixoZWlnaHQ6IjEwIix2aWV3Qm94OiIwIDAgMjQgMjQiLGZpbGw6Im5vbmUiLHN0cm9rZToiY3VycmVudENvbG9yIixzdHJva2VXaWR0aDoiMi41IixzdHJva2VMaW5lY2FwOiJyb3VuZCIsc3Ryb2tlTGluZWpvaW46InJvdW5kIixzdHlsZTp7Y29sb3I6InJnYmEoMjU1LDI1NSwyNTUsMC42KSIsZmxleFNocmluazowfSxjaGlsZHJlbjpYKCJwb2x5bGluZSIse3BvaW50czoiNiA5IDEyIDE1IDE4IDkifSl9KV19KSxYKCJzcGFuIix7c3R5bGU6e2ZvbnRTaXplOjEwLGNvbG9yOiJyZ2JhKDI1NSwyNTUsMjU1LDAuNSkiLG1heFdpZHRoOiIxMDAlIixvdmVyZmxvdzoiaGlkZGVuIix0ZXh0T3ZlcmZsb3c6ImVsbGlwc2lzIix3aGl0ZVNwYWNlOiJub3dyYXAifSxjaGlsZHJlbjpEfSldfSl9KSx2OT17ZGlzcGxheToiZmxleCIsYWxpZ25JdGVtczoiY2VudGVyIixnYXA6NCxmbGV4U2hyaW5rOjB9O2Z1bmN0aW9uIGc5KHtzdHlsZTpDLC4uLkt9KXtyZXR1cm4gWCgiZGl2Iix7c3R5bGU6ey4uLnY5LC4uLkN9LC4uLkt9KX12YXIgbTk9e2JhY2tncm91bmQ6InRyYW5zcGFyZW50Iixib3JkZXI6Im5vbmUiLHBhZGRpbmc6Nixib3JkZXJSYWRpdXM6NixjdXJzb3I6InBvaW50ZXIiLGRpc3BsYXk6ImlubGluZS1mbGV4IixhbGlnbkl0ZW1zOiJjZW50ZXIiLGp1c3RpZnlDb250ZW50OiJjZW50ZXIiLGNvbG9yOiJyZ2JhKDI1NSwyNTUsMjU1LDAuOCkiLHRyYW5zaXRpb246ImJhY2tncm91bmQtY29sb3IgMC4xNXMsIGNvbG9yIDAuMTVzIn0sZTA9cjEoZnVuY3Rpb24oe2ZvcmNlRGlzYWJsZWQ6SyxzdHlsZTokLGRpc2FibGVkOkosb25Nb3VzZUVudGVyOk4sb25Nb3VzZUxlYXZlOnEsY2hpbGRyZW46USwuLi5afSxZKXtsZXQgRz1pMSh4MiksVj1KfHxLfHxHPy5kaXNhYmxlZCxbTCxrXT1iKCExKTtyZXR1cm4gWCgiYnV0dG9uIix7cmVmOlksdHlwZToiYnV0dG9uIixkaXNhYmxlZDpWLG9uTW91c2VFbnRlcjooRCk9PntrKCEwKSxOPy4oRCl9LG9uTW91c2VMZWF2ZTooRCk9PntrKCExKSxxPy4oRCl9LHN0eWxlOnsuLi5tOSxjb2xvcjpWPyJyZ2JhKDI1NSwyNTUsMjU1LDAuMjUpIjoicmdiYSgyNTUsMjU1LDI1NSwwLjgpIixiYWNrZ3JvdW5kOkwmJiFWPyJyZ2JhKDI1NSwyNTUsMjU1LDAuMSkiOiJ0cmFuc3BhcmVudCIsY3Vyc29yOlY/Im5vdC1hbGxvd2VkIjoicG9pbnRlciIsLi4uJH0sLi4uWixjaGlsZHJlbjpRfSl9KTtmdW5jdGlvbiBSOSgpe3JldHVyblsndGVsbCBhcHBsaWNhdGlvbiAiU3lzdGVtIEV2ZW50cyIgdG8gdGVsbCBwcm9jZXNzICJTaW11bGF0b3IiIHRvIHNldCBmcm9udG1vc3QgdG8gdHJ1ZScsJ3RlbGwgYXBwbGljYXRpb24gIlN5c3RlbSBFdmVudHMiIHRvIHRlbGwgcHJvY2VzcyAiU2ltdWxhdG9yIiB0byBwZXJmb3JtIGFjdGlvbiAiQVhSYWlzZSIgb2YgKGZpcnN0IHdpbmRvdyB3aG9zZSBuYW1lIGNvbnRhaW5zICJ3YXRjaE9TIiknLCd0ZWxsIGFwcGxpY2F0aW9uICJTeXN0ZW0gRXZlbnRzIiB0byB0ZWxsIHByb2Nlc3MgIlNpbXVsYXRvciIgdG8gY2xpY2sgbWVudSBpdGVtICJIb21lIiBvZiBtZW51ICJEZXZpY2UiIG9mIG1lbnUgYmFyIGl0ZW0gIkRldmljZSIgb2YgbWVudSBiYXIgMSddLm1hcCgoSyk9PmAtZSAnJHtLfSdgKS5yZWR1Y2UoKEssJCk9PmAke0t9ICR7JH1gLCJvc2FzY3JpcHQiKX12YXIgajk9e3BvcnRyYWl0OiJsYW5kc2NhcGVfbGVmdCIsbGFuZHNjYXBlX2xlZnQ6InBvcnRyYWl0X3Vwc2lkZV9kb3duIixwb3J0cmFpdF91cHNpZGVfZG93bjoibGFuZHNjYXBlX3JpZ2h0IixsYW5kc2NhcGVfcmlnaHQ6InBvcnRyYWl0In0scDk9WCgic3ZnIix7d2lkdGg6IjE4IixoZWlnaHQ6IjE4Iix2aWV3Qm94OiIwIDAgMjQgMjQiLGZpbGw6Im5vbmUiLHN0cm9rZToiY3VycmVudENvbG9yIixzdHJva2VXaWR0aDoiMiIsc3Ryb2tlTGluZWNhcDoicm91bmQiLHN0cm9rZUxpbmVqb2luOiJyb3VuZCIsY2hpbGRyZW46WCgicGF0aCIse2Q6Ik0zIDEwLjUgMTIgM2w5IDcuNVYyMGExIDEgMCAwIDEtMSAxaC01di03aC02djdINGExIDEgMCAwIDEtMS0xeiJ9KX0pLGY5PVgoInN2ZyIse3dpZHRoOiIxOCIsaGVpZ2h0OiIxOCIsdmlld0JveDoiMCAwIDI0IDI0IixmaWxsOiJub25lIixzdHJva2U6ImN1cnJlbnRDb2xvciIsc3Ryb2tlV2lkdGg6IjIiLHN0cm9rZUxpbmVjYXA6InJvdW5kIixzdHJva2VMaW5lam9pbjoicm91bmQiLGNoaWxkcmVuOltYKCJwYXRoIix7ZDoiTTE0LjUgNGgtNUw3IDdINGEyIDIgMCAwIDAtMiAydjlhMiAyIDAgMCAwIDIgMmgxNmEyIDIgMCAwIDAgMi0yVjlhMiAyIDAgMCAwLTItMmgtM3oifSksWCgiY2lyY2xlIix7Y3g6IjEyIixjeToiMTMiLHI6IjQifSldfSksbDk9WCgic3ZnIix7d2lkdGg6IjE4IixoZWlnaHQ6IjE4Iix2aWV3Qm94OiIwIDAgMjQgMjQiLGZpbGw6Im5vbmUiLHN0cm9rZToiY3VycmVudENvbG9yIixzdHJva2VXaWR0aDoiMiIsc3Ryb2tlTGluZWNhcDoicm91bmQiLHN0cm9rZUxpbmVqb2luOiJyb3VuZCIseG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIixjaGlsZHJlbjpbWCgicGF0aCIse2Q6Ik0xMiA1SDZhMiAyIDAgMCAwLTIgMnYzIn0pLFgoInBhdGgiLHtkOiJtOSA4IDMtMy0zLTMifSksWCgicGF0aCIse2Q6Ik00IDE0djRhMiAyIDAgMCAwIDIgMmgxMmEyIDIgMCAwIDAgMi0yVjdhMiAyIDAgMCAwLTItMmgtMiJ9KV19KSx1OT1yMShmdW5jdGlvbih7b25DbGljazpLLC4uLiR9LEope2xldCBOPXQwKCJIb21lQnV0dG9uIik7cmV0dXJuIFgoZTAse3JlZjpKLCJhcmlhLWxhYmVsIjoiSG9tZSIsb25DbGljazoocSk9PntpZihLPy4ocSkscS5kZWZhdWx0UHJldmVudGVkKXJldHVybjtpZihOLmRldmljZVR5cGU9PT0id2F0Y2giKU4uZXhlYyhSOSgpKTtlbHNlIE4uZXhlYygic2VydmUtc2ltIGJ1dHRvbiBob21lIil9LC4uLiQsY2hpbGRyZW46cDl9KX0pLG85PXIxKGZ1bmN0aW9uKHtvbkNsaWNrOkssLi4uJH0sSil7bGV0IE49dDAoIlNjcmVlbnNob3RCdXR0b24iKTtyZXR1cm4gWChlMCx7cmVmOkosImFyaWEtbGFiZWwiOiJTY3JlZW5zaG90IixvbkNsaWNrOihxKT0+e2lmKEs/LihxKSxxLmRlZmF1bHRQcmV2ZW50ZWQpcmV0dXJuO2lmKE4uZGV2aWNlVWRpZClOLmV4ZWMoYHhjcnVuIHNpbWN0bCBpbyAke04uZGV2aWNlVWRpZH0gc2NyZWVuc2hvdCB+L0Rlc2t0b3Avc2VydmUtc2ltLXNjcmVlbnNob3QtJChkYXRlICslcykucG5nYCl9LC4uLiQsY2hpbGRyZW46Zjl9KX0pLGQ5PXIxKGZ1bmN0aW9uKHtvbkNsaWNrOkssZm9yY2VEaXNhYmxlZDokLC4uLkp9LE4pe2xldCBxPXQwKCJSb3RhdGVCdXR0b24iKSxRPXEuZGV2aWNlVHlwZT09PSJ3YXRjaCJ8fHEuZGV2aWNlVHlwZT09PSJ2aXNpb24iLFtaLFldPWIoInBvcnRyYWl0Iik7cmV0dXJuIFcoKCk9PntZKHEub3JpZW50YXRpb24/PyJwb3J0cmFpdCIpfSxbcS5kZXZpY2VVZGlkLHEub3JpZW50YXRpb25dKSxYKGUwLHtyZWY6TiwiYXJpYS1sYWJlbCI6IlJvdGF0ZSBkZXZpY2UiLGZvcmNlRGlzYWJsZWQ6JHx8USxvbkNsaWNrOihHKT0+e2lmKEs/LihHKSxHLmRlZmF1bHRQcmV2ZW50ZWQpcmV0dXJuO2lmKCFxLmRldmljZVVkaWR8fFEpcmV0dXJuO2xldCBWPWo5W3Eub3JpZW50YXRpb24/P1pdO2lmKFkoVikscS5vblJvdGF0ZSlxLm9uUm90YXRlKFYpO2Vsc2UgcS5leGVjKGBzZXJ2ZS1zaW0gcm90YXRlICR7Vn0gLWQgJHtxLmRldmljZVVkaWR9YCl9LC4uLkosY2hpbGRyZW46bDl9KX0pLFAxPVM5O1AxLlRpdGxlPXg5O1AxLkFjdGlvbnM9Zzk7UDEuQnV0dG9uPWUwO1AxLkhvbWVCdXR0b249dTk7UDEuU2NyZWVuc2hvdEJ1dHRvbj1vOTtQMS5Sb3RhdGVCdXR0b249ZDk7ZnVuY3Rpb24gajEoe29wZW46Q30pe3JldHVybiBYKCJzdmciLHt3aWR0aDoiMTAiLGhlaWdodDoiMTAiLHZpZXdCb3g6IjAgMCAyNCAyNCIsZmlsbDoibm9uZSIsc3Ryb2tlOiJjdXJyZW50Q29sb3IiLHN0cm9rZVdpZHRoOiIyLjUiLHN0cm9rZUxpbmVjYXA6InJvdW5kIixzdHJva2VMaW5lam9pbjoicm91bmQiLGNsYXNzTmFtZTpgbGVtLWNoZXZyb24gdGV4dC13aGl0ZS81MCBbdHJhbnNpdGlvbjp0cmFuc2Zvcm1fMC4xNXMsY29sb3JfMC4xMnNdICR7Qz8icm90YXRlLTE4MCI6InJvdGF0ZS0wIn1gLGNoaWxkcmVuOlgoInBvbHlsaW5lIix7cG9pbnRzOiI2IDkgMTIgMTUgMTggOSJ9KX0pfWZ1bmN0aW9uIEMyKHtkaXI6Q30pe3JldHVybiBYKCJzdmciLHt3aWR0aDoiOSIsaGVpZ2h0OiI5Iix2aWV3Qm94OiIwIDAgMjQgMjQiLGZpbGw6ImN1cnJlbnRDb2xvciIsY2xhc3NOYW1lOiJtci1bM3B4XSIsY2hpbGRyZW46Qz09PSJ1cCI/WCgicG9seWdvbiIse3BvaW50czoiMTIsNCAyMCwxOCA0LDE4In0pOlgoInBvbHlnb24iLHtwb2ludHM6IjQsNiAyMCw2IDEyLDIwIn0pfSl9ZnVuY3Rpb24gdzAoKXtyZXR1cm4gWCgic3ZnIix7d2lkdGg6IjExIixoZWlnaHQ6IjExIix2aWV3Qm94OiIwIDAgMjQgMjQiLGZpbGw6ImN1cnJlbnRDb2xvciIsY2hpbGRyZW46WCgicG9seWdvbiIse3BvaW50czoiNiw0IDIwLDEyIDYsMjAifSl9KX1mdW5jdGlvbiB2Migpe3JldHVybiBYKCJzdmciLHt3aWR0aDoiMTEiLGhlaWdodDoiMTEiLHZpZXdCb3g6IjAgMCAyNCAyNCIsZmlsbDoiY3VycmVudENvbG9yIixjaGlsZHJlbjpbWCgicmVjdCIse3g6IjYiLHk6IjQiLHdpZHRoOiI0IixoZWlnaHQ6IjE2In0pLFgoInJlY3QiLHt4OiIxNCIseToiNCIsd2lkdGg6IjQiLGhlaWdodDoiMTYifSldfSl9ZnVuY3Rpb24gUDAoKXtyZXR1cm4gWCgic3ZnIix7d2lkdGg6IjEwIixoZWlnaHQ6IjEwIix2aWV3Qm94OiIwIDAgMjQgMjQiLGZpbGw6ImN1cnJlbnRDb2xvciIsY2hpbGRyZW46WCgicmVjdCIse3g6IjUiLHk6IjUiLHdpZHRoOiIxNCIsaGVpZ2h0OiIxNCIscng6IjEuNSJ9KX0pfWZ1bmN0aW9uIGcyKCl7cmV0dXJuIFgoInN2ZyIse3dpZHRoOiIxMiIsaGVpZ2h0OiIxMiIsdmlld0JveDoiMCAwIDI0IDI0IixmaWxsOiJub25lIixzdHJva2U6ImN1cnJlbnRDb2xvciIsc3Ryb2tlV2lkdGg6IjIiLHN0cm9rZUxpbmVjYXA6InJvdW5kIixzdHJva2VMaW5lam9pbjoicm91bmQiLCJhcmlhLWhpZGRlbiI6InRydWUiLGNoaWxkcmVuOltYKCJwYXRoIix7ZDoiTTEyIDZhMiAyIDAgMCAxIDMuNDE0LTEuNDE0bDYgNmEyIDIgMCAwIDEgMCAyLjgyOGwtNiA2QTIgMiAwIDAgMSAxMiAxOHoifSksWCgicGF0aCIse2Q6Ik0yIDZhMiAyIDAgMCAxIDMuNDE0LTEuNDE0bDYgNmEyIDIgMCAwIDEgMCAyLjgyOGwtNiA2QTIgMiAwIDAgMSAyIDE4eiJ9KV19KX1mdW5jdGlvbiBtMigpe3JldHVybiBYKCJzdmciLHt3aWR0aDoiOSIsaGVpZ2h0OiIxNCIsdmlld0JveDoiNCAyIDkgMTMiLGZpbGw6ImN1cnJlbnRDb2xvciIseG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiYXJpYS1oaWRkZW4iOiJ0cnVlIixjaGlsZHJlbjpYKCJwYXRoIix7ZDoiTTYuMDA4NTIgMTQuODA1NEM1Ljg5MTgxIDE0LjkzNSA1Ljc1ODE1IDE0Ljk5OTggNS42MDc1NiAxNC45OTk4QzUuNDU2OTYgMTUuMDAzMyA1LjMyMzMgMTQuOTYxMyA1LjIwNjU5IDE0Ljg3MzdDNS4wOTM2NCAxNC43ODYxIDUuMDI1ODcgMTQuNjcyMyA1LjAwMzI4IDE0LjUzMjJDNC45ODQ0NiAxNC4zOTIxIDUuMDQ2NTggMTQuMjQ1IDUuMTg5NjUgMTQuMDkwOUw2Ljk0NTk5IDEyLjE1MjJMNy4yNDUzIDEwLjg3NTVMOC4xOTk3MSAxMS45ODkzTDguMDU4NTMgMTIuMzkzOUM4LjAyMDg4IDEyLjQ5NTUgNy45ODY5OSAxMi41NzA4IDcuOTU2ODcgMTIuNjE5OEM3LjkzMDUyIDEyLjY2ODggNy44NzQwNCAxMi43NDA2IDcuNzg3NDUgMTIuODM1Mkw2LjAwODUyIDE0LjgwNTRaTTEwLjM0NTcgMTQuNjQyNUw5LjEwMzI5IDEyLjMwNDZDOS4wNzY5NCAxMi4yNjI1IDkuMDU0MzUgMTIuMjIyMyA5LjAzNTUzIDEyLjE4MzdDOS4wMTY3IDEyLjE0NTIgOC45NzcxNyAxMi4wOTA5IDguOTE2OTMgMTIuMDIwOUw3LjcxOTY4IDEwLjYxODFDNy40OTM3OSAxMC4zNTU0IDcuMzM3NTQgMTAuMTI5NSA3LjI1MDk1IDkuOTQwMzRDNy4xNjQzNSA5Ljc0NzcgNy4xMzQyNCA5LjQ5OTAxIDcuMTYwNTkgOS4xOTQyOUw3LjI2MjI0IDcuOTgwNjVDNy4yNjk3NyA3LjkwNzEgNy4yMzIxMiA3Ljg1NDU2IDcuMTQ5MjkgNy44MjMwNEM3LjA2NjQ3IDcuNzkxNTEgNi45ODU1MiA3LjgwOTAzIDYuOTA2NDYgNy44NzU1N0w2LjQ3MTYxIDguMjQzMzRMNi4zNDE3MiA5LjY3MjM5QzYuMzIyODkgOS44NDc1MiA2LjI2NDU0IDkuOTc4ODcgNi4xNjY2NSAxMC4wNjY0QzYuMDY4NzYgMTAuMTU0IDUuOTM4ODcgMTAuMTkyNSA1Ljc3Njk4IDEwLjE4MkM1LjYxMTMyIDEwLjE3NSA1LjQ4MzMxIDEwLjExOSA1LjM5Mjk1IDEwLjAxMzlDNS4zMDYzNiA5LjkwODgyIDUuMjY4NzEgOS43NzM5NyA1LjI4MDAxIDkuNjA5MzVMNS4zODczMSA4LjMwNjM5QzUuNDAyMzcgOC4xMjc3NiA1LjQzODEzIDcuOTc1NCA1LjQ5NDYxIDcuODQ5MzFDNS41NTQ4NSA3LjcyMzIxIDUuNjYwMjYgNy41OTE4NyA1LjgxMDg2IDcuNDU1MjdMNi43MTQ0NSA2LjYyNTE2QzcuMDA0MzUgNi4zNjI0NyA3LjI2OTc3IDYuMTYxMDcgNy41MTA3MyA2LjAyMDk2QzcuNzUxNjggNS44NzczNiA4LjAyODQxIDUuODA1NTYgOC4zNDA5IDUuODA1NTZDOC43NTg4IDUuODA1NTYgOS4wNzg4MiA1LjkzMzQgOS4zMDA5NSA2LjE4OTA5QzkuNTI2ODUgNi40NDQ3OCA5LjYyNDc0IDYuNzYxNzYgOS41OTQ2MiA3LjE0MDA0TDkuNDc2MDIgOC43MzE5NUM5LjQ1MzQzIDkuMDE1NjYgOS40MTk1NSA5LjI2MjU5IDkuMzc0MzcgOS40NzI3NUM5LjMyOTE5IDkuNjgyOSA5LjI1Mzg5IDkuOTI5ODMgOS4xNDg0NyAxMC4yMTM1TDkuMDkyIDEwLjM2MDZMOS44NjU2OSAxMS4zNzk5QzkuOTIyMTcgMTEuNDUzNCA5Ljk4MDUyIDExLjUzNCAxMC4wNDA4IDExLjYyMTZDMTAuMTAxIDExLjcwOTEgMTAuMTUzNyAxMS43OTY3IDEwLjE5ODkgMTEuODg0M0wxMS40MDc0IDE0LjE2NDRDMTEuNTA1MyAxNC4zNTAxIDExLjUyNDEgMTQuNTExMiAxMS40NjM5IDE0LjY0NzhDMTEuNDAzNyAxNC43ODQ0IDExLjMwMiAxNC44ODI1IDExLjE1ODkgMTQuOTQyQzExLjAxOTYgMTUuMDAxNSAxMC44NzA5IDE1LjAxMDMgMTAuNzEyOCAxNC45NjgzQzEwLjU1ODQgMTQuOTI2MiAxMC40MzYxIDE0LjgxNzcgMTAuMzQ1NyAxNC42NDI1Wk0xMi40MDcgNy45NjQ4OUMxMi41ODQgNy45NjQ4OSAxMi43MjcgOC4wMTA0MiAxMi44MzYyIDguMTAxNDlDMTIuOTQ1NCA4LjE4OTA1IDEzIDguMzA2MzkgMTMgOC40NTM1QzEzIDguNjExMTEgMTIuOTQ1NCA4LjczMzcgMTIuODM2MiA4LjgyMTI3QzEyLjczMDggOC45MDg4MyAxMi41ODc3IDguOTUyNjEgMTIuNDA3IDguOTUyNjFIMTEuMTMwN0MxMC45NTM4IDguOTUyNjEgMTAuODE0NSA4LjkzNjg1IDEwLjcxMjggOC45MDUzM0MxMC42MTEyIDguODcwMyAxMC41MTMzIDguODA3MjYgMTAuNDE5MSA4LjcxNjE5TDEwLjA1MjEgOC4zNzk5NEwxMC4xNDI0IDcuMDQwMjFMMTEuMDM0NyA3Ljk2NDg5SDEyLjQwN1pNOS4wMDE2NCA1LjMxMTY5QzguNzcxOTggNS4zMTE2OSA4LjU2MzAzIDUuMjYwOTEgOC4zNzQ3OCA1LjE1OTMzQzguMTg2NTMgNS4wNTQyNiA4LjAzNTk0IDQuOTE0MTUgNy45MjI5OSA0LjczOTAzQzcuODEzODEgNC41NjM5IDcuNzU5MjEgNC4zNjk1IDcuNzU5MjEgNC4xNTU4NUM3Ljc1OTIxIDMuOTQyMTkgNy44MTM4MSAzLjc0NzggNy45MjI5OSAzLjU3MjY3QzguMDM1OTQgMy4zOTc1NCA4LjE4NjUzIDMuMjU5MTkgOC4zNzQ3OCAzLjE1NzYyQzguNTYzMDMgMy4wNTI1NCA4Ljc3MTk4IDMgOS4wMDE2NCAzQzkuMjMxMyAzIDkuNDQwMjYgMy4wNTI1NCA5LjYyODUgMy4xNTc2MkM5LjgxNjc1IDMuMjU5MTkgOS45NjU0NiAzLjM5NzU0IDEwLjA3NDYgMy41NzI2N0MxMC4xODc2IDMuNzQ3OCAxMC4yNDQxIDMuOTQyMTkgMTAuMjQ0MSA0LjE1NTg1QzEwLjI0NDEgNC4zNjk1IDEwLjE4NzYgNC41NjM5IDEwLjA3NDYgNC43MzkwM0M5Ljk2NTQ2IDQuOTE0MTUgOS44MTY3NSA1LjA1NDI2IDkuNjI4NSA1LjE1OTMzQzkuNDQwMjYgNS4yNjA5MSA5LjIzMTMgNS4zMTE2OSA5LjAwMTY0IDUuMzExNjlaIn0pfSl9ZnVuY3Rpb24gUjIoKXtyZXR1cm4gWCgic3ZnIix7d2lkdGg6IjExIixoZWlnaHQ6IjE0Iix2aWV3Qm94OiIyNiAxIDEyIDE0IixmaWxsOiJjdXJyZW50Q29sb3IiLHhtbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsImFyaWEtaGlkZGVuIjoidHJ1ZSIsY2hpbGRyZW46WCgicGF0aCIse2Q6Ik0zMy4yNDM3IDQuNTg0NTlDMzMuMDAwOCA0LjU4NDU5IDMyLjc4MTcgNC41MjcyOCAzMi41ODY2IDQuNDEyNjhDMzIuMzkxNSA0LjI5NDEyIDMyLjIzNDIgNC4xMzgwMSAzMi4xMTQ3IDMuOTQ0MzdDMzEuOTk5MiAzLjc0Njc3IDMxLjk0MTQgMy41Mjk0MSAzMS45NDE0IDMuMjkyMjlDMzEuOTQxNCAzLjA1MTIyIDMxLjk5OTIgMi44MzM4NyAzMi4xMTQ3IDIuNjQwMjJDMzIuMjM0MiAyLjQ0NjU3IDMyLjM5MTUgMi4yOTI0NSAzMi41ODY2IDIuMTc3ODRDMzIuNzgxNyAyLjA1OTI4IDMzLjAwMDggMiAzMy4yNDM3IDJDMzMuNDgyNiAyIDMzLjY5OTcgMi4wNTkyOCAzMy44OTQ4IDIuMTc3ODRDMzQuMDkzOSAyLjI5MjQ1IDM0LjI1MTIgMi40NDY1NyAzNC4zNjY3IDIuNjQwMjJDMzQuNDg2MiAyLjgzMzg3IDM0LjU0NTkgMy4wNTEyMiAzNC41NDU5IDMuMjkyMjlDMzQuNTQ1OSAzLjUyOTQxIDM0LjQ4NjIgMy43NDY3NyAzNC4zNjY3IDMuOTQ0MzdDMzQuMjUxMiA0LjEzODAxIDM0LjA5MzkgNC4yOTQxMiAzMy44OTQ4IDQuNDEyNjhDMzMuNjk5NyA0LjUyNzI4IDMzLjQ4MjYgNC41ODQ1OSAzMy4yNDM3IDQuNTg0NTlaTTMxLjIwMDcgOS43NDE5MUMzMS4wNzMzIDkuNjcwNzcgMzAuOTQxOSA5LjU5NTY4IDMwLjgwNjUgOS41MTY2NEMzMC42NzUgOS40Mzc2IDMwLjU1OTYgOS4zNDI3NiAzMC40NiA5LjIzMjFDMzAuMzYwNCA5LjExNzQ5IDMwLjI5MjcgOC45NzcyIDMwLjI1NjkgOC44MTEyMkMzMC4yMjUgOC42NDEyOCAzMC4yNDQ5IDguNDI5ODUgMzAuMzE2NiA4LjE3NjkzTDMwLjgwNjUgNi40ODE1M0MzMC44MzgzIDYuMzY2OTIgMzAuODE4NCA2LjI3OTk4IDMwLjc0NjcgNi4yMjA3QzMwLjY3OSA2LjE1NzQ3IDMwLjU5NzQgNi4xMjk4MSAzMC41MDE4IDYuMTM3NzFMMjkuNjU5NSA2LjE5Njk5TDI5LjQwMjcgNy45MjIwMkMyOS4zNzg4IDguMTA3NzcgMjkuMzE1MSA4LjI0NjA5IDI5LjIxMTUgOC4zMzY5OEMyOS4xMDggOC40Mjc4OCAyOC45NzI2IDguNDY1NDIgMjguODA1MyA4LjQ0OTYxQzI4LjY0MiA4LjQzMzggMjguNTE4NiA4LjM2NjYyIDI4LjQzNDkgOC4yNDgwNkMyOC4zNTEzIDguMTI5NSAyOC4zMjE0IDcuOTc3MzUgMjguMzQ1MyA3Ljc5MTYxTDI4LjYyNjEgNS42ODEyNkMyOC42NSA1LjUxMTMyIDI4LjcxNTcgNS4zNzQ5OCAyOC44MjMyIDUuMjcyMjNDMjguOTMwOCA1LjE2OTQ4IDI5LjA2ODEgNS4xMTIxNyAyOS4yMzU0IDUuMTAwMzJMMzEuMzMyMSA0Ljk1MjEyQzMxLjg4MTcgNC45MTI2IDMyLjMzNTcgNC45Njk5IDMyLjY5NDEgNS4xMjQwM0MzMy4wNTI1IDUuMjc4MTYgMzMuMzY3MSA1LjUzODk5IDMzLjYzNzkgNS45MDY1MkwzNC42NzE0IDcuMzIzM0wzNi4xNzA4IDYuNjY1M0MzNi4zMzggNi41OTAyMSAzNi40ODkzIDYuNTc0NCAzNi42MjQ4IDYuNjE3ODdDMzYuNzYwMiA2LjY1NzM5IDM2Ljg2NTcgNi43NTIyNCAzNi45NDE0IDYuOTAyNDJDMzcuMDEzIDcuMDUyNTkgMzcuMDE5IDcuMTk0ODYgMzYuOTU5MyA3LjMyOTIzQzM2LjkwMzUgNy40NjM2IDM2Ljc5MiA3LjU2ODMyIDM2LjYyNDggNy42NDM0MUwzNC43MzExIDguNDc5MjVDMzQuNjAzNyA4LjUzODUzIDM0LjQ3NDMgOC41NTAzOSAzNC4zNDI4IDguNTE0ODJDMzQuMjE1NCA4LjQ3NTMgMzQuMTEzOCA4LjQwMDIxIDM0LjAzODIgOC4yODk1NkwzMy4zODExIDcuMzM1MTZDMzMuMzEzNCA3LjI0MDMxIDMzLjIyOTggNy4xOTg4MSAzMy4xMzAyIDcuMjEwNjdDMzMuMDMwNiA3LjIyMjUzIDMyLjk2NDkgNy4yODM3OCAzMi45MzMxIDcuMzk0NDRMMzIuNDkxIDguOTI5NzhMMzQuNzMxMSAxMC4zODgxQzM0Ljg0MjYgMTAuNDU5MiAzNC45MjIzIDEwLjU1NiAzNC45NzAxIDEwLjY3ODVDMzUuMDE3OSAxMC44MDEgMzUuMDI5OCAxMC45MjU1IDM1LjAwNTkgMTEuMDUyQzM0Ljk4NiAxMS4xNzQ1IDM0LjkyODIgMTEuMjc1MyAzNC44MzI3IDExLjM1NDNMMzIuNzcxOCAxMy4wOTcxQzMyLjYwODUgMTMuMjM1NCAzMi40NDUyIDEzLjI5ODcgMzIuMjgxOSAxMy4yODY4QzMyLjEyMjYgMTMuMjc1IDMxLjk5MzIgMTMuMjEzNyAzMS44OTM3IDEzLjEwMzFDMzEuNzk4MSAxMi45OTY0IDMxLjc1NDMgMTIuODY1OSAzMS43NjIyIDEyLjcxMThDMzEuNzcwMiAxMi41NTM3IDMxLjg1MzggMTIuNDA3NSAzMi4wMTMxIDEyLjI3MzFMMzMuNDg4NiAxMS4wMTY0TDMxLjIwMDcgOS43NDE5MVpNMjcuMjA0NCAxNC44NjM3QzI3LjA4NDkgMTQuNzU3IDI3LjAxNzIgMTQuNjE4NiAyNy4wMDEzIDE0LjQ0ODdDMjYuOTg5MyAxNC4yNzg4IDI3LjA2MSAxNC4xMTY3IDI3LjIxNjMgMTMuOTYyNkwyOS4yMjM1IDExLjk3NjdMMjkuOTM0MyA5LjQ4MTA4QzMwLjA0MTggOS42MTU0NCAzMC4xNzUzIDkuNzQ1ODYgMzAuMzM0NSA5Ljg3MjMyQzMwLjQ5NzggOS45OTQ4MyAzMC42OTMgMTAuMTE3MyAzMC45MiAxMC4yMzk5TDMxLjExNzEgMTAuMzQ2NkwzMC4zMDQ3IDEyLjQzMzJDMzAuMjUyOSAxMi41NTU3IDMwLjIwOTEgMTIuNjQwNyAzMC4xNzMzIDEyLjY4ODFDMzAuMTQxNCAxMi43MzU1IDMwLjA4NTYgMTIuNzk4OCAzMC4wMDYgMTIuODc3OEwyOC4wNzA2IDE0Ljc4MDdDMjcuOTE5MiAxNC45MjY5IDI3Ljc2MzkgMTUgMjcuNjA0NiAxNUMyNy40NDkzIDE1IDI3LjMxNTkgMTQuOTU0NiAyNy4yMDQ0IDE0Ljg2MzdaIn0pfSl9ZnVuY3Rpb24gajIoKXtyZXR1cm4gWCgic3ZnIix7d2lkdGg6IjE0IixoZWlnaHQ6IjE0Iix2aWV3Qm94OiI0OSAzIDE2IDEyIixmaWxsOiJjdXJyZW50Q29sb3IiLHhtbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsImFyaWEtaGlkZGVuIjoidHJ1ZSIsY2hpbGRyZW46WCgicGF0aCIse2Q6Ik01Ny4wMDI4IDExLjk0OUM1Ni44NDggMTEuOTQ5IDU2LjcxNzIgMTEuODk4NyA1Ni42MTAzIDExLjc5OEM1Ni41MDM1IDExLjY5MzkgNTYuNDUwMSAxMS41NzA3IDU2LjQ1MDEgMTEuNDI4NFY5LjAyODYzTDU0LjQyMTYgNy4xMDc3NkM1NC4yMjI3IDYuOTIwMzUgNTQuMDk1NSA2LjY5ODI1IDU0LjA0MDMgNi40NDE0NEM1My45ODUgNi4xODExNiA1NC4wMTA4IDUuOTI3ODIgNTQuMTE3NiA1LjY4MTQyQzU0LjIyODIgNS40Mzg0OSA1NC4zOTc3IDUuMjQ0MTQgNTQuNjI2MSA1LjA5ODM5QzU0Ljg1ODMgNC45NDkxNiA1NS4xMTYyIDQuODc0NTQgNTUuMzk5OSA0Ljg3NDU0SDU4LjExMzdDNTguNDIzMiA0Ljg3NDU0IDU4LjY4NDggNC45NzY5MiA1OC44OTg1IDUuMTgxNjhDNTkuMTE1OSA1LjM4Mjk2IDU5LjIyNDYgNS42MjkzNiA1OS4yMjQ2IDUuOTIwODdWNy43NjM2Nkg2MC44OTkzQzYxLjA1MDQgNy43NjM2NiA2MS4xNzk0IDcuODEzOTkgNjEuMjg2MiA3LjkxNDYzQzYxLjM5MzEgOC4wMTUyNyA2MS40NDY1IDguMTM4NDcgNjEuNDQ2NSA4LjI4NDIzQzYxLjQ0NjUgOC40MjY1MSA2MS4zOTMxIDguNTQ3OTggNjEuMjg2MiA4LjY0ODYyQzYxLjE3OTQgOC43NDkyNiA2MS4wNTA0IDguNzk5NTggNjAuODk5MyA4Ljc5OTU4SDU4LjY3MTlDNTguNTIwOSA4Ljc5OTU4IDU4LjM5MDEgOC43NDkyNiA1OC4yNzk1IDguNjQ4NjJDNTguMTcyNyA4LjU0Nzk4IDU4LjExOTIgOC40MjY1MSA1OC4xMTkyIDguMjg0MjNWNi45ODgwM0M1OC4xMTkyIDYuOTE4NjIgNTguMDk5IDYuODU0NDIgNTguMDU4NCA2Ljc5NTQyQzU4LjAxNzkgNi43MzI5NSA1Ny45NDQyIDYuNzAxNzIgNTcuODM3MyA2LjcwMTcySDU2LjA2MzJDNTUuOTkzMiA2LjcwMTcyIDU1Ljk0NTMgNi43Mjk0OCA1NS45MTk1IDYuNzg1MDFDNTUuODk3NCA2LjgzNzA2IDU1LjkwODQgNi44ODczOSA1NS45NTI2IDYuOTM1OTdMNTcuNDAwNyA4LjQ1NjAxQzU3LjUwMzkgOC41NjM2IDU3LjU1NTUgOC42ODE1OSA1Ny41NTU1IDguODA5OTlWMTEuNDI4NEM1Ny41NTU1IDExLjU3MDcgNTcuNTAwMiAxMS42OTM5IDU3LjM4OTcgMTEuNzk4QzU3LjI4MjggMTEuODk4NyA1Ny4xNTM4IDExLjk0OSA1Ny4wMDI4IDExLjk0OVpNNTMuMDAxMiAxNEM1Mi41ODQ4IDE0IDUyLjE5NDIgMTMuOTI3MSA1MS44Mjk1IDEzLjc4MTRDNTEuNDY4NCAxMy42MzU2IDUxLjE0OTYgMTMuNDMyNiA1MC44NzMzIDEzLjE3MjNDNTAuNjAwNiAxMi45MTIgNTAuMzg2OSAxMi42MTE4IDUwLjIzMjEgMTIuMjcxN0M1MC4wNzc0IDExLjkyODIgNTAgMTEuNTYwMyA1MCAxMS4xNjgxQzUwIDEwLjc3NiA1MC4wNzc0IDEwLjQwOTkgNTAuMjMyMSAxMC4wNjk4QzUwLjM4NjkgOS43MjYxOCA1MC42MDA2IDkuNDI0MjYgNTAuODczMyA5LjE2Mzk4QzUxLjE0OTYgOC45MDM3IDUxLjQ2ODQgOC43MDA2OCA1MS44Mjk1IDguNTU0OTJDNTIuMTk0MiA4LjQwOTE2IDUyLjU4NDggOC4zMzYyOCA1My4wMDEyIDguMzM2MjhDNTMuNDIxMiA4LjMzNjI4IDUzLjgxMTggOC40MDkxNiA1NC4xNzI5IDguNTU0OTJDNTQuNTM3NyA4LjcwMDY4IDU0Ljg1NjQgOC45MDM3IDU1LjEyOTEgOS4xNjM5OEM1NS40MDU0IDkuNDI0MjYgNTUuNjIxIDkuNzI2MTggNTUuNzc1OCAxMC4wNjk4QzU1LjkzMDUgMTAuNDA5OSA1Ni4wMDc5IDEwLjc3NiA1Ni4wMDc5IDExLjE2ODFDNTYuMDA3OSAxMS41NjAzIDU1LjkzMDUgMTEuOTI4MiA1NS43NzU4IDEyLjI3MTdDNTUuNjIxIDEyLjYxMTggNTUuNDA1NCAxMi45MTIgNTUuMTI5MSAxMy4xNzIzQzU0Ljg1NjQgMTMuNDMyNiA1NC41Mzc3IDEzLjYzNTYgNTQuMTcyOSAxMy43ODE0QzUzLjgxMTggMTMuOTI3MSA1My40MjEyIDE0IDUzLjAwMTIgMTRaTTUzLjAwMTIgMTMuMjY2QzUzLjQxMDIgMTMuMjY2IDUzLjc4MjMgMTMuMTcwNiA1NC4xMTc2IDEyLjk3OTdDNTQuNDU2NiAxMi43OTIzIDU0LjcyNTYgMTIuNTQwNyA1NC45MjQ2IDEyLjIyNDlDNTUuMTI3MyAxMS45MDU2IDU1LjIyODYgMTEuNTUzNCA1NS4yMjg2IDExLjE2ODFDNTUuMjI4NiAxMC43ODI5IDU1LjEyNzMgMTAuNDMyNCA1NC45MjQ2IDEwLjExNjZDNTQuNzI1NiA5Ljc5NzMzIDU0LjQ1NjYgOS41NDM5OSA1NC4xMTc2IDkuMzU2NTlDNTMuNzgyMyA5LjE2NTcxIDUzLjQxMDIgOS4wNzAyOCA1My4wMDEyIDkuMDcwMjhDNTIuNTk1OSA5LjA3MDI4IDUyLjIyMzcgOS4xNjU3MSA1MS44ODQ3IDkuMzU2NTlDNTEuNTQ5NCA5LjU0Mzk5IDUxLjI4MDQgOS43OTczMyA1MS4wNzc4IDEwLjExNjZDNTAuODc4OCAxMC40MzI0IDUwLjc3OTMgMTAuNzgyOSA1MC43NzkzIDExLjE2ODFDNTAuNzc5MyAxMS41NTM0IDUwLjg3ODggMTEuOTA1NiA1MS4wNzc4IDEyLjIyNDlDNTEuMjgwNCAxMi41NDA3IDUxLjU0OTQgMTIuNzkyMyA1MS44ODQ3IDEyLjk3OTdDNTIuMjIzNyAxMy4xNzA2IDUyLjU5NTkgMTMuMjY2IDUzLjAwMTIgMTMuMjY2Wk02Mi40ODAxIDkuNjExNjZDNjIuMzYyMiA5LjUxNDQ5IDYyLjMwMTQgOS40MTU1OCA2Mi4yOTc3IDkuMzE0OTRDNjIuMjk3NyA5LjIxMDgzIDYyLjMzMDggOS4xMjQwNyA2Mi4zOTcyIDkuMDU0NjZDNjIuNDY3MiA4Ljk4NTI1IDYyLjU1MzggOC45NDUzNCA2Mi42NTY5IDguOTM0OTNDNjIuNzYzOCA4LjkyMTA1IDYyLjg2ODggOC45NTU3NSA2Mi45NzIgOS4wMzkwNEM2My4yODg5IDkuMzAyNzkgNjMuNTM5NCA5LjYxNjg3IDYzLjcyMzYgOS45ODEyNkM2My45MDc5IDEwLjM0NTcgNjQgMTAuNzQxMyA2NCAxMS4xNjgxQzY0IDExLjU2MDMgNjMuOTIyNiAxMS45MjgyIDYzLjc2NzkgMTIuMjcxN0M2My42MTMxIDEyLjYxMTggNjMuMzk3NiAxMi45MTIgNjMuMTIxMiAxMy4xNzIzQzYyLjg0ODUgMTMuNDMyNiA2Mi41Mjk4IDEzLjYzNTYgNjIuMTY1IDEzLjc4MTRDNjEuODAzOSAxMy45MjcxIDYxLjQxNTIgMTQgNjAuOTk4OCAxNEM2MC41ODI0IDE0IDYwLjE5MTkgMTMuOTI3MSA1OS44MjcxIDEzLjc4MTRDNTkuNDYyMyAxMy42MzU2IDU5LjE0MTcgMTMuNDMyNiA1OC44NjU0IDEzLjE3MjNDNTguNTkyNyAxMi45MTIgNTguMzc5IDEyLjYxMTggNTguMjI0MiAxMi4yNzE3QzU4LjA2OTUgMTEuOTI4MiA1Ny45OTIxIDExLjU2MDMgNTcuOTkyMSAxMS4xNjgxQzU3Ljk5MjEgMTAuOTYzNCA1OC4wMTQyIDEwLjc2NTYgNTguMDU4NCAxMC41NzQ3QzU4LjEwNjMgMTAuMzgwNCA1OC4xNzI3IDEwLjE5MyA1OC4yNTc0IDEwLjAxMjVDNTguMzA5IDkuOTAxNDQgNTguMzgwOCA5LjgzMDMgNTguNDczIDkuNzk5MDZDNTguNTY4OCA5Ljc2NDM2IDU4LjY2MjcgOS43NjQzNiA1OC43NTQ4IDkuNzk5MDZDNTguODUwNiA5LjgzMDMgNTguOTIyNSA5Ljg5Mjc2IDU4Ljk3MDQgOS45ODY0N0M1OS4wMTgzIDEwLjA4MDIgNTkuMDEwOSAxMC4xOTgyIDU4Ljk0ODMgMTAuMzQwNEM1OC44MzA0IDEwLjYwMDcgNTguNzcxNCAxMC44NzY2IDU4Ljc3MTQgMTEuMTY4MUM1OC43NzE0IDExLjU1MzQgNTguODcwOSAxMS45MDU2IDU5LjA2OTkgMTIuMjI0OUM1OS4yNzI1IDEyLjU0MDcgNTkuNTQxNSAxMi43OTIzIDU5Ljg3NjggMTIuOTc5N0M2MC4yMTU4IDEzLjE3MDYgNjAuNTg5OCAxMy4yNjYgNjAuOTk4OCAxMy4yNjZDNjEuNDA3OCAxMy4yNjYgNjEuNzggMTMuMTcwNiA2Mi4xMTUzIDEyLjk3OTdDNjIuNDUwNiAxMi43OTIzIDYyLjcxNzcgMTIuNTQwNyA2Mi45MTY3IDEyLjIyNDlDNjMuMTE5NCAxMS45MDU2IDYzLjIyMDcgMTEuNTUzNCA2My4yMjA3IDExLjE2ODFDNjMuMjIwNyAxMC44NTkzIDYzLjE1MjUgMTAuNTcxMiA2My4wMTYyIDEwLjMwNEM2Mi44ODM1IDEwLjAzMzMgNjIuNzA0OCA5LjgwMjUzIDYyLjQ4MDEgOS42MTE2NlpNNjAuOTk4OCA2LjI3NDg2QzYwLjc3NCA2LjI3NDg2IDYwLjU2OTUgNi4yMjQ1NCA2MC4zODUzIDYuMTIzODlDNjAuMjAxMSA2LjAxOTc4IDYwLjA1MzcgNS44ODI3IDU5Ljk0MzIgNS43MTI2NUM1OS44MzYzIDUuNTM5MTMgNTkuNzgyOSA1LjM0NjUyIDU5Ljc4MjkgNS4xMzQ4M0M1OS43ODI5IDQuOTI2NiA1OS44MzYzIDQuNzM3NDYgNTkuOTQzMiA0LjU2NzQxQzYwLjA1MzcgNC4zOTM4OSA2MC4yMDExIDQuMjU2ODEgNjAuMzg1MyA0LjE1NjE3QzYwLjU2OTUgNC4wNTIwNiA2MC43NzQgNCA2MC45OTg4IDRDNjEuMjE5OSA0IDYxLjQyMDcgNC4wNTIwNiA2MS42MDEzIDQuMTU2MTdDNjEuNzgxOCA0LjI1NjgxIDYxLjkyNTUgNC4zOTM4OSA2Mi4wMzI0IDQuNTY3NDFDNjIuMTQyOSA0LjczNzQ2IDYyLjE5ODIgNC45MjY2IDYyLjE5ODIgNS4xMzQ4M0M2Mi4xOTgyIDUuMzQ2NTIgNjIuMTQyOSA1LjUzOTEzIDYyLjAzMjQgNS43MTI2NUM2MS45MjU1IDUuODgyNyA2MS43ODE4IDYuMDE5NzggNjEuNjAxMyA2LjEyMzg5QzYxLjQyMDcgNi4yMjQ1NCA2MS4yMTk5IDYuMjc0ODYgNjAuOTk4OCA2LjI3NDg2WiJ9KX0pfWZ1bmN0aW9uIHAyKCl7cmV0dXJuIFgoInN2ZyIse3dpZHRoOiIxNiIsaGVpZ2h0OiIxNCIsdmlld0JveDoiNzAgNSAxOCA5IixmaWxsOiJjdXJyZW50Q29sb3IiLHhtbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsImFyaWEtaGlkZGVuIjoidHJ1ZSIsY2hpbGRyZW46WCgicGF0aCIse2Q6Ik04NS41NzIgMTIuMTAzOEM4Ni4wNiAxMi4xMDM4IDg2LjQyMDcgMTEuOTg5MiA4Ni42NTQyIDExLjc2MDFDODYuODg0NyAxMS41MjgxIDg3IDExLjE2NDEgODcgMTAuNjY4MVYxMC4xMTEyQzg3IDkuNzY5MDEgODYuOTIwNyA5LjQ2MzAyIDg2Ljc2MiA5LjE5MzI5Qzg2LjYwMzMgOC45MjA2NSA4Ni4zNzU4IDguNjk3MzMgODYuMDc5NCA4LjUyMzMxQzg1Ljc4MDEgOC4zNDkyOSA4NS40MjIzIDguMjM3NjIgODUuMDA2MiA4LjE4ODMyTDgzLjAxNjggNy45NTMzOUw4MS4xOTgxIDYuODQ4MzVDODAuOTIyNyA2LjY4MDEzIDgwLjY2MDggNi41NDIzNyA4MC40MTIzIDYuNDM1MDVDODAuMTYwOCA2LjMyNDg0IDc5Ljg5NzQgNi4yMzc4MyA3OS42MjE5IDYuMTc0MDJDNzkuMzQ2NSA2LjExMDIxIDc5LjAzODIgNi4wNjUyNiA3OC42OTY5IDYuMDM5MTVDNzguMzUyNiA2LjAxMzA1IDc3Ljk1MTQgNiA3Ny40OTM0IDZINzYuODEwOEM3Ni4zODg3IDYgNzUuOTk1IDYuMDQ5MzEgNzUuNjI5OCA2LjE0NzkyQzc1LjI2MTYgNi4yNDM2MyA3NC45MTg4IDYuMzcxMjUgNzQuNjAxNSA2LjUzMDc2Qzc0LjI4MTEgNi42OTAyOCA3My45ODYyIDYuODY1NzYgNzMuNzE2OCA3LjA1NzE4QzczLjQ0NDQgNy4yNDg2IDczLjE5NTkgNy40MzcxMiA3Mi45NzE0IDcuNjIyNzVMNzIuMjU3NCA3Ljg1MzMzQzcxLjgzMjMgNy45ODY3NCA3MS41MTY0IDguMTgzOTcgNzEuMzA5OSA4LjQ0NUM3MS4xMDMzIDguNzAzMTMgNzEgOS4wMzM3NyA3MSA5LjQzNjkyVjEwLjY0MkM3MSAxMS4xNDY3IDcxLjExNTMgMTEuNTE2NSA3MS4zNDU4IDExLjc1MTRDNzEuNTc2MyAxMS45ODYzIDcxLjkzNyAxMi4xMDM4IDcyLjQyOCAxMi4xMDM4SDcyLjcxNTRDNzIuNzAwNCAxMi4wMzcxIDcyLjY4ODUgMTEuOTcwNCA3Mi42Nzk1IDExLjkwMzdDNzIuNjcwNSAxMS44MzQxIDcyLjY2NiAxMS43NjQ1IDcyLjY2NiAxMS42OTQ4QzcyLjY2NiAxMS4zNTU1IDcyLjc0OTggMTEuMDQ5NSA3Mi45MTc1IDEwLjc3NjlDNzMuMDg1MSAxMC41MDQyIDczLjMxMTIgMTAuMjg4MiA3My41OTU2IDEwLjEyODdDNzMuODc3IDkuOTY2MjMgNzQuMTkyOCA5Ljg4NTAyIDc0LjU0MzEgOS44ODUwMkM3NC44OTA0IDkuODg1MDIgNzUuMjA2MiA5Ljk2NjIzIDc1LjQ5MDYgMTAuMTI4N0M3NS43NzIgMTAuMjg4MiA3NS45OTY1IDEwLjUwNDIgNzYuMTY0MiAxMC43NzY5Qzc2LjMzMTggMTEuMDQ5NSA3Ni40MTU3IDExLjM1NTUgNzYuNDE1NyAxMS42OTQ4Qzc2LjQxNTcgMTEuNzY0NSA3Ni40MTEyIDExLjgzNDEgNzYuNDAyMiAxMS45MDM3Qzc2LjM5MzIgMTEuOTcwNCA3Ni4zODI3IDEyLjAzNzEgNzYuMzcwOCAxMi4xMDM4SDgxLjYzODJDODEuNjIwMyAxMi4wMzcxIDgxLjYwODMgMTEuOTcwNCA4MS42MDIzIDExLjkwMzdDODEuNTkzMyAxMS44MzQxIDgxLjU4ODggMTEuNzY0NSA4MS41ODg4IDExLjY5NDhDODEuNTg4OCAxMS4zNTU1IDgxLjY3MjcgMTEuMDQ5NSA4MS44NDAzIDEwLjc3NjlDODIuMDA1IDEwLjUwNDIgODIuMjI5NSAxMC4yODgyIDgyLjUxMzkgMTAuMTI4N0M4Mi43OTUzIDkuOTY2MjMgODMuMTExMSA5Ljg4NTAyIDgzLjQ2MTQgOS44ODUwMkM4My44MTE3IDkuODg1MDIgODQuMTI5IDkuOTY2MjMgODQuNDEzNCAxMC4xMjg3Qzg0LjY5NDggMTAuMjg4MiA4NC45MTk0IDEwLjUwNDIgODUuMDg3IDEwLjc3NjlDODUuMjUxNyAxMS4wNDk1IDg1LjMzNCAxMS4zNTU1IDg1LjMzNCAxMS42OTQ4Qzg1LjMzNCAxMS43NjQ1IDg1LjMzMSAxMS44MzQxIDg1LjMyNSAxMS45MDM3Qzg1LjMxNiAxMS45NzA0IDg1LjMwNDEgMTIuMDM3MSA4NS4yODkxIDEyLjEwMzhIODUuNTcyWk04My40NjE0IDEzQzgzLjcxMjkgMTMgODMuOTQwNCAxMi45NDIgODQuMTQ0IDEyLjgyNkM4NC4zNDc2IDEyLjcxIDg0LjUwOTIgMTIuNTUzMyA4NC42MjkgMTIuMzU2MUM4NC43NDg3IDEyLjE1ODkgODQuODA4NiAxMS45Mzg1IDg0LjgwODYgMTEuNjk0OEM4NC44MDg2IDExLjQ1MTIgODQuNzQ4NyAxMS4yMzA4IDg0LjYyOSAxMS4wMzM2Qzg0LjUwOTIgMTAuODM2MyA4NC4zNDc2IDEwLjY3OTcgODQuMTQ0IDEwLjU2MzdDODMuOTQwNCAxMC40NDc3IDgzLjcxMjkgMTAuMzg5NyA4My40NjE0IDEwLjM4OTdDODMuMjA2OSAxMC4zODk3IDgyLjk3NzkgMTAuNDQ3NyA4Mi43NzQzIDEwLjU2MzdDODIuNTcwOCAxMC42Nzk3IDgyLjQwOTEgMTAuODM2MyA4Mi4yODk0IDExLjAzMzZDODIuMTY5NiAxMS4yMzA4IDgyLjEwOTcgMTEuNDUxMiA4Mi4xMDk3IDExLjY5NDhDODIuMTA5NyAxMS45Mzg1IDgyLjE2OTYgMTIuMTU4OSA4Mi4yODk0IDEyLjM1NjFDODIuNDA5MSAxMi41NTMzIDgyLjU3MDggMTIuNzEgODIuNzc0MyAxMi44MjZDODIuOTc3OSAxMi45NDIgODMuMjA2OSAxMyA4My40NjE0IDEzWk03NC41NDMxIDEzQzc0Ljc5NDYgMTMgNzUuMDIyMSAxMi45NDIgNzUuMjI1NyAxMi44MjZDNzUuNDI5MiAxMi43MSA3NS41OTA5IDEyLjU1MzMgNzUuNzEwNiAxMi4zNTYxQzc1LjgzMDQgMTIuMTU4OSA3NS44OTAzIDExLjkzODUgNzUuODkwMyAxMS42OTQ4Qzc1Ljg5MDMgMTEuNDUxMiA3NS44MzA0IDExLjIzMDggNzUuNzEwNiAxMS4wMzM2Qzc1LjU5MDkgMTAuODM2MyA3NS40MjkyIDEwLjY3OTcgNzUuMjI1NyAxMC41NjM3Qzc1LjAyMjEgMTAuNDQ3NyA3NC43OTQ2IDEwLjM4OTcgNzQuNTQzMSAxMC4zODk3Qzc0LjI4ODYgMTAuMzg5NyA3NC4wNTk2IDEwLjQ0NzcgNzMuODU2IDEwLjU2MzdDNzMuNjUyNCAxMC42Nzk3IDczLjQ5MDggMTAuODM2MyA3My4zNzEgMTEuMDMzNkM3My4yNTEzIDExLjIzMDggNzMuMTkxNCAxMS40NTEyIDczLjE5MTQgMTEuNjk0OEM3My4xOTE0IDExLjkzODUgNzMuMjUxMyAxMi4xNTg5IDczLjM3MSAxMi4zNTYxQzczLjQ5MDggMTIuNTUzMyA3My42NTI0IDEyLjcxIDczLjg1NiAxMi44MjZDNzQuMDU5NiAxMi45NDIgNzQuMjg4NiAxMyA3NC41NDMxIDEzWiJ9KX0pfWZ1bmN0aW9uIHQxKHtzaXplOkM9MTgsc3Ryb2tlV2lkdGg6Sz0yfSl7cmV0dXJuIFgoInN2ZyIse3htbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsd2lkdGg6QyxoZWlnaHQ6Qyx2aWV3Qm94OiIwIDAgMjQgMjQiLGZpbGw6Im5vbmUiLHN0cm9rZToiY3VycmVudENvbG9yIixzdHJva2VXaWR0aDpLLHN0cm9rZUxpbmVjYXA6InJvdW5kIixzdHJva2VMaW5lam9pbjoicm91bmQiLGNoaWxkcmVuOltYKCJwYXRoIix7ZDoiTTMgMTJhOSA5IDAgMSAwIDktOSA5Ljc1IDkuNzUgMCAwIDAtNi43NCAyLjc0TDMgOCJ9KSxYKCJwYXRoIix7ZDoiTTMgM3Y1aDUifSldfSl9dmFyIEIzPSJBY2Nlc3NpYmlsaXR5IHVuYXZhaWxhYmxlIG9uIHRoaXMgc2ltdWxhdG9yLiI7ZnVuY3Rpb24gSzIoQyl7cmV0dXJuIEM/LmVycm9ycz8uaW5jbHVkZXMoQjMpPz8hMX1mdW5jdGlvbiAkMihDLEspe2lmKEM9PT1LKXJldHVybiEwO2lmKEMuaWQhPT1LLmlkfHxDLnBhdGghPT1LLnBhdGh8fEMubGFiZWwhPT1LLmxhYmVsfHxDLnZhbHVlIT09Sy52YWx1ZXx8Qy5yb2xlIT09Sy5yb2xlfHxDLnR5cGUhPT1LLnR5cGV8fEMuZW5hYmxlZCE9PUsuZW5hYmxlZClyZXR1cm4hMTtsZXQgJD1DLmZyYW1lLEo9Sy5mcmFtZTtyZXR1cm4gJD09PUp8fCQueD09PUoueCYmJC55PT09Si55JiYkLndpZHRoPT09Si53aWR0aCYmJC5oZWlnaHQ9PT1KLmhlaWdodH1mdW5jdGlvbiBYMihDLEspe2xldCAkPUMubGFiZWx8fEMucm9sZXx8YGVsZW1lbnQgJHtLKzF9YCxKPUMucm9sZXx8Qy50eXBlO3JldHVybntpZDpDLmlkLHBhdGg6Qy5wYXRoLGxhYmVsOiQsdmFsdWU6Qy52YWx1ZSxyb2xlOkosdHlwZTpDLnR5cGUsZW5hYmxlZDpDLmVuYWJsZWQsZnJhbWU6Qy5mcmFtZX19ZnVuY3Rpb24gXzMoQyxLKXtsZXQgJD1NYXRoLm1heCgwLEMueCksSj1NYXRoLm1heCgwLEMueSksTj1NYXRoLm1pbihLLndpZHRoLEMueCtDLndpZHRoKSxxPU1hdGgubWluKEsuaGVpZ2h0LEMueStDLmhlaWdodCksUT1NYXRoLm1heCgwLE4tJCksWj1NYXRoLm1heCgwLHEtSik7cmV0dXJuIFE+MCYmWj4wP3t4OiQseTpKLHdpZHRoOlEsaGVpZ2h0Olp9Om51bGx9ZnVuY3Rpb24gZTEoQyl7cmV0dXJuIEMuaWR9ZnVuY3Rpb24gZjIoQyl7cmV0dXJuYCR7Qy54fSwke0MueX0gJHtDLndpZHRofXgke0MuaGVpZ2h0fWB9ZnVuY3Rpb24gazMoQyl7cmV0dXJuW2BBWCBsYWJlbDogJHtDLmxhYmVsfHwiVW5sYWJlbGVkIn1gLEMucm9sZT9gcm9sZTogJHtDLnJvbGV9YDoiIixDLnR5cGU/YHR5cGU6ICR7Qy50eXBlfWA6IiIsQy52YWx1ZT9gdmFsdWU6ICR7Qy52YWx1ZX1gOiIiLEMuaWQ/YGlkOiAke0MuaWR9YDoiIixgcGF0aDogJHtDLnBhdGh9YCxgZnJhbWU6ICR7ZjIoQy5mcmFtZSl9YF0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oIjsgIil9ZnVuY3Rpb24gRDMoQyl7bGV0W0ssJF09YihudWxsKSxbSixOXT1iKCJBWCBvZmYiKTtyZXR1cm4gVygoKT0+e2lmKCFDKXskKG51bGwpLE4oIkFYIG9mZiIpO3JldHVybn0kKG51bGwpLE4oIkFYIHdhaXRpbmciKTtsZXQgcT1uZXcgRXZlbnRTb3VyY2UoQyk7cmV0dXJuIHEub25tZXNzYWdlPShRKT0+e3RyeXtsZXQgWj1KU09OLnBhcnNlKFEuZGF0YSk7JChaKSxOKEsyKFopPyJBWCB1bmF2YWlsYWJsZSI6YCR7Wi5lbGVtZW50cy5sZW5ndGh9IEFYIGVsZW1lbnRzYCl9Y2F0Y2h7TigiQVggcGFyc2UgZXJyb3IiKX19LHEuYWRkRXZlbnRMaXN0ZW5lcigiZXJyb3IiLCgpPT57TigiQVggcmVjb25uZWN0aW5nIil9KSwoKT0+cS5jbG9zZSgpfSxbQ10pLHtzbmFwc2hvdDpLLHN0YXR1czpKfX12YXIgbDI9bzEoe3NuYXBzaG90Om51bGwsc3RhdHVzOiJBWCBvZmYifSksdTI9bzEobnVsbCk7ZnVuY3Rpb24gWTAoKXtyZXR1cm4gaTEobDIpfWZ1bmN0aW9uIEoyKCl7bGV0IEM9aTEodTIpO2lmKCFDKXRocm93IEVycm9yKCJBWCBzZWxlY3Rpb24gY29udGV4dCBpcyB1bmF2YWlsYWJsZSIpO3JldHVybiBDfXZhciBIMz1xMChmdW5jdGlvbih7ZWxlbWVudDpLLGluZGV4OiQsc2NyZWVuOkosaGlnaGxpZ2h0ZWQ6TixzZWxlY3RlZDpxLG9uSGlnaGxpZ2h0OlEsb25TZWxlY3Q6Wn0pe2xldCBZPWUxKEspLEc9WDIoSywkKSxWPV8zKEsuZnJhbWUsSik7aWYoIVYpcmV0dXJuIG51bGw7bGV0IEw9azMoRyk7cmV0dXJuIFgoImJ1dHRvbiIse3R5cGU6ImJ1dHRvbiIsImRhdGEtYXgta2V5IjpZLCJkYXRhLWF4LWlkIjpHLmlkLCJkYXRhLWF4LXBhdGgiOkcucGF0aCwiZGF0YS1heC1sYWJlbCI6Ry5sYWJlbCwiZGF0YS1heC12YWx1ZSI6Ry52YWx1ZSwiZGF0YS1heC1yb2xlIjpHLnJvbGUsImRhdGEtYXgtdHlwZSI6Ry50eXBlLCJkYXRhLWF4LWVuYWJsZWQiOlN0cmluZyhHLmVuYWJsZWQpLCJkYXRhLWF4LWZyYW1lIjpmMihHLmZyYW1lKSwiZGF0YS1heC1zZWxlY3RlZCI6U3RyaW5nKHEpLCJhcmlhLWxhYmVsIjpLLmxhYmVsfHxMLHRpdGxlOkwsb25DbGljazooKT0+WihZKSxvbk1vdXNlRW50ZXI6KCk9PlEoWSksb25Nb3VzZUxlYXZlOigpPT5RKG51bGwpLGNsYXNzTmFtZToiYWJzb2x1dGUgYm94LWJvcmRlciBtaW4tdy1weCBtaW4taC1weCBwLTAgcm91bmRlZC1bM3B4XSBib3JkZXIgY3Vyc29yLXBvaW50ZXIgcG9pbnRlci1ldmVudHMtYXV0byIsc3R5bGU6e2xlZnQ6YCR7Vi54L0oud2lkdGgqMTAwfSVgLHRvcDpgJHtWLnkvSi5oZWlnaHQqMTAwfSVgLHdpZHRoOmAke1Yud2lkdGgvSi53aWR0aCoxMDB9JWAsaGVpZ2h0OmAke1YuaGVpZ2h0L0ouaGVpZ2h0KjEwMH0lYCxib3JkZXJDb2xvcjpxPyIjNjBhNWZhIjpOPyIjZmJiZjI0IjoiIzM0ZDM5OSIsYmFja2dyb3VuZDpxPyJyZ2JhKDk2LDE2NSwyNTAsMC4yNCkiOk4/InJnYmEoMjQ1LDE1OCwxMSwwLjI4KSI6InJnYmEoMTYsMTg1LDEyOSwwLjEyKSJ9fSl9LChDLEspPT5DLmluZGV4PT09Sy5pbmRleCYmQy5oaWdobGlnaHRlZD09PUsuaGlnaGxpZ2h0ZWQmJkMuc2VsZWN0ZWQ9PT1LLnNlbGVjdGVkJiZDLm9uSGlnaGxpZ2h0PT09Sy5vbkhpZ2hsaWdodCYmQy5vblNlbGVjdD09PUsub25TZWxlY3QmJkMuc2NyZWVuLndpZHRoPT09Sy5zY3JlZW4ud2lkdGgmJkMuc2NyZWVuLmhlaWdodD09PUsuc2NyZWVuLmhlaWdodCYmJDIoQy5lbGVtZW50LEsuZWxlbWVudCkpO2Z1bmN0aW9uIEYzKCl7bGV0e3NuYXBzaG90OkN9PVkwKCkse2hpZ2hsaWdodGVkS2V5Okssc2VsZWN0ZWRLZXk6JCxzZXRIaWdobGlnaHRlZEtleTpKLHNldFNlbGVjdGVkS2V5Ok59PUoyKCk7aWYoIUM/LnNjcmVlbi53aWR0aHx8IUM/LnNjcmVlbi5oZWlnaHQpcmV0dXJuIG51bGw7cmV0dXJuIFgoImRpdiIse2NsYXNzTmFtZToiYWJzb2x1dGUgaW5zZXQtMCB6LTEwIG92ZXJmbG93LWhpZGRlbiBwb2ludGVyLWV2ZW50cy1ub25lIixjaGlsZHJlbjpDLmVsZW1lbnRzLm1hcCgocSxRKT0+e2xldCBaPWUxKHEpO3JldHVybiBYKEgzLHtlbGVtZW50OnEsaW5kZXg6USxzY3JlZW46Qy5zY3JlZW4saGlnaGxpZ2h0ZWQ6Wj09PUssc2VsZWN0ZWQ6Wj09PSQsb25IaWdobGlnaHQ6SixvblNlbGVjdDpOfSxaKX0pfSl9ZnVuY3Rpb24gVTMoe2VuZHBvaW50OkMsY2hpbGRyZW46S30pe2xldHtzbmFwc2hvdDokLHN0YXR1czpKfT1EMyhDKSxbTixxXT1iKG51bGwpLFtRLFpdPWIobnVsbCk7VygoKT0+e2lmKCFDKXEobnVsbCksWihudWxsKX0sW0NdKTtsZXQgWT1NMSgoKT0+KHtzbmFwc2hvdDokLHN0YXR1czpKfSksWyQsSl0pLEc9TTEoKCk9Pih7aGlnaGxpZ2h0ZWRLZXk6TixzZWxlY3RlZEtleTpRLHNldEhpZ2hsaWdodGVkS2V5OnEsc2V0U2VsZWN0ZWRLZXk6Wn0pLFtOLFFdKTtyZXR1cm4gWChsMix7dmFsdWU6WSxjaGlsZHJlbjpYKHUyLHt2YWx1ZTpHLGNoaWxkcmVuOkt9KX0pfWZ1bmN0aW9uIHozKHtvdmVybGF5RW5hYmxlZDpDLHN0cmVhbWluZzpLLG9uVG9nZ2xlT3ZlcmxheTokfSl7bGV0e3N0YXR1czpKfT1ZMCgpLFtOLHFdPWIoITEpLFE9QyYmSztyZXR1cm4gWChQMS5CdXR0b24seyJhcmlhLWxhYmVsIjpDPyJIaWRlIGFjY2Vzc2liaWxpdHkgb3ZlcmxheSI6IlNob3cgYWNjZXNzaWJpbGl0eSBvdmVybGF5IiwiYXJpYS1wcmVzc2VkIjpDLHRpdGxlOkosb25DbGljazokLG9uTW91c2VFbnRlcjooKT0+cSghMCksb25Nb3VzZUxlYXZlOigpPT5xKCExKSxzdHlsZTpRP3tiYWNrZ3JvdW5kOk4/InJnYmEoMjU1LDI1NSwyNTUsMC4xMikiOiJyZ2JhKDI1NSwyNTUsMjU1LDAuMDgpIixjb2xvcjoicmdiYSgyNTUsMjU1LDI1NSwwLjk1KSJ9OnZvaWQgMCxjaGlsZHJlbjpYKCJzdmciLHt3aWR0aDoiMTkiLGhlaWdodDoiMTkiLHZpZXdCb3g6IjAgMCAyNCAyNCIsZmlsbDoibm9uZSIsc3Ryb2tlOiJjdXJyZW50Q29sb3IiLHN0cm9rZVdpZHRoOiIyIixzdHJva2VMaW5lY2FwOiJyb3VuZCIsc3Ryb2tlTGluZWpvaW46InJvdW5kIixjaGlsZHJlbjpbWCgicGF0aCIse2Q6Ik0xMi4wMzQgMTIuNjgxYS40OTguNDk4IDAgMCAxIC42NDctLjY0N2w5IDMuNWEuNS41IDAgMCAxLS4wMzMuOTQzbC0zLjQ0NCAxLjA2OGExIDEgMCAwIDAtLjY2LjY2bC0xLjA2NyAzLjQ0M2EuNS41IDAgMCAxLS45NDMuMDMzeiJ9KSxYKCJwYXRoIix7ZDoiTTIxIDExVjVhMiAyIDAgMCAwLTItMkg1YTIgMiAwIDAgMC0yIDJ2MTRhMiAyIDAgMCAwIDIgMmg2In0pXX0pfSl9ZnVuY3Rpb24gQTMoQyl7dHJ5e2xldCBLPUpTT04ucGFyc2UoQyksJD1bXTtmb3IobGV0W0osTl1vZiBPYmplY3QuZW50cmllcyhLLmRldmljZXM/P3t9KSl7bGV0IHE9Si5yZXBsYWNlKC9eY29tXC5hcHBsZVwuQ29yZVNpbXVsYXRvclwuU2ltUnVudGltZVwuLywiIikucmVwbGFjZSgvLS9nLCIuIik7Zm9yKGxldCBRIG9mIE4paWYoUS5pc0F2YWlsYWJsZSkkLnB1c2goe3VkaWQ6US51ZGlkLG5hbWU6US5uYW1lLHN0YXRlOlEuc3RhdGUscnVudGltZTpxfSl9cmV0dXJuICR9Y2F0Y2h7cmV0dXJuW119fWZ1bmN0aW9uIEwwKEMpe2xldCBLPUMudG9Mb3dlckNhc2UoKTtpZihLLmluY2x1ZGVzKCJpcGhvbmUiKSlyZXR1cm4gMDtpZihLLmluY2x1ZGVzKCJpcGFkIikpcmV0dXJuIDE7aWYoSy5pbmNsdWRlcygid2F0Y2giKSlyZXR1cm4gMjtpZihLLmluY2x1ZGVzKCJ2aXNpb24iKSlyZXR1cm4gMztyZXR1cm4gNH1mdW5jdGlvbiBWMChDKXtsZXQgSz1DLnRvTG93ZXJDYXNlKCk7aWYoSy5zdGFydHNXaXRoKCJpb3MiKSlyZXR1cm4gMDtpZihLLnN0YXJ0c1dpdGgoImlwYWRvcyIpKXJldHVybiAxO2lmKEsuc3RhcnRzV2l0aCgid2F0Y2hvcyIpKXJldHVybiAyO2lmKEsuc3RhcnRzV2l0aCgidmlzaW9ub3MiKXx8Sy5zdGFydHNXaXRoKCJ4cm9zIikpcmV0dXJuIDM7cmV0dXJuIDR9ZnVuY3Rpb24gdjEoQyl7bGV0ICQ9d2luZG93Ll9fU0lNX1BSRVZJRVdfXz8uYmFzZVBhdGg/Pyh3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUucmVwbGFjZSgvXC8rJC8sIiIpfHwiLyIpO3JldHVybiAkPT09Ii8iP2AvJHtDfWA6YCR7JH0vJHtDfWB9ZnVuY3Rpb24gYjMoe2RldmljZXM6Qyxsb2FkaW5nOkssZXJyb3I6JCxvblJlZnJlc2g6Sn0pe2xldFtOLHFdPWIobnVsbCksW1EsWl09YihudWxsKSxZPVAoYXN5bmMoTCk9PntpZihOKXJldHVybjtxKEwudWRpZCksWihudWxsKTt0cnl7bGV0IGs9YCR7djEoImFwaSIpfT9kZXZpY2U9JHtlbmNvZGVVUklDb21wb25lbnQoTC51ZGlkKX1gLEQ9KGFzeW5jKCk9PntsZXQgTz1EYXRlLm5vdygpKzkwMDAwO3doaWxlKERhdGUubm93KCk8Tyl7dHJ5e2xldCBFPWF3YWl0IGZldGNoKGsse2NhY2hlOiJuby1zdG9yZSJ9KTtpZihFLm9rJiZhd2FpdCBFLmpzb24oKSl7bGV0IHk9bmV3IFVSTCh3aW5kb3cubG9jYXRpb24uaHJlZik7cmV0dXJuIHkuc2VhcmNoUGFyYW1zLnNldCgiZGV2aWNlIixMLnVkaWQpLHdpbmRvdy5sb2NhdGlvbi5hc3NpZ24oeS50b1N0cmluZygpKSwhMH19Y2F0Y2h7fWF3YWl0IG5ldyBQcm9taXNlKChFKT0+c2V0VGltZW91dChFLDQwMCkpfXJldHVybiExfSkoKSx6PXYxKCJncmlkL2FwaS9zdGFydCIpLEI9ZmV0Y2goeix7bWV0aG9kOiJQT1NUIixoZWFkZXJzOnsiQ29udGVudC1UeXBlIjoiYXBwbGljYXRpb24vanNvbiJ9LGJvZHk6SlNPTi5zdHJpbmdpZnkoe3VkaWQ6TC51ZGlkfSl9KS50aGVuKGFzeW5jKE8pPT57bGV0IEU9YXdhaXQgTy5qc29uKCkuY2F0Y2goKCk9Pih7fSkpO2lmKCFPLm9rfHwhRS5vayl0aHJvdyBFcnJvcihFLmVycm9yPz9gSFRUUCAke08uc3RhdHVzfWApfSk7aWYoYXdhaXQgUHJvbWlzZS5yYWNlKFtELEIudGhlbigoKT0+InN0YXJ0ZWQiKV0pPT09ITApcmV0dXJuO2lmKGF3YWl0IEQpcmV0dXJuO3Rocm93IEVycm9yKCJzZXJ2ZS1zaW0gc3RhcnRlZCBidXQgbm8gc3RyZWFtIHN0YXRlIGFwcGVhcmVkIil9Y2F0Y2goayl7WihrIGluc3RhbmNlb2YgRXJyb3I/ay5tZXNzYWdlOiJGYWlsZWQgdG8gc3RhcnQgc3RyZWFtIikscShudWxsKX19LFtOXSksRz1uZXcgTWFwO2ZvcihsZXQgTCBvZiBDKXtsZXQgaz1HLmdldChMLnJ1bnRpbWUpO2lmKCFrKWs9W10sRy5zZXQoTC5ydW50aW1lLGspO2sucHVzaChMKX1mb3IobGV0IEwgb2YgRy52YWx1ZXMoKSlMLnNvcnQoKGssRCk9PntsZXQgej1rLnN0YXRlPT09IkJvb3RlZCI/MDoxLEI9RC5zdGF0ZT09PSJCb290ZWQiPzA6MTtpZih6IT09QilyZXR1cm4gei1CO3JldHVybiBMMChrLm5hbWUpLUwwKEQubmFtZSl8fGsubmFtZS5sb2NhbGVDb21wYXJlKEQubmFtZSl9KTtsZXQgVj1bLi4uRy5lbnRyaWVzKCldLnNvcnQoKFtMXSxba10pPT5WMChMKS1WMChrKXx8TC5sb2NhbGVDb21wYXJlKGspKTtyZXR1cm4gWCgiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGZsZXgtY29sIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBoLXNjcmVlbiBiZy1wYWdlIHAtNiBnYXAtMyBmb250LXN5c3RlbSBib3gtYm9yZGVyIixjaGlsZHJlbjpYKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggZmxleC1jb2wgaXRlbXMtY2VudGVyIGdhcC0zIHRleHQtY2VudGVyIixjaGlsZHJlbjpbWCgiaDEiLHtjbGFzc05hbWU6InRleHQtWzE4cHhdIG0tMCB0ZXh0LXdoaXRlLzkwIixjaGlsZHJlbjoiTm8gc2VydmUtc2ltIHN0cmVhbSBydW5uaW5nIn0pLFgoInAiLHtjbGFzc05hbWU6InRleHQtd2hpdGUvNTUgdGV4dC1bMTRweF0gbWF4LXctMTIwIixjaGlsZHJlbjpbIlBpY2sgYSBzaW11bGF0b3IgdG8gYm9vdCwgb3Igc3RhcnQgb25lIHlvdXJzZWxmIHdpdGgiLCIgIixYKCJjb2RlIix7Y2xhc3NOYW1lOiJiZy1bIzIyMl0gcHgtMS41IHB5LTAuNSByb3VuZGVkIHRleHQtWzEzcHhdIixjaGlsZHJlbjoiYnVueCBzZXJ2ZS1zaW0gLS1kZXRhY2gifSksIi4iXX0pLFgoImRpdiIse2NsYXNzTmFtZToidy1mdWxsIG1heC13LTkwIG10LTIgYmctcGFuZWwgYm9yZGVyIGJvcmRlci13aGl0ZS8xMiByb3VuZGVkLVsxMHB4XSBwLTEgZm9udC1tb25vIHRleHQtWzEzcHhdIHRleHQtd2hpdGUvOTAgdGV4dC1sZWZ0IG1heC1oLVs3MHZoXSBvdmVyZmxvdy15LWF1dG8gbWluLWgtMCIsY2hpbGRyZW46W1goImRpdiIse2NsYXNzTmFtZToiZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuIHB4LTIuNSBweS0xLjUgdGV4dC1bMTFweF0gdGV4dC13aGl0ZS82NSIsY2hpbGRyZW46W1goInNwYW4iLHtjbGFzc05hbWU6ImZvbnQtc2VtaWJvbGQiLGNoaWxkcmVuOiJTaW11bGF0b3JzIn0pLFgoImJ1dHRvbiIse29uQ2xpY2s6SixkaXNhYmxlZDpLLGNsYXNzTmFtZToiYmctdHJhbnNwYXJlbnQgYm9yZGVyLW5vbmUgdGV4dC1hY2NlbnQgdGV4dC1bMTFweF0gY3Vyc29yLXBvaW50ZXIgcC0wIixjaGlsZHJlbjpLPyIuLi4iOiJSZWZyZXNoIn0pXX0pLCQmJlgoImRpdiIse2NsYXNzTmFtZToicHgtMi41IHB5LTEuNSB0ZXh0LWRhbmdlciB0ZXh0LVsxMXB4XSIsY2hpbGRyZW46JH0pLFEmJlgoImRpdiIse2NsYXNzTmFtZToicHgtMi41IHB5LTEuNSB0ZXh0LWRhbmdlciB0ZXh0LVsxMXB4XSIsY2hpbGRyZW46UX0pLCFLJiYhJCYmQy5sZW5ndGg9PT0wJiZYKCJkaXYiLHtjbGFzc05hbWU6InAtMyB0ZXh0LXdoaXRlLzQwIHRleHQtWzExcHhdIHRleHQtY2VudGVyIixjaGlsZHJlbjoiTm8gYXZhaWxhYmxlIHNpbXVsYXRvcnMgZm91bmQifSksVi5tYXAoKFtMLGtdKT0+WCgiZGl2Iix7Y2hpbGRyZW46W1goImRpdiIse2NsYXNzTmFtZToicHgtMi41IHB0LTEuNSBwYi0wLjUgdGV4dC1bMTBweF0gZm9udC1zZW1pYm9sZCB0ZXh0LXdoaXRlLzQwIHVwcGVyY2FzZSB0cmFja2luZy1bMC4wOGVtXSIsY2hpbGRyZW46TH0pLGsubWFwKChEKT0+e2xldCB6PU49PT1ELnVkaWQsQj1OIT09bnVsbCYmIXosXz1ELnN0YXRlPT09IkJvb3RlZCI7cmV0dXJuIFgoImRpdiIse2NsYXNzTmFtZTpgZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTIgcHgtMi41IHB5LTEuNSByb3VuZGVkLW1kIHRyYW5zaXRpb24tY29sb3JzICR7Qj8iY3Vyc29yLWRlZmF1bHQgb3BhY2l0eS01MCI6ImN1cnNvci1wb2ludGVyIGhvdmVyOmJnLXdoaXRlLzgifWAsb25DbGljazooKT0+e2lmKCFCKVkoRCl9LGNoaWxkcmVuOltYKCJzcGFuIix7Y2xhc3NOYW1lOiJzaXplLTEuNSByb3VuZGVkLWZ1bGwgc2hyaW5rLTAiLHN0eWxlOntiYWNrZ3JvdW5kOl8/IiM0YWRlODAiOiIjNDQ0In19KSxYKCJzcGFuIix7Y2xhc3NOYW1lOiJmbGV4LTEgdGV4dC1sZWZ0IixjaGlsZHJlbjpELm5hbWV9KSxYKCJzcGFuIix7Y2xhc3NOYW1lOmB0ZXh0LVsxMHB4XSAke3o/InRleHQtYWNjZW50IjoidGV4dC13aGl0ZS81NSJ9YCxjaGlsZHJlbjp6P18/IlN0YXJ0aW5nLi4uIjoiQm9vdGluZy4uLiI6Xz8iU3RhcnQgc3RyZWFtIjoiQm9vdCAmIHN0cmVhbSJ9KV19LEQudWRpZCl9KV19LEwpKV19KV19KX0pfWZ1bmN0aW9uIE8zKHtkZXZpY2VzOkMsc2VsZWN0ZWRVZGlkOkssbG9hZGluZzokLGVycm9yOkosc3RvcHBpbmdVZGlkczpOLG9uUmVmcmVzaDpxLG9uU2VsZWN0OlEsb25TdG9wOlosdHJpZ2dlcjpZfSl7bGV0W0csVl09YighMSksTD12KG51bGwpO1coKCk9PntpZighRylyZXR1cm47bGV0IEI9KF8pPT57aWYoIUwuY3VycmVudD8uY29udGFpbnMoXy50YXJnZXQpKVYoITEpfTtyZXR1cm4gd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsQiksKCk9PndpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZWRvd24iLEIpfSxbR10pO2xldCBrPW5ldyBNYXA7Zm9yKGxldCBCIG9mIEMpe2lmKEIudWRpZD09PUspY29udGludWU7bGV0IF89ay5nZXQoQi5ydW50aW1lKTtpZighXylfPVtdLGsuc2V0KEIucnVudGltZSxfKTtfLnB1c2goQil9Zm9yKGxldCBCIG9mIGsudmFsdWVzKCkpQi5zb3J0KChfLEgpPT5MMChfLm5hbWUpLUwwKEgubmFtZSl8fF8ubmFtZS5sb2NhbGVDb21wYXJlKEgubmFtZSkpO2xldCBEPVsuLi5rLmVudHJpZXMoKV0uc29ydCgoW0JdLFtfXSk9PlYwKEIpLVYwKF8pfHxCLmxvY2FsZUNvbXBhcmUoXykpLHo9Qy5maW5kKChCKT0+Qi51ZGlkPT09Syk/P251bGw7cmV0dXJuIFgoImRpdiIse3JlZjpMLGNsYXNzTmFtZToicmVsYXRpdmUiLGNoaWxkcmVuOltYKCJkaXYiLHtvbkNsaWNrOigpPT57aWYoIUcpcSgpO1YoKEIpPT4hQil9LGNoaWxkcmVuOll9KSxHJiZYKCJkaXYiLHtjbGFzc05hbWU6ImFic29sdXRlIHRvcC1bY2FsYygxMDAlKzZweCldIGxlZnQtMCBtaW4tdy02NSBtYXgtaC05MCBvdmVyZmxvdy15LWF1dG8gYmctcGFuZWwgYm9yZGVyIGJvcmRlci13aGl0ZS8xMiByb3VuZGVkLVsxMHB4XSBwLTEgc2hhZG93LVswXzhweF8yNHB4X3JnYmEoMCwwLDAsMC41KV0gZm9udC1tb25vIHRleHQtWzEzcHhdIHRleHQtd2hpdGUvOTAgei0yMCIsY2hpbGRyZW46W1goImRpdiIse2NsYXNzTmFtZToiZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuIHB4LTIuNSBweS0xLjUgdGV4dC1bMTFweF0gdGV4dC13aGl0ZS82NSIsY2hpbGRyZW46W1goInNwYW4iLHtjbGFzc05hbWU6ImZvbnQtc2VtaWJvbGQiLGNoaWxkcmVuOiJTaW11bGF0b3JzIn0pLFgoImJ1dHRvbiIse29uQ2xpY2s6KEIpPT57Qi5zdG9wUHJvcGFnYXRpb24oKSxxKCl9LGRpc2FibGVkOiQsY2xhc3NOYW1lOiJiZy10cmFuc3BhcmVudCBib3JkZXItbm9uZSB0ZXh0LWFjY2VudCB0ZXh0LVsxMXB4XSBjdXJzb3ItcG9pbnRlciBwLTAiLGNoaWxkcmVuOiQ/Ii4uLiI6IlJlZnJlc2gifSldfSksSiYmWCgiZGl2Iix7Y2xhc3NOYW1lOiJweC0yLjUgcHktMS41IHRleHQtZGFuZ2VyIHRleHQtWzExcHhdIixjaGlsZHJlbjpKfSkseiYmWChOMSx7Y2hpbGRyZW46W1goImRpdiIse2NsYXNzTmFtZToiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTIgcHgtMi41IHB5LTEuNSByb3VuZGVkLW1kIHRleHQtYWNjZW50IixjaGlsZHJlbjpbWCgic3BhbiIse2NsYXNzTmFtZToic2l6ZS0xLjUgcm91bmRlZC1mdWxsIHNocmluay0wIixzdHlsZTp7YmFja2dyb3VuZDp6LnN0YXRlPT09IkJvb3RlZCI/IiM0YWRlODAiOiIjNDQ0In19KSxYKCJzcGFuIix7Y2xhc3NOYW1lOiJmbGV4LTEiLGNoaWxkcmVuOnoubmFtZX0pXX0pLFgoImRpdiIse2NsYXNzTmFtZToiaC1weCBiZy13aGl0ZS84IG15LTEifSldfSksQy5sZW5ndGg9PT0wJiYhJCYmIUomJlgoImRpdiIse2NsYXNzTmFtZToicC0zIHRleHQtd2hpdGUvNDAgdGV4dC1bMTFweF0gdGV4dC1jZW50ZXIiLGNoaWxkcmVuOiJObyBhdmFpbGFibGUgc2ltdWxhdG9ycyBmb3VuZCJ9KSxELm1hcCgoW0IsX10pPT5YKCJkaXYiLHtjaGlsZHJlbjpbWCgiZGl2Iix7Y2xhc3NOYW1lOiJweC0yLjUgcHQtMS41IHBiLTAuNSB0ZXh0LVsxMHB4XSBmb250LXNlbWlib2xkIHRleHQtd2hpdGUvNDAgdXBwZXJjYXNlIHRyYWNraW5nLVswLjA4ZW1dIixjaGlsZHJlbjpCfSksXy5tYXAoKEgpPT57bGV0IE89Ti5oYXMoSC51ZGlkKSxFPUguc3RhdGU9PT0iQm9vdGVkIjtyZXR1cm4gWCgiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMiBweC0yLjUgcHktMS41IHJvdW5kZWQtbWQgY3Vyc29yLXBvaW50ZXIgdHJhbnNpdGlvbi1jb2xvcnMgaG92ZXI6Ymctd2hpdGUvOCIsb25DbGljazooKT0+e1EoSCksVighMSl9LGNoaWxkcmVuOltYKCJzcGFuIix7Y2xhc3NOYW1lOiJzaXplLTEuNSByb3VuZGVkLWZ1bGwgc2hyaW5rLTAiLHN0eWxlOntiYWNrZ3JvdW5kOkU/IiM0YWRlODAiOiIjNDQ0In19KSxYKCJzcGFuIix7Y2xhc3NOYW1lOiJmbGV4LTEiLGNoaWxkcmVuOkgubmFtZX0pLEUmJlgoInNwYW4iLHtyb2xlOiJidXR0b24iLG9uQ2xpY2s6KHkpPT57aWYoeS5zdG9wUHJvcGFnYXRpb24oKSwhTylaKEgudWRpZCl9LGNsYXNzTmFtZTpgdGV4dC1bMTBweF0gcHktcHggcHgtMS41IHJvdW5kZWQgJHtPPyJ0ZXh0LXdoaXRlLzU1IGJnLXRyYW5zcGFyZW50IGN1cnNvci1kZWZhdWx0IjoidGV4dC1kYW5nZXIgYmctZGFuZ2VyLzEwIGN1cnNvci1wb2ludGVyIn1gLGNoaWxkcmVuOk8/IlN0b3BwaW5nLi4uIjoiU3RvcCJ9KV19LEgudWRpZCl9KV19LEIpKV19KV19KX1mdW5jdGlvbiBCMCh7b3BlbjpDLHdpZHRoOkssY2hpbGRyZW46JCxzdHlsZTpKfSl7cmV0dXJuIFgoImFzaWRlIix7Y2xhc3NOYW1lOiJmaXhlZCB0b3AtMyByaWdodC0zIGJvdHRvbS0zIHotMzUgbWluLXctMCBvdmVyZmxvdy1oaWRkZW4gcm91bmRlZC1bMTRweF0gYm9yZGVyIGJvcmRlci13aGl0ZS8xMCBiZy1wYW5lbC1iZyB0ZXh0LXdoaXRlLzkwIHNoYWRvdy1bMF8xMnB4XzQwcHhfcmdiYSgwLDAsMCwwLjU1KV0gYmFja2Ryb3AtYmx1ci1bMThweF0gW2ZvbnQtZmFtaWx5Oi1hcHBsZS1zeXN0ZW0sc3lzdGVtLXVpLHNhbnMtc2VyaWZdIFt0cmFuc2l0aW9uOnRyYW5zZm9ybV8wLjI1c19lYXNlLG9wYWNpdHlfMC4yc19lYXNlXSBmbGV4IGZsZXgtY29sIixzdHlsZTp7d2lkdGg6Syx0cmFuc2Zvcm06Qz8idHJhbnNsYXRlWCgwKSI6InRyYW5zbGF0ZVgoY2FsYygxMDAlICsgMjRweCkpIixvcGFjaXR5OkM/MTowLHBvaW50ZXJFdmVudHM6Qz8iYXV0byI6Im5vbmUiLC4uLkp9LCJhcmlhLWhpZGRlbiI6IUMsY2hpbGRyZW46JH0pfWZ1bmN0aW9uIF8wKHtjaGlsZHJlbjpDLHN0eWxlOkt9KXtyZXR1cm4gWCgiaGVhZGVyIix7Y2xhc3NOYW1lOiJmbGV4IHNocmluay0wIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gZ2FwLTIuNSBweC0yLjUgcHktMS41IHBsLTMiLHN0eWxlOkssY2hpbGRyZW46Q30pfWZ1bmN0aW9uIE4yKHtjaGlsZHJlbjpDfSl7cmV0dXJuIFgoInNwYW4iLHtjbGFzc05hbWU6InRleHQtWzExcHhdIGZvbnQtbWVkaXVtIHRleHQtd2hpdGUvNTUiLGNoaWxkcmVuOkN9KX1mdW5jdGlvbiBrMCh7b25DbGljazpDLGFyaWFMYWJlbDpLPSJDbG9zZSBwYW5lbCIsdGl0bGU6JCxpY29uU2l6ZTpKPTE2fSl7cmV0dXJuIFgoImJ1dHRvbiIse3R5cGU6ImJ1dHRvbiIsb25DbGljazpDLGNsYXNzTmFtZToiZmxleCBzaHJpbmstMCBjdXJzb3ItcG9pbnRlciBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgcm91bmRlZCBiZy10cmFuc3BhcmVudCBwLTEgdGV4dC13aGl0ZS82NSIsImFyaWEtbGFiZWwiOkssdGl0bGU6JCxjaGlsZHJlbjpYKCJzdmciLHt3aWR0aDpKLGhlaWdodDpKLHZpZXdCb3g6IjAgMCAyNCAyNCIsZmlsbDoibm9uZSIsc3Ryb2tlOiJjdXJyZW50Q29sb3IiLHN0cm9rZVdpZHRoOiIyIixzdHJva2VMaW5lY2FwOiJyb3VuZCIsc3Ryb2tlTGluZWpvaW46InJvdW5kIixjaGlsZHJlbjpbWCgibGluZSIse3gxOiIxOCIseTE6IjYiLHgyOiI2Iix5MjoiMTgifSksWCgibGluZSIse3gxOiI2Iix5MToiNiIseDI6IjE4Iix5MjoiMTgifSldfSl9KX1mdW5jdGlvbiBUMyhDLEssJCl7bGV0W0osTl09YihudWxsKSxbcSxRXT1iKDApO1coKCk9PntpZighS3x8IUMpcmV0dXJuO2xldCBZPSExLEc9YXN5bmMoKT0+e3RyeXtsZXQgaz1hd2FpdChhd2FpdCBmZXRjaChDLHtjYWNoZToibm8tc3RvcmUifSkpLmpzb24oKTtpZighWSlOKGsuZGV2aWNlcz8/W10pfWNhdGNoe2lmKCFZKU4oW10pfX07RygpO2xldCBWPXNldEludGVydmFsKEcsJD83NTA6MzAwMCk7cmV0dXJuKCk9PntZPSEwLGNsZWFySW50ZXJ2YWwoVil9fSxbQyxLLHEsJF0pO2xldCBaPVAoKCk9PlEoKFkpPT5ZKzEpLFtdKTtyZXR1cm57ZGV2aWNlczpKLHJlZnJlc2g6Wn19ZnVuY3Rpb24gTTMoQyxLKXtsZXRbJCxKXT1iKG51bGwpO3JldHVybiBXKCgpPT57aWYoIUt8fCFDKXJldHVybjtsZXQgTj0hMSxxPWFzeW5jKCk9Pnt0cnl7bGV0IFk9YXdhaXQoYXdhaXQgZmV0Y2goQyx7Y2FjaGU6Im5vLXN0b3JlIn0pKS5qc29uKCk7aWYoIU4pSihZKX1jYXRjaHt9fTtxKCk7bGV0IFE9c2V0SW50ZXJ2YWwocSw1MDAwKTtyZXR1cm4oKT0+e049ITAsY2xlYXJJbnRlcnZhbChRKX19LFtDLEtdKSwkfWZ1bmN0aW9uIHczKEMpe2lmKCFOdW1iZXIuaXNGaW5pdGUoQyl8fEM8PTApcmV0dXJuIjAgQiI7bGV0IEs9Qy8xMDczNzQxODI0O2lmKEs+PTEpcmV0dXJuYCR7Sy50b0ZpeGVkKEs+PTEwPzA6MSl9IEdCYDtyZXR1cm5gJHsoQy8xMDQ4NTc2KS50b0ZpeGVkKDApfSBNQmB9ZnVuY3Rpb24geTAoQyxLKXtsZXQgJD1DLmluY2x1ZGVzKCI/Iik/IiYiOiI/IjtyZXR1cm5gJHtDfSR7JH1kZXZpY2U9JHtlbmNvZGVVUklDb21wb25lbnQoSyl9YH1mdW5jdGlvbiBQMyh7cmVwb3J0OkN9KXtpZighQ3x8Qy50b3RhbEJ5dGVzPT09MClyZXR1cm4gbnVsbDtsZXR7ZXN0aW1hdGVkQWRkaXRpb25hbDpLLGF2YWlsYWJsZUJ5dGVzOiQsdG90YWxCeXRlczpKLHJ1bm5pbmdTaW11bGF0b3JzOk59PUMscT1NYXRoLm1heCgwLE1hdGgubWluKDEsMS0kL0opKSxRPU4rSyxaPUs9PT0wPyIjZTY2IjpLPD0xPyIjZTlhMTNiIjoiIzNiMyIsWT1xPjAuOT8iI2U2NiI6cT4wLjc1PyIjZTlhMTNiIjoiIzNiMyI7cmV0dXJuIFgoImRpdiIse2NsYXNzTmFtZToiaW5saW5lLWZsZXggaXRlbXMtY2VudGVyIGdhcC0xLjUgcHgtMiBweS1bM3B4XSByb3VuZGVkLWZ1bGwgYmctWyMxMDEwMTBdIGJvcmRlciBib3JkZXItWyMyMjJdIGZvbnQtbW9ubyB0ZXh0LVsxMXB4XSB0ZXh0LXdoaXRlLzcwIGxlYWRpbmctbm9uZSIsY2hpbGRyZW46W1goInNwYW4iLHtjbGFzc05hbWU6InNpemUtMS41IHJvdW5kZWQtWzNweF0gc2hyaW5rLTAiLHN0eWxlOntiYWNrZ3JvdW5kOlp9fSksWCgic3BhbiIse2NoaWxkcmVuOltOLCIvIixRLCIgc2ltcyJdfSksWCgic3BhbiIse2NsYXNzTmFtZToidGV4dC13aGl0ZS80MCIsY2hpbGRyZW46IsK3In0pLFgoInNwYW4iLHtjbGFzc05hbWU6InRleHQtd2hpdGUvNTUiLGNoaWxkcmVuOlt3MygkKSwiIGZyZWUiXX0pLFgoInNwYW4iLHsiYXJpYS1oaWRkZW4iOiEwLGNsYXNzTmFtZToibWwtMC41IHctNyBoLVszcHhdIGJnLVsjMWMxYzFjXSByb3VuZGVkLVsycHhdIG92ZXJmbG93LWhpZGRlbiBpbmxpbmUtYmxvY2siLGNoaWxkcmVuOlgoInNwYW4iLHtjbGFzc05hbWU6ImJsb2NrIGgtZnVsbCB0cmFuc2l0aW9uLVt3aWR0aCxiYWNrZ3JvdW5kXSBkdXJhdGlvbi0zMDAgZWFzZS1vdXQiLHN0eWxlOnt3aWR0aDpgJHsocSoxMDApLnRvRml4ZWQoMSl9JWAsYmFja2dyb3VuZDpZfX0pfSldfSl9ZnVuY3Rpb24geTMoe2RldmljZTpDLGFjdGl2ZTpLLHByZXZpZXdFbmRwb2ludDokLHN0YXJ0aW5nOkosc2h1dHRpbmdEb3duOk4sZXJyb3I6cSxvblN0YXJ0OlEsb25TaHV0ZG93bjpafSl7bGV0IFk9Qy5oZWxwZXIsRz1DLnN0YXRlPT09IkJvb3RlZCIsVj1ZPyLil48gbGl2ZSI6Sj9HPyJzdGFydGluZyBoZWxwZXLigKYiOiJib290aW5nICYgc3RhcnRpbmfigKYiOk4/InNodXR0aW5nIGRvd27igKYiOkc/ImJvb3RlZCAobm8gc3RyZWFtKSI6Qy5zdGF0ZS50b0xvd2VyQ2FzZSgpLEw9WT8iIzNiMyI6IiM4ODgiLGs9Sz8icmdiYSgxMCwxMzIsMjU1LDAuNTUpIjoidHJhbnNwYXJlbnQiLEQ9WT8iYSI6ImRpdiIsej1ZP3tocmVmOnkwKCQsQy5kZXZpY2UpfTp7fTtyZXR1cm4gWChELHsuLi56LGNsYXNzTmFtZToiZ3JpZC10aWxlIHJlbGF0aXZlIGZsZXggZmxleC1jb2wgYmctWyMxMTFdIHJvdW5kZWQtWzEwcHhdIG92ZXJmbG93LWhpZGRlbiBuby11bmRlcmxpbmUgdGV4dC1pbmhlcml0IGJvcmRlciBib3JkZXItWyMyYTJhMmFdIFt0cmFuc2l0aW9uOmJvcmRlci1jb2xvcl8xMjBtc10iLHN0eWxlOntvdXRsaW5lOmAxcHggc29saWQgJHtrfWB9LGNoaWxkcmVuOlsoWXx8RykmJlgoImJ1dHRvbiIse3R5cGU6ImJ1dHRvbiIsdGl0bGU6Tj8iU2h1dHRpbmcgZG93buKApiI6IlNodXRkb3duIHNpbXVsYXRvciIsImFyaWEtbGFiZWwiOiJTaHV0ZG93biBzaW11bGF0b3IiLG9uQ2xpY2s6KEIpPT57Qi5wcmV2ZW50RGVmYXVsdCgpLEIuc3RvcFByb3BhZ2F0aW9uKCksWigpfSxkaXNhYmxlZDpOLGNsYXNzTmFtZToiZ3JpZC1zaHV0ZG93bi1idG4gYWJzb2x1dGUgdG9wLTEuNSByaWdodC0xLjUgdy1bMjJweF0gaC1bMjJweF0gcm91bmRlZC1mdWxsIGJvcmRlciBib3JkZXItWyM0NDRdIGJnLVtyZ2JhKDIwLDIwLDIwLDAuODUpXSB0ZXh0LXdoaXRlLzgwIHRleHQtWzEzcHhdIGxlYWRpbmctbm9uZSBjdXJzb3ItcG9pbnRlciBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBwLTAgei1bMl0gcG9pbnRlci1ldmVudHMtYXV0byIsY2hpbGRyZW46IsOXIn0pLFk/WCgiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4LTEgbWluLWgtMCBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBwLTIgYmctYmxhY2sgcG9pbnRlci1ldmVudHMtbm9uZSIsY2hpbGRyZW46WCgiaW1nIix7c3JjOlkuc3RyZWFtVXJsLGFsdDpDLm5hbWUsZHJhZ2dhYmxlOiExLGNsYXNzTmFtZToibWF4LXctZnVsbCBtYXgtaC1mdWxsIG9iamVjdC1jb250YWluIn0pfSk6WCgiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4LTEgbWluLWgtMCBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBwLTMgZmxleC1jb2wgZ2FwLTIuNSB0ZXh0LXdoaXRlLzU1IHRleHQtWzEycHhdIHRleHQtY2VudGVyIixjaGlsZHJlbjpbSj9YKCJzcGFuIix7ImFyaWEtaGlkZGVuIjohMCxjbGFzc05hbWU6InctNS41IGgtNS41IHJvdW5kZWQtZnVsbCBib3JkZXItMiBib3JkZXItd2hpdGUvMTUgYW5pbWF0ZS1bZ3JpZC1zcGluXzAuOHNfbGluZWFyX2luZmluaXRlXSIsc3R5bGU6e2JvcmRlclRvcENvbG9yOiJyZ2JhKDE1NSwyMDEsMTU1LDAuOTUpIn19KTpYKCJkaXYiLHtjbGFzc05hbWU6InRleHQtWzI4cHhdIG9wYWNpdHktNTAiLGNoaWxkcmVuOkc/IuKWoyI6IuKWoiJ9KSxxP1goImRpdiIse2NsYXNzTmFtZToidGV4dC1kYW5nZXIgdGV4dC1bMTFweF0gZm9udC1tb25vIixjaGlsZHJlbjpxfSk6bnVsbCxYKCJidXR0b24iLHt0eXBlOiJidXR0b24iLG9uQ2xpY2s6KEIpPT57Qi5wcmV2ZW50RGVmYXVsdCgpLEIuc3RvcFByb3BhZ2F0aW9uKCksUSgpfSxkaXNhYmxlZDpKLGNsYXNzTmFtZTpgcHgtMyBweS0xLjUgcm91bmRlZC1tZCBib3JkZXIgYm9yZGVyLVsjMzMzXSB0ZXh0LVsxMXB4XSBmb250LW1vbm8gJHtKPyJiZy1bIzFhMWExYV0gdGV4dC13aGl0ZS81NSBjdXJzb3ItZGVmYXVsdCI6ImJnLVsjMWQyYTFkXSB0ZXh0LXN1Y2Nlc3MgY3Vyc29yLXBvaW50ZXIifWAsY2hpbGRyZW46Sj9HPyJTdGFydGluZ+KApiI6IkJvb3RpbmfigKYiOkc/IlN0YXJ0IHN0cmVhbSI6IkJvb3QgJiBzdGFydCJ9KV19KSxYKCJkaXYiLHtjbGFzc05hbWU6InB4LTIuNSBweS0xLjUgYm9yZGVyLXQgYm9yZGVyLVsjMjIyXSB0ZXh0LVsxMXB4XSBmb250LW1vbm8gdGV4dC13aGl0ZS83MCBmbGV4IGp1c3RpZnktYmV0d2VlbiBnYXAtMiIsY2hpbGRyZW46W1goInNwYW4iLHtjbGFzc05hbWU6Im92ZXJmbG93LWhpZGRlbiB0ZXh0LWVsbGlwc2lzIHdoaXRlc3BhY2Utbm93cmFwIixjaGlsZHJlbjpDLm5hbWV9KSxYKCJzcGFuIix7Y2xhc3NOYW1lOiJ3aGl0ZXNwYWNlLW5vd3JhcCIsc3R5bGU6e2NvbG9yOkx9LGNoaWxkcmVuOltWLFk/WCgic3BhbiIse2NsYXNzTmFtZToidGV4dC13aGl0ZS80MCIsY2hpbGRyZW46WyIgOiIsWS5wb3J0XX0pOm51bGxdfSldfSldfSl9ZnVuY3Rpb24gVzMoe29wZW46QyxvbkNsb3NlOkssY3VycmVudFVkaWQ6JCx3aWR0aDpKfSl7bGV0IE49d2luZG93Ll9fU0lNX1BSRVZJRVdfXyxxPU4/LmdyaWRBcGlFbmRwb2ludCxRPU4/LmdyaWRTdGFydEVuZHBvaW50LFo9Tj8uZ3JpZFNodXRkb3duRW5kcG9pbnQsWT1OPy5ncmlkTWVtb3J5RW5kcG9pbnQsRz1OPy5wcmV2aWV3RW5kcG9pbnQ/PyIvIixbVixMXT1iKHt9KSxbayxEXT1iKHt9KSxbeixCXT1iKHt9KSxfPU9iamVjdC52YWx1ZXMoVikuc29tZShCb29sZWFuKXx8T2JqZWN0LnZhbHVlcyhrKS5zb21lKEJvb2xlYW4pLHtkZXZpY2VzOkgscmVmcmVzaDpPfT1UMyhxLEMsXyksRT1NMyhZLEMpLHk9UChhc3luYyhnLGg9MjAwMDApPT57aWYoIXEpcmV0dXJuIG51bGw7bGV0IFI9RGF0ZS5ub3coKStoO3doaWxlKERhdGUubm93KCk8Uil7dHJ5e2xldCBYMT0oKGF3YWl0KGF3YWl0IGZldGNoKHEse2NhY2hlOiJuby1zdG9yZSJ9KSkuanNvbigpKS5kZXZpY2VzPz9bXSkuZmluZCgoZCk9PmQuZGV2aWNlPT09ZyYmZC5oZWxwZXIpO2lmKFgxKXJldHVybiBYMX1jYXRjaHt9YXdhaXQgbmV3IFByb21pc2UoKGEpPT5zZXRUaW1lb3V0KGEsNDAwKSl9cmV0dXJuIG51bGx9LFtxXSksbz1QKGFzeW5jKGcpPT57aWYoIVEpcmV0dXJuO0woKGgpPT4oey4uLmgsW2ddOiEwfSkpLEIoKGgpPT4oey4uLmgsW2ddOm51bGx9KSk7dHJ5e2xldCBoPWF3YWl0IGZldGNoKFEse21ldGhvZDoiUE9TVCIsaGVhZGVyczp7IkNvbnRlbnQtVHlwZSI6ImFwcGxpY2F0aW9uL2pzb24ifSxib2R5OkpTT04uc3RyaW5naWZ5KHt1ZGlkOmd9KX0pLFI9YXdhaXQgaC5qc29uKCkuY2F0Y2goKCk9Pih7fSkpO2lmKCFoLm9rfHwhUi5vayl7QigodSk9Pih7Li4udSxbZ106Ui5lcnJvcj8/YEhUVFAgJHtoLnN0YXR1c31gfSkpO3JldHVybn1pZihhd2FpdCB5KGcpKXt3aW5kb3cubG9jYXRpb24uYXNzaWduKHkwKEcsZykpO3JldHVybn1CKCh1KT0+KHsuLi51LFtnXToiSGVscGVyIGRpZCBub3QgcmVnaXN0ZXIgaW4gdGltZSJ9KSl9Y2F0Y2goaCl7QigoUik9Pih7Li4uUixbZ106aD8ubWVzc2FnZT8/IlJlcXVlc3QgZmFpbGVkIn0pKX1maW5hbGx5e0woKGgpPT4oey4uLmgsW2ddOiExfSkpLE8oKX19LFtRLE8seSxHXSk7VygoKT0+e2lmKCFIfHwhJClyZXR1cm47aWYoSC5maW5kKChSKT0+Ui5kZXZpY2U9PT0kKT8uaGVscGVyKXJldHVybjtsZXQgaD1ILmZpbmQoKFIpPT5SLmhlbHBlciYmUi5kZXZpY2UhPT0kKTt3aW5kb3cubG9jYXRpb24uYXNzaWduKGg/eTAoRyxoLmRldmljZSk6Ryl9LFtILCQsR10pO2xldCB4PVAoYXN5bmMoZyk9PntpZighWilyZXR1cm47RCgoaCk9Pih7Li4uaCxbZ106ITB9KSksQigoaCk9Pih7Li4uaCxbZ106bnVsbH0pKTt0cnl7bGV0IGg9YXdhaXQgZmV0Y2goWix7bWV0aG9kOiJQT1NUIixoZWFkZXJzOnsiQ29udGVudC1UeXBlIjoiYXBwbGljYXRpb24vanNvbiJ9LGJvZHk6SlNPTi5zdHJpbmdpZnkoe3VkaWQ6Z30pfSksUj1hd2FpdCBoLmpzb24oKS5jYXRjaCgoKT0+KHt9KSk7aWYoIWgub2t8fCFSLm9rKUIoKGEpPT4oey4uLmEsW2ddOlIuZXJyb3I/P2BIVFRQICR7aC5zdGF0dXN9YH0pKX1jYXRjaChoKXtCKChSKT0+KHsuLi5SLFtnXTpoPy5tZXNzYWdlPz8iUmVxdWVzdCBmYWlsZWQifSkpfWZpbmFsbHl7RCgoaCk9Pih7Li4uaCxbZ106ITF9KSksTygpfX0sW1osT10pO3JldHVybiBYKEIwLHtvcGVuOkMsd2lkdGg6SixjaGlsZHJlbjpbWChfMCx7Y2hpbGRyZW46W1goTjIse2NoaWxkcmVuOiJTaW11bGF0b3JzIn0pLFgoImRpdiIse2NsYXNzTmFtZToiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTIiLGNoaWxkcmVuOltYKFAzLHtyZXBvcnQ6RX0pLFgoazAse29uQ2xpY2s6S30pXX0pXX0pLFgoImRpdiIse2NsYXNzTmFtZToiZmxleC0xIG1pbi1oLTAgb3ZlcmZsb3cteS1hdXRvIHAtMy41IGdyaWQgYXV0by1yb3dzLVttaW5tYXgoMzAwcHgsYXV0byldIGdhcC0zIGNvbnRlbnQtc3RhcnQgZ3JpZC1jb2xzLVtyZXBlYXQoYXV0by1maWxsLG1pbm1heCgyMDBweCwxZnIpKV0iLGNoaWxkcmVuOkg9PT1udWxsP251bGw6SC5sZW5ndGg9PT0wP1goImRpdiIse2NsYXNzTmFtZToiY29sLXNwYW4tZnVsbCBiZy1wYW5lbCBib3JkZXIgYm9yZGVyLWRhc2hlZCBib3JkZXItd2hpdGUvMTAgcm91bmRlZC1bMTBweF0gcC00IHRleHQtd2hpdGUvNTAgdGV4dC1bMTJweF0gdGV4dC1jZW50ZXIiLGNoaWxkcmVuOiJObyBpT1Mgc2ltdWxhdG9ycyBhdmFpbGFibGUuIn0pOkgubWFwKChnKT0+WCh5Myx7ZGV2aWNlOmcsYWN0aXZlOmcuZGV2aWNlPT09JCxwcmV2aWV3RW5kcG9pbnQ6RyxzdGFydGluZzohIVZbZy5kZXZpY2VdLHNodXR0aW5nRG93bjohIWtbZy5kZXZpY2VdLGVycm9yOnpbZy5kZXZpY2VdPz9udWxsLG9uU3RhcnQ6KCk9Pm8oZy5kZXZpY2UpLG9uU2h1dGRvd246KCk9PngoZy5kZXZpY2UpfSxnLmRldmljZSkpfSldfSl9ZnVuY3Rpb24gcTIoe3BhbmVsV2lkdGg6Qyx2aXNpYmxlOkssb25Qb2ludGVyRG93bjokLGFyaWFMYWJlbDpKfSl7bGV0W04scV09YighMSksW1EsWl09YighMSksWT1OfHxRLEc9MTIrQy05O3JldHVybiBYKCJkaXYiLHtyb2xlOiJzZXBhcmF0b3IiLCJhcmlhLW9yaWVudGF0aW9uIjoidmVydGljYWwiLCJhcmlhLWxhYmVsIjpKLCJhcmlhLWhpZGRlbiI6IUssb25Qb2ludGVyRG93bjooVik9PntaKCEwKSwkKFYpfSxvblBvaW50ZXJVcDooKT0+WighMSksb25Qb2ludGVyQ2FuY2VsOigpPT5aKCExKSxvblBvaW50ZXJFbnRlcjooKT0+cSghMCksb25Qb2ludGVyTGVhdmU6KCk9PnEoITEpLGNsYXNzTmFtZTpgZml4ZWQgdG9wLTMgYm90dG9tLTMgdy00IHotMzYgY3Vyc29yLWNvbC1yZXNpemUgdG91Y2gtbm9uZSB0cmFuc2l0aW9uLW9wYWNpdHkgZHVyYXRpb24tMjAwICR7Sz8ib3BhY2l0eS0xMDAgcG9pbnRlci1ldmVudHMtYXV0byI6Im9wYWNpdHktMCBwb2ludGVyLWV2ZW50cy1ub25lIn1gLHN0eWxlOntyaWdodDpHfSxjaGlsZHJlbjpbWCgiZGl2Iix7Y2xhc3NOYW1lOmBhYnNvbHV0ZSB0b3AtMCBib3R0b20tMCBsZWZ0LTEvMiB3LXB4IHBvaW50ZXItZXZlbnRzLW5vbmUgdHJhbnNpdGlvbi1vcGFjaXR5IGR1cmF0aW9uLTE1MCAke1k/Im9wYWNpdHktMTAwIjoib3BhY2l0eS0wIn1gLHN0eWxlOnt0cmFuc2Zvcm06InRyYW5zbGF0ZVgoLTAuNXB4KSIsYmFja2dyb3VuZDoibGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSwgcmdiYSgyNTUsMjU1LDI1NSwwKSAwJSwgcmdiYSgyNTUsMjU1LDI1NSwwLjI4KSAzMCUsIHJnYmEoMjU1LDI1NSwyNTUsMC4yOCkgNzAlLCByZ2JhKDI1NSwyNTUsMjU1LDApIDEwMCUpIn19KSxYKCJkaXYiLHtjbGFzc05hbWU6YGFic29sdXRlIHRvcC0xLzIgbGVmdC0xLzIgdy0xIGgtNyByb3VuZGVkLXhzIC10cmFuc2xhdGUteC0xLzIgLXRyYW5zbGF0ZS15LTEvMiB6LTEgcG9pbnRlci1ldmVudHMtbm9uZSBbdHJhbnNpdGlvbjpvcGFjaXR5XzAuMTVzX2Vhc2UsYmFja2dyb3VuZF8wLjE1c19lYXNlXSAke1k/Im9wYWNpdHktMTAwIjoib3BhY2l0eS0wIn0gJHtRPyJiZy1bIzlhOWE5ZV0iOiJiZy1bIzZlNmU3Ml0ifWB9KV19KX1mdW5jdGlvbiBFMygpe2xldFtDLEtdPWIoKCk9PnR5cGVvZiB3aW5kb3c8InUiJiZ3aW5kb3cubWF0Y2hNZWRpYT8uKCIocHJlZmVycy1jb250cmFzdDogbW9yZSkiKS5tYXRjaGVzPT09ITApO3JldHVybiBXKCgpPT57aWYodHlwZW9mIHdpbmRvdz4idSJ8fCF3aW5kb3cubWF0Y2hNZWRpYSlyZXR1cm47bGV0ICQ9d2luZG93Lm1hdGNoTWVkaWEoIihwcmVmZXJzLWNvbnRyYXN0OiBtb3JlKSIpLEo9KCk9PksoJC5tYXRjaGVzKTtyZXR1cm4gSigpLCQuYWRkRXZlbnRMaXN0ZW5lcigiY2hhbmdlIixKKSwoKT0+JC5yZW1vdmVFdmVudExpc3RlbmVyKCJjaGFuZ2UiLEopfSxbXSksQ31mdW5jdGlvbiBRMigpe2xldFtDLEtdPWIoKCk9PnR5cGVvZiB3aW5kb3c8InUiJiZ3aW5kb3cubWF0Y2hNZWRpYT8uKCIocHJlZmVycy1yZWR1Y2VkLW1vdGlvbjogcmVkdWNlKSIpLm1hdGNoZXM9PT0hMCk7cmV0dXJuIFcoKCk9PntpZih0eXBlb2Ygd2luZG93PiJ1Inx8IXdpbmRvdy5tYXRjaE1lZGlhKXJldHVybjtsZXQgJD13aW5kb3cubWF0Y2hNZWRpYSgiKHByZWZlcnMtcmVkdWNlZC1tb3Rpb246IHJlZHVjZSkiKSxKPSgpPT5LKCQubWF0Y2hlcyk7cmV0dXJuIEooKSwkLmFkZEV2ZW50TGlzdGVuZXIoImNoYW5nZSIsSiksKCk9PiQucmVtb3ZlRXZlbnRMaXN0ZW5lcigiY2hhbmdlIixKKX0sW10pLEN9dmFyIEkzPTI4MDt2YXIgbzI9IndpZHRoIDcwbXMgbGluZWFyIixkMj0id2lkdGggMC4yNHMgY3ViaWMtYmV6aWVyKDAuMjIsIDEsIDAuMzYsIDEpIixTMz0icGFkZGluZy1yaWdodCAwLjI0cyBjdWJpYy1iZXppZXIoMC4yMiwgMSwgMC4zNiwgMSkiLGgzPSJjdWJpYy1iZXppZXIoMC4yLCAwLjgyLCAwLjIyLCAxKSIsVzA9ImN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSkiLHgzPSJsaW5lYXIoMCwgMC4zMiA5JSwgMC42MiAxOCUsIDAuODUgMjclLCAxLjAxIDM2JSwgMS4wNyA0NSUsIDEuMDUgNTYlLCAxLjAyIDcwJSwgMSkiLHYzPSIwLjVzIixnMz0iMC40MnMiLG0zPTU4MCxSMz0iY3ViaWMtYmV6aWVyKDAsIDAsIDAuMiwgMSkiLGozPTQ0MCxjMj01LHAzPXtpZGxlOjEsaG92ZXI6MS4wOSxkcmFnOjEuMTJ9LGYzPXtpZGxlOiJyZ2JhKDI0NSwyNDcsMjUyLDAuNTUpIixob3ZlcjoicmdiYSgyNDgsMjUwLDI1NSwwLjcpIixkcmFnOiJyZ2JhKDI1NSwyNTUsMjU1LDAuOTQpIn0sbDM9e2lkbGU6My45NSxob3Zlcjo0LjE1LGRyYWc6NC42NX0sdTM9e2lkbGU6WzAuNzQsMC41OF0saG92ZXI6WzAuODIsMC42OF0sZHJhZzpbMSwwLjk2XX0sbzM9e2lkbGU6MC40LGhvdmVyOjAuNSxkcmFnOjAuODV9LGQzPXtpZGxlOjAsaG92ZXI6MC40NSxkcmFnOjAuNjh9LFoyPW51bGw7ZnVuY3Rpb24gYzMoKXtpZihaMiE9bnVsbClyZXR1cm4gWjI7aWYodHlwZW9mIENTUz4idSJ8fHR5cGVvZiBDU1Muc3VwcG9ydHMhPT0iZnVuY3Rpb24iKXJldHVybiExO3JldHVybiBaMj1DU1Muc3VwcG9ydHMoImFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb24iLCJsaW5lYXIoMCwgMSkiKSxaMn1mdW5jdGlvbiBhMyhDKXtyZXR1cm4gQy5yZXBsYWNlKC9bXmEtekEtWjAtOV8tXS9nLCIiKX12YXIgYzk9NDAsaTM9MTQscjM9MjQwLG4zPTMwLHMzPTAuMTUsYTk9ODAsdDM9MTUwLGUzPTI1MCxhMj0ic2VydmUtc2ltOnNpbXVsYXRvci1mcmFtZS1zY2FsZSI7ZnVuY3Rpb24gaTIoQyxLLCQsSil7bGV0IE49QyozLHE9Sz4wP01hdGgubWF4KDI4MCxLLTQ4KTpOLFE9JD4wJiZOdW1iZXIuaXNGaW5pdGUoSikmJko+MD9NYXRoLm1heCgyODAsKCQtMTM2KSpKKTpOO3JldHVybiBNYXRoLm1pbihOLHEsUSl9ZnVuY3Rpb24gRDAoQyxLLCQsSixOKXtsZXQgcT1pMihLLCQsSixOKSxRPU1hdGgubWluKDI4MCxxKTtyZXR1cm4gTWF0aC5taW4ocSxNYXRoLm1heChRLEMpKX1mdW5jdGlvbiBHMihDKXtpZighTnVtYmVyLmlzRmluaXRlKEMpKXJldHVybiBDO2xldCBLPXR5cGVvZiB3aW5kb3c8InUiP01hdGgubWF4KDEsd2luZG93LmRldmljZVBpeGVsUmF0aW98fDEpOjE7cmV0dXJuIE1hdGgucm91bmQoQypLKS9LfWZ1bmN0aW9uIHIyKEMsSyl7aWYoQzw9MHx8Szw9MClyZXR1cm4gMDtsZXQgJD0wLjU1LEo9QypLKiQvKEsrJCpDKTtyZXR1cm4gTWF0aC5taW4oYzksSil9ZnVuY3Rpb24gQzgoQyxLLCQpe2xldCBKPUMsTj0kO2ZvcihsZXQgcSBvZiBLKXtsZXQgUT1NYXRoLmFicyhDLXEpO2lmKFE8TilKPXEsTj1RfXJldHVybiBKfWZ1bmN0aW9uIEs4KEMpe2xldHtmcm9tOkssdG86JCx2ZWxvY2l0eTpKLHN0aWZmbmVzczpOLGRhbXBpbmc6cSxvblVwZGF0ZTpRLG9uQ29tcGxldGU6Wn09QyxZPTAuNCxHPTAuMDMzMzMzMzMzMzMzMzMzMzMsVj1LLEw9SixrPXBlcmZvcm1hbmNlLm5vdygpLEQ9MCx6PSExLEI9KF8pPT57aWYoeilyZXR1cm47bGV0IEg9TWF0aC5taW4oKF8taykvMTAwMCwwLjAzMzMzMzMzMzMzMzMzMzMzKTtrPV87bGV0IE89LU4qKFYtJCktcSpMO2lmKEwrPU8qSCxWKz1MKkgsTWF0aC5hYnMoTCk8MC40JiZNYXRoLmFicyhWLSQpPDAuNCl7USgkKSxaPy4oKTtyZXR1cm59UShWKSxEPXJlcXVlc3RBbmltYXRpb25GcmFtZShCKX07cmV0dXJuIEQ9cmVxdWVzdEFuaW1hdGlvbkZyYW1lKEIpLCgpPT57aWYoej0hMCxEKWNhbmNlbEFuaW1hdGlvbkZyYW1lKEQpfX1mdW5jdGlvbiAkOChDKXtpZihDLmxlbmd0aDwyKXJldHVybiAwO2xldCBLPUNbQy5sZW5ndGgtMV0sJD1DWzBdO2ZvcihsZXQgTj1DLmxlbmd0aC0xO04+PTA7Ti0tKWlmKEsudC1DW05dLnQ+PWE5KXskPUNbTl07YnJlYWt9bGV0IEo9KEsudC0kLnQpLzEwMDA7cmV0dXJuIEo+MD8oSy54LSQueCkvSjowfXZhciBYOD0iZHJvcC1zaGFkb3coMCAwLjVweCAxcHggcmdiYSgwLDAsMCwwLjEpKSBkcm9wLXNoYWRvdygwIDJweCA1cHggcmdiYSgwLDAsMCwwLjEzKSkiLEo4PSJkcm9wLXNoYWRvdygwIDFweCAxLjVweCByZ2JhKDAsMCwwLDAuMTYpKSIsaTk9W1s2LCJyZ2JhKDE2MCwyMDUsMjU1LDAuNDIpIl0sWzQuNTUsInJnYmEoMjU1LDI1NSwyNTUsMC45NykiXV07ZnVuY3Rpb24gTjgoe2RGaWxsOkMsdzpLLGNsYXNzTmFtZTokLG9uRW5kOkp9KXtyZXR1cm4gWChOMSx7Y2hpbGRyZW46aTkubWFwKChbTixxXSk9PlgoInBhdGgiLHtjbGFzc05hbWU6JCxkOkMsZmlsbDoibm9uZSIscGF0aExlbmd0aDoxLHN0cm9rZTpxLHN0cm9rZVdpZHRoOk4qSyxzdHJva2VMaW5lY2FwOiJyb3VuZCIsb25BbmltYXRpb25FbmQ6Sn0sTikpfSl9dmFyIHI5PXIxKGZ1bmN0aW9uKHthcmM6SyxwaGFzZTokLHJlZHVjZWRNb3Rpb246SixoaWdoQ29udHJhc3Q6Tixmb2N1c1Zpc2libGU6cSxvblBvaW50ZXJEb3duOlEsb25Qb2ludGVyTW92ZTpaLG9uUG9pbnRlclVwOlksb25Qb2ludGVyQ2FuY2VsOkcsb25Qb2ludGVyRW50ZXI6VixvblBvaW50ZXJMZWF2ZTpMLG9uTW91c2VEb3duOmt9LEQpe2xldCB6PW8wKCksQj1hMyh6KSxfPWBzZXJ2ZS1zaW0tcnotYmgtJHtCfWAsSD1gc2VydmUtc2ltLXJ6LWJkLSR7Qn1gLE89YHNlcnZlU2ltUnpEaXNjaGFyZ2VLZiR7Qn1gLEU9YHNlcnZlU2ltUnpEaXNjaGFyZ2Uke0J9YCx5PSQhPT0iaWRsZSIsbz12KCExKSx4PXYoITEpLGc9digwKSxbaCxSXT1iKCExKSxhPXYoMC40NSksdT12KDApO2lmKHkmJiFvLmN1cnJlbnQpZy5jdXJyZW50Kz0xO28uY3VycmVudD15LHUwKCgpPT57aWYoeC5jdXJyZW50JiYheSl1LmN1cnJlbnQ9MCxSKCEwKTtpZih5KVIoITEpO3guY3VycmVudD15fSxbeV0pO2xldCBYMT1nLmN1cnJlbnQsZD1gc2VydmVTaW1SekNoZ18ke0J9XyR7WDF9YCxpPWBzZXJ2ZVNpbVJ6Q2hnXyR7Qn1fJHtYMX1gLFM9UCgoKT0+e2lmKHUuY3VycmVudCs9MSx1LmN1cnJlbnQ+PTIpUighMSksdS5jdXJyZW50PTB9LFtdKSxtPU4/MS4xMjoxLEoxPSg2K2MyKjIpKm0sSzE9Sj8xOnAzWyRdLFkxPWwzWyRdKm0sW3ExLHRdPXUzWyRdLCQxPU4/cTE6dCxBPW8zWyRdLEk9ZDNbJF0saj0kPT09ImRyYWciP2B1cmwoIyR7SH0pYDpgdXJsKCMke199KWA7VygoKT0+e2lmKHkpYS5jdXJyZW50PUl9LFt5LEldKTtsZXQgcz0hSiYmKHl8fGgpLGU9eT9JOmEuY3VycmVudCxEMT15P3YzOmczLEcxPXk/aDM6VzAsRTE9eSYmYzMoKT94MzpHMSxJMT1KPyJub25lIjpgdHJhbnNmb3JtICR7RDF9ICR7RTF9YCxGMT1KPyJub25lIjpgb3BhY2l0eSAke0QxfSAke0cxfSwgc3Ryb2tlLXdpZHRoICR7RDF9ICR7RzF9YCx3MT1KPyJub25lIjpgb3BhY2l0eSAke0QxfSAke0cxfWAsTDE9Sy52aWV3Qm94U2l6ZSxWMT1LLmQscDE9IUomJih5fHxoKSYmZT4wLGYxPXt0cmFuc2Zvcm06YHRyYW5zbGF0ZTNkKDAsMCwwKSBzY2FsZSgke0sxfSlgLHRyYW5zZm9ybU9yaWdpbjoiMTAwJSAxMDAlIix0cmFuc2l0aW9uOkkxLHdpbGxDaGFuZ2U6Sj92b2lkIDA6InRyYW5zZm9ybSIsYmFja2ZhY2VWaXNpYmlsaXR5OiJoaWRkZW4iLFdlYmtpdEJhY2tmYWNlVmlzaWJpbGl0eToiaGlkZGVuIn07cmV0dXJuIFgoInN2ZyIse3JlZjpELHdpZHRoOkwxLGhlaWdodDpMMSx2aWV3Qm94OmAwIDAgJHtMMX0gJHtMMX1gLGZpbGw6Im5vbmUiLHhtbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsImFyaWEtaGlkZGVuIjoidHJ1ZSIsc2hhcGVSZW5kZXJpbmc6Imdlb21ldHJpY1ByZWNpc2lvbiIsc3R5bGU6e2Rpc3BsYXk6ImJsb2NrIixvdmVyZmxvdzoidmlzaWJsZSIsY3Vyc29yOiJud3NlLXJlc2l6ZSIsdG91Y2hBY3Rpb246Im5vbmUiLHBvaW50ZXJFdmVudHM6ImF1dG8ifSxvblBvaW50ZXJEb3duOlEsb25Qb2ludGVyTW92ZTpaLG9uUG9pbnRlclVwOlksb25Qb2ludGVyQ2FuY2VsOkcsb25Mb3N0UG9pbnRlckNhcHR1cmU6WSxvblBvaW50ZXJFbnRlcjpWLG9uUG9pbnRlckxlYXZlOkwsb25Nb3VzZURvd246ayxjaGlsZHJlbjpbWCgiZGVmcyIse2NoaWxkcmVuOltYKCJmaWx0ZXIiLHtpZDpfLHg6Ii01MCUiLHk6Ii01MCUiLHdpZHRoOiIyMDAlIixoZWlnaHQ6IjIwMCUiLGNvbG9ySW50ZXJwb2xhdGlvbkZpbHRlcnM6InNSR0IiLGNoaWxkcmVuOltYKCJmZUdhdXNzaWFuQmx1ciIse2luOiJTb3VyY2VHcmFwaGljIixzdGREZXZpYXRpb246Tj8wLjg1OjEuMDUscmVzdWx0OiJiIn0pLFgoImZlTWVyZ2UiLHtjaGlsZHJlbjpYKCJmZU1lcmdlTm9kZSIse2luOiJiIn0pfSldfSksWCgiZmlsdGVyIix7aWQ6SCx4OiItNTIlIix5OiItNTIlIix3aWR0aDoiMjA0JSIsaGVpZ2h0OiIyMDQlIixjb2xvckludGVycG9sYXRpb25GaWx0ZXJzOiJzUkdCIixjaGlsZHJlbjpbWCgiZmVHYXVzc2lhbkJsdXIiLHtpbjoiU291cmNlR3JhcGhpYyIsc3RkRGV2aWF0aW9uOk4/MS4xNToxLjQyLHJlc3VsdDoiYiJ9KSxYKCJmZU1lcmdlIix7Y2hpbGRyZW46WCgiZmVNZXJnZU5vZGUiLHtpbjoiYiJ9KX0pXX0pLFgoInN0eWxlIix7dHlwZToidGV4dC9jc3MiLGNoaWxkcmVuOmAKICAgICAgICAgICAgJHt5P2AKICAgICAgICAgICAgQGtleWZyYW1lcyAke2R9IHsKICAgICAgICAgICAgICBmcm9tIHsgc3Ryb2tlLWRhc2hvZmZzZXQ6IDE7IH0KICAgICAgICAgICAgICB0byB7IHN0cm9rZS1kYXNob2Zmc2V0OiAwOyB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgLiR7aX0gewogICAgICAgICAgICAgIHN0cm9rZS1kYXNoYXJyYXk6IDE7CiAgICAgICAgICAgICAgc3Ryb2tlLWRhc2hvZmZzZXQ6IDE7CiAgICAgICAgICAgICAgdmVjdG9yLWVmZmVjdDogbm9uZTsKICAgICAgICAgICAgICBhbmltYXRpb246ICR7ZH0gJHttM31tcyAke1IzfSBmb3J3YXJkczsKICAgICAgICAgICAgfQogICAgICAgICAgICBgOiIifQogICAgICAgICAgICBAa2V5ZnJhbWVzICR7T30gewogICAgICAgICAgICAgIGZyb20geyBzdHJva2UtZGFzaG9mZnNldDogMDsgfQogICAgICAgICAgICAgIHRvIHsgc3Ryb2tlLWRhc2hvZmZzZXQ6IDE7IH0KICAgICAgICAgICAgfQogICAgICAgICAgICAuJHtFfSB7CiAgICAgICAgICAgICAgc3Ryb2tlLWRhc2hhcnJheTogMTsKICAgICAgICAgICAgICBzdHJva2UtZGFzaG9mZnNldDogMDsKICAgICAgICAgICAgICB2ZWN0b3ItZWZmZWN0OiBub25lOwogICAgICAgICAgICAgIGFuaW1hdGlvbjogJHtPfSAke2ozfW1zICR7VzB9IGZvcndhcmRzOwogICAgICAgICAgICAgIGFuaW1hdGlvbi1maWxsLW1vZGU6IGJvdGg7CiAgICAgICAgICAgIH0KICAgICAgICAgIGB9KV19KSxYKCJnIix7ImFyaWEtaGlkZGVuIjoidHJ1ZSIsc3R5bGU6e3BvaW50ZXJFdmVudHM6Im5vbmUifSxjaGlsZHJlbjpbWCgicGF0aCIse2Q6VjEsc3Ryb2tlOiJyZ2JhKDMwLDMyLDM4LDAuNSkiLHN0cm9rZVdpZHRoOjUuODUqbSxzdHJva2VMaW5lY2FwOiJyb3VuZCIsdmVjdG9yRWZmZWN0OiJub24tc2NhbGluZy1zdHJva2UiLHN0eWxlOntvcGFjaXR5OjAuMDg5NjAwMDAwMDAwMDAwMDEsZmlsdGVyOko4fX0pLFgoInBhdGgiLHtkOlYxLHN0cm9rZToicmdiYSgxNiwxNywyMiwwLjM4KSIsc3Ryb2tlV2lkdGg6NC42Km0sc3Ryb2tlTGluZWNhcDoicm91bmQiLHZlY3RvckVmZmVjdDoibm9uLXNjYWxpbmctc3Ryb2tlIixzdHlsZTp7b3BhY2l0eTowLjU1LGZpbHRlcjpKOH19KV19KSxYKCJnIix7ImFyaWEtaGlkZGVuIjoidHJ1ZSIsc3R5bGU6e3BvaW50ZXJFdmVudHM6Im5vbmUifSxjaGlsZHJlbjpbWCgicGF0aCIse2Q6VjEsZmlsbDoibm9uZSIsc3Ryb2tlOiJyZ2JhKDEwLCAxMzIsIDI1NSwgMC45NSkiLHN0cm9rZVdpZHRoOihjMioyKzYpKm0sc3Ryb2tlTGluZWNhcDoicm91bmQiLHZlY3RvckVmZmVjdDoibm9uLXNjYWxpbmctc3Ryb2tlIixzdHlsZTp7b3BhY2l0eTpxPzAuOTU6MCx0cmFuc2l0aW9uOko/Im9wYWNpdHkgODBtcyBsaW5lYXIiOmBvcGFjaXR5IDIwMG1zICR7VzB9YCxmaWx0ZXI6ImRyb3Atc2hhZG93KDAgMCAycHggcmdiYSgxMCwxMzIsMjU1LDAuNTUpKSBkcm9wLXNoYWRvdygwIDAgNHB4IHJnYmEoMTAsMTMyLDI1NSwwLjMyKSkifX0pLFgoInBhdGgiLHtkOlYxLGZpbGw6Im5vbmUiLHN0cm9rZToicmdiYSgyNTUsMjU1LDI1NSwwLjk1KSIsc3Ryb2tlV2lkdGg6MS41Km0sc3Ryb2tlTGluZWNhcDoicm91bmQiLHZlY3RvckVmZmVjdDoibm9uLXNjYWxpbmctc3Ryb2tlIixzdHlsZTp7b3BhY2l0eTpxPzAuNzowLHRyYW5zaXRpb246Sj8ib3BhY2l0eSA4MG1zIGxpbmVhciI6YG9wYWNpdHkgMjAwbXMgJHtXMH1gfX0pXX0pLFgoImciLHsiYXJpYS1oaWRkZW4iOiJ0cnVlIixzdHlsZTpmMSxjaGlsZHJlbjpbWCgiZyIse3N0eWxlOntwb2ludGVyRXZlbnRzOiJub25lIn0sY2hpbGRyZW46W3AxJiZYKCJwYXRoIix7ZDpWMSxzdHJva2U6InJnYmEoMjEwLDIyOCwyNTUsMC40KSIsc3Ryb2tlV2lkdGg6NC4yNSptLHN0cm9rZUxpbmVjYXA6InJvdW5kIix2ZWN0b3JFZmZlY3Q6Im5vbi1zY2FsaW5nLXN0cm9rZSIsZmlsdGVyOmosc3R5bGU6e29wYWNpdHk6ZSowLjgyLHRyYW5zaXRpb246dzF9fSksSiYmST4wJiZYKCJwYXRoIix7ZDpWMSxzdHJva2U6InJnYmEoMjU1LDI1NSwyNTUsMC44MikiLHN0cm9rZVdpZHRoOjQuMTUqbSxzdHJva2VMaW5lY2FwOiJyb3VuZCIsdmVjdG9yRWZmZWN0OiJub24tc2NhbGluZy1zdHJva2UiLGZpbHRlcjpqLHN0eWxlOntvcGFjaXR5OkksdHJhbnNpdGlvbjp3MX19KSxYKCJwYXRoIix7ZDpWMSxzdHJva2U6ZjNbJF0sc3Ryb2tlV2lkdGg6WTEsc3Ryb2tlTGluZWNhcDoicm91bmQiLHZlY3RvckVmZmVjdDoibm9uLXNjYWxpbmctc3Ryb2tlIixzdHlsZTp7b3BhY2l0eTokMSx0cmFuc2l0aW9uOkYxLGZpbHRlcjpYOH19KSxYKCJwYXRoIix7ZDpWMSxzdHJva2U6InJnYmEoMjM2LDI0NCwyNTIsMC45MikiLHN0cm9rZVdpZHRoOjEuMzgqbSxzdHJva2VMaW5lY2FwOiJyb3VuZCIsdmVjdG9yRWZmZWN0OiJub24tc2NhbGluZy1zdHJva2UiLHN0eWxlOntvcGFjaXR5OkEsdHJhbnNpdGlvbjpGMSxmaWx0ZXI6WDh9fSkscyYmWCgiZyIse3N0eWxlOntvcGFjaXR5OmUsdHJhbnNpdGlvbjp3MX0sY2hpbGRyZW46W3kmJlgoImciLHtjaGlsZHJlbjpYKE44LHtkRmlsbDpLLmRGaWxsLHc6bSxjbGFzc05hbWU6aX0pfSxgcnotY2hhcmdlLSR7WDF9YCksaCYmIXkmJlgoImciLHtjaGlsZHJlbjpYKE44LHtkRmlsbDpLLmRGaWxsLHc6bSxjbGFzc05hbWU6RSxvbkVuZDpTfSl9LCJyei1kaXNjaGFyZ2UiKV19KV19KSxYKCJwYXRoIix7ZDpWMSxmaWxsOiJub25lIixzdHJva2U6InJnYmEoMCwwLDAsMCkiLHN0cm9rZVdpZHRoOkoxLHN0cm9rZUxpbmVjYXA6InJvdW5kIixwb2ludGVyRXZlbnRzOiJzdHJva2UifSldfSldfSl9KTtmdW5jdGlvbiBxOCh7c2ltdWxhdG9yUmVzaXplOkMsZGV2aWNlVHlwZTpLLHN0cmVhbUNvbmZpZzokLGNvbnRhaW5lcldpZHRoOkosY29udGFpbmVySGVpZ2h0Ok59KXtsZXQgcT1RMigpLFE9RTMoKSxbWixZXT1iKCExKSxHPU0xKCgpPT5oMih7dHlwZTpLLGNvbmZpZzokPz9udWxsLGNvbnRhaW5lcldpZHRoOkosY29udGFpbmVySGVpZ2h0Ok59KSxbSywkLEosTl0pLFY9Qy5pc1Jlc2l6aW5nfHxDLmlzSW5lcnRpYT8iZHJhZyI6Qy5oYW5kbGVIb3ZlcmVkPyJob3ZlciI6ImlkbGUiO3JldHVybiBYKCJkaXYiLHtyb2xlOiJzZXBhcmF0b3IiLCJhcmlhLWxhYmVsIjoiUmVzaXplIHNpbXVsYXRvciB3aWR0aC4gRHJhZyB0aGUgY29ybmVyIG9yIHVzZSBMZWZ0IGFuZCBSaWdodCBBcnJvdyBrZXlzOyBob2xkIFNoaWZ0IGZvciBsYXJnZXIgc3RlcHMuIiwiYXJpYS1vcmllbnRhdGlvbiI6InZlcnRpY2FsIiwiYXJpYS12YWx1ZW1pbiI6TWF0aC5yb3VuZChDLm1pbldpZHRoKSwiYXJpYS12YWx1ZW1heCI6TWF0aC5yb3VuZChDLm1heFdpZHRoKSwiYXJpYS12YWx1ZW5vdyI6TWF0aC5yb3VuZChDLmNvbW1pdHRlZFdpZHRoKSx0YWJJbmRleDowLG9uS2V5RG93bjpDLm9uS2V5RG93bixvbkZvY3VzOihMKT0+e1koTC5jdXJyZW50VGFyZ2V0Lm1hdGNoZXM/LigiOmZvY3VzLXZpc2libGUiKT8/ITEpfSxvbkJsdXI6KCk9PlkoITEpLHN0eWxlOntwb3NpdGlvbjoiYWJzb2x1dGUiLHJpZ2h0Oi0xNCxib3R0b206LTE0LHdpZHRoOjYwLGhlaWdodDo2MCxib3JkZXI6Im5vbmUiLHBhZGRpbmc6MCxtYXJnaW46MCxkaXNwbGF5OiJmbGV4IixhbGlnbkl0ZW1zOiJmbGV4LWVuZCIsanVzdGlmeUNvbnRlbnQ6ImZsZXgtZW5kIixiYWNrZ3JvdW5kOiJ0cmFuc3BhcmVudCIscG9pbnRlckV2ZW50czoibm9uZSIsb3V0bGluZToibm9uZSIsekluZGV4OjI1LFdlYmtpdFRhcEhpZ2hsaWdodENvbG9yOiJ0cmFuc3BhcmVudCJ9LGNoaWxkcmVuOlgocjkse3JlZjpDLmhhbmRsZVJlZixhcmM6RyxwaGFzZTpWLHJlZHVjZWRNb3Rpb246cSxoaWdoQ29udHJhc3Q6USxmb2N1c1Zpc2libGU6WixvblBvaW50ZXJEb3duOkMub25Qb2ludGVyRG93bixvblBvaW50ZXJNb3ZlOkMub25Qb2ludGVyTW92ZSxvblBvaW50ZXJVcDpDLm9uUG9pbnRlckVuZCxvblBvaW50ZXJDYW5jZWw6Qy5vblBvaW50ZXJFbmQsb25Qb2ludGVyRW50ZXI6KCk9PkMuc2V0SGFuZGxlSG92ZXJlZCghMCksb25Qb2ludGVyTGVhdmU6KCk9PkMuc2V0SGFuZGxlSG92ZXJlZCghMSl9KX0pfWZ1bmN0aW9uIFE4KHt3aWR0aDpDLGhlaWdodDpLLHZpc2libGU6JH0pe3JldHVybiBYKCJkaXYiLHsiYXJpYS1oaWRkZW4iOiJ0cnVlIixjbGFzc05hbWU6ImFic29sdXRlIHJpZ2h0LTMgYm90dG9tLTMgei0yMCBwb2ludGVyLWV2ZW50cy1ub25lIHNlbGVjdC1ub25lIHJvdW5kZWQtbGcgcHgtMi41IHB5LTEgdGV4dC1bMTEuNXB4XSBmb250LW1vbm8gbGVhZGluZy1ub25lIHRyYWNraW5nLXdpZGUgdGV4dC13aGl0ZS85NSBiZy1bcmdiYSgyMCwyMiwyOCwwLjc4KV0gc2hhZG93LVswXzFweF8ycHhfcmdiYSgwLDAsMCwwLjE4KSwwXzZweF8xOHB4X3JnYmEoMCwwLDAsMC4yOCksaW5zZXRfMF8wXzBfMXB4X3JnYmEoMjU1LDI1NSwyNTUsMC4wNildIGJhY2tkcm9wLWJsdXItbWQgYmFja2Ryb3Atc2F0dXJhdGUtMTUwIHdoaXRlc3BhY2Utbm93cmFwIixzdHlsZTp7b3BhY2l0eTokPzE6MCx0cmFuc2Zvcm06YHRyYW5zbGF0ZVkoJHskPzA6NH1weCkgc2NhbGUoJHskPzE6MC45Nn0pYCx0cmFuc2Zvcm1PcmlnaW46IjEwMCUgMTAwJSIsdHJhbnNpdGlvbjoib3BhY2l0eSAxODBtcyBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjIsIDEpLCB0cmFuc2Zvcm0gMjIwbXMgY3ViaWMtYmV6aWVyKDAuMiwgMC44MiwgMC4yMiwgMSkifSxjaGlsZHJlbjpbTWF0aC5yb3VuZChDKSwiICIsWCgic3BhbiIse2NsYXNzTmFtZToib3BhY2l0eS02MCBteC0wLjUiLGNoaWxkcmVuOiLDlyJ9KSwiICIsTWF0aC5yb3VuZChLKV19KX1mdW5jdGlvbiBuOShDLEssJCl7bGV0IEo9JC5sYXQqTWF0aC5QSS8xODAsTj0oQy0kLmxhdCkqTWF0aC5QSS8xODA7cmV0dXJue3g6KEstJC5sbmcpKk1hdGguUEkvMTgwKk1hdGguY29zKEopKjYzNzEwMDAsejotTio2MzcxMDAwfX1mdW5jdGlvbiBzOShDLEssJCl7bGV0IEo9JC5sYXQqTWF0aC5QSS8xODAsTj0tSy82MzcxMDAwKigxODAvTWF0aC5QSSkscT1DLyg2MzcxMDAwKk1hdGguY29zKEopKSooMTgwL01hdGguUEkpO3JldHVybntsYXQ6JC5sYXQrTixsbmc6JC5sbmcrcX19ZnVuY3Rpb24gdDkoQyxLLCQsSixOKXtsZXQgcT1OKk4sUT1xKk4sWj0oWSxHLFYsTCk9PjAuNSooMipHKygtWStWKSpOKygyKlktNSpHKzQqVi1MKSpxKygtWSszKkctMypWK0wpKlEpO3JldHVybnt4OlooQy54LEsueCwkLngsSi54KSx6OlooQy56LEsueiwkLnosSi56KSx5OlooQy55LEsueSwkLnksSi55KSxyYXdBbHQ6WihDLnJhd0FsdCxLLnJhd0FsdCwkLnJhd0FsdCxKLnJhd0FsdCl9fWZ1bmN0aW9uIGU5KEMsSywkKXtpZihDLmxlbmd0aDwyKXJldHVybiBDLnNsaWNlKCk7bGV0IEo9W10sTj1DLmxlbmd0aCxxPSQ/TjpOLTE7Zm9yKGxldCBRPTA7UTxxO1ErKyl7bGV0IFo9Q1skPyhRLTErTiklTjpNYXRoLm1heCgwLFEtMSldLFk9Q1tRJU5dLEc9Q1soUSsxKSVOXSxWPUNbJD8oUSsyKSVOOk1hdGgubWluKE4tMSxRKzIpXSxMPUcueC1ZLngsaz1HLnotWS56LEQ9TWF0aC5oeXBvdChMLGspLHo9TWF0aC5tYXgoMixNYXRoLmNlaWwoRC9LKSk7Zm9yKGxldCBCPTA7Qjx6O0IrKyl7bGV0IF89Qi96O0oucHVzaCh0OShaLFksRyxWLF8pKX19aWYoISQpSi5wdXNoKENbTi0xXSk7cmV0dXJuIEp9ZnVuY3Rpb24gWjgoQyl7aWYoQy53YXlwb2ludHMubGVuZ3RoPDIpdGhyb3cgRXJyb3IoYFRyYWlsICR7Qy5pZH0gbmVlZHMgYXQgbGVhc3QgMiB3YXlwb2ludHNgKTtsZXQgSz17bGF0OkMud2F5cG9pbnRzLnJlZHVjZSgoQixfKT0+QitfLmxhdCwwKS9DLndheXBvaW50cy5sZW5ndGgsbG5nOkMud2F5cG9pbnRzLnJlZHVjZSgoQixfKT0+QitfLmxuZywwKS9DLndheXBvaW50cy5sZW5ndGh9LCQ9Qy53YXlwb2ludHMubWFwKChCKT0+Qi5hbHQ/PzApLEo9TWF0aC5taW4oLi4uJCksTj1NYXRoLm1heCguLi4kKSxxPUMud2F5cG9pbnRzLm1hcCgoQik9PntsZXR7eDpfLHo6SH09bjkoQi5sYXQsQi5sbmcsSyksTz1CLmFsdD8/MDtyZXR1cm57eDpfLHo6SCx5Ok8tSixyYXdBbHQ6T319KSxRPWU5KHEsOCwhIUMubG9vcCksWj1bXSxZPTA7Zm9yKGxldCBCPTA7QjxRLmxlbmd0aDtCKyspe2xldCBfPVFbQl07aWYoQj4wKXtsZXQgeT1RW0ItMV07WSs9TWF0aC5oeXBvdChfLngteS54LF8uei15LnosXy55LXkueSl9bGV0e2xhdDpILGxuZzpPfT1zOShfLngsXy56LEspLEU9TWF0aC5tYXgoMCxfLnkpO1oucHVzaCh7eDpfLngsejpfLnoseTpFLGFyYzpZLGxhdDpILGxuZzpPfSl9bGV0IEc9MS8wLFY9LTEvMCxMPTEvMCxrPS0xLzAsRD0xLzAsej0tMS8wO2ZvcihsZXQgQiBvZiBaKXtpZihCLng8RylHPUIueDtpZihCLng+VilWPUIueDtpZihCLno8TClMPUIuejtpZihCLno+aylrPUIuejtpZihCLnk8RClEPUIueTtpZihCLnk+eil6PUIueX1yZXR1cm57dHJhaWw6QyxvcmlnaW46Syxwb2ludHM6Wix0b3RhbERpc3RhbmNlOlpbWi5sZW5ndGgtMV0uYXJjLGJvdW5kczp7eDpbRyxWXSx5OltELHpdLHo6W0wsa119LHJhd01pbkFsdDpKLHJhd01heEFsdDpOfX1mdW5jdGlvbiBDMChDLEspe2xldCAkPUMudG90YWxEaXN0YW5jZTtpZigkPT09MClyZXR1cm4gQy5wb2ludHNbMF07bGV0IEo9SztpZihDLnRyYWlsLmxvb3ApSj0oSiUkKyQpJSQ7ZWxzZXtpZihKPD0wKXJldHVybiBDLnBvaW50c1swXTtpZihKPj0kKXJldHVybiBDLnBvaW50c1tDLnBvaW50cy5sZW5ndGgtMV19bGV0IE49MCxxPUMucG9pbnRzLmxlbmd0aC0xO3doaWxlKE4rMTxxKXtsZXQgVj1OK3E+Pj4xO2lmKEMucG9pbnRzW1ZdLmFyYzw9SilOPVY7ZWxzZSBxPVZ9bGV0IFE9Qy5wb2ludHNbTl0sWj1DLnBvaW50c1txXSxZPVouYXJjLVEuYXJjLEc9WT09PTA/MDooSi1RLmFyYykvWTtyZXR1cm57eDpRLngrKFoueC1RLngpKkcsejpRLnorKFouei1RLnopKkcseTpRLnkrKFoueS1RLnkpKkcsYXJjOkosbGF0OlEubGF0KyhaLmxhdC1RLmxhdCkqRyxsbmc6US5sbmcrKFoubG5nLVEubG5nKSpHfX1mdW5jdGlvbiBuMihDKXtzd2l0Y2goQyl7Y2FzZSJ3YWxrIjpyZXR1cm4gMS40O2Nhc2UicnVuIjpyZXR1cm4gMztjYXNlImN5Y2xlIjpyZXR1cm4gNS41O2Nhc2UiZHJpdmUiOnJldHVybiAxMy40fX12YXIgQzQ9W3tsYXQ6MzcuMzMyNzIsbG5nOi0xMjIuMDA4MzMsYWx0OjQ5fSx7bGF0OjM3LjMzMzA5LGxuZzotMTIyLjAwNzM1LGFsdDo0OH0se2xhdDozNy4zMzM3Myxsbmc6LTEyMi4wMDY2MyxhbHQ6NDl9LHtsYXQ6MzcuMzM0NTQsbG5nOi0xMjIuMDA2MjcsYWx0OjQ5fSx7bGF0OjM3LjMzNTQsbG5nOi0xMjIuMDA2MzMsYWx0OjQ5fSx7bGF0OjM3LjMzNjE4LGxuZzotMTIyLjAwNjc5LGFsdDo0NX0se2xhdDozNy4zMzY3NSxsbmc6LTEyMi4wMDc1OSxhbHQ6NDV9LHtsYXQ6MzcuMzM3MDQsbG5nOi0xMjIuMDA4NjEsYWx0OjQ2fSx7bGF0OjM3LjMzNjk4LGxuZzotMTIyLjAwOTY5LGFsdDo0OH0se2xhdDozNy4zMzY2Mixsbmc6LTEyMi4wMTA2NixhbHQ6NDh9LHtsYXQ6MzcuMzM1OTgsbG5nOi0xMjIuMDExMzgsYWx0OjQ5fSx7bGF0OjM3LjMzNTE3LGxuZzotMTIyLjAxMTc0LGFsdDo1MH0se2xhdDozNy4zMzQzMSxsbmc6LTEyMi4wMTE2OSxhbHQ6NTB9LHtsYXQ6MzcuMzMzNTQsbG5nOi0xMjIuMDExMjIsYWx0OjUwfSx7bGF0OjM3LjMzMjk2LGxuZzotMTIyLjAxMDQyLGFsdDo1MX0se2xhdDozNy4zMzI2OCxsbmc6LTEyMi4wMDk0LGFsdDo1MH1dLEs0PVt7bGF0OjM3LjgzMjEyLGxuZzotMTIyLjQ4MDY1LGFsdDozMH0se2xhdDozNy44MjkzNyxsbmc6LTEyMi40Nzk3NCxhbHQ6MzB9LHtsYXQ6MzcuODI2NDksbG5nOi0xMjIuNDc5NCxhbHQ6MzB9LHtsYXQ6MzcuODIzNjIsbG5nOi0xMjIuNDc5MDcsYWx0OjQ1fSx7bGF0OjM3LjgyMDc0LGxuZzotMTIyLjQ3ODczLGFsdDo1OX0se2xhdDozNy44MTc4Nixsbmc6LTEyMi40NzgzOSxhbHQ6NjZ9LHtsYXQ6MzcuODE0OTgsbG5nOi0xMjIuNDc4MDYsYWx0OjY2fSx7bGF0OjM3LjgxMjExLGxuZzotMTIyLjQ3NzcyLGFsdDo1OH0se2xhdDozNy44MDkyMyxsbmc6LTEyMi40NzczNCxhbHQ6NDR9LHtsYXQ6MzcuODA5NDksbG5nOi0xMjIuNDc3MyxhbHQ6NDV9LHtsYXQ6MzcuODEyMzYsbG5nOi0xMjIuNDc3NjUsYWx0OjU5fSx7bGF0OjM3LjgxNTI0LGxuZzotMTIyLjQ3Nzk4LGFsdDo2Nn0se2xhdDozNy44MTgxMixsbmc6LTEyMi40NzgzMixhbHQ6NjZ9LHtsYXQ6MzcuODIxLGxuZzotMTIyLjQ3ODY2LGFsdDo1OH0se2xhdDozNy44MjM4Nyxsbmc6LTEyMi40NzksYWx0OjQ0fSx7bGF0OjM3LjgyNjc1LGxuZzotMTIyLjQ3OTMzLGFsdDozMH0se2xhdDozNy44Mjk2Myxsbmc6LTEyMi40Nzk2NyxhbHQ6MzB9LHtsYXQ6MzcuODMyMzMsbG5nOi0xMjIuNDgwNzIsYWx0OjMwfV0sJDQ9W3tsYXQ6MzcuODg2NjQsbG5nOi0xMjIuNjI1OTksYWx0OjEyMX0se2xhdDozNy44ODg4Nyxsbmc6LTEyMi42MjMzMixhbHQ6MTM1fSx7bGF0OjM3Ljg5MTE1LGxuZzotMTIyLjYyMTYsYWx0OjE2NH0se2xhdDozNy44OTM1Myxsbmc6LTEyMi42MTkyMSxhbHQ6MTgwfSx7bGF0OjM3Ljg5NDY2LGxuZzotMTIyLjYxNTc3LGFsdDoyMjB9LHtsYXQ6MzcuODk2MzEsbG5nOi0xMjIuNjEyNjgsYWx0OjI3M30se2xhdDozNy44OTkxNyxsbmc6LTEyMi42MTA5OCxhbHQ6MzEzfSx7bGF0OjM3LjkwMTY2LGxuZzotMTIyLjYwODU1LGFsdDozNDJ9LHtsYXQ6MzcuOTAxOTksbG5nOi0xMjIuNjA2MDEsYWx0OjQwOH0se2xhdDozNy45MDMzOSxsbmc6LTEyMi42MDQwMSxhbHQ6NDUwfSx7bGF0OjM3LjkwNjYyLGxuZzotMTIyLjYwMjkxLGFsdDo0NDB9LHtsYXQ6MzcuOTA5NzEsbG5nOi0xMjIuNjAxNzMsYWx0OjQzMn0se2xhdDozNy45MTIxMyxsbmc6LTEyMi42MDAwNyxhbHQ6NDM2fSx7bGF0OjM3LjkxNDM5LGxuZzotMTIyLjU5NzgsYWx0OjQxMH0se2xhdDozNy45MTI4NSxsbmc6LTEyMi41OTUwNCxhbHQ6NDIyfSx7bGF0OjM3LjkxMjc0LGxuZzotMTIyLjU5MjAyLGFsdDo0MjV9LHtsYXQ6MzcuOTE1LGxuZzotMTIyLjU5MDMyLGFsdDo0MTJ9LHtsYXQ6MzcuOTE2MzcsbG5nOi0xMjIuNTg5MDMsYWx0OjQwNn0se2xhdDozNy45MTQ4MSxsbmc6LTEyMi41ODU5NSxhbHQ6MzgyfSx7bGF0OjM3LjkxNzQsbG5nOi0xMjIuNTgzOTgsYWx0OjM3Mn0se2xhdDozNy45MTY0Mixsbmc6LTEyMi41ODIzNixhbHQ6MzUyfSx7bGF0OjM3LjkxNDgxLGxuZzotMTIyLjU4MDExLGFsdDozNDJ9XSxYND1be2xhdDo0MC43ODIxNixsbmc6LTczLjk2MjU0LGFsdDozN30se2xhdDo0MC43ODIyMSxsbmc6LTczLjk2MDk4LGFsdDozNn0se2xhdDo0MC43ODMyOCxsbmc6LTczLjk2MDEsYWx0OjM2fSx7bGF0OjQwLjc4NDQsbG5nOi03My45NTkzLGFsdDozNn0se2xhdDo0MC43ODU1LGxuZzotNzMuOTU4NDgsYWx0OjM2fSx7bGF0OjQwLjc4NjY0LGxuZzotNzMuOTU3NzQsYWx0OjM2fSx7bGF0OjQwLjc4NzksbG5nOi03My45NTc2NCxhbHQ6MzZ9LHtsYXQ6NDAuNzg4OTgsbG5nOi03My45NTc5MixhbHQ6MzZ9LHtsYXQ6NDAuNzg4NjgsbG5nOi03My45NTk1MSxhbHQ6Mzd9LHtsYXQ6NDAuNzg4OTcsbG5nOi03My45NjExMixhbHQ6MzZ9LHtsYXQ6NDAuNzg4MzMsbG5nOi03My45NjI1LGFsdDozN30se2xhdDo0MC43ODgyOCxsbmc6LTczLjk2NDE2LGFsdDozN30se2xhdDo0MC43ODgwNSxsbmc6LTczLjk2NTczLGFsdDozNn0se2xhdDo0MC43ODY5MSxsbmc6LTczLjk2NjM2LGFsdDozNn0se2xhdDo0MC43ODU2Nixsbmc6LTczLjk2NjY1LGFsdDozNn0se2xhdDo0MC43ODQ1OCxsbmc6LTczLjk2NjA4LGFsdDozNn0se2xhdDo0MC43ODQwMixsbmc6LTczLjk2NDU5LGFsdDozNn0se2xhdDo0MC43ODMyMixsbmc6LTczLjk2MzM0LGFsdDozN31dLEo0PVt7bGF0OjM3LjU5NjU5LGxuZzotMTIyLjUwMzE2LGFsdDo0fSx7bGF0OjM3LjU5NTU1LGxuZzotMTIyLjUwNDI0LGFsdDo0fSx7bGF0OjM3LjU5NDUyLGxuZzotMTIyLjUwNTM0LGFsdDo1fSx7bGF0OjM3LjU5MzI5LGxuZzotMTIyLjUwNTg4LGFsdDo5fSx7bGF0OjM3LjU5MjEyLGxuZzotMTIyLjUwNTA4LGFsdDoyMH0se2xhdDozNy41OTEsbG5nOi0xMjIuNTA0MTMsYWx0OjI5fSx7bGF0OjM3LjU4OTc0LGxuZzotMTIyLjUwNDE2LGFsdDo0MH0se2xhdDozNy41ODg3LGxuZzotMTIyLjUwNTI0LGFsdDo1MX0se2xhdDozNy41ODc0NSxsbmc6LTEyMi41MDQ5NixhbHQ6NjB9LHtsYXQ6MzcuNTg2MjcsbG5nOi0xMjIuNTA0MjIsYWx0OjcxfSx7bGF0OjM3LjU4NTM5LGxuZzotMTIyLjUwNTM0LGFsdDo4Mn0se2xhdDozNy41ODUwNSxsbmc6LTEyMi41MDY5OCxhbHQ6OTN9LHtsYXQ6MzcuNTg1MzksbG5nOi0xMjIuNTA1MzQsYWx0OjgyfSx7bGF0OjM3LjU4NjI3LGxuZzotMTIyLjUwNDIyLGFsdDo3MX0se2xhdDozNy41ODc0NSxsbmc6LTEyMi41MDQ5NixhbHQ6NjB9LHtsYXQ6MzcuNTg4Nyxsbmc6LTEyMi41MDUyNCxhbHQ6NTF9LHtsYXQ6MzcuNTg5NzQsbG5nOi0xMjIuNTA0MTYsYWx0OjQwfSx7bGF0OjM3LjU5MSxsbmc6LTEyMi41MDQxMyxhbHQ6Mjl9LHtsYXQ6MzcuNTkyMTIsbG5nOi0xMjIuNTA1MDgsYWx0OjIwfSx7bGF0OjM3LjU5MzI5LGxuZzotMTIyLjUwNTg4LGFsdDo5fSx7bGF0OjM3LjU5NDUyLGxuZzotMTIyLjUwNTM0LGFsdDo1fSx7bGF0OjM3LjU5NTU1LGxuZzotMTIyLjUwNDI0LGFsdDo0fV0sSzA9W3tpZDoiYXBwbGUtcGFyay1sb29wIixuYW1lOiJBcHBsZSBQYXJrIExvb3AiLGRlc2NyaXB0aW9uOiJDdXBlcnRpbm8g4oCiIGZsYXQgcmluZyByb2FkIixtb2RlOiJ3YWxrIix3YXlwb2ludHM6QzQsbG9vcDohMH0se2lkOiJnb2xkZW4tZ2F0ZSIsbmFtZToiR29sZGVuIEdhdGUgQ3Jvc3NpbmciLGRlc2NyaXB0aW9uOiJTYW4gRnJhbmNpc2NvIOKAoiBicmlkZ2Ugcm91bmQtdHJpcCIsbW9kZToicnVuIix3YXlwb2ludHM6SzQsbG9vcDohMH0se2lkOiJ0YW0tcmlkZ2UiLG5hbWU6Ik10LiBUYW0gUmlkZ2UiLGRlc2NyaXB0aW9uOiJTdGluc29uIEJlYWNoIOKAoiBTdGVlcCBSYXZpbmUgKyBNYXR0IERhdmlzIGxvb3AiLG1vZGU6IndhbGsiLHdheXBvaW50czokNCxsb29wOiEwfSx7aWQ6ImNlbnRyYWwtcGFyayIsbmFtZToiUmVzZXJ2b2lyIExvb3AiLGRlc2NyaXB0aW9uOiJDZW50cmFsIFBhcmsg4oCiIDIuNSBrbSIsbW9kZToicnVuIix3YXlwb2ludHM6WDQsbG9vcDohMH0se2lkOiJwY2gtcGFjaWZpY2EiLG5hbWU6IlBhY2lmaWMgQ29hc3QgSHd5IixkZXNjcmlwdGlvbjoiUGFjaWZpY2Eg4oCiIERldmlsJ3MgU2xpZGUgcm91bmQtdHJpcCIsbW9kZToiZHJpdmUiLHdheXBvaW50czpKNCxsb29wOiEwfV07dmFyIE40PTY1MCxxND1gCi5sZW0tdG9nZ2xlOmhvdmVyIHsgY29sb3I6ICNmZmY7IH0KLmxlbS10b2dnbGU6aG92ZXIgLmxlbS1jaGV2cm9uIHsgY29sb3I6IHJnYmEoMjU1LDI1NSwyNTUsMC44NSkgIWltcG9ydGFudDsgfQoubGVtLXNlbGVjdDpob3ZlciB7IGJhY2tncm91bmQ6IHJnYmEoMjU1LDI1NSwyNTUsMC4wNyk7IGJvcmRlci1jb2xvcjogcmdiYSgyNTUsMjU1LDI1NSwwLjE2KTsgfQoubGVtLXNlbGVjdDpmb2N1cyB7IG91dGxpbmU6IG5vbmU7IGJvcmRlci1jb2xvcjogcmdiYSgyNTUsMjU1LDI1NSwwLjI0KTsgYmFja2dyb3VuZDogcmdiYSgyNTUsMjU1LDI1NSwwLjA4KTsgfQoubGVtLXByaW1hcnk6aG92ZXI6bm90KDpkaXNhYmxlZCkgeyBmaWx0ZXI6IGJyaWdodG5lc3MoMS4wOCk7IH0KLmxlbS1wcmltYXJ5LW9uOmhvdmVyOm5vdCg6ZGlzYWJsZWQpIHsgYmFja2dyb3VuZDogcmdiYSgyNTUsMjU1LDI1NSwwLjIyKSAhaW1wb3J0YW50OyBmaWx0ZXI6IG5vbmU7IH0KLmxlbS1naG9zdDpob3Zlcjpub3QoOmRpc2FibGVkKSB7IGJhY2tncm91bmQ6IHJnYmEoMjU1LDI1NSwyNTUsMC4wNik7IGJvcmRlci1jb2xvcjogcmdiYSgyNTUsMjU1LDI1NSwwLjIpOyBjb2xvcjogI2ZmZjsgfQoubGVtLWdob3N0OmRpc2FibGVkIHsgb3BhY2l0eTogMC40OyBjdXJzb3I6IG5vdC1hbGxvd2VkOyB9Ci5sZW0tc2VnOmhvdmVyOm5vdChbYXJpYS1wcmVzc2VkPSJ0cnVlIl0pIHsgY29sb3I6IHJnYmEoMjU1LDI1NSwyNTUsMC45KTsgYmFja2dyb3VuZDogcmdiYSgyNTUsMjU1LDI1NSwwLjA1KSAhaW1wb3J0YW50OyB9Ci5sZW0tc3BlZWQ6aG92ZXIgeyBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwyNTUsMjU1LDAuMDkpOyBib3JkZXItY29sb3I6IHJnYmEoMjU1LDI1NSwyNTUsMC4xOCk7IGNvbG9yOiAjZmZmOyB9Ci5sZW0tc3BlZWQtb246aG92ZXIgeyBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwyNTUsMjU1LDAuODgpICFpbXBvcnRhbnQ7IGJvcmRlci1jb2xvcjogcmdiYSgyNTUsMjU1LDI1NSwwLjg4KSAhaW1wb3J0YW50OyBjb2xvcjogIzBhMGEwYyAhaW1wb3J0YW50OyB9Ci5sZW0tc3BlZWQ6YWN0aXZlIHsgdHJhbnNmb3JtOiBzY2FsZSgwLjk3KTsgfQpgLHMyPVsxLDIsNSwyMF0sRzg9MTAwMCx0Mj17c3RhdHVzOiJpZGxlIixhcmM6MCxlbGFwc2VkTXM6MH07ZnVuY3Rpb24gazgoe3VkaWQ6QyxleGVjOkt9KXtsZXRbJCxKXT1iKCEwKSxbTixxXT1iKEswWzBdLmlkKSxbUSxaXT1iKEswWzBdLm1vZGUpLFtZLEddPWIoMSksW1YsTF09Yih0MiksW2ssRF09YihudWxsKSx6PU0xKCgpPT5LMC5maW5kKChTKT0+Uy5pZD09PU4pPz9LMFswXSxbTl0pLEI9TTEoKCk9Plo4KHopLFt6XSksXz12KDApLEg9digiaWRsZSIpLE89dihuMihRKSpZKSxFPXYoMCkseT12KEIpLG89dihudWxsKTtXKCgpPT57Ty5jdXJyZW50PW4yKFEpKll9LFtRLFldKTtsZXQgeD12KG51bGwpO1coKCk9PntsZXQgUz15LmN1cnJlbnQsbT1fLmN1cnJlbnQ7aWYoeS5jdXJyZW50PUIsUyYmUyE9PUIpeC5jdXJyZW50PUc0KFMsbSxCLHBlcmZvcm1hbmNlLm5vdygpKTtfLmN1cnJlbnQ9MCxFLmN1cnJlbnQ9MCxILmN1cnJlbnQ9ImlkbGUiLG8uY3VycmVudD1udWxsLEwodDIpfSxbQl0pO2xldCBnPXYoMCksaD12KG51bGwpLFI9dihudWxsKTtXKCgpPT57bGV0IFM9MCxtPShKMSk9PntsZXQgSzE9aC5jdXJyZW50LFkxPUsxPT1udWxsPzE2Ok1hdGgubWluKDY0LEoxLUsxKTtpZihoLmN1cnJlbnQ9SjEsZy5jdXJyZW50PShnLmN1cnJlbnQrWTEqMC4wMDAxMiklKE1hdGguUEkqMiksSC5jdXJyZW50PT09InBsYXlpbmciKXtsZXQgdD1PLmN1cnJlbnQqWTEvMTAwMDtfLmN1cnJlbnQrPXQsRS5jdXJyZW50Kz1ZMTtsZXQgJDE9eS5jdXJyZW50LnRvdGFsRGlzdGFuY2U7aWYoIXkuY3VycmVudC50cmFpbC5sb29wJiZfLmN1cnJlbnQ+PSQxKV8uY3VycmVudD0kMSxILmN1cnJlbnQ9InBhdXNlZCIsTCh7c3RhdHVzOiJwYXVzZWQiLGFyYzokMSxlbGFwc2VkTXM6RS5jdXJyZW50fSl9bGV0IHExPVIuY3VycmVudDtpZihxMSl7bGV0IHQ9eS5jdXJyZW50LCQxPW51bGwsQT14LmN1cnJlbnQ7aWYoQSl7bGV0IEk9KEoxLUEuc3RhcnRNcykvTjQ7aWYoST49MSl4LmN1cnJlbnQ9bnVsbDtlbHNle2xldCBqPVY0KEkpO3Q9TDQoQSxqKSwkMT17eDpBLnByZXZNYXJrZXIueCsoQS5uZXh0TWFya2VyLngtQS5wcmV2TWFya2VyLngpKmoseTpBLnByZXZNYXJrZXIueSsoQS5uZXh0TWFya2VyLnktQS5wcmV2TWFya2VyLnkpKmosejpBLnByZXZNYXJrZXIueisoQS5uZXh0TWFya2VyLnotQS5wcmV2TWFya2VyLnopKmp9fX1CNChxMSx0LF8uY3VycmVudCxnLmN1cnJlbnQsSjEsSC5jdXJyZW50PT09InBsYXlpbmciLCQxKX1TPXJlcXVlc3RBbmltYXRpb25GcmFtZShtKX07cmV0dXJuIFM9cmVxdWVzdEFuaW1hdGlvbkZyYW1lKG0pLCgpPT5jYW5jZWxBbmltYXRpb25GcmFtZShTKX0sW10pLFcoKCk9PntsZXQgUz1zZXRJbnRlcnZhbCgoKT0+e2lmKEguY3VycmVudD09PSJwbGF5aW5nIilMKHtzdGF0dXM6InBsYXlpbmciLGFyYzpfLmN1cnJlbnQsZWxhcHNlZE1zOkUuY3VycmVudH0pfSwyNTApO3JldHVybigpPT5jbGVhckludGVydmFsKFMpfSxbXSksVygoKT0+e2lmKFYuc3RhdHVzIT09InBsYXlpbmciKXJldHVybjtsZXQgUz0hMSxtPTAsSjE9bnVsbCxLMT1hc3luYygpPT57aWYoU3x8SjEpcmV0dXJuO2xldCBxMT1EYXRlLm5vdygpO2lmKHExLW08RzgpcmV0dXJuO209cTE7bGV0IHQ9QzAoeS5jdXJyZW50LF8uY3VycmVudCksJDE9YHhjcnVuIHNpbWN0bCBsb2NhdGlvbiAke0N9IHNldCAke3QubGF0LnRvRml4ZWQoNyl9LCR7dC5sbmcudG9GaXhlZCg3KX1gO0oxPUsoJDEpLnRoZW4oKEEpPT57aWYoUylyZXR1cm47aWYoQS5leGl0Q29kZSE9PTApRChfOChBLnN0ZGVycil8fCJzaW1jdGwgbG9jYXRpb24gc2V0IGZhaWxlZCIpO2Vsc2UgRChudWxsKX0pLmNhdGNoKChBKT0+e2lmKCFTKUQoQSBpbnN0YW5jZW9mIEVycm9yP0EubWVzc2FnZTpTdHJpbmcoQSkpfSkuZmluYWxseSgoKT0+e0oxPW51bGx9KX07SzEoKTtsZXQgWTE9c2V0SW50ZXJ2YWwoSzEsRzgpO3JldHVybigpPT57Uz0hMCxjbGVhckludGVydmFsKFkxKX19LFtWLnN0YXR1cyxDLEtdKTtsZXQgYT1QKCgpPT57aWYoSC5jdXJyZW50PT09InBsYXlpbmciKXtILmN1cnJlbnQ9InBhdXNlZCIsTCgoUyk9Pih7Li4uUyxzdGF0dXM6InBhdXNlZCJ9KSk7cmV0dXJufWlmKF8uY3VycmVudD49eS5jdXJyZW50LnRvdGFsRGlzdGFuY2UmJiF5LmN1cnJlbnQudHJhaWwubG9vcClfLmN1cnJlbnQ9MCxFLmN1cnJlbnQ9MDtpZihvLmN1cnJlbnQ9PW51bGwpe2xldCBTPUMwKHkuY3VycmVudCxfLmN1cnJlbnQpO28uY3VycmVudD17bGF0OlMubGF0LGxuZzpTLmxuZ319SC5jdXJyZW50PSJwbGF5aW5nIixMKChTKT0+KHsuLi5TLHN0YXR1czoicGxheWluZyIsYXJjOl8uY3VycmVudCxlbGFwc2VkTXM6RS5jdXJyZW50fSkpfSxbXSksdT1QKCgpPT57SC5jdXJyZW50PSJpZGxlIixfLmN1cnJlbnQ9MCxFLmN1cnJlbnQ9MCxMKHQyKTtsZXQgUz1vLmN1cnJlbnQ7by5jdXJyZW50PW51bGw7bGV0IG09Uz9geGNydW4gc2ltY3RsIGxvY2F0aW9uICR7Q30gc2V0ICR7Uy5sYXQudG9GaXhlZCg3KX0sJHtTLmxuZy50b0ZpeGVkKDcpfWA6YHhjcnVuIHNpbWN0bCBsb2NhdGlvbiAke0N9IGNsZWFyYDtLKG0pLnRoZW4oKEoxKT0+e2lmKEoxLmV4aXRDb2RlIT09MClEKF84KEoxLnN0ZGVycil8fG51bGwpO2Vsc2UgRChudWxsKX0pfSxbSyxDXSksWDE9UCgoUyk9PntxKFMpO2xldCBtPUswLmZpbmQoKEoxKT0+SjEuaWQ9PT1TKTtpZihtKVoobS5tb2RlKX0sW10pO1coKCk9PigpPT57aWYoSC5jdXJyZW50PT09ImlkbGUiKXJldHVybjtsZXQgUz1vLmN1cnJlbnQsbT1TP2B4Y3J1biBzaW1jdGwgbG9jYXRpb24gJHtDfSBzZXQgJHtTLmxhdC50b0ZpeGVkKDcpfSwke1MubG5nLnRvRml4ZWQoNyl9YDpgeGNydW4gc2ltY3RsIGxvY2F0aW9uICR7Q30gY2xlYXJgO0sobSkuY2F0Y2goKCk9Pnt9KX0sW0ssQ10pO2xldCBkPVYuc3RhdHVzPT09InBsYXlpbmciLGk9ZD9gJHtDNShWLmFyYyl9IMK3ICR7VjgoVi5lbGFwc2VkTXMpfWA6YCR7QzUoQi50b3RhbERpc3RhbmNlKX0gdG90YWxgO3JldHVybiBYKCJkaXYiLHtjbGFzc05hbWU6ImJnLXBhbmVsIGJvcmRlciBib3JkZXItd2hpdGUvOCByb3VuZGVkLVsxMHB4XSBmbGV4IGZsZXgtY29sIGdhcC0yLjUgcHgtMyBweS0yIixjaGlsZHJlbjpbWCgic3R5bGUiLHtjaGlsZHJlbjpxNH0pLFgoImJ1dHRvbiIse3R5cGU6ImJ1dHRvbiIsb25DbGljazooKT0+SigoUyk9PiFTKSxjbGFzc05hbWU6ImxlbS10b2dnbGUgZ3JpZCBbZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOmF1dG9fMWZyX2F1dG9dIGl0ZW1zLWNlbnRlciBnYXAtMiBiZy10cmFuc3BhcmVudCBib3JkZXItbm9uZSB0ZXh0LXdoaXRlLzkwIHB5LTIuNSBweC0xIC1teS0yIC1teC0xIGN1cnNvci1wb2ludGVyIHctW2NhbGMoMTAwJSs4cHgpXSB0ZXh0LWxlZnQgbWluLWgtWzM2cHhdIGxlYWRpbmctbm9uZSIsImFyaWEtZXhwYW5kZWQiOiQsY2hpbGRyZW46W1goInNwYW4iLHtjbGFzc05hbWU6InRleHQtWzExcHhdIGZvbnQtc2VtaWJvbGQgdGV4dC13aGl0ZS81MCB1cHBlcmNhc2UgdHJhY2tpbmctWzAuMDhlbV0gbGVhZGluZy1ub25lIGlubGluZS1mbGV4IGl0ZW1zLWNlbnRlciIsY2hpbGRyZW46IkxvY2F0aW9uIn0pLFgoInNwYW4iLHtjbGFzc05hbWU6InRleHQtWzExcHhdIHRleHQtd2hpdGUvNTUgZm9udC1tb25vIGlubGluZS1mbGV4IGl0ZW1zLWNlbnRlciBnYXAtMS41IGp1c3RpZnktc2VsZi1lbmQgbGVhZGluZy1ub25lIixjaGlsZHJlbjpbWCgic3BhbiIse2NsYXNzTmFtZToic2l6ZS0xLjUgcm91bmRlZC1mdWxsIFt0cmFuc2l0aW9uOmJhY2tncm91bmRfMC4ycyxib3gtc2hhZG93XzAuMnNdIixzdHlsZTp7YmFja2dyb3VuZDpkPyIjNGFkZTgwIjpCLnRvdGFsRGlzdGFuY2U+MD8icmdiYSgyNTUsMjU1LDI1NSwwLjMpIjoidHJhbnNwYXJlbnQiLGJveFNoYWRvdzpkPyIwIDAgNnB4IHJnYmEoNzQsMjIyLDEyOCwwLjcpIjoibm9uZSJ9fSksaV19KSxYKGoxLHtvcGVuOiR9KV19KSwkJiZYKE4xLHtjaGlsZHJlbjpbWCgiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGZsZXgtY29sIGdhcC0xIixjaGlsZHJlbjpbWCgiZGl2Iix7Y2xhc3NOYW1lOiJyZWxhdGl2ZSBibG9jayIsY2hpbGRyZW46W1goInNlbGVjdCIse3ZhbHVlOk4sb25DaGFuZ2U6KFMpPT5YMShTLnRhcmdldC52YWx1ZSksY2xhc3NOYW1lOiJsZW0tc2VsZWN0IGFwcGVhcmFuY2Utbm9uZSBbLXdlYmtpdC1hcHBlYXJhbmNlOm5vbmVdIGJnLXdoaXRlL1swLjA0XSBib3JkZXIgYm9yZGVyLXdoaXRlLzggcm91bmRlZC1tZCB0ZXh0LXdoaXRlLzkwIHRleHQtWzEycHhdIHB5LTEuNSBwci1bMjZweF0gcGwtMiBmb250LVtpbmhlcml0XSBjdXJzb3ItcG9pbnRlciB3LWZ1bGwgW3RyYW5zaXRpb246YmFja2dyb3VuZF8wLjEycyxib3JkZXItY29sb3JfMC4xMnNdIiwiYXJpYS1sYWJlbCI6IlRyYWlsIixjaGlsZHJlbjpLMC5tYXAoKFMpPT5YKCJvcHRpb24iLHt2YWx1ZTpTLmlkLGNoaWxkcmVuOlMubmFtZX0sUy5pZCkpfSksWCgic3BhbiIse2NsYXNzTmFtZToiYWJzb2x1dGUgcmlnaHQtWzlweF0gdG9wLTEvMiAtdHJhbnNsYXRlLXktMS8yIHBvaW50ZXItZXZlbnRzLW5vbmUgZmxleCBpdGVtcy1jZW50ZXIiLCJhcmlhLWhpZGRlbiI6InRydWUiLGNoaWxkcmVuOlgoajEse29wZW46ITF9KX0pXX0pLFgoImRpdiIse2NsYXNzTmFtZToidGV4dC1bMTBweF0gdGV4dC13aGl0ZS80NSIsY2hpbGRyZW46ei5kZXNjcmlwdGlvbn0pXX0pLFgoImRpdiIse2NsYXNzTmFtZToicmVsYXRpdmUgdy1mdWxsIHJvdW5kZWQtWzEwcHhdIG92ZXJmbG93LWhpZGRlbiBiZy1bIzBhMGEwY10gYm9yZGVyIGJvcmRlci13aGl0ZS9bMC4wNl0gW2FzcGVjdC1yYXRpbzoxNi8xMV0iLGNoaWxkcmVuOltYKCJjYW52YXMiLHtyZWY6UixjbGFzc05hbWU6InctZnVsbCBoLWZ1bGwgYmxvY2sifSksWChaNCx7cHJlcGFyZWQ6Qn0pXX0pLFgoImRpdiIse2NsYXNzTmFtZToiZ3JpZCBbZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOjFmcl8xZnJfMWZyXSBnYXAtMS41IixjaGlsZHJlbjpbWChlMix7bGFiZWw6IkRpc3RhbmNlIix2YWx1ZTpDNShWLmFyYyl9KSxYKGUyLHtsYWJlbDoiUGFjZSIsdmFsdWU6azQoTy5jdXJyZW50KX0pLFgoZTIse2xhYmVsOiJFbGFwc2VkIix2YWx1ZTpWOChWLmVsYXBzZWRNcyl9KV19KSxYKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggZ2FwLTEuNSIsY2hpbGRyZW46W1goImJ1dHRvbiIse3R5cGU6ImJ1dHRvbiIsb25DbGljazphLGNsYXNzTmFtZTpgZmxleC0xIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGdhcC0xLjUgcHktMiBweC0yLjUgYm9yZGVyLW5vbmUgcm91bmRlZC1bN3B4XSB0ZXh0LVsxMnB4XSBmb250LXNlbWlib2xkIGN1cnNvci1wb2ludGVyIGZvbnQtW2luaGVyaXRdICR7ZD8ibGVtLXByaW1hcnkgbGVtLXByaW1hcnktb24gYmctd2hpdGUvWzAuMTZdIHRleHQtd2hpdGUiOiJsZW0tcHJpbWFyeSBiZy1zdWNjZXNzLWVtZXJhbGQgdGV4dC1bIzA2MjAxOF0ifWAsImFyaWEtcHJlc3NlZCI6ZCx0aXRsZTpkPyJQYXVzZSI6IlBsYXkiLGNoaWxkcmVuOltkP1godjIse30pOlgodzAse30pLFgoInNwYW4iLHtjaGlsZHJlbjpkPyJQYXVzZSI6IlBsYXkifSldfSksWCgiYnV0dG9uIix7dHlwZToiYnV0dG9uIixvbkNsaWNrOnUsY2xhc3NOYW1lOiJsZW0tZ2hvc3QgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgZ2FwLTEuNSBweS0yIHB4LTMgYm9yZGVyIGJvcmRlci13aGl0ZS8xMiByb3VuZGVkLVs3cHhdIHRleHQtWzEycHhdIGZvbnQtbWVkaXVtIGJnLXRyYW5zcGFyZW50IHRleHQtd2hpdGUvODUgY3Vyc29yLXBvaW50ZXIgZm9udC1baW5oZXJpdF0iLGRpc2FibGVkOlYuc3RhdHVzPT09ImlkbGUiJiZWLmFyYz09PTAsdGl0bGU6IlN0b3AgYW5kIGNsZWFyIHNpbXVsYXRlZCBsb2NhdGlvbiIsY2hpbGRyZW46W1goUDAse30pLFgoInNwYW4iLHtjaGlsZHJlbjoiU3RvcCJ9KV19KV19KSxYKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggZmxleC1yb3cgaXRlbXMtc3RyZXRjaCBnYXAtMS41IixjaGlsZHJlbjpbWCgiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4LTEgbWluLXctMCIsY2hpbGRyZW46WChRNCx7YXJpYUxhYmVsOiJUcmFuc3BvcnQgbW9kZSIsdmFsdWU6USxvbkNoYW5nZTooUyk9PlooUyksb3B0aW9uczpbe3ZhbHVlOiJ3YWxrIixsYWJlbDoiV2FsayIsaWNvbjpYKG0yLHt9KX0se3ZhbHVlOiJydW4iLGxhYmVsOiJSdW4iLGljb246WChSMix7fSl9LHt2YWx1ZToiY3ljbGUiLGxhYmVsOiJDeWNsZSIsaWNvbjpYKGoyLHt9KX0se3ZhbHVlOiJkcml2ZSIsbGFiZWw6IkRyaXZlIixpY29uOlgocDIse30pfV19KX0pLFgoImJ1dHRvbiIse3R5cGU6ImJ1dHRvbiIsb25DbGljazooKT0+e2xldCBTPXMyLmluZGV4T2YoWSksbT1zMlsoUysxKSVzMi5sZW5ndGhdO0cobSl9LGNsYXNzTmFtZTpgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgZ2FwLTEgcHgtMi41IGJvcmRlciByb3VuZGVkLVs3cHhdIGN1cnNvci1wb2ludGVyIGZvbnQtW2luaGVyaXRdIHRleHQtWzExcHhdIGZvbnQtc2VtaWJvbGQgbWluLXctWzU2cHhdICR7WT4xPyJsZW0tc3BlZWQgbGVtLXNwZWVkLW9uIGJnLXdoaXRlIGJvcmRlci13aGl0ZSB0ZXh0LVsjMGEwYTBjXSI6ImxlbS1zcGVlZCBiZy13aGl0ZS9bMC4wNF0gYm9yZGVyLXdoaXRlLzggdGV4dC13aGl0ZS84NSJ9YCwiYXJpYS1sYWJlbCI6YFNwZWVkICR7WX3DlyDigJQgdGFwIHRvIGN5Y2xlYCx0aXRsZTpgU3BlZWQgJHtZfcOXIOKAlCB0YXAgdG8gY3ljbGVgLGNoaWxkcmVuOltYKGcyLHt9KSxZPjEmJlgoInNwYW4iLHtjbGFzc05hbWU6ImZvbnQtbW9ubyBbZm9udC12YXJpYW50LW51bWVyaWM6dGFidWxhci1udW1zXSIsY2hpbGRyZW46W1ksIsOXIl19KV19KV19KSxrJiZYKCJkaXYiLHtjbGFzc05hbWU6ImJnLWRhbmdlci8xMCBib3JkZXIgYm9yZGVyLWRhbmdlci8yMCB0ZXh0LWRhbmdlci1zb2Z0IHRleHQtWzExcHhdIHB4LTIgcHktMS41IHJvdW5kZWQtbWQiLGNoaWxkcmVuOmt9KV19KV19KX12YXIgZTI9cTAoZnVuY3Rpb24oe2xhYmVsOkssdmFsdWU6JH0pe3JldHVybiBYKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggZmxleC1jb2wgZ2FwLTAuNSBiZy13aGl0ZS9bMC4wM10gYm9yZGVyIGJvcmRlci13aGl0ZS9bMC4wNl0gcm91bmRlZC1tZCBweS1bNXB4XSBweC1bN3B4XSBtaW4tdy0wIixjaGlsZHJlbjpbWCgiZGl2Iix7Y2xhc3NOYW1lOiJ0ZXh0LVs5cHhdIHVwcGVyY2FzZSB0cmFja2luZy1bMC4wNmVtXSB0ZXh0LXdoaXRlLzQ1IixjaGlsZHJlbjpLfSksWCgiZGl2Iix7Y2xhc3NOYW1lOiJ0ZXh0LVsxMnB4XSBmb250LW1vbm8gdGV4dC13aGl0ZSBvdmVyZmxvdy1oaWRkZW4gdGV4dC1lbGxpcHNpcyB3aGl0ZXNwYWNlLW5vd3JhcCIsY2hpbGRyZW46JH0pXX0pfSk7ZnVuY3Rpb24gUTQoe3ZhbHVlOkMsb25DaGFuZ2U6SyxvcHRpb25zOiQsYXJpYUxhYmVsOkp9KXtyZXR1cm4gWCgiZGl2Iix7cm9sZToiZ3JvdXAiLCJhcmlhLWxhYmVsIjpKLGNsYXNzTmFtZToiZmxleCBiZy13aGl0ZS9bMC4wNF0gYm9yZGVyIGJvcmRlci13aGl0ZS84IHJvdW5kZWQtWzdweF0gcC0wLjUgZ2FwLTAuNSIsY2hpbGRyZW46JC5tYXAoKE4pPT57bGV0IHE9Ti52YWx1ZT09PUM7cmV0dXJuIFgoImJ1dHRvbiIse3R5cGU6ImJ1dHRvbiIsb25DbGljazooKT0+SyhOLnZhbHVlKSxjbGFzc05hbWU6YGZsZXgtMSBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBib3JkZXItbm9uZSByb3VuZGVkLVs1cHhdIHB5LVs1cHhdIHB4LTIgdGV4dC1bMTFweF0gZm9udC1tZWRpdW0gY3Vyc29yLXBvaW50ZXIgZm9udC1baW5oZXJpdF0gW3RyYW5zaXRpb246YmFja2dyb3VuZF8wLjEycyxjb2xvcl8wLjEyc10gbWluLWgtWzIycHhdICR7cT8ibGVtLXNlZyBsZW0tc2VnLWFjdGl2ZSBiZy13aGl0ZS9bMC4xMl0gdGV4dC13aGl0ZSI6ImxlbS1zZWcgYmctdHJhbnNwYXJlbnQgdGV4dC13aGl0ZS82MCJ9YCwiYXJpYS1wcmVzc2VkIjpxLCJhcmlhLWxhYmVsIjpOLmljb24/Ti5sYWJlbDp2b2lkIDAsdGl0bGU6Ti5pY29uP04ubGFiZWw6dm9pZCAwLGNoaWxkcmVuOk4uaWNvbj8/Ti5sYWJlbH0sTi52YWx1ZSl9KX0pfWZ1bmN0aW9uIFo0KHtwcmVwYXJlZDpDfSl7aWYoQy5yYXdNYXhBbHQtQy5yYXdNaW5BbHQ8NSlyZXR1cm4gbnVsbDtyZXR1cm4gWChOMSx7Y2hpbGRyZW46W1goImRpdiIse2NsYXNzTmFtZToiYWJzb2x1dGUgdG9wLTIgbGVmdC0yLjUgYmctcGFuZWwtb3ZlcmxheSB0ZXh0LXdoaXRlLzg1IHRleHQtWzEwcHhdIGZvbnQtbW9ubyBweC0xLjUgcHktMC41IHJvdW5kZWQtWzVweF0gZmxleCBpdGVtcy1jZW50ZXIgdHJhY2tpbmctWzAuMDJlbV0gYm9yZGVyIGJvcmRlci13aGl0ZS9bMC4wNl0iLGNoaWxkcmVuOltYKEMyLHtkaXI6InVwIn0pLCIgIixCOChDLnJhd01heEFsdCldfSksWCgiZGl2Iix7Y2xhc3NOYW1lOiJhYnNvbHV0ZSB0b3AtMiByaWdodC0yLjUgYmctcGFuZWwtb3ZlcmxheSB0ZXh0LXdoaXRlLzg1IHRleHQtWzEwcHhdIGZvbnQtbW9ubyBweC0xLjUgcHktMC41IHJvdW5kZWQtWzVweF0gZmxleCBpdGVtcy1jZW50ZXIgdHJhY2tpbmctWzAuMDJlbV0gYm9yZGVyIGJvcmRlci13aGl0ZS9bMC4wNl0iLGNoaWxkcmVuOltYKEMyLHtkaXI6ImRvd24ifSksIiAiLEI4KEMucmF3TWluQWx0KV19KV19KX12YXIgWTg9MTQwO2Z1bmN0aW9uIEw4KEMsSyl7bGV0ICQ9QXJyYXkoSyk7Zm9yKGxldCBKPTA7SjxLO0orKyl7bGV0IE49Sz09PTE/MDpKLyhLLTEpLHE9QzAoQyxOKkMudG90YWxEaXN0YW5jZSk7JFtKXT17eDpxLngseTpxLnksejpxLnp9fXJldHVybiAkfWZ1bmN0aW9uIEc0KEMsSywkLEope2xldCBOPShDLmJvdW5kcy54WzBdK0MuYm91bmRzLnhbMV0pLzIscT0oQy5ib3VuZHMuelswXStDLmJvdW5kcy56WzFdKS8yLFE9Qy5ib3VuZHMueVswXSxaPU1hdGgubWF4KDEsQy5ib3VuZHMueFsxXS1DLmJvdW5kcy54WzBdLEMuYm91bmRzLnpbMV0tQy5ib3VuZHMuelswXSksWT0oJC5ib3VuZHMueFswXSskLmJvdW5kcy54WzFdKS8yLEc9KCQuYm91bmRzLnpbMF0rJC5ib3VuZHMuelsxXSkvMixWPSQuYm91bmRzLnlbMF0saz1NYXRoLm1heCgxLCQuYm91bmRzLnhbMV0tJC5ib3VuZHMueFswXSwkLmJvdW5kcy56WzFdLSQuYm91bmRzLnpbMF0pL1osej1MOChDLFk4KS5tYXAoKHgpPT4oe3g6KHgueC1OKSprK1kseTooeC55LVEpKmsrVix6Oih4LnotcSkqaytHfSkpLEI9TDgoJCxZOCksXz0oQy50cmFpbC5sb29wfHwkLnRyYWlsLmxvb3ApPz8hMSxIPVk0KHosQixfKSxPPUMwKEMsSyksRT17eDooTy54LU4pKmsrWSx5OihPLnktUSkqaytWLHo6KE8uei1xKSprK0d9LHk9QzAoJCwwKSxvPXt4OnkueCx5OnkueSx6Onkuen07cmV0dXJue2Zyb206Qyx0bzokLGZyb21QdHM6eix0b1B0czpILHByZXZNYXJrZXI6RSxuZXh0TWFya2VyOm8sc3RhcnRNczpKfX1mdW5jdGlvbiBZNChDLEssJCl7bGV0IEo9Qy5sZW5ndGgsTj0xLzAscT0wLFE9ITEsWj1bSyxbLi4uS10ucmV2ZXJzZSgpXTtmb3IobGV0IFY9MDtWPFoubGVuZ3RoO1YrKyl7bGV0IEw9WltWXSxrPSQ/SjoxO2ZvcihsZXQgRD0wO0Q8aztEKyspe2xldCB6PTA7Zm9yKGxldCBCPTA7QjxKO0IrKyl7bGV0IF89Q1tCXSxIPUxbKEIrRCklSl0sTz1fLngtSC54LEU9Xy55LUgueSx5PV8uei1ILno7aWYoeis9TypPK0UqRSt5Knksej49TilicmVha31pZih6PE4pTj16LHE9RCxRPVY9PT0xfX1sZXQgWT1RP1suLi5LXS5yZXZlcnNlKCk6SyxHPUFycmF5KEopO2ZvcihsZXQgVj0wO1Y8SjtWKyspR1tWXT1ZWyhWK3EpJUpdO3JldHVybiBHfWZ1bmN0aW9uIEw0KEMsSyl7bGV0ICQ9Qy5mcm9tUHRzLmxlbmd0aCxKPUFycmF5KCQpLE49MCxxPW51bGwsUT0xLzAsWj0tMS8wLFk9MS8wLEc9LTEvMCxWPTEvMCxMPS0xLzA7Zm9yKGxldCBrPTA7azwkO2srKyl7bGV0IEQ9Qy5mcm9tUHRzW2tdLHo9Qy50b1B0c1trXSxCPUQueCsoei54LUQueCkqSyxfPUQueSsoei55LUQueSkqSyxIPUQueisoei56LUQueikqSztpZihxKXtsZXQgRT1CLXEueCx5PV8tcS55LG89SC1xLno7Tis9TWF0aC5zcXJ0KEUqRSt5KnkrbypvKX1sZXQgTz17eDpCLHk6Xyx6OkgsYXJjOk4sbGF0OjAsbG5nOjB9O2lmKEpba109TyxxPU8sQjxRKVE9QjtpZihCPlopWj1CO2lmKF88WSlZPV87aWYoXz5HKUc9XztpZihIPFYpVj1IO2lmKEg+TClMPUh9cmV0dXJue3RyYWlsOkMudG8udHJhaWwsb3JpZ2luOkMudG8ub3JpZ2luLHBvaW50czpKLHRvdGFsRGlzdGFuY2U6Tixib3VuZHM6e3g6W1EsWl0seTpbWSxHXSx6OltWLExdfSxyYXdNaW5BbHQ6Qy50by5yYXdNaW5BbHQrKEMuZnJvbS5yYXdNaW5BbHQtQy50by5yYXdNaW5BbHQpKigxLUspLHJhd01heEFsdDpDLnRvLnJhd01heEFsdCsoQy5mcm9tLnJhd01heEFsdC1DLnRvLnJhd01heEFsdCkqKDEtSyl9fWZ1bmN0aW9uIFY0KEMpe3JldHVybiBDPDAuNT8yKkMqQzoxLU1hdGgucG93KC0yKkMrMiwyKS8yfWZ1bmN0aW9uIEI0KEMsSywkLEosTixxLFEpe2xldCBaPUMuZ2V0Q29udGV4dCgiMmQiKTtpZighWilyZXR1cm47bGV0e2NsaWVudFdpZHRoOlksY2xpZW50SGVpZ2h0Okd9PUM7aWYoWT09PTB8fEc9PT0wKXJldHVybjtsZXQgVj10eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3cuZGV2aWNlUGl4ZWxSYXRpb3x8MToxLEw9TWF0aC5yb3VuZChZKlYpLGs9TWF0aC5yb3VuZChHKlYpO2lmKEMud2lkdGghPT1MfHxDLmhlaWdodCE9PWspQy53aWR0aD1MLEMuaGVpZ2h0PWs7Wi5zZXRUcmFuc2Zvcm0oViwwLDAsViwwLDApLFouY2xlYXJSZWN0KDAsMCxZLEcpO2xldCBEPVouY3JlYXRlUmFkaWFsR3JhZGllbnQoWSowLjUsRyowLjU1LE1hdGgubWluKFksRykqMC4yLFkqMC41LEcqMC41NSxNYXRoLm1heChZLEcpKjAuODUpO0QuYWRkQ29sb3JTdG9wKDAsIiMxYTFhMWQiKSxELmFkZENvbG9yU3RvcCgxLCIjMGEwYTBjIiksWi5maWxsU3R5bGU9RCxaLmZpbGxSZWN0KDAsMCxZLEcpLF80KFosWSxHKTtsZXR7cG9pbnRzOnosYm91bmRzOkJ9PUs7aWYoei5sZW5ndGg8MilyZXR1cm47bGV0IF89MjgqTWF0aC5QSS8xODAsSD1NYXRoLnNpbihfKSxPPU1hdGguY29zKF8pLEU9TWF0aC5zaW4oSikseT1NYXRoLmNvcyhKKSxvPShCLnhbMF0rQi54WzFdKS8yLHg9KEIuelswXStCLnpbMV0pLzIsZz1CLnhbMV0tQi54WzBdLGg9Qi56WzFdLUIuelswXSxSPUIueVsxXS1CLnlbMF0sYT1NYXRoLm1heChnLGgpKjEuMDUsdT1NYXRoLm1heChoKk8rUipILGcqMC40KSoxLjE1LFgxPVkqMC4wOCxkPUcqMC4xOCxpPU1hdGgubWluKChZLVgxKjIpL2EsKEctZCoyKS91KSoxLjQ1LFM9UjwxPzE6TWF0aC5taW4oMjQsMTQwL01hdGgubWF4KDIwLFIpKSxtPShBLEksaik9PntsZXQgcz1BLW8sZT1qLXgsRDE9cyp5K2UqRSxHMT0tcypFK2UqeSxFMT1JKlMsSTE9RTEqTy1HMSpILEYxPUUxKkgrRzEqTztyZXR1cm57c3g6WS8yK0QxKmksc3k6RyowLjU1LUkxKmksZGVwdGg6RjF9fSxKMT0zOCxLMT16Lm1hcCgoQSk9PntsZXQgST1tKEEueCxBLnksQS56KSxqPW0oQS54LDAsQS56KSxzPXtzeDpJLnN4LHN5Ok1hdGgubWF4KGouc3ksSS5zeStKMSksZGVwdGg6ai5kZXB0aH07cmV0dXJue3A6QSx0b3A6SSxib3Q6c319KTtmb3IobGV0IEE9MTtBPEsxLmxlbmd0aDtBKyspe2xldCBJPUsxW0EtMV0saj1LMVtBXSxzPVouY3JlYXRlTGluZWFyR3JhZGllbnQoKEkudG9wLnN4K2oudG9wLnN4KS8yLChJLnRvcC5zeStqLnRvcC5zeSkvMiwoSS5ib3Quc3grai5ib3Quc3gpLzIsKEkuYm90LnN5K2ouYm90LnN5KS8yKTtzLmFkZENvbG9yU3RvcCgwLCJyZ2JhKDI1NSwyNTUsMjU1LDAuNTUpIikscy5hZGRDb2xvclN0b3AoMC40NSwicmdiYSgxODAsMTgwLDE4NSwwLjI4KSIpLHMuYWRkQ29sb3JTdG9wKDAuODUsInJnYmEoNDAsNDAsNDUsMC4xOCkiKSxzLmFkZENvbG9yU3RvcCgxLCJyZ2JhKDAsMCwwLDApIiksWi5maWxsU3R5bGU9cyxaLmJlZ2luUGF0aCgpLFoubW92ZVRvKEkudG9wLnN4LEkudG9wLnN5KSxaLmxpbmVUbyhqLnRvcC5zeCxqLnRvcC5zeSksWi5saW5lVG8oai5ib3Quc3gsai5ib3Quc3kpLFoubGluZVRvKEkuYm90LnN4LEkuYm90LnN5KSxaLmNsb3NlUGF0aCgpLFouZmlsbCgpfVouc3Ryb2tlU3R5bGU9IiNmZmZmZmYiLFoubGluZVdpZHRoPTEuNixaLmxpbmVDYXA9InJvdW5kIixaLmxpbmVKb2luPSJyb3VuZCIsWi5iZWdpblBhdGgoKTtmb3IobGV0IEE9MDtBPEsxLmxlbmd0aDtBKyspe2xldHt0b3A6SX09SzFbQV07aWYoQT09PTApWi5tb3ZlVG8oSS5zeCxJLnN5KTtlbHNlIFoubGluZVRvKEkuc3gsSS5zeSl9Wi5zdHJva2UoKTtsZXQgWTE9JDtaLnN0cm9rZVN0eWxlPSIjZjlkMmE0IixaLmxpbmVXaWR0aD0yLjIsWi5iZWdpblBhdGgoKTtsZXQgcTE9ITE7Zm9yKGxldCBBPTA7QTxLMS5sZW5ndGg7QSsrKXtsZXR7cDpJLHRvcDpqfT1LMVtBXTtpZihJLmFyYz5ZMSlicmVhaztpZighcTEpWi5tb3ZlVG8oai5zeCxqLnN5KSxxMT0hMDtlbHNlIFoubGluZVRvKGouc3gsai5zeSl9aWYocTEpWi5zdHJva2UoKTtsZXQgdD1RPz9DMChLLCQpLCQxPW0odC54LHQueSx0LnopO2lmKHEpe2xldCBqPU4lMjYwMC8yNjAwLHM9NCsyMipqLGU9MC4yMiooMS1qKSxEMT1aLmNyZWF0ZVJhZGlhbEdyYWRpZW50KCQxLnN4LCQxLnN5LHMqMC41LCQxLnN4LCQxLnN5LHMpO0QxLmFkZENvbG9yU3RvcCgwLCJyZ2JhKDI1NSwyNTUsMjU1LDApIiksRDEuYWRkQ29sb3JTdG9wKDAuNyxgcmdiYSgyNTUsMjU1LDI1NSwke2UudG9GaXhlZCgzKX0pYCksRDEuYWRkQ29sb3JTdG9wKDEsInJnYmEoMjU1LDI1NSwyNTUsMCkiKSxaLmZpbGxTdHlsZT1EMSxaLmJlZ2luUGF0aCgpLFouYXJjKCQxLnN4LCQxLnN5LHMsMCxNYXRoLlBJKjIpLFouZmlsbCgpfVouZmlsbFN0eWxlPSIjZmZmIixaLmJlZ2luUGF0aCgpLFouYXJjKCQxLnN4LCQxLnN5LDMuOCwwLE1hdGguUEkqMiksWi5maWxsKCl9ZnVuY3Rpb24gXzQoQyxLLCQpe0MuZmlsbFN0eWxlPSJyZ2JhKDI1NSwyNTUsMjU1LDAuMDYpIjtmb3IobGV0IHE9NztxPCQ7cSs9MTQpZm9yKGxldCBRPTc7UTxLO1ErPTE0KUMuYmVnaW5QYXRoKCksQy5hcmMoUSxxLDAuNywwLE1hdGguUEkqMiksQy5maWxsKCl9ZnVuY3Rpb24gQzUoQyl7aWYoQzwxMDAwKXJldHVybmAke0MudG9GaXhlZCgwKX0gbWA7cmV0dXJuYCR7KEMvMTAwMCkudG9GaXhlZCgyKX0ga21gfWZ1bmN0aW9uIFY4KEMpe2xldCBLPU1hdGguZmxvb3IoQy8xMDAwKSwkPU1hdGguZmxvb3IoSy8zNjAwKSxKPU1hdGguZmxvb3IoSyUzNjAwLzYwKSxOPUslNjA7aWYoJD4wKXJldHVybmAkeyR9OiR7Si50b1N0cmluZygpLnBhZFN0YXJ0KDIsIjAiKX06JHtOLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwiMCIpfWA7cmV0dXJuYCR7Sn06JHtOLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwiMCIpfWB9ZnVuY3Rpb24gazQoQyl7aWYoQzw9MClyZXR1cm4i4oCUIjtpZihDPjcpcmV0dXJuYCR7KEMqMy42KS50b0ZpeGVkKDApfSBrbS9oYDtsZXQgSz0xMDAwL0MsJD1NYXRoLmZsb29yKEsvNjApLEo9TWF0aC5yb3VuZChLJTYwKTtyZXR1cm5gJHskfToke0oudG9TdHJpbmcoKS5wYWRTdGFydCgyLCIwIil9L2ttYH1mdW5jdGlvbiBCOChDKXtyZXR1cm5gJHtDLnRvRml4ZWQoMCl9IG1gfWZ1bmN0aW9uIF84KEMpe2xldCBLPUMudHJpbSgpO2lmKCFLKXJldHVybiIiO2xldCAkPUsubWF0Y2goL1JlYXNvbjpccyooLispJC9tKTtpZigkKXJldHVybiAkWzFdO3JldHVybiBLLnNwbGl0KGAKYCkuc2xpY2UoLTEpWzBdPz9LfWFzeW5jIGZ1bmN0aW9uIFoxKEMpe3JldHVybihhd2FpdCBmZXRjaCh2MSgiZXhlYyIpLHttZXRob2Q6IlBPU1QiLGhlYWRlcnM6eyJDb250ZW50LVR5cGUiOiJhcHBsaWNhdGlvbi9qc29uIn0sYm9keTpKU09OLnN0cmluZ2lmeSh7Y29tbWFuZDpDfSl9KSkuanNvbigpfWZ1bmN0aW9uIFUxKEMpe3JldHVybmAnJHtDLnJlcGxhY2UoLycvZywiJ1xcJyciKX0nYH1hc3luYyBmdW5jdGlvbiBLNShDLEssJCl7bGV0IEo9YXdhaXQgQyhgeGNydW4gc2ltY3RsIGdldF9hcHBfY29udGFpbmVyICR7S30gJHtVMSgkKX0gYXBwYCk7aWYoSi5leGl0Q29kZSE9PTApcmV0dXJue2Vycm9yOkouc3RkZXJyLnRyaW0oKXx8IkFwcCBub3QgZm91bmQgb24gc2ltdWxhdG9yIn07bGV0IE49Si5zdGRvdXQudHJpbSgpO2lmKCFOKXJldHVybntlcnJvcjoiRW1wdHkgYXBwIHBhdGgifTtsZXQgcT1hd2FpdCBDKGBwbHV0aWwgLWNvbnZlcnQganNvbiAtbyAtICR7VTEoTisiL0luZm8ucGxpc3QiKX1gKSxRPXt9O2lmKHEuZXhpdENvZGU9PT0wKXRyeXtRPUpTT04ucGFyc2UocS5zdGRvdXQpfWNhdGNoe31sZXQgWixHPShRPy5DRkJ1bmRsZUljb25zPy5DRkJ1bmRsZVByaW1hcnlJY29uPz9RPy5bIkNGQnVuZGxlSWNvbnN+aXBhZCJdPy5DRkJ1bmRsZVByaW1hcnlJY29uKT8uQ0ZCdW5kbGVJY29uRmlsZXM/P1E/LkNGQnVuZGxlSWNvbkZpbGVzO2lmKEcmJkcubGVuZ3RoPjApWj1HW0cubGVuZ3RoLTFdO2Vsc2UgaWYodHlwZW9mIFE/LkNGQnVuZGxlSWNvbkZpbGU9PT0ic3RyaW5nIilaPVEuQ0ZCdW5kbGVJY29uRmlsZTtsZXQgVj1udWxsO2lmKFope2xldCBMPVtgJHtafUAzeC5wbmdgLGAke1p9QDJ4LnBuZ2AsYCR7Wn0ucG5nYCxgJHtafTYweDYwQDN4LnBuZ2AsYCR7Wn02MHg2MEAyeC5wbmdgXSxEPShhd2FpdCBDKGBiYXNoIC1jICR7VTEoTC5tYXAoKHopPT5gWyAtZiAke1UxKE4rIi8iK3opfSBdICYmIGVjaG8gJHtVMShOKyIvIit6KX0gJiYgZXhpdCAwYCkuam9pbigiOyAiKSsiOyBleGl0IDEiKX1gKSkuc3Rkb3V0LnRyaW0oKTtpZihEKXtsZXQgej1hd2FpdCBDKGBiYXNlNjQgLWkgJHtVMShEKX1gKTtpZih6LmV4aXRDb2RlPT09MClWPWBkYXRhOmltYWdlL3BuZztiYXNlNjQsJHt6LnN0ZG91dC5yZXBsYWNlKC9ccysvZywiIil9YH19cmV0dXJue2FwcFBhdGg6TixkaXNwbGF5TmFtZTpRLkNGQnVuZGxlRGlzcGxheU5hbWU/P1EuQ0ZCdW5kbGVOYW1lLHNob3J0VmVyc2lvbjpRLkNGQnVuZGxlU2hvcnRWZXJzaW9uU3RyaW5nLGJ1bmRsZVZlcnNpb246US5DRkJ1bmRsZVZlcnNpb24sbWluT1M6US5NaW5pbXVtT1NWZXJzaW9uLGV4ZWN1dGFibGU6US5DRkJ1bmRsZUV4ZWN1dGFibGUsaWNvbkRhdGFVcmw6Vn19dmFyIEgwPW5ldyBNYXA7ZnVuY3Rpb24gRDgoQyxLLCQpe2xldCBKPWAke0t9OiR7JH1gLE49SDAuZ2V0KEopO2lmKE4hPT12b2lkIDApcmV0dXJuIFByb21pc2UucmVzb2x2ZShOKTtsZXQgcT1LNShDLEssJCkudGhlbigoUSk9PntsZXQgWj1RLmljb25EYXRhVXJsPz9udWxsO3JldHVybiBIMC5zZXQoSixaKSxafSkuY2F0Y2goKCk9PntyZXR1cm4gSDAuc2V0KEosbnVsbCksbnVsbH0pO3JldHVybiBIMC5zZXQoSixxKSxxfWZ1bmN0aW9uIEg4KHt1ZGlkOkMsY3VycmVudEFwcDpLfSl7bGV0WyQsSl09YihudWxsKSxbTixxXT1iKCExKTtpZihXKCgpPT57aWYoIUspe0oobnVsbCk7cmV0dXJufWxldCBRPSExO3JldHVybiBKKHtidW5kbGVJZDpLLmJ1bmRsZUlkLGlzUmVhY3ROYXRpdmU6Sy5pc1JlYWN0TmF0aXZlLHBpZDpLLnBpZCxsb2FkaW5nOiEwfSksSzUoWjEsQyxLLmJ1bmRsZUlkKS50aGVuKChaKT0+e2lmKFEpcmV0dXJuO0ooe2J1bmRsZUlkOksuYnVuZGxlSWQsaXNSZWFjdE5hdGl2ZTpLLmlzUmVhY3ROYXRpdmUscGlkOksucGlkLGxvYWRpbmc6ITEsLi4uWn0pfSksKCk9PntRPSEwfX0sW0MsSyxLPy5idW5kbGVJZCxLPy5waWQsSz8uaXNSZWFjdE5hdGl2ZV0pLCEkKXJldHVybiBYKCJkaXYiLHtjbGFzc05hbWU6ImJnLXBhbmVsIGJvcmRlciBib3JkZXItZGFzaGVkIGJvcmRlci13aGl0ZS8xMCByb3VuZGVkLVsxMHB4XSBwLTQgdGV4dC13aGl0ZS81MCB0ZXh0LVsxMnB4XSB0ZXh0LWNlbnRlciIsY2hpbGRyZW46IldhaXRpbmcgZm9yIGFuIGFwcCB0byBjb21lIHRvIHRoZSBmb3JlZ3JvdW5k4oCmIn0pO3JldHVybiBYKCJkaXYiLHtjbGFzc05hbWU6ImJnLXBhbmVsIGJvcmRlciBib3JkZXItd2hpdGUvOCByb3VuZGVkLVsxMHB4XSBmbGV4IGZsZXgtY29sIGdhcC0yLjUgcHgtMyBweS0yIixjaGlsZHJlbjpbWCgiYnV0dG9uIix7dHlwZToiYnV0dG9uIixvbkNsaWNrOigpPT5xKChRKT0+IVEpLGNsYXNzTmFtZToibGVtLXRvZ2dsZSBmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMyBiZy10cmFuc3BhcmVudCBib3JkZXItbm9uZSB0ZXh0LXdoaXRlLzkwIHB5LTIgcHgtMSAtbXktMiAtbXgtMSBjdXJzb3ItcG9pbnRlciB3LVtjYWxjKDEwMCUrOHB4KV0gdGV4dC1sZWZ0IG1pbi1oLVszNnB4XSIsImFyaWEtZXhwYW5kZWQiOk4sY2hpbGRyZW46WyQuaWNvbkRhdGFVcmw/WCgiaW1nIix7c3JjOiQuaWNvbkRhdGFVcmwsY2xhc3NOYW1lOiJ3LTEwIGgtMTAgcm91bmRlZC1bOHB4XSBzaHJpbmstMCBvYmplY3QtY292ZXIgYm9yZGVyIGJvcmRlci13aGl0ZS84IixhbHQ6IiJ9KTpYKCJkaXYiLHtjbGFzc05hbWU6InctMTAgaC0xMCByb3VuZGVkLVs4cHhdIHNocmluay0wIGJvcmRlciBib3JkZXItd2hpdGUvOCBiZy13aGl0ZS9bMC4wNF0ifSksWCgiZGl2Iix7Y2xhc3NOYW1lOiJtaW4tdy0wIGZsZXgtMSBsZWFkaW5nLXRpZ2h0IixjaGlsZHJlbjpbWCgiZGl2Iix7Y2xhc3NOYW1lOiJ0ZXh0LVsxM3B4XSBmb250LXNlbWlib2xkIHRleHQtd2hpdGUvOTAgdHJ1bmNhdGUiLGNoaWxkcmVuOlskLmRpc3BsYXlOYW1lPz8kLmJ1bmRsZUlkLCQubG9hZGluZyYmWCgic3BhbiIse2NsYXNzTmFtZToidGV4dC13aGl0ZS80NSBmb250LW5vcm1hbCIsY2hpbGRyZW46IiDigKYifSldfSksWCgiZGl2Iix7Y2xhc3NOYW1lOiJ0ZXh0LVsxMXB4XSB0ZXh0LXdoaXRlLzU1IGZvbnQtbW9ubyB0cnVuY2F0ZSIsdGl0bGU6JC5idW5kbGVJZCxjaGlsZHJlbjokLmJ1bmRsZUlkfSldfSksWChqMSx7b3BlbjpOfSldfSksTiYmWChOMSx7Y2hpbGRyZW46WyQuZXJyb3ImJlgoImRpdiIse2NsYXNzTmFtZToiYmctZGFuZ2VyLzEwIGJvcmRlciBib3JkZXItZGFuZ2VyLzIwIHRleHQtZGFuZ2VyLXNvZnQgdGV4dC1bMTFweF0gcHgtMiBweS0xLjUgcm91bmRlZC1tZCIsY2hpbGRyZW46JC5lcnJvcn0pLFgoImRsIix7Y2xhc3NOYW1lOiJtLTAgZmxleCBmbGV4LWNvbCBnYXAtMS41IixjaGlsZHJlbjpbWChGMCx7bGFiZWw6IlZlcnNpb24iLHZhbHVlOiQuc2hvcnRWZXJzaW9uP2AkeyQuc2hvcnRWZXJzaW9ufSAoJHskLmJ1bmRsZVZlcnNpb24/PyLigJQifSlgOiQubG9hZGluZz8i4oCmIjoi4oCUIn0pLFgoRjAse2xhYmVsOiJNaW4gaU9TIix2YWx1ZTokLm1pbk9TPz8oJC5sb2FkaW5nPyLigKYiOiLigJQiKX0pLFgoRjAse2xhYmVsOiJFeGVjdXRhYmxlIix2YWx1ZTokLmV4ZWN1dGFibGU/PygkLmxvYWRpbmc/IuKApiI6IuKAlCIpfSksWChGMCx7bGFiZWw6IlBJRCIsdmFsdWU6JC5waWQhPW51bGw/U3RyaW5nKCQucGlkKToi4oCUIn0pLCQuaXNSZWFjdE5hdGl2ZSYmWChGMCx7bGFiZWw6IlJlYWN0IE5hdGl2ZSIsdmFsdWU6IlllcyJ9KSxYKEYwLHtsYWJlbDoiQXBwIHBhdGgiLHZhbHVlOiQuYXBwUGF0aD8/KCQubG9hZGluZz8i4oCmIjoi4oCUIiksbW9ubzohMCxhY3Rpb246JC5hcHBQYXRoP3t0aXRsZToiUmV2ZWFsIGluIEZpbmRlciIsb25DbGljazooKT0+e1oxKGBvcGVuIC1SICR7VTEoJC5hcHBQYXRoKX1gKX0saWNvbjpYKCJzdmciLHt3aWR0aDoiMTEiLGhlaWdodDoiMTEiLHZpZXdCb3g6IjAgMCAyNCAyNCIsZmlsbDoibm9uZSIsc3Ryb2tlOiJjdXJyZW50Q29sb3IiLHN0cm9rZVdpZHRoOiIyLjIiLHN0cm9rZUxpbmVjYXA6InJvdW5kIixzdHJva2VMaW5lam9pbjoicm91bmQiLGNoaWxkcmVuOltYKCJsaW5lIix7eDE6IjciLHkxOiIxNyIseDI6IjE3Iix5MjoiNyJ9KSxYKCJwb2x5bGluZSIse3BvaW50czoiMTAgNyAxNyA3IDE3IDE0In0pXX0pfTp2b2lkIDB9KV19KV19KV19KX1mdW5jdGlvbiBGMCh7bGFiZWw6Qyx2YWx1ZTpLLG1vbm86JCxhY3Rpb246Sn0pe3JldHVybiBYKCJkaXYiLHtjbGFzc05hbWU6Imdyb3VwIGZsZXggaXRlbXMtYmFzZWxpbmUgZ2FwLTIgbWluLXctMCIsY2hpbGRyZW46W1goImR0Iix7Y2xhc3NOYW1lOiJtLTAgdGV4dC1bMTFweF0gdGV4dC13aGl0ZS81MCB3LTIxIHNocmluay0wIixjaGlsZHJlbjpDfSksWCgiZGQiLHtjbGFzc05hbWU6YG0tMCB0ZXh0LXdoaXRlLzkwIGZsZXgtMSBtaW4tdy0wIG92ZXJmbG93LWhpZGRlbiB0ZXh0LWVsbGlwc2lzIHdoaXRlc3BhY2Utbm93cmFwIHJlbGF0aXZlICR7JD8iZm9udC1tb25vIHRleHQtWzExcHhdIjoidGV4dC1bMTJweF0ifWAsdGl0bGU6SyxjaGlsZHJlbjpbSyxKJiZYKCJkaXYiLHtjbGFzc05hbWU6ImFic29sdXRlIHRvcC0wIHJpZ2h0LTAgYm90dG9tLTAgcGwtNyBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWVuZCBiZy1bbGluZWFyLWdyYWRpZW50KHRvX3JpZ2h0LHJnYmEoMjgsMjgsMzAsMClfMCUsIzFjMWMxZV81NSUpXSBbdHJhbnNpdGlvbjpvcGFjaXR5XzAuMTVzX2Vhc2UsdHJhbnNmb3JtXzAuMTVzX2Vhc2VdIG9wYWNpdHktMCB0cmFuc2xhdGUteC0xIHBvaW50ZXItZXZlbnRzLW5vbmUgZ3JvdXAtaG92ZXI6b3BhY2l0eS0xMDAgZ3JvdXAtaG92ZXI6dHJhbnNsYXRlLXgtMCBncm91cC1ob3Zlcjpwb2ludGVyLWV2ZW50cy1hdXRvIixjaGlsZHJlbjpYKCJidXR0b24iLHt0eXBlOiJidXR0b24iLG9uQ2xpY2s6Si5vbkNsaWNrLHRpdGxlOkoudGl0bGUsImFyaWEtbGFiZWwiOkoudGl0bGUsY2xhc3NOYW1lOiJ3LTUgaC01IGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGJnLXRyYW5zcGFyZW50IGJvcmRlci1ub25lIHJvdW5kZWQgdGV4dC13aGl0ZSBjdXJzb3ItcG9pbnRlciBwLTAiLGNoaWxkcmVuOkouaWNvbn0pfSldfSldfSl9dmFyIEY4PVt7a2V5OiJjYW1lcmEiLGxhYmVsOiJDYW1lcmEifSx7a2V5OiJtaWNyb3Bob25lIixsYWJlbDoiTWljcm9waG9uZSJ9LHtrZXk6InBob3RvcyIsbGFiZWw6IlBob3RvcyJ9LHtrZXk6InBob3Rvcy1hZGQiLGxhYmVsOiJBZGQgdG8gUGhvdG9zIn0se2tleToiY29udGFjdHMiLGxhYmVsOiJDb250YWN0cyJ9LHtrZXk6ImNhbGVuZGFyIixsYWJlbDoiQ2FsZW5kYXIifSx7a2V5OiJyZW1pbmRlcnMiLGxhYmVsOiJSZW1pbmRlcnMifSx7a2V5OiJsb2NhdGlvbiIsbGFiZWw6IkxvY2F0aW9uIn0se2tleToibG9jYXRpb24tYWx3YXlzIixsYWJlbDoiTG9jYXRpb24gKEFsd2F5cykifSx7a2V5OiJtb3Rpb24iLGxhYmVsOiJNb3Rpb24ifSx7a2V5OiJtZWRpYS1saWJyYXJ5IixsYWJlbDoiTWVkaWEgTGlicmFyeSJ9LHtrZXk6InNpcmkiLGxhYmVsOiJTaXJpIn1dO2Z1bmN0aW9uIFU4KHt1ZGlkOkMsYnVuZGxlSWQ6S30pe2xldFskLEpdPWIoe30pLFtOLHFdPWIobnVsbCksW1EsWl09YihudWxsKSxbWSxHXT1iKCExKTtXKCgpPT57Sih7fSksWihudWxsKX0sW0tdKTtsZXQgVj1QKGFzeW5jKGssRCk9PntpZighSylyZXR1cm47bGV0IHo9YCR7a306JHtEfWA7cSh6KSxaKG51bGwpO3RyeXtsZXQgQj1hd2FpdCBaMShgeGNydW4gc2ltY3RsIHByaXZhY3kgJHtDfSAke0R9ICR7a30gJHtVMShLKX1gKTtpZihCLmV4aXRDb2RlIT09MCl7WihCLnN0ZGVyci50cmltKCl8fGBzaW1jdGwgcHJpdmFjeSBmYWlsZWQgKGV4aXQgJHtCLmV4aXRDb2RlfSlgKTtyZXR1cm59SigoXyk9Pih7Li4uXyxba106RD09PSJyZXNldCI/dm9pZCAwOkR9KSl9ZmluYWxseXtxKG51bGwpfX0sW0MsS10pLEw9UChhc3luYygpPT57aWYoIUspcmV0dXJuO3EoIl9fYWxsX18iKSxaKG51bGwpO3RyeXtsZXQgaz1hd2FpdCBaMShgeGNydW4gc2ltY3RsIHByaXZhY3kgJHtDfSByZXNldCBhbGwgJHtVMShLKX1gKTtpZihrLmV4aXRDb2RlIT09MCl7WihrLnN0ZGVyci50cmltKCl8fGBzaW1jdGwgcHJpdmFjeSBmYWlsZWQgKGV4aXQgJHtrLmV4aXRDb2RlfSlgKTtyZXR1cm59Sih7fSl9ZmluYWxseXtxKG51bGwpfX0sW0MsS10pO2lmKCFLKXJldHVybiBYKCJkaXYiLHtjbGFzc05hbWU6ImJnLXBhbmVsIGJvcmRlciBib3JkZXItZGFzaGVkIGJvcmRlci13aGl0ZS8xMCByb3VuZGVkLVsxMHB4XSBwLTQgdGV4dC13aGl0ZS81MCB0ZXh0LVsxMnB4XSB0ZXh0LWNlbnRlciIsY2hpbGRyZW46IlBlcm1pc3Npb25zIGFwcGVhciBvbmNlIGFuIGFwcCBpcyBpbiB0aGUgZm9yZWdyb3VuZC4ifSk7cmV0dXJuIFgoImRpdiIse2NsYXNzTmFtZToiYmctcGFuZWwgYm9yZGVyIGJvcmRlci13aGl0ZS84IHJvdW5kZWQtWzEwcHhdIHB4LTMgcHktMiIsY2hpbGRyZW46W1goImJ1dHRvbiIse29uQ2xpY2s6KCk9PkcoKGspPT4hayksY2xhc3NOYW1lOiJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gZ2FwLTEuNSBiZy10cmFuc3BhcmVudCBib3JkZXItbm9uZSB0ZXh0LXdoaXRlLzUwIHAtMCBtLTAgY3Vyc29yLXBvaW50ZXIgdy1mdWxsIHRleHQtbGVmdCBsZWFkaW5nLW5vbmUiLCJhcmlhLWV4cGFuZGVkIjpZLGNoaWxkcmVuOltYKCJzcGFuIix7Y2xhc3NOYW1lOiJ0ZXh0LVsxMXB4XSBmb250LXNlbWlib2xkIHRleHQtd2hpdGUvNTAgdXBwZXJjYXNlIHRyYWNraW5nLVswLjA4ZW1dIG0tMCIsY2hpbGRyZW46IlBlcm1pc3Npb25zIn0pLFgoajEse29wZW46WX0pXX0pLFkmJlEmJlgoImRpdiIse2NsYXNzTmFtZToiYmctZGFuZ2VyLzEwIGJvcmRlciBib3JkZXItZGFuZ2VyLzIwIHRleHQtZGFuZ2VyLXNvZnQgdGV4dC1bMTFweF0gcHgtMiBweS0xLjUgcm91bmRlZC1tZCBtdC0yIixjaGlsZHJlbjpRfSksWSYmWCgiZGl2Iix7Y2xhc3NOYW1lOiJyZWxhdGl2ZSBtdC0yIixjaGlsZHJlbjpbWCgiZGl2Iix7Y2xhc3NOYW1lOiJtYXgtaC1bMjYwcHhdIG92ZXJmbG93LXktYXV0byBmbGV4IGZsZXgtY29sIGdhcC0xIHB5LTIgW3Njcm9sbGJhci13aWR0aDp0aGluXSIsY2hpbGRyZW46RjgubWFwKCh7a2V5OmssbGFiZWw6RH0pPT57bGV0IHo9JFtrXTtyZXR1cm4gWCgiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gZ2FwLTIgcHgtMC41IHB5LTEiLGNoaWxkcmVuOltYKCJzcGFuIix7Y2xhc3NOYW1lOiJ0ZXh0LVsxMnB4XSB0ZXh0LXdoaXRlLzkwIG92ZXJmbG93LWhpZGRlbiB0ZXh0LWVsbGlwc2lzIHdoaXRlc3BhY2Utbm93cmFwIGZsZXgtMSBtaW4tdy0wIixjaGlsZHJlbjpEfSksWCgiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGdhcC0wLjUgYmctd2hpdGUvWzAuMDRdIGJvcmRlciBib3JkZXItd2hpdGUvOCByb3VuZGVkLW1kIHAtMC41Iixyb2xlOiJncm91cCIsImFyaWEtbGFiZWwiOkQsY2hpbGRyZW46W1goJDUse2FjdGl2ZTp6PT09ImdyYW50IixwZW5kaW5nOk49PT1gJHtrfTpncmFudGAsb25DbGljazooKT0+VihrLCJncmFudCIpLHZhcmlhbnQ6ImdyYW50Iix0aXRsZToiQWxsb3ciLGNoaWxkcmVuOlgoInN2ZyIse3dpZHRoOiIxMSIsaGVpZ2h0OiIxMSIsdmlld0JveDoiMCAwIDI0IDI0IixmaWxsOiJub25lIixzdHJva2U6ImN1cnJlbnRDb2xvciIsc3Ryb2tlV2lkdGg6IjMiLHN0cm9rZUxpbmVjYXA6InJvdW5kIixzdHJva2VMaW5lam9pbjoicm91bmQiLGNoaWxkcmVuOlgoInBvbHlsaW5lIix7cG9pbnRzOiI1IDEyIDEwIDE3IDE5IDcifSl9KX0pLFgoJDUse2FjdGl2ZTp6PT09InJldm9rZSIscGVuZGluZzpOPT09YCR7a306cmV2b2tlYCxvbkNsaWNrOigpPT5WKGssInJldm9rZSIpLHZhcmlhbnQ6InJldm9rZSIsdGl0bGU6IkRlbnkiLGNoaWxkcmVuOlgoInN2ZyIse3dpZHRoOiIxMSIsaGVpZ2h0OiIxMSIsdmlld0JveDoiMCAwIDI0IDI0IixmaWxsOiJub25lIixzdHJva2U6ImN1cnJlbnRDb2xvciIsc3Ryb2tlV2lkdGg6IjMiLHN0cm9rZUxpbmVjYXA6InJvdW5kIixzdHJva2VMaW5lam9pbjoicm91bmQiLGNoaWxkcmVuOltYKCJsaW5lIix7eDE6IjYiLHkxOiI2Iix4MjoiMTgiLHkyOiIxOCJ9KSxYKCJsaW5lIix7eDE6IjE4Iix5MToiNiIseDI6IjYiLHkyOiIxOCJ9KV19KX0pLFgoJDUse2FjdGl2ZTohMSxwZW5kaW5nOk49PT1gJHtrfTpyZXNldGAsb25DbGljazooKT0+VihrLCJyZXNldCIpLHZhcmlhbnQ6InJlc2V0Iix0aXRsZToiUmVzZXQiLGNoaWxkcmVuOlgodDEse3NpemU6MTEsc3Ryb2tlV2lkdGg6Mi40fSl9KV19KV19LGspfSl9KSxYKCJkaXYiLHtjbGFzc05hbWU6ImFic29sdXRlIHRvcC0wIGxlZnQtMCByaWdodC0wIGgtWzE0cHhdIHBvaW50ZXItZXZlbnRzLW5vbmUgcm91bmRlZC10LVsxMHB4XSBiZy1bbGluZWFyLWdyYWRpZW50KHRvX2JvdHRvbSwjMWMxYzFlXzAlLHJnYmEoMjgsMjgsMzAsMClfMTAwJSldIn0pLFgoImRpdiIse2NsYXNzTmFtZToiYWJzb2x1dGUgYm90dG9tLTAgbGVmdC0wIHJpZ2h0LTAgaC1bMTRweF0gcG9pbnRlci1ldmVudHMtbm9uZSBiZy1bbGluZWFyLWdyYWRpZW50KHRvX3RvcCwjMWMxYzFlXzAlLHJnYmEoMjgsMjgsMzAsMClfMTAwJSldIn0pXX0pLFkmJlgoImRpdiIse2NsYXNzTmFtZToiZmxleCBqdXN0aWZ5LWVuZCBwdC0yIixjaGlsZHJlbjpYKCJidXR0b24iLHtvbkNsaWNrOkwsZGlzYWJsZWQ6Tj09PSJfX2FsbF9fIixjbGFzc05hbWU6ImJnLXRyYW5zcGFyZW50IGJvcmRlciBib3JkZXItd2hpdGUvMTIgdGV4dC13aGl0ZS83MCB0ZXh0LVsxMHB4XSBweC0yIHB5LVszcHhdIHJvdW5kZWQtWzVweF0gY3Vyc29yLXBvaW50ZXIgdXBwZXJjYXNlIHRyYWNraW5nLVswLjA0ZW1dIix0aXRsZToieGNydW4gc2ltY3RsIHByaXZhY3kgcmVzZXQgYWxsIixjaGlsZHJlbjpOPT09Il9fYWxsX18iPyLigKYiOiJSZXNldCBhbGwifSl9KV19KX1mdW5jdGlvbiAkNSh7YWN0aXZlOkMscGVuZGluZzpLLG9uQ2xpY2s6JCx2YXJpYW50OkosdGl0bGU6TixjaGlsZHJlbjpxfSl7bGV0IFE9Sj09PSJncmFudCI/IiM0YWRlODAiOko9PT0icmV2b2tlIj8iI2Y4NzE3MSI6IiNhNWI0ZmMiO3JldHVybiBYKCJidXR0b24iLHtvbkNsaWNrOiQsZGlzYWJsZWQ6Syx0aXRsZTpOLCJhcmlhLWxhYmVsIjpOLGNsYXNzTmFtZToidy02IGgtNS41IGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGJvcmRlci1ub25lIHJvdW5kZWQgcC0wIGN1cnNvci1wb2ludGVyIFt0cmFuc2l0aW9uOmJhY2tncm91bmRfMC4xMnMsY29sb3JfMC4xMnNdIixzdHlsZTp7YmFja2dyb3VuZDpDP2Ake1F9MjJgOiJ0cmFuc3BhcmVudCIsY29sb3I6Qz9ROiJyZ2JhKDI1NSwyNTUsMjU1LDAuNTUpIixvcGFjaXR5Oks/MC41OjF9LGNoaWxkcmVuOnF9KX12YXIgRDQ9ImJnLXBhbmVsIGJvcmRlciBib3JkZXItd2hpdGUvOCByb3VuZGVkLVsxMHB4XSIsSDQ9InRleHQtWzExcHhdIGZvbnQtc2VtaWJvbGQgdGV4dC13aGl0ZS81MCB1cHBlcmNhc2UgdHJhY2tpbmctWzAuMDhlbV0gbS0wIix6OD0iYmctcGFuZWwgYm9yZGVyIGJvcmRlci1kYXNoZWQgYm9yZGVyLXdoaXRlLzEwIHJvdW5kZWQtWzEwcHhdIHAtMyB0ZXh0LXdoaXRlLzUwIHRleHQtWzEycHhdIHRleHQtY2VudGVyIjtmdW5jdGlvbiBBOCh7b3ZlcmxheUVuYWJsZWQ6QyxvblRvZ2dsZU92ZXJsYXk6S30pe2xldHtzbmFwc2hvdDokfT1ZMCgpLHtoaWdobGlnaHRlZEtleTpKLHNldEhpZ2hsaWdodGVkS2V5Ok59PUoyKCkscT0kPy5lbGVtZW50cz8/W10sUT1LMigkKSxaPSQ/LmVycm9ycz8uWzBdPz9udWxsO3JldHVybiBYKCJkaXYiLHtjbGFzc05hbWU6YCR7RDR9IHB4LTMgcHktMmAsY2hpbGRyZW46W1goImRpdiIse2NsYXNzTmFtZToiZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuIGdhcC0yIixjaGlsZHJlbjpbWCgic3BhbiIse2NsYXNzTmFtZTpINCxjaGlsZHJlbjoiQVggVHJlZSJ9KSxYKCJidXR0b24iLHt0eXBlOiJidXR0b24iLG9uQ2xpY2s6SywiYXJpYS1wcmVzc2VkIjpDLGNsYXNzTmFtZToiYm9yZGVyIGJvcmRlci13aGl0ZS8xMiByb3VuZGVkLVs1cHhdIGJnLXRyYW5zcGFyZW50IHRleHQtd2hpdGUvNzAgY3Vyc29yLXBvaW50ZXIgdGV4dC1bMTBweF0gcHgtWzdweF0gcHktWzNweF0iLGNoaWxkcmVuOkM/Ik92ZXJsYXkgb24iOiJFbmFibGUgb3ZlcmxheSJ9KV19KSwhQz9udWxsOlE/WCgiZGl2Iix7Y2xhc3NOYW1lOno4LGNoaWxkcmVuOiJBWCB1bmF2YWlsYWJsZSBvbiB0aGlzIHNpbXVsYXRvci4ifSk6cS5sZW5ndGg9PT0wP1goImRpdiIse2NsYXNzTmFtZTp6OCxjaGlsZHJlbjpaPz8iV2FpdGluZyBmb3IgYWNjZXNzaWJpbGl0eSBkYXRh4oCmIn0pOlgoImRpdiIse2NsYXNzTmFtZToiZmxleCBmbGV4LWNvbCBnYXAtMSBtdC0yIHB5LTIgbWF4LWgtWzI2MHB4XSBvdmVyZmxvdy15LWF1dG8gW3Njcm9sbGJhci13aWR0aDp0aGluXSIscm9sZToibGlzdCIsY2hpbGRyZW46cS5tYXAoKFksRyk9PntsZXQgVj1lMShZKTtyZXR1cm4gWChGNCx7ZWxlbWVudDpZLGluZGV4OkcsYWN0aXZlOlY9PT1KLG9uSGlnaGxpZ2h0Ok59LFYpfSl9KV19KX12YXIgRjQ9cTAoZnVuY3Rpb24oe2VsZW1lbnQ6SyxpbmRleDokLGFjdGl2ZTpKLG9uSGlnaGxpZ2h0Ok59KXtsZXQgcT1lMShLKSxRPVgyKEssJCksWj1gJHtNYXRoLnJvdW5kKEsuZnJhbWUud2lkdGgpfXgke01hdGgucm91bmQoSy5mcmFtZS5oZWlnaHQpfWAsWT1bUS5sYWJlbCxRLnJvbGV8fFEudHlwZXx8ImVsZW1lbnQiLFpdLmZpbHRlcihCb29sZWFuKS5qb2luKCIgwrcgIik7cmV0dXJuIFgoImRpdiIse3JvbGU6Imxpc3RpdGVtIix0YWJJbmRleDowLCJkYXRhLWF4LWtleSI6cSx0aXRsZTpZLG9uTW91c2VFbnRlcjooKT0+TihxKSxvbk1vdXNlTGVhdmU6KCk9Pk4obnVsbCksb25Gb2N1czooKT0+TihxKSxvbkJsdXI6KCk9Pk4obnVsbCksY2xhc3NOYW1lOmBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gZ2FwLTIgcm91bmRlZC1tZCBweS0xIHB4LTAuNSBtaW4tdy0wICR7Sj8iYmctd2hpdGUvWzAuMDZdIjoiIn1gLGNoaWxkcmVuOltYKCJzcGFuIix7Y2xhc3NOYW1lOiJmbGV4IGZsZXgtY29sIGdhcC0wLjUgZmxleC0xIG1pbi13LTAiLGNoaWxkcmVuOltYKCJzcGFuIix7Y2xhc3NOYW1lOiJvdmVyZmxvdy1oaWRkZW4gdGV4dC1lbGxpcHNpcyB3aGl0ZXNwYWNlLW5vd3JhcCB0ZXh0LXdoaXRlLzkwIHRleHQtWzEycHhdIGZvbnQtbWVkaXVtIixjaGlsZHJlbjpLLmxhYmVsfHxLLnJvbGV8fCJVbmxhYmVsZWQifSksWCgic3BhbiIse2NsYXNzTmFtZToib3ZlcmZsb3ctaGlkZGVuIHRleHQtZWxsaXBzaXMgd2hpdGVzcGFjZS1ub3dyYXAgdGV4dC13aGl0ZS80NSBmb250LW1vbm8gdGV4dC1bMTBweF0iLGNoaWxkcmVuOksucm9sZXx8Sy50eXBlfHwiZWxlbWVudCJ9KV19KSxYKCJjb2RlIix7Y2xhc3NOYW1lOiJzaHJpbmstMCBiZy13aGl0ZS9bMC4wNF0gYm9yZGVyIGJvcmRlci13aGl0ZS84IHJvdW5kZWQtbWQgdGV4dC13aGl0ZS81NSBmb250LW1vbm8gdGV4dC1bMTBweF0gcHgtMS41IHB5LVszcHhdIixjaGlsZHJlbjpafSldfSl9LChDLEspPT5DLmluZGV4PT09Sy5pbmRleCYmQy5hY3RpdmU9PT1LLmFjdGl2ZSYmQy5vbkhpZ2hsaWdodD09PUsub25IaWdobGlnaHQmJiQyKEMuZWxlbWVudCxLLmVsZW1lbnQpKTt2YXIgVTQ9bmV3IFNldChbImltYWdlL2pwZWciLCJpbWFnZS9wbmciLCJpbWFnZS9naWYiLCJpbWFnZS9oZWljIiwiaW1hZ2UvaGVpZiIsImltYWdlL3dlYnAiLCJ2aWRlby9tcDQiLCJ2aWRlby9xdWlja3RpbWUiXSk7ZnVuY3Rpb24gVTAoQyl7bGV0IEs9Qy5uYW1lLCQ9Sy5sYXN0SW5kZXhPZigiLiIpO2lmKCQ+PTApcmV0dXJuIEsuc2xpY2UoJCsxKS50b0xvd2VyQ2FzZSgpO2lmKEMudHlwZS5zdGFydHNXaXRoKCJ2aWRlby8iKSlyZXR1cm4ibXA0IjtyZXR1cm4ianBnIn1mdW5jdGlvbiBiOChDKXtpZihVMChDKT09PSJpcGEiKXJldHVybiJpcGEiO2lmKFU0LmhhcyhDLnR5cGUpKXJldHVybiJtZWRpYSI7cmV0dXJuIG51bGx9ZnVuY3Rpb24gTzgoQyl7bGV0IEs9bmV3IFVpbnQ4QXJyYXkoQyksJD0iIjtmb3IobGV0IEo9MDtKPEsubGVuZ3RoO0orKykkKz1TdHJpbmcuZnJvbUNoYXJDb2RlKEtbSl0pO3JldHVybiBidG9hKCQpfWFzeW5jIGZ1bmN0aW9uIFQ4KEMsSywkLEope2lmKEMuc2l6ZT41MjQyODgwMDApdGhyb3cgRXJyb3IoIkZpbGUgdG9vIGxhcmdlIChtYXggNTAwTUIpIik7bGV0IE49YC90bXAvJHtLfS0ke2NyeXB0by5yYW5kb21VVUlEKCl9LiR7JH1gLHE9YXdhaXQgQy5hcnJheUJ1ZmZlcigpLFE9TzgocSk7Zm9yKGxldCBaPTA7WjxRLmxlbmd0aDtaKz0yNjIxNDQpe2xldCBZPVEuc2xpY2UoWixaKzI2MjE0NCksVj1hd2FpdCBKKGBiYXNoIC1jICdlY2hvICR7WX0gfCBiYXNlNjQgLWQgJHtaPT09MD8iPiI6Ij4+In0gJHtOfSdgKTtpZihWLmV4aXRDb2RlIT09MCl0aHJvdyBFcnJvcihWLnN0ZGVycnx8YFdyaXRlIGZhaWxlZCAoZXhpdCAke1YuZXhpdENvZGV9KWApfXJldHVybiBOfWFzeW5jIGZ1bmN0aW9uIE04KEMsSywkLEosTil7aWYoQy5zaXplPjUyNDI4ODAwMCl0aHJvdyBFcnJvcigiRmlsZSB0b28gbGFyZ2UgKG1heCA1MDBNQikiKTtsZXQgcT1LPT09ImlwYSI/ImlwYSI6VTAoQyksWj1gL3RtcC8ke0s9PT0iaXBhIj8ic2VydmUtc2ltLWluc3RhbGwiOiJzZXJ2ZS1zaW0tdXBsb2FkIn0tJHtjcnlwdG8ucmFuZG9tVVVJRCgpfS4ke3F9YDt0cnl7TigwKTtsZXQgWT1hd2FpdCBDLmFycmF5QnVmZmVyKCksRz1POChZKSxWPTA7Zm9yKGxldCBEPTA7RDxHLmxlbmd0aDtEKz0yNjIxNDQpe2xldCB6PUcuc2xpY2UoRCxEKzI2MjE0NCksXz1hd2FpdCAkKGBiYXNoIC1jICdlY2hvICR7en0gfCBiYXNlNjQgLWQgJHtEPT09MD8iPiI6Ij4+In0gJHtafSdgKTtpZihfLmV4aXRDb2RlIT09MCl0aHJvdyBFcnJvcihfLnN0ZGVycnx8YFdyaXRlIGZhaWxlZCAoZXhpdCAke18uZXhpdENvZGV9KWApO2xldCBIPU1hdGgubWluKEQrMjYyMTQ0LEcubGVuZ3RoKSxPPU1hdGguZmxvb3IoSC9HLmxlbmd0aCoxMDApO2lmKE8hPT1WKVY9TyxOKEgvRy5sZW5ndGgpfU4obnVsbCk7bGV0IEw9Sz09PSJpcGEiP2B4Y3J1biBzaW1jdGwgaW5zdGFsbCAke0p9ICR7Wn1gOmB4Y3J1biBzaW1jdGwgYWRkbWVkaWEgJHtKfSAke1p9YCxrPWF3YWl0ICQoTCk7aWYoay5leGl0Q29kZSE9PTApe2xldCBEPUs9PT0iaXBhIj8iaW5zdGFsbCI6ImFkZG1lZGlhIjt0aHJvdyBFcnJvcihrLnN0ZGVycnx8YCR7RH0gZmFpbGVkIChleGl0ICR7ay5leGl0Q29kZX0pYCl9fWZpbmFsbHl7JChgYmFzaCAtYyAncm0gLWYgJHtafSdgKS5jYXRjaCgoKT0+e30pfX1mdW5jdGlvbiB3OCh7dWRpZDpDLGJ1bmRsZUlkOkt9KXtsZXRbJCxKXT1iKCExKSxbTixxXT1iKCJwbGFjZWhvbGRlciIpLFtRLFpdPWIoIiIpLFtZLEddPWIobnVsbCksW1YsTF09YighMSksaz12KDApLFtELHpdPWIoITEpLFtCLF9dPWIoITEpLEg9dihudWxsKSxbTyxFXT1iKFtdKSxbeSxvXT1iKCExKSxbeCxnXT1iKCIiKSxbaCxSXT1iKCJhdXRvIiksW2EsdV09YihudWxsKSxbWDEsZF09YihudWxsKSxbLGldPWIobnVsbCksW1MsbV09YighMSksW0oxLEsxXT1iKCgpPT5uZXcgU2V0KSxZMT12KCExKSxxMT12KCExKSx0PU0xKCgpPT57bGV0IFQ9d2luZG93Ll9fU0lNX1BSRVZJRVdfXz8uc2VydmVTaW1CaW47aWYoIVQpcmV0dXJuInNlcnZlLXNpbSI7cmV0dXJuL1wuanMkLy50ZXN0KFQpP2Bub2RlICR7VTEoVCl9YDpVMShUKX0sW10pO1coKCk9PntsZXQgVD0hMTtyZXR1cm4oYXN5bmMoKT0+e3RyeXtsZXQgcj1hd2FpdCBaMShgJHt0fSBjYW1lcmEgc3RhdHVzIC1kICR7Q31gKTtpZihUfHxyLmV4aXRDb2RlIT09MClyZXR1cm47bGV0IGY9SlNPTi5wYXJzZShyLnN0ZG91dC50cmltKCkpO2lmKCFmLmFsaXZlKXJldHVybjtpZihZMS5jdXJyZW50PSEwLHExLmN1cnJlbnQ9ITAsZi5zb3VyY2U9PT0icGxhY2Vob2xkZXIifHxmLnNvdXJjZT09PSJ3ZWJjYW0ifHxmLnNvdXJjZT09PSJpbWFnZSJ8fGYuc291cmNlPT09InZpZGVvIilxKGYuc291cmNlKTtpZigoZi5zb3VyY2U9PT0iaW1hZ2UifHxmLnNvdXJjZT09PSJ2aWRlbyIpJiZmLmFyZylaKGYuYXJnKSxHKGYuYXJnLnNwbGl0KCIvIikucG9wKCk/P251bGwpO2lmKGYuc291cmNlPT09IndlYmNhbSImJmYuYXJnKWcoZi5hcmcpO2lmKGYubWlycm9yPT09ImF1dG8ifHxmLm1pcnJvcj09PSJvbiJ8fGYubWlycm9yPT09Im9mZiIpUihmLm1pcnJvcik7bSghMCksaShgUmVhdHRhY2hlZCDihpIgJHtmLnNvdXJjZT8/InJ1bm5pbmcgaGVscGVyIn0ke2YuYXJnP2AgKCR7Zi5hcmd9KWA6IiJ9YCl9Y2F0Y2h7fX0pKCksKCk9PntUPSEwfX0sW0MsdF0pO2xldCAkMT1QKGFzeW5jKCk9PntvKCEwKSxkKG51bGwpO3RyeXtsZXQgVD1hd2FpdCBaMShgJHt0fSBjYW1lcmEgLS1saXN0LXdlYmNhbXNgKTtpZihULmV4aXRDb2RlIT09MCl7ZChULnN0ZGVyci50cmltKCl8fGAtLWxpc3Qtd2ViY2FtcyBmYWlsZWQgKCR7VC5leGl0Q29kZX0pYCk7cmV0dXJufWxldCByPVQuc3Rkb3V0LnNwbGl0KGAKYCkubWFwKChmKT0+Zi50cmltKCkpLmZpbHRlcihCb29sZWFuKS5tYXAoKGYpPT57bGV0IEIxPWYuaW5kZXhPZigiXHQiKTtpZihCMTwwKXJldHVybntpZDpmLG5hbWU6Zn07cmV0dXJue2lkOmYuc2xpY2UoMCxCMSksbmFtZTpmLnNsaWNlKEIxKzEpfX0pO2lmKEUociksci5sZW5ndGg+MCYmIXgpZyhyWzBdLmlkKX1maW5hbGx5e28oITEpfX0sW3gsdF0pO1coKCk9PntpZigkJiZPLmxlbmd0aD09PTAmJiF5KSQxKCl9LFskLE8ubGVuZ3RoLHksJDFdKTtsZXQgQT1QKGFzeW5jKFQscixmKT0+e2xldCBCMT1UPT09ImltYWdlInx8VD09PSJ2aWRlbyIsejE9WyJjYW1lcmEiLCJzd2l0Y2giLEIxPyJmaWxlIjpUXTtpZihUPT09IndlYmNhbSImJnIpejEucHVzaChVMShyKSk7aWYoQjEpe2lmKCFmLnRyaW0oKSlyZXR1cm4gZCgiRHJvcCBhIGZpbGUgaW50byB0aGUgcGFuZWwgb3IgcGljayBhbm90aGVyIHNvdXJjZS4iKSwhMTt6MS5wdXNoKFUxKGYudHJpbSgpKSl9ejEucHVzaCgiLWQiLEMsIi0tcXVpZXQiKTtsZXQgTzE9YXdhaXQgWjEoYCR7dH0gJHt6MS5qb2luKCIgIil9YCk7aWYoTzEuZXhpdENvZGUhPT0wKXJldHVybiBkKE8xLnN0ZGVyci50cmltKCl8fE8xLnN0ZG91dC50cmltKCl8fGBzd2l0Y2ggZmFpbGVkICgke08xLmV4aXRDb2RlfSlgKSwhMTt0cnl7bGV0IHgxPUpTT04ucGFyc2UoTzEuc3Rkb3V0LnRyaW0oKSk7aShgU3dpdGNoZWQg4oaSICR7eDEuc291cmNlPz9UfSR7eDEuYXJnP2AgKCR7eDEuYXJnfSlgOiIifWApfWNhdGNoe2koYFN3aXRjaGVkIOKGkiAke1R9YCl9cmV0dXJuITB9LFtDLHRdKSxJPVAoYXN5bmMoKT0+e2lmKCFLKXJldHVybjt1KCJpbmplY3QiKSxkKG51bGwpLGkobnVsbCk7dHJ5e2xldCBUPVsiY2FtZXJhIixVMShLKSwiLWQiLEMsIi0tcXVpZXQiXTtpZihOPT09ImltYWdlInx8Tj09PSJ2aWRlbyIpe2lmKCFRLnRyaW0oKSl7ZCgiRHJvcCBhIGZpbGUgaW50byB0aGUgcGFuZWwgb3IgcGljayBhbm90aGVyIHNvdXJjZS4iKTtyZXR1cm59VC5wdXNoKCItLWZpbGUiLFUxKFEudHJpbSgpKSl9ZWxzZSBpZihOPT09IndlYmNhbSIpaWYoeClULnB1c2goIi0td2ViY2FtIixVMSh4KSk7ZWxzZSBULnB1c2goIi0td2ViY2FtIik7aWYoaCE9PSJhdXRvIilULnB1c2goIi0tbWlycm9yIixoKTtsZXQgcj1hd2FpdCBaMShgJHt0fSAke1Quam9pbigiICIpfWApO2lmKHIuZXhpdENvZGUhPT0wKXtkKHIuc3RkZXJyLnRyaW0oKXx8ci5zdGRvdXQudHJpbSgpfHxgaW5qZWN0IGZhaWxlZCAoJHtyLmV4aXRDb2RlfSlgKTtyZXR1cm59dHJ5e2xldCBmPUpTT04ucGFyc2Uoci5zdGRvdXQudHJpbSgpKSxCMT1mLmhlbHBlclJlbGF1bmNoZWQ9PT0hMT8iQXR0YWNoZWQiOiJJbmplY3RlZCIsejE9Zi5waWQ/YCBwaWQgJHtmLnBpZH1gOiIiLE8xPWYuaGVscGVyUGlkP2AsIGhlbHBlciBwaWQgJHtmLmhlbHBlclBpZH1gOiIiO2koYCR7QjF9ICR7Zi5zb3VyY2U/P059IGludG8gJHtLfSR7ejF9JHtPMX1gKX1jYXRjaHtpKHIuc3Rkb3V0LnRyaW0oKXx8IkluamVjdGVkLiIpfW0oITApLEsxKChmKT0+Zi5oYXMoSyk/ZjpuZXcgU2V0KGYpLmFkZChLKSl9ZmluYWxseXt1KG51bGwpfX0sW0ssQyxOLFEseCxoLHRdKSxqPVM/YCR7Tn06OiR7Tj09PSJ3ZWJjYW0iP3g6IiJ9Ojoke049PT0iaW1hZ2UifHxOPT09InZpZGVvIj9ROiIifWA6bnVsbDtXKCgpPT57aWYoIVMpcmV0dXJuO2lmKChOPT09ImltYWdlInx8Tj09PSJ2aWRlbyIpJiYhUS50cmltKCkpcmV0dXJuO2lmKE49PT0id2ViY2FtIiYmIXgpcmV0dXJuO2lmKFkxLmN1cnJlbnQpe1kxLmN1cnJlbnQ9ITE7cmV0dXJufWxldCBUPSExO3JldHVybihhc3luYygpPT57dSgic3dpdGNoIiksZChudWxsKTt0cnl7aWYoVClyZXR1cm47YXdhaXQgQShOLHgsUSl9ZmluYWxseXtpZighVCl1KG51bGwpfX0pKCksKCk9PntUPSEwfX0sW2pdKSxXKCgpPT57aWYoIVMpcmV0dXJuO2lmKHExLmN1cnJlbnQpe3ExLmN1cnJlbnQ9ITE7cmV0dXJufWxldCBUPSExO3JldHVybihhc3luYygpPT57dSgibWlycm9yIiksZChudWxsKTt0cnl7bGV0IHI9YXdhaXQgWjEoYCR7dH0gY2FtZXJhIG1pcnJvciAke2h9IC1kICR7Q30gLS1xdWlldGApO2lmKFQpcmV0dXJuO2lmKHIuZXhpdENvZGUhPT0wKXtkKHIuc3RkZXJyLnRyaW0oKXx8ci5zdGRvdXQudHJpbSgpfHxgbWlycm9yIGZhaWxlZCAoJHtyLmV4aXRDb2RlfSlgKTtyZXR1cm59aShgTWlycm9yIOKGkiAke2h9YCl9ZmluYWxseXtpZighVCl1KG51bGwpfX0pKCksKCk9PntUPSEwfX0sW2hdKTtsZXQgcz1QKGFzeW5jKCk9Pnt1KCJzdG9wIiksZChudWxsKTt0cnl7bGV0IFQ9YXdhaXQgWjEoYCR7dH0gY2FtZXJhIC0tc3RvcC13ZWJjYW0gLWQgJHtDfWApO2lmKFQuZXhpdENvZGUhPT0wKXtkKFQuc3RkZXJyLnRyaW0oKXx8YHN0b3Atd2ViY2FtIGZhaWxlZCAoJHtULmV4aXRDb2RlfSlgKTtyZXR1cm59aSgiQ2FtZXJhIGhlbHBlciBzdG9wcGVkLiIpLG0oITEpLEsxKG5ldyBTZXQpfWZpbmFsbHl7dShudWxsKX19LFtDLHRdKSxlPVAoYXN5bmMoVCk9PntsZXQgcj1ULnR5cGUuc3RhcnRzV2l0aCgiaW1hZ2UvIiksZj1ULnR5cGUuc3RhcnRzV2l0aCgidmlkZW8vIik7aWYoIXImJiFmKXtkKGBVbnN1cHBvcnRlZCBmaWxlIHR5cGU6ICR7VC50eXBlfHxULm5hbWV9YCk7cmV0dXJufXooITApLGQobnVsbCk7dHJ5e2xldCBCMT1VMChUKSx6MT1hd2FpdCBUOChULCJzZXJ2ZS1zaW0tY2Ftc3JjIixCMSxaMSk7RyhULm5hbWUpLHEoZj8idmlkZW8iOiJpbWFnZSIpLFooejEpLGkoYExvYWRlZCAke1QubmFtZX1gKX1jYXRjaChCMSl7ZChCMT8ubWVzc2FnZT8/IlVwbG9hZCBmYWlsZWQiKX1maW5hbGx5e3ooITEpfX0sW10pLEQxPVAoYXN5bmMoVCk9PntULnByZXZlbnREZWZhdWx0KCksVC5zdG9wUHJvcGFnYXRpb24oKSxrLmN1cnJlbnQ9MCxMKCExKTtsZXQgcj1ULmRhdGFUcmFuc2Zlcj8uZmlsZXM/LlswXTtpZihyKWF3YWl0IGUocil9LFtlXSksRzE9UCgoKT0+e3EoInBsYWNlaG9sZGVyIiksWigiIiksRyhudWxsKSxkKG51bGwpfSxbXSksRTE9UCgoKT0+e0guY3VycmVudD8uY2xpY2soKX0sW10pLEkxPVAoYXN5bmMoVCk9PntsZXQgcj1ULnRhcmdldCxmPXIuZmlsZXM/LlswXTtpZihyLnZhbHVlPSIiLGYpYXdhaXQgZShmKX0sW2VdKTtXKCgpPT57aWYoIUIpcmV0dXJuO2xldCBUPShyKT0+e2lmKHIudGFyZ2V0Py5jbG9zZXN0KCJbZGF0YS1jYW1lcmEtc291cmNlLW1lbnVdIikpcmV0dXJuO18oITEpfTtyZXR1cm4gd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsVCksKCk9PndpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZWRvd24iLFQpfSxbQl0pO2xldCBGMT0ib24iLHcxPWg9PT0iYXV0byI/RjE6aCxMMT1oIT09ImF1dG8iLFYxPVAoKCk9PntSKChUKT0+e2lmKFQ9PT0iYXV0byIpcmV0dXJuIEYxPT09Im9uIj8ib2ZmIjoib24iO3JldHVybiBUPT09Im9uIj8ib2ZmIjoib24ifSl9LFtdKSxwMT1QKCgpPT5SKCJhdXRvIiksW10pLGYxPVAoKFQpPT57aWYoVC5wcmV2ZW50RGVmYXVsdCgpLGsuY3VycmVudCsrLGsuY3VycmVudD09PTEpTCghMCl9LFtdKSxTMT1QKChUKT0+e2lmKFQucHJldmVudERlZmF1bHQoKSxULmRhdGFUcmFuc2ZlcilULmRhdGFUcmFuc2Zlci5kcm9wRWZmZWN0PSJjb3B5In0sW10pLGcxPVAoKFQpPT57aWYoVC5wcmV2ZW50RGVmYXVsdCgpLGsuY3VycmVudC0tLGsuY3VycmVudDw9MClrLmN1cnJlbnQ9MCxMKCExKX0sW10pLCQwPSEhSyYmSjEuaGFzKEspLHkxPSFTP3tsYWJlbDphPT09ImluamVjdCI/IlN0YXJ0aW5n4oCmIjoiUGxheSIsb25DbGljazpJLGtpbmQ6InBsYXkifTohJDAmJks/e2xhYmVsOmE9PT0iaW5qZWN0Ij8iSW5qZWN0aW5n4oCmIjpgSW5qZWN0ICR7S31gLG9uQ2xpY2s6SSxraW5kOiJhdHRhY2gifTp7bGFiZWw6YT09PSJzdG9wIj8iU3RvcHBpbmfigKYiOiJTdG9wIixvbkNsaWNrOnMsa2luZDoic3RvcCJ9LGgxPSFLfHxhIT09bnVsbHx8RDtyZXR1cm4gWCgiZGl2Iix7Y2xhc3NOYW1lOiJiZy1wYW5lbCBib3JkZXIgYm9yZGVyLXdoaXRlLzggcm91bmRlZC1bMTBweF0gZmxleCBmbGV4LWNvbCBnYXAtMi41IHB4LTMgcHktMiIsY2hpbGRyZW46W1goImJ1dHRvbiIse3R5cGU6ImJ1dHRvbiIsb25DbGljazooKT0+SigoVCk9PiFUKSxjbGFzc05hbWU6ImxlbS10b2dnbGUgZ3JpZCBbZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOmF1dG9fMWZyX2F1dG9dIGl0ZW1zLWNlbnRlciBnYXAtMiBiZy10cmFuc3BhcmVudCBib3JkZXItbm9uZSB0ZXh0LXdoaXRlLzkwIHB5LTIuNSBweC0xIC1teS0yIC1teC0xIGN1cnNvci1wb2ludGVyIHctW2NhbGMoMTAwJSs4cHgpXSB0ZXh0LWxlZnQgbWluLWgtWzM2cHhdIGxlYWRpbmctbm9uZSIsImFyaWEtZXhwYW5kZWQiOiQsY2hpbGRyZW46W1goInNwYW4iLHtjbGFzc05hbWU6InRleHQtWzExcHhdIGZvbnQtc2VtaWJvbGQgdGV4dC13aGl0ZS81MCB1cHBlcmNhc2UgdHJhY2tpbmctWzAuMDhlbV0gbGVhZGluZy1ub25lIGlubGluZS1mbGV4IGl0ZW1zLWNlbnRlciIsY2hpbGRyZW46IkNhbWVyYSJ9KSxYKCJzcGFuIix7Y2xhc3NOYW1lOiJ0ZXh0LVsxMXB4XSB0ZXh0LXdoaXRlLzU1IGZvbnQtbW9ubyBpbmxpbmUtZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTEuNSBqdXN0aWZ5LXNlbGYtZW5kIGxlYWRpbmctbm9uZSIsY2hpbGRyZW46W1MmJlgoInNwYW4iLHtjbGFzc05hbWU6InNpemUtMS41IHJvdW5kZWQtZnVsbCBiZy1zdWNjZXNzLWVtZXJhbGQgW2JveC1zaGFkb3c6MF8wXzZweF9yZ2JhKDc0LDIyMiwxMjgsMC43KV0ifSksUz8iQWN0aXZlIjpOIT09InBsYWNlaG9sZGVyIj8iUmVhZHkiOiIiXX0pLFgoajEse29wZW46JH0pXX0pLCQmJlgoImRpdiIse29uRHJhZ0VudGVyOmYxLG9uRHJhZ092ZXI6UzEsb25EcmFnTGVhdmU6ZzEsb25Ecm9wOkQxLGNsYXNzTmFtZToiZmxleCBmbGV4LWNvbCBnYXAtMi41IixjaGlsZHJlbjpbWCgicCIse2NsYXNzTmFtZToibS0wIHRleHQtWzEwcHhdIGxlYWRpbmctWzEuNV0gdGV4dC13aGl0ZS80NSIsY2hpbGRyZW46IlJlcGxhY2VzIHRoZSBzaW11bGF0b3IncyBjYW1lcmEgZmVlZCBieSBpbmplY3RpbmcgYSBkeWxpYiBhdCBhcHAgbGF1bmNoIGFuZCBzdHJlYW1pbmcgZnJhbWVzIGludG8gc2hhcmVkIG1lbW9yeS4gUGljayBtZWRpYSBvciBhIHdlYmNhbSwgdGhlbiBQbGF5IHRvIGluamVjdCBpbnRvIHRoZSBmb3JlZ3JvdW5kIGFwcC4ifSksWCgiaW5wdXQiLHtyZWY6SCx0eXBlOiJmaWxlIixhY2NlcHQ6ImltYWdlLyosdmlkZW8vKiIsY2xhc3NOYW1lOiJoaWRkZW4iLG9uQ2hhbmdlOkkxfSksKCgpPT57bGV0IFQ9Tj09PSJwbGFjZWhvbGRlciIscj1OPT09IndlYmNhbSIsZj0oTj09PSJpbWFnZSJ8fE49PT0idmlkZW8iKSYmISFZLEIxPXI/Ty5maW5kKCh6MSk9PnoxLmlkPT09eCk/Lm5hbWU/P3g/PyJXZWJjYW0iOm51bGw7cmV0dXJuIFgoImRpdiIse29uQ2xpY2s6KHoxKT0+e2lmKCFUKXJldHVybjtpZih6MS50YXJnZXQuY2xvc2VzdCgiW2RhdGEtY2xlYXItbWVkaWFdIikpcmV0dXJuO0UxKCl9LHRpdGxlOlQ/IkNsaWNrIHRvIHNlbGVjdCBhbiBpbWFnZSBvciB2aWRlbywgb3IgZHJvcCBvbmUgaGVyZSI6cj9gU291cmNlOiAke0IxfWA6YFNvdXJjZTogJHtZPz9OfWAsY2xhc3NOYW1lOlsicmVsYXRpdmUgbWluLWgtWzQ0cHhdIGZsZXggZmxleC1yb3cgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGdhcC0yLjUgcHgtMy41IHB5LTIuNSByb3VuZGVkLVs3cHhdIHRleHQtY2VudGVyIHRyYW5zaXRpb24tW2JvcmRlci1jb2xvcixiYWNrZ3JvdW5kXSBkdXJhdGlvbi0xNTAiLFQ/ImJnLXdoaXRlL1swLjA0XSBib3JkZXIgYm9yZGVyLWRhc2hlZCBib3JkZXItd2hpdGUvMTIiOiJiZy13aGl0ZS9bMC4wNF0gYm9yZGVyIGJvcmRlci13aGl0ZS84IixWPyIhYmctW3JnYmEoMTAsMTMyLDI1NSwwLjA4KV0gIWJvcmRlci1bcmdiYSgxMCwxMzIsMjU1LDAuNildIjoiIixEPyJjdXJzb3ItcHJvZ3Jlc3MiOlQ/ImN1cnNvci1wb2ludGVyIjoiY3Vyc29yLWRlZmF1bHQiXS5qb2luKCIgIiksY2hpbGRyZW46W0Q/WCgic3BhbiIse2NsYXNzTmFtZToidGV4dC1bMTFweF0gdGV4dC13aGl0ZS81NSIsY2hpbGRyZW46IlVwbG9hZGluZ+KApiJ9KTpmP1goTjEse2NoaWxkcmVuOltYKCJkaXYiLHtjbGFzc05hbWU6InNocmluay0wIHRleHQtWzlweF0gdHJhY2tpbmctWzAuMWVtXSB1cHBlcmNhc2UgdGV4dC13aGl0ZS81NSBiZy13aGl0ZS9bMC4wNl0gYm9yZGVyIGJvcmRlci13aGl0ZS84IHB4LVs3cHhdIHB5LVsycHhdIHJvdW5kZWQtZnVsbCIsY2hpbGRyZW46Tj09PSJ2aWRlbyI/IlZpZGVvIjoiSW1hZ2UifSksWCgic3BhbiIse2NsYXNzTmFtZToiZmxleC0xIG1pbi13LTAgdHJ1bmNhdGUgdGV4dC1bMTJweF0gdGV4dC13aGl0ZS85MCBmb250LW1vbm8iLGNoaWxkcmVuOll9KV19KTpyP1goTjEse2NoaWxkcmVuOltYKCJkaXYiLHtjbGFzc05hbWU6InNocmluay0wIHRleHQtWzlweF0gdHJhY2tpbmctWzAuMWVtXSB1cHBlcmNhc2UgdGV4dC13aGl0ZS81NSBiZy13aGl0ZS9bMC4wNl0gYm9yZGVyIGJvcmRlci13aGl0ZS84IHB4LVs3cHhdIHB5LVsycHhdIHJvdW5kZWQtZnVsbCIsY2hpbGRyZW46IldlYmNhbSJ9KSxYKCJzcGFuIix7Y2xhc3NOYW1lOiJmbGV4LTEgbWluLXctMCB0cnVuY2F0ZSB0ZXh0LVsxMnB4XSB0ZXh0LXdoaXRlLzkwIGZvbnQtbW9ubyIsY2hpbGRyZW46QjF9KV19KTpYKCJzcGFuIix7Y2xhc3NOYW1lOiJ0ZXh0LVsxMnB4XSB0ZXh0LXdoaXRlLzg1IGZvbnQtbWVkaXVtIixjaGlsZHJlbjoiU2VsZWN0IG9yIGRyb3AgbWVkaWEifSksIVQmJiFEJiZYKCJidXR0b24iLHsiZGF0YS1jbGVhci1tZWRpYSI6ITAsb25DbGljazooejEpPT57ejEuc3RvcFByb3BhZ2F0aW9uKCksRzEoKX0sY2xhc3NOYW1lOiJzaHJpbmstMCB3LTUgaC01IGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGJnLXRyYW5zcGFyZW50IGJvcmRlci1ub25lIHRleHQtd2hpdGUvNTUgaG92ZXI6dGV4dC13aGl0ZS85MCBjdXJzb3ItcG9pbnRlciBwLTAiLCJhcmlhLWxhYmVsIjoiQ2xlYXIgc291cmNlIix0aXRsZToiQ2xlYXIg4oaSIHBsYWNlaG9sZGVyIixjaGlsZHJlbjpYKCJzdmciLHt3aWR0aDoiMTQiLGhlaWdodDoiMTQiLHZpZXdCb3g6IjAgMCAyNCAyNCIsZmlsbDoibm9uZSIsc3Ryb2tlOiJjdXJyZW50Q29sb3IiLHN0cm9rZVdpZHRoOiIyIixzdHJva2VMaW5lY2FwOiJyb3VuZCIsc3Ryb2tlTGluZWpvaW46InJvdW5kIixjaGlsZHJlbjpbWCgibGluZSIse3gxOiIxOCIseTE6IjYiLHgyOiI2Iix5MjoiMTgifSksWCgibGluZSIse3gxOiI2Iix5MToiNiIseDI6IjE4Iix5MjoiMTgifSldfSl9KV19KX0pKCksWCgiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGl0ZW1zLXN0cmV0Y2ggZ2FwLTEuNSIsY2hpbGRyZW46W1goImRpdiIse2NsYXNzTmFtZToicmVsYXRpdmUiLCJkYXRhLWNhbWVyYS1zb3VyY2UtbWVudSI6ITAsY2hpbGRyZW46W1goImJ1dHRvbiIse29uQ2xpY2s6KCk9Pl8oKFQpPT4hVCksY2xhc3NOYW1lOiJsZW0tZ2hvc3QgaC1mdWxsIG1pbi1oLVszNnB4XSB3LTEwIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGJnLXRyYW5zcGFyZW50IGJvcmRlciBib3JkZXItd2hpdGUvMTIgdGV4dC13aGl0ZS84NSByb3VuZGVkLVs3cHhdIGN1cnNvci1wb2ludGVyIHAtMCIsImFyaWEtaGFzcG9wdXAiOiJtZW51IiwiYXJpYS1leHBhbmRlZCI6Qix0aXRsZTpOPT09IndlYmNhbSI/YFNvdXJjZTogd2ViY2FtJHt4P2AgKCR7Ty5maW5kKChUKT0+VC5pZD09PXgpPy5uYW1lPz94fSlgOiIifSDigJQgY2xpY2sgdG8gY2hhbmdlYDpgU291cmNlOiAke059IOKAlCBjbGljayB0byBwaWNrIG1lZGlhIG9yIHdlYmNhbWAsImFyaWEtbGFiZWwiOiJDaG9vc2UgY2FtZXJhIHNvdXJjZSIsY2hpbGRyZW46WCgic3ZnIix7d2lkdGg6IjIwIixoZWlnaHQ6IjIwIix2aWV3Qm94OiIwIDAgMjQgMjQiLGZpbGw6Im5vbmUiLHN0cm9rZToiY3VycmVudENvbG9yIixzdHJva2VXaWR0aDoiMiIsc3Ryb2tlTGluZWNhcDoicm91bmQiLHN0cm9rZUxpbmVqb2luOiJyb3VuZCIsY2hpbGRyZW46W1goInBhdGgiLHtkOiJtMjIgMTEtMS4yOTYtMS4yOTZhMi40IDIuNCAwIDAgMC0zLjQwOCAwTDExIDE2In0pLFgoInBhdGgiLHtkOiJNNCA4YTIgMiAwIDAgMC0yIDJ2MTBhMiAyIDAgMCAwIDIgMmgxMGEyIDIgMCAwIDAgMi0yIn0pLFgoImNpcmNsZSIse2N4OiIxMyIsY3k6IjciLHI6IjEiLGZpbGw6ImN1cnJlbnRDb2xvciJ9KSxYKCJyZWN0Iix7eDoiOCIseToiMiIsd2lkdGg6IjE0IixoZWlnaHQ6IjE0IixyeDoiMiJ9KV19KX0pLEImJlgoImRpdiIse3JvbGU6Im1lbnUiLGNsYXNzTmFtZToiYWJzb2x1dGUgdG9wLVtjYWxjKDEwMCUrNnB4KV0gbGVmdC0wIHotMTAgbWluLXctWzIwMHB4XSBmbGV4IGZsZXgtY29sIGdhcC1weCBwLTEgYmctcGFuZWwgYm9yZGVyIGJvcmRlci13aGl0ZS84IHJvdW5kZWQtWzdweF0gc2hhZG93LVswXzhweF8yNHB4X3JnYmEoMCwwLDAsMC40KV0iLGNoaWxkcmVuOltYKCJidXR0b24iLHtyb2xlOiJtZW51aXRlbSIsY2xhc3NOYW1lOiJ0ZXh0LWxlZnQgYmctdHJhbnNwYXJlbnQgYm9yZGVyLW5vbmUgdGV4dC13aGl0ZS84NSB0ZXh0LVsxMnB4XSBweC0yLjUgcHktWzdweF0gcm91bmRlZC1tZCBjdXJzb3ItcG9pbnRlciBob3ZlcjpiZy13aGl0ZS9bMC4wNl0iLG9uQ2xpY2s6KCk9PntfKCExKSxFMSgpfSx0aXRsZToiUGljayBhbiBpbWFnZSBvciB2aWRlbyBmcm9tIGRpc2siLGNoaWxkcmVuOiJCcm93c2UgbWVkaWHigKYifSksWCgiZGl2Iix7Y2xhc3NOYW1lOiJoLXB4IGJnLXdoaXRlLzggbXktMSJ9KSxYKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiBwbC0yLjUgcHItMiBwdC0xIHBiLVsycHhdIixjaGlsZHJlbjpbWCgic3BhbiIse2NsYXNzTmFtZToidGV4dC1bMTBweF0gdGV4dC13aGl0ZS80NSB1cHBlcmNhc2UgdHJhY2tpbmctWzAuMDhlbV0iLGNoaWxkcmVuOnk/IkNhbWVyYXMgKGxvYWRpbmfigKYpIjpPLmxlbmd0aD09PTA/Ik5vIGNhbWVyYXMiOiJDYW1lcmFzIn0pLFgoImJ1dHRvbiIse29uQ2xpY2s6KFQpPT57VC5zdG9wUHJvcGFnYXRpb24oKSwkMSgpfSxkaXNhYmxlZDp5LGNsYXNzTmFtZToiZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgdy1bMjJweF0gaC1bMjJweF0gYmctdHJhbnNwYXJlbnQgYm9yZGVyLW5vbmUgcm91bmRlZC1bNXB4XSB0ZXh0LXdoaXRlLzU1IGhvdmVyOnRleHQtd2hpdGUvOTAgY3Vyc29yLXBvaW50ZXIgcC0wIGRpc2FibGVkOm9wYWNpdHktNTAiLCJhcmlhLWxhYmVsIjoiUmVmcmVzaCBjYW1lcmFzIix0aXRsZToiUmVmcmVzaCBjYW1lcmFzIixjaGlsZHJlbjpYKHQxLHtzaXplOjEzLHN0cm9rZVdpZHRoOjJ9KX0pXX0pLE8ubWFwKChUKT0+e2xldCByPU49PT0id2ViY2FtIiYmeD09PVQuaWQ7cmV0dXJuIFgoImJ1dHRvbiIse3JvbGU6Im1lbnVpdGVtIixjbGFzc05hbWU6WyJ0ZXh0LWxlZnQgYmctdHJhbnNwYXJlbnQgYm9yZGVyLW5vbmUgdGV4dC1bMTJweF0gcHgtMi41IHB5LVs3cHhdIHJvdW5kZWQtbWQgY3Vyc29yLXBvaW50ZXIgaG92ZXI6Ymctd2hpdGUvWzAuMDZdIixyPyIhYmctd2hpdGUvWzAuMTJdICF0ZXh0LXdoaXRlIjoidGV4dC13aGl0ZS84NSJdLmpvaW4oIiAiKSxvbkNsaWNrOigpPT57ZyhULmlkKSxxKCJ3ZWJjYW0iKSxfKCExKX0sdGl0bGU6VC5uYW1lLGNoaWxkcmVuOlQubmFtZX0sVC5pZCl9KV19KV19KSxYKCJidXR0b24iLHtvbkNsaWNrOnkxLm9uQ2xpY2ssZGlzYWJsZWQ6aDEsY2xhc3NOYW1lOlsiZmxleC0xIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGdhcC0xLjUgcHktMiBweC0yLjUgYm9yZGVyLW5vbmUgcm91bmRlZC1bN3B4XSB0ZXh0LVsxMnB4XSBmb250LXNlbWlib2xkIGN1cnNvci1wb2ludGVyIGRpc2FibGVkOm9wYWNpdHktNTAgbWluLWgtWzM2cHhdIix5MS5raW5kPT09InN0b3AiPyJsZW0tcHJpbWFyeSBsZW0tcHJpbWFyeS1vbiBiZy13aGl0ZS9bMC4xNl0gdGV4dC13aGl0ZSI6ImxlbS1wcmltYXJ5IGJnLXN1Y2Nlc3MtZW1lcmFsZCB0ZXh0LVsjMDYyMDE4XSJdLmpvaW4oIiAiKSx0aXRsZTohSz8iQnJpbmcgYW4gYXBwIHRvIHRoZSBmb3JlZ3JvdW5kIGZpcnN0Ijp5MS5raW5kPT09InN0b3AiPyJTdG9wIHRoZSBjYW1lcmEgaGVscGVyIjp5MS5raW5kPT09ImF0dGFjaCI/YEluamVjdCAke0t9IHNvIGl0IGpvaW5zIHRoZSBjYW1lcmEgZmVlZGA6IlN0YXJ0OiBpbmplY3QgdGhlIGR5bGliIGFuZCBsYXVuY2ggdGhlIGZvcmVncm91bmQgYXBwIHdpdGggdGhlIGNob3NlbiBzb3VyY2UiLCJhcmlhLXByZXNzZWQiOnkxLmtpbmQ9PT0ic3RvcCIsImFyaWEtbGFiZWwiOnkxLmtpbmQ9PT0ic3RvcCI/IlN0b3AiOiJQbGF5IixjaGlsZHJlbjpbeTEua2luZD09PSJzdG9wIj9YKFAwLHt9KTpYKHcwLHt9KSxYKCJzcGFuIix7Y2hpbGRyZW46eTEua2luZD09PSJzdG9wIj8iU3RvcCI6eTEua2luZD09PSJhdHRhY2giPyJJbmplY3QiOiJQbGF5In0pXX0pLFgoImRpdiIse2NsYXNzTmFtZToicmVsYXRpdmUiLGNoaWxkcmVuOltYKCJidXR0b24iLHtvbkNsaWNrOlYxLGNsYXNzTmFtZToibGVtLWdob3N0IGgtZnVsbCBtaW4taC1bMzZweF0gdy0xMCBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBiZy10cmFuc3BhcmVudCBib3JkZXIgYm9yZGVyLXdoaXRlLzEyIHRleHQtd2hpdGUvODUgcm91bmRlZC1bN3B4XSBjdXJzb3ItcG9pbnRlciBwLTAiLHRpdGxlOkwxP2BNaXJyb3I6ICR7dzF9IChtYW51YWwpIOKAlCBjbGljayB0byBmbGlwYDpgTWlycm9yOiBhdXRvICgke3cxfSkg4oCUIGNsaWNrIHRvIG92ZXJyaWRlYCwiYXJpYS1sYWJlbCI6YE1pcnJvcjogJHt3MX0ke0wxPyIgKG1hbnVhbCkiOiIgKGF1dG8pIn1gLGNoaWxkcmVuOlgoInN2ZyIse3dpZHRoOiIyMCIsaGVpZ2h0OiIyMCIsdmlld0JveDoiMCAwIDI0IDI0IixmaWxsOncxPT09Im9uIj8iY3VycmVudENvbG9yIjoibm9uZSIsc3Ryb2tlOiJjdXJyZW50Q29sb3IiLHN0cm9rZVdpZHRoOiIyIixzdHJva2VMaW5lY2FwOiJyb3VuZCIsc3Ryb2tlTGluZWpvaW46InJvdW5kIixjaGlsZHJlbjpbWCgicGF0aCIse2Q6Im0zIDcgNSA1LTUgNVY3In0pLFgoInBhdGgiLHtkOiJtMjEgNy01IDUgNSA1VjcifSksWCgicGF0aCIse2Q6Ik0xMiAyMHYyIixzdHJva2U6ImN1cnJlbnRDb2xvciIsZmlsbDoibm9uZSJ9KSxYKCJwYXRoIix7ZDoiTTEyIDE0djIiLHN0cm9rZToiY3VycmVudENvbG9yIixmaWxsOiJub25lIn0pLFgoInBhdGgiLHtkOiJNMTIgOHYyIixzdHJva2U6ImN1cnJlbnRDb2xvciIsZmlsbDoibm9uZSJ9KSxYKCJwYXRoIix7ZDoiTTEyIDJ2MiIsc3Ryb2tlOiJjdXJyZW50Q29sb3IiLGZpbGw6Im5vbmUifSldfSl9KSxMMSYmWCgiYnV0dG9uIix7b25DbGljazpwMSxjbGFzc05hbWU6ImFic29sdXRlIC10b3AtWzVweF0gLXJpZ2h0LVs1cHhdIHctNCBoLTQgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgYmctd2hpdGUvMjAgYm9yZGVyIGJvcmRlci1wYW5lbCB0ZXh0LXdoaXRlIHJvdW5kZWQtZnVsbCBjdXJzb3ItcG9pbnRlciBwLTAiLCJhcmlhLWxhYmVsIjoiUmV2ZXJ0IG1pcnJvciB0byBhdXRvIix0aXRsZToiUmV2ZXJ0IHRvIGF1dG8gbWlycm9yIixjaGlsZHJlbjpYKCJzdmciLHt3aWR0aDoiOSIsaGVpZ2h0OiI5Iix2aWV3Qm94OiIwIDAgMjQgMjQiLGZpbGw6Im5vbmUiLHN0cm9rZToiY3VycmVudENvbG9yIixzdHJva2VXaWR0aDoiMyIsc3Ryb2tlTGluZWNhcDoicm91bmQiLHN0cm9rZUxpbmVqb2luOiJyb3VuZCIsY2hpbGRyZW46W1goImxpbmUiLHt4MToiMTgiLHkxOiI2Iix4MjoiNiIseTI6IjE4In0pLFgoImxpbmUiLHt4MToiNiIseTE6IjYiLHgyOiIxOCIseTI6IjE4In0pXX0pfSldfSldfSksWDEmJlgoImRpdiIse2NsYXNzTmFtZToiYmctZGFuZ2VyLzEwIGJvcmRlciBib3JkZXItZGFuZ2VyLzIwIHRleHQtZGFuZ2VyLXNvZnQgdGV4dC1bMTFweF0gcHgtMiBweS0xLjUgcm91bmRlZC1tZCBicmVhay13b3JkcyIsY2hpbGRyZW46WDF9KV19KV19KX1mdW5jdGlvbiBQOCh7b3BlbjpDLG9uQ2xvc2U6Syx1ZGlkOiQsY3VycmVudEFwcDpKLGF4T3ZlcmxheUVuYWJsZWQ6TixvblRvZ2dsZUF4T3ZlcmxheTpxLHdpZHRoOlF9KXtyZXR1cm4gWChCMCx7b3BlbjpDLHdpZHRoOlEsY2hpbGRyZW46W1goXzAse2NoaWxkcmVuOltYKE4yLHtjaGlsZHJlbjoiVG9vbHMifSksWChrMCx7b25DbGljazpLfSldfSksQyYmWCgiZGl2Iix7Y2xhc3NOYW1lOiJwLTMuNSBvdmVyZmxvdy15LWF1dG8gZmxleC0xIGZsZXggZmxleC1jb2wgZ2FwLTMiLGNoaWxkcmVuOltYKEg4LHt1ZGlkOiQsY3VycmVudEFwcDpKfSksWChBOCx7b3ZlcmxheUVuYWJsZWQ6TixvblRvZ2dsZU92ZXJsYXk6cX0pLFgodzgse3VkaWQ6JCxidW5kbGVJZDpKPy5idW5kbGVJZD8/bnVsbH0pLFgoazgse3VkaWQ6JCxleGVjOloxfSksWChVOCx7dWRpZDokLGJ1bmRsZUlkOko/LmJ1bmRsZUlkPz9udWxsfSldfSldfSl9ZnVuY3Rpb24gRTAoQyxLKXtmZXRjaCh2MSgiZGV2dG9vbHMvaGlnaGxpZ2h0Iikse21ldGhvZDoiUE9TVCIsaGVhZGVyczp7IkNvbnRlbnQtVHlwZSI6ImFwcGxpY2F0aW9uL2pzb24ifSxib2R5OkpTT04uc3RyaW5naWZ5KHt0YXJnZXRJZDpDLG9uOkt9KSxrZWVwYWxpdmU6ITB9KS5jYXRjaCgoKT0+e30pfWZ1bmN0aW9uIFg1KCl7bGV0IEM9djEoImRldnRvb2xzL3JlbGVhc2UiKTt0cnl7aWYodHlwZW9mIG5hdmlnYXRvcjwidSImJm5hdmlnYXRvci5zZW5kQmVhY29uKXtsZXQgSz1uZXcgQmxvYihbInt9Il0se3R5cGU6ImFwcGxpY2F0aW9uL2pzb24ifSk7aWYobmF2aWdhdG9yLnNlbmRCZWFjb24oQyxLKSlyZXR1cm59fWNhdGNoe31mZXRjaChDLHttZXRob2Q6IlBPU1QiLGhlYWRlcnM6eyJDb250ZW50LVR5cGUiOiJhcHBsaWNhdGlvbi9qc29uIn0sYm9keToie30iLGtlZXBhbGl2ZTohMH0pLmNhdGNoKCgpPT57fSl9ZnVuY3Rpb24geTgoQyl7bGV0IEs9Qy5jb250ZW50RG9jdW1lbnQ7aWYoIUspcmV0dXJuO2xldCAkPSgpPT57bGV0IHE9W0tdO3doaWxlKHEubGVuZ3RoKXtsZXQgUT1xLnBvcCgpLFo9US5xdWVyeVNlbGVjdG9yQWxsKCJbYXJpYS1sYWJlbF0sW3RpdGxlXSIpO2ZvcihsZXQgWSBvZiBaKXtsZXQgRz1ZLmdldEF0dHJpYnV0ZSgiYXJpYS1sYWJlbCIpfHxZLnRpdGxlfHwiIjtpZigvXnRvZ2dsZSBzY3JlZW5jYXN0JC9pLnRlc3QoRykpcmV0dXJuIFl9Zm9yKGxldCBZIG9mIFEucXVlcnlTZWxlY3RvckFsbCgiKiIpKWlmKFkuc2hhZG93Um9vdClxLnB1c2goWS5zaGFkb3dSb290KX1yZXR1cm4gbnVsbH0sSj0wLE49KCk9PntKKys7bGV0IHE9JCgpO2lmKHEmJnEuZ2V0QXR0cmlidXRlKCJhcmlhLXByZXNzZWQiKSE9PSJmYWxzZSIpe3EuY2xpY2soKTtyZXR1cm59aWYoSjwyMClzZXRUaW1lb3V0KE4sMTAwKX07TigpfWZ1bmN0aW9uIFc4KEMpe2xldCBLPVtdLCQ9bmV3IE1hcDtmb3IobGV0IEogb2YgQyl7bGV0IE49Si5hcHBOYW1lfHxKLmJ1bmRsZUlkfHwiVW5rbm93biIscT1KLmJ1bmRsZUlkfHxOLFE9JC5nZXQocSk7aWYoIVEpUT17a2V5OnEsYXBwTmFtZTpOLGJ1bmRsZUlkOkouYnVuZGxlSWQsdGFyZ2V0czpbXX0sJC5zZXQocSxRKSxLLnB1c2gocSk7US50YXJnZXRzLnB1c2goSil9cmV0dXJuIEsubWFwKChKKT0+JC5nZXQoSikpfWZ1bmN0aW9uIEU4KEMsSyl7bGV0WyQsSl09Yih7fSksTj1NMSgoKT0+Sy5zbGljZSgpLnNvcnQoKS5qb2luKCJ8IiksW0tdKTtyZXR1cm4gVygoKT0+e2lmKCFDKXJldHVybjtsZXQgcT0hMTtmb3IobGV0IFEgb2YgSyl7aWYoIVEpY29udGludWU7bGV0IFo9YCR7Q306JHtRfWAsWT1IMC5nZXQoWik7aWYodHlwZW9mIFk9PT0ic3RyaW5nInx8WT09PW51bGwpe0ooKEcpPT5HW1FdPT09WT9HOnsuLi5HLFtRXTpZfSk7Y29udGludWV9RDgoWjEsQyxRKS50aGVuKChHKT0+e2lmKHEpcmV0dXJuO0ooKFYpPT4oey4uLlYsW1FdOkd9KSl9KX1yZXR1cm4oKT0+e3E9ITB9fSxbQyxOXSksJH1mdW5jdGlvbiBJOCh7dWRpZDpDLHRhcmdldHM6SyxzZWxlY3RlZDokLG9uU2VsZWN0VGFyZ2V0Okosb25SZWZyZXNoOk59KXtsZXQgcT1XOChLKSxRPXEubWFwKChCKT0+Qi5idW5kbGVJZCkuZmlsdGVyKChCKT0+ISFCKSxaPUU4KEMsUSksW1ksR109YighMSksW1YsTF09YihudWxsKSxrPXYobnVsbCksRD12KG51bGwpO1coKCk9PntpZighWSlyZXR1cm47bGV0IEI9KF8pPT57aWYoIUQuY3VycmVudClyZXR1cm47aWYoIUQuY3VycmVudC5jb250YWlucyhfLnRhcmdldCkpRyghMSl9O3JldHVybiBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZWRvd24iLEIpLCgpPT5kb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZWRvd24iLEIpfSxbWV0pLFcoKCk9PntpZihZKXJldHVybjtpZihrLmN1cnJlbnQpRTAoay5jdXJyZW50LCExKSxrLmN1cnJlbnQ9bnVsbDtYNSgpfSxbWV0pLFcoKCk9PntsZXQgQj0oKT0+WDUoKTtyZXR1cm4gd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInBhZ2VoaWRlIixCKSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigiYmVmb3JldW5sb2FkIixCKSwoKT0+e3dpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJwYWdlaGlkZSIsQiksd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoImJlZm9yZXVubG9hZCIsQil9fSxbXSk7bGV0IHo9JD8oJC50aXRsZXx8JC51cmx8fCQuYXBwTmFtZXx8IlVudGl0bGVkIikuc2xpY2UoMCw5MCk6IlNlbGVjdCB0YXJnZXQiO3JldHVybiBYKCJkaXYiLHtyZWY6RCxjbGFzc05hbWU6InJlbGF0aXZlIHctZnVsbCBtaW4tdy0wIixjaGlsZHJlbjpbWCgiYnV0dG9uIix7dHlwZToiYnV0dG9uIixvbkNsaWNrOigpPT57RygoQik9PntpZighQilOKCk7cmV0dXJuIUJ9KX0sY2xhc3NOYW1lOiJ3LWZ1bGwgbWluLXctMCBoLVsyNnB4XSBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gZ2FwLTIgYmctcGFuZWwgdGV4dC13aGl0ZS85MCBib3JkZXIgYm9yZGVyLXdoaXRlLzEyIHJvdW5kZWQtbWQgdGV4dC1bMTJweF0gcHgtMiBjdXJzb3ItcG9pbnRlciB0ZXh0LWxlZnQiLCJhcmlhLWhhc3BvcHVwIjoibGlzdGJveCIsImFyaWEtZXhwYW5kZWQiOlksImFyaWEtbGFiZWwiOiJXZWJLaXQgdGFyZ2V0IixjaGlsZHJlbjpbWCgic3BhbiIse2NsYXNzTmFtZToib3ZlcmZsb3ctaGlkZGVuIHRleHQtZWxsaXBzaXMgd2hpdGVzcGFjZS1ub3dyYXAgbWluLXctMCIsY2hpbGRyZW46en0pLFgoInN2ZyIse3dpZHRoOiIxMiIsaGVpZ2h0OiIxMiIsdmlld0JveDoiMCAwIDI0IDI0IixmaWxsOiJub25lIixzdHJva2U6ImN1cnJlbnRDb2xvciIsc3Ryb2tlV2lkdGg6IjIiLHN0cm9rZUxpbmVjYXA6InJvdW5kIixzdHJva2VMaW5lam9pbjoicm91bmQiLGNoaWxkcmVuOlgoInBvbHlsaW5lIix7cG9pbnRzOiI2IDkgMTIgMTUgMTggOSJ9KX0pXX0pLFkmJlgoInVsIix7cm9sZToibGlzdGJveCIsY2xhc3NOYW1lOiJhYnNvbHV0ZSB0b3AtW2NhbGMoMTAwJSs0cHgpXSBsZWZ0LTAgbS0wIHAtMSBsaXN0LW5vbmUgYmctcGFuZWwgYm9yZGVyIGJvcmRlci13aGl0ZS8xMiByb3VuZGVkLWxnIHNoYWRvdy1bMF84cHhfMjRweF9yZ2JhKDAsMCwwLDAuNSldIG1pbi13LVsyMjBweF0gbWF4LXctWzM2MHB4XSBtYXgtaC1bMzIwcHhdIG92ZXJmbG93LXktYXV0byB6LTUwIixjaGlsZHJlbjpxLm1hcCgoQik9PntsZXQgXz1CLmJ1bmRsZUlkP1pbQi5idW5kbGVJZF06bnVsbDtyZXR1cm4gWCgibGkiLHtjbGFzc05hbWU6Imxpc3Qtbm9uZSBtLTAgcC0wIixjaGlsZHJlbjpbWCgiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMiBweC0xLjUgcHQtMSBwYi0wLjUgdGV4dC1bMTJweF0gZm9udC1zZW1pYm9sZCB0ZXh0LXdoaXRlL1swLjkyXSIsY2hpbGRyZW46W18/WCgiaW1nIix7c3JjOl8sYWx0OiIiLGNsYXNzTmFtZToidy00IGgtNCByb3VuZGVkLVszcHhdIHNocmluay0wIG9iamVjdC1jb3ZlciJ9KTpYKCJzcGFuIix7Y2xhc3NOYW1lOiJ3LTQgaC00IHJvdW5kZWQtWzNweF0gc2hyaW5rLTAgb2JqZWN0LWNvdmVyIiwiYXJpYS1oaWRkZW4iOiJ0cnVlIn0pLFgoInNwYW4iLHtjbGFzc05hbWU6Im92ZXJmbG93LWhpZGRlbiB0ZXh0LWVsbGlwc2lzIHdoaXRlc3BhY2Utbm93cmFwIixjaGlsZHJlbjpCLmFwcE5hbWV9KV19KSxYKCJ1bCIse3JvbGU6Imdyb3VwIixjbGFzc05hbWU6Imxpc3Qtbm9uZSBtLTAgcC0wIHBsLVsyNnB4XSIsY2hpbGRyZW46Qi50YXJnZXRzLm1hcCgoSCk9PntsZXQgTz0kPy5pZD09PUguaWQsRT0hIUguaW5Vc2VCeU90aGVySW5zcGVjdG9yJiYhTyx5PShILnRpdGxlfHxILnVybHx8SC5hcHBOYW1lfHwiVW50aXRsZWQiKS5zbGljZSgwLDkwKSxvPVY9PT1ILmlkJiYhRSx4PSJmbGV4IGZsZXgtY29sIHB4LTIgcHktWzNweF0gcm91bmRlZCB0ZXh0LVsxMnB4XSBsZWFkaW5nLVsxLjM1XSI7cmV0dXJuIFgoImxpIix7cm9sZToib3B0aW9uIiwiYXJpYS1zZWxlY3RlZCI6TywiYXJpYS1kaXNhYmxlZCI6RSx0YWJJbmRleDpFPy0xOjAsdGl0bGU6RT8iQWxyZWFkeSBiZWluZyBpbnNwZWN0ZWQgYnkgYW5vdGhlciBkZWJ1Z2dlciI6dm9pZCAwLG9uTW91c2VFbnRlcjooKT0+e2lmKEUpcmV0dXJuO2lmKGsuY3VycmVudCYmay5jdXJyZW50IT09SC5pZClFMChrLmN1cnJlbnQsITEpO2suY3VycmVudD1ILmlkLEwoSC5pZCksRTAoSC5pZCwhMCl9LG9uTW91c2VMZWF2ZTooKT0+e2lmKGsuY3VycmVudD09PUguaWQpRTAoSC5pZCwhMSksay5jdXJyZW50PW51bGw7TCgoaCk9Pmg9PT1ILmlkP251bGw6aCl9LG9uQ2xpY2s6KCk9PntpZihFKXJldHVybjtKKEguaWQpLEcoITEpfSxjbGFzc05hbWU6YGZsZXggZmxleC1jb2wgcHgtMiBweS1bM3B4XSByb3VuZGVkIHRleHQtWzEycHhdIGxlYWRpbmctWzEuMzVdICR7RT8ib3BhY2l0eS00MCBjdXJzb3Itbm90LWFsbG93ZWQgaXRhbGljIHRleHQtd2hpdGUvODUiOm8/ImJnLVtyZ2JhKDEwLDEzMiwyNTUsMC4yMildIHRleHQtd2hpdGUvODUgY3Vyc29yLXBvaW50ZXIiOk8/ImJnLXdoaXRlL1swLjA2XSB0ZXh0LXdoaXRlLzg1IGN1cnNvci1wb2ludGVyIjoidGV4dC13aGl0ZS84NSBjdXJzb3ItcG9pbnRlciJ9YCxjaGlsZHJlbjpbWCgic3BhbiIse2NsYXNzTmFtZToiYmxvY2sgb3ZlcmZsb3ctaGlkZGVuIHRleHQtZWxsaXBzaXMgd2hpdGVzcGFjZS1ub3dyYXAiLGNoaWxkcmVuOnl9KSxILnVybCYmSC51cmwhPT0iYWJvdXQ6YmxhbmsiJiZYKCJzcGFuIix7Y2xhc3NOYW1lOiJibG9jayBmb250LW1vbm8gdGV4dC1bMTBweF0gdGV4dC13aGl0ZS9bMC40Ml0gb3ZlcmZsb3ctaGlkZGVuIHRleHQtZWxsaXBzaXMgd2hpdGVzcGFjZS1ub3dyYXAiLGNoaWxkcmVuOkgudXJsfSldfSxILmlkKX0pfSldfSxCLmtleSl9KX0pXX0pfWZ1bmN0aW9uIFM4KHtvcGVuOkMsb25DbG9zZTpLLHVkaWQ6JCx0YXJnZXRzOkosc2VsZWN0ZWRUYXJnZXRJZDpOLG9uU2VsZWN0VGFyZ2V0OnEsbG9hZGluZzpRLGVycm9yOlosb25SZWZyZXNoOlksd2lkdGg6R30pe2xldCBWPU4/Si5maW5kKChMKT0+TC5pZD09PU4pPz9udWxsOm51bGw7cmV0dXJuIFgoQjAse29wZW46Qyx3aWR0aDpHLGNoaWxkcmVuOltYKF8wLHtjaGlsZHJlbjpbSi5sZW5ndGg+MD9YKEk4LHt1ZGlkOiQsdGFyZ2V0czpKLHNlbGVjdGVkOlYsb25TZWxlY3RUYXJnZXQ6cSxvblJlZnJlc2g6WX0pOlgoInNwYW4iLHtjbGFzc05hbWU6InRleHQtWzEycHhdIHRleHQtd2hpdGUvWzAuNDhdIG92ZXJmbG93LWhpZGRlbiB0ZXh0LWVsbGlwc2lzIHdoaXRlc3BhY2Utbm93cmFwIixjaGlsZHJlbjpRPyJMb29raW5nIGZvciBTYWZhcmkgYW5kIGluc3BlY3RhYmxlIHdlYnZpZXdzLi4uIjoiTm8gaW5zcGVjdGFibGUgU2FmYXJpIG9yIFdLV2ViVmlldyB0YXJnZXRzIn0pLFgoazAse29uQ2xpY2s6SyxhcmlhTGFiZWw6IkNsb3NlIFdlYktpdCBEZXZUb29scyIsdGl0bGU6IkNsb3NlIixpY29uU2l6ZToxNX0pXX0pLFgoImRpdiIse2NsYXNzTmFtZToiZmxleC0xIG1pbi1oLTAgYmctd2hpdGUgcmVsYXRpdmUiLGNoaWxkcmVuOlo/WCgiZGl2Iix7Y2xhc3NOYW1lOiJoLWZ1bGwgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgcC02IGJnLXBhbmVsLWRlZXAgdGV4dC13aGl0ZS9bMC41OF0gdGV4dC1jZW50ZXIgdGV4dC1bMTNweF0iLGNoaWxkcmVuOlp9KTpWJiZDP1goImlmcmFtZSIse3NyYzpWLmRldnRvb2xzRnJvbnRlbmRVcmwsdGl0bGU6YFdlYktpdCBEZXZUb29scyAtICR7Vi50aXRsZXx8Vi51cmx8fFYuaWR9YCxjbGFzc05hbWU6InctZnVsbCBoLWZ1bGwgYm9yZGVyLW5vbmUgYmxvY2sgYmctd2hpdGUiLG9uTG9hZDooTCk9Pnk4KEwuY3VycmVudFRhcmdldCl9LFYuaWQpOlgoImRpdiIse2NsYXNzTmFtZToiaC1mdWxsIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHAtNiBiZy1wYW5lbC1kZWVwIHRleHQtd2hpdGUvWzAuNThdIHRleHQtY2VudGVyIHRleHQtWzEzcHhdIixjaGlsZHJlbjpWPyJEZXZUb29scyBwYXVzZWQg4oCUIG9wZW4gdGhlIHBhbmVsIHRvIHJlYXR0YWNoLiI6Ik9wZW4gU2FmYXJpIG9yIGFuIGluc3BlY3RhYmxlIFdLV2ViVmlldyBpbiB0aGUgc2ltdWxhdG9yLiJ9KX0pXX0pfWZ1bmN0aW9uIGg4KHtleGVjOkMsdWRpZDpLLGVuYWJsZWQ6JCxvblVwbG9hZFN0YXJ0Okosb25VcGxvYWRQcm9ncmVzczpOLG9uVXBsb2FkRW5kOnEsb25VbnN1cHBvcnRlZDpRfSl7bGV0W1osWV09YighMSksRz12KDApLFY9UChhc3luYyh6KT0+e2lmKHoucHJldmVudERlZmF1bHQoKSx6LnN0b3BQcm9wYWdhdGlvbigpLEcuY3VycmVudD0wLFkoITEpLCEkfHwhSylyZXR1cm47bGV0IEI9QXJyYXkuZnJvbSh6LmRhdGFUcmFuc2Zlci5maWxlcyk7aWYoQi5sZW5ndGg9PT0wKXJldHVybjtmb3IobGV0IF8gb2YgQil7bGV0IEg9YjgoXyk7aWYoIUgpe1EoXyk7Y29udGludWV9bGV0IE89SihfLm5hbWUsSCk7TTgoXyxILEMsSywoRSk9Pk4oTyxFKSkudGhlbigoKT0+cShPLCEwKSkuY2F0Y2goKEUpPT5xKE8sITEsRSBpbnN0YW5jZW9mIEVycm9yP0UubWVzc2FnZToiVXBsb2FkIGZhaWxlZCIpKX19LFskLEssQyxKLE4scSxRXSksTD1QKCh6KT0+e2lmKHoucHJldmVudERlZmF1bHQoKSwkKXouZGF0YVRyYW5zZmVyLmRyb3BFZmZlY3Q9ImNvcHkifSxbJF0pLGs9UCgoeik9PntpZih6LnByZXZlbnREZWZhdWx0KCksISQpcmV0dXJuO2lmKEcuY3VycmVudCsrLEcuY3VycmVudD09PTEpWSghMCl9LFskXSksRD1QKCh6KT0+e2lmKHoucHJldmVudERlZmF1bHQoKSxHLmN1cnJlbnQtLSxHLmN1cnJlbnQ8PTApRy5jdXJyZW50PTAsWSghMSl9LFtdKTtyZXR1cm57aXNEcmFnT3ZlcjpaLGRyb3Bab25lUHJvcHM6e29uRHJhZ092ZXI6TCxvbkRyYWdFbnRlcjprLG9uRHJhZ0xlYXZlOkQsb25Ecm9wOlZ9fX1mdW5jdGlvbiB4OChDKXtsZXRbSywkXT1iKG51bGwpLEo9dihuZXcgU2V0KSxOPVAoKHEpPT57cmV0dXJuIEouY3VycmVudC5hZGQocSksKCk9PntKLmN1cnJlbnQuZGVsZXRlKHEpfX0sW10pO3JldHVybiBXKCgpPT57aWYoIUMpcmV0dXJuO2xldCBxPW5ldyBBYm9ydENvbnRyb2xsZXIsUT0hMSxaPW51bGwsWT1DLnJlcGxhY2UoL1wvc3RyZWFtXC5tanBlZyQvLCIiKSxHPShfKT0+e2lmKF8ud2lkdGg8PTB8fF8uaGVpZ2h0PD0wKXJldHVybjskKChIKT0+SCYmSC53aWR0aD09PV8ud2lkdGgmJkguaGVpZ2h0PT09Xy5oZWlnaHQmJkgub3JpZW50YXRpb249PT1fLm9yaWVudGF0aW9uP0g6Xyl9LFY9KCk9PntmZXRjaChgJHtZfS9jb25maWdgLHtzaWduYWw6cS5zaWduYWx9KS50aGVuKChfKT0+Xy5qc29uKCkpLnRoZW4oRykuY2F0Y2goKCk9Pnt9KX07VigpO2xldCBMPXNldEludGVydmFsKFYsMTAwMCksaz1uZXcgVVJMKEMpO2suc2VhcmNoUGFyYW1zLnNldCgicmF3IiwiMSIpO2xldCBEPWsudG9TdHJpbmcoKSx6PSgpPT57aWYoUXx8cS5zaWduYWwuYWJvcnRlZHx8WilyZXR1cm47Wj1zZXRUaW1lb3V0KCgpPT57Wj1udWxsLEIoKX0sMTAwMCl9LEI9YXN5bmMoKT0+e3RyeXtsZXQgSD0oYXdhaXQgZmV0Y2goRCx7c2lnbmFsOnEuc2lnbmFsfSkpLmJvZHk/LmdldFJlYWRlcigpO2lmKCFIKXt6KCk7cmV0dXJufWxldCBPPW5ldyBVaW50OEFycmF5KDApO3doaWxlKCEwKXtsZXR7ZG9uZTpFLHZhbHVlOnl9PWF3YWl0IEgucmVhZCgpO2lmKEUpYnJlYWs7bGV0IG89bmV3IFVpbnQ4QXJyYXkoTy5sZW5ndGgreS5sZW5ndGgpO28uc2V0KE8pLG8uc2V0KHksTy5sZW5ndGgpLE89bzt3aGlsZSghMCl7bGV0IHg9LTE7Zm9yKGxldCB1PTA7dTxPLmxlbmd0aC0xO3UrKylpZihPW3VdPT09MjU1JiZPW3UrMV09PT0yMTYpe3g9dTticmVha31pZih4PT09LTEpYnJlYWs7bGV0IGc9LTE7Zm9yKGxldCB1PXgrMjt1PE8ubGVuZ3RoLTE7dSsrKWlmKE9bdV09PT0yNTUmJk9bdSsxXT09PTIxNyl7Zz11KzI7YnJlYWt9aWYoZz09PS0xKWJyZWFrO2xldCBoPU8uc2xpY2UoeCxnKTtPPU8uc2xpY2UoZyk7bGV0IFI9bmV3IEJsb2IoW2hdLHt0eXBlOiJpbWFnZS9qcGVnIn0pLGE9VVJMLmNyZWF0ZU9iamVjdFVSTChSKTtpZihKLmN1cnJlbnQuc2l6ZT09PTApe1VSTC5yZXZva2VPYmplY3RVUkwoYSk7Y29udGludWV9Zm9yKGxldCB1IG9mIEouY3VycmVudCl1KGEpfX19Y2F0Y2h7fWZpbmFsbHl7eigpfX07cmV0dXJuIEIoKSwoKT0+e2lmKFE9ITAsWiljbGVhclRpbWVvdXQoWik7cS5hYm9ydCgpLGNsZWFySW50ZXJ2YWwoTCl9fSxbQ10pLHtzdWJzY3JpYmVGcmFtZTpOLGZyYW1lOm51bGwsY29uZmlnOkt9fWZ1bmN0aW9uIFkyKEMsSywkLEope2xldCBOPVAoKFYpPT5NYXRoLm1heCgkLE1hdGgubWluKEosVikpLFskLEpdKSxbcSxRXT1iKCgpPT57aWYodHlwZW9mIHdpbmRvdz4idSIpcmV0dXJuIEs7bGV0IFY9d2luZG93LmxvY2FsU3RvcmFnZS5nZXRJdGVtKEMpLEw9ViE9bnVsbD9OdW1iZXIoVik6TmFOO3JldHVybiBOdW1iZXIuaXNGaW5pdGUoTCk/TihMKTpLfSksWj10eXBlb2Ygd2luZG93PCJ1Ij9NYXRoLm1pbihKLHdpbmRvdy5pbm5lcldpZHRoLTMyKTpKLFk9TWF0aC5tYXgoJCxNYXRoLm1pbihaLHEpKSxHPVAoKFYpPT57Vi5wcmV2ZW50RGVmYXVsdCgpO2xldCBMPVYuY2xpZW50WCxrPVksRD1WLmN1cnJlbnRUYXJnZXQ7RC5zZXRQb2ludGVyQ2FwdHVyZShWLnBvaW50ZXJJZCk7bGV0IHo9KF8pPT57bGV0IEg9TihrKyhMLV8uY2xpZW50WCkpO1EoSCl9LEI9KF8pPT57RC5yZWxlYXNlUG9pbnRlckNhcHR1cmUoXy5wb2ludGVySWQpLEQucmVtb3ZlRXZlbnRMaXN0ZW5lcigicG9pbnRlcm1vdmUiLHopLEQucmVtb3ZlRXZlbnRMaXN0ZW5lcigicG9pbnRlcnVwIixCKSxELnJlbW92ZUV2ZW50TGlzdGVuZXIoInBvaW50ZXJjYW5jZWwiLEIpO3RyeXt3aW5kb3cubG9jYWxTdG9yYWdlLnNldEl0ZW0oQyxTdHJpbmcoTihrKyhMLV8uY2xpZW50WCkpKSl9Y2F0Y2h7fX07RC5hZGRFdmVudExpc3RlbmVyKCJwb2ludGVybW92ZSIseiksRC5hZGRFdmVudExpc3RlbmVyKCJwb2ludGVydXAiLEIpLEQuYWRkRXZlbnRMaXN0ZW5lcigicG9pbnRlcmNhbmNlbCIsQil9LFtOLFksQ10pO3JldHVybnt3aWR0aDpZLG9uUG9pbnRlckRvd246R319ZnVuY3Rpb24gZzgoe2RlZmF1bHRXaWR0aDpDLHZpZXdwb3J0V2lkdGg6Syx2aWV3cG9ydEhlaWdodDokLGFzcGVjdFJhdGlvOkosb25TdGFydDpOfSl7bGV0IHE9UTIoKSxbUSxaXT1iKCExKSxbWSxHXT1iKCExKSxbVixMXT1iKCExKSxrPXYobnVsbCksRD12KFtdKSx6PXYobnVsbCksQj12KG51bGwpLF89dihudWxsKSxIPXYobnVsbCksTz12KG51bGwpLEU9TTEoKCk9PntpZih0eXBlb2Ygd2luZG93PiJ1IilyZXR1cm4gQzt0cnl7bGV0IEE9d2luZG93LmxvY2FsU3RvcmFnZS5nZXRJdGVtKGEyKSxJPUEhPW51bGw/TnVtYmVyKEEpOk5hTjtyZXR1cm4gTnVtYmVyLmlzRmluaXRlKEkpP0MqSTpDfWNhdGNoe3JldHVybiBDfX0sW0NdKSxbeSxvXT1iKEUpLHg9aTIoQyxLLCQsSiksZz1NYXRoLm1pbihJMyx4KSxoPXk/P0MsUj1EMChoLEMsSywkLEopLGE9UCgoQSk9PntsZXQgST1HMihBKTtILmN1cnJlbnQ9SSxvKEkpfSxbXSksdT1QKChBKT0+e2lmKHR5cGVvZiB3aW5kb3c+InUifHxDPD0wKXJldHVybjtsZXQgST1EMChBLEMsSywkLEopO3RyeXt3aW5kb3cubG9jYWxTdG9yYWdlLnNldEl0ZW0oYTIsU3RyaW5nKEkvQykpfWNhdGNoe319LFtKLEMsJCxLXSksWDE9UCgoQSk9PntpZihfLmN1cnJlbnQhPW51bGwpY2xlYXJUaW1lb3V0KF8uY3VycmVudCk7Xy5jdXJyZW50PXNldFRpbWVvdXQoKCk9PntfLmN1cnJlbnQ9bnVsbCx1KEEpfSxlMyl9LFt1XSk7VygoKT0+e2lmKFF8fFkpcmV0dXJuO2xldCBBPUguY3VycmVudDtpZihBPT1udWxsKXJldHVybjtsZXQgST1EMChBLEMsSywkLEopO2lmKEkhPT1BKWEoSSl9LFtKLEMsWSxRLCQsSyxhXSksVygoKT0+e2EoRSl9LFtFLGFdKSxXKCgpPT57aWYoIVEmJiFZKXJldHVybjtsZXQgQT1kb2N1bWVudC5ib2R5LnN0eWxlLmN1cnNvcixJPWRvY3VtZW50LmJvZHkuc3R5bGUudXNlclNlbGVjdCxqPWRvY3VtZW50LmJvZHkuc3R5bGUud2Via2l0VXNlclNlbGVjdDtyZXR1cm4gZG9jdW1lbnQuYm9keS5zdHlsZS5jdXJzb3I9Im53c2UtcmVzaXplIixkb2N1bWVudC5ib2R5LnN0eWxlLnVzZXJTZWxlY3Q9Im5vbmUiLGRvY3VtZW50LmJvZHkuc3R5bGUud2Via2l0VXNlclNlbGVjdD0ibm9uZSIsKCk9Pntkb2N1bWVudC5ib2R5LnN0eWxlLmN1cnNvcj1BLGRvY3VtZW50LmJvZHkuc3R5bGUudXNlclNlbGVjdD1JLGRvY3VtZW50LmJvZHkuc3R5bGUud2Via2l0VXNlclNlbGVjdD1qfX0sW1EsWV0pLFcoKCk9PntpZih0eXBlb2Ygd2luZG93PiJ1IilyZXR1cm47bGV0IEE9KCk9PntsZXQgaj1ILmN1cnJlbnQ7aWYoaj09bnVsbClyZXR1cm47aWYoXy5jdXJyZW50IT1udWxsKWNsZWFyVGltZW91dChfLmN1cnJlbnQpLF8uY3VycmVudD1udWxsO3Uoail9LEk9KCk9PntpZihkb2N1bWVudC52aXNpYmlsaXR5U3RhdGU9PT0iaGlkZGVuIilBKCl9O3JldHVybiB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigicGFnZWhpZGUiLEEpLGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoInZpc2liaWxpdHljaGFuZ2UiLEkpLCgpPT57d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoInBhZ2VoaWRlIixBKSxkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJ2aXNpYmlsaXR5Y2hhbmdlIixJKX19LFt1XSk7bGV0IGQ9UCgoQSk9PntpZihBPngpcmV0dXJuIHgrcjIoQS14LHgpO2lmKEE8ZylyZXR1cm4gZy1yMihnLUEseCk7cmV0dXJuIEF9LFt4LGddKSxpPVAoKCk9PntpZihCLmN1cnJlbnQpQi5jdXJyZW50KCksQi5jdXJyZW50PW51bGw7RyghMSl9LFtdKSxTPVAoKEEpPT57bGV0IEk9cGVyZm9ybWFuY2Uubm93KCksaj1ELmN1cnJlbnQ7ai5wdXNoKHt0OkkseDpBfSk7d2hpbGUoai5sZW5ndGg+MSYmSS1qWzBdLnQ+dDMpai5zaGlmdCgpfSxbXSksbT1QKChBKT0+e2xldCBJPWQoQSk7aWYoei5jdXJyZW50IT1udWxsKWNhbmNlbEFuaW1hdGlvbkZyYW1lKHouY3VycmVudCk7ei5jdXJyZW50PXJlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+e3ouY3VycmVudD1udWxsLGEoSSksUyhJKX0pfSxbZCxTLGFdKSxKMT1QKChBLEksaik9PntpKCk7bGV0IHM9SC5jdXJyZW50Pz9DO2suY3VycmVudD17cG9pbnRlcklkOkEsc3RhcnRYOkksc3RhcnRZOmosc3RhcnRXaWR0aDpzfSxELmN1cnJlbnQ9W3t0OnBlcmZvcm1hbmNlLm5vdygpLHg6c31dLE4oKSxaKCEwKX0sW2ksQyxOXSksSzE9UCgoKT0+e2xldCBBPWsuY3VycmVudDtpZihrLmN1cnJlbnQ9bnVsbCx6LmN1cnJlbnQhPW51bGwpY2FuY2VsQW5pbWF0aW9uRnJhbWUoei5jdXJyZW50KSx6LmN1cnJlbnQ9bnVsbDtpZihBJiZBLnBvaW50ZXJJZD49MCl7bGV0IEcxPU8uY3VycmVudDtpZihHMT8uaGFzUG9pbnRlckNhcHR1cmUoQS5wb2ludGVySWQpKUcxLnJlbGVhc2VQb2ludGVyQ2FwdHVyZShBLnBvaW50ZXJJZCl9WighMSk7bGV0IEk9SC5jdXJyZW50Pz9DLGo9JDgoRC5jdXJyZW50KTtELmN1cnJlbnQ9W107bGV0IHM9RDAoSStqKnMzLEMsSywkLEopLGU9RzIoQzgocyxbQ10saTMpKSxEMT1NYXRoLmFicyhJLWUpPDAuNSYmTWF0aC5hYnMoaik8ODtpZihxfHxEMSl7YShlKSxYMShlKTtyZXR1cm59RyghMCksQi5jdXJyZW50PUs4KHtmcm9tOkksdG86ZSx2ZWxvY2l0eTpqLHN0aWZmbmVzczpyMyxkYW1waW5nOm4zLG9uVXBkYXRlOmEsb25Db21wbGV0ZTooKT0+e0IuY3VycmVudD1udWxsLEcoITEpLFgxKGUpfX0pfSxbSixDLHEsWDEsJCxLLGFdKTtXKCgpPT57cmV0dXJuKCk9PntpZihpKCksei5jdXJyZW50IT1udWxsKWNhbmNlbEFuaW1hdGlvbkZyYW1lKHouY3VycmVudCk7aWYoXy5jdXJyZW50IT1udWxsKXtpZihjbGVhclRpbWVvdXQoXy5jdXJyZW50KSxILmN1cnJlbnQhPW51bGwpdShILmN1cnJlbnQpfX19LFtpLHVdKSxXKCgpPT57aWYoIVEpcmV0dXJuO2xldCBBPSgpPT5LMSgpLEk9KCk9PntpZihkb2N1bWVudC52aXNpYmlsaXR5U3RhdGU9PT0iaGlkZGVuIilLMSgpfSxqPShzKT0+e2xldCBlPWsuY3VycmVudDtpZighZXx8ZS5wb2ludGVySWQhPT1zLnBvaW50ZXJJZClyZXR1cm47cy5wcmV2ZW50RGVmYXVsdCgpLG0odjgoZSxzLmNsaWVudFgscy5jbGllbnRZLEopKX07cmV0dXJuIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJibHVyIixBKSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigicG9pbnRlcm1vdmUiLGose2NhcHR1cmU6ITAscGFzc2l2ZTohMX0pLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJwb2ludGVydXAiLEEsITApLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJwb2ludGVyY2FuY2VsIixBLCEwKSxkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJ2aXNpYmlsaXR5Y2hhbmdlIixJKSwoKT0+e3dpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJibHVyIixBKSx3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigicG9pbnRlcm1vdmUiLGosITApLHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJwb2ludGVydXAiLEEsITApLHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJwb2ludGVyY2FuY2VsIixBLCEwKSxkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJ2aXNpYmlsaXR5Y2hhbmdlIixJKX19LFtKLEsxLFEsbV0pO2xldCBZMT1QKChBKT0+e2xldCBJPWsuY3VycmVudDtpZighSXx8SS5wb2ludGVySWQhPT1BLnBvaW50ZXJJZClyZXR1cm47QS5wcmV2ZW50RGVmYXVsdCgpLEEuc3RvcFByb3BhZ2F0aW9uKCksSzEoKX0sW0sxXSkscTE9UCgoQSk9PntpZihBLmJ1dHRvbiE9PTApcmV0dXJuO0EucHJldmVudERlZmF1bHQoKSxBLnN0b3BQcm9wYWdhdGlvbigpLEEuY3VycmVudFRhcmdldC5zZXRQb2ludGVyQ2FwdHVyZShBLnBvaW50ZXJJZCksSjEoQS5wb2ludGVySWQsQS5jbGllbnRYLEEuY2xpZW50WSl9LFtKMV0pLHQ9UCgoQSk9PntsZXQgST1rLmN1cnJlbnQ7aWYoIUl8fEkucG9pbnRlcklkIT09QS5wb2ludGVySWQpcmV0dXJuO0EucHJldmVudERlZmF1bHQoKSxtKHY4KEksQS5jbGllbnRYLEEuY2xpZW50WSxKKSl9LFtKLG1dKSwkMT1QKChBKT0+e2xldCBJPUEua2V5PT09IkFycm93UmlnaHQifHxBLmtleT09PSJBcnJvd0Rvd24iPzE6QS5rZXk9PT0iQXJyb3dMZWZ0Inx8QS5rZXk9PT0iQXJyb3dVcCI/LTE6MDtpZihJPT09MClyZXR1cm47QS5wcmV2ZW50RGVmYXVsdCgpLGkoKTtsZXQgaj1BLnNoaWZ0S2V5PzgwOjI0LHM9RzIoRDAoUitJKmosQyxLLCQsSikpO2EocyksWDEocyl9LFtKLGksUixDLFgxLCQsSyxhXSk7cmV0dXJue2hhbmRsZVJlZjpPLHdpZHRoOmgsY29tbWl0dGVkV2lkdGg6UixtaW5XaWR0aDpnLG1heFdpZHRoOngsaXNSZXNpemluZzpRLGlzSW5lcnRpYTpZLGhhbmRsZUhvdmVyZWQ6VixoYW5kbGVBY3RpdmU6Vnx8UXx8WSxzZXRIYW5kbGVIb3ZlcmVkOkwsb25Qb2ludGVyRG93bjpxMSxvblBvaW50ZXJNb3ZlOnQsb25Qb2ludGVyRW5kOlkxLG9uS2V5RG93bjokMX19ZnVuY3Rpb24gdjgoQyxLLCQsSil7bGV0IE49Sy1DLnN0YXJ0WCxxPSgkLUMuc3RhcnRZKSpKO3JldHVybiBDLnN0YXJ0V2lkdGgrKE1hdGguYWJzKE4pPj1NYXRoLmFicyhxKT9OOnEpfWZ1bmN0aW9uIG04KCl7bGV0W0MsS109YihbXSksJD1QKChxLFEpPT57bGV0IFo9Y3J5cHRvLnJhbmRvbVVVSUQoKTtyZXR1cm4gSygoWSk9PlsuLi5ZLHtpZDpaLG5hbWU6cSxraW5kOlEsc3RhdHVzOiJ1cGxvYWRpbmciLHByb2dyZXNzOjB9XSksWn0sW10pLEo9UCgocSxRKT0+e2lmKEsoKFopPT5aLm1hcCgoWSk9PlkuaWQ9PT1xP3suLi5ZLC4uLlF9OlkpKSxRLnN0YXR1cz09PSJzdWNjZXNzInx8US5zdGF0dXM9PT0iZXJyb3IiKXNldFRpbWVvdXQoKCk9PntLKChaKT0+Wi5maWx0ZXIoKFkpPT5ZLmlkIT09cSkpfSwzMDAwKX0sW10pLE49UCgocSxRKT0+e0soKFopPT5aLm1hcCgoWSk9PlkuaWQ9PT1xP3suLi5ZLHByb2dyZXNzOlF9OlkpKX0sW10pO3JldHVybnt0b2FzdHM6QyxhZGQ6JCx1cGRhdGU6SixzZXRQcm9ncmVzczpOfX1mdW5jdGlvbiBSOChDLEspe2xldFskLEpdPWIoW10pLFtOLHFdPWIobnVsbCksW1EsWl09YighMSksWT1QKGFzeW5jKCk9PntpZighQylyZXR1cm47WighMCkscShudWxsKTt0cnl7bGV0IEc9YXdhaXQgZmV0Y2goQyx7Y2FjaGU6Im5vLXN0b3JlIn0pLFY9YXdhaXQgRy5qc29uKCk7aWYoIUcub2t8fFYuZXJyb3IpdGhyb3cgRXJyb3IoVi5lcnJvcnx8IkZhaWxlZCB0byBsaXN0IFdlYktpdCB0YXJnZXRzIik7SihWLnRhcmdldHM/P1tdKX1jYXRjaChHKXtxKEcgaW5zdGFuY2VvZiBFcnJvcj9HLm1lc3NhZ2U6IkZhaWxlZCB0byBzdGFydCBXZWJLaXQgRGV2VG9vbHMiKX1maW5hbGx5e1ooITEpfX0sW0NdKTtyZXR1cm4gVygoKT0+e2lmKCFLKXJldHVybjtZKCk7bGV0IEc9c2V0SW50ZXJ2YWwoKCk9PnZvaWQgWSgpLDI1MDApO3JldHVybigpPT5jbGVhckludGVydmFsKEcpfSxbSyxZXSkse3RhcmdldHM6JCxlcnJvcjpOLGxvYWRpbmc6USxyZWZyZXNoOll9fXZhciB6ND17S2V5QTo0LEtleUI6NSxLZXlDOjYsS2V5RDo3LEtleUU6OCxLZXlGOjksS2V5RzoxMCxLZXlIOjExLEtleUk6MTIsS2V5SjoxMyxLZXlLOjE0LEtleUw6MTUsS2V5TToxNixLZXlOOjE3LEtleU86MTgsS2V5UDoxOSxLZXlROjIwLEtleVI6MjEsS2V5UzoyMixLZXlUOjIzLEtleVU6MjQsS2V5VjoyNSxLZXlXOjI2LEtleVg6MjcsS2V5WToyOCxLZXlaOjI5LERpZ2l0MTozMCxEaWdpdDI6MzEsRGlnaXQzOjMyLERpZ2l0NDozMyxEaWdpdDU6MzQsRGlnaXQ2OjM1LERpZ2l0NzozNixEaWdpdDg6MzcsRGlnaXQ5OjM4LERpZ2l0MDozOSxFbnRlcjo0MCxFc2NhcGU6NDEsQmFja3NwYWNlOjQyLFRhYjo0MyxTcGFjZTo0NCxNaW51czo0NSxFcXVhbDo0NixCcmFja2V0TGVmdDo0NyxCcmFja2V0UmlnaHQ6NDgsQmFja3NsYXNoOjQ5LFNlbWljb2xvbjo1MSxRdW90ZTo1MixCYWNrcXVvdGU6NTMsQ29tbWE6NTQsUGVyaW9kOjU1LFNsYXNoOjU2LENhcHNMb2NrOjU3LEYxOjU4LEYyOjU5LEYzOjYwLEY0OjYxLEY1OjYyLEY2OjYzLEY3OjY0LEY4OjY1LEY5OjY2LEYxMDo2NyxGMTE6NjgsRjEyOjY5LFByaW50U2NyZWVuOjcwLFNjcm9sbExvY2s6NzEsUGF1c2U6NzIsSW5zZXJ0OjczLEhvbWU6NzQsUGFnZVVwOjc1LERlbGV0ZTo3NixFbmQ6NzcsUGFnZURvd246NzgsQXJyb3dSaWdodDo3OSxBcnJvd0xlZnQ6ODAsQXJyb3dEb3duOjgxLEFycm93VXA6ODIsTnVtTG9jazo4MyxOdW1wYWREaXZpZGU6ODQsTnVtcGFkTXVsdGlwbHk6ODUsTnVtcGFkU3VidHJhY3Q6ODYsTnVtcGFkQWRkOjg3LE51bXBhZEVudGVyOjg4LE51bXBhZDE6ODksTnVtcGFkMjo5MCxOdW1wYWQzOjkxLE51bXBhZDQ6OTIsTnVtcGFkNTo5MyxOdW1wYWQ2Ojk0LE51bXBhZDc6OTUsTnVtcGFkODo5NixOdW1wYWQ5Ojk3LE51bXBhZDA6OTgsTnVtcGFkRGVjaW1hbDo5OSxDb250cm9sTGVmdDoyMjQsU2hpZnRMZWZ0OjIyNSxBbHRMZWZ0OjIyNixNZXRhTGVmdDoyMjcsQ29udHJvbFJpZ2h0OjIyOCxTaGlmdFJpZ2h0OjIyOSxBbHRSaWdodDoyMzAsTWV0YVJpZ2h0OjIzMX07ZnVuY3Rpb24gajgoQyl7cmV0dXJuIHo0W0NdPz9udWxsfXZhciBwOD0zMjAsZjg9NzYwLGw4PTcyMDtmdW5jdGlvbiBBNCgpe2xldCBDPXdpbmRvdy5fX1NJTV9QUkVWSUVXX18sW0ssJF09YighMSksW0osTl09YihbXSksW3EsUV09YighMSksW1osWV09YihudWxsKSxbRyxWXT1iKG5ldyBTZXQpLFtMLGtdPWIoITEpLFtELHpdPWIoITEpLFtCLF9dPWIoITEpLFtILE9dPWIoITEpLFtFLHldPWIobnVsbCksbz1QKGFzeW5jKCk9PntRKCEwKSxZKG51bGwpO3RyeXtsZXQgeD1hd2FpdCBaMSgieGNydW4gc2ltY3RsIGxpc3QgZGV2aWNlcyBhdmFpbGFibGUgLWoiKTtpZih4LmV4aXRDb2RlIT09MCl0aHJvdyBFcnJvcih4LnN0ZGVycnx8InNpbWN0bCBsaXN0IGZhaWxlZCIpO04oQTMoeC5zdGRvdXQpKX1jYXRjaCh4KXtZKHggaW5zdGFuY2VvZiBFcnJvcj94Lm1lc3NhZ2U6IkZhaWxlZCB0byBsaXN0IGRldmljZXMiKX1maW5hbGx5e1EoITEpfX0sW10pO2lmKFcoKCk9PntvKCl9LFtvXSksVygoKT0+e2lmKCFDPy5sb2dzRW5kcG9pbnQpcmV0dXJuO2xldCB4PW5ldyBFdmVudFNvdXJjZShDLmxvZ3NFbmRwb2ludCksZz1uZXcgTWFwLGg9WyIjOGJlOWZkIiwiIzUwZmE3YiIsIiNmZmI4NmMiLCIjZmY3OWM2IiwiI2JkOTNmOSIsIiNmMWZhOGMiLCIjNjI3MmE0IiwiI2ZmNTU1NSIsIiM2OWZmOTQiLCIjZDZhY2ZmIiwiI2ZmZmZhNSIsIiNhNGZmZmYiLCIjZmY2ZTZlIiwiI2NhYTlmYSIsIiM1YWY3OGUiXTtmdW5jdGlvbiBSKFgxKXtsZXQgZD1nLmdldChYMSk7aWYoIWQpe2xldCBpPTA7Zm9yKGxldCBTPTA7UzxYMS5sZW5ndGg7UysrKWk9KGk8PDUpLWkrWDEuY2hhckNvZGVBdChTKXwwO2Q9aFtNYXRoLmFicyhpKSVoLmxlbmd0aF0sZy5zZXQoWDEsZCl9cmV0dXJuIGR9bGV0IGE9IiIsdT0hMTtyZXR1cm4geC5vbm1lc3NhZ2U9KFgxKT0+e3RyeXtsZXQgZD1KU09OLnBhcnNlKFgxLmRhdGEpLGk9ZC5wcm9jZXNzSW1hZ2VQYXRoPy5zcGxpdCgiLyIpLnBvcCgpPz9kLnNlbmRlckltYWdlUGF0aD8uc3BsaXQoIi8iKS5wb3AoKT8/IiIsUz1kLnN1YnN5c3RlbT8/IiIsbT1kLmNhdGVnb3J5Pz8iIixKMT1kLmV2ZW50TWVzc2FnZT8/IiI7aWYoIUoxKXJldHVybjtpZihpIT09YSl7aWYodSljb25zb2xlLmdyb3VwRW5kKCk7bGV0IHQ9UihpKTtjb25zb2xlLmdyb3VwQ29sbGFwc2VkKGAlYyR7aX0ke1M/YCAlYyR7U30ke20/IjoiK206IiJ9YDoiIn1gLGBjb2xvcjoke3R9O2ZvbnQtd2VpZ2h0OmJvbGRgLC4uLlM/WyJjb2xvcjojODg4O2ZvbnQtd2VpZ2h0Om5vcm1hbCJdOltdKSx1PSEwLGE9aX1sZXQgSzE9KGQubWVzc2FnZVR5cGU/PyIiKS50b0xvd2VyQ2FzZSgpLFkxPVMmJmk9PT1hP2AlYyR7bXx8U30lYyBgOiIiLHExPVkxP1siY29sb3I6Izg4ODtmb250LXN0eWxlOml0YWxpYyIsImNvbG9yOmluaGVyaXQiXTpbXTtpZihLMT09PSJmYXVsdCJ8fEsxPT09ImVycm9yIiljb25zb2xlLmxvZyhgJHtZMX0lYyR7SjF9YCwuLi5xMSwiY29sb3I6I2ZmNTU1NSIpO2Vsc2UgaWYoSzE9PT0iZGVidWciKWNvbnNvbGUubG9nKGAke1kxfSVjJHtKMX1gLC4uLnExLCJjb2xvcjojNjI3MmE0Iik7ZWxzZSBjb25zb2xlLmxvZyhgJHtZMX0lYyR7SjF9YCwuLi5xMSwiY29sb3I6aW5oZXJpdCIpfWNhdGNoe319LCgpPT57aWYodSljb25zb2xlLmdyb3VwRW5kKCk7eC5jbG9zZSgpfX0sW0M/LmxvZ3NFbmRwb2ludF0pLCFDKXJldHVybiBYKGIzLHtkZXZpY2VzOkosbG9hZGluZzpxLGVycm9yOlosb25SZWZyZXNoOm99KTtyZXR1cm4gWChiNCx7Y29uZmlnOkMsZGV2aWNlczpKLGRldmljZXNMb2FkaW5nOnEsZGV2aWNlc0Vycm9yOlosc3RvcHBpbmdVZGlkczpHLHNldFN0b3BwaW5nVWRpZHM6Vixzd2l0Y2hpbmc6TCxzZXRTd2l0Y2hpbmc6ayxheE92ZXJsYXlFbmFibGVkOkQsc2V0QXhPdmVybGF5RW5hYmxlZDp6LGRldnRvb2xzT3BlbjpCLHNldERldnRvb2xzT3BlbjpfLGdyaWRPcGVuOkgsc2V0R3JpZE9wZW46TyxzZWxlY3RlZERldnRvb2xzVGFyZ2V0SWQ6RSxzZXRTZWxlY3RlZERldnRvb2xzVGFyZ2V0SWQ6eSxzdHJlYW1pbmc6SyxzZXRTdHJlYW1pbmc6JCxmZXRjaERldmljZXM6b30pfWZ1bmN0aW9uIGI0KHtjb25maWc6QyxkZXZpY2VzOkssZGV2aWNlc0xvYWRpbmc6JCxkZXZpY2VzRXJyb3I6SixzdG9wcGluZ1VkaWRzOk4sc2V0U3RvcHBpbmdVZGlkczpxLHN3aXRjaGluZzpRLHNldFN3aXRjaGluZzpaLGF4T3ZlcmxheUVuYWJsZWQ6WSxzZXRBeE92ZXJsYXlFbmFibGVkOkcsZGV2dG9vbHNPcGVuOlYsc2V0RGV2dG9vbHNPcGVuOkwsZ3JpZE9wZW46ayxzZXRHcmlkT3BlbjpELHNlbGVjdGVkRGV2dG9vbHNUYXJnZXRJZDp6LHNldFNlbGVjdGVkRGV2dG9vbHNUYXJnZXRJZDpCLHN0cmVhbWluZzpfLHNldFN0cmVhbWluZzpILGZldGNoRGV2aWNlczpPfSl7bGV0IEU9Sy5maW5kKChNKT0+TS51ZGlkPT09Qy5kZXZpY2UpPz9udWxsO1coKCk9Pntkb2N1bWVudC50aXRsZT1FPy5uYW1lP2BTaW11bGF0b3IgLSAke0UubmFtZX1gOiJTaW11bGF0b3IgUHJldmlldyJ9LFtFPy5uYW1lXSk7bGV0IHk9RzAoRT8ubmFtZSksbz1SOChDLmRldnRvb2xzRW5kcG9pbnQ/P3YxKCJkZXZ0b29scyIpLFYpO1coKCk9PntpZighVilyZXR1cm47aWYoeiYmby50YXJnZXRzLnNvbWUoKE0pPT5NLmlkPT09eikpcmV0dXJuO0Ioby50YXJnZXRzLmxlbmd0aD09PTE/by50YXJnZXRzWzBdLmlkOm51bGwpfSxbVixvLnRhcmdldHMseixCXSksVygoKT0+e0IobnVsbCl9LFtDLmRldmljZSxCXSk7bGV0IHg9eDgoQy5zdHJlYW1VcmwpLFtnLGhdPWIobnVsbCksUj1nPz94LmNvbmZpZz8/cjAoeSxFPy5uYW1lKSxhPXMwKHksUiksdT1uMCh5LFIpLFgxPWkwKFIpLGQ9WjAoUiksaT1kP2Qud2lkdGgvZC5oZWlnaHQ6MSxTPXYobnVsbCk7VygoKT0+e2xldCBNPSExLGM9bnVsbCxDMT1udWxsLFU9KCk9PntpZihNfHxjKXJldHVybjtjPXNldFRpbWVvdXQoKCk9PntjPW51bGwsRigpfSwxMDAwKX0sRj0oKT0+e2xldCB3PW5ldyBXZWJTb2NrZXQoQy53c1VybCk7dy5iaW5hcnlUeXBlPSJhcnJheWJ1ZmZlciIsQzE9dyxTLmN1cnJlbnQ9dyx3Lm9uY2xvc2U9KCk9PntpZihTLmN1cnJlbnQ9PT13KVMuY3VycmVudD1udWxsO1UoKX0sdy5vbmVycm9yPSgpPT57dy5jbG9zZSgpfX07cmV0dXJuIEYoKSwoKT0+e2lmKE09ITAsYyljbGVhclRpbWVvdXQoYyk7aWYoUy5jdXJyZW50PT09QzEpUy5jdXJyZW50PW51bGw7QzE/LmNsb3NlKCl9fSxbQy53c1VybF0pO2xldCBtPVAoKE0sYyk9PntsZXQgQzE9Uy5jdXJyZW50O2lmKCFDMXx8QzEucmVhZHlTdGF0ZSE9PVdlYlNvY2tldC5PUEVOKXJldHVybjtsZXQgVT1uZXcgVGV4dEVuY29kZXIoKS5lbmNvZGUoSlNPTi5zdHJpbmdpZnkoYykpLEY9bmV3IFVpbnQ4QXJyYXkoMStVLmxlbmd0aCk7RlswXT1NLEYuc2V0KFUsMSksQzEuc2VuZChGKX0sW10pLEoxPVAoKE0pPT5tKDMsTSksW21dKSxLMT1QKChNKT0+bSg1LE0pLFttXSksWTE9UCgoTSk9Pm0oNCx7YnV0dG9uOk19KSxbbV0pLHExPVAoKE0pPT57aCgoYyk9PmMmJmMud2lkdGg9PT1NLndpZHRoJiZjLmhlaWdodD09PU0uaGVpZ2h0JiZjLm9yaWVudGF0aW9uPT09TS5vcmllbnRhdGlvbj9jOk0pfSxbXSksdD1QKChNKT0+e20oNyx7b3JpZW50YXRpb246TX0pfSxbbV0pO1coKCk9PntoKG51bGwpfSxbQy5zdHJlYW1VcmxdKSxXKCgpPT57bGV0IE09eC5jb25maWc7aWYoIU0pcmV0dXJuO2goKGMpPT5jJiZjLndpZHRoPT09TS53aWR0aCYmYy5oZWlnaHQ9PT1NLmhlaWdodCYmYy5vcmllbnRhdGlvbj09PU0ub3JpZW50YXRpb24/YzpudWxsKX0sW3guY29uZmlnLHguY29uZmlnPy53aWR0aCx4LmNvbmZpZz8uaGVpZ2h0LHguY29uZmlnPy5vcmllbnRhdGlvbl0pO2xldCAkMT1QKChNLGMpPT57bSg2LHt0eXBlOk0sdXNhZ2U6Y30pfSxbbV0pLFtBLEldPWIobnVsbCksW2osc109YighMSkse3dpZHRoOmUsb25Qb2ludGVyRG93bjpEMX09WTIoInNlcnZlLXNpbTp0b29scy1wYW5lbC13aWR0aCIscDgsMjQwLDcyMCkse3dpZHRoOkcxLG9uUG9pbnRlckRvd246RTF9PVkyKCJzZXJ2ZS1zaW06ZGV2dG9vbHMtcGFuZWwtd2lkdGgiLGY4LDQyMCwxNDAwKSx7d2lkdGg6STEsb25Qb2ludGVyRG93bjpGMX09WTIoInNlcnZlLXNpbTpncmlkLXBhbmVsLXdpZHRoIixsOCwzNjAsMTQwMCksW3cxLEwxXT1iKCgpPT50eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3cuaW5uZXJXaWR0aDowKSxbVjEscDFdPWIoKCk9PnR5cGVvZiB3aW5kb3c8InUiP3dpbmRvdy5pbm5lckhlaWdodDowKTtXKCgpPT57bGV0IE09KCk9PntMMSh3aW5kb3cuaW5uZXJXaWR0aCkscDEod2luZG93LmlubmVySGVpZ2h0KX07cmV0dXJuIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJyZXNpemUiLE0pLCgpPT53aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigicmVzaXplIixNKX0sW10pLFcoKCk9PntsZXQgTT1uZXcgRXZlbnRTb3VyY2UoQy5hcHBTdGF0ZUVuZHBvaW50Pz92MSgiYXBwc3RhdGUiKSksYz1udWxsO3JldHVybiBNLm9ubWVzc2FnZT0oQzEpPT57dHJ5e2xldCBVPUpTT04ucGFyc2UoQzEuZGF0YSk7aWYoYyljbGVhclRpbWVvdXQoYyk7bGV0IEY9VT8uaXNSZWFjdE5hdGl2ZT8wOjYwMDtjPXNldFRpbWVvdXQoKCk9PkkoVSksRil9Y2F0Y2h7fX0sKCk9PntpZihjKWNsZWFyVGltZW91dChjKTtNLmNsb3NlKCl9fSxbQy5hcHBTdGF0ZUVuZHBvaW50XSk7bGV0IGYxPVAoYXN5bmMoKT0+eyQxKCJkb3duIiwyMjcpLGF3YWl0IG5ldyBQcm9taXNlKChDMSk9PnNldFRpbWVvdXQoQzEsMzApKSwkMSgiZG93biIsMjEpLGF3YWl0IG5ldyBQcm9taXNlKChDMSk9PnNldFRpbWVvdXQoQzEsMzApKSwkMSgidXAiLDIxKSxhd2FpdCBuZXcgUHJvbWlzZSgoQzEpPT5zZXRUaW1lb3V0KEMxLDMwKSksJDEoInVwIiwyMjcpfSxbJDFdKSxTMT12KG51bGwpLFtnMSwkMF09YigwKSxbeTEsaDFdPWIoMCk7VygoKT0+e2xldCBNPVMxLmN1cnJlbnQ7aWYoIU18fHR5cGVvZiBSZXNpemVPYnNlcnZlcj4idSIpcmV0dXJuO2xldCBjPW5ldyBSZXNpemVPYnNlcnZlcigoQzEpPT57bGV0IFU9QzFbMF0/LmNvbnRlbnRSZWN0OyQwKFU/LndpZHRoPz8wKSxoMShVPy5oZWlnaHQ/PzApfSk7cmV0dXJuIGMub2JzZXJ2ZShNKSwoKT0+Yy5kaXNjb25uZWN0KCl9LFtdKTtsZXRbVCxyXT1iKCEwKSxmPXYoITApO2YuY3VycmVudD1UO2xldCBCMT12KG5ldyBTZXQpO1coKCk9PntsZXQgTT0oYyk9PntsZXQgQzE9ISFTMS5jdXJyZW50Py5jb250YWlucyhjLnRhcmdldCk7cihDMSl9O3JldHVybiBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJwb2ludGVyZG93biIsTSwhMCksKCk9PmRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInBvaW50ZXJkb3duIixNLCEwKX0sW10pLFcoKCk9PntpZihUKXJldHVybjtsZXQgTT1CMS5jdXJyZW50O2lmKE0uc2l6ZT09PTApcmV0dXJuO2ZvcihsZXQgYyBvZiBNKW0oNix7dHlwZToidXAiLHVzYWdlOmN9KTtNLmNsZWFyKCl9LFtULG1dKSxXKCgpPT57bGV0IE09KFUsRik9PntpZighZi5jdXJyZW50KXJldHVybjtpZihVLmNvZGU9PT0iS2V5SCImJlUubWV0YUtleSYmVS5zaGlmdEtleSl7aWYoVS5wcmV2ZW50RGVmYXVsdCgpLEY9PT0iZG93biImJiFVLnJlcGVhdCltKDQse2J1dHRvbjoiaG9tZSJ9KTtyZXR1cm59aWYoVS5jb2RlPT09IktleUEiJiZVLm1ldGFLZXkmJlUuc2hpZnRLZXkpe2lmKFUucHJldmVudERlZmF1bHQoKSxGPT09ImRvd24iJiYhVS5yZXBlYXQpWjEoYHhjcnVuIHNpbWN0bCB1aSAke0MuZGV2aWNlfSBhcHBlYXJhbmNlYCkudGhlbigocCk9PntsZXQgbj1wLnN0ZG91dC50cmltKCk9PT0iZGFyayI/ImxpZ2h0IjoiZGFyayI7cmV0dXJuIFoxKGB4Y3J1biBzaW1jdGwgdWkgJHtDLmRldmljZX0gYXBwZWFyYW5jZSAke259YCl9KS5jYXRjaCgoKT0+e30pO3JldHVybn1sZXQgdz1qOChVLmNvZGUpO2lmKHc9PW51bGwpcmV0dXJuO2lmKFUucHJldmVudERlZmF1bHQoKSxGPT09ImRvd24iKUIxLmN1cnJlbnQuYWRkKHcpO2Vsc2UgQjEuY3VycmVudC5kZWxldGUodyk7bSg2LHt0eXBlOkYsdXNhZ2U6d30pfSxjPShVKT0+TShVLCJkb3duIiksQzE9KFUpPT5NKFUsInVwIik7cmV0dXJuIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIixjKSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigia2V5dXAiLEMxKSwoKT0+e3dpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJrZXlkb3duIixjKSx3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigia2V5dXAiLEMxKX19LFttLEMuZGV2aWNlXSk7bGV0IHoxPVAoYXN5bmMoTSk9PntpZihRfHxNLnVkaWQ9PT1DLmRldmljZSlyZXR1cm47WighMCk7dHJ5e2lmKE0uc3RhdGUhPT0iQm9vdGVkIilhd2FpdCBaMShgeGNydW4gc2ltY3RsIGJvb3QgJHtNLnVkaWR9YCk7bGV0IGM9YXdhaXQgWjEoYGJ1bnggc2VydmUtc2ltIC0tZGV0YWNoICR7TS51ZGlkfWApO2lmKGMuZXhpdENvZGUhPT0wKXRocm93IEVycm9yKGMuc3RkZXJyfHwiRmFpbGVkIHRvIHN0YXJ0IHNlcnZlLXNpbSIpO2xldCBDMT1uZXcgVVJMKHdpbmRvdy5sb2NhdGlvbi5ocmVmKTtDMS5zZWFyY2hQYXJhbXMuc2V0KCJkZXZpY2UiLE0udWRpZCksd2luZG93LmxvY2F0aW9uLmFzc2lnbihDMS50b1N0cmluZygpKX1jYXRjaHtaKCExKX19LFtRLEMuZGV2aWNlLFpdKSxPMT1tOCgpLHgxPWg4KHtleGVjOloxLHVkaWQ6Qy5kZXZpY2UsZW5hYmxlZDpfLG9uVXBsb2FkU3RhcnQ6TzEuYWRkLG9uVXBsb2FkUHJvZ3Jlc3M6TzEuc2V0UHJvZ3Jlc3Msb25VcGxvYWRFbmQ6KE0sYyxDMSk9Pk8xLnVwZGF0ZShNLHtzdGF0dXM6Yz8ic3VjY2VzcyI6ImVycm9yIixtZXNzYWdlOkMxfSksb25VbnN1cHBvcnRlZDooTSk9PntsZXQgYz1PMS5hZGQoTS5uYW1lLCJtZWRpYSIpO08xLnVwZGF0ZShjLHtzdGF0dXM6ImVycm9yIixtZXNzYWdlOmBVbnN1cHBvcnRlZDogJHtNLnR5cGV8fFUwKE0pfWB9KX19KSxJMD1QKGFzeW5jKE0pPT57cSgoYyk9Pm5ldyBTZXQoYykuYWRkKE0pKTt0cnl7YXdhaXQgWjEoYHhjcnVuIHNpbWN0bCBzaHV0ZG93biAke019YCksYXdhaXQgTygpfWZpbmFsbHl7cSgoYyk9PntsZXQgQzE9bmV3IFNldChjKTtyZXR1cm4gQzEuZGVsZXRlKE0pLEMxfSl9fSxbTyxxXSksUTE9Zzgoe2RlZmF1bHRXaWR0aDp1LHZpZXdwb3J0V2lkdGg6dzEsdmlld3BvcnRIZWlnaHQ6VjEsYXNwZWN0UmF0aW86aSxvblN0YXJ0OigpPT5yKCExKX0pLFgwPVY/RzE6az9JMTpqP2U6MCx6MD0xMixkMT0yNCxtMT1YMD4wP1gwK2QxOjAsczE9MDtpZihYMD4wKXtsZXQgTT13MS16MC1YMCxjPWcxPjA/TWF0aC5taW4oZzEsUTEud2lkdGgpOlExLndpZHRoLFU9dzEvMitjLzItKE0tZDEpO2lmKFU+MCl7bGV0IEY9MipVO3MxPUY8PW0xP0Y6MH19cmV0dXJuIFgoVTMse2VuZHBvaW50Olk/Qz8uYXhFbmRwb2ludDp2b2lkIDAsY2hpbGRyZW46WCgiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGZsZXgtY29sIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBoLXNjcmVlbiBiZy1wYWdlIHB5LTYgcGwtNiBnYXAtMyBmb250LXN5c3RlbSBib3gtYm9yZGVyIixzdHlsZTp7cGFkZGluZ1JpZ2h0OjI0K3MxLHRyYW5zaXRpb246UTEuaXNSZXNpemluZ3x8UTEuaXNJbmVydGlhPyJub25lIjpTM30sY2hpbGRyZW46W1goImRpdiIse2NsYXNzTmFtZToiZmxleCBmbGV4LWNvbCBpdGVtcy1jZW50ZXIgZ2FwLTMgbWluLXctMCIsc3R5bGU6e3dpZHRoOlExLndpZHRoLHRyYW5zaXRpb246UTEuaXNSZXNpemluZ3x8UTEuaXNJbmVydGlhP28yOmQyfSxjaGlsZHJlbjpbWChQMSx7ZXhlYzpaMSxvblJvdGF0ZTp0LG9yaWVudGF0aW9uOlIub3JpZW50YXRpb24/P251bGwsZGV2aWNlVWRpZDpDLmRldmljZSxkZXZpY2VOYW1lOkU/Lm5hbWU/P251bGwsZGV2aWNlUnVudGltZTpFPy5ydW50aW1lPz9udWxsLHN0cmVhbWluZzpfLGNoaWxkcmVuOltYKE8zLHtkZXZpY2VzOkssc2VsZWN0ZWRVZGlkOkMuZGV2aWNlLGxvYWRpbmc6JCxlcnJvcjpKLHN0b3BwaW5nVWRpZHM6TixvblJlZnJlc2g6TyxvblNlbGVjdDp6MSxvblN0b3A6STAsdHJpZ2dlcjpYKFAxLlRpdGxlLHt9KX0pLFgoUDEuQWN0aW9ucyx7Y2hpbGRyZW46W0E/LmlzUmVhY3ROYXRpdmUmJlgoUDEuQnV0dG9uLHsiYXJpYS1sYWJlbCI6IlJlbG9hZCBSZWFjdCBOYXRpdmUgYnVuZGxlIix0aXRsZToiUmVsb2FkIChDbWQrUikiLG9uQ2xpY2s6KCk9PnZvaWQgZjEoKSxjaGlsZHJlbjpYKHQxLHt9KX0pLFgoUDEuSG9tZUJ1dHRvbix7b25DbGljazooTSk9PntNLnByZXZlbnREZWZhdWx0KCksWTEoImhvbWUiKX19KSxYKHozLHtvdmVybGF5RW5hYmxlZDpZLHN0cmVhbWluZzpfLG9uVG9nZ2xlT3ZlcmxheTooKT0+RygoTSk9PiFNKX0pLFgoUDEuUm90YXRlQnV0dG9uLHt0aXRsZToiUm90YXRlIGRldmljZSJ9KV19KV19KSxYKCJkaXYiLHtyZWY6UzEsY2xhc3NOYW1lOiJyZWxhdGl2ZSBtYXgtaC1mdWxsIixzdHlsZTp7d2lkdGg6UTEud2lkdGgsYXNwZWN0UmF0aW86WDEsdHJhbnNpdGlvbjpRMS5pc1Jlc2l6aW5nfHxRMS5pc0luZXJ0aWE/bzI6ZDIsd2lsbENoYW5nZTpRMS5pc1Jlc2l6aW5nfHxRMS5pc0luZXJ0aWE/IndpZHRoIjp2b2lkIDB9LC4uLngxLmRyb3Bab25lUHJvcHMsY2hpbGRyZW46W1goYTAse3VybDpDLnVybCxzdHlsZTp7d2lkdGg6IjEwMCUiLGhlaWdodDoiMTAwJSIsYm9yZGVyOiJub25lIixwb2ludGVyRXZlbnRzOlExLmlzUmVzaXppbmd8fFExLmlzSW5lcnRpYT8ibm9uZSI6dm9pZCAwfSxpbWFnZVN0eWxlOntib3JkZXJSYWRpdXM6YSxjb3JuZXJTaGFwZToic3VwZXJlbGxpcHNlKDEuMykifSxoaWRlQ29udHJvbHM6ITAsb25TdHJlYW1pbmdDaGFuZ2U6SCxvblN0cmVhbVRvdWNoOkoxLG9uU3RyZWFtTXVsdGlUb3VjaDpLMSxvblN0cmVhbUJ1dHRvbjpZMSxzdWJzY3JpYmVGcmFtZTp4LnN1YnNjcmliZUZyYW1lLHN0cmVhbUZyYW1lOnguZnJhbWUsc3RyZWFtQ29uZmlnOlIsb25TY3JlZW5Db25maWdDaGFuZ2U6cTF9KSxZJiZYKEYzLHt9KSx4MS5pc0RyYWdPdmVyJiZYKCJkaXYiLHtjbGFzc05hbWU6ImFic29sdXRlIGluc2V0LTAgZmxleCBmbGV4LWNvbCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgZ2FwLTIgYm9yZGVyLTIgYm9yZGVyLWRhc2hlZCBib3JkZXItYWNjZW50IGJnLVtyZ2JhKDk5LDEwMiwyNDEsMC4xMildIGJhY2tkcm9wLWJsdXItWzJweF0gdGV4dC1hY2NlbnQgcG9pbnRlci1ldmVudHMtbm9uZSB6LTIwIixzdHlsZTp7Ym9yZGVyUmFkaXVzOmF9LGNoaWxkcmVuOltYKCJzdmciLHt3aWR0aDoiMzIiLGhlaWdodDoiMzIiLHZpZXdCb3g6IjAgMCAyNCAyNCIsZmlsbDoibm9uZSIsc3Ryb2tlOiJjdXJyZW50Q29sb3IiLHN0cm9rZVdpZHRoOiIxLjUiLHN0cm9rZUxpbmVjYXA6InJvdW5kIixzdHJva2VMaW5lam9pbjoicm91bmQiLGNoaWxkcmVuOltYKCJwYXRoIix7ZDoiTTIxIDE1djRhMiAyIDAgMCAxLTIgMkg1YTIgMiAwIDAgMS0yLTJ2LTQifSksWCgicG9seWxpbmUiLHtwb2ludHM6IjE3IDggMTIgMyA3IDgifSksWCgibGluZSIse3gxOiIxMiIseTE6IjMiLHgyOiIxMiIseTI6IjE1In0pXX0pLFgoInNwYW4iLHtjbGFzc05hbWU6InRleHQtWzEzcHhdIGZvbnQtbWVkaXVtIixjaGlsZHJlbjoiRHJvcCBtZWRpYSBvciAuaXBhIn0pXX0pLFgocTgse3NpbXVsYXRvclJlc2l6ZTpRMSxkZXZpY2VUeXBlOnksc3RyZWFtQ29uZmlnOlIsY29udGFpbmVyV2lkdGg6ZzF8fFExLndpZHRoLGNvbnRhaW5lckhlaWdodDp5MXx8KGk+MD9RMS53aWR0aC9pOjApfSksWChROCx7d2lkdGg6ZzF8fFExLndpZHRoLGhlaWdodDp5MXx8KGk+MD9RMS53aWR0aC9pOjApLHZpc2libGU6UTEuaXNSZXNpemluZ3x8UTEuaXNJbmVydGlhfSldfSldfSksTzEudG9hc3RzLmxlbmd0aD4wJiZYKCJkaXYiLHtjbGFzc05hbWU6ImZpeGVkIGJvdHRvbS00IHJpZ2h0LTQgZmxleCBmbGV4LWNvbCBnYXAtMS41IG1heC13LVszMjBweF0gei0zMCIsY2hpbGRyZW46TzEudG9hc3RzLm1hcCgoTSk9PntsZXQgYz1NLnN0YXR1cz09PSJlcnJvciIsQzE9TS5zdGF0dXM9PT0idXBsb2FkaW5nIixVPUMxJiZNLnByb2dyZXNzIT09bnVsbCxGPU0ucHJvZ3Jlc3MhPW51bGw/TWF0aC5yb3VuZChNLnByb2dyZXNzKjEwMCk6MDtyZXR1cm4gWCgiZGl2Iix7Y2xhc3NOYW1lOmBmbGV4IGZsZXgtY29sIGdhcC0xLjUgcHgtMyBweS0yIGJnLXBhbmVsIGJvcmRlciBib3JkZXItd2hpdGUvMTIgcm91bmRlZC1sZyB0ZXh0LXdoaXRlLzkwIHRleHQtWzEycHhdIGZvbnQtbW9ubyBzaGFkb3ctWzBfNHB4XzEycHhfcmdiYSgwLDAsMCwwLjQpXSAke2M/InNlbGVjdC10ZXh0IGN1cnNvci10ZXh0Ijoic2VsZWN0LW5vbmUgY3Vyc29yLWRlZmF1bHQifWAsY2hpbGRyZW46W1goImRpdiIse2NsYXNzTmFtZToiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTIiLGNoaWxkcmVuOltYKCJzcGFuIix7Y2xhc3NOYW1lOiJzaXplLTEuNSByb3VuZGVkLWZ1bGwgc2hyaW5rLTAgW3RyYW5zaXRpb246YmFja2dyb3VuZF8wLjNzXSIsc3R5bGU6e2JhY2tncm91bmQ6QzE/IiNhNWI0ZmMiOk0uc3RhdHVzPT09InN1Y2Nlc3MiPyIjNGFkZTgwIjoiI2Y4NzE3MSJ9fSksWCgic3BhbiIse2NsYXNzTmFtZToiZmxleC0xIG92ZXJmbG93LWhpZGRlbiB0ZXh0LWVsbGlwc2lzIHdoaXRlc3BhY2Utbm93cmFwIixjaGlsZHJlbjpbQzEmJlUmJmBVcGxvYWRpbmcgJHtNLm5hbWV94oCmICR7Rn0lYCxDMSYmIVUmJihNLmtpbmQ9PT0iaXBhIj9gSW5zdGFsbGluZyAke00ubmFtZX3igKZgOmBBZGRpbmcgJHtNLm5hbWV94oCmYCksTS5zdGF0dXM9PT0ic3VjY2VzcyImJihNLmtpbmQ9PT0iaXBhIj9gSW5zdGFsbGVkICR7TS5uYW1lfWA6YEFkZGVkICR7TS5uYW1lfSB0byBQaG90b3NgKSxjJiZgJHtNLm5hbWV9OiAke00ubWVzc2FnZT8/IlVwbG9hZCBmYWlsZWQifWBdfSldfSksQzEmJlgoImRpdiIse2NsYXNzTmFtZToicmVsYXRpdmUgaC1bM3B4XSB3LWZ1bGwgYmctd2hpdGUvOCByb3VuZGVkLVsycHhdIG92ZXJmbG93LWhpZGRlbiIsY2hpbGRyZW46VT9YKCJkaXYiLHtjbGFzc05hbWU6ImgtZnVsbCBiZy1hY2NlbnQgcm91bmRlZC1bMnB4XSBbdHJhbnNpdGlvbjp3aWR0aF8xMjBtc19saW5lYXJdIixzdHlsZTp7d2lkdGg6YCR7Rn0lYH19KTpYKCJkaXYiLHtjbGFzc05hbWU6InNlcnZlLXNpbS10b2FzdC1pbmRldGVybWluYXRlIGFic29sdXRlIHRvcC0wIGxlZnQtMCBoLWZ1bGwgdy1bNDAlXSBiZy1hY2NlbnQgcm91bmRlZC1bMnB4XSJ9KX0pXX0sTS5pZCl9KX0pLFgoImRpdiIse2NsYXNzTmFtZTpgZml4ZWQgdG9wLTMgcmlnaHQtMyBmbGV4IGZsZXgtY29sIGdhcC0xIHAtMSBiZy1wYW5lbC1iZyBib3JkZXIgYm9yZGVyLXdoaXRlLzggcm91bmRlZC1bMTBweF0gYmFja2Ryb3AtYmx1ci1bMTJweF0gWy13ZWJraXQtYmFja2Ryb3AtZmlsdGVyOmJsdXIoMTJweCldIFt0cmFuc2l0aW9uOm9wYWNpdHlfMC4xOHNfZWFzZV0gei00MCAke2p8fFZ8fGs/Im9wYWNpdHktMCBwb2ludGVyLWV2ZW50cy1ub25lIjoib3BhY2l0eS0xMDAgcG9pbnRlci1ldmVudHMtYXV0byJ9YCxjaGlsZHJlbjpbWCgiYnV0dG9uIix7b25DbGljazooKT0+e0woITEpLEQoITEpLHMoKE0pPT4hTSl9LGNsYXNzTmFtZToidy1bMzBweF0gaC1bMzBweF0gZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgYmctdHJhbnNwYXJlbnQgYm9yZGVyLW5vbmUgcm91bmRlZC1tZCB0ZXh0LVsjOGU4ZTkzXSBjdXJzb3ItcG9pbnRlciBbdHJhbnNpdGlvbjpiYWNrZ3JvdW5kXzAuMTVzX2Vhc2UsY29sb3JfMC4xNXNfZWFzZV0gaG92ZXI6Ymctd2hpdGUvOCBob3Zlcjp0ZXh0LXdoaXRlIiwiYXJpYS1sYWJlbCI6Ik9wZW4gdG9vbHMgcGFuZWwiLCJhcmlhLXByZXNzZWQiOmosdGl0bGU6IlRvb2xzIixjaGlsZHJlbjpYKCJzdmciLHt3aWR0aDoiMTgiLGhlaWdodDoiMTgiLHZpZXdCb3g6IjAgMCAyNCAyNCIsZmlsbDoibm9uZSIsc3Ryb2tlOiJjdXJyZW50Q29sb3IiLHN0cm9rZVdpZHRoOiIxLjc1IixzdHJva2VMaW5lY2FwOiJyb3VuZCIsc3Ryb2tlTGluZWpvaW46InJvdW5kIixjaGlsZHJlbjpbWCgicmVjdCIse3g6IjMiLHk6IjQiLHdpZHRoOiIxOCIsaGVpZ2h0OiIxNiIscng6IjIuNSJ9KSxYKCJsaW5lIix7eDE6IjE1Iix5MToiNCIseDI6IjE1Iix5MjoiMjAifSldfSl9KSxYKCJidXR0b24iLHtvbkNsaWNrOigpPT57cyghMSksRCghMSksTCgoTSk9PiFNKX0sY2xhc3NOYW1lOiJ3LVszMHB4XSBoLVszMHB4XSBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBiZy10cmFuc3BhcmVudCBib3JkZXItbm9uZSByb3VuZGVkLW1kIHRleHQtWyM4ZThlOTNdIGN1cnNvci1wb2ludGVyIFt0cmFuc2l0aW9uOmJhY2tncm91bmRfMC4xNXNfZWFzZSxjb2xvcl8wLjE1c19lYXNlXSBob3ZlcjpiZy13aGl0ZS84IGhvdmVyOnRleHQtd2hpdGUiLCJhcmlhLWxhYmVsIjoiT3BlbiBXZWJLaXQgRGV2VG9vbHMiLCJhcmlhLXByZXNzZWQiOlYsdGl0bGU6IldlYktpdCBEZXZUb29scyIsY2hpbGRyZW46WCgic3ZnIix7d2lkdGg6IjE4IixoZWlnaHQ6IjE4Iix2aWV3Qm94OiIwIDAgMjQgMjQiLGZpbGw6Im5vbmUiLHN0cm9rZToiY3VycmVudENvbG9yIixzdHJva2VXaWR0aDoiMS43NSIsc3Ryb2tlTGluZWNhcDoicm91bmQiLHN0cm9rZUxpbmVqb2luOiJyb3VuZCIsY2hpbGRyZW46W1goImNpcmNsZSIse2N4OiIxMiIsY3k6IjEyIixyOiIxMCJ9KSxYKCJwYXRoIix7ZDoiTTEyIDJhMTQuNSAxNC41IDAgMCAwIDAgMjAgMTQuNSAxNC41IDAgMCAwIDAtMjAifSksWCgicGF0aCIse2Q6Ik0yIDEyaDIwIn0pXX0pfSksWCgiYnV0dG9uIix7b25DbGljazooKT0+e3MoITEpLEwoITEpLEQoKE0pPT4hTSl9LGNsYXNzTmFtZToidy1bMzBweF0gaC1bMzBweF0gZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgYmctdHJhbnNwYXJlbnQgYm9yZGVyLW5vbmUgcm91bmRlZC1tZCB0ZXh0LVsjOGU4ZTkzXSBjdXJzb3ItcG9pbnRlciBbdHJhbnNpdGlvbjpiYWNrZ3JvdW5kXzAuMTVzX2Vhc2UsY29sb3JfMC4xNXNfZWFzZV0gaG92ZXI6Ymctd2hpdGUvOCBob3Zlcjp0ZXh0LXdoaXRlIiwiYXJpYS1sYWJlbCI6Ik9wZW4gc2ltdWxhdG9yIGdyaWQiLCJhcmlhLXByZXNzZWQiOmssdGl0bGU6IlNpbXVsYXRvcnMiLGNoaWxkcmVuOlgoInN2ZyIse3dpZHRoOiIxOCIsaGVpZ2h0OiIxOCIsdmlld0JveDoiMCAwIDI0IDI0IixmaWxsOiJub25lIixzdHJva2U6ImN1cnJlbnRDb2xvciIsc3Ryb2tlV2lkdGg6IjEuNzUiLHN0cm9rZUxpbmVjYXA6InJvdW5kIixzdHJva2VMaW5lam9pbjoicm91bmQiLGNoaWxkcmVuOltYKCJyZWN0Iix7eDoiMyIseToiMyIsd2lkdGg6IjciLGhlaWdodDoiNyIscng6IjEuNSJ9KSxYKCJyZWN0Iix7eDoiMTQiLHk6IjMiLHdpZHRoOiI3IixoZWlnaHQ6IjciLHJ4OiIxLjUifSksWCgicmVjdCIse3g6IjMiLHk6IjE0Iix3aWR0aDoiNyIsaGVpZ2h0OiI3IixyeDoiMS41In0pLFgoInJlY3QiLHt4OiIxNCIseToiMTQiLHdpZHRoOiI3IixoZWlnaHQ6IjciLHJ4OiIxLjUifSldfSl9KV19KSxYKFA4LHtvcGVuOmosb25DbG9zZTooKT0+cyghMSksdWRpZDpDLmRldmljZSxjdXJyZW50QXBwOkEsYXhPdmVybGF5RW5hYmxlZDpZLG9uVG9nZ2xlQXhPdmVybGF5OigpPT5HKChNKT0+IU0pLHdpZHRoOmV9KSxYKHEyLHtwYW5lbFdpZHRoOmUsdmlzaWJsZTpqLG9uUG9pbnRlckRvd246RDEsYXJpYUxhYmVsOiJSZXNpemUgdG9vbHMgcGFuZWwifSksWChXMyx7b3BlbjprLG9uQ2xvc2U6KCk9PkQoITEpLGN1cnJlbnRVZGlkOkMuZGV2aWNlLHdpZHRoOkkxfSksWChxMix7cGFuZWxXaWR0aDpJMSx2aXNpYmxlOmssb25Qb2ludGVyRG93bjpGMSxhcmlhTGFiZWw6IlJlc2l6ZSBzaW11bGF0b3JzIHBhbmVsIn0pLFgoUzgse29wZW46VixvbkNsb3NlOigpPT5MKCExKSx1ZGlkOkMuZGV2aWNlLHRhcmdldHM6by50YXJnZXRzLHNlbGVjdGVkVGFyZ2V0SWQ6eixvblNlbGVjdFRhcmdldDpCLGxvYWRpbmc6by5sb2FkaW5nLGVycm9yOm8uZXJyb3Isb25SZWZyZXNoOigpPT52b2lkIG8ucmVmcmVzaCgpLHdpZHRoOkcxfSksWChxMix7cGFuZWxXaWR0aDpHMSx2aXNpYmxlOlYsb25Qb2ludGVyRG93bjpFMSxhcmlhTGFiZWw6IlJlc2l6ZSBXZWJLaXQgRGV2VG9vbHMgcGFuZWwifSksWCgiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMi41IHRleHQtWzEycHhdIGZvbnQtbW9ubyB0ZXh0LXdoaXRlLzQwIixjaGlsZHJlbjpYKCJzcGFuIix7Y2xhc3NOYW1lOiJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtWzVweF0gW3RyYW5zaXRpb246Y29sb3JfMC4zc10iLHN0eWxlOntjb2xvcjpfPyIjNGFkZTgwIjoiIzY2NiJ9LGNoaWxkcmVuOltYKCJzcGFuIix7Y2xhc3NOYW1lOiJzaXplLTEuNSByb3VuZGVkLWZ1bGwgW3RyYW5zaXRpb246YmFja2dyb3VuZF8wLjNzXSIsc3R5bGU6e2JhY2tncm91bmQ6Xz8iIzRhZGU4MCI6IiM2NjYifX0pLF8/ImxpdmUiOiJjb25uZWN0aW5nIl19KX0pXX0pfSl9YzUoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInJvb3QiKSkucmVuZGVyKFgoQTQse30pKTsKPC9zY3JpcHQ+CjwvYm9keT48L2h0bWw+","base64").toString("utf-8");return ge}function zi(){try{let _=c_("xcrun simctl list devices -j",{encoding:"utf-8",stdio:["ignore","pipe","ignore"],timeout:3000}),e=JSON.parse(_),t=[];for(let[S,i]of Object.entries(e.devices)){if(!/SimRuntime\.iOS-/i.test(S))continue;for(let s of i){if(s.isAvailable===!1)continue;t.push({...s,runtime:S.replace(/^.*SimRuntime\./,"")})}}return t}catch{return[]}}function Ji(){try{let _=Number(c_("sysctl -n hw.memsize",{encoding:"utf-8",stdio:["ignore","pipe","ignore"],timeout:1500}).trim()),e=Number(c_("sysctl -n hw.pagesize",{encoding:"utf-8",stdio:["ignore","pipe","ignore"],timeout:1500}).trim()),t=c_("vm_stat",{encoding:"utf-8",stdio:["ignore","pipe","ignore"],timeout:1500}),S=(s)=>{let C=t.match(s);return C?Number(C[1]):0},i=S(/Pages free:\s+(\d+)/)+S(/Pages inactive:\s+(\d+)/)+S(/Pages speculative:\s+(\d+)/);return{totalBytes:Number.isFinite(_)?_:0,availableBytes:i*(Number.isFinite(e)?e:4096)}}catch{return{totalBytes:0,availableBytes:0}}}function Zi(){try{let _=c_("ps -axo rss=,args=",{encoding:"utf-8",stdio:["ignore","pipe","ignore"],timeout:3000,maxBuffer:8388608}),e={},t=0,S=/\/Devices\/([0-9A-F-]{36})\//i;for(let i of _.split(`
40
- `)){let s=i.trimStart();if(!s)continue;let C=S.exec(s);if(!C)continue;let A=Number(s.split(/\s+/,1)[0]);if(!Number.isFinite(A))continue;let $=A*1024,n=C[1].toUpperCase();e[n]=(e[n]??0)+$,t+=$}return{perUdid:e,totalBytes:t}}catch{return{perUdid:{},totalBytes:0}}}function Qi(){let{totalBytes:_,availableBytes:e}=Ji(),t=Zi(),S=Object.keys(t.perUdid).length,i=S>0?t.totalBytes/S:0,s=i>=268435456?"measured":"estimated",C=s==="measured"?i:ji,A=C>0?Math.max(0,Math.floor(e/C)):0;return{totalBytes:_,availableBytes:e,runningSimulators:S,perSimAvgBytes:C,perSimSource:s,estimatedAdditional:A}}function Yi(){if(process.argv[0]&&/(^|\/)serve-sim$/.test(process.argv[0]))return{command:process.argv[0],baseArgs:[]};if(process.argv[1]&&/(^|\/)serve-sim\.js$/.test(process.argv[1]))return{command:process.argv[0],baseArgs:[process.argv[1]]};try{let _=c_("command -v serve-sim",{encoding:"utf-8",stdio:["ignore","pipe","ignore"],timeout:1500}).trim();if(_)return{command:_,baseArgs:[]}}catch{}return null}function _C(_){let e=(_?.basePath??"/.sim").replace(/\/+$/,"");return(t,S,i)=>{let s=t.url??"",C=s.indexOf("?"),A=C===-1?s:s.slice(0,C),$=Gi(s)??_?.device??null,n=e==="/"?"/devtools-frontend":`${e}/devtools-frontend`;if(A===n||A.startsWith(`${n}/`)){(async()=>{let c=A===n?"inspector.html":A.slice(n.length+1);if(c.split("/").some((o)=>o==="..")){S.writeHead(400,{"Content-Type":"text/plain; charset=utf-8"}),S.end("Invalid asset path");return}try{let o=await fetch(`https://chrome-devtools-frontend.appspot.com/serve_rev/@${mi}/${c}${C===-1?"":s.slice(C)}`),B={"Cache-Control":"public, max-age=604800"},p=o.headers.get("content-type");if(p)B["Content-Type"]=p;S.writeHead(o.status,B),S.end(Buffer.from(await o.arrayBuffer()))}catch(o){S.writeHead(502,{"Content-Type":"text/plain; charset=utf-8"}),S.end(o instanceof Error?o.message:"Failed to load DevTools frontend")}})();return}if(A===e||A===e+"/"){let c=y_(),o=a_(c,$),B=xi();if(o){let p=(e===""?"":e)+"/grid/api",l=`<script>window.__SIM_PREVIEW__=${JSON.stringify({...o,basePath:e,logsEndpoint:z_(e,"/logs",o.device),appStateEndpoint:z_(e,"/appstate",o.device),axEndpoint:z_(e,"/ax",o.device),devtoolsEndpoint:z_(e,"/devtools",o.device),serveSimBin:Ki(),gridApiEndpoint:p,gridStartEndpoint:p+"/start",gridShutdownEndpoint:p+"/shutdown",gridMemoryEndpoint:p+"/memory",previewEndpoint:e===""?"/":e})}</script>`;B=B.replace("<!--__SIM_PREVIEW_CONFIG__-->",l)}S.writeHead(200,{"Content-Type":"text/html; charset=utf-8","Cache-Control":"no-store"}),S.end(B);return}if(A===e+"/grid/api/memory"){S.writeHead(200,{"Content-Type":"application/json","Cache-Control":"no-store"}),S.end(JSON.stringify(Qi()));return}if(A===e+"/grid/api"){let c=y_(),o=new Map(c.map((F)=>[F.device,F])),p=zi().map((F)=>{let b=o.get(F.udid);return{device:F.udid,name:F.name,runtime:F.runtime,state:F.state,helper:b?{port:b.port,url:b.url,streamUrl:b.streamUrl,wsUrl:b.wsUrl}:null}}),u=(F)=>{if(/iphone/i.test(F))return 0;if(/ipad/i.test(F))return 1;if(/watch/i.test(F))return 2;if(/(apple\s*tv|^tv\b)/i.test(F))return 3;if(/vision|reality/i.test(F))return 4;return 5},l=(F)=>F.helper?0:F.state==="Booted"?1:2;p.sort((F,b)=>u(F.name)-u(b.name)||l(F)-l(b)||F.name.localeCompare(b.name)),S.writeHead(200,{"Content-Type":"application/json","Cache-Control":"no-store"}),S.end(JSON.stringify({devices:p}));return}if(A===e+"/grid/api/shutdown"&&t.method==="POST"){let c="";t.on("data",(o)=>{c+=typeof o==="string"?o:o.toString()}),t.on("end",()=>{let o="";try{o=JSON.parse(c).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(o)){S.writeHead(400,{"Content-Type":"application/json"}),S.end(JSON.stringify({ok:!1,error:"Invalid or missing udid"}));return}h_={at:0,booted:null},kt("xcrun",["simctl","shutdown",o],{timeout:30000},(B,p,u)=>{if(B){S.writeHead(500,{"Content-Type":"application/json"}),S.end(JSON.stringify({ok:!1,error:u?.toString().trim()||B.message}));return}S.writeHead(200,{"Content-Type":"application/json"}),S.end(JSON.stringify({ok:!0}))})});return}if(A===e+"/grid/api/start"&&t.method==="POST"){let c="";t.on("data",(o)=>{c+=typeof o==="string"?o:o.toString()}),t.on("end",()=>{let o="";try{o=JSON.parse(c).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(o)){S.writeHead(400,{"Content-Type":"application/json"}),S.end(JSON.stringify({ok:!1,error:"Invalid or missing udid"}));return}let B=Yi();if(!B){S.writeHead(500,{"Content-Type":"application/json"}),S.end(JSON.stringify({ok:!1,error:"serve-sim CLI not found in PATH. Install it (npm i -g serve-sim) and retry."}));return}let p=de(B.command,[...B.baseArgs,"--detach",o],{stdio:["ignore","pipe","pipe"],detached:!1}),u="",l="";p.stdout?.on("data",(b)=>{u+=b.toString()}),p.stderr?.on("data",(b)=>{l+=b.toString()});let F=setTimeout(()=>{try{p.kill("SIGTERM")}catch{}},180000);p.on("close",(b)=>{if(clearTimeout(F),b===0)S.writeHead(200,{"Content-Type":"application/json"}),S.end(JSON.stringify({ok:!0,stdout:u.trim()}));else S.writeHead(500,{"Content-Type":"application/json"}),S.end(JSON.stringify({ok:!1,error:l.trim()||u.trim()||`serve-sim exited with code ${b}`}))})});return}if(A===e+"/devtools"){(async()=>{let c=y_();if(!a_(c,$)){S.writeHead(404,{"Content-Type":"application/json"}),S.end(JSON.stringify({error:"No serve-sim device"}));return}try{let B=await we(),p=await B.listTargets(),u=ki(t.headers?.host,B.port),l=p.map((F)=>({...F,webSocketDebuggerUrl:`ws://${u}/devtools/page/${encodeURIComponent(F.id)}`,devtoolsFrontendUrl:Xi(n,u,F.id)}));S.writeHead(200,{"Content-Type":"application/json","Cache-Control":"no-store"}),S.end(JSON.stringify({port:B.port,targets:l}))}catch(B){S.writeHead(500,{"Content-Type":"application/json"}),S.end(JSON.stringify({error:B instanceof Error?B.message:"Failed to start inspect-webkit"}))}})();return}if(A===e+"/devtools/release"&&t.method==="POST"){let c="";t.on("data",(o)=>c+=o),t.on("end",async()=>{try{let o=c?JSON.parse(c):{};(await we()).releaseHighlight?.(o.targetId),S.writeHead(200,{"Content-Type":"application/json"}),S.end("{}")}catch(o){S.writeHead(500,{"Content-Type":"application/json"}),S.end(JSON.stringify({error:o instanceof Error?o.message:"Failed to release"}))}});return}if(A===e+"/devtools/highlight"&&t.method==="POST"){let c="";t.on("data",(o)=>c+=o),t.on("end",async()=>{try{let{targetId:o,on:B}=JSON.parse(c||"{}");if(!o){S.writeHead(400,{"Content-Type":"application/json"}),S.end(JSON.stringify({error:"Missing targetId"}));return}let p=await we();if(!p.highlightTarget){S.writeHead(501,{"Content-Type":"application/json"}),S.end(JSON.stringify({error:"highlightTarget not supported by inspect-webkit"}));return}await p.highlightTarget(o,!!B),S.writeHead(200,{"Content-Type":"application/json"}),S.end("{}")}catch(o){S.writeHead(500,{"Content-Type":"application/json"}),S.end(JSON.stringify({error:o instanceof Error?o.message:"Failed to highlight target"}))}});return}if(A===e+"/api"){let c=y_(),o=a_(c,$);S.writeHead(200,{"Content-Type":"application/json","Cache-Control":"no-store"}),S.end(JSON.stringify(o||null));return}if(A===e+"/ax"){let c=y_(),o=a_(c,$);if(!o){S.writeHead(404),S.end("No serve-sim device");return}S.writeHead(200,{"Content-Type":"text/event-stream","Cache-Control":"no-cache",Connection:"keep-alive","X-Accel-Buffering":"no"}),S.write(`:
39
+ `+D)}function o(r,y,D,d,w,V){if(r.listenerCount("wsClientError")){let m=Error(w);Error.captureStackTrace(m,o),r.emit("wsClientError",m,D,y)}else b(D,d,w,V)}});$r=i_(ns(),1),Ar=i_(be(),1),or=i_(N_(),1),nr=i_(BS(),1),yr=i_(DS(),1),ar=i_(TS(),1),ds=i_(ve(),1),lS=i_(ys(),1),cS=ds.default;Us={"Network.setUserAgentOverride":"Page.overrideUserAgent","Network.setCacheDisabled":"Network.setResourceCachingDisabled"},Gs={"Network.requestWillBeSent":{walltime:"wallTime"}},Is={hasUserGesture:!1,redirectHasExtraInfo:!1},qs={hasExtraInfo:!1},Xs={encodedDataLength:0,shouldReportCorbBlocking:!1},ks={initialPriority:"Medium",referrerPolicy:"origin"},Ks={connectionReused:!1,connectionId:0,fromDiskCache:!1,fromServiceWorker:!1,encodedDataLength:0};ti={"media-rule":"mediaRule","media-import-rule":"importRule","media-style-node":"inlineSheet","media-link-node":"linkedSheet"};$i={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:""};Bi=["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"],Di={"Inspector.enable":{},"Inspector.disable":{},"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:[]}};fi={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;"}});var ZS={};tS(ZS,{simMiddleware:()=>AC,selectServeSimState:()=>a_,previewConfigForState:()=>he,parseForegroundAppLogMessage:()=>JS,matchInstalledAppByDisplayName:()=>zi});import{readdirSync as Li,readFileSync as Wi,existsSync as zS,unlinkSync as GS}from"fs";import{execSync as c_,spawn as ge,exec as Pi,execFile as jS}from"child_process";import{tmpdir as Mi}from"os";import{join as Ve}from"path";import{createServer as Ui}from"net";import{randomBytes as Gi,timingSafeEqual as Ii}from"crypto";function qS(_){return!xi.test(_)}function JS(_){let e=/\[app<([^>]+)>:(\d+)\] Setting process visibility to: Foreground/.exec(_);if(!e)return null;return{bundleId:e[1],pid:parseInt(e[2],10)}}function XS(_,e){if(ki.has(e))return Promise.resolve(!0);return new Promise((S)=>{jS("xcrun",["simctl","get_app_container",_,e,"app"],{timeout:2000},(t,s)=>{if(t)return S(!1);let i=s.trim();if(!i)return S(!1);for(let C of Ki)if(zS(Ve(i,C)))return S(!0);S(!1)})})}function kS(_){return _.trim().replace(/\s+/g," ").toLowerCase()}function zi(_,e){let S=kS(e);if(!S)return null;for(let[t,s]of Object.entries(_))if([s.CFBundleDisplayName,s.CFBundleName,s.CFBundleExecutable].filter((C)=>typeof C==="string").some((C)=>kS(C)===S))return s.CFBundleIdentifier||t;return null}function ji(){let _=Date.now();if(m_.booted&&_-m_.at<1500)return m_.booted;try{let e=c_("xcrun simctl list devices booted -j",{encoding:"utf-8",stdio:["ignore","pipe","pipe"],timeout:3000}),S=JSON.parse(e),t=new Set;for(let s of Object.values(S.devices))for(let i of s)if(i.state==="Booted")t.add(i.udid);return m_={at:_,booted:t},t}catch{return null}}function y_(){let _;try{_=Li(IS).filter((t)=>t.startsWith("server-")&&t.endsWith(".json"))}catch{return[]}let e=ji(),S=[];for(let t of _){let s=Ve(IS,t);try{let i=JSON.parse(Wi(s,"utf-8"));try{process.kill(i.pid,0)}catch{try{GS(s)}catch{}continue}if(e&&!e.has(i.device)){try{process.kill(i.pid,"SIGTERM")}catch{}try{GS(s)}catch{}continue}S.push(i)}catch{}}return S}function a_(_,e){if(e)return _.find((S)=>S.device===e)??null;return _[0]??null}function Ji(_){let e=_.indexOf("?");if(e===-1)return null;return new URLSearchParams(_.slice(e+1)).get("device")}function j_(_,e,S){return`${`${_}${e}`}?device=${encodeURIComponent(S)}`}function he(_,e,S,t){let s=(e===""?"":e)+"/grid/api";return{..._,basePath:e,logsEndpoint:j_(e,"/logs",_.device),appStateEndpoint:j_(e,"/appstate",_.device),axEndpoint:j_(e,"/ax",_.device),devtoolsEndpoint:j_(e,"/devtools",_.device),serveSimBin:S,gridApiEndpoint:s,gridStartEndpoint:s+"/start",gridShutdownEndpoint:s+"/shutdown",gridMemoryEndpoint:s+"/memory",previewEndpoint:e===""?"/":e,execToken:t}}async function Zi(_){return new Promise((e)=>{let S=Ui();S.once("error",()=>e(!1)),S.once("listening",()=>S.close(()=>e(!0))),S.listen(_,"127.0.0.1")})}async function KS(_){let e=`http://127.0.0.1:${_}`;try{let S=await fetch(`${e}/json/version`);if(!S.ok)return null;if((await S.json()).Browser!=="Safari/inspect-webkit")return null;return{port:_,cdpUrl:e,async listTargets(){return(await(await fetch(`${e}/json/list`)).json()).filter((C)=>C.id.startsWith("sim:")).map((C)=>{let $=C.id.split(":")[1],A=C.description?.match(/\(([^)]+)\)/)?.[1];return{id:C.id,title:C.title||C.url||"Untitled",url:/^https?:/i.test(C.url)?C.url:"about:blank",type:C.type||"page",udid:$,bundleId:A}})}}}catch{return null}}async function He(){if(n_)try{return await(await n_).listTargets(),n_}catch{n_=null}return n_=(async()=>{let{startCdpServer:_}=await Promise.resolve().then(() => (US(),MS));for(let e=z_;e<z_+50;e++){if(!await Zi(e)){let S=await KS(e);if(S)return S;continue}try{let S=await _({host:"127.0.0.1",port:e});return{port:e,cdpUrl:`http://127.0.0.1:${e}`,async listTargets(){return S.getTargets().filter((t)=>t.source?.kind==="simulator").map((t)=>{let s=t.url??"";return{id:t.targetId,title:t.title||t.appName||s||"Untitled",url:/^https?:/i.test(s)?s:"about:blank",type:t.type||"page",appName:t.appName,bundleId:t.bundleId,udid:t.source?.id,inUseByOtherInspector:!!t.inUseByOtherInspector}})},highlightTarget:S.highlightTarget?.bind(S),releaseHighlight:S.releaseHighlight?.bind(S)}}catch(S){if(S?.code==="EADDRINUSE"){let t=await KS(e);if(t)return t;continue}throw S}}throw Error(`No available inspect-webkit port found in ${z_}-${z_+49}`)})().catch((_)=>{throw n_=null,_}),n_}function Qi(_,e,S){let t=new URL(`${_}/inspector.html`,"http://serve-sim.local");return t.searchParams.set("ws",`${e}/devtools/page/${S}`),`${t.pathname}${t.search}`}function Yi(_,e){return`127.0.0.1:${e}`}function xS(){try{let _=process.argv;if(_[1]&&zS(_[1]))return _[1]}catch{}return"serve-sim"}function _C(){if(!Ne)Ne=Buffer.from("PCFkb2N0eXBlIGh0bWw+CjxodG1sPjxoZWFkPgo8bWV0YSBjaGFyc2V0PSJ1dGYtOCI+CjxtZXRhIG5hbWU9InZpZXdwb3J0IiBjb250ZW50PSJ3aWR0aD1kZXZpY2Utd2lkdGgsaW5pdGlhbC1zY2FsZT0xIj4KPHRpdGxlPlNpbXVsYXRvciBQcmV2aWV3PC90aXRsZT4KPGxpbmsgcmVsPSJpY29uIiB0eXBlPSJpbWFnZS94LWljb24iIGhyZWY9ImRhdGE6aW1hZ2UveC1pY29uO2Jhc2U2NCxBQUFCQUFVQUVCQUFBQUVBSUFBNEJnQUFWZ0FBQUNBZ0FBQUJBQ0FBUEFvQUFJNEdBQUF3TUFBQUFRQWdBS0VQQUFES0VBQUFnSUFBQUFFQUlBQ2NPQUFBYXlBQUFBQUFBQUFCQUNBQS9wb0FBQWRaQUFDSlVFNUhEUW9hQ2dBQUFBMUpTRVJTQUFBQUVBQUFBQkFJQmdBQUFCL3ovMkVBQUFBRVowRk5RUUFBc1k4TC9HRUZBQUFBSUdOSVVrMEFBSG9tQUFDQWhBQUErZ0FBQUlEb0FBQjFNQUFBNm1BQUFEcVlBQUFYY0p5NlVUd0FBQUI0WlZoSlprMU5BQ29BQUFBSUFBUUJHZ0FGQUFBQUFRQUFBRDRCR3dBRkFBQUFBUUFBQUVZQktBQURBQUFBQVFBQ0FBQ0hhUUFFQUFBQUFRQUFBRTRBQUFBQUFBQUFrQUFBQUFFQUFBQ1FBQUFBQVFBRG9BRUFBd0FBQUFFQUFRQUFvQUlBQkFBQUFBRUFBQUFRb0FNQUJBQUFBQUVBQUFBUUFBQUFBT2JZeVZNQUFBQUpjRWhaY3dBQUZpVUFBQllsQVVsU0pQQUFBQUtjYVZSWWRGaE5URHBqYjIwdVlXUnZZbVV1ZUcxd0FBQUFBQUE4ZURwNGJYQnRaWFJoSUhodGJHNXpPbmc5SW1Ga2IySmxPbTV6T20xbGRHRXZJaUI0T25odGNIUnJQU0pZVFZBZ1EyOXlaU0EyTGpBdU1DSStDaUFnSUR4eVpHWTZVa1JHSUhodGJHNXpPbkprWmowaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1UazVPUzh3TWk4eU1pMXlaR1l0YzNsdWRHRjRMVzV6SXlJK0NpQWdJQ0FnSUR4eVpHWTZSR1Z6WTNKcGNIUnBiMjRnY21SbU9tRmliM1YwUFNJaUNpQWdJQ0FnSUNBZ0lDQWdJSGh0Ykc1ek9uUnBabVk5SW1oMGRIQTZMeTl1Y3k1aFpHOWlaUzVqYjIwdmRHbG1aaTh4TGpBdklnb2dJQ0FnSUNBZ0lDQWdJQ0I0Yld4dWN6cGxlR2xtUFNKb2RIUndPaTh2Ym5NdVlXUnZZbVV1WTI5dEwyVjRhV1l2TVM0d0x5SStDaUFnSUNBZ0lDQWdJRHgwYVdabU9saFNaWE52YkhWMGFXOXVQakUwTkR3dmRHbG1aanBZVW1WemIyeDFkR2x2Ymo0S0lDQWdJQ0FnSUNBZ1BIUnBabVk2V1ZKbGMyOXNkWFJwYjI0K01UUTBQQzkwYVdabU9sbFNaWE52YkhWMGFXOXVQZ29nSUNBZ0lDQWdJQ0E4ZEdsbVpqcFNaWE52YkhWMGFXOXVWVzVwZEQ0eVBDOTBhV1ptT2xKbGMyOXNkWFJwYjI1VmJtbDBQZ29nSUNBZ0lDQWdJQ0E4WlhocFpqcFFhWGhsYkZsRWFXMWxibk5wYjI0K01qVTJQQzlsZUdsbU9sQnBlR1ZzV1VScGJXVnVjMmx2Ymo0S0lDQWdJQ0FnSUNBZ1BHVjRhV1k2VUdsNFpXeFlSR2x0Wlc1emFXOXVQakkxTmp3dlpYaHBaanBRYVhobGJGaEVhVzFsYm5OcGIyNCtDaUFnSUNBZ0lDQWdJRHhsZUdsbU9rTnZiRzl5VTNCaFkyVStNVHd2WlhocFpqcERiMnh2Y2xOd1lXTmxQZ29nSUNBZ0lDQThMM0prWmpwRVpYTmpjbWx3ZEdsdmJqNEtJQ0FnUEM5eVpHWTZVa1JHUGdvOEwzZzZlRzF3YldWMFlUNEs2ZjdKY1FBQUFvSkpSRUZVT0JHbFVzOXJFMEVVL21abWs5MU5paVd4MHRvcVZSRHhvQ0NtSUhnVVdpaWV2UFRrU2NHVENJSUhFUS8xRC9BaWluK0NKdzhxZUZERVMrMUZnZ0VWV3l5MDBDYllObW1iNXNkbXM3c3pmck90cGZjK2RuYmY3SHZ2ZTkvN1pvQWptamhjYndEMWJIZTNVRzA2N2tZdkVBR0RXMTB1T2x1ZWIzUWNoN1dKWS9YRE5RY0FkNVo2NTc1MW5PZk5VSlFTcmQxWUE0WlJUZFNFdnJhWlVvWUNwdXlZK1A3bU5XL0pBcVVBNXN1c2M4bC85R0ZGdUpNNk1QeHBZRmdvNUY1QzZqUFRScVRIMVEwL05UZmZUV05tSm5Fc3l0UGlyV0tyTGt2OVVHT2lZSEJqUkNLeDg2UkZUS0NmSWRqbkRZMjVob0FqWkduWXVYSjhIZGhJQVdvdDRTVmRPQ01zbUM0S1hQVU5hcDBFemI2QXNCeEp3WFVraGpnS3V1U2g0S2kyOExoREN0Q2pTSjFkNE1GRmdTZm5iUVV3VjR2d2FqbUJiMXNUd0ZFSzFSYjlEdU1xVFVsZktVRFE0Nnc5ZHJFZGFGYkFJVTlpY2xTZzZOdHNnNGdxanUwQXl3Mmd6WHpFTm5PZndmWTJ2YTVBMUdlRHlLVEtEeWlEVTVrRWl0MnRpRW9LVEExTHhLSEV5N0pCUWZ1b0hRYXc2b2NjcGRIUkZFeGd2YVh4ZlMyQ2w3RWtMU2hucHlBNnpNTHRhM2dwOS84YWtBSGxRa0lHOVRibmxScTFIWU9mVmY1WDdNcVI4bVJqcmRyV2tJSEE2QW1nekgySzArMTNRektPRjFZTnlqbnlaY2NmYXhxVkZRZDFKc2QyL2tGN2ZCcXJUWWxjRnZGQTBBZ3RZQW93UHYrbThhZjBzUEoxTVg5OS9oYzdFU05Lc2xEc3pnZVMreW9QM2ZCcUtsY2luM1FxTjBkLzExOFRZTy9NNkp5NXUzZ2g5c2RlUUdRdUcyTmNLNXk5QTVRai9UcEVVWTRNZlJWVnhnYzI3NzEvZkhiQk1qZ0FzQnVhT0gzNzQwa0Izek1KYnhITmRZRkJya0krYTNKZTBIczdPL1dYZ2YwRHR4bEh0SDg0aWhRSmZTYXpqUUFBQUFCSlJVNUVya0pnZ29sUVRrY05DaG9LQUFBQURVbElSRklBQUFBZ0FBQUFJQWdHQUFBQWMzcDY5QUFBQUFSblFVMUJBQUN4and2OFlRVUFBQUFnWTBoU1RRQUFlaVlBQUlDRUFBRDZBQUFBZ09nQUFIVXdBQURxWUFBQU9wZ0FBQmR3bkxwUlBBQUFBSGhsV0VsbVRVMEFLZ0FBQUFnQUJBRWFBQVVBQUFBQkFBQUFQZ0ViQUFVQUFBQUJBQUFBUmdFb0FBTUFBQUFCQUFJQUFJZHBBQVFBQUFBQkFBQUFUZ0FBQUFBQUFBQ1FBQUFBQVFBQUFKQUFBQUFCQUFPZ0FRQURBQUFBQVFBQkFBQ2dBZ0FFQUFBQUFRQUFBQ0NnQXdBRUFBQUFBUUFBQUNBQUFBQUFmZ3ZhVWdBQUFBbHdTRmx6QUFBV0pRQUFGaVVCU1ZJazhBQUFBcHhwVkZoMFdFMU1PbU52YlM1aFpHOWlaUzU0YlhBQUFBQUFBRHg0T25odGNHMWxkR0VnZUcxc2JuTTZlRDBpWVdSdlltVTZibk02YldWMFlTOGlJSGc2ZUcxd2RHczlJbGhOVUNCRGIzSmxJRFl1TUM0d0lqNEtJQ0FnUEhKa1pqcFNSRVlnZUcxc2JuTTZjbVJtUFNKb2RIUndPaTh2ZDNkM0xuY3pMbTl5Wnk4eE9UazVMekF5THpJeUxYSmtaaTF6ZVc1MFlYZ3Ribk1qSWo0S0lDQWdJQ0FnUEhKa1pqcEVaWE5qY21sd2RHbHZiaUJ5WkdZNllXSnZkWFE5SWlJS0lDQWdJQ0FnSUNBZ0lDQWdlRzFzYm5NNmRHbG1aajBpYUhSMGNEb3ZMMjV6TG1Ga2IySmxMbU52YlM5MGFXWm1MekV1TUM4aUNpQWdJQ0FnSUNBZ0lDQWdJSGh0Ykc1ek9tVjRhV1k5SW1oMGRIQTZMeTl1Y3k1aFpHOWlaUzVqYjIwdlpYaHBaaTh4TGpBdklqNEtJQ0FnSUNBZ0lDQWdQSFJwWm1ZNldGSmxjMjlzZFhScGIyNCtNVFEwUEM5MGFXWm1PbGhTWlhOdmJIVjBhVzl1UGdvZ0lDQWdJQ0FnSUNBOGRHbG1aanBaVW1WemIyeDFkR2x2Ymo0eE5EUThMM1JwWm1ZNldWSmxjMjlzZFhScGIyNCtDaUFnSUNBZ0lDQWdJRHgwYVdabU9sSmxjMjlzZFhScGIyNVZibWwwUGpJOEwzUnBabVk2VW1WemIyeDFkR2x2YmxWdWFYUStDaUFnSUNBZ0lDQWdJRHhsZUdsbU9sQnBlR1ZzV1VScGJXVnVjMmx2Ymo0eU5UWThMMlY0YVdZNlVHbDRaV3haUkdsdFpXNXphVzl1UGdvZ0lDQWdJQ0FnSUNBOFpYaHBaanBRYVhobGJGaEVhVzFsYm5OcGIyNCtNalUyUEM5bGVHbG1PbEJwZUdWc1dFUnBiV1Z1YzJsdmJqNEtJQ0FnSUNBZ0lDQWdQR1Y0YVdZNlEyOXNiM0pUY0dGalpUNHhQQzlsZUdsbU9rTnZiRzl5VTNCaFkyVStDaUFnSUNBZ0lEd3ZjbVJtT2tSbGMyTnlhWEIwYVc5dVBnb2dJQ0E4TDNKa1pqcFNSRVkrQ2p3dmVEcDRiWEJ0WlhSaFBncnAvc2x4QUFBR2hrbEVRVlJZQ2UxV3pZOFVSUlIvVlYwOTNiUExmbVVYa0JESTdvVUVSU1ZySUFvbTNreU1GeEtQbmpRbXhJTlhUTlNMQ1RHR2kvNEZHaE1UalViQ3djQkJFMDFBQ0pKZEVrRUlBbUVGQVlGZGxtVm1kcVkvcXN2ZnIyYUc2VmtXcm5yd0pkWFZYZjNxdmQvN3JCTDVuLzVsRDZoSDZYZUgzNGtPN056LzdKKzE0TWtrTUJPdFhFVlpManJIaHJ3UVNUQUtMWkppWGs0eFk3MkZueTE4NXdxL2pFdXlMSjgzeXA1YlAvdjE2Wm05ZTdQVmRLMEs0T1ByQzd1T0xvOGN1RnhUTDlSRmF4ZEFxSVZDMXhiaE9yUEdPbDh0RkhQdURnV3BBZmRBcGJKRllZdzdVY21XOXQzWU5YNThKWWlIQU95ZnU3WHJjR1BpK3pNMVBXWmJWclJ5WW93U2E1MTBGVk1JTndhQjhrb0wvQ3RURzRDU1BPZTZFaFVGWXFSWXJOcDdyMTdmUFg2aXpBc245dWo0OFcrcXgycWpuL3kycE1lS0p2eE5qWEFwaDFzeENueHpjTDM3WHA1Ny9FNG9LeTMwV0t0WTgrbms1ei9GUFkwQ1lDVTZNanc5UFZjek8yemRDb3p6NURFQVIwQXNaUmZncjBlUGRkZU5UVWVXeGw0UERLSGh1eWZFMElabVI3cDJhaHJmRDBMUkIrQjJNdkpVM1dxbEVUenVnM0V5Q0k0M3BnSlpXMEdzb2F4TWREVnBCUzRQL2o1eTVvdUx1ZHhwQWJ6blF3aE5xS3dNYnNPVzFRRWtFa3dnNUZLQlpPNWh0bThjVURLOVJvbEdtaGY4U2VMa2hmS0JqODdFWDN6bnA0NlVURldWTERTZGhCMDNjREk2bVBCOG5VZWZCNUxNUlRrUUYwazc0UnJJNGlZc24yOWlEUW1KaFBiV2hqQ0pTbFRIQlc2RkN6UTBtVEFRQ3psRkM2T3JCVEd6cVlzZUNjQW15RHRhbWlvWlFORGYzNmJsdVhFbG13ZGhwNFZLcCtWR3M1Q2pONEVNTmFpN0FPaUZMZ2lzYWEwbFJQd3RLeC9ERllTTEdhVXAyWU9zOEd0ZGJQNGp4eVp1eU9DRkZ6Y3AyYmVWTzdyVUxwZ3RJNEdjdXRHU0t6V1J5TFQvdHozUUNRL1kwVGtrcXNCeXlGSWNUQ2FRZ2piZnlkcWYvdGtQQU5ZckQ4SUp3dTZKWWt2R2VkZmZiMXE1ZGs5SlhFRWY4TVo3cnZZR2NMQUpEY1RPTnlqS1V4MEJCQ09VWDZLSEFEZ3dPVEFWSFVZbVlqZkdqQzB6T29TYnA0WUQyWXhSRGZrTkpSZ1d2QWxLcFo0cHVZY21WRUY1SnVqTkJvM0kyME9aandVQUFheDM0eEJIV2daKzlucGZqNUJBaDdQOXZyWWxGcVZEcVJpRUJkYVJyMHhNVHFiTUs1TmF2anlYeTZHTERsN1JYbVpBZVNYcTgwREtFTUFEUGs2bzR4U1NVeUNtQjJrNXJTUTFtNW5VWUtHQjBCNkJpVWpBUkFBQnZEV0VaSHo3NlJCblFpYUhMcUFER0NQbWNRQmFLTGNjSUh6NUFFZ0NFQzBvWWd4cExFUEFwcmVFSEZoTTRQcE9FaEtFMTkxQlF3RGtSZW5BWTRIc1hxL2x5TytaV0NSMzNER2l3OXJmaXJNVkh1RHgyc3djV2k3aUNkZnpZS0psTmRUMjNXV3NoVlJib2c0S2YwUUJSQUcwRG51Y0NtVVFNVjJHVVRINlNwbjZRd0NFTklWaEFIaHBZVjVHSENqUUFvQkRnMWRJZ29WNklUZFJobkVGYnVsYTVMSDA1d09UVXBFRmZpOGdCMmtqbGNjQmFBRUFlbzNQVkFMZ1JhTU9hMkdMWklCcWVRT0JSYmRyVHY1YUxDU09BQWdhWXJpSDNiR1pXa2t6NnpGMW9SakVqaTI4VmtkcGpnQkEyWHk4OTNrQTVWY3d5d01vWi9Ob0FuVUQ3WlE1a0VCQmhud2d3SVdHa3IrWGxBd1BCakkrRk1yY2dwVmJPSDIyYlF4eFlBV3lXSWNndUI5UmtBMWpSazVmemFTQUM1bUFsUlZIWng4QVpWM0taQXRRaGdWQXBMaGJKYWhwRnFCR2ZjTTRDYkREd0pjREZXUTAwSjY4bE1rZmQranFRSzdNRjdKOW84akVtb3Evd0xCSXpsN0w1ZHgxSllNUitCR21XTEhaOTZnUFFOWklGM0ljRlJxSk4zT3BrRk9iUkVaeGZTZ0FpRVJ3cDY4bTh0MnZLZTk5MGtTWHltQnhCZVdtd0pQZzVEdDJvWkNoS0lkQ1ZFc2psM3JLRUJsVUZnV3d4TzI4RjlaNTlBR1F4dng1SmVza3dPRnhGeTcrOEdDS294U1hFNWhpa1ZIc2lHZ0JLSzBCOUFERVBkU0MyNXEzbG9IbkdSbXBRTmhQVVBwWUQzQ280UWRjWDBCbWpNUWFjcmZPbHdIQXBoNDF6aHljTVhsckZvZXBCMkVrUkNoaW5HWVJSZ3doVmFtYUt0eklob0phNzdaV3psRFlIVnpuL3dEdHNIMjJJSFRZc3pacXpZN09INXp0YVdSd1M3UTg5M002dm5YUFpSMnQyNFBhalhnRkFuNWYrN1FDeWV5SDd6cDQ1M0hNTlY2L3V2ODRrOWlNZUo0NHRuVVR5dWJSN1A1a2NPYXR6ejU0L1VLYm8vMmsvSWRvNnMxZlhpNUduL2tJaFRhTkM3NEtFU2hleTltU3k4UlRqd0o4dldObTF2T2J0YzhtU1dDeHp0MjY0V1RtQ1RuNzNsZnZQdjlEZVQvZlZ3WEFINk9UMjBlSFhqcXdVOFVidG9hVjZnVEtDeFZFMFQzU0FNYkVSQ3BJekZNUjMreE5KblFGY2ljMXJqay9ZRytmVjhmMm5mejJ4NW1sM3M3LzMvNURIdmdIYWtRU1dLMGpJVXdBQUFBQVNVVk9SSzVDWUlLSlVFNUhEUW9hQ2dBQUFBMUpTRVJTQUFBQU1BQUFBREFJQmdBQUFGY0MrWWNBQUFBRVowRk5RUUFBc1k4TC9HRUZBQUFBSUdOSVVrMEFBSG9tQUFDQWhBQUErZ0FBQUlEb0FBQjFNQUFBNm1BQUFEcVlBQUFYY0p5NlVUd0FBQUI0WlZoSlprMU5BQ29BQUFBSUFBUUJHZ0FGQUFBQUFRQUFBRDRCR3dBRkFBQUFBUUFBQUVZQktBQURBQUFBQVFBQ0FBQ0hhUUFFQUFBQUFRQUFBRTRBQUFBQUFBQUFrQUFBQUFFQUFBQ1FBQUFBQVFBRG9BRUFBd0FBQUFFQUFRQUFvQUlBQkFBQUFBRUFBQUF3b0FNQUJBQUFBQUVBQUFBd0FBQUFBQW02MUswQUFBQUpjRWhaY3dBQUZpVUFBQllsQVVsU0pQQUFBQUtjYVZSWWRGaE5URHBqYjIwdVlXUnZZbVV1ZUcxd0FBQUFBQUE4ZURwNGJYQnRaWFJoSUhodGJHNXpPbmc5SW1Ga2IySmxPbTV6T20xbGRHRXZJaUI0T25odGNIUnJQU0pZVFZBZ1EyOXlaU0EyTGpBdU1DSStDaUFnSUR4eVpHWTZVa1JHSUhodGJHNXpPbkprWmowaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1UazVPUzh3TWk4eU1pMXlaR1l0YzNsdWRHRjRMVzV6SXlJK0NpQWdJQ0FnSUR4eVpHWTZSR1Z6WTNKcGNIUnBiMjRnY21SbU9tRmliM1YwUFNJaUNpQWdJQ0FnSUNBZ0lDQWdJSGh0Ykc1ek9uUnBabVk5SW1oMGRIQTZMeTl1Y3k1aFpHOWlaUzVqYjIwdmRHbG1aaTh4TGpBdklnb2dJQ0FnSUNBZ0lDQWdJQ0I0Yld4dWN6cGxlR2xtUFNKb2RIUndPaTh2Ym5NdVlXUnZZbVV1WTI5dEwyVjRhV1l2TVM0d0x5SStDaUFnSUNBZ0lDQWdJRHgwYVdabU9saFNaWE52YkhWMGFXOXVQakUwTkR3dmRHbG1aanBZVW1WemIyeDFkR2x2Ymo0S0lDQWdJQ0FnSUNBZ1BIUnBabVk2V1ZKbGMyOXNkWFJwYjI0K01UUTBQQzkwYVdabU9sbFNaWE52YkhWMGFXOXVQZ29nSUNBZ0lDQWdJQ0E4ZEdsbVpqcFNaWE52YkhWMGFXOXVWVzVwZEQ0eVBDOTBhV1ptT2xKbGMyOXNkWFJwYjI1VmJtbDBQZ29nSUNBZ0lDQWdJQ0E4WlhocFpqcFFhWGhsYkZsRWFXMWxibk5wYjI0K01qVTJQQzlsZUdsbU9sQnBlR1ZzV1VScGJXVnVjMmx2Ymo0S0lDQWdJQ0FnSUNBZ1BHVjRhV1k2VUdsNFpXeFlSR2x0Wlc1emFXOXVQakkxTmp3dlpYaHBaanBRYVhobGJGaEVhVzFsYm5OcGIyNCtDaUFnSUNBZ0lDQWdJRHhsZUdsbU9rTnZiRzl5VTNCaFkyVStNVHd2WlhocFpqcERiMnh2Y2xOd1lXTmxQZ29nSUNBZ0lDQThMM0prWmpwRVpYTmpjbWx3ZEdsdmJqNEtJQ0FnUEM5eVpHWTZVa1JHUGdvOEwzZzZlRzF3YldWMFlUNEs2ZjdKY1FBQUMrdEpSRUZVYUFYdFdWMklIV2NaZnIvNVBidG5mMDIyS1UzU2xqYjlTUk1DcFdCU1c5QkFiU0V0MUp2Y0ZoUzhLSUpDUVJTdDRJVUI5Y0tmNG9XVW9ONUpJc1ZDSU1YRzJpYUlwaWxwU2tvYTA2aHBaZFBkVFRiWjdPNDVlMmJtekkvUDg4NlozZGt6czBrS3hSdnpuWjJaYjc2ZjkzdWY5L2Y3WmtWdWxWc1MrUCtXZ1BtMDhETVJJd2YzdWxPUFArY3NMSXpiMTJ6SExNNHZtcmtTSWRhWDMxRXAzb3MyZmNmTkdSck9yblhqYk1pYVMrVFFvZTdKbDEvdWxzamNWUFdtQUV4UC82bDV3SC8waVU5Q2IvZHNhTGEyWXVzMnNhMkJvQ3RPa29vRlVCTGp5bEJKV2NjelJzWFllUjNqSkVFYnIyN3Z3anl0NHpYMVBZbURJTzJJbFY2eVRIYld5YUkzbzdOLy8vUE1jMCsxYjRUaWhnQitkZW5xbmxQUjZJL2VYN0Flbm81RVdpR1lTa1JjVHlRTXJrL2VjZkwrbU9oUTFsck1iNEFXYUJzckIyMWpvR1BTVTE1My9zWEpYWjg3bk0rdXY2OUZVMGYvZE9yYTgyKzJSMzV4L0lyeGdrNHNvQzhHTXpqSjk0MkVJZVIzbmVJNE9mbVlLcmxPcWFObGZFZGNxS0tSdEw5MWNlZndyOWVhVHA1cXk4OC9tbnI2TDYyUlh4NmRFcThMNXNtTDFXTytkc0puM0ppRnNVUWQ4UUtyK2RLbW81ZjJyRVcrRnNEQkl3ZEhUeWZyZm54ODFyaUc5Z0lCWnJEWlQzT2xuM0o4TFcyc0hYV05HN2xqUDlueTB1R1JPaEMxQVA2MStRdFBubGx5dHdldFdBd1lVYy9zZnhMWFozalZya0VoTE1VU0czZDc1NzRkVDlVQjZMblo2cTdMMXZEdTZTVVJHd1JNamZreXdsaVk2VU0xakR5MUJlYm05UG9zVldIdEtQVXBOelhTUVhpaTh4bzZXVjlKS0NodmVEZWEvOURYSlJVQWU4SDN0Y2g5c0EwQUt2MitHVEU0M2psaHlkTjMyc0pmdWhZQXpDdDRXUk5rYWN6eHkwWmUrMDlNcUJVUUdTSlVJdDRENkVKZ1JyVlVLZ0MyN2QwMmNMWnJKbUxFYnF1UE94Skh4Sk05bXl4NWdER2VraWtSNjY4V3NyelJHQWFINWpwTFRrNkpUSGN5Y2NobXVUQzlHVE94WWNlT3hzenAwNnR5UXdXQWJOdmxHY2RxZVBRT1o3V0xLQUJ0TXJJRXFTQ0pxZ25oWGw1TzY0YkJ0b1RnZW1NY0lHQ1NhMkk5RHh5NXRLVnlBU0RmTmdPeS9URlBiZ1RBODI2emc0NDRJVTJJNmJKVXVuaE5RQ3pvV3RMS2pBSkllbU80SkNXNVV2QlN2Q3UrS2tpT05aYWxERE9sUkFHaUR0Yk43TldDRTl1bXp6bjIwSVorM1ZSOUlISjlrekJuTVh2Q3VZclNoVGx0SEJDWjhETVpSYk9IZHd1eGo3OE1SdDdHK0NXWWxLdkpndk95WlZ0bWYxNktKOTlVUndDUUFVQW1BZDlwM1dyaEsrdm04ekNhM1pibTBxSkpueFVUaXFMSU1DYlRnZFdKc1NhWi8rNTJTNzV4dndVMW0xSkM2MDNIbUVXRXBsY3ZoUExoUWlZK2paZ3I5a0tZOHI4TW9yZSs5b0VXQUhCNFFKNFQzR0JMeW40WmcvWXQ2L1A2QU9naEthV2dHZ0E5TUg5WFUrU0ZyYlkwS3dyczBjSUM0M0NheHpZNGNtSnFTUm8rUkFVcktFSWlOZERQUDJjU0lNYzUwRUFNdTFlaDZiNkptaW9oS0N1dXQyVHhxR2lBSFJtSVVKMGt5SXc2aWdXOEVyMWljdi9UaC9rc0JyRUVxWXQ5RE5IbUs2c0RvMXJtZytRSWtDYWtDblBSZ0xWNHFTbWhXaTRNeWVYNVJWOHRBQ1lPRFF1UVBqV3RhYjQzZzJ1VXBaa3pna1hSemh3eDMwbkZCV29MRXFVeGNHeXVnZFhMa3lFTE54dmo2QU1OZEd2WVZoL2dZcVh4Sk5MbjF4ekJVZ0hRaGczQmlaZWx3ZTBDSFVzWlp4VzBGSURlY2luU2J5bHZadWlyN1V6R0lOVjFycEVSN0ZnYjZHQlk3RzFNbFMwR3JnaUVPcURiUmdadVJTbk9CcGJ1Ym5WdFNxT3ZHUEswS2dQa0F5b0EyTXdFcGRHQVhHczlVd0Nrd2NWWG9nb0FLQkJJRWhJYWdlMC8vOGlRM0x1dUllTURDSTlvQSs5YXlqeFJ0cndvRFBBdWkxRW1NemhickljZi9mRmNMUFB3YUI4NWdWclNRcUVWOVY1VDhhZ0FJRWhLazR2RFFuVWxGNTRHYTFJSmE5aFhhbVFoai8xcVpxZ1BRZW9QalhKdUpsMHd4ZE1YaTVwUVhsVlR5Mjg1ZlI1aVJvQnlmRmprL29jOWVmSWVSMTQ2RWN2SkdaaVZabE5NeEJnUFROV2RueW9BcUNhZW9Bb256aldRUzR2Q0xqUkFnYWhRUUJ4L0t0RVVuWE90U1B5R0JZMVFER3d2VU9DbGtDS2JVS2VBMUpFaGFndDJTSi9aQkthL3M4dVRIeDRMNWV4c0lnMFhkUERIYURXRWFUTzR5cVVDZ0JxSUFEVU9RUnpxamFIbkJLSWs0MVE1UXl5QmNMazhaeG5WRG5taWxoYVpUV0Z3bWt6Sk1EdldLajBRWko1QTFPbEJtWG5rMlh0c09UTVp3RmNBem5iUVdsOXFBWlExb0NHdHh6eWpVMG9VWkI1M01rbVFCTUxtR0FoYUFSeVNBQXF2TGRaVklHVTB5bjB1Q0FMUUdvVkFoa1UyRDl0eUczYU9sMEdQOUhFRUZ3LzVxTDlVQU5DRUdBa014WWxMa3dzMWdhdXJBRWdpQjdDODN5Y0FiRHM0cG8xTlhnd2ZzT244MXkwRVE4bm4yaVJOMWJBQ1FEdWNlQnhSYkhvUk9RaGhsb3pTaFBwTEJVQUxJN2lWTGlTdlR6QkRFNG9BakptWlRtdmpscHNTR2NBRk1VVVl0d2lKUmVpd25WU2xtaSs0N0FsOTY5Tm9PSnV5eWdHd2hTYmxJekh3UUpYeGd3RG9Ncy9kRkFENmdNWmlTaEFFaW5CSzZlS2NyU2FVSWJQWldJVCt0YnhOQUIvc24yc2prV0d3bzJFUWkwUEVPWXVnMVN1cm8xSU9qc0tnMGptWSs2TWhQRHNRaGtteENOYUdFbXBMUlFNYWhYaUFLQUdnR1hFckhkS1pxV2Y4V1doTUVQNHkyRG9YWm1URkxrS3VJSkY1a0pwRERaQjVjcC9mOUVGR1dUSms2Nkt1N3lTS1loQlhzWHVXRENCbUZ5QU1HQSt0Z09iYXJGRkJCVURIOGJJTU1aeE1FM24reEdZTFJDaGhQWjlpWlRxeFJpaHd6NlNUd2FRSVlCNzdlWmNMZ2pKTkFiYUZmWkVsNjRZY0RZVUVlM1V4aGpCQVFCSGtwb2czQlVxOFk4T1dmRHdiSXlTTERBNWlKZENqckhSTTM2MEN3QVFoTE1Ud3B3QUtFQVFRUUFPTVFqUUJMa1F6b21uUkx5QlBaV294dE1UQlhBZVowRUk0V1Qvc3lOaWdrYitkRCtRQ21OcXl3Wk5kOS9weXRXWExwWGtnNWdJS0JCeUN4UUY4MEJxRWJiNzZiZ3NIUW9DR2FnMHVLRFJ6YXI2a1ZRQjBybDVNUnh6a01tb0FKd2h1ZVQzRVpmVUJTRTIzMmoycnBvQUpyQXRRdEt3WWpGUHBTZVlpSzd0eSs1Z0RqY1J5NEoydXpDNVp5S3dEOHU1RmtjbHJzWHp4UGx2dVd1L0p6SHdxN1pBT2oxMHZwRDB4Yk9USW1Vam1PcDZNREZCcjRBRW0xWEFsSG5FdVliWFZwUUlnbkh3N0NscHBFSElvUWcrbE8zT0Y1dUZBUXBRNHFCWDJtZzlCRzA1VjhJVzVWaXJETGlUWWRLU0RrSFQwZzY1OE9FTTdSRlJCT3o3d2FEaThkQzJWQThkRHVYZEM1SUhiSFprWXNtR2FxVnhaN01vYjcwY3kyN1prY01DVmJrQk5BeHdFbUlacHNIRHFPSUwwNmxJQk1IdnVYRENjSnJQd0lmMXd4Uno0eVpWVTlyOFZ5ak03T0J5eW9zZFNaTFJLNk4zR3k4ZFhZdm5aNFFVNVBZazlESTZlQ2NZMGZGY0djYVVBQ0RsQ2ZaeUVoQVNSOHR6N2J3ajAvRlFNczhIT05JZ29MM0dodVNHWUVXTVh6WmhMTUNjMjdHVDI4bHRuS3R1aENnQ003MXBSNTd6bE5ML0U1RVF1dVpsNzVVUWlyNTFxaTJmbFoyQVAzOFJEZkZMT1J6RCtjNHZzeXVpUXE3YlBEcGR4bGdVQXRHZzA2bFhSNVBIckdIelVBNGNaTm9MOFpSakRQS1A1aCtOUjU1YThhY0lQRDBHSCtleVZleDBBU1Jlbmo5bWo2Nyt1SVJOalNiaUJzQkxESnlMZFltS25DU21HRVdOUlhoeUVDUjlNTU9vUUZCY0dWcFVnL1RRdmFDd1ZqdU5GUjdWd0htQWg4eXNGd1FGengzMUVvMmo2MkVyN1NtMkZnNVUyYWIrei80Z2RkLzVoR2VRLzlZV2NHYmdVdEdIamNpQTlXeVZJS2ZKeUFJaE1rT2xpenMwK2kyeGZOOTUzWE5uWURNN092Zi9iSXlVV2w2czlIUysvYTZWOThlMzIyTlpuWnAzbUhWOUpFa1J6bWdBbGcwdlZpeWNsbmlCaEZlOHF1YjR4UERLeW5hZTY4cmh5blRUWG9wVmx0ank0TVl2dlNOLzc1dS8zZmZYRWFpN3p0MW9Oc091ai9ZKytZaGJPdnRqd3M5aEFDdityd2x4UU9QTzJPN1A0YnYvYzkzL3p3dWRmV1d0OU5kZTFPdEh1M2ZPMW8zdk51a2UrRjV2bVE0ejFtZ2Z3aEE5TGdIODM5YXk4bGtUbFB6U1lWeTU4cFgveFgwd1JBaVMzRUEzWSs5aWd5TWFSOWdkandYdjdmdmZ0eC9sRm1ubTd0dHdJQUNlWjhXMVBiQjdiK1lNdm0rRzdIeGQ3YUV0bTNQVytiemZDeU5qSXl0QmlQUmxFUk4zLzBHUVlrUGo1aEV3eUxQSXNrWC9VTW1uRHk1SzBtd1MrMjUxdG1QWS8zZkRDWHlmZjJQZjZzZGRmbjhUNmZiQlg0NmhmZWZXWThodHRhYkE1TVRIZ3JyL1B6NXh4QkhRWDUvcGVnQytQUkIzQzFKcytXVVdGWDdmWndUWjhGODBzcTV2RlMzTkpOSDgrUEhQbWNnZk4yRTJ0TFhIMDNTcTNKSEJMQWlVSi9CY1lHc1pyMjk1WnJRQUFBQUJKUlU1RXJrSmdnb2xRVGtjTkNob0tBQUFBRFVsSVJGSUFBQUNBQUFBQWdBZ0dBQUFBd3o1aHl3QUFBQVJuUVUxQkFBQ3hqd3Y4WVFVQUFBQWdZMGhTVFFBQWVpWUFBSUNFQUFENkFBQUFnT2dBQUhVd0FBRHFZQUFBT3BnQUFCZHduTHBSUEFBQUFIaGxXRWxtVFUwQUtnQUFBQWdBQkFFYUFBVUFBQUFCQUFBQVBnRWJBQVVBQUFBQkFBQUFSZ0VvQUFNQUFBQUJBQUlBQUlkcEFBUUFBQUFCQUFBQVRnQUFBQUFBQUFDUUFBQUFBUUFBQUpBQUFBQUJBQU9nQVFBREFBQUFBUUFCQUFDZ0FnQUVBQUFBQVFBQUFJQ2dBd0FFQUFBQUFRQUFBSUFBQUFBQW1nTzgxZ0FBQUFsd1NGbHpBQUFXSlFBQUZpVUJTVklrOEFBQUFweHBWRmgwV0UxTU9tTnZiUzVoWkc5aVpTNTRiWEFBQUFBQUFEeDRPbmh0Y0cxbGRHRWdlRzFzYm5NNmVEMGlZV1J2WW1VNmJuTTZiV1YwWVM4aUlIZzZlRzF3ZEdzOUlsaE5VQ0JEYjNKbElEWXVNQzR3SWo0S0lDQWdQSEprWmpwU1JFWWdlRzFzYm5NNmNtUm1QU0pvZEhSd09pOHZkM2QzTG5jekxtOXlaeTh4T1RrNUx6QXlMekl5TFhKa1ppMXplVzUwWVhndGJuTWpJajRLSUNBZ0lDQWdQSEprWmpwRVpYTmpjbWx3ZEdsdmJpQnlaR1k2WVdKdmRYUTlJaUlLSUNBZ0lDQWdJQ0FnSUNBZ2VHMXNibk02ZEdsbVpqMGlhSFIwY0RvdkwyNXpMbUZrYjJKbExtTnZiUzkwYVdabUx6RXVNQzhpQ2lBZ0lDQWdJQ0FnSUNBZ0lIaHRiRzV6T21WNGFXWTlJbWgwZEhBNkx5OXVjeTVoWkc5aVpTNWpiMjB2WlhocFppOHhMakF2SWo0S0lDQWdJQ0FnSUNBZ1BIUnBabVk2V0ZKbGMyOXNkWFJwYjI0K01UUTBQQzkwYVdabU9saFNaWE52YkhWMGFXOXVQZ29nSUNBZ0lDQWdJQ0E4ZEdsbVpqcFpVbVZ6YjJ4MWRHbHZiajR4TkRROEwzUnBabVk2V1ZKbGMyOXNkWFJwYjI0K0NpQWdJQ0FnSUNBZ0lEeDBhV1ptT2xKbGMyOXNkWFJwYjI1VmJtbDBQakk4TDNScFptWTZVbVZ6YjJ4MWRHbHZibFZ1YVhRK0NpQWdJQ0FnSUNBZ0lEeGxlR2xtT2xCcGVHVnNXVVJwYldWdWMybHZiajR5TlRZOEwyVjRhV1k2VUdsNFpXeFpSR2x0Wlc1emFXOXVQZ29nSUNBZ0lDQWdJQ0E4WlhocFpqcFFhWGhsYkZoRWFXMWxibk5wYjI0K01qVTJQQzlsZUdsbU9sQnBlR1ZzV0VScGJXVnVjMmx2Ymo0S0lDQWdJQ0FnSUNBZ1BHVjRhV1k2UTI5c2IzSlRjR0ZqWlQ0eFBDOWxlR2xtT2tOdmJHOXlVM0JoWTJVK0NpQWdJQ0FnSUR3dmNtUm1Pa1JsYzJOeWFYQjBhVzl1UGdvZ0lDQThMM0prWmpwU1JFWStDand2ZURwNGJYQnRaWFJoUGdycC9zbHhBQUEwNWtsRVFWUjRBZTJkYVpBa3gzWGZzKytlYzYvWjJRT0xhNEVsUUFJbUtkQ0VMRktrUk5BMmd3ckxsTU1mek1PbUltelJKaDBNaDBnNS9FRmhpYklWVmppc2d3aUhlSVJOU3FBc0tpZ0xFbmpia0hpSUpnaVFPQWlBd3BKWVhBdnNpY1VlTTdPN2MvWDA0Zi92WldaMWRVLzNUTmRzTHdTU2t6TlZlYjE4NytWN0wxOW1WV1ZWTzdjWk5pV3dLWUZOQ1d4S1lGTUNteExZbE1DbUJEWWxzQ21CVFFsc1NtQlRBcHNTMkpUQXBnUTJKYkFwZ1I5OUNlUmVZbDE4cWZGenVjVFR1bHlJcytMOTJ4SjRwQnZqTk44STV5VWpvRFJqUTBqVDMzNTlCdjJMM3U5ZXpBeWhuNnRRUkRveDdsWnk0YWYydWZMUC9PcEhxN3R1dnJsYTNUbFJHUzFQbGk4MG02VjhvVnFvNXh1RlZqMlhiK1J5dVh6ZDVlcEY1eHIxdXVGYWdWVGQwd3VSWmF4Y3FYUmNqNWxRWGlyNStvV0ZCRVViWHJBUlgyeEd2S0xDWHVYMVpyRkZmYTdsV3ZWV3E1VnJ0SnFOU3FGUnFDODF4c2J5SzNQbnp0ZGFaeTRzdHc0K3RuVGt2LzdiSllIV2REUjBwRU0rWktJaHhEZ05NOVIwVk1oUWthYVFSZngwTEhhMi9JbnZmbmRQYzhldUEvbXg4UnR6b3lQWExkZGIxOVNhK1YzMWh0dldMT1NxdVVLdVhDeTYwbnpORlpvdWwyKzJYTDZKYkZ2K1VOcUdpc283WXFTVmxJVTBlUWdUMnhIU0RlV3JJMUtvS2hlbERtQW9pL0F4SGZNV2kzQWRtSWdqM1VibDFrWXNLV2tIWUxsOHE3bGx3alZtNTl4S3M5R3FpY0NTbUo1eHVlYXBWajczYkc1eDhlbld3c1hIQytkT1BYbjRuOTV5UW0yaXZSVm9yMFBvTGwrSUNobzJoWWdYeGRNSjl6K2ZlT0xHMHM3ZFA3ZGNxdno5UlZlOCtXSTl2MmNoN3dybk5ad3VhaXdzcU51TE9wYlJoRnFWcTg1SmFDYlVLTTBZZ3crcGtDZFkyaWU5dEZRUXFoSzRKQi9xWUdwc1RBckZBQlo5WTJEc0NEQ1IzcXJ5QUlkUlVFZEl3L29TblNXRmd2b3lPZW5jM0FVUGswTWlPdktvbHhqZ2htdmtjODJUdVdiOU1iZXkvSlhDMmJOZmV2WXQxeDVTRGVndnF5RkVSY0hHc0FJNDZaZko3Uk5QUHZucXd0NTk3NXR0bGYvSjJWWis2dmk4Yzg5ZmRPNnMzTzVjcmVVV05LUnFVb0xjcGgraDBreEJybmwwTE8vbVpodUpnSWZGWElKSDNJMVA1TDBCTE1qUEJFa01XeUI1U1dKeVM4R2RuMnU2cGcwRnp3SDBOS01aM1p5c3BLQnByVkRSb1RqZmJKN0pOMWYrb243cTZNZFAvSU1ERDZ1RjJZbGlrMm5TaHlFa2h0MWY4TUZzNDdmdnZudDYrcWRlLzRHWi9NaDdqOVh6Vzc5L3hybm41bHJ1N0ZMTExjcFhOcVJ3UmswTVVRR1VsVXM1TnpidURTRFdEejN1WXdERHB0TTJnRWFIQWF5bWd6SGs1Qmx5cmxET3ViSzhVNkhSbk0zWGx6NjIvRGYzM0g3cTNXOTVRVzJHN2cyR2FRRGdnc0g2SGM4OTkvcjY3ajIvZDdSZXV2WGg1NTE3L0Z6TG5WNXF1bHJ3bVdiOXF5VmdKUmhBNmNmU0FOSUNrUkhJY29yVm5LdU00eEZXN3MrZE92bkJJN2RkL1MxQkRkVUlvbXRKVTk5SU9pcS8rWWZQUC8vTytlbDluLzN1aGRLdFgzckt1WHRQTnR6eGhZWldRRnJKQ1hOZWtNTzB1bzB3KzlKdkl3L1piTGpseFlaYm1OSGxRck4wYTNQWHZzL3V1K2Y1ZDRwM0poS01ZQ2hpSElZQndJaG1MdGU2NDlUcFg1cWJuUDdrZldmeVUzOTF1T1VPemRiZGt0dzlSSWJDcmZEOFdBVzV3N3F1TzVjMGRkWnErU20zYmZxVCsrNDkvUjdKWUdoR2NLa0dnRjZ4eHNZbmp4NTkrK3pranR2dk81MnJmdk40MDUzUXFHZUszMVM4aEhDSm9kbVFON2pRZE10THVhcmJ1dVAyZlY4LytnNmg1SHJwa2ozQnBSZ0F1cVY5ODZNSEQ3MSthV3J2N1ErZXpZMTgrMlRUbmRGOHZ6bnFKWmtoaG1aTGE2aDVIVXU1RVRlOTkvWXJ2M2pvcDRYK2tqM0JSZzBBNVpzQi9QS0hQN3lyY1BVMXR4K2N6MC9kZjdMbHppeEwrWnZEZm9pcWI2UENDSmJuVzFwUGFUcllkODN0TzMvakk5T2hkc01TMzZnQlFCZjM0Mjc2NTcvNGdaTzU4aTMzSDJ1NTUrWDI0OGlQRnZKU2plR2Q4Rkxscng5ZnVzSHNhbG9UTkN2bFd5ci84QjBmOUwzWStGVEE0aTFyZ0RmMDNQcXRyMzN6TmZQVkxlL2hVdThaelZFMU9hUkxIZjFjQnVaMUVIUGI5WElGOEhOd1pRb2RPblU1UWlGRkExckRDSTE2MHhVdUZGeDFiTXQ3ZG4vNi85MzUvTHZlK0pEdzBvWE1GRFppQVBTQjBaK2ZldVVyMy91RWJ2SThmcmJsbGxkYXJpZ1c5RERra2tJMGdKeU1DZUZkcnRCTjUzSVpBTWJNZ3d6NmNxbXlhY3RDMDREV1dhV1IvTmJTZ1ZlL1YrWHYwOEY2QUlsbGt0cEdwZ0N6dE4rNDY2NGI1NHZqLy9nSHVqOTFTb3VUOUlqQzBpLzFpS1B6VXZHczFYN1lQUGVpZGJsbzFPVzJWblJidlZVY2U5c1YvLzBMTndiRlo3YmpyQjRBQW96KzF2UXRQL25XazduODl1ZG14WWl1OVhVSE02UHRDYjVIUUdDTUdrS01mVzY0Witnd1ZtQWJPcGtsTnlBN2NkUmJYMEsvQm15NkRwanVFU3pxZHZwb2ZudnU3N3ptclFJK3FNT21ac1VEVThwcUFEQ1YzNzU5ZTZVMU92bm1FM3FvYzBiMzloRW0vbWNZSVk0WUVGcDZHRWg3NFJEUFpnU2l3OGk5bkFhZ3hYdmlFU09kZ1RYVWkvZFlwcWRMalZwQlQwNjN2TmxOVFgzRW5UbXpyQ3J1RHd3Y3NrNEJ4dis3Zi9NM3Ixak9WMTV4OGp5UGNNT2RQb1E0aE1OR0k5TGhrR2JZQk9BM0JQZzRSOW5RRHVnTUUxOHZYRUV1TWdMNHRqNHBwcCt4cnh1Vkc0T2tvYjBNclVMNXBoM3YveTlYQksxSEd3dlp0YU1zSGdERTVtS21iNzdsd0tJcjdEeWpPYWhCWjlhbXNXNHR1aVlRYXpPTlBUWGowYWtXdTc2d3k2TkZlTnBzT0FnSitEbVl3dUxUeUEzajY5TVFMOU13T3ZLVWlwT3JKQ29JSWh3MUZtTmZzZjVaR0YxRGV5aWFsY0xPeXY2Zk9LQVdUNE54L1padGlDd0dRQ3REUHJwcjF3Mm5XN25pZWJsL2U4YWRpV1NiZUV6bG9vSWxFK1F5cVFYRmJ1MEptTllqNFo0aHlJNjZWSElWNkNxMlVnVzBxMVp5eG4rdFVPaVVXaGZTcm13SG5SUktYOTVWZ01JcjZzdWtudXp4S1B5Q0ZtOEZGVVl3UEp6UGlKY096SU5sbWxoWFBsOHNiSisrUVMzK3J3NkVCcXExMkZhMUQxa05BT1Q1OHVUay9ndTJneWU0c29odGd6R2NhaEM2cXJELzVNNkN1M1U2NzdielBMeFlzRjVZVDFMZFNTVUhwb2pBYVJjRmJ3bERwSkpZbWNJMkxCcTRkN1N4cEkyTUp5KzAzUDI2VmY2OW1icks5T3hmbzU4Nm13SjB5cmU1UzNHeVRsSUl6TE9NVCs0WEpBdDBVQTRjc2hnQVl1SW8xMTM1U3JaeExjbWFtOUdWRFV5eUI2Q0VCQ052bWk2Nlg3ZytwOUdpcldIQzMySTVvN3FleXVoWDNvVWVoaTBraVpCUEkwMm5RM1VrMnFzcWdzUTRRWjBrdW1pb3ZGRjJibXBYem0wZktiaUNIUFVEWjdXN1ZRWnZ1NElFamhoYldFTFdvQ200cFcxMWNzaFhxYWw4alcwMkhSaExGZ013cE5Oalk5VjZvN0JyUWV2TnBvZ1h4WE4zdndlbFRuYzVtSWV2MGhhd04xeVJjeFBhRnJVd0t5dEx5UUw4MGM1U3hZT1M2WUNMdkRMblIxeklQYVpqM05Fb1F5YmlwMGxjVjRDekZHaG9GNXA3MVZUQlBUVlhkN05hUUxObnNIc2RrTVlCbmpXREJLTzd3NUpQY2RxTmoxZmRSWWFtcVdTZ3JrQiswR0I4M2Z5V242azJjb1V0Yk9CRWNReFMyY0dHRHBUS0hUOVd3MWVONXR5MkNlZm10YkFzcTR3QVhtQ1k1a2d6VGNReXlyTWMzVHlDRTlmSkVmSEcrRkpvcEhGQUkvSXVkcDBjbTZ0S2J1TXk4bDJhNzFoQXMraWxJellOd0Uvb1l6ZS8vZkxXSENWSUp5T3Zlek1rTXRuUG9CNGdJczN0dmY2V2Fpdm5xalYxQk8zYkxVNGxOeG9RREVJWWsvTnFpa29UZDZZeUZwZldPUkJUa0FxVzdTcExWYTlPQ20vc3dPckszaVhEcElFbmlJZGQvb25rS0hmT3NCWlYwRzhXd3F3SnFNOGFiS29zdW1ycDJyOWJYWFNmby9uQTNSM1VBQktlSnZidXJlU0toWktNd09XNStiOEJoaE5rSk5RZUl5cHBaU3lkbStLanRkc0lWVjFDSWlSOGxKUjJvT3VYU2RiZGE0a21oWkpMckt5aEh3MnVCS0lCMkFoWFI0c3FMQlh6cmlSRGlMdUQ1UWN5cU01ekIwMmgwVDdLZkhsa3g1NkticzFrQ3BrTm9McDl2RndxdTFKWmJteDhWSlN6eXlsaE1EWkZLRVVKQXNYak1uazZaNk5mTVdYbUptbWxOQ2VMU0dZSS9sSXphTCtmRVNTSUw1RkdDai9LeGJBcFlyNk5VMDlaV2h1WDIwTjV0aHNZZ05BdTFWeUY2NGV5WG5BWkhja1Y2OXRIcEpVa2dDYnBVVkxhbGNoaUFJYXcxYXFXNWhkeitWa3QxTTdOTVBtc1M2T0xaR2NXbDRlQzZ4TkZZZEs4cUh6aUFVaExldDRZSXAwWWQrSVpMRWZiSGxMdVFObVJHUXh0QjFTYlJoelowUU8wcEd6NlI2Z3RhUkY0YmtXR3I0cy9BUlJ3RWVLTjZTQkxBTHl5Vk5KMk1WZFlybzFsMGFlUnlkb2dWeWdWQ3kyOThJUmllTXc1akdBM2s0UUlSYWM5Z0JtQ1RoaEkyd3RzVUVFREN6Ymczd2dabzhGSmpSWFp3azV4WGdxbWxBVXZDMmY2U2Qvc2hBZFFHWXJIVUpnT3Fjb1NtQ3AxSGFpWGpYSlo5V21YMzFsb3lXSUw2SjNiODhZb0hkdG9RQkJnTWVFb0RVNEV4QlJnK0JYVE9STVdhUXdoSWRaT21iUjdsQ2R6Y3F3elptblhXZFBHcEJTTG14UVYzN1FORVZHMTR5NEpTT3VHWFNQYTVuMEJZdUNrVWJCTkFVSVhMejJKRVFCWXJIKzBheU1mS0dVNHVDZUhPL0ZoWUJTWkxVYTdsQXZTZzUvWU9oU3lOcStSSSt0dklrK2ZhRW5ER0FQdWtYZjFkSGxzZWNxNDF4QTlBSGxUanNXQm5oQmpGaEYvd29VS1lobmdNVzMxcGlSU2xLYU1LdUszMHE0MmdLOFIwalJRTmhxT1U0QVpnc3FpQVdEUUtNMHJUZ2taSGUyajlraG5DU1lYa1pNTlJCUUROODlzQUxwVWlXL3ArazRNU01vNnBST3lRUUM4S01KZFJKU0xrdGxSeER1Q1M3cThwRU8rVGh0TlZOZVNHL0I1aUtsUy96RWdWQzZmd0d2RHJCMUZFRTgwNUF3T2FFdWtFRmt5WlF6dDF1dWtVamdFNlVkL1VENTVTT0htaVhYZ0FZeC9tcEdtQTByVGppTGxFa05RY3FCZ2hzUzk1VmJ6OGh1QTAzdmI2b1E5dzlCYjhHbGQ5R1NXRGxsQTBlcmhzb2I1Tmwzejc5TWJzOXYwTUthRVZGVHh5aTA1dDFmczE2b3RWeFpXREFOTE1BUEJMU01keWhGUlNMTUhjVjR2bU00cWdTeTVsUFFLME5ra2JvQkczdmlneklJdjc4eWxxOXJ0MnFsUTN5T0tlRXpEY0NnNkpobFZvRjhiN2ZDbXRLMEJoTU9QZmhWQVFQMVR5Zzc2UjE4eUJYQklKNFhzTTNyMkZucEp3V3RkWExLQ2gvRitJUW9QSldMNUpmWDZYOTFRY1A5aWY5NWRPNVp6dWkzdWR4SUZCTURueGhHR3g3b1dicHFZUWVsMDlHTFRmZk5relQycmQ4M0xyS28xNUZoWm14R0FzMXZ4U1I0czdXQkcxODV1SU9XVmoxYk5DTlFCU05tQnJKUzJTMXpEckV3d2JCYUJYQ0hRZjRadzFtRnN4Z1RPWnRackNQOE1ocWFaQW9KbmdCS3ZGZFJGQXdTdXBPNTkrTmFpKzhWcnNuYXZQd1Z1cG5FajVlVjYvZnJxaWFxNzg2a2w5K2pabXF2bzhXNWUwNkZORFF4QkJUc25pbWVjaVRWZlphTXgzUlh6TStrQ3c3REdTWGdBOTZhcmxPaVkwcVVaSDRlOFlHd1JLQkY0RDZBQ2dkUFdycWdDbnF3ZWdPY3hoa1JSMXBCNURiQlNhK1NxY0NpaU1CMWsySk11Z3VSZlh3Qnh2L1NLdkh2M0VKWGZUWEJVaXY3NWE2dnU4RnpOemVvckV5VjVGek1DN0Mwb0pKRVMrUzRFeU5Dc3VxdmNpbnVVeGFKT1BNSml1THNVYjRiZ2pjQ21BQnBCa0FNWmlrZVM1bEU3RWFwMC9aQVkwL3FncXlBeUd3QVlqSGVkYkpwZWhUSlZJQmhHLzNiTitlL2EzN1hwSWdVMnJPUTJ2VmIrcXFteSsvSXppMjVFNzlnWHVNMnFZWjZYWkUzbEVxNlhMejFJTXI1RDZoV2xGcEpFMzRKWW9UaG9MQjBGZzZNb2VlUUxPUjNSQU1JaXl2aERqdGdwWkZlUlZ0bDZnVXRsTTRMMUFIdlViOGdBN01iTk9rUlpLTkN4dWhaOVYybkJkN1hlYzM4eHdyN3hnbWpxRlNwNW5hSVl5T3ZPU2g1ZjcvL0ZnaCtKcTNrUnh5WjlyNEpPUmFqeE9pRkNvR1FDc1IxQ3BPc21IWjZ1M1FrTUl6NXFIT1ZCejV3VmNvdEdaWmpXUDcyb0hrQVA2K3ptREJ3anNOanhiamJqK2dEcjNLYk5FTlV3RjNmRERUcy9KaS9BWTlibEZlMllGWGVGNkFFa1hlOEZFRFhCY3BieUphRzhJNHF3QnJiR0tlQXlZUVQzRC81b0JOREdDUFNIL0ZBMGgya2RFaGlxWmYzNnVwOU1hZEl6R0E3VmdEeGp5TzRCZEsyTzRrMzVpdnN4RzYyYTYzZ3U5YXpER1puYkNEZ0x2eFg4ckJZb3VtT3RhUUFQd0lFUzJrcjMwby9jSTBFZjRycUZrbGdiNi9ySG9YM0VyNGFvVWxsL05XSzBQVDVkUTltdDM3YnlsVmQ5cERjNHpSUTNOT2JZUU1oc0FCZ1pLMWtJMmgyaEhrU05uOGhRekt6UnN3aWFSclVHZUJwc1ZSclBVK05hUzRwdlNlczhZbUpuSVdzQkpPM3grdEdabGhvR1RaNEltSkNsY1AwQWFrRjU1dzF1bE84TE1UNUxrdFZSMXdtaEErOUhrby9pQVBIMEk1OEFEUkJvWkF3UEFOc0ZrdGtBYUcvQ0VrSGlmblRwSU5mVkVkWUFyZGVkSE5DK0Y0NWVaYkVsYUhxZ3NtcG9zczNic01vQXNGVWVzT2g3ZmFZVWxPQXBwakVFYW9wOEtuVU9WYlRxR1lTbWpTa29ueEwrZFREekVjY0REOUFoRStHUEhpQnRCT3VSN2VBbDRPZ29HekN6WVFPZ0V6Q3UvdlFNQ042a0tSaGc5YjkrR0FTb0g4R0FIVnIrWTFSS1NLSzZtYXkxZ0Y4SWV1VjdaWGlPUU9hSm1sSlNYSGJtMXlFcUxCNDN1S0lIOEdWeDhXZFhBL0FvbnNCdHNnTmNCM21VVHhaSzBSQ1VIQ2lBSzhYNlFHMGlVR1lEWUFlQUxmQ2tZUmlIZHE5Z29nMk1wY1ZIVWN5SGFrT0N3Y1R5WHZoaW1ZMldBTmdMSHB4OC9kT1FLYWFEWEFYWVl4STFTTnFrRTE3YnZpOGdTSWVRajhWSk0yQTZNcjZSR1lMS3UwYytkL3VpQVVJb1VScUlBM0xRcGJJZTRTRG5EVFh5aURNYkFDdE5MZ1BOYWtXNGh3d01Nd28xdVFvbXh1bSt3RE13aE1oLzBJTndVdElPUHFlUnBhSXdsU2VFSTMxZ3JGNkpGVnRwcVVCckFZeVYrd0FZUUU1YThMaEE1T2thRDViMkJiNCtuUmJzR2lIU2p5UGRLNTViMGQ0STh0STBpcmVMSUdKeGFaZlJFSW9IOGd6RG5pamlYSU5zVW1YOFJqd1lmc2FRMlFCWUJISnBoN0tZYXZzeEMwL2V5cFZDYTdRTEIya0UzeGEraDQzMTFnNmdkTEJDNFRIRTZZclZQTEFHaUs0L3B3OHNtZkoxS3JBb2xDYTRmVnpSblVMaXNvNlNwSzZyUjl1V3hqWkhGZGwyN1dURVFnNjZDanlWcE44c2hMblk0S21tUDd6bllmcFprWWJySzdvY2xYUllHTElocENDTDRNNGt0OFMxb1VieUl4WWk4V1E5aVBpTlNzWlRhSnV4bFlGbk5nRHpBQkJVNTlHSlpOVXpVSTZSR0l4aW1oQlFPblhFRkFKREhiRVBpR3gxQUE4MStJR2tQaEEzV21vU3NtNUJUd2Naa1ZWdHh0ODVWbkM3dFBkdWwyNFFUU3U5UTY5b2JkRXhxcnVUVldtN0xFTmdYNTRwWFFpSTQzemRZUURDRDkyRVgzVUFRK0NDQTJQUWJRZWJlbmhaWmw2UHRQVmRjRGVqNDdSZTRlWTRxKzhSejRrdmRsUFg2Z1h0NVplUjZ1QktoUVVxQW1HYzJFMHJ1aDg3UTNxOUFHTnF2NUdRMlFEd0FIRUtzRUhaaHlvOGVZbUZlSFcyWFczQW9VR1NKdDhPRktNUWk5dkZxK1JVbGpKZnF4Y0xiOWhadGVPS0xTVzNiU1R2UnFSd3ZXbG1nWUZuaDNMRTRMUTRwTTBZU1ZQUkk1aGhDQmZvRUdEYVlIRHhOZzNBbWY3WjRLTHRmKzY4WHFSNVFkOUhQbkpleHFEMGpQWlV0bVE1ZWwzUVZZVEVOdlBRUHgwMDlBYnYrMHpKbWtFNDF0TEZXbTB6R3dESW9yQk1jbjJ3TTVkRlFVWVE1QmxsYWlOSm1TamtHRWZZN2hpNUFNTTFOdnNRd0U5QVlBbE81YmVQRnR6NzM3RERUZXBac3cwc0FUQkM1eVQwU05Oa0hCcFpXdTFpREU1Q3hPbHpnNTJUTmhHWm1NUVkrREw0TnIzck9LVVhYMTYrTytjdWlwZlg3cW5vS0xpN24xNXhqN3pRc084blYyU2hmcTNpNmVIdHpCQWl2bjVzUURnaDNnK29kM2xtQTZpbkZvRVE3Y2ViOFVPOWpyUnk4VlN4TENyRVdBT3VBNXRoc0Nwb1dDNGswcDZnRFdXZzl1YnQwcElFT2wvWE40dllkNjl0RXZaNFdQV0IyWFNiam5RNjQ5RUZ5djE2bVFDWmQ0bzUra2V3ZmlwR1p1WTVsY1pnMmJxNWI2dHpWMnd2dWpkZVYzVGZmcTdoN3Z6K2ludjBkRVA4Nnh2QmJPMkRwSkhWU2ZpNnB5UFZKc0hvSVZpSVpBeVpEUUQ4akNoYkNCTDNJV2k4cXhLNE9EOEJHK0U3MHFIUW91UVVDaU4rSWN5eFZJN1NEYmlNVG9BaGpWdXR6Uys1TXY2K1dKSzMwcFp6elZsYWdrVk1YWEdiZUNmRmRDNmRwbm1hcWtmWFZwQ3ZpL2xWc1ZDMTVBRnErckFEdjNreXFwMzh0OTFZY0RmdExyalBQcmJpN255OHBvOXU2QU5RdHJGRkFFTEFYek1pNnVLZXJNbTRtOFVlY0wyS01odUFkb1RwdlhxOUZDS1hOcW5QazZ3V1Jac01VMFZSZS8xRzljYWFqWFpWc1g2Z1RUTDZFVWlhK1NUVHhteWp4c29CYkpkSG1hU2JVOHNlUTFiaUdBTmVoYW1BbzNjSUZVa1VBZHQweEdHcUtlWGsyMlVHQ1RPZVVWRlVuVEVuMWFrWUJmS2ZoSkRXejZHNHV0NkZyQ25QRlBITzE1YmNYcjA5K3FtRFRUZXZLd1Y3YTBoekNEak1mTk00RW1TNmdwRStSa2UxUFM3OVdraXFmcTFrWmdQQW5hMW9KYnVpZDFEcmJOL3RFK0FWblRVRW95c3hDK1F4Q2pwRE91WWpyQWZTT2RWUlN3cldDcnZLRFVlb0lvcWhycFdYN1pIVU9ScUFmWjdGbEJLaEFobjRTQ21UV2lQWFZkWnU1V3RqdnMyU244QmFva0ZaTkFLcnR6S2xBakFSME5nTG9TUkRxT2tYUlhpNSt3MHYwemQvNUwwKzh0Q3liWkExVDJCRzRBMEIrRTRPL0JxRGR5bzNFakliQUQvcFVwVDc0bWRXbHZpbGpUNVVZWkpyM1VWdDlWMWVSdVU4bHZFRzRPdW85MGU3UjlRQWxNaXFuZkJTOC9VNjIyQUx1ZEFxeVhFZklJL3lkZU1IRHUxWmdDM1Z2WklTSk9EcGJKemc4SWxldllzTmV0V0pYWnVpZkIzMjFqWUV5d1I1V2FtUndHQUlTQ2pQMUNCRnZucWZjLy9vYk03ZDhjaVMzdm5UOXdTMExyQjlqaGlTb2ZGdHJLRk9yYWFNUmtWMXRjOGFNaHNBSG9BMUFQMjBKMng5S1VyWTBwTDlDUmF4Y1VRUFFHekNqM0hiQ3F3aXlNWFRNUnJXY3k5UXhFZzdjSGJLd25DdWlFR2I4OFVrUnRqa2tYQlVUQUpQNnhoQ1licklxbFlWeEFhSzAzV2h2YUsyYWxHV2g3R25nOENqUUhoWDJuc2RvUFZuV3ZVMUJYbFd6YXp1dHV2TDdwR1RkZmZ3ODNWWGxYWU5SOGM4RUdnS0c4WGN2K0RkOEt3aHN3RkFnSG1jUTd6M0RKRzFxT0FJQnpoSFZINnNOelJkdUtnelBCR1oyaUZQd0NqcTlnQUptQURzbzArQzVJc2JkREN2TkpkamhrRFI2Z0RXWGlFUTdGV1ZFRFJ1T2lEOHFQZEZxTldNejVSUFdac1dFMVRvcGVkTlhzcjRsQkZ3YitDdEJ5cnU0S2tWM1RDU0g1T1c5WUZZWFNZbWhEMEJuYU1CYk9CT3NNa25RVFJJZ3FrRzVVZmw5V3BEdDZ5YlNjSVhwQldmYm0rM1JhMEIyRHJkTk1WMEdTWEcrVFdXQVEwaDhoZ0VOMlpJK3lsQWVHUUEzQlRXVFdBSlZrS01ia1V3Z3dianN4ZHcwRU43eEhjQ1JWTFVHMTN4MG9adHArRFh1RFl2QUkrNkRGUUpMOGdjMEpkRURtd3J1SU5uR3JxcmlTblJIN1V3WTZLbFo0SUhUZlNkQlhyV2tMMUptQUxTQ3V4RkZOYUFpZE1FN0hKdys5UkdjaWhJQkV6ZUlQeloycXZFdXFnVGNLRUpnRDZ2Y2h5UmVVWXJ4YnY0L1FDMkNVUkxmLzRZZ2V3VUFvUGhDN0JyUmNiT1dnQmRkUjE0RXdXSi81Z1dnTEZnN2NTVkxOYjNoek9WSGlFUHJIaW5nV3ZFc2hhRnI5WmR6Yi9STk5DU2hnMFM0VVZnWDJJNXBnQmtrVFZrTmdEY2pIa0FVVE5lK2xBME5qbHhCTTVRSW0zcHF5bFVlVWEveHdOZ093QVRkR2FGakhDdlRtdnRCUWhlYWQrbUEzQUJvNWlITk9aZXpXMEtoRVVoUkV3WmJScURwRHhYL3B6dUw3VG9pVVhkaUFUb3kvMm9wUjllK1I3ZStpR1VZRzNqVjUwQmFocnduYlZuQzlmdDBLYy9wUHdHNnhxYkI0VE1ybW5idEJrQUtGSk9JM1BJYkFEY2JXSVJDT2NvYjgxZ1dnNndpbWlHQjRCL1d0ck5KTVdtTlFwTWFsSVdSU0ZMa1JVbm9xWStqQjRxd0FVd1NlV1pacmovRGcwZXNsQmxVd05JMFNBRkVaZEhITW9vdDBvU0E0WmU4Q2pTTnpjdWxZNVRqK2ZhVTdGcEwxQ0prME0wRkM1WnZhejBWVEY5aEdPclhxSGpnVkxST2lXYXVrY0FyS2Z1QjVCTkFRTnluUWJMYkFDc0FiaHVSWG53MHk5UVpZcXhoSWNpMldzZEVCVklBMlFISEIwRVAwcU5Cb0ZRQ0I1R1FsS2wxY0dQQ28yVVRoaUFEWGpjSnVWQ1pxT1gyS1BvYzE2N3RyT1JjZGxabE1yQlA2RlQrUlJpbERJRitrYk9ZcDFVUlJ0YjdZZTIzQ21zNklubDFrcmVuZExyYnkzMk9RSkRweFVDbU1VOFE4aXNUT0hJM0FiaHhrVmdvamhqcDhmSmV0Z3VSL2tjTUc1Vm9aN0lsN1E3RlkwcmdiVVdmZ3laZTVlMHpFRFVNaG9HTWZodFU3RFM4SXJBZ0xlUE5FU0pxVzZ3NERrejByMGFtRldsSzlvRUxLV1RMd2w0aENqMnRkTUFBUFExOFhJUFUyVmZDNzhrT3E0RklIYzNyYkVKRUZpUEdlcllnNVlMdXR3bGx5MWtOZ0RRRDdJR0FNNE1CTDdoVjBkVUVLeWIrdy9sUkhRSTlmcng0V0ZSWHZKOFhCQjJKU0FvVTdodlpDMVpNMEVqNHVmRkVKNGI2SFZaM1E3MlUwcmNuV3NOa2xOYmlNWmdVcjUrSXBKUFkwampzSEp6QXhIUzQ3UWVxcWpEQUFRYzRURUEvNTZnbm1Hb1BRYkFKV0hiZFpKV2UyazlPQUlqdXdIZEcwT1pEU0JlQnBvMWR2Yk45ekNjcWNLbzQwR2VvM3NSU0tFWmlCSmVtREtFSUJBLzNtbEY4TFZnWVEzQWF0OEhsWU5ER1F5QVl2WUUyb0NTOHYyWGg0UWJqMkdGdEFxNHlOTndvREF3b0xDMWVVMlMwQWprNHZ3ZmpjQ1RWeHZ4UTkrOXQ5SXRkR21ZQVkraURaWU9nbHBsYk1sSFltU3A1OGlzekkyMGFjZ0M3TXVVV09FYU1qRSs2VEF3NFNCaUFkbXU4d0J4TVVrNXdORUFiR1FyWS9Vb2kxNEdDZVI0RTVvR0tvczBFQmFMVEQ0MFllL2VLWVA3dDB0Q2hHdk52YWNoYVlGQ3RSa2s5QWFqMURDblVBUmFIU1UrQTYrZEJxQzIvdC9IU2pPMUlRUDZZNlBkTEZ0cDh2RkFqb0loeTZuSC9TRnExZzNaalVZR3dCeExSK0k4M1lzS1BNT1lEVExGTmhjcnRpbU1Lc3JBRTlLazFCOS9xREIyRHJkdkFqTEFBS3plQW11dHFjWVl5Q2tOZmw0TXNTc0FGZlBxTkI4MEFwOEp5WU1hUEdVV0JHTkJlWklVeDloWCtEUDRMeVZZbjRYQTQwbjd0MkF3TW1aN3BkMzRWUjgxc1FQTDExT1FvekVWNDhBSXZISzhhQjZBS1lDbmU4a2NIaGhKUjRtY0FyT1JlWlREWVFJMkk1SWJVdys5UUR3R3hHTHVHcmpZdXhoalZmUlVzZTJqQTVPbGZWdHdtd2VBU2NFMVJWaXN5cVhxVUJxOHZoM3dJRjA3cENHRXVrZndwZEdEUlFCcmwycHNVRG9SMnhFS0xMSkc0a3Z3eU1rdkFqRnd2VktuNGNtVWVUSDhFR2NiZ2FjVTI5UHVSVE1BMnhTS0ltQTJjdUQ1U2M2eDd5akRhOWRiTzgyU0tVRGFRdkYyZ014d2haRWd4SFRJVHdHcWtuVHdJQ3g4ZUliT1BmNjhSajJ4TFJRaEk1R1pnYW1lTjROeFQ5NEFCSXNCbUY4VnoxZ0V3clkyUGxZeUJLK0ltSU9sMkpkWVJwendIQXZURmh6TGlLMnhUcUZ2UkJIVWlneFc5ZW9Ib0dZRTZyVDNXTG9UcU1JVmpmNFpQWFZsM1NPdzVLRGZQT1VFRDIyUjEwWkM1aW1Bd2NWOUFDelRkNnczV2Fvand4R096bmNzQWdVVTU4TkVNZ0pHRUlqRWxFN3ZRRVFQdzd3Znk4MmxxeHh2Uk1EZ1dCeXlNeGNEQUs2dVBDK0lldUY2WWRuWmhBNXloU1JTdTVpeEN1VkNIVFd4SDBreUZIYlhoYVloRWgrcGdrNXZJZVNCRCtPUHJQcUN3WkpuQy92c2ZNTU1vS0I5Wk1ZS3lIUmd6eVpqWlUwOHF1U0tJV3ZJM0lScmE5dmdJUWFpTmZjaWF2b0t6TUl3eWVpaTZRaHQyMGNBQ0tJeVlTaU5BdGtLUmN4bGpvMTRDUVZjaGs4aTRaTEpEQ0dGMzE0T3RSRXY1WXVJL2VZUVFQcVBzS1QxNzBOSTRIZ0owRy9YSmxBcTg1U05iMkJKS0RZVms3UjY0aGg4VzZzS2RUd0Q4TUhqNHVFUHdmb3M1b3hOOVVuZi90VzJkZWNlTzdPaVBSWE84UkhZNVBFNkRkUThZb3JqZytLc0liTUI1SEw2VUtnWVpOUkJ1RitneXVwOVA0MWhNd0RhcVE3WkdSNEp4T1JvQXZJcVlBV1BJSUJuN2tabW9PRnpxZ2piVHduQlV3aVFPcERHS2FDbVcyZ3R5bFhHOXdIc0oxb1lWUndlVkltZzd1N1ljQ1dtWUVaSGtTRlRSSTNSRTQvdzdkTWhOcmhVbW53U29FeWR0VEE4c2NxVXIycEdQenl5RUJ6UlZuWmVWbm5zUk0xZ29XdC9hbzRoZ0NYMmhSZ3p5cXpNamJScGFIZUZ1WCtNd1BkRmFEcERaTXpxQXd3UitmUVU0QTFBaGFyd1lQNU1lK1p2T3VWN1NZbkFWSVpDZVprQ0k4QlYybVZTSUdnR0lCUmNCa2IveUZVQTE5TmVzSW9qY3dLSmdvZUlVVkNCcCtRck1VTGU1cUVlRGpGNmFIZzNya3JTL0dGcDFnZGFXNkZpSDVSTGhYU090T2lwVDdZNFZWUGpSelJLdXYzTGJ3eWR1OUJ3UDNoK3haVzFyNXdiWW1DM29LYko4eEFWQ0lYSkttY0xuUUF6WUpUZGFMUWxTUGNCVExkNDJYNkJLZ095aEluRmoxRGw2VWhVUGpEeGlMaW9SeWlTaFhrQ3ZBQUNRQmUyQUJRR0huK2E4QlhieUJhZWh0WUlLSWhkUytnRVFuWWZRQVJNZ0ZZbVBCQUthUk0rR2ZKVzdEMUdWYThNamZOQ2lkNDBZWmMyWHgxWjFKcytGeGVidHMydHFRNndUakY5Qzc5L3ZDdmlWa2JjRGgyNW1JbkdScHdjdnI4VGVyZGhtNzRBL21WdENUdXZoMENqZWhnVS82eGo4Q284OUFOMFpDVVAzVHBraFpZdFpEYUF1bFpaZXVQS0hsZWh1SDdCR09NVUR5VnRoS0pWQmQ2TEk1OG9IeUg2S3V1UVpHSXg2ejV6L1lxTm5uck5Rczl1aFFhalFCQUl3UzhDOVlVUWVRQXpBQTFoM1JTMmUrU01Fc05wZUNWTzFkbWZDVi93YW0rdVY0cmZNVmwwZS9UaFNyNXJlTzVpM1MxSUNSTXlodDA3Q25xQlF3OW16aGZjV2Yza0Mvc2Q2UU9OazM0bzB6blBlOXlDVWdJdVF6QStsRmFNcDRFMzBpT2lQejJaZCtjdk50dzNubHdPM3owVXAvQ3A5Z1lIdllDR21LYVNRVXZ2SHdicGhzb0Jvc3dHa05OZWE2TVA1Y2hGRDBJb3hRc0hhSm1uSXZMSlpTQjVzV3RYQVNZOTBLbFF3V1NoazFlUU5RK2VBQmd2TU9DUUozbmZ5dU9EQm04SE0wV1lWQlN6a1BRZUlBaFNlUzlNbjRjU1c3QzM2TjNCSzdVTFo3czIxeDA4dXVUKzh1Q2lPM3l1WVFiRlY4Y083Q3k1dDl3MDRnN3MwZXRtNHlWMzVIVGV6Y2hOODk2Qjc0ZG5LdmFEYm5XR2RBRzlGR1Y0Q1FlL0lUQzFwZWgyYW92M0gzMXJ3WjI5eU9objZ6MS93Y3d4Z2hSUzB0U1lBWmhFVTVVREpMTWFRSzZoSFpkYXJEQXdiZTdwUllOdUpxWklKdlNiTWtZcGJSUGxteEY0a0k2T0FhZUNPSEpSTmtRUnFrMEZJYmJPQTZzRXl1ZW82NU81K25xNkZsVXFsREhrNVM2WXk2T2d1ZGVPZ1VDUEJlS0loTHhIVzYrdTNaSFRieFkxM0NlL2ZkRjkrOWxsNGNwcmk3YW1BTUd5UmV2aFl3MzMvWk1YM1J1dUs3bTMvY1NvdS9uS2dqc3NJemloWHdCYldKWlFSQnorOE1aZStjb290Tk5RYkFmNHNVNnFSVm56L283SmtydE9QRHp3OUpMN3hoTkx1Z29JeWxkZjZDZXRPZkF3NUFtZWdwVTNtendGeXhpeUdvQkdZcjJoaFV2VDNCYW5IaUVwRlhjSUQ5Y0tveWlkQTdiYkM2b2dJT3RKMHJKRCtSZ0J5b2NjaG1EWHdJcTVFV0kzUXlRTmd3bjRXUXZZSXBGRzBKZllPTXdBUUtJcEFwNHF1dFRhcnJlR3I5cVpkM3YwR2J0SG5xdTV6OXcvNzA3UHQ3UUhyeHkyWS90Mm5pSFJsNUsvL25UVFBYVm13YjNqdFNQdTVWY1U5QjVpeVQxN3FtbUx0cHAwWUYxSitoT05RWFFUZFpIeUJzaFVoS0ozYlMyNEczZm4zYkhUZGZjbjl5OXFmMS9KakMrbmkzdTJoZHNESXNGYUsvRWVBeW5lYnRabUVkMHQ0aUk5Vzhoc0FGV05oUzBUcnFIWDdiUm5iZTJIa0ZoK2VhVm9iNjBnRDBabm5BSzhCNGdHc1pwcEZLcmVlZzlBVW1uekFrcWpReGE4MkpKdENoRXNYZ0hjMEZnSkJzRG94LzJiRWFvT0E4QVFHTlVUZW5tVVViOS9TdkI2YmZ2T2g1cnVPMGRVVzVwd3U2ZTgwZHJpVW5neGxpU29VN0Myb1BYV0hRODY5OU5uVys2MkEzcXo1K3E4ZStaTTNwMDgxM1FYRnYyMEFDOSs5Q2V0MjNuaDVPUFdFL0krKzlqOE9aMXp4ODgyM1I4Slo2RTY0YVprblBRcHI2bkpYaFZVR2paU25CaFM4bHYxMHVuRW1Hdk0xZlZDNUdxUU52RWVxY3dHTURzN3UrSm1tbzJGSlMySUZ2b2JIR0pDaVV0YWtaM2ZwaEhaOHU4dGVRK2d2S1NEOHBDbXJhWlhNZWZiVTJ3ZFIvQUlRQWVDeFF0d2NFbG84N3ZTZmhFb281TjExcE54ai92VVRsdEpzNklGRm91NW5Wdnk3a3J4cEduY1Bmak1rdnVMaHpUcTlVdm9yUHlaS3BaMStCRW5neEJCT3dKL0tKUyt3WDlEbmZtc0RPZUJwNXo3aFZkWE5DV1UzVjR0NEk3TjV0Mlo4eGdDM3dPZ244RFRFZkVxcGFQNEVWM203WmdvdUd2azhuZG94WC92b1VYM3B3OHU2aTRtbTBIenJpWWVDdlpTcTNnUVBIMmcvK2pYb3NBUG1lMGpSVGQvc1ZWZm1iSGZES1JHWEE0V3NoaUFJVjJhT2JuY3FqZHI1c0pOLy8xb0lTWnhvbzZmWDlDSEcyV2I2cE1wandvRWlTSkRyNHhiV3JRNzU2Y044b0RSYmRxWU1VaVFwZ2psaWUwVE1LRytvR3ZtbTY2YWtDRDlPa0EvY0dMWDFhUGFWclZWaTZ2dE9pRDgrUEVsZDk5ekJmZlk4YnFyNlkwYTNEQ2JMdm1EbG0wb2tTZXhxd1hvV0NsOFdNYjRWZ3ZickhGeXR1aysrdGVMN3FZOU5mZm1sNWZkeTNacExwL1NBbkV4NytiMFRZQkZmZExlREYrZFlhN254ekg1YVZ4KzRlZllHVTA3OXl5Nmg0K3VtS3N2cXQ2clcveEw0Mlk0aXJrdkVrTTdoVHlBbGd5YWpaVUxGMDVrZmpjb2l3RVkvZnFwN3k3cmQrcVdVQXlFK3dWVGtDcHh2eWNrb0JmbVdtNUsxbzRWZS9ldlJKQ2xhVmluS09SdW5QUWR4Uk44T3VCUm5nc2ZWdlFhTkJLdWM4K2QwdnlwZDZTdTJWcDFaYTNjY1o4WVhrM1RJNWR1MzNtODdoNDl1dXlPempUZDVNUzQ1bm90dExTWEtzL05GZ0dhUUVWTU4xV2tDS09ZT3Z1ODl3amV3RTFadG1VcnA3dDJUWGZ3eEtLOHk1SjcxYjZpdTM1WDBVM3J4N0RLOGdwNERBSmVneW5pMGFmMTFzK1JtdnVCM3Y3aHhsVkZmRURmNW5zV3NDbGpOS3JXWEh3Rk9WQkdFWk13TTdFVzVrc3p6enlZTmdCUEVNQTFRbVlEbUh2NjNxVTlqY1ljaktEa3ZrRjE4Q3FEZHFmMW84bDNINnk3ZjMxYlNVTFhyNDJkbzYzdmlhR3dFM2t2MUY0NDR3Q0FMdW13dnZNME5FK082NWRIZVhMMk8xK1ljOTg3V25QYnRpekp6UlpOcUEydDV2bWwwd1hWczA3Z0lRc2p2aXFyNFlaTzNaUXZRMER4T3BqeitiTmd2UFhrU0lYQXc3Tk1GNXhoNzk1UnJRTU9uNjVKbWN0dVFudTZkMjRiZHd2ekYwUmJENnIwNnJmZVhyY0hWdERodHdOSGRiUEozRHhLTnlQMGhwaHdrY2pIS3oxeVE3R2EyR2R1dElOdzd2Z0QzeFRtYkdGUUE0Q1dGOFhDd25LdXVYSTZyNWFpM2Q4SUJHME5kRUxnZjNqUGlrWkYzcjN5V3UzUGtjVmYxTXVsOGJjbkFtWmhDMEx2MlFkUEhnakp6U0NGMXR3N1B6bXJBZTkrNzB2bjNhTzZWTXRYeXZvZVQwRS8xZTZWeWJ6TDVSNGV3b1JxQ0h3Wkk3aWd6WVB4NVV2ckUxQ2VYT0FrRUNRWE82VWtzSHdJS3JhQk1hYWpBb1lnMThQY3Z5d2U1cVNXbVFzcWt3RUFqZUpIOWYza2FIQVdpejhiOWFvajd6blZPYzBIeGVtODBnV05zS3JXTWtWWGYrSDAvTHdlRzFsSVE0V2kzdEdnQmhCYmcxanovL0pSZUVTWW5ZODNJNWppaEFWOUdsWEE1M1JwOWNIUExMcjN2Nm5zM25pamJxUm9FY1pUMjdRWFNaclFYQm1UUTRJU2F1MUEybGJIaWwrWXJidmYvZnk4KzlQdnpMdWlsRi9rMnQxR05RcVJhelZtUTJ0Rk9IY3VFekVLNWlUdmJzSHZZUkE2dkZnK05HdjNCeDVvSnkra1UyaGh2TnFpVkhqdHp4YW5ZZEVuS2ZQNWwyYjZKMzNVME9DQUQveVpJVVM2TUpBRUEvWk1KV1ZLQ0lZSFJoaEF2clYwVENXOEc5TFJNZzNlSzcwUkEyZzF6NTk3TmpjMUxYd1lnQmRCTjNLRXFOcFFyTkVuTjMxR28rRFg3bHAwMTA0dHVldW44MjZiRm1SY3cxcVF4aU0wcTk5eXVheFgwT1VtVWlGTmlVVTFpNnNUK3ZIS3g0NnZDSGRUcTN4K2lWTUtsMlg0YTJjaFoyVHhoNUJEaUdrTUEvWnRWRklYR1RDNHNPcnVLQXNJUXVSSFp4c0FPdkJGOERSa0lLTEJPZ2lEYk11akRXTmNKYnpCaVVLQ0V2NEMzMG1aYjJ0Z0ttTlJ5UWV3YWhkbUQ2dU1aVG1RUGFCcHNUcGtNUUNRV3Y5V3poNTVzclQ5WlEzZGU5Ymo5dGpsMWNqVHhzRUtHeGZjbENBT24ybTZKL1MrR3dzaUhpMmFGeEYyNDFxR1VDcVYzUGhFeWMzTWRCcEFKd1hFTFVHYmF5KzRNVjBLMlNxZWVWVEd4bHhxcjFKSmdBWVo1QWdPa294ZGowR3BZTVFKU0VoMHVGOGFyZ29BNmdodURQNHBpWDRCLzQyM3dkRjRYcXlIQ1JaZ2FSSGhJejFmVHBVNDdHeGlMZUtKS3RZUGxWeXpjZkhja1NkRGVYK0Z4SWFwT0lzQjBNeVExNDdkOTFSbC84K2VMaFRLdTJzMjYvVG0wdHk0R3BtZ0JlTG5PRndXSDJyMGN5U3JZeHY3aGtJcERFQ1dNajZpS1dKSkUyVlhTSVJqNWNyWnZ5aG82TVE1bERtZkFrYWYwVTRhSlFtek5vUnJBbFpNeCtKZ0UwTUtkaklxZzU3YS9ZMHRSRDBnWld4M2U0QUVLa1dxazQ5VVJRUU9NVFY0bGtsNTBYS3VmdnI0RS9mcGJnVFN5TVo0VmdNd2pvNy8xVzgvZjhQcmZ2bnhRckdzbTVmcVZoZ0JnYmNrTW5FbmZUQlZtSklZRjF5LzhiS0dGdWhpR2NYVHpNZDgxY3QvMFhNOTloQ3dtdW5rSTUxSiswS1ZkYnJVaEJWUHlrUmxSZ0NLV0VhOHdXQTRZdHRBTEJwWmpHTjF6eGoycWVoZ3RDZWt3WENacXdzTVYyd3UvK0N2UC8zZlRnYklRVm9uU05lVGNBS29CSWc1WktUemk2MExwNzVSM0xIbFo3RkNMcTM2aHNDT1diWjFENlhveG9pdHZGVkp2WG90MVJzS0RJRzdkaXpRQ2dOdGN2UEtwN0VmOGVBS3F2QW9EUzlGb2RUeXBDMHZtR2dFSG5ENDU0Zy9UYjhubFRTL1BRRlNoWUtkckdvZEpRTlltVC8xallzWHVhNHlSd2FXZ1RIWm1pT0ZkcjBraUcyaGNlSFE1NzZhYnpSbVdISGJIU3ZWb0x6dUE4WFR5QVN1aEJlR2xLc1N2RWY4MDR5ZCtsT2REQ3RkMGovdE1YajRnQzJoNDJrYkQxMjgyWDBaR09zcTcrWi9HUGxoMDRCM0J0NU83VmtZTHpabWpqend4YStvSjRTNENQUzVBYzVaRFNBU2NTZS85QjhPTlJmUC9KK0tyci90STBaaUtycTVkTXlsVVRwUDJpekN5cjBScEEwQkZXSXU4UnhVbWhoS2Q1NjIxcDZGWE1EZFRhOFhENUdQYnRnZmlyd3Nlb3QyRGUzVGhWaGgrZXlYUC8vN0h6Z1VwSXF0WndwWkRRQVJRNFRyelpVTGozM3VVOW9nTXNmREMxYlM2NDRXTlVycHZ5T3RxblpsT3QydkFlVUthMVd2eHcrTjE0TzUxUHFoMDVEMHVhUytRazhzZDFRYmM4Y2UvTklkRWdQNjBOT1daQXBRY3JDUTFRREFpc3doMWpqeGhYL3pTSFB1eUIrYkY5RENiVzF0aEpacmFVd2doRGdLZlc2TjgxcTRma1RyOEl3N0ovVVllNDhTRjQ3OXIvLzlPLy95RWFXaVRvZ3poWTBhQUhPTldkM3ByL3pLeDNPMStlOVZkUysreU1KT0xBempvQmZEd0xNV0RzUm1VODJRZU81RmE1ZzB3TFZOanhCZmRwV2VLQmJtdi9lMU8zN2w0eEpUMUFXZVdSRFp3a1lNQUFvUXNtbGc1bnQzblZ3ODlNVmZMK1hyNXlyNm5BazNZRGJEOENYQVZNUVgwQTljS2ZlL3RYN3V4S05mL1BWSHYvN25YUHFaSGhSblZqNWNibFJiRU1QaXVBM1VmUGJPdDkrM2VPeWVENVhMamVVS24ybmZOQUtKWlhnQllVOXEwWGZneXJ5N2ZrOXo2ZnpoZXo3MEovLzU3ZmVxT05HQjBpK3FBZEE3Q0xJVzRCRms0L0FuMy9Ubnl5Y2YrbENsMGx5dWlsbnU1MitHUzVOQTFDajdGbDkrVGQ3ZHNMZTV2SGo4dXgvNkh4OTgwNTNJWElmSlhuRUV6VXh3R0ZxQ09FZGg1cUZQSE55eS83WmpsZTFYL0wxOHFUaWlyYU5hWldmbmpSOTlMdXNlOTVKZWk3NmNvYUpkUXJESFBnSzdlWGdaaUhGenFxb2JOc3Q2cVdSUVVaakVkT0xxYXMrMm9udkYvcHk3WmtvYnZwNzcxcTkrL04rOS9qTmlFN2VQOHMwREs4NHVaRFVpRE5NQTBGWis1dUU3RG8xT0hYaTR1dk82RzR2VnltNW1tZlJESWFPNnp1bkgxUUNpZ2JBdGJLdEcvYlY3dGIxdHYzUFRvL09QSEhuZ3ovNzlwLzdqMis2VzZGQStkLzB1V2Ztb1lSZ0dBQjRza01PTVlPNzdkNTJvblQ3MHRkRjlyMm1XeHladktGVUxlcm1KNVVaNDhyV092ZjZvRzRCMVB5MERYWXB3NjdzaXI3ZE5pcjk2Rnk0LzU2N2FYajlmbkgvbUQ3NzZzZmQvNkt1Zi9xM3ZTNEJSK2NTWjcvcXB6YXJBVmRDd0FyZ3dLSjR2NlA2Z0hhVXJmdTUzWHpWeDh6OTdWNjQ2L1pabXZyU05id3cxeEQ2dm1QTVJaS1lJTzlTQXl5aHVjL0tKMURFSllsWWJQUzVYWUxSTmFGZHVRMXVKRi9qcy9RWWxrZFpqbWxlUFRtWXZ1OSt5cGVET2E1ZXc3UWhTQlE4clViajJpTmk3Q2FQYUlUeWhwM3BiSjdWWlZQZjJ4MHYxYzduRlUzLzU5TDEvOXNlZi85Z0hIaFZlRk01K1A5dythUVphUDlLcUdqeHNzTnQ5Q1lDUG9ZNFI4Q3lYdmVDa0s5TnYvazh2bTd6aDUyOHJUbDc5dWx4cDdJWm1yaklsU0Y3ZmwyRFVtM0NRNXFQSC9DSUp2NnpWM2MyaDlCcTBRc1QrUkF4eVVXSkZLUndZQXAyd3g4dkVNWitPQWFDT0k1U1RpZWtrbGlSUThxUVVPNjl0NXhnREd6Z3hjRzFjc2w5ZVlUT0hkcU0zS3JtbE0vbkd3cUhsMlNQZmV1YkJMMzd0N2ovNHRTZUVIcVhIeFI0dW54R0JDSVlsQnV1RDhBMDFtRnlFc2RzUThBNlVqZTI4OVgyN1I2NTgvZjdTanV1dkswenN1aXBmSEwyaTVUQ0kwcVMwVU5FQ3NEUTJrUy9PenVCUndvTjlQVGptT1lBOEJQZ3ZQV0FBVWd5ZWlHM2hLSW90WnNraEtpZ3M1akVPMGhZcmpZR1FqdVZLMnErRGFmMnFUVHhpVXA4bjEzY09Xc1ZpcXprKzZocUxDL3BOajJaVFB5ZlpXczQzVjg3bjNQS1pYSFBoK09Mc3FTTnpKNTk2K3RTVDl6NTl6MTBmUFNVMCtoRVpVenFLeHdBWThTZytqdnFoS1Y4NGh5Uk1NSzBPeUlRRHhYUEkxczBiRUV0OEZ0SjFsZEc5cjZsV2QreXY1TWVueXFPVE8wcTFsVktwVlJ6UjFuNkpucGZmc1FFZWd4SDQrYzFMRENNYWhValpuOFFrUnFCc3ZJS05lUW9qb3pGTnN3Uk9hVzFHc1I4bktHb25xTDc0clgwdWN2aThTTnRZYkpSMG5URi80ZXpLeFhObmF1ZFBIMTQ2K2RTRHk5cElnM0xqUWc0MlVDeEtSdGxSNlpkTjhhSmg0WktGR0JHdEVVT0RBNlhISThxVE9KWkZ1RFJQNmJSQWYyZ0N5a3p6bmg2MXBPT0J3cVBTaVRHRVdFWWM0WlM4UENITjVPV2gwTVlhYVJHbkR3d2c1b0dPZWRLRTJNN25mdmpPM2NxUGlxVW5NUjBWSFdQcTB1M0lYNWJ3dHlYY2JycnBmRHBOcDd2emwwVVFseEZwdHlMVCtYUWFGcnJ6bDVFdGovcWxLdHlYS2wrWHFwQVhYY0dYeXZCbSswMEpiRXBnVXdLYkV0aVV3S1lFTmlXd0tZRk5DV3hLWUZNQ214TFlsTUNtQkg1MEpQRC9BYVVjdVE1N1EyS0lBQUFBQUVsRlRrU3VRbUNDaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQVFBQUFBRUFDQVlBQUFCY2NxaG1BQUFBQkdkQlRVRUFBTEdQQy94aEJRQUFBQ0JqU0ZKTkFBQjZKZ0FBZ0lRQUFQb0FBQUNBNkFBQWRUQUFBT3BnQUFBNm1BQUFGM0NjdWxFOEFBQUFlR1ZZU1daTlRRQXFBQUFBQ0FBRUFSb0FCUUFBQUFFQUFBQStBUnNBQlFBQUFBRUFBQUJHQVNnQUF3QUFBQUVBQWdBQWgya0FCQUFBQUFFQUFBQk9BQUFBQUFBQUFKQUFBQUFCQUFBQWtBQUFBQUVBQTZBQkFBTUFBQUFCQUFFQUFLQUNBQVFBQUFBQkFBQUJBS0FEQUFRQUFBQUJBQUFCQUFBQUFBQzFaNkxvQUFBQUNYQklXWE1BQUJZbEFBQVdKUUZKVWlUd0FBQUJuV2xVV0hSWVRVdzZZMjl0TG1Ga2IySmxMbmh0Y0FBQUFBQUFQSGc2ZUcxd2JXVjBZU0I0Yld4dWN6cDRQU0poWkc5aVpUcHVjenB0WlhSaEx5SWdlRHA0YlhCMGF6MGlXRTFRSUVOdmNtVWdOaTR3TGpBaVBnb2dJQ0E4Y21SbU9sSkVSaUI0Yld4dWN6cHlaR1k5SW1oMGRIQTZMeTkzZDNjdWR6TXViM0puTHpFNU9Ua3ZNREl2TWpJdGNtUm1MWE41Ym5SaGVDMXVjeU1pUGdvZ0lDQWdJQ0E4Y21SbU9rUmxjMk55YVhCMGFXOXVJSEprWmpwaFltOTFkRDBpSWdvZ0lDQWdJQ0FnSUNBZ0lDQjRiV3h1Y3pwbGVHbG1QU0pvZEhSd09pOHZibk11WVdSdlltVXVZMjl0TDJWNGFXWXZNUzR3THlJK0NpQWdJQ0FnSUNBZ0lEeGxlR2xtT2xCcGVHVnNXRVJwYldWdWMybHZiajR5TlRZOEwyVjRhV1k2VUdsNFpXeFlSR2x0Wlc1emFXOXVQZ29nSUNBZ0lDQWdJQ0E4WlhocFpqcFFhWGhsYkZsRWFXMWxibk5wYjI0K01qVTJQQzlsZUdsbU9sQnBlR1ZzV1VScGJXVnVjMmx2Ymo0S0lDQWdJQ0FnUEM5eVpHWTZSR1Z6WTNKcGNIUnBiMjQrQ2lBZ0lEd3ZjbVJtT2xKRVJqNEtQQzk0T25odGNHMWxkR0UrQ2w2d0hoc0FBRUFBU1VSQlZIZ0I3TDE3dEc5TFZ0ZTNmdnQ5bnZmOTZOdjMzbjdjaGdhYTdzWldCSU5nVkh3Z3daWVlEUWl0S01NWGYraUl3YUFSa1dIVWtXaFFFOGVBa0JBRDBhQXlJc0pBVVFNa21nd0lBU0tTRmtUZ2RqZmR0Mi9mUjkvWGVaLzl6UGZ6blRWcjFWcjd0OC9aZTUvOSs1MTltbC90dlZiTm1uUFdyRGxuVmMycXRYN3J0MzVkdDBnTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhjRGM4TUxrYmpkNGpiUzU4YzQ5MDFCSFUzRHNDNzY4STFsK3Bnenp0WmtBa2ZKUU9QMDZkbzhoZjhCN1BBOGVaNE8wWU9FNzk0Mmw2U21yOVNocklCOWs2eG8vTGJWZmRpdGJ5TGVDNzY0R0RKdkkwL0RRYzJoK0V2N3VXblhEckt5Y3M3elNJWTVMU2VkTW1hNHRMT0hOMFB3Z2UweWhuYXVza2JwSFB6d01IVGRScCtNUmxqcFlId2EwRjhORFBMVzlMdjJmaFQ2WEJPODJXeEpHM01CM1dsaE1HVHlkblIrODJjT0xneVpUMU1oL2pzN3pJVDhZRDR6N0ljdVp0SzlrbjVPTUR2cXpUNWkwOGpRZGNwdVROOGoyWnA1UHVTZVVicFZzN0VoNTNlb3VuODVqY09jR1hCSysrKzkzdjN2aThyLzdxY3crKzVkTXVuSC8wa1lzWDdyL3ZRbmRtNCtMeSt0bnp5MHZMNTFmWFY4NnVyNjJjMmR5YmJHeHVkZXRMeTh1cjNXUnBWWFZYOWlaN0t4SzYzSFZMUzhxWDl2WjJrVG5aNjVZbTNkN2VaSmRzZDg4NlpPT2l4eWdVQWtWSSsyZ2lwSkxRQjdDWWs5KzVpRm0yTEJXUzN6a25wUjBkeTlMMHpKbXUyMUxoeXJWU3I2bS9ONlZ1eXJvVnpUeXFTeHVHZGNwNnU4THJmejllT0dTNmpwajNsaVp5MzU3NGxBc1FYbzViMmhYUDd1N2U3dTVrMHUzSXBkdVN0TDIzMjIxMXV6dGI5OTNYM1Z5ZTdOMTQvZFh0NjV1YjI5ZjJkbmV1VEc1ZXU3SjM4OGFsM1V0dlhONTU1ZVZMTnovMGk1ZDMvc1hmdmZyR0J6OTRRMDF1RlZYb0UvcksvYVVjRmZNUVdHRndwTXpIc0luMzJpa254YjJtTi9xMnVpZE1QdTJnMHpSZ25OYS83bHYrMGtPZjl1dC95NU5uSG4vaW1kV3o1NTlaV2xsN1c3ZXkrcVFHM0dPN1M4c1BhT3hkRUh4R2xWWTdYU1F4YlRsV05kV1o3ZGQxM05Ud1FTaURHaUFIT2JEeFFpZGNXTUI0b0dlWmZCK1BrQzE5R2crVHBmSUl5TGFuNGJQTmxnZVlBSEQrZkFTQVM1ZDd2UWFUdExTVE9OcE1PSFByMGVpUStKcGo0a2pPbUdiZGtxZnc3OE1KZjJCUzM5ei9RTmowK3F2cWFQVTBiZG94UkpXOWJtdXYyN3V1L1BKa2IrYzFSWklYSjl0YnorMXViWDU0OStxVlovZGVmZjdaNnovK1E4KzkrdGUvOFJWeDN5enR5RU1PQ2tnNjZDaXNwaWQ4VCtWTWxuc3R0VG9ubk5HYmNoNTBQY2ZaYi82KzczdjZ6ZTk5MzN2WEgzencxKzR0cmIxUGsvd2QyOTNTbzN0cjNjcTJ1RGMxMmpZMWFHN3FZRVhrMkJadWgwTmR6N0VyZUhXajY5YldGUUFVQWE2emhpZ0pIYjB2bm5hVVFQTWdCRkJLV3NJZ3dOV3lBUE1VNUQ1YWc2ODBBY0NITHNOYjZpd3JzRjI0SUZzVnlCd0FVbzdvMkVSSzNuSFpiUlk1aHMzYytFSmxKam5KZFFXM01pb3NlcmFSY2dabElZdVltbHZvbEZNR2dOZGVpMzZEeFFOQko4dlFDTkhPd1ZONm9xazlLU05tSW1WMk43dnR5ZDd1UzVOdTl4ZjN0bS8rOU43cnIvN0UxaS8rcTU5NTRZLzlybytxaHZaSERnVGNMMHMxTVNGaGdRUDFVbVh3cHo3aGtuc2x0Ym9tbkJNL2Myelplc2M3SGp6M0o3NzNYL3lxQjU5Nnl4ZnZyWjM1amR0TEs1Kzlzeks1YjFPMXJtNnFSM1ZjMThDL29RbnZ5YS91Wk1KdmthdjdPQWFUWDBJcHJ5c0FiR2piZkZWRDRocmJaclFRTHowdWNwOEtEbnlic3N3Z0wxVXJHVnJTS3pKeGhkRFNCM0JEYi9ISXlRbVZNcUZ6ckdnNDMzY3hBc0FibC9xMnN6NzFTRmxPdUpWWGFRWEFCeFVIWEFwa0EzeWhKUzV6b1FkMVhBYW5ZK3d2YUNUd0hHMEFvQy9CWmZMRXI0VkNLeFVaT0V4dmdzS1NmRExod0pDdHZUZDBoZkZ2OW01ZS96LzJYdmpsSDM3dWEvNzluKzVlZmZXS0tHd0NxWjNtWmo0d1EvUjdJclYrT3MwS3QzcVdycXZYYkd6VmNQNzJuL3oyYjMvaWZWLyt1OSsvZk9HKzM3ZlpMWC91MXRwaytaSTJkSmUxV2pQeHIydGx2OUVjVFA2YktwTXphSnhMa2xkLzVUdGF4a1QyYWtZQU9IT1dZOUpkdnJLbkFDQUdORkVtVXA5VTFyK1BIcmtmZ3VlNEtaM1J5OUFHdHk4VXNja1Z4UUZaaFJVTjQvc2ZXUElPNEkzWHNmTGdsSFVuTWpoZ25SMzlwdGVSTm9VUU9neEx2Vzk2dm1BUHZxSGViUXN0SldVbS9RSFpzcUtSOE5wcjZqTnQyU1psMXNNSEdIVURxR1dLUWVCT2pabE1FN3hFUUZpTG9MQjNjMjluYVcvbkovZXV2dkhkbC8vNVAveisxNzc1ajM1YzNPd0lxRVgzMDB6bXJXb3RMSmJUbDRyNXAwK3hScVBVa1R3UEFuZXUrcHQvNXU5OHo5cysrei80Ylg5Zzc4ejUzNys1dXZUMDY1cjByMnFGdnF4SmYxV3IvRldONyt2S0NRQ1pFd2h1YXFDdzZtOHFaOVhuTHBPMys4cmRjenBsRDdLbFBYZCtxVHQzYnFtN2NtVzN1M1pWZHdsU3MwYlpld0tVTFN1ckV3V0E1VzVUVjhlWGJoTUE3Z1V6c1dWNWVkSzkvdHFPQTBEMkEvM1g2eThvL3BVVHppQXFCMWR6b3dwT2c0emRnWTVsWGZwNWg3QzUrOUhkYTFmKzU1cy8vcjkvNTB0LzRzcy9JZ25zQ0VnRWdEWUk1TkRKM0V5bjdXUWZuRGFsR24xU1AvS2M4T1NzK2x0Zi9aZi84c08vOVk5KzNkY3VuYi80eDIrc0xUM3hzalpvcjJqaXY4RjFyWTdMT3E1d2FQSmYwd3lQSFlBbXZXYTViaVBYRzFwTmV3YXowUmJQQ3Zzck5RQzBmaml0OEVFQjRORDZFZ1dVSWhEb013Y0NBcE5mYUlJQU93UUhBdTBLQ0FiYUxqNC91WHpwMjY1OTcvL3dIUy8vdGYvc2s4SVFDRElJdElGQTZMcU9BSitxTkcyc254WUZVemNtUEFmbDNPNVB2dVBESDMzLzJUZTk2UnR2cksyODYwVk4vSmMxOFYvWGl2K2FqamQwQUYvYTNOTU9ZRS9iZmsxNExlSDBTcVlVbnVYYjVZc0FjRHNQM1YzNkhRZUFzZm9FQVA0MDh6TVlPQkFRREhRczEwQ3cvYk43TDN6aUwzM3NpNS8rdmlLQ29jVTFWUWFCZHRpZHV0MEFFK3UwSlJ5WUIvcmx3VFhYOXAvNW51OTU4bis1Zk8wN1ZwNTQ2dSs5c0x2eXJwOS91ZXQrNmZXdSs3Q0N3TFA2T091WGRFUHJGeS90ZGgrNXZOTzlxQ1gvc3ZiNFc1cjhlRDZGa2kvU3dnTzM5QUNYZ1hySVlIZG5wOXZtMEkyaGJTMG1mTVRJc2FYN1Nwc2FiN3VUbFhkTjN2VFUzM3ZMVDEvN2prZi8yMy8wWnNrVTFmY0hXS3h5N09hUXkveVdUYytUZU5vVVNuM0kwM21aYjMvYnYvdWxMNzN2clcvOXI2K3NMTC85T1UzNlQ2b1RQcW5yZmVlQ1g3dTUyMTJtazdoZ1YwcGhMdHpoYWJFRHVFTUh6cmo2aWU4QUR0QjNvdVYvU2NleVJxVjNCSnJtUEZPeGNrN2piWFBuUXpzZis4alhQL2NsNy9qSHFwNlhCTzF1SUhjQW1SL1F5dnpRVEs3VGtuSyt0cE9mS0RwNVdENytyaGRmK2M4dnZQMlp2Ly9penZMYmYwR3Iva2UwNHJQcWYwaFIrTmxMZTkzSGRLZnZOZDNHWjZ1UGdCUjJXb3hiNlBHcDRRRTlpTmp0Yk85MFcrd0lOTFYzMkJIb1BoTzdnWjNKOHR1WDMvck0zMy82UjEvNWM3S1d1Y1V3Wk9lYXU0RWNscG1MZEhmVGFRa0E2UkJ5ZE9MQWNkMVgvc2svZWZHL2VmM0tmOWM5OHVCZitPV3IzZHF6V3ZtVk93Qjg2UEtldC9xdjZMTTh0dmtwaEhxTHRQREE3RHlneXdNRmdtMEhBdTA0U3lEWTBnTmkyNXZkR21QMUxUOTE1ZHZQZitEcjlhaVZyejR6QUdSUVFMVlRNVnhSN0c2bmRNUjQ4dS85c2IveE54NzdMWC82ejM3WHpmTm4zdjloUGVMNW5DYit4M1d6aitOalYvZTZWL1JaSGgvalVUR0Z6TktZdGJWSng3R3BtNHRiK3ZpczNEaWVaWk16azcya2o4dzJ6aXo1QWFlYk4wN05qdlRZOW1MTGttN1kzWkF0WEs3TksrbkxDcVU5alVDMVM5dDhlV0hwNHRxN3o3enZON3h2OHZEalAzTGovL3BCN1ZXOXFJM1Ztc2V3SGJjNUtOL3RBSkFPSUNjNm9nOHIvOTZmL3ZidmZPTFgvYUUvOU4zWE50YS82RmxOL284cnVqTHhueU1BNkRQNFM4eDhwUlRnd294UGl3QXdZd2ZmZ2ZpN0ZRQ3NzbVk5ejVDMFM5R2VMZ3VXejYrOGZlUFRQK2Z6Tjk3eW1UOTA5VWUrVnhjSlU0UEFIVmg5NTFWUFF3REl5ViszL2F6OHYrNFBmdTEzWDlsWSsveG45UWxydStwLzR0cXVQOWFiNThSUE55OENRSHJpOU9WM05RQVVkM2oxMXhPUy9Ia1RvaUN3ZEg3NXlkVzNmc2JuVFI1NjdKOXBKNkE5N09rS0FuY3pBRENIeDVOLzhudSs3dXN1L3JaditIUGZkZTNzK2hjK3ErOW01Y3IvVVczNVg3d1JIK25kamNsUEh5OENBRjQ0bmVrMEJBQTg0MHNDaDRBK0NFd1VCRGJlOFo3M2JMLzYyai9aK3JtZjFCTXFIdmRtcDBwVEJqZlh4S3A3TjFMTzRRd0FCS0tsQng1NFlPWEwvb3YvNm0vY1BMZnhtejZrbGYvNWNyMy9VVDE3LzVJKzArZmp2YXg0TjVSZXRMbnd3R0U4NEdjSDlISDBydTRGY0lOd216c0FGelorMDhOZi8xZi9ldmZnZzF6aU11L2FBN0YzWldqZmpRQ1FocllPSUFEcy9QVVAvdngvMmoxdy9pcytvbXYrVCtoei9lZDEzYy9OdnBkMXM0OW45TE1pM2xxa2hRZE9zd2QyTmZ1M2VRS1ZUd2gwYkNrSTdEMXc3aXVmK3Q1LysvWFNXNWpUOGZIZ3ZBTkF6bUh5REFCRXhPMi8rYTkrNW5lc1B2Ym9OM3hNVC9KOVFoUC9FNzdacDBkOEY1TmY3bG1rZTlFRDdBVDRacUtEZ0o0WDJORzRYbnIwMFc5NDB6LzZtUytWUFR3eDZKMnZjdVpDT3pkVW5FK2Fad0JvRFV5RGZRL2lqLy9OYjMzTHc1LzVybTk1YWF0YlkrSy9JRWV4L1g5Ums1K3Y1bWJGK2JoazBjckNBeWZuZ1YwZUhOSjY3OHNCM1JSVVBGaGJlL3U3dnVYaGIvN3ZueTZ0NUVLWWMrTGtHaitFcEhrR2dGU0grY3pCNU9lWWZONVhmZFZmdkw2Ky9KYm50ZnEvcU1sUEFIangrcTYvcHJ1WS9QTFFJdDI3SHRCSEF6dmVDWlFnb0V2YjNUUExiem43MjcveUw4cW9uQWM1K1hPNFp6NXp1K2NWQU5JZ2NnN2FaZkp2LzgxLy9jSDNUKzYvK0h1ZTA2dWNYdFp6L1JFQTlIMTdMZjFaU1h5bklxWHlldFBucDBUS2p2aFVNQ2I3NWxUYVFoQm9kZ0k3ZkJoNDhmenZmZFAzLyt6N0JiV1hBbk0zdzQvYnpzbHBhVnhPL3NtWC9aRS84c2hENzNqbk43NjgxVTFlMXFyUDhkSjF2YmxSWCtyaDFicW5LZms1RDNRcWVxRWZCdDJUU2JyYnY4V2UwK2JyWS9tMHNjVjlkU3doczZ1MHAxZEs3V2pFOE5YaUhRMGN2VXQ2c3ZyMHAvMzVCNy9pNi83UFYvLyt0MnI1ODZKWXJLZ2ZEVktlYVpwSEFHam5DWk0vQThET2wvM1p2L0MxVzJkWDMvbkNTL0d0dnBlMFBYcFpuL1VyQnB5NnlVVlA4QjRJbmova0V3bHRWazZkamxMcFVLbTFCWHV3NVY1T0RERHNJT2REZGwxcW44cStXZEV1WUdsbjJZK1E3MmlzTDExWWZlZlpQL3pudmxZQjRMK1V5c3hGdWlaTkFaNTU4azI0R2JkQ3YrVEI1TWZRcFQvNHpYL2w2VS83cmIvOWI3MXdZM0tlWi95NTZmZWNQdko3UTkvb2d5a3JuSnBjM2JHdTd3R3M2MVZhL2k2QXZnOXdLdlU4ak85a3k2cWVteit6c2VTYlV6dy9mMnI4ZkJqOVJ6ejB3MW5ad3VwNlU2dUh2c1ovS3UycHUwZGVOaUtINC9PVk0rYytjMlhqM1BkZi8vRWYxaDB3SnlaK0hyRE1OT0c3ZVNYYXlodC9PMS93dFYvNyt6YzNsaDU3V1pQL1ZTMUJyeWdpTXZteEdNYlRlSER0bjhkcDFPOG9PdUZuMzh1UVRVZXBkeHA1MDVhOE4zTWFkVVFuOVBTbkFucWdUWnVCYmxmamZrOXo0TXo3ditZUGlNU3pBY3lQWklXZGxIbVVUdmc4NjBzQTk0MTBUcVBJdXkvL1UzL3F6YXYzUC9TQjUvWDFDRjdoOVpvYzhhcFdvVjN0cldldDBISDl4M1ZsYThReXdlQzR3dTUyUFd3cCttTVR0dHpyS1FlYWJUbkY5cUFhNDV5Zk45cVYwbHdLTE4vMzBBY3VmczJmL2g4dmZlZGZlMEZrdW9RanJjaGNxSk5QODVwdjlFOGF0dlBGZi9qcmZ1Zk9tZVVuWHRHMVArL3VlMVZPdUtUVm4ydTMwNXJvaFEyZEZMeDlENkI5b1B1MDZudzd2YkNGQTF2dTVjVGd3ZzUyQUl3aGJxdWY1clRFdlFETmZnNzlLSW0rTmJqOHhJWGYrOGQvcHdMQXQwbHY1a25HTTFrMDJ6VExBSUFScERUR0FlQnRiM3ZiMlhPUFAva1ZiUGt2eVhoZTRmM2FUVjdQSGRmVVVlWDBuZlBPY3ZaSXJxQ25UOVBiYTRRdFRCWnM0YmpYUHdWZ2dMVzIzQXYydEx1QVhVV3M1WWVlK01yenp6enpkNjQ4KzZ4bWhvUEFYRzRHTWlsbm1YTHlrOVBXN2dmKzFyZCt6dTc2K250ZjFiVS9yKzUrUXdIZ3FyN2IzektlVmhoSFdUZU50dE9xNDJIMXFyYWtUZmR3ZmkvYTRoOC8xUlRuaGlYM0Fqck5pYk4vNnRzK1J4QVQzNHVsOHJZN1ZUejVOTXNkUUdxTEVXblE3cHMvKzNOKzg3Witjdk9LVm45K3VJTlhkL084OUR3VVNZV09rL3NlQUJPL1RQNTcvUjZBOVMvMmZFcmNBeWkyc1ByZkcvWndJMUJ2SGRhUFNPOXh6WEsyVzFuNzlIZDlzYUFmMWNITlFHNEtNbmRtbW1ZMTcxTHhqR0FPQU9mT25UdXpkdUgrTDJMNzcxL3MwUTdnaWw2dHhYVmJWcGlwdFhjZ1hPTXFYdjBrZ0dCd0wraDhrTG5ZZ3IreEkyMDVpUGRld0xlMk1KZkc5d0J5RUdJTHRwK1dwQjg4angwQS9hQUJ0WHord1MvU1R6YWYxVTlQYVdtY3oyWEFyQUlBUGs2L1o5Nzl4OS8wVFUvdHJhNS8xbVU5OFVjQTRGZDcrTkVPQnVGcFQ1NHNVcEw5R2VybVRxRFgreDR3SXBWbHdIRlVXKzRoM2RPR1VkN2FNdkdBWXRqMUtTM012S2ZjUFVnajN6Y3ZmUm1nS2IrMHN2NVpELy9SYjM3Nms5L3k5YjhrclhMZXBDSGtKNjcrTEFNQW5rWHB1djEvMTIvNExlL1pYWnRjdUtwSEh2aDEzcXM2K000MERLY3hwZWZSRGM5NzBnc2dYOUlnTTcwd2didG5rblJsbTh4MitkN1pNdC9hdTJsTDJyTkhoK2gvblBaNEFtZVVwckNOT0daVVJFWHZBdlJwQUJ2K3M1TUxhNS83eGU4UjlBczZtQmFwTFBsTTFKeGxBRURwUERCbTcrTGpiLzQxbXZQeEE1M2FBVnpYVzFQb3Axa3FvZVpPSlBHcUo0eHhyNVN1WURkQXQ5eXFkMmJTYTNkb0VUbzU2QXBnc1dUczNhc0ozN2VKUHNsK1NkL2JWdUU5R0ROd3U5VFd2RHV3QXdDL3RDeWw5NlRvOGtOditseHA4ci9xOEZCVDNwb0luR1lKdlBNMGk3bVhDcFBuZ1RHcksrZlB2NWZmN2RQWC9CMEUrSFhlMDVEUW90VmtBRE5Eb0N2ajRQTm1CaGlxcDNFQzc2bmszWXFVcm5wWDRKNHl3OHFpT3YyUS9ZTlJwY3VxZmVNQUIzOWFuejhqRGlid1FIM2ZSbWwyWjc5RFVBT0tjY1Y5Z0tVekY5Z0JuTkdSOXdIYVlYYmlQVFdMQUlDM1dsODZBSC94Qno3d1lMZXkvdlpyK3NqamhsWi9EZ0tBTmdFRFppcmZyY1ExV2F0NHE0Znh1TDhjYkRXZE1oZWhnb1dVMlVINHBNODlsMEs3UElUQ3dQTng2alE4bEV2YXZ1STYycDJuMlUvZlFFdXJEQ2RDT2Zpa01RRXpKWjYzK3M0cjZUTUFCU3kxclA3d3B3RXJhODljK0xLdmVmRHlEM3puaTlJQlJkcWpWL2FFRkp4VkFFQzlnZUx2L2ExZjh1VDJaUG5oNjRwcitpRWZCNERUOUxZZjN1R2EzWjdYODJrQVl3dGQ2U2Q5RjZnN3E1QzJvbDkrNDdmaGZLa0pJOXU0ZXlUWkRobHluejVzMG9jdzNVUmZjcnFYRTlwZmtDMFRIVmZWSjllMHNPUVB4dmhudmQwL0RFZzlmU2Q3V1pFS3ltYm5yS0lMd1pNU0Y2WFpuZWtMZ3BkamdCYkZwWlhsaDgvK2UxL3lwQUlBandXalRxcUVFc0FucXRwSkI0QlcyVlRZU2ovMnpEdmZwcDlMWExucGxUOVcvNG4yUFNldEFJMmVWR0xpNndubDdyd215enN2VHJvbnowKzY4MUo0YVcxSlBjRXdHaVU2YzRSeWNTcnlBTjVwOVVlNHNaTkg1T0dRS1VUWEdWVjB4ekQ1ei9JN2xpVWQwWWFtV29KSHprZHFEZXRQSVJvMXdsTmtBbTgvdHVxZDVldDZ2dVNqK2dHWjUvVTdFbHl1RVFqd2VGd09SR1hPNEd0UDFuNENDQjVxelRMUmtvTUFnTWFhM2hPd3N2clVwNzlOcFovUWtVcGtMdFRKcGxuTlB4VE9BLy91bm52bzRiZnhJZ1FtMUpaNllYTjhZWGF5ZGgxUld2UzhvN0JxbHI2d0FlKytmNm43TEMyVlRQd3ptaWZuOVZLQWRlWDhJaXdHdWdNUGFBMTU4SkNpaFlCbmRSNjBwVUtXNzdROWRNOWQwVHpzUU4vVTNlM2R4aFo0NFdPaWIybUJ1YjQ1NmE3cGVNZjVwZTRGZmNuc3AxN1o3bDdTZXliV05OdERyaGdGc09lakRrTVJQSWQzQjJaQ29nSGxzMHUwRVBjQnRBZFZrOTZGUFBEUTIwcUxWcWZBWmoxcFRVNDZBT0MxR2xBRm96VEg4c3FaODIvbDVoOFRQNFBBYWJqKzU4b2RwUWRKQ0xiNlgvREljdmMyRGFJSGRFdm1NeC9xdXZ2UCtsTE5BNGJkQWNlK3VrWFFRZmhCTzNNbzRQempwdE5pQS9vZnhnNzA1V0JDWDFjZ2VFRWZONis5T3VrZVdsdnRmbFN2bmZyd2xkMU9QNG1vRlBzM3JyK0JYVS80N05QczFMZ3NQRXpMeUR4K1d0Yk05K1NYSXVSTGErZmVLbWs1K1ZHZ1ZRSVlsVThrblhRQVNFVlQ2Y3hYbGxmWG45aFVwM0J0UmhEZ3l6KzdzaU1ybklnMXh4Q1NDckxDSmN3ZDJjOS9lTGw3KzRXbDd1MzNkOTE3SHRIV1VrU05uMjVMOXpENDhvWnZPcFZ1b05NT2xaTC9VTXlIWTJyOTExN0RVcHZtV3ZyaEpCNkNxN0czQVE5UjhkWXNyYTVqVzI1ZFUxUXE2NkRlbm5ablN6cmVwTDQ3cDZEOXk4OTMzUmMrb2tzRC9ZNzNDM3JaN0xJNm01SEhoR2VTOHlLUnZLbUxQVDZLTW96UldhY2xLMTBhMXR6UXczSnZWbWxOQjUrYUYwMEV6U0NkZEFCb1ZVUnhLLy80NDQrZjBaWE5JNXN5aDV0cC9GcktMdGYvOHUxTXJXdTFPU1NNZnF6NnoyanlQNmtmZDM3Zm8vcStndXBlMGRPTHUzcHIwWkowMTlpeTNsTjFsMDJ6SHpLSE5LYXdWVDByY0p2NnA5Q0cxTmdtSEdBSGZpZDRxNHY4bWZxMlJ2ZXFwdEZqMnIxOTRxV3UrOXlIVjdvZmZHN1QyLzVsSmo1OG12dzdpdUJjSExBN1FMVEZ6N1VUbXgyQWxGOWFYbjJrZStLSmplNzU1N1hVVkpVT3NGb2NkNUJtR1FCUXkvNzh6Qy80Z25ON1M4djNiMnIxZEFEUUpPUFhWS3V6NzhDQUU2bGFCanplNXFiUVordTZuK3Q5Vm41KzB2V1N2cms0MFMrNzZLMVQzVXE1d0duSFIvYU1jUTJoQVU5RXphTUtTYjFxUFNGYVhPcTNENWVFVW5GVXJPTG1CYlQ2dWMyUkhlQmFIWUVaWjN6a3ZLVkZoL3MxWjNVWjk0aTJjYzhvdVAvOEczbzlaOXdWZERCbkV1eHFWN0N0bFppMk1zQVBuQ1g4ekJJS3M0MVUrL3kwdUNMQS9lYy82d3ZQWFhuK0gvQ2pZcTM1d0sycEt0NVptbFVBUU5FOHVzYys2NzNuTmQzUGMvT3ZEd0RpT0ZGVGp1WUkrMXhWTkU2c2hqMHI1T01iays1KzNSbC9RcXYva3J6RCt3cjIxQTM2K1hrSEIvZlRxS2swQTlwcFN2dlVFV0xLazdCOU40aStyODRwTUdpZlR0aUJYajVOVnpBL3JtVzNlVTNIdXZyeXFtYjIyODR2ZC85T0FZQUp4ME5BclA1OHBzT2s1NTRBWDB6bmNvL0VaU0h4bnVJdG1vTDFqcFBIbGRyajBsSjZuVjkveDdzdlhQbmhmOEN6QUtTWk5UK0xBREJXZHUrUk56MTVZVyt5dEpHVDM3bU1WVGZjdFpSSzBza1o4ZEhyTVFXQUZSRWZQcStCSSswMnRmWG5iY0FzR0RuQk14OHJmeEIrekhkWHk3TDN3T0hFQUx5cnloMis4VnVaWVNucUw3YjBYRWl2cWw5NVpvUDdBZzhvdUNzR2RGYzArSmp3VEg2K044RHFEejlqZ2U5SklKL0ZRYy9uT00zU0w5YURCckxSbGFXTmxVZTVBSFZDZ3p3SzZ1U3lXUVNBMUs0cWZlN2hSeTdvMm14VnIwYVBhelRsK1dXVVpMN2JPY3B5YStnOEgvRnBzS3dxMXlkSDhUVk5FYm0ycElQSWFnNmN5WVFzRkw2K2VOY2c3R3BUNnQvaURvSkhKaDNFTmpmOFBsdGFCUnNpSUNSeWdya0R2QkFUK2xXUi9LeG1PaStoSWFycmJEcjM0ZmhVYWtVMXVTbElvbDUwT01Ec2t4ZVFzR2wxNytLakJJQTBZMmFObjJRQUNLK0ZxZ21UNzIyY1AzZUJKMzU0N0pRZ3dMYXJmUVJ6WnRiZFFuQXFpSXZ4TXJkYkdRd2JHaFIrd2srOXp5VUwxMlFNbk9UTFRvcCtFajVUZzJqQXBONjFQSFdwOWg1U2s2eDNTUGE1c0tWT1UyMkJtQVRsN095WTFDUmdRT1kxK1lZQ0FKLy9yNWtuVm44bXZ0N1k3KzAvbndnNGFKVDZ5QkJxdGtrRGE0TENOS1RHbDgrZHpSMUEyeTRhbmFncUp4a0FXa1dCcS92V3psODhoMjA0blpXVVFKQ2RNcTQwanpJZXpJTkp6OEhYZTdYb2U4Vmd1NC8yNkFrams5NTlVMkJoKzhzQkZ6amRPdEdlVXdVU2NVSzU5RVh0ZzlKSk5WdmxWT0NnRnU4QWYweGJCdlpUU0IyVkp3aWErd084TTREeHlLUm42MjlZT1o5TThkSGZscUpGKzlndzlUaG1sVHpHSkp5Y2hwWTJMcDZqR0tYWk5UM0xBQ0RkUTNHOTZPQWNsbmoxMTZRaTE1T2FweUpsdExjeTBvbjd3S3dVVEhoL1VhYm82UTRTVE5HZFZPQTZzc0JQczJpQUhCU21jUjhmWjMyYUlkcUFZNkhUU0xmVmJNQXdLSXpGMzNtNXRXV2FzcVdGQVlrQ2FwVzhncFlWTkhEWmQ0ekJmdUwzTndTWG1maUlLZlh5aHFCUU0wMXIwaWUvRTRDZTNlbzZBWUNVWm1ZZTJCTTZuM1FBbUtya3h0bTFzMnU2RzdQR1k3UWJmQ1F6NlM3cWpzeFU1aE15N0RCaUdBem9nTU41SUlUeWlrWUZPVGdmT3JGcllWZVFaUThpNkVZRVhrVXdrUld3S2ZYNG1VSk5pd0x0MzMxT3h0S0Qwb2hTaWlQc1FaVlBHRDlzZkw4dFF6c3FuV29VU3U2K0ZFd3grKzNNaGg3dDNsbnlUc0M4bXZScytibmhSOVhvNi9oSTBHSXNYSVFacGlVMXluMm5GYzNJZGQyQTNyNndxa2VZRGt4cDRZRU1oeVdjZEFBb2JnKzNTZ203YnUzTTJzYUtBc0M2amcwRmdETXk3Wnp1dE0zQnJ3ZjZJUld0REVLQVcyRWtGSmdCbzhEc2daTjVTK3RoYXZhSkVpdElwQUJxTWRFenlzT25jWGFibkFhT1Bwd21ycmFQbGR1azgwdGpXNnhUYlQ0MUtUczJGZUhuTUY4QmZNa3BCRHM2Q1BUTCt2cHlkMEc1UHhrQUxab3Yrd1FqZ0IzQTBHY2dacHZRaFFEQXdkcS9kV0ZOTTZXYWhQWXpTU2NkQUZCeW43SmJ1NU9OaVY0RWVvMTNBZXFobWl0WDlycXIraTJBZll3ek1YRy9VUFc5QndrNUFCL0RKTHpEMHo3U3JQSUlZUEo3UWdzMnZoREhjRkRqbkZ0SW1waC9RclBvaURyd2o2Z0VFaktJaGJRakNqZ3g5c2FXSXJNZk4weCtkbTVORUlDb0ttUUZkQUJQRzhEZHVMN1RYZEp6M2F2dTZxZ0xONWQrcnNkSnlTK3JUNXpLQlczYVNaOTRNR2xWSDFud05YTjlqNm5idnI1RUFKaDVPdWtBTU5WSE96dEw2emYwUU0xMWdvQStYTCtpSHdHOXBKY0NUR1dldWNsOUE3UWZnN3dFSTQyU25RZU1OVk91SHI0RUVJWkIxRzc3V3hpaUI1bFBCUTZNWlJXMDRWbWR4djYwVlFOOTFQS1lxVlZtcEdSZm5BYTFGVThlSHF1NXp4WXh3SU5tQitZaXVBOExYM2JIcHQ1R2MxVnZwZVhiZ1o3MWtnREl6M1d0SUUzL1liRVdnZ3FmdkkydHhGVnRBVmEwL1dRSHNLM0F0SHR6d3VNbk0wOG5IUURHQ3N0OWVpeGJEemYzUXdpTVArbHd4NDByekx2c3FDOTkwSSt2SzZOd3J0NU04SG93RUpveWVycE1UZU4xQWxmS0xzejVGQnEwamU3SHRGUjNUb3NBdm5XVk1mZk15dnZWYUREMGsyWW12dGE2clVtcW5KbWFCbVV1N1FnQTBVL0ZOSlVoYzZWSFloT1ExLzdnR0FPYWcwNkpMOFhaWnlpbVJEYVpMS09HUVhDelNyTU9BT2c5bVN3dHIvQXhTMDZnV1JseldMbkZ6NTdvd0F3dGZ3OEFCWnRFS1hjQm9FMHVkbkJaUUVYWEtMaktBK0JrYWhiNi9BQjB6M0JFS0EzYVYyMUlvTm5ZOGV4anJBanoxRklDUTRVcnp4Q2R6SGVXRDFVdXN2WWpFK05jZWhESVNXUXRqVDV6RUlCWTlHMmZRQVhGSjBGTWRnSUFNSGYrbVJqNVJDQ3hoVlNxUitHa3p4TGU5czFraWR1QjFSUmFTN05PdE9WWkJvQkc0UWtmcjhZRVFuMFZjRzdEY0tKR0hWWVlPbTJqalA1WkNlaDhyLzZCc3I3akFOQUdNYi9Jd2J4Um9WLzlEWVVhSXMwOFpSdjdIT3FOODZENS9aZ0JXWVZHZDVkRzlHeHJoRDZ4WXNvZjJCTElRTFhuTW9hRXl0OEN5R3JrSE5sL0tSWTl3Yk1nc1MwbGtMUDlkNzlDOHdEUUEwR0MrWmpRdHduYXlzTFBKS0VVN2Vnb3VyUnpFeXFKUERtTnVOTlQyOGlkeW1ycnA4TGdlTFNPZHg3VUNaWE9iaXZNRTY0clFtblVYcFYrdnROdmhYdGRjd0RCbWpiMHNHb0t5YVNLSnh2N1BIam9VVU1sbjBYbVRiQUVvMHVSYisvN1ZGR0hiem5xN2VQSCtKckM1aWkyK01wd1RDRGE5am5GdWhCNG93VEc5bDlOYU5tUFZSTWYyQU45dTBLZ3N2dGF1YS9sbGNNZmRjSmRCSDM5bDQvK1loR3dNT0g0eGlvM0FuMnJvSmM4RXloMVFobkRtak16YVdna2RGWUJJSnR4ejJseThQWHJHSXpPNHlrc0U1Tnp6cmtIVERPbzR6dmh4ZmxGMXh4QURDSVNaVmRwNkdHWEpvUjVnaENnejJGempxaVE0dlB3ZERSUGpMbjNyZW8wWFVjVUxmVTFlbWlvQWFYUXVNVVh6RDVDSzZXRjI3ckhod2ZOVWJBdE1jbVJhcFRGSnhTNXo2Z2pnSXdqQTNqMkc5V1k5QnpRK0s2QWR3R0NTZHdEWUx0SzBVRkRlZlkvOUZrbGRodHRCMmdwSVFDTXNDZmYrcXdEQUJyckU0NGxmZ2F0TjdBNCsrVE5DWStONWJaelFZNDFPVlhJYTNtMmVwREFlNklyOStBUmczNi84UllUUHlxeEp1NExBdGxXTmtZYlUxUFBRSTg3VlNBUjQzdy9RNHRCRjVkOTZ1WDNVZ2JjUFhvTXFTcTFiODg5clkyeHNJUEtyZlRnMlk4SkxRSlB5QXNvK2FibDRPaEQ5eWM1b25WcUp6d3dsdzk4QXNBWTRDTkZnb0JuWDZrenIzc0FxR2NsVVZTM3psMmU4V2tlQVFDSDg2aDkzeEdDNTMwUEFKL2kzVjMxWnNBTWFtL2U3WFFHUWlnSVlGUjlGSmpIUm5PQVZUdVFvb0xMQlhiR2lmck9zcVVvcHd3ejVBa2tiR05pcmRvVDhrWlhWSzBNS1dtVWwzckpwbUl2Q2RZa2pLb2xaVUFlRlBaWHVHUE1yZVJMYTVIRGRnSHF2d3JMb3VoRExFT0d5c2xiY2dkeHFrSG1LSWtiZ2VzcTArLytDQkM4eW5FL0lMNGx1Q1JoU0c0WEVOaG1rV3hUMGMrNlJqeWFSVk1EbVhNSkFHclJZOC8yNldTbkpuS2d6cDBYb28yYzVLekxPVFNRYlRVYzhYTTBtQjZ6VlNpVitDOUg3Z0JZRWVxTm91UVJvNi83WFNVcTZPektrYnZnOW9HY1RCQVVhZ3h4aGRhVEJMa1FCTUJVMDRTZU1lVHNPL2Yxeks5aXJtVDdXRnRFMFVQY3h0Wml5ek5IT0hveSt6TmNram94TWJFcFhXRWZTYmUyUEFnQVJXL1RFYUlqNnNSczh5Y0I0SVVrWTdIZ2owQXc4MVNhb0NuYnRjY1BoUlgxWnRqNFhBS0FKb3AzQUhqVmRzcXg0ZHlUczZ6NHp3S0JjOGpZb2FVWndrRzBIOXd4b1pqSU1PZ2tJSDZzTVZZR3ZnekVTMElJQUZrM0puM0lxVEJWczM2MjFjOVdpeTRjaFJvOTJ4YzhKUHNpVUl4TTQwd2RMUDlhbWNLRVdxY3NpMzE1QU1WS2hvcVdHNmNCUnhSc2lNRjk0b1VkNDNvQkIxTjZubHRCUS92SG5ObVhLSjhCQVo2RS9RbUEvSk5TMm54d0NTQTE4ZHRTMmRHeCtyTVRaZUw3eFNDTVM4SDU4Ujh3bG5GWlFJcXp3Uk0vc2NCNENCWEowbk9XelZYOTV4UUE5T0dLUElrejAwaWNmeElXdGpKaVVzVExIa3RUcFUyMi9ucStXaWUyODB4YzVwUHJlcUpxK2hZRnQvVDVFTytLNE9VUWZvVzV5cHVGSHg3ellVYkM1S1hzTmxWMkt2Z282R3gwMEFxSFVibkNNQUFHdjFOWERIT0dza1Z1eTFObEF5UWRlQkFzUUlTdHZRcEFTRTVONElnMEhSdTB0RDE1VHk2Zm9zZllCckZVbEd4TlA5Zy9Vc1Q1Rkh6ZEFUVEtldXd4RG55VnJacWE0R2hRZDNsQ0lTOERRWm4vdmx4b3hKd29XQU02aXZod1NLQU5tM2FpalRYQzVoUUFpb2N4VEFsalozTVBJQnF3L3d6R2hPYzNDQi9RRjVIZTkrQlM5eG4zVGJxbnp1bGQ4WHJROHB5ZXRlTHVLeDVPTHordWwvOXRDSzhmQWVxMjlWcnBYYjFNY2tVakx3WmZXV1dLYkJ0VFRtWCtxUlNoT3pScE9aSXhQb1BlMU1pOHF0L2xlazJ2SFhwUnI2citwSTR0YlRsNFkwME03aGprMXFzb1p4MGt1TWNWUWhGTktWUkxKZ2hEbmg2elg4TURNZnNKaUhHNkJTbFpEcDIzbWtaWXBXcGd3elphaXo3SWRzRUhiWHBlQXdBVlNpVjZDSkRYY1h2MVYrZUJ5M2hBSGQrVkw3THI1RlI1Vm9tK3BSMXNjWnFnMmV6VFBBSUFwcFdCS1lOYUkrL1F2dFpEckU1RTlwcFU1Z2RJSDlNRS9xcG5WcnJmOVpZbHZSQnkwcDNSN2QzOGZJWDZLU056QmtZZUUzMGRRMTlqcWp6SVRyNGhGc3IrbEx6N0tYVXN1aTE5TDZwN1VUOWg5YS8xNHhVZmZHVkxyMDNYdStzSkJQeVZrVkZoMVloQWdQUndKclI5Q1NPY0N2ODBubVNaa25zQ1ZobGhkMU9jVXVQa1VMWXNHOU9zcVBZSjV3ZDF3QkJ4UzBTMGIrekp3dG1UdlBOREZPekZYZmFFTDBHRjg1aFJnMHkrM1A2VDg2Q1F4MG5qV2tUTUt0VWdReU54TkMzUHF0VjQ0bkYyMGh2SmRFQzFUWUNmdW12b1J3V1JSYUlEYzdYSUNNb0RIRGUwaC8vU3A1YTZiL3ljbGU3VDlidCtlSk5veHdFOGw4OVkxTTZ0VXZwRHIwZm8zbkp1cVh2NjNIcjNub2RYdXgvOHlQWHVlYjIxY3MzYmt4amVqZ00yVUdYMnBJSnRGVUlNMHhLV2pSSW9PU2tuem9nNnBSaWU5VG5BS1R3dDZsQk1iWVZid0ZQMEYzZGU2MU94NVVqWXVkUndQTkJvQ0k4RjgyQUhnQUR4NWRoalRESU9HRU80bW5zK1hCYjRHUUdWK2FRQWw4TkRHN01jTTNTcGc1VGFtV2VheHc1Z01QRXA2UDlFZnZLRVRrR2E1MFdBaXR5NlpsZjQvaU9mdnR6OStmZXRlTVhuYTFYNUJRL1lUa3RDLzdBaE5HTEE4YU1rSC9pTXM5MzMvTUwxN3BkZTMrcFdOVExaQmRTRE9xb1VnNzNrakI3ajhXejQxOEVoQ3lXUElFQWhlQUtLYzZ2SHRJRllnMnhiNmNUaGJBVy9GSTFrVWs3c0J1dVdIUmhrZXdhM3RLSG1xc3RLVGhEUXY0K2srZWFmY0V3QTAzU2lIYitXdXdRQjQ0V0xSY1pOenV4VWZ5UW5GWjFaUzBQQjh3a0E3WWZ2eGNDTXdrTjFEbGZLVHFUckRFdW1PMGtqOTZaVy92L3dyY3ZkTi8zcWxVNjc5MDR2VjhtaGREamhkNUdMTFNmdXVhakgwLzZqVHp2VC9lMS9zOU85b0pmYTgxWFJuUFI5THVOWStjdHV3Sk9EeXFUZVFWRXVad0tsMHdGME55NkdaQ3ZjK3pIN0dYcldPNEVHZXNWS1RsUFd1OUFDTnJhYW1kVUlDTzIzQXZHVlYzV3h0MEVOR0FsZTZjbDE0RVlIaFZMSDl3QUUrMUtqdEVTZG1TVzFOWEE4QTNvT2FaWUJBSk9jN1BDbUV5RGtVVmlPbEZtd2hKSjdpMGR0bGZuSTdxMjZ6di96djJxNVd4ZVJHM25tUFpMMHU4dU12Z1NDKy9YbXlpOTkrOW51YjMvd2t0NU92S3V2VTdEU1JTRGcvbkFFQW9BYzlBelBzbTU2cE9wVWpRK2dGazJmYnVlUVZFcEQ1TlNLaDJDWldnL2tnWG8xRVdzdzhXbXMybTNRUW9JSDBBeVdPNzRFb0MybzROa1ZlcDZCVUNJSTVQWWZPZ0VCSVNaWEpjMTY0cWRxS28zcG1IRnpWZjlaQm9EYWlGZm5VaUlZWU9DeWtNY3hrdW9rY3JiTTVEaVBuSS81L3ZBN1Y3b25kWmQvUTRqanlKZVl1NTdRbStNZCtsbnlkejI4MXYzVUoyN3FsMjAwK2ZVQk5rR0FtMVFFZ0FnRUZFb1F3QXNpVU5jSnB5UmdaRU5MMGlpUEtxVmlyVDlpVW5FL2FUOW1mNjJETUtGeDFUdlpVcVFJcGxIR1ZrcUd3UWZnMVQrNHhCSVZxTU5FcmdzUUNKVTlzV2xEc044R1ZYd0duLzFLSGZIR1Y4UmpoeEM4VkpwTjhrZVN0Ri9FQzV4TG1rc0FzQ1ZZVkt6QzBUZzNqVDJLcGRVeEJmRDJUUUpaL1o4K08rbCt4OVBDQ0Y2RGNBOG5kZ0VFenM5OWZGMEI0SVoyQVhxK1FUYnJXeFVPQWt6K1BaOFl0Sm9TeFpuOTNmRXd2dm9ZZjNtWnVaVmp4RVRubE5SRGljbThVQTVtU01aRDVrVlFHdEhVc3Y2ZW1hRjNhMThFQWdVRTZrbUVjOVZObXpHM3ZRZUEyS0RwTndCRXc3L2sramVlU1U5VHVEWEhLano1Z1Z6S0ZlckVFOWJaOVdyZjNZUlNjMGh6Q1FBWWhqMXBvTzA2cG9IWmdjakFhVVI0T21sYlBmMXJIbG5TeDM2VFRyLys5Q21STU9QTjUxZTZCL1VXMjVldTd2aVZVUkVFWWxCNjFXUHlpOCtEcHNBeEdYREJ5QkgyT1JNRzJ2N2svaG5YcVd5cUhQL0NIQ0NnOGg0VGtIeEw3azlWVUQveHcxNElpVXR0bkNNRG9PUWVIK2l0SXhQamhTSStLNXVGbVBqQzhkUW5lSTh0WUNvMWRTbk9KS21Ob25ib05wTkc5Z3VkU3dDZzJYYnllN0R1MStWUUdBLzYwaUh1U0FtT1FMRFh2VWZ2OCtQbXpkeU1PcFRHeDJmQ3JqTXk1dEd6eTkxemw3YTh3dkVsTWU2Vk04aVpDdjdDQ2lPSHlZK1R5K3dPSDBjWjhpQVYvdzF3bzBKbE1WQkxNNThMMXJWdEU3c2EzWUl1aG9MUGN1d0N5bTVBL0ZtbnZRUm94SGpoZ0FlWDVXU0g3cDJCQ05CeWQ4QXJ4MGlTN253V0p6ZUJXVFFWemMyaW1YMHk1ekpYNnAxWW1zZElaVGozdU83RVB6SDUrMTBBMyt0K1NoK2hrYnlGTTNSdm4vQVBGajJvTnhWekNiQ3M1ZDgvSkNrbjhtVlJ2bVB0RlV5d0I4NDRDR0IrRXhRb2txYjVmZCtZVXoxd0xlOCtIa3ViemFtMjIraWZBYzYwb2x6eWtWZTQxTUVuakpNTUFza0EzcmJvVk9LbEw2L0FNWGI0NGdvdkFzRzMrSjlkMTh5VDJrcjkzUmFLenlITkpRQlVPK1JJK3NaSFJSNGVZRWpTRis1ZjVYUk95TnZ6aXgwZTRBTi9NWHlxQkFCWjQzUmU3Ni9lMWlqZVljTFhQeDVqSlJCb2hkUmc4VUNXN1pIM0s2RUY0Q1NuR0dXRGdWWW9aT2JxVHcwbHdKVFNNTzdqdVRQRUFmcTV3OHRPUUhCYzY3TWVpei9MSlUvYk1tL3ZBVER4d1hNd3FabGp2dGNpMkE4Q1laaG1mUVlGbXZYRFFLcVE5ZTdNdm9OckQ0SVNhaHpNZXFLVXVRUUFqTUdabVFDSnlqajFPTWtkcUlyeGhSekprU3c2a01kOFA1VlMrb2NuQW5mM0JZQ1kvSHg3a1FuQnd6QU0zREpOWWtlQU0xSklPdVlXZnFkZnBnNjlJQlFKRVlSTDRZUXoyYUMybU5wT3JlN29uV2owQVM0NDZsQTJPZmxLUUdDY01mWTRYRis1NnltcnM2eklZa0hoSGtBK2xKTTMvK0FyMWFnMWsrUkZpMFpLc2kxWm1HRStsd0JnQitMRTlLSnlERHlPa1hRMjlSQkY1OUpwZkhQUDEvN2VFZ2p4S1pTd0U5dFkvZGtGOEc2MTlvOGZsTWlQd096VE12RERRNkloZ0dSblp5RlFmUStNOGFJWFZHVDc2V0FzTWtXZFFON0xMSkF5dDZFVE52cjUvV0xINEFHbzByYkhCcWR5Wnc5V3hnaUgwVVdlc2dnSTBIWGtkVC9yQnpzRGdnQndmdzlBaFJtbjJrOVdUbzJSenlITkpRRGs1VXdHQUl6RjBlN0xZeGlKYjl5cHlpMFRiekh3S1RmeWdJL2JSaVBtN29NeWhBQ1Fsd0RldGtvcjRwM3ZDWGdISUZ1THNaa3o2bk5Ia0k0WitNaXo0bGJtTmF0OTQ5Z0VUOXEzZy80cU04TDZsd2I5eUMrVFd5bFhjL0tLeDk2Yy9FVVk0d09RSXplSTZZTnFmakVFM3BUTG1HVlZobFJVRVRURFJGc29PZWMwbHdDUXYzcUtiV0VqQXpNbTdHSHRUZC9RU1JsUUhLMlJDRkVPVEo3RHlreStvOVJqUU13em9SdjI4aDREdjh1QXhqVlN1RkhsU3lEdFUvM0RHSW9HSHF3K3c2U2t5dm1jZkNDQ0oyRVArQ3lVdlBlRm9QZzNwYlc3NXhsVlBvRml0b051cE5UZmVIQUNrc2QwVU1MbnhJMWNZNnNnMkRWNE1qZEtVNThiaWlGT2RBRU9xaUw0L2ZYS29lVWk0KzA1alJrN2JOL29remdSdUdnMGo1T1FlUWdaY3drQTZPRU9UZU9VcDNNUG9hTlpzbXJ5eDUxYUJCZU1janAyMWltYk8ybzd4OVpORFRMUjJ4MEFocUlIT3dCR1B3OEU4WlliVHc0YUVuOU1BR0FkeFVrVkIrb1dpZlp1bThSekNLN2JpbWtaUEdmSHZWajBiM1hIeFBxSkFMcXFvbGRQRVV3clFzSGhGcnNHT2JDNmJ1UlV4WWQ1clE5LzNnTUFWNnI0WVNLeFZjMlFjZElKbVRZRndkbndTVGN5UmQ1Y0FrRGFnNEdaeW5qTjRxRnlkNTQ0NlNqTDFNbWRrWEl6UDVTMGtKR3NSNnlhMVE2VnUzTUxwL1U5VksxZ1FpLzh4dDFzRGh1dTZGbi91QWNnUENRU0U4T1R4YU9wWGdBRXNlQ2lNT1VNZlpRcXhrQXQxZlpHN0hkVXhJNXFTVVNET3VscVVCdlpsV09DZW5HNUVQWmJsb2lJOUtHVHhXY0xLbVMvMUU4RWhHQmg4ajJBd3B3TGM2TlpsUVB1cEZKZW50ZzhDVTFkVDByK1FYTG1FZ0NpQjBJRmp6RlpkeWZQQVNBcEEwaktvemR4bXN2UmxNdDA4cEhUU1hyL0dBcU1tOGRXdHY4OFQrR0VUQnNiOXNiekFCcit3bnZlUUFNdWVWUXE1K3FnREE0SHJPUkZpY2hLSWNTNjZTcXpKMVhVa1lDUmY5STBUM2dMd3BDUW1QYjB1Um92cTMvYTNlZWlhZlppWGI3eUc4VmRGNUpFNXNSbmkyL1hDbWxZT1RzQWRnZndsK1pEaVJtZDBkdTZJUi9sNXBUbUVnQndMdU91VHRZN05NNHJvV1RFUFlBaWJJNU91MFAxajE1ZHR2R2VBOThFWkpUSW9aakx3U0JsbFpySUdRelV2RHVlZVF5bW5PeGl5RlJIbXhBSWFsSVVDM0pFZzYxSDlWQlQvV2pnUU1RQmVzcEFUMEowTnF5Y2lhK1dQT0dGbi9CdEd2eGdaMlJPQUloVTR4NTFRQlVDTURUOG1OdC9aSUpqM0JJUTVwSlNIK1VGbkV1emN3a0E5U1lnbHJYSEVVMTBJQ2wxTW5wWGVWTTY2aUJISmo1emkxUmhVRDZpYmdleGU4eENsSDZvbUcxTVVmY2dFYTdqbTRCVXhnbkNNTTRacER3SE1IZ1lpSFk4Q1RSQnNqSFY4RVNKb1krQVhwRW8xYlAzQTY0WEd2WWlnSFJJTmxCUTQxd3JIeEhvWlVmRktxMEIwZ2JybjVPYjFsVTU3d3Rrc0t1VHYrb1htbkllQkFEcUNzZDJ2d1pRVkZDWkp2SmpRZXF4Mk1DYkIyd3pTVFJBZzVuY3oxbVlYVDZYQUpBVHQ3WFBUMWdkd3k1M1JPbVVjYWNlUTl6dHE2QTBqYzQ1alp0bHNISjRrRElKeXdEaEJpQitZRDMwbWdqc3dSUkFWWjI2Z3hHbVlrUUZvVTJFb1VrS0JmdlFWWnI0UkJ6UWd6WkFGV2x0cld5Z3pPVXNEdk1xUklBcVY3dG9VRG83QkpIYmNPVTBFQ1RiUW1CSW5BVnJsdHVXRUdlMU03QkFUNWc2K0ppY0JVYi9FV2pKWVp4aEl1ZzRLVWVmTE02d1NZdWVTd0RBR2pvZ0Q4bzRtSDQ3U21yNVBSbW9MRGsrQ3BFaUtkRlJpbk5MU3p6ektBZEExc2x5OGxoWUxSd2VRQ1VHdWhQQ0MyeDhRU2U1RkNzclFOVlhBTmYvN0FKcUtrSThXSVQzajFjSWx6Y0FNNi84TkI3L1BjcXpvclNUamRWV2d5MVlLckd2MjBJbTM0YW41UWRHLzl1bU1wRlRKeWEyRkVyYlBORnBWazVvY2JEejhhRnhGUGlvVkJtc21YQWx2dzRNam0wK094L2VFa3gvc2VxdlVKKy9wbElEcHBpVHkvR0hHckMvYVdpbWpmVnF6eVVBMko0MGpyWUZZeS9IVVJOMXZCb3FwM09RN1pUeUs2S2hKYzhkNVkzZ0ErVWN4NklEaFEwSXZnUW9BWURQL2YwREpySStYMmpCVFN0V0xnOThQT3VSMityRGdJNDBXSDN4MjZBbENvRUVUNTJnRjY2U3dYV2NsRElQckdzbFExT3Y5REFtVGpZeEtUM2hnV3lqaWdRR3RDU0hYT0ZvVGU5UUNSc282dkRpbzl6VXpFWENoL3lNTlRjTkNRTGNtVWNlZkNTQk0wdkZsSm0yTVUzNXVRUUFKcXdqR3hvVWJ4NW5CMEJWTGgyWUIra3d5ME40UllnNFNxWEpiRHFxSkkrSVpWNVpCSjJjNVdSQjZWdUlyMno1dFZGa2xDRVo5Z29Cem1vS1NIMk1NMjhWWWFDbGc2RE1nUFN1UjdudnFSUTh0Rmp0eURuNnlkQzNGTzJMZFdwQ1JwdmE1d0JNSzUzWDh0WCtiQ3ZlQnNaZXB3cE1MY3BYYWdsalNrclFtSUt1T0pXQlFSdG5tSlA2ekFnRlNlVytaRUtzK0hMOFpIL2dKOTgvRUkzZzZPMi9jbDVhazU5V1VZOWpWc2xCR1FjWEozTnZZaDVwTGdIQWR1bUV3L000emh1QkxFZGVvWU5JZzBGWWNFR0pjL0tQY1cyNWhhZUlxT1JiMFdBYUQ0NldIMXFXRXg3ejE0WkdnTWV3Y08yRFFMNVJaNWxBREhBVmRDSkl4YW9vQkJPZ3lNcTI3WHZxRlVUaWc2M25weDd0a2lPN3pST2ZlZFRkZjdac25jaDVUVHM1N2VaaWtIbmdDNzJLb2NYUXgrM29SRkR3elU1UkFoZk13Q2pvakx6QXhvRTBFTjhqc1AxRmtSM0p5NThCNTJmQi9MR2ZhSkF0UXdEVndXZHF3RVNkV0o1ajJnSlJZazVwTGdHQWtJdE5PZkN3cllVUGF5c2RrSjNBWUVlbUI3MkIvVkxjWnFrRFRCcmtwZUFzQ2NGbXhrQ05DY213UDBlWFBtbFFlM1NHamlaSmVROUM1ZGdCcnMzN3VqMEVIVVoyQUZ3R1VDY090djlNaTlpeXhnMHhsYlNVN0pwRHNsVjVXU2QrYldoTis5bDF2VFJoUTk4czJpRFhzUzU0WFhpK2JRZ2RQZzY5ZnRBSGRRa0FjUVNNUHNqTkhQWDJKUlJVcXJvS0FDWVFNUEU1SE5DVTh5bzN2dVRFK3h5M3RMM2pGNVA0SlNkK2xvMDNQTjhRekc4OGtOOFVqdmNpYk9JSER5QUZCam1kd01BcXp6c1NVaS9yV1BXVW4xQ0FnMVJnOUdDYlQ1RjZmcVRhL3BQTjREeklvRVRLNmxrKzBWeHRvV01kUTdKeEhta3VBUUJIdXdPd3FCanBqanFHaGE0bkdWd0sxQTVObUhaR01yTTh6bUUwcmhDU1BoUlFzU09wcWlzU2d5elRWRTU0eE1EMkRucHVMZDIyY0tZSjMrYklneGNjUjZiNEdGQ0RSTTdrajhua080TzZ3T1U5Z1d2TFM5MVp2UWp4NHZwUzk0QmVJWGEvWGlKeW4xNk5mRUc0czNyRE1KT2RpZTdKTGNGaTk0UmhBakJ4UlBLZzk0dEdKTnAwK0FxZDYyaFBDdEU4MFlweTZFcWltTEFSNVpScVF1UGEybVYxSHYzSHVNQXV4anB3SHByakFZc0FYd1NKbVB3RWd1djZTYlhMT2k1dDduVnY2R2VWWHRkeFJmQjEwUWdtN0IzNFpTVUNGM1l3a1hlMWxOTzJrNVZRUVhUYXhpNUkzbWNJNSs5WkZGMmh3YWQvODZRSTBDZWFpbURyS0JpOTVwSG1FZ0N3RGNQcW9US1RBYWNlSldVbnNIM2ozK3VmOHRKNyswUkJ5dFRDaVR2cGZOeEcydGZpZ2RPT3BOOUtqK1RaMGVDK3FZRTgwZHMvK0xHUUMvclpza2YwcXJESEw2eDJqNTliNlI0NnUrTEpmMFl2RDFsWHIvSlNWRloxOGcyVk9XS1ZaNldQZzhuaGlhL2M3ZWlVN1kxMVNoc3loOTdDWS81cDVXbXlVd2E1eDRkeVB2RWdHTlNKcnpJLzJMcXBKM1UydDNVb0tyQUxBTWZCenVDNnJpbXY4RnVMK28zRmw2L3ZkUy9wZU8zR1huZE51d2UrRUxRcW52WlNoQjBFN1pGNCs0OWNvQ1QvQ3NmT2piR0ZOOWhOb1RkbmN2alNqbEpkbUR0UExDWjE5WmZnd1NYQm5Zcy9VTUo4QW9BNktTYy9tbFJERDFSclB3Rm5TMHgwUzNxZXZJV2JhaWJwbEt0dnNzR1NIWjk1aSt0RlVMa3ZUWVBhK2dNNm5TbEVyTldDSkljT1J2L0FSMDQ1QnQ2ZzlxQUFQNG1QK1o0NnY5eTk5WUhWN3FtTGE5MGplbG5vUmUzZnoycFdNK25QNjAyb0YzU2MxNCtnS2hZNENMRGFzd3BpQmdmdGNiQ3Frbk1mWmxPSGFUcGxIemtIRDY3UURSU2NNcWNEN1UrR29uemFnQStjbEZjUXVKUXpYMUxnZ281dmVNbVRmdDZ4VHJ5c1oxc0lCR1h5WDVNeDF6WW4yZ1VzNjlKQkFVSDRxekx1VlFXQkY2OHBGMDd4UVR1TzNXNWJrV1ZYQVpXeDRZYmtXOThES0FwNFlTazk1WnVxOW9ONGl0YlZEbFVucFpnb0hmT01vNVU4TndvY21ObWU1eElBTUlHSTNvK21LR2RuSHNYRWREYU9ZaUE3SWZzQVlhMHZEZXVVT1hWYjJHVWpnSTZmMEsyS1VjSHJpUkFNSENiTklDL05vRDUxeG1iZ3Q4Zk82dWZDM25WT3EvMUtkMTdMKzBVdDV3K2VXKzRlMEN1UTd0ZlBINjFyaTg5S1RuMG1OY2QxY2lHOHhkWnNRUTRycXlkMTVsUWdrZXNnYy91Smh6WktZLzFHNUFPTFk1SGpzaXVtY09XZVpDVUg5bEVDbWk5VGhGdFdvT0M0b0tDbkgzSzI3dGhKVUdEeVg5Rng2ZVpFdXdBRmg2MnV1NndBY1hWcnFmdkk2OHZkczY5dkM4ZHVha2t5WWc4UU9uR08xWjZjSUo3bHVNR0tEOVY0aytDSXVnM3lpQ0NCK282RkhMRk4yT2NTQU9pVXVwb1UrQmk2eHVCVVJiWkhUUDdCUkp2U0ExTlF0MnoycVB5M0ZIWUN4QndUOStsNi9yMVBiSFJ2MW0rY1A2d2djRWI3ZW1oTWRGWncvYkN3WG9zdW4ranc5bGxsbG5pdjBESUtQM25JNnVSY1pQSThBQkl2OUtoZ3pGeE85ajhuQTVGbEVaTkloZVRWTzRPQzcwOG9FUGhlaG9MRWlrYTFOa2pkZldmMVduWFY0UkxoOGczdEFoUVZYNzh4Nlg3ZnV6YTYzL2lXdGU0bm50L3FmdXpqVzNyak1yKzhGSmRXUkJybXR5ZWsvWUpuV1AxeFMxNEdvRVY0TEdOQjZpWENzVklkeXhJRVBLODBsd0F3K0M1QXNleW85d0RDM1ZHWnp2QktTaEZuY1lnaFFkQ2s5R1BOQytDSlVSaVNsc3hScmxnSmFWdTIyT1lFMzVET0t0SFVqaURWc0FDMnRWb1l3VmszcTZEci9ick8vNXdIVnowSWI4ajR5emMxNGJtMlZRVHc1OXZDTVRRWnRIbDRjcUFkZ2xJWURZeFRhYkQ2WkV3ZmxWTy9FZnBZeFZ1cGhjQzB3WERUUXVxQXpudjRRRFIyTzNRVkJ3SEJRVUdqTzNjSjU4OHBJT2pnbnNIckNnUVA2ZGVZMzNMZmV2ZWIzN3JlL2ZRTFc5MFBmMlJUdXdKK2xsMEJSTUdFTWVhSmlKSldsQk45RzNjSElKcWtCazBXTlZQcWwrVkQ1UkpTSno0Q1VHQU9hUzRCQUZ0c0U1MmtBMFB0dkdNWWFGbFpIM2twQXlDUGdtdUxPY0FQeWxOTUNDeWRYSkV0VUZ1c3JmUURRUFV5WUpRQkFyYzdGaVlWUEVDTkRIVUwycko2T1VVMGRZVmtkWC94bXI0TnFLVnNWOWV2RTIycCtJaHVXZnYrRlMxNzVId001Z25UQ0tHWnRMZEtCRGxPVTNDSmF2VWJWK3VkdjQ4U2lOU2xGWFlBSytoc0s2c041QXRaOFVYR3dONUNwS2xkK1l2QXNLM3RFVHNrYmlCTU5OS1hDQWc2TGlnUVhOUnhYY1NYTG5lNmxGcnRmdlhqcTkxUGZHS3IrNmNmMnV3K2Zqa3VEZGhST0RISjFZbmxZazU2UkdPMGxaY0kzakdvREdXc3AyWGM1dVF4QWsvNjZqYjhKMFdlU3dCZ0VIb2doc2NNYzFsd0hFZWxmOWhCMUNnTmNpVE1mRHA1d3AyVXQ5dzdsanhGSWdva2JhVE1GTzdEb2hqazI3cXI5Y1pMMStJdXZwYW9GUzFyeXhxZE1lazFCR1ZrM0szT29kbW9jdGlHcGxWSmMyNHI0d0RHTVpyT3VFM0NYdmZybUM5bGlWNmxGQngxTWdIbTlsMExlWXcxQ2R6UnJtbExsd0dibXRUWENRYjZaZEFWSFU4ODFIVVAzNmNBKzdvdUc5Wlh1L2MrdXRMOTBFZTBJL2p3cHA4LzRCNEJFUndmdTUxQld5cTRyTjJZZFFsaXc1SnEzVGEzem1ramVjSzNyWGxuREhNSkFMbHF0emExOEZGTXdMblRvbVhGTmNKYVA3bzluY1k1N0lscnFob2M0aWtaNHo0SHlvNE9yTTRGNFV3RHhqd01IdjB4TmNkMXJITUtHVFhlb3FtNU91Rm53cGRqY0NOUkVkWFBBakF3TFQrYUQ1bHQ3U0k0bEt3NkdydHZleEM4eVRwU3FTa2V4REdsM2FaVytxK2lXb2NrVWppa3VBV0xHOHJFdnA0V2xjWiszRmVXQ0g0NGhzZDZkZk0vZ29FQ3dxWWl4SVJBb0k4YUhuOVlsMW9YOVhIcEs1UHVkNit0ZGU5NVpLWDdlejkzbzN2MnRWMC9RSlZCeGpzOE5SQmVSNVA0Q0RHMFZMK0kwZnFsUFlmTnMxTG1oNjEzaDN4ekNRQjR4UGNCRkFseU4wQW5EYnYyMXBZTWVGV1hvR0s1T0F6NVdTWXZLZHVpbUdOOW5MYzBWN01nUXdlZWtpWHp5aWdFZXVaQ1p4aWNBTnIxSUZJT2ZUeElxNHdSZ0F4V0IxWHpoUGNUY01Vd0xnV2dJTGM5d2hralFWbWtTazJEUXNWUy93Qkt6ek1WT2thdFVSWHNUZjhGTUdTd0QybTdNRlgrd2pZdWo5VmtWKyt3ZFFJWUFBQkFBRWxFUVZUN0ErTGYxbVhDbGo0ZFlHY3cwU2NKSzNxMjRzbkhkWS9nQ3BjS1M5MS84cmxudTMvNDcyNTIvL0tYTitQQkluVUVmempiZllnc0ZYbVJTS0dvWCtrUHRPalQwSUllUDRhbTNTc2I4NXgwZVM0QmdHc3Bic1p3ZDVaalRlR1lEMTZHYmpxOGFjUmZUeWdOVStZQWQ3NTV1TVdPTDk0bXl3UEpSdXMwemxzYThMNUVRelhkUW1NUEF0WjZKUVlCbVFZQ2Y3RURLRzBMMzBwSjZTME9FWU1rZWZ3d2lEK3JsclQ2cUsrdmc5UVd0cXVDanhwZEJoTDJGN0xoL1JSaGVtSVBUV1U4VVNUNnU3MCtBZ3ljWmJvWkJEbUNGbktaalgxOUNhTFFaNDFGUGQ3UFNVaWVIeWpTc3dJM3RDdFlVaEE0cHdjUG5ucENZL1dscnZ2cWQ2MTNENTlaNnY3eHMvdzJJMDlkU3JUN05YSVZhb0NtdjBYT3BxT2hRNTZSdVZvdVM4ajN1SDZaUTVwTEFOaVFRL2ZPNithTEl1MTFkY3hOZWZIR2RueVVkU3diMVdrZUkrUTZIQUFrbHlBelRpS0xLYkFseTJMTnN3NzBNbTRTTmRQOE1PMmxQdjVsSUgxVXRhZFhYL2twTmhtdDRhZ1Jxd0NnQUtqeDR3T0ZnWSthMGpkRHAxVHNVY1hkQVQrR05NdkRGQlZzWDRQMzUvTWxhTmgwR0JxNmxabmlFMWc0OG9FcG5oL1kwdXJQemNObEJZSTNhVGZ3MGllNzdrdWVXZTBlT0xmYS9jQXZoMjhqQ0FSc3YwdUdtMVFiTkZPYnFvQ1F0MGtFOFZVV1NPMUVOalJYZUFweUhta3VBWUN0MWk1YkxSMmJjdTZXamsxZGpCM0JQL1pGQ2ZxRzNiODZaUUJnSW5oeUZLKzVjMzBxWXdGZWFGUHlVc1YwNUkzVDdmUTAzWElGK1Q5MkF1anJ4VW1uL0tMSlFVWm5zK08yc3V3ZFFOeHBrbnJpWnZWSFdSMjA0NEhJOGlOYWZyVTEycElFMGNzSklGSUtOcTJuZ2k2b3dqZ3N4ZkFlNHdycnRBeFdsQnVrVzlmSG5ud0V0MVpyUk5SeElKeDNXQmFuVXluYkwxU3NkY1JWbWl4WnRiSEVEVGZEWTlNRTA1dmNIOUNZbmVqZXdFTVBoSnpQVjBWMkN0Ly83STQvS3ZRTldQZ2h5ejc3WHdYa0c3YkU0YWx0YTBpSnk3enNOK1lISC9IT0k4MGxBRnpWOW1wYnEvT2xTenIwc2N2cmwzZTBBeURLSHkzMS9FeDJuTzJUSCs5YzFZVFkyVkhZOWlZczVOSVpISmx5Y285ejAwTlVzcFo4S3JMeVdKL1M2WWxrb09XejVJUTRlTkFob01KbG5oZzhoWmpWRDh6OVRUcXZDaUVOUnV6bmozc0Uxa1YwMnFuUElzQmEwNkJRSjBRbEZ5QzVNcGY0bWdKc0VKVnlHeUFkUG9YTmVpZmVoWDVoeUphY2EvYVlyQk1YVlU2ZVVlSlBJVUpYV0F5ZTlFWjRwRVFWbjZ1RU9rQ3lMVzc2OC9neGp4UHo3VVFlcnJydmduS1ZmNzEyQk0vcm1lSi85dXhOM1JqTVQySHdkMytra3FqVTZ4SUtaaHRXWVhUaUc0MnIyZ0tzYWZ1L3JvVnk3NDBSdzR5S2N3a0FmanBOMXJjT3NJT09ZUlQxR0UvTUJSWkIzd2xIVGl1OEZPR3JZdys0OEkxejBKbUMzeHlKR29zMlBycFVZTU5LaDFQc2cwQzBYOGFnQ0QxN3JWOWJPUmhneTgvWFozbnpyN2YvS3BQN0ZWYkN4d3R4TlFoUkhzRmtkZlExQ3JaTjdFTUhZaCs2clROcmVOUjQrRWhuQTRXb3pNWHFWSlVoQlZJK0taUGQxWFJTR1ZJdk91N0pWRk1rcDZjRkkveDhjWXBWZUVzUERmRTQ5WDM2aEdCTDVkLzF6blU5T2JqZC9lekxPdzRDeUtHK04xL0tDVk51QWJraWdFZFZlSkI3dXdRUEFYMWVhUzRCQUVlMEJ4M0c1RDJPblV4OEJXWFhyMDRxM3FXTk5sRTBxdUNUbmpuRVFtcUFBUmppQ2hQNjlqcHpVeTVLMmZuSXJaMk5iQm5LY0NCbE8zMzlnaXdJNklESko5QXArWGt0T08vL2h5T0dlT1Jjais3cDdtQzhFekNEZ0dxSlArc1dVVk96Y1h0VG1TcFMzRWVyVUd0T0JZci9wdElLMHRPemJiUFVjYkNEcHhnWjIrZTRVV3BVMlIxQVR6OE1RMEhCeWsvN1BGWHFjRW5BUTBXYnVuZUY2eStXbmNCWGZ2YVo3cS8rNkJWL2wyQlpXd1lrdFNyU29sL1ZwcHdidC81a3dMaGkxTFJNQXBnWHlNcnhOSTN0cEhGekNRQk1XaVlIUjNvSzhDZ3BxNUxuRzFUcEZFZC80VEp2NWJzTm4wcjdOTmlVWFN4bFlDY3JtWVZodnA5VmsxSXNjVzBYVTUzcWJSQ2dSeE1YOG5YT0VRT3ROQUhxb0VSOWRsRTdNaEorRHhEQkVSRFVMbmdoOFlGWGZ0c2dpVVhvVUhhMkdIcjFiU1lYZE9DZXIrYzVZY2g2VHBPWnVvZ21vNkxFV1VkUnl6aE9LanZEZUpMTHdvekxoWmpTUXBDbHFJcisybUNFakNENTY5UnMvLzFSb2E0Tnp1cjdCVS91TG5WZitta2IzWGQvOEhvSnZCSU9QMHUzYktJdUY3aStOSk1zTk9PZVJyWUJLMGViR0QySk4yMU9VV0F1QVlEUE44dmlWUU1CRDFUZ21LT2tjRkNwRmJNdXFqT1Fpa2NITWxYSWhjQjR5dFJvOGxJc2hCQlh6MmJPVWhUYVpta1NMTTNueXptTlV6a0hVSEEweWpVZ2trc1IwTExhc3BFRjc1dUFqallTVHFORVZjcksvVEVndVNwNzNLY1ErSlFvRnJDVXdCNlVzbkxtQi9HQjc2WGVpdXR3dEFQYWs4TXJKU2UxTU1iUmZDRTJKS0ZFS0IyRlQxb3RtZXlScU5pWGFpd3FIZGY2a1krWWVSeDdTemNIbDNXWG5zZUt2L0RwdGU3LytkaG05K0hYZC9TeGRwbXRYcEg0aUR1N2huQ2pIWUtFaGI2aExCcWtGcUZMTEdwUU9aQVduRW1kWFQ2WEFJQzFPTGc2dWN6SzR4ckpkZzhuMDBrT0xGUDhnNE45Y0FKV1RudXBRK2JJS0N6bUd4WUNOZUFvekttN3QzakkxUkhYNEVrcHRVVHdtRktPMmRZQjNoUk43c28xMjZjQzEvdDhMTVNEUDdCeVprZ1oxclhVUkVwNDhpUGZCakZCUkIwMDBqWjRTSmdHU21yQVJKMXdIaTFVbFN1UXpRaFJsQmpZSnB6RGdjaXVranhaMytXQ1RGSDJUdmdTdGdFMTZ5RXQvcjJTTTFHNEI2RC9ibDFCZ1BzRFgvS085ZTViZi9LcW45SGdVaXdscFV3K3BzMVdJa1NvcEk2cVRWQ2xKSEFjbnZ3Q2dqK3BzOHZuRWdCd01CTXVEeHpGT0ozbWlGdWJHbDNGNUVkV3JRODZqMFpBb3BLUHNsTUZvbHFpYTNTb2lGc0RqWmpCSUhKN0VMUGhSb3pSQjlCZ2EyWFdha0p5czVQSFdQTW1JTG9hNXZxZklDRG1hSzVNZmtvcERBSndNRlN4RlVpK2lyZ1ZjQ1RtV3dscWFGTVVhNXNST2NKZFU2VkUwNmhaeHBNTGdhazNSR3VWd0VjeHBtWGZCTFJTU21SQnhTVlZQQ3VnMXdaMDI3cEQzeWtBOE5LU2R6KzIyajN6Z040dDhLcStQS1NaeEUzYVByRkk2VEpORTU2eG1ndEZ2WGN4Nm95Y0R6VHJJTkFMbWlrMGx3REFLbzBUT0p5VXQ5MXhGQXVaL1BTVjY2ZThLUUlndWMxQ002dE9XYVhxQXIzQkYvYWVzU0lDOEdvZVZZeklIUVQ0YkNPTmEyMkVWblVlRWJ3aEt2U3FYL0lyQjhlZDZMd0ptTXF4dm5BM2xKdUF0QjlIdE9TZGdPbzV0VUlUZDFKNXlqNkt2TmIrZ1lJSENLbHRsTlV6SFNsOGlBcjdzd095ai9JeUFLa0VrQ3BHNVI1dUtUaXhVSkR0VGxWd0tRTDVQZ0VQQyswb0NQQkVLNjllKzRLbjE3dGYrT1JWdldGWXZjRkE5OUtOVmdUbENGdmNvSTB2YkNFVFhUaG9CeWlTUzdTcFloV1J4Qm5tY3drQStZd3pSc2JFay9tREdYaDdDNm5iSm9JdDJ6SDNsd1VITmNVbUt1dFZmQkxFYmxwaDhQQkk1dHJRRUVIbnBCeFlQRDdJQ3o3R0NaS2lZeDBjVEF4ZTZyVEpza1EzTjAxRnRkQ3JNSUtHcjM4T29QQ0JKSElvTU1RUGc4WndpeW5DaXBpQ2k2RGpaRFIraUhSSXRsN1NxRUl4dTZjbnRJOFFrNm82cUpvWUFzTjJWYVpvMnFnaHk0MnBsMDNBSFAxQVkrSjNGU3JqUXhVRGRCQmdZbkw0Y2t3N0FHNjh2dWZSMWU1QlBTcDhTUzhtbmVqdWRINGFFWjBaN2Z1R0lBMDJUUVFsVUpDaTNTZzdBQmc1KzlOY0FnQ0JNWGNCTnBTeWJNTWZSMDNVb1dOY3YzZ3g1SXlraWVhT0ZUOXNGUzUxUUNhWVFDMmpWRllBVmtLNjZhVVpsNFZ3cmxPV0FkQ1B2R1NsSmtHdkNGSUdzU3dzaG5NWEFBbGFXeVpZZWdkQTFFTUl4bWNTenZjQXlQa1QyVHFNaFNUL3NYTUV6eVlOSmVQSmtvYUUzcTZHN2tsdjUwTldoYXd1QnlhWTdKRTcxRmRVTkNIT3RyOHREMm55YWVrazM4Z1R6S3ZYK0J4NlI3T1V5NEQ3ejB5NnozaDRwZnV4ai9LRklkWFFRSjlNK1NCL1Z4MnpMSjNjSHMwVkRUSlBoUkJQay9NS0FuTUpBQmhwL3dwSVB6T1dNZlk0S2VWUlArUUtFbUI4RVpod08xZXliWExxRXBSSTdwWUNSMVlLcHBtbGRoaUEyNDJLUFZGSTQ2bXF6bVlsWUJJekljbGRqNXhrbmdJVzJLUUNrN1dKY3Q0RDhBVEhnSG93MEtNOVpNUVE2eHNDS21KYmtiZUZiMVVIMnV5U2JKa3F2TWYyME5CZTQ0dmkrT0VnUGJPRnBQZWNSYklKT21rbTVyMEVoeFA1bkp3KzRQa0FQZzFnc3I1YnU0QWYrK1dibXZ6eU5VR0FxbTVmUlAzemNCSUE5d0U4c1UzSHlNQURJVk5rMCtIaGs1MTVwTGtFQUQ3RHp2RnFvNm9Eam1kaU9GaDE4VjlKT0s4dHUxam96blJxYyt0VDZvQjNmY3JpcXZKZE1qSk9Zb0xQY3BUbjVEYXVDRWs1THVya0lPRGF3WURzMnBoZ0JsQ1NNMkJRaG8xa1BWWHcwNVNLV0JwM2xwbDRCbDE4REtqQktWbDUzVW9qVmJZbHplYVVlbzZsTzFDTmtTbzdHSTd3NllJUmVsUlVTL3IzUkN3VmFqMDVJMjAxSGFYd3hVZ0NSZXNyZm5MRGhTZUNRbyt4UElvQ0NBSXU5OGh1ajQ3Z2FVRTE4dGI3VjdwemVqRXJQMnJpajdjdEgwMVVUeks0ODgrQ2h6Z1dwQ2tiQkdGRFgzUjJBREJtOXFlNUJBRDVvdzVrWU5KQkF5U28wOC9wd0t4UDJYSUFpdHlzbVNnY25yUnNPM1B3TVJSQ1AxaHowSXpFUVlyT05DUllqUEM0ZzhtcGlMeVNRNGdoVUhnSzNuekljT1hJS0pLeWF0SUNLeDd4K2tsQTZsRElyUXNNR2xuc05xanJvOGl0c3VDNTA0VE0yNlloMDdEVVZCNFEwSExvQXlNQ2JiQTloVTBTa0RMa3pNb3FYUGdXdnl1WnA2ZEhsZXh0R0dLdkJGL1N3TnFMN3RUU2V3aWpIZm5kOGt1Ylh1MFpYS0kvb0hzQWorZ3R6Ui9WTXdGK0ZvaEFRTCtJbCs1aVFoTW8rT0ZSZ2dIZFo3SENrNEJKTkF0OFVJQXcwd21mNWhNQXBEUkc0d3g3V3dBLzdwR0czODRtcW1XeTR3ckM4cEtRZWRKVWhsN3JKa3hla1VNWTdwYVdJc2s5WElyQ1pQQjVpS2lRWlFBNk1SRGlJUWhvY2hJVUtoNWg2RUFsSmVNTkZKbkNJMko4NEQ4UG5KS0hjU293K1RVUTQzTm82dUZYdEEwYW9sTWZ3M2txN1djUjlvUFRMWWtIVjdzdDVRQzVBM1E2S3N4b1JUSXA4K2s2OEswdm85WkFVRytpMFBaUEVSWmM3dUh3bkR0SFdDWTdSQW1MblpYS0NLYnp4Y05sQUxPYjd3MDhlV0c1Ky9Dck8vbzBJUHp2eHVDelJJdUlTd0JRSk1ueDRsUzA0bnNkaU01alRsY0FjM290dUN6TlR3S3czVzVKUjRDNFRVcW50R3oxVXdUazVGRkErQkxsUHFCYzJuTXVPSW9CdERCMSt4U1U3SXpvc09na2VIeGpLRVNVZ1NGTlVSWWNvSEo0Nk56QUl5OWhKQ2dsUDJEQ1JhYnBPcUd6TDZPa2dIVW9mR21raDI3NUtORGlTek5wcFpWSllabkRjOHQwVzRaYjFqNDVZaGlETDYwUnRwZGtFT2NJQ0pjVVlxQ1N6Ym5yRm94aG5ZYTRDSjFaS1NhOFNzaUdVU2Y2SjRLcjZpb2E4M05qRHJ6Q1AzR2hmQXdvZmVodVA2UGhTUjJoUmlnTGN5c0lrc3pBOVhwUVpxeHhlQ3dvbjNXYXp3NEFaM1BJR3ZkWFkveFJEY1JKS1l1T3lVbHBPVFJRVXJaRlo5QXdkVWpKa21YakVtbU9saXM2Q2JKWmRMSTRuVklQZ0I0V1E1bnNNV2lpb2xHRjVDYVFReVVsNjFGa1dNK0NOdzE2NFdIMTV6TEFDSXgybzhvRjUxM25ySnE1cUU2eHRtVXBjdVMyYVZ3SDJwaW41WjhuWFBZejBXVHhMNFdxc3hRMWJLY0hXNnlud0RFQkErdGl0UXY3V0s5akxCUnBLVlRJZWo5Rk9GOW1JVDhhY2gyQ2NySS9xbDl0OHZZZmx1eFVHbEFxOHozdUExaFdqek1kbnNLYi9Mbm9VSjVsbWtzQThBMHNHV2kvWUtpTzF1RERHSmlPcHJySFB3Q3B5SXBPREZSQnU2TVRYd05CSWJwNmtlRWhrdko2RVJWS1V1bjdhQk9xRUNuZkV4cEdtSlJuZXpGQ0hQY0xLTGpPZnJFWHd5d242NFlJblFOQWJGd0MwR0Jwa3dhMEF2RlpkTjVnb25vZCtLS25iTVRNTGFIc1lSTEtIaU81R20wVTR3WmloSGZaZzJ1b2lGL21XZHFEa3YzV2M1VkFVVHF1VG40OEtxSHhZSlZnS3Fqc0ZSNy9hekFpNno3OUtDdmZHWWhCRncyWlI1VnpyQ09hdmxJMTU4cXNiK3BBbVNEaUhjQ2NJc0JjQWdBRzJ1RUMwdkhob3NPZm1mVHBLSnhJWWxKa3dubmpSRnZ1VHhHeTNab2pqVXAwWUszWVE2QWdtNzhSVHBrQmtVR29qTU9lcnpEa1FFRU9xREt1TEhRZ3R6U0puSlJ0L2xJSGNreitZcThReU9iTFFZd2lMaThBa2VsRE1BQXc0TnhTTm5iYmhndGpkc3cwQlpGeFFLb2tuRVJpZ2dYVW53K1FuWUUrVlhYdUUzdU1USUt5TXlUWkU5OG90Y0kvenVlL0hEa0d6K2wzR2ZscGRUNEpnSmozZnd5cllzWUdaR1RBVGpYUm40TkVEdStjNXYrYzdnRTBEc05JbkplT28zellsRTR5djJTUTNCL0F0QkVaNk9pZ0xCZGE4Z1JkMHFpZ0U5dkFVZ0F4VEcyajhMZXNDU3RQTm91MDRJSVJJc1pUQVpBdUIrUTFaZzRDcXVTNFF3WkhUU3JFeDREQzBGWXlsTHg5SjJCZHFaQlFoVmRKQWFTeUkvU3cwVEZ4WEtieEtla0E5SDdPV3pCVzBraFJiQjhMd3BjdHJpMFVPVldjK0JoN3BNUkZ1YXorS2NrT1JwQzRDREFDdmEwbnB5d0s0NWMrTVl1eStQbjFlSk1RYm05RndNU3V6emN0VmJ2ZTVXOTBRUThtUGJKcDcxTXFBR0JjSHVsNUREMU9zb01ranh1d0thdUNPSlNqWkc0eml0SHg2RUdaVlgra0FMemhmdkpNSUUxd3AyVEhCcXNFQUNBbldGeUp6Z3U4T3QwVnN0endWUjVWVjkyUTEvT2wzc2JyeERqemdCT0J5VTQ1MjJVTEdsOEdpb0dKYU1zRWFCVnpGU1BIYUJpZGFLOXcxUEtCekZGbHhtZDd3RzJFT2MxSzNTcGF0QWllb1VwVmdvQ0V2VFV2Yk9EcTVZRm5MUWdrOVVHYW9Kb0JPK0RvRDhJRzM4TkFNS3MvbHdBZVJ4WnF3VWp4MklHQWpHZ3ZKampOVUxiZXlpa0FaeUFBTmVzMGwwc0FJcVVIdFF4TUI2V3ZEMnRnZFpJcU1BR1FBeTdsMlpPTk1CenJOZ3ZPZk1tdmlsRkdvV0FvV1MxWElCdXVET0xQaHAzcmxEeUlnczk0WlRrVFZYWjdOcHBDendPdjJSdGM2ZzNLaHhEY0FQU0xVSlF6Z0NNS3FLNzNrMHgraHByS0pVcEZMc1FnSWExTjFDQ0JiMkVqVC9aVW1qNUlBemRtUnpUTnBrb1ZGYldOOWlTdGhGNzlSQTNhaXdKdUsralMvMWxPZWpUb2FVb2tGenI3a0tKaCtZbHVkRUNtTGNGTVdENE5XR0dDRTVGSmJveEt3RFZ6a1poQm91c0syVHpnS1Bzb1BPQm1tZVlTQUdTbkhZWlAwaG5IdGErZC9NZ2lrWTNsbGFhQ1JRV1hPWkVvSit3eXNieE5NWm1NYXdkYVJxMWtEb2Ftb3JSQUVmQTFWMEV5UEo2eW5ta3FsRUZtQVpVL3F1ZjRjUzVXZ2lqZkIwZ1JqRUlDd1JJM29taE85Zk1Ba1FQWHNnODh3YWgvQ3gzNzRNQktzeU5ZajBiOHVGeEl1S3A2SWdxMVdGaGNicXNYRTZ2LzJ2N3YrWUNLUUdjcXk2bUE5aWV3Q3BRZEFMVHFaekF3VHphT2NERmFXaEZac3NiWC9hUEJiVjFnQjVTVU5lTjhQZ0ZBMWpzd2ttTVF1WUdqV1ZkaXF5dmhlRVI0OEFJVWVTVUx3U3BVRW5BaHRqa09KeVd1Q2dwMGY0WXhnMEhNbUo2R1hOTUxZRGh4NURSZWdvQ05GMFBMZzZRcVF5RHNCV1dTQ3J3VWRKbFJWK3I1N2pNOEdpMThUWmlQQWlGUnVXNVhMVVU0UnUxQmlZWk9PdlhPUEpSa1ZMaUZoaUhEREZPNGJxTi9yd29CTTBTUkdkU3BvSG9OM0xkcUIyWW12SFAwQXdiRmlRQ2dDUzYvYy9uZ0tpbUlYQWZWV09Hejd3WFpSb1lRL09Ud2NDa3IwTHM3OHZaUWNlWnBMZ0dndlFTd2MyUldPNW1QWXFVZGhHT1ZjT0FnVVU2YVFPWUw3UmlsVS9LVEU1OWpQa0hJYWdKS29wMUk3QWJFclVwNURWZWY3aE1EQTZLTUNjYUxPaDBaZlcxa2dJbDN3eUNwVDZ5NVlCSkg1Q2Nod2dld0RteGc5ZmNMUVJoMFlLbGtva3BNZnVHVm9aQXJXMm9LdGs2dFZpSWtUVldja0RWSSt4QnVEcGFzdXA5aklPQmtDMjRNZjQzVGZvejlrMnlxbDNxU0YxZjB1Q1I2Rmt1V3l6clZ5UzlQUnRHRzB4cGxKaTZzMldjQys0WmNLR1dZU0tsbWtZVU1Cd0dSWU9GSUZycHdYbWt1QVFDbk05azhxSXUxOXZjUnJCejdwSFpra1ljSEFVbEdsVUxMWjVSTzFnTStZT1hJYm04TXFWZzYxaldnSmhNa3c5R0Jxa2t2UWkrc1RGYS9xTU5vbmZnWGpldSthbk5VenJtS1JNTU9TT0pEVk9ybVhBZ0hBQWszelJVaUVQanVzckFFSjdjaDJSRlN4Q2xaNVJRZ1JTZWtOTWw4S28vUURjZXh3TU9MUzg1V2tZU0hUZS9IWnQyZUx6SE9kYXBsbkttVVpZQStwRWl5T3dqdkFjTXBxRFJJSGtjQUhzK2EvWWlFaFRLN05BdFhadG13QXNOUVNNaHduVUlycEdoT1BQQ0RHd1FXbFdlVjVoSUF4anVBTlBJNFJ0bGg2VXpsVERodzR5UlNUS0xpNFN4blIwUWVna3hEQUlDVGRnZktVMjdkdG9GcjVQa3F6NGdCMHUxYURJYTZzdW9aTE9YU2hsdUFRRXNsczE2d0NjdEJ5c0hGQUl1L29MSEY1T1lUZzhVN0VTczhITFM5RkJNdHI3QVpkaU5KeWdhekxJNUVCZk1SemxNclRrVTJRbHQ2Q3ljTGlvRnZGRXpTS1BjdW9JaElTVEgvbzI3aXFCYXd6ZzdtUlRwc09ySjdYQlJMdlFRUTBiVFM3cmI2WnF2NXRTdTNnbUNBekNtV1pzak40MVBoS2V6dVQ4SHpTSE1KQURqZXdSSGppMVcrUGpxaWhkVGw4T1FzZ3V6UUpCUTZZczJuVTBaU2RJZ0JRRTRoZU9DRm9HSkpQYzF6RzZ4UUtTZTVhc2U2cG5veG1TV0xsYmkzRDhuUVE4NGdSMWpmTUNVbnF4ZHFtRXg1dkFPZ1dudXdBL0MxUDAxQlVBcVZhSGhLYXREQjN5UHNuMUlGTE9MTW8wSVJEVVovZmFtd0J5OTE5cE5jSi9tT24vZDYza3FHVi9haVE2b3l5S1ZnZlNLekNvSWo3Y0xZMkZtRjdjQkJoZDJYaEw3bWlyN2UzTjZMbnhNekVRWWRxTnJtMEpBaG5NY0lSY0U1NFdIUEk3L2NSWlZacHJrRUFFOSt0cTg0UXdjNWsvZ29xVlIxRlp5R281Q2JpWEltOCtxVU9YamFwSnp0SjQ2Y1pOMkNJeEFGbDNLdHJ3cE1iT1FZenltRlVxc0dnZExCeVdqaFRGRGFFZElBRlpxVXN1QVIydm9LQU1aT1hrTzFwQXRQQnN1MEkzY0FERjlHbFlPQjZubkZLcnVRcHJVUWZHdkVnT29DeXRUa0tWWkxMVEJnYXdsakdFYnNEaWVXYzJHcXRGSldadFp5N3JFOU5HaFhoUXpyeHJzODRvMU9MOGlRYnQvUmh2amRuYzZSWU05Nnd1SlRYdlBGeDdMVTRyaTJ1YWVmRThNblJRNVNvMXFmZ3hMT2NVTTVRWUJFWmxtTnZFYUtlV1oxbWtzQXdBOTFRRk1vNVlBT2Z4NnN3cEpqVVJhT3dPWklFSjdpeWVTMUhqUXBJSENaZzFReU1rQ2ZpVFpLOFNTWE9rMXdEZ3dUT05FR2JBalBuaE9vMzQrSUNGL29KbU1Fdk1ZVmdEYktKTFYrRkJ1UjRQcWJnTkNHZi9WSEtOeDJtZncwa2JwWXZoQk9pZXhWVGNxaDhyNzZvZGh0aURpekg3SWNGa0pveExSd2d4NkFwVDhHdUZFQmY3V0o0alJjeTJORlNtQzJpV3FuUGxPaHpuS3pJc0FTN2xRQWtBREtUTjVMTjNiMTJ2QTl2UjI0OEFxWC9yYzh5dWpoVTlEU0ZQUnJFeXlEc2Q0U1R4aWVUd0RRck1tQjdRNHZ6amlPTGVsTWYzd2lPV1BucFV6d3RPbVZHNzdDV1BVb2RQTkRIMGdxekNKbUp5SEFuVjl3TVJEVTJWSUluWHdBcTJyRnFYRmdFdHRscjhxT0lMUVdhNFhwK0llNndWcDlsVnJFRG9EUC9IV29Kb09Ed1ljb1lIQnhBNUQyUWk0VzhlOVVjWlFTR2FTcVlDbU9zOVNwNGtmVksvNDJRUHEvZGtUeUkwK043Qk5iSzZDQnFHbkRQc1lRTkVDWFF1TGN0eU5jMUJwWlY0cDViOGRGbmVnakgraGttRlBvVFgrem9yOThaY2RCZXJWMEpHU1N4MDloenpKOTVZZTZsS2VPTmxFTTlLZmJnbmtPYVM0QmdBR003OXlueW5GT25WaEhNSko2SkNaL09zeDlvcE5sZzFmQ3FmVUFLR1dRYk1HTkFqYWl6NFB6OW1mM3NlcXpGWXhyL2RTc3Fac284WG5PcTh4bnl2bWUrQnhrS0o3UGlZZG54STlzNnVuQUxuSmZBa2hRVG5pK2JFSkE4THZuNWRFNlNOMXVCS3VVaDRYUSszS2paM2pEZlFKV1RWWFlVTnJSVmprdWpIQ2xra1VoRWRrdlBiWkF5WjE1UVEvMEtnV3o5SHdWS2tBdDF6WVNVK3A3VURhQldlVjhvaklucGYwb2RxN1JnYU0vOUt2QmIrdzBmb3NHUXB5WXNobWhxVU9STVpHWEVKU0ZyZ200TFZmQ0RJQzVCQUEvdENJckdjd1l5K2s0QmxJWHh5R0gralVYbkRla0xGOWwycWp0RlY3alJuRGlxQUpjVGdCT29LeXJHd3hxcTdzbnR5b3lFTXhaK0N3TDJHV2RpckxtVHg3WEthY0dsM3FuTFFRdEFzQ3lJaCs0aW1jUXVzd0VMMEVBcWtkcHpXb3J2aDhRMWxTY0FZU1UxSUNCeWNhU0lmUFVWL200anF0TXJSZkkvZlNEOE5uWTdmTDlqUTB3cFREQU5TTHJqN2pDd0tRdkZqR0JjV1hreGNmVUU1NmY4L2FOT3NGY25qM24xNEdWNE1FSzBXN3BFRXU5a3BDbi85aTFLVGNOUklFZFZOb0tRWnJKZVM0QmdCWE1GbU40T1l3N29rbkZSM1pZT2pIbE9rZGVZU0tqclppZ2ZidUIxem4rZzFCNGpVVEdJREVnbE1RZjgwcWRYT0NhQjFsQklIZ1pCblhnaU1iRU00NTY4R2h3bUc1K0tPeEZJb2NEbmZOVEJGWHhEb0NQQVBtb2lSK1pvQjN3c2Zwb0Y0QThWUWlaeUlZcXJkMnVRT0NhMFZJdEdEcTRXT1QwWEFFaEFCSkplWkdlUmVlRFUvS0tNelNQZWkxUFphbEFTejBjUEsycTI1dEdhTFcyQWRFRG9GMHNmZVp5Z2RPdHZva25aNi9vT294Vi9QTE4zZTRGL1dTNFh4aytVdFYxd0NHMDZFRS9rVExRbDJLTUsrRXBKdzYrV2FhNUJBRHN6bDFBT21GcW54ekNVanRIbFpra0tTdXJwVVBkSG1RQkxld3E0SXdzUXhGWWlhMTA3U3hqQ3NGd2V4SWVKU0NySjVGRmtjbm9pYXZjZ25JRmdJL0RNMXFjQmU5SFNHbFRLTnBGaGhNc0tuTms0QVQyRGtBTkNQVEJtYis0QVlqdVRIekpRUkM1dVF5NEJ1SEZxV1FocFdJYkJZSXR6NVc5QXFLZ1JFMk5qSXBMbGdHamtRT01Db015OVFzaXNuM1Vwb1ZXb1FhZEFoSWxFZE9sSkZaeWlpaG5wVmo5S0RiZnUwazh1eTRSZWZTYTN3UmRFZjNqcjI5M2IxelhEVUIrS3J6MHIyV05ZR1RTYWgwS1JVZVA1ZFIzenZsY0FvQmZuaWpMTWQ0bkFjUEpkbnVyN2RDV0RSbUlRNmdGdDhUQWV5S1pxVFJiZUkybnRzcTVRbFF4QW1MeURPV1ozYlRBd3c5ZkRuODZNWFdNRGc0T2MwTXdnMXBqOENESGVtV05NbDJOYTNSMzVRZ0U4U21BNnF1dVgwa3RtbHZRaVU4YldKV1FhYmxGckRQYU0yZHBsRXBLUVJQZ1FTcGt3WnNJM1lLeUJGK3BZMVEyMU5DbmdyU0M3QkFlWisxZlhJNlNwYXFjcFY2TU1QdVJQYmtRWWJFdGhUS3RDcjAwVEQyWEtmaUFwS3hPWVB0RnZqTk9lUHpJb1g1YzF0N2ZxNytxOEhOaFAvZkNwaThEZURsb3BKREh1WWNLUlUybnk0Tld6QlErK1ZsTU9PYVI1aElBTk9oam5zbDVaU3pzNjVLakdCc0RpTTdxNVhrODlQMWFpM1VWVlFQUmRwa09SUkYvbnh2MTZCWFhMejNSYU1qei9iU1ZQZFRhNENCQUZWV1BEdTNQcG9HWDdEcVFrS1BleFFZUHFGS1h0cE9QV01FQks0bjJIQUIyaXU3VUY0TUhpazc4TWhEcW80RGI0VVJ5Mndtb2FJR0ZCamxCOUlPTmxJQUZCaXJ4RFZldlhGc24yVlB4ckZpRXhpQm9Lb2d2V0xHRVBrZ0JrYnM0d2cwNURsZmFMeUtON00ydHZoSXArN3JtNE5RVTVXVkZXbGIvOVZYNVgrVXREYkNmL2NTV2RnUG1zRUxCV3lyaFJ4Qks5QzlGN0RRcThVRU9IdmpLMGFCbkJzNG5BSlNKWHpzWUIrZzRTa3AySmdhSitnd28reENpanVKUHdEZ0FTbkxiS2pQeFRDOG5zNkNmK2VKY245QW9kWGZMVEtGTmZ6dE1lS05nejk3S3FwS0VWZ3hwazZpamlrd2V5djZoU0UzWU92bEFwcHdDVXZSQlhSMEVNUWNBOUJRL1BsaVdOUE1JUnBiSEdiSjA1RDJBYUFPdWFOc0txRVNxK2tjeFNOU0h2VEJTckhWb0lJc0JacW5VTVhsMHNqRFRBeW9OcUJBOVp5Q2FwR1lVaHpLaW9uRU5PT1M1YldsY3N4cFFhMlovREhLeHVjL0p5N0VzWUVVWCsydWFPVXllajcyMjNUMzNtbDRITGp4U09aT1RFcktNUU1TNEZRTjk2SjBpZUpKVVREN2FXaHIrMUhEd3pPQTh5d0JRdmM3UFdybVh5UXh5N1hyMGhFQTdHVURKa3pyQUtCY1lzdHNwZktETnEzTFErdFdteWlpMElxTEpncGQyUGJVQmxHS2JyMExUUmxBNHg3VTVyQVNDbW9SZ010UEJVWS9LckFxYURwN0JnUWZiNmc4Y2x3Q3FMOGZGVGpNQ2pTV2doZzdMTFRsTjFKRUlDQUptcFo1bXlBaERaWkticDVBc3VGUktWT0pjcmtpWWhzbVR2TFJKNHdiZHhoQ21WcnlWSjVpalR4QmN5b0tZSE9NMEJUVmk2ZXUzaEFpZGplS04vOTJPU0RVdk1QN1RKYjd1L0M5MTYvcDVjQ2FPM2dQYS9ZUitFb3duQU0rc3RUMmRVNy80dW1uY3JVb3QzSkJ6QUp6eEpRODRxVTNsR1lDekRBQ3BybDZTSW5mS0huZXNqTGR6Yjk5N1dkOTU2eVFRTVVoNm1jbWMrTXFqaXVBU1grR0NLMFBSREZVbEE3WGt6b201b1k2VkFBWUQzY05BQ3IyaXcxUEh5Sm5VTUNWTmQrOVY5ajBBMXd1OGg0M3hLYStzN09DS1VlaE1BUENOd01RcGg4N0I3cFAzQXRBdUNFOTJnWU1jUnBLWWttOEFsNEpwOE1GZkJGVCtoaWRsNjdaWFljdWE4cWpxVXQyN3JRSzdWUWpna1ZOZzhIbEoxK0xOV1lLRks5M2lGRkl0dU9HcTJBYTNIN1Fkc0VxbE91bWJzdW1pMFUrczhpdUtBbWZYRlF6RWMwVlAvLzJrQXNCYXVmMVBqOFlmNHZnYnBaUUxEYmdrZ3pyQnowRmJud283Z0dLZUI0TG5tZnU4R0w3UE9aWDcxZ0QxY29CNWxDVjc0MUJRbFlmQVkwU1BDejF5Rldyb0tXc2dPT2g5aC9YckJ6aHY3eVdRZ1pMWDhJWWxLMjBrYjJFM0EwTDFIVWdLREQ3TllLZkF3VUFEUndCZzlTZFJSbUQvVWhDMVh5NHJRbytnNTRDbWd0dUhPSVpOUUtCNFJNdEFad1M4cmhKTW5DbnpNTk95SnNLS1ZzTmxEWDQrRXdkUHdyZThzWmlQTFhlazlMYU9zSVhBVUppa1JJVlZ3UlBmT0NTSXh6aGdFblVrbElSK0FSM3RYT3E1OVZRaEpZam1HNTdPbzQyMm5OT1lJTHVzbndNK284blBZcThmQmU3KzVVZHZkaTlkMnUwMjlETEE1QXV4MlFoNUhPbGJqeG1hU1phbzRIT2k4T1dFdDQzTUljMWpCMEJuOHltYk84OVc0ZXc3TUM5bDJEOFVrTmM0cTZBWVI1R1V0N2pFai9QVXNSRzFINlNoSXBkT2pFa2ZxM3N6ZzJvOWY3eFloZ2ZWaU82SWlNL3lHVFlNZi8wMUk0VEo0ZDFDMFRzbVVBU0Vhb2lDQVEraVlBT0J3SU5HZ3JuSFFNSCt0YTdJRG5VcURoMVFwdENoQm84UUJWK3FxQnoxbVFCTTlGWGQvbDdUNTE5cm1nWGNDRnZWQ0dKcjNDWitNV2RMRHkzZDNGenVibTdwYTdJcWJHbjdzaTFsdVJ5TXlVOUQ2RzhsYXQ3aUF1WWNQRUNERkNLTWFzQ0R1S09xR2NNNm40dG8yKzhPRGQ4NENLZ0dmdkpEUC9vRlZtdyt2eUY3NWU4dE9lcEhmdjY2YndxaUgySjhVemZobW90QW02VVREQmE1eW1vS2paQVVCMTFiaVRNRTVoTUFtQVdZbzhNRDc1Z0dGUkVoQjNHdGl5b3hoSHRpQ0djVzhoYW1yanF4MG9CY0lDc0FZZ3BJM3lVMko0NDdURWhvZVhlWFNSczMvQUlIamJrUmQveWhVVXNUWGdQTlk0MjZ3bmlRQ1RCT01uQVhuKy9UWnRyQkRvRERPRXZSU1luNktPRmZDQmJJaEhJenlJYVpCQnduQzhqQm5aUGJQRm1QZ3V1RkhHUng0MnRWazM1OWRiazd1NkZKY0VZcm9DYi9paHF3N2pUUnRDVTFkUjkxMHUyYzdicnJteE50bFZlNjZ6ZjN1aHMzQ1FRN0pSRElQdGZoQkp5NWlsWWdjWlNWY0E2Wi9nSXFhaG83NVZUNFc2NVFzZmducTZUZEl0cHZveHdjazRUQXgrVGYwQTJZcytyVUgzMzJadmVoVCs3SUo2eitKRHpNWDBCR1JZTWduUEFSYXVHZjRBczhaOHlIbm5oSmdtM21hVDRCZ1BHQU16aEl5dTkwZzJOblN0UkFib2gyTXpSRkc1NkFpUyt6Q1JvSFhvKzhMeHZOcVUxbWFoRUZwcmNhV25Rc2c0QkJtZ00xQmtYV05vL3FEVHBiWlE4QU1hWElvcXJGTTZsWlZmTVNJSmlvcEoyQ0JNWjdBYU15QTlZdFNxK2M2TWdrMlZkaXFMbHd0T01BMHNBQ1BSblk2cTlxaXg4VGY3bTdUeFA2Z2lZQmcwYjN3Znd1L0UyOUJPUDE2enZkVlUxdzBubmRHYnRmdjViTHp1Q0dkZ0hyMmpJemNhN2VuSFJ2WEYzcHJ0NVlpa0RBNVFIK1owYUVFckpWTXZ6ZjRpVFVkSk5VU0d0NnZDQ24wQ0JMbVRmOGlSSmp4UXFvL2dBdm00czY5cU92K3pYNUNYd1hGZmhXNU8rYnN2a0gvcjlyWHYzeE5YWDRjektNL1A0UFBHMWdxdHRTR1YwNVNPU3BEN25oZUNBMFdXQ2JTWnBQQU5pTG9XdHJUc0FrVmxvbVV2VmdDeGY1WkQ1MHlod2c0VEttY216VlBIa1FHWWthVFZJSFcwaURvc2VRbDUxSDF4TjRZUFNFRnhRMEh1TUZRdWIrM0ZpaGtaV0hHTTBkbHdFTVRqRW9HR1RpZllDK1hCQUNyQ25vSXFCeXFVNlVBNVA0TEpGbnVFSXUyMzArMTE1anhWOWY3aTZlblhUM240dTczbXVTdmFGUjg3SFh0clFLM3VnKytQRk5mUk51VjNmQ3FTbmE2cVI3VkQrVStkNDNyM1ZmOE14Rzk4UjlXdjBWQ0ZZVkJNN3BlUDNxVXZmNmxhWHVtcEEzZEduQVBRSi9qUWJqbGFKZlNtQ1FWa1pqTTdRb0dRWnNkYVowVUlJU0VzWWM5RlFrOGp5QURPdkVUYjhOUGVHRC9mcnhuKzZjYlAvZW43N1dmVXkvQkx5aFM0S29nMytwRTM5dGE5RFp6WkVpQ0FSc3hPaVVGSExkQS9BUUYzaXdZYVA2eHluT0l3RG9VNjRKdndaZW94K2hNRDlQUDRyUzZTQThraE91ZnNUWUNFbzZQTHhJaytTQkpaaWNnVlRMS0ZadzVIM3FDd25SZmc1Q3VocCtUeXdZVklUdVEyWEdMRnQ5SmxOT3hsd0ZCampxRkRrSXBBN0plaUtud0R2Q1l3dVRQWkNSVzZZQ2dtL0VxZlVjZ2t3T3k2SjlzNGJjaXJPQ3RrTHlnb21neGZVOHEvNlo5UlZ0OVplNkJ5OW9CZGR5djZwMnoybjcrL0xsN2U3di9zeTE3c2MrZEVQYmUvR1htNERZUkxxNVBlays4c3B1OSt6TE43ci83ZC9lN0w3d0hldmRsMzcybWU0aFZiNnFRUERveFFnRW43eTAzRjBpRUNoeTdIRi9RTVBkRTFxRzkzbkl4Tjd3ZTJrRUh6aGxiMUFvTk1DR1RwRlVVY2xYMklmK29DOUVVSWZ4VVNzM09UZjBnZi85NXlmYTJlaXlSN2lQZkhLcit5Y2Z2S2I3SU1YWGRHNlJtYjR2bEI2UC9tTER2L1FYcWRjbnloNERBaHRwOHRiczB6d0NnSzYzZDNkaVJaUkJzcnczOG5nR01qbVFNZkRpMktPUUU2ZmNFeXFyTkdWa21DMXo4VXdMVHRtQmd6WlJvdFN6UGlxU2tKYzJBcnZqaFVrZnhLN0FVMVRZekl0TjFGZGw2dm5RaVR4M0FFR0VJUTdmL1dmMktRaDRGZEtBZEU0OUJxZHl5cGtqaTVhRXFUaEExckpsalFhdWFWbjFHZlFQbnRlS0xrYnVlTVA4VC8vTnRlNzdOZmw1N3AwSnNLN1YzckpGZFp1d0tTM3pmS3dTay9xZi85eE5mVlMyMWIzL1BSdmRiL3owalc1WEFXS2lkalllN3JwUGFrbDk5ZEpxZCtXYWRnUGFCL0JPUGI5dW04cFdGTzlnQ0Foa3FoUUdnRkFLSE5BUUQ0WVVlZ1E4T2t0T3VDVjhFYjFBQzlGUEs3S0J5WC9mT2ZtQjFaOEFwVm42UC8zZlY3cnJXL0tUNkZ3aSthL2tDQXhwMFZhMjdoeTlFekVFQjRyQmdsN3EwRStkQUtBSW9EQXZtN0x6Y0g3QzJIcUlsT3hNSGhJK010ektLa3hrT2VHenpjUlJqdnNQWlRDcERJMlQ4d0RCREJMNjFyYXpJN01DNVFLVEpUa0ZVSStnd29UTVlNRFF6b0FRZkZHVGVZMHNkTXhCemJZL0QzL3pyNVFOcTdXNEpDcURrYlo4cEJZNUpQdWM5b0lhT0cvM05hRFBhT0t6Nmora1ZmOCtMWGVyVXZ5Q2J2WTkrL0pXOTNkKy9ITDNieit4cld0N0pyN0NSUm5zREZaTGFYTGtPd25IemNJcnVqL3dYVDkrdmZ0L0ZRaSs2dGVlN1o1NlVQY0NkTW53K0gyaWEzZng4dXZMdWo4dzBZM0NIYjFYTDE2dTZVc2RPL1gvYis5c2dDdzdydnArNTgzMzU4NStTR3ZKdHJCazdFaE9RRFlRd0NUQlpRcENnZ1BZVUU1VmtncEpwWkpLa1pTTFZFd3FUaWpLVUs3WUlWUkNnWTBEd1NZQ2JGbUlzdVVQWkRuSXNtVFpzaTFMU0VMU3JsYUxySlYycFYzdGgzWjNkcjduemN6TC8zZTZ6NzM5N3J6NTNQZG1aK3piTTMxUDkrbnUwNmRQOXpuZHQyL2YrMmc3MUlKOEFCYU5WMjlKZ2ZlOHhzRWFGNWNIV1dKWWN2VVZVRkQrV25hVlZpd29QNnVnVzZUOFQ3OVUxMjJPem1GYSsxV3lEQ08xSUYrbDAxY3hRbitsZmU1NUFnZWhKZURNYTFHa1lHZ3FHVHJrdG1zRm9HNk5MbmFnSzVPajE0SjVXYy9rQ0VHRVpWRmRnTG5TZUJpOGU4cDdHT2p4Q0FIQjVWUXRTc3o1dGFGQ1daQnlCaFFQaWxEZ2JFbW5SRE4wZ3Jic1Y0ME1iQjdWTVhDZ1liT0lEeUtLV3dONFlTWUVnVGI3c3dsSVdTQ1ZVVmhlMXh3U0JoT3hxMElycDh3TTlqNWRiTmJYSnRjNHM1MlVmMGpyWDVhNzNUcUU4TG5IWnJKUHljL3FjUjdQdTJrbzFWc3RGallPckQyd1lva0FlYkd1UUVOdnpLRllEYjAwczVUOXQ3dW1zcDk3VTMvMkV6Y05aZ3VhU2NlMXRCNjRTbDczMCtjbnU3THBXVWw2UVovWDBtcUFweDQ0ZjBJUXduYlZKZFJMelByVUF3YVROSXUzdnZqeW4vTDBCK2Y4T2RTRElSd2Y2YzRPeWtDSnZXeE15di9GcDJheUx6dzVxNW0vTUg2Qmh5RHY1aXYxRlR3d0J1Z3VuSStqRUF1NVRFNFJRVGJrcTZWUzNGWHhuSjJCblRZQW9XM0w5WG9oamxRMEcydFVXcFlTSnA4SVcxR2dVbGNnSHh4U1BVTTYzaGhUcEJtbTFJcGFMUS8xQ1VVNGxBbDgwTEdXMHpNNUNmSUtSeGtHQUIwUGRCck1CRll1UXNJTVNPdDhoU21icmdMWVNMS1ZpeE5RT293dzhCejZsaFJKNE11UThneDBqQkd6UG9ONVVMdjJJM3F1dFYvTGZYYjUyZVFiMWFnNG8zdjlXeDZZeWg0OVViZFozNVFmcWlydk5HQ1dQNE0wZ0hBWkdCTVlQbTR2Tkx1TGlZODlPSjg5SldQd3o3VWEyRHNzU1VnNDErNlYwZW52eXM1TmFHOUFHNFV6V2czTTF6VU54dHVDUUJoaWNwSlREQkV4RklEbGUrR0tIQVhPUXlHZlh4RXB1LzNJWTBqUCtmYU4xVXo1dFJqSzlrajVIMzV1UHZ2amIwemJoaUJIZ1RIYXdYQkhZeUJja0VSeHBYYVRUYXd5RFRzWEtTVGR4b1I0QWFybE1vL1d1TUJtbXJtTjRVNFpnQ2JwajQ1azgvM2pzdktxYlVFYlJ3djFibGwzbXJsRlo1MnRza0I1QmphVEV4dFNDcG9Ea29iSGVkamk0Qk9jWmRqQXhXbDVqMENqVlJnY3lrNmlLMzBPWXhsTVQ0MkJUQjRsaGdGVjNJa3kyeHZQeWcrMHg0QmtWdGlXbFFxRFkvUFBsNWJjTklhNk5ad0lHUEdRbndUcVlLQnovODdPOWpDenZoU2ZlLzBoOVkwMjZhV2tPdDkrdkpIZDhVU21lLzNoN0JWWE1jZ0RZUU9LRUUrOVVrTWVhekN4a2xNREVBY1hiOU8zTGpXeTMvbGFscjM5YjJYWm02N1ZJMFBOZC92RXdKQVU3cHdNd1lYSm5teFNxNEU1clFZVzRpYWhHVUFqQkNrUHdKVzdpRk0wTndZRkttUktzcU4wR2pJMjY3T3NIeG5zenZhUGRkbXluNzJQY2NuaThPa3N1L1V4UFFrWjIyc3ZBVm03SlhPTWFBajdLcTZRaVlraDFoT0JFcDNIMW5CSSt5RjdkTHV4Unl1d01mbUZtV3krZGM3MllqdGxBSnE0bExyUGQydFp5WkxUb0N3K3d0K3E4OW1Vdm1WQWhYZTBDMnFPdDhFV0I0Q0hIWkk3RFJlbDF3N0J0WkYwOWhVaGJuaGRUUEVoa1dja1V1UUo3eEpFQlNXL0RkVmd1TndrVXBUQlRqdWRSek1JY2ZsdlMxY3BOd3BOUGd3Sks0UWcwMERMNVF2a3hDQXpQb2Q1bU1tWjlYbTBoK0tQU2VsWTVqTHJuNXZSN1B5WGpleXhGNVZmSFRVa1JXU2dpMFN6d2h2ZkRQeVFadWtFaWJkeTRnOFowUllja1BmcFp6VEgvY2tqV1hib3BTejdSemRKNFhUZndhZlByOUhTbTBlRzV5N1ZiRFV3cXkvdXpHazFZS2NKSlJTT0dydUNCNXFSTUl5VW5aSTh0NVZSSEQ3aFBaeHhrRHhrRE1lMENqcWdldmRxRmRTdlBNejhmL2xDSS92NEk3b1YwVE9Cc09HcHNwS2xsWSt3S2F5NlRRYWlEU2ZSL3JiaXFzeWx5UU9ab0IvQWhlV2wxQUI0QXltWGhsZlEyU3lpa3dZZ1ovVEMrWVc1UG5YdS9KUzhPcjJ1emx6Mkc3eE5jQXpCY0xSV2dVaWQrMFBPbmZmcUhuTnhzVS9DRG1wRXNubGRBdFFnakFqYlVDT2R1RGwxbDRWemhDZXNnSlpEV3U2SzdpWG9jSnpEd0VXSU93Nlllc3FTejNCaXhsNFVVb1JCaEdKN0czbjhCODRITURNL2hleWJBQnJKRG9VeVdyYWFVQWlEeTNQc3NHUGZyVm0vS3h2VmxqNnpQb3F2QllEZDczTXMrUXVIWnJOUFB6YW56MXVGR1JFYVZPcEwvaEJ0amxzNk5lcWZSVEFEdnFXTFFySlptM1lxVHI4Rm4yWDNuRzlrRHovVHlINzI1cjdzTGEvcjArTk85YUptMzhGOVdvVm8zSEJ1WUdxMnBzZU9PbStnc2NQaEk3czFrREdBcHZkblhyZlZGeXJsbWh0RHRkY1YzL1krdE84d3JDVS96L2paK0dRVkpMdG9LOVU3SHAzTzduZ01IUXl2Lzdvc1RMWVNCcmNDaFd5UVFUU1dsRUJZY2k0UDZnY1RzSmEwNHJLZ3poalFpUzQxTjV2aUJPWGt3dHlLVERTM3phNlRCZ0JXVGY3MStiblpiaW0rVG9GbVMxcnFMY1dkM3EyMUpkcCtVYWJ6R1UxTDhzdWlpWEhCV2FYQWtHeHhEMXNSWFloYlFnRVVXcXVMbEJ3TDJCS2NxT1VYUHlvR3VVQTBvRkZncU5rc0VNTmt3WkVYQTJMbi8xV1k4dWJCUjIvOEtvekRWZzVybHVJOTlFYWNncm9FYlRCcVJQT0JDc0pzWW5GTHdHeVA0dnVPUFJ0c0hOL2xKQnNuK1ZCOFBEdjB6NXhaeWo3MjlVdlpZWDNVZ2hrUkdoaVlZSXpnTFhweGx2TVptWFNlWVpyYkR4VTEvbzNwZUtHdGVKZU5LejFZd3VBNVVzeWp4VDk4WURaNzhOaEM5czd2Rzh4ZWQzVlBOcU94d2dHaVVTMVJNRXlYWm1wMmtwQmp4ZmEwUUgyT0lXQUNDTzhZZUYwQk9uKzB3WXloR0tTTmZYRVZOQ3A1N0pVeFpJZGZpeDNiN0x1Z3d3cS85N1dwN0J2UHp0dUtDWGtzNlVNc0xnZUVnT3oxaW11Tzh6Ujc3S3FtSWg0WGhMV2QrRHB1UUFMazZJOTV0UnVkaVVXY2hNTjFLRzB1dWQwR29DV1RqZnI4dEN1Y0NVZlNDWEJ6ekhwdWxDZXRpRGpQbkhuY1pQVW9JM3FDSTE4Y1p4WnBpdWRjUkdyTndNbzM4eGxpYnRuSlFFdnlPalU0aklUVEVXUHdoa3NOUVVwVGJCc1g0SUlQcHdXZERuQlpTOUFEZXdaTXlURXNZYUNoOUpxRjJKVFNJQ1hNSGdodjZUSEllL1dNZmtBS3psSWFwVWZaR2VUTWN0cmt0bzlZM1B0c0xYdncyYVhzbkQ1cVlXKzBNYmo1czBIZUdzSmtrVWZNQllTdEFPQy83QnpIb2dYaFFCdkRUYnVnRTBJeUFsckJZUWdPbjF6TzNuOTZLbnZ6RGIzWjI3NW5JSHZsZUhjMks0WGdubnlQREFGR1lXcXVLNXVSbjVQQlgxQjhVWVlnR0FGVkFXRmtwRDlWWlRLeld5QmtJajhnWlVjbUhFOGVqaklCc2dxNi8rbTU3UGFIcDdOelV3MTdNZ0t2WVNVVVpudkNablFoTEorbkI0bFkwMDAyZ1lVOGJvRjFMZ3hYdkZnMHVMdzRQNjJvWXJTbWM2N2RCZ0JPbldHSFhZMjVTOVBjME5JYWQ2NFlIdDhLaEFZZERsMVdGM1FjbFM0cHJOdGRNd0k2Z1dET2pZQXhKVzBNT1pWa2lJSXppK1pOS0JwVDVQQXlrYTZBcGVuaXZKQUNuVERBWTdvdzVHdnBsVG1PS1lNYVpaQXd4NHlBU1hqTjFVTjJuNzhvVGVLV3dLajdJRlJibWVHNGYrUkxOWGlVWDRmNTdLTVZmTGhpU0hHWSt0YVpoZXp1dzdQWlk3cS9IUmdaVjMxNkRDaGhtZExEc1RGWURHN0RSK1pDSHFvT2l1QnRMTGdOZkxtQkxQbzRHalZsWk5ZM09pb2M3MlJNSnRCQ1FnUDZ5aVlydXZ1ZXJtZmZQRmJQZnZBMXZkbVAzZGlmWFgrZ0IvWXpMUUpzdjJKQnkyUTlLTEFqeUp3K1hOUXN6UmlnRDFKbk0zK1VDL0pnSTFvTElqT0dLRDRqNFlrWEZyTFA2RkhuSVoxellQWFV5aGk2NHVmeVFGYjZzMzZJb1dEbFErMUYyMU51Vmc4SHVoZ3NVVlFiRnVlbWRNUGNlU2R4ZE1SNU54aGNuSnVleEFDNGF4NHdqdDA0TktKZWczV0NPbDVUNDdOblF5VjFLVDFLd01tMmVUMTFjRWNSUDJCaTZwZ1Fjbkx3RmxUVlM2MFBLUnM2UEZMeEJqWVJqVWdCTXhTQ2xBRmI5Z3dDWmkzd0dJQ2U1Ym5zbWtHZG1kY1JPbFlEeTEzZFlheDVQc0d3eE1Yd2FZbXJzcnBqc01FT3JmTmExajcwekh6MlZmbWpweGQxRDYwWlVDZHdVQWllTnZ2Z1JySHRMeW80ZzlKd0FuQVQwcGlod3FhanFnbE1LcDY2bFlNL3BLTnMwS0NYSU0yM0RxekhJbjBrajJNV0hOUXluYytnMzNlMG5uM3RXL1hzOVZkM1p6L3kzYjNaOTc2cU45dXZnd3FzaE13QXFDMnMvclFJTU1Qb1cwdE9FbHA2NkdHZWxROXRabktZME9uREI1NWJ5TzQ3TXBjZGtVd1lGd05tQ09FdHROWGw0Zkp4NVRlNXFCM0lJYlFJcnEzRzBJUVl6SEVrcitISWJuMnVBSkE5bllXWlNRd0FTWWdvQ0VhQmRqdUpvK091YTNucXBTa05ldTdRdFRDVlUzTU1iclpxbFd1U1JCS2hVeDg3d1hGU3ZYbW03Wk1oUFZMaFRiU1ptU0JReStvenYwMVJ2Z2FJbklRTVJ0L0pwanc2cmhYTDVMTjBEUnlnSzRDRlk1cm5jWnFtL0lxRU9JTXBoRzNvS2RMSDdDUUM1L1NUVS9jZW1zNWV0VSszQVdNTjdjd3Y2LzUrT1c1Q2FRaHlDOENBWmVTSUdrdmhHVzJXOFVNVno1NWR6QTY5V00vKytreGRiK3lGUjQxOHVwcmJBVjd4RFlNT3FBcWhnZWNQdnNJbHg4RW9PUGkwL1lISTcrYU1KZFF4SUx3a0JhM0FFOHBzMVVGYkh1dG1yMVZMQURXZEhXRFZjUGpVVXZia2k0dlorTkNjOWdlNnM1dXU3Y2x1MEtyZ3FsRzlwYWpOVFc1L3pCbUJFUFFyOU5sQVBIdHBLVHNtbVR5cEY1aU9hTFovZVRyY3gvTjBCR1htSDFuQ2pQMEI1UzNOTUdTaEhtUVdvRiticWxVazVJc2NrR2tOUnpKOVljdC9RZjNYRnk2ZW1WeWpTRk4xYStSYk42bVRCZ0FtOFYzekYxL1FDbUI1VHN2TjN0RERVcFF0TkNFdGduSVljYUE4RzJTSGRQOTRWQWRNYnJwV1gyNlJJUmpUN3U2MDdxVG1aQkRJaXl2cURjcWFJSlJLVnhUT3l4U1kxaUh5R2JWWUlNU0ZFemxEUmJ5Uno4TkJCdFNJRDQveFFqdnNtM1BTTk83WjczNWlPcnZsTHlhem1tYTlNYjFRczNla1I1NW4rT0hESEJnQWxKQlZEM3NnRi9Ycy9LSWU1L0Y2THJ2bHRpa28yZkNXbnYxUm1VSmhWZ3M4Y2hzQXI0VUJzRWpBS1M4S2orS25nem9vaFhCcWo5bFR5SzdqeUl1RERsejc3TW5nZHlOQWF0RmJHQXNreTdzSEZGYTc5Q3U4RHorL2FMY0hQQzRia1pERzlRanYxVmVQYXEramxpM016YWhMMWZseVRBWXplb1NJOGJzZ1paK1FiSGhya1JvWUwrRmRmbkZEYzhFcTRISWdRTjBtazRDMHNHV3ozTmJqRnFLdVZBNjB5N3ZaMDRDck9lcFFVNElSa0tCcmplVzVpYlBIZlFYZ3BCeXVSbVpMK0U0YUFCZ3lwdXNubjVpU0FkQnA3OW9vd3Nmak50dWlGUy9weEprY1dneFFYdEw0K0lQMTdBTS9wN1Bsc3A4Y3FKalNMaS8zaG5YZENnVGxqNTJUVzRMbXpncE1iWll6MmhKYXhWakJRYUVZOERIdStCUXFZNWhsMUFZR3BWWXRROXFnWWx2OW9nYnZIMzFaRGRIYWRWbEtlbkcyeXhUODJEa0thV1dJNXFoQ0g2UW9OYmNPQVdxbTE2Z3lkc2dqa2pqeUJzaktJWkFJeGlEUXlmUEVNcm55eDNKUVJOYXA4M2FtdVBYQ0JVZkJES0FBckhYaGpxcENENUFyck5TSWs1UE53bTVWYUhIMUlUL0x6YmY1SmxXWWhjejU4M1gxdDdROE91aDVPekYwN0kyQU03bFpIdHBkeEUwK1FnVGxqM2d5eUR2UHlBdFhZQ3lhOTNmUjJ3b3BhMmhMeU5QcUNyV3drWXRoRXQzRzh2VHA1eDVQRGNCNkpGcVIzUkN1MHdiQW1KZzUvdlVaUGZpL3FKdnlWNENnd1NiTVhBa3QyNll1Wm5FcElkRkFEd254aHRiZGh4ZXpINzhKMzVOcE1zajI2bGFBKzF6V1V4eXVaS1loYzFCWUl0RWx3VUF4NEIxTkhlczdEVXd2NEpsVkVKU1Y5elJubUVHbE1NdDNOdkJRL0RGdGJ1bmxhVnVtLzlhZGw3Sm45WGl1aXh0WHk2djgrWkpmUTFRNEc0d3hqVXJ5UVdrVm1wUkJHaDVvRVYzTlNJQTNHdEtjUEUva1NRZ0dMNHFBd2dmV0F6M3BvRzNnUVcybHMwcEthRzk0Z1NZWG5wV1A5WWFBSFdoU3g5cEJwNERPK1hJelFMOFJEbi9LcFB3OHFrTkVHRC9iTzlDMys1eGpCUklYNVFHR291RmlFWWtoeG92MkIyTWdQUExWbjhzakVMVFNwdlEyRHdWa3ZNSjhjSXpUdFJ6SjhDM2JIL1p4alBXbGk2ZWUxdG5qbFc0ZGFpc0xySWRwcHdHQU9Wb09USDAyZituc1hHT3BmcmFydC85R0dBcmlKTFJKSjBuVC9UaG1DNXhWR0hzZ0RJMnU3QU9mbjh1dTFiR3ltNjdobTNSNmZLUmJBV2FCR2QwS1lBellLRUpSdzRaZ29CUEp4c2hXQWR3ME84TkVOTURqUUp1WjFPRjhQWWVQVGZLMVdiN3d3KzcwN1EvT1pCKzlkOUtVSHdOaGc5Q1ZYek1aTTBZWW9ERU5xWG85SHFDK2x1RmdPRWlDaDNTQWh6QnRDSW9mU1ZvY3JEdU1nTHNROU1vZG0wRHJuNlpjU1NMQjBLdGMrYjBEK2hacThHZjlKQmlNRUZoTVFPanBZQlRBaGJ3b2tzMms5c3d4NEMyeGRHa2xFOGRaKzExbWdsQUpWM2dJb1RCNUJLS1dIbVdSaUNRMG9GVHZhbEdNTVh0WTVqRUEwcFdKMDZmOUpDQmszYTlHWXN2NGRocUExWmlBK1hxalBuMnFhM0RFQk9vWjE3T09ucThNWFJwcCtSRFdzMTRKOG1VOUR2eWxUOHhtNzN2N1FQYm0xK3JWVXkzL2VmN2RKMFBBZlNHZWxRQTc3R1VIYlRvVnVLcHJrYmpxY0lzSk5sQ2NvQ0lvbmoraTBqSDA4TjA1OGNNZ3VPWCs2ZXo5bjcxb3kvNmFNdm1nREVwZmJQbzUzb2FsNkRuTWh5eVZ5aFg0UEVVMHd5MkEweUJGVlVlbkVrYVBhQ0NDZk5Gam1vNlBwTWtRNkZ0SWx4YXlDVWxlb3NpUWl0LzdEd0xJSnB6dWs2cWhoQ3BDM1VENGdnTFV3bXFBY05oTUpJME5UZnN3YXFoMDVaV0NjaXRrSWp3NGFCajFHQmNxNUxaNERFZCs0TU41Q1NuRjFSS0lic0Q1N0E5a01saWVuenVwWXNuenF3MFEyV0tXVGhrQWwwME9sK2VtbnU4Wk8yaHNJbVNHR3grRDJwVFRLQWhXMzdvb0ZxV0hxS1p3SEgwOXE4ODF2K3ZqTTlrLytjSGU3Si8rY0g5MlVHOTQ2UlJwcGx2R1RJK05iUlhBKzBpK1pHK21VTkM2M0JEY2xSMEQzQTBBQm92SGRpZ2Y3NXAvK0l0VDJWMlB6V1kxV1FJK1N1RUtDaXdmUDAzVHFJTjQ0WHd3Qnd5RE93eG00cUpGTktKSW8yUTRZQlI0U1RJSEFwU0tRZ0tFWUN6cENYbk8xUUxxdjF6UVRxR2NGMDdnSVR3cHNGeEM1YmNkUXBpQk1KNkwwZUF5Tlpsb0tXRHRLU29MTFF5azh3cFRtVmc1cFlUNmdqRk01VUhld0hFbzdrMEdGL0NibFVYT2h0M0NwQ3VBK2RtSjR6blpzTmhOcXk0S3RpSFVLUU1BYXk0YllGZjkwdW5uZWc2ODFqcUdSQk9vTFEySmJjWloxK1lGdkNPc00zT3NsRXJLdytiZlIrNWYwRHZ0QzlsYmIrekozcXpueU5jZjBHTWpuWWZuNVE2YlVaTXlIbHhOMmpaK1l2V3I1WEVhcGJIbWFJT1U1UWdyUjFwZjBHTytwL1ZJNmt0UHpXVmZlWHBlNzhQcnZRWlpoRlM1N2NTZnROVnZCVmd5bXJKSDZHMUhvWFBGVFJob1RsZkgySFFhaklBWkFnWjN6TThTM0p5WWRGeEFwRmZ5aEh3bWg5VXpwb1ZpT05LM1dHc3BoajROU3VnZmxLWStqS1JYWlhsRXlxblI5bURVYUZmQWVydXRLcy9ZeEFWeWpJaElpWGhham1TTHcycWUxOHM0RExrMkw0dFEzbDdVWWhVb3o5bUkrUXRuajBYS1J0SnJFU3pIazZTdEJUdHBBT0FJaHZIZEM2Y1BQemR3M1k4c1NzQlN6YTA3Vi9pVWdtMGFSZGxBTzBoSkcyc2FNVU5TSmg0QjNmcU5sWWxHOVFBQUdDOUpSRUZVaGV3MnZZYytyS09nSEkwZDF2MjJiUnlwUUZGR0pVUGhsTHlGZVJZOU5EU1VEUTRPNm15QlBwQXhPeHVVY0VYT3RSSGNldkNzbm1Pc2s5cTludEFqdTFtV0pYSWMzKzNuMko2RTVFcmViQWdZc0lVbm54bUNXR1ZUT09JTUtKODdDMUd1YVRTSGRCUXNkYTFremR5TWMwVk04Mjh1TEE2TUNHMWZSZWhLWVM2M2o0WmFubkQvYi9YRVR2T1NOQkVVK2YwZVBlVXh0TkJLaGt0WkpwUnV5a1FFbytNMUtGWUVJNkdRSjYwbnFXSGRvSlhXeFc0QnBmd2NYdFBEbmNWekx4NStUb1ZKNWk2Sld0MHIyRjdYYmdNQW96RHVERHVzVFIyNTgrVFk5LzNMbDd0cVBRZkpFR2FlbUZOZzQ4N0poeExGUmw0WUhNWUFXWENSRzU3NURtbFp5R2xCbm8yZm1kVHljc0pmSUZFbSt5ZHpMQk5DOFJyd0dJRGhrVVkyb3EvbVRPb3J1RFA2cGxXcWNFMUYxb3lJdWZCdk1tQjI1M3g2d0hsYVVPeFUyVmZNL2lvUXhuQlN4amtXcW5DRnFqczZ0dFE2S3VCUVJyR3djb1FYWkpMY0lOZk1tcFJhUHdnSGVMaHl6cHBMc2Z3UFN1MzVTRGVHN2RhQW1MWERTT2tTbGR0d0pLNXdMV1NTRXlCektHa2JuYXNTSVNFa1hvNHNtS1RzM1EzQllBQVdYLzdyYi80NWV3QllXcDVudGhhS0V0cmgybTBBa0FnTU95UnMvdUtoVDErNFpuSDJXSzEvOUdDdzFuU0NaOXRrVXhLVDY5S0JGbmVFcHBRUlNUMWhvMGtiUTZTcVJ6bExZTC9RYTZNcTNFT2kzTGxUT0lubEhKS0hNK0o4TUdOQkpudEpmck1HSUcwdFlSK29JV2lZbkdhVDhxc2h6WEVyWWZLTFl4MWkrYXdjS1Bud0pLKzdtRWZ5QzMrT2o5RHdKWnhIaTRvYzAxNlk5R21aY05vZlJhdThsVVVxR0ZZQTRkRmltVXFJZTZraTFlVzJNb1U4WVpWUzVNNURiWkFIblBNSUU4WEhjd0NzSVIwNWRPOGQ1Mk05clZZQVJZTnpaclllYUxjQktITUNzOTZJdWFXNWlTZTZoMFovR0ZFalB3YmhNZ2VmdCtBZzNDUUpHN3htQWtRMU9NWVVadFR6RnBCT1Z3eGxCNmt3d0M1VzJHSmdjb2NCWU04QWkwMm4rWVpjbm1HVmdQT3lNam1tQ0lSUUNKaGlFclFCcHBnZ3F5VUVaampEczRJeUpBbjZEL3pTMXVCSVMxMFJiNXF0U3Mya0p6eW53NXlLQ1NxUGJVc0E5a29zTnRVYjJvTEVtdDFLVEhONmlCV2xYQ1psRzBUZGJGT1RzOGdkU2llN21SR3hOY0IzQ1ZCK2JnTllDZFl2VER3aFN1VkhnRnNqdm9GUzdUWUF5QXhaZWQ4NVpHelZGbDcrMXFORDQ2OWlMQWVoS3VBWk5zQnJrWVZDY2lzNlJSZzYwMjRHbE1pWXRUeFdIM1hGUDJVS3R3NkNsc0VLV2VaSU9sUmcxNERCQUFURmx3RVEzOTNzTkpzU0psblhEVnBsSzNJRk1uSFlLaEo0Rm94OFUwOVJGL2VsdENYUTRvb1A4WUJiVVVFWmdWeThvV2s0NWlPcHJBeGxFaDJQUi80MjJLSW9EYmphYUltVkxjaGxVa295ZVZ3ZTZSTEZFTVZnczFuTmkxc1lBUjREbmo5MVROOUlVbmNXbnN4UkdnVGI2OXB0QU1yY3BRMnBUVDk5NTVPRDEvMjlLYzJlSXd4dVpqWWI3bTJhWFh5NWhwcEQyWmI5cWloOGV5L2czQXpBS0t1QVVMWFM0cmhaeVFybDZJSHdyQm1lN2JDSjd0MExwYlFzRzdqRVNtSk9aRkM0b1BERVRlRmh5TklkSCtLbS9MRWd5Y1JOV3kxdm9CWTREdUd0WEkzVTVSTFpTc1dYVVFhZUV4RmNCcVdWUlhPNmJaUUpwTUlKUnA1SWhkZTN1K3JMVTg4K2RPZVRTc0kyYUpzNFh6MHJhSU82alJ4QU1wdy9DYUgyWG1IVVBiTy9yUzdQUHZqQkYvYS85YjFIYW4zRFA4QVlSdm41QzFtM3dFQVVSOTVCT1lsQUV4TUFiYkpaUFdiaWkvcHMvYUZvMHg1QVRpeVU4MkdGWVdEWmJRWUFxT09tVVEveldqY2FnSmZBVTFHaU1DWml3UDRESTZHT1psd29GVnJuRk5MWks1VDBsQUNqcVBJSWVTaGp2am5yem80MU5TU3dhdTBGTHgrM2RqYlVoaGFraW5LdGhGaWtYbjVJbFljdk5vV25VWVAyL3NmY1U5KzQ0N2RmRUhGcWp5M0tJWFU2bm5CYlhDZFdBRENlaW85NE1BSnpjN05MazZjZjZMdjZoaDhJaWhTVXF0V0p2SzIyanNwdy9vakpURXdxTm9WSnN6MkF5R1pnMWt1RzhselRoaEF1RElDK3ZxTjM4amRyQUx5R1ZEaWhOcGdLSWE3QldDWHhwb3FVS2tLYlhhSW41RU5Wb2tHbndGTnFQSXBhZDFmSVpic1pybE9ackNpM0ZZSXJpS3lPb0c2K1ArQWZic0VBekowKzg4RGNIRyt3bVBQdWdaT09jVlBzRzhWYTJ3aWM4YUQ4Y1Q5bDl2aFh2Nnl2Tnl4aEFCalh4V2JXRm12MldnU1pwZkhGZ0ViTWVOVmpvUmlQOWJKOERnWkNWeTNwN1hVeW1JcmVadVZTM1BuMlBKdUJ0clJQNklXeTRWWUNQdURIbHZUR2N1QXRQNWlqTkc4TDdURWprTFI5SzBNRUdvV3NvTHA3M1c1ckM4dC9QZ1hPdHhuNGRhVGFVbVBweEZQU2pUQlVYV2U4aDcxamlMZlZkV0lGa0RMb0RmQUcxYzcrdjE5K1l1d05QLzlFZDkvd0cvbDBGd1lBeGVCVHo1dDFHeTNoZXdPMko2QksyREN6c3VoNlFtVGx3cnpnaUd6b0xub0l2OEY0Rk9sYkQwRTBPSi9WWXpXbThsUUlqNTdtZVlId2xMQnZrWUphbXJNNWJQc2NTVUdMTjJmWlZiRzB6VDRKN1BRRzhFaVpsNy93STNwSHBhcysrL2dYUC9wdW5nRFFITmNYNElwdWJtZmJPbVVBZkhnNTgzbUQ5R2JnZFAzc2tVLzF2ZnI3Mzhoc2FtOXdhZllOUno2OTJPYWFtQTRBS3huSnJNQ2pUTW9ROEp3MWwzUVZLWXpBeWhJcEo2U0dsUVRZdGZPbTVUWVNOajRpMWNCbFVZcWFuTWRjUXFYcUhlK3dLTDB5UkI2ODBWUmdJMlZXVXRsWkdOcXlRa1k3aThXY0c1NGlEZXZFSjZkUitTRVVQbEI2NmJtam41dzRjNFp2QU9CNCtsanVsbkxjTWw3dXBWTUd3UG1DYWZjMEN0OTM1djRQM1BYS2Q5NzJpOTNkUGRmd0c2Z3NoK3hUMUZ0WUJYaEZtNGVheGFOSVU4bW00WlUwWGV0TUpWY21id0hqRkoyWDlleUs1eThQanh5L0FSN1MyeVRLNVhWdm9PeE96NElSMk1udFlYenh3eXg4bWRobWY3Ny9VRjg4OWVYYjN2OEZKZW1Cb0wwRm1FK1lpdnVRcEtzOHJHQjdYQ2YzQUp4RG1QWUdtV1diZVBLVHArb1hqLzFaTi9jK2FsWllDUlJ6cXhlOExFaXQ2L2xZQVpKMUR4ZnVIZWN3WmpmZ3VNMUNwKzNReStlMDErT1o5RFk0cTlmcmFnTzlLMDBpWFFGY2FWN1dxcDhYZi9oMEdlK2pqR2dGc0VkZnJKbysrL3p0VDl6N1p5ZFZqaDVCUjJ4eFdxTFRwcDV2cHNvNDdLVHpJUWFrVVRTTzg4MjFsKy83NzdmcFlQNFp2dHpMYlVENFNLV0daVnJpY3NLcVpMT3VYRjI1UEVxRDg2Vm1pRzN1dWw0ZEc2SldKcktGdU4wcnF6S0t0azNtVytDakhYWFRIMTUxSG5ERURvT0Rlam1OSHlSaDJjODNLN3VYbHM1OC9YYnBRcGgzWFBsOXdreTVwNmZhN2pwcEFHQWVCL1FHMFVCODQveWpmM2hpNGR6UlA3SlZnTGl3dllCNHVpNXQ5UlVMcTJMZlVIS1lEeTRhMENKOXd6aktYMkd2NnEwTk1IS2xlV2xML2JRRFFyUnJoM25uaVM4eWora25oNW45OGVQNlhOM1VxV2R1ZWZDdWp4d25qeHlUb3hzQmI0WWxkT3JTU1FQZ1BIdEQwaFVBcDV4cUp6LzM3MjV0ek0wOTA2TkhJZmtaZXg3SGVZbHRocjZNTkNnR2ZYbnUwQnNFZE55V29OcmxkVjJwdGxxOTNxQnRsbk5IMmh6YllrWmdoN1VIbm5ocU5Dcmw1eWZZUitWUmZuMnUrcG5QLys0djNxb1E5LzdvUkQ1Qkt1eXRVTEJ6cnRNR2dFYmd2REZ1Qk16S1RUOTMzem41MzlMRTM4QUEySzJBTHZhZCtsQnVaMTNWQ2hTM1NYbDJGb2ViNHViYnJTM1duazFKWVBzeUQybmpiMXkvUE1wSFgvbU5SdDBDTkU0ZXV2OS9IWDMwM25QaUFuMUlaMy8weEhXbm8weDIraWxBeWp5TllzTDB4bUx4QnA3LzQzLzRoYi94bjE3NmJNK2Vneis3ekk5NHlCYjI2TUx2dlRVZDBVMHBYWWt3eXAvVWF6TjRFdDlWd2NTSTJRcG1XNGJhOWtqSSttVUh0UWRXZU9hL2QxaXp2Kzc1TVFBSDltcTZ2M2o2cy8vM3YvNGtPLzlNd3J6OVo1T2lvUGVPdDhLaGt0cnZPcjBDZ09PMFFZUjlGWURGczJYUG1YdC81VGV6aFlVVFBYb3FZTGNDTWdMZCtrNjJuY1NEUXVVcUNleENDVERZK2RqSHVIN0loWjhneHdEczM2TUpibW5oeEpjKzlxdi9ROGsrR2Zyc254b0JXdHhSNWFlQzdUQUExSU56NVM4YmdPVUxEMy8weE5Rem4vLzE3bHFqYms4RnpBRG9PYjE5M3owVXJxNlZCSGFiQkhqa042NWZjOXFuUjMzajhudjFReldqQTQzNmM0OTgvdGNmdXZNUFRxZzk2QUtUb0JzQTR1aEp4eFZmZFpqYlRnTkFoVzRFVXN1SEFHclAzL3FPZXhiT0hQbFFyNTZOOGlNWjV2V3VOQ3VCeWxVUzJHMFM0SWc3UCtXMlQ3K0ZaY292QTNCZ1hEOUtldUxJaC83a3ZlKzRXKzFCOTlaUy9tMHhBdHRsQUx3eHdMSVJRQWo0cnFOLzhLYmZYN3A0OGpOOWVrU0MzdHRYVW5WUFVLdU1nTVJUdWQwaUFWZisvVkorWnYyOVV2NnI5L08xMzlPZi9yMTN2ZWwvcXgzb0hkLzlYOHNBYkV0enQ4c0EwSmkxakVBUXh2ejh3dkZQdlAzWGxxY3ZQTkNybmRLd0NzQVE2UFhieWdoc3k0Q29Lcms4Q2ZDeG1EMjY1ejh3MXBYdDE2TStsdit2T0NDYUd0TzN2KzluZm0xK250K3FNc1ZQbGQvdi9ia0Z3TG11aEZnSHI5dHBBTHdadmdJbzd3VmdCSmFtWDN4bzRvVlAvK3RmYnN4ZWVyUlhLd0ZiQmVoWlJiZmVuZGE3QTlYR29FdXhnanRPQW54OW1sOXV2cXFrL04wTFU0OTg5a1AvNXQzSERuMXpnakV1WDU3OTBZbHRVL3BVY0ZmaUJ0dWZwamxNK1FIWFBYL3VxZG5GeVZOZkdiN2h4OTdZTTloL0RTS3p4MVh4ZmR3cjlYaXdUOGM0Ky9RTzk0Sys0MSt2NjZYaVZpMUlXN09EdzkwYXJJTTZtTUxIV09iMCt3UzczZEVXWmwvYTRpY0N0N05OL05UNFB2MTBPelAvUGkzNzhkZGNwUWxzL3RJamQzMzRsOTcxNkQyM3ZpUitFRFRLajA4My9zQzdBWEFvVk9mZGxUQUF0QXJWS1RjMFZhZnV1WmYrYW5yKzdOUDNqNzMyNzkvWU16UjRuWDA4T0ZnQktWNVl1R3kzSWFnTVFPY0g1RlpydUZJR2dFZlZ3d1BkV3U3amcrTHZaOWt2NWUrYXZmalZ6L3pPdi9vUGo5N3pDWlNmOGM3ei9yTHlnM2RkY0NqVTlyZ3JaUUJvblN1OHczS0x1eGZPSFptZGZ2YUw5NDY4L3FjUDlvMk0zb2lZTExNdXdRaXNWclJNcWozeHlnQzBSNDZkb0hJbERFQ3Zia3YzYUtmL2dINTMwbWQ5bnZOZnZVOWFmdkhVcDI5OTcwKzk1K2hEOTV4WGU1bmhVWDYvL3kvUC9vaGsyNVdmU25lQ0FZQ1AxVnhYZmZMVTRzdGYrNS8zN2ZtYjc2ejNqVjcxL1YxOGpBOVJtUkVJWHhPaThIWklyeklBcTNYVGxjZHZwd0hnK3hVam12WDNqV3JXMTA0L3lzOXUvOVU2NGJkM3VGR2ZlT0h3QnovNEwxNzdHK2ZQbnB5VlpGQjJYL1pqQU5nRDhFMC9IN1lPbGJTOTdrb2FBRnE2MmhUdUFnRmFudlBmL1BBM0I2NTU0NUdCZmRmZjNEM1FzMGUvb1JidXdiVUU2K0l0d2tqS0MzWkNqSlVCNklSVTIwTnpPd3lBZmNldlg2ZjZ0TkhIOC8xOWNjbVBBVGlvbmY3QnJ2bmp4eDc2OC8veWY5NzlsdHVrNGN6NktIeTY3UGVabjJIcXZqMEMyQ0tWSzIwQVlIczlJK0JONjVsNDRrK2ZsWG45MHNncmYyaHY5K0Rvalg1UUVBTGNpM0ZiME1uanc1VUI4SzdZZWJBVEJzQm5IM2IzQjZYNExQZE44WFdQNzgvM3I5TGhIcDd6TDAyZStzemRIL21QLy9tdWo3em5NWWFqdk0vNndQTE1mOFUyL2NvOXQ1cnlsZk4xT3U1OEFObmh3Mk9jOEhwWjJMemVGTWp3aHIvK0Z6Ny9FNFBmOWFQdnF2VVB2MjVSNGwyU1owYzc5OW9LNXNkQTJTaGNabHY0TXJlR0tUNGl5eitzbHpyQ2o0UHFOMnVkYXpHMW14eHQ0WmVJOSs3dHNhY1pGeTh5TWUxdVIxdDRzbkhod21LMnBCK0EzWXFqRkYxS3Z6TGJvL2k4eURQWXowWmYrSVFYRU0vSFBNWTE4OWNXWm8rZWVQSytEOTN5S3ovMUZ5cnF5M3RYZmhRZjRhWXovNDVSZnZHMTZ1eEwyblk3VnllZ0d3RWdieXppVTBOQWVIbndOWC8zd0t0LytzUC91SGYvamY4czYrazlpQkZZa3FneEFqdzFNS2hleFFBdzZCdENLQlJzQVloTk9MSlhCbUFUQXR2bXJCczFBR212KzREajVCNnZvcVB3K0g1K3B0MjgzdVRUbE1ObnUvRkRVbnplNVIvVGpOKzlWRDk5NmRTUmozL3V0Ly85bng0NzlKVnphaTVqRllYM0dkK1YzNDJDSzc2ejRIQ2JKZFZjbmN1Z0dYdmxZczRQRU8rR0FBT1FyZ2JjR0lCZkhyLzVGMTU5OVZ2ZTgvTzllMjk0UjliYmZ5MGZHc1VZbUJHUW1JRm1BQWliandaQkVmN3Nud1M1L0JvQ2hqTzg0cFVCeU1WeDJRSEU2NTFkRW5VVGJmS3NsZTZaOTYyeUFyQTZkR0dQaUpuZFozZi9vVmNVbnQvbjQ4QlpuMFpWL2t1OU1jd1Bkd3pvL1pSUnpmak0vTFhGK1pPVFo0NTk2b0hiZnVPVEQzL3hsaE9xbnpIS0RJL0N1MDluZlJSL1J5cS8rTXI3Z1BCT2N0WnZZc2dOZ0VOZkRhUXJBb3dCNmN1anIzL2JOUWZmK3FzLzNuZmdwcCtwOVkxOWp6NHIwSTB4V0U1V0Jia2hVQUhUZVkydXFQdUNaZzd5RVplZU0rQ0R4U1BEV2dyS1QwMDFzdWxwL1FpMWN5bGF1STBNMUpEenlsNXByOTBDak5mQ0xjREV5aC9VTGpYTkdBYVgvajZCeFlWcmxkZGI2REpDTnF2bGE4SjdwRVVCVHpJWUNSTW1PTDYzWmtvOE1kR3dXNER3ZXhNYUdFcGpkamVGVjlpT2x5dXVKM2dXNWxkNVVmNWVqU2ovbFY0TUFUL1Z6WXpQTC9iVWxyUzBYNXA2L09LSnB6NTMvKzN2dS92UVZ6LzNVbXdPaXUxS0Qwd1ZuNW5mRlIvb2JrY05FK1MzVTUzekJrVEIzYXU3N0pZQWlQSzdVY2dOUWRZN1BITHRQL2pOTjR4Yy82Ti9wM3YwMVQ5VTZ4MSt2WHA3bEJGb0JrRmRZNnNDZFl2MWhpNG9oWWRGYzBXWS9DTmErZzFySnBqVTE5dW5wOFBBSTY4NUsreVJuUTJEQWREbUZSK20wTENkNElDcW5BbGNGNkFyYmc3WHdLWGx5blNJUTlEeUpPRnlQQ2JsR1QwOXJUK2xBOTd5QU9YSDlmeWRWOGtuMVJadS9WQjg4S2I4Z3NVWHAwTFlEWUROL0NnL1NxK1pIc1hYZ2lEcldsNmVYSzVQSFowOS8rSTNqaCs2LzRFN2YvZmRoK3YxYWI3Ynp6aEVvWDNXZDZWM1NGcnFmV1E0VlBMT2NXcnFqblVwYjRRUnZFUENHQUEzQm00RUhJSjNnUS91Kzl2Lzl0cXhHOTkyVTkvK04zeHY5OUNCTjlSNmhyNHJxL1h1VjJtOVhCQ1ZYMTNtdHdxVU5JUGdGR0ljNWNkUHRUSUFxckNWY3hLdDBxNFVqcll4NEZNRGdHQk5xUlJ3NVhJbGFrcEw4NjBYcG9IUTgzeWJpYStSMTJnNlhXaHJOT3pSSXpsbTk2bkphQUNFODluZlBqS2pPT2tvUE4rZ1pNWW5ySC9VZFZHZm9uaDVlV0htK2ZucGM0ZlB2M0Q0OFdjZXV2T3ByMy8yOTA4cWxkL3Fvd2s0Wm5WWGRJZmczSmNWMzd2ZklUUjJsUE9HN1NpbVNzdzRqMEQzR0FEQzlGL1pZd1RBT2ZTOGRBNWwrclV5MkR2eStwOTh4ZUJWTjEvWHMrZFYxM1gzNzN0VlY5L3dLN3E2Ky9kMzFmcjJOR3ExNFM1RjFHdTlkdXBZcGVoQlZnRDRTUTB5WHdHZ1RPdTZqZVJabDBqN01wZ0IwRXlYR2dCVEZyWFRaczBFdWhGWUMzcGFXdGFOU0JOT1RUQjhwQzlRMUplbXBlRlNYaStUMDFGZVp2a3g3Y2lqNE16UnJBQXNIM0tYVjdpZU5aYm1hNDNsNmF5eE1MRzhPUC95MHNMMFMvTlQ1MStZdW5EeStYUEhIajl4N0xHN1R4MTk1SjZMS3NGemUwcENBdWZLN2NxZlFrOXp4WTgxMmdvZ2xBNjBQTHpqb0RkeXh6RldZaWpsazdCN2xEdjFaV05BbXVNODdHV3BnZzdEa2RiYk83U252Ly9nelVPOTQ5ODkzTFBudXVHKzBZTWpYUU5qSXowRGU0ZXk3c0doNFpHQndhR3hnZjdaK1o3K3VibGFmNjI3cDBjZks5QXFRZytndW1yYVRxcnBSMmthZ2h4STBQZERPWlRRMEYwemYxVFJXS2J1SGVIRWViWkh5K1pGeldOVGx5UlFzU2ZHRFpwQ2kwdFRYdUVSanVFSWswZnhwcndSaHlLYVlwS2ZzSmZ6ZE1VaFpuUVZOT01LVkxyUWVWbkpVcUpqajZXcm9mclVSeEtpQkN1MEh1TjBMVW1PVXJqbEpSWFR6OHd1TERVYWk0dURBOHZ6V1dOeGZ2TFMzUHpTL056c1luMTJabUhxd3N6Q3pLV3BtWW5UVXhObmowOWZQUFhNOU9uamZ6VXpNekV4cCtxNFowZHhjVlNQWXp5NE1xUGNoRjNKVStoNG9KY0J1bGZRSFBFZDdlaWozZVJTZmdtN3B3TnRERVdJMGpzT1dJNm5hZER3c2dvYVRTRE9PNVE4M3BrZUJ1SWNsc09XV0VwM1hBVTNMZ0dYZTFvaXhYbllZWnFQc1BkUDJtL2tkZVgxTVBIVXV3RndYRG51NVlEdUZUUkhmRmM0Rjg2dVlEWmhNdVdiY09wZG1WUFlTdUU5bmJKcE9LWGxZYW9takhOWURsdGlLZDF4Rld5UEJGb3BWaG5uY1dBNTdEaUhiZ1JTV0E2N0FTaVg4VGpRWFJwMjNJNkc2V0RlMFl5dXdsektQK0gxZktyb2FiaFZPYXAwdklkYlFYQ3BvMHpsT2lPQnRSVE0wMXJCRkVlNDdGM3B3YWRoajlNYThMaTBiTUFVaHNianV3Wit1d3pXdEIwZUJwYkRhK0hLZWVuRWN2NjBZejEvaWl1SE41S25YS2FLcjVRQVNyY1JsK2J6c0NzczVWdUZIZWN3elZmR2VSb1FSL3F1ZHQ5T0E1UzIwQ0hsTm5rY21JYnB1TlZ3cExrcmwzRTgwTk5TWEJwZUx6M05XNFZYbDhCNml0WXEzWEVPb2U3aGpjQnlIdWZPOFI3ZjFmRGJmWUNXMjVmR054S21jOU44YVdldmhrL3pWT0h0bFVBcjVVeHhhUmpPUE80d3hhV2NrMDUvcC9uUzlGMGIvazRaeE41NWE3VzNuTGFWTXJ0MklPeHl4dGRTek5YUzFzTDdXRmd0enk0WFY4RytON1RBZkdlRkxyZjlsMXYrTzB2YW5XdnQ1U3JxNVpidlhNczZUTGthd0JzVGNDV25qY2xwcCtYNmpsWHNuZFlSRlQrVkJDb0pWQktvSkZCSm9KSkFKWUZLQXBVRUtnbFVFcWdrVUVtZ2trQWxnVW9DbFFRcUNWUVNxQ1JRU2FDU1FDV0JTZ0tWQkNvSlZCS29KRkJKb0pKQUpZRktBcFVFS2dsVUVxZ2tVRW1na2tBbGdVb0NsUVFxQ1ZRU3FDUlFTYUNTUUNXQlNnS1ZCQ29KVkJLb0pGQkpvSkpBSllGS0FwVUVLZ2xVRXFna1VFbWdrc0RHSmZEL0FiUEhaeUY3ZWlnRkFBQUFBRWxGVGtTdVFtQ0MiPgo8c3R5bGU+KiwqOjpiZWZvcmUsKjo6YWZ0ZXJ7Ym94LXNpemluZzpib3JkZXItYm94fWh0bWwsYm9keXttYXJnaW46MDtoZWlnaHQ6MTAwJTtvdmVyZmxvdzpoaWRkZW59PC9zdHlsZT4KPHN0eWxlPi8qISB0YWlsd2luZGNzcyB2NC4xLjE0IHwgTUlUIExpY2Vuc2UgfCBodHRwczovL3RhaWx3aW5kY3NzLmNvbSAqL0BsYXllciBwcm9wZXJ0aWVzO0BsYXllciB0aGVtZSxiYXNlLGNvbXBvbmVudHMsdXRpbGl0aWVzO0BsYXllciB0aGVtZXs6cm9vdCw6aG9zdHstLWZvbnQtc2Fuczp1aS1zYW5zLXNlcmlmLHN5c3RlbS11aSxzYW5zLXNlcmlmLCJBcHBsZSBDb2xvciBFbW9qaSIsIlNlZ29lIFVJIEVtb2ppIiwiU2Vnb2UgVUkgU3ltYm9sIiwiTm90byBDb2xvciBFbW9qaSI7LS1mb250LW1vbm86dWktbW9ub3NwYWNlLFNGTW9uby1SZWd1bGFyLE1lbmxvLG1vbm9zcGFjZTstLWNvbG9yLWJsYWNrOiMwMDA7LS1jb2xvci13aGl0ZTojZmZmOy0tc3BhY2luZzouMjVyZW07LS1mb250LXdlaWdodC1ub3JtYWw6NDAwOy0tZm9udC13ZWlnaHQtbWVkaXVtOjUwMDstLWZvbnQtd2VpZ2h0LXNlbWlib2xkOjYwMDstLXRyYWNraW5nLXdpZGU6LjAyNWVtOy0tbGVhZGluZy10aWdodDoxLjI1Oy0tcmFkaXVzLXhzOi4xMjVyZW07LS1yYWRpdXMtbWQ6LjM3NXJlbTstLXJhZGl1cy1sZzouNXJlbTstLWVhc2Utb3V0OmN1YmljLWJlemllcigwLDAsLjIsMSk7LS1ibHVyLW1kOjEycHg7LS1kZWZhdWx0LXRyYW5zaXRpb24tZHVyYXRpb246LjE1czstLWRlZmF1bHQtdHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb246Y3ViaWMtYmV6aWVyKC40LDAsLjIsMSk7LS1kZWZhdWx0LWZvbnQtZmFtaWx5OnZhcigtLWZvbnQtc2Fucyk7LS1kZWZhdWx0LW1vbm8tZm9udC1mYW1pbHk6dmFyKC0tZm9udC1tb25vKTstLWNvbG9yLXBhbmVsOiMxYzFjMWU7LS1jb2xvci1wYW5lbC1iZzojMTQxNDE2ZWI7LS1jb2xvci1wYW5lbC1vdmVybGF5OiMxNDE0MTZhNjstLWNvbG9yLXBhbmVsLWRlZXA6IzExMTExMzstLWNvbG9yLXBhZ2U6IzBhMGEwYTstLWNvbG9yLWFjY2VudDojYTViNGZjOy0tY29sb3Itc3VjY2VzczojNGFkZTgwOy0tY29sb3Itc3VjY2Vzcy1lbWVyYWxkOiMzNGQzOTk7LS1jb2xvci1kYW5nZXI6I2Y4NzE3MTstLWNvbG9yLWRhbmdlci1zb2Z0OiNmY2E1YTU7LS1jb2xvci13YXJuaW5nOiNmYmJmMjQ7LS1jb2xvci13YXJuaW5nLXNvZnQ6I2ZjZDM0ZDstLWZvbnQtc3lzdGVtOi1hcHBsZS1zeXN0ZW0sc3lzdGVtLXVpLHNhbnMtc2VyaWZ9fUBsYXllciBiYXNleyosOmFmdGVyLDpiZWZvcmV7Ym94LXNpemluZzpib3JkZXItYm94O2JvcmRlcjowIHNvbGlkO21hcmdpbjowO3BhZGRpbmc6MH06OmJhY2tkcm9we2JveC1zaXppbmc6Ym9yZGVyLWJveDtib3JkZXI6MCBzb2xpZDttYXJnaW46MDtwYWRkaW5nOjB9Ojotd2Via2l0LWZpbGUtdXBsb2FkLWJ1dHRvbntib3gtc2l6aW5nOmJvcmRlci1ib3g7Ym9yZGVyOjAgc29saWQ7bWFyZ2luOjA7cGFkZGluZzowfTo6ZmlsZS1zZWxlY3Rvci1idXR0b257Ym94LXNpemluZzpib3JkZXItYm94O2JvcmRlcjowIHNvbGlkO21hcmdpbjowO3BhZGRpbmc6MH1odG1sLDpob3N0ey13ZWJraXQtdGV4dC1zaXplLWFkanVzdDoxMDAlO3RhYi1zaXplOjQ7bGluZS1oZWlnaHQ6MS41O2ZvbnQtZmFtaWx5OnZhcigtLWRlZmF1bHQtZm9udC1mYW1pbHksdWktc2Fucy1zZXJpZixzeXN0ZW0tdWksc2Fucy1zZXJpZiwiQXBwbGUgQ29sb3IgRW1vamkiLCJTZWdvZSBVSSBFbW9qaSIsIlNlZ29lIFVJIFN5bWJvbCIsIk5vdG8gQ29sb3IgRW1vamkiKTtmb250LWZlYXR1cmUtc2V0dGluZ3M6dmFyKC0tZGVmYXVsdC1mb250LWZlYXR1cmUtc2V0dGluZ3Msbm9ybWFsKTtmb250LXZhcmlhdGlvbi1zZXR0aW5nczp2YXIoLS1kZWZhdWx0LWZvbnQtdmFyaWF0aW9uLXNldHRpbmdzLG5vcm1hbCk7LXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOnRyYW5zcGFyZW50fWhye2NvbG9yOmluaGVyaXQ7Ym9yZGVyLXRvcC13aWR0aDoxcHg7aGVpZ2h0OjB9YWJicjp3aGVyZShbdGl0bGVdKXstd2Via2l0LXRleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmUgZG90dGVkO3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmUgZG90dGVkfWgxLGgyLGgzLGg0LGg1LGg2e2ZvbnQtc2l6ZTppbmhlcml0O2ZvbnQtd2VpZ2h0OmluaGVyaXR9YXtjb2xvcjppbmhlcml0Oy13ZWJraXQtdGV4dC1kZWNvcmF0aW9uOmluaGVyaXQ7dGV4dC1kZWNvcmF0aW9uOmluaGVyaXR9YixzdHJvbmd7Zm9udC13ZWlnaHQ6Ym9sZGVyfWNvZGUsa2JkLHNhbXAscHJle2ZvbnQtZmFtaWx5OnZhcigtLWRlZmF1bHQtbW9uby1mb250LWZhbWlseSx1aS1tb25vc3BhY2UsU0ZNb25vLVJlZ3VsYXIsTWVubG8sTW9uYWNvLENvbnNvbGFzLCJMaWJlcmF0aW9uIE1vbm8iLCJDb3VyaWVyIE5ldyIsbW9ub3NwYWNlKTtmb250LWZlYXR1cmUtc2V0dGluZ3M6dmFyKC0tZGVmYXVsdC1tb25vLWZvbnQtZmVhdHVyZS1zZXR0aW5ncyxub3JtYWwpO2ZvbnQtdmFyaWF0aW9uLXNldHRpbmdzOnZhcigtLWRlZmF1bHQtbW9uby1mb250LXZhcmlhdGlvbi1zZXR0aW5ncyxub3JtYWwpO2ZvbnQtc2l6ZToxZW19c21hbGx7Zm9udC1zaXplOjgwJX1zdWIsc3Vwe3Bvc2l0aW9uOnJlbGF0aXZlO3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lO2ZvbnQtc2l6ZTo3NSU7bGluZS1oZWlnaHQ6MH1zdWJ7Ym90dG9tOi0uMjVlbX1zdXB7dG9wOi0uNWVtfXRhYmxle3RleHQtaW5kZW50OjA7Ym9yZGVyLWNvbG9yOmluaGVyaXQ7Ym9yZGVyLWNvbGxhcHNlOmNvbGxhcHNlfTotbW96LWZvY3VzcmluZ3tvdXRsaW5lOmF1dG99cHJvZ3Jlc3N7dmVydGljYWwtYWxpZ246YmFzZWxpbmV9c3VtbWFyeXtkaXNwbGF5Omxpc3QtaXRlbX1vbCx1bCxtZW51e2xpc3Qtc3R5bGU6bm9uZX1pbWcsc3ZnLHZpZGVvLGNhbnZhcyxhdWRpbyxpZnJhbWUsZW1iZWQsb2JqZWN0e2Rpc3BsYXk6YmxvY2s7dmVydGljYWwtYWxpZ246bWlkZGxlfWltZyx2aWRlb3ttYXgtd2lkdGg6MTAwJTtoZWlnaHQ6YXV0b31idXR0b24saW5wdXQsc2VsZWN0LG9wdGdyb3VwLHRleHRhcmVhe2ZvbnQ6aW5oZXJpdDtmb250LWZlYXR1cmUtc2V0dGluZ3M6aW5oZXJpdDtmb250LXZhcmlhdGlvbi1zZXR0aW5nczppbmhlcml0O2xldHRlci1zcGFjaW5nOmluaGVyaXQ7Y29sb3I6aW5oZXJpdDtvcGFjaXR5OjE7YmFja2dyb3VuZC1jb2xvcjojMDAwMDtib3JkZXItcmFkaXVzOjB9Ojotd2Via2l0LWZpbGUtdXBsb2FkLWJ1dHRvbntmb250OmluaGVyaXQ7Zm9udC1mZWF0dXJlLXNldHRpbmdzOmluaGVyaXQ7Zm9udC12YXJpYXRpb24tc2V0dGluZ3M6aW5oZXJpdDtsZXR0ZXItc3BhY2luZzppbmhlcml0O2NvbG9yOmluaGVyaXQ7b3BhY2l0eToxO2JhY2tncm91bmQtY29sb3I6IzAwMDA7Ym9yZGVyLXJhZGl1czowfTo6ZmlsZS1zZWxlY3Rvci1idXR0b257Zm9udDppbmhlcml0O2ZvbnQtZmVhdHVyZS1zZXR0aW5nczppbmhlcml0O2ZvbnQtdmFyaWF0aW9uLXNldHRpbmdzOmluaGVyaXQ7bGV0dGVyLXNwYWNpbmc6aW5oZXJpdDtjb2xvcjppbmhlcml0O29wYWNpdHk6MTtiYWNrZ3JvdW5kLWNvbG9yOiMwMDAwO2JvcmRlci1yYWRpdXM6MH06d2hlcmUoc2VsZWN0Oi13ZWJraXQtYW55KFttdWx0aXBsZV0sW3NpemVdKSkgb3B0Z3JvdXB7Zm9udC13ZWlnaHQ6Ym9sZGVyfTp3aGVyZShzZWxlY3Q6LW1vei1hbnkoW211bHRpcGxlXSxbc2l6ZV0pKSBvcHRncm91cHtmb250LXdlaWdodDpib2xkZXJ9OndoZXJlKHNlbGVjdDppcyhbbXVsdGlwbGVdLFtzaXplXSkpIG9wdGdyb3Vwe2ZvbnQtd2VpZ2h0OmJvbGRlcn06d2hlcmUoc2VsZWN0Oi13ZWJraXQtYW55KFttdWx0aXBsZV0sW3NpemVdKSkgb3B0Z3JvdXAgb3B0aW9ue3BhZGRpbmctaW5saW5lLXN0YXJ0OjIwcHh9OndoZXJlKHNlbGVjdDotbW96LWFueShbbXVsdGlwbGVdLFtzaXplXSkpIG9wdGdyb3VwIG9wdGlvbntwYWRkaW5nLWlubGluZS1zdGFydDoyMHB4fTp3aGVyZShzZWxlY3Q6aXMoW211bHRpcGxlXSxbc2l6ZV0pKSBvcHRncm91cCBvcHRpb257cGFkZGluZy1pbmxpbmUtc3RhcnQ6MjBweH06Oi13ZWJraXQtZmlsZS11cGxvYWQtYnV0dG9ue21hcmdpbi1pbmxpbmUtZW5kOjRweH06OmZpbGUtc2VsZWN0b3ItYnV0dG9ue21hcmdpbi1pbmxpbmUtZW5kOjRweH06OnBsYWNlaG9sZGVye29wYWNpdHk6MX1Ac3VwcG9ydHMgKCBub3QgKC13ZWJraXQtYXBwZWFyYW5jZTogLWFwcGxlLXBheS1idXR0b24pKSBvciAoY29udGFpbi1pbnRyaW5zaWMtc2l6ZTogMXB4KXs6OnBsYWNlaG9sZGVye2NvbG9yOmN1cnJlbnRDb2xvcn1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpezo6cGxhY2Vob2xkZXJ7Y29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLGN1cnJlbnRjb2xvciA1MCUsdHJhbnNwYXJlbnQpfX19dGV4dGFyZWF7cmVzaXplOnZlcnRpY2FsfTo6LXdlYmtpdC1zZWFyY2gtZGVjb3JhdGlvbnstd2Via2l0LWFwcGVhcmFuY2U6bm9uZX06Oi13ZWJraXQtZGF0ZS1hbmQtdGltZS12YWx1ZXt0ZXh0LWFsaWduOmluaGVyaXQ7bWluLWhlaWdodDoxbGh9Ojotd2Via2l0LWRhdGV0aW1lLWVkaXR7ZGlzcGxheTppbmxpbmUtZmxleH06Oi13ZWJraXQtZGF0ZXRpbWUtZWRpdC1maWVsZHMtd3JhcHBlcntwYWRkaW5nOjB9Ojotd2Via2l0LWRhdGV0aW1lLWVkaXR7cGFkZGluZy1ibG9jay1zdGFydDowO3BhZGRpbmctYmxvY2stZW5kOjB9Ojotd2Via2l0LWRhdGV0aW1lLWVkaXQteWVhci1maWVsZHtwYWRkaW5nLWJsb2NrLXN0YXJ0OjA7cGFkZGluZy1ibG9jay1lbmQ6MH06Oi13ZWJraXQtZGF0ZXRpbWUtZWRpdC1tb250aC1maWVsZHtwYWRkaW5nLWJsb2NrLXN0YXJ0OjA7cGFkZGluZy1ibG9jay1lbmQ6MH06Oi13ZWJraXQtZGF0ZXRpbWUtZWRpdC1kYXktZmllbGR7cGFkZGluZy1ibG9jay1zdGFydDowO3BhZGRpbmctYmxvY2stZW5kOjB9Ojotd2Via2l0LWRhdGV0aW1lLWVkaXQtaG91ci1maWVsZHtwYWRkaW5nLWJsb2NrLXN0YXJ0OjA7cGFkZGluZy1ibG9jay1lbmQ6MH06Oi13ZWJraXQtZGF0ZXRpbWUtZWRpdC1taW51dGUtZmllbGR7cGFkZGluZy1ibG9jay1zdGFydDowO3BhZGRpbmctYmxvY2stZW5kOjB9Ojotd2Via2l0LWRhdGV0aW1lLWVkaXQtc2Vjb25kLWZpZWxke3BhZGRpbmctYmxvY2stc3RhcnQ6MDtwYWRkaW5nLWJsb2NrLWVuZDowfTo6LXdlYmtpdC1kYXRldGltZS1lZGl0LW1pbGxpc2Vjb25kLWZpZWxke3BhZGRpbmctYmxvY2stc3RhcnQ6MDtwYWRkaW5nLWJsb2NrLWVuZDowfTo6LXdlYmtpdC1kYXRldGltZS1lZGl0LW1lcmlkaWVtLWZpZWxke3BhZGRpbmctYmxvY2stc3RhcnQ6MDtwYWRkaW5nLWJsb2NrLWVuZDowfTo6LXdlYmtpdC1jYWxlbmRhci1waWNrZXItaW5kaWNhdG9ye2xpbmUtaGVpZ2h0OjF9Oi1tb3otdWktaW52YWxpZHtib3gtc2hhZG93Om5vbmV9YnV0dG9ue2FwcGVhcmFuY2U6YnV0dG9ufWlucHV0OndoZXJlKFt0eXBlPWJ1dHRvbl0sW3R5cGU9cmVzZXRdLFt0eXBlPXN1Ym1pdF0pe2FwcGVhcmFuY2U6YnV0dG9ufTo6LXdlYmtpdC1maWxlLXVwbG9hZC1idXR0b257YXBwZWFyYW5jZTpidXR0b259OjpmaWxlLXNlbGVjdG9yLWJ1dHRvbnthcHBlYXJhbmNlOmJ1dHRvbn06Oi13ZWJraXQtaW5uZXItc3Bpbi1idXR0b257aGVpZ2h0OmF1dG99Ojotd2Via2l0LW91dGVyLXNwaW4tYnV0dG9ue2hlaWdodDphdXRvfVtoaWRkZW5dOndoZXJlKDpub3QoW2hpZGRlbj11bnRpbC1mb3VuZF0pKXtkaXNwbGF5Om5vbmUhaW1wb3J0YW50fX1AbGF5ZXIgdXRpbGl0aWVzey5wb2ludGVyLWV2ZW50cy1hdXRve3BvaW50ZXItZXZlbnRzOmF1dG99LnBvaW50ZXItZXZlbnRzLW5vbmV7cG9pbnRlci1ldmVudHM6bm9uZX0uY29sbGFwc2V7dmlzaWJpbGl0eTpjb2xsYXBzZX0uaW52aXNpYmxle3Zpc2liaWxpdHk6aGlkZGVufS52aXNpYmxle3Zpc2liaWxpdHk6dmlzaWJsZX0uYWJzb2x1dGV7cG9zaXRpb246YWJzb2x1dGV9LmZpeGVke3Bvc2l0aW9uOmZpeGVkfS5yZWxhdGl2ZXtwb3NpdGlvbjpyZWxhdGl2ZX0uc3RhdGlje3Bvc2l0aW9uOnN0YXRpY30uc3RpY2t5e3Bvc2l0aW9uOnN0aWNreX0uaW5zZXQtMHtpbnNldDpjYWxjKHZhcigtLXNwYWNpbmcpKjApfS50b3AtMHt0b3A6Y2FsYyh2YXIoLS1zcGFjaW5nKSowKX0udG9wLTFcLjV7dG9wOmNhbGModmFyKC0tc3BhY2luZykqMS41KX0udG9wLTFcLzJ7dG9wOjUwJX0udG9wLTJ7dG9wOmNhbGModmFyKC0tc3BhY2luZykqMil9LnRvcC0ze3RvcDpjYWxjKHZhcigtLXNwYWNpbmcpKjMpfS50b3AtXFtjYWxjXCgxMDBcJVwrNHB4XClcXXt0b3A6Y2FsYygxMDAlICsgNHB4KX0udG9wLVxbY2FsY1woMTAwXCVcKzZweFwpXF17dG9wOmNhbGMoMTAwJSArIDZweCl9LnJpZ2h0LTB7cmlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSowKX0ucmlnaHQtMVwuNXtyaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpKjEuNSl9LnJpZ2h0LTJcLjV7cmlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSoyLjUpfS5yaWdodC0ze3JpZ2h0OmNhbGModmFyKC0tc3BhY2luZykqMyl9LnJpZ2h0LTR7cmlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSo0KX0ucmlnaHQtXFs5cHhcXXtyaWdodDo5cHh9LmJvdHRvbS0we2JvdHRvbTpjYWxjKHZhcigtLXNwYWNpbmcpKjApfS5ib3R0b20tM3tib3R0b206Y2FsYyh2YXIoLS1zcGFjaW5nKSozKX0uYm90dG9tLTR7Ym90dG9tOmNhbGModmFyKC0tc3BhY2luZykqNCl9LmxlZnQtMHtsZWZ0OmNhbGModmFyKC0tc3BhY2luZykqMCl9LmxlZnQtMVwvMntsZWZ0OjUwJX0ubGVmdC0yXC41e2xlZnQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSoyLjUpfS56LTF7ei1pbmRleDoxfS56LTEwe3otaW5kZXg6MTB9LnotMjB7ei1pbmRleDoyMH0uei0zMHt6LWluZGV4OjMwfS56LTM1e3otaW5kZXg6MzV9LnotMzZ7ei1pbmRleDozNn0uei00MHt6LWluZGV4OjQwfS56LTUwe3otaW5kZXg6NTB9LnotXFsyXF17ei1pbmRleDoyfS5jb2wtc3Bhbi1mdWxse2dyaWQtY29sdW1uOjEvLTF9LmNvbnRhaW5lcnt3aWR0aDoxMDAlfUBtZWRpYSAobWluLXdpZHRoOjQwcmVtKXsuY29udGFpbmVye21heC13aWR0aDo0MHJlbX19QG1lZGlhIChtaW4td2lkdGg6NDhyZW0pey5jb250YWluZXJ7bWF4LXdpZHRoOjQ4cmVtfX1AbWVkaWEgKG1pbi13aWR0aDo2NHJlbSl7LmNvbnRhaW5lcnttYXgtd2lkdGg6NjRyZW19fUBtZWRpYSAobWluLXdpZHRoOjgwcmVtKXsuY29udGFpbmVye21heC13aWR0aDo4MHJlbX19QG1lZGlhIChtaW4td2lkdGg6OTZyZW0pey5jb250YWluZXJ7bWF4LXdpZHRoOjk2cmVtfX0ubS0we21hcmdpbjpjYWxjKHZhcigtLXNwYWNpbmcpKjApfS4tbXgtMXttYXJnaW4taW5saW5lOmNhbGModmFyKC0tc3BhY2luZykqLTEpfS5teC0wXC41e21hcmdpbi1pbmxpbmU6Y2FsYyh2YXIoLS1zcGFjaW5nKSouNSl9Li1teS0ye21hcmdpbi1ibG9jazpjYWxjKHZhcigtLXNwYWNpbmcpKi0yKX0ubXktMXttYXJnaW4tYmxvY2s6Y2FsYyh2YXIoLS1zcGFjaW5nKSoxKX0ubXQtMnttYXJnaW4tdG9wOmNhbGModmFyKC0tc3BhY2luZykqMil9Lm1yLVxbM3B4XF17bWFyZ2luLXJpZ2h0OjNweH0ubWwtMFwuNXttYXJnaW4tbGVmdDpjYWxjKHZhcigtLXNwYWNpbmcpKi41KX0uYm94LWJvcmRlcntib3gtc2l6aW5nOmJvcmRlci1ib3h9LmJsb2Nre2Rpc3BsYXk6YmxvY2t9LmNvbnRlbnRze2Rpc3BsYXk6Y29udGVudHN9LmZsZXh7ZGlzcGxheTpmbGV4fS5ncmlke2Rpc3BsYXk6Z3JpZH0uaGlkZGVue2Rpc3BsYXk6bm9uZX0uaW5saW5le2Rpc3BsYXk6aW5saW5lfS5pbmxpbmUtYmxvY2t7ZGlzcGxheTppbmxpbmUtYmxvY2t9LmlubGluZS1mbGV4e2Rpc3BsYXk6aW5saW5lLWZsZXh9LlxbYXNwZWN0LXJhdGlvXDoxNlwvMTFcXXthc3BlY3QtcmF0aW86MTYvMTF9LnNpemUtMVwuNXt3aWR0aDpjYWxjKHZhcigtLXNwYWNpbmcpKjEuNSk7aGVpZ2h0OmNhbGModmFyKC0tc3BhY2luZykqMS41KX0uaC00e2hlaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpKjQpfS5oLTV7aGVpZ2h0OmNhbGModmFyKC0tc3BhY2luZykqNSl9LmgtNVwuNXtoZWlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSo1LjUpfS5oLTd7aGVpZ2h0OmNhbGModmFyKC0tc3BhY2luZykqNyl9LmgtMTB7aGVpZ2h0OmNhbGModmFyKC0tc3BhY2luZykqMTApfS5oLVxbM3B4XF17aGVpZ2h0OjNweH0uaC1cWzE0cHhcXXtoZWlnaHQ6MTRweH0uaC1cWzIycHhcXXtoZWlnaHQ6MjJweH0uaC1cWzI2cHhcXXtoZWlnaHQ6MjZweH0uaC1cWzMwcHhcXXtoZWlnaHQ6MzBweH0uaC1mdWxse2hlaWdodDoxMDAlfS5oLXB4e2hlaWdodDoxcHh9Lmgtc2NyZWVue2hlaWdodDoxMDB2aH0ubWF4LWgtOTB7bWF4LWhlaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpKjkwKX0ubWF4LWgtXFs3MHZoXF17bWF4LWhlaWdodDo3MHZofS5tYXgtaC1cWzI2MHB4XF17bWF4LWhlaWdodDoyNjBweH0ubWF4LWgtXFszMjBweFxde21heC1oZWlnaHQ6MzIwcHh9Lm1heC1oLWZ1bGx7bWF4LWhlaWdodDoxMDAlfS5taW4taC0we21pbi1oZWlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSowKX0ubWluLWgtXFsyMnB4XF17bWluLWhlaWdodDoyMnB4fS5taW4taC1cWzM2cHhcXXttaW4taGVpZ2h0OjM2cHh9Lm1pbi1oLVxbNDRweFxde21pbi1oZWlnaHQ6NDRweH0ubWluLWgtcHh7bWluLWhlaWdodDoxcHh9LnctMXt3aWR0aDpjYWxjKHZhcigtLXNwYWNpbmcpKjEpfS53LTR7d2lkdGg6Y2FsYyh2YXIoLS1zcGFjaW5nKSo0KX0udy01e3dpZHRoOmNhbGModmFyKC0tc3BhY2luZykqNSl9LnctNVwuNXt3aWR0aDpjYWxjKHZhcigtLXNwYWNpbmcpKjUuNSl9LnctNnt3aWR0aDpjYWxjKHZhcigtLXNwYWNpbmcpKjYpfS53LTd7d2lkdGg6Y2FsYyh2YXIoLS1zcGFjaW5nKSo3KX0udy0xMHt3aWR0aDpjYWxjKHZhcigtLXNwYWNpbmcpKjEwKX0udy0yMXt3aWR0aDpjYWxjKHZhcigtLXNwYWNpbmcpKjIxKX0udy1cWzIycHhcXXt3aWR0aDoyMnB4fS53LVxbMzBweFxde3dpZHRoOjMwcHh9LnctXFs0MFwlXF17d2lkdGg6NDAlfS53LVxbY2FsY1woMTAwXCVcKzhweFwpXF17d2lkdGg6Y2FsYygxMDAlICsgOHB4KX0udy1mdWxse3dpZHRoOjEwMCV9LnctcHh7d2lkdGg6MXB4fS5tYXgtdy05MHttYXgtd2lkdGg6Y2FsYyh2YXIoLS1zcGFjaW5nKSo5MCl9Lm1heC13LTEyMHttYXgtd2lkdGg6Y2FsYyh2YXIoLS1zcGFjaW5nKSoxMjApfS5tYXgtdy1cWzMyMHB4XF17bWF4LXdpZHRoOjMyMHB4fS5tYXgtdy1cWzM2MHB4XF17bWF4LXdpZHRoOjM2MHB4fS5tYXgtdy1mdWxse21heC13aWR0aDoxMDAlfS5taW4tdy0we21pbi13aWR0aDpjYWxjKHZhcigtLXNwYWNpbmcpKjApfS5taW4tdy02NXttaW4td2lkdGg6Y2FsYyh2YXIoLS1zcGFjaW5nKSo2NSl9Lm1pbi13LVxbNTZweFxde21pbi13aWR0aDo1NnB4fS5taW4tdy1cWzIwMHB4XF17bWluLXdpZHRoOjIwMHB4fS5taW4tdy1cWzIyMHB4XF17bWluLXdpZHRoOjIyMHB4fS5taW4tdy1weHttaW4td2lkdGg6MXB4fS5mbGV4LTF7ZmxleDoxfS5zaHJpbmstMHtmbGV4LXNocmluazowfS4tdHJhbnNsYXRlLXgtMVwvMnstLXR3LXRyYW5zbGF0ZS14OmNhbGMoY2FsYygxLzIqMTAwJSkqLTEpO3RyYW5zbGF0ZTp2YXIoLS10dy10cmFuc2xhdGUteCl2YXIoLS10dy10cmFuc2xhdGUteSl9LnRyYW5zbGF0ZS14LTF7LS10dy10cmFuc2xhdGUteDpjYWxjKHZhcigtLXNwYWNpbmcpKjEpO3RyYW5zbGF0ZTp2YXIoLS10dy10cmFuc2xhdGUteCl2YXIoLS10dy10cmFuc2xhdGUteSl9Li10cmFuc2xhdGUteS0xXC8yey0tdHctdHJhbnNsYXRlLXk6Y2FsYyhjYWxjKDEvMioxMDAlKSotMSk7dHJhbnNsYXRlOnZhcigtLXR3LXRyYW5zbGF0ZS14KXZhcigtLXR3LXRyYW5zbGF0ZS15KX0ucm90YXRlLTB7cm90YXRlOm5vbmV9LnJvdGF0ZS0xODB7cm90YXRlOjE4MGRlZ30udHJhbnNmb3Jte3RyYW5zZm9ybTp2YXIoLS10dy1yb3RhdGUteCwpdmFyKC0tdHctcm90YXRlLXksKXZhcigtLXR3LXJvdGF0ZS16LCl2YXIoLS10dy1za2V3LXgsKXZhcigtLXR3LXNrZXcteSwpfS5hbmltYXRlLVxbZ3JpZC1zcGluXzBcLjhzX2xpbmVhcl9pbmZpbml0ZVxde2FuaW1hdGlvbjpncmlkLXNwaW4gLjhzIGxpbmVhciBpbmZpbml0ZX0uY3Vyc29yLWNvbC1yZXNpemV7Y3Vyc29yOmNvbC1yZXNpemV9LmN1cnNvci1kZWZhdWx0e2N1cnNvcjpkZWZhdWx0fS5jdXJzb3Itbm90LWFsbG93ZWR7Y3Vyc29yOm5vdC1hbGxvd2VkfS5jdXJzb3ItcG9pbnRlcntjdXJzb3I6cG9pbnRlcn0uY3Vyc29yLXByb2dyZXNze2N1cnNvcjpwcm9ncmVzc30uY3Vyc29yLXRleHR7Y3Vyc29yOnRleHR9LnRvdWNoLW5vbmV7dG91Y2gtYWN0aW9uOm5vbmV9LnJlc2l6ZXtyZXNpemU6Ym90aH0ubGlzdC1ub25le2xpc3Qtc3R5bGUtdHlwZTpub25lfS5hcHBlYXJhbmNlLW5vbmV7YXBwZWFyYW5jZTpub25lfS5hdXRvLXJvd3MtXFttaW5tYXhcKDMwMHB4XCxhdXRvXClcXXtncmlkLWF1dG8tcm93czptaW5tYXgoMzAwcHgsYXV0byl9LlxbZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zXDoxZnJfMWZyXzFmclxde2dyaWQtdGVtcGxhdGUtY29sdW1uczoxZnIgMWZyIDFmcn0uXFtncmlkLXRlbXBsYXRlLWNvbHVtbnNcOmF1dG9fMWZyX2F1dG9cXXtncmlkLXRlbXBsYXRlLWNvbHVtbnM6YXV0byAxZnIgYXV0b30uZ3JpZC1jb2xzLVxbcmVwZWF0XChhdXRvLWZpbGxcLG1pbm1heFwoMjAwcHhcLDFmclwpXClcXXtncmlkLXRlbXBsYXRlLWNvbHVtbnM6cmVwZWF0KGF1dG8tZmlsbCxtaW5tYXgoMjAwcHgsMWZyKSl9LmZsZXgtY29se2ZsZXgtZGlyZWN0aW9uOmNvbHVtbn0uZmxleC1yb3d7ZmxleC1kaXJlY3Rpb246cm93fS5jb250ZW50LXN0YXJ0e2FsaWduLWNvbnRlbnQ6IGZsZXgtc3RhcnR9Lml0ZW1zLWJhc2VsaW5le2FsaWduLWl0ZW1zOmJhc2VsaW5lfS5pdGVtcy1jZW50ZXJ7YWxpZ24taXRlbXM6IGNlbnRlcn0uaXRlbXMtc3RyZXRjaHthbGlnbi1pdGVtczpzdHJldGNofS5qdXN0aWZ5LWJldHdlZW57anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW59Lmp1c3RpZnktY2VudGVye2p1c3RpZnktY29udGVudDpjZW50ZXJ9Lmp1c3RpZnktZW5ke2p1c3RpZnktY29udGVudDpmbGV4LWVuZH0uZ2FwLTBcLjV7Z2FwOmNhbGModmFyKC0tc3BhY2luZykqLjUpfS5nYXAtMXtnYXA6Y2FsYyh2YXIoLS1zcGFjaW5nKSoxKX0uZ2FwLTFcLjV7Z2FwOmNhbGModmFyKC0tc3BhY2luZykqMS41KX0uZ2FwLTJ7Z2FwOmNhbGModmFyKC0tc3BhY2luZykqMil9LmdhcC0yXC41e2dhcDpjYWxjKHZhcigtLXNwYWNpbmcpKjIuNSl9LmdhcC0ze2dhcDpjYWxjKHZhcigtLXNwYWNpbmcpKjMpfS5nYXAtXFs1cHhcXXtnYXA6NXB4fS5nYXAtcHh7Z2FwOjFweH0uanVzdGlmeS1zZWxmLWVuZHtqdXN0aWZ5LXNlbGY6ZmxleC1lbmR9LnRydW5jYXRle292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO3doaXRlLXNwYWNlOm5vd3JhcH0ub3ZlcmZsb3ctaGlkZGVue292ZXJmbG93OmhpZGRlbn0ub3ZlcmZsb3cteS1hdXRve292ZXJmbG93LXk6YXV0b30ucm91bmRlZHtib3JkZXItcmFkaXVzOi4yNXJlbX0ucm91bmRlZC1cWzJweFxde2JvcmRlci1yYWRpdXM6MnB4fS5yb3VuZGVkLVxbM3B4XF17Ym9yZGVyLXJhZGl1czozcHh9LnJvdW5kZWQtXFs1cHhcXXtib3JkZXItcmFkaXVzOjVweH0ucm91bmRlZC1cWzdweFxde2JvcmRlci1yYWRpdXM6N3B4fS5yb3VuZGVkLVxbOHB4XF17Ym9yZGVyLXJhZGl1czo4cHh9LnJvdW5kZWQtXFsxMHB4XF17Ym9yZGVyLXJhZGl1czoxMHB4fS5yb3VuZGVkLVxbMTRweFxde2JvcmRlci1yYWRpdXM6MTRweH0ucm91bmRlZC1mdWxse2JvcmRlci1yYWRpdXM6My40MDI4MmUzOHB4fS5yb3VuZGVkLWxne2JvcmRlci1yYWRpdXM6dmFyKC0tcmFkaXVzLWxnKX0ucm91bmRlZC1tZHtib3JkZXItcmFkaXVzOnZhcigtLXJhZGl1cy1tZCl9LnJvdW5kZWQteHN7Ym9yZGVyLXJhZGl1czp2YXIoLS1yYWRpdXMteHMpfS5yb3VuZGVkLXQtXFsxMHB4XF17Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1czoxMHB4O2JvcmRlci10b3AtcmlnaHQtcmFkaXVzOjEwcHh9LmJvcmRlcntib3JkZXItc3R5bGU6dmFyKC0tdHctYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6MXB4fS5ib3JkZXItMntib3JkZXItc3R5bGU6dmFyKC0tdHctYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6MnB4fS5ib3JkZXItdHtib3JkZXItdG9wLXN0eWxlOnZhcigtLXR3LWJvcmRlci1zdHlsZSk7Ym9yZGVyLXRvcC13aWR0aDoxcHh9LmJvcmRlci1kYXNoZWR7LS10dy1ib3JkZXItc3R5bGU6ZGFzaGVkO2JvcmRlci1zdHlsZTpkYXNoZWR9LmJvcmRlci1ub25ley0tdHctYm9yZGVyLXN0eWxlOm5vbmU7Ym9yZGVyLXN0eWxlOm5vbmV9LlwhYm9yZGVyLVxbcmdiYVwoMTBcLDEzMlwsMjU1XCwwXC42XClcXXtib3JkZXItY29sb3I6IzBhODRmZjk5IWltcG9ydGFudH0uYm9yZGVyLVxbXCMyYTJhMmFcXXtib3JkZXItY29sb3I6IzJhMmEyYX0uYm9yZGVyLVxbXCMyMjJcXXtib3JkZXItY29sb3I6IzIyMn0uYm9yZGVyLVxbXCMzMzNcXXtib3JkZXItY29sb3I6IzMzM30uYm9yZGVyLVxbXCM0NDRcXXtib3JkZXItY29sb3I6IzQ0NH0uYm9yZGVyLWFjY2VudHtib3JkZXItY29sb3I6dmFyKC0tY29sb3ItYWNjZW50KX0uYm9yZGVyLWRhbmdlclwvMjB7Ym9yZGVyLWNvbG9yOiNmODcxNzEzM31Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5ib3JkZXItZGFuZ2VyXC8yMHtib3JkZXItY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLWRhbmdlcikyMCUsdHJhbnNwYXJlbnQpfX0uYm9yZGVyLXdhcm5pbmdcLzI1e2JvcmRlci1jb2xvcjojZmJiZjI0NDB9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuYm9yZGVyLXdhcm5pbmdcLzI1e2JvcmRlci1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2FybmluZykyNSUsdHJhbnNwYXJlbnQpfX0uYm9yZGVyLXdoaXRle2JvcmRlci1jb2xvcjp2YXIoLS1jb2xvci13aGl0ZSl9LmJvcmRlci13aGl0ZVwvOHtib3JkZXItY29sb3I6I2ZmZmZmZjE0fUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmJvcmRlci13aGl0ZVwvOHtib3JkZXItY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTglLHRyYW5zcGFyZW50KX19LmJvcmRlci13aGl0ZVwvMTB7Ym9yZGVyLWNvbG9yOiNmZmZmZmYxYX1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5ib3JkZXItd2hpdGVcLzEwe2JvcmRlci1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpMTAlLHRyYW5zcGFyZW50KX19LmJvcmRlci13aGl0ZVwvMTJ7Ym9yZGVyLWNvbG9yOiNmZmZmZmYxZn1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5ib3JkZXItd2hpdGVcLzEye2JvcmRlci1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpMTIlLHRyYW5zcGFyZW50KX19LmJvcmRlci13aGl0ZVwvMTV7Ym9yZGVyLWNvbG9yOiNmZmZmZmYyNn1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5ib3JkZXItd2hpdGVcLzE1e2JvcmRlci1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpMTUlLHRyYW5zcGFyZW50KX19LmJvcmRlci13aGl0ZVwvXFswXC4wNlxde2JvcmRlci1jb2xvcjojZmZmZmZmMGZ9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuYm9yZGVyLXdoaXRlXC9cWzBcLjA2XF17Ym9yZGVyLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk2JSx0cmFuc3BhcmVudCl9fS5cIWJnLVxbcmdiYVwoMTBcLDEzMlwsMjU1XCwwXC4wOFwpXF17YmFja2dyb3VuZC1jb2xvcjojMGE4NGZmMTQhaW1wb3J0YW50fS5cIWJnLXdoaXRlXC9cWzBcLjEyXF17YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmMWYhaW1wb3J0YW50fUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LlwhYmctd2hpdGVcL1xbMFwuMTJcXXtiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSkxMiUsdHJhbnNwYXJlbnQpIWltcG9ydGFudH19LmJnLVxbXCMwYTBhMGNcXXtiYWNrZ3JvdW5kLWNvbG9yOiMwYTBhMGN9LmJnLVxbXCMxYTFhMWFcXXtiYWNrZ3JvdW5kLWNvbG9yOiMxYTFhMWF9LmJnLVxbXCMxYzFjMWNcXXtiYWNrZ3JvdW5kLWNvbG9yOiMxYzFjMWN9LmJnLVxbXCMxZDJhMWRcXXtiYWNrZ3JvdW5kLWNvbG9yOiMxZDJhMWR9LmJnLVxbXCM2ZTZlNzJcXXtiYWNrZ3JvdW5kLWNvbG9yOiM2ZTZlNzJ9LmJnLVxbXCM5YTlhOWVcXXtiYWNrZ3JvdW5kLWNvbG9yOiM5YTlhOWV9LmJnLVxbXCMxMTFcXXtiYWNrZ3JvdW5kLWNvbG9yOiMxMTF9LmJnLVxbXCMyMjJcXXtiYWNrZ3JvdW5kLWNvbG9yOiMyMjJ9LmJnLVxbXCMxMDEwMTBcXXtiYWNrZ3JvdW5kLWNvbG9yOiMxMDEwMTB9LmJnLVxbcmdiYVwoMTBcLDEzMlwsMjU1XCwwXC4yMlwpXF17YmFja2dyb3VuZC1jb2xvcjojMGE4NGZmMzh9LmJnLVxbcmdiYVwoMjBcLDIwXCwyMFwsMFwuODVcKVxde2JhY2tncm91bmQtY29sb3I6IzE0MTQxNGQ5fS5iZy1cW3JnYmFcKDIwXCwyMlwsMjhcLDBcLjc4XClcXXtiYWNrZ3JvdW5kLWNvbG9yOiMxNDE2MWNjN30uYmctXFtyZ2JhXCg5OVwsMTAyXCwyNDFcLDBcLjEyXClcXXtiYWNrZ3JvdW5kLWNvbG9yOiM2MzY2ZjExZn0uYmctYWNjZW50e2JhY2tncm91bmQtY29sb3I6dmFyKC0tY29sb3ItYWNjZW50KX0uYmctYmxhY2t7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jb2xvci1ibGFjayl9LmJnLWRhbmdlci1zb2Z0e2JhY2tncm91bmQtY29sb3I6dmFyKC0tY29sb3ItZGFuZ2VyLXNvZnQpfS5iZy1kYW5nZXJcLzEwe2JhY2tncm91bmQtY29sb3I6I2Y4NzE3MTFhfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmJnLWRhbmdlclwvMTB7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3ItZGFuZ2VyKTEwJSx0cmFuc3BhcmVudCl9fS5iZy1wYWdle2JhY2tncm91bmQtY29sb3I6dmFyKC0tY29sb3ItcGFnZSl9LmJnLXBhbmVse2JhY2tncm91bmQtY29sb3I6dmFyKC0tY29sb3ItcGFuZWwpfS5iZy1wYW5lbC1iZ3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNvbG9yLXBhbmVsLWJnKX0uYmctcGFuZWwtZGVlcHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNvbG9yLXBhbmVsLWRlZXApfS5iZy1wYW5lbC1vdmVybGF5e2JhY2tncm91bmQtY29sb3I6dmFyKC0tY29sb3ItcGFuZWwtb3ZlcmxheSl9LmJnLXN1Y2Nlc3MtZW1lcmFsZHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNvbG9yLXN1Y2Nlc3MtZW1lcmFsZCl9LmJnLXRyYW5zcGFyZW50e2JhY2tncm91bmQtY29sb3I6IzAwMDB9LmJnLXdhcm5pbmdcLzEwe2JhY2tncm91bmQtY29sb3I6I2ZiYmYyNDFhfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmJnLXdhcm5pbmdcLzEwe2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdhcm5pbmcpMTAlLHRyYW5zcGFyZW50KX19LmJnLXdoaXRle2JhY2tncm91bmQtY29sb3I6dmFyKC0tY29sb3Itd2hpdGUpfS5iZy13aGl0ZVwvOHtiYWNrZ3JvdW5kLWNvbG9yOiNmZmZmZmYxNH1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5iZy13aGl0ZVwvOHtiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk4JSx0cmFuc3BhcmVudCl9fS5iZy13aGl0ZVwvXFswXC4wM1xde2JhY2tncm91bmQtY29sb3I6I2ZmZmZmZjA4fUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmJnLXdoaXRlXC9cWzBcLjAzXF17YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpMyUsdHJhbnNwYXJlbnQpfX0uYmctd2hpdGVcL1xbMFwuMDRcXXtiYWNrZ3JvdW5kLWNvbG9yOiNmZmZmZmYwYX1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5iZy13aGl0ZVwvXFswXC4wNFxde2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTQlLHRyYW5zcGFyZW50KX19LmJnLXdoaXRlXC9cWzBcLjA2XF17YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmMGZ9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuYmctd2hpdGVcL1xbMFwuMDZcXXtiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk2JSx0cmFuc3BhcmVudCl9fS5iZy13aGl0ZVwvXFswXC4xMlxde2JhY2tncm91bmQtY29sb3I6I2ZmZmZmZjFmfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmJnLXdoaXRlXC9cWzBcLjEyXF17YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpMTIlLHRyYW5zcGFyZW50KX19LmJnLXdoaXRlXC9cWzBcLjE2XF17YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmMjl9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuYmctd2hpdGVcL1xbMFwuMTZcXXtiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSkxNiUsdHJhbnNwYXJlbnQpfX0uYmctXFtsaW5lYXItZ3JhZGllbnRcKHRvX2JvdHRvbVwsXCMxYzFjMWVfMFwlXCxyZ2JhXCgyOFwsMjhcLDMwXCwwXClfMTAwXCVcKVxde2JhY2tncm91bmQtaW1hZ2U6bGluZWFyLWdyYWRpZW50KCMxYzFjMWUgMCUsIzFjMWMxZTAwIDEwMCUpfS5iZy1cW2xpbmVhci1ncmFkaWVudFwodG9fcmlnaHRcLHJnYmFcKDI4XCwyOFwsMzBcLDBcKV8wXCVcLFwjMWMxYzFlXzU1XCVcKVxde2JhY2tncm91bmQtaW1hZ2U6bGluZWFyLWdyYWRpZW50KDkwZGVnLCMxYzFjMWUwMCAwJSwjMWMxYzFlIDU1JSl9LmJnLVxbbGluZWFyLWdyYWRpZW50XCh0b190b3BcLFwjMWMxYzFlXzBcJVwscmdiYVwoMjhcLDI4XCwzMFwsMFwpXzEwMFwlXClcXXtiYWNrZ3JvdW5kLWltYWdlOmxpbmVhci1ncmFkaWVudCgjMWMxYzFlMDAgMCUsIzFjMWMxZSAxMDAlKX0ub2JqZWN0LWNvbnRhaW57b2JqZWN0LWZpdDpjb250YWlufS5vYmplY3QtY292ZXJ7b2JqZWN0LWZpdDpjb3Zlcn0ucC0we3BhZGRpbmc6Y2FsYyh2YXIoLS1zcGFjaW5nKSowKX0ucC0wXC41e3BhZGRpbmc6Y2FsYyh2YXIoLS1zcGFjaW5nKSouNSl9LnAtMXtwYWRkaW5nOmNhbGModmFyKC0tc3BhY2luZykqMSl9LnAtMntwYWRkaW5nOmNhbGModmFyKC0tc3BhY2luZykqMil9LnAtM3twYWRkaW5nOmNhbGModmFyKC0tc3BhY2luZykqMyl9LnAtM1wuNXtwYWRkaW5nOmNhbGModmFyKC0tc3BhY2luZykqMy41KX0ucC00e3BhZGRpbmc6Y2FsYyh2YXIoLS1zcGFjaW5nKSo0KX0ucC02e3BhZGRpbmc6Y2FsYyh2YXIoLS1zcGFjaW5nKSo2KX0ucHgtMFwuNXtwYWRkaW5nLWlubGluZTpjYWxjKHZhcigtLXNwYWNpbmcpKi41KX0ucHgtMXtwYWRkaW5nLWlubGluZTpjYWxjKHZhcigtLXNwYWNpbmcpKjEpfS5weC0xXC41e3BhZGRpbmctaW5saW5lOmNhbGModmFyKC0tc3BhY2luZykqMS41KX0ucHgtMntwYWRkaW5nLWlubGluZTpjYWxjKHZhcigtLXNwYWNpbmcpKjIpfS5weC0yXC41e3BhZGRpbmctaW5saW5lOmNhbGModmFyKC0tc3BhY2luZykqMi41KX0ucHgtM3twYWRkaW5nLWlubGluZTpjYWxjKHZhcigtLXNwYWNpbmcpKjMpfS5weC0zXC41e3BhZGRpbmctaW5saW5lOmNhbGModmFyKC0tc3BhY2luZykqMy41KX0ucHgtXFs3cHhcXXtwYWRkaW5nLWlubGluZS1zdGFydDo3cHg7cGFkZGluZy1pbmxpbmUtZW5kOjdweH0ucHktMFwuNXtwYWRkaW5nLWJsb2NrOmNhbGModmFyKC0tc3BhY2luZykqLjUpfS5weS0xe3BhZGRpbmctYmxvY2s6Y2FsYyh2YXIoLS1zcGFjaW5nKSoxKX0ucHktMVwuNXtwYWRkaW5nLWJsb2NrOmNhbGModmFyKC0tc3BhY2luZykqMS41KX0ucHktMntwYWRkaW5nLWJsb2NrOmNhbGModmFyKC0tc3BhY2luZykqMil9LnB5LTJcLjV7cGFkZGluZy1ibG9jazpjYWxjKHZhcigtLXNwYWNpbmcpKjIuNSl9LnB5LTZ7cGFkZGluZy1ibG9jazpjYWxjKHZhcigtLXNwYWNpbmcpKjYpfS5weS1cWzJweFxde3BhZGRpbmctYmxvY2stc3RhcnQ6MnB4O3BhZGRpbmctYmxvY2stZW5kOjJweH0ucHktXFszcHhcXXtwYWRkaW5nLWJsb2NrLXN0YXJ0OjNweDtwYWRkaW5nLWJsb2NrLWVuZDozcHh9LnB5LVxbNXB4XF17cGFkZGluZy1ibG9jay1zdGFydDo1cHg7cGFkZGluZy1ibG9jay1lbmQ6NXB4fS5weS1cWzdweFxde3BhZGRpbmctYmxvY2stc3RhcnQ6N3B4O3BhZGRpbmctYmxvY2stZW5kOjdweH0ucHktcHh7cGFkZGluZy1ibG9jay1zdGFydDoxcHg7cGFkZGluZy1ibG9jay1lbmQ6MXB4fS5wdC0xe3BhZGRpbmctdG9wOmNhbGModmFyKC0tc3BhY2luZykqMSl9LnB0LTFcLjV7cGFkZGluZy10b3A6Y2FsYyh2YXIoLS1zcGFjaW5nKSoxLjUpfS5wdC0ye3BhZGRpbmctdG9wOmNhbGModmFyKC0tc3BhY2luZykqMil9LnByLTJ7cGFkZGluZy1yaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpKjIpfS5wci1cWzI2cHhcXXtwYWRkaW5nLXJpZ2h0OjI2cHh9LnBiLTBcLjV7cGFkZGluZy1ib3R0b206Y2FsYyh2YXIoLS1zcGFjaW5nKSouNSl9LnBiLVxbMnB4XF17cGFkZGluZy1ib3R0b206MnB4fS5wbC0ye3BhZGRpbmctbGVmdDpjYWxjKHZhcigtLXNwYWNpbmcpKjIpfS5wbC0yXC41e3BhZGRpbmctbGVmdDpjYWxjKHZhcigtLXNwYWNpbmcpKjIuNSl9LnBsLTN7cGFkZGluZy1sZWZ0OmNhbGModmFyKC0tc3BhY2luZykqMyl9LnBsLTZ7cGFkZGluZy1sZWZ0OmNhbGModmFyKC0tc3BhY2luZykqNil9LnBsLTd7cGFkZGluZy1sZWZ0OmNhbGModmFyKC0tc3BhY2luZykqNyl9LnBsLVxbMjZweFxde3BhZGRpbmctbGVmdDoyNnB4fS50ZXh0LWNlbnRlcnt0ZXh0LWFsaWduOmNlbnRlcn0udGV4dC1sZWZ0e3RleHQtYWxpZ246bGVmdH0uXFtmb250LWZhbWlseVw6LWFwcGxlLXN5c3RlbVwsc3lzdGVtLXVpXCxzYW5zLXNlcmlmXF17Zm9udC1mYW1pbHk6LWFwcGxlLXN5c3RlbSxzeXN0ZW0tdWksQmxpbmtNYWNTeXN0ZW1Gb250LFNlZ29lIFVJLFJvYm90byxOb3RvIFNhbnMsVWJ1bnR1LENhbnRhcmVsbCxIZWx2ZXRpY2EgTmV1ZSxzYW5zLXNlcmlmfS5mb250LVxbaW5oZXJpdFxde2ZvbnQtZmFtaWx5OmluaGVyaXR9LmZvbnQtbW9ub3tmb250LWZhbWlseTp2YXIoLS1mb250LW1vbm8pfS5mb250LXN5c3RlbXtmb250LWZhbWlseTp2YXIoLS1mb250LXN5c3RlbSl9LnRleHQtXFs5cHhcXXtmb250LXNpemU6OXB4fS50ZXh0LVxbMTBweFxde2ZvbnQtc2l6ZToxMHB4fS50ZXh0LVxbMTFcLjVweFxde2ZvbnQtc2l6ZToxMS41cHh9LnRleHQtXFsxMXB4XF17Zm9udC1zaXplOjExcHh9LnRleHQtXFsxMnB4XF17Zm9udC1zaXplOjEycHh9LnRleHQtXFsxM3B4XF17Zm9udC1zaXplOjEzcHh9LnRleHQtXFsxNHB4XF17Zm9udC1zaXplOjE0cHh9LnRleHQtXFsxOHB4XF17Zm9udC1zaXplOjE4cHh9LnRleHQtXFsyOHB4XF17Zm9udC1zaXplOjI4cHh9LmxlYWRpbmctXFsxXC41XF17LS10dy1sZWFkaW5nOjEuNTtsaW5lLWhlaWdodDoxLjV9LmxlYWRpbmctXFsxXC4zNVxdey0tdHctbGVhZGluZzoxLjM1O2xpbmUtaGVpZ2h0OjEuMzV9LmxlYWRpbmctbm9uZXstLXR3LWxlYWRpbmc6MTtsaW5lLWhlaWdodDoxfS5sZWFkaW5nLXRpZ2h0ey0tdHctbGVhZGluZzp2YXIoLS1sZWFkaW5nLXRpZ2h0KTtsaW5lLWhlaWdodDp2YXIoLS1sZWFkaW5nLXRpZ2h0KX0uZm9udC1tZWRpdW17LS10dy1mb250LXdlaWdodDp2YXIoLS1mb250LXdlaWdodC1tZWRpdW0pO2ZvbnQtd2VpZ2h0OnZhcigtLWZvbnQtd2VpZ2h0LW1lZGl1bSl9LmZvbnQtbm9ybWFsey0tdHctZm9udC13ZWlnaHQ6dmFyKC0tZm9udC13ZWlnaHQtbm9ybWFsKTtmb250LXdlaWdodDp2YXIoLS1mb250LXdlaWdodC1ub3JtYWwpfS5mb250LXNlbWlib2xkey0tdHctZm9udC13ZWlnaHQ6dmFyKC0tZm9udC13ZWlnaHQtc2VtaWJvbGQpO2ZvbnQtd2VpZ2h0OnZhcigtLWZvbnQtd2VpZ2h0LXNlbWlib2xkKX0udHJhY2tpbmctXFswXC4xZW1cXXstLXR3LXRyYWNraW5nOi4xZW07bGV0dGVyLXNwYWNpbmc6LjFlbX0udHJhY2tpbmctXFswXC4wMmVtXF17LS10dy10cmFja2luZzouMDJlbTtsZXR0ZXItc3BhY2luZzouMDJlbX0udHJhY2tpbmctXFswXC4wNGVtXF17LS10dy10cmFja2luZzouMDRlbTtsZXR0ZXItc3BhY2luZzouMDRlbX0udHJhY2tpbmctXFswXC4wNmVtXF17LS10dy10cmFja2luZzouMDZlbTtsZXR0ZXItc3BhY2luZzouMDZlbX0udHJhY2tpbmctXFswXC4wOGVtXF17LS10dy10cmFja2luZzouMDhlbTtsZXR0ZXItc3BhY2luZzouMDhlbX0udHJhY2tpbmctd2lkZXstLXR3LXRyYWNraW5nOnZhcigtLXRyYWNraW5nLXdpZGUpO2xldHRlci1zcGFjaW5nOnZhcigtLXRyYWNraW5nLXdpZGUpfS5icmVhay13b3Jkc3tvdmVyZmxvdy13cmFwOmJyZWFrLXdvcmR9LnRleHQtZWxsaXBzaXN7dGV4dC1vdmVyZmxvdzplbGxpcHNpc30ud2hpdGVzcGFjZS1ub3dyYXB7d2hpdGUtc3BhY2U6bm93cmFwfS5cIXRleHQtd2hpdGV7Y29sb3I6dmFyKC0tY29sb3Itd2hpdGUpIWltcG9ydGFudH0udGV4dC1cW1wjMGEwYTBjXF17Y29sb3I6IzBhMGEwY30udGV4dC1cW1wjOGU4ZTkzXF17Y29sb3I6IzhlOGU5M30udGV4dC1cW1wjMDYyMDE4XF17Y29sb3I6IzA2MjAxOH0udGV4dC1hY2NlbnR7Y29sb3I6dmFyKC0tY29sb3ItYWNjZW50KX0udGV4dC1kYW5nZXJ7Y29sb3I6dmFyKC0tY29sb3ItZGFuZ2VyKX0udGV4dC1kYW5nZXItc29mdHtjb2xvcjp2YXIoLS1jb2xvci1kYW5nZXItc29mdCl9LnRleHQtaW5oZXJpdHtjb2xvcjppbmhlcml0fS50ZXh0LXN1Y2Nlc3N7Y29sb3I6dmFyKC0tY29sb3Itc3VjY2Vzcyl9LnRleHQtd2FybmluZy1zb2Z0e2NvbG9yOnZhcigtLWNvbG9yLXdhcm5pbmctc29mdCl9LnRleHQtd2hpdGV7Y29sb3I6dmFyKC0tY29sb3Itd2hpdGUpfS50ZXh0LXdoaXRlXC80MHtjb2xvcjojZmZmNn1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey50ZXh0LXdoaXRlXC80MHtjb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpNDAlLHRyYW5zcGFyZW50KX19LnRleHQtd2hpdGVcLzQ1e2NvbG9yOiNmZmZmZmY3M31Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey50ZXh0LXdoaXRlXC80NXtjb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpNDUlLHRyYW5zcGFyZW50KX19LnRleHQtd2hpdGVcLzUwe2NvbG9yOiNmZmZmZmY4MH1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey50ZXh0LXdoaXRlXC81MHtjb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpNTAlLHRyYW5zcGFyZW50KX19LnRleHQtd2hpdGVcLzU1e2NvbG9yOiNmZmZmZmY4Y31Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey50ZXh0LXdoaXRlXC81NXtjb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpNTUlLHRyYW5zcGFyZW50KX19LnRleHQtd2hpdGVcLzYwe2NvbG9yOiNmZmY5fUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LnRleHQtd2hpdGVcLzYwe2NvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk2MCUsdHJhbnNwYXJlbnQpfX0udGV4dC13aGl0ZVwvNjV7Y29sb3I6I2ZmZmZmZmE2fUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LnRleHQtd2hpdGVcLzY1e2NvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk2NSUsdHJhbnNwYXJlbnQpfX0udGV4dC13aGl0ZVwvNzB7Y29sb3I6I2ZmZmZmZmIzfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LnRleHQtd2hpdGVcLzcwe2NvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk3MCUsdHJhbnNwYXJlbnQpfX0udGV4dC13aGl0ZVwvODB7Y29sb3I6I2ZmZmN9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsudGV4dC13aGl0ZVwvODB7Y29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTgwJSx0cmFuc3BhcmVudCl9fS50ZXh0LXdoaXRlXC84NXtjb2xvcjojZmZmZmZmZDl9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsudGV4dC13aGl0ZVwvODV7Y29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTg1JSx0cmFuc3BhcmVudCl9fS50ZXh0LXdoaXRlXC85MHtjb2xvcjojZmZmZmZmZTZ9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsudGV4dC13aGl0ZVwvOTB7Y29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTkwJSx0cmFuc3BhcmVudCl9fS50ZXh0LXdoaXRlXC85NXtjb2xvcjojZmZmZmZmZjJ9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsudGV4dC13aGl0ZVwvOTV7Y29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTk1JSx0cmFuc3BhcmVudCl9fS50ZXh0LXdoaXRlXC9cWzBcLjQyXF17Y29sb3I6I2ZmZmZmZjZifUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LnRleHQtd2hpdGVcL1xbMFwuNDJcXXtjb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpNDIlLHRyYW5zcGFyZW50KX19LnRleHQtd2hpdGVcL1xbMFwuNDhcXXtjb2xvcjojZmZmZmZmN2F9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsudGV4dC13aGl0ZVwvXFswXC40OFxde2NvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk0OCUsdHJhbnNwYXJlbnQpfX0udGV4dC13aGl0ZVwvXFswXC41OFxde2NvbG9yOiNmZmZmZmY5NH1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey50ZXh0LXdoaXRlXC9cWzBcLjU4XF17Y29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTU4LjAlLHRyYW5zcGFyZW50KX19LnRleHQtd2hpdGVcL1xbMFwuOTJcXXtjb2xvcjojZmZmZmZmZWJ9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsudGV4dC13aGl0ZVwvXFswXC45Mlxde2NvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk5MiUsdHJhbnNwYXJlbnQpfX0udXBwZXJjYXNle3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZX0uaXRhbGlje2ZvbnQtc3R5bGU6aXRhbGljfS5cW2ZvbnQtdmFyaWFudC1udW1lcmljXDp0YWJ1bGFyLW51bXNcXXtmb250LXZhcmlhbnQtbnVtZXJpYzp0YWJ1bGFyLW51bXN9Lm5vLXVuZGVybGluZXt0ZXh0LWRlY29yYXRpb24tbGluZTpub25lfS5vcGFjaXR5LTB7b3BhY2l0eTowfS5vcGFjaXR5LTQwe29wYWNpdHk6LjR9Lm9wYWNpdHktNTB7b3BhY2l0eTouNX0ub3BhY2l0eS02MHtvcGFjaXR5Oi42fS5vcGFjaXR5LTEwMHtvcGFjaXR5OjF9LnNoYWRvd3stLXR3LXNoYWRvdzowIDFweCAzcHggMCB2YXIoLS10dy1zaGFkb3ctY29sb3IsIzAwMDAwMDFhKSwwIDFweCAycHggLTFweCB2YXIoLS10dy1zaGFkb3ctY29sb3IsIzAwMDAwMDFhKTtib3gtc2hhZG93OnZhcigtLXR3LWluc2V0LXNoYWRvdyksdmFyKC0tdHctaW5zZXQtcmluZy1zaGFkb3cpLHZhcigtLXR3LXJpbmctb2Zmc2V0LXNoYWRvdyksdmFyKC0tdHctcmluZy1zaGFkb3cpLHZhcigtLXR3LXNoYWRvdyl9LnNoYWRvdy1cWzBfMXB4XzJweF9yZ2JhXCgwXCwwXCwwXCwwXC4xOFwpXCwwXzZweF8xOHB4X3JnYmFcKDBcLDBcLDBcLDBcLjI4XClcLGluc2V0XzBfMF8wXzFweF9yZ2JhXCgyNTVcLDI1NVwsMjU1XCwwXC4wNlwpXF17LS10dy1zaGFkb3c6MCAxcHggMnB4IHZhcigtLXR3LXNoYWRvdy1jb2xvciwjMDAwMDAwMmUpLDAgNnB4IDE4cHggdmFyKC0tdHctc2hhZG93LWNvbG9yLCMwMDAwMDA0NyksaW5zZXQgMCAwIDAgMXB4IHZhcigtLXR3LXNoYWRvdy1jb2xvciwjZmZmZmZmMGYpO2JveC1zaGFkb3c6dmFyKC0tdHctaW5zZXQtc2hhZG93KSx2YXIoLS10dy1pbnNldC1yaW5nLXNoYWRvdyksdmFyKC0tdHctcmluZy1vZmZzZXQtc2hhZG93KSx2YXIoLS10dy1yaW5nLXNoYWRvdyksdmFyKC0tdHctc2hhZG93KX0uc2hhZG93LVxbMF80cHhfMTJweF9yZ2JhXCgwXCwwXCwwXCwwXC40XClcXXstLXR3LXNoYWRvdzowIDRweCAxMnB4IHZhcigtLXR3LXNoYWRvdy1jb2xvciwjMDAwNik7Ym94LXNoYWRvdzp2YXIoLS10dy1pbnNldC1zaGFkb3cpLHZhcigtLXR3LWluc2V0LXJpbmctc2hhZG93KSx2YXIoLS10dy1yaW5nLW9mZnNldC1zaGFkb3cpLHZhcigtLXR3LXJpbmctc2hhZG93KSx2YXIoLS10dy1zaGFkb3cpfS5zaGFkb3ctXFswXzhweF8yNHB4X3JnYmFcKDBcLDBcLDBcLDBcLjRcKVxdey0tdHctc2hhZG93OjAgOHB4IDI0cHggdmFyKC0tdHctc2hhZG93LWNvbG9yLCMwMDA2KTtib3gtc2hhZG93OnZhcigtLXR3LWluc2V0LXNoYWRvdyksdmFyKC0tdHctaW5zZXQtcmluZy1zaGFkb3cpLHZhcigtLXR3LXJpbmctb2Zmc2V0LXNoYWRvdyksdmFyKC0tdHctcmluZy1zaGFkb3cpLHZhcigtLXR3LXNoYWRvdyl9LnNoYWRvdy1cWzBfOHB4XzI0cHhfcmdiYVwoMFwsMFwsMFwsMFwuNVwpXF17LS10dy1zaGFkb3c6MCA4cHggMjRweCB2YXIoLS10dy1zaGFkb3ctY29sb3IsIzAwMDAwMDgwKTtib3gtc2hhZG93OnZhcigtLXR3LWluc2V0LXNoYWRvdyksdmFyKC0tdHctaW5zZXQtcmluZy1zaGFkb3cpLHZhcigtLXR3LXJpbmctb2Zmc2V0LXNoYWRvdyksdmFyKC0tdHctcmluZy1zaGFkb3cpLHZhcigtLXR3LXNoYWRvdyl9LnNoYWRvdy1cWzBfMTJweF80MHB4X3JnYmFcKDBcLDBcLDBcLDBcLjU1XClcXXstLXR3LXNoYWRvdzowIDEycHggNDBweCB2YXIoLS10dy1zaGFkb3ctY29sb3IsIzAwMDAwMDhjKTtib3gtc2hhZG93OnZhcigtLXR3LWluc2V0LXNoYWRvdyksdmFyKC0tdHctaW5zZXQtcmluZy1zaGFkb3cpLHZhcigtLXR3LXJpbmctb2Zmc2V0LXNoYWRvdyksdmFyKC0tdHctcmluZy1zaGFkb3cpLHZhcigtLXR3LXNoYWRvdyl9LnJpbmd7LS10dy1yaW5nLXNoYWRvdzp2YXIoLS10dy1yaW5nLWluc2V0LCkwIDAgMCBjYWxjKDFweCArIHZhcigtLXR3LXJpbmctb2Zmc2V0LXdpZHRoKSl2YXIoLS10dy1yaW5nLWNvbG9yLGN1cnJlbnRjb2xvcik7Ym94LXNoYWRvdzp2YXIoLS10dy1pbnNldC1zaGFkb3cpLHZhcigtLXR3LWluc2V0LXJpbmctc2hhZG93KSx2YXIoLS10dy1yaW5nLW9mZnNldC1zaGFkb3cpLHZhcigtLXR3LXJpbmctc2hhZG93KSx2YXIoLS10dy1zaGFkb3cpfS5cW2JveC1zaGFkb3dcOjBfMF82cHhfcmdiYVwoNzRcLDIyMlwsMTI4XCwwXC43XClcXXtib3gtc2hhZG93OjAgMCA2cHggIzRhZGU4MGIzfS5cW2JveC1zaGFkb3dcOjBfMF82cHhfcmdiYVwoMjQ4XCwxMTNcLDExM1wsMFwuNTVcKVxde2JveC1zaGFkb3c6MCAwIDZweCAjZjg3MTcxOGN9Lm91dGxpbmV7b3V0bGluZS1zdHlsZTp2YXIoLS10dy1vdXRsaW5lLXN0eWxlKTtvdXRsaW5lLXdpZHRoOjFweH0uYmx1cnstLXR3LWJsdXI6Ymx1cig4cHgpO2ZpbHRlcjp2YXIoLS10dy1ibHVyLCl2YXIoLS10dy1icmlnaHRuZXNzLCl2YXIoLS10dy1jb250cmFzdCwpdmFyKC0tdHctZ3JheXNjYWxlLCl2YXIoLS10dy1odWUtcm90YXRlLCl2YXIoLS10dy1pbnZlcnQsKXZhcigtLXR3LXNhdHVyYXRlLCl2YXIoLS10dy1zZXBpYSwpdmFyKC0tdHctZHJvcC1zaGFkb3csKX0uZmlsdGVye2ZpbHRlcjp2YXIoLS10dy1ibHVyLCl2YXIoLS10dy1icmlnaHRuZXNzLCl2YXIoLS10dy1jb250cmFzdCwpdmFyKC0tdHctZ3JheXNjYWxlLCl2YXIoLS10dy1odWUtcm90YXRlLCl2YXIoLS10dy1pbnZlcnQsKXZhcigtLXR3LXNhdHVyYXRlLCl2YXIoLS10dy1zZXBpYSwpdmFyKC0tdHctZHJvcC1zaGFkb3csKX0uYmFja2Ryb3AtYmx1ci1cWzJweFxdey0tdHctYmFja2Ryb3AtYmx1cjpibHVyKDJweCk7LXdlYmtpdC1iYWNrZHJvcC1maWx0ZXI6dmFyKC0tdHctYmFja2Ryb3AtYmx1ciwpdmFyKC0tdHctYmFja2Ryb3AtYnJpZ2h0bmVzcywpdmFyKC0tdHctYmFja2Ryb3AtY29udHJhc3QsKXZhcigtLXR3LWJhY2tkcm9wLWdyYXlzY2FsZSwpdmFyKC0tdHctYmFja2Ryb3AtaHVlLXJvdGF0ZSwpdmFyKC0tdHctYmFja2Ryb3AtaW52ZXJ0LCl2YXIoLS10dy1iYWNrZHJvcC1vcGFjaXR5LCl2YXIoLS10dy1iYWNrZHJvcC1zYXR1cmF0ZSwpdmFyKC0tdHctYmFja2Ryb3Atc2VwaWEsKTtiYWNrZHJvcC1maWx0ZXI6dmFyKC0tdHctYmFja2Ryb3AtYmx1ciwpdmFyKC0tdHctYmFja2Ryb3AtYnJpZ2h0bmVzcywpdmFyKC0tdHctYmFja2Ryb3AtY29udHJhc3QsKXZhcigtLXR3LWJhY2tkcm9wLWdyYXlzY2FsZSwpdmFyKC0tdHctYmFja2Ryb3AtaHVlLXJvdGF0ZSwpdmFyKC0tdHctYmFja2Ryb3AtaW52ZXJ0LCl2YXIoLS10dy1iYWNrZHJvcC1vcGFjaXR5LCl2YXIoLS10dy1iYWNrZHJvcC1zYXR1cmF0ZSwpdmFyKC0tdHctYmFja2Ryb3Atc2VwaWEsKX0uYmFja2Ryb3AtYmx1ci1cWzEycHhcXXstLXR3LWJhY2tkcm9wLWJsdXI6Ymx1cigxMnB4KTstd2Via2l0LWJhY2tkcm9wLWZpbHRlcjp2YXIoLS10dy1iYWNrZHJvcC1ibHVyLCl2YXIoLS10dy1iYWNrZHJvcC1icmlnaHRuZXNzLCl2YXIoLS10dy1iYWNrZHJvcC1jb250cmFzdCwpdmFyKC0tdHctYmFja2Ryb3AtZ3JheXNjYWxlLCl2YXIoLS10dy1iYWNrZHJvcC1odWUtcm90YXRlLCl2YXIoLS10dy1iYWNrZHJvcC1pbnZlcnQsKXZhcigtLXR3LWJhY2tkcm9wLW9wYWNpdHksKXZhcigtLXR3LWJhY2tkcm9wLXNhdHVyYXRlLCl2YXIoLS10dy1iYWNrZHJvcC1zZXBpYSwpO2JhY2tkcm9wLWZpbHRlcjp2YXIoLS10dy1iYWNrZHJvcC1ibHVyLCl2YXIoLS10dy1iYWNrZHJvcC1icmlnaHRuZXNzLCl2YXIoLS10dy1iYWNrZHJvcC1jb250cmFzdCwpdmFyKC0tdHctYmFja2Ryb3AtZ3JheXNjYWxlLCl2YXIoLS10dy1iYWNrZHJvcC1odWUtcm90YXRlLCl2YXIoLS10dy1iYWNrZHJvcC1pbnZlcnQsKXZhcigtLXR3LWJhY2tkcm9wLW9wYWNpdHksKXZhcigtLXR3LWJhY2tkcm9wLXNhdHVyYXRlLCl2YXIoLS10dy1iYWNrZHJvcC1zZXBpYSwpfS5iYWNrZHJvcC1ibHVyLVxbMThweFxdey0tdHctYmFja2Ryb3AtYmx1cjpibHVyKDE4cHgpOy13ZWJraXQtYmFja2Ryb3AtZmlsdGVyOnZhcigtLXR3LWJhY2tkcm9wLWJsdXIsKXZhcigtLXR3LWJhY2tkcm9wLWJyaWdodG5lc3MsKXZhcigtLXR3LWJhY2tkcm9wLWNvbnRyYXN0LCl2YXIoLS10dy1iYWNrZHJvcC1ncmF5c2NhbGUsKXZhcigtLXR3LWJhY2tkcm9wLWh1ZS1yb3RhdGUsKXZhcigtLXR3LWJhY2tkcm9wLWludmVydCwpdmFyKC0tdHctYmFja2Ryb3Atb3BhY2l0eSwpdmFyKC0tdHctYmFja2Ryb3Atc2F0dXJhdGUsKXZhcigtLXR3LWJhY2tkcm9wLXNlcGlhLCk7YmFja2Ryb3AtZmlsdGVyOnZhcigtLXR3LWJhY2tkcm9wLWJsdXIsKXZhcigtLXR3LWJhY2tkcm9wLWJyaWdodG5lc3MsKXZhcigtLXR3LWJhY2tkcm9wLWNvbnRyYXN0LCl2YXIoLS10dy1iYWNrZHJvcC1ncmF5c2NhbGUsKXZhcigtLXR3LWJhY2tkcm9wLWh1ZS1yb3RhdGUsKXZhcigtLXR3LWJhY2tkcm9wLWludmVydCwpdmFyKC0tdHctYmFja2Ryb3Atb3BhY2l0eSwpdmFyKC0tdHctYmFja2Ryb3Atc2F0dXJhdGUsKXZhcigtLXR3LWJhY2tkcm9wLXNlcGlhLCl9LmJhY2tkcm9wLWJsdXItbWR7LS10dy1iYWNrZHJvcC1ibHVyOmJsdXIodmFyKC0tYmx1ci1tZCkpOy13ZWJraXQtYmFja2Ryb3AtZmlsdGVyOnZhcigtLXR3LWJhY2tkcm9wLWJsdXIsKXZhcigtLXR3LWJhY2tkcm9wLWJyaWdodG5lc3MsKXZhcigtLXR3LWJhY2tkcm9wLWNvbnRyYXN0LCl2YXIoLS10dy1iYWNrZHJvcC1ncmF5c2NhbGUsKXZhcigtLXR3LWJhY2tkcm9wLWh1ZS1yb3RhdGUsKXZhcigtLXR3LWJhY2tkcm9wLWludmVydCwpdmFyKC0tdHctYmFja2Ryb3Atb3BhY2l0eSwpdmFyKC0tdHctYmFja2Ryb3Atc2F0dXJhdGUsKXZhcigtLXR3LWJhY2tkcm9wLXNlcGlhLCk7YmFja2Ryb3AtZmlsdGVyOnZhcigtLXR3LWJhY2tkcm9wLWJsdXIsKXZhcigtLXR3LWJhY2tkcm9wLWJyaWdodG5lc3MsKXZhcigtLXR3LWJhY2tkcm9wLWNvbnRyYXN0LCl2YXIoLS10dy1iYWNrZHJvcC1ncmF5c2NhbGUsKXZhcigtLXR3LWJhY2tkcm9wLWh1ZS1yb3RhdGUsKXZhcigtLXR3LWJhY2tkcm9wLWludmVydCwpdmFyKC0tdHctYmFja2Ryb3Atb3BhY2l0eSwpdmFyKC0tdHctYmFja2Ryb3Atc2F0dXJhdGUsKXZhcigtLXR3LWJhY2tkcm9wLXNlcGlhLCl9LmJhY2tkcm9wLXNhdHVyYXRlLTE1MHstLXR3LWJhY2tkcm9wLXNhdHVyYXRlOnNhdHVyYXRlKDE1MCUpOy13ZWJraXQtYmFja2Ryb3AtZmlsdGVyOnZhcigtLXR3LWJhY2tkcm9wLWJsdXIsKXZhcigtLXR3LWJhY2tkcm9wLWJyaWdodG5lc3MsKXZhcigtLXR3LWJhY2tkcm9wLWNvbnRyYXN0LCl2YXIoLS10dy1iYWNrZHJvcC1ncmF5c2NhbGUsKXZhcigtLXR3LWJhY2tkcm9wLWh1ZS1yb3RhdGUsKXZhcigtLXR3LWJhY2tkcm9wLWludmVydCwpdmFyKC0tdHctYmFja2Ryb3Atb3BhY2l0eSwpdmFyKC0tdHctYmFja2Ryb3Atc2F0dXJhdGUsKXZhcigtLXR3LWJhY2tkcm9wLXNlcGlhLCk7YmFja2Ryb3AtZmlsdGVyOnZhcigtLXR3LWJhY2tkcm9wLWJsdXIsKXZhcigtLXR3LWJhY2tkcm9wLWJyaWdodG5lc3MsKXZhcigtLXR3LWJhY2tkcm9wLWNvbnRyYXN0LCl2YXIoLS10dy1iYWNrZHJvcC1ncmF5c2NhbGUsKXZhcigtLXR3LWJhY2tkcm9wLWh1ZS1yb3RhdGUsKXZhcigtLXR3LWJhY2tkcm9wLWludmVydCwpdmFyKC0tdHctYmFja2Ryb3Atb3BhY2l0eSwpdmFyKC0tdHctYmFja2Ryb3Atc2F0dXJhdGUsKXZhcigtLXR3LWJhY2tkcm9wLXNlcGlhLCl9LnRyYW5zaXRpb257dHJhbnNpdGlvbi1wcm9wZXJ0eTpjb2xvcixiYWNrZ3JvdW5kLWNvbG9yLGJvcmRlci1jb2xvcixvdXRsaW5lLWNvbG9yLHRleHQtZGVjb3JhdGlvbi1jb2xvcixmaWxsLHN0cm9rZSwtLXR3LWdyYWRpZW50LWZyb20sLS10dy1ncmFkaWVudC12aWEsLS10dy1ncmFkaWVudC10byxvcGFjaXR5LGJveC1zaGFkb3csdHJhbnNmb3JtLHRyYW5zbGF0ZSxzY2FsZSxyb3RhdGUsZmlsdGVyLC13ZWJraXQtYmFja2Ryb3AtZmlsdGVyLGJhY2tkcm9wLWZpbHRlcixkaXNwbGF5LGNvbnRlbnQtdmlzaWJpbGl0eSxvdmVybGF5LHBvaW50ZXItZXZlbnRzO3RyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uOnZhcigtLXR3LWVhc2UsdmFyKC0tZGVmYXVsdC10cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbikpO3RyYW5zaXRpb24tZHVyYXRpb246dmFyKC0tdHctZHVyYXRpb24sdmFyKC0tZGVmYXVsdC10cmFuc2l0aW9uLWR1cmF0aW9uKSl9LnRyYW5zaXRpb24tXFtib3JkZXItY29sb3JcLGJhY2tncm91bmRcXXt0cmFuc2l0aW9uLXByb3BlcnR5OmJvcmRlci1jb2xvcixiYWNrZ3JvdW5kO3RyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uOnZhcigtLXR3LWVhc2UsdmFyKC0tZGVmYXVsdC10cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbikpO3RyYW5zaXRpb24tZHVyYXRpb246dmFyKC0tdHctZHVyYXRpb24sdmFyKC0tZGVmYXVsdC10cmFuc2l0aW9uLWR1cmF0aW9uKSl9LnRyYW5zaXRpb24tXFt3aWR0aFwsYmFja2dyb3VuZFxde3RyYW5zaXRpb24tcHJvcGVydHk6d2lkdGgsYmFja2dyb3VuZDt0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbjp2YXIoLS10dy1lYXNlLHZhcigtLWRlZmF1bHQtdHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb24pKTt0cmFuc2l0aW9uLWR1cmF0aW9uOnZhcigtLXR3LWR1cmF0aW9uLHZhcigtLWRlZmF1bHQtdHJhbnNpdGlvbi1kdXJhdGlvbikpfS50cmFuc2l0aW9uLWNvbG9yc3t0cmFuc2l0aW9uLXByb3BlcnR5OmNvbG9yLGJhY2tncm91bmQtY29sb3IsYm9yZGVyLWNvbG9yLG91dGxpbmUtY29sb3IsdGV4dC1kZWNvcmF0aW9uLWNvbG9yLGZpbGwsc3Ryb2tlLC0tdHctZ3JhZGllbnQtZnJvbSwtLXR3LWdyYWRpZW50LXZpYSwtLXR3LWdyYWRpZW50LXRvO3RyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uOnZhcigtLXR3LWVhc2UsdmFyKC0tZGVmYXVsdC10cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbikpO3RyYW5zaXRpb24tZHVyYXRpb246dmFyKC0tdHctZHVyYXRpb24sdmFyKC0tZGVmYXVsdC10cmFuc2l0aW9uLWR1cmF0aW9uKSl9LnRyYW5zaXRpb24tb3BhY2l0eXt0cmFuc2l0aW9uLXByb3BlcnR5Om9wYWNpdHk7dHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb246dmFyKC0tdHctZWFzZSx2YXIoLS1kZWZhdWx0LXRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uKSk7dHJhbnNpdGlvbi1kdXJhdGlvbjp2YXIoLS10dy1kdXJhdGlvbix2YXIoLS1kZWZhdWx0LXRyYW5zaXRpb24tZHVyYXRpb24pKX0uZHVyYXRpb24tMTUwey0tdHctZHVyYXRpb246LjE1czt0cmFuc2l0aW9uLWR1cmF0aW9uOi4xNXN9LmR1cmF0aW9uLTIwMHstLXR3LWR1cmF0aW9uOi4yczt0cmFuc2l0aW9uLWR1cmF0aW9uOi4yc30uZHVyYXRpb24tMzAwey0tdHctZHVyYXRpb246LjNzO3RyYW5zaXRpb24tZHVyYXRpb246LjNzfS5lYXNlLW91dHstLXR3LWVhc2U6dmFyKC0tZWFzZS1vdXQpO3RyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uOnZhcigtLWVhc2Utb3V0KX0uc2VsZWN0LW5vbmV7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmV9LnNlbGVjdC10ZXh0ey13ZWJraXQtdXNlci1zZWxlY3Q6dGV4dDt1c2VyLXNlbGVjdDp0ZXh0fS5cWy13ZWJraXQtYXBwZWFyYW5jZVw6bm9uZVxdey13ZWJraXQtYXBwZWFyYW5jZTpub25lfS5cWy13ZWJraXQtYmFja2Ryb3AtZmlsdGVyXDpibHVyXCgxMnB4XClcXXstd2Via2l0LWJhY2tkcm9wLWZpbHRlcjpibHVyKDEycHgpfS5cW3Njcm9sbGJhci13aWR0aFw6dGhpblxde3Njcm9sbGJhci13aWR0aDp0aGlufS5cW3RyYW5zaXRpb25cOmJhY2tncm91bmRfMFwuMnNcLGJveC1zaGFkb3dfMFwuMnNcXXt0cmFuc2l0aW9uOmJhY2tncm91bmQgLjJzLGJveC1zaGFkb3cgLjJzfS5cW3RyYW5zaXRpb25cOmJhY2tncm91bmRfMFwuM3NcXXt0cmFuc2l0aW9uOmJhY2tncm91bmQgLjNzfS5cW3RyYW5zaXRpb25cOmJhY2tncm91bmRfMFwuMTJzXCxib3JkZXItY29sb3JfMFwuMTJzXF17dHJhbnNpdGlvbjpiYWNrZ3JvdW5kIC4xMnMsYm9yZGVyLWNvbG9yIC4xMnN9LlxbdHJhbnNpdGlvblw6YmFja2dyb3VuZF8wXC4xMnNcLGNvbG9yXzBcLjEyc1xde3RyYW5zaXRpb246YmFja2dyb3VuZCAuMTJzLGNvbG9yIC4xMnN9LlxbdHJhbnNpdGlvblw6YmFja2dyb3VuZF8wXC4xNXNfZWFzZVwsY29sb3JfMFwuMTVzX2Vhc2VcXXt0cmFuc2l0aW9uOmJhY2tncm91bmQgLjE1cyxjb2xvciAuMTVzfS5cW3RyYW5zaXRpb25cOmJvcmRlci1jb2xvcl8xMjBtc1xde3RyYW5zaXRpb246Ym9yZGVyLWNvbG9yIC4xMnN9LlxbdHJhbnNpdGlvblw6Y29sb3JfMFwuM3NcXXt0cmFuc2l0aW9uOmNvbG9yIC4zc30uXFt0cmFuc2l0aW9uXDpvcGFjaXR5XzBcLjE1c19lYXNlXCxiYWNrZ3JvdW5kXzBcLjE1c19lYXNlXF17dHJhbnNpdGlvbjpvcGFjaXR5IC4xNXMsYmFja2dyb3VuZCAuMTVzfS5cW3RyYW5zaXRpb25cOm9wYWNpdHlfMFwuMTVzX2Vhc2VcLHRyYW5zZm9ybV8wXC4xNXNfZWFzZVxde3RyYW5zaXRpb246b3BhY2l0eSAuMTVzLHRyYW5zZm9ybSAuMTVzfS5cW3RyYW5zaXRpb25cOm9wYWNpdHlfMFwuMThzX2Vhc2VcXXt0cmFuc2l0aW9uOm9wYWNpdHkgLjE4c30uXFt0cmFuc2l0aW9uXDp0cmFuc2Zvcm1fMFwuMTVzXCxjb2xvcl8wXC4xMnNcXXt0cmFuc2l0aW9uOnRyYW5zZm9ybSAuMTVzLGNvbG9yIC4xMnN9LlxbdHJhbnNpdGlvblw6dHJhbnNmb3JtXzBcLjI1c19lYXNlXCxvcGFjaXR5XzBcLjJzX2Vhc2VcXXt0cmFuc2l0aW9uOnRyYW5zZm9ybSAuMjVzLG9wYWNpdHkgLjJzfS5cW3RyYW5zaXRpb25cOndpZHRoXzEyMG1zX2xpbmVhclxde3RyYW5zaXRpb246d2lkdGggLjEycyBsaW5lYXJ9QG1lZGlhIChob3Zlcjpob3Zlcil7Lmdyb3VwLWhvdmVyXDpwb2ludGVyLWV2ZW50cy1hdXRvOmlzKDp3aGVyZSguZ3JvdXApOmhvdmVyICope3BvaW50ZXItZXZlbnRzOmF1dG99fUBtZWRpYSAoaG92ZXI6aG92ZXIpey5ncm91cC1ob3Zlclw6dHJhbnNsYXRlLXgtMDppcyg6d2hlcmUoLmdyb3VwKTpob3ZlciAqKXstLXR3LXRyYW5zbGF0ZS14OmNhbGModmFyKC0tc3BhY2luZykqMCk7dHJhbnNsYXRlOnZhcigtLXR3LXRyYW5zbGF0ZS14KXZhcigtLXR3LXRyYW5zbGF0ZS15KX19QG1lZGlhIChob3Zlcjpob3Zlcil7Lmdyb3VwLWhvdmVyXDpvcGFjaXR5LTEwMDppcyg6d2hlcmUoLmdyb3VwKTpob3ZlciAqKXtvcGFjaXR5OjF9fUBtZWRpYSAoaG92ZXI6aG92ZXIpey5ob3Zlclw6Ymctd2hpdGVcLzg6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmMTR9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuaG92ZXJcOmJnLXdoaXRlXC84OmhvdmVye2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTglLHRyYW5zcGFyZW50KX19fUBtZWRpYSAoaG92ZXI6aG92ZXIpey5ob3Zlclw6Ymctd2hpdGVcL1xbMFwuMDZcXTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiNmZmZmZmYwZn1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5ob3Zlclw6Ymctd2hpdGVcL1xbMFwuMDZcXTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk2JSx0cmFuc3BhcmVudCl9fX1AbWVkaWEgKGhvdmVyOmhvdmVyKXsuaG92ZXJcOnRleHQtd2hpdGU6aG92ZXJ7Y29sb3I6dmFyKC0tY29sb3Itd2hpdGUpfX1AbWVkaWEgKGhvdmVyOmhvdmVyKXsuaG92ZXJcOnRleHQtd2hpdGVcLzkwOmhvdmVye2NvbG9yOiNmZmZmZmZlNn1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5ob3Zlclw6dGV4dC13aGl0ZVwvOTA6aG92ZXJ7Y29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTkwJSx0cmFuc3BhcmVudCl9fX0uZGlzYWJsZWRcOmN1cnNvci1ub3QtYWxsb3dlZDpkaXNhYmxlZHtjdXJzb3I6bm90LWFsbG93ZWR9LmRpc2FibGVkXDpvcGFjaXR5LTUwOmRpc2FibGVke29wYWNpdHk6LjV9fUBrZXlmcmFtZXMgZ3JpZC1zcGlue3Rve3RyYW5zZm9ybTpyb3RhdGUoMzYwZGVnKX19QGtleWZyYW1lcyBzZXJ2ZS1zaW0tdG9hc3QtaW5kZXRlcm1pbmF0ZXswJXt0cmFuc2Zvcm06dHJhbnNsYXRlKC0xMDAlKX10b3t0cmFuc2Zvcm06dHJhbnNsYXRlKDI1MCUpfX0uc2VydmUtc2ltLXRvYXN0LWluZGV0ZXJtaW5hdGV7YW5pbWF0aW9uOnNlcnZlLXNpbS10b2FzdC1pbmRldGVybWluYXRlIDEuMXMgZWFzZS1pbi1vdXQgaW5maW5pdGV9LmdyaWQtc2h1dGRvd24tYnRue29wYWNpdHk6MDt0cmFuc2l0aW9uOm9wYWNpdHkgLjEycyxiYWNrZ3JvdW5kIC4xMnMsY29sb3IgLjEyc30uZ3JpZC10aWxlOmhvdmVyIC5ncmlkLXNodXRkb3duLWJ0bntvcGFjaXR5OjF9LmdyaWQtc2h1dGRvd24tYnRuOmhvdmVyOm5vdCg6ZGlzYWJsZWQpe2NvbG9yOiNmZmY7YmFja2dyb3VuZDojNWExZDFkO2JvcmRlci1jb2xvcjojYTMzfS5ncmlkLXRpbGU6aG92ZXJ7Ym9yZGVyLWNvbG9yOiM1NTUhaW1wb3J0YW50fUBwcm9wZXJ0eSAtLXR3LXRyYW5zbGF0ZS14e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2U7aW5pdGlhbC12YWx1ZTowfUBwcm9wZXJ0eSAtLXR3LXRyYW5zbGF0ZS15e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2U7aW5pdGlhbC12YWx1ZTowfUBwcm9wZXJ0eSAtLXR3LXRyYW5zbGF0ZS16e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2U7aW5pdGlhbC12YWx1ZTowfUBwcm9wZXJ0eSAtLXR3LXJvdGF0ZS14e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctcm90YXRlLXl7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1yb3RhdGUtentzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LXNrZXcteHtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LXNrZXcteXtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LWJvcmRlci1zdHlsZXtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlO2luaXRpYWwtdmFsdWU6c29saWR9QHByb3BlcnR5IC0tdHctbGVhZGluZ3tzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LWZvbnQtd2VpZ2h0e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctdHJhY2tpbmd7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1zaGFkb3d7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZTtpbml0aWFsLXZhbHVlOjAgMCAjMDAwMH1AcHJvcGVydHkgLS10dy1zaGFkb3ctY29sb3J7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1zaGFkb3ctYWxwaGF7c3ludGF4OiI8cGVyY2VudGFnZT4iO2luaGVyaXRzOmZhbHNlO2luaXRpYWwtdmFsdWU6MTAwJX1AcHJvcGVydHkgLS10dy1pbnNldC1zaGFkb3d7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZTtpbml0aWFsLXZhbHVlOjAgMCAjMDAwMH1AcHJvcGVydHkgLS10dy1pbnNldC1zaGFkb3ctY29sb3J7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1pbnNldC1zaGFkb3ctYWxwaGF7c3ludGF4OiI8cGVyY2VudGFnZT4iO2luaGVyaXRzOmZhbHNlO2luaXRpYWwtdmFsdWU6MTAwJX1AcHJvcGVydHkgLS10dy1yaW5nLWNvbG9ye3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctcmluZy1zaGFkb3d7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZTtpbml0aWFsLXZhbHVlOjAgMCAjMDAwMH1AcHJvcGVydHkgLS10dy1pbnNldC1yaW5nLWNvbG9ye3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctaW5zZXQtcmluZy1zaGFkb3d7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZTtpbml0aWFsLXZhbHVlOjAgMCAjMDAwMH1AcHJvcGVydHkgLS10dy1yaW5nLWluc2V0e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctcmluZy1vZmZzZXQtd2lkdGh7c3ludGF4OiI8bGVuZ3RoPiI7aW5oZXJpdHM6ZmFsc2U7aW5pdGlhbC12YWx1ZTowfUBwcm9wZXJ0eSAtLXR3LXJpbmctb2Zmc2V0LWNvbG9ye3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2U7aW5pdGlhbC12YWx1ZTojZmZmfUBwcm9wZXJ0eSAtLXR3LXJpbmctb2Zmc2V0LXNoYWRvd3tzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlO2luaXRpYWwtdmFsdWU6MCAwICMwMDAwfUBwcm9wZXJ0eSAtLXR3LW91dGxpbmUtc3R5bGV7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZTtpbml0aWFsLXZhbHVlOnNvbGlkfUBwcm9wZXJ0eSAtLXR3LWJsdXJ7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1icmlnaHRuZXNze3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctY29udHJhc3R7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1ncmF5c2NhbGV7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1odWUtcm90YXRle3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctaW52ZXJ0e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctb3BhY2l0eXtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LXNhdHVyYXRle3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctc2VwaWF7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1kcm9wLXNoYWRvd3tzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LWRyb3Atc2hhZG93LWNvbG9ye3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctZHJvcC1zaGFkb3ctYWxwaGF7c3ludGF4OiI8cGVyY2VudGFnZT4iO2luaGVyaXRzOmZhbHNlO2luaXRpYWwtdmFsdWU6MTAwJX1AcHJvcGVydHkgLS10dy1kcm9wLXNoYWRvdy1zaXple3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctYmFja2Ryb3AtYmx1cntzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LWJhY2tkcm9wLWJyaWdodG5lc3N7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1iYWNrZHJvcC1jb250cmFzdHtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LWJhY2tkcm9wLWdyYXlzY2FsZXtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LWJhY2tkcm9wLWh1ZS1yb3RhdGV7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1iYWNrZHJvcC1pbnZlcnR7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1iYWNrZHJvcC1vcGFjaXR5e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctYmFja2Ryb3Atc2F0dXJhdGV7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1iYWNrZHJvcC1zZXBpYXtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LWR1cmF0aW9ue3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctZWFzZXtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBsYXllciBwcm9wZXJ0aWVze0BzdXBwb3J0cyAoKC13ZWJraXQtaHlwaGVuczogbm9uZSkgYW5kICggbm90IChtYXJnaW4tdHJpbTogaW5saW5lKSkpIG9yICgoLW1vei1vcmllbnQ6IGlubGluZSkgYW5kICggbm90IChjb2xvcjpyZ2IoZnJvbSByZWQgciBnIGIpKSkpeyosOmJlZm9yZSw6YWZ0ZXIsOjpiYWNrZHJvcHstLXR3LXRyYW5zbGF0ZS14OjA7LS10dy10cmFuc2xhdGUteTowOy0tdHctdHJhbnNsYXRlLXo6MDstLXR3LXJvdGF0ZS14OmluaXRpYWw7LS10dy1yb3RhdGUteTppbml0aWFsOy0tdHctcm90YXRlLXo6aW5pdGlhbDstLXR3LXNrZXcteDppbml0aWFsOy0tdHctc2tldy15OmluaXRpYWw7LS10dy1ib3JkZXItc3R5bGU6c29saWQ7LS10dy1sZWFkaW5nOmluaXRpYWw7LS10dy1mb250LXdlaWdodDppbml0aWFsOy0tdHctdHJhY2tpbmc6aW5pdGlhbDstLXR3LXNoYWRvdzowIDAgIzAwMDA7LS10dy1zaGFkb3ctY29sb3I6aW5pdGlhbDstLXR3LXNoYWRvdy1hbHBoYToxMDAlOy0tdHctaW5zZXQtc2hhZG93OjAgMCAjMDAwMDstLXR3LWluc2V0LXNoYWRvdy1jb2xvcjppbml0aWFsOy0tdHctaW5zZXQtc2hhZG93LWFscGhhOjEwMCU7LS10dy1yaW5nLWNvbG9yOmluaXRpYWw7LS10dy1yaW5nLXNoYWRvdzowIDAgIzAwMDA7LS10dy1pbnNldC1yaW5nLWNvbG9yOmluaXRpYWw7LS10dy1pbnNldC1yaW5nLXNoYWRvdzowIDAgIzAwMDA7LS10dy1yaW5nLWluc2V0OmluaXRpYWw7LS10dy1yaW5nLW9mZnNldC13aWR0aDowcHg7LS10dy1yaW5nLW9mZnNldC1jb2xvcjojZmZmOy0tdHctcmluZy1vZmZzZXQtc2hhZG93OjAgMCAjMDAwMDstLXR3LW91dGxpbmUtc3R5bGU6c29saWQ7LS10dy1ibHVyOmluaXRpYWw7LS10dy1icmlnaHRuZXNzOmluaXRpYWw7LS10dy1jb250cmFzdDppbml0aWFsOy0tdHctZ3JheXNjYWxlOmluaXRpYWw7LS10dy1odWUtcm90YXRlOmluaXRpYWw7LS10dy1pbnZlcnQ6aW5pdGlhbDstLXR3LW9wYWNpdHk6aW5pdGlhbDstLXR3LXNhdHVyYXRlOmluaXRpYWw7LS10dy1zZXBpYTppbml0aWFsOy0tdHctZHJvcC1zaGFkb3c6aW5pdGlhbDstLXR3LWRyb3Atc2hhZG93LWNvbG9yOmluaXRpYWw7LS10dy1kcm9wLXNoYWRvdy1hbHBoYToxMDAlOy0tdHctZHJvcC1zaGFkb3ctc2l6ZTppbml0aWFsOy0tdHctYmFja2Ryb3AtYmx1cjppbml0aWFsOy0tdHctYmFja2Ryb3AtYnJpZ2h0bmVzczppbml0aWFsOy0tdHctYmFja2Ryb3AtY29udHJhc3Q6aW5pdGlhbDstLXR3LWJhY2tkcm9wLWdyYXlzY2FsZTppbml0aWFsOy0tdHctYmFja2Ryb3AtaHVlLXJvdGF0ZTppbml0aWFsOy0tdHctYmFja2Ryb3AtaW52ZXJ0OmluaXRpYWw7LS10dy1iYWNrZHJvcC1vcGFjaXR5OmluaXRpYWw7LS10dy1iYWNrZHJvcC1zYXR1cmF0ZTppbml0aWFsOy0tdHctYmFja2Ryb3Atc2VwaWE6aW5pdGlhbDstLXR3LWR1cmF0aW9uOmluaXRpYWw7LS10dy1lYXNlOmluaXRpYWx9fX0KPC9zdHlsZT4KPC9oZWFkPjxib2R5Pgo8ZGl2IGlkPSJyb290Ij48L2Rpdj4KPCEtLV9fU0lNX1BSRVZJRVdfQ09ORklHX18tLT4KPHNjcmlwdCB0eXBlPSJtb2R1bGUiPnZhciBhMCx1LEI1LHM4LGUxLEc1LF81LGs1LEgyLGwwLEUwLEQ1LHcyLEEyLE8yLFU1LG8wPXt9LGQwPVtdLHQ4PS9hY2l0fGV4KD86c3xnfG58cHwkKXxycGh8Z3JpZHxvd3N8bW5jfG50d3xpbmVbY2hdfHpvb3xeb3JkfGl0ZXJhL2ksSTA9QXJyYXkuaXNBcnJheTtmdW5jdGlvbiBjMShDLCQpe2Zvcih2YXIgSyBpbiAkKUNbS109JFtLXTtyZXR1cm4gQ31mdW5jdGlvbiBiMihDKXtDJiZDLnBhcmVudE5vZGUmJkMucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChDKX1mdW5jdGlvbiB1MShDLCQsSyl7dmFyIFgsUSxOLFo9e307Zm9yKE4gaW4gJClOPT0ia2V5Ij9YPSRbTl06Tj09InJlZiI/UT0kW05dOlpbTl09JFtOXTtpZihhcmd1bWVudHMubGVuZ3RoPjImJihaLmNoaWxkcmVuPWFyZ3VtZW50cy5sZW5ndGg+Mz9hMC5jYWxsKGFyZ3VtZW50cywyKTpLKSx0eXBlb2YgQz09ImZ1bmN0aW9uIiYmQy5kZWZhdWx0UHJvcHMhPW51bGwpZm9yKE4gaW4gQy5kZWZhdWx0UHJvcHMpWltOXT09PXZvaWQgMCYmKFpbTl09Qy5kZWZhdWx0UHJvcHNbTl0pO3JldHVybiB1MChDLFosWCxRLG51bGwpfWZ1bmN0aW9uIHUwKEMsJCxLLFgsUSl7dmFyIE49e3R5cGU6Qyxwcm9wczokLGtleTpLLHJlZjpYLF9fazpudWxsLF9fOm51bGwsX19iOjAsX19lOm51bGwsX19jOm51bGwsY29uc3RydWN0b3I6dm9pZCAwLF9fdjpRPT1udWxsPysrQjU6USxfX2k6LTEsX191OjB9O3JldHVybiBRPT1udWxsJiZ1LnZub2RlIT1udWxsJiZ1LnZub2RlKE4pLE59ZnVuY3Rpb24gcTEoQyl7cmV0dXJuIEMuY2hpbGRyZW59ZnVuY3Rpb24gVDEoQywkKXt0aGlzLnByb3BzPUMsdGhpcy5jb250ZXh0PSR9ZnVuY3Rpb24gQjAoQywkKXtpZigkPT1udWxsKXJldHVybiBDLl9fP0IwKEMuX18sQy5fX2krMSk6bnVsbDtmb3IodmFyIEs7JDxDLl9fay5sZW5ndGg7JCsrKWlmKChLPUMuX19rWyRdKSE9bnVsbCYmSy5fX2UhPW51bGwpcmV0dXJuIEsuX19lO3JldHVybiB0eXBlb2YgQy50eXBlPT0iZnVuY3Rpb24iP0IwKEMpOm51bGx9ZnVuY3Rpb24gZTgoQyl7aWYoQy5fX1AmJkMuX19kKXt2YXIgJD1DLl9fdixLPSQuX19lLFg9W10sUT1bXSxOPWMxKHt9LCQpO04uX192PSQuX192KzEsdS52bm9kZSYmdS52bm9kZShOKSxQMihDLl9fUCxOLCQsQy5fX24sQy5fX1AubmFtZXNwYWNlVVJJLDMyJiQuX191P1tLXTpudWxsLFgsSz09bnVsbD9CMCgkKTpLLCEhKDMyJiQuX191KSxRKSxOLl9fdj0kLl9fdixOLl9fLl9fa1tOLl9faV09TixBNShYLE4sUSksJC5fX2U9JC5fXz1udWxsLE4uX19lIT1LJiZGNShOKX19ZnVuY3Rpb24gRjUoQyl7aWYoKEM9Qy5fXykhPW51bGwmJkMuX19jIT1udWxsKXJldHVybiBDLl9fZT1DLl9fYy5iYXNlPW51bGwsQy5fX2suc29tZShmdW5jdGlvbigkKXtpZigkIT1udWxsJiYkLl9fZSE9bnVsbClyZXR1cm4gQy5fX2U9Qy5fX2MuYmFzZT0kLl9fZX0pLEY1KEMpfWZ1bmN0aW9uIFQyKEMpeyghQy5fX2QmJihDLl9fZD0hMCkmJmUxLnB1c2goQykmJiFjMC5fX3IrK3x8RzUhPXUuZGVib3VuY2VSZW5kZXJpbmcpJiYoKEc1PXUuZGVib3VuY2VSZW5kZXJpbmcpfHxfNSkoYzApfWZ1bmN0aW9uIGMwKCl7dHJ5e2Zvcih2YXIgQywkPTE7ZTEubGVuZ3RoOyllMS5sZW5ndGg+JCYmZTEuc29ydChrNSksQz1lMS5zaGlmdCgpLCQ9ZTEubGVuZ3RoLGU4KEMpfWZpbmFsbHl7ZTEubGVuZ3RoPWMwLl9fcj0wfX1mdW5jdGlvbiB6NShDLCQsSyxYLFEsTixaLHEsRyxZLFYpe3ZhciBMLGssRCxULEIsXyxVLE09WCYmWC5fX2t8fGQwLEU9JC5sZW5ndGg7Zm9yKEc9QzkoSywkLE0sRyxFKSxMPTA7TDxFO0wrKykoRD1LLl9fa1tMXSkhPW51bGwmJihrPUQuX19pIT0tMSYmTVtELl9faV18fG8wLEQuX19pPUwsXz1QMihDLEQsayxRLE4sWixxLEcsWSxWKSxUPUQuX19lLEQucmVmJiZrLnJlZiE9RC5yZWYmJihrLnJlZiYmVzIoay5yZWYsbnVsbCxEKSxWLnB1c2goRC5yZWYsRC5fX2N8fFQsRCkpLEI9PW51bGwmJlQhPW51bGwmJihCPVQpLChVPSEhKDQmRC5fX3UpKXx8ay5fX2s9PT1ELl9faz8oRz1INShELEcsQyxVKSxVJiZrLl9fZSYmKGsuX19lPW51bGwpKTp0eXBlb2YgRC50eXBlPT0iZnVuY3Rpb24iJiZfIT09dm9pZCAwP0c9XzpUJiYoRz1ULm5leHRTaWJsaW5nKSxELl9fdSY9LTcpO3JldHVybiBLLl9fZT1CLEd9ZnVuY3Rpb24gQzkoQywkLEssWCxRKXt2YXIgTixaLHEsRyxZLFY9Sy5sZW5ndGgsTD1WLGs9MDtmb3IoQy5fX2s9QXJyYXkoUSksTj0wO048UTtOKyspKFo9JFtOXSkhPW51bGwmJnR5cGVvZiBaIT0iYm9vbGVhbiImJnR5cGVvZiBaIT0iZnVuY3Rpb24iPyh0eXBlb2YgWj09InN0cmluZyJ8fHR5cGVvZiBaPT0ibnVtYmVyInx8dHlwZW9mIFo9PSJiaWdpbnQifHxaLmNvbnN0cnVjdG9yPT1TdHJpbmc/Wj1DLl9fa1tOXT11MChudWxsLFosbnVsbCxudWxsLG51bGwpOkkwKFopP1o9Qy5fX2tbTl09dTAocTEse2NoaWxkcmVuOlp9LG51bGwsbnVsbCxudWxsKTpaLmNvbnN0cnVjdG9yPT09dm9pZCAwJiZaLl9fYj4wP1o9Qy5fX2tbTl09dTAoWi50eXBlLFoucHJvcHMsWi5rZXksWi5yZWY/Wi5yZWY6bnVsbCxaLl9fdik6Qy5fX2tbTl09WixHPU4rayxaLl9fPUMsWi5fX2I9Qy5fX2IrMSxxPW51bGwsKFk9Wi5fX2k9JDkoWixLLEcsTCkpIT0tMSYmKEwtLSwocT1LW1ldKSYmKHEuX191fD0yKSkscT09bnVsbHx8cS5fX3Y9PW51bGw/KFk9PS0xJiYoUT5WP2stLTpRPFYmJmsrKyksdHlwZW9mIFoudHlwZSE9ImZ1bmN0aW9uIiYmKFouX191fD00KSk6WSE9RyYmKFk9PUctMT9rLS06WT09RysxP2srKzooWT5HP2stLTprKyssWi5fX3V8PTQpKSk6Qy5fX2tbTl09bnVsbDtpZihMKWZvcihOPTA7TjxWO04rKykocT1LW05dKSE9bnVsbCYmKDImcS5fX3UpPT0wJiYocS5fX2U9PVgmJihYPUIwKHEpKSxUNShxLHEpKTtyZXR1cm4gWH1mdW5jdGlvbiBINShDLCQsSyxYKXt2YXIgUSxOO2lmKHR5cGVvZiBDLnR5cGU9PSJmdW5jdGlvbiIpe2ZvcihRPUMuX19rLE49MDtRJiZOPFEubGVuZ3RoO04rKylRW05dJiYoUVtOXS5fXz1DLCQ9SDUoUVtOXSwkLEssWCkpO3JldHVybiAkfUMuX19lIT0kJiYoWCYmKCQmJkMudHlwZSYmISQucGFyZW50Tm9kZSYmKCQ9QjAoQykpLEsuaW5zZXJ0QmVmb3JlKEMuX19lLCR8fG51bGwpKSwkPUMuX19lKTtkbyAkPSQmJiQubmV4dFNpYmxpbmc7d2hpbGUoJCE9bnVsbCYmJC5ub2RlVHlwZT09OCk7cmV0dXJuICR9ZnVuY3Rpb24gYTEoQywkKXtyZXR1cm4gJD0kfHxbXSxDPT1udWxsfHx0eXBlb2YgQz09ImJvb2xlYW4ifHwoSTAoQyk/Qy5zb21lKGZ1bmN0aW9uKEspe2ExKEssJCl9KTokLnB1c2goQykpLCR9ZnVuY3Rpb24gJDkoQywkLEssWCl7dmFyIFEsTixaLHE9Qy5rZXksRz1DLnR5cGUsWT0kW0tdLFY9WSE9bnVsbCYmKDImWS5fX3UpPT0wO2lmKFk9PT1udWxsJiZxPT1udWxsfHxWJiZxPT1ZLmtleSYmRz09WS50eXBlKXJldHVybiBLO2lmKFg+KFY/MTowKSl7Zm9yKFE9Sy0xLE49SysxO1E+PTB8fE48JC5sZW5ndGg7KWlmKChZPSRbWj1RPj0wP1EtLTpOKytdKSE9bnVsbCYmKDImWS5fX3UpPT0wJiZxPT1ZLmtleSYmRz09WS50eXBlKXJldHVybiBafXJldHVybi0xfWZ1bmN0aW9uIEw1KEMsJCxLKXskWzBdPT0iLSI/Qy5zZXRQcm9wZXJ0eSgkLEs9PW51bGw/IiI6Syk6Q1skXT1LPT1udWxsPyIiOnR5cGVvZiBLIT0ibnVtYmVyInx8dDgudGVzdCgkKT9LOksrInB4In1mdW5jdGlvbiBmMChDLCQsSyxYLFEpe3ZhciBOLFo7QzppZigkPT0ic3R5bGUiKWlmKHR5cGVvZiBLPT0ic3RyaW5nIilDLnN0eWxlLmNzc1RleHQ9SztlbHNle2lmKHR5cGVvZiBYPT0ic3RyaW5nIiYmKEMuc3R5bGUuY3NzVGV4dD1YPSIiKSxYKWZvcigkIGluIFgpSyYmJCBpbiBLfHxMNShDLnN0eWxlLCQsIiIpO2lmKEspZm9yKCQgaW4gSylYJiZLWyRdPT1YWyRdfHxMNShDLnN0eWxlLCQsS1skXSl9ZWxzZSBpZigkWzBdPT0ibyImJiRbMV09PSJuIilOPSQhPSgkPSQucmVwbGFjZShENSwiJDEiKSksWj0kLnRvTG93ZXJDYXNlKCksJD1aIGluIEN8fCQ9PSJvbkZvY3VzT3V0Inx8JD09Im9uRm9jdXNJbiI/Wi5zbGljZSgyKTokLnNsaWNlKDIpLEMubHx8KEMubD17fSksQy5sWyQrTl09SyxLP1g/S1tFMF09WFtFMF06KEtbRTBdPXcyLEMuYWRkRXZlbnRMaXN0ZW5lcigkLE4/TzI6QTIsTikpOkMucmVtb3ZlRXZlbnRMaXN0ZW5lcigkLE4/TzI6QTIsTik7ZWxzZXtpZihRPT0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciKSQ9JC5yZXBsYWNlKC94bGluayhIfDpoKS8sImgiKS5yZXBsYWNlKC9zTmFtZSQvLCJzIik7ZWxzZSBpZigkIT0id2lkdGgiJiYkIT0iaGVpZ2h0IiYmJCE9ImhyZWYiJiYkIT0ibGlzdCImJiQhPSJmb3JtIiYmJCE9InRhYkluZGV4IiYmJCE9ImRvd25sb2FkIiYmJCE9InJvd1NwYW4iJiYkIT0iY29sU3BhbiImJiQhPSJyb2xlIiYmJCE9InBvcG92ZXIiJiYkIGluIEMpdHJ5e0NbJF09Sz09bnVsbD8iIjpLO2JyZWFrIEN9Y2F0Y2gocSl7fXR5cGVvZiBLPT0iZnVuY3Rpb24ifHwoSz09bnVsbHx8Sz09PSExJiYkWzRdIT0iLSI/Qy5yZW1vdmVBdHRyaWJ1dGUoJCk6Qy5zZXRBdHRyaWJ1dGUoJCwkPT0icG9wb3ZlciImJks9PTE/IiI6SykpfX1mdW5jdGlvbiBWNShDKXtyZXR1cm4gZnVuY3Rpb24oJCl7aWYodGhpcy5sKXt2YXIgSz10aGlzLmxbJC50eXBlK0NdO2lmKCRbbDBdPT1udWxsKSRbbDBdPXcyKys7ZWxzZSBpZigkW2wwXTxLW0UwXSlyZXR1cm47cmV0dXJuIEsodS5ldmVudD91LmV2ZW50KCQpOiQpfX19ZnVuY3Rpb24gUDIoQywkLEssWCxRLE4sWixxLEcsWSl7dmFyIFYsTCxrLEQsVCxCLF8sVSxNLEUseSxjLFIsUyx4LGY9JC50eXBlO2lmKCQuY29uc3RydWN0b3IhPT12b2lkIDApcmV0dXJuIG51bGw7MTI4JksuX191JiYoRz0hISgzMiZLLl9fdSksTj1bcT0kLl9fZT1LLl9fZV0pLChWPXUuX19iKSYmVigkKTtDOmlmKHR5cGVvZiBmPT0iZnVuY3Rpb24iKXRyeXtpZihVPSQucHJvcHMsTT1mLnByb3RvdHlwZSYmZi5wcm90b3R5cGUucmVuZGVyLEU9KFY9Zi5jb250ZXh0VHlwZSkmJlhbVi5fX2NdLHk9Vj9FP0UucHJvcHMudmFsdWU6Vi5fXzpYLEsuX19jP189KEw9JC5fX2M9Sy5fX2MpLl9fPUwuX19FOihNPyQuX19jPUw9bmV3IGYoVSx5KTooJC5fX2M9TD1uZXcgVDEoVSx5KSxMLmNvbnN0cnVjdG9yPWYsTC5yZW5kZXI9WDkpLEUmJkUuc3ViKEwpLEwuc3RhdGV8fChMLnN0YXRlPXt9KSxMLl9fbj1YLGs9TC5fX2Q9ITAsTC5fX2g9W10sTC5fc2I9W10pLE0mJkwuX19zPT1udWxsJiYoTC5fX3M9TC5zdGF0ZSksTSYmZi5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMhPW51bGwmJihMLl9fcz09TC5zdGF0ZSYmKEwuX19zPWMxKHt9LEwuX19zKSksYzEoTC5fX3MsZi5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMoVSxMLl9fcykpKSxEPUwucHJvcHMsVD1MLnN0YXRlLEwuX192PSQsaylNJiZmLmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcz09bnVsbCYmTC5jb21wb25lbnRXaWxsTW91bnQhPW51bGwmJkwuY29tcG9uZW50V2lsbE1vdW50KCksTSYmTC5jb21wb25lbnREaWRNb3VudCE9bnVsbCYmTC5fX2gucHVzaChMLmNvbXBvbmVudERpZE1vdW50KTtlbHNle2lmKE0mJmYuZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzPT1udWxsJiZVIT09RCYmTC5jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzIT1udWxsJiZMLmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMoVSx5KSwkLl9fdj09Sy5fX3Z8fCFMLl9fZSYmTC5zaG91bGRDb21wb25lbnRVcGRhdGUhPW51bGwmJkwuc2hvdWxkQ29tcG9uZW50VXBkYXRlKFUsTC5fX3MseSk9PT0hMSl7JC5fX3YhPUsuX192JiYoTC5wcm9wcz1VLEwuc3RhdGU9TC5fX3MsTC5fX2Q9ITEpLCQuX19lPUsuX19lLCQuX19rPUsuX19rLCQuX19rLnNvbWUoZnVuY3Rpb24oZCl7ZCYmKGQuX189JCl9KSxkMC5wdXNoLmFwcGx5KEwuX19oLEwuX3NiKSxMLl9zYj1bXSxMLl9faC5sZW5ndGgmJloucHVzaChMKTticmVhayBDfUwuY29tcG9uZW50V2lsbFVwZGF0ZSE9bnVsbCYmTC5jb21wb25lbnRXaWxsVXBkYXRlKFUsTC5fX3MseSksTSYmTC5jb21wb25lbnREaWRVcGRhdGUhPW51bGwmJkwuX19oLnB1c2goZnVuY3Rpb24oKXtMLmNvbXBvbmVudERpZFVwZGF0ZShELFQsQil9KX1pZihMLmNvbnRleHQ9eSxMLnByb3BzPVUsTC5fX1A9QyxMLl9fZT0hMSxjPXUuX19yLFI9MCxNKUwuc3RhdGU9TC5fX3MsTC5fX2Q9ITEsYyYmYygkKSxWPUwucmVuZGVyKEwucHJvcHMsTC5zdGF0ZSxMLmNvbnRleHQpLGQwLnB1c2guYXBwbHkoTC5fX2gsTC5fc2IpLEwuX3NiPVtdO2Vsc2UgZG8gTC5fX2Q9ITEsYyYmYygkKSxWPUwucmVuZGVyKEwucHJvcHMsTC5zdGF0ZSxMLmNvbnRleHQpLEwuc3RhdGU9TC5fX3M7d2hpbGUoTC5fX2QmJisrUjwyNSk7TC5zdGF0ZT1MLl9fcyxMLmdldENoaWxkQ29udGV4dCE9bnVsbCYmKFg9YzEoYzEoe30sWCksTC5nZXRDaGlsZENvbnRleHQoKSkpLE0mJiFrJiZMLmdldFNuYXBzaG90QmVmb3JlVXBkYXRlIT1udWxsJiYoQj1MLmdldFNuYXBzaG90QmVmb3JlVXBkYXRlKEQsVCkpLFM9ViE9bnVsbCYmVi50eXBlPT09cTEmJlYua2V5PT1udWxsP081KFYucHJvcHMuY2hpbGRyZW4pOlYscT16NShDLEkwKFMpP1M6W1NdLCQsSyxYLFEsTixaLHEsRyxZKSxMLmJhc2U9JC5fX2UsJC5fX3UmPS0xNjEsTC5fX2gubGVuZ3RoJiZaLnB1c2goTCksXyYmKEwuX19FPUwuX189bnVsbCl9Y2F0Y2goZCl7aWYoJC5fX3Y9bnVsbCxHfHxOIT1udWxsKWlmKGQudGhlbil7Zm9yKCQuX191fD1HPzE2MDoxMjg7cSYmcS5ub2RlVHlwZT09OCYmcS5uZXh0U2libGluZzspcT1xLm5leHRTaWJsaW5nO05bTi5pbmRleE9mKHEpXT1udWxsLCQuX19lPXF9ZWxzZXtmb3IoeD1OLmxlbmd0aDt4LS07KWIyKE5beF0pO00yKCQpfWVsc2UgJC5fX2U9Sy5fX2UsJC5fX2s9Sy5fX2ssZC50aGVufHxNMigkKTt1Ll9fZShkLCQsSyl9ZWxzZSBOPT1udWxsJiYkLl9fdj09Sy5fX3Y/KCQuX19rPUsuX19rLCQuX19lPUsuX19lKTpxPSQuX19lPUs5KEsuX19lLCQsSyxYLFEsTixaLEcsWSk7cmV0dXJuKFY9dS5kaWZmZWQpJiZWKCQpLDEyOCYkLl9fdT92b2lkIDA6cX1mdW5jdGlvbiBNMihDKXtDJiYoQy5fX2MmJihDLl9fYy5fX2U9ITApLEMuX19rJiZDLl9fay5zb21lKE0yKSl9ZnVuY3Rpb24gQTUoQywkLEspe2Zvcih2YXIgWD0wO1g8Sy5sZW5ndGg7WCsrKVcyKEtbWF0sS1srK1hdLEtbKytYXSk7dS5fX2MmJnUuX19jKCQsQyksQy5zb21lKGZ1bmN0aW9uKFEpe3RyeXtDPVEuX19oLFEuX19oPVtdLEMuc29tZShmdW5jdGlvbihOKXtOLmNhbGwoUSl9KX1jYXRjaChOKXt1Ll9fZShOLFEuX192KX19KX1mdW5jdGlvbiBPNShDKXtyZXR1cm4gdHlwZW9mIEMhPSJvYmplY3QifHxDPT1udWxsfHxDLl9fYj4wP0M6STAoQyk/Qy5tYXAoTzUpOmMxKHt9LEMpfWZ1bmN0aW9uIEs5KEMsJCxLLFgsUSxOLFoscSxHKXt2YXIgWSxWLEwsayxELFQsQixfPUsucHJvcHN8fG8wLFU9JC5wcm9wcyxNPSQudHlwZTtpZihNPT0ic3ZnIj9RPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI6TT09Im1hdGgiP1E9Imh0dHA6Ly93d3cudzMub3JnLzE5OTgvTWF0aC9NYXRoTUwiOlF8fChRPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiksTiE9bnVsbCl7Zm9yKFk9MDtZPE4ubGVuZ3RoO1krKylpZigoRD1OW1ldKSYmInNldEF0dHJpYnV0ZSJpbiBEPT0hIU0mJihNP0QubG9jYWxOYW1lPT1NOkQubm9kZVR5cGU9PTMpKXtDPUQsTltZXT1udWxsO2JyZWFrfX1pZihDPT1udWxsKXtpZihNPT1udWxsKXJldHVybiBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShVKTtDPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhRLE0sVS5pcyYmVSkscSYmKHUuX19tJiZ1Ll9fbSgkLE4pLHE9ITEpLE49bnVsbH1pZihNPT1udWxsKV89PT1VfHxxJiZDLmRhdGE9PVV8fChDLmRhdGE9VSk7ZWxzZXtpZihOPU4mJmEwLmNhbGwoQy5jaGlsZE5vZGVzKSwhcSYmTiE9bnVsbClmb3IoXz17fSxZPTA7WTxDLmF0dHJpYnV0ZXMubGVuZ3RoO1krKylfWyhEPUMuYXR0cmlidXRlc1tZXSkubmFtZV09RC52YWx1ZTtmb3IoWSBpbiBfKUQ9X1tZXSxZPT0iZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwiP0w9RDpZPT0iY2hpbGRyZW4ifHwoWSBpbiBVKXx8WT09InZhbHVlIiYmKCJkZWZhdWx0VmFsdWUiaW4gVSl8fFk9PSJjaGVja2VkIiYmKCJkZWZhdWx0Q2hlY2tlZCJpbiBVKXx8ZjAoQyxZLG51bGwsRCxRKTtmb3IoWSBpbiBVKUQ9VVtZXSxZPT0iY2hpbGRyZW4iP2s9RDpZPT0iZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwiP1Y9RDpZPT0idmFsdWUiP1Q9RDpZPT0iY2hlY2tlZCI/Qj1EOnEmJnR5cGVvZiBEIT0iZnVuY3Rpb24ifHxfW1ldPT09RHx8ZjAoQyxZLEQsX1tZXSxRKTtpZihWKXF8fEwmJihWLl9faHRtbD09TC5fX2h0bWx8fFYuX19odG1sPT1DLmlubmVySFRNTCl8fChDLmlubmVySFRNTD1WLl9faHRtbCksJC5fX2s9W107ZWxzZSBpZihMJiYoQy5pbm5lckhUTUw9IiIpLHo1KCQudHlwZT09InRlbXBsYXRlIj9DLmNvbnRlbnQ6QyxJMChrKT9rOltrXSwkLEssWCxNPT0iZm9yZWlnbk9iamVjdCI/Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiOlEsTixaLE4/TlswXTpLLl9fayYmQjAoSywwKSxxLEcpLE4hPW51bGwpZm9yKFk9Ti5sZW5ndGg7WS0tOyliMihOW1ldKTtxfHwoWT0idmFsdWUiLE09PSJwcm9ncmVzcyImJlQ9PW51bGw/Qy5yZW1vdmVBdHRyaWJ1dGUoInZhbHVlIik6VCE9bnVsbCYmKFQhPT1DW1ldfHxNPT0icHJvZ3Jlc3MiJiYhVHx8TT09Im9wdGlvbiImJlQhPV9bWV0pJiZmMChDLFksVCxfW1ldLFEpLFk9ImNoZWNrZWQiLEIhPW51bGwmJkIhPUNbWV0mJmYwKEMsWSxCLF9bWV0sUSkpfXJldHVybiBDfWZ1bmN0aW9uIFcyKEMsJCxLKXt0cnl7aWYodHlwZW9mIEM9PSJmdW5jdGlvbiIpe3ZhciBYPXR5cGVvZiBDLl9fdT09ImZ1bmN0aW9uIjtYJiZDLl9fdSgpLFgmJiQ9PW51bGx8fChDLl9fdT1DKCQpKX1lbHNlIEMuY3VycmVudD0kfWNhdGNoKFEpe3UuX19lKFEsSyl9fWZ1bmN0aW9uIFQ1KEMsJCxLKXt2YXIgWCxRO2lmKHUudW5tb3VudCYmdS51bm1vdW50KEMpLChYPUMucmVmKSYmKFguY3VycmVudCYmWC5jdXJyZW50IT1DLl9fZXx8VzIoWCxudWxsLCQpKSwoWD1DLl9fYykhPW51bGwpe2lmKFguY29tcG9uZW50V2lsbFVubW91bnQpdHJ5e1guY29tcG9uZW50V2lsbFVubW91bnQoKX1jYXRjaChOKXt1Ll9fZShOLCQpfVguYmFzZT1YLl9fUD1udWxsfWlmKFg9Qy5fX2spZm9yKFE9MDtRPFgubGVuZ3RoO1ErKylYW1FdJiZUNShYW1FdLCQsS3x8dHlwZW9mIEMudHlwZSE9ImZ1bmN0aW9uIik7S3x8YjIoQy5fX2UpLEMuX19jPUMuX189Qy5fX2U9dm9pZCAwfWZ1bmN0aW9uIFg5KEMsJCxLKXtyZXR1cm4gdGhpcy5jb25zdHJ1Y3RvcihDLEspfWZ1bmN0aW9uIGkwKEMsJCxLKXt2YXIgWCxRLE4sWjskPT1kb2N1bWVudCYmKCQ9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KSx1Ll9fJiZ1Ll9fKEMsJCksUT0oWD10eXBlb2YgSz09ImZ1bmN0aW9uIik/bnVsbDpLJiZLLl9fa3x8JC5fX2ssTj1bXSxaPVtdLFAyKCQsQz0oIVgmJkt8fCQpLl9faz11MShxMSxudWxsLFtDXSksUXx8bzAsbzAsJC5uYW1lc3BhY2VVUkksIVgmJks/W0tdOlE/bnVsbDokLmZpcnN0Q2hpbGQ/YTAuY2FsbCgkLmNoaWxkTm9kZXMpOm51bGwsTiwhWCYmSz9LOlE/US5fX2U6JC5maXJzdENoaWxkLFgsWiksQTUoTixDLFopfWZ1bmN0aW9uIGkxKEMpe2Z1bmN0aW9uICQoSyl7dmFyIFgsUTtyZXR1cm4gdGhpcy5nZXRDaGlsZENvbnRleHR8fChYPW5ldyBTZXQsKFE9e30pWyQuX19jXT10aGlzLHRoaXMuZ2V0Q2hpbGRDb250ZXh0PWZ1bmN0aW9uKCl7cmV0dXJuIFF9LHRoaXMuY29tcG9uZW50V2lsbFVubW91bnQ9ZnVuY3Rpb24oKXtYPW51bGx9LHRoaXMuc2hvdWxkQ29tcG9uZW50VXBkYXRlPWZ1bmN0aW9uKE4pe3RoaXMucHJvcHMudmFsdWUhPU4udmFsdWUmJlguZm9yRWFjaChmdW5jdGlvbihaKXtaLl9fZT0hMCxUMihaKX0pfSx0aGlzLnN1Yj1mdW5jdGlvbihOKXtYLmFkZChOKTt2YXIgWj1OLmNvbXBvbmVudFdpbGxVbm1vdW50O04uY29tcG9uZW50V2lsbFVubW91bnQ9ZnVuY3Rpb24oKXtYJiZYLmRlbGV0ZShOKSxaJiZaLmNhbGwoTil9fSksSy5jaGlsZHJlbn1yZXR1cm4gJC5fX2M9Il9fY0MiK1U1KyssJC5fXz1DLCQuUHJvdmlkZXI9JC5fX2w9KCQuQ29uc3VtZXI9ZnVuY3Rpb24oSyxYKXtyZXR1cm4gSy5jaGlsZHJlbihYKX0pLmNvbnRleHRUeXBlPSQsJH1hMD1kMC5zbGljZSx1PXtfX2U6ZnVuY3Rpb24oQywkLEssWCl7Zm9yKHZhciBRLE4sWjskPSQuX187KWlmKChRPSQuX19jKSYmIVEuX18pdHJ5e2lmKChOPVEuY29uc3RydWN0b3IpJiZOLmdldERlcml2ZWRTdGF0ZUZyb21FcnJvciE9bnVsbCYmKFEuc2V0U3RhdGUoTi5nZXREZXJpdmVkU3RhdGVGcm9tRXJyb3IoQykpLFo9US5fX2QpLFEuY29tcG9uZW50RGlkQ2F0Y2ghPW51bGwmJihRLmNvbXBvbmVudERpZENhdGNoKEMsWHx8e30pLFo9US5fX2QpLFopcmV0dXJuIFEuX19FPVF9Y2F0Y2gocSl7Qz1xfXRocm93IEN9fSxCNT0wLHM4PWZ1bmN0aW9uKEMpe3JldHVybiBDIT1udWxsJiZDLmNvbnN0cnVjdG9yPT09dm9pZCAwfSxUMS5wcm90b3R5cGUuc2V0U3RhdGU9ZnVuY3Rpb24oQywkKXt2YXIgSztLPXRoaXMuX19zIT1udWxsJiZ0aGlzLl9fcyE9dGhpcy5zdGF0ZT90aGlzLl9fczp0aGlzLl9fcz1jMSh7fSx0aGlzLnN0YXRlKSx0eXBlb2YgQz09ImZ1bmN0aW9uIiYmKEM9QyhjMSh7fSxLKSx0aGlzLnByb3BzKSksQyYmYzEoSyxDKSxDIT1udWxsJiZ0aGlzLl9fdiYmKCQmJnRoaXMuX3NiLnB1c2goJCksVDIodGhpcykpfSxUMS5wcm90b3R5cGUuZm9yY2VVcGRhdGU9ZnVuY3Rpb24oQyl7dGhpcy5fX3YmJih0aGlzLl9fZT0hMCxDJiZ0aGlzLl9faC5wdXNoKEMpLFQyKHRoaXMpKX0sVDEucHJvdG90eXBlLnJlbmRlcj1xMSxlMT1bXSxfNT10eXBlb2YgUHJvbWlzZT09ImZ1bmN0aW9uIj9Qcm9taXNlLnByb3RvdHlwZS50aGVuLmJpbmQoUHJvbWlzZS5yZXNvbHZlKCkpOnNldFRpbWVvdXQsazU9ZnVuY3Rpb24oQywkKXtyZXR1cm4gQy5fX3YuX19iLSQuX192Ll9fYn0sYzAuX19yPTAsSDI9TWF0aC5yYW5kb20oKS50b1N0cmluZyg4KSxsMD0iX19kIitIMixFMD0iX19hIitIMixENT0vKFBvaW50ZXJDYXB0dXJlKSR8Q2FwdHVyZSQvaSx3Mj0wLEEyPVY1KCExKSxPMj1WNSghMCksVTU9MDt2YXIgQzAsazEseTIsTTUsUzA9MCxTNT1bXSx6MT11LHc1PXoxLl9fYixiNT16MS5fX3IsUDU9ejEuZGlmZmVkLFc1PXoxLl9fYyx5NT16MS51bm1vdW50LEU1PXoxLl9fO2Z1bmN0aW9uIF8wKEMsJCl7ejEuX19oJiZ6MS5fX2goazEsQyxTMHx8JCksUzA9MDt2YXIgSz1rMS5fX0h8fChrMS5fX0g9e19fOltdLF9faDpbXX0pO3JldHVybiBDPj1LLl9fLmxlbmd0aCYmSy5fXy5wdXNoKHt9KSxLLl9fW0NdfWZ1bmN0aW9uIEEoQyl7cmV0dXJuIFMwPTEsSTIoaDUsQyl9ZnVuY3Rpb24gSTIoQywkLEspe3ZhciBYPV8wKEMwKyssMik7aWYoWC50PUMsIVguX19jJiYoWC5fXz1bSz9LKCQpOmg1KHZvaWQgMCwkKSxmdW5jdGlvbihxKXt2YXIgRz1YLl9fTj9YLl9fTlswXTpYLl9fWzBdLFk9WC50KEcscSk7RyE9PVkmJihYLl9fTj1bWSxYLl9fWzFdXSxYLl9fYy5zZXRTdGF0ZSh7fSkpfV0sWC5fX2M9azEsIWsxLl9fZikpe3ZhciBRPWZ1bmN0aW9uKHEsRyxZKXtpZighWC5fX2MuX19IKXJldHVybiEwO3ZhciBWPVguX19jLl9fSC5fXy5maWx0ZXIoZnVuY3Rpb24oayl7cmV0dXJuIGsuX19jfSk7aWYoVi5ldmVyeShmdW5jdGlvbihrKXtyZXR1cm4hay5fX059KSlyZXR1cm4hTnx8Ti5jYWxsKHRoaXMscSxHLFkpO3ZhciBMPVguX19jLnByb3BzIT09cTtyZXR1cm4gVi5zb21lKGZ1bmN0aW9uKGspe2lmKGsuX19OKXt2YXIgRD1rLl9fWzBdO2suX189ay5fX04say5fX049dm9pZCAwLEQhPT1rLl9fWzBdJiYoTD0hMCl9fSksTiYmTi5jYWxsKHRoaXMscSxHLFkpfHxMfTtrMS5fX2Y9ITA7dmFye3Nob3VsZENvbXBvbmVudFVwZGF0ZTpOLGNvbXBvbmVudFdpbGxVcGRhdGU6Wn09azE7azEuY29tcG9uZW50V2lsbFVwZGF0ZT1mdW5jdGlvbihxLEcsWSl7aWYodGhpcy5fX2Upe3ZhciBWPU47Tj12b2lkIDAsUShxLEcsWSksTj1WfVomJlouY2FsbCh0aGlzLHEsRyxZKX0sazEuc2hvdWxkQ29tcG9uZW50VXBkYXRlPVF9cmV0dXJuIFguX19OfHxYLl9ffWZ1bmN0aW9uIFcoQywkKXt2YXIgSz1fMChDMCsrLDMpOyF6MS5fX3MmJlMyKEsuX19ILCQpJiYoSy5fXz1DLEsudT0kLGsxLl9fSC5fX2gucHVzaChLKSl9ZnVuY3Rpb24gbjAoQywkKXt2YXIgSz1fMChDMCsrLDQpOyF6MS5fX3MmJlMyKEsuX19ILCQpJiYoSy5fXz1DLEsudT0kLGsxLl9faC5wdXNoKEspKX1mdW5jdGlvbiB2KEMpe3JldHVybiBTMD01LE0xKGZ1bmN0aW9uKCl7cmV0dXJue2N1cnJlbnQ6Q319LFtdKX1mdW5jdGlvbiBNMShDLCQpe3ZhciBLPV8wKEMwKyssNyk7cmV0dXJuIFMyKEsuX19ILCQpJiYoSy5fXz1DKCksSy5fX0g9JCxLLl9faD1DKSxLLl9ffWZ1bmN0aW9uIFAoQywkKXtyZXR1cm4gUzA9OCxNMShmdW5jdGlvbigpe3JldHVybiBDfSwkKX1mdW5jdGlvbiAkMChDKXt2YXIgJD1rMS5jb250ZXh0W0MuX19jXSxLPV8wKEMwKyssOSk7cmV0dXJuIEsuYz1DLCQ/KEsuX189PW51bGwmJihLLl9fPSEwLCQuc3ViKGsxKSksJC5wcm9wcy52YWx1ZSk6Qy5fX31mdW5jdGlvbiBzMCgpe3ZhciBDPV8wKEMwKyssMTEpO2lmKCFDLl9fKXtmb3IodmFyICQ9azEuX192OyQhPT1udWxsJiYhJC5fX20mJiQuX18hPT1udWxsOykkPSQuX187dmFyIEs9JC5fX218fCgkLl9fbT1bMCwwXSk7Qy5fXz0iUCIrS1swXSsiLSIrS1sxXSsrfXJldHVybiBDLl9ffWZ1bmN0aW9uIEo5KCl7Zm9yKHZhciBDO0M9UzUuc2hpZnQoKTspe3ZhciAkPUMuX19IO2lmKEMuX19QJiYkKXRyeXskLl9faC5zb21lKHIwKSwkLl9faC5zb21lKEUyKSwkLl9faD1bXX1jYXRjaChLKXskLl9faD1bXSx6MS5fX2UoSyxDLl9fdil9fX16MS5fX2I9ZnVuY3Rpb24oQyl7azE9bnVsbCx3NSYmdzUoQyl9LHoxLl9fPWZ1bmN0aW9uKEMsJCl7QyYmJC5fX2smJiQuX19rLl9fbSYmKEMuX19tPSQuX19rLl9fbSksRTUmJkU1KEMsJCl9LHoxLl9fcj1mdW5jdGlvbihDKXtiNSYmYjUoQyksQzA9MDt2YXIgJD0oazE9Qy5fX2MpLl9fSDskJiYoeTI9PT1rMT8oJC5fX2g9W10sazEuX19oPVtdLCQuX18uc29tZShmdW5jdGlvbihLKXtLLl9fTiYmKEsuX189Sy5fX04pLEsudT1LLl9fTj12b2lkIDB9KSk6KCQuX19oLnNvbWUocjApLCQuX19oLnNvbWUoRTIpLCQuX19oPVtdLEMwPTApKSx5Mj1rMX0sejEuZGlmZmVkPWZ1bmN0aW9uKEMpe1A1JiZQNShDKTt2YXIgJD1DLl9fYzskJiYkLl9fSCYmKCQuX19ILl9faC5sZW5ndGgmJihTNS5wdXNoKCQpIT09MSYmTTU9PT16MS5yZXF1ZXN0QW5pbWF0aW9uRnJhbWV8fCgoTTU9ejEucmVxdWVzdEFuaW1hdGlvbkZyYW1lKXx8UTkpKEo5KSksJC5fX0guX18uc29tZShmdW5jdGlvbihLKXtLLnUmJihLLl9fSD1LLnUpLEsudT12b2lkIDB9KSkseTI9azE9bnVsbH0sejEuX19jPWZ1bmN0aW9uKEMsJCl7JC5zb21lKGZ1bmN0aW9uKEspe3RyeXtLLl9faC5zb21lKHIwKSxLLl9faD1LLl9faC5maWx0ZXIoZnVuY3Rpb24oWCl7cmV0dXJuIVguX198fEUyKFgpfSl9Y2F0Y2goWCl7JC5zb21lKGZ1bmN0aW9uKFEpe1EuX19oJiYoUS5fX2g9W10pfSksJD1bXSx6MS5fX2UoWCxLLl9fdil9fSksVzUmJlc1KEMsJCl9LHoxLnVubW91bnQ9ZnVuY3Rpb24oQyl7eTUmJnk1KEMpO3ZhciAkLEs9Qy5fX2M7SyYmSy5fX0gmJihLLl9fSC5fXy5zb21lKGZ1bmN0aW9uKFgpe3RyeXtyMChYKX1jYXRjaChRKXskPVF9fSksSy5fX0g9dm9pZCAwLCQmJnoxLl9fZSgkLEsuX192KSl9O3ZhciBJNT10eXBlb2YgcmVxdWVzdEFuaW1hdGlvbkZyYW1lPT0iZnVuY3Rpb24iO2Z1bmN0aW9uIFE5KEMpe3ZhciAkLEs9ZnVuY3Rpb24oKXtjbGVhclRpbWVvdXQoWCksSTUmJmNhbmNlbEFuaW1hdGlvbkZyYW1lKCQpLHNldFRpbWVvdXQoQyl9LFg9c2V0VGltZW91dChLLDM1KTtJNSYmKCQ9cmVxdWVzdEFuaW1hdGlvbkZyYW1lKEspKX1mdW5jdGlvbiByMChDKXt2YXIgJD1rMSxLPUMuX19jO3R5cGVvZiBLPT0iZnVuY3Rpb24iJiYoQy5fX2M9dm9pZCAwLEsoKSksazE9JH1mdW5jdGlvbiBFMihDKXt2YXIgJD1rMTtDLl9fYz1DLl9fKCksazE9JH1mdW5jdGlvbiBTMihDLCQpe3JldHVybiFDfHxDLmxlbmd0aCE9PSQubGVuZ3RofHwkLnNvbWUoZnVuY3Rpb24oSyxYKXtyZXR1cm4gSyE9PUNbWF19KX1mdW5jdGlvbiBoNShDLCQpe3JldHVybiB0eXBlb2YgJD09ImZ1bmN0aW9uIj8kKEMpOiR9ZnVuY3Rpb24gRzkoQywkKXtmb3IodmFyIEsgaW4gJClDW0tdPSRbS107cmV0dXJuIEN9ZnVuY3Rpb24geDUoQywkKXtmb3IodmFyIEsgaW4gQylpZihLIT09Il9fc291cmNlIiYmIShLIGluICQpKXJldHVybiEwO2Zvcih2YXIgWCBpbiAkKWlmKFghPT0iX19zb3VyY2UiJiZDW1hdIT09JFtYXSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiB2NShDLCQpe3RoaXMucHJvcHM9Qyx0aGlzLmNvbnRleHQ9JH0odjUucHJvdG90eXBlPW5ldyBUMSkuaXNQdXJlUmVhY3RDb21wb25lbnQ9ITAsdjUucHJvdG90eXBlLnNob3VsZENvbXBvbmVudFVwZGF0ZT1mdW5jdGlvbihDLCQpe3JldHVybiB4NSh0aGlzLnByb3BzLEMpfHx4NSh0aGlzLnN0YXRlLCQpfTt2YXIgZzU9dS5fX2I7dS5fX2I9ZnVuY3Rpb24oQyl7Qy50eXBlJiZDLnR5cGUuX19mJiZDLnJlZiYmKEMucHJvcHMucmVmPUMucmVmLEMucmVmPW51bGwpLGc1JiZnNShDKX07dmFyIEw5PXUuX19lO3UuX19lPWZ1bmN0aW9uKEMsJCxLLFgpe2lmKEMudGhlbil7Zm9yKHZhciBRLE49JDtOPU4uX187KWlmKChRPU4uX19jKSYmUS5fX2MpcmV0dXJuICQuX19lPT1udWxsJiYoJC5fX2U9Sy5fX2UsJC5fX2s9Sy5fX2spLFEuX19jKEMsJCl9TDkoQywkLEssWCl9O3ZhciBSNT11LnVubW91bnQ7ZnVuY3Rpb24gdTUoQywkLEspe3JldHVybiBDJiYoQy5fX2MmJkMuX19jLl9fSCYmKEMuX19jLl9fSC5fXy5mb3JFYWNoKGZ1bmN0aW9uKFgpe3R5cGVvZiBYLl9fYz09ImZ1bmN0aW9uIiYmWC5fX2MoKX0pLEMuX19jLl9fSD1udWxsKSwoQz1HOSh7fSxDKSkuX19jIT1udWxsJiYoQy5fX2MuX19QPT09SyYmKEMuX19jLl9fUD0kKSxDLl9fYy5fX2U9ITAsQy5fX2M9bnVsbCksQy5fX2s9Qy5fX2smJkMuX19rLm1hcChmdW5jdGlvbihYKXtyZXR1cm4gdTUoWCwkLEspfSkpLEN9ZnVuY3Rpb24gbzUoQywkLEspe3JldHVybiBDJiZLJiYoQy5fX3Y9bnVsbCxDLl9faz1DLl9fayYmQy5fX2subWFwKGZ1bmN0aW9uKFgpe3JldHVybiBvNShYLCQsSyl9KSxDLl9fYyYmQy5fX2MuX19QPT09JCYmKEMuX19lJiZLLmFwcGVuZENoaWxkKEMuX19lKSxDLl9fYy5fX2U9ITAsQy5fX2MuX19QPUspKSxDfWZ1bmN0aW9uIGgyKCl7dGhpcy5fX3U9MCx0aGlzLm89bnVsbCx0aGlzLl9fYj1udWxsfWZ1bmN0aW9uIGQ1KEMpe3ZhciAkPUMuX18mJkMuX18uX19jO3JldHVybiAkJiYkLl9fYSYmJC5fX2EoQyl9ZnVuY3Rpb24gdDAoKXt0aGlzLmk9bnVsbCx0aGlzLmw9bnVsbH11LnVubW91bnQ9ZnVuY3Rpb24oQyl7dmFyICQ9Qy5fX2M7JCYmKCQuX196PSEwKSwkJiYkLl9fUiYmJC5fX1IoKSwkJiYzMiZDLl9fdSYmKEMudHlwZT1udWxsKSxSNSYmUjUoQyl9LChoMi5wcm90b3R5cGU9bmV3IFQxKS5fX2M9ZnVuY3Rpb24oQywkKXt2YXIgSz0kLl9fYyxYPXRoaXM7WC5vPT1udWxsJiYoWC5vPVtdKSxYLm8ucHVzaChLKTt2YXIgUT1kNShYLl9fdiksTj0hMSxaPWZ1bmN0aW9uKCl7Tnx8WC5fX3p8fChOPSEwLEsuX19SPW51bGwsUT9RKEcpOkcoKSl9O0suX19SPVo7dmFyIHE9Sy5fX1A7Sy5fX1A9bnVsbDt2YXIgRz1mdW5jdGlvbigpe2lmKCEtLVguX191KXtpZihYLnN0YXRlLl9fYSl7dmFyIFk9WC5zdGF0ZS5fX2E7WC5fX3YuX19rWzBdPW81KFksWS5fX2MuX19QLFkuX19jLl9fTyl9dmFyIFY7Zm9yKFguc2V0U3RhdGUoe19fYTpYLl9fYj1udWxsfSk7Vj1YLm8ucG9wKCk7KVYuX19QPXEsVi5mb3JjZVVwZGF0ZSgpfX07WC5fX3UrK3x8MzImJC5fX3V8fFguc2V0U3RhdGUoe19fYTpYLl9fYj1YLl9fdi5fX2tbMF19KSxDLnRoZW4oWixaKX0saDIucHJvdG90eXBlLmNvbXBvbmVudFdpbGxVbm1vdW50PWZ1bmN0aW9uKCl7dGhpcy5vPVtdfSxoMi5wcm90b3R5cGUucmVuZGVyPWZ1bmN0aW9uKEMsJCl7aWYodGhpcy5fX2Ipe2lmKHRoaXMuX192Ll9fayl7dmFyIEs9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksWD10aGlzLl9fdi5fX2tbMF0uX19jO3RoaXMuX192Ll9fa1swXT11NSh0aGlzLl9fYixLLFguX19PPVguX19QKX10aGlzLl9fYj1udWxsfXZhciBRPSQuX19hJiZ1MShxMSxudWxsLEMuZmFsbGJhY2spO3JldHVybiBRJiYoUS5fX3UmPS0zMyksW3UxKHExLG51bGwsJC5fX2E/bnVsbDpDLmNoaWxkcmVuKSxRXX07dmFyIG01PWZ1bmN0aW9uKEMsJCxLKXtpZigrK0tbMV09PT1LWzBdJiZDLmwuZGVsZXRlKCQpLEMucHJvcHMucmV2ZWFsT3JkZXImJihDLnByb3BzLnJldmVhbE9yZGVyWzBdIT09InQifHwhQy5sLnNpemUpKWZvcihLPUMuaTtLOyl7Zm9yKDtLLmxlbmd0aD4zOylLLnBvcCgpKCk7aWYoS1sxXTxLWzBdKWJyZWFrO0MuaT1LPUtbMl19fTsodDAucHJvdG90eXBlPW5ldyBUMSkuX19hPWZ1bmN0aW9uKEMpe3ZhciAkPXRoaXMsSz1kNSgkLl9fdiksWD0kLmwuZ2V0KEMpO3JldHVybiBYWzBdKyssZnVuY3Rpb24oUSl7dmFyIE49ZnVuY3Rpb24oKXskLnByb3BzLnJldmVhbE9yZGVyPyhYLnB1c2goUSksbTUoJCxDLFgpKTpRKCl9O0s/SyhOKTpOKCl9fSx0MC5wcm90b3R5cGUucmVuZGVyPWZ1bmN0aW9uKEMpe3RoaXMuaT1udWxsLHRoaXMubD1uZXcgTWFwO3ZhciAkPWExKEMuY2hpbGRyZW4pO0MucmV2ZWFsT3JkZXImJkMucmV2ZWFsT3JkZXJbMF09PT0iYiImJiQucmV2ZXJzZSgpO2Zvcih2YXIgSz0kLmxlbmd0aDtLLS07KXRoaXMubC5zZXQoJFtLXSx0aGlzLmk9WzEsMCx0aGlzLmldKTtyZXR1cm4gQy5jaGlsZHJlbn0sdDAucHJvdG90eXBlLmNvbXBvbmVudERpZFVwZGF0ZT10MC5wcm90b3R5cGUuY29tcG9uZW50RGlkTW91bnQ9ZnVuY3Rpb24oKXt2YXIgQz10aGlzO3RoaXMubC5mb3JFYWNoKGZ1bmN0aW9uKCQsSyl7bTUoQyxLLCQpfSl9O3ZhciBWOT10eXBlb2YgU3ltYm9sPCJ1IiYmU3ltYm9sLmZvciYmU3ltYm9sLmZvcigicmVhY3QuZWxlbWVudCIpfHw2MDEwMyxCOT0vXig/OmFjY2VudHxhbGlnbm1lbnR8YXJhYmljfGJhc2VsaW5lfGNhcHxjbGlwKD8hUGF0aFUpfGNvbG9yfGRvbWluYW50fGZpbGx8Zmxvb2R8Zm9udHxnbHlwaCg/IVIpfGhvcml6fGltYWdlKCFTKXxsZXR0ZXJ8bGlnaHRpbmd8bWFya2VyKD8hSHxXfFUpfG92ZXJsaW5lfHBhaW50fHBvaW50ZXJ8c2hhcGV8c3RvcHxzdHJpa2V0aHJvdWdofHN0cm9rZXx0ZXh0KD8hTCl8dHJhbnNmb3JtfHVuZGVybGluZXx1bmljb2RlfHVuaXRzfHZ8dmVjdG9yfHZlcnR8d29yZHx3cml0aW5nfHgoPyFDKSlbQS1aXS8sXzk9L15vbihBbml8VHJhfFRvdXxCZWZvcmVJbnB8Q29tcG8pLyxrOT0vW0EtWjAtOV0vZyxEOT10eXBlb2YgZG9jdW1lbnQ8InUiLFU5PWZ1bmN0aW9uKEMpe3JldHVybih0eXBlb2YgU3ltYm9sPCJ1IiYmdHlwZW9mIFN5bWJvbCgpPT0ic3ltYm9sIj8vZmlsfGNoZXxyYWQvOi9maWx8Y2hlfHJhLykudGVzdChDKX07ZnVuY3Rpb24gYzUoQywkLEspe3JldHVybiAkLl9faz09bnVsbCYmKCQudGV4dENvbnRlbnQ9IiIpLGkwKEMsJCksdHlwZW9mIEs9PSJmdW5jdGlvbiImJksoKSxDP0MuX19jOm51bGx9VDEucHJvdG90eXBlLmlzUmVhY3RDb21wb25lbnQ9ITAsWyJjb21wb25lbnRXaWxsTW91bnQiLCJjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzIiwiY29tcG9uZW50V2lsbFVwZGF0ZSJdLmZvckVhY2goZnVuY3Rpb24oQyl7T2JqZWN0LmRlZmluZVByb3BlcnR5KFQxLnByb3RvdHlwZSxDLHtjb25maWd1cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXNbIlVOU0FGRV8iK0NdfSxzZXQ6ZnVuY3Rpb24oJCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsQyx7Y29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOiR9KX19KX0pO3ZhciBqNT11LmV2ZW50O3UuZXZlbnQ9ZnVuY3Rpb24oQyl7cmV0dXJuIGo1JiYoQz1qNShDKSksQy5wZXJzaXN0PWZ1bmN0aW9uKCl7fSxDLmlzUHJvcGFnYXRpb25TdG9wcGVkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2FuY2VsQnViYmxlfSxDLmlzRGVmYXVsdFByZXZlbnRlZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmRlZmF1bHRQcmV2ZW50ZWR9LEMubmF0aXZlRXZlbnQ9Q307dmFyIGE1LEY5PXtjb25maWd1cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xhc3N9fSxwNT11LnZub2RlO3Uudm5vZGU9ZnVuY3Rpb24oQyl7dHlwZW9mIEMudHlwZT09InN0cmluZyImJmZ1bmN0aW9uKCQpe3Zhcntwcm9wczpLLHR5cGU6WH09JCxRPXt9LE49WC5pbmRleE9mKCItIik9PS0xO2Zvcih2YXIgWiBpbiBLKXt2YXIgcT1LW1pdO2lmKCEoWj09PSJ2YWx1ZSImJigiZGVmYXVsdFZhbHVlImluIEspJiZxPT1udWxsfHxEOSYmWj09PSJjaGlsZHJlbiImJlg9PT0ibm9zY3JpcHQifHxaPT09ImNsYXNzInx8Wj09PSJjbGFzc05hbWUiKSl7dmFyIEc9Wi50b0xvd2VyQ2FzZSgpO1o9PT0iZGVmYXVsdFZhbHVlIiYmInZhbHVlImluIEsmJksudmFsdWU9PW51bGw/Wj0idmFsdWUiOlo9PT0iZG93bmxvYWQiJiZxPT09ITA/cT0iIjpHPT09InRyYW5zbGF0ZSImJnE9PT0ibm8iP3E9ITE6R1swXT09PSJvIiYmR1sxXT09PSJuIj9HPT09Im9uZG91YmxlY2xpY2siP1o9Im9uZGJsY2xpY2siOkchPT0ib25jaGFuZ2UifHxYIT09ImlucHV0IiYmWCE9PSJ0ZXh0YXJlYSJ8fFU5KEsudHlwZSk/Rz09PSJvbmZvY3VzIj9aPSJvbmZvY3VzaW4iOkc9PT0ib25ibHVyIj9aPSJvbmZvY3Vzb3V0IjpfOS50ZXN0KFopJiYoWj1HKTpHPVo9Im9uaW5wdXQiOk4mJkI5LnRlc3QoWik/Wj1aLnJlcGxhY2UoazksIi0kJiIpLnRvTG93ZXJDYXNlKCk6cT09PW51bGwmJihxPXZvaWQgMCksRz09PSJvbmlucHV0IiYmUVtaPUddJiYoWj0ib25pbnB1dENhcHR1cmUiKSxRW1pdPXF9fVg9PSJzZWxlY3QiJiYoUS5tdWx0aXBsZSYmQXJyYXkuaXNBcnJheShRLnZhbHVlKSYmKFEudmFsdWU9YTEoSy5jaGlsZHJlbikuZm9yRWFjaChmdW5jdGlvbihZKXtZLnByb3BzLnNlbGVjdGVkPVEudmFsdWUuaW5kZXhPZihZLnByb3BzLnZhbHVlKSE9LTF9KSksUS5kZWZhdWx0VmFsdWUhPW51bGwmJihRLnZhbHVlPWExKEsuY2hpbGRyZW4pLmZvckVhY2goZnVuY3Rpb24oWSl7WS5wcm9wcy5zZWxlY3RlZD1RLm11bHRpcGxlP1EuZGVmYXVsdFZhbHVlLmluZGV4T2YoWS5wcm9wcy52YWx1ZSkhPS0xOlEuZGVmYXVsdFZhbHVlPT1ZLnByb3BzLnZhbHVlfSkpKSxLLmNsYXNzJiYhSy5jbGFzc05hbWU/KFEuY2xhc3M9Sy5jbGFzcyxPYmplY3QuZGVmaW5lUHJvcGVydHkoUSwiY2xhc3NOYW1lIixGOSkpOksuY2xhc3NOYW1lJiYoUS5jbGFzcz1RLmNsYXNzTmFtZT1LLmNsYXNzTmFtZSksJC5wcm9wcz1RfShDKSxDLiQkdHlwZW9mPVY5LHA1JiZwNShDKX07dmFyIGY1PXUuX19yO3UuX19yPWZ1bmN0aW9uKEMpe2Y1JiZmNShDKSxhNT1DLl9fY307dmFyIGw1PXUuZGlmZmVkO3UuZGlmZmVkPWZ1bmN0aW9uKEMpe2w1JiZsNShDKTt2YXJ7cHJvcHM6JCxfX2U6S309QztLIT1udWxsJiZDLnR5cGU9PT0idGV4dGFyZWEiJiYidmFsdWUiaW4gJCYmJC52YWx1ZSE9PUsudmFsdWUmJihLLnZhbHVlPSQudmFsdWU9PW51bGw/IiI6JC52YWx1ZSksYTU9bnVsbH07ZnVuY3Rpb24gaTUoQyl7cmV0dXJuISFDLl9fayYmKGkwKG51bGwsQyksITApfWZ1bmN0aW9uIHI1KEMpe3JldHVybntyZW5kZXI6ZnVuY3Rpb24oJCl7YzUoJCxDKX0sdW5tb3VudDpmdW5jdGlvbigpe2k1KEMpfX19ZnVuY3Rpb24gSjMoQywkKXtmb3IodmFyIEsgaW4gJClDW0tdPSRbS107cmV0dXJuIEN9ZnVuY3Rpb24gZzIoQywkKXtmb3IodmFyIEsgaW4gQylpZihLIT09Il9fc291cmNlIiYmIShLIGluICQpKXJldHVybiEwO2Zvcih2YXIgWCBpbiAkKWlmKFghPT0iX19zb3VyY2UiJiZDW1hdIT09JFtYXSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiBuNShDLCQpe3RoaXMucHJvcHM9Qyx0aGlzLmNvbnRleHQ9JH1mdW5jdGlvbiBrMChDLCQpe2Z1bmN0aW9uIEsoUSl7dmFyIE49dGhpcy5wcm9wcy5yZWY7cmV0dXJuIE4hPVEucmVmJiZOJiYodHlwZW9mIE49PSJmdW5jdGlvbiI/TihudWxsKTpOLmN1cnJlbnQ9bnVsbCksJD8hJCh0aGlzLnByb3BzLFEpfHxOIT1RLnJlZjpnMih0aGlzLnByb3BzLFEpfWZ1bmN0aW9uIFgoUSl7cmV0dXJuIHRoaXMuc2hvdWxkQ29tcG9uZW50VXBkYXRlPUssdTEoQyxRKX1yZXR1cm4gWC5kaXNwbGF5TmFtZT0iTWVtbygiKyhDLmRpc3BsYXlOYW1lfHxDLm5hbWUpKyIpIixYLl9fZj1YLnByb3RvdHlwZS5pc1JlYWN0Q29tcG9uZW50PSEwLFgudHlwZT1DLFh9KG41LnByb3RvdHlwZT1uZXcgVDEpLmlzUHVyZVJlYWN0Q29tcG9uZW50PSEwLG41LnByb3RvdHlwZS5zaG91bGRDb21wb25lbnRVcGRhdGU9ZnVuY3Rpb24oQywkKXtyZXR1cm4gZzIodGhpcy5wcm9wcyxDKXx8ZzIodGhpcy5zdGF0ZSwkKX07dmFyIHM1PXUuX19iO3UuX19iPWZ1bmN0aW9uKEMpe0MudHlwZSYmQy50eXBlLl9fZiYmQy5yZWYmJihDLnByb3BzLnJlZj1DLnJlZixDLnJlZj1udWxsKSxzNSYmczUoQyl9O3ZhciB6OT10eXBlb2YgU3ltYm9sPCJ1IiYmU3ltYm9sLmZvciYmU3ltYm9sLmZvcigicmVhY3QuZm9yd2FyZF9yZWYiKXx8MzkxMTtmdW5jdGlvbiBLMChDKXtmdW5jdGlvbiAkKEspe3ZhciBYPUozKHt9LEspO3JldHVybiBkZWxldGUgWC5yZWYsQyhYLEsucmVmfHxudWxsKX1yZXR1cm4gJC4kJHR5cGVvZj16OSwkLnJlbmRlcj1DLCQucHJvdG90eXBlLmlzUmVhY3RDb21wb25lbnQ9JC5fX2Y9ITAsJC5kaXNwbGF5TmFtZT0iRm9yd2FyZFJlZigiKyhDLmRpc3BsYXlOYW1lfHxDLm5hbWUpKyIpIiwkfXZhciBIOT11Ll9fZTt1Ll9fZT1mdW5jdGlvbihDLCQsSyxYKXtpZihDLnRoZW4pe2Zvcih2YXIgUSxOPSQ7Tj1OLl9fOylpZigoUT1OLl9fYykmJlEuX19jKXJldHVybiAkLl9fZT09bnVsbCYmKCQuX19lPUsuX19lLCQuX19rPUsuX19rKSxRLl9fYyhDLCQpfUg5KEMsJCxLLFgpfTt2YXIgdDU9dS51bm1vdW50O2Z1bmN0aW9uIFEzKEMsJCxLKXtyZXR1cm4gQyYmKEMuX19jJiZDLl9fYy5fX0gmJihDLl9fYy5fX0guX18uZm9yRWFjaChmdW5jdGlvbihYKXt0eXBlb2YgWC5fX2M9PSJmdW5jdGlvbiImJlguX19jKCl9KSxDLl9fYy5fX0g9bnVsbCksKEM9SjMoe30sQykpLl9fYyE9bnVsbCYmKEMuX19jLl9fUD09PUsmJihDLl9fYy5fX1A9JCksQy5fX2MuX19lPSEwLEMuX19jPW51bGwpLEMuX19rPUMuX19rJiZDLl9fay5tYXAoZnVuY3Rpb24oWCl7cmV0dXJuIFEzKFgsJCxLKX0pKSxDfWZ1bmN0aW9uIE4zKEMsJCxLKXtyZXR1cm4gQyYmSyYmKEMuX192PW51bGwsQy5fX2s9Qy5fX2smJkMuX19rLm1hcChmdW5jdGlvbihYKXtyZXR1cm4gTjMoWCwkLEspfSksQy5fX2MmJkMuX19jLl9fUD09PSQmJihDLl9fZSYmSy5hcHBlbmRDaGlsZChDLl9fZSksQy5fX2MuX19lPSEwLEMuX19jLl9fUD1LKSksQ31mdW5jdGlvbiB2Migpe3RoaXMuX191PTAsdGhpcy5vPW51bGwsdGhpcy5fX2I9bnVsbH1mdW5jdGlvbiBaMyhDKXt2YXIgJD1DLl9fJiZDLl9fLl9fYztyZXR1cm4gJCYmJC5fX2EmJiQuX19hKEMpfWZ1bmN0aW9uIGUwKCl7dGhpcy5pPW51bGwsdGhpcy5sPW51bGx9dS51bm1vdW50PWZ1bmN0aW9uKEMpe3ZhciAkPUMuX19jOyQmJigkLl9fej0hMCksJCYmJC5fX1ImJiQuX19SKCksJCYmMzImQy5fX3UmJihDLnR5cGU9bnVsbCksdDUmJnQ1KEMpfSwodjIucHJvdG90eXBlPW5ldyBUMSkuX19jPWZ1bmN0aW9uKEMsJCl7dmFyIEs9JC5fX2MsWD10aGlzO1gubz09bnVsbCYmKFgubz1bXSksWC5vLnB1c2goSyk7dmFyIFE9WjMoWC5fX3YpLE49ITEsWj1mdW5jdGlvbigpe058fFguX196fHwoTj0hMCxLLl9fUj1udWxsLFE/UShHKTpHKCkpfTtLLl9fUj1aO3ZhciBxPUsuX19QO0suX19QPW51bGw7dmFyIEc9ZnVuY3Rpb24oKXtpZighLS1YLl9fdSl7aWYoWC5zdGF0ZS5fX2Epe3ZhciBZPVguc3RhdGUuX19hO1guX192Ll9fa1swXT1OMyhZLFkuX19jLl9fUCxZLl9fYy5fX08pfXZhciBWO2ZvcihYLnNldFN0YXRlKHtfX2E6WC5fX2I9bnVsbH0pO1Y9WC5vLnBvcCgpOylWLl9fUD1xLFYuZm9yY2VVcGRhdGUoKX19O1guX191Kyt8fDMyJiQuX191fHxYLnNldFN0YXRlKHtfX2E6WC5fX2I9WC5fX3YuX19rWzBdfSksQy50aGVuKFosWil9LHYyLnByb3RvdHlwZS5jb21wb25lbnRXaWxsVW5tb3VudD1mdW5jdGlvbigpe3RoaXMubz1bXX0sdjIucHJvdG90eXBlLnJlbmRlcj1mdW5jdGlvbihDLCQpe2lmKHRoaXMuX19iKXtpZih0aGlzLl9fdi5fX2spe3ZhciBLPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLFg9dGhpcy5fX3YuX19rWzBdLl9fYzt0aGlzLl9fdi5fX2tbMF09UTModGhpcy5fX2IsSyxYLl9fTz1YLl9fUCl9dGhpcy5fX2I9bnVsbH12YXIgUT0kLl9fYSYmdTEocTEsbnVsbCxDLmZhbGxiYWNrKTtyZXR1cm4gUSYmKFEuX191Jj0tMzMpLFt1MShxMSxudWxsLCQuX19hP251bGw6Qy5jaGlsZHJlbiksUV19O3ZhciBlNT1mdW5jdGlvbihDLCQsSyl7aWYoKytLWzFdPT09S1swXSYmQy5sLmRlbGV0ZSgkKSxDLnByb3BzLnJldmVhbE9yZGVyJiYoQy5wcm9wcy5yZXZlYWxPcmRlclswXSE9PSJ0Inx8IUMubC5zaXplKSlmb3IoSz1DLmk7Szspe2Zvcig7Sy5sZW5ndGg+MzspSy5wb3AoKSgpO2lmKEtbMV08S1swXSlicmVhaztDLmk9Sz1LWzJdfX07KGUwLnByb3RvdHlwZT1uZXcgVDEpLl9fYT1mdW5jdGlvbihDKXt2YXIgJD10aGlzLEs9WjMoJC5fX3YpLFg9JC5sLmdldChDKTtyZXR1cm4gWFswXSsrLGZ1bmN0aW9uKFEpe3ZhciBOPWZ1bmN0aW9uKCl7JC5wcm9wcy5yZXZlYWxPcmRlcj8oWC5wdXNoKFEpLGU1KCQsQyxYKSk6USgpfTtLP0soTik6TigpfX0sZTAucHJvdG90eXBlLnJlbmRlcj1mdW5jdGlvbihDKXt0aGlzLmk9bnVsbCx0aGlzLmw9bmV3IE1hcDt2YXIgJD1hMShDLmNoaWxkcmVuKTtDLnJldmVhbE9yZGVyJiZDLnJldmVhbE9yZGVyWzBdPT09ImIiJiYkLnJldmVyc2UoKTtmb3IodmFyIEs9JC5sZW5ndGg7Sy0tOyl0aGlzLmwuc2V0KCRbS10sdGhpcy5pPVsxLDAsdGhpcy5pXSk7cmV0dXJuIEMuY2hpbGRyZW59LGUwLnByb3RvdHlwZS5jb21wb25lbnREaWRVcGRhdGU9ZTAucHJvdG90eXBlLmNvbXBvbmVudERpZE1vdW50PWZ1bmN0aW9uKCl7dmFyIEM9dGhpczt0aGlzLmwuZm9yRWFjaChmdW5jdGlvbigkLEspe2U1KEMsSywkKX0pfTt2YXIgQTk9dHlwZW9mIFN5bWJvbDwidSImJlN5bWJvbC5mb3ImJlN5bWJvbC5mb3IoInJlYWN0LmVsZW1lbnQiKXx8NjAxMDMsTzk9L14oPzphY2NlbnR8YWxpZ25tZW50fGFyYWJpY3xiYXNlbGluZXxjYXB8Y2xpcCg/IVBhdGhVKXxjb2xvcnxkb21pbmFudHxmaWxsfGZsb29kfGZvbnR8Z2x5cGgoPyFSKXxob3JpenxpbWFnZSghUyl8bGV0dGVyfGxpZ2h0aW5nfG1hcmtlcig/IUh8V3xVKXxvdmVybGluZXxwYWludHxwb2ludGVyfHNoYXBlfHN0b3B8c3RyaWtldGhyb3VnaHxzdHJva2V8dGV4dCg/IUwpfHRyYW5zZm9ybXx1bmRlcmxpbmV8dW5pY29kZXx1bml0c3x2fHZlY3Rvcnx2ZXJ0fHdvcmR8d3JpdGluZ3x4KD8hQykpW0EtWl0vLFQ5PS9eb24oQW5pfFRyYXxUb3V8QmVmb3JlSW5wfENvbXBvKS8sTTk9L1tBLVowLTldL2csdzk9dHlwZW9mIGRvY3VtZW50PCJ1IixiOT1mdW5jdGlvbihDKXtyZXR1cm4odHlwZW9mIFN5bWJvbDwidSImJnR5cGVvZiBTeW1ib2woKT09InN5bWJvbCI/L2ZpbHxjaGV8cmFkLzovZmlsfGNoZXxyYS8pLnRlc3QoQyl9O1QxLnByb3RvdHlwZS5pc1JlYWN0Q29tcG9uZW50PSEwLFsiY29tcG9uZW50V2lsbE1vdW50IiwiY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyIsImNvbXBvbmVudFdpbGxVcGRhdGUiXS5mb3JFYWNoKGZ1bmN0aW9uKEMpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShUMS5wcm90b3R5cGUsQyx7Y29uZmlndXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzWyJVTlNBRkVfIitDXX0sc2V0OmZ1bmN0aW9uKCQpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLEMse2NvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTokfSl9fSl9KTt2YXIgQzM9dS5ldmVudDt1LmV2ZW50PWZ1bmN0aW9uKEMpe3JldHVybiBDMyYmKEM9QzMoQykpLEMucGVyc2lzdD1mdW5jdGlvbigpe30sQy5pc1Byb3BhZ2F0aW9uU3RvcHBlZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNhbmNlbEJ1YmJsZX0sQy5pc0RlZmF1bHRQcmV2ZW50ZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kZWZhdWx0UHJldmVudGVkfSxDLm5hdGl2ZUV2ZW50PUN9O3ZhciBxMyxQOT17Y29uZmlndXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNsYXNzfX0sJDM9dS52bm9kZTt1LnZub2RlPWZ1bmN0aW9uKEMpe3R5cGVvZiBDLnR5cGU9PSJzdHJpbmciJiZmdW5jdGlvbigkKXt2YXJ7cHJvcHM6Syx0eXBlOlh9PSQsUT17fSxOPVguaW5kZXhPZigiLSIpPT0tMTtmb3IodmFyIFogaW4gSyl7dmFyIHE9S1taXTtpZighKFo9PT0idmFsdWUiJiYoImRlZmF1bHRWYWx1ZSJpbiBLKSYmcT09bnVsbHx8dzkmJlo9PT0iY2hpbGRyZW4iJiZYPT09Im5vc2NyaXB0Inx8Wj09PSJjbGFzcyJ8fFo9PT0iY2xhc3NOYW1lIikpe3ZhciBHPVoudG9Mb3dlckNhc2UoKTtaPT09ImRlZmF1bHRWYWx1ZSImJiJ2YWx1ZSJpbiBLJiZLLnZhbHVlPT1udWxsP1o9InZhbHVlIjpaPT09ImRvd25sb2FkIiYmcT09PSEwP3E9IiI6Rz09PSJ0cmFuc2xhdGUiJiZxPT09Im5vIj9xPSExOkdbMF09PT0ibyImJkdbMV09PT0ibiI/Rz09PSJvbmRvdWJsZWNsaWNrIj9aPSJvbmRibGNsaWNrIjpHIT09Im9uY2hhbmdlInx8WCE9PSJpbnB1dCImJlghPT0idGV4dGFyZWEifHxiOShLLnR5cGUpP0c9PT0ib25mb2N1cyI/Wj0ib25mb2N1c2luIjpHPT09Im9uYmx1ciI/Wj0ib25mb2N1c291dCI6VDkudGVzdChaKSYmKFo9Ryk6Rz1aPSJvbmlucHV0IjpOJiZPOS50ZXN0KFopP1o9Wi5yZXBsYWNlKE05LCItJCYiKS50b0xvd2VyQ2FzZSgpOnE9PT1udWxsJiYocT12b2lkIDApLEc9PT0ib25pbnB1dCImJlFbWj1HXSYmKFo9Im9uaW5wdXRDYXB0dXJlIiksUVtaXT1xfX1YPT0ic2VsZWN0IiYmKFEubXVsdGlwbGUmJkFycmF5LmlzQXJyYXkoUS52YWx1ZSkmJihRLnZhbHVlPWExKEsuY2hpbGRyZW4pLmZvckVhY2goZnVuY3Rpb24oWSl7WS5wcm9wcy5zZWxlY3RlZD1RLnZhbHVlLmluZGV4T2YoWS5wcm9wcy52YWx1ZSkhPS0xfSkpLFEuZGVmYXVsdFZhbHVlIT1udWxsJiYoUS52YWx1ZT1hMShLLmNoaWxkcmVuKS5mb3JFYWNoKGZ1bmN0aW9uKFkpe1kucHJvcHMuc2VsZWN0ZWQ9US5tdWx0aXBsZT9RLmRlZmF1bHRWYWx1ZS5pbmRleE9mKFkucHJvcHMudmFsdWUpIT0tMTpRLmRlZmF1bHRWYWx1ZT09WS5wcm9wcy52YWx1ZX0pKSksSy5jbGFzcyYmIUsuY2xhc3NOYW1lPyhRLmNsYXNzPUsuY2xhc3MsT2JqZWN0LmRlZmluZVByb3BlcnR5KFEsImNsYXNzTmFtZSIsUDkpKTpLLmNsYXNzTmFtZSYmKFEuY2xhc3M9US5jbGFzc05hbWU9Sy5jbGFzc05hbWUpLCQucHJvcHM9UX0oQyksQy4kJHR5cGVvZj1BOSwkMyYmJDMoQyl9O3ZhciBLMz11Ll9fcjt1Ll9fcj1mdW5jdGlvbihDKXtLMyYmSzMoQykscTM9Qy5fX2N9O3ZhciBYMz11LmRpZmZlZDt1LmRpZmZlZD1mdW5jdGlvbihDKXtYMyYmWDMoQyk7dmFye3Byb3BzOiQsX19lOkt9PUM7SyE9bnVsbCYmQy50eXBlPT09InRleHRhcmVhIiYmInZhbHVlImluICQmJiQudmFsdWUhPT1LLnZhbHVlJiYoSy52YWx1ZT0kLnZhbHVlPT1udWxsPyIiOiQudmFsdWUpLHEzPW51bGx9O3ZhciBYMD0zO2Z1bmN0aW9uIFIyKEMpe3JldHVybiBDPT09ImxhbmRzY2FwZV9sZWZ0Inx8Qz09PSJsYW5kc2NhcGVfcmlnaHQifWZ1bmN0aW9uIEQwKEMpe3JldHVybiEhQyYmKFIyKEMub3JpZW50YXRpb24pfHxDLndpZHRoPkMuaGVpZ2h0KX1mdW5jdGlvbiBVMChDKXtpZighQ3x8Qy53aWR0aDw9MHx8Qy5oZWlnaHQ8PTApcmV0dXJuIG51bGw7bGV0ICQ9UjIoQy5vcmllbnRhdGlvbil8fEMud2lkdGg+Qy5oZWlnaHQsSz0kP01hdGgubWF4KEMud2lkdGgsQy5oZWlnaHQpOk1hdGgubWluKEMud2lkdGgsQy5oZWlnaHQpLFg9JD9NYXRoLm1pbihDLndpZHRoLEMuaGVpZ2h0KTpNYXRoLm1heChDLndpZHRoLEMuaGVpZ2h0KTtpZihLPT09Qy53aWR0aCYmWD09PUMuaGVpZ2h0KXJldHVybiBDO3JldHVybnsuLi5DLHdpZHRoOkssaGVpZ2h0Olh9fWZ1bmN0aW9uIGgwKEMpe2xldCAkPVUwKEMpLEs9WTMoQz8ub3JpZW50YXRpb24pLFg9TWF0aC5hYnMoSyk9PT05MCxRPSEhQyYmQy53aWR0aD5DLmhlaWdodCxOPUs9PT0xODB8fFgmJiFRO3JldHVybntkaXNwbGF5Q29uZmlnOiQscm90YXRpb25EZWdyZWVzOk4/SzowLG5lZWRzQ3NzUm90YXRpb246TixpbnB1dE9yaWVudGF0aW9uOk4/Qz8ub3JpZW50YXRpb246dm9pZCAwfX1mdW5jdGlvbiBZMyhDKXtzd2l0Y2goQyl7Y2FzZSJsYW5kc2NhcGVfbGVmdCI6cmV0dXJuIDkwO2Nhc2UibGFuZHNjYXBlX3JpZ2h0IjpyZXR1cm4tOTA7Y2FzZSJwb3J0cmFpdF91cHNpZGVfZG93biI6cmV0dXJuIDE4MDtkZWZhdWx0OnJldHVybiAwfX1mdW5jdGlvbiB4MChDLCQsSyl7c3dpdGNoKEMpe2Nhc2UibGFuZHNjYXBlX2xlZnQiOnJldHVybnt4OksseToxLSR9O2Nhc2UibGFuZHNjYXBlX3JpZ2h0IjpyZXR1cm57eDoxLUsseTokfTtjYXNlInBvcnRyYWl0X3Vwc2lkZV9kb3duIjpyZXR1cm57eDoxLSQseToxLUt9O2RlZmF1bHQ6cmV0dXJue3g6JCx5Okt9fX1mdW5jdGlvbiBtMihDLCQpe3N3aXRjaChDKXtjYXNlImxhbmRzY2FwZV9sZWZ0Ijpzd2l0Y2goJCl7Y2FzZSAxOnJldHVybiAzO2Nhc2UgNDpyZXR1cm4gMjtjYXNlIDI6cmV0dXJuIDE7Y2FzZSAzOnJldHVybiA0O2RlZmF1bHQ6cmV0dXJuICR9Y2FzZSJsYW5kc2NhcGVfcmlnaHQiOnN3aXRjaCgkKXtjYXNlIDE6cmV0dXJuIDI7Y2FzZSA0OnJldHVybiAzO2Nhc2UgMjpyZXR1cm4gNDtjYXNlIDM6cmV0dXJuIDE7ZGVmYXVsdDpyZXR1cm4gJH1jYXNlInBvcnRyYWl0X3Vwc2lkZV9kb3duIjpzd2l0Y2goJCl7Y2FzZSAxOnJldHVybiA0O2Nhc2UgNDpyZXR1cm4gMTtjYXNlIDI6cmV0dXJuIDM7Y2FzZSAzOnJldHVybiAyO2RlZmF1bHQ6cmV0dXJuICR9ZGVmYXVsdDpyZXR1cm4gJH19dmFyIFc5PTA7ZnVuY3Rpb24gSihDLCQsSyxYLFEsTil7JHx8KCQ9e30pO3ZhciBaLHEsRz0kO2lmKCJyZWYiaW4gRylmb3IocSBpbiBHPXt9LCQpcT09InJlZiI/Wj0kW3FdOkdbcV09JFtxXTt2YXIgWT17dHlwZTpDLHByb3BzOkcsa2V5OksscmVmOlosX19rOm51bGwsX186bnVsbCxfX2I6MCxfX2U6bnVsbCxfX2M6bnVsbCxjb25zdHJ1Y3Rvcjp2b2lkIDAsX192Oi0tVzksX19pOi0xLF9fdTowLF9fc291cmNlOlEsX19zZWxmOk59O2lmKHR5cGVvZiBDPT0iZnVuY3Rpb24iJiYoWj1DLmRlZmF1bHRQcm9wcykpZm9yKHEgaW4gWilHW3FdPT09dm9pZCAwJiYoR1txXT1aW3FdKTtyZXR1cm4gdS52bm9kZSYmdS52bm9kZShZKSxZfXZhciBHMz1gdXJsKCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzI0JyBoZWlnaHQ9JzI0JyUzRSUzQ2NpcmNsZSBjeD0nMTInIGN5PScxMicgcj0nOScgZmlsbD0ncmdiYSgyNTUsMjU1LDI1NSwwLjQ1KScgc3Ryb2tlPSdyZ2JhKDAsMCwwLDAuNTUpJyBzdHJva2Utd2lkdGg9JzEuMjUnIGZpbHRlcj0nZHJvcC1zaGFkb3coMCAxcHggMnB4IHJnYmEoMCwwLDAsMC40NSkpJy8lM0UlM0Mvc3ZnJTNFIikgMTIgMTIsIHBvaW50ZXJgLHk5PTMsRTk9NCxJOT01O2Z1bmN0aW9uIEMyKHt1cmw6Qyx3c1VybDokLHN0eWxlOkssaW1hZ2VTdHlsZTpYLGNsYXNzTmFtZTpRLG9uSG9tZVByZXNzOk4sb25TdHJlYW1Ub3VjaDpaLG9uU3RyZWFtTXVsdGlUb3VjaDpxLG9uU3RyZWFtQnV0dG9uOkcsc3Vic2NyaWJlRnJhbWU6WSxzdHJlYW1GcmFtZTpWLHN0cmVhbUNvbmZpZzpMLG9uU2NyZWVuQ29uZmlnQ2hhbmdlOmssaGlkZUNvbnRyb2xzOkQsb25TdHJlYW1pbmdDaGFuZ2U6VCxjb25uZWN0aW9uUXVhbGl0eTpCfSl7bGV0IF89ISFaLFU9dihudWxsKSxNPXYobnVsbCksRT12KG51bGwpLHk9dihudWxsKSxbYyxSXT1BKCExKSxbUyx4XT1BKG51bGwpLFtmLGRdPUEobnVsbCksbz12KG51bGwpLFExPXYoayk7UTEuY3VycmVudD1rO2xldCBuPXYobnVsbCksW3MsZ109QShudWxsKTtXKCgpPT57bGV0IEY9bi5jdXJyZW50O2lmKCFGfHx0eXBlb2YgUmVzaXplT2JzZXJ2ZXI+InUiKXJldHVybjtsZXQgej1uZXcgUmVzaXplT2JzZXJ2ZXIoKGIpPT57bGV0IGw9YlswXT8uY29udGVudFJlY3Q7aWYobClnKHt3aWR0aDpsLndpZHRoLGhlaWdodDpsLmhlaWdodH0pfSk7cmV0dXJuIHoub2JzZXJ2ZShGKSwoKT0+ei5kaXNjb25uZWN0KCl9LFtdKTtsZXRbSSxOMV09QSgwKSxDMT12KDApLFtaMSxLMV09QSghMSksJDE9dihudWxsKTtXKCgpPT57aWYoQj09PSJwb29yIil7aWYoSzEoITApLCQxLmN1cnJlbnQpY2xlYXJUaW1lb3V0KCQxLmN1cnJlbnQpOyQxLmN1cnJlbnQ9c2V0VGltZW91dCgoKT0+e0sxKCExKSwkMS5jdXJyZW50PW51bGx9LDMwMDApfWVsc2UgaWYoSzEoITEpLCQxLmN1cnJlbnQpY2xlYXJUaW1lb3V0KCQxLmN1cnJlbnQpLCQxLmN1cnJlbnQ9bnVsbDtyZXR1cm4oKT0+e2lmKCQxLmN1cnJlbnQpY2xlYXJUaW1lb3V0KCQxLmN1cnJlbnQpfX0sW0JdKTtsZXQgWDE9YCR7Q30vc3RyZWFtLm1qcGVnYDtXKCgpPT57by5jdXJyZW50PW51bGwsZChudWxsKX0sW0NdKTtsZXQgTz1QKChGKT0+e2lmKCFGfHxGLndpZHRoPD0wfHxGLmhlaWdodDw9MClyZXR1cm47bGV0IHo9by5jdXJyZW50LGI9Ri5vcmllbnRhdGlvbj09PXZvaWQgMCYmej8ub3JpZW50YXRpb24/ey4uLkYsb3JpZW50YXRpb246ei5vcmllbnRhdGlvbn06RjtpZih6JiZ6LndpZHRoPT09Yi53aWR0aCYmei5oZWlnaHQ9PT1iLmhlaWdodCYmei5vcmllbnRhdGlvbj09PWIub3JpZW50YXRpb24pcmV0dXJuO28uY3VycmVudD1iLGQoYiksUTEuY3VycmVudD8uKGIpfSxbXSksaD12KFQpO2guY3VycmVudD1ULFcoKCk9PntoLmN1cnJlbnQ/LihjKX0sW2NdKSxXKCgpPT57aWYoXyYmTClPKEwpfSxbXyxMLE9dKTtsZXQgaj12KCExKTtqLmN1cnJlbnQ9YztsZXQgaT12KG51bGwpO1coKCk9PntpZighX3x8IVkpcmV0dXJuO2xldCB6PXNldFRpbWVvdXQoKCk9PntpZighai5jdXJyZW50KXgoIlN0cmVhbSBpcyBub3QgcHJvZHVjaW5nIGZyYW1lcy4gVGhlIHNpbXVsYXRvciBtYXkgaGF2ZSBzdG9wcGVkIOKAlCB0cnkgcmVjb25uZWN0aW5nLiIpfSw2MDAwKSxiPVkoKGwpPT57QzEuY3VycmVudCsrLE8xLmN1cnJlbnQ9RGF0ZS5ub3coKTtsZXQgcj1NLmN1cnJlbnQ7aWYocil7aWYoaS5jdXJyZW50KVVSTC5yZXZva2VPYmplY3RVUkwoaS5jdXJyZW50KTtpLmN1cnJlbnQ9bCxyLnNyYz1sfWlmKCFqLmN1cnJlbnQpY2xlYXJUaW1lb3V0KHopLFIoITApLHgobnVsbCl9KTtyZXR1cm4oKT0+e2lmKGNsZWFyVGltZW91dCh6KSxiPy4oKSxpLmN1cnJlbnQpVVJMLnJldm9rZU9iamVjdFVSTChpLmN1cnJlbnQpLGkuY3VycmVudD1udWxsfX0sW18sWV0pO2xldCBlPVAoKEYpPT57bGV0IHo9aDAoby5jdXJyZW50KS5pbnB1dE9yaWVudGF0aW9uLGI9eDAoeixGLngsRi55KSxsPUYuZWRnZT09PXZvaWQgMD92b2lkIDA6bTIoeixGLmVkZ2UpLHI9bD09PXZvaWQgMD97dHlwZTpGLnR5cGUsLi4uYn06e3R5cGU6Ri50eXBlLC4uLmIsZWRnZTpsfTtpZihfKXtaPy4ocik7cmV0dXJufWxldCBIPXkuY3VycmVudDtpZighSHx8SC5yZWFkeVN0YXRlIT09V2ViU29ja2V0Lk9QRU4pcmV0dXJuO2xldCBtPW5ldyBUZXh0RW5jb2RlcigpLmVuY29kZShKU09OLnN0cmluZ2lmeShyKSksYT1uZXcgVWludDhBcnJheSgxK20ubGVuZ3RoKTthWzBdPXk5LGEuc2V0KG0sMSksSC5zZW5kKGEpfSxbXyxaXSksVTE9UCgoRik9PntpZihfKXtHPy4oRik7cmV0dXJufWxldCB6PXkuY3VycmVudDtpZighenx8ei5yZWFkeVN0YXRlIT09V2ViU29ja2V0Lk9QRU4pcmV0dXJuO2xldCBiPW5ldyBUZXh0RW5jb2RlcigpLmVuY29kZShKU09OLnN0cmluZ2lmeSh7YnV0dG9uOkZ9KSksbD1uZXcgVWludDhBcnJheSgxK2IubGVuZ3RoKTtsWzBdPUU5LGwuc2V0KGIsMSksei5zZW5kKGwpfSxbXyxHXSksTDE9UCgoRik9PntsZXQgej1oMChvLmN1cnJlbnQpLmlucHV0T3JpZW50YXRpb24sYj14MCh6LEYueDEsRi55MSksbD14MCh6LEYueDIsRi55Mikscj17dHlwZTpGLnR5cGUseDE6Yi54LHkxOmIueSx4MjpsLngseTI6bC55fTtpZihfKXtxPy4ocik7cmV0dXJufWxldCBIPXkuY3VycmVudDtpZighSHx8SC5yZWFkeVN0YXRlIT09V2ViU29ja2V0Lk9QRU4pcmV0dXJuO2xldCBtPW5ldyBUZXh0RW5jb2RlcigpLmVuY29kZShKU09OLnN0cmluZ2lmeShyKSksYT1uZXcgVWludDhBcnJheSgxK20ubGVuZ3RoKTthWzBdPUk5LGEuc2V0KG0sMSksSC5zZW5kKGEpfSxbXyxxXSk7VygoKT0+e2lmKF8pcmV0dXJuO2xldCBGPW5ldyBBYm9ydENvbnRyb2xsZXIsej0oKT0+e2ZldGNoKGAke0N9L2NvbmZpZ2Ase3NpZ25hbDpGLnNpZ25hbH0pLnRoZW4oKEYxKT0+RjEuanNvbigpKS50aGVuKChGMSk9PntPKEYxKX0pLmNhdGNoKCgpPT57fSl9O3ooKTtsZXQgYj1zZXRJbnRlcnZhbCh6LDEwMDApLGw9JD8/Qy5yZXBsYWNlKC9eaHR0cC8sIndzIikrIi93cyIscj1uZXcgV2ViU29ja2V0KGwpO3IuYmluYXJ5VHlwZT0iYXJyYXlidWZmZXIiLHkuY3VycmVudD1yLHIub25vcGVuPSgpPT57UighMCkseChudWxsKX0sci5vbmNsb3NlPSgpPT57UighMSl9LHIub25lcnJvcj0oKT0+e3goIldlYlNvY2tldCBjb25uZWN0aW9uIGZhaWxlZCIpLFIoITEpfTtsZXQgSD1uZXcgQWJvcnRDb250cm9sbGVyLG09c2V0SW50ZXJ2YWwoKCk9PntOMShDMS5jdXJyZW50KSxDMS5jdXJyZW50PTB9LDEwMDApLGE9ITEsQjE9c2V0VGltZW91dCgoKT0+e2lmKCFhKXgoIlN0cmVhbSBpcyBub3QgcHJvZHVjaW5nIGZyYW1lcy4gVGhlIHNpbXVsYXRvciBtYXkgaGF2ZSBzdG9wcGVkIOKAlCB0cnkgcmVjb25uZWN0aW5nLiIpfSw2MDAwKTtyZXR1cm4oYXN5bmMoKT0+e3RyeXtsZXQgRDE9KGF3YWl0IGZldGNoKFgxLHtzaWduYWw6SC5zaWduYWx9KSkuYm9keT8uZ2V0UmVhZGVyKCk7aWYoIUQxKXJldHVybjtsZXQgVzE9bmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKCItLWZyYW1lIik7d2hpbGUoITApe2xldHtkb25lOnAwLHZhbHVlOnkwfT1hd2FpdCBEMS5yZWFkKCk7aWYocDApYnJlYWs7aWYoeTApZm9yKGxldCBMMD0wO0wwPD15MC5sZW5ndGgtVzEubGVuZ3RoO0wwKyspe2xldCBGMj0hMDtmb3IobGV0IFYwPTA7VjA8VzEubGVuZ3RoO1YwKyspaWYoeTBbTDArVjBdIT09VzFbVjBdKXtGMj0hMTticmVha31pZihGMil7aWYoQzEuY3VycmVudCsrLCFhKWE9ITAsY2xlYXJUaW1lb3V0KEIxKX19fX1jYXRjaHt9fSkoKSwoKT0+e0guYWJvcnQoKSxGLmFib3J0KCksY2xlYXJJbnRlcnZhbChiKSxjbGVhckludGVydmFsKG0pLGNsZWFyVGltZW91dChCMSksci5jbG9zZSgpLHkuY3VycmVudD1udWxsfX0sW0MsWDEsXyxPLCRdKTtsZXQgTzE9digwKTtXKCgpPT57aWYoIV8pcmV0dXJuO2xldCBGPTIwMDAsej0oKT0+e2xldCByPU8xLmN1cnJlbnQ7aWYoIXJ8fCFqLmN1cnJlbnQpcmV0dXJuO2lmKERhdGUubm93KCktcj5GKVIoITEpfSxiPXNldEludGVydmFsKCgpPT57TjEoQzEuY3VycmVudCksQzEuY3VycmVudD0wLHooKX0sMTAwMCksbD0oKT0+e2lmKCFkb2N1bWVudC5oaWRkZW4peigpfTtyZXR1cm4gZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigidmlzaWJpbGl0eWNoYW5nZSIsbCksKCk9PntjbGVhckludGVydmFsKGIpLGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInZpc2liaWxpdHljaGFuZ2UiLGwpfX0sW19dKTtsZXQgeTE9UCgoKT0+e3JldHVybiBfP00uY3VycmVudDpVLmN1cnJlbnR9LFtfXSksXzE9UCgoKT0+e3JldHVybiBFLmN1cnJlbnQ/LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpPz95MSgpPy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKT8/bnVsbH0sW3kxXSksdzE9UCgoRix6KT0+e2xldCBiPV8xKCk7aWYoIWIpcmV0dXJuO2xldCBsPSh6LmNsaWVudFgtYi5sZWZ0KS9iLndpZHRoLHI9KHouY2xpZW50WS1iLnRvcCkvYi5oZWlnaHQ7ZSh7dHlwZTpGLHg6bCx5OnJ9KX0sW18xLGVdKSxKMT12KCExKSxHMT12KCExKSxSMT12KCExKSxtMT12KHtkeDowLGR5OjB9KSxiMT12KCExKSxbSTEscTBdPUEoITEpLGoxPXYoe3g6MC41LHk6MC41fSksW2gxLEExXT1BKG51bGwpO1coKCk9PntsZXQgRj0oYik9PntpZihiLmtleT09PSJBbHQiKXEwKCEwKX0sej0oYik9PntpZihiLmtleT09PSJBbHQiKXtpZihxMCghMSksIUcxLmN1cnJlbnQpQTEobnVsbCl9fTtyZXR1cm4gd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLEYpLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJrZXl1cCIseiksKCk9Pnt3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsRiksd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoImtleXVwIix6KX19LFtdKSxXKCgpPT57aWYoSTEmJiFHMS5jdXJyZW50KXtsZXQgRj1qMS5jdXJyZW50O0ExKHt4MTpGLngseTE6Ri55LHgyOjEtRi54LHkyOjEtRi55fSl9ZWxzZSBpZighSTEmJiFHMS5jdXJyZW50KUExKG51bGwpfSxbSTFdKTtsZXQgcDE9dihudWxsKSxyMT12KCExKSxFMT12KDApLFkwPVAoKEYseik9PntyMS5jdXJyZW50PSEwO2xldCBiPXAxLmN1cnJlbnQ7aWYoYiljYW5jZWxBbmltYXRpb25GcmFtZShFMS5jdXJyZW50KSxFMS5jdXJyZW50PXJlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+e2Iuc3R5bGUubGVmdD1gJHtGKjEwMH0lYCxiLnN0eWxlLnRvcD1gJHt6KjEwMH0lYCxiLnN0eWxlLmRpc3BsYXk9ImJsb2NrIn0pfSxbXSkseDE9UCgoRix6KT0+e2lmKCFyMS5jdXJyZW50KXJldHVybjtsZXQgYj1wMS5jdXJyZW50O2lmKGIpY2FuY2VsQW5pbWF0aW9uRnJhbWUoRTEuY3VycmVudCksRTEuY3VycmVudD1yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9PntiLnN0eWxlLmxlZnQ9YCR7RioxMDB9JWAsYi5zdHlsZS50b3A9YCR7eioxMDB9JWB9KX0sW10pLGYxPVAoKCk9PntyMS5jdXJyZW50PSExO2xldCBGPXAxLmN1cnJlbnQ7aWYoRiljYW5jZWxBbmltYXRpb25GcmFtZShFMS5jdXJyZW50KSxGLnN0eWxlLmRpc3BsYXk9Im5vbmUifSxbXSksRzA9digwKSxZMT12KG51bGwpLG4xPVAoKCk9PntsZXQgRj1EYXRlLm5vdygpLHo9Ri1HMC5jdXJyZW50O2lmKEcwLmN1cnJlbnQ9Rix6PDMwMCl7aWYoWTEuY3VycmVudCljbGVhclRpbWVvdXQoWTEuY3VycmVudCksWTEuY3VycmVudD1udWxsO2lmKE4pTigpO2Vsc2UgVTEoImFwcF9zd2l0Y2hlciIpfWVsc2UgWTEuY3VycmVudD1zZXRUaW1lb3V0KCgpPT57aWYoTilOKCk7ZWxzZSBVMSgiaG9tZSIpO1kxLmN1cnJlbnQ9bnVsbH0sMzAwKX0sW1UxLE5dKSxzMT1oMChmKSxsMT1zMS5kaXNwbGF5Q29uZmlnLHYxPSgoKT0+e2lmKCFsMXx8IXMpcmV0dXJuIG51bGw7aWYocy53aWR0aD09PTB8fHMuaGVpZ2h0PT09MClyZXR1cm4gbnVsbDtsZXQgRj1NYXRoLm1pbihzLndpZHRoL2wxLndpZHRoLHMuaGVpZ2h0L2wxLmhlaWdodCk7cmV0dXJue3dpZHRoOmwxLndpZHRoKkYsaGVpZ2h0OmwxLmhlaWdodCpGfX0pKCksZDE9czEucm90YXRpb25EZWdyZWVzLHc9czEubmVlZHNDc3NSb3RhdGlvbiYmTWF0aC5hYnMoZDEpPT09OTAscD1YLHQ9e3Bvc2l0aW9uOiJhYnNvbHV0ZSIsdG9wOiI1MCUiLGxlZnQ6IjUwJSIsd2lkdGg6dyYmdjE/YCR7djEuaGVpZ2h0fXB4YDoiMTAwJSIsaGVpZ2h0OncmJnYxP2Ake3YxLndpZHRofXB4YDoiMTAwJSIsdHJhbnNmb3JtOmB0cmFuc2xhdGUoLTUwJSwgLTUwJSkke2QxPT09MD8iIjpgIHJvdGF0ZSgke2QxfWRlZylgfWAsdHJhbnNmb3JtT3JpZ2luOiJjZW50ZXIgY2VudGVyIixjdXJzb3I6RzMsZGlzcGxheToiYmxvY2siLHVzZXJTZWxlY3Q6Im5vbmUiLFdlYmtpdFVzZXJTZWxlY3Q6Im5vbmUiLHRvdWNoQWN0aW9uOiJub25lIiwuLi5YLC4uLmQxPT09MD97fTp7Ym9yZGVyUmFkaXVzOjAsY29ybmVyU2hhcGU6dm9pZCAwfX07cmV0dXJuIEooImRpdiIse3N0eWxlOntkaXNwbGF5OiJmbGV4IixmbGV4RGlyZWN0aW9uOiJjb2x1bW4iLGZsZXg6MSwuLi5EP3t9Ontib3JkZXI6IjFweCBzb2xpZCByZ2JhKDI1NSwyNTUsMjU1LDAuMTIpIn0sb3ZlcmZsb3c6ImhpZGRlbiIsbWluV2lkdGg6MCxtaW5IZWlnaHQ6MCwuLi5LfSxjbGFzc05hbWU6USxjaGlsZHJlbjpbSigiZGl2Iix7cmVmOm4sc3R5bGU6e3Bvc2l0aW9uOiJyZWxhdGl2ZSIsZmxleDoxLG1pbkhlaWdodDowLG1pbldpZHRoOjAsZGlzcGxheToiZmxleCIsYWxpZ25JdGVtczoiY2VudGVyIixqdXN0aWZ5Q29udGVudDoiY2VudGVyIn0sY2hpbGRyZW46SigiZGl2Iix7cmVmOkUsc3R5bGU6e3Bvc2l0aW9uOiJyZWxhdGl2ZSIsd2lkdGg6djE/YCR7djEud2lkdGh9cHhgOiIxMDAlIixoZWlnaHQ6djE/YCR7djEuaGVpZ2h0fXB4YDoiMTAwJSIsb3ZlcmZsb3c6ImhpZGRlbiIsYm9yZGVyUmFkaXVzOnA/LmJvcmRlclJhZGl1cyxjb3JuZXJTaGFwZTpwPy5jb3JuZXJTaGFwZX0sY2hpbGRyZW46W0ooImltZyIse3JlZjpVLHNyYzpfP3ZvaWQgMDpYMSxkcmFnZ2FibGU6ITEsb25Mb2FkOihGKT0+e2xldCB6PUYuY3VycmVudFRhcmdldDtpZih6Lm5hdHVyYWxXaWR0aD4wJiZ6Lm5hdHVyYWxIZWlnaHQ+MClPKHt3aWR0aDp6Lm5hdHVyYWxXaWR0aCxoZWlnaHQ6ei5uYXR1cmFsSGVpZ2h0fSl9LHN0eWxlOl8/e2Rpc3BsYXk6Im5vbmUifTp0fSksXyYmSigiaW1nIix7cmVmOk0sZHJhZ2dhYmxlOiExLG9uTG9hZDooRik9PntsZXQgej1GLmN1cnJlbnRUYXJnZXQ7aWYoei5uYXR1cmFsV2lkdGg+MCYmei5uYXR1cmFsSGVpZ2h0PjApTyh7d2lkdGg6ei5uYXR1cmFsV2lkdGgsaGVpZ2h0OnoubmF0dXJhbEhlaWdodH0pfSxzdHlsZTp0fSksSigiZGl2Iix7c3R5bGU6e3Bvc2l0aW9uOiJhYnNvbHV0ZSIsaW5zZXQ6MCxjdXJzb3I6RzMsdG91Y2hBY3Rpb246Im5vbmUifSxvbk1vdXNlRG93bjooRik9PntGLnByZXZlbnREZWZhdWx0KCk7bGV0IHo9XzEoKTtpZigheilyZXR1cm47bGV0IGI9KEYuY2xpZW50WC16LmxlZnQpL3oud2lkdGgsbD0oRi5jbGllbnRZLXoudG9wKS96LmhlaWdodDtpZihGLmFsdEtleSl7RzEuY3VycmVudD0hMCxSMS5jdXJyZW50PUYuc2hpZnRLZXk7bGV0IHI9e3gxOmIseTE6bCx4MjoxLWIseTI6MS1sfTttMS5jdXJyZW50PXtkeDoxLWItYixkeToxLWwtbH0sQTEociksTDEoe3R5cGU6ImJlZ2luIiwuLi5yfSk7cmV0dXJufWlmKFkwKGIsbCksbD4wLjg4KUoxLmN1cnJlbnQ9ITAsZSh7dHlwZToiYmVnaW4iLHg6Yix5OmwsZWRnZTpYMH0pO2Vsc2UgSjEuY3VycmVudD0hMSx3MSgiYmVnaW4iLEYpfSxvbk1vdXNlTW92ZTooRik9PntsZXQgej1fMSgpO2lmKCF6KXJldHVybjtsZXQgYj0oRi5jbGllbnRYLXoubGVmdCkvei53aWR0aCxsPShGLmNsaWVudFktei50b3ApL3ouaGVpZ2h0O2lmKGoxLmN1cnJlbnQ9e3g6Yix5Omx9LEYuYnV0dG9ucz09PTApe2lmKEYuYWx0S2V5KUExKHt4MTpiLHkxOmwseDI6MS1iLHkyOjEtbH0pO3JldHVybn1pZihHMS5jdXJyZW50KXtsZXQgcjtpZihSMS5jdXJyZW50KXtsZXQgSD1tMS5jdXJyZW50O3I9e3gxOmIseTE6bCx4MjpiK0guZHgseTI6bCtILmR5fX1lbHNlIHI9e3gxOmIseTE6bCx4MjoxLWIseTI6MS1sfTtBMShyKSxMMSh7dHlwZToibW92ZSIsLi4ucn0pO3JldHVybn1pZih4MShiLGwpLEoxLmN1cnJlbnQpZSh7dHlwZToibW92ZSIseDpiLHk6bCxlZGdlOlgwfSk7ZWxzZSB3MSgibW92ZSIsRil9LG9uTW91c2VVcDooRik9PntpZihHMS5jdXJyZW50KXtsZXQgej1fMSgpO2lmKHope2xldCBiPShGLmNsaWVudFgtei5sZWZ0KS96LndpZHRoLGw9KEYuY2xpZW50WS16LnRvcCkvei5oZWlnaHQ7aWYoUjEuY3VycmVudCl7bGV0IHI9bTEuY3VycmVudDtMMSh7dHlwZToiZW5kIix4MTpiLHkxOmwseDI6YityLmR4LHkyOmwrci5keX0pfWVsc2UgTDEoe3R5cGU6ImVuZCIseDE6Yix5MTpsLHgyOjEtYix5MjoxLWx9KX1pZihHMS5jdXJyZW50PSExLCFGLmFsdEtleSlBMShudWxsKTtyZXR1cm59aWYoZjEoKSxKMS5jdXJyZW50KXtsZXQgej1fMSgpO2lmKHope2xldCBiPShGLmNsaWVudFgtei5sZWZ0KS96LndpZHRoLGw9KEYuY2xpZW50WS16LnRvcCkvei5oZWlnaHQ7ZSh7dHlwZToiZW5kIix4OmIseTpsLGVkZ2U6WDB9KX1KMS5jdXJyZW50PSExO3JldHVybn13MSgiZW5kIixGKX0sb25Nb3VzZUxlYXZlOihGKT0+e2lmKEcxLmN1cnJlbnQpe2lmKGgxKUwxKHt0eXBlOiJlbmQiLC4uLmgxfSk7RzEuY3VycmVudD0hMSxBMShudWxsKTtyZXR1cm59aWYoZjEoKSxKMS5jdXJyZW50KXtsZXQgej1fMSgpO2lmKHope2xldCBiPShGLmNsaWVudFgtei5sZWZ0KS96LndpZHRoLGw9KEYuY2xpZW50WS16LnRvcCkvei5oZWlnaHQ7ZSh7dHlwZToiZW5kIix4OmIseTpsLGVkZ2U6WDB9KX1KMS5jdXJyZW50PSExO3JldHVybn1pZihGLmJ1dHRvbnM+MCl3MSgiZW5kIixGKTtBMShudWxsKX0sb25Ub3VjaFN0YXJ0OihGKT0+e0YucHJldmVudERlZmF1bHQoKTtsZXQgej1fMSgpO2lmKCF6KXJldHVybjtpZihGLnRvdWNoZXMubGVuZ3RoPj0yKXtmMSgpO2xldCBIPUYudG91Y2hlc1swXSxtPUYudG91Y2hlc1sxXSxhPXt4MTooSC5jbGllbnRYLXoubGVmdCkvei53aWR0aCx5MTooSC5jbGllbnRZLXoudG9wKS96LmhlaWdodCx4MjoobS5jbGllbnRYLXoubGVmdCkvei53aWR0aCx5MjoobS5jbGllbnRZLXoudG9wKS96LmhlaWdodH07aWYoIWIxLmN1cnJlbnQmJiFKMS5jdXJyZW50KWUoe3R5cGU6ImVuZCIseDphLngxLHk6YS55MX0pO2IxLmN1cnJlbnQ9ITAsRzEuY3VycmVudD0hMCxKMS5jdXJyZW50PSExLEExKGEpLEwxKHt0eXBlOiJiZWdpbiIsLi4uYX0pO3JldHVybn1sZXQgYj1GLnRvdWNoZXNbMF07aWYoIWIpcmV0dXJuO2xldCBsPShiLmNsaWVudFgtei5sZWZ0KS96LndpZHRoLHI9KGIuY2xpZW50WS16LnRvcCkvei5oZWlnaHQ7aWYoWTAobCxyKSxyPjAuODgpSjEuY3VycmVudD0hMCxlKHt0eXBlOiJiZWdpbiIseDpsLHk6cixlZGdlOlgwfSk7ZWxzZSBKMS5jdXJyZW50PSExLGUoe3R5cGU6ImJlZ2luIix4OmwseTpyfSl9LG9uVG91Y2hNb3ZlOihGKT0+e0YucHJldmVudERlZmF1bHQoKTtsZXQgej1fMSgpO2lmKCF6KXJldHVybjtpZihiMS5jdXJyZW50JiZGLnRvdWNoZXMubGVuZ3RoPj0yKXtsZXQgSD1GLnRvdWNoZXNbMF0sbT1GLnRvdWNoZXNbMV0sYT17eDE6KEguY2xpZW50WC16LmxlZnQpL3oud2lkdGgseTE6KEguY2xpZW50WS16LnRvcCkvei5oZWlnaHQseDI6KG0uY2xpZW50WC16LmxlZnQpL3oud2lkdGgseTI6KG0uY2xpZW50WS16LnRvcCkvei5oZWlnaHR9O0ExKGEpLEwxKHt0eXBlOiJtb3ZlIiwuLi5hfSk7cmV0dXJufWxldCBiPUYudG91Y2hlc1swXTtpZighYilyZXR1cm47bGV0IGw9KGIuY2xpZW50WC16LmxlZnQpL3oud2lkdGgscj0oYi5jbGllbnRZLXoudG9wKS96LmhlaWdodDtpZih4MShsLHIpLEoxLmN1cnJlbnQpZSh7dHlwZToibW92ZSIseDpsLHk6cixlZGdlOlgwfSk7ZWxzZSBlKHt0eXBlOiJtb3ZlIix4OmwseTpyfSl9LG9uVG91Y2hFbmQ6KEYpPT57Ri5wcmV2ZW50RGVmYXVsdCgpO2xldCB6PV8xKCk7aWYoIXopcmV0dXJuO2lmKGIxLmN1cnJlbnQpe2lmKEYudG91Y2hlcy5sZW5ndGg8Mil7bGV0IEg9Ri5jaGFuZ2VkVG91Y2hlc1swXSxtPWgxO2lmKEgmJm0pTDEoe3R5cGU6ImVuZCIseDE6KEguY2xpZW50WC16LmxlZnQpL3oud2lkdGgseTE6KEguY2xpZW50WS16LnRvcCkvei5oZWlnaHQseDI6bS54Mix5MjptLnkyfSk7ZWxzZSBpZihtKUwxKHt0eXBlOiJlbmQiLC4uLm19KTtiMS5jdXJyZW50PSExLEcxLmN1cnJlbnQ9ITEsQTEobnVsbCl9cmV0dXJufWxldCBiPUYuY2hhbmdlZFRvdWNoZXNbMF07aWYoIWIpcmV0dXJuO2xldCBsPShiLmNsaWVudFgtei5sZWZ0KS96LndpZHRoLHI9KGIuY2xpZW50WS16LnRvcCkvei5oZWlnaHQ7aWYoZjEoKSxKMS5jdXJyZW50KWUoe3R5cGU6ImVuZCIseDpsLHk6cixlZGdlOlgwfSksSjEuY3VycmVudD0hMTtlbHNlIGUoe3R5cGU6ImVuZCIseDpsLHk6cn0pfX0pLEooImRpdiIse3JlZjpwMSwiZGF0YS10ZXN0aWQiOiJ0b3VjaC1pbmRpY2F0b3IiLHN0eWxlOntwb3NpdGlvbjoiYWJzb2x1dGUiLGRpc3BsYXk6Im5vbmUiLHdpZHRoOjI0LGhlaWdodDoyNCxib3JkZXJSYWRpdXM6IjUwJSIsYmFja2dyb3VuZDoicmdiYSg1OSwxMzAsMjQ2LDAuNSkiLGJveFNoYWRvdzoiMCAwIDhweCByZ2JhKDU5LDEzMCwyNDYsMC4zKSIsdHJhbnNmb3JtOiJ0cmFuc2xhdGUoLTUwJSwgLTUwJSkiLHBvaW50ZXJFdmVudHM6Im5vbmUifX0pLGgxJiZKKHExLHtjaGlsZHJlbjpbSigiZGl2Iix7ImRhdGEtdGVzdGlkIjoiZmluZ2VyLWRvdCIsc3R5bGU6QjMoaDEueDEsaDEueTEpfSksSigiZGl2Iix7ImRhdGEtdGVzdGlkIjoiZmluZ2VyLWRvdCIsc3R5bGU6QjMoaDEueDIsaDEueTIpfSldfSksIWMmJiFTJiZKKCJkaXYiLHtzdHlsZTp7Li4uTDMsLi4uWHx8e319LGNoaWxkcmVuOkooInNwYW4iLHtzdHlsZTp7Y29sb3I6IiM4ODgiLGZvbnRTaXplOjE0fSxjaGlsZHJlbjoiQ29ubmVjdGluZy4uLiJ9KX0pLFMmJkooImRpdiIse3N0eWxlOkwzLGNoaWxkcmVuOkooInNwYW4iLHtzdHlsZTp7Y29sb3I6IiNmNDQiLGZvbnRTaXplOjE0LHBhZGRpbmc6MjAsdGV4dEFsaWduOiJjZW50ZXIifSxjaGlsZHJlbjpTfSl9KSxaMSYmSigiZGl2Iix7c3R5bGU6UzksY2hpbGRyZW46Sigic3BhbiIse3N0eWxlOntjb2xvcjoiI2ZiYmYyNCIsZm9udFNpemU6MTMsZm9udEZhbWlseToibW9ub3NwYWNlIn0sY2hpbGRyZW46IlNsb3cgY29ubmVjdGlvbiJ9KX0pXX0pfSksIUQmJkooImRpdiIse3N0eWxlOntkaXNwbGF5OiJmbGV4IixhbGlnbkl0ZW1zOiJjZW50ZXIiLGp1c3RpZnlDb250ZW50OiJzcGFjZS1iZXR3ZWVuIixwYWRkaW5nOiI0cHggOHB4Iixib3JkZXJUb3A6IjFweCBzb2xpZCByZ2JhKDI1NSwyNTUsMjU1LDAuMTIpIn0sY2hpbGRyZW46W0ooImJ1dHRvbiIse29uQ2xpY2s6bjEsc3R5bGU6e2JhY2tncm91bmQ6Im5vbmUiLGJvcmRlcjoiMXB4IHNvbGlkIHJnYmEoMjU1LDI1NSwyNTUsMC4yKSIsY29sb3I6IiNhYWEiLGZvbnRTaXplOjExLGZvbnRGYW1pbHk6Im1vbm9zcGFjZSIscGFkZGluZzoiMnB4IDEwcHgiLGN1cnNvcjoicG9pbnRlciIsYm9yZGVyUmFkaXVzOjR9LGNoaWxkcmVuOiJIb21lIn0pLEooInNwYW4iLHtzdHlsZTp7Y29sb3I6ST4wPyIjNGY0IjoiIzg4OCIsZm9udFNpemU6MTIsZm9udEZhbWlseToibW9ub3NwYWNlIixkaXNwbGF5OiJmbGV4IixhbGlnbkl0ZW1zOiJjZW50ZXIiLGdhcDo2fSxjaGlsZHJlbjpbQiYmSigic3BhbiIseyJkYXRhLXRlc3RpZCI6InF1YWxpdHktZG90IixzdHlsZTp7d2lkdGg6OCxoZWlnaHQ6OCxib3JkZXJSYWRpdXM6IjUwJSIsZGlzcGxheToiaW5saW5lLWJsb2NrIixiYWNrZ3JvdW5kOkI9PT0iZ29vZCI/IiM0YWRlODAiOkI9PT0iZGVncmFkZWQiPyIjZmFjYzE1IjoiI2VmNDQ0NCJ9fSksSSwiIGZwcyJdfSldfSldfSl9dmFyIFM5PXtwb3NpdGlvbjoiYWJzb2x1dGUiLHRvcDo4LGxlZnQ6IjUwJSIsdHJhbnNmb3JtOiJ0cmFuc2xhdGVYKC01MCUpIixiYWNrZ3JvdW5kOiJyZ2JhKDAsMCwwLDAuNykiLGJvcmRlclJhZGl1czo2LHBhZGRpbmc6IjRweCAxMnB4Iixwb2ludGVyRXZlbnRzOiJub25lIn0sTDM9e3Bvc2l0aW9uOiJhYnNvbHV0ZSIsaW5zZXQ6MCxkaXNwbGF5OiJmbGV4IixhbGlnbkl0ZW1zOiJjZW50ZXIiLGp1c3RpZnlDb250ZW50OiJjZW50ZXIiLGJhY2tncm91bmQ6InJnYmEoMCwwLDAsMC44KSJ9LFYzPTIwO2Z1bmN0aW9uIEIzKEMsJCl7cmV0dXJue3Bvc2l0aW9uOiJhYnNvbHV0ZSIsbGVmdDpgJHtDKjEwMH0lYCx0b3A6YCR7JCoxMDB9JWAsd2lkdGg6VjMsaGVpZ2h0OlYzLGJvcmRlclJhZGl1czoiNTAlIixiYWNrZ3JvdW5kOiJyZ2JhKDI1NSwyNTUsMjU1LDAuNDUpIixib3JkZXI6IjEuMjVweCBzb2xpZCByZ2JhKDAsMCwwLDAuNTUpIixib3hTaGFkb3c6IjAgMXB4IDNweCByZ2JhKDAsMCwwLDAuNDUpIix0cmFuc2Zvcm06InRyYW5zbGF0ZSgtNTAlLCAtNTAlKSIscG9pbnRlckV2ZW50czoibm9uZSJ9fWZ1bmN0aW9uIEYwKEMpe2lmKCFDKXJldHVybiJpcGhvbmUiO2xldCAkPUMudG9Mb3dlckNhc2UoKTtpZigkLmluY2x1ZGVzKCJpcGFkIikpcmV0dXJuImlwYWQiO2lmKCQuaW5jbHVkZXMoIndhdGNoIikpcmV0dXJuIndhdGNoIjtpZigkLmluY2x1ZGVzKCJ2aXNpb24iKSlyZXR1cm4idmlzaW9uIjtyZXR1cm4iaXBob25lIn12YXIgUzE9e2lwaG9uZTp7d2lkdGg6NDI3LGhlaWdodDo4ODEsYmV6ZWxYOjE4LGJlemVsWToxOCxpbm5lclJhZGl1czo1NX0saXBhZDp7d2lkdGg6NDMwLGhlaWdodDo2MDUsYmV6ZWxYOjE2LGJlemVsWToxNixpbm5lclJhZGl1czoxMn0sd2F0Y2g6e3dpZHRoOjI3NCxoZWlnaHQ6MzIyLGJlemVsWDoxMixiZXplbFk6MTIsaW5uZXJSYWRpdXM6Nzl9LHZpc2lvbjp7d2lkdGg6NjQwLGhlaWdodDo0MDAsYmV6ZWxYOjEyLGJlemVsWToxMixpbm5lclJhZGl1czozMn19LEE2PVMxLmlwaG9uZS53aWR0aCxPNj1TMS5pcGhvbmUuaGVpZ2h0LFQ2PVMxLmlwaG9uZS5iZXplbFgsTTY9UzEuaXBob25lLmJlemVsWSx3Nj1TMS5pcGhvbmUuaW5uZXJSYWRpdXMsXzM9eyJpUGhvbmUgMTcgUHJvIE1heCI6e3dpZHRoOjEzMjAsaGVpZ2h0OjI4Njh9LCJpUGhvbmUgMTcgUHJvIjp7d2lkdGg6MTIwNixoZWlnaHQ6MjYyMn0sImlQaG9uZSAxNyI6e3dpZHRoOjEyMDYsaGVpZ2h0OjI2MjJ9LCJpUGhvbmUgQWlyIjp7d2lkdGg6MTI2MCxoZWlnaHQ6MjczNn0sImlQaG9uZSAxNiBQcm8gTWF4Ijp7d2lkdGg6MTMyMCxoZWlnaHQ6Mjg2OH0sImlQaG9uZSAxNiBQcm8iOnt3aWR0aDoxMjA2LGhlaWdodDoyNjIyfSwiaVBob25lIDE2IFBsdXMiOnt3aWR0aDoxMjkwLGhlaWdodDoyNzk2fSwiaVBob25lIDE2Ijp7d2lkdGg6MTE3OSxoZWlnaHQ6MjU1Nn0sImlQaG9uZSAxNmUiOnt3aWR0aDoxMTcwLGhlaWdodDoyNTMyfSwiaVBob25lIDE1IFBybyBNYXgiOnt3aWR0aDoxMjkwLGhlaWdodDoyNzk2fSwiaVBob25lIDE1IFBybyI6e3dpZHRoOjExNzksaGVpZ2h0OjI1NTZ9LCJpUGhvbmUgMTUgUGx1cyI6e3dpZHRoOjEyOTAsaGVpZ2h0OjI3OTZ9LCJpUGhvbmUgMTUiOnt3aWR0aDoxMTc5LGhlaWdodDoyNTU2fSwiaVBhZCBQcm8gMTMtaW5jaCAoTTUpIjp7d2lkdGg6MjA2NCxoZWlnaHQ6Mjc1Mn0sImlQYWQgUHJvIDExLWluY2ggKE01KSI6e3dpZHRoOjE2NjgsaGVpZ2h0OjI0MjB9LCJpUGFkIFBybyAxMy1pbmNoIChNNCkiOnt3aWR0aDoyMDY0LGhlaWdodDoyNzUyfSwiaVBhZCBQcm8gMTEtaW5jaCAoTTQpIjp7d2lkdGg6MTY2OCxoZWlnaHQ6MjQyMH0sImlQYWQgQWlyIDEzLWluY2ggKE0zKSI6e3dpZHRoOjIwNDgsaGVpZ2h0OjI3MzJ9LCJpUGFkIEFpciAxMS1pbmNoIChNMykiOnt3aWR0aDoxNjQwLGhlaWdodDoyMzYwfSwiaVBhZCAoQTE2KSI6e3dpZHRoOjE2NDAsaGVpZ2h0OjIzNjB9LCJpUGFkIG1pbmkgKEExNyBQcm8pIjp7d2lkdGg6MTQ4OCxoZWlnaHQ6MjI2Nn0sIkFwcGxlIFdhdGNoIFVsdHJhIDMgKDQ5bW0pIjp7d2lkdGg6NDIyLGhlaWdodDo1MTR9LCJBcHBsZSBXYXRjaCBVbHRyYSAyICg0OW1tKSI6e3dpZHRoOjQxMCxoZWlnaHQ6NTAyfSwiQXBwbGUgV2F0Y2ggU2VyaWVzIDExICg0Nm1tKSI6e3dpZHRoOjQxNixoZWlnaHQ6NDk2fSwiQXBwbGUgV2F0Y2ggU2VyaWVzIDExICg0Mm1tKSI6e3dpZHRoOjM3NCxoZWlnaHQ6NDQ2fSwiQXBwbGUgV2F0Y2ggU2VyaWVzIDEwICg0Nm1tKSI6e3dpZHRoOjQxNixoZWlnaHQ6NDk2fSwiQXBwbGUgV2F0Y2ggU2VyaWVzIDEwICg0Mm1tKSI6e3dpZHRoOjM3NCxoZWlnaHQ6NDQ2fSwiQXBwbGUgV2F0Y2ggU0UgMyAoNDRtbSkiOnt3aWR0aDozNjgsaGVpZ2h0OjQ0OH0sIkFwcGxlIFdhdGNoIFNFIDMgKDQwbW0pIjp7d2lkdGg6MzI0LGhlaWdodDozOTR9LCJBcHBsZSBXYXRjaCBTRSAoNDRtbSkiOnt3aWR0aDozNjgsaGVpZ2h0OjQ0OH0sIkFwcGxlIFdhdGNoIFNFICg0MG1tKSI6e3dpZHRoOjMyNCxoZWlnaHQ6Mzk0fSwiQXBwbGUgVmlzaW9uIFBybyI6e3dpZHRoOjE5MjAsaGVpZ2h0OjEwODB9fTtmdW5jdGlvbiAkMihDLCQpe2xldCBLPUMmJkMud2lkdGg+MCYmQy5oZWlnaHQ+MD9DOiQsWD1VMChLKTtpZihYKXJldHVybmAke1gud2lkdGh9IC8gJHtYLmhlaWdodH1gO3JldHVybmAke1MxLmlwaG9uZS53aWR0aC0yKlMxLmlwaG9uZS5iZXplbFh9IC8gJHtTMS5pcGhvbmUuaGVpZ2h0LTIqUzEuaXBob25lLmJlemVsWX1gfWZ1bmN0aW9uIEsyKEM9ImlwaG9uZSIsJCl7bGV0IEs9JD9fM1skXTpudWxsO2lmKEspcmV0dXJuIEs7bGV0IFg9UzFbQ107cmV0dXJue3dpZHRoOlgud2lkdGgtMipYLmJlemVsWCxoZWlnaHQ6WC5oZWlnaHQtMipYLmJlemVsWX19ZnVuY3Rpb24gWDIoQz0iaXBob25lIiwkKXtpZihEMCgkKSlzd2l0Y2goQyl7Y2FzZSJpcGFkIjpyZXR1cm4gNzIwO2Nhc2UidmlzaW9uIjpyZXR1cm4gNTgwO2Nhc2Uid2F0Y2giOnJldHVybiAyMDA7ZGVmYXVsdDpyZXR1cm4gNjIwfXN3aXRjaChDKXtjYXNlImlwYWQiOnJldHVybiA0MDA7Y2FzZSJ3YXRjaCI6cmV0dXJuIDIwMDtjYXNlInZpc2lvbiI6cmV0dXJuIDU4MDtkZWZhdWx0OnJldHVybiAzMjB9fWZ1bmN0aW9uIEoyKEM9ImlwaG9uZSIsJCl7bGV0IEs9UzFbQ10sWD1LLndpZHRoLTIqSy5iZXplbFgsUT1LLmhlaWdodC0yKksuYmV6ZWxZO2lmKFg8USYmRDAoJCkpcmV0dXJuYCR7Sy5pbm5lclJhZGl1cy9RKjEwMH0lIC8gJHtLLmlubmVyUmFkaXVzL1gqMTAwfSVgO3JldHVybmAke0suaW5uZXJSYWRpdXMvWCoxMDB9JSAvICR7Sy5pbm5lclJhZGl1cy9RKjEwMH0lYH1mdW5jdGlvbiBrMyhDKXtsZXQgJD1TMVtDLnR5cGVdLEs9JC53aWR0aC0yKiQuYmV6ZWxYLFg9JC5oZWlnaHQtMiokLmJlemVsWSxRLE47aWYoSzxYJiZEMChDLmNvbmZpZz8/bnVsbCkpUT0kLmlubmVyUmFkaXVzL1gsTj0kLmlubmVyUmFkaXVzL0s7ZWxzZSBRPSQuaW5uZXJSYWRpdXMvSyxOPSQuaW5uZXJSYWRpdXMvWDtsZXQgWj1RKkMuY29udGFpbmVyV2lkdGgscT1OKkMuY29udGFpbmVySGVpZ2h0LEc9TWF0aC5zcXJ0KE1hdGgubWF4KFoqcSwwKSk7cmV0dXJue3J4Oloscnk6cSxyR2VvbTpHfX12YXIgeDk9MTMsdjk9NjI7ZnVuY3Rpb24gajIoQyl7bGV0e2NvbnRhaW5lcldpZHRoOiQsY29udGFpbmVySGVpZ2h0Okt9PUMsWD0oXyk9Pl8udG9GaXhlZCgzKSxRPShfLFUpPT57bGV0IE09VSxFPVUseT12OS8yKihNYXRoLlBJLzE4MCksYz0yMjUqTWF0aC5QSS8xODAsUj1jK3ksUz1jLXkseD1NK18qTWF0aC5jb3MoUiksZj1FK18qTWF0aC5zaW4oUiksZD1NK18qTWF0aC5jb3MoUyksbz1FK18qTWF0aC5zaW4oUyksUTE9YE0gJHtYKHgpfSAke1goZil9IEEgJHtYKF8pfSAke1goXyl9IDAgMCAxICR7WChkKX0gJHtYKG8pfWAsbj1gTSAke1goZCl9ICR7WChvKX0gQSAke1goXyl9ICR7WChfKX0gMCAwIDAgJHtYKHgpfSAke1goZil9YDtyZXR1cm57ZDpRMSxkRmlsbDpufX07aWYoISgkPjApfHwhKEs+MCkpe2xldCBfPXg5LFU9TWF0aC5jZWlsKF8rMTQpLHtkOk0sZEZpbGw6RX09UShfLFUpO3JldHVybntkOk0sZEZpbGw6RSx2aWV3Qm94U2l6ZTpVfX1sZXR7ckdlb206Tn09azMoQyksWj1NYXRoLm1heCgyLjIsTWF0aC5taW4oNS4yLDAuMDExKk1hdGgubWluKCQsSykpKSxxPU4qMC4zNCtaLEc9TWF0aC5taW4oJCxLKSxZPU1hdGgubWluKDIyLE1hdGgubWF4KDEyLEcqMC4wNTIpKTtxPU1hdGgubWluKDI0LE1hdGgubWF4KDEyLHEsWSkpO2xldCBEPU1hdGgubWF4KDI2LE1hdGguY2VpbChxKzEzKSkse2Q6VCxkRmlsbDpCfT1RKHEsRCk7cmV0dXJue2Q6VCxkRmlsbDpCLHZpZXdCb3hTaXplOkR9fXZhciBwMj1pMShudWxsKTtmdW5jdGlvbiBRMihDKXtsZXQgJD0kMChwMik7aWYoISQpdGhyb3cgRXJyb3IoYDxTaW11bGF0b3JUb29sYmFyLiR7Q30+IG11c3QgYmUgcmVuZGVyZWQgaW5zaWRlIDxTaW11bGF0b3JUb29sYmFyPmApO3JldHVybiAkfXZhciBtOT17ZGlzcGxheToiZmxleCIsZmxleFdyYXA6IndyYXAiLGFsaWduSXRlbXM6ImNlbnRlciIsanVzdGlmeUNvbnRlbnQ6InNwYWNlLWJldHdlZW4iLGdhcDoiNHB4IDEycHgiLHBhZGRpbmc6IjhweCAxMnB4Iixib3JkZXJSYWRpdXM6MjQsYmFja2dyb3VuZDoiIzFjMWMxZSIsYm9yZGVyOiIxcHggc29saWQgcmdiYSgyNTUsMjU1LDI1NSwwLjEpIixib3hTaGFkb3c6IjAgMXB4IDJweCByZ2JhKDAsMCwwLDAuMikiLG1pbldpZHRoOjI0MCx3aWR0aDoiMTAwJSJ9O2Z1bmN0aW9uIGo5KHtleGVjOkMsb25Sb3RhdGU6JCxvcmllbnRhdGlvbjpLLGRldmljZVVkaWQ6WCxkZXZpY2VOYW1lOlEsZGV2aWNlUnVudGltZTpOLHN0cmVhbWluZzpaPSExLGRpc2FibGVkOnE9ITEsY2hpbGRyZW46RyxzdHlsZTpZLC4uLlZ9KXtsZXQgTD1GMChRKSxEPXtleGVjOkMsb25Sb3RhdGU6JCxvcmllbnRhdGlvbjpLLGRldmljZVVkaWQ6WCxkZXZpY2VOYW1lOlEsZGV2aWNlUnVudGltZTpOLGRldmljZVR5cGU6TCxzdHJlYW1pbmc6WixkaXNhYmxlZDpxfHwhWHx8IVp9O3JldHVybiBKKHAyLlByb3ZpZGVyLHt2YWx1ZTpELGNoaWxkcmVuOkooImRpdiIseyJkYXRhLXNpbXVsYXRvci10b29sYmFyIjohMCxzdHlsZTp7Li4ubTksLi4uWX0sLi4uVixjaGlsZHJlbjpHfSl9KX12YXIgcDk9e2Rpc3BsYXk6ImZsZXgiLGZsZXhEaXJlY3Rpb246ImNvbHVtbiIsYWxpZ25JdGVtczoiZmxleC1zdGFydCIsdGV4dEFsaWduOiJsZWZ0IixiYWNrZ3JvdW5kOiJ0cmFuc3BhcmVudCIsYm9yZGVyOiJub25lIixjb2xvcjoiI2ZmZiIscGFkZGluZzoiMnB4IDRweCIsbWFyZ2luOiItMnB4IC00cHgiLGJvcmRlclJhZGl1czo2LGN1cnNvcjoicG9pbnRlciIsbWluV2lkdGg6MCxtYXhXaWR0aDoiMTAwJSIsbGluZUhlaWdodDoxLjIsZm9udEZhbWlseToiaW5oZXJpdCJ9LGY5PUswKGZ1bmN0aW9uKHtuYW1lOiQsc3VidGl0bGU6SyxoaWRlQ2hldnJvbjpYLHN0eWxlOlEsb25Nb3VzZUVudGVyOk4sb25Nb3VzZUxlYXZlOlosLi4ucX0sRyl7bGV0IFk9UTIoIlRpdGxlIiksW1YsTF09QSghMSksaz0kPz9ZLmRldmljZU5hbWU/PyJObyBzaW11bGF0b3IiLEQ9Sz8/KFkuZGV2aWNlUnVudGltZT9ZLmRldmljZVJ1bnRpbWUucmVwbGFjZSgvXC4vLCIgIik6IuKAlCIpO3JldHVybiBKKCJidXR0b24iLHtyZWY6Ryx0eXBlOiJidXR0b24iLCJkYXRhLXNpbXVsYXRvci10b29sYmFyLXRpdGxlIjohMCxvbk1vdXNlRW50ZXI6KFQpPT57TCghMCksTj8uKFQpfSxvbk1vdXNlTGVhdmU6KFQpPT57TCghMSksWj8uKFQpfSxzdHlsZTp7Li4ucDksYmFja2dyb3VuZDpWPyJyZ2JhKDI1NSwyNTUsMjU1LDAuMSkiOiJ0cmFuc3BhcmVudCIsLi4uUX0sLi4ucSxjaGlsZHJlbjpbSigic3BhbiIse3N0eWxlOntkaXNwbGF5OiJpbmxpbmUtZmxleCIsYWxpZ25JdGVtczoiY2VudGVyIixnYXA6NCxmb250U2l6ZToxMixmb250V2VpZ2h0OjYwMCxjb2xvcjoiI2ZmZiIsbWF4V2lkdGg6IjEwMCUiLG92ZXJmbG93OiJoaWRkZW4iLHRleHRPdmVyZmxvdzoiZWxsaXBzaXMiLHdoaXRlU3BhY2U6Im5vd3JhcCJ9LGNoaWxkcmVuOltrLCFYJiZKKCJzdmciLHt3aWR0aDoiMTAiLGhlaWdodDoiMTAiLHZpZXdCb3g6IjAgMCAyNCAyNCIsZmlsbDoibm9uZSIsc3Ryb2tlOiJjdXJyZW50Q29sb3IiLHN0cm9rZVdpZHRoOiIyLjUiLHN0cm9rZUxpbmVjYXA6InJvdW5kIixzdHJva2VMaW5lam9pbjoicm91bmQiLHN0eWxlOntjb2xvcjoicmdiYSgyNTUsMjU1LDI1NSwwLjYpIixmbGV4U2hyaW5rOjB9LGNoaWxkcmVuOkooInBvbHlsaW5lIix7cG9pbnRzOiI2IDkgMTIgMTUgMTggOSJ9KX0pXX0pLEooInNwYW4iLHtzdHlsZTp7Zm9udFNpemU6MTAsY29sb3I6InJnYmEoMjU1LDI1NSwyNTUsMC41KSIsbWF4V2lkdGg6IjEwMCUiLG92ZXJmbG93OiJoaWRkZW4iLHRleHRPdmVyZmxvdzoiZWxsaXBzaXMiLHdoaXRlU3BhY2U6Im5vd3JhcCJ9LGNoaWxkcmVuOkR9KV19KX0pLGw5PXtkaXNwbGF5OiJmbGV4IixhbGlnbkl0ZW1zOiJjZW50ZXIiLGdhcDo0LGZsZXhTaHJpbms6MH07ZnVuY3Rpb24gdTkoe3N0eWxlOkMsLi4uJH0pe3JldHVybiBKKCJkaXYiLHtzdHlsZTp7Li4ubDksLi4uQ30sLi4uJH0pfXZhciBvOT17YmFja2dyb3VuZDoidHJhbnNwYXJlbnQiLGJvcmRlcjoibm9uZSIscGFkZGluZzo2LGJvcmRlclJhZGl1czo2LGN1cnNvcjoicG9pbnRlciIsZGlzcGxheToiaW5saW5lLWZsZXgiLGFsaWduSXRlbXM6ImNlbnRlciIsanVzdGlmeUNvbnRlbnQ6ImNlbnRlciIsY29sb3I6InJnYmEoMjU1LDI1NSwyNTUsMC44KSIsdHJhbnNpdGlvbjoiYmFja2dyb3VuZC1jb2xvciAwLjE1cywgY29sb3IgMC4xNXMifSxOMj1LMChmdW5jdGlvbih7Zm9yY2VEaXNhYmxlZDokLHN0eWxlOkssZGlzYWJsZWQ6WCxvbk1vdXNlRW50ZXI6USxvbk1vdXNlTGVhdmU6TixjaGlsZHJlbjpaLC4uLnF9LEcpe2xldCBZPSQwKHAyKSxWPVh8fCR8fFk/LmRpc2FibGVkLFtMLGtdPUEoITEpO3JldHVybiBKKCJidXR0b24iLHtyZWY6Ryx0eXBlOiJidXR0b24iLGRpc2FibGVkOlYsb25Nb3VzZUVudGVyOihEKT0+e2soITApLFE/LihEKX0sb25Nb3VzZUxlYXZlOihEKT0+e2soITEpLE4/LihEKX0sc3R5bGU6ey4uLm85LGNvbG9yOlY/InJnYmEoMjU1LDI1NSwyNTUsMC4yNSkiOiJyZ2JhKDI1NSwyNTUsMjU1LDAuOCkiLGJhY2tncm91bmQ6TCYmIVY/InJnYmEoMjU1LDI1NSwyNTUsMC4xKSI6InRyYW5zcGFyZW50IixjdXJzb3I6Vj8ibm90LWFsbG93ZWQiOiJwb2ludGVyIiwuLi5LfSwuLi5xLGNoaWxkcmVuOlp9KX0pO2Z1bmN0aW9uIGQ5KCl7cmV0dXJuWyd0ZWxsIGFwcGxpY2F0aW9uICJTeXN0ZW0gRXZlbnRzIiB0byB0ZWxsIHByb2Nlc3MgIlNpbXVsYXRvciIgdG8gc2V0IGZyb250bW9zdCB0byB0cnVlJywndGVsbCBhcHBsaWNhdGlvbiAiU3lzdGVtIEV2ZW50cyIgdG8gdGVsbCBwcm9jZXNzICJTaW11bGF0b3IiIHRvIHBlcmZvcm0gYWN0aW9uICJBWFJhaXNlIiBvZiAoZmlyc3Qgd2luZG93IHdob3NlIG5hbWUgY29udGFpbnMgIndhdGNoT1MiKScsJ3RlbGwgYXBwbGljYXRpb24gIlN5c3RlbSBFdmVudHMiIHRvIHRlbGwgcHJvY2VzcyAiU2ltdWxhdG9yIiB0byBjbGljayBtZW51IGl0ZW0gIkhvbWUiIG9mIG1lbnUgIkRldmljZSIgb2YgbWVudSBiYXIgaXRlbSAiRGV2aWNlIiBvZiBtZW51IGJhciAxJ10ubWFwKCgkKT0+YC1lICckeyR9J2ApLnJlZHVjZSgoJCxLKT0+YCR7JH0gJHtLfWAsIm9zYXNjcmlwdCIpfXZhciBjOT17cG9ydHJhaXQ6ImxhbmRzY2FwZV9sZWZ0IixsYW5kc2NhcGVfbGVmdDoicG9ydHJhaXRfdXBzaWRlX2Rvd24iLHBvcnRyYWl0X3Vwc2lkZV9kb3duOiJsYW5kc2NhcGVfcmlnaHQiLGxhbmRzY2FwZV9yaWdodDoicG9ydHJhaXQifSxhOT1KKCJzdmciLHt3aWR0aDoiMTgiLGhlaWdodDoiMTgiLHZpZXdCb3g6IjAgMCAyNCAyNCIsZmlsbDoibm9uZSIsc3Ryb2tlOiJjdXJyZW50Q29sb3IiLHN0cm9rZVdpZHRoOiIyIixzdHJva2VMaW5lY2FwOiJyb3VuZCIsc3Ryb2tlTGluZWpvaW46InJvdW5kIixjaGlsZHJlbjpKKCJwYXRoIix7ZDoiTTMgMTAuNSAxMiAzbDkgNy41VjIwYTEgMSAwIDAgMS0xIDFoLTV2LTdoLTZ2N0g0YTEgMSAwIDAgMS0xLTF6In0pfSksaTk9Sigic3ZnIix7d2lkdGg6IjE4IixoZWlnaHQ6IjE4Iix2aWV3Qm94OiIwIDAgMjQgMjQiLGZpbGw6Im5vbmUiLHN0cm9rZToiY3VycmVudENvbG9yIixzdHJva2VXaWR0aDoiMiIsc3Ryb2tlTGluZWNhcDoicm91bmQiLHN0cm9rZUxpbmVqb2luOiJyb3VuZCIsY2hpbGRyZW46W0ooInBhdGgiLHtkOiJNMTQuNSA0aC01TDcgN0g0YTIgMiAwIDAgMC0yIDJ2OWEyIDIgMCAwIDAgMiAyaDE2YTIgMiAwIDAgMCAyLTJWOWEyIDIgMCAwIDAtMi0yaC0zeiJ9KSxKKCJjaXJjbGUiLHtjeDoiMTIiLGN5OiIxMyIscjoiNCJ9KV19KSxyOT1KKCJzdmciLHt3aWR0aDoiMTgiLGhlaWdodDoiMTgiLHZpZXdCb3g6IjAgMCAyNCAyNCIsZmlsbDoibm9uZSIsc3Ryb2tlOiJjdXJyZW50Q29sb3IiLHN0cm9rZVdpZHRoOiIyIixzdHJva2VMaW5lY2FwOiJyb3VuZCIsc3Ryb2tlTGluZWpvaW46InJvdW5kIix4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLGNoaWxkcmVuOltKKCJwYXRoIix7ZDoiTTEyIDVINmEyIDIgMCAwIDAtMiAydjMifSksSigicGF0aCIse2Q6Im05IDggMy0zLTMtMyJ9KSxKKCJwYXRoIix7ZDoiTTQgMTR2NGEyIDIgMCAwIDAgMiAyaDEyYTIgMiAwIDAgMCAyLTJWN2EyIDIgMCAwIDAtMi0yaC0yIn0pXX0pLG45PUswKGZ1bmN0aW9uKHtvbkNsaWNrOiQsLi4uS30sWCl7bGV0IFE9UTIoIkhvbWVCdXR0b24iKTtyZXR1cm4gSihOMix7cmVmOlgsImFyaWEtbGFiZWwiOiJIb21lIixvbkNsaWNrOihOKT0+e2lmKCQ/LihOKSxOLmRlZmF1bHRQcmV2ZW50ZWQpcmV0dXJuO2lmKFEuZGV2aWNlVHlwZT09PSJ3YXRjaCIpUS5leGVjKGQ5KCkpO2Vsc2UgUS5leGVjKCJzZXJ2ZS1zaW0gYnV0dG9uIGhvbWUiKX0sLi4uSyxjaGlsZHJlbjphOX0pfSksczk9SzAoZnVuY3Rpb24oe29uQ2xpY2s6JCwuLi5LfSxYKXtsZXQgUT1RMigiU2NyZWVuc2hvdEJ1dHRvbiIpO3JldHVybiBKKE4yLHtyZWY6WCwiYXJpYS1sYWJlbCI6IlNjcmVlbnNob3QiLG9uQ2xpY2s6KE4pPT57aWYoJD8uKE4pLE4uZGVmYXVsdFByZXZlbnRlZClyZXR1cm47aWYoUS5kZXZpY2VVZGlkKVEuZXhlYyhgeGNydW4gc2ltY3RsIGlvICR7US5kZXZpY2VVZGlkfSBzY3JlZW5zaG90IH4vRGVza3RvcC9zZXJ2ZS1zaW0tc2NyZWVuc2hvdC0kKGRhdGUgKyVzKS5wbmdgKX0sLi4uSyxjaGlsZHJlbjppOX0pfSksdDk9SzAoZnVuY3Rpb24oe29uQ2xpY2s6JCxmb3JjZURpc2FibGVkOkssLi4uWH0sUSl7bGV0IE49UTIoIlJvdGF0ZUJ1dHRvbiIpLFo9Ti5kZXZpY2VUeXBlPT09IndhdGNoInx8Ti5kZXZpY2VUeXBlPT09InZpc2lvbiIsW3EsR109QSgicG9ydHJhaXQiKTtyZXR1cm4gVygoKT0+e0coTi5vcmllbnRhdGlvbj8/InBvcnRyYWl0Iil9LFtOLmRldmljZVVkaWQsTi5vcmllbnRhdGlvbl0pLEooTjIse3JlZjpRLCJhcmlhLWxhYmVsIjoiUm90YXRlIGRldmljZSIsZm9yY2VEaXNhYmxlZDpLfHxaLG9uQ2xpY2s6KFkpPT57aWYoJD8uKFkpLFkuZGVmYXVsdFByZXZlbnRlZClyZXR1cm47aWYoIU4uZGV2aWNlVWRpZHx8WilyZXR1cm47bGV0IFY9YzlbTi5vcmllbnRhdGlvbj8/cV07aWYoRyhWKSxOLm9uUm90YXRlKU4ub25Sb3RhdGUoVik7ZWxzZSBOLmV4ZWMoYHNlcnZlLXNpbSByb3RhdGUgJHtWfSAtZCAke04uZGV2aWNlVWRpZH1gKX0sLi4uWCxjaGlsZHJlbjpyOX0pfSksUDE9ajk7UDEuVGl0bGU9Zjk7UDEuQWN0aW9ucz11OTtQMS5CdXR0b249TjI7UDEuSG9tZUJ1dHRvbj1uOTtQMS5TY3JlZW5zaG90QnV0dG9uPXM5O1AxLlJvdGF0ZUJ1dHRvbj10OTtmdW5jdGlvbiBvMSh7b3BlbjpDfSl7cmV0dXJuIEooInN2ZyIse3dpZHRoOiIxMCIsaGVpZ2h0OiIxMCIsdmlld0JveDoiMCAwIDI0IDI0IixmaWxsOiJub25lIixzdHJva2U6ImN1cnJlbnRDb2xvciIsc3Ryb2tlV2lkdGg6IjIuNSIsc3Ryb2tlTGluZWNhcDoicm91bmQiLHN0cm9rZUxpbmVqb2luOiJyb3VuZCIsY2xhc3NOYW1lOmBsZW0tY2hldnJvbiB0ZXh0LXdoaXRlLzUwIFt0cmFuc2l0aW9uOnRyYW5zZm9ybV8wLjE1cyxjb2xvcl8wLjEyc10gJHtDPyJyb3RhdGUtMTgwIjoicm90YXRlLTAifWAsY2hpbGRyZW46SigicG9seWxpbmUiLHtwb2ludHM6IjYgOSAxMiAxNSAxOCA5In0pfSl9ZnVuY3Rpb24gWjIoe2RpcjpDfSl7cmV0dXJuIEooInN2ZyIse3dpZHRoOiI5IixoZWlnaHQ6IjkiLHZpZXdCb3g6IjAgMCAyNCAyNCIsZmlsbDoiY3VycmVudENvbG9yIixjbGFzc05hbWU6Im1yLVszcHhdIixjaGlsZHJlbjpDPT09InVwIj9KKCJwb2x5Z29uIix7cG9pbnRzOiIxMiw0IDIwLDE4IDQsMTgifSk6SigicG9seWdvbiIse3BvaW50czoiNCw2IDIwLDYgMTIsMjAifSl9KX1mdW5jdGlvbiB2MCgpe3JldHVybiBKKCJzdmciLHt3aWR0aDoiMTEiLGhlaWdodDoiMTEiLHZpZXdCb3g6IjAgMCAyNCAyNCIsZmlsbDoiY3VycmVudENvbG9yIixjaGlsZHJlbjpKKCJwb2x5Z29uIix7cG9pbnRzOiI2LDQgMjAsMTIgNiwyMCJ9KX0pfWZ1bmN0aW9uIGYyKCl7cmV0dXJuIEooInN2ZyIse3dpZHRoOiIxMSIsaGVpZ2h0OiIxMSIsdmlld0JveDoiMCAwIDI0IDI0IixmaWxsOiJjdXJyZW50Q29sb3IiLGNoaWxkcmVuOltKKCJyZWN0Iix7eDoiNiIseToiNCIsd2lkdGg6IjQiLGhlaWdodDoiMTYifSksSigicmVjdCIse3g6IjE0Iix5OiI0Iix3aWR0aDoiNCIsaGVpZ2h0OiIxNiJ9KV19KX1mdW5jdGlvbiBnMCgpe3JldHVybiBKKCJzdmciLHt3aWR0aDoiMTAiLGhlaWdodDoiMTAiLHZpZXdCb3g6IjAgMCAyNCAyNCIsZmlsbDoiY3VycmVudENvbG9yIixjaGlsZHJlbjpKKCJyZWN0Iix7eDoiNSIseToiNSIsd2lkdGg6IjE0IixoZWlnaHQ6IjE0IixyeDoiMS41In0pfSl9ZnVuY3Rpb24gbDIoKXtyZXR1cm4gSigic3ZnIix7d2lkdGg6IjEyIixoZWlnaHQ6IjEyIix2aWV3Qm94OiIwIDAgMjQgMjQiLGZpbGw6Im5vbmUiLHN0cm9rZToiY3VycmVudENvbG9yIixzdHJva2VXaWR0aDoiMiIsc3Ryb2tlTGluZWNhcDoicm91bmQiLHN0cm9rZUxpbmVqb2luOiJyb3VuZCIsImFyaWEtaGlkZGVuIjoidHJ1ZSIsY2hpbGRyZW46W0ooInBhdGgiLHtkOiJNMTIgNmEyIDIgMCAwIDEgMy40MTQtMS40MTRsNiA2YTIgMiAwIDAgMSAwIDIuODI4bC02IDZBMiAyIDAgMCAxIDEyIDE4eiJ9KSxKKCJwYXRoIix7ZDoiTTIgNmEyIDIgMCAwIDEgMy40MTQtMS40MTRsNiA2YTIgMiAwIDAgMSAwIDIuODI4bC02IDZBMiAyIDAgMCAxIDIgMTh6In0pXX0pfWZ1bmN0aW9uIHUyKCl7cmV0dXJuIEooInN2ZyIse3dpZHRoOiI5IixoZWlnaHQ6IjE0Iix2aWV3Qm94OiI0IDIgOSAxMyIsZmlsbDoiY3VycmVudENvbG9yIix4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJhcmlhLWhpZGRlbiI6InRydWUiLGNoaWxkcmVuOkooInBhdGgiLHtkOiJNNi4wMDg1MiAxNC44MDU0QzUuODkxODEgMTQuOTM1IDUuNzU4MTUgMTQuOTk5OCA1LjYwNzU2IDE0Ljk5OThDNS40NTY5NiAxNS4wMDMzIDUuMzIzMyAxNC45NjEzIDUuMjA2NTkgMTQuODczN0M1LjA5MzY0IDE0Ljc4NjEgNS4wMjU4NyAxNC42NzIzIDUuMDAzMjggMTQuNTMyMkM0Ljk4NDQ2IDE0LjM5MjEgNS4wNDY1OCAxNC4yNDUgNS4xODk2NSAxNC4wOTA5TDYuOTQ1OTkgMTIuMTUyMkw3LjI0NTMgMTAuODc1NUw4LjE5OTcxIDExLjk4OTNMOC4wNTg1MyAxMi4zOTM5QzguMDIwODggMTIuNDk1NSA3Ljk4Njk5IDEyLjU3MDggNy45NTY4NyAxMi42MTk4QzcuOTMwNTIgMTIuNjY4OCA3Ljg3NDA0IDEyLjc0MDYgNy43ODc0NSAxMi44MzUyTDYuMDA4NTIgMTQuODA1NFpNMTAuMzQ1NyAxNC42NDI1TDkuMTAzMjkgMTIuMzA0NkM5LjA3Njk0IDEyLjI2MjUgOS4wNTQzNSAxMi4yMjIzIDkuMDM1NTMgMTIuMTgzN0M5LjAxNjcgMTIuMTQ1MiA4Ljk3NzE3IDEyLjA5MDkgOC45MTY5MyAxMi4wMjA5TDcuNzE5NjggMTAuNjE4MUM3LjQ5Mzc5IDEwLjM1NTQgNy4zMzc1NCAxMC4xMjk1IDcuMjUwOTUgOS45NDAzNEM3LjE2NDM1IDkuNzQ3NyA3LjEzNDI0IDkuNDk5MDEgNy4xNjA1OSA5LjE5NDI5TDcuMjYyMjQgNy45ODA2NUM3LjI2OTc3IDcuOTA3MSA3LjIzMjEyIDcuODU0NTYgNy4xNDkyOSA3LjgyMzA0QzcuMDY2NDcgNy43OTE1MSA2Ljk4NTUyIDcuODA5MDMgNi45MDY0NiA3Ljg3NTU3TDYuNDcxNjEgOC4yNDMzNEw2LjM0MTcyIDkuNjcyMzlDNi4zMjI4OSA5Ljg0NzUyIDYuMjY0NTQgOS45Nzg4NyA2LjE2NjY1IDEwLjA2NjRDNi4wNjg3NiAxMC4xNTQgNS45Mzg4NyAxMC4xOTI1IDUuNzc2OTggMTAuMTgyQzUuNjExMzIgMTAuMTc1IDUuNDgzMzEgMTAuMTE5IDUuMzkyOTUgMTAuMDEzOUM1LjMwNjM2IDkuOTA4ODIgNS4yNjg3MSA5Ljc3Mzk3IDUuMjgwMDEgOS42MDkzNUw1LjM4NzMxIDguMzA2MzlDNS40MDIzNyA4LjEyNzc2IDUuNDM4MTMgNy45NzU0IDUuNDk0NjEgNy44NDkzMUM1LjU1NDg1IDcuNzIzMjEgNS42NjAyNiA3LjU5MTg3IDUuODEwODYgNy40NTUyN0w2LjcxNDQ1IDYuNjI1MTZDNy4wMDQzNSA2LjM2MjQ3IDcuMjY5NzcgNi4xNjEwNyA3LjUxMDczIDYuMDIwOTZDNy43NTE2OCA1Ljg3NzM2IDguMDI4NDEgNS44MDU1NiA4LjM0MDkgNS44MDU1NkM4Ljc1ODggNS44MDU1NiA5LjA3ODgyIDUuOTMzNCA5LjMwMDk1IDYuMTg5MDlDOS41MjY4NSA2LjQ0NDc4IDkuNjI0NzQgNi43NjE3NiA5LjU5NDYyIDcuMTQwMDRMOS40NzYwMiA4LjczMTk1QzkuNDUzNDMgOS4wMTU2NiA5LjQxOTU1IDkuMjYyNTkgOS4zNzQzNyA5LjQ3Mjc1QzkuMzI5MTkgOS42ODI5IDkuMjUzODkgOS45Mjk4MyA5LjE0ODQ3IDEwLjIxMzVMOS4wOTIgMTAuMzYwNkw5Ljg2NTY5IDExLjM3OTlDOS45MjIxNyAxMS40NTM0IDkuOTgwNTIgMTEuNTM0IDEwLjA0MDggMTEuNjIxNkMxMC4xMDEgMTEuNzA5MSAxMC4xNTM3IDExLjc5NjcgMTAuMTk4OSAxMS44ODQzTDExLjQwNzQgMTQuMTY0NEMxMS41MDUzIDE0LjM1MDEgMTEuNTI0MSAxNC41MTEyIDExLjQ2MzkgMTQuNjQ3OEMxMS40MDM3IDE0Ljc4NDQgMTEuMzAyIDE0Ljg4MjUgMTEuMTU4OSAxNC45NDJDMTEuMDE5NiAxNS4wMDE1IDEwLjg3MDkgMTUuMDEwMyAxMC43MTI4IDE0Ljk2ODNDMTAuNTU4NCAxNC45MjYyIDEwLjQzNjEgMTQuODE3NyAxMC4zNDU3IDE0LjY0MjVaTTEyLjQwNyA3Ljk2NDg5QzEyLjU4NCA3Ljk2NDg5IDEyLjcyNyA4LjAxMDQyIDEyLjgzNjIgOC4xMDE0OUMxMi45NDU0IDguMTg5MDUgMTMgOC4zMDYzOSAxMyA4LjQ1MzVDMTMgOC42MTExMSAxMi45NDU0IDguNzMzNyAxMi44MzYyIDguODIxMjdDMTIuNzMwOCA4LjkwODgzIDEyLjU4NzcgOC45NTI2MSAxMi40MDcgOC45NTI2MUgxMS4xMzA3QzEwLjk1MzggOC45NTI2MSAxMC44MTQ1IDguOTM2ODUgMTAuNzEyOCA4LjkwNTMzQzEwLjYxMTIgOC44NzAzIDEwLjUxMzMgOC44MDcyNiAxMC40MTkxIDguNzE2MTlMMTAuMDUyMSA4LjM3OTk0TDEwLjE0MjQgNy4wNDAyMUwxMS4wMzQ3IDcuOTY0ODlIMTIuNDA3Wk05LjAwMTY0IDUuMzExNjlDOC43NzE5OCA1LjMxMTY5IDguNTYzMDMgNS4yNjA5MSA4LjM3NDc4IDUuMTU5MzNDOC4xODY1MyA1LjA1NDI2IDguMDM1OTQgNC45MTQxNSA3LjkyMjk5IDQuNzM5MDNDNy44MTM4MSA0LjU2MzkgNy43NTkyMSA0LjM2OTUgNy43NTkyMSA0LjE1NTg1QzcuNzU5MjEgMy45NDIxOSA3LjgxMzgxIDMuNzQ3OCA3LjkyMjk5IDMuNTcyNjdDOC4wMzU5NCAzLjM5NzU0IDguMTg2NTMgMy4yNTkxOSA4LjM3NDc4IDMuMTU3NjJDOC41NjMwMyAzLjA1MjU0IDguNzcxOTggMyA5LjAwMTY0IDNDOS4yMzEzIDMgOS40NDAyNiAzLjA1MjU0IDkuNjI4NSAzLjE1NzYyQzkuODE2NzUgMy4yNTkxOSA5Ljk2NTQ2IDMuMzk3NTQgMTAuMDc0NiAzLjU3MjY3QzEwLjE4NzYgMy43NDc4IDEwLjI0NDEgMy45NDIxOSAxMC4yNDQxIDQuMTU1ODVDMTAuMjQ0MSA0LjM2OTUgMTAuMTg3NiA0LjU2MzkgMTAuMDc0NiA0LjczOTAzQzkuOTY1NDYgNC45MTQxNSA5LjgxNjc1IDUuMDU0MjYgOS42Mjg1IDUuMTU5MzNDOS40NDAyNiA1LjI2MDkxIDkuMjMxMyA1LjMxMTY5IDkuMDAxNjQgNS4zMTE2OVoifSl9KX1mdW5jdGlvbiBvMigpe3JldHVybiBKKCJzdmciLHt3aWR0aDoiMTEiLGhlaWdodDoiMTQiLHZpZXdCb3g6IjI2IDEgMTIgMTQiLGZpbGw6ImN1cnJlbnRDb2xvciIseG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiYXJpYS1oaWRkZW4iOiJ0cnVlIixjaGlsZHJlbjpKKCJwYXRoIix7ZDoiTTMzLjI0MzcgNC41ODQ1OUMzMy4wMDA4IDQuNTg0NTkgMzIuNzgxNyA0LjUyNzI4IDMyLjU4NjYgNC40MTI2OEMzMi4zOTE1IDQuMjk0MTIgMzIuMjM0MiA0LjEzODAxIDMyLjExNDcgMy45NDQzN0MzMS45OTkyIDMuNzQ2NzcgMzEuOTQxNCAzLjUyOTQxIDMxLjk0MTQgMy4yOTIyOUMzMS45NDE0IDMuMDUxMjIgMzEuOTk5MiAyLjgzMzg3IDMyLjExNDcgMi42NDAyMkMzMi4yMzQyIDIuNDQ2NTcgMzIuMzkxNSAyLjI5MjQ1IDMyLjU4NjYgMi4xNzc4NEMzMi43ODE3IDIuMDU5MjggMzMuMDAwOCAyIDMzLjI0MzcgMkMzMy40ODI2IDIgMzMuNjk5NyAyLjA1OTI4IDMzLjg5NDggMi4xNzc4NEMzNC4wOTM5IDIuMjkyNDUgMzQuMjUxMiAyLjQ0NjU3IDM0LjM2NjcgMi42NDAyMkMzNC40ODYyIDIuODMzODcgMzQuNTQ1OSAzLjA1MTIyIDM0LjU0NTkgMy4yOTIyOUMzNC41NDU5IDMuNTI5NDEgMzQuNDg2MiAzLjc0Njc3IDM0LjM2NjcgMy45NDQzN0MzNC4yNTEyIDQuMTM4MDEgMzQuMDkzOSA0LjI5NDEyIDMzLjg5NDggNC40MTI2OEMzMy42OTk3IDQuNTI3MjggMzMuNDgyNiA0LjU4NDU5IDMzLjI0MzcgNC41ODQ1OVpNMzEuMjAwNyA5Ljc0MTkxQzMxLjA3MzMgOS42NzA3NyAzMC45NDE5IDkuNTk1NjggMzAuODA2NSA5LjUxNjY0QzMwLjY3NSA5LjQzNzYgMzAuNTU5NiA5LjM0Mjc2IDMwLjQ2IDkuMjMyMUMzMC4zNjA0IDkuMTE3NDkgMzAuMjkyNyA4Ljk3NzIgMzAuMjU2OSA4LjgxMTIyQzMwLjIyNSA4LjY0MTI4IDMwLjI0NDkgOC40Mjk4NSAzMC4zMTY2IDguMTc2OTNMMzAuODA2NSA2LjQ4MTUzQzMwLjgzODMgNi4zNjY5MiAzMC44MTg0IDYuMjc5OTggMzAuNzQ2NyA2LjIyMDdDMzAuNjc5IDYuMTU3NDcgMzAuNTk3NCA2LjEyOTgxIDMwLjUwMTggNi4xMzc3MUwyOS42NTk1IDYuMTk2OTlMMjkuNDAyNyA3LjkyMjAyQzI5LjM3ODggOC4xMDc3NyAyOS4zMTUxIDguMjQ2MDkgMjkuMjExNSA4LjMzNjk4QzI5LjEwOCA4LjQyNzg4IDI4Ljk3MjYgOC40NjU0MiAyOC44MDUzIDguNDQ5NjFDMjguNjQyIDguNDMzOCAyOC41MTg2IDguMzY2NjIgMjguNDM0OSA4LjI0ODA2QzI4LjM1MTMgOC4xMjk1IDI4LjMyMTQgNy45NzczNSAyOC4zNDUzIDcuNzkxNjFMMjguNjI2MSA1LjY4MTI2QzI4LjY1IDUuNTExMzIgMjguNzE1NyA1LjM3NDk4IDI4LjgyMzIgNS4yNzIyM0MyOC45MzA4IDUuMTY5NDggMjkuMDY4MSA1LjExMjE3IDI5LjIzNTQgNS4xMDAzMkwzMS4zMzIxIDQuOTUyMTJDMzEuODgxNyA0LjkxMjYgMzIuMzM1NyA0Ljk2OTkgMzIuNjk0MSA1LjEyNDAzQzMzLjA1MjUgNS4yNzgxNiAzMy4zNjcxIDUuNTM4OTkgMzMuNjM3OSA1LjkwNjUyTDM0LjY3MTQgNy4zMjMzTDM2LjE3MDggNi42NjUzQzM2LjMzOCA2LjU5MDIxIDM2LjQ4OTMgNi41NzQ0IDM2LjYyNDggNi42MTc4N0MzNi43NjAyIDYuNjU3MzkgMzYuODY1NyA2Ljc1MjI0IDM2Ljk0MTQgNi45MDI0MkMzNy4wMTMgNy4wNTI1OSAzNy4wMTkgNy4xOTQ4NiAzNi45NTkzIDcuMzI5MjNDMzYuOTAzNSA3LjQ2MzYgMzYuNzkyIDcuNTY4MzIgMzYuNjI0OCA3LjY0MzQxTDM0LjczMTEgOC40NzkyNUMzNC42MDM3IDguNTM4NTMgMzQuNDc0MyA4LjU1MDM5IDM0LjM0MjggOC41MTQ4MkMzNC4yMTU0IDguNDc1MyAzNC4xMTM4IDguNDAwMjEgMzQuMDM4MiA4LjI4OTU2TDMzLjM4MTEgNy4zMzUxNkMzMy4zMTM0IDcuMjQwMzEgMzMuMjI5OCA3LjE5ODgxIDMzLjEzMDIgNy4yMTA2N0MzMy4wMzA2IDcuMjIyNTMgMzIuOTY0OSA3LjI4Mzc4IDMyLjkzMzEgNy4zOTQ0NEwzMi40OTEgOC45Mjk3OEwzNC43MzExIDEwLjM4ODFDMzQuODQyNiAxMC40NTkyIDM0LjkyMjMgMTAuNTU2IDM0Ljk3MDEgMTAuNjc4NUMzNS4wMTc5IDEwLjgwMSAzNS4wMjk4IDEwLjkyNTUgMzUuMDA1OSAxMS4wNTJDMzQuOTg2IDExLjE3NDUgMzQuOTI4MiAxMS4yNzUzIDM0LjgzMjcgMTEuMzU0M0wzMi43NzE4IDEzLjA5NzFDMzIuNjA4NSAxMy4yMzU0IDMyLjQ0NTIgMTMuMjk4NyAzMi4yODE5IDEzLjI4NjhDMzIuMTIyNiAxMy4yNzUgMzEuOTkzMiAxMy4yMTM3IDMxLjg5MzcgMTMuMTAzMUMzMS43OTgxIDEyLjk5NjQgMzEuNzU0MyAxMi44NjU5IDMxLjc2MjIgMTIuNzExOEMzMS43NzAyIDEyLjU1MzcgMzEuODUzOCAxMi40MDc1IDMyLjAxMzEgMTIuMjczMUwzMy40ODg2IDExLjAxNjRMMzEuMjAwNyA5Ljc0MTkxWk0yNy4yMDQ0IDE0Ljg2MzdDMjcuMDg0OSAxNC43NTcgMjcuMDE3MiAxNC42MTg2IDI3LjAwMTMgMTQuNDQ4N0MyNi45ODkzIDE0LjI3ODggMjcuMDYxIDE0LjExNjcgMjcuMjE2MyAxMy45NjI2TDI5LjIyMzUgMTEuOTc2N0wyOS45MzQzIDkuNDgxMDhDMzAuMDQxOCA5LjYxNTQ0IDMwLjE3NTMgOS43NDU4NiAzMC4zMzQ1IDkuODcyMzJDMzAuNDk3OCA5Ljk5NDgzIDMwLjY5MyAxMC4xMTczIDMwLjkyIDEwLjIzOTlMMzEuMTE3MSAxMC4zNDY2TDMwLjMwNDcgMTIuNDMzMkMzMC4yNTI5IDEyLjU1NTcgMzAuMjA5MSAxMi42NDA3IDMwLjE3MzMgMTIuNjg4MUMzMC4xNDE0IDEyLjczNTUgMzAuMDg1NiAxMi43OTg4IDMwLjAwNiAxMi44Nzc4TDI4LjA3MDYgMTQuNzgwN0MyNy45MTkyIDE0LjkyNjkgMjcuNzYzOSAxNSAyNy42MDQ2IDE1QzI3LjQ0OTMgMTUgMjcuMzE1OSAxNC45NTQ2IDI3LjIwNDQgMTQuODYzN1oifSl9KX1mdW5jdGlvbiBkMigpe3JldHVybiBKKCJzdmciLHt3aWR0aDoiMTQiLGhlaWdodDoiMTQiLHZpZXdCb3g6IjQ5IDMgMTYgMTIiLGZpbGw6ImN1cnJlbnRDb2xvciIseG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiYXJpYS1oaWRkZW4iOiJ0cnVlIixjaGlsZHJlbjpKKCJwYXRoIix7ZDoiTTU3LjAwMjggMTEuOTQ5QzU2Ljg0OCAxMS45NDkgNTYuNzE3MiAxMS44OTg3IDU2LjYxMDMgMTEuNzk4QzU2LjUwMzUgMTEuNjkzOSA1Ni40NTAxIDExLjU3MDcgNTYuNDUwMSAxMS40Mjg0VjkuMDI4NjNMNTQuNDIxNiA3LjEwNzc2QzU0LjIyMjcgNi45MjAzNSA1NC4wOTU1IDYuNjk4MjUgNTQuMDQwMyA2LjQ0MTQ0QzUzLjk4NSA2LjE4MTE2IDU0LjAxMDggNS45Mjc4MiA1NC4xMTc2IDUuNjgxNDJDNTQuMjI4MiA1LjQzODQ5IDU0LjM5NzcgNS4yNDQxNCA1NC42MjYxIDUuMDk4MzlDNTQuODU4MyA0Ljk0OTE2IDU1LjExNjIgNC44NzQ1NCA1NS4zOTk5IDQuODc0NTRINTguMTEzN0M1OC40MjMyIDQuODc0NTQgNTguNjg0OCA0Ljk3NjkyIDU4Ljg5ODUgNS4xODE2OEM1OS4xMTU5IDUuMzgyOTYgNTkuMjI0NiA1LjYyOTM2IDU5LjIyNDYgNS45MjA4N1Y3Ljc2MzY2SDYwLjg5OTNDNjEuMDUwNCA3Ljc2MzY2IDYxLjE3OTQgNy44MTM5OSA2MS4yODYyIDcuOTE0NjNDNjEuMzkzMSA4LjAxNTI3IDYxLjQ0NjUgOC4xMzg0NyA2MS40NDY1IDguMjg0MjNDNjEuNDQ2NSA4LjQyNjUxIDYxLjM5MzEgOC41NDc5OCA2MS4yODYyIDguNjQ4NjJDNjEuMTc5NCA4Ljc0OTI2IDYxLjA1MDQgOC43OTk1OCA2MC44OTkzIDguNzk5NThINTguNjcxOUM1OC41MjA5IDguNzk5NTggNTguMzkwMSA4Ljc0OTI2IDU4LjI3OTUgOC42NDg2MkM1OC4xNzI3IDguNTQ3OTggNTguMTE5MiA4LjQyNjUxIDU4LjExOTIgOC4yODQyM1Y2Ljk4ODAzQzU4LjExOTIgNi45MTg2MiA1OC4wOTkgNi44NTQ0MiA1OC4wNTg0IDYuNzk1NDJDNTguMDE3OSA2LjczMjk1IDU3Ljk0NDIgNi43MDE3MiA1Ny44MzczIDYuNzAxNzJINTYuMDYzMkM1NS45OTMyIDYuNzAxNzIgNTUuOTQ1MyA2LjcyOTQ4IDU1LjkxOTUgNi43ODUwMUM1NS44OTc0IDYuODM3MDYgNTUuOTA4NCA2Ljg4NzM5IDU1Ljk1MjYgNi45MzU5N0w1Ny40MDA3IDguNDU2MDFDNTcuNTAzOSA4LjU2MzYgNTcuNTU1NSA4LjY4MTU5IDU3LjU1NTUgOC44MDk5OVYxMS40Mjg0QzU3LjU1NTUgMTEuNTcwNyA1Ny41MDAyIDExLjY5MzkgNTcuMzg5NyAxMS43OThDNTcuMjgyOCAxMS44OTg3IDU3LjE1MzggMTEuOTQ5IDU3LjAwMjggMTEuOTQ5Wk01My4wMDEyIDE0QzUyLjU4NDggMTQgNTIuMTk0MiAxMy45MjcxIDUxLjgyOTUgMTMuNzgxNEM1MS40Njg0IDEzLjYzNTYgNTEuMTQ5NiAxMy40MzI2IDUwLjg3MzMgMTMuMTcyM0M1MC42MDA2IDEyLjkxMiA1MC4zODY5IDEyLjYxMTggNTAuMjMyMSAxMi4yNzE3QzUwLjA3NzQgMTEuOTI4MiA1MCAxMS41NjAzIDUwIDExLjE2ODFDNTAgMTAuNzc2IDUwLjA3NzQgMTAuNDA5OSA1MC4yMzIxIDEwLjA2OThDNTAuMzg2OSA5LjcyNjE4IDUwLjYwMDYgOS40MjQyNiA1MC44NzMzIDkuMTYzOThDNTEuMTQ5NiA4LjkwMzcgNTEuNDY4NCA4LjcwMDY4IDUxLjgyOTUgOC41NTQ5MkM1Mi4xOTQyIDguNDA5MTYgNTIuNTg0OCA4LjMzNjI4IDUzLjAwMTIgOC4zMzYyOEM1My40MjEyIDguMzM2MjggNTMuODExOCA4LjQwOTE2IDU0LjE3MjkgOC41NTQ5MkM1NC41Mzc3IDguNzAwNjggNTQuODU2NCA4LjkwMzcgNTUuMTI5MSA5LjE2Mzk4QzU1LjQwNTQgOS40MjQyNiA1NS42MjEgOS43MjYxOCA1NS43NzU4IDEwLjA2OThDNTUuOTMwNSAxMC40MDk5IDU2LjAwNzkgMTAuNzc2IDU2LjAwNzkgMTEuMTY4MUM1Ni4wMDc5IDExLjU2MDMgNTUuOTMwNSAxMS45MjgyIDU1Ljc3NTggMTIuMjcxN0M1NS42MjEgMTIuNjExOCA1NS40MDU0IDEyLjkxMiA1NS4xMjkxIDEzLjE3MjNDNTQuODU2NCAxMy40MzI2IDU0LjUzNzcgMTMuNjM1NiA1NC4xNzI5IDEzLjc4MTRDNTMuODExOCAxMy45MjcxIDUzLjQyMTIgMTQgNTMuMDAxMiAxNFpNNTMuMDAxMiAxMy4yNjZDNTMuNDEwMiAxMy4yNjYgNTMuNzgyMyAxMy4xNzA2IDU0LjExNzYgMTIuOTc5N0M1NC40NTY2IDEyLjc5MjMgNTQuNzI1NiAxMi41NDA3IDU0LjkyNDYgMTIuMjI0OUM1NS4xMjczIDExLjkwNTYgNTUuMjI4NiAxMS41NTM0IDU1LjIyODYgMTEuMTY4MUM1NS4yMjg2IDEwLjc4MjkgNTUuMTI3MyAxMC40MzI0IDU0LjkyNDYgMTAuMTE2NkM1NC43MjU2IDkuNzk3MzMgNTQuNDU2NiA5LjU0Mzk5IDU0LjExNzYgOS4zNTY1OUM1My43ODIzIDkuMTY1NzEgNTMuNDEwMiA5LjA3MDI4IDUzLjAwMTIgOS4wNzAyOEM1Mi41OTU5IDkuMDcwMjggNTIuMjIzNyA5LjE2NTcxIDUxLjg4NDcgOS4zNTY1OUM1MS41NDk0IDkuNTQzOTkgNTEuMjgwNCA5Ljc5NzMzIDUxLjA3NzggMTAuMTE2NkM1MC44Nzg4IDEwLjQzMjQgNTAuNzc5MyAxMC43ODI5IDUwLjc3OTMgMTEuMTY4MUM1MC43NzkzIDExLjU1MzQgNTAuODc4OCAxMS45MDU2IDUxLjA3NzggMTIuMjI0OUM1MS4yODA0IDEyLjU0MDcgNTEuNTQ5NCAxMi43OTIzIDUxLjg4NDcgMTIuOTc5N0M1Mi4yMjM3IDEzLjE3MDYgNTIuNTk1OSAxMy4yNjYgNTMuMDAxMiAxMy4yNjZaTTYyLjQ4MDEgOS42MTE2NkM2Mi4zNjIyIDkuNTE0NDkgNjIuMzAxNCA5LjQxNTU4IDYyLjI5NzcgOS4zMTQ5NEM2Mi4yOTc3IDkuMjEwODMgNjIuMzMwOCA5LjEyNDA3IDYyLjM5NzIgOS4wNTQ2NkM2Mi40NjcyIDguOTg1MjUgNjIuNTUzOCA4Ljk0NTM0IDYyLjY1NjkgOC45MzQ5M0M2Mi43NjM4IDguOTIxMDUgNjIuODY4OCA4Ljk1NTc1IDYyLjk3MiA5LjAzOTA0QzYzLjI4ODkgOS4zMDI3OSA2My41Mzk0IDkuNjE2ODcgNjMuNzIzNiA5Ljk4MTI2QzYzLjkwNzkgMTAuMzQ1NyA2NCAxMC43NDEzIDY0IDExLjE2ODFDNjQgMTEuNTYwMyA2My45MjI2IDExLjkyODIgNjMuNzY3OSAxMi4yNzE3QzYzLjYxMzEgMTIuNjExOCA2My4zOTc2IDEyLjkxMiA2My4xMjEyIDEzLjE3MjNDNjIuODQ4NSAxMy40MzI2IDYyLjUyOTggMTMuNjM1NiA2Mi4xNjUgMTMuNzgxNEM2MS44MDM5IDEzLjkyNzEgNjEuNDE1MiAxNCA2MC45OTg4IDE0QzYwLjU4MjQgMTQgNjAuMTkxOSAxMy45MjcxIDU5LjgyNzEgMTMuNzgxNEM1OS40NjIzIDEzLjYzNTYgNTkuMTQxNyAxMy40MzI2IDU4Ljg2NTQgMTMuMTcyM0M1OC41OTI3IDEyLjkxMiA1OC4zNzkgMTIuNjExOCA1OC4yMjQyIDEyLjI3MTdDNTguMDY5NSAxMS45MjgyIDU3Ljk5MjEgMTEuNTYwMyA1Ny45OTIxIDExLjE2ODFDNTcuOTkyMSAxMC45NjM0IDU4LjAxNDIgMTAuNzY1NiA1OC4wNTg0IDEwLjU3NDdDNTguMTA2MyAxMC4zODA0IDU4LjE3MjcgMTAuMTkzIDU4LjI1NzQgMTAuMDEyNUM1OC4zMDkgOS45MDE0NCA1OC4zODA4IDkuODMwMyA1OC40NzMgOS43OTkwNkM1OC41Njg4IDkuNzY0MzYgNTguNjYyNyA5Ljc2NDM2IDU4Ljc1NDggOS43OTkwNkM1OC44NTA2IDkuODMwMyA1OC45MjI1IDkuODkyNzYgNTguOTcwNCA5Ljk4NjQ3QzU5LjAxODMgMTAuMDgwMiA1OS4wMTA5IDEwLjE5ODIgNTguOTQ4MyAxMC4zNDA0QzU4LjgzMDQgMTAuNjAwNyA1OC43NzE0IDEwLjg3NjYgNTguNzcxNCAxMS4xNjgxQzU4Ljc3MTQgMTEuNTUzNCA1OC44NzA5IDExLjkwNTYgNTkuMDY5OSAxMi4yMjQ5QzU5LjI3MjUgMTIuNTQwNyA1OS41NDE1IDEyLjc5MjMgNTkuODc2OCAxMi45Nzk3QzYwLjIxNTggMTMuMTcwNiA2MC41ODk4IDEzLjI2NiA2MC45OTg4IDEzLjI2NkM2MS40MDc4IDEzLjI2NiA2MS43OCAxMy4xNzA2IDYyLjExNTMgMTIuOTc5N0M2Mi40NTA2IDEyLjc5MjMgNjIuNzE3NyAxMi41NDA3IDYyLjkxNjcgMTIuMjI0OUM2My4xMTk0IDExLjkwNTYgNjMuMjIwNyAxMS41NTM0IDYzLjIyMDcgMTEuMTY4MUM2My4yMjA3IDEwLjg1OTMgNjMuMTUyNSAxMC41NzEyIDYzLjAxNjIgMTAuMzA0QzYyLjg4MzUgMTAuMDMzMyA2Mi43MDQ4IDkuODAyNTMgNjIuNDgwMSA5LjYxMTY2Wk02MC45OTg4IDYuMjc0ODZDNjAuNzc0IDYuMjc0ODYgNjAuNTY5NSA2LjIyNDU0IDYwLjM4NTMgNi4xMjM4OUM2MC4yMDExIDYuMDE5NzggNjAuMDUzNyA1Ljg4MjcgNTkuOTQzMiA1LjcxMjY1QzU5LjgzNjMgNS41MzkxMyA1OS43ODI5IDUuMzQ2NTIgNTkuNzgyOSA1LjEzNDgzQzU5Ljc4MjkgNC45MjY2IDU5LjgzNjMgNC43Mzc0NiA1OS45NDMyIDQuNTY3NDFDNjAuMDUzNyA0LjM5Mzg5IDYwLjIwMTEgNC4yNTY4MSA2MC4zODUzIDQuMTU2MTdDNjAuNTY5NSA0LjA1MjA2IDYwLjc3NCA0IDYwLjk5ODggNEM2MS4yMTk5IDQgNjEuNDIwNyA0LjA1MjA2IDYxLjYwMTMgNC4xNTYxN0M2MS43ODE4IDQuMjU2ODEgNjEuOTI1NSA0LjM5Mzg5IDYyLjAzMjQgNC41Njc0MUM2Mi4xNDI5IDQuNzM3NDYgNjIuMTk4MiA0LjkyNjYgNjIuMTk4MiA1LjEzNDgzQzYyLjE5ODIgNS4zNDY1MiA2Mi4xNDI5IDUuNTM5MTMgNjIuMDMyNCA1LjcxMjY1QzYxLjkyNTUgNS44ODI3IDYxLjc4MTggNi4wMTk3OCA2MS42MDEzIDYuMTIzODlDNjEuNDIwNyA2LjIyNDU0IDYxLjIxOTkgNi4yNzQ4NiA2MC45OTg4IDYuMjc0ODZaIn0pfSl9ZnVuY3Rpb24gYzIoKXtyZXR1cm4gSigic3ZnIix7d2lkdGg6IjE2IixoZWlnaHQ6IjE0Iix2aWV3Qm94OiI3MCA1IDE4IDkiLGZpbGw6ImN1cnJlbnRDb2xvciIseG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiYXJpYS1oaWRkZW4iOiJ0cnVlIixjaGlsZHJlbjpKKCJwYXRoIix7ZDoiTTg1LjU3MiAxMi4xMDM4Qzg2LjA2IDEyLjEwMzggODYuNDIwNyAxMS45ODkyIDg2LjY1NDIgMTEuNzYwMUM4Ni44ODQ3IDExLjUyODEgODcgMTEuMTY0MSA4NyAxMC42NjgxVjEwLjExMTJDODcgOS43NjkwMSA4Ni45MjA3IDkuNDYzMDIgODYuNzYyIDkuMTkzMjlDODYuNjAzMyA4LjkyMDY1IDg2LjM3NTggOC42OTczMyA4Ni4wNzk0IDguNTIzMzFDODUuNzgwMSA4LjM0OTI5IDg1LjQyMjMgOC4yMzc2MiA4NS4wMDYyIDguMTg4MzJMODMuMDE2OCA3Ljk1MzM5TDgxLjE5ODEgNi44NDgzNUM4MC45MjI3IDYuNjgwMTMgODAuNjYwOCA2LjU0MjM3IDgwLjQxMjMgNi40MzUwNUM4MC4xNjA4IDYuMzI0ODQgNzkuODk3NCA2LjIzNzgzIDc5LjYyMTkgNi4xNzQwMkM3OS4zNDY1IDYuMTEwMjEgNzkuMDM4MiA2LjA2NTI2IDc4LjY5NjkgNi4wMzkxNUM3OC4zNTI2IDYuMDEzMDUgNzcuOTUxNCA2IDc3LjQ5MzQgNkg3Ni44MTA4Qzc2LjM4ODcgNiA3NS45OTUgNi4wNDkzMSA3NS42Mjk4IDYuMTQ3OTJDNzUuMjYxNiA2LjI0MzYzIDc0LjkxODggNi4zNzEyNSA3NC42MDE1IDYuNTMwNzZDNzQuMjgxMSA2LjY5MDI4IDczLjk4NjIgNi44NjU3NiA3My43MTY4IDcuMDU3MThDNzMuNDQ0NCA3LjI0ODYgNzMuMTk1OSA3LjQzNzEyIDcyLjk3MTQgNy42MjI3NUw3Mi4yNTc0IDcuODUzMzNDNzEuODMyMyA3Ljk4Njc0IDcxLjUxNjQgOC4xODM5NyA3MS4zMDk5IDguNDQ1QzcxLjEwMzMgOC43MDMxMyA3MSA5LjAzMzc3IDcxIDkuNDM2OTJWMTAuNjQyQzcxIDExLjE0NjcgNzEuMTE1MyAxMS41MTY1IDcxLjM0NTggMTEuNzUxNEM3MS41NzYzIDExLjk4NjMgNzEuOTM3IDEyLjEwMzggNzIuNDI4IDEyLjEwMzhINzIuNzE1NEM3Mi43MDA0IDEyLjAzNzEgNzIuNjg4NSAxMS45NzA0IDcyLjY3OTUgMTEuOTAzN0M3Mi42NzA1IDExLjgzNDEgNzIuNjY2IDExLjc2NDUgNzIuNjY2IDExLjY5NDhDNzIuNjY2IDExLjM1NTUgNzIuNzQ5OCAxMS4wNDk1IDcyLjkxNzUgMTAuNzc2OUM3My4wODUxIDEwLjUwNDIgNzMuMzExMiAxMC4yODgyIDczLjU5NTYgMTAuMTI4N0M3My44NzcgOS45NjYyMyA3NC4xOTI4IDkuODg1MDIgNzQuNTQzMSA5Ljg4NTAyQzc0Ljg5MDQgOS44ODUwMiA3NS4yMDYyIDkuOTY2MjMgNzUuNDkwNiAxMC4xMjg3Qzc1Ljc3MiAxMC4yODgyIDc1Ljk5NjUgMTAuNTA0MiA3Ni4xNjQyIDEwLjc3NjlDNzYuMzMxOCAxMS4wNDk1IDc2LjQxNTcgMTEuMzU1NSA3Ni40MTU3IDExLjY5NDhDNzYuNDE1NyAxMS43NjQ1IDc2LjQxMTIgMTEuODM0MSA3Ni40MDIyIDExLjkwMzdDNzYuMzkzMiAxMS45NzA0IDc2LjM4MjcgMTIuMDM3MSA3Ni4zNzA4IDEyLjEwMzhIODEuNjM4MkM4MS42MjAzIDEyLjAzNzEgODEuNjA4MyAxMS45NzA0IDgxLjYwMjMgMTEuOTAzN0M4MS41OTMzIDExLjgzNDEgODEuNTg4OCAxMS43NjQ1IDgxLjU4ODggMTEuNjk0OEM4MS41ODg4IDExLjM1NTUgODEuNjcyNyAxMS4wNDk1IDgxLjg0MDMgMTAuNzc2OUM4Mi4wMDUgMTAuNTA0MiA4Mi4yMjk1IDEwLjI4ODIgODIuNTEzOSAxMC4xMjg3QzgyLjc5NTMgOS45NjYyMyA4My4xMTExIDkuODg1MDIgODMuNDYxNCA5Ljg4NTAyQzgzLjgxMTcgOS44ODUwMiA4NC4xMjkgOS45NjYyMyA4NC40MTM0IDEwLjEyODdDODQuNjk0OCAxMC4yODgyIDg0LjkxOTQgMTAuNTA0MiA4NS4wODcgMTAuNzc2OUM4NS4yNTE3IDExLjA0OTUgODUuMzM0IDExLjM1NTUgODUuMzM0IDExLjY5NDhDODUuMzM0IDExLjc2NDUgODUuMzMxIDExLjgzNDEgODUuMzI1IDExLjkwMzdDODUuMzE2IDExLjk3MDQgODUuMzA0MSAxMi4wMzcxIDg1LjI4OTEgMTIuMTAzOEg4NS41NzJaTTgzLjQ2MTQgMTNDODMuNzEyOSAxMyA4My45NDA0IDEyLjk0MiA4NC4xNDQgMTIuODI2Qzg0LjM0NzYgMTIuNzEgODQuNTA5MiAxMi41NTMzIDg0LjYyOSAxMi4zNTYxQzg0Ljc0ODcgMTIuMTU4OSA4NC44MDg2IDExLjkzODUgODQuODA4NiAxMS42OTQ4Qzg0LjgwODYgMTEuNDUxMiA4NC43NDg3IDExLjIzMDggODQuNjI5IDExLjAzMzZDODQuNTA5MiAxMC44MzYzIDg0LjM0NzYgMTAuNjc5NyA4NC4xNDQgMTAuNTYzN0M4My45NDA0IDEwLjQ0NzcgODMuNzEyOSAxMC4zODk3IDgzLjQ2MTQgMTAuMzg5N0M4My4yMDY5IDEwLjM4OTcgODIuOTc3OSAxMC40NDc3IDgyLjc3NDMgMTAuNTYzN0M4Mi41NzA4IDEwLjY3OTcgODIuNDA5MSAxMC44MzYzIDgyLjI4OTQgMTEuMDMzNkM4Mi4xNjk2IDExLjIzMDggODIuMTA5NyAxMS40NTEyIDgyLjEwOTcgMTEuNjk0OEM4Mi4xMDk3IDExLjkzODUgODIuMTY5NiAxMi4xNTg5IDgyLjI4OTQgMTIuMzU2MUM4Mi40MDkxIDEyLjU1MzMgODIuNTcwOCAxMi43MSA4Mi43NzQzIDEyLjgyNkM4Mi45Nzc5IDEyLjk0MiA4My4yMDY5IDEzIDgzLjQ2MTQgMTNaTTc0LjU0MzEgMTNDNzQuNzk0NiAxMyA3NS4wMjIxIDEyLjk0MiA3NS4yMjU3IDEyLjgyNkM3NS40MjkyIDEyLjcxIDc1LjU5MDkgMTIuNTUzMyA3NS43MTA2IDEyLjM1NjFDNzUuODMwNCAxMi4xNTg5IDc1Ljg5MDMgMTEuOTM4NSA3NS44OTAzIDExLjY5NDhDNzUuODkwMyAxMS40NTEyIDc1LjgzMDQgMTEuMjMwOCA3NS43MTA2IDExLjAzMzZDNzUuNTkwOSAxMC44MzYzIDc1LjQyOTIgMTAuNjc5NyA3NS4yMjU3IDEwLjU2MzdDNzUuMDIyMSAxMC40NDc3IDc0Ljc5NDYgMTAuMzg5NyA3NC41NDMxIDEwLjM4OTdDNzQuMjg4NiAxMC4zODk3IDc0LjA1OTYgMTAuNDQ3NyA3My44NTYgMTAuNTYzN0M3My42NTI0IDEwLjY3OTcgNzMuNDkwOCAxMC44MzYzIDczLjM3MSAxMS4wMzM2QzczLjI1MTMgMTEuMjMwOCA3My4xOTE0IDExLjQ1MTIgNzMuMTkxNCAxMS42OTQ4QzczLjE5MTQgMTEuOTM4NSA3My4yNTEzIDEyLjE1ODkgNzMuMzcxIDEyLjM1NjFDNzMuNDkwOCAxMi41NTMzIDczLjY1MjQgMTIuNzEgNzMuODU2IDEyLjgyNkM3NC4wNTk2IDEyLjk0MiA3NC4yODg2IDEzIDc0LjU0MzEgMTNaIn0pfSl9ZnVuY3Rpb24gSjAoe3NpemU6Qz0xOCxzdHJva2VXaWR0aDokPTJ9KXtyZXR1cm4gSigic3ZnIix7eG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIix3aWR0aDpDLGhlaWdodDpDLHZpZXdCb3g6IjAgMCAyNCAyNCIsZmlsbDoibm9uZSIsc3Ryb2tlOiJjdXJyZW50Q29sb3IiLHN0cm9rZVdpZHRoOiQsc3Ryb2tlTGluZWNhcDoicm91bmQiLHN0cm9rZUxpbmVqb2luOiJyb3VuZCIsY2hpbGRyZW46W0ooInBhdGgiLHtkOiJNMyAxMmE5IDkgMCAxIDAgOS05IDkuNzUgOS43NSAwIDAgMC02Ljc0IDIuNzRMMyA4In0pLEooInBhdGgiLHtkOiJNMyAzdjVoNSJ9KV19KX12YXIgRDM9IkFjY2Vzc2liaWxpdHkgdW5hdmFpbGFibGUgb24gdGhpcyBzaW11bGF0b3IuIjtmdW5jdGlvbiBxMihDKXtyZXR1cm4gQz8uZXJyb3JzPy5pbmNsdWRlcyhEMyk/PyExfWZ1bmN0aW9uIFkyKEMsJCl7aWYoQz09PSQpcmV0dXJuITA7aWYoQy5pZCE9PSQuaWR8fEMucGF0aCE9PSQucGF0aHx8Qy5sYWJlbCE9PSQubGFiZWx8fEMudmFsdWUhPT0kLnZhbHVlfHxDLnJvbGUhPT0kLnJvbGV8fEMudHlwZSE9PSQudHlwZXx8Qy5lbmFibGVkIT09JC5lbmFibGVkKXJldHVybiExO2xldCBLPUMuZnJhbWUsWD0kLmZyYW1lO3JldHVybiBLPT09WHx8Sy54PT09WC54JiZLLnk9PT1YLnkmJksud2lkdGg9PT1YLndpZHRoJiZLLmhlaWdodD09PVguaGVpZ2h0fWZ1bmN0aW9uIEcyKEMsJCl7bGV0IEs9Qy5sYWJlbHx8Qy5yb2xlfHxgZWxlbWVudCAkeyQrMX1gLFg9Qy5yb2xlfHxDLnR5cGU7cmV0dXJue2lkOkMuaWQscGF0aDpDLnBhdGgsbGFiZWw6Syx2YWx1ZTpDLnZhbHVlLHJvbGU6WCx0eXBlOkMudHlwZSxlbmFibGVkOkMuZW5hYmxlZCxmcmFtZTpDLmZyYW1lfX1mdW5jdGlvbiBVMyhDLCQpe2xldCBLPU1hdGgubWF4KDAsQy54KSxYPU1hdGgubWF4KDAsQy55KSxRPU1hdGgubWluKCQud2lkdGgsQy54K0Mud2lkdGgpLE49TWF0aC5taW4oJC5oZWlnaHQsQy55K0MuaGVpZ2h0KSxaPU1hdGgubWF4KDAsUS1LKSxxPU1hdGgubWF4KDAsTi1YKTtyZXR1cm4gWj4wJiZxPjA/e3g6Syx5Olgsd2lkdGg6WixoZWlnaHQ6cX06bnVsbH1mdW5jdGlvbiBRMChDKXtyZXR1cm4gQy5pZH1mdW5jdGlvbiBhMihDKXtyZXR1cm5gJHtDLnh9LCR7Qy55fSAke0Mud2lkdGh9eCR7Qy5oZWlnaHR9YH1mdW5jdGlvbiBGMyhDKXtyZXR1cm5bYEFYIGxhYmVsOiAke0MubGFiZWx8fCJVbmxhYmVsZWQifWAsQy5yb2xlP2Byb2xlOiAke0Mucm9sZX1gOiIiLEMudHlwZT9gdHlwZTogJHtDLnR5cGV9YDoiIixDLnZhbHVlP2B2YWx1ZTogJHtDLnZhbHVlfWA6IiIsQy5pZD9gaWQ6ICR7Qy5pZH1gOiIiLGBwYXRoOiAke0MucGF0aH1gLGBmcmFtZTogJHthMihDLmZyYW1lKX1gXS5maWx0ZXIoQm9vbGVhbikuam9pbigiOyAiKX1mdW5jdGlvbiB6MyhDKXtsZXRbJCxLXT1BKG51bGwpLFtYLFFdPUEoIkFYIG9mZiIpO3JldHVybiBXKCgpPT57aWYoIUMpe0sobnVsbCksUSgiQVggb2ZmIik7cmV0dXJufUsobnVsbCksUSgiQVggd2FpdGluZyIpO2xldCBOPW5ldyBFdmVudFNvdXJjZShDKTtyZXR1cm4gTi5vbm1lc3NhZ2U9KFopPT57dHJ5e2xldCBxPUpTT04ucGFyc2UoWi5kYXRhKTtLKHEpLFEocTIocSk/IkFYIHVuYXZhaWxhYmxlIjpgJHtxLmVsZW1lbnRzLmxlbmd0aH0gQVggZWxlbWVudHNgKX1jYXRjaHtRKCJBWCBwYXJzZSBlcnJvciIpfX0sTi5hZGRFdmVudExpc3RlbmVyKCJlcnJvciIsKCk9PntRKCJBWCByZWNvbm5lY3RpbmciKX0pLCgpPT5OLmNsb3NlKCl9LFtDXSkse3NuYXBzaG90OiQsc3RhdHVzOlh9fXZhciBpMj1pMSh7c25hcHNob3Q6bnVsbCxzdGF0dXM6IkFYIG9mZiJ9KSxyMj1pMShudWxsKTtmdW5jdGlvbiB6MCgpe3JldHVybiAkMChpMil9ZnVuY3Rpb24gTDIoKXtsZXQgQz0kMChyMik7aWYoIUMpdGhyb3cgRXJyb3IoIkFYIHNlbGVjdGlvbiBjb250ZXh0IGlzIHVuYXZhaWxhYmxlIik7cmV0dXJuIEN9dmFyIEgzPWswKGZ1bmN0aW9uKHtlbGVtZW50OiQsaW5kZXg6SyxzY3JlZW46WCxoaWdobGlnaHRlZDpRLHNlbGVjdGVkOk4sb25IaWdobGlnaHQ6WixvblNlbGVjdDpxfSl7bGV0IEc9UTAoJCksWT1HMigkLEspLFY9VTMoJC5mcmFtZSxYKTtpZighVilyZXR1cm4gbnVsbDtsZXQgTD1GMyhZKTtyZXR1cm4gSigiYnV0dG9uIix7dHlwZToiYnV0dG9uIiwiZGF0YS1heC1rZXkiOkcsImRhdGEtYXgtaWQiOlkuaWQsImRhdGEtYXgtcGF0aCI6WS5wYXRoLCJkYXRhLWF4LWxhYmVsIjpZLmxhYmVsLCJkYXRhLWF4LXZhbHVlIjpZLnZhbHVlLCJkYXRhLWF4LXJvbGUiOlkucm9sZSwiZGF0YS1heC10eXBlIjpZLnR5cGUsImRhdGEtYXgtZW5hYmxlZCI6U3RyaW5nKFkuZW5hYmxlZCksImRhdGEtYXgtZnJhbWUiOmEyKFkuZnJhbWUpLCJkYXRhLWF4LXNlbGVjdGVkIjpTdHJpbmcoTiksImFyaWEtbGFiZWwiOiQubGFiZWx8fEwsdGl0bGU6TCxvbkNsaWNrOigpPT5xKEcpLG9uTW91c2VFbnRlcjooKT0+WihHKSxvbk1vdXNlTGVhdmU6KCk9PloobnVsbCksY2xhc3NOYW1lOiJhYnNvbHV0ZSBib3gtYm9yZGVyIG1pbi13LXB4IG1pbi1oLXB4IHAtMCByb3VuZGVkLVszcHhdIGJvcmRlciBjdXJzb3ItcG9pbnRlciBwb2ludGVyLWV2ZW50cy1hdXRvIixzdHlsZTp7bGVmdDpgJHtWLngvWC53aWR0aCoxMDB9JWAsdG9wOmAke1YueS9YLmhlaWdodCoxMDB9JWAsd2lkdGg6YCR7Vi53aWR0aC9YLndpZHRoKjEwMH0lYCxoZWlnaHQ6YCR7Vi5oZWlnaHQvWC5oZWlnaHQqMTAwfSVgLGJvcmRlckNvbG9yOk4/IiM2MGE1ZmEiOlE/IiNmYmJmMjQiOiIjMzRkMzk5IixiYWNrZ3JvdW5kOk4/InJnYmEoOTYsMTY1LDI1MCwwLjI0KSI6UT8icmdiYSgyNDUsMTU4LDExLDAuMjgpIjoicmdiYSgxNiwxODUsMTI5LDAuMTIpIn19KX0sKEMsJCk9PkMuaW5kZXg9PT0kLmluZGV4JiZDLmhpZ2hsaWdodGVkPT09JC5oaWdobGlnaHRlZCYmQy5zZWxlY3RlZD09PSQuc2VsZWN0ZWQmJkMub25IaWdobGlnaHQ9PT0kLm9uSGlnaGxpZ2h0JiZDLm9uU2VsZWN0PT09JC5vblNlbGVjdCYmQy5zY3JlZW4ud2lkdGg9PT0kLnNjcmVlbi53aWR0aCYmQy5zY3JlZW4uaGVpZ2h0PT09JC5zY3JlZW4uaGVpZ2h0JiZZMihDLmVsZW1lbnQsJC5lbGVtZW50KSk7ZnVuY3Rpb24gQTMoKXtsZXR7c25hcHNob3Q6Q309ejAoKSx7aGlnaGxpZ2h0ZWRLZXk6JCxzZWxlY3RlZEtleTpLLHNldEhpZ2hsaWdodGVkS2V5Olgsc2V0U2VsZWN0ZWRLZXk6UX09TDIoKTtpZighQz8uc2NyZWVuLndpZHRofHwhQz8uc2NyZWVuLmhlaWdodClyZXR1cm4gbnVsbDtyZXR1cm4gSigiZGl2Iix7Y2xhc3NOYW1lOiJhYnNvbHV0ZSBpbnNldC0wIHotMTAgb3ZlcmZsb3ctaGlkZGVuIHBvaW50ZXItZXZlbnRzLW5vbmUiLGNoaWxkcmVuOkMuZWxlbWVudHMubWFwKChOLFopPT57bGV0IHE9UTAoTik7cmV0dXJuIEooSDMse2VsZW1lbnQ6TixpbmRleDpaLHNjcmVlbjpDLnNjcmVlbixoaWdobGlnaHRlZDpxPT09JCxzZWxlY3RlZDpxPT09SyxvbkhpZ2hsaWdodDpYLG9uU2VsZWN0OlF9LHEpfSl9KX1mdW5jdGlvbiBPMyh7ZW5kcG9pbnQ6QyxjaGlsZHJlbjokfSl7bGV0e3NuYXBzaG90Okssc3RhdHVzOlh9PXozKEMpLFtRLE5dPUEobnVsbCksW1oscV09QShudWxsKTtXKCgpPT57aWYoIUMpTihudWxsKSxxKG51bGwpfSxbQ10pO2xldCBHPU0xKCgpPT4oe3NuYXBzaG90Okssc3RhdHVzOlh9KSxbSyxYXSksWT1NMSgoKT0+KHtoaWdobGlnaHRlZEtleTpRLHNlbGVjdGVkS2V5Olosc2V0SGlnaGxpZ2h0ZWRLZXk6TixzZXRTZWxlY3RlZEtleTpxfSksW1EsWl0pO3JldHVybiBKKGkyLHt2YWx1ZTpHLGNoaWxkcmVuOkoocjIse3ZhbHVlOlksY2hpbGRyZW46JH0pfSl9ZnVuY3Rpb24gVDMoe292ZXJsYXlFbmFibGVkOkMsc3RyZWFtaW5nOiQsb25Ub2dnbGVPdmVybGF5Okt9KXtsZXR7c3RhdHVzOlh9PXowKCksW1EsTl09QSghMSksWj1DJiYkO3JldHVybiBKKFAxLkJ1dHRvbix7ImFyaWEtbGFiZWwiOkM/IkhpZGUgYWNjZXNzaWJpbGl0eSBvdmVybGF5IjoiU2hvdyBhY2Nlc3NpYmlsaXR5IG92ZXJsYXkiLCJhcmlhLXByZXNzZWQiOkMsdGl0bGU6WCxvbkNsaWNrOkssb25Nb3VzZUVudGVyOigpPT5OKCEwKSxvbk1vdXNlTGVhdmU6KCk9Pk4oITEpLHN0eWxlOlo/e2JhY2tncm91bmQ6UT8icmdiYSgyNTUsMjU1LDI1NSwwLjEyKSI6InJnYmEoMjU1LDI1NSwyNTUsMC4wOCkiLGNvbG9yOiJyZ2JhKDI1NSwyNTUsMjU1LDAuOTUpIn06dm9pZCAwLGNoaWxkcmVuOkooInN2ZyIse3dpZHRoOiIxOSIsaGVpZ2h0OiIxOSIsdmlld0JveDoiMCAwIDI0IDI0IixmaWxsOiJub25lIixzdHJva2U6ImN1cnJlbnRDb2xvciIsc3Ryb2tlV2lkdGg6IjIiLHN0cm9rZUxpbmVjYXA6InJvdW5kIixzdHJva2VMaW5lam9pbjoicm91bmQiLGNoaWxkcmVuOltKKCJwYXRoIix7ZDoiTTEyLjAzNCAxMi42ODFhLjQ5OC40OTggMCAwIDEgLjY0Ny0uNjQ3bDkgMy41YS41LjUgMCAwIDEtLjAzMy45NDNsLTMuNDQ0IDEuMDY4YTEgMSAwIDAgMC0uNjYuNjZsLTEuMDY3IDMuNDQzYS41LjUgMCAwIDEtLjk0My4wMzN6In0pLEooInBhdGgiLHtkOiJNMjEgMTFWNWEyIDIgMCAwIDAtMi0ySDVhMiAyIDAgMCAwLTIgMnYxNGEyIDIgMCAwIDAgMiAyaDYifSldfSl9KX1mdW5jdGlvbiBNMyhDKXt0cnl7bGV0ICQ9SlNPTi5wYXJzZShDKSxLPVtdO2ZvcihsZXRbWCxRXW9mIE9iamVjdC5lbnRyaWVzKCQuZGV2aWNlcz8/e30pKXtsZXQgTj1YLnJlcGxhY2UoL15jb21cLmFwcGxlXC5Db3JlU2ltdWxhdG9yXC5TaW1SdW50aW1lXC4vLCIiKS5yZXBsYWNlKC8tL2csIi4iKTtmb3IobGV0IFogb2YgUSlpZihaLmlzQXZhaWxhYmxlKUsucHVzaCh7dWRpZDpaLnVkaWQsbmFtZTpaLm5hbWUsc3RhdGU6Wi5zdGF0ZSxydW50aW1lOk59KX1yZXR1cm4gS31jYXRjaHtyZXR1cm5bXX19ZnVuY3Rpb24gSDAoQyl7bGV0ICQ9Qy50b0xvd2VyQ2FzZSgpO2lmKCQuaW5jbHVkZXMoImlwaG9uZSIpKXJldHVybiAwO2lmKCQuaW5jbHVkZXMoImlwYWQiKSlyZXR1cm4gMTtpZigkLmluY2x1ZGVzKCJ3YXRjaCIpKXJldHVybiAyO2lmKCQuaW5jbHVkZXMoInZpc2lvbiIpKXJldHVybiAzO3JldHVybiA0fWZ1bmN0aW9uIEEwKEMpe2xldCAkPUMudG9Mb3dlckNhc2UoKTtpZigkLnN0YXJ0c1dpdGgoImlvcyIpKXJldHVybiAwO2lmKCQuc3RhcnRzV2l0aCgiaXBhZG9zIikpcmV0dXJuIDE7aWYoJC5zdGFydHNXaXRoKCJ3YXRjaG9zIikpcmV0dXJuIDI7aWYoJC5zdGFydHNXaXRoKCJ2aXNpb25vcyIpfHwkLnN0YXJ0c1dpdGgoInhyb3MiKSlyZXR1cm4gMztyZXR1cm4gNH1mdW5jdGlvbiBnMShDKXtsZXQgSz13aW5kb3cuX19TSU1fUFJFVklFV19fPy5iYXNlUGF0aD8/KHdpbmRvdy5sb2NhdGlvbi5wYXRobmFtZS5yZXBsYWNlKC9cLyskLywiIil8fCIvIik7cmV0dXJuIEs9PT0iLyI/YC8ke0N9YDpgJHtLfS8ke0N9YH1mdW5jdGlvbiB3Myh7ZGV2aWNlczpDLGxvYWRpbmc6JCxlcnJvcjpLLG9uUmVmcmVzaDpYfSl7bGV0W1EsTl09QShudWxsKSxbWixxXT1BKG51bGwpLEc9UChhc3luYyhMKT0+e2lmKFEpcmV0dXJuO04oTC51ZGlkKSxxKG51bGwpO3RyeXtsZXQgaz1gJHtnMSgiYXBpIil9P2RldmljZT0ke2VuY29kZVVSSUNvbXBvbmVudChMLnVkaWQpfWAsRD0oYXN5bmMoKT0+e2xldCBNPURhdGUubm93KCkrOTAwMDA7d2hpbGUoRGF0ZS5ub3coKTxNKXt0cnl7bGV0IEU9YXdhaXQgZmV0Y2goayx7Y2FjaGU6Im5vLXN0b3JlIn0pO2lmKEUub2smJmF3YWl0IEUuanNvbigpKXtsZXQgeT1uZXcgVVJMKHdpbmRvdy5sb2NhdGlvbi5ocmVmKTtyZXR1cm4geS5zZWFyY2hQYXJhbXMuc2V0KCJkZXZpY2UiLEwudWRpZCksd2luZG93LmxvY2F0aW9uLmFzc2lnbih5LnRvU3RyaW5nKCkpLCEwfX1jYXRjaHt9YXdhaXQgbmV3IFByb21pc2UoKEUpPT5zZXRUaW1lb3V0KEUsNDAwKSl9cmV0dXJuITF9KSgpLFQ9ZzEoImdyaWQvYXBpL3N0YXJ0IiksQj1mZXRjaChULHttZXRob2Q6IlBPU1QiLGhlYWRlcnM6eyJDb250ZW50LVR5cGUiOiJhcHBsaWNhdGlvbi9qc29uIn0sYm9keTpKU09OLnN0cmluZ2lmeSh7dWRpZDpMLnVkaWR9KX0pLnRoZW4oYXN5bmMoTSk9PntsZXQgRT1hd2FpdCBNLmpzb24oKS5jYXRjaCgoKT0+KHt9KSk7aWYoIU0ub2t8fCFFLm9rKXRocm93IEVycm9yKEUuZXJyb3I/P2BIVFRQICR7TS5zdGF0dXN9YCl9KTtpZihhd2FpdCBQcm9taXNlLnJhY2UoW0QsQi50aGVuKCgpPT4ic3RhcnRlZCIpXSk9PT0hMClyZXR1cm47aWYoYXdhaXQgRClyZXR1cm47dGhyb3cgRXJyb3IoInNlcnZlLXNpbSBzdGFydGVkIGJ1dCBubyBzdHJlYW0gc3RhdGUgYXBwZWFyZWQiKX1jYXRjaChrKXtxKGsgaW5zdGFuY2VvZiBFcnJvcj9rLm1lc3NhZ2U6IkZhaWxlZCB0byBzdGFydCBzdHJlYW0iKSxOKG51bGwpfX0sW1FdKSxZPW5ldyBNYXA7Zm9yKGxldCBMIG9mIEMpe2xldCBrPVkuZ2V0KEwucnVudGltZSk7aWYoIWspaz1bXSxZLnNldChMLnJ1bnRpbWUsayk7ay5wdXNoKEwpfWZvcihsZXQgTCBvZiBZLnZhbHVlcygpKUwuc29ydCgoayxEKT0+e2xldCBUPWsuc3RhdGU9PT0iQm9vdGVkIj8wOjEsQj1ELnN0YXRlPT09IkJvb3RlZCI/MDoxO2lmKFQhPT1CKXJldHVybiBULUI7cmV0dXJuIEgwKGsubmFtZSktSDAoRC5uYW1lKXx8ay5uYW1lLmxvY2FsZUNvbXBhcmUoRC5uYW1lKX0pO2xldCBWPVsuLi5ZLmVudHJpZXMoKV0uc29ydCgoW0xdLFtrXSk9PkEwKEwpLUEwKGspfHxMLmxvY2FsZUNvbXBhcmUoaykpO3JldHVybiBKKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggZmxleC1jb2wgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGgtc2NyZWVuIGJnLXBhZ2UgcC02IGdhcC0zIGZvbnQtc3lzdGVtIGJveC1ib3JkZXIiLGNoaWxkcmVuOkooImRpdiIse2NsYXNzTmFtZToiZmxleCBmbGV4LWNvbCBpdGVtcy1jZW50ZXIgZ2FwLTMgdGV4dC1jZW50ZXIiLGNoaWxkcmVuOltKKCJoMSIse2NsYXNzTmFtZToidGV4dC1bMThweF0gbS0wIHRleHQtd2hpdGUvOTAiLGNoaWxkcmVuOiJObyBzZXJ2ZS1zaW0gc3RyZWFtIHJ1bm5pbmcifSksSigicCIse2NsYXNzTmFtZToidGV4dC13aGl0ZS81NSB0ZXh0LVsxNHB4XSBtYXgtdy0xMjAiLGNoaWxkcmVuOlsiUGljayBhIHNpbXVsYXRvciB0byBib290LCBvciBzdGFydCBvbmUgeW91cnNlbGYgd2l0aCIsIiAiLEooImNvZGUiLHtjbGFzc05hbWU6ImJnLVsjMjIyXSBweC0xLjUgcHktMC41IHJvdW5kZWQgdGV4dC1bMTNweF0iLGNoaWxkcmVuOiJidW54IHNlcnZlLXNpbSAtLWRldGFjaCJ9KSwiLiJdfSksSigiZGl2Iix7Y2xhc3NOYW1lOiJ3LWZ1bGwgbWF4LXctOTAgbXQtMiBiZy1wYW5lbCBib3JkZXIgYm9yZGVyLXdoaXRlLzEyIHJvdW5kZWQtWzEwcHhdIHAtMSBmb250LW1vbm8gdGV4dC1bMTNweF0gdGV4dC13aGl0ZS85MCB0ZXh0LWxlZnQgbWF4LWgtWzcwdmhdIG92ZXJmbG93LXktYXV0byBtaW4taC0wIixjaGlsZHJlbjpbSigiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gcHgtMi41IHB5LTEuNSB0ZXh0LVsxMXB4XSB0ZXh0LXdoaXRlLzY1IixjaGlsZHJlbjpbSigic3BhbiIse2NsYXNzTmFtZToiZm9udC1zZW1pYm9sZCIsY2hpbGRyZW46IlNpbXVsYXRvcnMifSksSigiYnV0dG9uIix7b25DbGljazpYLGRpc2FibGVkOiQsY2xhc3NOYW1lOiJiZy10cmFuc3BhcmVudCBib3JkZXItbm9uZSB0ZXh0LWFjY2VudCB0ZXh0LVsxMXB4XSBjdXJzb3ItcG9pbnRlciBwLTAiLGNoaWxkcmVuOiQ/Ii4uLiI6IlJlZnJlc2gifSldfSksSyYmSigiZGl2Iix7Y2xhc3NOYW1lOiJweC0yLjUgcHktMS41IHRleHQtZGFuZ2VyIHRleHQtWzExcHhdIixjaGlsZHJlbjpLfSksWiYmSigiZGl2Iix7Y2xhc3NOYW1lOiJweC0yLjUgcHktMS41IHRleHQtZGFuZ2VyIHRleHQtWzExcHhdIixjaGlsZHJlbjpafSksISQmJiFLJiZDLmxlbmd0aD09PTAmJkooImRpdiIse2NsYXNzTmFtZToicC0zIHRleHQtd2hpdGUvNDAgdGV4dC1bMTFweF0gdGV4dC1jZW50ZXIiLGNoaWxkcmVuOiJObyBhdmFpbGFibGUgc2ltdWxhdG9ycyBmb3VuZCJ9KSxWLm1hcCgoW0wsa10pPT5KKCJkaXYiLHtjaGlsZHJlbjpbSigiZGl2Iix7Y2xhc3NOYW1lOiJweC0yLjUgcHQtMS41IHBiLTAuNSB0ZXh0LVsxMHB4XSBmb250LXNlbWlib2xkIHRleHQtd2hpdGUvNDAgdXBwZXJjYXNlIHRyYWNraW5nLVswLjA4ZW1dIixjaGlsZHJlbjpMfSksay5tYXAoKEQpPT57bGV0IFQ9UT09PUQudWRpZCxCPVEhPT1udWxsJiYhVCxfPUQuc3RhdGU9PT0iQm9vdGVkIjtyZXR1cm4gSigiZGl2Iix7Y2xhc3NOYW1lOmBmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMiBweC0yLjUgcHktMS41IHJvdW5kZWQtbWQgdHJhbnNpdGlvbi1jb2xvcnMgJHtCPyJjdXJzb3ItZGVmYXVsdCBvcGFjaXR5LTUwIjoiY3Vyc29yLXBvaW50ZXIgaG92ZXI6Ymctd2hpdGUvOCJ9YCxvbkNsaWNrOigpPT57aWYoIUIpRyhEKX0sY2hpbGRyZW46W0ooInNwYW4iLHtjbGFzc05hbWU6InNpemUtMS41IHJvdW5kZWQtZnVsbCBzaHJpbmstMCIsc3R5bGU6e2JhY2tncm91bmQ6Xz8iIzRhZGU4MCI6IiM0NDQifX0pLEooInNwYW4iLHtjbGFzc05hbWU6ImZsZXgtMSB0ZXh0LWxlZnQiLGNoaWxkcmVuOkQubmFtZX0pLEooInNwYW4iLHtjbGFzc05hbWU6YHRleHQtWzEwcHhdICR7VD8idGV4dC1hY2NlbnQiOiJ0ZXh0LXdoaXRlLzU1In1gLGNoaWxkcmVuOlQ/Xz8iU3RhcnRpbmcuLi4iOiJCb290aW5nLi4uIjpfPyJTdGFydCBzdHJlYW0iOiJCb290ICYgc3RyZWFtIn0pXX0sRC51ZGlkKX0pXX0sTCkpXX0pXX0pfSl9ZnVuY3Rpb24gYjMoe2RldmljZXM6QyxzZWxlY3RlZFVkaWQ6JCxsb2FkaW5nOkssZXJyb3I6WCxzdG9wcGluZ1VkaWRzOlEsb25SZWZyZXNoOk4sb25TZWxlY3Q6WixvblN0b3A6cSx0cmlnZ2VyOkd9KXtsZXRbWSxWXT1BKCExKSxMPXYobnVsbCk7VygoKT0+e2lmKCFZKXJldHVybjtsZXQgQj0oXyk9PntpZighTC5jdXJyZW50Py5jb250YWlucyhfLnRhcmdldCkpVighMSl9O3JldHVybiB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIixCKSwoKT0+d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsQil9LFtZXSk7bGV0IGs9bmV3IE1hcDtmb3IobGV0IEIgb2YgQyl7aWYoQi51ZGlkPT09JCljb250aW51ZTtsZXQgXz1rLmdldChCLnJ1bnRpbWUpO2lmKCFfKV89W10say5zZXQoQi5ydW50aW1lLF8pO18ucHVzaChCKX1mb3IobGV0IEIgb2Ygay52YWx1ZXMoKSlCLnNvcnQoKF8sVSk9PkgwKF8ubmFtZSktSDAoVS5uYW1lKXx8Xy5uYW1lLmxvY2FsZUNvbXBhcmUoVS5uYW1lKSk7bGV0IEQ9Wy4uLmsuZW50cmllcygpXS5zb3J0KChbQl0sW19dKT0+QTAoQiktQTAoXyl8fEIubG9jYWxlQ29tcGFyZShfKSksVD1DLmZpbmQoKEIpPT5CLnVkaWQ9PT0kKT8/bnVsbDtyZXR1cm4gSigiZGl2Iix7cmVmOkwsY2xhc3NOYW1lOiJyZWxhdGl2ZSIsY2hpbGRyZW46W0ooImRpdiIse29uQ2xpY2s6KCk9PntpZighWSlOKCk7VigoQik9PiFCKX0sY2hpbGRyZW46R30pLFkmJkooImRpdiIse2NsYXNzTmFtZToiYWJzb2x1dGUgdG9wLVtjYWxjKDEwMCUrNnB4KV0gbGVmdC0wIG1pbi13LTY1IG1heC1oLTkwIG92ZXJmbG93LXktYXV0byBiZy1wYW5lbCBib3JkZXIgYm9yZGVyLXdoaXRlLzEyIHJvdW5kZWQtWzEwcHhdIHAtMSBzaGFkb3ctWzBfOHB4XzI0cHhfcmdiYSgwLDAsMCwwLjUpXSBmb250LW1vbm8gdGV4dC1bMTNweF0gdGV4dC13aGl0ZS85MCB6LTIwIixjaGlsZHJlbjpbSigiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gcHgtMi41IHB5LTEuNSB0ZXh0LVsxMXB4XSB0ZXh0LXdoaXRlLzY1IixjaGlsZHJlbjpbSigic3BhbiIse2NsYXNzTmFtZToiZm9udC1zZW1pYm9sZCIsY2hpbGRyZW46IlNpbXVsYXRvcnMifSksSigiYnV0dG9uIix7b25DbGljazooQik9PntCLnN0b3BQcm9wYWdhdGlvbigpLE4oKX0sZGlzYWJsZWQ6SyxjbGFzc05hbWU6ImJnLXRyYW5zcGFyZW50IGJvcmRlci1ub25lIHRleHQtYWNjZW50IHRleHQtWzExcHhdIGN1cnNvci1wb2ludGVyIHAtMCIsY2hpbGRyZW46Sz8iLi4uIjoiUmVmcmVzaCJ9KV19KSxYJiZKKCJkaXYiLHtjbGFzc05hbWU6InB4LTIuNSBweS0xLjUgdGV4dC1kYW5nZXIgdGV4dC1bMTFweF0iLGNoaWxkcmVuOlh9KSxUJiZKKHExLHtjaGlsZHJlbjpbSigiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMiBweC0yLjUgcHktMS41IHJvdW5kZWQtbWQgdGV4dC1hY2NlbnQiLGNoaWxkcmVuOltKKCJzcGFuIix7Y2xhc3NOYW1lOiJzaXplLTEuNSByb3VuZGVkLWZ1bGwgc2hyaW5rLTAiLHN0eWxlOntiYWNrZ3JvdW5kOlQuc3RhdGU9PT0iQm9vdGVkIj8iIzRhZGU4MCI6IiM0NDQifX0pLEooInNwYW4iLHtjbGFzc05hbWU6ImZsZXgtMSIsY2hpbGRyZW46VC5uYW1lfSldfSksSigiZGl2Iix7Y2xhc3NOYW1lOiJoLXB4IGJnLXdoaXRlLzggbXktMSJ9KV19KSxDLmxlbmd0aD09PTAmJiFLJiYhWCYmSigiZGl2Iix7Y2xhc3NOYW1lOiJwLTMgdGV4dC13aGl0ZS80MCB0ZXh0LVsxMXB4XSB0ZXh0LWNlbnRlciIsY2hpbGRyZW46Ik5vIGF2YWlsYWJsZSBzaW11bGF0b3JzIGZvdW5kIn0pLEQubWFwKChbQixfXSk9PkooImRpdiIse2NoaWxkcmVuOltKKCJkaXYiLHtjbGFzc05hbWU6InB4LTIuNSBwdC0xLjUgcGItMC41IHRleHQtWzEwcHhdIGZvbnQtc2VtaWJvbGQgdGV4dC13aGl0ZS80MCB1cHBlcmNhc2UgdHJhY2tpbmctWzAuMDhlbV0iLGNoaWxkcmVuOkJ9KSxfLm1hcCgoVSk9PntsZXQgTT1RLmhhcyhVLnVkaWQpLEU9VS5zdGF0ZT09PSJCb290ZWQiO3JldHVybiBKKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggaXRlbXMtY2VudGVyIGdhcC0yIHB4LTIuNSBweS0xLjUgcm91bmRlZC1tZCBjdXJzb3ItcG9pbnRlciB0cmFuc2l0aW9uLWNvbG9ycyBob3ZlcjpiZy13aGl0ZS84IixvbkNsaWNrOigpPT57WihVKSxWKCExKX0sY2hpbGRyZW46W0ooInNwYW4iLHtjbGFzc05hbWU6InNpemUtMS41IHJvdW5kZWQtZnVsbCBzaHJpbmstMCIsc3R5bGU6e2JhY2tncm91bmQ6RT8iIzRhZGU4MCI6IiM0NDQifX0pLEooInNwYW4iLHtjbGFzc05hbWU6ImZsZXgtMSIsY2hpbGRyZW46VS5uYW1lfSksRSYmSigic3BhbiIse3JvbGU6ImJ1dHRvbiIsb25DbGljazooeSk9PntpZih5LnN0b3BQcm9wYWdhdGlvbigpLCFNKXEoVS51ZGlkKX0sY2xhc3NOYW1lOmB0ZXh0LVsxMHB4XSBweS1weCBweC0xLjUgcm91bmRlZCAke00/InRleHQtd2hpdGUvNTUgYmctdHJhbnNwYXJlbnQgY3Vyc29yLWRlZmF1bHQiOiJ0ZXh0LWRhbmdlciBiZy1kYW5nZXIvMTAgY3Vyc29yLXBvaW50ZXIifWAsY2hpbGRyZW46TT8iU3RvcHBpbmcuLi4iOiJTdG9wIn0pXX0sVS51ZGlkKX0pXX0sQikpXX0pXX0pfWZ1bmN0aW9uIE8wKHtvcGVuOkMsd2lkdGg6JCxjaGlsZHJlbjpLLHN0eWxlOlh9KXtyZXR1cm4gSigiYXNpZGUiLHtjbGFzc05hbWU6ImZpeGVkIHRvcC0zIHJpZ2h0LTMgYm90dG9tLTMgei0zNSBtaW4tdy0wIG92ZXJmbG93LWhpZGRlbiByb3VuZGVkLVsxNHB4XSBib3JkZXIgYm9yZGVyLXdoaXRlLzEwIGJnLXBhbmVsLWJnIHRleHQtd2hpdGUvOTAgc2hhZG93LVswXzEycHhfNDBweF9yZ2JhKDAsMCwwLDAuNTUpXSBiYWNrZHJvcC1ibHVyLVsxOHB4XSBbZm9udC1mYW1pbHk6LWFwcGxlLXN5c3RlbSxzeXN0ZW0tdWksc2Fucy1zZXJpZl0gW3RyYW5zaXRpb246dHJhbnNmb3JtXzAuMjVzX2Vhc2Usb3BhY2l0eV8wLjJzX2Vhc2VdIGZsZXggZmxleC1jb2wiLHN0eWxlOnt3aWR0aDokLHRyYW5zZm9ybTpDPyJ0cmFuc2xhdGVYKDApIjoidHJhbnNsYXRlWChjYWxjKDEwMCUgKyAyNHB4KSkiLG9wYWNpdHk6Qz8xOjAscG9pbnRlckV2ZW50czpDPyJhdXRvIjoibm9uZSIsLi4uWH0sImFyaWEtaGlkZGVuIjohQyxjaGlsZHJlbjpLfSl9ZnVuY3Rpb24gVDAoe2NoaWxkcmVuOkMsc3R5bGU6JH0pe3JldHVybiBKKCJoZWFkZXIiLHtjbGFzc05hbWU6ImZsZXggc2hyaW5rLTAgaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiBnYXAtMi41IHB4LTIuNSBweS0xLjUgcGwtMyIsc3R5bGU6JCxjaGlsZHJlbjpDfSl9ZnVuY3Rpb24gVjIoe2NoaWxkcmVuOkN9KXtyZXR1cm4gSigic3BhbiIse2NsYXNzTmFtZToidGV4dC1bMTFweF0gZm9udC1tZWRpdW0gdGV4dC13aGl0ZS81NSIsY2hpbGRyZW46Q30pfWZ1bmN0aW9uIE0wKHtvbkNsaWNrOkMsYXJpYUxhYmVsOiQ9IkNsb3NlIHBhbmVsIix0aXRsZTpLLGljb25TaXplOlg9MTZ9KXtyZXR1cm4gSigiYnV0dG9uIix7dHlwZToiYnV0dG9uIixvbkNsaWNrOkMsY2xhc3NOYW1lOiJmbGV4IHNocmluay0wIGN1cnNvci1wb2ludGVyIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciByb3VuZGVkIGJnLXRyYW5zcGFyZW50IHAtMSB0ZXh0LXdoaXRlLzY1IiwiYXJpYS1sYWJlbCI6JCx0aXRsZTpLLGNoaWxkcmVuOkooInN2ZyIse3dpZHRoOlgsaGVpZ2h0Olgsdmlld0JveDoiMCAwIDI0IDI0IixmaWxsOiJub25lIixzdHJva2U6ImN1cnJlbnRDb2xvciIsc3Ryb2tlV2lkdGg6IjIiLHN0cm9rZUxpbmVjYXA6InJvdW5kIixzdHJva2VMaW5lam9pbjoicm91bmQiLGNoaWxkcmVuOltKKCJsaW5lIix7eDE6IjE4Iix5MToiNiIseDI6IjYiLHkyOiIxOCJ9KSxKKCJsaW5lIix7eDE6IjYiLHkxOiI2Iix4MjoiMTgiLHkyOiIxOCJ9KV19KX0pfWZ1bmN0aW9uIFAzKEMsJCxLKXtsZXRbWCxRXT1BKG51bGwpLFtOLFpdPUEoMCk7VygoKT0+e2lmKCEkfHwhQylyZXR1cm47bGV0IEc9ITEsWT1hc3luYygpPT57dHJ5e2xldCBrPWF3YWl0KGF3YWl0IGZldGNoKEMse2NhY2hlOiJuby1zdG9yZSJ9KSkuanNvbigpO2lmKCFHKVEoay5kZXZpY2VzPz9bXSl9Y2F0Y2h7aWYoIUcpUShbXSl9fTtZKCk7bGV0IFY9c2V0SW50ZXJ2YWwoWSxLPzc1MDozMDAwKTtyZXR1cm4oKT0+e0c9ITAsY2xlYXJJbnRlcnZhbChWKX19LFtDLCQsTixLXSk7bGV0IHE9UCgoKT0+WigoRyk9PkcrMSksW10pO3JldHVybntkZXZpY2VzOlgscmVmcmVzaDpxfX1mdW5jdGlvbiBXMyhDLCQpe2xldFtLLFhdPUEobnVsbCk7cmV0dXJuIFcoKCk9PntpZighJHx8IUMpcmV0dXJuO2xldCBRPSExLE49YXN5bmMoKT0+e3RyeXtsZXQgRz1hd2FpdChhd2FpdCBmZXRjaChDLHtjYWNoZToibm8tc3RvcmUifSkpLmpzb24oKTtpZighUSlYKEcpfWNhdGNoe319O04oKTtsZXQgWj1zZXRJbnRlcnZhbChOLDUwMDApO3JldHVybigpPT57UT0hMCxjbGVhckludGVydmFsKFopfX0sW0MsJF0pLEt9ZnVuY3Rpb24geTMoQyl7aWYoIU51bWJlci5pc0Zpbml0ZShDKXx8Qzw9MClyZXR1cm4iMCBCIjtsZXQgJD1DLzEwNzM3NDE4MjQ7aWYoJD49MSlyZXR1cm5gJHskLnRvRml4ZWQoJD49MTA/MDoxKX0gR0JgO3JldHVybmAkeyhDLzEwNDg1NzYpLnRvRml4ZWQoMCl9IE1CYH1mdW5jdGlvbiBSMChDLCQpe2xldCBLPUMuaW5jbHVkZXMoIj8iKT8iJiI6Ij8iO3JldHVybmAke0N9JHtLfWRldmljZT0ke2VuY29kZVVSSUNvbXBvbmVudCgkKX1gfWZ1bmN0aW9uIEUzKHtyZXBvcnQ6Q30pe2lmKCFDfHxDLnRvdGFsQnl0ZXM9PT0wKXJldHVybiBudWxsO2xldHtlc3RpbWF0ZWRBZGRpdGlvbmFsOiQsYXZhaWxhYmxlQnl0ZXM6Syx0b3RhbEJ5dGVzOlgscnVubmluZ1NpbXVsYXRvcnM6UX09QyxOPU1hdGgubWF4KDAsTWF0aC5taW4oMSwxLUsvWCkpLFo9USskLHE9JD09PTA/IiNlNjYiOiQ8PTE/IiNlOWExM2IiOiIjM2IzIixHPU4+MC45PyIjZTY2IjpOPjAuNzU/IiNlOWExM2IiOiIjM2IzIjtyZXR1cm4gSigiZGl2Iix7Y2xhc3NOYW1lOiJpbmxpbmUtZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTEuNSBweC0yIHB5LVszcHhdIHJvdW5kZWQtZnVsbCBiZy1bIzEwMTAxMF0gYm9yZGVyIGJvcmRlci1bIzIyMl0gZm9udC1tb25vIHRleHQtWzExcHhdIHRleHQtd2hpdGUvNzAgbGVhZGluZy1ub25lIixjaGlsZHJlbjpbSigic3BhbiIse2NsYXNzTmFtZToic2l6ZS0xLjUgcm91bmRlZC1bM3B4XSBzaHJpbmstMCIsc3R5bGU6e2JhY2tncm91bmQ6cX19KSxKKCJzcGFuIix7Y2hpbGRyZW46W1EsIi8iLFosIiBzaW1zIl19KSxKKCJzcGFuIix7Y2xhc3NOYW1lOiJ0ZXh0LXdoaXRlLzQwIixjaGlsZHJlbjoiwrcifSksSigic3BhbiIse2NsYXNzTmFtZToidGV4dC13aGl0ZS81NSIsY2hpbGRyZW46W3kzKEspLCIgZnJlZSJdfSksSigic3BhbiIseyJhcmlhLWhpZGRlbiI6ITAsY2xhc3NOYW1lOiJtbC0wLjUgdy03IGgtWzNweF0gYmctWyMxYzFjMWNdIHJvdW5kZWQtWzJweF0gb3ZlcmZsb3ctaGlkZGVuIGlubGluZS1ibG9jayIsY2hpbGRyZW46Sigic3BhbiIse2NsYXNzTmFtZToiYmxvY2sgaC1mdWxsIHRyYW5zaXRpb24tW3dpZHRoLGJhY2tncm91bmRdIGR1cmF0aW9uLTMwMCBlYXNlLW91dCIsc3R5bGU6e3dpZHRoOmAkeyhOKjEwMCkudG9GaXhlZCgxKX0lYCxiYWNrZ3JvdW5kOkd9fSl9KV19KX1mdW5jdGlvbiBJMyh7ZGV2aWNlOkMsYWN0aXZlOiQscHJldmlld0VuZHBvaW50Okssc3RhcnRpbmc6WCxzaHV0dGluZ0Rvd246USxlcnJvcjpOLG9uU3RhcnQ6WixvblNodXRkb3duOnF9KXtsZXQgRz1DLmhlbHBlcixZPUMuc3RhdGU9PT0iQm9vdGVkIixWPUc/IuKXjyBsaXZlIjpYP1k/InN0YXJ0aW5nIGhlbHBlcuKApiI6ImJvb3RpbmcgJiBzdGFydGluZ+KApiI6UT8ic2h1dHRpbmcgZG93buKApiI6WT8iYm9vdGVkIChubyBzdHJlYW0pIjpDLnN0YXRlLnRvTG93ZXJDYXNlKCksTD1HPyIjM2IzIjoiIzg4OCIsaz0kPyJyZ2JhKDEwLDEzMiwyNTUsMC41NSkiOiJ0cmFuc3BhcmVudCIsRD1HPyJhIjoiZGl2IixUPUc/e2hyZWY6UjAoSyxDLmRldmljZSl9Ont9O3JldHVybiBKKEQsey4uLlQsY2xhc3NOYW1lOiJncmlkLXRpbGUgcmVsYXRpdmUgZmxleCBmbGV4LWNvbCBiZy1bIzExMV0gcm91bmRlZC1bMTBweF0gb3ZlcmZsb3ctaGlkZGVuIG5vLXVuZGVybGluZSB0ZXh0LWluaGVyaXQgYm9yZGVyIGJvcmRlci1bIzJhMmEyYV0gW3RyYW5zaXRpb246Ym9yZGVyLWNvbG9yXzEyMG1zXSIsc3R5bGU6e291dGxpbmU6YDFweCBzb2xpZCAke2t9YH0sY2hpbGRyZW46WyhHfHxZKSYmSigiYnV0dG9uIix7dHlwZToiYnV0dG9uIix0aXRsZTpRPyJTaHV0dGluZyBkb3du4oCmIjoiU2h1dGRvd24gc2ltdWxhdG9yIiwiYXJpYS1sYWJlbCI6IlNodXRkb3duIHNpbXVsYXRvciIsb25DbGljazooQik9PntCLnByZXZlbnREZWZhdWx0KCksQi5zdG9wUHJvcGFnYXRpb24oKSxxKCl9LGRpc2FibGVkOlEsY2xhc3NOYW1lOiJncmlkLXNodXRkb3duLWJ0biBhYnNvbHV0ZSB0b3AtMS41IHJpZ2h0LTEuNSB3LVsyMnB4XSBoLVsyMnB4XSByb3VuZGVkLWZ1bGwgYm9yZGVyIGJvcmRlci1bIzQ0NF0gYmctW3JnYmEoMjAsMjAsMjAsMC44NSldIHRleHQtd2hpdGUvODAgdGV4dC1bMTNweF0gbGVhZGluZy1ub25lIGN1cnNvci1wb2ludGVyIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHAtMCB6LVsyXSBwb2ludGVyLWV2ZW50cy1hdXRvIixjaGlsZHJlbjoiw5cifSksRz9KKCJkaXYiLHtjbGFzc05hbWU6ImZsZXgtMSBtaW4taC0wIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHAtMiBiZy1ibGFjayBwb2ludGVyLWV2ZW50cy1ub25lIixjaGlsZHJlbjpKKCJpbWciLHtzcmM6Ry5zdHJlYW1VcmwsYWx0OkMubmFtZSxkcmFnZ2FibGU6ITEsY2xhc3NOYW1lOiJtYXgtdy1mdWxsIG1heC1oLWZ1bGwgb2JqZWN0LWNvbnRhaW4ifSl9KTpKKCJkaXYiLHtjbGFzc05hbWU6ImZsZXgtMSBtaW4taC0wIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHAtMyBmbGV4LWNvbCBnYXAtMi41IHRleHQtd2hpdGUvNTUgdGV4dC1bMTJweF0gdGV4dC1jZW50ZXIiLGNoaWxkcmVuOltYP0ooInNwYW4iLHsiYXJpYS1oaWRkZW4iOiEwLGNsYXNzTmFtZToidy01LjUgaC01LjUgcm91bmRlZC1mdWxsIGJvcmRlci0yIGJvcmRlci13aGl0ZS8xNSBhbmltYXRlLVtncmlkLXNwaW5fMC44c19saW5lYXJfaW5maW5pdGVdIixzdHlsZTp7Ym9yZGVyVG9wQ29sb3I6InJnYmEoMTU1LDIwMSwxNTUsMC45NSkifX0pOkooImRpdiIse2NsYXNzTmFtZToidGV4dC1bMjhweF0gb3BhY2l0eS01MCIsY2hpbGRyZW46WT8i4pajIjoi4paiIn0pLE4/SigiZGl2Iix7Y2xhc3NOYW1lOiJ0ZXh0LWRhbmdlciB0ZXh0LVsxMXB4XSBmb250LW1vbm8iLGNoaWxkcmVuOk59KTpudWxsLEooImJ1dHRvbiIse3R5cGU6ImJ1dHRvbiIsb25DbGljazooQik9PntCLnByZXZlbnREZWZhdWx0KCksQi5zdG9wUHJvcGFnYXRpb24oKSxaKCl9LGRpc2FibGVkOlgsY2xhc3NOYW1lOmBweC0zIHB5LTEuNSByb3VuZGVkLW1kIGJvcmRlciBib3JkZXItWyMzMzNdIHRleHQtWzExcHhdIGZvbnQtbW9ubyAke1g/ImJnLVsjMWExYTFhXSB0ZXh0LXdoaXRlLzU1IGN1cnNvci1kZWZhdWx0IjoiYmctWyMxZDJhMWRdIHRleHQtc3VjY2VzcyBjdXJzb3ItcG9pbnRlciJ9YCxjaGlsZHJlbjpYP1k/IlN0YXJ0aW5n4oCmIjoiQm9vdGluZ+KApiI6WT8iU3RhcnQgc3RyZWFtIjoiQm9vdCAmIHN0YXJ0In0pXX0pLEooImRpdiIse2NsYXNzTmFtZToicHgtMi41IHB5LTEuNSBib3JkZXItdCBib3JkZXItWyMyMjJdIHRleHQtWzExcHhdIGZvbnQtbW9ubyB0ZXh0LXdoaXRlLzcwIGZsZXgganVzdGlmeS1iZXR3ZWVuIGdhcC0yIixjaGlsZHJlbjpbSigic3BhbiIse2NsYXNzTmFtZToib3ZlcmZsb3ctaGlkZGVuIHRleHQtZWxsaXBzaXMgd2hpdGVzcGFjZS1ub3dyYXAiLGNoaWxkcmVuOkMubmFtZX0pLEooInNwYW4iLHtjbGFzc05hbWU6IndoaXRlc3BhY2Utbm93cmFwIixzdHlsZTp7Y29sb3I6TH0sY2hpbGRyZW46W1YsRz9KKCJzcGFuIix7Y2xhc3NOYW1lOiJ0ZXh0LXdoaXRlLzQwIixjaGlsZHJlbjpbIiA6IixHLnBvcnRdfSk6bnVsbF19KV19KV19KX1mdW5jdGlvbiBTMyh7b3BlbjpDLG9uQ2xvc2U6JCxjdXJyZW50VWRpZDpLLHdpZHRoOlh9KXtsZXQgUT13aW5kb3cuX19TSU1fUFJFVklFV19fLE49UT8uZ3JpZEFwaUVuZHBvaW50LFo9UT8uZ3JpZFN0YXJ0RW5kcG9pbnQscT1RPy5ncmlkU2h1dGRvd25FbmRwb2ludCxHPVE/LmdyaWRNZW1vcnlFbmRwb2ludCxZPVE/LnByZXZpZXdFbmRwb2ludD8/Ii8iLFtWLExdPUEoe30pLFtrLERdPUEoe30pLFtULEJdPUEoe30pLF89T2JqZWN0LnZhbHVlcyhWKS5zb21lKEJvb2xlYW4pfHxPYmplY3QudmFsdWVzKGspLnNvbWUoQm9vbGVhbikse2RldmljZXM6VSxyZWZyZXNoOk19PVAzKE4sQyxfKSxFPVczKEcsQykseT1QKGFzeW5jKFMseD0yMDAwMCk9PntpZighTilyZXR1cm4gbnVsbDtsZXQgZj1EYXRlLm5vdygpK3g7d2hpbGUoRGF0ZS5ub3coKTxmKXt0cnl7bGV0IFExPSgoYXdhaXQoYXdhaXQgZmV0Y2goTix7Y2FjaGU6Im5vLXN0b3JlIn0pKS5qc29uKCkpLmRldmljZXM/P1tdKS5maW5kKChuKT0+bi5kZXZpY2U9PT1TJiZuLmhlbHBlcik7aWYoUTEpcmV0dXJuIFExfWNhdGNoe31hd2FpdCBuZXcgUHJvbWlzZSgoZCk9PnNldFRpbWVvdXQoZCw0MDApKX1yZXR1cm4gbnVsbH0sW05dKSxjPVAoYXN5bmMoUyk9PntpZighWilyZXR1cm47TCgoeCk9Pih7Li4ueCxbU106ITB9KSksQigoeCk9Pih7Li4ueCxbU106bnVsbH0pKTt0cnl7bGV0IHg9YXdhaXQgZmV0Y2goWix7bWV0aG9kOiJQT1NUIixoZWFkZXJzOnsiQ29udGVudC1UeXBlIjoiYXBwbGljYXRpb24vanNvbiJ9LGJvZHk6SlNPTi5zdHJpbmdpZnkoe3VkaWQ6U30pfSksZj1hd2FpdCB4Lmpzb24oKS5jYXRjaCgoKT0+KHt9KSk7aWYoIXgub2t8fCFmLm9rKXtCKChvKT0+KHsuLi5vLFtTXTpmLmVycm9yPz9gSFRUUCAke3guc3RhdHVzfWB9KSk7cmV0dXJufWlmKGF3YWl0IHkoUykpe3dpbmRvdy5sb2NhdGlvbi5hc3NpZ24oUjAoWSxTKSk7cmV0dXJufUIoKG8pPT4oey4uLm8sW1NdOiJIZWxwZXIgZGlkIG5vdCByZWdpc3RlciBpbiB0aW1lIn0pKX1jYXRjaCh4KXtCKChmKT0+KHsuLi5mLFtTXTp4Py5tZXNzYWdlPz8iUmVxdWVzdCBmYWlsZWQifSkpfWZpbmFsbHl7TCgoeCk9Pih7Li4ueCxbU106ITF9KSksTSgpfX0sW1osTSx5LFldKTtXKCgpPT57aWYoIVV8fCFLKXJldHVybjtpZihVLmZpbmQoKGYpPT5mLmRldmljZT09PUspPy5oZWxwZXIpcmV0dXJuO2xldCB4PVUuZmluZCgoZik9PmYuaGVscGVyJiZmLmRldmljZSE9PUspO3dpbmRvdy5sb2NhdGlvbi5hc3NpZ24oeD9SMChZLHguZGV2aWNlKTpZKX0sW1UsSyxZXSk7bGV0IFI9UChhc3luYyhTKT0+e2lmKCFxKXJldHVybjtEKCh4KT0+KHsuLi54LFtTXTohMH0pKSxCKCh4KT0+KHsuLi54LFtTXTpudWxsfSkpO3RyeXtsZXQgeD1hd2FpdCBmZXRjaChxLHttZXRob2Q6IlBPU1QiLGhlYWRlcnM6eyJDb250ZW50LVR5cGUiOiJhcHBsaWNhdGlvbi9qc29uIn0sYm9keTpKU09OLnN0cmluZ2lmeSh7dWRpZDpTfSl9KSxmPWF3YWl0IHguanNvbigpLmNhdGNoKCgpPT4oe30pKTtpZigheC5va3x8IWYub2spQigoZCk9Pih7Li4uZCxbU106Zi5lcnJvcj8/YEhUVFAgJHt4LnN0YXR1c31gfSkpfWNhdGNoKHgpe0IoKGYpPT4oey4uLmYsW1NdOng/Lm1lc3NhZ2U/PyJSZXF1ZXN0IGZhaWxlZCJ9KSl9ZmluYWxseXtEKCh4KT0+KHsuLi54LFtTXTohMX0pKSxNKCl9fSxbcSxNXSk7cmV0dXJuIEooTzAse29wZW46Qyx3aWR0aDpYLGNoaWxkcmVuOltKKFQwLHtjaGlsZHJlbjpbSihWMix7Y2hpbGRyZW46IlNpbXVsYXRvcnMifSksSigiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMiIsY2hpbGRyZW46W0ooRTMse3JlcG9ydDpFfSksSihNMCx7b25DbGljazokfSldfSldfSksSigiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4LTEgbWluLWgtMCBvdmVyZmxvdy15LWF1dG8gcC0zLjUgZ3JpZCBhdXRvLXJvd3MtW21pbm1heCgzMDBweCxhdXRvKV0gZ2FwLTMgY29udGVudC1zdGFydCBncmlkLWNvbHMtW3JlcGVhdChhdXRvLWZpbGwsbWlubWF4KDIwMHB4LDFmcikpXSIsY2hpbGRyZW46VT09PW51bGw/bnVsbDpVLmxlbmd0aD09PTA/SigiZGl2Iix7Y2xhc3NOYW1lOiJjb2wtc3Bhbi1mdWxsIGJnLXBhbmVsIGJvcmRlciBib3JkZXItZGFzaGVkIGJvcmRlci13aGl0ZS8xMCByb3VuZGVkLVsxMHB4XSBwLTQgdGV4dC13aGl0ZS81MCB0ZXh0LVsxMnB4XSB0ZXh0LWNlbnRlciIsY2hpbGRyZW46Ik5vIGlPUyBzaW11bGF0b3JzIGF2YWlsYWJsZS4ifSk6VS5tYXAoKFMpPT5KKEkzLHtkZXZpY2U6UyxhY3RpdmU6Uy5kZXZpY2U9PT1LLHByZXZpZXdFbmRwb2ludDpZLHN0YXJ0aW5nOiEhVltTLmRldmljZV0sc2h1dHRpbmdEb3duOiEha1tTLmRldmljZV0sZXJyb3I6VFtTLmRldmljZV0/P251bGwsb25TdGFydDooKT0+YyhTLmRldmljZSksb25TaHV0ZG93bjooKT0+UihTLmRldmljZSl9LFMuZGV2aWNlKSl9KV19KX1mdW5jdGlvbiBCMih7cGFuZWxXaWR0aDpDLHZpc2libGU6JCxvblBvaW50ZXJEb3duOkssYXJpYUxhYmVsOlh9KXtsZXRbUSxOXT1BKCExKSxbWixxXT1BKCExKSxHPVF8fFosWT0xMitDLTk7cmV0dXJuIEooImRpdiIse3JvbGU6InNlcGFyYXRvciIsImFyaWEtb3JpZW50YXRpb24iOiJ2ZXJ0aWNhbCIsImFyaWEtbGFiZWwiOlgsImFyaWEtaGlkZGVuIjohJCxvblBvaW50ZXJEb3duOihWKT0+e3EoITApLEsoVil9LG9uUG9pbnRlclVwOigpPT5xKCExKSxvblBvaW50ZXJDYW5jZWw6KCk9PnEoITEpLG9uUG9pbnRlckVudGVyOigpPT5OKCEwKSxvblBvaW50ZXJMZWF2ZTooKT0+TighMSksY2xhc3NOYW1lOmBmaXhlZCB0b3AtMyBib3R0b20tMyB3LTQgei0zNiBjdXJzb3ItY29sLXJlc2l6ZSB0b3VjaC1ub25lIHRyYW5zaXRpb24tb3BhY2l0eSBkdXJhdGlvbi0yMDAgJHskPyJvcGFjaXR5LTEwMCBwb2ludGVyLWV2ZW50cy1hdXRvIjoib3BhY2l0eS0wIHBvaW50ZXItZXZlbnRzLW5vbmUifWAsc3R5bGU6e3JpZ2h0Oll9LGNoaWxkcmVuOltKKCJkaXYiLHtjbGFzc05hbWU6YGFic29sdXRlIHRvcC0wIGJvdHRvbS0wIGxlZnQtMS8yIHctcHggcG9pbnRlci1ldmVudHMtbm9uZSB0cmFuc2l0aW9uLW9wYWNpdHkgZHVyYXRpb24tMTUwICR7Rz8ib3BhY2l0eS0xMDAiOiJvcGFjaXR5LTAifWAsc3R5bGU6e3RyYW5zZm9ybToidHJhbnNsYXRlWCgtMC41cHgpIixiYWNrZ3JvdW5kOiJsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCByZ2JhKDI1NSwyNTUsMjU1LDApIDAlLCByZ2JhKDI1NSwyNTUsMjU1LDAuMjgpIDMwJSwgcmdiYSgyNTUsMjU1LDI1NSwwLjI4KSA3MCUsIHJnYmEoMjU1LDI1NSwyNTUsMCkgMTAwJSkifX0pLEooImRpdiIse2NsYXNzTmFtZTpgYWJzb2x1dGUgdG9wLTEvMiBsZWZ0LTEvMiB3LTEgaC03IHJvdW5kZWQteHMgLXRyYW5zbGF0ZS14LTEvMiAtdHJhbnNsYXRlLXktMS8yIHotMSBwb2ludGVyLWV2ZW50cy1ub25lIFt0cmFuc2l0aW9uOm9wYWNpdHlfMC4xNXNfZWFzZSxiYWNrZ3JvdW5kXzAuMTVzX2Vhc2VdICR7Rz8ib3BhY2l0eS0xMDAiOiJvcGFjaXR5LTAifSAke1o/ImJnLVsjOWE5YTllXSI6ImJnLVsjNmU2ZTcyXSJ9YH0pXX0pfWZ1bmN0aW9uIGgzKCl7bGV0W0MsJF09QSgoKT0+dHlwZW9mIHdpbmRvdzwidSImJndpbmRvdy5tYXRjaE1lZGlhPy4oIihwcmVmZXJzLWNvbnRyYXN0OiBtb3JlKSIpLm1hdGNoZXM9PT0hMCk7cmV0dXJuIFcoKCk9PntpZih0eXBlb2Ygd2luZG93PiJ1Inx8IXdpbmRvdy5tYXRjaE1lZGlhKXJldHVybjtsZXQgSz13aW5kb3cubWF0Y2hNZWRpYSgiKHByZWZlcnMtY29udHJhc3Q6IG1vcmUpIiksWD0oKT0+JChLLm1hdGNoZXMpO3JldHVybiBYKCksSy5hZGRFdmVudExpc3RlbmVyKCJjaGFuZ2UiLFgpLCgpPT5LLnJlbW92ZUV2ZW50TGlzdGVuZXIoImNoYW5nZSIsWCl9LFtdKSxDfWZ1bmN0aW9uIF8yKCl7bGV0W0MsJF09QSgoKT0+dHlwZW9mIHdpbmRvdzwidSImJndpbmRvdy5tYXRjaE1lZGlhPy4oIihwcmVmZXJzLXJlZHVjZWQtbW90aW9uOiByZWR1Y2UpIikubWF0Y2hlcz09PSEwKTtyZXR1cm4gVygoKT0+e2lmKHR5cGVvZiB3aW5kb3c+InUifHwhd2luZG93Lm1hdGNoTWVkaWEpcmV0dXJuO2xldCBLPXdpbmRvdy5tYXRjaE1lZGlhKCIocHJlZmVycy1yZWR1Y2VkLW1vdGlvbjogcmVkdWNlKSIpLFg9KCk9PiQoSy5tYXRjaGVzKTtyZXR1cm4gWCgpLEsuYWRkRXZlbnRMaXN0ZW5lcigiY2hhbmdlIixYKSwoKT0+Sy5yZW1vdmVFdmVudExpc3RlbmVyKCJjaGFuZ2UiLFgpfSxbXSksQ312YXIgeDM9MjgwO3ZhciBuMj0id2lkdGggNzBtcyBsaW5lYXIiLHMyPSJ3aWR0aCAwLjI0cyBjdWJpYy1iZXppZXIoMC4yMiwgMSwgMC4zNiwgMSkiLHYzPSJwYWRkaW5nLXJpZ2h0IDAuMjRzIGN1YmljLWJlemllcigwLjIyLCAxLCAwLjM2LCAxKSIsZzM9ImN1YmljLWJlemllcigwLjIsIDAuODIsIDAuMjIsIDEpIixtMD0iY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKSIsUjM9ImxpbmVhcigwLCAwLjMyIDklLCAwLjYyIDE4JSwgMC44NSAyNyUsIDEuMDEgMzYlLCAxLjA3IDQ1JSwgMS4wNSA1NiUsIDEuMDIgNzAlLCAxKSIsbTM9IjAuNXMiLGozPSIwLjQycyIscDM9NTgwLGYzPSJjdWJpYy1iZXppZXIoMCwgMCwgMC4yLCAxKSIsbDM9NDQwLHQyPTUsdTM9e2lkbGU6MSxob3ZlcjoxLjA5LGRyYWc6MS4xMn0sbzM9e2lkbGU6InJnYmEoMjQ1LDI0NywyNTIsMC41NSkiLGhvdmVyOiJyZ2JhKDI0OCwyNTAsMjU1LDAuNykiLGRyYWc6InJnYmEoMjU1LDI1NSwyNTUsMC45NCkifSxkMz17aWRsZTozLjk1LGhvdmVyOjQuMTUsZHJhZzo0LjY1fSxjMz17aWRsZTpbMC43NCwwLjU4XSxob3ZlcjpbMC44MiwwLjY4XSxkcmFnOlsxLDAuOTZdfSxhMz17aWRsZTowLjQsaG92ZXI6MC41LGRyYWc6MC44NX0saTM9e2lkbGU6MCxob3ZlcjowLjQ1LGRyYWc6MC42OH0sazI9bnVsbDtmdW5jdGlvbiByMygpe2lmKGsyIT1udWxsKXJldHVybiBrMjtpZih0eXBlb2YgQ1NTPiJ1Inx8dHlwZW9mIENTUy5zdXBwb3J0cyE9PSJmdW5jdGlvbiIpcmV0dXJuITE7cmV0dXJuIGsyPUNTUy5zdXBwb3J0cygiYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbiIsImxpbmVhcigwLCAxKSIpLGsyfWZ1bmN0aW9uIG4zKEMpe3JldHVybiBDLnJlcGxhY2UoL1teYS16QS1aMC05Xy1dL2csIiIpfXZhciBlOT00MCxzMz0xNCx0Mz0yNDAsZTM9MzAsQzg9MC4xNSxDND04MCwkOD0xNTAsSzg9MjUwLGUyPSJzZXJ2ZS1zaW06c2ltdWxhdG9yLWZyYW1lLXNjYWxlIjtmdW5jdGlvbiBDNShDLCQsSyxYKXtsZXQgUT1DKjMsTj0kPjA/TWF0aC5tYXgoMjgwLCQtNDgpOlEsWj1LPjAmJk51bWJlci5pc0Zpbml0ZShYKSYmWD4wP01hdGgubWF4KDI4MCwoSy0xMzYpKlgpOlE7cmV0dXJuIE1hdGgubWluKFEsTixaKX1mdW5jdGlvbiB3MChDLCQsSyxYLFEpe2xldCBOPUM1KCQsSyxYLFEpLFo9TWF0aC5taW4oMjgwLE4pO3JldHVybiBNYXRoLm1pbihOLE1hdGgubWF4KFosQykpfWZ1bmN0aW9uIEQyKEMpe2lmKCFOdW1iZXIuaXNGaW5pdGUoQykpcmV0dXJuIEM7bGV0ICQ9dHlwZW9mIHdpbmRvdzwidSI/TWF0aC5tYXgoMSx3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpb3x8MSk6MTtyZXR1cm4gTWF0aC5yb3VuZChDKiQpLyR9ZnVuY3Rpb24gJDUoQywkKXtpZihDPD0wfHwkPD0wKXJldHVybiAwO2xldCBLPTAuNTUsWD1DKiQqSy8oJCtLKkMpO3JldHVybiBNYXRoLm1pbihlOSxYKX1mdW5jdGlvbiBYOChDLCQsSyl7bGV0IFg9QyxRPUs7Zm9yKGxldCBOIG9mICQpe2xldCBaPU1hdGguYWJzKEMtTik7aWYoWjxRKVg9TixRPVp9cmV0dXJuIFh9ZnVuY3Rpb24gSjgoQyl7bGV0e2Zyb206JCx0bzpLLHZlbG9jaXR5Olgsc3RpZmZuZXNzOlEsZGFtcGluZzpOLG9uVXBkYXRlOlosb25Db21wbGV0ZTpxfT1DLEc9MC40LFk9MC4wMzMzMzMzMzMzMzMzMzMzMyxWPSQsTD1YLGs9cGVyZm9ybWFuY2Uubm93KCksRD0wLFQ9ITEsQj0oXyk9PntpZihUKXJldHVybjtsZXQgVT1NYXRoLm1pbigoXy1rKS8xMDAwLDAuMDMzMzMzMzMzMzMzMzMzMzMpO2s9XztsZXQgTT0tUSooVi1LKS1OKkw7aWYoTCs9TSpVLFYrPUwqVSxNYXRoLmFicyhMKTwwLjQmJk1hdGguYWJzKFYtSyk8MC40KXtaKEspLHE/LigpO3JldHVybn1aKFYpLEQ9cmVxdWVzdEFuaW1hdGlvbkZyYW1lKEIpfTtyZXR1cm4gRD1yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoQiksKCk9PntpZihUPSEwLEQpY2FuY2VsQW5pbWF0aW9uRnJhbWUoRCl9fWZ1bmN0aW9uIFE4KEMpe2lmKEMubGVuZ3RoPDIpcmV0dXJuIDA7bGV0ICQ9Q1tDLmxlbmd0aC0xXSxLPUNbMF07Zm9yKGxldCBRPUMubGVuZ3RoLTE7UT49MDtRLS0paWYoJC50LUNbUV0udD49QzQpe0s9Q1tRXTticmVha31sZXQgWD0oJC50LUsudCkvMTAwMDtyZXR1cm4gWD4wPygkLngtSy54KS9YOjB9dmFyIE44PSJkcm9wLXNoYWRvdygwIDAuNXB4IDFweCByZ2JhKDAsMCwwLDAuMSkpIGRyb3Atc2hhZG93KDAgMnB4IDVweCByZ2JhKDAsMCwwLDAuMTMpKSIsWjg9ImRyb3Atc2hhZG93KDAgMXB4IDEuNXB4IHJnYmEoMCwwLDAsMC4xNikpIiwkND1bWzYsInJnYmEoMTYwLDIwNSwyNTUsMC40MikiXSxbNC41NSwicmdiYSgyNTUsMjU1LDI1NSwwLjk3KSJdXTtmdW5jdGlvbiBxOCh7ZEZpbGw6Qyx3OiQsY2xhc3NOYW1lOkssb25FbmQ6WH0pe3JldHVybiBKKHExLHtjaGlsZHJlbjokNC5tYXAoKFtRLE5dKT0+SigicGF0aCIse2NsYXNzTmFtZTpLLGQ6QyxmaWxsOiJub25lIixwYXRoTGVuZ3RoOjEsc3Ryb2tlOk4sc3Ryb2tlV2lkdGg6USokLHN0cm9rZUxpbmVjYXA6InJvdW5kIixvbkFuaW1hdGlvbkVuZDpYfSxRKSl9KX12YXIgSzQ9SzAoZnVuY3Rpb24oe2FyYzokLHBoYXNlOksscmVkdWNlZE1vdGlvbjpYLGhpZ2hDb250cmFzdDpRLGZvY3VzVmlzaWJsZTpOLG9uUG9pbnRlckRvd246WixvblBvaW50ZXJNb3ZlOnEsb25Qb2ludGVyVXA6RyxvblBvaW50ZXJDYW5jZWw6WSxvblBvaW50ZXJFbnRlcjpWLG9uUG9pbnRlckxlYXZlOkwsb25Nb3VzZURvd246a30sRCl7bGV0IFQ9czAoKSxCPW4zKFQpLF89YHNlcnZlLXNpbS1yei1iaC0ke0J9YCxVPWBzZXJ2ZS1zaW0tcnotYmQtJHtCfWAsTT1gc2VydmVTaW1SekRpc2NoYXJnZUtmJHtCfWAsRT1gc2VydmVTaW1SekRpc2NoYXJnZSR7Qn1gLHk9SyE9PSJpZGxlIixjPXYoITEpLFI9dighMSksUz12KDApLFt4LGZdPUEoITEpLGQ9digwLjQ1KSxvPXYoMCk7aWYoeSYmIWMuY3VycmVudClTLmN1cnJlbnQrPTE7Yy5jdXJyZW50PXksbjAoKCk9PntpZihSLmN1cnJlbnQmJiF5KW8uY3VycmVudD0wLGYoITApO2lmKHkpZighMSk7Ui5jdXJyZW50PXl9LFt5XSk7bGV0IFExPVMuY3VycmVudCxuPWBzZXJ2ZVNpbVJ6Q2hnXyR7Qn1fJHtRMX1gLHM9YHNlcnZlU2ltUnpDaGdfJHtCfV8ke1ExfWAsZz1QKCgpPT57aWYoby5jdXJyZW50Kz0xLG8uY3VycmVudD49MilmKCExKSxvLmN1cnJlbnQ9MH0sW10pLEk9UT8xLjEyOjEsTjE9KDYrdDIqMikqSSxDMT1YPzE6dTNbS10sWjE9ZDNbS10qSSxbSzEsJDFdPWMzW0tdLFgxPVE/SzE6JDEsTz1hM1tLXSxoPWkzW0tdLGo9Sz09PSJkcmFnIj9gdXJsKCMke1V9KWA6YHVybCgjJHtffSlgO1coKCk9PntpZih5KWQuY3VycmVudD1ofSxbeSxoXSk7bGV0IGk9IVgmJih5fHx4KSxlPXk/aDpkLmN1cnJlbnQsVTE9eT9tMzpqMyxMMT15P2czOm0wLE8xPXkmJnIzKCk/UjM6TDEseTE9WD8ibm9uZSI6YHRyYW5zZm9ybSAke1UxfSAke08xfWAsXzE9WD8ibm9uZSI6YG9wYWNpdHkgJHtVMX0gJHtMMX0sIHN0cm9rZS13aWR0aCAke1UxfSAke0wxfWAsdzE9WD8ibm9uZSI6YG9wYWNpdHkgJHtVMX0gJHtMMX1gLEoxPSQudmlld0JveFNpemUsRzE9JC5kLFIxPSFYJiYoeXx8eCkmJmU+MCxtMT17dHJhbnNmb3JtOmB0cmFuc2xhdGUzZCgwLDAsMCkgc2NhbGUoJHtDMX0pYCx0cmFuc2Zvcm1PcmlnaW46IjEwMCUgMTAwJSIsdHJhbnNpdGlvbjp5MSx3aWxsQ2hhbmdlOlg/dm9pZCAwOiJ0cmFuc2Zvcm0iLGJhY2tmYWNlVmlzaWJpbGl0eToiaGlkZGVuIixXZWJraXRCYWNrZmFjZVZpc2liaWxpdHk6ImhpZGRlbiJ9O3JldHVybiBKKCJzdmciLHtyZWY6RCx3aWR0aDpKMSxoZWlnaHQ6SjEsdmlld0JveDpgMCAwICR7SjF9ICR7SjF9YCxmaWxsOiJub25lIix4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJhcmlhLWhpZGRlbiI6InRydWUiLHNoYXBlUmVuZGVyaW5nOiJnZW9tZXRyaWNQcmVjaXNpb24iLHN0eWxlOntkaXNwbGF5OiJibG9jayIsb3ZlcmZsb3c6InZpc2libGUiLGN1cnNvcjoibndzZS1yZXNpemUiLHRvdWNoQWN0aW9uOiJub25lIixwb2ludGVyRXZlbnRzOiJhdXRvIn0sb25Qb2ludGVyRG93bjpaLG9uUG9pbnRlck1vdmU6cSxvblBvaW50ZXJVcDpHLG9uUG9pbnRlckNhbmNlbDpZLG9uTG9zdFBvaW50ZXJDYXB0dXJlOkcsb25Qb2ludGVyRW50ZXI6VixvblBvaW50ZXJMZWF2ZTpMLG9uTW91c2VEb3duOmssY2hpbGRyZW46W0ooImRlZnMiLHtjaGlsZHJlbjpbSigiZmlsdGVyIix7aWQ6Xyx4OiItNTAlIix5OiItNTAlIix3aWR0aDoiMjAwJSIsaGVpZ2h0OiIyMDAlIixjb2xvckludGVycG9sYXRpb25GaWx0ZXJzOiJzUkdCIixjaGlsZHJlbjpbSigiZmVHYXVzc2lhbkJsdXIiLHtpbjoiU291cmNlR3JhcGhpYyIsc3RkRGV2aWF0aW9uOlE/MC44NToxLjA1LHJlc3VsdDoiYiJ9KSxKKCJmZU1lcmdlIix7Y2hpbGRyZW46SigiZmVNZXJnZU5vZGUiLHtpbjoiYiJ9KX0pXX0pLEooImZpbHRlciIse2lkOlUseDoiLTUyJSIseToiLTUyJSIsd2lkdGg6IjIwNCUiLGhlaWdodDoiMjA0JSIsY29sb3JJbnRlcnBvbGF0aW9uRmlsdGVyczoic1JHQiIsY2hpbGRyZW46W0ooImZlR2F1c3NpYW5CbHVyIix7aW46IlNvdXJjZUdyYXBoaWMiLHN0ZERldmlhdGlvbjpRPzEuMTU6MS40MixyZXN1bHQ6ImIifSksSigiZmVNZXJnZSIse2NoaWxkcmVuOkooImZlTWVyZ2VOb2RlIix7aW46ImIifSl9KV19KSxKKCJzdHlsZSIse3R5cGU6InRleHQvY3NzIixjaGlsZHJlbjpgCiAgICAgICAgICAgICR7eT9gCiAgICAgICAgICAgIEBrZXlmcmFtZXMgJHtufSB7CiAgICAgICAgICAgICAgZnJvbSB7IHN0cm9rZS1kYXNob2Zmc2V0OiAxOyB9CiAgICAgICAgICAgICAgdG8geyBzdHJva2UtZGFzaG9mZnNldDogMDsgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIC4ke3N9IHsKICAgICAgICAgICAgICBzdHJva2UtZGFzaGFycmF5OiAxOwogICAgICAgICAgICAgIHN0cm9rZS1kYXNob2Zmc2V0OiAxOwogICAgICAgICAgICAgIHZlY3Rvci1lZmZlY3Q6IG5vbmU7CiAgICAgICAgICAgICAgYW5pbWF0aW9uOiAke259ICR7cDN9bXMgJHtmM30gZm9yd2FyZHM7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgYDoiIn0KICAgICAgICAgICAgQGtleWZyYW1lcyAke019IHsKICAgICAgICAgICAgICBmcm9tIHsgc3Ryb2tlLWRhc2hvZmZzZXQ6IDA7IH0KICAgICAgICAgICAgICB0byB7IHN0cm9rZS1kYXNob2Zmc2V0OiAxOyB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgLiR7RX0gewogICAgICAgICAgICAgIHN0cm9rZS1kYXNoYXJyYXk6IDE7CiAgICAgICAgICAgICAgc3Ryb2tlLWRhc2hvZmZzZXQ6IDA7CiAgICAgICAgICAgICAgdmVjdG9yLWVmZmVjdDogbm9uZTsKICAgICAgICAgICAgICBhbmltYXRpb246ICR7TX0gJHtsM31tcyAke20wfSBmb3J3YXJkczsKICAgICAgICAgICAgICBhbmltYXRpb24tZmlsbC1tb2RlOiBib3RoOwogICAgICAgICAgICB9CiAgICAgICAgICBgfSldfSksSigiZyIseyJhcmlhLWhpZGRlbiI6InRydWUiLHN0eWxlOntwb2ludGVyRXZlbnRzOiJub25lIn0sY2hpbGRyZW46W0ooInBhdGgiLHtkOkcxLHN0cm9rZToicmdiYSgzMCwzMiwzOCwwLjUpIixzdHJva2VXaWR0aDo1Ljg1Kkksc3Ryb2tlTGluZWNhcDoicm91bmQiLHZlY3RvckVmZmVjdDoibm9uLXNjYWxpbmctc3Ryb2tlIixzdHlsZTp7b3BhY2l0eTowLjA4OTYwMDAwMDAwMDAwMDAxLGZpbHRlcjpaOH19KSxKKCJwYXRoIix7ZDpHMSxzdHJva2U6InJnYmEoMTYsMTcsMjIsMC4zOCkiLHN0cm9rZVdpZHRoOjQuNipJLHN0cm9rZUxpbmVjYXA6InJvdW5kIix2ZWN0b3JFZmZlY3Q6Im5vbi1zY2FsaW5nLXN0cm9rZSIsc3R5bGU6e29wYWNpdHk6MC41NSxmaWx0ZXI6Wjh9fSldfSksSigiZyIseyJhcmlhLWhpZGRlbiI6InRydWUiLHN0eWxlOntwb2ludGVyRXZlbnRzOiJub25lIn0sY2hpbGRyZW46W0ooInBhdGgiLHtkOkcxLGZpbGw6Im5vbmUiLHN0cm9rZToicmdiYSgxMCwgMTMyLCAyNTUsIDAuOTUpIixzdHJva2VXaWR0aDoodDIqMis2KSpJLHN0cm9rZUxpbmVjYXA6InJvdW5kIix2ZWN0b3JFZmZlY3Q6Im5vbi1zY2FsaW5nLXN0cm9rZSIsc3R5bGU6e29wYWNpdHk6Tj8wLjk1OjAsdHJhbnNpdGlvbjpYPyJvcGFjaXR5IDgwbXMgbGluZWFyIjpgb3BhY2l0eSAyMDBtcyAke20wfWAsZmlsdGVyOiJkcm9wLXNoYWRvdygwIDAgMnB4IHJnYmEoMTAsMTMyLDI1NSwwLjU1KSkgZHJvcC1zaGFkb3coMCAwIDRweCByZ2JhKDEwLDEzMiwyNTUsMC4zMikpIn19KSxKKCJwYXRoIix7ZDpHMSxmaWxsOiJub25lIixzdHJva2U6InJnYmEoMjU1LDI1NSwyNTUsMC45NSkiLHN0cm9rZVdpZHRoOjEuNSpJLHN0cm9rZUxpbmVjYXA6InJvdW5kIix2ZWN0b3JFZmZlY3Q6Im5vbi1zY2FsaW5nLXN0cm9rZSIsc3R5bGU6e29wYWNpdHk6Tj8wLjc6MCx0cmFuc2l0aW9uOlg/Im9wYWNpdHkgODBtcyBsaW5lYXIiOmBvcGFjaXR5IDIwMG1zICR7bTB9YH19KV19KSxKKCJnIix7ImFyaWEtaGlkZGVuIjoidHJ1ZSIsc3R5bGU6bTEsY2hpbGRyZW46W0ooImciLHtzdHlsZTp7cG9pbnRlckV2ZW50czoibm9uZSJ9LGNoaWxkcmVuOltSMSYmSigicGF0aCIse2Q6RzEsc3Ryb2tlOiJyZ2JhKDIxMCwyMjgsMjU1LDAuNCkiLHN0cm9rZVdpZHRoOjQuMjUqSSxzdHJva2VMaW5lY2FwOiJyb3VuZCIsdmVjdG9yRWZmZWN0OiJub24tc2NhbGluZy1zdHJva2UiLGZpbHRlcjpqLHN0eWxlOntvcGFjaXR5OmUqMC44Mix0cmFuc2l0aW9uOncxfX0pLFgmJmg+MCYmSigicGF0aCIse2Q6RzEsc3Ryb2tlOiJyZ2JhKDI1NSwyNTUsMjU1LDAuODIpIixzdHJva2VXaWR0aDo0LjE1Kkksc3Ryb2tlTGluZWNhcDoicm91bmQiLHZlY3RvckVmZmVjdDoibm9uLXNjYWxpbmctc3Ryb2tlIixmaWx0ZXI6aixzdHlsZTp7b3BhY2l0eTpoLHRyYW5zaXRpb246dzF9fSksSigicGF0aCIse2Q6RzEsc3Ryb2tlOm8zW0tdLHN0cm9rZVdpZHRoOloxLHN0cm9rZUxpbmVjYXA6InJvdW5kIix2ZWN0b3JFZmZlY3Q6Im5vbi1zY2FsaW5nLXN0cm9rZSIsc3R5bGU6e29wYWNpdHk6WDEsdHJhbnNpdGlvbjpfMSxmaWx0ZXI6Tjh9fSksSigicGF0aCIse2Q6RzEsc3Ryb2tlOiJyZ2JhKDIzNiwyNDQsMjUyLDAuOTIpIixzdHJva2VXaWR0aDoxLjM4Kkksc3Ryb2tlTGluZWNhcDoicm91bmQiLHZlY3RvckVmZmVjdDoibm9uLXNjYWxpbmctc3Ryb2tlIixzdHlsZTp7b3BhY2l0eTpPLHRyYW5zaXRpb246XzEsZmlsdGVyOk44fX0pLGkmJkooImciLHtzdHlsZTp7b3BhY2l0eTplLHRyYW5zaXRpb246dzF9LGNoaWxkcmVuOlt5JiZKKCJnIix7Y2hpbGRyZW46SihxOCx7ZEZpbGw6JC5kRmlsbCx3OkksY2xhc3NOYW1lOnN9KX0sYHJ6LWNoYXJnZS0ke1ExfWApLHgmJiF5JiZKKCJnIix7Y2hpbGRyZW46SihxOCx7ZEZpbGw6JC5kRmlsbCx3OkksY2xhc3NOYW1lOkUsb25FbmQ6Z30pfSwicnotZGlzY2hhcmdlIildfSldfSksSigicGF0aCIse2Q6RzEsZmlsbDoibm9uZSIsc3Ryb2tlOiJyZ2JhKDAsMCwwLDApIixzdHJva2VXaWR0aDpOMSxzdHJva2VMaW5lY2FwOiJyb3VuZCIscG9pbnRlckV2ZW50czoic3Ryb2tlIn0pXX0pXX0pfSk7ZnVuY3Rpb24gWTgoe3NpbXVsYXRvclJlc2l6ZTpDLGRldmljZVR5cGU6JCxzdHJlYW1Db25maWc6Syxjb250YWluZXJXaWR0aDpYLGNvbnRhaW5lckhlaWdodDpRfSl7bGV0IE49XzIoKSxaPWgzKCksW3EsR109QSghMSksWT1NMSgoKT0+ajIoe3R5cGU6JCxjb25maWc6Sz8/bnVsbCxjb250YWluZXJXaWR0aDpYLGNvbnRhaW5lckhlaWdodDpRfSksWyQsSyxYLFFdKSxWPUMuaXNSZXNpemluZ3x8Qy5pc0luZXJ0aWE/ImRyYWciOkMuaGFuZGxlSG92ZXJlZD8iaG92ZXIiOiJpZGxlIjtyZXR1cm4gSigiZGl2Iix7cm9sZToic2VwYXJhdG9yIiwiYXJpYS1sYWJlbCI6IlJlc2l6ZSBzaW11bGF0b3Igd2lkdGguIERyYWcgdGhlIGNvcm5lciBvciB1c2UgTGVmdCBhbmQgUmlnaHQgQXJyb3cga2V5czsgaG9sZCBTaGlmdCBmb3IgbGFyZ2VyIHN0ZXBzLiIsImFyaWEtb3JpZW50YXRpb24iOiJ2ZXJ0aWNhbCIsImFyaWEtdmFsdWVtaW4iOk1hdGgucm91bmQoQy5taW5XaWR0aCksImFyaWEtdmFsdWVtYXgiOk1hdGgucm91bmQoQy5tYXhXaWR0aCksImFyaWEtdmFsdWVub3ciOk1hdGgucm91bmQoQy5jb21taXR0ZWRXaWR0aCksdGFiSW5kZXg6MCxvbktleURvd246Qy5vbktleURvd24sb25Gb2N1czooTCk9PntHKEwuY3VycmVudFRhcmdldC5tYXRjaGVzPy4oIjpmb2N1cy12aXNpYmxlIik/PyExKX0sb25CbHVyOigpPT5HKCExKSxzdHlsZTp7cG9zaXRpb246ImFic29sdXRlIixyaWdodDotMTQsYm90dG9tOi0xNCx3aWR0aDo2MCxoZWlnaHQ6NjAsYm9yZGVyOiJub25lIixwYWRkaW5nOjAsbWFyZ2luOjAsZGlzcGxheToiZmxleCIsYWxpZ25JdGVtczoiZmxleC1lbmQiLGp1c3RpZnlDb250ZW50OiJmbGV4LWVuZCIsYmFja2dyb3VuZDoidHJhbnNwYXJlbnQiLHBvaW50ZXJFdmVudHM6Im5vbmUiLG91dGxpbmU6Im5vbmUiLHpJbmRleDoyNSxXZWJraXRUYXBIaWdobGlnaHRDb2xvcjoidHJhbnNwYXJlbnQifSxjaGlsZHJlbjpKKEs0LHtyZWY6Qy5oYW5kbGVSZWYsYXJjOlkscGhhc2U6VixyZWR1Y2VkTW90aW9uOk4saGlnaENvbnRyYXN0OlosZm9jdXNWaXNpYmxlOnEsb25Qb2ludGVyRG93bjpDLm9uUG9pbnRlckRvd24sb25Qb2ludGVyTW92ZTpDLm9uUG9pbnRlck1vdmUsb25Qb2ludGVyVXA6Qy5vblBvaW50ZXJFbmQsb25Qb2ludGVyQ2FuY2VsOkMub25Qb2ludGVyRW5kLG9uUG9pbnRlckVudGVyOigpPT5DLnNldEhhbmRsZUhvdmVyZWQoITApLG9uUG9pbnRlckxlYXZlOigpPT5DLnNldEhhbmRsZUhvdmVyZWQoITEpfSl9KX1mdW5jdGlvbiBHOCh7d2lkdGg6QyxoZWlnaHQ6JCx2aXNpYmxlOkt9KXtyZXR1cm4gSigiZGl2Iix7ImFyaWEtaGlkZGVuIjoidHJ1ZSIsY2xhc3NOYW1lOiJhYnNvbHV0ZSByaWdodC0zIGJvdHRvbS0zIHotMjAgcG9pbnRlci1ldmVudHMtbm9uZSBzZWxlY3Qtbm9uZSByb3VuZGVkLWxnIHB4LTIuNSBweS0xIHRleHQtWzExLjVweF0gZm9udC1tb25vIGxlYWRpbmctbm9uZSB0cmFja2luZy13aWRlIHRleHQtd2hpdGUvOTUgYmctW3JnYmEoMjAsMjIsMjgsMC43OCldIHNoYWRvdy1bMF8xcHhfMnB4X3JnYmEoMCwwLDAsMC4xOCksMF82cHhfMThweF9yZ2JhKDAsMCwwLDAuMjgpLGluc2V0XzBfMF8wXzFweF9yZ2JhKDI1NSwyNTUsMjU1LDAuMDYpXSBiYWNrZHJvcC1ibHVyLW1kIGJhY2tkcm9wLXNhdHVyYXRlLTE1MCB3aGl0ZXNwYWNlLW5vd3JhcCIsc3R5bGU6e29wYWNpdHk6Sz8xOjAsdHJhbnNmb3JtOmB0cmFuc2xhdGVZKCR7Sz8wOjR9cHgpIHNjYWxlKCR7Sz8xOjAuOTZ9KWAsdHJhbnNmb3JtT3JpZ2luOiIxMDAlIDEwMCUiLHRyYW5zaXRpb246Im9wYWNpdHkgMTgwbXMgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKSwgdHJhbnNmb3JtIDIyMG1zIGN1YmljLWJlemllcigwLjIsIDAuODIsIDAuMjIsIDEpIn0sY2hpbGRyZW46W01hdGgucm91bmQoQyksIiAiLEooInNwYW4iLHtjbGFzc05hbWU6Im9wYWNpdHktNjAgbXgtMC41IixjaGlsZHJlbjoiw5cifSksIiAiLE1hdGgucm91bmQoJCldfSl9ZnVuY3Rpb24gWDQoQywkLEspe2xldCBYPUsubGF0Kk1hdGguUEkvMTgwLFE9KEMtSy5sYXQpKk1hdGguUEkvMTgwO3JldHVybnt4OigkLUsubG5nKSpNYXRoLlBJLzE4MCpNYXRoLmNvcyhYKSo2MzcxMDAwLHo6LVEqNjM3MTAwMH19ZnVuY3Rpb24gSjQoQywkLEspe2xldCBYPUsubGF0Kk1hdGguUEkvMTgwLFE9LSQvNjM3MTAwMCooMTgwL01hdGguUEkpLE49Qy8oNjM3MTAwMCpNYXRoLmNvcyhYKSkqKDE4MC9NYXRoLlBJKTtyZXR1cm57bGF0OksubGF0K1EsbG5nOksubG5nK059fWZ1bmN0aW9uIFE0KEMsJCxLLFgsUSl7bGV0IE49USpRLFo9TipRLHE9KEcsWSxWLEwpPT4wLjUqKDIqWSsoLUcrVikqUSsoMipHLTUqWSs0KlYtTCkqTisoLUcrMypZLTMqVitMKSpaKTtyZXR1cm57eDpxKEMueCwkLngsSy54LFgueCksejpxKEMueiwkLnosSy56LFgueikseTpxKEMueSwkLnksSy55LFgueSkscmF3QWx0OnEoQy5yYXdBbHQsJC5yYXdBbHQsSy5yYXdBbHQsWC5yYXdBbHQpfX1mdW5jdGlvbiBONChDLCQsSyl7aWYoQy5sZW5ndGg8MilyZXR1cm4gQy5zbGljZSgpO2xldCBYPVtdLFE9Qy5sZW5ndGgsTj1LP1E6US0xO2ZvcihsZXQgWj0wO1o8TjtaKyspe2xldCBxPUNbSz8oWi0xK1EpJVE6TWF0aC5tYXgoMCxaLTEpXSxHPUNbWiVRXSxZPUNbKForMSklUV0sVj1DW0s/KForMiklUTpNYXRoLm1pbihRLTEsWisyKV0sTD1ZLngtRy54LGs9WS56LUcueixEPU1hdGguaHlwb3QoTCxrKSxUPU1hdGgubWF4KDIsTWF0aC5jZWlsKEQvJCkpO2ZvcihsZXQgQj0wO0I8VDtCKyspe2xldCBfPUIvVDtYLnB1c2goUTQocSxHLFksVixfKSl9fWlmKCFLKVgucHVzaChDW1EtMV0pO3JldHVybiBYfWZ1bmN0aW9uIEw4KEMpe2lmKEMud2F5cG9pbnRzLmxlbmd0aDwyKXRocm93IEVycm9yKGBUcmFpbCAke0MuaWR9IG5lZWRzIGF0IGxlYXN0IDIgd2F5cG9pbnRzYCk7bGV0ICQ9e2xhdDpDLndheXBvaW50cy5yZWR1Y2UoKEIsXyk9PkIrXy5sYXQsMCkvQy53YXlwb2ludHMubGVuZ3RoLGxuZzpDLndheXBvaW50cy5yZWR1Y2UoKEIsXyk9PkIrXy5sbmcsMCkvQy53YXlwb2ludHMubGVuZ3RofSxLPUMud2F5cG9pbnRzLm1hcCgoQik9PkIuYWx0Pz8wKSxYPU1hdGgubWluKC4uLkspLFE9TWF0aC5tYXgoLi4uSyksTj1DLndheXBvaW50cy5tYXAoKEIpPT57bGV0e3g6Xyx6OlV9PVg0KEIubGF0LEIubG5nLCQpLE09Qi5hbHQ/PzA7cmV0dXJue3g6Xyx6OlUseTpNLVgscmF3QWx0Ok19fSksWj1ONChOLDgsISFDLmxvb3ApLHE9W10sRz0wO2ZvcihsZXQgQj0wO0I8Wi5sZW5ndGg7QisrKXtsZXQgXz1aW0JdO2lmKEI+MCl7bGV0IHk9WltCLTFdO0crPU1hdGguaHlwb3QoXy54LXkueCxfLnoteS56LF8ueS15LnkpfWxldHtsYXQ6VSxsbmc6TX09SjQoXy54LF8ueiwkKSxFPU1hdGgubWF4KDAsXy55KTtxLnB1c2goe3g6Xy54LHo6Xy56LHk6RSxhcmM6RyxsYXQ6VSxsbmc6TX0pfWxldCBZPTEvMCxWPS0xLzAsTD0xLzAsaz0tMS8wLEQ9MS8wLFQ9LTEvMDtmb3IobGV0IEIgb2YgcSl7aWYoQi54PFkpWT1CLng7aWYoQi54PlYpVj1CLng7aWYoQi56PEwpTD1CLno7aWYoQi56Pmspaz1CLno7aWYoQi55PEQpRD1CLnk7aWYoQi55PlQpVD1CLnl9cmV0dXJue3RyYWlsOkMsb3JpZ2luOiQscG9pbnRzOnEsdG90YWxEaXN0YW5jZTpxW3EubGVuZ3RoLTFdLmFyYyxib3VuZHM6e3g6W1ksVl0seTpbRCxUXSx6OltMLGtdfSxyYXdNaW5BbHQ6WCxyYXdNYXhBbHQ6UX19ZnVuY3Rpb24gTjAoQywkKXtsZXQgSz1DLnRvdGFsRGlzdGFuY2U7aWYoSz09PTApcmV0dXJuIEMucG9pbnRzWzBdO2xldCBYPSQ7aWYoQy50cmFpbC5sb29wKVg9KFglSytLKSVLO2Vsc2V7aWYoWDw9MClyZXR1cm4gQy5wb2ludHNbMF07aWYoWD49SylyZXR1cm4gQy5wb2ludHNbQy5wb2ludHMubGVuZ3RoLTFdfWxldCBRPTAsTj1DLnBvaW50cy5sZW5ndGgtMTt3aGlsZShRKzE8Til7bGV0IFY9UStOPj4+MTtpZihDLnBvaW50c1tWXS5hcmM8PVgpUT1WO2Vsc2UgTj1WfWxldCBaPUMucG9pbnRzW1FdLHE9Qy5wb2ludHNbTl0sRz1xLmFyYy1aLmFyYyxZPUc9PT0wPzA6KFgtWi5hcmMpL0c7cmV0dXJue3g6Wi54KyhxLngtWi54KSpZLHo6Wi56KyhxLnotWi56KSpZLHk6Wi55KyhxLnktWi55KSpZLGFyYzpYLGxhdDpaLmxhdCsocS5sYXQtWi5sYXQpKlksbG5nOloubG5nKyhxLmxuZy1aLmxuZykqWX19ZnVuY3Rpb24gSzUoQyl7c3dpdGNoKEMpe2Nhc2Uid2FsayI6cmV0dXJuIDEuNDtjYXNlInJ1biI6cmV0dXJuIDM7Y2FzZSJjeWNsZSI6cmV0dXJuIDUuNTtjYXNlImRyaXZlIjpyZXR1cm4gMTMuNH19dmFyIFo0PVt7bGF0OjM3LjMzMjcyLGxuZzotMTIyLjAwODMzLGFsdDo0OX0se2xhdDozNy4zMzMwOSxsbmc6LTEyMi4wMDczNSxhbHQ6NDh9LHtsYXQ6MzcuMzMzNzMsbG5nOi0xMjIuMDA2NjMsYWx0OjQ5fSx7bGF0OjM3LjMzNDU0LGxuZzotMTIyLjAwNjI3LGFsdDo0OX0se2xhdDozNy4zMzU0LGxuZzotMTIyLjAwNjMzLGFsdDo0OX0se2xhdDozNy4zMzYxOCxsbmc6LTEyMi4wMDY3OSxhbHQ6NDV9LHtsYXQ6MzcuMzM2NzUsbG5nOi0xMjIuMDA3NTksYWx0OjQ1fSx7bGF0OjM3LjMzNzA0LGxuZzotMTIyLjAwODYxLGFsdDo0Nn0se2xhdDozNy4zMzY5OCxsbmc6LTEyMi4wMDk2OSxhbHQ6NDh9LHtsYXQ6MzcuMzM2NjIsbG5nOi0xMjIuMDEwNjYsYWx0OjQ4fSx7bGF0OjM3LjMzNTk4LGxuZzotMTIyLjAxMTM4LGFsdDo0OX0se2xhdDozNy4zMzUxNyxsbmc6LTEyMi4wMTE3NCxhbHQ6NTB9LHtsYXQ6MzcuMzM0MzEsbG5nOi0xMjIuMDExNjksYWx0OjUwfSx7bGF0OjM3LjMzMzU0LGxuZzotMTIyLjAxMTIyLGFsdDo1MH0se2xhdDozNy4zMzI5Nixsbmc6LTEyMi4wMTA0MixhbHQ6NTF9LHtsYXQ6MzcuMzMyNjgsbG5nOi0xMjIuMDA5NCxhbHQ6NTB9XSxxND1be2xhdDozNy44MzIxMixsbmc6LTEyMi40ODA2NSxhbHQ6MzB9LHtsYXQ6MzcuODI5MzcsbG5nOi0xMjIuNDc5NzQsYWx0OjMwfSx7bGF0OjM3LjgyNjQ5LGxuZzotMTIyLjQ3OTQsYWx0OjMwfSx7bGF0OjM3LjgyMzYyLGxuZzotMTIyLjQ3OTA3LGFsdDo0NX0se2xhdDozNy44MjA3NCxsbmc6LTEyMi40Nzg3MyxhbHQ6NTl9LHtsYXQ6MzcuODE3ODYsbG5nOi0xMjIuNDc4MzksYWx0OjY2fSx7bGF0OjM3LjgxNDk4LGxuZzotMTIyLjQ3ODA2LGFsdDo2Nn0se2xhdDozNy44MTIxMSxsbmc6LTEyMi40Nzc3MixhbHQ6NTh9LHtsYXQ6MzcuODA5MjMsbG5nOi0xMjIuNDc3MzQsYWx0OjQ0fSx7bGF0OjM3LjgwOTQ5LGxuZzotMTIyLjQ3NzMsYWx0OjQ1fSx7bGF0OjM3LjgxMjM2LGxuZzotMTIyLjQ3NzY1LGFsdDo1OX0se2xhdDozNy44MTUyNCxsbmc6LTEyMi40Nzc5OCxhbHQ6NjZ9LHtsYXQ6MzcuODE4MTIsbG5nOi0xMjIuNDc4MzIsYWx0OjY2fSx7bGF0OjM3LjgyMSxsbmc6LTEyMi40Nzg2NixhbHQ6NTh9LHtsYXQ6MzcuODIzODcsbG5nOi0xMjIuNDc5LGFsdDo0NH0se2xhdDozNy44MjY3NSxsbmc6LTEyMi40NzkzMyxhbHQ6MzB9LHtsYXQ6MzcuODI5NjMsbG5nOi0xMjIuNDc5NjcsYWx0OjMwfSx7bGF0OjM3LjgzMjMzLGxuZzotMTIyLjQ4MDcyLGFsdDozMH1dLFk0PVt7bGF0OjM3Ljg4NjY0LGxuZzotMTIyLjYyNTk5LGFsdDoxMjF9LHtsYXQ6MzcuODg4ODcsbG5nOi0xMjIuNjIzMzIsYWx0OjEzNX0se2xhdDozNy44OTExNSxsbmc6LTEyMi42MjE2LGFsdDoxNjR9LHtsYXQ6MzcuODkzNTMsbG5nOi0xMjIuNjE5MjEsYWx0OjE4MH0se2xhdDozNy44OTQ2Nixsbmc6LTEyMi42MTU3NyxhbHQ6MjIwfSx7bGF0OjM3Ljg5NjMxLGxuZzotMTIyLjYxMjY4LGFsdDoyNzN9LHtsYXQ6MzcuODk5MTcsbG5nOi0xMjIuNjEwOTgsYWx0OjMxM30se2xhdDozNy45MDE2Nixsbmc6LTEyMi42MDg1NSxhbHQ6MzQyfSx7bGF0OjM3LjkwMTk5LGxuZzotMTIyLjYwNjAxLGFsdDo0MDh9LHtsYXQ6MzcuOTAzMzksbG5nOi0xMjIuNjA0MDEsYWx0OjQ1MH0se2xhdDozNy45MDY2Mixsbmc6LTEyMi42MDI5MSxhbHQ6NDQwfSx7bGF0OjM3LjkwOTcxLGxuZzotMTIyLjYwMTczLGFsdDo0MzJ9LHtsYXQ6MzcuOTEyMTMsbG5nOi0xMjIuNjAwMDcsYWx0OjQzNn0se2xhdDozNy45MTQzOSxsbmc6LTEyMi41OTc4LGFsdDo0MTB9LHtsYXQ6MzcuOTEyODUsbG5nOi0xMjIuNTk1MDQsYWx0OjQyMn0se2xhdDozNy45MTI3NCxsbmc6LTEyMi41OTIwMixhbHQ6NDI1fSx7bGF0OjM3LjkxNSxsbmc6LTEyMi41OTAzMixhbHQ6NDEyfSx7bGF0OjM3LjkxNjM3LGxuZzotMTIyLjU4OTAzLGFsdDo0MDZ9LHtsYXQ6MzcuOTE0ODEsbG5nOi0xMjIuNTg1OTUsYWx0OjM4Mn0se2xhdDozNy45MTc0LGxuZzotMTIyLjU4Mzk4LGFsdDozNzJ9LHtsYXQ6MzcuOTE2NDIsbG5nOi0xMjIuNTgyMzYsYWx0OjM1Mn0se2xhdDozNy45MTQ4MSxsbmc6LTEyMi41ODAxMSxhbHQ6MzQyfV0sRzQ9W3tsYXQ6NDAuNzgyMTYsbG5nOi03My45NjI1NCxhbHQ6Mzd9LHtsYXQ6NDAuNzgyMjEsbG5nOi03My45NjA5OCxhbHQ6MzZ9LHtsYXQ6NDAuNzgzMjgsbG5nOi03My45NjAxLGFsdDozNn0se2xhdDo0MC43ODQ0LGxuZzotNzMuOTU5MyxhbHQ6MzZ9LHtsYXQ6NDAuNzg1NSxsbmc6LTczLjk1ODQ4LGFsdDozNn0se2xhdDo0MC43ODY2NCxsbmc6LTczLjk1Nzc0LGFsdDozNn0se2xhdDo0MC43ODc5LGxuZzotNzMuOTU3NjQsYWx0OjM2fSx7bGF0OjQwLjc4ODk4LGxuZzotNzMuOTU3OTIsYWx0OjM2fSx7bGF0OjQwLjc4ODY4LGxuZzotNzMuOTU5NTEsYWx0OjM3fSx7bGF0OjQwLjc4ODk3LGxuZzotNzMuOTYxMTIsYWx0OjM2fSx7bGF0OjQwLjc4ODMzLGxuZzotNzMuOTYyNSxhbHQ6Mzd9LHtsYXQ6NDAuNzg4MjgsbG5nOi03My45NjQxNixhbHQ6Mzd9LHtsYXQ6NDAuNzg4MDUsbG5nOi03My45NjU3MyxhbHQ6MzZ9LHtsYXQ6NDAuNzg2OTEsbG5nOi03My45NjYzNixhbHQ6MzZ9LHtsYXQ6NDAuNzg1NjYsbG5nOi03My45NjY2NSxhbHQ6MzZ9LHtsYXQ6NDAuNzg0NTgsbG5nOi03My45NjYwOCxhbHQ6MzZ9LHtsYXQ6NDAuNzg0MDIsbG5nOi03My45NjQ1OSxhbHQ6MzZ9LHtsYXQ6NDAuNzgzMjIsbG5nOi03My45NjMzNCxhbHQ6Mzd9XSxMND1be2xhdDozNy41OTY1OSxsbmc6LTEyMi41MDMxNixhbHQ6NH0se2xhdDozNy41OTU1NSxsbmc6LTEyMi41MDQyNCxhbHQ6NH0se2xhdDozNy41OTQ1Mixsbmc6LTEyMi41MDUzNCxhbHQ6NX0se2xhdDozNy41OTMyOSxsbmc6LTEyMi41MDU4OCxhbHQ6OX0se2xhdDozNy41OTIxMixsbmc6LTEyMi41MDUwOCxhbHQ6MjB9LHtsYXQ6MzcuNTkxLGxuZzotMTIyLjUwNDEzLGFsdDoyOX0se2xhdDozNy41ODk3NCxsbmc6LTEyMi41MDQxNixhbHQ6NDB9LHtsYXQ6MzcuNTg4Nyxsbmc6LTEyMi41MDUyNCxhbHQ6NTF9LHtsYXQ6MzcuNTg3NDUsbG5nOi0xMjIuNTA0OTYsYWx0OjYwfSx7bGF0OjM3LjU4NjI3LGxuZzotMTIyLjUwNDIyLGFsdDo3MX0se2xhdDozNy41ODUzOSxsbmc6LTEyMi41MDUzNCxhbHQ6ODJ9LHtsYXQ6MzcuNTg1MDUsbG5nOi0xMjIuNTA2OTgsYWx0OjkzfSx7bGF0OjM3LjU4NTM5LGxuZzotMTIyLjUwNTM0LGFsdDo4Mn0se2xhdDozNy41ODYyNyxsbmc6LTEyMi41MDQyMixhbHQ6NzF9LHtsYXQ6MzcuNTg3NDUsbG5nOi0xMjIuNTA0OTYsYWx0OjYwfSx7bGF0OjM3LjU4ODcsbG5nOi0xMjIuNTA1MjQsYWx0OjUxfSx7bGF0OjM3LjU4OTc0LGxuZzotMTIyLjUwNDE2LGFsdDo0MH0se2xhdDozNy41OTEsbG5nOi0xMjIuNTA0MTMsYWx0OjI5fSx7bGF0OjM3LjU5MjEyLGxuZzotMTIyLjUwNTA4LGFsdDoyMH0se2xhdDozNy41OTMyOSxsbmc6LTEyMi41MDU4OCxhbHQ6OX0se2xhdDozNy41OTQ1Mixsbmc6LTEyMi41MDUzNCxhbHQ6NX0se2xhdDozNy41OTU1NSxsbmc6LTEyMi41MDQyNCxhbHQ6NH1dLFowPVt7aWQ6ImFwcGxlLXBhcmstbG9vcCIsbmFtZToiQXBwbGUgUGFyayBMb29wIixkZXNjcmlwdGlvbjoiQ3VwZXJ0aW5vIOKAoiBmbGF0IHJpbmcgcm9hZCIsbW9kZToid2FsayIsd2F5cG9pbnRzOlo0LGxvb3A6ITB9LHtpZDoiZ29sZGVuLWdhdGUiLG5hbWU6IkdvbGRlbiBHYXRlIENyb3NzaW5nIixkZXNjcmlwdGlvbjoiU2FuIEZyYW5jaXNjbyDigKIgYnJpZGdlIHJvdW5kLXRyaXAiLG1vZGU6InJ1biIsd2F5cG9pbnRzOnE0LGxvb3A6ITB9LHtpZDoidGFtLXJpZGdlIixuYW1lOiJNdC4gVGFtIFJpZGdlIixkZXNjcmlwdGlvbjoiU3RpbnNvbiBCZWFjaCDigKIgU3RlZXAgUmF2aW5lICsgTWF0dCBEYXZpcyBsb29wIixtb2RlOiJ3YWxrIix3YXlwb2ludHM6WTQsbG9vcDohMH0se2lkOiJjZW50cmFsLXBhcmsiLG5hbWU6IlJlc2Vydm9pciBMb29wIixkZXNjcmlwdGlvbjoiQ2VudHJhbCBQYXJrIOKAoiAyLjUga20iLG1vZGU6InJ1biIsd2F5cG9pbnRzOkc0LGxvb3A6ITB9LHtpZDoicGNoLXBhY2lmaWNhIixuYW1lOiJQYWNpZmljIENvYXN0IEh3eSIsZGVzY3JpcHRpb246IlBhY2lmaWNhIOKAoiBEZXZpbCdzIFNsaWRlIHJvdW5kLXRyaXAiLG1vZGU6ImRyaXZlIix3YXlwb2ludHM6TDQsbG9vcDohMH1dO3ZhciBWND02NTAsQjQ9YAoubGVtLXRvZ2dsZTpob3ZlciB7IGNvbG9yOiAjZmZmOyB9Ci5sZW0tdG9nZ2xlOmhvdmVyIC5sZW0tY2hldnJvbiB7IGNvbG9yOiByZ2JhKDI1NSwyNTUsMjU1LDAuODUpICFpbXBvcnRhbnQ7IH0KLmxlbS1zZWxlY3Q6aG92ZXIgeyBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwyNTUsMjU1LDAuMDcpOyBib3JkZXItY29sb3I6IHJnYmEoMjU1LDI1NSwyNTUsMC4xNik7IH0KLmxlbS1zZWxlY3Q6Zm9jdXMgeyBvdXRsaW5lOiBub25lOyBib3JkZXItY29sb3I6IHJnYmEoMjU1LDI1NSwyNTUsMC4yNCk7IGJhY2tncm91bmQ6IHJnYmEoMjU1LDI1NSwyNTUsMC4wOCk7IH0KLmxlbS1wcmltYXJ5OmhvdmVyOm5vdCg6ZGlzYWJsZWQpIHsgZmlsdGVyOiBicmlnaHRuZXNzKDEuMDgpOyB9Ci5sZW0tcHJpbWFyeS1vbjpob3Zlcjpub3QoOmRpc2FibGVkKSB7IGJhY2tncm91bmQ6IHJnYmEoMjU1LDI1NSwyNTUsMC4yMikgIWltcG9ydGFudDsgZmlsdGVyOiBub25lOyB9Ci5sZW0tZ2hvc3Q6aG92ZXI6bm90KDpkaXNhYmxlZCkgeyBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwyNTUsMjU1LDAuMDYpOyBib3JkZXItY29sb3I6IHJnYmEoMjU1LDI1NSwyNTUsMC4yKTsgY29sb3I6ICNmZmY7IH0KLmxlbS1naG9zdDpkaXNhYmxlZCB7IG9wYWNpdHk6IDAuNDsgY3Vyc29yOiBub3QtYWxsb3dlZDsgfQoubGVtLXNlZzpob3Zlcjpub3QoW2FyaWEtcHJlc3NlZD0idHJ1ZSJdKSB7IGNvbG9yOiByZ2JhKDI1NSwyNTUsMjU1LDAuOSk7IGJhY2tncm91bmQ6IHJnYmEoMjU1LDI1NSwyNTUsMC4wNSkgIWltcG9ydGFudDsgfQoubGVtLXNwZWVkOmhvdmVyIHsgYmFja2dyb3VuZDogcmdiYSgyNTUsMjU1LDI1NSwwLjA5KTsgYm9yZGVyLWNvbG9yOiByZ2JhKDI1NSwyNTUsMjU1LDAuMTgpOyBjb2xvcjogI2ZmZjsgfQoubGVtLXNwZWVkLW9uOmhvdmVyIHsgYmFja2dyb3VuZDogcmdiYSgyNTUsMjU1LDI1NSwwLjg4KSAhaW1wb3J0YW50OyBib3JkZXItY29sb3I6IHJnYmEoMjU1LDI1NSwyNTUsMC44OCkgIWltcG9ydGFudDsgY29sb3I6ICMwYTBhMGMgIWltcG9ydGFudDsgfQoubGVtLXNwZWVkOmFjdGl2ZSB7IHRyYW5zZm9ybTogc2NhbGUoMC45Nyk7IH0KYCxYNT1bMSwyLDUsMjBdLFY4PTEwMDAsSjU9e3N0YXR1czoiaWRsZSIsYXJjOjAsZWxhcHNlZE1zOjB9O2Z1bmN0aW9uIEY4KHt1ZGlkOkMsZXhlYzokfSl7bGV0W0ssWF09QSghMCksW1EsTl09QShaMFswXS5pZCksW1oscV09QShaMFswXS5tb2RlKSxbRyxZXT1BKDEpLFtWLExdPUEoSjUpLFtrLERdPUEobnVsbCksVD1NMSgoKT0+WjAuZmluZCgoZyk9PmcuaWQ9PT1RKT8/WjBbMF0sW1FdKSxCPU0xKCgpPT5MOChUKSxbVF0pLF89digwKSxVPXYoImlkbGUiKSxNPXYoSzUoWikqRyksRT12KDApLHk9dihCKSxjPXYobnVsbCk7VygoKT0+e00uY3VycmVudD1LNShaKSpHfSxbWixHXSk7bGV0IFI9dihudWxsKTtXKCgpPT57bGV0IGc9eS5jdXJyZW50LEk9Xy5jdXJyZW50O2lmKHkuY3VycmVudD1CLGcmJmchPT1CKVIuY3VycmVudD1ENChnLEksQixwZXJmb3JtYW5jZS5ub3coKSk7Xy5jdXJyZW50PTAsRS5jdXJyZW50PTAsVS5jdXJyZW50PSJpZGxlIixjLmN1cnJlbnQ9bnVsbCxMKEo1KX0sW0JdKTtsZXQgUz12KDApLHg9dihudWxsKSxmPXYobnVsbCk7VygoKT0+e2xldCBnPTAsST0oTjEpPT57bGV0IEMxPXguY3VycmVudCxaMT1DMT09bnVsbD8xNjpNYXRoLm1pbig2NCxOMS1DMSk7aWYoeC5jdXJyZW50PU4xLFMuY3VycmVudD0oUy5jdXJyZW50K1oxKjAuMDAwMTIpJShNYXRoLlBJKjIpLFUuY3VycmVudD09PSJwbGF5aW5nIil7bGV0ICQxPU0uY3VycmVudCpaMS8xMDAwO18uY3VycmVudCs9JDEsRS5jdXJyZW50Kz1aMTtsZXQgWDE9eS5jdXJyZW50LnRvdGFsRGlzdGFuY2U7aWYoIXkuY3VycmVudC50cmFpbC5sb29wJiZfLmN1cnJlbnQ+PVgxKV8uY3VycmVudD1YMSxVLmN1cnJlbnQ9InBhdXNlZCIsTCh7c3RhdHVzOiJwYXVzZWQiLGFyYzpYMSxlbGFwc2VkTXM6RS5jdXJyZW50fSl9bGV0IEsxPWYuY3VycmVudDtpZihLMSl7bGV0ICQxPXkuY3VycmVudCxYMT1udWxsLE89Ui5jdXJyZW50O2lmKE8pe2xldCBoPShOMS1PLnN0YXJ0TXMpL1Y0O2lmKGg+PTEpUi5jdXJyZW50PW51bGw7ZWxzZXtsZXQgaj16NChoKTskMT1GNChPLGopLFgxPXt4Ok8ucHJldk1hcmtlci54KyhPLm5leHRNYXJrZXIueC1PLnByZXZNYXJrZXIueCkqaix5Ok8ucHJldk1hcmtlci55KyhPLm5leHRNYXJrZXIueS1PLnByZXZNYXJrZXIueSkqaix6Ok8ucHJldk1hcmtlci56KyhPLm5leHRNYXJrZXIuei1PLnByZXZNYXJrZXIueikqan19fUg0KEsxLCQxLF8uY3VycmVudCxTLmN1cnJlbnQsTjEsVS5jdXJyZW50PT09InBsYXlpbmciLFgxKX1nPXJlcXVlc3RBbmltYXRpb25GcmFtZShJKX07cmV0dXJuIGc9cmVxdWVzdEFuaW1hdGlvbkZyYW1lKEkpLCgpPT5jYW5jZWxBbmltYXRpb25GcmFtZShnKX0sW10pLFcoKCk9PntsZXQgZz1zZXRJbnRlcnZhbCgoKT0+e2lmKFUuY3VycmVudD09PSJwbGF5aW5nIilMKHtzdGF0dXM6InBsYXlpbmciLGFyYzpfLmN1cnJlbnQsZWxhcHNlZE1zOkUuY3VycmVudH0pfSwyNTApO3JldHVybigpPT5jbGVhckludGVydmFsKGcpfSxbXSksVygoKT0+e2lmKFYuc3RhdHVzIT09InBsYXlpbmciKXJldHVybjtsZXQgZz0hMSxJPTAsTjE9bnVsbCxDMT1hc3luYygpPT57aWYoZ3x8TjEpcmV0dXJuO2xldCBLMT1EYXRlLm5vdygpO2lmKEsxLUk8VjgpcmV0dXJuO0k9SzE7bGV0ICQxPU4wKHkuY3VycmVudCxfLmN1cnJlbnQpLFgxPWB4Y3J1biBzaW1jdGwgbG9jYXRpb24gJHtDfSBzZXQgJHskMS5sYXQudG9GaXhlZCg3KX0sJHskMS5sbmcudG9GaXhlZCg3KX1gO04xPSQoWDEpLnRoZW4oKE8pPT57aWYoZylyZXR1cm47aWYoTy5leGl0Q29kZSE9PTApRChVOChPLnN0ZGVycil8fCJzaW1jdGwgbG9jYXRpb24gc2V0IGZhaWxlZCIpO2Vsc2UgRChudWxsKX0pLmNhdGNoKChPKT0+e2lmKCFnKUQoTyBpbnN0YW5jZW9mIEVycm9yP08ubWVzc2FnZTpTdHJpbmcoTykpfSkuZmluYWxseSgoKT0+e04xPW51bGx9KX07QzEoKTtsZXQgWjE9c2V0SW50ZXJ2YWwoQzEsVjgpO3JldHVybigpPT57Zz0hMCxjbGVhckludGVydmFsKFoxKX19LFtWLnN0YXR1cyxDLCRdKTtsZXQgZD1QKCgpPT57aWYoVS5jdXJyZW50PT09InBsYXlpbmciKXtVLmN1cnJlbnQ9InBhdXNlZCIsTCgoZyk9Pih7Li4uZyxzdGF0dXM6InBhdXNlZCJ9KSk7cmV0dXJufWlmKF8uY3VycmVudD49eS5jdXJyZW50LnRvdGFsRGlzdGFuY2UmJiF5LmN1cnJlbnQudHJhaWwubG9vcClfLmN1cnJlbnQ9MCxFLmN1cnJlbnQ9MDtpZihjLmN1cnJlbnQ9PW51bGwpe2xldCBnPU4wKHkuY3VycmVudCxfLmN1cnJlbnQpO2MuY3VycmVudD17bGF0OmcubGF0LGxuZzpnLmxuZ319VS5jdXJyZW50PSJwbGF5aW5nIixMKChnKT0+KHsuLi5nLHN0YXR1czoicGxheWluZyIsYXJjOl8uY3VycmVudCxlbGFwc2VkTXM6RS5jdXJyZW50fSkpfSxbXSksbz1QKCgpPT57VS5jdXJyZW50PSJpZGxlIixfLmN1cnJlbnQ9MCxFLmN1cnJlbnQ9MCxMKEo1KTtsZXQgZz1jLmN1cnJlbnQ7Yy5jdXJyZW50PW51bGw7bGV0IEk9Zz9geGNydW4gc2ltY3RsIGxvY2F0aW9uICR7Q30gc2V0ICR7Zy5sYXQudG9GaXhlZCg3KX0sJHtnLmxuZy50b0ZpeGVkKDcpfWA6YHhjcnVuIHNpbWN0bCBsb2NhdGlvbiAke0N9IGNsZWFyYDskKEkpLnRoZW4oKE4xKT0+e2lmKE4xLmV4aXRDb2RlIT09MClEKFU4KE4xLnN0ZGVycil8fG51bGwpO2Vsc2UgRChudWxsKX0pfSxbJCxDXSksUTE9UCgoZyk9PntOKGcpO2xldCBJPVowLmZpbmQoKE4xKT0+TjEuaWQ9PT1nKTtpZihJKXEoSS5tb2RlKX0sW10pO1coKCk9PigpPT57aWYoVS5jdXJyZW50PT09ImlkbGUiKXJldHVybjtsZXQgZz1jLmN1cnJlbnQsST1nP2B4Y3J1biBzaW1jdGwgbG9jYXRpb24gJHtDfSBzZXQgJHtnLmxhdC50b0ZpeGVkKDcpfSwke2cubG5nLnRvRml4ZWQoNyl9YDpgeGNydW4gc2ltY3RsIGxvY2F0aW9uICR7Q30gY2xlYXJgOyQoSSkuY2F0Y2goKCk9Pnt9KX0sWyQsQ10pO2xldCBuPVYuc3RhdHVzPT09InBsYXlpbmciLHM9bj9gJHtONShWLmFyYyl9IMK3ICR7azgoVi5lbGFwc2VkTXMpfWA6YCR7TjUoQi50b3RhbERpc3RhbmNlKX0gdG90YWxgO3JldHVybiBKKCJkaXYiLHtjbGFzc05hbWU6ImJnLXBhbmVsIGJvcmRlciBib3JkZXItd2hpdGUvOCByb3VuZGVkLVsxMHB4XSBmbGV4IGZsZXgtY29sIGdhcC0yLjUgcHgtMyBweS0yIixjaGlsZHJlbjpbSigic3R5bGUiLHtjaGlsZHJlbjpCNH0pLEooImJ1dHRvbiIse3R5cGU6ImJ1dHRvbiIsb25DbGljazooKT0+WCgoZyk9PiFnKSxjbGFzc05hbWU6ImxlbS10b2dnbGUgZ3JpZCBbZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOmF1dG9fMWZyX2F1dG9dIGl0ZW1zLWNlbnRlciBnYXAtMiBiZy10cmFuc3BhcmVudCBib3JkZXItbm9uZSB0ZXh0LXdoaXRlLzkwIHB5LTIuNSBweC0xIC1teS0yIC1teC0xIGN1cnNvci1wb2ludGVyIHctW2NhbGMoMTAwJSs4cHgpXSB0ZXh0LWxlZnQgbWluLWgtWzM2cHhdIGxlYWRpbmctbm9uZSIsImFyaWEtZXhwYW5kZWQiOkssY2hpbGRyZW46W0ooInNwYW4iLHtjbGFzc05hbWU6InRleHQtWzExcHhdIGZvbnQtc2VtaWJvbGQgdGV4dC13aGl0ZS81MCB1cHBlcmNhc2UgdHJhY2tpbmctWzAuMDhlbV0gbGVhZGluZy1ub25lIGlubGluZS1mbGV4IGl0ZW1zLWNlbnRlciIsY2hpbGRyZW46IkxvY2F0aW9uIn0pLEooInNwYW4iLHtjbGFzc05hbWU6InRleHQtWzExcHhdIHRleHQtd2hpdGUvNTUgZm9udC1tb25vIGlubGluZS1mbGV4IGl0ZW1zLWNlbnRlciBnYXAtMS41IGp1c3RpZnktc2VsZi1lbmQgbGVhZGluZy1ub25lIixjaGlsZHJlbjpbSigic3BhbiIse2NsYXNzTmFtZToic2l6ZS0xLjUgcm91bmRlZC1mdWxsIFt0cmFuc2l0aW9uOmJhY2tncm91bmRfMC4ycyxib3gtc2hhZG93XzAuMnNdIixzdHlsZTp7YmFja2dyb3VuZDpuPyIjNGFkZTgwIjpCLnRvdGFsRGlzdGFuY2U+MD8icmdiYSgyNTUsMjU1LDI1NSwwLjMpIjoidHJhbnNwYXJlbnQiLGJveFNoYWRvdzpuPyIwIDAgNnB4IHJnYmEoNzQsMjIyLDEyOCwwLjcpIjoibm9uZSJ9fSksc119KSxKKG8xLHtvcGVuOkt9KV19KSxLJiZKKHExLHtjaGlsZHJlbjpbSigiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGZsZXgtY29sIGdhcC0xIixjaGlsZHJlbjpbSigiZGl2Iix7Y2xhc3NOYW1lOiJyZWxhdGl2ZSBibG9jayIsY2hpbGRyZW46W0ooInNlbGVjdCIse3ZhbHVlOlEsb25DaGFuZ2U6KGcpPT5RMShnLnRhcmdldC52YWx1ZSksY2xhc3NOYW1lOiJsZW0tc2VsZWN0IGFwcGVhcmFuY2Utbm9uZSBbLXdlYmtpdC1hcHBlYXJhbmNlOm5vbmVdIGJnLXdoaXRlL1swLjA0XSBib3JkZXIgYm9yZGVyLXdoaXRlLzggcm91bmRlZC1tZCB0ZXh0LXdoaXRlLzkwIHRleHQtWzEycHhdIHB5LTEuNSBwci1bMjZweF0gcGwtMiBmb250LVtpbmhlcml0XSBjdXJzb3ItcG9pbnRlciB3LWZ1bGwgW3RyYW5zaXRpb246YmFja2dyb3VuZF8wLjEycyxib3JkZXItY29sb3JfMC4xMnNdIiwiYXJpYS1sYWJlbCI6IlRyYWlsIixjaGlsZHJlbjpaMC5tYXAoKGcpPT5KKCJvcHRpb24iLHt2YWx1ZTpnLmlkLGNoaWxkcmVuOmcubmFtZX0sZy5pZCkpfSksSigic3BhbiIse2NsYXNzTmFtZToiYWJzb2x1dGUgcmlnaHQtWzlweF0gdG9wLTEvMiAtdHJhbnNsYXRlLXktMS8yIHBvaW50ZXItZXZlbnRzLW5vbmUgZmxleCBpdGVtcy1jZW50ZXIiLCJhcmlhLWhpZGRlbiI6InRydWUiLGNoaWxkcmVuOkoobzEse29wZW46ITF9KX0pXX0pLEooImRpdiIse2NsYXNzTmFtZToidGV4dC1bMTBweF0gdGV4dC13aGl0ZS80NSIsY2hpbGRyZW46VC5kZXNjcmlwdGlvbn0pXX0pLEooImRpdiIse2NsYXNzTmFtZToicmVsYXRpdmUgdy1mdWxsIHJvdW5kZWQtWzEwcHhdIG92ZXJmbG93LWhpZGRlbiBiZy1bIzBhMGEwY10gYm9yZGVyIGJvcmRlci13aGl0ZS9bMC4wNl0gW2FzcGVjdC1yYXRpbzoxNi8xMV0iLGNoaWxkcmVuOltKKCJjYW52YXMiLHtyZWY6ZixjbGFzc05hbWU6InctZnVsbCBoLWZ1bGwgYmxvY2sifSksSihrNCx7cHJlcGFyZWQ6Qn0pXX0pLEooImRpdiIse2NsYXNzTmFtZToiZ3JpZCBbZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOjFmcl8xZnJfMWZyXSBnYXAtMS41IixjaGlsZHJlbjpbSihRNSx7bGFiZWw6IkRpc3RhbmNlIix2YWx1ZTpONShWLmFyYyl9KSxKKFE1LHtsYWJlbDoiUGFjZSIsdmFsdWU6TzQoTS5jdXJyZW50KX0pLEooUTUse2xhYmVsOiJFbGFwc2VkIix2YWx1ZTprOChWLmVsYXBzZWRNcyl9KV19KSxKKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggZ2FwLTEuNSIsY2hpbGRyZW46W0ooImJ1dHRvbiIse3R5cGU6ImJ1dHRvbiIsb25DbGljazpkLGNsYXNzTmFtZTpgZmxleC0xIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGdhcC0xLjUgcHktMiBweC0yLjUgYm9yZGVyLW5vbmUgcm91bmRlZC1bN3B4XSB0ZXh0LVsxMnB4XSBmb250LXNlbWlib2xkIGN1cnNvci1wb2ludGVyIGZvbnQtW2luaGVyaXRdICR7bj8ibGVtLXByaW1hcnkgbGVtLXByaW1hcnktb24gYmctd2hpdGUvWzAuMTZdIHRleHQtd2hpdGUiOiJsZW0tcHJpbWFyeSBiZy1zdWNjZXNzLWVtZXJhbGQgdGV4dC1bIzA2MjAxOF0ifWAsImFyaWEtcHJlc3NlZCI6bix0aXRsZTpuPyJQYXVzZSI6IlBsYXkiLGNoaWxkcmVuOltuP0ooZjIse30pOkoodjAse30pLEooInNwYW4iLHtjaGlsZHJlbjpuPyJQYXVzZSI6IlBsYXkifSldfSksSigiYnV0dG9uIix7dHlwZToiYnV0dG9uIixvbkNsaWNrOm8sY2xhc3NOYW1lOiJsZW0tZ2hvc3QgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgZ2FwLTEuNSBweS0yIHB4LTMgYm9yZGVyIGJvcmRlci13aGl0ZS8xMiByb3VuZGVkLVs3cHhdIHRleHQtWzEycHhdIGZvbnQtbWVkaXVtIGJnLXRyYW5zcGFyZW50IHRleHQtd2hpdGUvODUgY3Vyc29yLXBvaW50ZXIgZm9udC1baW5oZXJpdF0iLGRpc2FibGVkOlYuc3RhdHVzPT09ImlkbGUiJiZWLmFyYz09PTAsdGl0bGU6IlN0b3AgYW5kIGNsZWFyIHNpbXVsYXRlZCBsb2NhdGlvbiIsY2hpbGRyZW46W0ooZzAse30pLEooInNwYW4iLHtjaGlsZHJlbjoiU3RvcCJ9KV19KV19KSxKKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggZmxleC1yb3cgaXRlbXMtc3RyZXRjaCBnYXAtMS41IixjaGlsZHJlbjpbSigiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4LTEgbWluLXctMCIsY2hpbGRyZW46SihfNCx7YXJpYUxhYmVsOiJUcmFuc3BvcnQgbW9kZSIsdmFsdWU6WixvbkNoYW5nZTooZyk9PnEoZyksb3B0aW9uczpbe3ZhbHVlOiJ3YWxrIixsYWJlbDoiV2FsayIsaWNvbjpKKHUyLHt9KX0se3ZhbHVlOiJydW4iLGxhYmVsOiJSdW4iLGljb246SihvMix7fSl9LHt2YWx1ZToiY3ljbGUiLGxhYmVsOiJDeWNsZSIsaWNvbjpKKGQyLHt9KX0se3ZhbHVlOiJkcml2ZSIsbGFiZWw6IkRyaXZlIixpY29uOkooYzIse30pfV19KX0pLEooImJ1dHRvbiIse3R5cGU6ImJ1dHRvbiIsb25DbGljazooKT0+e2xldCBnPVg1LmluZGV4T2YoRyksST1YNVsoZysxKSVYNS5sZW5ndGhdO1koSSl9LGNsYXNzTmFtZTpgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgZ2FwLTEgcHgtMi41IGJvcmRlciByb3VuZGVkLVs3cHhdIGN1cnNvci1wb2ludGVyIGZvbnQtW2luaGVyaXRdIHRleHQtWzExcHhdIGZvbnQtc2VtaWJvbGQgbWluLXctWzU2cHhdICR7Rz4xPyJsZW0tc3BlZWQgbGVtLXNwZWVkLW9uIGJnLXdoaXRlIGJvcmRlci13aGl0ZSB0ZXh0LVsjMGEwYTBjXSI6ImxlbS1zcGVlZCBiZy13aGl0ZS9bMC4wNF0gYm9yZGVyLXdoaXRlLzggdGV4dC13aGl0ZS84NSJ9YCwiYXJpYS1sYWJlbCI6YFNwZWVkICR7R33DlyDigJQgdGFwIHRvIGN5Y2xlYCx0aXRsZTpgU3BlZWQgJHtHfcOXIOKAlCB0YXAgdG8gY3ljbGVgLGNoaWxkcmVuOltKKGwyLHt9KSxHPjEmJkooInNwYW4iLHtjbGFzc05hbWU6ImZvbnQtbW9ubyBbZm9udC12YXJpYW50LW51bWVyaWM6dGFidWxhci1udW1zXSIsY2hpbGRyZW46W0csIsOXIl19KV19KV19KSxrJiZKKCJkaXYiLHtjbGFzc05hbWU6ImJnLWRhbmdlci8xMCBib3JkZXIgYm9yZGVyLWRhbmdlci8yMCB0ZXh0LWRhbmdlci1zb2Z0IHRleHQtWzExcHhdIHB4LTIgcHktMS41IHJvdW5kZWQtbWQiLGNoaWxkcmVuOmt9KV19KV19KX12YXIgUTU9azAoZnVuY3Rpb24oe2xhYmVsOiQsdmFsdWU6S30pe3JldHVybiBKKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggZmxleC1jb2wgZ2FwLTAuNSBiZy13aGl0ZS9bMC4wM10gYm9yZGVyIGJvcmRlci13aGl0ZS9bMC4wNl0gcm91bmRlZC1tZCBweS1bNXB4XSBweC1bN3B4XSBtaW4tdy0wIixjaGlsZHJlbjpbSigiZGl2Iix7Y2xhc3NOYW1lOiJ0ZXh0LVs5cHhdIHVwcGVyY2FzZSB0cmFja2luZy1bMC4wNmVtXSB0ZXh0LXdoaXRlLzQ1IixjaGlsZHJlbjokfSksSigiZGl2Iix7Y2xhc3NOYW1lOiJ0ZXh0LVsxMnB4XSBmb250LW1vbm8gdGV4dC13aGl0ZSBvdmVyZmxvdy1oaWRkZW4gdGV4dC1lbGxpcHNpcyB3aGl0ZXNwYWNlLW5vd3JhcCIsY2hpbGRyZW46S30pXX0pfSk7ZnVuY3Rpb24gXzQoe3ZhbHVlOkMsb25DaGFuZ2U6JCxvcHRpb25zOkssYXJpYUxhYmVsOlh9KXtyZXR1cm4gSigiZGl2Iix7cm9sZToiZ3JvdXAiLCJhcmlhLWxhYmVsIjpYLGNsYXNzTmFtZToiZmxleCBiZy13aGl0ZS9bMC4wNF0gYm9yZGVyIGJvcmRlci13aGl0ZS84IHJvdW5kZWQtWzdweF0gcC0wLjUgZ2FwLTAuNSIsY2hpbGRyZW46Sy5tYXAoKFEpPT57bGV0IE49US52YWx1ZT09PUM7cmV0dXJuIEooImJ1dHRvbiIse3R5cGU6ImJ1dHRvbiIsb25DbGljazooKT0+JChRLnZhbHVlKSxjbGFzc05hbWU6YGZsZXgtMSBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBib3JkZXItbm9uZSByb3VuZGVkLVs1cHhdIHB5LVs1cHhdIHB4LTIgdGV4dC1bMTFweF0gZm9udC1tZWRpdW0gY3Vyc29yLXBvaW50ZXIgZm9udC1baW5oZXJpdF0gW3RyYW5zaXRpb246YmFja2dyb3VuZF8wLjEycyxjb2xvcl8wLjEyc10gbWluLWgtWzIycHhdICR7Tj8ibGVtLXNlZyBsZW0tc2VnLWFjdGl2ZSBiZy13aGl0ZS9bMC4xMl0gdGV4dC13aGl0ZSI6ImxlbS1zZWcgYmctdHJhbnNwYXJlbnQgdGV4dC13aGl0ZS82MCJ9YCwiYXJpYS1wcmVzc2VkIjpOLCJhcmlhLWxhYmVsIjpRLmljb24/US5sYWJlbDp2b2lkIDAsdGl0bGU6US5pY29uP1EubGFiZWw6dm9pZCAwLGNoaWxkcmVuOlEuaWNvbj8/US5sYWJlbH0sUS52YWx1ZSl9KX0pfWZ1bmN0aW9uIGs0KHtwcmVwYXJlZDpDfSl7aWYoQy5yYXdNYXhBbHQtQy5yYXdNaW5BbHQ8NSlyZXR1cm4gbnVsbDtyZXR1cm4gSihxMSx7Y2hpbGRyZW46W0ooImRpdiIse2NsYXNzTmFtZToiYWJzb2x1dGUgdG9wLTIgbGVmdC0yLjUgYmctcGFuZWwtb3ZlcmxheSB0ZXh0LXdoaXRlLzg1IHRleHQtWzEwcHhdIGZvbnQtbW9ubyBweC0xLjUgcHktMC41IHJvdW5kZWQtWzVweF0gZmxleCBpdGVtcy1jZW50ZXIgdHJhY2tpbmctWzAuMDJlbV0gYm9yZGVyIGJvcmRlci13aGl0ZS9bMC4wNl0iLGNoaWxkcmVuOltKKFoyLHtkaXI6InVwIn0pLCIgIixEOChDLnJhd01heEFsdCldfSksSigiZGl2Iix7Y2xhc3NOYW1lOiJhYnNvbHV0ZSB0b3AtMiByaWdodC0yLjUgYmctcGFuZWwtb3ZlcmxheSB0ZXh0LXdoaXRlLzg1IHRleHQtWzEwcHhdIGZvbnQtbW9ubyBweC0xLjUgcHktMC41IHJvdW5kZWQtWzVweF0gZmxleCBpdGVtcy1jZW50ZXIgdHJhY2tpbmctWzAuMDJlbV0gYm9yZGVyIGJvcmRlci13aGl0ZS9bMC4wNl0iLGNoaWxkcmVuOltKKFoyLHtkaXI6ImRvd24ifSksIiAiLEQ4KEMucmF3TWluQWx0KV19KV19KX12YXIgQjg9MTQwO2Z1bmN0aW9uIF84KEMsJCl7bGV0IEs9QXJyYXkoJCk7Zm9yKGxldCBYPTA7WDwkO1grKyl7bGV0IFE9JD09PTE/MDpYLygkLTEpLE49TjAoQyxRKkMudG90YWxEaXN0YW5jZSk7S1tYXT17eDpOLngseTpOLnksejpOLnp9fXJldHVybiBLfWZ1bmN0aW9uIEQ0KEMsJCxLLFgpe2xldCBRPShDLmJvdW5kcy54WzBdK0MuYm91bmRzLnhbMV0pLzIsTj0oQy5ib3VuZHMuelswXStDLmJvdW5kcy56WzFdKS8yLFo9Qy5ib3VuZHMueVswXSxxPU1hdGgubWF4KDEsQy5ib3VuZHMueFsxXS1DLmJvdW5kcy54WzBdLEMuYm91bmRzLnpbMV0tQy5ib3VuZHMuelswXSksRz0oSy5ib3VuZHMueFswXStLLmJvdW5kcy54WzFdKS8yLFk9KEsuYm91bmRzLnpbMF0rSy5ib3VuZHMuelsxXSkvMixWPUsuYm91bmRzLnlbMF0saz1NYXRoLm1heCgxLEsuYm91bmRzLnhbMV0tSy5ib3VuZHMueFswXSxLLmJvdW5kcy56WzFdLUsuYm91bmRzLnpbMF0pL3EsVD1fOChDLEI4KS5tYXAoKFIpPT4oe3g6KFIueC1RKSprK0cseTooUi55LVopKmsrVix6OihSLnotTikqaytZfSkpLEI9XzgoSyxCOCksXz0oQy50cmFpbC5sb29wfHxLLnRyYWlsLmxvb3ApPz8hMSxVPVU0KFQsQixfKSxNPU4wKEMsJCksRT17eDooTS54LVEpKmsrRyx5OihNLnktWikqaytWLHo6KE0uei1OKSprK1l9LHk9TjAoSywwKSxjPXt4OnkueCx5OnkueSx6Onkuen07cmV0dXJue2Zyb206Qyx0bzpLLGZyb21QdHM6VCx0b1B0czpVLHByZXZNYXJrZXI6RSxuZXh0TWFya2VyOmMsc3RhcnRNczpYfX1mdW5jdGlvbiBVNChDLCQsSyl7bGV0IFg9Qy5sZW5ndGgsUT0xLzAsTj0wLFo9ITEscT1bJCxbLi4uJF0ucmV2ZXJzZSgpXTtmb3IobGV0IFY9MDtWPHEubGVuZ3RoO1YrKyl7bGV0IEw9cVtWXSxrPUs/WDoxO2ZvcihsZXQgRD0wO0Q8aztEKyspe2xldCBUPTA7Zm9yKGxldCBCPTA7QjxYO0IrKyl7bGV0IF89Q1tCXSxVPUxbKEIrRCklWF0sTT1fLngtVS54LEU9Xy55LVUueSx5PV8uei1VLno7aWYoVCs9TSpNK0UqRSt5KnksVD49USlicmVha31pZihUPFEpUT1ULE49RCxaPVY9PT0xfX1sZXQgRz1aP1suLi4kXS5yZXZlcnNlKCk6JCxZPUFycmF5KFgpO2ZvcihsZXQgVj0wO1Y8WDtWKyspWVtWXT1HWyhWK04pJVhdO3JldHVybiBZfWZ1bmN0aW9uIEY0KEMsJCl7bGV0IEs9Qy5mcm9tUHRzLmxlbmd0aCxYPUFycmF5KEspLFE9MCxOPW51bGwsWj0xLzAscT0tMS8wLEc9MS8wLFk9LTEvMCxWPTEvMCxMPS0xLzA7Zm9yKGxldCBrPTA7azxLO2srKyl7bGV0IEQ9Qy5mcm9tUHRzW2tdLFQ9Qy50b1B0c1trXSxCPUQueCsoVC54LUQueCkqJCxfPUQueSsoVC55LUQueSkqJCxVPUQueisoVC56LUQueikqJDtpZihOKXtsZXQgRT1CLU4ueCx5PV8tTi55LGM9VS1OLno7USs9TWF0aC5zcXJ0KEUqRSt5KnkrYypjKX1sZXQgTT17eDpCLHk6Xyx6OlUsYXJjOlEsbGF0OjAsbG5nOjB9O2lmKFhba109TSxOPU0sQjxaKVo9QjtpZihCPnEpcT1CO2lmKF88RylHPV87aWYoXz5ZKVk9XztpZihVPFYpVj1VO2lmKFU+TClMPVV9cmV0dXJue3RyYWlsOkMudG8udHJhaWwsb3JpZ2luOkMudG8ub3JpZ2luLHBvaW50czpYLHRvdGFsRGlzdGFuY2U6USxib3VuZHM6e3g6W1oscV0seTpbRyxZXSx6OltWLExdfSxyYXdNaW5BbHQ6Qy50by5yYXdNaW5BbHQrKEMuZnJvbS5yYXdNaW5BbHQtQy50by5yYXdNaW5BbHQpKigxLSQpLHJhd01heEFsdDpDLnRvLnJhd01heEFsdCsoQy5mcm9tLnJhd01heEFsdC1DLnRvLnJhd01heEFsdCkqKDEtJCl9fWZ1bmN0aW9uIHo0KEMpe3JldHVybiBDPDAuNT8yKkMqQzoxLU1hdGgucG93KC0yKkMrMiwyKS8yfWZ1bmN0aW9uIEg0KEMsJCxLLFgsUSxOLFope2xldCBxPUMuZ2V0Q29udGV4dCgiMmQiKTtpZighcSlyZXR1cm47bGV0e2NsaWVudFdpZHRoOkcsY2xpZW50SGVpZ2h0Oll9PUM7aWYoRz09PTB8fFk9PT0wKXJldHVybjtsZXQgVj10eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3cuZGV2aWNlUGl4ZWxSYXRpb3x8MToxLEw9TWF0aC5yb3VuZChHKlYpLGs9TWF0aC5yb3VuZChZKlYpO2lmKEMud2lkdGghPT1MfHxDLmhlaWdodCE9PWspQy53aWR0aD1MLEMuaGVpZ2h0PWs7cS5zZXRUcmFuc2Zvcm0oViwwLDAsViwwLDApLHEuY2xlYXJSZWN0KDAsMCxHLFkpO2xldCBEPXEuY3JlYXRlUmFkaWFsR3JhZGllbnQoRyowLjUsWSowLjU1LE1hdGgubWluKEcsWSkqMC4yLEcqMC41LFkqMC41NSxNYXRoLm1heChHLFkpKjAuODUpO0QuYWRkQ29sb3JTdG9wKDAsIiMxYTFhMWQiKSxELmFkZENvbG9yU3RvcCgxLCIjMGEwYTBjIikscS5maWxsU3R5bGU9RCxxLmZpbGxSZWN0KDAsMCxHLFkpLEE0KHEsRyxZKTtsZXR7cG9pbnRzOlQsYm91bmRzOkJ9PSQ7aWYoVC5sZW5ndGg8MilyZXR1cm47bGV0IF89MjgqTWF0aC5QSS8xODAsVT1NYXRoLnNpbihfKSxNPU1hdGguY29zKF8pLEU9TWF0aC5zaW4oWCkseT1NYXRoLmNvcyhYKSxjPShCLnhbMF0rQi54WzFdKS8yLFI9KEIuelswXStCLnpbMV0pLzIsUz1CLnhbMV0tQi54WzBdLHg9Qi56WzFdLUIuelswXSxmPUIueVsxXS1CLnlbMF0sZD1NYXRoLm1heChTLHgpKjEuMDUsbz1NYXRoLm1heCh4Kk0rZipVLFMqMC40KSoxLjE1LFExPUcqMC4wOCxuPVkqMC4xOCxzPU1hdGgubWluKChHLVExKjIpL2QsKFktbioyKS9vKSoxLjQ1LGc9ZjwxPzE6TWF0aC5taW4oMjQsMTQwL01hdGgubWF4KDIwLGYpKSxJPShPLGgsaik9PntsZXQgaT1PLWMsZT1qLVIsVTE9aSp5K2UqRSxMMT0taSpFK2UqeSxPMT1oKmcseTE9TzEqTS1MMSpVLF8xPU8xKlUrTDEqTTtyZXR1cm57c3g6Ry8yK1UxKnMsc3k6WSowLjU1LXkxKnMsZGVwdGg6XzF9fSxOMT0zOCxDMT1ULm1hcCgoTyk9PntsZXQgaD1JKE8ueCxPLnksTy56KSxqPUkoTy54LDAsTy56KSxpPXtzeDpoLnN4LHN5Ok1hdGgubWF4KGouc3ksaC5zeStOMSksZGVwdGg6ai5kZXB0aH07cmV0dXJue3A6Tyx0b3A6aCxib3Q6aX19KTtmb3IobGV0IE89MTtPPEMxLmxlbmd0aDtPKyspe2xldCBoPUMxW08tMV0saj1DMVtPXSxpPXEuY3JlYXRlTGluZWFyR3JhZGllbnQoKGgudG9wLnN4K2oudG9wLnN4KS8yLChoLnRvcC5zeStqLnRvcC5zeSkvMiwoaC5ib3Quc3grai5ib3Quc3gpLzIsKGguYm90LnN5K2ouYm90LnN5KS8yKTtpLmFkZENvbG9yU3RvcCgwLCJyZ2JhKDI1NSwyNTUsMjU1LDAuNTUpIiksaS5hZGRDb2xvclN0b3AoMC40NSwicmdiYSgxODAsMTgwLDE4NSwwLjI4KSIpLGkuYWRkQ29sb3JTdG9wKDAuODUsInJnYmEoNDAsNDAsNDUsMC4xOCkiKSxpLmFkZENvbG9yU3RvcCgxLCJyZ2JhKDAsMCwwLDApIikscS5maWxsU3R5bGU9aSxxLmJlZ2luUGF0aCgpLHEubW92ZVRvKGgudG9wLnN4LGgudG9wLnN5KSxxLmxpbmVUbyhqLnRvcC5zeCxqLnRvcC5zeSkscS5saW5lVG8oai5ib3Quc3gsai5ib3Quc3kpLHEubGluZVRvKGguYm90LnN4LGguYm90LnN5KSxxLmNsb3NlUGF0aCgpLHEuZmlsbCgpfXEuc3Ryb2tlU3R5bGU9IiNmZmZmZmYiLHEubGluZVdpZHRoPTEuNixxLmxpbmVDYXA9InJvdW5kIixxLmxpbmVKb2luPSJyb3VuZCIscS5iZWdpblBhdGgoKTtmb3IobGV0IE89MDtPPEMxLmxlbmd0aDtPKyspe2xldHt0b3A6aH09QzFbT107aWYoTz09PTApcS5tb3ZlVG8oaC5zeCxoLnN5KTtlbHNlIHEubGluZVRvKGguc3gsaC5zeSl9cS5zdHJva2UoKTtsZXQgWjE9SztxLnN0cm9rZVN0eWxlPSIjZjlkMmE0IixxLmxpbmVXaWR0aD0yLjIscS5iZWdpblBhdGgoKTtsZXQgSzE9ITE7Zm9yKGxldCBPPTA7TzxDMS5sZW5ndGg7TysrKXtsZXR7cDpoLHRvcDpqfT1DMVtPXTtpZihoLmFyYz5aMSlicmVhaztpZighSzEpcS5tb3ZlVG8oai5zeCxqLnN5KSxLMT0hMDtlbHNlIHEubGluZVRvKGouc3gsai5zeSl9aWYoSzEpcS5zdHJva2UoKTtsZXQgJDE9Wj8/TjAoJCxLKSxYMT1JKCQxLngsJDEueSwkMS56KTtpZihOKXtsZXQgaj1RJTI2MDAvMjYwMCxpPTQrMjIqaixlPTAuMjIqKDEtaiksVTE9cS5jcmVhdGVSYWRpYWxHcmFkaWVudChYMS5zeCxYMS5zeSxpKjAuNSxYMS5zeCxYMS5zeSxpKTtVMS5hZGRDb2xvclN0b3AoMCwicmdiYSgyNTUsMjU1LDI1NSwwKSIpLFUxLmFkZENvbG9yU3RvcCgwLjcsYHJnYmEoMjU1LDI1NSwyNTUsJHtlLnRvRml4ZWQoMyl9KWApLFUxLmFkZENvbG9yU3RvcCgxLCJyZ2JhKDI1NSwyNTUsMjU1LDApIikscS5maWxsU3R5bGU9VTEscS5iZWdpblBhdGgoKSxxLmFyYyhYMS5zeCxYMS5zeSxpLDAsTWF0aC5QSSoyKSxxLmZpbGwoKX1xLmZpbGxTdHlsZT0iI2ZmZiIscS5iZWdpblBhdGgoKSxxLmFyYyhYMS5zeCxYMS5zeSwzLjgsMCxNYXRoLlBJKjIpLHEuZmlsbCgpfWZ1bmN0aW9uIEE0KEMsJCxLKXtDLmZpbGxTdHlsZT0icmdiYSgyNTUsMjU1LDI1NSwwLjA2KSI7Zm9yKGxldCBOPTc7TjxLO04rPTE0KWZvcihsZXQgWj03O1o8JDtaKz0xNClDLmJlZ2luUGF0aCgpLEMuYXJjKFosTiwwLjcsMCxNYXRoLlBJKjIpLEMuZmlsbCgpfWZ1bmN0aW9uIE41KEMpe2lmKEM8MTAwMClyZXR1cm5gJHtDLnRvRml4ZWQoMCl9IG1gO3JldHVybmAkeyhDLzEwMDApLnRvRml4ZWQoMil9IGttYH1mdW5jdGlvbiBrOChDKXtsZXQgJD1NYXRoLmZsb29yKEMvMTAwMCksSz1NYXRoLmZsb29yKCQvMzYwMCksWD1NYXRoLmZsb29yKCQlMzYwMC82MCksUT0kJTYwO2lmKEs+MClyZXR1cm5gJHtLfToke1gudG9TdHJpbmcoKS5wYWRTdGFydCgyLCIwIil9OiR7US50b1N0cmluZygpLnBhZFN0YXJ0KDIsIjAiKX1gO3JldHVybmAke1h9OiR7US50b1N0cmluZygpLnBhZFN0YXJ0KDIsIjAiKX1gfWZ1bmN0aW9uIE80KEMpe2lmKEM8PTApcmV0dXJuIuKAlCI7aWYoQz43KXJldHVybmAkeyhDKjMuNikudG9GaXhlZCgwKX0ga20vaGA7bGV0ICQ9MTAwMC9DLEs9TWF0aC5mbG9vcigkLzYwKSxYPU1hdGgucm91bmQoJCU2MCk7cmV0dXJuYCR7S306JHtYLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwiMCIpfS9rbWB9ZnVuY3Rpb24gRDgoQyl7cmV0dXJuYCR7Qy50b0ZpeGVkKDApfSBtYH1mdW5jdGlvbiBVOChDKXtsZXQgJD1DLnRyaW0oKTtpZighJClyZXR1cm4iIjtsZXQgSz0kLm1hdGNoKC9SZWFzb246XHMqKC4rKSQvbSk7aWYoSylyZXR1cm4gS1sxXTtyZXR1cm4gJC5zcGxpdChgCmApLnNsaWNlKC0xKVswXT8/JH1hc3luYyBmdW5jdGlvbiBWMShDKXtsZXQgJD13aW5kb3cuX19TSU1fUFJFVklFV19fPy5leGVjVG9rZW4sSz17IkNvbnRlbnQtVHlwZSI6ImFwcGxpY2F0aW9uL2pzb24ifTtpZigkKUsuQXV0aG9yaXphdGlvbj1gQmVhcmVyICR7JH1gO3JldHVybihhd2FpdCBmZXRjaChnMSgiZXhlYyIpLHttZXRob2Q6IlBPU1QiLGhlYWRlcnM6Syxib2R5OkpTT04uc3RyaW5naWZ5KHtjb21tYW5kOkN9KX0pKS5qc29uKCl9ZnVuY3Rpb24gSDEoQyl7cmV0dXJuYCcke0MucmVwbGFjZSgvJy9nLCInXFwnJyIpfSdgfWFzeW5jIGZ1bmN0aW9uIFo1KEMsJCxLKXtsZXQgWD1hd2FpdCBDKGB4Y3J1biBzaW1jdGwgZ2V0X2FwcF9jb250YWluZXIgJHskfSAke0gxKEspfSBhcHBgKTtpZihYLmV4aXRDb2RlIT09MClyZXR1cm57ZXJyb3I6WC5zdGRlcnIudHJpbSgpfHwiQXBwIG5vdCBmb3VuZCBvbiBzaW11bGF0b3IifTtsZXQgUT1YLnN0ZG91dC50cmltKCk7aWYoIVEpcmV0dXJue2Vycm9yOiJFbXB0eSBhcHAgcGF0aCJ9O2xldCBOPWF3YWl0IEMoYHBsdXRpbCAtY29udmVydCBqc29uIC1vIC0gJHtIMShRKyIvSW5mby5wbGlzdCIpfWApLFo9e307aWYoTi5leGl0Q29kZT09PTApdHJ5e1o9SlNPTi5wYXJzZShOLnN0ZG91dCl9Y2F0Y2h7fWxldCBxLFk9KFo/LkNGQnVuZGxlSWNvbnM/LkNGQnVuZGxlUHJpbWFyeUljb24/P1o/LlsiQ0ZCdW5kbGVJY29uc35pcGFkIl0/LkNGQnVuZGxlUHJpbWFyeUljb24pPy5DRkJ1bmRsZUljb25GaWxlcz8/Wj8uQ0ZCdW5kbGVJY29uRmlsZXM7aWYoWSYmWS5sZW5ndGg+MClxPVlbWS5sZW5ndGgtMV07ZWxzZSBpZih0eXBlb2YgWj8uQ0ZCdW5kbGVJY29uRmlsZT09PSJzdHJpbmciKXE9Wi5DRkJ1bmRsZUljb25GaWxlO2xldCBWPW51bGw7aWYocSl7bGV0IEw9W2Ake3F9QDN4LnBuZ2AsYCR7cX1AMngucG5nYCxgJHtxfS5wbmdgLGAke3F9NjB4NjBAM3gucG5nYCxgJHtxfTYweDYwQDJ4LnBuZ2BdLEQ9KGF3YWl0IEMoYGJhc2ggLWMgJHtIMShMLm1hcCgoVCk9PmBbIC1mICR7SDEoUSsiLyIrVCl9IF0gJiYgZWNobyAke0gxKFErIi8iK1QpfSAmJiBleGl0IDBgKS5qb2luKCI7ICIpKyI7IGV4aXQgMSIpfWApKS5zdGRvdXQudHJpbSgpO2lmKEQpe2xldCBUPWF3YWl0IEMoYGJhc2U2NCAtaSAke0gxKEQpfWApO2lmKFQuZXhpdENvZGU9PT0wKVY9YGRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCwke1Quc3Rkb3V0LnJlcGxhY2UoL1xzKy9nLCIiKX1gfX1yZXR1cm57YXBwUGF0aDpRLGRpc3BsYXlOYW1lOlouQ0ZCdW5kbGVEaXNwbGF5TmFtZT8/Wi5DRkJ1bmRsZU5hbWUsc2hvcnRWZXJzaW9uOlouQ0ZCdW5kbGVTaG9ydFZlcnNpb25TdHJpbmcsYnVuZGxlVmVyc2lvbjpaLkNGQnVuZGxlVmVyc2lvbixtaW5PUzpaLk1pbmltdW1PU1ZlcnNpb24sZXhlY3V0YWJsZTpaLkNGQnVuZGxlRXhlY3V0YWJsZSxpY29uRGF0YVVybDpWfX12YXIgYjA9bmV3IE1hcDtmdW5jdGlvbiB6OChDLCQsSyl7bGV0IFg9YCR7JH06JHtLfWAsUT1iMC5nZXQoWCk7aWYoUSE9PXZvaWQgMClyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFEpO2xldCBOPVo1KEMsJCxLKS50aGVuKChaKT0+e2xldCBxPVouaWNvbkRhdGFVcmw/P251bGw7cmV0dXJuIGIwLnNldChYLHEpLHF9KS5jYXRjaCgoKT0+e3JldHVybiBiMC5zZXQoWCxudWxsKSxudWxsfSk7cmV0dXJuIGIwLnNldChYLE4pLE59ZnVuY3Rpb24gSDgoe3VkaWQ6QyxjdXJyZW50QXBwOiR9KXtsZXRbSyxYXT1BKG51bGwpLFtRLE5dPUEoITEpO2lmKFcoKCk9PntpZighJCl7WChudWxsKTtyZXR1cm59bGV0IFo9ITE7cmV0dXJuIFgoe2J1bmRsZUlkOiQuYnVuZGxlSWQsaXNSZWFjdE5hdGl2ZTokLmlzUmVhY3ROYXRpdmUscGlkOiQucGlkLGxvYWRpbmc6ITB9KSxaNShWMSxDLCQuYnVuZGxlSWQpLnRoZW4oKHEpPT57aWYoWilyZXR1cm47WCh7YnVuZGxlSWQ6JC5idW5kbGVJZCxpc1JlYWN0TmF0aXZlOiQuaXNSZWFjdE5hdGl2ZSxwaWQ6JC5waWQsbG9hZGluZzohMSwuLi5xfSl9KSwoKT0+e1o9ITB9fSxbQywkLCQ/LmJ1bmRsZUlkLCQ/LnBpZCwkPy5pc1JlYWN0TmF0aXZlXSksIUspcmV0dXJuIEooImRpdiIse2NsYXNzTmFtZToiYmctcGFuZWwgYm9yZGVyIGJvcmRlci1kYXNoZWQgYm9yZGVyLXdoaXRlLzEwIHJvdW5kZWQtWzEwcHhdIHAtNCB0ZXh0LXdoaXRlLzUwIHRleHQtWzEycHhdIHRleHQtY2VudGVyIixjaGlsZHJlbjoiV2FpdGluZyBmb3IgYW4gYXBwIHRvIGNvbWUgdG8gdGhlIGZvcmVncm91bmTigKYifSk7cmV0dXJuIEooImRpdiIse2NsYXNzTmFtZToiYmctcGFuZWwgYm9yZGVyIGJvcmRlci13aGl0ZS84IHJvdW5kZWQtWzEwcHhdIGZsZXggZmxleC1jb2wgZ2FwLTIuNSBweC0zIHB5LTIiLGNoaWxkcmVuOltKKCJidXR0b24iLHt0eXBlOiJidXR0b24iLG9uQ2xpY2s6KCk9Pk4oKFopPT4hWiksY2xhc3NOYW1lOiJsZW0tdG9nZ2xlIGZsZXggaXRlbXMtY2VudGVyIGdhcC0zIGJnLXRyYW5zcGFyZW50IGJvcmRlci1ub25lIHRleHQtd2hpdGUvOTAgcHktMiBweC0xIC1teS0yIC1teC0xIGN1cnNvci1wb2ludGVyIHctW2NhbGMoMTAwJSs4cHgpXSB0ZXh0LWxlZnQgbWluLWgtWzM2cHhdIiwiYXJpYS1leHBhbmRlZCI6USxjaGlsZHJlbjpbSy5pY29uRGF0YVVybD9KKCJpbWciLHtzcmM6Sy5pY29uRGF0YVVybCxjbGFzc05hbWU6InctMTAgaC0xMCByb3VuZGVkLVs4cHhdIHNocmluay0wIG9iamVjdC1jb3ZlciBib3JkZXIgYm9yZGVyLXdoaXRlLzgiLGFsdDoiIn0pOkooImRpdiIse2NsYXNzTmFtZToidy0xMCBoLTEwIHJvdW5kZWQtWzhweF0gc2hyaW5rLTAgYm9yZGVyIGJvcmRlci13aGl0ZS84IGJnLXdoaXRlL1swLjA0XSJ9KSxKKCJkaXYiLHtjbGFzc05hbWU6Im1pbi13LTAgZmxleC0xIGxlYWRpbmctdGlnaHQiLGNoaWxkcmVuOltKKCJkaXYiLHtjbGFzc05hbWU6InRleHQtWzEzcHhdIGZvbnQtc2VtaWJvbGQgdGV4dC13aGl0ZS85MCB0cnVuY2F0ZSIsY2hpbGRyZW46W0suZGlzcGxheU5hbWU/P0suYnVuZGxlSWQsSy5sb2FkaW5nJiZKKCJzcGFuIix7Y2xhc3NOYW1lOiJ0ZXh0LXdoaXRlLzQ1IGZvbnQtbm9ybWFsIixjaGlsZHJlbjoiIOKApiJ9KV19KSxKKCJkaXYiLHtjbGFzc05hbWU6InRleHQtWzExcHhdIHRleHQtd2hpdGUvNTUgZm9udC1tb25vIHRydW5jYXRlIix0aXRsZTpLLmJ1bmRsZUlkLGNoaWxkcmVuOksuYnVuZGxlSWR9KV19KSxKKG8xLHtvcGVuOlF9KV19KSxRJiZKKHExLHtjaGlsZHJlbjpbSy5lcnJvciYmSigiZGl2Iix7Y2xhc3NOYW1lOiJiZy1kYW5nZXIvMTAgYm9yZGVyIGJvcmRlci1kYW5nZXIvMjAgdGV4dC1kYW5nZXItc29mdCB0ZXh0LVsxMXB4XSBweC0yIHB5LTEuNSByb3VuZGVkLW1kIixjaGlsZHJlbjpLLmVycm9yfSksSigiZGwiLHtjbGFzc05hbWU6Im0tMCBmbGV4IGZsZXgtY29sIGdhcC0xLjUiLGNoaWxkcmVuOltKKFAwLHtsYWJlbDoiVmVyc2lvbiIsdmFsdWU6Sy5zaG9ydFZlcnNpb24/YCR7Sy5zaG9ydFZlcnNpb259ICgke0suYnVuZGxlVmVyc2lvbj8/IuKAlCJ9KWA6Sy5sb2FkaW5nPyLigKYiOiLigJQifSksSihQMCx7bGFiZWw6Ik1pbiBpT1MiLHZhbHVlOksubWluT1M/PyhLLmxvYWRpbmc/IuKApiI6IuKAlCIpfSksSihQMCx7bGFiZWw6IkV4ZWN1dGFibGUiLHZhbHVlOksuZXhlY3V0YWJsZT8/KEsubG9hZGluZz8i4oCmIjoi4oCUIil9KSxKKFAwLHtsYWJlbDoiUElEIix2YWx1ZTpLLnBpZCE9bnVsbD9TdHJpbmcoSy5waWQpOiLigJQifSksSy5pc1JlYWN0TmF0aXZlJiZKKFAwLHtsYWJlbDoiUmVhY3QgTmF0aXZlIix2YWx1ZToiWWVzIn0pLEooUDAse2xhYmVsOiJBcHAgcGF0aCIsdmFsdWU6Sy5hcHBQYXRoPz8oSy5sb2FkaW5nPyLigKYiOiLigJQiKSxtb25vOiEwLGFjdGlvbjpLLmFwcFBhdGg/e3RpdGxlOiJSZXZlYWwgaW4gRmluZGVyIixvbkNsaWNrOigpPT57VjEoYG9wZW4gLVIgJHtIMShLLmFwcFBhdGgpfWApfSxpY29uOkooInN2ZyIse3dpZHRoOiIxMSIsaGVpZ2h0OiIxMSIsdmlld0JveDoiMCAwIDI0IDI0IixmaWxsOiJub25lIixzdHJva2U6ImN1cnJlbnRDb2xvciIsc3Ryb2tlV2lkdGg6IjIuMiIsc3Ryb2tlTGluZWNhcDoicm91bmQiLHN0cm9rZUxpbmVqb2luOiJyb3VuZCIsY2hpbGRyZW46W0ooImxpbmUiLHt4MToiNyIseTE6IjE3Iix4MjoiMTciLHkyOiI3In0pLEooInBvbHlsaW5lIix7cG9pbnRzOiIxMCA3IDE3IDcgMTcgMTQifSldfSl9OnZvaWQgMH0pXX0pXX0pXX0pfWZ1bmN0aW9uIFAwKHtsYWJlbDpDLHZhbHVlOiQsbW9ubzpLLGFjdGlvbjpYfSl7cmV0dXJuIEooImRpdiIse2NsYXNzTmFtZToiZ3JvdXAgZmxleCBpdGVtcy1iYXNlbGluZSBnYXAtMiBtaW4tdy0wIixjaGlsZHJlbjpbSigiZHQiLHtjbGFzc05hbWU6Im0tMCB0ZXh0LVsxMXB4XSB0ZXh0LXdoaXRlLzUwIHctMjEgc2hyaW5rLTAiLGNoaWxkcmVuOkN9KSxKKCJkZCIse2NsYXNzTmFtZTpgbS0wIHRleHQtd2hpdGUvOTAgZmxleC0xIG1pbi13LTAgb3ZlcmZsb3ctaGlkZGVuIHRleHQtZWxsaXBzaXMgd2hpdGVzcGFjZS1ub3dyYXAgcmVsYXRpdmUgJHtLPyJmb250LW1vbm8gdGV4dC1bMTFweF0iOiJ0ZXh0LVsxMnB4XSJ9YCx0aXRsZTokLGNoaWxkcmVuOlskLFgmJkooImRpdiIse2NsYXNzTmFtZToiYWJzb2x1dGUgdG9wLTAgcmlnaHQtMCBib3R0b20tMCBwbC03IGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktZW5kIGJnLVtsaW5lYXItZ3JhZGllbnQodG9fcmlnaHQscmdiYSgyOCwyOCwzMCwwKV8wJSwjMWMxYzFlXzU1JSldIFt0cmFuc2l0aW9uOm9wYWNpdHlfMC4xNXNfZWFzZSx0cmFuc2Zvcm1fMC4xNXNfZWFzZV0gb3BhY2l0eS0wIHRyYW5zbGF0ZS14LTEgcG9pbnRlci1ldmVudHMtbm9uZSBncm91cC1ob3ZlcjpvcGFjaXR5LTEwMCBncm91cC1ob3Zlcjp0cmFuc2xhdGUteC0wIGdyb3VwLWhvdmVyOnBvaW50ZXItZXZlbnRzLWF1dG8iLGNoaWxkcmVuOkooImJ1dHRvbiIse3R5cGU6ImJ1dHRvbiIsb25DbGljazpYLm9uQ2xpY2ssdGl0bGU6WC50aXRsZSwiYXJpYS1sYWJlbCI6WC50aXRsZSxjbGFzc05hbWU6InctNSBoLTUgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgYmctdHJhbnNwYXJlbnQgYm9yZGVyLW5vbmUgcm91bmRlZCB0ZXh0LXdoaXRlIGN1cnNvci1wb2ludGVyIHAtMCIsY2hpbGRyZW46WC5pY29ufSl9KV19KV19KX12YXIgQTg9W3trZXk6ImNhbWVyYSIsbGFiZWw6IkNhbWVyYSJ9LHtrZXk6Im1pY3JvcGhvbmUiLGxhYmVsOiJNaWNyb3Bob25lIn0se2tleToicGhvdG9zIixsYWJlbDoiUGhvdG9zIn0se2tleToicGhvdG9zLWFkZCIsbGFiZWw6IkFkZCB0byBQaG90b3MifSx7a2V5OiJjb250YWN0cyIsbGFiZWw6IkNvbnRhY3RzIn0se2tleToiY2FsZW5kYXIiLGxhYmVsOiJDYWxlbmRhciJ9LHtrZXk6InJlbWluZGVycyIsbGFiZWw6IlJlbWluZGVycyJ9LHtrZXk6ImxvY2F0aW9uIixsYWJlbDoiTG9jYXRpb24ifSx7a2V5OiJsb2NhdGlvbi1hbHdheXMiLGxhYmVsOiJMb2NhdGlvbiAoQWx3YXlzKSJ9LHtrZXk6Im1vdGlvbiIsbGFiZWw6Ik1vdGlvbiJ9LHtrZXk6Im1lZGlhLWxpYnJhcnkiLGxhYmVsOiJNZWRpYSBMaWJyYXJ5In0se2tleToic2lyaSIsbGFiZWw6IlNpcmkifV07ZnVuY3Rpb24gTzgoe3VkaWQ6QyxidW5kbGVJZDokfSl7bGV0W0ssWF09QSh7fSksW1EsTl09QShudWxsKSxbWixxXT1BKG51bGwpLFtHLFldPUEoITEpO1coKCk9PntYKHt9KSxxKG51bGwpfSxbJF0pO2xldCBWPVAoYXN5bmMoayxEKT0+e2lmKCEkKXJldHVybjtsZXQgVD1gJHtrfToke0R9YDtOKFQpLHEobnVsbCk7dHJ5e2xldCBCPWF3YWl0IFYxKGB4Y3J1biBzaW1jdGwgcHJpdmFjeSAke0N9ICR7RH0gJHtrfSAke0gxKCQpfWApO2lmKEIuZXhpdENvZGUhPT0wKXtxKEIuc3RkZXJyLnRyaW0oKXx8YHNpbWN0bCBwcml2YWN5IGZhaWxlZCAoZXhpdCAke0IuZXhpdENvZGV9KWApO3JldHVybn1YKChfKT0+KHsuLi5fLFtrXTpEPT09InJlc2V0Ij92b2lkIDA6RH0pKX1maW5hbGx5e04obnVsbCl9fSxbQywkXSksTD1QKGFzeW5jKCk9PntpZighJClyZXR1cm47TigiX19hbGxfXyIpLHEobnVsbCk7dHJ5e2xldCBrPWF3YWl0IFYxKGB4Y3J1biBzaW1jdGwgcHJpdmFjeSAke0N9IHJlc2V0IGFsbCAke0gxKCQpfWApO2lmKGsuZXhpdENvZGUhPT0wKXtxKGsuc3RkZXJyLnRyaW0oKXx8YHNpbWN0bCBwcml2YWN5IGZhaWxlZCAoZXhpdCAke2suZXhpdENvZGV9KWApO3JldHVybn1YKHt9KX1maW5hbGx5e04obnVsbCl9fSxbQywkXSk7aWYoISQpcmV0dXJuIEooImRpdiIse2NsYXNzTmFtZToiYmctcGFuZWwgYm9yZGVyIGJvcmRlci1kYXNoZWQgYm9yZGVyLXdoaXRlLzEwIHJvdW5kZWQtWzEwcHhdIHAtNCB0ZXh0LXdoaXRlLzUwIHRleHQtWzEycHhdIHRleHQtY2VudGVyIixjaGlsZHJlbjoiUGVybWlzc2lvbnMgYXBwZWFyIG9uY2UgYW4gYXBwIGlzIGluIHRoZSBmb3JlZ3JvdW5kLiJ9KTtyZXR1cm4gSigiZGl2Iix7Y2xhc3NOYW1lOiJiZy1wYW5lbCBib3JkZXIgYm9yZGVyLXdoaXRlLzggcm91bmRlZC1bMTBweF0gcHgtMyBweS0yIixjaGlsZHJlbjpbSigiYnV0dG9uIix7b25DbGljazooKT0+WSgoayk9PiFrKSxjbGFzc05hbWU6ImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiBnYXAtMS41IGJnLXRyYW5zcGFyZW50IGJvcmRlci1ub25lIHRleHQtd2hpdGUvNTAgcC0wIG0tMCBjdXJzb3ItcG9pbnRlciB3LWZ1bGwgdGV4dC1sZWZ0IGxlYWRpbmctbm9uZSIsImFyaWEtZXhwYW5kZWQiOkcsY2hpbGRyZW46W0ooInNwYW4iLHtjbGFzc05hbWU6InRleHQtWzExcHhdIGZvbnQtc2VtaWJvbGQgdGV4dC13aGl0ZS81MCB1cHBlcmNhc2UgdHJhY2tpbmctWzAuMDhlbV0gbS0wIixjaGlsZHJlbjoiUGVybWlzc2lvbnMifSksSihvMSx7b3BlbjpHfSldfSksRyYmWiYmSigiZGl2Iix7Y2xhc3NOYW1lOiJiZy1kYW5nZXIvMTAgYm9yZGVyIGJvcmRlci1kYW5nZXIvMjAgdGV4dC1kYW5nZXItc29mdCB0ZXh0LVsxMXB4XSBweC0yIHB5LTEuNSByb3VuZGVkLW1kIG10LTIiLGNoaWxkcmVuOlp9KSxHJiZKKCJkaXYiLHtjbGFzc05hbWU6InJlbGF0aXZlIG10LTIiLGNoaWxkcmVuOltKKCJkaXYiLHtjbGFzc05hbWU6Im1heC1oLVsyNjBweF0gb3ZlcmZsb3cteS1hdXRvIGZsZXggZmxleC1jb2wgZ2FwLTEgcHktMiBbc2Nyb2xsYmFyLXdpZHRoOnRoaW5dIixjaGlsZHJlbjpBOC5tYXAoKHtrZXk6ayxsYWJlbDpEfSk9PntsZXQgVD1LW2tdO3JldHVybiBKKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiBnYXAtMiBweC0wLjUgcHktMSIsY2hpbGRyZW46W0ooInNwYW4iLHtjbGFzc05hbWU6InRleHQtWzEycHhdIHRleHQtd2hpdGUvOTAgb3ZlcmZsb3ctaGlkZGVuIHRleHQtZWxsaXBzaXMgd2hpdGVzcGFjZS1ub3dyYXAgZmxleC0xIG1pbi13LTAiLGNoaWxkcmVuOkR9KSxKKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggZ2FwLTAuNSBiZy13aGl0ZS9bMC4wNF0gYm9yZGVyIGJvcmRlci13aGl0ZS84IHJvdW5kZWQtbWQgcC0wLjUiLHJvbGU6Imdyb3VwIiwiYXJpYS1sYWJlbCI6RCxjaGlsZHJlbjpbSihxNSx7YWN0aXZlOlQ9PT0iZ3JhbnQiLHBlbmRpbmc6UT09PWAke2t9OmdyYW50YCxvbkNsaWNrOigpPT5WKGssImdyYW50IiksdmFyaWFudDoiZ3JhbnQiLHRpdGxlOiJBbGxvdyIsY2hpbGRyZW46Sigic3ZnIix7d2lkdGg6IjExIixoZWlnaHQ6IjExIix2aWV3Qm94OiIwIDAgMjQgMjQiLGZpbGw6Im5vbmUiLHN0cm9rZToiY3VycmVudENvbG9yIixzdHJva2VXaWR0aDoiMyIsc3Ryb2tlTGluZWNhcDoicm91bmQiLHN0cm9rZUxpbmVqb2luOiJyb3VuZCIsY2hpbGRyZW46SigicG9seWxpbmUiLHtwb2ludHM6IjUgMTIgMTAgMTcgMTkgNyJ9KX0pfSksSihxNSx7YWN0aXZlOlQ9PT0icmV2b2tlIixwZW5kaW5nOlE9PT1gJHtrfTpyZXZva2VgLG9uQ2xpY2s6KCk9PlYoaywicmV2b2tlIiksdmFyaWFudDoicmV2b2tlIix0aXRsZToiRGVueSIsY2hpbGRyZW46Sigic3ZnIix7d2lkdGg6IjExIixoZWlnaHQ6IjExIix2aWV3Qm94OiIwIDAgMjQgMjQiLGZpbGw6Im5vbmUiLHN0cm9rZToiY3VycmVudENvbG9yIixzdHJva2VXaWR0aDoiMyIsc3Ryb2tlTGluZWNhcDoicm91bmQiLHN0cm9rZUxpbmVqb2luOiJyb3VuZCIsY2hpbGRyZW46W0ooImxpbmUiLHt4MToiNiIseTE6IjYiLHgyOiIxOCIseTI6IjE4In0pLEooImxpbmUiLHt4MToiMTgiLHkxOiI2Iix4MjoiNiIseTI6IjE4In0pXX0pfSksSihxNSx7YWN0aXZlOiExLHBlbmRpbmc6UT09PWAke2t9OnJlc2V0YCxvbkNsaWNrOigpPT5WKGssInJlc2V0IiksdmFyaWFudDoicmVzZXQiLHRpdGxlOiJSZXNldCIsY2hpbGRyZW46SihKMCx7c2l6ZToxMSxzdHJva2VXaWR0aDoyLjR9KX0pXX0pXX0sayl9KX0pLEooImRpdiIse2NsYXNzTmFtZToiYWJzb2x1dGUgdG9wLTAgbGVmdC0wIHJpZ2h0LTAgaC1bMTRweF0gcG9pbnRlci1ldmVudHMtbm9uZSByb3VuZGVkLXQtWzEwcHhdIGJnLVtsaW5lYXItZ3JhZGllbnQodG9fYm90dG9tLCMxYzFjMWVfMCUscmdiYSgyOCwyOCwzMCwwKV8xMDAlKV0ifSksSigiZGl2Iix7Y2xhc3NOYW1lOiJhYnNvbHV0ZSBib3R0b20tMCBsZWZ0LTAgcmlnaHQtMCBoLVsxNHB4XSBwb2ludGVyLWV2ZW50cy1ub25lIGJnLVtsaW5lYXItZ3JhZGllbnQodG9fdG9wLCMxYzFjMWVfMCUscmdiYSgyOCwyOCwzMCwwKV8xMDAlKV0ifSldfSksRyYmSigiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGp1c3RpZnktZW5kIHB0LTIiLGNoaWxkcmVuOkooImJ1dHRvbiIse29uQ2xpY2s6TCxkaXNhYmxlZDpRPT09Il9fYWxsX18iLGNsYXNzTmFtZToiYmctdHJhbnNwYXJlbnQgYm9yZGVyIGJvcmRlci13aGl0ZS8xMiB0ZXh0LXdoaXRlLzcwIHRleHQtWzEwcHhdIHB4LTIgcHktWzNweF0gcm91bmRlZC1bNXB4XSBjdXJzb3ItcG9pbnRlciB1cHBlcmNhc2UgdHJhY2tpbmctWzAuMDRlbV0iLHRpdGxlOiJ4Y3J1biBzaW1jdGwgcHJpdmFjeSByZXNldCBhbGwiLGNoaWxkcmVuOlE9PT0iX19hbGxfXyI/IuKApiI6IlJlc2V0IGFsbCJ9KX0pXX0pfWZ1bmN0aW9uIHE1KHthY3RpdmU6QyxwZW5kaW5nOiQsb25DbGljazpLLHZhcmlhbnQ6WCx0aXRsZTpRLGNoaWxkcmVuOk59KXtsZXQgWj1YPT09ImdyYW50Ij8iIzRhZGU4MCI6WD09PSJyZXZva2UiPyIjZjg3MTcxIjoiI2E1YjRmYyI7cmV0dXJuIEooImJ1dHRvbiIse29uQ2xpY2s6SyxkaXNhYmxlZDokLHRpdGxlOlEsImFyaWEtbGFiZWwiOlEsY2xhc3NOYW1lOiJ3LTYgaC01LjUgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgYm9yZGVyLW5vbmUgcm91bmRlZCBwLTAgY3Vyc29yLXBvaW50ZXIgW3RyYW5zaXRpb246YmFja2dyb3VuZF8wLjEycyxjb2xvcl8wLjEyc10iLHN0eWxlOntiYWNrZ3JvdW5kOkM/YCR7Wn0yMmA6InRyYW5zcGFyZW50Iixjb2xvcjpDP1o6InJnYmEoMjU1LDI1NSwyNTUsMC41NSkiLG9wYWNpdHk6JD8wLjU6MX0sY2hpbGRyZW46Tn0pfXZhciBUND0iYmctcGFuZWwgYm9yZGVyIGJvcmRlci13aGl0ZS84IHJvdW5kZWQtWzEwcHhdIixNND0idGV4dC1bMTFweF0gZm9udC1zZW1pYm9sZCB0ZXh0LXdoaXRlLzUwIHVwcGVyY2FzZSB0cmFja2luZy1bMC4wOGVtXSBtLTAiLFQ4PSJiZy1wYW5lbCBib3JkZXIgYm9yZGVyLWRhc2hlZCBib3JkZXItd2hpdGUvMTAgcm91bmRlZC1bMTBweF0gcC0zIHRleHQtd2hpdGUvNTAgdGV4dC1bMTJweF0gdGV4dC1jZW50ZXIiO2Z1bmN0aW9uIE04KHtvdmVybGF5RW5hYmxlZDpDLG9uVG9nZ2xlT3ZlcmxheTokfSl7bGV0e3NuYXBzaG90Okt9PXowKCkse2hpZ2hsaWdodGVkS2V5Olgsc2V0SGlnaGxpZ2h0ZWRLZXk6UX09TDIoKSxOPUs/LmVsZW1lbnRzPz9bXSxaPXEyKEspLHE9Sz8uZXJyb3JzPy5bMF0/P251bGw7cmV0dXJuIEooImRpdiIse2NsYXNzTmFtZTpgJHtUNH0gcHgtMyBweS0yYCxjaGlsZHJlbjpbSigiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gZ2FwLTIiLGNoaWxkcmVuOltKKCJzcGFuIix7Y2xhc3NOYW1lOk00LGNoaWxkcmVuOiJBWCBUcmVlIn0pLEooImJ1dHRvbiIse3R5cGU6ImJ1dHRvbiIsb25DbGljazokLCJhcmlhLXByZXNzZWQiOkMsY2xhc3NOYW1lOiJib3JkZXIgYm9yZGVyLXdoaXRlLzEyIHJvdW5kZWQtWzVweF0gYmctdHJhbnNwYXJlbnQgdGV4dC13aGl0ZS83MCBjdXJzb3ItcG9pbnRlciB0ZXh0LVsxMHB4XSBweC1bN3B4XSBweS1bM3B4XSIsY2hpbGRyZW46Qz8iT3ZlcmxheSBvbiI6IkVuYWJsZSBvdmVybGF5In0pXX0pLCFDP251bGw6Wj9KKCJkaXYiLHtjbGFzc05hbWU6VDgsY2hpbGRyZW46IkFYIHVuYXZhaWxhYmxlIG9uIHRoaXMgc2ltdWxhdG9yLiJ9KTpOLmxlbmd0aD09PTA/SigiZGl2Iix7Y2xhc3NOYW1lOlQ4LGNoaWxkcmVuOnE/PyJXYWl0aW5nIGZvciBhY2Nlc3NpYmlsaXR5IGRhdGHigKYifSk6SigiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGZsZXgtY29sIGdhcC0xIG10LTIgcHktMiBtYXgtaC1bMjYwcHhdIG92ZXJmbG93LXktYXV0byBbc2Nyb2xsYmFyLXdpZHRoOnRoaW5dIixyb2xlOiJsaXN0IixjaGlsZHJlbjpOLm1hcCgoRyxZKT0+e2xldCBWPVEwKEcpO3JldHVybiBKKHc0LHtlbGVtZW50OkcsaW5kZXg6WSxhY3RpdmU6Vj09PVgsb25IaWdobGlnaHQ6UX0sVil9KX0pXX0pfXZhciB3ND1rMChmdW5jdGlvbih7ZWxlbWVudDokLGluZGV4OkssYWN0aXZlOlgsb25IaWdobGlnaHQ6UX0pe2xldCBOPVEwKCQpLFo9RzIoJCxLKSxxPWAke01hdGgucm91bmQoJC5mcmFtZS53aWR0aCl9eCR7TWF0aC5yb3VuZCgkLmZyYW1lLmhlaWdodCl9YCxHPVtaLmxhYmVsLFoucm9sZXx8Wi50eXBlfHwiZWxlbWVudCIscV0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oIiDCtyAiKTtyZXR1cm4gSigiZGl2Iix7cm9sZToibGlzdGl0ZW0iLHRhYkluZGV4OjAsImRhdGEtYXgta2V5IjpOLHRpdGxlOkcsb25Nb3VzZUVudGVyOigpPT5RKE4pLG9uTW91c2VMZWF2ZTooKT0+UShudWxsKSxvbkZvY3VzOigpPT5RKE4pLG9uQmx1cjooKT0+UShudWxsKSxjbGFzc05hbWU6YGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiBnYXAtMiByb3VuZGVkLW1kIHB5LTEgcHgtMC41IG1pbi13LTAgJHtYPyJiZy13aGl0ZS9bMC4wNl0iOiIifWAsY2hpbGRyZW46W0ooInNwYW4iLHtjbGFzc05hbWU6ImZsZXggZmxleC1jb2wgZ2FwLTAuNSBmbGV4LTEgbWluLXctMCIsY2hpbGRyZW46W0ooInNwYW4iLHtjbGFzc05hbWU6Im92ZXJmbG93LWhpZGRlbiB0ZXh0LWVsbGlwc2lzIHdoaXRlc3BhY2Utbm93cmFwIHRleHQtd2hpdGUvOTAgdGV4dC1bMTJweF0gZm9udC1tZWRpdW0iLGNoaWxkcmVuOiQubGFiZWx8fCQucm9sZXx8IlVubGFiZWxlZCJ9KSxKKCJzcGFuIix7Y2xhc3NOYW1lOiJvdmVyZmxvdy1oaWRkZW4gdGV4dC1lbGxpcHNpcyB3aGl0ZXNwYWNlLW5vd3JhcCB0ZXh0LXdoaXRlLzQ1IGZvbnQtbW9ubyB0ZXh0LVsxMHB4XSIsY2hpbGRyZW46JC5yb2xlfHwkLnR5cGV8fCJlbGVtZW50In0pXX0pLEooImNvZGUiLHtjbGFzc05hbWU6InNocmluay0wIGJnLXdoaXRlL1swLjA0XSBib3JkZXIgYm9yZGVyLXdoaXRlLzggcm91bmRlZC1tZCB0ZXh0LXdoaXRlLzU1IGZvbnQtbW9ubyB0ZXh0LVsxMHB4XSBweC0xLjUgcHktWzNweF0iLGNoaWxkcmVuOnF9KV19KX0sKEMsJCk9PkMuaW5kZXg9PT0kLmluZGV4JiZDLmFjdGl2ZT09PSQuYWN0aXZlJiZDLm9uSGlnaGxpZ2h0PT09JC5vbkhpZ2hsaWdodCYmWTIoQy5lbGVtZW50LCQuZWxlbWVudCkpO3ZhciBiND1uZXcgU2V0KFsiaW1hZ2UvanBlZyIsImltYWdlL3BuZyIsImltYWdlL2dpZiIsImltYWdlL2hlaWMiLCJpbWFnZS9oZWlmIiwiaW1hZ2Uvd2VicCIsInZpZGVvL21wNCIsInZpZGVvL3F1aWNrdGltZSJdKTtmdW5jdGlvbiBXMChDKXtsZXQgJD1DLm5hbWUsSz0kLmxhc3RJbmRleE9mKCIuIik7aWYoSz49MClyZXR1cm4gJC5zbGljZShLKzEpLnRvTG93ZXJDYXNlKCk7aWYoQy50eXBlLnN0YXJ0c1dpdGgoInZpZGVvLyIpKXJldHVybiJtcDQiO3JldHVybiJqcGcifWZ1bmN0aW9uIHc4KEMpe2lmKFcwKEMpPT09ImlwYSIpcmV0dXJuImlwYSI7aWYoYjQuaGFzKEMudHlwZSkpcmV0dXJuIm1lZGlhIjtyZXR1cm4gbnVsbH1mdW5jdGlvbiBiOChDKXtsZXQgJD1uZXcgVWludDhBcnJheShDKSxLPSIiO2ZvcihsZXQgWD0wO1g8JC5sZW5ndGg7WCsrKUsrPVN0cmluZy5mcm9tQ2hhckNvZGUoJFtYXSk7cmV0dXJuIGJ0b2EoSyl9YXN5bmMgZnVuY3Rpb24gUDgoQywkLEssWCl7aWYoQy5zaXplPjUyNDI4ODAwMCl0aHJvdyBFcnJvcigiRmlsZSB0b28gbGFyZ2UgKG1heCA1MDBNQikiKTtsZXQgUT1gL3RtcC8keyR9LSR7Y3J5cHRvLnJhbmRvbVVVSUQoKX0uJHtLfWAsTj1hd2FpdCBDLmFycmF5QnVmZmVyKCksWj1iOChOKTtmb3IobGV0IHE9MDtxPFoubGVuZ3RoO3ErPTI2MjE0NCl7bGV0IEc9Wi5zbGljZShxLHErMjYyMTQ0KSxWPWF3YWl0IFgoYGJhc2ggLWMgJ2VjaG8gJHtHfSB8IGJhc2U2NCAtZCAke3E9PT0wPyI+IjoiPj4ifSAke1F9J2ApO2lmKFYuZXhpdENvZGUhPT0wKXRocm93IEVycm9yKFYuc3RkZXJyfHxgV3JpdGUgZmFpbGVkIChleGl0ICR7Vi5leGl0Q29kZX0pYCl9cmV0dXJuIFF9YXN5bmMgZnVuY3Rpb24gVzgoQywkLEssWCxRKXtpZihDLnNpemU+NTI0Mjg4MDAwKXRocm93IEVycm9yKCJGaWxlIHRvbyBsYXJnZSAobWF4IDUwME1CKSIpO2xldCBOPSQ9PT0iaXBhIj8iaXBhIjpXMChDKSxxPWAvdG1wLyR7JD09PSJpcGEiPyJzZXJ2ZS1zaW0taW5zdGFsbCI6InNlcnZlLXNpbS11cGxvYWQifS0ke2NyeXB0by5yYW5kb21VVUlEKCl9LiR7Tn1gO3RyeXtRKDApO2xldCBHPWF3YWl0IEMuYXJyYXlCdWZmZXIoKSxZPWI4KEcpLFY9MDtmb3IobGV0IEQ9MDtEPFkubGVuZ3RoO0QrPTI2MjE0NCl7bGV0IFQ9WS5zbGljZShELEQrMjYyMTQ0KSxfPWF3YWl0IEsoYGJhc2ggLWMgJ2VjaG8gJHtUfSB8IGJhc2U2NCAtZCAke0Q9PT0wPyI+IjoiPj4ifSAke3F9J2ApO2lmKF8uZXhpdENvZGUhPT0wKXRocm93IEVycm9yKF8uc3RkZXJyfHxgV3JpdGUgZmFpbGVkIChleGl0ICR7Xy5leGl0Q29kZX0pYCk7bGV0IFU9TWF0aC5taW4oRCsyNjIxNDQsWS5sZW5ndGgpLE09TWF0aC5mbG9vcihVL1kubGVuZ3RoKjEwMCk7aWYoTSE9PVYpVj1NLFEoVS9ZLmxlbmd0aCl9UShudWxsKTtsZXQgTD0kPT09ImlwYSI/YHhjcnVuIHNpbWN0bCBpbnN0YWxsICR7WH0gJHtxfWA6YHhjcnVuIHNpbWN0bCBhZGRtZWRpYSAke1h9ICR7cX1gLGs9YXdhaXQgSyhMKTtpZihrLmV4aXRDb2RlIT09MCl7bGV0IEQ9JD09PSJpcGEiPyJpbnN0YWxsIjoiYWRkbWVkaWEiO3Rocm93IEVycm9yKGsuc3RkZXJyfHxgJHtEfSBmYWlsZWQgKGV4aXQgJHtrLmV4aXRDb2RlfSlgKX19ZmluYWxseXtLKGBiYXNoIC1jICdybSAtZiAke3F9J2ApLmNhdGNoKCgpPT57fSl9fXZhciBQND0zMDAwLFc0PTIwOTcxNTIwMCx5ND0iTGFyZ2UgdmlkZW8gKD4yMDAgTUIpIOKAlCBtYXkgc3R1dHRlciBvbiBzaGFyZWQgbWVtb3J5IixFOD0iSEVJQyBkZWNvZGUgZmFpbGVkIOKAlCBleHBvcnQgYXMgSlBFRyBvciBQTkcgYW5kIHJldHJ5IjtmdW5jdGlvbiBFNChDLCQpe2lmKCQpcmV0dXJuImFjdGl2ZSI7aWYoQz09PSJhY3RpdmUiKXJldHVybiJkaXNjb25uZWN0ZWQiO2lmKEM9PT0iZGlzY29ubmVjdGVkIilyZXR1cm4icmVhZHkiO3JldHVybiBDfWZ1bmN0aW9uIEk0KEMpe2lmKCFDLmluamVjdGVkKXJldHVybiJwbGF5IjtpZihDLnNvdXJjZT09PSJwbGFjZWhvbGRlciIpcmV0dXJuInBsYXkiO2lmKEMuYnVuZGxlSWQmJiFDLmZvcmVncm91bmRJc0luamVjdGVkKXJldHVybiJhdHRhY2giO3JldHVybiJzdG9wIn1mdW5jdGlvbiBTNChDKXtyZXR1cm4gQy5zcGxpdChgCmApLm1hcCgoJCk9PiQudHJpbSgpKS5maWx0ZXIoQm9vbGVhbikuZmxhdE1hcCgoJCk9PntsZXQgSz0kLmluZGV4T2YoIlx0Iik7aWYoSzw9MClyZXR1cm5bXTtsZXQgWD0kLnNsaWNlKDAsSykudHJpbSgpLFE9JC5zbGljZShLKzEpLnRyaW0oKTtpZighWHx8IVEpcmV0dXJuW107cmV0dXJuW3tpZDpYLG5hbWU6UX1dfSl9dmFyIGg0PW5ldyBTZXQoWyJtcDQiLCJtNHYiLCJtb3YiLCJxdCIsImF2aSIsIm1rdiIsIndlYm0iLCJtcGciLCJtcGVnIiwiM2dwIiwiM2cyIiwidHMiLCJ3bXYiXSk7ZnVuY3Rpb24gSTgoQyl7aWYoQy50eXBlJiZDLnR5cGUuc3RhcnRzV2l0aCgidmlkZW8vIikpcmV0dXJuITA7bGV0ICQ9KEMubmFtZT8/IiIpLnRvTG93ZXJDYXNlKCksSz0kLmxhc3RJbmRleE9mKCIuIik7aWYoSzwwKXJldHVybiExO3JldHVybiBoNC5oYXMoJC5zbGljZShLKzEpKX1mdW5jdGlvbiB4NChDKXtyZXR1cm4gSTgoQykmJkMuc2l6ZT5XNH1mdW5jdGlvbiB2NChDKXtsZXQgJD0oQy50eXBlPz8iIikudG9Mb3dlckNhc2UoKTtpZigkPT09ImltYWdlL2hlaWMifHwkPT09ImltYWdlL2hlaWYiKXJldHVybiEwO2xldCBLPShDLm5hbWU/PyIiKS50b0xvd2VyQ2FzZSgpO3JldHVybiBLLmVuZHNXaXRoKCIuaGVpYyIpfHxLLmVuZHNXaXRoKCIuaGVpZiIpfWZ1bmN0aW9uIGc0KHtyYXdNZXNzYWdlOkMsbGFzdEZpbGVJc0hlaWM6JCxzb3VyY2U6S30pe2lmKCQmJihLPT09ImltYWdlInx8Sz09PSJ2aWRlbyIpKXJldHVybiBFODtyZXR1cm4gQ31mdW5jdGlvbiBSNCh7c3RhdGU6Q30pe2xldCAkPUM9PT0iYWN0aXZlIj8iQWN0aXZlIjpDPT09ImRpc2Nvbm5lY3RlZCI/IkRpc2Nvbm5lY3RlZCI6IlJlYWR5IixLPUM9PT0iYWN0aXZlIj8ic2l6ZS0xLjUgcm91bmRlZC1mdWxsIGJnLXN1Y2Nlc3MtZW1lcmFsZCBbYm94LXNoYWRvdzowXzBfNnB4X3JnYmEoNzQsMjIyLDEyOCwwLjcpXSI6Qz09PSJkaXNjb25uZWN0ZWQiPyJzaXplLTEuNSByb3VuZGVkLWZ1bGwgYmctZGFuZ2VyLXNvZnQgW2JveC1zaGFkb3c6MF8wXzZweF9yZ2JhKDI0OCwxMTMsMTEzLDAuNTUpXSI6bnVsbDtyZXR1cm4gSigic3BhbiIse2NsYXNzTmFtZToidGV4dC1bMTFweF0gdGV4dC13aGl0ZS81NSBmb250LW1vbm8gaW5saW5lLWZsZXggaXRlbXMtY2VudGVyIGdhcC0xLjUganVzdGlmeS1zZWxmLWVuZCBsZWFkaW5nLW5vbmUiLCJkYXRhLWNhbWVyYS1waWxsLXN0YXRlIjpDLGNoaWxkcmVuOltLJiZKKCJzcGFuIix7Y2xhc3NOYW1lOkt9KSwkXX0pfWZ1bmN0aW9uIG00KCl7cmV0dXJuIEooInAiLHtjbGFzc05hbWU6Im0tMCB0ZXh0LWNlbnRlciB0ZXh0LVsxMHB4XSBsZWFkaW5nLVsxLjVdIHRleHQtd2hpdGUvNDUiLCJkYXRhLWNhbWVyYS10ZXN0LXBhdHRlcm4taGludCI6ITAsY2hpbGRyZW46IlRlc3QtcGF0dGVybiBmZWVkIn0pfWZ1bmN0aW9uIGo0KHttb2RlOkMsZmlsZU5hbWU6JCx3ZWJjYW1OYW1lOkssc291cmNlS2luZDpYfSl7aWYoQz09PSJ1cGxvYWRpbmciKXJldHVybiBKKCJzcGFuIix7Y2xhc3NOYW1lOiJ0ZXh0LVsxMXB4XSB0ZXh0LXdoaXRlLzU1IixjaGlsZHJlbjoiVXBsb2FkaW5n4oCmIn0pO2lmKEM9PT0iZmlsZSIpcmV0dXJuIEoocTEse2NoaWxkcmVuOltKKCJkaXYiLHtjbGFzc05hbWU6InNocmluay0wIHRleHQtWzlweF0gdHJhY2tpbmctWzAuMWVtXSB1cHBlcmNhc2UgdGV4dC13aGl0ZS81NSBiZy13aGl0ZS9bMC4wNl0gYm9yZGVyIGJvcmRlci13aGl0ZS84IHB4LVs3cHhdIHB5LVsycHhdIHJvdW5kZWQtZnVsbCIsY2hpbGRyZW46WD09PSJ2aWRlbyI/IlZpZGVvIjoiSW1hZ2UifSksSigic3BhbiIse2NsYXNzTmFtZToiZmxleC0xIG1pbi13LTAgdHJ1bmNhdGUgdGV4dC1bMTJweF0gdGV4dC13aGl0ZS85MCBmb250LW1vbm8iLGNoaWxkcmVuOiQ/PyIifSldfSk7aWYoQz09PSJ3ZWJjYW0iKXJldHVybiBKKHExLHtjaGlsZHJlbjpbSigiZGl2Iix7Y2xhc3NOYW1lOiJzaHJpbmstMCB0ZXh0LVs5cHhdIHRyYWNraW5nLVswLjFlbV0gdXBwZXJjYXNlIHRleHQtd2hpdGUvNTUgYmctd2hpdGUvWzAuMDZdIGJvcmRlciBib3JkZXItd2hpdGUvOCBweC1bN3B4XSBweS1bMnB4XSByb3VuZGVkLWZ1bGwiLGNoaWxkcmVuOiJXZWJjYW0ifSksSigic3BhbiIse2NsYXNzTmFtZToiZmxleC0xIG1pbi13LTAgdHJ1bmNhdGUgdGV4dC1bMTJweF0gdGV4dC13aGl0ZS85MCBmb250LW1vbm8iLGNoaWxkcmVuOks/PyIifSldfSk7cmV0dXJuIEooInNwYW4iLHtjbGFzc05hbWU6InRleHQtWzEycHhdIHRleHQtd2hpdGUvODUgZm9udC1tZWRpdW0iLGNoaWxkcmVuOiJTZWxlY3Qgb3IgZHJvcCBtZWRpYSJ9KX1mdW5jdGlvbiB5OCh7a2luZDpDLG1lc3NhZ2U6JH0pe3JldHVybiBKKCJkaXYiLHtjbGFzc05hbWU6Qz09PSJ3YXJuaW5nIj8iYmctd2FybmluZy8xMCBib3JkZXIgYm9yZGVyLXdhcm5pbmcvMjUgdGV4dC13YXJuaW5nLXNvZnQgdGV4dC1bMTFweF0gcHgtMiBweS0xLjUgcm91bmRlZC1tZCBicmVhay13b3JkcyI6ImJnLWRhbmdlci8xMCBib3JkZXIgYm9yZGVyLWRhbmdlci8yMCB0ZXh0LWRhbmdlci1zb2Z0IHRleHQtWzExcHhdIHB4LTIgcHktMS41IHJvdW5kZWQtbWQgYnJlYWstd29yZHMiLCJkYXRhLWNhbWVyYS1iYW5uZXIta2luZCI6Qyxyb2xlOkM9PT0iZXJyb3IiPyJhbGVydCI6InN0YXR1cyIsY2hpbGRyZW46JH0pfWZ1bmN0aW9uIFM4KHt1ZGlkOkMsYnVuZGxlSWQ6JH0pe2xldFtLLFhdPUEoITEpLFtRLE5dPUEoInBsYWNlaG9sZGVyIiksW1oscV09QSgiIiksW0csWV09QShudWxsKSxbVixMXT1BKCExKSxrPXYoMCksW0QsVF09QSghMSksW0IsX109QSghMSksVT12KG51bGwpLFtNLEVdPUEoW10pLFt5LGNdPUEoITEpLFtSLFNdPUEoIiIpLFt4LGZdPUEoIm9mZiIpLFtkLG9dPUEobnVsbCksW1ExLG5dPUEobnVsbCkscz1kIT09bnVsbHx8UTEhPT1udWxsLFtnLEldPUEobnVsbCksW04xLEMxXT1BKG51bGwpLFssWjFdPUEobnVsbCksW0sxLCQxXT1BKCExKSxbWDEsT109QSgicmVhZHkiKSxbaCxqXT1BKCgpPT5uZXcgU2V0KSxbaSxlXT1BKG51bGwpLFtVMSxMMV09QShudWxsKSxPMT12KCExKSx5MT12KCExKSxfMT12KCJvZmYiKSx3MT12KCExKSxKMT1NMSgoKT0+e2xldCBIPXdpbmRvdy5fX1NJTV9QUkVWSUVXX18/LnNlcnZlU2ltQmluO2lmKCFIKXJldHVybiJzZXJ2ZS1zaW0iO2lmKC9cLnRzJC8udGVzdChIKSlyZXR1cm5gYnVuICR7SDEoSCl9YDtpZigvXC5qcyQvLnRlc3QoSCkpcmV0dXJuYG5vZGUgJHtIMShIKX1gO3JldHVybiBIMShIKX0sW10pLEcxPVAoYXN5bmMoKT0+e2xldCBIPWF3YWl0IFYxKGAke0oxfSBjYW1lcmEgc3RhdHVzIC1kICR7Q31gKTtpZihILmV4aXRDb2RlIT09MClyZXR1cm4gbnVsbDt0cnl7cmV0dXJuIEpTT04ucGFyc2UoSC5zdGRvdXQudHJpbSgpKX1jYXRjaHtyZXR1cm4gbnVsbH19LFtKMSxDXSksUjE9dihhc3luYygpPT57fSksbTE9digkKTtXKCgpPT57bTEuY3VycmVudD0kfSxbJF0pLFcoKCk9PntsZXQgSD0hMTtyZXR1cm4oYXN5bmMoKT0+e2xldCBtPWF3YWl0IEcxKCk7aWYoSHx8IW18fCFtLmFsaXZlKXJldHVybjt5MS5jdXJyZW50PSEwO2xldCBhPW0uc291cmNlO2lmKGE9PT0icGxhY2Vob2xkZXIifHxhPT09IndlYmNhbSJ8fGE9PT0iaW1hZ2UifHxhPT09InZpZGVvIilOKGEpO2lmKChhPT09ImltYWdlInx8YT09PSJ2aWRlbyIpJiZtLmFyZylxKG0uYXJnKSxZKG0uYXJnLnNwbGl0KCIvIikucG9wKCk/P251bGwpO2lmKGE9PT0id2ViY2FtIiYmbS5hcmcpUyhtLmFyZyksUjEuY3VycmVudCgpO2xldCBCMT1tLm1pcnJvcj09PSJvbiI/Im9uIjoib2ZmIjtmKEIxKSxfMS5jdXJyZW50PUIxLGUobS5oZWxwZXJQaWQ/P251bGwpLCQxKCEwKTtsZXQgRjE9QXJyYXkuaXNBcnJheShtLmJ1bmRsZUlkcyk/bS5idW5kbGVJZHM6W107aWYoRjEubGVuZ3RoPjApaihuZXcgU2V0KEYxKSk7bGV0IEQxPW0xLmN1cnJlbnQsVzE9YSYmYSE9PSJwbGFjZWhvbGRlciI7TyhEMSYmRjEuaW5jbHVkZXMoRDEpJiZXMT8iYWN0aXZlIjoicmVhZHkiKSxaMShgUmVhdHRhY2hlZCDihpIgJHthPz8icnVubmluZyBoZWxwZXIifSR7bS5hcmc/YCAoJHttLmFyZ30pYDoiIn1gKX0pKCksKCk9PntIPSEwfX0sW0MsRzFdKSxXKCgpPT57bGV0IEg9ITEsbT0hMSxhPW51bGwsQjE9YXN5bmMoKT0+e2lmKEh8fG0pcmV0dXJuO2lmKHR5cGVvZiBkb2N1bWVudDwidSImJmRvY3VtZW50LnZpc2liaWxpdHlTdGF0ZT09PSJoaWRkZW4iKXJldHVybjttPSEwO3RyeXtsZXQgRDE9YXdhaXQgRzEoKTtpZihIKXJldHVybjtsZXQgVzE9ISFEMT8uYWxpdmUscDA9QXJyYXkuaXNBcnJheShEMT8uYnVuZGxlSWRzKT9EMS5idW5kbGVJZHM6bnVsbCx5MD0hISQmJihwMD9wMC5pbmNsdWRlcygkKTpoLmhhcygkKSksTDA9RDE/LnNvdXJjZT8/bnVsbCxWMD1LMSYmVzEmJnkwJiYhIShMMCYmTDAhPT0icGxhY2Vob2xkZXIiKSYmKGk9PW51bGx8fEQxPy5oZWxwZXJQaWQ9PT1pKTtpZihPKCh0MSk9PkU0KHQxLFYwKSksIVcxKSQxKCh0MSk9PntpZighdDEpcmV0dXJuIHQxO3JldHVybiBqKG5ldyBTZXQpLGUobnVsbCksXzEuY3VycmVudD0ib2ZmIiwhMX0pO2Vsc2UgaWYoSzEmJmkhPW51bGwmJkQxPy5oZWxwZXJQaWQhPT1pKSQxKCExKSxqKG5ldyBTZXQpLGUobnVsbCksXzEuY3VycmVudD0ib2ZmIjtlbHNlIGlmKFcxJiZBcnJheS5pc0FycmF5KEQxPy5idW5kbGVJZHMpKXtsZXQgdDE9RDEuYnVuZGxlSWRzO2ooKHoyKT0+e2lmKHoyLnNpemU9PT10MS5sZW5ndGgmJnQxLmV2ZXJ5KChuOCk9PnoyLmhhcyhuOCkpKXJldHVybiB6MjtyZXR1cm4gbmV3IFNldCh0MSl9KX19ZmluYWxseXttPSExfX07YT1zZXRJbnRlcnZhbCgoKT0+e0IxKCl9LFA0KTtsZXQgRjE9KCk9PntpZihkb2N1bWVudC52aXNpYmlsaXR5U3RhdGU9PT0idmlzaWJsZSIpQjEoKX07aWYodHlwZW9mIGRvY3VtZW50PCJ1Iilkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJ2aXNpYmlsaXR5Y2hhbmdlIixGMSk7cmV0dXJuKCk9PntpZihIPSEwLGEpY2xlYXJJbnRlcnZhbChhKTtpZih0eXBlb2YgZG9jdW1lbnQ8InUiKWRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInZpc2liaWxpdHljaGFuZ2UiLEYxKX19LFtHMSxLMSxpLCQsaF0pO2xldCBiMT1QKGFzeW5jKCk9PntjKCEwKSxJKG51bGwpO3RyeXtsZXQgSD1hd2FpdCBWMShgJHtKMX0gY2FtZXJhIC0tbGlzdC13ZWJjYW1zYCk7aWYoSC5leGl0Q29kZSE9PTApe0koSC5zdGRlcnIudHJpbSgpfHxgLS1saXN0LXdlYmNhbXMgZmFpbGVkICgke0guZXhpdENvZGV9KWApO3JldHVybn1sZXQgbT1TNChILnN0ZG91dCk7aWYoRShtKSxtLmxlbmd0aD4wJiYhUilTKG1bMF0uaWQpfWZpbmFsbHl7YyghMSl9fSxbUixKMV0pO1coKCk9PntSMS5jdXJyZW50PWIxfSxbYjFdKSxXKCgpPT57aWYoQiYmTS5sZW5ndGg9PT0wJiYheSliMSgpfSxbQixNLmxlbmd0aCx5LGIxXSk7bGV0IEkxPVAoKEgpPT57SShnNCh7cmF3TWVzc2FnZTpILGxhc3RGaWxlSXNIZWljOk8xLmN1cnJlbnQsc291cmNlOlF9KSl9LFtRXSkscTA9UChhc3luYyhILG0sYSk9PntsZXQgQjE9SD09PSJpbWFnZSJ8fEg9PT0idmlkZW8iLEYxPVsiY2FtZXJhIiwic3dpdGNoIixCMT8iZmlsZSI6SF07aWYoSD09PSJ3ZWJjYW0iJiZtKUYxLnB1c2goSDEobSkpO2lmKEIxKXtpZighYS50cmltKCkpcmV0dXJuIEkoIkRyb3AgYSBmaWxlIGludG8gdGhlIHBhbmVsIG9yIHBpY2sgYW5vdGhlciBzb3VyY2UuIiksITE7RjEucHVzaChIMShhLnRyaW0oKSkpfUYxLnB1c2goIi1kIixDLCItLXF1aWV0Iik7bGV0IEQxPWF3YWl0IFYxKGAke0oxfSAke0YxLmpvaW4oIiAiKX1gKTtpZihEMS5leGl0Q29kZSE9PTApcmV0dXJuIEkxKEQxLnN0ZGVyci50cmltKCl8fEQxLnN0ZG91dC50cmltKCl8fGBzd2l0Y2ggZmFpbGVkICgke0QxLmV4aXRDb2RlfSlgKSwhMTtPMS5jdXJyZW50PSExO3RyeXtsZXQgVzE9SlNPTi5wYXJzZShEMS5zdGRvdXQudHJpbSgpKTtaMShgU3dpdGNoZWQg4oaSICR7VzEuc291cmNlPz9IfSR7VzEuYXJnP2AgKCR7VzEuYXJnfSlgOiIifWApfWNhdGNoe1oxKGBTd2l0Y2hlZCDihpIgJHtIfWApfXJldHVybiEwfSxbQyxKMSxJMV0pLGoxPVAoYXN5bmMoKT0+e2lmKCEkKXJldHVybjtvKCJpbmplY3QiKSxJKG51bGwpLFoxKG51bGwpO3RyeXtsZXQgSD1bImNhbWVyYSIsSDEoJCksIi1kIixDLCItLXF1aWV0Il07aWYoUT09PSJpbWFnZSJ8fFE9PT0idmlkZW8iKXtpZighWi50cmltKCkpe0koIkRyb3AgYSBmaWxlIGludG8gdGhlIHBhbmVsIG9yIHBpY2sgYW5vdGhlciBzb3VyY2UuIik7cmV0dXJufUgucHVzaCgiLS1maWxlIixIMShaLnRyaW0oKSkpfWVsc2UgaWYoUT09PSJ3ZWJjYW0iKWlmKFIpSC5wdXNoKCItLXdlYmNhbSIsSDEoUikpO2Vsc2UgSC5wdXNoKCItLXdlYmNhbSIpO0gucHVzaCgiLS1taXJyb3IiLHgpO2xldCBtPWF3YWl0IFYxKGAke0oxfSAke0guam9pbigiICIpfWApO2lmKG0uZXhpdENvZGUhPT0wKXtJMShtLnN0ZGVyci50cmltKCl8fG0uc3Rkb3V0LnRyaW0oKXx8YGluamVjdCBmYWlsZWQgKCR7bS5leGl0Q29kZX0pYCk7cmV0dXJufU8xLmN1cnJlbnQ9ITE7bGV0IGE9bnVsbDt0cnl7bGV0IEIxPUpTT04ucGFyc2UobS5zdGRvdXQudHJpbSgpKTthPUIxLmhlbHBlclBpZD8/bnVsbDtsZXQgRjE9QjEuaGVscGVyUmVsYXVuY2hlZD09PSExPyJBdHRhY2hlZCI6IkluamVjdGVkIixEMT1CMS5waWQ/YCBwaWQgJHtCMS5waWR9YDoiIixXMT1CMS5oZWxwZXJQaWQ/YCwgaGVscGVyIHBpZCAke0IxLmhlbHBlclBpZH1gOiIiO1oxKGAke0YxfSAke0IxLnNvdXJjZT8/UX0gaW50byAkeyR9JHtEMX0ke1cxfWApfWNhdGNoe1oxKG0uc3Rkb3V0LnRyaW0oKXx8IkluamVjdGVkLiIpfSQxKCEwKSxPKFE9PT0icGxhY2Vob2xkZXIiPyJyZWFkeSI6ImFjdGl2ZSIpLGUoYSksaigoQjEpPT5CMS5oYXMoJCk/QjE6bmV3IFNldChCMSkuYWRkKCQpKSxfMS5jdXJyZW50PXh9ZmluYWxseXtvKG51bGwpfX0sWyQsQyxRLFosUix4LEoxLEkxXSksaDE9SzE/YCR7UX06OiR7UT09PSJ3ZWJjYW0iP1I6IiJ9Ojoke1E9PT0iaW1hZ2UifHxRPT09InZpZGVvIj9aOiIifWA6bnVsbCxBMT0hISQmJmguaGFzKCQpLHAxPUExJiZRIT09InBsYWNlaG9sZGVyIjtXKCgpPT57aWYoIXAxKXt3MS5jdXJyZW50PSExO3JldHVybn1pZih3MS5jdXJyZW50KXJldHVybjt3MS5jdXJyZW50PSEwLFgoITApfSxbcDFdKSxXKCgpPT57aWYoIVUxKXJldHVybjtpZighJHx8c3x8RClyZXR1cm47aWYoUSE9PSJ3ZWJjYW0ifHxSIT09VTEpcmV0dXJuO2lmKEwxKG51bGwpLEsxKXJldHVybjtqMSgpfSxbVTEsJCxzLEQsUSxSLEsxLGoxXSksVygoKT0+e2lmKCFLMSlyZXR1cm47aWYoKFE9PT0iaW1hZ2UifHxRPT09InZpZGVvIikmJiFaLnRyaW0oKSlyZXR1cm47aWYoUT09PSJ3ZWJjYW0iJiYhUilyZXR1cm47aWYoeTEuY3VycmVudCl7eTEuY3VycmVudD0hMTtyZXR1cm59bGV0IEg9ITE7cmV0dXJuKGFzeW5jKCk9PntuKCJzd2l0Y2giKSxJKG51bGwpO3RyeXtpZihIKXJldHVybjthd2FpdCBxMChRLFIsWil9ZmluYWxseXtpZighSCluKG51bGwpfX0pKCksKCk9PntIPSEwfX0sW2gxXSksVygoKT0+e2lmKCFLMSlyZXR1cm47aWYoXzEuY3VycmVudD09PXgpcmV0dXJuO2xldCBIPXgsbT0hMTtyZXR1cm4oYXN5bmMoKT0+e24oIm1pcnJvciIpLEkobnVsbCk7dHJ5e2xldCBhPWF3YWl0IFYxKGAke0oxfSBjYW1lcmEgbWlycm9yICR7SH0gLWQgJHtDfSAtLXF1aWV0YCk7aWYobSlyZXR1cm47aWYoYS5leGl0Q29kZSE9PTApe0koYS5zdGRlcnIudHJpbSgpfHxhLnN0ZG91dC50cmltKCl8fGBtaXJyb3IgZmFpbGVkICgke2EuZXhpdENvZGV9KWApO3JldHVybn1fMS5jdXJyZW50PUgsWjEoYE1pcnJvciDihpIgJHtIfWApfWZpbmFsbHl7aWYoIW0pbihudWxsKX19KSgpLCgpPT57bT0hMH19LFt4LEsxXSk7bGV0IHIxPVAoYXN5bmMoKT0+e28oInN0b3AiKSxJKG51bGwpO3RyeXtsZXQgSD1hd2FpdCBWMShgJHtKMX0gY2FtZXJhIC0tc3RvcC13ZWJjYW0gLWQgJHtDfWApO2lmKEguZXhpdENvZGUhPT0wKXtJKEguc3RkZXJyLnRyaW0oKXx8YHN0b3Atd2ViY2FtIGZhaWxlZCAoJHtILmV4aXRDb2RlfSlgKTtyZXR1cm59WjEoIkNhbWVyYSBoZWxwZXIgc3RvcHBlZC4iKSwkMSghMSksTygicmVhZHkiKSxqKG5ldyBTZXQpLF8xLmN1cnJlbnQ9Im9mZiJ9ZmluYWxseXtvKG51bGwpfX0sW0MsSjFdKSxFMT1QKGFzeW5jKEgpPT57bGV0IG09djQoe3R5cGU6SC50eXBlLG5hbWU6SC5uYW1lfSksYT1ILnR5cGUuc3RhcnRzV2l0aCgiaW1hZ2UvIil8fG0sQjE9SC50eXBlLnN0YXJ0c1dpdGgoInZpZGVvLyIpfHxJOCh7dHlwZTpILnR5cGUsbmFtZTpILm5hbWV9KTtpZighYSYmIUIxKXtPMS5jdXJyZW50PSExLEkoYFVuc3VwcG9ydGVkIGZpbGUgdHlwZTogJHtILnR5cGV8fEgubmFtZX1gKTtyZXR1cm59aWYoVCghMCksSShudWxsKSxDMShudWxsKSx4NCh7dHlwZTpILnR5cGUsbmFtZTpILm5hbWUsc2l6ZTpILnNpemV9KSlDMSh5NCk7TzEuY3VycmVudD1tO3RyeXtsZXQgRjE9VzAoSCksRDE9YXdhaXQgUDgoSCwic2VydmUtc2ltLWNhbXNyYyIsRjEsVjEpO1koSC5uYW1lKSxOKEIxPyJ2aWRlbyI6ImltYWdlIikscShEMSksWjEoYExvYWRlZCAke0gubmFtZX1gKX1jYXRjaChGMSl7aWYoTzEuY3VycmVudClJKEU4KTtlbHNlIEkoRjE/Lm1lc3NhZ2U/PyJVcGxvYWQgZmFpbGVkIil9ZmluYWxseXtUKCExKX19LFtdKSxZMD1QKGFzeW5jKEgpPT57SC5wcmV2ZW50RGVmYXVsdCgpLEguc3RvcFByb3BhZ2F0aW9uKCksay5jdXJyZW50PTAsTCghMSk7bGV0IG09SC5kYXRhVHJhbnNmZXI/LmZpbGVzPy5bMF07aWYobSlhd2FpdCBFMShtKX0sW0UxXSkseDE9UCgoKT0+e04oInBsYWNlaG9sZGVyIikscSgiIiksWShudWxsKSxJKG51bGwpLEMxKG51bGwpLE8xLmN1cnJlbnQ9ITF9LFtdKSxmMT1QKCgpPT57VS5jdXJyZW50Py5jbGljaygpfSxbXSksRzA9UChhc3luYyhIKT0+e2xldCBtPUgudGFyZ2V0LGE9bS5maWxlcz8uWzBdO2lmKG0udmFsdWU9IiIsYSlhd2FpdCBFMShhKX0sW0UxXSk7VygoKT0+e2lmKCFCKXJldHVybjtsZXQgSD0obSk9PntsZXQgYT1tLnRhcmdldDtpZihhIGluc3RhbmNlb2YgRWxlbWVudCYmYS5jbG9zZXN0KCJbZGF0YS1jYW1lcmEtc291cmNlLW1lbnVdIikpcmV0dXJuO18oITEpfTtyZXR1cm4gd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsSCksKCk9PndpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZWRvd24iLEgpfSxbQl0pO2xldCBZMT1QKChIKT0+e2lmKFMoSC5pZCksTigid2ViY2FtIiksWShudWxsKSxJKG51bGwpLE8xLmN1cnJlbnQ9ITEsXyghMSksJClMMShILmlkKX0sWyRdKSxuMT1QKCgpPT57ZigoSCk9Pkg9PT0ib24iPyJvZmYiOiJvbiIpfSxbXSksczE9IUsxfHxRPT09InBsYWNlaG9sZGVyIixsMT1QKChIKT0+e2lmKEgucHJldmVudERlZmF1bHQoKSxrLmN1cnJlbnQrKyxrLmN1cnJlbnQ9PT0xKUwoITApfSxbXSksdjE9UCgoSCk9PntpZihILnByZXZlbnREZWZhdWx0KCksSC5kYXRhVHJhbnNmZXIpSC5kYXRhVHJhbnNmZXIuZHJvcEVmZmVjdD0iY29weSJ9LFtdKSxkMT1QKChIKT0+e2lmKEgucHJldmVudERlZmF1bHQoKSxrLmN1cnJlbnQtLSxrLmN1cnJlbnQ8PTApay5jdXJyZW50PTAsTCghMSl9LFtdKSx3PUk0KHtidW5kbGVJZDokLGluamVjdGVkOksxLHNvdXJjZTpRLGZvcmVncm91bmRJc0luamVjdGVkOkExfSkscD13PT09InN0b3AiP3tsYWJlbDpkPT09InN0b3AiPyJTdG9wcGluZ+KApiI6IlN0b3AiLG9uQ2xpY2s6cjEsa2luZDoic3RvcCJ9Onc9PT0iYXR0YWNoIj97bGFiZWw6ZD09PSJpbmplY3QiPyJJbmplY3RpbmfigKYiOmBJbmplY3QgJHskfWAsb25DbGljazpqMSxraW5kOiJhdHRhY2gifTp7bGFiZWw6ZD09PSJpbmplY3QiPyJTdGFydGluZ+KApiI6IlBsYXkiLG9uQ2xpY2s6ajEsa2luZDoicGxheSJ9LHQ9dz09PSJzdG9wIj9EfHxkIT09bnVsbDohJHx8RHx8ZCE9PW51bGwsRj1RPT09InBsYWNlaG9sZGVyIix6PVE9PT0id2ViY2FtIixiPShRPT09ImltYWdlInx8UT09PSJ2aWRlbyIpJiYhIUcsbD16P00uZmluZCgoSCk9PkguaWQ9PT1SKT8ubmFtZT8/Uj8/IldlYmNhbSI6bnVsbCxyPUQ/InVwbG9hZGluZyI6Yj8iZmlsZSI6ej8id2ViY2FtIjoicGxhY2Vob2xkZXIiO3JldHVybiBKKCJkaXYiLHtjbGFzc05hbWU6ImJnLXBhbmVsIGJvcmRlciBib3JkZXItd2hpdGUvOCByb3VuZGVkLVsxMHB4XSBmbGV4IGZsZXgtY29sIGdhcC0yLjUgcHgtMyBweS0yIixjaGlsZHJlbjpbSigiYnV0dG9uIix7dHlwZToiYnV0dG9uIixvbkNsaWNrOigpPT5YKChIKT0+IUgpLGNsYXNzTmFtZToibGVtLXRvZ2dsZSBncmlkIFtncmlkLXRlbXBsYXRlLWNvbHVtbnM6YXV0b18xZnJfYXV0b10gaXRlbXMtY2VudGVyIGdhcC0yIGJnLXRyYW5zcGFyZW50IGJvcmRlci1ub25lIHRleHQtd2hpdGUvOTAgcHktMi41IHB4LTEgLW15LTIgLW14LTEgY3Vyc29yLXBvaW50ZXIgdy1bY2FsYygxMDAlKzhweCldIHRleHQtbGVmdCBtaW4taC1bMzZweF0gbGVhZGluZy1ub25lIiwiYXJpYS1leHBhbmRlZCI6SyxjaGlsZHJlbjpbSigic3BhbiIse2NsYXNzTmFtZToidGV4dC1bMTFweF0gZm9udC1zZW1pYm9sZCB0ZXh0LXdoaXRlLzUwIHVwcGVyY2FzZSB0cmFja2luZy1bMC4wOGVtXSBsZWFkaW5nLW5vbmUgaW5saW5lLWZsZXggaXRlbXMtY2VudGVyIixjaGlsZHJlbjoiQ2FtZXJhIn0pLEooUjQse3N0YXRlOlgxfSksSihvMSx7b3BlbjpLfSldfSksSyYmSigiZGl2Iix7b25EcmFnRW50ZXI6bDEsb25EcmFnT3Zlcjp2MSxvbkRyYWdMZWF2ZTpkMSxvbkRyb3A6WTAsY2xhc3NOYW1lOiJmbGV4IGZsZXgtY29sIGdhcC0yLjUiLGNoaWxkcmVuOltKKCJwIix7Y2xhc3NOYW1lOiJtLTAgdGV4dC1bMTBweF0gbGVhZGluZy1bMS41XSB0ZXh0LXdoaXRlLzQ1IixjaGlsZHJlbjoiUmVwbGFjZXMgdGhlIHNpbXVsYXRvcidzIGNhbWVyYSBmZWVkIGJ5IGluamVjdGluZyBhIGR5bGliIGF0IGFwcCBsYXVuY2ggYW5kIHN0cmVhbWluZyBmcmFtZXMgaW50byBzaGFyZWQgbWVtb3J5LiBQaWNrIG1lZGlhIG9yIGEgd2ViY2FtLCB0aGVuIFBsYXkgdG8gaW5qZWN0IGludG8gdGhlIGZvcmVncm91bmQgYXBwLiJ9KSxKKCJpbnB1dCIse3JlZjpVLHR5cGU6ImZpbGUiLGFjY2VwdDoiaW1hZ2UvKix2aWRlby8qIixjbGFzc05hbWU6ImhpZGRlbiIsb25DaGFuZ2U6RzB9KSxKKCJkaXYiLHtvbkNsaWNrOihIKT0+e2lmKCFGKXJldHVybjtpZihILnRhcmdldC5jbG9zZXN0KCJbZGF0YS1jbGVhci1tZWRpYV0iKSlyZXR1cm47ZjEoKX0sdGl0bGU6Rj8iTm8gc291cmNlIHNlbGVjdGVkIOKAlCBQbGF5IHVzZXMgYSB0ZXN0LXBhdHRlcm4gZmVlZC4gQ2xpY2sgdG8gcGljayBhbiBpbWFnZS92aWRlbywgb3IgZHJvcCBvbmUgaGVyZS4iOno/YFNvdXJjZTogJHtsfWA6YFNvdXJjZTogJHtHPz9RfWAsY2xhc3NOYW1lOlsicmVsYXRpdmUgbWluLWgtWzQ0cHhdIGZsZXggZmxleC1yb3cgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGdhcC0yLjUgcHgtMy41IHB5LTIuNSByb3VuZGVkLVs3cHhdIHRleHQtY2VudGVyIHRyYW5zaXRpb24tW2JvcmRlci1jb2xvcixiYWNrZ3JvdW5kXSBkdXJhdGlvbi0xNTAiLEY/ImJnLXdoaXRlL1swLjA0XSBib3JkZXIgYm9yZGVyLWRhc2hlZCBib3JkZXItd2hpdGUvMTIiOiJiZy13aGl0ZS9bMC4wNF0gYm9yZGVyIGJvcmRlci13aGl0ZS84IixWPyIhYmctW3JnYmEoMTAsMTMyLDI1NSwwLjA4KV0gIWJvcmRlci1bcmdiYSgxMCwxMzIsMjU1LDAuNildIjoiIixEPyJjdXJzb3ItcHJvZ3Jlc3MiOkY/ImN1cnNvci1wb2ludGVyIjoiY3Vyc29yLWRlZmF1bHQiXS5qb2luKCIgIiksY2hpbGRyZW46W0ooajQse21vZGU6cixmaWxlTmFtZTpHLHdlYmNhbU5hbWU6bCxzb3VyY2VLaW5kOlF9KSwhRiYmIUQmJkooImJ1dHRvbiIseyJkYXRhLWNsZWFyLW1lZGlhIjohMCxvbkNsaWNrOihIKT0+e0guc3RvcFByb3BhZ2F0aW9uKCkseDEoKX0sY2xhc3NOYW1lOiJzaHJpbmstMCB3LTUgaC01IGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGJnLXRyYW5zcGFyZW50IGJvcmRlci1ub25lIHRleHQtd2hpdGUvNTUgaG92ZXI6dGV4dC13aGl0ZS85MCBjdXJzb3ItcG9pbnRlciBwLTAiLCJhcmlhLWxhYmVsIjoiQ2xlYXIgc291cmNlIix0aXRsZToiQ2xlYXIg4oaSIHBsYWNlaG9sZGVyIixjaGlsZHJlbjpKKCJzdmciLHt3aWR0aDoiMTQiLGhlaWdodDoiMTQiLHZpZXdCb3g6IjAgMCAyNCAyNCIsZmlsbDoibm9uZSIsc3Ryb2tlOiJjdXJyZW50Q29sb3IiLHN0cm9rZVdpZHRoOiIyIixzdHJva2VMaW5lY2FwOiJyb3VuZCIsc3Ryb2tlTGluZWpvaW46InJvdW5kIixjaGlsZHJlbjpbSigibGluZSIse3gxOiIxOCIseTE6IjYiLHgyOiI2Iix5MjoiMTgifSksSigibGluZSIse3gxOiI2Iix5MToiNiIseDI6IjE4Iix5MjoiMTgifSldfSl9KV19KSxGJiYhRCYmSihtNCx7fSksSigiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGl0ZW1zLXN0cmV0Y2ggZ2FwLTEuNSIsY2hpbGRyZW46W0ooImRpdiIse2NsYXNzTmFtZToicmVsYXRpdmUiLCJkYXRhLWNhbWVyYS1zb3VyY2UtbWVudSI6ITAsY2hpbGRyZW46W0ooImJ1dHRvbiIse29uQ2xpY2s6KCk9Pl8oKEgpPT4hSCksY2xhc3NOYW1lOiJsZW0tZ2hvc3QgaC1mdWxsIG1pbi1oLVszNnB4XSB3LTEwIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGJnLXRyYW5zcGFyZW50IGJvcmRlciBib3JkZXItd2hpdGUvMTIgdGV4dC13aGl0ZS84NSByb3VuZGVkLVs3cHhdIGN1cnNvci1wb2ludGVyIHAtMCIsImFyaWEtaGFzcG9wdXAiOiJtZW51IiwiYXJpYS1leHBhbmRlZCI6Qix0aXRsZTpRPT09IndlYmNhbSI/YFNvdXJjZTogd2ViY2FtJHtSP2AgKCR7TS5maW5kKChIKT0+SC5pZD09PVIpPy5uYW1lPz9SfSlgOiIifSDigJQgY2xpY2sgdG8gY2hhbmdlYDpgU291cmNlOiAke1F9IOKAlCBjbGljayB0byBwaWNrIG1lZGlhIG9yIHdlYmNhbWAsImFyaWEtbGFiZWwiOiJDaG9vc2UgY2FtZXJhIHNvdXJjZSIsY2hpbGRyZW46Sigic3ZnIix7d2lkdGg6IjIwIixoZWlnaHQ6IjIwIix2aWV3Qm94OiIwIDAgMjQgMjQiLGZpbGw6Im5vbmUiLHN0cm9rZToiY3VycmVudENvbG9yIixzdHJva2VXaWR0aDoiMiIsc3Ryb2tlTGluZWNhcDoicm91bmQiLHN0cm9rZUxpbmVqb2luOiJyb3VuZCIsY2hpbGRyZW46W0ooInBhdGgiLHtkOiJtMjIgMTEtMS4yOTYtMS4yOTZhMi40IDIuNCAwIDAgMC0zLjQwOCAwTDExIDE2In0pLEooInBhdGgiLHtkOiJNNCA4YTIgMiAwIDAgMC0yIDJ2MTBhMiAyIDAgMCAwIDIgMmgxMGEyIDIgMCAwIDAgMi0yIn0pLEooImNpcmNsZSIse2N4OiIxMyIsY3k6IjciLHI6IjEiLGZpbGw6ImN1cnJlbnRDb2xvciJ9KSxKKCJyZWN0Iix7eDoiOCIseToiMiIsd2lkdGg6IjE0IixoZWlnaHQ6IjE0IixyeDoiMiJ9KV19KX0pLEImJkooImRpdiIse3JvbGU6Im1lbnUiLGNsYXNzTmFtZToiYWJzb2x1dGUgdG9wLVtjYWxjKDEwMCUrNnB4KV0gbGVmdC0wIHotMTAgbWluLXctWzIwMHB4XSBmbGV4IGZsZXgtY29sIGdhcC1weCBwLTEgYmctcGFuZWwgYm9yZGVyIGJvcmRlci13aGl0ZS84IHJvdW5kZWQtWzdweF0gc2hhZG93LVswXzhweF8yNHB4X3JnYmEoMCwwLDAsMC40KV0iLGNoaWxkcmVuOltKKCJidXR0b24iLHtyb2xlOiJtZW51aXRlbSIsY2xhc3NOYW1lOiJ0ZXh0LWxlZnQgYmctdHJhbnNwYXJlbnQgYm9yZGVyLW5vbmUgdGV4dC13aGl0ZS84NSB0ZXh0LVsxMnB4XSBweC0yLjUgcHktWzdweF0gcm91bmRlZC1tZCBjdXJzb3ItcG9pbnRlciBob3ZlcjpiZy13aGl0ZS9bMC4wNl0iLG9uQ2xpY2s6KCk9PntfKCExKSxmMSgpfSx0aXRsZToiUGljayBhbiBpbWFnZSBvciB2aWRlbyBmcm9tIGRpc2siLGNoaWxkcmVuOiJCcm93c2UgbWVkaWHigKYifSksSigiZGl2Iix7Y2xhc3NOYW1lOiJoLXB4IGJnLXdoaXRlLzggbXktMSJ9KSxKKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiBwbC0yLjUgcHItMiBwdC0xIHBiLVsycHhdIixjaGlsZHJlbjpbSigic3BhbiIse2NsYXNzTmFtZToidGV4dC1bMTBweF0gdGV4dC13aGl0ZS80NSB1cHBlcmNhc2UgdHJhY2tpbmctWzAuMDhlbV0iLGNoaWxkcmVuOnk/IkNhbWVyYXMgKGxvYWRpbmfigKYpIjpNLmxlbmd0aD09PTA/Ik5vIGNhbWVyYXMiOiJDYW1lcmFzIn0pLEooImJ1dHRvbiIse29uQ2xpY2s6KEgpPT57SC5zdG9wUHJvcGFnYXRpb24oKSxiMSgpfSxkaXNhYmxlZDp5LGNsYXNzTmFtZToiZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgdy1bMjJweF0gaC1bMjJweF0gYmctdHJhbnNwYXJlbnQgYm9yZGVyLW5vbmUgcm91bmRlZC1bNXB4XSB0ZXh0LXdoaXRlLzU1IGhvdmVyOnRleHQtd2hpdGUvOTAgY3Vyc29yLXBvaW50ZXIgcC0wIGRpc2FibGVkOm9wYWNpdHktNTAiLCJhcmlhLWxhYmVsIjoiUmVmcmVzaCBjYW1lcmFzIix0aXRsZToiUmVmcmVzaCBjYW1lcmFzIixjaGlsZHJlbjpKKEowLHtzaXplOjEzLHN0cm9rZVdpZHRoOjJ9KX0pXX0pLE0ubWFwKChIKT0+e2xldCBtPVE9PT0id2ViY2FtIiYmUj09PUguaWQ7cmV0dXJuIEooImJ1dHRvbiIse3JvbGU6Im1lbnVpdGVtIixjbGFzc05hbWU6WyJ0ZXh0LWxlZnQgYmctdHJhbnNwYXJlbnQgYm9yZGVyLW5vbmUgdGV4dC1bMTJweF0gcHgtMi41IHB5LVs3cHhdIHJvdW5kZWQtbWQgY3Vyc29yLXBvaW50ZXIgaG92ZXI6Ymctd2hpdGUvWzAuMDZdIixtPyIhYmctd2hpdGUvWzAuMTJdICF0ZXh0LXdoaXRlIjoidGV4dC13aGl0ZS84NSJdLmpvaW4oIiAiKSxvbkNsaWNrOigpPT5ZMShIKSx0aXRsZTpILm5hbWUsY2hpbGRyZW46SC5uYW1lfSxILmlkKX0pXX0pXX0pLEooImJ1dHRvbiIse29uQ2xpY2s6cC5vbkNsaWNrLGRpc2FibGVkOnQsY2xhc3NOYW1lOlsiZmxleC0xIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGdhcC0xLjUgcHktMiBweC0yLjUgYm9yZGVyLW5vbmUgcm91bmRlZC1bN3B4XSB0ZXh0LVsxMnB4XSBmb250LXNlbWlib2xkIGN1cnNvci1wb2ludGVyIGRpc2FibGVkOm9wYWNpdHktNTAgbWluLWgtWzM2cHhdIixwLmtpbmQ9PT0ic3RvcCI/ImxlbS1wcmltYXJ5IGxlbS1wcmltYXJ5LW9uIGJnLXdoaXRlL1swLjE2XSB0ZXh0LXdoaXRlIjoibGVtLXByaW1hcnkgYmctc3VjY2Vzcy1lbWVyYWxkIHRleHQtWyMwNjIwMThdIl0uam9pbigiICIpLHRpdGxlOnAua2luZD09PSJzdG9wIj8iU3RvcCB0aGUgY2FtZXJhIGhlbHBlciBhbmQgdGVybWluYXRlIGluamVjdGVkIGFwcHMiOnAua2luZD09PSJhdHRhY2giP2BJbmplY3QgJHskfSBzbyBpdCBqb2lucyB0aGUgY2FtZXJhIGZlZWRgOiEkPyJCcmluZyBhbiBhcHAgdG8gdGhlIGZvcmVncm91bmQgZmlyc3QiOiJTdGFydDogaW5qZWN0IHRoZSBkeWxpYiBhbmQgbGF1bmNoIHRoZSBmb3JlZ3JvdW5kIGFwcCB3aXRoIHRoZSBjaG9zZW4gc291cmNlIiwiYXJpYS1wcmVzc2VkIjpwLmtpbmQ9PT0ic3RvcCIsImFyaWEtbGFiZWwiOnAua2luZD09PSJzdG9wIj8iU3RvcCI6IlBsYXkiLGNoaWxkcmVuOltwLmtpbmQ9PT0ic3RvcCI/SihnMCx7fSk6Sih2MCx7fSksSigic3BhbiIse2NoaWxkcmVuOnAua2luZD09PSJzdG9wIj8iU3RvcCI6cC5raW5kPT09ImF0dGFjaCI/IkluamVjdCI6IlBsYXkifSldfSksSigiYnV0dG9uIix7dHlwZToiYnV0dG9uIixvbkNsaWNrOm4xLGRpc2FibGVkOnMxLGNsYXNzTmFtZTpgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgdy0xMCBtaW4taC1bMzZweF0gYm9yZGVyIHJvdW5kZWQtWzdweF0gZm9udC1baW5oZXJpdF0gZGlzYWJsZWQ6b3BhY2l0eS01MCBkaXNhYmxlZDpjdXJzb3Itbm90LWFsbG93ZWQgJHt4PT09Im9uIj8ibGVtLXNwZWVkIGxlbS1zcGVlZC1vbiBiZy13aGl0ZSBib3JkZXItd2hpdGUgdGV4dC1bIzBhMGEwY10gY3Vyc29yLXBvaW50ZXIiOiJsZW0tc3BlZWQgYmctd2hpdGUvWzAuMDRdIGJvcmRlci13aGl0ZS84IHRleHQtd2hpdGUvODUgY3Vyc29yLXBvaW50ZXIifWAsImFyaWEtbGFiZWwiOmBNaXJyb3I6ICR7eH0g4oCUIHRhcCB0byB0b2dnbGVgLHRpdGxlOnMxPyJNaXJyb3IgdG9nZ2xlIGF2YWlsYWJsZSBvbmNlIGEgc291cmNlIGlzIHN0cmVhbWluZyI6YE1pcnJvcjogJHt4fSDigJQgY2xpY2sgdG8gdG9nZ2xlYCwiYXJpYS1wcmVzc2VkIjp4PT09Im9uIixjaGlsZHJlbjpKKCJzdmciLHt3aWR0aDoiMjAiLGhlaWdodDoiMjAiLHZpZXdCb3g6IjAgMCAyNCAyNCIsZmlsbDp4PT09Im9uIj8iY3VycmVudENvbG9yIjoibm9uZSIsc3Ryb2tlOiJjdXJyZW50Q29sb3IiLHN0cm9rZVdpZHRoOiIyIixzdHJva2VMaW5lY2FwOiJyb3VuZCIsc3Ryb2tlTGluZWpvaW46InJvdW5kIixjaGlsZHJlbjpbSigicGF0aCIse2Q6Im0zIDcgNSA1LTUgNVY3In0pLEooInBhdGgiLHtkOiJtMjEgNy01IDUgNSA1VjcifSksSigicGF0aCIse2Q6Ik0xMiAyMHYyIn0pLEooInBhdGgiLHtkOiJNMTIgMTR2MiJ9KSxKKCJwYXRoIix7ZDoiTTEyIDh2MiJ9KSxKKCJwYXRoIix7ZDoiTTEyIDJ2MiJ9KV19KX0pXX0pLE4xJiZKKHk4LHtraW5kOiJ3YXJuaW5nIixtZXNzYWdlOk4xfSksZyYmSih5OCx7a2luZDoiZXJyb3IiLG1lc3NhZ2U6Z30pXX0pXX0pfWZ1bmN0aW9uIGg4KHtvcGVuOkMsb25DbG9zZTokLHVkaWQ6SyxjdXJyZW50QXBwOlgsYXhPdmVybGF5RW5hYmxlZDpRLG9uVG9nZ2xlQXhPdmVybGF5Ok4sd2lkdGg6Wn0pe3JldHVybiBKKE8wLHtvcGVuOkMsd2lkdGg6WixjaGlsZHJlbjpbSihUMCx7Y2hpbGRyZW46W0ooVjIse2NoaWxkcmVuOiJUb29scyJ9KSxKKE0wLHtvbkNsaWNrOiR9KV19KSxDJiZKKCJkaXYiLHtjbGFzc05hbWU6InAtMy41IG92ZXJmbG93LXktYXV0byBmbGV4LTEgZmxleCBmbGV4LWNvbCBnYXAtMyIsY2hpbGRyZW46W0ooSDgse3VkaWQ6SyxjdXJyZW50QXBwOlh9KSxKKE04LHtvdmVybGF5RW5hYmxlZDpRLG9uVG9nZ2xlT3ZlcmxheTpOfSksSihTOCx7dWRpZDpLLGJ1bmRsZUlkOlg/LmJ1bmRsZUlkPz9udWxsfSksSihGOCx7dWRpZDpLLGV4ZWM6VjF9KSxKKE84LHt1ZGlkOkssYnVuZGxlSWQ6WD8uYnVuZGxlSWQ/P251bGx9KV19KV19KX1mdW5jdGlvbiBqMChDLCQpe2ZldGNoKGcxKCJkZXZ0b29scy9oaWdobGlnaHQiKSx7bWV0aG9kOiJQT1NUIixoZWFkZXJzOnsiQ29udGVudC1UeXBlIjoiYXBwbGljYXRpb24vanNvbiJ9LGJvZHk6SlNPTi5zdHJpbmdpZnkoe3RhcmdldElkOkMsb246JH0pLGtlZXBhbGl2ZTohMH0pLmNhdGNoKCgpPT57fSl9ZnVuY3Rpb24gWTUoKXtsZXQgQz1nMSgiZGV2dG9vbHMvcmVsZWFzZSIpO3RyeXtpZih0eXBlb2YgbmF2aWdhdG9yPCJ1IiYmbmF2aWdhdG9yLnNlbmRCZWFjb24pe2xldCAkPW5ldyBCbG9iKFsie30iXSx7dHlwZToiYXBwbGljYXRpb24vanNvbiJ9KTtpZihuYXZpZ2F0b3Iuc2VuZEJlYWNvbihDLCQpKXJldHVybn19Y2F0Y2h7fWZldGNoKEMse21ldGhvZDoiUE9TVCIsaGVhZGVyczp7IkNvbnRlbnQtVHlwZSI6ImFwcGxpY2F0aW9uL2pzb24ifSxib2R5OiJ7fSIsa2VlcGFsaXZlOiEwfSkuY2F0Y2goKCk9Pnt9KX1mdW5jdGlvbiB4OChDKXtsZXQgJD1DLmNvbnRlbnREb2N1bWVudDtpZighJClyZXR1cm47bGV0IEs9KCk9PntsZXQgTj1bJF07d2hpbGUoTi5sZW5ndGgpe2xldCBaPU4ucG9wKCkscT1aLnF1ZXJ5U2VsZWN0b3JBbGwoIlthcmlhLWxhYmVsXSxbdGl0bGVdIik7Zm9yKGxldCBHIG9mIHEpe2xldCBZPUcuZ2V0QXR0cmlidXRlKCJhcmlhLWxhYmVsIil8fEcudGl0bGV8fCIiO2lmKC9edG9nZ2xlIHNjcmVlbmNhc3QkL2kudGVzdChZKSlyZXR1cm4gR31mb3IobGV0IEcgb2YgWi5xdWVyeVNlbGVjdG9yQWxsKCIqIikpaWYoRy5zaGFkb3dSb290KU4ucHVzaChHLnNoYWRvd1Jvb3QpfXJldHVybiBudWxsfSxYPTAsUT0oKT0+e1grKztsZXQgTj1LKCk7aWYoTiYmTi5nZXRBdHRyaWJ1dGUoImFyaWEtcHJlc3NlZCIpIT09ImZhbHNlIil7Ti5jbGljaygpO3JldHVybn1pZihYPDIwKXNldFRpbWVvdXQoUSwxMDApfTtRKCl9ZnVuY3Rpb24gdjgoQyl7bGV0ICQ9W10sSz1uZXcgTWFwO2ZvcihsZXQgWCBvZiBDKXtsZXQgUT1YLmFwcE5hbWV8fFguYnVuZGxlSWR8fCJVbmtub3duIixOPVguYnVuZGxlSWR8fFEsWj1LLmdldChOKTtpZighWilaPXtrZXk6TixhcHBOYW1lOlEsYnVuZGxlSWQ6WC5idW5kbGVJZCx0YXJnZXRzOltdfSxLLnNldChOLFopLCQucHVzaChOKTtaLnRhcmdldHMucHVzaChYKX1yZXR1cm4gJC5tYXAoKFgpPT5LLmdldChYKSl9ZnVuY3Rpb24gZzgoQywkKXtsZXRbSyxYXT1BKHt9KSxRPU0xKCgpPT4kLnNsaWNlKCkuc29ydCgpLmpvaW4oInwiKSxbJF0pO3JldHVybiBXKCgpPT57aWYoIUMpcmV0dXJuO2xldCBOPSExO2ZvcihsZXQgWiBvZiAkKXtpZighWiljb250aW51ZTtsZXQgcT1gJHtDfToke1p9YCxHPWIwLmdldChxKTtpZih0eXBlb2YgRz09PSJzdHJpbmcifHxHPT09bnVsbCl7WCgoWSk9PllbWl09PT1HP1k6ey4uLlksW1pdOkd9KTtjb250aW51ZX16OChWMSxDLFopLnRoZW4oKFkpPT57aWYoTilyZXR1cm47WCgoVik9Pih7Li4uVixbWl06WX0pKX0pfXJldHVybigpPT57Tj0hMH19LFtDLFFdKSxLfWZ1bmN0aW9uIFI4KHt1ZGlkOkMsdGFyZ2V0czokLHNlbGVjdGVkOkssb25TZWxlY3RUYXJnZXQ6WCxvblJlZnJlc2g6UX0pe2xldCBOPXY4KCQpLFo9Ti5tYXAoKEIpPT5CLmJ1bmRsZUlkKS5maWx0ZXIoKEIpPT4hIUIpLHE9ZzgoQyxaKSxbRyxZXT1BKCExKSxbVixMXT1BKG51bGwpLGs9dihudWxsKSxEPXYobnVsbCk7VygoKT0+e2lmKCFHKXJldHVybjtsZXQgQj0oXyk9PntpZighRC5jdXJyZW50KXJldHVybjtpZighRC5jdXJyZW50LmNvbnRhaW5zKF8udGFyZ2V0KSlZKCExKX07cmV0dXJuIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsQiksKCk9PmRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsQil9LFtHXSksVygoKT0+e2lmKEcpcmV0dXJuO2lmKGsuY3VycmVudClqMChrLmN1cnJlbnQsITEpLGsuY3VycmVudD1udWxsO1k1KCl9LFtHXSksVygoKT0+e2xldCBCPSgpPT5ZNSgpO3JldHVybiB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigicGFnZWhpZGUiLEIpLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJiZWZvcmV1bmxvYWQiLEIpLCgpPT57d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoInBhZ2VoaWRlIixCKSx3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigiYmVmb3JldW5sb2FkIixCKX19LFtdKTtsZXQgVD1LPyhLLnRpdGxlfHxLLnVybHx8Sy5hcHBOYW1lfHwiVW50aXRsZWQiKS5zbGljZSgwLDkwKToiU2VsZWN0IHRhcmdldCI7cmV0dXJuIEooImRpdiIse3JlZjpELGNsYXNzTmFtZToicmVsYXRpdmUgdy1mdWxsIG1pbi13LTAiLGNoaWxkcmVuOltKKCJidXR0b24iLHt0eXBlOiJidXR0b24iLG9uQ2xpY2s6KCk9PntZKChCKT0+e2lmKCFCKVEoKTtyZXR1cm4hQn0pfSxjbGFzc05hbWU6InctZnVsbCBtaW4tdy0wIGgtWzI2cHhdIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiBnYXAtMiBiZy1wYW5lbCB0ZXh0LXdoaXRlLzkwIGJvcmRlciBib3JkZXItd2hpdGUvMTIgcm91bmRlZC1tZCB0ZXh0LVsxMnB4XSBweC0yIGN1cnNvci1wb2ludGVyIHRleHQtbGVmdCIsImFyaWEtaGFzcG9wdXAiOiJsaXN0Ym94IiwiYXJpYS1leHBhbmRlZCI6RywiYXJpYS1sYWJlbCI6IldlYktpdCB0YXJnZXQiLGNoaWxkcmVuOltKKCJzcGFuIix7Y2xhc3NOYW1lOiJvdmVyZmxvdy1oaWRkZW4gdGV4dC1lbGxpcHNpcyB3aGl0ZXNwYWNlLW5vd3JhcCBtaW4tdy0wIixjaGlsZHJlbjpUfSksSigic3ZnIix7d2lkdGg6IjEyIixoZWlnaHQ6IjEyIix2aWV3Qm94OiIwIDAgMjQgMjQiLGZpbGw6Im5vbmUiLHN0cm9rZToiY3VycmVudENvbG9yIixzdHJva2VXaWR0aDoiMiIsc3Ryb2tlTGluZWNhcDoicm91bmQiLHN0cm9rZUxpbmVqb2luOiJyb3VuZCIsY2hpbGRyZW46SigicG9seWxpbmUiLHtwb2ludHM6IjYgOSAxMiAxNSAxOCA5In0pfSldfSksRyYmSigidWwiLHtyb2xlOiJsaXN0Ym94IixjbGFzc05hbWU6ImFic29sdXRlIHRvcC1bY2FsYygxMDAlKzRweCldIGxlZnQtMCBtLTAgcC0xIGxpc3Qtbm9uZSBiZy1wYW5lbCBib3JkZXIgYm9yZGVyLXdoaXRlLzEyIHJvdW5kZWQtbGcgc2hhZG93LVswXzhweF8yNHB4X3JnYmEoMCwwLDAsMC41KV0gbWluLXctWzIyMHB4XSBtYXgtdy1bMzYwcHhdIG1heC1oLVszMjBweF0gb3ZlcmZsb3cteS1hdXRvIHotNTAiLGNoaWxkcmVuOk4ubWFwKChCKT0+e2xldCBfPUIuYnVuZGxlSWQ/cVtCLmJ1bmRsZUlkXTpudWxsO3JldHVybiBKKCJsaSIse2NsYXNzTmFtZToibGlzdC1ub25lIG0tMCBwLTAiLGNoaWxkcmVuOltKKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggaXRlbXMtY2VudGVyIGdhcC0yIHB4LTEuNSBwdC0xIHBiLTAuNSB0ZXh0LVsxMnB4XSBmb250LXNlbWlib2xkIHRleHQtd2hpdGUvWzAuOTJdIixjaGlsZHJlbjpbXz9KKCJpbWciLHtzcmM6XyxhbHQ6IiIsY2xhc3NOYW1lOiJ3LTQgaC00IHJvdW5kZWQtWzNweF0gc2hyaW5rLTAgb2JqZWN0LWNvdmVyIn0pOkooInNwYW4iLHtjbGFzc05hbWU6InctNCBoLTQgcm91bmRlZC1bM3B4XSBzaHJpbmstMCBvYmplY3QtY292ZXIiLCJhcmlhLWhpZGRlbiI6InRydWUifSksSigic3BhbiIse2NsYXNzTmFtZToib3ZlcmZsb3ctaGlkZGVuIHRleHQtZWxsaXBzaXMgd2hpdGVzcGFjZS1ub3dyYXAiLGNoaWxkcmVuOkIuYXBwTmFtZX0pXX0pLEooInVsIix7cm9sZToiZ3JvdXAiLGNsYXNzTmFtZToibGlzdC1ub25lIG0tMCBwLTAgcGwtWzI2cHhdIixjaGlsZHJlbjpCLnRhcmdldHMubWFwKChVKT0+e2xldCBNPUs/LmlkPT09VS5pZCxFPSEhVS5pblVzZUJ5T3RoZXJJbnNwZWN0b3ImJiFNLHk9KFUudGl0bGV8fFUudXJsfHxVLmFwcE5hbWV8fCJVbnRpdGxlZCIpLnNsaWNlKDAsOTApLGM9Vj09PVUuaWQmJiFFLFI9ImZsZXggZmxleC1jb2wgcHgtMiBweS1bM3B4XSByb3VuZGVkIHRleHQtWzEycHhdIGxlYWRpbmctWzEuMzVdIjtyZXR1cm4gSigibGkiLHtyb2xlOiJvcHRpb24iLCJhcmlhLXNlbGVjdGVkIjpNLCJhcmlhLWRpc2FibGVkIjpFLHRhYkluZGV4OkU/LTE6MCx0aXRsZTpFPyJBbHJlYWR5IGJlaW5nIGluc3BlY3RlZCBieSBhbm90aGVyIGRlYnVnZ2VyIjp2b2lkIDAsb25Nb3VzZUVudGVyOigpPT57aWYoRSlyZXR1cm47aWYoay5jdXJyZW50JiZrLmN1cnJlbnQhPT1VLmlkKWowKGsuY3VycmVudCwhMSk7ay5jdXJyZW50PVUuaWQsTChVLmlkKSxqMChVLmlkLCEwKX0sb25Nb3VzZUxlYXZlOigpPT57aWYoay5jdXJyZW50PT09VS5pZClqMChVLmlkLCExKSxrLmN1cnJlbnQ9bnVsbDtMKCh4KT0+eD09PVUuaWQ/bnVsbDp4KX0sb25DbGljazooKT0+e2lmKEUpcmV0dXJuO1goVS5pZCksWSghMSl9LGNsYXNzTmFtZTpgZmxleCBmbGV4LWNvbCBweC0yIHB5LVszcHhdIHJvdW5kZWQgdGV4dC1bMTJweF0gbGVhZGluZy1bMS4zNV0gJHtFPyJvcGFjaXR5LTQwIGN1cnNvci1ub3QtYWxsb3dlZCBpdGFsaWMgdGV4dC13aGl0ZS84NSI6Yz8iYmctW3JnYmEoMTAsMTMyLDI1NSwwLjIyKV0gdGV4dC13aGl0ZS84NSBjdXJzb3ItcG9pbnRlciI6TT8iYmctd2hpdGUvWzAuMDZdIHRleHQtd2hpdGUvODUgY3Vyc29yLXBvaW50ZXIiOiJ0ZXh0LXdoaXRlLzg1IGN1cnNvci1wb2ludGVyIn1gLGNoaWxkcmVuOltKKCJzcGFuIix7Y2xhc3NOYW1lOiJibG9jayBvdmVyZmxvdy1oaWRkZW4gdGV4dC1lbGxpcHNpcyB3aGl0ZXNwYWNlLW5vd3JhcCIsY2hpbGRyZW46eX0pLFUudXJsJiZVLnVybCE9PSJhYm91dDpibGFuayImJkooInNwYW4iLHtjbGFzc05hbWU6ImJsb2NrIGZvbnQtbW9ubyB0ZXh0LVsxMHB4XSB0ZXh0LXdoaXRlL1swLjQyXSBvdmVyZmxvdy1oaWRkZW4gdGV4dC1lbGxpcHNpcyB3aGl0ZXNwYWNlLW5vd3JhcCIsY2hpbGRyZW46VS51cmx9KV19LFUuaWQpfSl9KV19LEIua2V5KX0pfSldfSl9ZnVuY3Rpb24gbTgoe29wZW46QyxvbkNsb3NlOiQsdWRpZDpLLHRhcmdldHM6WCxzZWxlY3RlZFRhcmdldElkOlEsb25TZWxlY3RUYXJnZXQ6Tixsb2FkaW5nOlosZXJyb3I6cSxvblJlZnJlc2g6Ryx3aWR0aDpZfSl7bGV0IFY9UT9YLmZpbmQoKEwpPT5MLmlkPT09USk/P251bGw6bnVsbDtyZXR1cm4gSihPMCx7b3BlbjpDLHdpZHRoOlksY2hpbGRyZW46W0ooVDAse2NoaWxkcmVuOltYLmxlbmd0aD4wP0ooUjgse3VkaWQ6Syx0YXJnZXRzOlgsc2VsZWN0ZWQ6VixvblNlbGVjdFRhcmdldDpOLG9uUmVmcmVzaDpHfSk6Sigic3BhbiIse2NsYXNzTmFtZToidGV4dC1bMTJweF0gdGV4dC13aGl0ZS9bMC40OF0gb3ZlcmZsb3ctaGlkZGVuIHRleHQtZWxsaXBzaXMgd2hpdGVzcGFjZS1ub3dyYXAiLGNoaWxkcmVuOlo/Ikxvb2tpbmcgZm9yIFNhZmFyaSBhbmQgaW5zcGVjdGFibGUgd2Vidmlld3MuLi4iOiJObyBpbnNwZWN0YWJsZSBTYWZhcmkgb3IgV0tXZWJWaWV3IHRhcmdldHMifSksSihNMCx7b25DbGljazokLGFyaWFMYWJlbDoiQ2xvc2UgV2ViS2l0IERldlRvb2xzIix0aXRsZToiQ2xvc2UiLGljb25TaXplOjE1fSldfSksSigiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4LTEgbWluLWgtMCBiZy13aGl0ZSByZWxhdGl2ZSIsY2hpbGRyZW46cT9KKCJkaXYiLHtjbGFzc05hbWU6ImgtZnVsbCBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBwLTYgYmctcGFuZWwtZGVlcCB0ZXh0LXdoaXRlL1swLjU4XSB0ZXh0LWNlbnRlciB0ZXh0LVsxM3B4XSIsY2hpbGRyZW46cX0pOlYmJkM/SigiaWZyYW1lIix7c3JjOlYuZGV2dG9vbHNGcm9udGVuZFVybCx0aXRsZTpgV2ViS2l0IERldlRvb2xzIC0gJHtWLnRpdGxlfHxWLnVybHx8Vi5pZH1gLGNsYXNzTmFtZToidy1mdWxsIGgtZnVsbCBib3JkZXItbm9uZSBibG9jayBiZy13aGl0ZSIsb25Mb2FkOihMKT0+eDgoTC5jdXJyZW50VGFyZ2V0KX0sVi5pZCk6SigiZGl2Iix7Y2xhc3NOYW1lOiJoLWZ1bGwgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgcC02IGJnLXBhbmVsLWRlZXAgdGV4dC13aGl0ZS9bMC41OF0gdGV4dC1jZW50ZXIgdGV4dC1bMTNweF0iLGNoaWxkcmVuOlY/IkRldlRvb2xzIHBhdXNlZCDigJQgb3BlbiB0aGUgcGFuZWwgdG8gcmVhdHRhY2guIjoiT3BlbiBTYWZhcmkgb3IgYW4gaW5zcGVjdGFibGUgV0tXZWJWaWV3IGluIHRoZSBzaW11bGF0b3IuIn0pfSldfSl9ZnVuY3Rpb24gajgoe2V4ZWM6Qyx1ZGlkOiQsZW5hYmxlZDpLLG9uVXBsb2FkU3RhcnQ6WCxvblVwbG9hZFByb2dyZXNzOlEsb25VcGxvYWRFbmQ6TixvblVuc3VwcG9ydGVkOlp9KXtsZXRbcSxHXT1BKCExKSxZPXYoMCksVj1QKGFzeW5jKFQpPT57aWYoVC5wcmV2ZW50RGVmYXVsdCgpLFQuc3RvcFByb3BhZ2F0aW9uKCksWS5jdXJyZW50PTAsRyghMSksIUt8fCEkKXJldHVybjtsZXQgQj1BcnJheS5mcm9tKFQuZGF0YVRyYW5zZmVyLmZpbGVzKTtpZihCLmxlbmd0aD09PTApcmV0dXJuO2ZvcihsZXQgXyBvZiBCKXtsZXQgVT13OChfKTtpZighVSl7WihfKTtjb250aW51ZX1sZXQgTT1YKF8ubmFtZSxVKTtXOChfLFUsQywkLChFKT0+UShNLEUpKS50aGVuKCgpPT5OKE0sITApKS5jYXRjaCgoRSk9Pk4oTSwhMSxFIGluc3RhbmNlb2YgRXJyb3I/RS5tZXNzYWdlOiJVcGxvYWQgZmFpbGVkIikpfX0sW0ssJCxDLFgsUSxOLFpdKSxMPVAoKFQpPT57aWYoVC5wcmV2ZW50RGVmYXVsdCgpLEspVC5kYXRhVHJhbnNmZXIuZHJvcEVmZmVjdD0iY29weSJ9LFtLXSksaz1QKChUKT0+e2lmKFQucHJldmVudERlZmF1bHQoKSwhSylyZXR1cm47aWYoWS5jdXJyZW50KyssWS5jdXJyZW50PT09MSlHKCEwKX0sW0tdKSxEPVAoKFQpPT57aWYoVC5wcmV2ZW50RGVmYXVsdCgpLFkuY3VycmVudC0tLFkuY3VycmVudDw9MClZLmN1cnJlbnQ9MCxHKCExKX0sW10pO3JldHVybntpc0RyYWdPdmVyOnEsZHJvcFpvbmVQcm9wczp7b25EcmFnT3ZlcjpMLG9uRHJhZ0VudGVyOmssb25EcmFnTGVhdmU6RCxvbkRyb3A6Vn19fWZ1bmN0aW9uIHA4KEMpe2xldFskLEtdPUEobnVsbCksWD12KG5ldyBTZXQpLFE9UCgoTik9PntyZXR1cm4gWC5jdXJyZW50LmFkZChOKSwoKT0+e1guY3VycmVudC5kZWxldGUoTil9fSxbXSk7cmV0dXJuIFcoKCk9PntpZighQylyZXR1cm47bGV0IE49bmV3IEFib3J0Q29udHJvbGxlcixaPSExLHE9bnVsbCxHPUMucmVwbGFjZSgvXC9zdHJlYW1cLm1qcGVnJC8sIiIpLFk9KF8pPT57aWYoXy53aWR0aDw9MHx8Xy5oZWlnaHQ8PTApcmV0dXJuO0soKFUpPT5VJiZVLndpZHRoPT09Xy53aWR0aCYmVS5oZWlnaHQ9PT1fLmhlaWdodCYmVS5vcmllbnRhdGlvbj09PV8ub3JpZW50YXRpb24/VTpfKX0sVj0oKT0+e2ZldGNoKGAke0d9L2NvbmZpZ2Ase3NpZ25hbDpOLnNpZ25hbH0pLnRoZW4oKF8pPT5fLmpzb24oKSkudGhlbihZKS5jYXRjaCgoKT0+e30pfTtWKCk7bGV0IEw9c2V0SW50ZXJ2YWwoViwxMDAwKSxrPW5ldyBVUkwoQyk7ay5zZWFyY2hQYXJhbXMuc2V0KCJyYXciLCIxIik7bGV0IEQ9ay50b1N0cmluZygpLFQ9KCk9PntpZihafHxOLnNpZ25hbC5hYm9ydGVkfHxxKXJldHVybjtxPXNldFRpbWVvdXQoKCk9PntxPW51bGwsQigpfSwxMDAwKX0sQj1hc3luYygpPT57dHJ5e2xldCBVPShhd2FpdCBmZXRjaChELHtzaWduYWw6Ti5zaWduYWx9KSkuYm9keT8uZ2V0UmVhZGVyKCk7aWYoIVUpe1QoKTtyZXR1cm59bGV0IE09bmV3IFVpbnQ4QXJyYXkoMCk7d2hpbGUoITApe2xldHtkb25lOkUsdmFsdWU6eX09YXdhaXQgVS5yZWFkKCk7aWYoRSlicmVhaztsZXQgYz1uZXcgVWludDhBcnJheShNLmxlbmd0aCt5Lmxlbmd0aCk7Yy5zZXQoTSksYy5zZXQoeSxNLmxlbmd0aCksTT1jO3doaWxlKCEwKXtsZXQgUj0tMTtmb3IobGV0IG89MDtvPE0ubGVuZ3RoLTE7bysrKWlmKE1bb109PT0yNTUmJk1bbysxXT09PTIxNil7Uj1vO2JyZWFrfWlmKFI9PT0tMSlicmVhaztsZXQgUz0tMTtmb3IobGV0IG89UisyO288TS5sZW5ndGgtMTtvKyspaWYoTVtvXT09PTI1NSYmTVtvKzFdPT09MjE3KXtTPW8rMjticmVha31pZihTPT09LTEpYnJlYWs7bGV0IHg9TS5zbGljZShSLFMpO009TS5zbGljZShTKTtsZXQgZj1uZXcgQmxvYihbeF0se3R5cGU6ImltYWdlL2pwZWcifSksZD1VUkwuY3JlYXRlT2JqZWN0VVJMKGYpO2lmKFguY3VycmVudC5zaXplPT09MCl7VVJMLnJldm9rZU9iamVjdFVSTChkKTtjb250aW51ZX1mb3IobGV0IG8gb2YgWC5jdXJyZW50KW8oZCl9fX1jYXRjaHt9ZmluYWxseXtUKCl9fTtyZXR1cm4gQigpLCgpPT57aWYoWj0hMCxxKWNsZWFyVGltZW91dChxKTtOLmFib3J0KCksY2xlYXJJbnRlcnZhbChMKX19LFtDXSkse3N1YnNjcmliZUZyYW1lOlEsZnJhbWU6bnVsbCxjb25maWc6JH19ZnVuY3Rpb24gVTIoQywkLEssWCl7bGV0IFE9UCgoVik9Pk1hdGgubWF4KEssTWF0aC5taW4oWCxWKSksW0ssWF0pLFtOLFpdPUEoKCk9PntpZih0eXBlb2Ygd2luZG93PiJ1IilyZXR1cm4gJDtsZXQgVj13aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0oQyksTD1WIT1udWxsP051bWJlcihWKTpOYU47cmV0dXJuIE51bWJlci5pc0Zpbml0ZShMKT9RKEwpOiR9KSxxPXR5cGVvZiB3aW5kb3c8InUiP01hdGgubWluKFgsd2luZG93LmlubmVyV2lkdGgtMzIpOlgsRz1NYXRoLm1heChLLE1hdGgubWluKHEsTikpLFk9UCgoVik9PntWLnByZXZlbnREZWZhdWx0KCk7bGV0IEw9Vi5jbGllbnRYLGs9RyxEPVYuY3VycmVudFRhcmdldDtELnNldFBvaW50ZXJDYXB0dXJlKFYucG9pbnRlcklkKTtsZXQgVD0oXyk9PntsZXQgVT1RKGsrKEwtXy5jbGllbnRYKSk7WihVKX0sQj0oXyk9PntELnJlbGVhc2VQb2ludGVyQ2FwdHVyZShfLnBvaW50ZXJJZCksRC5yZW1vdmVFdmVudExpc3RlbmVyKCJwb2ludGVybW92ZSIsVCksRC5yZW1vdmVFdmVudExpc3RlbmVyKCJwb2ludGVydXAiLEIpLEQucmVtb3ZlRXZlbnRMaXN0ZW5lcigicG9pbnRlcmNhbmNlbCIsQik7dHJ5e3dpbmRvdy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbShDLFN0cmluZyhRKGsrKEwtXy5jbGllbnRYKSkpKX1jYXRjaHt9fTtELmFkZEV2ZW50TGlzdGVuZXIoInBvaW50ZXJtb3ZlIixUKSxELmFkZEV2ZW50TGlzdGVuZXIoInBvaW50ZXJ1cCIsQiksRC5hZGRFdmVudExpc3RlbmVyKCJwb2ludGVyY2FuY2VsIixCKX0sW1EsRyxDXSk7cmV0dXJue3dpZHRoOkcsb25Qb2ludGVyRG93bjpZfX1mdW5jdGlvbiBsOCh7ZGVmYXVsdFdpZHRoOkMsdmlld3BvcnRXaWR0aDokLHZpZXdwb3J0SGVpZ2h0OkssYXNwZWN0UmF0aW86WCxvblN0YXJ0OlF9KXtsZXQgTj1fMigpLFtaLHFdPUEoITEpLFtHLFldPUEoITEpLFtWLExdPUEoITEpLGs9dihudWxsKSxEPXYoW10pLFQ9dihudWxsKSxCPXYobnVsbCksXz12KG51bGwpLFU9dihudWxsKSxNPXYobnVsbCksRT1NMSgoKT0+e2lmKHR5cGVvZiB3aW5kb3c+InUiKXJldHVybiBDO3RyeXtsZXQgTz13aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0oZTIpLGg9TyE9bnVsbD9OdW1iZXIoTyk6TmFOO3JldHVybiBOdW1iZXIuaXNGaW5pdGUoaCk/QypoOkN9Y2F0Y2h7cmV0dXJuIEN9fSxbQ10pLFt5LGNdPUEoRSksUj1DNShDLCQsSyxYKSxTPU1hdGgubWluKHgzLFIpLHg9eT8/QyxmPXcwKHgsQywkLEssWCksZD1QKChPKT0+e2xldCBoPUQyKE8pO1UuY3VycmVudD1oLGMoaCl9LFtdKSxvPVAoKE8pPT57aWYodHlwZW9mIHdpbmRvdz4idSJ8fEM8PTApcmV0dXJuO2xldCBoPXcwKE8sQywkLEssWCk7dHJ5e3dpbmRvdy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbShlMixTdHJpbmcoaC9DKSl9Y2F0Y2h7fX0sW1gsQyxLLCRdKSxRMT1QKChPKT0+e2lmKF8uY3VycmVudCE9bnVsbCljbGVhclRpbWVvdXQoXy5jdXJyZW50KTtfLmN1cnJlbnQ9c2V0VGltZW91dCgoKT0+e18uY3VycmVudD1udWxsLG8oTyl9LEs4KX0sW29dKTtXKCgpPT57aWYoWnx8RylyZXR1cm47bGV0IE89VS5jdXJyZW50O2lmKE89PW51bGwpcmV0dXJuO2xldCBoPXcwKE8sQywkLEssWCk7aWYoaCE9PU8pZChoKX0sW1gsQyxHLFosSywkLGRdKSxXKCgpPT57ZChFKX0sW0UsZF0pLFcoKCk9PntpZighWiYmIUcpcmV0dXJuO2xldCBPPWRvY3VtZW50LmJvZHkuc3R5bGUuY3Vyc29yLGg9ZG9jdW1lbnQuYm9keS5zdHlsZS51c2VyU2VsZWN0LGo9ZG9jdW1lbnQuYm9keS5zdHlsZS53ZWJraXRVc2VyU2VsZWN0O3JldHVybiBkb2N1bWVudC5ib2R5LnN0eWxlLmN1cnNvcj0ibndzZS1yZXNpemUiLGRvY3VtZW50LmJvZHkuc3R5bGUudXNlclNlbGVjdD0ibm9uZSIsZG9jdW1lbnQuYm9keS5zdHlsZS53ZWJraXRVc2VyU2VsZWN0PSJub25lIiwoKT0+e2RvY3VtZW50LmJvZHkuc3R5bGUuY3Vyc29yPU8sZG9jdW1lbnQuYm9keS5zdHlsZS51c2VyU2VsZWN0PWgsZG9jdW1lbnQuYm9keS5zdHlsZS53ZWJraXRVc2VyU2VsZWN0PWp9fSxbWixHXSksVygoKT0+e2lmKHR5cGVvZiB3aW5kb3c+InUiKXJldHVybjtsZXQgTz0oKT0+e2xldCBqPVUuY3VycmVudDtpZihqPT1udWxsKXJldHVybjtpZihfLmN1cnJlbnQhPW51bGwpY2xlYXJUaW1lb3V0KF8uY3VycmVudCksXy5jdXJyZW50PW51bGw7byhqKX0saD0oKT0+e2lmKGRvY3VtZW50LnZpc2liaWxpdHlTdGF0ZT09PSJoaWRkZW4iKU8oKX07cmV0dXJuIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJwYWdlaGlkZSIsTyksZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigidmlzaWJpbGl0eWNoYW5nZSIsaCksKCk9Pnt3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigicGFnZWhpZGUiLE8pLGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInZpc2liaWxpdHljaGFuZ2UiLGgpfX0sW29dKTtsZXQgbj1QKChPKT0+e2lmKE8+UilyZXR1cm4gUiskNShPLVIsUik7aWYoTzxTKXJldHVybiBTLSQ1KFMtTyxSKTtyZXR1cm4gT30sW1IsU10pLHM9UCgoKT0+e2lmKEIuY3VycmVudClCLmN1cnJlbnQoKSxCLmN1cnJlbnQ9bnVsbDtZKCExKX0sW10pLGc9UCgoTyk9PntsZXQgaD1wZXJmb3JtYW5jZS5ub3coKSxqPUQuY3VycmVudDtqLnB1c2goe3Q6aCx4Ok99KTt3aGlsZShqLmxlbmd0aD4xJiZoLWpbMF0udD4kOClqLnNoaWZ0KCl9LFtdKSxJPVAoKE8pPT57bGV0IGg9bihPKTtpZihULmN1cnJlbnQhPW51bGwpY2FuY2VsQW5pbWF0aW9uRnJhbWUoVC5jdXJyZW50KTtULmN1cnJlbnQ9cmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT57VC5jdXJyZW50PW51bGwsZChoKSxnKGgpfSl9LFtuLGcsZF0pLE4xPVAoKE8saCxqKT0+e3MoKTtsZXQgaT1VLmN1cnJlbnQ/P0M7ay5jdXJyZW50PXtwb2ludGVySWQ6TyxzdGFydFg6aCxzdGFydFk6aixzdGFydFdpZHRoOml9LEQuY3VycmVudD1be3Q6cGVyZm9ybWFuY2Uubm93KCkseDppfV0sUSgpLHEoITApfSxbcyxDLFFdKSxDMT1QKCgpPT57bGV0IE89ay5jdXJyZW50O2lmKGsuY3VycmVudD1udWxsLFQuY3VycmVudCE9bnVsbCljYW5jZWxBbmltYXRpb25GcmFtZShULmN1cnJlbnQpLFQuY3VycmVudD1udWxsO2lmKE8mJk8ucG9pbnRlcklkPj0wKXtsZXQgTDE9TS5jdXJyZW50O2lmKEwxPy5oYXNQb2ludGVyQ2FwdHVyZShPLnBvaW50ZXJJZCkpTDEucmVsZWFzZVBvaW50ZXJDYXB0dXJlKE8ucG9pbnRlcklkKX1xKCExKTtsZXQgaD1VLmN1cnJlbnQ/P0Msaj1ROChELmN1cnJlbnQpO0QuY3VycmVudD1bXTtsZXQgaT13MChoK2oqQzgsQywkLEssWCksZT1EMihYOChpLFtDXSxzMykpLFUxPU1hdGguYWJzKGgtZSk8MC41JiZNYXRoLmFicyhqKTw4O2lmKE58fFUxKXtkKGUpLFExKGUpO3JldHVybn1ZKCEwKSxCLmN1cnJlbnQ9Sjgoe2Zyb206aCx0bzplLHZlbG9jaXR5Omosc3RpZmZuZXNzOnQzLGRhbXBpbmc6ZTMsb25VcGRhdGU6ZCxvbkNvbXBsZXRlOigpPT57Qi5jdXJyZW50PW51bGwsWSghMSksUTEoZSl9fSl9LFtYLEMsTixRMSxLLCQsZF0pO1coKCk9PntyZXR1cm4oKT0+e2lmKHMoKSxULmN1cnJlbnQhPW51bGwpY2FuY2VsQW5pbWF0aW9uRnJhbWUoVC5jdXJyZW50KTtpZihfLmN1cnJlbnQhPW51bGwpe2lmKGNsZWFyVGltZW91dChfLmN1cnJlbnQpLFUuY3VycmVudCE9bnVsbClvKFUuY3VycmVudCl9fX0sW3Msb10pLFcoKCk9PntpZighWilyZXR1cm47bGV0IE89KCk9PkMxKCksaD0oKT0+e2lmKGRvY3VtZW50LnZpc2liaWxpdHlTdGF0ZT09PSJoaWRkZW4iKUMxKCl9LGo9KGkpPT57bGV0IGU9ay5jdXJyZW50O2lmKCFlfHxlLnBvaW50ZXJJZCE9PWkucG9pbnRlcklkKXJldHVybjtpLnByZXZlbnREZWZhdWx0KCksSShmOChlLGkuY2xpZW50WCxpLmNsaWVudFksWCkpfTtyZXR1cm4gd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImJsdXIiLE8pLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJwb2ludGVybW92ZSIsaix7Y2FwdHVyZTohMCxwYXNzaXZlOiExfSksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInBvaW50ZXJ1cCIsTywhMCksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInBvaW50ZXJjYW5jZWwiLE8sITApLGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoInZpc2liaWxpdHljaGFuZ2UiLGgpLCgpPT57d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoImJsdXIiLE8pLHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJwb2ludGVybW92ZSIsaiwhMCksd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoInBvaW50ZXJ1cCIsTywhMCksd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoInBvaW50ZXJjYW5jZWwiLE8sITApLGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInZpc2liaWxpdHljaGFuZ2UiLGgpfX0sW1gsQzEsWixJXSk7bGV0IFoxPVAoKE8pPT57bGV0IGg9ay5jdXJyZW50O2lmKCFofHxoLnBvaW50ZXJJZCE9PU8ucG9pbnRlcklkKXJldHVybjtPLnByZXZlbnREZWZhdWx0KCksTy5zdG9wUHJvcGFnYXRpb24oKSxDMSgpfSxbQzFdKSxLMT1QKChPKT0+e2lmKE8uYnV0dG9uIT09MClyZXR1cm47Ty5wcmV2ZW50RGVmYXVsdCgpLE8uc3RvcFByb3BhZ2F0aW9uKCksTy5jdXJyZW50VGFyZ2V0LnNldFBvaW50ZXJDYXB0dXJlKE8ucG9pbnRlcklkKSxOMShPLnBvaW50ZXJJZCxPLmNsaWVudFgsTy5jbGllbnRZKX0sW04xXSksJDE9UCgoTyk9PntsZXQgaD1rLmN1cnJlbnQ7aWYoIWh8fGgucG9pbnRlcklkIT09Ty5wb2ludGVySWQpcmV0dXJuO08ucHJldmVudERlZmF1bHQoKSxJKGY4KGgsTy5jbGllbnRYLE8uY2xpZW50WSxYKSl9LFtYLEldKSxYMT1QKChPKT0+e2xldCBoPU8ua2V5PT09IkFycm93UmlnaHQifHxPLmtleT09PSJBcnJvd0Rvd24iPzE6Ty5rZXk9PT0iQXJyb3dMZWZ0Inx8Ty5rZXk9PT0iQXJyb3dVcCI/LTE6MDtpZihoPT09MClyZXR1cm47Ty5wcmV2ZW50RGVmYXVsdCgpLHMoKTtsZXQgaj1PLnNoaWZ0S2V5PzgwOjI0LGk9RDIodzAoZitoKmosQywkLEssWCkpO2QoaSksUTEoaSl9LFtYLHMsZixDLFExLEssJCxkXSk7cmV0dXJue2hhbmRsZVJlZjpNLHdpZHRoOngsY29tbWl0dGVkV2lkdGg6ZixtaW5XaWR0aDpTLG1heFdpZHRoOlIsaXNSZXNpemluZzpaLGlzSW5lcnRpYTpHLGhhbmRsZUhvdmVyZWQ6VixoYW5kbGVBY3RpdmU6Vnx8Wnx8RyxzZXRIYW5kbGVIb3ZlcmVkOkwsb25Qb2ludGVyRG93bjpLMSxvblBvaW50ZXJNb3ZlOiQxLG9uUG9pbnRlckVuZDpaMSxvbktleURvd246WDF9fWZ1bmN0aW9uIGY4KEMsJCxLLFgpe2xldCBRPSQtQy5zdGFydFgsTj0oSy1DLnN0YXJ0WSkqWDtyZXR1cm4gQy5zdGFydFdpZHRoKyhNYXRoLmFicyhRKT49TWF0aC5hYnMoTik/UTpOKX1mdW5jdGlvbiB1OCgpe2xldFtDLCRdPUEoW10pLEs9UCgoTixaKT0+e2xldCBxPWNyeXB0by5yYW5kb21VVUlEKCk7cmV0dXJuICQoKEcpPT5bLi4uRyx7aWQ6cSxuYW1lOk4sa2luZDpaLHN0YXR1czoidXBsb2FkaW5nIixwcm9ncmVzczowfV0pLHF9LFtdKSxYPVAoKE4sWik9PntpZigkKChxKT0+cS5tYXAoKEcpPT5HLmlkPT09Tj97Li4uRywuLi5afTpHKSksWi5zdGF0dXM9PT0ic3VjY2VzcyJ8fFouc3RhdHVzPT09ImVycm9yIilzZXRUaW1lb3V0KCgpPT57JCgocSk9PnEuZmlsdGVyKChHKT0+Ry5pZCE9PU4pKX0sMzAwMCl9LFtdKSxRPVAoKE4sWik9PnskKChxKT0+cS5tYXAoKEcpPT5HLmlkPT09Tj97Li4uRyxwcm9ncmVzczpafTpHKSl9LFtdKTtyZXR1cm57dG9hc3RzOkMsYWRkOkssdXBkYXRlOlgsc2V0UHJvZ3Jlc3M6UX19ZnVuY3Rpb24gbzgoQywkKXtsZXRbSyxYXT1BKFtdKSxbUSxOXT1BKG51bGwpLFtaLHFdPUEoITEpLEc9UChhc3luYygpPT57aWYoIUMpcmV0dXJuO3EoITApLE4obnVsbCk7dHJ5e2xldCBZPWF3YWl0IGZldGNoKEMse2NhY2hlOiJuby1zdG9yZSJ9KSxWPWF3YWl0IFkuanNvbigpO2lmKCFZLm9rfHxWLmVycm9yKXRocm93IEVycm9yKFYuZXJyb3J8fCJGYWlsZWQgdG8gbGlzdCBXZWJLaXQgdGFyZ2V0cyIpO1goVi50YXJnZXRzPz9bXSl9Y2F0Y2goWSl7TihZIGluc3RhbmNlb2YgRXJyb3I/WS5tZXNzYWdlOiJGYWlsZWQgdG8gc3RhcnQgV2ViS2l0IERldlRvb2xzIil9ZmluYWxseXtxKCExKX19LFtDXSk7cmV0dXJuIFcoKCk9PntpZighJClyZXR1cm47RygpO2xldCBZPXNldEludGVydmFsKCgpPT52b2lkIEcoKSwyNTAwKTtyZXR1cm4oKT0+Y2xlYXJJbnRlcnZhbChZKX0sWyQsR10pLHt0YXJnZXRzOkssZXJyb3I6USxsb2FkaW5nOloscmVmcmVzaDpHfX12YXIgcDQ9e0tleUE6NCxLZXlCOjUsS2V5Qzo2LEtleUQ6NyxLZXlFOjgsS2V5Rjo5LEtleUc6MTAsS2V5SDoxMSxLZXlJOjEyLEtleUo6MTMsS2V5SzoxNCxLZXlMOjE1LEtleU06MTYsS2V5TjoxNyxLZXlPOjE4LEtleVA6MTksS2V5UToyMCxLZXlSOjIxLEtleVM6MjIsS2V5VDoyMyxLZXlVOjI0LEtleVY6MjUsS2V5VzoyNixLZXlYOjI3LEtleVk6MjgsS2V5WjoyOSxEaWdpdDE6MzAsRGlnaXQyOjMxLERpZ2l0MzozMixEaWdpdDQ6MzMsRGlnaXQ1OjM0LERpZ2l0NjozNSxEaWdpdDc6MzYsRGlnaXQ4OjM3LERpZ2l0OTozOCxEaWdpdDA6MzksRW50ZXI6NDAsRXNjYXBlOjQxLEJhY2tzcGFjZTo0MixUYWI6NDMsU3BhY2U6NDQsTWludXM6NDUsRXF1YWw6NDYsQnJhY2tldExlZnQ6NDcsQnJhY2tldFJpZ2h0OjQ4LEJhY2tzbGFzaDo0OSxTZW1pY29sb246NTEsUXVvdGU6NTIsQmFja3F1b3RlOjUzLENvbW1hOjU0LFBlcmlvZDo1NSxTbGFzaDo1NixDYXBzTG9jazo1NyxGMTo1OCxGMjo1OSxGMzo2MCxGNDo2MSxGNTo2MixGNjo2MyxGNzo2NCxGODo2NSxGOTo2NixGMTA6NjcsRjExOjY4LEYxMjo2OSxQcmludFNjcmVlbjo3MCxTY3JvbGxMb2NrOjcxLFBhdXNlOjcyLEluc2VydDo3MyxIb21lOjc0LFBhZ2VVcDo3NSxEZWxldGU6NzYsRW5kOjc3LFBhZ2VEb3duOjc4LEFycm93UmlnaHQ6NzksQXJyb3dMZWZ0OjgwLEFycm93RG93bjo4MSxBcnJvd1VwOjgyLE51bUxvY2s6ODMsTnVtcGFkRGl2aWRlOjg0LE51bXBhZE11bHRpcGx5Ojg1LE51bXBhZFN1YnRyYWN0Ojg2LE51bXBhZEFkZDo4NyxOdW1wYWRFbnRlcjo4OCxOdW1wYWQxOjg5LE51bXBhZDI6OTAsTnVtcGFkMzo5MSxOdW1wYWQ0OjkyLE51bXBhZDU6OTMsTnVtcGFkNjo5NCxOdW1wYWQ3Ojk1LE51bXBhZDg6OTYsTnVtcGFkOTo5NyxOdW1wYWQwOjk4LE51bXBhZERlY2ltYWw6OTksQ29udHJvbExlZnQ6MjI0LFNoaWZ0TGVmdDoyMjUsQWx0TGVmdDoyMjYsTWV0YUxlZnQ6MjI3LENvbnRyb2xSaWdodDoyMjgsU2hpZnRSaWdodDoyMjksQWx0UmlnaHQ6MjMwLE1ldGFSaWdodDoyMzF9O2Z1bmN0aW9uIGQ4KEMpe3JldHVybiBwNFtDXT8/bnVsbH12YXIgYzg9MzIwLGE4PTc2MCxpOD03MjA7ZnVuY3Rpb24gcjgoQyl7cmV0dXJuIEM/YCR7Qy5kZXZpY2V9OiR7Qy5waWR9OiR7Qy5zdHJlYW1Vcmx9OiR7Qy53c1VybH1gOiIifWZ1bmN0aW9uIGY0KCl7bGV0W0MsJF09QSgoKT0+d2luZG93Ll9fU0lNX1BSRVZJRVdfXz8/bnVsbCksW0ssWF09QSghMSksW1EsTl09QShbXSksW1oscV09QSghMSksW0csWV09QShudWxsKSxbVixMXT1BKG5ldyBTZXQpLFtrLERdPUEoITEpLFtULEJdPUEoITEpLFtfLFVdPUEoITEpLFtNLEVdPUEoITEpLFt5LGNdPUEobnVsbCksUj1QKGFzeW5jKCk9PntxKCEwKSxZKG51bGwpO3RyeXtsZXQgUz1hd2FpdCBWMSgieGNydW4gc2ltY3RsIGxpc3QgZGV2aWNlcyBhdmFpbGFibGUgLWoiKTtpZihTLmV4aXRDb2RlIT09MCl0aHJvdyBFcnJvcihTLnN0ZGVycnx8InNpbWN0bCBsaXN0IGZhaWxlZCIpO04oTTMoUy5zdGRvdXQpKX1jYXRjaChTKXtZKFMgaW5zdGFuY2VvZiBFcnJvcj9TLm1lc3NhZ2U6IkZhaWxlZCB0byBsaXN0IGRldmljZXMiKX1maW5hbGx5e3EoITEpfX0sW10pO2lmKFcoKCk9PntSKCl9LFtSXSksVygoKT0+e2xldCBTPW5ldyBVUkxTZWFyY2hQYXJhbXMod2luZG93LmxvY2F0aW9uLnNlYXJjaCkuZ2V0KCJkZXZpY2UiKSx4PWAke2cxKCJhcGkiKX0ke1M/YD9kZXZpY2U9JHtlbmNvZGVVUklDb21wb25lbnQoUyl9YDoiIn1gLGY9ITEsZD1hc3luYygpPT57dHJ5e2xldCBRMT1hd2FpdCBmZXRjaCh4LHtjYWNoZToibm8tc3RvcmUifSk7aWYoIVExLm9rKXJldHVybjtsZXQgbj1hd2FpdCBRMS5qc29uKCk7aWYoZilyZXR1cm47JCgocyk9PntpZihyOChzKT09PXI4KG4pKXJldHVybiBzO2lmKG4pd2luZG93Ll9fU0lNX1BSRVZJRVdfXz1uO2Vsc2UgZGVsZXRlIHdpbmRvdy5fX1NJTV9QUkVWSUVXX187cmV0dXJuIG59KX1jYXRjaHt9fTtkKCk7bGV0IG89c2V0SW50ZXJ2YWwoZCwxNTAwKTtyZXR1cm4oKT0+e2Y9ITAsY2xlYXJJbnRlcnZhbChvKX19LFtdKSxXKCgpPT57aWYoIUM/LmxvZ3NFbmRwb2ludClyZXR1cm47bGV0IFM9bmV3IEV2ZW50U291cmNlKEMubG9nc0VuZHBvaW50KSx4PW5ldyBNYXAsZj1bIiM4YmU5ZmQiLCIjNTBmYTdiIiwiI2ZmYjg2YyIsIiNmZjc5YzYiLCIjYmQ5M2Y5IiwiI2YxZmE4YyIsIiM2MjcyYTQiLCIjZmY1NTU1IiwiIzY5ZmY5NCIsIiNkNmFjZmYiLCIjZmZmZmE1IiwiI2E0ZmZmZiIsIiNmZjZlNmUiLCIjY2FhOWZhIiwiIzVhZjc4ZSJdO2Z1bmN0aW9uIGQobil7bGV0IHM9eC5nZXQobik7aWYoIXMpe2xldCBnPTA7Zm9yKGxldCBJPTA7STxuLmxlbmd0aDtJKyspZz0oZzw8NSktZytuLmNoYXJDb2RlQXQoSSl8MDtzPWZbTWF0aC5hYnMoZyklZi5sZW5ndGhdLHguc2V0KG4scyl9cmV0dXJuIHN9bGV0IG89IiIsUTE9ITE7cmV0dXJuIFMub25tZXNzYWdlPShuKT0+e3RyeXtsZXQgcz1KU09OLnBhcnNlKG4uZGF0YSksZz1zLnByb2Nlc3NJbWFnZVBhdGg/LnNwbGl0KCIvIikucG9wKCk/P3Muc2VuZGVySW1hZ2VQYXRoPy5zcGxpdCgiLyIpLnBvcCgpPz8iIixJPXMuc3Vic3lzdGVtPz8iIixOMT1zLmNhdGVnb3J5Pz8iIixDMT1zLmV2ZW50TWVzc2FnZT8/IiI7aWYoIUMxKXJldHVybjtpZihnIT09byl7aWYoUTEpY29uc29sZS5ncm91cEVuZCgpO2xldCBYMT1kKGcpO2NvbnNvbGUuZ3JvdXBDb2xsYXBzZWQoYCVjJHtnfSR7ST9gICVjJHtJfSR7TjE/IjoiK04xOiIifWA6IiJ9YCxgY29sb3I6JHtYMX07Zm9udC13ZWlnaHQ6Ym9sZGAsLi4uST9bImNvbG9yOiM4ODg7Zm9udC13ZWlnaHQ6bm9ybWFsIl06W10pLFExPSEwLG89Z31sZXQgWjE9KHMubWVzc2FnZVR5cGU/PyIiKS50b0xvd2VyQ2FzZSgpLEsxPUkmJmc9PT1vP2AlYyR7TjF8fEl9JWMgYDoiIiwkMT1LMT9bImNvbG9yOiM4ODg7Zm9udC1zdHlsZTppdGFsaWMiLCJjb2xvcjppbmhlcml0Il06W107aWYoWjE9PT0iZmF1bHQifHxaMT09PSJlcnJvciIpY29uc29sZS5sb2coYCR7SzF9JWMke0MxfWAsLi4uJDEsImNvbG9yOiNmZjU1NTUiKTtlbHNlIGlmKFoxPT09ImRlYnVnIiljb25zb2xlLmxvZyhgJHtLMX0lYyR7QzF9YCwuLi4kMSwiY29sb3I6IzYyNzJhNCIpO2Vsc2UgY29uc29sZS5sb2coYCR7SzF9JWMke0MxfWAsLi4uJDEsImNvbG9yOmluaGVyaXQiKX1jYXRjaHt9fSwoKT0+e2lmKFExKWNvbnNvbGUuZ3JvdXBFbmQoKTtTLmNsb3NlKCl9fSxbQz8ubG9nc0VuZHBvaW50XSksIUMpcmV0dXJuIEoodzMse2RldmljZXM6USxsb2FkaW5nOlosZXJyb3I6RyxvblJlZnJlc2g6Un0pO3JldHVybiBKKGw0LHtjb25maWc6QyxkZXZpY2VzOlEsZGV2aWNlc0xvYWRpbmc6WixkZXZpY2VzRXJyb3I6RyxzdG9wcGluZ1VkaWRzOlYsc2V0U3RvcHBpbmdVZGlkczpMLHN3aXRjaGluZzprLHNldFN3aXRjaGluZzpELGF4T3ZlcmxheUVuYWJsZWQ6VCxzZXRBeE92ZXJsYXlFbmFibGVkOkIsZGV2dG9vbHNPcGVuOl8sc2V0RGV2dG9vbHNPcGVuOlUsZ3JpZE9wZW46TSxzZXRHcmlkT3BlbjpFLHNlbGVjdGVkRGV2dG9vbHNUYXJnZXRJZDp5LHNldFNlbGVjdGVkRGV2dG9vbHNUYXJnZXRJZDpjLHN0cmVhbWluZzpLLHNldFN0cmVhbWluZzpYLGZldGNoRGV2aWNlczpSfSl9ZnVuY3Rpb24gbDQoe2NvbmZpZzpDLGRldmljZXM6JCxkZXZpY2VzTG9hZGluZzpLLGRldmljZXNFcnJvcjpYLHN0b3BwaW5nVWRpZHM6USxzZXRTdG9wcGluZ1VkaWRzOk4sc3dpdGNoaW5nOlosc2V0U3dpdGNoaW5nOnEsYXhPdmVybGF5RW5hYmxlZDpHLHNldEF4T3ZlcmxheUVuYWJsZWQ6WSxkZXZ0b29sc09wZW46VixzZXREZXZ0b29sc09wZW46TCxncmlkT3BlbjprLHNldEdyaWRPcGVuOkQsc2VsZWN0ZWREZXZ0b29sc1RhcmdldElkOlQsc2V0U2VsZWN0ZWREZXZ0b29sc1RhcmdldElkOkIsc3RyZWFtaW5nOl8sc2V0U3RyZWFtaW5nOlUsZmV0Y2hEZXZpY2VzOk19KXtsZXQgRT0kLmZpbmQoKHcpPT53LnVkaWQ9PT1DLmRldmljZSk/P251bGw7VygoKT0+e2RvY3VtZW50LnRpdGxlPUU/Lm5hbWU/YFNpbXVsYXRvciAtICR7RS5uYW1lfWA6IlNpbXVsYXRvciBQcmV2aWV3In0sW0U/Lm5hbWVdKTtsZXQgeT1GMChFPy5uYW1lKSxjPW84KEMuZGV2dG9vbHNFbmRwb2ludD8/ZzEoImRldnRvb2xzIiksVik7VygoKT0+e2lmKCFWKXJldHVybjtpZihUJiZjLnRhcmdldHMuc29tZSgodyk9PncuaWQ9PT1UKSlyZXR1cm47QihjLnRhcmdldHMubGVuZ3RoPT09MT9jLnRhcmdldHNbMF0uaWQ6bnVsbCl9LFtWLGMudGFyZ2V0cyxULEJdKSxXKCgpPT57QihudWxsKX0sW0MuZGV2aWNlLEJdKTtsZXQgUj1wOChDLnN0cmVhbVVybCksW1MseF09QShudWxsKSxmPVM/P1IuY29uZmlnPz9LMih5LEU/Lm5hbWUpLGQ9SjIoeSxmKSxvPVgyKHksZiksUTE9JDIoZiksbj1VMChmKSxzPW4/bi53aWR0aC9uLmhlaWdodDoxLGc9dihudWxsKTtXKCgpPT57bGV0IHc9ITEscD1udWxsLHQ9bnVsbCxGPSgpPT57aWYod3x8cClyZXR1cm47cD1zZXRUaW1lb3V0KCgpPT57cD1udWxsLHooKX0sMTAwMCl9LHo9KCk9PntsZXQgYj1uZXcgV2ViU29ja2V0KEMud3NVcmwpO2IuYmluYXJ5VHlwZT0iYXJyYXlidWZmZXIiLHQ9YixnLmN1cnJlbnQ9YixiLm9uY2xvc2U9KCk9PntpZihnLmN1cnJlbnQ9PT1iKWcuY3VycmVudD1udWxsO0YoKX0sYi5vbmVycm9yPSgpPT57Yi5jbG9zZSgpfX07cmV0dXJuIHooKSwoKT0+e2lmKHc9ITAscCljbGVhclRpbWVvdXQocCk7aWYoZy5jdXJyZW50PT09dClnLmN1cnJlbnQ9bnVsbDt0Py5jbG9zZSgpfX0sW0Mud3NVcmxdKTtsZXQgST1QKCh3LHApPT57bGV0IHQ9Zy5jdXJyZW50O2lmKCF0fHx0LnJlYWR5U3RhdGUhPT1XZWJTb2NrZXQuT1BFTilyZXR1cm47bGV0IEY9bmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKEpTT04uc3RyaW5naWZ5KHApKSx6PW5ldyBVaW50OEFycmF5KDErRi5sZW5ndGgpO3pbMF09dyx6LnNldChGLDEpLHQuc2VuZCh6KX0sW10pLE4xPVAoKHcpPT5JKDMsdyksW0ldKSxDMT1QKCh3KT0+SSg1LHcpLFtJXSksWjE9UCgodyk9PkkoNCx7YnV0dG9uOnd9KSxbSV0pLEsxPVAoKHcpPT57eCgocCk9PnAmJnAud2lkdGg9PT13LndpZHRoJiZwLmhlaWdodD09PXcuaGVpZ2h0JiZwLm9yaWVudGF0aW9uPT09dy5vcmllbnRhdGlvbj9wOncpfSxbXSksJDE9UCgodyk9PntJKDcse29yaWVudGF0aW9uOnd9KX0sW0ldKTtXKCgpPT57eChudWxsKX0sW0Muc3RyZWFtVXJsXSksVygoKT0+e2xldCB3PVIuY29uZmlnO2lmKCF3KXJldHVybjt4KChwKT0+cCYmcC53aWR0aD09PXcud2lkdGgmJnAuaGVpZ2h0PT09dy5oZWlnaHQmJnAub3JpZW50YXRpb249PT13Lm9yaWVudGF0aW9uP3A6bnVsbCl9LFtSLmNvbmZpZyxSLmNvbmZpZz8ud2lkdGgsUi5jb25maWc/LmhlaWdodCxSLmNvbmZpZz8ub3JpZW50YXRpb25dKTtsZXQgWDE9UCgodyxwKT0+e0koNix7dHlwZTp3LHVzYWdlOnB9KX0sW0ldKSxbTyxoXT1BKG51bGwpLFtqLGldPUEoITEpLHt3aWR0aDplLG9uUG9pbnRlckRvd246VTF9PVUyKCJzZXJ2ZS1zaW06dG9vbHMtcGFuZWwtd2lkdGgiLGM4LDI0MCw3MjApLHt3aWR0aDpMMSxvblBvaW50ZXJEb3duOk8xfT1VMigic2VydmUtc2ltOmRldnRvb2xzLXBhbmVsLXdpZHRoIixhOCw0MjAsMTQwMCkse3dpZHRoOnkxLG9uUG9pbnRlckRvd246XzF9PVUyKCJzZXJ2ZS1zaW06Z3JpZC1wYW5lbC13aWR0aCIsaTgsMzYwLDE0MDApLFt3MSxKMV09QSgoKT0+dHlwZW9mIHdpbmRvdzwidSI/d2luZG93LmlubmVyV2lkdGg6MCksW0cxLFIxXT1BKCgpPT50eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3cuaW5uZXJIZWlnaHQ6MCk7VygoKT0+e2xldCB3PSgpPT57SjEod2luZG93LmlubmVyV2lkdGgpLFIxKHdpbmRvdy5pbm5lckhlaWdodCl9O3JldHVybiB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigicmVzaXplIix3KSwoKT0+d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoInJlc2l6ZSIsdyl9LFtdKSxXKCgpPT57bGV0IHc9bmV3IEV2ZW50U291cmNlKEMuYXBwU3RhdGVFbmRwb2ludD8/ZzEoImFwcHN0YXRlIikpLHA9bnVsbDtyZXR1cm4gdy5vbm1lc3NhZ2U9KHQpPT57dHJ5e2xldCBGPUpTT04ucGFyc2UodC5kYXRhKTtpZihwKWNsZWFyVGltZW91dChwKTtsZXQgej1GPy5pc1JlYWN0TmF0aXZlPzA6NjAwO3A9c2V0VGltZW91dCgoKT0+aChGKSx6KX1jYXRjaHt9fSwoKT0+e2lmKHApY2xlYXJUaW1lb3V0KHApO3cuY2xvc2UoKX19LFtDLmFwcFN0YXRlRW5kcG9pbnRdKTtsZXQgbTE9UChhc3luYygpPT57WDEoImRvd24iLDIyNyksYXdhaXQgbmV3IFByb21pc2UoKHQpPT5zZXRUaW1lb3V0KHQsMzApKSxYMSgiZG93biIsMjEpLGF3YWl0IG5ldyBQcm9taXNlKCh0KT0+c2V0VGltZW91dCh0LDMwKSksWDEoInVwIiwyMSksYXdhaXQgbmV3IFByb21pc2UoKHQpPT5zZXRUaW1lb3V0KHQsMzApKSxYMSgidXAiLDIyNyl9LFtYMV0pLGIxPXYobnVsbCksW0kxLHEwXT1BKDApLFtqMSxoMV09QSgwKTtXKCgpPT57bGV0IHc9YjEuY3VycmVudDtpZighd3x8dHlwZW9mIFJlc2l6ZU9ic2VydmVyPiJ1IilyZXR1cm47bGV0IHA9bmV3IFJlc2l6ZU9ic2VydmVyKCh0KT0+e2xldCBGPXRbMF0/LmNvbnRlbnRSZWN0O3EwKEY/LndpZHRoPz8wKSxoMShGPy5oZWlnaHQ/PzApfSk7cmV0dXJuIHAub2JzZXJ2ZSh3KSwoKT0+cC5kaXNjb25uZWN0KCl9LFtdKTtsZXRbQTEscDFdPUEoITApLHIxPXYoITApO3IxLmN1cnJlbnQ9QTE7bGV0IEUxPXYobmV3IFNldCk7VygoKT0+e2xldCB3PShwKT0+e2xldCB0PSEhYjEuY3VycmVudD8uY29udGFpbnMocC50YXJnZXQpO3AxKHQpfTtyZXR1cm4gZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigicG9pbnRlcmRvd24iLHcsITApLCgpPT5kb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJwb2ludGVyZG93biIsdywhMCl9LFtdKSxXKCgpPT57aWYoQTEpcmV0dXJuO2xldCB3PUUxLmN1cnJlbnQ7aWYody5zaXplPT09MClyZXR1cm47Zm9yKGxldCBwIG9mIHcpSSg2LHt0eXBlOiJ1cCIsdXNhZ2U6cH0pO3cuY2xlYXIoKX0sW0ExLEldKSxXKCgpPT57bGV0IHc9KEYseik9PntpZighcjEuY3VycmVudClyZXR1cm47aWYoRi5jb2RlPT09IktleUgiJiZGLm1ldGFLZXkmJkYuc2hpZnRLZXkpe2lmKEYucHJldmVudERlZmF1bHQoKSx6PT09ImRvd24iJiYhRi5yZXBlYXQpSSg0LHtidXR0b246ImhvbWUifSk7cmV0dXJufWlmKEYuY29kZT09PSJLZXlBIiYmRi5tZXRhS2V5JiZGLnNoaWZ0S2V5KXtpZihGLnByZXZlbnREZWZhdWx0KCksej09PSJkb3duIiYmIUYucmVwZWF0KVYxKGB4Y3J1biBzaW1jdGwgdWkgJHtDLmRldmljZX0gYXBwZWFyYW5jZWApLnRoZW4oKGwpPT57bGV0IHI9bC5zdGRvdXQudHJpbSgpPT09ImRhcmsiPyJsaWdodCI6ImRhcmsiO3JldHVybiBWMShgeGNydW4gc2ltY3RsIHVpICR7Qy5kZXZpY2V9IGFwcGVhcmFuY2UgJHtyfWApfSkuY2F0Y2goKCk9Pnt9KTtyZXR1cm59bGV0IGI9ZDgoRi5jb2RlKTtpZihiPT1udWxsKXJldHVybjtpZihGLnByZXZlbnREZWZhdWx0KCksej09PSJkb3duIilFMS5jdXJyZW50LmFkZChiKTtlbHNlIEUxLmN1cnJlbnQuZGVsZXRlKGIpO0koNix7dHlwZTp6LHVzYWdlOmJ9KX0scD0oRik9PncoRiwiZG93biIpLHQ9KEYpPT53KEYsInVwIik7cmV0dXJuIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIixwKSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigia2V5dXAiLHQpLCgpPT57d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoImtleWRvd24iLHApLHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJrZXl1cCIsdCl9fSxbSSxDLmRldmljZV0pO2xldCBZMD1QKGFzeW5jKHcpPT57aWYoWnx8dy51ZGlkPT09Qy5kZXZpY2UpcmV0dXJuO3EoITApO3RyeXtpZih3LnN0YXRlIT09IkJvb3RlZCIpYXdhaXQgVjEoYHhjcnVuIHNpbWN0bCBib290ICR7dy51ZGlkfWApO2xldCBwPWF3YWl0IFYxKGBidW54IHNlcnZlLXNpbSAtLWRldGFjaCAke3cudWRpZH1gKTtpZihwLmV4aXRDb2RlIT09MCl0aHJvdyBFcnJvcihwLnN0ZGVycnx8IkZhaWxlZCB0byBzdGFydCBzZXJ2ZS1zaW0iKTtsZXQgdD1uZXcgVVJMKHdpbmRvdy5sb2NhdGlvbi5ocmVmKTt0LnNlYXJjaFBhcmFtcy5zZXQoImRldmljZSIsdy51ZGlkKSx3aW5kb3cubG9jYXRpb24uYXNzaWduKHQudG9TdHJpbmcoKSl9Y2F0Y2h7cSghMSl9fSxbWixDLmRldmljZSxxXSkseDE9dTgoKSxmMT1qOCh7ZXhlYzpWMSx1ZGlkOkMuZGV2aWNlLGVuYWJsZWQ6XyxvblVwbG9hZFN0YXJ0OngxLmFkZCxvblVwbG9hZFByb2dyZXNzOngxLnNldFByb2dyZXNzLG9uVXBsb2FkRW5kOih3LHAsdCk9PngxLnVwZGF0ZSh3LHtzdGF0dXM6cD8ic3VjY2VzcyI6ImVycm9yIixtZXNzYWdlOnR9KSxvblVuc3VwcG9ydGVkOih3KT0+e2xldCBwPXgxLmFkZCh3Lm5hbWUsIm1lZGlhIik7eDEudXBkYXRlKHAse3N0YXR1czoiZXJyb3IiLG1lc3NhZ2U6YFVuc3VwcG9ydGVkOiAke3cudHlwZXx8VzAodyl9YH0pfX0pLEcwPVAoYXN5bmModyk9PntOKChwKT0+bmV3IFNldChwKS5hZGQodykpO3RyeXthd2FpdCBWMShgeGNydW4gc2ltY3RsIHNodXRkb3duICR7d31gKSxhd2FpdCBNKCl9ZmluYWxseXtOKChwKT0+e2xldCB0PW5ldyBTZXQocCk7cmV0dXJuIHQuZGVsZXRlKHcpLHR9KX19LFtNLE5dKSxZMT1sOCh7ZGVmYXVsdFdpZHRoOm8sdmlld3BvcnRXaWR0aDp3MSx2aWV3cG9ydEhlaWdodDpHMSxhc3BlY3RSYXRpbzpzLG9uU3RhcnQ6KCk9PnAxKCExKX0pLG4xPVY/TDE6az95MTpqP2U6MCxzMT0xMixsMT0yNCx2MT1uMT4wP24xK2wxOjAsZDE9MDtpZihuMT4wKXtsZXQgdz13MS1zMS1uMSxwPUkxPjA/TWF0aC5taW4oSTEsWTEud2lkdGgpOlkxLndpZHRoLEY9dzEvMitwLzItKHctbDEpO2lmKEY+MCl7bGV0IHo9MipGO2QxPXo8PXYxP3o6MH19cmV0dXJuIEooTzMse2VuZHBvaW50Okc/Qz8uYXhFbmRwb2ludDp2b2lkIDAsY2hpbGRyZW46SigiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGZsZXgtY29sIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBoLXNjcmVlbiBiZy1wYWdlIHB5LTYgcGwtNiBnYXAtMyBmb250LXN5c3RlbSBib3gtYm9yZGVyIixzdHlsZTp7cGFkZGluZ1JpZ2h0OjI0K2QxLHRyYW5zaXRpb246WTEuaXNSZXNpemluZ3x8WTEuaXNJbmVydGlhPyJub25lIjp2M30sY2hpbGRyZW46W0ooImRpdiIse2NsYXNzTmFtZToiZmxleCBmbGV4LWNvbCBpdGVtcy1jZW50ZXIgZ2FwLTMgbWluLXctMCIsc3R5bGU6e3dpZHRoOlkxLndpZHRoLHRyYW5zaXRpb246WTEuaXNSZXNpemluZ3x8WTEuaXNJbmVydGlhP24yOnMyfSxjaGlsZHJlbjpbSihQMSx7ZXhlYzpWMSxvblJvdGF0ZTokMSxvcmllbnRhdGlvbjpmLm9yaWVudGF0aW9uPz9udWxsLGRldmljZVVkaWQ6Qy5kZXZpY2UsZGV2aWNlTmFtZTpFPy5uYW1lPz9udWxsLGRldmljZVJ1bnRpbWU6RT8ucnVudGltZT8/bnVsbCxzdHJlYW1pbmc6XyxjaGlsZHJlbjpbSihiMyx7ZGV2aWNlczokLHNlbGVjdGVkVWRpZDpDLmRldmljZSxsb2FkaW5nOkssZXJyb3I6WCxzdG9wcGluZ1VkaWRzOlEsb25SZWZyZXNoOk0sb25TZWxlY3Q6WTAsb25TdG9wOkcwLHRyaWdnZXI6SihQMS5UaXRsZSx7fSl9KSxKKFAxLkFjdGlvbnMse2NoaWxkcmVuOltPPy5pc1JlYWN0TmF0aXZlJiZKKFAxLkJ1dHRvbix7ImFyaWEtbGFiZWwiOiJSZWxvYWQgUmVhY3QgTmF0aXZlIGJ1bmRsZSIsdGl0bGU6IlJlbG9hZCAoQ21kK1IpIixvbkNsaWNrOigpPT52b2lkIG0xKCksY2hpbGRyZW46SihKMCx7fSl9KSxKKFAxLkhvbWVCdXR0b24se29uQ2xpY2s6KHcpPT57dy5wcmV2ZW50RGVmYXVsdCgpLFoxKCJob21lIil9fSksSihUMyx7b3ZlcmxheUVuYWJsZWQ6RyxzdHJlYW1pbmc6XyxvblRvZ2dsZU92ZXJsYXk6KCk9PlkoKHcpPT4hdyl9KSxKKFAxLlJvdGF0ZUJ1dHRvbix7dGl0bGU6IlJvdGF0ZSBkZXZpY2UifSldfSldfSksSigiZGl2Iix7cmVmOmIxLGNsYXNzTmFtZToicmVsYXRpdmUgbWF4LWgtZnVsbCIsc3R5bGU6e3dpZHRoOlkxLndpZHRoLGFzcGVjdFJhdGlvOlExLHRyYW5zaXRpb246WTEuaXNSZXNpemluZ3x8WTEuaXNJbmVydGlhP24yOnMyLHdpbGxDaGFuZ2U6WTEuaXNSZXNpemluZ3x8WTEuaXNJbmVydGlhPyJ3aWR0aCI6dm9pZCAwfSwuLi5mMS5kcm9wWm9uZVByb3BzLGNoaWxkcmVuOltKKEMyLHt1cmw6Qy51cmwsc3R5bGU6e3dpZHRoOiIxMDAlIixoZWlnaHQ6IjEwMCUiLGJvcmRlcjoibm9uZSIscG9pbnRlckV2ZW50czpZMS5pc1Jlc2l6aW5nfHxZMS5pc0luZXJ0aWE/Im5vbmUiOnZvaWQgMH0saW1hZ2VTdHlsZTp7Ym9yZGVyUmFkaXVzOmQsY29ybmVyU2hhcGU6InN1cGVyZWxsaXBzZSgxLjMpIixib3JkZXJXaWR0aDoiMXB4Iixib3JkZXJTdHlsZToic29saWQiLGJvcmRlckNvbG9yOiJyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMikifSxoaWRlQ29udHJvbHM6ITAsb25TdHJlYW1pbmdDaGFuZ2U6VSxvblN0cmVhbVRvdWNoOk4xLG9uU3RyZWFtTXVsdGlUb3VjaDpDMSxvblN0cmVhbUJ1dHRvbjpaMSxzdWJzY3JpYmVGcmFtZTpSLnN1YnNjcmliZUZyYW1lLHN0cmVhbUZyYW1lOlIuZnJhbWUsc3RyZWFtQ29uZmlnOmYsb25TY3JlZW5Db25maWdDaGFuZ2U6SzF9KSxHJiZKKEEzLHt9KSxmMS5pc0RyYWdPdmVyJiZKKCJkaXYiLHtjbGFzc05hbWU6ImFic29sdXRlIGluc2V0LTAgZmxleCBmbGV4LWNvbCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgZ2FwLTIgYm9yZGVyLTIgYm9yZGVyLWRhc2hlZCBib3JkZXItYWNjZW50IGJnLVtyZ2JhKDk5LDEwMiwyNDEsMC4xMildIGJhY2tkcm9wLWJsdXItWzJweF0gdGV4dC1hY2NlbnQgcG9pbnRlci1ldmVudHMtbm9uZSB6LTIwIixzdHlsZTp7Ym9yZGVyUmFkaXVzOmR9LGNoaWxkcmVuOltKKCJzdmciLHt3aWR0aDoiMzIiLGhlaWdodDoiMzIiLHZpZXdCb3g6IjAgMCAyNCAyNCIsZmlsbDoibm9uZSIsc3Ryb2tlOiJjdXJyZW50Q29sb3IiLHN0cm9rZVdpZHRoOiIxLjUiLHN0cm9rZUxpbmVjYXA6InJvdW5kIixzdHJva2VMaW5lam9pbjoicm91bmQiLGNoaWxkcmVuOltKKCJwYXRoIix7ZDoiTTIxIDE1djRhMiAyIDAgMCAxLTIgMkg1YTIgMiAwIDAgMS0yLTJ2LTQifSksSigicG9seWxpbmUiLHtwb2ludHM6IjE3IDggMTIgMyA3IDgifSksSigibGluZSIse3gxOiIxMiIseTE6IjMiLHgyOiIxMiIseTI6IjE1In0pXX0pLEooInNwYW4iLHtjbGFzc05hbWU6InRleHQtWzEzcHhdIGZvbnQtbWVkaXVtIixjaGlsZHJlbjoiRHJvcCBtZWRpYSBvciAuaXBhIn0pXX0pLEooWTgse3NpbXVsYXRvclJlc2l6ZTpZMSxkZXZpY2VUeXBlOnksc3RyZWFtQ29uZmlnOmYsY29udGFpbmVyV2lkdGg6STF8fFkxLndpZHRoLGNvbnRhaW5lckhlaWdodDpqMXx8KHM+MD9ZMS53aWR0aC9zOjApfSksSihHOCx7d2lkdGg6STF8fFkxLndpZHRoLGhlaWdodDpqMXx8KHM+MD9ZMS53aWR0aC9zOjApLHZpc2libGU6WTEuaXNSZXNpemluZ3x8WTEuaXNJbmVydGlhfSldfSldfSkseDEudG9hc3RzLmxlbmd0aD4wJiZKKCJkaXYiLHtjbGFzc05hbWU6ImZpeGVkIGJvdHRvbS00IHJpZ2h0LTQgZmxleCBmbGV4LWNvbCBnYXAtMS41IG1heC13LVszMjBweF0gei0zMCIsY2hpbGRyZW46eDEudG9hc3RzLm1hcCgodyk9PntsZXQgcD13LnN0YXR1cz09PSJlcnJvciIsdD13LnN0YXR1cz09PSJ1cGxvYWRpbmciLEY9dCYmdy5wcm9ncmVzcyE9PW51bGwsej13LnByb2dyZXNzIT1udWxsP01hdGgucm91bmQody5wcm9ncmVzcyoxMDApOjA7cmV0dXJuIEooImRpdiIse2NsYXNzTmFtZTpgZmxleCBmbGV4LWNvbCBnYXAtMS41IHB4LTMgcHktMiBiZy1wYW5lbCBib3JkZXIgYm9yZGVyLXdoaXRlLzEyIHJvdW5kZWQtbGcgdGV4dC13aGl0ZS85MCB0ZXh0LVsxMnB4XSBmb250LW1vbm8gc2hhZG93LVswXzRweF8xMnB4X3JnYmEoMCwwLDAsMC40KV0gJHtwPyJzZWxlY3QtdGV4dCBjdXJzb3ItdGV4dCI6InNlbGVjdC1ub25lIGN1cnNvci1kZWZhdWx0In1gLGNoaWxkcmVuOltKKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggaXRlbXMtY2VudGVyIGdhcC0yIixjaGlsZHJlbjpbSigic3BhbiIse2NsYXNzTmFtZToic2l6ZS0xLjUgcm91bmRlZC1mdWxsIHNocmluay0wIFt0cmFuc2l0aW9uOmJhY2tncm91bmRfMC4zc10iLHN0eWxlOntiYWNrZ3JvdW5kOnQ/IiNhNWI0ZmMiOncuc3RhdHVzPT09InN1Y2Nlc3MiPyIjNGFkZTgwIjoiI2Y4NzE3MSJ9fSksSigic3BhbiIse2NsYXNzTmFtZToiZmxleC0xIG92ZXJmbG93LWhpZGRlbiB0ZXh0LWVsbGlwc2lzIHdoaXRlc3BhY2Utbm93cmFwIixjaGlsZHJlbjpbdCYmRiYmYFVwbG9hZGluZyAke3cubmFtZX3igKYgJHt6fSVgLHQmJiFGJiYody5raW5kPT09ImlwYSI/YEluc3RhbGxpbmcgJHt3Lm5hbWV94oCmYDpgQWRkaW5nICR7dy5uYW1lfeKApmApLHcuc3RhdHVzPT09InN1Y2Nlc3MiJiYody5raW5kPT09ImlwYSI/YEluc3RhbGxlZCAke3cubmFtZX1gOmBBZGRlZCAke3cubmFtZX0gdG8gUGhvdG9zYCkscCYmYCR7dy5uYW1lfTogJHt3Lm1lc3NhZ2U/PyJVcGxvYWQgZmFpbGVkIn1gXX0pXX0pLHQmJkooImRpdiIse2NsYXNzTmFtZToicmVsYXRpdmUgaC1bM3B4XSB3LWZ1bGwgYmctd2hpdGUvOCByb3VuZGVkLVsycHhdIG92ZXJmbG93LWhpZGRlbiIsY2hpbGRyZW46Rj9KKCJkaXYiLHtjbGFzc05hbWU6ImgtZnVsbCBiZy1hY2NlbnQgcm91bmRlZC1bMnB4XSBbdHJhbnNpdGlvbjp3aWR0aF8xMjBtc19saW5lYXJdIixzdHlsZTp7d2lkdGg6YCR7en0lYH19KTpKKCJkaXYiLHtjbGFzc05hbWU6InNlcnZlLXNpbS10b2FzdC1pbmRldGVybWluYXRlIGFic29sdXRlIHRvcC0wIGxlZnQtMCBoLWZ1bGwgdy1bNDAlXSBiZy1hY2NlbnQgcm91bmRlZC1bMnB4XSJ9KX0pXX0sdy5pZCl9KX0pLEooImRpdiIse2NsYXNzTmFtZTpgZml4ZWQgdG9wLTMgcmlnaHQtMyBmbGV4IGZsZXgtY29sIGdhcC0xIHAtMSBiZy1wYW5lbC1iZyBib3JkZXIgYm9yZGVyLXdoaXRlLzggcm91bmRlZC1bMTBweF0gYmFja2Ryb3AtYmx1ci1bMTJweF0gWy13ZWJraXQtYmFja2Ryb3AtZmlsdGVyOmJsdXIoMTJweCldIFt0cmFuc2l0aW9uOm9wYWNpdHlfMC4xOHNfZWFzZV0gei00MCAke2p8fFZ8fGs/Im9wYWNpdHktMCBwb2ludGVyLWV2ZW50cy1ub25lIjoib3BhY2l0eS0xMDAgcG9pbnRlci1ldmVudHMtYXV0byJ9YCxjaGlsZHJlbjpbSigiYnV0dG9uIix7b25DbGljazooKT0+e0woITEpLEQoITEpLGkoKHcpPT4hdyl9LGNsYXNzTmFtZToidy1bMzBweF0gaC1bMzBweF0gZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgYmctdHJhbnNwYXJlbnQgYm9yZGVyLW5vbmUgcm91bmRlZC1tZCB0ZXh0LVsjOGU4ZTkzXSBjdXJzb3ItcG9pbnRlciBbdHJhbnNpdGlvbjpiYWNrZ3JvdW5kXzAuMTVzX2Vhc2UsY29sb3JfMC4xNXNfZWFzZV0gaG92ZXI6Ymctd2hpdGUvOCBob3Zlcjp0ZXh0LXdoaXRlIiwiYXJpYS1sYWJlbCI6Ik9wZW4gdG9vbHMgcGFuZWwiLCJhcmlhLXByZXNzZWQiOmosdGl0bGU6IlRvb2xzIixjaGlsZHJlbjpKKCJzdmciLHt3aWR0aDoiMTgiLGhlaWdodDoiMTgiLHZpZXdCb3g6IjAgMCAyNCAyNCIsZmlsbDoibm9uZSIsc3Ryb2tlOiJjdXJyZW50Q29sb3IiLHN0cm9rZVdpZHRoOiIxLjc1IixzdHJva2VMaW5lY2FwOiJyb3VuZCIsc3Ryb2tlTGluZWpvaW46InJvdW5kIixjaGlsZHJlbjpbSigicmVjdCIse3g6IjMiLHk6IjQiLHdpZHRoOiIxOCIsaGVpZ2h0OiIxNiIscng6IjIuNSJ9KSxKKCJsaW5lIix7eDE6IjE1Iix5MToiNCIseDI6IjE1Iix5MjoiMjAifSldfSl9KSxKKCJidXR0b24iLHtvbkNsaWNrOigpPT57aSghMSksRCghMSksTCgodyk9PiF3KX0sY2xhc3NOYW1lOiJ3LVszMHB4XSBoLVszMHB4XSBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBiZy10cmFuc3BhcmVudCBib3JkZXItbm9uZSByb3VuZGVkLW1kIHRleHQtWyM4ZThlOTNdIGN1cnNvci1wb2ludGVyIFt0cmFuc2l0aW9uOmJhY2tncm91bmRfMC4xNXNfZWFzZSxjb2xvcl8wLjE1c19lYXNlXSBob3ZlcjpiZy13aGl0ZS84IGhvdmVyOnRleHQtd2hpdGUiLCJhcmlhLWxhYmVsIjoiT3BlbiBXZWJLaXQgRGV2VG9vbHMiLCJhcmlhLXByZXNzZWQiOlYsdGl0bGU6IldlYktpdCBEZXZUb29scyIsY2hpbGRyZW46Sigic3ZnIix7d2lkdGg6IjE4IixoZWlnaHQ6IjE4Iix2aWV3Qm94OiIwIDAgMjQgMjQiLGZpbGw6Im5vbmUiLHN0cm9rZToiY3VycmVudENvbG9yIixzdHJva2VXaWR0aDoiMS43NSIsc3Ryb2tlTGluZWNhcDoicm91bmQiLHN0cm9rZUxpbmVqb2luOiJyb3VuZCIsY2hpbGRyZW46W0ooImNpcmNsZSIse2N4OiIxMiIsY3k6IjEyIixyOiIxMCJ9KSxKKCJwYXRoIix7ZDoiTTEyIDJhMTQuNSAxNC41IDAgMCAwIDAgMjAgMTQuNSAxNC41IDAgMCAwIDAtMjAifSksSigicGF0aCIse2Q6Ik0yIDEyaDIwIn0pXX0pfSksSigiYnV0dG9uIix7b25DbGljazooKT0+e2koITEpLEwoITEpLEQoKHcpPT4hdyl9LGNsYXNzTmFtZToidy1bMzBweF0gaC1bMzBweF0gZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgYmctdHJhbnNwYXJlbnQgYm9yZGVyLW5vbmUgcm91bmRlZC1tZCB0ZXh0LVsjOGU4ZTkzXSBjdXJzb3ItcG9pbnRlciBbdHJhbnNpdGlvbjpiYWNrZ3JvdW5kXzAuMTVzX2Vhc2UsY29sb3JfMC4xNXNfZWFzZV0gaG92ZXI6Ymctd2hpdGUvOCBob3Zlcjp0ZXh0LXdoaXRlIiwiYXJpYS1sYWJlbCI6Ik9wZW4gc2ltdWxhdG9yIGdyaWQiLCJhcmlhLXByZXNzZWQiOmssdGl0bGU6IlNpbXVsYXRvcnMiLGNoaWxkcmVuOkooInN2ZyIse3dpZHRoOiIxOCIsaGVpZ2h0OiIxOCIsdmlld0JveDoiMCAwIDI0IDI0IixmaWxsOiJub25lIixzdHJva2U6ImN1cnJlbnRDb2xvciIsc3Ryb2tlV2lkdGg6IjEuNzUiLHN0cm9rZUxpbmVjYXA6InJvdW5kIixzdHJva2VMaW5lam9pbjoicm91bmQiLGNoaWxkcmVuOltKKCJyZWN0Iix7eDoiMyIseToiMyIsd2lkdGg6IjciLGhlaWdodDoiNyIscng6IjEuNSJ9KSxKKCJyZWN0Iix7eDoiMTQiLHk6IjMiLHdpZHRoOiI3IixoZWlnaHQ6IjciLHJ4OiIxLjUifSksSigicmVjdCIse3g6IjMiLHk6IjE0Iix3aWR0aDoiNyIsaGVpZ2h0OiI3IixyeDoiMS41In0pLEooInJlY3QiLHt4OiIxNCIseToiMTQiLHdpZHRoOiI3IixoZWlnaHQ6IjciLHJ4OiIxLjUifSldfSl9KV19KSxKKGg4LHtvcGVuOmosb25DbG9zZTooKT0+aSghMSksdWRpZDpDLmRldmljZSxjdXJyZW50QXBwOk8sYXhPdmVybGF5RW5hYmxlZDpHLG9uVG9nZ2xlQXhPdmVybGF5OigpPT5ZKCh3KT0+IXcpLHdpZHRoOmV9KSxKKEIyLHtwYW5lbFdpZHRoOmUsdmlzaWJsZTpqLG9uUG9pbnRlckRvd246VTEsYXJpYUxhYmVsOiJSZXNpemUgdG9vbHMgcGFuZWwifSksSihTMyx7b3BlbjprLG9uQ2xvc2U6KCk9PkQoITEpLGN1cnJlbnRVZGlkOkMuZGV2aWNlLHdpZHRoOnkxfSksSihCMix7cGFuZWxXaWR0aDp5MSx2aXNpYmxlOmssb25Qb2ludGVyRG93bjpfMSxhcmlhTGFiZWw6IlJlc2l6ZSBzaW11bGF0b3JzIHBhbmVsIn0pLEoobTgse29wZW46VixvbkNsb3NlOigpPT5MKCExKSx1ZGlkOkMuZGV2aWNlLHRhcmdldHM6Yy50YXJnZXRzLHNlbGVjdGVkVGFyZ2V0SWQ6VCxvblNlbGVjdFRhcmdldDpCLGxvYWRpbmc6Yy5sb2FkaW5nLGVycm9yOmMuZXJyb3Isb25SZWZyZXNoOigpPT52b2lkIGMucmVmcmVzaCgpLHdpZHRoOkwxfSksSihCMix7cGFuZWxXaWR0aDpMMSx2aXNpYmxlOlYsb25Qb2ludGVyRG93bjpPMSxhcmlhTGFiZWw6IlJlc2l6ZSBXZWJLaXQgRGV2VG9vbHMgcGFuZWwifSksSigiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMi41IHRleHQtWzEycHhdIGZvbnQtbW9ubyB0ZXh0LXdoaXRlLzQwIixjaGlsZHJlbjpKKCJzcGFuIix7Y2xhc3NOYW1lOiJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtWzVweF0gW3RyYW5zaXRpb246Y29sb3JfMC4zc10iLHN0eWxlOntjb2xvcjpfPyIjNGFkZTgwIjoiIzY2NiJ9LGNoaWxkcmVuOltKKCJzcGFuIix7Y2xhc3NOYW1lOiJzaXplLTEuNSByb3VuZGVkLWZ1bGwgW3RyYW5zaXRpb246YmFja2dyb3VuZF8wLjNzXSIsc3R5bGU6e2JhY2tncm91bmQ6Xz8iIzRhZGU4MCI6IiM2NjYifX0pLF8/ImxpdmUiOiJjb25uZWN0aW5nIl19KX0pXX0pfSl9cjUoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInJvb3QiKSkucmVuZGVyKEooZjQse30pKTsKPC9zY3JpcHQ+CjwvYm9keT48L2h0bWw+","base64").toString("utf-8");return Ne}function eC(){try{let _=c_("xcrun simctl list devices -j",{encoding:"utf-8",stdio:["ignore","pipe","ignore"],timeout:3000}),e=JSON.parse(_),S=[];for(let[t,s]of Object.entries(e.devices)){if(!/SimRuntime\.iOS-/i.test(t))continue;for(let i of s){if(i.isAvailable===!1)continue;S.push({...i,runtime:t.replace(/^.*SimRuntime\./,"")})}}return S}catch{return[]}}function tC(){try{let _=Number(c_("sysctl -n hw.memsize",{encoding:"utf-8",stdio:["ignore","pipe","ignore"],timeout:1500}).trim()),e=Number(c_("sysctl -n hw.pagesize",{encoding:"utf-8",stdio:["ignore","pipe","ignore"],timeout:1500}).trim()),S=c_("vm_stat",{encoding:"utf-8",stdio:["ignore","pipe","ignore"],timeout:1500}),t=(i)=>{let C=S.match(i);return C?Number(C[1]):0},s=t(/Pages free:\s+(\d+)/)+t(/Pages inactive:\s+(\d+)/)+t(/Pages speculative:\s+(\d+)/);return{totalBytes:Number.isFinite(_)?_:0,availableBytes:s*(Number.isFinite(e)?e:4096)}}catch{return{totalBytes:0,availableBytes:0}}}function sC(){try{let _=c_("ps -axo rss=,args=",{encoding:"utf-8",stdio:["ignore","pipe","ignore"],timeout:3000,maxBuffer:8388608}),e={},S=0,t=/\/Devices\/([0-9A-F-]{36})\//i;for(let s of _.split(`
40
+ `)){let i=s.trimStart();if(!i)continue;let C=t.exec(i);if(!C)continue;let n=Number(i.split(/\s+/,1)[0]);if(!Number.isFinite(n))continue;let $=n*1024,A=C[1].toUpperCase();e[A]=(e[A]??0)+$,S+=$}return{perUdid:e,totalBytes:S}}catch{return{perUdid:{},totalBytes:0}}}function iC(){let{totalBytes:_,availableBytes:e}=tC(),S=sC(),t=Object.keys(S.perUdid).length,s=t>0?S.totalBytes/t:0,i=s>=268435456?"measured":"estimated",C=i==="measured"?s:SC,n=C>0?Math.max(0,Math.floor(e/C)):0;return{totalBytes:_,availableBytes:e,runningSimulators:t,perSimAvgBytes:C,perSimSource:i,estimatedAdditional:n}}function CC(){if(process.argv[0]&&/(^|\/)serve-sim$/.test(process.argv[0]))return{command:process.argv[0],baseArgs:[]};if(process.argv[1]&&/(^|\/)serve-sim\.js$/.test(process.argv[1]))return{command:process.argv[0],baseArgs:[process.argv[1]]};try{let _=c_("command -v serve-sim",{encoding:"utf-8",stdio:["ignore","pipe","ignore"],timeout:1500}).trim();if(_)return{command:_,baseArgs:[]}}catch{}return null}function rC(_,e){let S=Buffer.from(_),t=Buffer.from(e);if(S.length!==t.length)return!1;return Ii(S,t)}function $C(_){if(!_)return!1;return _.split(";",1)[0].trim().toLowerCase()==="application/json"}function AC(_){let e=(_?.basePath??"/.sim").replace(/\/+$/,""),S=_?.execToken??Gi(32).toString("base64url");return(t,s,i)=>{let C=t.url??"",n=C.indexOf("?"),$=n===-1?C:C.slice(0,n),A=Ji(C)??_?.device??null,B=e==="/"?"/devtools-frontend":`${e}/devtools-frontend`;if($===B||$.startsWith(`${B}/`)){(async()=>{let c=$===B?"inspector.html":$.slice(B.length+1);if(c.split("/").some((a)=>a==="..")){s.writeHead(400,{"Content-Type":"text/plain; charset=utf-8"}),s.end("Invalid asset path");return}try{let a=await fetch(`https://chrome-devtools-frontend.appspot.com/serve_rev/@${qi}/${c}${n===-1?"":C.slice(n)}`),u={"Cache-Control":"public, max-age=604800"},v=a.headers.get("content-type");if(v)u["Content-Type"]=v;s.writeHead(a.status,u),s.end(Buffer.from(await a.arrayBuffer()))}catch(a){s.writeHead(502,{"Content-Type":"text/plain; charset=utf-8"}),s.end(a instanceof Error?a.message:"Failed to load DevTools frontend")}})();return}if($===e||$===e+"/"){let c=y_(),a=a_(c,A),u=_C();if(!a){let v=JSON.stringify({basePath:e,execToken:S});u=u.replace("<!--__SIM_PREVIEW_CONFIG__-->",`<script>window.__SIM_PREVIEW__=${v}</script>`)}if(a){let O=`<script>window.__SIM_PREVIEW__=${JSON.stringify(he(a,e,xS(),S))}</script>`;u=u.replace("<!--__SIM_PREVIEW_CONFIG__-->",O)}s.writeHead(200,{"Content-Type":"text/html; charset=utf-8","Cache-Control":"no-store"}),s.end(u);return}if($===e+"/grid/api/memory"){s.writeHead(200,{"Content-Type":"application/json","Cache-Control":"no-store"}),s.end(JSON.stringify(iC()));return}if($===e+"/grid/api"){let c=y_(),a=new Map(c.map((F)=>[F.device,F])),v=eC().map((F)=>{let E=a.get(F.udid);return{device:F.udid,name:F.name,runtime:F.runtime,state:F.state,helper:E?{port:E.port,url:E.url,streamUrl:E.streamUrl,wsUrl:E.wsUrl}:null}}),O=(F)=>{if(/iphone/i.test(F))return 0;if(/ipad/i.test(F))return 1;if(/watch/i.test(F))return 2;if(/(apple\s*tv|^tv\b)/i.test(F))return 3;if(/vision|reality/i.test(F))return 4;return 5},p=(F)=>F.helper?0:F.state==="Booted"?1:2;v.sort((F,E)=>O(F.name)-O(E.name)||p(F)-p(E)||F.name.localeCompare(E.name)),s.writeHead(200,{"Content-Type":"application/json","Cache-Control":"no-store"}),s.end(JSON.stringify({devices:v}));return}if($===e+"/grid/api/shutdown"&&t.method==="POST"){let c="";t.on("data",(a)=>{c+=typeof a==="string"?a:a.toString()}),t.on("end",()=>{let a="";try{a=JSON.parse(c).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(a)){s.writeHead(400,{"Content-Type":"application/json"}),s.end(JSON.stringify({ok:!1,error:"Invalid or missing udid"}));return}m_={at:0,booted:null},jS("xcrun",["simctl","shutdown",a],{timeout:30000},(u,v,O)=>{if(u){s.writeHead(500,{"Content-Type":"application/json"}),s.end(JSON.stringify({ok:!1,error:O?.toString().trim()||u.message}));return}s.writeHead(200,{"Content-Type":"application/json"}),s.end(JSON.stringify({ok:!0}))})});return}if($===e+"/grid/api/start"&&t.method==="POST"){let c="";t.on("data",(a)=>{c+=typeof a==="string"?a:a.toString()}),t.on("end",()=>{let a="";try{a=JSON.parse(c).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(a)){s.writeHead(400,{"Content-Type":"application/json"}),s.end(JSON.stringify({ok:!1,error:"Invalid or missing udid"}));return}let u=CC();if(!u){s.writeHead(500,{"Content-Type":"application/json"}),s.end(JSON.stringify({ok:!1,error:"serve-sim CLI not found in PATH. Install it (npm i -g serve-sim) and retry."}));return}let v=ge(u.command,[...u.baseArgs,"--detach",a],{stdio:["ignore","pipe","pipe"],detached:!1}),O="",p="";v.stdout?.on("data",(E)=>{O+=E.toString()}),v.stderr?.on("data",(E)=>{p+=E.toString()});let F=setTimeout(()=>{try{v.kill("SIGTERM")}catch{}},180000);v.on("close",(E)=>{if(clearTimeout(F),E===0)s.writeHead(200,{"Content-Type":"application/json"}),s.end(JSON.stringify({ok:!0,stdout:O.trim()}));else s.writeHead(500,{"Content-Type":"application/json"}),s.end(JSON.stringify({ok:!1,error:p.trim()||O.trim()||`serve-sim exited with code ${E}`}))})});return}if($===e+"/devtools"){(async()=>{let c=y_();if(!a_(c,A)){s.writeHead(404,{"Content-Type":"application/json"}),s.end(JSON.stringify({error:"No serve-sim device"}));return}try{let u=await He(),v=await u.listTargets(),O=Yi(t.headers?.host,u.port),p=v.map((F)=>({...F,webSocketDebuggerUrl:`ws://${O}/devtools/page/${encodeURIComponent(F.id)}`,devtoolsFrontendUrl:Qi(B,O,F.id)}));s.writeHead(200,{"Content-Type":"application/json","Cache-Control":"no-store"}),s.end(JSON.stringify({port:u.port,targets:p}))}catch(u){s.writeHead(500,{"Content-Type":"application/json"}),s.end(JSON.stringify({error:u instanceof Error?u.message:"Failed to start inspect-webkit"}))}})();return}if($===e+"/devtools/release"&&t.method==="POST"){let c="";t.on("data",(a)=>c+=a),t.on("end",async()=>{try{let a=c?JSON.parse(c):{};(await He()).releaseHighlight?.(a.targetId),s.writeHead(200,{"Content-Type":"application/json"}),s.end("{}")}catch(a){s.writeHead(500,{"Content-Type":"application/json"}),s.end(JSON.stringify({error:a instanceof Error?a.message:"Failed to release"}))}});return}if($===e+"/devtools/highlight"&&t.method==="POST"){let c="";t.on("data",(a)=>c+=a),t.on("end",async()=>{try{let{targetId:a,on:u}=JSON.parse(c||"{}");if(!a){s.writeHead(400,{"Content-Type":"application/json"}),s.end(JSON.stringify({error:"Missing targetId"}));return}let v=await He();if(!v.highlightTarget){s.writeHead(501,{"Content-Type":"application/json"}),s.end(JSON.stringify({error:"highlightTarget not supported by inspect-webkit"}));return}await v.highlightTarget(a,!!u),s.writeHead(200,{"Content-Type":"application/json"}),s.end("{}")}catch(a){s.writeHead(500,{"Content-Type":"application/json"}),s.end(JSON.stringify({error:a instanceof Error?a.message:"Failed to highlight target"}))}});return}if($===e+"/api"){let c=y_(),a=a_(c,A);s.writeHead(200,{"Content-Type":"application/json","Cache-Control":"no-store"}),s.end(JSON.stringify(a?he(a,e,xS(),S):null));return}if($===e+"/ax"){let c=y_(),a=a_(c,A);if(!a){s.writeHead(404),s.end("No serve-sim device");return}s.writeHead(200,{"Content-Type":"text/event-stream","Cache-Control":"no-cache",Connection:"keep-alive","X-Accel-Buffering":"no"}),s.write(`:
41
41
 
42
- `);let p=Li.get(o.device,o.port).addClient(S);t.on("close",p);return}if((A===e+"/exec"||A===e+"/exec/")&&t.method==="POST"){let c="";t.on("data",(o)=>{c+=typeof o==="string"?o:o.toString()}),t.on("end",()=>{let o="";try{o=JSON.parse(c).command??""}catch{}if(!o){S.writeHead(400,{"Content-Type":"application/json"}),S.end(JSON.stringify({stdout:"",stderr:"Missing command",exitCode:1}));return}hi(o,{maxBuffer:16777216},(B,p,u)=>{S.writeHead(200,{"Content-Type":"application/json"}),S.end(JSON.stringify({stdout:p.toString(),stderr:u.toString(),exitCode:B?B.code??1:0}))})});return}if(A===e+"/logs"){let c=y_(),o=a_(c,$);if(!o){S.writeHead(404),S.end("No serve-sim device");return}let B=o.device;S.writeHead(200,{"Content-Type":"text/event-stream","Cache-Control":"no-cache",Connection:"keep-alive","X-Accel-Buffering":"no"}),S.write(`:
42
+ `);let v=Xi.get(a.device,a.port).addClient(s);t.on("close",v);return}if(($===e+"/exec"||$===e+"/exec/")&&t.method==="POST"){if(!$C(t.headers["content-type"])){s.writeHead(415,{"Content-Type":"application/json"}),s.end(JSON.stringify({stdout:"",stderr:"Unsupported Media Type",exitCode:1}));return}let c=t.headers.origin;if(c)try{if(new URL(c).host!==t.headers.host){s.writeHead(403,{"Content-Type":"application/json"}),s.end(JSON.stringify({stdout:"",stderr:"Cross-origin request blocked",exitCode:1}));return}}catch{s.writeHead(403,{"Content-Type":"application/json"}),s.end(JSON.stringify({stdout:"",stderr:"Invalid Origin",exitCode:1}));return}let a=t.headers.authorization??"",u=/^Bearer\s+(.+)$/i.exec(a);if(!u||!rC(u[1].trim(),S)){s.writeHead(401,{"Content-Type":"application/json"}),s.end(JSON.stringify({stdout:"",stderr:"Unauthorized",exitCode:1}));return}let v="",O=!1;t.on("data",(p)=>{if(v+=typeof p==="string"?p:p.toString(),v.length>4194304)O=!0,s.writeHead(413,{"Content-Type":"application/json"}),s.end(JSON.stringify({stdout:"",stderr:"Payload Too Large",exitCode:1})),t.destroy()}),t.on("end",()=>{if(O)return;let p="";try{p=JSON.parse(v).command??""}catch{}if(!p){s.writeHead(400,{"Content-Type":"application/json"}),s.end(JSON.stringify({stdout:"",stderr:"Missing command",exitCode:1}));return}Pi(p,{maxBuffer:16777216},(F,E,T)=>{s.writeHead(200,{"Content-Type":"application/json"}),s.end(JSON.stringify({stdout:E.toString(),stderr:T.toString(),exitCode:F?F.code??1:0}))})});return}if($===e+"/logs"){let c=y_(),a=a_(c,A);if(!a){s.writeHead(404),s.end("No serve-sim device");return}let u=a.device;s.writeHead(200,{"Content-Type":"text/event-stream","Cache-Control":"no-cache",Connection:"keep-alive","X-Accel-Buffering":"no"}),s.write(`:
43
43
 
44
- `);let p=de("xcrun",["simctl","spawn",B,"log","stream","--style","ndjson","--level","info"],{stdio:["ignore","pipe","ignore"]}),u="";p.stdout.on("data",(l)=>{u+=l.toString();let F;while((F=u.indexOf(`
45
- `))!==-1){let b=u.slice(0,F).trim();if(u=u.slice(F+1),b)S.write("data: "+b+`
44
+ `);let v=ge("xcrun",["simctl","spawn",u,"log","stream","--style","ndjson","--level","info"],{stdio:["ignore","pipe","ignore"]}),O="";v.stdout.on("data",(p)=>{O+=p.toString();let F;while((F=O.indexOf(`
45
+ `))!==-1){let E=O.slice(0,F).trim();if(O=O.slice(F+1),E)s.write("data: "+E+`
46
46
 
47
- `)}}),p.on("close",()=>S.end()),t.on("close",()=>p.kill());return}if(A===e+"/appstate"){let c=y_(),o=a_(c,$);if(!o){S.writeHead(404),S.end("No serve-sim device");return}let B=o.device;S.writeHead(200,{"Content-Type":"text/event-stream","Cache-Control":"no-cache",Connection:"keep-alive","X-Accel-Buffering":"no"}),S.write(`:
47
+ `)}}),v.on("close",()=>s.end()),t.on("close",()=>v.kill());return}if($===e+"/appstate"){let c=y_(),a=a_(c,A);if(!a){s.writeHead(404),s.end("No serve-sim device");return}let u=a.device;s.writeHead(200,{"Content-Type":"text/event-stream","Cache-Control":"no-cache",Connection:"keep-alive","X-Accel-Buffering":"no"}),s.write(`:
48
48
 
49
- `);let p="";(async()=>{try{let v=new AbortController,T=setTimeout(()=>v.abort(),1500),D=await fetch(`http://127.0.0.1:${o.port}/foreground`,{signal:v.signal});if(clearTimeout(T),!D.ok)return;let E=await D.json();if(!E.bundleId||!Ut(E.bundleId))return;if(S.writableEnded)return;p=E.bundleId;let y=await It(B,E.bundleId);if(S.writableEnded)return;S.write("data: "+JSON.stringify({bundleId:E.bundleId,pid:E.pid,isReactNative:y})+`
49
+ `);let v="";(async()=>{try{let T=new AbortController,f=setTimeout(()=>T.abort(),1500),b=await fetch(`http://127.0.0.1:${a.port}/foreground`,{signal:T.signal});if(clearTimeout(f),!b.ok)return;let o=await b.json();if(!o.bundleId||!qS(o.bundleId))return;if(s.writableEnded)return;v=o.bundleId;let r=await XS(u,o.bundleId);if(s.writableEnded)return;s.write("data: "+JSON.stringify({bundleId:o.bundleId,pid:o.pid,isReactNative:r})+`
50
50
 
51
- `)}catch{}})();let u=de("xcrun",["simctl","spawn",B,"log","stream","--style","ndjson","--level","info","--predicate",'process == "SpringBoard" AND eventMessage CONTAINS "Setting process visibility to: Foreground"'],{stdio:["ignore","pipe","ignore"]}),l=!1,F=async(v,T)=>{if(!Ut(v))return;if(v===p)return;p=v;let D=await It(B,v);if(!l)S.write("data: "+JSON.stringify({bundleId:v,pid:T,isReactNative:D})+`
51
+ `)}catch{}})();let O=ge("xcrun",["simctl","spawn",u,"log","stream","--style","ndjson","--level","info","--predicate",'process == "SpringBoard" AND eventMessage CONTAINS "Setting process visibility to: Foreground"'],{stdio:["ignore","pipe","ignore"]}),p=!1,F=async(T,f)=>{if(!qS(T))return;if(T===v)return;v=T;let b=await XS(u,T);if(!p)s.write("data: "+JSON.stringify({bundleId:T,pid:f,isReactNative:b})+`
52
52
 
53
- `)},b="";u.stdout.on("data",(v)=>{b+=v.toString();let T;while((T=b.indexOf(`
54
- `))!==-1){let D=b.slice(0,T).trim();if(b=b.slice(T+1),!D)continue;let E;try{E=JSON.parse(D).eventMessage??""}catch{continue}let y=Kt(E);if(!y)continue;F(y.bundleId,y.pid)}}),u.on("close",()=>S.end()),t.on("close",()=>{l=!0,u.kill()});return}if(i)i()}}var Mt,mi="854a02be78c7ffea104cb523636efa991bef5c5b",x_=9222,Li,n_=null,Wi,Pi,Mi,h_,ge=null,ji=1610612736;var zt=re(()=>{it();Mt=He(Ni(),"serve-sim"),Li=st(),Wi=new Set(["host.exp.Exponent","dev.expo.Exponent"]),Pi=["Frameworks/React.framework","Frameworks/hermes.framework","Frameworks/Hermes.framework","Frameworks/ExpoModulesCore.framework","main.jsbundle"],Mi=/(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;h_={at:0,booted:null}});import{execSync as k,spawn as me}from"child_process";import{chmodSync as eC,existsSync as K,mkdirSync as Le,openSync as Y_,closeSync as _e,readSync as tC,readFileSync as r_,unlinkSync as L_,writeFileSync as We}from"fs";import{createHash as Pe}from"crypto";import{homedir as SC,networkInterfaces as sC}from"os";import{join as Q,resolve as __}from"path";import{tmpdir as wS}from"os";import{join as M_}from"path";import{readdirSync as gS}from"fs";var t_=M_(wS(),"serve-sim"),MC=M_(t_,"server.json");function U_(_){return M_(t_,`server-${_}.json`)}function I_(){try{return gS(t_).filter((_)=>_.startsWith("server-")&&_.endsWith(".json")).map((_)=>M_(t_,_))}catch{return[]}}import{fileURLToPath as HS}from"url";import{dirname as hS}from"path";import{createServer as NS}from"http";import{createServer as VS}from"net";function et(_){return hS(HS(_))}function F_(_){Atomics.wait(new Int32Array(new SharedArrayBuffer(4)),0,0,_)}async function tt(_){return new Promise((e)=>{let t=VS();t.once("error",()=>e(!1)),t.once("listening",()=>t.close(()=>e(!0))),t.listen(_)})}async function St(_){let e=NS((t,S)=>{_.middleware(t,S,()=>{if(!S.headersSent)S.statusCode=404;S.end("Not found")})});return e.keepAliveTimeout=0,e.headersTimeout=0,e.requestTimeout=0,e.timeout=0,await new Promise((t,S)=>{let i=(C)=>{e.removeListener("listening",s),S(C)},s=()=>{e.removeListener("error",i),t()};e.once("error",i),e.once("listening",s),e.listen(_.port)}),{stop:()=>e.close()}}var b_="./serve-sim-bin-a0afqpdg.";var C_=et(import.meta.url);function Me(){if(!K(t_))Le(t_,{recursive:!0})}function Y(_){if(_)return he(U_(_));for(let e of I_()){let t=he(e);if(t)return t}return null}var j_={at:0,booted:null};function iC(){let _=Date.now();if(j_.booted&&_-j_.at<1000)return j_.booted;try{let e=k("xcrun simctl list devices booted -j",{encoding:"utf-8",stdio:["ignore","pipe","pipe"],timeout:3000}),t=JSON.parse(e),S=new Set;for(let i of Object.values(t.devices))for(let s of i)if(s.state==="Booted")S.add(s.udid);return j_={at:_,booted:S},S}catch{return null}}function he(_){try{if(!K(_))return null;let e=JSON.parse(r_(_,"utf-8"));try{process.kill(e.pid,0)}catch{return L_(_),null}let t=iC();if(t&&!t.has(e.device)){console.error(`[serve-sim] Helper pid ${e.pid} is bound to device ${e.device} which is no longer booted — killing stale helper.`);try{process.kill(e.pid,"SIGTERM")}catch{}try{L_(_)}catch{}return null}return e}catch{return null}}function ee(){let _=[];for(let e of I_()){let t=he(e);if(t)_.push(t)}return _}function jt(_){Me(),We(U_(_.device),JSON.stringify(_,null,2))}function m_(_){if(_)try{L_(U_(_))}catch{}else for(let e of I_())try{L_(e)}catch{}}function CC(){let _=b_.startsWith("/$bunfs/");if(!_&&K(b_))return b_;if(!_){let s=__(C_,"../bin/serve-sim-bin");if(K(s))return s;throw Error(`serve-sim-bin not found. Run 'bun run build:swift' first.
55
- Checked: ${b_}, ${s}`)}let e=r_(b_),t=Pe("sha256").update(e).digest("hex").slice(0,16),S=__(SC(),"Library/Caches/serve-sim");Le(S,{recursive:!0});let i=__(S,`serve-sim-bin-${t}`);if(!K(i)){We(i,e),eC(i,493);try{k(`codesign -s - -f ${JSON.stringify(i)}`,{stdio:"ignore"})}catch{}}return i}function Zt(){let _=null;try{_=k("xcode-select -p",{encoding:"utf-8",stdio:["ignore","pipe","ignore"]}).trim()}catch{}if(!_)return process.env;let e=`${_}/Library/PrivateFrameworks`;return{...process.env,DYLD_FRAMEWORK_PATH:process.env.DYLD_FRAMEWORK_PATH?`${e}:${process.env.DYLD_FRAMEWORK_PATH}`:e}}function R_(){try{let _=k("xcrun simctl list devices booted -j",{encoding:"utf-8"}),e=JSON.parse(_);for(let t of Object.values(e.devices))for(let S of t)if(S.state==="Booted")return S.udid}catch{}return null}function Qt(){try{let _=k("xcrun simctl list devices -j",{encoding:"utf-8"}),e=JSON.parse(_),t=Object.keys(e.devices).filter((S)=>/SimRuntime\.iOS-/i.test(S)).sort((S,i)=>{let s=(S.match(/iOS-(\d+)-(\d+)/)??[]).slice(1).map(Number),C=(i.match(/iOS-(\d+)-(\d+)/)??[]).slice(1).map(Number);return(C[0]??0)-(s[0]??0)||(C[1]??0)-(s[1]??0)});for(let S of t){let s=(e.devices[S]??[]).find((C)=>C.isAvailable!==!1&&/^iPhone\b/i.test(C.name));if(s)return{udid:s.udid,name:s.name}}}catch{}return null}function Jt(_){try{let e=k("xcrun simctl list devices -j",{encoding:"utf-8"}),t=JSON.parse(e);for(let S of Object.values(t.devices))for(let i of S)if(i.udid===_)return i.name}catch{}return null}function S_(_){if(/^[0-9A-F]{8}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{12}$/i.test(_))return _;try{let e=k("xcrun simctl list devices -j",{encoding:"utf-8"}),t=JSON.parse(e);for(let S of Object.values(t.devices))for(let i of S)if(i.name.toLowerCase()===_.toLowerCase())return i.udid}catch{}console.error(`Could not resolve device: ${_}`),process.exit(1)}function Yt(_){try{let e=k("xcrun simctl list devices -j",{encoding:"utf-8"}),t=JSON.parse(e);for(let S of Object.values(t.devices))for(let i of S)if(i.udid===_)return i.state==="Booted"}catch{}return!1}function B_(_){try{return process.kill(_,0),!0}catch{return!1}}function Ne(_){try{process.kill(_,"SIGTERM")}catch{return}let e=Date.now()+500;while(Date.now()<e)try{process.kill(_,0),F_(25)}catch{return}try{process.kill(_,"SIGKILL")}catch{}let t=Date.now()+500;while(Date.now()<t)try{process.kill(_,0),F_(25)}catch{return}}function rC(_){try{let e=k(`lsof -ti tcp:${_}`,{encoding:"utf-8",stdio:"pipe"}).trim();if(!e)return[];let t=process.pid;return e.split(`
56
- `).map((S)=>parseInt(S,10)).filter((S)=>Number.isFinite(S)&&S!==t)}catch{return[]}}function $C(_){let e=rC(_);if(e.length===0)return;console.log(`\x1B[90mPort ${_} busy, killing holder pid(s): ${e.join(", ")}\x1B[0m`);for(let t of e)try{process.kill(t,"SIGKILL")}catch{}F_(100)}function AC(_){if(!Yt(_))try{k(`xcrun simctl boot ${_}`,{encoding:"utf-8",stdio:"pipe"})}catch(e){let t=(e.stderr??e.message??"").toLowerCase();if(!t.includes("booted")&&!t.includes("current state"))throw Error(`Failed to boot device ${_}: ${e.stderr||e.message}`)}try{k("open -ga Simulator",{encoding:"utf-8",stdio:"pipe",timeout:3000})}catch{}}function oC(){let _=sC();for(let e of Object.values(_))for(let t of e??[])if(t.family==="IPv4"&&!t.internal)return t.address;return null}async function _S(_){let e=new Set(ee().map((t)=>t.port));for(let t=_;t<_+100;t++){if(e.has(t))continue;if(await tt(t))return t}throw Error(`No available port found in range ${_}-${_+99}`)}async function nC(_){AC(_);try{k(`xcrun simctl bootstatus ${_} -b`,{encoding:"utf-8",stdio:"pipe",timeout:60000})}catch(e){if(!Yt(_))console.error(`Device ${_} failed to reach booted state: ${e.stderr||e.message}`),process.exit(1)}}async function eS(_,e,t,S){let i=!1;for(let C=0;C<30;C++){if(!S())break;try{if((await fetch(`${e}/health`)).ok){i=!0;break}}catch{}await new Promise((A)=>setTimeout(A,100))}if(i){let C=Date.now()+8000;while(Date.now()<C){if(await new Promise((A)=>setTimeout(A,200)),!S()){i=!1;break}try{if(r_(t,"utf-8").includes("Capture started"))break}catch{}}}let s="";try{s=r_(t,"utf-8").trim()}catch{}return{ready:i,log:s}}async function yC(_){let{helperPath:e,udid:t,port:S,host:i,logFile:s}=_,C=`http://${i}:${S}`;Me();let A=Y_(s,"w"),$=me(e,[t,"--port",String(S)],{detached:!0,stdio:["ignore",A,A],env:Zt()});$.unref(),_e(A);let n=$.pid,c=!1;$.once("exit",()=>{c=!0});let{ready:o,log:B}=await eS(n,C,s,()=>!c&&B_(n));return{ready:o,pid:n,exited:c||!B_(n),log:B}}async function aC(_){let{helperPath:e,udid:t,port:S,host:i,logFile:s}=_,C=`http://${i}:${S}`;Me();let A=Y_(s,"w"),$=me(e,[t,"--port",String(S)],{detached:!1,stdio:["ignore",A,A],env:Zt()});_e(A);let n=$.pid,c=!1;$.once("exit",()=>{c=!0});let{ready:o,log:B}=await eS(n,C,s,()=>!c&&B_(n));return{ready:o,child:$,log:B}}async function tS(_,e,t){await nC(_);let S="127.0.0.1",i=CC(),s=Q(t_,`server-${_}.log`),C={helperPath:i,udid:_,port:e,host:S,logFile:s},A="",$=2;for(let c=1;c<=$;c++){if($C(e),t.detach){let o=await yC(C);if(o.ready){let B={pid:o.pid,port:e,device:_,url:`http://${S}:${e}`,streamUrl:`http://${S}:${e}/stream.mjpeg`,wsUrl:`ws://${S}:${e}/ws`};return jt(B),{pid:o.pid}}Ne(o.pid),A=o.log}else{let o=await aC(C);if(o.ready){let B={pid:o.child.pid,port:e,device:_,url:`http://${S}:${e}`,streamUrl:`http://${S}:${e}/stream.mjpeg`,wsUrl:`ws://${S}:${e}/ws`};return jt(B),{pid:o.child.pid,child:o.child}}Ne(o.child.pid),A=o.log}if(c<$)await new Promise((o)=>setTimeout(o,500))}let n=A?`Helper failed:
57
- ${A}`:"Helper process failed to start";console.error(n),process.exit(1)}async function cC(_,e,t){let S=_.length>0?_.map(S_):(()=>{let n=R_();if(n)return[n];let c=Qt();if(!c)console.error("No device specified and no available iOS simulator found."),process.exit(1);if(!t)console.log(`No booted simulator — booting ${c.name}...`);return[c.udid]})(),i=new Map,s=[],C=e;for(let n of S){let c=Y(n);if(c){if(!t){let l=Jt(n)??n;if(S.length>1)console.log(`
58
- ==> ${l} (${n}) <==`);console.log(` Already running on port ${c.port}`),console.log(` Stream: ${c.streamUrl}`),console.log(` WebSocket: ${c.wsUrl}`)}s.push(c);continue}C=await _S(C);let{pid:o,child:B}=await tS(n,C,{detach:!1});if(B)i.set(n,B);let p="127.0.0.1",u={pid:o,port:C,device:n,url:`http://${p}:${C}`,streamUrl:`http://${p}:${C}/stream.mjpeg`,wsUrl:`ws://${p}:${C}/ws`};if(s.push(u),!t){let l=Jt(n)??n;if(S.length>1)console.log(`
59
- ==> ${l} (${n}) <==`);console.log(` Stream: ${u.streamUrl}`),console.log(` WebSocket: ${u.wsUrl}`),console.log(` Port: ${C}`)}C++}if(s.length===1){let n=s[0];console.log(JSON.stringify({url:n.url,streamUrl:n.streamUrl,wsUrl:n.wsUrl,port:n.port,device:n.device}))}else console.log(JSON.stringify({devices:s.map((n)=>({url:n.url,streamUrl:n.streamUrl,wsUrl:n.wsUrl,port:n.port,device:n.device}))}));if(i.size===0)return;let A=!1,$=(n)=>{if(A)return;if(A=!0,!t)console.log(`
60
- Shutting down...`);for(let[c,o]of i){let B=o.pid;if(B)Ne(B);m_(c)}i.clear(),process.exit(n)};for(let[n,c]of i)c.on("exit",(o)=>{if(A)return;if(!t)console.error(`[${n}] Helper exited (code ${o})`);if(m_(n),i.delete(n),i.size===0)$(o??1)});process.on("SIGINT",()=>$(0)),process.on("SIGTERM",()=>$(0)),process.on("SIGHUP",()=>$(0)),process.on("exit",()=>{for(let[n,c]of i){try{if(c.pid)process.kill(c.pid,"SIGTERM")}catch{}try{m_(n)}catch{}}}),await new Promise(()=>{})}async function Ve(_,e){let t=_.length>0?_.map(S_):(()=>{let s=R_();if(s)return[s];let C=Qt();if(!C)console.error("No device specified and no available iOS simulator found."),process.exit(1);return[C.udid]})(),S=[],i=e;for(let s of t){let C=Y(s);if(C){S.push(C);continue}i=await _S(i),await tS(s,i,{detach:!0});let A="127.0.0.1";S.push({pid:Y(s).pid,port:i,device:s,url:`http://${A}:${i}`,streamUrl:`http://${A}:${i}/stream.mjpeg`,wsUrl:`ws://${A}:${i}/ws`}),i++}return S}function RC(_){if(_.length===1){let e=_[0];console.log(JSON.stringify({url:e.url,streamUrl:e.streamUrl,wsUrl:e.wsUrl,port:e.port,device:e.device}))}else console.log(JSON.stringify({devices:_.map((e)=>({url:e.url,streamUrl:e.streamUrl,wsUrl:e.wsUrl,port:e.port,device:e.device}))}))}function BC(_){if(_){let t=S_(_),S=Y(t);if(!S)console.log(JSON.stringify({running:!1,device:t}));else console.log(JSON.stringify({running:!0,url:S.url,streamUrl:S.streamUrl,wsUrl:S.wsUrl,port:S.port,device:S.device,pid:S.pid}));return}let e=ee();if(e.length===0)console.log(JSON.stringify({running:!1}));else if(e.length===1){let t=e[0];console.log(JSON.stringify({running:!0,url:t.url,streamUrl:t.streamUrl,wsUrl:t.wsUrl,port:t.port,device:t.device,pid:t.pid}))}else console.log(JSON.stringify({running:!0,streams:e.map((t)=>({url:t.url,streamUrl:t.streamUrl,wsUrl:t.wsUrl,port:t.port,device:t.device,pid:t.pid}))}))}function DC(_){if(_){let e=S_(_),t=Y(e);if(!t){console.log(JSON.stringify({disconnected:!0,device:e}));return}try{process.kill(t.pid,"SIGTERM")}catch{}m_(e),console.log(JSON.stringify({disconnected:!0,device:t.device}))}else{let e=ee();if(e.length===0){console.log(JSON.stringify({disconnected:!0,devices:[]}));return}let t=[];for(let S of e){try{process.kill(S.pid,"SIGTERM")}catch{}t.push(S.device)}m_(),console.log(JSON.stringify({disconnected:!0,devices:t}))}}async function TC(_){let e,t=[];for(let C=0;C<_.length;C++)if(_[C]==="--device"||_[C]==="-d")e=_[++C];else t.push(_[C]);let S=Y(e);if(!S)console.error("No serve-sim server running. Run `serve-sim` first."),process.exit(1);let i=t[0];if(!i)console.error("Usage: serve-sim gesture '<json>'"),console.error(`Example: serve-sim gesture '{"type":"begin","x":0.5,"y":0.5}'`),process.exit(1);let s;try{s=JSON.parse(i)}catch{console.error("Invalid JSON:",i),process.exit(1)}return new Promise((C,A)=>{let $=new WebSocket(S.wsUrl);$.binaryType="arraybuffer",$.onopen=()=>{let n=new TextEncoder().encode(JSON.stringify(s)),c=new Uint8Array(1+n.length);c[0]=3,c.set(n,1),$.send(c),setTimeout(()=>{$.close(),C()},50)},$.onerror=()=>{console.error("Failed to connect to serve-sim server at",S.wsUrl),A(Error("WebSocket connection failed"))}})}async function fC(_){let e,t=[];for(let C=0;C<_.length;C++)if(_[C]==="--device"||_[C]==="-d")e=_[++C];else t.push(_[C]);let S=t[0]!==void 0?Number(t[0]):NaN,i=t[1]!==void 0?Number(t[1]):NaN;if(!Number.isFinite(S)||!Number.isFinite(i)||S<0||S>1||i<0||i>1)console.error("Usage: serve-sim tap <x> <y> [-d udid]"),console.error(" x, y are normalized 0..1 of the simulator screen"),console.error(" Example: serve-sim tap 0.5 0.9 # near bottom-center"),process.exit(1);let s=Y(e);if(!s)console.error("No serve-sim server running. Run `serve-sim` first."),process.exit(1);return new Promise((C,A)=>{let $=new WebSocket(s.wsUrl);$.binaryType="arraybuffer";let n=(c)=>{let o=new TextEncoder().encode(JSON.stringify({type:c,x:S,y:i})),B=new Uint8Array(1+o.length);B[0]=3,B.set(o,1),$.send(B)};$.onopen=()=>{n("begin"),setTimeout(()=>{n("end"),setTimeout(()=>{$.close(),C()},50)},40)},$.onerror=()=>{console.error("Failed to connect to serve-sim server at",s.wsUrl),A(Error("WebSocket connection failed"))}})}async function EC(_){let e,t=[];for(let C=0;C<_.length;C++)if(_[C]==="--device"||_[C]==="-d")e=_[++C];else t.push(_[C]);let S=Y(e);if(!S)console.error("No serve-sim server running. Run `serve-sim` first."),process.exit(1);let i=t[0],s=new Set(["portrait","portrait_upside_down","landscape_left","landscape_right"]);if(!i||!s.has(i))console.error(`Usage: serve-sim rotate <${[...s].join("|")}> [-d udid]`),process.exit(1);return new Promise((C,A)=>{let $=new WebSocket(S.wsUrl);$.binaryType="arraybuffer",$.onopen=()=>{let n=new TextEncoder().encode(JSON.stringify({orientation:i})),c=new Uint8Array(1+n.length);c[0]=7,c.set(n,1),$.send(c),setTimeout(()=>{$.close(),C()},50)},$.onerror=()=>{console.error("Failed to connect to serve-sim server at",S.wsUrl),A(Error("WebSocket connection failed"))}})}async function FC(_){let e,t=[];for(let s=0;s<_.length;s++)if(_[s]==="--device"||_[s]==="-d")e=_[++s];else t.push(_[s]);let S=Y(e);if(!S)console.error("No serve-sim server running. Run `serve-sim` first."),process.exit(1);let i=t[0]??"home";return new Promise((s,C)=>{let A=new WebSocket(S.wsUrl);A.binaryType="arraybuffer",A.onopen=()=>{let $=new TextEncoder().encode(JSON.stringify({button:i})),n=new Uint8Array(1+$.length);n[0]=4,n.set($,1),A.send(n),setTimeout(()=>{A.close(),s()},50)},A.onerror=()=>{console.error("Failed to connect to serve-sim server at",S.wsUrl),C(Error("WebSocket connection failed"))}})}async function bC(_){let e,t=[];for(let n=0;n<_.length;n++)if(_[n]==="--device"||_[n]==="-d")e=_[++n];else t.push(_[n]);let S=t[0],i=(t[1]??"").toLowerCase(),s=i==="on"||i==="1"||i==="true",C={blended:"debug_color_blended",copies:"debug_color_copies",copied:"debug_color_copies",misaligned:"debug_color_misaligned",offscreen:"debug_color_offscreen","slow-animations":"debug_slow_animations",slow:"debug_slow_animations"},A=S?C[S]??S:void 0;if(!A||!["on","off","1","0","true","false"].includes(i))console.error(`Usage: serve-sim ca-debug <option> <on|off> [-d udid]
61
- option shortcuts: ${Object.keys(C).join(", ")}`),process.exit(1);let $=Y(e);if(!$)console.error("No serve-sim server running. Run `serve-sim` first."),process.exit(1);return new Promise((n,c)=>{let o=new WebSocket($.wsUrl);o.binaryType="arraybuffer",o.onopen=()=>{let B=new TextEncoder().encode(JSON.stringify({option:A,enabled:s})),p=new Uint8Array(1+B.length);p[0]=8,p.set(B,1),o.send(p),setTimeout(()=>{o.close(),n()},50)},o.onerror=()=>{console.error("Failed to connect to serve-sim server at",$.wsUrl),c(Error("WebSocket connection failed"))}})}async function vC(_){let e;for(let S=0;S<_.length;S++)if(_[S]==="--device"||_[S]==="-d")e=_[++S];let t=Y(e);if(!t)console.error("No serve-sim server running. Run `serve-sim` first."),process.exit(1);return new Promise((S,i)=>{let s=new WebSocket(t.wsUrl);s.binaryType="arraybuffer",s.onopen=()=>{s.send(new Uint8Array([9])),setTimeout(()=>{s.close(),S()},50)},s.onerror=()=>{console.error("Failed to connect to serve-sim server at",t.wsUrl),i(Error("WebSocket connection failed"))}})}function SS(){let _=[Q(C_,"..","dist","simcam","libSimCameraInjector.dylib"),Q(C_,"simcam","libSimCameraInjector.dylib"),Q(C_,"..","Sources","SimCameraInjector","build","libSimCameraInjector.dylib")];for(let e of _)if(K(e))return __(e);return null}function uC(){let _=Q(C_,"..","Sources","SimCameraInjector","build.sh");if(!K(_))throw Error("SimCameraInjector source not found — this build of serve-sim does not "+"include camera support sources. Reinstall from a recent release.");console.error("[serve-sim] building libSimCameraInjector.dylib (one-time)…"),k(`bash "${_}"`,{stdio:"inherit"});let e=SS();if(!e)throw Error("Build succeeded but dylib not found.");return e}function Ue(){let _=[Q(C_,"..","dist","simcam","serve-sim-camera-helper"),Q(C_,"simcam","serve-sim-camera-helper")];for(let e of _)if(K(e))return __(e);return null}function sS(){let _=Q(C_,"..","Sources","SimCameraHelper","build.sh");if(!K(_))throw Error("SimCameraHelper source not found — webcam support requires building "+"from a checkout that includes Sources/SimCameraHelper.");console.error("[serve-sim] building serve-sim-camera-helper (one-time)…"),k(`bash "${_}"`,{stdio:"inherit"});let e=Ue();if(!e)throw Error("Build succeeded but helper binary not found.");return e}var J_=Q(t_,"simcam");function pC(_){return`/serve-sim-cam-${Pe("sha1").update(_).digest("hex").slice(0,8)}`}function W_(_){return Q(J_,`${_}.pid`)}function Ie(_){return`/tmp/serve-sim-cam-${Pe("sha1").update(_).digest("hex").slice(0,12)}.sock`}async function N_(_,e){let t=Ie(_);if(!K(t))throw Error("camera helper socket not found");let S=await import("net");return await new Promise((i,s)=>{let C=S.createConnection(t),A="",$=!1;C.on("data",(n)=>{A+=n.toString();let c=A.indexOf(`
62
- `);if(c>=0&&!$){$=!0;try{i(JSON.parse(A.slice(0,c)))}catch(o){s(o)}C.end()}}),C.on("error",(n)=>{if(!$)$=!0,s(n)}),C.on("close",()=>{if(!$)$=!0,s(Error("socket closed"))}),C.write(JSON.stringify(e)+`
63
- `),setTimeout(()=>{if(!$)$=!0,C.destroy(),s(Error("helper timeout"))},3000)})}function Z_(_){let e=W_(_);if(!K(e))return!1;let t=Number(r_(e,"utf-8").trim());return Number.isFinite(t)&&B_(t)&&K(Ie(_))}function iS(_){let e=W_(_);if(!K(e))return;let t=Number(r_(e,"utf-8").trim());if(Number.isFinite(t)&&B_(t)){try{process.kill(t,"SIGTERM")}catch{}let S=Date.now();while(B_(t)&&Date.now()-S<1500)F_(50)}try{L_(e)}catch{}}function lC(_){if(!K(J_))Le(J_,{recursive:!0});let e=Q(J_,`${_.udid}.log`),t=Y_(e,"a"),S=["--shm",_.shmName,"--socket",_.socketPath,"--source",_.source];if(_.arg)S.push("--arg",_.arg);if(_.width)S.push("--width",String(_.width));if(_.height)S.push("--height",String(_.height));let i=me(_.helperBin,S,{detached:!0,stdio:["ignore",t,t]});if(i.unref(),_e(t),!i.pid)throw Error("failed to spawn camera helper");We(W_(_.udid),String(i.pid));let s=Date.now();while(Date.now()-s<3000){if(!B_(i.pid))throw Error(`camera helper exited early — see log at ${e}`);if(K(_.socketPath))break;F_(50)}return i.pid}var OC=new Set(["mp4","m4v","mov","qt","avi","mkv","webm","mpg","mpeg","3gp","3g2","ts","wmv"]),dC=new Set(["png","jpg","jpeg","gif","heic","heif","webp","bmp","tif","tiff"]);function CS(_){let e=_.toLowerCase().split(".").pop()??"";if(OC.has(e))return"video";if(dC.has(e))return"image";let t;try{let S=Y_(_,"r");t=Buffer.alloc(16),tC(S,t,0,t.length,0),_e(S)}catch{return null}if(t.length>=8&&t.slice(4,8).toString("ascii")==="ftyp")return"video";if(t.slice(0,4).toString("ascii")==="RIFF"&&t.length>=12){let S=t.slice(8,12).toString("ascii");if(S==="AVI ")return"video";if(S==="WEBP")return"image"}if(t[0]===26&&t[1]===69&&t[2]===223&&t[3]===163)return"video";if(t[0]===137&&t[1]===80&&t[2]===78&&t[3]===71)return"image";if(t[0]===255&&t[1]===216&&t[2]===255)return"image";if(t.slice(0,6).toString("ascii").startsWith("GIF8"))return"image";if(t[0]===66&&t[1]===77)return"image";return null}function wC(_){if(_.file){let e=__(_.file),t=CS(e);if(!t)throw Error(`Could not detect image/video type for: ${e}`);return{kind:t,arg:e}}if(_.webcam)return{kind:"webcam",arg:typeof _.webcam==="string"?_.webcam:void 0};return{kind:"placeholder"}}async function gC(_){let e=pC(_.udid),t=Ie(_.udid);if(Z_(_.udid)){let s=await N_(_.udid,{action:"switch",source:_.source.kind,arg:_.source.arg});if(!s.ok)throw Error(s.error||"helper rejected switch");return{helperPid:Number(r_(W_(_.udid),"utf-8").trim()),shmName:e,relaunched:!1}}iS(_.udid);let S=!_.forceBuild&&Ue()||sS();return{helperPid:lC({udid:_.udid,helperBin:S,shmName:e,socketPath:t,source:_.source.kind,arg:_.source.arg}),shmName:e,relaunched:!0}}async function HC(_){let e,t,S,i=!1,s=!1,C=!1,A=!1,$="auto",n=[];for(let y=0;y<_.length;y++){let r=_[y];if(r==="--device"||r==="-d"){e=_[++y];continue}if(r==="--file"||r==="-f"||r==="--image"||r==="-i"||r==="--video"){t=_[++y];continue}if(r==="--webcam"){let a=_[y+1];if(a&&!a.startsWith("-"))S=a,y++;else S=!0;continue}if(r==="--list-webcams"){s=!0;continue}if(r==="--stop-webcam"){i=!0;continue}if(r==="--build"){C=!0;continue}if(r==="--quiet"||r==="-q"){A=!0;continue}if(r==="--mirror"){let a=_[y+1];if(a==="on"||a==="off"||a==="auto")$=a,y++;else $="on";continue}if(r==="--no-mirror"){$="off";continue}if(r==="--help"||r==="-h"){console.log(`Usage: serve-sim camera <bundle-id> [-d udid] [source-options] [--build]
53
+ `)},E="";O.stdout.on("data",(T)=>{E+=T.toString();let f;while((f=E.indexOf(`
54
+ `))!==-1){let b=E.slice(0,f).trim();if(E=E.slice(f+1),!b)continue;let o;try{o=JSON.parse(b).eventMessage??""}catch{continue}let r=JS(o);if(!r)continue;F(r.bundleId,r.pid)}}),O.on("close",()=>s.end()),t.on("close",()=>{p=!0,O.kill()});return}if(i)i()}}var IS,qi="854a02be78c7ffea104cb523636efa991bef5c5b",z_=9222,Xi,n_=null,ki,Ki,xi,m_,Ne=null,SC=1610612736;var QS=Ae(()=>{$S();IS=Ve(Mi(),"serve-sim"),Xi=rS(),ki=new Set(["host.exp.Exponent","dev.expo.Exponent"]),Ki=["Frameworks/React.framework","Frameworks/hermes.framework","Frameworks/Hermes.framework","Frameworks/ExpoModulesCore.framework","main.jsbundle"],xi=/(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;m_={at:0,booted:null}});import{execSync as q,spawn as Me}from"child_process";import{chmodSync as oC,existsSync as X,mkdirSync as Y_,openSync as _e,closeSync as ee,readSync as nC,readFileSync as e_,unlinkSync as u_,writeFileSync as Se}from"fs";import{createHash as Ue}from"crypto";import{homedir as yC,networkInterfaces as aC}from"os";import{join as Z,resolve as __}from"path";import{tmpdir as mt}from"os";import{join as U_}from"path";import{readdirSync as Lt}from"fs";var t_=U_(mt(),"serve-sim"),jC=U_(t_,"server.json");function G_(_){return U_(t_,`server-${_}.json`)}function I_(){try{return Lt(t_).filter((_)=>_.startsWith("server-")&&_.endsWith(".json")).map((_)=>U_(t_,_))}catch{return[]}}import{fileURLToPath as Wt}from"url";import{dirname as Pt}from"path";import{createServer as Mt}from"http";import{createServer as Ut}from"net";function sS(_){return Pt(Wt(_))}function b_(_){Atomics.wait(new Int32Array(new SharedArrayBuffer(4)),0,0,_)}async function iS(_){return new Promise((e)=>{let S=Ut();S.once("error",()=>e(!1)),S.once("listening",()=>S.close(()=>e(!0))),S.listen(_)})}async function CS(_){let e=Mt((S,t)=>{_.middleware(S,t,()=>{if(!t.headersSent)t.statusCode=404;t.end("Not found")})});return e.keepAliveTimeout=0,e.headersTimeout=0,e.requestTimeout=0,e.timeout=0,await new Promise((S,t)=>{let s=(C)=>{e.removeListener("listening",i),t(C)},i=()=>{e.removeListener("error",s),S()};e.once("error",s),e.once("listening",i),e.listen(_.port,_.host??"127.0.0.1")}),{stop:()=>e.close()}}var v_="./serve-sim-bin-31yrgwnt.";var r_=sS(import.meta.url);function Ge(){if(!X(t_))Y_(t_,{recursive:!0})}function Y(_){if(_)return me(G_(_));for(let e of I_()){let S=me(e);if(S)return S}return null}var J_={at:0,booted:null};function cC(){let _=Date.now();if(J_.booted&&_-J_.at<1000)return J_.booted;try{let e=q("xcrun simctl list devices booted -j",{encoding:"utf-8",stdio:["ignore","pipe","pipe"],timeout:3000}),S=JSON.parse(e),t=new Set;for(let s of Object.values(S.devices))for(let i of s)if(i.state==="Booted")t.add(i.udid);return J_={at:_,booted:t},t}catch{return null}}function me(_){try{if(!X(_))return null;let e=JSON.parse(e_(_,"utf-8"));try{process.kill(e.pid,0)}catch{return u_(_),null}let S=cC();if(S&&!S.has(e.device)){console.error(`[serve-sim] Helper pid ${e.pid} is bound to device ${e.device} which is no longer booted — killing stale helper.`);try{process.kill(e.pid,"SIGTERM")}catch{}try{u_(_)}catch{}return null}return e}catch{return null}}function te(){let _=[];for(let e of I_()){let S=me(e);if(S)_.push(S)}return _}function YS(_){Ge(),Se(G_(_.device),JSON.stringify(_,null,2))}function P_(_){if(_)try{u_(G_(_))}catch{}else for(let e of I_())try{u_(e)}catch{}}function RC(){let _=v_.startsWith("/$bunfs/");if(!_&&X(v_))return v_;if(!_){let i=__(r_,"../bin/serve-sim-bin");if(X(i))return i;throw Error(`serve-sim-bin not found. Run 'bun run build:swift' first.
55
+ Checked: ${v_}, ${i}`)}let e=e_(v_),S=Ue("sha256").update(e).digest("hex").slice(0,16),t=__(yC(),"Library/Caches/serve-sim");Y_(t,{recursive:!0});let s=__(t,`serve-sim-bin-${S}`);if(!X(s)){Se(s,e),oC(s,493);try{q(`codesign -s - -f ${JSON.stringify(s)}`,{stdio:"ignore"})}catch{}}return s}function et(){let _=null;try{_=q("xcode-select -p",{encoding:"utf-8",stdio:["ignore","pipe","ignore"]}).trim()}catch{}if(!_)return process.env;let e=`${_}/Library/PrivateFrameworks`;return{...process.env,DYLD_FRAMEWORK_PATH:process.env.DYLD_FRAMEWORK_PATH?`${e}:${process.env.DYLD_FRAMEWORK_PATH}`:e}}function R_(){try{let _=q("xcrun simctl list devices booted -j",{encoding:"utf-8"}),e=JSON.parse(_);for(let S of Object.values(e.devices))for(let t of S)if(t.state==="Booted")return t.udid}catch{}return null}function St(){try{let _=q("xcrun simctl list devices -j",{encoding:"utf-8"}),e=JSON.parse(_),S=Object.keys(e.devices).filter((t)=>/SimRuntime\.iOS-/i.test(t)).sort((t,s)=>{let i=(t.match(/iOS-(\d+)-(\d+)/)??[]).slice(1).map(Number),C=(s.match(/iOS-(\d+)-(\d+)/)??[]).slice(1).map(Number);return(C[0]??0)-(i[0]??0)||(C[1]??0)-(i[1]??0)});for(let t of S){let i=(e.devices[t]??[]).find((C)=>C.isAvailable!==!1&&/^iPhone\b/i.test(C.name));if(i)return{udid:i.udid,name:i.name}}}catch{}return null}function _t(_){try{let e=q("xcrun simctl list devices -j",{encoding:"utf-8"}),S=JSON.parse(e);for(let t of Object.values(S.devices))for(let s of t)if(s.udid===_)return s.name}catch{}return null}function s_(_){if(/^[0-9A-F]{8}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{12}$/i.test(_))return _;try{let e=q("xcrun simctl list devices -j",{encoding:"utf-8"}),S=JSON.parse(e);for(let t of Object.values(S.devices))for(let s of t)if(s.name.toLowerCase()===_.toLowerCase())return s.udid}catch{}console.error(`Could not resolve device: ${_}`),process.exit(1)}function tt(_){try{let e=q("xcrun simctl list devices -j",{encoding:"utf-8"}),S=JSON.parse(e);for(let t of Object.values(S.devices))for(let s of t)if(s.udid===_)return s.state==="Booted"}catch{}return!1}function D_(_){try{return process.kill(_,0),!0}catch{return!1}}function Le(_){try{process.kill(_,"SIGTERM")}catch{return}let e=Date.now()+500;while(Date.now()<e)try{process.kill(_,0),b_(25)}catch{return}try{process.kill(_,"SIGKILL")}catch{}let S=Date.now()+500;while(Date.now()<S)try{process.kill(_,0),b_(25)}catch{return}}function BC(_){try{let e=q(`lsof -ti tcp:${_}`,{encoding:"utf-8",stdio:"pipe"}).trim();if(!e)return[];let S=process.pid;return e.split(`
56
+ `).map((t)=>parseInt(t,10)).filter((t)=>Number.isFinite(t)&&t!==S)}catch{return[]}}function DC(_){let e=BC(_);if(e.length===0)return;console.log(`\x1B[90mPort ${_} busy, killing holder pid(s): ${e.join(", ")}\x1B[0m`);for(let S of e)try{process.kill(S,"SIGKILL")}catch{}b_(100)}function TC(_){if(!tt(_))try{q(`xcrun simctl boot ${_}`,{encoding:"utf-8",stdio:"pipe"})}catch(e){let S=(e.stderr??e.message??"").toLowerCase();if(!S.includes("booted")&&!S.includes("current state"))throw Error(`Failed to boot device ${_}: ${e.stderr||e.message}`)}try{q("open -ga Simulator",{encoding:"utf-8",stdio:"pipe",timeout:3000})}catch{}}function fC(){let _=aC();for(let e of Object.values(_))for(let S of e??[])if(S.family==="IPv4"&&!S.internal)return S.address;return null}async function st(_){let e=new Set(te().map((S)=>S.port));for(let S=_;S<_+100;S++){if(e.has(S))continue;if(await iS(S))return S}throw Error(`No available port found in range ${_}-${_+99}`)}async function EC(_){TC(_);try{q(`xcrun simctl bootstatus ${_} -b`,{encoding:"utf-8",stdio:"pipe",timeout:60000})}catch(e){if(!tt(_))console.error(`Device ${_} failed to reach booted state: ${e.stderr||e.message}`),process.exit(1)}}async function it(_,e,S,t){let s=!1;for(let C=0;C<30;C++){if(!t())break;try{if((await fetch(`${e}/health`)).ok){s=!0;break}}catch{}await new Promise((n)=>setTimeout(n,100))}if(s){let C=Date.now()+8000;while(Date.now()<C){if(await new Promise((n)=>setTimeout(n,200)),!t()){s=!1;break}try{if(e_(S,"utf-8").includes("Capture started"))break}catch{}}}let i="";try{i=e_(S,"utf-8").trim()}catch{}return{ready:s,log:i}}async function FC(_){let{helperPath:e,udid:S,port:t,host:s,logFile:i}=_,C=`http://${s}:${t}`;Ge();let n=_e(i,"w"),$=Me(e,[S,"--port",String(t)],{detached:!0,stdio:["ignore",n,n],env:et()});$.unref(),ee(n);let A=$.pid,B=!1;$.once("exit",()=>{B=!0});let{ready:c,log:a}=await it(A,C,i,()=>!B&&D_(A));return{ready:c,pid:A,exited:B||!D_(A),log:a}}async function bC(_){let{helperPath:e,udid:S,port:t,host:s,logFile:i}=_,C=`http://${s}:${t}`;Ge();let n=_e(i,"w"),$=Me(e,[S,"--port",String(t)],{detached:!1,stdio:["ignore",n,n],env:et()});ee(n);let A=$.pid,B=!1;$.once("exit",()=>{B=!0});let{ready:c,log:a}=await it(A,C,i,()=>!B&&D_(A));return{ready:c,child:$,log:a}}async function Ct(_,e,S){await EC(_);let t="127.0.0.1",s=RC(),i=Z(t_,`server-${_}.log`),C={helperPath:s,udid:_,port:e,host:t,logFile:i},n="",$=2;for(let B=1;B<=$;B++){if(DC(e),S.detach){let c=await FC(C);if(c.ready){let a={pid:c.pid,port:e,device:_,url:`http://${t}:${e}`,streamUrl:`http://${t}:${e}/stream.mjpeg`,wsUrl:`ws://${t}:${e}/ws`};return YS(a),{pid:c.pid}}Le(c.pid),n=c.log}else{let c=await bC(C);if(c.ready){let a={pid:c.child.pid,port:e,device:_,url:`http://${t}:${e}`,streamUrl:`http://${t}:${e}/stream.mjpeg`,wsUrl:`ws://${t}:${e}/ws`};return YS(a),{pid:c.child.pid,child:c.child}}Le(c.child.pid),n=c.log}if(B<$)await new Promise((c)=>setTimeout(c,500))}let A=n?`Helper failed:
57
+ ${n}`:"Helper process failed to start";console.error(A),process.exit(1)}async function vC(_,e,S){let t=_.length>0?_.map(s_):(()=>{let A=R_();if(A)return[A];let B=St();if(!B)console.error("No device specified and no available iOS simulator found."),process.exit(1);if(!S)console.log(`No booted simulator — booting ${B.name}...`);return[B.udid]})(),s=new Map,i=[],C=e;for(let A of t){let B=Y(A);if(B){if(!S){let O=_t(A)??A;if(t.length>1)console.log(`
58
+ ==> ${O} (${A}) <==`);console.log(` Already running on port ${B.port}`),console.log(` Stream: ${B.streamUrl}`),console.log(` WebSocket: ${B.wsUrl}`)}i.push(B);continue}C=await st(C);let{pid:c,child:a}=await Ct(A,C,{detach:!1});if(a)s.set(A,a);let u="127.0.0.1",v={pid:c,port:C,device:A,url:`http://${u}:${C}`,streamUrl:`http://${u}:${C}/stream.mjpeg`,wsUrl:`ws://${u}:${C}/ws`};if(i.push(v),!S){let O=_t(A)??A;if(t.length>1)console.log(`
59
+ ==> ${O} (${A}) <==`);console.log(` Stream: ${v.streamUrl}`),console.log(` WebSocket: ${v.wsUrl}`),console.log(` Port: ${C}`)}C++}if(i.length===1){let A=i[0];console.log(JSON.stringify({url:A.url,streamUrl:A.streamUrl,wsUrl:A.wsUrl,port:A.port,device:A.device}))}else console.log(JSON.stringify({devices:i.map((A)=>({url:A.url,streamUrl:A.streamUrl,wsUrl:A.wsUrl,port:A.port,device:A.device}))}));if(s.size===0)return;let n=!1,$=(A)=>{if(n)return;if(n=!0,!S)console.log(`
60
+ Shutting down...`);for(let[B,c]of s){let a=c.pid;if(a)Le(a);P_(B)}s.clear(),process.exit(A)};for(let[A,B]of s)B.on("exit",(c)=>{if(n)return;if(!S)console.error(`[${A}] Helper exited (code ${c})`);if(P_(A),s.delete(A),s.size===0)$(c??1)});process.on("SIGINT",()=>$(0)),process.on("SIGTERM",()=>$(0)),process.on("SIGHUP",()=>$(0)),process.on("exit",()=>{for(let[A,B]of s){try{if(B.pid)process.kill(B.pid,"SIGTERM")}catch{}try{P_(A)}catch{}}}),await new Promise(()=>{})}async function We(_,e){let S=_.length>0?_.map(s_):(()=>{let i=R_();if(i)return[i];let C=St();if(!C)console.error("No device specified and no available iOS simulator found."),process.exit(1);return[C.udid]})(),t=[],s=e;for(let i of S){let C=Y(i);if(C){t.push(C);continue}s=await st(s),await Ct(i,s,{detach:!0});let n="127.0.0.1";t.push({pid:Y(i).pid,port:s,device:i,url:`http://${n}:${s}`,streamUrl:`http://${n}:${s}/stream.mjpeg`,wsUrl:`ws://${n}:${s}/ws`}),s++}return t}function pC(_){if(_.length===1){let e=_[0];console.log(JSON.stringify({url:e.url,streamUrl:e.streamUrl,wsUrl:e.wsUrl,port:e.port,device:e.device}))}else console.log(JSON.stringify({devices:_.map((e)=>({url:e.url,streamUrl:e.streamUrl,wsUrl:e.wsUrl,port:e.port,device:e.device}))}))}function uC(_){if(_){let S=s_(_),t=Y(S);if(!t)console.log(JSON.stringify({running:!1,device:S}));else console.log(JSON.stringify({running:!0,url:t.url,streamUrl:t.streamUrl,wsUrl:t.wsUrl,port:t.port,device:t.device,pid:t.pid}));return}let e=te();if(e.length===0)console.log(JSON.stringify({running:!1}));else if(e.length===1){let S=e[0];console.log(JSON.stringify({running:!0,url:S.url,streamUrl:S.streamUrl,wsUrl:S.wsUrl,port:S.port,device:S.device,pid:S.pid}))}else console.log(JSON.stringify({running:!0,streams:e.map((S)=>({url:S.url,streamUrl:S.streamUrl,wsUrl:S.wsUrl,port:S.port,device:S.device,pid:S.pid}))}))}function OC(_){if(_){let e=s_(_),S=Y(e);if(!S){console.log(JSON.stringify({disconnected:!0,device:e}));return}try{process.kill(S.pid,"SIGTERM")}catch{}P_(e),console.log(JSON.stringify({disconnected:!0,device:S.device}))}else{let e=te();if(e.length===0){console.log(JSON.stringify({disconnected:!0,devices:[]}));return}let S=[];for(let t of e){try{process.kill(t.pid,"SIGTERM")}catch{}S.push(t.device)}P_(),console.log(JSON.stringify({disconnected:!0,devices:S}))}}async function lC(_){let e,S=[];for(let C=0;C<_.length;C++)if(_[C]==="--device"||_[C]==="-d")e=_[++C];else S.push(_[C]);let t=Y(e);if(!t)console.error("No serve-sim server running. Run `serve-sim` first."),process.exit(1);let s=S[0];if(!s)console.error("Usage: serve-sim gesture '<json>'"),console.error(`Example: serve-sim gesture '{"type":"begin","x":0.5,"y":0.5}'`),process.exit(1);let i;try{i=JSON.parse(s)}catch{console.error("Invalid JSON:",s),process.exit(1)}return new Promise((C,n)=>{let $=new WebSocket(t.wsUrl);$.binaryType="arraybuffer",$.onopen=()=>{let A=new TextEncoder().encode(JSON.stringify(i)),B=new Uint8Array(1+A.length);B[0]=3,B.set(A,1),$.send(B),setTimeout(()=>{$.close(),C()},50)},$.onerror=()=>{console.error("Failed to connect to serve-sim server at",t.wsUrl),n(Error("WebSocket connection failed"))}})}async function dC(_){let e,S=[];for(let C=0;C<_.length;C++)if(_[C]==="--device"||_[C]==="-d")e=_[++C];else S.push(_[C]);let t=S[0]!==void 0?Number(S[0]):NaN,s=S[1]!==void 0?Number(S[1]):NaN;if(!Number.isFinite(t)||!Number.isFinite(s)||t<0||t>1||s<0||s>1)console.error("Usage: serve-sim tap <x> <y> [-d udid]"),console.error(" x, y are normalized 0..1 of the simulator screen"),console.error(" Example: serve-sim tap 0.5 0.9 # near bottom-center"),process.exit(1);let i=Y(e);if(!i)console.error("No serve-sim server running. Run `serve-sim` first."),process.exit(1);return new Promise((C,n)=>{let $=new WebSocket(i.wsUrl);$.binaryType="arraybuffer";let A=(B)=>{let c=new TextEncoder().encode(JSON.stringify({type:B,x:t,y:s})),a=new Uint8Array(1+c.length);a[0]=3,a.set(c,1),$.send(a)};$.onopen=()=>{A("begin"),setTimeout(()=>{A("end"),setTimeout(()=>{$.close(),C()},50)},40)},$.onerror=()=>{console.error("Failed to connect to serve-sim server at",i.wsUrl),n(Error("WebSocket connection failed"))}})}async function wC(_){let e,S=[];for(let C=0;C<_.length;C++)if(_[C]==="--device"||_[C]==="-d")e=_[++C];else S.push(_[C]);let t=Y(e);if(!t)console.error("No serve-sim server running. Run `serve-sim` first."),process.exit(1);let s=S[0],i=new Set(["portrait","portrait_upside_down","landscape_left","landscape_right"]);if(!s||!i.has(s))console.error(`Usage: serve-sim rotate <${[...i].join("|")}> [-d udid]`),process.exit(1);return new Promise((C,n)=>{let $=new WebSocket(t.wsUrl);$.binaryType="arraybuffer",$.onopen=()=>{let A=new TextEncoder().encode(JSON.stringify({orientation:s})),B=new Uint8Array(1+A.length);B[0]=7,B.set(A,1),$.send(B),setTimeout(()=>{$.close(),C()},50)},$.onerror=()=>{console.error("Failed to connect to serve-sim server at",t.wsUrl),n(Error("WebSocket connection failed"))}})}async function gC(_){let e,S=[];for(let i=0;i<_.length;i++)if(_[i]==="--device"||_[i]==="-d")e=_[++i];else S.push(_[i]);let t=Y(e);if(!t)console.error("No serve-sim server running. Run `serve-sim` first."),process.exit(1);let s=S[0]??"home";return new Promise((i,C)=>{let n=new WebSocket(t.wsUrl);n.binaryType="arraybuffer",n.onopen=()=>{let $=new TextEncoder().encode(JSON.stringify({button:s})),A=new Uint8Array(1+$.length);A[0]=4,A.set($,1),n.send(A),setTimeout(()=>{n.close(),i()},50)},n.onerror=()=>{console.error("Failed to connect to serve-sim server at",t.wsUrl),C(Error("WebSocket connection failed"))}})}async function HC(_){let e,S=[];for(let A=0;A<_.length;A++)if(_[A]==="--device"||_[A]==="-d")e=_[++A];else S.push(_[A]);let t=S[0],s=(S[1]??"").toLowerCase(),i=s==="on"||s==="1"||s==="true",C={blended:"debug_color_blended",copies:"debug_color_copies",copied:"debug_color_copies",misaligned:"debug_color_misaligned",offscreen:"debug_color_offscreen","slow-animations":"debug_slow_animations",slow:"debug_slow_animations"},n=t?C[t]??t:void 0;if(!n||!["on","off","1","0","true","false"].includes(s))console.error(`Usage: serve-sim ca-debug <option> <on|off> [-d udid]
61
+ option shortcuts: ${Object.keys(C).join(", ")}`),process.exit(1);let $=Y(e);if(!$)console.error("No serve-sim server running. Run `serve-sim` first."),process.exit(1);return new Promise((A,B)=>{let c=new WebSocket($.wsUrl);c.binaryType="arraybuffer",c.onopen=()=>{let a=new TextEncoder().encode(JSON.stringify({option:n,enabled:i})),u=new Uint8Array(1+a.length);u[0]=8,u.set(a,1),c.send(u),setTimeout(()=>{c.close(),A()},50)},c.onerror=()=>{console.error("Failed to connect to serve-sim server at",$.wsUrl),B(Error("WebSocket connection failed"))}})}async function NC(_){let e;for(let t=0;t<_.length;t++)if(_[t]==="--device"||_[t]==="-d")e=_[++t];let S=Y(e);if(!S)console.error("No serve-sim server running. Run `serve-sim` first."),process.exit(1);return new Promise((t,s)=>{let i=new WebSocket(S.wsUrl);i.binaryType="arraybuffer",i.onopen=()=>{i.send(new Uint8Array([9])),setTimeout(()=>{i.close(),t()},50)},i.onerror=()=>{console.error("Failed to connect to serve-sim server at",S.wsUrl),s(Error("WebSocket connection failed"))}})}function rt(){let _=[Z(r_,"..","dist","simcam","libSimCameraInjector.dylib"),Z(r_,"simcam","libSimCameraInjector.dylib"),Z(r_,"..","Sources","SimCameraInjector","build","libSimCameraInjector.dylib")];for(let e of _)if(X(e))return __(e);return null}function hC(){let _=Z(r_,"..","Sources","SimCameraInjector","build.sh");if(!X(_))throw Error("SimCameraInjector source not found — this build of serve-sim does not "+"include camera support sources. Reinstall from a recent release.");console.error("[serve-sim] building libSimCameraInjector.dylib (one-time)…"),q(`bash "${_}"`,{stdio:"inherit"});let e=rt();if(!e)throw Error("Build succeeded but dylib not found.");return e}function Ie(){let _=[Z(r_,"..","dist","simcam","serve-sim-camera-helper"),Z(r_,"simcam","serve-sim-camera-helper")];for(let e of _)if(X(e))return __(e);return null}function $t(){let _=Z(r_,"..","Sources","SimCameraHelper","build.sh");if(!X(_))throw Error("SimCameraHelper source not found — webcam support requires building "+"from a checkout that includes Sources/SimCameraHelper.");console.error("[serve-sim] building serve-sim-camera-helper (one-time)…"),q(`bash "${_}"`,{stdio:"inherit"});let e=Ie();if(!e)throw Error("Build succeeded but helper binary not found.");return e}var B_=Z(t_,"simcam");function VC(_){return`/serve-sim-cam-${Ue("sha1").update(_).digest("hex").slice(0,8)}`}function O_(_){return Z(B_,`${_}.pid`)}function qe(_){return Z(B_,`${_}.bundles.json`)}function Xe(_){return`/tmp/serve-sim-cam-${Ue("sha1").update(_).digest("hex").slice(0,12)}.sock`}async function L_(_,e){let S=Xe(_);if(!X(S))throw Error("camera helper socket not found");let t=await import("net");return await new Promise((s,i)=>{let C=t.createConnection(S),n="",$=!1;C.on("data",(A)=>{n+=A.toString();let B=n.indexOf(`
62
+ `);if(B>=0&&!$){$=!0;try{s(JSON.parse(n.slice(0,B)))}catch(c){i(c)}C.end()}}),C.on("error",(A)=>{if(!$)$=!0,i(A)}),C.on("close",()=>{if(!$)$=!0,i(Error("socket closed"))}),C.write(JSON.stringify(e)+`
63
+ `),setTimeout(()=>{if(!$)$=!0,C.destroy(),i(Error("helper timeout"))},3000)})}function Z_(_){let e=O_(_);if(!X(e))return!1;let S=Number(e_(e,"utf-8").trim());return Number.isFinite(S)&&D_(S)&&X(Xe(_))}function Pe(_){let e=qe(_);if(!X(e))return[];let S;try{S=JSON.parse(e_(e,"utf-8"))}catch{return[]}let t=null;try{t=Number(e_(O_(_),"utf-8").trim())||null}catch{}if(t==null||S.helperPid!==t)return[];return Array.isArray(S.bundleIds)?S.bundleIds:[]}function mC(_,e,S){let t=Pe(_),s=t.includes(e)?t:[...t,e],i={helperPid:S,bundleIds:s};if(!X(B_))Y_(B_,{recursive:!0});Se(qe(_),JSON.stringify(i))}function At(_){try{u_(qe(_))}catch{}}function ot(_){let e=O_(_);if(!X(e))return;let S=Number(e_(e,"utf-8").trim());if(Number.isFinite(S)&&D_(S)){try{process.kill(S,"SIGTERM")}catch{}let t=Date.now();while(D_(S)&&Date.now()-t<1500)b_(50)}try{u_(e)}catch{}At(_)}function LC(_){if(!X(B_))Y_(B_,{recursive:!0});let e=Z(B_,`${_.udid}.log`),S=_e(e,"a"),t=["--shm",_.shmName,"--socket",_.socketPath,"--source",_.source];if(_.arg)t.push("--arg",_.arg);if(_.width)t.push("--width",String(_.width));if(_.height)t.push("--height",String(_.height));let s=Me(_.helperBin,t,{detached:!0,stdio:["ignore",S,S]});if(s.unref(),ee(S),!s.pid)throw Error("failed to spawn camera helper");Se(O_(_.udid),String(s.pid)),At(_.udid);let i=Date.now();while(Date.now()-i<3000){if(!D_(s.pid))throw Error(`camera helper exited early — see log at ${e}`);if(X(_.socketPath))break;b_(50)}return s.pid}var WC=new Set(["mp4","m4v","mov","qt","avi","mkv","webm","mpg","mpeg","3gp","3g2","ts","wmv"]),PC=new Set(["png","jpg","jpeg","gif","heic","heif","webp","bmp","tif","tiff"]);function nt(_){let e=_.toLowerCase().split(".").pop()??"";if(WC.has(e))return"video";if(PC.has(e))return"image";let S;try{let t=_e(_,"r");S=Buffer.alloc(16),nC(t,S,0,S.length,0),ee(t)}catch{return null}if(S.length>=8&&S.slice(4,8).toString("ascii")==="ftyp")return"video";if(S.slice(0,4).toString("ascii")==="RIFF"&&S.length>=12){let t=S.slice(8,12).toString("ascii");if(t==="AVI ")return"video";if(t==="WEBP")return"image"}if(S[0]===26&&S[1]===69&&S[2]===223&&S[3]===163)return"video";if(S[0]===137&&S[1]===80&&S[2]===78&&S[3]===71)return"image";if(S[0]===255&&S[1]===216&&S[2]===255)return"image";if(S.slice(0,6).toString("ascii").startsWith("GIF8"))return"image";if(S[0]===66&&S[1]===77)return"image";return null}function MC(_){if(_.file){let e=__(_.file),S=nt(e);if(!S)throw Error(`Could not detect image/video type for: ${e}`);return{kind:S,arg:e}}if(_.webcam)return{kind:"webcam",arg:typeof _.webcam==="string"?_.webcam:void 0};return{kind:"placeholder"}}async function UC(_){let e=VC(_.udid),S=Xe(_.udid);if(Z_(_.udid)){let i=await L_(_.udid,{action:"switch",source:_.source.kind,arg:_.source.arg});if(!i.ok)throw Error(i.error||"helper rejected switch");return{helperPid:Number(e_(O_(_.udid),"utf-8").trim()),shmName:e,relaunched:!1}}ot(_.udid);let t=!_.forceBuild&&Ie()||$t();return{helperPid:LC({udid:_.udid,helperBin:t,shmName:e,socketPath:S,source:_.source.kind,arg:_.source.arg}),shmName:e,relaunched:!0}}async function GC(_){let e,S,t,s=!1,i=!1,C=!1,n=!1,$="auto",A=[];for(let o=0;o<_.length;o++){let r=_[o];if(r==="--device"||r==="-d"){e=_[++o];continue}if(r==="--file"||r==="-f"||r==="--image"||r==="-i"||r==="--video"){S=_[++o];continue}if(r==="--webcam"){let y=_[o+1];if(y&&!y.startsWith("-"))t=y,o++;else t=!0;continue}if(r==="--list-webcams"){i=!0;continue}if(r==="--stop-webcam"){s=!0;continue}if(r==="--build"){C=!0;continue}if(r==="--quiet"||r==="-q"){n=!0;continue}if(r==="--mirror"){let y=_[o+1];if(y==="on"||y==="off"||y==="auto")$=y,o++;else $="on";continue}if(r==="--no-mirror"){$="off";continue}if(r==="--help"||r==="-h"){console.log(`Usage: serve-sim camera <bundle-id> [-d udid] [source-options] [--build]
64
64
  serve-sim camera switch <placeholder|webcam|file> [arg] [-d udid]
65
65
  serve-sim camera mirror <auto|on|off> [-d udid]
66
66
  serve-sim camera --list-webcams
@@ -98,7 +98,7 @@ Examples:
98
98
  serve-sim camera switch placeholder # back to placeholder
99
99
  serve-sim camera switch ~/Movies/loop.mp4 # hot-swap to file
100
100
  serve-sim camera --list-webcams
101
- serve-sim camera --stop-webcam`);return}n.push(r)}if(s){let y=Ue()??sS();k(`"${y}" --list`,{stdio:"inherit"});return}if(i){let y=e?S_(e):R_();if(!y)console.error("No booted simulator."),process.exit(1);if(iS(y),A)console.log(JSON.stringify({udid:y,stopped:!0}));else console.log(`Stopped camera helper for ${y}`);return}if(n[0]==="mirror"){let y=e?S_(e):R_();if(!y)console.error("No booted simulator."),process.exit(1);let r=n[1];if(r!=="auto"&&r!=="on"&&r!=="off")console.error("Usage: serve-sim camera mirror <auto|on|off> [-d udid]"),process.exit(1);if(!Z_(y))console.error("camera helper not running for this device — run `serve-sim camera <bundle-id>` first."),process.exit(1);try{let a=await N_(y,{action:"setMirror",mode:r});if(!a.ok)console.error(`mirror failed: ${a.error??"?"}`),process.exit(1);if(A)console.log(JSON.stringify({udid:y,mirror:r,ok:!0}));else console.log(`\uD83D\uDCF7 Mirror → ${r} on ${y}`)}catch(a){console.error(`mirror failed: ${a?.message??a}`),process.exit(1)}return}if(n[0]==="switch"){let y=e?S_(e):R_();if(!y)console.error("No booted simulator."),process.exit(1);let r=n[1],a=n[2];if(r&&r!=="placeholder"&&r!=="webcam"&&r!=="image"&&r!=="video"&&r!=="file"){let f=__(r);if(K(f))a=f,r="file"}if(r==="file"){if(!a)console.error("camera switch file <path>"),process.exit(1);a=__(a);let f=CS(a);if(!f)console.error(`Could not detect image/video type for: ${a}`),process.exit(1);r=f}if(!r||r!=="placeholder"&&r!=="webcam"&&r!=="image"&&r!=="video")console.error("Usage: serve-sim camera switch <placeholder|webcam|file> [arg] [-d udid]"),process.exit(1);if((r==="image"||r==="video")&&a)a=__(a);if(!Z_(y))console.error("camera helper not running for this device — run `serve-sim camera <bundle-id>` first."),process.exit(1);try{let f=await N_(y,{action:"switch",source:r,arg:a});if(!f.ok)console.error(`switch failed: ${f.error??"?"}`),process.exit(1);if(A)console.log(JSON.stringify({udid:y,...f}));else console.log(`\uD83D\uDCF7 Switched ${y} → ${f.source}${f.arg?` (${f.arg})`:""}`)}catch(f){console.error(`switch failed: ${f?.message??f}`),process.exit(1)}return}if(n[0]==="status"){let y=e?S_(e):R_();if(!y){console.log(JSON.stringify({alive:!1,error:"no booted simulator"}));return}if(!Z_(y)){console.log(JSON.stringify({udid:y,alive:!1}));return}let r=null;try{r=Number(r_(W_(y),"utf-8").trim())||null}catch{}try{let a=await N_(y,{action:"status"});console.log(JSON.stringify({udid:y,alive:!0,helperPid:r,...a}))}catch(a){console.log(JSON.stringify({udid:y,alive:!0,helperPid:r,error:a?.message??String(a)}))}return}let c=n[0];if(!c)console.error("Usage: serve-sim camera <bundle-id> [--image <path>] [-d udid]"),process.exit(1);let o=e?S_(e):R_();if(!o)console.error("No booted simulator. Boot one or pass -d <udid|name>."),process.exit(1);let B=C?null:SS();if(!B)try{B=uC()}catch(y){console.error(`Failed to obtain camera dylib: ${y?.message??y}`),process.exit(1)}if(t&&S)console.error("Pick one source: --file or --webcam, not both."),process.exit(1);if(t){if(t=__(t),!K(t))console.error(`File not found: ${t}`),process.exit(1)}let p;try{p=wC({file:t,webcam:S})}catch(y){console.error(y?.message??String(y)),process.exit(1)}let u=await gC({udid:o,source:p,forceBuild:C}),l=u.shmName,F=u.helperPid;if($!=="auto"||!u.relaunched)try{await N_(o,{action:"setMirror",mode:$})}catch{}try{k(`xcrun simctl privacy "${o}" grant camera "${c}"`,{stdio:"ignore"})}catch{}try{k(`xcrun simctl terminate "${o}" "${c}"`,{stdio:"ignore"})}catch{}let b={...process.env,SIMCTL_CHILD_DYLD_INSERT_LIBRARIES:B,SIMCTL_CHILD_SIMCAM_SHM_NAME:l,...$!=="auto"?{SIMCTL_CHILD_SIMCAM_MIRROR_MODE:$}:{}},v="";try{v=k(`xcrun simctl launch "${o}" "${c}"`,{env:b,encoding:"utf-8"})}catch(y){console.error(`simctl launch failed: ${y?.stderr??y?.message??y}`),process.exit(1)}let T=v.trim().match(/:\s*(\d+)\s*$/),D=T?Number(T[1]):null,E={udid:o,bundleId:c,pid:D,dylib:B,source:p.kind,arg:p.arg??null,shm:l,helperPid:F,mirror:$,hotSwapped:!1,helperRelaunched:u.relaunched};if(A)console.log(JSON.stringify(E));else{let y=u.relaunched?"Injected":"Attached";if(console.log(`\uD83D\uDCF7 ${y} camera into ${c} (pid ${D??"?"}) on ${o}`),console.log(` source: ${p.kind}${p.arg?` (${p.arg})`:""}`),F)console.log(` helper pid: ${F} (shm ${l})`);console.log(` dylib: ${B}`)}}async function hC(_,e,t){let S;if(e.length>0)S=(await Ve(e,3100))[0]?.device;else{let o=ee();if(o.length>0)S=o[0]?.device;else console.log("Starting simulator stream..."),S=(await Ve(e,3100))[0]?.device}let{simMiddleware:i}=await Promise.resolve().then(() => (zt(),xt)),s=i({basePath:"/",device:S}),C=t?1:50,A=_,$,n=!1;for(let o=0;o<C;o++){let B=_+o;try{await NC(B,s),A=B,n=!0;break}catch(p){if($=p,p?.code!=="EADDRINUSE")break}}if(!n){if($?.code==="EADDRINUSE")if(t)console.error(`Port ${_} is already in use. Pass a different --port or stop the other process.`);else console.error(`No available port found in range ${_}-${_+C-1}.`);else console.error(`Failed to start preview server: ${$?.message??$}`);process.exit(1)}let c=oC();if(console.log(""),console.log(` - Local: http://localhost:${A}`),c)console.log(` - Network: http://${c}:${A}`);console.log(""),process.on("SIGINT",()=>process.exit(0)),process.on("SIGTERM",()=>process.exit(0)),await new Promise(()=>{})}function NC(_,e){return St({port:_,middleware:e})}function rS(){console.log(`
101
+ serve-sim camera --stop-webcam`);return}A.push(r)}if(i){let o=Ie()??$t();q(`"${o}" --list`,{stdio:"inherit"});return}if(s){let o=e?s_(e):R_();if(!o)console.error("No booted simulator."),process.exit(1);let r=Pe(o),y=[];for(let D of r)try{q(`xcrun simctl terminate "${o}" "${D}"`,{stdio:"ignore"}),y.push(D)}catch{}if(ot(o),n)console.log(JSON.stringify({udid:o,stopped:!0,terminated:y}));else if(console.log(`Stopped camera helper for ${o}`),y.length>0)console.log(`Terminated injected apps: ${y.join(", ")}`);return}if(A[0]==="mirror"){let o=e?s_(e):R_();if(!o)console.error("No booted simulator."),process.exit(1);let r=A[1];if(r!=="auto"&&r!=="on"&&r!=="off")console.error("Usage: serve-sim camera mirror <auto|on|off> [-d udid]"),process.exit(1);if(!Z_(o))console.error("camera helper not running for this device — run `serve-sim camera <bundle-id>` first."),process.exit(1);try{let y=await L_(o,{action:"setMirror",mode:r});if(!y.ok)console.error(`mirror failed: ${y.error??"?"}`),process.exit(1);if(n)console.log(JSON.stringify({udid:o,mirror:r,ok:!0}));else console.log(`\uD83D\uDCF7 Mirror → ${r} on ${o}`)}catch(y){console.error(`mirror failed: ${y?.message??y}`),process.exit(1)}return}if(A[0]==="switch"){let o=e?s_(e):R_();if(!o)console.error("No booted simulator."),process.exit(1);let r=A[1],y=A[2];if(r&&r!=="placeholder"&&r!=="webcam"&&r!=="image"&&r!=="video"&&r!=="file"){let D=__(r);if(X(D))y=D,r="file"}if(r==="file"){if(!y)console.error("camera switch file <path>"),process.exit(1);y=__(y);let D=nt(y);if(!D)console.error(`Could not detect image/video type for: ${y}`),process.exit(1);r=D}if(!r||r!=="placeholder"&&r!=="webcam"&&r!=="image"&&r!=="video")console.error("Usage: serve-sim camera switch <placeholder|webcam|file> [arg] [-d udid]"),process.exit(1);if((r==="image"||r==="video")&&y)y=__(y);if(!Z_(o))console.error("camera helper not running for this device — run `serve-sim camera <bundle-id>` first."),process.exit(1);try{let D=await L_(o,{action:"switch",source:r,arg:y});if(!D.ok)console.error(`switch failed: ${D.error??"?"}`),process.exit(1);if(n)console.log(JSON.stringify({udid:o,...D}));else console.log(`\uD83D\uDCF7 Switched ${o} → ${D.source}${D.arg?` (${D.arg})`:""}`)}catch(D){console.error(`switch failed: ${D?.message??D}`),process.exit(1)}return}if(A[0]==="status"){let o=e?s_(e):R_();if(!o){console.log(JSON.stringify({alive:!1,error:"no booted simulator"}));return}if(!Z_(o)){console.log(JSON.stringify({udid:o,alive:!1}));return}let r=null;try{r=Number(e_(O_(o),"utf-8").trim())||null}catch{}let y=Pe(o);try{let D=await L_(o,{action:"status"});console.log(JSON.stringify({udid:o,alive:!0,helperPid:r,bundleIds:y,...D}))}catch(D){console.log(JSON.stringify({udid:o,alive:!0,helperPid:r,bundleIds:y,error:D?.message??String(D)}))}return}let B=A[0];if(!B)console.error("Usage: serve-sim camera <bundle-id> [--image <path>] [-d udid]"),process.exit(1);let c=e?s_(e):R_();if(!c)console.error("No booted simulator. Boot one or pass -d <udid|name>."),process.exit(1);let a=C?null:rt();if(!a)try{a=hC()}catch(o){console.error(`Failed to obtain camera dylib: ${o?.message??o}`),process.exit(1)}if(S&&t)console.error("Pick one source: --file or --webcam, not both."),process.exit(1);if(S){if(S=__(S),!X(S))console.error(`File not found: ${S}`),process.exit(1)}let u;try{u=MC({file:S,webcam:t})}catch(o){console.error(o?.message??String(o)),process.exit(1)}let v=await UC({udid:c,source:u,forceBuild:C}),O=v.shmName,p=v.helperPid;if($!=="auto"||!v.relaunched)try{await L_(c,{action:"setMirror",mode:$})}catch{}try{q(`xcrun simctl privacy "${c}" grant camera "${B}"`,{stdio:"ignore"})}catch{}try{q(`xcrun simctl terminate "${c}" "${B}"`,{stdio:"ignore"})}catch{}let F={...process.env,SIMCTL_CHILD_DYLD_INSERT_LIBRARIES:a,SIMCTL_CHILD_SIMCAM_SHM_NAME:O,...$!=="auto"?{SIMCTL_CHILD_SIMCAM_MIRROR_MODE:$}:{}},E="";try{E=q(`xcrun simctl launch "${c}" "${B}"`,{env:F,encoding:"utf-8"})}catch(o){console.error(`simctl launch failed: ${o?.stderr??o?.message??o}`),process.exit(1)}let T=E.trim().match(/:\s*(\d+)\s*$/),f=T?Number(T[1]):null;if(p)mC(c,B,p);let b={udid:c,bundleId:B,pid:f,dylib:a,source:u.kind,arg:u.arg??null,shm:O,helperPid:p,mirror:$,hotSwapped:!1,helperRelaunched:v.relaunched};if(n)console.log(JSON.stringify(b));else{let o=v.relaunched?"Injected":"Attached";if(console.log(`\uD83D\uDCF7 ${o} camera into ${B} (pid ${f??"?"}) on ${c}`),console.log(` source: ${u.kind}${u.arg?` (${u.arg})`:""}`),p)console.log(` helper pid: ${p} (shm ${O})`);console.log(` dylib: ${a}`)}}async function IC(_,e,S,t){let s;if(e.length>0)s=(await We(e,3100))[0]?.device;else{let u=te();if(u.length>0)s=u[0]?.device;else console.log("Starting simulator stream..."),s=(await We(e,3100))[0]?.device}let{simMiddleware:i}=await Promise.resolve().then(() => (QS(),ZS)),C=i({basePath:"/",device:s}),n=S?1:50,$=_,A,B=!1;for(let u=0;u<n;u++){let v=_+u;try{await qC(v,C,t),$=v,B=!0;break}catch(O){if(A=O,O?.code!=="EADDRINUSE")break}}if(!B){if(A?.code==="EADDRINUSE")if(S)console.error(`Port ${_} is already in use. Pass a different --port or stop the other process.`);else console.error(`No available port found in range ${_}-${_+n-1}.`);else console.error(`Failed to start preview server: ${A?.message??A}`);process.exit(1)}let a=t!=="127.0.0.1"&&t!=="localhost"&&t!=="::1"?fC():null;if(console.log(""),console.log(` - Local: http://localhost:${$}`),a)console.log(` - Network: http://${a}:${$}`),console.log(""),console.log(" ⚠️ LAN exposure enabled (--host). The /exec route is gated by"),console.log(" a session token, but any host that can reach this port can"),console.log(" attempt to read it — only enable on trusted networks.");console.log(""),process.on("SIGINT",()=>process.exit(0)),process.on("SIGTERM",()=>process.exit(0)),await new Promise(()=>{})}function qC(_,e,S){return CS({port:_,middleware:e,host:S})}function yt(){console.log(`
102
102
  serve-sim - Stream iOS Simulator to the browser
103
103
 
104
104
  Usage:
@@ -120,6 +120,9 @@ Usage:
120
120
 
121
121
  Options:
122
122
  -p, --port <port> Starting port (preview default: 3200, stream default: 3100)
123
+ --host <addr> Interface to bind the preview server to (default: 127.0.0.1).
124
+ Use 0.0.0.0 to expose on the LAN — only do this on trusted
125
+ networks: the preview exposes a token-gated shell-exec route.
123
126
  -d, --detach Spawn helper and exit (daemon mode)
124
127
  -q, --quiet Suppress human-readable output, JSON only
125
128
  --no-preview Skip the web preview server; stream in foreground only
@@ -135,4 +138,4 @@ Examples:
135
138
  serve-sim --detach Start streaming in background (daemon)
136
139
  serve-sim --list Show all running streams
137
140
  serve-sim --kill Stop all streams
138
- `)}var U=process.argv.slice(2);if(U[0]==="gesture")await TC(U.slice(1)),process.exit(0);if(U[0]==="tap")await fC(U.slice(1)),process.exit(0);if(U[0]==="button")await FC(U.slice(1)),process.exit(0);if(U[0]==="rotate")await EC(U.slice(1)),process.exit(0);if(U[0]==="ca-debug")await bC(U.slice(1)),process.exit(0);if(U[0]==="memory-warning")await vC(U.slice(1)),process.exit(0);if(U[0]==="camera")await HC(U.slice(1)),process.exit(0);var V_,$S=!1,AS=!1,oS=!1,nS=!1,yS=!1,aS=!1,Q_=[],cS,RS;for(let _=0;_<U.length;_++){let e=U[_];switch(e){case"--port":case"-p":V_=parseInt(U[++_]??"3100",10);break;case"--detach":case"-d":$S=!0;break;case"--quiet":case"-q":AS=!0;break;case"--no-preview":aS=!0;break;case"--list":case"-l":if(oS=!0,U[_+1]&&!U[_+1].startsWith("-"))cS=U[++_];break;case"--kill":case"-k":if(nS=!0,U[_+1]&&!U[_+1].startsWith("-"))RS=U[++_];break;case"--help":case"-h":case"help":yS=!0;break;default:if(!e.startsWith("-"))Q_.push(e);else console.error(`Unknown flag: ${e}`),rS(),process.exit(1)}}if(yS)rS(),process.exit(0);if(oS)BC(cS),process.exit(0);if(nS)DC(RS),process.exit(0);if($S){let _=await Ve(Q_,V_??3100);RC(_)}else if(aS)await cC(Q_,V_??3100,AS);else await hC(V_??3200,Q_,V_!==void 0);
141
+ `)}var U=process.argv.slice(2);if(U[0]==="gesture")await lC(U.slice(1)),process.exit(0);if(U[0]==="tap")await dC(U.slice(1)),process.exit(0);if(U[0]==="button")await gC(U.slice(1)),process.exit(0);if(U[0]==="rotate")await wC(U.slice(1)),process.exit(0);if(U[0]==="ca-debug")await HC(U.slice(1)),process.exit(0);if(U[0]==="memory-warning")await NC(U.slice(1)),process.exit(0);if(U[0]==="camera")await GC(U.slice(1)),process.exit(0);var W_,at=!1,ct=!1,Rt=!1,Bt=!1,Dt=!1,Tt=!1,ft="127.0.0.1",Q_=[],Et,Ft;for(let _=0;_<U.length;_++){let e=U[_];switch(e){case"--port":case"-p":W_=parseInt(U[++_]??"3100",10);break;case"--host":ft=U[++_]??"127.0.0.1";break;case"--detach":case"-d":at=!0;break;case"--quiet":case"-q":ct=!0;break;case"--no-preview":Tt=!0;break;case"--list":case"-l":if(Rt=!0,U[_+1]&&!U[_+1].startsWith("-"))Et=U[++_];break;case"--kill":case"-k":if(Bt=!0,U[_+1]&&!U[_+1].startsWith("-"))Ft=U[++_];break;case"--help":case"-h":case"help":Dt=!0;break;default:if(!e.startsWith("-"))Q_.push(e);else console.error(`Unknown flag: ${e}`),yt(),process.exit(1)}}if(Dt)yt(),process.exit(0);if(Rt)uC(Et),process.exit(0);if(Bt)OC(Ft),process.exit(0);if(at){let _=await We(Q_,W_??3100);pC(_)}else if(Tt)await vC(Q_,W_??3100,ct);else await IC(W_??3200,Q_,W_!==void 0,ft);