@vonage/ml-transformers 5.1.2 → 5.2.0-alpha.0
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/README.md +2 -0
- package/dist/ml-transformers.es.js +3749 -3695
- package/dist/ml-transformers.min.js +2 -2
- package/dist/ml-transformers.static.js +3749 -3695
- package/dist/ml-transformers.umd.js +53 -53
- package/package.json +2 -3
|
@@ -1,41 +1,41 @@
|
|
|
1
|
-
(function(Ue,Dn){typeof exports=="object"&&typeof module<"u"?Dn(exports):typeof define=="function"&&define.amd?define(["exports"],Dn):(Ue=typeof globalThis<"u"?globalThis:Ue||self,Dn(Ue["ml-transformers"]={}))})(this,function(Ue){"use strict";var
|
|
2
|
-
data: ${x}`)})}logIfDebugEnabled(n,r,f){(vr.isDebugEnabled||this.debug.enabled)&&this.debug.logger(n,this.debug.name,r,f)}on(n,r){mi(r),n=Array.isArray(n)?n:[n];for(const f of n)Lr(f),Hr(this,f).add(r),this.logIfDebugEnabled("subscribe",f,void 0),go(f)||this.emit(hi,{eventName:f,listener:r});return this.off.bind(this,n,r)}off(n,r){mi(r),n=Array.isArray(n)?n:[n];for(const f of n)Lr(f),Hr(this,f).delete(r),this.logIfDebugEnabled("unsubscribe",f,void 0),go(f)||this.emit(fi,{eventName:f,listener:r})}once(n){return new Promise(r=>{const f=this.on(n,Z=>{f(),r(Z)})})}events(n){n=Array.isArray(n)?n:[n];for(const r of n)Lr(r);return gs(this,n)}async emit(n,r){Lr(n),this.logIfDebugEnabled("emit",n,r),yc(this,n,r);const f=Hr(this,n),Z=sr.get(this),x=[...f],H=go(n)?[]:[...Z];await ys,await Promise.all([...x.map(async T=>{if(f.has(T))return T(r)}),...H.map(async T=>{if(Z.has(T))return T(n,r)})])}async emitSerial(n,r){Lr(n),this.logIfDebugEnabled("emitSerial",n,r);const f=Hr(this,n),Z=sr.get(this),x=[...f],H=[...Z];await ys;for(const T of x)f.has(T)&&await T(r);for(const T of H)Z.has(T)&&await T(n,r)}onAny(n){return mi(n),this.logIfDebugEnabled("subscribeAny",void 0,void 0),sr.get(this).add(n),this.emit(hi,{listener:n}),this.offAny.bind(this,n)}anyEvent(){return gs(this)}offAny(n){mi(n),this.logIfDebugEnabled("unsubscribeAny",void 0,void 0),this.emit(fi,{listener:n}),sr.get(this).delete(n)}clearListeners(n){n=Array.isArray(n)?n:[n];for(const r of n)if(this.logIfDebugEnabled("clear",r,void 0),typeof r=="string"||typeof r=="symbol"){Hr(this,r).clear();const f=_r(this,r);for(const Z of f)Z.finish();f.clear()}else{sr.get(this).clear();for(const f of di.get(this).values())f.clear();for(const f of Or.get(this).values()){for(const Z of f)Z.finish();f.clear()}}}listenerCount(n){n=Array.isArray(n)?n:[n];let r=0;for(const f of n){if(typeof f=="string"){r+=sr.get(this).size+Hr(this,f).size+_r(this,f).size+_r(this).size;continue}typeof f<"u"&&Lr(f),r+=sr.get(this).size;for(const Z of di.get(this).values())r+=Z.size;for(const Z of Or.get(this).values())r+=Z.size}return r}bindMethods(n,r){if(typeof n!="object"||n===null)throw new TypeError("`target` must be an object");r=Zs(r);for(const f of r){if(n[f]!==void 0)throw new Error(`The property \`${f}\` already exists on \`target\``);Object.defineProperty(n,f,{enumerable:!1,value:this[f].bind(this)})}}}const vs=Object.getOwnPropertyNames(vr.prototype).filter(i=>i!=="constructor");Object.defineProperty(vr,"listenerAdded",{value:hi,writable:!1,enumerable:!0,configurable:!1}),Object.defineProperty(vr,"listenerRemoved",{value:fi,writable:!1,enumerable:!0,configurable:!1});var Zo=vr;function gc(i){return typeof i=="object"&&i!==null&&"message"in i&&typeof i.message=="string"}function Zc(i){if(gc(i))return i;try{return new Error(JSON.stringify(i))}catch{return new Error(String(i))}}function vo(i){return Zc(i).message}var vc=Object.defineProperty,Gc=(i,n,r)=>n in i?vc(i,n,{enumerable:!0,configurable:!0,writable:!0,value:r}):i[n]=r,Xc=(i,n,r)=>(Gc(i,typeof n!="symbol"?n+"":n,r),r);const Wc="hlg.tokbox.com/prod/logging/vcp_webrtc",Vc="https://",Rc=1e4;let pi;const Ic=new Uint8Array(16);function xc(){if(!pi&&(pi=typeof crypto<"u"&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto),!pi))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return pi(Ic)}const Bn=[];for(let i=0;i<256;++i)Bn.push((i+256).toString(16).slice(1));function Sc(i,n=0){return(Bn[i[n+0]]+Bn[i[n+1]]+Bn[i[n+2]]+Bn[i[n+3]]+"-"+Bn[i[n+4]]+Bn[i[n+5]]+"-"+Bn[i[n+6]]+Bn[i[n+7]]+"-"+Bn[i[n+8]]+Bn[i[n+9]]+"-"+Bn[i[n+10]]+Bn[i[n+11]]+Bn[i[n+12]]+Bn[i[n+13]]+Bn[i[n+14]]+Bn[i[n+15]]).toLowerCase()}const Tc=typeof crypto<"u"&&crypto.randomUUID&&crypto.randomUUID.bind(crypto),Gs={randomUUID:Tc};function Yc(i,n,r){if(Gs.randomUUID&&!n&&!i)return Gs.randomUUID();i=i||{};const f=i.random||(i.rng||xc)();if(f[6]=f[6]&15|64,f[8]=f[8]&63|128,n){r=r||0;for(let Z=0;Z<16;++Z)n[r+Z]=f[Z];return n}return Sc(f)}function Go(i,n){globalThis.vonage||(globalThis.vonage={}),globalThis.vonage.workerizer||(globalThis.vonage.workerizer={});let r=globalThis.vonage.workerizer;return r[i]||(r[i]=n),r[i]}const lr=Go("globals",{});var Gr=(i=>(i.INIT="INIT",i.FORWARD="FORWARD",i.TERMINATE="TERMINATE",i.GLOBALS_SYNC="GLOBALS_SYNC",i))(Gr||{});function Xs(i){return[ImageBitmap,ReadableStream,WritableStream].some(n=>i instanceof n)}let wc=0;function Lc(i,n,r,f,Z){const x=wc++;return i.postMessage({id:x,type:n,functionName:r,args:f},f.filter(H=>Xs(H))),new Promise(H=>{Z==null||Z.set(x,H)})}function Qr(i,n){const{id:r,type:f}=i,Z=Array.isArray(n)?n:[n];postMessage({id:r,type:f,result:n},Z.filter(x=>Xs(x)))}const Ws=Go("workerized",{});function Vs(){return typeof WorkerGlobalScope<"u"&&self instanceof WorkerGlobalScope}async function Hc(){if(Vs())Qr({type:Gr.GLOBALS_SYNC},lr);else{const i=[];for(const n in Ws){const{worker:r,resolvers:f}=Ws[n].workerContext;r&&i.push(Lc(r,Gr.GLOBALS_SYNC,"",[lr],f))}await Promise.all(i)}}function bi(i,n){if(Array.isArray(n))n.splice(0,n.length);else if(typeof n=="object")for(const r in n)delete n[r];for(const r in i)Array.isArray(i[r])?(n[r]=[],bi(i[r],n[r])):typeof i[r]=="object"?(n[r]={},bi(i[r],n[r])):n[r]=i[r]}async function Fc(i,n){const{functionName:r,args:f}=i;if(!n.instance)throw"instance not initialized";if(!r)throw"missing function name to call";if(!n.instance[r])throw`undefined function [${r}] in class ${n.instance.constructor.workerId}`;Qr(i,await n.instance[r](...f!=null?f:[]))}const Cc=Go("registeredWorkers",{});function Jc(i,n){if(!i.args)throw"Missing className while initializing worker";const[r,f]=i.args,Z=Cc[r];if(Z)n.instance=new Z(i.args.slice(1));else throw`unknown worker class ${r}`;bi(f,lr),Qr(i,typeof n.instance!==void 0)}async function kc(i,n){const{args:r}=i;if(!n.instance)throw"instance not initialized";let f;n.instance.terminate&&(f=await n.instance.terminate(...r!=null?r:[])),Qr(i,f)}function Nc(i){if(!i.args)throw"Missing globals while syncing";bi(i.args[0],lr),Qr(i,{})}function Ec(){const i={};onmessage=async n=>{const r=n.data;switch(r.type){case Gr.INIT:Jc(r,i);break;case Gr.FORWARD:Fc(r,i);break;case Gr.TERMINATE:kc(r,i);break;case Gr.GLOBALS_SYNC:Nc(r);break}}}Vs()&&Ec();function Uc(i,n){return lr[i]||(lr[i]=n),[()=>lr[i],async r=>{lr[i]=r,await Hc()}]}function Bc(i,n){return Uc(i,n)}const[Kc,Mc]=Bc("metadata");function Ac(i){Mc(i)}function yi(){return Kc()}class Xo{constructor(n){Xc(this,"uuid",Yc()),this.config=n}async send(n){var r,f,Z;const{appId:x,sourceType:H}=(r=yi())!=null?r:{};if(!x||!H)return"metadata missing";const T=new AbortController,J=setTimeout(()=>T.abort(),Rc);return await((Z=(f=this.config)==null?void 0:f.fetch)!=null?Z:fetch)(this.getUrl(),{method:"POST",headers:this.getHeaders(),body:JSON.stringify(this.buildReport(n)),signal:T.signal}),clearTimeout(J),"success"}getUrl(){var n;let r=(n=yi().proxyUrl)!=null?n:Vc;return r+=(r.at(-1)==="/"?"":"/")+Wc,r}getHeaders(){return{"Content-Type":"application/json"}}buildReport(n){const r=yi();return{guid:this.uuid,...n,applicationId:r.appId,timestamp:Date.now(),proxyUrl:r.proxyUrl,source:r.sourceType}}}const gi="2.0.3";class zc{constructor(n){Me(this,"frameTransformedCount",0),Me(this,"frameFromSourceCount",0),Me(this,"startAt",0),Me(this,"reporter"),this.config=n,this.reporter=new Xo(n)}async onFrameFromSource(){this.frameFromSourceCount++}get fps(){const{startAt:n,frameFromSourceCount:r}=this,f=(Date.now()-n)/1e3;return r/f}async onFrameTransformed(n={},r=!1){this.startAt===0&&(this.startAt=Date.now()),this.frameTransformedCount++;const{startAt:f,frameTransformedCount:Z,frameFromSourceCount:x}=this,H=Date.now(),T=(H-f)/1e3,J=Z/T,et=x/T;return r||this.frameTransformedCount>=this.config.loggingIntervalFrameCount?(this.frameFromSourceCount=0,this.frameTransformedCount=0,this.startAt=H,this.reporter.config=this.config,this.reporter.send({...this.config.report,variation:"QoS",fps:et,transformedFps:J,framesTransformed:Z,...n})):"success"}}var Rs=(i=>(i.FPS_DROP="fps_drop",i))(Rs||{}),Is=(i=>(i.start="start",i.transform="transform",i.flush="flush",i))(Is||{}),Zi=(i=>(i.pipeline_ended="pipeline_ended",i.pipeline_ended_with_error="pipeline_ended_with_error",i.pipeline_started="pipeline_started",i.pipeline_started_with_error="pipeline_started_with_error",i.pipeline_restarted="pipeline_restarted",i.pipeline_restarted_with_error="pipeline_restarted_with_error",i))(Zi||{});const jc=500,Pc=.8;class Oc extends Zo{constructor(n,r){super(),Me(this,"reporter_",new Xo),Me(this,"reporterQos_",new zc({loggingIntervalFrameCount:jc,report:{version:gi}})),Me(this,"transformerType_"),Me(this,"transformer_"),Me(this,"shouldStop_"),Me(this,"isFlashed_"),Me(this,"mediaTransformerQosReportStartTimestamp_"),Me(this,"videoHeight_"),Me(this,"videoWidth_"),Me(this,"trackExpectedRate_"),Me(this,"index_"),Me(this,"controller_"),this.index_=r,this.transformer_=n,this.shouldStop_=!1,this.isFlashed_=!1,this.mediaTransformerQosReportStartTimestamp_=0,this.videoHeight_=0,this.videoWidth_=0,this.trackExpectedRate_=-1,this.transformerType_="Custom","getTransformerType"in n&&(this.transformerType_=n.getTransformerType()),this.report({variation:"Create"})}setTrackExpectedRate(n){this.trackExpectedRate_=n}async start(n){if(this.controller_=n,this.transformer_&&typeof this.transformer_.start=="function")try{await this.transformer_.start(n)}catch(r){this.report({message:nr.errors.transformer_start,variation:"Error",error:vo(r)});const f={eventMetaData:{transformerIndex:this.index_},error:r,function:"start"};this.emit("error",f)}}async transform(n,r){var f,Z,x,H;if(this.mediaTransformerQosReportStartTimestamp_===0&&(this.mediaTransformerQosReportStartTimestamp_=Date.now()),n instanceof VideoFrame&&(this.videoHeight_=(f=n==null?void 0:n.displayHeight)!=null?f:0,this.videoWidth_=(Z=n==null?void 0:n.displayWidth)!=null?Z:0),this.reporterQos_.onFrameFromSource(),this.transformer_)if(this.shouldStop_)console.warn("[Pipeline] flush from transform"),n.close(),this.flush(r),r.terminate();else{try{await((H=(x=this.transformer_).transform)==null?void 0:H.call(x,n,r)),this.reportQos()}catch(T){this.report({message:nr.errors.transformer_transform,variation:"Error",error:vo(T)});const J={eventMetaData:{transformerIndex:this.index_},error:T,function:"transform"};this.emit("error",J)}if(this.trackExpectedRate_!=-1&&this.trackExpectedRate_*Pc>this.reporterQos_.fps){const T={eventMetaData:{transformerIndex:this.index_},warningType:"fps_drop",dropInfo:{requested:this.trackExpectedRate_,current:this.reporterQos_.fps}};this.emit("warn",T)}}}async flush(n){if(this.transformer_&&typeof this.transformer_.flush=="function"&&!this.isFlashed_){this.isFlashed_=!0;try{await this.transformer_.flush(n)}catch(r){this.report({message:nr.errors.transformer_flush,variation:"Error",error:vo(r)});const f={eventMetaData:{transformerIndex:this.index_},error:r,function:"flush"};this.emit("error",f)}}this.reportQos(!0),this.report({variation:"Delete"})}stop(){console.log("[Pipeline] Stop stream."),this.controller_&&(this.flush(this.controller_),this.controller_.terminate()),this.shouldStop_=!0}report(n){this.reporter_.send({version:gi,action:"MediaTransformer",transformerType:this.transformerType_,...n})}reportQos(n=!1){this.reporterQos_.config={...this.reporterQos_.config},this.reporterQos_.onFrameTransformed({version:gi,action:"MediaTransformer",transformerType:this.transformerType_,videoWidth:this.videoWidth_,videoHeight:this.videoHeight_},n)}}class _c extends Zo{constructor(n){super(),Me(this,"transformers_"),Me(this,"trackExpectedRate_"),this.transformers_=[],this.trackExpectedRate_=-1;for(let r=0;r<n.length;r++){let f=new Oc(n[r],r);f.on("error",Z=>{this.emit("error",Z)}),f.on("warn",Z=>{this.emit("warn",Z)}),this.transformers_.push(f)}}setTrackExpectedRate(n){this.trackExpectedRate_=n;for(let r of this.transformers_)r.setTrackExpectedRate(this.trackExpectedRate_)}async start(n,r){if(!this.transformers_||this.transformers_.length===0){console.log("[Pipeline] No transformers.");return}try{let f=n;for(let Z of this.transformers_)n=n.pipeThrough(new TransformStream(Z));n.pipeTo(r).then(async()=>{console.log("[Pipeline] Setup."),await r.abort(),await f.cancel(),this.emit("pipelineInfo","pipeline_ended")}).catch(async Z=>{n.cancel().then(()=>{console.log("[Pipeline] Shutting down streams after abort.")}).catch(x=>{console.error("[Pipeline] Error from stream transform:",x)}),await r.abort(Z),await f.cancel(Z),this.emit("pipelineInfo","pipeline_ended_with_error")})}catch{this.emit("pipelineInfo","pipeline_started_with_error"),this.destroy();return}this.emit("pipelineInfo","pipeline_started"),console.log("[Pipeline] Pipeline started.")}async destroy(){console.log("[Pipeline] Destroying Pipeline.");for(let n of this.transformers_)n.stop()}}class Qc extends Zo{constructor(){super(),Me(this,"reporter_"),Me(this,"pipeline_"),Me(this,"transformers_"),Me(this,"readable_"),Me(this,"writable_"),Me(this,"trackExpectedRate_"),this.reporter_=new Xo,this.trackExpectedRate_=-1,this.report({variation:"Create"})}setTrackExpectedRate(n){this.trackExpectedRate_=n,this.pipeline_&&this.pipeline_.setTrackExpectedRate(this.trackExpectedRate_)}transform(n,r){return this.readable_=n,this.writable_=r,this.transformInternal()}transformInternal(){return new Promise(async(n,r)=>{if(!this.transformers_||this.transformers_.length===0){this.report({message:nr.errors.transformer_none,variation:"Error"}),r("[MediaProcessor] Need to set transformers.");return}if(!this.readable_){this.report({variation:"Error",message:nr.errors.readable_null}),r("[MediaProcessor] Readable is null.");return}if(!this.writable_){this.report({variation:"Error",message:nr.errors.writable_null}),r("[MediaProcessor] Writable is null.");return}let f=!1;this.pipeline_&&(f=!0,this.pipeline_.clearListeners(),this.pipeline_.destroy()),this.pipeline_=new _c(this.transformers_),this.pipeline_.on("warn",Z=>{this.emit("warn",Z)}),this.pipeline_.on("error",Z=>{this.emit("error",Z)}),this.pipeline_.on("pipelineInfo",Z=>{f&&(Z==="pipeline_started"?Z=Zi.pipeline_restarted:Z==="pipeline_started_with_error"&&(Z=Zi.pipeline_restarted_with_error)),this.emit("pipelineInfo",Z)}),this.trackExpectedRate_!=-1&&this.pipeline_.setTrackExpectedRate(this.trackExpectedRate_),this.pipeline_.start(this.readable_,this.writable_).then(()=>{n()}).catch(Z=>{r(Z)})})}setTransformers(n){return this.report({variation:"Update",message:nr.updates.transformer_new}),this.transformers_=n,this.readable_&&this.writable_?this.transformInternal():Promise.resolve()}destroy(){return new Promise(async n=>{this.pipeline_&&this.pipeline_.destroy(),this.report({variation:"Delete"}),n()})}report(n){this.reporter_.send({version:gi,action:"MediaProcessor",...n})}}class Dc{constructor(){Me(this,"processor_"),Me(this,"generator_"),this.processor_=null,this.generator_=null}init(n){return new Promise((r,f)=>{try{this.processor_=new MediaStreamTrackProcessor(n)}catch(Z){console.log(`[InsertableStreamHelper] MediaStreamTrackProcessor failed: ${Z}`),f(Z)}try{n.kind==="audio"?this.generator_=new MediaStreamTrackGenerator({kind:"audio"}):n.kind==="video"?this.generator_=new MediaStreamTrackGenerator({kind:"video"}):f("kind not supported")}catch(Z){console.log(`[InsertableStreamHelper] MediaStreamTrackGenerator failed: ${Z}`),f(Z)}r()})}getReadable(){return this.processor_.readable}getWriteable(){return this.generator_.writable}getProccesorTrack(){return this.generator_}}class $c{constructor(n){Me(this,"insertableStreamHelper_"),Me(this,"mediaProcessor_"),this.insertableStreamHelper_=new Dc,this.mediaProcessor_=n}setTrack(n){return new Promise((r,f)=>{this.insertableStreamHelper_.init(n).then(()=>{this.mediaProcessor_.transform(this.insertableStreamHelper_.getReadable(),this.insertableStreamHelper_.getWriteable()).then(()=>{r(this.insertableStreamHelper_.getProccesorTrack())}).catch(Z=>{f(Z)})}).catch(Z=>{f(Z)})})}destroy(){return new Promise((n,r)=>{this.mediaProcessor_?this.mediaProcessor_.destroy().then(()=>{n()}).catch(f=>{r(f)}):r("no processor")})}}var Dr=(i=>(i.Low="Low",i.High="High",i))(Dr||{}),xs=(i=>(i.BackgroundBlur="BackgroundBlur",i.VirtualBackground="VirtualBackground",i.VideoBackground="VideoBackground",i.SilhouetteBlur="SilhouetteBlur",i))(xs||{}),vi=(i=>(i.FAST="FAST",i.PRECISE="PRECISE",i))(vi||{}),$r=(i=>(i.CANVAS="CANVAS",i.WEBGL="WEBGL",i))($r||{});const qc=async()=>WebAssembly.validate(new Uint8Array([0,97,115,109,1,0,0,0,1,5,1,96,0,1,123,3,2,1,0,10,10,1,8,0,65,0,253,15,253,98,11]));var t2=function(){var i=typeof document<"u"&&document.currentScript?document.currentScript.src:void 0;return function(n){n=n||{};var r=typeof n<"u"?n:{},f,Z;r.ready=new Promise(function(tt,it){f=tt,Z=it});var x={},H;for(H in r)r.hasOwnProperty(H)&&(x[H]=r[H]);var T="./this.program",J=function(tt,it){throw it},et=!0,lt="";function pt(tt){return r.locateFile?r.locateFile(tt,lt):lt+tt}var Yt;typeof document<"u"&&document.currentScript&&(lt=document.currentScript.src),i&&(lt=i),lt.indexOf("blob:")!==0?lt=lt.substr(0,lt.replace(/[?#].*/,"").lastIndexOf("/")+1):lt="";var Lt=r.print||console.log.bind(console),at=r.printErr||console.warn.bind(console);for(H in x)x.hasOwnProperty(H)&&(r[H]=x[H]);x=null,r.arguments&&r.arguments,r.thisProgram&&(T=r.thisProgram),r.quit&&(J=r.quit);var dt;r.wasmBinary&&(dt=r.wasmBinary);var Bt=r.noExitRuntime||!0;typeof WebAssembly!="object"&&he("no native wasm support detected");var Nt,ee=!1,O=typeof TextDecoder<"u"?new TextDecoder("utf8"):void 0;function $e(tt,it,ut){for(var _t=it+ut,de=it;tt[de]&&!(de>=_t);)++de;if(de-it>16&&tt.subarray&&O)return O.decode(tt.subarray(it,de));for(var ue="";it<de;){var St=tt[it++];if(!(St&128)){ue+=String.fromCharCode(St);continue}var me=tt[it++]&63;if((St&224)==192){ue+=String.fromCharCode((St&31)<<6|me);continue}var Ce=tt[it++]&63;if((St&240)==224?St=(St&15)<<12|me<<6|Ce:St=(St&7)<<18|me<<12|Ce<<6|tt[it++]&63,St<65536)ue+=String.fromCharCode(St);else{var en=St-65536;ue+=String.fromCharCode(55296|en>>10,56320|en&1023)}}return ue}function je(tt,it){return tt?$e(Zt,tt,it):""}function We(tt,it,ut){for(var _t=0;_t<tt.length;++_t)ne[it++>>0]=tt.charCodeAt(_t);ut||(ne[it>>0]=0)}function zt(tt,it){return tt%it>0&&(tt+=it-tt%it),tt}var Jn,ne,Zt,qe;function zn(tt){Jn=tt,r.HEAP8=ne=new Int8Array(tt),r.HEAP16=new Int16Array(tt),r.HEAP32=qe=new Int32Array(tt),r.HEAPU8=Zt=new Uint8Array(tt),r.HEAPU16=new Uint16Array(tt),r.HEAPU32=new Uint32Array(tt),r.HEAPF32=new Float32Array(tt),r.HEAPF64=new Float64Array(tt)}r.INITIAL_MEMORY;var Re,Ct=[],Te=[],ln=[],Xn=0;function Hn(){return Bt||Xn>0}function In(){if(r.preRun)for(typeof r.preRun=="function"&&(r.preRun=[r.preRun]);r.preRun.length;)bn(r.preRun.shift());Qt(Ct)}function kn(){Qt(Te)}function hn(){if(r.postRun)for(typeof r.postRun=="function"&&(r.postRun=[r.postRun]);r.postRun.length;)Fn(r.postRun.shift());Qt(ln)}function bn(tt){Ct.unshift(tt)}function En(tt){Te.unshift(tt)}function Fn(tt){ln.unshift(tt)}var Pe=0,Ae=null;function xn(tt){Pe++,r.monitorRunDependencies&&r.monitorRunDependencies(Pe)}function Wn(tt){if(Pe--,r.monitorRunDependencies&&r.monitorRunDependencies(Pe),Pe==0&&Ae){var it=Ae;Ae=null,it()}}r.preloadedImages={},r.preloadedAudios={};function he(tt){r.onAbort&&r.onAbort(tt),tt="Aborted("+tt+")",at(tt),ee=!0,tt+=". Build with -s ASSERTIONS=1 for more info.";var it=new WebAssembly.RuntimeError(tt);throw Z(it),it}var Se="data:application/octet-stream;base64,";function Oe(tt){return tt.startsWith(Se)}var re;re="tflite-simd.wasm",Oe(re)||(re=pt(re));function Ve(tt){try{if(tt==re&&dt)return new Uint8Array(dt);if(!Yt)throw"both async and sync fetching of the wasm failed"}catch(it){he(it)}}function cn(){return!dt&&et&&typeof fetch=="function"?fetch(re,{credentials:"same-origin"}).then(function(tt){if(!tt.ok)throw"failed to load wasm binary file at '"+re+"'";return tt.arrayBuffer()}).catch(function(){return Ve(re)}):Promise.resolve().then(function(){return Ve(re)})}function Be(){var tt={a:fe};function it(St,me){var Ce=St.exports;r.asm=Ce,Nt=r.asm.q,zn(Nt.buffer),Re=r.asm.E,En(r.asm.r),Wn()}xn();function ut(St){it(St.instance)}function _t(St){return cn().then(function(me){return WebAssembly.instantiate(me,tt)}).then(function(me){return me}).then(St,function(me){at("failed to asynchronously prepare wasm: "+me),he(me)})}function de(){return!dt&&typeof WebAssembly.instantiateStreaming=="function"&&!Oe(re)&&typeof fetch=="function"?fetch(re,{credentials:"same-origin"}).then(function(St){var me=WebAssembly.instantiateStreaming(St,tt);return me.then(ut,function(Ce){return at("wasm streaming compile failed: "+Ce),at("falling back to ArrayBuffer instantiation"),_t(ut)})}):_t(ut)}if(r.instantiateWasm)try{var ue=r.instantiateWasm(tt,it);return ue}catch(St){return at("Module.instantiateWasm callback failed with error: "+St),!1}return de().catch(Z),{}}function Qt(tt){for(;tt.length>0;){var it=tt.shift();if(typeof it=="function"){it(r);continue}var ut=it.func;typeof ut=="number"?it.arg===void 0?Re.get(ut)():Re.get(ut)(it.arg):ut(it.arg===void 0?null:it.arg)}}function Ze(tt,it,ut,_t){he("Assertion failed: "+je(tt)+", at: "+[it?je(it):"unknown filename",ut,_t?je(_t):"unknown function"])}function Fe(tt,it){he("To use dlopen, you need to use Emscripten's linking support, see https://github.com/emscripten-core/emscripten/wiki/Linking")}function Mt(tt,it){he("To use dlopen, you need to use Emscripten's linking support, see https://github.com/emscripten-core/emscripten/wiki/Linking")}function Ie(){he("")}var jt;jt=function(){return performance.now()};var ye=!0;function Ye(tt){return qe[Ft()>>2]=tt,tt}function tn(tt,it){var ut;if(tt===0)ut=Date.now();else if((tt===1||tt===4)&&ye)ut=jt();else return Ye(28),-1;return qe[it>>2]=ut/1e3|0,qe[it+4>>2]=ut%1e3*1e3*1e3|0,0}function Xe(){return 2147483648}function Pt(tt,it,ut){Zt.copyWithin(tt,it,it+ut)}function ze(tt){try{return Nt.grow(tt-Jn.byteLength+65535>>>16),zn(Nt.buffer),1}catch{}}function _e(tt){var it=Zt.length;tt=tt>>>0;var ut=2147483648;if(tt>ut)return!1;for(var _t=1;_t<=4;_t*=2){var de=it*(1+.2/_t);de=Math.min(de,tt+100663296);var ue=Math.min(ut,zt(Math.max(tt,de),65536)),St=ze(ue);if(St)return!0}return!1}function xe(tt){for(var it=jt();jt()-it<tt;);}var Vn={};function un(){return T||"./this.program"}function Qe(){if(!Qe.strings){var tt=(typeof navigator=="object"&&navigator.languages&&navigator.languages[0]||"C").replace("-","_")+".UTF-8",it={USER:"web_user",LOGNAME:"web_user",PATH:"/",PWD:"/",HOME:"/home/web_user",LANG:tt,_:un()};for(var ut in Vn)Vn[ut]===void 0?delete it[ut]:it[ut]=Vn[ut];var _t=[];for(var ut in it)_t.push(ut+"="+it[ut]);Qe.strings=_t}return Qe.strings}var an={mappings:{},buffers:[null,[],[]],printChar:function(tt,it){var ut=an.buffers[tt];it===0||it===10?((tt===1?Lt:at)($e(ut,0)),ut.length=0):ut.push(it)},varargs:void 0,get:function(){an.varargs+=4;var tt=qe[an.varargs-4>>2];return tt},getStr:function(tt){var it=je(tt);return it},get64:function(tt,it){return tt}};function ve(tt,it){var ut=0;return Qe().forEach(function(_t,de){var ue=it+ut;qe[tt+de*4>>2]=ue,We(_t,ue),ut+=_t.length+1}),0}function we(tt,it){var ut=Qe();qe[tt>>2]=ut.length;var _t=0;return ut.forEach(function(de){_t+=de.length+1}),qe[it>>2]=_t,0}function Ge(tt){te(tt)}function ie(tt){return 0}function De(tt,it,ut,_t,de){}function qt(tt,it,ut,_t){for(var de=0,ue=0;ue<ut;ue++){for(var St=qe[it+ue*8>>2],me=qe[it+(ue*8+4)>>2],Ce=0;Ce<me;Ce++)an.printChar(tt,Zt[St+Ce]);de+=me}return qe[_t>>2]=de,0}function Ot(){if(typeof crypto=="object"&&typeof crypto.getRandomValues=="function"){var tt=new Uint8Array(1);return function(){return crypto.getRandomValues(tt),tt[0]}}else return function(){he("randomDevice")}}function fn(tt,it){fn.randomDevice||(fn.randomDevice=Ot());for(var ut=0;ut<it;ut++)ne[tt+ut>>0]=fn.randomDevice();return 0}var fe={a:Ze,e:Fe,d:Mt,b:Ie,n:tn,h:Xe,l:Pt,m:_e,p:xe,f:ve,g:we,j:Ge,i:ie,k:De,c:qt,o:fn};Be(),r.___wasm_call_ctors=function(){return(r.___wasm_call_ctors=r.asm.r).apply(null,arguments)},r._getModelBufferMemoryOffset=function(){return(r._getModelBufferMemoryOffset=r.asm.s).apply(null,arguments)},r._getInputMemoryOffset=function(){return(r._getInputMemoryOffset=r.asm.t).apply(null,arguments)},r._getInputHeight=function(){return(r._getInputHeight=r.asm.u).apply(null,arguments)},r._getInputWidth=function(){return(r._getInputWidth=r.asm.v).apply(null,arguments)},r._getInputChannelCount=function(){return(r._getInputChannelCount=r.asm.w).apply(null,arguments)},r._getOutputMemoryOffset=function(){return(r._getOutputMemoryOffset=r.asm.x).apply(null,arguments)},r._getOutputHeight=function(){return(r._getOutputHeight=r.asm.y).apply(null,arguments)},r._getOutputWidth=function(){return(r._getOutputWidth=r.asm.z).apply(null,arguments)},r._getOutputChannelCount=function(){return(r._getOutputChannelCount=r.asm.A).apply(null,arguments)},r._loadModel=function(){return(r._loadModel=r.asm.B).apply(null,arguments)},r._runInference=function(){return(r._runInference=r.asm.C).apply(null,arguments)},r._isGPUEnabled=function(){return(r._isGPUEnabled=r.asm.D).apply(null,arguments)};var Ft=r.___errno_location=function(){return(Ft=r.___errno_location=r.asm.F).apply(null,arguments)},Vt;function oe(tt){this.name="ExitStatus",this.message="Program terminated with exit("+tt+")",this.status=tt}Ae=function tt(){Vt||Le(),Vt||(Ae=tt)};function Le(tt){if(Pe>0||(In(),Pe>0))return;function it(){Vt||(Vt=!0,r.calledRun=!0,!ee&&(kn(),f(r),r.onRuntimeInitialized&&r.onRuntimeInitialized(),hn()))}r.setStatus?(r.setStatus("Running..."),setTimeout(function(){setTimeout(function(){r.setStatus("")},1),it()},1)):it()}r.run=Le;function te(tt,it){se(tt)}function se(tt){Hn()||(r.onExit&&r.onExit(tt),ee=!0),J(tt,new oe(tt))}if(r.preInit)for(typeof r.preInit=="function"&&(r.preInit=[r.preInit]);r.preInit.length>0;)r.preInit.pop()();return Le(),n.ready}}();class e2{constructor(){gt(this,"selectedTFLite");gt(this,"isSIMDSupported",!1);gt(this,"isThreadsSupported",!1);gt(this,"inputWidth",0);gt(this,"inputHeight",0);gt(this,"inputChannelCount",0);gt(this,"inputMemoryOffset",0);gt(this,"outputWidth",0);gt(this,"outputHeight",0);gt(this,"outputChannelCount",0);gt(this,"outputMemoryOffset",0)}}const n2="https://d3opqjmqzxf057.cloudfront.net/vonage-tensorflow-wasm/tflite-simd-wasm/1.1.3/",r2="https://d3opqjmqzxf057.cloudfront.net/ml/selfie_segmentation/4.0.0/";async function i2(i=n2,n=r2){let r=new e2;var f=new Promise(function(Z,x){async function H(){return t2({locateFile:function(et){return i+et}})}async function T(J){return new Promise(async(et,lt)=>{const pt=J;if(typeof pt>"u")return lt("TFLite backend unavailable: wasmSimd");const Yt="selfie_segmentation_landscape";console.log("Loading tflite model:",Yt);let Lt=n+`${Yt}.tflite`;console.log("TFLite modelUrl: "+Lt);try{const dt=await(await fetch(Lt)).arrayBuffer();console.log("Model buffer size:",dt.byteLength);const Bt=pt._getModelBufferMemoryOffset();console.log("Model buffer memory offset:",Bt),console.log("Loading model buffer..."),pt.HEAPU8.set(new Uint8Array(dt),Bt);const Nt=pt._loadModel(dt.byteLength);if(console.log("Load model result:",Nt),Nt!==0){lt("Cannot load model");return}r.inputWidth=pt._getInputWidth(),r.inputHeight=pt._getInputHeight(),r.inputChannelCount=pt._getInputChannelCount(),r.inputMemoryOffset=pt._getInputMemoryOffset(),console.log("Input memory offset:",r.inputMemoryOffset),console.log("Input height:",r.inputHeight),console.log("Input width:",r.inputWidth),console.log("Input channels:",r.inputChannelCount),r.outputMemoryOffset=pt._getOutputMemoryOffset(),r.outputWidth=pt._getOutputWidth(),r.outputHeight=pt._getOutputHeight(),r.outputChannelCount=pt._getOutputChannelCount(),console.log("Output memory offset:",r.outputMemoryOffset),console.log("Output height:",r.outputHeight),console.log("Output width:",r.outputWidth),console.log("Output channels:",r.outputChannelCount),r.selectedTFLite=pt}catch(at){lt(at);return}et()})}H().then(J=>{if(J===null)throw console.error("loadTFLite null"),"loadTFLite null";T(J).then(et=>{Z(r)}).catch(et=>{console.error("loadTFLiteModel error"),x("loadTFLiteModel error")})}).catch(J=>{console.error("loadTFLite error:",J),x("loadTFLite error:"+J)})});return f}class Ss{constructor(){gt(this,"canvas",new OffscreenCanvas(0,0));gt(this,"context",this.canvas.getContext("2d",{willReadFrequently:!0}));gt(this,"pixelCount",0);gt(this,"inputOffset",0);gt(this,"outputOffset",0);gt(this,"infos");gt(this,"mask")}async init(n,r){await this.initWasm(n,r),this.infos&&(this.canvas.width=this.infos.inputWidth,this.canvas.height=this.infos.inputHeight,this.pixelCount=this.infos.inputWidth*this.infos.inputHeight,this.mask=new ImageData(this.infos.inputWidth,this.infos.inputHeight),this.inputOffset=this.infos.inputMemoryOffset/4,this.outputOffset=this.infos.outputMemoryOffset/4)}async initWasm(n,r){this.infos=await i2(n,r)}getOutputDimensions(){var n,r,f,Z;return{width:(r=(n=this.infos)==null?void 0:n.outputWidth)!=null?r:0,height:(Z=(f=this.infos)==null?void 0:f.outputHeight)!=null?Z:0}}async process(n){if(!this.mask||!this.infos)return;const r=this.infos.inputWidth,f=this.infos.inputHeight;this.context.drawImage(n,0,0,n.width,n.height,0,0,r,f);const Z=this.context.getImageData(0,0,r,f),x=this.infos.selectedTFLite.HEAPF32;for(let H=0;H<this.pixelCount;H++){const T=this.inputOffset+H*3;x[T]=Z.data[H*4]/255,x[T+1]=Z.data[H*4+1]/255,x[T+2]=Z.data[H*4+2]/255}this.infos.selectedTFLite._runInference();for(let H=0;H<this.pixelCount;H++){const T=this.infos.selectedTFLite.HEAPF32[this.outputOffset+H];this.mask.data[H*4]=this.mask.data[H*4+3]=255*T}return createImageBitmap(this.mask)}isGpuSupported(){var n,r,f;return(f=(r=(n=this.infos)==null?void 0:n.selectedTFLite)==null?void 0:r._isGPUEnabled())!=null?f:!1}}async function o2(i,n){const{wasm:r,insertableStreams:f,simd:Z,webgl:x}=await Ts(i,n);if(!r.supported)throw r.message;if(!f.supported)throw f.message;if(!Z.supported)throw Z.message;if(!x.supported)throw x.message}async function Ts(i,n){const r=new Ss;await r.initWasm(i,n);const f={wasm:{supported:typeof WebAssembly=="object"&&typeof WebAssembly.instantiate=="function",message:"Your browser does not support WebAssembly features."},simd:{supported:await qc(),message:"Your browser does not support simd features."},insertableStreams:{supported:!0},gpu:{supported:r.isGpuSupported(),message:"Your browser does not support gpu features."},webgl:s2(),performance:Ys()};try{await bc()}catch(Z){f.insertableStreams.supported=!1,f.insertableStreams.message=Z}return f}function s2(){return OffscreenCanvas?new OffscreenCanvas(0,0).getContext("webgl2")?{supported:!0}:{supported:!1,message:"Your browser does not support webgl 2"}:{supported:!1,message:"Your browser does not support offscreen canvas"}}function Ys(){return new OffscreenCanvas(0,0).getContext("webgl2",{failIfMajorPerformanceCaveat:!0})?{supported:!0}:{supported:!1,message:"Your hardware does not perform good enough to run the library efficiently"}}const Gi={};(function(){var i;function n(p){var W=0;return function(){return W<p.length?{done:!1,value:p[W++]}:{done:!0}}}var r=typeof Object.defineProperties=="function"?Object.defineProperty:function(p,W,V){return p==Array.prototype||p==Object.prototype||(p[W]=V.value),p};function f(p){p=[typeof globalThis=="object"&&globalThis,p,typeof window=="object"&&window,typeof self=="object"&&self,typeof global=="object"&&global];for(var W=0;W<p.length;++W){var V=p[W];if(V&&V.Math==Math)return V}throw Error("Cannot find global object")}var Z=f(this);function x(p,W){if(W)t:{var V=Z;p=p.split(".");for(var E=0;E<p.length-1;E++){var P=p[E];if(!(P in V))break t;V=V[P]}p=p[p.length-1],E=V[p],W=W(E),W!=E&&W!=null&&r(V,p,{configurable:!0,writable:!0,value:W})}}x("Symbol",function(p){function W(ot){if(this instanceof W)throw new TypeError("Symbol is not a constructor");return new V(E+(ot||"")+"_"+P++,ot)}function V(ot,j){this.g=ot,r(this,"description",{configurable:!0,writable:!0,value:j})}if(p)return p;V.prototype.toString=function(){return this.g};var E="jscomp_symbol_"+(1e9*Math.random()>>>0)+"_",P=0;return W}),x("Symbol.iterator",function(p){if(p)return p;p=Symbol("Symbol.iterator");for(var W="Array Int8Array Uint8Array Uint8ClampedArray Int16Array Uint16Array Int32Array Uint32Array Float32Array Float64Array".split(" "),V=0;V<W.length;V++){var E=Z[W[V]];typeof E=="function"&&typeof E.prototype[p]!="function"&&r(E.prototype,p,{configurable:!0,writable:!0,value:function(){return H(n(this))}})}return p});function H(p){return p={next:p},p[Symbol.iterator]=function(){return this},p}function T(p){var W=typeof Symbol<"u"&&Symbol.iterator&&p[Symbol.iterator];return W?W.call(p):{next:n(p)}}function J(p){if(!(p instanceof Array)){p=T(p);for(var W,V=[];!(W=p.next()).done;)V.push(W.value);p=V}return p}var et=typeof Object.create=="function"?Object.create:function(p){function W(){}return W.prototype=p,new W},lt;if(typeof Object.setPrototypeOf=="function")lt=Object.setPrototypeOf;else{var pt;t:{var Yt={a:!0},Lt={};try{Lt.__proto__=Yt,pt=Lt.a;break t}catch{}pt=!1}lt=pt?function(p,W){if(p.__proto__=W,p.__proto__!==W)throw new TypeError(p+" is not extensible");return p}:null}var at=lt;function dt(p,W){if(p.prototype=et(W.prototype),p.prototype.constructor=p,at)at(p,W);else for(var V in W)if(V!="prototype")if(Object.defineProperties){var E=Object.getOwnPropertyDescriptor(W,V);E&&Object.defineProperty(p,V,E)}else p[V]=W[V];p.ea=W.prototype}function Bt(){this.l=!1,this.i=null,this.h=void 0,this.g=1,this.s=this.m=0,this.j=null}function Nt(p){if(p.l)throw new TypeError("Generator is already running");p.l=!0}Bt.prototype.o=function(p){this.h=p};function ee(p,W){p.j={U:W,V:!0},p.g=p.m||p.s}Bt.prototype.return=function(p){this.j={return:p},this.g=this.s};function O(p,W,V){return p.g=V,{value:W}}function $e(p){this.g=new Bt,this.h=p}function je(p,W){Nt(p.g);var V=p.g.i;return V?We(p,"return"in V?V.return:function(E){return{value:E,done:!0}},W,p.g.return):(p.g.return(W),zt(p))}function We(p,W,V,E){try{var P=W.call(p.g.i,V);if(!(P instanceof Object))throw new TypeError("Iterator result "+P+" is not an object");if(!P.done)return p.g.l=!1,P;var ot=P.value}catch(j){return p.g.i=null,ee(p.g,j),zt(p)}return p.g.i=null,E.call(p.g,ot),zt(p)}function zt(p){for(;p.g.g;)try{var W=p.h(p.g);if(W)return p.g.l=!1,{value:W.value,done:!1}}catch(V){p.g.h=void 0,ee(p.g,V)}if(p.g.l=!1,p.g.j){if(W=p.g.j,p.g.j=null,W.V)throw W.U;return{value:W.return,done:!0}}return{value:void 0,done:!0}}function Jn(p){this.next=function(W){return Nt(p.g),p.g.i?W=We(p,p.g.i.next,W,p.g.o):(p.g.o(W),W=zt(p)),W},this.throw=function(W){return Nt(p.g),p.g.i?W=We(p,p.g.i.throw,W,p.g.o):(ee(p.g,W),W=zt(p)),W},this.return=function(W){return je(p,W)},this[Symbol.iterator]=function(){return this}}function ne(p,W){return W=new Jn(new $e(W)),at&&p.prototype&&at(W,p.prototype),W}function Zt(p,W){p instanceof String&&(p+="");var V=0,E=!1,P={next:function(){if(!E&&V<p.length){var ot=V++;return{value:W(ot,p[ot]),done:!1}}return E=!0,{done:!0,value:void 0}}};return P[Symbol.iterator]=function(){return P},P}var qe=typeof Object.assign=="function"?Object.assign:function(p,W){for(var V=1;V<arguments.length;V++){var E=arguments[V];if(E)for(var P in E)Object.prototype.hasOwnProperty.call(E,P)&&(p[P]=E[P])}return p};x("Object.assign",function(p){return p||qe}),x("Promise",function(p){function W(j){this.h=0,this.i=void 0,this.g=[],this.o=!1;var rt=this.j();try{j(rt.resolve,rt.reject)}catch(bt){rt.reject(bt)}}function V(){this.g=null}function E(j){return j instanceof W?j:new W(function(rt){rt(j)})}if(p)return p;V.prototype.h=function(j){if(this.g==null){this.g=[];var rt=this;this.i(function(){rt.l()})}this.g.push(j)};var P=Z.setTimeout;V.prototype.i=function(j){P(j,0)},V.prototype.l=function(){for(;this.g&&this.g.length;){var j=this.g;this.g=[];for(var rt=0;rt<j.length;++rt){var bt=j[rt];j[rt]=null;try{bt()}catch(Rt){this.j(Rt)}}}this.g=null},V.prototype.j=function(j){this.i(function(){throw j})},W.prototype.j=function(){function j(Rt){return function(Ut){bt||(bt=!0,Rt.call(rt,Ut))}}var rt=this,bt=!1;return{resolve:j(this.C),reject:j(this.l)}},W.prototype.C=function(j){if(j===this)this.l(new TypeError("A Promise cannot resolve to itself"));else if(j instanceof W)this.F(j);else{t:switch(typeof j){case"object":var rt=j!=null;break t;case"function":rt=!0;break t;default:rt=!1}rt?this.u(j):this.m(j)}},W.prototype.u=function(j){var rt=void 0;try{rt=j.then}catch(bt){this.l(bt);return}typeof rt=="function"?this.G(rt,j):this.m(j)},W.prototype.l=function(j){this.s(2,j)},W.prototype.m=function(j){this.s(1,j)},W.prototype.s=function(j,rt){if(this.h!=0)throw Error("Cannot settle("+j+", "+rt+"): Promise already settled in state"+this.h);this.h=j,this.i=rt,this.h===2&&this.D(),this.A()},W.prototype.D=function(){var j=this;P(function(){if(j.B()){var rt=Z.console;typeof rt<"u"&&rt.error(j.i)}},1)},W.prototype.B=function(){if(this.o)return!1;var j=Z.CustomEvent,rt=Z.Event,bt=Z.dispatchEvent;return typeof bt>"u"?!0:(typeof j=="function"?j=new j("unhandledrejection",{cancelable:!0}):typeof rt=="function"?j=new rt("unhandledrejection",{cancelable:!0}):(j=Z.document.createEvent("CustomEvent"),j.initCustomEvent("unhandledrejection",!1,!0,j)),j.promise=this,j.reason=this.i,bt(j))},W.prototype.A=function(){if(this.g!=null){for(var j=0;j<this.g.length;++j)ot.h(this.g[j]);this.g=null}};var ot=new V;return W.prototype.F=function(j){var rt=this.j();j.J(rt.resolve,rt.reject)},W.prototype.G=function(j,rt){var bt=this.j();try{j.call(rt,bt.resolve,bt.reject)}catch(Rt){bt.reject(Rt)}},W.prototype.then=function(j,rt){function bt($t,kt){return typeof $t=="function"?function(Tt){try{Rt($t(Tt))}catch(Et){Ut(Et)}}:kt}var Rt,Ut,Jt=new W(function($t,kt){Rt=$t,Ut=kt});return this.J(bt(j,Rt),bt(rt,Ut)),Jt},W.prototype.catch=function(j){return this.then(void 0,j)},W.prototype.J=function(j,rt){function bt(){switch(Rt.h){case 1:j(Rt.i);break;case 2:rt(Rt.i);break;default:throw Error("Unexpected state: "+Rt.h)}}var Rt=this;this.g==null?ot.h(bt):this.g.push(bt),this.o=!0},W.resolve=E,W.reject=function(j){return new W(function(rt,bt){bt(j)})},W.race=function(j){return new W(function(rt,bt){for(var Rt=T(j),Ut=Rt.next();!Ut.done;Ut=Rt.next())E(Ut.value).J(rt,bt)})},W.all=function(j){var rt=T(j),bt=rt.next();return bt.done?E([]):new W(function(Rt,Ut){function Jt(Tt){return function(Et){$t[Tt]=Et,kt--,kt==0&&Rt($t)}}var $t=[],kt=0;do $t.push(void 0),kt++,E(bt.value).J(Jt($t.length-1),Ut),bt=rt.next();while(!bt.done)})},W}),x("Object.is",function(p){return p||function(W,V){return W===V?W!==0||1/W===1/V:W!==W&&V!==V}}),x("Array.prototype.includes",function(p){return p||function(W,V){var E=this;E instanceof String&&(E=String(E));var P=E.length;for(V=V||0,0>V&&(V=Math.max(V+P,0));V<P;V++){var ot=E[V];if(ot===W||Object.is(ot,W))return!0}return!1}}),x("String.prototype.includes",function(p){return p||function(W,V){if(this==null)throw new TypeError("The 'this' value for String.prototype.includes must not be null or undefined");if(W instanceof RegExp)throw new TypeError("First argument to String.prototype.includes must not be a regular expression");return this.indexOf(W,V||0)!==-1}}),x("Array.prototype.keys",function(p){return p||function(){return Zt(this,function(W){return W})}});var zn=this||self;function Re(p,W){p=p.split(".");var V=zn;p[0]in V||typeof V.execScript>"u"||V.execScript("var "+p[0]);for(var E;p.length&&(E=p.shift());)p.length||W===void 0?V[E]&&V[E]!==Object.prototype[E]?V=V[E]:V=V[E]={}:V[E]=W}function Ct(p,W){return W=String.fromCharCode.apply(null,W),p==null?W:p+W}var Te,ln=typeof TextDecoder<"u",Xn,Hn=typeof TextEncoder<"u";function In(p){if(Hn)p=(Xn||(Xn=new TextEncoder)).encode(p);else{var W=void 0;W=W===void 0?!1:W;for(var V=0,E=new Uint8Array(3*p.length),P=0;P<p.length;P++){var ot=p.charCodeAt(P);if(128>ot)E[V++]=ot;else{if(2048>ot)E[V++]=ot>>6|192;else{if(55296<=ot&&57343>=ot){if(56319>=ot&&P<p.length){var j=p.charCodeAt(++P);if(56320<=j&&57343>=j){ot=1024*(ot-55296)+j-56320+65536,E[V++]=ot>>18|240,E[V++]=ot>>12&63|128,E[V++]=ot>>6&63|128,E[V++]=ot&63|128;continue}else P--}if(W)throw Error("Found an unpaired surrogate");ot=65533}E[V++]=ot>>12|224,E[V++]=ot>>6&63|128}E[V++]=ot&63|128}}p=E.subarray(0,V)}return p}var kn={},hn=null;function bn(p,W){W===void 0&&(W=0),Pe(),W=kn[W];for(var V=Array(Math.floor(p.length/3)),E=W[64]||"",P=0,ot=0;P<p.length-2;P+=3){var j=p[P],rt=p[P+1],bt=p[P+2],Rt=W[j>>2];j=W[(j&3)<<4|rt>>4],rt=W[(rt&15)<<2|bt>>6],bt=W[bt&63],V[ot++]=Rt+j+rt+bt}switch(Rt=0,bt=E,p.length-P){case 2:Rt=p[P+1],bt=W[(Rt&15)<<2]||E;case 1:p=p[P],V[ot]=W[p>>2]+W[(p&3)<<4|Rt>>4]+bt+E}return V.join("")}function En(p){var W=p.length,V=3*W/4;V%3?V=Math.floor(V):"=.".indexOf(p[W-1])!=-1&&(V="=.".indexOf(p[W-2])!=-1?V-2:V-1);var E=new Uint8Array(V),P=0;return Fn(p,function(ot){E[P++]=ot}),E.subarray(0,P)}function Fn(p,W){function V(bt){for(;E<p.length;){var Rt=p.charAt(E++),Ut=hn[Rt];if(Ut!=null)return Ut;if(!/^[\s\xa0]*$/.test(Rt))throw Error("Unknown base64 encoding at char: "+Rt)}return bt}Pe();for(var E=0;;){var P=V(-1),ot=V(0),j=V(64),rt=V(64);if(rt===64&&P===-1)break;W(P<<2|ot>>4),j!=64&&(W(ot<<4&240|j>>2),rt!=64&&W(j<<6&192|rt))}}function Pe(){if(!hn){hn={};for(var p="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789".split(""),W=["+/=","+/","-_=","-_.","-_"],V=0;5>V;V++){var E=p.concat(W[V].split(""));kn[V]=E;for(var P=0;P<E.length;P++){var ot=E[P];hn[ot]===void 0&&(hn[ot]=P)}}}}var Ae=typeof Uint8Array.prototype.slice=="function",xn;function Wn(p,W,V){return W===V?xn||(xn=new Uint8Array(0)):Ae?p.slice(W,V):new Uint8Array(p.subarray(W,V))}var he=0,Se=0;function Oe(p,W){W=W===void 0?{}:W,W=W.v===void 0?!1:W.v,this.h=null,this.g=this.i=this.j=0,this.l=!1,this.v=W,p&&re(this,p)}function re(p,W){W=W.constructor===Uint8Array?W:W.constructor===ArrayBuffer?new Uint8Array(W):W.constructor===Array?new Uint8Array(W):W.constructor===String?En(W):W instanceof Uint8Array?new Uint8Array(W.buffer,W.byteOffset,W.byteLength):new Uint8Array(0),p.h=W,p.j=0,p.i=p.h.length,p.g=p.j}Oe.prototype.reset=function(){this.g=this.j};function Ve(p){var W=p.h,V=W[p.g],E=V&127;return 128>V?(p.g+=1,E):(V=W[p.g+1],E|=(V&127)<<7,128>V?(p.g+=2,E):(V=W[p.g+2],E|=(V&127)<<14,128>V?(p.g+=3,E):(V=W[p.g+3],E|=(V&127)<<21,128>V?(p.g+=4,E):(V=W[p.g+4],E|=(V&15)<<28,128>V?(p.g+=5,E>>>0):(p.g+=5,128<=W[p.g++]&&128<=W[p.g++]&&128<=W[p.g++]&&128<=W[p.g++]&&p.g++,E)))))}function cn(p){var W=p.h[p.g],V=p.h[p.g+1],E=p.h[p.g+2],P=p.h[p.g+3];return p.g+=4,V=(W<<0|V<<8|E<<16|P<<24)>>>0,p=2*(V>>31)+1,W=V>>>23&255,V&=8388607,W==255?V?NaN:1/0*p:W==0?p*Math.pow(2,-149)*V:p*Math.pow(2,W-150)*(V+Math.pow(2,23))}var Be=[];function Qt(){this.g=new Uint8Array(64),this.h=0}Qt.prototype.push=function(p){if(!(this.h+1<this.g.length)){var W=this.g;this.g=new Uint8Array(Math.ceil(1+2*this.g.length)),this.g.set(W)}this.g[this.h++]=p},Qt.prototype.length=function(){return this.h},Qt.prototype.end=function(){var p=this.g,W=this.h;return this.h=0,Wn(p,0,W)};function Ze(p,W){for(;127<W;)p.push(W&127|128),W>>>=7;p.push(W)}function Fe(p){var W={},V=W.N===void 0?!1:W.N;this.o={v:W.v===void 0?!1:W.v},this.N=V,W=this.o,Be.length?(V=Be.pop(),W&&(V.v=W.v),p&&re(V,p),p=V):p=new Oe(p,W),this.g=p,this.m=this.g.g,this.h=this.i=this.l=-1,this.j=!1}Fe.prototype.reset=function(){this.g.reset(),this.h=this.l=-1};function Mt(p){var W=p.g;if((W=W.g==W.i)||(W=p.j)||(W=p.g,W=W.l||0>W.g||W.g>W.i),W)return!1;p.m=p.g.g,W=Ve(p.g);var V=W&7;return V!=0&&V!=5&&V!=1&&V!=2&&V!=3&&V!=4?(p.j=!0,!1):(p.i=W,p.l=W>>>3,p.h=V,!0)}function Ie(p){switch(p.h){case 0:if(p.h!=0)Ie(p);else{for(p=p.g;p.h[p.g]&128;)p.g++;p.g++}break;case 1:p.h!=1?Ie(p):(p=p.g,p.g+=8);break;case 2:if(p.h!=2)Ie(p);else{var W=Ve(p.g);p=p.g,p.g+=W}break;case 5:p.h!=5?Ie(p):(p=p.g,p.g+=4);break;case 3:W=p.l;do{if(!Mt(p)){p.j=!0;break}if(p.h==4){p.l!=W&&(p.j=!0);break}Ie(p)}while(1);break;default:p.j=!0}}function jt(p,W,V){var E=p.g.i,P=Ve(p.g);return P=p.g.g+P,p.g.i=P,V(W,p),p.g.g=P,p.g.i=E,W}function ye(p){var W=Ve(p.g);p=p.g;var V=p.g;p.g+=W,p=p.h;var E;if(ln)(E=Te)||(E=Te=new TextDecoder("utf-8",{fatal:!1})),E=E.decode(p.subarray(V,V+W));else{W=V+W;for(var P=[],ot=null,j,rt,bt;V<W;)j=p[V++],128>j?P.push(j):224>j?V>=W?P.push(65533):(rt=p[V++],194>j||(rt&192)!==128?(V--,P.push(65533)):P.push((j&31)<<6|rt&63)):240>j?V>=W-1?P.push(65533):(rt=p[V++],(rt&192)!==128||j===224&&160>rt||j===237&&160<=rt||((E=p[V++])&192)!==128?(V--,P.push(65533)):P.push((j&15)<<12|(rt&63)<<6|E&63)):244>=j?V>=W-2?P.push(65533):(rt=p[V++],(rt&192)!==128||(j<<28)+(rt-144)>>30!==0||((E=p[V++])&192)!==128||((bt=p[V++])&192)!==128?(V--,P.push(65533)):(j=(j&7)<<18|(rt&63)<<12|(E&63)<<6|bt&63,j-=65536,P.push((j>>10&1023)+55296,(j&1023)+56320))):P.push(65533),8192<=P.length&&(ot=Ct(ot,P),P.length=0);E=Ct(ot,P)}return E}function Ye(){this.h=[],this.i=0,this.g=new Qt}function tn(p,W){W.length!==0&&(p.h.push(W),p.i+=W.length)}function Xe(p){var W=p.i+p.g.length();if(W===0)return new Uint8Array(0);W=new Uint8Array(W);for(var V=p.h,E=V.length,P=0,ot=0;ot<E;ot++){var j=V[ot];j.length!==0&&(W.set(j,P),P+=j.length)}return V=p.g,E=V.h,E!==0&&(W.set(V.g.subarray(0,E),P),V.h=0),p.h=[W],W}function Pt(p,W,V){if(V!=null){Ze(p.g,8*W+5),p=p.g;var E=V;E=(V=0>E?1:0)?-E:E,E===0?0<1/E?he=Se=0:(Se=0,he=2147483648):isNaN(E)?(Se=0,he=2147483647):34028234663852886e22<E?(Se=0,he=(V<<31|2139095040)>>>0):11754943508222875e-54>E?(E=Math.round(E/Math.pow(2,-149)),Se=0,he=(V<<31|E)>>>0):(W=Math.floor(Math.log(E)/Math.LN2),E*=Math.pow(2,-W),E=Math.round(8388608*E)&8388607,Se=0,he=(V<<31|W+127<<23|E)>>>0),V=he,p.push(V>>>0&255),p.push(V>>>8&255),p.push(V>>>16&255),p.push(V>>>24&255)}}var ze=typeof Uint8Array=="function";function _e(p,W,V){if(p!=null)return typeof p=="object"?ze&&p instanceof Uint8Array?V(p):xe(p,W,V):W(p)}function xe(p,W,V){if(Array.isArray(p)){for(var E=Array(p.length),P=0;P<p.length;P++)E[P]=_e(p[P],W,V);return Array.isArray(p)&&p.W&&Qe(E),E}E={};for(P in p)E[P]=_e(p[P],W,V);return E}function Vn(p){return typeof p=="number"?isFinite(p)?p:String(p):p}var un={W:{value:!0,configurable:!0}};function Qe(p){return Array.isArray(p)&&!Object.isFrozen(p)&&Object.defineProperties(p,un),p}var an;function ve(p,W,V){var E=an;an=null,p||(p=E),E=this.constructor.ca,p||(p=E?[E]:[]),this.j=E?0:-1,this.i=null,this.g=p;t:{if(E=this.g.length,p=E-1,E&&(E=this.g[p],E!==null&&typeof E=="object"&&E.constructor===Object)){this.l=p-this.j,this.h=E;break t}W!==void 0&&-1<W?(this.l=Math.max(W,p+1-this.j),this.h=null):this.l=Number.MAX_VALUE}if(V)for(W=0;W<V.length;W++)p=V[W],p<this.l?(p+=this.j,(E=this.g[p])?Qe(E):this.g[p]=we):(Ge(this),(E=this.h[p])?Qe(E):this.h[p]=we)}var we=Object.freeze(Qe([]));function Ge(p){var W=p.l+p.j;p.g[W]||(p.h=p.g[W]={})}function ie(p,W,V){return W===-1?null:(V===void 0?0:V)||W>=p.l?p.h?p.h[W]:void 0:p.g[W+p.j]}function De(p){var W=W===void 0?!1:W,V=ie(p,1,W);return V==null&&(V=we),V===we&&(V=Qe([]),Ot(p,1,V,W)),V}function qt(p,W,V){return p=ie(p,W),p=p==null?p:+p,p==null?V===void 0?0:V:p}function Ot(p,W,V,E){(E===void 0?0:E)||W>=p.l?(Ge(p),p.h[W]=V):p.g[W+p.j]=V}function fn(p,W){p.i||(p.i={});var V=p.i[1];if(!V){var E=De(p);V=[];for(var P=0;P<E.length;P++)V[P]=new W(E[P]);p.i[1]=V}return V}function fe(p,W,V,E){var P=fn(p,V);W=W||new V,p=De(p),E!=null?(P.splice(E,0,W),p.splice(E,0,Ft(W))):(P.push(W),p.push(Ft(W)))}ve.prototype.toJSON=function(){var p=Ft(this);return xe(p,Vn,bn)};function Ft(p,W){if(p.i)for(var V in p.i){var E=p.i[V];if(Array.isArray(E))for(var P=0;P<E.length;P++)E[P]&&Ft(E[P]);else E&&Ft(E)}return p.g}ve.prototype.toString=function(){return Ft(this).toString()};function Vt(p,W){return p=ie(p,W),p==null?0:p}function oe(p,W){return p=ie(p,W),p==null?"":p}function Le(p,W){if(p=p.m){tn(W,W.g.end());for(var V=0;V<p.length;V++)tn(W,p[V])}}function te(p,W){if(W.h==4)return!1;var V=W.m;return Ie(W),W.N||(W=Wn(W.g.h,V,W.g.g),(V=p.m)?V.push(W):p.m=[W]),!0}function se(p,W){var V=void 0;return new(V||(V=Promise))(function(E,P){function ot(bt){try{rt(W.next(bt))}catch(Rt){P(Rt)}}function j(bt){try{rt(W.throw(bt))}catch(Rt){P(Rt)}}function rt(bt){bt.done?E(bt.value):new V(function(Rt){Rt(bt.value)}).then(ot,j)}rt((W=W.apply(p,void 0)).next())})}function tt(p){ve.call(this,p)}dt(tt,ve);function it(p,W){for(;Mt(W);)switch(W.i){case 8:var V=Ve(W.g);Ot(p,1,V);break;case 21:V=cn(W.g),Ot(p,2,V);break;case 26:V=ye(W),Ot(p,3,V);break;case 34:V=ye(W),Ot(p,4,V);break;default:if(!te(p,W))return p}return p}function ut(p){ve.call(this,p,-1,_t)}dt(ut,ve),ut.prototype.addClassification=function(p,W){fe(this,p,tt,W)};var _t=[1];function de(p){ve.call(this,p)}dt(de,ve);function ue(p,W){for(;Mt(W);)switch(W.i){case 13:var V=cn(W.g);Ot(p,1,V);break;case 21:V=cn(W.g),Ot(p,2,V);break;case 29:V=cn(W.g),Ot(p,3,V);break;case 37:V=cn(W.g),Ot(p,4,V);break;case 45:V=cn(W.g),Ot(p,5,V);break;default:if(!te(p,W))return p}return p}function St(p){ve.call(this,p,-1,me)}dt(St,ve);var me=[1];function Ce(p){ve.call(this,p)}dt(Ce,ve);function en(p,W,V){if(V=p.createShader(V===0?p.VERTEX_SHADER:p.FRAGMENT_SHADER),p.shaderSource(V,W),p.compileShader(V),!p.getShaderParameter(V,p.COMPILE_STATUS))throw Error(`Could not compile WebGL shader.
|
|
1
|
+
(function(Ue,Dn){typeof exports=="object"&&typeof module<"u"?Dn(exports):typeof define=="function"&&define.amd?define(["exports"],Dn):(Ue=typeof globalThis<"u"?globalThis:Ue||self,Dn(Ue["ml-transformers"]={}))})(this,function(Ue){"use strict";var _3=Object.defineProperty;var Q3=(Ue,Dn,jn)=>Dn in Ue?_3(Ue,Dn,{enumerable:!0,configurable:!0,writable:!0,value:jn}):Ue[Dn]=jn;var gt=(Ue,Dn,jn)=>(Q3(Ue,typeof Dn!="symbol"?Dn+"":Dn,jn),jn);function Dn(){return new Promise((i,n)=>{typeof MediaStreamTrackProcessor>"u"||typeof MediaStreamTrackGenerator>"u"?n("Your browser does not support the MediaStreamTrack API for Insertable Streams of Media."):i()})}class jn{}jn.updates={transformer_new:"New transformer",transformer_null:"Null transformer"},jn.errors={transformer_none:"No transformers provided",transformer_start:"Cannot start transformer",transformer_transform:"Cannot transform frame",transformer_flush:"Cannot flush transformer",readable_null:"Readable is null",writable_null:"Writable is null"};function m2(i){return i&&i.__esModule&&Object.prototype.hasOwnProperty.call(i,"default")?i.default:i}const or=new WeakMap,ui=new WeakMap,jr=new WeakMap,mo=Symbol("anyProducer"),ps=Promise.resolve(),ai=Symbol("listenerAdded"),di=Symbol("listenerRemoved");let po=!1;function Yr(i){if(typeof i!="string"&&typeof i!="symbol")throw new TypeError("eventName must be a string or a symbol")}function hi(i){if(typeof i!="function")throw new TypeError("listener must be a function")}function wr(i,n){const r=ui.get(i);return r.has(n)||r.set(n,new Set),r.get(n)}function Or(i,n){const r=typeof n=="string"||typeof n=="symbol"?n:mo,f=jr.get(i);return f.has(r)||f.set(r,new Set),f.get(r)}function p2(i,n,r){const f=jr.get(i);if(f.has(n))for(const Z of f.get(n))Z.enqueue(r);if(f.has(mo)){const Z=Promise.all([n,r]);for(const I of f.get(mo))I.enqueue(Z)}}function bs(i,n){n=Array.isArray(n)?n:[n];let r=!1,f=()=>{},Z=[];const I={enqueue(F){Z.push(F),f()},finish(){r=!0,f()}};for(const F of n)Or(i,F).add(I);return{async next(){return Z?Z.length===0?r?(Z=void 0,this.next()):(await new Promise(F=>{f=F}),this.next()):{done:!1,value:await Z.shift()}:{done:!0}},async return(F){Z=void 0;for(const T of n)Or(i,T).delete(I);return f(),arguments.length>0?{done:!0,value:await F}:{done:!0}},[Symbol.asyncIterator](){return this}}}function ys(i){if(i===void 0)return gs;if(!Array.isArray(i))throw new TypeError("`methodNames` must be an array of strings");for(const n of i)if(!gs.includes(n))throw typeof n!="string"?new TypeError("`methodNames` element must be a string"):new Error(`${n} is not Emittery method`);return i}const bo=i=>i===ai||i===di;class gr{static mixin(n,r){return r=ys(r),f=>{if(typeof f!="function")throw new TypeError("`target` must be function");for(const F of r)if(f.prototype[F]!==void 0)throw new Error(`The property \`${F}\` already exists on \`target\``);function Z(){return Object.defineProperty(this,n,{enumerable:!1,value:new gr}),this[n]}Object.defineProperty(f.prototype,n,{enumerable:!1,get:Z});const I=F=>function(...T){return this[n][F](...T)};for(const F of r)Object.defineProperty(f.prototype,F,{enumerable:!1,value:I(F)});return f}}static get isDebugEnabled(){if(typeof process!="object")return po;const{env:n}=process||{env:{}};return n.DEBUG==="emittery"||n.DEBUG==="*"||po}static set isDebugEnabled(n){po=n}constructor(n={}){or.set(this,new Set),ui.set(this,new Map),jr.set(this,new Map),this.debug=n.debug||{},this.debug.enabled===void 0&&(this.debug.enabled=!1),this.debug.logger||(this.debug.logger=(r,f,Z,I)=>{try{I=JSON.stringify(I)}catch{I=`Object with the following keys failed to stringify: ${Object.keys(I).join(",")}`}typeof Z=="symbol"&&(Z=Z.toString());const F=new Date,T=`${F.getHours()}:${F.getMinutes()}:${F.getSeconds()}.${F.getMilliseconds()}`;console.log(`[${T}][emittery:${r}][${f}] Event Name: ${Z}
|
|
2
|
+
data: ${I}`)})}logIfDebugEnabled(n,r,f){(gr.isDebugEnabled||this.debug.enabled)&&this.debug.logger(n,this.debug.name,r,f)}on(n,r){hi(r),n=Array.isArray(n)?n:[n];for(const f of n)Yr(f),wr(this,f).add(r),this.logIfDebugEnabled("subscribe",f,void 0),bo(f)||this.emit(ai,{eventName:f,listener:r});return this.off.bind(this,n,r)}off(n,r){hi(r),n=Array.isArray(n)?n:[n];for(const f of n)Yr(f),wr(this,f).delete(r),this.logIfDebugEnabled("unsubscribe",f,void 0),bo(f)||this.emit(di,{eventName:f,listener:r})}once(n){return new Promise(r=>{const f=this.on(n,Z=>{f(),r(Z)})})}events(n){n=Array.isArray(n)?n:[n];for(const r of n)Yr(r);return bs(this,n)}async emit(n,r){Yr(n),this.logIfDebugEnabled("emit",n,r),p2(this,n,r);const f=wr(this,n),Z=or.get(this),I=[...f],F=bo(n)?[]:[...Z];await ps,await Promise.all([...I.map(async T=>{if(f.has(T))return T(r)}),...F.map(async T=>{if(Z.has(T))return T(n,r)})])}async emitSerial(n,r){Yr(n),this.logIfDebugEnabled("emitSerial",n,r);const f=wr(this,n),Z=or.get(this),I=[...f],F=[...Z];await ps;for(const T of I)f.has(T)&&await T(r);for(const T of F)Z.has(T)&&await T(n,r)}onAny(n){return hi(n),this.logIfDebugEnabled("subscribeAny",void 0,void 0),or.get(this).add(n),this.emit(ai,{listener:n}),this.offAny.bind(this,n)}anyEvent(){return bs(this)}offAny(n){hi(n),this.logIfDebugEnabled("unsubscribeAny",void 0,void 0),this.emit(di,{listener:n}),or.get(this).delete(n)}clearListeners(n){n=Array.isArray(n)?n:[n];for(const r of n)if(this.logIfDebugEnabled("clear",r,void 0),typeof r=="string"||typeof r=="symbol"){wr(this,r).clear();const f=Or(this,r);for(const Z of f)Z.finish();f.clear()}else{or.get(this).clear();for(const f of ui.get(this).values())f.clear();for(const f of jr.get(this).values()){for(const Z of f)Z.finish();f.clear()}}}listenerCount(n){n=Array.isArray(n)?n:[n];let r=0;for(const f of n){if(typeof f=="string"){r+=or.get(this).size+wr(this,f).size+Or(this,f).size+Or(this).size;continue}typeof f<"u"&&Yr(f),r+=or.get(this).size;for(const Z of ui.get(this).values())r+=Z.size;for(const Z of jr.get(this).values())r+=Z.size}return r}bindMethods(n,r){if(typeof n!="object"||n===null)throw new TypeError("`target` must be an object");r=ys(r);for(const f of r){if(n[f]!==void 0)throw new Error(`The property \`${f}\` already exists on \`target\``);Object.defineProperty(n,f,{enumerable:!1,value:this[f].bind(this)})}}}const gs=Object.getOwnPropertyNames(gr.prototype).filter(i=>i!=="constructor");Object.defineProperty(gr,"listenerAdded",{value:ai,writable:!1,enumerable:!0,configurable:!1}),Object.defineProperty(gr,"listenerRemoved",{value:di,writable:!1,enumerable:!0,configurable:!1});var b2=gr;const yo=m2(b2);function y2(i){return typeof i=="object"&&i!==null&&"message"in i&&typeof i.message=="string"}function g2(i){if(y2(i))return i;try{return new Error(JSON.stringify(i))}catch{return new Error(String(i))}}function go(i){return g2(i).message}var Z2=Object.defineProperty,v2=(i,n,r)=>n in i?Z2(i,n,{enumerable:!0,configurable:!0,writable:!0,value:r}):i[n]=r,G2=(i,n,r)=>(v2(i,typeof n!="symbol"?n+"":n,r),r);const X2="hlg.tokbox.com/prod/logging/vcp_webrtc",W2="https://",V2=1e4;let fi;const R2=new Uint8Array(16);function x2(){if(!fi&&(fi=typeof crypto<"u"&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto),!fi))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return fi(R2)}const Un=[];for(let i=0;i<256;++i)Un.push((i+256).toString(16).slice(1));function I2(i,n=0){return(Un[i[n+0]]+Un[i[n+1]]+Un[i[n+2]]+Un[i[n+3]]+"-"+Un[i[n+4]]+Un[i[n+5]]+"-"+Un[i[n+6]]+Un[i[n+7]]+"-"+Un[i[n+8]]+Un[i[n+9]]+"-"+Un[i[n+10]]+Un[i[n+11]]+Un[i[n+12]]+Un[i[n+13]]+Un[i[n+14]]+Un[i[n+15]]).toLowerCase()}const S2=typeof crypto<"u"&&crypto.randomUUID&&crypto.randomUUID.bind(crypto),Zs={randomUUID:S2};function T2(i,n,r){if(Zs.randomUUID&&!n&&!i)return Zs.randomUUID();i=i||{};const f=i.random||(i.rng||x2)();if(f[6]=f[6]&15|64,f[8]=f[8]&63|128,n){r=r||0;for(let Z=0;Z<16;++Z)n[r+Z]=f[Z];return n}return I2(f)}function Zo(i,n){globalThis.vonage||(globalThis.vonage={}),globalThis.vonage.workerizer||(globalThis.vonage.workerizer={});let r=globalThis.vonage.workerizer;return r[i]||(r[i]=n),r[i]}const sr=Zo("globals",{});var Zr=(i=>(i.INIT="INIT",i.FORWARD="FORWARD",i.TERMINATE="TERMINATE",i.GLOBALS_SYNC="GLOBALS_SYNC",i))(Zr||{});function vs(i){return[ImageBitmap,ReadableStream,WritableStream].some(n=>i instanceof n)}let Y2=0;function w2(i,n,r,f,Z){const I=Y2++;return i.postMessage({id:I,type:n,functionName:r,args:f},f.filter(F=>vs(F))),new Promise(F=>{Z==null||Z.set(I,F)})}function Pr(i,n){const{id:r,type:f}=i,Z=Array.isArray(n)?n:[n];postMessage({id:r,type:f,result:n},Z.filter(I=>vs(I)))}const Gs=Zo("workerized",{});function Xs(){return typeof WorkerGlobalScope<"u"&&self instanceof WorkerGlobalScope}async function L2(){if(Xs())Pr({type:Zr.GLOBALS_SYNC},sr);else{const i=[];for(const n in Gs){const{worker:r,resolvers:f}=Gs[n].workerContext;r&&i.push(w2(r,Zr.GLOBALS_SYNC,"",[sr],f))}await Promise.all(i)}}function mi(i,n){if(Array.isArray(n))n.splice(0,n.length);else if(typeof n=="object")for(const r in n)delete n[r];for(const r in i)Array.isArray(i[r])?(n[r]=[],mi(i[r],n[r])):typeof i[r]=="object"?(n[r]={},mi(i[r],n[r])):n[r]=i[r]}async function F2(i,n){const{functionName:r,args:f}=i;if(!n.instance)throw"instance not initialized";if(!r)throw"missing function name to call";if(!n.instance[r])throw`undefined function [${r}] in class ${n.instance.constructor.workerId}`;Pr(i,await n.instance[r](...f!=null?f:[]))}const C2=Zo("registeredWorkers",{});function H2(i,n){if(!i.args)throw"Missing className while initializing worker";const[r,f]=i.args,Z=C2[r];if(Z)n.instance=new Z(i.args.slice(1));else throw`unknown worker class ${r}`;mi(f,sr),Pr(i,typeof n.instance!==void 0)}async function J2(i,n){const{args:r}=i;if(!n.instance)throw"instance not initialized";let f;n.instance.terminate&&(f=await n.instance.terminate(...r!=null?r:[])),Pr(i,f)}function N2(i){if(!i.args)throw"Missing globals while syncing";mi(i.args[0],sr),Pr(i,{})}function k2(){const i={};onmessage=async n=>{const r=n.data;switch(r.type){case Zr.INIT:H2(r,i);break;case Zr.FORWARD:F2(r,i);break;case Zr.TERMINATE:J2(r,i);break;case Zr.GLOBALS_SYNC:N2(r);break}}}Xs()&&k2();function E2(i,n){return sr[i]||(sr[i]=n),[()=>sr[i],async r=>{sr[i]=r,await L2()}]}function U2(i,n){return E2(i,n)}const[B2,K2]=U2("metadata");function M2(i){K2(i)}function pi(){return B2()}class vo{constructor(n,r){G2(this,"uuid"),this.config=n,this.uuid=r!=null?r:T2()}async send(n){var r,f,Z;const{appId:I,sourceType:F}=(r=pi())!=null?r:{};if(!I||!F)return"metadata missing";const T=new AbortController,J=setTimeout(()=>T.abort(),V2);return await((Z=(f=this.config)==null?void 0:f.fetch)!=null?Z:fetch)(this.getUrl(),{method:"POST",headers:this.getHeaders(),body:JSON.stringify(this.buildReport(n)),signal:T.signal}),clearTimeout(J),"success"}getUrl(){var n;let r=(n=pi().proxyUrl)!=null?n:W2;return r+=(r.at(-1)==="/"?"":"/")+X2,r}getHeaders(){return{"Content-Type":"application/json"}}buildReport(n){const r=pi();return{guid:this.uuid,...n,applicationId:r.appId,timestamp:Date.now(),proxyUrl:r.proxyUrl,source:r.sourceType}}}const bi="2.0.4";class A2{constructor(n,r){this.config=n,this.frameTransformedCount=0,this.frameFromSourceCount=0,this.startAt=0,this.reporter=new vo(n,r)}async onFrameFromSource(){this.frameFromSourceCount++}get fps(){const{startAt:n,frameFromSourceCount:r}=this,f=(Date.now()-n)/1e3;return r/f}async onFrameTransformed(n={},r=!1){this.startAt===0&&(this.startAt=Date.now()),this.frameTransformedCount++;const{startAt:f,frameTransformedCount:Z,frameFromSourceCount:I}=this,F=Date.now(),T=(F-f)/1e3,J=Z/T,et=I/T;return r||this.frameTransformedCount>=this.config.loggingIntervalFrameCount?(this.frameFromSourceCount=0,this.frameTransformedCount=0,this.startAt=F,this.reporter.config=this.config,this.reporter.send({...this.config.report,variation:"QoS",fps:et,transformedFps:J,framesTransformed:Z,...n})):"success"}}var Ws=(i=>(i.FPS_DROP="fps_drop",i))(Ws||{}),Vs=(i=>(i.start="start",i.transform="transform",i.flush="flush",i))(Vs||{}),yi=(i=>(i.pipeline_ended="pipeline_ended",i.pipeline_ended_with_error="pipeline_ended_with_error",i.pipeline_started="pipeline_started",i.pipeline_started_with_error="pipeline_started_with_error",i.pipeline_restarted="pipeline_restarted",i.pipeline_restarted_with_error="pipeline_restarted_with_error",i))(yi||{});const z2=500,j2=.8;class O2 extends yo{constructor(n,r){super(),this.reporter_=new vo,this.reporterQos_=new A2({loggingIntervalFrameCount:z2,report:{version:bi}}),this.index_=r,this.transformer_=n,this.shouldStop_=!1,this.isFlashed_=!1,this.mediaTransformerQosReportStartTimestamp_=0,this.videoHeight_=0,this.videoWidth_=0,this.trackExpectedRate_=-1,this.transformerType_="Custom","getTransformerType"in n&&(this.transformerType_=n.getTransformerType()),this.report({variation:"Create"})}setTrackExpectedRate(n){this.trackExpectedRate_=n}async start(n){if(this.controller_=n,this.transformer_&&typeof this.transformer_.start=="function")try{await this.transformer_.start(n)}catch(r){this.report({message:jn.errors.transformer_start,variation:"Error",error:go(r)});const f={eventMetaData:{transformerIndex:this.index_},error:r,function:"start"};this.emit("error",f)}}async transform(n,r){var I,F;var f,Z;if(this.mediaTransformerQosReportStartTimestamp_===0&&(this.mediaTransformerQosReportStartTimestamp_=Date.now()),n instanceof VideoFrame&&(this.videoHeight_=(I=n==null?void 0:n.displayHeight)!=null?I:0,this.videoWidth_=(F=n==null?void 0:n.displayWidth)!=null?F:0),this.reporterQos_.onFrameFromSource(),this.transformer_)if(this.shouldStop_)console.warn("[Pipeline] flush from transform"),n.close(),this.flush(r),r.terminate();else{try{await((Z=(f=this.transformer_).transform)==null?void 0:Z.call(f,n,r)),this.reportQos()}catch(T){this.report({message:jn.errors.transformer_transform,variation:"Error",error:go(T)});const J={eventMetaData:{transformerIndex:this.index_},error:T,function:"transform"};this.emit("error",J)}if(this.trackExpectedRate_!=-1&&this.trackExpectedRate_*j2>this.reporterQos_.fps){const T={eventMetaData:{transformerIndex:this.index_},warningType:"fps_drop",dropInfo:{requested:this.trackExpectedRate_,current:this.reporterQos_.fps}};this.emit("warn",T)}}}async flush(n){if(this.transformer_&&typeof this.transformer_.flush=="function"&&!this.isFlashed_){this.isFlashed_=!0;try{await this.transformer_.flush(n)}catch(r){this.report({message:jn.errors.transformer_flush,variation:"Error",error:go(r)});const f={eventMetaData:{transformerIndex:this.index_},error:r,function:"flush"};this.emit("error",f)}}this.reportQos(!0),this.report({variation:"Delete"})}stop(){console.log("[Pipeline] Stop stream."),this.controller_&&(this.flush(this.controller_),this.controller_.terminate()),this.shouldStop_=!0}report(n){this.reporter_.send({version:bi,action:"MediaTransformer",transformerType:this.transformerType_,...n})}reportQos(n=!1){this.reporterQos_.config={...this.reporterQos_.config},this.reporterQos_.onFrameTransformed({version:bi,action:"MediaTransformer",transformerType:this.transformerType_,videoWidth:this.videoWidth_,videoHeight:this.videoHeight_},n)}}class P2 extends yo{constructor(n){super(),this.transformers_=[],this.trackExpectedRate_=-1;for(let r=0;r<n.length;r++){let f=new O2(n[r],r);f.on("error",Z=>{this.emit("error",Z)}),f.on("warn",Z=>{this.emit("warn",Z)}),this.transformers_.push(f)}}setTrackExpectedRate(n){this.trackExpectedRate_=n;for(let r of this.transformers_)r.setTrackExpectedRate(this.trackExpectedRate_)}async start(n,r){if(!this.transformers_||this.transformers_.length===0){console.log("[Pipeline] No transformers.");return}try{let f=n;for(let Z of this.transformers_)n=n.pipeThrough(new TransformStream(Z));n.pipeTo(r).then(async()=>{console.log("[Pipeline] Setup."),await r.abort(),await f.cancel(),this.emit("pipelineInfo","pipeline_ended")}).catch(async Z=>{n.cancel().then(()=>{console.log("[Pipeline] Shutting down streams after abort.")}).catch(I=>{console.error("[Pipeline] Error from stream transform:",I)}),await r.abort(Z),await f.cancel(Z),this.emit("pipelineInfo","pipeline_ended_with_error")})}catch{this.emit("pipelineInfo","pipeline_started_with_error"),this.destroy();return}this.emit("pipelineInfo","pipeline_started"),console.log("[Pipeline] Pipeline started.")}async destroy(){console.log("[Pipeline] Destroying Pipeline.");for(let n of this.transformers_)n.stop()}}class _2 extends yo{constructor(){super(),this.reporter_=new vo,this.trackExpectedRate_=-1,this.report({variation:"Create"})}setTrackExpectedRate(n){this.trackExpectedRate_=n,this.pipeline_&&this.pipeline_.setTrackExpectedRate(this.trackExpectedRate_)}transform(n,r){return this.readable_=n,this.writable_=r,this.transformInternal()}transformInternal(){return new Promise(async(n,r)=>{if(!this.transformers_||this.transformers_.length===0){this.report({message:jn.errors.transformer_none,variation:"Error"}),r("[MediaProcessor] Need to set transformers.");return}if(!this.readable_){this.report({variation:"Error",message:jn.errors.readable_null}),r("[MediaProcessor] Readable is null.");return}if(!this.writable_){this.report({variation:"Error",message:jn.errors.writable_null}),r("[MediaProcessor] Writable is null.");return}let f=!1;this.pipeline_&&(f=!0,this.pipeline_.clearListeners(),this.pipeline_.destroy()),this.pipeline_=new P2(this.transformers_),this.pipeline_.on("warn",Z=>{this.emit("warn",Z)}),this.pipeline_.on("error",Z=>{this.emit("error",Z)}),this.pipeline_.on("pipelineInfo",Z=>{f&&(Z==="pipeline_started"?Z=yi.pipeline_restarted:Z==="pipeline_started_with_error"&&(Z=yi.pipeline_restarted_with_error)),this.emit("pipelineInfo",Z)}),this.trackExpectedRate_!=-1&&this.pipeline_.setTrackExpectedRate(this.trackExpectedRate_),this.pipeline_.start(this.readable_,this.writable_).then(()=>{n()}).catch(Z=>{r(Z)})})}setTransformers(n){return this.report({variation:"Update",message:jn.updates.transformer_new}),this.transformers_=n,this.readable_&&this.writable_?this.transformInternal():Promise.resolve()}destroy(){return new Promise(async n=>{this.pipeline_&&this.pipeline_.destroy(),this.report({variation:"Delete"}),n()})}report(n){this.reporter_.send({version:bi,action:"MediaProcessor",...n})}}class Q2{constructor(){this.processor_=null,this.generator_=null}init(n){return new Promise((r,f)=>{try{this.processor_=new MediaStreamTrackProcessor(n)}catch(Z){console.log(`[InsertableStreamHelper] MediaStreamTrackProcessor failed: ${Z}`),f(Z)}try{n.kind==="audio"?this.generator_=new MediaStreamTrackGenerator({kind:"audio"}):n.kind==="video"?this.generator_=new MediaStreamTrackGenerator({kind:"video"}):f("kind not supported")}catch(Z){console.log(`[InsertableStreamHelper] MediaStreamTrackGenerator failed: ${Z}`),f(Z)}r()})}getReadable(){return this.processor_.readable}getWriteable(){return this.generator_.writable}getProccesorTrack(){return this.generator_}}class D2{constructor(n){this.insertableStreamHelper_=new Q2,this.mediaProcessor_=n}setTrack(n){return new Promise((r,f)=>{this.insertableStreamHelper_.init(n).then(()=>{this.mediaProcessor_.transform(this.insertableStreamHelper_.getReadable(),this.insertableStreamHelper_.getWriteable()).then(()=>{r(this.insertableStreamHelper_.getProccesorTrack())}).catch(Z=>{f(Z)})}).catch(Z=>{f(Z)})})}destroy(){return new Promise((n,r)=>{this.mediaProcessor_?this.mediaProcessor_.destroy().then(()=>{n()}).catch(f=>{r(f)}):r("no processor")})}}var _r=(i=>(i.Low="Low",i.High="High",i))(_r||{}),Rs=(i=>(i.BackgroundBlur="BackgroundBlur",i.VirtualBackground="VirtualBackground",i.VideoBackground="VideoBackground",i.SilhouetteBlur="SilhouetteBlur",i))(Rs||{}),gi=(i=>(i.FAST="FAST",i.PRECISE="PRECISE",i))(gi||{}),Qr=(i=>(i.CANVAS="CANVAS",i.WEBGL="WEBGL",i))(Qr||{});const $2=async()=>WebAssembly.validate(new Uint8Array([0,97,115,109,1,0,0,0,1,5,1,96,0,1,123,3,2,1,0,10,10,1,8,0,65,0,253,15,253,98,11]));var q2=function(){var i=typeof document<"u"&&document.currentScript?document.currentScript.src:void 0;return function(n){n=n||{};var r=typeof n<"u"?n:{},f,Z;r.ready=new Promise(function(tt,it){f=tt,Z=it});var I={},F;for(F in r)r.hasOwnProperty(F)&&(I[F]=r[F]);var T="./this.program",J=function(tt,it){throw it},et=!0,lt="";function pt(tt){return r.locateFile?r.locateFile(tt,lt):lt+tt}var Yt;typeof document<"u"&&document.currentScript&&(lt=document.currentScript.src),i&&(lt=i),lt.indexOf("blob:")!==0?lt=lt.substr(0,lt.replace(/[?#].*/,"").lastIndexOf("/")+1):lt="";var Lt=r.print||console.log.bind(console),at=r.printErr||console.warn.bind(console);for(F in I)I.hasOwnProperty(F)&&(r[F]=I[F]);I=null,r.arguments&&r.arguments,r.thisProgram&&(T=r.thisProgram),r.quit&&(J=r.quit);var dt;r.wasmBinary&&(dt=r.wasmBinary);var Bt=r.noExitRuntime||!0;typeof WebAssembly!="object"&&he("no native wasm support detected");var kt,ee=!1,P=typeof TextDecoder<"u"?new TextDecoder("utf8"):void 0;function De(tt,it,ut){for(var _t=it+ut,de=it;tt[de]&&!(de>=_t);)++de;if(de-it>16&&tt.subarray&&P)return P.decode(tt.subarray(it,de));for(var ue="";it<de;){var St=tt[it++];if(!(St&128)){ue+=String.fromCharCode(St);continue}var me=tt[it++]&63;if((St&224)==192){ue+=String.fromCharCode((St&31)<<6|me);continue}var He=tt[it++]&63;if((St&240)==224?St=(St&15)<<12|me<<6|He:St=(St&7)<<18|me<<12|He<<6|tt[it++]&63,St<65536)ue+=String.fromCharCode(St);else{var tn=St-65536;ue+=String.fromCharCode(55296|tn>>10,56320|tn&1023)}}return ue}function ze(tt,it){return tt?De(Zt,tt,it):""}function We(tt,it,ut){for(var _t=0;_t<tt.length;++_t)ne[it++>>0]=tt.charCodeAt(_t);ut||(ne[it>>0]=0)}function zt(tt,it){return tt%it>0&&(tt+=it-tt%it),tt}var Hn,ne,Zt,$e;function An(tt){Hn=tt,r.HEAP8=ne=new Int8Array(tt),r.HEAP16=new Int16Array(tt),r.HEAP32=$e=new Int32Array(tt),r.HEAPU8=Zt=new Uint8Array(tt),r.HEAPU16=new Uint16Array(tt),r.HEAPU32=new Uint32Array(tt),r.HEAPF32=new Float32Array(tt),r.HEAPF64=new Float64Array(tt)}r.INITIAL_MEMORY;var Re,Ht=[],Te=[],sn=[],Gn=0;function Ln(){return Bt||Gn>0}function Rn(){if(r.preRun)for(typeof r.preRun=="function"&&(r.preRun=[r.preRun]);r.preRun.length;)pn(r.preRun.shift());Qt(Ht)}function Jn(){Qt(Te)}function dn(){if(r.postRun)for(typeof r.postRun=="function"&&(r.postRun=[r.postRun]);r.postRun.length;)Fn(r.postRun.shift());Qt(sn)}function pn(tt){Ht.unshift(tt)}function kn(tt){Te.unshift(tt)}function Fn(tt){sn.unshift(tt)}var je=0,Me=null;function xn(tt){je++,r.monitorRunDependencies&&r.monitorRunDependencies(je)}function Xn(tt){if(je--,r.monitorRunDependencies&&r.monitorRunDependencies(je),je==0&&Me){var it=Me;Me=null,it()}}r.preloadedImages={},r.preloadedAudios={};function he(tt){r.onAbort&&r.onAbort(tt),tt="Aborted("+tt+")",at(tt),ee=!0,tt+=". Build with -s ASSERTIONS=1 for more info.";var it=new WebAssembly.RuntimeError(tt);throw Z(it),it}var Se="data:application/octet-stream;base64,";function Oe(tt){return tt.startsWith(Se)}var re;re="tflite-simd.wasm",Oe(re)||(re=pt(re));function Ve(tt){try{if(tt==re&&dt)return new Uint8Array(dt);if(!Yt)throw"both async and sync fetching of the wasm failed"}catch(it){he(it)}}function ln(){return!dt&&et&&typeof fetch=="function"?fetch(re,{credentials:"same-origin"}).then(function(tt){if(!tt.ok)throw"failed to load wasm binary file at '"+re+"'";return tt.arrayBuffer()}).catch(function(){return Ve(re)}):Promise.resolve().then(function(){return Ve(re)})}function Be(){var tt={a:fe};function it(St,me){var He=St.exports;r.asm=He,kt=r.asm.q,An(kt.buffer),Re=r.asm.E,kn(r.asm.r),Xn()}xn();function ut(St){it(St.instance)}function _t(St){return ln().then(function(me){return WebAssembly.instantiate(me,tt)}).then(function(me){return me}).then(St,function(me){at("failed to asynchronously prepare wasm: "+me),he(me)})}function de(){return!dt&&typeof WebAssembly.instantiateStreaming=="function"&&!Oe(re)&&typeof fetch=="function"?fetch(re,{credentials:"same-origin"}).then(function(St){var me=WebAssembly.instantiateStreaming(St,tt);return me.then(ut,function(He){return at("wasm streaming compile failed: "+He),at("falling back to ArrayBuffer instantiation"),_t(ut)})}):_t(ut)}if(r.instantiateWasm)try{var ue=r.instantiateWasm(tt,it);return ue}catch(St){return at("Module.instantiateWasm callback failed with error: "+St),!1}return de().catch(Z),{}}function Qt(tt){for(;tt.length>0;){var it=tt.shift();if(typeof it=="function"){it(r);continue}var ut=it.func;typeof ut=="number"?it.arg===void 0?Re.get(ut)():Re.get(ut)(it.arg):ut(it.arg===void 0?null:it.arg)}}function Ze(tt,it,ut,_t){he("Assertion failed: "+ze(tt)+", at: "+[it?ze(it):"unknown filename",ut,_t?ze(_t):"unknown function"])}function Ce(tt,it){he("To use dlopen, you need to use Emscripten's linking support, see https://github.com/emscripten-core/emscripten/wiki/Linking")}function Mt(tt,it){he("To use dlopen, you need to use Emscripten's linking support, see https://github.com/emscripten-core/emscripten/wiki/Linking")}function xe(){he("")}var jt;jt=function(){return performance.now()};var ye=!0;function Ye(tt){return $e[Ct()>>2]=tt,tt}function qe(tt,it){var ut;if(tt===0)ut=Date.now();else if((tt===1||tt===4)&&ye)ut=jt();else return Ye(28),-1;return $e[it>>2]=ut/1e3|0,$e[it+4>>2]=ut%1e3*1e3*1e3|0,0}function Xe(){return 2147483648}function Ot(tt,it,ut){Zt.copyWithin(tt,it,it+ut)}function Ae(tt){try{return kt.grow(tt-Hn.byteLength+65535>>>16),An(kt.buffer),1}catch{}}function Pe(tt){var it=Zt.length;tt=tt>>>0;var ut=2147483648;if(tt>ut)return!1;for(var _t=1;_t<=4;_t*=2){var de=it*(1+.2/_t);de=Math.min(de,tt+100663296);var ue=Math.min(ut,zt(Math.max(tt,de),65536)),St=Ae(ue);if(St)return!0}return!1}function Ie(tt){for(var it=jt();jt()-it<tt;);}var Wn={};function cn(){return T||"./this.program"}function _e(){if(!_e.strings){var tt=(typeof navigator=="object"&&navigator.languages&&navigator.languages[0]||"C").replace("-","_")+".UTF-8",it={USER:"web_user",LOGNAME:"web_user",PATH:"/",PWD:"/",HOME:"/home/web_user",LANG:tt,_:cn()};for(var ut in Wn)Wn[ut]===void 0?delete it[ut]:it[ut]=Wn[ut];var _t=[];for(var ut in it)_t.push(ut+"="+it[ut]);_e.strings=_t}return _e.strings}var un={mappings:{},buffers:[null,[],[]],printChar:function(tt,it){var ut=un.buffers[tt];it===0||it===10?((tt===1?Lt:at)(De(ut,0)),ut.length=0):ut.push(it)},varargs:void 0,get:function(){un.varargs+=4;var tt=$e[un.varargs-4>>2];return tt},getStr:function(tt){var it=ze(tt);return it},get64:function(tt,it){return tt}};function ve(tt,it){var ut=0;return _e().forEach(function(_t,de){var ue=it+ut;$e[tt+de*4>>2]=ue,We(_t,ue),ut+=_t.length+1}),0}function we(tt,it){var ut=_e();$e[tt>>2]=ut.length;var _t=0;return ut.forEach(function(de){_t+=de.length+1}),$e[it>>2]=_t,0}function Ge(tt){te(tt)}function ie(tt){return 0}function Qe(tt,it,ut,_t,de){}function qt(tt,it,ut,_t){for(var de=0,ue=0;ue<ut;ue++){for(var St=$e[it+ue*8>>2],me=$e[it+(ue*8+4)>>2],He=0;He<me;He++)un.printChar(tt,Zt[St+He]);de+=me}return $e[_t>>2]=de,0}function Pt(){if(typeof crypto=="object"&&typeof crypto.getRandomValues=="function"){var tt=new Uint8Array(1);return function(){return crypto.getRandomValues(tt),tt[0]}}else return function(){he("randomDevice")}}function hn(tt,it){hn.randomDevice||(hn.randomDevice=Pt());for(var ut=0;ut<it;ut++)ne[tt+ut>>0]=hn.randomDevice();return 0}var fe={a:Ze,e:Ce,d:Mt,b:xe,n:qe,h:Xe,l:Ot,m:Pe,p:Ie,f:ve,g:we,j:Ge,i:ie,k:Qe,c:qt,o:hn};Be(),r.___wasm_call_ctors=function(){return(r.___wasm_call_ctors=r.asm.r).apply(null,arguments)},r._getModelBufferMemoryOffset=function(){return(r._getModelBufferMemoryOffset=r.asm.s).apply(null,arguments)},r._getInputMemoryOffset=function(){return(r._getInputMemoryOffset=r.asm.t).apply(null,arguments)},r._getInputHeight=function(){return(r._getInputHeight=r.asm.u).apply(null,arguments)},r._getInputWidth=function(){return(r._getInputWidth=r.asm.v).apply(null,arguments)},r._getInputChannelCount=function(){return(r._getInputChannelCount=r.asm.w).apply(null,arguments)},r._getOutputMemoryOffset=function(){return(r._getOutputMemoryOffset=r.asm.x).apply(null,arguments)},r._getOutputHeight=function(){return(r._getOutputHeight=r.asm.y).apply(null,arguments)},r._getOutputWidth=function(){return(r._getOutputWidth=r.asm.z).apply(null,arguments)},r._getOutputChannelCount=function(){return(r._getOutputChannelCount=r.asm.A).apply(null,arguments)},r._loadModel=function(){return(r._loadModel=r.asm.B).apply(null,arguments)},r._runInference=function(){return(r._runInference=r.asm.C).apply(null,arguments)},r._isGPUEnabled=function(){return(r._isGPUEnabled=r.asm.D).apply(null,arguments)};var Ct=r.___errno_location=function(){return(Ct=r.___errno_location=r.asm.F).apply(null,arguments)},Vt;function oe(tt){this.name="ExitStatus",this.message="Program terminated with exit("+tt+")",this.status=tt}Me=function tt(){Vt||Le(),Vt||(Me=tt)};function Le(tt){if(je>0||(Rn(),je>0))return;function it(){Vt||(Vt=!0,r.calledRun=!0,!ee&&(Jn(),f(r),r.onRuntimeInitialized&&r.onRuntimeInitialized(),dn()))}r.setStatus?(r.setStatus("Running..."),setTimeout(function(){setTimeout(function(){r.setStatus("")},1),it()},1)):it()}r.run=Le;function te(tt,it){se(tt)}function se(tt){Ln()||(r.onExit&&r.onExit(tt),ee=!0),J(tt,new oe(tt))}if(r.preInit)for(typeof r.preInit=="function"&&(r.preInit=[r.preInit]);r.preInit.length>0;)r.preInit.pop()();return Le(),n.ready}}();class tc{constructor(){gt(this,"selectedTFLite");gt(this,"isSIMDSupported",!1);gt(this,"isThreadsSupported",!1);gt(this,"inputWidth",0);gt(this,"inputHeight",0);gt(this,"inputChannelCount",0);gt(this,"inputMemoryOffset",0);gt(this,"outputWidth",0);gt(this,"outputHeight",0);gt(this,"outputChannelCount",0);gt(this,"outputMemoryOffset",0)}}const ec="https://d3opqjmqzxf057.cloudfront.net/vonage-tensorflow-wasm/tflite-simd-wasm/1.1.3/",nc="https://d3opqjmqzxf057.cloudfront.net/ml/selfie_segmentation/4.0.0/";async function rc(i=ec,n=nc){let r=new tc;var f=new Promise(function(Z,I){async function F(){return q2({locateFile:function(et){return i+et}})}async function T(J){return new Promise(async(et,lt)=>{const pt=J;if(typeof pt>"u")return lt("TFLite backend unavailable: wasmSimd");const Yt="selfie_segmentation_landscape";console.log("Loading tflite model:",Yt);let Lt=n+`${Yt}.tflite`;console.log("TFLite modelUrl: "+Lt);try{const dt=await(await fetch(Lt)).arrayBuffer();console.log("Model buffer size:",dt.byteLength);const Bt=pt._getModelBufferMemoryOffset();console.log("Model buffer memory offset:",Bt),console.log("Loading model buffer..."),pt.HEAPU8.set(new Uint8Array(dt),Bt);const kt=pt._loadModel(dt.byteLength);if(console.log("Load model result:",kt),kt!==0){lt("Cannot load model");return}r.inputWidth=pt._getInputWidth(),r.inputHeight=pt._getInputHeight(),r.inputChannelCount=pt._getInputChannelCount(),r.inputMemoryOffset=pt._getInputMemoryOffset(),console.log("Input memory offset:",r.inputMemoryOffset),console.log("Input height:",r.inputHeight),console.log("Input width:",r.inputWidth),console.log("Input channels:",r.inputChannelCount),r.outputMemoryOffset=pt._getOutputMemoryOffset(),r.outputWidth=pt._getOutputWidth(),r.outputHeight=pt._getOutputHeight(),r.outputChannelCount=pt._getOutputChannelCount(),console.log("Output memory offset:",r.outputMemoryOffset),console.log("Output height:",r.outputHeight),console.log("Output width:",r.outputWidth),console.log("Output channels:",r.outputChannelCount),r.selectedTFLite=pt}catch(at){lt(at);return}et()})}F().then(J=>{if(J===null)throw console.error("loadTFLite null"),"loadTFLite null";T(J).then(et=>{Z(r)}).catch(et=>{console.error("loadTFLiteModel error"),I("loadTFLiteModel error")})}).catch(J=>{console.error("loadTFLite error:",J),I("loadTFLite error:"+J)})});return f}class xs{constructor(){gt(this,"canvas",new OffscreenCanvas(0,0));gt(this,"context",this.canvas.getContext("2d",{willReadFrequently:!0}));gt(this,"pixelCount",0);gt(this,"inputOffset",0);gt(this,"outputOffset",0);gt(this,"infos");gt(this,"mask")}async init(n,r){await this.initWasm(n,r),this.infos&&(this.canvas.width=this.infos.inputWidth,this.canvas.height=this.infos.inputHeight,this.pixelCount=this.infos.inputWidth*this.infos.inputHeight,this.mask=new ImageData(this.infos.inputWidth,this.infos.inputHeight),this.inputOffset=this.infos.inputMemoryOffset/4,this.outputOffset=this.infos.outputMemoryOffset/4)}async initWasm(n,r){this.infos=await rc(n,r)}getOutputDimensions(){var n,r,f,Z;return{width:(r=(n=this.infos)==null?void 0:n.outputWidth)!=null?r:0,height:(Z=(f=this.infos)==null?void 0:f.outputHeight)!=null?Z:0}}async process(n){if(!this.mask||!this.infos)return;const r=this.infos.inputWidth,f=this.infos.inputHeight;this.context.drawImage(n,0,0,n.width,n.height,0,0,r,f);const Z=this.context.getImageData(0,0,r,f),I=this.infos.selectedTFLite.HEAPF32;for(let F=0;F<this.pixelCount;F++){const T=this.inputOffset+F*3;I[T]=Z.data[F*4]/255,I[T+1]=Z.data[F*4+1]/255,I[T+2]=Z.data[F*4+2]/255}this.infos.selectedTFLite._runInference();for(let F=0;F<this.pixelCount;F++){const T=this.infos.selectedTFLite.HEAPF32[this.outputOffset+F];this.mask.data[F*4]=this.mask.data[F*4+3]=255*T}return createImageBitmap(this.mask)}isGpuSupported(){var n,r,f;return(f=(r=(n=this.infos)==null?void 0:n.selectedTFLite)==null?void 0:r._isGPUEnabled())!=null?f:!1}}async function ic(i,n){const{wasm:r,insertableStreams:f,simd:Z,webgl:I}=await Is(i,n);if(!r.supported)throw r.message;if(!f.supported)throw f.message;if(!Z.supported)throw Z.message;if(!I.supported)throw I.message}async function Is(i,n){const r=new xs;await r.initWasm(i,n);const f={wasm:{supported:typeof WebAssembly=="object"&&typeof WebAssembly.instantiate=="function",message:"Your browser does not support WebAssembly features."},simd:{supported:await $2(),message:"Your browser does not support simd features."},insertableStreams:{supported:!0},gpu:{supported:r.isGpuSupported(),message:"Your browser does not support gpu features."},webgl:oc(),performance:Ss()};try{await Dn()}catch(Z){f.insertableStreams.supported=!1,f.insertableStreams.message=Z}return f}function oc(){return OffscreenCanvas?new OffscreenCanvas(0,0).getContext("webgl2")?{supported:!0}:{supported:!1,message:"Your browser does not support webgl 2"}:{supported:!1,message:"Your browser does not support offscreen canvas"}}function Ss(){return new OffscreenCanvas(0,0).getContext("webgl2",{failIfMajorPerformanceCaveat:!0})?{supported:!0}:{supported:!1,message:"Your hardware does not perform good enough to run the library efficiently"}}const Zi={};(function(){var i;function n(p){var W=0;return function(){return W<p.length?{done:!1,value:p[W++]}:{done:!0}}}var r=typeof Object.defineProperties=="function"?Object.defineProperty:function(p,W,V){return p==Array.prototype||p==Object.prototype||(p[W]=V.value),p};function f(p){p=[typeof globalThis=="object"&&globalThis,p,typeof window=="object"&&window,typeof self=="object"&&self,typeof global=="object"&&global];for(var W=0;W<p.length;++W){var V=p[W];if(V&&V.Math==Math)return V}throw Error("Cannot find global object")}var Z=f(this);function I(p,W){if(W)t:{var V=Z;p=p.split(".");for(var E=0;E<p.length-1;E++){var O=p[E];if(!(O in V))break t;V=V[O]}p=p[p.length-1],E=V[p],W=W(E),W!=E&&W!=null&&r(V,p,{configurable:!0,writable:!0,value:W})}}I("Symbol",function(p){function W(ot){if(this instanceof W)throw new TypeError("Symbol is not a constructor");return new V(E+(ot||"")+"_"+O++,ot)}function V(ot,j){this.g=ot,r(this,"description",{configurable:!0,writable:!0,value:j})}if(p)return p;V.prototype.toString=function(){return this.g};var E="jscomp_symbol_"+(1e9*Math.random()>>>0)+"_",O=0;return W}),I("Symbol.iterator",function(p){if(p)return p;p=Symbol("Symbol.iterator");for(var W="Array Int8Array Uint8Array Uint8ClampedArray Int16Array Uint16Array Int32Array Uint32Array Float32Array Float64Array".split(" "),V=0;V<W.length;V++){var E=Z[W[V]];typeof E=="function"&&typeof E.prototype[p]!="function"&&r(E.prototype,p,{configurable:!0,writable:!0,value:function(){return F(n(this))}})}return p});function F(p){return p={next:p},p[Symbol.iterator]=function(){return this},p}function T(p){var W=typeof Symbol<"u"&&Symbol.iterator&&p[Symbol.iterator];return W?W.call(p):{next:n(p)}}function J(p){if(!(p instanceof Array)){p=T(p);for(var W,V=[];!(W=p.next()).done;)V.push(W.value);p=V}return p}var et=typeof Object.create=="function"?Object.create:function(p){function W(){}return W.prototype=p,new W},lt;if(typeof Object.setPrototypeOf=="function")lt=Object.setPrototypeOf;else{var pt;t:{var Yt={a:!0},Lt={};try{Lt.__proto__=Yt,pt=Lt.a;break t}catch{}pt=!1}lt=pt?function(p,W){if(p.__proto__=W,p.__proto__!==W)throw new TypeError(p+" is not extensible");return p}:null}var at=lt;function dt(p,W){if(p.prototype=et(W.prototype),p.prototype.constructor=p,at)at(p,W);else for(var V in W)if(V!="prototype")if(Object.defineProperties){var E=Object.getOwnPropertyDescriptor(W,V);E&&Object.defineProperty(p,V,E)}else p[V]=W[V];p.ea=W.prototype}function Bt(){this.l=!1,this.i=null,this.h=void 0,this.g=1,this.s=this.m=0,this.j=null}function kt(p){if(p.l)throw new TypeError("Generator is already running");p.l=!0}Bt.prototype.o=function(p){this.h=p};function ee(p,W){p.j={U:W,V:!0},p.g=p.m||p.s}Bt.prototype.return=function(p){this.j={return:p},this.g=this.s};function P(p,W,V){return p.g=V,{value:W}}function De(p){this.g=new Bt,this.h=p}function ze(p,W){kt(p.g);var V=p.g.i;return V?We(p,"return"in V?V.return:function(E){return{value:E,done:!0}},W,p.g.return):(p.g.return(W),zt(p))}function We(p,W,V,E){try{var O=W.call(p.g.i,V);if(!(O instanceof Object))throw new TypeError("Iterator result "+O+" is not an object");if(!O.done)return p.g.l=!1,O;var ot=O.value}catch(j){return p.g.i=null,ee(p.g,j),zt(p)}return p.g.i=null,E.call(p.g,ot),zt(p)}function zt(p){for(;p.g.g;)try{var W=p.h(p.g);if(W)return p.g.l=!1,{value:W.value,done:!1}}catch(V){p.g.h=void 0,ee(p.g,V)}if(p.g.l=!1,p.g.j){if(W=p.g.j,p.g.j=null,W.V)throw W.U;return{value:W.return,done:!0}}return{value:void 0,done:!0}}function Hn(p){this.next=function(W){return kt(p.g),p.g.i?W=We(p,p.g.i.next,W,p.g.o):(p.g.o(W),W=zt(p)),W},this.throw=function(W){return kt(p.g),p.g.i?W=We(p,p.g.i.throw,W,p.g.o):(ee(p.g,W),W=zt(p)),W},this.return=function(W){return ze(p,W)},this[Symbol.iterator]=function(){return this}}function ne(p,W){return W=new Hn(new De(W)),at&&p.prototype&&at(W,p.prototype),W}function Zt(p,W){p instanceof String&&(p+="");var V=0,E=!1,O={next:function(){if(!E&&V<p.length){var ot=V++;return{value:W(ot,p[ot]),done:!1}}return E=!0,{done:!0,value:void 0}}};return O[Symbol.iterator]=function(){return O},O}var $e=typeof Object.assign=="function"?Object.assign:function(p,W){for(var V=1;V<arguments.length;V++){var E=arguments[V];if(E)for(var O in E)Object.prototype.hasOwnProperty.call(E,O)&&(p[O]=E[O])}return p};I("Object.assign",function(p){return p||$e}),I("Promise",function(p){function W(j){this.h=0,this.i=void 0,this.g=[],this.o=!1;var rt=this.j();try{j(rt.resolve,rt.reject)}catch(bt){rt.reject(bt)}}function V(){this.g=null}function E(j){return j instanceof W?j:new W(function(rt){rt(j)})}if(p)return p;V.prototype.h=function(j){if(this.g==null){this.g=[];var rt=this;this.i(function(){rt.l()})}this.g.push(j)};var O=Z.setTimeout;V.prototype.i=function(j){O(j,0)},V.prototype.l=function(){for(;this.g&&this.g.length;){var j=this.g;this.g=[];for(var rt=0;rt<j.length;++rt){var bt=j[rt];j[rt]=null;try{bt()}catch(Rt){this.j(Rt)}}}this.g=null},V.prototype.j=function(j){this.i(function(){throw j})},W.prototype.j=function(){function j(Rt){return function(Ut){bt||(bt=!0,Rt.call(rt,Ut))}}var rt=this,bt=!1;return{resolve:j(this.C),reject:j(this.l)}},W.prototype.C=function(j){if(j===this)this.l(new TypeError("A Promise cannot resolve to itself"));else if(j instanceof W)this.F(j);else{t:switch(typeof j){case"object":var rt=j!=null;break t;case"function":rt=!0;break t;default:rt=!1}rt?this.u(j):this.m(j)}},W.prototype.u=function(j){var rt=void 0;try{rt=j.then}catch(bt){this.l(bt);return}typeof rt=="function"?this.G(rt,j):this.m(j)},W.prototype.l=function(j){this.s(2,j)},W.prototype.m=function(j){this.s(1,j)},W.prototype.s=function(j,rt){if(this.h!=0)throw Error("Cannot settle("+j+", "+rt+"): Promise already settled in state"+this.h);this.h=j,this.i=rt,this.h===2&&this.D(),this.A()},W.prototype.D=function(){var j=this;O(function(){if(j.B()){var rt=Z.console;typeof rt<"u"&&rt.error(j.i)}},1)},W.prototype.B=function(){if(this.o)return!1;var j=Z.CustomEvent,rt=Z.Event,bt=Z.dispatchEvent;return typeof bt>"u"?!0:(typeof j=="function"?j=new j("unhandledrejection",{cancelable:!0}):typeof rt=="function"?j=new rt("unhandledrejection",{cancelable:!0}):(j=Z.document.createEvent("CustomEvent"),j.initCustomEvent("unhandledrejection",!1,!0,j)),j.promise=this,j.reason=this.i,bt(j))},W.prototype.A=function(){if(this.g!=null){for(var j=0;j<this.g.length;++j)ot.h(this.g[j]);this.g=null}};var ot=new V;return W.prototype.F=function(j){var rt=this.j();j.J(rt.resolve,rt.reject)},W.prototype.G=function(j,rt){var bt=this.j();try{j.call(rt,bt.resolve,bt.reject)}catch(Rt){bt.reject(Rt)}},W.prototype.then=function(j,rt){function bt($t,Nt){return typeof $t=="function"?function(Tt){try{Rt($t(Tt))}catch(Et){Ut(Et)}}:Nt}var Rt,Ut,Jt=new W(function($t,Nt){Rt=$t,Ut=Nt});return this.J(bt(j,Rt),bt(rt,Ut)),Jt},W.prototype.catch=function(j){return this.then(void 0,j)},W.prototype.J=function(j,rt){function bt(){switch(Rt.h){case 1:j(Rt.i);break;case 2:rt(Rt.i);break;default:throw Error("Unexpected state: "+Rt.h)}}var Rt=this;this.g==null?ot.h(bt):this.g.push(bt),this.o=!0},W.resolve=E,W.reject=function(j){return new W(function(rt,bt){bt(j)})},W.race=function(j){return new W(function(rt,bt){for(var Rt=T(j),Ut=Rt.next();!Ut.done;Ut=Rt.next())E(Ut.value).J(rt,bt)})},W.all=function(j){var rt=T(j),bt=rt.next();return bt.done?E([]):new W(function(Rt,Ut){function Jt(Tt){return function(Et){$t[Tt]=Et,Nt--,Nt==0&&Rt($t)}}var $t=[],Nt=0;do $t.push(void 0),Nt++,E(bt.value).J(Jt($t.length-1),Ut),bt=rt.next();while(!bt.done)})},W}),I("Object.is",function(p){return p||function(W,V){return W===V?W!==0||1/W===1/V:W!==W&&V!==V}}),I("Array.prototype.includes",function(p){return p||function(W,V){var E=this;E instanceof String&&(E=String(E));var O=E.length;for(V=V||0,0>V&&(V=Math.max(V+O,0));V<O;V++){var ot=E[V];if(ot===W||Object.is(ot,W))return!0}return!1}}),I("String.prototype.includes",function(p){return p||function(W,V){if(this==null)throw new TypeError("The 'this' value for String.prototype.includes must not be null or undefined");if(W instanceof RegExp)throw new TypeError("First argument to String.prototype.includes must not be a regular expression");return this.indexOf(W,V||0)!==-1}}),I("Array.prototype.keys",function(p){return p||function(){return Zt(this,function(W){return W})}});var An=this||self;function Re(p,W){p=p.split(".");var V=An;p[0]in V||typeof V.execScript>"u"||V.execScript("var "+p[0]);for(var E;p.length&&(E=p.shift());)p.length||W===void 0?V[E]&&V[E]!==Object.prototype[E]?V=V[E]:V=V[E]={}:V[E]=W}function Ht(p,W){return W=String.fromCharCode.apply(null,W),p==null?W:p+W}var Te,sn=typeof TextDecoder<"u",Gn,Ln=typeof TextEncoder<"u";function Rn(p){if(Ln)p=(Gn||(Gn=new TextEncoder)).encode(p);else{var W=void 0;W=W===void 0?!1:W;for(var V=0,E=new Uint8Array(3*p.length),O=0;O<p.length;O++){var ot=p.charCodeAt(O);if(128>ot)E[V++]=ot;else{if(2048>ot)E[V++]=ot>>6|192;else{if(55296<=ot&&57343>=ot){if(56319>=ot&&O<p.length){var j=p.charCodeAt(++O);if(56320<=j&&57343>=j){ot=1024*(ot-55296)+j-56320+65536,E[V++]=ot>>18|240,E[V++]=ot>>12&63|128,E[V++]=ot>>6&63|128,E[V++]=ot&63|128;continue}else O--}if(W)throw Error("Found an unpaired surrogate");ot=65533}E[V++]=ot>>12|224,E[V++]=ot>>6&63|128}E[V++]=ot&63|128}}p=E.subarray(0,V)}return p}var Jn={},dn=null;function pn(p,W){W===void 0&&(W=0),je(),W=Jn[W];for(var V=Array(Math.floor(p.length/3)),E=W[64]||"",O=0,ot=0;O<p.length-2;O+=3){var j=p[O],rt=p[O+1],bt=p[O+2],Rt=W[j>>2];j=W[(j&3)<<4|rt>>4],rt=W[(rt&15)<<2|bt>>6],bt=W[bt&63],V[ot++]=Rt+j+rt+bt}switch(Rt=0,bt=E,p.length-O){case 2:Rt=p[O+1],bt=W[(Rt&15)<<2]||E;case 1:p=p[O],V[ot]=W[p>>2]+W[(p&3)<<4|Rt>>4]+bt+E}return V.join("")}function kn(p){var W=p.length,V=3*W/4;V%3?V=Math.floor(V):"=.".indexOf(p[W-1])!=-1&&(V="=.".indexOf(p[W-2])!=-1?V-2:V-1);var E=new Uint8Array(V),O=0;return Fn(p,function(ot){E[O++]=ot}),E.subarray(0,O)}function Fn(p,W){function V(bt){for(;E<p.length;){var Rt=p.charAt(E++),Ut=dn[Rt];if(Ut!=null)return Ut;if(!/^[\s\xa0]*$/.test(Rt))throw Error("Unknown base64 encoding at char: "+Rt)}return bt}je();for(var E=0;;){var O=V(-1),ot=V(0),j=V(64),rt=V(64);if(rt===64&&O===-1)break;W(O<<2|ot>>4),j!=64&&(W(ot<<4&240|j>>2),rt!=64&&W(j<<6&192|rt))}}function je(){if(!dn){dn={};for(var p="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789".split(""),W=["+/=","+/","-_=","-_.","-_"],V=0;5>V;V++){var E=p.concat(W[V].split(""));Jn[V]=E;for(var O=0;O<E.length;O++){var ot=E[O];dn[ot]===void 0&&(dn[ot]=O)}}}}var Me=typeof Uint8Array.prototype.slice=="function",xn;function Xn(p,W,V){return W===V?xn||(xn=new Uint8Array(0)):Me?p.slice(W,V):new Uint8Array(p.subarray(W,V))}var he=0,Se=0;function Oe(p,W){W=W===void 0?{}:W,W=W.v===void 0?!1:W.v,this.h=null,this.g=this.i=this.j=0,this.l=!1,this.v=W,p&&re(this,p)}function re(p,W){W=W.constructor===Uint8Array?W:W.constructor===ArrayBuffer?new Uint8Array(W):W.constructor===Array?new Uint8Array(W):W.constructor===String?kn(W):W instanceof Uint8Array?new Uint8Array(W.buffer,W.byteOffset,W.byteLength):new Uint8Array(0),p.h=W,p.j=0,p.i=p.h.length,p.g=p.j}Oe.prototype.reset=function(){this.g=this.j};function Ve(p){var W=p.h,V=W[p.g],E=V&127;return 128>V?(p.g+=1,E):(V=W[p.g+1],E|=(V&127)<<7,128>V?(p.g+=2,E):(V=W[p.g+2],E|=(V&127)<<14,128>V?(p.g+=3,E):(V=W[p.g+3],E|=(V&127)<<21,128>V?(p.g+=4,E):(V=W[p.g+4],E|=(V&15)<<28,128>V?(p.g+=5,E>>>0):(p.g+=5,128<=W[p.g++]&&128<=W[p.g++]&&128<=W[p.g++]&&128<=W[p.g++]&&p.g++,E)))))}function ln(p){var W=p.h[p.g],V=p.h[p.g+1],E=p.h[p.g+2],O=p.h[p.g+3];return p.g+=4,V=(W<<0|V<<8|E<<16|O<<24)>>>0,p=2*(V>>31)+1,W=V>>>23&255,V&=8388607,W==255?V?NaN:1/0*p:W==0?p*Math.pow(2,-149)*V:p*Math.pow(2,W-150)*(V+Math.pow(2,23))}var Be=[];function Qt(){this.g=new Uint8Array(64),this.h=0}Qt.prototype.push=function(p){if(!(this.h+1<this.g.length)){var W=this.g;this.g=new Uint8Array(Math.ceil(1+2*this.g.length)),this.g.set(W)}this.g[this.h++]=p},Qt.prototype.length=function(){return this.h},Qt.prototype.end=function(){var p=this.g,W=this.h;return this.h=0,Xn(p,0,W)};function Ze(p,W){for(;127<W;)p.push(W&127|128),W>>>=7;p.push(W)}function Ce(p){var W={},V=W.N===void 0?!1:W.N;this.o={v:W.v===void 0?!1:W.v},this.N=V,W=this.o,Be.length?(V=Be.pop(),W&&(V.v=W.v),p&&re(V,p),p=V):p=new Oe(p,W),this.g=p,this.m=this.g.g,this.h=this.i=this.l=-1,this.j=!1}Ce.prototype.reset=function(){this.g.reset(),this.h=this.l=-1};function Mt(p){var W=p.g;if((W=W.g==W.i)||(W=p.j)||(W=p.g,W=W.l||0>W.g||W.g>W.i),W)return!1;p.m=p.g.g,W=Ve(p.g);var V=W&7;return V!=0&&V!=5&&V!=1&&V!=2&&V!=3&&V!=4?(p.j=!0,!1):(p.i=W,p.l=W>>>3,p.h=V,!0)}function xe(p){switch(p.h){case 0:if(p.h!=0)xe(p);else{for(p=p.g;p.h[p.g]&128;)p.g++;p.g++}break;case 1:p.h!=1?xe(p):(p=p.g,p.g+=8);break;case 2:if(p.h!=2)xe(p);else{var W=Ve(p.g);p=p.g,p.g+=W}break;case 5:p.h!=5?xe(p):(p=p.g,p.g+=4);break;case 3:W=p.l;do{if(!Mt(p)){p.j=!0;break}if(p.h==4){p.l!=W&&(p.j=!0);break}xe(p)}while(1);break;default:p.j=!0}}function jt(p,W,V){var E=p.g.i,O=Ve(p.g);return O=p.g.g+O,p.g.i=O,V(W,p),p.g.g=O,p.g.i=E,W}function ye(p){var W=Ve(p.g);p=p.g;var V=p.g;p.g+=W,p=p.h;var E;if(sn)(E=Te)||(E=Te=new TextDecoder("utf-8",{fatal:!1})),E=E.decode(p.subarray(V,V+W));else{W=V+W;for(var O=[],ot=null,j,rt,bt;V<W;)j=p[V++],128>j?O.push(j):224>j?V>=W?O.push(65533):(rt=p[V++],194>j||(rt&192)!==128?(V--,O.push(65533)):O.push((j&31)<<6|rt&63)):240>j?V>=W-1?O.push(65533):(rt=p[V++],(rt&192)!==128||j===224&&160>rt||j===237&&160<=rt||((E=p[V++])&192)!==128?(V--,O.push(65533)):O.push((j&15)<<12|(rt&63)<<6|E&63)):244>=j?V>=W-2?O.push(65533):(rt=p[V++],(rt&192)!==128||(j<<28)+(rt-144)>>30!==0||((E=p[V++])&192)!==128||((bt=p[V++])&192)!==128?(V--,O.push(65533)):(j=(j&7)<<18|(rt&63)<<12|(E&63)<<6|bt&63,j-=65536,O.push((j>>10&1023)+55296,(j&1023)+56320))):O.push(65533),8192<=O.length&&(ot=Ht(ot,O),O.length=0);E=Ht(ot,O)}return E}function Ye(){this.h=[],this.i=0,this.g=new Qt}function qe(p,W){W.length!==0&&(p.h.push(W),p.i+=W.length)}function Xe(p){var W=p.i+p.g.length();if(W===0)return new Uint8Array(0);W=new Uint8Array(W);for(var V=p.h,E=V.length,O=0,ot=0;ot<E;ot++){var j=V[ot];j.length!==0&&(W.set(j,O),O+=j.length)}return V=p.g,E=V.h,E!==0&&(W.set(V.g.subarray(0,E),O),V.h=0),p.h=[W],W}function Ot(p,W,V){if(V!=null){Ze(p.g,8*W+5),p=p.g;var E=V;E=(V=0>E?1:0)?-E:E,E===0?0<1/E?he=Se=0:(Se=0,he=2147483648):isNaN(E)?(Se=0,he=2147483647):34028234663852886e22<E?(Se=0,he=(V<<31|2139095040)>>>0):11754943508222875e-54>E?(E=Math.round(E/Math.pow(2,-149)),Se=0,he=(V<<31|E)>>>0):(W=Math.floor(Math.log(E)/Math.LN2),E*=Math.pow(2,-W),E=Math.round(8388608*E)&8388607,Se=0,he=(V<<31|W+127<<23|E)>>>0),V=he,p.push(V>>>0&255),p.push(V>>>8&255),p.push(V>>>16&255),p.push(V>>>24&255)}}var Ae=typeof Uint8Array=="function";function Pe(p,W,V){if(p!=null)return typeof p=="object"?Ae&&p instanceof Uint8Array?V(p):Ie(p,W,V):W(p)}function Ie(p,W,V){if(Array.isArray(p)){for(var E=Array(p.length),O=0;O<p.length;O++)E[O]=Pe(p[O],W,V);return Array.isArray(p)&&p.W&&_e(E),E}E={};for(O in p)E[O]=Pe(p[O],W,V);return E}function Wn(p){return typeof p=="number"?isFinite(p)?p:String(p):p}var cn={W:{value:!0,configurable:!0}};function _e(p){return Array.isArray(p)&&!Object.isFrozen(p)&&Object.defineProperties(p,cn),p}var un;function ve(p,W,V){var E=un;un=null,p||(p=E),E=this.constructor.ca,p||(p=E?[E]:[]),this.j=E?0:-1,this.i=null,this.g=p;t:{if(E=this.g.length,p=E-1,E&&(E=this.g[p],E!==null&&typeof E=="object"&&E.constructor===Object)){this.l=p-this.j,this.h=E;break t}W!==void 0&&-1<W?(this.l=Math.max(W,p+1-this.j),this.h=null):this.l=Number.MAX_VALUE}if(V)for(W=0;W<V.length;W++)p=V[W],p<this.l?(p+=this.j,(E=this.g[p])?_e(E):this.g[p]=we):(Ge(this),(E=this.h[p])?_e(E):this.h[p]=we)}var we=Object.freeze(_e([]));function Ge(p){var W=p.l+p.j;p.g[W]||(p.h=p.g[W]={})}function ie(p,W,V){return W===-1?null:(V===void 0?0:V)||W>=p.l?p.h?p.h[W]:void 0:p.g[W+p.j]}function Qe(p){var W=W===void 0?!1:W,V=ie(p,1,W);return V==null&&(V=we),V===we&&(V=_e([]),Pt(p,1,V,W)),V}function qt(p,W,V){return p=ie(p,W),p=p==null?p:+p,p==null?V===void 0?0:V:p}function Pt(p,W,V,E){(E===void 0?0:E)||W>=p.l?(Ge(p),p.h[W]=V):p.g[W+p.j]=V}function hn(p,W){p.i||(p.i={});var V=p.i[1];if(!V){var E=Qe(p);V=[];for(var O=0;O<E.length;O++)V[O]=new W(E[O]);p.i[1]=V}return V}function fe(p,W,V,E){var O=hn(p,V);W=W||new V,p=Qe(p),E!=null?(O.splice(E,0,W),p.splice(E,0,Ct(W))):(O.push(W),p.push(Ct(W)))}ve.prototype.toJSON=function(){var p=Ct(this);return Ie(p,Wn,pn)};function Ct(p,W){if(p.i)for(var V in p.i){var E=p.i[V];if(Array.isArray(E))for(var O=0;O<E.length;O++)E[O]&&Ct(E[O]);else E&&Ct(E)}return p.g}ve.prototype.toString=function(){return Ct(this).toString()};function Vt(p,W){return p=ie(p,W),p==null?0:p}function oe(p,W){return p=ie(p,W),p==null?"":p}function Le(p,W){if(p=p.m){qe(W,W.g.end());for(var V=0;V<p.length;V++)qe(W,p[V])}}function te(p,W){if(W.h==4)return!1;var V=W.m;return xe(W),W.N||(W=Xn(W.g.h,V,W.g.g),(V=p.m)?V.push(W):p.m=[W]),!0}function se(p,W){var V=void 0;return new(V||(V=Promise))(function(E,O){function ot(bt){try{rt(W.next(bt))}catch(Rt){O(Rt)}}function j(bt){try{rt(W.throw(bt))}catch(Rt){O(Rt)}}function rt(bt){bt.done?E(bt.value):new V(function(Rt){Rt(bt.value)}).then(ot,j)}rt((W=W.apply(p,void 0)).next())})}function tt(p){ve.call(this,p)}dt(tt,ve);function it(p,W){for(;Mt(W);)switch(W.i){case 8:var V=Ve(W.g);Pt(p,1,V);break;case 21:V=ln(W.g),Pt(p,2,V);break;case 26:V=ye(W),Pt(p,3,V);break;case 34:V=ye(W),Pt(p,4,V);break;default:if(!te(p,W))return p}return p}function ut(p){ve.call(this,p,-1,_t)}dt(ut,ve),ut.prototype.addClassification=function(p,W){fe(this,p,tt,W)};var _t=[1];function de(p){ve.call(this,p)}dt(de,ve);function ue(p,W){for(;Mt(W);)switch(W.i){case 13:var V=ln(W.g);Pt(p,1,V);break;case 21:V=ln(W.g),Pt(p,2,V);break;case 29:V=ln(W.g),Pt(p,3,V);break;case 37:V=ln(W.g),Pt(p,4,V);break;case 45:V=ln(W.g),Pt(p,5,V);break;default:if(!te(p,W))return p}return p}function St(p){ve.call(this,p,-1,me)}dt(St,ve);var me=[1];function He(p){ve.call(this,p)}dt(He,ve);function tn(p,W,V){if(V=p.createShader(V===0?p.VERTEX_SHADER:p.FRAGMENT_SHADER),p.shaderSource(V,W),p.compileShader(V),!p.getShaderParameter(V,p.COMPILE_STATUS))throw Error(`Could not compile WebGL shader.
|
|
3
3
|
|
|
4
|
-
`+p.getShaderInfoLog(V));return V}function
|
|
4
|
+
`+p.getShaderInfoLog(V));return V}function en(p){return hn(p,tt).map(function(W){return{index:Vt(W,1),Y:qt(W,2),label:ie(W,3)!=null?oe(W,3):void 0,displayName:ie(W,4)!=null?oe(W,4):void 0}})}function fn(p){return{x:qt(p,1),y:qt(p,2),z:qt(p,3),visibility:ie(p,4)!=null?qt(p,4):void 0}}function bn(p,W){this.h=p,this.g=W,this.l=0}function Fe(p,W,V){return nn(p,W),typeof p.g.canvas.transferToImageBitmap=="function"?Promise.resolve(p.g.canvas.transferToImageBitmap()):V?Promise.resolve(p.g.canvas):typeof createImageBitmap=="function"?createImageBitmap(p.g.canvas):(p.i===void 0&&(p.i=document.createElement("canvas")),new Promise(function(E){p.i.height=p.g.canvas.height,p.i.width=p.g.canvas.width,p.i.getContext("2d",{}).drawImage(p.g.canvas,0,0,p.g.canvas.width,p.g.canvas.height),E(p.i)}))}function nn(p,W){var V=p.g;if(p.m===void 0){var E=tn(V,`
|
|
5
5
|
attribute vec2 aVertex;
|
|
6
6
|
attribute vec2 aTex;
|
|
7
7
|
varying vec2 vTex;
|
|
8
8
|
void main(void) {
|
|
9
9
|
gl_Position = vec4(aVertex, 0.0, 1.0);
|
|
10
10
|
vTex = aTex;
|
|
11
|
-
}`,0),
|
|
11
|
+
}`,0),O=tn(V,`
|
|
12
12
|
precision mediump float;
|
|
13
13
|
varying vec2 vTex;
|
|
14
14
|
uniform sampler2D sampler0;
|
|
15
15
|
void main(){
|
|
16
16
|
gl_FragColor = texture2D(sampler0, vTex);
|
|
17
|
-
}`,1),ot=V.createProgram();if(V.attachShader(ot,E),V.attachShader(ot,
|
|
17
|
+
}`,1),ot=V.createProgram();if(V.attachShader(ot,E),V.attachShader(ot,O),V.linkProgram(ot),!V.getProgramParameter(ot,V.LINK_STATUS))throw Error(`Could not compile WebGL program.
|
|
18
18
|
|
|
19
|
-
`+V.getProgramInfoLog(ot));E=p.m=ot,V.useProgram(E),P=V.getUniformLocation(E,"sampler0"),p.j={I:V.getAttribLocation(E,"aVertex"),H:V.getAttribLocation(E,"aTex"),da:P},p.s=V.createBuffer(),V.bindBuffer(V.ARRAY_BUFFER,p.s),V.enableVertexAttribArray(p.j.I),V.vertexAttribPointer(p.j.I,2,V.FLOAT,!1,0,0),V.bufferData(V.ARRAY_BUFFER,new Float32Array([-1,-1,-1,1,1,1,1,-1]),V.STATIC_DRAW),V.bindBuffer(V.ARRAY_BUFFER,null),p.o=V.createBuffer(),V.bindBuffer(V.ARRAY_BUFFER,p.o),V.enableVertexAttribArray(p.j.H),V.vertexAttribPointer(p.j.H,2,V.FLOAT,!1,0,0),V.bufferData(V.ARRAY_BUFFER,new Float32Array([0,1,0,0,1,0,1,1]),V.STATIC_DRAW),V.bindBuffer(V.ARRAY_BUFFER,null),V.uniform1i(P,0)}E=p.j,V.useProgram(p.m),V.canvas.width=W.width,V.canvas.height=W.height,V.viewport(0,0,W.width,W.height),V.activeTexture(V.TEXTURE0),p.h.bindTexture2d(W.glName),V.enableVertexAttribArray(E.I),V.bindBuffer(V.ARRAY_BUFFER,p.s),V.vertexAttribPointer(E.I,2,V.FLOAT,!1,0,0),V.enableVertexAttribArray(E.H),V.bindBuffer(V.ARRAY_BUFFER,p.o),V.vertexAttribPointer(E.H,2,V.FLOAT,!1,0,0),V.bindFramebuffer(V.DRAW_FRAMEBUFFER?V.DRAW_FRAMEBUFFER:V.FRAMEBUFFER,null),V.clearColor(0,0,0,0),V.clear(V.COLOR_BUFFER_BIT),V.colorMask(!0,!0,!0,!0),V.drawArrays(V.TRIANGLE_FAN,0,4),V.disableVertexAttribArray(E.I),V.disableVertexAttribArray(E.H),V.bindBuffer(V.ARRAY_BUFFER,null),p.h.bindTexture2d(0)}function jn(p){this.g=p}var on=new Uint8Array([0,97,115,109,1,0,0,0,1,4,1,96,0,0,3,2,1,0,10,9,1,7,0,65,0,253,15,26,11]);function Je(p,W){return W+p}function Zn(p,W){window[p]=W}function Sn(p){var W=document.createElement("script");return W.setAttribute("src",p),W.setAttribute("crossorigin","anonymous"),new Promise(function(V){W.addEventListener("load",function(){V()},!1),W.addEventListener("error",function(){V()},!1),document.body.appendChild(W)})}function Ke(){return se(this,function p(){return ne(p,function(W){switch(W.g){case 1:return W.m=2,O(W,WebAssembly.instantiate(on),4);case 4:W.g=3,W.m=0;break;case 2:return W.m=0,W.j=null,W.return(!1);case 3:return W.return(!0)}})})}function Un(p){if(this.g=p,this.listeners={},this.j={},this.F={},this.m={},this.s={},this.G=this.o=this.R=!0,this.C=Promise.resolve(),this.P="",this.B={},this.locateFile=p&&p.locateFile||Je,typeof window=="object")var W=window.location.pathname.toString().substring(0,window.location.pathname.toString().lastIndexOf("/"))+"/";else if(typeof location<"u")W=location.pathname.toString().substring(0,location.pathname.toString().lastIndexOf("/"))+"/";else throw Error("solutions can only be loaded on a web page or in a web worker");if(this.S=W,p.options){W=T(Object.keys(p.options));for(var V=W.next();!V.done;V=W.next()){V=V.value;var E=p.options[V].default;E!==void 0&&(this.j[V]=typeof E=="function"?E():E)}}}i=Un.prototype,i.close=function(){return this.i&&this.i.delete(),Promise.resolve()};function sn(p,W){return p.g.files===void 0?[]:typeof p.g.files=="function"?p.g.files(W):p.g.files}function vn(p){return se(p,function W(){var V=this,E,P,ot,j,rt,bt,Rt,Ut,Jt,$t,kt;return ne(W,function(Tt){switch(Tt.g){case 1:return E=V,V.R?(P=sn(V,V.j),O(Tt,Ke(),2)):Tt.return();case 2:if(ot=Tt.h,typeof window=="object")return Zn("createMediapipeSolutionsWasm",{locateFile:V.locateFile}),Zn("createMediapipeSolutionsPackedAssets",{locateFile:V.locateFile}),bt=P.filter(function(Et){return Et.data!==void 0}),Rt=P.filter(function(Et){return Et.data===void 0}),Ut=Promise.all(bt.map(function(Et){var Dt=dn(E,Et.url);if(Et.path!==void 0){var ae=Et.path;Dt=Dt.then(function(pe){return E.overrideFile(ae,pe),Promise.resolve(pe)})}return Dt})),Jt=Promise.all(Rt.map(function(Et){return Et.simd===void 0||Et.simd&&ot||!Et.simd&&!ot?Sn(E.locateFile(Et.url,E.S)):Promise.resolve()})).then(function(){return se(E,function Et(){var Dt,ae,pe=this;return ne(Et,function(ge){if(ge.g==1)return Dt=window.createMediapipeSolutionsWasm,ae=window.createMediapipeSolutionsPackedAssets,O(ge,Dt(ae),2);pe.h=ge.h,ge.g=0})})}),$t=function(){return se(E,function Et(){var Dt=this;return ne(Et,function(ae){return Dt.g.graph&&Dt.g.graph.url?ae=O(ae,dn(Dt,Dt.g.graph.url),0):(ae.g=0,ae=void 0),ae})})}(),O(Tt,Promise.all([Jt,Ut,$t]),7);if(typeof importScripts!="function")throw Error("solutions can only be loaded on a web page or in a web worker");return j=P.filter(function(Et){return Et.simd===void 0||Et.simd&&ot||!Et.simd&&!ot}).map(function(Et){return E.locateFile(Et.url,E.S)}),importScripts.apply(null,J(j)),O(Tt,createMediapipeSolutionsWasm(Module),6);case 6:V.h=Tt.h,V.l=new OffscreenCanvas(1,1),V.h.canvas=V.l,rt=V.h.GL.createContext(V.l,{antialias:!1,alpha:!1,ba:typeof WebGL2RenderingContext<"u"?2:1}),V.h.GL.makeContextCurrent(rt),Tt.g=4;break;case 7:if(V.l=document.createElement("canvas"),kt=V.l.getContext("webgl2",{}),!kt&&(kt=V.l.getContext("webgl",{}),!kt))return alert("Failed to create WebGL canvas context when passing video frame."),Tt.return();V.D=kt,V.h.canvas=V.l,V.h.createContext(V.l,!0,!0,{});case 4:V.i=new V.h.SolutionWasm,V.R=!1,Tt.g=0}})})}function Tn(p){return se(p,function W(){var V=this,E,P,ot,j,rt,bt,Rt,Ut;return ne(W,function(Jt){if(Jt.g==1){if(V.g.graph&&V.g.graph.url&&V.P===V.g.graph.url)return Jt.return();if(V.o=!0,!V.g.graph||!V.g.graph.url){Jt.g=2;return}return V.P=V.g.graph.url,O(Jt,dn(V,V.g.graph.url),3)}for(Jt.g!=2&&(E=Jt.h,V.i.loadGraph(E)),P=T(Object.keys(V.B)),ot=P.next();!ot.done;ot=P.next())j=ot.value,V.i.overrideFile(j,V.B[j]);if(V.B={},V.g.listeners)for(rt=T(V.g.listeners),bt=rt.next();!bt.done;bt=rt.next())Rt=bt.value,Qn(V,Rt);Ut=V.j,V.j={},V.setOptions(Ut),Jt.g=0})})}i.reset=function(){return se(this,function p(){var W=this;return ne(p,function(V){W.i&&(W.i.reset(),W.m={},W.s={}),V.g=0})})},i.setOptions=function(p,W){var V=this;if(W=W||this.g.options){for(var E=[],P=[],ot={},j=T(Object.keys(p)),rt=j.next();!rt.done;ot={K:ot.K,L:ot.L},rt=j.next()){var bt=rt.value;bt in this.j&&this.j[bt]===p[bt]||(this.j[bt]=p[bt],rt=W[bt],rt!==void 0&&(rt.onChange&&(ot.K=rt.onChange,ot.L=p[bt],E.push(function(Rt){return function(){return se(V,function Ut(){var Jt,$t=this;return ne(Ut,function(kt){if(kt.g==1)return O(kt,Rt.K(Rt.L),2);Jt=kt.h,Jt===!0&&($t.o=!0),kt.g=0})})}}(ot))),rt.graphOptionXref&&(bt={valueNumber:rt.type===1?p[bt]:0,valueBoolean:rt.type===0?p[bt]:!1,valueString:rt.type===2?p[bt]:""},rt=Object.assign(Object.assign(Object.assign({},{calculatorName:"",calculatorIndex:0}),rt.graphOptionXref),bt),P.push(rt))))}(E.length!==0||P.length!==0)&&(this.o=!0,this.A=(this.A===void 0?[]:this.A).concat(P),this.u=(this.u===void 0?[]:this.u).concat(E))}};function Mn(p){return se(p,function W(){var V=this,E,P,ot,j,rt,bt,Rt;return ne(W,function(Ut){switch(Ut.g){case 1:if(!V.o)return Ut.return();if(!V.u){Ut.g=2;break}E=T(V.u),P=E.next();case 3:if(P.done){Ut.g=5;break}return ot=P.value,O(Ut,ot(),4);case 4:P=E.next(),Ut.g=3;break;case 5:V.u=void 0;case 2:if(V.A){for(j=new V.h.GraphOptionChangeRequestList,rt=T(V.A),bt=rt.next();!bt.done;bt=rt.next())Rt=bt.value,j.push_back(Rt);V.i.changeOptions(j),j.delete(),V.A=void 0}V.o=!1,Ut.g=0}})})}i.initialize=function(){return se(this,function p(){var W=this;return ne(p,function(V){return V.g==1?O(V,vn(W),2):V.g!=3?O(V,Tn(W),3):O(V,Mn(W),0)})})};function dn(p,W){return se(p,function V(){var E=this,P,ot;return ne(V,function(j){return W in E.F?j.return(E.F[W]):(P=E.locateFile(W,""),ot=fetch(P).then(function(rt){return rt.arrayBuffer()}),E.F[W]=ot,j.return(ot))})})}i.overrideFile=function(p,W){this.i?this.i.overrideFile(p,W):this.B[p]=W},i.clearOverriddenFiles=function(){this.B={},this.i&&this.i.clearOverriddenFiles()},i.send=function(p,W){return se(this,function V(){var E=this,P,ot,j,rt,bt,Rt,Ut,Jt,$t;return ne(V,function(kt){switch(kt.g){case 1:return E.g.inputs?(P=1e3*(W==null?performance.now():W),O(kt,E.C,2)):kt.return();case 2:return O(kt,E.initialize(),3);case 3:for(ot=new E.h.PacketDataList,j=T(Object.keys(p)),rt=j.next();!rt.done;rt=j.next())if(bt=rt.value,Rt=E.g.inputs[bt]){t:{var Tt=E,Et=p[bt];switch(Rt.type){case"video":var Dt=Tt.m[Rt.stream];if(Dt||(Dt=new yn(Tt.h,Tt.D),Tt.m[Rt.stream]=Dt),Tt=Dt,Tt.l===0&&(Tt.l=Tt.h.createTexture()),typeof HTMLVideoElement<"u"&&Et instanceof HTMLVideoElement){var ae=Et.videoWidth;Dt=Et.videoHeight}else typeof HTMLImageElement<"u"&&Et instanceof HTMLImageElement?(ae=Et.naturalWidth,Dt=Et.naturalHeight):(ae=Et.width,Dt=Et.height);Dt={glName:Tt.l,width:ae,height:Dt},ae=Tt.g,ae.canvas.width=Dt.width,ae.canvas.height=Dt.height,ae.activeTexture(ae.TEXTURE0),Tt.h.bindTexture2d(Tt.l),ae.texImage2D(ae.TEXTURE_2D,0,ae.RGBA,ae.RGBA,ae.UNSIGNED_BYTE,Et),Tt.h.bindTexture2d(0),Tt=Dt;break t;case"detections":for(Dt=Tt.m[Rt.stream],Dt||(Dt=new jn(Tt.h),Tt.m[Rt.stream]=Dt),Tt=Dt,Tt.data||(Tt.data=new Tt.g.DetectionListData),Tt.data.reset(Et.length),Dt=0;Dt<Et.length;++Dt){ae=Et[Dt];var pe=Tt.data,ge=pe.setBoundingBox,ke=Dt,h=ae.T,y=new Ce;Ot(y,1,h.Z),Ot(y,2,h.$),Ot(y,3,h.height),Ot(y,4,h.width),Ot(y,5,h.rotation),Ot(y,6,h.X);var G=h=new Ye;Pt(G,1,ie(y,1)),Pt(G,2,ie(y,2)),Pt(G,3,ie(y,3)),Pt(G,4,ie(y,4)),Pt(G,5,ie(y,5));var C=ie(y,6);if(C!=null&&C!=null){Ze(G.g,48);var K=G.g,_=C;C=0>_,_=Math.abs(_);var M=_>>>0;for(_=Math.floor((_-M)/4294967296),_>>>=0,C&&(_=~_>>>0,M=(~M>>>0)+1,4294967295<M&&(M=0,_++,4294967295<_&&(_=0))),he=M,Se=_,C=he,M=Se;0<M||127<C;)K.push(C&127|128),C=(C>>>7|M<<25)>>>0,M>>>=7;K.push(C)}if(Le(y,G),h=Xe(h),ge.call(pe,ke,h),ae.O)for(pe=0;pe<ae.O.length;++pe)y=ae.O[pe],G=!!y.visibility,ge=Tt.data,ke=ge.addNormalizedLandmark,h=Dt,y=Object.assign(Object.assign({},y),{visibility:G?y.visibility:0}),G=new de,Ot(G,1,y.x),Ot(G,2,y.y),Ot(G,3,y.z),y.visibility&&Ot(G,4,y.visibility),K=y=new Ye,Pt(K,1,ie(G,1)),Pt(K,2,ie(G,2)),Pt(K,3,ie(G,3)),Pt(K,4,ie(G,4)),Pt(K,5,ie(G,5)),Le(G,K),y=Xe(y),ke.call(ge,h,y);if(ae.M)for(pe=0;pe<ae.M.length;++pe){if(ge=Tt.data,ke=ge.addClassification,h=Dt,y=ae.M[pe],G=new tt,Ot(G,2,y.Y),y.index&&Ot(G,1,y.index),y.label&&Ot(G,3,y.label),y.displayName&&Ot(G,4,y.displayName),K=y=new Ye,M=ie(G,1),M!=null&&M!=null)if(Ze(K.g,8),C=K.g,0<=M)Ze(C,M);else{for(_=0;9>_;_++)C.push(M&127|128),M>>=7;C.push(1)}Pt(K,2,ie(G,2)),C=ie(G,3),C!=null&&(C=In(C),Ze(K.g,26),Ze(K.g,C.length),tn(K,K.g.end()),tn(K,C)),C=ie(G,4),C!=null&&(C=In(C),Ze(K.g,34),Ze(K.g,C.length),tn(K,K.g.end()),tn(K,C)),Le(G,K),y=Xe(y),ke.call(ge,h,y)}}Tt=Tt.data;break t;default:Tt={}}}switch(Ut=Tt,Jt=Rt.stream,Rt.type){case"video":ot.pushTexture2d(Object.assign(Object.assign({},Ut),{stream:Jt,timestamp:P}));break;case"detections":$t=Ut,$t.stream=Jt,$t.timestamp=P,ot.pushDetectionList($t);break;default:throw Error("Unknown input config type: '"+Rt.type+"'")}}return E.i.send(ot),O(kt,E.C,4);case 4:ot.delete(),kt.g=0}})})};function Yn(p,W,V){return se(p,function E(){var P,ot,j,rt,bt,Rt,Ut=this,Jt,$t,kt,Tt,Et,Dt,ae,pe;return ne(E,function(ge){switch(ge.g){case 1:if(!V)return ge.return(W);for(P={},ot=0,j=T(Object.keys(V)),rt=j.next();!rt.done;rt=j.next())bt=rt.value,Rt=V[bt],typeof Rt!="string"&&Rt.type==="texture"&&W[Rt.stream]!==void 0&&++ot;1<ot&&(Ut.G=!1),Jt=T(Object.keys(V)),rt=Jt.next();case 2:if(rt.done){ge.g=4;break}if($t=rt.value,kt=V[$t],typeof kt=="string")return ae=P,pe=$t,O(ge,_n(Ut,$t,W[kt]),14);if(Tt=W[kt.stream],kt.type==="detection_list"){if(Tt){for(var ke=Tt.getRectList(),h=Tt.getLandmarksList(),y=Tt.getClassificationsList(),G=[],C=0;C<ke.size();++C){var K=ke.get(C);t:{var _=new Ce;for(K=new Fe(K);Mt(K);)switch(K.i){case 13:var M=cn(K.g);Ot(_,1,M);break;case 21:M=cn(K.g),Ot(_,2,M);break;case 29:M=cn(K.g),Ot(_,3,M);break;case 37:M=cn(K.g),Ot(_,4,M);break;case 45:M=cn(K.g),Ot(_,5,M);break;case 48:for(var q=K.g,ct=128,s=0,X=M=0;4>X&&128<=ct;X++)ct=q.h[q.g++],s|=(ct&127)<<7*X;if(128<=ct&&(ct=q.h[q.g++],s|=(ct&127)<<28,M|=(ct&127)>>4),128<=ct)for(X=0;5>X&&128<=ct;X++)ct=q.h[q.g++],M|=(ct&127)<<7*X+3;128>ct?(q=s>>>0,ct=M>>>0,(M=ct&2147483648)&&(q=~q+1>>>0,ct=~ct>>>0,q==0&&(ct=ct+1>>>0)),q=4294967296*ct+(q>>>0),M=M?-q:q):(q.l=!0,M=void 0),Ot(_,6,M);break;default:if(!te(_,K))break t}}_={Z:qt(_,1),$:qt(_,2),height:qt(_,3),width:qt(_,4),rotation:qt(_,5,0),X:Vt(_,6)},M=h.get(C);t:for(K=new St,M=new Fe(M);Mt(M);)switch(M.i){case 10:q=jt(M,new de,ue),fe(K,q,de,void 0);break;default:if(!te(K,M))break t}K=fn(K,de).map(mn),q=y.get(C);t:for(M=new ut,q=new Fe(q);Mt(q);)switch(q.i){case 10:M.addClassification(jt(q,new tt,it));break;default:if(!te(M,q))break t}_={T:_,O:K,M:nn(M)},G.push(_)}ke=G}else ke=[];P[$t]=ke,ge.g=7;break}if(kt.type==="proto_list"){if(Tt){for(ke=Array(Tt.size()),h=0;h<Tt.size();h++)ke[h]=Tt.get(h);Tt.delete()}else ke=[];P[$t]=ke,ge.g=7;break}if(Tt===void 0){ge.g=3;break}if(kt.type==="float_list"){P[$t]=Tt,ge.g=7;break}if(kt.type==="proto"){P[$t]=Tt,ge.g=7;break}if(kt.type!=="texture")throw Error("Unknown output config type: '"+kt.type+"'");return Et=Ut.s[$t],Et||(Et=new yn(Ut.h,Ut.D),Ut.s[$t]=Et),O(ge,He(Et,Tt,Ut.G),13);case 13:Dt=ge.h,P[$t]=Dt;case 7:kt.transform&&P[$t]&&(P[$t]=kt.transform(P[$t])),ge.g=3;break;case 14:ae[pe]=ge.h;case 3:rt=Jt.next(),ge.g=2;break;case 4:return ge.return(P)}})})}function _n(p,W,V){return se(p,function E(){var P=this,ot;return ne(E,function(j){return typeof V=="number"||V instanceof Uint8Array||V instanceof P.h.Uint8BlobList?j.return(V):V instanceof P.h.Texture2dDataOut?(ot=P.s[W],ot||(ot=new yn(P.h,P.D),P.s[W]=ot),j.return(He(ot,V,P.G))):j.return(void 0)})})}function Qn(p,W){for(var V=W.name||"$",E=[].concat(J(W.wants)),P=new p.h.StringList,ot=T(W.wants),j=ot.next();!j.done;j=ot.next())P.push_back(j.value);ot=p.h.PacketListener.implement({onResults:function(rt){for(var bt={},Rt=0;Rt<W.wants.length;++Rt)bt[E[Rt]]=rt.get(Rt);var Ut=p.listeners[V];Ut&&(p.C=Yn(p,bt,W.outs).then(function(Jt){Jt=Ut(Jt);for(var $t=0;$t<W.wants.length;++$t){var kt=bt[E[$t]];typeof kt=="object"&&kt.hasOwnProperty&&kt.hasOwnProperty("delete")&&kt.delete()}Jt&&(p.C=Jt)}))}}),p.i.attachMultiListener(P,ot),P.delete()}i.onResults=function(p,W){this.listeners[W||"$"]=p},Re("Solution",Un),Re("OptionType",{BOOL:0,NUMBER:1,aa:2,0:"BOOL",1:"NUMBER",2:"STRING"});function wn(p){switch(p===void 0&&(p=0),p){case 1:return"selfie_segmentation_landscape.tflite";default:return"selfie_segmentation.tflite"}}function Cn(p){var W=this;p=p||{},this.g=new Un({locateFile:p.locateFile,files:function(V){return[{simd:!0,url:"selfie_segmentation_solution_simd_wasm_bin.js"},{simd:!1,url:"selfie_segmentation_solution_wasm_bin.js"},{data:!0,url:wn(V.modelSelection)}]},graph:{url:"selfie_segmentation.binarypb"},listeners:[{wants:["segmentation_mask","image_transformed"],outs:{image:{type:"texture",stream:"image_transformed"},segmentationMask:{type:"texture",stream:"segmentation_mask"}}}],inputs:{image:{type:"video",stream:"input_frames_gpu"}},options:{useCpuInference:{type:0,graphOptionXref:{calculatorType:"InferenceCalculator",fieldName:"use_cpu_inference"},default:"iPad Simulator;iPhone Simulator;iPod Simulator;iPad;iPhone;iPod".split(";").includes(navigator.platform)||navigator.userAgent.includes("Mac")&&"ontouchend"in document},selfieMode:{type:0,graphOptionXref:{calculatorType:"GlScalerCalculator",calculatorIndex:1,fieldName:"flip_horizontal"}},modelSelection:{type:1,graphOptionXref:{calculatorType:"ConstantSidePacketCalculator",calculatorName:"ConstantSidePacketCalculatorModelSelection",fieldName:"int_value"},onChange:function(V){return se(W,function E(){var P,ot,j=this,rt;return ne(E,function(bt){return bt.g==1?(P=wn(V),ot="third_party/mediapipe/modules/selfie_segmentation/"+P,O(bt,dn(j.g,P),2)):(rt=bt.h,j.g.overrideFile(ot,rt),bt.return(!0))})})}}}})}i=Cn.prototype,i.close=function(){return this.g.close(),Promise.resolve()},i.onResults=function(p){this.g.onResults(p)},i.initialize=function(){return se(this,function p(){var W=this;return ne(p,function(V){return O(V,W.g.initialize(),0)})})},i.reset=function(){this.g.reset()},i.send=function(p){return se(this,function W(){var V=this;return ne(W,function(E){return O(E,V.g.send(p),0)})})},i.setOptions=function(p){this.g.setOptions(p)},Re("SelfieSegmentation",Cn),Re("VERSION","0.1.1632777926")}).call(Gi);const Xi={};(function(){var i;function n(l){var v=0;return function(){return v<l.length?{done:!1,value:l[v++]}:{done:!0}}}var r=typeof Object.defineProperties=="function"?Object.defineProperty:function(l,v,I){return l==Array.prototype||l==Object.prototype||(l[v]=I.value),l};function f(l){l=[typeof globalThis=="object"&&globalThis,l,typeof window=="object"&&window,typeof self=="object"&&self,typeof global=="object"&&global];for(var v=0;v<l.length;++v){var I=l[v];if(I&&I.Math==Math)return I}throw Error("Cannot find global object")}var Z=f(this);function x(l,v){if(v)t:{var I=Z;l=l.split(".");for(var Y=0;Y<l.length-1;Y++){var N=l[Y];if(!(N in I))break t;I=I[N]}l=l[l.length-1],Y=I[l],v=v(Y),v!=Y&&v!=null&&r(I,l,{configurable:!0,writable:!0,value:v})}}x("Symbol",function(l){function v(o){if(this instanceof v)throw new TypeError("Symbol is not a constructor");return new I(Y+(o||"")+"_"+N++,o)}function I(o,d){this.g=o,r(this,"description",{configurable:!0,writable:!0,value:d})}if(l)return l;I.prototype.toString=function(){return this.g};var Y="jscomp_symbol_"+(1e9*Math.random()>>>0)+"_",N=0;return v}),x("Symbol.iterator",function(l){if(l)return l;l=Symbol("Symbol.iterator");for(var v="Array Int8Array Uint8Array Uint8ClampedArray Int16Array Uint16Array Int32Array Uint32Array Float32Array Float64Array".split(" "),I=0;I<v.length;I++){var Y=Z[v[I]];typeof Y=="function"&&typeof Y.prototype[l]!="function"&&r(Y.prototype,l,{configurable:!0,writable:!0,value:function(){return H(n(this))}})}return l});function H(l){return l={next:l},l[Symbol.iterator]=function(){return this},l}function T(l){var v=typeof Symbol<"u"&&Symbol.iterator&&l[Symbol.iterator];return v?v.call(l):{next:n(l)}}function J(l){if(!(l instanceof Array)){l=T(l);for(var v,I=[];!(v=l.next()).done;)I.push(v.value);l=I}return l}var et=typeof Object.create=="function"?Object.create:function(l){function v(){}return v.prototype=l,new v},lt;if(typeof Object.setPrototypeOf=="function")lt=Object.setPrototypeOf;else{var pt;t:{var Yt={a:!0},Lt={};try{Lt.__proto__=Yt,pt=Lt.a;break t}catch{}pt=!1}lt=pt?function(l,v){if(l.__proto__=v,l.__proto__!==v)throw new TypeError(l+" is not extensible");return l}:null}var at=lt;function dt(l,v){if(l.prototype=et(v.prototype),l.prototype.constructor=l,at)at(l,v);else for(var I in v)if(I!="prototype")if(Object.defineProperties){var Y=Object.getOwnPropertyDescriptor(v,I);Y&&Object.defineProperty(l,I,Y)}else l[I]=v[I];l.ra=v.prototype}function Bt(){this.l=!1,this.i=null,this.h=void 0,this.g=1,this.u=this.o=0,this.j=null}function Nt(l){if(l.l)throw new TypeError("Generator is already running");l.l=!0}Bt.prototype.s=function(l){this.h=l};function ee(l,v){l.j={fa:v,ga:!0},l.g=l.o||l.u}Bt.prototype.return=function(l){this.j={return:l},this.g=this.u};function O(l,v,I){return l.g=I,{value:v}}function $e(l){this.g=new Bt,this.h=l}function je(l,v){Nt(l.g);var I=l.g.i;return I?We(l,"return"in I?I.return:function(Y){return{value:Y,done:!0}},v,l.g.return):(l.g.return(v),zt(l))}function We(l,v,I,Y){try{var N=v.call(l.g.i,I);if(!(N instanceof Object))throw new TypeError("Iterator result "+N+" is not an object");if(!N.done)return l.g.l=!1,N;var o=N.value}catch(d){return l.g.i=null,ee(l.g,d),zt(l)}return l.g.i=null,Y.call(l.g,o),zt(l)}function zt(l){for(;l.g.g;)try{var v=l.h(l.g);if(v)return l.g.l=!1,{value:v.value,done:!1}}catch(I){l.g.h=void 0,ee(l.g,I)}if(l.g.l=!1,l.g.j){if(v=l.g.j,l.g.j=null,v.ga)throw v.fa;return{value:v.return,done:!0}}return{value:void 0,done:!0}}function Jn(l){this.next=function(v){return Nt(l.g),l.g.i?v=We(l,l.g.i.next,v,l.g.s):(l.g.s(v),v=zt(l)),v},this.throw=function(v){return Nt(l.g),l.g.i?v=We(l,l.g.i.throw,v,l.g.s):(ee(l.g,v),v=zt(l)),v},this.return=function(v){return je(l,v)},this[Symbol.iterator]=function(){return this}}function ne(l){function v(Y){return l.next(Y)}function I(Y){return l.throw(Y)}return new Promise(function(Y,N){function o(d){d.done?Y(d.value):Promise.resolve(d.value).then(v,I).then(o,N)}o(l.next())})}function Zt(l){return ne(new Jn(new $e(l)))}x("Promise",function(l){function v(d){this.h=0,this.i=void 0,this.g=[],this.s=!1;var g=this.j();try{d(g.resolve,g.reject)}catch(e){g.reject(e)}}function I(){this.g=null}function Y(d){return d instanceof v?d:new v(function(g){g(d)})}if(l)return l;I.prototype.h=function(d){if(this.g==null){this.g=[];var g=this;this.i(function(){g.l()})}this.g.push(d)};var N=Z.setTimeout;I.prototype.i=function(d){N(d,0)},I.prototype.l=function(){for(;this.g&&this.g.length;){var d=this.g;this.g=[];for(var g=0;g<d.length;++g){var e=d[g];d[g]=null;try{e()}catch(u){this.j(u)}}}this.g=null},I.prototype.j=function(d){this.i(function(){throw d})},v.prototype.j=function(){function d(u){return function(m){e||(e=!0,u.call(g,m))}}var g=this,e=!1;return{resolve:d(this.D),reject:d(this.l)}},v.prototype.D=function(d){if(d===this)this.l(new TypeError("A Promise cannot resolve to itself"));else if(d instanceof v)this.H(d);else{t:switch(typeof d){case"object":var g=d!=null;break t;case"function":g=!0;break t;default:g=!1}g?this.A(d):this.o(d)}},v.prototype.A=function(d){var g=void 0;try{g=d.then}catch(e){this.l(e);return}typeof g=="function"?this.I(g,d):this.o(d)},v.prototype.l=function(d){this.u(2,d)},v.prototype.o=function(d){this.u(1,d)},v.prototype.u=function(d,g){if(this.h!=0)throw Error("Cannot settle("+d+", "+g+"): Promise already settled in state"+this.h);this.h=d,this.i=g,this.h===2&&this.G(),this.B()},v.prototype.G=function(){var d=this;N(function(){if(d.C()){var g=Z.console;typeof g<"u"&&g.error(d.i)}},1)},v.prototype.C=function(){if(this.s)return!1;var d=Z.CustomEvent,g=Z.Event,e=Z.dispatchEvent;return typeof e>"u"?!0:(typeof d=="function"?d=new d("unhandledrejection",{cancelable:!0}):typeof g=="function"?d=new g("unhandledrejection",{cancelable:!0}):(d=Z.document.createEvent("CustomEvent"),d.initCustomEvent("unhandledrejection",!1,!0,d)),d.promise=this,d.reason=this.i,e(d))},v.prototype.B=function(){if(this.g!=null){for(var d=0;d<this.g.length;++d)o.h(this.g[d]);this.g=null}};var o=new I;return v.prototype.H=function(d){var g=this.j();d.M(g.resolve,g.reject)},v.prototype.I=function(d,g){var e=this.j();try{d.call(g,e.resolve,e.reject)}catch(u){e.reject(u)}},v.prototype.then=function(d,g){function e(c,a){return typeof c=="function"?function(b){try{u(c(b))}catch(S){m(S)}}:a}var u,m,t=new v(function(c,a){u=c,m=a});return this.M(e(d,u),e(g,m)),t},v.prototype.catch=function(d){return this.then(void 0,d)},v.prototype.M=function(d,g){function e(){switch(u.h){case 1:d(u.i);break;case 2:g(u.i);break;default:throw Error("Unexpected state: "+u.h)}}var u=this;this.g==null?o.h(e):this.g.push(e),this.s=!0},v.resolve=Y,v.reject=function(d){return new v(function(g,e){e(d)})},v.race=function(d){return new v(function(g,e){for(var u=T(d),m=u.next();!m.done;m=u.next())Y(m.value).M(g,e)})},v.all=function(d){var g=T(d),e=g.next();return e.done?Y([]):new v(function(u,m){function t(b){return function(S){c[b]=S,a--,a==0&&u(c)}}var c=[],a=0;do c.push(void 0),a++,Y(e.value).M(t(c.length-1),m),e=g.next();while(!e.done)})},v});function qe(l,v){l instanceof String&&(l+="");var I=0,Y=!1,N={next:function(){if(!Y&&I<l.length){var o=I++;return{value:v(o,l[o]),done:!1}}return Y=!0,{done:!0,value:void 0}}};return N[Symbol.iterator]=function(){return N},N}var zn=typeof Object.assign=="function"?Object.assign:function(l,v){for(var I=1;I<arguments.length;I++){var Y=arguments[I];if(Y)for(var N in Y)Object.prototype.hasOwnProperty.call(Y,N)&&(l[N]=Y[N])}return l};x("Object.assign",function(l){return l||zn}),x("Object.is",function(l){return l||function(v,I){return v===I?v!==0||1/v===1/I:v!==v&&I!==I}}),x("Array.prototype.includes",function(l){return l||function(v,I){var Y=this;Y instanceof String&&(Y=String(Y));var N=Y.length;for(I=I||0,0>I&&(I=Math.max(I+N,0));I<N;I++){var o=Y[I];if(o===v||Object.is(o,v))return!0}return!1}}),x("String.prototype.includes",function(l){return l||function(v,I){if(this==null)throw new TypeError("The 'this' value for String.prototype.includes must not be null or undefined");if(v instanceof RegExp)throw new TypeError("First argument to String.prototype.includes must not be a regular expression");return this.indexOf(v,I||0)!==-1}}),x("Array.prototype.keys",function(l){return l||function(){return qe(this,function(v){return v})}});var Re=this||self;function Ct(l,v){l=l.split(".");var I=Re;l[0]in I||typeof I.execScript>"u"||I.execScript("var "+l[0]);for(var Y;l.length&&(Y=l.shift());)l.length||v===void 0?I[Y]&&I[Y]!==Object.prototype[Y]?I=I[Y]:I=I[Y]={}:I[Y]=v}function Te(){throw Error("Invalid UTF8")}function ln(l,v){return v=String.fromCharCode.apply(null,v),l==null?v:l+v}var Xn,Hn=typeof TextDecoder<"u",In,kn=typeof TextEncoder<"u",hn={},bn=null;function En(l){var v;v===void 0&&(v=0),Ae(),v=hn[v];for(var I=Array(Math.floor(l.length/3)),Y=v[64]||"",N=0,o=0;N<l.length-2;N+=3){var d=l[N],g=l[N+1],e=l[N+2],u=v[d>>2];d=v[(d&3)<<4|g>>4],g=v[(g&15)<<2|e>>6],e=v[e&63],I[o++]=u+d+g+e}switch(u=0,e=Y,l.length-N){case 2:u=l[N+1],e=v[(u&15)<<2]||Y;case 1:l=l[N],I[o]=v[l>>2]+v[(l&3)<<4|u>>4]+e+Y}return I.join("")}function Fn(l){var v=l.length,I=3*v/4;I%3?I=Math.floor(I):"=.".indexOf(l[v-1])!=-1&&(I="=.".indexOf(l[v-2])!=-1?I-2:I-1);var Y=new Uint8Array(I),N=0;return Pe(l,function(o){Y[N++]=o}),N!==I?Y.subarray(0,N):Y}function Pe(l,v){function I(e){for(;Y<l.length;){var u=l.charAt(Y++),m=bn[u];if(m!=null)return m;if(!/^[\s\xa0]*$/.test(u))throw Error("Unknown base64 encoding at char: "+u)}return e}Ae();for(var Y=0;;){var N=I(-1),o=I(0),d=I(64),g=I(64);if(g===64&&N===-1)break;v(N<<2|o>>4),d!=64&&(v(o<<4&240|d>>2),g!=64&&v(d<<6&192|g))}}function Ae(){if(!bn){bn={};for(var l="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789".split(""),v=["+/=","+/","-_=","-_.","-_"],I=0;5>I;I++){var Y=l.concat(v[I].split(""));hn[I]=Y;for(var N=0;N<Y.length;N++){var o=Y[N];bn[o]===void 0&&(bn[o]=N)}}}}var xn=typeof Uint8Array=="function";function Wn(l){return xn&&l!=null&&l instanceof Uint8Array}var he;function Se(l){if(this.L=l,l!==null&&l.length===0)throw Error("ByteString should be constructed with non-empty values")}var Oe=typeof Uint8Array.prototype.slice=="function",re=0,Ve=0;function cn(l,v){if(l.constructor===Uint8Array)return l;if(l.constructor===ArrayBuffer)return new Uint8Array(l);if(l.constructor===Array)return new Uint8Array(l);if(l.constructor===String)return Fn(l);if(l.constructor===Se)return!v&&(v=l.L)&&v.constructor===Uint8Array?v:(v=l.L,v=v==null||Wn(v)?v:typeof v=="string"?Fn(v):null,(l=l.L=v)?new Uint8Array(l):he||(he=new Uint8Array(0)));if(l instanceof Uint8Array)return new Uint8Array(l.buffer,l.byteOffset,l.byteLength);throw Error("Type not convertible to a Uint8Array, expected a Uint8Array, an ArrayBuffer, a base64 encoded string, or Array of numbers")}function Be(l,v){return Error("Invalid wire type: "+l+" (at position "+v+")")}function Qt(){return Error("Failed to read varint, encoding is invalid.")}function Ze(l,v){v=v===void 0?{}:v,v=v.v===void 0?!1:v.v,this.h=null,this.g=this.i=this.j=0,this.v=v,l&&Fe(this,l)}function Fe(l,v){l.h=cn(v,l.v),l.j=0,l.i=l.h.length,l.g=l.j}Ze.prototype.reset=function(){this.g=this.j};function Mt(l){if(l.g>l.i)throw Error("Tried to read past the end of the data "+l.g+" > "+l.i)}function Ie(l){var v=l.h,I=v[l.g],Y=I&127;if(128>I)return l.g+=1,Mt(l),Y;if(I=v[l.g+1],Y|=(I&127)<<7,128>I)return l.g+=2,Mt(l),Y;if(I=v[l.g+2],Y|=(I&127)<<14,128>I)return l.g+=3,Mt(l),Y;if(I=v[l.g+3],Y|=(I&127)<<21,128>I)return l.g+=4,Mt(l),Y;if(I=v[l.g+4],l.g+=5,Y|=(I&15)<<28,128>I)return Mt(l),Y;if(128<=v[l.g++]&&128<=v[l.g++]&&128<=v[l.g++]&&128<=v[l.g++]&&128<=v[l.g++])throw Qt();return Mt(l),Y}var jt=[];function ye(){this.g=[]}ye.prototype.length=function(){return this.g.length},ye.prototype.end=function(){var l=this.g;return this.g=[],l};function Ye(l,v){for(;127<v;)l.g.push(v&127|128),v>>>=7;l.g.push(v)}function tn(l){var v={},I=v.W===void 0?!1:v.W;this.l={v:v.v===void 0?!1:v.v},this.W=I,v=this.l,jt.length?(I=jt.pop(),v&&(I.v=v.v),l&&Fe(I,l),l=I):l=new Ze(l,v),this.g=l,this.j=this.g.g,this.h=this.i=-1}tn.prototype.reset=function(){this.g.reset(),this.j=this.g.g,this.h=this.i=-1};function Xe(l){var v=l.g;if(v.g==v.i)return!1;l.j=l.g.g;var I=Ie(l.g)>>>0;if(v=I>>>3,I&=7,!(0<=I&&5>=I))throw Be(I,l.j);if(1>v)throw Error("Invalid field number: "+v+" (at position "+l.j+")");return l.i=v,l.h=I,!0}function Pt(l){switch(l.h){case 0:if(l.h!=0)Pt(l);else t:{l=l.g;for(var v=l.g,I=v+10;v<I;)if((l.h[v++]&128)===0){l.g=v,Mt(l);break t}throw Qt()}break;case 1:l=l.g,l.g+=8,Mt(l);break;case 2:l.h!=2?Pt(l):(v=Ie(l.g)>>>0,l=l.g,l.g+=v,Mt(l));break;case 5:l=l.g,l.g+=4,Mt(l);break;case 3:v=l.i;do{if(!Xe(l))throw Error("Unmatched start-group tag: stream EOF");if(l.h==4){if(l.i!=v)throw Error("Unmatched end-group tag");break}Pt(l)}while(1);break;default:throw Be(l.h,l.j)}}var ze=[];function _e(){this.i=[],this.h=0,this.g=new ye}function xe(l,v){v.length!==0&&(l.i.push(v),l.h+=v.length)}function Vn(l,v){if(v=v.ca){xe(l,l.g.end());for(var I=0;I<v.length;I++)xe(l,v[I])}}var un=typeof Symbol=="function"&&typeof Symbol()=="symbol"?Symbol(void 0):void 0;function Qe(l,v){Object.isFrozen(l)||(un?l[un]|=v:l.N!==void 0?l.N|=v:Object.defineProperties(l,{N:{value:v,configurable:!0,writable:!0,enumerable:!1}}))}function an(l){var v;return un?v=l[un]:v=l.N,v==null?0:v}function ve(l){return Qe(l,1),l}function we(l){return Array.isArray(l)?!!(an(l)&2):!1}function Ge(l){if(!Array.isArray(l))throw Error("cannot mark non-array as immutable");Qe(l,2)}function ie(l){return l!==null&&typeof l=="object"&&!Array.isArray(l)&&l.constructor===Object}var De=Object.freeze(ve([]));function qt(l){if(we(l.m))throw Error("Cannot mutate an immutable Message")}var Ot=typeof Symbol<"u"&&typeof Symbol.hasInstance<"u";function fn(l){return{value:l,configurable:!1,writable:!1,enumerable:!1}}function fe(l,v,I){return v===-1?null:v>=l.i?l.g?l.g[v]:void 0:(I===void 0?0:I)&&l.g&&(I=l.g[v],I!=null)?I:l.m[v+l.h]}function Ft(l,v,I,Y){Y=Y===void 0?!1:Y,qt(l),v<l.i&&!Y?l.m[v+l.h]=I:(l.g||(l.g=l.m[l.i+l.h]={}))[v]=I}function Vt(l,v,I,Y){I=I===void 0?!0:I,Y=Y===void 0?!1:Y;var N=fe(l,v,Y);return N==null&&(N=De),we(l.m)?I&&(Ge(N),Object.freeze(N)):(N===De||we(N))&&(N=ve(N.slice()),Ft(l,v,N,Y)),N}function oe(l,v,I){return l=fe(l,v),l=l==null?l:+l,l==null?I===void 0?0:I:l}function Le(l,v,I,Y){l.j||(l.j={});var N=we(l.m),o=l.j[I];if(!o){Y=Vt(l,I,!0,Y===void 0?!1:Y),o=[],N=N||we(Y);for(var d=0;d<Y.length;d++)o[d]=new v(Y[d]),N&&Ge(o[d].m);N&&(Ge(o),Object.freeze(o)),l.j[I]=o}return o}function te(l,v,I,Y,N){var o=o===void 0?!1:o;return qt(l),o=Le(l,I,v,o),I=Y||new I,l=Vt(l,v),N!=null?(o.splice(N,0,I),l.splice(N,0,I.m)):(o.push(I),l.push(I.m)),I}function se(l,v){return l=fe(l,v),l==null?0:l}function tt(l,v){return l=fe(l,v),l==null?"":l}function it(l){switch(typeof l){case"number":return isFinite(l)?l:String(l);case"object":if(l&&!Array.isArray(l)){if(Wn(l))return En(l);if(l instanceof Se){var v=l.L;return v=v==null||typeof v=="string"?v:xn&&v instanceof Uint8Array?En(v):null,(l.L=v)||""}}}return l}function ut(l){var v=ue;return v=v===void 0?St:v,de(l,v)}function _t(l,v){if(l!=null){if(Array.isArray(l))l=de(l,v);else if(ie(l)){var I={},Y;for(Y in l)I[Y]=_t(l[Y],v);l=I}else l=v(l);return l}}function de(l,v){for(var I=l.slice(),Y=0;Y<I.length;Y++)I[Y]=_t(I[Y],v);return Array.isArray(l)&&an(l)&1&&ve(I),I}function ue(l){return l&&typeof l=="object"&&l.toJSON?l.toJSON():(l=it(l),Array.isArray(l)?ut(l):l)}function St(l){return Wn(l)?new Uint8Array(l):l}function me(l,v,I){l||(l=Ce),Ce=null;var Y=this.constructor.h;l||(l=Y?[Y]:[]),this.h=(Y?0:-1)-(this.constructor.g||0),this.j=void 0,this.m=l;t:{if(Y=this.m.length,l=Y-1,Y&&(Y=this.m[l],ie(Y))){this.i=l-this.h,this.g=Y;break t}v!==void 0&&-1<v?(this.i=Math.max(v,l+1-this.h),this.g=void 0):this.i=Number.MAX_VALUE}if(I)for(v=0;v<I.length;v++)if(l=I[v],l<this.i)l+=this.h,(Y=this.m[l])?Array.isArray(Y)&&ve(Y):this.m[l]=De;else{Y=this.g||(this.g=this.m[this.i+this.h]={});var N=Y[l];N?Array.isArray(N)&&ve(N):Y[l]=De}}me.prototype.toJSON=function(){return ut(this.m)},me.prototype.toString=function(){return this.m.toString()};var Ce;function en(){me.apply(this,arguments)}if(dt(en,me),Ot){var nn={};Object.defineProperties(en,(nn[Symbol.hasInstance]=fn(function(){throw Error("Cannot perform instanceof checks for MutableMessage")}),nn))}function mn(l,v,I){if(I){var Y={},N;for(N in I){var o=I[N],d=o.ja;d||(Y.F=o.pa||o.ha.P,o.ba?(Y.U=Sn(o.ba),d=function(g){return function(e,u,m){return g.F(e,u,m,g.U)}}(Y)):o.da?(Y.T=Ke(o.X.g,o.da),d=function(g){return function(e,u,m){return g.F(e,u,m,g.T)}}(Y)):d=Y.F,o.ja=d),d(v,l,o.X),Y={F:Y.F,U:Y.U,T:Y.T}}}Vn(v,l)}var yn=Symbol();function He(l,v,I){return l[yn]||(l[yn]=function(Y,N){return v(Y,N,I)})}function rn(l){var v=l[yn];if(!v){var I=p(l);v=function(Y,N){return W(Y,N,I)},l[yn]=v}return v}function jn(l){var v=l.ba;if(v)return rn(v);if(v=l.oa)return He(l.X.g,v,l.da)}function on(l){var v=jn(l),I=l.X,Y=l.ha.O;return v?function(N,o){return Y(N,o,I,v)}:function(N,o){return Y(N,o,I)}}function Je(l,v,I,Y,N,o){l=l();var d=0;for(l.length&&typeof l[0]!="number"&&(I(v,l[0]),d++);d<l.length;){I=l[d++];for(var g=d+1;g<l.length&&typeof l[g]!="number";)g++;var e=l[d++];switch(g-=d,g){case 0:Y(v,I,e);break;case 1:Y(v,I,e,l[d++]);break;case 2:N(v,I,e,l[d++],l[d++]);break;case 3:g=l[d++];var u=l[d++],m=l[d++];Array.isArray(m)?N(v,I,e,g,u,m):o(v,I,e,g,u,m);break;case 4:o(v,I,e,l[d++],l[d++],l[d++],l[d++]);break;default:throw Error("unexpected number of binary field arguments: "+g)}}return v}var Zn=Symbol();function Sn(l){var v=l[Zn];if(!v){var I=dn(l);v=function(Y,N){return E(Y,N,I)},l[Zn]=v}return v}function Ke(l,v){var I=l[Zn];return I||(I=function(Y,N){return mn(Y,N,v)},l[Zn]=I),I}var Un=Symbol();function sn(l,v){l.push(v)}function vn(l,v,I){l.push(v,I.P)}function Tn(l,v,I,Y,N){var o=Sn(N),d=I.P;l.push(v,function(g,e,u){return d(g,e,u,Y,o)})}function Mn(l,v,I,Y,N,o){var d=Ke(Y,o),g=I.P;l.push(v,function(e,u,m){return g(e,u,m,Y,d)})}function dn(l){var v=l[Un];return v||Je(l,l[Un]=[],sn,vn,Tn,Mn)}var Yn=Symbol();function _n(l,v){l[0]=v}function Qn(l,v,I,Y){var N=I.O;l[v]=Y?function(o,d,g){return N(o,d,g,Y)}:N}function wn(l,v,I,Y,N,o){var d=I.O,g=rn(N);l[v]=function(e,u,m){return d(e,u,m,Y,g,o)}}function Cn(l,v,I,Y,N,o,d){var g=I.O,e=He(Y,N,o);l[v]=function(u,m,t){return g(u,m,t,Y,e,d)}}function p(l){var v=l[Yn];return v||Je(l,l[Yn]={},_n,Qn,wn,Cn)}function W(l,v,I){for(;Xe(v)&&v.h!=4;){var Y=v.i,N=I[Y];if(!N){var o=I[0];o&&(o=o[Y])&&(N=I[Y]=on(o))}if((!N||!N(v,l,Y))&&(N=v,Y=l,o=N.j,Pt(N),!N.W)){var d=N.g.h;N=N.g.g,N=o===N?he||(he=new Uint8Array(0)):Oe?d.slice(o,N):new Uint8Array(d.subarray(o,N)),(o=Y.ca)?o.push(N):Y.ca=[N]}}return l}function V(l,v,I){if(ze.length){var Y=ze.pop();l&&(Fe(Y.g,l),Y.i=-1,Y.h=-1),l=Y}else l=new tn(l);try{return W(new v,l,p(I))}finally{v=l.g,v.h=null,v.j=0,v.i=0,v.g=0,v.v=!1,l.i=-1,l.h=-1,100>ze.length&&ze.push(l)}}function E(l,v,I){for(var Y=I.length,N=Y%2==1,o=N?1:0;o<Y;o+=2)(0,I[o+1])(v,l,I[o]);mn(l,v,N?I[0]:void 0)}function P(l,v){var I=new _e;E(l,I,dn(v)),xe(I,I.g.end()),l=new Uint8Array(I.h),v=I.i;for(var Y=v.length,N=0,o=0;o<Y;o++){var d=v[o];l.set(d,N),N+=d.length}return I.i=[l],l}function ot(l,v){return{O:l,P:v}}var j=ot(function(l,v,I){if(l.h!==5)return!1;l=l.g;var Y=l.h[l.g],N=l.h[l.g+1],o=l.h[l.g+2],d=l.h[l.g+3];return l.g+=4,Mt(l),N=(Y<<0|N<<8|o<<16|d<<24)>>>0,l=2*(N>>31)+1,Y=N>>>23&255,N&=8388607,Ft(v,I,Y==255?N?NaN:1/0*l:Y==0?l*Math.pow(2,-149)*N:l*Math.pow(2,Y-150)*(N+Math.pow(2,23))),!0},function(l,v,I){if(v=fe(v,I),v!=null){Ye(l.g,8*I+5),l=l.g;var Y=v;Y=(I=0>Y?1:0)?-Y:Y,Y===0?0<1/Y?re=Ve=0:(Ve=0,re=2147483648):isNaN(Y)?(Ve=0,re=2147483647):34028234663852886e22<Y?(Ve=0,re=(I<<31|2139095040)>>>0):11754943508222875e-54>Y?(Y=Math.round(Y/Math.pow(2,-149)),Ve=0,re=(I<<31|Y)>>>0):(v=Math.floor(Math.log(Y)/Math.LN2),Y*=Math.pow(2,-v),Y=Math.round(8388608*Y),16777216<=Y&&++v,Ve=0,re=(I<<31|v+127<<23|Y&8388607)>>>0),I=re,l.g.push(I>>>0&255),l.g.push(I>>>8&255),l.g.push(I>>>16&255),l.g.push(I>>>24&255)}}),rt=ot(function(l,v,I){if(l.h!==0)return!1;for(var Y=l.g,N=128,o=0,d=l=0;4>d&&128<=N;d++)N=Y.h[Y.g++],Mt(Y),o|=(N&127)<<7*d;if(128<=N&&(N=Y.h[Y.g++],Mt(Y),o|=(N&127)<<28,l|=(N&127)>>4),128<=N)for(d=0;5>d&&128<=N;d++)N=Y.h[Y.g++],Mt(Y),l|=(N&127)<<7*d+3;if(128>N)Y=o>>>0,N=l>>>0,(l=N&2147483648)&&(Y=~Y+1>>>0,N=~N>>>0,Y==0&&(N=N+1>>>0)),Y=4294967296*N+(Y>>>0);else throw Qt();return Ft(v,I,l?-Y:Y),!0},function(l,v,I){if(v=fe(v,I),v!=null&&v!=null){Ye(l.g,8*I),l=l.g;var Y=v;for(I=0>Y,Y=Math.abs(Y),v=Y>>>0,Y=Math.floor((Y-v)/4294967296),Y>>>=0,I&&(Y=~Y>>>0,v=(~v>>>0)+1,4294967295<v&&(v=0,Y++,4294967295<Y&&(Y=0))),re=v,Ve=Y,I=re,v=Ve;0<v||127<I;)l.g.push(I&127|128),I=(I>>>7|v<<25)>>>0,v>>>=7;l.g.push(I)}}),bt=ot(function(l,v,I){return l.h!==0?!1:(Ft(v,I,Ie(l.g)),!0)},function(l,v,I){if(v=fe(v,I),v!=null&&v!=null)if(Ye(l.g,8*I),l=l.g,I=v,0<=I)Ye(l,I);else{for(v=0;9>v;v++)l.g.push(I&127|128),I>>=7;l.g.push(1)}}),Rt=ot(function(l,v,I){if(l.h!==2)return!1;var Y=Ie(l.g)>>>0;l=l.g;var N=l.g;l.g+=Y,Mt(l),l=l.h;var o;if(Hn)(o=Xn)||(o=Xn=new TextDecoder("utf-8",{fatal:!0})),o=o.decode(l.subarray(N,N+Y));else{Y=N+Y;for(var d=[],g=null,e,u,m;N<Y;)e=l[N++],128>e?d.push(e):224>e?N>=Y?Te():(u=l[N++],194>e||(u&192)!==128?(N--,Te()):d.push((e&31)<<6|u&63)):240>e?N>=Y-1?Te():(u=l[N++],(u&192)!==128||e===224&&160>u||e===237&&160<=u||((o=l[N++])&192)!==128?(N--,Te()):d.push((e&15)<<12|(u&63)<<6|o&63)):244>=e?N>=Y-2?Te():(u=l[N++],(u&192)!==128||(e<<28)+(u-144)>>30!==0||((o=l[N++])&192)!==128||((m=l[N++])&192)!==128?(N--,Te()):(e=(e&7)<<18|(u&63)<<12|(o&63)<<6|m&63,e-=65536,d.push((e>>10&1023)+55296,(e&1023)+56320))):Te(),8192<=d.length&&(g=ln(g,d),d.length=0);o=ln(g,d)}return Ft(v,I,o),!0},function(l,v,I){if(v=fe(v,I),v!=null){var Y=!1;if(Y=Y===void 0?!1:Y,kn){if(Y&&/(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])/.test(v))throw Error("Found an unpaired surrogate");v=(In||(In=new TextEncoder)).encode(v)}else{for(var N=0,o=new Uint8Array(3*v.length),d=0;d<v.length;d++){var g=v.charCodeAt(d);if(128>g)o[N++]=g;else{if(2048>g)o[N++]=g>>6|192;else{if(55296<=g&&57343>=g){if(56319>=g&&d<v.length){var e=v.charCodeAt(++d);if(56320<=e&&57343>=e){g=1024*(g-55296)+e-56320+65536,o[N++]=g>>18|240,o[N++]=g>>12&63|128,o[N++]=g>>6&63|128,o[N++]=g&63|128;continue}else d--}if(Y)throw Error("Found an unpaired surrogate");g=65533}o[N++]=g>>12|224,o[N++]=g>>6&63|128}o[N++]=g&63|128}}v=o.subarray(0,N)}Ye(l.g,8*I+2),Ye(l.g,v.length),xe(l,l.g.end()),xe(l,v)}}),Ut=ot(function(l,v,I,Y,N){if(l.h!==2)return!1;v=te(v,I,Y),I=l.g.i,Y=Ie(l.g)>>>0;var o=l.g.g+Y,d=o-I;if(0>=d&&(l.g.i=o,N(v,l),d=o-l.g.g),d)throw Error("Message parsing ended unexpectedly. Expected to read "+(Y+" bytes, instead read "+(Y-d)+" bytes, either the data ended unexpectedly or the message misreported its own length"));return l.g.g=o,l.g.i=I,!0},function(l,v,I,Y,N){if(v=Le(v,Y,I),v!=null)for(Y=0;Y<v.length;Y++){var o=l;Ye(o.g,8*I+2);var d=o.g.end();xe(o,d),d.push(o.h),o=d,N(v[Y],l),d=l;var g=o.pop();for(g=d.h+d.g.length()-g;127<g;)o.push(g&127|128),g>>>=7,d.h++;o.push(g),d.h++}});function Jt(){en.apply(this,arguments)}if(dt(Jt,en),Ot){var $t={};Object.defineProperties(Jt,($t[Symbol.hasInstance]=fn(Object[Symbol.hasInstance]),$t))}function kt(l){Jt.call(this,l)}dt(kt,Jt);function Tt(){return[1,bt,2,j,3,Rt,4,Rt]}function Et(l){Jt.call(this,l,-1,ae)}dt(Et,Jt),Et.prototype.addClassification=function(l,v){return te(this,1,kt,l,v),this};function Dt(){return[1,Ut,kt,Tt]}var ae=[1];function pe(l){Jt.call(this,l)}dt(pe,Jt);function ge(){return[1,j,2,j,3,j,4,j,5,j]}function ke(l){Jt.call(this,l,-1,y)}dt(ke,Jt);function h(){return[1,Ut,pe,ge]}var y=[1];function G(l){Jt.call(this,l)}dt(G,Jt);function C(){return[1,j,2,j,3,j,4,j,5,j,6,rt]}function K(l,v,I){if(I=l.createShader(I===0?l.VERTEX_SHADER:l.FRAGMENT_SHADER),l.shaderSource(I,v),l.compileShader(I),!l.getShaderParameter(I,l.COMPILE_STATUS))throw Error(`Could not compile WebGL shader.
|
|
19
|
+
`+V.getProgramInfoLog(ot));E=p.m=ot,V.useProgram(E),O=V.getUniformLocation(E,"sampler0"),p.j={I:V.getAttribLocation(E,"aVertex"),H:V.getAttribLocation(E,"aTex"),da:O},p.s=V.createBuffer(),V.bindBuffer(V.ARRAY_BUFFER,p.s),V.enableVertexAttribArray(p.j.I),V.vertexAttribPointer(p.j.I,2,V.FLOAT,!1,0,0),V.bufferData(V.ARRAY_BUFFER,new Float32Array([-1,-1,-1,1,1,1,1,-1]),V.STATIC_DRAW),V.bindBuffer(V.ARRAY_BUFFER,null),p.o=V.createBuffer(),V.bindBuffer(V.ARRAY_BUFFER,p.o),V.enableVertexAttribArray(p.j.H),V.vertexAttribPointer(p.j.H,2,V.FLOAT,!1,0,0),V.bufferData(V.ARRAY_BUFFER,new Float32Array([0,1,0,0,1,0,1,1]),V.STATIC_DRAW),V.bindBuffer(V.ARRAY_BUFFER,null),V.uniform1i(O,0)}E=p.j,V.useProgram(p.m),V.canvas.width=W.width,V.canvas.height=W.height,V.viewport(0,0,W.width,W.height),V.activeTexture(V.TEXTURE0),p.h.bindTexture2d(W.glName),V.enableVertexAttribArray(E.I),V.bindBuffer(V.ARRAY_BUFFER,p.s),V.vertexAttribPointer(E.I,2,V.FLOAT,!1,0,0),V.enableVertexAttribArray(E.H),V.bindBuffer(V.ARRAY_BUFFER,p.o),V.vertexAttribPointer(E.H,2,V.FLOAT,!1,0,0),V.bindFramebuffer(V.DRAW_FRAMEBUFFER?V.DRAW_FRAMEBUFFER:V.FRAMEBUFFER,null),V.clearColor(0,0,0,0),V.clear(V.COLOR_BUFFER_BIT),V.colorMask(!0,!0,!0,!0),V.drawArrays(V.TRIANGLE_FAN,0,4),V.disableVertexAttribArray(E.I),V.disableVertexAttribArray(E.H),V.bindBuffer(V.ARRAY_BUFFER,null),p.h.bindTexture2d(0)}function zn(p){this.g=p}var rn=new Uint8Array([0,97,115,109,1,0,0,0,1,4,1,96,0,0,3,2,1,0,10,9,1,7,0,65,0,253,15,26,11]);function Je(p,W){return W+p}function gn(p,W){window[p]=W}function In(p){var W=document.createElement("script");return W.setAttribute("src",p),W.setAttribute("crossorigin","anonymous"),new Promise(function(V){W.addEventListener("load",function(){V()},!1),W.addEventListener("error",function(){V()},!1),document.body.appendChild(W)})}function Ke(){return se(this,function p(){return ne(p,function(W){switch(W.g){case 1:return W.m=2,P(W,WebAssembly.instantiate(rn),4);case 4:W.g=3,W.m=0;break;case 2:return W.m=0,W.j=null,W.return(!1);case 3:return W.return(!0)}})})}function En(p){if(this.g=p,this.listeners={},this.j={},this.F={},this.m={},this.s={},this.G=this.o=this.R=!0,this.C=Promise.resolve(),this.P="",this.B={},this.locateFile=p&&p.locateFile||Je,typeof window=="object")var W=window.location.pathname.toString().substring(0,window.location.pathname.toString().lastIndexOf("/"))+"/";else if(typeof location<"u")W=location.pathname.toString().substring(0,location.pathname.toString().lastIndexOf("/"))+"/";else throw Error("solutions can only be loaded on a web page or in a web worker");if(this.S=W,p.options){W=T(Object.keys(p.options));for(var V=W.next();!V.done;V=W.next()){V=V.value;var E=p.options[V].default;E!==void 0&&(this.j[V]=typeof E=="function"?E():E)}}}i=En.prototype,i.close=function(){return this.i&&this.i.delete(),Promise.resolve()};function on(p,W){return p.g.files===void 0?[]:typeof p.g.files=="function"?p.g.files(W):p.g.files}function Zn(p){return se(p,function W(){var V=this,E,O,ot,j,rt,bt,Rt,Ut,Jt,$t,Nt;return ne(W,function(Tt){switch(Tt.g){case 1:return E=V,V.R?(O=on(V,V.j),P(Tt,Ke(),2)):Tt.return();case 2:if(ot=Tt.h,typeof window=="object")return gn("createMediapipeSolutionsWasm",{locateFile:V.locateFile}),gn("createMediapipeSolutionsPackedAssets",{locateFile:V.locateFile}),bt=O.filter(function(Et){return Et.data!==void 0}),Rt=O.filter(function(Et){return Et.data===void 0}),Ut=Promise.all(bt.map(function(Et){var Dt=an(E,Et.url);if(Et.path!==void 0){var ae=Et.path;Dt=Dt.then(function(pe){return E.overrideFile(ae,pe),Promise.resolve(pe)})}return Dt})),Jt=Promise.all(Rt.map(function(Et){return Et.simd===void 0||Et.simd&&ot||!Et.simd&&!ot?In(E.locateFile(Et.url,E.S)):Promise.resolve()})).then(function(){return se(E,function Et(){var Dt,ae,pe=this;return ne(Et,function(ge){if(ge.g==1)return Dt=window.createMediapipeSolutionsWasm,ae=window.createMediapipeSolutionsPackedAssets,P(ge,Dt(ae),2);pe.h=ge.h,ge.g=0})})}),$t=function(){return se(E,function Et(){var Dt=this;return ne(Et,function(ae){return Dt.g.graph&&Dt.g.graph.url?ae=P(ae,an(Dt,Dt.g.graph.url),0):(ae.g=0,ae=void 0),ae})})}(),P(Tt,Promise.all([Jt,Ut,$t]),7);if(typeof importScripts!="function")throw Error("solutions can only be loaded on a web page or in a web worker");return j=O.filter(function(Et){return Et.simd===void 0||Et.simd&&ot||!Et.simd&&!ot}).map(function(Et){return E.locateFile(Et.url,E.S)}),importScripts.apply(null,J(j)),P(Tt,createMediapipeSolutionsWasm(Module),6);case 6:V.h=Tt.h,V.l=new OffscreenCanvas(1,1),V.h.canvas=V.l,rt=V.h.GL.createContext(V.l,{antialias:!1,alpha:!1,ba:typeof WebGL2RenderingContext<"u"?2:1}),V.h.GL.makeContextCurrent(rt),Tt.g=4;break;case 7:if(V.l=document.createElement("canvas"),Nt=V.l.getContext("webgl2",{}),!Nt&&(Nt=V.l.getContext("webgl",{}),!Nt))return alert("Failed to create WebGL canvas context when passing video frame."),Tt.return();V.D=Nt,V.h.canvas=V.l,V.h.createContext(V.l,!0,!0,{});case 4:V.i=new V.h.SolutionWasm,V.R=!1,Tt.g=0}})})}function Sn(p){return se(p,function W(){var V=this,E,O,ot,j,rt,bt,Rt,Ut;return ne(W,function(Jt){if(Jt.g==1){if(V.g.graph&&V.g.graph.url&&V.P===V.g.graph.url)return Jt.return();if(V.o=!0,!V.g.graph||!V.g.graph.url){Jt.g=2;return}return V.P=V.g.graph.url,P(Jt,an(V,V.g.graph.url),3)}for(Jt.g!=2&&(E=Jt.h,V.i.loadGraph(E)),O=T(Object.keys(V.B)),ot=O.next();!ot.done;ot=O.next())j=ot.value,V.i.overrideFile(j,V.B[j]);if(V.B={},V.g.listeners)for(rt=T(V.g.listeners),bt=rt.next();!bt.done;bt=rt.next())Rt=bt.value,Qn(V,Rt);Ut=V.j,V.j={},V.setOptions(Ut),Jt.g=0})})}i.reset=function(){return se(this,function p(){var W=this;return ne(p,function(V){W.i&&(W.i.reset(),W.m={},W.s={}),V.g=0})})},i.setOptions=function(p,W){var V=this;if(W=W||this.g.options){for(var E=[],O=[],ot={},j=T(Object.keys(p)),rt=j.next();!rt.done;ot={K:ot.K,L:ot.L},rt=j.next()){var bt=rt.value;bt in this.j&&this.j[bt]===p[bt]||(this.j[bt]=p[bt],rt=W[bt],rt!==void 0&&(rt.onChange&&(ot.K=rt.onChange,ot.L=p[bt],E.push(function(Rt){return function(){return se(V,function Ut(){var Jt,$t=this;return ne(Ut,function(Nt){if(Nt.g==1)return P(Nt,Rt.K(Rt.L),2);Jt=Nt.h,Jt===!0&&($t.o=!0),Nt.g=0})})}}(ot))),rt.graphOptionXref&&(bt={valueNumber:rt.type===1?p[bt]:0,valueBoolean:rt.type===0?p[bt]:!1,valueString:rt.type===2?p[bt]:""},rt=Object.assign(Object.assign(Object.assign({},{calculatorName:"",calculatorIndex:0}),rt.graphOptionXref),bt),O.push(rt))))}(E.length!==0||O.length!==0)&&(this.o=!0,this.A=(this.A===void 0?[]:this.A).concat(O),this.u=(this.u===void 0?[]:this.u).concat(E))}};function Kn(p){return se(p,function W(){var V=this,E,O,ot,j,rt,bt,Rt;return ne(W,function(Ut){switch(Ut.g){case 1:if(!V.o)return Ut.return();if(!V.u){Ut.g=2;break}E=T(V.u),O=E.next();case 3:if(O.done){Ut.g=5;break}return ot=O.value,P(Ut,ot(),4);case 4:O=E.next(),Ut.g=3;break;case 5:V.u=void 0;case 2:if(V.A){for(j=new V.h.GraphOptionChangeRequestList,rt=T(V.A),bt=rt.next();!bt.done;bt=rt.next())Rt=bt.value,j.push_back(Rt);V.i.changeOptions(j),j.delete(),V.A=void 0}V.o=!1,Ut.g=0}})})}i.initialize=function(){return se(this,function p(){var W=this;return ne(p,function(V){return V.g==1?P(V,Zn(W),2):V.g!=3?P(V,Sn(W),3):P(V,Kn(W),0)})})};function an(p,W){return se(p,function V(){var E=this,O,ot;return ne(V,function(j){return W in E.F?j.return(E.F[W]):(O=E.locateFile(W,""),ot=fetch(O).then(function(rt){return rt.arrayBuffer()}),E.F[W]=ot,j.return(ot))})})}i.overrideFile=function(p,W){this.i?this.i.overrideFile(p,W):this.B[p]=W},i.clearOverriddenFiles=function(){this.B={},this.i&&this.i.clearOverriddenFiles()},i.send=function(p,W){return se(this,function V(){var E=this,O,ot,j,rt,bt,Rt,Ut,Jt,$t;return ne(V,function(Nt){switch(Nt.g){case 1:return E.g.inputs?(O=1e3*(W==null?performance.now():W),P(Nt,E.C,2)):Nt.return();case 2:return P(Nt,E.initialize(),3);case 3:for(ot=new E.h.PacketDataList,j=T(Object.keys(p)),rt=j.next();!rt.done;rt=j.next())if(bt=rt.value,Rt=E.g.inputs[bt]){t:{var Tt=E,Et=p[bt];switch(Rt.type){case"video":var Dt=Tt.m[Rt.stream];if(Dt||(Dt=new bn(Tt.h,Tt.D),Tt.m[Rt.stream]=Dt),Tt=Dt,Tt.l===0&&(Tt.l=Tt.h.createTexture()),typeof HTMLVideoElement<"u"&&Et instanceof HTMLVideoElement){var ae=Et.videoWidth;Dt=Et.videoHeight}else typeof HTMLImageElement<"u"&&Et instanceof HTMLImageElement?(ae=Et.naturalWidth,Dt=Et.naturalHeight):(ae=Et.width,Dt=Et.height);Dt={glName:Tt.l,width:ae,height:Dt},ae=Tt.g,ae.canvas.width=Dt.width,ae.canvas.height=Dt.height,ae.activeTexture(ae.TEXTURE0),Tt.h.bindTexture2d(Tt.l),ae.texImage2D(ae.TEXTURE_2D,0,ae.RGBA,ae.RGBA,ae.UNSIGNED_BYTE,Et),Tt.h.bindTexture2d(0),Tt=Dt;break t;case"detections":for(Dt=Tt.m[Rt.stream],Dt||(Dt=new zn(Tt.h),Tt.m[Rt.stream]=Dt),Tt=Dt,Tt.data||(Tt.data=new Tt.g.DetectionListData),Tt.data.reset(Et.length),Dt=0;Dt<Et.length;++Dt){ae=Et[Dt];var pe=Tt.data,ge=pe.setBoundingBox,Ne=Dt,h=ae.T,y=new He;Pt(y,1,h.Z),Pt(y,2,h.$),Pt(y,3,h.height),Pt(y,4,h.width),Pt(y,5,h.rotation),Pt(y,6,h.X);var G=h=new Ye;Ot(G,1,ie(y,1)),Ot(G,2,ie(y,2)),Ot(G,3,ie(y,3)),Ot(G,4,ie(y,4)),Ot(G,5,ie(y,5));var H=ie(y,6);if(H!=null&&H!=null){Ze(G.g,48);var K=G.g,_=H;H=0>_,_=Math.abs(_);var M=_>>>0;for(_=Math.floor((_-M)/4294967296),_>>>=0,H&&(_=~_>>>0,M=(~M>>>0)+1,4294967295<M&&(M=0,_++,4294967295<_&&(_=0))),he=M,Se=_,H=he,M=Se;0<M||127<H;)K.push(H&127|128),H=(H>>>7|M<<25)>>>0,M>>>=7;K.push(H)}if(Le(y,G),h=Xe(h),ge.call(pe,Ne,h),ae.O)for(pe=0;pe<ae.O.length;++pe)y=ae.O[pe],G=!!y.visibility,ge=Tt.data,Ne=ge.addNormalizedLandmark,h=Dt,y=Object.assign(Object.assign({},y),{visibility:G?y.visibility:0}),G=new de,Pt(G,1,y.x),Pt(G,2,y.y),Pt(G,3,y.z),y.visibility&&Pt(G,4,y.visibility),K=y=new Ye,Ot(K,1,ie(G,1)),Ot(K,2,ie(G,2)),Ot(K,3,ie(G,3)),Ot(K,4,ie(G,4)),Ot(K,5,ie(G,5)),Le(G,K),y=Xe(y),Ne.call(ge,h,y);if(ae.M)for(pe=0;pe<ae.M.length;++pe){if(ge=Tt.data,Ne=ge.addClassification,h=Dt,y=ae.M[pe],G=new tt,Pt(G,2,y.Y),y.index&&Pt(G,1,y.index),y.label&&Pt(G,3,y.label),y.displayName&&Pt(G,4,y.displayName),K=y=new Ye,M=ie(G,1),M!=null&&M!=null)if(Ze(K.g,8),H=K.g,0<=M)Ze(H,M);else{for(_=0;9>_;_++)H.push(M&127|128),M>>=7;H.push(1)}Ot(K,2,ie(G,2)),H=ie(G,3),H!=null&&(H=Rn(H),Ze(K.g,26),Ze(K.g,H.length),qe(K,K.g.end()),qe(K,H)),H=ie(G,4),H!=null&&(H=Rn(H),Ze(K.g,34),Ze(K.g,H.length),qe(K,K.g.end()),qe(K,H)),Le(G,K),y=Xe(y),Ne.call(ge,h,y)}}Tt=Tt.data;break t;default:Tt={}}}switch(Ut=Tt,Jt=Rt.stream,Rt.type){case"video":ot.pushTexture2d(Object.assign(Object.assign({},Ut),{stream:Jt,timestamp:O}));break;case"detections":$t=Ut,$t.stream=Jt,$t.timestamp=O,ot.pushDetectionList($t);break;default:throw Error("Unknown input config type: '"+Rt.type+"'")}}return E.i.send(ot),P(Nt,E.C,4);case 4:ot.delete(),Nt.g=0}})})};function Tn(p,W,V){return se(p,function E(){var O,ot,j,rt,bt,Rt,Ut=this,Jt,$t,Nt,Tt,Et,Dt,ae,pe;return ne(E,function(ge){switch(ge.g){case 1:if(!V)return ge.return(W);for(O={},ot=0,j=T(Object.keys(V)),rt=j.next();!rt.done;rt=j.next())bt=rt.value,Rt=V[bt],typeof Rt!="string"&&Rt.type==="texture"&&W[Rt.stream]!==void 0&&++ot;1<ot&&(Ut.G=!1),Jt=T(Object.keys(V)),rt=Jt.next();case 2:if(rt.done){ge.g=4;break}if($t=rt.value,Nt=V[$t],typeof Nt=="string")return ae=O,pe=$t,P(ge,_n(Ut,$t,W[Nt]),14);if(Tt=W[Nt.stream],Nt.type==="detection_list"){if(Tt){for(var Ne=Tt.getRectList(),h=Tt.getLandmarksList(),y=Tt.getClassificationsList(),G=[],H=0;H<Ne.size();++H){var K=Ne.get(H);t:{var _=new He;for(K=new Ce(K);Mt(K);)switch(K.i){case 13:var M=ln(K.g);Pt(_,1,M);break;case 21:M=ln(K.g),Pt(_,2,M);break;case 29:M=ln(K.g),Pt(_,3,M);break;case 37:M=ln(K.g),Pt(_,4,M);break;case 45:M=ln(K.g),Pt(_,5,M);break;case 48:for(var q=K.g,ct=128,s=0,X=M=0;4>X&&128<=ct;X++)ct=q.h[q.g++],s|=(ct&127)<<7*X;if(128<=ct&&(ct=q.h[q.g++],s|=(ct&127)<<28,M|=(ct&127)>>4),128<=ct)for(X=0;5>X&&128<=ct;X++)ct=q.h[q.g++],M|=(ct&127)<<7*X+3;128>ct?(q=s>>>0,ct=M>>>0,(M=ct&2147483648)&&(q=~q+1>>>0,ct=~ct>>>0,q==0&&(ct=ct+1>>>0)),q=4294967296*ct+(q>>>0),M=M?-q:q):(q.l=!0,M=void 0),Pt(_,6,M);break;default:if(!te(_,K))break t}}_={Z:qt(_,1),$:qt(_,2),height:qt(_,3),width:qt(_,4),rotation:qt(_,5,0),X:Vt(_,6)},M=h.get(H);t:for(K=new St,M=new Ce(M);Mt(M);)switch(M.i){case 10:q=jt(M,new de,ue),fe(K,q,de,void 0);break;default:if(!te(K,M))break t}K=hn(K,de).map(fn),q=y.get(H);t:for(M=new ut,q=new Ce(q);Mt(q);)switch(q.i){case 10:M.addClassification(jt(q,new tt,it));break;default:if(!te(M,q))break t}_={T:_,O:K,M:en(M)},G.push(_)}Ne=G}else Ne=[];O[$t]=Ne,ge.g=7;break}if(Nt.type==="proto_list"){if(Tt){for(Ne=Array(Tt.size()),h=0;h<Tt.size();h++)Ne[h]=Tt.get(h);Tt.delete()}else Ne=[];O[$t]=Ne,ge.g=7;break}if(Tt===void 0){ge.g=3;break}if(Nt.type==="float_list"){O[$t]=Tt,ge.g=7;break}if(Nt.type==="proto"){O[$t]=Tt,ge.g=7;break}if(Nt.type!=="texture")throw Error("Unknown output config type: '"+Nt.type+"'");return Et=Ut.s[$t],Et||(Et=new bn(Ut.h,Ut.D),Ut.s[$t]=Et),P(ge,Fe(Et,Tt,Ut.G),13);case 13:Dt=ge.h,O[$t]=Dt;case 7:Nt.transform&&O[$t]&&(O[$t]=Nt.transform(O[$t])),ge.g=3;break;case 14:ae[pe]=ge.h;case 3:rt=Jt.next(),ge.g=2;break;case 4:return ge.return(O)}})})}function _n(p,W,V){return se(p,function E(){var O=this,ot;return ne(E,function(j){return typeof V=="number"||V instanceof Uint8Array||V instanceof O.h.Uint8BlobList?j.return(V):V instanceof O.h.Texture2dDataOut?(ot=O.s[W],ot||(ot=new bn(O.h,O.D),O.s[W]=ot),j.return(Fe(ot,V,O.G))):j.return(void 0)})})}function Qn(p,W){for(var V=W.name||"$",E=[].concat(J(W.wants)),O=new p.h.StringList,ot=T(W.wants),j=ot.next();!j.done;j=ot.next())O.push_back(j.value);ot=p.h.PacketListener.implement({onResults:function(rt){for(var bt={},Rt=0;Rt<W.wants.length;++Rt)bt[E[Rt]]=rt.get(Rt);var Ut=p.listeners[V];Ut&&(p.C=Tn(p,bt,W.outs).then(function(Jt){Jt=Ut(Jt);for(var $t=0;$t<W.wants.length;++$t){var Nt=bt[E[$t]];typeof Nt=="object"&&Nt.hasOwnProperty&&Nt.hasOwnProperty("delete")&&Nt.delete()}Jt&&(p.C=Jt)}))}}),p.i.attachMultiListener(O,ot),O.delete()}i.onResults=function(p,W){this.listeners[W||"$"]=p},Re("Solution",En),Re("OptionType",{BOOL:0,NUMBER:1,aa:2,0:"BOOL",1:"NUMBER",2:"STRING"});function Yn(p){switch(p===void 0&&(p=0),p){case 1:return"selfie_segmentation_landscape.tflite";default:return"selfie_segmentation.tflite"}}function Cn(p){var W=this;p=p||{},this.g=new En({locateFile:p.locateFile,files:function(V){return[{simd:!0,url:"selfie_segmentation_solution_simd_wasm_bin.js"},{simd:!1,url:"selfie_segmentation_solution_wasm_bin.js"},{data:!0,url:Yn(V.modelSelection)}]},graph:{url:"selfie_segmentation.binarypb"},listeners:[{wants:["segmentation_mask","image_transformed"],outs:{image:{type:"texture",stream:"image_transformed"},segmentationMask:{type:"texture",stream:"segmentation_mask"}}}],inputs:{image:{type:"video",stream:"input_frames_gpu"}},options:{useCpuInference:{type:0,graphOptionXref:{calculatorType:"InferenceCalculator",fieldName:"use_cpu_inference"},default:"iPad Simulator;iPhone Simulator;iPod Simulator;iPad;iPhone;iPod".split(";").includes(navigator.platform)||navigator.userAgent.includes("Mac")&&"ontouchend"in document},selfieMode:{type:0,graphOptionXref:{calculatorType:"GlScalerCalculator",calculatorIndex:1,fieldName:"flip_horizontal"}},modelSelection:{type:1,graphOptionXref:{calculatorType:"ConstantSidePacketCalculator",calculatorName:"ConstantSidePacketCalculatorModelSelection",fieldName:"int_value"},onChange:function(V){return se(W,function E(){var O,ot,j=this,rt;return ne(E,function(bt){return bt.g==1?(O=Yn(V),ot="third_party/mediapipe/modules/selfie_segmentation/"+O,P(bt,an(j.g,O),2)):(rt=bt.h,j.g.overrideFile(ot,rt),bt.return(!0))})})}}}})}i=Cn.prototype,i.close=function(){return this.g.close(),Promise.resolve()},i.onResults=function(p){this.g.onResults(p)},i.initialize=function(){return se(this,function p(){var W=this;return ne(p,function(V){return P(V,W.g.initialize(),0)})})},i.reset=function(){this.g.reset()},i.send=function(p){return se(this,function W(){var V=this;return ne(W,function(E){return P(E,V.g.send(p),0)})})},i.setOptions=function(p){this.g.setOptions(p)},Re("SelfieSegmentation",Cn),Re("VERSION","0.1.1632777926")}).call(Zi);const vi={};(function(){var i;function n(l){var v=0;return function(){return v<l.length?{done:!1,value:l[v++]}:{done:!0}}}var r=typeof Object.defineProperties=="function"?Object.defineProperty:function(l,v,x){return l==Array.prototype||l==Object.prototype||(l[v]=x.value),l};function f(l){l=[typeof globalThis=="object"&&globalThis,l,typeof window=="object"&&window,typeof self=="object"&&self,typeof global=="object"&&global];for(var v=0;v<l.length;++v){var x=l[v];if(x&&x.Math==Math)return x}throw Error("Cannot find global object")}var Z=f(this);function I(l,v){if(v)t:{var x=Z;l=l.split(".");for(var Y=0;Y<l.length-1;Y++){var k=l[Y];if(!(k in x))break t;x=x[k]}l=l[l.length-1],Y=x[l],v=v(Y),v!=Y&&v!=null&&r(x,l,{configurable:!0,writable:!0,value:v})}}I("Symbol",function(l){function v(o){if(this instanceof v)throw new TypeError("Symbol is not a constructor");return new x(Y+(o||"")+"_"+k++,o)}function x(o,d){this.g=o,r(this,"description",{configurable:!0,writable:!0,value:d})}if(l)return l;x.prototype.toString=function(){return this.g};var Y="jscomp_symbol_"+(1e9*Math.random()>>>0)+"_",k=0;return v}),I("Symbol.iterator",function(l){if(l)return l;l=Symbol("Symbol.iterator");for(var v="Array Int8Array Uint8Array Uint8ClampedArray Int16Array Uint16Array Int32Array Uint32Array Float32Array Float64Array".split(" "),x=0;x<v.length;x++){var Y=Z[v[x]];typeof Y=="function"&&typeof Y.prototype[l]!="function"&&r(Y.prototype,l,{configurable:!0,writable:!0,value:function(){return F(n(this))}})}return l});function F(l){return l={next:l},l[Symbol.iterator]=function(){return this},l}function T(l){var v=typeof Symbol<"u"&&Symbol.iterator&&l[Symbol.iterator];return v?v.call(l):{next:n(l)}}function J(l){if(!(l instanceof Array)){l=T(l);for(var v,x=[];!(v=l.next()).done;)x.push(v.value);l=x}return l}var et=typeof Object.create=="function"?Object.create:function(l){function v(){}return v.prototype=l,new v},lt;if(typeof Object.setPrototypeOf=="function")lt=Object.setPrototypeOf;else{var pt;t:{var Yt={a:!0},Lt={};try{Lt.__proto__=Yt,pt=Lt.a;break t}catch{}pt=!1}lt=pt?function(l,v){if(l.__proto__=v,l.__proto__!==v)throw new TypeError(l+" is not extensible");return l}:null}var at=lt;function dt(l,v){if(l.prototype=et(v.prototype),l.prototype.constructor=l,at)at(l,v);else for(var x in v)if(x!="prototype")if(Object.defineProperties){var Y=Object.getOwnPropertyDescriptor(v,x);Y&&Object.defineProperty(l,x,Y)}else l[x]=v[x];l.ra=v.prototype}function Bt(){this.l=!1,this.i=null,this.h=void 0,this.g=1,this.u=this.o=0,this.j=null}function kt(l){if(l.l)throw new TypeError("Generator is already running");l.l=!0}Bt.prototype.s=function(l){this.h=l};function ee(l,v){l.j={fa:v,ga:!0},l.g=l.o||l.u}Bt.prototype.return=function(l){this.j={return:l},this.g=this.u};function P(l,v,x){return l.g=x,{value:v}}function De(l){this.g=new Bt,this.h=l}function ze(l,v){kt(l.g);var x=l.g.i;return x?We(l,"return"in x?x.return:function(Y){return{value:Y,done:!0}},v,l.g.return):(l.g.return(v),zt(l))}function We(l,v,x,Y){try{var k=v.call(l.g.i,x);if(!(k instanceof Object))throw new TypeError("Iterator result "+k+" is not an object");if(!k.done)return l.g.l=!1,k;var o=k.value}catch(d){return l.g.i=null,ee(l.g,d),zt(l)}return l.g.i=null,Y.call(l.g,o),zt(l)}function zt(l){for(;l.g.g;)try{var v=l.h(l.g);if(v)return l.g.l=!1,{value:v.value,done:!1}}catch(x){l.g.h=void 0,ee(l.g,x)}if(l.g.l=!1,l.g.j){if(v=l.g.j,l.g.j=null,v.ga)throw v.fa;return{value:v.return,done:!0}}return{value:void 0,done:!0}}function Hn(l){this.next=function(v){return kt(l.g),l.g.i?v=We(l,l.g.i.next,v,l.g.s):(l.g.s(v),v=zt(l)),v},this.throw=function(v){return kt(l.g),l.g.i?v=We(l,l.g.i.throw,v,l.g.s):(ee(l.g,v),v=zt(l)),v},this.return=function(v){return ze(l,v)},this[Symbol.iterator]=function(){return this}}function ne(l){function v(Y){return l.next(Y)}function x(Y){return l.throw(Y)}return new Promise(function(Y,k){function o(d){d.done?Y(d.value):Promise.resolve(d.value).then(v,x).then(o,k)}o(l.next())})}function Zt(l){return ne(new Hn(new De(l)))}I("Promise",function(l){function v(d){this.h=0,this.i=void 0,this.g=[],this.s=!1;var g=this.j();try{d(g.resolve,g.reject)}catch(e){g.reject(e)}}function x(){this.g=null}function Y(d){return d instanceof v?d:new v(function(g){g(d)})}if(l)return l;x.prototype.h=function(d){if(this.g==null){this.g=[];var g=this;this.i(function(){g.l()})}this.g.push(d)};var k=Z.setTimeout;x.prototype.i=function(d){k(d,0)},x.prototype.l=function(){for(;this.g&&this.g.length;){var d=this.g;this.g=[];for(var g=0;g<d.length;++g){var e=d[g];d[g]=null;try{e()}catch(u){this.j(u)}}}this.g=null},x.prototype.j=function(d){this.i(function(){throw d})},v.prototype.j=function(){function d(u){return function(m){e||(e=!0,u.call(g,m))}}var g=this,e=!1;return{resolve:d(this.D),reject:d(this.l)}},v.prototype.D=function(d){if(d===this)this.l(new TypeError("A Promise cannot resolve to itself"));else if(d instanceof v)this.H(d);else{t:switch(typeof d){case"object":var g=d!=null;break t;case"function":g=!0;break t;default:g=!1}g?this.A(d):this.o(d)}},v.prototype.A=function(d){var g=void 0;try{g=d.then}catch(e){this.l(e);return}typeof g=="function"?this.I(g,d):this.o(d)},v.prototype.l=function(d){this.u(2,d)},v.prototype.o=function(d){this.u(1,d)},v.prototype.u=function(d,g){if(this.h!=0)throw Error("Cannot settle("+d+", "+g+"): Promise already settled in state"+this.h);this.h=d,this.i=g,this.h===2&&this.G(),this.B()},v.prototype.G=function(){var d=this;k(function(){if(d.C()){var g=Z.console;typeof g<"u"&&g.error(d.i)}},1)},v.prototype.C=function(){if(this.s)return!1;var d=Z.CustomEvent,g=Z.Event,e=Z.dispatchEvent;return typeof e>"u"?!0:(typeof d=="function"?d=new d("unhandledrejection",{cancelable:!0}):typeof g=="function"?d=new g("unhandledrejection",{cancelable:!0}):(d=Z.document.createEvent("CustomEvent"),d.initCustomEvent("unhandledrejection",!1,!0,d)),d.promise=this,d.reason=this.i,e(d))},v.prototype.B=function(){if(this.g!=null){for(var d=0;d<this.g.length;++d)o.h(this.g[d]);this.g=null}};var o=new x;return v.prototype.H=function(d){var g=this.j();d.M(g.resolve,g.reject)},v.prototype.I=function(d,g){var e=this.j();try{d.call(g,e.resolve,e.reject)}catch(u){e.reject(u)}},v.prototype.then=function(d,g){function e(c,a){return typeof c=="function"?function(b){try{u(c(b))}catch(S){m(S)}}:a}var u,m,t=new v(function(c,a){u=c,m=a});return this.M(e(d,u),e(g,m)),t},v.prototype.catch=function(d){return this.then(void 0,d)},v.prototype.M=function(d,g){function e(){switch(u.h){case 1:d(u.i);break;case 2:g(u.i);break;default:throw Error("Unexpected state: "+u.h)}}var u=this;this.g==null?o.h(e):this.g.push(e),this.s=!0},v.resolve=Y,v.reject=function(d){return new v(function(g,e){e(d)})},v.race=function(d){return new v(function(g,e){for(var u=T(d),m=u.next();!m.done;m=u.next())Y(m.value).M(g,e)})},v.all=function(d){var g=T(d),e=g.next();return e.done?Y([]):new v(function(u,m){function t(b){return function(S){c[b]=S,a--,a==0&&u(c)}}var c=[],a=0;do c.push(void 0),a++,Y(e.value).M(t(c.length-1),m),e=g.next();while(!e.done)})},v});function $e(l,v){l instanceof String&&(l+="");var x=0,Y=!1,k={next:function(){if(!Y&&x<l.length){var o=x++;return{value:v(o,l[o]),done:!1}}return Y=!0,{done:!0,value:void 0}}};return k[Symbol.iterator]=function(){return k},k}var An=typeof Object.assign=="function"?Object.assign:function(l,v){for(var x=1;x<arguments.length;x++){var Y=arguments[x];if(Y)for(var k in Y)Object.prototype.hasOwnProperty.call(Y,k)&&(l[k]=Y[k])}return l};I("Object.assign",function(l){return l||An}),I("Object.is",function(l){return l||function(v,x){return v===x?v!==0||1/v===1/x:v!==v&&x!==x}}),I("Array.prototype.includes",function(l){return l||function(v,x){var Y=this;Y instanceof String&&(Y=String(Y));var k=Y.length;for(x=x||0,0>x&&(x=Math.max(x+k,0));x<k;x++){var o=Y[x];if(o===v||Object.is(o,v))return!0}return!1}}),I("String.prototype.includes",function(l){return l||function(v,x){if(this==null)throw new TypeError("The 'this' value for String.prototype.includes must not be null or undefined");if(v instanceof RegExp)throw new TypeError("First argument to String.prototype.includes must not be a regular expression");return this.indexOf(v,x||0)!==-1}}),I("Array.prototype.keys",function(l){return l||function(){return $e(this,function(v){return v})}});var Re=this||self;function Ht(l,v){l=l.split(".");var x=Re;l[0]in x||typeof x.execScript>"u"||x.execScript("var "+l[0]);for(var Y;l.length&&(Y=l.shift());)l.length||v===void 0?x[Y]&&x[Y]!==Object.prototype[Y]?x=x[Y]:x=x[Y]={}:x[Y]=v}function Te(){throw Error("Invalid UTF8")}function sn(l,v){return v=String.fromCharCode.apply(null,v),l==null?v:l+v}var Gn,Ln=typeof TextDecoder<"u",Rn,Jn=typeof TextEncoder<"u",dn={},pn=null;function kn(l){var v;v===void 0&&(v=0),Me(),v=dn[v];for(var x=Array(Math.floor(l.length/3)),Y=v[64]||"",k=0,o=0;k<l.length-2;k+=3){var d=l[k],g=l[k+1],e=l[k+2],u=v[d>>2];d=v[(d&3)<<4|g>>4],g=v[(g&15)<<2|e>>6],e=v[e&63],x[o++]=u+d+g+e}switch(u=0,e=Y,l.length-k){case 2:u=l[k+1],e=v[(u&15)<<2]||Y;case 1:l=l[k],x[o]=v[l>>2]+v[(l&3)<<4|u>>4]+e+Y}return x.join("")}function Fn(l){var v=l.length,x=3*v/4;x%3?x=Math.floor(x):"=.".indexOf(l[v-1])!=-1&&(x="=.".indexOf(l[v-2])!=-1?x-2:x-1);var Y=new Uint8Array(x),k=0;return je(l,function(o){Y[k++]=o}),k!==x?Y.subarray(0,k):Y}function je(l,v){function x(e){for(;Y<l.length;){var u=l.charAt(Y++),m=pn[u];if(m!=null)return m;if(!/^[\s\xa0]*$/.test(u))throw Error("Unknown base64 encoding at char: "+u)}return e}Me();for(var Y=0;;){var k=x(-1),o=x(0),d=x(64),g=x(64);if(g===64&&k===-1)break;v(k<<2|o>>4),d!=64&&(v(o<<4&240|d>>2),g!=64&&v(d<<6&192|g))}}function Me(){if(!pn){pn={};for(var l="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789".split(""),v=["+/=","+/","-_=","-_.","-_"],x=0;5>x;x++){var Y=l.concat(v[x].split(""));dn[x]=Y;for(var k=0;k<Y.length;k++){var o=Y[k];pn[o]===void 0&&(pn[o]=k)}}}}var xn=typeof Uint8Array=="function";function Xn(l){return xn&&l!=null&&l instanceof Uint8Array}var he;function Se(l){if(this.L=l,l!==null&&l.length===0)throw Error("ByteString should be constructed with non-empty values")}var Oe=typeof Uint8Array.prototype.slice=="function",re=0,Ve=0;function ln(l,v){if(l.constructor===Uint8Array)return l;if(l.constructor===ArrayBuffer)return new Uint8Array(l);if(l.constructor===Array)return new Uint8Array(l);if(l.constructor===String)return Fn(l);if(l.constructor===Se)return!v&&(v=l.L)&&v.constructor===Uint8Array?v:(v=l.L,v=v==null||Xn(v)?v:typeof v=="string"?Fn(v):null,(l=l.L=v)?new Uint8Array(l):he||(he=new Uint8Array(0)));if(l instanceof Uint8Array)return new Uint8Array(l.buffer,l.byteOffset,l.byteLength);throw Error("Type not convertible to a Uint8Array, expected a Uint8Array, an ArrayBuffer, a base64 encoded string, or Array of numbers")}function Be(l,v){return Error("Invalid wire type: "+l+" (at position "+v+")")}function Qt(){return Error("Failed to read varint, encoding is invalid.")}function Ze(l,v){v=v===void 0?{}:v,v=v.v===void 0?!1:v.v,this.h=null,this.g=this.i=this.j=0,this.v=v,l&&Ce(this,l)}function Ce(l,v){l.h=ln(v,l.v),l.j=0,l.i=l.h.length,l.g=l.j}Ze.prototype.reset=function(){this.g=this.j};function Mt(l){if(l.g>l.i)throw Error("Tried to read past the end of the data "+l.g+" > "+l.i)}function xe(l){var v=l.h,x=v[l.g],Y=x&127;if(128>x)return l.g+=1,Mt(l),Y;if(x=v[l.g+1],Y|=(x&127)<<7,128>x)return l.g+=2,Mt(l),Y;if(x=v[l.g+2],Y|=(x&127)<<14,128>x)return l.g+=3,Mt(l),Y;if(x=v[l.g+3],Y|=(x&127)<<21,128>x)return l.g+=4,Mt(l),Y;if(x=v[l.g+4],l.g+=5,Y|=(x&15)<<28,128>x)return Mt(l),Y;if(128<=v[l.g++]&&128<=v[l.g++]&&128<=v[l.g++]&&128<=v[l.g++]&&128<=v[l.g++])throw Qt();return Mt(l),Y}var jt=[];function ye(){this.g=[]}ye.prototype.length=function(){return this.g.length},ye.prototype.end=function(){var l=this.g;return this.g=[],l};function Ye(l,v){for(;127<v;)l.g.push(v&127|128),v>>>=7;l.g.push(v)}function qe(l){var v={},x=v.W===void 0?!1:v.W;this.l={v:v.v===void 0?!1:v.v},this.W=x,v=this.l,jt.length?(x=jt.pop(),v&&(x.v=v.v),l&&Ce(x,l),l=x):l=new Ze(l,v),this.g=l,this.j=this.g.g,this.h=this.i=-1}qe.prototype.reset=function(){this.g.reset(),this.j=this.g.g,this.h=this.i=-1};function Xe(l){var v=l.g;if(v.g==v.i)return!1;l.j=l.g.g;var x=xe(l.g)>>>0;if(v=x>>>3,x&=7,!(0<=x&&5>=x))throw Be(x,l.j);if(1>v)throw Error("Invalid field number: "+v+" (at position "+l.j+")");return l.i=v,l.h=x,!0}function Ot(l){switch(l.h){case 0:if(l.h!=0)Ot(l);else t:{l=l.g;for(var v=l.g,x=v+10;v<x;)if((l.h[v++]&128)===0){l.g=v,Mt(l);break t}throw Qt()}break;case 1:l=l.g,l.g+=8,Mt(l);break;case 2:l.h!=2?Ot(l):(v=xe(l.g)>>>0,l=l.g,l.g+=v,Mt(l));break;case 5:l=l.g,l.g+=4,Mt(l);break;case 3:v=l.i;do{if(!Xe(l))throw Error("Unmatched start-group tag: stream EOF");if(l.h==4){if(l.i!=v)throw Error("Unmatched end-group tag");break}Ot(l)}while(1);break;default:throw Be(l.h,l.j)}}var Ae=[];function Pe(){this.i=[],this.h=0,this.g=new ye}function Ie(l,v){v.length!==0&&(l.i.push(v),l.h+=v.length)}function Wn(l,v){if(v=v.ca){Ie(l,l.g.end());for(var x=0;x<v.length;x++)Ie(l,v[x])}}var cn=typeof Symbol=="function"&&typeof Symbol()=="symbol"?Symbol(void 0):void 0;function _e(l,v){Object.isFrozen(l)||(cn?l[cn]|=v:l.N!==void 0?l.N|=v:Object.defineProperties(l,{N:{value:v,configurable:!0,writable:!0,enumerable:!1}}))}function un(l){var v;return cn?v=l[cn]:v=l.N,v==null?0:v}function ve(l){return _e(l,1),l}function we(l){return Array.isArray(l)?!!(un(l)&2):!1}function Ge(l){if(!Array.isArray(l))throw Error("cannot mark non-array as immutable");_e(l,2)}function ie(l){return l!==null&&typeof l=="object"&&!Array.isArray(l)&&l.constructor===Object}var Qe=Object.freeze(ve([]));function qt(l){if(we(l.m))throw Error("Cannot mutate an immutable Message")}var Pt=typeof Symbol<"u"&&typeof Symbol.hasInstance<"u";function hn(l){return{value:l,configurable:!1,writable:!1,enumerable:!1}}function fe(l,v,x){return v===-1?null:v>=l.i?l.g?l.g[v]:void 0:(x===void 0?0:x)&&l.g&&(x=l.g[v],x!=null)?x:l.m[v+l.h]}function Ct(l,v,x,Y){Y=Y===void 0?!1:Y,qt(l),v<l.i&&!Y?l.m[v+l.h]=x:(l.g||(l.g=l.m[l.i+l.h]={}))[v]=x}function Vt(l,v,x,Y){x=x===void 0?!0:x,Y=Y===void 0?!1:Y;var k=fe(l,v,Y);return k==null&&(k=Qe),we(l.m)?x&&(Ge(k),Object.freeze(k)):(k===Qe||we(k))&&(k=ve(k.slice()),Ct(l,v,k,Y)),k}function oe(l,v,x){return l=fe(l,v),l=l==null?l:+l,l==null?x===void 0?0:x:l}function Le(l,v,x,Y){l.j||(l.j={});var k=we(l.m),o=l.j[x];if(!o){Y=Vt(l,x,!0,Y===void 0?!1:Y),o=[],k=k||we(Y);for(var d=0;d<Y.length;d++)o[d]=new v(Y[d]),k&&Ge(o[d].m);k&&(Ge(o),Object.freeze(o)),l.j[x]=o}return o}function te(l,v,x,Y,k){var o=o===void 0?!1:o;return qt(l),o=Le(l,x,v,o),x=Y||new x,l=Vt(l,v),k!=null?(o.splice(k,0,x),l.splice(k,0,x.m)):(o.push(x),l.push(x.m)),x}function se(l,v){return l=fe(l,v),l==null?0:l}function tt(l,v){return l=fe(l,v),l==null?"":l}function it(l){switch(typeof l){case"number":return isFinite(l)?l:String(l);case"object":if(l&&!Array.isArray(l)){if(Xn(l))return kn(l);if(l instanceof Se){var v=l.L;return v=v==null||typeof v=="string"?v:xn&&v instanceof Uint8Array?kn(v):null,(l.L=v)||""}}}return l}function ut(l){var v=ue;return v=v===void 0?St:v,de(l,v)}function _t(l,v){if(l!=null){if(Array.isArray(l))l=de(l,v);else if(ie(l)){var x={},Y;for(Y in l)x[Y]=_t(l[Y],v);l=x}else l=v(l);return l}}function de(l,v){for(var x=l.slice(),Y=0;Y<x.length;Y++)x[Y]=_t(x[Y],v);return Array.isArray(l)&&un(l)&1&&ve(x),x}function ue(l){return l&&typeof l=="object"&&l.toJSON?l.toJSON():(l=it(l),Array.isArray(l)?ut(l):l)}function St(l){return Xn(l)?new Uint8Array(l):l}function me(l,v,x){l||(l=He),He=null;var Y=this.constructor.h;l||(l=Y?[Y]:[]),this.h=(Y?0:-1)-(this.constructor.g||0),this.j=void 0,this.m=l;t:{if(Y=this.m.length,l=Y-1,Y&&(Y=this.m[l],ie(Y))){this.i=l-this.h,this.g=Y;break t}v!==void 0&&-1<v?(this.i=Math.max(v,l+1-this.h),this.g=void 0):this.i=Number.MAX_VALUE}if(x)for(v=0;v<x.length;v++)if(l=x[v],l<this.i)l+=this.h,(Y=this.m[l])?Array.isArray(Y)&&ve(Y):this.m[l]=Qe;else{Y=this.g||(this.g=this.m[this.i+this.h]={});var k=Y[l];k?Array.isArray(k)&&ve(k):Y[l]=Qe}}me.prototype.toJSON=function(){return ut(this.m)},me.prototype.toString=function(){return this.m.toString()};var He;function tn(){me.apply(this,arguments)}if(dt(tn,me),Pt){var en={};Object.defineProperties(tn,(en[Symbol.hasInstance]=hn(function(){throw Error("Cannot perform instanceof checks for MutableMessage")}),en))}function fn(l,v,x){if(x){var Y={},k;for(k in x){var o=x[k],d=o.ja;d||(Y.F=o.pa||o.ha.P,o.ba?(Y.U=In(o.ba),d=function(g){return function(e,u,m){return g.F(e,u,m,g.U)}}(Y)):o.da?(Y.T=Ke(o.X.g,o.da),d=function(g){return function(e,u,m){return g.F(e,u,m,g.T)}}(Y)):d=Y.F,o.ja=d),d(v,l,o.X),Y={F:Y.F,U:Y.U,T:Y.T}}}Wn(v,l)}var bn=Symbol();function Fe(l,v,x){return l[bn]||(l[bn]=function(Y,k){return v(Y,k,x)})}function nn(l){var v=l[bn];if(!v){var x=p(l);v=function(Y,k){return W(Y,k,x)},l[bn]=v}return v}function zn(l){var v=l.ba;if(v)return nn(v);if(v=l.oa)return Fe(l.X.g,v,l.da)}function rn(l){var v=zn(l),x=l.X,Y=l.ha.O;return v?function(k,o){return Y(k,o,x,v)}:function(k,o){return Y(k,o,x)}}function Je(l,v,x,Y,k,o){l=l();var d=0;for(l.length&&typeof l[0]!="number"&&(x(v,l[0]),d++);d<l.length;){x=l[d++];for(var g=d+1;g<l.length&&typeof l[g]!="number";)g++;var e=l[d++];switch(g-=d,g){case 0:Y(v,x,e);break;case 1:Y(v,x,e,l[d++]);break;case 2:k(v,x,e,l[d++],l[d++]);break;case 3:g=l[d++];var u=l[d++],m=l[d++];Array.isArray(m)?k(v,x,e,g,u,m):o(v,x,e,g,u,m);break;case 4:o(v,x,e,l[d++],l[d++],l[d++],l[d++]);break;default:throw Error("unexpected number of binary field arguments: "+g)}}return v}var gn=Symbol();function In(l){var v=l[gn];if(!v){var x=an(l);v=function(Y,k){return E(Y,k,x)},l[gn]=v}return v}function Ke(l,v){var x=l[gn];return x||(x=function(Y,k){return fn(Y,k,v)},l[gn]=x),x}var En=Symbol();function on(l,v){l.push(v)}function Zn(l,v,x){l.push(v,x.P)}function Sn(l,v,x,Y,k){var o=In(k),d=x.P;l.push(v,function(g,e,u){return d(g,e,u,Y,o)})}function Kn(l,v,x,Y,k,o){var d=Ke(Y,o),g=x.P;l.push(v,function(e,u,m){return g(e,u,m,Y,d)})}function an(l){var v=l[En];return v||Je(l,l[En]=[],on,Zn,Sn,Kn)}var Tn=Symbol();function _n(l,v){l[0]=v}function Qn(l,v,x,Y){var k=x.O;l[v]=Y?function(o,d,g){return k(o,d,g,Y)}:k}function Yn(l,v,x,Y,k,o){var d=x.O,g=nn(k);l[v]=function(e,u,m){return d(e,u,m,Y,g,o)}}function Cn(l,v,x,Y,k,o,d){var g=x.O,e=Fe(Y,k,o);l[v]=function(u,m,t){return g(u,m,t,Y,e,d)}}function p(l){var v=l[Tn];return v||Je(l,l[Tn]={},_n,Qn,Yn,Cn)}function W(l,v,x){for(;Xe(v)&&v.h!=4;){var Y=v.i,k=x[Y];if(!k){var o=x[0];o&&(o=o[Y])&&(k=x[Y]=rn(o))}if((!k||!k(v,l,Y))&&(k=v,Y=l,o=k.j,Ot(k),!k.W)){var d=k.g.h;k=k.g.g,k=o===k?he||(he=new Uint8Array(0)):Oe?d.slice(o,k):new Uint8Array(d.subarray(o,k)),(o=Y.ca)?o.push(k):Y.ca=[k]}}return l}function V(l,v,x){if(Ae.length){var Y=Ae.pop();l&&(Ce(Y.g,l),Y.i=-1,Y.h=-1),l=Y}else l=new qe(l);try{return W(new v,l,p(x))}finally{v=l.g,v.h=null,v.j=0,v.i=0,v.g=0,v.v=!1,l.i=-1,l.h=-1,100>Ae.length&&Ae.push(l)}}function E(l,v,x){for(var Y=x.length,k=Y%2==1,o=k?1:0;o<Y;o+=2)(0,x[o+1])(v,l,x[o]);fn(l,v,k?x[0]:void 0)}function O(l,v){var x=new Pe;E(l,x,an(v)),Ie(x,x.g.end()),l=new Uint8Array(x.h),v=x.i;for(var Y=v.length,k=0,o=0;o<Y;o++){var d=v[o];l.set(d,k),k+=d.length}return x.i=[l],l}function ot(l,v){return{O:l,P:v}}var j=ot(function(l,v,x){if(l.h!==5)return!1;l=l.g;var Y=l.h[l.g],k=l.h[l.g+1],o=l.h[l.g+2],d=l.h[l.g+3];return l.g+=4,Mt(l),k=(Y<<0|k<<8|o<<16|d<<24)>>>0,l=2*(k>>31)+1,Y=k>>>23&255,k&=8388607,Ct(v,x,Y==255?k?NaN:1/0*l:Y==0?l*Math.pow(2,-149)*k:l*Math.pow(2,Y-150)*(k+Math.pow(2,23))),!0},function(l,v,x){if(v=fe(v,x),v!=null){Ye(l.g,8*x+5),l=l.g;var Y=v;Y=(x=0>Y?1:0)?-Y:Y,Y===0?0<1/Y?re=Ve=0:(Ve=0,re=2147483648):isNaN(Y)?(Ve=0,re=2147483647):34028234663852886e22<Y?(Ve=0,re=(x<<31|2139095040)>>>0):11754943508222875e-54>Y?(Y=Math.round(Y/Math.pow(2,-149)),Ve=0,re=(x<<31|Y)>>>0):(v=Math.floor(Math.log(Y)/Math.LN2),Y*=Math.pow(2,-v),Y=Math.round(8388608*Y),16777216<=Y&&++v,Ve=0,re=(x<<31|v+127<<23|Y&8388607)>>>0),x=re,l.g.push(x>>>0&255),l.g.push(x>>>8&255),l.g.push(x>>>16&255),l.g.push(x>>>24&255)}}),rt=ot(function(l,v,x){if(l.h!==0)return!1;for(var Y=l.g,k=128,o=0,d=l=0;4>d&&128<=k;d++)k=Y.h[Y.g++],Mt(Y),o|=(k&127)<<7*d;if(128<=k&&(k=Y.h[Y.g++],Mt(Y),o|=(k&127)<<28,l|=(k&127)>>4),128<=k)for(d=0;5>d&&128<=k;d++)k=Y.h[Y.g++],Mt(Y),l|=(k&127)<<7*d+3;if(128>k)Y=o>>>0,k=l>>>0,(l=k&2147483648)&&(Y=~Y+1>>>0,k=~k>>>0,Y==0&&(k=k+1>>>0)),Y=4294967296*k+(Y>>>0);else throw Qt();return Ct(v,x,l?-Y:Y),!0},function(l,v,x){if(v=fe(v,x),v!=null&&v!=null){Ye(l.g,8*x),l=l.g;var Y=v;for(x=0>Y,Y=Math.abs(Y),v=Y>>>0,Y=Math.floor((Y-v)/4294967296),Y>>>=0,x&&(Y=~Y>>>0,v=(~v>>>0)+1,4294967295<v&&(v=0,Y++,4294967295<Y&&(Y=0))),re=v,Ve=Y,x=re,v=Ve;0<v||127<x;)l.g.push(x&127|128),x=(x>>>7|v<<25)>>>0,v>>>=7;l.g.push(x)}}),bt=ot(function(l,v,x){return l.h!==0?!1:(Ct(v,x,xe(l.g)),!0)},function(l,v,x){if(v=fe(v,x),v!=null&&v!=null)if(Ye(l.g,8*x),l=l.g,x=v,0<=x)Ye(l,x);else{for(v=0;9>v;v++)l.g.push(x&127|128),x>>=7;l.g.push(1)}}),Rt=ot(function(l,v,x){if(l.h!==2)return!1;var Y=xe(l.g)>>>0;l=l.g;var k=l.g;l.g+=Y,Mt(l),l=l.h;var o;if(Ln)(o=Gn)||(o=Gn=new TextDecoder("utf-8",{fatal:!0})),o=o.decode(l.subarray(k,k+Y));else{Y=k+Y;for(var d=[],g=null,e,u,m;k<Y;)e=l[k++],128>e?d.push(e):224>e?k>=Y?Te():(u=l[k++],194>e||(u&192)!==128?(k--,Te()):d.push((e&31)<<6|u&63)):240>e?k>=Y-1?Te():(u=l[k++],(u&192)!==128||e===224&&160>u||e===237&&160<=u||((o=l[k++])&192)!==128?(k--,Te()):d.push((e&15)<<12|(u&63)<<6|o&63)):244>=e?k>=Y-2?Te():(u=l[k++],(u&192)!==128||(e<<28)+(u-144)>>30!==0||((o=l[k++])&192)!==128||((m=l[k++])&192)!==128?(k--,Te()):(e=(e&7)<<18|(u&63)<<12|(o&63)<<6|m&63,e-=65536,d.push((e>>10&1023)+55296,(e&1023)+56320))):Te(),8192<=d.length&&(g=sn(g,d),d.length=0);o=sn(g,d)}return Ct(v,x,o),!0},function(l,v,x){if(v=fe(v,x),v!=null){var Y=!1;if(Y=Y===void 0?!1:Y,Jn){if(Y&&/(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])/.test(v))throw Error("Found an unpaired surrogate");v=(Rn||(Rn=new TextEncoder)).encode(v)}else{for(var k=0,o=new Uint8Array(3*v.length),d=0;d<v.length;d++){var g=v.charCodeAt(d);if(128>g)o[k++]=g;else{if(2048>g)o[k++]=g>>6|192;else{if(55296<=g&&57343>=g){if(56319>=g&&d<v.length){var e=v.charCodeAt(++d);if(56320<=e&&57343>=e){g=1024*(g-55296)+e-56320+65536,o[k++]=g>>18|240,o[k++]=g>>12&63|128,o[k++]=g>>6&63|128,o[k++]=g&63|128;continue}else d--}if(Y)throw Error("Found an unpaired surrogate");g=65533}o[k++]=g>>12|224,o[k++]=g>>6&63|128}o[k++]=g&63|128}}v=o.subarray(0,k)}Ye(l.g,8*x+2),Ye(l.g,v.length),Ie(l,l.g.end()),Ie(l,v)}}),Ut=ot(function(l,v,x,Y,k){if(l.h!==2)return!1;v=te(v,x,Y),x=l.g.i,Y=xe(l.g)>>>0;var o=l.g.g+Y,d=o-x;if(0>=d&&(l.g.i=o,k(v,l),d=o-l.g.g),d)throw Error("Message parsing ended unexpectedly. Expected to read "+(Y+" bytes, instead read "+(Y-d)+" bytes, either the data ended unexpectedly or the message misreported its own length"));return l.g.g=o,l.g.i=x,!0},function(l,v,x,Y,k){if(v=Le(v,Y,x),v!=null)for(Y=0;Y<v.length;Y++){var o=l;Ye(o.g,8*x+2);var d=o.g.end();Ie(o,d),d.push(o.h),o=d,k(v[Y],l),d=l;var g=o.pop();for(g=d.h+d.g.length()-g;127<g;)o.push(g&127|128),g>>>=7,d.h++;o.push(g),d.h++}});function Jt(){tn.apply(this,arguments)}if(dt(Jt,tn),Pt){var $t={};Object.defineProperties(Jt,($t[Symbol.hasInstance]=hn(Object[Symbol.hasInstance]),$t))}function Nt(l){Jt.call(this,l)}dt(Nt,Jt);function Tt(){return[1,bt,2,j,3,Rt,4,Rt]}function Et(l){Jt.call(this,l,-1,ae)}dt(Et,Jt),Et.prototype.addClassification=function(l,v){return te(this,1,Nt,l,v),this};function Dt(){return[1,Ut,Nt,Tt]}var ae=[1];function pe(l){Jt.call(this,l)}dt(pe,Jt);function ge(){return[1,j,2,j,3,j,4,j,5,j]}function Ne(l){Jt.call(this,l,-1,y)}dt(Ne,Jt);function h(){return[1,Ut,pe,ge]}var y=[1];function G(l){Jt.call(this,l)}dt(G,Jt);function H(){return[1,j,2,j,3,j,4,j,5,j,6,rt]}function K(l,v,x){if(x=l.createShader(x===0?l.VERTEX_SHADER:l.FRAGMENT_SHADER),l.shaderSource(x,v),l.compileShader(x),!l.getShaderParameter(x,l.COMPILE_STATUS))throw Error(`Could not compile WebGL shader.
|
|
20
20
|
|
|
21
|
-
`+l.getShaderInfoLog(
|
|
21
|
+
`+l.getShaderInfoLog(x));return x}function _(l){return Le(l,Nt,1).map(function(v){return{index:se(v,1),score:oe(v,2),label:fe(v,3)!=null?tt(v,3):void 0,displayName:fe(v,4)!=null?tt(v,4):void 0}})}function M(l){return{x:oe(l,1),y:oe(l,2),z:oe(l,3),visibility:fe(l,4)!=null?oe(l,4):void 0}}function q(l){return l.map(function(v){return Le(V(v,Ne,h),pe,1).map(M)})}function ct(l,v){this.h=l,this.g=v,this.l=0}function s(l,v,x){return X(l,v),typeof l.g.canvas.transferToImageBitmap=="function"?Promise.resolve(l.g.canvas.transferToImageBitmap()):x?Promise.resolve(l.g.canvas):typeof createImageBitmap=="function"?createImageBitmap(l.g.canvas):(l.i===void 0&&(l.i=document.createElement("canvas")),new Promise(function(Y){l.i.height=l.g.canvas.height,l.i.width=l.g.canvas.width,l.i.getContext("2d",{}).drawImage(l.g.canvas,0,0,l.g.canvas.width,l.g.canvas.height),Y(l.i)}))}function X(l,v){var x=l.g;if(l.o===void 0){var Y=K(x,`
|
|
22
22
|
attribute vec2 aVertex;
|
|
23
23
|
attribute vec2 aTex;
|
|
24
24
|
varying vec2 vTex;
|
|
25
25
|
void main(void) {
|
|
26
26
|
gl_Position = vec4(aVertex, 0.0, 1.0);
|
|
27
27
|
vTex = aTex;
|
|
28
|
-
}`,0),
|
|
28
|
+
}`,0),k=K(x,`
|
|
29
29
|
precision mediump float;
|
|
30
30
|
varying vec2 vTex;
|
|
31
31
|
uniform sampler2D sampler0;
|
|
32
32
|
void main(){
|
|
33
33
|
gl_FragColor = texture2D(sampler0, vTex);
|
|
34
|
-
}`,1),o=
|
|
34
|
+
}`,1),o=x.createProgram();if(x.attachShader(o,Y),x.attachShader(o,k),x.linkProgram(o),!x.getProgramParameter(o,x.LINK_STATUS))throw Error(`Could not compile WebGL program.
|
|
35
35
|
|
|
36
|
-
`+I.getProgramInfoLog(o));Y=l.o=o,I.useProgram(Y),N=I.getUniformLocation(Y,"sampler0"),l.j={K:I.getAttribLocation(Y,"aVertex"),J:I.getAttribLocation(Y,"aTex"),qa:N},l.u=I.createBuffer(),I.bindBuffer(I.ARRAY_BUFFER,l.u),I.enableVertexAttribArray(l.j.K),I.vertexAttribPointer(l.j.K,2,I.FLOAT,!1,0,0),I.bufferData(I.ARRAY_BUFFER,new Float32Array([-1,-1,-1,1,1,1,1,-1]),I.STATIC_DRAW),I.bindBuffer(I.ARRAY_BUFFER,null),l.s=I.createBuffer(),I.bindBuffer(I.ARRAY_BUFFER,l.s),I.enableVertexAttribArray(l.j.J),I.vertexAttribPointer(l.j.J,2,I.FLOAT,!1,0,0),I.bufferData(I.ARRAY_BUFFER,new Float32Array([0,1,0,0,1,0,1,1]),I.STATIC_DRAW),I.bindBuffer(I.ARRAY_BUFFER,null),I.uniform1i(N,0)}Y=l.j,I.useProgram(l.o),I.canvas.width=v.width,I.canvas.height=v.height,I.viewport(0,0,v.width,v.height),I.activeTexture(I.TEXTURE0),l.h.bindTexture2d(v.glName),I.enableVertexAttribArray(Y.K),I.bindBuffer(I.ARRAY_BUFFER,l.u),I.vertexAttribPointer(Y.K,2,I.FLOAT,!1,0,0),I.enableVertexAttribArray(Y.J),I.bindBuffer(I.ARRAY_BUFFER,l.s),I.vertexAttribPointer(Y.J,2,I.FLOAT,!1,0,0),I.bindFramebuffer(I.DRAW_FRAMEBUFFER?I.DRAW_FRAMEBUFFER:I.FRAMEBUFFER,null),I.clearColor(0,0,0,0),I.clear(I.COLOR_BUFFER_BIT),I.colorMask(!0,!0,!0,!0),I.drawArrays(I.TRIANGLE_FAN,0,4),I.disableVertexAttribArray(Y.K),I.disableVertexAttribArray(Y.J),I.bindBuffer(I.ARRAY_BUFFER,null),l.h.bindTexture2d(0)}function R(l){this.g=l}var w=new Uint8Array([0,97,115,109,1,0,0,0,1,4,1,96,0,0,3,2,1,0,10,9,1,7,0,65,0,253,15,26,11]);function k(l,v){return v+l}function A(l,v){window[l]=v}function B(l){var v=document.createElement("script");return v.setAttribute("src",l),v.setAttribute("crossorigin","anonymous"),new Promise(function(I){v.addEventListener("load",function(){I()},!1),v.addEventListener("error",function(){I()},!1),document.body.appendChild(v)})}function nt(){return Zt(function(l){switch(l.g){case 1:return l.o=2,O(l,WebAssembly.instantiate(w),4);case 4:l.g=3,l.o=0;break;case 2:return l.o=0,l.j=null,l.return(!1);case 3:return l.return(!0)}})}function $(l){if(this.g=l,this.listeners={},this.j={},this.H={},this.o={},this.u={},this.I=this.s=this.$=!0,this.D=Promise.resolve(),this.Z="",this.C={},this.locateFile=l&&l.locateFile||k,typeof window=="object")var v=window.location.pathname.toString().substring(0,window.location.pathname.toString().lastIndexOf("/"))+"/";else if(typeof location<"u")v=location.pathname.toString().substring(0,location.pathname.toString().lastIndexOf("/"))+"/";else throw Error("solutions can only be loaded on a web page or in a web worker");if(this.aa=v,l.options){v=T(Object.keys(l.options));for(var I=v.next();!I.done;I=v.next()){I=I.value;var Y=l.options[I].default;Y!==void 0&&(this.j[I]=typeof Y=="function"?Y():Y)}}}i=$.prototype,i.close=function(){return this.i&&this.i.delete(),Promise.resolve()};function yt(l){var v,I,Y,N,o,d,g,e,u,m,t;return Zt(function(c){switch(c.g){case 1:return l.$?(v=l.g.files===void 0?[]:typeof l.g.files=="function"?l.g.files(l.j):l.g.files,O(c,nt(),2)):c.return();case 2:if(I=c.h,typeof window=="object")return A("createMediapipeSolutionsWasm",{locateFile:l.locateFile}),A("createMediapipeSolutionsPackedAssets",{locateFile:l.locateFile}),d=v.filter(function(a){return a.data!==void 0}),g=v.filter(function(a){return a.data===void 0}),e=Promise.all(d.map(function(a){var b=It(l,a.url);if(a.path!==void 0){var S=a.path;b=b.then(function(L){return l.overrideFile(S,L),Promise.resolve(L)})}return b})),u=Promise.all(g.map(function(a){return a.simd===void 0||a.simd&&I||!a.simd&&!I?B(l.locateFile(a.url,l.aa)):Promise.resolve()})).then(function(){var a,b,S;return Zt(function(L){if(L.g==1)return a=window.createMediapipeSolutionsWasm,b=window.createMediapipeSolutionsPackedAssets,S=l,O(L,a(b),2);S.h=L.h,L.g=0})}),m=function(){return Zt(function(a){return l.g.graph&&l.g.graph.url?a=O(a,It(l,l.g.graph.url),0):(a.g=0,a=void 0),a})}(),O(c,Promise.all([u,e,m]),7);if(typeof importScripts!="function")throw Error("solutions can only be loaded on a web page or in a web worker");return Y=v.filter(function(a){return a.simd===void 0||a.simd&&I||!a.simd&&!I}).map(function(a){return l.locateFile(a.url,l.aa)}),importScripts.apply(null,J(Y)),N=l,O(c,createMediapipeSolutionsWasm(Module),6);case 6:N.h=c.h,l.l=new OffscreenCanvas(1,1),l.h.canvas=l.l,o=l.h.GL.createContext(l.l,{antialias:!1,alpha:!1,na:typeof WebGL2RenderingContext<"u"?2:1}),l.h.GL.makeContextCurrent(o),c.g=4;break;case 7:if(l.l=document.createElement("canvas"),t=l.l.getContext("webgl2",{}),!t&&(t=l.l.getContext("webgl",{}),!t))return alert("Failed to create WebGL canvas context when passing video frame."),c.return();l.G=t,l.h.canvas=l.l,l.h.createContext(l.l,!0,!0,{});case 4:l.i=new l.h.SolutionWasm,l.$=!1,c.g=0}})}function Xt(l){var v,I,Y,N,o,d,g,e;return Zt(function(u){if(u.g==1){if(l.g.graph&&l.g.graph.url&&l.Z===l.g.graph.url)return u.return();if(l.s=!0,!l.g.graph||!l.g.graph.url){u.g=2;return}return l.Z=l.g.graph.url,O(u,It(l,l.g.graph.url),3)}for(u.g!=2&&(v=u.h,l.i.loadGraph(v)),I=T(Object.keys(l.C)),Y=I.next();!Y.done;Y=I.next())N=Y.value,l.i.overrideFile(N,l.C[N]);if(l.C={},l.g.listeners)for(o=T(l.g.listeners),d=o.next();!d.done;d=o.next())g=d.value,xt(l,g);e=l.j,l.j={},l.setOptions(e),u.g=0})}i.reset=function(){var l=this;return Zt(function(v){l.i&&(l.i.reset(),l.o={},l.u={}),v.g=0})},i.setOptions=function(l,v){var I=this;if(v=v||this.g.options){for(var Y=[],N=[],o={},d=T(Object.keys(l)),g=d.next();!g.done;o={R:o.R,S:o.S},g=d.next()){var e=g.value;e in this.j&&this.j[e]===l[e]||(this.j[e]=l[e],g=v[e],g!==void 0&&(g.onChange&&(o.R=g.onChange,o.S=l[e],Y.push(function(u){return function(){var m;return Zt(function(t){if(t.g==1)return O(t,u.R(u.S),2);m=t.h,m===!0&&(I.s=!0),t.g=0})}}(o))),g.graphOptionXref&&(e={valueNumber:g.type===1?l[e]:0,valueBoolean:g.type===0?l[e]:!1,valueString:g.type===2?l[e]:""},g=Object.assign(Object.assign(Object.assign({},{calculatorName:"",calculatorIndex:0}),g.graphOptionXref),e),N.push(g))))}(Y.length!==0||N.length!==0)&&(this.s=!0,this.B=(this.B===void 0?[]:this.B).concat(N),this.A=(this.A===void 0?[]:this.A).concat(Y))}};function Kt(l){var v,I,Y,N,o,d,g;return Zt(function(e){switch(e.g){case 1:if(!l.s)return e.return();if(!l.A){e.g=2;break}v=T(l.A),I=v.next();case 3:if(I.done){e.g=5;break}return Y=I.value,O(e,Y(),4);case 4:I=v.next(),e.g=3;break;case 5:l.A=void 0;case 2:if(l.B){for(N=new l.h.GraphOptionChangeRequestList,o=T(l.B),d=o.next();!d.done;d=o.next())g=d.value,N.push_back(g);l.i.changeOptions(N),N.delete(),l.B=void 0}l.s=!1,e.g=0}})}i.initialize=function(){var l=this;return Zt(function(v){return v.g==1?O(v,yt(l),2):v.g!=3?O(v,Xt(l),3):O(v,Kt(l),0)})};function It(l,v){var I,Y;return Zt(function(N){return v in l.H?N.return(l.H[v]):(I=l.locateFile(v,""),Y=fetch(I).then(function(o){return o.arrayBuffer()}),l.H[v]=Y,N.return(Y))})}i.overrideFile=function(l,v){this.i?this.i.overrideFile(l,v):this.C[l]=v},i.clearOverriddenFiles=function(){this.C={},this.i&&this.i.clearOverriddenFiles()},i.send=function(l,v){var I=this,Y,N,o,d,g,e,u,m,t;return Zt(function(c){switch(c.g){case 1:return I.g.inputs?(Y=1e3*(v==null?performance.now():v),O(c,I.D,2)):c.return();case 2:return O(c,I.initialize(),3);case 3:for(N=new I.h.PacketDataList,o=T(Object.keys(l)),d=o.next();!d.done;d=o.next())if(g=d.value,e=I.g.inputs[g]){t:{var a=l[g];switch(e.type){case"video":var b=I.o[e.stream];if(b||(b=new ct(I.h,I.G),I.o[e.stream]=b),b.l===0&&(b.l=b.h.createTexture()),typeof HTMLVideoElement<"u"&&a instanceof HTMLVideoElement)var S=a.videoWidth,L=a.videoHeight;else typeof HTMLImageElement<"u"&&a instanceof HTMLImageElement?(S=a.naturalWidth,L=a.naturalHeight):(S=a.width,L=a.height);L={glName:b.l,width:S,height:L},S=b.g,S.canvas.width=L.width,S.canvas.height=L.height,S.activeTexture(S.TEXTURE0),b.h.bindTexture2d(b.l),S.texImage2D(S.TEXTURE_2D,0,S.RGBA,S.RGBA,S.UNSIGNED_BYTE,a),b.h.bindTexture2d(0),b=L;break t;case"detections":for(b=I.o[e.stream],b||(b=new R(I.h),I.o[e.stream]=b),b.data||(b.data=new b.g.DetectionListData),b.data.reset(a.length),L=0;L<a.length;++L){S=a[L];var F=b.data,U=F.setBoundingBox,z=L,Q=S.ea,D=new G;if(Ft(D,1,Q.ka),Ft(D,2,Q.la),Ft(D,3,Q.height),Ft(D,4,Q.width),Ft(D,5,Q.rotation),Ft(D,6,Q.ia),Q=P(D,C),U.call(F,z,Q),S.Y)for(F=0;F<S.Y.length;++F){D=S.Y[F];var st=!!D.visibility;U=b.data,z=U.addNormalizedLandmark,Q=L,D=Object.assign(Object.assign({},D),{visibility:st?D.visibility:0}),st=new pe,Ft(st,1,D.x),Ft(st,2,D.y),Ft(st,3,D.z),D.visibility&&Ft(st,4,D.visibility),D=P(st,ge),z.call(U,Q,D)}if(S.V)for(F=0;F<S.V.length;++F)U=b.data,z=U.addClassification,Q=L,D=S.V[F],st=new kt,Ft(st,2,D.score),D.index&&Ft(st,1,D.index),D.label&&Ft(st,3,D.label),D.displayName&&Ft(st,4,D.displayName),D=P(st,Tt),z.call(U,Q,D)}b=b.data;break t;default:b={}}}switch(u=b,m=e.stream,e.type){case"video":N.pushTexture2d(Object.assign(Object.assign({},u),{stream:m,timestamp:Y}));break;case"detections":t=u,t.stream=m,t.timestamp=Y,N.pushDetectionList(t);break;default:throw Error("Unknown input config type: '"+e.type+"'")}}return I.i.send(N),O(c,I.D,4);case 4:N.delete(),c.g=0}})};function ht(l,v,I){var Y,N,o,d,g,e,u,m,t,c,a,b,S,L;return Zt(function(F){switch(F.g){case 1:if(!I)return F.return(v);for(Y={},N=0,o=T(Object.keys(I)),d=o.next();!d.done;d=o.next())g=d.value,e=I[g],typeof e!="string"&&e.type==="texture"&&v[e.stream]!==void 0&&++N;1<N&&(l.I=!1),u=T(Object.keys(I)),d=u.next();case 2:if(d.done){F.g=4;break}if(m=d.value,t=I[m],typeof t=="string")return S=Y,L=m,O(F,Wt(l,m,v[t]),14);if(c=v[t.stream],t.type==="detection_list"){if(c){for(var U=c.getRectList(),z=c.getLandmarksList(),Q=c.getClassificationsList(),D=[],st=0;st<U.size();++st){var ft=V(U.get(st),G,C);ft={ea:{ka:oe(ft,1),la:oe(ft,2),height:oe(ft,3),width:oe(ft,4),rotation:oe(ft,5,0),ia:se(ft,6)},Y:Le(V(z.get(st),ke,h),pe,1).map(M),V:_(V(Q.get(st),Et,Dt))},D.push(ft)}U=D}else U=[];Y[m]=U,F.g=7;break}if(t.type==="proto_list"){if(c){for(U=Array(c.size()),z=0;z<c.size();z++)U[z]=c.get(z);c.delete()}else U=[];Y[m]=U,F.g=7;break}if(c===void 0){F.g=3;break}if(t.type==="float_list"){Y[m]=c,F.g=7;break}if(t.type==="proto"){Y[m]=c,F.g=7;break}if(t.type!=="texture")throw Error("Unknown output config type: '"+t.type+"'");return a=l.u[m],a||(a=new ct(l.h,l.G),l.u[m]=a),O(F,s(a,c,l.I),13);case 13:b=F.h,Y[m]=b;case 7:t.transform&&Y[m]&&(Y[m]=t.transform(Y[m])),F.g=3;break;case 14:S[L]=F.h;case 3:d=u.next(),F.g=2;break;case 4:return F.return(Y)}})}function Wt(l,v,I){var Y;return Zt(function(N){return typeof I=="number"||I instanceof Uint8Array||I instanceof l.h.Uint8BlobList?N.return(I):I instanceof l.h.Texture2dDataOut?(Y=l.u[v],Y||(Y=new ct(l.h,l.G),l.u[v]=Y),N.return(s(Y,I,l.I))):N.return(void 0)})}function xt(l,v){for(var I=v.name||"$",Y=[].concat(J(v.wants)),N=new l.h.StringList,o=T(v.wants),d=o.next();!d.done;d=o.next())N.push_back(d.value);o=l.h.PacketListener.implement({onResults:function(g){for(var e={},u=0;u<v.wants.length;++u)e[Y[u]]=g.get(u);var m=l.listeners[I];m&&(l.D=ht(l,e,v.outs).then(function(t){t=m(t);for(var c=0;c<v.wants.length;++c){var a=e[Y[c]];typeof a=="object"&&a.hasOwnProperty&&a.hasOwnProperty("delete")&&a.delete()}t&&(l.D=t)}))}}),l.i.attachMultiListener(N,o),N.delete()}i.onResults=function(l,v){this.listeners[v||"$"]=l},Ct("Solution",$),Ct("OptionType",{BOOL:0,NUMBER:1,ma:2,0:"BOOL",1:"NUMBER",2:"STRING"});function wt(l){return l===void 0&&(l=0),l===1?"hand_landmark_full.tflite":"hand_landmark_lite.tflite"}function Ht(l){var v=this;l=l||{},this.g=new $({locateFile:l.locateFile,files:function(I){return[{url:"hands_solution_packed_assets_loader.js"},{simd:!1,url:"hands_solution_wasm_bin.js"},{simd:!0,url:"hands_solution_simd_wasm_bin.js"},{data:!0,url:wt(I.modelComplexity)}]},graph:{url:"hands.binarypb"},inputs:{image:{type:"video",stream:"input_frames_gpu"}},listeners:[{wants:["multi_hand_landmarks","multi_hand_world_landmarks","image_transformed","multi_handedness"],outs:{image:"image_transformed",multiHandLandmarks:{type:"proto_list",stream:"multi_hand_landmarks",transform:q},multiHandWorldLandmarks:{type:"proto_list",stream:"multi_hand_world_landmarks",transform:q},multiHandedness:{type:"proto_list",stream:"multi_handedness",transform:function(I){return I.map(function(Y){return _(V(Y,Et,Dt))[0]})}}}}],options:{useCpuInference:{type:0,graphOptionXref:{calculatorType:"InferenceCalculator",fieldName:"use_cpu_inference"},default:typeof window!="object"||window.navigator===void 0?!1:"iPad Simulator;iPhone Simulator;iPod Simulator;iPad;iPhone;iPod".split(";").includes(navigator.platform)||navigator.userAgent.includes("Mac")&&"ontouchend"in document},selfieMode:{type:0,graphOptionXref:{calculatorType:"GlScalerCalculator",calculatorIndex:1,fieldName:"flip_horizontal"}},maxNumHands:{type:1,graphOptionXref:{calculatorType:"ConstantSidePacketCalculator",calculatorName:"ConstantSidePacketCalculator",fieldName:"int_value"}},modelComplexity:{type:1,graphOptionXref:{calculatorType:"ConstantSidePacketCalculator",calculatorName:"ConstantSidePacketCalculatorModelComplexity",fieldName:"int_value"},onChange:function(I){var Y,N,o;return Zt(function(d){return d.g==1?(Y=wt(I),N="third_party/mediapipe/modules/hand_landmark/"+Y,O(d,It(v.g,Y),2)):(o=d.h,v.g.overrideFile(N,o),d.return(!0))})}},minDetectionConfidence:{type:1,graphOptionXref:{calculatorType:"TensorsToDetectionsCalculator",calculatorName:"handlandmarktrackinggpu__palmdetectiongpu__TensorsToDetectionsCalculator",fieldName:"min_score_thresh"}},minTrackingConfidence:{type:1,graphOptionXref:{calculatorType:"ThresholdingCalculator",calculatorName:"handlandmarktrackinggpu__handlandmarkgpu__ThresholdingCalculator",fieldName:"threshold"}}}})}i=Ht.prototype,i.close=function(){return this.g.close(),Promise.resolve()},i.onResults=function(l){this.g.onResults(l)},i.initialize=function(){var l=this;return Zt(function(v){return O(v,l.g.initialize(),0)})},i.reset=function(){this.g.reset()},i.send=function(l){var v=this;return Zt(function(I){return O(I,v.g.send(l),0)})},i.setOptions=function(l){this.g.setOptions(l)},Ct("Hands",Ht),Ct("HAND_CONNECTIONS",[[0,1],[1,2],[2,3],[3,4],[0,5],[5,6],[6,7],[7,8],[5,9],[9,10],[10,11],[11,12],[9,13],[13,14],[14,15],[15,16],[13,17],[0,17],[17,18],[18,19],[19,20]]),Ct("VERSION","0.4.1646424915")}).call(Xi);var Wi={};(function(){var i;function n(e){var u=0;return function(){return u<e.length?{done:!1,value:e[u++]}:{done:!0}}}var r=typeof Object.defineProperties=="function"?Object.defineProperty:function(e,u,m){return e==Array.prototype||e==Object.prototype||(e[u]=m.value),e};function f(e){e=[typeof globalThis=="object"&&globalThis,e,typeof window=="object"&&window,typeof self=="object"&&self,typeof global=="object"&&global];for(var u=0;u<e.length;++u){var m=e[u];if(m&&m.Math==Math)return m}throw Error("Cannot find global object")}var Z=f(this);function x(e,u){if(u)t:{var m=Z;e=e.split(".");for(var t=0;t<e.length-1;t++){var c=e[t];if(!(c in m))break t;m=m[c]}e=e[e.length-1],t=m[e],u=u(t),u!=t&&u!=null&&r(m,e,{configurable:!0,writable:!0,value:u})}}x("Symbol",function(e){function u(a){if(this instanceof u)throw new TypeError("Symbol is not a constructor");return new m(t+(a||"")+"_"+c++,a)}function m(a,b){this.g=a,r(this,"description",{configurable:!0,writable:!0,value:b})}if(e)return e;m.prototype.toString=function(){return this.g};var t="jscomp_symbol_"+(1e9*Math.random()>>>0)+"_",c=0;return u}),x("Symbol.iterator",function(e){if(e)return e;e=Symbol("Symbol.iterator");for(var u="Array Int8Array Uint8Array Uint8ClampedArray Int16Array Uint16Array Int32Array Uint32Array Float32Array Float64Array".split(" "),m=0;m<u.length;m++){var t=Z[u[m]];typeof t=="function"&&typeof t.prototype[e]!="function"&&r(t.prototype,e,{configurable:!0,writable:!0,value:function(){return H(n(this))}})}return e});function H(e){return e={next:e},e[Symbol.iterator]=function(){return this},e}function T(e){var u=typeof Symbol<"u"&&Symbol.iterator&&e[Symbol.iterator];return u?u.call(e):{next:n(e)}}function J(e){if(!(e instanceof Array)){e=T(e);for(var u,m=[];!(u=e.next()).done;)m.push(u.value);e=m}return e}var et=typeof Object.create=="function"?Object.create:function(e){function u(){}return u.prototype=e,new u},lt;if(typeof Object.setPrototypeOf=="function")lt=Object.setPrototypeOf;else{var pt;t:{var Yt={a:!0},Lt={};try{Lt.__proto__=Yt,pt=Lt.a;break t}catch{}pt=!1}lt=pt?function(e,u){if(e.__proto__=u,e.__proto__!==u)throw new TypeError(e+" is not extensible");return e}:null}var at=lt;function dt(e,u){if(e.prototype=et(u.prototype),e.prototype.constructor=e,at)at(e,u);else for(var m in u)if(m!="prototype")if(Object.defineProperties){var t=Object.getOwnPropertyDescriptor(u,m);t&&Object.defineProperty(e,m,t)}else e[m]=u[m];e.da=u.prototype}function Bt(){this.l=!1,this.i=null,this.h=void 0,this.g=1,this.s=this.m=0,this.j=null}function Nt(e){if(e.l)throw new TypeError("Generator is already running");e.l=!0}Bt.prototype.o=function(e){this.h=e};function ee(e,u){e.j={U:u,V:!0},e.g=e.m||e.s}Bt.prototype.return=function(e){this.j={return:e},this.g=this.s};function O(e,u,m){return e.g=m,{value:u}}function $e(e){this.g=new Bt,this.h=e}function je(e,u){Nt(e.g);var m=e.g.i;return m?We(e,"return"in m?m.return:function(t){return{value:t,done:!0}},u,e.g.return):(e.g.return(u),zt(e))}function We(e,u,m,t){try{var c=u.call(e.g.i,m);if(!(c instanceof Object))throw new TypeError("Iterator result "+c+" is not an object");if(!c.done)return e.g.l=!1,c;var a=c.value}catch(b){return e.g.i=null,ee(e.g,b),zt(e)}return e.g.i=null,t.call(e.g,a),zt(e)}function zt(e){for(;e.g.g;)try{var u=e.h(e.g);if(u)return e.g.l=!1,{value:u.value,done:!1}}catch(m){e.g.h=void 0,ee(e.g,m)}if(e.g.l=!1,e.g.j){if(u=e.g.j,e.g.j=null,u.V)throw u.U;return{value:u.return,done:!0}}return{value:void 0,done:!0}}function Jn(e){this.next=function(u){return Nt(e.g),e.g.i?u=We(e,e.g.i.next,u,e.g.o):(e.g.o(u),u=zt(e)),u},this.throw=function(u){return Nt(e.g),e.g.i?u=We(e,e.g.i.throw,u,e.g.o):(ee(e.g,u),u=zt(e)),u},this.return=function(u){return je(e,u)},this[Symbol.iterator]=function(){return this}}function ne(e){function u(t){return e.next(t)}function m(t){return e.throw(t)}return new Promise(function(t,c){function a(b){b.done?t(b.value):Promise.resolve(b.value).then(u,m).then(a,c)}a(e.next())})}function Zt(e){return ne(new Jn(new $e(e)))}x("Promise",function(e){function u(b){this.h=0,this.i=void 0,this.g=[],this.o=!1;var S=this.j();try{b(S.resolve,S.reject)}catch(L){S.reject(L)}}function m(){this.g=null}function t(b){return b instanceof u?b:new u(function(S){S(b)})}if(e)return e;m.prototype.h=function(b){if(this.g==null){this.g=[];var S=this;this.i(function(){S.l()})}this.g.push(b)};var c=Z.setTimeout;m.prototype.i=function(b){c(b,0)},m.prototype.l=function(){for(;this.g&&this.g.length;){var b=this.g;this.g=[];for(var S=0;S<b.length;++S){var L=b[S];b[S]=null;try{L()}catch(F){this.j(F)}}}this.g=null},m.prototype.j=function(b){this.i(function(){throw b})},u.prototype.j=function(){function b(F){return function(U){L||(L=!0,F.call(S,U))}}var S=this,L=!1;return{resolve:b(this.C),reject:b(this.l)}},u.prototype.C=function(b){if(b===this)this.l(new TypeError("A Promise cannot resolve to itself"));else if(b instanceof u)this.F(b);else{t:switch(typeof b){case"object":var S=b!=null;break t;case"function":S=!0;break t;default:S=!1}S?this.v(b):this.m(b)}},u.prototype.v=function(b){var S=void 0;try{S=b.then}catch(L){this.l(L);return}typeof S=="function"?this.G(S,b):this.m(b)},u.prototype.l=function(b){this.s(2,b)},u.prototype.m=function(b){this.s(1,b)},u.prototype.s=function(b,S){if(this.h!=0)throw Error("Cannot settle("+b+", "+S+"): Promise already settled in state"+this.h);this.h=b,this.i=S,this.h===2&&this.D(),this.A()},u.prototype.D=function(){var b=this;c(function(){if(b.B()){var S=Z.console;typeof S<"u"&&S.error(b.i)}},1)},u.prototype.B=function(){if(this.o)return!1;var b=Z.CustomEvent,S=Z.Event,L=Z.dispatchEvent;return typeof L>"u"?!0:(typeof b=="function"?b=new b("unhandledrejection",{cancelable:!0}):typeof S=="function"?b=new S("unhandledrejection",{cancelable:!0}):(b=Z.document.createEvent("CustomEvent"),b.initCustomEvent("unhandledrejection",!1,!0,b)),b.promise=this,b.reason=this.i,L(b))},u.prototype.A=function(){if(this.g!=null){for(var b=0;b<this.g.length;++b)a.h(this.g[b]);this.g=null}};var a=new m;return u.prototype.F=function(b){var S=this.j();b.J(S.resolve,S.reject)},u.prototype.G=function(b,S){var L=this.j();try{b.call(S,L.resolve,L.reject)}catch(F){L.reject(F)}},u.prototype.then=function(b,S){function L(Q,D){return typeof Q=="function"?function(st){try{F(Q(st))}catch(ft){U(ft)}}:D}var F,U,z=new u(function(Q,D){F=Q,U=D});return this.J(L(b,F),L(S,U)),z},u.prototype.catch=function(b){return this.then(void 0,b)},u.prototype.J=function(b,S){function L(){switch(F.h){case 1:b(F.i);break;case 2:S(F.i);break;default:throw Error("Unexpected state: "+F.h)}}var F=this;this.g==null?a.h(L):this.g.push(L),this.o=!0},u.resolve=t,u.reject=function(b){return new u(function(S,L){L(b)})},u.race=function(b){return new u(function(S,L){for(var F=T(b),U=F.next();!U.done;U=F.next())t(U.value).J(S,L)})},u.all=function(b){var S=T(b),L=S.next();return L.done?t([]):new u(function(F,U){function z(st){return function(ft){Q[st]=ft,D--,D==0&&F(Q)}}var Q=[],D=0;do Q.push(void 0),D++,t(L.value).J(z(Q.length-1),U),L=S.next();while(!L.done)})},u});function qe(e,u){e instanceof String&&(e+="");var m=0,t=!1,c={next:function(){if(!t&&m<e.length){var a=m++;return{value:u(a,e[a]),done:!1}}return t=!0,{done:!0,value:void 0}}};return c[Symbol.iterator]=function(){return c},c}var zn=typeof Object.assign=="function"?Object.assign:function(e,u){for(var m=1;m<arguments.length;m++){var t=arguments[m];if(t)for(var c in t)Object.prototype.hasOwnProperty.call(t,c)&&(e[c]=t[c])}return e};x("Object.assign",function(e){return e||zn}),x("Object.is",function(e){return e||function(u,m){return u===m?u!==0||1/u===1/m:u!==u&&m!==m}}),x("Array.prototype.includes",function(e){return e||function(u,m){var t=this;t instanceof String&&(t=String(t));var c=t.length;for(m=m||0,0>m&&(m=Math.max(m+c,0));m<c;m++){var a=t[m];if(a===u||Object.is(a,u))return!0}return!1}}),x("String.prototype.includes",function(e){return e||function(u,m){if(this==null)throw new TypeError("The 'this' value for String.prototype.includes must not be null or undefined");if(u instanceof RegExp)throw new TypeError("First argument to String.prototype.includes must not be a regular expression");return this.indexOf(u,m||0)!==-1}}),x("Array.prototype.keys",function(e){return e||function(){return qe(this,function(u){return u})}});var Re=this||self;function Ct(e,u){e=e.split(".");var m=Re;e[0]in m||typeof m.execScript>"u"||m.execScript("var "+e[0]);for(var t;e.length&&(t=e.shift());)e.length||u===void 0?m[t]&&m[t]!==Object.prototype[t]?m=m[t]:m=m[t]={}:m[t]=u}function Te(e){Re.setTimeout(function(){throw e},0)}function ln(e){Te(e)}function Xn(e,u){ln(Error("Invalid wire type: "+e+" (at position "+u+")"))}function Hn(){ln(Error("Failed to read varint, encoding is invalid."))}function In(e,u){return u=String.fromCharCode.apply(null,u),e==null?u:e+u}var kn,hn=typeof TextDecoder<"u",bn,En=typeof TextEncoder<"u";function Fn(e){if(En)e=(bn||(bn=new TextEncoder)).encode(e);else{var u=void 0;u=u===void 0?!1:u;for(var m=0,t=new Uint8Array(3*e.length),c=0;c<e.length;c++){var a=e.charCodeAt(c);if(128>a)t[m++]=a;else{if(2048>a)t[m++]=a>>6|192;else{if(55296<=a&&57343>=a){if(56319>=a&&c<e.length){var b=e.charCodeAt(++c);if(56320<=b&&57343>=b){a=1024*(a-55296)+b-56320+65536,t[m++]=a>>18|240,t[m++]=a>>12&63|128,t[m++]=a>>6&63|128,t[m++]=a&63|128;continue}else c--}if(u)throw Error("Found an unpaired surrogate");a=65533}t[m++]=a>>12|224,t[m++]=a>>6&63|128}t[m++]=a&63|128}}e=t.subarray(0,m)}return e}var Pe={},Ae=null;function xn(e){var u;u===void 0&&(u=0),Se(),u=Pe[u];for(var m=Array(Math.floor(e.length/3)),t=u[64]||"",c=0,a=0;c<e.length-2;c+=3){var b=e[c],S=e[c+1],L=e[c+2],F=u[b>>2];b=u[(b&3)<<4|S>>4],S=u[(S&15)<<2|L>>6],L=u[L&63],m[a++]=F+b+S+L}switch(F=0,L=t,e.length-c){case 2:F=e[c+1],L=u[(F&15)<<2]||t;case 1:e=e[c],m[a]=u[e>>2]+u[(e&3)<<4|F>>4]+L+t}return m.join("")}function Wn(e){var u=e.length,m=3*u/4;m%3?m=Math.floor(m):"=.".indexOf(e[u-1])!=-1&&(m="=.".indexOf(e[u-2])!=-1?m-2:m-1);var t=new Uint8Array(m),c=0;return he(e,function(a){t[c++]=a}),t.subarray(0,c)}function he(e,u){function m(L){for(;t<e.length;){var F=e.charAt(t++),U=Ae[F];if(U!=null)return U;if(!/^[\s\xa0]*$/.test(F))throw Error("Unknown base64 encoding at char: "+F)}return L}Se();for(var t=0;;){var c=m(-1),a=m(0),b=m(64),S=m(64);if(S===64&&c===-1)break;u(c<<2|a>>4),b!=64&&(u(a<<4&240|b>>2),S!=64&&u(b<<6&192|S))}}function Se(){if(!Ae){Ae={};for(var e="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789".split(""),u=["+/=","+/","-_=","-_.","-_"],m=0;5>m;m++){var t=e.concat(u[m].split(""));Pe[m]=t;for(var c=0;c<t.length;c++){var a=t[c];Ae[a]===void 0&&(Ae[a]=c)}}}}var Oe=typeof Uint8Array=="function",re;function Ve(e){if(this.g=e,e!==null&&e.length===0)throw Error("ByteString should be constructed with non-empty values")}Ve.prototype.toJSON=function(){if(this.g==null)var e="";else e=this.g,e=this.g=e==null||typeof e=="string"?e:Oe&&e instanceof Uint8Array?xn(e):null;return e};var cn=typeof Uint8Array.prototype.slice=="function";function Be(e,u,m){return u===m?re||(re=new Uint8Array(0)):cn?e.slice(u,m):new Uint8Array(e.subarray(u,m))}var Qt=0,Ze=0;function Fe(e){if(e.constructor===Uint8Array)return e;if(e.constructor===ArrayBuffer)return new Uint8Array(e);if(e.constructor===Array)return new Uint8Array(e);if(e.constructor===String)return Wn(e);if(e.constructor===Ve){if(e.g==null)var u=re||(re=new Uint8Array(0));else{u=Uint8Array;var m=e.g;m=m==null||Oe&&m!=null&&m instanceof Uint8Array?m:typeof m=="string"?Wn(m):null,e=e.g=m,u=new u(e)}return u}if(e instanceof Uint8Array)return new Uint8Array(e.buffer,e.byteOffset,e.byteLength);throw Error("Type not convertible to a Uint8Array, expected a Uint8Array, an ArrayBuffer, a base64 encoded string, or Array of numbers")}function Mt(e,u){u=u===void 0?{}:u,u=u.u===void 0?!1:u.u,this.h=null,this.g=this.i=this.m=0,this.l=!1,this.u=u,e&&Ie(this,e)}function Ie(e,u){e.h=Fe(u),e.m=0,e.i=e.h.length,e.g=e.m}Mt.prototype.reset=function(){this.g=this.m};function jt(e){for(var u=128,m=0,t=0,c=0;4>c&&128<=u;c++)u=e.h[e.g++],m|=(u&127)<<7*c;if(128<=u&&(u=e.h[e.g++],m|=(u&127)<<28,t|=(u&127)>>4),128<=u)for(c=0;5>c&&128<=u;c++)u=e.h[e.g++],t|=(u&127)<<7*c+3;if(128>u)return e=m>>>0,u=t>>>0,(t=u&2147483648)&&(e=~e+1>>>0,u=~u>>>0,e==0&&(u=u+1>>>0)),e=4294967296*u+(e>>>0),t?-e:e;e.l=!0,Hn()}function ye(e){e.g>e.i&&(e.l=!0,ln(Error("Tried to read past the end of the data "+e.g+" > "+e.i)))}Mt.prototype.j=function(){var e=this.h,u=e[this.g],m=u&127;return 128>u?(this.g+=1,ye(this),m):(u=e[this.g+1],m|=(u&127)<<7,128>u?(this.g+=2,ye(this),m):(u=e[this.g+2],m|=(u&127)<<14,128>u?(this.g+=3,ye(this),m):(u=e[this.g+3],m|=(u&127)<<21,128>u?(this.g+=4,ye(this),m):(u=e[this.g+4],m|=(u&15)<<28,128>u?(this.g+=5,ye(this),m>>>0):(this.g+=5,128<=e[this.g++]&&128<=e[this.g++]&&128<=e[this.g++]&&128<=e[this.g++]&&128<=e[this.g++]?(this.l=!0,Hn(),m):(ye(this),m))))))},Mt.prototype.o=function(){var e=this.h[this.g],u=this.h[this.g+1],m=this.h[this.g+2],t=this.h[this.g+3];return this.g+=4,ye(this),m=(e<<0|u<<8|m<<16|t<<24)>>>0,e=2*(m>>31)+1,u=m>>>23&255,m&=8388607,u==255?m?NaN:1/0*e:u==0?e*Math.pow(2,-149)*m:e*Math.pow(2,u-150)*(m+Math.pow(2,23))};var Ye=[];function tn(){this.g=new Uint8Array(64),this.h=0}function Xe(e,u){if(!(e.h+1<e.g.length)){var m=e.g;e.g=new Uint8Array(Math.ceil(1+2*e.g.length)),e.g.set(m)}e.g[e.h++]=u}tn.prototype.length=function(){return this.h},tn.prototype.end=function(){var e=this.g,u=this.h;return this.h=0,Be(e,0,u)};function Pt(e,u){for(;127<u;)Xe(e,u&127|128),u>>>=7;Xe(e,u)}function ze(e){var u={},m=u.N===void 0?!1:u.N;this.m={u:u.u===void 0?!1:u.u},this.N=m,u=this.m,Ye.length?(m=Ye.pop(),u&&(m.u=u.u),e&&Ie(m,e),e=m):e=new Mt(e,u),this.g=e,this.l=this.g.g,this.h=this.i=-1,this.j=!1}ze.prototype.reset=function(){this.g.reset(),this.h=this.i=-1};function _e(e){var u=e.g;if((u=u.g==u.i)||(u=e.j)||(u=e.g,u=u.l||0>u.g||u.g>u.i),u)return!1;e.l=e.g.g;var m=e.g.j();return u=m>>>3,m&=7,0<=m&&5>=m?(e.i=u,e.h=m,!0):(e.j=!0,Xn(m,e.l),!1)}function xe(e){switch(e.h){case 0:if(e.h!=0)xe(e);else t:{e=e.g;for(var u=e.g,m=0;10>m;m++){if((e.h[u]&128)===0){e.g=u+1,ye(e);break t}u++}e.l=!0,Hn()}break;case 1:e=e.g,e.g+=8,ye(e);break;case 2:e.h!=2?xe(e):(u=e.g.j(),e=e.g,e.g+=u,ye(e));break;case 5:e=e.g,e.g+=4,ye(e);break;case 3:u=e.i;do{if(!_e(e)){e.j=!0,ln(Error("Unmatched start-group tag: stream EOF"));break}if(e.h==4){e.i!=u&&(e.j=!0,ln(Error("Unmatched end-group tag")));break}xe(e)}while(1);break;default:e.j=!0,Xn(e.h,e.l)}}function Vn(e,u,m){e.N||(e=Be(e.g.h,m,e.g.g),(m=u.o)?m.push(e):u.o=[e])}function un(e,u,m){var t=e.g.i,c=e.g.j(),a=e.g.g+c;if(e.g.i=a,m(u,e),m=a-e.g.g,m!==0)throw Error("Message parsing ended unexpectedly. Expected to read "+(c+" bytes, instead read "+(c-m)+" bytes, either the data ended unexpectedly or the message misreported its own length"));return e.g.g=a,e.g.i=t,u}function Qe(e,u,m){var t=e.g.j();for(t=e.g.g+t;e.g.g<t;)m.push(u.call(e.g))}var an=[];function ve(){this.h=[],this.i=0,this.g=new tn}function we(e,u){u.length!==0&&(e.h.push(u),e.i+=u.length)}function Ge(e,u,m){Pt(e.g,8*u+2),Pt(e.g,m.length),we(e,e.g.end()),we(e,m)}var ie=typeof Symbol=="function"&&typeof Symbol()=="symbol"?Symbol(void 0):void 0;function De(e,u){Object.isFrozen(e)||(ie?e[ie]|=u:e.g!==void 0?e.g|=u:Object.defineProperties(e,{g:{value:u,configurable:!0,writable:!0,enumerable:!1}}))}function qt(e){if(!e)return 0;var u;return ie?u=e[ie]:u=e.g,u==null?0:u}function Ot(e){return Array.isArray(e)&&De(e,1),e}function fn(e){if(!Array.isArray(e))throw Error("cannot mark non-array as immutable");De(e,2)}function fe(e){return e!==null&&typeof e=="object"&&e.constructor===Object}function Ft(e){switch(typeof e){case"number":return isFinite(e)?e:String(e);case"object":return Oe&&e!=null&&e instanceof Uint8Array?xn(e):e;default:return e}}function Vt(e,u){if(e!=null)return Array.isArray(e)||fe(e)?oe(e,u):u(e)}function oe(e,u){if(Array.isArray(e)){for(var m=Array(e.length),t=0;t<e.length;t++)m[t]=Vt(e[t],u);return qt(e)&1&&Ot(m),m}m={};for(t in e)m[t]=Vt(e[t],u);return m}var Le;function te(e,u,m){var t=Le;Le=null,e||(e=t),t=this.constructor.ba,e||(e=t?[t]:[]),this.j=(t?0:-1)-(this.constructor.$||0),this.m=this.g=null,this.h=e;t:{if(t=this.h.length,e=t-1,t&&(t=this.h[e],fe(t))){this.l=e-this.j,this.i=t;break t}u!==void 0&&-1<u?(this.l=Math.max(u,e+1-this.j),this.i=null):this.l=Number.MAX_VALUE}if(m)for(u=0;u<m.length;u++)e=m[u],e<this.l?(e+=this.j,(t=this.h[e])?Ot(t):this.h[e]=se):(tt(this),(t=this.i[e])?Ot(t):this.i[e]=se)}var se=Object.freeze(Ot([]));function tt(e){var u=e.l+e.j;e.h[u]||(e.i=e.h[u]={})}function it(e,u,m){return u===-1?null:(m===void 0?0:m)||u>=e.l?e.i?e.i[u]:void 0:e.h[u+e.j]}function ut(e,u,m){m=m===void 0?!0:m;var t=t===void 0?!1:t,c=it(e,u,t);return c==null&&(c=se),c===se?(c=Ot([]),St(e,u,c,t)):m&&Array.isArray(c)&&qt(c)&2&&(c=c.slice(),St(e,u,c,t)),c}function _t(e){var u=ut(e,3,!1);if(e.m||(e.m={}),!e.m[3]){for(var m=0;m<u.length;m++)u[m]=+u[m];e.m[3]=!0}return u}function de(e,u,m){return e=it(e,u),e==null?m:e}function ue(e,u,m){return e=it(e,u),e=e==null?e:+e,e==null?m===void 0?0:m:e}function St(e,u,m,t){(t===void 0?0:t)||u>=e.l?(tt(e),e.i[u]=m):e.h[u+e.j]=m}function me(e,u,m){if(m===-1)return null;e.g||(e.g={});var t=e.g[m];if(t)return t;var c=it(e,m,!1);return c==null?t:(u=new u(c),e.g[m]=u)}function Ce(e,u,m){e.g||(e.g={});var t=e.g[m];if(!t){var c=ut(e,m,!1);t=[];for(var a=Array.isArray(c)?!!(qt(c)&2):!1,b=0;b<c.length;b++)t[b]=new u(c[b]),a&&fn(t[b].h);a&&(fn(t),Object.freeze(t)),e.g[m]=t}return t}function en(e,u,m,t,c){var a=Ce(e,t,u);m=m||new t,e=ut(e,u),c!=null?(a.splice(c,0,m),e.splice(c,0,nn(m))):(a.push(m),e.push(nn(m)))}te.prototype.toJSON=function(){var e=nn(this);return oe(e,Ft)};function nn(e){if(e.g)for(var u in e.g){var m=e.g[u];if(Array.isArray(m))for(var t=0;t<m.length;t++)m[t]&&nn(m[t]);else m&&nn(m)}return e.h}te.prototype.toString=function(){return nn(this).toString()};function mn(e,u){if(e=e.o){we(u,u.g.end());for(var m=0;m<e.length;m++)we(u,e[m])}}function yn(e){var u=e[0];switch(e.length){case 2:var m=e[1];return function(L,F,U){return u(L,F,U,m)};case 3:var t=e[1],c=e[2];return function(L,F,U){return u(L,F,U,t,c)};case 4:var a=e[1],b=e[2],S=e[3];return function(L,F,U){return u(L,F,U,a,b,S)};default:throw Error("unsupported number of parameters, expected [2-4], got "+e.length)}}function He(e,u,m){for(;_e(u)&&u.h!=4;){var t=u.i,c=m[t];if(c){if(Array.isArray(c)&&(c=m[t]=yn(c)),!c(u,e,t)){t=u,c=e;var a=t.l;xe(t),Vn(t,c,a)}}else t=u,c=e,a=t.l,xe(t),Vn(t,c,a)}return e}function rn(e,u){var m=new ve;if(u(e,m),e=m.i+m.g.length(),e===0)m=new Uint8Array(0);else{e=new Uint8Array(e);for(var t=m.h,c=t.length,a=u=0;a<c;a++){var b=t[a];b.length!==0&&(e.set(b,u),u+=b.length)}t=m.g,c=t.h,c!==0&&(e.set(t.g.subarray(0,c),u),t.h=0),m.h=[e],m=e}return m}function jn(e,u,m){if(an.length){var t=an.pop();e&&(Ie(t.g,e),t.i=-1,t.h=-1),e=t}else e=new ze(e);try{return m(new u,e)}finally{u=e.g,u.h=null,u.m=0,u.i=0,u.g=0,u.l=!1,u.u=!1,e.i=-1,e.h=-1,e.j=!1,100>an.length&&an.push(e)}}function on(e,u,m){if(u=it(u,m),u!=null){Pt(e.g,8*m+5),e=e.g;var t=u;t=(m=0>t?1:0)?-t:t,t===0?0<1/t?Qt=Ze=0:(Ze=0,Qt=2147483648):isNaN(t)?(Ze=0,Qt=2147483647):34028234663852886e22<t?(Ze=0,Qt=(m<<31|2139095040)>>>0):11754943508222875e-54>t?(t=Math.round(t/Math.pow(2,-149)),Ze=0,Qt=(m<<31|t)>>>0):(u=Math.floor(Math.log(t)/Math.LN2),t*=Math.pow(2,-u),t=Math.round(8388608*t),16777216<=t&&++u,Ze=0,Qt=(m<<31|u+127<<23|t&8388607)>>>0),m=Qt,Xe(e,m>>>0&255),Xe(e,m>>>8&255),Xe(e,m>>>16&255),Xe(e,m>>>24&255)}}function Je(e,u,m){return e.h!==5?!1:(St(u,m,e.g.o()),!0)}function Zn(e,u,m){return e.h!==5&&e.h!==2?!1:(u=ut(u,m),e.h==2?Qe(e,Mt.prototype.o,u):u.push(e.g.o()),!0)}function Sn(e,u,m){return e.h!==0?!1:(St(u,m,jt(e.g)),!0)}function Ke(e,u,m){return e.h!==0?!1:(St(u,m,e.g.j()),!0)}function Un(e,u,m){if(e.h!==2)return!1;var t=e.g.j();e=e.g;var c=e.g;e.g+=t,ye(e),e=e.h;var a;if(hn)(a=kn)||(a=kn=new TextDecoder("utf-8",{fatal:!1})),a=a.decode(e.subarray(c,c+t));else{t=c+t;for(var b=[],S=null,L,F,U;c<t;)L=e[c++],128>L?b.push(L):224>L?c>=t?b.push(65533):(F=e[c++],194>L||(F&192)!==128?(c--,b.push(65533)):b.push((L&31)<<6|F&63)):240>L?c>=t-1?b.push(65533):(F=e[c++],(F&192)!==128||L===224&&160>F||L===237&&160<=F||((a=e[c++])&192)!==128?(c--,b.push(65533)):b.push((L&15)<<12|(F&63)<<6|a&63)):244>=L?c>=t-2?b.push(65533):(F=e[c++],(F&192)!==128||(L<<28)+(F-144)>>30!==0||((a=e[c++])&192)!==128||((U=e[c++])&192)!==128?(c--,b.push(65533)):(L=(L&7)<<18|(F&63)<<12|(a&63)<<6|U&63,L-=65536,b.push((L>>10&1023)+55296,(L&1023)+56320))):b.push(65533),8192<=b.length&&(S=In(S,b),b.length=0);a=In(S,b)}return St(u,m,a),!0}function sn(e,u,m,t,c){if(e.h!==2)return!1;e=un(e,new t,c);var a=a===void 0?!1:a;return u.g||(u.g={}),t=e&&nn(e),u.g[m]=e,St(u,m,t,a),!0}function vn(e,u,m,t,c){return e.h!==2?!1:(e=un(e,new t,c),en(u,m,e,t,void 0),!0)}function Tn(e,u,m){return e.h!==0&&e.h!==2?!1:(u=ut(u,m),e.h==2?Qe(e,Mt.prototype.j,u):u.push(e.g.j()),!0)}function Mn(e,u,m){return e.h!==0?!1:(St(u,m,jt(e.g)),!0)}function dn(e){te.call(this,e,-1,Qn)}var Yn;dt(dn,te),dn.prototype.getRows=function(){return it(this,1)},dn.prototype.getCols=function(){return it(this,2)},dn.prototype.getPackedDataList=function(){return _t(this)},dn.prototype.getLayout=function(){return de(this,4,0)};function _n(e,u){return He(e,u,Yn||(Yn={1:Ke,2:Ke,3:Zn,4:Mn}))}var Qn=[3];function wn(e){te.call(this,e)}var Cn;dt(wn,te);function p(e,u){var m=it(e,1);if(m!=null&&m!=null){Pt(u.g,8);var t=u.g;if(0<=m)Pt(t,m);else{for(var c=0;9>c;c++)Xe(t,m&127|128),m>>=7;Xe(t,1)}}on(u,e,2),t=it(e,3),t!=null&&Ge(u,3,Fn(t)),t=it(e,4),t!=null&&Ge(u,4,Fn(t)),mn(e,u)}function W(e,u){return He(e,u,Cn||(Cn={1:Ke,2:Je,3:Un,4:Un}))}function V(e){te.call(this,e,-1,ot)}var E;dt(V,te),V.prototype.addClassification=function(e,u){return en(this,1,e,wn,u),this};function P(e,u){return He(e,u,E||(E={1:[vn,wn,W]}))}var ot=[1];function j(e){te.call(this,e)}var rt;dt(j,te);function bt(e,u){on(u,e,1),on(u,e,2),on(u,e,3),on(u,e,4),on(u,e,5),mn(e,u)}function Rt(e,u){return He(e,u,rt||(rt={1:Je,2:Je,3:Je,4:Je,5:Je}))}function Ut(e){te.call(this,e,-1,kt)}var Jt;dt(Ut,te);function $t(e,u){return He(e,u,Jt||(Jt={1:[vn,j,Rt]}))}var kt=[1];function Tt(e){te.call(this,e)}var Et;dt(Tt,te);function Dt(e,u){on(u,e,1),on(u,e,2),on(u,e,3),on(u,e,4),on(u,e,5);var m=it(e,6);if(m!=null&&m!=null){Pt(u.g,48);var t=u.g,c=m;m=0>c,c=Math.abs(c);var a=c>>>0;for(c=Math.floor((c-a)/4294967296),c>>>=0,m&&(c=~c>>>0,a=(~a>>>0)+1,4294967295<a&&(a=0,c++,4294967295<c&&(c=0))),Qt=a,Ze=c,m=Qt,a=Ze;0<a||127<m;)Xe(t,m&127|128),m=(m>>>7|a<<25)>>>0,a>>>=7;Xe(t,m)}mn(e,u)}function ae(e,u){return He(e,u,Et||(Et={1:Je,2:Je,3:Je,4:Je,5:Je,6:Sn}))}function pe(e){te.call(this,e,-1,h)}var ge;dt(pe,te),pe.prototype.getVertexType=function(){return de(this,1,0)},pe.prototype.getPrimitiveType=function(){return de(this,2,0)},pe.prototype.getVertexBufferList=function(){return _t(this)},pe.prototype.getIndexBufferList=function(){return ut(this,4)};function ke(e,u){return He(e,u,ge||(ge={1:Mn,2:Mn,3:Zn,4:Tn}))}var h=[3,4];function y(e){te.call(this,e)}var G;dt(y,te),y.prototype.getMesh=function(){return me(this,pe,1)},y.prototype.getPoseTransformMatrix=function(){return me(this,dn,2)};function C(e,u){return He(e,u,G||(G={1:[sn,pe,ke],2:[sn,dn,_n]}))}var K=[[61,146],[146,91],[91,181],[181,84],[84,17],[17,314],[314,405],[405,321],[321,375],[375,291],[61,185],[185,40],[40,39],[39,37],[37,0],[0,267],[267,269],[269,270],[270,409],[409,291],[78,95],[95,88],[88,178],[178,87],[87,14],[14,317],[317,402],[402,318],[318,324],[324,308],[78,191],[191,80],[80,81],[81,82],[82,13],[13,312],[312,311],[311,310],[310,415],[415,308]],_=[[263,249],[249,390],[390,373],[373,374],[374,380],[380,381],[381,382],[382,362],[263,466],[466,388],[388,387],[387,386],[386,385],[385,384],[384,398],[398,362]],M=[[276,283],[283,282],[282,295],[295,285],[300,293],[293,334],[334,296],[296,336]],q=[[33,7],[7,163],[163,144],[144,145],[145,153],[153,154],[154,155],[155,133],[33,246],[246,161],[161,160],[160,159],[159,158],[158,157],[157,173],[173,133]],ct=[[46,53],[53,52],[52,65],[65,55],[70,63],[63,105],[105,66],[66,107]],s=[[10,338],[338,297],[297,332],[332,284],[284,251],[251,389],[389,356],[356,454],[454,323],[323,361],[361,288],[288,397],[397,365],[365,379],[379,378],[378,400],[400,377],[377,152],[152,148],[148,176],[176,149],[149,150],[150,136],[136,172],[172,58],[58,132],[132,93],[93,234],[234,127],[127,162],[162,21],[21,54],[54,103],[103,67],[67,109],[109,10]],X=[].concat(J(K),J(_),J(M),J(q),J(ct),J(s));function R(e,u,m){if(m=e.createShader(m===0?e.VERTEX_SHADER:e.FRAGMENT_SHADER),e.shaderSource(m,u),e.compileShader(m),!e.getShaderParameter(m,e.COMPILE_STATUS))throw Error(`Could not compile WebGL shader.
|
|
36
|
+
`+x.getProgramInfoLog(o));Y=l.o=o,x.useProgram(Y),k=x.getUniformLocation(Y,"sampler0"),l.j={K:x.getAttribLocation(Y,"aVertex"),J:x.getAttribLocation(Y,"aTex"),qa:k},l.u=x.createBuffer(),x.bindBuffer(x.ARRAY_BUFFER,l.u),x.enableVertexAttribArray(l.j.K),x.vertexAttribPointer(l.j.K,2,x.FLOAT,!1,0,0),x.bufferData(x.ARRAY_BUFFER,new Float32Array([-1,-1,-1,1,1,1,1,-1]),x.STATIC_DRAW),x.bindBuffer(x.ARRAY_BUFFER,null),l.s=x.createBuffer(),x.bindBuffer(x.ARRAY_BUFFER,l.s),x.enableVertexAttribArray(l.j.J),x.vertexAttribPointer(l.j.J,2,x.FLOAT,!1,0,0),x.bufferData(x.ARRAY_BUFFER,new Float32Array([0,1,0,0,1,0,1,1]),x.STATIC_DRAW),x.bindBuffer(x.ARRAY_BUFFER,null),x.uniform1i(k,0)}Y=l.j,x.useProgram(l.o),x.canvas.width=v.width,x.canvas.height=v.height,x.viewport(0,0,v.width,v.height),x.activeTexture(x.TEXTURE0),l.h.bindTexture2d(v.glName),x.enableVertexAttribArray(Y.K),x.bindBuffer(x.ARRAY_BUFFER,l.u),x.vertexAttribPointer(Y.K,2,x.FLOAT,!1,0,0),x.enableVertexAttribArray(Y.J),x.bindBuffer(x.ARRAY_BUFFER,l.s),x.vertexAttribPointer(Y.J,2,x.FLOAT,!1,0,0),x.bindFramebuffer(x.DRAW_FRAMEBUFFER?x.DRAW_FRAMEBUFFER:x.FRAMEBUFFER,null),x.clearColor(0,0,0,0),x.clear(x.COLOR_BUFFER_BIT),x.colorMask(!0,!0,!0,!0),x.drawArrays(x.TRIANGLE_FAN,0,4),x.disableVertexAttribArray(Y.K),x.disableVertexAttribArray(Y.J),x.bindBuffer(x.ARRAY_BUFFER,null),l.h.bindTexture2d(0)}function R(l){this.g=l}var w=new Uint8Array([0,97,115,109,1,0,0,0,1,4,1,96,0,0,3,2,1,0,10,9,1,7,0,65,0,253,15,26,11]);function N(l,v){return v+l}function A(l,v){window[l]=v}function B(l){var v=document.createElement("script");return v.setAttribute("src",l),v.setAttribute("crossorigin","anonymous"),new Promise(function(x){v.addEventListener("load",function(){x()},!1),v.addEventListener("error",function(){x()},!1),document.body.appendChild(v)})}function nt(){return Zt(function(l){switch(l.g){case 1:return l.o=2,P(l,WebAssembly.instantiate(w),4);case 4:l.g=3,l.o=0;break;case 2:return l.o=0,l.j=null,l.return(!1);case 3:return l.return(!0)}})}function $(l){if(this.g=l,this.listeners={},this.j={},this.H={},this.o={},this.u={},this.I=this.s=this.$=!0,this.D=Promise.resolve(),this.Z="",this.C={},this.locateFile=l&&l.locateFile||N,typeof window=="object")var v=window.location.pathname.toString().substring(0,window.location.pathname.toString().lastIndexOf("/"))+"/";else if(typeof location<"u")v=location.pathname.toString().substring(0,location.pathname.toString().lastIndexOf("/"))+"/";else throw Error("solutions can only be loaded on a web page or in a web worker");if(this.aa=v,l.options){v=T(Object.keys(l.options));for(var x=v.next();!x.done;x=v.next()){x=x.value;var Y=l.options[x].default;Y!==void 0&&(this.j[x]=typeof Y=="function"?Y():Y)}}}i=$.prototype,i.close=function(){return this.i&&this.i.delete(),Promise.resolve()};function yt(l){var v,x,Y,k,o,d,g,e,u,m,t;return Zt(function(c){switch(c.g){case 1:return l.$?(v=l.g.files===void 0?[]:typeof l.g.files=="function"?l.g.files(l.j):l.g.files,P(c,nt(),2)):c.return();case 2:if(x=c.h,typeof window=="object")return A("createMediapipeSolutionsWasm",{locateFile:l.locateFile}),A("createMediapipeSolutionsPackedAssets",{locateFile:l.locateFile}),d=v.filter(function(a){return a.data!==void 0}),g=v.filter(function(a){return a.data===void 0}),e=Promise.all(d.map(function(a){var b=xt(l,a.url);if(a.path!==void 0){var S=a.path;b=b.then(function(L){return l.overrideFile(S,L),Promise.resolve(L)})}return b})),u=Promise.all(g.map(function(a){return a.simd===void 0||a.simd&&x||!a.simd&&!x?B(l.locateFile(a.url,l.aa)):Promise.resolve()})).then(function(){var a,b,S;return Zt(function(L){if(L.g==1)return a=window.createMediapipeSolutionsWasm,b=window.createMediapipeSolutionsPackedAssets,S=l,P(L,a(b),2);S.h=L.h,L.g=0})}),m=function(){return Zt(function(a){return l.g.graph&&l.g.graph.url?a=P(a,xt(l,l.g.graph.url),0):(a.g=0,a=void 0),a})}(),P(c,Promise.all([u,e,m]),7);if(typeof importScripts!="function")throw Error("solutions can only be loaded on a web page or in a web worker");return Y=v.filter(function(a){return a.simd===void 0||a.simd&&x||!a.simd&&!x}).map(function(a){return l.locateFile(a.url,l.aa)}),importScripts.apply(null,J(Y)),k=l,P(c,createMediapipeSolutionsWasm(Module),6);case 6:k.h=c.h,l.l=new OffscreenCanvas(1,1),l.h.canvas=l.l,o=l.h.GL.createContext(l.l,{antialias:!1,alpha:!1,na:typeof WebGL2RenderingContext<"u"?2:1}),l.h.GL.makeContextCurrent(o),c.g=4;break;case 7:if(l.l=document.createElement("canvas"),t=l.l.getContext("webgl2",{}),!t&&(t=l.l.getContext("webgl",{}),!t))return alert("Failed to create WebGL canvas context when passing video frame."),c.return();l.G=t,l.h.canvas=l.l,l.h.createContext(l.l,!0,!0,{});case 4:l.i=new l.h.SolutionWasm,l.$=!1,c.g=0}})}function Xt(l){var v,x,Y,k,o,d,g,e;return Zt(function(u){if(u.g==1){if(l.g.graph&&l.g.graph.url&&l.Z===l.g.graph.url)return u.return();if(l.s=!0,!l.g.graph||!l.g.graph.url){u.g=2;return}return l.Z=l.g.graph.url,P(u,xt(l,l.g.graph.url),3)}for(u.g!=2&&(v=u.h,l.i.loadGraph(v)),x=T(Object.keys(l.C)),Y=x.next();!Y.done;Y=x.next())k=Y.value,l.i.overrideFile(k,l.C[k]);if(l.C={},l.g.listeners)for(o=T(l.g.listeners),d=o.next();!d.done;d=o.next())g=d.value,It(l,g);e=l.j,l.j={},l.setOptions(e),u.g=0})}i.reset=function(){var l=this;return Zt(function(v){l.i&&(l.i.reset(),l.o={},l.u={}),v.g=0})},i.setOptions=function(l,v){var x=this;if(v=v||this.g.options){for(var Y=[],k=[],o={},d=T(Object.keys(l)),g=d.next();!g.done;o={R:o.R,S:o.S},g=d.next()){var e=g.value;e in this.j&&this.j[e]===l[e]||(this.j[e]=l[e],g=v[e],g!==void 0&&(g.onChange&&(o.R=g.onChange,o.S=l[e],Y.push(function(u){return function(){var m;return Zt(function(t){if(t.g==1)return P(t,u.R(u.S),2);m=t.h,m===!0&&(x.s=!0),t.g=0})}}(o))),g.graphOptionXref&&(e={valueNumber:g.type===1?l[e]:0,valueBoolean:g.type===0?l[e]:!1,valueString:g.type===2?l[e]:""},g=Object.assign(Object.assign(Object.assign({},{calculatorName:"",calculatorIndex:0}),g.graphOptionXref),e),k.push(g))))}(Y.length!==0||k.length!==0)&&(this.s=!0,this.B=(this.B===void 0?[]:this.B).concat(k),this.A=(this.A===void 0?[]:this.A).concat(Y))}};function Kt(l){var v,x,Y,k,o,d,g;return Zt(function(e){switch(e.g){case 1:if(!l.s)return e.return();if(!l.A){e.g=2;break}v=T(l.A),x=v.next();case 3:if(x.done){e.g=5;break}return Y=x.value,P(e,Y(),4);case 4:x=v.next(),e.g=3;break;case 5:l.A=void 0;case 2:if(l.B){for(k=new l.h.GraphOptionChangeRequestList,o=T(l.B),d=o.next();!d.done;d=o.next())g=d.value,k.push_back(g);l.i.changeOptions(k),k.delete(),l.B=void 0}l.s=!1,e.g=0}})}i.initialize=function(){var l=this;return Zt(function(v){return v.g==1?P(v,yt(l),2):v.g!=3?P(v,Xt(l),3):P(v,Kt(l),0)})};function xt(l,v){var x,Y;return Zt(function(k){return v in l.H?k.return(l.H[v]):(x=l.locateFile(v,""),Y=fetch(x).then(function(o){return o.arrayBuffer()}),l.H[v]=Y,k.return(Y))})}i.overrideFile=function(l,v){this.i?this.i.overrideFile(l,v):this.C[l]=v},i.clearOverriddenFiles=function(){this.C={},this.i&&this.i.clearOverriddenFiles()},i.send=function(l,v){var x=this,Y,k,o,d,g,e,u,m,t;return Zt(function(c){switch(c.g){case 1:return x.g.inputs?(Y=1e3*(v==null?performance.now():v),P(c,x.D,2)):c.return();case 2:return P(c,x.initialize(),3);case 3:for(k=new x.h.PacketDataList,o=T(Object.keys(l)),d=o.next();!d.done;d=o.next())if(g=d.value,e=x.g.inputs[g]){t:{var a=l[g];switch(e.type){case"video":var b=x.o[e.stream];if(b||(b=new ct(x.h,x.G),x.o[e.stream]=b),b.l===0&&(b.l=b.h.createTexture()),typeof HTMLVideoElement<"u"&&a instanceof HTMLVideoElement)var S=a.videoWidth,L=a.videoHeight;else typeof HTMLImageElement<"u"&&a instanceof HTMLImageElement?(S=a.naturalWidth,L=a.naturalHeight):(S=a.width,L=a.height);L={glName:b.l,width:S,height:L},S=b.g,S.canvas.width=L.width,S.canvas.height=L.height,S.activeTexture(S.TEXTURE0),b.h.bindTexture2d(b.l),S.texImage2D(S.TEXTURE_2D,0,S.RGBA,S.RGBA,S.UNSIGNED_BYTE,a),b.h.bindTexture2d(0),b=L;break t;case"detections":for(b=x.o[e.stream],b||(b=new R(x.h),x.o[e.stream]=b),b.data||(b.data=new b.g.DetectionListData),b.data.reset(a.length),L=0;L<a.length;++L){S=a[L];var C=b.data,U=C.setBoundingBox,z=L,Q=S.ea,D=new G;if(Ct(D,1,Q.ka),Ct(D,2,Q.la),Ct(D,3,Q.height),Ct(D,4,Q.width),Ct(D,5,Q.rotation),Ct(D,6,Q.ia),Q=O(D,H),U.call(C,z,Q),S.Y)for(C=0;C<S.Y.length;++C){D=S.Y[C];var st=!!D.visibility;U=b.data,z=U.addNormalizedLandmark,Q=L,D=Object.assign(Object.assign({},D),{visibility:st?D.visibility:0}),st=new pe,Ct(st,1,D.x),Ct(st,2,D.y),Ct(st,3,D.z),D.visibility&&Ct(st,4,D.visibility),D=O(st,ge),z.call(U,Q,D)}if(S.V)for(C=0;C<S.V.length;++C)U=b.data,z=U.addClassification,Q=L,D=S.V[C],st=new Nt,Ct(st,2,D.score),D.index&&Ct(st,1,D.index),D.label&&Ct(st,3,D.label),D.displayName&&Ct(st,4,D.displayName),D=O(st,Tt),z.call(U,Q,D)}b=b.data;break t;default:b={}}}switch(u=b,m=e.stream,e.type){case"video":k.pushTexture2d(Object.assign(Object.assign({},u),{stream:m,timestamp:Y}));break;case"detections":t=u,t.stream=m,t.timestamp=Y,k.pushDetectionList(t);break;default:throw Error("Unknown input config type: '"+e.type+"'")}}return x.i.send(k),P(c,x.D,4);case 4:k.delete(),c.g=0}})};function ht(l,v,x){var Y,k,o,d,g,e,u,m,t,c,a,b,S,L;return Zt(function(C){switch(C.g){case 1:if(!x)return C.return(v);for(Y={},k=0,o=T(Object.keys(x)),d=o.next();!d.done;d=o.next())g=d.value,e=x[g],typeof e!="string"&&e.type==="texture"&&v[e.stream]!==void 0&&++k;1<k&&(l.I=!1),u=T(Object.keys(x)),d=u.next();case 2:if(d.done){C.g=4;break}if(m=d.value,t=x[m],typeof t=="string")return S=Y,L=m,P(C,Wt(l,m,v[t]),14);if(c=v[t.stream],t.type==="detection_list"){if(c){for(var U=c.getRectList(),z=c.getLandmarksList(),Q=c.getClassificationsList(),D=[],st=0;st<U.size();++st){var ft=V(U.get(st),G,H);ft={ea:{ka:oe(ft,1),la:oe(ft,2),height:oe(ft,3),width:oe(ft,4),rotation:oe(ft,5,0),ia:se(ft,6)},Y:Le(V(z.get(st),Ne,h),pe,1).map(M),V:_(V(Q.get(st),Et,Dt))},D.push(ft)}U=D}else U=[];Y[m]=U,C.g=7;break}if(t.type==="proto_list"){if(c){for(U=Array(c.size()),z=0;z<c.size();z++)U[z]=c.get(z);c.delete()}else U=[];Y[m]=U,C.g=7;break}if(c===void 0){C.g=3;break}if(t.type==="float_list"){Y[m]=c,C.g=7;break}if(t.type==="proto"){Y[m]=c,C.g=7;break}if(t.type!=="texture")throw Error("Unknown output config type: '"+t.type+"'");return a=l.u[m],a||(a=new ct(l.h,l.G),l.u[m]=a),P(C,s(a,c,l.I),13);case 13:b=C.h,Y[m]=b;case 7:t.transform&&Y[m]&&(Y[m]=t.transform(Y[m])),C.g=3;break;case 14:S[L]=C.h;case 3:d=u.next(),C.g=2;break;case 4:return C.return(Y)}})}function Wt(l,v,x){var Y;return Zt(function(k){return typeof x=="number"||x instanceof Uint8Array||x instanceof l.h.Uint8BlobList?k.return(x):x instanceof l.h.Texture2dDataOut?(Y=l.u[v],Y||(Y=new ct(l.h,l.G),l.u[v]=Y),k.return(s(Y,x,l.I))):k.return(void 0)})}function It(l,v){for(var x=v.name||"$",Y=[].concat(J(v.wants)),k=new l.h.StringList,o=T(v.wants),d=o.next();!d.done;d=o.next())k.push_back(d.value);o=l.h.PacketListener.implement({onResults:function(g){for(var e={},u=0;u<v.wants.length;++u)e[Y[u]]=g.get(u);var m=l.listeners[x];m&&(l.D=ht(l,e,v.outs).then(function(t){t=m(t);for(var c=0;c<v.wants.length;++c){var a=e[Y[c]];typeof a=="object"&&a.hasOwnProperty&&a.hasOwnProperty("delete")&&a.delete()}t&&(l.D=t)}))}}),l.i.attachMultiListener(k,o),k.delete()}i.onResults=function(l,v){this.listeners[v||"$"]=l},Ht("Solution",$),Ht("OptionType",{BOOL:0,NUMBER:1,ma:2,0:"BOOL",1:"NUMBER",2:"STRING"});function wt(l){return l===void 0&&(l=0),l===1?"hand_landmark_full.tflite":"hand_landmark_lite.tflite"}function Ft(l){var v=this;l=l||{},this.g=new $({locateFile:l.locateFile,files:function(x){return[{url:"hands_solution_packed_assets_loader.js"},{simd:!1,url:"hands_solution_wasm_bin.js"},{simd:!0,url:"hands_solution_simd_wasm_bin.js"},{data:!0,url:wt(x.modelComplexity)}]},graph:{url:"hands.binarypb"},inputs:{image:{type:"video",stream:"input_frames_gpu"}},listeners:[{wants:["multi_hand_landmarks","multi_hand_world_landmarks","image_transformed","multi_handedness"],outs:{image:"image_transformed",multiHandLandmarks:{type:"proto_list",stream:"multi_hand_landmarks",transform:q},multiHandWorldLandmarks:{type:"proto_list",stream:"multi_hand_world_landmarks",transform:q},multiHandedness:{type:"proto_list",stream:"multi_handedness",transform:function(x){return x.map(function(Y){return _(V(Y,Et,Dt))[0]})}}}}],options:{useCpuInference:{type:0,graphOptionXref:{calculatorType:"InferenceCalculator",fieldName:"use_cpu_inference"},default:typeof window!="object"||window.navigator===void 0?!1:"iPad Simulator;iPhone Simulator;iPod Simulator;iPad;iPhone;iPod".split(";").includes(navigator.platform)||navigator.userAgent.includes("Mac")&&"ontouchend"in document},selfieMode:{type:0,graphOptionXref:{calculatorType:"GlScalerCalculator",calculatorIndex:1,fieldName:"flip_horizontal"}},maxNumHands:{type:1,graphOptionXref:{calculatorType:"ConstantSidePacketCalculator",calculatorName:"ConstantSidePacketCalculator",fieldName:"int_value"}},modelComplexity:{type:1,graphOptionXref:{calculatorType:"ConstantSidePacketCalculator",calculatorName:"ConstantSidePacketCalculatorModelComplexity",fieldName:"int_value"},onChange:function(x){var Y,k,o;return Zt(function(d){return d.g==1?(Y=wt(x),k="third_party/mediapipe/modules/hand_landmark/"+Y,P(d,xt(v.g,Y),2)):(o=d.h,v.g.overrideFile(k,o),d.return(!0))})}},minDetectionConfidence:{type:1,graphOptionXref:{calculatorType:"TensorsToDetectionsCalculator",calculatorName:"handlandmarktrackinggpu__palmdetectiongpu__TensorsToDetectionsCalculator",fieldName:"min_score_thresh"}},minTrackingConfidence:{type:1,graphOptionXref:{calculatorType:"ThresholdingCalculator",calculatorName:"handlandmarktrackinggpu__handlandmarkgpu__ThresholdingCalculator",fieldName:"threshold"}}}})}i=Ft.prototype,i.close=function(){return this.g.close(),Promise.resolve()},i.onResults=function(l){this.g.onResults(l)},i.initialize=function(){var l=this;return Zt(function(v){return P(v,l.g.initialize(),0)})},i.reset=function(){this.g.reset()},i.send=function(l){var v=this;return Zt(function(x){return P(x,v.g.send(l),0)})},i.setOptions=function(l){this.g.setOptions(l)},Ht("Hands",Ft),Ht("HAND_CONNECTIONS",[[0,1],[1,2],[2,3],[3,4],[0,5],[5,6],[6,7],[7,8],[5,9],[9,10],[10,11],[11,12],[9,13],[13,14],[14,15],[15,16],[13,17],[0,17],[17,18],[18,19],[19,20]]),Ht("VERSION","0.4.1646424915")}).call(vi);var Gi={};(function(){var i;function n(e){var u=0;return function(){return u<e.length?{done:!1,value:e[u++]}:{done:!0}}}var r=typeof Object.defineProperties=="function"?Object.defineProperty:function(e,u,m){return e==Array.prototype||e==Object.prototype||(e[u]=m.value),e};function f(e){e=[typeof globalThis=="object"&&globalThis,e,typeof window=="object"&&window,typeof self=="object"&&self,typeof global=="object"&&global];for(var u=0;u<e.length;++u){var m=e[u];if(m&&m.Math==Math)return m}throw Error("Cannot find global object")}var Z=f(this);function I(e,u){if(u)t:{var m=Z;e=e.split(".");for(var t=0;t<e.length-1;t++){var c=e[t];if(!(c in m))break t;m=m[c]}e=e[e.length-1],t=m[e],u=u(t),u!=t&&u!=null&&r(m,e,{configurable:!0,writable:!0,value:u})}}I("Symbol",function(e){function u(a){if(this instanceof u)throw new TypeError("Symbol is not a constructor");return new m(t+(a||"")+"_"+c++,a)}function m(a,b){this.g=a,r(this,"description",{configurable:!0,writable:!0,value:b})}if(e)return e;m.prototype.toString=function(){return this.g};var t="jscomp_symbol_"+(1e9*Math.random()>>>0)+"_",c=0;return u}),I("Symbol.iterator",function(e){if(e)return e;e=Symbol("Symbol.iterator");for(var u="Array Int8Array Uint8Array Uint8ClampedArray Int16Array Uint16Array Int32Array Uint32Array Float32Array Float64Array".split(" "),m=0;m<u.length;m++){var t=Z[u[m]];typeof t=="function"&&typeof t.prototype[e]!="function"&&r(t.prototype,e,{configurable:!0,writable:!0,value:function(){return F(n(this))}})}return e});function F(e){return e={next:e},e[Symbol.iterator]=function(){return this},e}function T(e){var u=typeof Symbol<"u"&&Symbol.iterator&&e[Symbol.iterator];return u?u.call(e):{next:n(e)}}function J(e){if(!(e instanceof Array)){e=T(e);for(var u,m=[];!(u=e.next()).done;)m.push(u.value);e=m}return e}var et=typeof Object.create=="function"?Object.create:function(e){function u(){}return u.prototype=e,new u},lt;if(typeof Object.setPrototypeOf=="function")lt=Object.setPrototypeOf;else{var pt;t:{var Yt={a:!0},Lt={};try{Lt.__proto__=Yt,pt=Lt.a;break t}catch{}pt=!1}lt=pt?function(e,u){if(e.__proto__=u,e.__proto__!==u)throw new TypeError(e+" is not extensible");return e}:null}var at=lt;function dt(e,u){if(e.prototype=et(u.prototype),e.prototype.constructor=e,at)at(e,u);else for(var m in u)if(m!="prototype")if(Object.defineProperties){var t=Object.getOwnPropertyDescriptor(u,m);t&&Object.defineProperty(e,m,t)}else e[m]=u[m];e.da=u.prototype}function Bt(){this.l=!1,this.i=null,this.h=void 0,this.g=1,this.s=this.m=0,this.j=null}function kt(e){if(e.l)throw new TypeError("Generator is already running");e.l=!0}Bt.prototype.o=function(e){this.h=e};function ee(e,u){e.j={U:u,V:!0},e.g=e.m||e.s}Bt.prototype.return=function(e){this.j={return:e},this.g=this.s};function P(e,u,m){return e.g=m,{value:u}}function De(e){this.g=new Bt,this.h=e}function ze(e,u){kt(e.g);var m=e.g.i;return m?We(e,"return"in m?m.return:function(t){return{value:t,done:!0}},u,e.g.return):(e.g.return(u),zt(e))}function We(e,u,m,t){try{var c=u.call(e.g.i,m);if(!(c instanceof Object))throw new TypeError("Iterator result "+c+" is not an object");if(!c.done)return e.g.l=!1,c;var a=c.value}catch(b){return e.g.i=null,ee(e.g,b),zt(e)}return e.g.i=null,t.call(e.g,a),zt(e)}function zt(e){for(;e.g.g;)try{var u=e.h(e.g);if(u)return e.g.l=!1,{value:u.value,done:!1}}catch(m){e.g.h=void 0,ee(e.g,m)}if(e.g.l=!1,e.g.j){if(u=e.g.j,e.g.j=null,u.V)throw u.U;return{value:u.return,done:!0}}return{value:void 0,done:!0}}function Hn(e){this.next=function(u){return kt(e.g),e.g.i?u=We(e,e.g.i.next,u,e.g.o):(e.g.o(u),u=zt(e)),u},this.throw=function(u){return kt(e.g),e.g.i?u=We(e,e.g.i.throw,u,e.g.o):(ee(e.g,u),u=zt(e)),u},this.return=function(u){return ze(e,u)},this[Symbol.iterator]=function(){return this}}function ne(e){function u(t){return e.next(t)}function m(t){return e.throw(t)}return new Promise(function(t,c){function a(b){b.done?t(b.value):Promise.resolve(b.value).then(u,m).then(a,c)}a(e.next())})}function Zt(e){return ne(new Hn(new De(e)))}I("Promise",function(e){function u(b){this.h=0,this.i=void 0,this.g=[],this.o=!1;var S=this.j();try{b(S.resolve,S.reject)}catch(L){S.reject(L)}}function m(){this.g=null}function t(b){return b instanceof u?b:new u(function(S){S(b)})}if(e)return e;m.prototype.h=function(b){if(this.g==null){this.g=[];var S=this;this.i(function(){S.l()})}this.g.push(b)};var c=Z.setTimeout;m.prototype.i=function(b){c(b,0)},m.prototype.l=function(){for(;this.g&&this.g.length;){var b=this.g;this.g=[];for(var S=0;S<b.length;++S){var L=b[S];b[S]=null;try{L()}catch(C){this.j(C)}}}this.g=null},m.prototype.j=function(b){this.i(function(){throw b})},u.prototype.j=function(){function b(C){return function(U){L||(L=!0,C.call(S,U))}}var S=this,L=!1;return{resolve:b(this.C),reject:b(this.l)}},u.prototype.C=function(b){if(b===this)this.l(new TypeError("A Promise cannot resolve to itself"));else if(b instanceof u)this.F(b);else{t:switch(typeof b){case"object":var S=b!=null;break t;case"function":S=!0;break t;default:S=!1}S?this.v(b):this.m(b)}},u.prototype.v=function(b){var S=void 0;try{S=b.then}catch(L){this.l(L);return}typeof S=="function"?this.G(S,b):this.m(b)},u.prototype.l=function(b){this.s(2,b)},u.prototype.m=function(b){this.s(1,b)},u.prototype.s=function(b,S){if(this.h!=0)throw Error("Cannot settle("+b+", "+S+"): Promise already settled in state"+this.h);this.h=b,this.i=S,this.h===2&&this.D(),this.A()},u.prototype.D=function(){var b=this;c(function(){if(b.B()){var S=Z.console;typeof S<"u"&&S.error(b.i)}},1)},u.prototype.B=function(){if(this.o)return!1;var b=Z.CustomEvent,S=Z.Event,L=Z.dispatchEvent;return typeof L>"u"?!0:(typeof b=="function"?b=new b("unhandledrejection",{cancelable:!0}):typeof S=="function"?b=new S("unhandledrejection",{cancelable:!0}):(b=Z.document.createEvent("CustomEvent"),b.initCustomEvent("unhandledrejection",!1,!0,b)),b.promise=this,b.reason=this.i,L(b))},u.prototype.A=function(){if(this.g!=null){for(var b=0;b<this.g.length;++b)a.h(this.g[b]);this.g=null}};var a=new m;return u.prototype.F=function(b){var S=this.j();b.J(S.resolve,S.reject)},u.prototype.G=function(b,S){var L=this.j();try{b.call(S,L.resolve,L.reject)}catch(C){L.reject(C)}},u.prototype.then=function(b,S){function L(Q,D){return typeof Q=="function"?function(st){try{C(Q(st))}catch(ft){U(ft)}}:D}var C,U,z=new u(function(Q,D){C=Q,U=D});return this.J(L(b,C),L(S,U)),z},u.prototype.catch=function(b){return this.then(void 0,b)},u.prototype.J=function(b,S){function L(){switch(C.h){case 1:b(C.i);break;case 2:S(C.i);break;default:throw Error("Unexpected state: "+C.h)}}var C=this;this.g==null?a.h(L):this.g.push(L),this.o=!0},u.resolve=t,u.reject=function(b){return new u(function(S,L){L(b)})},u.race=function(b){return new u(function(S,L){for(var C=T(b),U=C.next();!U.done;U=C.next())t(U.value).J(S,L)})},u.all=function(b){var S=T(b),L=S.next();return L.done?t([]):new u(function(C,U){function z(st){return function(ft){Q[st]=ft,D--,D==0&&C(Q)}}var Q=[],D=0;do Q.push(void 0),D++,t(L.value).J(z(Q.length-1),U),L=S.next();while(!L.done)})},u});function $e(e,u){e instanceof String&&(e+="");var m=0,t=!1,c={next:function(){if(!t&&m<e.length){var a=m++;return{value:u(a,e[a]),done:!1}}return t=!0,{done:!0,value:void 0}}};return c[Symbol.iterator]=function(){return c},c}var An=typeof Object.assign=="function"?Object.assign:function(e,u){for(var m=1;m<arguments.length;m++){var t=arguments[m];if(t)for(var c in t)Object.prototype.hasOwnProperty.call(t,c)&&(e[c]=t[c])}return e};I("Object.assign",function(e){return e||An}),I("Object.is",function(e){return e||function(u,m){return u===m?u!==0||1/u===1/m:u!==u&&m!==m}}),I("Array.prototype.includes",function(e){return e||function(u,m){var t=this;t instanceof String&&(t=String(t));var c=t.length;for(m=m||0,0>m&&(m=Math.max(m+c,0));m<c;m++){var a=t[m];if(a===u||Object.is(a,u))return!0}return!1}}),I("String.prototype.includes",function(e){return e||function(u,m){if(this==null)throw new TypeError("The 'this' value for String.prototype.includes must not be null or undefined");if(u instanceof RegExp)throw new TypeError("First argument to String.prototype.includes must not be a regular expression");return this.indexOf(u,m||0)!==-1}}),I("Array.prototype.keys",function(e){return e||function(){return $e(this,function(u){return u})}});var Re=this||self;function Ht(e,u){e=e.split(".");var m=Re;e[0]in m||typeof m.execScript>"u"||m.execScript("var "+e[0]);for(var t;e.length&&(t=e.shift());)e.length||u===void 0?m[t]&&m[t]!==Object.prototype[t]?m=m[t]:m=m[t]={}:m[t]=u}function Te(e){Re.setTimeout(function(){throw e},0)}function sn(e){Te(e)}function Gn(e,u){sn(Error("Invalid wire type: "+e+" (at position "+u+")"))}function Ln(){sn(Error("Failed to read varint, encoding is invalid."))}function Rn(e,u){return u=String.fromCharCode.apply(null,u),e==null?u:e+u}var Jn,dn=typeof TextDecoder<"u",pn,kn=typeof TextEncoder<"u";function Fn(e){if(kn)e=(pn||(pn=new TextEncoder)).encode(e);else{var u=void 0;u=u===void 0?!1:u;for(var m=0,t=new Uint8Array(3*e.length),c=0;c<e.length;c++){var a=e.charCodeAt(c);if(128>a)t[m++]=a;else{if(2048>a)t[m++]=a>>6|192;else{if(55296<=a&&57343>=a){if(56319>=a&&c<e.length){var b=e.charCodeAt(++c);if(56320<=b&&57343>=b){a=1024*(a-55296)+b-56320+65536,t[m++]=a>>18|240,t[m++]=a>>12&63|128,t[m++]=a>>6&63|128,t[m++]=a&63|128;continue}else c--}if(u)throw Error("Found an unpaired surrogate");a=65533}t[m++]=a>>12|224,t[m++]=a>>6&63|128}t[m++]=a&63|128}}e=t.subarray(0,m)}return e}var je={},Me=null;function xn(e){var u;u===void 0&&(u=0),Se(),u=je[u];for(var m=Array(Math.floor(e.length/3)),t=u[64]||"",c=0,a=0;c<e.length-2;c+=3){var b=e[c],S=e[c+1],L=e[c+2],C=u[b>>2];b=u[(b&3)<<4|S>>4],S=u[(S&15)<<2|L>>6],L=u[L&63],m[a++]=C+b+S+L}switch(C=0,L=t,e.length-c){case 2:C=e[c+1],L=u[(C&15)<<2]||t;case 1:e=e[c],m[a]=u[e>>2]+u[(e&3)<<4|C>>4]+L+t}return m.join("")}function Xn(e){var u=e.length,m=3*u/4;m%3?m=Math.floor(m):"=.".indexOf(e[u-1])!=-1&&(m="=.".indexOf(e[u-2])!=-1?m-2:m-1);var t=new Uint8Array(m),c=0;return he(e,function(a){t[c++]=a}),t.subarray(0,c)}function he(e,u){function m(L){for(;t<e.length;){var C=e.charAt(t++),U=Me[C];if(U!=null)return U;if(!/^[\s\xa0]*$/.test(C))throw Error("Unknown base64 encoding at char: "+C)}return L}Se();for(var t=0;;){var c=m(-1),a=m(0),b=m(64),S=m(64);if(S===64&&c===-1)break;u(c<<2|a>>4),b!=64&&(u(a<<4&240|b>>2),S!=64&&u(b<<6&192|S))}}function Se(){if(!Me){Me={};for(var e="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789".split(""),u=["+/=","+/","-_=","-_.","-_"],m=0;5>m;m++){var t=e.concat(u[m].split(""));je[m]=t;for(var c=0;c<t.length;c++){var a=t[c];Me[a]===void 0&&(Me[a]=c)}}}}var Oe=typeof Uint8Array=="function",re;function Ve(e){if(this.g=e,e!==null&&e.length===0)throw Error("ByteString should be constructed with non-empty values")}Ve.prototype.toJSON=function(){if(this.g==null)var e="";else e=this.g,e=this.g=e==null||typeof e=="string"?e:Oe&&e instanceof Uint8Array?xn(e):null;return e};var ln=typeof Uint8Array.prototype.slice=="function";function Be(e,u,m){return u===m?re||(re=new Uint8Array(0)):ln?e.slice(u,m):new Uint8Array(e.subarray(u,m))}var Qt=0,Ze=0;function Ce(e){if(e.constructor===Uint8Array)return e;if(e.constructor===ArrayBuffer)return new Uint8Array(e);if(e.constructor===Array)return new Uint8Array(e);if(e.constructor===String)return Xn(e);if(e.constructor===Ve){if(e.g==null)var u=re||(re=new Uint8Array(0));else{u=Uint8Array;var m=e.g;m=m==null||Oe&&m!=null&&m instanceof Uint8Array?m:typeof m=="string"?Xn(m):null,e=e.g=m,u=new u(e)}return u}if(e instanceof Uint8Array)return new Uint8Array(e.buffer,e.byteOffset,e.byteLength);throw Error("Type not convertible to a Uint8Array, expected a Uint8Array, an ArrayBuffer, a base64 encoded string, or Array of numbers")}function Mt(e,u){u=u===void 0?{}:u,u=u.u===void 0?!1:u.u,this.h=null,this.g=this.i=this.m=0,this.l=!1,this.u=u,e&&xe(this,e)}function xe(e,u){e.h=Ce(u),e.m=0,e.i=e.h.length,e.g=e.m}Mt.prototype.reset=function(){this.g=this.m};function jt(e){for(var u=128,m=0,t=0,c=0;4>c&&128<=u;c++)u=e.h[e.g++],m|=(u&127)<<7*c;if(128<=u&&(u=e.h[e.g++],m|=(u&127)<<28,t|=(u&127)>>4),128<=u)for(c=0;5>c&&128<=u;c++)u=e.h[e.g++],t|=(u&127)<<7*c+3;if(128>u)return e=m>>>0,u=t>>>0,(t=u&2147483648)&&(e=~e+1>>>0,u=~u>>>0,e==0&&(u=u+1>>>0)),e=4294967296*u+(e>>>0),t?-e:e;e.l=!0,Ln()}function ye(e){e.g>e.i&&(e.l=!0,sn(Error("Tried to read past the end of the data "+e.g+" > "+e.i)))}Mt.prototype.j=function(){var e=this.h,u=e[this.g],m=u&127;return 128>u?(this.g+=1,ye(this),m):(u=e[this.g+1],m|=(u&127)<<7,128>u?(this.g+=2,ye(this),m):(u=e[this.g+2],m|=(u&127)<<14,128>u?(this.g+=3,ye(this),m):(u=e[this.g+3],m|=(u&127)<<21,128>u?(this.g+=4,ye(this),m):(u=e[this.g+4],m|=(u&15)<<28,128>u?(this.g+=5,ye(this),m>>>0):(this.g+=5,128<=e[this.g++]&&128<=e[this.g++]&&128<=e[this.g++]&&128<=e[this.g++]&&128<=e[this.g++]?(this.l=!0,Ln(),m):(ye(this),m))))))},Mt.prototype.o=function(){var e=this.h[this.g],u=this.h[this.g+1],m=this.h[this.g+2],t=this.h[this.g+3];return this.g+=4,ye(this),m=(e<<0|u<<8|m<<16|t<<24)>>>0,e=2*(m>>31)+1,u=m>>>23&255,m&=8388607,u==255?m?NaN:1/0*e:u==0?e*Math.pow(2,-149)*m:e*Math.pow(2,u-150)*(m+Math.pow(2,23))};var Ye=[];function qe(){this.g=new Uint8Array(64),this.h=0}function Xe(e,u){if(!(e.h+1<e.g.length)){var m=e.g;e.g=new Uint8Array(Math.ceil(1+2*e.g.length)),e.g.set(m)}e.g[e.h++]=u}qe.prototype.length=function(){return this.h},qe.prototype.end=function(){var e=this.g,u=this.h;return this.h=0,Be(e,0,u)};function Ot(e,u){for(;127<u;)Xe(e,u&127|128),u>>>=7;Xe(e,u)}function Ae(e){var u={},m=u.N===void 0?!1:u.N;this.m={u:u.u===void 0?!1:u.u},this.N=m,u=this.m,Ye.length?(m=Ye.pop(),u&&(m.u=u.u),e&&xe(m,e),e=m):e=new Mt(e,u),this.g=e,this.l=this.g.g,this.h=this.i=-1,this.j=!1}Ae.prototype.reset=function(){this.g.reset(),this.h=this.i=-1};function Pe(e){var u=e.g;if((u=u.g==u.i)||(u=e.j)||(u=e.g,u=u.l||0>u.g||u.g>u.i),u)return!1;e.l=e.g.g;var m=e.g.j();return u=m>>>3,m&=7,0<=m&&5>=m?(e.i=u,e.h=m,!0):(e.j=!0,Gn(m,e.l),!1)}function Ie(e){switch(e.h){case 0:if(e.h!=0)Ie(e);else t:{e=e.g;for(var u=e.g,m=0;10>m;m++){if((e.h[u]&128)===0){e.g=u+1,ye(e);break t}u++}e.l=!0,Ln()}break;case 1:e=e.g,e.g+=8,ye(e);break;case 2:e.h!=2?Ie(e):(u=e.g.j(),e=e.g,e.g+=u,ye(e));break;case 5:e=e.g,e.g+=4,ye(e);break;case 3:u=e.i;do{if(!Pe(e)){e.j=!0,sn(Error("Unmatched start-group tag: stream EOF"));break}if(e.h==4){e.i!=u&&(e.j=!0,sn(Error("Unmatched end-group tag")));break}Ie(e)}while(1);break;default:e.j=!0,Gn(e.h,e.l)}}function Wn(e,u,m){e.N||(e=Be(e.g.h,m,e.g.g),(m=u.o)?m.push(e):u.o=[e])}function cn(e,u,m){var t=e.g.i,c=e.g.j(),a=e.g.g+c;if(e.g.i=a,m(u,e),m=a-e.g.g,m!==0)throw Error("Message parsing ended unexpectedly. Expected to read "+(c+" bytes, instead read "+(c-m)+" bytes, either the data ended unexpectedly or the message misreported its own length"));return e.g.g=a,e.g.i=t,u}function _e(e,u,m){var t=e.g.j();for(t=e.g.g+t;e.g.g<t;)m.push(u.call(e.g))}var un=[];function ve(){this.h=[],this.i=0,this.g=new qe}function we(e,u){u.length!==0&&(e.h.push(u),e.i+=u.length)}function Ge(e,u,m){Ot(e.g,8*u+2),Ot(e.g,m.length),we(e,e.g.end()),we(e,m)}var ie=typeof Symbol=="function"&&typeof Symbol()=="symbol"?Symbol(void 0):void 0;function Qe(e,u){Object.isFrozen(e)||(ie?e[ie]|=u:e.g!==void 0?e.g|=u:Object.defineProperties(e,{g:{value:u,configurable:!0,writable:!0,enumerable:!1}}))}function qt(e){if(!e)return 0;var u;return ie?u=e[ie]:u=e.g,u==null?0:u}function Pt(e){return Array.isArray(e)&&Qe(e,1),e}function hn(e){if(!Array.isArray(e))throw Error("cannot mark non-array as immutable");Qe(e,2)}function fe(e){return e!==null&&typeof e=="object"&&e.constructor===Object}function Ct(e){switch(typeof e){case"number":return isFinite(e)?e:String(e);case"object":return Oe&&e!=null&&e instanceof Uint8Array?xn(e):e;default:return e}}function Vt(e,u){if(e!=null)return Array.isArray(e)||fe(e)?oe(e,u):u(e)}function oe(e,u){if(Array.isArray(e)){for(var m=Array(e.length),t=0;t<e.length;t++)m[t]=Vt(e[t],u);return qt(e)&1&&Pt(m),m}m={};for(t in e)m[t]=Vt(e[t],u);return m}var Le;function te(e,u,m){var t=Le;Le=null,e||(e=t),t=this.constructor.ba,e||(e=t?[t]:[]),this.j=(t?0:-1)-(this.constructor.$||0),this.m=this.g=null,this.h=e;t:{if(t=this.h.length,e=t-1,t&&(t=this.h[e],fe(t))){this.l=e-this.j,this.i=t;break t}u!==void 0&&-1<u?(this.l=Math.max(u,e+1-this.j),this.i=null):this.l=Number.MAX_VALUE}if(m)for(u=0;u<m.length;u++)e=m[u],e<this.l?(e+=this.j,(t=this.h[e])?Pt(t):this.h[e]=se):(tt(this),(t=this.i[e])?Pt(t):this.i[e]=se)}var se=Object.freeze(Pt([]));function tt(e){var u=e.l+e.j;e.h[u]||(e.i=e.h[u]={})}function it(e,u,m){return u===-1?null:(m===void 0?0:m)||u>=e.l?e.i?e.i[u]:void 0:e.h[u+e.j]}function ut(e,u,m){m=m===void 0?!0:m;var t=t===void 0?!1:t,c=it(e,u,t);return c==null&&(c=se),c===se?(c=Pt([]),St(e,u,c,t)):m&&Array.isArray(c)&&qt(c)&2&&(c=c.slice(),St(e,u,c,t)),c}function _t(e){var u=ut(e,3,!1);if(e.m||(e.m={}),!e.m[3]){for(var m=0;m<u.length;m++)u[m]=+u[m];e.m[3]=!0}return u}function de(e,u,m){return e=it(e,u),e==null?m:e}function ue(e,u,m){return e=it(e,u),e=e==null?e:+e,e==null?m===void 0?0:m:e}function St(e,u,m,t){(t===void 0?0:t)||u>=e.l?(tt(e),e.i[u]=m):e.h[u+e.j]=m}function me(e,u,m){if(m===-1)return null;e.g||(e.g={});var t=e.g[m];if(t)return t;var c=it(e,m,!1);return c==null?t:(u=new u(c),e.g[m]=u)}function He(e,u,m){e.g||(e.g={});var t=e.g[m];if(!t){var c=ut(e,m,!1);t=[];for(var a=Array.isArray(c)?!!(qt(c)&2):!1,b=0;b<c.length;b++)t[b]=new u(c[b]),a&&hn(t[b].h);a&&(hn(t),Object.freeze(t)),e.g[m]=t}return t}function tn(e,u,m,t,c){var a=He(e,t,u);m=m||new t,e=ut(e,u),c!=null?(a.splice(c,0,m),e.splice(c,0,en(m))):(a.push(m),e.push(en(m)))}te.prototype.toJSON=function(){var e=en(this);return oe(e,Ct)};function en(e){if(e.g)for(var u in e.g){var m=e.g[u];if(Array.isArray(m))for(var t=0;t<m.length;t++)m[t]&&en(m[t]);else m&&en(m)}return e.h}te.prototype.toString=function(){return en(this).toString()};function fn(e,u){if(e=e.o){we(u,u.g.end());for(var m=0;m<e.length;m++)we(u,e[m])}}function bn(e){var u=e[0];switch(e.length){case 2:var m=e[1];return function(L,C,U){return u(L,C,U,m)};case 3:var t=e[1],c=e[2];return function(L,C,U){return u(L,C,U,t,c)};case 4:var a=e[1],b=e[2],S=e[3];return function(L,C,U){return u(L,C,U,a,b,S)};default:throw Error("unsupported number of parameters, expected [2-4], got "+e.length)}}function Fe(e,u,m){for(;Pe(u)&&u.h!=4;){var t=u.i,c=m[t];if(c){if(Array.isArray(c)&&(c=m[t]=bn(c)),!c(u,e,t)){t=u,c=e;var a=t.l;Ie(t),Wn(t,c,a)}}else t=u,c=e,a=t.l,Ie(t),Wn(t,c,a)}return e}function nn(e,u){var m=new ve;if(u(e,m),e=m.i+m.g.length(),e===0)m=new Uint8Array(0);else{e=new Uint8Array(e);for(var t=m.h,c=t.length,a=u=0;a<c;a++){var b=t[a];b.length!==0&&(e.set(b,u),u+=b.length)}t=m.g,c=t.h,c!==0&&(e.set(t.g.subarray(0,c),u),t.h=0),m.h=[e],m=e}return m}function zn(e,u,m){if(un.length){var t=un.pop();e&&(xe(t.g,e),t.i=-1,t.h=-1),e=t}else e=new Ae(e);try{return m(new u,e)}finally{u=e.g,u.h=null,u.m=0,u.i=0,u.g=0,u.l=!1,u.u=!1,e.i=-1,e.h=-1,e.j=!1,100>un.length&&un.push(e)}}function rn(e,u,m){if(u=it(u,m),u!=null){Ot(e.g,8*m+5),e=e.g;var t=u;t=(m=0>t?1:0)?-t:t,t===0?0<1/t?Qt=Ze=0:(Ze=0,Qt=2147483648):isNaN(t)?(Ze=0,Qt=2147483647):34028234663852886e22<t?(Ze=0,Qt=(m<<31|2139095040)>>>0):11754943508222875e-54>t?(t=Math.round(t/Math.pow(2,-149)),Ze=0,Qt=(m<<31|t)>>>0):(u=Math.floor(Math.log(t)/Math.LN2),t*=Math.pow(2,-u),t=Math.round(8388608*t),16777216<=t&&++u,Ze=0,Qt=(m<<31|u+127<<23|t&8388607)>>>0),m=Qt,Xe(e,m>>>0&255),Xe(e,m>>>8&255),Xe(e,m>>>16&255),Xe(e,m>>>24&255)}}function Je(e,u,m){return e.h!==5?!1:(St(u,m,e.g.o()),!0)}function gn(e,u,m){return e.h!==5&&e.h!==2?!1:(u=ut(u,m),e.h==2?_e(e,Mt.prototype.o,u):u.push(e.g.o()),!0)}function In(e,u,m){return e.h!==0?!1:(St(u,m,jt(e.g)),!0)}function Ke(e,u,m){return e.h!==0?!1:(St(u,m,e.g.j()),!0)}function En(e,u,m){if(e.h!==2)return!1;var t=e.g.j();e=e.g;var c=e.g;e.g+=t,ye(e),e=e.h;var a;if(dn)(a=Jn)||(a=Jn=new TextDecoder("utf-8",{fatal:!1})),a=a.decode(e.subarray(c,c+t));else{t=c+t;for(var b=[],S=null,L,C,U;c<t;)L=e[c++],128>L?b.push(L):224>L?c>=t?b.push(65533):(C=e[c++],194>L||(C&192)!==128?(c--,b.push(65533)):b.push((L&31)<<6|C&63)):240>L?c>=t-1?b.push(65533):(C=e[c++],(C&192)!==128||L===224&&160>C||L===237&&160<=C||((a=e[c++])&192)!==128?(c--,b.push(65533)):b.push((L&15)<<12|(C&63)<<6|a&63)):244>=L?c>=t-2?b.push(65533):(C=e[c++],(C&192)!==128||(L<<28)+(C-144)>>30!==0||((a=e[c++])&192)!==128||((U=e[c++])&192)!==128?(c--,b.push(65533)):(L=(L&7)<<18|(C&63)<<12|(a&63)<<6|U&63,L-=65536,b.push((L>>10&1023)+55296,(L&1023)+56320))):b.push(65533),8192<=b.length&&(S=Rn(S,b),b.length=0);a=Rn(S,b)}return St(u,m,a),!0}function on(e,u,m,t,c){if(e.h!==2)return!1;e=cn(e,new t,c);var a=a===void 0?!1:a;return u.g||(u.g={}),t=e&&en(e),u.g[m]=e,St(u,m,t,a),!0}function Zn(e,u,m,t,c){return e.h!==2?!1:(e=cn(e,new t,c),tn(u,m,e,t,void 0),!0)}function Sn(e,u,m){return e.h!==0&&e.h!==2?!1:(u=ut(u,m),e.h==2?_e(e,Mt.prototype.j,u):u.push(e.g.j()),!0)}function Kn(e,u,m){return e.h!==0?!1:(St(u,m,jt(e.g)),!0)}function an(e){te.call(this,e,-1,Qn)}var Tn;dt(an,te),an.prototype.getRows=function(){return it(this,1)},an.prototype.getCols=function(){return it(this,2)},an.prototype.getPackedDataList=function(){return _t(this)},an.prototype.getLayout=function(){return de(this,4,0)};function _n(e,u){return Fe(e,u,Tn||(Tn={1:Ke,2:Ke,3:gn,4:Kn}))}var Qn=[3];function Yn(e){te.call(this,e)}var Cn;dt(Yn,te);function p(e,u){var m=it(e,1);if(m!=null&&m!=null){Ot(u.g,8);var t=u.g;if(0<=m)Ot(t,m);else{for(var c=0;9>c;c++)Xe(t,m&127|128),m>>=7;Xe(t,1)}}rn(u,e,2),t=it(e,3),t!=null&&Ge(u,3,Fn(t)),t=it(e,4),t!=null&&Ge(u,4,Fn(t)),fn(e,u)}function W(e,u){return Fe(e,u,Cn||(Cn={1:Ke,2:Je,3:En,4:En}))}function V(e){te.call(this,e,-1,ot)}var E;dt(V,te),V.prototype.addClassification=function(e,u){return tn(this,1,e,Yn,u),this};function O(e,u){return Fe(e,u,E||(E={1:[Zn,Yn,W]}))}var ot=[1];function j(e){te.call(this,e)}var rt;dt(j,te);function bt(e,u){rn(u,e,1),rn(u,e,2),rn(u,e,3),rn(u,e,4),rn(u,e,5),fn(e,u)}function Rt(e,u){return Fe(e,u,rt||(rt={1:Je,2:Je,3:Je,4:Je,5:Je}))}function Ut(e){te.call(this,e,-1,Nt)}var Jt;dt(Ut,te);function $t(e,u){return Fe(e,u,Jt||(Jt={1:[Zn,j,Rt]}))}var Nt=[1];function Tt(e){te.call(this,e)}var Et;dt(Tt,te);function Dt(e,u){rn(u,e,1),rn(u,e,2),rn(u,e,3),rn(u,e,4),rn(u,e,5);var m=it(e,6);if(m!=null&&m!=null){Ot(u.g,48);var t=u.g,c=m;m=0>c,c=Math.abs(c);var a=c>>>0;for(c=Math.floor((c-a)/4294967296),c>>>=0,m&&(c=~c>>>0,a=(~a>>>0)+1,4294967295<a&&(a=0,c++,4294967295<c&&(c=0))),Qt=a,Ze=c,m=Qt,a=Ze;0<a||127<m;)Xe(t,m&127|128),m=(m>>>7|a<<25)>>>0,a>>>=7;Xe(t,m)}fn(e,u)}function ae(e,u){return Fe(e,u,Et||(Et={1:Je,2:Je,3:Je,4:Je,5:Je,6:In}))}function pe(e){te.call(this,e,-1,h)}var ge;dt(pe,te),pe.prototype.getVertexType=function(){return de(this,1,0)},pe.prototype.getPrimitiveType=function(){return de(this,2,0)},pe.prototype.getVertexBufferList=function(){return _t(this)},pe.prototype.getIndexBufferList=function(){return ut(this,4)};function Ne(e,u){return Fe(e,u,ge||(ge={1:Kn,2:Kn,3:gn,4:Sn}))}var h=[3,4];function y(e){te.call(this,e)}var G;dt(y,te),y.prototype.getMesh=function(){return me(this,pe,1)},y.prototype.getPoseTransformMatrix=function(){return me(this,an,2)};function H(e,u){return Fe(e,u,G||(G={1:[on,pe,Ne],2:[on,an,_n]}))}var K=[[61,146],[146,91],[91,181],[181,84],[84,17],[17,314],[314,405],[405,321],[321,375],[375,291],[61,185],[185,40],[40,39],[39,37],[37,0],[0,267],[267,269],[269,270],[270,409],[409,291],[78,95],[95,88],[88,178],[178,87],[87,14],[14,317],[317,402],[402,318],[318,324],[324,308],[78,191],[191,80],[80,81],[81,82],[82,13],[13,312],[312,311],[311,310],[310,415],[415,308]],_=[[263,249],[249,390],[390,373],[373,374],[374,380],[380,381],[381,382],[382,362],[263,466],[466,388],[388,387],[387,386],[386,385],[385,384],[384,398],[398,362]],M=[[276,283],[283,282],[282,295],[295,285],[300,293],[293,334],[334,296],[296,336]],q=[[33,7],[7,163],[163,144],[144,145],[145,153],[153,154],[154,155],[155,133],[33,246],[246,161],[161,160],[160,159],[159,158],[158,157],[157,173],[173,133]],ct=[[46,53],[53,52],[52,65],[65,55],[70,63],[63,105],[105,66],[66,107]],s=[[10,338],[338,297],[297,332],[332,284],[284,251],[251,389],[389,356],[356,454],[454,323],[323,361],[361,288],[288,397],[397,365],[365,379],[379,378],[378,400],[400,377],[377,152],[152,148],[148,176],[176,149],[149,150],[150,136],[136,172],[172,58],[58,132],[132,93],[93,234],[234,127],[127,162],[162,21],[21,54],[54,103],[103,67],[67,109],[109,10]],X=[].concat(J(K),J(_),J(M),J(q),J(ct),J(s));function R(e,u,m){if(m=e.createShader(m===0?e.VERTEX_SHADER:e.FRAGMENT_SHADER),e.shaderSource(m,u),e.compileShader(m),!e.getShaderParameter(m,e.COMPILE_STATUS))throw Error(`Could not compile WebGL shader.
|
|
37
37
|
|
|
38
|
-
`+e.getShaderInfoLog(m));return m}function w(e){return
|
|
38
|
+
`+e.getShaderInfoLog(m));return m}function w(e){return He(e,Yn,1).map(function(u){return{index:de(u,1,0),score:ue(u,2),label:it(u,3)!=null?de(u,3,""):void 0,displayName:it(u,4)!=null?de(u,4,""):void 0}})}function N(e){return{x:ue(e,1),y:ue(e,2),z:ue(e,3),visibility:it(e,4)!=null?ue(e,4):void 0}}function A(e){return He(zn(e,Ut,$t),j,1).map(N)}function B(e,u){this.h=e,this.g=u,this.l=0}function nt(e,u,m){return $(e,u),typeof e.g.canvas.transferToImageBitmap=="function"?Promise.resolve(e.g.canvas.transferToImageBitmap()):m?Promise.resolve(e.g.canvas):typeof createImageBitmap=="function"?createImageBitmap(e.g.canvas):(e.i===void 0&&(e.i=document.createElement("canvas")),new Promise(function(t){e.i.height=e.g.canvas.height,e.i.width=e.g.canvas.width,e.i.getContext("2d",{}).drawImage(e.g.canvas,0,0,e.g.canvas.width,e.g.canvas.height),t(e.i)}))}function $(e,u){var m=e.g;if(e.m===void 0){var t=R(m,`
|
|
39
39
|
attribute vec2 aVertex;
|
|
40
40
|
attribute vec2 aTex;
|
|
41
41
|
varying vec2 vTex;
|
|
@@ -50,9 +50,9 @@
|
|
|
50
50
|
gl_FragColor = texture2D(sampler0, vTex);
|
|
51
51
|
}`,1),a=m.createProgram();if(m.attachShader(a,t),m.attachShader(a,c),m.linkProgram(a),!m.getProgramParameter(a,m.LINK_STATUS))throw Error(`Could not compile WebGL program.
|
|
52
52
|
|
|
53
|
-
`+m.getProgramInfoLog(a));t=e.m=a,m.useProgram(t),c=m.getUniformLocation(t,"sampler0"),e.j={I:m.getAttribLocation(t,"aVertex"),H:m.getAttribLocation(t,"aTex"),ca:c},e.s=m.createBuffer(),m.bindBuffer(m.ARRAY_BUFFER,e.s),m.enableVertexAttribArray(e.j.I),m.vertexAttribPointer(e.j.I,2,m.FLOAT,!1,0,0),m.bufferData(m.ARRAY_BUFFER,new Float32Array([-1,-1,-1,1,1,1,1,-1]),m.STATIC_DRAW),m.bindBuffer(m.ARRAY_BUFFER,null),e.o=m.createBuffer(),m.bindBuffer(m.ARRAY_BUFFER,e.o),m.enableVertexAttribArray(e.j.H),m.vertexAttribPointer(e.j.H,2,m.FLOAT,!1,0,0),m.bufferData(m.ARRAY_BUFFER,new Float32Array([0,1,0,0,1,0,1,1]),m.STATIC_DRAW),m.bindBuffer(m.ARRAY_BUFFER,null),m.uniform1i(c,0)}t=e.j,m.useProgram(e.m),m.canvas.width=u.width,m.canvas.height=u.height,m.viewport(0,0,u.width,u.height),m.activeTexture(m.TEXTURE0),e.h.bindTexture2d(u.glName),m.enableVertexAttribArray(t.I),m.bindBuffer(m.ARRAY_BUFFER,e.s),m.vertexAttribPointer(t.I,2,m.FLOAT,!1,0,0),m.enableVertexAttribArray(t.H),m.bindBuffer(m.ARRAY_BUFFER,e.o),m.vertexAttribPointer(t.H,2,m.FLOAT,!1,0,0),m.bindFramebuffer(m.DRAW_FRAMEBUFFER?m.DRAW_FRAMEBUFFER:m.FRAMEBUFFER,null),m.clearColor(0,0,0,0),m.clear(m.COLOR_BUFFER_BIT),m.colorMask(!0,!0,!0,!0),m.drawArrays(m.TRIANGLE_FAN,0,4),m.disableVertexAttribArray(t.I),m.disableVertexAttribArray(t.H),m.bindBuffer(m.ARRAY_BUFFER,null),e.h.bindTexture2d(0)}function yt(e){this.g=e}var Xt=new Uint8Array([0,97,115,109,1,0,0,0,1,4,1,96,0,0,3,2,1,0,10,9,1,7,0,65,0,253,15,26,11]);function Kt(e,u){return u+e}function It(e,u){window[e]=u}function ht(e){var u=document.createElement("script");return u.setAttribute("src",e),u.setAttribute("crossorigin","anonymous"),new Promise(function(m){u.addEventListener("load",function(){m()},!1),u.addEventListener("error",function(){m()},!1),document.body.appendChild(u)})}function Wt(){return Zt(function(e){switch(e.g){case 1:return e.m=2,O(e,WebAssembly.instantiate(Xt),4);case 4:e.g=3,e.m=0;break;case 2:return e.m=0,e.j=null,e.return(!1);case 3:return e.return(!0)}})}function xt(e){if(this.g=e,this.listeners={},this.j={},this.F={},this.m={},this.s={},this.G=this.o=this.R=!0,this.C=Promise.resolve(),this.P="",this.B={},this.locateFile=e&&e.locateFile||Kt,typeof window=="object")var u=window.location.pathname.toString().substring(0,window.location.pathname.toString().lastIndexOf("/"))+"/";else if(typeof location<"u")u=location.pathname.toString().substring(0,location.pathname.toString().lastIndexOf("/"))+"/";else throw Error("solutions can only be loaded on a web page or in a web worker");if(this.S=u,e.options){u=T(Object.keys(e.options));for(var m=u.next();!m.done;m=u.next()){m=m.value;var t=e.options[m].default;t!==void 0&&(this.j[m]=typeof t=="function"?t():t)}}}i=xt.prototype,i.close=function(){return this.i&&this.i.delete(),Promise.resolve()};function wt(e){var u,m,t,c,a,b,S,L,F,U,z;return Zt(function(Q){switch(Q.g){case 1:return e.R?(u=e.g.files===void 0?[]:typeof e.g.files=="function"?e.g.files(e.j):e.g.files,O(Q,Wt(),2)):Q.return();case 2:if(m=Q.h,typeof window=="object")return It("createMediapipeSolutionsWasm",{locateFile:e.locateFile}),It("createMediapipeSolutionsPackedAssets",{locateFile:e.locateFile}),b=u.filter(function(D){return D.data!==void 0}),S=u.filter(function(D){return D.data===void 0}),L=Promise.all(b.map(function(D){var st=v(e,D.url);if(D.path!==void 0){var ft=D.path;st=st.then(function(mt){return e.overrideFile(ft,mt),Promise.resolve(mt)})}return st})),F=Promise.all(S.map(function(D){return D.simd===void 0||D.simd&&m||!D.simd&&!m?ht(e.locateFile(D.url,e.S)):Promise.resolve()})).then(function(){var D,st,ft;return Zt(function(mt){if(mt.g==1)return D=window.createMediapipeSolutionsWasm,st=window.createMediapipeSolutionsPackedAssets,ft=e,O(mt,D(st),2);ft.h=mt.h,mt.g=0})}),U=function(){return Zt(function(D){return e.g.graph&&e.g.graph.url?D=O(D,v(e,e.g.graph.url),0):(D.g=0,D=void 0),D})}(),O(Q,Promise.all([F,L,U]),7);if(typeof importScripts!="function")throw Error("solutions can only be loaded on a web page or in a web worker");return t=u.filter(function(D){return D.simd===void 0||D.simd&&m||!D.simd&&!m}).map(function(D){return e.locateFile(D.url,e.S)}),importScripts.apply(null,J(t)),c=e,O(Q,createMediapipeSolutionsWasm(Module),6);case 6:c.h=Q.h,e.l=new OffscreenCanvas(1,1),e.h.canvas=e.l,a=e.h.GL.createContext(e.l,{antialias:!1,alpha:!1,aa:typeof WebGL2RenderingContext<"u"?2:1}),e.h.GL.makeContextCurrent(a),Q.g=4;break;case 7:if(e.l=document.createElement("canvas"),z=e.l.getContext("webgl2",{}),!z&&(z=e.l.getContext("webgl",{}),!z))return alert("Failed to create WebGL canvas context when passing video frame."),Q.return();e.D=z,e.h.canvas=e.l,e.h.createContext(e.l,!0,!0,{});case 4:e.i=new e.h.SolutionWasm,e.R=!1,Q.g=0}})}function Ht(e){var u,m,t,c,a,b,S,L;return Zt(function(F){if(F.g==1){if(e.g.graph&&e.g.graph.url&&e.P===e.g.graph.url)return F.return();if(e.o=!0,!e.g.graph||!e.g.graph.url){F.g=2;return}return e.P=e.g.graph.url,O(F,v(e,e.g.graph.url),3)}for(F.g!=2&&(u=F.h,e.i.loadGraph(u)),m=T(Object.keys(e.B)),t=m.next();!t.done;t=m.next())c=t.value,e.i.overrideFile(c,e.B[c]);if(e.B={},e.g.listeners)for(a=T(e.g.listeners),b=a.next();!b.done;b=a.next())S=b.value,N(e,S);L=e.j,e.j={},e.setOptions(L),F.g=0})}i.reset=function(){var e=this;return Zt(function(u){e.i&&(e.i.reset(),e.m={},e.s={}),u.g=0})},i.setOptions=function(e,u){var m=this;if(u=u||this.g.options){for(var t=[],c=[],a={},b=T(Object.keys(e)),S=b.next();!S.done;a={K:a.K,L:a.L},S=b.next()){var L=S.value;L in this.j&&this.j[L]===e[L]||(this.j[L]=e[L],S=u[L],S!==void 0&&(S.onChange&&(a.K=S.onChange,a.L=e[L],t.push(function(F){return function(){var U;return Zt(function(z){if(z.g==1)return O(z,F.K(F.L),2);U=z.h,U===!0&&(m.o=!0),z.g=0})}}(a))),S.graphOptionXref&&(L={valueNumber:S.type===1?e[L]:0,valueBoolean:S.type===0?e[L]:!1,valueString:S.type===2?e[L]:""},S=Object.assign(Object.assign(Object.assign({},{calculatorName:"",calculatorIndex:0}),S.graphOptionXref),L),c.push(S))))}(t.length!==0||c.length!==0)&&(this.o=!0,this.A=(this.A===void 0?[]:this.A).concat(c),this.v=(this.v===void 0?[]:this.v).concat(t))}};function l(e){var u,m,t,c,a,b,S;return Zt(function(L){switch(L.g){case 1:if(!e.o)return L.return();if(!e.v){L.g=2;break}u=T(e.v),m=u.next();case 3:if(m.done){L.g=5;break}return t=m.value,O(L,t(),4);case 4:m=u.next(),L.g=3;break;case 5:e.v=void 0;case 2:if(e.A){for(c=new e.h.GraphOptionChangeRequestList,a=T(e.A),b=a.next();!b.done;b=a.next())S=b.value,c.push_back(S);e.i.changeOptions(c),c.delete(),e.A=void 0}e.o=!1,L.g=0}})}i.initialize=function(){var e=this;return Zt(function(u){return u.g==1?O(u,wt(e),2):u.g!=3?O(u,Ht(e),3):O(u,l(e),0)})};function v(e,u){var m,t;return Zt(function(c){return u in e.F?c.return(e.F[u]):(m=e.locateFile(u,""),t=fetch(m).then(function(a){return a.arrayBuffer()}),e.F[u]=t,c.return(t))})}i.overrideFile=function(e,u){this.i?this.i.overrideFile(e,u):this.B[e]=u},i.clearOverriddenFiles=function(){this.B={},this.i&&this.i.clearOverriddenFiles()},i.send=function(e,u){var m=this,t,c,a,b,S,L,F,U,z;return Zt(function(Q){switch(Q.g){case 1:return m.g.inputs?(t=1e3*(u==null?performance.now():u),O(Q,m.C,2)):Q.return();case 2:return O(Q,m.initialize(),3);case 3:for(c=new m.h.PacketDataList,a=T(Object.keys(e)),b=a.next();!b.done;b=a.next())if(S=b.value,L=m.g.inputs[S]){t:{var D=e[S];switch(L.type){case"video":var st=m.m[L.stream];if(st||(st=new B(m.h,m.D),m.m[L.stream]=st),st.l===0&&(st.l=st.h.createTexture()),typeof HTMLVideoElement<"u"&&D instanceof HTMLVideoElement)var ft=D.videoWidth,mt=D.videoHeight;else typeof HTMLImageElement<"u"&&D instanceof HTMLImageElement?(ft=D.naturalWidth,mt=D.naturalHeight):(ft=D.width,mt=D.height);mt={glName:st.l,width:ft,height:mt},ft=st.g,ft.canvas.width=mt.width,ft.canvas.height=mt.height,ft.activeTexture(ft.TEXTURE0),st.h.bindTexture2d(st.l),ft.texImage2D(ft.TEXTURE_2D,0,ft.RGBA,ft.RGBA,ft.UNSIGNED_BYTE,D),st.h.bindTexture2d(0),st=mt;break t;case"detections":for(st=m.m[L.stream],st||(st=new yt(m.h),m.m[L.stream]=st),st.data||(st.data=new st.g.DetectionListData),st.data.reset(D.length),mt=0;mt<D.length;++mt){ft=D[mt];var Gt=st.data,vt=Gt.setBoundingBox,At=mt,le=ft.T,ce=new Tt;if(St(ce,1,le.X),St(ce,2,le.Y),St(ce,3,le.height),St(ce,4,le.width),St(ce,5,le.rotation),St(ce,6,le.W),le=rn(ce,Dt),vt.call(Gt,At,le),ft.O)for(Gt=0;Gt<ft.O.length;++Gt){ce=ft.O[Gt];var Ne=!!ce.visibility;vt=st.data,At=vt.addNormalizedLandmark,le=mt,ce=Object.assign(Object.assign({},ce),{visibility:Ne?ce.visibility:0}),Ne=new j,St(Ne,1,ce.x),St(Ne,2,ce.y),St(Ne,3,ce.z),ce.visibility&&St(Ne,4,ce.visibility),ce=rn(Ne,bt),At.call(vt,le,ce)}if(ft.M)for(Gt=0;Gt<ft.M.length;++Gt)vt=st.data,At=vt.addClassification,le=mt,ce=ft.M[Gt],Ne=new wn,St(Ne,2,ce.score),ce.index&&St(Ne,1,ce.index),ce.label&&St(Ne,3,ce.label),ce.displayName&&St(Ne,4,ce.displayName),ce=rn(Ne,p),At.call(vt,le,ce)}st=st.data;break t;default:st={}}}switch(F=st,U=L.stream,L.type){case"video":c.pushTexture2d(Object.assign(Object.assign({},F),{stream:U,timestamp:t}));break;case"detections":z=F,z.stream=U,z.timestamp=t,c.pushDetectionList(z);break;default:throw Error("Unknown input config type: '"+L.type+"'")}}return m.i.send(c),O(Q,m.C,4);case 4:c.delete(),Q.g=0}})};function I(e,u,m){var t,c,a,b,S,L,F,U,z,Q,D,st,ft,mt;return Zt(function(Gt){switch(Gt.g){case 1:if(!m)return Gt.return(u);for(t={},c=0,a=T(Object.keys(m)),b=a.next();!b.done;b=a.next())S=b.value,L=m[S],typeof L!="string"&&L.type==="texture"&&u[L.stream]!==void 0&&++c;1<c&&(e.G=!1),F=T(Object.keys(m)),b=F.next();case 2:if(b.done){Gt.g=4;break}if(U=b.value,z=m[U],typeof z=="string")return ft=t,mt=U,O(Gt,Y(e,U,u[z]),14);if(Q=u[z.stream],z.type==="detection_list"){if(Q){for(var vt=Q.getRectList(),At=Q.getLandmarksList(),le=Q.getClassificationsList(),ce=[],Ne=0;Ne<vt.size();++Ne){var Rn=jn(vt.get(Ne),Tt,ae);Rn={T:{X:ue(Rn,1),Y:ue(Rn,2),height:ue(Rn,3),width:ue(Rn,4),rotation:ue(Rn,5,0),W:de(Rn,6,0)},O:A(At.get(Ne)),M:w(jn(le.get(Ne),V,P))},ce.push(Rn)}vt=ce}else vt=[];t[U]=vt,Gt.g=7;break}if(z.type==="proto_list"){if(Q){for(vt=Array(Q.size()),At=0;At<Q.size();At++)vt[At]=Q.get(At);Q.delete()}else vt=[];t[U]=vt,Gt.g=7;break}if(Q===void 0){Gt.g=3;break}if(z.type==="float_list"){t[U]=Q,Gt.g=7;break}if(z.type==="proto"){t[U]=Q,Gt.g=7;break}if(z.type!=="texture")throw Error("Unknown output config type: '"+z.type+"'");return D=e.s[U],D||(D=new B(e.h,e.D),e.s[U]=D),O(Gt,nt(D,Q,e.G),13);case 13:st=Gt.h,t[U]=st;case 7:z.transform&&t[U]&&(t[U]=z.transform(t[U])),Gt.g=3;break;case 14:ft[mt]=Gt.h;case 3:b=F.next(),Gt.g=2;break;case 4:return Gt.return(t)}})}function Y(e,u,m){var t;return Zt(function(c){return typeof m=="number"||m instanceof Uint8Array||m instanceof e.h.Uint8BlobList?c.return(m):m instanceof e.h.Texture2dDataOut?(t=e.s[u],t||(t=new B(e.h,e.D),e.s[u]=t),c.return(nt(t,m,e.G))):c.return(void 0)})}function N(e,u){for(var m=u.name||"$",t=[].concat(J(u.wants)),c=new e.h.StringList,a=T(u.wants),b=a.next();!b.done;b=a.next())c.push_back(b.value);a=e.h.PacketListener.implement({onResults:function(S){for(var L={},F=0;F<u.wants.length;++F)L[t[F]]=S.get(F);var U=e.listeners[m];U&&(e.C=I(e,L,u.outs).then(function(z){z=U(z);for(var Q=0;Q<u.wants.length;++Q){var D=L[t[Q]];typeof D=="object"&&D.hasOwnProperty&&D.hasOwnProperty("delete")&&D.delete()}z&&(e.C=z)}))}}),e.i.attachMultiListener(c,a),c.delete()}i.onResults=function(e,u){this.listeners[u||"$"]=e},Ct("Solution",xt),Ct("OptionType",{BOOL:0,NUMBER:1,Z:2,0:"BOOL",1:"NUMBER",2:"STRING"});function o(e){return e.map(d)}function d(e){e=jn(e,y,C);var u=e.getMesh();if(!u)return e;var m=new Float32Array(u.getVertexBufferList());u.getVertexBufferList=function(){return m};var t=new Uint32Array(u.getIndexBufferList());return u.getIndexBufferList=function(){return t},e}function g(e){var u=this;e=e||{},this.g=new xt({locateFile:e.locateFile,files:[{url:"holistic_solution_packed_assets_loader.js"},{simd:!1,url:"holistic_solution_wasm_bin.js"},{simd:!0,url:"holistic_solution_simd_wasm_bin.js"}],graph:{url:"holistic.binarypb"},inputs:{image:{type:"video",stream:"input_frames_gpu"}},listeners:[{wants:"left_hand_landmarks right_hand_landmarks face_landmarks pose_landmarks world_landmarks segmentation_mask image_transformed multi_face_geometry".split(" "),outs:{image:{type:"texture",stream:"image_transformed"},leftHandLandmarks:{type:"proto",stream:"left_hand_landmarks",transform:A},rightHandLandmarks:{type:"proto",stream:"right_hand_landmarks",transform:A},faceLandmarks:{type:"proto",stream:"face_landmarks",transform:A},poseLandmarks:{type:"proto",stream:"pose_landmarks",transform:A},ea:{type:"proto",stream:"world_landmarks",transform:A},segmentationMask:{type:"texture",stream:"segmentation_mask"},multiFaceGeometry:{type:"proto_list",stream:"multi_face_geometry",transform:o}}}],options:{useCpuInference:{type:0,graphOptionXref:{calculatorType:"InferenceCalculator",fieldName:"use_cpu_inference"},default:"iPad Simulator;iPhone Simulator;iPod Simulator;iPad;iPhone;iPod".split(";").includes(navigator.platform)||navigator.userAgent.includes("Mac")&&"ontouchend"in document},enableFaceGeometry:{type:0,graphOptionXref:{calculatorName:"EnableFaceGeometryConstant",calculatorType:"ConstantSidePacketCalculator",fieldName:"bool_value"}},selfieMode:{type:0,graphOptionXref:{calculatorType:"GlScalerCalculator",calculatorIndex:1,fieldName:"flip_horizontal"}},modelComplexity:{type:1,default:1,graphOptionXref:{calculatorType:"ConstantSidePacketCalculator",calculatorName:"ConstantSidePacketCalculatorModelComplexity",fieldName:"int_value"},onChange:function(m){var t,c,a,b;return Zt(function(S){if(S.g==1){switch(t="",m){case 1:t="pose_landmark_full.tflite";break;case 2:t="pose_landmark_heavy.tflite";break;default:t="pose_landmark_lite.tflite"}return c="third_party/mediapipe/modules/pose_landmark/"+t,a=u.g.locateFile(t,""),O(S,fetch(a),3)}return S.g!=2?O(S,S.h.arrayBuffer(),2):(b=S.h,u.g.overrideFile(c,b),O(S,u.g.reset(),0))})}},smoothLandmarks:{type:0,graphOptionXref:{calculatorType:"ConstantSidePacketCalculator",calculatorName:"ConstantSidePacketCalculatorSmoothLandmarks",fieldName:"bool_value"}},enableSegmentation:{type:0,graphOptionXref:{calculatorType:"ConstantSidePacketCalculator",calculatorName:"ConstantSidePacketCalculatorEnableSegmentation",fieldName:"bool_value"}},smoothSegmentation:{type:0,graphOptionXref:{calculatorType:"ConstantSidePacketCalculator",calculatorName:"ConstantSidePacketCalculatorSmoothSegmentation",fieldName:"bool_value"}},refineFaceLandmarks:{type:0,graphOptionXref:{calculatorType:"ConstantSidePacketCalculator",calculatorName:"ConstantSidePacketCalculatorRefineFaceLandmarks",fieldName:"bool_value"}},minDetectionConfidence:{type:1,graphOptionXref:{calculatorType:"TensorsToDetectionsCalculator",calculatorName:"holisticlandmarkgpu__poselandmarkgpu__posedetectiongpu__TensorsToDetectionsCalculator",fieldName:"min_score_thresh"}},minTrackingConfidence:{type:1,graphOptionXref:{calculatorType:"ThresholdingCalculator",calculatorName:"holisticlandmarkgpu__poselandmarkgpu__poselandmarkbyroigpu__tensorstoposelandmarksandsegmentation__ThresholdingCalculator",fieldName:"threshold"}},cameraNear:{type:1,graphOptionXref:{calculatorType:"FaceGeometryEnvGeneratorCalculator",fieldName:"near"}},cameraFar:{type:1,graphOptionXref:{calculatorType:"FaceGeometryEnvGeneratorCalculator",fieldName:"far"}},cameraVerticalFovDegrees:{type:1,graphOptionXref:{calculatorType:"FaceGeometryEnvGeneratorCalculator",fieldName:"vertical_fov_degrees"}}}})}i=g.prototype,i.close=function(){return this.g.close(),Promise.resolve()},i.onResults=function(e){this.g.onResults(e)},i.initialize=function(){var e=this;return Zt(function(u){return O(u,e.g.initialize(),0)})},i.reset=function(){this.g.reset()},i.send=function(e){var u=this;return Zt(function(m){return O(m,u.g.send(e),0)})},i.setOptions=function(e){this.g.setOptions(e)},Ct("Holistic",g),Ct("FACE_GEOMETRY",{Layout:{COLUMN_MAJOR:0,ROW_MAJOR:1,0:"COLUMN_MAJOR",1:"ROW_MAJOR"},PrimitiveType:{TRIANGLE:0,0:"TRIANGLE"},VertexType:{VERTEX_PT:0,0:"VERTEX_PT"},DEFAULT_CAMERA_PARAMS:{verticalFovDegrees:63,near:1,far:1e4}}),Ct("FACEMESH_LIPS",K),Ct("FACEMESH_LEFT_EYE",_),Ct("FACEMESH_LEFT_EYEBROW",M),Ct("FACEMESH_LEFT_IRIS",[[474,475],[475,476],[476,477],[477,474]]),Ct("FACEMESH_RIGHT_EYE",q),Ct("FACEMESH_RIGHT_EYEBROW",ct),Ct("FACEMESH_RIGHT_IRIS",[[469,470],[470,471],[471,472],[472,469]]),Ct("FACEMESH_FACE_OVAL",s),Ct("FACEMESH_CONTOURS",X),Ct("FACEMESH_TESSELATION",[[127,34],[34,139],[139,127],[11,0],[0,37],[37,11],[232,231],[231,120],[120,232],[72,37],[37,39],[39,72],[128,121],[121,47],[47,128],[232,121],[121,128],[128,232],[104,69],[69,67],[67,104],[175,171],[171,148],[148,175],[118,50],[50,101],[101,118],[73,39],[39,40],[40,73],[9,151],[151,108],[108,9],[48,115],[115,131],[131,48],[194,204],[204,211],[211,194],[74,40],[40,185],[185,74],[80,42],[42,183],[183,80],[40,92],[92,186],[186,40],[230,229],[229,118],[118,230],[202,212],[212,214],[214,202],[83,18],[18,17],[17,83],[76,61],[61,146],[146,76],[160,29],[29,30],[30,160],[56,157],[157,173],[173,56],[106,204],[204,194],[194,106],[135,214],[214,192],[192,135],[203,165],[165,98],[98,203],[21,71],[71,68],[68,21],[51,45],[45,4],[4,51],[144,24],[24,23],[23,144],[77,146],[146,91],[91,77],[205,50],[50,187],[187,205],[201,200],[200,18],[18,201],[91,106],[106,182],[182,91],[90,91],[91,181],[181,90],[85,84],[84,17],[17,85],[206,203],[203,36],[36,206],[148,171],[171,140],[140,148],[92,40],[40,39],[39,92],[193,189],[189,244],[244,193],[159,158],[158,28],[28,159],[247,246],[246,161],[161,247],[236,3],[3,196],[196,236],[54,68],[68,104],[104,54],[193,168],[168,8],[8,193],[117,228],[228,31],[31,117],[189,193],[193,55],[55,189],[98,97],[97,99],[99,98],[126,47],[47,100],[100,126],[166,79],[79,218],[218,166],[155,154],[154,26],[26,155],[209,49],[49,131],[131,209],[135,136],[136,150],[150,135],[47,126],[126,217],[217,47],[223,52],[52,53],[53,223],[45,51],[51,134],[134,45],[211,170],[170,140],[140,211],[67,69],[69,108],[108,67],[43,106],[106,91],[91,43],[230,119],[119,120],[120,230],[226,130],[130,247],[247,226],[63,53],[53,52],[52,63],[238,20],[20,242],[242,238],[46,70],[70,156],[156,46],[78,62],[62,96],[96,78],[46,53],[53,63],[63,46],[143,34],[34,227],[227,143],[123,117],[117,111],[111,123],[44,125],[125,19],[19,44],[236,134],[134,51],[51,236],[216,206],[206,205],[205,216],[154,153],[153,22],[22,154],[39,37],[37,167],[167,39],[200,201],[201,208],[208,200],[36,142],[142,100],[100,36],[57,212],[212,202],[202,57],[20,60],[60,99],[99,20],[28,158],[158,157],[157,28],[35,226],[226,113],[113,35],[160,159],[159,27],[27,160],[204,202],[202,210],[210,204],[113,225],[225,46],[46,113],[43,202],[202,204],[204,43],[62,76],[76,77],[77,62],[137,123],[123,116],[116,137],[41,38],[38,72],[72,41],[203,129],[129,142],[142,203],[64,98],[98,240],[240,64],[49,102],[102,64],[64,49],[41,73],[73,74],[74,41],[212,216],[216,207],[207,212],[42,74],[74,184],[184,42],[169,170],[170,211],[211,169],[170,149],[149,176],[176,170],[105,66],[66,69],[69,105],[122,6],[6,168],[168,122],[123,147],[147,187],[187,123],[96,77],[77,90],[90,96],[65,55],[55,107],[107,65],[89,90],[90,180],[180,89],[101,100],[100,120],[120,101],[63,105],[105,104],[104,63],[93,137],[137,227],[227,93],[15,86],[86,85],[85,15],[129,102],[102,49],[49,129],[14,87],[87,86],[86,14],[55,8],[8,9],[9,55],[100,47],[47,121],[121,100],[145,23],[23,22],[22,145],[88,89],[89,179],[179,88],[6,122],[122,196],[196,6],[88,95],[95,96],[96,88],[138,172],[172,136],[136,138],[215,58],[58,172],[172,215],[115,48],[48,219],[219,115],[42,80],[80,81],[81,42],[195,3],[3,51],[51,195],[43,146],[146,61],[61,43],[171,175],[175,199],[199,171],[81,82],[82,38],[38,81],[53,46],[46,225],[225,53],[144,163],[163,110],[110,144],[52,65],[65,66],[66,52],[229,228],[228,117],[117,229],[34,127],[127,234],[234,34],[107,108],[108,69],[69,107],[109,108],[108,151],[151,109],[48,64],[64,235],[235,48],[62,78],[78,191],[191,62],[129,209],[209,126],[126,129],[111,35],[35,143],[143,111],[117,123],[123,50],[50,117],[222,65],[65,52],[52,222],[19,125],[125,141],[141,19],[221,55],[55,65],[65,221],[3,195],[195,197],[197,3],[25,7],[7,33],[33,25],[220,237],[237,44],[44,220],[70,71],[71,139],[139,70],[122,193],[193,245],[245,122],[247,130],[130,33],[33,247],[71,21],[21,162],[162,71],[170,169],[169,150],[150,170],[188,174],[174,196],[196,188],[216,186],[186,92],[92,216],[2,97],[97,167],[167,2],[141,125],[125,241],[241,141],[164,167],[167,37],[37,164],[72,38],[38,12],[12,72],[38,82],[82,13],[13,38],[63,68],[68,71],[71,63],[226,35],[35,111],[111,226],[101,50],[50,205],[205,101],[206,92],[92,165],[165,206],[209,198],[198,217],[217,209],[165,167],[167,97],[97,165],[220,115],[115,218],[218,220],[133,112],[112,243],[243,133],[239,238],[238,241],[241,239],[214,135],[135,169],[169,214],[190,173],[173,133],[133,190],[171,208],[208,32],[32,171],[125,44],[44,237],[237,125],[86,87],[87,178],[178,86],[85,86],[86,179],[179,85],[84,85],[85,180],[180,84],[83,84],[84,181],[181,83],[201,83],[83,182],[182,201],[137,93],[93,132],[132,137],[76,62],[62,183],[183,76],[61,76],[76,184],[184,61],[57,61],[61,185],[185,57],[212,57],[57,186],[186,212],[214,207],[207,187],[187,214],[34,143],[143,156],[156,34],[79,239],[239,237],[237,79],[123,137],[137,177],[177,123],[44,1],[1,4],[4,44],[201,194],[194,32],[32,201],[64,102],[102,129],[129,64],[213,215],[215,138],[138,213],[59,166],[166,219],[219,59],[242,99],[99,97],[97,242],[2,94],[94,141],[141,2],[75,59],[59,235],[235,75],[24,110],[110,228],[228,24],[25,130],[130,226],[226,25],[23,24],[24,229],[229,23],[22,23],[23,230],[230,22],[26,22],[22,231],[231,26],[112,26],[26,232],[232,112],[189,190],[190,243],[243,189],[221,56],[56,190],[190,221],[28,56],[56,221],[221,28],[27,28],[28,222],[222,27],[29,27],[27,223],[223,29],[30,29],[29,224],[224,30],[247,30],[30,225],[225,247],[238,79],[79,20],[20,238],[166,59],[59,75],[75,166],[60,75],[75,240],[240,60],[147,177],[177,215],[215,147],[20,79],[79,166],[166,20],[187,147],[147,213],[213,187],[112,233],[233,244],[244,112],[233,128],[128,245],[245,233],[128,114],[114,188],[188,128],[114,217],[217,174],[174,114],[131,115],[115,220],[220,131],[217,198],[198,236],[236,217],[198,131],[131,134],[134,198],[177,132],[132,58],[58,177],[143,35],[35,124],[124,143],[110,163],[163,7],[7,110],[228,110],[110,25],[25,228],[356,389],[389,368],[368,356],[11,302],[302,267],[267,11],[452,350],[350,349],[349,452],[302,303],[303,269],[269,302],[357,343],[343,277],[277,357],[452,453],[453,357],[357,452],[333,332],[332,297],[297,333],[175,152],[152,377],[377,175],[347,348],[348,330],[330,347],[303,304],[304,270],[270,303],[9,336],[336,337],[337,9],[278,279],[279,360],[360,278],[418,262],[262,431],[431,418],[304,408],[408,409],[409,304],[310,415],[415,407],[407,310],[270,409],[409,410],[410,270],[450,348],[348,347],[347,450],[422,430],[430,434],[434,422],[313,314],[314,17],[17,313],[306,307],[307,375],[375,306],[387,388],[388,260],[260,387],[286,414],[414,398],[398,286],[335,406],[406,418],[418,335],[364,367],[367,416],[416,364],[423,358],[358,327],[327,423],[251,284],[284,298],[298,251],[281,5],[5,4],[4,281],[373,374],[374,253],[253,373],[307,320],[320,321],[321,307],[425,427],[427,411],[411,425],[421,313],[313,18],[18,421],[321,405],[405,406],[406,321],[320,404],[404,405],[405,320],[315,16],[16,17],[17,315],[426,425],[425,266],[266,426],[377,400],[400,369],[369,377],[322,391],[391,269],[269,322],[417,465],[465,464],[464,417],[386,257],[257,258],[258,386],[466,260],[260,388],[388,466],[456,399],[399,419],[419,456],[284,332],[332,333],[333,284],[417,285],[285,8],[8,417],[346,340],[340,261],[261,346],[413,441],[441,285],[285,413],[327,460],[460,328],[328,327],[355,371],[371,329],[329,355],[392,439],[439,438],[438,392],[382,341],[341,256],[256,382],[429,420],[420,360],[360,429],[364,394],[394,379],[379,364],[277,343],[343,437],[437,277],[443,444],[444,283],[283,443],[275,440],[440,363],[363,275],[431,262],[262,369],[369,431],[297,338],[338,337],[337,297],[273,375],[375,321],[321,273],[450,451],[451,349],[349,450],[446,342],[342,467],[467,446],[293,334],[334,282],[282,293],[458,461],[461,462],[462,458],[276,353],[353,383],[383,276],[308,324],[324,325],[325,308],[276,300],[300,293],[293,276],[372,345],[345,447],[447,372],[352,345],[345,340],[340,352],[274,1],[1,19],[19,274],[456,248],[248,281],[281,456],[436,427],[427,425],[425,436],[381,256],[256,252],[252,381],[269,391],[391,393],[393,269],[200,199],[199,428],[428,200],[266,330],[330,329],[329,266],[287,273],[273,422],[422,287],[250,462],[462,328],[328,250],[258,286],[286,384],[384,258],[265,353],[353,342],[342,265],[387,259],[259,257],[257,387],[424,431],[431,430],[430,424],[342,353],[353,276],[276,342],[273,335],[335,424],[424,273],[292,325],[325,307],[307,292],[366,447],[447,345],[345,366],[271,303],[303,302],[302,271],[423,266],[266,371],[371,423],[294,455],[455,460],[460,294],[279,278],[278,294],[294,279],[271,272],[272,304],[304,271],[432,434],[434,427],[427,432],[272,407],[407,408],[408,272],[394,430],[430,431],[431,394],[395,369],[369,400],[400,395],[334,333],[333,299],[299,334],[351,417],[417,168],[168,351],[352,280],[280,411],[411,352],[325,319],[319,320],[320,325],[295,296],[296,336],[336,295],[319,403],[403,404],[404,319],[330,348],[348,349],[349,330],[293,298],[298,333],[333,293],[323,454],[454,447],[447,323],[15,16],[16,315],[315,15],[358,429],[429,279],[279,358],[14,15],[15,316],[316,14],[285,336],[336,9],[9,285],[329,349],[349,350],[350,329],[374,380],[380,252],[252,374],[318,402],[402,403],[403,318],[6,197],[197,419],[419,6],[318,319],[319,325],[325,318],[367,364],[364,365],[365,367],[435,367],[367,397],[397,435],[344,438],[438,439],[439,344],[272,271],[271,311],[311,272],[195,5],[5,281],[281,195],[273,287],[287,291],[291,273],[396,428],[428,199],[199,396],[311,271],[271,268],[268,311],[283,444],[444,445],[445,283],[373,254],[254,339],[339,373],[282,334],[334,296],[296,282],[449,347],[347,346],[346,449],[264,447],[447,454],[454,264],[336,296],[296,299],[299,336],[338,10],[10,151],[151,338],[278,439],[439,455],[455,278],[292,407],[407,415],[415,292],[358,371],[371,355],[355,358],[340,345],[345,372],[372,340],[346,347],[347,280],[280,346],[442,443],[443,282],[282,442],[19,94],[94,370],[370,19],[441,442],[442,295],[295,441],[248,419],[419,197],[197,248],[263,255],[255,359],[359,263],[440,275],[275,274],[274,440],[300,383],[383,368],[368,300],[351,412],[412,465],[465,351],[263,467],[467,466],[466,263],[301,368],[368,389],[389,301],[395,378],[378,379],[379,395],[412,351],[351,419],[419,412],[436,426],[426,322],[322,436],[2,164],[164,393],[393,2],[370,462],[462,461],[461,370],[164,0],[0,267],[267,164],[302,11],[11,12],[12,302],[268,12],[12,13],[13,268],[293,300],[300,301],[301,293],[446,261],[261,340],[340,446],[330,266],[266,425],[425,330],[426,423],[423,391],[391,426],[429,355],[355,437],[437,429],[391,327],[327,326],[326,391],[440,457],[457,438],[438,440],[341,382],[382,362],[362,341],[459,457],[457,461],[461,459],[434,430],[430,394],[394,434],[414,463],[463,362],[362,414],[396,369],[369,262],[262,396],[354,461],[461,457],[457,354],[316,403],[403,402],[402,316],[315,404],[404,403],[403,315],[314,405],[405,404],[404,314],[313,406],[406,405],[405,313],[421,418],[418,406],[406,421],[366,401],[401,361],[361,366],[306,408],[408,407],[407,306],[291,409],[409,408],[408,291],[287,410],[410,409],[409,287],[432,436],[436,410],[410,432],[434,416],[416,411],[411,434],[264,368],[368,383],[383,264],[309,438],[438,457],[457,309],[352,376],[376,401],[401,352],[274,275],[275,4],[4,274],[421,428],[428,262],[262,421],[294,327],[327,358],[358,294],[433,416],[416,367],[367,433],[289,455],[455,439],[439,289],[462,370],[370,326],[326,462],[2,326],[326,370],[370,2],[305,460],[460,455],[455,305],[254,449],[449,448],[448,254],[255,261],[261,446],[446,255],[253,450],[450,449],[449,253],[252,451],[451,450],[450,252],[256,452],[452,451],[451,256],[341,453],[453,452],[452,341],[413,464],[464,463],[463,413],[441,413],[413,414],[414,441],[258,442],[442,441],[441,258],[257,443],[443,442],[442,257],[259,444],[444,443],[443,259],[260,445],[445,444],[444,260],[467,342],[342,445],[445,467],[459,458],[458,250],[250,459],[289,392],[392,290],[290,289],[290,328],[328,460],[460,290],[376,433],[433,435],[435,376],[250,290],[290,392],[392,250],[411,416],[416,433],[433,411],[341,463],[463,464],[464,341],[453,464],[464,465],[465,453],[357,465],[465,412],[412,357],[343,412],[412,399],[399,343],[360,363],[363,440],[440,360],[437,399],[399,456],[456,437],[420,456],[456,363],[363,420],[401,435],[435,288],[288,401],[372,383],[383,353],[353,372],[339,255],[255,249],[249,339],[448,261],[261,255],[255,448],[133,243],[243,190],[190,133],[133,155],[155,112],[112,133],[33,246],[246,247],[247,33],[33,130],[130,25],[25,33],[398,384],[384,286],[286,398],[362,398],[398,414],[414,362],[362,463],[463,341],[341,362],[263,359],[359,467],[467,263],[263,249],[249,255],[255,263],[466,467],[467,260],[260,466],[75,60],[60,166],[166,75],[238,239],[239,79],[79,238],[162,127],[127,139],[139,162],[72,11],[11,37],[37,72],[121,232],[232,120],[120,121],[73,72],[72,39],[39,73],[114,128],[128,47],[47,114],[233,232],[232,128],[128,233],[103,104],[104,67],[67,103],[152,175],[175,148],[148,152],[119,118],[118,101],[101,119],[74,73],[73,40],[40,74],[107,9],[9,108],[108,107],[49,48],[48,131],[131,49],[32,194],[194,211],[211,32],[184,74],[74,185],[185,184],[191,80],[80,183],[183,191],[185,40],[40,186],[186,185],[119,230],[230,118],[118,119],[210,202],[202,214],[214,210],[84,83],[83,17],[17,84],[77,76],[76,146],[146,77],[161,160],[160,30],[30,161],[190,56],[56,173],[173,190],[182,106],[106,194],[194,182],[138,135],[135,192],[192,138],[129,203],[203,98],[98,129],[54,21],[21,68],[68,54],[5,51],[51,4],[4,5],[145,144],[144,23],[23,145],[90,77],[77,91],[91,90],[207,205],[205,187],[187,207],[83,201],[201,18],[18,83],[181,91],[91,182],[182,181],[180,90],[90,181],[181,180],[16,85],[85,17],[17,16],[205,206],[206,36],[36,205],[176,148],[148,140],[140,176],[165,92],[92,39],[39,165],[245,193],[193,244],[244,245],[27,159],[159,28],[28,27],[30,247],[247,161],[161,30],[174,236],[236,196],[196,174],[103,54],[54,104],[104,103],[55,193],[193,8],[8,55],[111,117],[117,31],[31,111],[221,189],[189,55],[55,221],[240,98],[98,99],[99,240],[142,126],[126,100],[100,142],[219,166],[166,218],[218,219],[112,155],[155,26],[26,112],[198,209],[209,131],[131,198],[169,135],[135,150],[150,169],[114,47],[47,217],[217,114],[224,223],[223,53],[53,224],[220,45],[45,134],[134,220],[32,211],[211,140],[140,32],[109,67],[67,108],[108,109],[146,43],[43,91],[91,146],[231,230],[230,120],[120,231],[113,226],[226,247],[247,113],[105,63],[63,52],[52,105],[241,238],[238,242],[242,241],[124,46],[46,156],[156,124],[95,78],[78,96],[96,95],[70,46],[46,63],[63,70],[116,143],[143,227],[227,116],[116,123],[123,111],[111,116],[1,44],[44,19],[19,1],[3,236],[236,51],[51,3],[207,216],[216,205],[205,207],[26,154],[154,22],[22,26],[165,39],[39,167],[167,165],[199,200],[200,208],[208,199],[101,36],[36,100],[100,101],[43,57],[57,202],[202,43],[242,20],[20,99],[99,242],[56,28],[28,157],[157,56],[124,35],[35,113],[113,124],[29,160],[160,27],[27,29],[211,204],[204,210],[210,211],[124,113],[113,46],[46,124],[106,43],[43,204],[204,106],[96,62],[62,77],[77,96],[227,137],[137,116],[116,227],[73,41],[41,72],[72,73],[36,203],[203,142],[142,36],[235,64],[64,240],[240,235],[48,49],[49,64],[64,48],[42,41],[41,74],[74,42],[214,212],[212,207],[207,214],[183,42],[42,184],[184,183],[210,169],[169,211],[211,210],[140,170],[170,176],[176,140],[104,105],[105,69],[69,104],[193,122],[122,168],[168,193],[50,123],[123,187],[187,50],[89,96],[96,90],[90,89],[66,65],[65,107],[107,66],[179,89],[89,180],[180,179],[119,101],[101,120],[120,119],[68,63],[63,104],[104,68],[234,93],[93,227],[227,234],[16,15],[15,85],[85,16],[209,129],[129,49],[49,209],[15,14],[14,86],[86,15],[107,55],[55,9],[9,107],[120,100],[100,121],[121,120],[153,145],[145,22],[22,153],[178,88],[88,179],[179,178],[197,6],[6,196],[196,197],[89,88],[88,96],[96,89],[135,138],[138,136],[136,135],[138,215],[215,172],[172,138],[218,115],[115,219],[219,218],[41,42],[42,81],[81,41],[5,195],[195,51],[51,5],[57,43],[43,61],[61,57],[208,171],[171,199],[199,208],[41,81],[81,38],[38,41],[224,53],[53,225],[225,224],[24,144],[144,110],[110,24],[105,52],[52,66],[66,105],[118,229],[229,117],[117,118],[227,34],[34,234],[234,227],[66,107],[107,69],[69,66],[10,109],[109,151],[151,10],[219,48],[48,235],[235,219],[183,62],[62,191],[191,183],[142,129],[129,126],[126,142],[116,111],[111,143],[143,116],[118,117],[117,50],[50,118],[223,222],[222,52],[52,223],[94,19],[19,141],[141,94],[222,221],[221,65],[65,222],[196,3],[3,197],[197,196],[45,220],[220,44],[44,45],[156,70],[70,139],[139,156],[188,122],[122,245],[245,188],[139,71],[71,162],[162,139],[149,170],[170,150],[150,149],[122,188],[188,196],[196,122],[206,216],[216,92],[92,206],[164,2],[2,167],[167,164],[242,141],[141,241],[241,242],[0,164],[164,37],[37,0],[11,72],[72,12],[12,11],[12,38],[38,13],[13,12],[70,63],[63,71],[71,70],[31,226],[226,111],[111,31],[36,101],[101,205],[205,36],[203,206],[206,165],[165,203],[126,209],[209,217],[217,126],[98,165],[165,97],[97,98],[237,220],[220,218],[218,237],[237,239],[239,241],[241,237],[210,214],[214,169],[169,210],[140,171],[171,32],[32,140],[241,125],[125,237],[237,241],[179,86],[86,178],[178,179],[180,85],[85,179],[179,180],[181,84],[84,180],[180,181],[182,83],[83,181],[181,182],[194,201],[201,182],[182,194],[177,137],[137,132],[132,177],[184,76],[76,183],[183,184],[185,61],[61,184],[184,185],[186,57],[57,185],[185,186],[216,212],[212,186],[186,216],[192,214],[214,187],[187,192],[139,34],[34,156],[156,139],[218,79],[79,237],[237,218],[147,123],[123,177],[177,147],[45,44],[44,4],[4,45],[208,201],[201,32],[32,208],[98,64],[64,129],[129,98],[192,213],[213,138],[138,192],[235,59],[59,219],[219,235],[141,242],[242,97],[97,141],[97,2],[2,141],[141,97],[240,75],[75,235],[235,240],[229,24],[24,228],[228,229],[31,25],[25,226],[226,31],[230,23],[23,229],[229,230],[231,22],[22,230],[230,231],[232,26],[26,231],[231,232],[233,112],[112,232],[232,233],[244,189],[189,243],[243,244],[189,221],[221,190],[190,189],[222,28],[28,221],[221,222],[223,27],[27,222],[222,223],[224,29],[29,223],[223,224],[225,30],[30,224],[224,225],[113,247],[247,225],[225,113],[99,60],[60,240],[240,99],[213,147],[147,215],[215,213],[60,20],[20,166],[166,60],[192,187],[187,213],[213,192],[243,112],[112,244],[244,243],[244,233],[233,245],[245,244],[245,128],[128,188],[188,245],[188,114],[114,174],[174,188],[134,131],[131,220],[220,134],[174,217],[217,236],[236,174],[236,198],[198,134],[134,236],[215,177],[177,58],[58,215],[156,143],[143,124],[124,156],[25,110],[110,7],[7,25],[31,228],[228,25],[25,31],[264,356],[356,368],[368,264],[0,11],[11,267],[267,0],[451,452],[452,349],[349,451],[267,302],[302,269],[269,267],[350,357],[357,277],[277,350],[350,452],[452,357],[357,350],[299,333],[333,297],[297,299],[396,175],[175,377],[377,396],[280,347],[347,330],[330,280],[269,303],[303,270],[270,269],[151,9],[9,337],[337,151],[344,278],[278,360],[360,344],[424,418],[418,431],[431,424],[270,304],[304,409],[409,270],[272,310],[310,407],[407,272],[322,270],[270,410],[410,322],[449,450],[450,347],[347,449],[432,422],[422,434],[434,432],[18,313],[313,17],[17,18],[291,306],[306,375],[375,291],[259,387],[387,260],[260,259],[424,335],[335,418],[418,424],[434,364],[364,416],[416,434],[391,423],[423,327],[327,391],[301,251],[251,298],[298,301],[275,281],[281,4],[4,275],[254,373],[373,253],[253,254],[375,307],[307,321],[321,375],[280,425],[425,411],[411,280],[200,421],[421,18],[18,200],[335,321],[321,406],[406,335],[321,320],[320,405],[405,321],[314,315],[315,17],[17,314],[423,426],[426,266],[266,423],[396,377],[377,369],[369,396],[270,322],[322,269],[269,270],[413,417],[417,464],[464,413],[385,386],[386,258],[258,385],[248,456],[456,419],[419,248],[298,284],[284,333],[333,298],[168,417],[417,8],[8,168],[448,346],[346,261],[261,448],[417,413],[413,285],[285,417],[326,327],[327,328],[328,326],[277,355],[355,329],[329,277],[309,392],[392,438],[438,309],[381,382],[382,256],[256,381],[279,429],[429,360],[360,279],[365,364],[364,379],[379,365],[355,277],[277,437],[437,355],[282,443],[443,283],[283,282],[281,275],[275,363],[363,281],[395,431],[431,369],[369,395],[299,297],[297,337],[337,299],[335,273],[273,321],[321,335],[348,450],[450,349],[349,348],[359,446],[446,467],[467,359],[283,293],[293,282],[282,283],[250,458],[458,462],[462,250],[300,276],[276,383],[383,300],[292,308],[308,325],[325,292],[283,276],[276,293],[293,283],[264,372],[372,447],[447,264],[346,352],[352,340],[340,346],[354,274],[274,19],[19,354],[363,456],[456,281],[281,363],[426,436],[436,425],[425,426],[380,381],[381,252],[252,380],[267,269],[269,393],[393,267],[421,200],[200,428],[428,421],[371,266],[266,329],[329,371],[432,287],[287,422],[422,432],[290,250],[250,328],[328,290],[385,258],[258,384],[384,385],[446,265],[265,342],[342,446],[386,387],[387,257],[257,386],[422,424],[424,430],[430,422],[445,342],[342,276],[276,445],[422,273],[273,424],[424,422],[306,292],[292,307],[307,306],[352,366],[366,345],[345,352],[268,271],[271,302],[302,268],[358,423],[423,371],[371,358],[327,294],[294,460],[460,327],[331,279],[279,294],[294,331],[303,271],[271,304],[304,303],[436,432],[432,427],[427,436],[304,272],[272,408],[408,304],[395,394],[394,431],[431,395],[378,395],[395,400],[400,378],[296,334],[334,299],[299,296],[6,351],[351,168],[168,6],[376,352],[352,411],[411,376],[307,325],[325,320],[320,307],[285,295],[295,336],[336,285],[320,319],[319,404],[404,320],[329,330],[330,349],[349,329],[334,293],[293,333],[333,334],[366,323],[323,447],[447,366],[316,15],[15,315],[315,316],[331,358],[358,279],[279,331],[317,14],[14,316],[316,317],[8,285],[285,9],[9,8],[277,329],[329,350],[350,277],[253,374],[374,252],[252,253],[319,318],[318,403],[403,319],[351,6],[6,419],[419,351],[324,318],[318,325],[325,324],[397,367],[367,365],[365,397],[288,435],[435,397],[397,288],[278,344],[344,439],[439,278],[310,272],[272,311],[311,310],[248,195],[195,281],[281,248],[375,273],[273,291],[291,375],[175,396],[396,199],[199,175],[312,311],[311,268],[268,312],[276,283],[283,445],[445,276],[390,373],[373,339],[339,390],[295,282],[282,296],[296,295],[448,449],[449,346],[346,448],[356,264],[264,454],[454,356],[337,336],[336,299],[299,337],[337,338],[338,151],[151,337],[294,278],[278,455],[455,294],[308,292],[292,415],[415,308],[429,358],[358,355],[355,429],[265,340],[340,372],[372,265],[352,346],[346,280],[280,352],[295,442],[442,282],[282,295],[354,19],[19,370],[370,354],[285,441],[441,295],[295,285],[195,248],[248,197],[197,195],[457,440],[440,274],[274,457],[301,300],[300,368],[368,301],[417,351],[351,465],[465,417],[251,301],[301,389],[389,251],[394,395],[395,379],[379,394],[399,412],[412,419],[419,399],[410,436],[436,322],[322,410],[326,2],[2,393],[393,326],[354,370],[370,461],[461,354],[393,164],[164,267],[267,393],[268,302],[302,12],[12,268],[312,268],[268,13],[13,312],[298,293],[293,301],[301,298],[265,446],[446,340],[340,265],[280,330],[330,425],[425,280],[322,426],[426,391],[391,322],[420,429],[429,437],[437,420],[393,391],[391,326],[326,393],[344,440],[440,438],[438,344],[458,459],[459,461],[461,458],[364,434],[434,394],[394,364],[428,396],[396,262],[262,428],[274,354],[354,457],[457,274],[317,316],[316,402],[402,317],[316,315],[315,403],[403,316],[315,314],[314,404],[404,315],[314,313],[313,405],[405,314],[313,421],[421,406],[406,313],[323,366],[366,361],[361,323],[292,306],[306,407],[407,292],[306,291],[291,408],[408,306],[291,287],[287,409],[409,291],[287,432],[432,410],[410,287],[427,434],[434,411],[411,427],[372,264],[264,383],[383,372],[459,309],[309,457],[457,459],[366,352],[352,401],[401,366],[1,274],[274,4],[4,1],[418,421],[421,262],[262,418],[331,294],[294,358],[358,331],[435,433],[433,367],[367,435],[392,289],[289,439],[439,392],[328,462],[462,326],[326,328],[94,2],[2,370],[370,94],[289,305],[305,455],[455,289],[339,254],[254,448],[448,339],[359,255],[255,446],[446,359],[254,253],[253,449],[449,254],[253,252],[252,450],[450,253],[252,256],[256,451],[451,252],[256,341],[341,452],[452,256],[414,413],[413,463],[463,414],[286,441],[441,414],[414,286],[286,258],[258,441],[441,286],[258,257],[257,442],[442,258],[257,259],[259,443],[443,257],[259,260],[260,444],[444,259],[260,467],[467,445],[445,260],[309,459],[459,250],[250,309],[305,289],[289,290],[290,305],[305,290],[290,460],[460,305],[401,376],[376,435],[435,401],[309,250],[250,392],[392,309],[376,411],[411,433],[433,376],[453,341],[341,464],[464,453],[357,453],[453,465],[465,357],[343,357],[357,412],[412,343],[437,343],[343,399],[399,437],[344,360],[360,440],[440,344],[420,437],[437,456],[456,420],[360,420],[420,363],[363,360],[361,401],[401,288],[288,361],[265,372],[372,353],[353,265],[390,339],[339,249],[249,390],[339,448],[448,255],[255,339]]),Ct("HAND_CONNECTIONS",[[0,1],[1,2],[2,3],[3,4],[0,5],[5,6],[6,7],[7,8],[5,9],[9,10],[10,11],[11,12],[9,13],[13,14],[14,15],[15,16],[13,17],[0,17],[17,18],[18,19],[19,20]]),Ct("POSE_CONNECTIONS",[[0,1],[1,2],[2,3],[3,7],[0,4],[4,5],[5,6],[6,8],[9,10],[11,12],[11,13],[13,15],[15,17],[15,19],[15,21],[17,19],[12,14],[14,16],[16,18],[16,20],[16,22],[18,20],[11,23],[12,24],[23,24],[23,25],[24,26],[25,27],[26,28],[27,29],[28,30],[29,31],[30,32],[27,31],[28,32]]),Ct("POSE_LANDMARKS",{NOSE:0,LEFT_EYE_INNER:1,LEFT_EYE:2,LEFT_EYE_OUTER:3,RIGHT_EYE_INNER:4,RIGHT_EYE:5,RIGHT_EYE_OUTER:6,LEFT_EAR:7,RIGHT_EAR:8,LEFT_RIGHT:9,RIGHT_LEFT:10,LEFT_SHOULDER:11,RIGHT_SHOULDER:12,LEFT_ELBOW:13,RIGHT_ELBOW:14,LEFT_WRIST:15,RIGHT_WRIST:16,LEFT_PINKY:17,RIGHT_PINKY:18,LEFT_INDEX:19,RIGHT_INDEX:20,LEFT_THUMB:21,RIGHT_THUMB:22,LEFT_HIP:23,RIGHT_HIP:24,LEFT_KNEE:25,RIGHT_KNEE:26,LEFT_ANKLE:27,RIGHT_ANKLE:28,LEFT_HEEL:29,RIGHT_HEEL:30,LEFT_FOOT_INDEX:31,RIGHT_FOOT_INDEX:32}),Ct("POSE_LANDMARKS_LEFT",{LEFT_EYE_INNER:1,LEFT_EYE:2,LEFT_EYE_OUTER:3,LEFT_EAR:7,LEFT_RIGHT:9,LEFT_SHOULDER:11,LEFT_ELBOW:13,LEFT_WRIST:15,LEFT_PINKY:17,LEFT_INDEX:19,LEFT_THUMB:21,LEFT_HIP:23,LEFT_KNEE:25,LEFT_ANKLE:27,LEFT_HEEL:29,LEFT_FOOT_INDEX:31}),Ct("POSE_LANDMARKS_RIGHT",{RIGHT_EYE_INNER:4,RIGHT_EYE:5,RIGHT_EYE_OUTER:6,RIGHT_EAR:8,RIGHT_LEFT:10,RIGHT_SHOULDER:12,RIGHT_ELBOW:14,RIGHT_WRIST:16,RIGHT_PINKY:18,RIGHT_INDEX:20,RIGHT_THUMB:22,RIGHT_HIP:24,RIGHT_KNEE:26,RIGHT_ANKLE:28,RIGHT_HEEL:30,RIGHT_FOOT_INDEX:32}),Ct("POSE_LANDMARKS_NEUTRAL",{NOSE:0}),Ct("matrixDataToMatrix",function(e){for(var u=e.getCols(),m=e.getRows(),t=e.getPackedDataList(),c=[],a=0;a<m;a++)c.push(Array(u));for(a=0;a<m;a++)for(var b=0;b<u;b++){var S=e.getLayout()===1?a*u+b:b*m+a;c[a][b]=t[S]}return c}),Ct("VERSION","0.5.1635989137")}).call(Wi);const Vi={};(function(){var i;function n(o){var d=0;return function(){return d<o.length?{done:!1,value:o[d++]}:{done:!0}}}var r=typeof Object.defineProperties=="function"?Object.defineProperty:function(o,d,g){return o==Array.prototype||o==Object.prototype||(o[d]=g.value),o};function f(o){o=[typeof globalThis=="object"&&globalThis,o,typeof window=="object"&&window,typeof self=="object"&&self,typeof global=="object"&&global];for(var d=0;d<o.length;++d){var g=o[d];if(g&&g.Math==Math)return g}throw Error("Cannot find global object")}var Z=f(this);function x(o,d){if(d)t:{var g=Z;o=o.split(".");for(var e=0;e<o.length-1;e++){var u=o[e];if(!(u in g))break t;g=g[u]}o=o[o.length-1],e=g[o],d=d(e),d!=e&&d!=null&&r(g,o,{configurable:!0,writable:!0,value:d})}}x("Symbol",function(o){function d(m){if(this instanceof d)throw new TypeError("Symbol is not a constructor");return new g(e+(m||"")+"_"+u++,m)}function g(m,t){this.g=m,r(this,"description",{configurable:!0,writable:!0,value:t})}if(o)return o;g.prototype.toString=function(){return this.g};var e="jscomp_symbol_"+(1e9*Math.random()>>>0)+"_",u=0;return d}),x("Symbol.iterator",function(o){if(o)return o;o=Symbol("Symbol.iterator");for(var d="Array Int8Array Uint8Array Uint8ClampedArray Int16Array Uint16Array Int32Array Uint32Array Float32Array Float64Array".split(" "),g=0;g<d.length;g++){var e=Z[d[g]];typeof e=="function"&&typeof e.prototype[o]!="function"&&r(e.prototype,o,{configurable:!0,writable:!0,value:function(){return H(n(this))}})}return o});function H(o){return o={next:o},o[Symbol.iterator]=function(){return this},o}function T(o){var d=typeof Symbol<"u"&&Symbol.iterator&&o[Symbol.iterator];return d?d.call(o):{next:n(o)}}function J(o){if(!(o instanceof Array)){o=T(o);for(var d,g=[];!(d=o.next()).done;)g.push(d.value);o=g}return o}var et=typeof Object.create=="function"?Object.create:function(o){function d(){}return d.prototype=o,new d},lt;if(typeof Object.setPrototypeOf=="function")lt=Object.setPrototypeOf;else{var pt;t:{var Yt={a:!0},Lt={};try{Lt.__proto__=Yt,pt=Lt.a;break t}catch{}pt=!1}lt=pt?function(o,d){if(o.__proto__=d,o.__proto__!==d)throw new TypeError(o+" is not extensible");return o}:null}var at=lt;function dt(o,d){if(o.prototype=et(d.prototype),o.prototype.constructor=o,at)at(o,d);else for(var g in d)if(g!="prototype")if(Object.defineProperties){var e=Object.getOwnPropertyDescriptor(d,g);e&&Object.defineProperty(o,g,e)}else o[g]=d[g];o.na=d.prototype}function Bt(){this.l=!1,this.i=null,this.h=void 0,this.g=1,this.u=this.o=0,this.j=null}function Nt(o){if(o.l)throw new TypeError("Generator is already running");o.l=!0}Bt.prototype.s=function(o){this.h=o};function ee(o,d){o.j={da:d,ea:!0},o.g=o.o||o.u}Bt.prototype.return=function(o){this.j={return:o},this.g=this.u};function O(o,d,g){return o.g=g,{value:d}}function $e(o){this.g=new Bt,this.h=o}function je(o,d){Nt(o.g);var g=o.g.i;return g?We(o,"return"in g?g.return:function(e){return{value:e,done:!0}},d,o.g.return):(o.g.return(d),zt(o))}function We(o,d,g,e){try{var u=d.call(o.g.i,g);if(!(u instanceof Object))throw new TypeError("Iterator result "+u+" is not an object");if(!u.done)return o.g.l=!1,u;var m=u.value}catch(t){return o.g.i=null,ee(o.g,t),zt(o)}return o.g.i=null,e.call(o.g,m),zt(o)}function zt(o){for(;o.g.g;)try{var d=o.h(o.g);if(d)return o.g.l=!1,{value:d.value,done:!1}}catch(g){o.g.h=void 0,ee(o.g,g)}if(o.g.l=!1,o.g.j){if(d=o.g.j,o.g.j=null,d.ea)throw d.da;return{value:d.return,done:!0}}return{value:void 0,done:!0}}function Jn(o){this.next=function(d){return Nt(o.g),o.g.i?d=We(o,o.g.i.next,d,o.g.s):(o.g.s(d),d=zt(o)),d},this.throw=function(d){return Nt(o.g),o.g.i?d=We(o,o.g.i.throw,d,o.g.s):(ee(o.g,d),d=zt(o)),d},this.return=function(d){return je(o,d)},this[Symbol.iterator]=function(){return this}}function ne(o){function d(e){return o.next(e)}function g(e){return o.throw(e)}return new Promise(function(e,u){function m(t){t.done?e(t.value):Promise.resolve(t.value).then(d,g).then(m,u)}m(o.next())})}function Zt(o){return ne(new Jn(new $e(o)))}x("Promise",function(o){function d(t){this.h=0,this.i=void 0,this.g=[],this.s=!1;var c=this.j();try{t(c.resolve,c.reject)}catch(a){c.reject(a)}}function g(){this.g=null}function e(t){return t instanceof d?t:new d(function(c){c(t)})}if(o)return o;g.prototype.h=function(t){if(this.g==null){this.g=[];var c=this;this.i(function(){c.l()})}this.g.push(t)};var u=Z.setTimeout;g.prototype.i=function(t){u(t,0)},g.prototype.l=function(){for(;this.g&&this.g.length;){var t=this.g;this.g=[];for(var c=0;c<t.length;++c){var a=t[c];t[c]=null;try{a()}catch(b){this.j(b)}}}this.g=null},g.prototype.j=function(t){this.i(function(){throw t})},d.prototype.j=function(){function t(b){return function(S){a||(a=!0,b.call(c,S))}}var c=this,a=!1;return{resolve:t(this.D),reject:t(this.l)}},d.prototype.D=function(t){if(t===this)this.l(new TypeError("A Promise cannot resolve to itself"));else if(t instanceof d)this.H(t);else{t:switch(typeof t){case"object":var c=t!=null;break t;case"function":c=!0;break t;default:c=!1}c?this.A(t):this.o(t)}},d.prototype.A=function(t){var c=void 0;try{c=t.then}catch(a){this.l(a);return}typeof c=="function"?this.I(c,t):this.o(t)},d.prototype.l=function(t){this.u(2,t)},d.prototype.o=function(t){this.u(1,t)},d.prototype.u=function(t,c){if(this.h!=0)throw Error("Cannot settle("+t+", "+c+"): Promise already settled in state"+this.h);this.h=t,this.i=c,this.h===2&&this.G(),this.B()},d.prototype.G=function(){var t=this;u(function(){if(t.C()){var c=Z.console;typeof c<"u"&&c.error(t.i)}},1)},d.prototype.C=function(){if(this.s)return!1;var t=Z.CustomEvent,c=Z.Event,a=Z.dispatchEvent;return typeof a>"u"?!0:(typeof t=="function"?t=new t("unhandledrejection",{cancelable:!0}):typeof c=="function"?t=new c("unhandledrejection",{cancelable:!0}):(t=Z.document.createEvent("CustomEvent"),t.initCustomEvent("unhandledrejection",!1,!0,t)),t.promise=this,t.reason=this.i,a(t))},d.prototype.B=function(){if(this.g!=null){for(var t=0;t<this.g.length;++t)m.h(this.g[t]);this.g=null}};var m=new g;return d.prototype.H=function(t){var c=this.j();t.M(c.resolve,c.reject)},d.prototype.I=function(t,c){var a=this.j();try{t.call(c,a.resolve,a.reject)}catch(b){a.reject(b)}},d.prototype.then=function(t,c){function a(F,U){return typeof F=="function"?function(z){try{b(F(z))}catch(Q){S(Q)}}:U}var b,S,L=new d(function(F,U){b=F,S=U});return this.M(a(t,b),a(c,S)),L},d.prototype.catch=function(t){return this.then(void 0,t)},d.prototype.M=function(t,c){function a(){switch(b.h){case 1:t(b.i);break;case 2:c(b.i);break;default:throw Error("Unexpected state: "+b.h)}}var b=this;this.g==null?m.h(a):this.g.push(a),this.s=!0},d.resolve=e,d.reject=function(t){return new d(function(c,a){a(t)})},d.race=function(t){return new d(function(c,a){for(var b=T(t),S=b.next();!S.done;S=b.next())e(S.value).M(c,a)})},d.all=function(t){var c=T(t),a=c.next();return a.done?e([]):new d(function(b,S){function L(z){return function(Q){F[z]=Q,U--,U==0&&b(F)}}var F=[],U=0;do F.push(void 0),U++,e(a.value).M(L(F.length-1),S),a=c.next();while(!a.done)})},d});function qe(o,d){o instanceof String&&(o+="");var g=0,e=!1,u={next:function(){if(!e&&g<o.length){var m=g++;return{value:d(m,o[m]),done:!1}}return e=!0,{done:!0,value:void 0}}};return u[Symbol.iterator]=function(){return u},u}var zn=typeof Object.assign=="function"?Object.assign:function(o,d){for(var g=1;g<arguments.length;g++){var e=arguments[g];if(e)for(var u in e)Object.prototype.hasOwnProperty.call(e,u)&&(o[u]=e[u])}return o};x("Object.assign",function(o){return o||zn}),x("Object.is",function(o){return o||function(d,g){return d===g?d!==0||1/d===1/g:d!==d&&g!==g}}),x("Array.prototype.includes",function(o){return o||function(d,g){var e=this;e instanceof String&&(e=String(e));var u=e.length;for(g=g||0,0>g&&(g=Math.max(g+u,0));g<u;g++){var m=e[g];if(m===d||Object.is(m,d))return!0}return!1}}),x("String.prototype.includes",function(o){return o||function(d,g){if(this==null)throw new TypeError("The 'this' value for String.prototype.includes must not be null or undefined");if(d instanceof RegExp)throw new TypeError("First argument to String.prototype.includes must not be a regular expression");return this.indexOf(d,g||0)!==-1}}),x("Array.prototype.keys",function(o){return o||function(){return qe(this,function(d){return d})}});var Re=this||self;function Ct(o,d){o=o.split(".");var g=Re;o[0]in g||typeof g.execScript>"u"||g.execScript("var "+o[0]);for(var e;o.length&&(e=o.shift());)o.length||d===void 0?g[e]&&g[e]!==Object.prototype[e]?g=g[e]:g=g[e]={}:g[e]=d}function Te(){throw Error("Invalid UTF8")}function ln(o,d){return d=String.fromCharCode.apply(null,d),o==null?d:o+d}var Xn,Hn=typeof TextDecoder<"u",In,kn=typeof TextEncoder<"u",hn={},bn=null;function En(o){var d;d===void 0&&(d=0),Ae(),d=hn[d];for(var g=Array(Math.floor(o.length/3)),e=d[64]||"",u=0,m=0;u<o.length-2;u+=3){var t=o[u],c=o[u+1],a=o[u+2],b=d[t>>2];t=d[(t&3)<<4|c>>4],c=d[(c&15)<<2|a>>6],a=d[a&63],g[m++]=b+t+c+a}switch(b=0,a=e,o.length-u){case 2:b=o[u+1],a=d[(b&15)<<2]||e;case 1:o=o[u],g[m]=d[o>>2]+d[(o&3)<<4|b>>4]+a+e}return g.join("")}function Fn(o){var d=o.length,g=3*d/4;g%3?g=Math.floor(g):"=.".indexOf(o[d-1])!=-1&&(g="=.".indexOf(o[d-2])!=-1?g-2:g-1);var e=new Uint8Array(g),u=0;return Pe(o,function(m){e[u++]=m}),u!==g?e.subarray(0,u):e}function Pe(o,d){function g(a){for(;e<o.length;){var b=o.charAt(e++),S=bn[b];if(S!=null)return S;if(!/^[\s\xa0]*$/.test(b))throw Error("Unknown base64 encoding at char: "+b)}return a}Ae();for(var e=0;;){var u=g(-1),m=g(0),t=g(64),c=g(64);if(c===64&&u===-1)break;d(u<<2|m>>4),t!=64&&(d(m<<4&240|t>>2),c!=64&&d(t<<6&192|c))}}function Ae(){if(!bn){bn={};for(var o="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789".split(""),d=["+/=","+/","-_=","-_.","-_"],g=0;5>g;g++){var e=o.concat(d[g].split(""));hn[g]=e;for(var u=0;u<e.length;u++){var m=e[u];bn[m]===void 0&&(bn[m]=u)}}}}var xn=typeof Uint8Array=="function";function Wn(o){return xn&&o!=null&&o instanceof Uint8Array}var he;function Se(o){if(this.L=o,o!==null&&o.length===0)throw Error("ByteString should be constructed with non-empty values")}var Oe=typeof Uint8Array.prototype.slice=="function",re=0,Ve=0;function cn(o,d){if(o.constructor===Uint8Array)return o;if(o.constructor===ArrayBuffer)return new Uint8Array(o);if(o.constructor===Array)return new Uint8Array(o);if(o.constructor===String)return Fn(o);if(o.constructor===Se)return!d&&(d=o.L)&&d.constructor===Uint8Array?d:(d=o.L,d=d==null||Wn(d)?d:typeof d=="string"?Fn(d):null,(o=o.L=d)?new Uint8Array(o):he||(he=new Uint8Array(0)));if(o instanceof Uint8Array)return new Uint8Array(o.buffer,o.byteOffset,o.byteLength);throw Error("Type not convertible to a Uint8Array, expected a Uint8Array, an ArrayBuffer, a base64 encoded string, or Array of numbers")}function Be(o,d){return Error("Invalid wire type: "+o+" (at position "+d+")")}function Qt(){return Error("Failed to read varint, encoding is invalid.")}function Ze(o,d){d=d===void 0?{}:d,d=d.v===void 0?!1:d.v,this.h=null,this.g=this.i=this.j=0,this.v=d,o&&Fe(this,o)}function Fe(o,d){o.h=cn(d,o.v),o.j=0,o.i=o.h.length,o.g=o.j}Ze.prototype.reset=function(){this.g=this.j};function Mt(o){if(o.g>o.i)throw Error("Tried to read past the end of the data "+o.g+" > "+o.i)}function Ie(o){var d=o.h,g=d[o.g],e=g&127;if(128>g)return o.g+=1,Mt(o),e;if(g=d[o.g+1],e|=(g&127)<<7,128>g)return o.g+=2,Mt(o),e;if(g=d[o.g+2],e|=(g&127)<<14,128>g)return o.g+=3,Mt(o),e;if(g=d[o.g+3],e|=(g&127)<<21,128>g)return o.g+=4,Mt(o),e;if(g=d[o.g+4],o.g+=5,e|=(g&15)<<28,128>g)return Mt(o),e;if(128<=d[o.g++]&&128<=d[o.g++]&&128<=d[o.g++]&&128<=d[o.g++]&&128<=d[o.g++])throw Qt();return Mt(o),e}var jt=[];function ye(){this.g=[]}ye.prototype.length=function(){return this.g.length},ye.prototype.end=function(){var o=this.g;return this.g=[],o};function Ye(o,d){for(;127<d;)o.g.push(d&127|128),d>>>=7;o.g.push(d)}function tn(o){var d={},g=d.W===void 0?!1:d.W;this.l={v:d.v===void 0?!1:d.v},this.W=g,d=this.l,jt.length?(g=jt.pop(),d&&(g.v=d.v),o&&Fe(g,o),o=g):o=new Ze(o,d),this.g=o,this.j=this.g.g,this.h=this.i=-1}tn.prototype.reset=function(){this.g.reset(),this.j=this.g.g,this.h=this.i=-1};function Xe(o){var d=o.g;if(d.g==d.i)return!1;o.j=o.g.g;var g=Ie(o.g)>>>0;if(d=g>>>3,g&=7,!(0<=g&&5>=g))throw Be(g,o.j);if(1>d)throw Error("Invalid field number: "+d+" (at position "+o.j+")");return o.i=d,o.h=g,!0}function Pt(o){switch(o.h){case 0:if(o.h!=0)Pt(o);else t:{o=o.g;for(var d=o.g,g=d+10;d<g;)if((o.h[d++]&128)===0){o.g=d,Mt(o);break t}throw Qt()}break;case 1:o=o.g,o.g+=8,Mt(o);break;case 2:o.h!=2?Pt(o):(d=Ie(o.g)>>>0,o=o.g,o.g+=d,Mt(o));break;case 5:o=o.g,o.g+=4,Mt(o);break;case 3:d=o.i;do{if(!Xe(o))throw Error("Unmatched start-group tag: stream EOF");if(o.h==4){if(o.i!=d)throw Error("Unmatched end-group tag");break}Pt(o)}while(1);break;default:throw Be(o.h,o.j)}}var ze=[];function _e(){this.i=[],this.h=0,this.g=new ye}function xe(o,d){d.length!==0&&(o.i.push(d),o.h+=d.length)}function Vn(o,d){if(d=d.ba){xe(o,o.g.end());for(var g=0;g<d.length;g++)xe(o,d[g])}}var un=typeof Symbol=="function"&&typeof Symbol()=="symbol"?Symbol(void 0):void 0;function Qe(o,d){Object.isFrozen(o)||(un?o[un]|=d:o.N!==void 0?o.N|=d:Object.defineProperties(o,{N:{value:d,configurable:!0,writable:!0,enumerable:!1}}))}function an(o){var d;return un?d=o[un]:d=o.N,d==null?0:d}function ve(o){return Qe(o,1),o}function we(o){return Array.isArray(o)?!!(an(o)&2):!1}function Ge(o){if(!Array.isArray(o))throw Error("cannot mark non-array as immutable");Qe(o,2)}function ie(o){return o!==null&&typeof o=="object"&&!Array.isArray(o)&&o.constructor===Object}var De=Object.freeze(ve([]));function qt(o){if(we(o.m))throw Error("Cannot mutate an immutable Message")}var Ot=typeof Symbol<"u"&&typeof Symbol.hasInstance<"u";function fn(o){return{value:o,configurable:!1,writable:!1,enumerable:!1}}function fe(o,d,g){return d===-1?null:d>=o.i?o.g?o.g[d]:void 0:(g===void 0?0:g)&&o.g&&(g=o.g[d],g!=null)?g:o.m[d+o.h]}function Ft(o,d,g,e){e=e===void 0?!1:e,qt(o),d<o.i&&!e?o.m[d+o.h]=g:(o.g||(o.g=o.m[o.i+o.h]={}))[d]=g}function Vt(o,d,g,e){g=g===void 0?!0:g,e=e===void 0?!1:e;var u=fe(o,d,e);return u==null&&(u=De),we(o.m)?g&&(Ge(u),Object.freeze(u)):(u===De||we(u))&&(u=ve(u.slice()),Ft(o,d,u,e)),u}function oe(o,d,g){return o=fe(o,d),o=o==null?o:+o,o==null?g===void 0?0:g:o}function Le(o,d,g,e){o.j||(o.j={});var u=we(o.m),m=o.j[g];if(!m){e=Vt(o,g,!0,e===void 0?!1:e),m=[],u=u||we(e);for(var t=0;t<e.length;t++)m[t]=new d(e[t]),u&&Ge(m[t].m);u&&(Ge(m),Object.freeze(m)),o.j[g]=m}return m}function te(o,d,g,e,u){var m=m===void 0?!1:m;return qt(o),m=Le(o,g,d,m),g=e||new g,o=Vt(o,d),u!=null?(m.splice(u,0,g),o.splice(u,0,g.m)):(m.push(g),o.push(g.m)),g}function se(o,d){return o=fe(o,d),o==null?0:o}function tt(o,d){return o=fe(o,d),o==null?"":o}function it(o){switch(typeof o){case"number":return isFinite(o)?o:String(o);case"object":if(o&&!Array.isArray(o)){if(Wn(o))return En(o);if(o instanceof Se){var d=o.L;return d=d==null||typeof d=="string"?d:xn&&d instanceof Uint8Array?En(d):null,(o.L=d)||""}}}return o}function ut(o){var d=ue;return d=d===void 0?St:d,de(o,d)}function _t(o,d){if(o!=null){if(Array.isArray(o))o=de(o,d);else if(ie(o)){var g={},e;for(e in o)g[e]=_t(o[e],d);o=g}else o=d(o);return o}}function de(o,d){for(var g=o.slice(),e=0;e<g.length;e++)g[e]=_t(g[e],d);return Array.isArray(o)&&an(o)&1&&ve(g),g}function ue(o){return o&&typeof o=="object"&&o.toJSON?o.toJSON():(o=it(o),Array.isArray(o)?ut(o):o)}function St(o){return Wn(o)?new Uint8Array(o):o}function me(o,d,g){o||(o=Ce),Ce=null;var e=this.constructor.h;o||(o=e?[e]:[]),this.h=(e?0:-1)-(this.constructor.g||0),this.j=void 0,this.m=o;t:{if(e=this.m.length,o=e-1,e&&(e=this.m[o],ie(e))){this.i=o-this.h,this.g=e;break t}d!==void 0&&-1<d?(this.i=Math.max(d,o+1-this.h),this.g=void 0):this.i=Number.MAX_VALUE}if(g)for(d=0;d<g.length;d++)if(o=g[d],o<this.i)o+=this.h,(e=this.m[o])?Array.isArray(e)&&ve(e):this.m[o]=De;else{e=this.g||(this.g=this.m[this.i+this.h]={});var u=e[o];u?Array.isArray(u)&&ve(u):e[o]=De}}me.prototype.toJSON=function(){return ut(this.m)},me.prototype.toString=function(){return this.m.toString()};var Ce;function en(){me.apply(this,arguments)}if(dt(en,me),Ot){var nn={};Object.defineProperties(en,(nn[Symbol.hasInstance]=fn(function(){throw Error("Cannot perform instanceof checks for MutableMessage")}),nn))}function mn(o,d,g){if(g){var e={},u;for(u in g){var m=g[u],t=m.ha;t||(e.F=m.la||m.fa.P,m.aa?(e.U=Sn(m.aa),t=function(c){return function(a,b,S){return c.F(a,b,S,c.U)}}(e)):m.ca?(e.T=Ke(m.X.g,m.ca),t=function(c){return function(a,b,S){return c.F(a,b,S,c.T)}}(e)):t=e.F,m.ha=t),t(d,o,m.X),e={F:e.F,U:e.U,T:e.T}}}Vn(d,o)}var yn=Symbol();function He(o,d,g){return o[yn]||(o[yn]=function(e,u){return d(e,u,g)})}function rn(o){var d=o[yn];if(!d){var g=p(o);d=function(e,u){return W(e,u,g)},o[yn]=d}return d}function jn(o){var d=o.aa;if(d)return rn(d);if(d=o.ka)return He(o.X.g,d,o.ca)}function on(o){var d=jn(o),g=o.X,e=o.fa.O;return d?function(u,m){return e(u,m,g,d)}:function(u,m){return e(u,m,g)}}function Je(o,d,g,e,u,m){o=o();var t=0;for(o.length&&typeof o[0]!="number"&&(g(d,o[0]),t++);t<o.length;){g=o[t++];for(var c=t+1;c<o.length&&typeof o[c]!="number";)c++;var a=o[t++];switch(c-=t,c){case 0:e(d,g,a);break;case 1:e(d,g,a,o[t++]);break;case 2:u(d,g,a,o[t++],o[t++]);break;case 3:c=o[t++];var b=o[t++],S=o[t++];Array.isArray(S)?u(d,g,a,c,b,S):m(d,g,a,c,b,S);break;case 4:m(d,g,a,o[t++],o[t++],o[t++],o[t++]);break;default:throw Error("unexpected number of binary field arguments: "+c)}}return d}var Zn=Symbol();function Sn(o){var d=o[Zn];if(!d){var g=dn(o);d=function(e,u){return E(e,u,g)},o[Zn]=d}return d}function Ke(o,d){var g=o[Zn];return g||(g=function(e,u){return mn(e,u,d)},o[Zn]=g),g}var Un=Symbol();function sn(o,d){o.push(d)}function vn(o,d,g){o.push(d,g.P)}function Tn(o,d,g,e,u){var m=Sn(u),t=g.P;o.push(d,function(c,a,b){return t(c,a,b,e,m)})}function Mn(o,d,g,e,u,m){var t=Ke(e,m),c=g.P;o.push(d,function(a,b,S){return c(a,b,S,e,t)})}function dn(o){var d=o[Un];return d||Je(o,o[Un]=[],sn,vn,Tn,Mn)}var Yn=Symbol();function _n(o,d){o[0]=d}function Qn(o,d,g,e){var u=g.O;o[d]=e?function(m,t,c){return u(m,t,c,e)}:u}function wn(o,d,g,e,u,m){var t=g.O,c=rn(u);o[d]=function(a,b,S){return t(a,b,S,e,c,m)}}function Cn(o,d,g,e,u,m,t){var c=g.O,a=He(e,u,m);o[d]=function(b,S,L){return c(b,S,L,e,a,t)}}function p(o){var d=o[Yn];return d||Je(o,o[Yn]={},_n,Qn,wn,Cn)}function W(o,d,g){for(;Xe(d)&&d.h!=4;){var e=d.i,u=g[e];if(!u){var m=g[0];m&&(m=m[e])&&(u=g[e]=on(m))}if((!u||!u(d,o,e))&&(u=d,e=o,m=u.j,Pt(u),!u.W)){var t=u.g.h;u=u.g.g,u=m===u?he||(he=new Uint8Array(0)):Oe?t.slice(m,u):new Uint8Array(t.subarray(m,u)),(m=e.ba)?m.push(u):e.ba=[u]}}return o}function V(o,d,g){if(ze.length){var e=ze.pop();o&&(Fe(e.g,o),e.i=-1,e.h=-1),o=e}else o=new tn(o);try{return W(new d,o,p(g))}finally{d=o.g,d.h=null,d.j=0,d.i=0,d.g=0,d.v=!1,o.i=-1,o.h=-1,100>ze.length&&ze.push(o)}}function E(o,d,g){for(var e=g.length,u=e%2==1,m=u?1:0;m<e;m+=2)(0,g[m+1])(d,o,g[m]);mn(o,d,u?g[0]:void 0)}function P(o,d){var g=new _e;E(o,g,dn(d)),xe(g,g.g.end()),o=new Uint8Array(g.h),d=g.i;for(var e=d.length,u=0,m=0;m<e;m++){var t=d[m];o.set(t,u),u+=t.length}return g.i=[o],o}function ot(o,d){return{O:o,P:d}}var j=ot(function(o,d,g){if(o.h!==5)return!1;o=o.g;var e=o.h[o.g],u=o.h[o.g+1],m=o.h[o.g+2],t=o.h[o.g+3];return o.g+=4,Mt(o),u=(e<<0|u<<8|m<<16|t<<24)>>>0,o=2*(u>>31)+1,e=u>>>23&255,u&=8388607,Ft(d,g,e==255?u?NaN:1/0*o:e==0?o*Math.pow(2,-149)*u:o*Math.pow(2,e-150)*(u+Math.pow(2,23))),!0},function(o,d,g){if(d=fe(d,g),d!=null){Ye(o.g,8*g+5),o=o.g;var e=d;e=(g=0>e?1:0)?-e:e,e===0?0<1/e?re=Ve=0:(Ve=0,re=2147483648):isNaN(e)?(Ve=0,re=2147483647):34028234663852886e22<e?(Ve=0,re=(g<<31|2139095040)>>>0):11754943508222875e-54>e?(e=Math.round(e/Math.pow(2,-149)),Ve=0,re=(g<<31|e)>>>0):(d=Math.floor(Math.log(e)/Math.LN2),e*=Math.pow(2,-d),e=Math.round(8388608*e),16777216<=e&&++d,Ve=0,re=(g<<31|d+127<<23|e&8388607)>>>0),g=re,o.g.push(g>>>0&255),o.g.push(g>>>8&255),o.g.push(g>>>16&255),o.g.push(g>>>24&255)}}),rt=ot(function(o,d,g){if(o.h!==0)return!1;for(var e=o.g,u=128,m=0,t=o=0;4>t&&128<=u;t++)u=e.h[e.g++],Mt(e),m|=(u&127)<<7*t;if(128<=u&&(u=e.h[e.g++],Mt(e),m|=(u&127)<<28,o|=(u&127)>>4),128<=u)for(t=0;5>t&&128<=u;t++)u=e.h[e.g++],Mt(e),o|=(u&127)<<7*t+3;if(128>u)e=m>>>0,u=o>>>0,(o=u&2147483648)&&(e=~e+1>>>0,u=~u>>>0,e==0&&(u=u+1>>>0)),e=4294967296*u+(e>>>0);else throw Qt();return Ft(d,g,o?-e:e),!0},function(o,d,g){if(d=fe(d,g),d!=null&&d!=null){Ye(o.g,8*g),o=o.g;var e=d;for(g=0>e,e=Math.abs(e),d=e>>>0,e=Math.floor((e-d)/4294967296),e>>>=0,g&&(e=~e>>>0,d=(~d>>>0)+1,4294967295<d&&(d=0,e++,4294967295<e&&(e=0))),re=d,Ve=e,g=re,d=Ve;0<d||127<g;)o.g.push(g&127|128),g=(g>>>7|d<<25)>>>0,d>>>=7;o.g.push(g)}}),bt=ot(function(o,d,g){return o.h!==0?!1:(Ft(d,g,Ie(o.g)),!0)},function(o,d,g){if(d=fe(d,g),d!=null&&d!=null)if(Ye(o.g,8*g),o=o.g,g=d,0<=g)Ye(o,g);else{for(d=0;9>d;d++)o.g.push(g&127|128),g>>=7;o.g.push(1)}}),Rt=ot(function(o,d,g){if(o.h!==2)return!1;var e=Ie(o.g)>>>0;o=o.g;var u=o.g;o.g+=e,Mt(o),o=o.h;var m;if(Hn)(m=Xn)||(m=Xn=new TextDecoder("utf-8",{fatal:!0})),m=m.decode(o.subarray(u,u+e));else{e=u+e;for(var t=[],c=null,a,b,S;u<e;)a=o[u++],128>a?t.push(a):224>a?u>=e?Te():(b=o[u++],194>a||(b&192)!==128?(u--,Te()):t.push((a&31)<<6|b&63)):240>a?u>=e-1?Te():(b=o[u++],(b&192)!==128||a===224&&160>b||a===237&&160<=b||((m=o[u++])&192)!==128?(u--,Te()):t.push((a&15)<<12|(b&63)<<6|m&63)):244>=a?u>=e-2?Te():(b=o[u++],(b&192)!==128||(a<<28)+(b-144)>>30!==0||((m=o[u++])&192)!==128||((S=o[u++])&192)!==128?(u--,Te()):(a=(a&7)<<18|(b&63)<<12|(m&63)<<6|S&63,a-=65536,t.push((a>>10&1023)+55296,(a&1023)+56320))):Te(),8192<=t.length&&(c=ln(c,t),t.length=0);m=ln(c,t)}return Ft(d,g,m),!0},function(o,d,g){if(d=fe(d,g),d!=null){var e=!1;if(e=e===void 0?!1:e,kn){if(e&&/(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])/.test(d))throw Error("Found an unpaired surrogate");d=(In||(In=new TextEncoder)).encode(d)}else{for(var u=0,m=new Uint8Array(3*d.length),t=0;t<d.length;t++){var c=d.charCodeAt(t);if(128>c)m[u++]=c;else{if(2048>c)m[u++]=c>>6|192;else{if(55296<=c&&57343>=c){if(56319>=c&&t<d.length){var a=d.charCodeAt(++t);if(56320<=a&&57343>=a){c=1024*(c-55296)+a-56320+65536,m[u++]=c>>18|240,m[u++]=c>>12&63|128,m[u++]=c>>6&63|128,m[u++]=c&63|128;continue}else t--}if(e)throw Error("Found an unpaired surrogate");c=65533}m[u++]=c>>12|224,m[u++]=c>>6&63|128}m[u++]=c&63|128}}d=m.subarray(0,u)}Ye(o.g,8*g+2),Ye(o.g,d.length),xe(o,o.g.end()),xe(o,d)}}),Ut=ot(function(o,d,g,e,u){if(o.h!==2)return!1;d=te(d,g,e),g=o.g.i,e=Ie(o.g)>>>0;var m=o.g.g+e,t=m-g;if(0>=t&&(o.g.i=m,u(d,o),t=m-o.g.g),t)throw Error("Message parsing ended unexpectedly. Expected to read "+(e+" bytes, instead read "+(e-t)+" bytes, either the data ended unexpectedly or the message misreported its own length"));return o.g.g=m,o.g.i=g,!0},function(o,d,g,e,u){if(d=Le(d,e,g),d!=null)for(e=0;e<d.length;e++){var m=o;Ye(m.g,8*g+2);var t=m.g.end();xe(m,t),t.push(m.h),m=t,u(d[e],o),t=o;var c=m.pop();for(c=t.h+t.g.length()-c;127<c;)m.push(c&127|128),c>>>=7,t.h++;m.push(c),t.h++}});function Jt(){en.apply(this,arguments)}if(dt(Jt,en),Ot){var $t={};Object.defineProperties(Jt,($t[Symbol.hasInstance]=fn(Object[Symbol.hasInstance]),$t))}function kt(o){Jt.call(this,o)}dt(kt,Jt);function Tt(){return[1,bt,2,j,3,Rt,4,Rt]}function Et(o){Jt.call(this,o,-1,ae)}dt(Et,Jt),Et.prototype.addClassification=function(o,d){return te(this,1,kt,o,d),this};function Dt(){return[1,Ut,kt,Tt]}var ae=[1];function pe(o){Jt.call(this,o)}dt(pe,Jt);function ge(){return[1,j,2,j,3,j,4,j,5,j]}function ke(o){Jt.call(this,o,-1,y)}dt(ke,Jt);function h(){return[1,Ut,pe,ge]}var y=[1];function G(o){Jt.call(this,o)}dt(G,Jt);function C(){return[1,j,2,j,3,j,4,j,5,j,6,rt]}var K=[[61,146],[146,91],[91,181],[181,84],[84,17],[17,314],[314,405],[405,321],[321,375],[375,291],[61,185],[185,40],[40,39],[39,37],[37,0],[0,267],[267,269],[269,270],[270,409],[409,291],[78,95],[95,88],[88,178],[178,87],[87,14],[14,317],[317,402],[402,318],[318,324],[324,308],[78,191],[191,80],[80,81],[81,82],[82,13],[13,312],[312,311],[311,310],[310,415],[415,308]],_=[[263,249],[249,390],[390,373],[373,374],[374,380],[380,381],[381,382],[382,362],[263,466],[466,388],[388,387],[387,386],[386,385],[385,384],[384,398],[398,362]],M=[[276,283],[283,282],[282,295],[295,285],[300,293],[293,334],[334,296],[296,336]],q=[[33,7],[7,163],[163,144],[144,145],[145,153],[153,154],[154,155],[155,133],[33,246],[246,161],[161,160],[160,159],[159,158],[158,157],[157,173],[173,133]],ct=[[46,53],[53,52],[52,65],[65,55],[70,63],[63,105],[105,66],[66,107]],s=[[10,338],[338,297],[297,332],[332,284],[284,251],[251,389],[389,356],[356,454],[454,323],[323,361],[361,288],[288,397],[397,365],[365,379],[379,378],[378,400],[400,377],[377,152],[152,148],[148,176],[176,149],[149,150],[150,136],[136,172],[172,58],[58,132],[132,93],[93,234],[234,127],[127,162],[162,21],[21,54],[54,103],[103,67],[67,109],[109,10]],X=[].concat(J(K),J(_),J(M),J(q),J(ct),J(s));function R(o,d,g){if(g=o.createShader(g===0?o.VERTEX_SHADER:o.FRAGMENT_SHADER),o.shaderSource(g,d),o.compileShader(g),!o.getShaderParameter(g,o.COMPILE_STATUS))throw Error(`Could not compile WebGL shader.
|
|
53
|
+
`+m.getProgramInfoLog(a));t=e.m=a,m.useProgram(t),c=m.getUniformLocation(t,"sampler0"),e.j={I:m.getAttribLocation(t,"aVertex"),H:m.getAttribLocation(t,"aTex"),ca:c},e.s=m.createBuffer(),m.bindBuffer(m.ARRAY_BUFFER,e.s),m.enableVertexAttribArray(e.j.I),m.vertexAttribPointer(e.j.I,2,m.FLOAT,!1,0,0),m.bufferData(m.ARRAY_BUFFER,new Float32Array([-1,-1,-1,1,1,1,1,-1]),m.STATIC_DRAW),m.bindBuffer(m.ARRAY_BUFFER,null),e.o=m.createBuffer(),m.bindBuffer(m.ARRAY_BUFFER,e.o),m.enableVertexAttribArray(e.j.H),m.vertexAttribPointer(e.j.H,2,m.FLOAT,!1,0,0),m.bufferData(m.ARRAY_BUFFER,new Float32Array([0,1,0,0,1,0,1,1]),m.STATIC_DRAW),m.bindBuffer(m.ARRAY_BUFFER,null),m.uniform1i(c,0)}t=e.j,m.useProgram(e.m),m.canvas.width=u.width,m.canvas.height=u.height,m.viewport(0,0,u.width,u.height),m.activeTexture(m.TEXTURE0),e.h.bindTexture2d(u.glName),m.enableVertexAttribArray(t.I),m.bindBuffer(m.ARRAY_BUFFER,e.s),m.vertexAttribPointer(t.I,2,m.FLOAT,!1,0,0),m.enableVertexAttribArray(t.H),m.bindBuffer(m.ARRAY_BUFFER,e.o),m.vertexAttribPointer(t.H,2,m.FLOAT,!1,0,0),m.bindFramebuffer(m.DRAW_FRAMEBUFFER?m.DRAW_FRAMEBUFFER:m.FRAMEBUFFER,null),m.clearColor(0,0,0,0),m.clear(m.COLOR_BUFFER_BIT),m.colorMask(!0,!0,!0,!0),m.drawArrays(m.TRIANGLE_FAN,0,4),m.disableVertexAttribArray(t.I),m.disableVertexAttribArray(t.H),m.bindBuffer(m.ARRAY_BUFFER,null),e.h.bindTexture2d(0)}function yt(e){this.g=e}var Xt=new Uint8Array([0,97,115,109,1,0,0,0,1,4,1,96,0,0,3,2,1,0,10,9,1,7,0,65,0,253,15,26,11]);function Kt(e,u){return u+e}function xt(e,u){window[e]=u}function ht(e){var u=document.createElement("script");return u.setAttribute("src",e),u.setAttribute("crossorigin","anonymous"),new Promise(function(m){u.addEventListener("load",function(){m()},!1),u.addEventListener("error",function(){m()},!1),document.body.appendChild(u)})}function Wt(){return Zt(function(e){switch(e.g){case 1:return e.m=2,P(e,WebAssembly.instantiate(Xt),4);case 4:e.g=3,e.m=0;break;case 2:return e.m=0,e.j=null,e.return(!1);case 3:return e.return(!0)}})}function It(e){if(this.g=e,this.listeners={},this.j={},this.F={},this.m={},this.s={},this.G=this.o=this.R=!0,this.C=Promise.resolve(),this.P="",this.B={},this.locateFile=e&&e.locateFile||Kt,typeof window=="object")var u=window.location.pathname.toString().substring(0,window.location.pathname.toString().lastIndexOf("/"))+"/";else if(typeof location<"u")u=location.pathname.toString().substring(0,location.pathname.toString().lastIndexOf("/"))+"/";else throw Error("solutions can only be loaded on a web page or in a web worker");if(this.S=u,e.options){u=T(Object.keys(e.options));for(var m=u.next();!m.done;m=u.next()){m=m.value;var t=e.options[m].default;t!==void 0&&(this.j[m]=typeof t=="function"?t():t)}}}i=It.prototype,i.close=function(){return this.i&&this.i.delete(),Promise.resolve()};function wt(e){var u,m,t,c,a,b,S,L,C,U,z;return Zt(function(Q){switch(Q.g){case 1:return e.R?(u=e.g.files===void 0?[]:typeof e.g.files=="function"?e.g.files(e.j):e.g.files,P(Q,Wt(),2)):Q.return();case 2:if(m=Q.h,typeof window=="object")return xt("createMediapipeSolutionsWasm",{locateFile:e.locateFile}),xt("createMediapipeSolutionsPackedAssets",{locateFile:e.locateFile}),b=u.filter(function(D){return D.data!==void 0}),S=u.filter(function(D){return D.data===void 0}),L=Promise.all(b.map(function(D){var st=v(e,D.url);if(D.path!==void 0){var ft=D.path;st=st.then(function(mt){return e.overrideFile(ft,mt),Promise.resolve(mt)})}return st})),C=Promise.all(S.map(function(D){return D.simd===void 0||D.simd&&m||!D.simd&&!m?ht(e.locateFile(D.url,e.S)):Promise.resolve()})).then(function(){var D,st,ft;return Zt(function(mt){if(mt.g==1)return D=window.createMediapipeSolutionsWasm,st=window.createMediapipeSolutionsPackedAssets,ft=e,P(mt,D(st),2);ft.h=mt.h,mt.g=0})}),U=function(){return Zt(function(D){return e.g.graph&&e.g.graph.url?D=P(D,v(e,e.g.graph.url),0):(D.g=0,D=void 0),D})}(),P(Q,Promise.all([C,L,U]),7);if(typeof importScripts!="function")throw Error("solutions can only be loaded on a web page or in a web worker");return t=u.filter(function(D){return D.simd===void 0||D.simd&&m||!D.simd&&!m}).map(function(D){return e.locateFile(D.url,e.S)}),importScripts.apply(null,J(t)),c=e,P(Q,createMediapipeSolutionsWasm(Module),6);case 6:c.h=Q.h,e.l=new OffscreenCanvas(1,1),e.h.canvas=e.l,a=e.h.GL.createContext(e.l,{antialias:!1,alpha:!1,aa:typeof WebGL2RenderingContext<"u"?2:1}),e.h.GL.makeContextCurrent(a),Q.g=4;break;case 7:if(e.l=document.createElement("canvas"),z=e.l.getContext("webgl2",{}),!z&&(z=e.l.getContext("webgl",{}),!z))return alert("Failed to create WebGL canvas context when passing video frame."),Q.return();e.D=z,e.h.canvas=e.l,e.h.createContext(e.l,!0,!0,{});case 4:e.i=new e.h.SolutionWasm,e.R=!1,Q.g=0}})}function Ft(e){var u,m,t,c,a,b,S,L;return Zt(function(C){if(C.g==1){if(e.g.graph&&e.g.graph.url&&e.P===e.g.graph.url)return C.return();if(e.o=!0,!e.g.graph||!e.g.graph.url){C.g=2;return}return e.P=e.g.graph.url,P(C,v(e,e.g.graph.url),3)}for(C.g!=2&&(u=C.h,e.i.loadGraph(u)),m=T(Object.keys(e.B)),t=m.next();!t.done;t=m.next())c=t.value,e.i.overrideFile(c,e.B[c]);if(e.B={},e.g.listeners)for(a=T(e.g.listeners),b=a.next();!b.done;b=a.next())S=b.value,k(e,S);L=e.j,e.j={},e.setOptions(L),C.g=0})}i.reset=function(){var e=this;return Zt(function(u){e.i&&(e.i.reset(),e.m={},e.s={}),u.g=0})},i.setOptions=function(e,u){var m=this;if(u=u||this.g.options){for(var t=[],c=[],a={},b=T(Object.keys(e)),S=b.next();!S.done;a={K:a.K,L:a.L},S=b.next()){var L=S.value;L in this.j&&this.j[L]===e[L]||(this.j[L]=e[L],S=u[L],S!==void 0&&(S.onChange&&(a.K=S.onChange,a.L=e[L],t.push(function(C){return function(){var U;return Zt(function(z){if(z.g==1)return P(z,C.K(C.L),2);U=z.h,U===!0&&(m.o=!0),z.g=0})}}(a))),S.graphOptionXref&&(L={valueNumber:S.type===1?e[L]:0,valueBoolean:S.type===0?e[L]:!1,valueString:S.type===2?e[L]:""},S=Object.assign(Object.assign(Object.assign({},{calculatorName:"",calculatorIndex:0}),S.graphOptionXref),L),c.push(S))))}(t.length!==0||c.length!==0)&&(this.o=!0,this.A=(this.A===void 0?[]:this.A).concat(c),this.v=(this.v===void 0?[]:this.v).concat(t))}};function l(e){var u,m,t,c,a,b,S;return Zt(function(L){switch(L.g){case 1:if(!e.o)return L.return();if(!e.v){L.g=2;break}u=T(e.v),m=u.next();case 3:if(m.done){L.g=5;break}return t=m.value,P(L,t(),4);case 4:m=u.next(),L.g=3;break;case 5:e.v=void 0;case 2:if(e.A){for(c=new e.h.GraphOptionChangeRequestList,a=T(e.A),b=a.next();!b.done;b=a.next())S=b.value,c.push_back(S);e.i.changeOptions(c),c.delete(),e.A=void 0}e.o=!1,L.g=0}})}i.initialize=function(){var e=this;return Zt(function(u){return u.g==1?P(u,wt(e),2):u.g!=3?P(u,Ft(e),3):P(u,l(e),0)})};function v(e,u){var m,t;return Zt(function(c){return u in e.F?c.return(e.F[u]):(m=e.locateFile(u,""),t=fetch(m).then(function(a){return a.arrayBuffer()}),e.F[u]=t,c.return(t))})}i.overrideFile=function(e,u){this.i?this.i.overrideFile(e,u):this.B[e]=u},i.clearOverriddenFiles=function(){this.B={},this.i&&this.i.clearOverriddenFiles()},i.send=function(e,u){var m=this,t,c,a,b,S,L,C,U,z;return Zt(function(Q){switch(Q.g){case 1:return m.g.inputs?(t=1e3*(u==null?performance.now():u),P(Q,m.C,2)):Q.return();case 2:return P(Q,m.initialize(),3);case 3:for(c=new m.h.PacketDataList,a=T(Object.keys(e)),b=a.next();!b.done;b=a.next())if(S=b.value,L=m.g.inputs[S]){t:{var D=e[S];switch(L.type){case"video":var st=m.m[L.stream];if(st||(st=new B(m.h,m.D),m.m[L.stream]=st),st.l===0&&(st.l=st.h.createTexture()),typeof HTMLVideoElement<"u"&&D instanceof HTMLVideoElement)var ft=D.videoWidth,mt=D.videoHeight;else typeof HTMLImageElement<"u"&&D instanceof HTMLImageElement?(ft=D.naturalWidth,mt=D.naturalHeight):(ft=D.width,mt=D.height);mt={glName:st.l,width:ft,height:mt},ft=st.g,ft.canvas.width=mt.width,ft.canvas.height=mt.height,ft.activeTexture(ft.TEXTURE0),st.h.bindTexture2d(st.l),ft.texImage2D(ft.TEXTURE_2D,0,ft.RGBA,ft.RGBA,ft.UNSIGNED_BYTE,D),st.h.bindTexture2d(0),st=mt;break t;case"detections":for(st=m.m[L.stream],st||(st=new yt(m.h),m.m[L.stream]=st),st.data||(st.data=new st.g.DetectionListData),st.data.reset(D.length),mt=0;mt<D.length;++mt){ft=D[mt];var Gt=st.data,vt=Gt.setBoundingBox,At=mt,le=ft.T,ce=new Tt;if(St(ce,1,le.X),St(ce,2,le.Y),St(ce,3,le.height),St(ce,4,le.width),St(ce,5,le.rotation),St(ce,6,le.W),le=nn(ce,Dt),vt.call(Gt,At,le),ft.O)for(Gt=0;Gt<ft.O.length;++Gt){ce=ft.O[Gt];var ke=!!ce.visibility;vt=st.data,At=vt.addNormalizedLandmark,le=mt,ce=Object.assign(Object.assign({},ce),{visibility:ke?ce.visibility:0}),ke=new j,St(ke,1,ce.x),St(ke,2,ce.y),St(ke,3,ce.z),ce.visibility&&St(ke,4,ce.visibility),ce=nn(ke,bt),At.call(vt,le,ce)}if(ft.M)for(Gt=0;Gt<ft.M.length;++Gt)vt=st.data,At=vt.addClassification,le=mt,ce=ft.M[Gt],ke=new Yn,St(ke,2,ce.score),ce.index&&St(ke,1,ce.index),ce.label&&St(ke,3,ce.label),ce.displayName&&St(ke,4,ce.displayName),ce=nn(ke,p),At.call(vt,le,ce)}st=st.data;break t;default:st={}}}switch(C=st,U=L.stream,L.type){case"video":c.pushTexture2d(Object.assign(Object.assign({},C),{stream:U,timestamp:t}));break;case"detections":z=C,z.stream=U,z.timestamp=t,c.pushDetectionList(z);break;default:throw Error("Unknown input config type: '"+L.type+"'")}}return m.i.send(c),P(Q,m.C,4);case 4:c.delete(),Q.g=0}})};function x(e,u,m){var t,c,a,b,S,L,C,U,z,Q,D,st,ft,mt;return Zt(function(Gt){switch(Gt.g){case 1:if(!m)return Gt.return(u);for(t={},c=0,a=T(Object.keys(m)),b=a.next();!b.done;b=a.next())S=b.value,L=m[S],typeof L!="string"&&L.type==="texture"&&u[L.stream]!==void 0&&++c;1<c&&(e.G=!1),C=T(Object.keys(m)),b=C.next();case 2:if(b.done){Gt.g=4;break}if(U=b.value,z=m[U],typeof z=="string")return ft=t,mt=U,P(Gt,Y(e,U,u[z]),14);if(Q=u[z.stream],z.type==="detection_list"){if(Q){for(var vt=Q.getRectList(),At=Q.getLandmarksList(),le=Q.getClassificationsList(),ce=[],ke=0;ke<vt.size();++ke){var Vn=zn(vt.get(ke),Tt,ae);Vn={T:{X:ue(Vn,1),Y:ue(Vn,2),height:ue(Vn,3),width:ue(Vn,4),rotation:ue(Vn,5,0),W:de(Vn,6,0)},O:A(At.get(ke)),M:w(zn(le.get(ke),V,O))},ce.push(Vn)}vt=ce}else vt=[];t[U]=vt,Gt.g=7;break}if(z.type==="proto_list"){if(Q){for(vt=Array(Q.size()),At=0;At<Q.size();At++)vt[At]=Q.get(At);Q.delete()}else vt=[];t[U]=vt,Gt.g=7;break}if(Q===void 0){Gt.g=3;break}if(z.type==="float_list"){t[U]=Q,Gt.g=7;break}if(z.type==="proto"){t[U]=Q,Gt.g=7;break}if(z.type!=="texture")throw Error("Unknown output config type: '"+z.type+"'");return D=e.s[U],D||(D=new B(e.h,e.D),e.s[U]=D),P(Gt,nt(D,Q,e.G),13);case 13:st=Gt.h,t[U]=st;case 7:z.transform&&t[U]&&(t[U]=z.transform(t[U])),Gt.g=3;break;case 14:ft[mt]=Gt.h;case 3:b=C.next(),Gt.g=2;break;case 4:return Gt.return(t)}})}function Y(e,u,m){var t;return Zt(function(c){return typeof m=="number"||m instanceof Uint8Array||m instanceof e.h.Uint8BlobList?c.return(m):m instanceof e.h.Texture2dDataOut?(t=e.s[u],t||(t=new B(e.h,e.D),e.s[u]=t),c.return(nt(t,m,e.G))):c.return(void 0)})}function k(e,u){for(var m=u.name||"$",t=[].concat(J(u.wants)),c=new e.h.StringList,a=T(u.wants),b=a.next();!b.done;b=a.next())c.push_back(b.value);a=e.h.PacketListener.implement({onResults:function(S){for(var L={},C=0;C<u.wants.length;++C)L[t[C]]=S.get(C);var U=e.listeners[m];U&&(e.C=x(e,L,u.outs).then(function(z){z=U(z);for(var Q=0;Q<u.wants.length;++Q){var D=L[t[Q]];typeof D=="object"&&D.hasOwnProperty&&D.hasOwnProperty("delete")&&D.delete()}z&&(e.C=z)}))}}),e.i.attachMultiListener(c,a),c.delete()}i.onResults=function(e,u){this.listeners[u||"$"]=e},Ht("Solution",It),Ht("OptionType",{BOOL:0,NUMBER:1,Z:2,0:"BOOL",1:"NUMBER",2:"STRING"});function o(e){return e.map(d)}function d(e){e=zn(e,y,H);var u=e.getMesh();if(!u)return e;var m=new Float32Array(u.getVertexBufferList());u.getVertexBufferList=function(){return m};var t=new Uint32Array(u.getIndexBufferList());return u.getIndexBufferList=function(){return t},e}function g(e){var u=this;e=e||{},this.g=new It({locateFile:e.locateFile,files:[{url:"holistic_solution_packed_assets_loader.js"},{simd:!1,url:"holistic_solution_wasm_bin.js"},{simd:!0,url:"holistic_solution_simd_wasm_bin.js"}],graph:{url:"holistic.binarypb"},inputs:{image:{type:"video",stream:"input_frames_gpu"}},listeners:[{wants:"left_hand_landmarks right_hand_landmarks face_landmarks pose_landmarks world_landmarks segmentation_mask image_transformed multi_face_geometry".split(" "),outs:{image:{type:"texture",stream:"image_transformed"},leftHandLandmarks:{type:"proto",stream:"left_hand_landmarks",transform:A},rightHandLandmarks:{type:"proto",stream:"right_hand_landmarks",transform:A},faceLandmarks:{type:"proto",stream:"face_landmarks",transform:A},poseLandmarks:{type:"proto",stream:"pose_landmarks",transform:A},ea:{type:"proto",stream:"world_landmarks",transform:A},segmentationMask:{type:"texture",stream:"segmentation_mask"},multiFaceGeometry:{type:"proto_list",stream:"multi_face_geometry",transform:o}}}],options:{useCpuInference:{type:0,graphOptionXref:{calculatorType:"InferenceCalculator",fieldName:"use_cpu_inference"},default:"iPad Simulator;iPhone Simulator;iPod Simulator;iPad;iPhone;iPod".split(";").includes(navigator.platform)||navigator.userAgent.includes("Mac")&&"ontouchend"in document},enableFaceGeometry:{type:0,graphOptionXref:{calculatorName:"EnableFaceGeometryConstant",calculatorType:"ConstantSidePacketCalculator",fieldName:"bool_value"}},selfieMode:{type:0,graphOptionXref:{calculatorType:"GlScalerCalculator",calculatorIndex:1,fieldName:"flip_horizontal"}},modelComplexity:{type:1,default:1,graphOptionXref:{calculatorType:"ConstantSidePacketCalculator",calculatorName:"ConstantSidePacketCalculatorModelComplexity",fieldName:"int_value"},onChange:function(m){var t,c,a,b;return Zt(function(S){if(S.g==1){switch(t="",m){case 1:t="pose_landmark_full.tflite";break;case 2:t="pose_landmark_heavy.tflite";break;default:t="pose_landmark_lite.tflite"}return c="third_party/mediapipe/modules/pose_landmark/"+t,a=u.g.locateFile(t,""),P(S,fetch(a),3)}return S.g!=2?P(S,S.h.arrayBuffer(),2):(b=S.h,u.g.overrideFile(c,b),P(S,u.g.reset(),0))})}},smoothLandmarks:{type:0,graphOptionXref:{calculatorType:"ConstantSidePacketCalculator",calculatorName:"ConstantSidePacketCalculatorSmoothLandmarks",fieldName:"bool_value"}},enableSegmentation:{type:0,graphOptionXref:{calculatorType:"ConstantSidePacketCalculator",calculatorName:"ConstantSidePacketCalculatorEnableSegmentation",fieldName:"bool_value"}},smoothSegmentation:{type:0,graphOptionXref:{calculatorType:"ConstantSidePacketCalculator",calculatorName:"ConstantSidePacketCalculatorSmoothSegmentation",fieldName:"bool_value"}},refineFaceLandmarks:{type:0,graphOptionXref:{calculatorType:"ConstantSidePacketCalculator",calculatorName:"ConstantSidePacketCalculatorRefineFaceLandmarks",fieldName:"bool_value"}},minDetectionConfidence:{type:1,graphOptionXref:{calculatorType:"TensorsToDetectionsCalculator",calculatorName:"holisticlandmarkgpu__poselandmarkgpu__posedetectiongpu__TensorsToDetectionsCalculator",fieldName:"min_score_thresh"}},minTrackingConfidence:{type:1,graphOptionXref:{calculatorType:"ThresholdingCalculator",calculatorName:"holisticlandmarkgpu__poselandmarkgpu__poselandmarkbyroigpu__tensorstoposelandmarksandsegmentation__ThresholdingCalculator",fieldName:"threshold"}},cameraNear:{type:1,graphOptionXref:{calculatorType:"FaceGeometryEnvGeneratorCalculator",fieldName:"near"}},cameraFar:{type:1,graphOptionXref:{calculatorType:"FaceGeometryEnvGeneratorCalculator",fieldName:"far"}},cameraVerticalFovDegrees:{type:1,graphOptionXref:{calculatorType:"FaceGeometryEnvGeneratorCalculator",fieldName:"vertical_fov_degrees"}}}})}i=g.prototype,i.close=function(){return this.g.close(),Promise.resolve()},i.onResults=function(e){this.g.onResults(e)},i.initialize=function(){var e=this;return Zt(function(u){return P(u,e.g.initialize(),0)})},i.reset=function(){this.g.reset()},i.send=function(e){var u=this;return Zt(function(m){return P(m,u.g.send(e),0)})},i.setOptions=function(e){this.g.setOptions(e)},Ht("Holistic",g),Ht("FACE_GEOMETRY",{Layout:{COLUMN_MAJOR:0,ROW_MAJOR:1,0:"COLUMN_MAJOR",1:"ROW_MAJOR"},PrimitiveType:{TRIANGLE:0,0:"TRIANGLE"},VertexType:{VERTEX_PT:0,0:"VERTEX_PT"},DEFAULT_CAMERA_PARAMS:{verticalFovDegrees:63,near:1,far:1e4}}),Ht("FACEMESH_LIPS",K),Ht("FACEMESH_LEFT_EYE",_),Ht("FACEMESH_LEFT_EYEBROW",M),Ht("FACEMESH_LEFT_IRIS",[[474,475],[475,476],[476,477],[477,474]]),Ht("FACEMESH_RIGHT_EYE",q),Ht("FACEMESH_RIGHT_EYEBROW",ct),Ht("FACEMESH_RIGHT_IRIS",[[469,470],[470,471],[471,472],[472,469]]),Ht("FACEMESH_FACE_OVAL",s),Ht("FACEMESH_CONTOURS",X),Ht("FACEMESH_TESSELATION",[[127,34],[34,139],[139,127],[11,0],[0,37],[37,11],[232,231],[231,120],[120,232],[72,37],[37,39],[39,72],[128,121],[121,47],[47,128],[232,121],[121,128],[128,232],[104,69],[69,67],[67,104],[175,171],[171,148],[148,175],[118,50],[50,101],[101,118],[73,39],[39,40],[40,73],[9,151],[151,108],[108,9],[48,115],[115,131],[131,48],[194,204],[204,211],[211,194],[74,40],[40,185],[185,74],[80,42],[42,183],[183,80],[40,92],[92,186],[186,40],[230,229],[229,118],[118,230],[202,212],[212,214],[214,202],[83,18],[18,17],[17,83],[76,61],[61,146],[146,76],[160,29],[29,30],[30,160],[56,157],[157,173],[173,56],[106,204],[204,194],[194,106],[135,214],[214,192],[192,135],[203,165],[165,98],[98,203],[21,71],[71,68],[68,21],[51,45],[45,4],[4,51],[144,24],[24,23],[23,144],[77,146],[146,91],[91,77],[205,50],[50,187],[187,205],[201,200],[200,18],[18,201],[91,106],[106,182],[182,91],[90,91],[91,181],[181,90],[85,84],[84,17],[17,85],[206,203],[203,36],[36,206],[148,171],[171,140],[140,148],[92,40],[40,39],[39,92],[193,189],[189,244],[244,193],[159,158],[158,28],[28,159],[247,246],[246,161],[161,247],[236,3],[3,196],[196,236],[54,68],[68,104],[104,54],[193,168],[168,8],[8,193],[117,228],[228,31],[31,117],[189,193],[193,55],[55,189],[98,97],[97,99],[99,98],[126,47],[47,100],[100,126],[166,79],[79,218],[218,166],[155,154],[154,26],[26,155],[209,49],[49,131],[131,209],[135,136],[136,150],[150,135],[47,126],[126,217],[217,47],[223,52],[52,53],[53,223],[45,51],[51,134],[134,45],[211,170],[170,140],[140,211],[67,69],[69,108],[108,67],[43,106],[106,91],[91,43],[230,119],[119,120],[120,230],[226,130],[130,247],[247,226],[63,53],[53,52],[52,63],[238,20],[20,242],[242,238],[46,70],[70,156],[156,46],[78,62],[62,96],[96,78],[46,53],[53,63],[63,46],[143,34],[34,227],[227,143],[123,117],[117,111],[111,123],[44,125],[125,19],[19,44],[236,134],[134,51],[51,236],[216,206],[206,205],[205,216],[154,153],[153,22],[22,154],[39,37],[37,167],[167,39],[200,201],[201,208],[208,200],[36,142],[142,100],[100,36],[57,212],[212,202],[202,57],[20,60],[60,99],[99,20],[28,158],[158,157],[157,28],[35,226],[226,113],[113,35],[160,159],[159,27],[27,160],[204,202],[202,210],[210,204],[113,225],[225,46],[46,113],[43,202],[202,204],[204,43],[62,76],[76,77],[77,62],[137,123],[123,116],[116,137],[41,38],[38,72],[72,41],[203,129],[129,142],[142,203],[64,98],[98,240],[240,64],[49,102],[102,64],[64,49],[41,73],[73,74],[74,41],[212,216],[216,207],[207,212],[42,74],[74,184],[184,42],[169,170],[170,211],[211,169],[170,149],[149,176],[176,170],[105,66],[66,69],[69,105],[122,6],[6,168],[168,122],[123,147],[147,187],[187,123],[96,77],[77,90],[90,96],[65,55],[55,107],[107,65],[89,90],[90,180],[180,89],[101,100],[100,120],[120,101],[63,105],[105,104],[104,63],[93,137],[137,227],[227,93],[15,86],[86,85],[85,15],[129,102],[102,49],[49,129],[14,87],[87,86],[86,14],[55,8],[8,9],[9,55],[100,47],[47,121],[121,100],[145,23],[23,22],[22,145],[88,89],[89,179],[179,88],[6,122],[122,196],[196,6],[88,95],[95,96],[96,88],[138,172],[172,136],[136,138],[215,58],[58,172],[172,215],[115,48],[48,219],[219,115],[42,80],[80,81],[81,42],[195,3],[3,51],[51,195],[43,146],[146,61],[61,43],[171,175],[175,199],[199,171],[81,82],[82,38],[38,81],[53,46],[46,225],[225,53],[144,163],[163,110],[110,144],[52,65],[65,66],[66,52],[229,228],[228,117],[117,229],[34,127],[127,234],[234,34],[107,108],[108,69],[69,107],[109,108],[108,151],[151,109],[48,64],[64,235],[235,48],[62,78],[78,191],[191,62],[129,209],[209,126],[126,129],[111,35],[35,143],[143,111],[117,123],[123,50],[50,117],[222,65],[65,52],[52,222],[19,125],[125,141],[141,19],[221,55],[55,65],[65,221],[3,195],[195,197],[197,3],[25,7],[7,33],[33,25],[220,237],[237,44],[44,220],[70,71],[71,139],[139,70],[122,193],[193,245],[245,122],[247,130],[130,33],[33,247],[71,21],[21,162],[162,71],[170,169],[169,150],[150,170],[188,174],[174,196],[196,188],[216,186],[186,92],[92,216],[2,97],[97,167],[167,2],[141,125],[125,241],[241,141],[164,167],[167,37],[37,164],[72,38],[38,12],[12,72],[38,82],[82,13],[13,38],[63,68],[68,71],[71,63],[226,35],[35,111],[111,226],[101,50],[50,205],[205,101],[206,92],[92,165],[165,206],[209,198],[198,217],[217,209],[165,167],[167,97],[97,165],[220,115],[115,218],[218,220],[133,112],[112,243],[243,133],[239,238],[238,241],[241,239],[214,135],[135,169],[169,214],[190,173],[173,133],[133,190],[171,208],[208,32],[32,171],[125,44],[44,237],[237,125],[86,87],[87,178],[178,86],[85,86],[86,179],[179,85],[84,85],[85,180],[180,84],[83,84],[84,181],[181,83],[201,83],[83,182],[182,201],[137,93],[93,132],[132,137],[76,62],[62,183],[183,76],[61,76],[76,184],[184,61],[57,61],[61,185],[185,57],[212,57],[57,186],[186,212],[214,207],[207,187],[187,214],[34,143],[143,156],[156,34],[79,239],[239,237],[237,79],[123,137],[137,177],[177,123],[44,1],[1,4],[4,44],[201,194],[194,32],[32,201],[64,102],[102,129],[129,64],[213,215],[215,138],[138,213],[59,166],[166,219],[219,59],[242,99],[99,97],[97,242],[2,94],[94,141],[141,2],[75,59],[59,235],[235,75],[24,110],[110,228],[228,24],[25,130],[130,226],[226,25],[23,24],[24,229],[229,23],[22,23],[23,230],[230,22],[26,22],[22,231],[231,26],[112,26],[26,232],[232,112],[189,190],[190,243],[243,189],[221,56],[56,190],[190,221],[28,56],[56,221],[221,28],[27,28],[28,222],[222,27],[29,27],[27,223],[223,29],[30,29],[29,224],[224,30],[247,30],[30,225],[225,247],[238,79],[79,20],[20,238],[166,59],[59,75],[75,166],[60,75],[75,240],[240,60],[147,177],[177,215],[215,147],[20,79],[79,166],[166,20],[187,147],[147,213],[213,187],[112,233],[233,244],[244,112],[233,128],[128,245],[245,233],[128,114],[114,188],[188,128],[114,217],[217,174],[174,114],[131,115],[115,220],[220,131],[217,198],[198,236],[236,217],[198,131],[131,134],[134,198],[177,132],[132,58],[58,177],[143,35],[35,124],[124,143],[110,163],[163,7],[7,110],[228,110],[110,25],[25,228],[356,389],[389,368],[368,356],[11,302],[302,267],[267,11],[452,350],[350,349],[349,452],[302,303],[303,269],[269,302],[357,343],[343,277],[277,357],[452,453],[453,357],[357,452],[333,332],[332,297],[297,333],[175,152],[152,377],[377,175],[347,348],[348,330],[330,347],[303,304],[304,270],[270,303],[9,336],[336,337],[337,9],[278,279],[279,360],[360,278],[418,262],[262,431],[431,418],[304,408],[408,409],[409,304],[310,415],[415,407],[407,310],[270,409],[409,410],[410,270],[450,348],[348,347],[347,450],[422,430],[430,434],[434,422],[313,314],[314,17],[17,313],[306,307],[307,375],[375,306],[387,388],[388,260],[260,387],[286,414],[414,398],[398,286],[335,406],[406,418],[418,335],[364,367],[367,416],[416,364],[423,358],[358,327],[327,423],[251,284],[284,298],[298,251],[281,5],[5,4],[4,281],[373,374],[374,253],[253,373],[307,320],[320,321],[321,307],[425,427],[427,411],[411,425],[421,313],[313,18],[18,421],[321,405],[405,406],[406,321],[320,404],[404,405],[405,320],[315,16],[16,17],[17,315],[426,425],[425,266],[266,426],[377,400],[400,369],[369,377],[322,391],[391,269],[269,322],[417,465],[465,464],[464,417],[386,257],[257,258],[258,386],[466,260],[260,388],[388,466],[456,399],[399,419],[419,456],[284,332],[332,333],[333,284],[417,285],[285,8],[8,417],[346,340],[340,261],[261,346],[413,441],[441,285],[285,413],[327,460],[460,328],[328,327],[355,371],[371,329],[329,355],[392,439],[439,438],[438,392],[382,341],[341,256],[256,382],[429,420],[420,360],[360,429],[364,394],[394,379],[379,364],[277,343],[343,437],[437,277],[443,444],[444,283],[283,443],[275,440],[440,363],[363,275],[431,262],[262,369],[369,431],[297,338],[338,337],[337,297],[273,375],[375,321],[321,273],[450,451],[451,349],[349,450],[446,342],[342,467],[467,446],[293,334],[334,282],[282,293],[458,461],[461,462],[462,458],[276,353],[353,383],[383,276],[308,324],[324,325],[325,308],[276,300],[300,293],[293,276],[372,345],[345,447],[447,372],[352,345],[345,340],[340,352],[274,1],[1,19],[19,274],[456,248],[248,281],[281,456],[436,427],[427,425],[425,436],[381,256],[256,252],[252,381],[269,391],[391,393],[393,269],[200,199],[199,428],[428,200],[266,330],[330,329],[329,266],[287,273],[273,422],[422,287],[250,462],[462,328],[328,250],[258,286],[286,384],[384,258],[265,353],[353,342],[342,265],[387,259],[259,257],[257,387],[424,431],[431,430],[430,424],[342,353],[353,276],[276,342],[273,335],[335,424],[424,273],[292,325],[325,307],[307,292],[366,447],[447,345],[345,366],[271,303],[303,302],[302,271],[423,266],[266,371],[371,423],[294,455],[455,460],[460,294],[279,278],[278,294],[294,279],[271,272],[272,304],[304,271],[432,434],[434,427],[427,432],[272,407],[407,408],[408,272],[394,430],[430,431],[431,394],[395,369],[369,400],[400,395],[334,333],[333,299],[299,334],[351,417],[417,168],[168,351],[352,280],[280,411],[411,352],[325,319],[319,320],[320,325],[295,296],[296,336],[336,295],[319,403],[403,404],[404,319],[330,348],[348,349],[349,330],[293,298],[298,333],[333,293],[323,454],[454,447],[447,323],[15,16],[16,315],[315,15],[358,429],[429,279],[279,358],[14,15],[15,316],[316,14],[285,336],[336,9],[9,285],[329,349],[349,350],[350,329],[374,380],[380,252],[252,374],[318,402],[402,403],[403,318],[6,197],[197,419],[419,6],[318,319],[319,325],[325,318],[367,364],[364,365],[365,367],[435,367],[367,397],[397,435],[344,438],[438,439],[439,344],[272,271],[271,311],[311,272],[195,5],[5,281],[281,195],[273,287],[287,291],[291,273],[396,428],[428,199],[199,396],[311,271],[271,268],[268,311],[283,444],[444,445],[445,283],[373,254],[254,339],[339,373],[282,334],[334,296],[296,282],[449,347],[347,346],[346,449],[264,447],[447,454],[454,264],[336,296],[296,299],[299,336],[338,10],[10,151],[151,338],[278,439],[439,455],[455,278],[292,407],[407,415],[415,292],[358,371],[371,355],[355,358],[340,345],[345,372],[372,340],[346,347],[347,280],[280,346],[442,443],[443,282],[282,442],[19,94],[94,370],[370,19],[441,442],[442,295],[295,441],[248,419],[419,197],[197,248],[263,255],[255,359],[359,263],[440,275],[275,274],[274,440],[300,383],[383,368],[368,300],[351,412],[412,465],[465,351],[263,467],[467,466],[466,263],[301,368],[368,389],[389,301],[395,378],[378,379],[379,395],[412,351],[351,419],[419,412],[436,426],[426,322],[322,436],[2,164],[164,393],[393,2],[370,462],[462,461],[461,370],[164,0],[0,267],[267,164],[302,11],[11,12],[12,302],[268,12],[12,13],[13,268],[293,300],[300,301],[301,293],[446,261],[261,340],[340,446],[330,266],[266,425],[425,330],[426,423],[423,391],[391,426],[429,355],[355,437],[437,429],[391,327],[327,326],[326,391],[440,457],[457,438],[438,440],[341,382],[382,362],[362,341],[459,457],[457,461],[461,459],[434,430],[430,394],[394,434],[414,463],[463,362],[362,414],[396,369],[369,262],[262,396],[354,461],[461,457],[457,354],[316,403],[403,402],[402,316],[315,404],[404,403],[403,315],[314,405],[405,404],[404,314],[313,406],[406,405],[405,313],[421,418],[418,406],[406,421],[366,401],[401,361],[361,366],[306,408],[408,407],[407,306],[291,409],[409,408],[408,291],[287,410],[410,409],[409,287],[432,436],[436,410],[410,432],[434,416],[416,411],[411,434],[264,368],[368,383],[383,264],[309,438],[438,457],[457,309],[352,376],[376,401],[401,352],[274,275],[275,4],[4,274],[421,428],[428,262],[262,421],[294,327],[327,358],[358,294],[433,416],[416,367],[367,433],[289,455],[455,439],[439,289],[462,370],[370,326],[326,462],[2,326],[326,370],[370,2],[305,460],[460,455],[455,305],[254,449],[449,448],[448,254],[255,261],[261,446],[446,255],[253,450],[450,449],[449,253],[252,451],[451,450],[450,252],[256,452],[452,451],[451,256],[341,453],[453,452],[452,341],[413,464],[464,463],[463,413],[441,413],[413,414],[414,441],[258,442],[442,441],[441,258],[257,443],[443,442],[442,257],[259,444],[444,443],[443,259],[260,445],[445,444],[444,260],[467,342],[342,445],[445,467],[459,458],[458,250],[250,459],[289,392],[392,290],[290,289],[290,328],[328,460],[460,290],[376,433],[433,435],[435,376],[250,290],[290,392],[392,250],[411,416],[416,433],[433,411],[341,463],[463,464],[464,341],[453,464],[464,465],[465,453],[357,465],[465,412],[412,357],[343,412],[412,399],[399,343],[360,363],[363,440],[440,360],[437,399],[399,456],[456,437],[420,456],[456,363],[363,420],[401,435],[435,288],[288,401],[372,383],[383,353],[353,372],[339,255],[255,249],[249,339],[448,261],[261,255],[255,448],[133,243],[243,190],[190,133],[133,155],[155,112],[112,133],[33,246],[246,247],[247,33],[33,130],[130,25],[25,33],[398,384],[384,286],[286,398],[362,398],[398,414],[414,362],[362,463],[463,341],[341,362],[263,359],[359,467],[467,263],[263,249],[249,255],[255,263],[466,467],[467,260],[260,466],[75,60],[60,166],[166,75],[238,239],[239,79],[79,238],[162,127],[127,139],[139,162],[72,11],[11,37],[37,72],[121,232],[232,120],[120,121],[73,72],[72,39],[39,73],[114,128],[128,47],[47,114],[233,232],[232,128],[128,233],[103,104],[104,67],[67,103],[152,175],[175,148],[148,152],[119,118],[118,101],[101,119],[74,73],[73,40],[40,74],[107,9],[9,108],[108,107],[49,48],[48,131],[131,49],[32,194],[194,211],[211,32],[184,74],[74,185],[185,184],[191,80],[80,183],[183,191],[185,40],[40,186],[186,185],[119,230],[230,118],[118,119],[210,202],[202,214],[214,210],[84,83],[83,17],[17,84],[77,76],[76,146],[146,77],[161,160],[160,30],[30,161],[190,56],[56,173],[173,190],[182,106],[106,194],[194,182],[138,135],[135,192],[192,138],[129,203],[203,98],[98,129],[54,21],[21,68],[68,54],[5,51],[51,4],[4,5],[145,144],[144,23],[23,145],[90,77],[77,91],[91,90],[207,205],[205,187],[187,207],[83,201],[201,18],[18,83],[181,91],[91,182],[182,181],[180,90],[90,181],[181,180],[16,85],[85,17],[17,16],[205,206],[206,36],[36,205],[176,148],[148,140],[140,176],[165,92],[92,39],[39,165],[245,193],[193,244],[244,245],[27,159],[159,28],[28,27],[30,247],[247,161],[161,30],[174,236],[236,196],[196,174],[103,54],[54,104],[104,103],[55,193],[193,8],[8,55],[111,117],[117,31],[31,111],[221,189],[189,55],[55,221],[240,98],[98,99],[99,240],[142,126],[126,100],[100,142],[219,166],[166,218],[218,219],[112,155],[155,26],[26,112],[198,209],[209,131],[131,198],[169,135],[135,150],[150,169],[114,47],[47,217],[217,114],[224,223],[223,53],[53,224],[220,45],[45,134],[134,220],[32,211],[211,140],[140,32],[109,67],[67,108],[108,109],[146,43],[43,91],[91,146],[231,230],[230,120],[120,231],[113,226],[226,247],[247,113],[105,63],[63,52],[52,105],[241,238],[238,242],[242,241],[124,46],[46,156],[156,124],[95,78],[78,96],[96,95],[70,46],[46,63],[63,70],[116,143],[143,227],[227,116],[116,123],[123,111],[111,116],[1,44],[44,19],[19,1],[3,236],[236,51],[51,3],[207,216],[216,205],[205,207],[26,154],[154,22],[22,26],[165,39],[39,167],[167,165],[199,200],[200,208],[208,199],[101,36],[36,100],[100,101],[43,57],[57,202],[202,43],[242,20],[20,99],[99,242],[56,28],[28,157],[157,56],[124,35],[35,113],[113,124],[29,160],[160,27],[27,29],[211,204],[204,210],[210,211],[124,113],[113,46],[46,124],[106,43],[43,204],[204,106],[96,62],[62,77],[77,96],[227,137],[137,116],[116,227],[73,41],[41,72],[72,73],[36,203],[203,142],[142,36],[235,64],[64,240],[240,235],[48,49],[49,64],[64,48],[42,41],[41,74],[74,42],[214,212],[212,207],[207,214],[183,42],[42,184],[184,183],[210,169],[169,211],[211,210],[140,170],[170,176],[176,140],[104,105],[105,69],[69,104],[193,122],[122,168],[168,193],[50,123],[123,187],[187,50],[89,96],[96,90],[90,89],[66,65],[65,107],[107,66],[179,89],[89,180],[180,179],[119,101],[101,120],[120,119],[68,63],[63,104],[104,68],[234,93],[93,227],[227,234],[16,15],[15,85],[85,16],[209,129],[129,49],[49,209],[15,14],[14,86],[86,15],[107,55],[55,9],[9,107],[120,100],[100,121],[121,120],[153,145],[145,22],[22,153],[178,88],[88,179],[179,178],[197,6],[6,196],[196,197],[89,88],[88,96],[96,89],[135,138],[138,136],[136,135],[138,215],[215,172],[172,138],[218,115],[115,219],[219,218],[41,42],[42,81],[81,41],[5,195],[195,51],[51,5],[57,43],[43,61],[61,57],[208,171],[171,199],[199,208],[41,81],[81,38],[38,41],[224,53],[53,225],[225,224],[24,144],[144,110],[110,24],[105,52],[52,66],[66,105],[118,229],[229,117],[117,118],[227,34],[34,234],[234,227],[66,107],[107,69],[69,66],[10,109],[109,151],[151,10],[219,48],[48,235],[235,219],[183,62],[62,191],[191,183],[142,129],[129,126],[126,142],[116,111],[111,143],[143,116],[118,117],[117,50],[50,118],[223,222],[222,52],[52,223],[94,19],[19,141],[141,94],[222,221],[221,65],[65,222],[196,3],[3,197],[197,196],[45,220],[220,44],[44,45],[156,70],[70,139],[139,156],[188,122],[122,245],[245,188],[139,71],[71,162],[162,139],[149,170],[170,150],[150,149],[122,188],[188,196],[196,122],[206,216],[216,92],[92,206],[164,2],[2,167],[167,164],[242,141],[141,241],[241,242],[0,164],[164,37],[37,0],[11,72],[72,12],[12,11],[12,38],[38,13],[13,12],[70,63],[63,71],[71,70],[31,226],[226,111],[111,31],[36,101],[101,205],[205,36],[203,206],[206,165],[165,203],[126,209],[209,217],[217,126],[98,165],[165,97],[97,98],[237,220],[220,218],[218,237],[237,239],[239,241],[241,237],[210,214],[214,169],[169,210],[140,171],[171,32],[32,140],[241,125],[125,237],[237,241],[179,86],[86,178],[178,179],[180,85],[85,179],[179,180],[181,84],[84,180],[180,181],[182,83],[83,181],[181,182],[194,201],[201,182],[182,194],[177,137],[137,132],[132,177],[184,76],[76,183],[183,184],[185,61],[61,184],[184,185],[186,57],[57,185],[185,186],[216,212],[212,186],[186,216],[192,214],[214,187],[187,192],[139,34],[34,156],[156,139],[218,79],[79,237],[237,218],[147,123],[123,177],[177,147],[45,44],[44,4],[4,45],[208,201],[201,32],[32,208],[98,64],[64,129],[129,98],[192,213],[213,138],[138,192],[235,59],[59,219],[219,235],[141,242],[242,97],[97,141],[97,2],[2,141],[141,97],[240,75],[75,235],[235,240],[229,24],[24,228],[228,229],[31,25],[25,226],[226,31],[230,23],[23,229],[229,230],[231,22],[22,230],[230,231],[232,26],[26,231],[231,232],[233,112],[112,232],[232,233],[244,189],[189,243],[243,244],[189,221],[221,190],[190,189],[222,28],[28,221],[221,222],[223,27],[27,222],[222,223],[224,29],[29,223],[223,224],[225,30],[30,224],[224,225],[113,247],[247,225],[225,113],[99,60],[60,240],[240,99],[213,147],[147,215],[215,213],[60,20],[20,166],[166,60],[192,187],[187,213],[213,192],[243,112],[112,244],[244,243],[244,233],[233,245],[245,244],[245,128],[128,188],[188,245],[188,114],[114,174],[174,188],[134,131],[131,220],[220,134],[174,217],[217,236],[236,174],[236,198],[198,134],[134,236],[215,177],[177,58],[58,215],[156,143],[143,124],[124,156],[25,110],[110,7],[7,25],[31,228],[228,25],[25,31],[264,356],[356,368],[368,264],[0,11],[11,267],[267,0],[451,452],[452,349],[349,451],[267,302],[302,269],[269,267],[350,357],[357,277],[277,350],[350,452],[452,357],[357,350],[299,333],[333,297],[297,299],[396,175],[175,377],[377,396],[280,347],[347,330],[330,280],[269,303],[303,270],[270,269],[151,9],[9,337],[337,151],[344,278],[278,360],[360,344],[424,418],[418,431],[431,424],[270,304],[304,409],[409,270],[272,310],[310,407],[407,272],[322,270],[270,410],[410,322],[449,450],[450,347],[347,449],[432,422],[422,434],[434,432],[18,313],[313,17],[17,18],[291,306],[306,375],[375,291],[259,387],[387,260],[260,259],[424,335],[335,418],[418,424],[434,364],[364,416],[416,434],[391,423],[423,327],[327,391],[301,251],[251,298],[298,301],[275,281],[281,4],[4,275],[254,373],[373,253],[253,254],[375,307],[307,321],[321,375],[280,425],[425,411],[411,280],[200,421],[421,18],[18,200],[335,321],[321,406],[406,335],[321,320],[320,405],[405,321],[314,315],[315,17],[17,314],[423,426],[426,266],[266,423],[396,377],[377,369],[369,396],[270,322],[322,269],[269,270],[413,417],[417,464],[464,413],[385,386],[386,258],[258,385],[248,456],[456,419],[419,248],[298,284],[284,333],[333,298],[168,417],[417,8],[8,168],[448,346],[346,261],[261,448],[417,413],[413,285],[285,417],[326,327],[327,328],[328,326],[277,355],[355,329],[329,277],[309,392],[392,438],[438,309],[381,382],[382,256],[256,381],[279,429],[429,360],[360,279],[365,364],[364,379],[379,365],[355,277],[277,437],[437,355],[282,443],[443,283],[283,282],[281,275],[275,363],[363,281],[395,431],[431,369],[369,395],[299,297],[297,337],[337,299],[335,273],[273,321],[321,335],[348,450],[450,349],[349,348],[359,446],[446,467],[467,359],[283,293],[293,282],[282,283],[250,458],[458,462],[462,250],[300,276],[276,383],[383,300],[292,308],[308,325],[325,292],[283,276],[276,293],[293,283],[264,372],[372,447],[447,264],[346,352],[352,340],[340,346],[354,274],[274,19],[19,354],[363,456],[456,281],[281,363],[426,436],[436,425],[425,426],[380,381],[381,252],[252,380],[267,269],[269,393],[393,267],[421,200],[200,428],[428,421],[371,266],[266,329],[329,371],[432,287],[287,422],[422,432],[290,250],[250,328],[328,290],[385,258],[258,384],[384,385],[446,265],[265,342],[342,446],[386,387],[387,257],[257,386],[422,424],[424,430],[430,422],[445,342],[342,276],[276,445],[422,273],[273,424],[424,422],[306,292],[292,307],[307,306],[352,366],[366,345],[345,352],[268,271],[271,302],[302,268],[358,423],[423,371],[371,358],[327,294],[294,460],[460,327],[331,279],[279,294],[294,331],[303,271],[271,304],[304,303],[436,432],[432,427],[427,436],[304,272],[272,408],[408,304],[395,394],[394,431],[431,395],[378,395],[395,400],[400,378],[296,334],[334,299],[299,296],[6,351],[351,168],[168,6],[376,352],[352,411],[411,376],[307,325],[325,320],[320,307],[285,295],[295,336],[336,285],[320,319],[319,404],[404,320],[329,330],[330,349],[349,329],[334,293],[293,333],[333,334],[366,323],[323,447],[447,366],[316,15],[15,315],[315,316],[331,358],[358,279],[279,331],[317,14],[14,316],[316,317],[8,285],[285,9],[9,8],[277,329],[329,350],[350,277],[253,374],[374,252],[252,253],[319,318],[318,403],[403,319],[351,6],[6,419],[419,351],[324,318],[318,325],[325,324],[397,367],[367,365],[365,397],[288,435],[435,397],[397,288],[278,344],[344,439],[439,278],[310,272],[272,311],[311,310],[248,195],[195,281],[281,248],[375,273],[273,291],[291,375],[175,396],[396,199],[199,175],[312,311],[311,268],[268,312],[276,283],[283,445],[445,276],[390,373],[373,339],[339,390],[295,282],[282,296],[296,295],[448,449],[449,346],[346,448],[356,264],[264,454],[454,356],[337,336],[336,299],[299,337],[337,338],[338,151],[151,337],[294,278],[278,455],[455,294],[308,292],[292,415],[415,308],[429,358],[358,355],[355,429],[265,340],[340,372],[372,265],[352,346],[346,280],[280,352],[295,442],[442,282],[282,295],[354,19],[19,370],[370,354],[285,441],[441,295],[295,285],[195,248],[248,197],[197,195],[457,440],[440,274],[274,457],[301,300],[300,368],[368,301],[417,351],[351,465],[465,417],[251,301],[301,389],[389,251],[394,395],[395,379],[379,394],[399,412],[412,419],[419,399],[410,436],[436,322],[322,410],[326,2],[2,393],[393,326],[354,370],[370,461],[461,354],[393,164],[164,267],[267,393],[268,302],[302,12],[12,268],[312,268],[268,13],[13,312],[298,293],[293,301],[301,298],[265,446],[446,340],[340,265],[280,330],[330,425],[425,280],[322,426],[426,391],[391,322],[420,429],[429,437],[437,420],[393,391],[391,326],[326,393],[344,440],[440,438],[438,344],[458,459],[459,461],[461,458],[364,434],[434,394],[394,364],[428,396],[396,262],[262,428],[274,354],[354,457],[457,274],[317,316],[316,402],[402,317],[316,315],[315,403],[403,316],[315,314],[314,404],[404,315],[314,313],[313,405],[405,314],[313,421],[421,406],[406,313],[323,366],[366,361],[361,323],[292,306],[306,407],[407,292],[306,291],[291,408],[408,306],[291,287],[287,409],[409,291],[287,432],[432,410],[410,287],[427,434],[434,411],[411,427],[372,264],[264,383],[383,372],[459,309],[309,457],[457,459],[366,352],[352,401],[401,366],[1,274],[274,4],[4,1],[418,421],[421,262],[262,418],[331,294],[294,358],[358,331],[435,433],[433,367],[367,435],[392,289],[289,439],[439,392],[328,462],[462,326],[326,328],[94,2],[2,370],[370,94],[289,305],[305,455],[455,289],[339,254],[254,448],[448,339],[359,255],[255,446],[446,359],[254,253],[253,449],[449,254],[253,252],[252,450],[450,253],[252,256],[256,451],[451,252],[256,341],[341,452],[452,256],[414,413],[413,463],[463,414],[286,441],[441,414],[414,286],[286,258],[258,441],[441,286],[258,257],[257,442],[442,258],[257,259],[259,443],[443,257],[259,260],[260,444],[444,259],[260,467],[467,445],[445,260],[309,459],[459,250],[250,309],[305,289],[289,290],[290,305],[305,290],[290,460],[460,305],[401,376],[376,435],[435,401],[309,250],[250,392],[392,309],[376,411],[411,433],[433,376],[453,341],[341,464],[464,453],[357,453],[453,465],[465,357],[343,357],[357,412],[412,343],[437,343],[343,399],[399,437],[344,360],[360,440],[440,344],[420,437],[437,456],[456,420],[360,420],[420,363],[363,360],[361,401],[401,288],[288,361],[265,372],[372,353],[353,265],[390,339],[339,249],[249,390],[339,448],[448,255],[255,339]]),Ht("HAND_CONNECTIONS",[[0,1],[1,2],[2,3],[3,4],[0,5],[5,6],[6,7],[7,8],[5,9],[9,10],[10,11],[11,12],[9,13],[13,14],[14,15],[15,16],[13,17],[0,17],[17,18],[18,19],[19,20]]),Ht("POSE_CONNECTIONS",[[0,1],[1,2],[2,3],[3,7],[0,4],[4,5],[5,6],[6,8],[9,10],[11,12],[11,13],[13,15],[15,17],[15,19],[15,21],[17,19],[12,14],[14,16],[16,18],[16,20],[16,22],[18,20],[11,23],[12,24],[23,24],[23,25],[24,26],[25,27],[26,28],[27,29],[28,30],[29,31],[30,32],[27,31],[28,32]]),Ht("POSE_LANDMARKS",{NOSE:0,LEFT_EYE_INNER:1,LEFT_EYE:2,LEFT_EYE_OUTER:3,RIGHT_EYE_INNER:4,RIGHT_EYE:5,RIGHT_EYE_OUTER:6,LEFT_EAR:7,RIGHT_EAR:8,LEFT_RIGHT:9,RIGHT_LEFT:10,LEFT_SHOULDER:11,RIGHT_SHOULDER:12,LEFT_ELBOW:13,RIGHT_ELBOW:14,LEFT_WRIST:15,RIGHT_WRIST:16,LEFT_PINKY:17,RIGHT_PINKY:18,LEFT_INDEX:19,RIGHT_INDEX:20,LEFT_THUMB:21,RIGHT_THUMB:22,LEFT_HIP:23,RIGHT_HIP:24,LEFT_KNEE:25,RIGHT_KNEE:26,LEFT_ANKLE:27,RIGHT_ANKLE:28,LEFT_HEEL:29,RIGHT_HEEL:30,LEFT_FOOT_INDEX:31,RIGHT_FOOT_INDEX:32}),Ht("POSE_LANDMARKS_LEFT",{LEFT_EYE_INNER:1,LEFT_EYE:2,LEFT_EYE_OUTER:3,LEFT_EAR:7,LEFT_RIGHT:9,LEFT_SHOULDER:11,LEFT_ELBOW:13,LEFT_WRIST:15,LEFT_PINKY:17,LEFT_INDEX:19,LEFT_THUMB:21,LEFT_HIP:23,LEFT_KNEE:25,LEFT_ANKLE:27,LEFT_HEEL:29,LEFT_FOOT_INDEX:31}),Ht("POSE_LANDMARKS_RIGHT",{RIGHT_EYE_INNER:4,RIGHT_EYE:5,RIGHT_EYE_OUTER:6,RIGHT_EAR:8,RIGHT_LEFT:10,RIGHT_SHOULDER:12,RIGHT_ELBOW:14,RIGHT_WRIST:16,RIGHT_PINKY:18,RIGHT_INDEX:20,RIGHT_THUMB:22,RIGHT_HIP:24,RIGHT_KNEE:26,RIGHT_ANKLE:28,RIGHT_HEEL:30,RIGHT_FOOT_INDEX:32}),Ht("POSE_LANDMARKS_NEUTRAL",{NOSE:0}),Ht("matrixDataToMatrix",function(e){for(var u=e.getCols(),m=e.getRows(),t=e.getPackedDataList(),c=[],a=0;a<m;a++)c.push(Array(u));for(a=0;a<m;a++)for(var b=0;b<u;b++){var S=e.getLayout()===1?a*u+b:b*m+a;c[a][b]=t[S]}return c}),Ht("VERSION","0.5.1635989137")}).call(Gi);const Xi={};(function(){var i;function n(o){var d=0;return function(){return d<o.length?{done:!1,value:o[d++]}:{done:!0}}}var r=typeof Object.defineProperties=="function"?Object.defineProperty:function(o,d,g){return o==Array.prototype||o==Object.prototype||(o[d]=g.value),o};function f(o){o=[typeof globalThis=="object"&&globalThis,o,typeof window=="object"&&window,typeof self=="object"&&self,typeof global=="object"&&global];for(var d=0;d<o.length;++d){var g=o[d];if(g&&g.Math==Math)return g}throw Error("Cannot find global object")}var Z=f(this);function I(o,d){if(d)t:{var g=Z;o=o.split(".");for(var e=0;e<o.length-1;e++){var u=o[e];if(!(u in g))break t;g=g[u]}o=o[o.length-1],e=g[o],d=d(e),d!=e&&d!=null&&r(g,o,{configurable:!0,writable:!0,value:d})}}I("Symbol",function(o){function d(m){if(this instanceof d)throw new TypeError("Symbol is not a constructor");return new g(e+(m||"")+"_"+u++,m)}function g(m,t){this.g=m,r(this,"description",{configurable:!0,writable:!0,value:t})}if(o)return o;g.prototype.toString=function(){return this.g};var e="jscomp_symbol_"+(1e9*Math.random()>>>0)+"_",u=0;return d}),I("Symbol.iterator",function(o){if(o)return o;o=Symbol("Symbol.iterator");for(var d="Array Int8Array Uint8Array Uint8ClampedArray Int16Array Uint16Array Int32Array Uint32Array Float32Array Float64Array".split(" "),g=0;g<d.length;g++){var e=Z[d[g]];typeof e=="function"&&typeof e.prototype[o]!="function"&&r(e.prototype,o,{configurable:!0,writable:!0,value:function(){return F(n(this))}})}return o});function F(o){return o={next:o},o[Symbol.iterator]=function(){return this},o}function T(o){var d=typeof Symbol<"u"&&Symbol.iterator&&o[Symbol.iterator];return d?d.call(o):{next:n(o)}}function J(o){if(!(o instanceof Array)){o=T(o);for(var d,g=[];!(d=o.next()).done;)g.push(d.value);o=g}return o}var et=typeof Object.create=="function"?Object.create:function(o){function d(){}return d.prototype=o,new d},lt;if(typeof Object.setPrototypeOf=="function")lt=Object.setPrototypeOf;else{var pt;t:{var Yt={a:!0},Lt={};try{Lt.__proto__=Yt,pt=Lt.a;break t}catch{}pt=!1}lt=pt?function(o,d){if(o.__proto__=d,o.__proto__!==d)throw new TypeError(o+" is not extensible");return o}:null}var at=lt;function dt(o,d){if(o.prototype=et(d.prototype),o.prototype.constructor=o,at)at(o,d);else for(var g in d)if(g!="prototype")if(Object.defineProperties){var e=Object.getOwnPropertyDescriptor(d,g);e&&Object.defineProperty(o,g,e)}else o[g]=d[g];o.na=d.prototype}function Bt(){this.l=!1,this.i=null,this.h=void 0,this.g=1,this.u=this.o=0,this.j=null}function kt(o){if(o.l)throw new TypeError("Generator is already running");o.l=!0}Bt.prototype.s=function(o){this.h=o};function ee(o,d){o.j={da:d,ea:!0},o.g=o.o||o.u}Bt.prototype.return=function(o){this.j={return:o},this.g=this.u};function P(o,d,g){return o.g=g,{value:d}}function De(o){this.g=new Bt,this.h=o}function ze(o,d){kt(o.g);var g=o.g.i;return g?We(o,"return"in g?g.return:function(e){return{value:e,done:!0}},d,o.g.return):(o.g.return(d),zt(o))}function We(o,d,g,e){try{var u=d.call(o.g.i,g);if(!(u instanceof Object))throw new TypeError("Iterator result "+u+" is not an object");if(!u.done)return o.g.l=!1,u;var m=u.value}catch(t){return o.g.i=null,ee(o.g,t),zt(o)}return o.g.i=null,e.call(o.g,m),zt(o)}function zt(o){for(;o.g.g;)try{var d=o.h(o.g);if(d)return o.g.l=!1,{value:d.value,done:!1}}catch(g){o.g.h=void 0,ee(o.g,g)}if(o.g.l=!1,o.g.j){if(d=o.g.j,o.g.j=null,d.ea)throw d.da;return{value:d.return,done:!0}}return{value:void 0,done:!0}}function Hn(o){this.next=function(d){return kt(o.g),o.g.i?d=We(o,o.g.i.next,d,o.g.s):(o.g.s(d),d=zt(o)),d},this.throw=function(d){return kt(o.g),o.g.i?d=We(o,o.g.i.throw,d,o.g.s):(ee(o.g,d),d=zt(o)),d},this.return=function(d){return ze(o,d)},this[Symbol.iterator]=function(){return this}}function ne(o){function d(e){return o.next(e)}function g(e){return o.throw(e)}return new Promise(function(e,u){function m(t){t.done?e(t.value):Promise.resolve(t.value).then(d,g).then(m,u)}m(o.next())})}function Zt(o){return ne(new Hn(new De(o)))}I("Promise",function(o){function d(t){this.h=0,this.i=void 0,this.g=[],this.s=!1;var c=this.j();try{t(c.resolve,c.reject)}catch(a){c.reject(a)}}function g(){this.g=null}function e(t){return t instanceof d?t:new d(function(c){c(t)})}if(o)return o;g.prototype.h=function(t){if(this.g==null){this.g=[];var c=this;this.i(function(){c.l()})}this.g.push(t)};var u=Z.setTimeout;g.prototype.i=function(t){u(t,0)},g.prototype.l=function(){for(;this.g&&this.g.length;){var t=this.g;this.g=[];for(var c=0;c<t.length;++c){var a=t[c];t[c]=null;try{a()}catch(b){this.j(b)}}}this.g=null},g.prototype.j=function(t){this.i(function(){throw t})},d.prototype.j=function(){function t(b){return function(S){a||(a=!0,b.call(c,S))}}var c=this,a=!1;return{resolve:t(this.D),reject:t(this.l)}},d.prototype.D=function(t){if(t===this)this.l(new TypeError("A Promise cannot resolve to itself"));else if(t instanceof d)this.H(t);else{t:switch(typeof t){case"object":var c=t!=null;break t;case"function":c=!0;break t;default:c=!1}c?this.A(t):this.o(t)}},d.prototype.A=function(t){var c=void 0;try{c=t.then}catch(a){this.l(a);return}typeof c=="function"?this.I(c,t):this.o(t)},d.prototype.l=function(t){this.u(2,t)},d.prototype.o=function(t){this.u(1,t)},d.prototype.u=function(t,c){if(this.h!=0)throw Error("Cannot settle("+t+", "+c+"): Promise already settled in state"+this.h);this.h=t,this.i=c,this.h===2&&this.G(),this.B()},d.prototype.G=function(){var t=this;u(function(){if(t.C()){var c=Z.console;typeof c<"u"&&c.error(t.i)}},1)},d.prototype.C=function(){if(this.s)return!1;var t=Z.CustomEvent,c=Z.Event,a=Z.dispatchEvent;return typeof a>"u"?!0:(typeof t=="function"?t=new t("unhandledrejection",{cancelable:!0}):typeof c=="function"?t=new c("unhandledrejection",{cancelable:!0}):(t=Z.document.createEvent("CustomEvent"),t.initCustomEvent("unhandledrejection",!1,!0,t)),t.promise=this,t.reason=this.i,a(t))},d.prototype.B=function(){if(this.g!=null){for(var t=0;t<this.g.length;++t)m.h(this.g[t]);this.g=null}};var m=new g;return d.prototype.H=function(t){var c=this.j();t.M(c.resolve,c.reject)},d.prototype.I=function(t,c){var a=this.j();try{t.call(c,a.resolve,a.reject)}catch(b){a.reject(b)}},d.prototype.then=function(t,c){function a(C,U){return typeof C=="function"?function(z){try{b(C(z))}catch(Q){S(Q)}}:U}var b,S,L=new d(function(C,U){b=C,S=U});return this.M(a(t,b),a(c,S)),L},d.prototype.catch=function(t){return this.then(void 0,t)},d.prototype.M=function(t,c){function a(){switch(b.h){case 1:t(b.i);break;case 2:c(b.i);break;default:throw Error("Unexpected state: "+b.h)}}var b=this;this.g==null?m.h(a):this.g.push(a),this.s=!0},d.resolve=e,d.reject=function(t){return new d(function(c,a){a(t)})},d.race=function(t){return new d(function(c,a){for(var b=T(t),S=b.next();!S.done;S=b.next())e(S.value).M(c,a)})},d.all=function(t){var c=T(t),a=c.next();return a.done?e([]):new d(function(b,S){function L(z){return function(Q){C[z]=Q,U--,U==0&&b(C)}}var C=[],U=0;do C.push(void 0),U++,e(a.value).M(L(C.length-1),S),a=c.next();while(!a.done)})},d});function $e(o,d){o instanceof String&&(o+="");var g=0,e=!1,u={next:function(){if(!e&&g<o.length){var m=g++;return{value:d(m,o[m]),done:!1}}return e=!0,{done:!0,value:void 0}}};return u[Symbol.iterator]=function(){return u},u}var An=typeof Object.assign=="function"?Object.assign:function(o,d){for(var g=1;g<arguments.length;g++){var e=arguments[g];if(e)for(var u in e)Object.prototype.hasOwnProperty.call(e,u)&&(o[u]=e[u])}return o};I("Object.assign",function(o){return o||An}),I("Object.is",function(o){return o||function(d,g){return d===g?d!==0||1/d===1/g:d!==d&&g!==g}}),I("Array.prototype.includes",function(o){return o||function(d,g){var e=this;e instanceof String&&(e=String(e));var u=e.length;for(g=g||0,0>g&&(g=Math.max(g+u,0));g<u;g++){var m=e[g];if(m===d||Object.is(m,d))return!0}return!1}}),I("String.prototype.includes",function(o){return o||function(d,g){if(this==null)throw new TypeError("The 'this' value for String.prototype.includes must not be null or undefined");if(d instanceof RegExp)throw new TypeError("First argument to String.prototype.includes must not be a regular expression");return this.indexOf(d,g||0)!==-1}}),I("Array.prototype.keys",function(o){return o||function(){return $e(this,function(d){return d})}});var Re=this||self;function Ht(o,d){o=o.split(".");var g=Re;o[0]in g||typeof g.execScript>"u"||g.execScript("var "+o[0]);for(var e;o.length&&(e=o.shift());)o.length||d===void 0?g[e]&&g[e]!==Object.prototype[e]?g=g[e]:g=g[e]={}:g[e]=d}function Te(){throw Error("Invalid UTF8")}function sn(o,d){return d=String.fromCharCode.apply(null,d),o==null?d:o+d}var Gn,Ln=typeof TextDecoder<"u",Rn,Jn=typeof TextEncoder<"u",dn={},pn=null;function kn(o){var d;d===void 0&&(d=0),Me(),d=dn[d];for(var g=Array(Math.floor(o.length/3)),e=d[64]||"",u=0,m=0;u<o.length-2;u+=3){var t=o[u],c=o[u+1],a=o[u+2],b=d[t>>2];t=d[(t&3)<<4|c>>4],c=d[(c&15)<<2|a>>6],a=d[a&63],g[m++]=b+t+c+a}switch(b=0,a=e,o.length-u){case 2:b=o[u+1],a=d[(b&15)<<2]||e;case 1:o=o[u],g[m]=d[o>>2]+d[(o&3)<<4|b>>4]+a+e}return g.join("")}function Fn(o){var d=o.length,g=3*d/4;g%3?g=Math.floor(g):"=.".indexOf(o[d-1])!=-1&&(g="=.".indexOf(o[d-2])!=-1?g-2:g-1);var e=new Uint8Array(g),u=0;return je(o,function(m){e[u++]=m}),u!==g?e.subarray(0,u):e}function je(o,d){function g(a){for(;e<o.length;){var b=o.charAt(e++),S=pn[b];if(S!=null)return S;if(!/^[\s\xa0]*$/.test(b))throw Error("Unknown base64 encoding at char: "+b)}return a}Me();for(var e=0;;){var u=g(-1),m=g(0),t=g(64),c=g(64);if(c===64&&u===-1)break;d(u<<2|m>>4),t!=64&&(d(m<<4&240|t>>2),c!=64&&d(t<<6&192|c))}}function Me(){if(!pn){pn={};for(var o="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789".split(""),d=["+/=","+/","-_=","-_.","-_"],g=0;5>g;g++){var e=o.concat(d[g].split(""));dn[g]=e;for(var u=0;u<e.length;u++){var m=e[u];pn[m]===void 0&&(pn[m]=u)}}}}var xn=typeof Uint8Array=="function";function Xn(o){return xn&&o!=null&&o instanceof Uint8Array}var he;function Se(o){if(this.L=o,o!==null&&o.length===0)throw Error("ByteString should be constructed with non-empty values")}var Oe=typeof Uint8Array.prototype.slice=="function",re=0,Ve=0;function ln(o,d){if(o.constructor===Uint8Array)return o;if(o.constructor===ArrayBuffer)return new Uint8Array(o);if(o.constructor===Array)return new Uint8Array(o);if(o.constructor===String)return Fn(o);if(o.constructor===Se)return!d&&(d=o.L)&&d.constructor===Uint8Array?d:(d=o.L,d=d==null||Xn(d)?d:typeof d=="string"?Fn(d):null,(o=o.L=d)?new Uint8Array(o):he||(he=new Uint8Array(0)));if(o instanceof Uint8Array)return new Uint8Array(o.buffer,o.byteOffset,o.byteLength);throw Error("Type not convertible to a Uint8Array, expected a Uint8Array, an ArrayBuffer, a base64 encoded string, or Array of numbers")}function Be(o,d){return Error("Invalid wire type: "+o+" (at position "+d+")")}function Qt(){return Error("Failed to read varint, encoding is invalid.")}function Ze(o,d){d=d===void 0?{}:d,d=d.v===void 0?!1:d.v,this.h=null,this.g=this.i=this.j=0,this.v=d,o&&Ce(this,o)}function Ce(o,d){o.h=ln(d,o.v),o.j=0,o.i=o.h.length,o.g=o.j}Ze.prototype.reset=function(){this.g=this.j};function Mt(o){if(o.g>o.i)throw Error("Tried to read past the end of the data "+o.g+" > "+o.i)}function xe(o){var d=o.h,g=d[o.g],e=g&127;if(128>g)return o.g+=1,Mt(o),e;if(g=d[o.g+1],e|=(g&127)<<7,128>g)return o.g+=2,Mt(o),e;if(g=d[o.g+2],e|=(g&127)<<14,128>g)return o.g+=3,Mt(o),e;if(g=d[o.g+3],e|=(g&127)<<21,128>g)return o.g+=4,Mt(o),e;if(g=d[o.g+4],o.g+=5,e|=(g&15)<<28,128>g)return Mt(o),e;if(128<=d[o.g++]&&128<=d[o.g++]&&128<=d[o.g++]&&128<=d[o.g++]&&128<=d[o.g++])throw Qt();return Mt(o),e}var jt=[];function ye(){this.g=[]}ye.prototype.length=function(){return this.g.length},ye.prototype.end=function(){var o=this.g;return this.g=[],o};function Ye(o,d){for(;127<d;)o.g.push(d&127|128),d>>>=7;o.g.push(d)}function qe(o){var d={},g=d.W===void 0?!1:d.W;this.l={v:d.v===void 0?!1:d.v},this.W=g,d=this.l,jt.length?(g=jt.pop(),d&&(g.v=d.v),o&&Ce(g,o),o=g):o=new Ze(o,d),this.g=o,this.j=this.g.g,this.h=this.i=-1}qe.prototype.reset=function(){this.g.reset(),this.j=this.g.g,this.h=this.i=-1};function Xe(o){var d=o.g;if(d.g==d.i)return!1;o.j=o.g.g;var g=xe(o.g)>>>0;if(d=g>>>3,g&=7,!(0<=g&&5>=g))throw Be(g,o.j);if(1>d)throw Error("Invalid field number: "+d+" (at position "+o.j+")");return o.i=d,o.h=g,!0}function Ot(o){switch(o.h){case 0:if(o.h!=0)Ot(o);else t:{o=o.g;for(var d=o.g,g=d+10;d<g;)if((o.h[d++]&128)===0){o.g=d,Mt(o);break t}throw Qt()}break;case 1:o=o.g,o.g+=8,Mt(o);break;case 2:o.h!=2?Ot(o):(d=xe(o.g)>>>0,o=o.g,o.g+=d,Mt(o));break;case 5:o=o.g,o.g+=4,Mt(o);break;case 3:d=o.i;do{if(!Xe(o))throw Error("Unmatched start-group tag: stream EOF");if(o.h==4){if(o.i!=d)throw Error("Unmatched end-group tag");break}Ot(o)}while(1);break;default:throw Be(o.h,o.j)}}var Ae=[];function Pe(){this.i=[],this.h=0,this.g=new ye}function Ie(o,d){d.length!==0&&(o.i.push(d),o.h+=d.length)}function Wn(o,d){if(d=d.ba){Ie(o,o.g.end());for(var g=0;g<d.length;g++)Ie(o,d[g])}}var cn=typeof Symbol=="function"&&typeof Symbol()=="symbol"?Symbol(void 0):void 0;function _e(o,d){Object.isFrozen(o)||(cn?o[cn]|=d:o.N!==void 0?o.N|=d:Object.defineProperties(o,{N:{value:d,configurable:!0,writable:!0,enumerable:!1}}))}function un(o){var d;return cn?d=o[cn]:d=o.N,d==null?0:d}function ve(o){return _e(o,1),o}function we(o){return Array.isArray(o)?!!(un(o)&2):!1}function Ge(o){if(!Array.isArray(o))throw Error("cannot mark non-array as immutable");_e(o,2)}function ie(o){return o!==null&&typeof o=="object"&&!Array.isArray(o)&&o.constructor===Object}var Qe=Object.freeze(ve([]));function qt(o){if(we(o.m))throw Error("Cannot mutate an immutable Message")}var Pt=typeof Symbol<"u"&&typeof Symbol.hasInstance<"u";function hn(o){return{value:o,configurable:!1,writable:!1,enumerable:!1}}function fe(o,d,g){return d===-1?null:d>=o.i?o.g?o.g[d]:void 0:(g===void 0?0:g)&&o.g&&(g=o.g[d],g!=null)?g:o.m[d+o.h]}function Ct(o,d,g,e){e=e===void 0?!1:e,qt(o),d<o.i&&!e?o.m[d+o.h]=g:(o.g||(o.g=o.m[o.i+o.h]={}))[d]=g}function Vt(o,d,g,e){g=g===void 0?!0:g,e=e===void 0?!1:e;var u=fe(o,d,e);return u==null&&(u=Qe),we(o.m)?g&&(Ge(u),Object.freeze(u)):(u===Qe||we(u))&&(u=ve(u.slice()),Ct(o,d,u,e)),u}function oe(o,d,g){return o=fe(o,d),o=o==null?o:+o,o==null?g===void 0?0:g:o}function Le(o,d,g,e){o.j||(o.j={});var u=we(o.m),m=o.j[g];if(!m){e=Vt(o,g,!0,e===void 0?!1:e),m=[],u=u||we(e);for(var t=0;t<e.length;t++)m[t]=new d(e[t]),u&&Ge(m[t].m);u&&(Ge(m),Object.freeze(m)),o.j[g]=m}return m}function te(o,d,g,e,u){var m=m===void 0?!1:m;return qt(o),m=Le(o,g,d,m),g=e||new g,o=Vt(o,d),u!=null?(m.splice(u,0,g),o.splice(u,0,g.m)):(m.push(g),o.push(g.m)),g}function se(o,d){return o=fe(o,d),o==null?0:o}function tt(o,d){return o=fe(o,d),o==null?"":o}function it(o){switch(typeof o){case"number":return isFinite(o)?o:String(o);case"object":if(o&&!Array.isArray(o)){if(Xn(o))return kn(o);if(o instanceof Se){var d=o.L;return d=d==null||typeof d=="string"?d:xn&&d instanceof Uint8Array?kn(d):null,(o.L=d)||""}}}return o}function ut(o){var d=ue;return d=d===void 0?St:d,de(o,d)}function _t(o,d){if(o!=null){if(Array.isArray(o))o=de(o,d);else if(ie(o)){var g={},e;for(e in o)g[e]=_t(o[e],d);o=g}else o=d(o);return o}}function de(o,d){for(var g=o.slice(),e=0;e<g.length;e++)g[e]=_t(g[e],d);return Array.isArray(o)&&un(o)&1&&ve(g),g}function ue(o){return o&&typeof o=="object"&&o.toJSON?o.toJSON():(o=it(o),Array.isArray(o)?ut(o):o)}function St(o){return Xn(o)?new Uint8Array(o):o}function me(o,d,g){o||(o=He),He=null;var e=this.constructor.h;o||(o=e?[e]:[]),this.h=(e?0:-1)-(this.constructor.g||0),this.j=void 0,this.m=o;t:{if(e=this.m.length,o=e-1,e&&(e=this.m[o],ie(e))){this.i=o-this.h,this.g=e;break t}d!==void 0&&-1<d?(this.i=Math.max(d,o+1-this.h),this.g=void 0):this.i=Number.MAX_VALUE}if(g)for(d=0;d<g.length;d++)if(o=g[d],o<this.i)o+=this.h,(e=this.m[o])?Array.isArray(e)&&ve(e):this.m[o]=Qe;else{e=this.g||(this.g=this.m[this.i+this.h]={});var u=e[o];u?Array.isArray(u)&&ve(u):e[o]=Qe}}me.prototype.toJSON=function(){return ut(this.m)},me.prototype.toString=function(){return this.m.toString()};var He;function tn(){me.apply(this,arguments)}if(dt(tn,me),Pt){var en={};Object.defineProperties(tn,(en[Symbol.hasInstance]=hn(function(){throw Error("Cannot perform instanceof checks for MutableMessage")}),en))}function fn(o,d,g){if(g){var e={},u;for(u in g){var m=g[u],t=m.ha;t||(e.F=m.la||m.fa.P,m.aa?(e.U=In(m.aa),t=function(c){return function(a,b,S){return c.F(a,b,S,c.U)}}(e)):m.ca?(e.T=Ke(m.X.g,m.ca),t=function(c){return function(a,b,S){return c.F(a,b,S,c.T)}}(e)):t=e.F,m.ha=t),t(d,o,m.X),e={F:e.F,U:e.U,T:e.T}}}Wn(d,o)}var bn=Symbol();function Fe(o,d,g){return o[bn]||(o[bn]=function(e,u){return d(e,u,g)})}function nn(o){var d=o[bn];if(!d){var g=p(o);d=function(e,u){return W(e,u,g)},o[bn]=d}return d}function zn(o){var d=o.aa;if(d)return nn(d);if(d=o.ka)return Fe(o.X.g,d,o.ca)}function rn(o){var d=zn(o),g=o.X,e=o.fa.O;return d?function(u,m){return e(u,m,g,d)}:function(u,m){return e(u,m,g)}}function Je(o,d,g,e,u,m){o=o();var t=0;for(o.length&&typeof o[0]!="number"&&(g(d,o[0]),t++);t<o.length;){g=o[t++];for(var c=t+1;c<o.length&&typeof o[c]!="number";)c++;var a=o[t++];switch(c-=t,c){case 0:e(d,g,a);break;case 1:e(d,g,a,o[t++]);break;case 2:u(d,g,a,o[t++],o[t++]);break;case 3:c=o[t++];var b=o[t++],S=o[t++];Array.isArray(S)?u(d,g,a,c,b,S):m(d,g,a,c,b,S);break;case 4:m(d,g,a,o[t++],o[t++],o[t++],o[t++]);break;default:throw Error("unexpected number of binary field arguments: "+c)}}return d}var gn=Symbol();function In(o){var d=o[gn];if(!d){var g=an(o);d=function(e,u){return E(e,u,g)},o[gn]=d}return d}function Ke(o,d){var g=o[gn];return g||(g=function(e,u){return fn(e,u,d)},o[gn]=g),g}var En=Symbol();function on(o,d){o.push(d)}function Zn(o,d,g){o.push(d,g.P)}function Sn(o,d,g,e,u){var m=In(u),t=g.P;o.push(d,function(c,a,b){return t(c,a,b,e,m)})}function Kn(o,d,g,e,u,m){var t=Ke(e,m),c=g.P;o.push(d,function(a,b,S){return c(a,b,S,e,t)})}function an(o){var d=o[En];return d||Je(o,o[En]=[],on,Zn,Sn,Kn)}var Tn=Symbol();function _n(o,d){o[0]=d}function Qn(o,d,g,e){var u=g.O;o[d]=e?function(m,t,c){return u(m,t,c,e)}:u}function Yn(o,d,g,e,u,m){var t=g.O,c=nn(u);o[d]=function(a,b,S){return t(a,b,S,e,c,m)}}function Cn(o,d,g,e,u,m,t){var c=g.O,a=Fe(e,u,m);o[d]=function(b,S,L){return c(b,S,L,e,a,t)}}function p(o){var d=o[Tn];return d||Je(o,o[Tn]={},_n,Qn,Yn,Cn)}function W(o,d,g){for(;Xe(d)&&d.h!=4;){var e=d.i,u=g[e];if(!u){var m=g[0];m&&(m=m[e])&&(u=g[e]=rn(m))}if((!u||!u(d,o,e))&&(u=d,e=o,m=u.j,Ot(u),!u.W)){var t=u.g.h;u=u.g.g,u=m===u?he||(he=new Uint8Array(0)):Oe?t.slice(m,u):new Uint8Array(t.subarray(m,u)),(m=e.ba)?m.push(u):e.ba=[u]}}return o}function V(o,d,g){if(Ae.length){var e=Ae.pop();o&&(Ce(e.g,o),e.i=-1,e.h=-1),o=e}else o=new qe(o);try{return W(new d,o,p(g))}finally{d=o.g,d.h=null,d.j=0,d.i=0,d.g=0,d.v=!1,o.i=-1,o.h=-1,100>Ae.length&&Ae.push(o)}}function E(o,d,g){for(var e=g.length,u=e%2==1,m=u?1:0;m<e;m+=2)(0,g[m+1])(d,o,g[m]);fn(o,d,u?g[0]:void 0)}function O(o,d){var g=new Pe;E(o,g,an(d)),Ie(g,g.g.end()),o=new Uint8Array(g.h),d=g.i;for(var e=d.length,u=0,m=0;m<e;m++){var t=d[m];o.set(t,u),u+=t.length}return g.i=[o],o}function ot(o,d){return{O:o,P:d}}var j=ot(function(o,d,g){if(o.h!==5)return!1;o=o.g;var e=o.h[o.g],u=o.h[o.g+1],m=o.h[o.g+2],t=o.h[o.g+3];return o.g+=4,Mt(o),u=(e<<0|u<<8|m<<16|t<<24)>>>0,o=2*(u>>31)+1,e=u>>>23&255,u&=8388607,Ct(d,g,e==255?u?NaN:1/0*o:e==0?o*Math.pow(2,-149)*u:o*Math.pow(2,e-150)*(u+Math.pow(2,23))),!0},function(o,d,g){if(d=fe(d,g),d!=null){Ye(o.g,8*g+5),o=o.g;var e=d;e=(g=0>e?1:0)?-e:e,e===0?0<1/e?re=Ve=0:(Ve=0,re=2147483648):isNaN(e)?(Ve=0,re=2147483647):34028234663852886e22<e?(Ve=0,re=(g<<31|2139095040)>>>0):11754943508222875e-54>e?(e=Math.round(e/Math.pow(2,-149)),Ve=0,re=(g<<31|e)>>>0):(d=Math.floor(Math.log(e)/Math.LN2),e*=Math.pow(2,-d),e=Math.round(8388608*e),16777216<=e&&++d,Ve=0,re=(g<<31|d+127<<23|e&8388607)>>>0),g=re,o.g.push(g>>>0&255),o.g.push(g>>>8&255),o.g.push(g>>>16&255),o.g.push(g>>>24&255)}}),rt=ot(function(o,d,g){if(o.h!==0)return!1;for(var e=o.g,u=128,m=0,t=o=0;4>t&&128<=u;t++)u=e.h[e.g++],Mt(e),m|=(u&127)<<7*t;if(128<=u&&(u=e.h[e.g++],Mt(e),m|=(u&127)<<28,o|=(u&127)>>4),128<=u)for(t=0;5>t&&128<=u;t++)u=e.h[e.g++],Mt(e),o|=(u&127)<<7*t+3;if(128>u)e=m>>>0,u=o>>>0,(o=u&2147483648)&&(e=~e+1>>>0,u=~u>>>0,e==0&&(u=u+1>>>0)),e=4294967296*u+(e>>>0);else throw Qt();return Ct(d,g,o?-e:e),!0},function(o,d,g){if(d=fe(d,g),d!=null&&d!=null){Ye(o.g,8*g),o=o.g;var e=d;for(g=0>e,e=Math.abs(e),d=e>>>0,e=Math.floor((e-d)/4294967296),e>>>=0,g&&(e=~e>>>0,d=(~d>>>0)+1,4294967295<d&&(d=0,e++,4294967295<e&&(e=0))),re=d,Ve=e,g=re,d=Ve;0<d||127<g;)o.g.push(g&127|128),g=(g>>>7|d<<25)>>>0,d>>>=7;o.g.push(g)}}),bt=ot(function(o,d,g){return o.h!==0?!1:(Ct(d,g,xe(o.g)),!0)},function(o,d,g){if(d=fe(d,g),d!=null&&d!=null)if(Ye(o.g,8*g),o=o.g,g=d,0<=g)Ye(o,g);else{for(d=0;9>d;d++)o.g.push(g&127|128),g>>=7;o.g.push(1)}}),Rt=ot(function(o,d,g){if(o.h!==2)return!1;var e=xe(o.g)>>>0;o=o.g;var u=o.g;o.g+=e,Mt(o),o=o.h;var m;if(Ln)(m=Gn)||(m=Gn=new TextDecoder("utf-8",{fatal:!0})),m=m.decode(o.subarray(u,u+e));else{e=u+e;for(var t=[],c=null,a,b,S;u<e;)a=o[u++],128>a?t.push(a):224>a?u>=e?Te():(b=o[u++],194>a||(b&192)!==128?(u--,Te()):t.push((a&31)<<6|b&63)):240>a?u>=e-1?Te():(b=o[u++],(b&192)!==128||a===224&&160>b||a===237&&160<=b||((m=o[u++])&192)!==128?(u--,Te()):t.push((a&15)<<12|(b&63)<<6|m&63)):244>=a?u>=e-2?Te():(b=o[u++],(b&192)!==128||(a<<28)+(b-144)>>30!==0||((m=o[u++])&192)!==128||((S=o[u++])&192)!==128?(u--,Te()):(a=(a&7)<<18|(b&63)<<12|(m&63)<<6|S&63,a-=65536,t.push((a>>10&1023)+55296,(a&1023)+56320))):Te(),8192<=t.length&&(c=sn(c,t),t.length=0);m=sn(c,t)}return Ct(d,g,m),!0},function(o,d,g){if(d=fe(d,g),d!=null){var e=!1;if(e=e===void 0?!1:e,Jn){if(e&&/(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])/.test(d))throw Error("Found an unpaired surrogate");d=(Rn||(Rn=new TextEncoder)).encode(d)}else{for(var u=0,m=new Uint8Array(3*d.length),t=0;t<d.length;t++){var c=d.charCodeAt(t);if(128>c)m[u++]=c;else{if(2048>c)m[u++]=c>>6|192;else{if(55296<=c&&57343>=c){if(56319>=c&&t<d.length){var a=d.charCodeAt(++t);if(56320<=a&&57343>=a){c=1024*(c-55296)+a-56320+65536,m[u++]=c>>18|240,m[u++]=c>>12&63|128,m[u++]=c>>6&63|128,m[u++]=c&63|128;continue}else t--}if(e)throw Error("Found an unpaired surrogate");c=65533}m[u++]=c>>12|224,m[u++]=c>>6&63|128}m[u++]=c&63|128}}d=m.subarray(0,u)}Ye(o.g,8*g+2),Ye(o.g,d.length),Ie(o,o.g.end()),Ie(o,d)}}),Ut=ot(function(o,d,g,e,u){if(o.h!==2)return!1;d=te(d,g,e),g=o.g.i,e=xe(o.g)>>>0;var m=o.g.g+e,t=m-g;if(0>=t&&(o.g.i=m,u(d,o),t=m-o.g.g),t)throw Error("Message parsing ended unexpectedly. Expected to read "+(e+" bytes, instead read "+(e-t)+" bytes, either the data ended unexpectedly or the message misreported its own length"));return o.g.g=m,o.g.i=g,!0},function(o,d,g,e,u){if(d=Le(d,e,g),d!=null)for(e=0;e<d.length;e++){var m=o;Ye(m.g,8*g+2);var t=m.g.end();Ie(m,t),t.push(m.h),m=t,u(d[e],o),t=o;var c=m.pop();for(c=t.h+t.g.length()-c;127<c;)m.push(c&127|128),c>>>=7,t.h++;m.push(c),t.h++}});function Jt(){tn.apply(this,arguments)}if(dt(Jt,tn),Pt){var $t={};Object.defineProperties(Jt,($t[Symbol.hasInstance]=hn(Object[Symbol.hasInstance]),$t))}function Nt(o){Jt.call(this,o)}dt(Nt,Jt);function Tt(){return[1,bt,2,j,3,Rt,4,Rt]}function Et(o){Jt.call(this,o,-1,ae)}dt(Et,Jt),Et.prototype.addClassification=function(o,d){return te(this,1,Nt,o,d),this};function Dt(){return[1,Ut,Nt,Tt]}var ae=[1];function pe(o){Jt.call(this,o)}dt(pe,Jt);function ge(){return[1,j,2,j,3,j,4,j,5,j]}function Ne(o){Jt.call(this,o,-1,y)}dt(Ne,Jt);function h(){return[1,Ut,pe,ge]}var y=[1];function G(o){Jt.call(this,o)}dt(G,Jt);function H(){return[1,j,2,j,3,j,4,j,5,j,6,rt]}var K=[[61,146],[146,91],[91,181],[181,84],[84,17],[17,314],[314,405],[405,321],[321,375],[375,291],[61,185],[185,40],[40,39],[39,37],[37,0],[0,267],[267,269],[269,270],[270,409],[409,291],[78,95],[95,88],[88,178],[178,87],[87,14],[14,317],[317,402],[402,318],[318,324],[324,308],[78,191],[191,80],[80,81],[81,82],[82,13],[13,312],[312,311],[311,310],[310,415],[415,308]],_=[[263,249],[249,390],[390,373],[373,374],[374,380],[380,381],[381,382],[382,362],[263,466],[466,388],[388,387],[387,386],[386,385],[385,384],[384,398],[398,362]],M=[[276,283],[283,282],[282,295],[295,285],[300,293],[293,334],[334,296],[296,336]],q=[[33,7],[7,163],[163,144],[144,145],[145,153],[153,154],[154,155],[155,133],[33,246],[246,161],[161,160],[160,159],[159,158],[158,157],[157,173],[173,133]],ct=[[46,53],[53,52],[52,65],[65,55],[70,63],[63,105],[105,66],[66,107]],s=[[10,338],[338,297],[297,332],[332,284],[284,251],[251,389],[389,356],[356,454],[454,323],[323,361],[361,288],[288,397],[397,365],[365,379],[379,378],[378,400],[400,377],[377,152],[152,148],[148,176],[176,149],[149,150],[150,136],[136,172],[172,58],[58,132],[132,93],[93,234],[234,127],[127,162],[162,21],[21,54],[54,103],[103,67],[67,109],[109,10]],X=[].concat(J(K),J(_),J(M),J(q),J(ct),J(s));function R(o,d,g){if(g=o.createShader(g===0?o.VERTEX_SHADER:o.FRAGMENT_SHADER),o.shaderSource(g,d),o.compileShader(g),!o.getShaderParameter(g,o.COMPILE_STATUS))throw Error(`Could not compile WebGL shader.
|
|
54
54
|
|
|
55
|
-
`+o.getShaderInfoLog(g));return g}function w(o){return Le(o,
|
|
55
|
+
`+o.getShaderInfoLog(g));return g}function w(o){return Le(o,Nt,1).map(function(d){return{index:se(d,1),ga:oe(d,2),label:fe(d,3)!=null?tt(d,3):void 0,displayName:fe(d,4)!=null?tt(d,4):void 0}})}function N(o){return{x:oe(o,1),y:oe(o,2),z:oe(o,3),visibility:fe(o,4)!=null?oe(o,4):void 0}}function A(o,d){this.h=o,this.g=d,this.l=0}function B(o,d,g){return nt(o,d),typeof o.g.canvas.transferToImageBitmap=="function"?Promise.resolve(o.g.canvas.transferToImageBitmap()):g?Promise.resolve(o.g.canvas):typeof createImageBitmap=="function"?createImageBitmap(o.g.canvas):(o.i===void 0&&(o.i=document.createElement("canvas")),new Promise(function(e){o.i.height=o.g.canvas.height,o.i.width=o.g.canvas.width,o.i.getContext("2d",{}).drawImage(o.g.canvas,0,0,o.g.canvas.width,o.g.canvas.height),e(o.i)}))}function nt(o,d){var g=o.g;if(o.o===void 0){var e=R(g,`
|
|
56
56
|
attribute vec2 aVertex;
|
|
57
57
|
attribute vec2 aTex;
|
|
58
58
|
varying vec2 vTex;
|
|
@@ -67,26 +67,26 @@
|
|
|
67
67
|
gl_FragColor = texture2D(sampler0, vTex);
|
|
68
68
|
}`,1),m=g.createProgram();if(g.attachShader(m,e),g.attachShader(m,u),g.linkProgram(m),!g.getProgramParameter(m,g.LINK_STATUS))throw Error(`Could not compile WebGL program.
|
|
69
69
|
|
|
70
|
-
`+g.getProgramInfoLog(m));e=o.o=m,g.useProgram(e),u=g.getUniformLocation(e,"sampler0"),o.j={K:g.getAttribLocation(e,"aVertex"),J:g.getAttribLocation(e,"aTex"),ma:u},o.u=g.createBuffer(),g.bindBuffer(g.ARRAY_BUFFER,o.u),g.enableVertexAttribArray(o.j.K),g.vertexAttribPointer(o.j.K,2,g.FLOAT,!1,0,0),g.bufferData(g.ARRAY_BUFFER,new Float32Array([-1,-1,-1,1,1,1,1,-1]),g.STATIC_DRAW),g.bindBuffer(g.ARRAY_BUFFER,null),o.s=g.createBuffer(),g.bindBuffer(g.ARRAY_BUFFER,o.s),g.enableVertexAttribArray(o.j.J),g.vertexAttribPointer(o.j.J,2,g.FLOAT,!1,0,0),g.bufferData(g.ARRAY_BUFFER,new Float32Array([0,1,0,0,1,0,1,1]),g.STATIC_DRAW),g.bindBuffer(g.ARRAY_BUFFER,null),g.uniform1i(u,0)}e=o.j,g.useProgram(o.o),g.canvas.width=d.width,g.canvas.height=d.height,g.viewport(0,0,d.width,d.height),g.activeTexture(g.TEXTURE0),o.h.bindTexture2d(d.glName),g.enableVertexAttribArray(e.K),g.bindBuffer(g.ARRAY_BUFFER,o.u),g.vertexAttribPointer(e.K,2,g.FLOAT,!1,0,0),g.enableVertexAttribArray(e.J),g.bindBuffer(g.ARRAY_BUFFER,o.s),g.vertexAttribPointer(e.J,2,g.FLOAT,!1,0,0),g.bindFramebuffer(g.DRAW_FRAMEBUFFER?g.DRAW_FRAMEBUFFER:g.FRAMEBUFFER,null),g.clearColor(0,0,0,0),g.clear(g.COLOR_BUFFER_BIT),g.colorMask(!0,!0,!0,!0),g.drawArrays(g.TRIANGLE_FAN,0,4),g.disableVertexAttribArray(e.K),g.disableVertexAttribArray(e.J),g.bindBuffer(g.ARRAY_BUFFER,null),o.h.bindTexture2d(0)}function $(o){this.g=o}var yt=new Uint8Array([0,97,115,109,1,0,0,0,1,4,1,96,0,0,3,2,1,0,10,9,1,7,0,65,0,253,15,26,11]);function Xt(o,d){return d+o}function Kt(o,d){window[o]=d}function It(o){var d=document.createElement("script");return d.setAttribute("src",o),d.setAttribute("crossorigin","anonymous"),new Promise(function(g){d.addEventListener("load",function(){g()},!1),d.addEventListener("error",function(){g()},!1),document.body.appendChild(d)})}function ht(){return Zt(function(o){switch(o.g){case 1:return o.o=2,O(o,WebAssembly.instantiate(yt),4);case 4:o.g=3,o.o=0;break;case 2:return o.o=0,o.j=null,o.return(!1);case 3:return o.return(!0)}})}function Wt(o){if(this.g=o,this.listeners={},this.j={},this.H={},this.o={},this.u={},this.I=this.s=this.Z=!0,this.D=Promise.resolve(),this.Y="",this.C={},this.locateFile=o&&o.locateFile||Xt,typeof window=="object")var d=window.location.pathname.toString().substring(0,window.location.pathname.toString().lastIndexOf("/"))+"/";else if(typeof location<"u")d=location.pathname.toString().substring(0,location.pathname.toString().lastIndexOf("/"))+"/";else throw Error("solutions can only be loaded on a web page or in a web worker");if(this.$=d,o.options){d=T(Object.keys(o.options));for(var g=d.next();!g.done;g=d.next()){g=g.value;var e=o.options[g].default;e!==void 0&&(this.j[g]=typeof e=="function"?e():e)}}}i=Wt.prototype,i.close=function(){return this.i&&this.i.delete(),Promise.resolve()};function xt(o){var d,g,e,u,m,t,c,a,b,S,L;return Zt(function(F){switch(F.g){case 1:return o.Z?(d=o.g.files===void 0?[]:typeof o.g.files=="function"?o.g.files(o.j):o.g.files,O(F,ht(),2)):F.return();case 2:if(g=F.h,typeof window=="object")return Kt("createMediapipeSolutionsWasm",{locateFile:o.locateFile}),Kt("createMediapipeSolutionsPackedAssets",{locateFile:o.locateFile}),t=d.filter(function(U){return U.data!==void 0}),c=d.filter(function(U){return U.data===void 0}),a=Promise.all(t.map(function(U){var z=l(o,U.url);if(U.path!==void 0){var Q=U.path;z=z.then(function(D){return o.overrideFile(Q,D),Promise.resolve(D)})}return z})),b=Promise.all(c.map(function(U){return U.simd===void 0||U.simd&&g||!U.simd&&!g?It(o.locateFile(U.url,o.$)):Promise.resolve()})).then(function(){var U,z,Q;return Zt(function(D){if(D.g==1)return U=window.createMediapipeSolutionsWasm,z=window.createMediapipeSolutionsPackedAssets,Q=o,O(D,U(z),2);Q.h=D.h,D.g=0})}),S=function(){return Zt(function(U){return o.g.graph&&o.g.graph.url?U=O(U,l(o,o.g.graph.url),0):(U.g=0,U=void 0),U})}(),O(F,Promise.all([b,a,S]),7);if(typeof importScripts!="function")throw Error("solutions can only be loaded on a web page or in a web worker");return e=d.filter(function(U){return U.simd===void 0||U.simd&&g||!U.simd&&!g}).map(function(U){return o.locateFile(U.url,o.$)}),importScripts.apply(null,J(e)),u=o,O(F,createMediapipeSolutionsWasm(Module),6);case 6:u.h=F.h,o.l=new OffscreenCanvas(1,1),o.h.canvas=o.l,m=o.h.GL.createContext(o.l,{antialias:!1,alpha:!1,ja:typeof WebGL2RenderingContext<"u"?2:1}),o.h.GL.makeContextCurrent(m),F.g=4;break;case 7:if(o.l=document.createElement("canvas"),L=o.l.getContext("webgl2",{}),!L&&(L=o.l.getContext("webgl",{}),!L))return alert("Failed to create WebGL canvas context when passing video frame."),F.return();o.G=L,o.h.canvas=o.l,o.h.createContext(o.l,!0,!0,{});case 4:o.i=new o.h.SolutionWasm,o.Z=!1,F.g=0}})}function wt(o){var d,g,e,u,m,t,c,a;return Zt(function(b){if(b.g==1){if(o.g.graph&&o.g.graph.url&&o.Y===o.g.graph.url)return b.return();if(o.s=!0,!o.g.graph||!o.g.graph.url){b.g=2;return}return o.Y=o.g.graph.url,O(b,l(o,o.g.graph.url),3)}for(b.g!=2&&(d=b.h,o.i.loadGraph(d)),g=T(Object.keys(o.C)),e=g.next();!e.done;e=g.next())u=e.value,o.i.overrideFile(u,o.C[u]);if(o.C={},o.g.listeners)for(m=T(o.g.listeners),t=m.next();!t.done;t=m.next())c=t.value,Y(o,c);a=o.j,o.j={},o.setOptions(a),b.g=0})}i.reset=function(){var o=this;return Zt(function(d){o.i&&(o.i.reset(),o.o={},o.u={}),d.g=0})},i.setOptions=function(o,d){var g=this;if(d=d||this.g.options){for(var e=[],u=[],m={},t=T(Object.keys(o)),c=t.next();!c.done;m={R:m.R,S:m.S},c=t.next()){var a=c.value;a in this.j&&this.j[a]===o[a]||(this.j[a]=o[a],c=d[a],c!==void 0&&(c.onChange&&(m.R=c.onChange,m.S=o[a],e.push(function(b){return function(){var S;return Zt(function(L){if(L.g==1)return O(L,b.R(b.S),2);S=L.h,S===!0&&(g.s=!0),L.g=0})}}(m))),c.graphOptionXref&&(a={valueNumber:c.type===1?o[a]:0,valueBoolean:c.type===0?o[a]:!1,valueString:c.type===2?o[a]:""},c=Object.assign(Object.assign(Object.assign({},{calculatorName:"",calculatorIndex:0}),c.graphOptionXref),a),u.push(c))))}(e.length!==0||u.length!==0)&&(this.s=!0,this.B=(this.B===void 0?[]:this.B).concat(u),this.A=(this.A===void 0?[]:this.A).concat(e))}};function Ht(o){var d,g,e,u,m,t,c;return Zt(function(a){switch(a.g){case 1:if(!o.s)return a.return();if(!o.A){a.g=2;break}d=T(o.A),g=d.next();case 3:if(g.done){a.g=5;break}return e=g.value,O(a,e(),4);case 4:g=d.next(),a.g=3;break;case 5:o.A=void 0;case 2:if(o.B){for(u=new o.h.GraphOptionChangeRequestList,m=T(o.B),t=m.next();!t.done;t=m.next())c=t.value,u.push_back(c);o.i.changeOptions(u),u.delete(),o.B=void 0}o.s=!1,a.g=0}})}i.initialize=function(){var o=this;return Zt(function(d){return d.g==1?O(d,xt(o),2):d.g!=3?O(d,wt(o),3):O(d,Ht(o),0)})};function l(o,d){var g,e;return Zt(function(u){return d in o.H?u.return(o.H[d]):(g=o.locateFile(d,""),e=fetch(g).then(function(m){return m.arrayBuffer()}),o.H[d]=e,u.return(e))})}i.overrideFile=function(o,d){this.i?this.i.overrideFile(o,d):this.C[o]=d},i.clearOverriddenFiles=function(){this.C={},this.i&&this.i.clearOverriddenFiles()},i.send=function(o,d){var g=this,e,u,m,t,c,a,b,S,L;return Zt(function(F){switch(F.g){case 1:return g.g.inputs?(e=1e3*(d==null?performance.now():d),O(F,g.D,2)):F.return();case 2:return O(F,g.initialize(),3);case 3:for(u=new g.h.PacketDataList,m=T(Object.keys(o)),t=m.next();!t.done;t=m.next())if(c=t.value,a=g.g.inputs[c]){t:{var U=o[c];switch(a.type){case"video":var z=g.o[a.stream];if(z||(z=new A(g.h,g.G),g.o[a.stream]=z),z.l===0&&(z.l=z.h.createTexture()),typeof HTMLVideoElement<"u"&&U instanceof HTMLVideoElement)var Q=U.videoWidth,D=U.videoHeight;else typeof HTMLImageElement<"u"&&U instanceof HTMLImageElement?(Q=U.naturalWidth,D=U.naturalHeight):(Q=U.width,D=U.height);D={glName:z.l,width:Q,height:D},Q=z.g,Q.canvas.width=D.width,Q.canvas.height=D.height,Q.activeTexture(Q.TEXTURE0),z.h.bindTexture2d(z.l),Q.texImage2D(Q.TEXTURE_2D,0,Q.RGBA,Q.RGBA,Q.UNSIGNED_BYTE,U),z.h.bindTexture2d(0),z=D;break t;case"detections":for(z=g.o[a.stream],z||(z=new $(g.h),g.o[a.stream]=z),z.data||(z.data=new z.g.DetectionListData),z.data.reset(U.length),D=0;D<U.length;++D){Q=U[D];var st=z.data,ft=st.setBoundingBox,mt=D,Gt=Q.boundingBox,vt=new G;if(Ft(vt,1,Gt.xCenter),Ft(vt,2,Gt.yCenter),Ft(vt,3,Gt.height),Ft(vt,4,Gt.width),Ft(vt,5,Gt.rotation),Ft(vt,6,Gt.rectId),Gt=P(vt,C),ft.call(st,mt,Gt),Q.landmarks)for(st=0;st<Q.landmarks.length;++st){vt=Q.landmarks[st];var At=!!vt.visibility;ft=z.data,mt=ft.addNormalizedLandmark,Gt=D,vt=Object.assign(Object.assign({},vt),{visibility:At?vt.visibility:0}),At=new pe,Ft(At,1,vt.x),Ft(At,2,vt.y),Ft(At,3,vt.z),vt.visibility&&Ft(At,4,vt.visibility),vt=P(At,ge),mt.call(ft,Gt,vt)}if(Q.V)for(st=0;st<Q.V.length;++st)ft=z.data,mt=ft.addClassification,Gt=D,vt=Q.V[st],At=new kt,Ft(At,2,vt.ga),vt.index&&Ft(At,1,vt.index),vt.label&&Ft(At,3,vt.label),vt.displayName&&Ft(At,4,vt.displayName),vt=P(At,Tt),mt.call(ft,Gt,vt)}z=z.data;break t;default:z={}}}switch(b=z,S=a.stream,a.type){case"video":u.pushTexture2d(Object.assign(Object.assign({},b),{stream:S,timestamp:e}));break;case"detections":L=b,L.stream=S,L.timestamp=e,u.pushDetectionList(L);break;default:throw Error("Unknown input config type: '"+a.type+"'")}}return g.i.send(u),O(F,g.D,4);case 4:u.delete(),F.g=0}})};function v(o,d,g){var e,u,m,t,c,a,b,S,L,F,U,z,Q,D;return Zt(function(st){switch(st.g){case 1:if(!g)return st.return(d);for(e={},u=0,m=T(Object.keys(g)),t=m.next();!t.done;t=m.next())c=t.value,a=g[c],typeof a!="string"&&a.type==="texture"&&d[a.stream]!==void 0&&++u;1<u&&(o.I=!1),b=T(Object.keys(g)),t=b.next();case 2:if(t.done){st.g=4;break}if(S=t.value,L=g[S],typeof L=="string")return Q=e,D=S,O(st,I(o,S,d[L]),14);if(F=d[L.stream],L.type==="detection_list"){if(F){for(var ft=F.getRectList(),mt=F.getLandmarksList(),Gt=F.getClassificationsList(),vt=[],At=0;At<ft.size();++At){var le=V(ft.get(At),G,C);le={boundingBox:{xCenter:oe(le,1),yCenter:oe(le,2),height:oe(le,3),width:oe(le,4),rotation:oe(le,5,0),rectId:se(le,6)},landmarks:Le(V(mt.get(At),ke,h),pe,1).map(k),V:w(V(Gt.get(At),Et,Dt))},vt.push(le)}ft=vt}else ft=[];e[S]=ft,st.g=7;break}if(L.type==="proto_list"){if(F){for(ft=Array(F.size()),mt=0;mt<F.size();mt++)ft[mt]=F.get(mt);F.delete()}else ft=[];e[S]=ft,st.g=7;break}if(F===void 0){st.g=3;break}if(L.type==="float_list"){e[S]=F,st.g=7;break}if(L.type==="proto"){e[S]=F,st.g=7;break}if(L.type!=="texture")throw Error("Unknown output config type: '"+L.type+"'");return U=o.u[S],U||(U=new A(o.h,o.G),o.u[S]=U),O(st,B(U,F,o.I),13);case 13:z=st.h,e[S]=z;case 7:L.transform&&e[S]&&(e[S]=L.transform(e[S])),st.g=3;break;case 14:Q[D]=st.h;case 3:t=b.next(),st.g=2;break;case 4:return st.return(e)}})}function I(o,d,g){var e;return Zt(function(u){return typeof g=="number"||g instanceof Uint8Array||g instanceof o.h.Uint8BlobList?u.return(g):g instanceof o.h.Texture2dDataOut?(e=o.u[d],e||(e=new A(o.h,o.G),o.u[d]=e),u.return(B(e,g,o.I))):u.return(void 0)})}function Y(o,d){for(var g=d.name||"$",e=[].concat(J(d.wants)),u=new o.h.StringList,m=T(d.wants),t=m.next();!t.done;t=m.next())u.push_back(t.value);m=o.h.PacketListener.implement({onResults:function(c){for(var a={},b=0;b<d.wants.length;++b)a[e[b]]=c.get(b);var S=o.listeners[g];S&&(o.D=v(o,a,d.outs).then(function(L){L=S(L);for(var F=0;F<d.wants.length;++F){var U=a[e[F]];typeof U=="object"&&U.hasOwnProperty&&U.hasOwnProperty("delete")&&U.delete()}L&&(o.D=L)}))}}),o.i.attachMultiListener(u,m),u.delete()}i.onResults=function(o,d){this.listeners[d||"$"]=o},Ct("Solution",Wt),Ct("OptionType",{BOOL:0,NUMBER:1,ia:2,0:"BOOL",1:"NUMBER",2:"STRING"});function N(o){var d=this;o=o||{};var g={url:"face_detection_short.binarypb"},e={type:1,graphOptionXref:{calculatorType:"TensorsToDetectionsCalculator",calculatorName:"facedetectionshortrangegpu__facedetectionshortrangecommon__TensorsToDetectionsCalculator",fieldName:"min_score_thresh"}};this.g=new Wt({locateFile:o.locateFile,files:[{data:!0,url:"face_detection_short.binarypb"},{data:!0,url:"face_detection_short_range.tflite"},{simd:!0,url:"face_detection_solution_simd_wasm_bin.js"},{simd:!1,url:"face_detection_solution_wasm_bin.js"}],graph:g,listeners:[{wants:["detections","image_transformed"],outs:{image:"image_transformed",detections:{type:"detection_list",stream:"detections"}}}],inputs:{image:{type:"video",stream:"input_frames_gpu"}},options:{useCpuInference:{type:0,graphOptionXref:{calculatorType:"InferenceCalculator",fieldName:"use_cpu_inference"},default:typeof window!="object"||window.navigator===void 0?!1:"iPad Simulator;iPhone Simulator;iPod Simulator;iPad;iPhone;iPod".split(";").includes(navigator.platform)||navigator.userAgent.includes("Mac")&&"ontouchend"in document},selfieMode:{type:0,graphOptionXref:{calculatorType:"GlScalerCalculator",calculatorIndex:1,fieldName:"flip_horizontal"}},model:{type:0,onChange:function(u){var m,t,c,a,b,S;return Zt(function(L){switch(L.g){case 1:m=u==="short"?["face_detection_short_range.tflite"]:["face_detection_full_range_sparse.tflite"],t=T(m),c=t.next();case 2:if(c.done){L.g=4;break}return a=c.value,b="third_party/mediapipe/modules/face_detection/"+a,O(L,l(d.g,a),5);case 5:S=L.h,d.g.overrideFile(b,S),c=t.next(),L.g=2;break;case 4:return g.url=u==="short"?"face_detection_short.binarypb":"face_detection_full.binarypb",e.graphOptionXref.calculatorName=u==="short"?"facedetectionshortrangegpu__facedetectionshortrangecommon__TensorsToDetectionsCalculator":"facedetectionfullrangegpu__facedetectionfullrangecommon__TensorsToDetectionsCalculator",L.return(!0)}})}},minDetectionConfidence:e}})}i=N.prototype,i.close=function(){return this.g.close(),Promise.resolve()},i.onResults=function(o){this.g.onResults(o)},i.initialize=function(){var o=this;return Zt(function(d){return O(d,o.g.initialize(),0)})},i.reset=function(){this.g.reset()},i.send=function(o){var d=this;return Zt(function(g){return O(g,d.g.send(o),0)})},i.setOptions=function(o){this.g.setOptions(o)},Ct("FaceDetection",N),Ct("FACEDETECTION_LIPS",K),Ct("FACEDETECTION_LEFT_EYE",_),Ct("FACEDETECTION_LEFT_EYEBROW",M),Ct("FACEDETECTION_RIGHT_EYE",q),Ct("FACEDETECTION_RIGHT_EYEBROW",ct),Ct("FACEDETECTION_FACE_OVAL",s),Ct("FACEDETECTION_CONTOURS",X),Ct("FACEDETECTION_TESSELATION",[[127,34],[34,139],[139,127],[11,0],[0,37],[37,11],[232,231],[231,120],[120,232],[72,37],[37,39],[39,72],[128,121],[121,47],[47,128],[232,121],[121,128],[128,232],[104,69],[69,67],[67,104],[175,171],[171,148],[148,175],[118,50],[50,101],[101,118],[73,39],[39,40],[40,73],[9,151],[151,108],[108,9],[48,115],[115,131],[131,48],[194,204],[204,211],[211,194],[74,40],[40,185],[185,74],[80,42],[42,183],[183,80],[40,92],[92,186],[186,40],[230,229],[229,118],[118,230],[202,212],[212,214],[214,202],[83,18],[18,17],[17,83],[76,61],[61,146],[146,76],[160,29],[29,30],[30,160],[56,157],[157,173],[173,56],[106,204],[204,194],[194,106],[135,214],[214,192],[192,135],[203,165],[165,98],[98,203],[21,71],[71,68],[68,21],[51,45],[45,4],[4,51],[144,24],[24,23],[23,144],[77,146],[146,91],[91,77],[205,50],[50,187],[187,205],[201,200],[200,18],[18,201],[91,106],[106,182],[182,91],[90,91],[91,181],[181,90],[85,84],[84,17],[17,85],[206,203],[203,36],[36,206],[148,171],[171,140],[140,148],[92,40],[40,39],[39,92],[193,189],[189,244],[244,193],[159,158],[158,28],[28,159],[247,246],[246,161],[161,247],[236,3],[3,196],[196,236],[54,68],[68,104],[104,54],[193,168],[168,8],[8,193],[117,228],[228,31],[31,117],[189,193],[193,55],[55,189],[98,97],[97,99],[99,98],[126,47],[47,100],[100,126],[166,79],[79,218],[218,166],[155,154],[154,26],[26,155],[209,49],[49,131],[131,209],[135,136],[136,150],[150,135],[47,126],[126,217],[217,47],[223,52],[52,53],[53,223],[45,51],[51,134],[134,45],[211,170],[170,140],[140,211],[67,69],[69,108],[108,67],[43,106],[106,91],[91,43],[230,119],[119,120],[120,230],[226,130],[130,247],[247,226],[63,53],[53,52],[52,63],[238,20],[20,242],[242,238],[46,70],[70,156],[156,46],[78,62],[62,96],[96,78],[46,53],[53,63],[63,46],[143,34],[34,227],[227,143],[123,117],[117,111],[111,123],[44,125],[125,19],[19,44],[236,134],[134,51],[51,236],[216,206],[206,205],[205,216],[154,153],[153,22],[22,154],[39,37],[37,167],[167,39],[200,201],[201,208],[208,200],[36,142],[142,100],[100,36],[57,212],[212,202],[202,57],[20,60],[60,99],[99,20],[28,158],[158,157],[157,28],[35,226],[226,113],[113,35],[160,159],[159,27],[27,160],[204,202],[202,210],[210,204],[113,225],[225,46],[46,113],[43,202],[202,204],[204,43],[62,76],[76,77],[77,62],[137,123],[123,116],[116,137],[41,38],[38,72],[72,41],[203,129],[129,142],[142,203],[64,98],[98,240],[240,64],[49,102],[102,64],[64,49],[41,73],[73,74],[74,41],[212,216],[216,207],[207,212],[42,74],[74,184],[184,42],[169,170],[170,211],[211,169],[170,149],[149,176],[176,170],[105,66],[66,69],[69,105],[122,6],[6,168],[168,122],[123,147],[147,187],[187,123],[96,77],[77,90],[90,96],[65,55],[55,107],[107,65],[89,90],[90,180],[180,89],[101,100],[100,120],[120,101],[63,105],[105,104],[104,63],[93,137],[137,227],[227,93],[15,86],[86,85],[85,15],[129,102],[102,49],[49,129],[14,87],[87,86],[86,14],[55,8],[8,9],[9,55],[100,47],[47,121],[121,100],[145,23],[23,22],[22,145],[88,89],[89,179],[179,88],[6,122],[122,196],[196,6],[88,95],[95,96],[96,88],[138,172],[172,136],[136,138],[215,58],[58,172],[172,215],[115,48],[48,219],[219,115],[42,80],[80,81],[81,42],[195,3],[3,51],[51,195],[43,146],[146,61],[61,43],[171,175],[175,199],[199,171],[81,82],[82,38],[38,81],[53,46],[46,225],[225,53],[144,163],[163,110],[110,144],[52,65],[65,66],[66,52],[229,228],[228,117],[117,229],[34,127],[127,234],[234,34],[107,108],[108,69],[69,107],[109,108],[108,151],[151,109],[48,64],[64,235],[235,48],[62,78],[78,191],[191,62],[129,209],[209,126],[126,129],[111,35],[35,143],[143,111],[117,123],[123,50],[50,117],[222,65],[65,52],[52,222],[19,125],[125,141],[141,19],[221,55],[55,65],[65,221],[3,195],[195,197],[197,3],[25,7],[7,33],[33,25],[220,237],[237,44],[44,220],[70,71],[71,139],[139,70],[122,193],[193,245],[245,122],[247,130],[130,33],[33,247],[71,21],[21,162],[162,71],[170,169],[169,150],[150,170],[188,174],[174,196],[196,188],[216,186],[186,92],[92,216],[2,97],[97,167],[167,2],[141,125],[125,241],[241,141],[164,167],[167,37],[37,164],[72,38],[38,12],[12,72],[38,82],[82,13],[13,38],[63,68],[68,71],[71,63],[226,35],[35,111],[111,226],[101,50],[50,205],[205,101],[206,92],[92,165],[165,206],[209,198],[198,217],[217,209],[165,167],[167,97],[97,165],[220,115],[115,218],[218,220],[133,112],[112,243],[243,133],[239,238],[238,241],[241,239],[214,135],[135,169],[169,214],[190,173],[173,133],[133,190],[171,208],[208,32],[32,171],[125,44],[44,237],[237,125],[86,87],[87,178],[178,86],[85,86],[86,179],[179,85],[84,85],[85,180],[180,84],[83,84],[84,181],[181,83],[201,83],[83,182],[182,201],[137,93],[93,132],[132,137],[76,62],[62,183],[183,76],[61,76],[76,184],[184,61],[57,61],[61,185],[185,57],[212,57],[57,186],[186,212],[214,207],[207,187],[187,214],[34,143],[143,156],[156,34],[79,239],[239,237],[237,79],[123,137],[137,177],[177,123],[44,1],[1,4],[4,44],[201,194],[194,32],[32,201],[64,102],[102,129],[129,64],[213,215],[215,138],[138,213],[59,166],[166,219],[219,59],[242,99],[99,97],[97,242],[2,94],[94,141],[141,2],[75,59],[59,235],[235,75],[24,110],[110,228],[228,24],[25,130],[130,226],[226,25],[23,24],[24,229],[229,23],[22,23],[23,230],[230,22],[26,22],[22,231],[231,26],[112,26],[26,232],[232,112],[189,190],[190,243],[243,189],[221,56],[56,190],[190,221],[28,56],[56,221],[221,28],[27,28],[28,222],[222,27],[29,27],[27,223],[223,29],[30,29],[29,224],[224,30],[247,30],[30,225],[225,247],[238,79],[79,20],[20,238],[166,59],[59,75],[75,166],[60,75],[75,240],[240,60],[147,177],[177,215],[215,147],[20,79],[79,166],[166,20],[187,147],[147,213],[213,187],[112,233],[233,244],[244,112],[233,128],[128,245],[245,233],[128,114],[114,188],[188,128],[114,217],[217,174],[174,114],[131,115],[115,220],[220,131],[217,198],[198,236],[236,217],[198,131],[131,134],[134,198],[177,132],[132,58],[58,177],[143,35],[35,124],[124,143],[110,163],[163,7],[7,110],[228,110],[110,25],[25,228],[356,389],[389,368],[368,356],[11,302],[302,267],[267,11],[452,350],[350,349],[349,452],[302,303],[303,269],[269,302],[357,343],[343,277],[277,357],[452,453],[453,357],[357,452],[333,332],[332,297],[297,333],[175,152],[152,377],[377,175],[347,348],[348,330],[330,347],[303,304],[304,270],[270,303],[9,336],[336,337],[337,9],[278,279],[279,360],[360,278],[418,262],[262,431],[431,418],[304,408],[408,409],[409,304],[310,415],[415,407],[407,310],[270,409],[409,410],[410,270],[450,348],[348,347],[347,450],[422,430],[430,434],[434,422],[313,314],[314,17],[17,313],[306,307],[307,375],[375,306],[387,388],[388,260],[260,387],[286,414],[414,398],[398,286],[335,406],[406,418],[418,335],[364,367],[367,416],[416,364],[423,358],[358,327],[327,423],[251,284],[284,298],[298,251],[281,5],[5,4],[4,281],[373,374],[374,253],[253,373],[307,320],[320,321],[321,307],[425,427],[427,411],[411,425],[421,313],[313,18],[18,421],[321,405],[405,406],[406,321],[320,404],[404,405],[405,320],[315,16],[16,17],[17,315],[426,425],[425,266],[266,426],[377,400],[400,369],[369,377],[322,391],[391,269],[269,322],[417,465],[465,464],[464,417],[386,257],[257,258],[258,386],[466,260],[260,388],[388,466],[456,399],[399,419],[419,456],[284,332],[332,333],[333,284],[417,285],[285,8],[8,417],[346,340],[340,261],[261,346],[413,441],[441,285],[285,413],[327,460],[460,328],[328,327],[355,371],[371,329],[329,355],[392,439],[439,438],[438,392],[382,341],[341,256],[256,382],[429,420],[420,360],[360,429],[364,394],[394,379],[379,364],[277,343],[343,437],[437,277],[443,444],[444,283],[283,443],[275,440],[440,363],[363,275],[431,262],[262,369],[369,431],[297,338],[338,337],[337,297],[273,375],[375,321],[321,273],[450,451],[451,349],[349,450],[446,342],[342,467],[467,446],[293,334],[334,282],[282,293],[458,461],[461,462],[462,458],[276,353],[353,383],[383,276],[308,324],[324,325],[325,308],[276,300],[300,293],[293,276],[372,345],[345,447],[447,372],[352,345],[345,340],[340,352],[274,1],[1,19],[19,274],[456,248],[248,281],[281,456],[436,427],[427,425],[425,436],[381,256],[256,252],[252,381],[269,391],[391,393],[393,269],[200,199],[199,428],[428,200],[266,330],[330,329],[329,266],[287,273],[273,422],[422,287],[250,462],[462,328],[328,250],[258,286],[286,384],[384,258],[265,353],[353,342],[342,265],[387,259],[259,257],[257,387],[424,431],[431,430],[430,424],[342,353],[353,276],[276,342],[273,335],[335,424],[424,273],[292,325],[325,307],[307,292],[366,447],[447,345],[345,366],[271,303],[303,302],[302,271],[423,266],[266,371],[371,423],[294,455],[455,460],[460,294],[279,278],[278,294],[294,279],[271,272],[272,304],[304,271],[432,434],[434,427],[427,432],[272,407],[407,408],[408,272],[394,430],[430,431],[431,394],[395,369],[369,400],[400,395],[334,333],[333,299],[299,334],[351,417],[417,168],[168,351],[352,280],[280,411],[411,352],[325,319],[319,320],[320,325],[295,296],[296,336],[336,295],[319,403],[403,404],[404,319],[330,348],[348,349],[349,330],[293,298],[298,333],[333,293],[323,454],[454,447],[447,323],[15,16],[16,315],[315,15],[358,429],[429,279],[279,358],[14,15],[15,316],[316,14],[285,336],[336,9],[9,285],[329,349],[349,350],[350,329],[374,380],[380,252],[252,374],[318,402],[402,403],[403,318],[6,197],[197,419],[419,6],[318,319],[319,325],[325,318],[367,364],[364,365],[365,367],[435,367],[367,397],[397,435],[344,438],[438,439],[439,344],[272,271],[271,311],[311,272],[195,5],[5,281],[281,195],[273,287],[287,291],[291,273],[396,428],[428,199],[199,396],[311,271],[271,268],[268,311],[283,444],[444,445],[445,283],[373,254],[254,339],[339,373],[282,334],[334,296],[296,282],[449,347],[347,346],[346,449],[264,447],[447,454],[454,264],[336,296],[296,299],[299,336],[338,10],[10,151],[151,338],[278,439],[439,455],[455,278],[292,407],[407,415],[415,292],[358,371],[371,355],[355,358],[340,345],[345,372],[372,340],[346,347],[347,280],[280,346],[442,443],[443,282],[282,442],[19,94],[94,370],[370,19],[441,442],[442,295],[295,441],[248,419],[419,197],[197,248],[263,255],[255,359],[359,263],[440,275],[275,274],[274,440],[300,383],[383,368],[368,300],[351,412],[412,465],[465,351],[263,467],[467,466],[466,263],[301,368],[368,389],[389,301],[395,378],[378,379],[379,395],[412,351],[351,419],[419,412],[436,426],[426,322],[322,436],[2,164],[164,393],[393,2],[370,462],[462,461],[461,370],[164,0],[0,267],[267,164],[302,11],[11,12],[12,302],[268,12],[12,13],[13,268],[293,300],[300,301],[301,293],[446,261],[261,340],[340,446],[330,266],[266,425],[425,330],[426,423],[423,391],[391,426],[429,355],[355,437],[437,429],[391,327],[327,326],[326,391],[440,457],[457,438],[438,440],[341,382],[382,362],[362,341],[459,457],[457,461],[461,459],[434,430],[430,394],[394,434],[414,463],[463,362],[362,414],[396,369],[369,262],[262,396],[354,461],[461,457],[457,354],[316,403],[403,402],[402,316],[315,404],[404,403],[403,315],[314,405],[405,404],[404,314],[313,406],[406,405],[405,313],[421,418],[418,406],[406,421],[366,401],[401,361],[361,366],[306,408],[408,407],[407,306],[291,409],[409,408],[408,291],[287,410],[410,409],[409,287],[432,436],[436,410],[410,432],[434,416],[416,411],[411,434],[264,368],[368,383],[383,264],[309,438],[438,457],[457,309],[352,376],[376,401],[401,352],[274,275],[275,4],[4,274],[421,428],[428,262],[262,421],[294,327],[327,358],[358,294],[433,416],[416,367],[367,433],[289,455],[455,439],[439,289],[462,370],[370,326],[326,462],[2,326],[326,370],[370,2],[305,460],[460,455],[455,305],[254,449],[449,448],[448,254],[255,261],[261,446],[446,255],[253,450],[450,449],[449,253],[252,451],[451,450],[450,252],[256,452],[452,451],[451,256],[341,453],[453,452],[452,341],[413,464],[464,463],[463,413],[441,413],[413,414],[414,441],[258,442],[442,441],[441,258],[257,443],[443,442],[442,257],[259,444],[444,443],[443,259],[260,445],[445,444],[444,260],[467,342],[342,445],[445,467],[459,458],[458,250],[250,459],[289,392],[392,290],[290,289],[290,328],[328,460],[460,290],[376,433],[433,435],[435,376],[250,290],[290,392],[392,250],[411,416],[416,433],[433,411],[341,463],[463,464],[464,341],[453,464],[464,465],[465,453],[357,465],[465,412],[412,357],[343,412],[412,399],[399,343],[360,363],[363,440],[440,360],[437,399],[399,456],[456,437],[420,456],[456,363],[363,420],[401,435],[435,288],[288,401],[372,383],[383,353],[353,372],[339,255],[255,249],[249,339],[448,261],[261,255],[255,448],[133,243],[243,190],[190,133],[133,155],[155,112],[112,133],[33,246],[246,247],[247,33],[33,130],[130,25],[25,33],[398,384],[384,286],[286,398],[362,398],[398,414],[414,362],[362,463],[463,341],[341,362],[263,359],[359,467],[467,263],[263,249],[249,255],[255,263],[466,467],[467,260],[260,466],[75,60],[60,166],[166,75],[238,239],[239,79],[79,238],[162,127],[127,139],[139,162],[72,11],[11,37],[37,72],[121,232],[232,120],[120,121],[73,72],[72,39],[39,73],[114,128],[128,47],[47,114],[233,232],[232,128],[128,233],[103,104],[104,67],[67,103],[152,175],[175,148],[148,152],[119,118],[118,101],[101,119],[74,73],[73,40],[40,74],[107,9],[9,108],[108,107],[49,48],[48,131],[131,49],[32,194],[194,211],[211,32],[184,74],[74,185],[185,184],[191,80],[80,183],[183,191],[185,40],[40,186],[186,185],[119,230],[230,118],[118,119],[210,202],[202,214],[214,210],[84,83],[83,17],[17,84],[77,76],[76,146],[146,77],[161,160],[160,30],[30,161],[190,56],[56,173],[173,190],[182,106],[106,194],[194,182],[138,135],[135,192],[192,138],[129,203],[203,98],[98,129],[54,21],[21,68],[68,54],[5,51],[51,4],[4,5],[145,144],[144,23],[23,145],[90,77],[77,91],[91,90],[207,205],[205,187],[187,207],[83,201],[201,18],[18,83],[181,91],[91,182],[182,181],[180,90],[90,181],[181,180],[16,85],[85,17],[17,16],[205,206],[206,36],[36,205],[176,148],[148,140],[140,176],[165,92],[92,39],[39,165],[245,193],[193,244],[244,245],[27,159],[159,28],[28,27],[30,247],[247,161],[161,30],[174,236],[236,196],[196,174],[103,54],[54,104],[104,103],[55,193],[193,8],[8,55],[111,117],[117,31],[31,111],[221,189],[189,55],[55,221],[240,98],[98,99],[99,240],[142,126],[126,100],[100,142],[219,166],[166,218],[218,219],[112,155],[155,26],[26,112],[198,209],[209,131],[131,198],[169,135],[135,150],[150,169],[114,47],[47,217],[217,114],[224,223],[223,53],[53,224],[220,45],[45,134],[134,220],[32,211],[211,140],[140,32],[109,67],[67,108],[108,109],[146,43],[43,91],[91,146],[231,230],[230,120],[120,231],[113,226],[226,247],[247,113],[105,63],[63,52],[52,105],[241,238],[238,242],[242,241],[124,46],[46,156],[156,124],[95,78],[78,96],[96,95],[70,46],[46,63],[63,70],[116,143],[143,227],[227,116],[116,123],[123,111],[111,116],[1,44],[44,19],[19,1],[3,236],[236,51],[51,3],[207,216],[216,205],[205,207],[26,154],[154,22],[22,26],[165,39],[39,167],[167,165],[199,200],[200,208],[208,199],[101,36],[36,100],[100,101],[43,57],[57,202],[202,43],[242,20],[20,99],[99,242],[56,28],[28,157],[157,56],[124,35],[35,113],[113,124],[29,160],[160,27],[27,29],[211,204],[204,210],[210,211],[124,113],[113,46],[46,124],[106,43],[43,204],[204,106],[96,62],[62,77],[77,96],[227,137],[137,116],[116,227],[73,41],[41,72],[72,73],[36,203],[203,142],[142,36],[235,64],[64,240],[240,235],[48,49],[49,64],[64,48],[42,41],[41,74],[74,42],[214,212],[212,207],[207,214],[183,42],[42,184],[184,183],[210,169],[169,211],[211,210],[140,170],[170,176],[176,140],[104,105],[105,69],[69,104],[193,122],[122,168],[168,193],[50,123],[123,187],[187,50],[89,96],[96,90],[90,89],[66,65],[65,107],[107,66],[179,89],[89,180],[180,179],[119,101],[101,120],[120,119],[68,63],[63,104],[104,68],[234,93],[93,227],[227,234],[16,15],[15,85],[85,16],[209,129],[129,49],[49,209],[15,14],[14,86],[86,15],[107,55],[55,9],[9,107],[120,100],[100,121],[121,120],[153,145],[145,22],[22,153],[178,88],[88,179],[179,178],[197,6],[6,196],[196,197],[89,88],[88,96],[96,89],[135,138],[138,136],[136,135],[138,215],[215,172],[172,138],[218,115],[115,219],[219,218],[41,42],[42,81],[81,41],[5,195],[195,51],[51,5],[57,43],[43,61],[61,57],[208,171],[171,199],[199,208],[41,81],[81,38],[38,41],[224,53],[53,225],[225,224],[24,144],[144,110],[110,24],[105,52],[52,66],[66,105],[118,229],[229,117],[117,118],[227,34],[34,234],[234,227],[66,107],[107,69],[69,66],[10,109],[109,151],[151,10],[219,48],[48,235],[235,219],[183,62],[62,191],[191,183],[142,129],[129,126],[126,142],[116,111],[111,143],[143,116],[118,117],[117,50],[50,118],[223,222],[222,52],[52,223],[94,19],[19,141],[141,94],[222,221],[221,65],[65,222],[196,3],[3,197],[197,196],[45,220],[220,44],[44,45],[156,70],[70,139],[139,156],[188,122],[122,245],[245,188],[139,71],[71,162],[162,139],[149,170],[170,150],[150,149],[122,188],[188,196],[196,122],[206,216],[216,92],[92,206],[164,2],[2,167],[167,164],[242,141],[141,241],[241,242],[0,164],[164,37],[37,0],[11,72],[72,12],[12,11],[12,38],[38,13],[13,12],[70,63],[63,71],[71,70],[31,226],[226,111],[111,31],[36,101],[101,205],[205,36],[203,206],[206,165],[165,203],[126,209],[209,217],[217,126],[98,165],[165,97],[97,98],[237,220],[220,218],[218,237],[237,239],[239,241],[241,237],[210,214],[214,169],[169,210],[140,171],[171,32],[32,140],[241,125],[125,237],[237,241],[179,86],[86,178],[178,179],[180,85],[85,179],[179,180],[181,84],[84,180],[180,181],[182,83],[83,181],[181,182],[194,201],[201,182],[182,194],[177,137],[137,132],[132,177],[184,76],[76,183],[183,184],[185,61],[61,184],[184,185],[186,57],[57,185],[185,186],[216,212],[212,186],[186,216],[192,214],[214,187],[187,192],[139,34],[34,156],[156,139],[218,79],[79,237],[237,218],[147,123],[123,177],[177,147],[45,44],[44,4],[4,45],[208,201],[201,32],[32,208],[98,64],[64,129],[129,98],[192,213],[213,138],[138,192],[235,59],[59,219],[219,235],[141,242],[242,97],[97,141],[97,2],[2,141],[141,97],[240,75],[75,235],[235,240],[229,24],[24,228],[228,229],[31,25],[25,226],[226,31],[230,23],[23,229],[229,230],[231,22],[22,230],[230,231],[232,26],[26,231],[231,232],[233,112],[112,232],[232,233],[244,189],[189,243],[243,244],[189,221],[221,190],[190,189],[222,28],[28,221],[221,222],[223,27],[27,222],[222,223],[224,29],[29,223],[223,224],[225,30],[30,224],[224,225],[113,247],[247,225],[225,113],[99,60],[60,240],[240,99],[213,147],[147,215],[215,213],[60,20],[20,166],[166,60],[192,187],[187,213],[213,192],[243,112],[112,244],[244,243],[244,233],[233,245],[245,244],[245,128],[128,188],[188,245],[188,114],[114,174],[174,188],[134,131],[131,220],[220,134],[174,217],[217,236],[236,174],[236,198],[198,134],[134,236],[215,177],[177,58],[58,215],[156,143],[143,124],[124,156],[25,110],[110,7],[7,25],[31,228],[228,25],[25,31],[264,356],[356,368],[368,264],[0,11],[11,267],[267,0],[451,452],[452,349],[349,451],[267,302],[302,269],[269,267],[350,357],[357,277],[277,350],[350,452],[452,357],[357,350],[299,333],[333,297],[297,299],[396,175],[175,377],[377,396],[280,347],[347,330],[330,280],[269,303],[303,270],[270,269],[151,9],[9,337],[337,151],[344,278],[278,360],[360,344],[424,418],[418,431],[431,424],[270,304],[304,409],[409,270],[272,310],[310,407],[407,272],[322,270],[270,410],[410,322],[449,450],[450,347],[347,449],[432,422],[422,434],[434,432],[18,313],[313,17],[17,18],[291,306],[306,375],[375,291],[259,387],[387,260],[260,259],[424,335],[335,418],[418,424],[434,364],[364,416],[416,434],[391,423],[423,327],[327,391],[301,251],[251,298],[298,301],[275,281],[281,4],[4,275],[254,373],[373,253],[253,254],[375,307],[307,321],[321,375],[280,425],[425,411],[411,280],[200,421],[421,18],[18,200],[335,321],[321,406],[406,335],[321,320],[320,405],[405,321],[314,315],[315,17],[17,314],[423,426],[426,266],[266,423],[396,377],[377,369],[369,396],[270,322],[322,269],[269,270],[413,417],[417,464],[464,413],[385,386],[386,258],[258,385],[248,456],[456,419],[419,248],[298,284],[284,333],[333,298],[168,417],[417,8],[8,168],[448,346],[346,261],[261,448],[417,413],[413,285],[285,417],[326,327],[327,328],[328,326],[277,355],[355,329],[329,277],[309,392],[392,438],[438,309],[381,382],[382,256],[256,381],[279,429],[429,360],[360,279],[365,364],[364,379],[379,365],[355,277],[277,437],[437,355],[282,443],[443,283],[283,282],[281,275],[275,363],[363,281],[395,431],[431,369],[369,395],[299,297],[297,337],[337,299],[335,273],[273,321],[321,335],[348,450],[450,349],[349,348],[359,446],[446,467],[467,359],[283,293],[293,282],[282,283],[250,458],[458,462],[462,250],[300,276],[276,383],[383,300],[292,308],[308,325],[325,292],[283,276],[276,293],[293,283],[264,372],[372,447],[447,264],[346,352],[352,340],[340,346],[354,274],[274,19],[19,354],[363,456],[456,281],[281,363],[426,436],[436,425],[425,426],[380,381],[381,252],[252,380],[267,269],[269,393],[393,267],[421,200],[200,428],[428,421],[371,266],[266,329],[329,371],[432,287],[287,422],[422,432],[290,250],[250,328],[328,290],[385,258],[258,384],[384,385],[446,265],[265,342],[342,446],[386,387],[387,257],[257,386],[422,424],[424,430],[430,422],[445,342],[342,276],[276,445],[422,273],[273,424],[424,422],[306,292],[292,307],[307,306],[352,366],[366,345],[345,352],[268,271],[271,302],[302,268],[358,423],[423,371],[371,358],[327,294],[294,460],[460,327],[331,279],[279,294],[294,331],[303,271],[271,304],[304,303],[436,432],[432,427],[427,436],[304,272],[272,408],[408,304],[395,394],[394,431],[431,395],[378,395],[395,400],[400,378],[296,334],[334,299],[299,296],[6,351],[351,168],[168,6],[376,352],[352,411],[411,376],[307,325],[325,320],[320,307],[285,295],[295,336],[336,285],[320,319],[319,404],[404,320],[329,330],[330,349],[349,329],[334,293],[293,333],[333,334],[366,323],[323,447],[447,366],[316,15],[15,315],[315,316],[331,358],[358,279],[279,331],[317,14],[14,316],[316,317],[8,285],[285,9],[9,8],[277,329],[329,350],[350,277],[253,374],[374,252],[252,253],[319,318],[318,403],[403,319],[351,6],[6,419],[419,351],[324,318],[318,325],[325,324],[397,367],[367,365],[365,397],[288,435],[435,397],[397,288],[278,344],[344,439],[439,278],[310,272],[272,311],[311,310],[248,195],[195,281],[281,248],[375,273],[273,291],[291,375],[175,396],[396,199],[199,175],[312,311],[311,268],[268,312],[276,283],[283,445],[445,276],[390,373],[373,339],[339,390],[295,282],[282,296],[296,295],[448,449],[449,346],[346,448],[356,264],[264,454],[454,356],[337,336],[336,299],[299,337],[337,338],[338,151],[151,337],[294,278],[278,455],[455,294],[308,292],[292,415],[415,308],[429,358],[358,355],[355,429],[265,340],[340,372],[372,265],[352,346],[346,280],[280,352],[295,442],[442,282],[282,295],[354,19],[19,370],[370,354],[285,441],[441,295],[295,285],[195,248],[248,197],[197,195],[457,440],[440,274],[274,457],[301,300],[300,368],[368,301],[417,351],[351,465],[465,417],[251,301],[301,389],[389,251],[394,395],[395,379],[379,394],[399,412],[412,419],[419,399],[410,436],[436,322],[322,410],[326,2],[2,393],[393,326],[354,370],[370,461],[461,354],[393,164],[164,267],[267,393],[268,302],[302,12],[12,268],[312,268],[268,13],[13,312],[298,293],[293,301],[301,298],[265,446],[446,340],[340,265],[280,330],[330,425],[425,280],[322,426],[426,391],[391,322],[420,429],[429,437],[437,420],[393,391],[391,326],[326,393],[344,440],[440,438],[438,344],[458,459],[459,461],[461,458],[364,434],[434,394],[394,364],[428,396],[396,262],[262,428],[274,354],[354,457],[457,274],[317,316],[316,402],[402,317],[316,315],[315,403],[403,316],[315,314],[314,404],[404,315],[314,313],[313,405],[405,314],[313,421],[421,406],[406,313],[323,366],[366,361],[361,323],[292,306],[306,407],[407,292],[306,291],[291,408],[408,306],[291,287],[287,409],[409,291],[287,432],[432,410],[410,287],[427,434],[434,411],[411,427],[372,264],[264,383],[383,372],[459,309],[309,457],[457,459],[366,352],[352,401],[401,366],[1,274],[274,4],[4,1],[418,421],[421,262],[262,418],[331,294],[294,358],[358,331],[435,433],[433,367],[367,435],[392,289],[289,439],[439,392],[328,462],[462,326],[326,328],[94,2],[2,370],[370,94],[289,305],[305,455],[455,289],[339,254],[254,448],[448,339],[359,255],[255,446],[446,359],[254,253],[253,449],[449,254],[253,252],[252,450],[450,253],[252,256],[256,451],[451,252],[256,341],[341,452],[452,256],[414,413],[413,463],[463,414],[286,441],[441,414],[414,286],[286,258],[258,441],[441,286],[258,257],[257,442],[442,258],[257,259],[259,443],[443,257],[259,260],[260,444],[444,259],[260,467],[467,445],[445,260],[309,459],[459,250],[250,309],[305,289],[289,290],[290,305],[305,290],[290,460],[460,305],[401,376],[376,435],[435,401],[309,250],[250,392],[392,309],[376,411],[411,433],[433,376],[453,341],[341,464],[464,453],[357,453],[453,465],[465,357],[343,357],[357,412],[412,343],[437,343],[343,399],[399,437],[344,360],[360,440],[440,344],[420,437],[437,456],[456,420],[360,420],[420,363],[363,360],[361,401],[401,288],[288,361],[265,372],[372,353],[353,265],[390,339],[339,249],[249,390],[339,448],[448,255],[255,339]]),Ct("VERSION","0.4.1646425229")}).call(Vi);const Ri={};(function(){var i;function n(h){var y=0;return function(){return y<h.length?{done:!1,value:h[y++]}:{done:!0}}}var r=typeof Object.defineProperties=="function"?Object.defineProperty:function(h,y,G){return h==Array.prototype||h==Object.prototype||(h[y]=G.value),h};function f(h){h=[typeof globalThis=="object"&&globalThis,h,typeof window=="object"&&window,typeof self=="object"&&self,typeof global=="object"&&global];for(var y=0;y<h.length;++y){var G=h[y];if(G&&G.Math==Math)return G}throw Error("Cannot find global object")}var Z=f(this);function x(h,y){if(y)t:{var G=Z;h=h.split(".");for(var C=0;C<h.length-1;C++){var K=h[C];if(!(K in G))break t;G=G[K]}h=h[h.length-1],C=G[h],y=y(C),y!=C&&y!=null&&r(G,h,{configurable:!0,writable:!0,value:y})}}x("Symbol",function(h){function y(_){if(this instanceof y)throw new TypeError("Symbol is not a constructor");return new G(C+(_||"")+"_"+K++,_)}function G(_,M){this.g=_,r(this,"description",{configurable:!0,writable:!0,value:M})}if(h)return h;G.prototype.toString=function(){return this.g};var C="jscomp_symbol_"+(1e9*Math.random()>>>0)+"_",K=0;return y}),x("Symbol.iterator",function(h){if(h)return h;h=Symbol("Symbol.iterator");for(var y="Array Int8Array Uint8Array Uint8ClampedArray Int16Array Uint16Array Int32Array Uint32Array Float32Array Float64Array".split(" "),G=0;G<y.length;G++){var C=Z[y[G]];typeof C=="function"&&typeof C.prototype[h]!="function"&&r(C.prototype,h,{configurable:!0,writable:!0,value:function(){return H(n(this))}})}return h});function H(h){return h={next:h},h[Symbol.iterator]=function(){return this},h}function T(h){var y=typeof Symbol<"u"&&Symbol.iterator&&h[Symbol.iterator];return y?y.call(h):{next:n(h)}}function J(h){if(!(h instanceof Array)){h=T(h);for(var y,G=[];!(y=h.next()).done;)G.push(y.value);h=G}return h}var et=typeof Object.create=="function"?Object.create:function(h){function y(){}return y.prototype=h,new y},lt;if(typeof Object.setPrototypeOf=="function")lt=Object.setPrototypeOf;else{var pt;t:{var Yt={a:!0},Lt={};try{Lt.__proto__=Yt,pt=Lt.a;break t}catch{}pt=!1}lt=pt?function(h,y){if(h.__proto__=y,h.__proto__!==y)throw new TypeError(h+" is not extensible");return h}:null}var at=lt;function dt(h,y){if(h.prototype=et(y.prototype),h.prototype.constructor=h,at)at(h,y);else for(var G in y)if(G!="prototype")if(Object.defineProperties){var C=Object.getOwnPropertyDescriptor(y,G);C&&Object.defineProperty(h,G,C)}else h[G]=y[G];h.ea=y.prototype}function Bt(){this.l=!1,this.i=null,this.h=void 0,this.g=1,this.s=this.m=0,this.j=null}function Nt(h){if(h.l)throw new TypeError("Generator is already running");h.l=!0}Bt.prototype.o=function(h){this.h=h};function ee(h,y){h.j={U:y,V:!0},h.g=h.m||h.s}Bt.prototype.return=function(h){this.j={return:h},this.g=this.s};function O(h,y,G){return h.g=G,{value:y}}function $e(h){this.g=new Bt,this.h=h}function je(h,y){Nt(h.g);var G=h.g.i;return G?We(h,"return"in G?G.return:function(C){return{value:C,done:!0}},y,h.g.return):(h.g.return(y),zt(h))}function We(h,y,G,C){try{var K=y.call(h.g.i,G);if(!(K instanceof Object))throw new TypeError("Iterator result "+K+" is not an object");if(!K.done)return h.g.l=!1,K;var _=K.value}catch(M){return h.g.i=null,ee(h.g,M),zt(h)}return h.g.i=null,C.call(h.g,_),zt(h)}function zt(h){for(;h.g.g;)try{var y=h.h(h.g);if(y)return h.g.l=!1,{value:y.value,done:!1}}catch(G){h.g.h=void 0,ee(h.g,G)}if(h.g.l=!1,h.g.j){if(y=h.g.j,h.g.j=null,y.V)throw y.U;return{value:y.return,done:!0}}return{value:void 0,done:!0}}function Jn(h){this.next=function(y){return Nt(h.g),h.g.i?y=We(h,h.g.i.next,y,h.g.o):(h.g.o(y),y=zt(h)),y},this.throw=function(y){return Nt(h.g),h.g.i?y=We(h,h.g.i.throw,y,h.g.o):(ee(h.g,y),y=zt(h)),y},this.return=function(y){return je(h,y)},this[Symbol.iterator]=function(){return this}}function ne(h,y){return y=new Jn(new $e(y)),at&&h.prototype&&at(y,h.prototype),y}function Zt(h,y){h instanceof String&&(h+="");var G=0,C=!1,K={next:function(){if(!C&&G<h.length){var _=G++;return{value:y(_,h[_]),done:!1}}return C=!0,{done:!0,value:void 0}}};return K[Symbol.iterator]=function(){return K},K}var qe=typeof Object.assign=="function"?Object.assign:function(h,y){for(var G=1;G<arguments.length;G++){var C=arguments[G];if(C)for(var K in C)Object.prototype.hasOwnProperty.call(C,K)&&(h[K]=C[K])}return h};x("Object.assign",function(h){return h||qe}),x("Promise",function(h){function y(M){this.h=0,this.i=void 0,this.g=[],this.o=!1;var q=this.j();try{M(q.resolve,q.reject)}catch(ct){q.reject(ct)}}function G(){this.g=null}function C(M){return M instanceof y?M:new y(function(q){q(M)})}if(h)return h;G.prototype.h=function(M){if(this.g==null){this.g=[];var q=this;this.i(function(){q.l()})}this.g.push(M)};var K=Z.setTimeout;G.prototype.i=function(M){K(M,0)},G.prototype.l=function(){for(;this.g&&this.g.length;){var M=this.g;this.g=[];for(var q=0;q<M.length;++q){var ct=M[q];M[q]=null;try{ct()}catch(s){this.j(s)}}}this.g=null},G.prototype.j=function(M){this.i(function(){throw M})},y.prototype.j=function(){function M(s){return function(X){ct||(ct=!0,s.call(q,X))}}var q=this,ct=!1;return{resolve:M(this.C),reject:M(this.l)}},y.prototype.C=function(M){if(M===this)this.l(new TypeError("A Promise cannot resolve to itself"));else if(M instanceof y)this.F(M);else{t:switch(typeof M){case"object":var q=M!=null;break t;case"function":q=!0;break t;default:q=!1}q?this.u(M):this.m(M)}},y.prototype.u=function(M){var q=void 0;try{q=M.then}catch(ct){this.l(ct);return}typeof q=="function"?this.G(q,M):this.m(M)},y.prototype.l=function(M){this.s(2,M)},y.prototype.m=function(M){this.s(1,M)},y.prototype.s=function(M,q){if(this.h!=0)throw Error("Cannot settle("+M+", "+q+"): Promise already settled in state"+this.h);this.h=M,this.i=q,this.h===2&&this.D(),this.A()},y.prototype.D=function(){var M=this;K(function(){if(M.B()){var q=Z.console;typeof q<"u"&&q.error(M.i)}},1)},y.prototype.B=function(){if(this.o)return!1;var M=Z.CustomEvent,q=Z.Event,ct=Z.dispatchEvent;return typeof ct>"u"?!0:(typeof M=="function"?M=new M("unhandledrejection",{cancelable:!0}):typeof q=="function"?M=new q("unhandledrejection",{cancelable:!0}):(M=Z.document.createEvent("CustomEvent"),M.initCustomEvent("unhandledrejection",!1,!0,M)),M.promise=this,M.reason=this.i,ct(M))},y.prototype.A=function(){if(this.g!=null){for(var M=0;M<this.g.length;++M)_.h(this.g[M]);this.g=null}};var _=new G;return y.prototype.F=function(M){var q=this.j();M.J(q.resolve,q.reject)},y.prototype.G=function(M,q){var ct=this.j();try{M.call(q,ct.resolve,ct.reject)}catch(s){ct.reject(s)}},y.prototype.then=function(M,q){function ct(w,k){return typeof w=="function"?function(A){try{s(w(A))}catch(B){X(B)}}:k}var s,X,R=new y(function(w,k){s=w,X=k});return this.J(ct(M,s),ct(q,X)),R},y.prototype.catch=function(M){return this.then(void 0,M)},y.prototype.J=function(M,q){function ct(){switch(s.h){case 1:M(s.i);break;case 2:q(s.i);break;default:throw Error("Unexpected state: "+s.h)}}var s=this;this.g==null?_.h(ct):this.g.push(ct),this.o=!0},y.resolve=C,y.reject=function(M){return new y(function(q,ct){ct(M)})},y.race=function(M){return new y(function(q,ct){for(var s=T(M),X=s.next();!X.done;X=s.next())C(X.value).J(q,ct)})},y.all=function(M){var q=T(M),ct=q.next();return ct.done?C([]):new y(function(s,X){function R(A){return function(B){w[A]=B,k--,k==0&&s(w)}}var w=[],k=0;do w.push(void 0),k++,C(ct.value).J(R(w.length-1),X),ct=q.next();while(!ct.done)})},y}),x("Object.is",function(h){return h||function(y,G){return y===G?y!==0||1/y===1/G:y!==y&&G!==G}}),x("Array.prototype.includes",function(h){return h||function(y,G){var C=this;C instanceof String&&(C=String(C));var K=C.length;for(G=G||0,0>G&&(G=Math.max(G+K,0));G<K;G++){var _=C[G];if(_===y||Object.is(_,y))return!0}return!1}}),x("String.prototype.includes",function(h){return h||function(y,G){if(this==null)throw new TypeError("The 'this' value for String.prototype.includes must not be null or undefined");if(y instanceof RegExp)throw new TypeError("First argument to String.prototype.includes must not be a regular expression");return this.indexOf(y,G||0)!==-1}}),x("Array.prototype.keys",function(h){return h||function(){return Zt(this,function(y){return y})}});var zn=this||self;function Re(h,y){h=h.split(".");var G=zn;h[0]in G||typeof G.execScript>"u"||G.execScript("var "+h[0]);for(var C;h.length&&(C=h.shift());)h.length||y===void 0?G[C]&&G[C]!==Object.prototype[C]?G=G[C]:G=G[C]={}:G[C]=y}function Ct(h,y){return y=String.fromCharCode.apply(null,y),h==null?y:h+y}var Te,ln=typeof TextDecoder<"u",Xn,Hn=typeof TextEncoder<"u";function In(h){if(Hn)h=(Xn||(Xn=new TextEncoder)).encode(h);else{var y=void 0;y=y===void 0?!1:y;for(var G=0,C=new Uint8Array(3*h.length),K=0;K<h.length;K++){var _=h.charCodeAt(K);if(128>_)C[G++]=_;else{if(2048>_)C[G++]=_>>6|192;else{if(55296<=_&&57343>=_){if(56319>=_&&K<h.length){var M=h.charCodeAt(++K);if(56320<=M&&57343>=M){_=1024*(_-55296)+M-56320+65536,C[G++]=_>>18|240,C[G++]=_>>12&63|128,C[G++]=_>>6&63|128,C[G++]=_&63|128;continue}else K--}if(y)throw Error("Found an unpaired surrogate");_=65533}C[G++]=_>>12|224,C[G++]=_>>6&63|128}C[G++]=_&63|128}}h=C.subarray(0,G)}return h}var kn={},hn=null;function bn(h,y){y===void 0&&(y=0),Pe(),y=kn[y];for(var G=Array(Math.floor(h.length/3)),C=y[64]||"",K=0,_=0;K<h.length-2;K+=3){var M=h[K],q=h[K+1],ct=h[K+2],s=y[M>>2];M=y[(M&3)<<4|q>>4],q=y[(q&15)<<2|ct>>6],ct=y[ct&63],G[_++]=s+M+q+ct}switch(s=0,ct=C,h.length-K){case 2:s=h[K+1],ct=y[(s&15)<<2]||C;case 1:h=h[K],G[_]=y[h>>2]+y[(h&3)<<4|s>>4]+ct+C}return G.join("")}function En(h){var y=h.length,G=3*y/4;G%3?G=Math.floor(G):"=.".indexOf(h[y-1])!=-1&&(G="=.".indexOf(h[y-2])!=-1?G-2:G-1);var C=new Uint8Array(G),K=0;return Fn(h,function(_){C[K++]=_}),C.subarray(0,K)}function Fn(h,y){function G(ct){for(;C<h.length;){var s=h.charAt(C++),X=hn[s];if(X!=null)return X;if(!/^[\s\xa0]*$/.test(s))throw Error("Unknown base64 encoding at char: "+s)}return ct}Pe();for(var C=0;;){var K=G(-1),_=G(0),M=G(64),q=G(64);if(q===64&&K===-1)break;y(K<<2|_>>4),M!=64&&(y(_<<4&240|M>>2),q!=64&&y(M<<6&192|q))}}function Pe(){if(!hn){hn={};for(var h="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789".split(""),y=["+/=","+/","-_=","-_.","-_"],G=0;5>G;G++){var C=h.concat(y[G].split(""));kn[G]=C;for(var K=0;K<C.length;K++){var _=C[K];hn[_]===void 0&&(hn[_]=K)}}}}var Ae=typeof Uint8Array.prototype.slice=="function",xn;function Wn(h,y,G){return y===G?xn||(xn=new Uint8Array(0)):Ae?h.slice(y,G):new Uint8Array(h.subarray(y,G))}var he=0,Se=0;function Oe(h,y){y=y===void 0?{}:y,y=y.v===void 0?!1:y.v,this.h=null,this.g=this.j=this.l=0,this.m=!1,this.v=y,h&&re(this,h)}function re(h,y){y=y.constructor===Uint8Array?y:y.constructor===ArrayBuffer?new Uint8Array(y):y.constructor===Array?new Uint8Array(y):y.constructor===String?En(y):y instanceof Uint8Array?new Uint8Array(y.buffer,y.byteOffset,y.byteLength):new Uint8Array(0),h.h=y,h.l=0,h.j=h.h.length,h.g=h.l}Oe.prototype.reset=function(){this.g=this.l};function Ve(h){for(var y=128,G=0,C=0,K=0;4>K&&128<=y;K++)y=h.h[h.g++],G|=(y&127)<<7*K;if(128<=y&&(y=h.h[h.g++],G|=(y&127)<<28,C|=(y&127)>>4),128<=y)for(K=0;5>K&&128<=y;K++)y=h.h[h.g++],C|=(y&127)<<7*K+3;if(128>y)return h=G>>>0,y=C>>>0,(C=y&2147483648)&&(h=~h+1>>>0,y=~y>>>0,h==0&&(y=y+1>>>0)),h=4294967296*y+(h>>>0),C?-h:h;h.m=!0}Oe.prototype.i=function(){var h=this.h,y=h[this.g],G=y&127;return 128>y?(this.g+=1,G):(y=h[this.g+1],G|=(y&127)<<7,128>y?(this.g+=2,G):(y=h[this.g+2],G|=(y&127)<<14,128>y?(this.g+=3,G):(y=h[this.g+3],G|=(y&127)<<21,128>y?(this.g+=4,G):(y=h[this.g+4],G|=(y&15)<<28,128>y?(this.g+=5,G>>>0):(this.g+=5,128<=h[this.g++]&&128<=h[this.g++]&&128<=h[this.g++]&&128<=h[this.g++]&&this.g++,G)))))},Oe.prototype.o=function(){var h=this.h[this.g],y=this.h[this.g+1],G=this.h[this.g+2],C=this.h[this.g+3];return this.g+=4,G=(h<<0|y<<8|G<<16|C<<24)>>>0,h=2*(G>>31)+1,y=G>>>23&255,G&=8388607,y==255?G?NaN:1/0*h:y==0?h*Math.pow(2,-149)*G:h*Math.pow(2,y-150)*(G+Math.pow(2,23))};var cn=[];function Be(){this.g=new Uint8Array(64),this.h=0}Be.prototype.push=function(h){if(!(this.h+1<this.g.length)){var y=this.g;this.g=new Uint8Array(Math.ceil(1+2*this.g.length)),this.g.set(y)}this.g[this.h++]=h},Be.prototype.length=function(){return this.h},Be.prototype.end=function(){var h=this.g,y=this.h;return this.h=0,Wn(h,0,y)};function Qt(h,y){for(;127<y;)h.push(y&127|128),y>>>=7;h.push(y)}function Ze(h){var y={},G=y.N===void 0?!1:y.N;this.o={v:y.v===void 0?!1:y.v},this.N=G,y=this.o,cn.length?(G=cn.pop(),y&&(G.v=y.v),h&&re(G,h),h=G):h=new Oe(h,y),this.g=h,this.m=this.g.g,this.h=this.i=this.l=-1,this.j=!1}Ze.prototype.reset=function(){this.g.reset(),this.h=this.l=-1};function Fe(h){var y=h.g;if((y=y.g==y.j)||(y=h.j)||(y=h.g,y=y.m||0>y.g||y.g>y.j),y)return!1;h.m=h.g.g,y=h.g.i();var G=y&7;return G!=0&&G!=5&&G!=1&&G!=2&&G!=3&&G!=4?(h.j=!0,!1):(h.i=y,h.l=y>>>3,h.h=G,!0)}function Mt(h){switch(h.h){case 0:if(h.h!=0)Mt(h);else{for(h=h.g;h.h[h.g]&128;)h.g++;h.g++}break;case 1:h.h!=1?Mt(h):(h=h.g,h.g+=8);break;case 2:if(h.h!=2)Mt(h);else{var y=h.g.i();h=h.g,h.g+=y}break;case 5:h.h!=5?Mt(h):(h=h.g,h.g+=4);break;case 3:y=h.l;do{if(!Fe(h)){h.j=!0;break}if(h.h==4){h.l!=y&&(h.j=!0);break}Mt(h)}while(1);break;default:h.j=!0}}function Ie(h,y,G){var C=h.g.j,K=h.g.i(),_=h.g.g+K;if(h.g.j=_,G(y,h),G=_-h.g.g,G!==0)throw Error("Message parsing ended unexpectedly. Expected to read "+K+" bytes, instead read "+(K-G)+" bytes, either the data ended unexpectedly or the message misreported its own length");return h.g.g=_,h.g.j=C,y}function jt(h){return h.g.o()}function ye(h){var y=h.g.i();h=h.g;var G=h.g;h.g+=y,h=h.h;var C;if(ln)(C=Te)||(C=Te=new TextDecoder("utf-8",{fatal:!1})),C=C.decode(h.subarray(G,G+y));else{y=G+y;for(var K=[],_=null,M,q,ct;G<y;)M=h[G++],128>M?K.push(M):224>M?G>=y?K.push(65533):(q=h[G++],194>M||(q&192)!==128?(G--,K.push(65533)):K.push((M&31)<<6|q&63)):240>M?G>=y-1?K.push(65533):(q=h[G++],(q&192)!==128||M===224&&160>q||M===237&&160<=q||((C=h[G++])&192)!==128?(G--,K.push(65533)):K.push((M&15)<<12|(q&63)<<6|C&63)):244>=M?G>=y-2?K.push(65533):(q=h[G++],(q&192)!==128||(M<<28)+(q-144)>>30!==0||((C=h[G++])&192)!==128||((ct=h[G++])&192)!==128?(G--,K.push(65533)):(M=(M&7)<<18|(q&63)<<12|(C&63)<<6|ct&63,M-=65536,K.push((M>>10&1023)+55296,(M&1023)+56320))):K.push(65533),8192<=K.length&&(_=Ct(_,K),K.length=0);C=Ct(_,K)}return C}function Ye(h,y,G){var C=h.g.i();for(C=h.g.g+C;h.g.g<C;)G.push(y.call(h.g))}function tn(h,y){h.h==2?Ye(h,Oe.prototype.o,y):y.push(jt(h))}function Xe(){this.h=[],this.i=0,this.g=new Be}function Pt(h,y){y.length!==0&&(h.h.push(y),h.i+=y.length)}function ze(h){var y=h.i+h.g.length();if(y===0)return new Uint8Array(0);y=new Uint8Array(y);for(var G=h.h,C=G.length,K=0,_=0;_<C;_++){var M=G[_];M.length!==0&&(y.set(M,K),K+=M.length)}return G=h.g,C=G.h,C!==0&&(y.set(G.g.subarray(0,C),K),G.h=0),h.h=[y],y}function _e(h,y,G){if(G!=null){Qt(h.g,8*y+5),h=h.g;var C=G;C=(G=0>C?1:0)?-C:C,C===0?0<1/C?he=Se=0:(Se=0,he=2147483648):isNaN(C)?(Se=0,he=2147483647):34028234663852886e22<C?(Se=0,he=(G<<31|2139095040)>>>0):11754943508222875e-54>C?(C=Math.round(C/Math.pow(2,-149)),Se=0,he=(G<<31|C)>>>0):(y=Math.floor(Math.log(C)/Math.LN2),C*=Math.pow(2,-y),C=Math.round(8388608*C),16777216<=C&&++y,Se=0,he=(G<<31|y+127<<23|C&8388607)>>>0),G=he,h.push(G>>>0&255),h.push(G>>>8&255),h.push(G>>>16&255),h.push(G>>>24&255)}}var xe=typeof Uint8Array=="function";function Vn(h,y,G){if(h!=null)return typeof h=="object"?xe&&h instanceof Uint8Array?G(h):un(h,y,G):y(h)}function un(h,y,G){if(Array.isArray(h)){for(var C=Array(h.length),K=0;K<h.length;K++)C[K]=Vn(h[K],y,G);return Array.isArray(h)&&h.W&&ve(C),C}C={};for(K in h)C[K]=Vn(h[K],y,G);return C}function Qe(h){return typeof h=="number"?isFinite(h)?h:String(h):h}var an={W:{value:!0,configurable:!0}};function ve(h){return Array.isArray(h)&&!Object.isFrozen(h)&&Object.defineProperties(h,an),h}var we;function Ge(h,y,G){var C=we;we=null,h||(h=C),C=this.constructor.ca,h||(h=C?[C]:[]),this.j=C?0:-1,this.m=this.g=null,this.h=h;t:{if(C=this.h.length,h=C-1,C&&(C=this.h[h],!(C===null||typeof C!="object"||Array.isArray(C)||xe&&C instanceof Uint8Array))){this.l=h-this.j,this.i=C;break t}y!==void 0&&-1<y?(this.l=Math.max(y,h+1-this.j),this.i=null):this.l=Number.MAX_VALUE}if(G)for(y=0;y<G.length;y++)h=G[y],h<this.l?(h+=this.j,(C=this.h[h])?ve(C):this.h[h]=ie):(De(this),(C=this.i[h])?ve(C):this.i[h]=ie)}var ie=Object.freeze(ve([]));function De(h){var y=h.l+h.j;h.h[y]||(h.i=h.h[y]={})}function qt(h,y,G){return y===-1?null:(G===void 0?0:G)||y>=h.l?h.i?h.i[y]:void 0:h.h[y+h.j]}function Ot(h,y){var G=G===void 0?!1:G,C=qt(h,y,G);return C==null&&(C=ie),C===ie&&(C=ve([]),Vt(h,y,C,G)),C}function fn(h){var y=Ot(h,3);if(h.m||(h.m={}),!h.m[3]){for(var G=0;G<y.length;G++)y[G]=+y[G];h.m[3]=!0}return y}function fe(h,y,G){return h=qt(h,y),h==null?G:h}function Ft(h,y,G){return h=qt(h,y),h=h==null?h:+h,h==null?G===void 0?0:G:h}function Vt(h,y,G,C){(C===void 0?0:C)||y>=h.l?(De(h),h.i[y]=G):h.h[y+h.j]=G}function oe(h,y,G){if(G===-1)return null;if(h.g||(h.g={}),!h.g[G]){var C=qt(h,G,!1);C&&(h.g[G]=new y(C))}return h.g[G]}function Le(h,y){h.g||(h.g={});var G=h.g[1];if(!G){var C=Ot(h,1);G=[];for(var K=0;K<C.length;K++)G[K]=new y(C[K]);h.g[1]=G}return G}function te(h,y,G){var C=C===void 0?!1:C;h.g||(h.g={});var K=G&&tt(G);h.g[y]=G,Vt(h,y,K,C)}function se(h,y,G,C){var K=Le(h,G);y=y||new G,h=Ot(h,1),C!=null?(K.splice(C,0,y),h.splice(C,0,tt(y))):(K.push(y),h.push(tt(y)))}Ge.prototype.toJSON=function(){var h=tt(this);return un(h,Qe,bn)};function tt(h,y){if(h.g)for(var G in h.g){var C=h.g[G];if(Array.isArray(C))for(var K=0;K<C.length;K++)C[K]&&tt(C[K]);else C&&tt(C)}return h.h}Ge.prototype.toString=function(){return tt(this).toString()};function it(h,y){if(h=h.o){Pt(y,y.g.end());for(var G=0;G<h.length;G++)Pt(y,h[G])}}function ut(h,y){if(y.h==4)return!1;var G=y.m;return Mt(y),y.N||(y=Wn(y.g.h,G,y.g.g),(G=h.o)?G.push(y):h.o=[y]),!0}function _t(h){Ge.call(this,h,-1,ue)}dt(_t,Ge),_t.prototype.getRows=function(){return qt(this,1)},_t.prototype.getCols=function(){return qt(this,2)},_t.prototype.getPackedDataList=function(){return fn(this)},_t.prototype.getLayout=function(){return fe(this,4,0)};function de(h,y){for(;Fe(y);)switch(y.i){case 8:var G=y.g.i();Vt(h,1,G);break;case 16:G=y.g.i(),Vt(h,2,G);break;case 29:case 26:tn(y,h.getPackedDataList());break;case 32:G=Ve(y.g),Vt(h,4,G);break;default:if(!ut(h,y))return h}return h}var ue=[3];function St(h,y){var G=void 0;return new(G||(G=Promise))(function(C,K){function _(ct){try{q(y.next(ct))}catch(s){K(s)}}function M(ct){try{q(y.throw(ct))}catch(s){K(s)}}function q(ct){ct.done?C(ct.value):new G(function(s){s(ct.value)}).then(_,M)}q((y=y.apply(h,void 0)).next())})}function me(h){Ge.call(this,h)}dt(me,Ge);function Ce(h,y){for(;Fe(y);)switch(y.i){case 8:var G=y.g.i();Vt(h,1,G);break;case 21:G=jt(y),Vt(h,2,G);break;case 26:G=ye(y),Vt(h,3,G);break;case 34:G=ye(y),Vt(h,4,G);break;default:if(!ut(h,y))return h}return h}function en(h){Ge.call(this,h,-1,nn)}dt(en,Ge),en.prototype.addClassification=function(h,y){return se(this,h,me,y),this};var nn=[1];function mn(h){Ge.call(this,h)}dt(mn,Ge);function yn(h,y){for(;Fe(y);)switch(y.i){case 13:var G=jt(y);Vt(h,1,G);break;case 21:G=jt(y),Vt(h,2,G);break;case 29:G=jt(y),Vt(h,3,G);break;case 37:G=jt(y),Vt(h,4,G);break;case 45:G=jt(y),Vt(h,5,G);break;default:if(!ut(h,y))return h}return h}function He(h){Ge.call(this,h,-1,jn)}dt(He,Ge);function rn(h){t:{var y=new He;for(h=new Ze(h);Fe(h);)switch(h.i){case 10:var G=Ie(h,new mn,yn);se(y,G,mn,void 0);break;default:if(!ut(y,h))break t}}return y}var jn=[1];function on(h){Ge.call(this,h)}dt(on,Ge);function Je(h){Ge.call(this,h,-1,Sn)}dt(Je,Ge),Je.prototype.getVertexType=function(){return fe(this,1,0)},Je.prototype.getPrimitiveType=function(){return fe(this,2,0)},Je.prototype.getVertexBufferList=function(){return fn(this)},Je.prototype.getIndexBufferList=function(){return Ot(this,4)};function Zn(h,y){for(;Fe(y);)switch(y.i){case 8:var G=Ve(y.g);Vt(h,1,G);break;case 16:G=Ve(y.g),Vt(h,2,G);break;case 29:case 26:tn(y,h.getVertexBufferList());break;case 32:case 34:G=y;var C=h.getIndexBufferList();G.h==2?Ye(G,Oe.prototype.i,C):C.push(G.g.i());break;default:if(!ut(h,y))return h}return h}var Sn=[3,4];function Ke(h){Ge.call(this,h)}dt(Ke,Ge),Ke.prototype.getMesh=function(){return oe(this,Je,1)},Ke.prototype.getPoseTransformMatrix=function(){return oe(this,_t,2)};function Un(h){t:{var y=new Ke;for(h=new Ze(h);Fe(h);)switch(h.i){case 10:var G=Ie(h,new Je,Zn);te(y,1,G);break;case 18:G=Ie(h,new _t,de),te(y,2,G);break;default:if(!ut(y,h))break t}}return y}function sn(h,y,G){if(G=h.createShader(G===0?h.VERTEX_SHADER:h.FRAGMENT_SHADER),h.shaderSource(G,y),h.compileShader(G),!h.getShaderParameter(G,h.COMPILE_STATUS))throw Error(`Could not compile WebGL shader.
|
|
70
|
+
`+g.getProgramInfoLog(m));e=o.o=m,g.useProgram(e),u=g.getUniformLocation(e,"sampler0"),o.j={K:g.getAttribLocation(e,"aVertex"),J:g.getAttribLocation(e,"aTex"),ma:u},o.u=g.createBuffer(),g.bindBuffer(g.ARRAY_BUFFER,o.u),g.enableVertexAttribArray(o.j.K),g.vertexAttribPointer(o.j.K,2,g.FLOAT,!1,0,0),g.bufferData(g.ARRAY_BUFFER,new Float32Array([-1,-1,-1,1,1,1,1,-1]),g.STATIC_DRAW),g.bindBuffer(g.ARRAY_BUFFER,null),o.s=g.createBuffer(),g.bindBuffer(g.ARRAY_BUFFER,o.s),g.enableVertexAttribArray(o.j.J),g.vertexAttribPointer(o.j.J,2,g.FLOAT,!1,0,0),g.bufferData(g.ARRAY_BUFFER,new Float32Array([0,1,0,0,1,0,1,1]),g.STATIC_DRAW),g.bindBuffer(g.ARRAY_BUFFER,null),g.uniform1i(u,0)}e=o.j,g.useProgram(o.o),g.canvas.width=d.width,g.canvas.height=d.height,g.viewport(0,0,d.width,d.height),g.activeTexture(g.TEXTURE0),o.h.bindTexture2d(d.glName),g.enableVertexAttribArray(e.K),g.bindBuffer(g.ARRAY_BUFFER,o.u),g.vertexAttribPointer(e.K,2,g.FLOAT,!1,0,0),g.enableVertexAttribArray(e.J),g.bindBuffer(g.ARRAY_BUFFER,o.s),g.vertexAttribPointer(e.J,2,g.FLOAT,!1,0,0),g.bindFramebuffer(g.DRAW_FRAMEBUFFER?g.DRAW_FRAMEBUFFER:g.FRAMEBUFFER,null),g.clearColor(0,0,0,0),g.clear(g.COLOR_BUFFER_BIT),g.colorMask(!0,!0,!0,!0),g.drawArrays(g.TRIANGLE_FAN,0,4),g.disableVertexAttribArray(e.K),g.disableVertexAttribArray(e.J),g.bindBuffer(g.ARRAY_BUFFER,null),o.h.bindTexture2d(0)}function $(o){this.g=o}var yt=new Uint8Array([0,97,115,109,1,0,0,0,1,4,1,96,0,0,3,2,1,0,10,9,1,7,0,65,0,253,15,26,11]);function Xt(o,d){return d+o}function Kt(o,d){window[o]=d}function xt(o){var d=document.createElement("script");return d.setAttribute("src",o),d.setAttribute("crossorigin","anonymous"),new Promise(function(g){d.addEventListener("load",function(){g()},!1),d.addEventListener("error",function(){g()},!1),document.body.appendChild(d)})}function ht(){return Zt(function(o){switch(o.g){case 1:return o.o=2,P(o,WebAssembly.instantiate(yt),4);case 4:o.g=3,o.o=0;break;case 2:return o.o=0,o.j=null,o.return(!1);case 3:return o.return(!0)}})}function Wt(o){if(this.g=o,this.listeners={},this.j={},this.H={},this.o={},this.u={},this.I=this.s=this.Z=!0,this.D=Promise.resolve(),this.Y="",this.C={},this.locateFile=o&&o.locateFile||Xt,typeof window=="object")var d=window.location.pathname.toString().substring(0,window.location.pathname.toString().lastIndexOf("/"))+"/";else if(typeof location<"u")d=location.pathname.toString().substring(0,location.pathname.toString().lastIndexOf("/"))+"/";else throw Error("solutions can only be loaded on a web page or in a web worker");if(this.$=d,o.options){d=T(Object.keys(o.options));for(var g=d.next();!g.done;g=d.next()){g=g.value;var e=o.options[g].default;e!==void 0&&(this.j[g]=typeof e=="function"?e():e)}}}i=Wt.prototype,i.close=function(){return this.i&&this.i.delete(),Promise.resolve()};function It(o){var d,g,e,u,m,t,c,a,b,S,L;return Zt(function(C){switch(C.g){case 1:return o.Z?(d=o.g.files===void 0?[]:typeof o.g.files=="function"?o.g.files(o.j):o.g.files,P(C,ht(),2)):C.return();case 2:if(g=C.h,typeof window=="object")return Kt("createMediapipeSolutionsWasm",{locateFile:o.locateFile}),Kt("createMediapipeSolutionsPackedAssets",{locateFile:o.locateFile}),t=d.filter(function(U){return U.data!==void 0}),c=d.filter(function(U){return U.data===void 0}),a=Promise.all(t.map(function(U){var z=l(o,U.url);if(U.path!==void 0){var Q=U.path;z=z.then(function(D){return o.overrideFile(Q,D),Promise.resolve(D)})}return z})),b=Promise.all(c.map(function(U){return U.simd===void 0||U.simd&&g||!U.simd&&!g?xt(o.locateFile(U.url,o.$)):Promise.resolve()})).then(function(){var U,z,Q;return Zt(function(D){if(D.g==1)return U=window.createMediapipeSolutionsWasm,z=window.createMediapipeSolutionsPackedAssets,Q=o,P(D,U(z),2);Q.h=D.h,D.g=0})}),S=function(){return Zt(function(U){return o.g.graph&&o.g.graph.url?U=P(U,l(o,o.g.graph.url),0):(U.g=0,U=void 0),U})}(),P(C,Promise.all([b,a,S]),7);if(typeof importScripts!="function")throw Error("solutions can only be loaded on a web page or in a web worker");return e=d.filter(function(U){return U.simd===void 0||U.simd&&g||!U.simd&&!g}).map(function(U){return o.locateFile(U.url,o.$)}),importScripts.apply(null,J(e)),u=o,P(C,createMediapipeSolutionsWasm(Module),6);case 6:u.h=C.h,o.l=new OffscreenCanvas(1,1),o.h.canvas=o.l,m=o.h.GL.createContext(o.l,{antialias:!1,alpha:!1,ja:typeof WebGL2RenderingContext<"u"?2:1}),o.h.GL.makeContextCurrent(m),C.g=4;break;case 7:if(o.l=document.createElement("canvas"),L=o.l.getContext("webgl2",{}),!L&&(L=o.l.getContext("webgl",{}),!L))return alert("Failed to create WebGL canvas context when passing video frame."),C.return();o.G=L,o.h.canvas=o.l,o.h.createContext(o.l,!0,!0,{});case 4:o.i=new o.h.SolutionWasm,o.Z=!1,C.g=0}})}function wt(o){var d,g,e,u,m,t,c,a;return Zt(function(b){if(b.g==1){if(o.g.graph&&o.g.graph.url&&o.Y===o.g.graph.url)return b.return();if(o.s=!0,!o.g.graph||!o.g.graph.url){b.g=2;return}return o.Y=o.g.graph.url,P(b,l(o,o.g.graph.url),3)}for(b.g!=2&&(d=b.h,o.i.loadGraph(d)),g=T(Object.keys(o.C)),e=g.next();!e.done;e=g.next())u=e.value,o.i.overrideFile(u,o.C[u]);if(o.C={},o.g.listeners)for(m=T(o.g.listeners),t=m.next();!t.done;t=m.next())c=t.value,Y(o,c);a=o.j,o.j={},o.setOptions(a),b.g=0})}i.reset=function(){var o=this;return Zt(function(d){o.i&&(o.i.reset(),o.o={},o.u={}),d.g=0})},i.setOptions=function(o,d){var g=this;if(d=d||this.g.options){for(var e=[],u=[],m={},t=T(Object.keys(o)),c=t.next();!c.done;m={R:m.R,S:m.S},c=t.next()){var a=c.value;a in this.j&&this.j[a]===o[a]||(this.j[a]=o[a],c=d[a],c!==void 0&&(c.onChange&&(m.R=c.onChange,m.S=o[a],e.push(function(b){return function(){var S;return Zt(function(L){if(L.g==1)return P(L,b.R(b.S),2);S=L.h,S===!0&&(g.s=!0),L.g=0})}}(m))),c.graphOptionXref&&(a={valueNumber:c.type===1?o[a]:0,valueBoolean:c.type===0?o[a]:!1,valueString:c.type===2?o[a]:""},c=Object.assign(Object.assign(Object.assign({},{calculatorName:"",calculatorIndex:0}),c.graphOptionXref),a),u.push(c))))}(e.length!==0||u.length!==0)&&(this.s=!0,this.B=(this.B===void 0?[]:this.B).concat(u),this.A=(this.A===void 0?[]:this.A).concat(e))}};function Ft(o){var d,g,e,u,m,t,c;return Zt(function(a){switch(a.g){case 1:if(!o.s)return a.return();if(!o.A){a.g=2;break}d=T(o.A),g=d.next();case 3:if(g.done){a.g=5;break}return e=g.value,P(a,e(),4);case 4:g=d.next(),a.g=3;break;case 5:o.A=void 0;case 2:if(o.B){for(u=new o.h.GraphOptionChangeRequestList,m=T(o.B),t=m.next();!t.done;t=m.next())c=t.value,u.push_back(c);o.i.changeOptions(u),u.delete(),o.B=void 0}o.s=!1,a.g=0}})}i.initialize=function(){var o=this;return Zt(function(d){return d.g==1?P(d,It(o),2):d.g!=3?P(d,wt(o),3):P(d,Ft(o),0)})};function l(o,d){var g,e;return Zt(function(u){return d in o.H?u.return(o.H[d]):(g=o.locateFile(d,""),e=fetch(g).then(function(m){return m.arrayBuffer()}),o.H[d]=e,u.return(e))})}i.overrideFile=function(o,d){this.i?this.i.overrideFile(o,d):this.C[o]=d},i.clearOverriddenFiles=function(){this.C={},this.i&&this.i.clearOverriddenFiles()},i.send=function(o,d){var g=this,e,u,m,t,c,a,b,S,L;return Zt(function(C){switch(C.g){case 1:return g.g.inputs?(e=1e3*(d==null?performance.now():d),P(C,g.D,2)):C.return();case 2:return P(C,g.initialize(),3);case 3:for(u=new g.h.PacketDataList,m=T(Object.keys(o)),t=m.next();!t.done;t=m.next())if(c=t.value,a=g.g.inputs[c]){t:{var U=o[c];switch(a.type){case"video":var z=g.o[a.stream];if(z||(z=new A(g.h,g.G),g.o[a.stream]=z),z.l===0&&(z.l=z.h.createTexture()),typeof HTMLVideoElement<"u"&&U instanceof HTMLVideoElement)var Q=U.videoWidth,D=U.videoHeight;else typeof HTMLImageElement<"u"&&U instanceof HTMLImageElement?(Q=U.naturalWidth,D=U.naturalHeight):(Q=U.width,D=U.height);D={glName:z.l,width:Q,height:D},Q=z.g,Q.canvas.width=D.width,Q.canvas.height=D.height,Q.activeTexture(Q.TEXTURE0),z.h.bindTexture2d(z.l),Q.texImage2D(Q.TEXTURE_2D,0,Q.RGBA,Q.RGBA,Q.UNSIGNED_BYTE,U),z.h.bindTexture2d(0),z=D;break t;case"detections":for(z=g.o[a.stream],z||(z=new $(g.h),g.o[a.stream]=z),z.data||(z.data=new z.g.DetectionListData),z.data.reset(U.length),D=0;D<U.length;++D){Q=U[D];var st=z.data,ft=st.setBoundingBox,mt=D,Gt=Q.boundingBox,vt=new G;if(Ct(vt,1,Gt.xCenter),Ct(vt,2,Gt.yCenter),Ct(vt,3,Gt.height),Ct(vt,4,Gt.width),Ct(vt,5,Gt.rotation),Ct(vt,6,Gt.rectId),Gt=O(vt,H),ft.call(st,mt,Gt),Q.landmarks)for(st=0;st<Q.landmarks.length;++st){vt=Q.landmarks[st];var At=!!vt.visibility;ft=z.data,mt=ft.addNormalizedLandmark,Gt=D,vt=Object.assign(Object.assign({},vt),{visibility:At?vt.visibility:0}),At=new pe,Ct(At,1,vt.x),Ct(At,2,vt.y),Ct(At,3,vt.z),vt.visibility&&Ct(At,4,vt.visibility),vt=O(At,ge),mt.call(ft,Gt,vt)}if(Q.V)for(st=0;st<Q.V.length;++st)ft=z.data,mt=ft.addClassification,Gt=D,vt=Q.V[st],At=new Nt,Ct(At,2,vt.ga),vt.index&&Ct(At,1,vt.index),vt.label&&Ct(At,3,vt.label),vt.displayName&&Ct(At,4,vt.displayName),vt=O(At,Tt),mt.call(ft,Gt,vt)}z=z.data;break t;default:z={}}}switch(b=z,S=a.stream,a.type){case"video":u.pushTexture2d(Object.assign(Object.assign({},b),{stream:S,timestamp:e}));break;case"detections":L=b,L.stream=S,L.timestamp=e,u.pushDetectionList(L);break;default:throw Error("Unknown input config type: '"+a.type+"'")}}return g.i.send(u),P(C,g.D,4);case 4:u.delete(),C.g=0}})};function v(o,d,g){var e,u,m,t,c,a,b,S,L,C,U,z,Q,D;return Zt(function(st){switch(st.g){case 1:if(!g)return st.return(d);for(e={},u=0,m=T(Object.keys(g)),t=m.next();!t.done;t=m.next())c=t.value,a=g[c],typeof a!="string"&&a.type==="texture"&&d[a.stream]!==void 0&&++u;1<u&&(o.I=!1),b=T(Object.keys(g)),t=b.next();case 2:if(t.done){st.g=4;break}if(S=t.value,L=g[S],typeof L=="string")return Q=e,D=S,P(st,x(o,S,d[L]),14);if(C=d[L.stream],L.type==="detection_list"){if(C){for(var ft=C.getRectList(),mt=C.getLandmarksList(),Gt=C.getClassificationsList(),vt=[],At=0;At<ft.size();++At){var le=V(ft.get(At),G,H);le={boundingBox:{xCenter:oe(le,1),yCenter:oe(le,2),height:oe(le,3),width:oe(le,4),rotation:oe(le,5,0),rectId:se(le,6)},landmarks:Le(V(mt.get(At),Ne,h),pe,1).map(N),V:w(V(Gt.get(At),Et,Dt))},vt.push(le)}ft=vt}else ft=[];e[S]=ft,st.g=7;break}if(L.type==="proto_list"){if(C){for(ft=Array(C.size()),mt=0;mt<C.size();mt++)ft[mt]=C.get(mt);C.delete()}else ft=[];e[S]=ft,st.g=7;break}if(C===void 0){st.g=3;break}if(L.type==="float_list"){e[S]=C,st.g=7;break}if(L.type==="proto"){e[S]=C,st.g=7;break}if(L.type!=="texture")throw Error("Unknown output config type: '"+L.type+"'");return U=o.u[S],U||(U=new A(o.h,o.G),o.u[S]=U),P(st,B(U,C,o.I),13);case 13:z=st.h,e[S]=z;case 7:L.transform&&e[S]&&(e[S]=L.transform(e[S])),st.g=3;break;case 14:Q[D]=st.h;case 3:t=b.next(),st.g=2;break;case 4:return st.return(e)}})}function x(o,d,g){var e;return Zt(function(u){return typeof g=="number"||g instanceof Uint8Array||g instanceof o.h.Uint8BlobList?u.return(g):g instanceof o.h.Texture2dDataOut?(e=o.u[d],e||(e=new A(o.h,o.G),o.u[d]=e),u.return(B(e,g,o.I))):u.return(void 0)})}function Y(o,d){for(var g=d.name||"$",e=[].concat(J(d.wants)),u=new o.h.StringList,m=T(d.wants),t=m.next();!t.done;t=m.next())u.push_back(t.value);m=o.h.PacketListener.implement({onResults:function(c){for(var a={},b=0;b<d.wants.length;++b)a[e[b]]=c.get(b);var S=o.listeners[g];S&&(o.D=v(o,a,d.outs).then(function(L){L=S(L);for(var C=0;C<d.wants.length;++C){var U=a[e[C]];typeof U=="object"&&U.hasOwnProperty&&U.hasOwnProperty("delete")&&U.delete()}L&&(o.D=L)}))}}),o.i.attachMultiListener(u,m),u.delete()}i.onResults=function(o,d){this.listeners[d||"$"]=o},Ht("Solution",Wt),Ht("OptionType",{BOOL:0,NUMBER:1,ia:2,0:"BOOL",1:"NUMBER",2:"STRING"});function k(o){var d=this;o=o||{};var g={url:"face_detection_short.binarypb"},e={type:1,graphOptionXref:{calculatorType:"TensorsToDetectionsCalculator",calculatorName:"facedetectionshortrangegpu__facedetectionshortrangecommon__TensorsToDetectionsCalculator",fieldName:"min_score_thresh"}};this.g=new Wt({locateFile:o.locateFile,files:[{data:!0,url:"face_detection_short.binarypb"},{data:!0,url:"face_detection_short_range.tflite"},{simd:!0,url:"face_detection_solution_simd_wasm_bin.js"},{simd:!1,url:"face_detection_solution_wasm_bin.js"}],graph:g,listeners:[{wants:["detections","image_transformed"],outs:{image:"image_transformed",detections:{type:"detection_list",stream:"detections"}}}],inputs:{image:{type:"video",stream:"input_frames_gpu"}},options:{useCpuInference:{type:0,graphOptionXref:{calculatorType:"InferenceCalculator",fieldName:"use_cpu_inference"},default:typeof window!="object"||window.navigator===void 0?!1:"iPad Simulator;iPhone Simulator;iPod Simulator;iPad;iPhone;iPod".split(";").includes(navigator.platform)||navigator.userAgent.includes("Mac")&&"ontouchend"in document},selfieMode:{type:0,graphOptionXref:{calculatorType:"GlScalerCalculator",calculatorIndex:1,fieldName:"flip_horizontal"}},model:{type:0,onChange:function(u){var m,t,c,a,b,S;return Zt(function(L){switch(L.g){case 1:m=u==="short"?["face_detection_short_range.tflite"]:["face_detection_full_range_sparse.tflite"],t=T(m),c=t.next();case 2:if(c.done){L.g=4;break}return a=c.value,b="third_party/mediapipe/modules/face_detection/"+a,P(L,l(d.g,a),5);case 5:S=L.h,d.g.overrideFile(b,S),c=t.next(),L.g=2;break;case 4:return g.url=u==="short"?"face_detection_short.binarypb":"face_detection_full.binarypb",e.graphOptionXref.calculatorName=u==="short"?"facedetectionshortrangegpu__facedetectionshortrangecommon__TensorsToDetectionsCalculator":"facedetectionfullrangegpu__facedetectionfullrangecommon__TensorsToDetectionsCalculator",L.return(!0)}})}},minDetectionConfidence:e}})}i=k.prototype,i.close=function(){return this.g.close(),Promise.resolve()},i.onResults=function(o){this.g.onResults(o)},i.initialize=function(){var o=this;return Zt(function(d){return P(d,o.g.initialize(),0)})},i.reset=function(){this.g.reset()},i.send=function(o){var d=this;return Zt(function(g){return P(g,d.g.send(o),0)})},i.setOptions=function(o){this.g.setOptions(o)},Ht("FaceDetection",k),Ht("FACEDETECTION_LIPS",K),Ht("FACEDETECTION_LEFT_EYE",_),Ht("FACEDETECTION_LEFT_EYEBROW",M),Ht("FACEDETECTION_RIGHT_EYE",q),Ht("FACEDETECTION_RIGHT_EYEBROW",ct),Ht("FACEDETECTION_FACE_OVAL",s),Ht("FACEDETECTION_CONTOURS",X),Ht("FACEDETECTION_TESSELATION",[[127,34],[34,139],[139,127],[11,0],[0,37],[37,11],[232,231],[231,120],[120,232],[72,37],[37,39],[39,72],[128,121],[121,47],[47,128],[232,121],[121,128],[128,232],[104,69],[69,67],[67,104],[175,171],[171,148],[148,175],[118,50],[50,101],[101,118],[73,39],[39,40],[40,73],[9,151],[151,108],[108,9],[48,115],[115,131],[131,48],[194,204],[204,211],[211,194],[74,40],[40,185],[185,74],[80,42],[42,183],[183,80],[40,92],[92,186],[186,40],[230,229],[229,118],[118,230],[202,212],[212,214],[214,202],[83,18],[18,17],[17,83],[76,61],[61,146],[146,76],[160,29],[29,30],[30,160],[56,157],[157,173],[173,56],[106,204],[204,194],[194,106],[135,214],[214,192],[192,135],[203,165],[165,98],[98,203],[21,71],[71,68],[68,21],[51,45],[45,4],[4,51],[144,24],[24,23],[23,144],[77,146],[146,91],[91,77],[205,50],[50,187],[187,205],[201,200],[200,18],[18,201],[91,106],[106,182],[182,91],[90,91],[91,181],[181,90],[85,84],[84,17],[17,85],[206,203],[203,36],[36,206],[148,171],[171,140],[140,148],[92,40],[40,39],[39,92],[193,189],[189,244],[244,193],[159,158],[158,28],[28,159],[247,246],[246,161],[161,247],[236,3],[3,196],[196,236],[54,68],[68,104],[104,54],[193,168],[168,8],[8,193],[117,228],[228,31],[31,117],[189,193],[193,55],[55,189],[98,97],[97,99],[99,98],[126,47],[47,100],[100,126],[166,79],[79,218],[218,166],[155,154],[154,26],[26,155],[209,49],[49,131],[131,209],[135,136],[136,150],[150,135],[47,126],[126,217],[217,47],[223,52],[52,53],[53,223],[45,51],[51,134],[134,45],[211,170],[170,140],[140,211],[67,69],[69,108],[108,67],[43,106],[106,91],[91,43],[230,119],[119,120],[120,230],[226,130],[130,247],[247,226],[63,53],[53,52],[52,63],[238,20],[20,242],[242,238],[46,70],[70,156],[156,46],[78,62],[62,96],[96,78],[46,53],[53,63],[63,46],[143,34],[34,227],[227,143],[123,117],[117,111],[111,123],[44,125],[125,19],[19,44],[236,134],[134,51],[51,236],[216,206],[206,205],[205,216],[154,153],[153,22],[22,154],[39,37],[37,167],[167,39],[200,201],[201,208],[208,200],[36,142],[142,100],[100,36],[57,212],[212,202],[202,57],[20,60],[60,99],[99,20],[28,158],[158,157],[157,28],[35,226],[226,113],[113,35],[160,159],[159,27],[27,160],[204,202],[202,210],[210,204],[113,225],[225,46],[46,113],[43,202],[202,204],[204,43],[62,76],[76,77],[77,62],[137,123],[123,116],[116,137],[41,38],[38,72],[72,41],[203,129],[129,142],[142,203],[64,98],[98,240],[240,64],[49,102],[102,64],[64,49],[41,73],[73,74],[74,41],[212,216],[216,207],[207,212],[42,74],[74,184],[184,42],[169,170],[170,211],[211,169],[170,149],[149,176],[176,170],[105,66],[66,69],[69,105],[122,6],[6,168],[168,122],[123,147],[147,187],[187,123],[96,77],[77,90],[90,96],[65,55],[55,107],[107,65],[89,90],[90,180],[180,89],[101,100],[100,120],[120,101],[63,105],[105,104],[104,63],[93,137],[137,227],[227,93],[15,86],[86,85],[85,15],[129,102],[102,49],[49,129],[14,87],[87,86],[86,14],[55,8],[8,9],[9,55],[100,47],[47,121],[121,100],[145,23],[23,22],[22,145],[88,89],[89,179],[179,88],[6,122],[122,196],[196,6],[88,95],[95,96],[96,88],[138,172],[172,136],[136,138],[215,58],[58,172],[172,215],[115,48],[48,219],[219,115],[42,80],[80,81],[81,42],[195,3],[3,51],[51,195],[43,146],[146,61],[61,43],[171,175],[175,199],[199,171],[81,82],[82,38],[38,81],[53,46],[46,225],[225,53],[144,163],[163,110],[110,144],[52,65],[65,66],[66,52],[229,228],[228,117],[117,229],[34,127],[127,234],[234,34],[107,108],[108,69],[69,107],[109,108],[108,151],[151,109],[48,64],[64,235],[235,48],[62,78],[78,191],[191,62],[129,209],[209,126],[126,129],[111,35],[35,143],[143,111],[117,123],[123,50],[50,117],[222,65],[65,52],[52,222],[19,125],[125,141],[141,19],[221,55],[55,65],[65,221],[3,195],[195,197],[197,3],[25,7],[7,33],[33,25],[220,237],[237,44],[44,220],[70,71],[71,139],[139,70],[122,193],[193,245],[245,122],[247,130],[130,33],[33,247],[71,21],[21,162],[162,71],[170,169],[169,150],[150,170],[188,174],[174,196],[196,188],[216,186],[186,92],[92,216],[2,97],[97,167],[167,2],[141,125],[125,241],[241,141],[164,167],[167,37],[37,164],[72,38],[38,12],[12,72],[38,82],[82,13],[13,38],[63,68],[68,71],[71,63],[226,35],[35,111],[111,226],[101,50],[50,205],[205,101],[206,92],[92,165],[165,206],[209,198],[198,217],[217,209],[165,167],[167,97],[97,165],[220,115],[115,218],[218,220],[133,112],[112,243],[243,133],[239,238],[238,241],[241,239],[214,135],[135,169],[169,214],[190,173],[173,133],[133,190],[171,208],[208,32],[32,171],[125,44],[44,237],[237,125],[86,87],[87,178],[178,86],[85,86],[86,179],[179,85],[84,85],[85,180],[180,84],[83,84],[84,181],[181,83],[201,83],[83,182],[182,201],[137,93],[93,132],[132,137],[76,62],[62,183],[183,76],[61,76],[76,184],[184,61],[57,61],[61,185],[185,57],[212,57],[57,186],[186,212],[214,207],[207,187],[187,214],[34,143],[143,156],[156,34],[79,239],[239,237],[237,79],[123,137],[137,177],[177,123],[44,1],[1,4],[4,44],[201,194],[194,32],[32,201],[64,102],[102,129],[129,64],[213,215],[215,138],[138,213],[59,166],[166,219],[219,59],[242,99],[99,97],[97,242],[2,94],[94,141],[141,2],[75,59],[59,235],[235,75],[24,110],[110,228],[228,24],[25,130],[130,226],[226,25],[23,24],[24,229],[229,23],[22,23],[23,230],[230,22],[26,22],[22,231],[231,26],[112,26],[26,232],[232,112],[189,190],[190,243],[243,189],[221,56],[56,190],[190,221],[28,56],[56,221],[221,28],[27,28],[28,222],[222,27],[29,27],[27,223],[223,29],[30,29],[29,224],[224,30],[247,30],[30,225],[225,247],[238,79],[79,20],[20,238],[166,59],[59,75],[75,166],[60,75],[75,240],[240,60],[147,177],[177,215],[215,147],[20,79],[79,166],[166,20],[187,147],[147,213],[213,187],[112,233],[233,244],[244,112],[233,128],[128,245],[245,233],[128,114],[114,188],[188,128],[114,217],[217,174],[174,114],[131,115],[115,220],[220,131],[217,198],[198,236],[236,217],[198,131],[131,134],[134,198],[177,132],[132,58],[58,177],[143,35],[35,124],[124,143],[110,163],[163,7],[7,110],[228,110],[110,25],[25,228],[356,389],[389,368],[368,356],[11,302],[302,267],[267,11],[452,350],[350,349],[349,452],[302,303],[303,269],[269,302],[357,343],[343,277],[277,357],[452,453],[453,357],[357,452],[333,332],[332,297],[297,333],[175,152],[152,377],[377,175],[347,348],[348,330],[330,347],[303,304],[304,270],[270,303],[9,336],[336,337],[337,9],[278,279],[279,360],[360,278],[418,262],[262,431],[431,418],[304,408],[408,409],[409,304],[310,415],[415,407],[407,310],[270,409],[409,410],[410,270],[450,348],[348,347],[347,450],[422,430],[430,434],[434,422],[313,314],[314,17],[17,313],[306,307],[307,375],[375,306],[387,388],[388,260],[260,387],[286,414],[414,398],[398,286],[335,406],[406,418],[418,335],[364,367],[367,416],[416,364],[423,358],[358,327],[327,423],[251,284],[284,298],[298,251],[281,5],[5,4],[4,281],[373,374],[374,253],[253,373],[307,320],[320,321],[321,307],[425,427],[427,411],[411,425],[421,313],[313,18],[18,421],[321,405],[405,406],[406,321],[320,404],[404,405],[405,320],[315,16],[16,17],[17,315],[426,425],[425,266],[266,426],[377,400],[400,369],[369,377],[322,391],[391,269],[269,322],[417,465],[465,464],[464,417],[386,257],[257,258],[258,386],[466,260],[260,388],[388,466],[456,399],[399,419],[419,456],[284,332],[332,333],[333,284],[417,285],[285,8],[8,417],[346,340],[340,261],[261,346],[413,441],[441,285],[285,413],[327,460],[460,328],[328,327],[355,371],[371,329],[329,355],[392,439],[439,438],[438,392],[382,341],[341,256],[256,382],[429,420],[420,360],[360,429],[364,394],[394,379],[379,364],[277,343],[343,437],[437,277],[443,444],[444,283],[283,443],[275,440],[440,363],[363,275],[431,262],[262,369],[369,431],[297,338],[338,337],[337,297],[273,375],[375,321],[321,273],[450,451],[451,349],[349,450],[446,342],[342,467],[467,446],[293,334],[334,282],[282,293],[458,461],[461,462],[462,458],[276,353],[353,383],[383,276],[308,324],[324,325],[325,308],[276,300],[300,293],[293,276],[372,345],[345,447],[447,372],[352,345],[345,340],[340,352],[274,1],[1,19],[19,274],[456,248],[248,281],[281,456],[436,427],[427,425],[425,436],[381,256],[256,252],[252,381],[269,391],[391,393],[393,269],[200,199],[199,428],[428,200],[266,330],[330,329],[329,266],[287,273],[273,422],[422,287],[250,462],[462,328],[328,250],[258,286],[286,384],[384,258],[265,353],[353,342],[342,265],[387,259],[259,257],[257,387],[424,431],[431,430],[430,424],[342,353],[353,276],[276,342],[273,335],[335,424],[424,273],[292,325],[325,307],[307,292],[366,447],[447,345],[345,366],[271,303],[303,302],[302,271],[423,266],[266,371],[371,423],[294,455],[455,460],[460,294],[279,278],[278,294],[294,279],[271,272],[272,304],[304,271],[432,434],[434,427],[427,432],[272,407],[407,408],[408,272],[394,430],[430,431],[431,394],[395,369],[369,400],[400,395],[334,333],[333,299],[299,334],[351,417],[417,168],[168,351],[352,280],[280,411],[411,352],[325,319],[319,320],[320,325],[295,296],[296,336],[336,295],[319,403],[403,404],[404,319],[330,348],[348,349],[349,330],[293,298],[298,333],[333,293],[323,454],[454,447],[447,323],[15,16],[16,315],[315,15],[358,429],[429,279],[279,358],[14,15],[15,316],[316,14],[285,336],[336,9],[9,285],[329,349],[349,350],[350,329],[374,380],[380,252],[252,374],[318,402],[402,403],[403,318],[6,197],[197,419],[419,6],[318,319],[319,325],[325,318],[367,364],[364,365],[365,367],[435,367],[367,397],[397,435],[344,438],[438,439],[439,344],[272,271],[271,311],[311,272],[195,5],[5,281],[281,195],[273,287],[287,291],[291,273],[396,428],[428,199],[199,396],[311,271],[271,268],[268,311],[283,444],[444,445],[445,283],[373,254],[254,339],[339,373],[282,334],[334,296],[296,282],[449,347],[347,346],[346,449],[264,447],[447,454],[454,264],[336,296],[296,299],[299,336],[338,10],[10,151],[151,338],[278,439],[439,455],[455,278],[292,407],[407,415],[415,292],[358,371],[371,355],[355,358],[340,345],[345,372],[372,340],[346,347],[347,280],[280,346],[442,443],[443,282],[282,442],[19,94],[94,370],[370,19],[441,442],[442,295],[295,441],[248,419],[419,197],[197,248],[263,255],[255,359],[359,263],[440,275],[275,274],[274,440],[300,383],[383,368],[368,300],[351,412],[412,465],[465,351],[263,467],[467,466],[466,263],[301,368],[368,389],[389,301],[395,378],[378,379],[379,395],[412,351],[351,419],[419,412],[436,426],[426,322],[322,436],[2,164],[164,393],[393,2],[370,462],[462,461],[461,370],[164,0],[0,267],[267,164],[302,11],[11,12],[12,302],[268,12],[12,13],[13,268],[293,300],[300,301],[301,293],[446,261],[261,340],[340,446],[330,266],[266,425],[425,330],[426,423],[423,391],[391,426],[429,355],[355,437],[437,429],[391,327],[327,326],[326,391],[440,457],[457,438],[438,440],[341,382],[382,362],[362,341],[459,457],[457,461],[461,459],[434,430],[430,394],[394,434],[414,463],[463,362],[362,414],[396,369],[369,262],[262,396],[354,461],[461,457],[457,354],[316,403],[403,402],[402,316],[315,404],[404,403],[403,315],[314,405],[405,404],[404,314],[313,406],[406,405],[405,313],[421,418],[418,406],[406,421],[366,401],[401,361],[361,366],[306,408],[408,407],[407,306],[291,409],[409,408],[408,291],[287,410],[410,409],[409,287],[432,436],[436,410],[410,432],[434,416],[416,411],[411,434],[264,368],[368,383],[383,264],[309,438],[438,457],[457,309],[352,376],[376,401],[401,352],[274,275],[275,4],[4,274],[421,428],[428,262],[262,421],[294,327],[327,358],[358,294],[433,416],[416,367],[367,433],[289,455],[455,439],[439,289],[462,370],[370,326],[326,462],[2,326],[326,370],[370,2],[305,460],[460,455],[455,305],[254,449],[449,448],[448,254],[255,261],[261,446],[446,255],[253,450],[450,449],[449,253],[252,451],[451,450],[450,252],[256,452],[452,451],[451,256],[341,453],[453,452],[452,341],[413,464],[464,463],[463,413],[441,413],[413,414],[414,441],[258,442],[442,441],[441,258],[257,443],[443,442],[442,257],[259,444],[444,443],[443,259],[260,445],[445,444],[444,260],[467,342],[342,445],[445,467],[459,458],[458,250],[250,459],[289,392],[392,290],[290,289],[290,328],[328,460],[460,290],[376,433],[433,435],[435,376],[250,290],[290,392],[392,250],[411,416],[416,433],[433,411],[341,463],[463,464],[464,341],[453,464],[464,465],[465,453],[357,465],[465,412],[412,357],[343,412],[412,399],[399,343],[360,363],[363,440],[440,360],[437,399],[399,456],[456,437],[420,456],[456,363],[363,420],[401,435],[435,288],[288,401],[372,383],[383,353],[353,372],[339,255],[255,249],[249,339],[448,261],[261,255],[255,448],[133,243],[243,190],[190,133],[133,155],[155,112],[112,133],[33,246],[246,247],[247,33],[33,130],[130,25],[25,33],[398,384],[384,286],[286,398],[362,398],[398,414],[414,362],[362,463],[463,341],[341,362],[263,359],[359,467],[467,263],[263,249],[249,255],[255,263],[466,467],[467,260],[260,466],[75,60],[60,166],[166,75],[238,239],[239,79],[79,238],[162,127],[127,139],[139,162],[72,11],[11,37],[37,72],[121,232],[232,120],[120,121],[73,72],[72,39],[39,73],[114,128],[128,47],[47,114],[233,232],[232,128],[128,233],[103,104],[104,67],[67,103],[152,175],[175,148],[148,152],[119,118],[118,101],[101,119],[74,73],[73,40],[40,74],[107,9],[9,108],[108,107],[49,48],[48,131],[131,49],[32,194],[194,211],[211,32],[184,74],[74,185],[185,184],[191,80],[80,183],[183,191],[185,40],[40,186],[186,185],[119,230],[230,118],[118,119],[210,202],[202,214],[214,210],[84,83],[83,17],[17,84],[77,76],[76,146],[146,77],[161,160],[160,30],[30,161],[190,56],[56,173],[173,190],[182,106],[106,194],[194,182],[138,135],[135,192],[192,138],[129,203],[203,98],[98,129],[54,21],[21,68],[68,54],[5,51],[51,4],[4,5],[145,144],[144,23],[23,145],[90,77],[77,91],[91,90],[207,205],[205,187],[187,207],[83,201],[201,18],[18,83],[181,91],[91,182],[182,181],[180,90],[90,181],[181,180],[16,85],[85,17],[17,16],[205,206],[206,36],[36,205],[176,148],[148,140],[140,176],[165,92],[92,39],[39,165],[245,193],[193,244],[244,245],[27,159],[159,28],[28,27],[30,247],[247,161],[161,30],[174,236],[236,196],[196,174],[103,54],[54,104],[104,103],[55,193],[193,8],[8,55],[111,117],[117,31],[31,111],[221,189],[189,55],[55,221],[240,98],[98,99],[99,240],[142,126],[126,100],[100,142],[219,166],[166,218],[218,219],[112,155],[155,26],[26,112],[198,209],[209,131],[131,198],[169,135],[135,150],[150,169],[114,47],[47,217],[217,114],[224,223],[223,53],[53,224],[220,45],[45,134],[134,220],[32,211],[211,140],[140,32],[109,67],[67,108],[108,109],[146,43],[43,91],[91,146],[231,230],[230,120],[120,231],[113,226],[226,247],[247,113],[105,63],[63,52],[52,105],[241,238],[238,242],[242,241],[124,46],[46,156],[156,124],[95,78],[78,96],[96,95],[70,46],[46,63],[63,70],[116,143],[143,227],[227,116],[116,123],[123,111],[111,116],[1,44],[44,19],[19,1],[3,236],[236,51],[51,3],[207,216],[216,205],[205,207],[26,154],[154,22],[22,26],[165,39],[39,167],[167,165],[199,200],[200,208],[208,199],[101,36],[36,100],[100,101],[43,57],[57,202],[202,43],[242,20],[20,99],[99,242],[56,28],[28,157],[157,56],[124,35],[35,113],[113,124],[29,160],[160,27],[27,29],[211,204],[204,210],[210,211],[124,113],[113,46],[46,124],[106,43],[43,204],[204,106],[96,62],[62,77],[77,96],[227,137],[137,116],[116,227],[73,41],[41,72],[72,73],[36,203],[203,142],[142,36],[235,64],[64,240],[240,235],[48,49],[49,64],[64,48],[42,41],[41,74],[74,42],[214,212],[212,207],[207,214],[183,42],[42,184],[184,183],[210,169],[169,211],[211,210],[140,170],[170,176],[176,140],[104,105],[105,69],[69,104],[193,122],[122,168],[168,193],[50,123],[123,187],[187,50],[89,96],[96,90],[90,89],[66,65],[65,107],[107,66],[179,89],[89,180],[180,179],[119,101],[101,120],[120,119],[68,63],[63,104],[104,68],[234,93],[93,227],[227,234],[16,15],[15,85],[85,16],[209,129],[129,49],[49,209],[15,14],[14,86],[86,15],[107,55],[55,9],[9,107],[120,100],[100,121],[121,120],[153,145],[145,22],[22,153],[178,88],[88,179],[179,178],[197,6],[6,196],[196,197],[89,88],[88,96],[96,89],[135,138],[138,136],[136,135],[138,215],[215,172],[172,138],[218,115],[115,219],[219,218],[41,42],[42,81],[81,41],[5,195],[195,51],[51,5],[57,43],[43,61],[61,57],[208,171],[171,199],[199,208],[41,81],[81,38],[38,41],[224,53],[53,225],[225,224],[24,144],[144,110],[110,24],[105,52],[52,66],[66,105],[118,229],[229,117],[117,118],[227,34],[34,234],[234,227],[66,107],[107,69],[69,66],[10,109],[109,151],[151,10],[219,48],[48,235],[235,219],[183,62],[62,191],[191,183],[142,129],[129,126],[126,142],[116,111],[111,143],[143,116],[118,117],[117,50],[50,118],[223,222],[222,52],[52,223],[94,19],[19,141],[141,94],[222,221],[221,65],[65,222],[196,3],[3,197],[197,196],[45,220],[220,44],[44,45],[156,70],[70,139],[139,156],[188,122],[122,245],[245,188],[139,71],[71,162],[162,139],[149,170],[170,150],[150,149],[122,188],[188,196],[196,122],[206,216],[216,92],[92,206],[164,2],[2,167],[167,164],[242,141],[141,241],[241,242],[0,164],[164,37],[37,0],[11,72],[72,12],[12,11],[12,38],[38,13],[13,12],[70,63],[63,71],[71,70],[31,226],[226,111],[111,31],[36,101],[101,205],[205,36],[203,206],[206,165],[165,203],[126,209],[209,217],[217,126],[98,165],[165,97],[97,98],[237,220],[220,218],[218,237],[237,239],[239,241],[241,237],[210,214],[214,169],[169,210],[140,171],[171,32],[32,140],[241,125],[125,237],[237,241],[179,86],[86,178],[178,179],[180,85],[85,179],[179,180],[181,84],[84,180],[180,181],[182,83],[83,181],[181,182],[194,201],[201,182],[182,194],[177,137],[137,132],[132,177],[184,76],[76,183],[183,184],[185,61],[61,184],[184,185],[186,57],[57,185],[185,186],[216,212],[212,186],[186,216],[192,214],[214,187],[187,192],[139,34],[34,156],[156,139],[218,79],[79,237],[237,218],[147,123],[123,177],[177,147],[45,44],[44,4],[4,45],[208,201],[201,32],[32,208],[98,64],[64,129],[129,98],[192,213],[213,138],[138,192],[235,59],[59,219],[219,235],[141,242],[242,97],[97,141],[97,2],[2,141],[141,97],[240,75],[75,235],[235,240],[229,24],[24,228],[228,229],[31,25],[25,226],[226,31],[230,23],[23,229],[229,230],[231,22],[22,230],[230,231],[232,26],[26,231],[231,232],[233,112],[112,232],[232,233],[244,189],[189,243],[243,244],[189,221],[221,190],[190,189],[222,28],[28,221],[221,222],[223,27],[27,222],[222,223],[224,29],[29,223],[223,224],[225,30],[30,224],[224,225],[113,247],[247,225],[225,113],[99,60],[60,240],[240,99],[213,147],[147,215],[215,213],[60,20],[20,166],[166,60],[192,187],[187,213],[213,192],[243,112],[112,244],[244,243],[244,233],[233,245],[245,244],[245,128],[128,188],[188,245],[188,114],[114,174],[174,188],[134,131],[131,220],[220,134],[174,217],[217,236],[236,174],[236,198],[198,134],[134,236],[215,177],[177,58],[58,215],[156,143],[143,124],[124,156],[25,110],[110,7],[7,25],[31,228],[228,25],[25,31],[264,356],[356,368],[368,264],[0,11],[11,267],[267,0],[451,452],[452,349],[349,451],[267,302],[302,269],[269,267],[350,357],[357,277],[277,350],[350,452],[452,357],[357,350],[299,333],[333,297],[297,299],[396,175],[175,377],[377,396],[280,347],[347,330],[330,280],[269,303],[303,270],[270,269],[151,9],[9,337],[337,151],[344,278],[278,360],[360,344],[424,418],[418,431],[431,424],[270,304],[304,409],[409,270],[272,310],[310,407],[407,272],[322,270],[270,410],[410,322],[449,450],[450,347],[347,449],[432,422],[422,434],[434,432],[18,313],[313,17],[17,18],[291,306],[306,375],[375,291],[259,387],[387,260],[260,259],[424,335],[335,418],[418,424],[434,364],[364,416],[416,434],[391,423],[423,327],[327,391],[301,251],[251,298],[298,301],[275,281],[281,4],[4,275],[254,373],[373,253],[253,254],[375,307],[307,321],[321,375],[280,425],[425,411],[411,280],[200,421],[421,18],[18,200],[335,321],[321,406],[406,335],[321,320],[320,405],[405,321],[314,315],[315,17],[17,314],[423,426],[426,266],[266,423],[396,377],[377,369],[369,396],[270,322],[322,269],[269,270],[413,417],[417,464],[464,413],[385,386],[386,258],[258,385],[248,456],[456,419],[419,248],[298,284],[284,333],[333,298],[168,417],[417,8],[8,168],[448,346],[346,261],[261,448],[417,413],[413,285],[285,417],[326,327],[327,328],[328,326],[277,355],[355,329],[329,277],[309,392],[392,438],[438,309],[381,382],[382,256],[256,381],[279,429],[429,360],[360,279],[365,364],[364,379],[379,365],[355,277],[277,437],[437,355],[282,443],[443,283],[283,282],[281,275],[275,363],[363,281],[395,431],[431,369],[369,395],[299,297],[297,337],[337,299],[335,273],[273,321],[321,335],[348,450],[450,349],[349,348],[359,446],[446,467],[467,359],[283,293],[293,282],[282,283],[250,458],[458,462],[462,250],[300,276],[276,383],[383,300],[292,308],[308,325],[325,292],[283,276],[276,293],[293,283],[264,372],[372,447],[447,264],[346,352],[352,340],[340,346],[354,274],[274,19],[19,354],[363,456],[456,281],[281,363],[426,436],[436,425],[425,426],[380,381],[381,252],[252,380],[267,269],[269,393],[393,267],[421,200],[200,428],[428,421],[371,266],[266,329],[329,371],[432,287],[287,422],[422,432],[290,250],[250,328],[328,290],[385,258],[258,384],[384,385],[446,265],[265,342],[342,446],[386,387],[387,257],[257,386],[422,424],[424,430],[430,422],[445,342],[342,276],[276,445],[422,273],[273,424],[424,422],[306,292],[292,307],[307,306],[352,366],[366,345],[345,352],[268,271],[271,302],[302,268],[358,423],[423,371],[371,358],[327,294],[294,460],[460,327],[331,279],[279,294],[294,331],[303,271],[271,304],[304,303],[436,432],[432,427],[427,436],[304,272],[272,408],[408,304],[395,394],[394,431],[431,395],[378,395],[395,400],[400,378],[296,334],[334,299],[299,296],[6,351],[351,168],[168,6],[376,352],[352,411],[411,376],[307,325],[325,320],[320,307],[285,295],[295,336],[336,285],[320,319],[319,404],[404,320],[329,330],[330,349],[349,329],[334,293],[293,333],[333,334],[366,323],[323,447],[447,366],[316,15],[15,315],[315,316],[331,358],[358,279],[279,331],[317,14],[14,316],[316,317],[8,285],[285,9],[9,8],[277,329],[329,350],[350,277],[253,374],[374,252],[252,253],[319,318],[318,403],[403,319],[351,6],[6,419],[419,351],[324,318],[318,325],[325,324],[397,367],[367,365],[365,397],[288,435],[435,397],[397,288],[278,344],[344,439],[439,278],[310,272],[272,311],[311,310],[248,195],[195,281],[281,248],[375,273],[273,291],[291,375],[175,396],[396,199],[199,175],[312,311],[311,268],[268,312],[276,283],[283,445],[445,276],[390,373],[373,339],[339,390],[295,282],[282,296],[296,295],[448,449],[449,346],[346,448],[356,264],[264,454],[454,356],[337,336],[336,299],[299,337],[337,338],[338,151],[151,337],[294,278],[278,455],[455,294],[308,292],[292,415],[415,308],[429,358],[358,355],[355,429],[265,340],[340,372],[372,265],[352,346],[346,280],[280,352],[295,442],[442,282],[282,295],[354,19],[19,370],[370,354],[285,441],[441,295],[295,285],[195,248],[248,197],[197,195],[457,440],[440,274],[274,457],[301,300],[300,368],[368,301],[417,351],[351,465],[465,417],[251,301],[301,389],[389,251],[394,395],[395,379],[379,394],[399,412],[412,419],[419,399],[410,436],[436,322],[322,410],[326,2],[2,393],[393,326],[354,370],[370,461],[461,354],[393,164],[164,267],[267,393],[268,302],[302,12],[12,268],[312,268],[268,13],[13,312],[298,293],[293,301],[301,298],[265,446],[446,340],[340,265],[280,330],[330,425],[425,280],[322,426],[426,391],[391,322],[420,429],[429,437],[437,420],[393,391],[391,326],[326,393],[344,440],[440,438],[438,344],[458,459],[459,461],[461,458],[364,434],[434,394],[394,364],[428,396],[396,262],[262,428],[274,354],[354,457],[457,274],[317,316],[316,402],[402,317],[316,315],[315,403],[403,316],[315,314],[314,404],[404,315],[314,313],[313,405],[405,314],[313,421],[421,406],[406,313],[323,366],[366,361],[361,323],[292,306],[306,407],[407,292],[306,291],[291,408],[408,306],[291,287],[287,409],[409,291],[287,432],[432,410],[410,287],[427,434],[434,411],[411,427],[372,264],[264,383],[383,372],[459,309],[309,457],[457,459],[366,352],[352,401],[401,366],[1,274],[274,4],[4,1],[418,421],[421,262],[262,418],[331,294],[294,358],[358,331],[435,433],[433,367],[367,435],[392,289],[289,439],[439,392],[328,462],[462,326],[326,328],[94,2],[2,370],[370,94],[289,305],[305,455],[455,289],[339,254],[254,448],[448,339],[359,255],[255,446],[446,359],[254,253],[253,449],[449,254],[253,252],[252,450],[450,253],[252,256],[256,451],[451,252],[256,341],[341,452],[452,256],[414,413],[413,463],[463,414],[286,441],[441,414],[414,286],[286,258],[258,441],[441,286],[258,257],[257,442],[442,258],[257,259],[259,443],[443,257],[259,260],[260,444],[444,259],[260,467],[467,445],[445,260],[309,459],[459,250],[250,309],[305,289],[289,290],[290,305],[305,290],[290,460],[460,305],[401,376],[376,435],[435,401],[309,250],[250,392],[392,309],[376,411],[411,433],[433,376],[453,341],[341,464],[464,453],[357,453],[453,465],[465,357],[343,357],[357,412],[412,343],[437,343],[343,399],[399,437],[344,360],[360,440],[440,344],[420,437],[437,456],[456,420],[360,420],[420,363],[363,360],[361,401],[401,288],[288,361],[265,372],[372,353],[353,265],[390,339],[339,249],[249,390],[339,448],[448,255],[255,339]]),Ht("VERSION","0.4.1646425229")}).call(Xi);const Wi={};(function(){var i;function n(h){var y=0;return function(){return y<h.length?{done:!1,value:h[y++]}:{done:!0}}}var r=typeof Object.defineProperties=="function"?Object.defineProperty:function(h,y,G){return h==Array.prototype||h==Object.prototype||(h[y]=G.value),h};function f(h){h=[typeof globalThis=="object"&&globalThis,h,typeof window=="object"&&window,typeof self=="object"&&self,typeof global=="object"&&global];for(var y=0;y<h.length;++y){var G=h[y];if(G&&G.Math==Math)return G}throw Error("Cannot find global object")}var Z=f(this);function I(h,y){if(y)t:{var G=Z;h=h.split(".");for(var H=0;H<h.length-1;H++){var K=h[H];if(!(K in G))break t;G=G[K]}h=h[h.length-1],H=G[h],y=y(H),y!=H&&y!=null&&r(G,h,{configurable:!0,writable:!0,value:y})}}I("Symbol",function(h){function y(_){if(this instanceof y)throw new TypeError("Symbol is not a constructor");return new G(H+(_||"")+"_"+K++,_)}function G(_,M){this.g=_,r(this,"description",{configurable:!0,writable:!0,value:M})}if(h)return h;G.prototype.toString=function(){return this.g};var H="jscomp_symbol_"+(1e9*Math.random()>>>0)+"_",K=0;return y}),I("Symbol.iterator",function(h){if(h)return h;h=Symbol("Symbol.iterator");for(var y="Array Int8Array Uint8Array Uint8ClampedArray Int16Array Uint16Array Int32Array Uint32Array Float32Array Float64Array".split(" "),G=0;G<y.length;G++){var H=Z[y[G]];typeof H=="function"&&typeof H.prototype[h]!="function"&&r(H.prototype,h,{configurable:!0,writable:!0,value:function(){return F(n(this))}})}return h});function F(h){return h={next:h},h[Symbol.iterator]=function(){return this},h}function T(h){var y=typeof Symbol<"u"&&Symbol.iterator&&h[Symbol.iterator];return y?y.call(h):{next:n(h)}}function J(h){if(!(h instanceof Array)){h=T(h);for(var y,G=[];!(y=h.next()).done;)G.push(y.value);h=G}return h}var et=typeof Object.create=="function"?Object.create:function(h){function y(){}return y.prototype=h,new y},lt;if(typeof Object.setPrototypeOf=="function")lt=Object.setPrototypeOf;else{var pt;t:{var Yt={a:!0},Lt={};try{Lt.__proto__=Yt,pt=Lt.a;break t}catch{}pt=!1}lt=pt?function(h,y){if(h.__proto__=y,h.__proto__!==y)throw new TypeError(h+" is not extensible");return h}:null}var at=lt;function dt(h,y){if(h.prototype=et(y.prototype),h.prototype.constructor=h,at)at(h,y);else for(var G in y)if(G!="prototype")if(Object.defineProperties){var H=Object.getOwnPropertyDescriptor(y,G);H&&Object.defineProperty(h,G,H)}else h[G]=y[G];h.ea=y.prototype}function Bt(){this.l=!1,this.i=null,this.h=void 0,this.g=1,this.s=this.m=0,this.j=null}function kt(h){if(h.l)throw new TypeError("Generator is already running");h.l=!0}Bt.prototype.o=function(h){this.h=h};function ee(h,y){h.j={U:y,V:!0},h.g=h.m||h.s}Bt.prototype.return=function(h){this.j={return:h},this.g=this.s};function P(h,y,G){return h.g=G,{value:y}}function De(h){this.g=new Bt,this.h=h}function ze(h,y){kt(h.g);var G=h.g.i;return G?We(h,"return"in G?G.return:function(H){return{value:H,done:!0}},y,h.g.return):(h.g.return(y),zt(h))}function We(h,y,G,H){try{var K=y.call(h.g.i,G);if(!(K instanceof Object))throw new TypeError("Iterator result "+K+" is not an object");if(!K.done)return h.g.l=!1,K;var _=K.value}catch(M){return h.g.i=null,ee(h.g,M),zt(h)}return h.g.i=null,H.call(h.g,_),zt(h)}function zt(h){for(;h.g.g;)try{var y=h.h(h.g);if(y)return h.g.l=!1,{value:y.value,done:!1}}catch(G){h.g.h=void 0,ee(h.g,G)}if(h.g.l=!1,h.g.j){if(y=h.g.j,h.g.j=null,y.V)throw y.U;return{value:y.return,done:!0}}return{value:void 0,done:!0}}function Hn(h){this.next=function(y){return kt(h.g),h.g.i?y=We(h,h.g.i.next,y,h.g.o):(h.g.o(y),y=zt(h)),y},this.throw=function(y){return kt(h.g),h.g.i?y=We(h,h.g.i.throw,y,h.g.o):(ee(h.g,y),y=zt(h)),y},this.return=function(y){return ze(h,y)},this[Symbol.iterator]=function(){return this}}function ne(h,y){return y=new Hn(new De(y)),at&&h.prototype&&at(y,h.prototype),y}function Zt(h,y){h instanceof String&&(h+="");var G=0,H=!1,K={next:function(){if(!H&&G<h.length){var _=G++;return{value:y(_,h[_]),done:!1}}return H=!0,{done:!0,value:void 0}}};return K[Symbol.iterator]=function(){return K},K}var $e=typeof Object.assign=="function"?Object.assign:function(h,y){for(var G=1;G<arguments.length;G++){var H=arguments[G];if(H)for(var K in H)Object.prototype.hasOwnProperty.call(H,K)&&(h[K]=H[K])}return h};I("Object.assign",function(h){return h||$e}),I("Promise",function(h){function y(M){this.h=0,this.i=void 0,this.g=[],this.o=!1;var q=this.j();try{M(q.resolve,q.reject)}catch(ct){q.reject(ct)}}function G(){this.g=null}function H(M){return M instanceof y?M:new y(function(q){q(M)})}if(h)return h;G.prototype.h=function(M){if(this.g==null){this.g=[];var q=this;this.i(function(){q.l()})}this.g.push(M)};var K=Z.setTimeout;G.prototype.i=function(M){K(M,0)},G.prototype.l=function(){for(;this.g&&this.g.length;){var M=this.g;this.g=[];for(var q=0;q<M.length;++q){var ct=M[q];M[q]=null;try{ct()}catch(s){this.j(s)}}}this.g=null},G.prototype.j=function(M){this.i(function(){throw M})},y.prototype.j=function(){function M(s){return function(X){ct||(ct=!0,s.call(q,X))}}var q=this,ct=!1;return{resolve:M(this.C),reject:M(this.l)}},y.prototype.C=function(M){if(M===this)this.l(new TypeError("A Promise cannot resolve to itself"));else if(M instanceof y)this.F(M);else{t:switch(typeof M){case"object":var q=M!=null;break t;case"function":q=!0;break t;default:q=!1}q?this.u(M):this.m(M)}},y.prototype.u=function(M){var q=void 0;try{q=M.then}catch(ct){this.l(ct);return}typeof q=="function"?this.G(q,M):this.m(M)},y.prototype.l=function(M){this.s(2,M)},y.prototype.m=function(M){this.s(1,M)},y.prototype.s=function(M,q){if(this.h!=0)throw Error("Cannot settle("+M+", "+q+"): Promise already settled in state"+this.h);this.h=M,this.i=q,this.h===2&&this.D(),this.A()},y.prototype.D=function(){var M=this;K(function(){if(M.B()){var q=Z.console;typeof q<"u"&&q.error(M.i)}},1)},y.prototype.B=function(){if(this.o)return!1;var M=Z.CustomEvent,q=Z.Event,ct=Z.dispatchEvent;return typeof ct>"u"?!0:(typeof M=="function"?M=new M("unhandledrejection",{cancelable:!0}):typeof q=="function"?M=new q("unhandledrejection",{cancelable:!0}):(M=Z.document.createEvent("CustomEvent"),M.initCustomEvent("unhandledrejection",!1,!0,M)),M.promise=this,M.reason=this.i,ct(M))},y.prototype.A=function(){if(this.g!=null){for(var M=0;M<this.g.length;++M)_.h(this.g[M]);this.g=null}};var _=new G;return y.prototype.F=function(M){var q=this.j();M.J(q.resolve,q.reject)},y.prototype.G=function(M,q){var ct=this.j();try{M.call(q,ct.resolve,ct.reject)}catch(s){ct.reject(s)}},y.prototype.then=function(M,q){function ct(w,N){return typeof w=="function"?function(A){try{s(w(A))}catch(B){X(B)}}:N}var s,X,R=new y(function(w,N){s=w,X=N});return this.J(ct(M,s),ct(q,X)),R},y.prototype.catch=function(M){return this.then(void 0,M)},y.prototype.J=function(M,q){function ct(){switch(s.h){case 1:M(s.i);break;case 2:q(s.i);break;default:throw Error("Unexpected state: "+s.h)}}var s=this;this.g==null?_.h(ct):this.g.push(ct),this.o=!0},y.resolve=H,y.reject=function(M){return new y(function(q,ct){ct(M)})},y.race=function(M){return new y(function(q,ct){for(var s=T(M),X=s.next();!X.done;X=s.next())H(X.value).J(q,ct)})},y.all=function(M){var q=T(M),ct=q.next();return ct.done?H([]):new y(function(s,X){function R(A){return function(B){w[A]=B,N--,N==0&&s(w)}}var w=[],N=0;do w.push(void 0),N++,H(ct.value).J(R(w.length-1),X),ct=q.next();while(!ct.done)})},y}),I("Object.is",function(h){return h||function(y,G){return y===G?y!==0||1/y===1/G:y!==y&&G!==G}}),I("Array.prototype.includes",function(h){return h||function(y,G){var H=this;H instanceof String&&(H=String(H));var K=H.length;for(G=G||0,0>G&&(G=Math.max(G+K,0));G<K;G++){var _=H[G];if(_===y||Object.is(_,y))return!0}return!1}}),I("String.prototype.includes",function(h){return h||function(y,G){if(this==null)throw new TypeError("The 'this' value for String.prototype.includes must not be null or undefined");if(y instanceof RegExp)throw new TypeError("First argument to String.prototype.includes must not be a regular expression");return this.indexOf(y,G||0)!==-1}}),I("Array.prototype.keys",function(h){return h||function(){return Zt(this,function(y){return y})}});var An=this||self;function Re(h,y){h=h.split(".");var G=An;h[0]in G||typeof G.execScript>"u"||G.execScript("var "+h[0]);for(var H;h.length&&(H=h.shift());)h.length||y===void 0?G[H]&&G[H]!==Object.prototype[H]?G=G[H]:G=G[H]={}:G[H]=y}function Ht(h,y){return y=String.fromCharCode.apply(null,y),h==null?y:h+y}var Te,sn=typeof TextDecoder<"u",Gn,Ln=typeof TextEncoder<"u";function Rn(h){if(Ln)h=(Gn||(Gn=new TextEncoder)).encode(h);else{var y=void 0;y=y===void 0?!1:y;for(var G=0,H=new Uint8Array(3*h.length),K=0;K<h.length;K++){var _=h.charCodeAt(K);if(128>_)H[G++]=_;else{if(2048>_)H[G++]=_>>6|192;else{if(55296<=_&&57343>=_){if(56319>=_&&K<h.length){var M=h.charCodeAt(++K);if(56320<=M&&57343>=M){_=1024*(_-55296)+M-56320+65536,H[G++]=_>>18|240,H[G++]=_>>12&63|128,H[G++]=_>>6&63|128,H[G++]=_&63|128;continue}else K--}if(y)throw Error("Found an unpaired surrogate");_=65533}H[G++]=_>>12|224,H[G++]=_>>6&63|128}H[G++]=_&63|128}}h=H.subarray(0,G)}return h}var Jn={},dn=null;function pn(h,y){y===void 0&&(y=0),je(),y=Jn[y];for(var G=Array(Math.floor(h.length/3)),H=y[64]||"",K=0,_=0;K<h.length-2;K+=3){var M=h[K],q=h[K+1],ct=h[K+2],s=y[M>>2];M=y[(M&3)<<4|q>>4],q=y[(q&15)<<2|ct>>6],ct=y[ct&63],G[_++]=s+M+q+ct}switch(s=0,ct=H,h.length-K){case 2:s=h[K+1],ct=y[(s&15)<<2]||H;case 1:h=h[K],G[_]=y[h>>2]+y[(h&3)<<4|s>>4]+ct+H}return G.join("")}function kn(h){var y=h.length,G=3*y/4;G%3?G=Math.floor(G):"=.".indexOf(h[y-1])!=-1&&(G="=.".indexOf(h[y-2])!=-1?G-2:G-1);var H=new Uint8Array(G),K=0;return Fn(h,function(_){H[K++]=_}),H.subarray(0,K)}function Fn(h,y){function G(ct){for(;H<h.length;){var s=h.charAt(H++),X=dn[s];if(X!=null)return X;if(!/^[\s\xa0]*$/.test(s))throw Error("Unknown base64 encoding at char: "+s)}return ct}je();for(var H=0;;){var K=G(-1),_=G(0),M=G(64),q=G(64);if(q===64&&K===-1)break;y(K<<2|_>>4),M!=64&&(y(_<<4&240|M>>2),q!=64&&y(M<<6&192|q))}}function je(){if(!dn){dn={};for(var h="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789".split(""),y=["+/=","+/","-_=","-_.","-_"],G=0;5>G;G++){var H=h.concat(y[G].split(""));Jn[G]=H;for(var K=0;K<H.length;K++){var _=H[K];dn[_]===void 0&&(dn[_]=K)}}}}var Me=typeof Uint8Array.prototype.slice=="function",xn;function Xn(h,y,G){return y===G?xn||(xn=new Uint8Array(0)):Me?h.slice(y,G):new Uint8Array(h.subarray(y,G))}var he=0,Se=0;function Oe(h,y){y=y===void 0?{}:y,y=y.v===void 0?!1:y.v,this.h=null,this.g=this.j=this.l=0,this.m=!1,this.v=y,h&&re(this,h)}function re(h,y){y=y.constructor===Uint8Array?y:y.constructor===ArrayBuffer?new Uint8Array(y):y.constructor===Array?new Uint8Array(y):y.constructor===String?kn(y):y instanceof Uint8Array?new Uint8Array(y.buffer,y.byteOffset,y.byteLength):new Uint8Array(0),h.h=y,h.l=0,h.j=h.h.length,h.g=h.l}Oe.prototype.reset=function(){this.g=this.l};function Ve(h){for(var y=128,G=0,H=0,K=0;4>K&&128<=y;K++)y=h.h[h.g++],G|=(y&127)<<7*K;if(128<=y&&(y=h.h[h.g++],G|=(y&127)<<28,H|=(y&127)>>4),128<=y)for(K=0;5>K&&128<=y;K++)y=h.h[h.g++],H|=(y&127)<<7*K+3;if(128>y)return h=G>>>0,y=H>>>0,(H=y&2147483648)&&(h=~h+1>>>0,y=~y>>>0,h==0&&(y=y+1>>>0)),h=4294967296*y+(h>>>0),H?-h:h;h.m=!0}Oe.prototype.i=function(){var h=this.h,y=h[this.g],G=y&127;return 128>y?(this.g+=1,G):(y=h[this.g+1],G|=(y&127)<<7,128>y?(this.g+=2,G):(y=h[this.g+2],G|=(y&127)<<14,128>y?(this.g+=3,G):(y=h[this.g+3],G|=(y&127)<<21,128>y?(this.g+=4,G):(y=h[this.g+4],G|=(y&15)<<28,128>y?(this.g+=5,G>>>0):(this.g+=5,128<=h[this.g++]&&128<=h[this.g++]&&128<=h[this.g++]&&128<=h[this.g++]&&this.g++,G)))))},Oe.prototype.o=function(){var h=this.h[this.g],y=this.h[this.g+1],G=this.h[this.g+2],H=this.h[this.g+3];return this.g+=4,G=(h<<0|y<<8|G<<16|H<<24)>>>0,h=2*(G>>31)+1,y=G>>>23&255,G&=8388607,y==255?G?NaN:1/0*h:y==0?h*Math.pow(2,-149)*G:h*Math.pow(2,y-150)*(G+Math.pow(2,23))};var ln=[];function Be(){this.g=new Uint8Array(64),this.h=0}Be.prototype.push=function(h){if(!(this.h+1<this.g.length)){var y=this.g;this.g=new Uint8Array(Math.ceil(1+2*this.g.length)),this.g.set(y)}this.g[this.h++]=h},Be.prototype.length=function(){return this.h},Be.prototype.end=function(){var h=this.g,y=this.h;return this.h=0,Xn(h,0,y)};function Qt(h,y){for(;127<y;)h.push(y&127|128),y>>>=7;h.push(y)}function Ze(h){var y={},G=y.N===void 0?!1:y.N;this.o={v:y.v===void 0?!1:y.v},this.N=G,y=this.o,ln.length?(G=ln.pop(),y&&(G.v=y.v),h&&re(G,h),h=G):h=new Oe(h,y),this.g=h,this.m=this.g.g,this.h=this.i=this.l=-1,this.j=!1}Ze.prototype.reset=function(){this.g.reset(),this.h=this.l=-1};function Ce(h){var y=h.g;if((y=y.g==y.j)||(y=h.j)||(y=h.g,y=y.m||0>y.g||y.g>y.j),y)return!1;h.m=h.g.g,y=h.g.i();var G=y&7;return G!=0&&G!=5&&G!=1&&G!=2&&G!=3&&G!=4?(h.j=!0,!1):(h.i=y,h.l=y>>>3,h.h=G,!0)}function Mt(h){switch(h.h){case 0:if(h.h!=0)Mt(h);else{for(h=h.g;h.h[h.g]&128;)h.g++;h.g++}break;case 1:h.h!=1?Mt(h):(h=h.g,h.g+=8);break;case 2:if(h.h!=2)Mt(h);else{var y=h.g.i();h=h.g,h.g+=y}break;case 5:h.h!=5?Mt(h):(h=h.g,h.g+=4);break;case 3:y=h.l;do{if(!Ce(h)){h.j=!0;break}if(h.h==4){h.l!=y&&(h.j=!0);break}Mt(h)}while(1);break;default:h.j=!0}}function xe(h,y,G){var H=h.g.j,K=h.g.i(),_=h.g.g+K;if(h.g.j=_,G(y,h),G=_-h.g.g,G!==0)throw Error("Message parsing ended unexpectedly. Expected to read "+K+" bytes, instead read "+(K-G)+" bytes, either the data ended unexpectedly or the message misreported its own length");return h.g.g=_,h.g.j=H,y}function jt(h){return h.g.o()}function ye(h){var y=h.g.i();h=h.g;var G=h.g;h.g+=y,h=h.h;var H;if(sn)(H=Te)||(H=Te=new TextDecoder("utf-8",{fatal:!1})),H=H.decode(h.subarray(G,G+y));else{y=G+y;for(var K=[],_=null,M,q,ct;G<y;)M=h[G++],128>M?K.push(M):224>M?G>=y?K.push(65533):(q=h[G++],194>M||(q&192)!==128?(G--,K.push(65533)):K.push((M&31)<<6|q&63)):240>M?G>=y-1?K.push(65533):(q=h[G++],(q&192)!==128||M===224&&160>q||M===237&&160<=q||((H=h[G++])&192)!==128?(G--,K.push(65533)):K.push((M&15)<<12|(q&63)<<6|H&63)):244>=M?G>=y-2?K.push(65533):(q=h[G++],(q&192)!==128||(M<<28)+(q-144)>>30!==0||((H=h[G++])&192)!==128||((ct=h[G++])&192)!==128?(G--,K.push(65533)):(M=(M&7)<<18|(q&63)<<12|(H&63)<<6|ct&63,M-=65536,K.push((M>>10&1023)+55296,(M&1023)+56320))):K.push(65533),8192<=K.length&&(_=Ht(_,K),K.length=0);H=Ht(_,K)}return H}function Ye(h,y,G){var H=h.g.i();for(H=h.g.g+H;h.g.g<H;)G.push(y.call(h.g))}function qe(h,y){h.h==2?Ye(h,Oe.prototype.o,y):y.push(jt(h))}function Xe(){this.h=[],this.i=0,this.g=new Be}function Ot(h,y){y.length!==0&&(h.h.push(y),h.i+=y.length)}function Ae(h){var y=h.i+h.g.length();if(y===0)return new Uint8Array(0);y=new Uint8Array(y);for(var G=h.h,H=G.length,K=0,_=0;_<H;_++){var M=G[_];M.length!==0&&(y.set(M,K),K+=M.length)}return G=h.g,H=G.h,H!==0&&(y.set(G.g.subarray(0,H),K),G.h=0),h.h=[y],y}function Pe(h,y,G){if(G!=null){Qt(h.g,8*y+5),h=h.g;var H=G;H=(G=0>H?1:0)?-H:H,H===0?0<1/H?he=Se=0:(Se=0,he=2147483648):isNaN(H)?(Se=0,he=2147483647):34028234663852886e22<H?(Se=0,he=(G<<31|2139095040)>>>0):11754943508222875e-54>H?(H=Math.round(H/Math.pow(2,-149)),Se=0,he=(G<<31|H)>>>0):(y=Math.floor(Math.log(H)/Math.LN2),H*=Math.pow(2,-y),H=Math.round(8388608*H),16777216<=H&&++y,Se=0,he=(G<<31|y+127<<23|H&8388607)>>>0),G=he,h.push(G>>>0&255),h.push(G>>>8&255),h.push(G>>>16&255),h.push(G>>>24&255)}}var Ie=typeof Uint8Array=="function";function Wn(h,y,G){if(h!=null)return typeof h=="object"?Ie&&h instanceof Uint8Array?G(h):cn(h,y,G):y(h)}function cn(h,y,G){if(Array.isArray(h)){for(var H=Array(h.length),K=0;K<h.length;K++)H[K]=Wn(h[K],y,G);return Array.isArray(h)&&h.W&&ve(H),H}H={};for(K in h)H[K]=Wn(h[K],y,G);return H}function _e(h){return typeof h=="number"?isFinite(h)?h:String(h):h}var un={W:{value:!0,configurable:!0}};function ve(h){return Array.isArray(h)&&!Object.isFrozen(h)&&Object.defineProperties(h,un),h}var we;function Ge(h,y,G){var H=we;we=null,h||(h=H),H=this.constructor.ca,h||(h=H?[H]:[]),this.j=H?0:-1,this.m=this.g=null,this.h=h;t:{if(H=this.h.length,h=H-1,H&&(H=this.h[h],!(H===null||typeof H!="object"||Array.isArray(H)||Ie&&H instanceof Uint8Array))){this.l=h-this.j,this.i=H;break t}y!==void 0&&-1<y?(this.l=Math.max(y,h+1-this.j),this.i=null):this.l=Number.MAX_VALUE}if(G)for(y=0;y<G.length;y++)h=G[y],h<this.l?(h+=this.j,(H=this.h[h])?ve(H):this.h[h]=ie):(Qe(this),(H=this.i[h])?ve(H):this.i[h]=ie)}var ie=Object.freeze(ve([]));function Qe(h){var y=h.l+h.j;h.h[y]||(h.i=h.h[y]={})}function qt(h,y,G){return y===-1?null:(G===void 0?0:G)||y>=h.l?h.i?h.i[y]:void 0:h.h[y+h.j]}function Pt(h,y){var G=G===void 0?!1:G,H=qt(h,y,G);return H==null&&(H=ie),H===ie&&(H=ve([]),Vt(h,y,H,G)),H}function hn(h){var y=Pt(h,3);if(h.m||(h.m={}),!h.m[3]){for(var G=0;G<y.length;G++)y[G]=+y[G];h.m[3]=!0}return y}function fe(h,y,G){return h=qt(h,y),h==null?G:h}function Ct(h,y,G){return h=qt(h,y),h=h==null?h:+h,h==null?G===void 0?0:G:h}function Vt(h,y,G,H){(H===void 0?0:H)||y>=h.l?(Qe(h),h.i[y]=G):h.h[y+h.j]=G}function oe(h,y,G){if(G===-1)return null;if(h.g||(h.g={}),!h.g[G]){var H=qt(h,G,!1);H&&(h.g[G]=new y(H))}return h.g[G]}function Le(h,y){h.g||(h.g={});var G=h.g[1];if(!G){var H=Pt(h,1);G=[];for(var K=0;K<H.length;K++)G[K]=new y(H[K]);h.g[1]=G}return G}function te(h,y,G){var H=H===void 0?!1:H;h.g||(h.g={});var K=G&&tt(G);h.g[y]=G,Vt(h,y,K,H)}function se(h,y,G,H){var K=Le(h,G);y=y||new G,h=Pt(h,1),H!=null?(K.splice(H,0,y),h.splice(H,0,tt(y))):(K.push(y),h.push(tt(y)))}Ge.prototype.toJSON=function(){var h=tt(this);return cn(h,_e,pn)};function tt(h,y){if(h.g)for(var G in h.g){var H=h.g[G];if(Array.isArray(H))for(var K=0;K<H.length;K++)H[K]&&tt(H[K]);else H&&tt(H)}return h.h}Ge.prototype.toString=function(){return tt(this).toString()};function it(h,y){if(h=h.o){Ot(y,y.g.end());for(var G=0;G<h.length;G++)Ot(y,h[G])}}function ut(h,y){if(y.h==4)return!1;var G=y.m;return Mt(y),y.N||(y=Xn(y.g.h,G,y.g.g),(G=h.o)?G.push(y):h.o=[y]),!0}function _t(h){Ge.call(this,h,-1,ue)}dt(_t,Ge),_t.prototype.getRows=function(){return qt(this,1)},_t.prototype.getCols=function(){return qt(this,2)},_t.prototype.getPackedDataList=function(){return hn(this)},_t.prototype.getLayout=function(){return fe(this,4,0)};function de(h,y){for(;Ce(y);)switch(y.i){case 8:var G=y.g.i();Vt(h,1,G);break;case 16:G=y.g.i(),Vt(h,2,G);break;case 29:case 26:qe(y,h.getPackedDataList());break;case 32:G=Ve(y.g),Vt(h,4,G);break;default:if(!ut(h,y))return h}return h}var ue=[3];function St(h,y){var G=void 0;return new(G||(G=Promise))(function(H,K){function _(ct){try{q(y.next(ct))}catch(s){K(s)}}function M(ct){try{q(y.throw(ct))}catch(s){K(s)}}function q(ct){ct.done?H(ct.value):new G(function(s){s(ct.value)}).then(_,M)}q((y=y.apply(h,void 0)).next())})}function me(h){Ge.call(this,h)}dt(me,Ge);function He(h,y){for(;Ce(y);)switch(y.i){case 8:var G=y.g.i();Vt(h,1,G);break;case 21:G=jt(y),Vt(h,2,G);break;case 26:G=ye(y),Vt(h,3,G);break;case 34:G=ye(y),Vt(h,4,G);break;default:if(!ut(h,y))return h}return h}function tn(h){Ge.call(this,h,-1,en)}dt(tn,Ge),tn.prototype.addClassification=function(h,y){return se(this,h,me,y),this};var en=[1];function fn(h){Ge.call(this,h)}dt(fn,Ge);function bn(h,y){for(;Ce(y);)switch(y.i){case 13:var G=jt(y);Vt(h,1,G);break;case 21:G=jt(y),Vt(h,2,G);break;case 29:G=jt(y),Vt(h,3,G);break;case 37:G=jt(y),Vt(h,4,G);break;case 45:G=jt(y),Vt(h,5,G);break;default:if(!ut(h,y))return h}return h}function Fe(h){Ge.call(this,h,-1,zn)}dt(Fe,Ge);function nn(h){t:{var y=new Fe;for(h=new Ze(h);Ce(h);)switch(h.i){case 10:var G=xe(h,new fn,bn);se(y,G,fn,void 0);break;default:if(!ut(y,h))break t}}return y}var zn=[1];function rn(h){Ge.call(this,h)}dt(rn,Ge);function Je(h){Ge.call(this,h,-1,In)}dt(Je,Ge),Je.prototype.getVertexType=function(){return fe(this,1,0)},Je.prototype.getPrimitiveType=function(){return fe(this,2,0)},Je.prototype.getVertexBufferList=function(){return hn(this)},Je.prototype.getIndexBufferList=function(){return Pt(this,4)};function gn(h,y){for(;Ce(y);)switch(y.i){case 8:var G=Ve(y.g);Vt(h,1,G);break;case 16:G=Ve(y.g),Vt(h,2,G);break;case 29:case 26:qe(y,h.getVertexBufferList());break;case 32:case 34:G=y;var H=h.getIndexBufferList();G.h==2?Ye(G,Oe.prototype.i,H):H.push(G.g.i());break;default:if(!ut(h,y))return h}return h}var In=[3,4];function Ke(h){Ge.call(this,h)}dt(Ke,Ge),Ke.prototype.getMesh=function(){return oe(this,Je,1)},Ke.prototype.getPoseTransformMatrix=function(){return oe(this,_t,2)};function En(h){t:{var y=new Ke;for(h=new Ze(h);Ce(h);)switch(h.i){case 10:var G=xe(h,new Je,gn);te(y,1,G);break;case 18:G=xe(h,new _t,de),te(y,2,G);break;default:if(!ut(y,h))break t}}return y}function on(h,y,G){if(G=h.createShader(G===0?h.VERTEX_SHADER:h.FRAGMENT_SHADER),h.shaderSource(G,y),h.compileShader(G),!h.getShaderParameter(G,h.COMPILE_STATUS))throw Error(`Could not compile WebGL shader.
|
|
71
71
|
|
|
72
|
-
`+h.getShaderInfoLog(G));return G}function
|
|
72
|
+
`+h.getShaderInfoLog(G));return G}function Zn(h){return Le(h,me).map(function(y){return{index:fe(y,1,0),Y:Ct(y,2),label:qt(y,3)!=null?fe(y,3,""):void 0,displayName:qt(y,4)!=null?fe(y,4,""):void 0}})}function Sn(h){return{x:Ct(h,1),y:Ct(h,2),z:Ct(h,3),visibility:qt(h,4)!=null?Ct(h,4):void 0}}function Kn(h,y){this.h=h,this.g=y,this.l=0}function an(h,y,G){return Tn(h,y),typeof h.g.canvas.transferToImageBitmap=="function"?Promise.resolve(h.g.canvas.transferToImageBitmap()):G?Promise.resolve(h.g.canvas):typeof createImageBitmap=="function"?createImageBitmap(h.g.canvas):(h.i===void 0&&(h.i=document.createElement("canvas")),new Promise(function(H){h.i.height=h.g.canvas.height,h.i.width=h.g.canvas.width,h.i.getContext("2d",{}).drawImage(h.g.canvas,0,0,h.g.canvas.width,h.g.canvas.height),H(h.i)}))}function Tn(h,y){var G=h.g;if(h.m===void 0){var H=on(G,`
|
|
73
73
|
attribute vec2 aVertex;
|
|
74
74
|
attribute vec2 aTex;
|
|
75
75
|
varying vec2 vTex;
|
|
76
76
|
void main(void) {
|
|
77
77
|
gl_Position = vec4(aVertex, 0.0, 1.0);
|
|
78
78
|
vTex = aTex;
|
|
79
|
-
}`,0),K=
|
|
79
|
+
}`,0),K=on(G,`
|
|
80
80
|
precision mediump float;
|
|
81
81
|
varying vec2 vTex;
|
|
82
82
|
uniform sampler2D sampler0;
|
|
83
83
|
void main(){
|
|
84
84
|
gl_FragColor = texture2D(sampler0, vTex);
|
|
85
|
-
}`,1),_=G.createProgram();if(G.attachShader(_,
|
|
85
|
+
}`,1),_=G.createProgram();if(G.attachShader(_,H),G.attachShader(_,K),G.linkProgram(_),!G.getProgramParameter(_,G.LINK_STATUS))throw Error(`Could not compile WebGL program.
|
|
86
86
|
|
|
87
|
-
`+G.getProgramInfoLog(_));C=h.m=_,G.useProgram(C),K=G.getUniformLocation(C,"sampler0"),h.j={I:G.getAttribLocation(C,"aVertex"),H:G.getAttribLocation(C,"aTex"),da:K},h.s=G.createBuffer(),G.bindBuffer(G.ARRAY_BUFFER,h.s),G.enableVertexAttribArray(h.j.I),G.vertexAttribPointer(h.j.I,2,G.FLOAT,!1,0,0),G.bufferData(G.ARRAY_BUFFER,new Float32Array([-1,-1,-1,1,1,1,1,-1]),G.STATIC_DRAW),G.bindBuffer(G.ARRAY_BUFFER,null),h.o=G.createBuffer(),G.bindBuffer(G.ARRAY_BUFFER,h.o),G.enableVertexAttribArray(h.j.H),G.vertexAttribPointer(h.j.H,2,G.FLOAT,!1,0,0),G.bufferData(G.ARRAY_BUFFER,new Float32Array([0,1,0,0,1,0,1,1]),G.STATIC_DRAW),G.bindBuffer(G.ARRAY_BUFFER,null),G.uniform1i(K,0)}C=h.j,G.useProgram(h.m),G.canvas.width=y.width,G.canvas.height=y.height,G.viewport(0,0,y.width,y.height),G.activeTexture(G.TEXTURE0),h.h.bindTexture2d(y.glName),G.enableVertexAttribArray(C.I),G.bindBuffer(G.ARRAY_BUFFER,h.s),G.vertexAttribPointer(C.I,2,G.FLOAT,!1,0,0),G.enableVertexAttribArray(C.H),G.bindBuffer(G.ARRAY_BUFFER,h.o),G.vertexAttribPointer(C.H,2,G.FLOAT,!1,0,0),G.bindFramebuffer(G.DRAW_FRAMEBUFFER?G.DRAW_FRAMEBUFFER:G.FRAMEBUFFER,null),G.clearColor(0,0,0,0),G.clear(G.COLOR_BUFFER_BIT),G.colorMask(!0,!0,!0,!0),G.drawArrays(G.TRIANGLE_FAN,0,4),G.disableVertexAttribArray(C.I),G.disableVertexAttribArray(C.H),G.bindBuffer(G.ARRAY_BUFFER,null),h.h.bindTexture2d(0)}function _n(h){this.g=h}var Qn=new Uint8Array([0,97,115,109,1,0,0,0,1,4,1,96,0,0,3,2,1,0,10,9,1,7,0,65,0,253,15,26,11]);function wn(h,y){return y+h}function Cn(h,y){window[h]=y}function p(h){var y=document.createElement("script");return y.setAttribute("src",h),y.setAttribute("crossorigin","anonymous"),new Promise(function(G){y.addEventListener("load",function(){G()},!1),y.addEventListener("error",function(){G()},!1),document.body.appendChild(y)})}function W(){return St(this,function h(){return ne(h,function(y){switch(y.g){case 1:return y.m=2,O(y,WebAssembly.instantiate(Qn),4);case 4:y.g=3,y.m=0;break;case 2:return y.m=0,y.j=null,y.return(!1);case 3:return y.return(!0)}})})}function V(h){if(this.g=h,this.listeners={},this.j={},this.F={},this.m={},this.s={},this.G=this.o=this.R=!0,this.C=Promise.resolve(),this.P="",this.B={},this.locateFile=h&&h.locateFile||wn,typeof window=="object")var y=window.location.pathname.toString().substring(0,window.location.pathname.toString().lastIndexOf("/"))+"/";else if(typeof location<"u")y=location.pathname.toString().substring(0,location.pathname.toString().lastIndexOf("/"))+"/";else throw Error("solutions can only be loaded on a web page or in a web worker");if(this.S=y,h.options){y=T(Object.keys(h.options));for(var G=y.next();!G.done;G=y.next()){G=G.value;var C=h.options[G].default;C!==void 0&&(this.j[G]=typeof C=="function"?C():C)}}}i=V.prototype,i.close=function(){return this.i&&this.i.delete(),Promise.resolve()};function E(h,y){return h.g.files===void 0?[]:typeof h.g.files=="function"?h.g.files(y):h.g.files}function P(h){return St(h,function y(){var G=this,C,K,_,M,q,ct,s,X,R,w,k;return ne(y,function(A){switch(A.g){case 1:return C=G,G.R?(K=E(G,G.j),O(A,W(),2)):A.return();case 2:if(_=A.h,typeof window=="object")return Cn("createMediapipeSolutionsWasm",{locateFile:G.locateFile}),Cn("createMediapipeSolutionsPackedAssets",{locateFile:G.locateFile}),ct=K.filter(function(B){return B.data!==void 0}),s=K.filter(function(B){return B.data===void 0}),X=Promise.all(ct.map(function(B){var nt=rt(C,B.url);if(B.path!==void 0){var $=B.path;nt=nt.then(function(yt){return C.overrideFile($,yt),Promise.resolve(yt)})}return nt})),R=Promise.all(s.map(function(B){return B.simd===void 0||B.simd&&_||!B.simd&&!_?p(C.locateFile(B.url,C.S)):Promise.resolve()})).then(function(){return St(C,function B(){var nt,$,yt=this;return ne(B,function(Xt){if(Xt.g==1)return nt=window.createMediapipeSolutionsWasm,$=window.createMediapipeSolutionsPackedAssets,O(Xt,nt($),2);yt.h=Xt.h,Xt.g=0})})}),w=function(){return St(C,function B(){var nt=this;return ne(B,function($){return nt.g.graph&&nt.g.graph.url?$=O($,rt(nt,nt.g.graph.url),0):($.g=0,$=void 0),$})})}(),O(A,Promise.all([R,X,w]),7);if(typeof importScripts!="function")throw Error("solutions can only be loaded on a web page or in a web worker");return M=K.filter(function(B){return B.simd===void 0||B.simd&&_||!B.simd&&!_}).map(function(B){return C.locateFile(B.url,C.S)}),importScripts.apply(null,J(M)),O(A,createMediapipeSolutionsWasm(Module),6);case 6:G.h=A.h,G.l=new OffscreenCanvas(1,1),G.h.canvas=G.l,q=G.h.GL.createContext(G.l,{antialias:!1,alpha:!1,ba:typeof WebGL2RenderingContext<"u"?2:1}),G.h.GL.makeContextCurrent(q),A.g=4;break;case 7:if(G.l=document.createElement("canvas"),k=G.l.getContext("webgl2",{}),!k&&(k=G.l.getContext("webgl",{}),!k))return alert("Failed to create WebGL canvas context when passing video frame."),A.return();G.D=k,G.h.canvas=G.l,G.h.createContext(G.l,!0,!0,{});case 4:G.i=new G.h.SolutionWasm,G.R=!1,A.g=0}})})}function ot(h){return St(h,function y(){var G=this,C,K,_,M,q,ct,s,X;return ne(y,function(R){if(R.g==1){if(G.g.graph&&G.g.graph.url&&G.P===G.g.graph.url)return R.return();if(G.o=!0,!G.g.graph||!G.g.graph.url){R.g=2;return}return G.P=G.g.graph.url,O(R,rt(G,G.g.graph.url),3)}for(R.g!=2&&(C=R.h,G.i.loadGraph(C)),K=T(Object.keys(G.B)),_=K.next();!_.done;_=K.next())M=_.value,G.i.overrideFile(M,G.B[M]);if(G.B={},G.g.listeners)for(q=T(G.g.listeners),ct=q.next();!ct.done;ct=q.next())s=ct.value,Ut(G,s);X=G.j,G.j={},G.setOptions(X),R.g=0})})}i.reset=function(){return St(this,function h(){var y=this;return ne(h,function(G){y.i&&(y.i.reset(),y.m={},y.s={}),G.g=0})})},i.setOptions=function(h,y){var G=this;if(y=y||this.g.options){for(var C=[],K=[],_={},M=T(Object.keys(h)),q=M.next();!q.done;_={K:_.K,L:_.L},q=M.next()){var ct=q.value;ct in this.j&&this.j[ct]===h[ct]||(this.j[ct]=h[ct],q=y[ct],q!==void 0&&(q.onChange&&(_.K=q.onChange,_.L=h[ct],C.push(function(s){return function(){return St(G,function X(){var R,w=this;return ne(X,function(k){if(k.g==1)return O(k,s.K(s.L),2);R=k.h,R===!0&&(w.o=!0),k.g=0})})}}(_))),q.graphOptionXref&&(ct={valueNumber:q.type===1?h[ct]:0,valueBoolean:q.type===0?h[ct]:!1,valueString:q.type===2?h[ct]:""},q=Object.assign(Object.assign(Object.assign({},{calculatorName:"",calculatorIndex:0}),q.graphOptionXref),ct),K.push(q))))}(C.length!==0||K.length!==0)&&(this.o=!0,this.A=(this.A===void 0?[]:this.A).concat(K),this.u=(this.u===void 0?[]:this.u).concat(C))}};function j(h){return St(h,function y(){var G=this,C,K,_,M,q,ct,s;return ne(y,function(X){switch(X.g){case 1:if(!G.o)return X.return();if(!G.u){X.g=2;break}C=T(G.u),K=C.next();case 3:if(K.done){X.g=5;break}return _=K.value,O(X,_(),4);case 4:K=C.next(),X.g=3;break;case 5:G.u=void 0;case 2:if(G.A){for(M=new G.h.GraphOptionChangeRequestList,q=T(G.A),ct=q.next();!ct.done;ct=q.next())s=ct.value,M.push_back(s);G.i.changeOptions(M),M.delete(),G.A=void 0}G.o=!1,X.g=0}})})}i.initialize=function(){return St(this,function h(){var y=this;return ne(h,function(G){return G.g==1?O(G,P(y),2):G.g!=3?O(G,ot(y),3):O(G,j(y),0)})})};function rt(h,y){return St(h,function G(){var C=this,K,_;return ne(G,function(M){return y in C.F?M.return(C.F[y]):(K=C.locateFile(y,""),_=fetch(K).then(function(q){return q.arrayBuffer()}),C.F[y]=_,M.return(_))})})}i.overrideFile=function(h,y){this.i?this.i.overrideFile(h,y):this.B[h]=y},i.clearOverriddenFiles=function(){this.B={},this.i&&this.i.clearOverriddenFiles()},i.send=function(h,y){return St(this,function G(){var C=this,K,_,M,q,ct,s,X,R,w;return ne(G,function(k){switch(k.g){case 1:return C.g.inputs?(K=1e3*(y==null?performance.now():y),O(k,C.C,2)):k.return();case 2:return O(k,C.initialize(),3);case 3:for(_=new C.h.PacketDataList,M=T(Object.keys(h)),q=M.next();!q.done;q=M.next())if(ct=q.value,s=C.g.inputs[ct]){t:{var A=C,B=h[ct];switch(s.type){case"video":var nt=A.m[s.stream];if(nt||(nt=new Mn(A.h,A.D),A.m[s.stream]=nt),A=nt,A.l===0&&(A.l=A.h.createTexture()),typeof HTMLVideoElement<"u"&&B instanceof HTMLVideoElement){var $=B.videoWidth;nt=B.videoHeight}else typeof HTMLImageElement<"u"&&B instanceof HTMLImageElement?($=B.naturalWidth,nt=B.naturalHeight):($=B.width,nt=B.height);nt={glName:A.l,width:$,height:nt},$=A.g,$.canvas.width=nt.width,$.canvas.height=nt.height,$.activeTexture($.TEXTURE0),A.h.bindTexture2d(A.l),$.texImage2D($.TEXTURE_2D,0,$.RGBA,$.RGBA,$.UNSIGNED_BYTE,B),A.h.bindTexture2d(0),A=nt;break t;case"detections":for(nt=A.m[s.stream],nt||(nt=new _n(A.h),A.m[s.stream]=nt),A=nt,A.data||(A.data=new A.g.DetectionListData),A.data.reset(B.length),nt=0;nt<B.length;++nt){$=B[nt];var yt=A.data,Xt=yt.setBoundingBox,Kt=nt,It=$.T,ht=new on;Vt(ht,1,It.Z),Vt(ht,2,It.$),Vt(ht,3,It.height),Vt(ht,4,It.width),Vt(ht,5,It.rotation),Vt(ht,6,It.X);var Wt=It=new Xe;_e(Wt,1,qt(ht,1)),_e(Wt,2,qt(ht,2)),_e(Wt,3,qt(ht,3)),_e(Wt,4,qt(ht,4)),_e(Wt,5,qt(ht,5));var xt=qt(ht,6);if(xt!=null&&xt!=null){Qt(Wt.g,48);var wt=Wt.g,Ht=xt;xt=0>Ht,Ht=Math.abs(Ht);var l=Ht>>>0;for(Ht=Math.floor((Ht-l)/4294967296),Ht>>>=0,xt&&(Ht=~Ht>>>0,l=(~l>>>0)+1,4294967295<l&&(l=0,Ht++,4294967295<Ht&&(Ht=0))),he=l,Se=Ht,xt=he,l=Se;0<l||127<xt;)wt.push(xt&127|128),xt=(xt>>>7|l<<25)>>>0,l>>>=7;wt.push(xt)}if(it(ht,Wt),It=ze(It),Xt.call(yt,Kt,It),$.O)for(yt=0;yt<$.O.length;++yt)ht=$.O[yt],Wt=!!ht.visibility,Xt=A.data,Kt=Xt.addNormalizedLandmark,It=nt,ht=Object.assign(Object.assign({},ht),{visibility:Wt?ht.visibility:0}),Wt=new mn,Vt(Wt,1,ht.x),Vt(Wt,2,ht.y),Vt(Wt,3,ht.z),ht.visibility&&Vt(Wt,4,ht.visibility),wt=ht=new Xe,_e(wt,1,qt(Wt,1)),_e(wt,2,qt(Wt,2)),_e(wt,3,qt(Wt,3)),_e(wt,4,qt(Wt,4)),_e(wt,5,qt(Wt,5)),it(Wt,wt),ht=ze(ht),Kt.call(Xt,It,ht);if($.M)for(yt=0;yt<$.M.length;++yt){if(Xt=A.data,Kt=Xt.addClassification,It=nt,ht=$.M[yt],Wt=new me,Vt(Wt,2,ht.Y),ht.index&&Vt(Wt,1,ht.index),ht.label&&Vt(Wt,3,ht.label),ht.displayName&&Vt(Wt,4,ht.displayName),wt=ht=new Xe,l=qt(Wt,1),l!=null&&l!=null)if(Qt(wt.g,8),xt=wt.g,0<=l)Qt(xt,l);else{for(Ht=0;9>Ht;Ht++)xt.push(l&127|128),l>>=7;xt.push(1)}_e(wt,2,qt(Wt,2)),xt=qt(Wt,3),xt!=null&&(xt=In(xt),Qt(wt.g,26),Qt(wt.g,xt.length),Pt(wt,wt.g.end()),Pt(wt,xt)),xt=qt(Wt,4),xt!=null&&(xt=In(xt),Qt(wt.g,34),Qt(wt.g,xt.length),Pt(wt,wt.g.end()),Pt(wt,xt)),it(Wt,wt),ht=ze(ht),Kt.call(Xt,It,ht)}}A=A.data;break t;default:A={}}}switch(X=A,R=s.stream,s.type){case"video":_.pushTexture2d(Object.assign(Object.assign({},X),{stream:R,timestamp:K}));break;case"detections":w=X,w.stream=R,w.timestamp=K,_.pushDetectionList(w);break;default:throw Error("Unknown input config type: '"+s.type+"'")}}return C.i.send(_),O(k,C.C,4);case 4:_.delete(),k.g=0}})})};function bt(h,y,G){return St(h,function C(){var K,_,M,q,ct,s,X=this,R,w,k,A,B,nt,$,yt;return ne(C,function(Xt){switch(Xt.g){case 1:if(!G)return Xt.return(y);for(K={},_=0,M=T(Object.keys(G)),q=M.next();!q.done;q=M.next())ct=q.value,s=G[ct],typeof s!="string"&&s.type==="texture"&&y[s.stream]!==void 0&&++_;1<_&&(X.G=!1),R=T(Object.keys(G)),q=R.next();case 2:if(q.done){Xt.g=4;break}if(w=q.value,k=G[w],typeof k=="string")return $=K,yt=w,O(Xt,Rt(X,w,y[k]),14);if(A=y[k.stream],k.type==="detection_list"){if(A){for(var Kt=A.getRectList(),It=A.getLandmarksList(),ht=A.getClassificationsList(),Wt=[],xt=0;xt<Kt.size();++xt){var wt=Kt.get(xt);t:{var Ht=new on;for(wt=new Ze(wt);Fe(wt);)switch(wt.i){case 13:var l=jt(wt);Vt(Ht,1,l);break;case 21:l=jt(wt),Vt(Ht,2,l);break;case 29:l=jt(wt),Vt(Ht,3,l);break;case 37:l=jt(wt),Vt(Ht,4,l);break;case 45:l=jt(wt),Vt(Ht,5,l);break;case 48:l=Ve(wt.g),Vt(Ht,6,l);break;default:if(!ut(Ht,wt))break t}}Ht={Z:Ft(Ht,1),$:Ft(Ht,2),height:Ft(Ht,3),width:Ft(Ht,4),rotation:Ft(Ht,5,0),X:fe(Ht,6,0)},wt=Le(rn(It.get(xt)),mn).map(Tn);var v=ht.get(xt);t:for(l=new en,v=new Ze(v);Fe(v);)switch(v.i){case 10:l.addClassification(Ie(v,new me,Ce));break;default:if(!ut(l,v))break t}Ht={T:Ht,O:wt,M:vn(l)},Wt.push(Ht)}Kt=Wt}else Kt=[];K[w]=Kt,Xt.g=7;break}if(k.type==="proto_list"){if(A){for(Kt=Array(A.size()),It=0;It<A.size();It++)Kt[It]=A.get(It);A.delete()}else Kt=[];K[w]=Kt,Xt.g=7;break}if(A===void 0){Xt.g=3;break}if(k.type==="float_list"){K[w]=A,Xt.g=7;break}if(k.type==="proto"){K[w]=A,Xt.g=7;break}if(k.type!=="texture")throw Error("Unknown output config type: '"+k.type+"'");return B=X.s[w],B||(B=new Mn(X.h,X.D),X.s[w]=B),O(Xt,dn(B,A,X.G),13);case 13:nt=Xt.h,K[w]=nt;case 7:k.transform&&K[w]&&(K[w]=k.transform(K[w])),Xt.g=3;break;case 14:$[yt]=Xt.h;case 3:q=R.next(),Xt.g=2;break;case 4:return Xt.return(K)}})})}function Rt(h,y,G){return St(h,function C(){var K=this,_;return ne(C,function(M){return typeof G=="number"||G instanceof Uint8Array||G instanceof K.h.Uint8BlobList?M.return(G):G instanceof K.h.Texture2dDataOut?(_=K.s[y],_||(_=new Mn(K.h,K.D),K.s[y]=_),M.return(dn(_,G,K.G))):M.return(void 0)})})}function Ut(h,y){for(var G=y.name||"$",C=[].concat(J(y.wants)),K=new h.h.StringList,_=T(y.wants),M=_.next();!M.done;M=_.next())K.push_back(M.value);_=h.h.PacketListener.implement({onResults:function(q){for(var ct={},s=0;s<y.wants.length;++s)ct[C[s]]=q.get(s);var X=h.listeners[G];X&&(h.C=bt(h,ct,y.outs).then(function(R){R=X(R);for(var w=0;w<y.wants.length;++w){var k=ct[C[w]];typeof k=="object"&&k.hasOwnProperty&&k.hasOwnProperty("delete")&&k.delete()}R&&(h.C=R)}))}}),h.i.attachMultiListener(K,_),K.delete()}i.onResults=function(h,y){this.listeners[y||"$"]=h},Re("Solution",V),Re("OptionType",{BOOL:0,NUMBER:1,aa:2,0:"BOOL",1:"NUMBER",2:"STRING"});function Jt(h){h=Un(h);var y=h.getMesh();if(!y)return h;var G=new Float32Array(y.getVertexBufferList());y.getVertexBufferList=function(){return G};var C=new Uint32Array(y.getIndexBufferList());return y.getIndexBufferList=function(){return C},h}var $t={files:[{url:"face_mesh_solution_packed_assets_loader.js"},{simd:!0,url:"face_mesh_solution_simd_wasm_bin.js"},{simd:!1,url:"face_mesh_solution_wasm_bin.js"}],graph:{url:"face_mesh.binarypb"},listeners:[{wants:["multi_face_geometry","image_transformed","multi_face_landmarks"],outs:{image:"image_transformed",multiFaceGeometry:{type:"proto_list",stream:"multi_face_geometry",transform:function(h){return h.map(Jt)}},multiFaceLandmarks:{type:"proto_list",stream:"multi_face_landmarks",transform:function(h){return h.map(function(y){return Le(rn(y),mn).map(Tn)})}}}}],inputs:{image:{type:"video",stream:"input_frames_gpu"}},options:{useCpuInference:{type:0,graphOptionXref:{calculatorType:"InferenceCalculator",fieldName:"use_cpu_inference"},default:"iPad Simulator;iPhone Simulator;iPod Simulator;iPad;iPhone;iPod".split(";").includes(navigator.platform)||navigator.userAgent.includes("Mac")&&"ontouchend"in document},enableFaceGeometry:{type:0,graphOptionXref:{calculatorName:"EnableFaceGeometryConstant",calculatorType:"ConstantSidePacketCalculator",fieldName:"bool_value"}},selfieMode:{type:0,graphOptionXref:{calculatorType:"GlScalerCalculator",calculatorIndex:1,fieldName:"flip_horizontal"}},maxNumFaces:{type:1,graphOptionXref:{calculatorType:"ConstantSidePacketCalculator",calculatorName:"ConstantSidePacketCalculatorNumFaces",fieldName:"int_value"}},refineLandmarks:{type:0,graphOptionXref:{calculatorType:"ConstantSidePacketCalculator",calculatorName:"ConstantSidePacketCalculatorRefineLandmarks",fieldName:"bool_value"}},minDetectionConfidence:{type:1,graphOptionXref:{calculatorType:"TensorsToDetectionsCalculator",calculatorName:"facelandmarkfrontgpu__facedetectionshortrangegpu__facedetectionshortrangecommon__TensorsToDetectionsCalculator",fieldName:"min_score_thresh"}},minTrackingConfidence:{type:1,graphOptionXref:{calculatorType:"ThresholdingCalculator",calculatorName:"facelandmarkfrontgpu__facelandmarkgpu__ThresholdingCalculator",fieldName:"threshold"}},cameraNear:{type:1,graphOptionXref:{calculatorType:"FaceGeometryEnvGeneratorCalculator",fieldName:"near"}},cameraFar:{type:1,graphOptionXref:{calculatorType:"FaceGeometryEnvGeneratorCalculator",fieldName:"far"}},cameraVerticalFovDegrees:{type:1,graphOptionXref:{calculatorType:"FaceGeometryEnvGeneratorCalculator",fieldName:"vertical_fov_degrees"}}}},kt=[[61,146],[146,91],[91,181],[181,84],[84,17],[17,314],[314,405],[405,321],[321,375],[375,291],[61,185],[185,40],[40,39],[39,37],[37,0],[0,267],[267,269],[269,270],[270,409],[409,291],[78,95],[95,88],[88,178],[178,87],[87,14],[14,317],[317,402],[402,318],[318,324],[324,308],[78,191],[191,80],[80,81],[81,82],[82,13],[13,312],[312,311],[311,310],[310,415],[415,308]],Tt=[[263,249],[249,390],[390,373],[373,374],[374,380],[380,381],[381,382],[382,362],[263,466],[466,388],[388,387],[387,386],[386,385],[385,384],[384,398],[398,362]],Et=[[276,283],[283,282],[282,295],[295,285],[300,293],[293,334],[334,296],[296,336]],Dt=[[33,7],[7,163],[163,144],[144,145],[145,153],[153,154],[154,155],[155,133],[33,246],[246,161],[161,160],[160,159],[159,158],[158,157],[157,173],[173,133]],ae=[[46,53],[53,52],[52,65],[65,55],[70,63],[63,105],[105,66],[66,107]],pe=[[10,338],[338,297],[297,332],[332,284],[284,251],[251,389],[389,356],[356,454],[454,323],[323,361],[361,288],[288,397],[397,365],[365,379],[379,378],[378,400],[400,377],[377,152],[152,148],[148,176],[176,149],[149,150],[150,136],[136,172],[172,58],[58,132],[132,93],[93,234],[234,127],[127,162],[162,21],[21,54],[54,103],[103,67],[67,109],[109,10]],ge=[].concat(J(kt),J(Tt),J(Et),J(Dt),J(ae),J(pe));function ke(h){h=h||{},h=Object.assign(Object.assign({},$t),h),this.g=new V(h)}i=ke.prototype,i.close=function(){return this.g.close(),Promise.resolve()},i.onResults=function(h){this.g.onResults(h)},i.initialize=function(){return St(this,function h(){var y=this;return ne(h,function(G){return O(G,y.g.initialize(),0)})})},i.reset=function(){this.g.reset()},i.send=function(h){return St(this,function y(){var G=this;return ne(y,function(C){return O(C,G.g.send(h),0)})})},i.setOptions=function(h){this.g.setOptions(h)},Re("FACE_GEOMETRY",{Layout:{COLUMN_MAJOR:0,ROW_MAJOR:1,0:"COLUMN_MAJOR",1:"ROW_MAJOR"},PrimitiveType:{TRIANGLE:0,0:"TRIANGLE"},VertexType:{VERTEX_PT:0,0:"VERTEX_PT"},DEFAULT_CAMERA_PARAMS:{verticalFovDegrees:63,near:1,far:1e4}}),Re("FaceMesh",ke),Re("FACEMESH_LIPS",kt),Re("FACEMESH_LEFT_EYE",Tt),Re("FACEMESH_LEFT_EYEBROW",Et),Re("FACEMESH_LEFT_IRIS",[[474,475],[475,476],[476,477],[477,474]]),Re("FACEMESH_RIGHT_EYE",Dt),Re("FACEMESH_RIGHT_EYEBROW",ae),Re("FACEMESH_RIGHT_IRIS",[[469,470],[470,471],[471,472],[472,469]]),Re("FACEMESH_FACE_OVAL",pe),Re("FACEMESH_CONTOURS",ge),Re("FACEMESH_TESSELATION",[[127,34],[34,139],[139,127],[11,0],[0,37],[37,11],[232,231],[231,120],[120,232],[72,37],[37,39],[39,72],[128,121],[121,47],[47,128],[232,121],[121,128],[128,232],[104,69],[69,67],[67,104],[175,171],[171,148],[148,175],[118,50],[50,101],[101,118],[73,39],[39,40],[40,73],[9,151],[151,108],[108,9],[48,115],[115,131],[131,48],[194,204],[204,211],[211,194],[74,40],[40,185],[185,74],[80,42],[42,183],[183,80],[40,92],[92,186],[186,40],[230,229],[229,118],[118,230],[202,212],[212,214],[214,202],[83,18],[18,17],[17,83],[76,61],[61,146],[146,76],[160,29],[29,30],[30,160],[56,157],[157,173],[173,56],[106,204],[204,194],[194,106],[135,214],[214,192],[192,135],[203,165],[165,98],[98,203],[21,71],[71,68],[68,21],[51,45],[45,4],[4,51],[144,24],[24,23],[23,144],[77,146],[146,91],[91,77],[205,50],[50,187],[187,205],[201,200],[200,18],[18,201],[91,106],[106,182],[182,91],[90,91],[91,181],[181,90],[85,84],[84,17],[17,85],[206,203],[203,36],[36,206],[148,171],[171,140],[140,148],[92,40],[40,39],[39,92],[193,189],[189,244],[244,193],[159,158],[158,28],[28,159],[247,246],[246,161],[161,247],[236,3],[3,196],[196,236],[54,68],[68,104],[104,54],[193,168],[168,8],[8,193],[117,228],[228,31],[31,117],[189,193],[193,55],[55,189],[98,97],[97,99],[99,98],[126,47],[47,100],[100,126],[166,79],[79,218],[218,166],[155,154],[154,26],[26,155],[209,49],[49,131],[131,209],[135,136],[136,150],[150,135],[47,126],[126,217],[217,47],[223,52],[52,53],[53,223],[45,51],[51,134],[134,45],[211,170],[170,140],[140,211],[67,69],[69,108],[108,67],[43,106],[106,91],[91,43],[230,119],[119,120],[120,230],[226,130],[130,247],[247,226],[63,53],[53,52],[52,63],[238,20],[20,242],[242,238],[46,70],[70,156],[156,46],[78,62],[62,96],[96,78],[46,53],[53,63],[63,46],[143,34],[34,227],[227,143],[123,117],[117,111],[111,123],[44,125],[125,19],[19,44],[236,134],[134,51],[51,236],[216,206],[206,205],[205,216],[154,153],[153,22],[22,154],[39,37],[37,167],[167,39],[200,201],[201,208],[208,200],[36,142],[142,100],[100,36],[57,212],[212,202],[202,57],[20,60],[60,99],[99,20],[28,158],[158,157],[157,28],[35,226],[226,113],[113,35],[160,159],[159,27],[27,160],[204,202],[202,210],[210,204],[113,225],[225,46],[46,113],[43,202],[202,204],[204,43],[62,76],[76,77],[77,62],[137,123],[123,116],[116,137],[41,38],[38,72],[72,41],[203,129],[129,142],[142,203],[64,98],[98,240],[240,64],[49,102],[102,64],[64,49],[41,73],[73,74],[74,41],[212,216],[216,207],[207,212],[42,74],[74,184],[184,42],[169,170],[170,211],[211,169],[170,149],[149,176],[176,170],[105,66],[66,69],[69,105],[122,6],[6,168],[168,122],[123,147],[147,187],[187,123],[96,77],[77,90],[90,96],[65,55],[55,107],[107,65],[89,90],[90,180],[180,89],[101,100],[100,120],[120,101],[63,105],[105,104],[104,63],[93,137],[137,227],[227,93],[15,86],[86,85],[85,15],[129,102],[102,49],[49,129],[14,87],[87,86],[86,14],[55,8],[8,9],[9,55],[100,47],[47,121],[121,100],[145,23],[23,22],[22,145],[88,89],[89,179],[179,88],[6,122],[122,196],[196,6],[88,95],[95,96],[96,88],[138,172],[172,136],[136,138],[215,58],[58,172],[172,215],[115,48],[48,219],[219,115],[42,80],[80,81],[81,42],[195,3],[3,51],[51,195],[43,146],[146,61],[61,43],[171,175],[175,199],[199,171],[81,82],[82,38],[38,81],[53,46],[46,225],[225,53],[144,163],[163,110],[110,144],[52,65],[65,66],[66,52],[229,228],[228,117],[117,229],[34,127],[127,234],[234,34],[107,108],[108,69],[69,107],[109,108],[108,151],[151,109],[48,64],[64,235],[235,48],[62,78],[78,191],[191,62],[129,209],[209,126],[126,129],[111,35],[35,143],[143,111],[117,123],[123,50],[50,117],[222,65],[65,52],[52,222],[19,125],[125,141],[141,19],[221,55],[55,65],[65,221],[3,195],[195,197],[197,3],[25,7],[7,33],[33,25],[220,237],[237,44],[44,220],[70,71],[71,139],[139,70],[122,193],[193,245],[245,122],[247,130],[130,33],[33,247],[71,21],[21,162],[162,71],[170,169],[169,150],[150,170],[188,174],[174,196],[196,188],[216,186],[186,92],[92,216],[2,97],[97,167],[167,2],[141,125],[125,241],[241,141],[164,167],[167,37],[37,164],[72,38],[38,12],[12,72],[38,82],[82,13],[13,38],[63,68],[68,71],[71,63],[226,35],[35,111],[111,226],[101,50],[50,205],[205,101],[206,92],[92,165],[165,206],[209,198],[198,217],[217,209],[165,167],[167,97],[97,165],[220,115],[115,218],[218,220],[133,112],[112,243],[243,133],[239,238],[238,241],[241,239],[214,135],[135,169],[169,214],[190,173],[173,133],[133,190],[171,208],[208,32],[32,171],[125,44],[44,237],[237,125],[86,87],[87,178],[178,86],[85,86],[86,179],[179,85],[84,85],[85,180],[180,84],[83,84],[84,181],[181,83],[201,83],[83,182],[182,201],[137,93],[93,132],[132,137],[76,62],[62,183],[183,76],[61,76],[76,184],[184,61],[57,61],[61,185],[185,57],[212,57],[57,186],[186,212],[214,207],[207,187],[187,214],[34,143],[143,156],[156,34],[79,239],[239,237],[237,79],[123,137],[137,177],[177,123],[44,1],[1,4],[4,44],[201,194],[194,32],[32,201],[64,102],[102,129],[129,64],[213,215],[215,138],[138,213],[59,166],[166,219],[219,59],[242,99],[99,97],[97,242],[2,94],[94,141],[141,2],[75,59],[59,235],[235,75],[24,110],[110,228],[228,24],[25,130],[130,226],[226,25],[23,24],[24,229],[229,23],[22,23],[23,230],[230,22],[26,22],[22,231],[231,26],[112,26],[26,232],[232,112],[189,190],[190,243],[243,189],[221,56],[56,190],[190,221],[28,56],[56,221],[221,28],[27,28],[28,222],[222,27],[29,27],[27,223],[223,29],[30,29],[29,224],[224,30],[247,30],[30,225],[225,247],[238,79],[79,20],[20,238],[166,59],[59,75],[75,166],[60,75],[75,240],[240,60],[147,177],[177,215],[215,147],[20,79],[79,166],[166,20],[187,147],[147,213],[213,187],[112,233],[233,244],[244,112],[233,128],[128,245],[245,233],[128,114],[114,188],[188,128],[114,217],[217,174],[174,114],[131,115],[115,220],[220,131],[217,198],[198,236],[236,217],[198,131],[131,134],[134,198],[177,132],[132,58],[58,177],[143,35],[35,124],[124,143],[110,163],[163,7],[7,110],[228,110],[110,25],[25,228],[356,389],[389,368],[368,356],[11,302],[302,267],[267,11],[452,350],[350,349],[349,452],[302,303],[303,269],[269,302],[357,343],[343,277],[277,357],[452,453],[453,357],[357,452],[333,332],[332,297],[297,333],[175,152],[152,377],[377,175],[347,348],[348,330],[330,347],[303,304],[304,270],[270,303],[9,336],[336,337],[337,9],[278,279],[279,360],[360,278],[418,262],[262,431],[431,418],[304,408],[408,409],[409,304],[310,415],[415,407],[407,310],[270,409],[409,410],[410,270],[450,348],[348,347],[347,450],[422,430],[430,434],[434,422],[313,314],[314,17],[17,313],[306,307],[307,375],[375,306],[387,388],[388,260],[260,387],[286,414],[414,398],[398,286],[335,406],[406,418],[418,335],[364,367],[367,416],[416,364],[423,358],[358,327],[327,423],[251,284],[284,298],[298,251],[281,5],[5,4],[4,281],[373,374],[374,253],[253,373],[307,320],[320,321],[321,307],[425,427],[427,411],[411,425],[421,313],[313,18],[18,421],[321,405],[405,406],[406,321],[320,404],[404,405],[405,320],[315,16],[16,17],[17,315],[426,425],[425,266],[266,426],[377,400],[400,369],[369,377],[322,391],[391,269],[269,322],[417,465],[465,464],[464,417],[386,257],[257,258],[258,386],[466,260],[260,388],[388,466],[456,399],[399,419],[419,456],[284,332],[332,333],[333,284],[417,285],[285,8],[8,417],[346,340],[340,261],[261,346],[413,441],[441,285],[285,413],[327,460],[460,328],[328,327],[355,371],[371,329],[329,355],[392,439],[439,438],[438,392],[382,341],[341,256],[256,382],[429,420],[420,360],[360,429],[364,394],[394,379],[379,364],[277,343],[343,437],[437,277],[443,444],[444,283],[283,443],[275,440],[440,363],[363,275],[431,262],[262,369],[369,431],[297,338],[338,337],[337,297],[273,375],[375,321],[321,273],[450,451],[451,349],[349,450],[446,342],[342,467],[467,446],[293,334],[334,282],[282,293],[458,461],[461,462],[462,458],[276,353],[353,383],[383,276],[308,324],[324,325],[325,308],[276,300],[300,293],[293,276],[372,345],[345,447],[447,372],[352,345],[345,340],[340,352],[274,1],[1,19],[19,274],[456,248],[248,281],[281,456],[436,427],[427,425],[425,436],[381,256],[256,252],[252,381],[269,391],[391,393],[393,269],[200,199],[199,428],[428,200],[266,330],[330,329],[329,266],[287,273],[273,422],[422,287],[250,462],[462,328],[328,250],[258,286],[286,384],[384,258],[265,353],[353,342],[342,265],[387,259],[259,257],[257,387],[424,431],[431,430],[430,424],[342,353],[353,276],[276,342],[273,335],[335,424],[424,273],[292,325],[325,307],[307,292],[366,447],[447,345],[345,366],[271,303],[303,302],[302,271],[423,266],[266,371],[371,423],[294,455],[455,460],[460,294],[279,278],[278,294],[294,279],[271,272],[272,304],[304,271],[432,434],[434,427],[427,432],[272,407],[407,408],[408,272],[394,430],[430,431],[431,394],[395,369],[369,400],[400,395],[334,333],[333,299],[299,334],[351,417],[417,168],[168,351],[352,280],[280,411],[411,352],[325,319],[319,320],[320,325],[295,296],[296,336],[336,295],[319,403],[403,404],[404,319],[330,348],[348,349],[349,330],[293,298],[298,333],[333,293],[323,454],[454,447],[447,323],[15,16],[16,315],[315,15],[358,429],[429,279],[279,358],[14,15],[15,316],[316,14],[285,336],[336,9],[9,285],[329,349],[349,350],[350,329],[374,380],[380,252],[252,374],[318,402],[402,403],[403,318],[6,197],[197,419],[419,6],[318,319],[319,325],[325,318],[367,364],[364,365],[365,367],[435,367],[367,397],[397,435],[344,438],[438,439],[439,344],[272,271],[271,311],[311,272],[195,5],[5,281],[281,195],[273,287],[287,291],[291,273],[396,428],[428,199],[199,396],[311,271],[271,268],[268,311],[283,444],[444,445],[445,283],[373,254],[254,339],[339,373],[282,334],[334,296],[296,282],[449,347],[347,346],[346,449],[264,447],[447,454],[454,264],[336,296],[296,299],[299,336],[338,10],[10,151],[151,338],[278,439],[439,455],[455,278],[292,407],[407,415],[415,292],[358,371],[371,355],[355,358],[340,345],[345,372],[372,340],[346,347],[347,280],[280,346],[442,443],[443,282],[282,442],[19,94],[94,370],[370,19],[441,442],[442,295],[295,441],[248,419],[419,197],[197,248],[263,255],[255,359],[359,263],[440,275],[275,274],[274,440],[300,383],[383,368],[368,300],[351,412],[412,465],[465,351],[263,467],[467,466],[466,263],[301,368],[368,389],[389,301],[395,378],[378,379],[379,395],[412,351],[351,419],[419,412],[436,426],[426,322],[322,436],[2,164],[164,393],[393,2],[370,462],[462,461],[461,370],[164,0],[0,267],[267,164],[302,11],[11,12],[12,302],[268,12],[12,13],[13,268],[293,300],[300,301],[301,293],[446,261],[261,340],[340,446],[330,266],[266,425],[425,330],[426,423],[423,391],[391,426],[429,355],[355,437],[437,429],[391,327],[327,326],[326,391],[440,457],[457,438],[438,440],[341,382],[382,362],[362,341],[459,457],[457,461],[461,459],[434,430],[430,394],[394,434],[414,463],[463,362],[362,414],[396,369],[369,262],[262,396],[354,461],[461,457],[457,354],[316,403],[403,402],[402,316],[315,404],[404,403],[403,315],[314,405],[405,404],[404,314],[313,406],[406,405],[405,313],[421,418],[418,406],[406,421],[366,401],[401,361],[361,366],[306,408],[408,407],[407,306],[291,409],[409,408],[408,291],[287,410],[410,409],[409,287],[432,436],[436,410],[410,432],[434,416],[416,411],[411,434],[264,368],[368,383],[383,264],[309,438],[438,457],[457,309],[352,376],[376,401],[401,352],[274,275],[275,4],[4,274],[421,428],[428,262],[262,421],[294,327],[327,358],[358,294],[433,416],[416,367],[367,433],[289,455],[455,439],[439,289],[462,370],[370,326],[326,462],[2,326],[326,370],[370,2],[305,460],[460,455],[455,305],[254,449],[449,448],[448,254],[255,261],[261,446],[446,255],[253,450],[450,449],[449,253],[252,451],[451,450],[450,252],[256,452],[452,451],[451,256],[341,453],[453,452],[452,341],[413,464],[464,463],[463,413],[441,413],[413,414],[414,441],[258,442],[442,441],[441,258],[257,443],[443,442],[442,257],[259,444],[444,443],[443,259],[260,445],[445,444],[444,260],[467,342],[342,445],[445,467],[459,458],[458,250],[250,459],[289,392],[392,290],[290,289],[290,328],[328,460],[460,290],[376,433],[433,435],[435,376],[250,290],[290,392],[392,250],[411,416],[416,433],[433,411],[341,463],[463,464],[464,341],[453,464],[464,465],[465,453],[357,465],[465,412],[412,357],[343,412],[412,399],[399,343],[360,363],[363,440],[440,360],[437,399],[399,456],[456,437],[420,456],[456,363],[363,420],[401,435],[435,288],[288,401],[372,383],[383,353],[353,372],[339,255],[255,249],[249,339],[448,261],[261,255],[255,448],[133,243],[243,190],[190,133],[133,155],[155,112],[112,133],[33,246],[246,247],[247,33],[33,130],[130,25],[25,33],[398,384],[384,286],[286,398],[362,398],[398,414],[414,362],[362,463],[463,341],[341,362],[263,359],[359,467],[467,263],[263,249],[249,255],[255,263],[466,467],[467,260],[260,466],[75,60],[60,166],[166,75],[238,239],[239,79],[79,238],[162,127],[127,139],[139,162],[72,11],[11,37],[37,72],[121,232],[232,120],[120,121],[73,72],[72,39],[39,73],[114,128],[128,47],[47,114],[233,232],[232,128],[128,233],[103,104],[104,67],[67,103],[152,175],[175,148],[148,152],[119,118],[118,101],[101,119],[74,73],[73,40],[40,74],[107,9],[9,108],[108,107],[49,48],[48,131],[131,49],[32,194],[194,211],[211,32],[184,74],[74,185],[185,184],[191,80],[80,183],[183,191],[185,40],[40,186],[186,185],[119,230],[230,118],[118,119],[210,202],[202,214],[214,210],[84,83],[83,17],[17,84],[77,76],[76,146],[146,77],[161,160],[160,30],[30,161],[190,56],[56,173],[173,190],[182,106],[106,194],[194,182],[138,135],[135,192],[192,138],[129,203],[203,98],[98,129],[54,21],[21,68],[68,54],[5,51],[51,4],[4,5],[145,144],[144,23],[23,145],[90,77],[77,91],[91,90],[207,205],[205,187],[187,207],[83,201],[201,18],[18,83],[181,91],[91,182],[182,181],[180,90],[90,181],[181,180],[16,85],[85,17],[17,16],[205,206],[206,36],[36,205],[176,148],[148,140],[140,176],[165,92],[92,39],[39,165],[245,193],[193,244],[244,245],[27,159],[159,28],[28,27],[30,247],[247,161],[161,30],[174,236],[236,196],[196,174],[103,54],[54,104],[104,103],[55,193],[193,8],[8,55],[111,117],[117,31],[31,111],[221,189],[189,55],[55,221],[240,98],[98,99],[99,240],[142,126],[126,100],[100,142],[219,166],[166,218],[218,219],[112,155],[155,26],[26,112],[198,209],[209,131],[131,198],[169,135],[135,150],[150,169],[114,47],[47,217],[217,114],[224,223],[223,53],[53,224],[220,45],[45,134],[134,220],[32,211],[211,140],[140,32],[109,67],[67,108],[108,109],[146,43],[43,91],[91,146],[231,230],[230,120],[120,231],[113,226],[226,247],[247,113],[105,63],[63,52],[52,105],[241,238],[238,242],[242,241],[124,46],[46,156],[156,124],[95,78],[78,96],[96,95],[70,46],[46,63],[63,70],[116,143],[143,227],[227,116],[116,123],[123,111],[111,116],[1,44],[44,19],[19,1],[3,236],[236,51],[51,3],[207,216],[216,205],[205,207],[26,154],[154,22],[22,26],[165,39],[39,167],[167,165],[199,200],[200,208],[208,199],[101,36],[36,100],[100,101],[43,57],[57,202],[202,43],[242,20],[20,99],[99,242],[56,28],[28,157],[157,56],[124,35],[35,113],[113,124],[29,160],[160,27],[27,29],[211,204],[204,210],[210,211],[124,113],[113,46],[46,124],[106,43],[43,204],[204,106],[96,62],[62,77],[77,96],[227,137],[137,116],[116,227],[73,41],[41,72],[72,73],[36,203],[203,142],[142,36],[235,64],[64,240],[240,235],[48,49],[49,64],[64,48],[42,41],[41,74],[74,42],[214,212],[212,207],[207,214],[183,42],[42,184],[184,183],[210,169],[169,211],[211,210],[140,170],[170,176],[176,140],[104,105],[105,69],[69,104],[193,122],[122,168],[168,193],[50,123],[123,187],[187,50],[89,96],[96,90],[90,89],[66,65],[65,107],[107,66],[179,89],[89,180],[180,179],[119,101],[101,120],[120,119],[68,63],[63,104],[104,68],[234,93],[93,227],[227,234],[16,15],[15,85],[85,16],[209,129],[129,49],[49,209],[15,14],[14,86],[86,15],[107,55],[55,9],[9,107],[120,100],[100,121],[121,120],[153,145],[145,22],[22,153],[178,88],[88,179],[179,178],[197,6],[6,196],[196,197],[89,88],[88,96],[96,89],[135,138],[138,136],[136,135],[138,215],[215,172],[172,138],[218,115],[115,219],[219,218],[41,42],[42,81],[81,41],[5,195],[195,51],[51,5],[57,43],[43,61],[61,57],[208,171],[171,199],[199,208],[41,81],[81,38],[38,41],[224,53],[53,225],[225,224],[24,144],[144,110],[110,24],[105,52],[52,66],[66,105],[118,229],[229,117],[117,118],[227,34],[34,234],[234,227],[66,107],[107,69],[69,66],[10,109],[109,151],[151,10],[219,48],[48,235],[235,219],[183,62],[62,191],[191,183],[142,129],[129,126],[126,142],[116,111],[111,143],[143,116],[118,117],[117,50],[50,118],[223,222],[222,52],[52,223],[94,19],[19,141],[141,94],[222,221],[221,65],[65,222],[196,3],[3,197],[197,196],[45,220],[220,44],[44,45],[156,70],[70,139],[139,156],[188,122],[122,245],[245,188],[139,71],[71,162],[162,139],[149,170],[170,150],[150,149],[122,188],[188,196],[196,122],[206,216],[216,92],[92,206],[164,2],[2,167],[167,164],[242,141],[141,241],[241,242],[0,164],[164,37],[37,0],[11,72],[72,12],[12,11],[12,38],[38,13],[13,12],[70,63],[63,71],[71,70],[31,226],[226,111],[111,31],[36,101],[101,205],[205,36],[203,206],[206,165],[165,203],[126,209],[209,217],[217,126],[98,165],[165,97],[97,98],[237,220],[220,218],[218,237],[237,239],[239,241],[241,237],[210,214],[214,169],[169,210],[140,171],[171,32],[32,140],[241,125],[125,237],[237,241],[179,86],[86,178],[178,179],[180,85],[85,179],[179,180],[181,84],[84,180],[180,181],[182,83],[83,181],[181,182],[194,201],[201,182],[182,194],[177,137],[137,132],[132,177],[184,76],[76,183],[183,184],[185,61],[61,184],[184,185],[186,57],[57,185],[185,186],[216,212],[212,186],[186,216],[192,214],[214,187],[187,192],[139,34],[34,156],[156,139],[218,79],[79,237],[237,218],[147,123],[123,177],[177,147],[45,44],[44,4],[4,45],[208,201],[201,32],[32,208],[98,64],[64,129],[129,98],[192,213],[213,138],[138,192],[235,59],[59,219],[219,235],[141,242],[242,97],[97,141],[97,2],[2,141],[141,97],[240,75],[75,235],[235,240],[229,24],[24,228],[228,229],[31,25],[25,226],[226,31],[230,23],[23,229],[229,230],[231,22],[22,230],[230,231],[232,26],[26,231],[231,232],[233,112],[112,232],[232,233],[244,189],[189,243],[243,244],[189,221],[221,190],[190,189],[222,28],[28,221],[221,222],[223,27],[27,222],[222,223],[224,29],[29,223],[223,224],[225,30],[30,224],[224,225],[113,247],[247,225],[225,113],[99,60],[60,240],[240,99],[213,147],[147,215],[215,213],[60,20],[20,166],[166,60],[192,187],[187,213],[213,192],[243,112],[112,244],[244,243],[244,233],[233,245],[245,244],[245,128],[128,188],[188,245],[188,114],[114,174],[174,188],[134,131],[131,220],[220,134],[174,217],[217,236],[236,174],[236,198],[198,134],[134,236],[215,177],[177,58],[58,215],[156,143],[143,124],[124,156],[25,110],[110,7],[7,25],[31,228],[228,25],[25,31],[264,356],[356,368],[368,264],[0,11],[11,267],[267,0],[451,452],[452,349],[349,451],[267,302],[302,269],[269,267],[350,357],[357,277],[277,350],[350,452],[452,357],[357,350],[299,333],[333,297],[297,299],[396,175],[175,377],[377,396],[280,347],[347,330],[330,280],[269,303],[303,270],[270,269],[151,9],[9,337],[337,151],[344,278],[278,360],[360,344],[424,418],[418,431],[431,424],[270,304],[304,409],[409,270],[272,310],[310,407],[407,272],[322,270],[270,410],[410,322],[449,450],[450,347],[347,449],[432,422],[422,434],[434,432],[18,313],[313,17],[17,18],[291,306],[306,375],[375,291],[259,387],[387,260],[260,259],[424,335],[335,418],[418,424],[434,364],[364,416],[416,434],[391,423],[423,327],[327,391],[301,251],[251,298],[298,301],[275,281],[281,4],[4,275],[254,373],[373,253],[253,254],[375,307],[307,321],[321,375],[280,425],[425,411],[411,280],[200,421],[421,18],[18,200],[335,321],[321,406],[406,335],[321,320],[320,405],[405,321],[314,315],[315,17],[17,314],[423,426],[426,266],[266,423],[396,377],[377,369],[369,396],[270,322],[322,269],[269,270],[413,417],[417,464],[464,413],[385,386],[386,258],[258,385],[248,456],[456,419],[419,248],[298,284],[284,333],[333,298],[168,417],[417,8],[8,168],[448,346],[346,261],[261,448],[417,413],[413,285],[285,417],[326,327],[327,328],[328,326],[277,355],[355,329],[329,277],[309,392],[392,438],[438,309],[381,382],[382,256],[256,381],[279,429],[429,360],[360,279],[365,364],[364,379],[379,365],[355,277],[277,437],[437,355],[282,443],[443,283],[283,282],[281,275],[275,363],[363,281],[395,431],[431,369],[369,395],[299,297],[297,337],[337,299],[335,273],[273,321],[321,335],[348,450],[450,349],[349,348],[359,446],[446,467],[467,359],[283,293],[293,282],[282,283],[250,458],[458,462],[462,250],[300,276],[276,383],[383,300],[292,308],[308,325],[325,292],[283,276],[276,293],[293,283],[264,372],[372,447],[447,264],[346,352],[352,340],[340,346],[354,274],[274,19],[19,354],[363,456],[456,281],[281,363],[426,436],[436,425],[425,426],[380,381],[381,252],[252,380],[267,269],[269,393],[393,267],[421,200],[200,428],[428,421],[371,266],[266,329],[329,371],[432,287],[287,422],[422,432],[290,250],[250,328],[328,290],[385,258],[258,384],[384,385],[446,265],[265,342],[342,446],[386,387],[387,257],[257,386],[422,424],[424,430],[430,422],[445,342],[342,276],[276,445],[422,273],[273,424],[424,422],[306,292],[292,307],[307,306],[352,366],[366,345],[345,352],[268,271],[271,302],[302,268],[358,423],[423,371],[371,358],[327,294],[294,460],[460,327],[331,279],[279,294],[294,331],[303,271],[271,304],[304,303],[436,432],[432,427],[427,436],[304,272],[272,408],[408,304],[395,394],[394,431],[431,395],[378,395],[395,400],[400,378],[296,334],[334,299],[299,296],[6,351],[351,168],[168,6],[376,352],[352,411],[411,376],[307,325],[325,320],[320,307],[285,295],[295,336],[336,285],[320,319],[319,404],[404,320],[329,330],[330,349],[349,329],[334,293],[293,333],[333,334],[366,323],[323,447],[447,366],[316,15],[15,315],[315,316],[331,358],[358,279],[279,331],[317,14],[14,316],[316,317],[8,285],[285,9],[9,8],[277,329],[329,350],[350,277],[253,374],[374,252],[252,253],[319,318],[318,403],[403,319],[351,6],[6,419],[419,351],[324,318],[318,325],[325,324],[397,367],[367,365],[365,397],[288,435],[435,397],[397,288],[278,344],[344,439],[439,278],[310,272],[272,311],[311,310],[248,195],[195,281],[281,248],[375,273],[273,291],[291,375],[175,396],[396,199],[199,175],[312,311],[311,268],[268,312],[276,283],[283,445],[445,276],[390,373],[373,339],[339,390],[295,282],[282,296],[296,295],[448,449],[449,346],[346,448],[356,264],[264,454],[454,356],[337,336],[336,299],[299,337],[337,338],[338,151],[151,337],[294,278],[278,455],[455,294],[308,292],[292,415],[415,308],[429,358],[358,355],[355,429],[265,340],[340,372],[372,265],[352,346],[346,280],[280,352],[295,442],[442,282],[282,295],[354,19],[19,370],[370,354],[285,441],[441,295],[295,285],[195,248],[248,197],[197,195],[457,440],[440,274],[274,457],[301,300],[300,368],[368,301],[417,351],[351,465],[465,417],[251,301],[301,389],[389,251],[394,395],[395,379],[379,394],[399,412],[412,419],[419,399],[410,436],[436,322],[322,410],[326,2],[2,393],[393,326],[354,370],[370,461],[461,354],[393,164],[164,267],[267,393],[268,302],[302,12],[12,268],[312,268],[268,13],[13,312],[298,293],[293,301],[301,298],[265,446],[446,340],[340,265],[280,330],[330,425],[425,280],[322,426],[426,391],[391,322],[420,429],[429,437],[437,420],[393,391],[391,326],[326,393],[344,440],[440,438],[438,344],[458,459],[459,461],[461,458],[364,434],[434,394],[394,364],[428,396],[396,262],[262,428],[274,354],[354,457],[457,274],[317,316],[316,402],[402,317],[316,315],[315,403],[403,316],[315,314],[314,404],[404,315],[314,313],[313,405],[405,314],[313,421],[421,406],[406,313],[323,366],[366,361],[361,323],[292,306],[306,407],[407,292],[306,291],[291,408],[408,306],[291,287],[287,409],[409,291],[287,432],[432,410],[410,287],[427,434],[434,411],[411,427],[372,264],[264,383],[383,372],[459,309],[309,457],[457,459],[366,352],[352,401],[401,366],[1,274],[274,4],[4,1],[418,421],[421,262],[262,418],[331,294],[294,358],[358,331],[435,433],[433,367],[367,435],[392,289],[289,439],[439,392],[328,462],[462,326],[326,328],[94,2],[2,370],[370,94],[289,305],[305,455],[455,289],[339,254],[254,448],[448,339],[359,255],[255,446],[446,359],[254,253],[253,449],[449,254],[253,252],[252,450],[450,253],[252,256],[256,451],[451,252],[256,341],[341,452],[452,256],[414,413],[413,463],[463,414],[286,441],[441,414],[414,286],[286,258],[258,441],[441,286],[258,257],[257,442],[442,258],[257,259],[259,443],[443,257],[259,260],[260,444],[444,259],[260,467],[467,445],[445,260],[309,459],[459,250],[250,309],[305,289],[289,290],[290,305],[305,290],[290,460],[460,305],[401,376],[376,435],[435,401],[309,250],[250,392],[392,309],[376,411],[411,433],[433,376],[453,341],[341,464],[464,453],[357,453],[453,465],[465,357],[343,357],[357,412],[412,343],[437,343],[343,399],[399,437],[344,360],[360,440],[440,344],[420,437],[437,456],[456,420],[360,420],[420,363],[363,360],[361,401],[401,288],[288,361],[265,372],[372,353],[353,265],[390,339],[339,249],[249,390],[339,448],[448,255],[255,339]]),Re("matrixDataToMatrix",function(h){for(var y=h.getCols(),G=h.getRows(),C=h.getPackedDataList(),K=[],_=0;_<G;_++)K.push(Array(y));for(_=0;_<G;_++)for(var M=0;M<y;M++){var q=h.getLayout()===1?_*y+M:M*G+_;K[_][M]=C[q]}return K}),Re("VERSION","0.4.1633559619")}).call(Ri);const Ii={};(function(){var i;function n(t){var c=0;return function(){return c<t.length?{done:!1,value:t[c++]}:{done:!0}}}var r=typeof Object.defineProperties=="function"?Object.defineProperty:function(t,c,a){return t==Array.prototype||t==Object.prototype||(t[c]=a.value),t};function f(t){t=[typeof globalThis=="object"&&globalThis,t,typeof window=="object"&&window,typeof self=="object"&&self,typeof global=="object"&&global];for(var c=0;c<t.length;++c){var a=t[c];if(a&&a.Math==Math)return a}throw Error("Cannot find global object")}var Z=f(this);function x(t,c){if(c)t:{var a=Z;t=t.split(".");for(var b=0;b<t.length-1;b++){var S=t[b];if(!(S in a))break t;a=a[S]}t=t[t.length-1],b=a[t],c=c(b),c!=b&&c!=null&&r(a,t,{configurable:!0,writable:!0,value:c})}}x("Symbol",function(t){function c(L){if(this instanceof c)throw new TypeError("Symbol is not a constructor");return new a(b+(L||"")+"_"+S++,L)}function a(L,F){this.g=L,r(this,"description",{configurable:!0,writable:!0,value:F})}if(t)return t;a.prototype.toString=function(){return this.g};var b="jscomp_symbol_"+(1e9*Math.random()>>>0)+"_",S=0;return c}),x("Symbol.iterator",function(t){if(t)return t;t=Symbol("Symbol.iterator");for(var c="Array Int8Array Uint8Array Uint8ClampedArray Int16Array Uint16Array Int32Array Uint32Array Float32Array Float64Array".split(" "),a=0;a<c.length;a++){var b=Z[c[a]];typeof b=="function"&&typeof b.prototype[t]!="function"&&r(b.prototype,t,{configurable:!0,writable:!0,value:function(){return H(n(this))}})}return t});function H(t){return t={next:t},t[Symbol.iterator]=function(){return this},t}function T(t){var c=typeof Symbol<"u"&&Symbol.iterator&&t[Symbol.iterator];return c?c.call(t):{next:n(t)}}function J(t){if(!(t instanceof Array)){t=T(t);for(var c,a=[];!(c=t.next()).done;)a.push(c.value);t=a}return t}var et=typeof Object.create=="function"?Object.create:function(t){function c(){}return c.prototype=t,new c},lt;if(typeof Object.setPrototypeOf=="function")lt=Object.setPrototypeOf;else{var pt;t:{var Yt={a:!0},Lt={};try{Lt.__proto__=Yt,pt=Lt.a;break t}catch{}pt=!1}lt=pt?function(t,c){if(t.__proto__=c,t.__proto__!==c)throw new TypeError(t+" is not extensible");return t}:null}var at=lt;function dt(t,c){if(t.prototype=et(c.prototype),t.prototype.constructor=t,at)at(t,c);else for(var a in c)if(a!="prototype")if(Object.defineProperties){var b=Object.getOwnPropertyDescriptor(c,a);b&&Object.defineProperty(t,a,b)}else t[a]=c[a];t.ka=c.prototype}function Bt(){this.l=!1,this.i=null,this.h=void 0,this.g=1,this.s=this.m=0,this.j=null}function Nt(t){if(t.l)throw new TypeError("Generator is already running");t.l=!0}Bt.prototype.o=function(t){this.h=t};function ee(t,c){t.j={V:c,X:!0},t.g=t.m||t.s}Bt.prototype.return=function(t){this.j={return:t},this.g=this.s};function O(t,c,a){return t.g=a,{value:c}}function $e(t){this.g=new Bt,this.h=t}function je(t,c){Nt(t.g);var a=t.g.i;return a?We(t,"return"in a?a.return:function(b){return{value:b,done:!0}},c,t.g.return):(t.g.return(c),zt(t))}function We(t,c,a,b){try{var S=c.call(t.g.i,a);if(!(S instanceof Object))throw new TypeError("Iterator result "+S+" is not an object");if(!S.done)return t.g.l=!1,S;var L=S.value}catch(F){return t.g.i=null,ee(t.g,F),zt(t)}return t.g.i=null,b.call(t.g,L),zt(t)}function zt(t){for(;t.g.g;)try{var c=t.h(t.g);if(c)return t.g.l=!1,{value:c.value,done:!1}}catch(a){t.g.h=void 0,ee(t.g,a)}if(t.g.l=!1,t.g.j){if(c=t.g.j,t.g.j=null,c.X)throw c.V;return{value:c.return,done:!0}}return{value:void 0,done:!0}}function Jn(t){this.next=function(c){return Nt(t.g),t.g.i?c=We(t,t.g.i.next,c,t.g.o):(t.g.o(c),c=zt(t)),c},this.throw=function(c){return Nt(t.g),t.g.i?c=We(t,t.g.i.throw,c,t.g.o):(ee(t.g,c),c=zt(t)),c},this.return=function(c){return je(t,c)},this[Symbol.iterator]=function(){return this}}function ne(t){function c(b){return t.next(b)}function a(b){return t.throw(b)}return new Promise(function(b,S){function L(F){F.done?b(F.value):Promise.resolve(F.value).then(c,a).then(L,S)}L(t.next())})}function Zt(t){return ne(new Jn(new $e(t)))}x("Promise",function(t){function c(F){this.h=0,this.i=void 0,this.g=[],this.o=!1;var U=this.j();try{F(U.resolve,U.reject)}catch(z){U.reject(z)}}function a(){this.g=null}function b(F){return F instanceof c?F:new c(function(U){U(F)})}if(t)return t;a.prototype.h=function(F){if(this.g==null){this.g=[];var U=this;this.i(function(){U.l()})}this.g.push(F)};var S=Z.setTimeout;a.prototype.i=function(F){S(F,0)},a.prototype.l=function(){for(;this.g&&this.g.length;){var F=this.g;this.g=[];for(var U=0;U<F.length;++U){var z=F[U];F[U]=null;try{z()}catch(Q){this.j(Q)}}}this.g=null},a.prototype.j=function(F){this.i(function(){throw F})},c.prototype.j=function(){function F(Q){return function(D){z||(z=!0,Q.call(U,D))}}var U=this,z=!1;return{resolve:F(this.D),reject:F(this.l)}},c.prototype.D=function(F){if(F===this)this.l(new TypeError("A Promise cannot resolve to itself"));else if(F instanceof c)this.G(F);else{t:switch(typeof F){case"object":var U=F!=null;break t;case"function":U=!0;break t;default:U=!1}U?this.A(F):this.m(F)}},c.prototype.A=function(F){var U=void 0;try{U=F.then}catch(z){this.l(z);return}typeof U=="function"?this.H(U,F):this.m(F)},c.prototype.l=function(F){this.s(2,F)},c.prototype.m=function(F){this.s(1,F)},c.prototype.s=function(F,U){if(this.h!=0)throw Error("Cannot settle("+F+", "+U+"): Promise already settled in state"+this.h);this.h=F,this.i=U,this.h===2&&this.F(),this.B()},c.prototype.F=function(){var F=this;S(function(){if(F.C()){var U=Z.console;typeof U<"u"&&U.error(F.i)}},1)},c.prototype.C=function(){if(this.o)return!1;var F=Z.CustomEvent,U=Z.Event,z=Z.dispatchEvent;return typeof z>"u"?!0:(typeof F=="function"?F=new F("unhandledrejection",{cancelable:!0}):typeof U=="function"?F=new U("unhandledrejection",{cancelable:!0}):(F=Z.document.createEvent("CustomEvent"),F.initCustomEvent("unhandledrejection",!1,!0,F)),F.promise=this,F.reason=this.i,z(F))},c.prototype.B=function(){if(this.g!=null){for(var F=0;F<this.g.length;++F)L.h(this.g[F]);this.g=null}};var L=new a;return c.prototype.G=function(F){var U=this.j();F.K(U.resolve,U.reject)},c.prototype.H=function(F,U){var z=this.j();try{F.call(U,z.resolve,z.reject)}catch(Q){z.reject(Q)}},c.prototype.then=function(F,U){function z(ft,mt){return typeof ft=="function"?function(Gt){try{Q(ft(Gt))}catch(vt){D(vt)}}:mt}var Q,D,st=new c(function(ft,mt){Q=ft,D=mt});return this.K(z(F,Q),z(U,D)),st},c.prototype.catch=function(F){return this.then(void 0,F)},c.prototype.K=function(F,U){function z(){switch(Q.h){case 1:F(Q.i);break;case 2:U(Q.i);break;default:throw Error("Unexpected state: "+Q.h)}}var Q=this;this.g==null?L.h(z):this.g.push(z),this.o=!0},c.resolve=b,c.reject=function(F){return new c(function(U,z){z(F)})},c.race=function(F){return new c(function(U,z){for(var Q=T(F),D=Q.next();!D.done;D=Q.next())b(D.value).K(U,z)})},c.all=function(F){var U=T(F),z=U.next();return z.done?b([]):new c(function(Q,D){function st(Gt){return function(vt){ft[Gt]=vt,mt--,mt==0&&Q(ft)}}var ft=[],mt=0;do ft.push(void 0),mt++,b(z.value).K(st(ft.length-1),D),z=U.next();while(!z.done)})},c});function qe(t,c){t instanceof String&&(t+="");var a=0,b=!1,S={next:function(){if(!b&&a<t.length){var L=a++;return{value:c(L,t[L]),done:!1}}return b=!0,{done:!0,value:void 0}}};return S[Symbol.iterator]=function(){return S},S}var zn=typeof Object.assign=="function"?Object.assign:function(t,c){for(var a=1;a<arguments.length;a++){var b=arguments[a];if(b)for(var S in b)Object.prototype.hasOwnProperty.call(b,S)&&(t[S]=b[S])}return t};x("Object.assign",function(t){return t||zn}),x("Object.is",function(t){return t||function(c,a){return c===a?c!==0||1/c===1/a:c!==c&&a!==a}}),x("Array.prototype.includes",function(t){return t||function(c,a){var b=this;b instanceof String&&(b=String(b));var S=b.length;for(a=a||0,0>a&&(a=Math.max(a+S,0));a<S;a++){var L=b[a];if(L===c||Object.is(L,c))return!0}return!1}}),x("String.prototype.includes",function(t){return t||function(c,a){if(this==null)throw new TypeError("The 'this' value for String.prototype.includes must not be null or undefined");if(c instanceof RegExp)throw new TypeError("First argument to String.prototype.includes must not be a regular expression");return this.indexOf(c,a||0)!==-1}}),x("Array.prototype.keys",function(t){return t||function(){return qe(this,function(c){return c})}});var Re=this||self;function Ct(t,c){t=t.split(".");var a=Re;t[0]in a||typeof a.execScript>"u"||a.execScript("var "+t[0]);for(var b;t.length&&(b=t.shift());)t.length||c===void 0?a[b]&&a[b]!==Object.prototype[b]?a=a[b]:a=a[b]={}:a[b]=c}function Te(t){throw t}function ln(t,c){Te(Error("Invalid wire type: "+t+" (at position "+c+")"))}function Xn(){Te(Error("Failed to read varint, encoding is invalid."))}function Hn(t,c){return c=String.fromCharCode.apply(null,c),t==null?c:t+c}var In,kn=typeof TextDecoder<"u",hn,bn=typeof TextEncoder<"u";function En(t){if(bn)t=(hn||(hn=new TextEncoder)).encode(t);else{var c=void 0;c=c===void 0?!1:c;for(var a=0,b=new Uint8Array(3*t.length),S=0;S<t.length;S++){var L=t.charCodeAt(S);if(128>L)b[a++]=L;else{if(2048>L)b[a++]=L>>6|192;else{if(55296<=L&&57343>=L){if(56319>=L&&S<t.length){var F=t.charCodeAt(++S);if(56320<=F&&57343>=F){L=1024*(L-55296)+F-56320+65536,b[a++]=L>>18|240,b[a++]=L>>12&63|128,b[a++]=L>>6&63|128,b[a++]=L&63|128;continue}else S--}if(c)throw Error("Found an unpaired surrogate");L=65533}b[a++]=L>>12|224,b[a++]=L>>6&63|128}b[a++]=L&63|128}}t=b.subarray(0,a)}return t}var Fn={},Pe=null;function Ae(t){var c;c===void 0&&(c=0),he(),c=Fn[c];for(var a=Array(Math.floor(t.length/3)),b=c[64]||"",S=0,L=0;S<t.length-2;S+=3){var F=t[S],U=t[S+1],z=t[S+2],Q=c[F>>2];F=c[(F&3)<<4|U>>4],U=c[(U&15)<<2|z>>6],z=c[z&63],a[L++]=Q+F+U+z}switch(Q=0,z=b,t.length-S){case 2:Q=t[S+1],z=c[(Q&15)<<2]||b;case 1:t=t[S],a[L]=c[t>>2]+c[(t&3)<<4|Q>>4]+z+b}return a.join("")}function xn(t){var c=t.length,a=3*c/4;a%3?a=Math.floor(a):"=.".indexOf(t[c-1])!=-1&&(a="=.".indexOf(t[c-2])!=-1?a-2:a-1);var b=new Uint8Array(a),S=0;return Wn(t,function(L){b[S++]=L}),b.subarray(0,S)}function Wn(t,c){function a(z){for(;b<t.length;){var Q=t.charAt(b++),D=Pe[Q];if(D!=null)return D;if(!/^[\s\xa0]*$/.test(Q))throw Error("Unknown base64 encoding at char: "+Q)}return z}he();for(var b=0;;){var S=a(-1),L=a(0),F=a(64),U=a(64);if(U===64&&S===-1)break;c(S<<2|L>>4),F!=64&&(c(L<<4&240|F>>2),U!=64&&c(F<<6&192|U))}}function he(){if(!Pe){Pe={};for(var t="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789".split(""),c=["+/=","+/","-_=","-_.","-_"],a=0;5>a;a++){var b=t.concat(c[a].split(""));Fn[a]=b;for(var S=0;S<b.length;S++){var L=b[S];Pe[L]===void 0&&(Pe[L]=S)}}}}var Se=typeof Uint8Array=="function",Oe;function re(t){if(this.g=t,t!==null&&t.length===0)throw Error("ByteString should be constructed with non-empty values")}var Ve=typeof Uint8Array.prototype.slice=="function";function cn(t,c,a){return c===a?Oe||(Oe=new Uint8Array(0)):Ve?t.slice(c,a):new Uint8Array(t.subarray(c,a))}var Be=0,Qt=0;function Ze(t){if(t.constructor===Uint8Array)return t;if(t.constructor===ArrayBuffer)return new Uint8Array(t);if(t.constructor===Array)return new Uint8Array(t);if(t.constructor===String)return xn(t);if(t.constructor===re){if(t.g==null)var c=Oe||(Oe=new Uint8Array(0));else{c=Uint8Array;var a=t.g;a=a==null||Se&&a!=null&&a instanceof Uint8Array?a:typeof a=="string"?xn(a):null,t=t.g=a,c=new c(t)}return c}if(t instanceof Uint8Array)return new Uint8Array(t.buffer,t.byteOffset,t.byteLength);throw Error("Type not convertible to a Uint8Array, expected a Uint8Array, an ArrayBuffer, a base64 encoded string, or Array of numbers")}function Fe(t,c){c=c===void 0?{}:c,c=c.v===void 0?!1:c.v,this.h=null,this.g=this.i=this.l=0,this.j=!1,this.v=c,t&&Mt(this,t)}function Mt(t,c){t.h=Ze(c),t.l=0,t.i=t.h.length,t.g=t.l}Fe.prototype.reset=function(){this.g=this.l};function Ie(t){for(var c=128,a=0,b=0,S=0;4>S&&128<=c;S++)c=t.h[t.g++],a|=(c&127)<<7*S;if(128<=c&&(c=t.h[t.g++],a|=(c&127)<<28,b|=(c&127)>>4),128<=c)for(S=0;5>S&&128<=c;S++)c=t.h[t.g++],b|=(c&127)<<7*S+3;if(128>c)return t=a>>>0,c=b>>>0,(b=c&2147483648)&&(t=~t+1>>>0,c=~c>>>0,t==0&&(c=c+1>>>0)),t=4294967296*c+(t>>>0),b?-t:t;t.j=!0,Xn()}function jt(t){t.g>t.i&&(t.j=!0,Te(Error("Tried to read past the end of the data "+t.g+" > "+t.i)))}function ye(t){var c=t.h,a=c[t.g],b=a&127;return 128>a?(t.g+=1,jt(t),b):(a=c[t.g+1],b|=(a&127)<<7,128>a?(t.g+=2,jt(t),b):(a=c[t.g+2],b|=(a&127)<<14,128>a?(t.g+=3,jt(t),b):(a=c[t.g+3],b|=(a&127)<<21,128>a?(t.g+=4,jt(t),b):(a=c[t.g+4],b|=(a&15)<<28,128>a?(t.g+=5,jt(t),b>>>0):(t.g+=5,128<=c[t.g++]&&128<=c[t.g++]&&128<=c[t.g++]&&128<=c[t.g++]&&128<=c[t.g++]?(t.j=!0,Xn(),b):(jt(t),b))))))}function Ye(t){var c=t.h[t.g],a=t.h[t.g+1],b=t.h[t.g+2],S=t.h[t.g+3];return t.g+=4,jt(t),(c<<0|a<<8|b<<16|S<<24)>>>0}Fe.prototype.m=function(){var t=Ye(this),c=2*(t>>31)+1,a=t>>>23&255;return t&=8388607,a==255?t?NaN:1/0*c:a==0?c*Math.pow(2,-149)*t:c*Math.pow(2,a-150)*(t+Math.pow(2,23))};var tn=[];function Xe(){this.g=new Uint8Array(64),this.h=0}function Pt(t,c){if(!(t.h+1<t.g.length)){var a=t.g;t.g=new Uint8Array(Math.ceil(1+2*t.g.length)),t.g.set(a)}t.g[t.h++]=c}Xe.prototype.length=function(){return this.h},Xe.prototype.end=function(){var t=this.g,c=this.h;return this.h=0,cn(t,0,c)};function ze(t,c){for(;127<c;)Pt(t,c&127|128),c>>>=7;Pt(t,c)}function _e(t){var c={},a=c.O===void 0?!1:c.O;this.m={v:c.v===void 0?!1:c.v},this.O=a,c=this.m,tn.length?(a=tn.pop(),c&&(a.v=c.v),t&&Mt(a,t),t=a):t=new Fe(t,c),this.g=t,this.l=this.g.g,this.h=this.i=-1,this.j=!1}_e.prototype.reset=function(){this.g.reset(),this.h=this.i=-1};function xe(t){var c=t.g;if((c=c.g==c.i)||(c=t.j)||(c=t.g,c=c.j||0>c.g||c.g>c.i),c)return!1;t.l=t.g.g;var a=ye(t.g);return c=a>>>3,a&=7,0<=a&&5>=a?(t.i=c,t.h=a,!0):(t.j=!0,ln(a,t.l),!1)}function Vn(t){switch(t.h){case 0:if(t.h!=0)Vn(t);else t:{t=t.g;for(var c=t.g,a=0;10>a;a++){if((t.h[c]&128)===0){t.g=c+1,jt(t);break t}c++}t.j=!0,Xn()}break;case 1:t=t.g,t.g+=8,jt(t);break;case 2:t.h!=2?Vn(t):(c=ye(t.g),t=t.g,t.g+=c,jt(t));break;case 5:t=t.g,t.g+=4,jt(t);break;case 3:c=t.i;do{if(!xe(t)){t.j=!0,Te(Error("Unmatched start-group tag: stream EOF"));break}if(t.h==4){t.i!=c&&(t.j=!0,Te(Error("Unmatched end-group tag")));break}Vn(t)}while(1);break;default:t.j=!0,ln(t.h,t.l)}}function un(t,c,a){var b=t.g.i,S=ye(t.g),L=t.g.g+S;if(t.g.i=L,a(c,t),a=L-t.g.g,a!==0)throw Error("Message parsing ended unexpectedly. Expected to read "+(S+" bytes, instead read "+(S-a)+" bytes, either the data ended unexpectedly or the message misreported its own length"));return t.g.g=L,t.g.i=b,c}var Qe=[];function an(){this.h=[],this.i=0,this.g=new Xe}function ve(t,c){c.length!==0&&(t.h.push(c),t.i+=c.length)}function we(t,c,a){ze(t.g,8*c+2),ze(t.g,a.length),ve(t,t.g.end()),ve(t,a)}var Ge=typeof Symbol=="function"&&typeof Symbol()=="symbol"?Symbol(void 0):void 0;function ie(t){return Object.isFrozen(t)||(Ge?t[Ge]|=1:t.g!==void 0?t.g|=1:Object.defineProperties(t,{g:{value:1,configurable:!0,writable:!0,enumerable:!1}})),t}function De(t){return t!==null&&typeof t=="object"&&t.constructor===Object}function qt(t){switch(typeof t){case"number":return isFinite(t)?t:String(t);case"object":if(Se&&t!=null&&t instanceof Uint8Array)return Ae(t);if(t instanceof re){if(t.g==null)t="";else{var c=t.g;c=c==null||typeof c=="string"?c:Se&&c instanceof Uint8Array?Ae(c):null,t=t.g=c}return t}}return t}function Ot(t,c){if(t!=null)return Array.isArray(t)||De(t)?fn(t,c):c(t)}function fn(t,c){if(Array.isArray(t)){for(var a=Array(t.length),b=0;b<t.length;b++)a[b]=Ot(t[b],c);if(c=Array.isArray(t)){var S;Ge?S=t[Ge]:S=t.g,c=(S==null?0:S)&1}return c&&ie(a),a}S={};for(a in t)S[a]=Ot(t[a],c);return S}function fe(t){return t=qt(t),Array.isArray(t)?fn(t,fe):t}var Ft;function Vt(t,c,a){var b=Ft;Ft=null,t||(t=b),b=this.constructor.ha,t||(t=b?[b]:[]),this.i=(b?0:-1)-(this.constructor.fa||0),this.l=this.g=null,this.u=t;t:{if(b=this.u.length,t=b-1,b&&(b=this.u[t],De(b))){this.j=t-this.i,this.h=b;break t}c!==void 0&&-1<c?(this.j=Math.max(c,t+1-this.i),this.h=null):this.j=Number.MAX_VALUE}if(a)for(c=0;c<a.length;c++)t=a[c],t<this.j?(t+=this.i,(b=this.u[t])?Array.isArray(b)&&ie(b):this.u[t]=oe):(Le(this),(b=this.h[t])?Array.isArray(b)&&ie(b):this.h[t]=oe)}var oe=Object.freeze(ie([]));function Le(t){var c=t.j+t.i;t.u[c]||(t.h=t.u[c]={})}function te(t,c,a){return c===-1?null:(a===void 0?0:a)||c>=t.j?t.h?t.h[c]:void 0:t.u[c+t.i]}function se(t,c,a){a=a===void 0?!1:a;var b=te(t,c,a);return b==null&&(b=oe),b===oe&&(b=ie(b.slice()),ut(t,c,b,a)),b}function tt(t,c){var a=se(t,c);if(t.l||(t.l={}),!t.l[c]){for(var b=0;b<a.length;b++)a[b]=+a[b];t.l[c]=!0}return a}function it(t,c,a){return t=te(t,c),t=t==null?t:+t,t==null?a===void 0?0:a:t}function ut(t,c,a,b){(b===void 0?0:b)||c>=t.j?(Le(t),t.h[c]=a):t.u[c+t.i]=a}function _t(t,c,a,b){a!==b?ut(t,c,a):ut(t,c,void 0,!1)}function de(t,c,a){if(a===-1)return null;t.g||(t.g={});var b=t.g[a];if(b)return b;var S=te(t,a,!1);return S==null?b:(c=new c(S),t.g[a]=c)}function ue(t,c,a){t.g||(t.g={});var b=t.g[a];if(!b){var S=se(t,a,!1);b=[];for(var L=0;L<S.length;L++)b[L]=new c(S[L]);t.g[a]=b}return b}function St(t,c,a,b,S){var L=ue(t,b,c);a=a||new b,t=se(t,c),S!=null?(L.splice(S,0,a),t.splice(S,0,a.u)):(L.push(a),t.push(a.u))}Vt.prototype.toJSON=function(){return fn(this.u,fe)},Vt.prototype.toString=function(){return this.u.toString()};function me(t,c){return t=te(t,c),t==null?0:t}function Ce(t,c){return t=te(t,c),t==null?"":t}function en(t,c){if(t=t.m){ve(c,c.g.end());for(var a=0;a<t.length;a++)ve(c,t[a])}}var nn=Symbol();function mn(t,c,a){return t[nn]||(t[nn]=function(b,S){return c(b,S,a)})}function yn(t){var c=t[nn];if(!c){var a=t[on]||(t[on]=t());c=function(b,S){return Je(b,S,a)},t[nn]=c}return c}function He(t){var c=t.da;if(c)return yn(c);if(c=t.ia){var a=t.Y;return delete t.Y,mn(t.W.g,c,a)}}function rn(t){var c=He(t),a=t.W,b=t.ea;return c?function(S,L){return b(S,L,a,c)}:function(S,L){return b(S,L,a)}}function jn(t){var c=t[0];switch(t.length){case 2:var a=t[1];return function(mt,Gt,vt){return c(mt,Gt,vt,a)};case 3:var b=t[1],S=yn(t[2]);return function(mt,Gt,vt){return c(mt,Gt,vt,b,S)};case 4:var L=t[1],F=t[3],U=yn(t[2]);return function(mt,Gt,vt){return c(mt,Gt,vt,L,U,F)};case 5:var z=t[1],Q=mn(z,t[3],t[4]);return function(mt,Gt,vt){return c(mt,Gt,vt,z,Q)};case 6:var D=t[1],st=t[5],ft=mn(D,t[3],t[4]);return function(mt,Gt,vt){return c(mt,Gt,vt,D,ft,st)};default:throw Error("Unsupported number of parameters, expected [2-6], got "+t.length)}}var on=Symbol();function Je(t,c,a){for(;xe(c)&&c.h!=4;){var b=c.i,S=a[b];if(S)Array.isArray(S)&&(S=a[b]=jn(S));else{var L=a[0];L&&(L=L[b])&&(S=a[b]=rn(L))}S&&S(c,t,b)||(S=c,b=t,L=S.l,Vn(S),S.O||(S=cn(S.g.h,L,S.g.g),(L=b.m)?L.push(S):b.m=[S]))}return t}function Zn(t,c){var a=new an;if(c(t,a),t=a.i+a.g.length(),t===0)a=new Uint8Array(0);else{t=new Uint8Array(t);for(var b=a.h,S=b.length,L=c=0;L<S;L++){var F=b[L];F.length!==0&&(t.set(F,c),c+=F.length)}b=a.g,S=b.h,S!==0&&(t.set(b.g.subarray(0,S),c),b.h=0),a.h=[t],a=t}return a}function Sn(t,c,a){if(Qe.length){var b=Qe.pop();t&&(Mt(b.g,t),b.i=-1,b.h=-1),t=b}else t=new _e(t);try{var S=new c;return Je(S,t,a[on]||(a[on]=a()))}finally{c=t.g,c.h=null,c.l=0,c.i=0,c.g=0,c.j=!1,c.v=!1,t.i=-1,t.h=-1,t.j=!1,100>Qe.length&&Qe.push(t)}}function Ke(t,c,a){if(c=te(c,a),c!=null){ze(t.g,8*a+5),t=t.g;var b=c;b=(a=0>b?1:0)?-b:b,b===0?0<1/b?Be=Qt=0:(Qt=0,Be=2147483648):isNaN(b)?(Qt=0,Be=2147483647):34028234663852886e22<b?(Qt=0,Be=(a<<31|2139095040)>>>0):11754943508222875e-54>b?(b=Math.round(b/Math.pow(2,-149)),Qt=0,Be=(a<<31|b)>>>0):(c=Math.floor(Math.log(b)/Math.LN2),b*=Math.pow(2,-c),b=Math.round(8388608*b),16777216<=b&&++c,Qt=0,Be=(a<<31|c+127<<23|b&8388607)>>>0),a=Be,Pt(t,a>>>0&255),Pt(t,a>>>8&255),Pt(t,a>>>16&255),Pt(t,a>>>24&255)}}function Un(t,c,a){if(t.h!==1)return!1;var b=t.g;t=Ye(b);var S=Ye(b);b=2*(S>>31)+1;var L=S>>>20&2047;return t=4294967296*(S&1048575)+t,_t(c,a,L==2047?t?NaN:1/0*b:L==0?b*Math.pow(2,-1074)*t:b*Math.pow(2,L-1075)*(t+4503599627370496),0),!0}function sn(t,c,a){return t.h!==5?!1:(ut(c,a,t.g.m()),!0)}function vn(t,c,a){if(t.h!==5&&t.h!==2)return!1;if(c=se(c,a),t.h==2){a=Fe.prototype.m;var b=ye(t.g);for(b=t.g.g+b;t.g.g<b;)c.push(a.call(t.g))}else c.push(t.g.m());return!0}function Tn(t,c,a){return t.h!==5?!1:(t=t.g.m(),_t(c,a,t,0),!0)}function Mn(t,c,a){return t.h!==0?!1:(ut(c,a,Ie(t.g)),!0)}function dn(t,c,a){return t.h!==0?!1:(ut(c,a,ye(t.g)),!0)}function Yn(t,c,a){return t.h!==0?!1:(t=ye(t.g),_t(c,a,t,0),!0)}function _n(t,c,a){return t.h!==0?!1:(t=!!ye(t.g),_t(c,a,t,!1),!0)}function Qn(t,c,a){if(t.h!==2)return!1;var b=ye(t.g);t=t.g;var S=t.g;t.g+=b,jt(t),t=t.h;var L;if(kn)(L=In)||(L=In=new TextDecoder("utf-8",{fatal:!1})),L=L.decode(t.subarray(S,S+b));else{b=S+b;for(var F=[],U=null,z,Q,D;S<b;)z=t[S++],128>z?F.push(z):224>z?S>=b?F.push(65533):(Q=t[S++],194>z||(Q&192)!==128?(S--,F.push(65533)):F.push((z&31)<<6|Q&63)):240>z?S>=b-1?F.push(65533):(Q=t[S++],(Q&192)!==128||z===224&&160>Q||z===237&&160<=Q||((L=t[S++])&192)!==128?(S--,F.push(65533)):F.push((z&15)<<12|(Q&63)<<6|L&63)):244>=z?S>=b-2?F.push(65533):(Q=t[S++],(Q&192)!==128||(z<<28)+(Q-144)>>30!==0||((L=t[S++])&192)!==128||((D=t[S++])&192)!==128?(S--,F.push(65533)):(z=(z&7)<<18|(Q&63)<<12|(L&63)<<6|D&63,z-=65536,F.push((z>>10&1023)+55296,(z&1023)+56320))):F.push(65533),8192<=F.length&&(U=Hn(U,F),F.length=0);L=Hn(U,F)}return ut(c,a,L),!0}function wn(t,c,a,b,S){return t.h!==2?!1:(t=un(t,new b,S),c.g||(c.g={}),b=t&&t.u,c.g[a]=t,ut(c,a,b,!1),!0)}function Cn(t,c,a,b,S){return t.h!==2?!1:(t=un(t,new b,S),St(c,a,t,b,void 0),!0)}function p(t,c,a){return t.h!==0?!1:(ut(c,a,Ie(t.g)),!0)}function W(t){Vt.call(this,t)}dt(W,Vt);function V(){return{1:dn,2:sn,3:Qn,4:Qn}}function E(t,c){var a=te(t,1);if(a!=null&&a!=null){ze(c.g,8);var b=c.g;if(0<=a)ze(b,a);else{for(var S=0;9>S;S++)Pt(b,a&127|128),a>>=7;Pt(b,1)}}Ke(c,t,2),b=te(t,3),b!=null&&we(c,3,En(b)),b=te(t,4),b!=null&&we(c,4,En(b)),en(t,c)}function P(t){Vt.call(this,t,-1,j)}dt(P,Vt),P.prototype.addClassification=function(t,c){return St(this,1,t,W,c),this};function ot(){return{1:[Cn,W,V]}}var j=[1];function rt(t){Vt.call(this,t)}dt(rt,Vt);function bt(){return{1:sn,2:sn,3:sn,4:sn,5:sn}}function Rt(t,c){Ke(c,t,1),Ke(c,t,2),Ke(c,t,3),Ke(c,t,4),Ke(c,t,5),en(t,c)}function Ut(t){Vt.call(this,t,-1,$t)}dt(Ut,Vt);function Jt(){return{1:[Cn,rt,bt]}}var $t=[1];function kt(t){Vt.call(this,t)}dt(kt,Vt);function Tt(){return{1:sn,2:sn,3:sn,4:sn,5:sn,6:Mn}}function Et(t,c){Ke(c,t,1),Ke(c,t,2),Ke(c,t,3),Ke(c,t,4),Ke(c,t,5);var a=te(t,6);if(a!=null&&a!=null){ze(c.g,48);var b=c.g,S=a;a=0>S,S=Math.abs(S);var L=S>>>0;for(S=Math.floor((S-L)/4294967296),S>>>=0,a&&(S=~S>>>0,L=(~L>>>0)+1,4294967295<L&&(L=0,S++,4294967295<S&&(S=0))),Be=L,Qt=S,a=Be,L=Qt;0<L||127<a;)Pt(b,a&127|128),a=(a>>>7|L<<25)>>>0,L>>>=7;Pt(b,a)}en(t,c)}function Dt(t){Vt.call(this,t,-1,ke)}dt(Dt,Vt);function ae(){return{1:p,2:p,3:vn,4:[wn,pe,ge],5:dn,6:dn,7:vn,8:vn,9:vn}}function pe(t){Vt.call(this,t)}dt(pe,Vt);function ge(){return{1:sn,2:sn,3:sn}}var ke=[3,7,8,9];function h(t){Vt.call(this,t)}dt(h,Vt);function y(){return{1:Tn,2:Tn,3:Tn}}function G(t){Vt.call(this,t)}dt(G,Vt);function C(){return{1:Tn,2:Tn,3:Tn}}function K(t){Vt.call(this,t)}dt(K,Vt);function _(){return{1:Yn,2:[wn,G,C],3:[wn,h,y],4:_n}}function M(t){Vt.call(this,t,-1,ct)}dt(M,Vt);function q(){return{1:Yn,2:[Cn,K,_],3:Tn,4:vn,5:vn,6:vn}}var ct=[2,4,5,6];function s(t){Vt.call(this,t,-1,R)}dt(s,Vt);function X(){return{1:Yn,2:[Cn,M,q],3:[wn,Dt,ae],4:Un,5:vn,6:vn}}var R=[2,5,6];function w(t,c,a){if(a=t.createShader(a===0?t.VERTEX_SHADER:t.FRAGMENT_SHADER),t.shaderSource(a,c),t.compileShader(a),!t.getShaderParameter(a,t.COMPILE_STATUS))throw Error(`Could not compile WebGL shader.
|
|
87
|
+
`+G.getProgramInfoLog(_));H=h.m=_,G.useProgram(H),K=G.getUniformLocation(H,"sampler0"),h.j={I:G.getAttribLocation(H,"aVertex"),H:G.getAttribLocation(H,"aTex"),da:K},h.s=G.createBuffer(),G.bindBuffer(G.ARRAY_BUFFER,h.s),G.enableVertexAttribArray(h.j.I),G.vertexAttribPointer(h.j.I,2,G.FLOAT,!1,0,0),G.bufferData(G.ARRAY_BUFFER,new Float32Array([-1,-1,-1,1,1,1,1,-1]),G.STATIC_DRAW),G.bindBuffer(G.ARRAY_BUFFER,null),h.o=G.createBuffer(),G.bindBuffer(G.ARRAY_BUFFER,h.o),G.enableVertexAttribArray(h.j.H),G.vertexAttribPointer(h.j.H,2,G.FLOAT,!1,0,0),G.bufferData(G.ARRAY_BUFFER,new Float32Array([0,1,0,0,1,0,1,1]),G.STATIC_DRAW),G.bindBuffer(G.ARRAY_BUFFER,null),G.uniform1i(K,0)}H=h.j,G.useProgram(h.m),G.canvas.width=y.width,G.canvas.height=y.height,G.viewport(0,0,y.width,y.height),G.activeTexture(G.TEXTURE0),h.h.bindTexture2d(y.glName),G.enableVertexAttribArray(H.I),G.bindBuffer(G.ARRAY_BUFFER,h.s),G.vertexAttribPointer(H.I,2,G.FLOAT,!1,0,0),G.enableVertexAttribArray(H.H),G.bindBuffer(G.ARRAY_BUFFER,h.o),G.vertexAttribPointer(H.H,2,G.FLOAT,!1,0,0),G.bindFramebuffer(G.DRAW_FRAMEBUFFER?G.DRAW_FRAMEBUFFER:G.FRAMEBUFFER,null),G.clearColor(0,0,0,0),G.clear(G.COLOR_BUFFER_BIT),G.colorMask(!0,!0,!0,!0),G.drawArrays(G.TRIANGLE_FAN,0,4),G.disableVertexAttribArray(H.I),G.disableVertexAttribArray(H.H),G.bindBuffer(G.ARRAY_BUFFER,null),h.h.bindTexture2d(0)}function _n(h){this.g=h}var Qn=new Uint8Array([0,97,115,109,1,0,0,0,1,4,1,96,0,0,3,2,1,0,10,9,1,7,0,65,0,253,15,26,11]);function Yn(h,y){return y+h}function Cn(h,y){window[h]=y}function p(h){var y=document.createElement("script");return y.setAttribute("src",h),y.setAttribute("crossorigin","anonymous"),new Promise(function(G){y.addEventListener("load",function(){G()},!1),y.addEventListener("error",function(){G()},!1),document.body.appendChild(y)})}function W(){return St(this,function h(){return ne(h,function(y){switch(y.g){case 1:return y.m=2,P(y,WebAssembly.instantiate(Qn),4);case 4:y.g=3,y.m=0;break;case 2:return y.m=0,y.j=null,y.return(!1);case 3:return y.return(!0)}})})}function V(h){if(this.g=h,this.listeners={},this.j={},this.F={},this.m={},this.s={},this.G=this.o=this.R=!0,this.C=Promise.resolve(),this.P="",this.B={},this.locateFile=h&&h.locateFile||Yn,typeof window=="object")var y=window.location.pathname.toString().substring(0,window.location.pathname.toString().lastIndexOf("/"))+"/";else if(typeof location<"u")y=location.pathname.toString().substring(0,location.pathname.toString().lastIndexOf("/"))+"/";else throw Error("solutions can only be loaded on a web page or in a web worker");if(this.S=y,h.options){y=T(Object.keys(h.options));for(var G=y.next();!G.done;G=y.next()){G=G.value;var H=h.options[G].default;H!==void 0&&(this.j[G]=typeof H=="function"?H():H)}}}i=V.prototype,i.close=function(){return this.i&&this.i.delete(),Promise.resolve()};function E(h,y){return h.g.files===void 0?[]:typeof h.g.files=="function"?h.g.files(y):h.g.files}function O(h){return St(h,function y(){var G=this,H,K,_,M,q,ct,s,X,R,w,N;return ne(y,function(A){switch(A.g){case 1:return H=G,G.R?(K=E(G,G.j),P(A,W(),2)):A.return();case 2:if(_=A.h,typeof window=="object")return Cn("createMediapipeSolutionsWasm",{locateFile:G.locateFile}),Cn("createMediapipeSolutionsPackedAssets",{locateFile:G.locateFile}),ct=K.filter(function(B){return B.data!==void 0}),s=K.filter(function(B){return B.data===void 0}),X=Promise.all(ct.map(function(B){var nt=rt(H,B.url);if(B.path!==void 0){var $=B.path;nt=nt.then(function(yt){return H.overrideFile($,yt),Promise.resolve(yt)})}return nt})),R=Promise.all(s.map(function(B){return B.simd===void 0||B.simd&&_||!B.simd&&!_?p(H.locateFile(B.url,H.S)):Promise.resolve()})).then(function(){return St(H,function B(){var nt,$,yt=this;return ne(B,function(Xt){if(Xt.g==1)return nt=window.createMediapipeSolutionsWasm,$=window.createMediapipeSolutionsPackedAssets,P(Xt,nt($),2);yt.h=Xt.h,Xt.g=0})})}),w=function(){return St(H,function B(){var nt=this;return ne(B,function($){return nt.g.graph&&nt.g.graph.url?$=P($,rt(nt,nt.g.graph.url),0):($.g=0,$=void 0),$})})}(),P(A,Promise.all([R,X,w]),7);if(typeof importScripts!="function")throw Error("solutions can only be loaded on a web page or in a web worker");return M=K.filter(function(B){return B.simd===void 0||B.simd&&_||!B.simd&&!_}).map(function(B){return H.locateFile(B.url,H.S)}),importScripts.apply(null,J(M)),P(A,createMediapipeSolutionsWasm(Module),6);case 6:G.h=A.h,G.l=new OffscreenCanvas(1,1),G.h.canvas=G.l,q=G.h.GL.createContext(G.l,{antialias:!1,alpha:!1,ba:typeof WebGL2RenderingContext<"u"?2:1}),G.h.GL.makeContextCurrent(q),A.g=4;break;case 7:if(G.l=document.createElement("canvas"),N=G.l.getContext("webgl2",{}),!N&&(N=G.l.getContext("webgl",{}),!N))return alert("Failed to create WebGL canvas context when passing video frame."),A.return();G.D=N,G.h.canvas=G.l,G.h.createContext(G.l,!0,!0,{});case 4:G.i=new G.h.SolutionWasm,G.R=!1,A.g=0}})})}function ot(h){return St(h,function y(){var G=this,H,K,_,M,q,ct,s,X;return ne(y,function(R){if(R.g==1){if(G.g.graph&&G.g.graph.url&&G.P===G.g.graph.url)return R.return();if(G.o=!0,!G.g.graph||!G.g.graph.url){R.g=2;return}return G.P=G.g.graph.url,P(R,rt(G,G.g.graph.url),3)}for(R.g!=2&&(H=R.h,G.i.loadGraph(H)),K=T(Object.keys(G.B)),_=K.next();!_.done;_=K.next())M=_.value,G.i.overrideFile(M,G.B[M]);if(G.B={},G.g.listeners)for(q=T(G.g.listeners),ct=q.next();!ct.done;ct=q.next())s=ct.value,Ut(G,s);X=G.j,G.j={},G.setOptions(X),R.g=0})})}i.reset=function(){return St(this,function h(){var y=this;return ne(h,function(G){y.i&&(y.i.reset(),y.m={},y.s={}),G.g=0})})},i.setOptions=function(h,y){var G=this;if(y=y||this.g.options){for(var H=[],K=[],_={},M=T(Object.keys(h)),q=M.next();!q.done;_={K:_.K,L:_.L},q=M.next()){var ct=q.value;ct in this.j&&this.j[ct]===h[ct]||(this.j[ct]=h[ct],q=y[ct],q!==void 0&&(q.onChange&&(_.K=q.onChange,_.L=h[ct],H.push(function(s){return function(){return St(G,function X(){var R,w=this;return ne(X,function(N){if(N.g==1)return P(N,s.K(s.L),2);R=N.h,R===!0&&(w.o=!0),N.g=0})})}}(_))),q.graphOptionXref&&(ct={valueNumber:q.type===1?h[ct]:0,valueBoolean:q.type===0?h[ct]:!1,valueString:q.type===2?h[ct]:""},q=Object.assign(Object.assign(Object.assign({},{calculatorName:"",calculatorIndex:0}),q.graphOptionXref),ct),K.push(q))))}(H.length!==0||K.length!==0)&&(this.o=!0,this.A=(this.A===void 0?[]:this.A).concat(K),this.u=(this.u===void 0?[]:this.u).concat(H))}};function j(h){return St(h,function y(){var G=this,H,K,_,M,q,ct,s;return ne(y,function(X){switch(X.g){case 1:if(!G.o)return X.return();if(!G.u){X.g=2;break}H=T(G.u),K=H.next();case 3:if(K.done){X.g=5;break}return _=K.value,P(X,_(),4);case 4:K=H.next(),X.g=3;break;case 5:G.u=void 0;case 2:if(G.A){for(M=new G.h.GraphOptionChangeRequestList,q=T(G.A),ct=q.next();!ct.done;ct=q.next())s=ct.value,M.push_back(s);G.i.changeOptions(M),M.delete(),G.A=void 0}G.o=!1,X.g=0}})})}i.initialize=function(){return St(this,function h(){var y=this;return ne(h,function(G){return G.g==1?P(G,O(y),2):G.g!=3?P(G,ot(y),3):P(G,j(y),0)})})};function rt(h,y){return St(h,function G(){var H=this,K,_;return ne(G,function(M){return y in H.F?M.return(H.F[y]):(K=H.locateFile(y,""),_=fetch(K).then(function(q){return q.arrayBuffer()}),H.F[y]=_,M.return(_))})})}i.overrideFile=function(h,y){this.i?this.i.overrideFile(h,y):this.B[h]=y},i.clearOverriddenFiles=function(){this.B={},this.i&&this.i.clearOverriddenFiles()},i.send=function(h,y){return St(this,function G(){var H=this,K,_,M,q,ct,s,X,R,w;return ne(G,function(N){switch(N.g){case 1:return H.g.inputs?(K=1e3*(y==null?performance.now():y),P(N,H.C,2)):N.return();case 2:return P(N,H.initialize(),3);case 3:for(_=new H.h.PacketDataList,M=T(Object.keys(h)),q=M.next();!q.done;q=M.next())if(ct=q.value,s=H.g.inputs[ct]){t:{var A=H,B=h[ct];switch(s.type){case"video":var nt=A.m[s.stream];if(nt||(nt=new Kn(A.h,A.D),A.m[s.stream]=nt),A=nt,A.l===0&&(A.l=A.h.createTexture()),typeof HTMLVideoElement<"u"&&B instanceof HTMLVideoElement){var $=B.videoWidth;nt=B.videoHeight}else typeof HTMLImageElement<"u"&&B instanceof HTMLImageElement?($=B.naturalWidth,nt=B.naturalHeight):($=B.width,nt=B.height);nt={glName:A.l,width:$,height:nt},$=A.g,$.canvas.width=nt.width,$.canvas.height=nt.height,$.activeTexture($.TEXTURE0),A.h.bindTexture2d(A.l),$.texImage2D($.TEXTURE_2D,0,$.RGBA,$.RGBA,$.UNSIGNED_BYTE,B),A.h.bindTexture2d(0),A=nt;break t;case"detections":for(nt=A.m[s.stream],nt||(nt=new _n(A.h),A.m[s.stream]=nt),A=nt,A.data||(A.data=new A.g.DetectionListData),A.data.reset(B.length),nt=0;nt<B.length;++nt){$=B[nt];var yt=A.data,Xt=yt.setBoundingBox,Kt=nt,xt=$.T,ht=new rn;Vt(ht,1,xt.Z),Vt(ht,2,xt.$),Vt(ht,3,xt.height),Vt(ht,4,xt.width),Vt(ht,5,xt.rotation),Vt(ht,6,xt.X);var Wt=xt=new Xe;Pe(Wt,1,qt(ht,1)),Pe(Wt,2,qt(ht,2)),Pe(Wt,3,qt(ht,3)),Pe(Wt,4,qt(ht,4)),Pe(Wt,5,qt(ht,5));var It=qt(ht,6);if(It!=null&&It!=null){Qt(Wt.g,48);var wt=Wt.g,Ft=It;It=0>Ft,Ft=Math.abs(Ft);var l=Ft>>>0;for(Ft=Math.floor((Ft-l)/4294967296),Ft>>>=0,It&&(Ft=~Ft>>>0,l=(~l>>>0)+1,4294967295<l&&(l=0,Ft++,4294967295<Ft&&(Ft=0))),he=l,Se=Ft,It=he,l=Se;0<l||127<It;)wt.push(It&127|128),It=(It>>>7|l<<25)>>>0,l>>>=7;wt.push(It)}if(it(ht,Wt),xt=Ae(xt),Xt.call(yt,Kt,xt),$.O)for(yt=0;yt<$.O.length;++yt)ht=$.O[yt],Wt=!!ht.visibility,Xt=A.data,Kt=Xt.addNormalizedLandmark,xt=nt,ht=Object.assign(Object.assign({},ht),{visibility:Wt?ht.visibility:0}),Wt=new fn,Vt(Wt,1,ht.x),Vt(Wt,2,ht.y),Vt(Wt,3,ht.z),ht.visibility&&Vt(Wt,4,ht.visibility),wt=ht=new Xe,Pe(wt,1,qt(Wt,1)),Pe(wt,2,qt(Wt,2)),Pe(wt,3,qt(Wt,3)),Pe(wt,4,qt(Wt,4)),Pe(wt,5,qt(Wt,5)),it(Wt,wt),ht=Ae(ht),Kt.call(Xt,xt,ht);if($.M)for(yt=0;yt<$.M.length;++yt){if(Xt=A.data,Kt=Xt.addClassification,xt=nt,ht=$.M[yt],Wt=new me,Vt(Wt,2,ht.Y),ht.index&&Vt(Wt,1,ht.index),ht.label&&Vt(Wt,3,ht.label),ht.displayName&&Vt(Wt,4,ht.displayName),wt=ht=new Xe,l=qt(Wt,1),l!=null&&l!=null)if(Qt(wt.g,8),It=wt.g,0<=l)Qt(It,l);else{for(Ft=0;9>Ft;Ft++)It.push(l&127|128),l>>=7;It.push(1)}Pe(wt,2,qt(Wt,2)),It=qt(Wt,3),It!=null&&(It=Rn(It),Qt(wt.g,26),Qt(wt.g,It.length),Ot(wt,wt.g.end()),Ot(wt,It)),It=qt(Wt,4),It!=null&&(It=Rn(It),Qt(wt.g,34),Qt(wt.g,It.length),Ot(wt,wt.g.end()),Ot(wt,It)),it(Wt,wt),ht=Ae(ht),Kt.call(Xt,xt,ht)}}A=A.data;break t;default:A={}}}switch(X=A,R=s.stream,s.type){case"video":_.pushTexture2d(Object.assign(Object.assign({},X),{stream:R,timestamp:K}));break;case"detections":w=X,w.stream=R,w.timestamp=K,_.pushDetectionList(w);break;default:throw Error("Unknown input config type: '"+s.type+"'")}}return H.i.send(_),P(N,H.C,4);case 4:_.delete(),N.g=0}})})};function bt(h,y,G){return St(h,function H(){var K,_,M,q,ct,s,X=this,R,w,N,A,B,nt,$,yt;return ne(H,function(Xt){switch(Xt.g){case 1:if(!G)return Xt.return(y);for(K={},_=0,M=T(Object.keys(G)),q=M.next();!q.done;q=M.next())ct=q.value,s=G[ct],typeof s!="string"&&s.type==="texture"&&y[s.stream]!==void 0&&++_;1<_&&(X.G=!1),R=T(Object.keys(G)),q=R.next();case 2:if(q.done){Xt.g=4;break}if(w=q.value,N=G[w],typeof N=="string")return $=K,yt=w,P(Xt,Rt(X,w,y[N]),14);if(A=y[N.stream],N.type==="detection_list"){if(A){for(var Kt=A.getRectList(),xt=A.getLandmarksList(),ht=A.getClassificationsList(),Wt=[],It=0;It<Kt.size();++It){var wt=Kt.get(It);t:{var Ft=new rn;for(wt=new Ze(wt);Ce(wt);)switch(wt.i){case 13:var l=jt(wt);Vt(Ft,1,l);break;case 21:l=jt(wt),Vt(Ft,2,l);break;case 29:l=jt(wt),Vt(Ft,3,l);break;case 37:l=jt(wt),Vt(Ft,4,l);break;case 45:l=jt(wt),Vt(Ft,5,l);break;case 48:l=Ve(wt.g),Vt(Ft,6,l);break;default:if(!ut(Ft,wt))break t}}Ft={Z:Ct(Ft,1),$:Ct(Ft,2),height:Ct(Ft,3),width:Ct(Ft,4),rotation:Ct(Ft,5,0),X:fe(Ft,6,0)},wt=Le(nn(xt.get(It)),fn).map(Sn);var v=ht.get(It);t:for(l=new tn,v=new Ze(v);Ce(v);)switch(v.i){case 10:l.addClassification(xe(v,new me,He));break;default:if(!ut(l,v))break t}Ft={T:Ft,O:wt,M:Zn(l)},Wt.push(Ft)}Kt=Wt}else Kt=[];K[w]=Kt,Xt.g=7;break}if(N.type==="proto_list"){if(A){for(Kt=Array(A.size()),xt=0;xt<A.size();xt++)Kt[xt]=A.get(xt);A.delete()}else Kt=[];K[w]=Kt,Xt.g=7;break}if(A===void 0){Xt.g=3;break}if(N.type==="float_list"){K[w]=A,Xt.g=7;break}if(N.type==="proto"){K[w]=A,Xt.g=7;break}if(N.type!=="texture")throw Error("Unknown output config type: '"+N.type+"'");return B=X.s[w],B||(B=new Kn(X.h,X.D),X.s[w]=B),P(Xt,an(B,A,X.G),13);case 13:nt=Xt.h,K[w]=nt;case 7:N.transform&&K[w]&&(K[w]=N.transform(K[w])),Xt.g=3;break;case 14:$[yt]=Xt.h;case 3:q=R.next(),Xt.g=2;break;case 4:return Xt.return(K)}})})}function Rt(h,y,G){return St(h,function H(){var K=this,_;return ne(H,function(M){return typeof G=="number"||G instanceof Uint8Array||G instanceof K.h.Uint8BlobList?M.return(G):G instanceof K.h.Texture2dDataOut?(_=K.s[y],_||(_=new Kn(K.h,K.D),K.s[y]=_),M.return(an(_,G,K.G))):M.return(void 0)})})}function Ut(h,y){for(var G=y.name||"$",H=[].concat(J(y.wants)),K=new h.h.StringList,_=T(y.wants),M=_.next();!M.done;M=_.next())K.push_back(M.value);_=h.h.PacketListener.implement({onResults:function(q){for(var ct={},s=0;s<y.wants.length;++s)ct[H[s]]=q.get(s);var X=h.listeners[G];X&&(h.C=bt(h,ct,y.outs).then(function(R){R=X(R);for(var w=0;w<y.wants.length;++w){var N=ct[H[w]];typeof N=="object"&&N.hasOwnProperty&&N.hasOwnProperty("delete")&&N.delete()}R&&(h.C=R)}))}}),h.i.attachMultiListener(K,_),K.delete()}i.onResults=function(h,y){this.listeners[y||"$"]=h},Re("Solution",V),Re("OptionType",{BOOL:0,NUMBER:1,aa:2,0:"BOOL",1:"NUMBER",2:"STRING"});function Jt(h){h=En(h);var y=h.getMesh();if(!y)return h;var G=new Float32Array(y.getVertexBufferList());y.getVertexBufferList=function(){return G};var H=new Uint32Array(y.getIndexBufferList());return y.getIndexBufferList=function(){return H},h}var $t={files:[{url:"face_mesh_solution_packed_assets_loader.js"},{simd:!0,url:"face_mesh_solution_simd_wasm_bin.js"},{simd:!1,url:"face_mesh_solution_wasm_bin.js"}],graph:{url:"face_mesh.binarypb"},listeners:[{wants:["multi_face_geometry","image_transformed","multi_face_landmarks"],outs:{image:"image_transformed",multiFaceGeometry:{type:"proto_list",stream:"multi_face_geometry",transform:function(h){return h.map(Jt)}},multiFaceLandmarks:{type:"proto_list",stream:"multi_face_landmarks",transform:function(h){return h.map(function(y){return Le(nn(y),fn).map(Sn)})}}}}],inputs:{image:{type:"video",stream:"input_frames_gpu"}},options:{useCpuInference:{type:0,graphOptionXref:{calculatorType:"InferenceCalculator",fieldName:"use_cpu_inference"},default:"iPad Simulator;iPhone Simulator;iPod Simulator;iPad;iPhone;iPod".split(";").includes(navigator.platform)||navigator.userAgent.includes("Mac")&&"ontouchend"in document},enableFaceGeometry:{type:0,graphOptionXref:{calculatorName:"EnableFaceGeometryConstant",calculatorType:"ConstantSidePacketCalculator",fieldName:"bool_value"}},selfieMode:{type:0,graphOptionXref:{calculatorType:"GlScalerCalculator",calculatorIndex:1,fieldName:"flip_horizontal"}},maxNumFaces:{type:1,graphOptionXref:{calculatorType:"ConstantSidePacketCalculator",calculatorName:"ConstantSidePacketCalculatorNumFaces",fieldName:"int_value"}},refineLandmarks:{type:0,graphOptionXref:{calculatorType:"ConstantSidePacketCalculator",calculatorName:"ConstantSidePacketCalculatorRefineLandmarks",fieldName:"bool_value"}},minDetectionConfidence:{type:1,graphOptionXref:{calculatorType:"TensorsToDetectionsCalculator",calculatorName:"facelandmarkfrontgpu__facedetectionshortrangegpu__facedetectionshortrangecommon__TensorsToDetectionsCalculator",fieldName:"min_score_thresh"}},minTrackingConfidence:{type:1,graphOptionXref:{calculatorType:"ThresholdingCalculator",calculatorName:"facelandmarkfrontgpu__facelandmarkgpu__ThresholdingCalculator",fieldName:"threshold"}},cameraNear:{type:1,graphOptionXref:{calculatorType:"FaceGeometryEnvGeneratorCalculator",fieldName:"near"}},cameraFar:{type:1,graphOptionXref:{calculatorType:"FaceGeometryEnvGeneratorCalculator",fieldName:"far"}},cameraVerticalFovDegrees:{type:1,graphOptionXref:{calculatorType:"FaceGeometryEnvGeneratorCalculator",fieldName:"vertical_fov_degrees"}}}},Nt=[[61,146],[146,91],[91,181],[181,84],[84,17],[17,314],[314,405],[405,321],[321,375],[375,291],[61,185],[185,40],[40,39],[39,37],[37,0],[0,267],[267,269],[269,270],[270,409],[409,291],[78,95],[95,88],[88,178],[178,87],[87,14],[14,317],[317,402],[402,318],[318,324],[324,308],[78,191],[191,80],[80,81],[81,82],[82,13],[13,312],[312,311],[311,310],[310,415],[415,308]],Tt=[[263,249],[249,390],[390,373],[373,374],[374,380],[380,381],[381,382],[382,362],[263,466],[466,388],[388,387],[387,386],[386,385],[385,384],[384,398],[398,362]],Et=[[276,283],[283,282],[282,295],[295,285],[300,293],[293,334],[334,296],[296,336]],Dt=[[33,7],[7,163],[163,144],[144,145],[145,153],[153,154],[154,155],[155,133],[33,246],[246,161],[161,160],[160,159],[159,158],[158,157],[157,173],[173,133]],ae=[[46,53],[53,52],[52,65],[65,55],[70,63],[63,105],[105,66],[66,107]],pe=[[10,338],[338,297],[297,332],[332,284],[284,251],[251,389],[389,356],[356,454],[454,323],[323,361],[361,288],[288,397],[397,365],[365,379],[379,378],[378,400],[400,377],[377,152],[152,148],[148,176],[176,149],[149,150],[150,136],[136,172],[172,58],[58,132],[132,93],[93,234],[234,127],[127,162],[162,21],[21,54],[54,103],[103,67],[67,109],[109,10]],ge=[].concat(J(Nt),J(Tt),J(Et),J(Dt),J(ae),J(pe));function Ne(h){h=h||{},h=Object.assign(Object.assign({},$t),h),this.g=new V(h)}i=Ne.prototype,i.close=function(){return this.g.close(),Promise.resolve()},i.onResults=function(h){this.g.onResults(h)},i.initialize=function(){return St(this,function h(){var y=this;return ne(h,function(G){return P(G,y.g.initialize(),0)})})},i.reset=function(){this.g.reset()},i.send=function(h){return St(this,function y(){var G=this;return ne(y,function(H){return P(H,G.g.send(h),0)})})},i.setOptions=function(h){this.g.setOptions(h)},Re("FACE_GEOMETRY",{Layout:{COLUMN_MAJOR:0,ROW_MAJOR:1,0:"COLUMN_MAJOR",1:"ROW_MAJOR"},PrimitiveType:{TRIANGLE:0,0:"TRIANGLE"},VertexType:{VERTEX_PT:0,0:"VERTEX_PT"},DEFAULT_CAMERA_PARAMS:{verticalFovDegrees:63,near:1,far:1e4}}),Re("FaceMesh",Ne),Re("FACEMESH_LIPS",Nt),Re("FACEMESH_LEFT_EYE",Tt),Re("FACEMESH_LEFT_EYEBROW",Et),Re("FACEMESH_LEFT_IRIS",[[474,475],[475,476],[476,477],[477,474]]),Re("FACEMESH_RIGHT_EYE",Dt),Re("FACEMESH_RIGHT_EYEBROW",ae),Re("FACEMESH_RIGHT_IRIS",[[469,470],[470,471],[471,472],[472,469]]),Re("FACEMESH_FACE_OVAL",pe),Re("FACEMESH_CONTOURS",ge),Re("FACEMESH_TESSELATION",[[127,34],[34,139],[139,127],[11,0],[0,37],[37,11],[232,231],[231,120],[120,232],[72,37],[37,39],[39,72],[128,121],[121,47],[47,128],[232,121],[121,128],[128,232],[104,69],[69,67],[67,104],[175,171],[171,148],[148,175],[118,50],[50,101],[101,118],[73,39],[39,40],[40,73],[9,151],[151,108],[108,9],[48,115],[115,131],[131,48],[194,204],[204,211],[211,194],[74,40],[40,185],[185,74],[80,42],[42,183],[183,80],[40,92],[92,186],[186,40],[230,229],[229,118],[118,230],[202,212],[212,214],[214,202],[83,18],[18,17],[17,83],[76,61],[61,146],[146,76],[160,29],[29,30],[30,160],[56,157],[157,173],[173,56],[106,204],[204,194],[194,106],[135,214],[214,192],[192,135],[203,165],[165,98],[98,203],[21,71],[71,68],[68,21],[51,45],[45,4],[4,51],[144,24],[24,23],[23,144],[77,146],[146,91],[91,77],[205,50],[50,187],[187,205],[201,200],[200,18],[18,201],[91,106],[106,182],[182,91],[90,91],[91,181],[181,90],[85,84],[84,17],[17,85],[206,203],[203,36],[36,206],[148,171],[171,140],[140,148],[92,40],[40,39],[39,92],[193,189],[189,244],[244,193],[159,158],[158,28],[28,159],[247,246],[246,161],[161,247],[236,3],[3,196],[196,236],[54,68],[68,104],[104,54],[193,168],[168,8],[8,193],[117,228],[228,31],[31,117],[189,193],[193,55],[55,189],[98,97],[97,99],[99,98],[126,47],[47,100],[100,126],[166,79],[79,218],[218,166],[155,154],[154,26],[26,155],[209,49],[49,131],[131,209],[135,136],[136,150],[150,135],[47,126],[126,217],[217,47],[223,52],[52,53],[53,223],[45,51],[51,134],[134,45],[211,170],[170,140],[140,211],[67,69],[69,108],[108,67],[43,106],[106,91],[91,43],[230,119],[119,120],[120,230],[226,130],[130,247],[247,226],[63,53],[53,52],[52,63],[238,20],[20,242],[242,238],[46,70],[70,156],[156,46],[78,62],[62,96],[96,78],[46,53],[53,63],[63,46],[143,34],[34,227],[227,143],[123,117],[117,111],[111,123],[44,125],[125,19],[19,44],[236,134],[134,51],[51,236],[216,206],[206,205],[205,216],[154,153],[153,22],[22,154],[39,37],[37,167],[167,39],[200,201],[201,208],[208,200],[36,142],[142,100],[100,36],[57,212],[212,202],[202,57],[20,60],[60,99],[99,20],[28,158],[158,157],[157,28],[35,226],[226,113],[113,35],[160,159],[159,27],[27,160],[204,202],[202,210],[210,204],[113,225],[225,46],[46,113],[43,202],[202,204],[204,43],[62,76],[76,77],[77,62],[137,123],[123,116],[116,137],[41,38],[38,72],[72,41],[203,129],[129,142],[142,203],[64,98],[98,240],[240,64],[49,102],[102,64],[64,49],[41,73],[73,74],[74,41],[212,216],[216,207],[207,212],[42,74],[74,184],[184,42],[169,170],[170,211],[211,169],[170,149],[149,176],[176,170],[105,66],[66,69],[69,105],[122,6],[6,168],[168,122],[123,147],[147,187],[187,123],[96,77],[77,90],[90,96],[65,55],[55,107],[107,65],[89,90],[90,180],[180,89],[101,100],[100,120],[120,101],[63,105],[105,104],[104,63],[93,137],[137,227],[227,93],[15,86],[86,85],[85,15],[129,102],[102,49],[49,129],[14,87],[87,86],[86,14],[55,8],[8,9],[9,55],[100,47],[47,121],[121,100],[145,23],[23,22],[22,145],[88,89],[89,179],[179,88],[6,122],[122,196],[196,6],[88,95],[95,96],[96,88],[138,172],[172,136],[136,138],[215,58],[58,172],[172,215],[115,48],[48,219],[219,115],[42,80],[80,81],[81,42],[195,3],[3,51],[51,195],[43,146],[146,61],[61,43],[171,175],[175,199],[199,171],[81,82],[82,38],[38,81],[53,46],[46,225],[225,53],[144,163],[163,110],[110,144],[52,65],[65,66],[66,52],[229,228],[228,117],[117,229],[34,127],[127,234],[234,34],[107,108],[108,69],[69,107],[109,108],[108,151],[151,109],[48,64],[64,235],[235,48],[62,78],[78,191],[191,62],[129,209],[209,126],[126,129],[111,35],[35,143],[143,111],[117,123],[123,50],[50,117],[222,65],[65,52],[52,222],[19,125],[125,141],[141,19],[221,55],[55,65],[65,221],[3,195],[195,197],[197,3],[25,7],[7,33],[33,25],[220,237],[237,44],[44,220],[70,71],[71,139],[139,70],[122,193],[193,245],[245,122],[247,130],[130,33],[33,247],[71,21],[21,162],[162,71],[170,169],[169,150],[150,170],[188,174],[174,196],[196,188],[216,186],[186,92],[92,216],[2,97],[97,167],[167,2],[141,125],[125,241],[241,141],[164,167],[167,37],[37,164],[72,38],[38,12],[12,72],[38,82],[82,13],[13,38],[63,68],[68,71],[71,63],[226,35],[35,111],[111,226],[101,50],[50,205],[205,101],[206,92],[92,165],[165,206],[209,198],[198,217],[217,209],[165,167],[167,97],[97,165],[220,115],[115,218],[218,220],[133,112],[112,243],[243,133],[239,238],[238,241],[241,239],[214,135],[135,169],[169,214],[190,173],[173,133],[133,190],[171,208],[208,32],[32,171],[125,44],[44,237],[237,125],[86,87],[87,178],[178,86],[85,86],[86,179],[179,85],[84,85],[85,180],[180,84],[83,84],[84,181],[181,83],[201,83],[83,182],[182,201],[137,93],[93,132],[132,137],[76,62],[62,183],[183,76],[61,76],[76,184],[184,61],[57,61],[61,185],[185,57],[212,57],[57,186],[186,212],[214,207],[207,187],[187,214],[34,143],[143,156],[156,34],[79,239],[239,237],[237,79],[123,137],[137,177],[177,123],[44,1],[1,4],[4,44],[201,194],[194,32],[32,201],[64,102],[102,129],[129,64],[213,215],[215,138],[138,213],[59,166],[166,219],[219,59],[242,99],[99,97],[97,242],[2,94],[94,141],[141,2],[75,59],[59,235],[235,75],[24,110],[110,228],[228,24],[25,130],[130,226],[226,25],[23,24],[24,229],[229,23],[22,23],[23,230],[230,22],[26,22],[22,231],[231,26],[112,26],[26,232],[232,112],[189,190],[190,243],[243,189],[221,56],[56,190],[190,221],[28,56],[56,221],[221,28],[27,28],[28,222],[222,27],[29,27],[27,223],[223,29],[30,29],[29,224],[224,30],[247,30],[30,225],[225,247],[238,79],[79,20],[20,238],[166,59],[59,75],[75,166],[60,75],[75,240],[240,60],[147,177],[177,215],[215,147],[20,79],[79,166],[166,20],[187,147],[147,213],[213,187],[112,233],[233,244],[244,112],[233,128],[128,245],[245,233],[128,114],[114,188],[188,128],[114,217],[217,174],[174,114],[131,115],[115,220],[220,131],[217,198],[198,236],[236,217],[198,131],[131,134],[134,198],[177,132],[132,58],[58,177],[143,35],[35,124],[124,143],[110,163],[163,7],[7,110],[228,110],[110,25],[25,228],[356,389],[389,368],[368,356],[11,302],[302,267],[267,11],[452,350],[350,349],[349,452],[302,303],[303,269],[269,302],[357,343],[343,277],[277,357],[452,453],[453,357],[357,452],[333,332],[332,297],[297,333],[175,152],[152,377],[377,175],[347,348],[348,330],[330,347],[303,304],[304,270],[270,303],[9,336],[336,337],[337,9],[278,279],[279,360],[360,278],[418,262],[262,431],[431,418],[304,408],[408,409],[409,304],[310,415],[415,407],[407,310],[270,409],[409,410],[410,270],[450,348],[348,347],[347,450],[422,430],[430,434],[434,422],[313,314],[314,17],[17,313],[306,307],[307,375],[375,306],[387,388],[388,260],[260,387],[286,414],[414,398],[398,286],[335,406],[406,418],[418,335],[364,367],[367,416],[416,364],[423,358],[358,327],[327,423],[251,284],[284,298],[298,251],[281,5],[5,4],[4,281],[373,374],[374,253],[253,373],[307,320],[320,321],[321,307],[425,427],[427,411],[411,425],[421,313],[313,18],[18,421],[321,405],[405,406],[406,321],[320,404],[404,405],[405,320],[315,16],[16,17],[17,315],[426,425],[425,266],[266,426],[377,400],[400,369],[369,377],[322,391],[391,269],[269,322],[417,465],[465,464],[464,417],[386,257],[257,258],[258,386],[466,260],[260,388],[388,466],[456,399],[399,419],[419,456],[284,332],[332,333],[333,284],[417,285],[285,8],[8,417],[346,340],[340,261],[261,346],[413,441],[441,285],[285,413],[327,460],[460,328],[328,327],[355,371],[371,329],[329,355],[392,439],[439,438],[438,392],[382,341],[341,256],[256,382],[429,420],[420,360],[360,429],[364,394],[394,379],[379,364],[277,343],[343,437],[437,277],[443,444],[444,283],[283,443],[275,440],[440,363],[363,275],[431,262],[262,369],[369,431],[297,338],[338,337],[337,297],[273,375],[375,321],[321,273],[450,451],[451,349],[349,450],[446,342],[342,467],[467,446],[293,334],[334,282],[282,293],[458,461],[461,462],[462,458],[276,353],[353,383],[383,276],[308,324],[324,325],[325,308],[276,300],[300,293],[293,276],[372,345],[345,447],[447,372],[352,345],[345,340],[340,352],[274,1],[1,19],[19,274],[456,248],[248,281],[281,456],[436,427],[427,425],[425,436],[381,256],[256,252],[252,381],[269,391],[391,393],[393,269],[200,199],[199,428],[428,200],[266,330],[330,329],[329,266],[287,273],[273,422],[422,287],[250,462],[462,328],[328,250],[258,286],[286,384],[384,258],[265,353],[353,342],[342,265],[387,259],[259,257],[257,387],[424,431],[431,430],[430,424],[342,353],[353,276],[276,342],[273,335],[335,424],[424,273],[292,325],[325,307],[307,292],[366,447],[447,345],[345,366],[271,303],[303,302],[302,271],[423,266],[266,371],[371,423],[294,455],[455,460],[460,294],[279,278],[278,294],[294,279],[271,272],[272,304],[304,271],[432,434],[434,427],[427,432],[272,407],[407,408],[408,272],[394,430],[430,431],[431,394],[395,369],[369,400],[400,395],[334,333],[333,299],[299,334],[351,417],[417,168],[168,351],[352,280],[280,411],[411,352],[325,319],[319,320],[320,325],[295,296],[296,336],[336,295],[319,403],[403,404],[404,319],[330,348],[348,349],[349,330],[293,298],[298,333],[333,293],[323,454],[454,447],[447,323],[15,16],[16,315],[315,15],[358,429],[429,279],[279,358],[14,15],[15,316],[316,14],[285,336],[336,9],[9,285],[329,349],[349,350],[350,329],[374,380],[380,252],[252,374],[318,402],[402,403],[403,318],[6,197],[197,419],[419,6],[318,319],[319,325],[325,318],[367,364],[364,365],[365,367],[435,367],[367,397],[397,435],[344,438],[438,439],[439,344],[272,271],[271,311],[311,272],[195,5],[5,281],[281,195],[273,287],[287,291],[291,273],[396,428],[428,199],[199,396],[311,271],[271,268],[268,311],[283,444],[444,445],[445,283],[373,254],[254,339],[339,373],[282,334],[334,296],[296,282],[449,347],[347,346],[346,449],[264,447],[447,454],[454,264],[336,296],[296,299],[299,336],[338,10],[10,151],[151,338],[278,439],[439,455],[455,278],[292,407],[407,415],[415,292],[358,371],[371,355],[355,358],[340,345],[345,372],[372,340],[346,347],[347,280],[280,346],[442,443],[443,282],[282,442],[19,94],[94,370],[370,19],[441,442],[442,295],[295,441],[248,419],[419,197],[197,248],[263,255],[255,359],[359,263],[440,275],[275,274],[274,440],[300,383],[383,368],[368,300],[351,412],[412,465],[465,351],[263,467],[467,466],[466,263],[301,368],[368,389],[389,301],[395,378],[378,379],[379,395],[412,351],[351,419],[419,412],[436,426],[426,322],[322,436],[2,164],[164,393],[393,2],[370,462],[462,461],[461,370],[164,0],[0,267],[267,164],[302,11],[11,12],[12,302],[268,12],[12,13],[13,268],[293,300],[300,301],[301,293],[446,261],[261,340],[340,446],[330,266],[266,425],[425,330],[426,423],[423,391],[391,426],[429,355],[355,437],[437,429],[391,327],[327,326],[326,391],[440,457],[457,438],[438,440],[341,382],[382,362],[362,341],[459,457],[457,461],[461,459],[434,430],[430,394],[394,434],[414,463],[463,362],[362,414],[396,369],[369,262],[262,396],[354,461],[461,457],[457,354],[316,403],[403,402],[402,316],[315,404],[404,403],[403,315],[314,405],[405,404],[404,314],[313,406],[406,405],[405,313],[421,418],[418,406],[406,421],[366,401],[401,361],[361,366],[306,408],[408,407],[407,306],[291,409],[409,408],[408,291],[287,410],[410,409],[409,287],[432,436],[436,410],[410,432],[434,416],[416,411],[411,434],[264,368],[368,383],[383,264],[309,438],[438,457],[457,309],[352,376],[376,401],[401,352],[274,275],[275,4],[4,274],[421,428],[428,262],[262,421],[294,327],[327,358],[358,294],[433,416],[416,367],[367,433],[289,455],[455,439],[439,289],[462,370],[370,326],[326,462],[2,326],[326,370],[370,2],[305,460],[460,455],[455,305],[254,449],[449,448],[448,254],[255,261],[261,446],[446,255],[253,450],[450,449],[449,253],[252,451],[451,450],[450,252],[256,452],[452,451],[451,256],[341,453],[453,452],[452,341],[413,464],[464,463],[463,413],[441,413],[413,414],[414,441],[258,442],[442,441],[441,258],[257,443],[443,442],[442,257],[259,444],[444,443],[443,259],[260,445],[445,444],[444,260],[467,342],[342,445],[445,467],[459,458],[458,250],[250,459],[289,392],[392,290],[290,289],[290,328],[328,460],[460,290],[376,433],[433,435],[435,376],[250,290],[290,392],[392,250],[411,416],[416,433],[433,411],[341,463],[463,464],[464,341],[453,464],[464,465],[465,453],[357,465],[465,412],[412,357],[343,412],[412,399],[399,343],[360,363],[363,440],[440,360],[437,399],[399,456],[456,437],[420,456],[456,363],[363,420],[401,435],[435,288],[288,401],[372,383],[383,353],[353,372],[339,255],[255,249],[249,339],[448,261],[261,255],[255,448],[133,243],[243,190],[190,133],[133,155],[155,112],[112,133],[33,246],[246,247],[247,33],[33,130],[130,25],[25,33],[398,384],[384,286],[286,398],[362,398],[398,414],[414,362],[362,463],[463,341],[341,362],[263,359],[359,467],[467,263],[263,249],[249,255],[255,263],[466,467],[467,260],[260,466],[75,60],[60,166],[166,75],[238,239],[239,79],[79,238],[162,127],[127,139],[139,162],[72,11],[11,37],[37,72],[121,232],[232,120],[120,121],[73,72],[72,39],[39,73],[114,128],[128,47],[47,114],[233,232],[232,128],[128,233],[103,104],[104,67],[67,103],[152,175],[175,148],[148,152],[119,118],[118,101],[101,119],[74,73],[73,40],[40,74],[107,9],[9,108],[108,107],[49,48],[48,131],[131,49],[32,194],[194,211],[211,32],[184,74],[74,185],[185,184],[191,80],[80,183],[183,191],[185,40],[40,186],[186,185],[119,230],[230,118],[118,119],[210,202],[202,214],[214,210],[84,83],[83,17],[17,84],[77,76],[76,146],[146,77],[161,160],[160,30],[30,161],[190,56],[56,173],[173,190],[182,106],[106,194],[194,182],[138,135],[135,192],[192,138],[129,203],[203,98],[98,129],[54,21],[21,68],[68,54],[5,51],[51,4],[4,5],[145,144],[144,23],[23,145],[90,77],[77,91],[91,90],[207,205],[205,187],[187,207],[83,201],[201,18],[18,83],[181,91],[91,182],[182,181],[180,90],[90,181],[181,180],[16,85],[85,17],[17,16],[205,206],[206,36],[36,205],[176,148],[148,140],[140,176],[165,92],[92,39],[39,165],[245,193],[193,244],[244,245],[27,159],[159,28],[28,27],[30,247],[247,161],[161,30],[174,236],[236,196],[196,174],[103,54],[54,104],[104,103],[55,193],[193,8],[8,55],[111,117],[117,31],[31,111],[221,189],[189,55],[55,221],[240,98],[98,99],[99,240],[142,126],[126,100],[100,142],[219,166],[166,218],[218,219],[112,155],[155,26],[26,112],[198,209],[209,131],[131,198],[169,135],[135,150],[150,169],[114,47],[47,217],[217,114],[224,223],[223,53],[53,224],[220,45],[45,134],[134,220],[32,211],[211,140],[140,32],[109,67],[67,108],[108,109],[146,43],[43,91],[91,146],[231,230],[230,120],[120,231],[113,226],[226,247],[247,113],[105,63],[63,52],[52,105],[241,238],[238,242],[242,241],[124,46],[46,156],[156,124],[95,78],[78,96],[96,95],[70,46],[46,63],[63,70],[116,143],[143,227],[227,116],[116,123],[123,111],[111,116],[1,44],[44,19],[19,1],[3,236],[236,51],[51,3],[207,216],[216,205],[205,207],[26,154],[154,22],[22,26],[165,39],[39,167],[167,165],[199,200],[200,208],[208,199],[101,36],[36,100],[100,101],[43,57],[57,202],[202,43],[242,20],[20,99],[99,242],[56,28],[28,157],[157,56],[124,35],[35,113],[113,124],[29,160],[160,27],[27,29],[211,204],[204,210],[210,211],[124,113],[113,46],[46,124],[106,43],[43,204],[204,106],[96,62],[62,77],[77,96],[227,137],[137,116],[116,227],[73,41],[41,72],[72,73],[36,203],[203,142],[142,36],[235,64],[64,240],[240,235],[48,49],[49,64],[64,48],[42,41],[41,74],[74,42],[214,212],[212,207],[207,214],[183,42],[42,184],[184,183],[210,169],[169,211],[211,210],[140,170],[170,176],[176,140],[104,105],[105,69],[69,104],[193,122],[122,168],[168,193],[50,123],[123,187],[187,50],[89,96],[96,90],[90,89],[66,65],[65,107],[107,66],[179,89],[89,180],[180,179],[119,101],[101,120],[120,119],[68,63],[63,104],[104,68],[234,93],[93,227],[227,234],[16,15],[15,85],[85,16],[209,129],[129,49],[49,209],[15,14],[14,86],[86,15],[107,55],[55,9],[9,107],[120,100],[100,121],[121,120],[153,145],[145,22],[22,153],[178,88],[88,179],[179,178],[197,6],[6,196],[196,197],[89,88],[88,96],[96,89],[135,138],[138,136],[136,135],[138,215],[215,172],[172,138],[218,115],[115,219],[219,218],[41,42],[42,81],[81,41],[5,195],[195,51],[51,5],[57,43],[43,61],[61,57],[208,171],[171,199],[199,208],[41,81],[81,38],[38,41],[224,53],[53,225],[225,224],[24,144],[144,110],[110,24],[105,52],[52,66],[66,105],[118,229],[229,117],[117,118],[227,34],[34,234],[234,227],[66,107],[107,69],[69,66],[10,109],[109,151],[151,10],[219,48],[48,235],[235,219],[183,62],[62,191],[191,183],[142,129],[129,126],[126,142],[116,111],[111,143],[143,116],[118,117],[117,50],[50,118],[223,222],[222,52],[52,223],[94,19],[19,141],[141,94],[222,221],[221,65],[65,222],[196,3],[3,197],[197,196],[45,220],[220,44],[44,45],[156,70],[70,139],[139,156],[188,122],[122,245],[245,188],[139,71],[71,162],[162,139],[149,170],[170,150],[150,149],[122,188],[188,196],[196,122],[206,216],[216,92],[92,206],[164,2],[2,167],[167,164],[242,141],[141,241],[241,242],[0,164],[164,37],[37,0],[11,72],[72,12],[12,11],[12,38],[38,13],[13,12],[70,63],[63,71],[71,70],[31,226],[226,111],[111,31],[36,101],[101,205],[205,36],[203,206],[206,165],[165,203],[126,209],[209,217],[217,126],[98,165],[165,97],[97,98],[237,220],[220,218],[218,237],[237,239],[239,241],[241,237],[210,214],[214,169],[169,210],[140,171],[171,32],[32,140],[241,125],[125,237],[237,241],[179,86],[86,178],[178,179],[180,85],[85,179],[179,180],[181,84],[84,180],[180,181],[182,83],[83,181],[181,182],[194,201],[201,182],[182,194],[177,137],[137,132],[132,177],[184,76],[76,183],[183,184],[185,61],[61,184],[184,185],[186,57],[57,185],[185,186],[216,212],[212,186],[186,216],[192,214],[214,187],[187,192],[139,34],[34,156],[156,139],[218,79],[79,237],[237,218],[147,123],[123,177],[177,147],[45,44],[44,4],[4,45],[208,201],[201,32],[32,208],[98,64],[64,129],[129,98],[192,213],[213,138],[138,192],[235,59],[59,219],[219,235],[141,242],[242,97],[97,141],[97,2],[2,141],[141,97],[240,75],[75,235],[235,240],[229,24],[24,228],[228,229],[31,25],[25,226],[226,31],[230,23],[23,229],[229,230],[231,22],[22,230],[230,231],[232,26],[26,231],[231,232],[233,112],[112,232],[232,233],[244,189],[189,243],[243,244],[189,221],[221,190],[190,189],[222,28],[28,221],[221,222],[223,27],[27,222],[222,223],[224,29],[29,223],[223,224],[225,30],[30,224],[224,225],[113,247],[247,225],[225,113],[99,60],[60,240],[240,99],[213,147],[147,215],[215,213],[60,20],[20,166],[166,60],[192,187],[187,213],[213,192],[243,112],[112,244],[244,243],[244,233],[233,245],[245,244],[245,128],[128,188],[188,245],[188,114],[114,174],[174,188],[134,131],[131,220],[220,134],[174,217],[217,236],[236,174],[236,198],[198,134],[134,236],[215,177],[177,58],[58,215],[156,143],[143,124],[124,156],[25,110],[110,7],[7,25],[31,228],[228,25],[25,31],[264,356],[356,368],[368,264],[0,11],[11,267],[267,0],[451,452],[452,349],[349,451],[267,302],[302,269],[269,267],[350,357],[357,277],[277,350],[350,452],[452,357],[357,350],[299,333],[333,297],[297,299],[396,175],[175,377],[377,396],[280,347],[347,330],[330,280],[269,303],[303,270],[270,269],[151,9],[9,337],[337,151],[344,278],[278,360],[360,344],[424,418],[418,431],[431,424],[270,304],[304,409],[409,270],[272,310],[310,407],[407,272],[322,270],[270,410],[410,322],[449,450],[450,347],[347,449],[432,422],[422,434],[434,432],[18,313],[313,17],[17,18],[291,306],[306,375],[375,291],[259,387],[387,260],[260,259],[424,335],[335,418],[418,424],[434,364],[364,416],[416,434],[391,423],[423,327],[327,391],[301,251],[251,298],[298,301],[275,281],[281,4],[4,275],[254,373],[373,253],[253,254],[375,307],[307,321],[321,375],[280,425],[425,411],[411,280],[200,421],[421,18],[18,200],[335,321],[321,406],[406,335],[321,320],[320,405],[405,321],[314,315],[315,17],[17,314],[423,426],[426,266],[266,423],[396,377],[377,369],[369,396],[270,322],[322,269],[269,270],[413,417],[417,464],[464,413],[385,386],[386,258],[258,385],[248,456],[456,419],[419,248],[298,284],[284,333],[333,298],[168,417],[417,8],[8,168],[448,346],[346,261],[261,448],[417,413],[413,285],[285,417],[326,327],[327,328],[328,326],[277,355],[355,329],[329,277],[309,392],[392,438],[438,309],[381,382],[382,256],[256,381],[279,429],[429,360],[360,279],[365,364],[364,379],[379,365],[355,277],[277,437],[437,355],[282,443],[443,283],[283,282],[281,275],[275,363],[363,281],[395,431],[431,369],[369,395],[299,297],[297,337],[337,299],[335,273],[273,321],[321,335],[348,450],[450,349],[349,348],[359,446],[446,467],[467,359],[283,293],[293,282],[282,283],[250,458],[458,462],[462,250],[300,276],[276,383],[383,300],[292,308],[308,325],[325,292],[283,276],[276,293],[293,283],[264,372],[372,447],[447,264],[346,352],[352,340],[340,346],[354,274],[274,19],[19,354],[363,456],[456,281],[281,363],[426,436],[436,425],[425,426],[380,381],[381,252],[252,380],[267,269],[269,393],[393,267],[421,200],[200,428],[428,421],[371,266],[266,329],[329,371],[432,287],[287,422],[422,432],[290,250],[250,328],[328,290],[385,258],[258,384],[384,385],[446,265],[265,342],[342,446],[386,387],[387,257],[257,386],[422,424],[424,430],[430,422],[445,342],[342,276],[276,445],[422,273],[273,424],[424,422],[306,292],[292,307],[307,306],[352,366],[366,345],[345,352],[268,271],[271,302],[302,268],[358,423],[423,371],[371,358],[327,294],[294,460],[460,327],[331,279],[279,294],[294,331],[303,271],[271,304],[304,303],[436,432],[432,427],[427,436],[304,272],[272,408],[408,304],[395,394],[394,431],[431,395],[378,395],[395,400],[400,378],[296,334],[334,299],[299,296],[6,351],[351,168],[168,6],[376,352],[352,411],[411,376],[307,325],[325,320],[320,307],[285,295],[295,336],[336,285],[320,319],[319,404],[404,320],[329,330],[330,349],[349,329],[334,293],[293,333],[333,334],[366,323],[323,447],[447,366],[316,15],[15,315],[315,316],[331,358],[358,279],[279,331],[317,14],[14,316],[316,317],[8,285],[285,9],[9,8],[277,329],[329,350],[350,277],[253,374],[374,252],[252,253],[319,318],[318,403],[403,319],[351,6],[6,419],[419,351],[324,318],[318,325],[325,324],[397,367],[367,365],[365,397],[288,435],[435,397],[397,288],[278,344],[344,439],[439,278],[310,272],[272,311],[311,310],[248,195],[195,281],[281,248],[375,273],[273,291],[291,375],[175,396],[396,199],[199,175],[312,311],[311,268],[268,312],[276,283],[283,445],[445,276],[390,373],[373,339],[339,390],[295,282],[282,296],[296,295],[448,449],[449,346],[346,448],[356,264],[264,454],[454,356],[337,336],[336,299],[299,337],[337,338],[338,151],[151,337],[294,278],[278,455],[455,294],[308,292],[292,415],[415,308],[429,358],[358,355],[355,429],[265,340],[340,372],[372,265],[352,346],[346,280],[280,352],[295,442],[442,282],[282,295],[354,19],[19,370],[370,354],[285,441],[441,295],[295,285],[195,248],[248,197],[197,195],[457,440],[440,274],[274,457],[301,300],[300,368],[368,301],[417,351],[351,465],[465,417],[251,301],[301,389],[389,251],[394,395],[395,379],[379,394],[399,412],[412,419],[419,399],[410,436],[436,322],[322,410],[326,2],[2,393],[393,326],[354,370],[370,461],[461,354],[393,164],[164,267],[267,393],[268,302],[302,12],[12,268],[312,268],[268,13],[13,312],[298,293],[293,301],[301,298],[265,446],[446,340],[340,265],[280,330],[330,425],[425,280],[322,426],[426,391],[391,322],[420,429],[429,437],[437,420],[393,391],[391,326],[326,393],[344,440],[440,438],[438,344],[458,459],[459,461],[461,458],[364,434],[434,394],[394,364],[428,396],[396,262],[262,428],[274,354],[354,457],[457,274],[317,316],[316,402],[402,317],[316,315],[315,403],[403,316],[315,314],[314,404],[404,315],[314,313],[313,405],[405,314],[313,421],[421,406],[406,313],[323,366],[366,361],[361,323],[292,306],[306,407],[407,292],[306,291],[291,408],[408,306],[291,287],[287,409],[409,291],[287,432],[432,410],[410,287],[427,434],[434,411],[411,427],[372,264],[264,383],[383,372],[459,309],[309,457],[457,459],[366,352],[352,401],[401,366],[1,274],[274,4],[4,1],[418,421],[421,262],[262,418],[331,294],[294,358],[358,331],[435,433],[433,367],[367,435],[392,289],[289,439],[439,392],[328,462],[462,326],[326,328],[94,2],[2,370],[370,94],[289,305],[305,455],[455,289],[339,254],[254,448],[448,339],[359,255],[255,446],[446,359],[254,253],[253,449],[449,254],[253,252],[252,450],[450,253],[252,256],[256,451],[451,252],[256,341],[341,452],[452,256],[414,413],[413,463],[463,414],[286,441],[441,414],[414,286],[286,258],[258,441],[441,286],[258,257],[257,442],[442,258],[257,259],[259,443],[443,257],[259,260],[260,444],[444,259],[260,467],[467,445],[445,260],[309,459],[459,250],[250,309],[305,289],[289,290],[290,305],[305,290],[290,460],[460,305],[401,376],[376,435],[435,401],[309,250],[250,392],[392,309],[376,411],[411,433],[433,376],[453,341],[341,464],[464,453],[357,453],[453,465],[465,357],[343,357],[357,412],[412,343],[437,343],[343,399],[399,437],[344,360],[360,440],[440,344],[420,437],[437,456],[456,420],[360,420],[420,363],[363,360],[361,401],[401,288],[288,361],[265,372],[372,353],[353,265],[390,339],[339,249],[249,390],[339,448],[448,255],[255,339]]),Re("matrixDataToMatrix",function(h){for(var y=h.getCols(),G=h.getRows(),H=h.getPackedDataList(),K=[],_=0;_<G;_++)K.push(Array(y));for(_=0;_<G;_++)for(var M=0;M<y;M++){var q=h.getLayout()===1?_*y+M:M*G+_;K[_][M]=H[q]}return K}),Re("VERSION","0.4.1633559619")}).call(Wi);const Vi={};(function(){var i;function n(t){var c=0;return function(){return c<t.length?{done:!1,value:t[c++]}:{done:!0}}}var r=typeof Object.defineProperties=="function"?Object.defineProperty:function(t,c,a){return t==Array.prototype||t==Object.prototype||(t[c]=a.value),t};function f(t){t=[typeof globalThis=="object"&&globalThis,t,typeof window=="object"&&window,typeof self=="object"&&self,typeof global=="object"&&global];for(var c=0;c<t.length;++c){var a=t[c];if(a&&a.Math==Math)return a}throw Error("Cannot find global object")}var Z=f(this);function I(t,c){if(c)t:{var a=Z;t=t.split(".");for(var b=0;b<t.length-1;b++){var S=t[b];if(!(S in a))break t;a=a[S]}t=t[t.length-1],b=a[t],c=c(b),c!=b&&c!=null&&r(a,t,{configurable:!0,writable:!0,value:c})}}I("Symbol",function(t){function c(L){if(this instanceof c)throw new TypeError("Symbol is not a constructor");return new a(b+(L||"")+"_"+S++,L)}function a(L,C){this.g=L,r(this,"description",{configurable:!0,writable:!0,value:C})}if(t)return t;a.prototype.toString=function(){return this.g};var b="jscomp_symbol_"+(1e9*Math.random()>>>0)+"_",S=0;return c}),I("Symbol.iterator",function(t){if(t)return t;t=Symbol("Symbol.iterator");for(var c="Array Int8Array Uint8Array Uint8ClampedArray Int16Array Uint16Array Int32Array Uint32Array Float32Array Float64Array".split(" "),a=0;a<c.length;a++){var b=Z[c[a]];typeof b=="function"&&typeof b.prototype[t]!="function"&&r(b.prototype,t,{configurable:!0,writable:!0,value:function(){return F(n(this))}})}return t});function F(t){return t={next:t},t[Symbol.iterator]=function(){return this},t}function T(t){var c=typeof Symbol<"u"&&Symbol.iterator&&t[Symbol.iterator];return c?c.call(t):{next:n(t)}}function J(t){if(!(t instanceof Array)){t=T(t);for(var c,a=[];!(c=t.next()).done;)a.push(c.value);t=a}return t}var et=typeof Object.create=="function"?Object.create:function(t){function c(){}return c.prototype=t,new c},lt;if(typeof Object.setPrototypeOf=="function")lt=Object.setPrototypeOf;else{var pt;t:{var Yt={a:!0},Lt={};try{Lt.__proto__=Yt,pt=Lt.a;break t}catch{}pt=!1}lt=pt?function(t,c){if(t.__proto__=c,t.__proto__!==c)throw new TypeError(t+" is not extensible");return t}:null}var at=lt;function dt(t,c){if(t.prototype=et(c.prototype),t.prototype.constructor=t,at)at(t,c);else for(var a in c)if(a!="prototype")if(Object.defineProperties){var b=Object.getOwnPropertyDescriptor(c,a);b&&Object.defineProperty(t,a,b)}else t[a]=c[a];t.ka=c.prototype}function Bt(){this.l=!1,this.i=null,this.h=void 0,this.g=1,this.s=this.m=0,this.j=null}function kt(t){if(t.l)throw new TypeError("Generator is already running");t.l=!0}Bt.prototype.o=function(t){this.h=t};function ee(t,c){t.j={V:c,X:!0},t.g=t.m||t.s}Bt.prototype.return=function(t){this.j={return:t},this.g=this.s};function P(t,c,a){return t.g=a,{value:c}}function De(t){this.g=new Bt,this.h=t}function ze(t,c){kt(t.g);var a=t.g.i;return a?We(t,"return"in a?a.return:function(b){return{value:b,done:!0}},c,t.g.return):(t.g.return(c),zt(t))}function We(t,c,a,b){try{var S=c.call(t.g.i,a);if(!(S instanceof Object))throw new TypeError("Iterator result "+S+" is not an object");if(!S.done)return t.g.l=!1,S;var L=S.value}catch(C){return t.g.i=null,ee(t.g,C),zt(t)}return t.g.i=null,b.call(t.g,L),zt(t)}function zt(t){for(;t.g.g;)try{var c=t.h(t.g);if(c)return t.g.l=!1,{value:c.value,done:!1}}catch(a){t.g.h=void 0,ee(t.g,a)}if(t.g.l=!1,t.g.j){if(c=t.g.j,t.g.j=null,c.X)throw c.V;return{value:c.return,done:!0}}return{value:void 0,done:!0}}function Hn(t){this.next=function(c){return kt(t.g),t.g.i?c=We(t,t.g.i.next,c,t.g.o):(t.g.o(c),c=zt(t)),c},this.throw=function(c){return kt(t.g),t.g.i?c=We(t,t.g.i.throw,c,t.g.o):(ee(t.g,c),c=zt(t)),c},this.return=function(c){return ze(t,c)},this[Symbol.iterator]=function(){return this}}function ne(t){function c(b){return t.next(b)}function a(b){return t.throw(b)}return new Promise(function(b,S){function L(C){C.done?b(C.value):Promise.resolve(C.value).then(c,a).then(L,S)}L(t.next())})}function Zt(t){return ne(new Hn(new De(t)))}I("Promise",function(t){function c(C){this.h=0,this.i=void 0,this.g=[],this.o=!1;var U=this.j();try{C(U.resolve,U.reject)}catch(z){U.reject(z)}}function a(){this.g=null}function b(C){return C instanceof c?C:new c(function(U){U(C)})}if(t)return t;a.prototype.h=function(C){if(this.g==null){this.g=[];var U=this;this.i(function(){U.l()})}this.g.push(C)};var S=Z.setTimeout;a.prototype.i=function(C){S(C,0)},a.prototype.l=function(){for(;this.g&&this.g.length;){var C=this.g;this.g=[];for(var U=0;U<C.length;++U){var z=C[U];C[U]=null;try{z()}catch(Q){this.j(Q)}}}this.g=null},a.prototype.j=function(C){this.i(function(){throw C})},c.prototype.j=function(){function C(Q){return function(D){z||(z=!0,Q.call(U,D))}}var U=this,z=!1;return{resolve:C(this.D),reject:C(this.l)}},c.prototype.D=function(C){if(C===this)this.l(new TypeError("A Promise cannot resolve to itself"));else if(C instanceof c)this.G(C);else{t:switch(typeof C){case"object":var U=C!=null;break t;case"function":U=!0;break t;default:U=!1}U?this.A(C):this.m(C)}},c.prototype.A=function(C){var U=void 0;try{U=C.then}catch(z){this.l(z);return}typeof U=="function"?this.H(U,C):this.m(C)},c.prototype.l=function(C){this.s(2,C)},c.prototype.m=function(C){this.s(1,C)},c.prototype.s=function(C,U){if(this.h!=0)throw Error("Cannot settle("+C+", "+U+"): Promise already settled in state"+this.h);this.h=C,this.i=U,this.h===2&&this.F(),this.B()},c.prototype.F=function(){var C=this;S(function(){if(C.C()){var U=Z.console;typeof U<"u"&&U.error(C.i)}},1)},c.prototype.C=function(){if(this.o)return!1;var C=Z.CustomEvent,U=Z.Event,z=Z.dispatchEvent;return typeof z>"u"?!0:(typeof C=="function"?C=new C("unhandledrejection",{cancelable:!0}):typeof U=="function"?C=new U("unhandledrejection",{cancelable:!0}):(C=Z.document.createEvent("CustomEvent"),C.initCustomEvent("unhandledrejection",!1,!0,C)),C.promise=this,C.reason=this.i,z(C))},c.prototype.B=function(){if(this.g!=null){for(var C=0;C<this.g.length;++C)L.h(this.g[C]);this.g=null}};var L=new a;return c.prototype.G=function(C){var U=this.j();C.K(U.resolve,U.reject)},c.prototype.H=function(C,U){var z=this.j();try{C.call(U,z.resolve,z.reject)}catch(Q){z.reject(Q)}},c.prototype.then=function(C,U){function z(ft,mt){return typeof ft=="function"?function(Gt){try{Q(ft(Gt))}catch(vt){D(vt)}}:mt}var Q,D,st=new c(function(ft,mt){Q=ft,D=mt});return this.K(z(C,Q),z(U,D)),st},c.prototype.catch=function(C){return this.then(void 0,C)},c.prototype.K=function(C,U){function z(){switch(Q.h){case 1:C(Q.i);break;case 2:U(Q.i);break;default:throw Error("Unexpected state: "+Q.h)}}var Q=this;this.g==null?L.h(z):this.g.push(z),this.o=!0},c.resolve=b,c.reject=function(C){return new c(function(U,z){z(C)})},c.race=function(C){return new c(function(U,z){for(var Q=T(C),D=Q.next();!D.done;D=Q.next())b(D.value).K(U,z)})},c.all=function(C){var U=T(C),z=U.next();return z.done?b([]):new c(function(Q,D){function st(Gt){return function(vt){ft[Gt]=vt,mt--,mt==0&&Q(ft)}}var ft=[],mt=0;do ft.push(void 0),mt++,b(z.value).K(st(ft.length-1),D),z=U.next();while(!z.done)})},c});function $e(t,c){t instanceof String&&(t+="");var a=0,b=!1,S={next:function(){if(!b&&a<t.length){var L=a++;return{value:c(L,t[L]),done:!1}}return b=!0,{done:!0,value:void 0}}};return S[Symbol.iterator]=function(){return S},S}var An=typeof Object.assign=="function"?Object.assign:function(t,c){for(var a=1;a<arguments.length;a++){var b=arguments[a];if(b)for(var S in b)Object.prototype.hasOwnProperty.call(b,S)&&(t[S]=b[S])}return t};I("Object.assign",function(t){return t||An}),I("Object.is",function(t){return t||function(c,a){return c===a?c!==0||1/c===1/a:c!==c&&a!==a}}),I("Array.prototype.includes",function(t){return t||function(c,a){var b=this;b instanceof String&&(b=String(b));var S=b.length;for(a=a||0,0>a&&(a=Math.max(a+S,0));a<S;a++){var L=b[a];if(L===c||Object.is(L,c))return!0}return!1}}),I("String.prototype.includes",function(t){return t||function(c,a){if(this==null)throw new TypeError("The 'this' value for String.prototype.includes must not be null or undefined");if(c instanceof RegExp)throw new TypeError("First argument to String.prototype.includes must not be a regular expression");return this.indexOf(c,a||0)!==-1}}),I("Array.prototype.keys",function(t){return t||function(){return $e(this,function(c){return c})}});var Re=this||self;function Ht(t,c){t=t.split(".");var a=Re;t[0]in a||typeof a.execScript>"u"||a.execScript("var "+t[0]);for(var b;t.length&&(b=t.shift());)t.length||c===void 0?a[b]&&a[b]!==Object.prototype[b]?a=a[b]:a=a[b]={}:a[b]=c}function Te(t){throw t}function sn(t,c){Te(Error("Invalid wire type: "+t+" (at position "+c+")"))}function Gn(){Te(Error("Failed to read varint, encoding is invalid."))}function Ln(t,c){return c=String.fromCharCode.apply(null,c),t==null?c:t+c}var Rn,Jn=typeof TextDecoder<"u",dn,pn=typeof TextEncoder<"u";function kn(t){if(pn)t=(dn||(dn=new TextEncoder)).encode(t);else{var c=void 0;c=c===void 0?!1:c;for(var a=0,b=new Uint8Array(3*t.length),S=0;S<t.length;S++){var L=t.charCodeAt(S);if(128>L)b[a++]=L;else{if(2048>L)b[a++]=L>>6|192;else{if(55296<=L&&57343>=L){if(56319>=L&&S<t.length){var C=t.charCodeAt(++S);if(56320<=C&&57343>=C){L=1024*(L-55296)+C-56320+65536,b[a++]=L>>18|240,b[a++]=L>>12&63|128,b[a++]=L>>6&63|128,b[a++]=L&63|128;continue}else S--}if(c)throw Error("Found an unpaired surrogate");L=65533}b[a++]=L>>12|224,b[a++]=L>>6&63|128}b[a++]=L&63|128}}t=b.subarray(0,a)}return t}var Fn={},je=null;function Me(t){var c;c===void 0&&(c=0),he(),c=Fn[c];for(var a=Array(Math.floor(t.length/3)),b=c[64]||"",S=0,L=0;S<t.length-2;S+=3){var C=t[S],U=t[S+1],z=t[S+2],Q=c[C>>2];C=c[(C&3)<<4|U>>4],U=c[(U&15)<<2|z>>6],z=c[z&63],a[L++]=Q+C+U+z}switch(Q=0,z=b,t.length-S){case 2:Q=t[S+1],z=c[(Q&15)<<2]||b;case 1:t=t[S],a[L]=c[t>>2]+c[(t&3)<<4|Q>>4]+z+b}return a.join("")}function xn(t){var c=t.length,a=3*c/4;a%3?a=Math.floor(a):"=.".indexOf(t[c-1])!=-1&&(a="=.".indexOf(t[c-2])!=-1?a-2:a-1);var b=new Uint8Array(a),S=0;return Xn(t,function(L){b[S++]=L}),b.subarray(0,S)}function Xn(t,c){function a(z){for(;b<t.length;){var Q=t.charAt(b++),D=je[Q];if(D!=null)return D;if(!/^[\s\xa0]*$/.test(Q))throw Error("Unknown base64 encoding at char: "+Q)}return z}he();for(var b=0;;){var S=a(-1),L=a(0),C=a(64),U=a(64);if(U===64&&S===-1)break;c(S<<2|L>>4),C!=64&&(c(L<<4&240|C>>2),U!=64&&c(C<<6&192|U))}}function he(){if(!je){je={};for(var t="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789".split(""),c=["+/=","+/","-_=","-_.","-_"],a=0;5>a;a++){var b=t.concat(c[a].split(""));Fn[a]=b;for(var S=0;S<b.length;S++){var L=b[S];je[L]===void 0&&(je[L]=S)}}}}var Se=typeof Uint8Array=="function",Oe;function re(t){if(this.g=t,t!==null&&t.length===0)throw Error("ByteString should be constructed with non-empty values")}var Ve=typeof Uint8Array.prototype.slice=="function";function ln(t,c,a){return c===a?Oe||(Oe=new Uint8Array(0)):Ve?t.slice(c,a):new Uint8Array(t.subarray(c,a))}var Be=0,Qt=0;function Ze(t){if(t.constructor===Uint8Array)return t;if(t.constructor===ArrayBuffer)return new Uint8Array(t);if(t.constructor===Array)return new Uint8Array(t);if(t.constructor===String)return xn(t);if(t.constructor===re){if(t.g==null)var c=Oe||(Oe=new Uint8Array(0));else{c=Uint8Array;var a=t.g;a=a==null||Se&&a!=null&&a instanceof Uint8Array?a:typeof a=="string"?xn(a):null,t=t.g=a,c=new c(t)}return c}if(t instanceof Uint8Array)return new Uint8Array(t.buffer,t.byteOffset,t.byteLength);throw Error("Type not convertible to a Uint8Array, expected a Uint8Array, an ArrayBuffer, a base64 encoded string, or Array of numbers")}function Ce(t,c){c=c===void 0?{}:c,c=c.v===void 0?!1:c.v,this.h=null,this.g=this.i=this.l=0,this.j=!1,this.v=c,t&&Mt(this,t)}function Mt(t,c){t.h=Ze(c),t.l=0,t.i=t.h.length,t.g=t.l}Ce.prototype.reset=function(){this.g=this.l};function xe(t){for(var c=128,a=0,b=0,S=0;4>S&&128<=c;S++)c=t.h[t.g++],a|=(c&127)<<7*S;if(128<=c&&(c=t.h[t.g++],a|=(c&127)<<28,b|=(c&127)>>4),128<=c)for(S=0;5>S&&128<=c;S++)c=t.h[t.g++],b|=(c&127)<<7*S+3;if(128>c)return t=a>>>0,c=b>>>0,(b=c&2147483648)&&(t=~t+1>>>0,c=~c>>>0,t==0&&(c=c+1>>>0)),t=4294967296*c+(t>>>0),b?-t:t;t.j=!0,Gn()}function jt(t){t.g>t.i&&(t.j=!0,Te(Error("Tried to read past the end of the data "+t.g+" > "+t.i)))}function ye(t){var c=t.h,a=c[t.g],b=a&127;return 128>a?(t.g+=1,jt(t),b):(a=c[t.g+1],b|=(a&127)<<7,128>a?(t.g+=2,jt(t),b):(a=c[t.g+2],b|=(a&127)<<14,128>a?(t.g+=3,jt(t),b):(a=c[t.g+3],b|=(a&127)<<21,128>a?(t.g+=4,jt(t),b):(a=c[t.g+4],b|=(a&15)<<28,128>a?(t.g+=5,jt(t),b>>>0):(t.g+=5,128<=c[t.g++]&&128<=c[t.g++]&&128<=c[t.g++]&&128<=c[t.g++]&&128<=c[t.g++]?(t.j=!0,Gn(),b):(jt(t),b))))))}function Ye(t){var c=t.h[t.g],a=t.h[t.g+1],b=t.h[t.g+2],S=t.h[t.g+3];return t.g+=4,jt(t),(c<<0|a<<8|b<<16|S<<24)>>>0}Ce.prototype.m=function(){var t=Ye(this),c=2*(t>>31)+1,a=t>>>23&255;return t&=8388607,a==255?t?NaN:1/0*c:a==0?c*Math.pow(2,-149)*t:c*Math.pow(2,a-150)*(t+Math.pow(2,23))};var qe=[];function Xe(){this.g=new Uint8Array(64),this.h=0}function Ot(t,c){if(!(t.h+1<t.g.length)){var a=t.g;t.g=new Uint8Array(Math.ceil(1+2*t.g.length)),t.g.set(a)}t.g[t.h++]=c}Xe.prototype.length=function(){return this.h},Xe.prototype.end=function(){var t=this.g,c=this.h;return this.h=0,ln(t,0,c)};function Ae(t,c){for(;127<c;)Ot(t,c&127|128),c>>>=7;Ot(t,c)}function Pe(t){var c={},a=c.O===void 0?!1:c.O;this.m={v:c.v===void 0?!1:c.v},this.O=a,c=this.m,qe.length?(a=qe.pop(),c&&(a.v=c.v),t&&Mt(a,t),t=a):t=new Ce(t,c),this.g=t,this.l=this.g.g,this.h=this.i=-1,this.j=!1}Pe.prototype.reset=function(){this.g.reset(),this.h=this.i=-1};function Ie(t){var c=t.g;if((c=c.g==c.i)||(c=t.j)||(c=t.g,c=c.j||0>c.g||c.g>c.i),c)return!1;t.l=t.g.g;var a=ye(t.g);return c=a>>>3,a&=7,0<=a&&5>=a?(t.i=c,t.h=a,!0):(t.j=!0,sn(a,t.l),!1)}function Wn(t){switch(t.h){case 0:if(t.h!=0)Wn(t);else t:{t=t.g;for(var c=t.g,a=0;10>a;a++){if((t.h[c]&128)===0){t.g=c+1,jt(t);break t}c++}t.j=!0,Gn()}break;case 1:t=t.g,t.g+=8,jt(t);break;case 2:t.h!=2?Wn(t):(c=ye(t.g),t=t.g,t.g+=c,jt(t));break;case 5:t=t.g,t.g+=4,jt(t);break;case 3:c=t.i;do{if(!Ie(t)){t.j=!0,Te(Error("Unmatched start-group tag: stream EOF"));break}if(t.h==4){t.i!=c&&(t.j=!0,Te(Error("Unmatched end-group tag")));break}Wn(t)}while(1);break;default:t.j=!0,sn(t.h,t.l)}}function cn(t,c,a){var b=t.g.i,S=ye(t.g),L=t.g.g+S;if(t.g.i=L,a(c,t),a=L-t.g.g,a!==0)throw Error("Message parsing ended unexpectedly. Expected to read "+(S+" bytes, instead read "+(S-a)+" bytes, either the data ended unexpectedly or the message misreported its own length"));return t.g.g=L,t.g.i=b,c}var _e=[];function un(){this.h=[],this.i=0,this.g=new Xe}function ve(t,c){c.length!==0&&(t.h.push(c),t.i+=c.length)}function we(t,c,a){Ae(t.g,8*c+2),Ae(t.g,a.length),ve(t,t.g.end()),ve(t,a)}var Ge=typeof Symbol=="function"&&typeof Symbol()=="symbol"?Symbol(void 0):void 0;function ie(t){return Object.isFrozen(t)||(Ge?t[Ge]|=1:t.g!==void 0?t.g|=1:Object.defineProperties(t,{g:{value:1,configurable:!0,writable:!0,enumerable:!1}})),t}function Qe(t){return t!==null&&typeof t=="object"&&t.constructor===Object}function qt(t){switch(typeof t){case"number":return isFinite(t)?t:String(t);case"object":if(Se&&t!=null&&t instanceof Uint8Array)return Me(t);if(t instanceof re){if(t.g==null)t="";else{var c=t.g;c=c==null||typeof c=="string"?c:Se&&c instanceof Uint8Array?Me(c):null,t=t.g=c}return t}}return t}function Pt(t,c){if(t!=null)return Array.isArray(t)||Qe(t)?hn(t,c):c(t)}function hn(t,c){if(Array.isArray(t)){for(var a=Array(t.length),b=0;b<t.length;b++)a[b]=Pt(t[b],c);if(c=Array.isArray(t)){var S;Ge?S=t[Ge]:S=t.g,c=(S==null?0:S)&1}return c&&ie(a),a}S={};for(a in t)S[a]=Pt(t[a],c);return S}function fe(t){return t=qt(t),Array.isArray(t)?hn(t,fe):t}var Ct;function Vt(t,c,a){var b=Ct;Ct=null,t||(t=b),b=this.constructor.ha,t||(t=b?[b]:[]),this.i=(b?0:-1)-(this.constructor.fa||0),this.l=this.g=null,this.u=t;t:{if(b=this.u.length,t=b-1,b&&(b=this.u[t],Qe(b))){this.j=t-this.i,this.h=b;break t}c!==void 0&&-1<c?(this.j=Math.max(c,t+1-this.i),this.h=null):this.j=Number.MAX_VALUE}if(a)for(c=0;c<a.length;c++)t=a[c],t<this.j?(t+=this.i,(b=this.u[t])?Array.isArray(b)&&ie(b):this.u[t]=oe):(Le(this),(b=this.h[t])?Array.isArray(b)&&ie(b):this.h[t]=oe)}var oe=Object.freeze(ie([]));function Le(t){var c=t.j+t.i;t.u[c]||(t.h=t.u[c]={})}function te(t,c,a){return c===-1?null:(a===void 0?0:a)||c>=t.j?t.h?t.h[c]:void 0:t.u[c+t.i]}function se(t,c,a){a=a===void 0?!1:a;var b=te(t,c,a);return b==null&&(b=oe),b===oe&&(b=ie(b.slice()),ut(t,c,b,a)),b}function tt(t,c){var a=se(t,c);if(t.l||(t.l={}),!t.l[c]){for(var b=0;b<a.length;b++)a[b]=+a[b];t.l[c]=!0}return a}function it(t,c,a){return t=te(t,c),t=t==null?t:+t,t==null?a===void 0?0:a:t}function ut(t,c,a,b){(b===void 0?0:b)||c>=t.j?(Le(t),t.h[c]=a):t.u[c+t.i]=a}function _t(t,c,a,b){a!==b?ut(t,c,a):ut(t,c,void 0,!1)}function de(t,c,a){if(a===-1)return null;t.g||(t.g={});var b=t.g[a];if(b)return b;var S=te(t,a,!1);return S==null?b:(c=new c(S),t.g[a]=c)}function ue(t,c,a){t.g||(t.g={});var b=t.g[a];if(!b){var S=se(t,a,!1);b=[];for(var L=0;L<S.length;L++)b[L]=new c(S[L]);t.g[a]=b}return b}function St(t,c,a,b,S){var L=ue(t,b,c);a=a||new b,t=se(t,c),S!=null?(L.splice(S,0,a),t.splice(S,0,a.u)):(L.push(a),t.push(a.u))}Vt.prototype.toJSON=function(){return hn(this.u,fe)},Vt.prototype.toString=function(){return this.u.toString()};function me(t,c){return t=te(t,c),t==null?0:t}function He(t,c){return t=te(t,c),t==null?"":t}function tn(t,c){if(t=t.m){ve(c,c.g.end());for(var a=0;a<t.length;a++)ve(c,t[a])}}var en=Symbol();function fn(t,c,a){return t[en]||(t[en]=function(b,S){return c(b,S,a)})}function bn(t){var c=t[en];if(!c){var a=t[rn]||(t[rn]=t());c=function(b,S){return Je(b,S,a)},t[en]=c}return c}function Fe(t){var c=t.da;if(c)return bn(c);if(c=t.ia){var a=t.Y;return delete t.Y,fn(t.W.g,c,a)}}function nn(t){var c=Fe(t),a=t.W,b=t.ea;return c?function(S,L){return b(S,L,a,c)}:function(S,L){return b(S,L,a)}}function zn(t){var c=t[0];switch(t.length){case 2:var a=t[1];return function(mt,Gt,vt){return c(mt,Gt,vt,a)};case 3:var b=t[1],S=bn(t[2]);return function(mt,Gt,vt){return c(mt,Gt,vt,b,S)};case 4:var L=t[1],C=t[3],U=bn(t[2]);return function(mt,Gt,vt){return c(mt,Gt,vt,L,U,C)};case 5:var z=t[1],Q=fn(z,t[3],t[4]);return function(mt,Gt,vt){return c(mt,Gt,vt,z,Q)};case 6:var D=t[1],st=t[5],ft=fn(D,t[3],t[4]);return function(mt,Gt,vt){return c(mt,Gt,vt,D,ft,st)};default:throw Error("Unsupported number of parameters, expected [2-6], got "+t.length)}}var rn=Symbol();function Je(t,c,a){for(;Ie(c)&&c.h!=4;){var b=c.i,S=a[b];if(S)Array.isArray(S)&&(S=a[b]=zn(S));else{var L=a[0];L&&(L=L[b])&&(S=a[b]=nn(L))}S&&S(c,t,b)||(S=c,b=t,L=S.l,Wn(S),S.O||(S=ln(S.g.h,L,S.g.g),(L=b.m)?L.push(S):b.m=[S]))}return t}function gn(t,c){var a=new un;if(c(t,a),t=a.i+a.g.length(),t===0)a=new Uint8Array(0);else{t=new Uint8Array(t);for(var b=a.h,S=b.length,L=c=0;L<S;L++){var C=b[L];C.length!==0&&(t.set(C,c),c+=C.length)}b=a.g,S=b.h,S!==0&&(t.set(b.g.subarray(0,S),c),b.h=0),a.h=[t],a=t}return a}function In(t,c,a){if(_e.length){var b=_e.pop();t&&(Mt(b.g,t),b.i=-1,b.h=-1),t=b}else t=new Pe(t);try{var S=new c;return Je(S,t,a[rn]||(a[rn]=a()))}finally{c=t.g,c.h=null,c.l=0,c.i=0,c.g=0,c.j=!1,c.v=!1,t.i=-1,t.h=-1,t.j=!1,100>_e.length&&_e.push(t)}}function Ke(t,c,a){if(c=te(c,a),c!=null){Ae(t.g,8*a+5),t=t.g;var b=c;b=(a=0>b?1:0)?-b:b,b===0?0<1/b?Be=Qt=0:(Qt=0,Be=2147483648):isNaN(b)?(Qt=0,Be=2147483647):34028234663852886e22<b?(Qt=0,Be=(a<<31|2139095040)>>>0):11754943508222875e-54>b?(b=Math.round(b/Math.pow(2,-149)),Qt=0,Be=(a<<31|b)>>>0):(c=Math.floor(Math.log(b)/Math.LN2),b*=Math.pow(2,-c),b=Math.round(8388608*b),16777216<=b&&++c,Qt=0,Be=(a<<31|c+127<<23|b&8388607)>>>0),a=Be,Ot(t,a>>>0&255),Ot(t,a>>>8&255),Ot(t,a>>>16&255),Ot(t,a>>>24&255)}}function En(t,c,a){if(t.h!==1)return!1;var b=t.g;t=Ye(b);var S=Ye(b);b=2*(S>>31)+1;var L=S>>>20&2047;return t=4294967296*(S&1048575)+t,_t(c,a,L==2047?t?NaN:1/0*b:L==0?b*Math.pow(2,-1074)*t:b*Math.pow(2,L-1075)*(t+4503599627370496),0),!0}function on(t,c,a){return t.h!==5?!1:(ut(c,a,t.g.m()),!0)}function Zn(t,c,a){if(t.h!==5&&t.h!==2)return!1;if(c=se(c,a),t.h==2){a=Ce.prototype.m;var b=ye(t.g);for(b=t.g.g+b;t.g.g<b;)c.push(a.call(t.g))}else c.push(t.g.m());return!0}function Sn(t,c,a){return t.h!==5?!1:(t=t.g.m(),_t(c,a,t,0),!0)}function Kn(t,c,a){return t.h!==0?!1:(ut(c,a,xe(t.g)),!0)}function an(t,c,a){return t.h!==0?!1:(ut(c,a,ye(t.g)),!0)}function Tn(t,c,a){return t.h!==0?!1:(t=ye(t.g),_t(c,a,t,0),!0)}function _n(t,c,a){return t.h!==0?!1:(t=!!ye(t.g),_t(c,a,t,!1),!0)}function Qn(t,c,a){if(t.h!==2)return!1;var b=ye(t.g);t=t.g;var S=t.g;t.g+=b,jt(t),t=t.h;var L;if(Jn)(L=Rn)||(L=Rn=new TextDecoder("utf-8",{fatal:!1})),L=L.decode(t.subarray(S,S+b));else{b=S+b;for(var C=[],U=null,z,Q,D;S<b;)z=t[S++],128>z?C.push(z):224>z?S>=b?C.push(65533):(Q=t[S++],194>z||(Q&192)!==128?(S--,C.push(65533)):C.push((z&31)<<6|Q&63)):240>z?S>=b-1?C.push(65533):(Q=t[S++],(Q&192)!==128||z===224&&160>Q||z===237&&160<=Q||((L=t[S++])&192)!==128?(S--,C.push(65533)):C.push((z&15)<<12|(Q&63)<<6|L&63)):244>=z?S>=b-2?C.push(65533):(Q=t[S++],(Q&192)!==128||(z<<28)+(Q-144)>>30!==0||((L=t[S++])&192)!==128||((D=t[S++])&192)!==128?(S--,C.push(65533)):(z=(z&7)<<18|(Q&63)<<12|(L&63)<<6|D&63,z-=65536,C.push((z>>10&1023)+55296,(z&1023)+56320))):C.push(65533),8192<=C.length&&(U=Ln(U,C),C.length=0);L=Ln(U,C)}return ut(c,a,L),!0}function Yn(t,c,a,b,S){return t.h!==2?!1:(t=cn(t,new b,S),c.g||(c.g={}),b=t&&t.u,c.g[a]=t,ut(c,a,b,!1),!0)}function Cn(t,c,a,b,S){return t.h!==2?!1:(t=cn(t,new b,S),St(c,a,t,b,void 0),!0)}function p(t,c,a){return t.h!==0?!1:(ut(c,a,xe(t.g)),!0)}function W(t){Vt.call(this,t)}dt(W,Vt);function V(){return{1:an,2:on,3:Qn,4:Qn}}function E(t,c){var a=te(t,1);if(a!=null&&a!=null){Ae(c.g,8);var b=c.g;if(0<=a)Ae(b,a);else{for(var S=0;9>S;S++)Ot(b,a&127|128),a>>=7;Ot(b,1)}}Ke(c,t,2),b=te(t,3),b!=null&&we(c,3,kn(b)),b=te(t,4),b!=null&&we(c,4,kn(b)),tn(t,c)}function O(t){Vt.call(this,t,-1,j)}dt(O,Vt),O.prototype.addClassification=function(t,c){return St(this,1,t,W,c),this};function ot(){return{1:[Cn,W,V]}}var j=[1];function rt(t){Vt.call(this,t)}dt(rt,Vt);function bt(){return{1:on,2:on,3:on,4:on,5:on}}function Rt(t,c){Ke(c,t,1),Ke(c,t,2),Ke(c,t,3),Ke(c,t,4),Ke(c,t,5),tn(t,c)}function Ut(t){Vt.call(this,t,-1,$t)}dt(Ut,Vt);function Jt(){return{1:[Cn,rt,bt]}}var $t=[1];function Nt(t){Vt.call(this,t)}dt(Nt,Vt);function Tt(){return{1:on,2:on,3:on,4:on,5:on,6:Kn}}function Et(t,c){Ke(c,t,1),Ke(c,t,2),Ke(c,t,3),Ke(c,t,4),Ke(c,t,5);var a=te(t,6);if(a!=null&&a!=null){Ae(c.g,48);var b=c.g,S=a;a=0>S,S=Math.abs(S);var L=S>>>0;for(S=Math.floor((S-L)/4294967296),S>>>=0,a&&(S=~S>>>0,L=(~L>>>0)+1,4294967295<L&&(L=0,S++,4294967295<S&&(S=0))),Be=L,Qt=S,a=Be,L=Qt;0<L||127<a;)Ot(b,a&127|128),a=(a>>>7|L<<25)>>>0,L>>>=7;Ot(b,a)}tn(t,c)}function Dt(t){Vt.call(this,t,-1,Ne)}dt(Dt,Vt);function ae(){return{1:p,2:p,3:Zn,4:[Yn,pe,ge],5:an,6:an,7:Zn,8:Zn,9:Zn}}function pe(t){Vt.call(this,t)}dt(pe,Vt);function ge(){return{1:on,2:on,3:on}}var Ne=[3,7,8,9];function h(t){Vt.call(this,t)}dt(h,Vt);function y(){return{1:Sn,2:Sn,3:Sn}}function G(t){Vt.call(this,t)}dt(G,Vt);function H(){return{1:Sn,2:Sn,3:Sn}}function K(t){Vt.call(this,t)}dt(K,Vt);function _(){return{1:Tn,2:[Yn,G,H],3:[Yn,h,y],4:_n}}function M(t){Vt.call(this,t,-1,ct)}dt(M,Vt);function q(){return{1:Tn,2:[Cn,K,_],3:Sn,4:Zn,5:Zn,6:Zn}}var ct=[2,4,5,6];function s(t){Vt.call(this,t,-1,R)}dt(s,Vt);function X(){return{1:Tn,2:[Cn,M,q],3:[Yn,Dt,ae],4:En,5:Zn,6:Zn}}var R=[2,5,6];function w(t,c,a){if(a=t.createShader(a===0?t.VERTEX_SHADER:t.FRAGMENT_SHADER),t.shaderSource(a,c),t.compileShader(a),!t.getShaderParameter(a,t.COMPILE_STATUS))throw Error(`Could not compile WebGL shader.
|
|
88
88
|
|
|
89
|
-
`+t.getShaderInfoLog(a));return a}function
|
|
89
|
+
`+t.getShaderInfoLog(a));return a}function N(t){return ue(t,W,1).map(function(c){return{index:me(c,1),$:it(c,2),label:te(c,3)!=null?He(c,3):void 0,displayName:te(c,4)!=null?He(c,4):void 0}})}function A(t){return{x:it(t,1),y:it(t,2),z:it(t,3),visibility:te(t,4)!=null?it(t,4):void 0}}function B(t,c){this.h=t,this.g=c,this.l=0}function nt(t,c,a){return $(t,c),typeof t.g.canvas.transferToImageBitmap=="function"?Promise.resolve(t.g.canvas.transferToImageBitmap()):a?Promise.resolve(t.g.canvas):typeof createImageBitmap=="function"?createImageBitmap(t.g.canvas):(t.i===void 0&&(t.i=document.createElement("canvas")),new Promise(function(b){t.i.height=t.g.canvas.height,t.i.width=t.g.canvas.width,t.i.getContext("2d",{}).drawImage(t.g.canvas,0,0,t.g.canvas.width,t.g.canvas.height),b(t.i)}))}function $(t,c){var a=t.g;if(t.m===void 0){var b=w(a,`
|
|
90
90
|
attribute vec2 aVertex;
|
|
91
91
|
attribute vec2 aTex;
|
|
92
92
|
varying vec2 vTex;
|
|
@@ -101,38 +101,38 @@
|
|
|
101
101
|
gl_FragColor = texture2D(sampler0, vTex);
|
|
102
102
|
}`,1),L=a.createProgram();if(a.attachShader(L,b),a.attachShader(L,S),a.linkProgram(L),!a.getProgramParameter(L,a.LINK_STATUS))throw Error(`Could not compile WebGL program.
|
|
103
103
|
|
|
104
|
-
`+a.getProgramInfoLog(L));b=t.m=L,a.useProgram(b),S=a.getUniformLocation(b,"sampler0"),t.j={J:a.getAttribLocation(b,"aVertex"),I:a.getAttribLocation(b,"aTex"),ja:S},t.s=a.createBuffer(),a.bindBuffer(a.ARRAY_BUFFER,t.s),a.enableVertexAttribArray(t.j.J),a.vertexAttribPointer(t.j.J,2,a.FLOAT,!1,0,0),a.bufferData(a.ARRAY_BUFFER,new Float32Array([-1,-1,-1,1,1,1,1,-1]),a.STATIC_DRAW),a.bindBuffer(a.ARRAY_BUFFER,null),t.o=a.createBuffer(),a.bindBuffer(a.ARRAY_BUFFER,t.o),a.enableVertexAttribArray(t.j.I),a.vertexAttribPointer(t.j.I,2,a.FLOAT,!1,0,0),a.bufferData(a.ARRAY_BUFFER,new Float32Array([0,1,0,0,1,0,1,1]),a.STATIC_DRAW),a.bindBuffer(a.ARRAY_BUFFER,null),a.uniform1i(S,0)}b=t.j,a.useProgram(t.m),a.canvas.width=c.width,a.canvas.height=c.height,a.viewport(0,0,c.width,c.height),a.activeTexture(a.TEXTURE0),t.h.bindTexture2d(c.glName),a.enableVertexAttribArray(b.J),a.bindBuffer(a.ARRAY_BUFFER,t.s),a.vertexAttribPointer(b.J,2,a.FLOAT,!1,0,0),a.enableVertexAttribArray(b.I),a.bindBuffer(a.ARRAY_BUFFER,t.o),a.vertexAttribPointer(b.I,2,a.FLOAT,!1,0,0),a.bindFramebuffer(a.DRAW_FRAMEBUFFER?a.DRAW_FRAMEBUFFER:a.FRAMEBUFFER,null),a.clearColor(0,0,0,0),a.clear(a.COLOR_BUFFER_BIT),a.colorMask(!0,!0,!0,!0),a.drawArrays(a.TRIANGLE_FAN,0,4),a.disableVertexAttribArray(b.J),a.disableVertexAttribArray(b.I),a.bindBuffer(a.ARRAY_BUFFER,null),t.h.bindTexture2d(0)}function yt(t){this.g=t}var Xt=new Uint8Array([0,97,115,109,1,0,0,0,1,4,1,96,0,0,3,2,1,0,10,9,1,7,0,65,0,253,15,26,11]);function Kt(t,c){return c+t}function It(t,c){window[t]=c}function ht(t){var c=document.createElement("script");return c.setAttribute("src",t),c.setAttribute("crossorigin","anonymous"),new Promise(function(a){c.addEventListener("load",function(){a()},!1),c.addEventListener("error",function(){a()},!1),document.body.appendChild(c)})}function Wt(){return Zt(function(t){switch(t.g){case 1:return t.m=2,O(t,WebAssembly.instantiate(Xt),4);case 4:t.g=3,t.m=0;break;case 2:return t.m=0,t.j=null,t.return(!1);case 3:return t.return(!0)}})}function xt(t){if(this.g=t,this.listeners={},this.j={},this.G={},this.m={},this.s={},this.H=this.o=this.S=!0,this.D=Promise.resolve(),this.R="",this.C={},this.locateFile=t&&t.locateFile||Kt,typeof window=="object")var c=window.location.pathname.toString().substring(0,window.location.pathname.toString().lastIndexOf("/"))+"/";else if(typeof location<"u")c=location.pathname.toString().substring(0,location.pathname.toString().lastIndexOf("/"))+"/";else throw Error("solutions can only be loaded on a web page or in a web worker");if(this.T=c,t.options){c=T(Object.keys(t.options));for(var a=c.next();!a.done;a=c.next()){a=a.value;var b=t.options[a].default;b!==void 0&&(this.j[a]=typeof b=="function"?b():b)}}}i=xt.prototype,i.close=function(){return this.i&&this.i.delete(),Promise.resolve()};function wt(t){var c,a,b,S,L,F,U,z,Q,D,st;return Zt(function(ft){switch(ft.g){case 1:return t.S?(c=t.g.files===void 0?[]:typeof t.g.files=="function"?t.g.files(t.j):t.g.files,O(ft,Wt(),2)):ft.return();case 2:if(a=ft.h,typeof window=="object")return It("createMediapipeSolutionsWasm",{locateFile:t.locateFile}),It("createMediapipeSolutionsPackedAssets",{locateFile:t.locateFile}),F=c.filter(function(mt){return mt.data!==void 0}),U=c.filter(function(mt){return mt.data===void 0}),z=Promise.all(F.map(function(mt){var Gt=v(t,mt.url);if(mt.path!==void 0){var vt=mt.path;Gt=Gt.then(function(At){return t.overrideFile(vt,At),Promise.resolve(At)})}return Gt})),Q=Promise.all(U.map(function(mt){return mt.simd===void 0||mt.simd&&a||!mt.simd&&!a?ht(t.locateFile(mt.url,t.T)):Promise.resolve()})).then(function(){var mt,Gt,vt;return Zt(function(At){if(At.g==1)return mt=window.createMediapipeSolutionsWasm,Gt=window.createMediapipeSolutionsPackedAssets,vt=t,O(At,mt(Gt),2);vt.h=At.h,At.g=0})}),D=function(){return Zt(function(mt){return t.g.graph&&t.g.graph.url?mt=O(mt,v(t,t.g.graph.url),0):(mt.g=0,mt=void 0),mt})}(),O(ft,Promise.all([Q,z,D]),7);if(typeof importScripts!="function")throw Error("solutions can only be loaded on a web page or in a web worker");return b=c.filter(function(mt){return mt.simd===void 0||mt.simd&&a||!mt.simd&&!a}).map(function(mt){return t.locateFile(mt.url,t.T)}),importScripts.apply(null,J(b)),S=t,O(ft,createMediapipeSolutionsWasm(Module),6);case 6:S.h=ft.h,t.l=new OffscreenCanvas(1,1),t.h.canvas=t.l,L=t.h.GL.createContext(t.l,{antialias:!1,alpha:!1,ga:typeof WebGL2RenderingContext<"u"?2:1}),t.h.GL.makeContextCurrent(L),ft.g=4;break;case 7:if(t.l=document.createElement("canvas"),st=t.l.getContext("webgl2",{}),!st&&(st=t.l.getContext("webgl",{}),!st))return alert("Failed to create WebGL canvas context when passing video frame."),ft.return();t.F=st,t.h.canvas=t.l,t.h.createContext(t.l,!0,!0,{});case 4:t.i=new t.h.SolutionWasm,t.S=!1,ft.g=0}})}function Ht(t){var c,a,b,S,L,F,U,z;return Zt(function(Q){if(Q.g==1){if(t.g.graph&&t.g.graph.url&&t.R===t.g.graph.url)return Q.return();if(t.o=!0,!t.g.graph||!t.g.graph.url){Q.g=2;return}return t.R=t.g.graph.url,O(Q,v(t,t.g.graph.url),3)}for(Q.g!=2&&(c=Q.h,t.i.loadGraph(c)),a=T(Object.keys(t.C)),b=a.next();!b.done;b=a.next())S=b.value,t.i.overrideFile(S,t.C[S]);if(t.C={},t.g.listeners)for(L=T(t.g.listeners),F=L.next();!F.done;F=L.next())U=F.value,N(t,U);z=t.j,t.j={},t.setOptions(z),Q.g=0})}i.reset=function(){var t=this;return Zt(function(c){t.i&&(t.i.reset(),t.m={},t.s={}),c.g=0})},i.setOptions=function(t,c){var a=this;if(c=c||this.g.options){for(var b=[],S=[],L={},F=T(Object.keys(t)),U=F.next();!U.done;L={L:L.L,M:L.M},U=F.next()){var z=U.value;z in this.j&&this.j[z]===t[z]||(this.j[z]=t[z],U=c[z],U!==void 0&&(U.onChange&&(L.L=U.onChange,L.M=t[z],b.push(function(Q){return function(){var D;return Zt(function(st){if(st.g==1)return O(st,Q.L(Q.M),2);D=st.h,D===!0&&(a.o=!0),st.g=0})}}(L))),U.graphOptionXref&&(z={valueNumber:U.type===1?t[z]:0,valueBoolean:U.type===0?t[z]:!1,valueString:U.type===2?t[z]:""},U=Object.assign(Object.assign(Object.assign({},{calculatorName:"",calculatorIndex:0}),U.graphOptionXref),z),S.push(U))))}(b.length!==0||S.length!==0)&&(this.o=!0,this.B=(this.B===void 0?[]:this.B).concat(S),this.A=(this.A===void 0?[]:this.A).concat(b))}};function l(t){var c,a,b,S,L,F,U;return Zt(function(z){switch(z.g){case 1:if(!t.o)return z.return();if(!t.A){z.g=2;break}c=T(t.A),a=c.next();case 3:if(a.done){z.g=5;break}return b=a.value,O(z,b(),4);case 4:a=c.next(),z.g=3;break;case 5:t.A=void 0;case 2:if(t.B){for(S=new t.h.GraphOptionChangeRequestList,L=T(t.B),F=L.next();!F.done;F=L.next())U=F.value,S.push_back(U);t.i.changeOptions(S),S.delete(),t.B=void 0}t.o=!1,z.g=0}})}i.initialize=function(){var t=this;return Zt(function(c){return c.g==1?O(c,wt(t),2):c.g!=3?O(c,Ht(t),3):O(c,l(t),0)})};function v(t,c){var a,b;return Zt(function(S){return c in t.G?S.return(t.G[c]):(a=t.locateFile(c,""),b=fetch(a).then(function(L){return L.arrayBuffer()}),t.G[c]=b,S.return(b))})}i.overrideFile=function(t,c){this.i?this.i.overrideFile(t,c):this.C[t]=c},i.clearOverriddenFiles=function(){this.C={},this.i&&this.i.clearOverriddenFiles()},i.send=function(t,c){var a=this,b,S,L,F,U,z,Q,D,st;return Zt(function(ft){switch(ft.g){case 1:return a.g.inputs?(b=1e3*(c==null?performance.now():c),O(ft,a.D,2)):ft.return();case 2:return O(ft,a.initialize(),3);case 3:for(S=new a.h.PacketDataList,L=T(Object.keys(t)),F=L.next();!F.done;F=L.next())if(U=F.value,z=a.g.inputs[U]){t:{var mt=t[U];switch(z.type){case"video":var Gt=a.m[z.stream];if(Gt||(Gt=new B(a.h,a.F),a.m[z.stream]=Gt),Gt.l===0&&(Gt.l=Gt.h.createTexture()),typeof HTMLVideoElement<"u"&&mt instanceof HTMLVideoElement)var vt=mt.videoWidth,At=mt.videoHeight;else typeof HTMLImageElement<"u"&&mt instanceof HTMLImageElement?(vt=mt.naturalWidth,At=mt.naturalHeight):(vt=mt.width,At=mt.height);At={glName:Gt.l,width:vt,height:At},vt=Gt.g,vt.canvas.width=At.width,vt.canvas.height=At.height,vt.activeTexture(vt.TEXTURE0),Gt.h.bindTexture2d(Gt.l),vt.texImage2D(vt.TEXTURE_2D,0,vt.RGBA,vt.RGBA,vt.UNSIGNED_BYTE,mt),Gt.h.bindTexture2d(0),Gt=At;break t;case"detections":for(Gt=a.m[z.stream],Gt||(Gt=new yt(a.h),a.m[z.stream]=Gt),Gt.data||(Gt.data=new Gt.g.DetectionListData),Gt.data.reset(mt.length),At=0;At<mt.length;++At){vt=mt[At];var le=Gt.data,ce=le.setBoundingBox,Ne=At,Rn=vt.U,Ee=new kt;if(ut(Ee,1,Rn.aa),ut(Ee,2,Rn.ba),ut(Ee,3,Rn.height),ut(Ee,4,Rn.width),ut(Ee,5,Rn.rotation),ut(Ee,6,Rn.Z),Rn=Zn(Ee,Et),ce.call(le,Ne,Rn),vt.P)for(le=0;le<vt.P.length;++le){Ee=vt.P[le];var Nn=!!Ee.visibility;ce=Gt.data,Ne=ce.addNormalizedLandmark,Rn=At,Ee=Object.assign(Object.assign({},Ee),{visibility:Nn?Ee.visibility:0}),Nn=new rt,ut(Nn,1,Ee.x),ut(Nn,2,Ee.y),ut(Nn,3,Ee.z),Ee.visibility&&ut(Nn,4,Ee.visibility),Ee=Zn(Nn,Rt),Ne.call(ce,Rn,Ee)}if(vt.N)for(le=0;le<vt.N.length;++le)ce=Gt.data,Ne=ce.addClassification,Rn=At,Ee=vt.N[le],Nn=new W,ut(Nn,2,Ee.$),Ee.index&&ut(Nn,1,Ee.index),Ee.label&&ut(Nn,3,Ee.label),Ee.displayName&&ut(Nn,4,Ee.displayName),Ee=Zn(Nn,E),Ne.call(ce,Rn,Ee)}Gt=Gt.data;break t;default:Gt={}}}switch(Q=Gt,D=z.stream,z.type){case"video":S.pushTexture2d(Object.assign(Object.assign({},Q),{stream:D,timestamp:b}));break;case"detections":st=Q,st.stream=D,st.timestamp=b,S.pushDetectionList(st);break;default:throw Error("Unknown input config type: '"+z.type+"'")}}return a.i.send(S),O(ft,a.D,4);case 4:S.delete(),ft.g=0}})};function I(t,c,a){var b,S,L,F,U,z,Q,D,st,ft,mt,Gt,vt,At;return Zt(function(le){switch(le.g){case 1:if(!a)return le.return(c);for(b={},S=0,L=T(Object.keys(a)),F=L.next();!F.done;F=L.next())U=F.value,z=a[U],typeof z!="string"&&z.type==="texture"&&c[z.stream]!==void 0&&++S;1<S&&(t.H=!1),Q=T(Object.keys(a)),F=Q.next();case 2:if(F.done){le.g=4;break}if(D=F.value,st=a[D],typeof st=="string")return vt=b,At=D,O(le,Y(t,D,c[st]),14);if(ft=c[st.stream],st.type==="detection_list"){if(ft){for(var ce=ft.getRectList(),Ne=ft.getLandmarksList(),Rn=ft.getClassificationsList(),Ee=[],Nn=0;Nn<ce.size();++Nn){var gr=Sn(ce.get(Nn),kt,Tt);gr={U:{aa:it(gr,1),ba:it(gr,2),height:it(gr,3),width:it(gr,4),rotation:it(gr,5,0),Z:me(gr,6)},P:ue(Sn(Ne.get(Nn),Ut,Jt),rt,1).map(A),N:k(Sn(Rn.get(Nn),P,ot))},Ee.push(gr)}ce=Ee}else ce=[];b[D]=ce,le.g=7;break}if(st.type==="proto_list"){if(ft){for(ce=Array(ft.size()),Ne=0;Ne<ft.size();Ne++)ce[Ne]=ft.get(Ne);ft.delete()}else ce=[];b[D]=ce,le.g=7;break}if(ft===void 0){le.g=3;break}if(st.type==="float_list"){b[D]=ft,le.g=7;break}if(st.type==="proto"){b[D]=ft,le.g=7;break}if(st.type!=="texture")throw Error("Unknown output config type: '"+st.type+"'");return mt=t.s[D],mt||(mt=new B(t.h,t.F),t.s[D]=mt),O(le,nt(mt,ft,t.H),13);case 13:Gt=le.h,b[D]=Gt;case 7:st.transform&&b[D]&&(b[D]=st.transform(b[D])),le.g=3;break;case 14:vt[At]=le.h;case 3:F=Q.next(),le.g=2;break;case 4:return le.return(b)}})}function Y(t,c,a){var b;return Zt(function(S){return typeof a=="number"||a instanceof Uint8Array||a instanceof t.h.Uint8BlobList?S.return(a):a instanceof t.h.Texture2dDataOut?(b=t.s[c],b||(b=new B(t.h,t.F),t.s[c]=b),S.return(nt(b,a,t.H))):S.return(void 0)})}function N(t,c){for(var a=c.name||"$",b=[].concat(J(c.wants)),S=new t.h.StringList,L=T(c.wants),F=L.next();!F.done;F=L.next())S.push_back(F.value);L=t.h.PacketListener.implement({onResults:function(U){for(var z={},Q=0;Q<c.wants.length;++Q)z[b[Q]]=U.get(Q);var D=t.listeners[a];D&&(t.D=I(t,z,c.outs).then(function(st){st=D(st);for(var ft=0;ft<c.wants.length;++ft){var mt=z[b[ft]];typeof mt=="object"&&mt.hasOwnProperty&&mt.hasOwnProperty("delete")&&mt.delete()}st&&(t.D=st)}))}}),t.i.attachMultiListener(S,L),S.delete()}i.onResults=function(t,c){this.listeners[c||"$"]=t},Ct("Solution",xt),Ct("OptionType",{BOOL:0,NUMBER:1,ca:2,0:"BOOL",1:"NUMBER",2:"STRING"});function o(t){var c=me(t,1),a=de(t,h,3);return a={x:it(a,1),y:it(a,2),depth:it(a,3)},t=de(t,G,2),{id:c,point2d:a,point3d:{x:it(t,1),y:it(t,2),z:it(t,3)}}}function d(t){var c=Sn(t,s,X);t=[],c=ue(c,M,2);for(var a=0;a<c.length;a++)t.push({id:me(c[a],1),keypoints:ue(c[a],K,2).map(o),visibility:it(c[a],3),scale:tt(c[a],6),translation:tt(c[a],5),rotation:tt(c[a],4)});return t}function g(t){switch(t){case"Camera":return"object_detection_3d_camera.tflite";case"Chair":return"object_detection_3d_chair.tflite";case"Cup":return"object_detection_3d_cup.tflite";default:return"object_detection_3d_sneakers.tflite"}}function e(t){switch(t){case"Camera":return"Camera";case"Chair":return"Chair";case"Cup":return"Coffee cup, Mug";default:return"Footwear"}}var u={focalX:{type:1,graphOptionXref:{calculatorType:"Lift2DFrameAnnotationTo3DCalculator",fieldName:"normalized_focal_x"}},focalY:{type:1,graphOptionXref:{calculatorType:"Lift2DFrameAnnotationTo3DCalculator",fieldName:"normalized_focal_y"}},principalX:{type:1,graphOptionXref:{calculatorType:"Lift2DFrameAnnotationTo3DCalculator",fieldName:"normalized_principal_point_x"}},principalY:{type:1,graphOptionXref:{calculatorType:"Lift2DFrameAnnotationTo3DCalculator",fieldName:"normalized_principal_point_y"}},allowedLabels:{type:2,graphOptionXref:{calculatorName:"ConstantSidePacketCalculatorAllowedLabels",calculatorType:"ConstantSidePacketCalculator",fieldName:"string_value"}}};function m(t){var c=this;t=t||{},this.g=new xt({locateFile:t.locateFile,files:[{url:"objectron_solution_packed_assets_loader.js"},{simd:!1,url:"objectron_solution_wasm_bin.js"},{simd:!0,url:"objectron_solution_simd_wasm_bin.js"}],graph:{url:"objectron.binarypb"},inputs:{image:{type:"video",stream:"input_frames_gpu"}},listeners:[{wants:["lifted_objects","image_transformed"],outs:{image:"image_transformed",objectDetections:{type:"proto",stream:"lifted_objects",transform:d}}}],options:{useCpuInference:{type:0,graphOptionXref:{calculatorType:"InferenceCalculator",fieldName:"use_cpu_inference"},default:typeof window!="object"||window.navigator===void 0?!1:"iPad Simulator;iPhone Simulator;iPod Simulator;iPad;iPhone;iPod".split(";").includes(navigator.platform)||navigator.userAgent.includes("Mac")&&"ontouchend"in document},selfieMode:{type:0,default:!1,graphOptionXref:{calculatorType:"GlScalerCalculator",calculatorIndex:1,fieldName:"flip_horizontal"}},maxNumObjects:{type:1,default:5,graphOptionXref:{calculatorType:"ConstantSidePacketCalculator",calculatorName:"ConstantSidePacketCalculatorMaxNumObjects",fieldName:"int_value"}},staticImageMode:{type:0,default:!0,graphOptionXref:{calculatorType:"ConstantSidePacketCalculator",calculatorName:"objectrongpusubgraph__ConstantSidePacketCalculator",fieldName:"bool_value"}},minDetectionConfidence:{type:1,default:.5,graphOptionXref:{calculatorType:"TensorsToDetectionsCalculator",calculatorName:"objectrongpusubgraph__objectdetectionoidv4subgraph__TensorsToDetectionsCalculator",fieldName:"min_score_thresh"}},minTrackingConfidence:{type:1,default:.99,graphOptionXref:{calculatorType:"ThresholdingCalculator",calculatorName:"objectrongpusubgraph__boxlandmarksubgraph__ThresholdingCalculator",fieldName:"threshold"}},modelName:{default:"Shoe",onChange:function(a){var b,S,L,F;return Zt(function(U){return U.g==1?(b=a,c.g.setOptions({allowedLabels:e(b)},u),S=g(b),L="object_detection_3d.tflite",O(U,v(c.g,S),2)):(F=U.h,c.g.overrideFile(L,F),U.return(!0))})}},focalLength:{default:[1,1],onChange:function(a){var b;return Zt(function(S){return b=a,c.h=b,c.g.setOptions({focalX:b[0],focalY:b[1]},u),S.return(!0)})}},principalPoint:{default:[0,0],onChange:function(a){var b;return Zt(function(S){return b=a,c.i=b,c.g.setOptions({principalX:b[0],principalY:b[1]},u),S.return(!0)})}},imageSize:{onChange:function(a){var b,S,L,F;return Zt(function(U){if(c.h===void 0||c.i===void 0)return console.error('"focalLength" and "principalPoint" must be set if setting image size'),U.return();b=a,S=[b[0]/2,b[1]/2],L=[c.h[0]/S[0],c.h[1]/S[1]],F=[c.i[0]/S[0],c.i[1]/S[1]],c.setOptions({focalLength:L,principalPoint:F}),U.g=0})}}}})}i=m.prototype,i.close=function(){return this.g.close(),Promise.resolve()},i.onResults=function(t){this.g.onResults(t)},i.initialize=function(){var t=this;return Zt(function(c){return O(c,t.g.initialize(),0)})},i.reset=function(){this.g.reset()},i.send=function(t){var c=this;return Zt(function(a){return O(a,c.g.send(t),0)})},i.setOptions=function(t){this.g.setOptions(t)},Ct("Objectron",m),Ct("BOX_CONNECTIONS",[[1,2],[2,4],[4,3],[3,1],[5,6],[6,8],[8,7],[7,5],[1,5],[2,6],[3,7],[4,8]]),Ct("BOX_KEYPOINTS",{CENTER:0,BACK_BOTTOM_LEFT:1,FRONT_BOTTOM_LEFT:2,BACK_TOP_LEFT:3,FRONT_TOP_LEFT:4,BACK_BOTTOM_RIGHT:5,FRONT_BOTTOM_RIGHT:6,BACK_TOP_RIGHT:7,FRONT_TOP_RIGHT:8}),Ct("VERSION","0.4.1636596145")}).call(Ii);const xi={};(function(){var i;function n(s){var X=0;return function(){return X<s.length?{done:!1,value:s[X++]}:{done:!0}}}var r=typeof Object.defineProperties=="function"?Object.defineProperty:function(s,X,R){return s==Array.prototype||s==Object.prototype||(s[X]=R.value),s};function f(s){s=[typeof globalThis=="object"&&globalThis,s,typeof window=="object"&&window,typeof self=="object"&&self,typeof global=="object"&&global];for(var X=0;X<s.length;++X){var R=s[X];if(R&&R.Math==Math)return R}throw Error("Cannot find global object")}var Z=f(this);function x(s,X){if(X)t:{var R=Z;s=s.split(".");for(var w=0;w<s.length-1;w++){var k=s[w];if(!(k in R))break t;R=R[k]}s=s[s.length-1],w=R[s],X=X(w),X!=w&&X!=null&&r(R,s,{configurable:!0,writable:!0,value:X})}}x("Symbol",function(s){function X(A){if(this instanceof X)throw new TypeError("Symbol is not a constructor");return new R(w+(A||"")+"_"+k++,A)}function R(A,B){this.g=A,r(this,"description",{configurable:!0,writable:!0,value:B})}if(s)return s;R.prototype.toString=function(){return this.g};var w="jscomp_symbol_"+(1e9*Math.random()>>>0)+"_",k=0;return X}),x("Symbol.iterator",function(s){if(s)return s;s=Symbol("Symbol.iterator");for(var X="Array Int8Array Uint8Array Uint8ClampedArray Int16Array Uint16Array Int32Array Uint32Array Float32Array Float64Array".split(" "),R=0;R<X.length;R++){var w=Z[X[R]];typeof w=="function"&&typeof w.prototype[s]!="function"&&r(w.prototype,s,{configurable:!0,writable:!0,value:function(){return H(n(this))}})}return s});function H(s){return s={next:s},s[Symbol.iterator]=function(){return this},s}function T(s){var X=typeof Symbol<"u"&&Symbol.iterator&&s[Symbol.iterator];return X?X.call(s):{next:n(s)}}function J(s){if(!(s instanceof Array)){s=T(s);for(var X,R=[];!(X=s.next()).done;)R.push(X.value);s=R}return s}var et=typeof Object.create=="function"?Object.create:function(s){function X(){}return X.prototype=s,new X},lt;if(typeof Object.setPrototypeOf=="function")lt=Object.setPrototypeOf;else{var pt;t:{var Yt={a:!0},Lt={};try{Lt.__proto__=Yt,pt=Lt.a;break t}catch{}pt=!1}lt=pt?function(s,X){if(s.__proto__=X,s.__proto__!==X)throw new TypeError(s+" is not extensible");return s}:null}var at=lt;function dt(s,X){if(s.prototype=et(X.prototype),s.prototype.constructor=s,at)at(s,X);else for(var R in X)if(R!="prototype")if(Object.defineProperties){var w=Object.getOwnPropertyDescriptor(X,R);w&&Object.defineProperty(s,R,w)}else s[R]=X[R];s.ea=X.prototype}function Bt(){this.l=!1,this.i=null,this.h=void 0,this.g=1,this.s=this.m=0,this.j=null}function Nt(s){if(s.l)throw new TypeError("Generator is already running");s.l=!0}Bt.prototype.o=function(s){this.h=s};function ee(s,X){s.j={U:X,V:!0},s.g=s.m||s.s}Bt.prototype.return=function(s){this.j={return:s},this.g=this.s};function O(s,X,R){return s.g=R,{value:X}}function $e(s){this.g=new Bt,this.h=s}function je(s,X){Nt(s.g);var R=s.g.i;return R?We(s,"return"in R?R.return:function(w){return{value:w,done:!0}},X,s.g.return):(s.g.return(X),zt(s))}function We(s,X,R,w){try{var k=X.call(s.g.i,R);if(!(k instanceof Object))throw new TypeError("Iterator result "+k+" is not an object");if(!k.done)return s.g.l=!1,k;var A=k.value}catch(B){return s.g.i=null,ee(s.g,B),zt(s)}return s.g.i=null,w.call(s.g,A),zt(s)}function zt(s){for(;s.g.g;)try{var X=s.h(s.g);if(X)return s.g.l=!1,{value:X.value,done:!1}}catch(R){s.g.h=void 0,ee(s.g,R)}if(s.g.l=!1,s.g.j){if(X=s.g.j,s.g.j=null,X.V)throw X.U;return{value:X.return,done:!0}}return{value:void 0,done:!0}}function Jn(s){this.next=function(X){return Nt(s.g),s.g.i?X=We(s,s.g.i.next,X,s.g.o):(s.g.o(X),X=zt(s)),X},this.throw=function(X){return Nt(s.g),s.g.i?X=We(s,s.g.i.throw,X,s.g.o):(ee(s.g,X),X=zt(s)),X},this.return=function(X){return je(s,X)},this[Symbol.iterator]=function(){return this}}function ne(s){function X(w){return s.next(w)}function R(w){return s.throw(w)}return new Promise(function(w,k){function A(B){B.done?w(B.value):Promise.resolve(B.value).then(X,R).then(A,k)}A(s.next())})}function Zt(s){return ne(new Jn(new $e(s)))}x("Promise",function(s){function X(B){this.h=0,this.i=void 0,this.g=[],this.o=!1;var nt=this.j();try{B(nt.resolve,nt.reject)}catch($){nt.reject($)}}function R(){this.g=null}function w(B){return B instanceof X?B:new X(function(nt){nt(B)})}if(s)return s;R.prototype.h=function(B){if(this.g==null){this.g=[];var nt=this;this.i(function(){nt.l()})}this.g.push(B)};var k=Z.setTimeout;R.prototype.i=function(B){k(B,0)},R.prototype.l=function(){for(;this.g&&this.g.length;){var B=this.g;this.g=[];for(var nt=0;nt<B.length;++nt){var $=B[nt];B[nt]=null;try{$()}catch(yt){this.j(yt)}}}this.g=null},R.prototype.j=function(B){this.i(function(){throw B})},X.prototype.j=function(){function B(yt){return function(Xt){$||($=!0,yt.call(nt,Xt))}}var nt=this,$=!1;return{resolve:B(this.C),reject:B(this.l)}},X.prototype.C=function(B){if(B===this)this.l(new TypeError("A Promise cannot resolve to itself"));else if(B instanceof X)this.F(B);else{t:switch(typeof B){case"object":var nt=B!=null;break t;case"function":nt=!0;break t;default:nt=!1}nt?this.v(B):this.m(B)}},X.prototype.v=function(B){var nt=void 0;try{nt=B.then}catch($){this.l($);return}typeof nt=="function"?this.G(nt,B):this.m(B)},X.prototype.l=function(B){this.s(2,B)},X.prototype.m=function(B){this.s(1,B)},X.prototype.s=function(B,nt){if(this.h!=0)throw Error("Cannot settle("+B+", "+nt+"): Promise already settled in state"+this.h);this.h=B,this.i=nt,this.h===2&&this.D(),this.A()},X.prototype.D=function(){var B=this;k(function(){if(B.B()){var nt=Z.console;typeof nt<"u"&&nt.error(B.i)}},1)},X.prototype.B=function(){if(this.o)return!1;var B=Z.CustomEvent,nt=Z.Event,$=Z.dispatchEvent;return typeof $>"u"?!0:(typeof B=="function"?B=new B("unhandledrejection",{cancelable:!0}):typeof nt=="function"?B=new nt("unhandledrejection",{cancelable:!0}):(B=Z.document.createEvent("CustomEvent"),B.initCustomEvent("unhandledrejection",!1,!0,B)),B.promise=this,B.reason=this.i,$(B))},X.prototype.A=function(){if(this.g!=null){for(var B=0;B<this.g.length;++B)A.h(this.g[B]);this.g=null}};var A=new R;return X.prototype.F=function(B){var nt=this.j();B.J(nt.resolve,nt.reject)},X.prototype.G=function(B,nt){var $=this.j();try{B.call(nt,$.resolve,$.reject)}catch(yt){$.reject(yt)}},X.prototype.then=function(B,nt){function $(It,ht){return typeof It=="function"?function(Wt){try{yt(It(Wt))}catch(xt){Xt(xt)}}:ht}var yt,Xt,Kt=new X(function(It,ht){yt=It,Xt=ht});return this.J($(B,yt),$(nt,Xt)),Kt},X.prototype.catch=function(B){return this.then(void 0,B)},X.prototype.J=function(B,nt){function $(){switch(yt.h){case 1:B(yt.i);break;case 2:nt(yt.i);break;default:throw Error("Unexpected state: "+yt.h)}}var yt=this;this.g==null?A.h($):this.g.push($),this.o=!0},X.resolve=w,X.reject=function(B){return new X(function(nt,$){$(B)})},X.race=function(B){return new X(function(nt,$){for(var yt=T(B),Xt=yt.next();!Xt.done;Xt=yt.next())w(Xt.value).J(nt,$)})},X.all=function(B){var nt=T(B),$=nt.next();return $.done?w([]):new X(function(yt,Xt){function Kt(Wt){return function(xt){It[Wt]=xt,ht--,ht==0&&yt(It)}}var It=[],ht=0;do It.push(void 0),ht++,w($.value).J(Kt(It.length-1),Xt),$=nt.next();while(!$.done)})},X});function qe(s,X){s instanceof String&&(s+="");var R=0,w=!1,k={next:function(){if(!w&&R<s.length){var A=R++;return{value:X(A,s[A]),done:!1}}return w=!0,{done:!0,value:void 0}}};return k[Symbol.iterator]=function(){return k},k}var zn=typeof Object.assign=="function"?Object.assign:function(s,X){for(var R=1;R<arguments.length;R++){var w=arguments[R];if(w)for(var k in w)Object.prototype.hasOwnProperty.call(w,k)&&(s[k]=w[k])}return s};x("Object.assign",function(s){return s||zn}),x("Object.is",function(s){return s||function(X,R){return X===R?X!==0||1/X===1/R:X!==X&&R!==R}}),x("Array.prototype.includes",function(s){return s||function(X,R){var w=this;w instanceof String&&(w=String(w));var k=w.length;for(R=R||0,0>R&&(R=Math.max(R+k,0));R<k;R++){var A=w[R];if(A===X||Object.is(A,X))return!0}return!1}}),x("String.prototype.includes",function(s){return s||function(X,R){if(this==null)throw new TypeError("The 'this' value for String.prototype.includes must not be null or undefined");if(X instanceof RegExp)throw new TypeError("First argument to String.prototype.includes must not be a regular expression");return this.indexOf(X,R||0)!==-1}}),x("Array.prototype.keys",function(s){return s||function(){return qe(this,function(X){return X})}});var Re=this||self;function Ct(s,X){s=s.split(".");var R=Re;s[0]in R||typeof R.execScript>"u"||R.execScript("var "+s[0]);for(var w;s.length&&(w=s.shift());)s.length||X===void 0?R[w]&&R[w]!==Object.prototype[w]?R=R[w]:R=R[w]={}:R[w]=X}function Te(s){Re.setTimeout(function(){throw s},0)}function ln(s){Te(s)}function Xn(s,X){ln(Error("Invalid wire type: "+s+" (at position "+X+")"))}function Hn(){ln(Error("Failed to read varint, encoding is invalid."))}function In(s,X){return X=String.fromCharCode.apply(null,X),s==null?X:s+X}var kn,hn=typeof TextDecoder<"u",bn,En=typeof TextEncoder<"u";function Fn(s){if(En)s=(bn||(bn=new TextEncoder)).encode(s);else{var X=void 0;X=X===void 0?!1:X;for(var R=0,w=new Uint8Array(3*s.length),k=0;k<s.length;k++){var A=s.charCodeAt(k);if(128>A)w[R++]=A;else{if(2048>A)w[R++]=A>>6|192;else{if(55296<=A&&57343>=A){if(56319>=A&&k<s.length){var B=s.charCodeAt(++k);if(56320<=B&&57343>=B){A=1024*(A-55296)+B-56320+65536,w[R++]=A>>18|240,w[R++]=A>>12&63|128,w[R++]=A>>6&63|128,w[R++]=A&63|128;continue}else k--}if(X)throw Error("Found an unpaired surrogate");A=65533}w[R++]=A>>12|224,w[R++]=A>>6&63|128}w[R++]=A&63|128}}s=w.subarray(0,R)}return s}var Pe={},Ae=null;function xn(s){var X;X===void 0&&(X=0),Se(),X=Pe[X];for(var R=Array(Math.floor(s.length/3)),w=X[64]||"",k=0,A=0;k<s.length-2;k+=3){var B=s[k],nt=s[k+1],$=s[k+2],yt=X[B>>2];B=X[(B&3)<<4|nt>>4],nt=X[(nt&15)<<2|$>>6],$=X[$&63],R[A++]=yt+B+nt+$}switch(yt=0,$=w,s.length-k){case 2:yt=s[k+1],$=X[(yt&15)<<2]||w;case 1:s=s[k],R[A]=X[s>>2]+X[(s&3)<<4|yt>>4]+$+w}return R.join("")}function Wn(s){var X=s.length,R=3*X/4;R%3?R=Math.floor(R):"=.".indexOf(s[X-1])!=-1&&(R="=.".indexOf(s[X-2])!=-1?R-2:R-1);var w=new Uint8Array(R),k=0;return he(s,function(A){w[k++]=A}),w.subarray(0,k)}function he(s,X){function R($){for(;w<s.length;){var yt=s.charAt(w++),Xt=Ae[yt];if(Xt!=null)return Xt;if(!/^[\s\xa0]*$/.test(yt))throw Error("Unknown base64 encoding at char: "+yt)}return $}Se();for(var w=0;;){var k=R(-1),A=R(0),B=R(64),nt=R(64);if(nt===64&&k===-1)break;X(k<<2|A>>4),B!=64&&(X(A<<4&240|B>>2),nt!=64&&X(B<<6&192|nt))}}function Se(){if(!Ae){Ae={};for(var s="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789".split(""),X=["+/=","+/","-_=","-_.","-_"],R=0;5>R;R++){var w=s.concat(X[R].split(""));Pe[R]=w;for(var k=0;k<w.length;k++){var A=w[k];Ae[A]===void 0&&(Ae[A]=k)}}}}var Oe=typeof Uint8Array=="function",re;function Ve(s){if(this.g=s,s!==null&&s.length===0)throw Error("ByteString should be constructed with non-empty values")}Ve.prototype.toJSON=function(){if(this.g==null)var s="";else s=this.g,s=this.g=s==null||typeof s=="string"?s:Oe&&s instanceof Uint8Array?xn(s):null;return s};var cn=typeof Uint8Array.prototype.slice=="function";function Be(s,X,R){return X===R?re||(re=new Uint8Array(0)):cn?s.slice(X,R):new Uint8Array(s.subarray(X,R))}var Qt=0,Ze=0;function Fe(s){if(s.constructor===Uint8Array)return s;if(s.constructor===ArrayBuffer)return new Uint8Array(s);if(s.constructor===Array)return new Uint8Array(s);if(s.constructor===String)return Wn(s);if(s.constructor===Ve){if(s.g==null)var X=re||(re=new Uint8Array(0));else{X=Uint8Array;var R=s.g;R=R==null||Oe&&R!=null&&R instanceof Uint8Array?R:typeof R=="string"?Wn(R):null,s=s.g=R,X=new X(s)}return X}if(s instanceof Uint8Array)return new Uint8Array(s.buffer,s.byteOffset,s.byteLength);throw Error("Type not convertible to a Uint8Array, expected a Uint8Array, an ArrayBuffer, a base64 encoded string, or Array of numbers")}function Mt(s,X){X=X===void 0?{}:X,X=X.u===void 0?!1:X.u,this.h=null,this.g=this.i=this.l=0,this.j=!1,this.u=X,s&&Ie(this,s)}function Ie(s,X){s.h=Fe(X),s.l=0,s.i=s.h.length,s.g=s.l}Mt.prototype.reset=function(){this.g=this.l};function jt(s){s.g>s.i&&(s.j=!0,ln(Error("Tried to read past the end of the data "+s.g+" > "+s.i)))}function ye(s){var X=s.h,R=X[s.g],w=R&127;return 128>R?(s.g+=1,jt(s),w):(R=X[s.g+1],w|=(R&127)<<7,128>R?(s.g+=2,jt(s),w):(R=X[s.g+2],w|=(R&127)<<14,128>R?(s.g+=3,jt(s),w):(R=X[s.g+3],w|=(R&127)<<21,128>R?(s.g+=4,jt(s),w):(R=X[s.g+4],w|=(R&15)<<28,128>R?(s.g+=5,jt(s),w>>>0):(s.g+=5,128<=X[s.g++]&&128<=X[s.g++]&&128<=X[s.g++]&&128<=X[s.g++]&&128<=X[s.g++]?(s.j=!0,Hn(),w):(jt(s),w))))))}var Ye=[];function tn(){this.g=new Uint8Array(64),this.h=0}function Xe(s,X){if(!(s.h+1<s.g.length)){var R=s.g;s.g=new Uint8Array(Math.ceil(1+2*s.g.length)),s.g.set(R)}s.g[s.h++]=X}tn.prototype.length=function(){return this.h},tn.prototype.end=function(){var s=this.g,X=this.h;return this.h=0,Be(s,0,X)};function Pt(s,X){for(;127<X;)Xe(s,X&127|128),X>>>=7;Xe(s,X)}function ze(s){var X={},R=X.N===void 0?!1:X.N;this.m={u:X.u===void 0?!1:X.u},this.N=R,X=this.m,Ye.length?(R=Ye.pop(),X&&(R.u=X.u),s&&Ie(R,s),s=R):s=new Mt(s,X),this.g=s,this.l=this.g.g,this.h=this.i=-1,this.j=!1}ze.prototype.reset=function(){this.g.reset(),this.h=this.i=-1};function _e(s){var X=s.g;if((X=X.g==X.i)||(X=s.j)||(X=s.g,X=X.j||0>X.g||X.g>X.i),X)return!1;s.l=s.g.g;var R=ye(s.g);return X=R>>>3,R&=7,0<=R&&5>=R?(s.i=X,s.h=R,!0):(s.j=!0,Xn(R,s.l),!1)}function xe(s){switch(s.h){case 0:if(s.h!=0)xe(s);else t:{s=s.g;for(var X=s.g,R=0;10>R;R++){if((s.h[X]&128)===0){s.g=X+1,jt(s);break t}X++}s.j=!0,Hn()}break;case 1:s=s.g,s.g+=8,jt(s);break;case 2:s.h!=2?xe(s):(X=ye(s.g),s=s.g,s.g+=X,jt(s));break;case 5:s=s.g,s.g+=4,jt(s);break;case 3:X=s.i;do{if(!_e(s)){s.j=!0,ln(Error("Unmatched start-group tag: stream EOF"));break}if(s.h==4){s.i!=X&&(s.j=!0,ln(Error("Unmatched end-group tag")));break}xe(s)}while(1);break;default:s.j=!0,Xn(s.h,s.l)}}function Vn(s,X,R){s.N||(s=Be(s.g.h,R,s.g.g),(R=X.m)?R.push(s):X.m=[s])}var un=[];function Qe(){this.h=[],this.i=0,this.g=new tn}function an(s,X){X.length!==0&&(s.h.push(X),s.i+=X.length)}function ve(s,X,R){Pt(s.g,8*X+2),Pt(s.g,R.length),an(s,s.g.end()),an(s,R)}var we=typeof Symbol=="function"&&typeof Symbol()=="symbol"?Symbol(void 0):void 0;function Ge(s,X){Object.isFrozen(s)||(we?s[we]|=X:s.g!==void 0?s.g|=X:Object.defineProperties(s,{g:{value:X,configurable:!0,writable:!0,enumerable:!1}}))}function ie(s){if(!s)return 0;var X;return we?X=s[we]:X=s.g,X==null?0:X}function De(s){return Array.isArray(s)&&Ge(s,1),s}function qt(s){if(!Array.isArray(s))throw Error("cannot mark non-array as immutable");Ge(s,2)}function Ot(s){return s!==null&&typeof s=="object"&&s.constructor===Object}function fn(s){switch(typeof s){case"number":return isFinite(s)?s:String(s);case"object":return Oe&&s!=null&&s instanceof Uint8Array?xn(s):s;default:return s}}function fe(s,X){if(s!=null)return Array.isArray(s)||Ot(s)?Ft(s,X):X(s)}function Ft(s,X){if(Array.isArray(s)){for(var R=Array(s.length),w=0;w<s.length;w++)R[w]=fe(s[w],X);return ie(s)&1&&De(R),R}R={};for(w in s)R[w]=fe(s[w],X);return R}var Vt;function oe(s,X,R){var w=Vt;Vt=null,s||(s=w),w=this.constructor.ca,s||(s=w?[w]:[]),this.j=(w?0:-1)-(this.constructor.aa||0),this.i=null,this.g=s;t:{if(w=this.g.length,s=w-1,w&&(w=this.g[s],Ot(w))){this.l=s-this.j,this.h=w;break t}X!==void 0&&-1<X?(this.l=Math.max(X,s+1-this.j),this.h=null):this.l=Number.MAX_VALUE}if(R)for(X=0;X<R.length;X++)s=R[X],s<this.l?(s+=this.j,(w=this.g[s])?De(w):this.g[s]=Le):(te(this),(w=this.h[s])?De(w):this.h[s]=Le)}var Le=Object.freeze(De([]));function te(s){var X=s.l+s.j;s.g[X]||(s.h=s.g[X]={})}function se(s,X,R){return X===-1?null:(R===void 0?0:R)||X>=s.l?s.h?s.h[X]:void 0:s.g[X+s.j]}function tt(s,X,R){R=R===void 0?!0:R;var w=w===void 0?!1:w,k=se(s,X,w);return k==null&&(k=Le),k===Le?(k=De([]),ut(s,X,k,w)):R&&Array.isArray(k)&&ie(k)&2&&(k=k.slice(),ut(s,X,k,w)),k}function it(s,X,R){return s=se(s,X),s=s==null?s:+s,s==null?R===void 0?0:R:s}function ut(s,X,R,w){(w===void 0?0:w)||X>=s.l?(te(s),s.h[X]=R):s.g[X+s.j]=R}function _t(s,X,R){s.i||(s.i={});var w=s.i[R];if(!w){var k=tt(s,R,!1);w=[];for(var A=Array.isArray(k)?!!(ie(k)&2):!1,B=0;B<k.length;B++)w[B]=new X(k[B]),A&&qt(w[B].g);A&&(qt(w),Object.freeze(w)),s.i[R]=w}return w}function de(s,X,R,w,k){var A=_t(s,w,X);R=R||new w,s=tt(s,X),k!=null?(A.splice(k,0,R),s.splice(k,0,ue(R))):(A.push(R),s.push(ue(R)))}oe.prototype.toJSON=function(){var s=ue(this);return Ft(s,fn)};function ue(s){if(s.i)for(var X in s.i){var R=s.i[X];if(Array.isArray(R))for(var w=0;w<R.length;w++)R[w]&&ue(R[w]);else R&&ue(R)}return s.g}oe.prototype.toString=function(){return ue(this).toString()};function St(s,X){return s=se(s,X),s==null?0:s}function me(s,X){return s=se(s,X),s==null?"":s}function Ce(s,X){if(s=s.m){an(X,X.g.end());for(var R=0;R<s.length;R++)an(X,s[R])}}function en(s){var X=s[0];switch(s.length){case 2:var R=s[1];return function($,yt,Xt){return X($,yt,Xt,R)};case 3:var w=s[1],k=s[2];return function($,yt,Xt){return X($,yt,Xt,w,k)};case 4:var A=s[1],B=s[2],nt=s[3];return function($,yt,Xt){return X($,yt,Xt,A,B,nt)};default:throw Error("unsupported number of parameters, expected [2-4], got "+s.length)}}function nn(s,X,R){for(;_e(X)&&X.h!=4;){var w=X.i,k=R[w];if(k){if(Array.isArray(k)&&(k=R[w]=en(k)),!k(X,s,w)){w=X,k=s;var A=w.l;xe(w),Vn(w,k,A)}}else w=X,k=s,A=w.l,xe(w),Vn(w,k,A)}return s}function mn(s,X){var R=new Qe;if(X(s,R),s=R.i+R.g.length(),s===0)R=new Uint8Array(0);else{s=new Uint8Array(s);for(var w=R.h,k=w.length,A=X=0;A<k;A++){var B=w[A];B.length!==0&&(s.set(B,X),X+=B.length)}w=R.g,k=w.h,k!==0&&(s.set(w.g.subarray(0,k),X),w.h=0),R.h=[s],R=s}return R}function yn(s,X,R){if(un.length){var w=un.pop();s&&(Ie(w.g,s),w.i=-1,w.h=-1),s=w}else s=new ze(s);try{return R(new X,s)}finally{X=s.g,X.h=null,X.l=0,X.i=0,X.g=0,X.j=!1,X.u=!1,s.i=-1,s.h=-1,s.j=!1,100>un.length&&un.push(s)}}function He(s,X,R){if(X=se(X,R),X!=null){Pt(s.g,8*R+5),s=s.g;var w=X;w=(R=0>w?1:0)?-w:w,w===0?0<1/w?Qt=Ze=0:(Ze=0,Qt=2147483648):isNaN(w)?(Ze=0,Qt=2147483647):34028234663852886e22<w?(Ze=0,Qt=(R<<31|2139095040)>>>0):11754943508222875e-54>w?(w=Math.round(w/Math.pow(2,-149)),Ze=0,Qt=(R<<31|w)>>>0):(X=Math.floor(Math.log(w)/Math.LN2),w*=Math.pow(2,-X),w=Math.round(8388608*w),16777216<=w&&++X,Ze=0,Qt=(R<<31|X+127<<23|w&8388607)>>>0),R=Qt,Xe(s,R>>>0&255),Xe(s,R>>>8&255),Xe(s,R>>>16&255),Xe(s,R>>>24&255)}}function rn(s,X,R){if(s.h!==5)return!1;s=s.g;var w=s.h[s.g],k=s.h[s.g+1],A=s.h[s.g+2],B=s.h[s.g+3];return s.g+=4,jt(s),k=(w<<0|k<<8|A<<16|B<<24)>>>0,s=2*(k>>31)+1,w=k>>>23&255,k&=8388607,ut(X,R,w==255?k?NaN:1/0*s:w==0?s*Math.pow(2,-149)*k:s*Math.pow(2,w-150)*(k+Math.pow(2,23))),!0}function jn(s,X,R){if(s.h!==0)return!1;for(var w=s.g,k=128,A=0,B=s=0;4>B&&128<=k;B++)k=w.h[w.g++],A|=(k&127)<<7*B;if(128<=k&&(k=w.h[w.g++],A|=(k&127)<<28,s|=(k&127)>>4),128<=k)for(B=0;5>B&&128<=k;B++)k=w.h[w.g++],s|=(k&127)<<7*B+3;return 128>k?(w=A>>>0,k=s>>>0,(s=k&2147483648)&&(w=~w+1>>>0,k=~k>>>0,w==0&&(k=k+1>>>0)),w=4294967296*k+(w>>>0),s=s?-w:w):(w.j=!0,Hn(),s=void 0),ut(X,R,s),!0}function on(s,X,R){return s.h!==0?!1:(ut(X,R,ye(s.g)),!0)}function Je(s,X,R){if(s.h!==2)return!1;var w=ye(s.g);s=s.g;var k=s.g;s.g+=w,jt(s),s=s.h;var A;if(hn)(A=kn)||(A=kn=new TextDecoder("utf-8",{fatal:!1})),A=A.decode(s.subarray(k,k+w));else{w=k+w;for(var B=[],nt=null,$,yt,Xt;k<w;)$=s[k++],128>$?B.push($):224>$?k>=w?B.push(65533):(yt=s[k++],194>$||(yt&192)!==128?(k--,B.push(65533)):B.push(($&31)<<6|yt&63)):240>$?k>=w-1?B.push(65533):(yt=s[k++],(yt&192)!==128||$===224&&160>yt||$===237&&160<=yt||((A=s[k++])&192)!==128?(k--,B.push(65533)):B.push(($&15)<<12|(yt&63)<<6|A&63)):244>=$?k>=w-2?B.push(65533):(yt=s[k++],(yt&192)!==128||($<<28)+(yt-144)>>30!==0||((A=s[k++])&192)!==128||((Xt=s[k++])&192)!==128?(k--,B.push(65533)):($=($&7)<<18|(yt&63)<<12|(A&63)<<6|Xt&63,$-=65536,B.push(($>>10&1023)+55296,($&1023)+56320))):B.push(65533),8192<=B.length&&(nt=In(nt,B),B.length=0);A=In(nt,B)}return ut(X,R,A),!0}function Zn(s,X,R,w,k){if(s.h!==2)return!1;var A=new w,B=s.g.i,nt=ye(s.g),$=s.g.g+nt;if(s.g.i=$,k(A,s),k=$-s.g.g,k!==0)throw Error("Message parsing ended unexpectedly. Expected to read "+(nt+" bytes, instead read "+(nt-k)+" bytes, either the data ended unexpectedly or the message misreported its own length"));return s.g.g=$,s.g.i=B,de(X,R,A,w,void 0),!0}function Sn(s){oe.call(this,s)}var Ke;dt(Sn,oe);function Un(s,X){var R=se(s,1);if(R!=null&&R!=null){Pt(X.g,8);var w=X.g;if(0<=R)Pt(w,R);else{for(var k=0;9>k;k++)Xe(w,R&127|128),R>>=7;Xe(w,1)}}He(X,s,2),w=se(s,3),w!=null&&ve(X,3,Fn(w)),w=se(s,4),w!=null&&ve(X,4,Fn(w)),Ce(s,X)}function sn(s,X){return nn(s,X,Ke||(Ke={1:on,2:rn,3:Je,4:Je}))}function vn(s){oe.call(this,s,-1,dn)}var Tn;dt(vn,oe),vn.prototype.addClassification=function(s,X){return de(this,1,s,Sn,X),this};function Mn(s,X){return nn(s,X,Tn||(Tn={1:[Zn,Sn,sn]}))}var dn=[1];function Yn(s){oe.call(this,s)}var _n;dt(Yn,oe);function Qn(s,X){He(X,s,1),He(X,s,2),He(X,s,3),He(X,s,4),He(X,s,5),Ce(s,X)}function wn(s,X){return nn(s,X,_n||(_n={1:rn,2:rn,3:rn,4:rn,5:rn}))}function Cn(s){oe.call(this,s,-1,V)}var p;dt(Cn,oe);function W(s,X){return nn(s,X,p||(p={1:[Zn,Yn,wn]}))}var V=[1];function E(s){oe.call(this,s)}var P;dt(E,oe);function ot(s,X){He(X,s,1),He(X,s,2),He(X,s,3),He(X,s,4),He(X,s,5);var R=se(s,6);if(R!=null&&R!=null){Pt(X.g,48);var w=X.g,k=R;R=0>k,k=Math.abs(k);var A=k>>>0;for(k=Math.floor((k-A)/4294967296),k>>>=0,R&&(k=~k>>>0,A=(~A>>>0)+1,4294967295<A&&(A=0,k++,4294967295<k&&(k=0))),Qt=A,Ze=k,R=Qt,A=Ze;0<A||127<R;)Xe(w,R&127|128),R=(R>>>7|A<<25)>>>0,A>>>=7;Xe(w,R)}Ce(s,X)}function j(s,X){return nn(s,X,P||(P={1:rn,2:rn,3:rn,4:rn,5:rn,6:jn}))}function rt(s,X,R){if(R=s.createShader(R===0?s.VERTEX_SHADER:s.FRAGMENT_SHADER),s.shaderSource(R,X),s.compileShader(R),!s.getShaderParameter(R,s.COMPILE_STATUS))throw Error(`Could not compile WebGL shader.
|
|
104
|
+
`+a.getProgramInfoLog(L));b=t.m=L,a.useProgram(b),S=a.getUniformLocation(b,"sampler0"),t.j={J:a.getAttribLocation(b,"aVertex"),I:a.getAttribLocation(b,"aTex"),ja:S},t.s=a.createBuffer(),a.bindBuffer(a.ARRAY_BUFFER,t.s),a.enableVertexAttribArray(t.j.J),a.vertexAttribPointer(t.j.J,2,a.FLOAT,!1,0,0),a.bufferData(a.ARRAY_BUFFER,new Float32Array([-1,-1,-1,1,1,1,1,-1]),a.STATIC_DRAW),a.bindBuffer(a.ARRAY_BUFFER,null),t.o=a.createBuffer(),a.bindBuffer(a.ARRAY_BUFFER,t.o),a.enableVertexAttribArray(t.j.I),a.vertexAttribPointer(t.j.I,2,a.FLOAT,!1,0,0),a.bufferData(a.ARRAY_BUFFER,new Float32Array([0,1,0,0,1,0,1,1]),a.STATIC_DRAW),a.bindBuffer(a.ARRAY_BUFFER,null),a.uniform1i(S,0)}b=t.j,a.useProgram(t.m),a.canvas.width=c.width,a.canvas.height=c.height,a.viewport(0,0,c.width,c.height),a.activeTexture(a.TEXTURE0),t.h.bindTexture2d(c.glName),a.enableVertexAttribArray(b.J),a.bindBuffer(a.ARRAY_BUFFER,t.s),a.vertexAttribPointer(b.J,2,a.FLOAT,!1,0,0),a.enableVertexAttribArray(b.I),a.bindBuffer(a.ARRAY_BUFFER,t.o),a.vertexAttribPointer(b.I,2,a.FLOAT,!1,0,0),a.bindFramebuffer(a.DRAW_FRAMEBUFFER?a.DRAW_FRAMEBUFFER:a.FRAMEBUFFER,null),a.clearColor(0,0,0,0),a.clear(a.COLOR_BUFFER_BIT),a.colorMask(!0,!0,!0,!0),a.drawArrays(a.TRIANGLE_FAN,0,4),a.disableVertexAttribArray(b.J),a.disableVertexAttribArray(b.I),a.bindBuffer(a.ARRAY_BUFFER,null),t.h.bindTexture2d(0)}function yt(t){this.g=t}var Xt=new Uint8Array([0,97,115,109,1,0,0,0,1,4,1,96,0,0,3,2,1,0,10,9,1,7,0,65,0,253,15,26,11]);function Kt(t,c){return c+t}function xt(t,c){window[t]=c}function ht(t){var c=document.createElement("script");return c.setAttribute("src",t),c.setAttribute("crossorigin","anonymous"),new Promise(function(a){c.addEventListener("load",function(){a()},!1),c.addEventListener("error",function(){a()},!1),document.body.appendChild(c)})}function Wt(){return Zt(function(t){switch(t.g){case 1:return t.m=2,P(t,WebAssembly.instantiate(Xt),4);case 4:t.g=3,t.m=0;break;case 2:return t.m=0,t.j=null,t.return(!1);case 3:return t.return(!0)}})}function It(t){if(this.g=t,this.listeners={},this.j={},this.G={},this.m={},this.s={},this.H=this.o=this.S=!0,this.D=Promise.resolve(),this.R="",this.C={},this.locateFile=t&&t.locateFile||Kt,typeof window=="object")var c=window.location.pathname.toString().substring(0,window.location.pathname.toString().lastIndexOf("/"))+"/";else if(typeof location<"u")c=location.pathname.toString().substring(0,location.pathname.toString().lastIndexOf("/"))+"/";else throw Error("solutions can only be loaded on a web page or in a web worker");if(this.T=c,t.options){c=T(Object.keys(t.options));for(var a=c.next();!a.done;a=c.next()){a=a.value;var b=t.options[a].default;b!==void 0&&(this.j[a]=typeof b=="function"?b():b)}}}i=It.prototype,i.close=function(){return this.i&&this.i.delete(),Promise.resolve()};function wt(t){var c,a,b,S,L,C,U,z,Q,D,st;return Zt(function(ft){switch(ft.g){case 1:return t.S?(c=t.g.files===void 0?[]:typeof t.g.files=="function"?t.g.files(t.j):t.g.files,P(ft,Wt(),2)):ft.return();case 2:if(a=ft.h,typeof window=="object")return xt("createMediapipeSolutionsWasm",{locateFile:t.locateFile}),xt("createMediapipeSolutionsPackedAssets",{locateFile:t.locateFile}),C=c.filter(function(mt){return mt.data!==void 0}),U=c.filter(function(mt){return mt.data===void 0}),z=Promise.all(C.map(function(mt){var Gt=v(t,mt.url);if(mt.path!==void 0){var vt=mt.path;Gt=Gt.then(function(At){return t.overrideFile(vt,At),Promise.resolve(At)})}return Gt})),Q=Promise.all(U.map(function(mt){return mt.simd===void 0||mt.simd&&a||!mt.simd&&!a?ht(t.locateFile(mt.url,t.T)):Promise.resolve()})).then(function(){var mt,Gt,vt;return Zt(function(At){if(At.g==1)return mt=window.createMediapipeSolutionsWasm,Gt=window.createMediapipeSolutionsPackedAssets,vt=t,P(At,mt(Gt),2);vt.h=At.h,At.g=0})}),D=function(){return Zt(function(mt){return t.g.graph&&t.g.graph.url?mt=P(mt,v(t,t.g.graph.url),0):(mt.g=0,mt=void 0),mt})}(),P(ft,Promise.all([Q,z,D]),7);if(typeof importScripts!="function")throw Error("solutions can only be loaded on a web page or in a web worker");return b=c.filter(function(mt){return mt.simd===void 0||mt.simd&&a||!mt.simd&&!a}).map(function(mt){return t.locateFile(mt.url,t.T)}),importScripts.apply(null,J(b)),S=t,P(ft,createMediapipeSolutionsWasm(Module),6);case 6:S.h=ft.h,t.l=new OffscreenCanvas(1,1),t.h.canvas=t.l,L=t.h.GL.createContext(t.l,{antialias:!1,alpha:!1,ga:typeof WebGL2RenderingContext<"u"?2:1}),t.h.GL.makeContextCurrent(L),ft.g=4;break;case 7:if(t.l=document.createElement("canvas"),st=t.l.getContext("webgl2",{}),!st&&(st=t.l.getContext("webgl",{}),!st))return alert("Failed to create WebGL canvas context when passing video frame."),ft.return();t.F=st,t.h.canvas=t.l,t.h.createContext(t.l,!0,!0,{});case 4:t.i=new t.h.SolutionWasm,t.S=!1,ft.g=0}})}function Ft(t){var c,a,b,S,L,C,U,z;return Zt(function(Q){if(Q.g==1){if(t.g.graph&&t.g.graph.url&&t.R===t.g.graph.url)return Q.return();if(t.o=!0,!t.g.graph||!t.g.graph.url){Q.g=2;return}return t.R=t.g.graph.url,P(Q,v(t,t.g.graph.url),3)}for(Q.g!=2&&(c=Q.h,t.i.loadGraph(c)),a=T(Object.keys(t.C)),b=a.next();!b.done;b=a.next())S=b.value,t.i.overrideFile(S,t.C[S]);if(t.C={},t.g.listeners)for(L=T(t.g.listeners),C=L.next();!C.done;C=L.next())U=C.value,k(t,U);z=t.j,t.j={},t.setOptions(z),Q.g=0})}i.reset=function(){var t=this;return Zt(function(c){t.i&&(t.i.reset(),t.m={},t.s={}),c.g=0})},i.setOptions=function(t,c){var a=this;if(c=c||this.g.options){for(var b=[],S=[],L={},C=T(Object.keys(t)),U=C.next();!U.done;L={L:L.L,M:L.M},U=C.next()){var z=U.value;z in this.j&&this.j[z]===t[z]||(this.j[z]=t[z],U=c[z],U!==void 0&&(U.onChange&&(L.L=U.onChange,L.M=t[z],b.push(function(Q){return function(){var D;return Zt(function(st){if(st.g==1)return P(st,Q.L(Q.M),2);D=st.h,D===!0&&(a.o=!0),st.g=0})}}(L))),U.graphOptionXref&&(z={valueNumber:U.type===1?t[z]:0,valueBoolean:U.type===0?t[z]:!1,valueString:U.type===2?t[z]:""},U=Object.assign(Object.assign(Object.assign({},{calculatorName:"",calculatorIndex:0}),U.graphOptionXref),z),S.push(U))))}(b.length!==0||S.length!==0)&&(this.o=!0,this.B=(this.B===void 0?[]:this.B).concat(S),this.A=(this.A===void 0?[]:this.A).concat(b))}};function l(t){var c,a,b,S,L,C,U;return Zt(function(z){switch(z.g){case 1:if(!t.o)return z.return();if(!t.A){z.g=2;break}c=T(t.A),a=c.next();case 3:if(a.done){z.g=5;break}return b=a.value,P(z,b(),4);case 4:a=c.next(),z.g=3;break;case 5:t.A=void 0;case 2:if(t.B){for(S=new t.h.GraphOptionChangeRequestList,L=T(t.B),C=L.next();!C.done;C=L.next())U=C.value,S.push_back(U);t.i.changeOptions(S),S.delete(),t.B=void 0}t.o=!1,z.g=0}})}i.initialize=function(){var t=this;return Zt(function(c){return c.g==1?P(c,wt(t),2):c.g!=3?P(c,Ft(t),3):P(c,l(t),0)})};function v(t,c){var a,b;return Zt(function(S){return c in t.G?S.return(t.G[c]):(a=t.locateFile(c,""),b=fetch(a).then(function(L){return L.arrayBuffer()}),t.G[c]=b,S.return(b))})}i.overrideFile=function(t,c){this.i?this.i.overrideFile(t,c):this.C[t]=c},i.clearOverriddenFiles=function(){this.C={},this.i&&this.i.clearOverriddenFiles()},i.send=function(t,c){var a=this,b,S,L,C,U,z,Q,D,st;return Zt(function(ft){switch(ft.g){case 1:return a.g.inputs?(b=1e3*(c==null?performance.now():c),P(ft,a.D,2)):ft.return();case 2:return P(ft,a.initialize(),3);case 3:for(S=new a.h.PacketDataList,L=T(Object.keys(t)),C=L.next();!C.done;C=L.next())if(U=C.value,z=a.g.inputs[U]){t:{var mt=t[U];switch(z.type){case"video":var Gt=a.m[z.stream];if(Gt||(Gt=new B(a.h,a.F),a.m[z.stream]=Gt),Gt.l===0&&(Gt.l=Gt.h.createTexture()),typeof HTMLVideoElement<"u"&&mt instanceof HTMLVideoElement)var vt=mt.videoWidth,At=mt.videoHeight;else typeof HTMLImageElement<"u"&&mt instanceof HTMLImageElement?(vt=mt.naturalWidth,At=mt.naturalHeight):(vt=mt.width,At=mt.height);At={glName:Gt.l,width:vt,height:At},vt=Gt.g,vt.canvas.width=At.width,vt.canvas.height=At.height,vt.activeTexture(vt.TEXTURE0),Gt.h.bindTexture2d(Gt.l),vt.texImage2D(vt.TEXTURE_2D,0,vt.RGBA,vt.RGBA,vt.UNSIGNED_BYTE,mt),Gt.h.bindTexture2d(0),Gt=At;break t;case"detections":for(Gt=a.m[z.stream],Gt||(Gt=new yt(a.h),a.m[z.stream]=Gt),Gt.data||(Gt.data=new Gt.g.DetectionListData),Gt.data.reset(mt.length),At=0;At<mt.length;++At){vt=mt[At];var le=Gt.data,ce=le.setBoundingBox,ke=At,Vn=vt.U,Ee=new Nt;if(ut(Ee,1,Vn.aa),ut(Ee,2,Vn.ba),ut(Ee,3,Vn.height),ut(Ee,4,Vn.width),ut(Ee,5,Vn.rotation),ut(Ee,6,Vn.Z),Vn=gn(Ee,Et),ce.call(le,ke,Vn),vt.P)for(le=0;le<vt.P.length;++le){Ee=vt.P[le];var Nn=!!Ee.visibility;ce=Gt.data,ke=ce.addNormalizedLandmark,Vn=At,Ee=Object.assign(Object.assign({},Ee),{visibility:Nn?Ee.visibility:0}),Nn=new rt,ut(Nn,1,Ee.x),ut(Nn,2,Ee.y),ut(Nn,3,Ee.z),Ee.visibility&&ut(Nn,4,Ee.visibility),Ee=gn(Nn,Rt),ke.call(ce,Vn,Ee)}if(vt.N)for(le=0;le<vt.N.length;++le)ce=Gt.data,ke=ce.addClassification,Vn=At,Ee=vt.N[le],Nn=new W,ut(Nn,2,Ee.$),Ee.index&&ut(Nn,1,Ee.index),Ee.label&&ut(Nn,3,Ee.label),Ee.displayName&&ut(Nn,4,Ee.displayName),Ee=gn(Nn,E),ke.call(ce,Vn,Ee)}Gt=Gt.data;break t;default:Gt={}}}switch(Q=Gt,D=z.stream,z.type){case"video":S.pushTexture2d(Object.assign(Object.assign({},Q),{stream:D,timestamp:b}));break;case"detections":st=Q,st.stream=D,st.timestamp=b,S.pushDetectionList(st);break;default:throw Error("Unknown input config type: '"+z.type+"'")}}return a.i.send(S),P(ft,a.D,4);case 4:S.delete(),ft.g=0}})};function x(t,c,a){var b,S,L,C,U,z,Q,D,st,ft,mt,Gt,vt,At;return Zt(function(le){switch(le.g){case 1:if(!a)return le.return(c);for(b={},S=0,L=T(Object.keys(a)),C=L.next();!C.done;C=L.next())U=C.value,z=a[U],typeof z!="string"&&z.type==="texture"&&c[z.stream]!==void 0&&++S;1<S&&(t.H=!1),Q=T(Object.keys(a)),C=Q.next();case 2:if(C.done){le.g=4;break}if(D=C.value,st=a[D],typeof st=="string")return vt=b,At=D,P(le,Y(t,D,c[st]),14);if(ft=c[st.stream],st.type==="detection_list"){if(ft){for(var ce=ft.getRectList(),ke=ft.getLandmarksList(),Vn=ft.getClassificationsList(),Ee=[],Nn=0;Nn<ce.size();++Nn){var yr=In(ce.get(Nn),Nt,Tt);yr={U:{aa:it(yr,1),ba:it(yr,2),height:it(yr,3),width:it(yr,4),rotation:it(yr,5,0),Z:me(yr,6)},P:ue(In(ke.get(Nn),Ut,Jt),rt,1).map(A),N:N(In(Vn.get(Nn),O,ot))},Ee.push(yr)}ce=Ee}else ce=[];b[D]=ce,le.g=7;break}if(st.type==="proto_list"){if(ft){for(ce=Array(ft.size()),ke=0;ke<ft.size();ke++)ce[ke]=ft.get(ke);ft.delete()}else ce=[];b[D]=ce,le.g=7;break}if(ft===void 0){le.g=3;break}if(st.type==="float_list"){b[D]=ft,le.g=7;break}if(st.type==="proto"){b[D]=ft,le.g=7;break}if(st.type!=="texture")throw Error("Unknown output config type: '"+st.type+"'");return mt=t.s[D],mt||(mt=new B(t.h,t.F),t.s[D]=mt),P(le,nt(mt,ft,t.H),13);case 13:Gt=le.h,b[D]=Gt;case 7:st.transform&&b[D]&&(b[D]=st.transform(b[D])),le.g=3;break;case 14:vt[At]=le.h;case 3:C=Q.next(),le.g=2;break;case 4:return le.return(b)}})}function Y(t,c,a){var b;return Zt(function(S){return typeof a=="number"||a instanceof Uint8Array||a instanceof t.h.Uint8BlobList?S.return(a):a instanceof t.h.Texture2dDataOut?(b=t.s[c],b||(b=new B(t.h,t.F),t.s[c]=b),S.return(nt(b,a,t.H))):S.return(void 0)})}function k(t,c){for(var a=c.name||"$",b=[].concat(J(c.wants)),S=new t.h.StringList,L=T(c.wants),C=L.next();!C.done;C=L.next())S.push_back(C.value);L=t.h.PacketListener.implement({onResults:function(U){for(var z={},Q=0;Q<c.wants.length;++Q)z[b[Q]]=U.get(Q);var D=t.listeners[a];D&&(t.D=x(t,z,c.outs).then(function(st){st=D(st);for(var ft=0;ft<c.wants.length;++ft){var mt=z[b[ft]];typeof mt=="object"&&mt.hasOwnProperty&&mt.hasOwnProperty("delete")&&mt.delete()}st&&(t.D=st)}))}}),t.i.attachMultiListener(S,L),S.delete()}i.onResults=function(t,c){this.listeners[c||"$"]=t},Ht("Solution",It),Ht("OptionType",{BOOL:0,NUMBER:1,ca:2,0:"BOOL",1:"NUMBER",2:"STRING"});function o(t){var c=me(t,1),a=de(t,h,3);return a={x:it(a,1),y:it(a,2),depth:it(a,3)},t=de(t,G,2),{id:c,point2d:a,point3d:{x:it(t,1),y:it(t,2),z:it(t,3)}}}function d(t){var c=In(t,s,X);t=[],c=ue(c,M,2);for(var a=0;a<c.length;a++)t.push({id:me(c[a],1),keypoints:ue(c[a],K,2).map(o),visibility:it(c[a],3),scale:tt(c[a],6),translation:tt(c[a],5),rotation:tt(c[a],4)});return t}function g(t){switch(t){case"Camera":return"object_detection_3d_camera.tflite";case"Chair":return"object_detection_3d_chair.tflite";case"Cup":return"object_detection_3d_cup.tflite";default:return"object_detection_3d_sneakers.tflite"}}function e(t){switch(t){case"Camera":return"Camera";case"Chair":return"Chair";case"Cup":return"Coffee cup, Mug";default:return"Footwear"}}var u={focalX:{type:1,graphOptionXref:{calculatorType:"Lift2DFrameAnnotationTo3DCalculator",fieldName:"normalized_focal_x"}},focalY:{type:1,graphOptionXref:{calculatorType:"Lift2DFrameAnnotationTo3DCalculator",fieldName:"normalized_focal_y"}},principalX:{type:1,graphOptionXref:{calculatorType:"Lift2DFrameAnnotationTo3DCalculator",fieldName:"normalized_principal_point_x"}},principalY:{type:1,graphOptionXref:{calculatorType:"Lift2DFrameAnnotationTo3DCalculator",fieldName:"normalized_principal_point_y"}},allowedLabels:{type:2,graphOptionXref:{calculatorName:"ConstantSidePacketCalculatorAllowedLabels",calculatorType:"ConstantSidePacketCalculator",fieldName:"string_value"}}};function m(t){var c=this;t=t||{},this.g=new It({locateFile:t.locateFile,files:[{url:"objectron_solution_packed_assets_loader.js"},{simd:!1,url:"objectron_solution_wasm_bin.js"},{simd:!0,url:"objectron_solution_simd_wasm_bin.js"}],graph:{url:"objectron.binarypb"},inputs:{image:{type:"video",stream:"input_frames_gpu"}},listeners:[{wants:["lifted_objects","image_transformed"],outs:{image:"image_transformed",objectDetections:{type:"proto",stream:"lifted_objects",transform:d}}}],options:{useCpuInference:{type:0,graphOptionXref:{calculatorType:"InferenceCalculator",fieldName:"use_cpu_inference"},default:typeof window!="object"||window.navigator===void 0?!1:"iPad Simulator;iPhone Simulator;iPod Simulator;iPad;iPhone;iPod".split(";").includes(navigator.platform)||navigator.userAgent.includes("Mac")&&"ontouchend"in document},selfieMode:{type:0,default:!1,graphOptionXref:{calculatorType:"GlScalerCalculator",calculatorIndex:1,fieldName:"flip_horizontal"}},maxNumObjects:{type:1,default:5,graphOptionXref:{calculatorType:"ConstantSidePacketCalculator",calculatorName:"ConstantSidePacketCalculatorMaxNumObjects",fieldName:"int_value"}},staticImageMode:{type:0,default:!0,graphOptionXref:{calculatorType:"ConstantSidePacketCalculator",calculatorName:"objectrongpusubgraph__ConstantSidePacketCalculator",fieldName:"bool_value"}},minDetectionConfidence:{type:1,default:.5,graphOptionXref:{calculatorType:"TensorsToDetectionsCalculator",calculatorName:"objectrongpusubgraph__objectdetectionoidv4subgraph__TensorsToDetectionsCalculator",fieldName:"min_score_thresh"}},minTrackingConfidence:{type:1,default:.99,graphOptionXref:{calculatorType:"ThresholdingCalculator",calculatorName:"objectrongpusubgraph__boxlandmarksubgraph__ThresholdingCalculator",fieldName:"threshold"}},modelName:{default:"Shoe",onChange:function(a){var b,S,L,C;return Zt(function(U){return U.g==1?(b=a,c.g.setOptions({allowedLabels:e(b)},u),S=g(b),L="object_detection_3d.tflite",P(U,v(c.g,S),2)):(C=U.h,c.g.overrideFile(L,C),U.return(!0))})}},focalLength:{default:[1,1],onChange:function(a){var b;return Zt(function(S){return b=a,c.h=b,c.g.setOptions({focalX:b[0],focalY:b[1]},u),S.return(!0)})}},principalPoint:{default:[0,0],onChange:function(a){var b;return Zt(function(S){return b=a,c.i=b,c.g.setOptions({principalX:b[0],principalY:b[1]},u),S.return(!0)})}},imageSize:{onChange:function(a){var b,S,L,C;return Zt(function(U){if(c.h===void 0||c.i===void 0)return console.error('"focalLength" and "principalPoint" must be set if setting image size'),U.return();b=a,S=[b[0]/2,b[1]/2],L=[c.h[0]/S[0],c.h[1]/S[1]],C=[c.i[0]/S[0],c.i[1]/S[1]],c.setOptions({focalLength:L,principalPoint:C}),U.g=0})}}}})}i=m.prototype,i.close=function(){return this.g.close(),Promise.resolve()},i.onResults=function(t){this.g.onResults(t)},i.initialize=function(){var t=this;return Zt(function(c){return P(c,t.g.initialize(),0)})},i.reset=function(){this.g.reset()},i.send=function(t){var c=this;return Zt(function(a){return P(a,c.g.send(t),0)})},i.setOptions=function(t){this.g.setOptions(t)},Ht("Objectron",m),Ht("BOX_CONNECTIONS",[[1,2],[2,4],[4,3],[3,1],[5,6],[6,8],[8,7],[7,5],[1,5],[2,6],[3,7],[4,8]]),Ht("BOX_KEYPOINTS",{CENTER:0,BACK_BOTTOM_LEFT:1,FRONT_BOTTOM_LEFT:2,BACK_TOP_LEFT:3,FRONT_TOP_LEFT:4,BACK_BOTTOM_RIGHT:5,FRONT_BOTTOM_RIGHT:6,BACK_TOP_RIGHT:7,FRONT_TOP_RIGHT:8}),Ht("VERSION","0.4.1636596145")}).call(Vi);const Ri={};(function(){var i;function n(s){var X=0;return function(){return X<s.length?{done:!1,value:s[X++]}:{done:!0}}}var r=typeof Object.defineProperties=="function"?Object.defineProperty:function(s,X,R){return s==Array.prototype||s==Object.prototype||(s[X]=R.value),s};function f(s){s=[typeof globalThis=="object"&&globalThis,s,typeof window=="object"&&window,typeof self=="object"&&self,typeof global=="object"&&global];for(var X=0;X<s.length;++X){var R=s[X];if(R&&R.Math==Math)return R}throw Error("Cannot find global object")}var Z=f(this);function I(s,X){if(X)t:{var R=Z;s=s.split(".");for(var w=0;w<s.length-1;w++){var N=s[w];if(!(N in R))break t;R=R[N]}s=s[s.length-1],w=R[s],X=X(w),X!=w&&X!=null&&r(R,s,{configurable:!0,writable:!0,value:X})}}I("Symbol",function(s){function X(A){if(this instanceof X)throw new TypeError("Symbol is not a constructor");return new R(w+(A||"")+"_"+N++,A)}function R(A,B){this.g=A,r(this,"description",{configurable:!0,writable:!0,value:B})}if(s)return s;R.prototype.toString=function(){return this.g};var w="jscomp_symbol_"+(1e9*Math.random()>>>0)+"_",N=0;return X}),I("Symbol.iterator",function(s){if(s)return s;s=Symbol("Symbol.iterator");for(var X="Array Int8Array Uint8Array Uint8ClampedArray Int16Array Uint16Array Int32Array Uint32Array Float32Array Float64Array".split(" "),R=0;R<X.length;R++){var w=Z[X[R]];typeof w=="function"&&typeof w.prototype[s]!="function"&&r(w.prototype,s,{configurable:!0,writable:!0,value:function(){return F(n(this))}})}return s});function F(s){return s={next:s},s[Symbol.iterator]=function(){return this},s}function T(s){var X=typeof Symbol<"u"&&Symbol.iterator&&s[Symbol.iterator];return X?X.call(s):{next:n(s)}}function J(s){if(!(s instanceof Array)){s=T(s);for(var X,R=[];!(X=s.next()).done;)R.push(X.value);s=R}return s}var et=typeof Object.create=="function"?Object.create:function(s){function X(){}return X.prototype=s,new X},lt;if(typeof Object.setPrototypeOf=="function")lt=Object.setPrototypeOf;else{var pt;t:{var Yt={a:!0},Lt={};try{Lt.__proto__=Yt,pt=Lt.a;break t}catch{}pt=!1}lt=pt?function(s,X){if(s.__proto__=X,s.__proto__!==X)throw new TypeError(s+" is not extensible");return s}:null}var at=lt;function dt(s,X){if(s.prototype=et(X.prototype),s.prototype.constructor=s,at)at(s,X);else for(var R in X)if(R!="prototype")if(Object.defineProperties){var w=Object.getOwnPropertyDescriptor(X,R);w&&Object.defineProperty(s,R,w)}else s[R]=X[R];s.ea=X.prototype}function Bt(){this.l=!1,this.i=null,this.h=void 0,this.g=1,this.s=this.m=0,this.j=null}function kt(s){if(s.l)throw new TypeError("Generator is already running");s.l=!0}Bt.prototype.o=function(s){this.h=s};function ee(s,X){s.j={U:X,V:!0},s.g=s.m||s.s}Bt.prototype.return=function(s){this.j={return:s},this.g=this.s};function P(s,X,R){return s.g=R,{value:X}}function De(s){this.g=new Bt,this.h=s}function ze(s,X){kt(s.g);var R=s.g.i;return R?We(s,"return"in R?R.return:function(w){return{value:w,done:!0}},X,s.g.return):(s.g.return(X),zt(s))}function We(s,X,R,w){try{var N=X.call(s.g.i,R);if(!(N instanceof Object))throw new TypeError("Iterator result "+N+" is not an object");if(!N.done)return s.g.l=!1,N;var A=N.value}catch(B){return s.g.i=null,ee(s.g,B),zt(s)}return s.g.i=null,w.call(s.g,A),zt(s)}function zt(s){for(;s.g.g;)try{var X=s.h(s.g);if(X)return s.g.l=!1,{value:X.value,done:!1}}catch(R){s.g.h=void 0,ee(s.g,R)}if(s.g.l=!1,s.g.j){if(X=s.g.j,s.g.j=null,X.V)throw X.U;return{value:X.return,done:!0}}return{value:void 0,done:!0}}function Hn(s){this.next=function(X){return kt(s.g),s.g.i?X=We(s,s.g.i.next,X,s.g.o):(s.g.o(X),X=zt(s)),X},this.throw=function(X){return kt(s.g),s.g.i?X=We(s,s.g.i.throw,X,s.g.o):(ee(s.g,X),X=zt(s)),X},this.return=function(X){return ze(s,X)},this[Symbol.iterator]=function(){return this}}function ne(s){function X(w){return s.next(w)}function R(w){return s.throw(w)}return new Promise(function(w,N){function A(B){B.done?w(B.value):Promise.resolve(B.value).then(X,R).then(A,N)}A(s.next())})}function Zt(s){return ne(new Hn(new De(s)))}I("Promise",function(s){function X(B){this.h=0,this.i=void 0,this.g=[],this.o=!1;var nt=this.j();try{B(nt.resolve,nt.reject)}catch($){nt.reject($)}}function R(){this.g=null}function w(B){return B instanceof X?B:new X(function(nt){nt(B)})}if(s)return s;R.prototype.h=function(B){if(this.g==null){this.g=[];var nt=this;this.i(function(){nt.l()})}this.g.push(B)};var N=Z.setTimeout;R.prototype.i=function(B){N(B,0)},R.prototype.l=function(){for(;this.g&&this.g.length;){var B=this.g;this.g=[];for(var nt=0;nt<B.length;++nt){var $=B[nt];B[nt]=null;try{$()}catch(yt){this.j(yt)}}}this.g=null},R.prototype.j=function(B){this.i(function(){throw B})},X.prototype.j=function(){function B(yt){return function(Xt){$||($=!0,yt.call(nt,Xt))}}var nt=this,$=!1;return{resolve:B(this.C),reject:B(this.l)}},X.prototype.C=function(B){if(B===this)this.l(new TypeError("A Promise cannot resolve to itself"));else if(B instanceof X)this.F(B);else{t:switch(typeof B){case"object":var nt=B!=null;break t;case"function":nt=!0;break t;default:nt=!1}nt?this.v(B):this.m(B)}},X.prototype.v=function(B){var nt=void 0;try{nt=B.then}catch($){this.l($);return}typeof nt=="function"?this.G(nt,B):this.m(B)},X.prototype.l=function(B){this.s(2,B)},X.prototype.m=function(B){this.s(1,B)},X.prototype.s=function(B,nt){if(this.h!=0)throw Error("Cannot settle("+B+", "+nt+"): Promise already settled in state"+this.h);this.h=B,this.i=nt,this.h===2&&this.D(),this.A()},X.prototype.D=function(){var B=this;N(function(){if(B.B()){var nt=Z.console;typeof nt<"u"&&nt.error(B.i)}},1)},X.prototype.B=function(){if(this.o)return!1;var B=Z.CustomEvent,nt=Z.Event,$=Z.dispatchEvent;return typeof $>"u"?!0:(typeof B=="function"?B=new B("unhandledrejection",{cancelable:!0}):typeof nt=="function"?B=new nt("unhandledrejection",{cancelable:!0}):(B=Z.document.createEvent("CustomEvent"),B.initCustomEvent("unhandledrejection",!1,!0,B)),B.promise=this,B.reason=this.i,$(B))},X.prototype.A=function(){if(this.g!=null){for(var B=0;B<this.g.length;++B)A.h(this.g[B]);this.g=null}};var A=new R;return X.prototype.F=function(B){var nt=this.j();B.J(nt.resolve,nt.reject)},X.prototype.G=function(B,nt){var $=this.j();try{B.call(nt,$.resolve,$.reject)}catch(yt){$.reject(yt)}},X.prototype.then=function(B,nt){function $(xt,ht){return typeof xt=="function"?function(Wt){try{yt(xt(Wt))}catch(It){Xt(It)}}:ht}var yt,Xt,Kt=new X(function(xt,ht){yt=xt,Xt=ht});return this.J($(B,yt),$(nt,Xt)),Kt},X.prototype.catch=function(B){return this.then(void 0,B)},X.prototype.J=function(B,nt){function $(){switch(yt.h){case 1:B(yt.i);break;case 2:nt(yt.i);break;default:throw Error("Unexpected state: "+yt.h)}}var yt=this;this.g==null?A.h($):this.g.push($),this.o=!0},X.resolve=w,X.reject=function(B){return new X(function(nt,$){$(B)})},X.race=function(B){return new X(function(nt,$){for(var yt=T(B),Xt=yt.next();!Xt.done;Xt=yt.next())w(Xt.value).J(nt,$)})},X.all=function(B){var nt=T(B),$=nt.next();return $.done?w([]):new X(function(yt,Xt){function Kt(Wt){return function(It){xt[Wt]=It,ht--,ht==0&&yt(xt)}}var xt=[],ht=0;do xt.push(void 0),ht++,w($.value).J(Kt(xt.length-1),Xt),$=nt.next();while(!$.done)})},X});function $e(s,X){s instanceof String&&(s+="");var R=0,w=!1,N={next:function(){if(!w&&R<s.length){var A=R++;return{value:X(A,s[A]),done:!1}}return w=!0,{done:!0,value:void 0}}};return N[Symbol.iterator]=function(){return N},N}var An=typeof Object.assign=="function"?Object.assign:function(s,X){for(var R=1;R<arguments.length;R++){var w=arguments[R];if(w)for(var N in w)Object.prototype.hasOwnProperty.call(w,N)&&(s[N]=w[N])}return s};I("Object.assign",function(s){return s||An}),I("Object.is",function(s){return s||function(X,R){return X===R?X!==0||1/X===1/R:X!==X&&R!==R}}),I("Array.prototype.includes",function(s){return s||function(X,R){var w=this;w instanceof String&&(w=String(w));var N=w.length;for(R=R||0,0>R&&(R=Math.max(R+N,0));R<N;R++){var A=w[R];if(A===X||Object.is(A,X))return!0}return!1}}),I("String.prototype.includes",function(s){return s||function(X,R){if(this==null)throw new TypeError("The 'this' value for String.prototype.includes must not be null or undefined");if(X instanceof RegExp)throw new TypeError("First argument to String.prototype.includes must not be a regular expression");return this.indexOf(X,R||0)!==-1}}),I("Array.prototype.keys",function(s){return s||function(){return $e(this,function(X){return X})}});var Re=this||self;function Ht(s,X){s=s.split(".");var R=Re;s[0]in R||typeof R.execScript>"u"||R.execScript("var "+s[0]);for(var w;s.length&&(w=s.shift());)s.length||X===void 0?R[w]&&R[w]!==Object.prototype[w]?R=R[w]:R=R[w]={}:R[w]=X}function Te(s){Re.setTimeout(function(){throw s},0)}function sn(s){Te(s)}function Gn(s,X){sn(Error("Invalid wire type: "+s+" (at position "+X+")"))}function Ln(){sn(Error("Failed to read varint, encoding is invalid."))}function Rn(s,X){return X=String.fromCharCode.apply(null,X),s==null?X:s+X}var Jn,dn=typeof TextDecoder<"u",pn,kn=typeof TextEncoder<"u";function Fn(s){if(kn)s=(pn||(pn=new TextEncoder)).encode(s);else{var X=void 0;X=X===void 0?!1:X;for(var R=0,w=new Uint8Array(3*s.length),N=0;N<s.length;N++){var A=s.charCodeAt(N);if(128>A)w[R++]=A;else{if(2048>A)w[R++]=A>>6|192;else{if(55296<=A&&57343>=A){if(56319>=A&&N<s.length){var B=s.charCodeAt(++N);if(56320<=B&&57343>=B){A=1024*(A-55296)+B-56320+65536,w[R++]=A>>18|240,w[R++]=A>>12&63|128,w[R++]=A>>6&63|128,w[R++]=A&63|128;continue}else N--}if(X)throw Error("Found an unpaired surrogate");A=65533}w[R++]=A>>12|224,w[R++]=A>>6&63|128}w[R++]=A&63|128}}s=w.subarray(0,R)}return s}var je={},Me=null;function xn(s){var X;X===void 0&&(X=0),Se(),X=je[X];for(var R=Array(Math.floor(s.length/3)),w=X[64]||"",N=0,A=0;N<s.length-2;N+=3){var B=s[N],nt=s[N+1],$=s[N+2],yt=X[B>>2];B=X[(B&3)<<4|nt>>4],nt=X[(nt&15)<<2|$>>6],$=X[$&63],R[A++]=yt+B+nt+$}switch(yt=0,$=w,s.length-N){case 2:yt=s[N+1],$=X[(yt&15)<<2]||w;case 1:s=s[N],R[A]=X[s>>2]+X[(s&3)<<4|yt>>4]+$+w}return R.join("")}function Xn(s){var X=s.length,R=3*X/4;R%3?R=Math.floor(R):"=.".indexOf(s[X-1])!=-1&&(R="=.".indexOf(s[X-2])!=-1?R-2:R-1);var w=new Uint8Array(R),N=0;return he(s,function(A){w[N++]=A}),w.subarray(0,N)}function he(s,X){function R($){for(;w<s.length;){var yt=s.charAt(w++),Xt=Me[yt];if(Xt!=null)return Xt;if(!/^[\s\xa0]*$/.test(yt))throw Error("Unknown base64 encoding at char: "+yt)}return $}Se();for(var w=0;;){var N=R(-1),A=R(0),B=R(64),nt=R(64);if(nt===64&&N===-1)break;X(N<<2|A>>4),B!=64&&(X(A<<4&240|B>>2),nt!=64&&X(B<<6&192|nt))}}function Se(){if(!Me){Me={};for(var s="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789".split(""),X=["+/=","+/","-_=","-_.","-_"],R=0;5>R;R++){var w=s.concat(X[R].split(""));je[R]=w;for(var N=0;N<w.length;N++){var A=w[N];Me[A]===void 0&&(Me[A]=N)}}}}var Oe=typeof Uint8Array=="function",re;function Ve(s){if(this.g=s,s!==null&&s.length===0)throw Error("ByteString should be constructed with non-empty values")}Ve.prototype.toJSON=function(){if(this.g==null)var s="";else s=this.g,s=this.g=s==null||typeof s=="string"?s:Oe&&s instanceof Uint8Array?xn(s):null;return s};var ln=typeof Uint8Array.prototype.slice=="function";function Be(s,X,R){return X===R?re||(re=new Uint8Array(0)):ln?s.slice(X,R):new Uint8Array(s.subarray(X,R))}var Qt=0,Ze=0;function Ce(s){if(s.constructor===Uint8Array)return s;if(s.constructor===ArrayBuffer)return new Uint8Array(s);if(s.constructor===Array)return new Uint8Array(s);if(s.constructor===String)return Xn(s);if(s.constructor===Ve){if(s.g==null)var X=re||(re=new Uint8Array(0));else{X=Uint8Array;var R=s.g;R=R==null||Oe&&R!=null&&R instanceof Uint8Array?R:typeof R=="string"?Xn(R):null,s=s.g=R,X=new X(s)}return X}if(s instanceof Uint8Array)return new Uint8Array(s.buffer,s.byteOffset,s.byteLength);throw Error("Type not convertible to a Uint8Array, expected a Uint8Array, an ArrayBuffer, a base64 encoded string, or Array of numbers")}function Mt(s,X){X=X===void 0?{}:X,X=X.u===void 0?!1:X.u,this.h=null,this.g=this.i=this.l=0,this.j=!1,this.u=X,s&&xe(this,s)}function xe(s,X){s.h=Ce(X),s.l=0,s.i=s.h.length,s.g=s.l}Mt.prototype.reset=function(){this.g=this.l};function jt(s){s.g>s.i&&(s.j=!0,sn(Error("Tried to read past the end of the data "+s.g+" > "+s.i)))}function ye(s){var X=s.h,R=X[s.g],w=R&127;return 128>R?(s.g+=1,jt(s),w):(R=X[s.g+1],w|=(R&127)<<7,128>R?(s.g+=2,jt(s),w):(R=X[s.g+2],w|=(R&127)<<14,128>R?(s.g+=3,jt(s),w):(R=X[s.g+3],w|=(R&127)<<21,128>R?(s.g+=4,jt(s),w):(R=X[s.g+4],w|=(R&15)<<28,128>R?(s.g+=5,jt(s),w>>>0):(s.g+=5,128<=X[s.g++]&&128<=X[s.g++]&&128<=X[s.g++]&&128<=X[s.g++]&&128<=X[s.g++]?(s.j=!0,Ln(),w):(jt(s),w))))))}var Ye=[];function qe(){this.g=new Uint8Array(64),this.h=0}function Xe(s,X){if(!(s.h+1<s.g.length)){var R=s.g;s.g=new Uint8Array(Math.ceil(1+2*s.g.length)),s.g.set(R)}s.g[s.h++]=X}qe.prototype.length=function(){return this.h},qe.prototype.end=function(){var s=this.g,X=this.h;return this.h=0,Be(s,0,X)};function Ot(s,X){for(;127<X;)Xe(s,X&127|128),X>>>=7;Xe(s,X)}function Ae(s){var X={},R=X.N===void 0?!1:X.N;this.m={u:X.u===void 0?!1:X.u},this.N=R,X=this.m,Ye.length?(R=Ye.pop(),X&&(R.u=X.u),s&&xe(R,s),s=R):s=new Mt(s,X),this.g=s,this.l=this.g.g,this.h=this.i=-1,this.j=!1}Ae.prototype.reset=function(){this.g.reset(),this.h=this.i=-1};function Pe(s){var X=s.g;if((X=X.g==X.i)||(X=s.j)||(X=s.g,X=X.j||0>X.g||X.g>X.i),X)return!1;s.l=s.g.g;var R=ye(s.g);return X=R>>>3,R&=7,0<=R&&5>=R?(s.i=X,s.h=R,!0):(s.j=!0,Gn(R,s.l),!1)}function Ie(s){switch(s.h){case 0:if(s.h!=0)Ie(s);else t:{s=s.g;for(var X=s.g,R=0;10>R;R++){if((s.h[X]&128)===0){s.g=X+1,jt(s);break t}X++}s.j=!0,Ln()}break;case 1:s=s.g,s.g+=8,jt(s);break;case 2:s.h!=2?Ie(s):(X=ye(s.g),s=s.g,s.g+=X,jt(s));break;case 5:s=s.g,s.g+=4,jt(s);break;case 3:X=s.i;do{if(!Pe(s)){s.j=!0,sn(Error("Unmatched start-group tag: stream EOF"));break}if(s.h==4){s.i!=X&&(s.j=!0,sn(Error("Unmatched end-group tag")));break}Ie(s)}while(1);break;default:s.j=!0,Gn(s.h,s.l)}}function Wn(s,X,R){s.N||(s=Be(s.g.h,R,s.g.g),(R=X.m)?R.push(s):X.m=[s])}var cn=[];function _e(){this.h=[],this.i=0,this.g=new qe}function un(s,X){X.length!==0&&(s.h.push(X),s.i+=X.length)}function ve(s,X,R){Ot(s.g,8*X+2),Ot(s.g,R.length),un(s,s.g.end()),un(s,R)}var we=typeof Symbol=="function"&&typeof Symbol()=="symbol"?Symbol(void 0):void 0;function Ge(s,X){Object.isFrozen(s)||(we?s[we]|=X:s.g!==void 0?s.g|=X:Object.defineProperties(s,{g:{value:X,configurable:!0,writable:!0,enumerable:!1}}))}function ie(s){if(!s)return 0;var X;return we?X=s[we]:X=s.g,X==null?0:X}function Qe(s){return Array.isArray(s)&&Ge(s,1),s}function qt(s){if(!Array.isArray(s))throw Error("cannot mark non-array as immutable");Ge(s,2)}function Pt(s){return s!==null&&typeof s=="object"&&s.constructor===Object}function hn(s){switch(typeof s){case"number":return isFinite(s)?s:String(s);case"object":return Oe&&s!=null&&s instanceof Uint8Array?xn(s):s;default:return s}}function fe(s,X){if(s!=null)return Array.isArray(s)||Pt(s)?Ct(s,X):X(s)}function Ct(s,X){if(Array.isArray(s)){for(var R=Array(s.length),w=0;w<s.length;w++)R[w]=fe(s[w],X);return ie(s)&1&&Qe(R),R}R={};for(w in s)R[w]=fe(s[w],X);return R}var Vt;function oe(s,X,R){var w=Vt;Vt=null,s||(s=w),w=this.constructor.ca,s||(s=w?[w]:[]),this.j=(w?0:-1)-(this.constructor.aa||0),this.i=null,this.g=s;t:{if(w=this.g.length,s=w-1,w&&(w=this.g[s],Pt(w))){this.l=s-this.j,this.h=w;break t}X!==void 0&&-1<X?(this.l=Math.max(X,s+1-this.j),this.h=null):this.l=Number.MAX_VALUE}if(R)for(X=0;X<R.length;X++)s=R[X],s<this.l?(s+=this.j,(w=this.g[s])?Qe(w):this.g[s]=Le):(te(this),(w=this.h[s])?Qe(w):this.h[s]=Le)}var Le=Object.freeze(Qe([]));function te(s){var X=s.l+s.j;s.g[X]||(s.h=s.g[X]={})}function se(s,X,R){return X===-1?null:(R===void 0?0:R)||X>=s.l?s.h?s.h[X]:void 0:s.g[X+s.j]}function tt(s,X,R){R=R===void 0?!0:R;var w=w===void 0?!1:w,N=se(s,X,w);return N==null&&(N=Le),N===Le?(N=Qe([]),ut(s,X,N,w)):R&&Array.isArray(N)&&ie(N)&2&&(N=N.slice(),ut(s,X,N,w)),N}function it(s,X,R){return s=se(s,X),s=s==null?s:+s,s==null?R===void 0?0:R:s}function ut(s,X,R,w){(w===void 0?0:w)||X>=s.l?(te(s),s.h[X]=R):s.g[X+s.j]=R}function _t(s,X,R){s.i||(s.i={});var w=s.i[R];if(!w){var N=tt(s,R,!1);w=[];for(var A=Array.isArray(N)?!!(ie(N)&2):!1,B=0;B<N.length;B++)w[B]=new X(N[B]),A&&qt(w[B].g);A&&(qt(w),Object.freeze(w)),s.i[R]=w}return w}function de(s,X,R,w,N){var A=_t(s,w,X);R=R||new w,s=tt(s,X),N!=null?(A.splice(N,0,R),s.splice(N,0,ue(R))):(A.push(R),s.push(ue(R)))}oe.prototype.toJSON=function(){var s=ue(this);return Ct(s,hn)};function ue(s){if(s.i)for(var X in s.i){var R=s.i[X];if(Array.isArray(R))for(var w=0;w<R.length;w++)R[w]&&ue(R[w]);else R&&ue(R)}return s.g}oe.prototype.toString=function(){return ue(this).toString()};function St(s,X){return s=se(s,X),s==null?0:s}function me(s,X){return s=se(s,X),s==null?"":s}function He(s,X){if(s=s.m){un(X,X.g.end());for(var R=0;R<s.length;R++)un(X,s[R])}}function tn(s){var X=s[0];switch(s.length){case 2:var R=s[1];return function($,yt,Xt){return X($,yt,Xt,R)};case 3:var w=s[1],N=s[2];return function($,yt,Xt){return X($,yt,Xt,w,N)};case 4:var A=s[1],B=s[2],nt=s[3];return function($,yt,Xt){return X($,yt,Xt,A,B,nt)};default:throw Error("unsupported number of parameters, expected [2-4], got "+s.length)}}function en(s,X,R){for(;Pe(X)&&X.h!=4;){var w=X.i,N=R[w];if(N){if(Array.isArray(N)&&(N=R[w]=tn(N)),!N(X,s,w)){w=X,N=s;var A=w.l;Ie(w),Wn(w,N,A)}}else w=X,N=s,A=w.l,Ie(w),Wn(w,N,A)}return s}function fn(s,X){var R=new _e;if(X(s,R),s=R.i+R.g.length(),s===0)R=new Uint8Array(0);else{s=new Uint8Array(s);for(var w=R.h,N=w.length,A=X=0;A<N;A++){var B=w[A];B.length!==0&&(s.set(B,X),X+=B.length)}w=R.g,N=w.h,N!==0&&(s.set(w.g.subarray(0,N),X),w.h=0),R.h=[s],R=s}return R}function bn(s,X,R){if(cn.length){var w=cn.pop();s&&(xe(w.g,s),w.i=-1,w.h=-1),s=w}else s=new Ae(s);try{return R(new X,s)}finally{X=s.g,X.h=null,X.l=0,X.i=0,X.g=0,X.j=!1,X.u=!1,s.i=-1,s.h=-1,s.j=!1,100>cn.length&&cn.push(s)}}function Fe(s,X,R){if(X=se(X,R),X!=null){Ot(s.g,8*R+5),s=s.g;var w=X;w=(R=0>w?1:0)?-w:w,w===0?0<1/w?Qt=Ze=0:(Ze=0,Qt=2147483648):isNaN(w)?(Ze=0,Qt=2147483647):34028234663852886e22<w?(Ze=0,Qt=(R<<31|2139095040)>>>0):11754943508222875e-54>w?(w=Math.round(w/Math.pow(2,-149)),Ze=0,Qt=(R<<31|w)>>>0):(X=Math.floor(Math.log(w)/Math.LN2),w*=Math.pow(2,-X),w=Math.round(8388608*w),16777216<=w&&++X,Ze=0,Qt=(R<<31|X+127<<23|w&8388607)>>>0),R=Qt,Xe(s,R>>>0&255),Xe(s,R>>>8&255),Xe(s,R>>>16&255),Xe(s,R>>>24&255)}}function nn(s,X,R){if(s.h!==5)return!1;s=s.g;var w=s.h[s.g],N=s.h[s.g+1],A=s.h[s.g+2],B=s.h[s.g+3];return s.g+=4,jt(s),N=(w<<0|N<<8|A<<16|B<<24)>>>0,s=2*(N>>31)+1,w=N>>>23&255,N&=8388607,ut(X,R,w==255?N?NaN:1/0*s:w==0?s*Math.pow(2,-149)*N:s*Math.pow(2,w-150)*(N+Math.pow(2,23))),!0}function zn(s,X,R){if(s.h!==0)return!1;for(var w=s.g,N=128,A=0,B=s=0;4>B&&128<=N;B++)N=w.h[w.g++],A|=(N&127)<<7*B;if(128<=N&&(N=w.h[w.g++],A|=(N&127)<<28,s|=(N&127)>>4),128<=N)for(B=0;5>B&&128<=N;B++)N=w.h[w.g++],s|=(N&127)<<7*B+3;return 128>N?(w=A>>>0,N=s>>>0,(s=N&2147483648)&&(w=~w+1>>>0,N=~N>>>0,w==0&&(N=N+1>>>0)),w=4294967296*N+(w>>>0),s=s?-w:w):(w.j=!0,Ln(),s=void 0),ut(X,R,s),!0}function rn(s,X,R){return s.h!==0?!1:(ut(X,R,ye(s.g)),!0)}function Je(s,X,R){if(s.h!==2)return!1;var w=ye(s.g);s=s.g;var N=s.g;s.g+=w,jt(s),s=s.h;var A;if(dn)(A=Jn)||(A=Jn=new TextDecoder("utf-8",{fatal:!1})),A=A.decode(s.subarray(N,N+w));else{w=N+w;for(var B=[],nt=null,$,yt,Xt;N<w;)$=s[N++],128>$?B.push($):224>$?N>=w?B.push(65533):(yt=s[N++],194>$||(yt&192)!==128?(N--,B.push(65533)):B.push(($&31)<<6|yt&63)):240>$?N>=w-1?B.push(65533):(yt=s[N++],(yt&192)!==128||$===224&&160>yt||$===237&&160<=yt||((A=s[N++])&192)!==128?(N--,B.push(65533)):B.push(($&15)<<12|(yt&63)<<6|A&63)):244>=$?N>=w-2?B.push(65533):(yt=s[N++],(yt&192)!==128||($<<28)+(yt-144)>>30!==0||((A=s[N++])&192)!==128||((Xt=s[N++])&192)!==128?(N--,B.push(65533)):($=($&7)<<18|(yt&63)<<12|(A&63)<<6|Xt&63,$-=65536,B.push(($>>10&1023)+55296,($&1023)+56320))):B.push(65533),8192<=B.length&&(nt=Rn(nt,B),B.length=0);A=Rn(nt,B)}return ut(X,R,A),!0}function gn(s,X,R,w,N){if(s.h!==2)return!1;var A=new w,B=s.g.i,nt=ye(s.g),$=s.g.g+nt;if(s.g.i=$,N(A,s),N=$-s.g.g,N!==0)throw Error("Message parsing ended unexpectedly. Expected to read "+(nt+" bytes, instead read "+(nt-N)+" bytes, either the data ended unexpectedly or the message misreported its own length"));return s.g.g=$,s.g.i=B,de(X,R,A,w,void 0),!0}function In(s){oe.call(this,s)}var Ke;dt(In,oe);function En(s,X){var R=se(s,1);if(R!=null&&R!=null){Ot(X.g,8);var w=X.g;if(0<=R)Ot(w,R);else{for(var N=0;9>N;N++)Xe(w,R&127|128),R>>=7;Xe(w,1)}}Fe(X,s,2),w=se(s,3),w!=null&&ve(X,3,Fn(w)),w=se(s,4),w!=null&&ve(X,4,Fn(w)),He(s,X)}function on(s,X){return en(s,X,Ke||(Ke={1:rn,2:nn,3:Je,4:Je}))}function Zn(s){oe.call(this,s,-1,an)}var Sn;dt(Zn,oe),Zn.prototype.addClassification=function(s,X){return de(this,1,s,In,X),this};function Kn(s,X){return en(s,X,Sn||(Sn={1:[gn,In,on]}))}var an=[1];function Tn(s){oe.call(this,s)}var _n;dt(Tn,oe);function Qn(s,X){Fe(X,s,1),Fe(X,s,2),Fe(X,s,3),Fe(X,s,4),Fe(X,s,5),He(s,X)}function Yn(s,X){return en(s,X,_n||(_n={1:nn,2:nn,3:nn,4:nn,5:nn}))}function Cn(s){oe.call(this,s,-1,V)}var p;dt(Cn,oe);function W(s,X){return en(s,X,p||(p={1:[gn,Tn,Yn]}))}var V=[1];function E(s){oe.call(this,s)}var O;dt(E,oe);function ot(s,X){Fe(X,s,1),Fe(X,s,2),Fe(X,s,3),Fe(X,s,4),Fe(X,s,5);var R=se(s,6);if(R!=null&&R!=null){Ot(X.g,48);var w=X.g,N=R;R=0>N,N=Math.abs(N);var A=N>>>0;for(N=Math.floor((N-A)/4294967296),N>>>=0,R&&(N=~N>>>0,A=(~A>>>0)+1,4294967295<A&&(A=0,N++,4294967295<N&&(N=0))),Qt=A,Ze=N,R=Qt,A=Ze;0<A||127<R;)Xe(w,R&127|128),R=(R>>>7|A<<25)>>>0,A>>>=7;Xe(w,R)}He(s,X)}function j(s,X){return en(s,X,O||(O={1:nn,2:nn,3:nn,4:nn,5:nn,6:zn}))}function rt(s,X,R){if(R=s.createShader(R===0?s.VERTEX_SHADER:s.FRAGMENT_SHADER),s.shaderSource(R,X),s.compileShader(R),!s.getShaderParameter(R,s.COMPILE_STATUS))throw Error(`Could not compile WebGL shader.
|
|
105
105
|
|
|
106
|
-
`+s.getShaderInfoLog(R));return R}function bt(s){return _t(s,
|
|
106
|
+
`+s.getShaderInfoLog(R));return R}function bt(s){return _t(s,In,1).map(function(X){return{index:St(X,1),X:it(X,2),label:se(X,3)!=null?me(X,3):void 0,displayName:se(X,4)!=null?me(X,4):void 0}})}function Rt(s){return{x:it(s,1),y:it(s,2),z:it(s,3),visibility:se(s,4)!=null?it(s,4):void 0}}function Ut(s){return _t(bn(s,Cn,W),Tn,1).map(Rt)}function Jt(s,X){this.h=s,this.g=X,this.l=0}function $t(s,X,R){return Nt(s,X),typeof s.g.canvas.transferToImageBitmap=="function"?Promise.resolve(s.g.canvas.transferToImageBitmap()):R?Promise.resolve(s.g.canvas):typeof createImageBitmap=="function"?createImageBitmap(s.g.canvas):(s.i===void 0&&(s.i=document.createElement("canvas")),new Promise(function(w){s.i.height=s.g.canvas.height,s.i.width=s.g.canvas.width,s.i.getContext("2d",{}).drawImage(s.g.canvas,0,0,s.g.canvas.width,s.g.canvas.height),w(s.i)}))}function Nt(s,X){var R=s.g;if(s.m===void 0){var w=rt(R,`
|
|
107
107
|
attribute vec2 aVertex;
|
|
108
108
|
attribute vec2 aTex;
|
|
109
109
|
varying vec2 vTex;
|
|
110
110
|
void main(void) {
|
|
111
111
|
gl_Position = vec4(aVertex, 0.0, 1.0);
|
|
112
112
|
vTex = aTex;
|
|
113
|
-
}`,0),
|
|
113
|
+
}`,0),N=rt(R,`
|
|
114
114
|
precision mediump float;
|
|
115
115
|
varying vec2 vTex;
|
|
116
116
|
uniform sampler2D sampler0;
|
|
117
117
|
void main(){
|
|
118
118
|
gl_FragColor = texture2D(sampler0, vTex);
|
|
119
|
-
}`,1),A=R.createProgram();if(R.attachShader(A,w),R.attachShader(A,
|
|
119
|
+
}`,1),A=R.createProgram();if(R.attachShader(A,w),R.attachShader(A,N),R.linkProgram(A),!R.getProgramParameter(A,R.LINK_STATUS))throw Error(`Could not compile WebGL program.
|
|
120
120
|
|
|
121
|
-
`+R.getProgramInfoLog(A));w=s.m=A,R.useProgram(w),k=R.getUniformLocation(w,"sampler0"),s.j={I:R.getAttribLocation(w,"aVertex"),H:R.getAttribLocation(w,"aTex"),da:k},s.s=R.createBuffer(),R.bindBuffer(R.ARRAY_BUFFER,s.s),R.enableVertexAttribArray(s.j.I),R.vertexAttribPointer(s.j.I,2,R.FLOAT,!1,0,0),R.bufferData(R.ARRAY_BUFFER,new Float32Array([-1,-1,-1,1,1,1,1,-1]),R.STATIC_DRAW),R.bindBuffer(R.ARRAY_BUFFER,null),s.o=R.createBuffer(),R.bindBuffer(R.ARRAY_BUFFER,s.o),R.enableVertexAttribArray(s.j.H),R.vertexAttribPointer(s.j.H,2,R.FLOAT,!1,0,0),R.bufferData(R.ARRAY_BUFFER,new Float32Array([0,1,0,0,1,0,1,1]),R.STATIC_DRAW),R.bindBuffer(R.ARRAY_BUFFER,null),R.uniform1i(k,0)}w=s.j,R.useProgram(s.m),R.canvas.width=X.width,R.canvas.height=X.height,R.viewport(0,0,X.width,X.height),R.activeTexture(R.TEXTURE0),s.h.bindTexture2d(X.glName),R.enableVertexAttribArray(w.I),R.bindBuffer(R.ARRAY_BUFFER,s.s),R.vertexAttribPointer(w.I,2,R.FLOAT,!1,0,0),R.enableVertexAttribArray(w.H),R.bindBuffer(R.ARRAY_BUFFER,s.o),R.vertexAttribPointer(w.H,2,R.FLOAT,!1,0,0),R.bindFramebuffer(R.DRAW_FRAMEBUFFER?R.DRAW_FRAMEBUFFER:R.FRAMEBUFFER,null),R.clearColor(0,0,0,0),R.clear(R.COLOR_BUFFER_BIT),R.colorMask(!0,!0,!0,!0),R.drawArrays(R.TRIANGLE_FAN,0,4),R.disableVertexAttribArray(w.I),R.disableVertexAttribArray(w.H),R.bindBuffer(R.ARRAY_BUFFER,null),s.h.bindTexture2d(0)}function Tt(s){this.g=s}var Et=new Uint8Array([0,97,115,109,1,0,0,0,1,4,1,96,0,0,3,2,1,0,10,9,1,7,0,65,0,253,15,26,11]);function Dt(s,X){return X+s}function ae(s,X){window[s]=X}function pe(s){var X=document.createElement("script");return X.setAttribute("src",s),X.setAttribute("crossorigin","anonymous"),new Promise(function(R){X.addEventListener("load",function(){R()},!1),X.addEventListener("error",function(){R()},!1),document.body.appendChild(X)})}function ge(){return Zt(function(s){switch(s.g){case 1:return s.m=2,O(s,WebAssembly.instantiate(Et),4);case 4:s.g=3,s.m=0;break;case 2:return s.m=0,s.j=null,s.return(!1);case 3:return s.return(!0)}})}function ke(s){if(this.g=s,this.listeners={},this.j={},this.F={},this.m={},this.s={},this.G=this.o=this.R=!0,this.C=Promise.resolve(),this.P="",this.B={},this.locateFile=s&&s.locateFile||Dt,typeof window=="object")var X=window.location.pathname.toString().substring(0,window.location.pathname.toString().lastIndexOf("/"))+"/";else if(typeof location<"u")X=location.pathname.toString().substring(0,location.pathname.toString().lastIndexOf("/"))+"/";else throw Error("solutions can only be loaded on a web page or in a web worker");if(this.S=X,s.options){X=T(Object.keys(s.options));for(var R=X.next();!R.done;R=X.next()){R=R.value;var w=s.options[R].default;w!==void 0&&(this.j[R]=typeof w=="function"?w():w)}}}i=ke.prototype,i.close=function(){return this.i&&this.i.delete(),Promise.resolve()};function h(s){var X,R,w,k,A,B,nt,$,yt,Xt,Kt;return Zt(function(It){switch(It.g){case 1:return s.R?(X=s.g.files===void 0?[]:typeof s.g.files=="function"?s.g.files(s.j):s.g.files,O(It,ge(),2)):It.return();case 2:if(R=It.h,typeof window=="object")return ae("createMediapipeSolutionsWasm",{locateFile:s.locateFile}),ae("createMediapipeSolutionsPackedAssets",{locateFile:s.locateFile}),B=X.filter(function(ht){return ht.data!==void 0}),nt=X.filter(function(ht){return ht.data===void 0}),$=Promise.all(B.map(function(ht){var Wt=C(s,ht.url);if(ht.path!==void 0){var xt=ht.path;Wt=Wt.then(function(wt){return s.overrideFile(xt,wt),Promise.resolve(wt)})}return Wt})),yt=Promise.all(nt.map(function(ht){return ht.simd===void 0||ht.simd&&R||!ht.simd&&!R?pe(s.locateFile(ht.url,s.S)):Promise.resolve()})).then(function(){var ht,Wt,xt;return Zt(function(wt){if(wt.g==1)return ht=window.createMediapipeSolutionsWasm,Wt=window.createMediapipeSolutionsPackedAssets,xt=s,O(wt,ht(Wt),2);xt.h=wt.h,wt.g=0})}),Xt=function(){return Zt(function(ht){return s.g.graph&&s.g.graph.url?ht=O(ht,C(s,s.g.graph.url),0):(ht.g=0,ht=void 0),ht})}(),O(It,Promise.all([yt,$,Xt]),7);if(typeof importScripts!="function")throw Error("solutions can only be loaded on a web page or in a web worker");return w=X.filter(function(ht){return ht.simd===void 0||ht.simd&&R||!ht.simd&&!R}).map(function(ht){return s.locateFile(ht.url,s.S)}),importScripts.apply(null,J(w)),k=s,O(It,createMediapipeSolutionsWasm(Module),6);case 6:k.h=It.h,s.l=new OffscreenCanvas(1,1),s.h.canvas=s.l,A=s.h.GL.createContext(s.l,{antialias:!1,alpha:!1,ba:typeof WebGL2RenderingContext<"u"?2:1}),s.h.GL.makeContextCurrent(A),It.g=4;break;case 7:if(s.l=document.createElement("canvas"),Kt=s.l.getContext("webgl2",{}),!Kt&&(Kt=s.l.getContext("webgl",{}),!Kt))return alert("Failed to create WebGL canvas context when passing video frame."),It.return();s.D=Kt,s.h.canvas=s.l,s.h.createContext(s.l,!0,!0,{});case 4:s.i=new s.h.SolutionWasm,s.R=!1,It.g=0}})}function y(s){var X,R,w,k,A,B,nt,$;return Zt(function(yt){if(yt.g==1){if(s.g.graph&&s.g.graph.url&&s.P===s.g.graph.url)return yt.return();if(s.o=!0,!s.g.graph||!s.g.graph.url){yt.g=2;return}return s.P=s.g.graph.url,O(yt,C(s,s.g.graph.url),3)}for(yt.g!=2&&(X=yt.h,s.i.loadGraph(X)),R=T(Object.keys(s.B)),w=R.next();!w.done;w=R.next())k=w.value,s.i.overrideFile(k,s.B[k]);if(s.B={},s.g.listeners)for(A=T(s.g.listeners),B=A.next();!B.done;B=A.next())nt=B.value,M(s,nt);$=s.j,s.j={},s.setOptions($),yt.g=0})}i.reset=function(){var s=this;return Zt(function(X){s.i&&(s.i.reset(),s.m={},s.s={}),X.g=0})},i.setOptions=function(s,X){var R=this;if(X=X||this.g.options){for(var w=[],k=[],A={},B=T(Object.keys(s)),nt=B.next();!nt.done;A={K:A.K,L:A.L},nt=B.next()){var $=nt.value;$ in this.j&&this.j[$]===s[$]||(this.j[$]=s[$],nt=X[$],nt!==void 0&&(nt.onChange&&(A.K=nt.onChange,A.L=s[$],w.push(function(yt){return function(){var Xt;return Zt(function(Kt){if(Kt.g==1)return O(Kt,yt.K(yt.L),2);Xt=Kt.h,Xt===!0&&(R.o=!0),Kt.g=0})}}(A))),nt.graphOptionXref&&($={valueNumber:nt.type===1?s[$]:0,valueBoolean:nt.type===0?s[$]:!1,valueString:nt.type===2?s[$]:""},nt=Object.assign(Object.assign(Object.assign({},{calculatorName:"",calculatorIndex:0}),nt.graphOptionXref),$),k.push(nt))))}(w.length!==0||k.length!==0)&&(this.o=!0,this.A=(this.A===void 0?[]:this.A).concat(k),this.v=(this.v===void 0?[]:this.v).concat(w))}};function G(s){var X,R,w,k,A,B,nt;return Zt(function($){switch($.g){case 1:if(!s.o)return $.return();if(!s.v){$.g=2;break}X=T(s.v),R=X.next();case 3:if(R.done){$.g=5;break}return w=R.value,O($,w(),4);case 4:R=X.next(),$.g=3;break;case 5:s.v=void 0;case 2:if(s.A){for(k=new s.h.GraphOptionChangeRequestList,A=T(s.A),B=A.next();!B.done;B=A.next())nt=B.value,k.push_back(nt);s.i.changeOptions(k),k.delete(),s.A=void 0}s.o=!1,$.g=0}})}i.initialize=function(){var s=this;return Zt(function(X){return X.g==1?O(X,h(s),2):X.g!=3?O(X,y(s),3):O(X,G(s),0)})};function C(s,X){var R,w;return Zt(function(k){return X in s.F?k.return(s.F[X]):(R=s.locateFile(X,""),w=fetch(R).then(function(A){return A.arrayBuffer()}),s.F[X]=w,k.return(w))})}i.overrideFile=function(s,X){this.i?this.i.overrideFile(s,X):this.B[s]=X},i.clearOverriddenFiles=function(){this.B={},this.i&&this.i.clearOverriddenFiles()},i.send=function(s,X){var R=this,w,k,A,B,nt,$,yt,Xt,Kt;return Zt(function(It){switch(It.g){case 1:return R.g.inputs?(w=1e3*(X==null?performance.now():X),O(It,R.C,2)):It.return();case 2:return O(It,R.initialize(),3);case 3:for(k=new R.h.PacketDataList,A=T(Object.keys(s)),B=A.next();!B.done;B=A.next())if(nt=B.value,$=R.g.inputs[nt]){t:{var ht=s[nt];switch($.type){case"video":var Wt=R.m[$.stream];if(Wt||(Wt=new Jt(R.h,R.D),R.m[$.stream]=Wt),Wt.l===0&&(Wt.l=Wt.h.createTexture()),typeof HTMLVideoElement<"u"&&ht instanceof HTMLVideoElement)var xt=ht.videoWidth,wt=ht.videoHeight;else typeof HTMLImageElement<"u"&&ht instanceof HTMLImageElement?(xt=ht.naturalWidth,wt=ht.naturalHeight):(xt=ht.width,wt=ht.height);wt={glName:Wt.l,width:xt,height:wt},xt=Wt.g,xt.canvas.width=wt.width,xt.canvas.height=wt.height,xt.activeTexture(xt.TEXTURE0),Wt.h.bindTexture2d(Wt.l),xt.texImage2D(xt.TEXTURE_2D,0,xt.RGBA,xt.RGBA,xt.UNSIGNED_BYTE,ht),Wt.h.bindTexture2d(0),Wt=wt;break t;case"detections":for(Wt=R.m[$.stream],Wt||(Wt=new Tt(R.h),R.m[$.stream]=Wt),Wt.data||(Wt.data=new Wt.g.DetectionListData),Wt.data.reset(ht.length),wt=0;wt<ht.length;++wt){xt=ht[wt];var Ht=Wt.data,l=Ht.setBoundingBox,v=wt,I=xt.T,Y=new E;if(ut(Y,1,I.Y),ut(Y,2,I.Z),ut(Y,3,I.height),ut(Y,4,I.width),ut(Y,5,I.rotation),ut(Y,6,I.W),I=mn(Y,ot),l.call(Ht,v,I),xt.O)for(Ht=0;Ht<xt.O.length;++Ht){Y=xt.O[Ht];var N=!!Y.visibility;l=Wt.data,v=l.addNormalizedLandmark,I=wt,Y=Object.assign(Object.assign({},Y),{visibility:N?Y.visibility:0}),N=new Yn,ut(N,1,Y.x),ut(N,2,Y.y),ut(N,3,Y.z),Y.visibility&&ut(N,4,Y.visibility),Y=mn(N,Qn),v.call(l,I,Y)}if(xt.M)for(Ht=0;Ht<xt.M.length;++Ht)l=Wt.data,v=l.addClassification,I=wt,Y=xt.M[Ht],N=new Sn,ut(N,2,Y.X),Y.index&&ut(N,1,Y.index),Y.label&&ut(N,3,Y.label),Y.displayName&&ut(N,4,Y.displayName),Y=mn(N,Un),v.call(l,I,Y)}Wt=Wt.data;break t;default:Wt={}}}switch(yt=Wt,Xt=$.stream,$.type){case"video":k.pushTexture2d(Object.assign(Object.assign({},yt),{stream:Xt,timestamp:w}));break;case"detections":Kt=yt,Kt.stream=Xt,Kt.timestamp=w,k.pushDetectionList(Kt);break;default:throw Error("Unknown input config type: '"+$.type+"'")}}return R.i.send(k),O(It,R.C,4);case 4:k.delete(),It.g=0}})};function K(s,X,R){var w,k,A,B,nt,$,yt,Xt,Kt,It,ht,Wt,xt,wt;return Zt(function(Ht){switch(Ht.g){case 1:if(!R)return Ht.return(X);for(w={},k=0,A=T(Object.keys(R)),B=A.next();!B.done;B=A.next())nt=B.value,$=R[nt],typeof $!="string"&&$.type==="texture"&&X[$.stream]!==void 0&&++k;1<k&&(s.G=!1),yt=T(Object.keys(R)),B=yt.next();case 2:if(B.done){Ht.g=4;break}if(Xt=B.value,Kt=R[Xt],typeof Kt=="string")return xt=w,wt=Xt,O(Ht,_(s,Xt,X[Kt]),14);if(It=X[Kt.stream],Kt.type==="detection_list"){if(It){for(var l=It.getRectList(),v=It.getLandmarksList(),I=It.getClassificationsList(),Y=[],N=0;N<l.size();++N){var o=yn(l.get(N),E,j);o={T:{Y:it(o,1),Z:it(o,2),height:it(o,3),width:it(o,4),rotation:it(o,5,0),W:St(o,6)},O:Ut(v.get(N)),M:bt(yn(I.get(N),vn,Mn))},Y.push(o)}l=Y}else l=[];w[Xt]=l,Ht.g=7;break}if(Kt.type==="proto_list"){if(It){for(l=Array(It.size()),v=0;v<It.size();v++)l[v]=It.get(v);It.delete()}else l=[];w[Xt]=l,Ht.g=7;break}if(It===void 0){Ht.g=3;break}if(Kt.type==="float_list"){w[Xt]=It,Ht.g=7;break}if(Kt.type==="proto"){w[Xt]=It,Ht.g=7;break}if(Kt.type!=="texture")throw Error("Unknown output config type: '"+Kt.type+"'");return ht=s.s[Xt],ht||(ht=new Jt(s.h,s.D),s.s[Xt]=ht),O(Ht,$t(ht,It,s.G),13);case 13:Wt=Ht.h,w[Xt]=Wt;case 7:Kt.transform&&w[Xt]&&(w[Xt]=Kt.transform(w[Xt])),Ht.g=3;break;case 14:xt[wt]=Ht.h;case 3:B=yt.next(),Ht.g=2;break;case 4:return Ht.return(w)}})}function _(s,X,R){var w;return Zt(function(k){return typeof R=="number"||R instanceof Uint8Array||R instanceof s.h.Uint8BlobList?k.return(R):R instanceof s.h.Texture2dDataOut?(w=s.s[X],w||(w=new Jt(s.h,s.D),s.s[X]=w),k.return($t(w,R,s.G))):k.return(void 0)})}function M(s,X){for(var R=X.name||"$",w=[].concat(J(X.wants)),k=new s.h.StringList,A=T(X.wants),B=A.next();!B.done;B=A.next())k.push_back(B.value);A=s.h.PacketListener.implement({onResults:function(nt){for(var $={},yt=0;yt<X.wants.length;++yt)$[w[yt]]=nt.get(yt);var Xt=s.listeners[R];Xt&&(s.C=K(s,$,X.outs).then(function(Kt){Kt=Xt(Kt);for(var It=0;It<X.wants.length;++It){var ht=$[w[It]];typeof ht=="object"&&ht.hasOwnProperty&&ht.hasOwnProperty("delete")&&ht.delete()}Kt&&(s.C=Kt)}))}}),s.i.attachMultiListener(k,A),k.delete()}i.onResults=function(s,X){this.listeners[X||"$"]=s},Ct("Solution",ke),Ct("OptionType",{BOOL:0,NUMBER:1,$:2,0:"BOOL",1:"NUMBER",2:"STRING"});function q(s){switch(s===void 0&&(s=0),s){case 1:return"pose_landmark_full.tflite";case 2:return"pose_landmark_heavy.tflite";default:return"pose_landmark_lite.tflite"}}function ct(s){var X=this;s=s||{},this.g=new ke({locateFile:s.locateFile,files:function(R){return[{url:"pose_solution_packed_assets_loader.js"},{simd:!1,url:"pose_solution_wasm_bin.js"},{simd:!0,url:"pose_solution_simd_wasm_bin.js"},{data:!0,url:q(R.modelComplexity)}]},graph:{url:"pose_web.binarypb"},listeners:[{wants:["pose_landmarks","world_landmarks","segmentation_mask","image_transformed"],outs:{image:{type:"texture",stream:"image_transformed"},poseLandmarks:{type:"proto",stream:"pose_landmarks",transform:Ut},poseWorldLandmarks:{type:"proto",stream:"world_landmarks",transform:Ut},segmentationMask:{type:"texture",stream:"segmentation_mask"}}}],inputs:{image:{type:"video",stream:"input_frames_gpu"}},options:{useCpuInference:{type:0,graphOptionXref:{calculatorType:"InferenceCalculator",fieldName:"use_cpu_inference"},default:"iPad Simulator;iPhone Simulator;iPod Simulator;iPad;iPhone;iPod".split(";").includes(navigator.platform)||navigator.userAgent.includes("Mac")&&"ontouchend"in document},selfieMode:{type:0,graphOptionXref:{calculatorType:"GlScalerCalculator",calculatorIndex:1,fieldName:"flip_horizontal"}},modelComplexity:{type:1,graphOptionXref:{calculatorType:"ConstantSidePacketCalculator",calculatorName:"ConstantSidePacketCalculatorModelComplexity",fieldName:"int_value"},onChange:function(R){var w,k,A;return Zt(function(B){return B.g==1?(w=q(R),k="third_party/mediapipe/modules/pose_landmark/"+w,O(B,C(X.g,w),2)):(A=B.h,X.g.overrideFile(k,A),B.return(!0))})}},smoothLandmarks:{type:0,graphOptionXref:{calculatorType:"ConstantSidePacketCalculator",calculatorName:"ConstantSidePacketCalculatorSmoothLandmarks",fieldName:"bool_value"}},enableSegmentation:{type:0,graphOptionXref:{calculatorType:"ConstantSidePacketCalculator",calculatorName:"ConstantSidePacketCalculatorEnableSegmentation",fieldName:"bool_value"}},smoothSegmentation:{type:0,graphOptionXref:{calculatorType:"ConstantSidePacketCalculator",calculatorName:"ConstantSidePacketCalculatorSmoothSegmentation",fieldName:"bool_value"}},minDetectionConfidence:{type:1,graphOptionXref:{calculatorType:"TensorsToDetectionsCalculator",calculatorName:"poselandmarkgpu__posedetectiongpu__TensorsToDetectionsCalculator",fieldName:"min_score_thresh"}},minTrackingConfidence:{type:1,graphOptionXref:{calculatorType:"ThresholdingCalculator",calculatorName:"poselandmarkgpu__poselandmarkbyroigpu__tensorstoposelandmarksandsegmentation__ThresholdingCalculator",fieldName:"threshold"}}}})}i=ct.prototype,i.reset=function(){this.g.reset()},i.close=function(){return this.g.close(),Promise.resolve()},i.onResults=function(s){this.g.onResults(s)},i.initialize=function(){var s=this;return Zt(function(X){return O(X,s.g.initialize(),0)})},i.send=function(s,X){var R=this;return Zt(function(w){return O(w,R.g.send(s,X),0)})},i.setOptions=function(s){this.g.setOptions(s)},Ct("Pose",ct),Ct("POSE_CONNECTIONS",[[0,1],[1,2],[2,3],[3,7],[0,4],[4,5],[5,6],[6,8],[9,10],[11,12],[11,13],[13,15],[15,17],[15,19],[15,21],[17,19],[12,14],[14,16],[16,18],[16,20],[16,22],[18,20],[11,23],[12,24],[23,24],[23,25],[24,26],[25,27],[26,28],[27,29],[28,30],[29,31],[30,32],[27,31],[28,32]]),Ct("POSE_LANDMARKS",{NOSE:0,LEFT_EYE_INNER:1,LEFT_EYE:2,LEFT_EYE_OUTER:3,RIGHT_EYE_INNER:4,RIGHT_EYE:5,RIGHT_EYE_OUTER:6,LEFT_EAR:7,RIGHT_EAR:8,LEFT_RIGHT:9,RIGHT_LEFT:10,LEFT_SHOULDER:11,RIGHT_SHOULDER:12,LEFT_ELBOW:13,RIGHT_ELBOW:14,LEFT_WRIST:15,RIGHT_WRIST:16,LEFT_PINKY:17,RIGHT_PINKY:18,LEFT_INDEX:19,RIGHT_INDEX:20,LEFT_THUMB:21,RIGHT_THUMB:22,LEFT_HIP:23,RIGHT_HIP:24,LEFT_KNEE:25,RIGHT_KNEE:26,LEFT_ANKLE:27,RIGHT_ANKLE:28,LEFT_HEEL:29,RIGHT_HEEL:30,LEFT_FOOT_INDEX:31,RIGHT_FOOT_INDEX:32}),Ct("POSE_LANDMARKS_LEFT",{LEFT_EYE_INNER:1,LEFT_EYE:2,LEFT_EYE_OUTER:3,LEFT_EAR:7,LEFT_RIGHT:9,LEFT_SHOULDER:11,LEFT_ELBOW:13,LEFT_WRIST:15,LEFT_PINKY:17,LEFT_INDEX:19,LEFT_THUMB:21,LEFT_HIP:23,LEFT_KNEE:25,LEFT_ANKLE:27,LEFT_HEEL:29,LEFT_FOOT_INDEX:31}),Ct("POSE_LANDMARKS_RIGHT",{RIGHT_EYE_INNER:4,RIGHT_EYE:5,RIGHT_EYE_OUTER:6,RIGHT_EAR:8,RIGHT_LEFT:10,RIGHT_SHOULDER:12,RIGHT_ELBOW:14,RIGHT_WRIST:16,RIGHT_PINKY:18,RIGHT_INDEX:20,RIGHT_THUMB:22,RIGHT_HIP:24,RIGHT_KNEE:26,RIGHT_ANKLE:28,RIGHT_HEEL:30,RIGHT_FOOT_INDEX:32}),Ct("POSE_LANDMARKS_NEUTRAL",{NOSE:0}),Ct("VERSION","0.5.1635988162")}).call(xi);const or=class{constructor(){gt(this,"mediapipeMap_",new Map)}getVersion(n){switch(n){case"face_detection":return Vi.VERSION;case"face_mesh":return Ri.VERSION;case"hands":return Xi.VERSION;case"holistic":return Wi.VERSION;case"objectron":return Ii.VERSION;case"selfie_segmentation":return Gi.VERSION;case"pose":return xi.VERSION;default:return""}}initialize(n){return new Promise(async(r,f)=>{if(n.mediaPipeModelConfigArray.length==0){f("no model was selected");return}for(let Z=0;Z<n.mediaPipeModelConfigArray.length;Z++){const x=n.mediaPipeModelConfigArray[Z];if(this.mediapipeMap_.has(x.modelType)){f("setting same type is not supported");return}if(typeof x.listener!="function"){f(`[${x.modelType}] ResultsListener must be provided`);return}let H;switch(x.modelType){case"face_mesh":H=new Ri.FaceMesh({locateFile:(T,J)=>(x.assetsUri||or.defaultAssetsBaseUrl+"face_mesh/"+this.getVersion("face_mesh"))+"/"+T});break;case"face_detection":H=new Vi.FaceDetection({locateFile:(T,J)=>(x.assetsUri||or.defaultAssetsBaseUrl+"face_detection/"+this.getVersion("face_detection"))+"/"+T});break;case"hands":H=new Xi.Hands({locateFile:(T,J)=>(x.assetsUri||or.defaultAssetsBaseUrl+"hands/"+this.getVersion("hands"))+"/"+T});break;case"holistic":H=new Wi.Holistic({locateFile:(T,J)=>(x.assetsUri||or.defaultAssetsBaseUrl+"holistic/"+this.getVersion("holistic"))+"/"+T});break;case"objectron":H=new Ii.Objectron({locateFile:(T,J)=>(x.assetsUri||or.defaultAssetsBaseUrl+"objectron/"+this.getVersion("objectron"))+"/"+T});break;case"selfie_segmentation":H=new Gi.SelfieSegmentation({locateFile:(T,J)=>(x.assetsUri||or.defaultAssetsBaseUrl+"selfie_segmentation/"+this.getVersion("selfie_segmentation"))+"/"+T});break;case"pose":H=new xi.Pose({locateFile:(T,J)=>(x.assetsUri||or.defaultAssetsBaseUrl+"pose/"+this.getVersion("pose"))+"/"+T});break;default:f("unknown model type");return}H.onResults(x.listener),x.options&&H.setOptions(x.options);try{await H.initialize(),this.mediapipeMap_.set(x.modelType,H)}catch(T){f(T);return}}r()})}close(n){return new Promise((r,f)=>{let Z=[];if(n){let x=this.mediapipeMap_.get(n);if(x)this.mediapipeMap_.delete(n),Z.push(x.close());else{f("model not exit");return}}else{for(const[x,H]of this.mediapipeMap_.entries())Z.push(H.close());this.mediapipeMap_.clear()}Promise.all(Z).then(()=>{r()}).catch(x=>{f(x)})})}send(n,r){return new Promise((f,Z)=>{let x=[];if(r){let H=this.mediapipeMap_.get(r);if(H)x.push(H.send({image:n}));else{Z("model not exit");return}}else for(const[H,T]of this.mediapipeMap_.entries())x.push(T.send({image:n}));Promise.all(x).then(()=>{f()}).catch(H=>{Z(H)})})}reset(n){if(n){let r=this.mediapipeMap_.get(n);r&&typeof r.reset=="function"&&r.reset()}else for(const[r,f]of this.mediapipeMap_.entries())f&&typeof f.reset=="function"&&f.reset()}};let Si=or;gt(Si,"defaultAssetsBaseUrl","https://d3opqjmqzxf057.cloudfront.net/ml/mediapipe/");const cr=new WeakMap,Xr=new WeakMap,rr=new WeakMap,Ti=Symbol("anyProducer"),ws=Promise.resolve(),Yi=Symbol("listenerAdded"),wi=Symbol("listenerRemoved");let Li=!1,Wo=!1;function Fr(i){if(typeof i!="string"&&typeof i!="symbol"&&typeof i!="number")throw new TypeError("`eventName` must be a string, symbol, or number")}function Hi(i){if(typeof i!="function")throw new TypeError("listener must be a function")}function Cr(i,n){const r=Xr.get(i);if(!!r.has(n))return r.get(n)}function qr(i,n){const r=typeof n=="string"||typeof n=="symbol"||typeof n=="number"?n:Ti,f=rr.get(i);if(!!f.has(r))return f.get(r)}function l2(i,n,r){const f=rr.get(i);if(f.has(n))for(const Z of f.get(n))Z.enqueue(r);if(f.has(Ti)){const Z=Promise.all([n,r]);for(const x of f.get(Ti))x.enqueue(Z)}}function Ls(i,n){n=Array.isArray(n)?n:[n];let r=!1,f=()=>{},Z=[];const x={enqueue(H){Z.push(H),f()},finish(){r=!0,f()}};for(const H of n){let T=qr(i,H);T||(T=new Set,rr.get(i).set(H,T)),T.add(x)}return{async next(){return Z?Z.length===0?r?(Z=void 0,this.next()):(await new Promise(H=>{f=H}),this.next()):{done:!1,value:await Z.shift()}:{done:!0}},async return(H){Z=void 0;for(const T of n){const J=qr(i,T);J&&(J.delete(x),J.size===0&&rr.get(i).delete(T))}return f(),arguments.length>0?{done:!0,value:await H}:{done:!0}},[Symbol.asyncIterator](){return this}}}function Hs(i){if(i===void 0)return Fs;if(!Array.isArray(i))throw new TypeError("`methodNames` must be an array of strings");for(const n of i)if(!Fs.includes(n))throw typeof n!="string"?new TypeError("`methodNames` element must be a string"):new Error(`${n} is not Emittery method`);return i}const Jr=i=>i===Yi||i===wi;function Fi(i,n,r){if(Jr(n))try{Li=!0,i.emit(n,r)}finally{Li=!1}}class ur{static mixin(n,r){return r=Hs(r),f=>{if(typeof f!="function")throw new TypeError("`target` must be function");for(const H of r)if(f.prototype[H]!==void 0)throw new Error(`The property \`${H}\` already exists on \`target\``);function Z(){return Object.defineProperty(this,n,{enumerable:!1,value:new ur}),this[n]}Object.defineProperty(f.prototype,n,{enumerable:!1,get:Z});const x=H=>function(...T){return this[n][H](...T)};for(const H of r)Object.defineProperty(f.prototype,H,{enumerable:!1,value:x(H)});return f}}static get isDebugEnabled(){var r,f;if(typeof((r=globalThis.process)==null?void 0:r.env)!="object")return Wo;const{env:n}=(f=globalThis.process)!=null?f:{env:{}};return n.DEBUG==="emittery"||n.DEBUG==="*"||Wo}static set isDebugEnabled(n){Wo=n}constructor(n={}){var r;cr.set(this,new Set),Xr.set(this,new Map),rr.set(this,new Map),rr.get(this).set(Ti,new Set),this.debug=(r=n.debug)!=null?r:{},this.debug.enabled===void 0&&(this.debug.enabled=!1),this.debug.logger||(this.debug.logger=(f,Z,x,H)=>{try{H=JSON.stringify(H)}catch{H=`Object with the following keys failed to stringify: ${Object.keys(H).join(",")}`}(typeof x=="symbol"||typeof x=="number")&&(x=x.toString());const T=new Date,J=`${T.getHours()}:${T.getMinutes()}:${T.getSeconds()}.${T.getMilliseconds()}`;console.log(`[${J}][emittery:${f}][${Z}] Event Name: ${x}
|
|
122
|
-
data: ${
|
|
123
|
-
data: ${H}`)})}logIfDebugEnabled(n,r,f){(Vr.isDebugEnabled||this.debug.enabled)&&this.debug.logger(n,this.debug.name,r,f)}on(n,r){Bi(r),n=Array.isArray(n)?n:[n];for(const f of n){Er(f);let Z=Ur(this,f);Z||(Z=new Set,Wr.get(this).set(f,Z)),Z.add(r),this.logIfDebugEnabled("subscribe",f,void 0),Br(f)||Ki(this,Ni,{eventName:f,listener:r})}return this.off.bind(this,n,r)}off(n,r){Bi(r),n=Array.isArray(n)?n:[n];for(const f of n){Er(f);const Z=Ur(this,f);Z&&(Z.delete(r),Z.size===0&&Wr.get(this).delete(f)),this.logIfDebugEnabled("unsubscribe",f,void 0),Br(f)||Ki(this,Ei,{eventName:f,listener:r})}}once(n){let r;const f=new Promise(Z=>{r=this.on(n,x=>{r(),Z(x)})});return f.off=r,f}events(n){n=Array.isArray(n)?n:[n];for(const r of n)Er(r);return ks(this,n)}async emit(n,r){var f;if(Er(n),Br(n)&&!Ui)throw new TypeError("`eventName` cannot be meta event `listenerAdded` or `listenerRemoved`");this.logIfDebugEnabled("emit",n,r),d2(this,n,r);const Z=(f=Ur(this,n))!=null?f:new Set,x=ar.get(this),H=[...Z],T=Br(n)?[]:[...x];await Js,await Promise.all([...H.map(async J=>{if(Z.has(J))return J(r)}),...T.map(async J=>{if(x.has(J))return J(n,r)})])}async emitSerial(n,r){var f;if(Er(n),Br(n)&&!Ui)throw new TypeError("`eventName` cannot be meta event `listenerAdded` or `listenerRemoved`");this.logIfDebugEnabled("emitSerial",n,r);const Z=(f=Ur(this,n))!=null?f:new Set,x=ar.get(this),H=[...Z],T=[...x];await Js;for(const J of H)Z.has(J)&&await J(r);for(const J of T)x.has(J)&&await J(n,r)}onAny(n){return Bi(n),this.logIfDebugEnabled("subscribeAny",void 0,void 0),ar.get(this).add(n),Ki(this,Ni,{listener:n}),this.offAny.bind(this,n)}anyEvent(){return ks(this)}offAny(n){Bi(n),this.logIfDebugEnabled("unsubscribeAny",void 0,void 0),Ki(this,Ei,{listener:n}),ar.get(this).delete(n)}clearListeners(n){n=Array.isArray(n)?n:[n];for(const r of n)if(this.logIfDebugEnabled("clear",r,void 0),typeof r=="string"||typeof r=="symbol"||typeof r=="number"){const f=Ur(this,r);f&&f.clear();const Z=ei(this,r);if(Z){for(const x of Z)x.finish();Z.clear()}}else{ar.get(this).clear();for(const[f,Z]of Wr.get(this).entries())Z.clear(),Wr.get(this).delete(f);for(const[f,Z]of ir.get(this).entries()){for(const x of Z)x.finish();Z.clear(),ir.get(this).delete(f)}}}listenerCount(n){var r,f,Z,x,H,T;n=Array.isArray(n)?n:[n];let J=0;for(const et of n){if(typeof et=="string"){J+=ar.get(this).size+((f=(r=Ur(this,et))==null?void 0:r.size)!=null?f:0)+((x=(Z=ei(this,et))==null?void 0:Z.size)!=null?x:0)+((T=(H=ei(this))==null?void 0:H.size)!=null?T:0);continue}typeof et<"u"&&Er(et),J+=ar.get(this).size;for(const lt of Wr.get(this).values())J+=lt.size;for(const lt of ir.get(this).values())J+=lt.size}return J}bindMethods(n,r){if(typeof n!="object"||n===null)throw new TypeError("`target` must be an object");r=Ns(r);for(const f of r){if(n[f]!==void 0)throw new Error(`The property \`${f}\` already exists on \`target\``);Object.defineProperty(n,f,{enumerable:!1,value:this[f].bind(this)})}}}const Es=Object.getOwnPropertyNames(Vr.prototype).filter(i=>i!=="constructor");Object.defineProperty(Vr,"listenerAdded",{value:Ni,writable:!1,enumerable:!0,configurable:!1}),Object.defineProperty(Vr,"listenerRemoved",{value:Ei,writable:!1,enumerable:!0,configurable:!1});function h2(i){return i.onAny&&i.emit}function f2(i){return i.prototype.onAny&&i.prototype.emit}let m2=0;async function p2(i,n,r){const Z=f2(i)?new Vr:{},x=m2++;return Object.getOwnPropertyNames(i.prototype).forEach(H=>{Z[H]=(...T)=>Ci(n,$n.FORWARD,H,T,r)}),Z.terminate=async(...H)=>{const T=await Ci(n,$n.TERMINATE,"",H,r);return delete Ji[x],n.terminate(),Z.workerContext.worker=void 0,T},Z.workerContext={id:x,worker:n,resolvers:r},Ji[x]=Z,Z}async function b2(i,n){const r=new Map;let f;const Z=await a2(i,n,r,(x,H)=>{f!=null&&f.emit&&(f==null||f.emit(x,H))});return f=await p2(i,Z,r),f}async function y2(i,n){const{functionName:r,args:f}=i;if(!n.instance)throw"instance not initialized";if(!r)throw"missing function name to call";if(!n.instance[r])throw`undefined function [${r}] in class ${n.instance.constructor.workerId}`;Nr(i,await n.instance[r](...f!=null?f:[]))}const Us=Vo("registeredWorkers",{});function g2(i,n){n.workerId=i,Ro()&&(Us[n.workerId]=n)}function Z2(i,n){if(!i.args)throw"Missing className while initializing worker";const[r,f]=i.args,Z=Us[r];if(Z)n.instance=new Z(i.args.slice(1));else throw`unknown worker class ${r}`;ti(f,kr),h2(n.instance)&&n.instance.onAny((x,H)=>{Nr({type:$n.EVENT},{name:x,data:H})}),Nr(i,typeof n.instance!==void 0)}async function v2(i,n){const{args:r}=i;if(!n.instance)throw"instance not initialized";let f;n.instance.terminate&&(f=await n.instance.terminate(...r!=null?r:[])),Nr(i,f)}function G2(i){if(!i.args)throw"Missing globals while syncing";ti(i.args[0],kr),Nr(i,{})}function X2(){const i={};onmessage=async n=>{const r=n.data;switch(r.type){case $n.INIT:Z2(r,i);break;case $n.FORWARD:y2(r,i);break;case $n.TERMINATE:v2(r,i);break;case $n.GLOBALS_SYNC:G2(r);break}}}Ro()&&X2();class Bs{static async createVideoReadable(n){return new Promise((r,f)=>{const Z=document.createElement("video");let x=new AbortController,H=new AbortController;Z.addEventListener("canplay",()=>{x.abort(),Z.muted=!0,Z.loop=!0,Z.play().then(()=>{try{const T=Z.captureStream(),J=new MediaStreamTrackProcessor(T.getVideoTracks()[0]);r(J.readable)}catch(T){f(T)}})},{once:!0,signal:H.signal}),Z.addEventListener("error",T=>{H.abort(),f("loading error:"+T)},{once:!0,signal:x.signal}),Z.crossOrigin="anonymous",Z.src=n})}static async createImageCanvas(n){const f=await(await fetch(n)).blob();return await createImageBitmap(f)}}var W2=Object.defineProperty,V2=(i,n,r)=>n in i?W2(i,n,{enumerable:!0,configurable:!0,writable:!0,value:r}):i[n]=r,R2=(i,n,r)=>(V2(i,typeof n!="symbol"?n+"":n,r),r);const I2="hlg.tokbox.com/prod/logging/vcp_webrtc",x2="https://",S2=1e4;let Mi;const T2=new Uint8Array(16);function Y2(){if(!Mi&&(Mi=typeof crypto<"u"&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto),!Mi))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return Mi(T2)}const Kn=[];for(let i=0;i<256;++i)Kn.push((i+256).toString(16).slice(1));function w2(i,n=0){return(Kn[i[n+0]]+Kn[i[n+1]]+Kn[i[n+2]]+Kn[i[n+3]]+"-"+Kn[i[n+4]]+Kn[i[n+5]]+"-"+Kn[i[n+6]]+Kn[i[n+7]]+"-"+Kn[i[n+8]]+Kn[i[n+9]]+"-"+Kn[i[n+10]]+Kn[i[n+11]]+Kn[i[n+12]]+Kn[i[n+13]]+Kn[i[n+14]]+Kn[i[n+15]]).toLowerCase()}const L2=typeof crypto<"u"&&crypto.randomUUID&&crypto.randomUUID.bind(crypto),Ks={randomUUID:L2};function H2(i,n,r){if(Ks.randomUUID&&!n&&!i)return Ks.randomUUID();i=i||{};const f=i.random||(i.rng||Y2)();if(f[6]=f[6]&15|64,f[8]=f[8]&63|128,n){r=r||0;for(let Z=0;Z<16;++Z)n[r+Z]=f[Z];return n}return w2(f)}function xo(i,n){globalThis.vonage||(globalThis.vonage={}),globalThis.vonage.workerizer||(globalThis.vonage.workerizer={});let r=globalThis.vonage.workerizer;return r[i]||(r[i]=n),r[i]}const dr=xo("globals",{});var Rr=(i=>(i.INIT="INIT",i.FORWARD="FORWARD",i.TERMINATE="TERMINATE",i.GLOBALS_SYNC="GLOBALS_SYNC",i))(Rr||{});function Ms(i){return[ImageBitmap,ReadableStream,WritableStream].some(n=>i instanceof n)}let F2=0;function C2(i,n,r,f,Z){const x=F2++;return i.postMessage({id:x,type:n,functionName:r,args:f},f.filter(H=>Ms(H))),new Promise(H=>{Z==null||Z.set(x,H)})}function ni(i,n){const{id:r,type:f}=i,Z=Array.isArray(n)?n:[n];postMessage({id:r,type:f,result:n},Z.filter(x=>Ms(x)))}const As=xo("workerized",{});function zs(){return typeof WorkerGlobalScope<"u"&&self instanceof WorkerGlobalScope}async function J2(){if(zs())ni({type:Rr.GLOBALS_SYNC},dr);else{const i=[];for(const n in As){const{worker:r,resolvers:f}=As[n].workerContext;r&&i.push(C2(r,Rr.GLOBALS_SYNC,"",[dr],f))}await Promise.all(i)}}function Ai(i,n){if(Array.isArray(n))n.splice(0,n.length);else if(typeof n=="object")for(const r in n)delete n[r];for(const r in i)Array.isArray(i[r])?(n[r]=[],Ai(i[r],n[r])):typeof i[r]=="object"?(n[r]={},Ai(i[r],n[r])):n[r]=i[r]}async function k2(i,n){const{functionName:r,args:f}=i;if(!n.instance)throw"instance not initialized";if(!r)throw"missing function name to call";if(!n.instance[r])throw`undefined function [${r}] in class ${n.instance.constructor.workerId}`;ni(i,await n.instance[r](...f!=null?f:[]))}const N2=xo("registeredWorkers",{});function E2(i,n){if(!i.args)throw"Missing className while initializing worker";const[r,f]=i.args,Z=N2[r];if(Z)n.instance=new Z(i.args.slice(1));else throw`unknown worker class ${r}`;Ai(f,dr),ni(i,typeof n.instance!==void 0)}async function U2(i,n){const{args:r}=i;if(!n.instance)throw"instance not initialized";let f;n.instance.terminate&&(f=await n.instance.terminate(...r!=null?r:[])),ni(i,f)}function B2(i){if(!i.args)throw"Missing globals while syncing";Ai(i.args[0],dr),ni(i,{})}function K2(){const i={};onmessage=async n=>{const r=n.data;switch(r.type){case Rr.INIT:E2(r,i);break;case Rr.FORWARD:k2(r,i);break;case Rr.TERMINATE:U2(r,i);break;case Rr.GLOBALS_SYNC:B2(r);break}}}zs()&&K2();function M2(i,n){return dr[i]||(dr[i]=n),[()=>dr[i],async r=>{dr[i]=r,await J2()}]}function A2(i,n){return M2(i,n)}const[z2,$3]=A2("metadata");function So(){return z2()}class j2{constructor(n){R2(this,"uuid",H2()),this.config=n}async send(n){var r,f,Z;const{appId:x,sourceType:H}=(r=So())!=null?r:{};if(!x||!H)return"metadata missing";const T=new AbortController,J=setTimeout(()=>T.abort(),S2);return await((Z=(f=this.config)==null?void 0:f.fetch)!=null?Z:fetch)(this.getUrl(),{method:"POST",headers:this.getHeaders(),body:JSON.stringify(this.buildReport(n)),signal:T.signal}),clearTimeout(J),"success"}getUrl(){var n;let r=(n=So().proxyUrl)!=null?n:x2;return r+=(r.at(-1)==="/"?"":"/")+I2,r}getHeaders(){return{"Content-Type":"application/json"}}buildReport(n){const r=So();return{guid:this.uuid,...n,applicationId:r.appId,timestamp:Date.now(),proxyUrl:r.proxyUrl,source:r.sourceType}}}const P2="5.1.2";class To{constructor(){gt(this,"canvas");gt(this,"context");const n=new OffscreenCanvas(0,0),r=n.getContext("2d");if(!r)throw"Fail to retrieve webgl2 context";this.canvas=n,this.context=r}setFlickeringOptions(n){}enablePostProcessing(){}disablePostProcessing(){}async profileWebgl(n){return[]}async render(n,r){return this.canvas}resizeCanvas(n){const{width:r,height:f}=n;this.canvas.width=r,this.canvas.height=f}renderSilhouette(n,r,f="none"){const{width:Z,height:x}=n;this.context.save(),this.context.drawImage(r,0,0,r.width,r.height,0,0,Z,x),this.context.globalCompositeOperation="source-in",this.context.filter=f,this.context.drawImage(n,0,0,Z,x,0,0,this.canvas.width,this.canvas.height),this.context.restore()}}class O2 extends To{constructor(n){super(),this.radius=n}async render(n,r){return super.resizeCanvas(n),this.renderSilhouette(n,r),this.context.save(),this.context.filter=`blur(${this.radius}px)`,this.context.globalCompositeOperation="destination-over",this.context.drawImage(n,0,0,n.width,n.height),this.context.restore(),super.render(n,r)}}class _2 extends To{constructor(n){super(),this.radius=n}async render(n,r){return super.resizeCanvas(n),this.renderSilhouette(n,r,`blur(${this.radius}px)`),this.context.save(),this.context.filter="none",this.context.globalCompositeOperation="destination-over",this.context.drawImage(n,0,0,n.width,n.height),this.context.restore(),super.render(n,r)}}class Q2 extends To{constructor(){super(...arguments);gt(this,"backgroundImage")}setBackgroundImage(r){this.backgroundImage=r}async render(r,f){return super.resizeCanvas(r),this.renderSilhouette(r,f),this.backgroundImage&&(this.context.save(),this.context.filter="none",this.context.globalCompositeOperation="destination-over",this.context.drawImage(this.backgroundImage,0,0,this.backgroundImage.width,this.backgroundImage.height,0,0,r.width,r.height),this.context.restore()),super.render(r,f)}}/* @license twgl.js 5.5.1 Copyright (c) 2015, Gregg Tavares All Rights Reserved.
|
|
121
|
+
`+R.getProgramInfoLog(A));w=s.m=A,R.useProgram(w),N=R.getUniformLocation(w,"sampler0"),s.j={I:R.getAttribLocation(w,"aVertex"),H:R.getAttribLocation(w,"aTex"),da:N},s.s=R.createBuffer(),R.bindBuffer(R.ARRAY_BUFFER,s.s),R.enableVertexAttribArray(s.j.I),R.vertexAttribPointer(s.j.I,2,R.FLOAT,!1,0,0),R.bufferData(R.ARRAY_BUFFER,new Float32Array([-1,-1,-1,1,1,1,1,-1]),R.STATIC_DRAW),R.bindBuffer(R.ARRAY_BUFFER,null),s.o=R.createBuffer(),R.bindBuffer(R.ARRAY_BUFFER,s.o),R.enableVertexAttribArray(s.j.H),R.vertexAttribPointer(s.j.H,2,R.FLOAT,!1,0,0),R.bufferData(R.ARRAY_BUFFER,new Float32Array([0,1,0,0,1,0,1,1]),R.STATIC_DRAW),R.bindBuffer(R.ARRAY_BUFFER,null),R.uniform1i(N,0)}w=s.j,R.useProgram(s.m),R.canvas.width=X.width,R.canvas.height=X.height,R.viewport(0,0,X.width,X.height),R.activeTexture(R.TEXTURE0),s.h.bindTexture2d(X.glName),R.enableVertexAttribArray(w.I),R.bindBuffer(R.ARRAY_BUFFER,s.s),R.vertexAttribPointer(w.I,2,R.FLOAT,!1,0,0),R.enableVertexAttribArray(w.H),R.bindBuffer(R.ARRAY_BUFFER,s.o),R.vertexAttribPointer(w.H,2,R.FLOAT,!1,0,0),R.bindFramebuffer(R.DRAW_FRAMEBUFFER?R.DRAW_FRAMEBUFFER:R.FRAMEBUFFER,null),R.clearColor(0,0,0,0),R.clear(R.COLOR_BUFFER_BIT),R.colorMask(!0,!0,!0,!0),R.drawArrays(R.TRIANGLE_FAN,0,4),R.disableVertexAttribArray(w.I),R.disableVertexAttribArray(w.H),R.bindBuffer(R.ARRAY_BUFFER,null),s.h.bindTexture2d(0)}function Tt(s){this.g=s}var Et=new Uint8Array([0,97,115,109,1,0,0,0,1,4,1,96,0,0,3,2,1,0,10,9,1,7,0,65,0,253,15,26,11]);function Dt(s,X){return X+s}function ae(s,X){window[s]=X}function pe(s){var X=document.createElement("script");return X.setAttribute("src",s),X.setAttribute("crossorigin","anonymous"),new Promise(function(R){X.addEventListener("load",function(){R()},!1),X.addEventListener("error",function(){R()},!1),document.body.appendChild(X)})}function ge(){return Zt(function(s){switch(s.g){case 1:return s.m=2,P(s,WebAssembly.instantiate(Et),4);case 4:s.g=3,s.m=0;break;case 2:return s.m=0,s.j=null,s.return(!1);case 3:return s.return(!0)}})}function Ne(s){if(this.g=s,this.listeners={},this.j={},this.F={},this.m={},this.s={},this.G=this.o=this.R=!0,this.C=Promise.resolve(),this.P="",this.B={},this.locateFile=s&&s.locateFile||Dt,typeof window=="object")var X=window.location.pathname.toString().substring(0,window.location.pathname.toString().lastIndexOf("/"))+"/";else if(typeof location<"u")X=location.pathname.toString().substring(0,location.pathname.toString().lastIndexOf("/"))+"/";else throw Error("solutions can only be loaded on a web page or in a web worker");if(this.S=X,s.options){X=T(Object.keys(s.options));for(var R=X.next();!R.done;R=X.next()){R=R.value;var w=s.options[R].default;w!==void 0&&(this.j[R]=typeof w=="function"?w():w)}}}i=Ne.prototype,i.close=function(){return this.i&&this.i.delete(),Promise.resolve()};function h(s){var X,R,w,N,A,B,nt,$,yt,Xt,Kt;return Zt(function(xt){switch(xt.g){case 1:return s.R?(X=s.g.files===void 0?[]:typeof s.g.files=="function"?s.g.files(s.j):s.g.files,P(xt,ge(),2)):xt.return();case 2:if(R=xt.h,typeof window=="object")return ae("createMediapipeSolutionsWasm",{locateFile:s.locateFile}),ae("createMediapipeSolutionsPackedAssets",{locateFile:s.locateFile}),B=X.filter(function(ht){return ht.data!==void 0}),nt=X.filter(function(ht){return ht.data===void 0}),$=Promise.all(B.map(function(ht){var Wt=H(s,ht.url);if(ht.path!==void 0){var It=ht.path;Wt=Wt.then(function(wt){return s.overrideFile(It,wt),Promise.resolve(wt)})}return Wt})),yt=Promise.all(nt.map(function(ht){return ht.simd===void 0||ht.simd&&R||!ht.simd&&!R?pe(s.locateFile(ht.url,s.S)):Promise.resolve()})).then(function(){var ht,Wt,It;return Zt(function(wt){if(wt.g==1)return ht=window.createMediapipeSolutionsWasm,Wt=window.createMediapipeSolutionsPackedAssets,It=s,P(wt,ht(Wt),2);It.h=wt.h,wt.g=0})}),Xt=function(){return Zt(function(ht){return s.g.graph&&s.g.graph.url?ht=P(ht,H(s,s.g.graph.url),0):(ht.g=0,ht=void 0),ht})}(),P(xt,Promise.all([yt,$,Xt]),7);if(typeof importScripts!="function")throw Error("solutions can only be loaded on a web page or in a web worker");return w=X.filter(function(ht){return ht.simd===void 0||ht.simd&&R||!ht.simd&&!R}).map(function(ht){return s.locateFile(ht.url,s.S)}),importScripts.apply(null,J(w)),N=s,P(xt,createMediapipeSolutionsWasm(Module),6);case 6:N.h=xt.h,s.l=new OffscreenCanvas(1,1),s.h.canvas=s.l,A=s.h.GL.createContext(s.l,{antialias:!1,alpha:!1,ba:typeof WebGL2RenderingContext<"u"?2:1}),s.h.GL.makeContextCurrent(A),xt.g=4;break;case 7:if(s.l=document.createElement("canvas"),Kt=s.l.getContext("webgl2",{}),!Kt&&(Kt=s.l.getContext("webgl",{}),!Kt))return alert("Failed to create WebGL canvas context when passing video frame."),xt.return();s.D=Kt,s.h.canvas=s.l,s.h.createContext(s.l,!0,!0,{});case 4:s.i=new s.h.SolutionWasm,s.R=!1,xt.g=0}})}function y(s){var X,R,w,N,A,B,nt,$;return Zt(function(yt){if(yt.g==1){if(s.g.graph&&s.g.graph.url&&s.P===s.g.graph.url)return yt.return();if(s.o=!0,!s.g.graph||!s.g.graph.url){yt.g=2;return}return s.P=s.g.graph.url,P(yt,H(s,s.g.graph.url),3)}for(yt.g!=2&&(X=yt.h,s.i.loadGraph(X)),R=T(Object.keys(s.B)),w=R.next();!w.done;w=R.next())N=w.value,s.i.overrideFile(N,s.B[N]);if(s.B={},s.g.listeners)for(A=T(s.g.listeners),B=A.next();!B.done;B=A.next())nt=B.value,M(s,nt);$=s.j,s.j={},s.setOptions($),yt.g=0})}i.reset=function(){var s=this;return Zt(function(X){s.i&&(s.i.reset(),s.m={},s.s={}),X.g=0})},i.setOptions=function(s,X){var R=this;if(X=X||this.g.options){for(var w=[],N=[],A={},B=T(Object.keys(s)),nt=B.next();!nt.done;A={K:A.K,L:A.L},nt=B.next()){var $=nt.value;$ in this.j&&this.j[$]===s[$]||(this.j[$]=s[$],nt=X[$],nt!==void 0&&(nt.onChange&&(A.K=nt.onChange,A.L=s[$],w.push(function(yt){return function(){var Xt;return Zt(function(Kt){if(Kt.g==1)return P(Kt,yt.K(yt.L),2);Xt=Kt.h,Xt===!0&&(R.o=!0),Kt.g=0})}}(A))),nt.graphOptionXref&&($={valueNumber:nt.type===1?s[$]:0,valueBoolean:nt.type===0?s[$]:!1,valueString:nt.type===2?s[$]:""},nt=Object.assign(Object.assign(Object.assign({},{calculatorName:"",calculatorIndex:0}),nt.graphOptionXref),$),N.push(nt))))}(w.length!==0||N.length!==0)&&(this.o=!0,this.A=(this.A===void 0?[]:this.A).concat(N),this.v=(this.v===void 0?[]:this.v).concat(w))}};function G(s){var X,R,w,N,A,B,nt;return Zt(function($){switch($.g){case 1:if(!s.o)return $.return();if(!s.v){$.g=2;break}X=T(s.v),R=X.next();case 3:if(R.done){$.g=5;break}return w=R.value,P($,w(),4);case 4:R=X.next(),$.g=3;break;case 5:s.v=void 0;case 2:if(s.A){for(N=new s.h.GraphOptionChangeRequestList,A=T(s.A),B=A.next();!B.done;B=A.next())nt=B.value,N.push_back(nt);s.i.changeOptions(N),N.delete(),s.A=void 0}s.o=!1,$.g=0}})}i.initialize=function(){var s=this;return Zt(function(X){return X.g==1?P(X,h(s),2):X.g!=3?P(X,y(s),3):P(X,G(s),0)})};function H(s,X){var R,w;return Zt(function(N){return X in s.F?N.return(s.F[X]):(R=s.locateFile(X,""),w=fetch(R).then(function(A){return A.arrayBuffer()}),s.F[X]=w,N.return(w))})}i.overrideFile=function(s,X){this.i?this.i.overrideFile(s,X):this.B[s]=X},i.clearOverriddenFiles=function(){this.B={},this.i&&this.i.clearOverriddenFiles()},i.send=function(s,X){var R=this,w,N,A,B,nt,$,yt,Xt,Kt;return Zt(function(xt){switch(xt.g){case 1:return R.g.inputs?(w=1e3*(X==null?performance.now():X),P(xt,R.C,2)):xt.return();case 2:return P(xt,R.initialize(),3);case 3:for(N=new R.h.PacketDataList,A=T(Object.keys(s)),B=A.next();!B.done;B=A.next())if(nt=B.value,$=R.g.inputs[nt]){t:{var ht=s[nt];switch($.type){case"video":var Wt=R.m[$.stream];if(Wt||(Wt=new Jt(R.h,R.D),R.m[$.stream]=Wt),Wt.l===0&&(Wt.l=Wt.h.createTexture()),typeof HTMLVideoElement<"u"&&ht instanceof HTMLVideoElement)var It=ht.videoWidth,wt=ht.videoHeight;else typeof HTMLImageElement<"u"&&ht instanceof HTMLImageElement?(It=ht.naturalWidth,wt=ht.naturalHeight):(It=ht.width,wt=ht.height);wt={glName:Wt.l,width:It,height:wt},It=Wt.g,It.canvas.width=wt.width,It.canvas.height=wt.height,It.activeTexture(It.TEXTURE0),Wt.h.bindTexture2d(Wt.l),It.texImage2D(It.TEXTURE_2D,0,It.RGBA,It.RGBA,It.UNSIGNED_BYTE,ht),Wt.h.bindTexture2d(0),Wt=wt;break t;case"detections":for(Wt=R.m[$.stream],Wt||(Wt=new Tt(R.h),R.m[$.stream]=Wt),Wt.data||(Wt.data=new Wt.g.DetectionListData),Wt.data.reset(ht.length),wt=0;wt<ht.length;++wt){It=ht[wt];var Ft=Wt.data,l=Ft.setBoundingBox,v=wt,x=It.T,Y=new E;if(ut(Y,1,x.Y),ut(Y,2,x.Z),ut(Y,3,x.height),ut(Y,4,x.width),ut(Y,5,x.rotation),ut(Y,6,x.W),x=fn(Y,ot),l.call(Ft,v,x),It.O)for(Ft=0;Ft<It.O.length;++Ft){Y=It.O[Ft];var k=!!Y.visibility;l=Wt.data,v=l.addNormalizedLandmark,x=wt,Y=Object.assign(Object.assign({},Y),{visibility:k?Y.visibility:0}),k=new Tn,ut(k,1,Y.x),ut(k,2,Y.y),ut(k,3,Y.z),Y.visibility&&ut(k,4,Y.visibility),Y=fn(k,Qn),v.call(l,x,Y)}if(It.M)for(Ft=0;Ft<It.M.length;++Ft)l=Wt.data,v=l.addClassification,x=wt,Y=It.M[Ft],k=new In,ut(k,2,Y.X),Y.index&&ut(k,1,Y.index),Y.label&&ut(k,3,Y.label),Y.displayName&&ut(k,4,Y.displayName),Y=fn(k,En),v.call(l,x,Y)}Wt=Wt.data;break t;default:Wt={}}}switch(yt=Wt,Xt=$.stream,$.type){case"video":N.pushTexture2d(Object.assign(Object.assign({},yt),{stream:Xt,timestamp:w}));break;case"detections":Kt=yt,Kt.stream=Xt,Kt.timestamp=w,N.pushDetectionList(Kt);break;default:throw Error("Unknown input config type: '"+$.type+"'")}}return R.i.send(N),P(xt,R.C,4);case 4:N.delete(),xt.g=0}})};function K(s,X,R){var w,N,A,B,nt,$,yt,Xt,Kt,xt,ht,Wt,It,wt;return Zt(function(Ft){switch(Ft.g){case 1:if(!R)return Ft.return(X);for(w={},N=0,A=T(Object.keys(R)),B=A.next();!B.done;B=A.next())nt=B.value,$=R[nt],typeof $!="string"&&$.type==="texture"&&X[$.stream]!==void 0&&++N;1<N&&(s.G=!1),yt=T(Object.keys(R)),B=yt.next();case 2:if(B.done){Ft.g=4;break}if(Xt=B.value,Kt=R[Xt],typeof Kt=="string")return It=w,wt=Xt,P(Ft,_(s,Xt,X[Kt]),14);if(xt=X[Kt.stream],Kt.type==="detection_list"){if(xt){for(var l=xt.getRectList(),v=xt.getLandmarksList(),x=xt.getClassificationsList(),Y=[],k=0;k<l.size();++k){var o=bn(l.get(k),E,j);o={T:{Y:it(o,1),Z:it(o,2),height:it(o,3),width:it(o,4),rotation:it(o,5,0),W:St(o,6)},O:Ut(v.get(k)),M:bt(bn(x.get(k),Zn,Kn))},Y.push(o)}l=Y}else l=[];w[Xt]=l,Ft.g=7;break}if(Kt.type==="proto_list"){if(xt){for(l=Array(xt.size()),v=0;v<xt.size();v++)l[v]=xt.get(v);xt.delete()}else l=[];w[Xt]=l,Ft.g=7;break}if(xt===void 0){Ft.g=3;break}if(Kt.type==="float_list"){w[Xt]=xt,Ft.g=7;break}if(Kt.type==="proto"){w[Xt]=xt,Ft.g=7;break}if(Kt.type!=="texture")throw Error("Unknown output config type: '"+Kt.type+"'");return ht=s.s[Xt],ht||(ht=new Jt(s.h,s.D),s.s[Xt]=ht),P(Ft,$t(ht,xt,s.G),13);case 13:Wt=Ft.h,w[Xt]=Wt;case 7:Kt.transform&&w[Xt]&&(w[Xt]=Kt.transform(w[Xt])),Ft.g=3;break;case 14:It[wt]=Ft.h;case 3:B=yt.next(),Ft.g=2;break;case 4:return Ft.return(w)}})}function _(s,X,R){var w;return Zt(function(N){return typeof R=="number"||R instanceof Uint8Array||R instanceof s.h.Uint8BlobList?N.return(R):R instanceof s.h.Texture2dDataOut?(w=s.s[X],w||(w=new Jt(s.h,s.D),s.s[X]=w),N.return($t(w,R,s.G))):N.return(void 0)})}function M(s,X){for(var R=X.name||"$",w=[].concat(J(X.wants)),N=new s.h.StringList,A=T(X.wants),B=A.next();!B.done;B=A.next())N.push_back(B.value);A=s.h.PacketListener.implement({onResults:function(nt){for(var $={},yt=0;yt<X.wants.length;++yt)$[w[yt]]=nt.get(yt);var Xt=s.listeners[R];Xt&&(s.C=K(s,$,X.outs).then(function(Kt){Kt=Xt(Kt);for(var xt=0;xt<X.wants.length;++xt){var ht=$[w[xt]];typeof ht=="object"&&ht.hasOwnProperty&&ht.hasOwnProperty("delete")&&ht.delete()}Kt&&(s.C=Kt)}))}}),s.i.attachMultiListener(N,A),N.delete()}i.onResults=function(s,X){this.listeners[X||"$"]=s},Ht("Solution",Ne),Ht("OptionType",{BOOL:0,NUMBER:1,$:2,0:"BOOL",1:"NUMBER",2:"STRING"});function q(s){switch(s===void 0&&(s=0),s){case 1:return"pose_landmark_full.tflite";case 2:return"pose_landmark_heavy.tflite";default:return"pose_landmark_lite.tflite"}}function ct(s){var X=this;s=s||{},this.g=new Ne({locateFile:s.locateFile,files:function(R){return[{url:"pose_solution_packed_assets_loader.js"},{simd:!1,url:"pose_solution_wasm_bin.js"},{simd:!0,url:"pose_solution_simd_wasm_bin.js"},{data:!0,url:q(R.modelComplexity)}]},graph:{url:"pose_web.binarypb"},listeners:[{wants:["pose_landmarks","world_landmarks","segmentation_mask","image_transformed"],outs:{image:{type:"texture",stream:"image_transformed"},poseLandmarks:{type:"proto",stream:"pose_landmarks",transform:Ut},poseWorldLandmarks:{type:"proto",stream:"world_landmarks",transform:Ut},segmentationMask:{type:"texture",stream:"segmentation_mask"}}}],inputs:{image:{type:"video",stream:"input_frames_gpu"}},options:{useCpuInference:{type:0,graphOptionXref:{calculatorType:"InferenceCalculator",fieldName:"use_cpu_inference"},default:"iPad Simulator;iPhone Simulator;iPod Simulator;iPad;iPhone;iPod".split(";").includes(navigator.platform)||navigator.userAgent.includes("Mac")&&"ontouchend"in document},selfieMode:{type:0,graphOptionXref:{calculatorType:"GlScalerCalculator",calculatorIndex:1,fieldName:"flip_horizontal"}},modelComplexity:{type:1,graphOptionXref:{calculatorType:"ConstantSidePacketCalculator",calculatorName:"ConstantSidePacketCalculatorModelComplexity",fieldName:"int_value"},onChange:function(R){var w,N,A;return Zt(function(B){return B.g==1?(w=q(R),N="third_party/mediapipe/modules/pose_landmark/"+w,P(B,H(X.g,w),2)):(A=B.h,X.g.overrideFile(N,A),B.return(!0))})}},smoothLandmarks:{type:0,graphOptionXref:{calculatorType:"ConstantSidePacketCalculator",calculatorName:"ConstantSidePacketCalculatorSmoothLandmarks",fieldName:"bool_value"}},enableSegmentation:{type:0,graphOptionXref:{calculatorType:"ConstantSidePacketCalculator",calculatorName:"ConstantSidePacketCalculatorEnableSegmentation",fieldName:"bool_value"}},smoothSegmentation:{type:0,graphOptionXref:{calculatorType:"ConstantSidePacketCalculator",calculatorName:"ConstantSidePacketCalculatorSmoothSegmentation",fieldName:"bool_value"}},minDetectionConfidence:{type:1,graphOptionXref:{calculatorType:"TensorsToDetectionsCalculator",calculatorName:"poselandmarkgpu__posedetectiongpu__TensorsToDetectionsCalculator",fieldName:"min_score_thresh"}},minTrackingConfidence:{type:1,graphOptionXref:{calculatorType:"ThresholdingCalculator",calculatorName:"poselandmarkgpu__poselandmarkbyroigpu__tensorstoposelandmarksandsegmentation__ThresholdingCalculator",fieldName:"threshold"}}}})}i=ct.prototype,i.reset=function(){this.g.reset()},i.close=function(){return this.g.close(),Promise.resolve()},i.onResults=function(s){this.g.onResults(s)},i.initialize=function(){var s=this;return Zt(function(X){return P(X,s.g.initialize(),0)})},i.send=function(s,X){var R=this;return Zt(function(w){return P(w,R.g.send(s,X),0)})},i.setOptions=function(s){this.g.setOptions(s)},Ht("Pose",ct),Ht("POSE_CONNECTIONS",[[0,1],[1,2],[2,3],[3,7],[0,4],[4,5],[5,6],[6,8],[9,10],[11,12],[11,13],[13,15],[15,17],[15,19],[15,21],[17,19],[12,14],[14,16],[16,18],[16,20],[16,22],[18,20],[11,23],[12,24],[23,24],[23,25],[24,26],[25,27],[26,28],[27,29],[28,30],[29,31],[30,32],[27,31],[28,32]]),Ht("POSE_LANDMARKS",{NOSE:0,LEFT_EYE_INNER:1,LEFT_EYE:2,LEFT_EYE_OUTER:3,RIGHT_EYE_INNER:4,RIGHT_EYE:5,RIGHT_EYE_OUTER:6,LEFT_EAR:7,RIGHT_EAR:8,LEFT_RIGHT:9,RIGHT_LEFT:10,LEFT_SHOULDER:11,RIGHT_SHOULDER:12,LEFT_ELBOW:13,RIGHT_ELBOW:14,LEFT_WRIST:15,RIGHT_WRIST:16,LEFT_PINKY:17,RIGHT_PINKY:18,LEFT_INDEX:19,RIGHT_INDEX:20,LEFT_THUMB:21,RIGHT_THUMB:22,LEFT_HIP:23,RIGHT_HIP:24,LEFT_KNEE:25,RIGHT_KNEE:26,LEFT_ANKLE:27,RIGHT_ANKLE:28,LEFT_HEEL:29,RIGHT_HEEL:30,LEFT_FOOT_INDEX:31,RIGHT_FOOT_INDEX:32}),Ht("POSE_LANDMARKS_LEFT",{LEFT_EYE_INNER:1,LEFT_EYE:2,LEFT_EYE_OUTER:3,LEFT_EAR:7,LEFT_RIGHT:9,LEFT_SHOULDER:11,LEFT_ELBOW:13,LEFT_WRIST:15,LEFT_PINKY:17,LEFT_INDEX:19,LEFT_THUMB:21,LEFT_HIP:23,LEFT_KNEE:25,LEFT_ANKLE:27,LEFT_HEEL:29,LEFT_FOOT_INDEX:31}),Ht("POSE_LANDMARKS_RIGHT",{RIGHT_EYE_INNER:4,RIGHT_EYE:5,RIGHT_EYE_OUTER:6,RIGHT_EAR:8,RIGHT_LEFT:10,RIGHT_SHOULDER:12,RIGHT_ELBOW:14,RIGHT_WRIST:16,RIGHT_PINKY:18,RIGHT_INDEX:20,RIGHT_THUMB:22,RIGHT_HIP:24,RIGHT_KNEE:26,RIGHT_ANKLE:28,RIGHT_HEEL:30,RIGHT_FOOT_INDEX:32}),Ht("POSE_LANDMARKS_NEUTRAL",{NOSE:0}),Ht("VERSION","0.5.1635988162")}).call(Ri);const ir=class{constructor(){gt(this,"mediapipeMap_",new Map)}getVersion(n){switch(n){case"face_detection":return Xi.VERSION;case"face_mesh":return Wi.VERSION;case"hands":return vi.VERSION;case"holistic":return Gi.VERSION;case"objectron":return Vi.VERSION;case"selfie_segmentation":return Zi.VERSION;case"pose":return Ri.VERSION;default:return""}}initialize(n){return new Promise(async(r,f)=>{if(n.mediaPipeModelConfigArray.length==0){f("no model was selected");return}for(let Z=0;Z<n.mediaPipeModelConfigArray.length;Z++){const I=n.mediaPipeModelConfigArray[Z];if(this.mediapipeMap_.has(I.modelType)){f("setting same type is not supported");return}if(typeof I.listener!="function"){f(`[${I.modelType}] ResultsListener must be provided`);return}let F;switch(I.modelType){case"face_mesh":F=new Wi.FaceMesh({locateFile:(T,J)=>(I.assetsUri||ir.defaultAssetsBaseUrl+"face_mesh/"+this.getVersion("face_mesh"))+"/"+T});break;case"face_detection":F=new Xi.FaceDetection({locateFile:(T,J)=>(I.assetsUri||ir.defaultAssetsBaseUrl+"face_detection/"+this.getVersion("face_detection"))+"/"+T});break;case"hands":F=new vi.Hands({locateFile:(T,J)=>(I.assetsUri||ir.defaultAssetsBaseUrl+"hands/"+this.getVersion("hands"))+"/"+T});break;case"holistic":F=new Gi.Holistic({locateFile:(T,J)=>(I.assetsUri||ir.defaultAssetsBaseUrl+"holistic/"+this.getVersion("holistic"))+"/"+T});break;case"objectron":F=new Vi.Objectron({locateFile:(T,J)=>(I.assetsUri||ir.defaultAssetsBaseUrl+"objectron/"+this.getVersion("objectron"))+"/"+T});break;case"selfie_segmentation":F=new Zi.SelfieSegmentation({locateFile:(T,J)=>(I.assetsUri||ir.defaultAssetsBaseUrl+"selfie_segmentation/"+this.getVersion("selfie_segmentation"))+"/"+T});break;case"pose":F=new Ri.Pose({locateFile:(T,J)=>(I.assetsUri||ir.defaultAssetsBaseUrl+"pose/"+this.getVersion("pose"))+"/"+T});break;default:f("unknown model type");return}F.onResults(I.listener),I.options&&F.setOptions(I.options);try{await F.initialize(),this.mediapipeMap_.set(I.modelType,F)}catch(T){f(T);return}}r()})}close(n){return new Promise((r,f)=>{let Z=[];if(n){let I=this.mediapipeMap_.get(n);if(I)this.mediapipeMap_.delete(n),Z.push(I.close());else{f("model not exit");return}}else{for(const[I,F]of this.mediapipeMap_.entries())Z.push(F.close());this.mediapipeMap_.clear()}Promise.all(Z).then(()=>{r()}).catch(I=>{f(I)})})}send(n,r){return new Promise((f,Z)=>{let I=[];if(r){let F=this.mediapipeMap_.get(r);if(F)I.push(F.send({image:n}));else{Z("model not exit");return}}else for(const[F,T]of this.mediapipeMap_.entries())I.push(T.send({image:n}));Promise.all(I).then(()=>{f()}).catch(F=>{Z(F)})})}reset(n){if(n){let r=this.mediapipeMap_.get(n);r&&typeof r.reset=="function"&&r.reset()}else for(const[r,f]of this.mediapipeMap_.entries())f&&typeof f.reset=="function"&&f.reset()}};let xi=ir;gt(xi,"defaultAssetsBaseUrl","https://d3opqjmqzxf057.cloudfront.net/ml/mediapipe/");const lr=new WeakMap,vr=new WeakMap,nr=new WeakMap,Ii=Symbol("anyProducer"),Ts=Promise.resolve(),Si=Symbol("listenerAdded"),Ti=Symbol("listenerRemoved");let Yi=!1,Go=!1;function Lr(i){if(typeof i!="string"&&typeof i!="symbol"&&typeof i!="number")throw new TypeError("`eventName` must be a string, symbol, or number")}function wi(i){if(typeof i!="function")throw new TypeError("listener must be a function")}function Fr(i,n){const r=vr.get(i);if(!!r.has(n))return r.get(n)}function Dr(i,n){const r=typeof n=="string"||typeof n=="symbol"||typeof n=="number"?n:Ii,f=nr.get(i);if(!!f.has(r))return f.get(r)}function sc(i,n,r){const f=nr.get(i);if(f.has(n))for(const Z of f.get(n))Z.enqueue(r);if(f.has(Ii)){const Z=Promise.all([n,r]);for(const I of f.get(Ii))I.enqueue(Z)}}function Ys(i,n){n=Array.isArray(n)?n:[n];let r=!1,f=()=>{},Z=[];const I={enqueue(F){Z.push(F),f()},finish(){r=!0,f()}};for(const F of n){let T=Dr(i,F);T||(T=new Set,nr.get(i).set(F,T)),T.add(I)}return{async next(){return Z?Z.length===0?r?(Z=void 0,this.next()):(await new Promise(F=>{f=F}),this.next()):{done:!1,value:await Z.shift()}:{done:!0}},async return(F){Z=void 0;for(const T of n){const J=Dr(i,T);J&&(J.delete(I),J.size===0&&nr.get(i).delete(T))}return f(),arguments.length>0?{done:!0,value:await F}:{done:!0}},[Symbol.asyncIterator](){return this}}}function ws(i){if(i===void 0)return Ls;if(!Array.isArray(i))throw new TypeError("`methodNames` must be an array of strings");for(const n of i)if(!Ls.includes(n))throw typeof n!="string"?new TypeError("`methodNames` element must be a string"):new Error(`${n} is not Emittery method`);return i}const Cr=i=>i===Si||i===Ti;function Li(i,n,r){if(Cr(n))try{Yi=!0,i.emit(n,r)}finally{Yi=!1}}class cr{static mixin(n,r){return r=ws(r),f=>{if(typeof f!="function")throw new TypeError("`target` must be function");for(const F of r)if(f.prototype[F]!==void 0)throw new Error(`The property \`${F}\` already exists on \`target\``);function Z(){return Object.defineProperty(this,n,{enumerable:!1,value:new cr}),this[n]}Object.defineProperty(f.prototype,n,{enumerable:!1,get:Z});const I=F=>function(...T){return this[n][F](...T)};for(const F of r)Object.defineProperty(f.prototype,F,{enumerable:!1,value:I(F)});return f}}static get isDebugEnabled(){var r,f;if(typeof((r=globalThis.process)==null?void 0:r.env)!="object")return Go;const{env:n}=(f=globalThis.process)!=null?f:{env:{}};return n.DEBUG==="emittery"||n.DEBUG==="*"||Go}static set isDebugEnabled(n){Go=n}constructor(n={}){var r;lr.set(this,new Set),vr.set(this,new Map),nr.set(this,new Map),nr.get(this).set(Ii,new Set),this.debug=(r=n.debug)!=null?r:{},this.debug.enabled===void 0&&(this.debug.enabled=!1),this.debug.logger||(this.debug.logger=(f,Z,I,F)=>{try{F=JSON.stringify(F)}catch{F=`Object with the following keys failed to stringify: ${Object.keys(F).join(",")}`}(typeof I=="symbol"||typeof I=="number")&&(I=I.toString());const T=new Date,J=`${T.getHours()}:${T.getMinutes()}:${T.getSeconds()}.${T.getMilliseconds()}`;console.log(`[${J}][emittery:${f}][${Z}] Event Name: ${I}
|
|
122
|
+
data: ${F}`)})}logIfDebugEnabled(n,r,f){(cr.isDebugEnabled||this.debug.enabled)&&this.debug.logger(n,this.debug.name,r,f)}on(n,r){wi(r),n=Array.isArray(n)?n:[n];for(const f of n){Lr(f);let Z=Fr(this,f);Z||(Z=new Set,vr.get(this).set(f,Z)),Z.add(r),this.logIfDebugEnabled("subscribe",f,void 0),Cr(f)||Li(this,Si,{eventName:f,listener:r})}return this.off.bind(this,n,r)}off(n,r){wi(r),n=Array.isArray(n)?n:[n];for(const f of n){Lr(f);const Z=Fr(this,f);Z&&(Z.delete(r),Z.size===0&&vr.get(this).delete(f)),this.logIfDebugEnabled("unsubscribe",f,void 0),Cr(f)||Li(this,Ti,{eventName:f,listener:r})}}once(n){let r;const f=new Promise(Z=>{r=this.on(n,I=>{r(),Z(I)})});return f.off=r,f}events(n){n=Array.isArray(n)?n:[n];for(const r of n)Lr(r);return Ys(this,n)}async emit(n,r){var T;if(Lr(n),Cr(n)&&!Yi)throw new TypeError("`eventName` cannot be meta event `listenerAdded` or `listenerRemoved`");this.logIfDebugEnabled("emit",n,r),sc(this,n,r);const f=(T=Fr(this,n))!=null?T:new Set,Z=lr.get(this),I=[...f],F=Cr(n)?[]:[...Z];await Ts,await Promise.all([...I.map(async J=>{if(f.has(J))return J(r)}),...F.map(async J=>{if(Z.has(J))return J(n,r)})])}async emitSerial(n,r){var T;if(Lr(n),Cr(n)&&!Yi)throw new TypeError("`eventName` cannot be meta event `listenerAdded` or `listenerRemoved`");this.logIfDebugEnabled("emitSerial",n,r);const f=(T=Fr(this,n))!=null?T:new Set,Z=lr.get(this),I=[...f],F=[...Z];await Ts;for(const J of I)f.has(J)&&await J(r);for(const J of F)Z.has(J)&&await J(n,r)}onAny(n){return wi(n),this.logIfDebugEnabled("subscribeAny",void 0,void 0),lr.get(this).add(n),Li(this,Si,{listener:n}),this.offAny.bind(this,n)}anyEvent(){return Ys(this)}offAny(n){wi(n),this.logIfDebugEnabled("unsubscribeAny",void 0,void 0),Li(this,Ti,{listener:n}),lr.get(this).delete(n)}clearListeners(n){n=Array.isArray(n)?n:[n];for(const r of n)if(this.logIfDebugEnabled("clear",r,void 0),typeof r=="string"||typeof r=="symbol"||typeof r=="number"){const f=Fr(this,r);f&&f.clear();const Z=Dr(this,r);if(Z){for(const I of Z)I.finish();Z.clear()}}else{lr.get(this).clear();for(const[f,Z]of vr.get(this).entries())Z.clear(),vr.get(this).delete(f);for(const[f,Z]of nr.get(this).entries()){for(const I of Z)I.finish();Z.clear(),nr.get(this).delete(f)}}}listenerCount(n){var f,Z,I,F,T,J;n=Array.isArray(n)?n:[n];let r=0;for(const et of n){if(typeof et=="string"){r+=lr.get(this).size+((Z=(f=Fr(this,et))==null?void 0:f.size)!=null?Z:0)+((F=(I=Dr(this,et))==null?void 0:I.size)!=null?F:0)+((J=(T=Dr(this))==null?void 0:T.size)!=null?J:0);continue}typeof et<"u"&&Lr(et),r+=lr.get(this).size;for(const lt of vr.get(this).values())r+=lt.size;for(const lt of nr.get(this).values())r+=lt.size}return r}bindMethods(n,r){if(typeof n!="object"||n===null)throw new TypeError("`target` must be an object");r=ws(r);for(const f of r){if(n[f]!==void 0)throw new Error(`The property \`${f}\` already exists on \`target\``);Object.defineProperty(n,f,{enumerable:!1,value:this[f].bind(this)})}}}const Ls=Object.getOwnPropertyNames(cr.prototype).filter(i=>i!=="constructor");Object.defineProperty(cr,"listenerAdded",{value:Si,writable:!1,enumerable:!0,configurable:!1}),Object.defineProperty(cr,"listenerRemoved",{value:Ti,writable:!1,enumerable:!0,configurable:!1});function Xo(i,n){globalThis.vonage||(globalThis.vonage={}),globalThis.vonage.workerizer||(globalThis.vonage.workerizer={});let r=globalThis.vonage.workerizer;return r[i]||(r[i]=n),r[i]}const Hr=Xo("globals",{});var $n=(i=>(i.INIT="INIT",i.FORWARD="FORWARD",i.TERMINATE="TERMINATE",i.GLOBALS_SYNC="GLOBALS_SYNC",i.EVENT="EVENT",i))($n||{});function Fs(i){return[ImageBitmap,ReadableStream,WritableStream].some(r=>i instanceof r)}let lc=0;function Fi(i,n,r,f,Z){const I=lc++;return i.postMessage({id:I,type:n,functionName:r,args:f},f.filter(T=>Fs(T))),new Promise(T=>{Z==null||Z.set(I,T)})}function Jr(i,n){const{id:r,type:f}=i,Z=Array.isArray(n)?n:[n];postMessage({id:r,type:f,result:n},Z.filter(I=>Fs(I)))}const Ci=Xo("workerized",{});function Wo(){return typeof WorkerGlobalScope<"u"&&self instanceof WorkerGlobalScope}async function cc(){if(Wo())Jr({type:$n.GLOBALS_SYNC},Hr);else{const i=[];for(const n in Ci){const{worker:r,resolvers:f}=Ci[n].workerContext;r&&i.push(Fi(r,$n.GLOBALS_SYNC,"",[Hr],f))}await Promise.all(i)}}function $r(i,n){if(Array.isArray(n))n.splice(0,n.length);else if(typeof n=="object")for(const r in n)delete n[r];for(const r in i)Array.isArray(i[r])?(n[r]=[],$r(i[r],n[r])):typeof i[r]=="object"?(n[r]={},$r(i[r],n[r])):n[r]=i[r]}async function uc(i,n,r,f){const Z=new n;if(Z.addEventListener("message",async({data:F})=>{var T,J,et,lt,pt,Yt,Lt;switch(F.type){case $n.GLOBALS_SYNC:F.id?((J=r.get((T=F.id)!=null?T:-1))==null||J(F.result),r.delete((et=F.id)!=null?et:-1)):($r((lt=F.result)!=null?lt:{},Hr),await cc());break;case $n.EVENT:const{result:at}=F,dt=at;if((dt==null?void 0:dt.name)==null)throw"Missing event name";f(dt.name,dt.data);break;default:(Yt=r.get((pt=F.id)!=null?pt:-1))==null||Yt(F.result),r.delete((Lt=F.id)!=null?Lt:-1)}}),!await Fi(Z,$n.INIT,"",[i.workerId,Hr],r))throw"Failed to instantiate workerized class";return Z}const ur=new WeakMap,Gr=new WeakMap,rr=new WeakMap,Hi=Symbol("anyProducer"),Cs=Promise.resolve(),Ji=Symbol("listenerAdded"),Ni=Symbol("listenerRemoved");let ki=!1,Vo=!1;function Nr(i){if(typeof i!="string"&&typeof i!="symbol"&&typeof i!="number")throw new TypeError("`eventName` must be a string, symbol, or number")}function Ei(i){if(typeof i!="function")throw new TypeError("listener must be a function")}function kr(i,n){const r=Gr.get(i);if(!!r.has(n))return r.get(n)}function qr(i,n){const r=typeof n=="string"||typeof n=="symbol"||typeof n=="number"?n:Hi,f=rr.get(i);if(!!f.has(r))return f.get(r)}function ac(i,n,r){const f=rr.get(i);if(f.has(n))for(const Z of f.get(n))Z.enqueue(r);if(f.has(Hi)){const Z=Promise.all([n,r]);for(const I of f.get(Hi))I.enqueue(Z)}}function Hs(i,n){n=Array.isArray(n)?n:[n];let r=!1,f=()=>{},Z=[];const I={enqueue(F){Z.push(F),f()},finish(){r=!0,f()}};for(const F of n){let T=qr(i,F);T||(T=new Set,rr.get(i).set(F,T)),T.add(I)}return{async next(){return Z?Z.length===0?r?(Z=void 0,this.next()):(await new Promise(F=>{f=F}),this.next()):{done:!1,value:await Z.shift()}:{done:!0}},async return(F){Z=void 0;for(const T of n){const J=qr(i,T);J&&(J.delete(I),J.size===0&&rr.get(i).delete(T))}return f(),arguments.length>0?{done:!0,value:await F}:{done:!0}},[Symbol.asyncIterator](){return this}}}function Js(i){if(i===void 0)return Ns;if(!Array.isArray(i))throw new TypeError("`methodNames` must be an array of strings");for(const n of i)if(!Ns.includes(n))throw typeof n!="string"?new TypeError("`methodNames` element must be a string"):new Error(`${n} is not Emittery method`);return i}const Er=i=>i===Ji||i===Ni;function Ui(i,n,r){if(Er(n))try{ki=!0,i.emit(n,r)}finally{ki=!1}}class Xr{static mixin(n,r){return r=Js(r),f=>{if(typeof f!="function")throw new TypeError("`target` must be function");for(const F of r)if(f.prototype[F]!==void 0)throw new Error(`The property \`${F}\` already exists on \`target\``);function Z(){return Object.defineProperty(this,n,{enumerable:!1,value:new Xr}),this[n]}Object.defineProperty(f.prototype,n,{enumerable:!1,get:Z});const I=F=>function(...T){return this[n][F](...T)};for(const F of r)Object.defineProperty(f.prototype,F,{enumerable:!1,value:I(F)});return f}}static get isDebugEnabled(){var n,r;if(typeof((n=globalThis.process)==null?void 0:n.env)!="object")return Vo;const{env:f}=(r=globalThis.process)!=null?r:{env:{}};return f.DEBUG==="emittery"||f.DEBUG==="*"||Vo}static set isDebugEnabled(n){Vo=n}constructor(n={}){var r;ur.set(this,new Set),Gr.set(this,new Map),rr.set(this,new Map),rr.get(this).set(Hi,new Set),this.debug=(r=n.debug)!=null?r:{},this.debug.enabled===void 0&&(this.debug.enabled=!1),this.debug.logger||(this.debug.logger=(f,Z,I,F)=>{try{F=JSON.stringify(F)}catch{F=`Object with the following keys failed to stringify: ${Object.keys(F).join(",")}`}(typeof I=="symbol"||typeof I=="number")&&(I=I.toString());const T=new Date,J=`${T.getHours()}:${T.getMinutes()}:${T.getSeconds()}.${T.getMilliseconds()}`;console.log(`[${J}][emittery:${f}][${Z}] Event Name: ${I}
|
|
123
|
+
data: ${F}`)})}logIfDebugEnabled(n,r,f){(Xr.isDebugEnabled||this.debug.enabled)&&this.debug.logger(n,this.debug.name,r,f)}on(n,r){Ei(r),n=Array.isArray(n)?n:[n];for(const f of n){Nr(f);let Z=kr(this,f);Z||(Z=new Set,Gr.get(this).set(f,Z)),Z.add(r),this.logIfDebugEnabled("subscribe",f,void 0),Er(f)||Ui(this,Ji,{eventName:f,listener:r})}return this.off.bind(this,n,r)}off(n,r){Ei(r),n=Array.isArray(n)?n:[n];for(const f of n){Nr(f);const Z=kr(this,f);Z&&(Z.delete(r),Z.size===0&&Gr.get(this).delete(f)),this.logIfDebugEnabled("unsubscribe",f,void 0),Er(f)||Ui(this,Ni,{eventName:f,listener:r})}}once(n){let r;const f=new Promise(Z=>{r=this.on(n,I=>{r(),Z(I)})});return f.off=r,f}events(n){n=Array.isArray(n)?n:[n];for(const r of n)Nr(r);return Hs(this,n)}async emit(n,r){var f;if(Nr(n),Er(n)&&!ki)throw new TypeError("`eventName` cannot be meta event `listenerAdded` or `listenerRemoved`");this.logIfDebugEnabled("emit",n,r),ac(this,n,r);const Z=(f=kr(this,n))!=null?f:new Set,I=ur.get(this),F=[...Z],T=Er(n)?[]:[...I];await Cs,await Promise.all([...F.map(async J=>{if(Z.has(J))return J(r)}),...T.map(async J=>{if(I.has(J))return J(n,r)})])}async emitSerial(n,r){var f;if(Nr(n),Er(n)&&!ki)throw new TypeError("`eventName` cannot be meta event `listenerAdded` or `listenerRemoved`");this.logIfDebugEnabled("emitSerial",n,r);const Z=(f=kr(this,n))!=null?f:new Set,I=ur.get(this),F=[...Z],T=[...I];await Cs;for(const J of F)Z.has(J)&&await J(r);for(const J of T)I.has(J)&&await J(n,r)}onAny(n){return Ei(n),this.logIfDebugEnabled("subscribeAny",void 0,void 0),ur.get(this).add(n),Ui(this,Ji,{listener:n}),this.offAny.bind(this,n)}anyEvent(){return Hs(this)}offAny(n){Ei(n),this.logIfDebugEnabled("unsubscribeAny",void 0,void 0),Ui(this,Ni,{listener:n}),ur.get(this).delete(n)}clearListeners(n){n=Array.isArray(n)?n:[n];for(const r of n)if(this.logIfDebugEnabled("clear",r,void 0),typeof r=="string"||typeof r=="symbol"||typeof r=="number"){const f=kr(this,r);f&&f.clear();const Z=qr(this,r);if(Z){for(const I of Z)I.finish();Z.clear()}}else{ur.get(this).clear();for(const[f,Z]of Gr.get(this).entries())Z.clear(),Gr.get(this).delete(f);for(const[f,Z]of rr.get(this).entries()){for(const I of Z)I.finish();Z.clear(),rr.get(this).delete(f)}}}listenerCount(n){var r,f,Z,I,F,T;n=Array.isArray(n)?n:[n];let J=0;for(const et of n){if(typeof et=="string"){J+=ur.get(this).size+((f=(r=kr(this,et))==null?void 0:r.size)!=null?f:0)+((I=(Z=qr(this,et))==null?void 0:Z.size)!=null?I:0)+((T=(F=qr(this))==null?void 0:F.size)!=null?T:0);continue}typeof et<"u"&&Nr(et),J+=ur.get(this).size;for(const lt of Gr.get(this).values())J+=lt.size;for(const lt of rr.get(this).values())J+=lt.size}return J}bindMethods(n,r){if(typeof n!="object"||n===null)throw new TypeError("`target` must be an object");r=Js(r);for(const f of r){if(n[f]!==void 0)throw new Error(`The property \`${f}\` already exists on \`target\``);Object.defineProperty(n,f,{enumerable:!1,value:this[f].bind(this)})}}}const Ns=Object.getOwnPropertyNames(Xr.prototype).filter(i=>i!=="constructor");Object.defineProperty(Xr,"listenerAdded",{value:Ji,writable:!1,enumerable:!0,configurable:!1}),Object.defineProperty(Xr,"listenerRemoved",{value:Ni,writable:!1,enumerable:!0,configurable:!1});function dc(i){return i.onAny&&i.emit}function hc(i){return i.prototype.onAny&&i.prototype.emit}let fc=0;async function mc(i,n,r){const Z=hc(i)?new Xr:{},I=fc++;return Object.getOwnPropertyNames(i.prototype).forEach(F=>{Z[F]=(...T)=>Fi(n,$n.FORWARD,F,T,r)}),Z.terminate=async(...F)=>{const T=await Fi(n,$n.TERMINATE,"",F,r);return delete Ci[I],n.terminate(),Z.workerContext.worker=void 0,T},Z.workerContext={id:I,worker:n,resolvers:r},Ci[I]=Z,Z}async function pc(i,n){const r=new Map;let f;const Z=await uc(i,n,r,(I,F)=>{f!=null&&f.emit&&(f==null||f.emit(I,F))});return f=await mc(i,Z,r),f}async function bc(i,n){const{functionName:r,args:f}=i;if(!n.instance)throw"instance not initialized";if(!r)throw"missing function name to call";if(!n.instance[r])throw`undefined function [${r}] in class ${n.instance.constructor.workerId}`;Jr(i,await n.instance[r](...f!=null?f:[]))}const ks=Xo("registeredWorkers",{});function yc(i,n){n.workerId=i,Wo()&&(ks[n.workerId]=n)}function gc(i,n){if(!i.args)throw"Missing className while initializing worker";const[r,f]=i.args,Z=ks[r];if(Z)n.instance=new Z(i.args.slice(1));else throw`unknown worker class ${r}`;$r(f,Hr),dc(n.instance)&&n.instance.onAny((I,F)=>{Jr({type:$n.EVENT},{name:I,data:F})}),Jr(i,typeof n.instance!==void 0)}async function Zc(i,n){const{args:r}=i;if(!n.instance)throw"instance not initialized";let f;n.instance.terminate&&(f=await n.instance.terminate(...r!=null?r:[])),Jr(i,f)}function vc(i){if(!i.args)throw"Missing globals while syncing";$r(i.args[0],Hr),Jr(i,{})}function Gc(){const i={};onmessage=async n=>{const r=n.data;switch(r.type){case $n.INIT:gc(r,i);break;case $n.FORWARD:bc(r,i);break;case $n.TERMINATE:Zc(r,i);break;case $n.GLOBALS_SYNC:vc(r);break}}}Wo()&&Gc();class Es{static async createVideoReadable(n){return new Promise((r,f)=>{const Z=document.createElement("video");let I=new AbortController,F=new AbortController;Z.addEventListener("canplay",()=>{I.abort(),Z.muted=!0,Z.loop=!0,Z.play().then(()=>{try{const T=Z.captureStream(),J=new MediaStreamTrackProcessor(T.getVideoTracks()[0]);r(J.readable)}catch(T){f(T)}})},{once:!0,signal:F.signal}),Z.addEventListener("error",T=>{F.abort(),f("loading error:"+T)},{once:!0,signal:I.signal}),Z.crossOrigin="anonymous",Z.src=n})}static async createImageCanvas(n){const f=await(await fetch(n)).blob();return await createImageBitmap(f)}}var Xc=Object.defineProperty,Wc=(i,n,r)=>n in i?Xc(i,n,{enumerable:!0,configurable:!0,writable:!0,value:r}):i[n]=r,Vc=(i,n,r)=>(Wc(i,typeof n!="symbol"?n+"":n,r),r);const Rc="hlg.tokbox.com/prod/logging/vcp_webrtc",xc="https://",Ic=1e4;let Bi;const Sc=new Uint8Array(16);function Tc(){if(!Bi&&(Bi=typeof crypto<"u"&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto),!Bi))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return Bi(Sc)}const Bn=[];for(let i=0;i<256;++i)Bn.push((i+256).toString(16).slice(1));function Yc(i,n=0){return(Bn[i[n+0]]+Bn[i[n+1]]+Bn[i[n+2]]+Bn[i[n+3]]+"-"+Bn[i[n+4]]+Bn[i[n+5]]+"-"+Bn[i[n+6]]+Bn[i[n+7]]+"-"+Bn[i[n+8]]+Bn[i[n+9]]+"-"+Bn[i[n+10]]+Bn[i[n+11]]+Bn[i[n+12]]+Bn[i[n+13]]+Bn[i[n+14]]+Bn[i[n+15]]).toLowerCase()}const wc=typeof crypto<"u"&&crypto.randomUUID&&crypto.randomUUID.bind(crypto),Us={randomUUID:wc};function Lc(i,n,r){if(Us.randomUUID&&!n&&!i)return Us.randomUUID();i=i||{};const f=i.random||(i.rng||Tc)();if(f[6]=f[6]&15|64,f[8]=f[8]&63|128,n){r=r||0;for(let Z=0;Z<16;++Z)n[r+Z]=f[Z];return n}return Yc(f)}function Ro(i,n){globalThis.vonage||(globalThis.vonage={}),globalThis.vonage.workerizer||(globalThis.vonage.workerizer={});let r=globalThis.vonage.workerizer;return r[i]||(r[i]=n),r[i]}const ar=Ro("globals",{});var Wr=(i=>(i.INIT="INIT",i.FORWARD="FORWARD",i.TERMINATE="TERMINATE",i.GLOBALS_SYNC="GLOBALS_SYNC",i))(Wr||{});function Bs(i){return[ImageBitmap,ReadableStream,WritableStream].some(n=>i instanceof n)}let Fc=0;function Cc(i,n,r,f,Z){const I=Fc++;return i.postMessage({id:I,type:n,functionName:r,args:f},f.filter(F=>Bs(F))),new Promise(F=>{Z==null||Z.set(I,F)})}function ti(i,n){const{id:r,type:f}=i,Z=Array.isArray(n)?n:[n];postMessage({id:r,type:f,result:n},Z.filter(I=>Bs(I)))}const Ks=Ro("workerized",{});function Ms(){return typeof WorkerGlobalScope<"u"&&self instanceof WorkerGlobalScope}async function Hc(){if(Ms())ti({type:Wr.GLOBALS_SYNC},ar);else{const i=[];for(const n in Ks){const{worker:r,resolvers:f}=Ks[n].workerContext;r&&i.push(Cc(r,Wr.GLOBALS_SYNC,"",[ar],f))}await Promise.all(i)}}function Ki(i,n){if(Array.isArray(n))n.splice(0,n.length);else if(typeof n=="object")for(const r in n)delete n[r];for(const r in i)Array.isArray(i[r])?(n[r]=[],Ki(i[r],n[r])):typeof i[r]=="object"?(n[r]={},Ki(i[r],n[r])):n[r]=i[r]}async function Jc(i,n){const{functionName:r,args:f}=i;if(!n.instance)throw"instance not initialized";if(!r)throw"missing function name to call";if(!n.instance[r])throw`undefined function [${r}] in class ${n.instance.constructor.workerId}`;ti(i,await n.instance[r](...f!=null?f:[]))}const Nc=Ro("registeredWorkers",{});function kc(i,n){if(!i.args)throw"Missing className while initializing worker";const[r,f]=i.args,Z=Nc[r];if(Z)n.instance=new Z(i.args.slice(1));else throw`unknown worker class ${r}`;Ki(f,ar),ti(i,typeof n.instance!==void 0)}async function Ec(i,n){const{args:r}=i;if(!n.instance)throw"instance not initialized";let f;n.instance.terminate&&(f=await n.instance.terminate(...r!=null?r:[])),ti(i,f)}function Uc(i){if(!i.args)throw"Missing globals while syncing";Ki(i.args[0],ar),ti(i,{})}function Bc(){const i={};onmessage=async n=>{const r=n.data;switch(r.type){case Wr.INIT:kc(r,i);break;case Wr.FORWARD:Jc(r,i);break;case Wr.TERMINATE:Ec(r,i);break;case Wr.GLOBALS_SYNC:Uc(r);break}}}Ms()&&Bc();function Kc(i,n){return ar[i]||(ar[i]=n),[()=>ar[i],async r=>{ar[i]=r,await Hc()}]}function Mc(i,n){return Kc(i,n)}const[Ac,D3]=Mc("metadata");function xo(){return Ac()}class zc{constructor(n){Vc(this,"uuid",Lc()),this.config=n}async send(n){var r,f,Z;const{appId:I,sourceType:F}=(r=xo())!=null?r:{};if(!I||!F)return"metadata missing";const T=new AbortController,J=setTimeout(()=>T.abort(),Ic);return await((Z=(f=this.config)==null?void 0:f.fetch)!=null?Z:fetch)(this.getUrl(),{method:"POST",headers:this.getHeaders(),body:JSON.stringify(this.buildReport(n)),signal:T.signal}),clearTimeout(J),"success"}getUrl(){var n;let r=(n=xo().proxyUrl)!=null?n:xc;return r+=(r.at(-1)==="/"?"":"/")+Rc,r}getHeaders(){return{"Content-Type":"application/json"}}buildReport(n){const r=xo();return{guid:this.uuid,...n,applicationId:r.appId,timestamp:Date.now(),proxyUrl:r.proxyUrl,source:r.sourceType}}}const jc="5.2.0-alpha.0";class Io{constructor(){gt(this,"canvas");gt(this,"context");const n=new OffscreenCanvas(0,0),r=n.getContext("2d");if(!r)throw"Fail to retrieve webgl2 context";this.canvas=n,this.context=r}setFlickeringOptions(n){}enablePostProcessing(){}disablePostProcessing(){}async profileWebgl(n){return[]}async render(n,r){return this.canvas}resizeCanvas(n){const{width:r,height:f}=n;this.canvas.width=r,this.canvas.height=f}renderSilhouette(n,r,f="none"){const{width:Z,height:I}=n;this.context.save(),this.context.drawImage(r,0,0,r.width,r.height,0,0,Z,I),this.context.globalCompositeOperation="source-in",this.context.filter=f,this.context.drawImage(n,0,0,Z,I,0,0,this.canvas.width,this.canvas.height),this.context.restore()}}class Oc extends Io{constructor(n){super(),this.radius=n}async render(n,r){return super.resizeCanvas(n),this.renderSilhouette(n,r),this.context.save(),this.context.filter=`blur(${this.radius}px)`,this.context.globalCompositeOperation="destination-over",this.context.drawImage(n,0,0,n.width,n.height),this.context.restore(),super.render(n,r)}}class Pc extends Io{constructor(n){super(),this.radius=n}async render(n,r){return super.resizeCanvas(n),this.renderSilhouette(n,r,`blur(${this.radius}px)`),this.context.save(),this.context.filter="none",this.context.globalCompositeOperation="destination-over",this.context.drawImage(n,0,0,n.width,n.height),this.context.restore(),super.render(n,r)}}class _c extends Io{constructor(){super(...arguments);gt(this,"backgroundImage")}setBackgroundImage(r){this.backgroundImage=r}async render(r,f){return super.resizeCanvas(r),this.renderSilhouette(r,f),this.backgroundImage&&(this.context.save(),this.context.filter="none",this.context.globalCompositeOperation="destination-over",this.context.drawImage(this.backgroundImage,0,0,this.backgroundImage.width,this.backgroundImage.height,0,0,r.width,r.height),this.context.restore()),super.render(r,f)}}/* @license twgl.js 5.5.1 Copyright (c) 2015, Gregg Tavares All Rights Reserved.
|
|
124
124
|
Available via the MIT license.
|
|
125
|
-
see: http://github.com/greggman/twgl.js for details */const Yo=5120,ri=5121,wo=5122,Lo=5123,Ho=5124,Fo=5125,Co=5126,D2=32819,$2=32820,q2=33635,tu=5131,eu=33640,nu=35899,ru=35902,iu=36269,ou=34042,js={};{const i=js;i[Yo]=Int8Array,i[ri]=Uint8Array,i[wo]=Int16Array,i[Lo]=Uint16Array,i[Ho]=Int32Array,i[Fo]=Uint32Array,i[Co]=Float32Array,i[D2]=Uint16Array,i[$2]=Uint16Array,i[q2]=Uint16Array,i[tu]=Uint16Array,i[eu]=Uint32Array,i[nu]=Uint32Array,i[ru]=Uint32Array,i[iu]=Uint32Array,i[ou]=Uint32Array}function Jo(i){if(i instanceof Int8Array)return Yo;if(i instanceof Uint8Array||i instanceof Uint8ClampedArray)return ri;if(i instanceof Int16Array)return wo;if(i instanceof Uint16Array)return Lo;if(i instanceof Int32Array)return Ho;if(i instanceof Uint32Array)return Fo;if(i instanceof Float32Array)return Co;throw new Error("unsupported typed array type")}function Ps(i){if(i===Int8Array)return Yo;if(i===Uint8Array||i===Uint8ClampedArray)return ri;if(i===Int16Array)return wo;if(i===Uint16Array)return Lo;if(i===Int32Array)return Ho;if(i===Uint32Array)return Fo;if(i===Float32Array)return Co;throw new Error("unsupported typed array type")}function Os(i){const n=js[i];if(!n)throw new Error("unknown gl type");return n}const zi=typeof SharedArrayBuffer<"u"?function(n){return n&&n.buffer&&(n.buffer instanceof ArrayBuffer||n.buffer instanceof SharedArrayBuffer)}:function(n){return n&&n.buffer&&n.buffer instanceof ArrayBuffer};function _s(...i){console.error(...i)}const Qs=new Map;function ji(i,n){if(!i||typeof i!="object")return!1;let r=Qs.get(n);r||(r=new WeakMap,Qs.set(n,r));let f=r.get(i);if(f===void 0){const Z=Object.prototype.toString.call(i);f=Z.substring(8,Z.length-1)===n,r.set(i,f)}return f}function su(i,n){return typeof WebGLBuffer<"u"&&ji(n,"WebGLBuffer")}function lu(i,n){return typeof WebGLRenderbuffer<"u"&&ji(n,"WebGLRenderbuffer")}function ko(i,n){return typeof WebGLTexture<"u"&&ji(n,"WebGLTexture")}function cu(i,n){return typeof WebGLSampler<"u"&&ji(n,"WebGLSampler")}const Ds=35044,Ir=34962,uu=34963,au=34660,du=5120,hu=5121,fu=5122,mu=5123,pu=5124,bu=5125,$s=5126,qs={attribPrefix:""};function yu(i,n,r,f,Z){i.bindBuffer(n,r),i.bufferData(n,f,Z||Ds)}function tl(i,n,r,f){if(su(i,n))return n;r=r||Ir;const Z=i.createBuffer();return yu(i,r,Z,n,f),Z}function el(i){return i==="indices"}function gu(i){return i===Int8Array||i===Uint8Array}function Zu(i){return i.length?i:i.data}const vu=/coord|texture/i,Gu=/color|colour/i;function Xu(i,n){let r;if(vu.test(i)?r=2:Gu.test(i)?r=4:r=3,n%r>0)throw new Error(`Can not guess numComponents for attribute '${i}'. Tried ${r} but ${n} values is not evenly divisible by ${r}. You should specify it.`);return r}function Wu(i,n,r){return i.numComponents||i.size||Xu(n,r||Zu(i).length)}function nl(i,n){if(zi(i))return i;if(zi(i.data))return i.data;Array.isArray(i)&&(i={data:i});let r=i.type?No(i.type):void 0;return r||(el(n)?r=Uint16Array:r=Float32Array),new r(i.data)}function Vu(i){return typeof i=="number"?i:i?Ps(i):$s}function No(i){return typeof i=="number"?Os(i):i||Float32Array}function Ru(i,n){return{buffer:n.buffer,numValues:2*3*4,type:Vu(n.type),arrayType:No(n.type)}}function Iu(i,n){const r=n.data||n,f=No(n.type),Z=r*f.BYTES_PER_ELEMENT,x=i.createBuffer();return i.bindBuffer(Ir,x),i.bufferData(Ir,Z,n.drawType||Ds),{buffer:x,numValues:r,type:Ps(f),arrayType:f}}function xu(i,n,r){const f=nl(n,r);return{arrayType:f.constructor,buffer:tl(i,f,void 0,n.drawType),type:Jo(f),numValues:0}}function Su(i,n){const r={};return Object.keys(n).forEach(function(f){if(!el(f)){const Z=n[f],x=Z.attrib||Z.name||Z.attribName||qs.attribPrefix+f;if(Z.value){if(!Array.isArray(Z.value)&&!zi(Z.value))throw new Error("array.value is not array or typedarray");r[x]={value:Z.value}}else{let H;Z.buffer&&Z.buffer instanceof WebGLBuffer?H=Ru:typeof Z=="number"||typeof Z.data=="number"?H=Iu:H=xu;const{buffer:T,type:J,numValues:et,arrayType:lt}=H(i,Z,f),pt=Z.normalize!==void 0?Z.normalize:gu(lt),Yt=Wu(Z,f,et);r[x]={buffer:T,numComponents:Yt,type:J,normalize:pt,stride:Z.stride||0,offset:Z.offset||0,divisor:Z.divisor===void 0?void 0:Z.divisor,drawType:Z.drawType}}}}),i.bindBuffer(Ir,null),r}function Tu(i,n){return n===du||n===hu?1:n===fu||n===mu?2:n===pu||n===bu||n===$s?4:0}const Eo=["position","positions","a_position"];function Yu(i,n){let r,f;for(f=0;f<Eo.length&&(r=Eo[f],!(r in n||(r=qs.attribPrefix+r,r in n)));++f);f===Eo.length&&(r=Object.keys(n)[0]);const Z=n[r];if(!Z.buffer)return 1;i.bindBuffer(Ir,Z.buffer);const x=i.getBufferParameter(Ir,au);i.bindBuffer(Ir,null);const H=Tu(i,Z.type),T=x/H,J=Z.numComponents||Z.size,et=T/J;if(et%1!==0)throw new Error(`numComponents ${J} not correct for length ${length}`);return et}function wu(i,n,r){const f=Su(i,n),Z=Object.assign({},r||{});Z.attribs=Object.assign({},r?r.attribs:{},f);const x=n.indices;if(x){const H=nl(x,"indices");Z.indices=tl(i,H,uu),Z.numElements=H.length,Z.elementType=Jo(H)}else Z.numElements||(Z.numElements=Yu(i,Z.attribs));return Z}function ii(i){return!!i.texStorage2D}const rl=function(){const i={},n={};function r(f){const Z=f.constructor.name;if(!i[Z]){for(const x in f)if(typeof f[x]=="number"){const H=n[f[x]];n[f[x]]=H?`${H} | ${x}`:x}i[Z]=!0}}return function(Z,x){return r(Z),n[x]||(typeof x=="number"?`0x${x.toString(16)}`:x)}}(),hr={textureColor:new Uint8Array([128,192,255,255]),textureOptions:{},crossOrigin:void 0},oi=zi,il=function(){let i;return function(){return i=i||(typeof document<"u"&&document.createElement?document.createElement("canvas").getContext("2d"):null),i}}(),ol=6406,er=6407,Gn=6408,sl=6409,ll=6410,si=6402,cl=34041,Pi=33071,Lu=9728,Hu=9729,fr=3553,mr=34067,xr=32879,Sr=35866,Uo=34069,Fu=34070,Cu=34071,Ju=34072,ku=34073,Nu=34074,Bo=10241,Ko=10240,Oi=10242,_i=10243,ul=32882,Eu=33082,Uu=33083,Bu=33084,Ku=33085,Mu=34892,Au=34893,Mo=3317,al=3314,dl=32878,hl=3316,fl=3315,ml=32877,zu=37443,ju=37441,Pu=37440,Ou=33321,_u=36756,Qu=33325,Du=33326,$u=33330,qu=33329,t1=33338,e1=33337,n1=33340,r1=33339,i1=33323,o1=36757,s1=33327,l1=33328,c1=33336,u1=33335,a1=33332,d1=33331,h1=33334,f1=33333,m1=32849,p1=35905,b1=36194,y1=36758,g1=35898,Z1=35901,v1=34843,G1=34837,X1=36221,W1=36239,V1=36215,R1=36233,I1=36209,x1=36227,S1=32856,T1=35907,Y1=36759,w1=32855,L1=32854,H1=32857,F1=34842,C1=34836,J1=36220,k1=36238,N1=36975,E1=36214,U1=36232,B1=36226,K1=36208,M1=33189,A1=33190,z1=36012,j1=36013,P1=35056,pr=5120,gn=5121,Qi=5122,Kr=5123,Di=5124,Tr=5125,An=5126,pl=32819,bl=32820,yl=33635,qn=5131,li=36193,Ao=33640,O1=35899,_1=35902,Q1=36269,D1=34042,$i=33319,Mr=33320,qi=6403,Ar=36244,zr=36248,Yr=36249;let zo;function to(i){if(!zo){const n={};n[ol]={textureFormat:ol,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[1,2,2,4],type:[gn,qn,li,An]},n[sl]={textureFormat:sl,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[1,2,2,4],type:[gn,qn,li,An]},n[ll]={textureFormat:ll,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[2,4,4,8],type:[gn,qn,li,An]},n[er]={textureFormat:er,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[3,6,6,12,2],type:[gn,qn,li,An,yl]},n[Gn]={textureFormat:Gn,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[4,8,8,16,2,2],type:[gn,qn,li,An,pl,bl]},n[si]={textureFormat:si,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[2,4],type:[Tr,Kr]},n[Ou]={textureFormat:qi,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[1],type:[gn]},n[_u]={textureFormat:qi,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[1],type:[pr]},n[Qu]={textureFormat:qi,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[4,2],type:[An,qn]},n[Du]={textureFormat:qi,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[4],type:[An]},n[$u]={textureFormat:Ar,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[1],type:[gn]},n[qu]={textureFormat:Ar,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[1],type:[pr]},n[a1]={textureFormat:Ar,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[2],type:[Kr]},n[d1]={textureFormat:Ar,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[2],type:[Qi]},n[h1]={textureFormat:Ar,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[Tr]},n[f1]={textureFormat:Ar,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[Di]},n[i1]={textureFormat:$i,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[2],type:[gn]},n[o1]={textureFormat:$i,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[2],type:[pr]},n[s1]={textureFormat:$i,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[8,4],type:[An,qn]},n[l1]={textureFormat:$i,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[8],type:[An]},n[c1]={textureFormat:Mr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[2],type:[gn]},n[u1]={textureFormat:Mr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[2],type:[pr]},n[t1]={textureFormat:Mr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[Kr]},n[e1]={textureFormat:Mr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[Qi]},n[n1]={textureFormat:Mr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[8],type:[Tr]},n[r1]={textureFormat:Mr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[8],type:[Di]},n[m1]={textureFormat:er,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[3],type:[gn]},n[p1]={textureFormat:er,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[3],type:[gn]},n[b1]={textureFormat:er,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[3,2],type:[gn,yl]},n[y1]={textureFormat:er,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[3],type:[pr]},n[g1]={textureFormat:er,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[12,6,4],type:[An,qn,O1]},n[Z1]={textureFormat:er,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[12,6,4],type:[An,qn,_1]},n[v1]={textureFormat:er,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[12,6],type:[An,qn]},n[G1]={textureFormat:er,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[12],type:[An]},n[X1]={textureFormat:zr,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[3],type:[gn]},n[W1]={textureFormat:zr,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[3],type:[pr]},n[V1]={textureFormat:zr,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[6],type:[Kr]},n[R1]={textureFormat:zr,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[6],type:[Qi]},n[I1]={textureFormat:zr,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[12],type:[Tr]},n[x1]={textureFormat:zr,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[12],type:[Di]},n[S1]={textureFormat:Gn,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[4],type:[gn]},n[T1]={textureFormat:Gn,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[4],type:[gn]},n[Y1]={textureFormat:Gn,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[4],type:[pr]},n[w1]={textureFormat:Gn,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[4,2,4],type:[gn,bl,Ao]},n[L1]={textureFormat:Gn,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[4,2],type:[gn,pl]},n[H1]={textureFormat:Gn,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[4],type:[Ao]},n[F1]={textureFormat:Gn,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[16,8],type:[An,qn]},n[C1]={textureFormat:Gn,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[16],type:[An]},n[J1]={textureFormat:Yr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[gn]},n[k1]={textureFormat:Yr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[pr]},n[N1]={textureFormat:Yr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[Ao]},n[E1]={textureFormat:Yr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[8],type:[Kr]},n[U1]={textureFormat:Yr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[8],type:[Qi]},n[B1]={textureFormat:Yr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[16],type:[Di]},n[K1]={textureFormat:Yr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[16],type:[Tr]},n[M1]={textureFormat:si,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[2,4],type:[Kr,Tr]},n[A1]={textureFormat:si,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[Tr]},n[z1]={textureFormat:si,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[An]},n[P1]={textureFormat:cl,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[D1]},n[j1]={textureFormat:cl,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[Q1]},Object.keys(n).forEach(function(r){const f=n[r];f.bytesPerElementMap={},f.bytesPerElement.forEach(function(Z,x){const H=f.type[x];f.bytesPerElementMap[H]=Z})}),zo=n}return zo[i]}function $1(i,n){const r=to(i);if(!r)throw"unknown internal format";const f=r.bytesPerElementMap[n];if(f===void 0)throw"unknown internal format";return f}function ci(i){const n=to(i);if(!n)throw"unknown internal format";return{format:n.textureFormat,type:n.type[0]}}function gl(i){return(i&i-1)===0}function q1(i,n,r,f){if(!ii(i))return gl(n)&&gl(r);const Z=to(f);if(!Z)throw"unknown internal format";return Z.colorRenderable&&Z.textureFilterable}function ta(i){const n=to(i);if(!n)throw"unknown internal format";return n.textureFilterable}function ea(i,n,r){return oi(n)?Jo(n):r||gn}function eo(i,n,r,f,Z){if(Z%1!==0)throw"can't guess dimensions";if(!r&&!f){const x=Math.sqrt(Z/(n===mr?6:1));x%1===0?(r=x,f=x):(r=Z,f=1)}else if(f){if(!r&&(r=Z/f,r%1))throw"can't guess dimensions"}else if(f=Z/r,f%1)throw"can't guess dimensions";return{width:r,height:f}}function jr(i,n){n.colorspaceConversion!==void 0&&i.pixelStorei(zu,n.colorspaceConversion),n.premultiplyAlpha!==void 0&&i.pixelStorei(ju,n.premultiplyAlpha),n.flipY!==void 0&&i.pixelStorei(Pu,n.flipY)}function Zl(i){i.pixelStorei(Mo,4),ii(i)&&(i.pixelStorei(al,0),i.pixelStorei(dl,0),i.pixelStorei(hl,0),i.pixelStorei(fl,0),i.pixelStorei(ml,0))}function na(i,n,r,f){f.minMag&&(r.call(i,n,Bo,f.minMag),r.call(i,n,Ko,f.minMag)),f.min&&r.call(i,n,Bo,f.min),f.mag&&r.call(i,n,Ko,f.mag),f.wrap&&(r.call(i,n,Oi,f.wrap),r.call(i,n,_i,f.wrap),(n===xr||cu(i,n))&&r.call(i,n,ul,f.wrap)),f.wrapR&&r.call(i,n,ul,f.wrapR),f.wrapS&&r.call(i,n,Oi,f.wrapS),f.wrapT&&r.call(i,n,_i,f.wrapT),f.minLod!==void 0&&r.call(i,n,Eu,f.minLod),f.maxLod!==void 0&&r.call(i,n,Uu,f.maxLod),f.baseLevel!==void 0&&r.call(i,n,Bu,f.baseLevel),f.maxLevel!==void 0&&r.call(i,n,Ku,f.maxLevel),f.compareFunc!==void 0&&r.call(i,n,Au,f.compareFunc),f.compareMode!==void 0&&r.call(i,n,Mu,f.compareMode)}function vl(i,n,r){const f=r.target||fr;i.bindTexture(f,n),na(i,f,i.texParameteri,r)}function ra(i){return i=i||hr.textureColor,oi(i)?i:new Uint8Array([i[0]*255,i[1]*255,i[2]*255,i[3]*255])}function jo(i,n,r,f,Z,x){r=r||hr.textureOptions,x=x||Gn;const H=r.target||fr;if(f=f||r.width,Z=Z||r.height,i.bindTexture(H,n),q1(i,f,Z,x))i.generateMipmap(H);else{const T=ta(x)?Hu:Lu;i.texParameteri(H,Bo,T),i.texParameteri(H,Ko,T),i.texParameteri(H,Oi,Pi),i.texParameteri(H,_i,Pi)}}function ui(i){return i.auto===!0||i.auto===void 0&&i.level===void 0}function Po(i,n){return n=n||{},n.cubeFaceOrder||[Uo,Fu,Cu,Ju,ku,Nu]}function Oo(i,n){const f=Po(i,n).map(function(Z,x){return{face:Z,ndx:x}});return f.sort(function(Z,x){return Z.face-x.face}),f}function Gl(i,n,r,f){f=f||hr.textureOptions;const Z=f.target||fr,x=f.level||0;let H=r.width,T=r.height;const J=f.internalFormat||f.format||Gn,et=ci(J),lt=f.format||et.format,pt=f.type||et.type;if(jr(i,f),i.bindTexture(Z,n),Z===mr){const Yt=r.width,Lt=r.height;let at,dt;if(Yt/6===Lt)at=Lt,dt=[0,0,1,0,2,0,3,0,4,0,5,0];else if(Lt/6===Yt)at=Yt,dt=[0,0,0,1,0,2,0,3,0,4,0,5];else if(Yt/3===Lt/2)at=Yt/3,dt=[0,0,1,0,2,0,0,1,1,1,2,1];else if(Yt/2===Lt/3)at=Yt/2,dt=[0,0,1,0,0,1,1,1,0,2,1,2];else throw"can't figure out cube map from element: "+(r.src?r.src:r.nodeName);const Bt=il();Bt?(Bt.canvas.width=at,Bt.canvas.height=at,H=at,T=at,Oo(i,f).forEach(function(Nt){const ee=dt[Nt.ndx*2+0]*at,O=dt[Nt.ndx*2+1]*at;Bt.drawImage(r,ee,O,at,at,0,0,at,at),i.texImage2D(Nt.face,x,J,lt,pt,Bt.canvas)}),Bt.canvas.width=1,Bt.canvas.height=1):typeof createImageBitmap<"u"&&(H=at,T=at,Oo(i,f).forEach(function(Nt){const ee=dt[Nt.ndx*2+0]*at,O=dt[Nt.ndx*2+1]*at;i.texImage2D(Nt.face,x,J,at,at,0,lt,pt,null),createImageBitmap(r,ee,O,at,at,{premultiplyAlpha:"none",colorSpaceConversion:"none"}).then(function($e){jr(i,f),i.bindTexture(Z,n),i.texImage2D(Nt.face,x,J,lt,pt,$e),ui(f)&&jo(i,n,f,H,T,J)})}))}else if(Z===xr||Z===Sr){const Yt=Math.min(r.width,r.height),Lt=Math.max(r.width,r.height),at=Lt/Yt;if(at%1!==0)throw"can not compute 3D dimensions of element";const dt=r.width===Lt?1:0,Bt=r.height===Lt?1:0;i.pixelStorei(Mo,1),i.pixelStorei(al,r.width),i.pixelStorei(dl,0),i.pixelStorei(ml,0),i.texImage3D(Z,x,J,Yt,Yt,Yt,0,lt,pt,null);for(let Nt=0;Nt<at;++Nt){const ee=Nt*Yt*dt,O=Nt*Yt*Bt;i.pixelStorei(hl,ee),i.pixelStorei(fl,O),i.texSubImage3D(Z,x,0,0,Nt,Yt,Yt,1,lt,pt,r)}Zl(i)}else i.texImage2D(Z,x,J,lt,pt,r);ui(f)&&jo(i,n,f,H,T,J),vl(i,n,f)}function ai(){}function ia(i){if(typeof document<"u"){const n=document.createElement("a");return n.href=i,n.hostname===location.hostname&&n.port===location.port&&n.protocol===location.protocol}else{const n=new URL(location.href).origin;return new URL(i,location.href).origin===n}}function oa(i,n){return n===void 0&&!ia(i)?"anonymous":n}function sa(i,n,r){r=r||ai;let f;if(n=n!==void 0?n:hr.crossOrigin,n=oa(i,n),typeof Image<"u"){f=new Image,n!==void 0&&(f.crossOrigin=n);const Z=function(){f.removeEventListener("error",x),f.removeEventListener("load",H),f=null},x=function(){const J="couldn't load image: "+i;_s(J),r(J,f),Z()},H=function(){r(null,f),Z()};return f.addEventListener("error",x),f.addEventListener("load",H),f.src=i,f}else if(typeof ImageBitmap<"u"){let Z,x;const H=function(){r(Z,x)},T={};n&&(T.mode="cors"),fetch(i,T).then(function(J){if(!J.ok)throw J;return J.blob()}).then(function(J){return createImageBitmap(J,{premultiplyAlpha:"none",colorSpaceConversion:"none"})}).then(function(J){x=J,setTimeout(H)}).catch(function(J){Z=J,setTimeout(H)}),f=null}return f}function Xl(i){return typeof ImageBitmap<"u"&&i instanceof ImageBitmap||typeof ImageData<"u"&&i instanceof ImageData||typeof HTMLElement<"u"&&i instanceof HTMLElement}function _o(i,n,r){return Xl(i)?(setTimeout(function(){r(null,i)}),i):sa(i,n,r)}function Qo(i,n,r){r=r||hr.textureOptions;const f=r.target||fr;if(i.bindTexture(f,n),r.color===!1)return;const Z=ra(r.color);if(f===mr)for(let x=0;x<6;++x)i.texImage2D(Uo+x,0,Gn,1,1,0,Gn,gn,Z);else f===xr||f===Sr?i.texImage3D(f,0,Gn,1,1,1,0,Gn,gn,Z):i.texImage2D(f,0,Gn,1,1,0,Gn,gn,Z)}function la(i,n,r,f){return f=f||ai,r=r||hr.textureOptions,Qo(i,n,r),r=Object.assign({},r),_o(r.src,r.crossOrigin,function(x,H){x?f(x,n,H):(Gl(i,n,H,r),f(null,n,H))})}function ca(i,n,r,f){f=f||ai;const Z=r.src;if(Z.length!==6)throw"there must be 6 urls for a cubemap";const x=r.level||0,H=r.internalFormat||r.format||Gn,T=ci(H),J=r.format||T.format,et=r.type||gn,lt=r.target||fr;if(lt!==mr)throw"target must be TEXTURE_CUBE_MAP";Qo(i,n,r),r=Object.assign({},r);let pt=6;const Yt=[],Lt=Po(i,r);let at;function dt(Bt){return function(Nt,ee){--pt,Nt?Yt.push(Nt):ee.width!==ee.height?Yt.push("cubemap face img is not a square: "+ee.src):(jr(i,r),i.bindTexture(lt,n),pt===5?Po().forEach(function(O){i.texImage2D(O,x,H,J,et,ee)}):i.texImage2D(Bt,x,H,J,et,ee),ui(r)&&i.generateMipmap(lt)),pt===0&&f(Yt.length?Yt:void 0,n,at)}}at=Z.map(function(Bt,Nt){return _o(Bt,r.crossOrigin,dt(Lt[Nt]))})}function ua(i,n,r,f){f=f||ai;const Z=r.src,x=r.internalFormat||r.format||Gn,H=ci(x),T=r.format||H.format,J=r.type||gn,et=r.target||Sr;if(et!==xr&&et!==Sr)throw"target must be TEXTURE_3D or TEXTURE_2D_ARRAY";Qo(i,n,r),r=Object.assign({},r);let lt=Z.length;const pt=[];let Yt;const Lt=r.level||0;let at=r.width,dt=r.height;const Bt=Z.length;let Nt=!0;function ee(O){return function($e,je){if(--lt,$e)pt.push($e);else{if(jr(i,r),i.bindTexture(et,n),Nt){Nt=!1,at=r.width||je.width,dt=r.height||je.height,i.texImage3D(et,Lt,x,at,dt,Bt,0,T,J,null);for(let We=0;We<Bt;++We)i.texSubImage3D(et,Lt,0,0,We,at,dt,1,T,J,je)}else{let We=je,zt;(je.width!==at||je.height!==dt)&&(zt=il(),We=zt.canvas,zt.canvas.width=at,zt.canvas.height=dt,zt.drawImage(je,0,0,at,dt)),i.texSubImage3D(et,Lt,0,0,O,at,dt,1,T,J,We),zt&&We===zt.canvas&&(zt.canvas.width=0,zt.canvas.height=0)}ui(r)&&i.generateMipmap(et)}lt===0&&f(pt.length?pt:void 0,n,Yt)}}Yt=Z.map(function(O,$e){return _o(O,r.crossOrigin,ee($e))})}function aa(i,n,r,f){f=f||hr.textureOptions;const Z=f.target||fr;i.bindTexture(Z,n);let x=f.width,H=f.height,T=f.depth;const J=f.level||0,et=f.internalFormat||f.format||Gn,lt=ci(et),pt=f.format||lt.format,Yt=f.type||ea(i,r,lt.type);if(oi(r))r instanceof Uint8ClampedArray&&(r=new Uint8Array(r.buffer));else{const Bt=Os(Yt);r=new Bt(r)}const Lt=$1(et,Yt),at=r.byteLength/Lt;if(at%1)throw"length wrong size for format: "+rl(i,pt);let dt;if(Z===xr||Z===Sr)if(!x&&!H&&!T){const Bt=Math.cbrt(at);if(Bt%1!==0)throw"can't guess cube size of array of numElements: "+at;x=Bt,H=Bt,T=Bt}else x&&(!H||!T)?(dt=eo(i,Z,H,T,at/x),H=dt.width,T=dt.height):H&&(!x||!T)?(dt=eo(i,Z,x,T,at/H),x=dt.width,T=dt.height):(dt=eo(i,Z,x,H,at/T),x=dt.width,H=dt.height);else dt=eo(i,Z,x,H,at),x=dt.width,H=dt.height;if(Zl(i),i.pixelStorei(Mo,f.unpackAlignment||1),jr(i,f),Z===mr){const Bt=Lt/r.BYTES_PER_ELEMENT,Nt=at/6*Bt;Oo(i,f).forEach(ee=>{const O=Nt*ee.ndx,$e=r.subarray(O,O+Nt);i.texImage2D(ee.face,J,et,x,H,0,pt,Yt,$e)})}else Z===xr||Z===Sr?i.texImage3D(Z,J,et,x,H,T,0,pt,Yt,r):i.texImage2D(Z,J,et,x,H,0,pt,Yt,r);return{width:x,height:H,depth:T,type:Yt}}function da(i,n,r){const f=r.target||fr;i.bindTexture(f,n);const Z=r.level||0,x=r.internalFormat||r.format||Gn,H=ci(x),T=r.format||H.format,J=r.type||H.type;if(jr(i,r),f===mr)for(let et=0;et<6;++et)i.texImage2D(Uo+et,Z,x,r.width,r.height,0,T,J,null);else f===xr||f===Sr?i.texImage3D(f,Z,x,r.width,r.height,r.depth,0,T,J,null):i.texImage2D(f,Z,x,r.width,r.height,0,T,J,null)}function Wl(i,n,r){r=r||ai,n=n||hr.textureOptions;const f=i.createTexture(),Z=n.target||fr;let x=n.width||1,H=n.height||1;const T=n.internalFormat||Gn;i.bindTexture(Z,f),Z===mr&&(i.texParameteri(Z,Oi,Pi),i.texParameteri(Z,_i,Pi));let J=n.src;if(J)if(typeof J=="function"&&(J=J(i,n)),typeof J=="string")la(i,f,n,r);else if(oi(J)||Array.isArray(J)&&(typeof J[0]=="number"||Array.isArray(J[0])||oi(J[0]))){const et=aa(i,f,J,n);x=et.width,H=et.height}else Array.isArray(J)&&(typeof J[0]=="string"||Xl(J[0]))?Z===mr?ca(i,f,n,r):ua(i,f,n,r):(Gl(i,f,J,n),x=J.width,H=J.height);else da(i,f,n);return ui(n)&&jo(i,f,n,x,H,T),vl(i,f,n),f}const Do=_s;function Vl(i){return typeof document<"u"&&document.getElementById?document.getElementById(i):null}const no=33984,ro=34962,ha=34963,fa=35713,ma=35714,pa=35632,ba=35633,ya=35981,Rl=35718,ga=35721,Za=35971,va=35382,Ga=35396,Xa=35398,Wa=35392,Va=35395,io=5126,Il=35664,xl=35665,Sl=35666,$o=5124,Tl=35667,Yl=35668,wl=35669,Ll=35670,Hl=35671,Fl=35672,Cl=35673,Jl=35674,kl=35675,Nl=35676,Ra=35678,Ia=35680,xa=35679,Sa=35682,Ta=35685,Ya=35686,wa=35687,La=35688,Ha=35689,Fa=35690,Ca=36289,Ja=36292,ka=36293,qo=5125,El=36294,Ul=36295,Bl=36296,Na=36298,Ea=36299,Ua=36300,Ba=36303,Ka=36306,Ma=36307,Aa=36308,za=36311,oo=3553,so=34067,ts=32879,lo=35866,be={};function Kl(i,n){return be[n].bindPoint}function ja(i,n){return function(r){i.uniform1f(n,r)}}function Pa(i,n){return function(r){i.uniform1fv(n,r)}}function Oa(i,n){return function(r){i.uniform2fv(n,r)}}function _a(i,n){return function(r){i.uniform3fv(n,r)}}function Qa(i,n){return function(r){i.uniform4fv(n,r)}}function Ml(i,n){return function(r){i.uniform1i(n,r)}}function Al(i,n){return function(r){i.uniform1iv(n,r)}}function zl(i,n){return function(r){i.uniform2iv(n,r)}}function jl(i,n){return function(r){i.uniform3iv(n,r)}}function Pl(i,n){return function(r){i.uniform4iv(n,r)}}function Da(i,n){return function(r){i.uniform1ui(n,r)}}function $a(i,n){return function(r){i.uniform1uiv(n,r)}}function qa(i,n){return function(r){i.uniform2uiv(n,r)}}function t0(i,n){return function(r){i.uniform3uiv(n,r)}}function e0(i,n){return function(r){i.uniform4uiv(n,r)}}function n0(i,n){return function(r){i.uniformMatrix2fv(n,!1,r)}}function r0(i,n){return function(r){i.uniformMatrix3fv(n,!1,r)}}function i0(i,n){return function(r){i.uniformMatrix4fv(n,!1,r)}}function o0(i,n){return function(r){i.uniformMatrix2x3fv(n,!1,r)}}function s0(i,n){return function(r){i.uniformMatrix3x2fv(n,!1,r)}}function l0(i,n){return function(r){i.uniformMatrix2x4fv(n,!1,r)}}function c0(i,n){return function(r){i.uniformMatrix4x2fv(n,!1,r)}}function u0(i,n){return function(r){i.uniformMatrix3x4fv(n,!1,r)}}function a0(i,n){return function(r){i.uniformMatrix4x3fv(n,!1,r)}}function Pn(i,n,r,f){const Z=Kl(i,n);return ii(i)?function(x){let H,T;!x||ko(i,x)?(H=x,T=null):(H=x.texture,T=x.sampler),i.uniform1i(f,r),i.activeTexture(no+r),i.bindTexture(Z,H),i.bindSampler(r,T)}:function(x){i.uniform1i(f,r),i.activeTexture(no+r),i.bindTexture(Z,x)}}function On(i,n,r,f,Z){const x=Kl(i,n),H=new Int32Array(Z);for(let T=0;T<Z;++T)H[T]=r+T;return ii(i)?function(T){i.uniform1iv(f,H),T.forEach(function(J,et){i.activeTexture(no+H[et]);let lt,pt;!J||ko(i,J)?(lt=J,pt=null):(lt=J.texture,pt=J.sampler),i.bindSampler(r,pt),i.bindTexture(x,lt)})}:function(T){i.uniform1iv(f,H),T.forEach(function(J,et){i.activeTexture(no+H[et]),i.bindTexture(x,J)})}}be[io]={Type:Float32Array,size:4,setter:ja,arraySetter:Pa},be[Il]={Type:Float32Array,size:8,setter:Oa,cols:2},be[xl]={Type:Float32Array,size:12,setter:_a,cols:3},be[Sl]={Type:Float32Array,size:16,setter:Qa,cols:4},be[$o]={Type:Int32Array,size:4,setter:Ml,arraySetter:Al},be[Tl]={Type:Int32Array,size:8,setter:zl,cols:2},be[Yl]={Type:Int32Array,size:12,setter:jl,cols:3},be[wl]={Type:Int32Array,size:16,setter:Pl,cols:4},be[qo]={Type:Uint32Array,size:4,setter:Da,arraySetter:$a},be[El]={Type:Uint32Array,size:8,setter:qa,cols:2},be[Ul]={Type:Uint32Array,size:12,setter:t0,cols:3},be[Bl]={Type:Uint32Array,size:16,setter:e0,cols:4},be[Ll]={Type:Uint32Array,size:4,setter:Ml,arraySetter:Al},be[Hl]={Type:Uint32Array,size:8,setter:zl,cols:2},be[Fl]={Type:Uint32Array,size:12,setter:jl,cols:3},be[Cl]={Type:Uint32Array,size:16,setter:Pl,cols:4},be[Jl]={Type:Float32Array,size:32,setter:n0,rows:2,cols:2},be[kl]={Type:Float32Array,size:48,setter:r0,rows:3,cols:3},be[Nl]={Type:Float32Array,size:64,setter:i0,rows:4,cols:4},be[Ta]={Type:Float32Array,size:32,setter:o0,rows:2,cols:3},be[Ya]={Type:Float32Array,size:32,setter:l0,rows:2,cols:4},be[wa]={Type:Float32Array,size:48,setter:s0,rows:3,cols:2},be[La]={Type:Float32Array,size:48,setter:u0,rows:3,cols:4},be[Ha]={Type:Float32Array,size:64,setter:c0,rows:4,cols:2},be[Fa]={Type:Float32Array,size:64,setter:a0,rows:4,cols:3},be[Ra]={Type:null,size:0,setter:Pn,arraySetter:On,bindPoint:oo},be[Ia]={Type:null,size:0,setter:Pn,arraySetter:On,bindPoint:so},be[xa]={Type:null,size:0,setter:Pn,arraySetter:On,bindPoint:ts},be[Sa]={Type:null,size:0,setter:Pn,arraySetter:On,bindPoint:oo},be[Ca]={Type:null,size:0,setter:Pn,arraySetter:On,bindPoint:lo},be[Ja]={Type:null,size:0,setter:Pn,arraySetter:On,bindPoint:lo},be[ka]={Type:null,size:0,setter:Pn,arraySetter:On,bindPoint:so},be[Na]={Type:null,size:0,setter:Pn,arraySetter:On,bindPoint:oo},be[Ea]={Type:null,size:0,setter:Pn,arraySetter:On,bindPoint:ts},be[Ua]={Type:null,size:0,setter:Pn,arraySetter:On,bindPoint:so},be[Ba]={Type:null,size:0,setter:Pn,arraySetter:On,bindPoint:lo},be[Ka]={Type:null,size:0,setter:Pn,arraySetter:On,bindPoint:oo},be[Ma]={Type:null,size:0,setter:Pn,arraySetter:On,bindPoint:ts},be[Aa]={Type:null,size:0,setter:Pn,arraySetter:On,bindPoint:so},be[za]={Type:null,size:0,setter:Pn,arraySetter:On,bindPoint:lo};function co(i,n){return function(r){if(r.value)switch(i.disableVertexAttribArray(n),r.value.length){case 4:i.vertexAttrib4fv(n,r.value);break;case 3:i.vertexAttrib3fv(n,r.value);break;case 2:i.vertexAttrib2fv(n,r.value);break;case 1:i.vertexAttrib1fv(n,r.value);break;default:throw new Error("the length of a float constant value must be between 1 and 4!")}else i.bindBuffer(ro,r.buffer),i.enableVertexAttribArray(n),i.vertexAttribPointer(n,r.numComponents||r.size,r.type||io,r.normalize||!1,r.stride||0,r.offset||0),i.vertexAttribDivisor&&i.vertexAttribDivisor(n,r.divisor||0)}}function br(i,n){return function(r){if(r.value)if(i.disableVertexAttribArray(n),r.value.length===4)i.vertexAttrib4iv(n,r.value);else throw new Error("The length of an integer constant value must be 4!");else i.bindBuffer(ro,r.buffer),i.enableVertexAttribArray(n),i.vertexAttribIPointer(n,r.numComponents||r.size,r.type||$o,r.stride||0,r.offset||0),i.vertexAttribDivisor&&i.vertexAttribDivisor(n,r.divisor||0)}}function uo(i,n){return function(r){if(r.value)if(i.disableVertexAttribArray(n),r.value.length===4)i.vertexAttrib4uiv(n,r.value);else throw new Error("The length of an unsigned integer constant value must be 4!");else i.bindBuffer(ro,r.buffer),i.enableVertexAttribArray(n),i.vertexAttribIPointer(n,r.numComponents||r.size,r.type||qo,r.stride||0,r.offset||0),i.vertexAttribDivisor&&i.vertexAttribDivisor(n,r.divisor||0)}}function es(i,n,r){const f=r.size,Z=r.count;return function(x){i.bindBuffer(ro,x.buffer);const H=x.size||x.numComponents||f,T=H/Z,J=x.type||io,lt=be[J].size*H,pt=x.normalize||!1,Yt=x.offset||0,Lt=lt/Z;for(let at=0;at<Z;++at)i.enableVertexAttribArray(n+at),i.vertexAttribPointer(n+at,T,J,pt,lt,Yt+Lt*at),i.vertexAttribDivisor&&i.vertexAttribDivisor(n+at,x.divisor||0)}}const Ln={};Ln[io]={size:4,setter:co},Ln[Il]={size:8,setter:co},Ln[xl]={size:12,setter:co},Ln[Sl]={size:16,setter:co},Ln[$o]={size:4,setter:br},Ln[Tl]={size:8,setter:br},Ln[Yl]={size:12,setter:br},Ln[wl]={size:16,setter:br},Ln[qo]={size:4,setter:uo},Ln[El]={size:8,setter:uo},Ln[Ul]={size:12,setter:uo},Ln[Bl]={size:16,setter:uo},Ln[Ll]={size:4,setter:br},Ln[Hl]={size:8,setter:br},Ln[Fl]={size:12,setter:br},Ln[Cl]={size:16,setter:br},Ln[Jl]={size:4,setter:es,count:2},Ln[kl]={size:9,setter:es,count:3},Ln[Nl]={size:16,setter:es,count:4};const d0=/ERROR:\s*\d+:(\d+)/gi;function h0(i,n="",r=0){const f=[...n.matchAll(d0)],Z=new Map(f.map((x,H)=>{const T=parseInt(x[1]),J=f[H+1],et=J?J.index:n.length,lt=n.substring(x.index,et);return[T-1,lt]}));return i.split(`
|
|
126
|
-
`).map((
|
|
125
|
+
see: http://github.com/greggman/twgl.js for details */const So=5120,ei=5121,To=5122,Yo=5123,wo=5124,Lo=5125,Fo=5126,Qc=32819,Dc=32820,$c=33635,qc=5131,tu=33640,eu=35899,nu=35902,ru=36269,iu=34042,As={};{const i=As;i[So]=Int8Array,i[ei]=Uint8Array,i[To]=Int16Array,i[Yo]=Uint16Array,i[wo]=Int32Array,i[Lo]=Uint32Array,i[Fo]=Float32Array,i[Qc]=Uint16Array,i[Dc]=Uint16Array,i[$c]=Uint16Array,i[qc]=Uint16Array,i[tu]=Uint32Array,i[eu]=Uint32Array,i[nu]=Uint32Array,i[ru]=Uint32Array,i[iu]=Uint32Array}function Co(i){if(i instanceof Int8Array)return So;if(i instanceof Uint8Array||i instanceof Uint8ClampedArray)return ei;if(i instanceof Int16Array)return To;if(i instanceof Uint16Array)return Yo;if(i instanceof Int32Array)return wo;if(i instanceof Uint32Array)return Lo;if(i instanceof Float32Array)return Fo;throw new Error("unsupported typed array type")}function zs(i){if(i===Int8Array)return So;if(i===Uint8Array||i===Uint8ClampedArray)return ei;if(i===Int16Array)return To;if(i===Uint16Array)return Yo;if(i===Int32Array)return wo;if(i===Uint32Array)return Lo;if(i===Float32Array)return Fo;throw new Error("unsupported typed array type")}function js(i){const n=As[i];if(!n)throw new Error("unknown gl type");return n}const Mi=typeof SharedArrayBuffer<"u"?function(n){return n&&n.buffer&&(n.buffer instanceof ArrayBuffer||n.buffer instanceof SharedArrayBuffer)}:function(n){return n&&n.buffer&&n.buffer instanceof ArrayBuffer};function Os(...i){console.error(...i)}const Ps=new Map;function Ai(i,n){if(!i||typeof i!="object")return!1;let r=Ps.get(n);r||(r=new WeakMap,Ps.set(n,r));let f=r.get(i);if(f===void 0){const Z=Object.prototype.toString.call(i);f=Z.substring(8,Z.length-1)===n,r.set(i,f)}return f}function ou(i,n){return typeof WebGLBuffer<"u"&&Ai(n,"WebGLBuffer")}function su(i,n){return typeof WebGLRenderbuffer<"u"&&Ai(n,"WebGLRenderbuffer")}function Ho(i,n){return typeof WebGLTexture<"u"&&Ai(n,"WebGLTexture")}function lu(i,n){return typeof WebGLSampler<"u"&&Ai(n,"WebGLSampler")}const _s=35044,Vr=34962,cu=34963,uu=34660,au=5120,du=5121,hu=5122,fu=5123,mu=5124,pu=5125,Qs=5126,Ds={attribPrefix:""};function bu(i,n,r,f,Z){i.bindBuffer(n,r),i.bufferData(n,f,Z||_s)}function $s(i,n,r,f){if(ou(i,n))return n;r=r||Vr;const Z=i.createBuffer();return bu(i,r,Z,n,f),Z}function qs(i){return i==="indices"}function yu(i){return i===Int8Array||i===Uint8Array}function gu(i){return i.length?i:i.data}const Zu=/coord|texture/i,vu=/color|colour/i;function Gu(i,n){let r;if(Zu.test(i)?r=2:vu.test(i)?r=4:r=3,n%r>0)throw new Error(`Can not guess numComponents for attribute '${i}'. Tried ${r} but ${n} values is not evenly divisible by ${r}. You should specify it.`);return r}function Xu(i,n,r){return i.numComponents||i.size||Gu(n,r||gu(i).length)}function tl(i,n){if(Mi(i))return i;if(Mi(i.data))return i.data;Array.isArray(i)&&(i={data:i});let r=i.type?Jo(i.type):void 0;return r||(qs(n)?r=Uint16Array:r=Float32Array),new r(i.data)}function Wu(i){return typeof i=="number"?i:i?zs(i):Qs}function Jo(i){return typeof i=="number"?js(i):i||Float32Array}function Vu(i,n){return{buffer:n.buffer,numValues:2*3*4,type:Wu(n.type),arrayType:Jo(n.type)}}function Ru(i,n){const r=n.data||n,f=Jo(n.type),Z=r*f.BYTES_PER_ELEMENT,I=i.createBuffer();return i.bindBuffer(Vr,I),i.bufferData(Vr,Z,n.drawType||_s),{buffer:I,numValues:r,type:zs(f),arrayType:f}}function xu(i,n,r){const f=tl(n,r);return{arrayType:f.constructor,buffer:$s(i,f,void 0,n.drawType),type:Co(f),numValues:0}}function Iu(i,n){const r={};return Object.keys(n).forEach(function(f){if(!qs(f)){const Z=n[f],I=Z.attrib||Z.name||Z.attribName||Ds.attribPrefix+f;if(Z.value){if(!Array.isArray(Z.value)&&!Mi(Z.value))throw new Error("array.value is not array or typedarray");r[I]={value:Z.value}}else{let F;Z.buffer&&Z.buffer instanceof WebGLBuffer?F=Vu:typeof Z=="number"||typeof Z.data=="number"?F=Ru:F=xu;const{buffer:T,type:J,numValues:et,arrayType:lt}=F(i,Z,f),pt=Z.normalize!==void 0?Z.normalize:yu(lt),Yt=Xu(Z,f,et);r[I]={buffer:T,numComponents:Yt,type:J,normalize:pt,stride:Z.stride||0,offset:Z.offset||0,divisor:Z.divisor===void 0?void 0:Z.divisor,drawType:Z.drawType}}}}),i.bindBuffer(Vr,null),r}function Su(i,n){return n===au||n===du?1:n===hu||n===fu?2:n===mu||n===pu||n===Qs?4:0}const No=["position","positions","a_position"];function Tu(i,n){let r,f;for(f=0;f<No.length&&(r=No[f],!(r in n||(r=Ds.attribPrefix+r,r in n)));++f);f===No.length&&(r=Object.keys(n)[0]);const Z=n[r];if(!Z.buffer)return 1;i.bindBuffer(Vr,Z.buffer);const I=i.getBufferParameter(Vr,uu);i.bindBuffer(Vr,null);const F=Su(i,Z.type),T=I/F,J=Z.numComponents||Z.size,et=T/J;if(et%1!==0)throw new Error(`numComponents ${J} not correct for length ${length}`);return et}function Yu(i,n,r){const f=Iu(i,n),Z=Object.assign({},r||{});Z.attribs=Object.assign({},r?r.attribs:{},f);const I=n.indices;if(I){const F=tl(I,"indices");Z.indices=$s(i,F,cu),Z.numElements=F.length,Z.elementType=Co(F)}else Z.numElements||(Z.numElements=Tu(i,Z.attribs));return Z}function ni(i){return!!i.texStorage2D}const el=function(){const i={},n={};function r(f){const Z=f.constructor.name;if(!i[Z]){for(const I in f)if(typeof f[I]=="number"){const F=n[f[I]];n[f[I]]=F?`${F} | ${I}`:I}i[Z]=!0}}return function(Z,I){return r(Z),n[I]||(typeof I=="number"?`0x${I.toString(16)}`:I)}}(),dr={textureColor:new Uint8Array([128,192,255,255]),textureOptions:{},crossOrigin:void 0},ri=Mi,nl=function(){let i;return function(){return i=i||(typeof document<"u"&&document.createElement?document.createElement("canvas").getContext("2d"):null),i}}(),rl=6406,er=6407,vn=6408,il=6409,ol=6410,ii=6402,sl=34041,zi=33071,wu=9728,Lu=9729,hr=3553,fr=34067,Rr=32879,xr=35866,ko=34069,Fu=34070,Cu=34071,Hu=34072,Ju=34073,Nu=34074,Eo=10241,Uo=10240,ji=10242,Oi=10243,ll=32882,ku=33082,Eu=33083,Uu=33084,Bu=33085,Ku=34892,Mu=34893,Bo=3317,cl=3314,ul=32878,al=3316,dl=3315,hl=32877,Au=37443,zu=37441,ju=37440,Ou=33321,Pu=36756,_u=33325,Qu=33326,Du=33330,$u=33329,qu=33338,t1=33337,e1=33340,n1=33339,r1=33323,i1=36757,o1=33327,s1=33328,l1=33336,c1=33335,u1=33332,a1=33331,d1=33334,h1=33333,f1=32849,m1=35905,p1=36194,b1=36758,y1=35898,g1=35901,Z1=34843,v1=34837,G1=36221,X1=36239,W1=36215,V1=36233,R1=36209,x1=36227,I1=32856,S1=35907,T1=36759,Y1=32855,w1=32854,L1=32857,F1=34842,C1=34836,H1=36220,J1=36238,N1=36975,k1=36214,E1=36232,U1=36226,B1=36208,K1=33189,M1=33190,A1=36012,z1=36013,j1=35056,mr=5120,yn=5121,Pi=5122,Ur=5123,_i=5124,Ir=5125,Mn=5126,fl=32819,ml=32820,pl=33635,qn=5131,oi=36193,Ko=33640,O1=35899,P1=35902,_1=36269,Q1=34042,Qi=33319,Br=33320,Di=6403,Kr=36244,Mr=36248,Sr=36249;let Mo;function $i(i){if(!Mo){const n={};n[rl]={textureFormat:rl,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[1,2,2,4],type:[yn,qn,oi,Mn]},n[il]={textureFormat:il,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[1,2,2,4],type:[yn,qn,oi,Mn]},n[ol]={textureFormat:ol,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[2,4,4,8],type:[yn,qn,oi,Mn]},n[er]={textureFormat:er,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[3,6,6,12,2],type:[yn,qn,oi,Mn,pl]},n[vn]={textureFormat:vn,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[4,8,8,16,2,2],type:[yn,qn,oi,Mn,fl,ml]},n[ii]={textureFormat:ii,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[2,4],type:[Ir,Ur]},n[Ou]={textureFormat:Di,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[1],type:[yn]},n[Pu]={textureFormat:Di,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[1],type:[mr]},n[_u]={textureFormat:Di,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[4,2],type:[Mn,qn]},n[Qu]={textureFormat:Di,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[4],type:[Mn]},n[Du]={textureFormat:Kr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[1],type:[yn]},n[$u]={textureFormat:Kr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[1],type:[mr]},n[u1]={textureFormat:Kr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[2],type:[Ur]},n[a1]={textureFormat:Kr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[2],type:[Pi]},n[d1]={textureFormat:Kr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[Ir]},n[h1]={textureFormat:Kr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[_i]},n[r1]={textureFormat:Qi,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[2],type:[yn]},n[i1]={textureFormat:Qi,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[2],type:[mr]},n[o1]={textureFormat:Qi,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[8,4],type:[Mn,qn]},n[s1]={textureFormat:Qi,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[8],type:[Mn]},n[l1]={textureFormat:Br,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[2],type:[yn]},n[c1]={textureFormat:Br,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[2],type:[mr]},n[qu]={textureFormat:Br,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[Ur]},n[t1]={textureFormat:Br,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[Pi]},n[e1]={textureFormat:Br,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[8],type:[Ir]},n[n1]={textureFormat:Br,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[8],type:[_i]},n[f1]={textureFormat:er,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[3],type:[yn]},n[m1]={textureFormat:er,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[3],type:[yn]},n[p1]={textureFormat:er,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[3,2],type:[yn,pl]},n[b1]={textureFormat:er,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[3],type:[mr]},n[y1]={textureFormat:er,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[12,6,4],type:[Mn,qn,O1]},n[g1]={textureFormat:er,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[12,6,4],type:[Mn,qn,P1]},n[Z1]={textureFormat:er,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[12,6],type:[Mn,qn]},n[v1]={textureFormat:er,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[12],type:[Mn]},n[G1]={textureFormat:Mr,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[3],type:[yn]},n[X1]={textureFormat:Mr,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[3],type:[mr]},n[W1]={textureFormat:Mr,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[6],type:[Ur]},n[V1]={textureFormat:Mr,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[6],type:[Pi]},n[R1]={textureFormat:Mr,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[12],type:[Ir]},n[x1]={textureFormat:Mr,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[12],type:[_i]},n[I1]={textureFormat:vn,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[4],type:[yn]},n[S1]={textureFormat:vn,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[4],type:[yn]},n[T1]={textureFormat:vn,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[4],type:[mr]},n[Y1]={textureFormat:vn,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[4,2,4],type:[yn,ml,Ko]},n[w1]={textureFormat:vn,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[4,2],type:[yn,fl]},n[L1]={textureFormat:vn,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[4],type:[Ko]},n[F1]={textureFormat:vn,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[16,8],type:[Mn,qn]},n[C1]={textureFormat:vn,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[16],type:[Mn]},n[H1]={textureFormat:Sr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[yn]},n[J1]={textureFormat:Sr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[mr]},n[N1]={textureFormat:Sr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[Ko]},n[k1]={textureFormat:Sr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[8],type:[Ur]},n[E1]={textureFormat:Sr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[8],type:[Pi]},n[U1]={textureFormat:Sr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[16],type:[_i]},n[B1]={textureFormat:Sr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[16],type:[Ir]},n[K1]={textureFormat:ii,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[2,4],type:[Ur,Ir]},n[M1]={textureFormat:ii,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[Ir]},n[A1]={textureFormat:ii,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[Mn]},n[j1]={textureFormat:sl,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[Q1]},n[z1]={textureFormat:sl,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[_1]},Object.keys(n).forEach(function(r){const f=n[r];f.bytesPerElementMap={},f.bytesPerElement.forEach(function(Z,I){const F=f.type[I];f.bytesPerElementMap[F]=Z})}),Mo=n}return Mo[i]}function D1(i,n){const r=$i(i);if(!r)throw"unknown internal format";const f=r.bytesPerElementMap[n];if(f===void 0)throw"unknown internal format";return f}function si(i){const n=$i(i);if(!n)throw"unknown internal format";return{format:n.textureFormat,type:n.type[0]}}function bl(i){return(i&i-1)===0}function $1(i,n,r,f){if(!ni(i))return bl(n)&&bl(r);const Z=$i(f);if(!Z)throw"unknown internal format";return Z.colorRenderable&&Z.textureFilterable}function q1(i){const n=$i(i);if(!n)throw"unknown internal format";return n.textureFilterable}function ta(i,n,r){return ri(n)?Co(n):r||yn}function qi(i,n,r,f,Z){if(Z%1!==0)throw"can't guess dimensions";if(!r&&!f){const I=Math.sqrt(Z/(n===fr?6:1));I%1===0?(r=I,f=I):(r=Z,f=1)}else if(f){if(!r&&(r=Z/f,r%1))throw"can't guess dimensions"}else if(f=Z/r,f%1)throw"can't guess dimensions";return{width:r,height:f}}function Ar(i,n){n.colorspaceConversion!==void 0&&i.pixelStorei(Au,n.colorspaceConversion),n.premultiplyAlpha!==void 0&&i.pixelStorei(zu,n.premultiplyAlpha),n.flipY!==void 0&&i.pixelStorei(ju,n.flipY)}function yl(i){i.pixelStorei(Bo,4),ni(i)&&(i.pixelStorei(cl,0),i.pixelStorei(ul,0),i.pixelStorei(al,0),i.pixelStorei(dl,0),i.pixelStorei(hl,0))}function ea(i,n,r,f){f.minMag&&(r.call(i,n,Eo,f.minMag),r.call(i,n,Uo,f.minMag)),f.min&&r.call(i,n,Eo,f.min),f.mag&&r.call(i,n,Uo,f.mag),f.wrap&&(r.call(i,n,ji,f.wrap),r.call(i,n,Oi,f.wrap),(n===Rr||lu(i,n))&&r.call(i,n,ll,f.wrap)),f.wrapR&&r.call(i,n,ll,f.wrapR),f.wrapS&&r.call(i,n,ji,f.wrapS),f.wrapT&&r.call(i,n,Oi,f.wrapT),f.minLod!==void 0&&r.call(i,n,ku,f.minLod),f.maxLod!==void 0&&r.call(i,n,Eu,f.maxLod),f.baseLevel!==void 0&&r.call(i,n,Uu,f.baseLevel),f.maxLevel!==void 0&&r.call(i,n,Bu,f.maxLevel),f.compareFunc!==void 0&&r.call(i,n,Mu,f.compareFunc),f.compareMode!==void 0&&r.call(i,n,Ku,f.compareMode)}function gl(i,n,r){const f=r.target||hr;i.bindTexture(f,n),ea(i,f,i.texParameteri,r)}function na(i){return i=i||dr.textureColor,ri(i)?i:new Uint8Array([i[0]*255,i[1]*255,i[2]*255,i[3]*255])}function Ao(i,n,r,f,Z,I){r=r||dr.textureOptions,I=I||vn;const F=r.target||hr;if(f=f||r.width,Z=Z||r.height,i.bindTexture(F,n),$1(i,f,Z,I))i.generateMipmap(F);else{const T=q1(I)?Lu:wu;i.texParameteri(F,Eo,T),i.texParameteri(F,Uo,T),i.texParameteri(F,ji,zi),i.texParameteri(F,Oi,zi)}}function li(i){return i.auto===!0||i.auto===void 0&&i.level===void 0}function zo(i,n){return n=n||{},n.cubeFaceOrder||[ko,Fu,Cu,Hu,Ju,Nu]}function jo(i,n){const f=zo(i,n).map(function(Z,I){return{face:Z,ndx:I}});return f.sort(function(Z,I){return Z.face-I.face}),f}function Zl(i,n,r,f){f=f||dr.textureOptions;const Z=f.target||hr,I=f.level||0;let F=r.width,T=r.height;const J=f.internalFormat||f.format||vn,et=si(J),lt=f.format||et.format,pt=f.type||et.type;if(Ar(i,f),i.bindTexture(Z,n),Z===fr){const Yt=r.width,Lt=r.height;let at,dt;if(Yt/6===Lt)at=Lt,dt=[0,0,1,0,2,0,3,0,4,0,5,0];else if(Lt/6===Yt)at=Yt,dt=[0,0,0,1,0,2,0,3,0,4,0,5];else if(Yt/3===Lt/2)at=Yt/3,dt=[0,0,1,0,2,0,0,1,1,1,2,1];else if(Yt/2===Lt/3)at=Yt/2,dt=[0,0,1,0,0,1,1,1,0,2,1,2];else throw"can't figure out cube map from element: "+(r.src?r.src:r.nodeName);const Bt=nl();Bt?(Bt.canvas.width=at,Bt.canvas.height=at,F=at,T=at,jo(i,f).forEach(function(kt){const ee=dt[kt.ndx*2+0]*at,P=dt[kt.ndx*2+1]*at;Bt.drawImage(r,ee,P,at,at,0,0,at,at),i.texImage2D(kt.face,I,J,lt,pt,Bt.canvas)}),Bt.canvas.width=1,Bt.canvas.height=1):typeof createImageBitmap<"u"&&(F=at,T=at,jo(i,f).forEach(function(kt){const ee=dt[kt.ndx*2+0]*at,P=dt[kt.ndx*2+1]*at;i.texImage2D(kt.face,I,J,at,at,0,lt,pt,null),createImageBitmap(r,ee,P,at,at,{premultiplyAlpha:"none",colorSpaceConversion:"none"}).then(function(De){Ar(i,f),i.bindTexture(Z,n),i.texImage2D(kt.face,I,J,lt,pt,De),li(f)&&Ao(i,n,f,F,T,J)})}))}else if(Z===Rr||Z===xr){const Yt=Math.min(r.width,r.height),Lt=Math.max(r.width,r.height),at=Lt/Yt;if(at%1!==0)throw"can not compute 3D dimensions of element";const dt=r.width===Lt?1:0,Bt=r.height===Lt?1:0;i.pixelStorei(Bo,1),i.pixelStorei(cl,r.width),i.pixelStorei(ul,0),i.pixelStorei(hl,0),i.texImage3D(Z,I,J,Yt,Yt,Yt,0,lt,pt,null);for(let kt=0;kt<at;++kt){const ee=kt*Yt*dt,P=kt*Yt*Bt;i.pixelStorei(al,ee),i.pixelStorei(dl,P),i.texSubImage3D(Z,I,0,0,kt,Yt,Yt,1,lt,pt,r)}yl(i)}else i.texImage2D(Z,I,J,lt,pt,r);li(f)&&Ao(i,n,f,F,T,J),gl(i,n,f)}function ci(){}function ra(i){if(typeof document<"u"){const n=document.createElement("a");return n.href=i,n.hostname===location.hostname&&n.port===location.port&&n.protocol===location.protocol}else{const n=new URL(location.href).origin;return new URL(i,location.href).origin===n}}function ia(i,n){return n===void 0&&!ra(i)?"anonymous":n}function oa(i,n,r){r=r||ci;let f;if(n=n!==void 0?n:dr.crossOrigin,n=ia(i,n),typeof Image<"u"){f=new Image,n!==void 0&&(f.crossOrigin=n);const Z=function(){f.removeEventListener("error",I),f.removeEventListener("load",F),f=null},I=function(){const J="couldn't load image: "+i;Os(J),r(J,f),Z()},F=function(){r(null,f),Z()};return f.addEventListener("error",I),f.addEventListener("load",F),f.src=i,f}else if(typeof ImageBitmap<"u"){let Z,I;const F=function(){r(Z,I)},T={};n&&(T.mode="cors"),fetch(i,T).then(function(J){if(!J.ok)throw J;return J.blob()}).then(function(J){return createImageBitmap(J,{premultiplyAlpha:"none",colorSpaceConversion:"none"})}).then(function(J){I=J,setTimeout(F)}).catch(function(J){Z=J,setTimeout(F)}),f=null}return f}function vl(i){return typeof ImageBitmap<"u"&&i instanceof ImageBitmap||typeof ImageData<"u"&&i instanceof ImageData||typeof HTMLElement<"u"&&i instanceof HTMLElement}function Oo(i,n,r){return vl(i)?(setTimeout(function(){r(null,i)}),i):oa(i,n,r)}function Po(i,n,r){r=r||dr.textureOptions;const f=r.target||hr;if(i.bindTexture(f,n),r.color===!1)return;const Z=na(r.color);if(f===fr)for(let I=0;I<6;++I)i.texImage2D(ko+I,0,vn,1,1,0,vn,yn,Z);else f===Rr||f===xr?i.texImage3D(f,0,vn,1,1,1,0,vn,yn,Z):i.texImage2D(f,0,vn,1,1,0,vn,yn,Z)}function sa(i,n,r,f){return f=f||ci,r=r||dr.textureOptions,Po(i,n,r),r=Object.assign({},r),Oo(r.src,r.crossOrigin,function(I,F){I?f(I,n,F):(Zl(i,n,F,r),f(null,n,F))})}function la(i,n,r,f){f=f||ci;const Z=r.src;if(Z.length!==6)throw"there must be 6 urls for a cubemap";const I=r.level||0,F=r.internalFormat||r.format||vn,T=si(F),J=r.format||T.format,et=r.type||yn,lt=r.target||hr;if(lt!==fr)throw"target must be TEXTURE_CUBE_MAP";Po(i,n,r),r=Object.assign({},r);let pt=6;const Yt=[],Lt=zo(i,r);let at;function dt(Bt){return function(kt,ee){--pt,kt?Yt.push(kt):ee.width!==ee.height?Yt.push("cubemap face img is not a square: "+ee.src):(Ar(i,r),i.bindTexture(lt,n),pt===5?zo().forEach(function(P){i.texImage2D(P,I,F,J,et,ee)}):i.texImage2D(Bt,I,F,J,et,ee),li(r)&&i.generateMipmap(lt)),pt===0&&f(Yt.length?Yt:void 0,n,at)}}at=Z.map(function(Bt,kt){return Oo(Bt,r.crossOrigin,dt(Lt[kt]))})}function ca(i,n,r,f){f=f||ci;const Z=r.src,I=r.internalFormat||r.format||vn,F=si(I),T=r.format||F.format,J=r.type||yn,et=r.target||xr;if(et!==Rr&&et!==xr)throw"target must be TEXTURE_3D or TEXTURE_2D_ARRAY";Po(i,n,r),r=Object.assign({},r);let lt=Z.length;const pt=[];let Yt;const Lt=r.level||0;let at=r.width,dt=r.height;const Bt=Z.length;let kt=!0;function ee(P){return function(De,ze){if(--lt,De)pt.push(De);else{if(Ar(i,r),i.bindTexture(et,n),kt){kt=!1,at=r.width||ze.width,dt=r.height||ze.height,i.texImage3D(et,Lt,I,at,dt,Bt,0,T,J,null);for(let We=0;We<Bt;++We)i.texSubImage3D(et,Lt,0,0,We,at,dt,1,T,J,ze)}else{let We=ze,zt;(ze.width!==at||ze.height!==dt)&&(zt=nl(),We=zt.canvas,zt.canvas.width=at,zt.canvas.height=dt,zt.drawImage(ze,0,0,at,dt)),i.texSubImage3D(et,Lt,0,0,P,at,dt,1,T,J,We),zt&&We===zt.canvas&&(zt.canvas.width=0,zt.canvas.height=0)}li(r)&&i.generateMipmap(et)}lt===0&&f(pt.length?pt:void 0,n,Yt)}}Yt=Z.map(function(P,De){return Oo(P,r.crossOrigin,ee(De))})}function ua(i,n,r,f){f=f||dr.textureOptions;const Z=f.target||hr;i.bindTexture(Z,n);let I=f.width,F=f.height,T=f.depth;const J=f.level||0,et=f.internalFormat||f.format||vn,lt=si(et),pt=f.format||lt.format,Yt=f.type||ta(i,r,lt.type);if(ri(r))r instanceof Uint8ClampedArray&&(r=new Uint8Array(r.buffer));else{const Bt=js(Yt);r=new Bt(r)}const Lt=D1(et,Yt),at=r.byteLength/Lt;if(at%1)throw"length wrong size for format: "+el(i,pt);let dt;if(Z===Rr||Z===xr)if(!I&&!F&&!T){const Bt=Math.cbrt(at);if(Bt%1!==0)throw"can't guess cube size of array of numElements: "+at;I=Bt,F=Bt,T=Bt}else I&&(!F||!T)?(dt=qi(i,Z,F,T,at/I),F=dt.width,T=dt.height):F&&(!I||!T)?(dt=qi(i,Z,I,T,at/F),I=dt.width,T=dt.height):(dt=qi(i,Z,I,F,at/T),I=dt.width,F=dt.height);else dt=qi(i,Z,I,F,at),I=dt.width,F=dt.height;if(yl(i),i.pixelStorei(Bo,f.unpackAlignment||1),Ar(i,f),Z===fr){const Bt=Lt/r.BYTES_PER_ELEMENT,kt=at/6*Bt;jo(i,f).forEach(ee=>{const P=kt*ee.ndx,De=r.subarray(P,P+kt);i.texImage2D(ee.face,J,et,I,F,0,pt,Yt,De)})}else Z===Rr||Z===xr?i.texImage3D(Z,J,et,I,F,T,0,pt,Yt,r):i.texImage2D(Z,J,et,I,F,0,pt,Yt,r);return{width:I,height:F,depth:T,type:Yt}}function aa(i,n,r){const f=r.target||hr;i.bindTexture(f,n);const Z=r.level||0,I=r.internalFormat||r.format||vn,F=si(I),T=r.format||F.format,J=r.type||F.type;if(Ar(i,r),f===fr)for(let et=0;et<6;++et)i.texImage2D(ko+et,Z,I,r.width,r.height,0,T,J,null);else f===Rr||f===xr?i.texImage3D(f,Z,I,r.width,r.height,r.depth,0,T,J,null):i.texImage2D(f,Z,I,r.width,r.height,0,T,J,null)}function Gl(i,n,r){r=r||ci,n=n||dr.textureOptions;const f=i.createTexture(),Z=n.target||hr;let I=n.width||1,F=n.height||1;const T=n.internalFormat||vn;i.bindTexture(Z,f),Z===fr&&(i.texParameteri(Z,ji,zi),i.texParameteri(Z,Oi,zi));let J=n.src;if(J)if(typeof J=="function"&&(J=J(i,n)),typeof J=="string")sa(i,f,n,r);else if(ri(J)||Array.isArray(J)&&(typeof J[0]=="number"||Array.isArray(J[0])||ri(J[0]))){const et=ua(i,f,J,n);I=et.width,F=et.height}else Array.isArray(J)&&(typeof J[0]=="string"||vl(J[0]))?Z===fr?la(i,f,n,r):ca(i,f,n,r):(Zl(i,f,J,n),I=J.width,F=J.height);else aa(i,f,n);return li(n)&&Ao(i,f,n,I,F,T),gl(i,f,n),f}const _o=Os;function Xl(i){return typeof document<"u"&&document.getElementById?document.getElementById(i):null}const to=33984,eo=34962,da=34963,ha=35713,fa=35714,ma=35632,pa=35633,ba=35981,Wl=35718,ya=35721,ga=35971,Za=35382,va=35396,Ga=35398,Xa=35392,Wa=35395,no=5126,Vl=35664,Rl=35665,xl=35666,Qo=5124,Il=35667,Sl=35668,Tl=35669,Yl=35670,wl=35671,Ll=35672,Fl=35673,Cl=35674,Hl=35675,Jl=35676,Va=35678,Ra=35680,xa=35679,Ia=35682,Sa=35685,Ta=35686,Ya=35687,wa=35688,La=35689,Fa=35690,Ca=36289,Ha=36292,Ja=36293,Do=5125,Nl=36294,kl=36295,El=36296,Na=36298,ka=36299,Ea=36300,Ua=36303,Ba=36306,Ka=36307,Ma=36308,Aa=36311,ro=3553,io=34067,$o=32879,oo=35866,be={};function Ul(i,n){return be[n].bindPoint}function za(i,n){return function(r){i.uniform1f(n,r)}}function ja(i,n){return function(r){i.uniform1fv(n,r)}}function Oa(i,n){return function(r){i.uniform2fv(n,r)}}function Pa(i,n){return function(r){i.uniform3fv(n,r)}}function _a(i,n){return function(r){i.uniform4fv(n,r)}}function Bl(i,n){return function(r){i.uniform1i(n,r)}}function Kl(i,n){return function(r){i.uniform1iv(n,r)}}function Ml(i,n){return function(r){i.uniform2iv(n,r)}}function Al(i,n){return function(r){i.uniform3iv(n,r)}}function zl(i,n){return function(r){i.uniform4iv(n,r)}}function Qa(i,n){return function(r){i.uniform1ui(n,r)}}function Da(i,n){return function(r){i.uniform1uiv(n,r)}}function $a(i,n){return function(r){i.uniform2uiv(n,r)}}function qa(i,n){return function(r){i.uniform3uiv(n,r)}}function t0(i,n){return function(r){i.uniform4uiv(n,r)}}function e0(i,n){return function(r){i.uniformMatrix2fv(n,!1,r)}}function n0(i,n){return function(r){i.uniformMatrix3fv(n,!1,r)}}function r0(i,n){return function(r){i.uniformMatrix4fv(n,!1,r)}}function i0(i,n){return function(r){i.uniformMatrix2x3fv(n,!1,r)}}function o0(i,n){return function(r){i.uniformMatrix3x2fv(n,!1,r)}}function s0(i,n){return function(r){i.uniformMatrix2x4fv(n,!1,r)}}function l0(i,n){return function(r){i.uniformMatrix4x2fv(n,!1,r)}}function c0(i,n){return function(r){i.uniformMatrix3x4fv(n,!1,r)}}function u0(i,n){return function(r){i.uniformMatrix4x3fv(n,!1,r)}}function On(i,n,r,f){const Z=Ul(i,n);return ni(i)?function(I){let F,T;!I||Ho(i,I)?(F=I,T=null):(F=I.texture,T=I.sampler),i.uniform1i(f,r),i.activeTexture(to+r),i.bindTexture(Z,F),i.bindSampler(r,T)}:function(I){i.uniform1i(f,r),i.activeTexture(to+r),i.bindTexture(Z,I)}}function Pn(i,n,r,f,Z){const I=Ul(i,n),F=new Int32Array(Z);for(let T=0;T<Z;++T)F[T]=r+T;return ni(i)?function(T){i.uniform1iv(f,F),T.forEach(function(J,et){i.activeTexture(to+F[et]);let lt,pt;!J||Ho(i,J)?(lt=J,pt=null):(lt=J.texture,pt=J.sampler),i.bindSampler(r,pt),i.bindTexture(I,lt)})}:function(T){i.uniform1iv(f,F),T.forEach(function(J,et){i.activeTexture(to+F[et]),i.bindTexture(I,J)})}}be[no]={Type:Float32Array,size:4,setter:za,arraySetter:ja},be[Vl]={Type:Float32Array,size:8,setter:Oa,cols:2},be[Rl]={Type:Float32Array,size:12,setter:Pa,cols:3},be[xl]={Type:Float32Array,size:16,setter:_a,cols:4},be[Qo]={Type:Int32Array,size:4,setter:Bl,arraySetter:Kl},be[Il]={Type:Int32Array,size:8,setter:Ml,cols:2},be[Sl]={Type:Int32Array,size:12,setter:Al,cols:3},be[Tl]={Type:Int32Array,size:16,setter:zl,cols:4},be[Do]={Type:Uint32Array,size:4,setter:Qa,arraySetter:Da},be[Nl]={Type:Uint32Array,size:8,setter:$a,cols:2},be[kl]={Type:Uint32Array,size:12,setter:qa,cols:3},be[El]={Type:Uint32Array,size:16,setter:t0,cols:4},be[Yl]={Type:Uint32Array,size:4,setter:Bl,arraySetter:Kl},be[wl]={Type:Uint32Array,size:8,setter:Ml,cols:2},be[Ll]={Type:Uint32Array,size:12,setter:Al,cols:3},be[Fl]={Type:Uint32Array,size:16,setter:zl,cols:4},be[Cl]={Type:Float32Array,size:32,setter:e0,rows:2,cols:2},be[Hl]={Type:Float32Array,size:48,setter:n0,rows:3,cols:3},be[Jl]={Type:Float32Array,size:64,setter:r0,rows:4,cols:4},be[Sa]={Type:Float32Array,size:32,setter:i0,rows:2,cols:3},be[Ta]={Type:Float32Array,size:32,setter:s0,rows:2,cols:4},be[Ya]={Type:Float32Array,size:48,setter:o0,rows:3,cols:2},be[wa]={Type:Float32Array,size:48,setter:c0,rows:3,cols:4},be[La]={Type:Float32Array,size:64,setter:l0,rows:4,cols:2},be[Fa]={Type:Float32Array,size:64,setter:u0,rows:4,cols:3},be[Va]={Type:null,size:0,setter:On,arraySetter:Pn,bindPoint:ro},be[Ra]={Type:null,size:0,setter:On,arraySetter:Pn,bindPoint:io},be[xa]={Type:null,size:0,setter:On,arraySetter:Pn,bindPoint:$o},be[Ia]={Type:null,size:0,setter:On,arraySetter:Pn,bindPoint:ro},be[Ca]={Type:null,size:0,setter:On,arraySetter:Pn,bindPoint:oo},be[Ha]={Type:null,size:0,setter:On,arraySetter:Pn,bindPoint:oo},be[Ja]={Type:null,size:0,setter:On,arraySetter:Pn,bindPoint:io},be[Na]={Type:null,size:0,setter:On,arraySetter:Pn,bindPoint:ro},be[ka]={Type:null,size:0,setter:On,arraySetter:Pn,bindPoint:$o},be[Ea]={Type:null,size:0,setter:On,arraySetter:Pn,bindPoint:io},be[Ua]={Type:null,size:0,setter:On,arraySetter:Pn,bindPoint:oo},be[Ba]={Type:null,size:0,setter:On,arraySetter:Pn,bindPoint:ro},be[Ka]={Type:null,size:0,setter:On,arraySetter:Pn,bindPoint:$o},be[Ma]={Type:null,size:0,setter:On,arraySetter:Pn,bindPoint:io},be[Aa]={Type:null,size:0,setter:On,arraySetter:Pn,bindPoint:oo};function so(i,n){return function(r){if(r.value)switch(i.disableVertexAttribArray(n),r.value.length){case 4:i.vertexAttrib4fv(n,r.value);break;case 3:i.vertexAttrib3fv(n,r.value);break;case 2:i.vertexAttrib2fv(n,r.value);break;case 1:i.vertexAttrib1fv(n,r.value);break;default:throw new Error("the length of a float constant value must be between 1 and 4!")}else i.bindBuffer(eo,r.buffer),i.enableVertexAttribArray(n),i.vertexAttribPointer(n,r.numComponents||r.size,r.type||no,r.normalize||!1,r.stride||0,r.offset||0),i.vertexAttribDivisor&&i.vertexAttribDivisor(n,r.divisor||0)}}function pr(i,n){return function(r){if(r.value)if(i.disableVertexAttribArray(n),r.value.length===4)i.vertexAttrib4iv(n,r.value);else throw new Error("The length of an integer constant value must be 4!");else i.bindBuffer(eo,r.buffer),i.enableVertexAttribArray(n),i.vertexAttribIPointer(n,r.numComponents||r.size,r.type||Qo,r.stride||0,r.offset||0),i.vertexAttribDivisor&&i.vertexAttribDivisor(n,r.divisor||0)}}function lo(i,n){return function(r){if(r.value)if(i.disableVertexAttribArray(n),r.value.length===4)i.vertexAttrib4uiv(n,r.value);else throw new Error("The length of an unsigned integer constant value must be 4!");else i.bindBuffer(eo,r.buffer),i.enableVertexAttribArray(n),i.vertexAttribIPointer(n,r.numComponents||r.size,r.type||Do,r.stride||0,r.offset||0),i.vertexAttribDivisor&&i.vertexAttribDivisor(n,r.divisor||0)}}function qo(i,n,r){const f=r.size,Z=r.count;return function(I){i.bindBuffer(eo,I.buffer);const F=I.size||I.numComponents||f,T=F/Z,J=I.type||no,lt=be[J].size*F,pt=I.normalize||!1,Yt=I.offset||0,Lt=lt/Z;for(let at=0;at<Z;++at)i.enableVertexAttribArray(n+at),i.vertexAttribPointer(n+at,T,J,pt,lt,Yt+Lt*at),i.vertexAttribDivisor&&i.vertexAttribDivisor(n+at,I.divisor||0)}}const wn={};wn[no]={size:4,setter:so},wn[Vl]={size:8,setter:so},wn[Rl]={size:12,setter:so},wn[xl]={size:16,setter:so},wn[Qo]={size:4,setter:pr},wn[Il]={size:8,setter:pr},wn[Sl]={size:12,setter:pr},wn[Tl]={size:16,setter:pr},wn[Do]={size:4,setter:lo},wn[Nl]={size:8,setter:lo},wn[kl]={size:12,setter:lo},wn[El]={size:16,setter:lo},wn[Yl]={size:4,setter:pr},wn[wl]={size:8,setter:pr},wn[Ll]={size:12,setter:pr},wn[Fl]={size:16,setter:pr},wn[Cl]={size:4,setter:qo,count:2},wn[Hl]={size:9,setter:qo,count:3},wn[Jl]={size:16,setter:qo,count:4};const a0=/ERROR:\s*\d+:(\d+)/gi;function d0(i,n="",r=0){const f=[...n.matchAll(a0)],Z=new Map(f.map((I,F)=>{const T=parseInt(I[1]),J=f[F+1],et=J?J.index:n.length,lt=n.substring(I.index,et);return[T-1,lt]}));return i.split(`
|
|
126
|
+
`).map((I,F)=>{const T=Z.get(F);return`${F+1+r}: ${I}${T?`
|
|
127
127
|
|
|
128
128
|
^^^ ${T}`:""}`}).join(`
|
|
129
|
-
`)}const
|
|
129
|
+
`)}const jl=/^[ \t]*\n/;function Ol(i){let n=0;return jl.test(i)&&(n=1,i=i.replace(jl,"")),{lineOffset:n,shaderSource:i}}function h0(i,n){return i.errorCallback(n),i.callback&&setTimeout(()=>{i.callback(`${n}
|
|
130
130
|
${i.errors.join(`
|
|
131
|
-
`)}`)}),null}function
|
|
132
|
-
Error compiling ${
|
|
133
|
-
${
|
|
134
|
-
`)}`}}function
|
|
135
|
-
`;return n}run(n){var Z,
|
|
131
|
+
`)}`)}),null}function f0(i,n,r,f){if(f=f||_o,!i.getShaderParameter(r,ha)){const I=i.getShaderInfoLog(r),{lineOffset:F,shaderSource:T}=Ol(i.getShaderSource(r)),J=`${d0(T,I,F)}
|
|
132
|
+
Error compiling ${el(i,n)}: ${I}`;return f(J),J}return""}function ts(i,n,r){let f,Z,I;if(typeof n=="function"&&(r=n,n=void 0),typeof i=="function")r=i,i=void 0;else if(i&&!Array.isArray(i)){const et=i;r=et.errorCallback,i=et.attribLocations,f=et.transformFeedbackVaryings,Z=et.transformFeedbackMode,I=et.callback}const F=r||_o,T=[],J={errorCallback(et,...lt){T.push(et),F(et,...lt)},transformFeedbackVaryings:f,transformFeedbackMode:Z,callback:I,errors:T};{let et={};Array.isArray(i)?i.forEach(function(lt,pt){et[lt]=n?n[pt]:pt}):et=i||{},J.attribLocations=et}return J}const m0=["VERTEX_SHADER","FRAGMENT_SHADER"];function p0(i,n){if(n.indexOf("frag")>=0)return ma;if(n.indexOf("vert")>=0)return pa}function b0(i,n,r){const f=i.getAttachedShaders(n);for(const Z of f)r.has(Z)&&i.deleteShader(Z);i.deleteProgram(n)}const y0=(i=0)=>new Promise(n=>setTimeout(n,i));function g0(i,n,r){const f=i.createProgram(),{attribLocations:Z,transformFeedbackVaryings:I,transformFeedbackMode:F}=ts(r);for(let T=0;T<n.length;++T){let J=n[T];if(typeof J=="string"){const et=Xl(J),lt=et?et.text:J;let pt=i[m0[T]];et&&et.type&&(pt=p0(i,et.type)||pt),J=i.createShader(pt),i.shaderSource(J,Ol(lt).shaderSource),i.compileShader(J),i.attachShader(f,J)}}Object.entries(Z).forEach(([T,J])=>i.bindAttribLocation(f,J,T));{let T=I;T&&(T.attribs&&(T=T.attribs),Array.isArray(T)||(T=Object.keys(T)),i.transformFeedbackVaryings(f,T,F||ba))}return i.linkProgram(f),f}function Z0(i,n,r,f,Z){const I=ts(r,f,Z),F=new Set(n),T=g0(i,n,I);function J(et,lt){const pt=G0(et,lt,I.errorCallback);return pt&&b0(et,lt,F),pt}if(I.callback){v0(i,T).then(()=>{const et=J(i,T);I.callback(et,et?void 0:T)});return}return J(i,T)?void 0:T}async function v0(i,n){const r=i.getExtension("KHR_parallel_shader_compile"),f=r?(I,F)=>I.getProgramParameter(F,r.COMPLETION_STATUS_KHR):()=>!0;let Z=0;do await y0(Z),Z=1e3/60;while(!f(i,n))}function G0(i,n,r){if(r=r||_o,!i.getProgramParameter(n,fa)){const Z=i.getProgramInfoLog(n);r(`Error in program linking: ${Z}`);const F=i.getAttachedShaders(n).map(T=>f0(i,i.getShaderParameter(T,i.SHADER_TYPE),T,r));return`${Z}
|
|
133
|
+
${F.filter(T=>T).join(`
|
|
134
|
+
`)}`}}function X0(i,n,r,f,Z){return Z0(i,n,r,f,Z)}function Pl(i){const n=i.name;return n.startsWith("gl_")||n.startsWith("webgl_")}const W0=/(\.|\[|]|\w+)/g,V0=i=>i>="0"&&i<="9";function R0(i,n,r,f){const Z=i.split(W0).filter(T=>T!=="");let I=0,F="";for(;;){const T=Z[I++];F+=T;const J=V0(T[0]),et=J?parseInt(T):T;if(J&&(F+=Z[I++]),I===Z.length){r[et]=n;break}else{const pt=Z[I++],Yt=pt==="[",Lt=r[et]||(Yt?[]:{});r[et]=Lt,r=Lt,f[F]=f[F]||function(at){return function(dt){_l(at,dt)}}(Lt),F+=pt}}}function x0(i,n){let r=0;function f(T,J,et){const lt=J.name.endsWith("[0]"),pt=J.type,Yt=be[pt];if(!Yt)throw new Error(`unknown type: 0x${pt.toString(16)}`);let Lt;if(Yt.bindPoint){const at=r;r+=J.size,lt?Lt=Yt.arraySetter(i,pt,at,et,J.size):Lt=Yt.setter(i,pt,at,et,J.size)}else Yt.arraySetter&<?Lt=Yt.arraySetter(i,et):Lt=Yt.setter(i,et);return Lt.location=et,Lt}const Z={},I={},F=i.getProgramParameter(n,Wl);for(let T=0;T<F;++T){const J=i.getActiveUniform(n,T);if(Pl(J))continue;let et=J.name;et.endsWith("[0]")&&(et=et.substr(0,et.length-3));const lt=i.getUniformLocation(n,J.name);if(lt){const pt=f(n,J,lt);Z[et]=pt,R0(et,pt,I,Z)}}return Z}function I0(i,n){const r={},f=i.getProgramParameter(n,ga);for(let Z=0;Z<f;++Z){const I=i.getTransformFeedbackVarying(n,Z);r[I.name]={index:Z,type:I.type,size:I.size}}return r}function S0(i,n){const r=i.getProgramParameter(n,Wl),f=[],Z=[];for(let T=0;T<r;++T){Z.push(T),f.push({});const J=i.getActiveUniform(n,T);f[T].name=J.name}[["UNIFORM_TYPE","type"],["UNIFORM_SIZE","size"],["UNIFORM_BLOCK_INDEX","blockNdx"],["UNIFORM_OFFSET","offset"]].forEach(function(T){const J=T[0],et=T[1];i.getActiveUniforms(n,Z,i[J]).forEach(function(lt,pt){f[pt][et]=lt})});const I={},F=i.getProgramParameter(n,Za);for(let T=0;T<F;++T){const J=i.getActiveUniformBlockName(n,T),et={index:i.getUniformBlockIndex(n,J),usedByVertexShader:i.getActiveUniformBlockParameter(n,T,va),usedByFragmentShader:i.getActiveUniformBlockParameter(n,T,Ga),size:i.getActiveUniformBlockParameter(n,T,Xa),uniformIndices:i.getActiveUniformBlockParameter(n,T,Wa)};et.used=et.usedByVertexShader||et.usedByFragmentShader,I[J]=et}return{blockSpecs:I,uniformData:f}}function _l(i,n){for(const r in n){const f=i[r];typeof f=="function"?f(n[r]):_l(i[r],n[r])}}function Ql(i,...n){const r=i.uniformSetters||i,f=n.length;for(let Z=0;Z<f;++Z){const I=n[Z];if(Array.isArray(I)){const F=I.length;for(let T=0;T<F;++T)Ql(r,I[T])}else for(const F in I){const T=r[F];T&&T(I[F])}}}function T0(i,n){const r={},f=i.getProgramParameter(n,ya);for(let Z=0;Z<f;++Z){const I=i.getActiveAttrib(n,Z);if(Pl(I))continue;const F=i.getAttribLocation(n,I.name),T=wn[I.type],J=T.setter(i,F,T);J.location=F,r[I.name]=J}return r}function Y0(i,n){for(const r in n){const f=i[r];f&&f(n[r])}}function w0(i,n,r){r.vertexArrayObject?i.bindVertexArray(r.vertexArrayObject):(Y0(n.attribSetters||n,r.attribs),r.indices&&i.bindBuffer(da,r.indices))}function Dl(i,n){const r=x0(i,n),f=T0(i,n),Z={program:n,uniformSetters:r,attribSetters:f};return ni(i)&&(Z.uniformBlockSpec=S0(i,n),Z.transformFeedbackInfo=I0(i,n)),Z}const L0=/\s|{|}|;/;function F0(i,n,r,f,Z){const I=ts(r,f,Z),F=[];if(n=n.map(function(et){if(!L0.test(et)){const lt=Xl(et);if(lt)et=lt.text;else{const pt=`no element with id: ${et}`;I.errorCallback(pt),F.push(pt)}}return et}),F.length)return h0(I,"");const T=I.callback;T&&(I.callback=(et,lt)=>{T(et,et?void 0:Dl(i,lt))});const J=X0(i,n,I);return J?Dl(i,J):null}const C0=4,$l=5123;function H0(i,n,r,f,Z,I){r=r===void 0?C0:r;const F=n.indices,T=n.elementType,J=f===void 0?n.numElements:f;Z=Z===void 0?0:Z,T||F?I!==void 0?i.drawElementsInstanced(r,J,T===void 0?$l:n.elementType,Z,I):i.drawElements(r,J,T===void 0?$l:n.elementType,Z):I!==void 0?i.drawArraysInstanced(r,Z,J,I):i.drawArrays(r,Z,J)}const ql=36160,co=36161,J0=3553,N0=5121,k0=6402,E0=6408,U0=33190,B0=36012,K0=35056,M0=36013,A0=32854,z0=32855,j0=36194,t2=33189,e2=6401,n2=36168,es=34041,ns=36064,uo=36096,r2=36128,rs=33306,is=33071,os=9729,O0=[{format:E0,type:N0,min:os,wrap:is},{format:es}],tr={};tr[es]=rs,tr[e2]=r2,tr[n2]=r2,tr[k0]=uo,tr[t2]=uo,tr[U0]=uo,tr[B0]=uo,tr[K0]=rs,tr[M0]=rs;function P0(i,n){return tr[i]||tr[n]}const br={};br[A0]=!0,br[z0]=!0,br[j0]=!0,br[es]=!0,br[t2]=!0,br[e2]=!0,br[n2]=!0;function _0(i){return br[i]}const Q0=32;function D0(i){return i>=ns&&i<ns+Q0}function ao(i,n,r,f){const Z=ql,I=i.createFramebuffer();i.bindFramebuffer(Z,I),r=r||i.drawingBufferWidth,f=f||i.drawingBufferHeight,n=n||O0;const F=[],T={framebuffer:I,attachments:[],width:r,height:f};return n.forEach(function(J,et){let lt=J.attachment;const pt=J.samples,Yt=J.format;let Lt=J.attachmentPoint||P0(Yt,J.internalFormat);if(Lt||(Lt=ns+et),D0(Lt)&&F.push(Lt),!lt)if(pt!==void 0||_0(Yt))lt=i.createRenderbuffer(),i.bindRenderbuffer(co,lt),pt>1?i.renderbufferStorageMultisample(co,pt,Yt,r,f):i.renderbufferStorage(co,Yt,r,f);else{const at=Object.assign({},J);at.width=r,at.height=f,at.auto===void 0&&(at.auto=!1,at.min=at.min||at.minMag||os,at.mag=at.mag||at.minMag||os,at.wrapS=at.wrapS||at.wrap||is,at.wrapT=at.wrapT||at.wrap||is),lt=Gl(i,at)}if(su(i,lt))i.framebufferRenderbuffer(Z,Lt,co,lt);else if(Ho(i,lt))J.layer!==void 0?i.framebufferTextureLayer(Z,Lt,lt,J.level||0,J.layer):i.framebufferTexture2D(Z,Lt,J.target||J0,lt,J.level||0);else throw new Error("unknown attachment type");T.attachments.push(lt)}),i.drawBuffers&&i.drawBuffers(F),T}function $0(i,n,r){r=r||ql,n?(i.bindFramebuffer(r,n.framebuffer),i.viewport(0,0,n.width,n.height)):(i.bindFramebuffer(r,null),i.viewport(0,0,i.drawingBufferWidth,i.drawingBufferHeight))}function mn(i,n){return()=>n instanceof WebGLTexture?n:Gl(i,{src:n,wrap:i.CLAMP_TO_EDGE})}const zr=2;class Tr{constructor(n){gt(this,"id","_");gt(this,"context");gt(this,"output");gt(this,"fbi");gt(this,"options");gt(this,"programInfo");gt(this,"bufferInfo");gt(this,"profiler");gt(this,"lastRun");const{context:r,width:f,height:Z}=n;this.context=r,this.options=n;const I=this.buildDefines();this.programInfo=F0(this.context,[I+this.getVertexShader(),I+this.getFragmentShader()]),this.bufferInfo=Yu(this.context,this.getBuffers()),this.fbi=ao(this.context,[{format:this.context.RGBA,type:this.context.UNSIGNED_BYTE,min:this.context.LINEAR,wrap:this.context.CLAMP_TO_EDGE}],f,Z),this.output=this.fbi.attachments[0]}resizeOutput(n,r){this.fbi=ao(this.context,[{format:this.context.RGBA,type:this.context.UNSIGNED_BYTE,min:this.context.LINEAR,wrap:this.context.CLAMP_TO_EDGE}],n,r),this.options.width=n,this.options.height=r,this.output=this.fbi.attachments[0]}getDefines(){return{}}getBuffers(){return{position:{numComponents:2,data:[-1,-1,-1,1,1,-1,1,1,-1,1,1,-1]},texture_coord:{numComponents:2,data:[0,0,0,1,1,0,1,1,0,1,1,0]}}}buildDefines(){let n="";const r=this.getDefines();for(let f in r)n+=`#define ${f} ${r[f].toFixed(1)}
|
|
135
|
+
`;return n}run(n){var Z,I,F,T,J,et;(Z=this.profiler)==null||Z.pushContext(`[${this.id}] PROG : ${this.constructor.name}`),(I=this.profiler)==null||I.pushContext(`[${this.id}] UNIFORMS`);for(const lt in n)typeof n[lt]=="function"&&((F=this.profiler)==null||F.pushContext(`[${this.id}] UNI : ${lt}`),n[lt]=n[lt](),(T=this.profiler)==null||T.popContext(`[${this.id}] UNI : ${lt}`));(J=this.profiler)==null||J.popContext(`[${this.id}] UNIFORMS`);const r=Date.now();let f=0;this.lastRun&&(f=(r-this.lastRun)/1e3),this.lastRun=r,this.context.viewport(0,0,this.context.canvas.width,this.context.canvas.height),this.context.useProgram(this.programInfo.program),w0(this.context,this.programInfo,this.bufferInfo),Ql(this.programInfo,{delta:f,canvas:[this.context.canvas.width,this.context.canvas.height],...n}),$0(this.context,this.options.disableFramebuffer?null:this.fbi),H0(this.context,this.bufferInfo),(et=this.profiler)==null||et.popContext(`[${this.id}] PROG : ${this.constructor.name}`)}setProfiler(n){this.profiler=n}}const q0=`precision mediump float;
|
|
136
136
|
|
|
137
137
|
varying vec2 _texture_coord;
|
|
138
138
|
|
|
@@ -147,7 +147,7 @@ void main() {
|
|
|
147
147
|
gl_FragColor = foregroundColor * tresholdColor.a +
|
|
148
148
|
backgroundColor * (1. - tresholdColor.a);
|
|
149
149
|
}
|
|
150
|
-
`,
|
|
150
|
+
`,t3=`varying vec2 _texture_coord;
|
|
151
151
|
|
|
152
152
|
attribute vec2 position;
|
|
153
153
|
attribute vec2 texture_coord;
|
|
@@ -157,13 +157,13 @@ void main() {
|
|
|
157
157
|
_texture_coord = texture_coord;
|
|
158
158
|
_texture_coord.y = 1. - texture_coord.y;
|
|
159
159
|
}
|
|
160
|
-
`;class
|
|
160
|
+
`;class ss extends Tr{getFragmentShader(){return q0}getVertexShader(){return t3}}class ls{constructor(){gt(this,"steps",[]);gt(this,"profiler")}addStep(n){this.steps.push(n)}async run(){for(const n of this.steps)n.program.run(n.getUniforms())}resizeOutput(n,r){var f,Z;(f=this.profiler)==null||f.pushContext(`PIP [${this.constructor.name}]`);for(const I of this.steps)I.preventResize||I.program.resizeOutput(n,r);(Z=this.profiler)==null||Z.popContext(`PIP [${this.constructor.name}]`)}setProfiler(n){this.profiler=n;for(const r of this.steps)r.program.setProfiler(n)}setId(n){for(const r of this.steps)r.program.id=n}}class cs extends ls{constructor(){super(...arguments);gt(this,"preciseMaskEnabled",!1)}}class i2 extends cs{constructor(r){super();gt(this,"inputImage");gt(this,"inputBackgroundImage");gt(this,"inputMask");gt(this,"preciseMaskEnabled",!0);this.context=r;const f={context:r,height:r.canvas.height,width:r.canvas.width},Z=new ss({...f,disableFramebuffer:!0});this.addStep({program:Z,getUniforms:()=>({background:mn(r,this.inputBackgroundImage),foreground:mn(r,this.inputImage),threshold:mn(r,this.inputMask)})})}setData(r,f){this.inputImage=r,this.inputMask=f}}const e3=`precision mediump float;
|
|
161
161
|
|
|
162
162
|
varying vec2 _texture_coord;
|
|
163
163
|
uniform sampler2D texture;
|
|
164
164
|
|
|
165
165
|
void main() { gl_FragColor = texture2D(texture, _texture_coord); }
|
|
166
|
-
`,
|
|
166
|
+
`,n3=`varying vec2 _texture_coord;
|
|
167
167
|
|
|
168
168
|
attribute vec2 position;
|
|
169
169
|
attribute vec2 texture_coord;
|
|
@@ -176,7 +176,7 @@ void main() {
|
|
|
176
176
|
_texture_coord.y = 1. - texture_coord.y;
|
|
177
177
|
}
|
|
178
178
|
}
|
|
179
|
-
`;class
|
|
179
|
+
`;class r3 extends Tr{getFragmentShader(){return e3}getVertexShader(){return n3}}class i3 extends ls{constructor(r,f,Z){super();gt(this,"inputImage");this.context=r;const I={context:r,height:Z,width:f};this.addStep({program:new r3({...I,disableFramebuffer:!0}),getUniforms:()=>({texture:mn(r,this.inputImage),invert_y:!0})})}setData(r){this.inputImage=r}}async function o2(i){return new Promise(n=>{setTimeout(()=>{n()},i)})}const o3=`precision mediump float;
|
|
180
180
|
|
|
181
181
|
varying vec2 _texture_coord;
|
|
182
182
|
|
|
@@ -186,7 +186,7 @@ uniform sampler2D texture;
|
|
|
186
186
|
vec4 loop();
|
|
187
187
|
|
|
188
188
|
void main() { gl_FragColor = loop(); }
|
|
189
|
-
`,
|
|
189
|
+
`,s3=`varying vec2 _texture_coord;
|
|
190
190
|
|
|
191
191
|
attribute vec2 position;
|
|
192
192
|
attribute vec2 texture_coord;
|
|
@@ -195,7 +195,7 @@ void main() {
|
|
|
195
195
|
gl_Position = vec4(position, 0., 1.);
|
|
196
196
|
_texture_coord = texture_coord;
|
|
197
197
|
}
|
|
198
|
-
`;var
|
|
198
|
+
`;var us=(i=>(i[i.LINEAR=0]="LINEAR",i[i.GAUSSIAN=1]="GAUSSIAN",i))(us||{});class s2 extends Tr{getDefines(){var n;return{RADIUS:(n=this.options.radius)!=null?n:1}}getFragmentShader(){return o3+this.createLoopFunction()}getVertexShader(){return s3}createLoopFunction(){var r;let n=(r=this.options.radius)!=null?r:1;return`
|
|
199
199
|
|
|
200
200
|
vec4 loop() {
|
|
201
201
|
vec4 result = vec4(0,0,0,0);
|
|
@@ -216,7 +216,7 @@ void main() {
|
|
|
216
216
|
diff.x = normalizedRadius.x;
|
|
217
217
|
}
|
|
218
218
|
return result / factorSum;
|
|
219
|
-
}`}getFactor(n,r){switch(this.options.type){case 1:return this.getLinearFactor(n,r);case 0:default:return this.getLinearFactor(n,r)}}getLinearFactor(n,r){return 1}getGaussianFactor(n,r){var J;const f=Math.PI*2,Z=Math.max((J=this.options.radius)!=null?J:1,1),
|
|
219
|
+
}`}getFactor(n,r){switch(this.options.type){case 1:return this.getLinearFactor(n,r);case 0:default:return this.getLinearFactor(n,r)}}getLinearFactor(n,r){return 1}getGaussianFactor(n,r){var J;const f=Math.PI*2,Z=Math.max((J=this.options.radius)!=null?J:1,1),I=1/(f*Z**2),F=-(n**2+r**2),T=I*F;return I*Math.E**T}}class as extends Tr{constructor(r){super(r);gt(this,"fbi2");this.fbi2=ao(r.context,[{format:r.context.RGBA,type:r.context.UNSIGNED_BYTE,min:r.context.LINEAR,mag:r.context.LINEAR,wrap:r.context.CLAMP_TO_EDGE}],r.width,r.height)}run(r){const f=this.fbi;this.fbi=this.fbi2,this.fbi2=f,this.output=this.fbi.attachments[0],super.run({...r,previous_rendering:this.fbi2.attachments[0]})}resizeOutput(r,f){super.resizeOutput(r,f),this.fbi2=ao(this.context,[{format:this.context.RGBA,type:this.context.UNSIGNED_BYTE,min:this.context.LINEAR,wrap:this.context.CLAMP_TO_EDGE}],r,f)}}const l3=`precision mediump float;
|
|
220
220
|
|
|
221
221
|
varying vec2 _texture_coord;
|
|
222
222
|
|
|
@@ -269,7 +269,7 @@ void main() {
|
|
|
269
269
|
gl_FragColor *= (1. - threshold);
|
|
270
270
|
}
|
|
271
271
|
}
|
|
272
|
-
`,
|
|
272
|
+
`,c3=`varying vec2 _texture_coord;
|
|
273
273
|
|
|
274
274
|
attribute vec2 position;
|
|
275
275
|
attribute vec2 texture_coord;
|
|
@@ -278,7 +278,7 @@ void main() {
|
|
|
278
278
|
gl_Position = vec4(position, 0., 1.);
|
|
279
279
|
_texture_coord = texture_coord;
|
|
280
280
|
}
|
|
281
|
-
`;class
|
|
281
|
+
`;class u3 extends as{getFragmentShader(){return l3}getVertexShader(){return c3}}const a3=`#version 300 es
|
|
282
282
|
// https://github.com/Volcomix/virtual-background/blob/main/src/pipelines/webgl2/jointBilateralFilterStage.ts
|
|
283
283
|
|
|
284
284
|
precision highp float;
|
|
@@ -324,14 +324,14 @@ void main() {
|
|
|
324
324
|
}
|
|
325
325
|
newVal /= totalWeight;
|
|
326
326
|
outColor = vec4(vec3(0.), newVal);
|
|
327
|
-
}`,
|
|
327
|
+
}`,d3=`#version 300 es
|
|
328
328
|
in vec2 position;
|
|
329
329
|
in vec2 texture_coord;
|
|
330
330
|
out vec2 _texture_coord;
|
|
331
331
|
void main() {
|
|
332
332
|
gl_Position = vec4(position, 0.0, 1.0);
|
|
333
333
|
_texture_coord = texture_coord;
|
|
334
|
-
}`;class
|
|
334
|
+
}`;class h3 extends Tr{getFragmentShader(){return a3}getVertexShader(){return d3}}const f3=`precision mediump float;
|
|
335
335
|
|
|
336
336
|
varying vec2 _texture_coord;
|
|
337
337
|
|
|
@@ -353,7 +353,7 @@ void main() {
|
|
|
353
353
|
gl_FragColor = texture2D(texture, _texture_coord);
|
|
354
354
|
}
|
|
355
355
|
}
|
|
356
|
-
`,
|
|
356
|
+
`,m3=`varying vec2 _texture_coord;
|
|
357
357
|
|
|
358
358
|
attribute vec2 position;
|
|
359
359
|
attribute vec2 texture_coord;
|
|
@@ -362,7 +362,7 @@ void main() {
|
|
|
362
362
|
gl_Position = vec4(position, 0., 1.);
|
|
363
363
|
_texture_coord = texture_coord;
|
|
364
364
|
}
|
|
365
|
-
`;class
|
|
365
|
+
`;class p3 extends Tr{getFragmentShader(){return f3}getVertexShader(){return m3}}const b3=`precision mediump float;
|
|
366
366
|
|
|
367
367
|
varying vec2 _texture_coord;
|
|
368
368
|
|
|
@@ -381,7 +381,7 @@ void main() {
|
|
|
381
381
|
|
|
382
382
|
gl_FragColor = color;
|
|
383
383
|
}
|
|
384
|
-
`,
|
|
384
|
+
`,y3=`varying vec2 _texture_coord;
|
|
385
385
|
|
|
386
386
|
attribute vec2 position;
|
|
387
387
|
attribute vec2 texture_coord;
|
|
@@ -390,7 +390,7 @@ void main() {
|
|
|
390
390
|
gl_Position = vec4(position, 0., 1.);
|
|
391
391
|
_texture_coord = texture_coord;
|
|
392
392
|
}
|
|
393
|
-
`;class
|
|
393
|
+
`;class g3 extends as{getFragmentShader(){return b3}getVertexShader(){return y3}}const Z3=`precision mediump float;
|
|
394
394
|
|
|
395
395
|
varying vec2 _texture_coord;
|
|
396
396
|
|
|
@@ -404,7 +404,7 @@ void main() {
|
|
|
404
404
|
gl_FragColor = inputs_color;
|
|
405
405
|
}
|
|
406
406
|
}
|
|
407
|
-
`,
|
|
407
|
+
`,v3=`varying vec2 _texture_coord;
|
|
408
408
|
|
|
409
409
|
attribute vec2 position;
|
|
410
410
|
attribute vec2 texture_coord;
|
|
@@ -413,7 +413,7 @@ void main() {
|
|
|
413
413
|
gl_Position = vec4(position, 0., 1.);
|
|
414
414
|
_texture_coord = texture_coord;
|
|
415
415
|
}
|
|
416
|
-
`;class
|
|
416
|
+
`;class G3 extends as{getFragmentShader(){return Z3}getVertexShader(){return v3}}class X3 extends ls{constructor(r,f,Z){super();gt(this,"inputImage");gt(this,"inputMask");gt(this,"previousInputImage");gt(this,"previousInputMask");gt(this,"output");gt(this,"options",{currentThresholdMinimum:0,currentThresholdMaximum:1,previousThresholdMinimum:0,previousThresholdMaximum:1,thresholdMinimum:0,thresholdMaximum:1,thresholdFactor:1});gt(this,"jointBilateral");this.context=r;const I={context:r,height:Z,width:f},F=new u3(I),T=new s2({...I,radius:1,type:us.GAUSSIAN}),J=new G3(I),et=new g3(I),lt=new p3(I);this.jointBilateral=new h3(I),this.addStep({program:F,getUniforms:()=>({image_now:mn(r,this.inputImage),image_before:mn(r,this.previousInputImage),mask_now:mn(r,this.inputMask),mask_before:mn(r,this.previousInputMask),current_threshold_minimum:this.options.currentThresholdMinimum,current_threshold_maximum:this.options.currentThresholdMaximum,previous_threshold_minimum:this.options.previousThresholdMinimum,previous_threshold_maximum:this.options.previousThresholdMaximum,threshold_minimum:this.options.thresholdMinimum,threshold_maximum:this.options.thresholdMaximum,threshold_factor:this.options.thresholdFactor})}),this.addStep({program:J,getUniforms:()=>({inputs:mn(r,this.inputMask),threshold:mn(r,F.output)})}),this.addStep({program:lt,getUniforms:()=>({texture:mn(r,J.output)})}),this.addStep({program:et,getUniforms:()=>({texture:mn(r,lt.output)})}),this.addStep({program:T,getUniforms:()=>({texture:mn(r,et.output)})}),this.addStep({program:this.jointBilateral,getUniforms:()=>{var De,ze,We,zt,Hn,ne,Zt,$e;const Yt=(ze=(De=this.inputImage)==null?void 0:De.width)!=null?ze:1,Lt=(zt=(We=this.inputImage)==null?void 0:We.height)!=null?zt:1,at=(ne=(Hn=this.inputMask)==null?void 0:Hn.width)!=null?ne:1,dt=($e=(Zt=this.inputMask)==null?void 0:Zt.height)!=null?$e:1,Bt=Math.max(Yt/at,Lt/dt),kt=Math.max(1,Math.sqrt(Bt)*.66),ee=1/Yt,P=1/Lt;return{input_frame:mn(r,this.inputImage),segmentation_mask:mn(r,this.inputMask),threshold:mn(r,T.output),texel_size:[ee,P],step:kt,radius:Bt,offset:kt>1?kt*.5:0,sigma_texel:Math.max(ee,P)*Bt,sigma_color:.1}}}),this.output=this.jointBilateral.output}setData(r,f){this.previousInputImage=this.inputImage?this.inputImage:r,this.previousInputMask=this.inputMask?this.inputMask:f,this.inputImage=r,this.inputMask=f}setOptions(r){this.options=r}resizeOutput(r,f){super.resizeOutput(r,f),this.output=this.jointBilateral.output}}var l2=(i=>(i.PUSH="PUSH",i.POP="POP",i))(l2||{});class W3{constructor(n){gt(this,"context");gt(this,"extension");gt(this,"queries",[]);gt(this,"activeQuery");this.context=n,this.extension=n.getExtension("EXT_disjoint_timer_query_webgl2")}start(){}stop(){this.activeQuery&&this.context.endQuery(this.extension.TIME_ELAPSED_EXT)}pushContext(n){this.createQuery("PUSH",n)}popContext(n){this.createQuery("POP",n)}createQuery(n,r){this.activeQuery&&this.context.endQuery(this.extension.TIME_ELAPSED_EXT),this.activeQuery=this.context.createQuery(),this.context.beginQuery(this.extension.TIME_ELAPSED_EXT,this.activeQuery),this.queries.push({name:r,action:n,query:this.activeQuery})}async getResolvedQueries(){const n=(await Promise.all([...this.queries].map(r=>this.resolveQuery(r)))).filter(r=>r);for(let r=1;r<n.length;++r)n[r].timestamp+=n[r-1].duration+n[r-1].timestamp;return n}async resolveQuery(n){if(!await this.awaitQueryAvailable(n)){console.log("Unawaitable query",n);return}if(this.context.getParameter(this.extension.GPU_DISJOINT_EXT)){console.log("Disjointed query",n);return}return{...n,duration:this.context.getQueryParameter(n.query,this.context.QUERY_RESULT),timestamp:0}}async awaitQueryAvailable(n){for(let r=0;r<10;++r){if(this.context.getQueryParameter(n.query,this.context.QUERY_RESULT_AVAILABLE))return n;await o2(200)}}}class ho{constructor(){gt(this,"canvas");gt(this,"context");gt(this,"pipeline");gt(this,"previousImageWidth",0);gt(this,"previousImageHeight",0);gt(this,"previousMaskWidth",zr);gt(this,"previousMaskHeight",zr);gt(this,"profiler");gt(this,"postProcessingEnabled",!0);gt(this,"improveMask");const n=new OffscreenCanvas(0,0),r=n.getContext("webgl2");if(!r)throw"Fail to retrieve webgl2 context";this.canvas=n,this.context=r,this.improveMask=new X3(this.context,zr,zr)}setFlickeringOptions(n){this.improveMask.setOptions(n)}enablePostProcessing(){this.postProcessingEnabled=!0}disablePostProcessing(){this.postProcessingEnabled=!1}async profileWebgl(n){const r=new W3(this.context);return this.profiler=r,r.start(),await o2(n),this.profiler=void 0,r.stop(),r.getResolvedQueries()}async render(n,r){var I,F;if(!this.pipeline)throw"missing pipeline";(this.previousImageHeight!==n.height||this.previousImageWidth!==n.width)&&this.resizeOutput(n.width,n.height),(this.previousMaskHeight!==r.height||this.previousMaskWidth!==r.width)&&(this.improveMask.resizeOutput(r.width,r.height),this.previousMaskWidth=r.width,this.previousMaskHeight=r.height);const f="renderer";(I=this.profiler)==null||I.pushContext(f),this.improveMask.setProfiler(this.profiler),this.pipeline.setProfiler(this.profiler);let Z=r;return this.postProcessingEnabled&&(this.improveMask.setData(n,r),this.improveMask.run(),Z=this.improveMask.output),this.pipeline.setData(n,Z),await this.pipeline.run(),(F=this.profiler)==null||F.popContext(f),this.canvas}resizeOutput(n,r){var f;this.canvas.width=n,this.canvas.height=r,(f=this.pipeline)==null||f.resizeOutput(n,r),this.previousImageWidth=n,this.previousImageHeight=r}}class c2 extends ho{constructor(){super();gt(this,"pipeline");gt(this,"backgroundImage");gt(this,"backgroundImageResizerCanvas");gt(this,"backgroundImageResizerContext");gt(this,"backgroundImageResizer");this.pipeline=new i2(this.context);const r=new OffscreenCanvas(0,0),f=r.getContext("webgl2");if(!f)throw"Fail to retrieve webgl context";this.backgroundImageResizerCanvas=r,this.backgroundImageResizerContext=f,this.backgroundImageResizer=new i3(this.backgroundImageResizerContext,0,0)}setBackgroundImage(r){this.backgroundImage=r,this.updateBackgroundImage()}updateBackgroundImage(){const{width:r,height:f}=this.canvas;this.backgroundImageResizer.resizeOutput(r,f),this.backgroundImageResizer.setData(this.backgroundImage),this.backgroundImageResizer.run(),this.pipeline.inputBackgroundImage=this.backgroundImageResizerCanvas}resizeOutput(r,f){super.resizeOutput(r,f),this.backgroundImageResizerCanvas.width=r,this.backgroundImageResizerCanvas.height=f,this.backgroundImageResizer.resizeOutput(r,f),this.updateBackgroundImage()}}class V3 extends c2{constructor(){super(...arguments);gt(this,"frameReader")}setBackgroundVideo(r){this.frameReader=r}async render(r,f){return await this.readNextVideoFrame(),super.render(r,f)}async readNextVideoFrame(){var f;const r=await((f=this.frameReader)==null?void 0:f.read());if(r!=null&&r.value){const Z=await createImageBitmap(r.value);this.setBackgroundImage(Z),r.value.close()}}}class u2{blurBackground(n){return new Oc(n)}blurSilhouette(n){return new Pc(n)}imageBackground(){return new _c}videoBackground(){return new V3}}const R3=`precision mediump float;
|
|
417
417
|
|
|
418
418
|
varying vec2 _texture_coord;
|
|
419
419
|
|
|
@@ -433,7 +433,7 @@ void main() {
|
|
|
433
433
|
gl_Position = vec4(position, 0., 1.);
|
|
434
434
|
_texture_coord = texture_coord;
|
|
435
435
|
}
|
|
436
|
-
`;class
|
|
436
|
+
`;class I3 extends Tr{getDefines(){var n;return{RADIUS:(n=this.options.radius)!=null?n:1}}getFragmentShader(){return R3+this.createLoopFunction()}getVertexShader(){return x3}createLoopFunction(){var r;let n=(r=this.options.radius)!=null?r:1;return`
|
|
437
437
|
|
|
438
438
|
vec4 loop() {
|
|
439
439
|
vec4 result = vec4(0,0,0,0);
|
|
@@ -455,4 +455,4 @@ void main() {
|
|
|
455
455
|
diff.x = normalizedRadius.x;
|
|
456
456
|
}
|
|
457
457
|
return result / factorSum;
|
|
458
|
-
}`}}const T3=10,Y3=2,w3=8;class L3 extends as{constructor(r,f){super();gt(this,"inputImage");gt(this,"inputMask");gt(this,"blur");this.context=r,this.radius=f;const Z={context:r,height:r.canvas.height,width:r.canvas.width};this.blur=new S3({...Z,radius:f,...this.getBlurTextureSize(r.canvas.width,r.canvas.height)});const x=new cs({...Z,disableFramebuffer:!0});this.addStep({program:this.blur,preventResize:!0,getUniforms:()=>({texture:pn(r,this.inputImage),mask:pn(r,this.inputMask)})}),this.addStep({program:x,getUniforms:()=>({background:pn(r,this.blur.output),foreground:pn(r,this.inputImage),threshold:pn(r,this.inputMask)})})}getBlurTextureSize(r,f){const Z=this.radius>T3?w3:Y3;return{width:Math.max(Pr,r/Z),height:Math.max(Pr,f/Z)}}setData(r,f){this.inputImage=r,this.inputMask=f}resizeOutput(r,f){super.resizeOutput(r,f);const Z=this.getBlurTextureSize(r,f);this.blur.resizeOutput(Z.width,Z.height)}}class H3 extends mo{constructor(r){super();gt(this,"pipeline");this.pipeline=new L3(this.context,r),this.disablePostProcessing()}}class F3 extends as{constructor(r,f){super();gt(this,"inputImage");gt(this,"inputMask");this.context=r;const Z={context:r,height:r.canvas.height,width:r.canvas.width},x=new cc({...Z,radius:f,type:ds.GAUSSIAN}),H=new cs({...Z,disableFramebuffer:!0});this.addStep({program:x,getUniforms:()=>({texture:pn(r,this.inputImage)})}),this.addStep({program:H,getUniforms:()=>({background:pn(r,this.inputImage),foreground:pn(r,x.output),threshold:pn(r,this.inputMask)})})}setData(r,f){this.inputImage=r,this.inputMask=f}}class C3 extends mo{constructor(r){super();gt(this,"pipeline");this.pipeline=new F3(this.context,r),this.disablePostProcessing()}}class J3 extends sc{constructor(){super(...arguments);gt(this,"frameReader");gt(this,"preciseMaskEnabled",!0)}set reader(r){this.frameReader=r}async run(){this.frameReader&&(await this.readNextVideoFrame(),await super.run())}async readNextVideoFrame(){var f;const r=await((f=this.frameReader)==null?void 0:f.read());r!=null&&r.value&&(this.inputBackgroundImage=await createImageBitmap(r.value),r.value.close())}}class k3 extends mo{constructor(){super();gt(this,"pipeline");this.pipeline=new J3(this.context)}setBackgroundVideo(r){this.pipeline.reader=r}}class hc{blurBackground(n){return new H3(n)}blurSilhouette(n){return new C3(n)}imageBackground(){return new ac}videoBackground(){return new k3}}class N3{constructor(n){gt(this,"factory");switch(n){case $r.CANVAS:this.factory=new dc;break;case $r.WEBGL:this.factory=new hc;break;default:const r=Ys();this.factory=r.supported?new hc:new dc}}blurBackground(n){return this.getFactory().blurBackground(n)}blurSilhouette(n){return this.getFactory().blurSilhouette(n)}imageBackground(){return this.getFactory().imageBackground()}videoBackground(){return this.getFactory().videoBackground()}getFactory(){if(!this.factory)throw"Factory is not initialized";return this.factory}}class E3{constructor(){gt(this,"renderer");gt(this,"backgroundVideo");gt(this,"backgroundImage")}setBackgroundOptions(n){var f,Z;const r=new N3((f=n.renderingOptions)==null?void 0:f.type);switch(n.transformerType){case"BackgroundBlur":this.renderer=r.blurBackground(this.getBlurSize(n.radius));break;case"SilhouetteBlur":this.renderer=r.blurSilhouette(this.getBlurSize(n.radius));break;case"VideoBackground":const x=r.videoBackground();this.backgroundVideo&&x.setBackgroundVideo(this.backgroundVideo),this.renderer=x;break;case"VirtualBackground":const H=r.imageBackground();this.backgroundImage&&H.setBackgroundImage(this.backgroundImage),this.renderer=H;break;default:throw`Unknown rendering type [${n.transformerType}]`}((Z=n.renderingOptions)==null?void 0:Z.type)===$r.WEBGL&&(n.renderingOptions.selfieSegmentationType===vi.PRECISE?this.renderer.enablePostProcessing():n.renderingOptions.selfieSegmentationType===vi.FAST&&this.renderer.disablePostProcessing())}setFlickeringOptions(n){var r;(r=this.renderer)==null||r.setFlickeringOptions(n)}setVideoBGReadable(n){this.backgroundVideo=n.getReader();const r=this.renderer;r!=null&&r.setBackgroundVideo&&r.setBackgroundVideo(this.backgroundVideo)}async setVirtualBGImage(n){const r=this.renderer;r!=null&&r.setBackgroundImage&&r.setBackgroundImage(n),this.backgroundImage=n}async process(n,r){if(this.renderer)return this.renderer.render(n,r)}async resizeForeground(n,r){}getBlurSize(n=Dr.Low){switch(n){case Dr.Low:return 5;case Dr.High:return 12}return n}async profile(n){var r,f;return(f=(r=this.renderer)==null?void 0:r.profileWebgl(n))!=null?f:[]}}class fc{constructor(){gt(this,"selfieSegmentation",new Ss);gt(this,"backgroundFilter");gt(this,"reporter",new j2);gt(this,"isEnabled",!0);gt(this,"backgroundOptions")}async init(n,r){await this.selfieSegmentation.init(r.wasmAssetUriPath,r.tfliteAssetUriPath),this.backgroundFilter=new E3,this.report({variation:"Create"})}async transform(n,r){var T,J;if(!this.isEnabled)return r.enqueue(n);let f;const Z=(T=n.timestamp)!=null?T:0,x=await createImageBitmap(n),H=await this.selfieSegmentation.process(x);H&&(f=await((J=this.backgroundFilter)==null?void 0:J.process(x,H))),f?(n.close(),r.enqueue(new VideoFrame(f,{timestamp:Z,alpha:"discard"}))):r.enqueue(n)}async setBackgroundOptions(n){var r;this.backgroundOptions=n,await((r=this.backgroundFilter)==null?void 0:r.setBackgroundOptions(n)),this.report({variation:"Update"})}async setVideoBGReadable(n){var r;await((r=this.backgroundFilter)==null?void 0:r.setVideoBGReadable(n))}async setVirtualBGImage(n){var r;await((r=this.backgroundFilter)==null?void 0:r.setVirtualBGImage(n))}setFlickeringOptions(n){var r;(r=this.backgroundFilter)==null||r.setFlickeringOptions(n),this.report({variation:"Update"})}async profile(n){var r,f;return(f=(r=this.backgroundFilter)==null?void 0:r.profile(n))!=null?f:[]}getTransformerType(){var n,r;return(r=(n=this.backgroundOptions)==null?void 0:n.transformerType)!=null?r:"Undefined"}enable(){this.isEnabled=!0}disable(){this.isEnabled=!1}report(n){var r;this.reporter.send({version:P2,action:"MlTransformers",transformerType:(r=this.backgroundOptions)==null?void 0:r.transformerType,config:JSON.stringify(this.backgroundOptions),...n})}}const ps=class{constructor(){gt(this,"backgroundTransformer",new fc);gt(this,"mediaProcessor",new Qc);gt(this,"rate",30);gt(this,"resolveOnMediaProcessor");gt(this,"eventsQueue",[])}async init(n,r){await this.backgroundTransformer.init(n,r),await this.mediaProcessor.setTransformers([this.backgroundTransformer]),this.mediaProcessor.setTrackExpectedRate(this.rate),this.mediaProcessor.onAny((f,Z)=>{this.resolveOnMediaProcessor?(this.resolveOnMediaProcessor({name:f,data:Z}),this.resolveOnMediaProcessor=void 0):this.eventsQueue.push({name:f,data:Z})})}enable(){this.backgroundTransformer.enable()}disable(){this.backgroundTransformer.disable()}async onMediaProcessorEvent(){return await new Promise(n=>{this.eventsQueue.length>0?n(this.eventsQueue.shift()):this.resolveOnMediaProcessor=n})}async setTrackExpectedRate(n){this.rate=n,this.mediaProcessor.setTrackExpectedRate(n)}async transform(n,r){this.mediaProcessor.transform(n,r)}async setBackgroundOptions(n){var r;await((r=this.backgroundTransformer)==null?void 0:r.setBackgroundOptions(n))}setVideoBGReadable(n){this.backgroundTransformer.setVideoBGReadable(n)}async setVirtualBGImage(n){await this.backgroundTransformer.setVirtualBGImage(n)}async terminate(){await this.mediaProcessor.destroy()}setFlickeringOptions(n){this.backgroundTransformer.setFlickeringOptions(n)}setVonageMetadata(n){Ac(n)}async profile(n){return JSON.stringify(await this.backgroundTransformer.profile(n))}};let fs=ps;(()=>{g2("ProcessorWorker",ps)})();const mc="dmFyICRsPU9iamVjdC5kZWZpbmVQcm9wZXJ0eTt2YXIgV2w9KEosUSxWKT0+USBpbiBKPyRsKEosUSx7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6Vn0pOkpbUV09Vjt2YXIgbD0oSixRLFYpPT4oV2woSix0eXBlb2YgUSE9InN5bWJvbCI/USsiIjpRLFYpLFYpOyhmdW5jdGlvbigpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBKKHIsZSl7Z2xvYmFsVGhpcy52b25hZ2V8fChnbG9iYWxUaGlzLnZvbmFnZT17fSksZ2xvYmFsVGhpcy52b25hZ2Uud29ya2VyaXplcnx8KGdsb2JhbFRoaXMudm9uYWdlLndvcmtlcml6ZXI9e30pO2xldCB0PWdsb2JhbFRoaXMudm9uYWdlLndvcmtlcml6ZXI7cmV0dXJuIHRbcl18fCh0W3JdPWUpLHRbcl19Y29uc3QgUT1KKCJnbG9iYWxzIix7fSk7dmFyIFY9KHI9PihyLklOSVQ9IklOSVQiLHIuRk9SV0FSRD0iRk9SV0FSRCIsci5URVJNSU5BVEU9IlRFUk1JTkFURSIsci5HTE9CQUxTX1NZTkM9IkdMT0JBTFNfU1lOQyIsci5FVkVOVD0iRVZFTlQiLHIpKShWfHx7fSk7ZnVuY3Rpb24gJG8ocil7cmV0dXJuW0ltYWdlQml0bWFwLFJlYWRhYmxlU3RyZWFtLFdyaXRhYmxlU3RyZWFtXS5zb21lKHQ9PnIgaW5zdGFuY2VvZiB0KX1mdW5jdGlvbiBVZShyLGUpe2NvbnN0e2lkOnQsdHlwZTpufT1yLG89QXJyYXkuaXNBcnJheShlKT9lOltlXTtwb3N0TWVzc2FnZSh7aWQ6dCx0eXBlOm4scmVzdWx0OmV9LG8uZmlsdGVyKGk9PiRvKGkpKSl9Sigid29ya2VyaXplZCIse30pO2Z1bmN0aW9uIFlyKCl7cmV0dXJuIHR5cGVvZiBXb3JrZXJHbG9iYWxTY29wZTwidSImJnNlbGYgaW5zdGFuY2VvZiBXb3JrZXJHbG9iYWxTY29wZX1mdW5jdGlvbiBldChyLGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpZS5zcGxpY2UoMCxlLmxlbmd0aCk7ZWxzZSBpZih0eXBlb2YgZT09Im9iamVjdCIpZm9yKGNvbnN0IHQgaW4gZSlkZWxldGUgZVt0XTtmb3IoY29uc3QgdCBpbiByKUFycmF5LmlzQXJyYXkoclt0XSk/KGVbdF09W10sZXQoclt0XSxlW3RdKSk6dHlwZW9mIHJbdF09PSJvYmplY3QiPyhlW3RdPXt9LGV0KHJbdF0sZVt0XSkpOmVbdF09clt0XX1jb25zdCB0ZT1uZXcgV2Vha01hcCxoZT1uZXcgV2Vha01hcCxaPW5ldyBXZWFrTWFwLHR0PVN5bWJvbCgiYW55UHJvZHVjZXIiKSxYcj1Qcm9taXNlLnJlc29sdmUoKSxydD1TeW1ib2woImxpc3RlbmVyQWRkZWQiKSxudD1TeW1ib2woImxpc3RlbmVyUmVtb3ZlZCIpO2xldCBvdD0hMSxIdD0hMTtmdW5jdGlvbiBBZShyKXtpZih0eXBlb2YgciE9InN0cmluZyImJnR5cGVvZiByIT0ic3ltYm9sIiYmdHlwZW9mIHIhPSJudW1iZXIiKXRocm93IG5ldyBUeXBlRXJyb3IoImBldmVudE5hbWVgIG11c3QgYmUgYSBzdHJpbmcsIHN5bWJvbCwgb3IgbnVtYmVyIil9ZnVuY3Rpb24gaXQocil7aWYodHlwZW9mIHIhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcigibGlzdGVuZXIgbXVzdCBiZSBhIGZ1bmN0aW9uIil9ZnVuY3Rpb24gSWUocixlKXtjb25zdCB0PWhlLmdldChyKTtpZighIXQuaGFzKGUpKXJldHVybiB0LmdldChlKX1mdW5jdGlvbiBOZShyLGUpe2NvbnN0IHQ9dHlwZW9mIGU9PSJzdHJpbmcifHx0eXBlb2YgZT09InN5bWJvbCJ8fHR5cGVvZiBlPT0ibnVtYmVyIj9lOnR0LG49Wi5nZXQocik7aWYoISFuLmhhcyh0KSlyZXR1cm4gbi5nZXQodCl9ZnVuY3Rpb24gV28ocixlLHQpe2NvbnN0IG49Wi5nZXQocik7aWYobi5oYXMoZSkpZm9yKGNvbnN0IG8gb2Ygbi5nZXQoZSkpby5lbnF1ZXVlKHQpO2lmKG4uaGFzKHR0KSl7Y29uc3Qgbz1Qcm9taXNlLmFsbChbZSx0XSk7Zm9yKGNvbnN0IGkgb2Ygbi5nZXQodHQpKWkuZW5xdWV1ZShvKX19ZnVuY3Rpb24gUXIocixlKXtlPUFycmF5LmlzQXJyYXkoZSk/ZTpbZV07bGV0IHQ9ITEsbj0oKT0+e30sbz1bXTtjb25zdCBpPXtlbnF1ZXVlKHMpe28ucHVzaChzKSxuKCl9LGZpbmlzaCgpe3Q9ITAsbigpfX07Zm9yKGNvbnN0IHMgb2YgZSl7bGV0IGE9TmUocixzKTthfHwoYT1uZXcgU2V0LFouZ2V0KHIpLnNldChzLGEpKSxhLmFkZChpKX1yZXR1cm57YXN5bmMgbmV4dCgpe3JldHVybiBvP28ubGVuZ3RoPT09MD90PyhvPXZvaWQgMCx0aGlzLm5leHQoKSk6KGF3YWl0IG5ldyBQcm9taXNlKHM9PntuPXN9KSx0aGlzLm5leHQoKSk6e2RvbmU6ITEsdmFsdWU6YXdhaXQgby5zaGlmdCgpfTp7ZG9uZTohMH19LGFzeW5jIHJldHVybihzKXtvPXZvaWQgMDtmb3IoY29uc3QgYSBvZiBlKXtjb25zdCB1PU5lKHIsYSk7dSYmKHUuZGVsZXRlKGkpLHUuc2l6ZT09PTAmJlouZ2V0KHIpLmRlbGV0ZShhKSl9cmV0dXJuIG4oKSxhcmd1bWVudHMubGVuZ3RoPjA/e2RvbmU6ITAsdmFsdWU6YXdhaXQgc306e2RvbmU6ITB9fSxbU3ltYm9sLmFzeW5jSXRlcmF0b3JdKCl7cmV0dXJuIHRoaXN9fX1mdW5jdGlvbiBxcihyKXtpZihyPT09dm9pZCAwKXJldHVybiBLcjtpZighQXJyYXkuaXNBcnJheShyKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJgbWV0aG9kTmFtZXNgIG11c3QgYmUgYW4gYXJyYXkgb2Ygc3RyaW5ncyIpO2Zvcihjb25zdCBlIG9mIHIpaWYoIUtyLmluY2x1ZGVzKGUpKXRocm93IHR5cGVvZiBlIT0ic3RyaW5nIj9uZXcgVHlwZUVycm9yKCJgbWV0aG9kTmFtZXNgIGVsZW1lbnQgbXVzdCBiZSBhIHN0cmluZyIpOm5ldyBFcnJvcihgJHtlfSBpcyBub3QgRW1pdHRlcnkgbWV0aG9kYCk7cmV0dXJuIHJ9Y29uc3QgU2U9cj0+cj09PXJ0fHxyPT09bnQ7ZnVuY3Rpb24gc3QocixlLHQpe2lmKFNlKGUpKXRyeXtvdD0hMCxyLmVtaXQoZSx0KX1maW5hbGx5e290PSExfX1jbGFzcyBSZXtzdGF0aWMgbWl4aW4oZSx0KXtyZXR1cm4gdD1xcih0KSxuPT57aWYodHlwZW9mIG4hPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcigiYHRhcmdldGAgbXVzdCBiZSBmdW5jdGlvbiIpO2Zvcihjb25zdCBzIG9mIHQpaWYobi5wcm90b3R5cGVbc10hPT12b2lkIDApdGhyb3cgbmV3IEVycm9yKGBUaGUgcHJvcGVydHkgXGAke3N9XGAgYWxyZWFkeSBleGlzdHMgb24gXGB0YXJnZXRcYGApO2Z1bmN0aW9uIG8oKXtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsZSx7ZW51bWVyYWJsZTohMSx2YWx1ZTpuZXcgUmV9KSx0aGlzW2VdfU9iamVjdC5kZWZpbmVQcm9wZXJ0eShuLnByb3RvdHlwZSxlLHtlbnVtZXJhYmxlOiExLGdldDpvfSk7Y29uc3QgaT1zPT5mdW5jdGlvbiguLi5hKXtyZXR1cm4gdGhpc1tlXVtzXSguLi5hKX07Zm9yKGNvbnN0IHMgb2YgdClPYmplY3QuZGVmaW5lUHJvcGVydHkobi5wcm90b3R5cGUscyx7ZW51bWVyYWJsZTohMSx2YWx1ZTppKHMpfSk7cmV0dXJuIG59fXN0YXRpYyBnZXQgaXNEZWJ1Z0VuYWJsZWQoKXt2YXIgZSx0O2lmKHR5cGVvZigoZT1nbG9iYWxUaGlzLnByb2Nlc3MpPT1udWxsP3ZvaWQgMDplLmVudikhPSJvYmplY3QiKXJldHVybiBIdDtjb25zdHtlbnY6bn09KHQ9Z2xvYmFsVGhpcy5wcm9jZXNzKSE9bnVsbD90OntlbnY6e319O3JldHVybiBuLkRFQlVHPT09ImVtaXR0ZXJ5Inx8bi5ERUJVRz09PSIqInx8SHR9c3RhdGljIHNldCBpc0RlYnVnRW5hYmxlZChlKXtIdD1lfWNvbnN0cnVjdG9yKGU9e30pe3ZhciB0O3RlLnNldCh0aGlzLG5ldyBTZXQpLGhlLnNldCh0aGlzLG5ldyBNYXApLFouc2V0KHRoaXMsbmV3IE1hcCksWi5nZXQodGhpcykuc2V0KHR0LG5ldyBTZXQpLHRoaXMuZGVidWc9KHQ9ZS5kZWJ1ZykhPW51bGw/dDp7fSx0aGlzLmRlYnVnLmVuYWJsZWQ9PT12b2lkIDAmJih0aGlzLmRlYnVnLmVuYWJsZWQ9ITEpLHRoaXMuZGVidWcubG9nZ2VyfHwodGhpcy5kZWJ1Zy5sb2dnZXI9KG4sbyxpLHMpPT57dHJ5e3M9SlNPTi5zdHJpbmdpZnkocyl9Y2F0Y2h7cz1gT2JqZWN0IHdpdGggdGhlIGZvbGxvd2luZyBrZXlzIGZhaWxlZCB0byBzdHJpbmdpZnk6ICR7T2JqZWN0LmtleXMocykuam9pbigiLCIpfWB9KHR5cGVvZiBpPT0ic3ltYm9sInx8dHlwZW9mIGk9PSJudW1iZXIiKSYmKGk9aS50b1N0cmluZygpKTtjb25zdCBhPW5ldyBEYXRlLHU9YCR7YS5nZXRIb3VycygpfToke2EuZ2V0TWludXRlcygpfToke2EuZ2V0U2Vjb25kcygpfS4ke2EuZ2V0TWlsbGlzZWNvbmRzKCl9YDtjb25zb2xlLmxvZyhgWyR7dX1dW2VtaXR0ZXJ5OiR7bn1dWyR7b31dIEV2ZW50IE5hbWU6ICR7aX0KCWRhdGE6ICR7c31gKX0pfWxvZ0lmRGVidWdFbmFibGVkKGUsdCxuKXsoUmUuaXNEZWJ1Z0VuYWJsZWR8fHRoaXMuZGVidWcuZW5hYmxlZCkmJnRoaXMuZGVidWcubG9nZ2VyKGUsdGhpcy5kZWJ1Zy5uYW1lLHQsbil9b24oZSx0KXtpdCh0KSxlPUFycmF5LmlzQXJyYXkoZSk/ZTpbZV07Zm9yKGNvbnN0IG4gb2YgZSl7QWUobik7bGV0IG89SWUodGhpcyxuKTtvfHwobz1uZXcgU2V0LGhlLmdldCh0aGlzKS5zZXQobixvKSksby5hZGQodCksdGhpcy5sb2dJZkRlYnVnRW5hYmxlZCgic3Vic2NyaWJlIixuLHZvaWQgMCksU2Uobil8fHN0KHRoaXMscnQse2V2ZW50TmFtZTpuLGxpc3RlbmVyOnR9KX1yZXR1cm4gdGhpcy5vZmYuYmluZCh0aGlzLGUsdCl9b2ZmKGUsdCl7aXQodCksZT1BcnJheS5pc0FycmF5KGUpP2U6W2VdO2Zvcihjb25zdCBuIG9mIGUpe0FlKG4pO2NvbnN0IG89SWUodGhpcyxuKTtvJiYoby5kZWxldGUodCksby5zaXplPT09MCYmaGUuZ2V0KHRoaXMpLmRlbGV0ZShuKSksdGhpcy5sb2dJZkRlYnVnRW5hYmxlZCgidW5zdWJzY3JpYmUiLG4sdm9pZCAwKSxTZShuKXx8c3QodGhpcyxudCx7ZXZlbnROYW1lOm4sbGlzdGVuZXI6dH0pfX1vbmNlKGUpe2xldCB0O2NvbnN0IG49bmV3IFByb21pc2Uobz0+e3Q9dGhpcy5vbihlLGk9Pnt0KCksbyhpKX0pfSk7cmV0dXJuIG4ub2ZmPXQsbn1ldmVudHMoZSl7ZT1BcnJheS5pc0FycmF5KGUpP2U6W2VdO2Zvcihjb25zdCB0IG9mIGUpQWUodCk7cmV0dXJuIFFyKHRoaXMsZSl9YXN5bmMgZW1pdChlLHQpe3ZhciBuO2lmKEFlKGUpLFNlKGUpJiYhb3QpdGhyb3cgbmV3IFR5cGVFcnJvcigiYGV2ZW50TmFtZWAgY2Fubm90IGJlIG1ldGEgZXZlbnQgYGxpc3RlbmVyQWRkZWRgIG9yIGBsaXN0ZW5lclJlbW92ZWRgIik7dGhpcy5sb2dJZkRlYnVnRW5hYmxlZCgiZW1pdCIsZSx0KSxXbyh0aGlzLGUsdCk7Y29uc3Qgbz0obj1JZSh0aGlzLGUpKSE9bnVsbD9uOm5ldyBTZXQsaT10ZS5nZXQodGhpcykscz1bLi4ub10sYT1TZShlKT9bXTpbLi4uaV07YXdhaXQgWHIsYXdhaXQgUHJvbWlzZS5hbGwoWy4uLnMubWFwKGFzeW5jIHU9PntpZihvLmhhcyh1KSlyZXR1cm4gdSh0KX0pLC4uLmEubWFwKGFzeW5jIHU9PntpZihpLmhhcyh1KSlyZXR1cm4gdShlLHQpfSldKX1hc3luYyBlbWl0U2VyaWFsKGUsdCl7dmFyIG47aWYoQWUoZSksU2UoZSkmJiFvdCl0aHJvdyBuZXcgVHlwZUVycm9yKCJgZXZlbnROYW1lYCBjYW5ub3QgYmUgbWV0YSBldmVudCBgbGlzdGVuZXJBZGRlZGAgb3IgYGxpc3RlbmVyUmVtb3ZlZGAiKTt0aGlzLmxvZ0lmRGVidWdFbmFibGVkKCJlbWl0U2VyaWFsIixlLHQpO2NvbnN0IG89KG49SWUodGhpcyxlKSkhPW51bGw/bjpuZXcgU2V0LGk9dGUuZ2V0KHRoaXMpLHM9Wy4uLm9dLGE9Wy4uLmldO2F3YWl0IFhyO2Zvcihjb25zdCB1IG9mIHMpby5oYXModSkmJmF3YWl0IHUodCk7Zm9yKGNvbnN0IHUgb2YgYSlpLmhhcyh1KSYmYXdhaXQgdShlLHQpfW9uQW55KGUpe3JldHVybiBpdChlKSx0aGlzLmxvZ0lmRGVidWdFbmFibGVkKCJzdWJzY3JpYmVBbnkiLHZvaWQgMCx2b2lkIDApLHRlLmdldCh0aGlzKS5hZGQoZSksc3QodGhpcyxydCx7bGlzdGVuZXI6ZX0pLHRoaXMub2ZmQW55LmJpbmQodGhpcyxlKX1hbnlFdmVudCgpe3JldHVybiBRcih0aGlzKX1vZmZBbnkoZSl7aXQoZSksdGhpcy5sb2dJZkRlYnVnRW5hYmxlZCgidW5zdWJzY3JpYmVBbnkiLHZvaWQgMCx2b2lkIDApLHN0KHRoaXMsbnQse2xpc3RlbmVyOmV9KSx0ZS5nZXQodGhpcykuZGVsZXRlKGUpfWNsZWFyTGlzdGVuZXJzKGUpe2U9QXJyYXkuaXNBcnJheShlKT9lOltlXTtmb3IoY29uc3QgdCBvZiBlKWlmKHRoaXMubG9nSWZEZWJ1Z0VuYWJsZWQoImNsZWFyIix0LHZvaWQgMCksdHlwZW9mIHQ9PSJzdHJpbmcifHx0eXBlb2YgdD09InN5bWJvbCJ8fHR5cGVvZiB0PT0ibnVtYmVyIil7Y29uc3Qgbj1JZSh0aGlzLHQpO24mJm4uY2xlYXIoKTtjb25zdCBvPU5lKHRoaXMsdCk7aWYobyl7Zm9yKGNvbnN0IGkgb2YgbylpLmZpbmlzaCgpO28uY2xlYXIoKX19ZWxzZXt0ZS5nZXQodGhpcykuY2xlYXIoKTtmb3IoY29uc3RbbixvXW9mIGhlLmdldCh0aGlzKS5lbnRyaWVzKCkpby5jbGVhcigpLGhlLmdldCh0aGlzKS5kZWxldGUobik7Zm9yKGNvbnN0W24sb11vZiBaLmdldCh0aGlzKS5lbnRyaWVzKCkpe2Zvcihjb25zdCBpIG9mIG8paS5maW5pc2goKTtvLmNsZWFyKCksWi5nZXQodGhpcykuZGVsZXRlKG4pfX19bGlzdGVuZXJDb3VudChlKXt2YXIgdCxuLG8saSxzLGE7ZT1BcnJheS5pc0FycmF5KGUpP2U6W2VdO2xldCB1PTA7Zm9yKGNvbnN0IGYgb2YgZSl7aWYodHlwZW9mIGY9PSJzdHJpbmciKXt1Kz10ZS5nZXQodGhpcykuc2l6ZSsoKG49KHQ9SWUodGhpcyxmKSk9PW51bGw/dm9pZCAwOnQuc2l6ZSkhPW51bGw/bjowKSsoKGk9KG89TmUodGhpcyxmKSk9PW51bGw/dm9pZCAwOm8uc2l6ZSkhPW51bGw/aTowKSsoKGE9KHM9TmUodGhpcykpPT1udWxsP3ZvaWQgMDpzLnNpemUpIT1udWxsP2E6MCk7Y29udGludWV9dHlwZW9mIGY8InUiJiZBZShmKSx1Kz10ZS5nZXQodGhpcykuc2l6ZTtmb3IoY29uc3QgZCBvZiBoZS5nZXQodGhpcykudmFsdWVzKCkpdSs9ZC5zaXplO2Zvcihjb25zdCBkIG9mIFouZ2V0KHRoaXMpLnZhbHVlcygpKXUrPWQuc2l6ZX1yZXR1cm4gdX1iaW5kTWV0aG9kcyhlLHQpe2lmKHR5cGVvZiBlIT0ib2JqZWN0Inx8ZT09PW51bGwpdGhyb3cgbmV3IFR5cGVFcnJvcigiYHRhcmdldGAgbXVzdCBiZSBhbiBvYmplY3QiKTt0PXFyKHQpO2Zvcihjb25zdCBuIG9mIHQpe2lmKGVbbl0hPT12b2lkIDApdGhyb3cgbmV3IEVycm9yKGBUaGUgcHJvcGVydHkgXGAke259XGAgYWxyZWFkeSBleGlzdHMgb24gXGB0YXJnZXRcYGApO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLG4se2VudW1lcmFibGU6ITEsdmFsdWU6dGhpc1tuXS5iaW5kKHRoaXMpfSl9fX1jb25zdCBLcj1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhSZS5wcm90b3R5cGUpLmZpbHRlcihyPT5yIT09ImNvbnN0cnVjdG9yIik7T2JqZWN0LmRlZmluZVByb3BlcnR5KFJlLCJsaXN0ZW5lckFkZGVkIix7dmFsdWU6cnQsd3JpdGFibGU6ITEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITF9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoUmUsImxpc3RlbmVyUmVtb3ZlZCIse3ZhbHVlOm50LHdyaXRhYmxlOiExLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiExfSk7ZnVuY3Rpb24gVm8ocil7cmV0dXJuIHIub25BbnkmJnIuZW1pdH1hc3luYyBmdW5jdGlvbiBIbyhyLGUpe2NvbnN0e2Z1bmN0aW9uTmFtZTp0LGFyZ3M6bn09cjtpZighZS5pbnN0YW5jZSl0aHJvdyJpbnN0YW5jZSBub3QgaW5pdGlhbGl6ZWQiO2lmKCF0KXRocm93Im1pc3NpbmcgZnVuY3Rpb24gbmFtZSB0byBjYWxsIjtpZighZS5pbnN0YW5jZVt0XSl0aHJvd2B1bmRlZmluZWQgZnVuY3Rpb24gWyR7dH1dIGluIGNsYXNzICR7ZS5pbnN0YW5jZS5jb25zdHJ1Y3Rvci53b3JrZXJJZH1gO1VlKHIsYXdhaXQgZS5pbnN0YW5jZVt0XSguLi5uIT1udWxsP246W10pKX1jb25zdCBKcj1KKCJyZWdpc3RlcmVkV29ya2VycyIse30pO2Z1bmN0aW9uIGpvKHIsZSl7ZS53b3JrZXJJZD1yLFlyKCkmJihKcltlLndvcmtlcklkXT1lKX1mdW5jdGlvbiBZbyhyLGUpe2lmKCFyLmFyZ3MpdGhyb3ciTWlzc2luZyBjbGFzc05hbWUgd2hpbGUgaW5pdGlhbGl6aW5nIHdvcmtlciI7Y29uc3RbdCxuXT1yLmFyZ3Msbz1Kclt0XTtpZihvKWUuaW5zdGFuY2U9bmV3IG8oci5hcmdzLnNsaWNlKDEpKTtlbHNlIHRocm93YHVua25vd24gd29ya2VyIGNsYXNzICR7dH1gO2V0KG4sUSksVm8oZS5pbnN0YW5jZSkmJmUuaW5zdGFuY2Uub25BbnkoKGkscyk9PntVZSh7dHlwZTpWLkVWRU5UfSx7bmFtZTppLGRhdGE6c30pfSksVWUocix0eXBlb2YgZS5pbnN0YW5jZSE9PXZvaWQgMCl9YXN5bmMgZnVuY3Rpb24gWG8ocixlKXtjb25zdHthcmdzOnR9PXI7aWYoIWUuaW5zdGFuY2UpdGhyb3ciaW5zdGFuY2Ugbm90IGluaXRpYWxpemVkIjtsZXQgbjtlLmluc3RhbmNlLnRlcm1pbmF0ZSYmKG49YXdhaXQgZS5pbnN0YW5jZS50ZXJtaW5hdGUoLi4udCE9bnVsbD90OltdKSksVWUocixuKX1mdW5jdGlvbiBRbyhyKXtpZighci5hcmdzKXRocm93Ik1pc3NpbmcgZ2xvYmFscyB3aGlsZSBzeW5jaW5nIjtldChyLmFyZ3NbMF0sUSksVWUocix7fSl9ZnVuY3Rpb24gcW8oKXtjb25zdCByPXt9O29ubWVzc2FnZT1hc3luYyBlPT57Y29uc3QgdD1lLmRhdGE7c3dpdGNoKHQudHlwZSl7Y2FzZSBWLklOSVQ6WW8odCxyKTticmVhaztjYXNlIFYuRk9SV0FSRDpIbyh0LHIpO2JyZWFrO2Nhc2UgVi5URVJNSU5BVEU6WG8odCxyKTticmVhaztjYXNlIFYuR0xPQkFMU19TWU5DOlFvKHQpO2JyZWFrfX19WXIoKSYmcW8oKTt2YXIgS289T2JqZWN0LmRlZmluZVByb3BlcnR5LEpvPShyLGUsdCk9PmUgaW4gcj9LbyhyLGUse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOnR9KTpyW2VdPXQsdz0ocixlLHQpPT4oSm8ocix0eXBlb2YgZSE9InN5bWJvbCI/ZSsiIjplLHQpLHQpO2NsYXNzIGVle313KGVlLCJ1cGRhdGVzIix7dHJhbnNmb3JtZXJfbmV3OiJOZXcgdHJhbnNmb3JtZXIiLHRyYW5zZm9ybWVyX251bGw6Ik51bGwgdHJhbnNmb3JtZXIifSksdyhlZSwiZXJyb3JzIix7dHJhbnNmb3JtZXJfbm9uZToiTm8gdHJhbnNmb3JtZXJzIHByb3ZpZGVkIix0cmFuc2Zvcm1lcl9zdGFydDoiQ2Fubm90IHN0YXJ0IHRyYW5zZm9ybWVyIix0cmFuc2Zvcm1lcl90cmFuc2Zvcm06IkNhbm5vdCB0cmFuc2Zvcm0gZnJhbWUiLHRyYW5zZm9ybWVyX2ZsdXNoOiJDYW5ub3QgZmx1c2ggdHJhbnNmb3JtZXIiLHJlYWRhYmxlX251bGw6IlJlYWRhYmxlIGlzIG51bGwiLHdyaXRhYmxlX251bGw6IldyaXRhYmxlIGlzIG51bGwifSk7Y29uc3QgcmU9bmV3IFdlYWtNYXAsYXQ9bmV3IFdlYWtNYXAsTGU9bmV3IFdlYWtNYXAsanQ9U3ltYm9sKCJhbnlQcm9kdWNlciIpLFpyPVByb21pc2UucmVzb2x2ZSgpLHV0PVN5bWJvbCgibGlzdGVuZXJBZGRlZCIpLGN0PVN5bWJvbCgibGlzdGVuZXJSZW1vdmVkIik7bGV0IFl0PSExO2Z1bmN0aW9uIEZlKHIpe2lmKHR5cGVvZiByIT0ic3RyaW5nIiYmdHlwZW9mIHIhPSJzeW1ib2wiKXRocm93IG5ldyBUeXBlRXJyb3IoImV2ZW50TmFtZSBtdXN0IGJlIGEgc3RyaW5nIG9yIGEgc3ltYm9sIil9ZnVuY3Rpb24gZnQocil7aWYodHlwZW9mIHIhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcigibGlzdGVuZXIgbXVzdCBiZSBhIGZ1bmN0aW9uIil9ZnVuY3Rpb24gUGUocixlKXtjb25zdCB0PWF0LmdldChyKTtyZXR1cm4gdC5oYXMoZSl8fHQuc2V0KGUsbmV3IFNldCksdC5nZXQoZSl9ZnVuY3Rpb24gemUocixlKXtjb25zdCB0PXR5cGVvZiBlPT0ic3RyaW5nInx8dHlwZW9mIGU9PSJzeW1ib2wiP2U6anQsbj1MZS5nZXQocik7cmV0dXJuIG4uaGFzKHQpfHxuLnNldCh0LG5ldyBTZXQpLG4uZ2V0KHQpfWZ1bmN0aW9uIFpvKHIsZSx0KXtjb25zdCBuPUxlLmdldChyKTtpZihuLmhhcyhlKSlmb3IoY29uc3QgbyBvZiBuLmdldChlKSlvLmVucXVldWUodCk7aWYobi5oYXMoanQpKXtjb25zdCBvPVByb21pc2UuYWxsKFtlLHRdKTtmb3IoY29uc3QgaSBvZiBuLmdldChqdCkpaS5lbnF1ZXVlKG8pfX1mdW5jdGlvbiBlbihyLGUpe2U9QXJyYXkuaXNBcnJheShlKT9lOltlXTtsZXQgdD0hMSxuPSgpPT57fSxvPVtdO2NvbnN0IGk9e2VucXVldWUocyl7by5wdXNoKHMpLG4oKX0sZmluaXNoKCl7dD0hMCxuKCl9fTtmb3IoY29uc3QgcyBvZiBlKXplKHIscykuYWRkKGkpO3JldHVybnthc3luYyBuZXh0KCl7cmV0dXJuIG8/by5sZW5ndGg9PT0wP3Q/KG89dm9pZCAwLHRoaXMubmV4dCgpKTooYXdhaXQgbmV3IFByb21pc2Uocz0+e249c30pLHRoaXMubmV4dCgpKTp7ZG9uZTohMSx2YWx1ZTphd2FpdCBvLnNoaWZ0KCl9Ontkb25lOiEwfX0sYXN5bmMgcmV0dXJuKHMpe289dm9pZCAwO2Zvcihjb25zdCBhIG9mIGUpemUocixhKS5kZWxldGUoaSk7cmV0dXJuIG4oKSxhcmd1bWVudHMubGVuZ3RoPjA/e2RvbmU6ITAsdmFsdWU6YXdhaXQgc306e2RvbmU6ITB9fSxbU3ltYm9sLmFzeW5jSXRlcmF0b3JdKCl7cmV0dXJuIHRoaXN9fX1mdW5jdGlvbiB0bihyKXtpZihyPT09dm9pZCAwKXJldHVybiBybjtpZighQXJyYXkuaXNBcnJheShyKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJgbWV0aG9kTmFtZXNgIG11c3QgYmUgYW4gYXJyYXkgb2Ygc3RyaW5ncyIpO2Zvcihjb25zdCBlIG9mIHIpaWYoIXJuLmluY2x1ZGVzKGUpKXRocm93IHR5cGVvZiBlIT0ic3RyaW5nIj9uZXcgVHlwZUVycm9yKCJgbWV0aG9kTmFtZXNgIGVsZW1lbnQgbXVzdCBiZSBhIHN0cmluZyIpOm5ldyBFcnJvcihgJHtlfSBpcyBub3QgRW1pdHRlcnkgbWV0aG9kYCk7cmV0dXJuIHJ9Y29uc3QgWHQ9cj0+cj09PXV0fHxyPT09Y3Q7Y2xhc3MgbWV7c3RhdGljIG1peGluKGUsdCl7cmV0dXJuIHQ9dG4odCksbj0+e2lmKHR5cGVvZiBuIT0iZnVuY3Rpb24iKXRocm93IG5ldyBUeXBlRXJyb3IoImB0YXJnZXRgIG11c3QgYmUgZnVuY3Rpb24iKTtmb3IoY29uc3QgcyBvZiB0KWlmKG4ucHJvdG90eXBlW3NdIT09dm9pZCAwKXRocm93IG5ldyBFcnJvcihgVGhlIHByb3BlcnR5IFxgJHtzfVxgIGFscmVhZHkgZXhpc3RzIG9uIFxgdGFyZ2V0XGBgKTtmdW5jdGlvbiBvKCl7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLGUse2VudW1lcmFibGU6ITEsdmFsdWU6bmV3IG1lfSksdGhpc1tlXX1PYmplY3QuZGVmaW5lUHJvcGVydHkobi5wcm90b3R5cGUsZSx7ZW51bWVyYWJsZTohMSxnZXQ6b30pO2NvbnN0IGk9cz0+ZnVuY3Rpb24oLi4uYSl7cmV0dXJuIHRoaXNbZV1bc10oLi4uYSl9O2Zvcihjb25zdCBzIG9mIHQpT2JqZWN0LmRlZmluZVByb3BlcnR5KG4ucHJvdG90eXBlLHMse2VudW1lcmFibGU6ITEsdmFsdWU6aShzKX0pO3JldHVybiBufX1zdGF0aWMgZ2V0IGlzRGVidWdFbmFibGVkKCl7aWYodHlwZW9mIHByb2Nlc3MhPSJvYmplY3QiKXJldHVybiBZdDtjb25zdHtlbnY6ZX09cHJvY2Vzc3x8e2Vudjp7fX07cmV0dXJuIGUuREVCVUc9PT0iZW1pdHRlcnkifHxlLkRFQlVHPT09IioifHxZdH1zdGF0aWMgc2V0IGlzRGVidWdFbmFibGVkKGUpe1l0PWV9Y29uc3RydWN0b3IoZT17fSl7cmUuc2V0KHRoaXMsbmV3IFNldCksYXQuc2V0KHRoaXMsbmV3IE1hcCksTGUuc2V0KHRoaXMsbmV3IE1hcCksdGhpcy5kZWJ1Zz1lLmRlYnVnfHx7fSx0aGlzLmRlYnVnLmVuYWJsZWQ9PT12b2lkIDAmJih0aGlzLmRlYnVnLmVuYWJsZWQ9ITEpLHRoaXMuZGVidWcubG9nZ2VyfHwodGhpcy5kZWJ1Zy5sb2dnZXI9KHQsbixvLGkpPT57dHJ5e2k9SlNPTi5zdHJpbmdpZnkoaSl9Y2F0Y2h7aT1gT2JqZWN0IHdpdGggdGhlIGZvbGxvd2luZyBrZXlzIGZhaWxlZCB0byBzdHJpbmdpZnk6ICR7T2JqZWN0LmtleXMoaSkuam9pbigiLCIpfWB9dHlwZW9mIG89PSJzeW1ib2wiJiYobz1vLnRvU3RyaW5nKCkpO2NvbnN0IHM9bmV3IERhdGUsYT1gJHtzLmdldEhvdXJzKCl9OiR7cy5nZXRNaW51dGVzKCl9OiR7cy5nZXRTZWNvbmRzKCl9LiR7cy5nZXRNaWxsaXNlY29uZHMoKX1gO2NvbnNvbGUubG9nKGBbJHthfV1bZW1pdHRlcnk6JHt0fV1bJHtufV0gRXZlbnQgTmFtZTogJHtvfQoJZGF0YTogJHtpfWApfSl9bG9nSWZEZWJ1Z0VuYWJsZWQoZSx0LG4peyhtZS5pc0RlYnVnRW5hYmxlZHx8dGhpcy5kZWJ1Zy5lbmFibGVkKSYmdGhpcy5kZWJ1Zy5sb2dnZXIoZSx0aGlzLmRlYnVnLm5hbWUsdCxuKX1vbihlLHQpe2Z0KHQpLGU9QXJyYXkuaXNBcnJheShlKT9lOltlXTtmb3IoY29uc3QgbiBvZiBlKUZlKG4pLFBlKHRoaXMsbikuYWRkKHQpLHRoaXMubG9nSWZEZWJ1Z0VuYWJsZWQoInN1YnNjcmliZSIsbix2b2lkIDApLFh0KG4pfHx0aGlzLmVtaXQodXQse2V2ZW50TmFtZTpuLGxpc3RlbmVyOnR9KTtyZXR1cm4gdGhpcy5vZmYuYmluZCh0aGlzLGUsdCl9b2ZmKGUsdCl7ZnQodCksZT1BcnJheS5pc0FycmF5KGUpP2U6W2VdO2Zvcihjb25zdCBuIG9mIGUpRmUobiksUGUodGhpcyxuKS5kZWxldGUodCksdGhpcy5sb2dJZkRlYnVnRW5hYmxlZCgidW5zdWJzY3JpYmUiLG4sdm9pZCAwKSxYdChuKXx8dGhpcy5lbWl0KGN0LHtldmVudE5hbWU6bixsaXN0ZW5lcjp0fSl9b25jZShlKXtyZXR1cm4gbmV3IFByb21pc2UodD0+e2NvbnN0IG49dGhpcy5vbihlLG89PntuKCksdChvKX0pfSl9ZXZlbnRzKGUpe2U9QXJyYXkuaXNBcnJheShlKT9lOltlXTtmb3IoY29uc3QgdCBvZiBlKUZlKHQpO3JldHVybiBlbih0aGlzLGUpfWFzeW5jIGVtaXQoZSx0KXtGZShlKSx0aGlzLmxvZ0lmRGVidWdFbmFibGVkKCJlbWl0IixlLHQpLFpvKHRoaXMsZSx0KTtjb25zdCBuPVBlKHRoaXMsZSksbz1yZS5nZXQodGhpcyksaT1bLi4ubl0scz1YdChlKT9bXTpbLi4ub107YXdhaXQgWnIsYXdhaXQgUHJvbWlzZS5hbGwoWy4uLmkubWFwKGFzeW5jIGE9PntpZihuLmhhcyhhKSlyZXR1cm4gYSh0KX0pLC4uLnMubWFwKGFzeW5jIGE9PntpZihvLmhhcyhhKSlyZXR1cm4gYShlLHQpfSldKX1hc3luYyBlbWl0U2VyaWFsKGUsdCl7RmUoZSksdGhpcy5sb2dJZkRlYnVnRW5hYmxlZCgiZW1pdFNlcmlhbCIsZSx0KTtjb25zdCBuPVBlKHRoaXMsZSksbz1yZS5nZXQodGhpcyksaT1bLi4ubl0scz1bLi4ub107YXdhaXQgWnI7Zm9yKGNvbnN0IGEgb2YgaSluLmhhcyhhKSYmYXdhaXQgYSh0KTtmb3IoY29uc3QgYSBvZiBzKW8uaGFzKGEpJiZhd2FpdCBhKGUsdCl9b25BbnkoZSl7cmV0dXJuIGZ0KGUpLHRoaXMubG9nSWZEZWJ1Z0VuYWJsZWQoInN1YnNjcmliZUFueSIsdm9pZCAwLHZvaWQgMCkscmUuZ2V0KHRoaXMpLmFkZChlKSx0aGlzLmVtaXQodXQse2xpc3RlbmVyOmV9KSx0aGlzLm9mZkFueS5iaW5kKHRoaXMsZSl9YW55RXZlbnQoKXtyZXR1cm4gZW4odGhpcyl9b2ZmQW55KGUpe2Z0KGUpLHRoaXMubG9nSWZEZWJ1Z0VuYWJsZWQoInVuc3Vic2NyaWJlQW55Iix2b2lkIDAsdm9pZCAwKSx0aGlzLmVtaXQoY3Qse2xpc3RlbmVyOmV9KSxyZS5nZXQodGhpcykuZGVsZXRlKGUpfWNsZWFyTGlzdGVuZXJzKGUpe2U9QXJyYXkuaXNBcnJheShlKT9lOltlXTtmb3IoY29uc3QgdCBvZiBlKWlmKHRoaXMubG9nSWZEZWJ1Z0VuYWJsZWQoImNsZWFyIix0LHZvaWQgMCksdHlwZW9mIHQ9PSJzdHJpbmcifHx0eXBlb2YgdD09InN5bWJvbCIpe1BlKHRoaXMsdCkuY2xlYXIoKTtjb25zdCBuPXplKHRoaXMsdCk7Zm9yKGNvbnN0IG8gb2YgbilvLmZpbmlzaCgpO24uY2xlYXIoKX1lbHNle3JlLmdldCh0aGlzKS5jbGVhcigpO2Zvcihjb25zdCBuIG9mIGF0LmdldCh0aGlzKS52YWx1ZXMoKSluLmNsZWFyKCk7Zm9yKGNvbnN0IG4gb2YgTGUuZ2V0KHRoaXMpLnZhbHVlcygpKXtmb3IoY29uc3QgbyBvZiBuKW8uZmluaXNoKCk7bi5jbGVhcigpfX19bGlzdGVuZXJDb3VudChlKXtlPUFycmF5LmlzQXJyYXkoZSk/ZTpbZV07bGV0IHQ9MDtmb3IoY29uc3QgbiBvZiBlKXtpZih0eXBlb2Ygbj09InN0cmluZyIpe3QrPXJlLmdldCh0aGlzKS5zaXplK1BlKHRoaXMsbikuc2l6ZSt6ZSh0aGlzLG4pLnNpemUremUodGhpcykuc2l6ZTtjb250aW51ZX10eXBlb2YgbjwidSImJkZlKG4pLHQrPXJlLmdldCh0aGlzKS5zaXplO2Zvcihjb25zdCBvIG9mIGF0LmdldCh0aGlzKS52YWx1ZXMoKSl0Kz1vLnNpemU7Zm9yKGNvbnN0IG8gb2YgTGUuZ2V0KHRoaXMpLnZhbHVlcygpKXQrPW8uc2l6ZX1yZXR1cm4gdH1iaW5kTWV0aG9kcyhlLHQpe2lmKHR5cGVvZiBlIT0ib2JqZWN0Inx8ZT09PW51bGwpdGhyb3cgbmV3IFR5cGVFcnJvcigiYHRhcmdldGAgbXVzdCBiZSBhbiBvYmplY3QiKTt0PXRuKHQpO2Zvcihjb25zdCBuIG9mIHQpe2lmKGVbbl0hPT12b2lkIDApdGhyb3cgbmV3IEVycm9yKGBUaGUgcHJvcGVydHkgXGAke259XGAgYWxyZWFkeSBleGlzdHMgb24gXGB0YXJnZXRcYGApO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLG4se2VudW1lcmFibGU6ITEsdmFsdWU6dGhpc1tuXS5iaW5kKHRoaXMpfSl9fX1jb25zdCBybj1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhtZS5wcm90b3R5cGUpLmZpbHRlcihyPT5yIT09ImNvbnN0cnVjdG9yIik7T2JqZWN0LmRlZmluZVByb3BlcnR5KG1lLCJsaXN0ZW5lckFkZGVkIix7dmFsdWU6dXQsd3JpdGFibGU6ITEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITF9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkobWUsImxpc3RlbmVyUmVtb3ZlZCIse3ZhbHVlOmN0LHdyaXRhYmxlOiExLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiExfSk7dmFyIFF0PW1lO2Z1bmN0aW9uIGVpKHIpe3JldHVybiB0eXBlb2Ygcj09Im9iamVjdCImJnIhPT1udWxsJiYibWVzc2FnZSJpbiByJiZ0eXBlb2Ygci5tZXNzYWdlPT0ic3RyaW5nIn1mdW5jdGlvbiB0aShyKXtpZihlaShyKSlyZXR1cm4gcjt0cnl7cmV0dXJuIG5ldyBFcnJvcihKU09OLnN0cmluZ2lmeShyKSl9Y2F0Y2h7cmV0dXJuIG5ldyBFcnJvcihTdHJpbmcocikpfX1mdW5jdGlvbiBxdChyKXtyZXR1cm4gdGkocikubWVzc2FnZX12YXIgcmk9T2JqZWN0LmRlZmluZVByb3BlcnR5LG5pPShyLGUsdCk9PmUgaW4gcj9yaShyLGUse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOnR9KTpyW2VdPXQsb2k9KHIsZSx0KT0+KG5pKHIsdHlwZW9mIGUhPSJzeW1ib2wiP2UrIiI6ZSx0KSx0KTtjb25zdCBpaT0iaGxnLnRva2JveC5jb20vcHJvZC9sb2dnaW5nL3ZjcF93ZWJydGMiLHNpPSJodHRwczovLyIsYWk9MWU0O2xldCBsdDtjb25zdCB1aT1uZXcgVWludDhBcnJheSgxNik7ZnVuY3Rpb24gY2koKXtpZighbHQmJihsdD10eXBlb2YgY3J5cHRvPCJ1IiYmY3J5cHRvLmdldFJhbmRvbVZhbHVlcyYmY3J5cHRvLmdldFJhbmRvbVZhbHVlcy5iaW5kKGNyeXB0byksIWx0KSl0aHJvdyBuZXcgRXJyb3IoImNyeXB0by5nZXRSYW5kb21WYWx1ZXMoKSBub3Qgc3VwcG9ydGVkLiBTZWUgaHR0cHM6Ly9naXRodWIuY29tL3V1aWRqcy91dWlkI2dldHJhbmRvbXZhbHVlcy1ub3Qtc3VwcG9ydGVkIik7cmV0dXJuIGx0KHVpKX1jb25zdCBDPVtdO2ZvcihsZXQgcj0wO3I8MjU2OysrcilDLnB1c2goKHIrMjU2KS50b1N0cmluZygxNikuc2xpY2UoMSkpO2Z1bmN0aW9uIGZpKHIsZT0wKXtyZXR1cm4oQ1tyW2UrMF1dK0NbcltlKzFdXStDW3JbZSsyXV0rQ1tyW2UrM11dKyItIitDW3JbZSs0XV0rQ1tyW2UrNV1dKyItIitDW3JbZSs2XV0rQ1tyW2UrN11dKyItIitDW3JbZSs4XV0rQ1tyW2UrOV1dKyItIitDW3JbZSsxMF1dK0NbcltlKzExXV0rQ1tyW2UrMTJdXStDW3JbZSsxM11dK0NbcltlKzE0XV0rQ1tyW2UrMTVdXSkudG9Mb3dlckNhc2UoKX1jb25zdCBsaT10eXBlb2YgY3J5cHRvPCJ1IiYmY3J5cHRvLnJhbmRvbVVVSUQmJmNyeXB0by5yYW5kb21VVUlELmJpbmQoY3J5cHRvKSxubj17cmFuZG9tVVVJRDpsaX07ZnVuY3Rpb24gZGkocixlLHQpe2lmKG5uLnJhbmRvbVVVSUQmJiFlJiYhcilyZXR1cm4gbm4ucmFuZG9tVVVJRCgpO3I9cnx8e307Y29uc3Qgbj1yLnJhbmRvbXx8KHIucm5nfHxjaSkoKTtpZihuWzZdPW5bNl0mMTV8NjQsbls4XT1uWzhdJjYzfDEyOCxlKXt0PXR8fDA7Zm9yKGxldCBvPTA7bzwxNjsrK28pZVt0K29dPW5bb107cmV0dXJuIGV9cmV0dXJuIGZpKG4pfWZ1bmN0aW9uIEt0KHIsZSl7Z2xvYmFsVGhpcy52b25hZ2V8fChnbG9iYWxUaGlzLnZvbmFnZT17fSksZ2xvYmFsVGhpcy52b25hZ2Uud29ya2VyaXplcnx8KGdsb2JhbFRoaXMudm9uYWdlLndvcmtlcml6ZXI9e30pO2xldCB0PWdsb2JhbFRoaXMudm9uYWdlLndvcmtlcml6ZXI7cmV0dXJuIHRbcl18fCh0W3JdPWUpLHRbcl19Y29uc3QgbmU9S3QoImdsb2JhbHMiLHt9KTt2YXIgcGU9KHI9PihyLklOSVQ9IklOSVQiLHIuRk9SV0FSRD0iRk9SV0FSRCIsci5URVJNSU5BVEU9IlRFUk1JTkFURSIsci5HTE9CQUxTX1NZTkM9IkdMT0JBTFNfU1lOQyIscikpKHBlfHx7fSk7ZnVuY3Rpb24gb24ocil7cmV0dXJuW0ltYWdlQml0bWFwLFJlYWRhYmxlU3RyZWFtLFdyaXRhYmxlU3RyZWFtXS5zb21lKGU9PnIgaW5zdGFuY2VvZiBlKX1sZXQgaGk9MDtmdW5jdGlvbiBtaShyLGUsdCxuLG8pe2NvbnN0IGk9aGkrKztyZXR1cm4gci5wb3N0TWVzc2FnZSh7aWQ6aSx0eXBlOmUsZnVuY3Rpb25OYW1lOnQsYXJnczpufSxuLmZpbHRlcihzPT5vbihzKSkpLG5ldyBQcm9taXNlKHM9PntvPT1udWxsfHxvLnNldChpLHMpfSl9ZnVuY3Rpb24gR2UocixlKXtjb25zdHtpZDp0LHR5cGU6bn09cixvPUFycmF5LmlzQXJyYXkoZSk/ZTpbZV07cG9zdE1lc3NhZ2Uoe2lkOnQsdHlwZTpuLHJlc3VsdDplfSxvLmZpbHRlcihpPT5vbihpKSkpfWNvbnN0IHNuPUt0KCJ3b3JrZXJpemVkIix7fSk7ZnVuY3Rpb24gYW4oKXtyZXR1cm4gdHlwZW9mIFdvcmtlckdsb2JhbFNjb3BlPCJ1IiYmc2VsZiBpbnN0YW5jZW9mIFdvcmtlckdsb2JhbFNjb3BlfWFzeW5jIGZ1bmN0aW9uIHBpKCl7aWYoYW4oKSlHZSh7dHlwZTpwZS5HTE9CQUxTX1NZTkN9LG5lKTtlbHNle2NvbnN0IHI9W107Zm9yKGNvbnN0IGUgaW4gc24pe2NvbnN0e3dvcmtlcjp0LHJlc29sdmVyczpufT1zbltlXS53b3JrZXJDb250ZXh0O3QmJnIucHVzaChtaSh0LHBlLkdMT0JBTFNfU1lOQywiIixbbmVdLG4pKX1hd2FpdCBQcm9taXNlLmFsbChyKX19ZnVuY3Rpb24gZHQocixlKXtpZihBcnJheS5pc0FycmF5KGUpKWUuc3BsaWNlKDAsZS5sZW5ndGgpO2Vsc2UgaWYodHlwZW9mIGU9PSJvYmplY3QiKWZvcihjb25zdCB0IGluIGUpZGVsZXRlIGVbdF07Zm9yKGNvbnN0IHQgaW4gcilBcnJheS5pc0FycmF5KHJbdF0pPyhlW3RdPVtdLGR0KHJbdF0sZVt0XSkpOnR5cGVvZiByW3RdPT0ib2JqZWN0Ij8oZVt0XT17fSxkdChyW3RdLGVbdF0pKTplW3RdPXJbdF19YXN5bmMgZnVuY3Rpb24gZ2kocixlKXtjb25zdHtmdW5jdGlvbk5hbWU6dCxhcmdzOm59PXI7aWYoIWUuaW5zdGFuY2UpdGhyb3ciaW5zdGFuY2Ugbm90IGluaXRpYWxpemVkIjtpZighdCl0aHJvdyJtaXNzaW5nIGZ1bmN0aW9uIG5hbWUgdG8gY2FsbCI7aWYoIWUuaW5zdGFuY2VbdF0pdGhyb3dgdW5kZWZpbmVkIGZ1bmN0aW9uIFske3R9XSBpbiBjbGFzcyAke2UuaW5zdGFuY2UuY29uc3RydWN0b3Iud29ya2VySWR9YDtHZShyLGF3YWl0IGUuaW5zdGFuY2VbdF0oLi4ubiE9bnVsbD9uOltdKSl9Y29uc3QgeWk9S3QoInJlZ2lzdGVyZWRXb3JrZXJzIix7fSk7ZnVuY3Rpb24gYmkocixlKXtpZighci5hcmdzKXRocm93Ik1pc3NpbmcgY2xhc3NOYW1lIHdoaWxlIGluaXRpYWxpemluZyB3b3JrZXIiO2NvbnN0W3Qsbl09ci5hcmdzLG89eWlbdF07aWYobyllLmluc3RhbmNlPW5ldyBvKHIuYXJncy5zbGljZSgxKSk7ZWxzZSB0aHJvd2B1bmtub3duIHdvcmtlciBjbGFzcyAke3R9YDtkdChuLG5lKSxHZShyLHR5cGVvZiBlLmluc3RhbmNlIT09dm9pZCAwKX1hc3luYyBmdW5jdGlvbiB4aShyLGUpe2NvbnN0e2FyZ3M6dH09cjtpZighZS5pbnN0YW5jZSl0aHJvdyJpbnN0YW5jZSBub3QgaW5pdGlhbGl6ZWQiO2xldCBuO2UuaW5zdGFuY2UudGVybWluYXRlJiYobj1hd2FpdCBlLmluc3RhbmNlLnRlcm1pbmF0ZSguLi50IT1udWxsP3Q6W10pKSxHZShyLG4pfWZ1bmN0aW9uIF9pKHIpe2lmKCFyLmFyZ3MpdGhyb3ciTWlzc2luZyBnbG9iYWxzIHdoaWxlIHN5bmNpbmciO2R0KHIuYXJnc1swXSxuZSksR2Uocix7fSl9ZnVuY3Rpb24gdmkoKXtjb25zdCByPXt9O29ubWVzc2FnZT1hc3luYyBlPT57Y29uc3QgdD1lLmRhdGE7c3dpdGNoKHQudHlwZSl7Y2FzZSBwZS5JTklUOmJpKHQscik7YnJlYWs7Y2FzZSBwZS5GT1JXQVJEOmdpKHQscik7YnJlYWs7Y2FzZSBwZS5URVJNSU5BVEU6eGkodCxyKTticmVhaztjYXNlIHBlLkdMT0JBTFNfU1lOQzpfaSh0KTticmVha319fWFuKCkmJnZpKCk7ZnVuY3Rpb24gRWkocixlKXtyZXR1cm4gbmVbcl18fChuZVtyXT1lKSxbKCk9Pm5lW3JdLGFzeW5jIHQ9PntuZVtyXT10LGF3YWl0IHBpKCl9XX1mdW5jdGlvbiBUaShyLGUpe3JldHVybiBFaShyLGUpfWNvbnN0W3dpLEFpXT1UaSgibWV0YWRhdGEiKTtmdW5jdGlvbiBJaShyKXtBaShyKX1mdW5jdGlvbiBKdCgpe3JldHVybiB3aSgpfWNsYXNzIFp0e2NvbnN0cnVjdG9yKGUpe29pKHRoaXMsInV1aWQiLGRpKCkpLHRoaXMuY29uZmlnPWV9YXN5bmMgc2VuZChlKXt2YXIgdCxuLG87Y29uc3R7YXBwSWQ6aSxzb3VyY2VUeXBlOnN9PSh0PUp0KCkpIT1udWxsP3Q6e307aWYoIWl8fCFzKXJldHVybiJtZXRhZGF0YSBtaXNzaW5nIjtjb25zdCBhPW5ldyBBYm9ydENvbnRyb2xsZXIsdT1zZXRUaW1lb3V0KCgpPT5hLmFib3J0KCksYWkpO3JldHVybiBhd2FpdCgobz0obj10aGlzLmNvbmZpZyk9PW51bGw/dm9pZCAwOm4uZmV0Y2gpIT1udWxsP286ZmV0Y2gpKHRoaXMuZ2V0VXJsKCkse21ldGhvZDoiUE9TVCIsaGVhZGVyczp0aGlzLmdldEhlYWRlcnMoKSxib2R5OkpTT04uc3RyaW5naWZ5KHRoaXMuYnVpbGRSZXBvcnQoZSkpLHNpZ25hbDphLnNpZ25hbH0pLGNsZWFyVGltZW91dCh1KSwic3VjY2VzcyJ9Z2V0VXJsKCl7dmFyIGU7bGV0IHQ9KGU9SnQoKS5wcm94eVVybCkhPW51bGw/ZTpzaTtyZXR1cm4gdCs9KHQuYXQoLTEpPT09Ii8iPyIiOiIvIikraWksdH1nZXRIZWFkZXJzKCl7cmV0dXJueyJDb250ZW50LVR5cGUiOiJhcHBsaWNhdGlvbi9qc29uIn19YnVpbGRSZXBvcnQoZSl7Y29uc3QgdD1KdCgpO3JldHVybntndWlkOnRoaXMudXVpZCwuLi5lLGFwcGxpY2F0aW9uSWQ6dC5hcHBJZCx0aW1lc3RhbXA6RGF0ZS5ub3coKSxwcm94eVVybDp0LnByb3h5VXJsLHNvdXJjZTp0LnNvdXJjZVR5cGV9fX1jb25zdCBodD0iMi4wLjMiO2NsYXNzIFNpe2NvbnN0cnVjdG9yKGUpe3codGhpcywiZnJhbWVUcmFuc2Zvcm1lZENvdW50IiwwKSx3KHRoaXMsImZyYW1lRnJvbVNvdXJjZUNvdW50IiwwKSx3KHRoaXMsInN0YXJ0QXQiLDApLHcodGhpcywicmVwb3J0ZXIiKSx0aGlzLmNvbmZpZz1lLHRoaXMucmVwb3J0ZXI9bmV3IFp0KGUpfWFzeW5jIG9uRnJhbWVGcm9tU291cmNlKCl7dGhpcy5mcmFtZUZyb21Tb3VyY2VDb3VudCsrfWdldCBmcHMoKXtjb25zdHtzdGFydEF0OmUsZnJhbWVGcm9tU291cmNlQ291bnQ6dH09dGhpcyxuPShEYXRlLm5vdygpLWUpLzFlMztyZXR1cm4gdC9ufWFzeW5jIG9uRnJhbWVUcmFuc2Zvcm1lZChlPXt9LHQ9ITEpe3RoaXMuc3RhcnRBdD09PTAmJih0aGlzLnN0YXJ0QXQ9RGF0ZS5ub3coKSksdGhpcy5mcmFtZVRyYW5zZm9ybWVkQ291bnQrKztjb25zdHtzdGFydEF0Om4sZnJhbWVUcmFuc2Zvcm1lZENvdW50Om8sZnJhbWVGcm9tU291cmNlQ291bnQ6aX09dGhpcyxzPURhdGUubm93KCksYT0ocy1uKS8xZTMsdT1vL2EsZj1pL2E7cmV0dXJuIHR8fHRoaXMuZnJhbWVUcmFuc2Zvcm1lZENvdW50Pj10aGlzLmNvbmZpZy5sb2dnaW5nSW50ZXJ2YWxGcmFtZUNvdW50Pyh0aGlzLmZyYW1lRnJvbVNvdXJjZUNvdW50PTAsdGhpcy5mcmFtZVRyYW5zZm9ybWVkQ291bnQ9MCx0aGlzLnN0YXJ0QXQ9cyx0aGlzLnJlcG9ydGVyLmNvbmZpZz10aGlzLmNvbmZpZyx0aGlzLnJlcG9ydGVyLnNlbmQoey4uLnRoaXMuY29uZmlnLnJlcG9ydCx2YXJpYXRpb246IlFvUyIsZnBzOmYsdHJhbnNmb3JtZWRGcHM6dSxmcmFtZXNUcmFuc2Zvcm1lZDpvLC4uLmV9KSk6InN1Y2Nlc3MifX12YXIgZXI9KHI9PihyLnBpcGVsaW5lX2VuZGVkPSJwaXBlbGluZV9lbmRlZCIsci5waXBlbGluZV9lbmRlZF93aXRoX2Vycm9yPSJwaXBlbGluZV9lbmRlZF93aXRoX2Vycm9yIixyLnBpcGVsaW5lX3N0YXJ0ZWQ9InBpcGVsaW5lX3N0YXJ0ZWQiLHIucGlwZWxpbmVfc3RhcnRlZF93aXRoX2Vycm9yPSJwaXBlbGluZV9zdGFydGVkX3dpdGhfZXJyb3IiLHIucGlwZWxpbmVfcmVzdGFydGVkPSJwaXBlbGluZV9yZXN0YXJ0ZWQiLHIucGlwZWxpbmVfcmVzdGFydGVkX3dpdGhfZXJyb3I9InBpcGVsaW5lX3Jlc3RhcnRlZF93aXRoX2Vycm9yIixyKSkoZXJ8fHt9KTtjb25zdCBSaT01MDAsRmk9Ljg7Y2xhc3MgUGkgZXh0ZW5kcyBRdHtjb25zdHJ1Y3RvcihlLHQpe3N1cGVyKCksdyh0aGlzLCJyZXBvcnRlcl8iLG5ldyBadCksdyh0aGlzLCJyZXBvcnRlclFvc18iLG5ldyBTaSh7bG9nZ2luZ0ludGVydmFsRnJhbWVDb3VudDpSaSxyZXBvcnQ6e3ZlcnNpb246aHR9fSkpLHcodGhpcywidHJhbnNmb3JtZXJUeXBlXyIpLHcodGhpcywidHJhbnNmb3JtZXJfIiksdyh0aGlzLCJzaG91bGRTdG9wXyIpLHcodGhpcywiaXNGbGFzaGVkXyIpLHcodGhpcywibWVkaWFUcmFuc2Zvcm1lclFvc1JlcG9ydFN0YXJ0VGltZXN0YW1wXyIpLHcodGhpcywidmlkZW9IZWlnaHRfIiksdyh0aGlzLCJ2aWRlb1dpZHRoXyIpLHcodGhpcywidHJhY2tFeHBlY3RlZFJhdGVfIiksdyh0aGlzLCJpbmRleF8iKSx3KHRoaXMsImNvbnRyb2xsZXJfIiksdGhpcy5pbmRleF89dCx0aGlzLnRyYW5zZm9ybWVyXz1lLHRoaXMuc2hvdWxkU3RvcF89ITEsdGhpcy5pc0ZsYXNoZWRfPSExLHRoaXMubWVkaWFUcmFuc2Zvcm1lclFvc1JlcG9ydFN0YXJ0VGltZXN0YW1wXz0wLHRoaXMudmlkZW9IZWlnaHRfPTAsdGhpcy52aWRlb1dpZHRoXz0wLHRoaXMudHJhY2tFeHBlY3RlZFJhdGVfPS0xLHRoaXMudHJhbnNmb3JtZXJUeXBlXz0iQ3VzdG9tIiwiZ2V0VHJhbnNmb3JtZXJUeXBlImluIGUmJih0aGlzLnRyYW5zZm9ybWVyVHlwZV89ZS5nZXRUcmFuc2Zvcm1lclR5cGUoKSksdGhpcy5yZXBvcnQoe3ZhcmlhdGlvbjoiQ3JlYXRlIn0pfXNldFRyYWNrRXhwZWN0ZWRSYXRlKGUpe3RoaXMudHJhY2tFeHBlY3RlZFJhdGVfPWV9YXN5bmMgc3RhcnQoZSl7aWYodGhpcy5jb250cm9sbGVyXz1lLHRoaXMudHJhbnNmb3JtZXJfJiZ0eXBlb2YgdGhpcy50cmFuc2Zvcm1lcl8uc3RhcnQ9PSJmdW5jdGlvbiIpdHJ5e2F3YWl0IHRoaXMudHJhbnNmb3JtZXJfLnN0YXJ0KGUpfWNhdGNoKHQpe3RoaXMucmVwb3J0KHttZXNzYWdlOmVlLmVycm9ycy50cmFuc2Zvcm1lcl9zdGFydCx2YXJpYXRpb246IkVycm9yIixlcnJvcjpxdCh0KX0pO2NvbnN0IG49e2V2ZW50TWV0YURhdGE6e3RyYW5zZm9ybWVySW5kZXg6dGhpcy5pbmRleF99LGVycm9yOnQsZnVuY3Rpb246InN0YXJ0In07dGhpcy5lbWl0KCJlcnJvciIsbil9fWFzeW5jIHRyYW5zZm9ybShlLHQpe3ZhciBuLG8saSxzO2lmKHRoaXMubWVkaWFUcmFuc2Zvcm1lclFvc1JlcG9ydFN0YXJ0VGltZXN0YW1wXz09PTAmJih0aGlzLm1lZGlhVHJhbnNmb3JtZXJRb3NSZXBvcnRTdGFydFRpbWVzdGFtcF89RGF0ZS5ub3coKSksZSBpbnN0YW5jZW9mIFZpZGVvRnJhbWUmJih0aGlzLnZpZGVvSGVpZ2h0Xz0obj1lPT1udWxsP3ZvaWQgMDplLmRpc3BsYXlIZWlnaHQpIT1udWxsP246MCx0aGlzLnZpZGVvV2lkdGhfPShvPWU9PW51bGw/dm9pZCAwOmUuZGlzcGxheVdpZHRoKSE9bnVsbD9vOjApLHRoaXMucmVwb3J0ZXJRb3NfLm9uRnJhbWVGcm9tU291cmNlKCksdGhpcy50cmFuc2Zvcm1lcl8paWYodGhpcy5zaG91bGRTdG9wXyljb25zb2xlLndhcm4oIltQaXBlbGluZV0gZmx1c2ggZnJvbSB0cmFuc2Zvcm0iKSxlLmNsb3NlKCksdGhpcy5mbHVzaCh0KSx0LnRlcm1pbmF0ZSgpO2Vsc2V7dHJ5e2F3YWl0KChzPShpPXRoaXMudHJhbnNmb3JtZXJfKS50cmFuc2Zvcm0pPT1udWxsP3ZvaWQgMDpzLmNhbGwoaSxlLHQpKSx0aGlzLnJlcG9ydFFvcygpfWNhdGNoKGEpe3RoaXMucmVwb3J0KHttZXNzYWdlOmVlLmVycm9ycy50cmFuc2Zvcm1lcl90cmFuc2Zvcm0sdmFyaWF0aW9uOiJFcnJvciIsZXJyb3I6cXQoYSl9KTtjb25zdCB1PXtldmVudE1ldGFEYXRhOnt0cmFuc2Zvcm1lckluZGV4OnRoaXMuaW5kZXhffSxlcnJvcjphLGZ1bmN0aW9uOiJ0cmFuc2Zvcm0ifTt0aGlzLmVtaXQoImVycm9yIix1KX1pZih0aGlzLnRyYWNrRXhwZWN0ZWRSYXRlXyE9LTEmJnRoaXMudHJhY2tFeHBlY3RlZFJhdGVfKkZpPnRoaXMucmVwb3J0ZXJRb3NfLmZwcyl7Y29uc3QgYT17ZXZlbnRNZXRhRGF0YTp7dHJhbnNmb3JtZXJJbmRleDp0aGlzLmluZGV4X30sd2FybmluZ1R5cGU6ImZwc19kcm9wIixkcm9wSW5mbzp7cmVxdWVzdGVkOnRoaXMudHJhY2tFeHBlY3RlZFJhdGVfLGN1cnJlbnQ6dGhpcy5yZXBvcnRlclFvc18uZnBzfX07dGhpcy5lbWl0KCJ3YXJuIixhKX19fWFzeW5jIGZsdXNoKGUpe2lmKHRoaXMudHJhbnNmb3JtZXJfJiZ0eXBlb2YgdGhpcy50cmFuc2Zvcm1lcl8uZmx1c2g9PSJmdW5jdGlvbiImJiF0aGlzLmlzRmxhc2hlZF8pe3RoaXMuaXNGbGFzaGVkXz0hMDt0cnl7YXdhaXQgdGhpcy50cmFuc2Zvcm1lcl8uZmx1c2goZSl9Y2F0Y2godCl7dGhpcy5yZXBvcnQoe21lc3NhZ2U6ZWUuZXJyb3JzLnRyYW5zZm9ybWVyX2ZsdXNoLHZhcmlhdGlvbjoiRXJyb3IiLGVycm9yOnF0KHQpfSk7Y29uc3Qgbj17ZXZlbnRNZXRhRGF0YTp7dHJhbnNmb3JtZXJJbmRleDp0aGlzLmluZGV4X30sZXJyb3I6dCxmdW5jdGlvbjoiZmx1c2gifTt0aGlzLmVtaXQoImVycm9yIixuKX19dGhpcy5yZXBvcnRRb3MoITApLHRoaXMucmVwb3J0KHt2YXJpYXRpb246IkRlbGV0ZSJ9KX1zdG9wKCl7Y29uc29sZS5sb2coIltQaXBlbGluZV0gU3RvcCBzdHJlYW0uIiksdGhpcy5jb250cm9sbGVyXyYmKHRoaXMuZmx1c2godGhpcy5jb250cm9sbGVyXyksdGhpcy5jb250cm9sbGVyXy50ZXJtaW5hdGUoKSksdGhpcy5zaG91bGRTdG9wXz0hMH1yZXBvcnQoZSl7dGhpcy5yZXBvcnRlcl8uc2VuZCh7dmVyc2lvbjpodCxhY3Rpb246Ik1lZGlhVHJhbnNmb3JtZXIiLHRyYW5zZm9ybWVyVHlwZTp0aGlzLnRyYW5zZm9ybWVyVHlwZV8sLi4uZX0pfXJlcG9ydFFvcyhlPSExKXt0aGlzLnJlcG9ydGVyUW9zXy5jb25maWc9ey4uLnRoaXMucmVwb3J0ZXJRb3NfLmNvbmZpZ30sdGhpcy5yZXBvcnRlclFvc18ub25GcmFtZVRyYW5zZm9ybWVkKHt2ZXJzaW9uOmh0LGFjdGlvbjoiTWVkaWFUcmFuc2Zvcm1lciIsdHJhbnNmb3JtZXJUeXBlOnRoaXMudHJhbnNmb3JtZXJUeXBlXyx2aWRlb1dpZHRoOnRoaXMudmlkZW9XaWR0aF8sdmlkZW9IZWlnaHQ6dGhpcy52aWRlb0hlaWdodF99LGUpfX1jbGFzcyBraSBleHRlbmRzIFF0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKCksdyh0aGlzLCJ0cmFuc2Zvcm1lcnNfIiksdyh0aGlzLCJ0cmFja0V4cGVjdGVkUmF0ZV8iKSx0aGlzLnRyYW5zZm9ybWVyc189W10sdGhpcy50cmFja0V4cGVjdGVkUmF0ZV89LTE7Zm9yKGxldCB0PTA7dDxlLmxlbmd0aDt0Kyspe2xldCBuPW5ldyBQaShlW3RdLHQpO24ub24oImVycm9yIixvPT57dGhpcy5lbWl0KCJlcnJvciIsbyl9KSxuLm9uKCJ3YXJuIixvPT57dGhpcy5lbWl0KCJ3YXJuIixvKX0pLHRoaXMudHJhbnNmb3JtZXJzXy5wdXNoKG4pfX1zZXRUcmFja0V4cGVjdGVkUmF0ZShlKXt0aGlzLnRyYWNrRXhwZWN0ZWRSYXRlXz1lO2ZvcihsZXQgdCBvZiB0aGlzLnRyYW5zZm9ybWVyc18pdC5zZXRUcmFja0V4cGVjdGVkUmF0ZSh0aGlzLnRyYWNrRXhwZWN0ZWRSYXRlXyl9YXN5bmMgc3RhcnQoZSx0KXtpZighdGhpcy50cmFuc2Zvcm1lcnNffHx0aGlzLnRyYW5zZm9ybWVyc18ubGVuZ3RoPT09MCl7Y29uc29sZS5sb2coIltQaXBlbGluZV0gTm8gdHJhbnNmb3JtZXJzLiIpO3JldHVybn10cnl7bGV0IG49ZTtmb3IobGV0IG8gb2YgdGhpcy50cmFuc2Zvcm1lcnNfKWU9ZS5waXBlVGhyb3VnaChuZXcgVHJhbnNmb3JtU3RyZWFtKG8pKTtlLnBpcGVUbyh0KS50aGVuKGFzeW5jKCk9Pntjb25zb2xlLmxvZygiW1BpcGVsaW5lXSBTZXR1cC4iKSxhd2FpdCB0LmFib3J0KCksYXdhaXQgbi5jYW5jZWwoKSx0aGlzLmVtaXQoInBpcGVsaW5lSW5mbyIsInBpcGVsaW5lX2VuZGVkIil9KS5jYXRjaChhc3luYyBvPT57ZS5jYW5jZWwoKS50aGVuKCgpPT57Y29uc29sZS5sb2coIltQaXBlbGluZV0gU2h1dHRpbmcgZG93biBzdHJlYW1zIGFmdGVyIGFib3J0LiIpfSkuY2F0Y2goaT0+e2NvbnNvbGUuZXJyb3IoIltQaXBlbGluZV0gRXJyb3IgZnJvbSBzdHJlYW0gdHJhbnNmb3JtOiIsaSl9KSxhd2FpdCB0LmFib3J0KG8pLGF3YWl0IG4uY2FuY2VsKG8pLHRoaXMuZW1pdCgicGlwZWxpbmVJbmZvIiwicGlwZWxpbmVfZW5kZWRfd2l0aF9lcnJvciIpfSl9Y2F0Y2h7dGhpcy5lbWl0KCJwaXBlbGluZUluZm8iLCJwaXBlbGluZV9zdGFydGVkX3dpdGhfZXJyb3IiKSx0aGlzLmRlc3Ryb3koKTtyZXR1cm59dGhpcy5lbWl0KCJwaXBlbGluZUluZm8iLCJwaXBlbGluZV9zdGFydGVkIiksY29uc29sZS5sb2coIltQaXBlbGluZV0gUGlwZWxpbmUgc3RhcnRlZC4iKX1hc3luYyBkZXN0cm95KCl7Y29uc29sZS5sb2coIltQaXBlbGluZV0gRGVzdHJveWluZyBQaXBlbGluZS4iKTtmb3IobGV0IGUgb2YgdGhpcy50cmFuc2Zvcm1lcnNfKWUuc3RvcCgpfX1jbGFzcyBEaSBleHRlbmRzIFF0e2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx3KHRoaXMsInJlcG9ydGVyXyIpLHcodGhpcywicGlwZWxpbmVfIiksdyh0aGlzLCJ0cmFuc2Zvcm1lcnNfIiksdyh0aGlzLCJyZWFkYWJsZV8iKSx3KHRoaXMsIndyaXRhYmxlXyIpLHcodGhpcywidHJhY2tFeHBlY3RlZFJhdGVfIiksdGhpcy5yZXBvcnRlcl89bmV3IFp0LHRoaXMudHJhY2tFeHBlY3RlZFJhdGVfPS0xLHRoaXMucmVwb3J0KHt2YXJpYXRpb246IkNyZWF0ZSJ9KX1zZXRUcmFja0V4cGVjdGVkUmF0ZShlKXt0aGlzLnRyYWNrRXhwZWN0ZWRSYXRlXz1lLHRoaXMucGlwZWxpbmVfJiZ0aGlzLnBpcGVsaW5lXy5zZXRUcmFja0V4cGVjdGVkUmF0ZSh0aGlzLnRyYWNrRXhwZWN0ZWRSYXRlXyl9dHJhbnNmb3JtKGUsdCl7cmV0dXJuIHRoaXMucmVhZGFibGVfPWUsdGhpcy53cml0YWJsZV89dCx0aGlzLnRyYW5zZm9ybUludGVybmFsKCl9dHJhbnNmb3JtSW50ZXJuYWwoKXtyZXR1cm4gbmV3IFByb21pc2UoYXN5bmMoZSx0KT0+e2lmKCF0aGlzLnRyYW5zZm9ybWVyc198fHRoaXMudHJhbnNmb3JtZXJzXy5sZW5ndGg9PT0wKXt0aGlzLnJlcG9ydCh7bWVzc2FnZTplZS5lcnJvcnMudHJhbnNmb3JtZXJfbm9uZSx2YXJpYXRpb246IkVycm9yIn0pLHQoIltNZWRpYVByb2Nlc3Nvcl0gTmVlZCB0byBzZXQgdHJhbnNmb3JtZXJzLiIpO3JldHVybn1pZighdGhpcy5yZWFkYWJsZV8pe3RoaXMucmVwb3J0KHt2YXJpYXRpb246IkVycm9yIixtZXNzYWdlOmVlLmVycm9ycy5yZWFkYWJsZV9udWxsfSksdCgiW01lZGlhUHJvY2Vzc29yXSBSZWFkYWJsZSBpcyBudWxsLiIpO3JldHVybn1pZighdGhpcy53cml0YWJsZV8pe3RoaXMucmVwb3J0KHt2YXJpYXRpb246IkVycm9yIixtZXNzYWdlOmVlLmVycm9ycy53cml0YWJsZV9udWxsfSksdCgiW01lZGlhUHJvY2Vzc29yXSBXcml0YWJsZSBpcyBudWxsLiIpO3JldHVybn1sZXQgbj0hMTt0aGlzLnBpcGVsaW5lXyYmKG49ITAsdGhpcy5waXBlbGluZV8uY2xlYXJMaXN0ZW5lcnMoKSx0aGlzLnBpcGVsaW5lXy5kZXN0cm95KCkpLHRoaXMucGlwZWxpbmVfPW5ldyBraSh0aGlzLnRyYW5zZm9ybWVyc18pLHRoaXMucGlwZWxpbmVfLm9uKCJ3YXJuIixvPT57dGhpcy5lbWl0KCJ3YXJuIixvKX0pLHRoaXMucGlwZWxpbmVfLm9uKCJlcnJvciIsbz0+e3RoaXMuZW1pdCgiZXJyb3IiLG8pfSksdGhpcy5waXBlbGluZV8ub24oInBpcGVsaW5lSW5mbyIsbz0+e24mJihvPT09InBpcGVsaW5lX3N0YXJ0ZWQiP289ZXIucGlwZWxpbmVfcmVzdGFydGVkOm89PT0icGlwZWxpbmVfc3RhcnRlZF93aXRoX2Vycm9yIiYmKG89ZXIucGlwZWxpbmVfcmVzdGFydGVkX3dpdGhfZXJyb3IpKSx0aGlzLmVtaXQoInBpcGVsaW5lSW5mbyIsbyl9KSx0aGlzLnRyYWNrRXhwZWN0ZWRSYXRlXyE9LTEmJnRoaXMucGlwZWxpbmVfLnNldFRyYWNrRXhwZWN0ZWRSYXRlKHRoaXMudHJhY2tFeHBlY3RlZFJhdGVfKSx0aGlzLnBpcGVsaW5lXy5zdGFydCh0aGlzLnJlYWRhYmxlXyx0aGlzLndyaXRhYmxlXykudGhlbigoKT0+e2UoKX0pLmNhdGNoKG89Pnt0KG8pfSl9KX1zZXRUcmFuc2Zvcm1lcnMoZSl7cmV0dXJuIHRoaXMucmVwb3J0KHt2YXJpYXRpb246IlVwZGF0ZSIsbWVzc2FnZTplZS51cGRhdGVzLnRyYW5zZm9ybWVyX25ld30pLHRoaXMudHJhbnNmb3JtZXJzXz1lLHRoaXMucmVhZGFibGVfJiZ0aGlzLndyaXRhYmxlXz90aGlzLnRyYW5zZm9ybUludGVybmFsKCk6UHJvbWlzZS5yZXNvbHZlKCl9ZGVzdHJveSgpe3JldHVybiBuZXcgUHJvbWlzZShhc3luYyBlPT57dGhpcy5waXBlbGluZV8mJnRoaXMucGlwZWxpbmVfLmRlc3Ryb3koKSx0aGlzLnJlcG9ydCh7dmFyaWF0aW9uOiJEZWxldGUifSksZSgpfSl9cmVwb3J0KGUpe3RoaXMucmVwb3J0ZXJfLnNlbmQoe3ZlcnNpb246aHQsYWN0aW9uOiJNZWRpYVByb2Nlc3NvciIsLi4uZX0pfX12YXIgQ2k9T2JqZWN0LmRlZmluZVByb3BlcnR5LEJpPShyLGUsdCk9PmUgaW4gcj9DaShyLGUse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOnR9KTpyW2VdPXQsTWk9KHIsZSx0KT0+KEJpKHIsdHlwZW9mIGUhPSJzeW1ib2wiP2UrIiI6ZSx0KSx0KTtjb25zdCBPaT0iaGxnLnRva2JveC5jb20vcHJvZC9sb2dnaW5nL3ZjcF93ZWJydGMiLFVpPSJodHRwczovLyIsTmk9MWU0O2xldCBtdDtjb25zdCBMaT1uZXcgVWludDhBcnJheSgxNik7ZnVuY3Rpb24gemkoKXtpZighbXQmJihtdD10eXBlb2YgY3J5cHRvPCJ1IiYmY3J5cHRvLmdldFJhbmRvbVZhbHVlcyYmY3J5cHRvLmdldFJhbmRvbVZhbHVlcy5iaW5kKGNyeXB0byksIW10KSl0aHJvdyBuZXcgRXJyb3IoImNyeXB0by5nZXRSYW5kb21WYWx1ZXMoKSBub3Qgc3VwcG9ydGVkLiBTZWUgaHR0cHM6Ly9naXRodWIuY29tL3V1aWRqcy91dWlkI2dldHJhbmRvbXZhbHVlcy1ub3Qtc3VwcG9ydGVkIik7cmV0dXJuIG10KExpKX1jb25zdCBCPVtdO2ZvcihsZXQgcj0wO3I8MjU2OysrcilCLnB1c2goKHIrMjU2KS50b1N0cmluZygxNikuc2xpY2UoMSkpO2Z1bmN0aW9uIEdpKHIsZT0wKXtyZXR1cm4oQltyW2UrMF1dK0JbcltlKzFdXStCW3JbZSsyXV0rQltyW2UrM11dKyItIitCW3JbZSs0XV0rQltyW2UrNV1dKyItIitCW3JbZSs2XV0rQltyW2UrN11dKyItIitCW3JbZSs4XV0rQltyW2UrOV1dKyItIitCW3JbZSsxMF1dK0JbcltlKzExXV0rQltyW2UrMTJdXStCW3JbZSsxM11dK0JbcltlKzE0XV0rQltyW2UrMTVdXSkudG9Mb3dlckNhc2UoKX1jb25zdCAkaT10eXBlb2YgY3J5cHRvPCJ1IiYmY3J5cHRvLnJhbmRvbVVVSUQmJmNyeXB0by5yYW5kb21VVUlELmJpbmQoY3J5cHRvKSx1bj17cmFuZG9tVVVJRDokaX07ZnVuY3Rpb24gV2kocixlLHQpe2lmKHVuLnJhbmRvbVVVSUQmJiFlJiYhcilyZXR1cm4gdW4ucmFuZG9tVVVJRCgpO3I9cnx8e307Y29uc3Qgbj1yLnJhbmRvbXx8KHIucm5nfHx6aSkoKTtpZihuWzZdPW5bNl0mMTV8NjQsbls4XT1uWzhdJjYzfDEyOCxlKXt0PXR8fDA7Zm9yKGxldCBvPTA7bzwxNjsrK28pZVt0K29dPW5bb107cmV0dXJuIGV9cmV0dXJuIEdpKG4pfWZ1bmN0aW9uIHRyKHIsZSl7Z2xvYmFsVGhpcy52b25hZ2V8fChnbG9iYWxUaGlzLnZvbmFnZT17fSksZ2xvYmFsVGhpcy52b25hZ2Uud29ya2VyaXplcnx8KGdsb2JhbFRoaXMudm9uYWdlLndvcmtlcml6ZXI9e30pO2xldCB0PWdsb2JhbFRoaXMudm9uYWdlLndvcmtlcml6ZXI7cmV0dXJuIHRbcl18fCh0W3JdPWUpLHRbcl19Y29uc3Qgb2U9dHIoImdsb2JhbHMiLHt9KTt2YXIgZ2U9KHI9PihyLklOSVQ9IklOSVQiLHIuRk9SV0FSRD0iRk9SV0FSRCIsci5URVJNSU5BVEU9IlRFUk1JTkFURSIsci5HTE9CQUxTX1NZTkM9IkdMT0JBTFNfU1lOQyIscikpKGdlfHx7fSk7ZnVuY3Rpb24gY24ocil7cmV0dXJuW0ltYWdlQml0bWFwLFJlYWRhYmxlU3RyZWFtLFdyaXRhYmxlU3RyZWFtXS5zb21lKGU9PnIgaW5zdGFuY2VvZiBlKX1sZXQgVmk9MDtmdW5jdGlvbiBIaShyLGUsdCxuLG8pe2NvbnN0IGk9VmkrKztyZXR1cm4gci5wb3N0TWVzc2FnZSh7aWQ6aSx0eXBlOmUsZnVuY3Rpb25OYW1lOnQsYXJnczpufSxuLmZpbHRlcihzPT5jbihzKSkpLG5ldyBQcm9taXNlKHM9PntvPT1udWxsfHxvLnNldChpLHMpfSl9ZnVuY3Rpb24gJGUocixlKXtjb25zdHtpZDp0LHR5cGU6bn09cixvPUFycmF5LmlzQXJyYXkoZSk/ZTpbZV07cG9zdE1lc3NhZ2Uoe2lkOnQsdHlwZTpuLHJlc3VsdDplfSxvLmZpbHRlcihpPT5jbihpKSkpfWNvbnN0IGZuPXRyKCJ3b3JrZXJpemVkIix7fSk7ZnVuY3Rpb24gbG4oKXtyZXR1cm4gdHlwZW9mIFdvcmtlckdsb2JhbFNjb3BlPCJ1IiYmc2VsZiBpbnN0YW5jZW9mIFdvcmtlckdsb2JhbFNjb3BlfWFzeW5jIGZ1bmN0aW9uIGppKCl7aWYobG4oKSkkZSh7dHlwZTpnZS5HTE9CQUxTX1NZTkN9LG9lKTtlbHNle2NvbnN0IHI9W107Zm9yKGNvbnN0IGUgaW4gZm4pe2NvbnN0e3dvcmtlcjp0LHJlc29sdmVyczpufT1mbltlXS53b3JrZXJDb250ZXh0O3QmJnIucHVzaChIaSh0LGdlLkdMT0JBTFNfU1lOQywiIixbb2VdLG4pKX1hd2FpdCBQcm9taXNlLmFsbChyKX19ZnVuY3Rpb24gcHQocixlKXtpZihBcnJheS5pc0FycmF5KGUpKWUuc3BsaWNlKDAsZS5sZW5ndGgpO2Vsc2UgaWYodHlwZW9mIGU9PSJvYmplY3QiKWZvcihjb25zdCB0IGluIGUpZGVsZXRlIGVbdF07Zm9yKGNvbnN0IHQgaW4gcilBcnJheS5pc0FycmF5KHJbdF0pPyhlW3RdPVtdLHB0KHJbdF0sZVt0XSkpOnR5cGVvZiByW3RdPT0ib2JqZWN0Ij8oZVt0XT17fSxwdChyW3RdLGVbdF0pKTplW3RdPXJbdF19YXN5bmMgZnVuY3Rpb24gWWkocixlKXtjb25zdHtmdW5jdGlvbk5hbWU6dCxhcmdzOm59PXI7aWYoIWUuaW5zdGFuY2UpdGhyb3ciaW5zdGFuY2Ugbm90IGluaXRpYWxpemVkIjtpZighdCl0aHJvdyJtaXNzaW5nIGZ1bmN0aW9uIG5hbWUgdG8gY2FsbCI7aWYoIWUuaW5zdGFuY2VbdF0pdGhyb3dgdW5kZWZpbmVkIGZ1bmN0aW9uIFske3R9XSBpbiBjbGFzcyAke2UuaW5zdGFuY2UuY29uc3RydWN0b3Iud29ya2VySWR9YDskZShyLGF3YWl0IGUuaW5zdGFuY2VbdF0oLi4ubiE9bnVsbD9uOltdKSl9Y29uc3QgWGk9dHIoInJlZ2lzdGVyZWRXb3JrZXJzIix7fSk7ZnVuY3Rpb24gUWkocixlKXtpZighci5hcmdzKXRocm93Ik1pc3NpbmcgY2xhc3NOYW1lIHdoaWxlIGluaXRpYWxpemluZyB3b3JrZXIiO2NvbnN0W3Qsbl09ci5hcmdzLG89WGlbdF07aWYobyllLmluc3RhbmNlPW5ldyBvKHIuYXJncy5zbGljZSgxKSk7ZWxzZSB0aHJvd2B1bmtub3duIHdvcmtlciBjbGFzcyAke3R9YDtwdChuLG9lKSwkZShyLHR5cGVvZiBlLmluc3RhbmNlIT09dm9pZCAwKX1hc3luYyBmdW5jdGlvbiBxaShyLGUpe2NvbnN0e2FyZ3M6dH09cjtpZighZS5pbnN0YW5jZSl0aHJvdyJpbnN0YW5jZSBub3QgaW5pdGlhbGl6ZWQiO2xldCBuO2UuaW5zdGFuY2UudGVybWluYXRlJiYobj1hd2FpdCBlLmluc3RhbmNlLnRlcm1pbmF0ZSguLi50IT1udWxsP3Q6W10pKSwkZShyLG4pfWZ1bmN0aW9uIEtpKHIpe2lmKCFyLmFyZ3MpdGhyb3ciTWlzc2luZyBnbG9iYWxzIHdoaWxlIHN5bmNpbmciO3B0KHIuYXJnc1swXSxvZSksJGUocix7fSl9ZnVuY3Rpb24gSmkoKXtjb25zdCByPXt9O29ubWVzc2FnZT1hc3luYyBlPT57Y29uc3QgdD1lLmRhdGE7c3dpdGNoKHQudHlwZSl7Y2FzZSBnZS5JTklUOlFpKHQscik7YnJlYWs7Y2FzZSBnZS5GT1JXQVJEOllpKHQscik7YnJlYWs7Y2FzZSBnZS5URVJNSU5BVEU6cWkodCxyKTticmVhaztjYXNlIGdlLkdMT0JBTFNfU1lOQzpLaSh0KTticmVha319fWxuKCkmJkppKCk7ZnVuY3Rpb24gWmkocixlKXtyZXR1cm4gb2Vbcl18fChvZVtyXT1lKSxbKCk9Pm9lW3JdLGFzeW5jIHQ9PntvZVtyXT10LGF3YWl0IGppKCl9XX1mdW5jdGlvbiBlcyhyLGUpe3JldHVybiBaaShyLGUpfWNvbnN0W3RzLFZsXT1lcygibWV0YWRhdGEiKTtmdW5jdGlvbiBycigpe3JldHVybiB0cygpfWNsYXNzIHJze2NvbnN0cnVjdG9yKGUpe01pKHRoaXMsInV1aWQiLFdpKCkpLHRoaXMuY29uZmlnPWV9YXN5bmMgc2VuZChlKXt2YXIgdCxuLG87Y29uc3R7YXBwSWQ6aSxzb3VyY2VUeXBlOnN9PSh0PXJyKCkpIT1udWxsP3Q6e307aWYoIWl8fCFzKXJldHVybiJtZXRhZGF0YSBtaXNzaW5nIjtjb25zdCBhPW5ldyBBYm9ydENvbnRyb2xsZXIsdT1zZXRUaW1lb3V0KCgpPT5hLmFib3J0KCksTmkpO3JldHVybiBhd2FpdCgobz0obj10aGlzLmNvbmZpZyk9PW51bGw/dm9pZCAwOm4uZmV0Y2gpIT1udWxsP286ZmV0Y2gpKHRoaXMuZ2V0VXJsKCkse21ldGhvZDoiUE9TVCIsaGVhZGVyczp0aGlzLmdldEhlYWRlcnMoKSxib2R5OkpTT04uc3RyaW5naWZ5KHRoaXMuYnVpbGRSZXBvcnQoZSkpLHNpZ25hbDphLnNpZ25hbH0pLGNsZWFyVGltZW91dCh1KSwic3VjY2VzcyJ9Z2V0VXJsKCl7dmFyIGU7bGV0IHQ9KGU9cnIoKS5wcm94eVVybCkhPW51bGw/ZTpVaTtyZXR1cm4gdCs9KHQuYXQoLTEpPT09Ii8iPyIiOiIvIikrT2ksdH1nZXRIZWFkZXJzKCl7cmV0dXJueyJDb250ZW50LVR5cGUiOiJhcHBsaWNhdGlvbi9qc29uIn19YnVpbGRSZXBvcnQoZSl7Y29uc3QgdD1ycigpO3JldHVybntndWlkOnRoaXMudXVpZCwuLi5lLGFwcGxpY2F0aW9uSWQ6dC5hcHBJZCx0aW1lc3RhbXA6RGF0ZS5ub3coKSxwcm94eVVybDp0LnByb3h5VXJsLHNvdXJjZTp0LnNvdXJjZVR5cGV9fX1jb25zdCBucz0iNS4xLjIiO3ZhciBndD0ocj0+KHIuTG93PSJMb3ciLHIuSGlnaD0iSGlnaCIscikpKGd0fHx7fSksbnI9KHI9PihyLkZBU1Q9IkZBU1QiLHIuUFJFQ0lTRT0iUFJFQ0lTRSIscikpKG5yfHx7fSkseXQ9KHI9PihyLkNBTlZBUz0iQ0FOVkFTIixyLldFQkdMPSJXRUJHTCIscikpKHl0fHx7fSksb3M9ZnVuY3Rpb24oKXt2YXIgcj10eXBlb2YgZG9jdW1lbnQ8InUiJiZkb2N1bWVudC5jdXJyZW50U2NyaXB0P2RvY3VtZW50LmN1cnJlbnRTY3JpcHQuc3JjOnZvaWQgMDtyZXR1cm4gZnVuY3Rpb24oZSl7ZT1lfHx7fTt2YXIgdD10eXBlb2YgZTwidSI/ZTp7fSxuLG87dC5yZWFkeT1uZXcgUHJvbWlzZShmdW5jdGlvbihjLG0pe249YyxvPW19KTt2YXIgaT17fSxzO2ZvcihzIGluIHQpdC5oYXNPd25Qcm9wZXJ0eShzKSYmKGlbc109dFtzXSk7dmFyIGE9Ii4vdGhpcy5wcm9ncmFtIix1PWZ1bmN0aW9uKGMsbSl7dGhyb3cgbX0sZj0hMCxkPSIiO2Z1bmN0aW9uIHAoYyl7cmV0dXJuIHQubG9jYXRlRmlsZT90LmxvY2F0ZUZpbGUoYyxkKTpkK2N9dmFyIGc7dHlwZW9mIGRvY3VtZW50PCJ1IiYmZG9jdW1lbnQuY3VycmVudFNjcmlwdCYmKGQ9ZG9jdW1lbnQuY3VycmVudFNjcmlwdC5zcmMpLHImJihkPXIpLGQuaW5kZXhPZigiYmxvYjoiKSE9PTA/ZD1kLnN1YnN0cigwLGQucmVwbGFjZSgvWz8jXS4qLywiIikubGFzdEluZGV4T2YoIi8iKSsxKTpkPSIiO3ZhciBiPXQucHJpbnR8fGNvbnNvbGUubG9nLmJpbmQoY29uc29sZSksaD10LnByaW50RXJyfHxjb25zb2xlLndhcm4uYmluZChjb25zb2xlKTtmb3IocyBpbiBpKWkuaGFzT3duUHJvcGVydHkocykmJih0W3NdPWlbc10pO2k9bnVsbCx0LmFyZ3VtZW50cyYmdC5hcmd1bWVudHMsdC50aGlzUHJvZ3JhbSYmKGE9dC50aGlzUHJvZ3JhbSksdC5xdWl0JiYodT10LnF1aXQpO3ZhciB4O3Qud2FzbUJpbmFyeSYmKHg9dC53YXNtQmluYXJ5KTt2YXIgRT10Lm5vRXhpdFJ1bnRpbWV8fCEwO3R5cGVvZiBXZWJBc3NlbWJseSE9Im9iamVjdCImJmRlKCJubyBuYXRpdmUgd2FzbSBzdXBwb3J0IGRldGVjdGVkIik7dmFyIHYsRj0hMSxrPXR5cGVvZiBUZXh0RGVjb2RlcjwidSI/bmV3IFRleHREZWNvZGVyKCJ1dGY4Iik6dm9pZCAwO2Z1bmN0aW9uIEcoYyxtLHkpe2Zvcih2YXIgVD1tK3ksRD1tO2NbRF0mJiEoRD49VCk7KSsrRDtpZihELW0+MTYmJmMuc3ViYXJyYXkmJmspcmV0dXJuIGsuZGVjb2RlKGMuc3ViYXJyYXkobSxEKSk7Zm9yKHZhciBNPSIiO208RDspe3ZhciBBPWNbbSsrXTtpZighKEEmMTI4KSl7TSs9U3RyaW5nLmZyb21DaGFyQ29kZShBKTtjb250aW51ZX12YXIgVT1jW20rK10mNjM7aWYoKEEmMjI0KT09MTkyKXtNKz1TdHJpbmcuZnJvbUNoYXJDb2RlKChBJjMxKTw8NnxVKTtjb250aW51ZX12YXIgSz1jW20rK10mNjM7aWYoKEEmMjQwKT09MjI0P0E9KEEmMTUpPDwxMnxVPDw2fEs6QT0oQSY3KTw8MTh8VTw8MTJ8Szw8NnxjW20rK10mNjMsQTw2NTUzNilNKz1TdHJpbmcuZnJvbUNoYXJDb2RlKEEpO2Vsc2V7dmFyIEdvPUEtNjU1MzY7TSs9U3RyaW5nLmZyb21DaGFyQ29kZSg1NTI5NnxHbz4+MTAsNTYzMjB8R28mMTAyMyl9fXJldHVybiBNfWZ1bmN0aW9uIHooYyxtKXtyZXR1cm4gYz9HKGxlLGMsbSk6IiJ9ZnVuY3Rpb24gSChjLG0seSl7Zm9yKHZhciBUPTA7VDxjLmxlbmd0aDsrK1QpVGVbbSsrPj4wXT1jLmNoYXJDb2RlQXQoVCk7eXx8KFRlW20+PjBdPTApfWZ1bmN0aW9uICQoYyxtKXtyZXR1cm4gYyVtPjAmJihjKz1tLWMlbSksY312YXIgS2UsVGUsbGUsVztmdW5jdGlvbiBCbyhjKXtLZT1jLHQuSEVBUDg9VGU9bmV3IEludDhBcnJheShjKSx0LkhFQVAxNj1uZXcgSW50MTZBcnJheShjKSx0LkhFQVAzMj1XPW5ldyBJbnQzMkFycmF5KGMpLHQuSEVBUFU4PWxlPW5ldyBVaW50OEFycmF5KGMpLHQuSEVBUFUxNj1uZXcgVWludDE2QXJyYXkoYyksdC5IRUFQVTMyPW5ldyBVaW50MzJBcnJheShjKSx0LkhFQVBGMzI9bmV3IEZsb2F0MzJBcnJheShjKSx0LkhFQVBGNjQ9bmV3IEZsb2F0NjRBcnJheShjKX10LklOSVRJQUxfTUVNT1JZO3ZhciBXcixNbz1bXSxPbz1bXSxVbz1bXSxpbD0wO2Z1bmN0aW9uIHNsKCl7cmV0dXJuIEV8fGlsPjB9ZnVuY3Rpb24gYWwoKXtpZih0LnByZVJ1bilmb3IodHlwZW9mIHQucHJlUnVuPT0iZnVuY3Rpb24iJiYodC5wcmVSdW49W3QucHJlUnVuXSk7dC5wcmVSdW4ubGVuZ3RoOylmbCh0LnByZVJ1bi5zaGlmdCgpKTtWcihNbyl9ZnVuY3Rpb24gdWwoKXtWcihPbyl9ZnVuY3Rpb24gY2woKXtpZih0LnBvc3RSdW4pZm9yKHR5cGVvZiB0LnBvc3RSdW49PSJmdW5jdGlvbiImJih0LnBvc3RSdW49W3QucG9zdFJ1bl0pO3QucG9zdFJ1bi5sZW5ndGg7KWRsKHQucG9zdFJ1bi5zaGlmdCgpKTtWcihVbyl9ZnVuY3Rpb24gZmwoYyl7TW8udW5zaGlmdChjKX1mdW5jdGlvbiBsbChjKXtPby51bnNoaWZ0KGMpfWZ1bmN0aW9uIGRsKGMpe1VvLnVuc2hpZnQoYyl9dmFyIHdlPTAsSmU9bnVsbDtmdW5jdGlvbiBobChjKXt3ZSsrLHQubW9uaXRvclJ1bkRlcGVuZGVuY2llcyYmdC5tb25pdG9yUnVuRGVwZW5kZW5jaWVzKHdlKX1mdW5jdGlvbiBtbChjKXtpZih3ZS0tLHQubW9uaXRvclJ1bkRlcGVuZGVuY2llcyYmdC5tb25pdG9yUnVuRGVwZW5kZW5jaWVzKHdlKSx3ZT09MCYmSmUpe3ZhciBtPUplO0plPW51bGwsbSgpfX10LnByZWxvYWRlZEltYWdlcz17fSx0LnByZWxvYWRlZEF1ZGlvcz17fTtmdW5jdGlvbiBkZShjKXt0Lm9uQWJvcnQmJnQub25BYm9ydChjKSxjPSJBYm9ydGVkKCIrYysiKSIsaChjKSxGPSEwLGMrPSIuIEJ1aWxkIHdpdGggLXMgQVNTRVJUSU9OUz0xIGZvciBtb3JlIGluZm8uIjt2YXIgbT1uZXcgV2ViQXNzZW1ibHkuUnVudGltZUVycm9yKGMpO3Rocm93IG8obSksbX12YXIgcGw9ImRhdGE6YXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtO2Jhc2U2NCwiO2Z1bmN0aW9uIE5vKGMpe3JldHVybiBjLnN0YXJ0c1dpdGgocGwpfXZhciBYO1g9InRmbGl0ZS1zaW1kLndhc20iLE5vKFgpfHwoWD1wKFgpKTtmdW5jdGlvbiBMbyhjKXt0cnl7aWYoYz09WCYmeClyZXR1cm4gbmV3IFVpbnQ4QXJyYXkoeCk7aWYoIWcpdGhyb3ciYm90aCBhc3luYyBhbmQgc3luYyBmZXRjaGluZyBvZiB0aGUgd2FzbSBmYWlsZWQifWNhdGNoKG0pe2RlKG0pfX1mdW5jdGlvbiBnbCgpe3JldHVybiF4JiZmJiZ0eXBlb2YgZmV0Y2g9PSJmdW5jdGlvbiI/ZmV0Y2goWCx7Y3JlZGVudGlhbHM6InNhbWUtb3JpZ2luIn0pLnRoZW4oZnVuY3Rpb24oYyl7aWYoIWMub2spdGhyb3ciZmFpbGVkIHRvIGxvYWQgd2FzbSBiaW5hcnkgZmlsZSBhdCAnIitYKyInIjtyZXR1cm4gYy5hcnJheUJ1ZmZlcigpfSkuY2F0Y2goZnVuY3Rpb24oKXtyZXR1cm4gTG8oWCl9KTpQcm9taXNlLnJlc29sdmUoKS50aGVuKGZ1bmN0aW9uKCl7cmV0dXJuIExvKFgpfSl9ZnVuY3Rpb24geWwoKXt2YXIgYz17YTpObH07ZnVuY3Rpb24gbShBLFUpe3ZhciBLPUEuZXhwb3J0czt0LmFzbT1LLHY9dC5hc20ucSxCbyh2LmJ1ZmZlciksV3I9dC5hc20uRSxsbCh0LmFzbS5yKSxtbCgpfWhsKCk7ZnVuY3Rpb24geShBKXttKEEuaW5zdGFuY2UpfWZ1bmN0aW9uIFQoQSl7cmV0dXJuIGdsKCkudGhlbihmdW5jdGlvbihVKXtyZXR1cm4gV2ViQXNzZW1ibHkuaW5zdGFudGlhdGUoVSxjKX0pLnRoZW4oZnVuY3Rpb24oVSl7cmV0dXJuIFV9KS50aGVuKEEsZnVuY3Rpb24oVSl7aCgiZmFpbGVkIHRvIGFzeW5jaHJvbm91c2x5IHByZXBhcmUgd2FzbTogIitVKSxkZShVKX0pfWZ1bmN0aW9uIEQoKXtyZXR1cm4heCYmdHlwZW9mIFdlYkFzc2VtYmx5Lmluc3RhbnRpYXRlU3RyZWFtaW5nPT0iZnVuY3Rpb24iJiYhTm8oWCkmJnR5cGVvZiBmZXRjaD09ImZ1bmN0aW9uIj9mZXRjaChYLHtjcmVkZW50aWFsczoic2FtZS1vcmlnaW4ifSkudGhlbihmdW5jdGlvbihBKXt2YXIgVT1XZWJBc3NlbWJseS5pbnN0YW50aWF0ZVN0cmVhbWluZyhBLGMpO3JldHVybiBVLnRoZW4oeSxmdW5jdGlvbihLKXtyZXR1cm4gaCgid2FzbSBzdHJlYW1pbmcgY29tcGlsZSBmYWlsZWQ6ICIrSyksaCgiZmFsbGluZyBiYWNrIHRvIEFycmF5QnVmZmVyIGluc3RhbnRpYXRpb24iKSxUKHkpfSl9KTpUKHkpfWlmKHQuaW5zdGFudGlhdGVXYXNtKXRyeXt2YXIgTT10Lmluc3RhbnRpYXRlV2FzbShjLG0pO3JldHVybiBNfWNhdGNoKEEpe3JldHVybiBoKCJNb2R1bGUuaW5zdGFudGlhdGVXYXNtIGNhbGxiYWNrIGZhaWxlZCB3aXRoIGVycm9yOiAiK0EpLCExfXJldHVybiBEKCkuY2F0Y2gobykse319ZnVuY3Rpb24gVnIoYyl7Zm9yKDtjLmxlbmd0aD4wOyl7dmFyIG09Yy5zaGlmdCgpO2lmKHR5cGVvZiBtPT0iZnVuY3Rpb24iKXttKHQpO2NvbnRpbnVlfXZhciB5PW0uZnVuYzt0eXBlb2YgeT09Im51bWJlciI/bS5hcmc9PT12b2lkIDA/V3IuZ2V0KHkpKCk6V3IuZ2V0KHkpKG0uYXJnKTp5KG0uYXJnPT09dm9pZCAwP251bGw6bS5hcmcpfX1mdW5jdGlvbiBibChjLG0seSxUKXtkZSgiQXNzZXJ0aW9uIGZhaWxlZDogIit6KGMpKyIsIGF0OiAiK1ttP3oobSk6InVua25vd24gZmlsZW5hbWUiLHksVD96KFQpOiJ1bmtub3duIGZ1bmN0aW9uIl0pfWZ1bmN0aW9uIHhsKGMsbSl7ZGUoIlRvIHVzZSBkbG9wZW4sIHlvdSBuZWVkIHRvIHVzZSBFbXNjcmlwdGVuJ3MgbGlua2luZyBzdXBwb3J0LCBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2Vtc2NyaXB0ZW4tY29yZS9lbXNjcmlwdGVuL3dpa2kvTGlua2luZyIpfWZ1bmN0aW9uIF9sKGMsbSl7ZGUoIlRvIHVzZSBkbG9wZW4sIHlvdSBuZWVkIHRvIHVzZSBFbXNjcmlwdGVuJ3MgbGlua2luZyBzdXBwb3J0LCBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2Vtc2NyaXB0ZW4tY29yZS9lbXNjcmlwdGVuL3dpa2kvTGlua2luZyIpfWZ1bmN0aW9uIHZsKCl7ZGUoIiIpfXZhciBHdDtHdD1mdW5jdGlvbigpe3JldHVybiBwZXJmb3JtYW5jZS5ub3coKX07dmFyIEVsPSEwO2Z1bmN0aW9uIFRsKGMpe3JldHVybiBXW3pvKCk+PjJdPWMsY31mdW5jdGlvbiB3bChjLG0pe3ZhciB5O2lmKGM9PT0wKXk9RGF0ZS5ub3coKTtlbHNlIGlmKChjPT09MXx8Yz09PTQpJiZFbCl5PUd0KCk7ZWxzZSByZXR1cm4gVGwoMjgpLC0xO3JldHVybiBXW20+PjJdPXkvMWUzfDAsV1ttKzQ+PjJdPXklMWUzKjFlMyoxZTN8MCwwfWZ1bmN0aW9uIEFsKCl7cmV0dXJuIDIxNDc0ODM2NDh9ZnVuY3Rpb24gSWwoYyxtLHkpe2xlLmNvcHlXaXRoaW4oYyxtLG0reSl9ZnVuY3Rpb24gU2woYyl7dHJ5e3JldHVybiB2Lmdyb3coYy1LZS5ieXRlTGVuZ3RoKzY1NTM1Pj4+MTYpLEJvKHYuYnVmZmVyKSwxfWNhdGNoe319ZnVuY3Rpb24gUmwoYyl7dmFyIG09bGUubGVuZ3RoO2M9Yz4+PjA7dmFyIHk9MjE0NzQ4MzY0ODtpZihjPnkpcmV0dXJuITE7Zm9yKHZhciBUPTE7VDw9NDtUKj0yKXt2YXIgRD1tKigxKy4yL1QpO0Q9TWF0aC5taW4oRCxjKzEwMDY2MzI5Nik7dmFyIE09TWF0aC5taW4oeSwkKE1hdGgubWF4KGMsRCksNjU1MzYpKSxBPVNsKE0pO2lmKEEpcmV0dXJuITB9cmV0dXJuITF9ZnVuY3Rpb24gRmwoYyl7Zm9yKHZhciBtPUd0KCk7R3QoKS1tPGM7KTt9dmFyIEhyPXt9O2Z1bmN0aW9uIFBsKCl7cmV0dXJuIGF8fCIuL3RoaXMucHJvZ3JhbSJ9ZnVuY3Rpb24gWmUoKXtpZighWmUuc3RyaW5ncyl7dmFyIGM9KHR5cGVvZiBuYXZpZ2F0b3I9PSJvYmplY3QiJiZuYXZpZ2F0b3IubGFuZ3VhZ2VzJiZuYXZpZ2F0b3IubGFuZ3VhZ2VzWzBdfHwiQyIpLnJlcGxhY2UoIi0iLCJfIikrIi5VVEYtOCIsbT17VVNFUjoid2ViX3VzZXIiLExPR05BTUU6IndlYl91c2VyIixQQVRIOiIvIixQV0Q6Ii8iLEhPTUU6Ii9ob21lL3dlYl91c2VyIixMQU5HOmMsXzpQbCgpfTtmb3IodmFyIHkgaW4gSHIpSHJbeV09PT12b2lkIDA/ZGVsZXRlIG1beV06bVt5XT1Iclt5XTt2YXIgVD1bXTtmb3IodmFyIHkgaW4gbSlULnB1c2goeSsiPSIrbVt5XSk7WmUuc3RyaW5ncz1UfXJldHVybiBaZS5zdHJpbmdzfXZhciAkdD17bWFwcGluZ3M6e30sYnVmZmVyczpbbnVsbCxbXSxbXV0scHJpbnRDaGFyOmZ1bmN0aW9uKGMsbSl7dmFyIHk9JHQuYnVmZmVyc1tjXTttPT09MHx8bT09PTEwPygoYz09PTE/YjpoKShHKHksMCkpLHkubGVuZ3RoPTApOnkucHVzaChtKX0sdmFyYXJnczp2b2lkIDAsZ2V0OmZ1bmN0aW9uKCl7JHQudmFyYXJncys9NDt2YXIgYz1XWyR0LnZhcmFyZ3MtND4+Ml07cmV0dXJuIGN9LGdldFN0cjpmdW5jdGlvbihjKXt2YXIgbT16KGMpO3JldHVybiBtfSxnZXQ2NDpmdW5jdGlvbihjLG0pe3JldHVybiBjfX07ZnVuY3Rpb24ga2woYyxtKXt2YXIgeT0wO3JldHVybiBaZSgpLmZvckVhY2goZnVuY3Rpb24oVCxEKXt2YXIgTT1tK3k7V1tjK0QqND4+Ml09TSxIKFQsTSkseSs9VC5sZW5ndGgrMX0pLDB9ZnVuY3Rpb24gRGwoYyxtKXt2YXIgeT1aZSgpO1dbYz4+Ml09eS5sZW5ndGg7dmFyIFQ9MDtyZXR1cm4geS5mb3JFYWNoKGZ1bmN0aW9uKEQpe1QrPUQubGVuZ3RoKzF9KSxXW20+PjJdPVQsMH1mdW5jdGlvbiBDbChjKXt6bChjKX1mdW5jdGlvbiBCbChjKXtyZXR1cm4gMH1mdW5jdGlvbiBNbChjLG0seSxULEQpe31mdW5jdGlvbiBPbChjLG0seSxUKXtmb3IodmFyIEQ9MCxNPTA7TTx5O00rKyl7Zm9yKHZhciBBPVdbbStNKjg+PjJdLFU9V1ttKyhNKjgrNCk+PjJdLEs9MDtLPFU7SysrKSR0LnByaW50Q2hhcihjLGxlW0ErS10pO0QrPVV9cmV0dXJuIFdbVD4+Ml09RCwwfWZ1bmN0aW9uIFVsKCl7aWYodHlwZW9mIGNyeXB0bz09Im9iamVjdCImJnR5cGVvZiBjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzPT0iZnVuY3Rpb24iKXt2YXIgYz1uZXcgVWludDhBcnJheSgxKTtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gY3J5cHRvLmdldFJhbmRvbVZhbHVlcyhjKSxjWzBdfX1lbHNlIHJldHVybiBmdW5jdGlvbigpe2RlKCJyYW5kb21EZXZpY2UiKX19ZnVuY3Rpb24gV3QoYyxtKXtXdC5yYW5kb21EZXZpY2V8fChXdC5yYW5kb21EZXZpY2U9VWwoKSk7Zm9yKHZhciB5PTA7eTxtO3krKylUZVtjK3k+PjBdPVd0LnJhbmRvbURldmljZSgpO3JldHVybiAwfXZhciBObD17YTpibCxlOnhsLGQ6X2wsYjp2bCxuOndsLGg6QWwsbDpJbCxtOlJsLHA6RmwsZjprbCxnOkRsLGo6Q2wsaTpCbCxrOk1sLGM6T2wsbzpXdH07eWwoKSx0Ll9fX3dhc21fY2FsbF9jdG9ycz1mdW5jdGlvbigpe3JldHVybih0Ll9fX3dhc21fY2FsbF9jdG9ycz10LmFzbS5yKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LHQuX2dldE1vZGVsQnVmZmVyTWVtb3J5T2Zmc2V0PWZ1bmN0aW9uKCl7cmV0dXJuKHQuX2dldE1vZGVsQnVmZmVyTWVtb3J5T2Zmc2V0PXQuYXNtLnMpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sdC5fZ2V0SW5wdXRNZW1vcnlPZmZzZXQ9ZnVuY3Rpb24oKXtyZXR1cm4odC5fZ2V0SW5wdXRNZW1vcnlPZmZzZXQ9dC5hc20udCkuYXBwbHkobnVsbCxhcmd1bWVudHMpfSx0Ll9nZXRJbnB1dEhlaWdodD1mdW5jdGlvbigpe3JldHVybih0Ll9nZXRJbnB1dEhlaWdodD10LmFzbS51KS5hcHBseShudWxsLGFyZ3VtZW50cyl9LHQuX2dldElucHV0V2lkdGg9ZnVuY3Rpb24oKXtyZXR1cm4odC5fZ2V0SW5wdXRXaWR0aD10LmFzbS52KS5hcHBseShudWxsLGFyZ3VtZW50cyl9LHQuX2dldElucHV0Q2hhbm5lbENvdW50PWZ1bmN0aW9uKCl7cmV0dXJuKHQuX2dldElucHV0Q2hhbm5lbENvdW50PXQuYXNtLncpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sdC5fZ2V0T3V0cHV0TWVtb3J5T2Zmc2V0PWZ1bmN0aW9uKCl7cmV0dXJuKHQuX2dldE91dHB1dE1lbW9yeU9mZnNldD10LmFzbS54KS5hcHBseShudWxsLGFyZ3VtZW50cyl9LHQuX2dldE91dHB1dEhlaWdodD1mdW5jdGlvbigpe3JldHVybih0Ll9nZXRPdXRwdXRIZWlnaHQ9dC5hc20ueSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfSx0Ll9nZXRPdXRwdXRXaWR0aD1mdW5jdGlvbigpe3JldHVybih0Ll9nZXRPdXRwdXRXaWR0aD10LmFzbS56KS5hcHBseShudWxsLGFyZ3VtZW50cyl9LHQuX2dldE91dHB1dENoYW5uZWxDb3VudD1mdW5jdGlvbigpe3JldHVybih0Ll9nZXRPdXRwdXRDaGFubmVsQ291bnQ9dC5hc20uQSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfSx0Ll9sb2FkTW9kZWw9ZnVuY3Rpb24oKXtyZXR1cm4odC5fbG9hZE1vZGVsPXQuYXNtLkIpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sdC5fcnVuSW5mZXJlbmNlPWZ1bmN0aW9uKCl7cmV0dXJuKHQuX3J1bkluZmVyZW5jZT10LmFzbS5DKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LHQuX2lzR1BVRW5hYmxlZD1mdW5jdGlvbigpe3JldHVybih0Ll9pc0dQVUVuYWJsZWQ9dC5hc20uRCkuYXBwbHkobnVsbCxhcmd1bWVudHMpfTt2YXIgem89dC5fX19lcnJub19sb2NhdGlvbj1mdW5jdGlvbigpe3JldHVybih6bz10Ll9fX2Vycm5vX2xvY2F0aW9uPXQuYXNtLkYpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sVnQ7ZnVuY3Rpb24gTGwoYyl7dGhpcy5uYW1lPSJFeGl0U3RhdHVzIix0aGlzLm1lc3NhZ2U9IlByb2dyYW0gdGVybWluYXRlZCB3aXRoIGV4aXQoIitjKyIpIix0aGlzLnN0YXR1cz1jfUplPWZ1bmN0aW9uIGMoKXtWdHx8anIoKSxWdHx8KEplPWMpfTtmdW5jdGlvbiBqcihjKXtpZih3ZT4wfHwoYWwoKSx3ZT4wKSlyZXR1cm47ZnVuY3Rpb24gbSgpe1Z0fHwoVnQ9ITAsdC5jYWxsZWRSdW49ITAsIUYmJih1bCgpLG4odCksdC5vblJ1bnRpbWVJbml0aWFsaXplZCYmdC5vblJ1bnRpbWVJbml0aWFsaXplZCgpLGNsKCkpKX10LnNldFN0YXR1cz8odC5zZXRTdGF0dXMoIlJ1bm5pbmcuLi4iKSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7c2V0VGltZW91dChmdW5jdGlvbigpe3Quc2V0U3RhdHVzKCIiKX0sMSksbSgpfSwxKSk6bSgpfXQucnVuPWpyO2Z1bmN0aW9uIHpsKGMsbSl7R2woYyl9ZnVuY3Rpb24gR2woYyl7c2woKXx8KHQub25FeGl0JiZ0Lm9uRXhpdChjKSxGPSEwKSx1KGMsbmV3IExsKGMpKX1pZih0LnByZUluaXQpZm9yKHR5cGVvZiB0LnByZUluaXQ9PSJmdW5jdGlvbiImJih0LnByZUluaXQ9W3QucHJlSW5pdF0pO3QucHJlSW5pdC5sZW5ndGg+MDspdC5wcmVJbml0LnBvcCgpKCk7cmV0dXJuIGpyKCksZS5yZWFkeX19KCk7Y2xhc3MgaXN7Y29uc3RydWN0b3IoKXtsKHRoaXMsInNlbGVjdGVkVEZMaXRlIik7bCh0aGlzLCJpc1NJTURTdXBwb3J0ZWQiLCExKTtsKHRoaXMsImlzVGhyZWFkc1N1cHBvcnRlZCIsITEpO2wodGhpcywiaW5wdXRXaWR0aCIsMCk7bCh0aGlzLCJpbnB1dEhlaWdodCIsMCk7bCh0aGlzLCJpbnB1dENoYW5uZWxDb3VudCIsMCk7bCh0aGlzLCJpbnB1dE1lbW9yeU9mZnNldCIsMCk7bCh0aGlzLCJvdXRwdXRXaWR0aCIsMCk7bCh0aGlzLCJvdXRwdXRIZWlnaHQiLDApO2wodGhpcywib3V0cHV0Q2hhbm5lbENvdW50IiwwKTtsKHRoaXMsIm91dHB1dE1lbW9yeU9mZnNldCIsMCl9fWNvbnN0IHNzPSJodHRwczovL2Qzb3Bxam1xenhmMDU3LmNsb3VkZnJvbnQubmV0L3ZvbmFnZS10ZW5zb3JmbG93LXdhc20vdGZsaXRlLXNpbWQtd2FzbS8xLjEuMy8iLGFzPSJodHRwczovL2Qzb3Bxam1xenhmMDU3LmNsb3VkZnJvbnQubmV0L21sL3NlbGZpZV9zZWdtZW50YXRpb24vNC4wLjAvIjthc3luYyBmdW5jdGlvbiB1cyhyPXNzLGU9YXMpe2xldCB0PW5ldyBpczt2YXIgbj1uZXcgUHJvbWlzZShmdW5jdGlvbihvLGkpe2FzeW5jIGZ1bmN0aW9uIHMoKXtyZXR1cm4gb3Moe2xvY2F0ZUZpbGU6ZnVuY3Rpb24oZil7cmV0dXJuIHIrZn19KX1hc3luYyBmdW5jdGlvbiBhKHUpe3JldHVybiBuZXcgUHJvbWlzZShhc3luYyhmLGQpPT57Y29uc3QgcD11O2lmKHR5cGVvZiBwPiJ1IilyZXR1cm4gZCgiVEZMaXRlIGJhY2tlbmQgdW5hdmFpbGFibGU6IHdhc21TaW1kIik7Y29uc3QgZz0ic2VsZmllX3NlZ21lbnRhdGlvbl9sYW5kc2NhcGUiO2NvbnNvbGUubG9nKCJMb2FkaW5nIHRmbGl0ZSBtb2RlbDoiLGcpO2xldCBiPWUrYCR7Z30udGZsaXRlYDtjb25zb2xlLmxvZygiVEZMaXRlIG1vZGVsVXJsOiAiK2IpO3RyeXtjb25zdCB4PWF3YWl0KGF3YWl0IGZldGNoKGIpKS5hcnJheUJ1ZmZlcigpO2NvbnNvbGUubG9nKCJNb2RlbCBidWZmZXIgc2l6ZToiLHguYnl0ZUxlbmd0aCk7Y29uc3QgRT1wLl9nZXRNb2RlbEJ1ZmZlck1lbW9yeU9mZnNldCgpO2NvbnNvbGUubG9nKCJNb2RlbCBidWZmZXIgbWVtb3J5IG9mZnNldDoiLEUpLGNvbnNvbGUubG9nKCJMb2FkaW5nIG1vZGVsIGJ1ZmZlci4uLiIpLHAuSEVBUFU4LnNldChuZXcgVWludDhBcnJheSh4KSxFKTtjb25zdCB2PXAuX2xvYWRNb2RlbCh4LmJ5dGVMZW5ndGgpO2lmKGNvbnNvbGUubG9nKCJMb2FkIG1vZGVsIHJlc3VsdDoiLHYpLHYhPT0wKXtkKCJDYW5ub3QgbG9hZCBtb2RlbCIpO3JldHVybn10LmlucHV0V2lkdGg9cC5fZ2V0SW5wdXRXaWR0aCgpLHQuaW5wdXRIZWlnaHQ9cC5fZ2V0SW5wdXRIZWlnaHQoKSx0LmlucHV0Q2hhbm5lbENvdW50PXAuX2dldElucHV0Q2hhbm5lbENvdW50KCksdC5pbnB1dE1lbW9yeU9mZnNldD1wLl9nZXRJbnB1dE1lbW9yeU9mZnNldCgpLGNvbnNvbGUubG9nKCJJbnB1dCBtZW1vcnkgb2Zmc2V0OiIsdC5pbnB1dE1lbW9yeU9mZnNldCksY29uc29sZS5sb2coIklucHV0IGhlaWdodDoiLHQuaW5wdXRIZWlnaHQpLGNvbnNvbGUubG9nKCJJbnB1dCB3aWR0aDoiLHQuaW5wdXRXaWR0aCksY29uc29sZS5sb2coIklucHV0IGNoYW5uZWxzOiIsdC5pbnB1dENoYW5uZWxDb3VudCksdC5vdXRwdXRNZW1vcnlPZmZzZXQ9cC5fZ2V0T3V0cHV0TWVtb3J5T2Zmc2V0KCksdC5vdXRwdXRXaWR0aD1wLl9nZXRPdXRwdXRXaWR0aCgpLHQub3V0cHV0SGVpZ2h0PXAuX2dldE91dHB1dEhlaWdodCgpLHQub3V0cHV0Q2hhbm5lbENvdW50PXAuX2dldE91dHB1dENoYW5uZWxDb3VudCgpLGNvbnNvbGUubG9nKCJPdXRwdXQgbWVtb3J5IG9mZnNldDoiLHQub3V0cHV0TWVtb3J5T2Zmc2V0KSxjb25zb2xlLmxvZygiT3V0cHV0IGhlaWdodDoiLHQub3V0cHV0SGVpZ2h0KSxjb25zb2xlLmxvZygiT3V0cHV0IHdpZHRoOiIsdC5vdXRwdXRXaWR0aCksY29uc29sZS5sb2coIk91dHB1dCBjaGFubmVsczoiLHQub3V0cHV0Q2hhbm5lbENvdW50KSx0LnNlbGVjdGVkVEZMaXRlPXB9Y2F0Y2goaCl7ZChoKTtyZXR1cm59ZigpfSl9cygpLnRoZW4odT0+e2lmKHU9PT1udWxsKXRocm93IGNvbnNvbGUuZXJyb3IoImxvYWRURkxpdGUgbnVsbCIpLCJsb2FkVEZMaXRlIG51bGwiO2EodSkudGhlbihmPT57byh0KX0pLmNhdGNoKGY9Pntjb25zb2xlLmVycm9yKCJsb2FkVEZMaXRlTW9kZWwgZXJyb3IiKSxpKCJsb2FkVEZMaXRlTW9kZWwgZXJyb3IiKX0pfSkuY2F0Y2godT0+e2NvbnNvbGUuZXJyb3IoImxvYWRURkxpdGUgZXJyb3I6Iix1KSxpKCJsb2FkVEZMaXRlIGVycm9yOiIrdSl9KX0pO3JldHVybiBufWNsYXNzIGNze2NvbnN0cnVjdG9yKCl7bCh0aGlzLCJjYW52YXMiLG5ldyBPZmZzY3JlZW5DYW52YXMoMCwwKSk7bCh0aGlzLCJjb250ZXh0Iix0aGlzLmNhbnZhcy5nZXRDb250ZXh0KCIyZCIse3dpbGxSZWFkRnJlcXVlbnRseTohMH0pKTtsKHRoaXMsInBpeGVsQ291bnQiLDApO2wodGhpcywiaW5wdXRPZmZzZXQiLDApO2wodGhpcywib3V0cHV0T2Zmc2V0IiwwKTtsKHRoaXMsImluZm9zIik7bCh0aGlzLCJtYXNrIil9YXN5bmMgaW5pdChlLHQpe2F3YWl0IHRoaXMuaW5pdFdhc20oZSx0KSx0aGlzLmluZm9zJiYodGhpcy5jYW52YXMud2lkdGg9dGhpcy5pbmZvcy5pbnB1dFdpZHRoLHRoaXMuY2FudmFzLmhlaWdodD10aGlzLmluZm9zLmlucHV0SGVpZ2h0LHRoaXMucGl4ZWxDb3VudD10aGlzLmluZm9zLmlucHV0V2lkdGgqdGhpcy5pbmZvcy5pbnB1dEhlaWdodCx0aGlzLm1hc2s9bmV3IEltYWdlRGF0YSh0aGlzLmluZm9zLmlucHV0V2lkdGgsdGhpcy5pbmZvcy5pbnB1dEhlaWdodCksdGhpcy5pbnB1dE9mZnNldD10aGlzLmluZm9zLmlucHV0TWVtb3J5T2Zmc2V0LzQsdGhpcy5vdXRwdXRPZmZzZXQ9dGhpcy5pbmZvcy5vdXRwdXRNZW1vcnlPZmZzZXQvNCl9YXN5bmMgaW5pdFdhc20oZSx0KXt0aGlzLmluZm9zPWF3YWl0IHVzKGUsdCl9Z2V0T3V0cHV0RGltZW5zaW9ucygpe3ZhciBlLHQsbixvO3JldHVybnt3aWR0aDoodD0oZT10aGlzLmluZm9zKT09bnVsbD92b2lkIDA6ZS5vdXRwdXRXaWR0aCkhPW51bGw/dDowLGhlaWdodDoobz0obj10aGlzLmluZm9zKT09bnVsbD92b2lkIDA6bi5vdXRwdXRIZWlnaHQpIT1udWxsP286MH19YXN5bmMgcHJvY2VzcyhlKXtpZighdGhpcy5tYXNrfHwhdGhpcy5pbmZvcylyZXR1cm47Y29uc3QgdD10aGlzLmluZm9zLmlucHV0V2lkdGgsbj10aGlzLmluZm9zLmlucHV0SGVpZ2h0O3RoaXMuY29udGV4dC5kcmF3SW1hZ2UoZSwwLDAsZS53aWR0aCxlLmhlaWdodCwwLDAsdCxuKTtjb25zdCBvPXRoaXMuY29udGV4dC5nZXRJbWFnZURhdGEoMCwwLHQsbiksaT10aGlzLmluZm9zLnNlbGVjdGVkVEZMaXRlLkhFQVBGMzI7Zm9yKGxldCBzPTA7czx0aGlzLnBpeGVsQ291bnQ7cysrKXtjb25zdCBhPXRoaXMuaW5wdXRPZmZzZXQrcyozO2lbYV09by5kYXRhW3MqNF0vMjU1LGlbYSsxXT1vLmRhdGFbcyo0KzFdLzI1NSxpW2ErMl09by5kYXRhW3MqNCsyXS8yNTV9dGhpcy5pbmZvcy5zZWxlY3RlZFRGTGl0ZS5fcnVuSW5mZXJlbmNlKCk7Zm9yKGxldCBzPTA7czx0aGlzLnBpeGVsQ291bnQ7cysrKXtjb25zdCBhPXRoaXMuaW5mb3Muc2VsZWN0ZWRURkxpdGUuSEVBUEYzMlt0aGlzLm91dHB1dE9mZnNldCtzXTt0aGlzLm1hc2suZGF0YVtzKjRdPXRoaXMubWFzay5kYXRhW3MqNCszXT0yNTUqYX1yZXR1cm4gY3JlYXRlSW1hZ2VCaXRtYXAodGhpcy5tYXNrKX1pc0dwdVN1cHBvcnRlZCgpe3ZhciBlLHQsbjtyZXR1cm4obj0odD0oZT10aGlzLmluZm9zKT09bnVsbD92b2lkIDA6ZS5zZWxlY3RlZFRGTGl0ZSk9PW51bGw/dm9pZCAwOnQuX2lzR1BVRW5hYmxlZCgpKSE9bnVsbD9uOiExfX1mdW5jdGlvbiBmcygpe3JldHVybiBuZXcgT2Zmc2NyZWVuQ2FudmFzKDAsMCkuZ2V0Q29udGV4dCgid2ViZ2wyIix7ZmFpbElmTWFqb3JQZXJmb3JtYW5jZUNhdmVhdDohMH0pP3tzdXBwb3J0ZWQ6ITB9OntzdXBwb3J0ZWQ6ITEsbWVzc2FnZToiWW91ciBoYXJkd2FyZSBkb2VzIG5vdCBwZXJmb3JtIGdvb2QgZW5vdWdoIHRvIHJ1biB0aGUgbGlicmFyeSBlZmZpY2llbnRseSJ9fWNsYXNzIG9ye2NvbnN0cnVjdG9yKCl7bCh0aGlzLCJjYW52YXMiKTtsKHRoaXMsImNvbnRleHQiKTtjb25zdCBlPW5ldyBPZmZzY3JlZW5DYW52YXMoMCwwKSx0PWUuZ2V0Q29udGV4dCgiMmQiKTtpZighdCl0aHJvdyJGYWlsIHRvIHJldHJpZXZlIHdlYmdsMiBjb250ZXh0Ijt0aGlzLmNhbnZhcz1lLHRoaXMuY29udGV4dD10fXNldEZsaWNrZXJpbmdPcHRpb25zKGUpe31lbmFibGVQb3N0UHJvY2Vzc2luZygpe31kaXNhYmxlUG9zdFByb2Nlc3NpbmcoKXt9YXN5bmMgcHJvZmlsZVdlYmdsKGUpe3JldHVybltdfWFzeW5jIHJlbmRlcihlLHQpe3JldHVybiB0aGlzLmNhbnZhc31yZXNpemVDYW52YXMoZSl7Y29uc3R7d2lkdGg6dCxoZWlnaHQ6bn09ZTt0aGlzLmNhbnZhcy53aWR0aD10LHRoaXMuY2FudmFzLmhlaWdodD1ufXJlbmRlclNpbGhvdWV0dGUoZSx0LG49Im5vbmUiKXtjb25zdHt3aWR0aDpvLGhlaWdodDppfT1lO3RoaXMuY29udGV4dC5zYXZlKCksdGhpcy5jb250ZXh0LmRyYXdJbWFnZSh0LDAsMCx0LndpZHRoLHQuaGVpZ2h0LDAsMCxvLGkpLHRoaXMuY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb249InNvdXJjZS1pbiIsdGhpcy5jb250ZXh0LmZpbHRlcj1uLHRoaXMuY29udGV4dC5kcmF3SW1hZ2UoZSwwLDAsbyxpLDAsMCx0aGlzLmNhbnZhcy53aWR0aCx0aGlzLmNhbnZhcy5oZWlnaHQpLHRoaXMuY29udGV4dC5yZXN0b3JlKCl9fWNsYXNzIGxzIGV4dGVuZHMgb3J7Y29uc3RydWN0b3IoZSl7c3VwZXIoKSx0aGlzLnJhZGl1cz1lfWFzeW5jIHJlbmRlcihlLHQpe3JldHVybiBzdXBlci5yZXNpemVDYW52YXMoZSksdGhpcy5yZW5kZXJTaWxob3VldHRlKGUsdCksdGhpcy5jb250ZXh0LnNhdmUoKSx0aGlzLmNvbnRleHQuZmlsdGVyPWBibHVyKCR7dGhpcy5yYWRpdXN9cHgpYCx0aGlzLmNvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uPSJkZXN0aW5hdGlvbi1vdmVyIix0aGlzLmNvbnRleHQuZHJhd0ltYWdlKGUsMCwwLGUud2lkdGgsZS5oZWlnaHQpLHRoaXMuY29udGV4dC5yZXN0b3JlKCksc3VwZXIucmVuZGVyKGUsdCl9fWNsYXNzIGRzIGV4dGVuZHMgb3J7Y29uc3RydWN0b3IoZSl7c3VwZXIoKSx0aGlzLnJhZGl1cz1lfWFzeW5jIHJlbmRlcihlLHQpe3JldHVybiBzdXBlci5yZXNpemVDYW52YXMoZSksdGhpcy5yZW5kZXJTaWxob3VldHRlKGUsdCxgYmx1cigke3RoaXMucmFkaXVzfXB4KWApLHRoaXMuY29udGV4dC5zYXZlKCksdGhpcy5jb250ZXh0LmZpbHRlcj0ibm9uZSIsdGhpcy5jb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbj0iZGVzdGluYXRpb24tb3ZlciIsdGhpcy5jb250ZXh0LmRyYXdJbWFnZShlLDAsMCxlLndpZHRoLGUuaGVpZ2h0KSx0aGlzLmNvbnRleHQucmVzdG9yZSgpLHN1cGVyLnJlbmRlcihlLHQpfX1jbGFzcyBocyBleHRlbmRzIG9ye2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKTtsKHRoaXMsImJhY2tncm91bmRJbWFnZSIpfXNldEJhY2tncm91bmRJbWFnZSh0KXt0aGlzLmJhY2tncm91bmRJbWFnZT10fWFzeW5jIHJlbmRlcih0LG4pe3JldHVybiBzdXBlci5yZXNpemVDYW52YXModCksdGhpcy5yZW5kZXJTaWxob3VldHRlKHQsbiksdGhpcy5iYWNrZ3JvdW5kSW1hZ2UmJih0aGlzLmNvbnRleHQuc2F2ZSgpLHRoaXMuY29udGV4dC5maWx0ZXI9Im5vbmUiLHRoaXMuY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb249ImRlc3RpbmF0aW9uLW92ZXIiLHRoaXMuY29udGV4dC5kcmF3SW1hZ2UodGhpcy5iYWNrZ3JvdW5kSW1hZ2UsMCwwLHRoaXMuYmFja2dyb3VuZEltYWdlLndpZHRoLHRoaXMuYmFja2dyb3VuZEltYWdlLmhlaWdodCwwLDAsdC53aWR0aCx0LmhlaWdodCksdGhpcy5jb250ZXh0LnJlc3RvcmUoKSksc3VwZXIucmVuZGVyKHQsbil9fS8qIEBsaWNlbnNlIHR3Z2wuanMgNS41LjEgQ29weXJpZ2h0IChjKSAyMDE1LCBHcmVnZyBUYXZhcmVzIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCkF2YWlsYWJsZSB2aWEgdGhlIE1JVCBsaWNlbnNlLgpzZWU6IGh0dHA6Ly9naXRodWIuY29tL2dyZWdnbWFuL3R3Z2wuanMgZm9yIGRldGFpbHMgKi9jb25zdCBpcj01MTIwLFdlPTUxMjEsc3I9NTEyMixhcj01MTIzLHVyPTUxMjQsY3I9NTEyNSxmcj01MTI2LG1zPTMyODE5LHBzPTMyODIwLGdzPTMzNjM1LHlzPTUxMzEsYnM9MzM2NDAseHM9MzU4OTksX3M9MzU5MDIsdnM9MzYyNjksRXM9MzQwNDIsZG49e307e2NvbnN0IHI9ZG47cltpcl09SW50OEFycmF5LHJbV2VdPVVpbnQ4QXJyYXkscltzcl09SW50MTZBcnJheSxyW2FyXT1VaW50MTZBcnJheSxyW3VyXT1JbnQzMkFycmF5LHJbY3JdPVVpbnQzMkFycmF5LHJbZnJdPUZsb2F0MzJBcnJheSxyW21zXT1VaW50MTZBcnJheSxyW3BzXT1VaW50MTZBcnJheSxyW2dzXT1VaW50MTZBcnJheSxyW3lzXT1VaW50MTZBcnJheSxyW2JzXT1VaW50MzJBcnJheSxyW3hzXT1VaW50MzJBcnJheSxyW19zXT1VaW50MzJBcnJheSxyW3ZzXT1VaW50MzJBcnJheSxyW0VzXT1VaW50MzJBcnJheX1mdW5jdGlvbiBscihyKXtpZihyIGluc3RhbmNlb2YgSW50OEFycmF5KXJldHVybiBpcjtpZihyIGluc3RhbmNlb2YgVWludDhBcnJheXx8ciBpbnN0YW5jZW9mIFVpbnQ4Q2xhbXBlZEFycmF5KXJldHVybiBXZTtpZihyIGluc3RhbmNlb2YgSW50MTZBcnJheSlyZXR1cm4gc3I7aWYociBpbnN0YW5jZW9mIFVpbnQxNkFycmF5KXJldHVybiBhcjtpZihyIGluc3RhbmNlb2YgSW50MzJBcnJheSlyZXR1cm4gdXI7aWYociBpbnN0YW5jZW9mIFVpbnQzMkFycmF5KXJldHVybiBjcjtpZihyIGluc3RhbmNlb2YgRmxvYXQzMkFycmF5KXJldHVybiBmcjt0aHJvdyBuZXcgRXJyb3IoInVuc3VwcG9ydGVkIHR5cGVkIGFycmF5IHR5cGUiKX1mdW5jdGlvbiBobihyKXtpZihyPT09SW50OEFycmF5KXJldHVybiBpcjtpZihyPT09VWludDhBcnJheXx8cj09PVVpbnQ4Q2xhbXBlZEFycmF5KXJldHVybiBXZTtpZihyPT09SW50MTZBcnJheSlyZXR1cm4gc3I7aWYocj09PVVpbnQxNkFycmF5KXJldHVybiBhcjtpZihyPT09SW50MzJBcnJheSlyZXR1cm4gdXI7aWYocj09PVVpbnQzMkFycmF5KXJldHVybiBjcjtpZihyPT09RmxvYXQzMkFycmF5KXJldHVybiBmcjt0aHJvdyBuZXcgRXJyb3IoInVuc3VwcG9ydGVkIHR5cGVkIGFycmF5IHR5cGUiKX1mdW5jdGlvbiBtbihyKXtjb25zdCBlPWRuW3JdO2lmKCFlKXRocm93IG5ldyBFcnJvcigidW5rbm93biBnbCB0eXBlIik7cmV0dXJuIGV9Y29uc3QgYnQ9dHlwZW9mIFNoYXJlZEFycmF5QnVmZmVyPCJ1Ij9mdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5idWZmZXImJihlLmJ1ZmZlciBpbnN0YW5jZW9mIEFycmF5QnVmZmVyfHxlLmJ1ZmZlciBpbnN0YW5jZW9mIFNoYXJlZEFycmF5QnVmZmVyKX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuYnVmZmVyJiZlLmJ1ZmZlciBpbnN0YW5jZW9mIEFycmF5QnVmZmVyfTtmdW5jdGlvbiBwbiguLi5yKXtjb25zb2xlLmVycm9yKC4uLnIpfWNvbnN0IGduPW5ldyBNYXA7ZnVuY3Rpb24geHQocixlKXtpZighcnx8dHlwZW9mIHIhPSJvYmplY3QiKXJldHVybiExO2xldCB0PWduLmdldChlKTt0fHwodD1uZXcgV2Vha01hcCxnbi5zZXQoZSx0KSk7bGV0IG49dC5nZXQocik7aWYobj09PXZvaWQgMCl7Y29uc3Qgbz1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwocik7bj1vLnN1YnN0cmluZyg4LG8ubGVuZ3RoLTEpPT09ZSx0LnNldChyLG4pfXJldHVybiBufWZ1bmN0aW9uIFRzKHIsZSl7cmV0dXJuIHR5cGVvZiBXZWJHTEJ1ZmZlcjwidSImJnh0KGUsIldlYkdMQnVmZmVyIil9ZnVuY3Rpb24gd3MocixlKXtyZXR1cm4gdHlwZW9mIFdlYkdMUmVuZGVyYnVmZmVyPCJ1IiYmeHQoZSwiV2ViR0xSZW5kZXJidWZmZXIiKX1mdW5jdGlvbiBkcihyLGUpe3JldHVybiB0eXBlb2YgV2ViR0xUZXh0dXJlPCJ1IiYmeHQoZSwiV2ViR0xUZXh0dXJlIil9ZnVuY3Rpb24gQXMocixlKXtyZXR1cm4gdHlwZW9mIFdlYkdMU2FtcGxlcjwidSImJnh0KGUsIldlYkdMU2FtcGxlciIpfWNvbnN0IHluPTM1MDQ0LHllPTM0OTYyLElzPTM0OTYzLFNzPTM0NjYwLFJzPTUxMjAsRnM9NTEyMSxQcz01MTIyLGtzPTUxMjMsRHM9NTEyNCxDcz01MTI1LGJuPTUxMjYseG49e2F0dHJpYlByZWZpeDoiIn07ZnVuY3Rpb24gQnMocixlLHQsbixvKXtyLmJpbmRCdWZmZXIoZSx0KSxyLmJ1ZmZlckRhdGEoZSxuLG98fHluKX1mdW5jdGlvbiBfbihyLGUsdCxuKXtpZihUcyhyLGUpKXJldHVybiBlO3Q9dHx8eWU7Y29uc3Qgbz1yLmNyZWF0ZUJ1ZmZlcigpO3JldHVybiBCcyhyLHQsbyxlLG4pLG99ZnVuY3Rpb24gdm4ocil7cmV0dXJuIHI9PT0iaW5kaWNlcyJ9ZnVuY3Rpb24gTXMocil7cmV0dXJuIHI9PT1JbnQ4QXJyYXl8fHI9PT1VaW50OEFycmF5fWZ1bmN0aW9uIE9zKHIpe3JldHVybiByLmxlbmd0aD9yOnIuZGF0YX1jb25zdCBVcz0vY29vcmR8dGV4dHVyZS9pLE5zPS9jb2xvcnxjb2xvdXIvaTtmdW5jdGlvbiBMcyhyLGUpe2xldCB0O2lmKFVzLnRlc3Qocik/dD0yOk5zLnRlc3Qocik/dD00OnQ9MyxlJXQ+MCl0aHJvdyBuZXcgRXJyb3IoYENhbiBub3QgZ3Vlc3MgbnVtQ29tcG9uZW50cyBmb3IgYXR0cmlidXRlICcke3J9Jy4gVHJpZWQgJHt0fSBidXQgJHtlfSB2YWx1ZXMgaXMgbm90IGV2ZW5seSBkaXZpc2libGUgYnkgJHt0fS4gWW91IHNob3VsZCBzcGVjaWZ5IGl0LmApO3JldHVybiB0fWZ1bmN0aW9uIHpzKHIsZSx0KXtyZXR1cm4gci5udW1Db21wb25lbnRzfHxyLnNpemV8fExzKGUsdHx8T3MocikubGVuZ3RoKX1mdW5jdGlvbiBFbihyLGUpe2lmKGJ0KHIpKXJldHVybiByO2lmKGJ0KHIuZGF0YSkpcmV0dXJuIHIuZGF0YTtBcnJheS5pc0FycmF5KHIpJiYocj17ZGF0YTpyfSk7bGV0IHQ9ci50eXBlP2hyKHIudHlwZSk6dm9pZCAwO3JldHVybiB0fHwodm4oZSk/dD1VaW50MTZBcnJheTp0PUZsb2F0MzJBcnJheSksbmV3IHQoci5kYXRhKX1mdW5jdGlvbiBHcyhyKXtyZXR1cm4gdHlwZW9mIHI9PSJudW1iZXIiP3I6cj9obihyKTpibn1mdW5jdGlvbiBocihyKXtyZXR1cm4gdHlwZW9mIHI9PSJudW1iZXIiP21uKHIpOnJ8fEZsb2F0MzJBcnJheX1mdW5jdGlvbiAkcyhyLGUpe3JldHVybntidWZmZXI6ZS5idWZmZXIsbnVtVmFsdWVzOjIqMyo0LHR5cGU6R3MoZS50eXBlKSxhcnJheVR5cGU6aHIoZS50eXBlKX19ZnVuY3Rpb24gV3MocixlKXtjb25zdCB0PWUuZGF0YXx8ZSxuPWhyKGUudHlwZSksbz10Km4uQllURVNfUEVSX0VMRU1FTlQsaT1yLmNyZWF0ZUJ1ZmZlcigpO3JldHVybiByLmJpbmRCdWZmZXIoeWUsaSksci5idWZmZXJEYXRhKHllLG8sZS5kcmF3VHlwZXx8eW4pLHtidWZmZXI6aSxudW1WYWx1ZXM6dCx0eXBlOmhuKG4pLGFycmF5VHlwZTpufX1mdW5jdGlvbiBWcyhyLGUsdCl7Y29uc3Qgbj1FbihlLHQpO3JldHVybnthcnJheVR5cGU6bi5jb25zdHJ1Y3RvcixidWZmZXI6X24ocixuLHZvaWQgMCxlLmRyYXdUeXBlKSx0eXBlOmxyKG4pLG51bVZhbHVlczowfX1mdW5jdGlvbiBIcyhyLGUpe2NvbnN0IHQ9e307cmV0dXJuIE9iamVjdC5rZXlzKGUpLmZvckVhY2goZnVuY3Rpb24obil7aWYoIXZuKG4pKXtjb25zdCBvPWVbbl0saT1vLmF0dHJpYnx8by5uYW1lfHxvLmF0dHJpYk5hbWV8fHhuLmF0dHJpYlByZWZpeCtuO2lmKG8udmFsdWUpe2lmKCFBcnJheS5pc0FycmF5KG8udmFsdWUpJiYhYnQoby52YWx1ZSkpdGhyb3cgbmV3IEVycm9yKCJhcnJheS52YWx1ZSBpcyBub3QgYXJyYXkgb3IgdHlwZWRhcnJheSIpO3RbaV09e3ZhbHVlOm8udmFsdWV9fWVsc2V7bGV0IHM7by5idWZmZXImJm8uYnVmZmVyIGluc3RhbmNlb2YgV2ViR0xCdWZmZXI/cz0kczp0eXBlb2Ygbz09Im51bWJlciJ8fHR5cGVvZiBvLmRhdGE9PSJudW1iZXIiP3M9V3M6cz1Wcztjb25zdHtidWZmZXI6YSx0eXBlOnUsbnVtVmFsdWVzOmYsYXJyYXlUeXBlOmR9PXMocixvLG4pLHA9by5ub3JtYWxpemUhPT12b2lkIDA/by5ub3JtYWxpemU6TXMoZCksZz16cyhvLG4sZik7dFtpXT17YnVmZmVyOmEsbnVtQ29tcG9uZW50czpnLHR5cGU6dSxub3JtYWxpemU6cCxzdHJpZGU6by5zdHJpZGV8fDAsb2Zmc2V0Om8ub2Zmc2V0fHwwLGRpdmlzb3I6by5kaXZpc29yPT09dm9pZCAwP3ZvaWQgMDpvLmRpdmlzb3IsZHJhd1R5cGU6by5kcmF3VHlwZX19fX0pLHIuYmluZEJ1ZmZlcih5ZSxudWxsKSx0fWZ1bmN0aW9uIGpzKHIsZSl7cmV0dXJuIGU9PT1Sc3x8ZT09PUZzPzE6ZT09PVBzfHxlPT09a3M/MjplPT09RHN8fGU9PT1Dc3x8ZT09PWJuPzQ6MH1jb25zdCBtcj1bInBvc2l0aW9uIiwicG9zaXRpb25zIiwiYV9wb3NpdGlvbiJdO2Z1bmN0aW9uIFlzKHIsZSl7bGV0IHQsbjtmb3Iobj0wO248bXIubGVuZ3RoJiYodD1tcltuXSwhKHQgaW4gZXx8KHQ9eG4uYXR0cmliUHJlZml4K3QsdCBpbiBlKSkpOysrbik7bj09PW1yLmxlbmd0aCYmKHQ9T2JqZWN0LmtleXMoZSlbMF0pO2NvbnN0IG89ZVt0XTtpZighby5idWZmZXIpcmV0dXJuIDE7ci5iaW5kQnVmZmVyKHllLG8uYnVmZmVyKTtjb25zdCBpPXIuZ2V0QnVmZmVyUGFyYW1ldGVyKHllLFNzKTtyLmJpbmRCdWZmZXIoeWUsbnVsbCk7Y29uc3Qgcz1qcyhyLG8udHlwZSksYT1pL3MsdT1vLm51bUNvbXBvbmVudHN8fG8uc2l6ZSxmPWEvdTtpZihmJTEhPT0wKXRocm93IG5ldyBFcnJvcihgbnVtQ29tcG9uZW50cyAke3V9IG5vdCBjb3JyZWN0IGZvciBsZW5ndGggJHtsZW5ndGh9YCk7cmV0dXJuIGZ9ZnVuY3Rpb24gWHMocixlLHQpe2NvbnN0IG49SHMocixlKSxvPU9iamVjdC5hc3NpZ24oe30sdHx8e30pO28uYXR0cmlicz1PYmplY3QuYXNzaWduKHt9LHQ/dC5hdHRyaWJzOnt9LG4pO2NvbnN0IGk9ZS5pbmRpY2VzO2lmKGkpe2NvbnN0IHM9RW4oaSwiaW5kaWNlcyIpO28uaW5kaWNlcz1fbihyLHMsSXMpLG8ubnVtRWxlbWVudHM9cy5sZW5ndGgsby5lbGVtZW50VHlwZT1scihzKX1lbHNlIG8ubnVtRWxlbWVudHN8fChvLm51bUVsZW1lbnRzPVlzKHIsby5hdHRyaWJzKSk7cmV0dXJuIG99ZnVuY3Rpb24gVmUocil7cmV0dXJuISFyLnRleFN0b3JhZ2UyRH1jb25zdCBUbj1mdW5jdGlvbigpe2NvbnN0IHI9e30sZT17fTtmdW5jdGlvbiB0KG4pe2NvbnN0IG89bi5jb25zdHJ1Y3Rvci5uYW1lO2lmKCFyW29dKXtmb3IoY29uc3QgaSBpbiBuKWlmKHR5cGVvZiBuW2ldPT0ibnVtYmVyIil7Y29uc3Qgcz1lW25baV1dO2VbbltpXV09cz9gJHtzfSB8ICR7aX1gOml9cltvXT0hMH19cmV0dXJuIGZ1bmN0aW9uKG8saSl7cmV0dXJuIHQobyksZVtpXXx8KHR5cGVvZiBpPT0ibnVtYmVyIj9gMHgke2kudG9TdHJpbmcoMTYpfWA6aSl9fSgpLGllPXt0ZXh0dXJlQ29sb3I6bmV3IFVpbnQ4QXJyYXkoWzEyOCwxOTIsMjU1LDI1NV0pLHRleHR1cmVPcHRpb25zOnt9LGNyb3NzT3JpZ2luOnZvaWQgMH0sSGU9YnQsd249ZnVuY3Rpb24oKXtsZXQgcjtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gcj1yfHwodHlwZW9mIGRvY3VtZW50PCJ1IiYmZG9jdW1lbnQuY3JlYXRlRWxlbWVudD9kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKS5nZXRDb250ZXh0KCIyZCIpOm51bGwpLHJ9fSgpLEFuPTY0MDYscT02NDA3LFI9NjQwOCxJbj02NDA5LFNuPTY0MTAsamU9NjQwMixSbj0zNDA0MSxfdD0zMzA3MSxRcz05NzI4LHFzPTk3Mjksc2U9MzU1MyxhZT0zNDA2NyxiZT0zMjg3OSx4ZT0zNTg2Nixwcj0zNDA2OSxLcz0zNDA3MCxKcz0zNDA3MSxacz0zNDA3MixlYT0zNDA3Myx0YT0zNDA3NCxncj0xMDI0MSx5cj0xMDI0MCx2dD0xMDI0MixFdD0xMDI0MyxGbj0zMjg4MixyYT0zMzA4MixuYT0zMzA4MyxvYT0zMzA4NCxpYT0zMzA4NSxzYT0zNDg5MixhYT0zNDg5Myxicj0zMzE3LFBuPTMzMTQsa249MzI4NzgsRG49MzMxNixDbj0zMzE1LEJuPTMyODc3LHVhPTM3NDQzLGNhPTM3NDQxLGZhPTM3NDQwLGxhPTMzMzIxLGRhPTM2NzU2LGhhPTMzMzI1LG1hPTMzMzI2LHBhPTMzMzMwLGdhPTMzMzI5LHlhPTMzMzM4LGJhPTMzMzM3LHhhPTMzMzQwLF9hPTMzMzM5LHZhPTMzMzIzLEVhPTM2NzU3LFRhPTMzMzI3LHdhPTMzMzI4LEFhPTMzMzM2LElhPTMzMzM1LFNhPTMzMzMyLFJhPTMzMzMxLEZhPTMzMzM0LFBhPTMzMzMzLGthPTMyODQ5LERhPTM1OTA1LENhPTM2MTk0LEJhPTM2NzU4LE1hPTM1ODk4LE9hPTM1OTAxLFVhPTM0ODQzLE5hPTM0ODM3LExhPTM2MjIxLHphPTM2MjM5LEdhPTM2MjE1LCRhPTM2MjMzLFdhPTM2MjA5LFZhPTM2MjI3LEhhPTMyODU2LGphPTM1OTA3LFlhPTM2NzU5LFhhPTMyODU1LFFhPTMyODU0LHFhPTMyODU3LEthPTM0ODQyLEphPTM0ODM2LFphPTM2MjIwLGV1PTM2MjM4LHR1PTM2OTc1LHJ1PTM2MjE0LG51PTM2MjMyLG91PTM2MjI2LGl1PTM2MjA4LHN1PTMzMTg5LGF1PTMzMTkwLHV1PTM2MDEyLGN1PTM2MDEzLGZ1PTM1MDU2LHVlPTUxMjAsUz01MTIxLFR0PTUxMjIsa2U9NTEyMyx3dD01MTI0LF9lPTUxMjUsTz01MTI2LE1uPTMyODE5LE9uPTMyODIwLFVuPTMzNjM1LGo9NTEzMSxZZT0zNjE5Myx4cj0zMzY0MCxsdT0zNTg5OSxkdT0zNTkwMixodT0zNjI2OSxtdT0zNDA0MixBdD0zMzMxOSxEZT0zMzMyMCxJdD02NDAzLENlPTM2MjQ0LEJlPTM2MjQ4LHZlPTM2MjQ5O2xldCBfcjtmdW5jdGlvbiBTdChyKXtpZighX3Ipe2NvbnN0IGU9e307ZVtBbl09e3RleHR1cmVGb3JtYXQ6QW4sY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiEwLGJ5dGVzUGVyRWxlbWVudDpbMSwyLDIsNF0sdHlwZTpbUyxqLFllLE9dfSxlW0luXT17dGV4dHVyZUZvcm1hdDpJbixjb2xvclJlbmRlcmFibGU6ITAsdGV4dHVyZUZpbHRlcmFibGU6ITAsYnl0ZXNQZXJFbGVtZW50OlsxLDIsMiw0XSx0eXBlOltTLGosWWUsT119LGVbU25dPXt0ZXh0dXJlRm9ybWF0OlNuLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMCxieXRlc1BlckVsZW1lbnQ6WzIsNCw0LDhdLHR5cGU6W1MsaixZZSxPXX0sZVtxXT17dGV4dHVyZUZvcm1hdDpxLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMCxieXRlc1BlckVsZW1lbnQ6WzMsNiw2LDEyLDJdLHR5cGU6W1MsaixZZSxPLFVuXX0sZVtSXT17dGV4dHVyZUZvcm1hdDpSLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMCxieXRlc1BlckVsZW1lbnQ6WzQsOCw4LDE2LDIsMl0sdHlwZTpbUyxqLFllLE8sTW4sT25dfSxlW2plXT17dGV4dHVyZUZvcm1hdDpqZSxjb2xvclJlbmRlcmFibGU6ITAsdGV4dHVyZUZpbHRlcmFibGU6ITEsYnl0ZXNQZXJFbGVtZW50OlsyLDRdLHR5cGU6W19lLGtlXX0sZVtsYV09e3RleHR1cmVGb3JtYXQ6SXQsY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiEwLGJ5dGVzUGVyRWxlbWVudDpbMV0sdHlwZTpbU119LGVbZGFdPXt0ZXh0dXJlRm9ybWF0Okl0LGNvbG9yUmVuZGVyYWJsZTohMSx0ZXh0dXJlRmlsdGVyYWJsZTohMCxieXRlc1BlckVsZW1lbnQ6WzFdLHR5cGU6W3VlXX0sZVtoYV09e3RleHR1cmVGb3JtYXQ6SXQsY29sb3JSZW5kZXJhYmxlOiExLHRleHR1cmVGaWx0ZXJhYmxlOiEwLGJ5dGVzUGVyRWxlbWVudDpbNCwyXSx0eXBlOltPLGpdfSxlW21hXT17dGV4dHVyZUZvcm1hdDpJdCxjb2xvclJlbmRlcmFibGU6ITEsdGV4dHVyZUZpbHRlcmFibGU6ITEsYnl0ZXNQZXJFbGVtZW50Ols0XSx0eXBlOltPXX0sZVtwYV09e3RleHR1cmVGb3JtYXQ6Q2UsY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiExLGJ5dGVzUGVyRWxlbWVudDpbMV0sdHlwZTpbU119LGVbZ2FdPXt0ZXh0dXJlRm9ybWF0OkNlLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzFdLHR5cGU6W3VlXX0sZVtTYV09e3RleHR1cmVGb3JtYXQ6Q2UsY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiExLGJ5dGVzUGVyRWxlbWVudDpbMl0sdHlwZTpba2VdfSxlW1JhXT17dGV4dHVyZUZvcm1hdDpDZSxjb2xvclJlbmRlcmFibGU6ITAsdGV4dHVyZUZpbHRlcmFibGU6ITEsYnl0ZXNQZXJFbGVtZW50OlsyXSx0eXBlOltUdF19LGVbRmFdPXt0ZXh0dXJlRm9ybWF0OkNlLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzRdLHR5cGU6W19lXX0sZVtQYV09e3RleHR1cmVGb3JtYXQ6Q2UsY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiExLGJ5dGVzUGVyRWxlbWVudDpbNF0sdHlwZTpbd3RdfSxlW3ZhXT17dGV4dHVyZUZvcm1hdDpBdCxjb2xvclJlbmRlcmFibGU6ITAsdGV4dHVyZUZpbHRlcmFibGU6ITAsYnl0ZXNQZXJFbGVtZW50OlsyXSx0eXBlOltTXX0sZVtFYV09e3RleHR1cmVGb3JtYXQ6QXQsY29sb3JSZW5kZXJhYmxlOiExLHRleHR1cmVGaWx0ZXJhYmxlOiEwLGJ5dGVzUGVyRWxlbWVudDpbMl0sdHlwZTpbdWVdfSxlW1RhXT17dGV4dHVyZUZvcm1hdDpBdCxjb2xvclJlbmRlcmFibGU6ITEsdGV4dHVyZUZpbHRlcmFibGU6ITAsYnl0ZXNQZXJFbGVtZW50Ols4LDRdLHR5cGU6W08sal19LGVbd2FdPXt0ZXh0dXJlRm9ybWF0OkF0LGNvbG9yUmVuZGVyYWJsZTohMSx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzhdLHR5cGU6W09dfSxlW0FhXT17dGV4dHVyZUZvcm1hdDpEZSxjb2xvclJlbmRlcmFibGU6ITAsdGV4dHVyZUZpbHRlcmFibGU6ITEsYnl0ZXNQZXJFbGVtZW50OlsyXSx0eXBlOltTXX0sZVtJYV09e3RleHR1cmVGb3JtYXQ6RGUsY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiExLGJ5dGVzUGVyRWxlbWVudDpbMl0sdHlwZTpbdWVdfSxlW3lhXT17dGV4dHVyZUZvcm1hdDpEZSxjb2xvclJlbmRlcmFibGU6ITAsdGV4dHVyZUZpbHRlcmFibGU6ITEsYnl0ZXNQZXJFbGVtZW50Ols0XSx0eXBlOltrZV19LGVbYmFdPXt0ZXh0dXJlRm9ybWF0OkRlLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzRdLHR5cGU6W1R0XX0sZVt4YV09e3RleHR1cmVGb3JtYXQ6RGUsY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiExLGJ5dGVzUGVyRWxlbWVudDpbOF0sdHlwZTpbX2VdfSxlW19hXT17dGV4dHVyZUZvcm1hdDpEZSxjb2xvclJlbmRlcmFibGU6ITAsdGV4dHVyZUZpbHRlcmFibGU6ITEsYnl0ZXNQZXJFbGVtZW50Ols4XSx0eXBlOlt3dF19LGVba2FdPXt0ZXh0dXJlRm9ybWF0OnEsY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiEwLGJ5dGVzUGVyRWxlbWVudDpbM10sdHlwZTpbU119LGVbRGFdPXt0ZXh0dXJlRm9ybWF0OnEsY29sb3JSZW5kZXJhYmxlOiExLHRleHR1cmVGaWx0ZXJhYmxlOiEwLGJ5dGVzUGVyRWxlbWVudDpbM10sdHlwZTpbU119LGVbQ2FdPXt0ZXh0dXJlRm9ybWF0OnEsY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiEwLGJ5dGVzUGVyRWxlbWVudDpbMywyXSx0eXBlOltTLFVuXX0sZVtCYV09e3RleHR1cmVGb3JtYXQ6cSxjb2xvclJlbmRlcmFibGU6ITEsdGV4dHVyZUZpbHRlcmFibGU6ITAsYnl0ZXNQZXJFbGVtZW50OlszXSx0eXBlOlt1ZV19LGVbTWFdPXt0ZXh0dXJlRm9ybWF0OnEsY29sb3JSZW5kZXJhYmxlOiExLHRleHR1cmVGaWx0ZXJhYmxlOiEwLGJ5dGVzUGVyRWxlbWVudDpbMTIsNiw0XSx0eXBlOltPLGosbHVdfSxlW09hXT17dGV4dHVyZUZvcm1hdDpxLGNvbG9yUmVuZGVyYWJsZTohMSx0ZXh0dXJlRmlsdGVyYWJsZTohMCxieXRlc1BlckVsZW1lbnQ6WzEyLDYsNF0sdHlwZTpbTyxqLGR1XX0sZVtVYV09e3RleHR1cmVGb3JtYXQ6cSxjb2xvclJlbmRlcmFibGU6ITEsdGV4dHVyZUZpbHRlcmFibGU6ITAsYnl0ZXNQZXJFbGVtZW50OlsxMiw2XSx0eXBlOltPLGpdfSxlW05hXT17dGV4dHVyZUZvcm1hdDpxLGNvbG9yUmVuZGVyYWJsZTohMSx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzEyXSx0eXBlOltPXX0sZVtMYV09e3RleHR1cmVGb3JtYXQ6QmUsY29sb3JSZW5kZXJhYmxlOiExLHRleHR1cmVGaWx0ZXJhYmxlOiExLGJ5dGVzUGVyRWxlbWVudDpbM10sdHlwZTpbU119LGVbemFdPXt0ZXh0dXJlRm9ybWF0OkJlLGNvbG9yUmVuZGVyYWJsZTohMSx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzNdLHR5cGU6W3VlXX0sZVtHYV09e3RleHR1cmVGb3JtYXQ6QmUsY29sb3JSZW5kZXJhYmxlOiExLHRleHR1cmVGaWx0ZXJhYmxlOiExLGJ5dGVzUGVyRWxlbWVudDpbNl0sdHlwZTpba2VdfSxlWyRhXT17dGV4dHVyZUZvcm1hdDpCZSxjb2xvclJlbmRlcmFibGU6ITEsdGV4dHVyZUZpbHRlcmFibGU6ITEsYnl0ZXNQZXJFbGVtZW50Ols2XSx0eXBlOltUdF19LGVbV2FdPXt0ZXh0dXJlRm9ybWF0OkJlLGNvbG9yUmVuZGVyYWJsZTohMSx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzEyXSx0eXBlOltfZV19LGVbVmFdPXt0ZXh0dXJlRm9ybWF0OkJlLGNvbG9yUmVuZGVyYWJsZTohMSx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzEyXSx0eXBlOlt3dF19LGVbSGFdPXt0ZXh0dXJlRm9ybWF0OlIsY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiEwLGJ5dGVzUGVyRWxlbWVudDpbNF0sdHlwZTpbU119LGVbamFdPXt0ZXh0dXJlRm9ybWF0OlIsY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiEwLGJ5dGVzUGVyRWxlbWVudDpbNF0sdHlwZTpbU119LGVbWWFdPXt0ZXh0dXJlRm9ybWF0OlIsY29sb3JSZW5kZXJhYmxlOiExLHRleHR1cmVGaWx0ZXJhYmxlOiEwLGJ5dGVzUGVyRWxlbWVudDpbNF0sdHlwZTpbdWVdfSxlW1hhXT17dGV4dHVyZUZvcm1hdDpSLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMCxieXRlc1BlckVsZW1lbnQ6WzQsMiw0XSx0eXBlOltTLE9uLHhyXX0sZVtRYV09e3RleHR1cmVGb3JtYXQ6Uixjb2xvclJlbmRlcmFibGU6ITAsdGV4dHVyZUZpbHRlcmFibGU6ITAsYnl0ZXNQZXJFbGVtZW50Ols0LDJdLHR5cGU6W1MsTW5dfSxlW3FhXT17dGV4dHVyZUZvcm1hdDpSLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMCxieXRlc1BlckVsZW1lbnQ6WzRdLHR5cGU6W3hyXX0sZVtLYV09e3RleHR1cmVGb3JtYXQ6Uixjb2xvclJlbmRlcmFibGU6ITEsdGV4dHVyZUZpbHRlcmFibGU6ITAsYnl0ZXNQZXJFbGVtZW50OlsxNiw4XSx0eXBlOltPLGpdfSxlW0phXT17dGV4dHVyZUZvcm1hdDpSLGNvbG9yUmVuZGVyYWJsZTohMSx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzE2XSx0eXBlOltPXX0sZVtaYV09e3RleHR1cmVGb3JtYXQ6dmUsY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiExLGJ5dGVzUGVyRWxlbWVudDpbNF0sdHlwZTpbU119LGVbZXVdPXt0ZXh0dXJlRm9ybWF0OnZlLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzRdLHR5cGU6W3VlXX0sZVt0dV09e3RleHR1cmVGb3JtYXQ6dmUsY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiExLGJ5dGVzUGVyRWxlbWVudDpbNF0sdHlwZTpbeHJdfSxlW3J1XT17dGV4dHVyZUZvcm1hdDp2ZSxjb2xvclJlbmRlcmFibGU6ITAsdGV4dHVyZUZpbHRlcmFibGU6ITEsYnl0ZXNQZXJFbGVtZW50Ols4XSx0eXBlOltrZV19LGVbbnVdPXt0ZXh0dXJlRm9ybWF0OnZlLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzhdLHR5cGU6W1R0XX0sZVtvdV09e3RleHR1cmVGb3JtYXQ6dmUsY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiExLGJ5dGVzUGVyRWxlbWVudDpbMTZdLHR5cGU6W3d0XX0sZVtpdV09e3RleHR1cmVGb3JtYXQ6dmUsY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiExLGJ5dGVzUGVyRWxlbWVudDpbMTZdLHR5cGU6W19lXX0sZVtzdV09e3RleHR1cmVGb3JtYXQ6amUsY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiExLGJ5dGVzUGVyRWxlbWVudDpbMiw0XSx0eXBlOltrZSxfZV19LGVbYXVdPXt0ZXh0dXJlRm9ybWF0OmplLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzRdLHR5cGU6W19lXX0sZVt1dV09e3RleHR1cmVGb3JtYXQ6amUsY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiExLGJ5dGVzUGVyRWxlbWVudDpbNF0sdHlwZTpbT119LGVbZnVdPXt0ZXh0dXJlRm9ybWF0OlJuLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzRdLHR5cGU6W211XX0sZVtjdV09e3RleHR1cmVGb3JtYXQ6Um4sY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiExLGJ5dGVzUGVyRWxlbWVudDpbNF0sdHlwZTpbaHVdfSxPYmplY3Qua2V5cyhlKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe2NvbnN0IG49ZVt0XTtuLmJ5dGVzUGVyRWxlbWVudE1hcD17fSxuLmJ5dGVzUGVyRWxlbWVudC5mb3JFYWNoKGZ1bmN0aW9uKG8saSl7Y29uc3Qgcz1uLnR5cGVbaV07bi5ieXRlc1BlckVsZW1lbnRNYXBbc109b30pfSksX3I9ZX1yZXR1cm4gX3Jbcl19ZnVuY3Rpb24gcHUocixlKXtjb25zdCB0PVN0KHIpO2lmKCF0KXRocm93InVua25vd24gaW50ZXJuYWwgZm9ybWF0Ijtjb25zdCBuPXQuYnl0ZXNQZXJFbGVtZW50TWFwW2VdO2lmKG49PT12b2lkIDApdGhyb3cidW5rbm93biBpbnRlcm5hbCBmb3JtYXQiO3JldHVybiBufWZ1bmN0aW9uIFhlKHIpe2NvbnN0IGU9U3Qocik7aWYoIWUpdGhyb3cidW5rbm93biBpbnRlcm5hbCBmb3JtYXQiO3JldHVybntmb3JtYXQ6ZS50ZXh0dXJlRm9ybWF0LHR5cGU6ZS50eXBlWzBdfX1mdW5jdGlvbiBObihyKXtyZXR1cm4ociZyLTEpPT09MH1mdW5jdGlvbiBndShyLGUsdCxuKXtpZighVmUocikpcmV0dXJuIE5uKGUpJiZObih0KTtjb25zdCBvPVN0KG4pO2lmKCFvKXRocm93InVua25vd24gaW50ZXJuYWwgZm9ybWF0IjtyZXR1cm4gby5jb2xvclJlbmRlcmFibGUmJm8udGV4dHVyZUZpbHRlcmFibGV9ZnVuY3Rpb24geXUocil7Y29uc3QgZT1TdChyKTtpZighZSl0aHJvdyJ1bmtub3duIGludGVybmFsIGZvcm1hdCI7cmV0dXJuIGUudGV4dHVyZUZpbHRlcmFibGV9ZnVuY3Rpb24gYnUocixlLHQpe3JldHVybiBIZShlKT9scihlKTp0fHxTfWZ1bmN0aW9uIFJ0KHIsZSx0LG4sbyl7aWYobyUxIT09MCl0aHJvdyJjYW4ndCBndWVzcyBkaW1lbnNpb25zIjtpZighdCYmIW4pe2NvbnN0IGk9TWF0aC5zcXJ0KG8vKGU9PT1hZT82OjEpKTtpJTE9PT0wPyh0PWksbj1pKToodD1vLG49MSl9ZWxzZSBpZihuKXtpZighdCYmKHQ9by9uLHQlMSkpdGhyb3ciY2FuJ3QgZ3Vlc3MgZGltZW5zaW9ucyJ9ZWxzZSBpZihuPW8vdCxuJTEpdGhyb3ciY2FuJ3QgZ3Vlc3MgZGltZW5zaW9ucyI7cmV0dXJue3dpZHRoOnQsaGVpZ2h0Om59fWZ1bmN0aW9uIE1lKHIsZSl7ZS5jb2xvcnNwYWNlQ29udmVyc2lvbiE9PXZvaWQgMCYmci5waXhlbFN0b3JlaSh1YSxlLmNvbG9yc3BhY2VDb252ZXJzaW9uKSxlLnByZW11bHRpcGx5QWxwaGEhPT12b2lkIDAmJnIucGl4ZWxTdG9yZWkoY2EsZS5wcmVtdWx0aXBseUFscGhhKSxlLmZsaXBZIT09dm9pZCAwJiZyLnBpeGVsU3RvcmVpKGZhLGUuZmxpcFkpfWZ1bmN0aW9uIExuKHIpe3IucGl4ZWxTdG9yZWkoYnIsNCksVmUocikmJihyLnBpeGVsU3RvcmVpKFBuLDApLHIucGl4ZWxTdG9yZWkoa24sMCksci5waXhlbFN0b3JlaShEbiwwKSxyLnBpeGVsU3RvcmVpKENuLDApLHIucGl4ZWxTdG9yZWkoQm4sMCkpfWZ1bmN0aW9uIHh1KHIsZSx0LG4pe24ubWluTWFnJiYodC5jYWxsKHIsZSxncixuLm1pbk1hZyksdC5jYWxsKHIsZSx5cixuLm1pbk1hZykpLG4ubWluJiZ0LmNhbGwocixlLGdyLG4ubWluKSxuLm1hZyYmdC5jYWxsKHIsZSx5cixuLm1hZyksbi53cmFwJiYodC5jYWxsKHIsZSx2dCxuLndyYXApLHQuY2FsbChyLGUsRXQsbi53cmFwKSwoZT09PWJlfHxBcyhyLGUpKSYmdC5jYWxsKHIsZSxGbixuLndyYXApKSxuLndyYXBSJiZ0LmNhbGwocixlLEZuLG4ud3JhcFIpLG4ud3JhcFMmJnQuY2FsbChyLGUsdnQsbi53cmFwUyksbi53cmFwVCYmdC5jYWxsKHIsZSxFdCxuLndyYXBUKSxuLm1pbkxvZCE9PXZvaWQgMCYmdC5jYWxsKHIsZSxyYSxuLm1pbkxvZCksbi5tYXhMb2QhPT12b2lkIDAmJnQuY2FsbChyLGUsbmEsbi5tYXhMb2QpLG4uYmFzZUxldmVsIT09dm9pZCAwJiZ0LmNhbGwocixlLG9hLG4uYmFzZUxldmVsKSxuLm1heExldmVsIT09dm9pZCAwJiZ0LmNhbGwocixlLGlhLG4ubWF4TGV2ZWwpLG4uY29tcGFyZUZ1bmMhPT12b2lkIDAmJnQuY2FsbChyLGUsYWEsbi5jb21wYXJlRnVuYyksbi5jb21wYXJlTW9kZSE9PXZvaWQgMCYmdC5jYWxsKHIsZSxzYSxuLmNvbXBhcmVNb2RlKX1mdW5jdGlvbiB6bihyLGUsdCl7Y29uc3Qgbj10LnRhcmdldHx8c2U7ci5iaW5kVGV4dHVyZShuLGUpLHh1KHIsbixyLnRleFBhcmFtZXRlcmksdCl9ZnVuY3Rpb24gX3Uocil7cmV0dXJuIHI9cnx8aWUudGV4dHVyZUNvbG9yLEhlKHIpP3I6bmV3IFVpbnQ4QXJyYXkoW3JbMF0qMjU1LHJbMV0qMjU1LHJbMl0qMjU1LHJbM10qMjU1XSl9ZnVuY3Rpb24gdnIocixlLHQsbixvLGkpe3Q9dHx8aWUudGV4dHVyZU9wdGlvbnMsaT1pfHxSO2NvbnN0IHM9dC50YXJnZXR8fHNlO2lmKG49bnx8dC53aWR0aCxvPW98fHQuaGVpZ2h0LHIuYmluZFRleHR1cmUocyxlKSxndShyLG4sbyxpKSlyLmdlbmVyYXRlTWlwbWFwKHMpO2Vsc2V7Y29uc3QgYT15dShpKT9xczpRcztyLnRleFBhcmFtZXRlcmkocyxncixhKSxyLnRleFBhcmFtZXRlcmkocyx5cixhKSxyLnRleFBhcmFtZXRlcmkocyx2dCxfdCksci50ZXhQYXJhbWV0ZXJpKHMsRXQsX3QpfX1mdW5jdGlvbiBRZShyKXtyZXR1cm4gci5hdXRvPT09ITB8fHIuYXV0bz09PXZvaWQgMCYmci5sZXZlbD09PXZvaWQgMH1mdW5jdGlvbiBFcihyLGUpe3JldHVybiBlPWV8fHt9LGUuY3ViZUZhY2VPcmRlcnx8W3ByLEtzLEpzLFpzLGVhLHRhXX1mdW5jdGlvbiBUcihyLGUpe2NvbnN0IG49RXIocixlKS5tYXAoZnVuY3Rpb24obyxpKXtyZXR1cm57ZmFjZTpvLG5keDppfX0pO3JldHVybiBuLnNvcnQoZnVuY3Rpb24obyxpKXtyZXR1cm4gby5mYWNlLWkuZmFjZX0pLG59ZnVuY3Rpb24gR24ocixlLHQsbil7bj1ufHxpZS50ZXh0dXJlT3B0aW9ucztjb25zdCBvPW4udGFyZ2V0fHxzZSxpPW4ubGV2ZWx8fDA7bGV0IHM9dC53aWR0aCxhPXQuaGVpZ2h0O2NvbnN0IHU9bi5pbnRlcm5hbEZvcm1hdHx8bi5mb3JtYXR8fFIsZj1YZSh1KSxkPW4uZm9ybWF0fHxmLmZvcm1hdCxwPW4udHlwZXx8Zi50eXBlO2lmKE1lKHIsbiksci5iaW5kVGV4dHVyZShvLGUpLG89PT1hZSl7Y29uc3QgZz10LndpZHRoLGI9dC5oZWlnaHQ7bGV0IGgseDtpZihnLzY9PT1iKWg9Yix4PVswLDAsMSwwLDIsMCwzLDAsNCwwLDUsMF07ZWxzZSBpZihiLzY9PT1nKWg9Zyx4PVswLDAsMCwxLDAsMiwwLDMsMCw0LDAsNV07ZWxzZSBpZihnLzM9PT1iLzIpaD1nLzMseD1bMCwwLDEsMCwyLDAsMCwxLDEsMSwyLDFdO2Vsc2UgaWYoZy8yPT09Yi8zKWg9Zy8yLHg9WzAsMCwxLDAsMCwxLDEsMSwwLDIsMSwyXTtlbHNlIHRocm93ImNhbid0IGZpZ3VyZSBvdXQgY3ViZSBtYXAgZnJvbSBlbGVtZW50OiAiKyh0LnNyYz90LnNyYzp0Lm5vZGVOYW1lKTtjb25zdCBFPXduKCk7RT8oRS5jYW52YXMud2lkdGg9aCxFLmNhbnZhcy5oZWlnaHQ9aCxzPWgsYT1oLFRyKHIsbikuZm9yRWFjaChmdW5jdGlvbih2KXtjb25zdCBGPXhbdi5uZHgqMiswXSpoLGs9eFt2Lm5keCoyKzFdKmg7RS5kcmF3SW1hZ2UodCxGLGssaCxoLDAsMCxoLGgpLHIudGV4SW1hZ2UyRCh2LmZhY2UsaSx1LGQscCxFLmNhbnZhcyl9KSxFLmNhbnZhcy53aWR0aD0xLEUuY2FudmFzLmhlaWdodD0xKTp0eXBlb2YgY3JlYXRlSW1hZ2VCaXRtYXA8InUiJiYocz1oLGE9aCxUcihyLG4pLmZvckVhY2goZnVuY3Rpb24odil7Y29uc3QgRj14W3YubmR4KjIrMF0qaCxrPXhbdi5uZHgqMisxXSpoO3IudGV4SW1hZ2UyRCh2LmZhY2UsaSx1LGgsaCwwLGQscCxudWxsKSxjcmVhdGVJbWFnZUJpdG1hcCh0LEYsayxoLGgse3ByZW11bHRpcGx5QWxwaGE6Im5vbmUiLGNvbG9yU3BhY2VDb252ZXJzaW9uOiJub25lIn0pLnRoZW4oZnVuY3Rpb24oRyl7TWUocixuKSxyLmJpbmRUZXh0dXJlKG8sZSksci50ZXhJbWFnZTJEKHYuZmFjZSxpLHUsZCxwLEcpLFFlKG4pJiZ2cihyLGUsbixzLGEsdSl9KX0pKX1lbHNlIGlmKG89PT1iZXx8bz09PXhlKXtjb25zdCBnPU1hdGgubWluKHQud2lkdGgsdC5oZWlnaHQpLGI9TWF0aC5tYXgodC53aWR0aCx0LmhlaWdodCksaD1iL2c7aWYoaCUxIT09MCl0aHJvdyJjYW4gbm90IGNvbXB1dGUgM0QgZGltZW5zaW9ucyBvZiBlbGVtZW50Ijtjb25zdCB4PXQud2lkdGg9PT1iPzE6MCxFPXQuaGVpZ2h0PT09Yj8xOjA7ci5waXhlbFN0b3JlaShiciwxKSxyLnBpeGVsU3RvcmVpKFBuLHQud2lkdGgpLHIucGl4ZWxTdG9yZWkoa24sMCksci5waXhlbFN0b3JlaShCbiwwKSxyLnRleEltYWdlM0QobyxpLHUsZyxnLGcsMCxkLHAsbnVsbCk7Zm9yKGxldCB2PTA7djxoOysrdil7Y29uc3QgRj12KmcqeCxrPXYqZypFO3IucGl4ZWxTdG9yZWkoRG4sRiksci5waXhlbFN0b3JlaShDbixrKSxyLnRleFN1YkltYWdlM0QobyxpLDAsMCx2LGcsZywxLGQscCx0KX1MbihyKX1lbHNlIHIudGV4SW1hZ2UyRChvLGksdSxkLHAsdCk7UWUobikmJnZyKHIsZSxuLHMsYSx1KSx6bihyLGUsbil9ZnVuY3Rpb24gcWUoKXt9ZnVuY3Rpb24gdnUocil7aWYodHlwZW9mIGRvY3VtZW50PCJ1Iil7Y29uc3QgZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIik7cmV0dXJuIGUuaHJlZj1yLGUuaG9zdG5hbWU9PT1sb2NhdGlvbi5ob3N0bmFtZSYmZS5wb3J0PT09bG9jYXRpb24ucG9ydCYmZS5wcm90b2NvbD09PWxvY2F0aW9uLnByb3RvY29sfWVsc2V7Y29uc3QgZT1uZXcgVVJMKGxvY2F0aW9uLmhyZWYpLm9yaWdpbjtyZXR1cm4gbmV3IFVSTChyLGxvY2F0aW9uLmhyZWYpLm9yaWdpbj09PWV9fWZ1bmN0aW9uIEV1KHIsZSl7cmV0dXJuIGU9PT12b2lkIDAmJiF2dShyKT8iYW5vbnltb3VzIjplfWZ1bmN0aW9uIFR1KHIsZSx0KXt0PXR8fHFlO2xldCBuO2lmKGU9ZSE9PXZvaWQgMD9lOmllLmNyb3NzT3JpZ2luLGU9RXUocixlKSx0eXBlb2YgSW1hZ2U8InUiKXtuPW5ldyBJbWFnZSxlIT09dm9pZCAwJiYobi5jcm9zc09yaWdpbj1lKTtjb25zdCBvPWZ1bmN0aW9uKCl7bi5yZW1vdmVFdmVudExpc3RlbmVyKCJlcnJvciIsaSksbi5yZW1vdmVFdmVudExpc3RlbmVyKCJsb2FkIixzKSxuPW51bGx9LGk9ZnVuY3Rpb24oKXtjb25zdCB1PSJjb3VsZG4ndCBsb2FkIGltYWdlOiAiK3I7cG4odSksdCh1LG4pLG8oKX0scz1mdW5jdGlvbigpe3QobnVsbCxuKSxvKCl9O3JldHVybiBuLmFkZEV2ZW50TGlzdGVuZXIoImVycm9yIixpKSxuLmFkZEV2ZW50TGlzdGVuZXIoImxvYWQiLHMpLG4uc3JjPXIsbn1lbHNlIGlmKHR5cGVvZiBJbWFnZUJpdG1hcDwidSIpe2xldCBvLGk7Y29uc3Qgcz1mdW5jdGlvbigpe3QobyxpKX0sYT17fTtlJiYoYS5tb2RlPSJjb3JzIiksZmV0Y2gocixhKS50aGVuKGZ1bmN0aW9uKHUpe2lmKCF1Lm9rKXRocm93IHU7cmV0dXJuIHUuYmxvYigpfSkudGhlbihmdW5jdGlvbih1KXtyZXR1cm4gY3JlYXRlSW1hZ2VCaXRtYXAodSx7cHJlbXVsdGlwbHlBbHBoYToibm9uZSIsY29sb3JTcGFjZUNvbnZlcnNpb246Im5vbmUifSl9KS50aGVuKGZ1bmN0aW9uKHUpe2k9dSxzZXRUaW1lb3V0KHMpfSkuY2F0Y2goZnVuY3Rpb24odSl7bz11LHNldFRpbWVvdXQocyl9KSxuPW51bGx9cmV0dXJuIG59ZnVuY3Rpb24gJG4ocil7cmV0dXJuIHR5cGVvZiBJbWFnZUJpdG1hcDwidSImJnIgaW5zdGFuY2VvZiBJbWFnZUJpdG1hcHx8dHlwZW9mIEltYWdlRGF0YTwidSImJnIgaW5zdGFuY2VvZiBJbWFnZURhdGF8fHR5cGVvZiBIVE1MRWxlbWVudDwidSImJnIgaW5zdGFuY2VvZiBIVE1MRWxlbWVudH1mdW5jdGlvbiB3cihyLGUsdCl7cmV0dXJuICRuKHIpPyhzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dChudWxsLHIpfSkscik6VHUocixlLHQpfWZ1bmN0aW9uIEFyKHIsZSx0KXt0PXR8fGllLnRleHR1cmVPcHRpb25zO2NvbnN0IG49dC50YXJnZXR8fHNlO2lmKHIuYmluZFRleHR1cmUobixlKSx0LmNvbG9yPT09ITEpcmV0dXJuO2NvbnN0IG89X3UodC5jb2xvcik7aWYobj09PWFlKWZvcihsZXQgaT0wO2k8NjsrK2kpci50ZXhJbWFnZTJEKHByK2ksMCxSLDEsMSwwLFIsUyxvKTtlbHNlIG49PT1iZXx8bj09PXhlP3IudGV4SW1hZ2UzRChuLDAsUiwxLDEsMSwwLFIsUyxvKTpyLnRleEltYWdlMkQobiwwLFIsMSwxLDAsUixTLG8pfWZ1bmN0aW9uIHd1KHIsZSx0LG4pe3JldHVybiBuPW58fHFlLHQ9dHx8aWUudGV4dHVyZU9wdGlvbnMsQXIocixlLHQpLHQ9T2JqZWN0LmFzc2lnbih7fSx0KSx3cih0LnNyYyx0LmNyb3NzT3JpZ2luLGZ1bmN0aW9uKGkscyl7aT9uKGksZSxzKTooR24ocixlLHMsdCksbihudWxsLGUscykpfSl9ZnVuY3Rpb24gQXUocixlLHQsbil7bj1ufHxxZTtjb25zdCBvPXQuc3JjO2lmKG8ubGVuZ3RoIT09Nil0aHJvdyJ0aGVyZSBtdXN0IGJlIDYgdXJscyBmb3IgYSBjdWJlbWFwIjtjb25zdCBpPXQubGV2ZWx8fDAscz10LmludGVybmFsRm9ybWF0fHx0LmZvcm1hdHx8UixhPVhlKHMpLHU9dC5mb3JtYXR8fGEuZm9ybWF0LGY9dC50eXBlfHxTLGQ9dC50YXJnZXR8fHNlO2lmKGQhPT1hZSl0aHJvdyJ0YXJnZXQgbXVzdCBiZSBURVhUVVJFX0NVQkVfTUFQIjtBcihyLGUsdCksdD1PYmplY3QuYXNzaWduKHt9LHQpO2xldCBwPTY7Y29uc3QgZz1bXSxiPUVyKHIsdCk7bGV0IGg7ZnVuY3Rpb24geChFKXtyZXR1cm4gZnVuY3Rpb24odixGKXstLXAsdj9nLnB1c2godik6Ri53aWR0aCE9PUYuaGVpZ2h0P2cucHVzaCgiY3ViZW1hcCBmYWNlIGltZyBpcyBub3QgYSBzcXVhcmU6ICIrRi5zcmMpOihNZShyLHQpLHIuYmluZFRleHR1cmUoZCxlKSxwPT09NT9FcigpLmZvckVhY2goZnVuY3Rpb24oayl7ci50ZXhJbWFnZTJEKGssaSxzLHUsZixGKX0pOnIudGV4SW1hZ2UyRChFLGkscyx1LGYsRiksUWUodCkmJnIuZ2VuZXJhdGVNaXBtYXAoZCkpLHA9PT0wJiZuKGcubGVuZ3RoP2c6dm9pZCAwLGUsaCl9fWg9by5tYXAoZnVuY3Rpb24oRSx2KXtyZXR1cm4gd3IoRSx0LmNyb3NzT3JpZ2luLHgoYlt2XSkpfSl9ZnVuY3Rpb24gSXUocixlLHQsbil7bj1ufHxxZTtjb25zdCBvPXQuc3JjLGk9dC5pbnRlcm5hbEZvcm1hdHx8dC5mb3JtYXR8fFIscz1YZShpKSxhPXQuZm9ybWF0fHxzLmZvcm1hdCx1PXQudHlwZXx8UyxmPXQudGFyZ2V0fHx4ZTtpZihmIT09YmUmJmYhPT14ZSl0aHJvdyJ0YXJnZXQgbXVzdCBiZSBURVhUVVJFXzNEIG9yIFRFWFRVUkVfMkRfQVJSQVkiO0FyKHIsZSx0KSx0PU9iamVjdC5hc3NpZ24oe30sdCk7bGV0IGQ9by5sZW5ndGg7Y29uc3QgcD1bXTtsZXQgZztjb25zdCBiPXQubGV2ZWx8fDA7bGV0IGg9dC53aWR0aCx4PXQuaGVpZ2h0O2NvbnN0IEU9by5sZW5ndGg7bGV0IHY9ITA7ZnVuY3Rpb24gRihrKXtyZXR1cm4gZnVuY3Rpb24oRyx6KXtpZigtLWQsRylwLnB1c2goRyk7ZWxzZXtpZihNZShyLHQpLHIuYmluZFRleHR1cmUoZixlKSx2KXt2PSExLGg9dC53aWR0aHx8ei53aWR0aCx4PXQuaGVpZ2h0fHx6LmhlaWdodCxyLnRleEltYWdlM0QoZixiLGksaCx4LEUsMCxhLHUsbnVsbCk7Zm9yKGxldCBIPTA7SDxFOysrSClyLnRleFN1YkltYWdlM0QoZixiLDAsMCxILGgseCwxLGEsdSx6KX1lbHNle2xldCBIPXosJDsoei53aWR0aCE9PWh8fHouaGVpZ2h0IT09eCkmJigkPXduKCksSD0kLmNhbnZhcywkLmNhbnZhcy53aWR0aD1oLCQuY2FudmFzLmhlaWdodD14LCQuZHJhd0ltYWdlKHosMCwwLGgseCkpLHIudGV4U3ViSW1hZ2UzRChmLGIsMCwwLGssaCx4LDEsYSx1LEgpLCQmJkg9PT0kLmNhbnZhcyYmKCQuY2FudmFzLndpZHRoPTAsJC5jYW52YXMuaGVpZ2h0PTApfVFlKHQpJiZyLmdlbmVyYXRlTWlwbWFwKGYpfWQ9PT0wJiZuKHAubGVuZ3RoP3A6dm9pZCAwLGUsZyl9fWc9by5tYXAoZnVuY3Rpb24oayxHKXtyZXR1cm4gd3Ioayx0LmNyb3NzT3JpZ2luLEYoRykpfSl9ZnVuY3Rpb24gU3UocixlLHQsbil7bj1ufHxpZS50ZXh0dXJlT3B0aW9ucztjb25zdCBvPW4udGFyZ2V0fHxzZTtyLmJpbmRUZXh0dXJlKG8sZSk7bGV0IGk9bi53aWR0aCxzPW4uaGVpZ2h0LGE9bi5kZXB0aDtjb25zdCB1PW4ubGV2ZWx8fDAsZj1uLmludGVybmFsRm9ybWF0fHxuLmZvcm1hdHx8UixkPVhlKGYpLHA9bi5mb3JtYXR8fGQuZm9ybWF0LGc9bi50eXBlfHxidShyLHQsZC50eXBlKTtpZihIZSh0KSl0IGluc3RhbmNlb2YgVWludDhDbGFtcGVkQXJyYXkmJih0PW5ldyBVaW50OEFycmF5KHQuYnVmZmVyKSk7ZWxzZXtjb25zdCBFPW1uKGcpO3Q9bmV3IEUodCl9Y29uc3QgYj1wdShmLGcpLGg9dC5ieXRlTGVuZ3RoL2I7aWYoaCUxKXRocm93Imxlbmd0aCB3cm9uZyBzaXplIGZvciBmb3JtYXQ6ICIrVG4ocixwKTtsZXQgeDtpZihvPT09YmV8fG89PT14ZSlpZighaSYmIXMmJiFhKXtjb25zdCBFPU1hdGguY2JydChoKTtpZihFJTEhPT0wKXRocm93ImNhbid0IGd1ZXNzIGN1YmUgc2l6ZSBvZiBhcnJheSBvZiBudW1FbGVtZW50czogIitoO2k9RSxzPUUsYT1FfWVsc2UgaSYmKCFzfHwhYSk/KHg9UnQocixvLHMsYSxoL2kpLHM9eC53aWR0aCxhPXguaGVpZ2h0KTpzJiYoIWl8fCFhKT8oeD1SdChyLG8saSxhLGgvcyksaT14LndpZHRoLGE9eC5oZWlnaHQpOih4PVJ0KHIsbyxpLHMsaC9hKSxpPXgud2lkdGgscz14LmhlaWdodCk7ZWxzZSB4PVJ0KHIsbyxpLHMsaCksaT14LndpZHRoLHM9eC5oZWlnaHQ7aWYoTG4ociksci5waXhlbFN0b3JlaShicixuLnVucGFja0FsaWdubWVudHx8MSksTWUocixuKSxvPT09YWUpe2NvbnN0IEU9Yi90LkJZVEVTX1BFUl9FTEVNRU5ULHY9aC82KkU7VHIocixuKS5mb3JFYWNoKEY9Pntjb25zdCBrPXYqRi5uZHgsRz10LnN1YmFycmF5KGssayt2KTtyLnRleEltYWdlMkQoRi5mYWNlLHUsZixpLHMsMCxwLGcsRyl9KX1lbHNlIG89PT1iZXx8bz09PXhlP3IudGV4SW1hZ2UzRChvLHUsZixpLHMsYSwwLHAsZyx0KTpyLnRleEltYWdlMkQobyx1LGYsaSxzLDAscCxnLHQpO3JldHVybnt3aWR0aDppLGhlaWdodDpzLGRlcHRoOmEsdHlwZTpnfX1mdW5jdGlvbiBSdShyLGUsdCl7Y29uc3Qgbj10LnRhcmdldHx8c2U7ci5iaW5kVGV4dHVyZShuLGUpO2NvbnN0IG89dC5sZXZlbHx8MCxpPXQuaW50ZXJuYWxGb3JtYXR8fHQuZm9ybWF0fHxSLHM9WGUoaSksYT10LmZvcm1hdHx8cy5mb3JtYXQsdT10LnR5cGV8fHMudHlwZTtpZihNZShyLHQpLG49PT1hZSlmb3IobGV0IGY9MDtmPDY7KytmKXIudGV4SW1hZ2UyRChwcitmLG8saSx0LndpZHRoLHQuaGVpZ2h0LDAsYSx1LG51bGwpO2Vsc2Ugbj09PWJlfHxuPT09eGU/ci50ZXhJbWFnZTNEKG4sbyxpLHQud2lkdGgsdC5oZWlnaHQsdC5kZXB0aCwwLGEsdSxudWxsKTpyLnRleEltYWdlMkQobixvLGksdC53aWR0aCx0LmhlaWdodCwwLGEsdSxudWxsKX1mdW5jdGlvbiBXbihyLGUsdCl7dD10fHxxZSxlPWV8fGllLnRleHR1cmVPcHRpb25zO2NvbnN0IG49ci5jcmVhdGVUZXh0dXJlKCksbz1lLnRhcmdldHx8c2U7bGV0IGk9ZS53aWR0aHx8MSxzPWUuaGVpZ2h0fHwxO2NvbnN0IGE9ZS5pbnRlcm5hbEZvcm1hdHx8UjtyLmJpbmRUZXh0dXJlKG8sbiksbz09PWFlJiYoci50ZXhQYXJhbWV0ZXJpKG8sdnQsX3QpLHIudGV4UGFyYW1ldGVyaShvLEV0LF90KSk7bGV0IHU9ZS5zcmM7aWYodSlpZih0eXBlb2YgdT09ImZ1bmN0aW9uIiYmKHU9dShyLGUpKSx0eXBlb2YgdT09InN0cmluZyIpd3UocixuLGUsdCk7ZWxzZSBpZihIZSh1KXx8QXJyYXkuaXNBcnJheSh1KSYmKHR5cGVvZiB1WzBdPT0ibnVtYmVyInx8QXJyYXkuaXNBcnJheSh1WzBdKXx8SGUodVswXSkpKXtjb25zdCBmPVN1KHIsbix1LGUpO2k9Zi53aWR0aCxzPWYuaGVpZ2h0fWVsc2UgQXJyYXkuaXNBcnJheSh1KSYmKHR5cGVvZiB1WzBdPT0ic3RyaW5nInx8JG4odVswXSkpP289PT1hZT9BdShyLG4sZSx0KTpJdShyLG4sZSx0KTooR24ocixuLHUsZSksaT11LndpZHRoLHM9dS5oZWlnaHQpO2Vsc2UgUnUocixuLGUpO3JldHVybiBRZShlKSYmdnIocixuLGUsaSxzLGEpLHpuKHIsbixlKSxufWNvbnN0IElyPXBuO2Z1bmN0aW9uIFZuKHIpe3JldHVybiB0eXBlb2YgZG9jdW1lbnQ8InUiJiZkb2N1bWVudC5nZXRFbGVtZW50QnlJZD9kb2N1bWVudC5nZXRFbGVtZW50QnlJZChyKTpudWxsfWNvbnN0IEZ0PTMzOTg0LFB0PTM0OTYyLEZ1PTM0OTYzLFB1PTM1NzEzLGt1PTM1NzE0LER1PTM1NjMyLEN1PTM1NjMzLEJ1PTM1OTgxLEhuPTM1NzE4LE11PTM1NzIxLE91PTM1OTcxLFV1PTM1MzgyLE51PTM1Mzk2LEx1PTM1Mzk4LHp1PTM1MzkyLEd1PTM1Mzk1LGt0PTUxMjYsam49MzU2NjQsWW49MzU2NjUsWG49MzU2NjYsU3I9NTEyNCxRbj0zNTY2Nyxxbj0zNTY2OCxLbj0zNTY2OSxKbj0zNTY3MCxabj0zNTY3MSxlbz0zNTY3Mix0bz0zNTY3Myxybz0zNTY3NCxubz0zNTY3NSxvbz0zNTY3NiwkdT0zNTY3OCxXdT0zNTY4MCxWdT0zNTY3OSxIdT0zNTY4MixqdT0zNTY4NSxZdT0zNTY4NixYdT0zNTY4NyxRdT0zNTY4OCxxdT0zNTY4OSxLdT0zNTY5MCxKdT0zNjI4OSxadT0zNjI5MixlYz0zNjI5MyxScj01MTI1LGlvPTM2Mjk0LHNvPTM2Mjk1LGFvPTM2Mjk2LHRjPTM2Mjk4LHJjPTM2Mjk5LG5jPTM2MzAwLG9jPTM2MzAzLGljPTM2MzA2LHNjPTM2MzA3LGFjPTM2MzA4LHVjPTM2MzExLER0PTM1NTMsQ3Q9MzQwNjcsRnI9MzI4NzksQnQ9MzU4NjYsXz17fTtmdW5jdGlvbiB1byhyLGUpe3JldHVybiBfW2VdLmJpbmRQb2ludH1mdW5jdGlvbiBjYyhyLGUpe3JldHVybiBmdW5jdGlvbih0KXtyLnVuaWZvcm0xZihlLHQpfX1mdW5jdGlvbiBmYyhyLGUpe3JldHVybiBmdW5jdGlvbih0KXtyLnVuaWZvcm0xZnYoZSx0KX19ZnVuY3Rpb24gbGMocixlKXtyZXR1cm4gZnVuY3Rpb24odCl7ci51bmlmb3JtMmZ2KGUsdCl9fWZ1bmN0aW9uIGRjKHIsZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3IudW5pZm9ybTNmdihlLHQpfX1mdW5jdGlvbiBoYyhyLGUpe3JldHVybiBmdW5jdGlvbih0KXtyLnVuaWZvcm00ZnYoZSx0KX19ZnVuY3Rpb24gY28ocixlKXtyZXR1cm4gZnVuY3Rpb24odCl7ci51bmlmb3JtMWkoZSx0KX19ZnVuY3Rpb24gZm8ocixlKXtyZXR1cm4gZnVuY3Rpb24odCl7ci51bmlmb3JtMWl2KGUsdCl9fWZ1bmN0aW9uIGxvKHIsZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3IudW5pZm9ybTJpdihlLHQpfX1mdW5jdGlvbiBobyhyLGUpe3JldHVybiBmdW5jdGlvbih0KXtyLnVuaWZvcm0zaXYoZSx0KX19ZnVuY3Rpb24gbW8ocixlKXtyZXR1cm4gZnVuY3Rpb24odCl7ci51bmlmb3JtNGl2KGUsdCl9fWZ1bmN0aW9uIG1jKHIsZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3IudW5pZm9ybTF1aShlLHQpfX1mdW5jdGlvbiBwYyhyLGUpe3JldHVybiBmdW5jdGlvbih0KXtyLnVuaWZvcm0xdWl2KGUsdCl9fWZ1bmN0aW9uIGdjKHIsZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3IudW5pZm9ybTJ1aXYoZSx0KX19ZnVuY3Rpb24geWMocixlKXtyZXR1cm4gZnVuY3Rpb24odCl7ci51bmlmb3JtM3VpdihlLHQpfX1mdW5jdGlvbiBiYyhyLGUpe3JldHVybiBmdW5jdGlvbih0KXtyLnVuaWZvcm00dWl2KGUsdCl9fWZ1bmN0aW9uIHhjKHIsZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3IudW5pZm9ybU1hdHJpeDJmdihlLCExLHQpfX1mdW5jdGlvbiBfYyhyLGUpe3JldHVybiBmdW5jdGlvbih0KXtyLnVuaWZvcm1NYXRyaXgzZnYoZSwhMSx0KX19ZnVuY3Rpb24gdmMocixlKXtyZXR1cm4gZnVuY3Rpb24odCl7ci51bmlmb3JtTWF0cml4NGZ2KGUsITEsdCl9fWZ1bmN0aW9uIEVjKHIsZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3IudW5pZm9ybU1hdHJpeDJ4M2Z2KGUsITEsdCl9fWZ1bmN0aW9uIFRjKHIsZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3IudW5pZm9ybU1hdHJpeDN4MmZ2KGUsITEsdCl9fWZ1bmN0aW9uIHdjKHIsZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3IudW5pZm9ybU1hdHJpeDJ4NGZ2KGUsITEsdCl9fWZ1bmN0aW9uIEFjKHIsZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3IudW5pZm9ybU1hdHJpeDR4MmZ2KGUsITEsdCl9fWZ1bmN0aW9uIEljKHIsZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3IudW5pZm9ybU1hdHJpeDN4NGZ2KGUsITEsdCl9fWZ1bmN0aW9uIFNjKHIsZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3IudW5pZm9ybU1hdHJpeDR4M2Z2KGUsITEsdCl9fWZ1bmN0aW9uIE4ocixlLHQsbil7Y29uc3Qgbz11byhyLGUpO3JldHVybiBWZShyKT9mdW5jdGlvbihpKXtsZXQgcyxhOyFpfHxkcihyLGkpPyhzPWksYT1udWxsKToocz1pLnRleHR1cmUsYT1pLnNhbXBsZXIpLHIudW5pZm9ybTFpKG4sdCksci5hY3RpdmVUZXh0dXJlKEZ0K3QpLHIuYmluZFRleHR1cmUobyxzKSxyLmJpbmRTYW1wbGVyKHQsYSl9OmZ1bmN0aW9uKGkpe3IudW5pZm9ybTFpKG4sdCksci5hY3RpdmVUZXh0dXJlKEZ0K3QpLHIuYmluZFRleHR1cmUobyxpKX19ZnVuY3Rpb24gTChyLGUsdCxuLG8pe2NvbnN0IGk9dW8ocixlKSxzPW5ldyBJbnQzMkFycmF5KG8pO2ZvcihsZXQgYT0wO2E8bzsrK2Epc1thXT10K2E7cmV0dXJuIFZlKHIpP2Z1bmN0aW9uKGEpe3IudW5pZm9ybTFpdihuLHMpLGEuZm9yRWFjaChmdW5jdGlvbih1LGYpe3IuYWN0aXZlVGV4dHVyZShGdCtzW2ZdKTtsZXQgZCxwOyF1fHxkcihyLHUpPyhkPXUscD1udWxsKTooZD11LnRleHR1cmUscD11LnNhbXBsZXIpLHIuYmluZFNhbXBsZXIodCxwKSxyLmJpbmRUZXh0dXJlKGksZCl9KX06ZnVuY3Rpb24oYSl7ci51bmlmb3JtMWl2KG4scyksYS5mb3JFYWNoKGZ1bmN0aW9uKHUsZil7ci5hY3RpdmVUZXh0dXJlKEZ0K3NbZl0pLHIuYmluZFRleHR1cmUoaSx1KX0pfX1fW2t0XT17VHlwZTpGbG9hdDMyQXJyYXksc2l6ZTo0LHNldHRlcjpjYyxhcnJheVNldHRlcjpmY30sX1tqbl09e1R5cGU6RmxvYXQzMkFycmF5LHNpemU6OCxzZXR0ZXI6bGMsY29sczoyfSxfW1luXT17VHlwZTpGbG9hdDMyQXJyYXksc2l6ZToxMixzZXR0ZXI6ZGMsY29sczozfSxfW1huXT17VHlwZTpGbG9hdDMyQXJyYXksc2l6ZToxNixzZXR0ZXI6aGMsY29sczo0fSxfW1NyXT17VHlwZTpJbnQzMkFycmF5LHNpemU6NCxzZXR0ZXI6Y28sYXJyYXlTZXR0ZXI6Zm99LF9bUW5dPXtUeXBlOkludDMyQXJyYXksc2l6ZTo4LHNldHRlcjpsbyxjb2xzOjJ9LF9bcW5dPXtUeXBlOkludDMyQXJyYXksc2l6ZToxMixzZXR0ZXI6aG8sY29sczozfSxfW0tuXT17VHlwZTpJbnQzMkFycmF5LHNpemU6MTYsc2V0dGVyOm1vLGNvbHM6NH0sX1tScl09e1R5cGU6VWludDMyQXJyYXksc2l6ZTo0LHNldHRlcjptYyxhcnJheVNldHRlcjpwY30sX1tpb109e1R5cGU6VWludDMyQXJyYXksc2l6ZTo4LHNldHRlcjpnYyxjb2xzOjJ9LF9bc29dPXtUeXBlOlVpbnQzMkFycmF5LHNpemU6MTIsc2V0dGVyOnljLGNvbHM6M30sX1thb109e1R5cGU6VWludDMyQXJyYXksc2l6ZToxNixzZXR0ZXI6YmMsY29sczo0fSxfW0puXT17VHlwZTpVaW50MzJBcnJheSxzaXplOjQsc2V0dGVyOmNvLGFycmF5U2V0dGVyOmZvfSxfW1puXT17VHlwZTpVaW50MzJBcnJheSxzaXplOjgsc2V0dGVyOmxvLGNvbHM6Mn0sX1tlb109e1R5cGU6VWludDMyQXJyYXksc2l6ZToxMixzZXR0ZXI6aG8sY29sczozfSxfW3RvXT17VHlwZTpVaW50MzJBcnJheSxzaXplOjE2LHNldHRlcjptbyxjb2xzOjR9LF9bcm9dPXtUeXBlOkZsb2F0MzJBcnJheSxzaXplOjMyLHNldHRlcjp4Yyxyb3dzOjIsY29sczoyfSxfW25vXT17VHlwZTpGbG9hdDMyQXJyYXksc2l6ZTo0OCxzZXR0ZXI6X2Mscm93czozLGNvbHM6M30sX1tvb109e1R5cGU6RmxvYXQzMkFycmF5LHNpemU6NjQsc2V0dGVyOnZjLHJvd3M6NCxjb2xzOjR9LF9banVdPXtUeXBlOkZsb2F0MzJBcnJheSxzaXplOjMyLHNldHRlcjpFYyxyb3dzOjIsY29sczozfSxfW1l1XT17VHlwZTpGbG9hdDMyQXJyYXksc2l6ZTozMixzZXR0ZXI6d2Mscm93czoyLGNvbHM6NH0sX1tYdV09e1R5cGU6RmxvYXQzMkFycmF5LHNpemU6NDgsc2V0dGVyOlRjLHJvd3M6Myxjb2xzOjJ9LF9bUXVdPXtUeXBlOkZsb2F0MzJBcnJheSxzaXplOjQ4LHNldHRlcjpJYyxyb3dzOjMsY29sczo0fSxfW3F1XT17VHlwZTpGbG9hdDMyQXJyYXksc2l6ZTo2NCxzZXR0ZXI6QWMscm93czo0LGNvbHM6Mn0sX1tLdV09e1R5cGU6RmxvYXQzMkFycmF5LHNpemU6NjQsc2V0dGVyOlNjLHJvd3M6NCxjb2xzOjN9LF9bJHVdPXtUeXBlOm51bGwsc2l6ZTowLHNldHRlcjpOLGFycmF5U2V0dGVyOkwsYmluZFBvaW50OkR0fSxfW1d1XT17VHlwZTpudWxsLHNpemU6MCxzZXR0ZXI6TixhcnJheVNldHRlcjpMLGJpbmRQb2ludDpDdH0sX1tWdV09e1R5cGU6bnVsbCxzaXplOjAsc2V0dGVyOk4sYXJyYXlTZXR0ZXI6TCxiaW5kUG9pbnQ6RnJ9LF9bSHVdPXtUeXBlOm51bGwsc2l6ZTowLHNldHRlcjpOLGFycmF5U2V0dGVyOkwsYmluZFBvaW50OkR0fSxfW0p1XT17VHlwZTpudWxsLHNpemU6MCxzZXR0ZXI6TixhcnJheVNldHRlcjpMLGJpbmRQb2ludDpCdH0sX1tadV09e1R5cGU6bnVsbCxzaXplOjAsc2V0dGVyOk4sYXJyYXlTZXR0ZXI6TCxiaW5kUG9pbnQ6QnR9LF9bZWNdPXtUeXBlOm51bGwsc2l6ZTowLHNldHRlcjpOLGFycmF5U2V0dGVyOkwsYmluZFBvaW50OkN0fSxfW3RjXT17VHlwZTpudWxsLHNpemU6MCxzZXR0ZXI6TixhcnJheVNldHRlcjpMLGJpbmRQb2ludDpEdH0sX1tyY109e1R5cGU6bnVsbCxzaXplOjAsc2V0dGVyOk4sYXJyYXlTZXR0ZXI6TCxiaW5kUG9pbnQ6RnJ9LF9bbmNdPXtUeXBlOm51bGwsc2l6ZTowLHNldHRlcjpOLGFycmF5U2V0dGVyOkwsYmluZFBvaW50OkN0fSxfW29jXT17VHlwZTpudWxsLHNpemU6MCxzZXR0ZXI6TixhcnJheVNldHRlcjpMLGJpbmRQb2ludDpCdH0sX1tpY109e1R5cGU6bnVsbCxzaXplOjAsc2V0dGVyOk4sYXJyYXlTZXR0ZXI6TCxiaW5kUG9pbnQ6RHR9LF9bc2NdPXtUeXBlOm51bGwsc2l6ZTowLHNldHRlcjpOLGFycmF5U2V0dGVyOkwsYmluZFBvaW50OkZyfSxfW2FjXT17VHlwZTpudWxsLHNpemU6MCxzZXR0ZXI6TixhcnJheVNldHRlcjpMLGJpbmRQb2ludDpDdH0sX1t1Y109e1R5cGU6bnVsbCxzaXplOjAsc2V0dGVyOk4sYXJyYXlTZXR0ZXI6TCxiaW5kUG9pbnQ6QnR9O2Z1bmN0aW9uIE10KHIsZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe2lmKHQudmFsdWUpc3dpdGNoKHIuZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KGUpLHQudmFsdWUubGVuZ3RoKXtjYXNlIDQ6ci52ZXJ0ZXhBdHRyaWI0ZnYoZSx0LnZhbHVlKTticmVhaztjYXNlIDM6ci52ZXJ0ZXhBdHRyaWIzZnYoZSx0LnZhbHVlKTticmVhaztjYXNlIDI6ci52ZXJ0ZXhBdHRyaWIyZnYoZSx0LnZhbHVlKTticmVhaztjYXNlIDE6ci52ZXJ0ZXhBdHRyaWIxZnYoZSx0LnZhbHVlKTticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigidGhlIGxlbmd0aCBvZiBhIGZsb2F0IGNvbnN0YW50IHZhbHVlIG11c3QgYmUgYmV0d2VlbiAxIGFuZCA0ISIpfWVsc2Ugci5iaW5kQnVmZmVyKFB0LHQuYnVmZmVyKSxyLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KGUpLHIudmVydGV4QXR0cmliUG9pbnRlcihlLHQubnVtQ29tcG9uZW50c3x8dC5zaXplLHQudHlwZXx8a3QsdC5ub3JtYWxpemV8fCExLHQuc3RyaWRlfHwwLHQub2Zmc2V0fHwwKSxyLnZlcnRleEF0dHJpYkRpdmlzb3ImJnIudmVydGV4QXR0cmliRGl2aXNvcihlLHQuZGl2aXNvcnx8MCl9fWZ1bmN0aW9uIGNlKHIsZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe2lmKHQudmFsdWUpaWYoci5kaXNhYmxlVmVydGV4QXR0cmliQXJyYXkoZSksdC52YWx1ZS5sZW5ndGg9PT00KXIudmVydGV4QXR0cmliNGl2KGUsdC52YWx1ZSk7ZWxzZSB0aHJvdyBuZXcgRXJyb3IoIlRoZSBsZW5ndGggb2YgYW4gaW50ZWdlciBjb25zdGFudCB2YWx1ZSBtdXN0IGJlIDQhIik7ZWxzZSByLmJpbmRCdWZmZXIoUHQsdC5idWZmZXIpLHIuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoZSksci52ZXJ0ZXhBdHRyaWJJUG9pbnRlcihlLHQubnVtQ29tcG9uZW50c3x8dC5zaXplLHQudHlwZXx8U3IsdC5zdHJpZGV8fDAsdC5vZmZzZXR8fDApLHIudmVydGV4QXR0cmliRGl2aXNvciYmci52ZXJ0ZXhBdHRyaWJEaXZpc29yKGUsdC5kaXZpc29yfHwwKX19ZnVuY3Rpb24gT3QocixlKXtyZXR1cm4gZnVuY3Rpb24odCl7aWYodC52YWx1ZSlpZihyLmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShlKSx0LnZhbHVlLmxlbmd0aD09PTQpci52ZXJ0ZXhBdHRyaWI0dWl2KGUsdC52YWx1ZSk7ZWxzZSB0aHJvdyBuZXcgRXJyb3IoIlRoZSBsZW5ndGggb2YgYW4gdW5zaWduZWQgaW50ZWdlciBjb25zdGFudCB2YWx1ZSBtdXN0IGJlIDQhIik7ZWxzZSByLmJpbmRCdWZmZXIoUHQsdC5idWZmZXIpLHIuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoZSksci52ZXJ0ZXhBdHRyaWJJUG9pbnRlcihlLHQubnVtQ29tcG9uZW50c3x8dC5zaXplLHQudHlwZXx8UnIsdC5zdHJpZGV8fDAsdC5vZmZzZXR8fDApLHIudmVydGV4QXR0cmliRGl2aXNvciYmci52ZXJ0ZXhBdHRyaWJEaXZpc29yKGUsdC5kaXZpc29yfHwwKX19ZnVuY3Rpb24gUHIocixlLHQpe2NvbnN0IG49dC5zaXplLG89dC5jb3VudDtyZXR1cm4gZnVuY3Rpb24oaSl7ci5iaW5kQnVmZmVyKFB0LGkuYnVmZmVyKTtjb25zdCBzPWkuc2l6ZXx8aS5udW1Db21wb25lbnRzfHxuLGE9cy9vLHU9aS50eXBlfHxrdCxkPV9bdV0uc2l6ZSpzLHA9aS5ub3JtYWxpemV8fCExLGc9aS5vZmZzZXR8fDAsYj1kL287Zm9yKGxldCBoPTA7aDxvOysraClyLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KGUraCksci52ZXJ0ZXhBdHRyaWJQb2ludGVyKGUraCxhLHUscCxkLGcrYipoKSxyLnZlcnRleEF0dHJpYkRpdmlzb3ImJnIudmVydGV4QXR0cmliRGl2aXNvcihlK2gsaS5kaXZpc29yfHwwKX19Y29uc3QgUD17fTtQW2t0XT17c2l6ZTo0LHNldHRlcjpNdH0sUFtqbl09e3NpemU6OCxzZXR0ZXI6TXR9LFBbWW5dPXtzaXplOjEyLHNldHRlcjpNdH0sUFtYbl09e3NpemU6MTYsc2V0dGVyOk10fSxQW1NyXT17c2l6ZTo0LHNldHRlcjpjZX0sUFtRbl09e3NpemU6OCxzZXR0ZXI6Y2V9LFBbcW5dPXtzaXplOjEyLHNldHRlcjpjZX0sUFtLbl09e3NpemU6MTYsc2V0dGVyOmNlfSxQW1JyXT17c2l6ZTo0LHNldHRlcjpPdH0sUFtpb109e3NpemU6OCxzZXR0ZXI6T3R9LFBbc29dPXtzaXplOjEyLHNldHRlcjpPdH0sUFthb109e3NpemU6MTYsc2V0dGVyOk90fSxQW0puXT17c2l6ZTo0LHNldHRlcjpjZX0sUFtabl09e3NpemU6OCxzZXR0ZXI6Y2V9LFBbZW9dPXtzaXplOjEyLHNldHRlcjpjZX0sUFt0b109e3NpemU6MTYsc2V0dGVyOmNlfSxQW3JvXT17c2l6ZTo0LHNldHRlcjpQcixjb3VudDoyfSxQW25vXT17c2l6ZTo5LHNldHRlcjpQcixjb3VudDozfSxQW29vXT17c2l6ZToxNixzZXR0ZXI6UHIsY291bnQ6NH07Y29uc3QgUmM9L0VSUk9SOlxzKlxkKzooXGQrKS9naTtmdW5jdGlvbiBGYyhyLGU9IiIsdD0wKXtjb25zdCBuPVsuLi5lLm1hdGNoQWxsKFJjKV0sbz1uZXcgTWFwKG4ubWFwKChpLHMpPT57Y29uc3QgYT1wYXJzZUludChpWzFdKSx1PW5bcysxXSxmPXU/dS5pbmRleDplLmxlbmd0aCxkPWUuc3Vic3RyaW5nKGkuaW5kZXgsZik7cmV0dXJuW2EtMSxkXX0pKTtyZXR1cm4gci5zcGxpdChgCmApLm1hcCgoaSxzKT0+e2NvbnN0IGE9by5nZXQocyk7cmV0dXJuYCR7cysxK3R9OiAke2l9JHthP2AKCl5eXiAke2F9YDoiIn1gfSkuam9pbihgCmApfWNvbnN0IHBvPS9eWyBcdF0qXG4vO2Z1bmN0aW9uIGdvKHIpe2xldCBlPTA7cmV0dXJuIHBvLnRlc3QocikmJihlPTEscj1yLnJlcGxhY2UocG8sIiIpKSx7bGluZU9mZnNldDplLHNoYWRlclNvdXJjZTpyfX1mdW5jdGlvbiBQYyhyLGUpe3JldHVybiByLmVycm9yQ2FsbGJhY2soZSksci5jYWxsYmFjayYmc2V0VGltZW91dCgoKT0+e3IuY2FsbGJhY2soYCR7ZX0KJHtyLmVycm9ycy5qb2luKGAKYCl9YCl9KSxudWxsfWZ1bmN0aW9uIGtjKHIsZSx0LG4pe2lmKG49bnx8SXIsIXIuZ2V0U2hhZGVyUGFyYW1ldGVyKHQsUHUpKXtjb25zdCBpPXIuZ2V0U2hhZGVySW5mb0xvZyh0KSx7bGluZU9mZnNldDpzLHNoYWRlclNvdXJjZTphfT1nbyhyLmdldFNoYWRlclNvdXJjZSh0KSksdT1gJHtGYyhhLGkscyl9CkVycm9yIGNvbXBpbGluZyAke1RuKHIsZSl9OiAke2l9YDtyZXR1cm4gbih1KSx1fXJldHVybiIifWZ1bmN0aW9uIGtyKHIsZSx0KXtsZXQgbixvLGk7aWYodHlwZW9mIGU9PSJmdW5jdGlvbiImJih0PWUsZT12b2lkIDApLHR5cGVvZiByPT0iZnVuY3Rpb24iKXQ9cixyPXZvaWQgMDtlbHNlIGlmKHImJiFBcnJheS5pc0FycmF5KHIpKXtjb25zdCBmPXI7dD1mLmVycm9yQ2FsbGJhY2sscj1mLmF0dHJpYkxvY2F0aW9ucyxuPWYudHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5ncyxvPWYudHJhbnNmb3JtRmVlZGJhY2tNb2RlLGk9Zi5jYWxsYmFja31jb25zdCBzPXR8fElyLGE9W10sdT17ZXJyb3JDYWxsYmFjayhmLC4uLmQpe2EucHVzaChmKSxzKGYsLi4uZCl9LHRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZ3M6bix0cmFuc2Zvcm1GZWVkYmFja01vZGU6byxjYWxsYmFjazppLGVycm9yczphfTt7bGV0IGY9e307QXJyYXkuaXNBcnJheShyKT9yLmZvckVhY2goZnVuY3Rpb24oZCxwKXtmW2RdPWU/ZVtwXTpwfSk6Zj1yfHx7fSx1LmF0dHJpYkxvY2F0aW9ucz1mfXJldHVybiB1fWNvbnN0IERjPVsiVkVSVEVYX1NIQURFUiIsIkZSQUdNRU5UX1NIQURFUiJdO2Z1bmN0aW9uIENjKHIsZSl7aWYoZS5pbmRleE9mKCJmcmFnIik+PTApcmV0dXJuIER1O2lmKGUuaW5kZXhPZigidmVydCIpPj0wKXJldHVybiBDdX1mdW5jdGlvbiBCYyhyLGUsdCl7Y29uc3Qgbj1yLmdldEF0dGFjaGVkU2hhZGVycyhlKTtmb3IoY29uc3QgbyBvZiBuKXQuaGFzKG8pJiZyLmRlbGV0ZVNoYWRlcihvKTtyLmRlbGV0ZVByb2dyYW0oZSl9Y29uc3QgTWM9KHI9MCk9Pm5ldyBQcm9taXNlKGU9PnNldFRpbWVvdXQoZSxyKSk7ZnVuY3Rpb24gT2MocixlLHQpe2NvbnN0IG49ci5jcmVhdGVQcm9ncmFtKCkse2F0dHJpYkxvY2F0aW9uczpvLHRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZ3M6aSx0cmFuc2Zvcm1GZWVkYmFja01vZGU6c309a3IodCk7Zm9yKGxldCBhPTA7YTxlLmxlbmd0aDsrK2Epe2xldCB1PWVbYV07aWYodHlwZW9mIHU9PSJzdHJpbmciKXtjb25zdCBmPVZuKHUpLGQ9Zj9mLnRleHQ6dTtsZXQgcD1yW0RjW2FdXTtmJiZmLnR5cGUmJihwPUNjKHIsZi50eXBlKXx8cCksdT1yLmNyZWF0ZVNoYWRlcihwKSxyLnNoYWRlclNvdXJjZSh1LGdvKGQpLnNoYWRlclNvdXJjZSksci5jb21waWxlU2hhZGVyKHUpLHIuYXR0YWNoU2hhZGVyKG4sdSl9fU9iamVjdC5lbnRyaWVzKG8pLmZvckVhY2goKFthLHVdKT0+ci5iaW5kQXR0cmliTG9jYXRpb24obix1LGEpKTt7bGV0IGE9aTthJiYoYS5hdHRyaWJzJiYoYT1hLmF0dHJpYnMpLEFycmF5LmlzQXJyYXkoYSl8fChhPU9iamVjdC5rZXlzKGEpKSxyLnRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZ3MobixhLHN8fEJ1KSl9cmV0dXJuIHIubGlua1Byb2dyYW0obiksbn1mdW5jdGlvbiBVYyhyLGUsdCxuLG8pe2NvbnN0IGk9a3IodCxuLG8pLHM9bmV3IFNldChlKSxhPU9jKHIsZSxpKTtmdW5jdGlvbiB1KGYsZCl7Y29uc3QgcD1MYyhmLGQsaS5lcnJvckNhbGxiYWNrKTtyZXR1cm4gcCYmQmMoZixkLHMpLHB9aWYoaS5jYWxsYmFjayl7TmMocixhKS50aGVuKCgpPT57Y29uc3QgZj11KHIsYSk7aS5jYWxsYmFjayhmLGY/dm9pZCAwOmEpfSk7cmV0dXJufXJldHVybiB1KHIsYSk/dm9pZCAwOmF9YXN5bmMgZnVuY3Rpb24gTmMocixlKXtjb25zdCB0PXIuZ2V0RXh0ZW5zaW9uKCJLSFJfcGFyYWxsZWxfc2hhZGVyX2NvbXBpbGUiKSxuPXQ/KGkscyk9PmkuZ2V0UHJvZ3JhbVBhcmFtZXRlcihzLHQuQ09NUExFVElPTl9TVEFUVVNfS0hSKTooKT0+ITA7bGV0IG89MDtkbyBhd2FpdCBNYyhvKSxvPTFlMy82MDt3aGlsZSghbihyLGUpKX1mdW5jdGlvbiBMYyhyLGUsdCl7aWYodD10fHxJciwhci5nZXRQcm9ncmFtUGFyYW1ldGVyKGUsa3UpKXtjb25zdCBvPXIuZ2V0UHJvZ3JhbUluZm9Mb2coZSk7dChgRXJyb3IgaW4gcHJvZ3JhbSBsaW5raW5nOiAke299YCk7Y29uc3Qgcz1yLmdldEF0dGFjaGVkU2hhZGVycyhlKS5tYXAoYT0+a2MocixyLmdldFNoYWRlclBhcmFtZXRlcihhLHIuU0hBREVSX1RZUEUpLGEsdCkpO3JldHVybmAke299CiR7cy5maWx0ZXIoYT0+YSkuam9pbihgCmApfWB9fWZ1bmN0aW9uIHpjKHIsZSx0LG4sbyl7cmV0dXJuIFVjKHIsZSx0LG4sbyl9ZnVuY3Rpb24geW8ocil7Y29uc3QgZT1yLm5hbWU7cmV0dXJuIGUuc3RhcnRzV2l0aCgiZ2xfIil8fGUuc3RhcnRzV2l0aCgid2ViZ2xfIil9Y29uc3QgR2M9LyhcLnxcW3xdfFx3KykvZywkYz1yPT5yPj0iMCImJnI8PSI5IjtmdW5jdGlvbiBXYyhyLGUsdCxuKXtjb25zdCBvPXIuc3BsaXQoR2MpLmZpbHRlcihhPT5hIT09IiIpO2xldCBpPTAscz0iIjtmb3IoOzspe2NvbnN0IGE9b1tpKytdO3MrPWE7Y29uc3QgdT0kYyhhWzBdKSxmPXU/cGFyc2VJbnQoYSk6YTtpZih1JiYocys9b1tpKytdKSxpPT09by5sZW5ndGgpe3RbZl09ZTticmVha31lbHNle2NvbnN0IHA9b1tpKytdLGc9cD09PSJbIixiPXRbZl18fChnP1tdOnt9KTt0W2ZdPWIsdD1iLG5bc109bltzXXx8ZnVuY3Rpb24oaCl7cmV0dXJuIGZ1bmN0aW9uKHgpe2JvKGgseCl9fShiKSxzKz1wfX19ZnVuY3Rpb24gVmMocixlKXtsZXQgdD0wO2Z1bmN0aW9uIG4oYSx1LGYpe2NvbnN0IGQ9dS5uYW1lLmVuZHNXaXRoKCJbMF0iKSxwPXUudHlwZSxnPV9bcF07aWYoIWcpdGhyb3cgbmV3IEVycm9yKGB1bmtub3duIHR5cGU6IDB4JHtwLnRvU3RyaW5nKDE2KX1gKTtsZXQgYjtpZihnLmJpbmRQb2ludCl7Y29uc3QgaD10O3QrPXUuc2l6ZSxkP2I9Zy5hcnJheVNldHRlcihyLHAsaCxmLHUuc2l6ZSk6Yj1nLnNldHRlcihyLHAsaCxmLHUuc2l6ZSl9ZWxzZSBnLmFycmF5U2V0dGVyJiZkP2I9Zy5hcnJheVNldHRlcihyLGYpOmI9Zy5zZXR0ZXIocixmKTtyZXR1cm4gYi5sb2NhdGlvbj1mLGJ9Y29uc3Qgbz17fSxpPXt9LHM9ci5nZXRQcm9ncmFtUGFyYW1ldGVyKGUsSG4pO2ZvcihsZXQgYT0wO2E8czsrK2Epe2NvbnN0IHU9ci5nZXRBY3RpdmVVbmlmb3JtKGUsYSk7aWYoeW8odSkpY29udGludWU7bGV0IGY9dS5uYW1lO2YuZW5kc1dpdGgoIlswXSIpJiYoZj1mLnN1YnN0cigwLGYubGVuZ3RoLTMpKTtjb25zdCBkPXIuZ2V0VW5pZm9ybUxvY2F0aW9uKGUsdS5uYW1lKTtpZihkKXtjb25zdCBwPW4oZSx1LGQpO29bZl09cCxXYyhmLHAsaSxvKX19cmV0dXJuIG99ZnVuY3Rpb24gSGMocixlKXtjb25zdCB0PXt9LG49ci5nZXRQcm9ncmFtUGFyYW1ldGVyKGUsT3UpO2ZvcihsZXQgbz0wO288bjsrK28pe2NvbnN0IGk9ci5nZXRUcmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmcoZSxvKTt0W2kubmFtZV09e2luZGV4Om8sdHlwZTppLnR5cGUsc2l6ZTppLnNpemV9fXJldHVybiB0fWZ1bmN0aW9uIGpjKHIsZSl7Y29uc3QgdD1yLmdldFByb2dyYW1QYXJhbWV0ZXIoZSxIbiksbj1bXSxvPVtdO2ZvcihsZXQgYT0wO2E8dDsrK2Epe28ucHVzaChhKSxuLnB1c2goe30pO2NvbnN0IHU9ci5nZXRBY3RpdmVVbmlmb3JtKGUsYSk7blthXS5uYW1lPXUubmFtZX1bWyJVTklGT1JNX1RZUEUiLCJ0eXBlIl0sWyJVTklGT1JNX1NJWkUiLCJzaXplIl0sWyJVTklGT1JNX0JMT0NLX0lOREVYIiwiYmxvY2tOZHgiXSxbIlVOSUZPUk1fT0ZGU0VUIiwib2Zmc2V0Il1dLmZvckVhY2goZnVuY3Rpb24oYSl7Y29uc3QgdT1hWzBdLGY9YVsxXTtyLmdldEFjdGl2ZVVuaWZvcm1zKGUsbyxyW3VdKS5mb3JFYWNoKGZ1bmN0aW9uKGQscCl7bltwXVtmXT1kfSl9KTtjb25zdCBpPXt9LHM9ci5nZXRQcm9ncmFtUGFyYW1ldGVyKGUsVXUpO2ZvcihsZXQgYT0wO2E8czsrK2Epe2NvbnN0IHU9ci5nZXRBY3RpdmVVbmlmb3JtQmxvY2tOYW1lKGUsYSksZj17aW5kZXg6ci5nZXRVbmlmb3JtQmxvY2tJbmRleChlLHUpLHVzZWRCeVZlcnRleFNoYWRlcjpyLmdldEFjdGl2ZVVuaWZvcm1CbG9ja1BhcmFtZXRlcihlLGEsTnUpLHVzZWRCeUZyYWdtZW50U2hhZGVyOnIuZ2V0QWN0aXZlVW5pZm9ybUJsb2NrUGFyYW1ldGVyKGUsYSxMdSksc2l6ZTpyLmdldEFjdGl2ZVVuaWZvcm1CbG9ja1BhcmFtZXRlcihlLGEsenUpLHVuaWZvcm1JbmRpY2VzOnIuZ2V0QWN0aXZlVW5pZm9ybUJsb2NrUGFyYW1ldGVyKGUsYSxHdSl9O2YudXNlZD1mLnVzZWRCeVZlcnRleFNoYWRlcnx8Zi51c2VkQnlGcmFnbWVudFNoYWRlcixpW3VdPWZ9cmV0dXJue2Jsb2NrU3BlY3M6aSx1bmlmb3JtRGF0YTpufX1mdW5jdGlvbiBibyhyLGUpe2Zvcihjb25zdCB0IGluIGUpe2NvbnN0IG49clt0XTt0eXBlb2Ygbj09ImZ1bmN0aW9uIj9uKGVbdF0pOmJvKHJbdF0sZVt0XSl9fWZ1bmN0aW9uIHhvKHIsLi4uZSl7Y29uc3QgdD1yLnVuaWZvcm1TZXR0ZXJzfHxyLG49ZS5sZW5ndGg7Zm9yKGxldCBvPTA7bzxuOysrbyl7Y29uc3QgaT1lW29dO2lmKEFycmF5LmlzQXJyYXkoaSkpe2NvbnN0IHM9aS5sZW5ndGg7Zm9yKGxldCBhPTA7YTxzOysrYSl4byh0LGlbYV0pfWVsc2UgZm9yKGNvbnN0IHMgaW4gaSl7Y29uc3QgYT10W3NdO2EmJmEoaVtzXSl9fX1mdW5jdGlvbiBZYyhyLGUpe2NvbnN0IHQ9e30sbj1yLmdldFByb2dyYW1QYXJhbWV0ZXIoZSxNdSk7Zm9yKGxldCBvPTA7bzxuOysrbyl7Y29uc3QgaT1yLmdldEFjdGl2ZUF0dHJpYihlLG8pO2lmKHlvKGkpKWNvbnRpbnVlO2NvbnN0IHM9ci5nZXRBdHRyaWJMb2NhdGlvbihlLGkubmFtZSksYT1QW2kudHlwZV0sdT1hLnNldHRlcihyLHMsYSk7dS5sb2NhdGlvbj1zLHRbaS5uYW1lXT11fXJldHVybiB0fWZ1bmN0aW9uIFhjKHIsZSl7Zm9yKGNvbnN0IHQgaW4gZSl7Y29uc3Qgbj1yW3RdO24mJm4oZVt0XSl9fWZ1bmN0aW9uIFFjKHIsZSx0KXt0LnZlcnRleEFycmF5T2JqZWN0P3IuYmluZFZlcnRleEFycmF5KHQudmVydGV4QXJyYXlPYmplY3QpOihYYyhlLmF0dHJpYlNldHRlcnN8fGUsdC5hdHRyaWJzKSx0LmluZGljZXMmJnIuYmluZEJ1ZmZlcihGdSx0LmluZGljZXMpKX1mdW5jdGlvbiBfbyhyLGUpe2NvbnN0IHQ9VmMocixlKSxuPVljKHIsZSksbz17cHJvZ3JhbTplLHVuaWZvcm1TZXR0ZXJzOnQsYXR0cmliU2V0dGVyczpufTtyZXR1cm4gVmUocikmJihvLnVuaWZvcm1CbG9ja1NwZWM9amMocixlKSxvLnRyYW5zZm9ybUZlZWRiYWNrSW5mbz1IYyhyLGUpKSxvfWNvbnN0IHFjPS9cc3x7fH18Oy87ZnVuY3Rpb24gS2MocixlLHQsbixvKXtjb25zdCBpPWtyKHQsbixvKSxzPVtdO2lmKGU9ZS5tYXAoZnVuY3Rpb24oZil7aWYoIXFjLnRlc3QoZikpe2NvbnN0IGQ9Vm4oZik7aWYoZClmPWQudGV4dDtlbHNle2NvbnN0IHA9YG5vIGVsZW1lbnQgd2l0aCBpZDogJHtmfWA7aS5lcnJvckNhbGxiYWNrKHApLHMucHVzaChwKX19cmV0dXJuIGZ9KSxzLmxlbmd0aClyZXR1cm4gUGMoaSwiIik7Y29uc3QgYT1pLmNhbGxiYWNrO2EmJihpLmNhbGxiYWNrPShmLGQpPT57YShmLGY/dm9pZCAwOl9vKHIsZCkpfSk7Y29uc3QgdT16YyhyLGUsaSk7cmV0dXJuIHU/X28ocix1KTpudWxsfWNvbnN0IEpjPTQsdm89NTEyMztmdW5jdGlvbiBaYyhyLGUsdCxuLG8saSl7dD10PT09dm9pZCAwP0pjOnQ7Y29uc3Qgcz1lLmluZGljZXMsYT1lLmVsZW1lbnRUeXBlLHU9bj09PXZvaWQgMD9lLm51bUVsZW1lbnRzOm47bz1vPT09dm9pZCAwPzA6byxhfHxzP2khPT12b2lkIDA/ci5kcmF3RWxlbWVudHNJbnN0YW5jZWQodCx1LGE9PT12b2lkIDA/dm86ZS5lbGVtZW50VHlwZSxvLGkpOnIuZHJhd0VsZW1lbnRzKHQsdSxhPT09dm9pZCAwP3ZvOmUuZWxlbWVudFR5cGUsbyk6aSE9PXZvaWQgMD9yLmRyYXdBcnJheXNJbnN0YW5jZWQodCxvLHUsaSk6ci5kcmF3QXJyYXlzKHQsbyx1KX1jb25zdCBFbz0zNjE2MCxVdD0zNjE2MSxlZj0zNTUzLHRmPTUxMjEscmY9NjQwMixuZj02NDA4LG9mPTMzMTkwLHNmPTM2MDEyLGFmPTM1MDU2LHVmPTM2MDEzLGNmPTMyODU0LGZmPTMyODU1LGxmPTM2MTk0LFRvPTMzMTg5LHdvPTY0MDEsQW89MzYxNjgsRHI9MzQwNDEsQ3I9MzYwNjQsTnQ9MzYwOTYsSW89MzYxMjgsQnI9MzMzMDYsTXI9MzMwNzEsT3I9OTcyOSxkZj1be2Zvcm1hdDpuZix0eXBlOnRmLG1pbjpPcix3cmFwOk1yfSx7Zm9ybWF0OkRyfV0sWT17fTtZW0RyXT1CcixZW3dvXT1JbyxZW0FvXT1JbyxZW3JmXT1OdCxZW1RvXT1OdCxZW29mXT1OdCxZW3NmXT1OdCxZW2FmXT1CcixZW3VmXT1CcjtmdW5jdGlvbiBoZihyLGUpe3JldHVybiBZW3JdfHxZW2VdfWNvbnN0IGZlPXt9O2ZlW2NmXT0hMCxmZVtmZl09ITAsZmVbbGZdPSEwLGZlW0RyXT0hMCxmZVtUb109ITAsZmVbd29dPSEwLGZlW0FvXT0hMDtmdW5jdGlvbiBtZihyKXtyZXR1cm4gZmVbcl19Y29uc3QgcGY9MzI7ZnVuY3Rpb24gZ2Yocil7cmV0dXJuIHI+PUNyJiZyPENyK3BmfWZ1bmN0aW9uIEx0KHIsZSx0LG4pe2NvbnN0IG89RW8saT1yLmNyZWF0ZUZyYW1lYnVmZmVyKCk7ci5iaW5kRnJhbWVidWZmZXIobyxpKSx0PXR8fHIuZHJhd2luZ0J1ZmZlcldpZHRoLG49bnx8ci5kcmF3aW5nQnVmZmVySGVpZ2h0LGU9ZXx8ZGY7Y29uc3Qgcz1bXSxhPXtmcmFtZWJ1ZmZlcjppLGF0dGFjaG1lbnRzOltdLHdpZHRoOnQsaGVpZ2h0Om59O3JldHVybiBlLmZvckVhY2goZnVuY3Rpb24odSxmKXtsZXQgZD11LmF0dGFjaG1lbnQ7Y29uc3QgcD11LnNhbXBsZXMsZz11LmZvcm1hdDtsZXQgYj11LmF0dGFjaG1lbnRQb2ludHx8aGYoZyx1LmludGVybmFsRm9ybWF0KTtpZihifHwoYj1DcitmKSxnZihiKSYmcy5wdXNoKGIpLCFkKWlmKHAhPT12b2lkIDB8fG1mKGcpKWQ9ci5jcmVhdGVSZW5kZXJidWZmZXIoKSxyLmJpbmRSZW5kZXJidWZmZXIoVXQsZCkscD4xP3IucmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlKFV0LHAsZyx0LG4pOnIucmVuZGVyYnVmZmVyU3RvcmFnZShVdCxnLHQsbik7ZWxzZXtjb25zdCBoPU9iamVjdC5hc3NpZ24oe30sdSk7aC53aWR0aD10LGguaGVpZ2h0PW4saC5hdXRvPT09dm9pZCAwJiYoaC5hdXRvPSExLGgubWluPWgubWlufHxoLm1pbk1hZ3x8T3IsaC5tYWc9aC5tYWd8fGgubWluTWFnfHxPcixoLndyYXBTPWgud3JhcFN8fGgud3JhcHx8TXIsaC53cmFwVD1oLndyYXBUfHxoLndyYXB8fE1yKSxkPVduKHIsaCl9aWYod3MocixkKSlyLmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKG8sYixVdCxkKTtlbHNlIGlmKGRyKHIsZCkpdS5sYXllciE9PXZvaWQgMD9yLmZyYW1lYnVmZmVyVGV4dHVyZUxheWVyKG8sYixkLHUubGV2ZWx8fDAsdS5sYXllcik6ci5mcmFtZWJ1ZmZlclRleHR1cmUyRChvLGIsdS50YXJnZXR8fGVmLGQsdS5sZXZlbHx8MCk7ZWxzZSB0aHJvdyBuZXcgRXJyb3IoInVua25vd24gYXR0YWNobWVudCB0eXBlIik7YS5hdHRhY2htZW50cy5wdXNoKGQpfSksci5kcmF3QnVmZmVycyYmci5kcmF3QnVmZmVycyhzKSxhfWZ1bmN0aW9uIHlmKHIsZSx0KXt0PXR8fEVvLGU/KHIuYmluZEZyYW1lYnVmZmVyKHQsZS5mcmFtZWJ1ZmZlciksci52aWV3cG9ydCgwLDAsZS53aWR0aCxlLmhlaWdodCkpOihyLmJpbmRGcmFtZWJ1ZmZlcih0LG51bGwpLHIudmlld3BvcnQoMCwwLHIuZHJhd2luZ0J1ZmZlcldpZHRoLHIuZHJhd2luZ0J1ZmZlckhlaWdodCkpfWZ1bmN0aW9uIEkocixlKXtyZXR1cm4oKT0+ZSBpbnN0YW5jZW9mIFdlYkdMVGV4dHVyZT9lOlduKHIse3NyYzplLHdyYXA6ci5DTEFNUF9UT19FREdFfSl9Y29uc3QgT2U9MjtjbGFzcyBFZXtjb25zdHJ1Y3RvcihlKXtsKHRoaXMsImlkIiwiXyIpO2wodGhpcywiY29udGV4dCIpO2wodGhpcywib3V0cHV0Iik7bCh0aGlzLCJmYmkiKTtsKHRoaXMsIm9wdGlvbnMiKTtsKHRoaXMsInByb2dyYW1JbmZvIik7bCh0aGlzLCJidWZmZXJJbmZvIik7bCh0aGlzLCJwcm9maWxlciIpO2wodGhpcywibGFzdFJ1biIpO2NvbnN0e2NvbnRleHQ6dCx3aWR0aDpuLGhlaWdodDpvfT1lO3RoaXMuY29udGV4dD10LHRoaXMub3B0aW9ucz1lO2NvbnN0IGk9dGhpcy5idWlsZERlZmluZXMoKTt0aGlzLnByb2dyYW1JbmZvPUtjKHRoaXMuY29udGV4dCxbaSt0aGlzLmdldFZlcnRleFNoYWRlcigpLGkrdGhpcy5nZXRGcmFnbWVudFNoYWRlcigpXSksdGhpcy5idWZmZXJJbmZvPVhzKHRoaXMuY29udGV4dCx0aGlzLmdldEJ1ZmZlcnMoKSksdGhpcy5mYmk9THQodGhpcy5jb250ZXh0LFt7Zm9ybWF0OnRoaXMuY29udGV4dC5SR0JBLHR5cGU6dGhpcy5jb250ZXh0LlVOU0lHTkVEX0JZVEUsbWluOnRoaXMuY29udGV4dC5MSU5FQVIsd3JhcDp0aGlzLmNvbnRleHQuQ0xBTVBfVE9fRURHRX1dLG4sbyksdGhpcy5vdXRwdXQ9dGhpcy5mYmkuYXR0YWNobWVudHNbMF19cmVzaXplT3V0cHV0KGUsdCl7dGhpcy5mYmk9THQodGhpcy5jb250ZXh0LFt7Zm9ybWF0OnRoaXMuY29udGV4dC5SR0JBLHR5cGU6dGhpcy5jb250ZXh0LlVOU0lHTkVEX0JZVEUsbWluOnRoaXMuY29udGV4dC5MSU5FQVIsd3JhcDp0aGlzLmNvbnRleHQuQ0xBTVBfVE9fRURHRX1dLGUsdCksdGhpcy5vcHRpb25zLndpZHRoPWUsdGhpcy5vcHRpb25zLmhlaWdodD10LHRoaXMub3V0cHV0PXRoaXMuZmJpLmF0dGFjaG1lbnRzWzBdfWdldERlZmluZXMoKXtyZXR1cm57fX1nZXRCdWZmZXJzKCl7cmV0dXJue3Bvc2l0aW9uOntudW1Db21wb25lbnRzOjIsZGF0YTpbLTEsLTEsLTEsMSwxLC0xLDEsMSwtMSwxLDEsLTFdfSx0ZXh0dXJlX2Nvb3JkOntudW1Db21wb25lbnRzOjIsZGF0YTpbMCwwLDAsMSwxLDAsMSwxLDAsMSwxLDBdfX19YnVpbGREZWZpbmVzKCl7bGV0IGU9IiI7Y29uc3QgdD10aGlzLmdldERlZmluZXMoKTtmb3IobGV0IG4gaW4gdCllKz1gI2RlZmluZSAke259ICR7dFtuXS50b0ZpeGVkKDEpfQpgO3JldHVybiBlfXJ1bihlKXt2YXIgbyxpLHMsYSx1LGY7KG89dGhpcy5wcm9maWxlcik9PW51bGx8fG8ucHVzaENvbnRleHQoYFske3RoaXMuaWR9XSBQUk9HIDogJHt0aGlzLmNvbnN0cnVjdG9yLm5hbWV9YCksKGk9dGhpcy5wcm9maWxlcik9PW51bGx8fGkucHVzaENvbnRleHQoYFske3RoaXMuaWR9XSBVTklGT1JNU2ApO2Zvcihjb25zdCBkIGluIGUpdHlwZW9mIGVbZF09PSJmdW5jdGlvbiImJigocz10aGlzLnByb2ZpbGVyKT09bnVsbHx8cy5wdXNoQ29udGV4dChgWyR7dGhpcy5pZH1dIFVOSSA6ICR7ZH1gKSxlW2RdPWVbZF0oKSwoYT10aGlzLnByb2ZpbGVyKT09bnVsbHx8YS5wb3BDb250ZXh0KGBbJHt0aGlzLmlkfV0gVU5JIDogJHtkfWApKTsodT10aGlzLnByb2ZpbGVyKT09bnVsbHx8dS5wb3BDb250ZXh0KGBbJHt0aGlzLmlkfV0gVU5JRk9STVNgKTtjb25zdCB0PURhdGUubm93KCk7bGV0IG49MDt0aGlzLmxhc3RSdW4mJihuPSh0LXRoaXMubGFzdFJ1bikvMWUzKSx0aGlzLmxhc3RSdW49dCx0aGlzLmNvbnRleHQudmlld3BvcnQoMCwwLHRoaXMuY29udGV4dC5jYW52YXMud2lkdGgsdGhpcy5jb250ZXh0LmNhbnZhcy5oZWlnaHQpLHRoaXMuY29udGV4dC51c2VQcm9ncmFtKHRoaXMucHJvZ3JhbUluZm8ucHJvZ3JhbSksUWModGhpcy5jb250ZXh0LHRoaXMucHJvZ3JhbUluZm8sdGhpcy5idWZmZXJJbmZvKSx4byh0aGlzLnByb2dyYW1JbmZvLHtkZWx0YTpuLGNhbnZhczpbdGhpcy5jb250ZXh0LmNhbnZhcy53aWR0aCx0aGlzLmNvbnRleHQuY2FudmFzLmhlaWdodF0sLi4uZX0pLHlmKHRoaXMuY29udGV4dCx0aGlzLm9wdGlvbnMuZGlzYWJsZUZyYW1lYnVmZmVyP251bGw6dGhpcy5mYmkpLFpjKHRoaXMuY29udGV4dCx0aGlzLmJ1ZmZlckluZm8pLChmPXRoaXMucHJvZmlsZXIpPT1udWxsfHxmLnBvcENvbnRleHQoYFske3RoaXMuaWR9XSBQUk9HIDogJHt0aGlzLmNvbnN0cnVjdG9yLm5hbWV9YCl9c2V0UHJvZmlsZXIoZSl7dGhpcy5wcm9maWxlcj1lfX12YXIgYmY9YHByZWNpc2lvbiBtZWRpdW1wIGZsb2F0OwoKdmFyeWluZyB2ZWMyIF90ZXh0dXJlX2Nvb3JkOwoKdW5pZm9ybSBzYW1wbGVyMkQgYmFja2dyb3VuZDsKdW5pZm9ybSBzYW1wbGVyMkQgZm9yZWdyb3VuZDsKdW5pZm9ybSBzYW1wbGVyMkQgdGhyZXNob2xkOwoKdm9pZCBtYWluKCkgewogIHZlYzQgYmFja2dyb3VuZENvbG9yID0gdGV4dHVyZTJEKGJhY2tncm91bmQsIF90ZXh0dXJlX2Nvb3JkKTsKICB2ZWM0IGZvcmVncm91bmRDb2xvciA9IHRleHR1cmUyRChmb3JlZ3JvdW5kLCBfdGV4dHVyZV9jb29yZCk7CiAgdmVjNCB0cmVzaG9sZENvbG9yID0gdGV4dHVyZTJEKHRocmVzaG9sZCwgX3RleHR1cmVfY29vcmQpOwogIGdsX0ZyYWdDb2xvciA9IGZvcmVncm91bmRDb2xvciAqIHRyZXNob2xkQ29sb3IuYSArCiAgICAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yICogKDEuIC0gdHJlc2hvbGRDb2xvci5hKTsKfQpgLHhmPWB2YXJ5aW5nIHZlYzIgX3RleHR1cmVfY29vcmQ7CgphdHRyaWJ1dGUgdmVjMiBwb3NpdGlvbjsKYXR0cmlidXRlIHZlYzIgdGV4dHVyZV9jb29yZDsKCnZvaWQgbWFpbigpIHsKICBnbF9Qb3NpdGlvbiA9IHZlYzQocG9zaXRpb24sIDAuLCAxLik7CiAgX3RleHR1cmVfY29vcmQgPSB0ZXh0dXJlX2Nvb3JkOwogIF90ZXh0dXJlX2Nvb3JkLnkgPSAxLiAtIHRleHR1cmVfY29vcmQueTsKfQpgO2NsYXNzIFVyIGV4dGVuZHMgRWV7Z2V0RnJhZ21lbnRTaGFkZXIoKXtyZXR1cm4gYmZ9Z2V0VmVydGV4U2hhZGVyKCl7cmV0dXJuIHhmfX1jbGFzcyBOcntjb25zdHJ1Y3Rvcigpe2wodGhpcywic3RlcHMiLFtdKTtsKHRoaXMsInByb2ZpbGVyIil9YWRkU3RlcChlKXt0aGlzLnN0ZXBzLnB1c2goZSl9YXN5bmMgcnVuKCl7Zm9yKGNvbnN0IGUgb2YgdGhpcy5zdGVwcyllLnByb2dyYW0ucnVuKGUuZ2V0VW5pZm9ybXMoKSl9cmVzaXplT3V0cHV0KGUsdCl7dmFyIG4sbzsobj10aGlzLnByb2ZpbGVyKT09bnVsbHx8bi5wdXNoQ29udGV4dChgUElQIFske3RoaXMuY29uc3RydWN0b3IubmFtZX1dYCk7Zm9yKGNvbnN0IGkgb2YgdGhpcy5zdGVwcylpLnByZXZlbnRSZXNpemV8fGkucHJvZ3JhbS5yZXNpemVPdXRwdXQoZSx0KTsobz10aGlzLnByb2ZpbGVyKT09bnVsbHx8by5wb3BDb250ZXh0KGBQSVAgWyR7dGhpcy5jb25zdHJ1Y3Rvci5uYW1lfV1gKX1zZXRQcm9maWxlcihlKXt0aGlzLnByb2ZpbGVyPWU7Zm9yKGNvbnN0IHQgb2YgdGhpcy5zdGVwcyl0LnByb2dyYW0uc2V0UHJvZmlsZXIoZSl9c2V0SWQoZSl7Zm9yKGNvbnN0IHQgb2YgdGhpcy5zdGVwcyl0LnByb2dyYW0uaWQ9ZX19Y2xhc3MgTHIgZXh0ZW5kcyBOcntjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyk7bCh0aGlzLCJwcmVjaXNlTWFza0VuYWJsZWQiLCExKX19Y2xhc3MgU28gZXh0ZW5kcyBMcntjb25zdHJ1Y3Rvcih0KXtzdXBlcigpO2wodGhpcywiaW5wdXRJbWFnZSIpO2wodGhpcywiaW5wdXRCYWNrZ3JvdW5kSW1hZ2UiKTtsKHRoaXMsImlucHV0TWFzayIpO2wodGhpcywicHJlY2lzZU1hc2tFbmFibGVkIiwhMCk7dGhpcy5jb250ZXh0PXQ7Y29uc3Qgbj17Y29udGV4dDp0LGhlaWdodDp0LmNhbnZhcy5oZWlnaHQsd2lkdGg6dC5jYW52YXMud2lkdGh9LG89bmV3IFVyKHsuLi5uLGRpc2FibGVGcmFtZWJ1ZmZlcjohMH0pO3RoaXMuYWRkU3RlcCh7cHJvZ3JhbTpvLGdldFVuaWZvcm1zOigpPT4oe2JhY2tncm91bmQ6SSh0LHRoaXMuaW5wdXRCYWNrZ3JvdW5kSW1hZ2UpLGZvcmVncm91bmQ6SSh0LHRoaXMuaW5wdXRJbWFnZSksdGhyZXNob2xkOkkodCx0aGlzLmlucHV0TWFzayl9KX0pfXNldERhdGEodCxuKXt0aGlzLmlucHV0SW1hZ2U9dCx0aGlzLmlucHV0TWFzaz1ufX12YXIgX2Y9YHByZWNpc2lvbiBtZWRpdW1wIGZsb2F0OwoKdmFyeWluZyB2ZWMyIF90ZXh0dXJlX2Nvb3JkOwp1bmlmb3JtIHNhbXBsZXIyRCB0ZXh0dXJlOwoKdm9pZCBtYWluKCkgeyBnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQodGV4dHVyZSwgX3RleHR1cmVfY29vcmQpOyB9CmAsdmY9YHZhcnlpbmcgdmVjMiBfdGV4dHVyZV9jb29yZDsKCmF0dHJpYnV0ZSB2ZWMyIHBvc2l0aW9uOwphdHRyaWJ1dGUgdmVjMiB0ZXh0dXJlX2Nvb3JkOwp1bmlmb3JtIGJvb2wgaW52ZXJ0X3k7Cgp2b2lkIG1haW4oKSB7CiAgZ2xfUG9zaXRpb24gPSB2ZWM0KHBvc2l0aW9uLCAwLiwgMS4pOwogIF90ZXh0dXJlX2Nvb3JkID0gdGV4dHVyZV9jb29yZDsKICBpZiAoaW52ZXJ0X3kpIHsKICAgIF90ZXh0dXJlX2Nvb3JkLnkgPSAxLiAtIHRleHR1cmVfY29vcmQueTsKICB9Cn0KYDtjbGFzcyBFZiBleHRlbmRzIEVle2dldEZyYWdtZW50U2hhZGVyKCl7cmV0dXJuIF9mfWdldFZlcnRleFNoYWRlcigpe3JldHVybiB2Zn19Y2xhc3MgVGYgZXh0ZW5kcyBOcntjb25zdHJ1Y3Rvcih0LG4sbyl7c3VwZXIoKTtsKHRoaXMsImlucHV0SW1hZ2UiKTt0aGlzLmNvbnRleHQ9dDtjb25zdCBpPXtjb250ZXh0OnQsaGVpZ2h0Om8sd2lkdGg6bn07dGhpcy5hZGRTdGVwKHtwcm9ncmFtOm5ldyBFZih7Li4uaSxkaXNhYmxlRnJhbWVidWZmZXI6ITB9KSxnZXRVbmlmb3JtczooKT0+KHt0ZXh0dXJlOkkodCx0aGlzLmlucHV0SW1hZ2UpLGludmVydF95OiEwfSl9KX1zZXREYXRhKHQpe3RoaXMuaW5wdXRJbWFnZT10fX1hc3luYyBmdW5jdGlvbiBSbyhyKXtyZXR1cm4gbmV3IFByb21pc2UoZT0+e3NldFRpbWVvdXQoKCk9PntlKCl9LHIpfSl9dmFyIHdmPWBwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsKCnZhcnlpbmcgdmVjMiBfdGV4dHVyZV9jb29yZDsKCnVuaWZvcm0gdmVjMiBjYW52YXM7CnVuaWZvcm0gc2FtcGxlcjJEIHRleHR1cmU7Cgp2ZWM0IGxvb3AoKTsKCnZvaWQgbWFpbigpIHsgZ2xfRnJhZ0NvbG9yID0gbG9vcCgpOyB9CmAsQWY9YHZhcnlpbmcgdmVjMiBfdGV4dHVyZV9jb29yZDsKCmF0dHJpYnV0ZSB2ZWMyIHBvc2l0aW9uOwphdHRyaWJ1dGUgdmVjMiB0ZXh0dXJlX2Nvb3JkOwoKdm9pZCBtYWluKCkgewogIGdsX1Bvc2l0aW9uID0gdmVjNChwb3NpdGlvbiwgMC4sIDEuKTsKICBfdGV4dHVyZV9jb29yZCA9IHRleHR1cmVfY29vcmQ7Cn0KYCx6cj0ocj0+KHJbci5MSU5FQVI9MF09IkxJTkVBUiIscltyLkdBVVNTSUFOPTFdPSJHQVVTU0lBTiIscikpKHpyfHx7fSk7Y2xhc3MgRm8gZXh0ZW5kcyBFZXtnZXREZWZpbmVzKCl7dmFyIGU7cmV0dXJue1JBRElVUzooZT10aGlzLm9wdGlvbnMucmFkaXVzKSE9bnVsbD9lOjF9fWdldEZyYWdtZW50U2hhZGVyKCl7cmV0dXJuIHdmK3RoaXMuY3JlYXRlTG9vcEZ1bmN0aW9uKCl9Z2V0VmVydGV4U2hhZGVyKCl7cmV0dXJuIEFmfWNyZWF0ZUxvb3BGdW5jdGlvbigpe3ZhciB0O2xldCBlPSh0PXRoaXMub3B0aW9ucy5yYWRpdXMpIT1udWxsP3Q6MTtyZXR1cm5gCgogICAgICAgIHZlYzQgbG9vcCgpIHsgCiAgICAgICAgICAgIHZlYzQgcmVzdWx0ID0gdmVjNCgwLDAsMCwwKTsKICAgICAgICAgICAgZmxvYXQgZmFjdG9yU3VtID0gMC47CgogICAgICAgICAgICB2ZWMyIG5vcm1hbGl6ZWRSYWRpdXMgPSB2ZWMyKC0ke2V9LikgLyBjYW52YXM7CiAgICAgICAgICAgIHZlYzIgbm9ybWFsaXplZEluY3JlbWVudCA9IHZlYzIoMS4pIC8gY2FudmFzOwogICAgICAgICAgICB2ZWMyIGRpZmYgPSBub3JtYWxpemVkUmFkaXVzOwoKICAgICAgICAgICAgZm9yKGludCB5PS0ke2V9OyB5PCR7ZSsxfTsgKyt5KSB7CiAgICAgICAgICAgICAgICBmb3IoaW50IHg9LSR7ZX07IHg8JHtlKzF9OyArK3gpIHsKICAgICAgICAgICAgICAgICAgICBmbG9hdCBmYWN0b3IgPSAxLjsKICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gZmFjdG9yICogdGV4dHVyZTJEKHRleHR1cmUsIF90ZXh0dXJlX2Nvb3JkICsgZGlmZik7CiAgICAgICAgICAgICAgICAgICAgZmFjdG9yU3VtICs9IGZhY3RvcjsKICAgICAgICAgICAgICAgICAgICBkaWZmLnggKz0gbm9ybWFsaXplZEluY3JlbWVudC54OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZGlmZi55ICs9IG5vcm1hbGl6ZWRJbmNyZW1lbnQueTsKICAgICAgICAgICAgICAgIGRpZmYueCA9IG5vcm1hbGl6ZWRSYWRpdXMueDsKICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm4gcmVzdWx0IC8gZmFjdG9yU3VtOwogICAgICAgIH1gfWdldEZhY3RvcihlLHQpe3N3aXRjaCh0aGlzLm9wdGlvbnMudHlwZSl7Y2FzZSAxOnJldHVybiB0aGlzLmdldExpbmVhckZhY3RvcihlLHQpO2Nhc2UgMDpkZWZhdWx0OnJldHVybiB0aGlzLmdldExpbmVhckZhY3RvcihlLHQpfX1nZXRMaW5lYXJGYWN0b3IoZSx0KXtyZXR1cm4gMX1nZXRHYXVzc2lhbkZhY3RvcihlLHQpe3ZhciB1O2NvbnN0IG49TWF0aC5QSSoyLG89TWF0aC5tYXgoKHU9dGhpcy5vcHRpb25zLnJhZGl1cykhPW51bGw/dToxLDEpLGk9MS8obipvKioyKSxzPS0oZSoqMit0KioyKSxhPWkqcztyZXR1cm4gaSpNYXRoLkUqKmF9fWNsYXNzIEdyIGV4dGVuZHMgRWV7Y29uc3RydWN0b3IodCl7c3VwZXIodCk7bCh0aGlzLCJmYmkyIik7dGhpcy5mYmkyPUx0KHQuY29udGV4dCxbe2Zvcm1hdDp0LmNvbnRleHQuUkdCQSx0eXBlOnQuY29udGV4dC5VTlNJR05FRF9CWVRFLG1pbjp0LmNvbnRleHQuTElORUFSLG1hZzp0LmNvbnRleHQuTElORUFSLHdyYXA6dC5jb250ZXh0LkNMQU1QX1RPX0VER0V9XSx0LndpZHRoLHQuaGVpZ2h0KX1ydW4odCl7Y29uc3Qgbj10aGlzLmZiaTt0aGlzLmZiaT10aGlzLmZiaTIsdGhpcy5mYmkyPW4sdGhpcy5vdXRwdXQ9dGhpcy5mYmkuYXR0YWNobWVudHNbMF0sc3VwZXIucnVuKHsuLi50LHByZXZpb3VzX3JlbmRlcmluZzp0aGlzLmZiaTIuYXR0YWNobWVudHNbMF19KX1yZXNpemVPdXRwdXQodCxuKXtzdXBlci5yZXNpemVPdXRwdXQodCxuKSx0aGlzLmZiaTI9THQodGhpcy5jb250ZXh0LFt7Zm9ybWF0OnRoaXMuY29udGV4dC5SR0JBLHR5cGU6dGhpcy5jb250ZXh0LlVOU0lHTkVEX0JZVEUsbWluOnRoaXMuY29udGV4dC5MSU5FQVIsd3JhcDp0aGlzLmNvbnRleHQuQ0xBTVBfVE9fRURHRX1dLHQsbil9fXZhciBJZj1gcHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7Cgp2YXJ5aW5nIHZlYzIgX3RleHR1cmVfY29vcmQ7CgovLyB1bmlmb3JtIGZsb2F0IHRyZXNob2xkOwp1bmlmb3JtIHNhbXBsZXIyRCBpbWFnZV9ub3c7CnVuaWZvcm0gc2FtcGxlcjJEIGltYWdlX2JlZm9yZTsKdW5pZm9ybSBzYW1wbGVyMkQgbWFza19ub3c7CnVuaWZvcm0gc2FtcGxlcjJEIG1hc2tfYmVmb3JlOwp1bmlmb3JtIHNhbXBsZXIyRCBwcmV2aW91c19yZW5kZXJpbmc7CnVuaWZvcm0gdmVjMiBjYW52YXM7Cgp1bmlmb3JtIGZsb2F0IGRlbHRhOwoKZmxvYXQgY3VycmVudF9mYWN0b3IgPSAwLjY5OwpmbG9hdCBwcmV2aW91c19mYWN0b3IgPSAwLjc0OwpmbG9hdCB0aHJlc2hvbGRfYWN0aXZhdGlvbiA9IDAuNTQ7CgpmbG9hdCBtYXAoZmxvYXQgdmFsdWUsIGZsb2F0IG1pbjEsIGZsb2F0IG1heDEsIGZsb2F0IG1pbjIsIGZsb2F0IG1heDIpIHsKICByZXR1cm4gbWluMiArICh2YWx1ZSAtIG1pbjEpICogKG1heDIgLSBtaW4yKSAvIChtYXgxIC0gbWluMSk7Cn0KCmZsb2F0IGdldFRocmVzaG9sZCgpIHsKICB2ZWM0IGNvbG9yID0gdmVjNCgwLik7CiAgZm9yIChmbG9hdCB5ID0gLTYuOyB5IDwgNy47IHkgKz0gMS4pIHsKICAgIGZvciAoZmxvYXQgeCA9IC02LjsgeCA8IDcuOyB4ICs9IDEuKSB7CiAgICAgIHZlYzQgaW1hZ2Vfbm93X2NvbG9yID0KICAgICAgICAgIHRleHR1cmUyRChpbWFnZV9ub3csIF90ZXh0dXJlX2Nvb3JkICsgdmVjMih4LCB5KSAvIGNhbnZhcyk7CiAgICAgIHZlYzQgaW1hZ2VfYmVmb3JlX2NvbG9yID0KICAgICAgICAgIHRleHR1cmUyRChpbWFnZV9iZWZvcmUsIF90ZXh0dXJlX2Nvb3JkICsgdmVjMih4LCB5KSAvIGNhbnZhcyk7CiAgICAgIGNvbG9yICs9IGFicyhpbWFnZV9iZWZvcmVfY29sb3IgLSBpbWFnZV9ub3dfY29sb3IpOwogICAgfQogIH0KICByZXR1cm4gKGNvbG9yLnggKyBjb2xvci55ICsgY29sb3IueikgLyAoMy4gKiA5Lik7Cn0KCnZvaWQgbWFpbigpIHsKICBmbG9hdCB0cmVzaG9sZF9pbnB1dCA9IC40OwogIGZsb2F0IHRyZXNob2xkX3ByZXZpb3VzX3JlbmRlcmluZyA9IC45ODsKCiAgdmVjNCBtYXNrX25vd19jb2xvciA9IHRleHR1cmUyRChtYXNrX25vdywgX3RleHR1cmVfY29vcmQpOwogIHZlYzQgbWFza19iZWZvcmVfY29sb3IgPSB0ZXh0dXJlMkQobWFza19iZWZvcmUsIF90ZXh0dXJlX2Nvb3JkKTsKICB2ZWM0IHByZXZpb3VzX3JlbmRlcmluZ19jb2xvciA9IHRleHR1cmUyRChwcmV2aW91c19yZW5kZXJpbmcsIF90ZXh0dXJlX2Nvb3JkKTsKCiAgdmVjMyBtYXNrX2RpZmYgPSBhYnMobWFza19iZWZvcmVfY29sb3IueHl6IC0gbWFza19ub3dfY29sb3IueHl6KTsKICBmbG9hdCBmbGlja2VyaW5nID0gbWFza19kaWZmLng7CiAgZmxvYXQgdGhyZXNob2xkID0gZ2V0VGhyZXNob2xkKCk7CiAgaWYgKHRocmVzaG9sZCA8IHRocmVzaG9sZF9hY3RpdmF0aW9uKSB7CiAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KGZsaWNrZXJpbmcsIDAuLCAwLiwgMS4pICogY3VycmVudF9mYWN0b3IgKwogICAgICAgICAgICAgICAgICAgcHJldmlvdXNfcmVuZGVyaW5nX2NvbG9yICogcHJldmlvdXNfZmFjdG9yOwogICAgZ2xfRnJhZ0NvbG9yICo9ICgxLiAtIHRocmVzaG9sZCk7CiAgfQp9CmAsU2Y9YHZhcnlpbmcgdmVjMiBfdGV4dHVyZV9jb29yZDsKCmF0dHJpYnV0ZSB2ZWMyIHBvc2l0aW9uOwphdHRyaWJ1dGUgdmVjMiB0ZXh0dXJlX2Nvb3JkOwoKdm9pZCBtYWluKCkgewogIGdsX1Bvc2l0aW9uID0gdmVjNChwb3NpdGlvbiwgMC4sIDEuKTsKICBfdGV4dHVyZV9jb29yZCA9IHRleHR1cmVfY29vcmQ7Cn0KYDtjbGFzcyBSZiBleHRlbmRzIEdye2dldEZyYWdtZW50U2hhZGVyKCl7cmV0dXJuIElmfWdldFZlcnRleFNoYWRlcigpe3JldHVybiBTZn19dmFyIEZmPWAjdmVyc2lvbiAzMDAgZXMKLy8gaHR0cHM6Ly9naXRodWIuY29tL1ZvbGNvbWl4L3ZpcnR1YWwtYmFja2dyb3VuZC9ibG9iL21haW4vc3JjL3BpcGVsaW5lcy93ZWJnbDIvam9pbnRCaWxhdGVyYWxGaWx0ZXJTdGFnZS50cwoKcHJlY2lzaW9uIGhpZ2hwIGZsb2F0Owp1bmlmb3JtIHNhbXBsZXIyRCBpbnB1dF9mcmFtZTsKdW5pZm9ybSBzYW1wbGVyMkQgc2VnbWVudGF0aW9uX21hc2s7CnVuaWZvcm0gc2FtcGxlcjJEIHRocmVzaG9sZDsKdW5pZm9ybSB2ZWMyIHRleGVsX3NpemU7CnVuaWZvcm0gZmxvYXQgc3RlcDsKdW5pZm9ybSBmbG9hdCByYWRpdXM7CnVuaWZvcm0gZmxvYXQgb2Zmc2V0Owp1bmlmb3JtIGZsb2F0IHNpZ21hX3RleGVsOwp1bmlmb3JtIGZsb2F0IHNpZ21hX2NvbG9yOwoKaW4gdmVjMiBfdGV4dHVyZV9jb29yZDsKb3V0IHZlYzQgb3V0Q29sb3I7CgpmbG9hdCBnYXVzc2lhbihmbG9hdCB4LCBmbG9hdCBzaWdtYSkgewogIGZsb2F0IGNvZWZmID0gLTAuNSAvIChzaWdtYSAqIHNpZ21hICogNC4wICsgMS4wZS02KTsKICByZXR1cm4gZXhwKCh4ICogeCkgKiBjb2VmZik7Cn0KCnZvaWQgbWFpbigpIHsKICB2ZWMyIGNlbnRlckNvb3JkID0gX3RleHR1cmVfY29vcmQ7CiAgdmVjMyBjZW50ZXJDb2xvciA9IHRleHR1cmUoaW5wdXRfZnJhbWUsIGNlbnRlckNvb3JkKS5yZ2I7CiAgZmxvYXQgbmV3VmFsID0gMC4wOwogIGZsb2F0IHNwYWNlV2VpZ2h0ID0gMC4wOwogIGZsb2F0IGNvbG9yV2VpZ2h0ID0gMC4wOwogIGZsb2F0IHRvdGFsV2VpZ2h0ID0gMC4wOwogIC8vIFN1YnNhbXBsZSBrZXJuZWwgc3BhY2UuCiAgZm9yIChmbG9hdCBpID0gLXJhZGl1cyArIG9mZnNldDsgaSA8PSByYWRpdXM7IGkgKz0gc3RlcCkgewogICAgZm9yIChmbG9hdCBqID0gLXJhZGl1cyArIG9mZnNldDsgaiA8PSByYWRpdXM7IGogKz0gc3RlcCkgewogICAgICB2ZWMyIHNoaWZ0ID0gdmVjMihqLCBpKSAqIHRleGVsX3NpemU7CiAgICAgIHZlYzIgY29vcmQgPSB2ZWMyKGNlbnRlckNvb3JkICsgc2hpZnQpOwogICAgICB2ZWMzIGZyYW1lQ29sb3IgPSB0ZXh0dXJlKGlucHV0X2ZyYW1lLCBjb29yZCkucmdiOwogICAgICBmbG9hdCB0aHJlc2hvbGQgPSB0ZXh0dXJlKHRocmVzaG9sZCwgY29vcmQpLmE7CiAgICAgIGZsb2F0IG91dFZhbCA9IHRleHR1cmUoc2VnbWVudGF0aW9uX21hc2ssIGNvb3JkKS5hOwoKICAgICAgc3BhY2VXZWlnaHQgPSBnYXVzc2lhbihkaXN0YW5jZShjZW50ZXJDb29yZCwgY29vcmQpLCBzaWdtYV90ZXhlbCk7CiAgICAgIGNvbG9yV2VpZ2h0ID0gZ2F1c3NpYW4oZGlzdGFuY2UoY2VudGVyQ29sb3IsIGZyYW1lQ29sb3IpLCBzaWdtYV9jb2xvcik7CiAgICAgIHRvdGFsV2VpZ2h0ICs9IHNwYWNlV2VpZ2h0ICogY29sb3JXZWlnaHQ7CiAgICAgIG5ld1ZhbCArPSBzcGFjZVdlaWdodCAqIGNvbG9yV2VpZ2h0ICogb3V0VmFsICogdGhyZXNob2xkOwogICAgfQogIH0KICBuZXdWYWwgLz0gdG90YWxXZWlnaHQ7CiAgb3V0Q29sb3IgPSB2ZWM0KHZlYzMoMC4pLCBuZXdWYWwpOwp9YCxQZj1gI3ZlcnNpb24gMzAwIGVzCmluIHZlYzIgcG9zaXRpb247CmluIHZlYzIgdGV4dHVyZV9jb29yZDsKb3V0IHZlYzIgX3RleHR1cmVfY29vcmQ7CnZvaWQgbWFpbigpIHsKICBnbF9Qb3NpdGlvbiA9IHZlYzQocG9zaXRpb24sIDAuMCwgMS4wKTsKICBfdGV4dHVyZV9jb29yZCA9IHRleHR1cmVfY29vcmQ7Cn1gO2NsYXNzIGtmIGV4dGVuZHMgRWV7Z2V0RnJhZ21lbnRTaGFkZXIoKXtyZXR1cm4gRmZ9Z2V0VmVydGV4U2hhZGVyKCl7cmV0dXJuIFBmfX12YXIgRGY9YHByZWNpc2lvbiBtZWRpdW1wIGZsb2F0OwoKdmFyeWluZyB2ZWMyIF90ZXh0dXJlX2Nvb3JkOwoKdW5pZm9ybSB2ZWMyIGNhbnZhczsKdW5pZm9ybSBzYW1wbGVyMkQgdGV4dHVyZTsKCnZvaWQgbWFpbigpIHsKICBpbnQgY291bnQgPSAwOwogIGZvciAoZmxvYXQgeSA9IC0xLjsgeSA8IDIuOyB5ICs9IDEuKSB7CiAgICBmb3IgKGZsb2F0IHggPSAtMS47IHggPCAyLjsgeCArPSAxLikgewogICAgICB2ZWMyIGNvb3JkID0gX3RleHR1cmVfY29vcmQgKyB2ZWMyKHksIHgpIC8gY2FudmFzOwogICAgICB2ZWM0IGNvbG9yID0gdGV4dHVyZTJEKHRleHR1cmUsIGNvb3JkKTsKICAgICAgaWYgKGNvbG9yLnIgPiAuMSkgewogICAgICAgIGNvdW50Kys7CiAgICAgIH0KICAgIH0KICB9CiAgaWYgKGNvdW50ID4gNSkgewogICAgZ2xfRnJhZ0NvbG9yID0gdGV4dHVyZTJEKHRleHR1cmUsIF90ZXh0dXJlX2Nvb3JkKTsKICB9Cn0KYCxDZj1gdmFyeWluZyB2ZWMyIF90ZXh0dXJlX2Nvb3JkOwoKYXR0cmlidXRlIHZlYzIgcG9zaXRpb247CmF0dHJpYnV0ZSB2ZWMyIHRleHR1cmVfY29vcmQ7Cgp2b2lkIG1haW4oKSB7CiAgZ2xfUG9zaXRpb24gPSB2ZWM0KHBvc2l0aW9uLCAwLiwgMS4pOwogIF90ZXh0dXJlX2Nvb3JkID0gdGV4dHVyZV9jb29yZDsKfQpgO2NsYXNzIEJmIGV4dGVuZHMgRWV7Z2V0RnJhZ21lbnRTaGFkZXIoKXtyZXR1cm4gRGZ9Z2V0VmVydGV4U2hhZGVyKCl7cmV0dXJuIENmfX12YXIgTWY9YHByZWNpc2lvbiBtZWRpdW1wIGZsb2F0OwoKdmFyeWluZyB2ZWMyIF90ZXh0dXJlX2Nvb3JkOwoKdW5pZm9ybSB2ZWMyIGNhbnZhczsKdW5pZm9ybSBzYW1wbGVyMkQgdGV4dHVyZTsKCnZvaWQgbWFpbigpIHsKICB2ZWM0IGNvbG9yID0gdGV4dHVyZTJEKHRleHR1cmUsIF90ZXh0dXJlX2Nvb3JkKTsKICBmb3IgKGZsb2F0IHkgPSAtMi47IHkgPCAzLjsgeSArPSAxLikgewogICAgZm9yIChmbG9hdCB4ID0gLTIuOyB4IDwgMy47IHggKz0gMS4pIHsKICAgICAgdmVjMiBjb29yZCA9IF90ZXh0dXJlX2Nvb3JkOwogICAgICBjb29yZCArPSB2ZWMyKHksIHgpIC8gY2FudmFzOwogICAgICBjb2xvciArPSB0ZXh0dXJlMkQodGV4dHVyZSwgY29vcmQpICogKDEuIC8gNC4pOwogICAgfQogIH0KCiAgZ2xfRnJhZ0NvbG9yID0gY29sb3I7Cn0KYCxPZj1gdmFyeWluZyB2ZWMyIF90ZXh0dXJlX2Nvb3JkOwoKYXR0cmlidXRlIHZlYzIgcG9zaXRpb247CmF0dHJpYnV0ZSB2ZWMyIHRleHR1cmVfY29vcmQ7Cgp2b2lkIG1haW4oKSB7CiAgZ2xfUG9zaXRpb24gPSB2ZWM0KHBvc2l0aW9uLCAwLiwgMS4pOwogIF90ZXh0dXJlX2Nvb3JkID0gdGV4dHVyZV9jb29yZDsKfQpgO2NsYXNzIFVmIGV4dGVuZHMgR3J7Z2V0RnJhZ21lbnRTaGFkZXIoKXtyZXR1cm4gTWZ9Z2V0VmVydGV4U2hhZGVyKCl7cmV0dXJuIE9mfX12YXIgTmY9YHByZWNpc2lvbiBtZWRpdW1wIGZsb2F0OwoKdmFyeWluZyB2ZWMyIF90ZXh0dXJlX2Nvb3JkOwoKdW5pZm9ybSBzYW1wbGVyMkQgdGhyZXNob2xkOwp1bmlmb3JtIHNhbXBsZXIyRCBpbnB1dHM7Cgp2b2lkIG1haW4oKSB7CiAgdmVjNCBpbnB1dHNfY29sb3IgPSB0ZXh0dXJlMkQoaW5wdXRzLCBfdGV4dHVyZV9jb29yZCk7CiAgdmVjNCB0aHJlc2hvbGRfY29sb3IgPSB0ZXh0dXJlMkQodGhyZXNob2xkLCBfdGV4dHVyZV9jb29yZCk7CiAgaWYgKHRocmVzaG9sZF9jb2xvci5yIDwgLjEgJiYgaW5wdXRzX2NvbG9yLnIgPiAuNSkgewogICAgZ2xfRnJhZ0NvbG9yID0gaW5wdXRzX2NvbG9yOwogIH0KfQpgLExmPWB2YXJ5aW5nIHZlYzIgX3RleHR1cmVfY29vcmQ7CgphdHRyaWJ1dGUgdmVjMiBwb3NpdGlvbjsKYXR0cmlidXRlIHZlYzIgdGV4dHVyZV9jb29yZDsKCnZvaWQgbWFpbigpIHsKICBnbF9Qb3NpdGlvbiA9IHZlYzQocG9zaXRpb24sIDAuLCAxLik7CiAgX3RleHR1cmVfY29vcmQgPSB0ZXh0dXJlX2Nvb3JkOwp9CmA7Y2xhc3MgemYgZXh0ZW5kcyBHcntnZXRGcmFnbWVudFNoYWRlcigpe3JldHVybiBOZn1nZXRWZXJ0ZXhTaGFkZXIoKXtyZXR1cm4gTGZ9fWNsYXNzIEdmIGV4dGVuZHMgTnJ7Y29uc3RydWN0b3IodCxuLG8pe3N1cGVyKCk7bCh0aGlzLCJpbnB1dEltYWdlIik7bCh0aGlzLCJpbnB1dE1hc2siKTtsKHRoaXMsInByZXZpb3VzSW5wdXRJbWFnZSIpO2wodGhpcywicHJldmlvdXNJbnB1dE1hc2siKTtsKHRoaXMsIm91dHB1dCIpO2wodGhpcywib3B0aW9ucyIse2N1cnJlbnRUaHJlc2hvbGRNaW5pbXVtOjAsY3VycmVudFRocmVzaG9sZE1heGltdW06MSxwcmV2aW91c1RocmVzaG9sZE1pbmltdW06MCxwcmV2aW91c1RocmVzaG9sZE1heGltdW06MSx0aHJlc2hvbGRNaW5pbXVtOjAsdGhyZXNob2xkTWF4aW11bToxLHRocmVzaG9sZEZhY3RvcjoxfSk7bCh0aGlzLCJqb2ludEJpbGF0ZXJhbCIpO3RoaXMuY29udGV4dD10O2NvbnN0IGk9e2NvbnRleHQ6dCxoZWlnaHQ6byx3aWR0aDpufSxzPW5ldyBSZihpKSxhPW5ldyBGbyh7Li4uaSxyYWRpdXM6MSx0eXBlOnpyLkdBVVNTSUFOfSksdT1uZXcgemYoaSksZj1uZXcgVWYoaSksZD1uZXcgQmYoaSk7dGhpcy5qb2ludEJpbGF0ZXJhbD1uZXcga2YoaSksdGhpcy5hZGRTdGVwKHtwcm9ncmFtOnMsZ2V0VW5pZm9ybXM6KCk9Pih7aW1hZ2Vfbm93OkkodCx0aGlzLmlucHV0SW1hZ2UpLGltYWdlX2JlZm9yZTpJKHQsdGhpcy5wcmV2aW91c0lucHV0SW1hZ2UpLG1hc2tfbm93OkkodCx0aGlzLmlucHV0TWFzayksbWFza19iZWZvcmU6SSh0LHRoaXMucHJldmlvdXNJbnB1dE1hc2spLGN1cnJlbnRfdGhyZXNob2xkX21pbmltdW06dGhpcy5vcHRpb25zLmN1cnJlbnRUaHJlc2hvbGRNaW5pbXVtLGN1cnJlbnRfdGhyZXNob2xkX21heGltdW06dGhpcy5vcHRpb25zLmN1cnJlbnRUaHJlc2hvbGRNYXhpbXVtLHByZXZpb3VzX3RocmVzaG9sZF9taW5pbXVtOnRoaXMub3B0aW9ucy5wcmV2aW91c1RocmVzaG9sZE1pbmltdW0scHJldmlvdXNfdGhyZXNob2xkX21heGltdW06dGhpcy5vcHRpb25zLnByZXZpb3VzVGhyZXNob2xkTWF4aW11bSx0aHJlc2hvbGRfbWluaW11bTp0aGlzLm9wdGlvbnMudGhyZXNob2xkTWluaW11bSx0aHJlc2hvbGRfbWF4aW11bTp0aGlzLm9wdGlvbnMudGhyZXNob2xkTWF4aW11bSx0aHJlc2hvbGRfZmFjdG9yOnRoaXMub3B0aW9ucy50aHJlc2hvbGRGYWN0b3J9KX0pLHRoaXMuYWRkU3RlcCh7cHJvZ3JhbTp1LGdldFVuaWZvcm1zOigpPT4oe2lucHV0czpJKHQsdGhpcy5pbnB1dE1hc2spLHRocmVzaG9sZDpJKHQscy5vdXRwdXQpfSl9KSx0aGlzLmFkZFN0ZXAoe3Byb2dyYW06ZCxnZXRVbmlmb3JtczooKT0+KHt0ZXh0dXJlOkkodCx1Lm91dHB1dCl9KX0pLHRoaXMuYWRkU3RlcCh7cHJvZ3JhbTpmLGdldFVuaWZvcm1zOigpPT4oe3RleHR1cmU6SSh0LGQub3V0cHV0KX0pfSksdGhpcy5hZGRTdGVwKHtwcm9ncmFtOmEsZ2V0VW5pZm9ybXM6KCk9Pih7dGV4dHVyZTpJKHQsZi5vdXRwdXQpfSl9KSx0aGlzLmFkZFN0ZXAoe3Byb2dyYW06dGhpcy5qb2ludEJpbGF0ZXJhbCxnZXRVbmlmb3JtczooKT0+e3ZhciBHLHosSCwkLEtlLFRlLGxlLFc7Y29uc3QgZz0oej0oRz10aGlzLmlucHV0SW1hZ2UpPT1udWxsP3ZvaWQgMDpHLndpZHRoKSE9bnVsbD96OjEsYj0oJD0oSD10aGlzLmlucHV0SW1hZ2UpPT1udWxsP3ZvaWQgMDpILmhlaWdodCkhPW51bGw/JDoxLGg9KFRlPShLZT10aGlzLmlucHV0TWFzayk9PW51bGw/dm9pZCAwOktlLndpZHRoKSE9bnVsbD9UZToxLHg9KFc9KGxlPXRoaXMuaW5wdXRNYXNrKT09bnVsbD92b2lkIDA6bGUuaGVpZ2h0KSE9bnVsbD9XOjEsRT1NYXRoLm1heChnL2gsYi94KSx2PU1hdGgubWF4KDEsTWF0aC5zcXJ0KEUpKi42NiksRj0xL2csaz0xL2I7cmV0dXJue2lucHV0X2ZyYW1lOkkodCx0aGlzLmlucHV0SW1hZ2UpLHNlZ21lbnRhdGlvbl9tYXNrOkkodCx0aGlzLmlucHV0TWFzayksdGhyZXNob2xkOkkodCxhLm91dHB1dCksdGV4ZWxfc2l6ZTpbRixrXSxzdGVwOnYscmFkaXVzOkUsb2Zmc2V0OnY+MT92Ki41OjAsc2lnbWFfdGV4ZWw6TWF0aC5tYXgoRixrKSpFLHNpZ21hX2NvbG9yOi4xfX19KSx0aGlzLm91dHB1dD10aGlzLmpvaW50QmlsYXRlcmFsLm91dHB1dH1zZXREYXRhKHQsbil7dGhpcy5wcmV2aW91c0lucHV0SW1hZ2U9dGhpcy5pbnB1dEltYWdlP3RoaXMuaW5wdXRJbWFnZTp0LHRoaXMucHJldmlvdXNJbnB1dE1hc2s9dGhpcy5pbnB1dE1hc2s/dGhpcy5pbnB1dE1hc2s6bix0aGlzLmlucHV0SW1hZ2U9dCx0aGlzLmlucHV0TWFzaz1ufXNldE9wdGlvbnModCl7dGhpcy5vcHRpb25zPXR9cmVzaXplT3V0cHV0KHQsbil7c3VwZXIucmVzaXplT3V0cHV0KHQsbiksdGhpcy5vdXRwdXQ9dGhpcy5qb2ludEJpbGF0ZXJhbC5vdXRwdXR9fWNsYXNzICRme2NvbnN0cnVjdG9yKGUpe2wodGhpcywiY29udGV4dCIpO2wodGhpcywiZXh0ZW5zaW9uIik7bCh0aGlzLCJxdWVyaWVzIixbXSk7bCh0aGlzLCJhY3RpdmVRdWVyeSIpO3RoaXMuY29udGV4dD1lLHRoaXMuZXh0ZW5zaW9uPWUuZ2V0RXh0ZW5zaW9uKCJFWFRfZGlzam9pbnRfdGltZXJfcXVlcnlfd2ViZ2wyIil9c3RhcnQoKXt9c3RvcCgpe3RoaXMuYWN0aXZlUXVlcnkmJnRoaXMuY29udGV4dC5lbmRRdWVyeSh0aGlzLmV4dGVuc2lvbi5USU1FX0VMQVBTRURfRVhUKX1wdXNoQ29udGV4dChlKXt0aGlzLmNyZWF0ZVF1ZXJ5KCJQVVNIIixlKX1wb3BDb250ZXh0KGUpe3RoaXMuY3JlYXRlUXVlcnkoIlBPUCIsZSl9Y3JlYXRlUXVlcnkoZSx0KXt0aGlzLmFjdGl2ZVF1ZXJ5JiZ0aGlzLmNvbnRleHQuZW5kUXVlcnkodGhpcy5leHRlbnNpb24uVElNRV9FTEFQU0VEX0VYVCksdGhpcy5hY3RpdmVRdWVyeT10aGlzLmNvbnRleHQuY3JlYXRlUXVlcnkoKSx0aGlzLmNvbnRleHQuYmVnaW5RdWVyeSh0aGlzLmV4dGVuc2lvbi5USU1FX0VMQVBTRURfRVhULHRoaXMuYWN0aXZlUXVlcnkpLHRoaXMucXVlcmllcy5wdXNoKHtuYW1lOnQsYWN0aW9uOmUscXVlcnk6dGhpcy5hY3RpdmVRdWVyeX0pfWFzeW5jIGdldFJlc29sdmVkUXVlcmllcygpe2NvbnN0IGU9KGF3YWl0IFByb21pc2UuYWxsKFsuLi50aGlzLnF1ZXJpZXNdLm1hcCh0PT50aGlzLnJlc29sdmVRdWVyeSh0KSkpKS5maWx0ZXIodD0+dCk7Zm9yKGxldCB0PTE7dDxlLmxlbmd0aDsrK3QpZVt0XS50aW1lc3RhbXArPWVbdC0xXS5kdXJhdGlvbitlW3QtMV0udGltZXN0YW1wO3JldHVybiBlfWFzeW5jIHJlc29sdmVRdWVyeShlKXtpZighYXdhaXQgdGhpcy5hd2FpdFF1ZXJ5QXZhaWxhYmxlKGUpKXtjb25zb2xlLmxvZygiVW5hd2FpdGFibGUgcXVlcnkiLGUpO3JldHVybn1pZih0aGlzLmNvbnRleHQuZ2V0UGFyYW1ldGVyKHRoaXMuZXh0ZW5zaW9uLkdQVV9ESVNKT0lOVF9FWFQpKXtjb25zb2xlLmxvZygiRGlzam9pbnRlZCBxdWVyeSIsZSk7cmV0dXJufXJldHVybnsuLi5lLGR1cmF0aW9uOnRoaXMuY29udGV4dC5nZXRRdWVyeVBhcmFtZXRlcihlLnF1ZXJ5LHRoaXMuY29udGV4dC5RVUVSWV9SRVNVTFQpLHRpbWVzdGFtcDowfX1hc3luYyBhd2FpdFF1ZXJ5QXZhaWxhYmxlKGUpe2ZvcihsZXQgdD0wO3Q8MTA7Kyt0KXtpZih0aGlzLmNvbnRleHQuZ2V0UXVlcnlQYXJhbWV0ZXIoZS5xdWVyeSx0aGlzLmNvbnRleHQuUVVFUllfUkVTVUxUX0FWQUlMQUJMRSkpcmV0dXJuIGU7YXdhaXQgUm8oMjAwKX19fWNsYXNzIHp0e2NvbnN0cnVjdG9yKCl7bCh0aGlzLCJjYW52YXMiKTtsKHRoaXMsImNvbnRleHQiKTtsKHRoaXMsInBpcGVsaW5lIik7bCh0aGlzLCJwcmV2aW91c0ltYWdlV2lkdGgiLDApO2wodGhpcywicHJldmlvdXNJbWFnZUhlaWdodCIsMCk7bCh0aGlzLCJwcmV2aW91c01hc2tXaWR0aCIsT2UpO2wodGhpcywicHJldmlvdXNNYXNrSGVpZ2h0IixPZSk7bCh0aGlzLCJwcm9maWxlciIpO2wodGhpcywicG9zdFByb2Nlc3NpbmdFbmFibGVkIiwhMCk7bCh0aGlzLCJpbXByb3ZlTWFzayIpO2NvbnN0IGU9bmV3IE9mZnNjcmVlbkNhbnZhcygwLDApLHQ9ZS5nZXRDb250ZXh0KCJ3ZWJnbDIiKTtpZighdCl0aHJvdyJGYWlsIHRvIHJldHJpZXZlIHdlYmdsMiBjb250ZXh0Ijt0aGlzLmNhbnZhcz1lLHRoaXMuY29udGV4dD10LHRoaXMuaW1wcm92ZU1hc2s9bmV3IEdmKHRoaXMuY29udGV4dCxPZSxPZSl9c2V0RmxpY2tlcmluZ09wdGlvbnMoZSl7dGhpcy5pbXByb3ZlTWFzay5zZXRPcHRpb25zKGUpfWVuYWJsZVBvc3RQcm9jZXNzaW5nKCl7dGhpcy5wb3N0UHJvY2Vzc2luZ0VuYWJsZWQ9ITB9ZGlzYWJsZVBvc3RQcm9jZXNzaW5nKCl7dGhpcy5wb3N0UHJvY2Vzc2luZ0VuYWJsZWQ9ITF9YXN5bmMgcHJvZmlsZVdlYmdsKGUpe2NvbnN0IHQ9bmV3ICRmKHRoaXMuY29udGV4dCk7cmV0dXJuIHRoaXMucHJvZmlsZXI9dCx0LnN0YXJ0KCksYXdhaXQgUm8oZSksdGhpcy5wcm9maWxlcj12b2lkIDAsdC5zdG9wKCksdC5nZXRSZXNvbHZlZFF1ZXJpZXMoKX1hc3luYyByZW5kZXIoZSx0KXt2YXIgaSxzO2lmKCF0aGlzLnBpcGVsaW5lKXRocm93Im1pc3NpbmcgcGlwZWxpbmUiOyh0aGlzLnByZXZpb3VzSW1hZ2VIZWlnaHQhPT1lLmhlaWdodHx8dGhpcy5wcmV2aW91c0ltYWdlV2lkdGghPT1lLndpZHRoKSYmdGhpcy5yZXNpemVPdXRwdXQoZS53aWR0aCxlLmhlaWdodCksKHRoaXMucHJldmlvdXNNYXNrSGVpZ2h0IT09dC5oZWlnaHR8fHRoaXMucHJldmlvdXNNYXNrV2lkdGghPT10LndpZHRoKSYmKHRoaXMuaW1wcm92ZU1hc2sucmVzaXplT3V0cHV0KHQud2lkdGgsdC5oZWlnaHQpLHRoaXMucHJldmlvdXNNYXNrV2lkdGg9dC53aWR0aCx0aGlzLnByZXZpb3VzTWFza0hlaWdodD10LmhlaWdodCk7Y29uc3Qgbj0icmVuZGVyZXIiOyhpPXRoaXMucHJvZmlsZXIpPT1udWxsfHxpLnB1c2hDb250ZXh0KG4pLHRoaXMuaW1wcm92ZU1hc2suc2V0UHJvZmlsZXIodGhpcy5wcm9maWxlciksdGhpcy5waXBlbGluZS5zZXRQcm9maWxlcih0aGlzLnByb2ZpbGVyKTtsZXQgbz10O3JldHVybiB0aGlzLnBvc3RQcm9jZXNzaW5nRW5hYmxlZCYmKHRoaXMuaW1wcm92ZU1hc2suc2V0RGF0YShlLHQpLHRoaXMuaW1wcm92ZU1hc2sucnVuKCksbz10aGlzLmltcHJvdmVNYXNrLm91dHB1dCksdGhpcy5waXBlbGluZS5zZXREYXRhKGUsbyksYXdhaXQgdGhpcy5waXBlbGluZS5ydW4oKSwocz10aGlzLnByb2ZpbGVyKT09bnVsbHx8cy5wb3BDb250ZXh0KG4pLHRoaXMuY2FudmFzfXJlc2l6ZU91dHB1dChlLHQpe3ZhciBuO3RoaXMuY2FudmFzLndpZHRoPWUsdGhpcy5jYW52YXMuaGVpZ2h0PXQsKG49dGhpcy5waXBlbGluZSk9PW51bGx8fG4ucmVzaXplT3V0cHV0KGUsdCksdGhpcy5wcmV2aW91c0ltYWdlV2lkdGg9ZSx0aGlzLnByZXZpb3VzSW1hZ2VIZWlnaHQ9dH19Y2xhc3MgUG8gZXh0ZW5kcyB6dHtjb25zdHJ1Y3Rvcigpe3N1cGVyKCk7bCh0aGlzLCJwaXBlbGluZSIpO2wodGhpcywiYmFja2dyb3VuZEltYWdlIik7bCh0aGlzLCJiYWNrZ3JvdW5kSW1hZ2VSZXNpemVyQ2FudmFzIik7bCh0aGlzLCJiYWNrZ3JvdW5kSW1hZ2VSZXNpemVyQ29udGV4dCIpO2wodGhpcywiYmFja2dyb3VuZEltYWdlUmVzaXplciIpO3RoaXMucGlwZWxpbmU9bmV3IFNvKHRoaXMuY29udGV4dCk7Y29uc3QgdD1uZXcgT2Zmc2NyZWVuQ2FudmFzKDAsMCksbj10LmdldENvbnRleHQoIndlYmdsMiIpO2lmKCFuKXRocm93IkZhaWwgdG8gcmV0cmlldmUgd2ViZ2wgY29udGV4dCI7dGhpcy5iYWNrZ3JvdW5kSW1hZ2VSZXNpemVyQ2FudmFzPXQsdGhpcy5iYWNrZ3JvdW5kSW1hZ2VSZXNpemVyQ29udGV4dD1uLHRoaXMuYmFja2dyb3VuZEltYWdlUmVzaXplcj1uZXcgVGYodGhpcy5iYWNrZ3JvdW5kSW1hZ2VSZXNpemVyQ29udGV4dCwwLDApfXNldEJhY2tncm91bmRJbWFnZSh0KXt0aGlzLmJhY2tncm91bmRJbWFnZT10LHRoaXMudXBkYXRlQmFja2dyb3VuZEltYWdlKCl9dXBkYXRlQmFja2dyb3VuZEltYWdlKCl7Y29uc3R7d2lkdGg6dCxoZWlnaHQ6bn09dGhpcy5jYW52YXM7dGhpcy5iYWNrZ3JvdW5kSW1hZ2VSZXNpemVyLnJlc2l6ZU91dHB1dCh0LG4pLHRoaXMuYmFja2dyb3VuZEltYWdlUmVzaXplci5zZXREYXRhKHRoaXMuYmFja2dyb3VuZEltYWdlKSx0aGlzLmJhY2tncm91bmRJbWFnZVJlc2l6ZXIucnVuKCksdGhpcy5waXBlbGluZS5pbnB1dEJhY2tncm91bmRJbWFnZT10aGlzLmJhY2tncm91bmRJbWFnZVJlc2l6ZXJDYW52YXN9cmVzaXplT3V0cHV0KHQsbil7c3VwZXIucmVzaXplT3V0cHV0KHQsbiksdGhpcy5iYWNrZ3JvdW5kSW1hZ2VSZXNpemVyQ2FudmFzLndpZHRoPXQsdGhpcy5iYWNrZ3JvdW5kSW1hZ2VSZXNpemVyQ2FudmFzLmhlaWdodD1uLHRoaXMuYmFja2dyb3VuZEltYWdlUmVzaXplci5yZXNpemVPdXRwdXQodCxuKSx0aGlzLnVwZGF0ZUJhY2tncm91bmRJbWFnZSgpfX1jbGFzcyBXZiBleHRlbmRzIFBve2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKTtsKHRoaXMsImZyYW1lUmVhZGVyIil9c2V0QmFja2dyb3VuZFZpZGVvKHQpe3RoaXMuZnJhbWVSZWFkZXI9dH1hc3luYyByZW5kZXIodCxuKXtyZXR1cm4gYXdhaXQgdGhpcy5yZWFkTmV4dFZpZGVvRnJhbWUoKSxzdXBlci5yZW5kZXIodCxuKX1hc3luYyByZWFkTmV4dFZpZGVvRnJhbWUoKXt2YXIgbjtjb25zdCB0PWF3YWl0KChuPXRoaXMuZnJhbWVSZWFkZXIpPT1udWxsP3ZvaWQgMDpuLnJlYWQoKSk7aWYodCE9bnVsbCYmdC52YWx1ZSl7Y29uc3Qgbz1hd2FpdCBjcmVhdGVJbWFnZUJpdG1hcCh0LnZhbHVlKTt0aGlzLnNldEJhY2tncm91bmRJbWFnZShvKSx0LnZhbHVlLmNsb3NlKCl9fX1jbGFzcyBrb3tibHVyQmFja2dyb3VuZChlKXtyZXR1cm4gbmV3IGxzKGUpfWJsdXJTaWxob3VldHRlKGUpe3JldHVybiBuZXcgZHMoZSl9aW1hZ2VCYWNrZ3JvdW5kKCl7cmV0dXJuIG5ldyBoc312aWRlb0JhY2tncm91bmQoKXtyZXR1cm4gbmV3IFdmfX12YXIgVmY9YHByZWNpc2lvbiBtZWRpdW1wIGZsb2F0OwoKdmFyeWluZyB2ZWMyIF90ZXh0dXJlX2Nvb3JkOwoKdW5pZm9ybSB2ZWMyIGNhbnZhczsKdW5pZm9ybSBzYW1wbGVyMkQgdGV4dHVyZTsKdW5pZm9ybSBzYW1wbGVyMkQgbWFzazsKCnZlYzQgbG9vcCgpOwoKdm9pZCBtYWluKCkgeyBnbF9GcmFnQ29sb3IgPSBsb29wKCk7IH0KYCxIZj1gdmFyeWluZyB2ZWMyIF90ZXh0dXJlX2Nvb3JkOwoKYXR0cmlidXRlIHZlYzIgcG9zaXRpb247CmF0dHJpYnV0ZSB2ZWMyIHRleHR1cmVfY29vcmQ7Cgp2b2lkIG1haW4oKSB7CiAgZ2xfUG9zaXRpb24gPSB2ZWM0KHBvc2l0aW9uLCAwLiwgMS4pOwogIF90ZXh0dXJlX2Nvb3JkID0gdGV4dHVyZV9jb29yZDsKfQpgO2NsYXNzIGpmIGV4dGVuZHMgRWV7Z2V0RGVmaW5lcygpe3ZhciBlO3JldHVybntSQURJVVM6KGU9dGhpcy5vcHRpb25zLnJhZGl1cykhPW51bGw/ZToxfX1nZXRGcmFnbWVudFNoYWRlcigpe3JldHVybiBWZit0aGlzLmNyZWF0ZUxvb3BGdW5jdGlvbigpfWdldFZlcnRleFNoYWRlcigpe3JldHVybiBIZn1jcmVhdGVMb29wRnVuY3Rpb24oKXt2YXIgdDtsZXQgZT0odD10aGlzLm9wdGlvbnMucmFkaXVzKSE9bnVsbD90OjE7cmV0dXJuYAoKICAgICAgICB2ZWM0IGxvb3AoKSB7IAogICAgICAgICAgICB2ZWM0IHJlc3VsdCA9IHZlYzQoMCwwLDAsMCk7CiAgICAgICAgICAgIGZsb2F0IGZhY3RvclN1bSA9IDAuOwoKICAgICAgICAgICAgdmVjMiBub3JtYWxpemVkUmFkaXVzID0gdmVjMigtJHtlfS4pIC8gY2FudmFzOwogICAgICAgICAgICB2ZWMyIG5vcm1hbGl6ZWRJbmNyZW1lbnQgPSB2ZWMyKDEuKSAvIGNhbnZhczsKICAgICAgICAgICAgdmVjMiBkaWZmID0gbm9ybWFsaXplZFJhZGl1czsKICAgICAgICAgICAgZmxvYXQgbWF4TGVuZ3RoID0gbGVuZ3RoKG5vcm1hbGl6ZWRSYWRpdXMpOwoKICAgICAgICAgICAgZm9yKGludCB5PS0ke2V9OyB5PCR7ZSsxfTsgKyt5KSB7CiAgICAgICAgICAgICAgICBmb3IoaW50IHg9LSR7ZX07IHg8JHtlKzF9OyArK3gpIHsKICAgICAgICAgICAgICAgICAgICBmbG9hdCBmYWN0b3IgPSAoMS4tIHRleHR1cmUyRChtYXNrLCBfdGV4dHVyZV9jb29yZCArIGRpZmYpLmEpICogKG1heExlbmd0aCAtIGxlbmd0aChkaWZmKSkgLyBtYXhMZW5ndGg7CiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IGZhY3RvciAqIHRleHR1cmUyRCh0ZXh0dXJlLCBfdGV4dHVyZV9jb29yZCArIGRpZmYpOwogICAgICAgICAgICAgICAgICAgIGZhY3RvclN1bSArPSBmYWN0b3I7CiAgICAgICAgICAgICAgICAgICAgZGlmZi54ICs9IG5vcm1hbGl6ZWRJbmNyZW1lbnQueDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGRpZmYueSArPSBub3JtYWxpemVkSW5jcmVtZW50Lnk7CiAgICAgICAgICAgICAgICBkaWZmLnggPSBub3JtYWxpemVkUmFkaXVzLng7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCAvIGZhY3RvclN1bTsKICAgICAgICB9YH19Y29uc3QgWWY9MTAsWGY9MixRZj04O2NsYXNzIHFmIGV4dGVuZHMgTHJ7Y29uc3RydWN0b3IodCxuKXtzdXBlcigpO2wodGhpcywiaW5wdXRJbWFnZSIpO2wodGhpcywiaW5wdXRNYXNrIik7bCh0aGlzLCJibHVyIik7dGhpcy5jb250ZXh0PXQsdGhpcy5yYWRpdXM9bjtjb25zdCBvPXtjb250ZXh0OnQsaGVpZ2h0OnQuY2FudmFzLmhlaWdodCx3aWR0aDp0LmNhbnZhcy53aWR0aH07dGhpcy5ibHVyPW5ldyBqZih7Li4ubyxyYWRpdXM6biwuLi50aGlzLmdldEJsdXJUZXh0dXJlU2l6ZSh0LmNhbnZhcy53aWR0aCx0LmNhbnZhcy5oZWlnaHQpfSk7Y29uc3QgaT1uZXcgVXIoey4uLm8sZGlzYWJsZUZyYW1lYnVmZmVyOiEwfSk7dGhpcy5hZGRTdGVwKHtwcm9ncmFtOnRoaXMuYmx1cixwcmV2ZW50UmVzaXplOiEwLGdldFVuaWZvcm1zOigpPT4oe3RleHR1cmU6SSh0LHRoaXMuaW5wdXRJbWFnZSksbWFzazpJKHQsdGhpcy5pbnB1dE1hc2spfSl9KSx0aGlzLmFkZFN0ZXAoe3Byb2dyYW06aSxnZXRVbmlmb3JtczooKT0+KHtiYWNrZ3JvdW5kOkkodCx0aGlzLmJsdXIub3V0cHV0KSxmb3JlZ3JvdW5kOkkodCx0aGlzLmlucHV0SW1hZ2UpLHRocmVzaG9sZDpJKHQsdGhpcy5pbnB1dE1hc2spfSl9KX1nZXRCbHVyVGV4dHVyZVNpemUodCxuKXtjb25zdCBvPXRoaXMucmFkaXVzPllmP1FmOlhmO3JldHVybnt3aWR0aDpNYXRoLm1heChPZSx0L28pLGhlaWdodDpNYXRoLm1heChPZSxuL28pfX1zZXREYXRhKHQsbil7dGhpcy5pbnB1dEltYWdlPXQsdGhpcy5pbnB1dE1hc2s9bn1yZXNpemVPdXRwdXQodCxuKXtzdXBlci5yZXNpemVPdXRwdXQodCxuKTtjb25zdCBvPXRoaXMuZ2V0Qmx1clRleHR1cmVTaXplKHQsbik7dGhpcy5ibHVyLnJlc2l6ZU91dHB1dChvLndpZHRoLG8uaGVpZ2h0KX19Y2xhc3MgS2YgZXh0ZW5kcyB6dHtjb25zdHJ1Y3Rvcih0KXtzdXBlcigpO2wodGhpcywicGlwZWxpbmUiKTt0aGlzLnBpcGVsaW5lPW5ldyBxZih0aGlzLmNvbnRleHQsdCksdGhpcy5kaXNhYmxlUG9zdFByb2Nlc3NpbmcoKX19Y2xhc3MgSmYgZXh0ZW5kcyBMcntjb25zdHJ1Y3Rvcih0LG4pe3N1cGVyKCk7bCh0aGlzLCJpbnB1dEltYWdlIik7bCh0aGlzLCJpbnB1dE1hc2siKTt0aGlzLmNvbnRleHQ9dDtjb25zdCBvPXtjb250ZXh0OnQsaGVpZ2h0OnQuY2FudmFzLmhlaWdodCx3aWR0aDp0LmNhbnZhcy53aWR0aH0saT1uZXcgRm8oey4uLm8scmFkaXVzOm4sdHlwZTp6ci5HQVVTU0lBTn0pLHM9bmV3IFVyKHsuLi5vLGRpc2FibGVGcmFtZWJ1ZmZlcjohMH0pO3RoaXMuYWRkU3RlcCh7cHJvZ3JhbTppLGdldFVuaWZvcm1zOigpPT4oe3RleHR1cmU6SSh0LHRoaXMuaW5wdXRJbWFnZSl9KX0pLHRoaXMuYWRkU3RlcCh7cHJvZ3JhbTpzLGdldFVuaWZvcm1zOigpPT4oe2JhY2tncm91bmQ6SSh0LHRoaXMuaW5wdXRJbWFnZSksZm9yZWdyb3VuZDpJKHQsaS5vdXRwdXQpLHRocmVzaG9sZDpJKHQsdGhpcy5pbnB1dE1hc2spfSl9KX1zZXREYXRhKHQsbil7dGhpcy5pbnB1dEltYWdlPXQsdGhpcy5pbnB1dE1hc2s9bn19Y2xhc3MgWmYgZXh0ZW5kcyB6dHtjb25zdHJ1Y3Rvcih0KXtzdXBlcigpO2wodGhpcywicGlwZWxpbmUiKTt0aGlzLnBpcGVsaW5lPW5ldyBKZih0aGlzLmNvbnRleHQsdCksdGhpcy5kaXNhYmxlUG9zdFByb2Nlc3NpbmcoKX19Y2xhc3MgZWwgZXh0ZW5kcyBTb3tjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyk7bCh0aGlzLCJmcmFtZVJlYWRlciIpO2wodGhpcywicHJlY2lzZU1hc2tFbmFibGVkIiwhMCl9c2V0IHJlYWRlcih0KXt0aGlzLmZyYW1lUmVhZGVyPXR9YXN5bmMgcnVuKCl7dGhpcy5mcmFtZVJlYWRlciYmKGF3YWl0IHRoaXMucmVhZE5leHRWaWRlb0ZyYW1lKCksYXdhaXQgc3VwZXIucnVuKCkpfWFzeW5jIHJlYWROZXh0VmlkZW9GcmFtZSgpe3ZhciBuO2NvbnN0IHQ9YXdhaXQoKG49dGhpcy5mcmFtZVJlYWRlcik9PW51bGw/dm9pZCAwOm4ucmVhZCgpKTt0IT1udWxsJiZ0LnZhbHVlJiYodGhpcy5pbnB1dEJhY2tncm91bmRJbWFnZT1hd2FpdCBjcmVhdGVJbWFnZUJpdG1hcCh0LnZhbHVlKSx0LnZhbHVlLmNsb3NlKCkpfX1jbGFzcyB0bCBleHRlbmRzIHp0e2NvbnN0cnVjdG9yKCl7c3VwZXIoKTtsKHRoaXMsInBpcGVsaW5lIik7dGhpcy5waXBlbGluZT1uZXcgZWwodGhpcy5jb250ZXh0KX1zZXRCYWNrZ3JvdW5kVmlkZW8odCl7dGhpcy5waXBlbGluZS5yZWFkZXI9dH19Y2xhc3MgRG97Ymx1ckJhY2tncm91bmQoZSl7cmV0dXJuIG5ldyBLZihlKX1ibHVyU2lsaG91ZXR0ZShlKXtyZXR1cm4gbmV3IFpmKGUpfWltYWdlQmFja2dyb3VuZCgpe3JldHVybiBuZXcgUG99dmlkZW9CYWNrZ3JvdW5kKCl7cmV0dXJuIG5ldyB0bH19Y2xhc3Mgcmx7Y29uc3RydWN0b3IoZSl7bCh0aGlzLCJmYWN0b3J5Iik7c3dpdGNoKGUpe2Nhc2UgeXQuQ0FOVkFTOnRoaXMuZmFjdG9yeT1uZXcga287YnJlYWs7Y2FzZSB5dC5XRUJHTDp0aGlzLmZhY3Rvcnk9bmV3IERvO2JyZWFrO2RlZmF1bHQ6Y29uc3QgdD1mcygpO3RoaXMuZmFjdG9yeT10LnN1cHBvcnRlZD9uZXcgRG86bmV3IGtvfX1ibHVyQmFja2dyb3VuZChlKXtyZXR1cm4gdGhpcy5nZXRGYWN0b3J5KCkuYmx1ckJhY2tncm91bmQoZSl9Ymx1clNpbGhvdWV0dGUoZSl7cmV0dXJuIHRoaXMuZ2V0RmFjdG9yeSgpLmJsdXJTaWxob3VldHRlKGUpfWltYWdlQmFja2dyb3VuZCgpe3JldHVybiB0aGlzLmdldEZhY3RvcnkoKS5pbWFnZUJhY2tncm91bmQoKX12aWRlb0JhY2tncm91bmQoKXtyZXR1cm4gdGhpcy5nZXRGYWN0b3J5KCkudmlkZW9CYWNrZ3JvdW5kKCl9Z2V0RmFjdG9yeSgpe2lmKCF0aGlzLmZhY3RvcnkpdGhyb3ciRmFjdG9yeSBpcyBub3QgaW5pdGlhbGl6ZWQiO3JldHVybiB0aGlzLmZhY3Rvcnl9fWNsYXNzIG5se2NvbnN0cnVjdG9yKCl7bCh0aGlzLCJyZW5kZXJlciIpO2wodGhpcywiYmFja2dyb3VuZFZpZGVvIik7bCh0aGlzLCJiYWNrZ3JvdW5kSW1hZ2UiKX1zZXRCYWNrZ3JvdW5kT3B0aW9ucyhlKXt2YXIgbixvO2NvbnN0IHQ9bmV3IHJsKChuPWUucmVuZGVyaW5nT3B0aW9ucyk9PW51bGw/dm9pZCAwOm4udHlwZSk7c3dpdGNoKGUudHJhbnNmb3JtZXJUeXBlKXtjYXNlIkJhY2tncm91bmRCbHVyIjp0aGlzLnJlbmRlcmVyPXQuYmx1ckJhY2tncm91bmQodGhpcy5nZXRCbHVyU2l6ZShlLnJhZGl1cykpO2JyZWFrO2Nhc2UiU2lsaG91ZXR0ZUJsdXIiOnRoaXMucmVuZGVyZXI9dC5ibHVyU2lsaG91ZXR0ZSh0aGlzLmdldEJsdXJTaXplKGUucmFkaXVzKSk7YnJlYWs7Y2FzZSJWaWRlb0JhY2tncm91bmQiOmNvbnN0IGk9dC52aWRlb0JhY2tncm91bmQoKTt0aGlzLmJhY2tncm91bmRWaWRlbyYmaS5zZXRCYWNrZ3JvdW5kVmlkZW8odGhpcy5iYWNrZ3JvdW5kVmlkZW8pLHRoaXMucmVuZGVyZXI9aTticmVhaztjYXNlIlZpcnR1YWxCYWNrZ3JvdW5kIjpjb25zdCBzPXQuaW1hZ2VCYWNrZ3JvdW5kKCk7dGhpcy5iYWNrZ3JvdW5kSW1hZ2UmJnMuc2V0QmFja2dyb3VuZEltYWdlKHRoaXMuYmFja2dyb3VuZEltYWdlKSx0aGlzLnJlbmRlcmVyPXM7YnJlYWs7ZGVmYXVsdDp0aHJvd2BVbmtub3duIHJlbmRlcmluZyB0eXBlIFske2UudHJhbnNmb3JtZXJUeXBlfV1gfSgobz1lLnJlbmRlcmluZ09wdGlvbnMpPT1udWxsP3ZvaWQgMDpvLnR5cGUpPT09eXQuV0VCR0wmJihlLnJlbmRlcmluZ09wdGlvbnMuc2VsZmllU2VnbWVudGF0aW9uVHlwZT09PW5yLlBSRUNJU0U/dGhpcy5yZW5kZXJlci5lbmFibGVQb3N0UHJvY2Vzc2luZygpOmUucmVuZGVyaW5nT3B0aW9ucy5zZWxmaWVTZWdtZW50YXRpb25UeXBlPT09bnIuRkFTVCYmdGhpcy5yZW5kZXJlci5kaXNhYmxlUG9zdFByb2Nlc3NpbmcoKSl9c2V0RmxpY2tlcmluZ09wdGlvbnMoZSl7dmFyIHQ7KHQ9dGhpcy5yZW5kZXJlcik9PW51bGx8fHQuc2V0RmxpY2tlcmluZ09wdGlvbnMoZSl9c2V0VmlkZW9CR1JlYWRhYmxlKGUpe3RoaXMuYmFja2dyb3VuZFZpZGVvPWUuZ2V0UmVhZGVyKCk7Y29uc3QgdD10aGlzLnJlbmRlcmVyO3QhPW51bGwmJnQuc2V0QmFja2dyb3VuZFZpZGVvJiZ0LnNldEJhY2tncm91bmRWaWRlbyh0aGlzLmJhY2tncm91bmRWaWRlbyl9YXN5bmMgc2V0VmlydHVhbEJHSW1hZ2UoZSl7Y29uc3QgdD10aGlzLnJlbmRlcmVyO3QhPW51bGwmJnQuc2V0QmFja2dyb3VuZEltYWdlJiZ0LnNldEJhY2tncm91bmRJbWFnZShlKSx0aGlzLmJhY2tncm91bmRJbWFnZT1lfWFzeW5jIHByb2Nlc3MoZSx0KXtpZih0aGlzLnJlbmRlcmVyKXJldHVybiB0aGlzLnJlbmRlcmVyLnJlbmRlcihlLHQpfWFzeW5jIHJlc2l6ZUZvcmVncm91bmQoZSx0KXt9Z2V0Qmx1clNpemUoZT1ndC5Mb3cpe3N3aXRjaChlKXtjYXNlIGd0LkxvdzpyZXR1cm4gNTtjYXNlIGd0LkhpZ2g6cmV0dXJuIDEyfXJldHVybiBlfWFzeW5jIHByb2ZpbGUoZSl7dmFyIHQsbjtyZXR1cm4obj0odD10aGlzLnJlbmRlcmVyKT09bnVsbD92b2lkIDA6dC5wcm9maWxlV2ViZ2woZSkpIT1udWxsP246W119fWNsYXNzIG9se2NvbnN0cnVjdG9yKCl7bCh0aGlzLCJzZWxmaWVTZWdtZW50YXRpb24iLG5ldyBjcyk7bCh0aGlzLCJiYWNrZ3JvdW5kRmlsdGVyIik7bCh0aGlzLCJyZXBvcnRlciIsbmV3IHJzKTtsKHRoaXMsImlzRW5hYmxlZCIsITApO2wodGhpcywiYmFja2dyb3VuZE9wdGlvbnMiKX1hc3luYyBpbml0KGUsdCl7YXdhaXQgdGhpcy5zZWxmaWVTZWdtZW50YXRpb24uaW5pdCh0Lndhc21Bc3NldFVyaVBhdGgsdC50ZmxpdGVBc3NldFVyaVBhdGgpLHRoaXMuYmFja2dyb3VuZEZpbHRlcj1uZXcgbmwsdGhpcy5yZXBvcnQoe3ZhcmlhdGlvbjoiQ3JlYXRlIn0pfWFzeW5jIHRyYW5zZm9ybShlLHQpe3ZhciBhLHU7aWYoIXRoaXMuaXNFbmFibGVkKXJldHVybiB0LmVucXVldWUoZSk7bGV0IG47Y29uc3Qgbz0oYT1lLnRpbWVzdGFtcCkhPW51bGw/YTowLGk9YXdhaXQgY3JlYXRlSW1hZ2VCaXRtYXAoZSkscz1hd2FpdCB0aGlzLnNlbGZpZVNlZ21lbnRhdGlvbi5wcm9jZXNzKGkpO3MmJihuPWF3YWl0KCh1PXRoaXMuYmFja2dyb3VuZEZpbHRlcik9PW51bGw/dm9pZCAwOnUucHJvY2VzcyhpLHMpKSksbj8oZS5jbG9zZSgpLHQuZW5xdWV1ZShuZXcgVmlkZW9GcmFtZShuLHt0aW1lc3RhbXA6byxhbHBoYToiZGlzY2FyZCJ9KSkpOnQuZW5xdWV1ZShlKX1hc3luYyBzZXRCYWNrZ3JvdW5kT3B0aW9ucyhlKXt2YXIgdDt0aGlzLmJhY2tncm91bmRPcHRpb25zPWUsYXdhaXQoKHQ9dGhpcy5iYWNrZ3JvdW5kRmlsdGVyKT09bnVsbD92b2lkIDA6dC5zZXRCYWNrZ3JvdW5kT3B0aW9ucyhlKSksdGhpcy5yZXBvcnQoe3ZhcmlhdGlvbjoiVXBkYXRlIn0pfWFzeW5jIHNldFZpZGVvQkdSZWFkYWJsZShlKXt2YXIgdDthd2FpdCgodD10aGlzLmJhY2tncm91bmRGaWx0ZXIpPT1udWxsP3ZvaWQgMDp0LnNldFZpZGVvQkdSZWFkYWJsZShlKSl9YXN5bmMgc2V0VmlydHVhbEJHSW1hZ2UoZSl7dmFyIHQ7YXdhaXQoKHQ9dGhpcy5iYWNrZ3JvdW5kRmlsdGVyKT09bnVsbD92b2lkIDA6dC5zZXRWaXJ0dWFsQkdJbWFnZShlKSl9c2V0RmxpY2tlcmluZ09wdGlvbnMoZSl7dmFyIHQ7KHQ9dGhpcy5iYWNrZ3JvdW5kRmlsdGVyKT09bnVsbHx8dC5zZXRGbGlja2VyaW5nT3B0aW9ucyhlKSx0aGlzLnJlcG9ydCh7dmFyaWF0aW9uOiJVcGRhdGUifSl9YXN5bmMgcHJvZmlsZShlKXt2YXIgdCxuO3JldHVybihuPSh0PXRoaXMuYmFja2dyb3VuZEZpbHRlcik9PW51bGw/dm9pZCAwOnQucHJvZmlsZShlKSkhPW51bGw/bjpbXX1nZXRUcmFuc2Zvcm1lclR5cGUoKXt2YXIgZSx0O3JldHVybih0PShlPXRoaXMuYmFja2dyb3VuZE9wdGlvbnMpPT1udWxsP3ZvaWQgMDplLnRyYW5zZm9ybWVyVHlwZSkhPW51bGw/dDoiVW5kZWZpbmVkIn1lbmFibGUoKXt0aGlzLmlzRW5hYmxlZD0hMH1kaXNhYmxlKCl7dGhpcy5pc0VuYWJsZWQ9ITF9cmVwb3J0KGUpe3ZhciB0O3RoaXMucmVwb3J0ZXIuc2VuZCh7dmVyc2lvbjpucyxhY3Rpb246Ik1sVHJhbnNmb3JtZXJzIix0cmFuc2Zvcm1lclR5cGU6KHQ9dGhpcy5iYWNrZ3JvdW5kT3B0aW9ucyk9PW51bGw/dm9pZCAwOnQudHJhbnNmb3JtZXJUeXBlLGNvbmZpZzpKU09OLnN0cmluZ2lmeSh0aGlzLmJhY2tncm91bmRPcHRpb25zKSwuLi5lfSl9fWNvbnN0ICRyPWNsYXNze2NvbnN0cnVjdG9yKCl7bCh0aGlzLCJiYWNrZ3JvdW5kVHJhbnNmb3JtZXIiLG5ldyBvbCk7bCh0aGlzLCJtZWRpYVByb2Nlc3NvciIsbmV3IERpKTtsKHRoaXMsInJhdGUiLDMwKTtsKHRoaXMsInJlc29sdmVPbk1lZGlhUHJvY2Vzc29yIik7bCh0aGlzLCJldmVudHNRdWV1ZSIsW10pfWFzeW5jIGluaXQoZSx0KXthd2FpdCB0aGlzLmJhY2tncm91bmRUcmFuc2Zvcm1lci5pbml0KGUsdCksYXdhaXQgdGhpcy5tZWRpYVByb2Nlc3Nvci5zZXRUcmFuc2Zvcm1lcnMoW3RoaXMuYmFja2dyb3VuZFRyYW5zZm9ybWVyXSksdGhpcy5tZWRpYVByb2Nlc3Nvci5zZXRUcmFja0V4cGVjdGVkUmF0ZSh0aGlzLnJhdGUpLHRoaXMubWVkaWFQcm9jZXNzb3Iub25BbnkoKG4sbyk9Pnt0aGlzLnJlc29sdmVPbk1lZGlhUHJvY2Vzc29yPyh0aGlzLnJlc29sdmVPbk1lZGlhUHJvY2Vzc29yKHtuYW1lOm4sZGF0YTpvfSksdGhpcy5yZXNvbHZlT25NZWRpYVByb2Nlc3Nvcj12b2lkIDApOnRoaXMuZXZlbnRzUXVldWUucHVzaCh7bmFtZTpuLGRhdGE6b30pfSl9ZW5hYmxlKCl7dGhpcy5iYWNrZ3JvdW5kVHJhbnNmb3JtZXIuZW5hYmxlKCl9ZGlzYWJsZSgpe3RoaXMuYmFja2dyb3VuZFRyYW5zZm9ybWVyLmRpc2FibGUoKX1hc3luYyBvbk1lZGlhUHJvY2Vzc29yRXZlbnQoKXtyZXR1cm4gYXdhaXQgbmV3IFByb21pc2UoZT0+e3RoaXMuZXZlbnRzUXVldWUubGVuZ3RoPjA/ZSh0aGlzLmV2ZW50c1F1ZXVlLnNoaWZ0KCkpOnRoaXMucmVzb2x2ZU9uTWVkaWFQcm9jZXNzb3I9ZX0pfWFzeW5jIHNldFRyYWNrRXhwZWN0ZWRSYXRlKGUpe3RoaXMucmF0ZT1lLHRoaXMubWVkaWFQcm9jZXNzb3Iuc2V0VHJhY2tFeHBlY3RlZFJhdGUoZSl9YXN5bmMgdHJhbnNmb3JtKGUsdCl7dGhpcy5tZWRpYVByb2Nlc3Nvci50cmFuc2Zvcm0oZSx0KX1hc3luYyBzZXRCYWNrZ3JvdW5kT3B0aW9ucyhlKXt2YXIgdDthd2FpdCgodD10aGlzLmJhY2tncm91bmRUcmFuc2Zvcm1lcik9PW51bGw/dm9pZCAwOnQuc2V0QmFja2dyb3VuZE9wdGlvbnMoZSkpfXNldFZpZGVvQkdSZWFkYWJsZShlKXt0aGlzLmJhY2tncm91bmRUcmFuc2Zvcm1lci5zZXRWaWRlb0JHUmVhZGFibGUoZSl9YXN5bmMgc2V0VmlydHVhbEJHSW1hZ2UoZSl7YXdhaXQgdGhpcy5iYWNrZ3JvdW5kVHJhbnNmb3JtZXIuc2V0VmlydHVhbEJHSW1hZ2UoZSl9YXN5bmMgdGVybWluYXRlKCl7YXdhaXQgdGhpcy5tZWRpYVByb2Nlc3Nvci5kZXN0cm95KCl9c2V0RmxpY2tlcmluZ09wdGlvbnMoZSl7dGhpcy5iYWNrZ3JvdW5kVHJhbnNmb3JtZXIuc2V0RmxpY2tlcmluZ09wdGlvbnMoZSl9c2V0Vm9uYWdlTWV0YWRhdGEoZSl7SWkoZSl9YXN5bmMgcHJvZmlsZShlKXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkoYXdhaXQgdGhpcy5iYWNrZ3JvdW5kVHJhbnNmb3JtZXIucHJvZmlsZShlKSl9fTtsZXQgQ289JHI7KCgpPT57am8oIlByb2Nlc3NvcldvcmtlciIsJHIpfSkoKX0pKCk7Cg==",pc=typeof window<"u"&&window.Blob&&new Blob([atob(mc)],{type:"text/javascript;charset=utf-8"});function U3(){const i=pc&&(window.URL||window.webkitURL).createObjectURL(pc);try{return i?new Worker(i):new Worker("data:application/javascript;base64,"+mc)}finally{i&&(window.URL||window.webkitURL).revokeObjectURL(i)}}const bs=class extends ur{constructor(r){super();gt(this,"rate",30);gt(this,"worker");gt(this,"config");gt(this,"backgroundOptions");gt(this,"isEnabled",!0);this.config=r}async setTrackExpectedRate(r){var f;await this.startWorker(),await((f=this.worker)==null?void 0:f.setTrackExpectedRate(r))}async setBackgroundOptions(r){this.backgroundOptions=r,await this.updateBackgroundOptions(r)}async transform(r,f){var Z;await this.startWorker(),await((Z=this.worker)==null?void 0:Z.transform(r,f))}async destroy(){var r;await((r=this.worker)==null?void 0:r.terminate()),this.worker=void 0}async setFlickeringOptions(r){var f;await this.startWorker(),await((f=this.worker)==null?void 0:f.setFlickeringOptions(r))}async profile(r){var Z;const f=await((Z=this.worker)==null?void 0:Z.profile(r));return JSON.parse(f!=null?f:"[]")}async enable(){var r;this.isEnabled=!0,await((r=this.worker)==null?void 0:r.enable())}async disable(){var r;this.isEnabled=!1,await((r=this.worker)==null?void 0:r.disable())}async listenWorker(){var r,f;for(;(r=this.worker)!=null&&r.workerContext.worker;){const{name:Z,data:x}=await((f=this.worker)==null?void 0:f.onMediaProcessorEvent());switch(Z){case"error":case"warn":this.emit(Z,x);break;case"pipelineInfo":switch(this.emit(Z,x),x){case"pipeline_ended":case"pipeline_ended_with_error":await this.destroy();return}break}}}async startWorker(){!this.config||this.worker||(this.worker=await b2(fs,U3),this.isEnabled||await this.worker.disable(),await this.worker.init(`worker_${bs.initCount++}`,this.config),this.backgroundOptions&&await this.updateBackgroundOptions(this.backgroundOptions),await this.worker.setVonageMetadata(yi()),await this.setBackgroundOptions(this.config),this.listenWorker())}async updateBackgroundOptions(r){var Z,x,H;await this.startWorker();const{transformerType:f}=r;switch(f){case"VideoBackground":await((Z=this.worker)==null?void 0:Z.setVideoBGReadable(await Bs.createVideoReadable(r.backgroundAssetUri)));break;case"VirtualBackground":await((x=this.worker)==null?void 0:x.setVirtualBGImage(await Bs.createImageCanvas(r.backgroundAssetUri)));break}await((H=this.worker)==null?void 0:H.setBackgroundOptions(r))}};let po=bs;gt(po,"initCount",0);class B3{constructor(n){this.queries=n}async downloadSpeedscope(){this.download(await this.convertToSpeedscope())}download(n){const r=document.createElement("a");r.href=URL.createObjectURL(new Blob([n],{type:"application/json"})),r.download=`profile-${+new Date}.speedscope.json`,document.body.appendChild(r),r.click(),document.body.removeChild(r)}convertToSpeedscope(){const n=[],r={},f=[];let Z=0;for(const H of this.queries){const T=[];for(const J of H)r[J.name]===void 0&&(r[J.name]=n.length,n.push({name:J.name})),T.push({type:J.action==uc.PUSH?"O":"C",frame:r[J.name],at:J.timestamp}),Z=Math.max(Z,J.timestamp+J.duration);f.push({events:T,type:"evented",name:"GPU Profile",unit:"nanoseconds",startValue:0,endValue:Z})}const x={$schema:"https://www.speedscope.app/file-format-schema.json",shared:{frames:n},profiles:f};return JSON.stringify(x,null,2)}}class ms extends ur{constructor(r){super();gt(this,"worker");gt(this,"connector");this.worker=new po(r),this.connector=new $c(this.worker),this.worker.onAny((f,Z)=>this.emit(f,Z))}async setBackgroundOptions(r){await this.worker.setBackgroundOptions(r)}async enable(){await this.worker.enable()}async disable(){await this.worker.disable()}setTrackExpectedRate(r){this.worker.setTrackExpectedRate(r)}getConnector(){return this.connector}async profile(r){return this.worker.profile(r)}static async profile(r){const f=await Promise.all(this.instances.map(Z=>Z.profile(r)));return new B3(f)}static async create(r){const f=new this(r);return this.instances.push(f),f}}gt(ms,"instances",[]);function K3(){return Gi}function M3(){return Xi}function A3(){return Wi}function z3(){return Vi}function j3(){return Ri}function P3(){return Ii}function O3(){return xi}async function _3(i){return await ms.create(i)}Ue.BackgroundTransformer=fc,Ue.BackgroundTransformerType=xs,Ue.BlurRadius=Dr,Ue.ErrorFunction=Is,Ue.MediapipeHelper=Si,Ue.PipelineInfoData=Zi,Ue.RenderingType=$r,Ue.VonageMediaProcessor=ms,Ue.WarningType=Rs,Ue.WebglSelfieSegmentationType=vi,Ue.createVonageMediaProcessor=_3,Ue.getSupportedBrowserFeatures=Ts,Ue.getVonageFaceDetection=z3,Ue.getVonageFaceMash=j3,Ue.getVonageHands=M3,Ue.getVonageHolistic=A3,Ue.getVonageObjectron=P3,Ue.getVonagePose=O3,Ue.getVonageSelfieSegmentation=K3,Ue.isSupported=o2,Object.defineProperties(Ue,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}})});
|
|
458
|
+
}`}}const S3=10,T3=2,Y3=8;class w3 extends cs{constructor(r,f){super();gt(this,"inputImage");gt(this,"inputMask");gt(this,"blur");this.context=r,this.radius=f;const Z={context:r,height:r.canvas.height,width:r.canvas.width};this.blur=new I3({...Z,radius:f,...this.getBlurTextureSize(r.canvas.width,r.canvas.height)});const I=new ss({...Z,disableFramebuffer:!0});this.addStep({program:this.blur,preventResize:!0,getUniforms:()=>({texture:mn(r,this.inputImage),mask:mn(r,this.inputMask)})}),this.addStep({program:I,getUniforms:()=>({background:mn(r,this.blur.output),foreground:mn(r,this.inputImage),threshold:mn(r,this.inputMask)})})}getBlurTextureSize(r,f){const Z=this.radius>S3?Y3:T3;return{width:Math.max(zr,r/Z),height:Math.max(zr,f/Z)}}setData(r,f){this.inputImage=r,this.inputMask=f}resizeOutput(r,f){super.resizeOutput(r,f);const Z=this.getBlurTextureSize(r,f);this.blur.resizeOutput(Z.width,Z.height)}}class L3 extends ho{constructor(r){super();gt(this,"pipeline");this.pipeline=new w3(this.context,r),this.disablePostProcessing()}}class F3 extends cs{constructor(r,f){super();gt(this,"inputImage");gt(this,"inputMask");this.context=r;const Z={context:r,height:r.canvas.height,width:r.canvas.width},I=new s2({...Z,radius:f,type:us.GAUSSIAN}),F=new ss({...Z,disableFramebuffer:!0});this.addStep({program:I,getUniforms:()=>({texture:mn(r,this.inputImage)})}),this.addStep({program:F,getUniforms:()=>({background:mn(r,this.inputImage),foreground:mn(r,I.output),threshold:mn(r,this.inputMask)})})}setData(r,f){this.inputImage=r,this.inputMask=f}}class C3 extends ho{constructor(r){super();gt(this,"pipeline");this.pipeline=new F3(this.context,r),this.disablePostProcessing()}}class H3 extends i2{constructor(){super(...arguments);gt(this,"frameReader");gt(this,"preciseMaskEnabled",!0)}set reader(r){this.frameReader=r}async run(){this.frameReader&&(await this.readNextVideoFrame(),await super.run())}async readNextVideoFrame(){var f;const r=await((f=this.frameReader)==null?void 0:f.read());r!=null&&r.value&&(this.inputBackgroundImage=await createImageBitmap(r.value),r.value.close())}}class J3 extends ho{constructor(){super();gt(this,"pipeline");this.pipeline=new H3(this.context)}setBackgroundVideo(r){this.pipeline.reader=r}}class a2{blurBackground(n){return new L3(n)}blurSilhouette(n){return new C3(n)}imageBackground(){return new c2}videoBackground(){return new J3}}class N3{constructor(n){gt(this,"factory");switch(n){case Qr.CANVAS:this.factory=new u2;break;case Qr.WEBGL:this.factory=new a2;break;default:const r=Ss();this.factory=r.supported?new a2:new u2}}blurBackground(n){return this.getFactory().blurBackground(n)}blurSilhouette(n){return this.getFactory().blurSilhouette(n)}imageBackground(){return this.getFactory().imageBackground()}videoBackground(){return this.getFactory().videoBackground()}getFactory(){if(!this.factory)throw"Factory is not initialized";return this.factory}}class k3{constructor(){gt(this,"renderer");gt(this,"backgroundVideo");gt(this,"backgroundImage")}setBackgroundOptions(n){var f,Z;const r=new N3((f=n.renderingOptions)==null?void 0:f.type);switch(n.transformerType){case"BackgroundBlur":this.renderer=r.blurBackground(this.getBlurSize(n.radius));break;case"SilhouetteBlur":this.renderer=r.blurSilhouette(this.getBlurSize(n.radius));break;case"VideoBackground":const I=r.videoBackground();this.backgroundVideo&&I.setBackgroundVideo(this.backgroundVideo),this.renderer=I;break;case"VirtualBackground":const F=r.imageBackground();this.backgroundImage&&F.setBackgroundImage(this.backgroundImage),this.renderer=F;break;default:throw`Unknown rendering type [${n.transformerType}]`}((Z=n.renderingOptions)==null?void 0:Z.type)===Qr.WEBGL&&(n.renderingOptions.selfieSegmentationType===gi.PRECISE?this.renderer.enablePostProcessing():n.renderingOptions.selfieSegmentationType===gi.FAST&&this.renderer.disablePostProcessing())}setFlickeringOptions(n){var r;(r=this.renderer)==null||r.setFlickeringOptions(n)}setVideoBGReadable(n){this.backgroundVideo=n.getReader();const r=this.renderer;r!=null&&r.setBackgroundVideo&&r.setBackgroundVideo(this.backgroundVideo)}async setVirtualBGImage(n){const r=this.renderer;r!=null&&r.setBackgroundImage&&r.setBackgroundImage(n),this.backgroundImage=n}async process(n,r){if(this.renderer)return this.renderer.render(n,r)}async resizeForeground(n,r){}getBlurSize(n=_r.Low){switch(n){case _r.Low:return 5;case _r.High:return 12}return n}async profile(n){var r,f;return(f=(r=this.renderer)==null?void 0:r.profileWebgl(n))!=null?f:[]}}class d2{constructor(){gt(this,"selfieSegmentation",new xs);gt(this,"backgroundFilter");gt(this,"reporter",new zc);gt(this,"isEnabled",!0);gt(this,"backgroundOptions")}async init(n,r){await this.selfieSegmentation.init(r.wasmAssetUriPath,r.tfliteAssetUriPath),this.backgroundFilter=new k3,this.report({variation:"Create"})}async transform(n,r){var T,J;if(!this.isEnabled)return r.enqueue(n);let f;const Z=(T=n.timestamp)!=null?T:0,I=await createImageBitmap(n),F=await this.selfieSegmentation.process(I);F&&(f=await((J=this.backgroundFilter)==null?void 0:J.process(I,F))),f?(n.close(),r.enqueue(new VideoFrame(f,{timestamp:Z,alpha:"discard"}))):r.enqueue(n)}async setBackgroundOptions(n){var r;this.backgroundOptions=n,await((r=this.backgroundFilter)==null?void 0:r.setBackgroundOptions(n)),this.report({variation:"Update"})}async setVideoBGReadable(n){var r;await((r=this.backgroundFilter)==null?void 0:r.setVideoBGReadable(n))}async setVirtualBGImage(n){var r;await((r=this.backgroundFilter)==null?void 0:r.setVirtualBGImage(n))}setFlickeringOptions(n){var r;(r=this.backgroundFilter)==null||r.setFlickeringOptions(n),this.report({variation:"Update"})}async profile(n){var r,f;return(f=(r=this.backgroundFilter)==null?void 0:r.profile(n))!=null?f:[]}getTransformerType(){var n,r;return(r=(n=this.backgroundOptions)==null?void 0:n.transformerType)!=null?r:"Undefined"}enable(){this.isEnabled=!0}disable(){this.isEnabled=!1}report(n){var r;this.reporter.send({version:jc,action:"MlTransformers",transformerType:(r=this.backgroundOptions)==null?void 0:r.transformerType,config:JSON.stringify(this.backgroundOptions),...n})}}const fs=class{constructor(){gt(this,"backgroundTransformer",new d2);gt(this,"mediaProcessor",new _2);gt(this,"rate",30);gt(this,"resolveOnMediaProcessor");gt(this,"eventsQueue",[])}async init(n,r){await this.backgroundTransformer.init(n,r),await this.mediaProcessor.setTransformers([this.backgroundTransformer]),this.mediaProcessor.setTrackExpectedRate(this.rate),this.mediaProcessor.onAny((f,Z)=>{this.resolveOnMediaProcessor?(this.resolveOnMediaProcessor({name:f,data:Z}),this.resolveOnMediaProcessor=void 0):this.eventsQueue.push({name:f,data:Z})})}enable(){this.backgroundTransformer.enable()}disable(){this.backgroundTransformer.disable()}async onMediaProcessorEvent(){return await new Promise(n=>{this.eventsQueue.length>0?n(this.eventsQueue.shift()):this.resolveOnMediaProcessor=n})}async setTrackExpectedRate(n){this.rate=n,this.mediaProcessor.setTrackExpectedRate(n)}async transform(n,r){this.mediaProcessor.transform(n,r)}async setBackgroundOptions(n){var r;await((r=this.backgroundTransformer)==null?void 0:r.setBackgroundOptions(n))}setVideoBGReadable(n){this.backgroundTransformer.setVideoBGReadable(n)}async setVirtualBGImage(n){await this.backgroundTransformer.setVirtualBGImage(n)}async terminate(){await this.mediaProcessor.destroy()}setFlickeringOptions(n){this.backgroundTransformer.setFlickeringOptions(n)}setVonageMetadata(n){M2(n)}async profile(n){return JSON.stringify(await this.backgroundTransformer.profile(n))}};let ds=fs;(()=>{yc("ProcessorWorker",fs)})();const h2="dmFyIEdsPU9iamVjdC5kZWZpbmVQcm9wZXJ0eTt2YXIgJGw9KEssWCxXKT0+WCBpbiBLP0dsKEssWCx7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6V30pOktbWF09Vzt2YXIgbD0oSyxYLFcpPT4oJGwoSyx0eXBlb2YgWCE9InN5bWJvbCI/WCsiIjpYLFcpLFcpOyhmdW5jdGlvbigpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBLKHIsZSl7Z2xvYmFsVGhpcy52b25hZ2V8fChnbG9iYWxUaGlzLnZvbmFnZT17fSksZ2xvYmFsVGhpcy52b25hZ2Uud29ya2VyaXplcnx8KGdsb2JhbFRoaXMudm9uYWdlLndvcmtlcml6ZXI9e30pO2xldCB0PWdsb2JhbFRoaXMudm9uYWdlLndvcmtlcml6ZXI7cmV0dXJuIHRbcl18fCh0W3JdPWUpLHRbcl19Y29uc3QgWD1LKCJnbG9iYWxzIix7fSk7dmFyIFc9KHI9PihyLklOSVQ9IklOSVQiLHIuRk9SV0FSRD0iRk9SV0FSRCIsci5URVJNSU5BVEU9IlRFUk1JTkFURSIsci5HTE9CQUxTX1NZTkM9IkdMT0JBTFNfU1lOQyIsci5FVkVOVD0iRVZFTlQiLHIpKShXfHx7fSk7ZnVuY3Rpb24gR28ocil7cmV0dXJuW0ltYWdlQml0bWFwLFJlYWRhYmxlU3RyZWFtLFdyaXRhYmxlU3RyZWFtXS5zb21lKHQ9PnIgaW5zdGFuY2VvZiB0KX1mdW5jdGlvbiBPZShyLGUpe2NvbnN0e2lkOnQsdHlwZTpufT1yLG89QXJyYXkuaXNBcnJheShlKT9lOltlXTtwb3N0TWVzc2FnZSh7aWQ6dCx0eXBlOm4scmVzdWx0OmV9LG8uZmlsdGVyKGk9PkdvKGkpKSl9Sygid29ya2VyaXplZCIse30pO2Z1bmN0aW9uIGpyKCl7cmV0dXJuIHR5cGVvZiBXb3JrZXJHbG9iYWxTY29wZTwidSImJnNlbGYgaW5zdGFuY2VvZiBXb3JrZXJHbG9iYWxTY29wZX1mdW5jdGlvbiBaZShyLGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpZS5zcGxpY2UoMCxlLmxlbmd0aCk7ZWxzZSBpZih0eXBlb2YgZT09Im9iamVjdCIpZm9yKGNvbnN0IHQgaW4gZSlkZWxldGUgZVt0XTtmb3IoY29uc3QgdCBpbiByKUFycmF5LmlzQXJyYXkoclt0XSk/KGVbdF09W10sWmUoclt0XSxlW3RdKSk6dHlwZW9mIHJbdF09PSJvYmplY3QiPyhlW3RdPXt9LFplKHJbdF0sZVt0XSkpOmVbdF09clt0XX1jb25zdCBlZT1uZXcgV2Vha01hcCxkZT1uZXcgV2Vha01hcCxKPW5ldyBXZWFrTWFwLGV0PVN5bWJvbCgiYW55UHJvZHVjZXIiKSxZcj1Qcm9taXNlLnJlc29sdmUoKSx0dD1TeW1ib2woImxpc3RlbmVyQWRkZWQiKSxydD1TeW1ib2woImxpc3RlbmVyUmVtb3ZlZCIpO2xldCBudD0hMSxWdD0hMTtmdW5jdGlvbiB3ZShyKXtpZih0eXBlb2YgciE9InN0cmluZyImJnR5cGVvZiByIT0ic3ltYm9sIiYmdHlwZW9mIHIhPSJudW1iZXIiKXRocm93IG5ldyBUeXBlRXJyb3IoImBldmVudE5hbWVgIG11c3QgYmUgYSBzdHJpbmcsIHN5bWJvbCwgb3IgbnVtYmVyIil9ZnVuY3Rpb24gb3Qocil7aWYodHlwZW9mIHIhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcigibGlzdGVuZXIgbXVzdCBiZSBhIGZ1bmN0aW9uIil9ZnVuY3Rpb24gQWUocixlKXtjb25zdCB0PWRlLmdldChyKTtpZighIXQuaGFzKGUpKXJldHVybiB0LmdldChlKX1mdW5jdGlvbiBVZShyLGUpe2NvbnN0IHQ9dHlwZW9mIGU9PSJzdHJpbmcifHx0eXBlb2YgZT09InN5bWJvbCJ8fHR5cGVvZiBlPT0ibnVtYmVyIj9lOmV0LG49Si5nZXQocik7aWYoISFuLmhhcyh0KSlyZXR1cm4gbi5nZXQodCl9ZnVuY3Rpb24gJG8ocixlLHQpe2NvbnN0IG49Si5nZXQocik7aWYobi5oYXMoZSkpZm9yKGNvbnN0IG8gb2Ygbi5nZXQoZSkpby5lbnF1ZXVlKHQpO2lmKG4uaGFzKGV0KSl7Y29uc3Qgbz1Qcm9taXNlLmFsbChbZSx0XSk7Zm9yKGNvbnN0IGkgb2Ygbi5nZXQoZXQpKWkuZW5xdWV1ZShvKX19ZnVuY3Rpb24gWHIocixlKXtlPUFycmF5LmlzQXJyYXkoZSk/ZTpbZV07bGV0IHQ9ITEsbj0oKT0+e30sbz1bXTtjb25zdCBpPXtlbnF1ZXVlKHMpe28ucHVzaChzKSxuKCl9LGZpbmlzaCgpe3Q9ITAsbigpfX07Zm9yKGNvbnN0IHMgb2YgZSl7bGV0IGE9VWUocixzKTthfHwoYT1uZXcgU2V0LEouZ2V0KHIpLnNldChzLGEpKSxhLmFkZChpKX1yZXR1cm57YXN5bmMgbmV4dCgpe3JldHVybiBvP28ubGVuZ3RoPT09MD90PyhvPXZvaWQgMCx0aGlzLm5leHQoKSk6KGF3YWl0IG5ldyBQcm9taXNlKHM9PntuPXN9KSx0aGlzLm5leHQoKSk6e2RvbmU6ITEsdmFsdWU6YXdhaXQgby5zaGlmdCgpfTp7ZG9uZTohMH19LGFzeW5jIHJldHVybihzKXtvPXZvaWQgMDtmb3IoY29uc3QgYSBvZiBlKXtjb25zdCB1PVVlKHIsYSk7dSYmKHUuZGVsZXRlKGkpLHUuc2l6ZT09PTAmJkouZ2V0KHIpLmRlbGV0ZShhKSl9cmV0dXJuIG4oKSxhcmd1bWVudHMubGVuZ3RoPjA/e2RvbmU6ITAsdmFsdWU6YXdhaXQgc306e2RvbmU6ITB9fSxbU3ltYm9sLmFzeW5jSXRlcmF0b3JdKCl7cmV0dXJuIHRoaXN9fX1mdW5jdGlvbiBRcihyKXtpZihyPT09dm9pZCAwKXJldHVybiBxcjtpZighQXJyYXkuaXNBcnJheShyKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJgbWV0aG9kTmFtZXNgIG11c3QgYmUgYW4gYXJyYXkgb2Ygc3RyaW5ncyIpO2Zvcihjb25zdCBlIG9mIHIpaWYoIXFyLmluY2x1ZGVzKGUpKXRocm93IHR5cGVvZiBlIT0ic3RyaW5nIj9uZXcgVHlwZUVycm9yKCJgbWV0aG9kTmFtZXNgIGVsZW1lbnQgbXVzdCBiZSBhIHN0cmluZyIpOm5ldyBFcnJvcihgJHtlfSBpcyBub3QgRW1pdHRlcnkgbWV0aG9kYCk7cmV0dXJuIHJ9Y29uc3QgSWU9cj0+cj09PXR0fHxyPT09cnQ7ZnVuY3Rpb24gaXQocixlLHQpe2lmKEllKGUpKXRyeXtudD0hMCxyLmVtaXQoZSx0KX1maW5hbGx5e250PSExfX1jbGFzcyBTZXtzdGF0aWMgbWl4aW4oZSx0KXtyZXR1cm4gdD1Rcih0KSxuPT57aWYodHlwZW9mIG4hPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcigiYHRhcmdldGAgbXVzdCBiZSBmdW5jdGlvbiIpO2Zvcihjb25zdCBzIG9mIHQpaWYobi5wcm90b3R5cGVbc10hPT12b2lkIDApdGhyb3cgbmV3IEVycm9yKGBUaGUgcHJvcGVydHkgXGAke3N9XGAgYWxyZWFkeSBleGlzdHMgb24gXGB0YXJnZXRcYGApO2Z1bmN0aW9uIG8oKXtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsZSx7ZW51bWVyYWJsZTohMSx2YWx1ZTpuZXcgU2V9KSx0aGlzW2VdfU9iamVjdC5kZWZpbmVQcm9wZXJ0eShuLnByb3RvdHlwZSxlLHtlbnVtZXJhYmxlOiExLGdldDpvfSk7Y29uc3QgaT1zPT5mdW5jdGlvbiguLi5hKXtyZXR1cm4gdGhpc1tlXVtzXSguLi5hKX07Zm9yKGNvbnN0IHMgb2YgdClPYmplY3QuZGVmaW5lUHJvcGVydHkobi5wcm90b3R5cGUscyx7ZW51bWVyYWJsZTohMSx2YWx1ZTppKHMpfSk7cmV0dXJuIG59fXN0YXRpYyBnZXQgaXNEZWJ1Z0VuYWJsZWQoKXt2YXIgZSx0O2lmKHR5cGVvZigoZT1nbG9iYWxUaGlzLnByb2Nlc3MpPT1udWxsP3ZvaWQgMDplLmVudikhPSJvYmplY3QiKXJldHVybiBWdDtjb25zdHtlbnY6bn09KHQ9Z2xvYmFsVGhpcy5wcm9jZXNzKSE9bnVsbD90OntlbnY6e319O3JldHVybiBuLkRFQlVHPT09ImVtaXR0ZXJ5Inx8bi5ERUJVRz09PSIqInx8VnR9c3RhdGljIHNldCBpc0RlYnVnRW5hYmxlZChlKXtWdD1lfWNvbnN0cnVjdG9yKGU9e30pe3ZhciB0O2VlLnNldCh0aGlzLG5ldyBTZXQpLGRlLnNldCh0aGlzLG5ldyBNYXApLEouc2V0KHRoaXMsbmV3IE1hcCksSi5nZXQodGhpcykuc2V0KGV0LG5ldyBTZXQpLHRoaXMuZGVidWc9KHQ9ZS5kZWJ1ZykhPW51bGw/dDp7fSx0aGlzLmRlYnVnLmVuYWJsZWQ9PT12b2lkIDAmJih0aGlzLmRlYnVnLmVuYWJsZWQ9ITEpLHRoaXMuZGVidWcubG9nZ2VyfHwodGhpcy5kZWJ1Zy5sb2dnZXI9KG4sbyxpLHMpPT57dHJ5e3M9SlNPTi5zdHJpbmdpZnkocyl9Y2F0Y2h7cz1gT2JqZWN0IHdpdGggdGhlIGZvbGxvd2luZyBrZXlzIGZhaWxlZCB0byBzdHJpbmdpZnk6ICR7T2JqZWN0LmtleXMocykuam9pbigiLCIpfWB9KHR5cGVvZiBpPT0ic3ltYm9sInx8dHlwZW9mIGk9PSJudW1iZXIiKSYmKGk9aS50b1N0cmluZygpKTtjb25zdCBhPW5ldyBEYXRlLHU9YCR7YS5nZXRIb3VycygpfToke2EuZ2V0TWludXRlcygpfToke2EuZ2V0U2Vjb25kcygpfS4ke2EuZ2V0TWlsbGlzZWNvbmRzKCl9YDtjb25zb2xlLmxvZyhgWyR7dX1dW2VtaXR0ZXJ5OiR7bn1dWyR7b31dIEV2ZW50IE5hbWU6ICR7aX0KCWRhdGE6ICR7c31gKX0pfWxvZ0lmRGVidWdFbmFibGVkKGUsdCxuKXsoU2UuaXNEZWJ1Z0VuYWJsZWR8fHRoaXMuZGVidWcuZW5hYmxlZCkmJnRoaXMuZGVidWcubG9nZ2VyKGUsdGhpcy5kZWJ1Zy5uYW1lLHQsbil9b24oZSx0KXtvdCh0KSxlPUFycmF5LmlzQXJyYXkoZSk/ZTpbZV07Zm9yKGNvbnN0IG4gb2YgZSl7d2Uobik7bGV0IG89QWUodGhpcyxuKTtvfHwobz1uZXcgU2V0LGRlLmdldCh0aGlzKS5zZXQobixvKSksby5hZGQodCksdGhpcy5sb2dJZkRlYnVnRW5hYmxlZCgic3Vic2NyaWJlIixuLHZvaWQgMCksSWUobil8fGl0KHRoaXMsdHQse2V2ZW50TmFtZTpuLGxpc3RlbmVyOnR9KX1yZXR1cm4gdGhpcy5vZmYuYmluZCh0aGlzLGUsdCl9b2ZmKGUsdCl7b3QodCksZT1BcnJheS5pc0FycmF5KGUpP2U6W2VdO2Zvcihjb25zdCBuIG9mIGUpe3dlKG4pO2NvbnN0IG89QWUodGhpcyxuKTtvJiYoby5kZWxldGUodCksby5zaXplPT09MCYmZGUuZ2V0KHRoaXMpLmRlbGV0ZShuKSksdGhpcy5sb2dJZkRlYnVnRW5hYmxlZCgidW5zdWJzY3JpYmUiLG4sdm9pZCAwKSxJZShuKXx8aXQodGhpcyxydCx7ZXZlbnROYW1lOm4sbGlzdGVuZXI6dH0pfX1vbmNlKGUpe2xldCB0O2NvbnN0IG49bmV3IFByb21pc2Uobz0+e3Q9dGhpcy5vbihlLGk9Pnt0KCksbyhpKX0pfSk7cmV0dXJuIG4ub2ZmPXQsbn1ldmVudHMoZSl7ZT1BcnJheS5pc0FycmF5KGUpP2U6W2VdO2Zvcihjb25zdCB0IG9mIGUpd2UodCk7cmV0dXJuIFhyKHRoaXMsZSl9YXN5bmMgZW1pdChlLHQpe3ZhciBuO2lmKHdlKGUpLEllKGUpJiYhbnQpdGhyb3cgbmV3IFR5cGVFcnJvcigiYGV2ZW50TmFtZWAgY2Fubm90IGJlIG1ldGEgZXZlbnQgYGxpc3RlbmVyQWRkZWRgIG9yIGBsaXN0ZW5lclJlbW92ZWRgIik7dGhpcy5sb2dJZkRlYnVnRW5hYmxlZCgiZW1pdCIsZSx0KSwkbyh0aGlzLGUsdCk7Y29uc3Qgbz0obj1BZSh0aGlzLGUpKSE9bnVsbD9uOm5ldyBTZXQsaT1lZS5nZXQodGhpcykscz1bLi4ub10sYT1JZShlKT9bXTpbLi4uaV07YXdhaXQgWXIsYXdhaXQgUHJvbWlzZS5hbGwoWy4uLnMubWFwKGFzeW5jIHU9PntpZihvLmhhcyh1KSlyZXR1cm4gdSh0KX0pLC4uLmEubWFwKGFzeW5jIHU9PntpZihpLmhhcyh1KSlyZXR1cm4gdShlLHQpfSldKX1hc3luYyBlbWl0U2VyaWFsKGUsdCl7dmFyIG47aWYod2UoZSksSWUoZSkmJiFudCl0aHJvdyBuZXcgVHlwZUVycm9yKCJgZXZlbnROYW1lYCBjYW5ub3QgYmUgbWV0YSBldmVudCBgbGlzdGVuZXJBZGRlZGAgb3IgYGxpc3RlbmVyUmVtb3ZlZGAiKTt0aGlzLmxvZ0lmRGVidWdFbmFibGVkKCJlbWl0U2VyaWFsIixlLHQpO2NvbnN0IG89KG49QWUodGhpcyxlKSkhPW51bGw/bjpuZXcgU2V0LGk9ZWUuZ2V0KHRoaXMpLHM9Wy4uLm9dLGE9Wy4uLmldO2F3YWl0IFlyO2Zvcihjb25zdCB1IG9mIHMpby5oYXModSkmJmF3YWl0IHUodCk7Zm9yKGNvbnN0IHUgb2YgYSlpLmhhcyh1KSYmYXdhaXQgdShlLHQpfW9uQW55KGUpe3JldHVybiBvdChlKSx0aGlzLmxvZ0lmRGVidWdFbmFibGVkKCJzdWJzY3JpYmVBbnkiLHZvaWQgMCx2b2lkIDApLGVlLmdldCh0aGlzKS5hZGQoZSksaXQodGhpcyx0dCx7bGlzdGVuZXI6ZX0pLHRoaXMub2ZmQW55LmJpbmQodGhpcyxlKX1hbnlFdmVudCgpe3JldHVybiBYcih0aGlzKX1vZmZBbnkoZSl7b3QoZSksdGhpcy5sb2dJZkRlYnVnRW5hYmxlZCgidW5zdWJzY3JpYmVBbnkiLHZvaWQgMCx2b2lkIDApLGl0KHRoaXMscnQse2xpc3RlbmVyOmV9KSxlZS5nZXQodGhpcykuZGVsZXRlKGUpfWNsZWFyTGlzdGVuZXJzKGUpe2U9QXJyYXkuaXNBcnJheShlKT9lOltlXTtmb3IoY29uc3QgdCBvZiBlKWlmKHRoaXMubG9nSWZEZWJ1Z0VuYWJsZWQoImNsZWFyIix0LHZvaWQgMCksdHlwZW9mIHQ9PSJzdHJpbmcifHx0eXBlb2YgdD09InN5bWJvbCJ8fHR5cGVvZiB0PT0ibnVtYmVyIil7Y29uc3Qgbj1BZSh0aGlzLHQpO24mJm4uY2xlYXIoKTtjb25zdCBvPVVlKHRoaXMsdCk7aWYobyl7Zm9yKGNvbnN0IGkgb2YgbylpLmZpbmlzaCgpO28uY2xlYXIoKX19ZWxzZXtlZS5nZXQodGhpcykuY2xlYXIoKTtmb3IoY29uc3RbbixvXW9mIGRlLmdldCh0aGlzKS5lbnRyaWVzKCkpby5jbGVhcigpLGRlLmdldCh0aGlzKS5kZWxldGUobik7Zm9yKGNvbnN0W24sb11vZiBKLmdldCh0aGlzKS5lbnRyaWVzKCkpe2Zvcihjb25zdCBpIG9mIG8paS5maW5pc2goKTtvLmNsZWFyKCksSi5nZXQodGhpcykuZGVsZXRlKG4pfX19bGlzdGVuZXJDb3VudChlKXt2YXIgdCxuLG8saSxzLGE7ZT1BcnJheS5pc0FycmF5KGUpP2U6W2VdO2xldCB1PTA7Zm9yKGNvbnN0IGYgb2YgZSl7aWYodHlwZW9mIGY9PSJzdHJpbmciKXt1Kz1lZS5nZXQodGhpcykuc2l6ZSsoKG49KHQ9QWUodGhpcyxmKSk9PW51bGw/dm9pZCAwOnQuc2l6ZSkhPW51bGw/bjowKSsoKGk9KG89VWUodGhpcyxmKSk9PW51bGw/dm9pZCAwOm8uc2l6ZSkhPW51bGw/aTowKSsoKGE9KHM9VWUodGhpcykpPT1udWxsP3ZvaWQgMDpzLnNpemUpIT1udWxsP2E6MCk7Y29udGludWV9dHlwZW9mIGY8InUiJiZ3ZShmKSx1Kz1lZS5nZXQodGhpcykuc2l6ZTtmb3IoY29uc3QgZCBvZiBkZS5nZXQodGhpcykudmFsdWVzKCkpdSs9ZC5zaXplO2Zvcihjb25zdCBkIG9mIEouZ2V0KHRoaXMpLnZhbHVlcygpKXUrPWQuc2l6ZX1yZXR1cm4gdX1iaW5kTWV0aG9kcyhlLHQpe2lmKHR5cGVvZiBlIT0ib2JqZWN0Inx8ZT09PW51bGwpdGhyb3cgbmV3IFR5cGVFcnJvcigiYHRhcmdldGAgbXVzdCBiZSBhbiBvYmplY3QiKTt0PVFyKHQpO2Zvcihjb25zdCBuIG9mIHQpe2lmKGVbbl0hPT12b2lkIDApdGhyb3cgbmV3IEVycm9yKGBUaGUgcHJvcGVydHkgXGAke259XGAgYWxyZWFkeSBleGlzdHMgb24gXGB0YXJnZXRcYGApO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLG4se2VudW1lcmFibGU6ITEsdmFsdWU6dGhpc1tuXS5iaW5kKHRoaXMpfSl9fX1jb25zdCBxcj1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhTZS5wcm90b3R5cGUpLmZpbHRlcihyPT5yIT09ImNvbnN0cnVjdG9yIik7T2JqZWN0LmRlZmluZVByb3BlcnR5KFNlLCJsaXN0ZW5lckFkZGVkIix7dmFsdWU6dHQsd3JpdGFibGU6ITEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITF9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoU2UsImxpc3RlbmVyUmVtb3ZlZCIse3ZhbHVlOnJ0LHdyaXRhYmxlOiExLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiExfSk7ZnVuY3Rpb24gV28ocil7cmV0dXJuIHIub25BbnkmJnIuZW1pdH1hc3luYyBmdW5jdGlvbiBWbyhyLGUpe2NvbnN0e2Z1bmN0aW9uTmFtZTp0LGFyZ3M6bn09cjtpZighZS5pbnN0YW5jZSl0aHJvdyJpbnN0YW5jZSBub3QgaW5pdGlhbGl6ZWQiO2lmKCF0KXRocm93Im1pc3NpbmcgZnVuY3Rpb24gbmFtZSB0byBjYWxsIjtpZighZS5pbnN0YW5jZVt0XSl0aHJvd2B1bmRlZmluZWQgZnVuY3Rpb24gWyR7dH1dIGluIGNsYXNzICR7ZS5pbnN0YW5jZS5jb25zdHJ1Y3Rvci53b3JrZXJJZH1gO09lKHIsYXdhaXQgZS5pbnN0YW5jZVt0XSguLi5uIT1udWxsP246W10pKX1jb25zdCBLcj1LKCJyZWdpc3RlcmVkV29ya2VycyIse30pO2Z1bmN0aW9uIEhvKHIsZSl7ZS53b3JrZXJJZD1yLGpyKCkmJihLcltlLndvcmtlcklkXT1lKX1mdW5jdGlvbiBqbyhyLGUpe2lmKCFyLmFyZ3MpdGhyb3ciTWlzc2luZyBjbGFzc05hbWUgd2hpbGUgaW5pdGlhbGl6aW5nIHdvcmtlciI7Y29uc3RbdCxuXT1yLmFyZ3Msbz1Lclt0XTtpZihvKWUuaW5zdGFuY2U9bmV3IG8oci5hcmdzLnNsaWNlKDEpKTtlbHNlIHRocm93YHVua25vd24gd29ya2VyIGNsYXNzICR7dH1gO1plKG4sWCksV28oZS5pbnN0YW5jZSkmJmUuaW5zdGFuY2Uub25BbnkoKGkscyk9PntPZSh7dHlwZTpXLkVWRU5UfSx7bmFtZTppLGRhdGE6c30pfSksT2Uocix0eXBlb2YgZS5pbnN0YW5jZSE9PXZvaWQgMCl9YXN5bmMgZnVuY3Rpb24gWW8ocixlKXtjb25zdHthcmdzOnR9PXI7aWYoIWUuaW5zdGFuY2UpdGhyb3ciaW5zdGFuY2Ugbm90IGluaXRpYWxpemVkIjtsZXQgbjtlLmluc3RhbmNlLnRlcm1pbmF0ZSYmKG49YXdhaXQgZS5pbnN0YW5jZS50ZXJtaW5hdGUoLi4udCE9bnVsbD90OltdKSksT2UocixuKX1mdW5jdGlvbiBYbyhyKXtpZighci5hcmdzKXRocm93Ik1pc3NpbmcgZ2xvYmFscyB3aGlsZSBzeW5jaW5nIjtaZShyLmFyZ3NbMF0sWCksT2Uocix7fSl9ZnVuY3Rpb24gUW8oKXtjb25zdCByPXt9O29ubWVzc2FnZT1hc3luYyBlPT57Y29uc3QgdD1lLmRhdGE7c3dpdGNoKHQudHlwZSl7Y2FzZSBXLklOSVQ6am8odCxyKTticmVhaztjYXNlIFcuRk9SV0FSRDpWbyh0LHIpO2JyZWFrO2Nhc2UgVy5URVJNSU5BVEU6WW8odCxyKTticmVhaztjYXNlIFcuR0xPQkFMU19TWU5DOlhvKHQpO2JyZWFrfX19anIoKSYmUW8oKTtjbGFzcyBae31aLnVwZGF0ZXM9e3RyYW5zZm9ybWVyX25ldzoiTmV3IHRyYW5zZm9ybWVyIix0cmFuc2Zvcm1lcl9udWxsOiJOdWxsIHRyYW5zZm9ybWVyIn0sWi5lcnJvcnM9e3RyYW5zZm9ybWVyX25vbmU6Ik5vIHRyYW5zZm9ybWVycyBwcm92aWRlZCIsdHJhbnNmb3JtZXJfc3RhcnQ6IkNhbm5vdCBzdGFydCB0cmFuc2Zvcm1lciIsdHJhbnNmb3JtZXJfdHJhbnNmb3JtOiJDYW5ub3QgdHJhbnNmb3JtIGZyYW1lIix0cmFuc2Zvcm1lcl9mbHVzaDoiQ2Fubm90IGZsdXNoIHRyYW5zZm9ybWVyIixyZWFkYWJsZV9udWxsOiJSZWFkYWJsZSBpcyBudWxsIix3cml0YWJsZV9udWxsOiJXcml0YWJsZSBpcyBudWxsIn07ZnVuY3Rpb24gcW8ocil7cmV0dXJuIHImJnIuX19lc01vZHVsZSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsImRlZmF1bHQiKT9yLmRlZmF1bHQ6cn1jb25zdCB0ZT1uZXcgV2Vha01hcCxzdD1uZXcgV2Vha01hcCxOZT1uZXcgV2Vha01hcCxIdD1TeW1ib2woImFueVByb2R1Y2VyIiksSnI9UHJvbWlzZS5yZXNvbHZlKCksYXQ9U3ltYm9sKCJsaXN0ZW5lckFkZGVkIiksdXQ9U3ltYm9sKCJsaXN0ZW5lclJlbW92ZWQiKTtsZXQganQ9ITE7ZnVuY3Rpb24gUmUocil7aWYodHlwZW9mIHIhPSJzdHJpbmciJiZ0eXBlb2YgciE9InN5bWJvbCIpdGhyb3cgbmV3IFR5cGVFcnJvcigiZXZlbnROYW1lIG11c3QgYmUgYSBzdHJpbmcgb3IgYSBzeW1ib2wiKX1mdW5jdGlvbiBjdChyKXtpZih0eXBlb2YgciE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgVHlwZUVycm9yKCJsaXN0ZW5lciBtdXN0IGJlIGEgZnVuY3Rpb24iKX1mdW5jdGlvbiBGZShyLGUpe2NvbnN0IHQ9c3QuZ2V0KHIpO3JldHVybiB0LmhhcyhlKXx8dC5zZXQoZSxuZXcgU2V0KSx0LmdldChlKX1mdW5jdGlvbiBMZShyLGUpe2NvbnN0IHQ9dHlwZW9mIGU9PSJzdHJpbmcifHx0eXBlb2YgZT09InN5bWJvbCI/ZTpIdCxuPU5lLmdldChyKTtyZXR1cm4gbi5oYXModCl8fG4uc2V0KHQsbmV3IFNldCksbi5nZXQodCl9ZnVuY3Rpb24gS28ocixlLHQpe2NvbnN0IG49TmUuZ2V0KHIpO2lmKG4uaGFzKGUpKWZvcihjb25zdCBvIG9mIG4uZ2V0KGUpKW8uZW5xdWV1ZSh0KTtpZihuLmhhcyhIdCkpe2NvbnN0IG89UHJvbWlzZS5hbGwoW2UsdF0pO2Zvcihjb25zdCBpIG9mIG4uZ2V0KEh0KSlpLmVucXVldWUobyl9fWZ1bmN0aW9uIFpyKHIsZSl7ZT1BcnJheS5pc0FycmF5KGUpP2U6W2VdO2xldCB0PSExLG49KCk9Pnt9LG89W107Y29uc3QgaT17ZW5xdWV1ZShzKXtvLnB1c2gocyksbigpfSxmaW5pc2goKXt0PSEwLG4oKX19O2Zvcihjb25zdCBzIG9mIGUpTGUocixzKS5hZGQoaSk7cmV0dXJue2FzeW5jIG5leHQoKXtyZXR1cm4gbz9vLmxlbmd0aD09PTA/dD8obz12b2lkIDAsdGhpcy5uZXh0KCkpOihhd2FpdCBuZXcgUHJvbWlzZShzPT57bj1zfSksdGhpcy5uZXh0KCkpOntkb25lOiExLHZhbHVlOmF3YWl0IG8uc2hpZnQoKX06e2RvbmU6ITB9fSxhc3luYyByZXR1cm4ocyl7bz12b2lkIDA7Zm9yKGNvbnN0IGEgb2YgZSlMZShyLGEpLmRlbGV0ZShpKTtyZXR1cm4gbigpLGFyZ3VtZW50cy5sZW5ndGg+MD97ZG9uZTohMCx2YWx1ZTphd2FpdCBzfTp7ZG9uZTohMH19LFtTeW1ib2wuYXN5bmNJdGVyYXRvcl0oKXtyZXR1cm4gdGhpc319fWZ1bmN0aW9uIGVuKHIpe2lmKHI9PT12b2lkIDApcmV0dXJuIHRuO2lmKCFBcnJheS5pc0FycmF5KHIpKXRocm93IG5ldyBUeXBlRXJyb3IoImBtZXRob2ROYW1lc2AgbXVzdCBiZSBhbiBhcnJheSBvZiBzdHJpbmdzIik7Zm9yKGNvbnN0IGUgb2YgcilpZighdG4uaW5jbHVkZXMoZSkpdGhyb3cgdHlwZW9mIGUhPSJzdHJpbmciP25ldyBUeXBlRXJyb3IoImBtZXRob2ROYW1lc2AgZWxlbWVudCBtdXN0IGJlIGEgc3RyaW5nIik6bmV3IEVycm9yKGAke2V9IGlzIG5vdCBFbWl0dGVyeSBtZXRob2RgKTtyZXR1cm4gcn1jb25zdCBZdD1yPT5yPT09YXR8fHI9PT11dDtjbGFzcyBoZXtzdGF0aWMgbWl4aW4oZSx0KXtyZXR1cm4gdD1lbih0KSxuPT57aWYodHlwZW9mIG4hPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcigiYHRhcmdldGAgbXVzdCBiZSBmdW5jdGlvbiIpO2Zvcihjb25zdCBzIG9mIHQpaWYobi5wcm90b3R5cGVbc10hPT12b2lkIDApdGhyb3cgbmV3IEVycm9yKGBUaGUgcHJvcGVydHkgXGAke3N9XGAgYWxyZWFkeSBleGlzdHMgb24gXGB0YXJnZXRcYGApO2Z1bmN0aW9uIG8oKXtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsZSx7ZW51bWVyYWJsZTohMSx2YWx1ZTpuZXcgaGV9KSx0aGlzW2VdfU9iamVjdC5kZWZpbmVQcm9wZXJ0eShuLnByb3RvdHlwZSxlLHtlbnVtZXJhYmxlOiExLGdldDpvfSk7Y29uc3QgaT1zPT5mdW5jdGlvbiguLi5hKXtyZXR1cm4gdGhpc1tlXVtzXSguLi5hKX07Zm9yKGNvbnN0IHMgb2YgdClPYmplY3QuZGVmaW5lUHJvcGVydHkobi5wcm90b3R5cGUscyx7ZW51bWVyYWJsZTohMSx2YWx1ZTppKHMpfSk7cmV0dXJuIG59fXN0YXRpYyBnZXQgaXNEZWJ1Z0VuYWJsZWQoKXtpZih0eXBlb2YgcHJvY2VzcyE9Im9iamVjdCIpcmV0dXJuIGp0O2NvbnN0e2VudjplfT1wcm9jZXNzfHx7ZW52Ont9fTtyZXR1cm4gZS5ERUJVRz09PSJlbWl0dGVyeSJ8fGUuREVCVUc9PT0iKiJ8fGp0fXN0YXRpYyBzZXQgaXNEZWJ1Z0VuYWJsZWQoZSl7anQ9ZX1jb25zdHJ1Y3RvcihlPXt9KXt0ZS5zZXQodGhpcyxuZXcgU2V0KSxzdC5zZXQodGhpcyxuZXcgTWFwKSxOZS5zZXQodGhpcyxuZXcgTWFwKSx0aGlzLmRlYnVnPWUuZGVidWd8fHt9LHRoaXMuZGVidWcuZW5hYmxlZD09PXZvaWQgMCYmKHRoaXMuZGVidWcuZW5hYmxlZD0hMSksdGhpcy5kZWJ1Zy5sb2dnZXJ8fCh0aGlzLmRlYnVnLmxvZ2dlcj0odCxuLG8saSk9Pnt0cnl7aT1KU09OLnN0cmluZ2lmeShpKX1jYXRjaHtpPWBPYmplY3Qgd2l0aCB0aGUgZm9sbG93aW5nIGtleXMgZmFpbGVkIHRvIHN0cmluZ2lmeTogJHtPYmplY3Qua2V5cyhpKS5qb2luKCIsIil9YH10eXBlb2Ygbz09InN5bWJvbCImJihvPW8udG9TdHJpbmcoKSk7Y29uc3Qgcz1uZXcgRGF0ZSxhPWAke3MuZ2V0SG91cnMoKX06JHtzLmdldE1pbnV0ZXMoKX06JHtzLmdldFNlY29uZHMoKX0uJHtzLmdldE1pbGxpc2Vjb25kcygpfWA7Y29uc29sZS5sb2coYFske2F9XVtlbWl0dGVyeToke3R9XVske259XSBFdmVudCBOYW1lOiAke299CglkYXRhOiAke2l9YCl9KX1sb2dJZkRlYnVnRW5hYmxlZChlLHQsbil7KGhlLmlzRGVidWdFbmFibGVkfHx0aGlzLmRlYnVnLmVuYWJsZWQpJiZ0aGlzLmRlYnVnLmxvZ2dlcihlLHRoaXMuZGVidWcubmFtZSx0LG4pfW9uKGUsdCl7Y3QodCksZT1BcnJheS5pc0FycmF5KGUpP2U6W2VdO2Zvcihjb25zdCBuIG9mIGUpUmUobiksRmUodGhpcyxuKS5hZGQodCksdGhpcy5sb2dJZkRlYnVnRW5hYmxlZCgic3Vic2NyaWJlIixuLHZvaWQgMCksWXQobil8fHRoaXMuZW1pdChhdCx7ZXZlbnROYW1lOm4sbGlzdGVuZXI6dH0pO3JldHVybiB0aGlzLm9mZi5iaW5kKHRoaXMsZSx0KX1vZmYoZSx0KXtjdCh0KSxlPUFycmF5LmlzQXJyYXkoZSk/ZTpbZV07Zm9yKGNvbnN0IG4gb2YgZSlSZShuKSxGZSh0aGlzLG4pLmRlbGV0ZSh0KSx0aGlzLmxvZ0lmRGVidWdFbmFibGVkKCJ1bnN1YnNjcmliZSIsbix2b2lkIDApLFl0KG4pfHx0aGlzLmVtaXQodXQse2V2ZW50TmFtZTpuLGxpc3RlbmVyOnR9KX1vbmNlKGUpe3JldHVybiBuZXcgUHJvbWlzZSh0PT57Y29uc3Qgbj10aGlzLm9uKGUsbz0+e24oKSx0KG8pfSl9KX1ldmVudHMoZSl7ZT1BcnJheS5pc0FycmF5KGUpP2U6W2VdO2Zvcihjb25zdCB0IG9mIGUpUmUodCk7cmV0dXJuIFpyKHRoaXMsZSl9YXN5bmMgZW1pdChlLHQpe1JlKGUpLHRoaXMubG9nSWZEZWJ1Z0VuYWJsZWQoImVtaXQiLGUsdCksS28odGhpcyxlLHQpO2NvbnN0IG49RmUodGhpcyxlKSxvPXRlLmdldCh0aGlzKSxpPVsuLi5uXSxzPVl0KGUpP1tdOlsuLi5vXTthd2FpdCBKcixhd2FpdCBQcm9taXNlLmFsbChbLi4uaS5tYXAoYXN5bmMgYT0+e2lmKG4uaGFzKGEpKXJldHVybiBhKHQpfSksLi4ucy5tYXAoYXN5bmMgYT0+e2lmKG8uaGFzKGEpKXJldHVybiBhKGUsdCl9KV0pfWFzeW5jIGVtaXRTZXJpYWwoZSx0KXtSZShlKSx0aGlzLmxvZ0lmRGVidWdFbmFibGVkKCJlbWl0U2VyaWFsIixlLHQpO2NvbnN0IG49RmUodGhpcyxlKSxvPXRlLmdldCh0aGlzKSxpPVsuLi5uXSxzPVsuLi5vXTthd2FpdCBKcjtmb3IoY29uc3QgYSBvZiBpKW4uaGFzKGEpJiZhd2FpdCBhKHQpO2Zvcihjb25zdCBhIG9mIHMpby5oYXMoYSkmJmF3YWl0IGEoZSx0KX1vbkFueShlKXtyZXR1cm4gY3QoZSksdGhpcy5sb2dJZkRlYnVnRW5hYmxlZCgic3Vic2NyaWJlQW55Iix2b2lkIDAsdm9pZCAwKSx0ZS5nZXQodGhpcykuYWRkKGUpLHRoaXMuZW1pdChhdCx7bGlzdGVuZXI6ZX0pLHRoaXMub2ZmQW55LmJpbmQodGhpcyxlKX1hbnlFdmVudCgpe3JldHVybiBacih0aGlzKX1vZmZBbnkoZSl7Y3QoZSksdGhpcy5sb2dJZkRlYnVnRW5hYmxlZCgidW5zdWJzY3JpYmVBbnkiLHZvaWQgMCx2b2lkIDApLHRoaXMuZW1pdCh1dCx7bGlzdGVuZXI6ZX0pLHRlLmdldCh0aGlzKS5kZWxldGUoZSl9Y2xlYXJMaXN0ZW5lcnMoZSl7ZT1BcnJheS5pc0FycmF5KGUpP2U6W2VdO2Zvcihjb25zdCB0IG9mIGUpaWYodGhpcy5sb2dJZkRlYnVnRW5hYmxlZCgiY2xlYXIiLHQsdm9pZCAwKSx0eXBlb2YgdD09InN0cmluZyJ8fHR5cGVvZiB0PT0ic3ltYm9sIil7RmUodGhpcyx0KS5jbGVhcigpO2NvbnN0IG49TGUodGhpcyx0KTtmb3IoY29uc3QgbyBvZiBuKW8uZmluaXNoKCk7bi5jbGVhcigpfWVsc2V7dGUuZ2V0KHRoaXMpLmNsZWFyKCk7Zm9yKGNvbnN0IG4gb2Ygc3QuZ2V0KHRoaXMpLnZhbHVlcygpKW4uY2xlYXIoKTtmb3IoY29uc3QgbiBvZiBOZS5nZXQodGhpcykudmFsdWVzKCkpe2Zvcihjb25zdCBvIG9mIG4pby5maW5pc2goKTtuLmNsZWFyKCl9fX1saXN0ZW5lckNvdW50KGUpe2U9QXJyYXkuaXNBcnJheShlKT9lOltlXTtsZXQgdD0wO2Zvcihjb25zdCBuIG9mIGUpe2lmKHR5cGVvZiBuPT0ic3RyaW5nIil7dCs9dGUuZ2V0KHRoaXMpLnNpemUrRmUodGhpcyxuKS5zaXplK0xlKHRoaXMsbikuc2l6ZStMZSh0aGlzKS5zaXplO2NvbnRpbnVlfXR5cGVvZiBuPCJ1IiYmUmUobiksdCs9dGUuZ2V0KHRoaXMpLnNpemU7Zm9yKGNvbnN0IG8gb2Ygc3QuZ2V0KHRoaXMpLnZhbHVlcygpKXQrPW8uc2l6ZTtmb3IoY29uc3QgbyBvZiBOZS5nZXQodGhpcykudmFsdWVzKCkpdCs9by5zaXplfXJldHVybiB0fWJpbmRNZXRob2RzKGUsdCl7aWYodHlwZW9mIGUhPSJvYmplY3QifHxlPT09bnVsbCl0aHJvdyBuZXcgVHlwZUVycm9yKCJgdGFyZ2V0YCBtdXN0IGJlIGFuIG9iamVjdCIpO3Q9ZW4odCk7Zm9yKGNvbnN0IG4gb2YgdCl7aWYoZVtuXSE9PXZvaWQgMCl0aHJvdyBuZXcgRXJyb3IoYFRoZSBwcm9wZXJ0eSBcYCR7bn1cYCBhbHJlYWR5IGV4aXN0cyBvbiBcYHRhcmdldFxgYCk7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsbix7ZW51bWVyYWJsZTohMSx2YWx1ZTp0aGlzW25dLmJpbmQodGhpcyl9KX19fWNvbnN0IHRuPU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGhlLnByb3RvdHlwZSkuZmlsdGVyKHI9PnIhPT0iY29uc3RydWN0b3IiKTtPYmplY3QuZGVmaW5lUHJvcGVydHkoaGUsImxpc3RlbmVyQWRkZWQiLHt2YWx1ZTphdCx3cml0YWJsZTohMSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShoZSwibGlzdGVuZXJSZW1vdmVkIix7dmFsdWU6dXQsd3JpdGFibGU6ITEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITF9KTt2YXIgSm89aGU7Y29uc3QgWHQ9cW8oSm8pO2Z1bmN0aW9uIFpvKHIpe3JldHVybiB0eXBlb2Ygcj09Im9iamVjdCImJnIhPT1udWxsJiYibWVzc2FnZSJpbiByJiZ0eXBlb2Ygci5tZXNzYWdlPT0ic3RyaW5nIn1mdW5jdGlvbiBlaShyKXtpZihabyhyKSlyZXR1cm4gcjt0cnl7cmV0dXJuIG5ldyBFcnJvcihKU09OLnN0cmluZ2lmeShyKSl9Y2F0Y2h7cmV0dXJuIG5ldyBFcnJvcihTdHJpbmcocikpfX1mdW5jdGlvbiBRdChyKXtyZXR1cm4gZWkocikubWVzc2FnZX12YXIgdGk9T2JqZWN0LmRlZmluZVByb3BlcnR5LHJpPShyLGUsdCk9PmUgaW4gcj90aShyLGUse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOnR9KTpyW2VdPXQsbmk9KHIsZSx0KT0+KHJpKHIsdHlwZW9mIGUhPSJzeW1ib2wiP2UrIiI6ZSx0KSx0KTtjb25zdCBvaT0iaGxnLnRva2JveC5jb20vcHJvZC9sb2dnaW5nL3ZjcF93ZWJydGMiLGlpPSJodHRwczovLyIsc2k9MWU0O2xldCBmdDtjb25zdCBhaT1uZXcgVWludDhBcnJheSgxNik7ZnVuY3Rpb24gdWkoKXtpZighZnQmJihmdD10eXBlb2YgY3J5cHRvPCJ1IiYmY3J5cHRvLmdldFJhbmRvbVZhbHVlcyYmY3J5cHRvLmdldFJhbmRvbVZhbHVlcy5iaW5kKGNyeXB0byksIWZ0KSl0aHJvdyBuZXcgRXJyb3IoImNyeXB0by5nZXRSYW5kb21WYWx1ZXMoKSBub3Qgc3VwcG9ydGVkLiBTZWUgaHR0cHM6Ly9naXRodWIuY29tL3V1aWRqcy91dWlkI2dldHJhbmRvbXZhbHVlcy1ub3Qtc3VwcG9ydGVkIik7cmV0dXJuIGZ0KGFpKX1jb25zdCBEPVtdO2ZvcihsZXQgcj0wO3I8MjU2OysrcilELnB1c2goKHIrMjU2KS50b1N0cmluZygxNikuc2xpY2UoMSkpO2Z1bmN0aW9uIGNpKHIsZT0wKXtyZXR1cm4oRFtyW2UrMF1dK0RbcltlKzFdXStEW3JbZSsyXV0rRFtyW2UrM11dKyItIitEW3JbZSs0XV0rRFtyW2UrNV1dKyItIitEW3JbZSs2XV0rRFtyW2UrN11dKyItIitEW3JbZSs4XV0rRFtyW2UrOV1dKyItIitEW3JbZSsxMF1dK0RbcltlKzExXV0rRFtyW2UrMTJdXStEW3JbZSsxM11dK0RbcltlKzE0XV0rRFtyW2UrMTVdXSkudG9Mb3dlckNhc2UoKX1jb25zdCBmaT10eXBlb2YgY3J5cHRvPCJ1IiYmY3J5cHRvLnJhbmRvbVVVSUQmJmNyeXB0by5yYW5kb21VVUlELmJpbmQoY3J5cHRvKSxybj17cmFuZG9tVVVJRDpmaX07ZnVuY3Rpb24gbGkocixlLHQpe2lmKHJuLnJhbmRvbVVVSUQmJiFlJiYhcilyZXR1cm4gcm4ucmFuZG9tVVVJRCgpO3I9cnx8e307Y29uc3Qgbj1yLnJhbmRvbXx8KHIucm5nfHx1aSkoKTtpZihuWzZdPW5bNl0mMTV8NjQsbls4XT1uWzhdJjYzfDEyOCxlKXt0PXR8fDA7Zm9yKGxldCBvPTA7bzwxNjsrK28pZVt0K29dPW5bb107cmV0dXJuIGV9cmV0dXJuIGNpKG4pfWZ1bmN0aW9uIHF0KHIsZSl7Z2xvYmFsVGhpcy52b25hZ2V8fChnbG9iYWxUaGlzLnZvbmFnZT17fSksZ2xvYmFsVGhpcy52b25hZ2Uud29ya2VyaXplcnx8KGdsb2JhbFRoaXMudm9uYWdlLndvcmtlcml6ZXI9e30pO2xldCB0PWdsb2JhbFRoaXMudm9uYWdlLndvcmtlcml6ZXI7cmV0dXJuIHRbcl18fCh0W3JdPWUpLHRbcl19Y29uc3QgcmU9cXQoImdsb2JhbHMiLHt9KTt2YXIgbWU9KHI9PihyLklOSVQ9IklOSVQiLHIuRk9SV0FSRD0iRk9SV0FSRCIsci5URVJNSU5BVEU9IlRFUk1JTkFURSIsci5HTE9CQUxTX1NZTkM9IkdMT0JBTFNfU1lOQyIscikpKG1lfHx7fSk7ZnVuY3Rpb24gbm4ocil7cmV0dXJuW0ltYWdlQml0bWFwLFJlYWRhYmxlU3RyZWFtLFdyaXRhYmxlU3RyZWFtXS5zb21lKGU9PnIgaW5zdGFuY2VvZiBlKX1sZXQgZGk9MDtmdW5jdGlvbiBoaShyLGUsdCxuLG8pe2NvbnN0IGk9ZGkrKztyZXR1cm4gci5wb3N0TWVzc2FnZSh7aWQ6aSx0eXBlOmUsZnVuY3Rpb25OYW1lOnQsYXJnczpufSxuLmZpbHRlcihzPT5ubihzKSkpLG5ldyBQcm9taXNlKHM9PntvPT1udWxsfHxvLnNldChpLHMpfSl9ZnVuY3Rpb24gemUocixlKXtjb25zdHtpZDp0LHR5cGU6bn09cixvPUFycmF5LmlzQXJyYXkoZSk/ZTpbZV07cG9zdE1lc3NhZ2Uoe2lkOnQsdHlwZTpuLHJlc3VsdDplfSxvLmZpbHRlcihpPT5ubihpKSkpfWNvbnN0IG9uPXF0KCJ3b3JrZXJpemVkIix7fSk7ZnVuY3Rpb24gc24oKXtyZXR1cm4gdHlwZW9mIFdvcmtlckdsb2JhbFNjb3BlPCJ1IiYmc2VsZiBpbnN0YW5jZW9mIFdvcmtlckdsb2JhbFNjb3BlfWFzeW5jIGZ1bmN0aW9uIG1pKCl7aWYoc24oKSl6ZSh7dHlwZTptZS5HTE9CQUxTX1NZTkN9LHJlKTtlbHNle2NvbnN0IHI9W107Zm9yKGNvbnN0IGUgaW4gb24pe2NvbnN0e3dvcmtlcjp0LHJlc29sdmVyczpufT1vbltlXS53b3JrZXJDb250ZXh0O3QmJnIucHVzaChoaSh0LG1lLkdMT0JBTFNfU1lOQywiIixbcmVdLG4pKX1hd2FpdCBQcm9taXNlLmFsbChyKX19ZnVuY3Rpb24gbHQocixlKXtpZihBcnJheS5pc0FycmF5KGUpKWUuc3BsaWNlKDAsZS5sZW5ndGgpO2Vsc2UgaWYodHlwZW9mIGU9PSJvYmplY3QiKWZvcihjb25zdCB0IGluIGUpZGVsZXRlIGVbdF07Zm9yKGNvbnN0IHQgaW4gcilBcnJheS5pc0FycmF5KHJbdF0pPyhlW3RdPVtdLGx0KHJbdF0sZVt0XSkpOnR5cGVvZiByW3RdPT0ib2JqZWN0Ij8oZVt0XT17fSxsdChyW3RdLGVbdF0pKTplW3RdPXJbdF19YXN5bmMgZnVuY3Rpb24gcGkocixlKXtjb25zdHtmdW5jdGlvbk5hbWU6dCxhcmdzOm59PXI7aWYoIWUuaW5zdGFuY2UpdGhyb3ciaW5zdGFuY2Ugbm90IGluaXRpYWxpemVkIjtpZighdCl0aHJvdyJtaXNzaW5nIGZ1bmN0aW9uIG5hbWUgdG8gY2FsbCI7aWYoIWUuaW5zdGFuY2VbdF0pdGhyb3dgdW5kZWZpbmVkIGZ1bmN0aW9uIFske3R9XSBpbiBjbGFzcyAke2UuaW5zdGFuY2UuY29uc3RydWN0b3Iud29ya2VySWR9YDt6ZShyLGF3YWl0IGUuaW5zdGFuY2VbdF0oLi4ubiE9bnVsbD9uOltdKSl9Y29uc3QgZ2k9cXQoInJlZ2lzdGVyZWRXb3JrZXJzIix7fSk7ZnVuY3Rpb24geWkocixlKXtpZighci5hcmdzKXRocm93Ik1pc3NpbmcgY2xhc3NOYW1lIHdoaWxlIGluaXRpYWxpemluZyB3b3JrZXIiO2NvbnN0W3Qsbl09ci5hcmdzLG89Z2lbdF07aWYobyllLmluc3RhbmNlPW5ldyBvKHIuYXJncy5zbGljZSgxKSk7ZWxzZSB0aHJvd2B1bmtub3duIHdvcmtlciBjbGFzcyAke3R9YDtsdChuLHJlKSx6ZShyLHR5cGVvZiBlLmluc3RhbmNlIT09dm9pZCAwKX1hc3luYyBmdW5jdGlvbiBiaShyLGUpe2NvbnN0e2FyZ3M6dH09cjtpZighZS5pbnN0YW5jZSl0aHJvdyJpbnN0YW5jZSBub3QgaW5pdGlhbGl6ZWQiO2xldCBuO2UuaW5zdGFuY2UudGVybWluYXRlJiYobj1hd2FpdCBlLmluc3RhbmNlLnRlcm1pbmF0ZSguLi50IT1udWxsP3Q6W10pKSx6ZShyLG4pfWZ1bmN0aW9uIHhpKHIpe2lmKCFyLmFyZ3MpdGhyb3ciTWlzc2luZyBnbG9iYWxzIHdoaWxlIHN5bmNpbmciO2x0KHIuYXJnc1swXSxyZSksemUocix7fSl9ZnVuY3Rpb24gX2koKXtjb25zdCByPXt9O29ubWVzc2FnZT1hc3luYyBlPT57Y29uc3QgdD1lLmRhdGE7c3dpdGNoKHQudHlwZSl7Y2FzZSBtZS5JTklUOnlpKHQscik7YnJlYWs7Y2FzZSBtZS5GT1JXQVJEOnBpKHQscik7YnJlYWs7Y2FzZSBtZS5URVJNSU5BVEU6YmkodCxyKTticmVhaztjYXNlIG1lLkdMT0JBTFNfU1lOQzp4aSh0KTticmVha319fXNuKCkmJl9pKCk7ZnVuY3Rpb24gdmkocixlKXtyZXR1cm4gcmVbcl18fChyZVtyXT1lKSxbKCk9PnJlW3JdLGFzeW5jIHQ9PntyZVtyXT10LGF3YWl0IG1pKCl9XX1mdW5jdGlvbiBFaShyLGUpe3JldHVybiB2aShyLGUpfWNvbnN0W1RpLHdpXT1FaSgibWV0YWRhdGEiKTtmdW5jdGlvbiBBaShyKXt3aShyKX1mdW5jdGlvbiBLdCgpe3JldHVybiBUaSgpfWNsYXNzIEp0e2NvbnN0cnVjdG9yKGUsdCl7bmkodGhpcywidXVpZCIpLHRoaXMuY29uZmlnPWUsdGhpcy51dWlkPXQhPW51bGw/dDpsaSgpfWFzeW5jIHNlbmQoZSl7dmFyIHQsbixvO2NvbnN0e2FwcElkOmksc291cmNlVHlwZTpzfT0odD1LdCgpKSE9bnVsbD90Ont9O2lmKCFpfHwhcylyZXR1cm4ibWV0YWRhdGEgbWlzc2luZyI7Y29uc3QgYT1uZXcgQWJvcnRDb250cm9sbGVyLHU9c2V0VGltZW91dCgoKT0+YS5hYm9ydCgpLHNpKTtyZXR1cm4gYXdhaXQoKG89KG49dGhpcy5jb25maWcpPT1udWxsP3ZvaWQgMDpuLmZldGNoKSE9bnVsbD9vOmZldGNoKSh0aGlzLmdldFVybCgpLHttZXRob2Q6IlBPU1QiLGhlYWRlcnM6dGhpcy5nZXRIZWFkZXJzKCksYm9keTpKU09OLnN0cmluZ2lmeSh0aGlzLmJ1aWxkUmVwb3J0KGUpKSxzaWduYWw6YS5zaWduYWx9KSxjbGVhclRpbWVvdXQodSksInN1Y2Nlc3MifWdldFVybCgpe3ZhciBlO2xldCB0PShlPUt0KCkucHJveHlVcmwpIT1udWxsP2U6aWk7cmV0dXJuIHQrPSh0LmF0KC0xKT09PSIvIj8iIjoiLyIpK29pLHR9Z2V0SGVhZGVycygpe3JldHVybnsiQ29udGVudC1UeXBlIjoiYXBwbGljYXRpb24vanNvbiJ9fWJ1aWxkUmVwb3J0KGUpe2NvbnN0IHQ9S3QoKTtyZXR1cm57Z3VpZDp0aGlzLnV1aWQsLi4uZSxhcHBsaWNhdGlvbklkOnQuYXBwSWQsdGltZXN0YW1wOkRhdGUubm93KCkscHJveHlVcmw6dC5wcm94eVVybCxzb3VyY2U6dC5zb3VyY2VUeXBlfX19Y29uc3QgZHQ9IjIuMC40IjtjbGFzcyBJaXtjb25zdHJ1Y3RvcihlLHQpe3RoaXMuY29uZmlnPWUsdGhpcy5mcmFtZVRyYW5zZm9ybWVkQ291bnQ9MCx0aGlzLmZyYW1lRnJvbVNvdXJjZUNvdW50PTAsdGhpcy5zdGFydEF0PTAsdGhpcy5yZXBvcnRlcj1uZXcgSnQoZSx0KX1hc3luYyBvbkZyYW1lRnJvbVNvdXJjZSgpe3RoaXMuZnJhbWVGcm9tU291cmNlQ291bnQrK31nZXQgZnBzKCl7Y29uc3R7c3RhcnRBdDplLGZyYW1lRnJvbVNvdXJjZUNvdW50OnR9PXRoaXMsbj0oRGF0ZS5ub3coKS1lKS8xZTM7cmV0dXJuIHQvbn1hc3luYyBvbkZyYW1lVHJhbnNmb3JtZWQoZT17fSx0PSExKXt0aGlzLnN0YXJ0QXQ9PT0wJiYodGhpcy5zdGFydEF0PURhdGUubm93KCkpLHRoaXMuZnJhbWVUcmFuc2Zvcm1lZENvdW50Kys7Y29uc3R7c3RhcnRBdDpuLGZyYW1lVHJhbnNmb3JtZWRDb3VudDpvLGZyYW1lRnJvbVNvdXJjZUNvdW50Oml9PXRoaXMscz1EYXRlLm5vdygpLGE9KHMtbikvMWUzLHU9by9hLGY9aS9hO3JldHVybiB0fHx0aGlzLmZyYW1lVHJhbnNmb3JtZWRDb3VudD49dGhpcy5jb25maWcubG9nZ2luZ0ludGVydmFsRnJhbWVDb3VudD8odGhpcy5mcmFtZUZyb21Tb3VyY2VDb3VudD0wLHRoaXMuZnJhbWVUcmFuc2Zvcm1lZENvdW50PTAsdGhpcy5zdGFydEF0PXMsdGhpcy5yZXBvcnRlci5jb25maWc9dGhpcy5jb25maWcsdGhpcy5yZXBvcnRlci5zZW5kKHsuLi50aGlzLmNvbmZpZy5yZXBvcnQsdmFyaWF0aW9uOiJRb1MiLGZwczpmLHRyYW5zZm9ybWVkRnBzOnUsZnJhbWVzVHJhbnNmb3JtZWQ6bywuLi5lfSkpOiJzdWNjZXNzIn19dmFyIFp0PShyPT4oci5waXBlbGluZV9lbmRlZD0icGlwZWxpbmVfZW5kZWQiLHIucGlwZWxpbmVfZW5kZWRfd2l0aF9lcnJvcj0icGlwZWxpbmVfZW5kZWRfd2l0aF9lcnJvciIsci5waXBlbGluZV9zdGFydGVkPSJwaXBlbGluZV9zdGFydGVkIixyLnBpcGVsaW5lX3N0YXJ0ZWRfd2l0aF9lcnJvcj0icGlwZWxpbmVfc3RhcnRlZF93aXRoX2Vycm9yIixyLnBpcGVsaW5lX3Jlc3RhcnRlZD0icGlwZWxpbmVfcmVzdGFydGVkIixyLnBpcGVsaW5lX3Jlc3RhcnRlZF93aXRoX2Vycm9yPSJwaXBlbGluZV9yZXN0YXJ0ZWRfd2l0aF9lcnJvciIscikpKFp0fHx7fSk7Y29uc3QgU2k9NTAwLFJpPS44O2NsYXNzIEZpIGV4dGVuZHMgWHR7Y29uc3RydWN0b3IoZSx0KXtzdXBlcigpLHRoaXMucmVwb3J0ZXJfPW5ldyBKdCx0aGlzLnJlcG9ydGVyUW9zXz1uZXcgSWkoe2xvZ2dpbmdJbnRlcnZhbEZyYW1lQ291bnQ6U2kscmVwb3J0Ont2ZXJzaW9uOmR0fX0pLHRoaXMuaW5kZXhfPXQsdGhpcy50cmFuc2Zvcm1lcl89ZSx0aGlzLnNob3VsZFN0b3BfPSExLHRoaXMuaXNGbGFzaGVkXz0hMSx0aGlzLm1lZGlhVHJhbnNmb3JtZXJRb3NSZXBvcnRTdGFydFRpbWVzdGFtcF89MCx0aGlzLnZpZGVvSGVpZ2h0Xz0wLHRoaXMudmlkZW9XaWR0aF89MCx0aGlzLnRyYWNrRXhwZWN0ZWRSYXRlXz0tMSx0aGlzLnRyYW5zZm9ybWVyVHlwZV89IkN1c3RvbSIsImdldFRyYW5zZm9ybWVyVHlwZSJpbiBlJiYodGhpcy50cmFuc2Zvcm1lclR5cGVfPWUuZ2V0VHJhbnNmb3JtZXJUeXBlKCkpLHRoaXMucmVwb3J0KHt2YXJpYXRpb246IkNyZWF0ZSJ9KX1zZXRUcmFja0V4cGVjdGVkUmF0ZShlKXt0aGlzLnRyYWNrRXhwZWN0ZWRSYXRlXz1lfWFzeW5jIHN0YXJ0KGUpe2lmKHRoaXMuY29udHJvbGxlcl89ZSx0aGlzLnRyYW5zZm9ybWVyXyYmdHlwZW9mIHRoaXMudHJhbnNmb3JtZXJfLnN0YXJ0PT0iZnVuY3Rpb24iKXRyeXthd2FpdCB0aGlzLnRyYW5zZm9ybWVyXy5zdGFydChlKX1jYXRjaCh0KXt0aGlzLnJlcG9ydCh7bWVzc2FnZTpaLmVycm9ycy50cmFuc2Zvcm1lcl9zdGFydCx2YXJpYXRpb246IkVycm9yIixlcnJvcjpRdCh0KX0pO2NvbnN0IG49e2V2ZW50TWV0YURhdGE6e3RyYW5zZm9ybWVySW5kZXg6dGhpcy5pbmRleF99LGVycm9yOnQsZnVuY3Rpb246InN0YXJ0In07dGhpcy5lbWl0KCJlcnJvciIsbil9fWFzeW5jIHRyYW5zZm9ybShlLHQpe3ZhciBpLHM7dmFyIG4sbztpZih0aGlzLm1lZGlhVHJhbnNmb3JtZXJRb3NSZXBvcnRTdGFydFRpbWVzdGFtcF89PT0wJiYodGhpcy5tZWRpYVRyYW5zZm9ybWVyUW9zUmVwb3J0U3RhcnRUaW1lc3RhbXBfPURhdGUubm93KCkpLGUgaW5zdGFuY2VvZiBWaWRlb0ZyYW1lJiYodGhpcy52aWRlb0hlaWdodF89KGk9ZT09bnVsbD92b2lkIDA6ZS5kaXNwbGF5SGVpZ2h0KSE9bnVsbD9pOjAsdGhpcy52aWRlb1dpZHRoXz0ocz1lPT1udWxsP3ZvaWQgMDplLmRpc3BsYXlXaWR0aCkhPW51bGw/czowKSx0aGlzLnJlcG9ydGVyUW9zXy5vbkZyYW1lRnJvbVNvdXJjZSgpLHRoaXMudHJhbnNmb3JtZXJfKWlmKHRoaXMuc2hvdWxkU3RvcF8pY29uc29sZS53YXJuKCJbUGlwZWxpbmVdIGZsdXNoIGZyb20gdHJhbnNmb3JtIiksZS5jbG9zZSgpLHRoaXMuZmx1c2godCksdC50ZXJtaW5hdGUoKTtlbHNle3RyeXthd2FpdCgobz0obj10aGlzLnRyYW5zZm9ybWVyXykudHJhbnNmb3JtKT09bnVsbD92b2lkIDA6by5jYWxsKG4sZSx0KSksdGhpcy5yZXBvcnRRb3MoKX1jYXRjaChhKXt0aGlzLnJlcG9ydCh7bWVzc2FnZTpaLmVycm9ycy50cmFuc2Zvcm1lcl90cmFuc2Zvcm0sdmFyaWF0aW9uOiJFcnJvciIsZXJyb3I6UXQoYSl9KTtjb25zdCB1PXtldmVudE1ldGFEYXRhOnt0cmFuc2Zvcm1lckluZGV4OnRoaXMuaW5kZXhffSxlcnJvcjphLGZ1bmN0aW9uOiJ0cmFuc2Zvcm0ifTt0aGlzLmVtaXQoImVycm9yIix1KX1pZih0aGlzLnRyYWNrRXhwZWN0ZWRSYXRlXyE9LTEmJnRoaXMudHJhY2tFeHBlY3RlZFJhdGVfKlJpPnRoaXMucmVwb3J0ZXJRb3NfLmZwcyl7Y29uc3QgYT17ZXZlbnRNZXRhRGF0YTp7dHJhbnNmb3JtZXJJbmRleDp0aGlzLmluZGV4X30sd2FybmluZ1R5cGU6ImZwc19kcm9wIixkcm9wSW5mbzp7cmVxdWVzdGVkOnRoaXMudHJhY2tFeHBlY3RlZFJhdGVfLGN1cnJlbnQ6dGhpcy5yZXBvcnRlclFvc18uZnBzfX07dGhpcy5lbWl0KCJ3YXJuIixhKX19fWFzeW5jIGZsdXNoKGUpe2lmKHRoaXMudHJhbnNmb3JtZXJfJiZ0eXBlb2YgdGhpcy50cmFuc2Zvcm1lcl8uZmx1c2g9PSJmdW5jdGlvbiImJiF0aGlzLmlzRmxhc2hlZF8pe3RoaXMuaXNGbGFzaGVkXz0hMDt0cnl7YXdhaXQgdGhpcy50cmFuc2Zvcm1lcl8uZmx1c2goZSl9Y2F0Y2godCl7dGhpcy5yZXBvcnQoe21lc3NhZ2U6Wi5lcnJvcnMudHJhbnNmb3JtZXJfZmx1c2gsdmFyaWF0aW9uOiJFcnJvciIsZXJyb3I6UXQodCl9KTtjb25zdCBuPXtldmVudE1ldGFEYXRhOnt0cmFuc2Zvcm1lckluZGV4OnRoaXMuaW5kZXhffSxlcnJvcjp0LGZ1bmN0aW9uOiJmbHVzaCJ9O3RoaXMuZW1pdCgiZXJyb3IiLG4pfX10aGlzLnJlcG9ydFFvcyghMCksdGhpcy5yZXBvcnQoe3ZhcmlhdGlvbjoiRGVsZXRlIn0pfXN0b3AoKXtjb25zb2xlLmxvZygiW1BpcGVsaW5lXSBTdG9wIHN0cmVhbS4iKSx0aGlzLmNvbnRyb2xsZXJfJiYodGhpcy5mbHVzaCh0aGlzLmNvbnRyb2xsZXJfKSx0aGlzLmNvbnRyb2xsZXJfLnRlcm1pbmF0ZSgpKSx0aGlzLnNob3VsZFN0b3BfPSEwfXJlcG9ydChlKXt0aGlzLnJlcG9ydGVyXy5zZW5kKHt2ZXJzaW9uOmR0LGFjdGlvbjoiTWVkaWFUcmFuc2Zvcm1lciIsdHJhbnNmb3JtZXJUeXBlOnRoaXMudHJhbnNmb3JtZXJUeXBlXywuLi5lfSl9cmVwb3J0UW9zKGU9ITEpe3RoaXMucmVwb3J0ZXJRb3NfLmNvbmZpZz17Li4udGhpcy5yZXBvcnRlclFvc18uY29uZmlnfSx0aGlzLnJlcG9ydGVyUW9zXy5vbkZyYW1lVHJhbnNmb3JtZWQoe3ZlcnNpb246ZHQsYWN0aW9uOiJNZWRpYVRyYW5zZm9ybWVyIix0cmFuc2Zvcm1lclR5cGU6dGhpcy50cmFuc2Zvcm1lclR5cGVfLHZpZGVvV2lkdGg6dGhpcy52aWRlb1dpZHRoXyx2aWRlb0hlaWdodDp0aGlzLnZpZGVvSGVpZ2h0X30sZSl9fWNsYXNzIFBpIGV4dGVuZHMgWHR7Y29uc3RydWN0b3IoZSl7c3VwZXIoKSx0aGlzLnRyYW5zZm9ybWVyc189W10sdGhpcy50cmFja0V4cGVjdGVkUmF0ZV89LTE7Zm9yKGxldCB0PTA7dDxlLmxlbmd0aDt0Kyspe2xldCBuPW5ldyBGaShlW3RdLHQpO24ub24oImVycm9yIixvPT57dGhpcy5lbWl0KCJlcnJvciIsbyl9KSxuLm9uKCJ3YXJuIixvPT57dGhpcy5lbWl0KCJ3YXJuIixvKX0pLHRoaXMudHJhbnNmb3JtZXJzXy5wdXNoKG4pfX1zZXRUcmFja0V4cGVjdGVkUmF0ZShlKXt0aGlzLnRyYWNrRXhwZWN0ZWRSYXRlXz1lO2ZvcihsZXQgdCBvZiB0aGlzLnRyYW5zZm9ybWVyc18pdC5zZXRUcmFja0V4cGVjdGVkUmF0ZSh0aGlzLnRyYWNrRXhwZWN0ZWRSYXRlXyl9YXN5bmMgc3RhcnQoZSx0KXtpZighdGhpcy50cmFuc2Zvcm1lcnNffHx0aGlzLnRyYW5zZm9ybWVyc18ubGVuZ3RoPT09MCl7Y29uc29sZS5sb2coIltQaXBlbGluZV0gTm8gdHJhbnNmb3JtZXJzLiIpO3JldHVybn10cnl7bGV0IG49ZTtmb3IobGV0IG8gb2YgdGhpcy50cmFuc2Zvcm1lcnNfKWU9ZS5waXBlVGhyb3VnaChuZXcgVHJhbnNmb3JtU3RyZWFtKG8pKTtlLnBpcGVUbyh0KS50aGVuKGFzeW5jKCk9Pntjb25zb2xlLmxvZygiW1BpcGVsaW5lXSBTZXR1cC4iKSxhd2FpdCB0LmFib3J0KCksYXdhaXQgbi5jYW5jZWwoKSx0aGlzLmVtaXQoInBpcGVsaW5lSW5mbyIsInBpcGVsaW5lX2VuZGVkIil9KS5jYXRjaChhc3luYyBvPT57ZS5jYW5jZWwoKS50aGVuKCgpPT57Y29uc29sZS5sb2coIltQaXBlbGluZV0gU2h1dHRpbmcgZG93biBzdHJlYW1zIGFmdGVyIGFib3J0LiIpfSkuY2F0Y2goaT0+e2NvbnNvbGUuZXJyb3IoIltQaXBlbGluZV0gRXJyb3IgZnJvbSBzdHJlYW0gdHJhbnNmb3JtOiIsaSl9KSxhd2FpdCB0LmFib3J0KG8pLGF3YWl0IG4uY2FuY2VsKG8pLHRoaXMuZW1pdCgicGlwZWxpbmVJbmZvIiwicGlwZWxpbmVfZW5kZWRfd2l0aF9lcnJvciIpfSl9Y2F0Y2h7dGhpcy5lbWl0KCJwaXBlbGluZUluZm8iLCJwaXBlbGluZV9zdGFydGVkX3dpdGhfZXJyb3IiKSx0aGlzLmRlc3Ryb3koKTtyZXR1cm59dGhpcy5lbWl0KCJwaXBlbGluZUluZm8iLCJwaXBlbGluZV9zdGFydGVkIiksY29uc29sZS5sb2coIltQaXBlbGluZV0gUGlwZWxpbmUgc3RhcnRlZC4iKX1hc3luYyBkZXN0cm95KCl7Y29uc29sZS5sb2coIltQaXBlbGluZV0gRGVzdHJveWluZyBQaXBlbGluZS4iKTtmb3IobGV0IGUgb2YgdGhpcy50cmFuc2Zvcm1lcnNfKWUuc3RvcCgpfX1jbGFzcyBraSBleHRlbmRzIFh0e2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLnJlcG9ydGVyXz1uZXcgSnQsdGhpcy50cmFja0V4cGVjdGVkUmF0ZV89LTEsdGhpcy5yZXBvcnQoe3ZhcmlhdGlvbjoiQ3JlYXRlIn0pfXNldFRyYWNrRXhwZWN0ZWRSYXRlKGUpe3RoaXMudHJhY2tFeHBlY3RlZFJhdGVfPWUsdGhpcy5waXBlbGluZV8mJnRoaXMucGlwZWxpbmVfLnNldFRyYWNrRXhwZWN0ZWRSYXRlKHRoaXMudHJhY2tFeHBlY3RlZFJhdGVfKX10cmFuc2Zvcm0oZSx0KXtyZXR1cm4gdGhpcy5yZWFkYWJsZV89ZSx0aGlzLndyaXRhYmxlXz10LHRoaXMudHJhbnNmb3JtSW50ZXJuYWwoKX10cmFuc2Zvcm1JbnRlcm5hbCgpe3JldHVybiBuZXcgUHJvbWlzZShhc3luYyhlLHQpPT57aWYoIXRoaXMudHJhbnNmb3JtZXJzX3x8dGhpcy50cmFuc2Zvcm1lcnNfLmxlbmd0aD09PTApe3RoaXMucmVwb3J0KHttZXNzYWdlOlouZXJyb3JzLnRyYW5zZm9ybWVyX25vbmUsdmFyaWF0aW9uOiJFcnJvciJ9KSx0KCJbTWVkaWFQcm9jZXNzb3JdIE5lZWQgdG8gc2V0IHRyYW5zZm9ybWVycy4iKTtyZXR1cm59aWYoIXRoaXMucmVhZGFibGVfKXt0aGlzLnJlcG9ydCh7dmFyaWF0aW9uOiJFcnJvciIsbWVzc2FnZTpaLmVycm9ycy5yZWFkYWJsZV9udWxsfSksdCgiW01lZGlhUHJvY2Vzc29yXSBSZWFkYWJsZSBpcyBudWxsLiIpO3JldHVybn1pZighdGhpcy53cml0YWJsZV8pe3RoaXMucmVwb3J0KHt2YXJpYXRpb246IkVycm9yIixtZXNzYWdlOlouZXJyb3JzLndyaXRhYmxlX251bGx9KSx0KCJbTWVkaWFQcm9jZXNzb3JdIFdyaXRhYmxlIGlzIG51bGwuIik7cmV0dXJufWxldCBuPSExO3RoaXMucGlwZWxpbmVfJiYobj0hMCx0aGlzLnBpcGVsaW5lXy5jbGVhckxpc3RlbmVycygpLHRoaXMucGlwZWxpbmVfLmRlc3Ryb3koKSksdGhpcy5waXBlbGluZV89bmV3IFBpKHRoaXMudHJhbnNmb3JtZXJzXyksdGhpcy5waXBlbGluZV8ub24oIndhcm4iLG89Pnt0aGlzLmVtaXQoIndhcm4iLG8pfSksdGhpcy5waXBlbGluZV8ub24oImVycm9yIixvPT57dGhpcy5lbWl0KCJlcnJvciIsbyl9KSx0aGlzLnBpcGVsaW5lXy5vbigicGlwZWxpbmVJbmZvIixvPT57biYmKG89PT0icGlwZWxpbmVfc3RhcnRlZCI/bz1adC5waXBlbGluZV9yZXN0YXJ0ZWQ6bz09PSJwaXBlbGluZV9zdGFydGVkX3dpdGhfZXJyb3IiJiYobz1adC5waXBlbGluZV9yZXN0YXJ0ZWRfd2l0aF9lcnJvcikpLHRoaXMuZW1pdCgicGlwZWxpbmVJbmZvIixvKX0pLHRoaXMudHJhY2tFeHBlY3RlZFJhdGVfIT0tMSYmdGhpcy5waXBlbGluZV8uc2V0VHJhY2tFeHBlY3RlZFJhdGUodGhpcy50cmFja0V4cGVjdGVkUmF0ZV8pLHRoaXMucGlwZWxpbmVfLnN0YXJ0KHRoaXMucmVhZGFibGVfLHRoaXMud3JpdGFibGVfKS50aGVuKCgpPT57ZSgpfSkuY2F0Y2gobz0+e3Qobyl9KX0pfXNldFRyYW5zZm9ybWVycyhlKXtyZXR1cm4gdGhpcy5yZXBvcnQoe3ZhcmlhdGlvbjoiVXBkYXRlIixtZXNzYWdlOloudXBkYXRlcy50cmFuc2Zvcm1lcl9uZXd9KSx0aGlzLnRyYW5zZm9ybWVyc189ZSx0aGlzLnJlYWRhYmxlXyYmdGhpcy53cml0YWJsZV8/dGhpcy50cmFuc2Zvcm1JbnRlcm5hbCgpOlByb21pc2UucmVzb2x2ZSgpfWRlc3Ryb3koKXtyZXR1cm4gbmV3IFByb21pc2UoYXN5bmMgZT0+e3RoaXMucGlwZWxpbmVfJiZ0aGlzLnBpcGVsaW5lXy5kZXN0cm95KCksdGhpcy5yZXBvcnQoe3ZhcmlhdGlvbjoiRGVsZXRlIn0pLGUoKX0pfXJlcG9ydChlKXt0aGlzLnJlcG9ydGVyXy5zZW5kKHt2ZXJzaW9uOmR0LGFjdGlvbjoiTWVkaWFQcm9jZXNzb3IiLC4uLmV9KX19dmFyIERpPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSxDaT0ocixlLHQpPT5lIGluIHI/RGkocixlLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTp0fSk6cltlXT10LEJpPShyLGUsdCk9PihDaShyLHR5cGVvZiBlIT0ic3ltYm9sIj9lKyIiOmUsdCksdCk7Y29uc3QgTWk9ImhsZy50b2tib3guY29tL3Byb2QvbG9nZ2luZy92Y3Bfd2VicnRjIixPaT0iaHR0cHM6Ly8iLFVpPTFlNDtsZXQgaHQ7Y29uc3QgTmk9bmV3IFVpbnQ4QXJyYXkoMTYpO2Z1bmN0aW9uIExpKCl7aWYoIWh0JiYoaHQ9dHlwZW9mIGNyeXB0bzwidSImJmNyeXB0by5nZXRSYW5kb21WYWx1ZXMmJmNyeXB0by5nZXRSYW5kb21WYWx1ZXMuYmluZChjcnlwdG8pLCFodCkpdGhyb3cgbmV3IEVycm9yKCJjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKCkgbm90IHN1cHBvcnRlZC4gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS91dWlkanMvdXVpZCNnZXRyYW5kb212YWx1ZXMtbm90LXN1cHBvcnRlZCIpO3JldHVybiBodChOaSl9Y29uc3QgQz1bXTtmb3IobGV0IHI9MDtyPDI1NjsrK3IpQy5wdXNoKChyKzI1NikudG9TdHJpbmcoMTYpLnNsaWNlKDEpKTtmdW5jdGlvbiB6aShyLGU9MCl7cmV0dXJuKENbcltlKzBdXStDW3JbZSsxXV0rQ1tyW2UrMl1dK0NbcltlKzNdXSsiLSIrQ1tyW2UrNF1dK0NbcltlKzVdXSsiLSIrQ1tyW2UrNl1dK0NbcltlKzddXSsiLSIrQ1tyW2UrOF1dK0NbcltlKzldXSsiLSIrQ1tyW2UrMTBdXStDW3JbZSsxMV1dK0NbcltlKzEyXV0rQ1tyW2UrMTNdXStDW3JbZSsxNF1dK0NbcltlKzE1XV0pLnRvTG93ZXJDYXNlKCl9Y29uc3QgR2k9dHlwZW9mIGNyeXB0bzwidSImJmNyeXB0by5yYW5kb21VVUlEJiZjcnlwdG8ucmFuZG9tVVVJRC5iaW5kKGNyeXB0byksYW49e3JhbmRvbVVVSUQ6R2l9O2Z1bmN0aW9uICRpKHIsZSx0KXtpZihhbi5yYW5kb21VVUlEJiYhZSYmIXIpcmV0dXJuIGFuLnJhbmRvbVVVSUQoKTtyPXJ8fHt9O2NvbnN0IG49ci5yYW5kb218fChyLnJuZ3x8TGkpKCk7aWYobls2XT1uWzZdJjE1fDY0LG5bOF09bls4XSY2M3wxMjgsZSl7dD10fHwwO2ZvcihsZXQgbz0wO288MTY7KytvKWVbdCtvXT1uW29dO3JldHVybiBlfXJldHVybiB6aShuKX1mdW5jdGlvbiBlcihyLGUpe2dsb2JhbFRoaXMudm9uYWdlfHwoZ2xvYmFsVGhpcy52b25hZ2U9e30pLGdsb2JhbFRoaXMudm9uYWdlLndvcmtlcml6ZXJ8fChnbG9iYWxUaGlzLnZvbmFnZS53b3JrZXJpemVyPXt9KTtsZXQgdD1nbG9iYWxUaGlzLnZvbmFnZS53b3JrZXJpemVyO3JldHVybiB0W3JdfHwodFtyXT1lKSx0W3JdfWNvbnN0IG5lPWVyKCJnbG9iYWxzIix7fSk7dmFyIHBlPShyPT4oci5JTklUPSJJTklUIixyLkZPUldBUkQ9IkZPUldBUkQiLHIuVEVSTUlOQVRFPSJURVJNSU5BVEUiLHIuR0xPQkFMU19TWU5DPSJHTE9CQUxTX1NZTkMiLHIpKShwZXx8e30pO2Z1bmN0aW9uIHVuKHIpe3JldHVybltJbWFnZUJpdG1hcCxSZWFkYWJsZVN0cmVhbSxXcml0YWJsZVN0cmVhbV0uc29tZShlPT5yIGluc3RhbmNlb2YgZSl9bGV0IFdpPTA7ZnVuY3Rpb24gVmkocixlLHQsbixvKXtjb25zdCBpPVdpKys7cmV0dXJuIHIucG9zdE1lc3NhZ2Uoe2lkOmksdHlwZTplLGZ1bmN0aW9uTmFtZTp0LGFyZ3M6bn0sbi5maWx0ZXIocz0+dW4ocykpKSxuZXcgUHJvbWlzZShzPT57bz09bnVsbHx8by5zZXQoaSxzKX0pfWZ1bmN0aW9uIEdlKHIsZSl7Y29uc3R7aWQ6dCx0eXBlOm59PXIsbz1BcnJheS5pc0FycmF5KGUpP2U6W2VdO3Bvc3RNZXNzYWdlKHtpZDp0LHR5cGU6bixyZXN1bHQ6ZX0sby5maWx0ZXIoaT0+dW4oaSkpKX1jb25zdCBjbj1lcigid29ya2VyaXplZCIse30pO2Z1bmN0aW9uIGZuKCl7cmV0dXJuIHR5cGVvZiBXb3JrZXJHbG9iYWxTY29wZTwidSImJnNlbGYgaW5zdGFuY2VvZiBXb3JrZXJHbG9iYWxTY29wZX1hc3luYyBmdW5jdGlvbiBIaSgpe2lmKGZuKCkpR2Uoe3R5cGU6cGUuR0xPQkFMU19TWU5DfSxuZSk7ZWxzZXtjb25zdCByPVtdO2Zvcihjb25zdCBlIGluIGNuKXtjb25zdHt3b3JrZXI6dCxyZXNvbHZlcnM6bn09Y25bZV0ud29ya2VyQ29udGV4dDt0JiZyLnB1c2goVmkodCxwZS5HTE9CQUxTX1NZTkMsIiIsW25lXSxuKSl9YXdhaXQgUHJvbWlzZS5hbGwocil9fWZ1bmN0aW9uIG10KHIsZSl7aWYoQXJyYXkuaXNBcnJheShlKSllLnNwbGljZSgwLGUubGVuZ3RoKTtlbHNlIGlmKHR5cGVvZiBlPT0ib2JqZWN0Iilmb3IoY29uc3QgdCBpbiBlKWRlbGV0ZSBlW3RdO2Zvcihjb25zdCB0IGluIHIpQXJyYXkuaXNBcnJheShyW3RdKT8oZVt0XT1bXSxtdChyW3RdLGVbdF0pKTp0eXBlb2Ygclt0XT09Im9iamVjdCI/KGVbdF09e30sbXQoclt0XSxlW3RdKSk6ZVt0XT1yW3RdfWFzeW5jIGZ1bmN0aW9uIGppKHIsZSl7Y29uc3R7ZnVuY3Rpb25OYW1lOnQsYXJnczpufT1yO2lmKCFlLmluc3RhbmNlKXRocm93Imluc3RhbmNlIG5vdCBpbml0aWFsaXplZCI7aWYoIXQpdGhyb3cibWlzc2luZyBmdW5jdGlvbiBuYW1lIHRvIGNhbGwiO2lmKCFlLmluc3RhbmNlW3RdKXRocm93YHVuZGVmaW5lZCBmdW5jdGlvbiBbJHt0fV0gaW4gY2xhc3MgJHtlLmluc3RhbmNlLmNvbnN0cnVjdG9yLndvcmtlcklkfWA7R2Uocixhd2FpdCBlLmluc3RhbmNlW3RdKC4uLm4hPW51bGw/bjpbXSkpfWNvbnN0IFlpPWVyKCJyZWdpc3RlcmVkV29ya2VycyIse30pO2Z1bmN0aW9uIFhpKHIsZSl7aWYoIXIuYXJncyl0aHJvdyJNaXNzaW5nIGNsYXNzTmFtZSB3aGlsZSBpbml0aWFsaXppbmcgd29ya2VyIjtjb25zdFt0LG5dPXIuYXJncyxvPVlpW3RdO2lmKG8pZS5pbnN0YW5jZT1uZXcgbyhyLmFyZ3Muc2xpY2UoMSkpO2Vsc2UgdGhyb3dgdW5rbm93biB3b3JrZXIgY2xhc3MgJHt0fWA7bXQobixuZSksR2Uocix0eXBlb2YgZS5pbnN0YW5jZSE9PXZvaWQgMCl9YXN5bmMgZnVuY3Rpb24gUWkocixlKXtjb25zdHthcmdzOnR9PXI7aWYoIWUuaW5zdGFuY2UpdGhyb3ciaW5zdGFuY2Ugbm90IGluaXRpYWxpemVkIjtsZXQgbjtlLmluc3RhbmNlLnRlcm1pbmF0ZSYmKG49YXdhaXQgZS5pbnN0YW5jZS50ZXJtaW5hdGUoLi4udCE9bnVsbD90OltdKSksR2UocixuKX1mdW5jdGlvbiBxaShyKXtpZighci5hcmdzKXRocm93Ik1pc3NpbmcgZ2xvYmFscyB3aGlsZSBzeW5jaW5nIjttdChyLmFyZ3NbMF0sbmUpLEdlKHIse30pfWZ1bmN0aW9uIEtpKCl7Y29uc3Qgcj17fTtvbm1lc3NhZ2U9YXN5bmMgZT0+e2NvbnN0IHQ9ZS5kYXRhO3N3aXRjaCh0LnR5cGUpe2Nhc2UgcGUuSU5JVDpYaSh0LHIpO2JyZWFrO2Nhc2UgcGUuRk9SV0FSRDpqaSh0LHIpO2JyZWFrO2Nhc2UgcGUuVEVSTUlOQVRFOlFpKHQscik7YnJlYWs7Y2FzZSBwZS5HTE9CQUxTX1NZTkM6cWkodCk7YnJlYWt9fX1mbigpJiZLaSgpO2Z1bmN0aW9uIEppKHIsZSl7cmV0dXJuIG5lW3JdfHwobmVbcl09ZSksWygpPT5uZVtyXSxhc3luYyB0PT57bmVbcl09dCxhd2FpdCBIaSgpfV19ZnVuY3Rpb24gWmkocixlKXtyZXR1cm4gSmkocixlKX1jb25zdFtlcyxXbF09WmkoIm1ldGFkYXRhIik7ZnVuY3Rpb24gdHIoKXtyZXR1cm4gZXMoKX1jbGFzcyB0c3tjb25zdHJ1Y3RvcihlKXtCaSh0aGlzLCJ1dWlkIiwkaSgpKSx0aGlzLmNvbmZpZz1lfWFzeW5jIHNlbmQoZSl7dmFyIHQsbixvO2NvbnN0e2FwcElkOmksc291cmNlVHlwZTpzfT0odD10cigpKSE9bnVsbD90Ont9O2lmKCFpfHwhcylyZXR1cm4ibWV0YWRhdGEgbWlzc2luZyI7Y29uc3QgYT1uZXcgQWJvcnRDb250cm9sbGVyLHU9c2V0VGltZW91dCgoKT0+YS5hYm9ydCgpLFVpKTtyZXR1cm4gYXdhaXQoKG89KG49dGhpcy5jb25maWcpPT1udWxsP3ZvaWQgMDpuLmZldGNoKSE9bnVsbD9vOmZldGNoKSh0aGlzLmdldFVybCgpLHttZXRob2Q6IlBPU1QiLGhlYWRlcnM6dGhpcy5nZXRIZWFkZXJzKCksYm9keTpKU09OLnN0cmluZ2lmeSh0aGlzLmJ1aWxkUmVwb3J0KGUpKSxzaWduYWw6YS5zaWduYWx9KSxjbGVhclRpbWVvdXQodSksInN1Y2Nlc3MifWdldFVybCgpe3ZhciBlO2xldCB0PShlPXRyKCkucHJveHlVcmwpIT1udWxsP2U6T2k7cmV0dXJuIHQrPSh0LmF0KC0xKT09PSIvIj8iIjoiLyIpK01pLHR9Z2V0SGVhZGVycygpe3JldHVybnsiQ29udGVudC1UeXBlIjoiYXBwbGljYXRpb24vanNvbiJ9fWJ1aWxkUmVwb3J0KGUpe2NvbnN0IHQ9dHIoKTtyZXR1cm57Z3VpZDp0aGlzLnV1aWQsLi4uZSxhcHBsaWNhdGlvbklkOnQuYXBwSWQsdGltZXN0YW1wOkRhdGUubm93KCkscHJveHlVcmw6dC5wcm94eVVybCxzb3VyY2U6dC5zb3VyY2VUeXBlfX19Y29uc3QgcnM9IjUuMi4wLWFscGhhLjAiO3ZhciBwdD0ocj0+KHIuTG93PSJMb3ciLHIuSGlnaD0iSGlnaCIscikpKHB0fHx7fSkscnI9KHI9PihyLkZBU1Q9IkZBU1QiLHIuUFJFQ0lTRT0iUFJFQ0lTRSIscikpKHJyfHx7fSksZ3Q9KHI9PihyLkNBTlZBUz0iQ0FOVkFTIixyLldFQkdMPSJXRUJHTCIscikpKGd0fHx7fSksbnM9ZnVuY3Rpb24oKXt2YXIgcj10eXBlb2YgZG9jdW1lbnQ8InUiJiZkb2N1bWVudC5jdXJyZW50U2NyaXB0P2RvY3VtZW50LmN1cnJlbnRTY3JpcHQuc3JjOnZvaWQgMDtyZXR1cm4gZnVuY3Rpb24oZSl7ZT1lfHx7fTt2YXIgdD10eXBlb2YgZTwidSI/ZTp7fSxuLG87dC5yZWFkeT1uZXcgUHJvbWlzZShmdW5jdGlvbihjLG0pe249YyxvPW19KTt2YXIgaT17fSxzO2ZvcihzIGluIHQpdC5oYXNPd25Qcm9wZXJ0eShzKSYmKGlbc109dFtzXSk7dmFyIGE9Ii4vdGhpcy5wcm9ncmFtIix1PWZ1bmN0aW9uKGMsbSl7dGhyb3cgbX0sZj0hMCxkPSIiO2Z1bmN0aW9uIHAoYyl7cmV0dXJuIHQubG9jYXRlRmlsZT90LmxvY2F0ZUZpbGUoYyxkKTpkK2N9dmFyIGc7dHlwZW9mIGRvY3VtZW50PCJ1IiYmZG9jdW1lbnQuY3VycmVudFNjcmlwdCYmKGQ9ZG9jdW1lbnQuY3VycmVudFNjcmlwdC5zcmMpLHImJihkPXIpLGQuaW5kZXhPZigiYmxvYjoiKSE9PTA/ZD1kLnN1YnN0cigwLGQucmVwbGFjZSgvWz8jXS4qLywiIikubGFzdEluZGV4T2YoIi8iKSsxKTpkPSIiO3ZhciBiPXQucHJpbnR8fGNvbnNvbGUubG9nLmJpbmQoY29uc29sZSksaD10LnByaW50RXJyfHxjb25zb2xlLndhcm4uYmluZChjb25zb2xlKTtmb3IocyBpbiBpKWkuaGFzT3duUHJvcGVydHkocykmJih0W3NdPWlbc10pO2k9bnVsbCx0LmFyZ3VtZW50cyYmdC5hcmd1bWVudHMsdC50aGlzUHJvZ3JhbSYmKGE9dC50aGlzUHJvZ3JhbSksdC5xdWl0JiYodT10LnF1aXQpO3ZhciB4O3Qud2FzbUJpbmFyeSYmKHg9dC53YXNtQmluYXJ5KTt2YXIgRT10Lm5vRXhpdFJ1bnRpbWV8fCEwO3R5cGVvZiBXZWJBc3NlbWJseSE9Im9iamVjdCImJmxlKCJubyBuYXRpdmUgd2FzbSBzdXBwb3J0IGRldGVjdGVkIik7dmFyIHYsUj0hMSxQPXR5cGVvZiBUZXh0RGVjb2RlcjwidSI/bmV3IFRleHREZWNvZGVyKCJ1dGY4Iik6dm9pZCAwO2Z1bmN0aW9uIHooYyxtLHkpe2Zvcih2YXIgVD1tK3ksaz1tO2Nba10mJiEoaz49VCk7KSsraztpZihrLW0+MTYmJmMuc3ViYXJyYXkmJlApcmV0dXJuIFAuZGVjb2RlKGMuc3ViYXJyYXkobSxrKSk7Zm9yKHZhciBCPSIiO208azspe3ZhciB3PWNbbSsrXTtpZighKHcmMTI4KSl7Qis9U3RyaW5nLmZyb21DaGFyQ29kZSh3KTtjb250aW51ZX12YXIgTz1jW20rK10mNjM7aWYoKHcmMjI0KT09MTkyKXtCKz1TdHJpbmcuZnJvbUNoYXJDb2RlKCh3JjMxKTw8NnxPKTtjb250aW51ZX12YXIgcT1jW20rK10mNjM7aWYoKHcmMjQwKT09MjI0P3c9KHcmMTUpPDwxMnxPPDw2fHE6dz0odyY3KTw8MTh8Tzw8MTJ8cTw8NnxjW20rK10mNjMsdzw2NTUzNilCKz1TdHJpbmcuZnJvbUNoYXJDb2RlKHcpO2Vsc2V7dmFyIHpvPXctNjU1MzY7Qis9U3RyaW5nLmZyb21DaGFyQ29kZSg1NTI5Nnx6bz4+MTAsNTYzMjB8em8mMTAyMyl9fXJldHVybiBCfWZ1bmN0aW9uIEwoYyxtKXtyZXR1cm4gYz96KGZlLGMsbSk6IiJ9ZnVuY3Rpb24gVihjLG0seSl7Zm9yKHZhciBUPTA7VDxjLmxlbmd0aDsrK1QpRWVbbSsrPj4wXT1jLmNoYXJDb2RlQXQoVCk7eXx8KEVlW20+PjBdPTApfWZ1bmN0aW9uIEcoYyxtKXtyZXR1cm4gYyVtPjAmJihjKz1tLWMlbSksY312YXIgcWUsRWUsZmUsJDtmdW5jdGlvbiBDbyhjKXtxZT1jLHQuSEVBUDg9RWU9bmV3IEludDhBcnJheShjKSx0LkhFQVAxNj1uZXcgSW50MTZBcnJheShjKSx0LkhFQVAzMj0kPW5ldyBJbnQzMkFycmF5KGMpLHQuSEVBUFU4PWZlPW5ldyBVaW50OEFycmF5KGMpLHQuSEVBUFUxNj1uZXcgVWludDE2QXJyYXkoYyksdC5IRUFQVTMyPW5ldyBVaW50MzJBcnJheShjKSx0LkhFQVBGMzI9bmV3IEZsb2F0MzJBcnJheShjKSx0LkhFQVBGNjQ9bmV3IEZsb2F0NjRBcnJheShjKX10LklOSVRJQUxfTUVNT1JZO3ZhciAkcixCbz1bXSxNbz1bXSxPbz1bXSxvbD0wO2Z1bmN0aW9uIGlsKCl7cmV0dXJuIEV8fG9sPjB9ZnVuY3Rpb24gc2woKXtpZih0LnByZVJ1bilmb3IodHlwZW9mIHQucHJlUnVuPT0iZnVuY3Rpb24iJiYodC5wcmVSdW49W3QucHJlUnVuXSk7dC5wcmVSdW4ubGVuZ3RoOyljbCh0LnByZVJ1bi5zaGlmdCgpKTtXcihCbyl9ZnVuY3Rpb24gYWwoKXtXcihNbyl9ZnVuY3Rpb24gdWwoKXtpZih0LnBvc3RSdW4pZm9yKHR5cGVvZiB0LnBvc3RSdW49PSJmdW5jdGlvbiImJih0LnBvc3RSdW49W3QucG9zdFJ1bl0pO3QucG9zdFJ1bi5sZW5ndGg7KWxsKHQucG9zdFJ1bi5zaGlmdCgpKTtXcihPbyl9ZnVuY3Rpb24gY2woYyl7Qm8udW5zaGlmdChjKX1mdW5jdGlvbiBmbChjKXtNby51bnNoaWZ0KGMpfWZ1bmN0aW9uIGxsKGMpe09vLnVuc2hpZnQoYyl9dmFyIFRlPTAsS2U9bnVsbDtmdW5jdGlvbiBkbChjKXtUZSsrLHQubW9uaXRvclJ1bkRlcGVuZGVuY2llcyYmdC5tb25pdG9yUnVuRGVwZW5kZW5jaWVzKFRlKX1mdW5jdGlvbiBobChjKXtpZihUZS0tLHQubW9uaXRvclJ1bkRlcGVuZGVuY2llcyYmdC5tb25pdG9yUnVuRGVwZW5kZW5jaWVzKFRlKSxUZT09MCYmS2Upe3ZhciBtPUtlO0tlPW51bGwsbSgpfX10LnByZWxvYWRlZEltYWdlcz17fSx0LnByZWxvYWRlZEF1ZGlvcz17fTtmdW5jdGlvbiBsZShjKXt0Lm9uQWJvcnQmJnQub25BYm9ydChjKSxjPSJBYm9ydGVkKCIrYysiKSIsaChjKSxSPSEwLGMrPSIuIEJ1aWxkIHdpdGggLXMgQVNTRVJUSU9OUz0xIGZvciBtb3JlIGluZm8uIjt2YXIgbT1uZXcgV2ViQXNzZW1ibHkuUnVudGltZUVycm9yKGMpO3Rocm93IG8obSksbX12YXIgbWw9ImRhdGE6YXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtO2Jhc2U2NCwiO2Z1bmN0aW9uIFVvKGMpe3JldHVybiBjLnN0YXJ0c1dpdGgobWwpfXZhciBZO1k9InRmbGl0ZS1zaW1kLndhc20iLFVvKFkpfHwoWT1wKFkpKTtmdW5jdGlvbiBObyhjKXt0cnl7aWYoYz09WSYmeClyZXR1cm4gbmV3IFVpbnQ4QXJyYXkoeCk7aWYoIWcpdGhyb3ciYm90aCBhc3luYyBhbmQgc3luYyBmZXRjaGluZyBvZiB0aGUgd2FzbSBmYWlsZWQifWNhdGNoKG0pe2xlKG0pfX1mdW5jdGlvbiBwbCgpe3JldHVybiF4JiZmJiZ0eXBlb2YgZmV0Y2g9PSJmdW5jdGlvbiI/ZmV0Y2goWSx7Y3JlZGVudGlhbHM6InNhbWUtb3JpZ2luIn0pLnRoZW4oZnVuY3Rpb24oYyl7aWYoIWMub2spdGhyb3ciZmFpbGVkIHRvIGxvYWQgd2FzbSBiaW5hcnkgZmlsZSBhdCAnIitZKyInIjtyZXR1cm4gYy5hcnJheUJ1ZmZlcigpfSkuY2F0Y2goZnVuY3Rpb24oKXtyZXR1cm4gTm8oWSl9KTpQcm9taXNlLnJlc29sdmUoKS50aGVuKGZ1bmN0aW9uKCl7cmV0dXJuIE5vKFkpfSl9ZnVuY3Rpb24gZ2woKXt2YXIgYz17YTpVbH07ZnVuY3Rpb24gbSh3LE8pe3ZhciBxPXcuZXhwb3J0czt0LmFzbT1xLHY9dC5hc20ucSxDbyh2LmJ1ZmZlciksJHI9dC5hc20uRSxmbCh0LmFzbS5yKSxobCgpfWRsKCk7ZnVuY3Rpb24geSh3KXttKHcuaW5zdGFuY2UpfWZ1bmN0aW9uIFQodyl7cmV0dXJuIHBsKCkudGhlbihmdW5jdGlvbihPKXtyZXR1cm4gV2ViQXNzZW1ibHkuaW5zdGFudGlhdGUoTyxjKX0pLnRoZW4oZnVuY3Rpb24oTyl7cmV0dXJuIE99KS50aGVuKHcsZnVuY3Rpb24oTyl7aCgiZmFpbGVkIHRvIGFzeW5jaHJvbm91c2x5IHByZXBhcmUgd2FzbTogIitPKSxsZShPKX0pfWZ1bmN0aW9uIGsoKXtyZXR1cm4heCYmdHlwZW9mIFdlYkFzc2VtYmx5Lmluc3RhbnRpYXRlU3RyZWFtaW5nPT0iZnVuY3Rpb24iJiYhVW8oWSkmJnR5cGVvZiBmZXRjaD09ImZ1bmN0aW9uIj9mZXRjaChZLHtjcmVkZW50aWFsczoic2FtZS1vcmlnaW4ifSkudGhlbihmdW5jdGlvbih3KXt2YXIgTz1XZWJBc3NlbWJseS5pbnN0YW50aWF0ZVN0cmVhbWluZyh3LGMpO3JldHVybiBPLnRoZW4oeSxmdW5jdGlvbihxKXtyZXR1cm4gaCgid2FzbSBzdHJlYW1pbmcgY29tcGlsZSBmYWlsZWQ6ICIrcSksaCgiZmFsbGluZyBiYWNrIHRvIEFycmF5QnVmZmVyIGluc3RhbnRpYXRpb24iKSxUKHkpfSl9KTpUKHkpfWlmKHQuaW5zdGFudGlhdGVXYXNtKXRyeXt2YXIgQj10Lmluc3RhbnRpYXRlV2FzbShjLG0pO3JldHVybiBCfWNhdGNoKHcpe3JldHVybiBoKCJNb2R1bGUuaW5zdGFudGlhdGVXYXNtIGNhbGxiYWNrIGZhaWxlZCB3aXRoIGVycm9yOiAiK3cpLCExfXJldHVybiBrKCkuY2F0Y2gobykse319ZnVuY3Rpb24gV3IoYyl7Zm9yKDtjLmxlbmd0aD4wOyl7dmFyIG09Yy5zaGlmdCgpO2lmKHR5cGVvZiBtPT0iZnVuY3Rpb24iKXttKHQpO2NvbnRpbnVlfXZhciB5PW0uZnVuYzt0eXBlb2YgeT09Im51bWJlciI/bS5hcmc9PT12b2lkIDA/JHIuZ2V0KHkpKCk6JHIuZ2V0KHkpKG0uYXJnKTp5KG0uYXJnPT09dm9pZCAwP251bGw6bS5hcmcpfX1mdW5jdGlvbiB5bChjLG0seSxUKXtsZSgiQXNzZXJ0aW9uIGZhaWxlZDogIitMKGMpKyIsIGF0OiAiK1ttP0wobSk6InVua25vd24gZmlsZW5hbWUiLHksVD9MKFQpOiJ1bmtub3duIGZ1bmN0aW9uIl0pfWZ1bmN0aW9uIGJsKGMsbSl7bGUoIlRvIHVzZSBkbG9wZW4sIHlvdSBuZWVkIHRvIHVzZSBFbXNjcmlwdGVuJ3MgbGlua2luZyBzdXBwb3J0LCBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2Vtc2NyaXB0ZW4tY29yZS9lbXNjcmlwdGVuL3dpa2kvTGlua2luZyIpfWZ1bmN0aW9uIHhsKGMsbSl7bGUoIlRvIHVzZSBkbG9wZW4sIHlvdSBuZWVkIHRvIHVzZSBFbXNjcmlwdGVuJ3MgbGlua2luZyBzdXBwb3J0LCBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2Vtc2NyaXB0ZW4tY29yZS9lbXNjcmlwdGVuL3dpa2kvTGlua2luZyIpfWZ1bmN0aW9uIF9sKCl7bGUoIiIpfXZhciB6dDt6dD1mdW5jdGlvbigpe3JldHVybiBwZXJmb3JtYW5jZS5ub3coKX07dmFyIHZsPSEwO2Z1bmN0aW9uIEVsKGMpe3JldHVybiAkW0xvKCk+PjJdPWMsY31mdW5jdGlvbiBUbChjLG0pe3ZhciB5O2lmKGM9PT0wKXk9RGF0ZS5ub3coKTtlbHNlIGlmKChjPT09MXx8Yz09PTQpJiZ2bCl5PXp0KCk7ZWxzZSByZXR1cm4gRWwoMjgpLC0xO3JldHVybiAkW20+PjJdPXkvMWUzfDAsJFttKzQ+PjJdPXklMWUzKjFlMyoxZTN8MCwwfWZ1bmN0aW9uIHdsKCl7cmV0dXJuIDIxNDc0ODM2NDh9ZnVuY3Rpb24gQWwoYyxtLHkpe2ZlLmNvcHlXaXRoaW4oYyxtLG0reSl9ZnVuY3Rpb24gSWwoYyl7dHJ5e3JldHVybiB2Lmdyb3coYy1xZS5ieXRlTGVuZ3RoKzY1NTM1Pj4+MTYpLENvKHYuYnVmZmVyKSwxfWNhdGNoe319ZnVuY3Rpb24gU2woYyl7dmFyIG09ZmUubGVuZ3RoO2M9Yz4+PjA7dmFyIHk9MjE0NzQ4MzY0ODtpZihjPnkpcmV0dXJuITE7Zm9yKHZhciBUPTE7VDw9NDtUKj0yKXt2YXIgaz1tKigxKy4yL1QpO2s9TWF0aC5taW4oayxjKzEwMDY2MzI5Nik7dmFyIEI9TWF0aC5taW4oeSxHKE1hdGgubWF4KGMsayksNjU1MzYpKSx3PUlsKEIpO2lmKHcpcmV0dXJuITB9cmV0dXJuITF9ZnVuY3Rpb24gUmwoYyl7Zm9yKHZhciBtPXp0KCk7enQoKS1tPGM7KTt9dmFyIFZyPXt9O2Z1bmN0aW9uIEZsKCl7cmV0dXJuIGF8fCIuL3RoaXMucHJvZ3JhbSJ9ZnVuY3Rpb24gSmUoKXtpZighSmUuc3RyaW5ncyl7dmFyIGM9KHR5cGVvZiBuYXZpZ2F0b3I9PSJvYmplY3QiJiZuYXZpZ2F0b3IubGFuZ3VhZ2VzJiZuYXZpZ2F0b3IubGFuZ3VhZ2VzWzBdfHwiQyIpLnJlcGxhY2UoIi0iLCJfIikrIi5VVEYtOCIsbT17VVNFUjoid2ViX3VzZXIiLExPR05BTUU6IndlYl91c2VyIixQQVRIOiIvIixQV0Q6Ii8iLEhPTUU6Ii9ob21lL3dlYl91c2VyIixMQU5HOmMsXzpGbCgpfTtmb3IodmFyIHkgaW4gVnIpVnJbeV09PT12b2lkIDA/ZGVsZXRlIG1beV06bVt5XT1Wclt5XTt2YXIgVD1bXTtmb3IodmFyIHkgaW4gbSlULnB1c2goeSsiPSIrbVt5XSk7SmUuc3RyaW5ncz1UfXJldHVybiBKZS5zdHJpbmdzfXZhciBHdD17bWFwcGluZ3M6e30sYnVmZmVyczpbbnVsbCxbXSxbXV0scHJpbnRDaGFyOmZ1bmN0aW9uKGMsbSl7dmFyIHk9R3QuYnVmZmVyc1tjXTttPT09MHx8bT09PTEwPygoYz09PTE/YjpoKSh6KHksMCkpLHkubGVuZ3RoPTApOnkucHVzaChtKX0sdmFyYXJnczp2b2lkIDAsZ2V0OmZ1bmN0aW9uKCl7R3QudmFyYXJncys9NDt2YXIgYz0kW0d0LnZhcmFyZ3MtND4+Ml07cmV0dXJuIGN9LGdldFN0cjpmdW5jdGlvbihjKXt2YXIgbT1MKGMpO3JldHVybiBtfSxnZXQ2NDpmdW5jdGlvbihjLG0pe3JldHVybiBjfX07ZnVuY3Rpb24gUGwoYyxtKXt2YXIgeT0wO3JldHVybiBKZSgpLmZvckVhY2goZnVuY3Rpb24oVCxrKXt2YXIgQj1tK3k7JFtjK2sqND4+Ml09QixWKFQsQikseSs9VC5sZW5ndGgrMX0pLDB9ZnVuY3Rpb24ga2woYyxtKXt2YXIgeT1KZSgpOyRbYz4+Ml09eS5sZW5ndGg7dmFyIFQ9MDtyZXR1cm4geS5mb3JFYWNoKGZ1bmN0aW9uKGspe1QrPWsubGVuZ3RoKzF9KSwkW20+PjJdPVQsMH1mdW5jdGlvbiBEbChjKXtMbChjKX1mdW5jdGlvbiBDbChjKXtyZXR1cm4gMH1mdW5jdGlvbiBCbChjLG0seSxULGspe31mdW5jdGlvbiBNbChjLG0seSxUKXtmb3IodmFyIGs9MCxCPTA7Qjx5O0IrKyl7Zm9yKHZhciB3PSRbbStCKjg+PjJdLE89JFttKyhCKjgrNCk+PjJdLHE9MDtxPE87cSsrKUd0LnByaW50Q2hhcihjLGZlW3crcV0pO2srPU99cmV0dXJuICRbVD4+Ml09aywwfWZ1bmN0aW9uIE9sKCl7aWYodHlwZW9mIGNyeXB0bz09Im9iamVjdCImJnR5cGVvZiBjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzPT0iZnVuY3Rpb24iKXt2YXIgYz1uZXcgVWludDhBcnJheSgxKTtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gY3J5cHRvLmdldFJhbmRvbVZhbHVlcyhjKSxjWzBdfX1lbHNlIHJldHVybiBmdW5jdGlvbigpe2xlKCJyYW5kb21EZXZpY2UiKX19ZnVuY3Rpb24gJHQoYyxtKXskdC5yYW5kb21EZXZpY2V8fCgkdC5yYW5kb21EZXZpY2U9T2woKSk7Zm9yKHZhciB5PTA7eTxtO3krKylFZVtjK3k+PjBdPSR0LnJhbmRvbURldmljZSgpO3JldHVybiAwfXZhciBVbD17YTp5bCxlOmJsLGQ6eGwsYjpfbCxuOlRsLGg6d2wsbDpBbCxtOlNsLHA6UmwsZjpQbCxnOmtsLGo6RGwsaTpDbCxrOkJsLGM6TWwsbzokdH07Z2woKSx0Ll9fX3dhc21fY2FsbF9jdG9ycz1mdW5jdGlvbigpe3JldHVybih0Ll9fX3dhc21fY2FsbF9jdG9ycz10LmFzbS5yKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LHQuX2dldE1vZGVsQnVmZmVyTWVtb3J5T2Zmc2V0PWZ1bmN0aW9uKCl7cmV0dXJuKHQuX2dldE1vZGVsQnVmZmVyTWVtb3J5T2Zmc2V0PXQuYXNtLnMpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sdC5fZ2V0SW5wdXRNZW1vcnlPZmZzZXQ9ZnVuY3Rpb24oKXtyZXR1cm4odC5fZ2V0SW5wdXRNZW1vcnlPZmZzZXQ9dC5hc20udCkuYXBwbHkobnVsbCxhcmd1bWVudHMpfSx0Ll9nZXRJbnB1dEhlaWdodD1mdW5jdGlvbigpe3JldHVybih0Ll9nZXRJbnB1dEhlaWdodD10LmFzbS51KS5hcHBseShudWxsLGFyZ3VtZW50cyl9LHQuX2dldElucHV0V2lkdGg9ZnVuY3Rpb24oKXtyZXR1cm4odC5fZ2V0SW5wdXRXaWR0aD10LmFzbS52KS5hcHBseShudWxsLGFyZ3VtZW50cyl9LHQuX2dldElucHV0Q2hhbm5lbENvdW50PWZ1bmN0aW9uKCl7cmV0dXJuKHQuX2dldElucHV0Q2hhbm5lbENvdW50PXQuYXNtLncpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sdC5fZ2V0T3V0cHV0TWVtb3J5T2Zmc2V0PWZ1bmN0aW9uKCl7cmV0dXJuKHQuX2dldE91dHB1dE1lbW9yeU9mZnNldD10LmFzbS54KS5hcHBseShudWxsLGFyZ3VtZW50cyl9LHQuX2dldE91dHB1dEhlaWdodD1mdW5jdGlvbigpe3JldHVybih0Ll9nZXRPdXRwdXRIZWlnaHQ9dC5hc20ueSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfSx0Ll9nZXRPdXRwdXRXaWR0aD1mdW5jdGlvbigpe3JldHVybih0Ll9nZXRPdXRwdXRXaWR0aD10LmFzbS56KS5hcHBseShudWxsLGFyZ3VtZW50cyl9LHQuX2dldE91dHB1dENoYW5uZWxDb3VudD1mdW5jdGlvbigpe3JldHVybih0Ll9nZXRPdXRwdXRDaGFubmVsQ291bnQ9dC5hc20uQSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfSx0Ll9sb2FkTW9kZWw9ZnVuY3Rpb24oKXtyZXR1cm4odC5fbG9hZE1vZGVsPXQuYXNtLkIpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sdC5fcnVuSW5mZXJlbmNlPWZ1bmN0aW9uKCl7cmV0dXJuKHQuX3J1bkluZmVyZW5jZT10LmFzbS5DKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LHQuX2lzR1BVRW5hYmxlZD1mdW5jdGlvbigpe3JldHVybih0Ll9pc0dQVUVuYWJsZWQ9dC5hc20uRCkuYXBwbHkobnVsbCxhcmd1bWVudHMpfTt2YXIgTG89dC5fX19lcnJub19sb2NhdGlvbj1mdW5jdGlvbigpe3JldHVybihMbz10Ll9fX2Vycm5vX2xvY2F0aW9uPXQuYXNtLkYpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sV3Q7ZnVuY3Rpb24gTmwoYyl7dGhpcy5uYW1lPSJFeGl0U3RhdHVzIix0aGlzLm1lc3NhZ2U9IlByb2dyYW0gdGVybWluYXRlZCB3aXRoIGV4aXQoIitjKyIpIix0aGlzLnN0YXR1cz1jfUtlPWZ1bmN0aW9uIGMoKXtXdHx8SHIoKSxXdHx8KEtlPWMpfTtmdW5jdGlvbiBIcihjKXtpZihUZT4wfHwoc2woKSxUZT4wKSlyZXR1cm47ZnVuY3Rpb24gbSgpe1d0fHwoV3Q9ITAsdC5jYWxsZWRSdW49ITAsIVImJihhbCgpLG4odCksdC5vblJ1bnRpbWVJbml0aWFsaXplZCYmdC5vblJ1bnRpbWVJbml0aWFsaXplZCgpLHVsKCkpKX10LnNldFN0YXR1cz8odC5zZXRTdGF0dXMoIlJ1bm5pbmcuLi4iKSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7c2V0VGltZW91dChmdW5jdGlvbigpe3Quc2V0U3RhdHVzKCIiKX0sMSksbSgpfSwxKSk6bSgpfXQucnVuPUhyO2Z1bmN0aW9uIExsKGMsbSl7emwoYyl9ZnVuY3Rpb24gemwoYyl7aWwoKXx8KHQub25FeGl0JiZ0Lm9uRXhpdChjKSxSPSEwKSx1KGMsbmV3IE5sKGMpKX1pZih0LnByZUluaXQpZm9yKHR5cGVvZiB0LnByZUluaXQ9PSJmdW5jdGlvbiImJih0LnByZUluaXQ9W3QucHJlSW5pdF0pO3QucHJlSW5pdC5sZW5ndGg+MDspdC5wcmVJbml0LnBvcCgpKCk7cmV0dXJuIEhyKCksZS5yZWFkeX19KCk7Y2xhc3Mgb3N7Y29uc3RydWN0b3IoKXtsKHRoaXMsInNlbGVjdGVkVEZMaXRlIik7bCh0aGlzLCJpc1NJTURTdXBwb3J0ZWQiLCExKTtsKHRoaXMsImlzVGhyZWFkc1N1cHBvcnRlZCIsITEpO2wodGhpcywiaW5wdXRXaWR0aCIsMCk7bCh0aGlzLCJpbnB1dEhlaWdodCIsMCk7bCh0aGlzLCJpbnB1dENoYW5uZWxDb3VudCIsMCk7bCh0aGlzLCJpbnB1dE1lbW9yeU9mZnNldCIsMCk7bCh0aGlzLCJvdXRwdXRXaWR0aCIsMCk7bCh0aGlzLCJvdXRwdXRIZWlnaHQiLDApO2wodGhpcywib3V0cHV0Q2hhbm5lbENvdW50IiwwKTtsKHRoaXMsIm91dHB1dE1lbW9yeU9mZnNldCIsMCl9fWNvbnN0IGlzPSJodHRwczovL2Qzb3Bxam1xenhmMDU3LmNsb3VkZnJvbnQubmV0L3ZvbmFnZS10ZW5zb3JmbG93LXdhc20vdGZsaXRlLXNpbWQtd2FzbS8xLjEuMy8iLHNzPSJodHRwczovL2Qzb3Bxam1xenhmMDU3LmNsb3VkZnJvbnQubmV0L21sL3NlbGZpZV9zZWdtZW50YXRpb24vNC4wLjAvIjthc3luYyBmdW5jdGlvbiBhcyhyPWlzLGU9c3Mpe2xldCB0PW5ldyBvczt2YXIgbj1uZXcgUHJvbWlzZShmdW5jdGlvbihvLGkpe2FzeW5jIGZ1bmN0aW9uIHMoKXtyZXR1cm4gbnMoe2xvY2F0ZUZpbGU6ZnVuY3Rpb24oZil7cmV0dXJuIHIrZn19KX1hc3luYyBmdW5jdGlvbiBhKHUpe3JldHVybiBuZXcgUHJvbWlzZShhc3luYyhmLGQpPT57Y29uc3QgcD11O2lmKHR5cGVvZiBwPiJ1IilyZXR1cm4gZCgiVEZMaXRlIGJhY2tlbmQgdW5hdmFpbGFibGU6IHdhc21TaW1kIik7Y29uc3QgZz0ic2VsZmllX3NlZ21lbnRhdGlvbl9sYW5kc2NhcGUiO2NvbnNvbGUubG9nKCJMb2FkaW5nIHRmbGl0ZSBtb2RlbDoiLGcpO2xldCBiPWUrYCR7Z30udGZsaXRlYDtjb25zb2xlLmxvZygiVEZMaXRlIG1vZGVsVXJsOiAiK2IpO3RyeXtjb25zdCB4PWF3YWl0KGF3YWl0IGZldGNoKGIpKS5hcnJheUJ1ZmZlcigpO2NvbnNvbGUubG9nKCJNb2RlbCBidWZmZXIgc2l6ZToiLHguYnl0ZUxlbmd0aCk7Y29uc3QgRT1wLl9nZXRNb2RlbEJ1ZmZlck1lbW9yeU9mZnNldCgpO2NvbnNvbGUubG9nKCJNb2RlbCBidWZmZXIgbWVtb3J5IG9mZnNldDoiLEUpLGNvbnNvbGUubG9nKCJMb2FkaW5nIG1vZGVsIGJ1ZmZlci4uLiIpLHAuSEVBUFU4LnNldChuZXcgVWludDhBcnJheSh4KSxFKTtjb25zdCB2PXAuX2xvYWRNb2RlbCh4LmJ5dGVMZW5ndGgpO2lmKGNvbnNvbGUubG9nKCJMb2FkIG1vZGVsIHJlc3VsdDoiLHYpLHYhPT0wKXtkKCJDYW5ub3QgbG9hZCBtb2RlbCIpO3JldHVybn10LmlucHV0V2lkdGg9cC5fZ2V0SW5wdXRXaWR0aCgpLHQuaW5wdXRIZWlnaHQ9cC5fZ2V0SW5wdXRIZWlnaHQoKSx0LmlucHV0Q2hhbm5lbENvdW50PXAuX2dldElucHV0Q2hhbm5lbENvdW50KCksdC5pbnB1dE1lbW9yeU9mZnNldD1wLl9nZXRJbnB1dE1lbW9yeU9mZnNldCgpLGNvbnNvbGUubG9nKCJJbnB1dCBtZW1vcnkgb2Zmc2V0OiIsdC5pbnB1dE1lbW9yeU9mZnNldCksY29uc29sZS5sb2coIklucHV0IGhlaWdodDoiLHQuaW5wdXRIZWlnaHQpLGNvbnNvbGUubG9nKCJJbnB1dCB3aWR0aDoiLHQuaW5wdXRXaWR0aCksY29uc29sZS5sb2coIklucHV0IGNoYW5uZWxzOiIsdC5pbnB1dENoYW5uZWxDb3VudCksdC5vdXRwdXRNZW1vcnlPZmZzZXQ9cC5fZ2V0T3V0cHV0TWVtb3J5T2Zmc2V0KCksdC5vdXRwdXRXaWR0aD1wLl9nZXRPdXRwdXRXaWR0aCgpLHQub3V0cHV0SGVpZ2h0PXAuX2dldE91dHB1dEhlaWdodCgpLHQub3V0cHV0Q2hhbm5lbENvdW50PXAuX2dldE91dHB1dENoYW5uZWxDb3VudCgpLGNvbnNvbGUubG9nKCJPdXRwdXQgbWVtb3J5IG9mZnNldDoiLHQub3V0cHV0TWVtb3J5T2Zmc2V0KSxjb25zb2xlLmxvZygiT3V0cHV0IGhlaWdodDoiLHQub3V0cHV0SGVpZ2h0KSxjb25zb2xlLmxvZygiT3V0cHV0IHdpZHRoOiIsdC5vdXRwdXRXaWR0aCksY29uc29sZS5sb2coIk91dHB1dCBjaGFubmVsczoiLHQub3V0cHV0Q2hhbm5lbENvdW50KSx0LnNlbGVjdGVkVEZMaXRlPXB9Y2F0Y2goaCl7ZChoKTtyZXR1cm59ZigpfSl9cygpLnRoZW4odT0+e2lmKHU9PT1udWxsKXRocm93IGNvbnNvbGUuZXJyb3IoImxvYWRURkxpdGUgbnVsbCIpLCJsb2FkVEZMaXRlIG51bGwiO2EodSkudGhlbihmPT57byh0KX0pLmNhdGNoKGY9Pntjb25zb2xlLmVycm9yKCJsb2FkVEZMaXRlTW9kZWwgZXJyb3IiKSxpKCJsb2FkVEZMaXRlTW9kZWwgZXJyb3IiKX0pfSkuY2F0Y2godT0+e2NvbnNvbGUuZXJyb3IoImxvYWRURkxpdGUgZXJyb3I6Iix1KSxpKCJsb2FkVEZMaXRlIGVycm9yOiIrdSl9KX0pO3JldHVybiBufWNsYXNzIHVze2NvbnN0cnVjdG9yKCl7bCh0aGlzLCJjYW52YXMiLG5ldyBPZmZzY3JlZW5DYW52YXMoMCwwKSk7bCh0aGlzLCJjb250ZXh0Iix0aGlzLmNhbnZhcy5nZXRDb250ZXh0KCIyZCIse3dpbGxSZWFkRnJlcXVlbnRseTohMH0pKTtsKHRoaXMsInBpeGVsQ291bnQiLDApO2wodGhpcywiaW5wdXRPZmZzZXQiLDApO2wodGhpcywib3V0cHV0T2Zmc2V0IiwwKTtsKHRoaXMsImluZm9zIik7bCh0aGlzLCJtYXNrIil9YXN5bmMgaW5pdChlLHQpe2F3YWl0IHRoaXMuaW5pdFdhc20oZSx0KSx0aGlzLmluZm9zJiYodGhpcy5jYW52YXMud2lkdGg9dGhpcy5pbmZvcy5pbnB1dFdpZHRoLHRoaXMuY2FudmFzLmhlaWdodD10aGlzLmluZm9zLmlucHV0SGVpZ2h0LHRoaXMucGl4ZWxDb3VudD10aGlzLmluZm9zLmlucHV0V2lkdGgqdGhpcy5pbmZvcy5pbnB1dEhlaWdodCx0aGlzLm1hc2s9bmV3IEltYWdlRGF0YSh0aGlzLmluZm9zLmlucHV0V2lkdGgsdGhpcy5pbmZvcy5pbnB1dEhlaWdodCksdGhpcy5pbnB1dE9mZnNldD10aGlzLmluZm9zLmlucHV0TWVtb3J5T2Zmc2V0LzQsdGhpcy5vdXRwdXRPZmZzZXQ9dGhpcy5pbmZvcy5vdXRwdXRNZW1vcnlPZmZzZXQvNCl9YXN5bmMgaW5pdFdhc20oZSx0KXt0aGlzLmluZm9zPWF3YWl0IGFzKGUsdCl9Z2V0T3V0cHV0RGltZW5zaW9ucygpe3ZhciBlLHQsbixvO3JldHVybnt3aWR0aDoodD0oZT10aGlzLmluZm9zKT09bnVsbD92b2lkIDA6ZS5vdXRwdXRXaWR0aCkhPW51bGw/dDowLGhlaWdodDoobz0obj10aGlzLmluZm9zKT09bnVsbD92b2lkIDA6bi5vdXRwdXRIZWlnaHQpIT1udWxsP286MH19YXN5bmMgcHJvY2VzcyhlKXtpZighdGhpcy5tYXNrfHwhdGhpcy5pbmZvcylyZXR1cm47Y29uc3QgdD10aGlzLmluZm9zLmlucHV0V2lkdGgsbj10aGlzLmluZm9zLmlucHV0SGVpZ2h0O3RoaXMuY29udGV4dC5kcmF3SW1hZ2UoZSwwLDAsZS53aWR0aCxlLmhlaWdodCwwLDAsdCxuKTtjb25zdCBvPXRoaXMuY29udGV4dC5nZXRJbWFnZURhdGEoMCwwLHQsbiksaT10aGlzLmluZm9zLnNlbGVjdGVkVEZMaXRlLkhFQVBGMzI7Zm9yKGxldCBzPTA7czx0aGlzLnBpeGVsQ291bnQ7cysrKXtjb25zdCBhPXRoaXMuaW5wdXRPZmZzZXQrcyozO2lbYV09by5kYXRhW3MqNF0vMjU1LGlbYSsxXT1vLmRhdGFbcyo0KzFdLzI1NSxpW2ErMl09by5kYXRhW3MqNCsyXS8yNTV9dGhpcy5pbmZvcy5zZWxlY3RlZFRGTGl0ZS5fcnVuSW5mZXJlbmNlKCk7Zm9yKGxldCBzPTA7czx0aGlzLnBpeGVsQ291bnQ7cysrKXtjb25zdCBhPXRoaXMuaW5mb3Muc2VsZWN0ZWRURkxpdGUuSEVBUEYzMlt0aGlzLm91dHB1dE9mZnNldCtzXTt0aGlzLm1hc2suZGF0YVtzKjRdPXRoaXMubWFzay5kYXRhW3MqNCszXT0yNTUqYX1yZXR1cm4gY3JlYXRlSW1hZ2VCaXRtYXAodGhpcy5tYXNrKX1pc0dwdVN1cHBvcnRlZCgpe3ZhciBlLHQsbjtyZXR1cm4obj0odD0oZT10aGlzLmluZm9zKT09bnVsbD92b2lkIDA6ZS5zZWxlY3RlZFRGTGl0ZSk9PW51bGw/dm9pZCAwOnQuX2lzR1BVRW5hYmxlZCgpKSE9bnVsbD9uOiExfX1mdW5jdGlvbiBjcygpe3JldHVybiBuZXcgT2Zmc2NyZWVuQ2FudmFzKDAsMCkuZ2V0Q29udGV4dCgid2ViZ2wyIix7ZmFpbElmTWFqb3JQZXJmb3JtYW5jZUNhdmVhdDohMH0pP3tzdXBwb3J0ZWQ6ITB9OntzdXBwb3J0ZWQ6ITEsbWVzc2FnZToiWW91ciBoYXJkd2FyZSBkb2VzIG5vdCBwZXJmb3JtIGdvb2QgZW5vdWdoIHRvIHJ1biB0aGUgbGlicmFyeSBlZmZpY2llbnRseSJ9fWNsYXNzIG5ye2NvbnN0cnVjdG9yKCl7bCh0aGlzLCJjYW52YXMiKTtsKHRoaXMsImNvbnRleHQiKTtjb25zdCBlPW5ldyBPZmZzY3JlZW5DYW52YXMoMCwwKSx0PWUuZ2V0Q29udGV4dCgiMmQiKTtpZighdCl0aHJvdyJGYWlsIHRvIHJldHJpZXZlIHdlYmdsMiBjb250ZXh0Ijt0aGlzLmNhbnZhcz1lLHRoaXMuY29udGV4dD10fXNldEZsaWNrZXJpbmdPcHRpb25zKGUpe31lbmFibGVQb3N0UHJvY2Vzc2luZygpe31kaXNhYmxlUG9zdFByb2Nlc3NpbmcoKXt9YXN5bmMgcHJvZmlsZVdlYmdsKGUpe3JldHVybltdfWFzeW5jIHJlbmRlcihlLHQpe3JldHVybiB0aGlzLmNhbnZhc31yZXNpemVDYW52YXMoZSl7Y29uc3R7d2lkdGg6dCxoZWlnaHQ6bn09ZTt0aGlzLmNhbnZhcy53aWR0aD10LHRoaXMuY2FudmFzLmhlaWdodD1ufXJlbmRlclNpbGhvdWV0dGUoZSx0LG49Im5vbmUiKXtjb25zdHt3aWR0aDpvLGhlaWdodDppfT1lO3RoaXMuY29udGV4dC5zYXZlKCksdGhpcy5jb250ZXh0LmRyYXdJbWFnZSh0LDAsMCx0LndpZHRoLHQuaGVpZ2h0LDAsMCxvLGkpLHRoaXMuY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb249InNvdXJjZS1pbiIsdGhpcy5jb250ZXh0LmZpbHRlcj1uLHRoaXMuY29udGV4dC5kcmF3SW1hZ2UoZSwwLDAsbyxpLDAsMCx0aGlzLmNhbnZhcy53aWR0aCx0aGlzLmNhbnZhcy5oZWlnaHQpLHRoaXMuY29udGV4dC5yZXN0b3JlKCl9fWNsYXNzIGZzIGV4dGVuZHMgbnJ7Y29uc3RydWN0b3IoZSl7c3VwZXIoKSx0aGlzLnJhZGl1cz1lfWFzeW5jIHJlbmRlcihlLHQpe3JldHVybiBzdXBlci5yZXNpemVDYW52YXMoZSksdGhpcy5yZW5kZXJTaWxob3VldHRlKGUsdCksdGhpcy5jb250ZXh0LnNhdmUoKSx0aGlzLmNvbnRleHQuZmlsdGVyPWBibHVyKCR7dGhpcy5yYWRpdXN9cHgpYCx0aGlzLmNvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uPSJkZXN0aW5hdGlvbi1vdmVyIix0aGlzLmNvbnRleHQuZHJhd0ltYWdlKGUsMCwwLGUud2lkdGgsZS5oZWlnaHQpLHRoaXMuY29udGV4dC5yZXN0b3JlKCksc3VwZXIucmVuZGVyKGUsdCl9fWNsYXNzIGxzIGV4dGVuZHMgbnJ7Y29uc3RydWN0b3IoZSl7c3VwZXIoKSx0aGlzLnJhZGl1cz1lfWFzeW5jIHJlbmRlcihlLHQpe3JldHVybiBzdXBlci5yZXNpemVDYW52YXMoZSksdGhpcy5yZW5kZXJTaWxob3VldHRlKGUsdCxgYmx1cigke3RoaXMucmFkaXVzfXB4KWApLHRoaXMuY29udGV4dC5zYXZlKCksdGhpcy5jb250ZXh0LmZpbHRlcj0ibm9uZSIsdGhpcy5jb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbj0iZGVzdGluYXRpb24tb3ZlciIsdGhpcy5jb250ZXh0LmRyYXdJbWFnZShlLDAsMCxlLndpZHRoLGUuaGVpZ2h0KSx0aGlzLmNvbnRleHQucmVzdG9yZSgpLHN1cGVyLnJlbmRlcihlLHQpfX1jbGFzcyBkcyBleHRlbmRzIG5ye2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKTtsKHRoaXMsImJhY2tncm91bmRJbWFnZSIpfXNldEJhY2tncm91bmRJbWFnZSh0KXt0aGlzLmJhY2tncm91bmRJbWFnZT10fWFzeW5jIHJlbmRlcih0LG4pe3JldHVybiBzdXBlci5yZXNpemVDYW52YXModCksdGhpcy5yZW5kZXJTaWxob3VldHRlKHQsbiksdGhpcy5iYWNrZ3JvdW5kSW1hZ2UmJih0aGlzLmNvbnRleHQuc2F2ZSgpLHRoaXMuY29udGV4dC5maWx0ZXI9Im5vbmUiLHRoaXMuY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb249ImRlc3RpbmF0aW9uLW92ZXIiLHRoaXMuY29udGV4dC5kcmF3SW1hZ2UodGhpcy5iYWNrZ3JvdW5kSW1hZ2UsMCwwLHRoaXMuYmFja2dyb3VuZEltYWdlLndpZHRoLHRoaXMuYmFja2dyb3VuZEltYWdlLmhlaWdodCwwLDAsdC53aWR0aCx0LmhlaWdodCksdGhpcy5jb250ZXh0LnJlc3RvcmUoKSksc3VwZXIucmVuZGVyKHQsbil9fS8qIEBsaWNlbnNlIHR3Z2wuanMgNS41LjEgQ29weXJpZ2h0IChjKSAyMDE1LCBHcmVnZyBUYXZhcmVzIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCkF2YWlsYWJsZSB2aWEgdGhlIE1JVCBsaWNlbnNlLgpzZWU6IGh0dHA6Ly9naXRodWIuY29tL2dyZWdnbWFuL3R3Z2wuanMgZm9yIGRldGFpbHMgKi9jb25zdCBvcj01MTIwLCRlPTUxMjEsaXI9NTEyMixzcj01MTIzLGFyPTUxMjQsdXI9NTEyNSxjcj01MTI2LGhzPTMyODE5LG1zPTMyODIwLHBzPTMzNjM1LGdzPTUxMzEseXM9MzM2NDAsYnM9MzU4OTkseHM9MzU5MDIsX3M9MzYyNjksdnM9MzQwNDIsbG49e307e2NvbnN0IHI9bG47cltvcl09SW50OEFycmF5LHJbJGVdPVVpbnQ4QXJyYXkscltpcl09SW50MTZBcnJheSxyW3NyXT1VaW50MTZBcnJheSxyW2FyXT1JbnQzMkFycmF5LHJbdXJdPVVpbnQzMkFycmF5LHJbY3JdPUZsb2F0MzJBcnJheSxyW2hzXT1VaW50MTZBcnJheSxyW21zXT1VaW50MTZBcnJheSxyW3BzXT1VaW50MTZBcnJheSxyW2dzXT1VaW50MTZBcnJheSxyW3lzXT1VaW50MzJBcnJheSxyW2JzXT1VaW50MzJBcnJheSxyW3hzXT1VaW50MzJBcnJheSxyW19zXT1VaW50MzJBcnJheSxyW3ZzXT1VaW50MzJBcnJheX1mdW5jdGlvbiBmcihyKXtpZihyIGluc3RhbmNlb2YgSW50OEFycmF5KXJldHVybiBvcjtpZihyIGluc3RhbmNlb2YgVWludDhBcnJheXx8ciBpbnN0YW5jZW9mIFVpbnQ4Q2xhbXBlZEFycmF5KXJldHVybiAkZTtpZihyIGluc3RhbmNlb2YgSW50MTZBcnJheSlyZXR1cm4gaXI7aWYociBpbnN0YW5jZW9mIFVpbnQxNkFycmF5KXJldHVybiBzcjtpZihyIGluc3RhbmNlb2YgSW50MzJBcnJheSlyZXR1cm4gYXI7aWYociBpbnN0YW5jZW9mIFVpbnQzMkFycmF5KXJldHVybiB1cjtpZihyIGluc3RhbmNlb2YgRmxvYXQzMkFycmF5KXJldHVybiBjcjt0aHJvdyBuZXcgRXJyb3IoInVuc3VwcG9ydGVkIHR5cGVkIGFycmF5IHR5cGUiKX1mdW5jdGlvbiBkbihyKXtpZihyPT09SW50OEFycmF5KXJldHVybiBvcjtpZihyPT09VWludDhBcnJheXx8cj09PVVpbnQ4Q2xhbXBlZEFycmF5KXJldHVybiAkZTtpZihyPT09SW50MTZBcnJheSlyZXR1cm4gaXI7aWYocj09PVVpbnQxNkFycmF5KXJldHVybiBzcjtpZihyPT09SW50MzJBcnJheSlyZXR1cm4gYXI7aWYocj09PVVpbnQzMkFycmF5KXJldHVybiB1cjtpZihyPT09RmxvYXQzMkFycmF5KXJldHVybiBjcjt0aHJvdyBuZXcgRXJyb3IoInVuc3VwcG9ydGVkIHR5cGVkIGFycmF5IHR5cGUiKX1mdW5jdGlvbiBobihyKXtjb25zdCBlPWxuW3JdO2lmKCFlKXRocm93IG5ldyBFcnJvcigidW5rbm93biBnbCB0eXBlIik7cmV0dXJuIGV9Y29uc3QgeXQ9dHlwZW9mIFNoYXJlZEFycmF5QnVmZmVyPCJ1Ij9mdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5idWZmZXImJihlLmJ1ZmZlciBpbnN0YW5jZW9mIEFycmF5QnVmZmVyfHxlLmJ1ZmZlciBpbnN0YW5jZW9mIFNoYXJlZEFycmF5QnVmZmVyKX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuYnVmZmVyJiZlLmJ1ZmZlciBpbnN0YW5jZW9mIEFycmF5QnVmZmVyfTtmdW5jdGlvbiBtbiguLi5yKXtjb25zb2xlLmVycm9yKC4uLnIpfWNvbnN0IHBuPW5ldyBNYXA7ZnVuY3Rpb24gYnQocixlKXtpZighcnx8dHlwZW9mIHIhPSJvYmplY3QiKXJldHVybiExO2xldCB0PXBuLmdldChlKTt0fHwodD1uZXcgV2Vha01hcCxwbi5zZXQoZSx0KSk7bGV0IG49dC5nZXQocik7aWYobj09PXZvaWQgMCl7Y29uc3Qgbz1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwocik7bj1vLnN1YnN0cmluZyg4LG8ubGVuZ3RoLTEpPT09ZSx0LnNldChyLG4pfXJldHVybiBufWZ1bmN0aW9uIEVzKHIsZSl7cmV0dXJuIHR5cGVvZiBXZWJHTEJ1ZmZlcjwidSImJmJ0KGUsIldlYkdMQnVmZmVyIil9ZnVuY3Rpb24gVHMocixlKXtyZXR1cm4gdHlwZW9mIFdlYkdMUmVuZGVyYnVmZmVyPCJ1IiYmYnQoZSwiV2ViR0xSZW5kZXJidWZmZXIiKX1mdW5jdGlvbiBscihyLGUpe3JldHVybiB0eXBlb2YgV2ViR0xUZXh0dXJlPCJ1IiYmYnQoZSwiV2ViR0xUZXh0dXJlIil9ZnVuY3Rpb24gd3MocixlKXtyZXR1cm4gdHlwZW9mIFdlYkdMU2FtcGxlcjwidSImJmJ0KGUsIldlYkdMU2FtcGxlciIpfWNvbnN0IGduPTM1MDQ0LGdlPTM0OTYyLEFzPTM0OTYzLElzPTM0NjYwLFNzPTUxMjAsUnM9NTEyMSxGcz01MTIyLFBzPTUxMjMsa3M9NTEyNCxEcz01MTI1LHluPTUxMjYsYm49e2F0dHJpYlByZWZpeDoiIn07ZnVuY3Rpb24gQ3MocixlLHQsbixvKXtyLmJpbmRCdWZmZXIoZSx0KSxyLmJ1ZmZlckRhdGEoZSxuLG98fGduKX1mdW5jdGlvbiB4bihyLGUsdCxuKXtpZihFcyhyLGUpKXJldHVybiBlO3Q9dHx8Z2U7Y29uc3Qgbz1yLmNyZWF0ZUJ1ZmZlcigpO3JldHVybiBDcyhyLHQsbyxlLG4pLG99ZnVuY3Rpb24gX24ocil7cmV0dXJuIHI9PT0iaW5kaWNlcyJ9ZnVuY3Rpb24gQnMocil7cmV0dXJuIHI9PT1JbnQ4QXJyYXl8fHI9PT1VaW50OEFycmF5fWZ1bmN0aW9uIE1zKHIpe3JldHVybiByLmxlbmd0aD9yOnIuZGF0YX1jb25zdCBPcz0vY29vcmR8dGV4dHVyZS9pLFVzPS9jb2xvcnxjb2xvdXIvaTtmdW5jdGlvbiBOcyhyLGUpe2xldCB0O2lmKE9zLnRlc3Qocik/dD0yOlVzLnRlc3Qocik/dD00OnQ9MyxlJXQ+MCl0aHJvdyBuZXcgRXJyb3IoYENhbiBub3QgZ3Vlc3MgbnVtQ29tcG9uZW50cyBmb3IgYXR0cmlidXRlICcke3J9Jy4gVHJpZWQgJHt0fSBidXQgJHtlfSB2YWx1ZXMgaXMgbm90IGV2ZW5seSBkaXZpc2libGUgYnkgJHt0fS4gWW91IHNob3VsZCBzcGVjaWZ5IGl0LmApO3JldHVybiB0fWZ1bmN0aW9uIExzKHIsZSx0KXtyZXR1cm4gci5udW1Db21wb25lbnRzfHxyLnNpemV8fE5zKGUsdHx8TXMocikubGVuZ3RoKX1mdW5jdGlvbiB2bihyLGUpe2lmKHl0KHIpKXJldHVybiByO2lmKHl0KHIuZGF0YSkpcmV0dXJuIHIuZGF0YTtBcnJheS5pc0FycmF5KHIpJiYocj17ZGF0YTpyfSk7bGV0IHQ9ci50eXBlP2RyKHIudHlwZSk6dm9pZCAwO3JldHVybiB0fHwoX24oZSk/dD1VaW50MTZBcnJheTp0PUZsb2F0MzJBcnJheSksbmV3IHQoci5kYXRhKX1mdW5jdGlvbiB6cyhyKXtyZXR1cm4gdHlwZW9mIHI9PSJudW1iZXIiP3I6cj9kbihyKTp5bn1mdW5jdGlvbiBkcihyKXtyZXR1cm4gdHlwZW9mIHI9PSJudW1iZXIiP2huKHIpOnJ8fEZsb2F0MzJBcnJheX1mdW5jdGlvbiBHcyhyLGUpe3JldHVybntidWZmZXI6ZS5idWZmZXIsbnVtVmFsdWVzOjIqMyo0LHR5cGU6enMoZS50eXBlKSxhcnJheVR5cGU6ZHIoZS50eXBlKX19ZnVuY3Rpb24gJHMocixlKXtjb25zdCB0PWUuZGF0YXx8ZSxuPWRyKGUudHlwZSksbz10Km4uQllURVNfUEVSX0VMRU1FTlQsaT1yLmNyZWF0ZUJ1ZmZlcigpO3JldHVybiByLmJpbmRCdWZmZXIoZ2UsaSksci5idWZmZXJEYXRhKGdlLG8sZS5kcmF3VHlwZXx8Z24pLHtidWZmZXI6aSxudW1WYWx1ZXM6dCx0eXBlOmRuKG4pLGFycmF5VHlwZTpufX1mdW5jdGlvbiBXcyhyLGUsdCl7Y29uc3Qgbj12bihlLHQpO3JldHVybnthcnJheVR5cGU6bi5jb25zdHJ1Y3RvcixidWZmZXI6eG4ocixuLHZvaWQgMCxlLmRyYXdUeXBlKSx0eXBlOmZyKG4pLG51bVZhbHVlczowfX1mdW5jdGlvbiBWcyhyLGUpe2NvbnN0IHQ9e307cmV0dXJuIE9iamVjdC5rZXlzKGUpLmZvckVhY2goZnVuY3Rpb24obil7aWYoIV9uKG4pKXtjb25zdCBvPWVbbl0saT1vLmF0dHJpYnx8by5uYW1lfHxvLmF0dHJpYk5hbWV8fGJuLmF0dHJpYlByZWZpeCtuO2lmKG8udmFsdWUpe2lmKCFBcnJheS5pc0FycmF5KG8udmFsdWUpJiYheXQoby52YWx1ZSkpdGhyb3cgbmV3IEVycm9yKCJhcnJheS52YWx1ZSBpcyBub3QgYXJyYXkgb3IgdHlwZWRhcnJheSIpO3RbaV09e3ZhbHVlOm8udmFsdWV9fWVsc2V7bGV0IHM7by5idWZmZXImJm8uYnVmZmVyIGluc3RhbmNlb2YgV2ViR0xCdWZmZXI/cz1Hczp0eXBlb2Ygbz09Im51bWJlciJ8fHR5cGVvZiBvLmRhdGE9PSJudW1iZXIiP3M9JHM6cz1Xcztjb25zdHtidWZmZXI6YSx0eXBlOnUsbnVtVmFsdWVzOmYsYXJyYXlUeXBlOmR9PXMocixvLG4pLHA9by5ub3JtYWxpemUhPT12b2lkIDA/by5ub3JtYWxpemU6QnMoZCksZz1McyhvLG4sZik7dFtpXT17YnVmZmVyOmEsbnVtQ29tcG9uZW50czpnLHR5cGU6dSxub3JtYWxpemU6cCxzdHJpZGU6by5zdHJpZGV8fDAsb2Zmc2V0Om8ub2Zmc2V0fHwwLGRpdmlzb3I6by5kaXZpc29yPT09dm9pZCAwP3ZvaWQgMDpvLmRpdmlzb3IsZHJhd1R5cGU6by5kcmF3VHlwZX19fX0pLHIuYmluZEJ1ZmZlcihnZSxudWxsKSx0fWZ1bmN0aW9uIEhzKHIsZSl7cmV0dXJuIGU9PT1Tc3x8ZT09PVJzPzE6ZT09PUZzfHxlPT09UHM/MjplPT09a3N8fGU9PT1Ec3x8ZT09PXluPzQ6MH1jb25zdCBocj1bInBvc2l0aW9uIiwicG9zaXRpb25zIiwiYV9wb3NpdGlvbiJdO2Z1bmN0aW9uIGpzKHIsZSl7bGV0IHQsbjtmb3Iobj0wO248aHIubGVuZ3RoJiYodD1ocltuXSwhKHQgaW4gZXx8KHQ9Ym4uYXR0cmliUHJlZml4K3QsdCBpbiBlKSkpOysrbik7bj09PWhyLmxlbmd0aCYmKHQ9T2JqZWN0LmtleXMoZSlbMF0pO2NvbnN0IG89ZVt0XTtpZighby5idWZmZXIpcmV0dXJuIDE7ci5iaW5kQnVmZmVyKGdlLG8uYnVmZmVyKTtjb25zdCBpPXIuZ2V0QnVmZmVyUGFyYW1ldGVyKGdlLElzKTtyLmJpbmRCdWZmZXIoZ2UsbnVsbCk7Y29uc3Qgcz1IcyhyLG8udHlwZSksYT1pL3MsdT1vLm51bUNvbXBvbmVudHN8fG8uc2l6ZSxmPWEvdTtpZihmJTEhPT0wKXRocm93IG5ldyBFcnJvcihgbnVtQ29tcG9uZW50cyAke3V9IG5vdCBjb3JyZWN0IGZvciBsZW5ndGggJHtsZW5ndGh9YCk7cmV0dXJuIGZ9ZnVuY3Rpb24gWXMocixlLHQpe2NvbnN0IG49VnMocixlKSxvPU9iamVjdC5hc3NpZ24oe30sdHx8e30pO28uYXR0cmlicz1PYmplY3QuYXNzaWduKHt9LHQ/dC5hdHRyaWJzOnt9LG4pO2NvbnN0IGk9ZS5pbmRpY2VzO2lmKGkpe2NvbnN0IHM9dm4oaSwiaW5kaWNlcyIpO28uaW5kaWNlcz14bihyLHMsQXMpLG8ubnVtRWxlbWVudHM9cy5sZW5ndGgsby5lbGVtZW50VHlwZT1mcihzKX1lbHNlIG8ubnVtRWxlbWVudHN8fChvLm51bUVsZW1lbnRzPWpzKHIsby5hdHRyaWJzKSk7cmV0dXJuIG99ZnVuY3Rpb24gV2Uocil7cmV0dXJuISFyLnRleFN0b3JhZ2UyRH1jb25zdCBFbj1mdW5jdGlvbigpe2NvbnN0IHI9e30sZT17fTtmdW5jdGlvbiB0KG4pe2NvbnN0IG89bi5jb25zdHJ1Y3Rvci5uYW1lO2lmKCFyW29dKXtmb3IoY29uc3QgaSBpbiBuKWlmKHR5cGVvZiBuW2ldPT0ibnVtYmVyIil7Y29uc3Qgcz1lW25baV1dO2VbbltpXV09cz9gJHtzfSB8ICR7aX1gOml9cltvXT0hMH19cmV0dXJuIGZ1bmN0aW9uKG8saSl7cmV0dXJuIHQobyksZVtpXXx8KHR5cGVvZiBpPT0ibnVtYmVyIj9gMHgke2kudG9TdHJpbmcoMTYpfWA6aSl9fSgpLG9lPXt0ZXh0dXJlQ29sb3I6bmV3IFVpbnQ4QXJyYXkoWzEyOCwxOTIsMjU1LDI1NV0pLHRleHR1cmVPcHRpb25zOnt9LGNyb3NzT3JpZ2luOnZvaWQgMH0sVmU9eXQsVG49ZnVuY3Rpb24oKXtsZXQgcjtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gcj1yfHwodHlwZW9mIGRvY3VtZW50PCJ1IiYmZG9jdW1lbnQuY3JlYXRlRWxlbWVudD9kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKS5nZXRDb250ZXh0KCIyZCIpOm51bGwpLHJ9fSgpLHduPTY0MDYsUT02NDA3LFM9NjQwOCxBbj02NDA5LEluPTY0MTAsSGU9NjQwMixTbj0zNDA0MSx4dD0zMzA3MSxYcz05NzI4LFFzPTk3MjksaWU9MzU1MyxzZT0zNDA2Nyx5ZT0zMjg3OSxiZT0zNTg2Nixtcj0zNDA2OSxxcz0zNDA3MCxLcz0zNDA3MSxKcz0zNDA3Mixacz0zNDA3MyxlYT0zNDA3NCxwcj0xMDI0MSxncj0xMDI0MCxfdD0xMDI0Mix2dD0xMDI0MyxSbj0zMjg4Mix0YT0zMzA4MixyYT0zMzA4MyxuYT0zMzA4NCxvYT0zMzA4NSxpYT0zNDg5MixzYT0zNDg5Myx5cj0zMzE3LEZuPTMzMTQsUG49MzI4Nzgsa249MzMxNixEbj0zMzE1LENuPTMyODc3LGFhPTM3NDQzLHVhPTM3NDQxLGNhPTM3NDQwLGZhPTMzMzIxLGxhPTM2NzU2LGRhPTMzMzI1LGhhPTMzMzI2LG1hPTMzMzMwLHBhPTMzMzI5LGdhPTMzMzM4LHlhPTMzMzM3LGJhPTMzMzQwLHhhPTMzMzM5LF9hPTMzMzIzLHZhPTM2NzU3LEVhPTMzMzI3LFRhPTMzMzI4LHdhPTMzMzM2LEFhPTMzMzM1LElhPTMzMzMyLFNhPTMzMzMxLFJhPTMzMzM0LEZhPTMzMzMzLFBhPTMyODQ5LGthPTM1OTA1LERhPTM2MTk0LENhPTM2NzU4LEJhPTM1ODk4LE1hPTM1OTAxLE9hPTM0ODQzLFVhPTM0ODM3LE5hPTM2MjIxLExhPTM2MjM5LHphPTM2MjE1LEdhPTM2MjMzLCRhPTM2MjA5LFdhPTM2MjI3LFZhPTMyODU2LEhhPTM1OTA3LGphPTM2NzU5LFlhPTMyODU1LFhhPTMyODU0LFFhPTMyODU3LHFhPTM0ODQyLEthPTM0ODM2LEphPTM2MjIwLFphPTM2MjM4LGV1PTM2OTc1LHR1PTM2MjE0LHJ1PTM2MjMyLG51PTM2MjI2LG91PTM2MjA4LGl1PTMzMTg5LHN1PTMzMTkwLGF1PTM2MDEyLHV1PTM2MDEzLGN1PTM1MDU2LGFlPTUxMjAsST01MTIxLEV0PTUxMjIsUGU9NTEyMyxUdD01MTI0LHhlPTUxMjUsTT01MTI2LEJuPTMyODE5LE1uPTMyODIwLE9uPTMzNjM1LEg9NTEzMSxqZT0zNjE5Myxicj0zMzY0MCxmdT0zNTg5OSxsdT0zNTkwMixkdT0zNjI2OSxodT0zNDA0Mix3dD0zMzMxOSxrZT0zMzMyMCxBdD02NDAzLERlPTM2MjQ0LENlPTM2MjQ4LF9lPTM2MjQ5O2xldCB4cjtmdW5jdGlvbiBJdChyKXtpZigheHIpe2NvbnN0IGU9e307ZVt3bl09e3RleHR1cmVGb3JtYXQ6d24sY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiEwLGJ5dGVzUGVyRWxlbWVudDpbMSwyLDIsNF0sdHlwZTpbSSxILGplLE1dfSxlW0FuXT17dGV4dHVyZUZvcm1hdDpBbixjb2xvclJlbmRlcmFibGU6ITAsdGV4dHVyZUZpbHRlcmFibGU6ITAsYnl0ZXNQZXJFbGVtZW50OlsxLDIsMiw0XSx0eXBlOltJLEgsamUsTV19LGVbSW5dPXt0ZXh0dXJlRm9ybWF0OkluLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMCxieXRlc1BlckVsZW1lbnQ6WzIsNCw0LDhdLHR5cGU6W0ksSCxqZSxNXX0sZVtRXT17dGV4dHVyZUZvcm1hdDpRLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMCxieXRlc1BlckVsZW1lbnQ6WzMsNiw2LDEyLDJdLHR5cGU6W0ksSCxqZSxNLE9uXX0sZVtTXT17dGV4dHVyZUZvcm1hdDpTLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMCxieXRlc1BlckVsZW1lbnQ6WzQsOCw4LDE2LDIsMl0sdHlwZTpbSSxILGplLE0sQm4sTW5dfSxlW0hlXT17dGV4dHVyZUZvcm1hdDpIZSxjb2xvclJlbmRlcmFibGU6ITAsdGV4dHVyZUZpbHRlcmFibGU6ITEsYnl0ZXNQZXJFbGVtZW50OlsyLDRdLHR5cGU6W3hlLFBlXX0sZVtmYV09e3RleHR1cmVGb3JtYXQ6QXQsY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiEwLGJ5dGVzUGVyRWxlbWVudDpbMV0sdHlwZTpbSV19LGVbbGFdPXt0ZXh0dXJlRm9ybWF0OkF0LGNvbG9yUmVuZGVyYWJsZTohMSx0ZXh0dXJlRmlsdGVyYWJsZTohMCxieXRlc1BlckVsZW1lbnQ6WzFdLHR5cGU6W2FlXX0sZVtkYV09e3RleHR1cmVGb3JtYXQ6QXQsY29sb3JSZW5kZXJhYmxlOiExLHRleHR1cmVGaWx0ZXJhYmxlOiEwLGJ5dGVzUGVyRWxlbWVudDpbNCwyXSx0eXBlOltNLEhdfSxlW2hhXT17dGV4dHVyZUZvcm1hdDpBdCxjb2xvclJlbmRlcmFibGU6ITEsdGV4dHVyZUZpbHRlcmFibGU6ITEsYnl0ZXNQZXJFbGVtZW50Ols0XSx0eXBlOltNXX0sZVttYV09e3RleHR1cmVGb3JtYXQ6RGUsY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiExLGJ5dGVzUGVyRWxlbWVudDpbMV0sdHlwZTpbSV19LGVbcGFdPXt0ZXh0dXJlRm9ybWF0OkRlLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzFdLHR5cGU6W2FlXX0sZVtJYV09e3RleHR1cmVGb3JtYXQ6RGUsY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiExLGJ5dGVzUGVyRWxlbWVudDpbMl0sdHlwZTpbUGVdfSxlW1NhXT17dGV4dHVyZUZvcm1hdDpEZSxjb2xvclJlbmRlcmFibGU6ITAsdGV4dHVyZUZpbHRlcmFibGU6ITEsYnl0ZXNQZXJFbGVtZW50OlsyXSx0eXBlOltFdF19LGVbUmFdPXt0ZXh0dXJlRm9ybWF0OkRlLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzRdLHR5cGU6W3hlXX0sZVtGYV09e3RleHR1cmVGb3JtYXQ6RGUsY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiExLGJ5dGVzUGVyRWxlbWVudDpbNF0sdHlwZTpbVHRdfSxlW19hXT17dGV4dHVyZUZvcm1hdDp3dCxjb2xvclJlbmRlcmFibGU6ITAsdGV4dHVyZUZpbHRlcmFibGU6ITAsYnl0ZXNQZXJFbGVtZW50OlsyXSx0eXBlOltJXX0sZVt2YV09e3RleHR1cmVGb3JtYXQ6d3QsY29sb3JSZW5kZXJhYmxlOiExLHRleHR1cmVGaWx0ZXJhYmxlOiEwLGJ5dGVzUGVyRWxlbWVudDpbMl0sdHlwZTpbYWVdfSxlW0VhXT17dGV4dHVyZUZvcm1hdDp3dCxjb2xvclJlbmRlcmFibGU6ITEsdGV4dHVyZUZpbHRlcmFibGU6ITAsYnl0ZXNQZXJFbGVtZW50Ols4LDRdLHR5cGU6W00sSF19LGVbVGFdPXt0ZXh0dXJlRm9ybWF0Ond0LGNvbG9yUmVuZGVyYWJsZTohMSx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzhdLHR5cGU6W01dfSxlW3dhXT17dGV4dHVyZUZvcm1hdDprZSxjb2xvclJlbmRlcmFibGU6ITAsdGV4dHVyZUZpbHRlcmFibGU6ITEsYnl0ZXNQZXJFbGVtZW50OlsyXSx0eXBlOltJXX0sZVtBYV09e3RleHR1cmVGb3JtYXQ6a2UsY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiExLGJ5dGVzUGVyRWxlbWVudDpbMl0sdHlwZTpbYWVdfSxlW2dhXT17dGV4dHVyZUZvcm1hdDprZSxjb2xvclJlbmRlcmFibGU6ITAsdGV4dHVyZUZpbHRlcmFibGU6ITEsYnl0ZXNQZXJFbGVtZW50Ols0XSx0eXBlOltQZV19LGVbeWFdPXt0ZXh0dXJlRm9ybWF0OmtlLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzRdLHR5cGU6W0V0XX0sZVtiYV09e3RleHR1cmVGb3JtYXQ6a2UsY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiExLGJ5dGVzUGVyRWxlbWVudDpbOF0sdHlwZTpbeGVdfSxlW3hhXT17dGV4dHVyZUZvcm1hdDprZSxjb2xvclJlbmRlcmFibGU6ITAsdGV4dHVyZUZpbHRlcmFibGU6ITEsYnl0ZXNQZXJFbGVtZW50Ols4XSx0eXBlOltUdF19LGVbUGFdPXt0ZXh0dXJlRm9ybWF0OlEsY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiEwLGJ5dGVzUGVyRWxlbWVudDpbM10sdHlwZTpbSV19LGVba2FdPXt0ZXh0dXJlRm9ybWF0OlEsY29sb3JSZW5kZXJhYmxlOiExLHRleHR1cmVGaWx0ZXJhYmxlOiEwLGJ5dGVzUGVyRWxlbWVudDpbM10sdHlwZTpbSV19LGVbRGFdPXt0ZXh0dXJlRm9ybWF0OlEsY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiEwLGJ5dGVzUGVyRWxlbWVudDpbMywyXSx0eXBlOltJLE9uXX0sZVtDYV09e3RleHR1cmVGb3JtYXQ6USxjb2xvclJlbmRlcmFibGU6ITEsdGV4dHVyZUZpbHRlcmFibGU6ITAsYnl0ZXNQZXJFbGVtZW50OlszXSx0eXBlOlthZV19LGVbQmFdPXt0ZXh0dXJlRm9ybWF0OlEsY29sb3JSZW5kZXJhYmxlOiExLHRleHR1cmVGaWx0ZXJhYmxlOiEwLGJ5dGVzUGVyRWxlbWVudDpbMTIsNiw0XSx0eXBlOltNLEgsZnVdfSxlW01hXT17dGV4dHVyZUZvcm1hdDpRLGNvbG9yUmVuZGVyYWJsZTohMSx0ZXh0dXJlRmlsdGVyYWJsZTohMCxieXRlc1BlckVsZW1lbnQ6WzEyLDYsNF0sdHlwZTpbTSxILGx1XX0sZVtPYV09e3RleHR1cmVGb3JtYXQ6USxjb2xvclJlbmRlcmFibGU6ITEsdGV4dHVyZUZpbHRlcmFibGU6ITAsYnl0ZXNQZXJFbGVtZW50OlsxMiw2XSx0eXBlOltNLEhdfSxlW1VhXT17dGV4dHVyZUZvcm1hdDpRLGNvbG9yUmVuZGVyYWJsZTohMSx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzEyXSx0eXBlOltNXX0sZVtOYV09e3RleHR1cmVGb3JtYXQ6Q2UsY29sb3JSZW5kZXJhYmxlOiExLHRleHR1cmVGaWx0ZXJhYmxlOiExLGJ5dGVzUGVyRWxlbWVudDpbM10sdHlwZTpbSV19LGVbTGFdPXt0ZXh0dXJlRm9ybWF0OkNlLGNvbG9yUmVuZGVyYWJsZTohMSx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzNdLHR5cGU6W2FlXX0sZVt6YV09e3RleHR1cmVGb3JtYXQ6Q2UsY29sb3JSZW5kZXJhYmxlOiExLHRleHR1cmVGaWx0ZXJhYmxlOiExLGJ5dGVzUGVyRWxlbWVudDpbNl0sdHlwZTpbUGVdfSxlW0dhXT17dGV4dHVyZUZvcm1hdDpDZSxjb2xvclJlbmRlcmFibGU6ITEsdGV4dHVyZUZpbHRlcmFibGU6ITEsYnl0ZXNQZXJFbGVtZW50Ols2XSx0eXBlOltFdF19LGVbJGFdPXt0ZXh0dXJlRm9ybWF0OkNlLGNvbG9yUmVuZGVyYWJsZTohMSx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzEyXSx0eXBlOlt4ZV19LGVbV2FdPXt0ZXh0dXJlRm9ybWF0OkNlLGNvbG9yUmVuZGVyYWJsZTohMSx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzEyXSx0eXBlOltUdF19LGVbVmFdPXt0ZXh0dXJlRm9ybWF0OlMsY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiEwLGJ5dGVzUGVyRWxlbWVudDpbNF0sdHlwZTpbSV19LGVbSGFdPXt0ZXh0dXJlRm9ybWF0OlMsY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiEwLGJ5dGVzUGVyRWxlbWVudDpbNF0sdHlwZTpbSV19LGVbamFdPXt0ZXh0dXJlRm9ybWF0OlMsY29sb3JSZW5kZXJhYmxlOiExLHRleHR1cmVGaWx0ZXJhYmxlOiEwLGJ5dGVzUGVyRWxlbWVudDpbNF0sdHlwZTpbYWVdfSxlW1lhXT17dGV4dHVyZUZvcm1hdDpTLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMCxieXRlc1BlckVsZW1lbnQ6WzQsMiw0XSx0eXBlOltJLE1uLGJyXX0sZVtYYV09e3RleHR1cmVGb3JtYXQ6Uyxjb2xvclJlbmRlcmFibGU6ITAsdGV4dHVyZUZpbHRlcmFibGU6ITAsYnl0ZXNQZXJFbGVtZW50Ols0LDJdLHR5cGU6W0ksQm5dfSxlW1FhXT17dGV4dHVyZUZvcm1hdDpTLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMCxieXRlc1BlckVsZW1lbnQ6WzRdLHR5cGU6W2JyXX0sZVtxYV09e3RleHR1cmVGb3JtYXQ6Uyxjb2xvclJlbmRlcmFibGU6ITEsdGV4dHVyZUZpbHRlcmFibGU6ITAsYnl0ZXNQZXJFbGVtZW50OlsxNiw4XSx0eXBlOltNLEhdfSxlW0thXT17dGV4dHVyZUZvcm1hdDpTLGNvbG9yUmVuZGVyYWJsZTohMSx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzE2XSx0eXBlOltNXX0sZVtKYV09e3RleHR1cmVGb3JtYXQ6X2UsY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiExLGJ5dGVzUGVyRWxlbWVudDpbNF0sdHlwZTpbSV19LGVbWmFdPXt0ZXh0dXJlRm9ybWF0Ol9lLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzRdLHR5cGU6W2FlXX0sZVtldV09e3RleHR1cmVGb3JtYXQ6X2UsY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiExLGJ5dGVzUGVyRWxlbWVudDpbNF0sdHlwZTpbYnJdfSxlW3R1XT17dGV4dHVyZUZvcm1hdDpfZSxjb2xvclJlbmRlcmFibGU6ITAsdGV4dHVyZUZpbHRlcmFibGU6ITEsYnl0ZXNQZXJFbGVtZW50Ols4XSx0eXBlOltQZV19LGVbcnVdPXt0ZXh0dXJlRm9ybWF0Ol9lLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzhdLHR5cGU6W0V0XX0sZVtudV09e3RleHR1cmVGb3JtYXQ6X2UsY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiExLGJ5dGVzUGVyRWxlbWVudDpbMTZdLHR5cGU6W1R0XX0sZVtvdV09e3RleHR1cmVGb3JtYXQ6X2UsY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiExLGJ5dGVzUGVyRWxlbWVudDpbMTZdLHR5cGU6W3hlXX0sZVtpdV09e3RleHR1cmVGb3JtYXQ6SGUsY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiExLGJ5dGVzUGVyRWxlbWVudDpbMiw0XSx0eXBlOltQZSx4ZV19LGVbc3VdPXt0ZXh0dXJlRm9ybWF0OkhlLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzRdLHR5cGU6W3hlXX0sZVthdV09e3RleHR1cmVGb3JtYXQ6SGUsY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiExLGJ5dGVzUGVyRWxlbWVudDpbNF0sdHlwZTpbTV19LGVbY3VdPXt0ZXh0dXJlRm9ybWF0OlNuLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzRdLHR5cGU6W2h1XX0sZVt1dV09e3RleHR1cmVGb3JtYXQ6U24sY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiExLGJ5dGVzUGVyRWxlbWVudDpbNF0sdHlwZTpbZHVdfSxPYmplY3Qua2V5cyhlKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe2NvbnN0IG49ZVt0XTtuLmJ5dGVzUGVyRWxlbWVudE1hcD17fSxuLmJ5dGVzUGVyRWxlbWVudC5mb3JFYWNoKGZ1bmN0aW9uKG8saSl7Y29uc3Qgcz1uLnR5cGVbaV07bi5ieXRlc1BlckVsZW1lbnRNYXBbc109b30pfSkseHI9ZX1yZXR1cm4geHJbcl19ZnVuY3Rpb24gbXUocixlKXtjb25zdCB0PUl0KHIpO2lmKCF0KXRocm93InVua25vd24gaW50ZXJuYWwgZm9ybWF0Ijtjb25zdCBuPXQuYnl0ZXNQZXJFbGVtZW50TWFwW2VdO2lmKG49PT12b2lkIDApdGhyb3cidW5rbm93biBpbnRlcm5hbCBmb3JtYXQiO3JldHVybiBufWZ1bmN0aW9uIFllKHIpe2NvbnN0IGU9SXQocik7aWYoIWUpdGhyb3cidW5rbm93biBpbnRlcm5hbCBmb3JtYXQiO3JldHVybntmb3JtYXQ6ZS50ZXh0dXJlRm9ybWF0LHR5cGU6ZS50eXBlWzBdfX1mdW5jdGlvbiBVbihyKXtyZXR1cm4ociZyLTEpPT09MH1mdW5jdGlvbiBwdShyLGUsdCxuKXtpZighV2UocikpcmV0dXJuIFVuKGUpJiZVbih0KTtjb25zdCBvPUl0KG4pO2lmKCFvKXRocm93InVua25vd24gaW50ZXJuYWwgZm9ybWF0IjtyZXR1cm4gby5jb2xvclJlbmRlcmFibGUmJm8udGV4dHVyZUZpbHRlcmFibGV9ZnVuY3Rpb24gZ3Uocil7Y29uc3QgZT1JdChyKTtpZighZSl0aHJvdyJ1bmtub3duIGludGVybmFsIGZvcm1hdCI7cmV0dXJuIGUudGV4dHVyZUZpbHRlcmFibGV9ZnVuY3Rpb24geXUocixlLHQpe3JldHVybiBWZShlKT9mcihlKTp0fHxJfWZ1bmN0aW9uIFN0KHIsZSx0LG4sbyl7aWYobyUxIT09MCl0aHJvdyJjYW4ndCBndWVzcyBkaW1lbnNpb25zIjtpZighdCYmIW4pe2NvbnN0IGk9TWF0aC5zcXJ0KG8vKGU9PT1zZT82OjEpKTtpJTE9PT0wPyh0PWksbj1pKToodD1vLG49MSl9ZWxzZSBpZihuKXtpZighdCYmKHQ9by9uLHQlMSkpdGhyb3ciY2FuJ3QgZ3Vlc3MgZGltZW5zaW9ucyJ9ZWxzZSBpZihuPW8vdCxuJTEpdGhyb3ciY2FuJ3QgZ3Vlc3MgZGltZW5zaW9ucyI7cmV0dXJue3dpZHRoOnQsaGVpZ2h0Om59fWZ1bmN0aW9uIEJlKHIsZSl7ZS5jb2xvcnNwYWNlQ29udmVyc2lvbiE9PXZvaWQgMCYmci5waXhlbFN0b3JlaShhYSxlLmNvbG9yc3BhY2VDb252ZXJzaW9uKSxlLnByZW11bHRpcGx5QWxwaGEhPT12b2lkIDAmJnIucGl4ZWxTdG9yZWkodWEsZS5wcmVtdWx0aXBseUFscGhhKSxlLmZsaXBZIT09dm9pZCAwJiZyLnBpeGVsU3RvcmVpKGNhLGUuZmxpcFkpfWZ1bmN0aW9uIE5uKHIpe3IucGl4ZWxTdG9yZWkoeXIsNCksV2UocikmJihyLnBpeGVsU3RvcmVpKEZuLDApLHIucGl4ZWxTdG9yZWkoUG4sMCksci5waXhlbFN0b3JlaShrbiwwKSxyLnBpeGVsU3RvcmVpKERuLDApLHIucGl4ZWxTdG9yZWkoQ24sMCkpfWZ1bmN0aW9uIGJ1KHIsZSx0LG4pe24ubWluTWFnJiYodC5jYWxsKHIsZSxwcixuLm1pbk1hZyksdC5jYWxsKHIsZSxncixuLm1pbk1hZykpLG4ubWluJiZ0LmNhbGwocixlLHByLG4ubWluKSxuLm1hZyYmdC5jYWxsKHIsZSxncixuLm1hZyksbi53cmFwJiYodC5jYWxsKHIsZSxfdCxuLndyYXApLHQuY2FsbChyLGUsdnQsbi53cmFwKSwoZT09PXllfHx3cyhyLGUpKSYmdC5jYWxsKHIsZSxSbixuLndyYXApKSxuLndyYXBSJiZ0LmNhbGwocixlLFJuLG4ud3JhcFIpLG4ud3JhcFMmJnQuY2FsbChyLGUsX3Qsbi53cmFwUyksbi53cmFwVCYmdC5jYWxsKHIsZSx2dCxuLndyYXBUKSxuLm1pbkxvZCE9PXZvaWQgMCYmdC5jYWxsKHIsZSx0YSxuLm1pbkxvZCksbi5tYXhMb2QhPT12b2lkIDAmJnQuY2FsbChyLGUscmEsbi5tYXhMb2QpLG4uYmFzZUxldmVsIT09dm9pZCAwJiZ0LmNhbGwocixlLG5hLG4uYmFzZUxldmVsKSxuLm1heExldmVsIT09dm9pZCAwJiZ0LmNhbGwocixlLG9hLG4ubWF4TGV2ZWwpLG4uY29tcGFyZUZ1bmMhPT12b2lkIDAmJnQuY2FsbChyLGUsc2Esbi5jb21wYXJlRnVuYyksbi5jb21wYXJlTW9kZSE9PXZvaWQgMCYmdC5jYWxsKHIsZSxpYSxuLmNvbXBhcmVNb2RlKX1mdW5jdGlvbiBMbihyLGUsdCl7Y29uc3Qgbj10LnRhcmdldHx8aWU7ci5iaW5kVGV4dHVyZShuLGUpLGJ1KHIsbixyLnRleFBhcmFtZXRlcmksdCl9ZnVuY3Rpb24geHUocil7cmV0dXJuIHI9cnx8b2UudGV4dHVyZUNvbG9yLFZlKHIpP3I6bmV3IFVpbnQ4QXJyYXkoW3JbMF0qMjU1LHJbMV0qMjU1LHJbMl0qMjU1LHJbM10qMjU1XSl9ZnVuY3Rpb24gX3IocixlLHQsbixvLGkpe3Q9dHx8b2UudGV4dHVyZU9wdGlvbnMsaT1pfHxTO2NvbnN0IHM9dC50YXJnZXR8fGllO2lmKG49bnx8dC53aWR0aCxvPW98fHQuaGVpZ2h0LHIuYmluZFRleHR1cmUocyxlKSxwdShyLG4sbyxpKSlyLmdlbmVyYXRlTWlwbWFwKHMpO2Vsc2V7Y29uc3QgYT1ndShpKT9RczpYcztyLnRleFBhcmFtZXRlcmkocyxwcixhKSxyLnRleFBhcmFtZXRlcmkocyxncixhKSxyLnRleFBhcmFtZXRlcmkocyxfdCx4dCksci50ZXhQYXJhbWV0ZXJpKHMsdnQseHQpfX1mdW5jdGlvbiBYZShyKXtyZXR1cm4gci5hdXRvPT09ITB8fHIuYXV0bz09PXZvaWQgMCYmci5sZXZlbD09PXZvaWQgMH1mdW5jdGlvbiB2cihyLGUpe3JldHVybiBlPWV8fHt9LGUuY3ViZUZhY2VPcmRlcnx8W21yLHFzLEtzLEpzLFpzLGVhXX1mdW5jdGlvbiBFcihyLGUpe2NvbnN0IG49dnIocixlKS5tYXAoZnVuY3Rpb24obyxpKXtyZXR1cm57ZmFjZTpvLG5keDppfX0pO3JldHVybiBuLnNvcnQoZnVuY3Rpb24obyxpKXtyZXR1cm4gby5mYWNlLWkuZmFjZX0pLG59ZnVuY3Rpb24gem4ocixlLHQsbil7bj1ufHxvZS50ZXh0dXJlT3B0aW9ucztjb25zdCBvPW4udGFyZ2V0fHxpZSxpPW4ubGV2ZWx8fDA7bGV0IHM9dC53aWR0aCxhPXQuaGVpZ2h0O2NvbnN0IHU9bi5pbnRlcm5hbEZvcm1hdHx8bi5mb3JtYXR8fFMsZj1ZZSh1KSxkPW4uZm9ybWF0fHxmLmZvcm1hdCxwPW4udHlwZXx8Zi50eXBlO2lmKEJlKHIsbiksci5iaW5kVGV4dHVyZShvLGUpLG89PT1zZSl7Y29uc3QgZz10LndpZHRoLGI9dC5oZWlnaHQ7bGV0IGgseDtpZihnLzY9PT1iKWg9Yix4PVswLDAsMSwwLDIsMCwzLDAsNCwwLDUsMF07ZWxzZSBpZihiLzY9PT1nKWg9Zyx4PVswLDAsMCwxLDAsMiwwLDMsMCw0LDAsNV07ZWxzZSBpZihnLzM9PT1iLzIpaD1nLzMseD1bMCwwLDEsMCwyLDAsMCwxLDEsMSwyLDFdO2Vsc2UgaWYoZy8yPT09Yi8zKWg9Zy8yLHg9WzAsMCwxLDAsMCwxLDEsMSwwLDIsMSwyXTtlbHNlIHRocm93ImNhbid0IGZpZ3VyZSBvdXQgY3ViZSBtYXAgZnJvbSBlbGVtZW50OiAiKyh0LnNyYz90LnNyYzp0Lm5vZGVOYW1lKTtjb25zdCBFPVRuKCk7RT8oRS5jYW52YXMud2lkdGg9aCxFLmNhbnZhcy5oZWlnaHQ9aCxzPWgsYT1oLEVyKHIsbikuZm9yRWFjaChmdW5jdGlvbih2KXtjb25zdCBSPXhbdi5uZHgqMiswXSpoLFA9eFt2Lm5keCoyKzFdKmg7RS5kcmF3SW1hZ2UodCxSLFAsaCxoLDAsMCxoLGgpLHIudGV4SW1hZ2UyRCh2LmZhY2UsaSx1LGQscCxFLmNhbnZhcyl9KSxFLmNhbnZhcy53aWR0aD0xLEUuY2FudmFzLmhlaWdodD0xKTp0eXBlb2YgY3JlYXRlSW1hZ2VCaXRtYXA8InUiJiYocz1oLGE9aCxFcihyLG4pLmZvckVhY2goZnVuY3Rpb24odil7Y29uc3QgUj14W3YubmR4KjIrMF0qaCxQPXhbdi5uZHgqMisxXSpoO3IudGV4SW1hZ2UyRCh2LmZhY2UsaSx1LGgsaCwwLGQscCxudWxsKSxjcmVhdGVJbWFnZUJpdG1hcCh0LFIsUCxoLGgse3ByZW11bHRpcGx5QWxwaGE6Im5vbmUiLGNvbG9yU3BhY2VDb252ZXJzaW9uOiJub25lIn0pLnRoZW4oZnVuY3Rpb24oeil7QmUocixuKSxyLmJpbmRUZXh0dXJlKG8sZSksci50ZXhJbWFnZTJEKHYuZmFjZSxpLHUsZCxwLHopLFhlKG4pJiZfcihyLGUsbixzLGEsdSl9KX0pKX1lbHNlIGlmKG89PT15ZXx8bz09PWJlKXtjb25zdCBnPU1hdGgubWluKHQud2lkdGgsdC5oZWlnaHQpLGI9TWF0aC5tYXgodC53aWR0aCx0LmhlaWdodCksaD1iL2c7aWYoaCUxIT09MCl0aHJvdyJjYW4gbm90IGNvbXB1dGUgM0QgZGltZW5zaW9ucyBvZiBlbGVtZW50Ijtjb25zdCB4PXQud2lkdGg9PT1iPzE6MCxFPXQuaGVpZ2h0PT09Yj8xOjA7ci5waXhlbFN0b3JlaSh5ciwxKSxyLnBpeGVsU3RvcmVpKEZuLHQud2lkdGgpLHIucGl4ZWxTdG9yZWkoUG4sMCksci5waXhlbFN0b3JlaShDbiwwKSxyLnRleEltYWdlM0QobyxpLHUsZyxnLGcsMCxkLHAsbnVsbCk7Zm9yKGxldCB2PTA7djxoOysrdil7Y29uc3QgUj12KmcqeCxQPXYqZypFO3IucGl4ZWxTdG9yZWkoa24sUiksci5waXhlbFN0b3JlaShEbixQKSxyLnRleFN1YkltYWdlM0QobyxpLDAsMCx2LGcsZywxLGQscCx0KX1ObihyKX1lbHNlIHIudGV4SW1hZ2UyRChvLGksdSxkLHAsdCk7WGUobikmJl9yKHIsZSxuLHMsYSx1KSxMbihyLGUsbil9ZnVuY3Rpb24gUWUoKXt9ZnVuY3Rpb24gX3Uocil7aWYodHlwZW9mIGRvY3VtZW50PCJ1Iil7Y29uc3QgZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIik7cmV0dXJuIGUuaHJlZj1yLGUuaG9zdG5hbWU9PT1sb2NhdGlvbi5ob3N0bmFtZSYmZS5wb3J0PT09bG9jYXRpb24ucG9ydCYmZS5wcm90b2NvbD09PWxvY2F0aW9uLnByb3RvY29sfWVsc2V7Y29uc3QgZT1uZXcgVVJMKGxvY2F0aW9uLmhyZWYpLm9yaWdpbjtyZXR1cm4gbmV3IFVSTChyLGxvY2F0aW9uLmhyZWYpLm9yaWdpbj09PWV9fWZ1bmN0aW9uIHZ1KHIsZSl7cmV0dXJuIGU9PT12b2lkIDAmJiFfdShyKT8iYW5vbnltb3VzIjplfWZ1bmN0aW9uIEV1KHIsZSx0KXt0PXR8fFFlO2xldCBuO2lmKGU9ZSE9PXZvaWQgMD9lOm9lLmNyb3NzT3JpZ2luLGU9dnUocixlKSx0eXBlb2YgSW1hZ2U8InUiKXtuPW5ldyBJbWFnZSxlIT09dm9pZCAwJiYobi5jcm9zc09yaWdpbj1lKTtjb25zdCBvPWZ1bmN0aW9uKCl7bi5yZW1vdmVFdmVudExpc3RlbmVyKCJlcnJvciIsaSksbi5yZW1vdmVFdmVudExpc3RlbmVyKCJsb2FkIixzKSxuPW51bGx9LGk9ZnVuY3Rpb24oKXtjb25zdCB1PSJjb3VsZG4ndCBsb2FkIGltYWdlOiAiK3I7bW4odSksdCh1LG4pLG8oKX0scz1mdW5jdGlvbigpe3QobnVsbCxuKSxvKCl9O3JldHVybiBuLmFkZEV2ZW50TGlzdGVuZXIoImVycm9yIixpKSxuLmFkZEV2ZW50TGlzdGVuZXIoImxvYWQiLHMpLG4uc3JjPXIsbn1lbHNlIGlmKHR5cGVvZiBJbWFnZUJpdG1hcDwidSIpe2xldCBvLGk7Y29uc3Qgcz1mdW5jdGlvbigpe3QobyxpKX0sYT17fTtlJiYoYS5tb2RlPSJjb3JzIiksZmV0Y2gocixhKS50aGVuKGZ1bmN0aW9uKHUpe2lmKCF1Lm9rKXRocm93IHU7cmV0dXJuIHUuYmxvYigpfSkudGhlbihmdW5jdGlvbih1KXtyZXR1cm4gY3JlYXRlSW1hZ2VCaXRtYXAodSx7cHJlbXVsdGlwbHlBbHBoYToibm9uZSIsY29sb3JTcGFjZUNvbnZlcnNpb246Im5vbmUifSl9KS50aGVuKGZ1bmN0aW9uKHUpe2k9dSxzZXRUaW1lb3V0KHMpfSkuY2F0Y2goZnVuY3Rpb24odSl7bz11LHNldFRpbWVvdXQocyl9KSxuPW51bGx9cmV0dXJuIG59ZnVuY3Rpb24gR24ocil7cmV0dXJuIHR5cGVvZiBJbWFnZUJpdG1hcDwidSImJnIgaW5zdGFuY2VvZiBJbWFnZUJpdG1hcHx8dHlwZW9mIEltYWdlRGF0YTwidSImJnIgaW5zdGFuY2VvZiBJbWFnZURhdGF8fHR5cGVvZiBIVE1MRWxlbWVudDwidSImJnIgaW5zdGFuY2VvZiBIVE1MRWxlbWVudH1mdW5jdGlvbiBUcihyLGUsdCl7cmV0dXJuIEduKHIpPyhzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dChudWxsLHIpfSkscik6RXUocixlLHQpfWZ1bmN0aW9uIHdyKHIsZSx0KXt0PXR8fG9lLnRleHR1cmVPcHRpb25zO2NvbnN0IG49dC50YXJnZXR8fGllO2lmKHIuYmluZFRleHR1cmUobixlKSx0LmNvbG9yPT09ITEpcmV0dXJuO2NvbnN0IG89eHUodC5jb2xvcik7aWYobj09PXNlKWZvcihsZXQgaT0wO2k8NjsrK2kpci50ZXhJbWFnZTJEKG1yK2ksMCxTLDEsMSwwLFMsSSxvKTtlbHNlIG49PT15ZXx8bj09PWJlP3IudGV4SW1hZ2UzRChuLDAsUywxLDEsMSwwLFMsSSxvKTpyLnRleEltYWdlMkQobiwwLFMsMSwxLDAsUyxJLG8pfWZ1bmN0aW9uIFR1KHIsZSx0LG4pe3JldHVybiBuPW58fFFlLHQ9dHx8b2UudGV4dHVyZU9wdGlvbnMsd3IocixlLHQpLHQ9T2JqZWN0LmFzc2lnbih7fSx0KSxUcih0LnNyYyx0LmNyb3NzT3JpZ2luLGZ1bmN0aW9uKGkscyl7aT9uKGksZSxzKTooem4ocixlLHMsdCksbihudWxsLGUscykpfSl9ZnVuY3Rpb24gd3UocixlLHQsbil7bj1ufHxRZTtjb25zdCBvPXQuc3JjO2lmKG8ubGVuZ3RoIT09Nil0aHJvdyJ0aGVyZSBtdXN0IGJlIDYgdXJscyBmb3IgYSBjdWJlbWFwIjtjb25zdCBpPXQubGV2ZWx8fDAscz10LmludGVybmFsRm9ybWF0fHx0LmZvcm1hdHx8UyxhPVllKHMpLHU9dC5mb3JtYXR8fGEuZm9ybWF0LGY9dC50eXBlfHxJLGQ9dC50YXJnZXR8fGllO2lmKGQhPT1zZSl0aHJvdyJ0YXJnZXQgbXVzdCBiZSBURVhUVVJFX0NVQkVfTUFQIjt3cihyLGUsdCksdD1PYmplY3QuYXNzaWduKHt9LHQpO2xldCBwPTY7Y29uc3QgZz1bXSxiPXZyKHIsdCk7bGV0IGg7ZnVuY3Rpb24geChFKXtyZXR1cm4gZnVuY3Rpb24odixSKXstLXAsdj9nLnB1c2godik6Ui53aWR0aCE9PVIuaGVpZ2h0P2cucHVzaCgiY3ViZW1hcCBmYWNlIGltZyBpcyBub3QgYSBzcXVhcmU6ICIrUi5zcmMpOihCZShyLHQpLHIuYmluZFRleHR1cmUoZCxlKSxwPT09NT92cigpLmZvckVhY2goZnVuY3Rpb24oUCl7ci50ZXhJbWFnZTJEKFAsaSxzLHUsZixSKX0pOnIudGV4SW1hZ2UyRChFLGkscyx1LGYsUiksWGUodCkmJnIuZ2VuZXJhdGVNaXBtYXAoZCkpLHA9PT0wJiZuKGcubGVuZ3RoP2c6dm9pZCAwLGUsaCl9fWg9by5tYXAoZnVuY3Rpb24oRSx2KXtyZXR1cm4gVHIoRSx0LmNyb3NzT3JpZ2luLHgoYlt2XSkpfSl9ZnVuY3Rpb24gQXUocixlLHQsbil7bj1ufHxRZTtjb25zdCBvPXQuc3JjLGk9dC5pbnRlcm5hbEZvcm1hdHx8dC5mb3JtYXR8fFMscz1ZZShpKSxhPXQuZm9ybWF0fHxzLmZvcm1hdCx1PXQudHlwZXx8SSxmPXQudGFyZ2V0fHxiZTtpZihmIT09eWUmJmYhPT1iZSl0aHJvdyJ0YXJnZXQgbXVzdCBiZSBURVhUVVJFXzNEIG9yIFRFWFRVUkVfMkRfQVJSQVkiO3dyKHIsZSx0KSx0PU9iamVjdC5hc3NpZ24oe30sdCk7bGV0IGQ9by5sZW5ndGg7Y29uc3QgcD1bXTtsZXQgZztjb25zdCBiPXQubGV2ZWx8fDA7bGV0IGg9dC53aWR0aCx4PXQuaGVpZ2h0O2NvbnN0IEU9by5sZW5ndGg7bGV0IHY9ITA7ZnVuY3Rpb24gUihQKXtyZXR1cm4gZnVuY3Rpb24oeixMKXtpZigtLWQseilwLnB1c2goeik7ZWxzZXtpZihCZShyLHQpLHIuYmluZFRleHR1cmUoZixlKSx2KXt2PSExLGg9dC53aWR0aHx8TC53aWR0aCx4PXQuaGVpZ2h0fHxMLmhlaWdodCxyLnRleEltYWdlM0QoZixiLGksaCx4LEUsMCxhLHUsbnVsbCk7Zm9yKGxldCBWPTA7VjxFOysrVilyLnRleFN1YkltYWdlM0QoZixiLDAsMCxWLGgseCwxLGEsdSxMKX1lbHNle2xldCBWPUwsRzsoTC53aWR0aCE9PWh8fEwuaGVpZ2h0IT09eCkmJihHPVRuKCksVj1HLmNhbnZhcyxHLmNhbnZhcy53aWR0aD1oLEcuY2FudmFzLmhlaWdodD14LEcuZHJhd0ltYWdlKEwsMCwwLGgseCkpLHIudGV4U3ViSW1hZ2UzRChmLGIsMCwwLFAsaCx4LDEsYSx1LFYpLEcmJlY9PT1HLmNhbnZhcyYmKEcuY2FudmFzLndpZHRoPTAsRy5jYW52YXMuaGVpZ2h0PTApfVhlKHQpJiZyLmdlbmVyYXRlTWlwbWFwKGYpfWQ9PT0wJiZuKHAubGVuZ3RoP3A6dm9pZCAwLGUsZyl9fWc9by5tYXAoZnVuY3Rpb24oUCx6KXtyZXR1cm4gVHIoUCx0LmNyb3NzT3JpZ2luLFIoeikpfSl9ZnVuY3Rpb24gSXUocixlLHQsbil7bj1ufHxvZS50ZXh0dXJlT3B0aW9ucztjb25zdCBvPW4udGFyZ2V0fHxpZTtyLmJpbmRUZXh0dXJlKG8sZSk7bGV0IGk9bi53aWR0aCxzPW4uaGVpZ2h0LGE9bi5kZXB0aDtjb25zdCB1PW4ubGV2ZWx8fDAsZj1uLmludGVybmFsRm9ybWF0fHxuLmZvcm1hdHx8UyxkPVllKGYpLHA9bi5mb3JtYXR8fGQuZm9ybWF0LGc9bi50eXBlfHx5dShyLHQsZC50eXBlKTtpZihWZSh0KSl0IGluc3RhbmNlb2YgVWludDhDbGFtcGVkQXJyYXkmJih0PW5ldyBVaW50OEFycmF5KHQuYnVmZmVyKSk7ZWxzZXtjb25zdCBFPWhuKGcpO3Q9bmV3IEUodCl9Y29uc3QgYj1tdShmLGcpLGg9dC5ieXRlTGVuZ3RoL2I7aWYoaCUxKXRocm93Imxlbmd0aCB3cm9uZyBzaXplIGZvciBmb3JtYXQ6ICIrRW4ocixwKTtsZXQgeDtpZihvPT09eWV8fG89PT1iZSlpZighaSYmIXMmJiFhKXtjb25zdCBFPU1hdGguY2JydChoKTtpZihFJTEhPT0wKXRocm93ImNhbid0IGd1ZXNzIGN1YmUgc2l6ZSBvZiBhcnJheSBvZiBudW1FbGVtZW50czogIitoO2k9RSxzPUUsYT1FfWVsc2UgaSYmKCFzfHwhYSk/KHg9U3QocixvLHMsYSxoL2kpLHM9eC53aWR0aCxhPXguaGVpZ2h0KTpzJiYoIWl8fCFhKT8oeD1TdChyLG8saSxhLGgvcyksaT14LndpZHRoLGE9eC5oZWlnaHQpOih4PVN0KHIsbyxpLHMsaC9hKSxpPXgud2lkdGgscz14LmhlaWdodCk7ZWxzZSB4PVN0KHIsbyxpLHMsaCksaT14LndpZHRoLHM9eC5oZWlnaHQ7aWYoTm4ociksci5waXhlbFN0b3JlaSh5cixuLnVucGFja0FsaWdubWVudHx8MSksQmUocixuKSxvPT09c2Upe2NvbnN0IEU9Yi90LkJZVEVTX1BFUl9FTEVNRU5ULHY9aC82KkU7RXIocixuKS5mb3JFYWNoKFI9Pntjb25zdCBQPXYqUi5uZHgsej10LnN1YmFycmF5KFAsUCt2KTtyLnRleEltYWdlMkQoUi5mYWNlLHUsZixpLHMsMCxwLGcseil9KX1lbHNlIG89PT15ZXx8bz09PWJlP3IudGV4SW1hZ2UzRChvLHUsZixpLHMsYSwwLHAsZyx0KTpyLnRleEltYWdlMkQobyx1LGYsaSxzLDAscCxnLHQpO3JldHVybnt3aWR0aDppLGhlaWdodDpzLGRlcHRoOmEsdHlwZTpnfX1mdW5jdGlvbiBTdShyLGUsdCl7Y29uc3Qgbj10LnRhcmdldHx8aWU7ci5iaW5kVGV4dHVyZShuLGUpO2NvbnN0IG89dC5sZXZlbHx8MCxpPXQuaW50ZXJuYWxGb3JtYXR8fHQuZm9ybWF0fHxTLHM9WWUoaSksYT10LmZvcm1hdHx8cy5mb3JtYXQsdT10LnR5cGV8fHMudHlwZTtpZihCZShyLHQpLG49PT1zZSlmb3IobGV0IGY9MDtmPDY7KytmKXIudGV4SW1hZ2UyRChtcitmLG8saSx0LndpZHRoLHQuaGVpZ2h0LDAsYSx1LG51bGwpO2Vsc2Ugbj09PXllfHxuPT09YmU/ci50ZXhJbWFnZTNEKG4sbyxpLHQud2lkdGgsdC5oZWlnaHQsdC5kZXB0aCwwLGEsdSxudWxsKTpyLnRleEltYWdlMkQobixvLGksdC53aWR0aCx0LmhlaWdodCwwLGEsdSxudWxsKX1mdW5jdGlvbiAkbihyLGUsdCl7dD10fHxRZSxlPWV8fG9lLnRleHR1cmVPcHRpb25zO2NvbnN0IG49ci5jcmVhdGVUZXh0dXJlKCksbz1lLnRhcmdldHx8aWU7bGV0IGk9ZS53aWR0aHx8MSxzPWUuaGVpZ2h0fHwxO2NvbnN0IGE9ZS5pbnRlcm5hbEZvcm1hdHx8UztyLmJpbmRUZXh0dXJlKG8sbiksbz09PXNlJiYoci50ZXhQYXJhbWV0ZXJpKG8sX3QseHQpLHIudGV4UGFyYW1ldGVyaShvLHZ0LHh0KSk7bGV0IHU9ZS5zcmM7aWYodSlpZih0eXBlb2YgdT09ImZ1bmN0aW9uIiYmKHU9dShyLGUpKSx0eXBlb2YgdT09InN0cmluZyIpVHUocixuLGUsdCk7ZWxzZSBpZihWZSh1KXx8QXJyYXkuaXNBcnJheSh1KSYmKHR5cGVvZiB1WzBdPT0ibnVtYmVyInx8QXJyYXkuaXNBcnJheSh1WzBdKXx8VmUodVswXSkpKXtjb25zdCBmPUl1KHIsbix1LGUpO2k9Zi53aWR0aCxzPWYuaGVpZ2h0fWVsc2UgQXJyYXkuaXNBcnJheSh1KSYmKHR5cGVvZiB1WzBdPT0ic3RyaW5nInx8R24odVswXSkpP289PT1zZT93dShyLG4sZSx0KTpBdShyLG4sZSx0KTooem4ocixuLHUsZSksaT11LndpZHRoLHM9dS5oZWlnaHQpO2Vsc2UgU3UocixuLGUpO3JldHVybiBYZShlKSYmX3IocixuLGUsaSxzLGEpLExuKHIsbixlKSxufWNvbnN0IEFyPW1uO2Z1bmN0aW9uIFduKHIpe3JldHVybiB0eXBlb2YgZG9jdW1lbnQ8InUiJiZkb2N1bWVudC5nZXRFbGVtZW50QnlJZD9kb2N1bWVudC5nZXRFbGVtZW50QnlJZChyKTpudWxsfWNvbnN0IFJ0PTMzOTg0LEZ0PTM0OTYyLFJ1PTM0OTYzLEZ1PTM1NzEzLFB1PTM1NzE0LGt1PTM1NjMyLER1PTM1NjMzLEN1PTM1OTgxLFZuPTM1NzE4LEJ1PTM1NzIxLE11PTM1OTcxLE91PTM1MzgyLFV1PTM1Mzk2LE51PTM1Mzk4LEx1PTM1MzkyLHp1PTM1Mzk1LFB0PTUxMjYsSG49MzU2NjQsam49MzU2NjUsWW49MzU2NjYsSXI9NTEyNCxYbj0zNTY2NyxRbj0zNTY2OCxxbj0zNTY2OSxLbj0zNTY3MCxKbj0zNTY3MSxabj0zNTY3Mixlbz0zNTY3Myx0bz0zNTY3NCxybz0zNTY3NSxubz0zNTY3NixHdT0zNTY3OCwkdT0zNTY4MCxXdT0zNTY3OSxWdT0zNTY4MixIdT0zNTY4NSxqdT0zNTY4NixZdT0zNTY4NyxYdT0zNTY4OCxRdT0zNTY4OSxxdT0zNTY5MCxLdT0zNjI4OSxKdT0zNjI5MixadT0zNjI5MyxTcj01MTI1LG9vPTM2Mjk0LGlvPTM2Mjk1LHNvPTM2Mjk2LGVjPTM2Mjk4LHRjPTM2Mjk5LHJjPTM2MzAwLG5jPTM2MzAzLG9jPTM2MzA2LGljPTM2MzA3LHNjPTM2MzA4LGFjPTM2MzExLGt0PTM1NTMsRHQ9MzQwNjcsUnI9MzI4NzksQ3Q9MzU4NjYsXz17fTtmdW5jdGlvbiBhbyhyLGUpe3JldHVybiBfW2VdLmJpbmRQb2ludH1mdW5jdGlvbiB1YyhyLGUpe3JldHVybiBmdW5jdGlvbih0KXtyLnVuaWZvcm0xZihlLHQpfX1mdW5jdGlvbiBjYyhyLGUpe3JldHVybiBmdW5jdGlvbih0KXtyLnVuaWZvcm0xZnYoZSx0KX19ZnVuY3Rpb24gZmMocixlKXtyZXR1cm4gZnVuY3Rpb24odCl7ci51bmlmb3JtMmZ2KGUsdCl9fWZ1bmN0aW9uIGxjKHIsZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3IudW5pZm9ybTNmdihlLHQpfX1mdW5jdGlvbiBkYyhyLGUpe3JldHVybiBmdW5jdGlvbih0KXtyLnVuaWZvcm00ZnYoZSx0KX19ZnVuY3Rpb24gdW8ocixlKXtyZXR1cm4gZnVuY3Rpb24odCl7ci51bmlmb3JtMWkoZSx0KX19ZnVuY3Rpb24gY28ocixlKXtyZXR1cm4gZnVuY3Rpb24odCl7ci51bmlmb3JtMWl2KGUsdCl9fWZ1bmN0aW9uIGZvKHIsZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3IudW5pZm9ybTJpdihlLHQpfX1mdW5jdGlvbiBsbyhyLGUpe3JldHVybiBmdW5jdGlvbih0KXtyLnVuaWZvcm0zaXYoZSx0KX19ZnVuY3Rpb24gaG8ocixlKXtyZXR1cm4gZnVuY3Rpb24odCl7ci51bmlmb3JtNGl2KGUsdCl9fWZ1bmN0aW9uIGhjKHIsZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3IudW5pZm9ybTF1aShlLHQpfX1mdW5jdGlvbiBtYyhyLGUpe3JldHVybiBmdW5jdGlvbih0KXtyLnVuaWZvcm0xdWl2KGUsdCl9fWZ1bmN0aW9uIHBjKHIsZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3IudW5pZm9ybTJ1aXYoZSx0KX19ZnVuY3Rpb24gZ2MocixlKXtyZXR1cm4gZnVuY3Rpb24odCl7ci51bmlmb3JtM3VpdihlLHQpfX1mdW5jdGlvbiB5YyhyLGUpe3JldHVybiBmdW5jdGlvbih0KXtyLnVuaWZvcm00dWl2KGUsdCl9fWZ1bmN0aW9uIGJjKHIsZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3IudW5pZm9ybU1hdHJpeDJmdihlLCExLHQpfX1mdW5jdGlvbiB4YyhyLGUpe3JldHVybiBmdW5jdGlvbih0KXtyLnVuaWZvcm1NYXRyaXgzZnYoZSwhMSx0KX19ZnVuY3Rpb24gX2MocixlKXtyZXR1cm4gZnVuY3Rpb24odCl7ci51bmlmb3JtTWF0cml4NGZ2KGUsITEsdCl9fWZ1bmN0aW9uIHZjKHIsZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3IudW5pZm9ybU1hdHJpeDJ4M2Z2KGUsITEsdCl9fWZ1bmN0aW9uIEVjKHIsZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3IudW5pZm9ybU1hdHJpeDN4MmZ2KGUsITEsdCl9fWZ1bmN0aW9uIFRjKHIsZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3IudW5pZm9ybU1hdHJpeDJ4NGZ2KGUsITEsdCl9fWZ1bmN0aW9uIHdjKHIsZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3IudW5pZm9ybU1hdHJpeDR4MmZ2KGUsITEsdCl9fWZ1bmN0aW9uIEFjKHIsZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3IudW5pZm9ybU1hdHJpeDN4NGZ2KGUsITEsdCl9fWZ1bmN0aW9uIEljKHIsZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3IudW5pZm9ybU1hdHJpeDR4M2Z2KGUsITEsdCl9fWZ1bmN0aW9uIFUocixlLHQsbil7Y29uc3Qgbz1hbyhyLGUpO3JldHVybiBXZShyKT9mdW5jdGlvbihpKXtsZXQgcyxhOyFpfHxscihyLGkpPyhzPWksYT1udWxsKToocz1pLnRleHR1cmUsYT1pLnNhbXBsZXIpLHIudW5pZm9ybTFpKG4sdCksci5hY3RpdmVUZXh0dXJlKFJ0K3QpLHIuYmluZFRleHR1cmUobyxzKSxyLmJpbmRTYW1wbGVyKHQsYSl9OmZ1bmN0aW9uKGkpe3IudW5pZm9ybTFpKG4sdCksci5hY3RpdmVUZXh0dXJlKFJ0K3QpLHIuYmluZFRleHR1cmUobyxpKX19ZnVuY3Rpb24gTihyLGUsdCxuLG8pe2NvbnN0IGk9YW8ocixlKSxzPW5ldyBJbnQzMkFycmF5KG8pO2ZvcihsZXQgYT0wO2E8bzsrK2Epc1thXT10K2E7cmV0dXJuIFdlKHIpP2Z1bmN0aW9uKGEpe3IudW5pZm9ybTFpdihuLHMpLGEuZm9yRWFjaChmdW5jdGlvbih1LGYpe3IuYWN0aXZlVGV4dHVyZShSdCtzW2ZdKTtsZXQgZCxwOyF1fHxscihyLHUpPyhkPXUscD1udWxsKTooZD11LnRleHR1cmUscD11LnNhbXBsZXIpLHIuYmluZFNhbXBsZXIodCxwKSxyLmJpbmRUZXh0dXJlKGksZCl9KX06ZnVuY3Rpb24oYSl7ci51bmlmb3JtMWl2KG4scyksYS5mb3JFYWNoKGZ1bmN0aW9uKHUsZil7ci5hY3RpdmVUZXh0dXJlKFJ0K3NbZl0pLHIuYmluZFRleHR1cmUoaSx1KX0pfX1fW1B0XT17VHlwZTpGbG9hdDMyQXJyYXksc2l6ZTo0LHNldHRlcjp1YyxhcnJheVNldHRlcjpjY30sX1tIbl09e1R5cGU6RmxvYXQzMkFycmF5LHNpemU6OCxzZXR0ZXI6ZmMsY29sczoyfSxfW2puXT17VHlwZTpGbG9hdDMyQXJyYXksc2l6ZToxMixzZXR0ZXI6bGMsY29sczozfSxfW1luXT17VHlwZTpGbG9hdDMyQXJyYXksc2l6ZToxNixzZXR0ZXI6ZGMsY29sczo0fSxfW0lyXT17VHlwZTpJbnQzMkFycmF5LHNpemU6NCxzZXR0ZXI6dW8sYXJyYXlTZXR0ZXI6Y299LF9bWG5dPXtUeXBlOkludDMyQXJyYXksc2l6ZTo4LHNldHRlcjpmbyxjb2xzOjJ9LF9bUW5dPXtUeXBlOkludDMyQXJyYXksc2l6ZToxMixzZXR0ZXI6bG8sY29sczozfSxfW3FuXT17VHlwZTpJbnQzMkFycmF5LHNpemU6MTYsc2V0dGVyOmhvLGNvbHM6NH0sX1tTcl09e1R5cGU6VWludDMyQXJyYXksc2l6ZTo0LHNldHRlcjpoYyxhcnJheVNldHRlcjptY30sX1tvb109e1R5cGU6VWludDMyQXJyYXksc2l6ZTo4LHNldHRlcjpwYyxjb2xzOjJ9LF9baW9dPXtUeXBlOlVpbnQzMkFycmF5LHNpemU6MTIsc2V0dGVyOmdjLGNvbHM6M30sX1tzb109e1R5cGU6VWludDMyQXJyYXksc2l6ZToxNixzZXR0ZXI6eWMsY29sczo0fSxfW0tuXT17VHlwZTpVaW50MzJBcnJheSxzaXplOjQsc2V0dGVyOnVvLGFycmF5U2V0dGVyOmNvfSxfW0puXT17VHlwZTpVaW50MzJBcnJheSxzaXplOjgsc2V0dGVyOmZvLGNvbHM6Mn0sX1tabl09e1R5cGU6VWludDMyQXJyYXksc2l6ZToxMixzZXR0ZXI6bG8sY29sczozfSxfW2VvXT17VHlwZTpVaW50MzJBcnJheSxzaXplOjE2LHNldHRlcjpobyxjb2xzOjR9LF9bdG9dPXtUeXBlOkZsb2F0MzJBcnJheSxzaXplOjMyLHNldHRlcjpiYyxyb3dzOjIsY29sczoyfSxfW3JvXT17VHlwZTpGbG9hdDMyQXJyYXksc2l6ZTo0OCxzZXR0ZXI6eGMscm93czozLGNvbHM6M30sX1tub109e1R5cGU6RmxvYXQzMkFycmF5LHNpemU6NjQsc2V0dGVyOl9jLHJvd3M6NCxjb2xzOjR9LF9bSHVdPXtUeXBlOkZsb2F0MzJBcnJheSxzaXplOjMyLHNldHRlcjp2Yyxyb3dzOjIsY29sczozfSxfW2p1XT17VHlwZTpGbG9hdDMyQXJyYXksc2l6ZTozMixzZXR0ZXI6VGMscm93czoyLGNvbHM6NH0sX1tZdV09e1R5cGU6RmxvYXQzMkFycmF5LHNpemU6NDgsc2V0dGVyOkVjLHJvd3M6Myxjb2xzOjJ9LF9bWHVdPXtUeXBlOkZsb2F0MzJBcnJheSxzaXplOjQ4LHNldHRlcjpBYyxyb3dzOjMsY29sczo0fSxfW1F1XT17VHlwZTpGbG9hdDMyQXJyYXksc2l6ZTo2NCxzZXR0ZXI6d2Mscm93czo0LGNvbHM6Mn0sX1txdV09e1R5cGU6RmxvYXQzMkFycmF5LHNpemU6NjQsc2V0dGVyOkljLHJvd3M6NCxjb2xzOjN9LF9bR3VdPXtUeXBlOm51bGwsc2l6ZTowLHNldHRlcjpVLGFycmF5U2V0dGVyOk4sYmluZFBvaW50Omt0fSxfWyR1XT17VHlwZTpudWxsLHNpemU6MCxzZXR0ZXI6VSxhcnJheVNldHRlcjpOLGJpbmRQb2ludDpEdH0sX1tXdV09e1R5cGU6bnVsbCxzaXplOjAsc2V0dGVyOlUsYXJyYXlTZXR0ZXI6TixiaW5kUG9pbnQ6UnJ9LF9bVnVdPXtUeXBlOm51bGwsc2l6ZTowLHNldHRlcjpVLGFycmF5U2V0dGVyOk4sYmluZFBvaW50Omt0fSxfW0t1XT17VHlwZTpudWxsLHNpemU6MCxzZXR0ZXI6VSxhcnJheVNldHRlcjpOLGJpbmRQb2ludDpDdH0sX1tKdV09e1R5cGU6bnVsbCxzaXplOjAsc2V0dGVyOlUsYXJyYXlTZXR0ZXI6TixiaW5kUG9pbnQ6Q3R9LF9bWnVdPXtUeXBlOm51bGwsc2l6ZTowLHNldHRlcjpVLGFycmF5U2V0dGVyOk4sYmluZFBvaW50OkR0fSxfW2VjXT17VHlwZTpudWxsLHNpemU6MCxzZXR0ZXI6VSxhcnJheVNldHRlcjpOLGJpbmRQb2ludDprdH0sX1t0Y109e1R5cGU6bnVsbCxzaXplOjAsc2V0dGVyOlUsYXJyYXlTZXR0ZXI6TixiaW5kUG9pbnQ6UnJ9LF9bcmNdPXtUeXBlOm51bGwsc2l6ZTowLHNldHRlcjpVLGFycmF5U2V0dGVyOk4sYmluZFBvaW50OkR0fSxfW25jXT17VHlwZTpudWxsLHNpemU6MCxzZXR0ZXI6VSxhcnJheVNldHRlcjpOLGJpbmRQb2ludDpDdH0sX1tvY109e1R5cGU6bnVsbCxzaXplOjAsc2V0dGVyOlUsYXJyYXlTZXR0ZXI6TixiaW5kUG9pbnQ6a3R9LF9baWNdPXtUeXBlOm51bGwsc2l6ZTowLHNldHRlcjpVLGFycmF5U2V0dGVyOk4sYmluZFBvaW50OlJyfSxfW3NjXT17VHlwZTpudWxsLHNpemU6MCxzZXR0ZXI6VSxhcnJheVNldHRlcjpOLGJpbmRQb2ludDpEdH0sX1thY109e1R5cGU6bnVsbCxzaXplOjAsc2V0dGVyOlUsYXJyYXlTZXR0ZXI6TixiaW5kUG9pbnQ6Q3R9O2Z1bmN0aW9uIEJ0KHIsZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe2lmKHQudmFsdWUpc3dpdGNoKHIuZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KGUpLHQudmFsdWUubGVuZ3RoKXtjYXNlIDQ6ci52ZXJ0ZXhBdHRyaWI0ZnYoZSx0LnZhbHVlKTticmVhaztjYXNlIDM6ci52ZXJ0ZXhBdHRyaWIzZnYoZSx0LnZhbHVlKTticmVhaztjYXNlIDI6ci52ZXJ0ZXhBdHRyaWIyZnYoZSx0LnZhbHVlKTticmVhaztjYXNlIDE6ci52ZXJ0ZXhBdHRyaWIxZnYoZSx0LnZhbHVlKTticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigidGhlIGxlbmd0aCBvZiBhIGZsb2F0IGNvbnN0YW50IHZhbHVlIG11c3QgYmUgYmV0d2VlbiAxIGFuZCA0ISIpfWVsc2Ugci5iaW5kQnVmZmVyKEZ0LHQuYnVmZmVyKSxyLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KGUpLHIudmVydGV4QXR0cmliUG9pbnRlcihlLHQubnVtQ29tcG9uZW50c3x8dC5zaXplLHQudHlwZXx8UHQsdC5ub3JtYWxpemV8fCExLHQuc3RyaWRlfHwwLHQub2Zmc2V0fHwwKSxyLnZlcnRleEF0dHJpYkRpdmlzb3ImJnIudmVydGV4QXR0cmliRGl2aXNvcihlLHQuZGl2aXNvcnx8MCl9fWZ1bmN0aW9uIHVlKHIsZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe2lmKHQudmFsdWUpaWYoci5kaXNhYmxlVmVydGV4QXR0cmliQXJyYXkoZSksdC52YWx1ZS5sZW5ndGg9PT00KXIudmVydGV4QXR0cmliNGl2KGUsdC52YWx1ZSk7ZWxzZSB0aHJvdyBuZXcgRXJyb3IoIlRoZSBsZW5ndGggb2YgYW4gaW50ZWdlciBjb25zdGFudCB2YWx1ZSBtdXN0IGJlIDQhIik7ZWxzZSByLmJpbmRCdWZmZXIoRnQsdC5idWZmZXIpLHIuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoZSksci52ZXJ0ZXhBdHRyaWJJUG9pbnRlcihlLHQubnVtQ29tcG9uZW50c3x8dC5zaXplLHQudHlwZXx8SXIsdC5zdHJpZGV8fDAsdC5vZmZzZXR8fDApLHIudmVydGV4QXR0cmliRGl2aXNvciYmci52ZXJ0ZXhBdHRyaWJEaXZpc29yKGUsdC5kaXZpc29yfHwwKX19ZnVuY3Rpb24gTXQocixlKXtyZXR1cm4gZnVuY3Rpb24odCl7aWYodC52YWx1ZSlpZihyLmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShlKSx0LnZhbHVlLmxlbmd0aD09PTQpci52ZXJ0ZXhBdHRyaWI0dWl2KGUsdC52YWx1ZSk7ZWxzZSB0aHJvdyBuZXcgRXJyb3IoIlRoZSBsZW5ndGggb2YgYW4gdW5zaWduZWQgaW50ZWdlciBjb25zdGFudCB2YWx1ZSBtdXN0IGJlIDQhIik7ZWxzZSByLmJpbmRCdWZmZXIoRnQsdC5idWZmZXIpLHIuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoZSksci52ZXJ0ZXhBdHRyaWJJUG9pbnRlcihlLHQubnVtQ29tcG9uZW50c3x8dC5zaXplLHQudHlwZXx8U3IsdC5zdHJpZGV8fDAsdC5vZmZzZXR8fDApLHIudmVydGV4QXR0cmliRGl2aXNvciYmci52ZXJ0ZXhBdHRyaWJEaXZpc29yKGUsdC5kaXZpc29yfHwwKX19ZnVuY3Rpb24gRnIocixlLHQpe2NvbnN0IG49dC5zaXplLG89dC5jb3VudDtyZXR1cm4gZnVuY3Rpb24oaSl7ci5iaW5kQnVmZmVyKEZ0LGkuYnVmZmVyKTtjb25zdCBzPWkuc2l6ZXx8aS5udW1Db21wb25lbnRzfHxuLGE9cy9vLHU9aS50eXBlfHxQdCxkPV9bdV0uc2l6ZSpzLHA9aS5ub3JtYWxpemV8fCExLGc9aS5vZmZzZXR8fDAsYj1kL287Zm9yKGxldCBoPTA7aDxvOysraClyLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KGUraCksci52ZXJ0ZXhBdHRyaWJQb2ludGVyKGUraCxhLHUscCxkLGcrYipoKSxyLnZlcnRleEF0dHJpYkRpdmlzb3ImJnIudmVydGV4QXR0cmliRGl2aXNvcihlK2gsaS5kaXZpc29yfHwwKX19Y29uc3QgRj17fTtGW1B0XT17c2l6ZTo0LHNldHRlcjpCdH0sRltIbl09e3NpemU6OCxzZXR0ZXI6QnR9LEZbam5dPXtzaXplOjEyLHNldHRlcjpCdH0sRltZbl09e3NpemU6MTYsc2V0dGVyOkJ0fSxGW0lyXT17c2l6ZTo0LHNldHRlcjp1ZX0sRltYbl09e3NpemU6OCxzZXR0ZXI6dWV9LEZbUW5dPXtzaXplOjEyLHNldHRlcjp1ZX0sRltxbl09e3NpemU6MTYsc2V0dGVyOnVlfSxGW1NyXT17c2l6ZTo0LHNldHRlcjpNdH0sRltvb109e3NpemU6OCxzZXR0ZXI6TXR9LEZbaW9dPXtzaXplOjEyLHNldHRlcjpNdH0sRltzb109e3NpemU6MTYsc2V0dGVyOk10fSxGW0tuXT17c2l6ZTo0LHNldHRlcjp1ZX0sRltKbl09e3NpemU6OCxzZXR0ZXI6dWV9LEZbWm5dPXtzaXplOjEyLHNldHRlcjp1ZX0sRltlb109e3NpemU6MTYsc2V0dGVyOnVlfSxGW3RvXT17c2l6ZTo0LHNldHRlcjpGcixjb3VudDoyfSxGW3JvXT17c2l6ZTo5LHNldHRlcjpGcixjb3VudDozfSxGW25vXT17c2l6ZToxNixzZXR0ZXI6RnIsY291bnQ6NH07Y29uc3QgU2M9L0VSUk9SOlxzKlxkKzooXGQrKS9naTtmdW5jdGlvbiBSYyhyLGU9IiIsdD0wKXtjb25zdCBuPVsuLi5lLm1hdGNoQWxsKFNjKV0sbz1uZXcgTWFwKG4ubWFwKChpLHMpPT57Y29uc3QgYT1wYXJzZUludChpWzFdKSx1PW5bcysxXSxmPXU/dS5pbmRleDplLmxlbmd0aCxkPWUuc3Vic3RyaW5nKGkuaW5kZXgsZik7cmV0dXJuW2EtMSxkXX0pKTtyZXR1cm4gci5zcGxpdChgCmApLm1hcCgoaSxzKT0+e2NvbnN0IGE9by5nZXQocyk7cmV0dXJuYCR7cysxK3R9OiAke2l9JHthP2AKCl5eXiAke2F9YDoiIn1gfSkuam9pbihgCmApfWNvbnN0IG1vPS9eWyBcdF0qXG4vO2Z1bmN0aW9uIHBvKHIpe2xldCBlPTA7cmV0dXJuIG1vLnRlc3QocikmJihlPTEscj1yLnJlcGxhY2UobW8sIiIpKSx7bGluZU9mZnNldDplLHNoYWRlclNvdXJjZTpyfX1mdW5jdGlvbiBGYyhyLGUpe3JldHVybiByLmVycm9yQ2FsbGJhY2soZSksci5jYWxsYmFjayYmc2V0VGltZW91dCgoKT0+e3IuY2FsbGJhY2soYCR7ZX0KJHtyLmVycm9ycy5qb2luKGAKYCl9YCl9KSxudWxsfWZ1bmN0aW9uIFBjKHIsZSx0LG4pe2lmKG49bnx8QXIsIXIuZ2V0U2hhZGVyUGFyYW1ldGVyKHQsRnUpKXtjb25zdCBpPXIuZ2V0U2hhZGVySW5mb0xvZyh0KSx7bGluZU9mZnNldDpzLHNoYWRlclNvdXJjZTphfT1wbyhyLmdldFNoYWRlclNvdXJjZSh0KSksdT1gJHtSYyhhLGkscyl9CkVycm9yIGNvbXBpbGluZyAke0VuKHIsZSl9OiAke2l9YDtyZXR1cm4gbih1KSx1fXJldHVybiIifWZ1bmN0aW9uIFByKHIsZSx0KXtsZXQgbixvLGk7aWYodHlwZW9mIGU9PSJmdW5jdGlvbiImJih0PWUsZT12b2lkIDApLHR5cGVvZiByPT0iZnVuY3Rpb24iKXQ9cixyPXZvaWQgMDtlbHNlIGlmKHImJiFBcnJheS5pc0FycmF5KHIpKXtjb25zdCBmPXI7dD1mLmVycm9yQ2FsbGJhY2sscj1mLmF0dHJpYkxvY2F0aW9ucyxuPWYudHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5ncyxvPWYudHJhbnNmb3JtRmVlZGJhY2tNb2RlLGk9Zi5jYWxsYmFja31jb25zdCBzPXR8fEFyLGE9W10sdT17ZXJyb3JDYWxsYmFjayhmLC4uLmQpe2EucHVzaChmKSxzKGYsLi4uZCl9LHRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZ3M6bix0cmFuc2Zvcm1GZWVkYmFja01vZGU6byxjYWxsYmFjazppLGVycm9yczphfTt7bGV0IGY9e307QXJyYXkuaXNBcnJheShyKT9yLmZvckVhY2goZnVuY3Rpb24oZCxwKXtmW2RdPWU/ZVtwXTpwfSk6Zj1yfHx7fSx1LmF0dHJpYkxvY2F0aW9ucz1mfXJldHVybiB1fWNvbnN0IGtjPVsiVkVSVEVYX1NIQURFUiIsIkZSQUdNRU5UX1NIQURFUiJdO2Z1bmN0aW9uIERjKHIsZSl7aWYoZS5pbmRleE9mKCJmcmFnIik+PTApcmV0dXJuIGt1O2lmKGUuaW5kZXhPZigidmVydCIpPj0wKXJldHVybiBEdX1mdW5jdGlvbiBDYyhyLGUsdCl7Y29uc3Qgbj1yLmdldEF0dGFjaGVkU2hhZGVycyhlKTtmb3IoY29uc3QgbyBvZiBuKXQuaGFzKG8pJiZyLmRlbGV0ZVNoYWRlcihvKTtyLmRlbGV0ZVByb2dyYW0oZSl9Y29uc3QgQmM9KHI9MCk9Pm5ldyBQcm9taXNlKGU9PnNldFRpbWVvdXQoZSxyKSk7ZnVuY3Rpb24gTWMocixlLHQpe2NvbnN0IG49ci5jcmVhdGVQcm9ncmFtKCkse2F0dHJpYkxvY2F0aW9uczpvLHRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZ3M6aSx0cmFuc2Zvcm1GZWVkYmFja01vZGU6c309UHIodCk7Zm9yKGxldCBhPTA7YTxlLmxlbmd0aDsrK2Epe2xldCB1PWVbYV07aWYodHlwZW9mIHU9PSJzdHJpbmciKXtjb25zdCBmPVduKHUpLGQ9Zj9mLnRleHQ6dTtsZXQgcD1yW2tjW2FdXTtmJiZmLnR5cGUmJihwPURjKHIsZi50eXBlKXx8cCksdT1yLmNyZWF0ZVNoYWRlcihwKSxyLnNoYWRlclNvdXJjZSh1LHBvKGQpLnNoYWRlclNvdXJjZSksci5jb21waWxlU2hhZGVyKHUpLHIuYXR0YWNoU2hhZGVyKG4sdSl9fU9iamVjdC5lbnRyaWVzKG8pLmZvckVhY2goKFthLHVdKT0+ci5iaW5kQXR0cmliTG9jYXRpb24obix1LGEpKTt7bGV0IGE9aTthJiYoYS5hdHRyaWJzJiYoYT1hLmF0dHJpYnMpLEFycmF5LmlzQXJyYXkoYSl8fChhPU9iamVjdC5rZXlzKGEpKSxyLnRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZ3MobixhLHN8fEN1KSl9cmV0dXJuIHIubGlua1Byb2dyYW0obiksbn1mdW5jdGlvbiBPYyhyLGUsdCxuLG8pe2NvbnN0IGk9UHIodCxuLG8pLHM9bmV3IFNldChlKSxhPU1jKHIsZSxpKTtmdW5jdGlvbiB1KGYsZCl7Y29uc3QgcD1OYyhmLGQsaS5lcnJvckNhbGxiYWNrKTtyZXR1cm4gcCYmQ2MoZixkLHMpLHB9aWYoaS5jYWxsYmFjayl7VWMocixhKS50aGVuKCgpPT57Y29uc3QgZj11KHIsYSk7aS5jYWxsYmFjayhmLGY/dm9pZCAwOmEpfSk7cmV0dXJufXJldHVybiB1KHIsYSk/dm9pZCAwOmF9YXN5bmMgZnVuY3Rpb24gVWMocixlKXtjb25zdCB0PXIuZ2V0RXh0ZW5zaW9uKCJLSFJfcGFyYWxsZWxfc2hhZGVyX2NvbXBpbGUiKSxuPXQ/KGkscyk9PmkuZ2V0UHJvZ3JhbVBhcmFtZXRlcihzLHQuQ09NUExFVElPTl9TVEFUVVNfS0hSKTooKT0+ITA7bGV0IG89MDtkbyBhd2FpdCBCYyhvKSxvPTFlMy82MDt3aGlsZSghbihyLGUpKX1mdW5jdGlvbiBOYyhyLGUsdCl7aWYodD10fHxBciwhci5nZXRQcm9ncmFtUGFyYW1ldGVyKGUsUHUpKXtjb25zdCBvPXIuZ2V0UHJvZ3JhbUluZm9Mb2coZSk7dChgRXJyb3IgaW4gcHJvZ3JhbSBsaW5raW5nOiAke299YCk7Y29uc3Qgcz1yLmdldEF0dGFjaGVkU2hhZGVycyhlKS5tYXAoYT0+UGMocixyLmdldFNoYWRlclBhcmFtZXRlcihhLHIuU0hBREVSX1RZUEUpLGEsdCkpO3JldHVybmAke299CiR7cy5maWx0ZXIoYT0+YSkuam9pbihgCmApfWB9fWZ1bmN0aW9uIExjKHIsZSx0LG4sbyl7cmV0dXJuIE9jKHIsZSx0LG4sbyl9ZnVuY3Rpb24gZ28ocil7Y29uc3QgZT1yLm5hbWU7cmV0dXJuIGUuc3RhcnRzV2l0aCgiZ2xfIil8fGUuc3RhcnRzV2l0aCgid2ViZ2xfIil9Y29uc3QgemM9LyhcLnxcW3xdfFx3KykvZyxHYz1yPT5yPj0iMCImJnI8PSI5IjtmdW5jdGlvbiAkYyhyLGUsdCxuKXtjb25zdCBvPXIuc3BsaXQoemMpLmZpbHRlcihhPT5hIT09IiIpO2xldCBpPTAscz0iIjtmb3IoOzspe2NvbnN0IGE9b1tpKytdO3MrPWE7Y29uc3QgdT1HYyhhWzBdKSxmPXU/cGFyc2VJbnQoYSk6YTtpZih1JiYocys9b1tpKytdKSxpPT09by5sZW5ndGgpe3RbZl09ZTticmVha31lbHNle2NvbnN0IHA9b1tpKytdLGc9cD09PSJbIixiPXRbZl18fChnP1tdOnt9KTt0W2ZdPWIsdD1iLG5bc109bltzXXx8ZnVuY3Rpb24oaCl7cmV0dXJuIGZ1bmN0aW9uKHgpe3lvKGgseCl9fShiKSxzKz1wfX19ZnVuY3Rpb24gV2MocixlKXtsZXQgdD0wO2Z1bmN0aW9uIG4oYSx1LGYpe2NvbnN0IGQ9dS5uYW1lLmVuZHNXaXRoKCJbMF0iKSxwPXUudHlwZSxnPV9bcF07aWYoIWcpdGhyb3cgbmV3IEVycm9yKGB1bmtub3duIHR5cGU6IDB4JHtwLnRvU3RyaW5nKDE2KX1gKTtsZXQgYjtpZihnLmJpbmRQb2ludCl7Y29uc3QgaD10O3QrPXUuc2l6ZSxkP2I9Zy5hcnJheVNldHRlcihyLHAsaCxmLHUuc2l6ZSk6Yj1nLnNldHRlcihyLHAsaCxmLHUuc2l6ZSl9ZWxzZSBnLmFycmF5U2V0dGVyJiZkP2I9Zy5hcnJheVNldHRlcihyLGYpOmI9Zy5zZXR0ZXIocixmKTtyZXR1cm4gYi5sb2NhdGlvbj1mLGJ9Y29uc3Qgbz17fSxpPXt9LHM9ci5nZXRQcm9ncmFtUGFyYW1ldGVyKGUsVm4pO2ZvcihsZXQgYT0wO2E8czsrK2Epe2NvbnN0IHU9ci5nZXRBY3RpdmVVbmlmb3JtKGUsYSk7aWYoZ28odSkpY29udGludWU7bGV0IGY9dS5uYW1lO2YuZW5kc1dpdGgoIlswXSIpJiYoZj1mLnN1YnN0cigwLGYubGVuZ3RoLTMpKTtjb25zdCBkPXIuZ2V0VW5pZm9ybUxvY2F0aW9uKGUsdS5uYW1lKTtpZihkKXtjb25zdCBwPW4oZSx1LGQpO29bZl09cCwkYyhmLHAsaSxvKX19cmV0dXJuIG99ZnVuY3Rpb24gVmMocixlKXtjb25zdCB0PXt9LG49ci5nZXRQcm9ncmFtUGFyYW1ldGVyKGUsTXUpO2ZvcihsZXQgbz0wO288bjsrK28pe2NvbnN0IGk9ci5nZXRUcmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmcoZSxvKTt0W2kubmFtZV09e2luZGV4Om8sdHlwZTppLnR5cGUsc2l6ZTppLnNpemV9fXJldHVybiB0fWZ1bmN0aW9uIEhjKHIsZSl7Y29uc3QgdD1yLmdldFByb2dyYW1QYXJhbWV0ZXIoZSxWbiksbj1bXSxvPVtdO2ZvcihsZXQgYT0wO2E8dDsrK2Epe28ucHVzaChhKSxuLnB1c2goe30pO2NvbnN0IHU9ci5nZXRBY3RpdmVVbmlmb3JtKGUsYSk7blthXS5uYW1lPXUubmFtZX1bWyJVTklGT1JNX1RZUEUiLCJ0eXBlIl0sWyJVTklGT1JNX1NJWkUiLCJzaXplIl0sWyJVTklGT1JNX0JMT0NLX0lOREVYIiwiYmxvY2tOZHgiXSxbIlVOSUZPUk1fT0ZGU0VUIiwib2Zmc2V0Il1dLmZvckVhY2goZnVuY3Rpb24oYSl7Y29uc3QgdT1hWzBdLGY9YVsxXTtyLmdldEFjdGl2ZVVuaWZvcm1zKGUsbyxyW3VdKS5mb3JFYWNoKGZ1bmN0aW9uKGQscCl7bltwXVtmXT1kfSl9KTtjb25zdCBpPXt9LHM9ci5nZXRQcm9ncmFtUGFyYW1ldGVyKGUsT3UpO2ZvcihsZXQgYT0wO2E8czsrK2Epe2NvbnN0IHU9ci5nZXRBY3RpdmVVbmlmb3JtQmxvY2tOYW1lKGUsYSksZj17aW5kZXg6ci5nZXRVbmlmb3JtQmxvY2tJbmRleChlLHUpLHVzZWRCeVZlcnRleFNoYWRlcjpyLmdldEFjdGl2ZVVuaWZvcm1CbG9ja1BhcmFtZXRlcihlLGEsVXUpLHVzZWRCeUZyYWdtZW50U2hhZGVyOnIuZ2V0QWN0aXZlVW5pZm9ybUJsb2NrUGFyYW1ldGVyKGUsYSxOdSksc2l6ZTpyLmdldEFjdGl2ZVVuaWZvcm1CbG9ja1BhcmFtZXRlcihlLGEsTHUpLHVuaWZvcm1JbmRpY2VzOnIuZ2V0QWN0aXZlVW5pZm9ybUJsb2NrUGFyYW1ldGVyKGUsYSx6dSl9O2YudXNlZD1mLnVzZWRCeVZlcnRleFNoYWRlcnx8Zi51c2VkQnlGcmFnbWVudFNoYWRlcixpW3VdPWZ9cmV0dXJue2Jsb2NrU3BlY3M6aSx1bmlmb3JtRGF0YTpufX1mdW5jdGlvbiB5byhyLGUpe2Zvcihjb25zdCB0IGluIGUpe2NvbnN0IG49clt0XTt0eXBlb2Ygbj09ImZ1bmN0aW9uIj9uKGVbdF0pOnlvKHJbdF0sZVt0XSl9fWZ1bmN0aW9uIGJvKHIsLi4uZSl7Y29uc3QgdD1yLnVuaWZvcm1TZXR0ZXJzfHxyLG49ZS5sZW5ndGg7Zm9yKGxldCBvPTA7bzxuOysrbyl7Y29uc3QgaT1lW29dO2lmKEFycmF5LmlzQXJyYXkoaSkpe2NvbnN0IHM9aS5sZW5ndGg7Zm9yKGxldCBhPTA7YTxzOysrYSlibyh0LGlbYV0pfWVsc2UgZm9yKGNvbnN0IHMgaW4gaSl7Y29uc3QgYT10W3NdO2EmJmEoaVtzXSl9fX1mdW5jdGlvbiBqYyhyLGUpe2NvbnN0IHQ9e30sbj1yLmdldFByb2dyYW1QYXJhbWV0ZXIoZSxCdSk7Zm9yKGxldCBvPTA7bzxuOysrbyl7Y29uc3QgaT1yLmdldEFjdGl2ZUF0dHJpYihlLG8pO2lmKGdvKGkpKWNvbnRpbnVlO2NvbnN0IHM9ci5nZXRBdHRyaWJMb2NhdGlvbihlLGkubmFtZSksYT1GW2kudHlwZV0sdT1hLnNldHRlcihyLHMsYSk7dS5sb2NhdGlvbj1zLHRbaS5uYW1lXT11fXJldHVybiB0fWZ1bmN0aW9uIFljKHIsZSl7Zm9yKGNvbnN0IHQgaW4gZSl7Y29uc3Qgbj1yW3RdO24mJm4oZVt0XSl9fWZ1bmN0aW9uIFhjKHIsZSx0KXt0LnZlcnRleEFycmF5T2JqZWN0P3IuYmluZFZlcnRleEFycmF5KHQudmVydGV4QXJyYXlPYmplY3QpOihZYyhlLmF0dHJpYlNldHRlcnN8fGUsdC5hdHRyaWJzKSx0LmluZGljZXMmJnIuYmluZEJ1ZmZlcihSdSx0LmluZGljZXMpKX1mdW5jdGlvbiB4byhyLGUpe2NvbnN0IHQ9V2MocixlKSxuPWpjKHIsZSksbz17cHJvZ3JhbTplLHVuaWZvcm1TZXR0ZXJzOnQsYXR0cmliU2V0dGVyczpufTtyZXR1cm4gV2UocikmJihvLnVuaWZvcm1CbG9ja1NwZWM9SGMocixlKSxvLnRyYW5zZm9ybUZlZWRiYWNrSW5mbz1WYyhyLGUpKSxvfWNvbnN0IFFjPS9cc3x7fH18Oy87ZnVuY3Rpb24gcWMocixlLHQsbixvKXtjb25zdCBpPVByKHQsbixvKSxzPVtdO2lmKGU9ZS5tYXAoZnVuY3Rpb24oZil7aWYoIVFjLnRlc3QoZikpe2NvbnN0IGQ9V24oZik7aWYoZClmPWQudGV4dDtlbHNle2NvbnN0IHA9YG5vIGVsZW1lbnQgd2l0aCBpZDogJHtmfWA7aS5lcnJvckNhbGxiYWNrKHApLHMucHVzaChwKX19cmV0dXJuIGZ9KSxzLmxlbmd0aClyZXR1cm4gRmMoaSwiIik7Y29uc3QgYT1pLmNhbGxiYWNrO2EmJihpLmNhbGxiYWNrPShmLGQpPT57YShmLGY/dm9pZCAwOnhvKHIsZCkpfSk7Y29uc3QgdT1MYyhyLGUsaSk7cmV0dXJuIHU/eG8ocix1KTpudWxsfWNvbnN0IEtjPTQsX289NTEyMztmdW5jdGlvbiBKYyhyLGUsdCxuLG8saSl7dD10PT09dm9pZCAwP0tjOnQ7Y29uc3Qgcz1lLmluZGljZXMsYT1lLmVsZW1lbnRUeXBlLHU9bj09PXZvaWQgMD9lLm51bUVsZW1lbnRzOm47bz1vPT09dm9pZCAwPzA6byxhfHxzP2khPT12b2lkIDA/ci5kcmF3RWxlbWVudHNJbnN0YW5jZWQodCx1LGE9PT12b2lkIDA/X286ZS5lbGVtZW50VHlwZSxvLGkpOnIuZHJhd0VsZW1lbnRzKHQsdSxhPT09dm9pZCAwP19vOmUuZWxlbWVudFR5cGUsbyk6aSE9PXZvaWQgMD9yLmRyYXdBcnJheXNJbnN0YW5jZWQodCxvLHUsaSk6ci5kcmF3QXJyYXlzKHQsbyx1KX1jb25zdCB2bz0zNjE2MCxPdD0zNjE2MSxaYz0zNTUzLGVmPTUxMjEsdGY9NjQwMixyZj02NDA4LG5mPTMzMTkwLG9mPTM2MDEyLHNmPTM1MDU2LGFmPTM2MDEzLHVmPTMyODU0LGNmPTMyODU1LGZmPTM2MTk0LEVvPTMzMTg5LFRvPTY0MDEsd289MzYxNjgsa3I9MzQwNDEsRHI9MzYwNjQsVXQ9MzYwOTYsQW89MzYxMjgsQ3I9MzMzMDYsQnI9MzMwNzEsTXI9OTcyOSxsZj1be2Zvcm1hdDpyZix0eXBlOmVmLG1pbjpNcix3cmFwOkJyfSx7Zm9ybWF0OmtyfV0saj17fTtqW2tyXT1DcixqW1RvXT1BbyxqW3dvXT1BbyxqW3RmXT1VdCxqW0VvXT1VdCxqW25mXT1VdCxqW29mXT1VdCxqW3NmXT1DcixqW2FmXT1DcjtmdW5jdGlvbiBkZihyLGUpe3JldHVybiBqW3JdfHxqW2VdfWNvbnN0IGNlPXt9O2NlW3VmXT0hMCxjZVtjZl09ITAsY2VbZmZdPSEwLGNlW2tyXT0hMCxjZVtFb109ITAsY2VbVG9dPSEwLGNlW3dvXT0hMDtmdW5jdGlvbiBoZihyKXtyZXR1cm4gY2Vbcl19Y29uc3QgbWY9MzI7ZnVuY3Rpb24gcGYocil7cmV0dXJuIHI+PURyJiZyPERyK21mfWZ1bmN0aW9uIE50KHIsZSx0LG4pe2NvbnN0IG89dm8saT1yLmNyZWF0ZUZyYW1lYnVmZmVyKCk7ci5iaW5kRnJhbWVidWZmZXIobyxpKSx0PXR8fHIuZHJhd2luZ0J1ZmZlcldpZHRoLG49bnx8ci5kcmF3aW5nQnVmZmVySGVpZ2h0LGU9ZXx8bGY7Y29uc3Qgcz1bXSxhPXtmcmFtZWJ1ZmZlcjppLGF0dGFjaG1lbnRzOltdLHdpZHRoOnQsaGVpZ2h0Om59O3JldHVybiBlLmZvckVhY2goZnVuY3Rpb24odSxmKXtsZXQgZD11LmF0dGFjaG1lbnQ7Y29uc3QgcD11LnNhbXBsZXMsZz11LmZvcm1hdDtsZXQgYj11LmF0dGFjaG1lbnRQb2ludHx8ZGYoZyx1LmludGVybmFsRm9ybWF0KTtpZihifHwoYj1EcitmKSxwZihiKSYmcy5wdXNoKGIpLCFkKWlmKHAhPT12b2lkIDB8fGhmKGcpKWQ9ci5jcmVhdGVSZW5kZXJidWZmZXIoKSxyLmJpbmRSZW5kZXJidWZmZXIoT3QsZCkscD4xP3IucmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlKE90LHAsZyx0LG4pOnIucmVuZGVyYnVmZmVyU3RvcmFnZShPdCxnLHQsbik7ZWxzZXtjb25zdCBoPU9iamVjdC5hc3NpZ24oe30sdSk7aC53aWR0aD10LGguaGVpZ2h0PW4saC5hdXRvPT09dm9pZCAwJiYoaC5hdXRvPSExLGgubWluPWgubWlufHxoLm1pbk1hZ3x8TXIsaC5tYWc9aC5tYWd8fGgubWluTWFnfHxNcixoLndyYXBTPWgud3JhcFN8fGgud3JhcHx8QnIsaC53cmFwVD1oLndyYXBUfHxoLndyYXB8fEJyKSxkPSRuKHIsaCl9aWYoVHMocixkKSlyLmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKG8sYixPdCxkKTtlbHNlIGlmKGxyKHIsZCkpdS5sYXllciE9PXZvaWQgMD9yLmZyYW1lYnVmZmVyVGV4dHVyZUxheWVyKG8sYixkLHUubGV2ZWx8fDAsdS5sYXllcik6ci5mcmFtZWJ1ZmZlclRleHR1cmUyRChvLGIsdS50YXJnZXR8fFpjLGQsdS5sZXZlbHx8MCk7ZWxzZSB0aHJvdyBuZXcgRXJyb3IoInVua25vd24gYXR0YWNobWVudCB0eXBlIik7YS5hdHRhY2htZW50cy5wdXNoKGQpfSksci5kcmF3QnVmZmVycyYmci5kcmF3QnVmZmVycyhzKSxhfWZ1bmN0aW9uIGdmKHIsZSx0KXt0PXR8fHZvLGU/KHIuYmluZEZyYW1lYnVmZmVyKHQsZS5mcmFtZWJ1ZmZlciksci52aWV3cG9ydCgwLDAsZS53aWR0aCxlLmhlaWdodCkpOihyLmJpbmRGcmFtZWJ1ZmZlcih0LG51bGwpLHIudmlld3BvcnQoMCwwLHIuZHJhd2luZ0J1ZmZlcldpZHRoLHIuZHJhd2luZ0J1ZmZlckhlaWdodCkpfWZ1bmN0aW9uIEEocixlKXtyZXR1cm4oKT0+ZSBpbnN0YW5jZW9mIFdlYkdMVGV4dHVyZT9lOiRuKHIse3NyYzplLHdyYXA6ci5DTEFNUF9UT19FREdFfSl9Y29uc3QgTWU9MjtjbGFzcyB2ZXtjb25zdHJ1Y3RvcihlKXtsKHRoaXMsImlkIiwiXyIpO2wodGhpcywiY29udGV4dCIpO2wodGhpcywib3V0cHV0Iik7bCh0aGlzLCJmYmkiKTtsKHRoaXMsIm9wdGlvbnMiKTtsKHRoaXMsInByb2dyYW1JbmZvIik7bCh0aGlzLCJidWZmZXJJbmZvIik7bCh0aGlzLCJwcm9maWxlciIpO2wodGhpcywibGFzdFJ1biIpO2NvbnN0e2NvbnRleHQ6dCx3aWR0aDpuLGhlaWdodDpvfT1lO3RoaXMuY29udGV4dD10LHRoaXMub3B0aW9ucz1lO2NvbnN0IGk9dGhpcy5idWlsZERlZmluZXMoKTt0aGlzLnByb2dyYW1JbmZvPXFjKHRoaXMuY29udGV4dCxbaSt0aGlzLmdldFZlcnRleFNoYWRlcigpLGkrdGhpcy5nZXRGcmFnbWVudFNoYWRlcigpXSksdGhpcy5idWZmZXJJbmZvPVlzKHRoaXMuY29udGV4dCx0aGlzLmdldEJ1ZmZlcnMoKSksdGhpcy5mYmk9TnQodGhpcy5jb250ZXh0LFt7Zm9ybWF0OnRoaXMuY29udGV4dC5SR0JBLHR5cGU6dGhpcy5jb250ZXh0LlVOU0lHTkVEX0JZVEUsbWluOnRoaXMuY29udGV4dC5MSU5FQVIsd3JhcDp0aGlzLmNvbnRleHQuQ0xBTVBfVE9fRURHRX1dLG4sbyksdGhpcy5vdXRwdXQ9dGhpcy5mYmkuYXR0YWNobWVudHNbMF19cmVzaXplT3V0cHV0KGUsdCl7dGhpcy5mYmk9TnQodGhpcy5jb250ZXh0LFt7Zm9ybWF0OnRoaXMuY29udGV4dC5SR0JBLHR5cGU6dGhpcy5jb250ZXh0LlVOU0lHTkVEX0JZVEUsbWluOnRoaXMuY29udGV4dC5MSU5FQVIsd3JhcDp0aGlzLmNvbnRleHQuQ0xBTVBfVE9fRURHRX1dLGUsdCksdGhpcy5vcHRpb25zLndpZHRoPWUsdGhpcy5vcHRpb25zLmhlaWdodD10LHRoaXMub3V0cHV0PXRoaXMuZmJpLmF0dGFjaG1lbnRzWzBdfWdldERlZmluZXMoKXtyZXR1cm57fX1nZXRCdWZmZXJzKCl7cmV0dXJue3Bvc2l0aW9uOntudW1Db21wb25lbnRzOjIsZGF0YTpbLTEsLTEsLTEsMSwxLC0xLDEsMSwtMSwxLDEsLTFdfSx0ZXh0dXJlX2Nvb3JkOntudW1Db21wb25lbnRzOjIsZGF0YTpbMCwwLDAsMSwxLDAsMSwxLDAsMSwxLDBdfX19YnVpbGREZWZpbmVzKCl7bGV0IGU9IiI7Y29uc3QgdD10aGlzLmdldERlZmluZXMoKTtmb3IobGV0IG4gaW4gdCllKz1gI2RlZmluZSAke259ICR7dFtuXS50b0ZpeGVkKDEpfQpgO3JldHVybiBlfXJ1bihlKXt2YXIgbyxpLHMsYSx1LGY7KG89dGhpcy5wcm9maWxlcik9PW51bGx8fG8ucHVzaENvbnRleHQoYFske3RoaXMuaWR9XSBQUk9HIDogJHt0aGlzLmNvbnN0cnVjdG9yLm5hbWV9YCksKGk9dGhpcy5wcm9maWxlcik9PW51bGx8fGkucHVzaENvbnRleHQoYFske3RoaXMuaWR9XSBVTklGT1JNU2ApO2Zvcihjb25zdCBkIGluIGUpdHlwZW9mIGVbZF09PSJmdW5jdGlvbiImJigocz10aGlzLnByb2ZpbGVyKT09bnVsbHx8cy5wdXNoQ29udGV4dChgWyR7dGhpcy5pZH1dIFVOSSA6ICR7ZH1gKSxlW2RdPWVbZF0oKSwoYT10aGlzLnByb2ZpbGVyKT09bnVsbHx8YS5wb3BDb250ZXh0KGBbJHt0aGlzLmlkfV0gVU5JIDogJHtkfWApKTsodT10aGlzLnByb2ZpbGVyKT09bnVsbHx8dS5wb3BDb250ZXh0KGBbJHt0aGlzLmlkfV0gVU5JRk9STVNgKTtjb25zdCB0PURhdGUubm93KCk7bGV0IG49MDt0aGlzLmxhc3RSdW4mJihuPSh0LXRoaXMubGFzdFJ1bikvMWUzKSx0aGlzLmxhc3RSdW49dCx0aGlzLmNvbnRleHQudmlld3BvcnQoMCwwLHRoaXMuY29udGV4dC5jYW52YXMud2lkdGgsdGhpcy5jb250ZXh0LmNhbnZhcy5oZWlnaHQpLHRoaXMuY29udGV4dC51c2VQcm9ncmFtKHRoaXMucHJvZ3JhbUluZm8ucHJvZ3JhbSksWGModGhpcy5jb250ZXh0LHRoaXMucHJvZ3JhbUluZm8sdGhpcy5idWZmZXJJbmZvKSxibyh0aGlzLnByb2dyYW1JbmZvLHtkZWx0YTpuLGNhbnZhczpbdGhpcy5jb250ZXh0LmNhbnZhcy53aWR0aCx0aGlzLmNvbnRleHQuY2FudmFzLmhlaWdodF0sLi4uZX0pLGdmKHRoaXMuY29udGV4dCx0aGlzLm9wdGlvbnMuZGlzYWJsZUZyYW1lYnVmZmVyP251bGw6dGhpcy5mYmkpLEpjKHRoaXMuY29udGV4dCx0aGlzLmJ1ZmZlckluZm8pLChmPXRoaXMucHJvZmlsZXIpPT1udWxsfHxmLnBvcENvbnRleHQoYFske3RoaXMuaWR9XSBQUk9HIDogJHt0aGlzLmNvbnN0cnVjdG9yLm5hbWV9YCl9c2V0UHJvZmlsZXIoZSl7dGhpcy5wcm9maWxlcj1lfX12YXIgeWY9YHByZWNpc2lvbiBtZWRpdW1wIGZsb2F0OwoKdmFyeWluZyB2ZWMyIF90ZXh0dXJlX2Nvb3JkOwoKdW5pZm9ybSBzYW1wbGVyMkQgYmFja2dyb3VuZDsKdW5pZm9ybSBzYW1wbGVyMkQgZm9yZWdyb3VuZDsKdW5pZm9ybSBzYW1wbGVyMkQgdGhyZXNob2xkOwoKdm9pZCBtYWluKCkgewogIHZlYzQgYmFja2dyb3VuZENvbG9yID0gdGV4dHVyZTJEKGJhY2tncm91bmQsIF90ZXh0dXJlX2Nvb3JkKTsKICB2ZWM0IGZvcmVncm91bmRDb2xvciA9IHRleHR1cmUyRChmb3JlZ3JvdW5kLCBfdGV4dHVyZV9jb29yZCk7CiAgdmVjNCB0cmVzaG9sZENvbG9yID0gdGV4dHVyZTJEKHRocmVzaG9sZCwgX3RleHR1cmVfY29vcmQpOwogIGdsX0ZyYWdDb2xvciA9IGZvcmVncm91bmRDb2xvciAqIHRyZXNob2xkQ29sb3IuYSArCiAgICAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yICogKDEuIC0gdHJlc2hvbGRDb2xvci5hKTsKfQpgLGJmPWB2YXJ5aW5nIHZlYzIgX3RleHR1cmVfY29vcmQ7CgphdHRyaWJ1dGUgdmVjMiBwb3NpdGlvbjsKYXR0cmlidXRlIHZlYzIgdGV4dHVyZV9jb29yZDsKCnZvaWQgbWFpbigpIHsKICBnbF9Qb3NpdGlvbiA9IHZlYzQocG9zaXRpb24sIDAuLCAxLik7CiAgX3RleHR1cmVfY29vcmQgPSB0ZXh0dXJlX2Nvb3JkOwogIF90ZXh0dXJlX2Nvb3JkLnkgPSAxLiAtIHRleHR1cmVfY29vcmQueTsKfQpgO2NsYXNzIE9yIGV4dGVuZHMgdmV7Z2V0RnJhZ21lbnRTaGFkZXIoKXtyZXR1cm4geWZ9Z2V0VmVydGV4U2hhZGVyKCl7cmV0dXJuIGJmfX1jbGFzcyBVcntjb25zdHJ1Y3Rvcigpe2wodGhpcywic3RlcHMiLFtdKTtsKHRoaXMsInByb2ZpbGVyIil9YWRkU3RlcChlKXt0aGlzLnN0ZXBzLnB1c2goZSl9YXN5bmMgcnVuKCl7Zm9yKGNvbnN0IGUgb2YgdGhpcy5zdGVwcyllLnByb2dyYW0ucnVuKGUuZ2V0VW5pZm9ybXMoKSl9cmVzaXplT3V0cHV0KGUsdCl7dmFyIG4sbzsobj10aGlzLnByb2ZpbGVyKT09bnVsbHx8bi5wdXNoQ29udGV4dChgUElQIFske3RoaXMuY29uc3RydWN0b3IubmFtZX1dYCk7Zm9yKGNvbnN0IGkgb2YgdGhpcy5zdGVwcylpLnByZXZlbnRSZXNpemV8fGkucHJvZ3JhbS5yZXNpemVPdXRwdXQoZSx0KTsobz10aGlzLnByb2ZpbGVyKT09bnVsbHx8by5wb3BDb250ZXh0KGBQSVAgWyR7dGhpcy5jb25zdHJ1Y3Rvci5uYW1lfV1gKX1zZXRQcm9maWxlcihlKXt0aGlzLnByb2ZpbGVyPWU7Zm9yKGNvbnN0IHQgb2YgdGhpcy5zdGVwcyl0LnByb2dyYW0uc2V0UHJvZmlsZXIoZSl9c2V0SWQoZSl7Zm9yKGNvbnN0IHQgb2YgdGhpcy5zdGVwcyl0LnByb2dyYW0uaWQ9ZX19Y2xhc3MgTnIgZXh0ZW5kcyBVcntjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyk7bCh0aGlzLCJwcmVjaXNlTWFza0VuYWJsZWQiLCExKX19Y2xhc3MgSW8gZXh0ZW5kcyBOcntjb25zdHJ1Y3Rvcih0KXtzdXBlcigpO2wodGhpcywiaW5wdXRJbWFnZSIpO2wodGhpcywiaW5wdXRCYWNrZ3JvdW5kSW1hZ2UiKTtsKHRoaXMsImlucHV0TWFzayIpO2wodGhpcywicHJlY2lzZU1hc2tFbmFibGVkIiwhMCk7dGhpcy5jb250ZXh0PXQ7Y29uc3Qgbj17Y29udGV4dDp0LGhlaWdodDp0LmNhbnZhcy5oZWlnaHQsd2lkdGg6dC5jYW52YXMud2lkdGh9LG89bmV3IE9yKHsuLi5uLGRpc2FibGVGcmFtZWJ1ZmZlcjohMH0pO3RoaXMuYWRkU3RlcCh7cHJvZ3JhbTpvLGdldFVuaWZvcm1zOigpPT4oe2JhY2tncm91bmQ6QSh0LHRoaXMuaW5wdXRCYWNrZ3JvdW5kSW1hZ2UpLGZvcmVncm91bmQ6QSh0LHRoaXMuaW5wdXRJbWFnZSksdGhyZXNob2xkOkEodCx0aGlzLmlucHV0TWFzayl9KX0pfXNldERhdGEodCxuKXt0aGlzLmlucHV0SW1hZ2U9dCx0aGlzLmlucHV0TWFzaz1ufX12YXIgeGY9YHByZWNpc2lvbiBtZWRpdW1wIGZsb2F0OwoKdmFyeWluZyB2ZWMyIF90ZXh0dXJlX2Nvb3JkOwp1bmlmb3JtIHNhbXBsZXIyRCB0ZXh0dXJlOwoKdm9pZCBtYWluKCkgeyBnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQodGV4dHVyZSwgX3RleHR1cmVfY29vcmQpOyB9CmAsX2Y9YHZhcnlpbmcgdmVjMiBfdGV4dHVyZV9jb29yZDsKCmF0dHJpYnV0ZSB2ZWMyIHBvc2l0aW9uOwphdHRyaWJ1dGUgdmVjMiB0ZXh0dXJlX2Nvb3JkOwp1bmlmb3JtIGJvb2wgaW52ZXJ0X3k7Cgp2b2lkIG1haW4oKSB7CiAgZ2xfUG9zaXRpb24gPSB2ZWM0KHBvc2l0aW9uLCAwLiwgMS4pOwogIF90ZXh0dXJlX2Nvb3JkID0gdGV4dHVyZV9jb29yZDsKICBpZiAoaW52ZXJ0X3kpIHsKICAgIF90ZXh0dXJlX2Nvb3JkLnkgPSAxLiAtIHRleHR1cmVfY29vcmQueTsKICB9Cn0KYDtjbGFzcyB2ZiBleHRlbmRzIHZle2dldEZyYWdtZW50U2hhZGVyKCl7cmV0dXJuIHhmfWdldFZlcnRleFNoYWRlcigpe3JldHVybiBfZn19Y2xhc3MgRWYgZXh0ZW5kcyBVcntjb25zdHJ1Y3Rvcih0LG4sbyl7c3VwZXIoKTtsKHRoaXMsImlucHV0SW1hZ2UiKTt0aGlzLmNvbnRleHQ9dDtjb25zdCBpPXtjb250ZXh0OnQsaGVpZ2h0Om8sd2lkdGg6bn07dGhpcy5hZGRTdGVwKHtwcm9ncmFtOm5ldyB2Zih7Li4uaSxkaXNhYmxlRnJhbWVidWZmZXI6ITB9KSxnZXRVbmlmb3JtczooKT0+KHt0ZXh0dXJlOkEodCx0aGlzLmlucHV0SW1hZ2UpLGludmVydF95OiEwfSl9KX1zZXREYXRhKHQpe3RoaXMuaW5wdXRJbWFnZT10fX1hc3luYyBmdW5jdGlvbiBTbyhyKXtyZXR1cm4gbmV3IFByb21pc2UoZT0+e3NldFRpbWVvdXQoKCk9PntlKCl9LHIpfSl9dmFyIFRmPWBwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsKCnZhcnlpbmcgdmVjMiBfdGV4dHVyZV9jb29yZDsKCnVuaWZvcm0gdmVjMiBjYW52YXM7CnVuaWZvcm0gc2FtcGxlcjJEIHRleHR1cmU7Cgp2ZWM0IGxvb3AoKTsKCnZvaWQgbWFpbigpIHsgZ2xfRnJhZ0NvbG9yID0gbG9vcCgpOyB9CmAsd2Y9YHZhcnlpbmcgdmVjMiBfdGV4dHVyZV9jb29yZDsKCmF0dHJpYnV0ZSB2ZWMyIHBvc2l0aW9uOwphdHRyaWJ1dGUgdmVjMiB0ZXh0dXJlX2Nvb3JkOwoKdm9pZCBtYWluKCkgewogIGdsX1Bvc2l0aW9uID0gdmVjNChwb3NpdGlvbiwgMC4sIDEuKTsKICBfdGV4dHVyZV9jb29yZCA9IHRleHR1cmVfY29vcmQ7Cn0KYCxMcj0ocj0+KHJbci5MSU5FQVI9MF09IkxJTkVBUiIscltyLkdBVVNTSUFOPTFdPSJHQVVTU0lBTiIscikpKExyfHx7fSk7Y2xhc3MgUm8gZXh0ZW5kcyB2ZXtnZXREZWZpbmVzKCl7dmFyIGU7cmV0dXJue1JBRElVUzooZT10aGlzLm9wdGlvbnMucmFkaXVzKSE9bnVsbD9lOjF9fWdldEZyYWdtZW50U2hhZGVyKCl7cmV0dXJuIFRmK3RoaXMuY3JlYXRlTG9vcEZ1bmN0aW9uKCl9Z2V0VmVydGV4U2hhZGVyKCl7cmV0dXJuIHdmfWNyZWF0ZUxvb3BGdW5jdGlvbigpe3ZhciB0O2xldCBlPSh0PXRoaXMub3B0aW9ucy5yYWRpdXMpIT1udWxsP3Q6MTtyZXR1cm5gCgogICAgICAgIHZlYzQgbG9vcCgpIHsgCiAgICAgICAgICAgIHZlYzQgcmVzdWx0ID0gdmVjNCgwLDAsMCwwKTsKICAgICAgICAgICAgZmxvYXQgZmFjdG9yU3VtID0gMC47CgogICAgICAgICAgICB2ZWMyIG5vcm1hbGl6ZWRSYWRpdXMgPSB2ZWMyKC0ke2V9LikgLyBjYW52YXM7CiAgICAgICAgICAgIHZlYzIgbm9ybWFsaXplZEluY3JlbWVudCA9IHZlYzIoMS4pIC8gY2FudmFzOwogICAgICAgICAgICB2ZWMyIGRpZmYgPSBub3JtYWxpemVkUmFkaXVzOwoKICAgICAgICAgICAgZm9yKGludCB5PS0ke2V9OyB5PCR7ZSsxfTsgKyt5KSB7CiAgICAgICAgICAgICAgICBmb3IoaW50IHg9LSR7ZX07IHg8JHtlKzF9OyArK3gpIHsKICAgICAgICAgICAgICAgICAgICBmbG9hdCBmYWN0b3IgPSAxLjsKICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gZmFjdG9yICogdGV4dHVyZTJEKHRleHR1cmUsIF90ZXh0dXJlX2Nvb3JkICsgZGlmZik7CiAgICAgICAgICAgICAgICAgICAgZmFjdG9yU3VtICs9IGZhY3RvcjsKICAgICAgICAgICAgICAgICAgICBkaWZmLnggKz0gbm9ybWFsaXplZEluY3JlbWVudC54OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZGlmZi55ICs9IG5vcm1hbGl6ZWRJbmNyZW1lbnQueTsKICAgICAgICAgICAgICAgIGRpZmYueCA9IG5vcm1hbGl6ZWRSYWRpdXMueDsKICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm4gcmVzdWx0IC8gZmFjdG9yU3VtOwogICAgICAgIH1gfWdldEZhY3RvcihlLHQpe3N3aXRjaCh0aGlzLm9wdGlvbnMudHlwZSl7Y2FzZSAxOnJldHVybiB0aGlzLmdldExpbmVhckZhY3RvcihlLHQpO2Nhc2UgMDpkZWZhdWx0OnJldHVybiB0aGlzLmdldExpbmVhckZhY3RvcihlLHQpfX1nZXRMaW5lYXJGYWN0b3IoZSx0KXtyZXR1cm4gMX1nZXRHYXVzc2lhbkZhY3RvcihlLHQpe3ZhciB1O2NvbnN0IG49TWF0aC5QSSoyLG89TWF0aC5tYXgoKHU9dGhpcy5vcHRpb25zLnJhZGl1cykhPW51bGw/dToxLDEpLGk9MS8obipvKioyKSxzPS0oZSoqMit0KioyKSxhPWkqcztyZXR1cm4gaSpNYXRoLkUqKmF9fWNsYXNzIHpyIGV4dGVuZHMgdmV7Y29uc3RydWN0b3IodCl7c3VwZXIodCk7bCh0aGlzLCJmYmkyIik7dGhpcy5mYmkyPU50KHQuY29udGV4dCxbe2Zvcm1hdDp0LmNvbnRleHQuUkdCQSx0eXBlOnQuY29udGV4dC5VTlNJR05FRF9CWVRFLG1pbjp0LmNvbnRleHQuTElORUFSLG1hZzp0LmNvbnRleHQuTElORUFSLHdyYXA6dC5jb250ZXh0LkNMQU1QX1RPX0VER0V9XSx0LndpZHRoLHQuaGVpZ2h0KX1ydW4odCl7Y29uc3Qgbj10aGlzLmZiaTt0aGlzLmZiaT10aGlzLmZiaTIsdGhpcy5mYmkyPW4sdGhpcy5vdXRwdXQ9dGhpcy5mYmkuYXR0YWNobWVudHNbMF0sc3VwZXIucnVuKHsuLi50LHByZXZpb3VzX3JlbmRlcmluZzp0aGlzLmZiaTIuYXR0YWNobWVudHNbMF19KX1yZXNpemVPdXRwdXQodCxuKXtzdXBlci5yZXNpemVPdXRwdXQodCxuKSx0aGlzLmZiaTI9TnQodGhpcy5jb250ZXh0LFt7Zm9ybWF0OnRoaXMuY29udGV4dC5SR0JBLHR5cGU6dGhpcy5jb250ZXh0LlVOU0lHTkVEX0JZVEUsbWluOnRoaXMuY29udGV4dC5MSU5FQVIsd3JhcDp0aGlzLmNvbnRleHQuQ0xBTVBfVE9fRURHRX1dLHQsbil9fXZhciBBZj1gcHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7Cgp2YXJ5aW5nIHZlYzIgX3RleHR1cmVfY29vcmQ7CgovLyB1bmlmb3JtIGZsb2F0IHRyZXNob2xkOwp1bmlmb3JtIHNhbXBsZXIyRCBpbWFnZV9ub3c7CnVuaWZvcm0gc2FtcGxlcjJEIGltYWdlX2JlZm9yZTsKdW5pZm9ybSBzYW1wbGVyMkQgbWFza19ub3c7CnVuaWZvcm0gc2FtcGxlcjJEIG1hc2tfYmVmb3JlOwp1bmlmb3JtIHNhbXBsZXIyRCBwcmV2aW91c19yZW5kZXJpbmc7CnVuaWZvcm0gdmVjMiBjYW52YXM7Cgp1bmlmb3JtIGZsb2F0IGRlbHRhOwoKZmxvYXQgY3VycmVudF9mYWN0b3IgPSAwLjY5OwpmbG9hdCBwcmV2aW91c19mYWN0b3IgPSAwLjc0OwpmbG9hdCB0aHJlc2hvbGRfYWN0aXZhdGlvbiA9IDAuNTQ7CgpmbG9hdCBtYXAoZmxvYXQgdmFsdWUsIGZsb2F0IG1pbjEsIGZsb2F0IG1heDEsIGZsb2F0IG1pbjIsIGZsb2F0IG1heDIpIHsKICByZXR1cm4gbWluMiArICh2YWx1ZSAtIG1pbjEpICogKG1heDIgLSBtaW4yKSAvIChtYXgxIC0gbWluMSk7Cn0KCmZsb2F0IGdldFRocmVzaG9sZCgpIHsKICB2ZWM0IGNvbG9yID0gdmVjNCgwLik7CiAgZm9yIChmbG9hdCB5ID0gLTYuOyB5IDwgNy47IHkgKz0gMS4pIHsKICAgIGZvciAoZmxvYXQgeCA9IC02LjsgeCA8IDcuOyB4ICs9IDEuKSB7CiAgICAgIHZlYzQgaW1hZ2Vfbm93X2NvbG9yID0KICAgICAgICAgIHRleHR1cmUyRChpbWFnZV9ub3csIF90ZXh0dXJlX2Nvb3JkICsgdmVjMih4LCB5KSAvIGNhbnZhcyk7CiAgICAgIHZlYzQgaW1hZ2VfYmVmb3JlX2NvbG9yID0KICAgICAgICAgIHRleHR1cmUyRChpbWFnZV9iZWZvcmUsIF90ZXh0dXJlX2Nvb3JkICsgdmVjMih4LCB5KSAvIGNhbnZhcyk7CiAgICAgIGNvbG9yICs9IGFicyhpbWFnZV9iZWZvcmVfY29sb3IgLSBpbWFnZV9ub3dfY29sb3IpOwogICAgfQogIH0KICByZXR1cm4gKGNvbG9yLnggKyBjb2xvci55ICsgY29sb3IueikgLyAoMy4gKiA5Lik7Cn0KCnZvaWQgbWFpbigpIHsKICBmbG9hdCB0cmVzaG9sZF9pbnB1dCA9IC40OwogIGZsb2F0IHRyZXNob2xkX3ByZXZpb3VzX3JlbmRlcmluZyA9IC45ODsKCiAgdmVjNCBtYXNrX25vd19jb2xvciA9IHRleHR1cmUyRChtYXNrX25vdywgX3RleHR1cmVfY29vcmQpOwogIHZlYzQgbWFza19iZWZvcmVfY29sb3IgPSB0ZXh0dXJlMkQobWFza19iZWZvcmUsIF90ZXh0dXJlX2Nvb3JkKTsKICB2ZWM0IHByZXZpb3VzX3JlbmRlcmluZ19jb2xvciA9IHRleHR1cmUyRChwcmV2aW91c19yZW5kZXJpbmcsIF90ZXh0dXJlX2Nvb3JkKTsKCiAgdmVjMyBtYXNrX2RpZmYgPSBhYnMobWFza19iZWZvcmVfY29sb3IueHl6IC0gbWFza19ub3dfY29sb3IueHl6KTsKICBmbG9hdCBmbGlja2VyaW5nID0gbWFza19kaWZmLng7CiAgZmxvYXQgdGhyZXNob2xkID0gZ2V0VGhyZXNob2xkKCk7CiAgaWYgKHRocmVzaG9sZCA8IHRocmVzaG9sZF9hY3RpdmF0aW9uKSB7CiAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KGZsaWNrZXJpbmcsIDAuLCAwLiwgMS4pICogY3VycmVudF9mYWN0b3IgKwogICAgICAgICAgICAgICAgICAgcHJldmlvdXNfcmVuZGVyaW5nX2NvbG9yICogcHJldmlvdXNfZmFjdG9yOwogICAgZ2xfRnJhZ0NvbG9yICo9ICgxLiAtIHRocmVzaG9sZCk7CiAgfQp9CmAsSWY9YHZhcnlpbmcgdmVjMiBfdGV4dHVyZV9jb29yZDsKCmF0dHJpYnV0ZSB2ZWMyIHBvc2l0aW9uOwphdHRyaWJ1dGUgdmVjMiB0ZXh0dXJlX2Nvb3JkOwoKdm9pZCBtYWluKCkgewogIGdsX1Bvc2l0aW9uID0gdmVjNChwb3NpdGlvbiwgMC4sIDEuKTsKICBfdGV4dHVyZV9jb29yZCA9IHRleHR1cmVfY29vcmQ7Cn0KYDtjbGFzcyBTZiBleHRlbmRzIHpye2dldEZyYWdtZW50U2hhZGVyKCl7cmV0dXJuIEFmfWdldFZlcnRleFNoYWRlcigpe3JldHVybiBJZn19dmFyIFJmPWAjdmVyc2lvbiAzMDAgZXMKLy8gaHR0cHM6Ly9naXRodWIuY29tL1ZvbGNvbWl4L3ZpcnR1YWwtYmFja2dyb3VuZC9ibG9iL21haW4vc3JjL3BpcGVsaW5lcy93ZWJnbDIvam9pbnRCaWxhdGVyYWxGaWx0ZXJTdGFnZS50cwoKcHJlY2lzaW9uIGhpZ2hwIGZsb2F0Owp1bmlmb3JtIHNhbXBsZXIyRCBpbnB1dF9mcmFtZTsKdW5pZm9ybSBzYW1wbGVyMkQgc2VnbWVudGF0aW9uX21hc2s7CnVuaWZvcm0gc2FtcGxlcjJEIHRocmVzaG9sZDsKdW5pZm9ybSB2ZWMyIHRleGVsX3NpemU7CnVuaWZvcm0gZmxvYXQgc3RlcDsKdW5pZm9ybSBmbG9hdCByYWRpdXM7CnVuaWZvcm0gZmxvYXQgb2Zmc2V0Owp1bmlmb3JtIGZsb2F0IHNpZ21hX3RleGVsOwp1bmlmb3JtIGZsb2F0IHNpZ21hX2NvbG9yOwoKaW4gdmVjMiBfdGV4dHVyZV9jb29yZDsKb3V0IHZlYzQgb3V0Q29sb3I7CgpmbG9hdCBnYXVzc2lhbihmbG9hdCB4LCBmbG9hdCBzaWdtYSkgewogIGZsb2F0IGNvZWZmID0gLTAuNSAvIChzaWdtYSAqIHNpZ21hICogNC4wICsgMS4wZS02KTsKICByZXR1cm4gZXhwKCh4ICogeCkgKiBjb2VmZik7Cn0KCnZvaWQgbWFpbigpIHsKICB2ZWMyIGNlbnRlckNvb3JkID0gX3RleHR1cmVfY29vcmQ7CiAgdmVjMyBjZW50ZXJDb2xvciA9IHRleHR1cmUoaW5wdXRfZnJhbWUsIGNlbnRlckNvb3JkKS5yZ2I7CiAgZmxvYXQgbmV3VmFsID0gMC4wOwogIGZsb2F0IHNwYWNlV2VpZ2h0ID0gMC4wOwogIGZsb2F0IGNvbG9yV2VpZ2h0ID0gMC4wOwogIGZsb2F0IHRvdGFsV2VpZ2h0ID0gMC4wOwogIC8vIFN1YnNhbXBsZSBrZXJuZWwgc3BhY2UuCiAgZm9yIChmbG9hdCBpID0gLXJhZGl1cyArIG9mZnNldDsgaSA8PSByYWRpdXM7IGkgKz0gc3RlcCkgewogICAgZm9yIChmbG9hdCBqID0gLXJhZGl1cyArIG9mZnNldDsgaiA8PSByYWRpdXM7IGogKz0gc3RlcCkgewogICAgICB2ZWMyIHNoaWZ0ID0gdmVjMihqLCBpKSAqIHRleGVsX3NpemU7CiAgICAgIHZlYzIgY29vcmQgPSB2ZWMyKGNlbnRlckNvb3JkICsgc2hpZnQpOwogICAgICB2ZWMzIGZyYW1lQ29sb3IgPSB0ZXh0dXJlKGlucHV0X2ZyYW1lLCBjb29yZCkucmdiOwogICAgICBmbG9hdCB0aHJlc2hvbGQgPSB0ZXh0dXJlKHRocmVzaG9sZCwgY29vcmQpLmE7CiAgICAgIGZsb2F0IG91dFZhbCA9IHRleHR1cmUoc2VnbWVudGF0aW9uX21hc2ssIGNvb3JkKS5hOwoKICAgICAgc3BhY2VXZWlnaHQgPSBnYXVzc2lhbihkaXN0YW5jZShjZW50ZXJDb29yZCwgY29vcmQpLCBzaWdtYV90ZXhlbCk7CiAgICAgIGNvbG9yV2VpZ2h0ID0gZ2F1c3NpYW4oZGlzdGFuY2UoY2VudGVyQ29sb3IsIGZyYW1lQ29sb3IpLCBzaWdtYV9jb2xvcik7CiAgICAgIHRvdGFsV2VpZ2h0ICs9IHNwYWNlV2VpZ2h0ICogY29sb3JXZWlnaHQ7CiAgICAgIG5ld1ZhbCArPSBzcGFjZVdlaWdodCAqIGNvbG9yV2VpZ2h0ICogb3V0VmFsICogdGhyZXNob2xkOwogICAgfQogIH0KICBuZXdWYWwgLz0gdG90YWxXZWlnaHQ7CiAgb3V0Q29sb3IgPSB2ZWM0KHZlYzMoMC4pLCBuZXdWYWwpOwp9YCxGZj1gI3ZlcnNpb24gMzAwIGVzCmluIHZlYzIgcG9zaXRpb247CmluIHZlYzIgdGV4dHVyZV9jb29yZDsKb3V0IHZlYzIgX3RleHR1cmVfY29vcmQ7CnZvaWQgbWFpbigpIHsKICBnbF9Qb3NpdGlvbiA9IHZlYzQocG9zaXRpb24sIDAuMCwgMS4wKTsKICBfdGV4dHVyZV9jb29yZCA9IHRleHR1cmVfY29vcmQ7Cn1gO2NsYXNzIFBmIGV4dGVuZHMgdmV7Z2V0RnJhZ21lbnRTaGFkZXIoKXtyZXR1cm4gUmZ9Z2V0VmVydGV4U2hhZGVyKCl7cmV0dXJuIEZmfX12YXIga2Y9YHByZWNpc2lvbiBtZWRpdW1wIGZsb2F0OwoKdmFyeWluZyB2ZWMyIF90ZXh0dXJlX2Nvb3JkOwoKdW5pZm9ybSB2ZWMyIGNhbnZhczsKdW5pZm9ybSBzYW1wbGVyMkQgdGV4dHVyZTsKCnZvaWQgbWFpbigpIHsKICBpbnQgY291bnQgPSAwOwogIGZvciAoZmxvYXQgeSA9IC0xLjsgeSA8IDIuOyB5ICs9IDEuKSB7CiAgICBmb3IgKGZsb2F0IHggPSAtMS47IHggPCAyLjsgeCArPSAxLikgewogICAgICB2ZWMyIGNvb3JkID0gX3RleHR1cmVfY29vcmQgKyB2ZWMyKHksIHgpIC8gY2FudmFzOwogICAgICB2ZWM0IGNvbG9yID0gdGV4dHVyZTJEKHRleHR1cmUsIGNvb3JkKTsKICAgICAgaWYgKGNvbG9yLnIgPiAuMSkgewogICAgICAgIGNvdW50Kys7CiAgICAgIH0KICAgIH0KICB9CiAgaWYgKGNvdW50ID4gNSkgewogICAgZ2xfRnJhZ0NvbG9yID0gdGV4dHVyZTJEKHRleHR1cmUsIF90ZXh0dXJlX2Nvb3JkKTsKICB9Cn0KYCxEZj1gdmFyeWluZyB2ZWMyIF90ZXh0dXJlX2Nvb3JkOwoKYXR0cmlidXRlIHZlYzIgcG9zaXRpb247CmF0dHJpYnV0ZSB2ZWMyIHRleHR1cmVfY29vcmQ7Cgp2b2lkIG1haW4oKSB7CiAgZ2xfUG9zaXRpb24gPSB2ZWM0KHBvc2l0aW9uLCAwLiwgMS4pOwogIF90ZXh0dXJlX2Nvb3JkID0gdGV4dHVyZV9jb29yZDsKfQpgO2NsYXNzIENmIGV4dGVuZHMgdmV7Z2V0RnJhZ21lbnRTaGFkZXIoKXtyZXR1cm4ga2Z9Z2V0VmVydGV4U2hhZGVyKCl7cmV0dXJuIERmfX12YXIgQmY9YHByZWNpc2lvbiBtZWRpdW1wIGZsb2F0OwoKdmFyeWluZyB2ZWMyIF90ZXh0dXJlX2Nvb3JkOwoKdW5pZm9ybSB2ZWMyIGNhbnZhczsKdW5pZm9ybSBzYW1wbGVyMkQgdGV4dHVyZTsKCnZvaWQgbWFpbigpIHsKICB2ZWM0IGNvbG9yID0gdGV4dHVyZTJEKHRleHR1cmUsIF90ZXh0dXJlX2Nvb3JkKTsKICBmb3IgKGZsb2F0IHkgPSAtMi47IHkgPCAzLjsgeSArPSAxLikgewogICAgZm9yIChmbG9hdCB4ID0gLTIuOyB4IDwgMy47IHggKz0gMS4pIHsKICAgICAgdmVjMiBjb29yZCA9IF90ZXh0dXJlX2Nvb3JkOwogICAgICBjb29yZCArPSB2ZWMyKHksIHgpIC8gY2FudmFzOwogICAgICBjb2xvciArPSB0ZXh0dXJlMkQodGV4dHVyZSwgY29vcmQpICogKDEuIC8gNC4pOwogICAgfQogIH0KCiAgZ2xfRnJhZ0NvbG9yID0gY29sb3I7Cn0KYCxNZj1gdmFyeWluZyB2ZWMyIF90ZXh0dXJlX2Nvb3JkOwoKYXR0cmlidXRlIHZlYzIgcG9zaXRpb247CmF0dHJpYnV0ZSB2ZWMyIHRleHR1cmVfY29vcmQ7Cgp2b2lkIG1haW4oKSB7CiAgZ2xfUG9zaXRpb24gPSB2ZWM0KHBvc2l0aW9uLCAwLiwgMS4pOwogIF90ZXh0dXJlX2Nvb3JkID0gdGV4dHVyZV9jb29yZDsKfQpgO2NsYXNzIE9mIGV4dGVuZHMgenJ7Z2V0RnJhZ21lbnRTaGFkZXIoKXtyZXR1cm4gQmZ9Z2V0VmVydGV4U2hhZGVyKCl7cmV0dXJuIE1mfX12YXIgVWY9YHByZWNpc2lvbiBtZWRpdW1wIGZsb2F0OwoKdmFyeWluZyB2ZWMyIF90ZXh0dXJlX2Nvb3JkOwoKdW5pZm9ybSBzYW1wbGVyMkQgdGhyZXNob2xkOwp1bmlmb3JtIHNhbXBsZXIyRCBpbnB1dHM7Cgp2b2lkIG1haW4oKSB7CiAgdmVjNCBpbnB1dHNfY29sb3IgPSB0ZXh0dXJlMkQoaW5wdXRzLCBfdGV4dHVyZV9jb29yZCk7CiAgdmVjNCB0aHJlc2hvbGRfY29sb3IgPSB0ZXh0dXJlMkQodGhyZXNob2xkLCBfdGV4dHVyZV9jb29yZCk7CiAgaWYgKHRocmVzaG9sZF9jb2xvci5yIDwgLjEgJiYgaW5wdXRzX2NvbG9yLnIgPiAuNSkgewogICAgZ2xfRnJhZ0NvbG9yID0gaW5wdXRzX2NvbG9yOwogIH0KfQpgLE5mPWB2YXJ5aW5nIHZlYzIgX3RleHR1cmVfY29vcmQ7CgphdHRyaWJ1dGUgdmVjMiBwb3NpdGlvbjsKYXR0cmlidXRlIHZlYzIgdGV4dHVyZV9jb29yZDsKCnZvaWQgbWFpbigpIHsKICBnbF9Qb3NpdGlvbiA9IHZlYzQocG9zaXRpb24sIDAuLCAxLik7CiAgX3RleHR1cmVfY29vcmQgPSB0ZXh0dXJlX2Nvb3JkOwp9CmA7Y2xhc3MgTGYgZXh0ZW5kcyB6cntnZXRGcmFnbWVudFNoYWRlcigpe3JldHVybiBVZn1nZXRWZXJ0ZXhTaGFkZXIoKXtyZXR1cm4gTmZ9fWNsYXNzIHpmIGV4dGVuZHMgVXJ7Y29uc3RydWN0b3IodCxuLG8pe3N1cGVyKCk7bCh0aGlzLCJpbnB1dEltYWdlIik7bCh0aGlzLCJpbnB1dE1hc2siKTtsKHRoaXMsInByZXZpb3VzSW5wdXRJbWFnZSIpO2wodGhpcywicHJldmlvdXNJbnB1dE1hc2siKTtsKHRoaXMsIm91dHB1dCIpO2wodGhpcywib3B0aW9ucyIse2N1cnJlbnRUaHJlc2hvbGRNaW5pbXVtOjAsY3VycmVudFRocmVzaG9sZE1heGltdW06MSxwcmV2aW91c1RocmVzaG9sZE1pbmltdW06MCxwcmV2aW91c1RocmVzaG9sZE1heGltdW06MSx0aHJlc2hvbGRNaW5pbXVtOjAsdGhyZXNob2xkTWF4aW11bToxLHRocmVzaG9sZEZhY3RvcjoxfSk7bCh0aGlzLCJqb2ludEJpbGF0ZXJhbCIpO3RoaXMuY29udGV4dD10O2NvbnN0IGk9e2NvbnRleHQ6dCxoZWlnaHQ6byx3aWR0aDpufSxzPW5ldyBTZihpKSxhPW5ldyBSbyh7Li4uaSxyYWRpdXM6MSx0eXBlOkxyLkdBVVNTSUFOfSksdT1uZXcgTGYoaSksZj1uZXcgT2YoaSksZD1uZXcgQ2YoaSk7dGhpcy5qb2ludEJpbGF0ZXJhbD1uZXcgUGYoaSksdGhpcy5hZGRTdGVwKHtwcm9ncmFtOnMsZ2V0VW5pZm9ybXM6KCk9Pih7aW1hZ2Vfbm93OkEodCx0aGlzLmlucHV0SW1hZ2UpLGltYWdlX2JlZm9yZTpBKHQsdGhpcy5wcmV2aW91c0lucHV0SW1hZ2UpLG1hc2tfbm93OkEodCx0aGlzLmlucHV0TWFzayksbWFza19iZWZvcmU6QSh0LHRoaXMucHJldmlvdXNJbnB1dE1hc2spLGN1cnJlbnRfdGhyZXNob2xkX21pbmltdW06dGhpcy5vcHRpb25zLmN1cnJlbnRUaHJlc2hvbGRNaW5pbXVtLGN1cnJlbnRfdGhyZXNob2xkX21heGltdW06dGhpcy5vcHRpb25zLmN1cnJlbnRUaHJlc2hvbGRNYXhpbXVtLHByZXZpb3VzX3RocmVzaG9sZF9taW5pbXVtOnRoaXMub3B0aW9ucy5wcmV2aW91c1RocmVzaG9sZE1pbmltdW0scHJldmlvdXNfdGhyZXNob2xkX21heGltdW06dGhpcy5vcHRpb25zLnByZXZpb3VzVGhyZXNob2xkTWF4aW11bSx0aHJlc2hvbGRfbWluaW11bTp0aGlzLm9wdGlvbnMudGhyZXNob2xkTWluaW11bSx0aHJlc2hvbGRfbWF4aW11bTp0aGlzLm9wdGlvbnMudGhyZXNob2xkTWF4aW11bSx0aHJlc2hvbGRfZmFjdG9yOnRoaXMub3B0aW9ucy50aHJlc2hvbGRGYWN0b3J9KX0pLHRoaXMuYWRkU3RlcCh7cHJvZ3JhbTp1LGdldFVuaWZvcm1zOigpPT4oe2lucHV0czpBKHQsdGhpcy5pbnB1dE1hc2spLHRocmVzaG9sZDpBKHQscy5vdXRwdXQpfSl9KSx0aGlzLmFkZFN0ZXAoe3Byb2dyYW06ZCxnZXRVbmlmb3JtczooKT0+KHt0ZXh0dXJlOkEodCx1Lm91dHB1dCl9KX0pLHRoaXMuYWRkU3RlcCh7cHJvZ3JhbTpmLGdldFVuaWZvcm1zOigpPT4oe3RleHR1cmU6QSh0LGQub3V0cHV0KX0pfSksdGhpcy5hZGRTdGVwKHtwcm9ncmFtOmEsZ2V0VW5pZm9ybXM6KCk9Pih7dGV4dHVyZTpBKHQsZi5vdXRwdXQpfSl9KSx0aGlzLmFkZFN0ZXAoe3Byb2dyYW06dGhpcy5qb2ludEJpbGF0ZXJhbCxnZXRVbmlmb3JtczooKT0+e3ZhciB6LEwsVixHLHFlLEVlLGZlLCQ7Y29uc3QgZz0oTD0oej10aGlzLmlucHV0SW1hZ2UpPT1udWxsP3ZvaWQgMDp6LndpZHRoKSE9bnVsbD9MOjEsYj0oRz0oVj10aGlzLmlucHV0SW1hZ2UpPT1udWxsP3ZvaWQgMDpWLmhlaWdodCkhPW51bGw/RzoxLGg9KEVlPShxZT10aGlzLmlucHV0TWFzayk9PW51bGw/dm9pZCAwOnFlLndpZHRoKSE9bnVsbD9FZToxLHg9KCQ9KGZlPXRoaXMuaW5wdXRNYXNrKT09bnVsbD92b2lkIDA6ZmUuaGVpZ2h0KSE9bnVsbD8kOjEsRT1NYXRoLm1heChnL2gsYi94KSx2PU1hdGgubWF4KDEsTWF0aC5zcXJ0KEUpKi42NiksUj0xL2csUD0xL2I7cmV0dXJue2lucHV0X2ZyYW1lOkEodCx0aGlzLmlucHV0SW1hZ2UpLHNlZ21lbnRhdGlvbl9tYXNrOkEodCx0aGlzLmlucHV0TWFzayksdGhyZXNob2xkOkEodCxhLm91dHB1dCksdGV4ZWxfc2l6ZTpbUixQXSxzdGVwOnYscmFkaXVzOkUsb2Zmc2V0OnY+MT92Ki41OjAsc2lnbWFfdGV4ZWw6TWF0aC5tYXgoUixQKSpFLHNpZ21hX2NvbG9yOi4xfX19KSx0aGlzLm91dHB1dD10aGlzLmpvaW50QmlsYXRlcmFsLm91dHB1dH1zZXREYXRhKHQsbil7dGhpcy5wcmV2aW91c0lucHV0SW1hZ2U9dGhpcy5pbnB1dEltYWdlP3RoaXMuaW5wdXRJbWFnZTp0LHRoaXMucHJldmlvdXNJbnB1dE1hc2s9dGhpcy5pbnB1dE1hc2s/dGhpcy5pbnB1dE1hc2s6bix0aGlzLmlucHV0SW1hZ2U9dCx0aGlzLmlucHV0TWFzaz1ufXNldE9wdGlvbnModCl7dGhpcy5vcHRpb25zPXR9cmVzaXplT3V0cHV0KHQsbil7c3VwZXIucmVzaXplT3V0cHV0KHQsbiksdGhpcy5vdXRwdXQ9dGhpcy5qb2ludEJpbGF0ZXJhbC5vdXRwdXR9fWNsYXNzIEdme2NvbnN0cnVjdG9yKGUpe2wodGhpcywiY29udGV4dCIpO2wodGhpcywiZXh0ZW5zaW9uIik7bCh0aGlzLCJxdWVyaWVzIixbXSk7bCh0aGlzLCJhY3RpdmVRdWVyeSIpO3RoaXMuY29udGV4dD1lLHRoaXMuZXh0ZW5zaW9uPWUuZ2V0RXh0ZW5zaW9uKCJFWFRfZGlzam9pbnRfdGltZXJfcXVlcnlfd2ViZ2wyIil9c3RhcnQoKXt9c3RvcCgpe3RoaXMuYWN0aXZlUXVlcnkmJnRoaXMuY29udGV4dC5lbmRRdWVyeSh0aGlzLmV4dGVuc2lvbi5USU1FX0VMQVBTRURfRVhUKX1wdXNoQ29udGV4dChlKXt0aGlzLmNyZWF0ZVF1ZXJ5KCJQVVNIIixlKX1wb3BDb250ZXh0KGUpe3RoaXMuY3JlYXRlUXVlcnkoIlBPUCIsZSl9Y3JlYXRlUXVlcnkoZSx0KXt0aGlzLmFjdGl2ZVF1ZXJ5JiZ0aGlzLmNvbnRleHQuZW5kUXVlcnkodGhpcy5leHRlbnNpb24uVElNRV9FTEFQU0VEX0VYVCksdGhpcy5hY3RpdmVRdWVyeT10aGlzLmNvbnRleHQuY3JlYXRlUXVlcnkoKSx0aGlzLmNvbnRleHQuYmVnaW5RdWVyeSh0aGlzLmV4dGVuc2lvbi5USU1FX0VMQVBTRURfRVhULHRoaXMuYWN0aXZlUXVlcnkpLHRoaXMucXVlcmllcy5wdXNoKHtuYW1lOnQsYWN0aW9uOmUscXVlcnk6dGhpcy5hY3RpdmVRdWVyeX0pfWFzeW5jIGdldFJlc29sdmVkUXVlcmllcygpe2NvbnN0IGU9KGF3YWl0IFByb21pc2UuYWxsKFsuLi50aGlzLnF1ZXJpZXNdLm1hcCh0PT50aGlzLnJlc29sdmVRdWVyeSh0KSkpKS5maWx0ZXIodD0+dCk7Zm9yKGxldCB0PTE7dDxlLmxlbmd0aDsrK3QpZVt0XS50aW1lc3RhbXArPWVbdC0xXS5kdXJhdGlvbitlW3QtMV0udGltZXN0YW1wO3JldHVybiBlfWFzeW5jIHJlc29sdmVRdWVyeShlKXtpZighYXdhaXQgdGhpcy5hd2FpdFF1ZXJ5QXZhaWxhYmxlKGUpKXtjb25zb2xlLmxvZygiVW5hd2FpdGFibGUgcXVlcnkiLGUpO3JldHVybn1pZih0aGlzLmNvbnRleHQuZ2V0UGFyYW1ldGVyKHRoaXMuZXh0ZW5zaW9uLkdQVV9ESVNKT0lOVF9FWFQpKXtjb25zb2xlLmxvZygiRGlzam9pbnRlZCBxdWVyeSIsZSk7cmV0dXJufXJldHVybnsuLi5lLGR1cmF0aW9uOnRoaXMuY29udGV4dC5nZXRRdWVyeVBhcmFtZXRlcihlLnF1ZXJ5LHRoaXMuY29udGV4dC5RVUVSWV9SRVNVTFQpLHRpbWVzdGFtcDowfX1hc3luYyBhd2FpdFF1ZXJ5QXZhaWxhYmxlKGUpe2ZvcihsZXQgdD0wO3Q8MTA7Kyt0KXtpZih0aGlzLmNvbnRleHQuZ2V0UXVlcnlQYXJhbWV0ZXIoZS5xdWVyeSx0aGlzLmNvbnRleHQuUVVFUllfUkVTVUxUX0FWQUlMQUJMRSkpcmV0dXJuIGU7YXdhaXQgU28oMjAwKX19fWNsYXNzIEx0e2NvbnN0cnVjdG9yKCl7bCh0aGlzLCJjYW52YXMiKTtsKHRoaXMsImNvbnRleHQiKTtsKHRoaXMsInBpcGVsaW5lIik7bCh0aGlzLCJwcmV2aW91c0ltYWdlV2lkdGgiLDApO2wodGhpcywicHJldmlvdXNJbWFnZUhlaWdodCIsMCk7bCh0aGlzLCJwcmV2aW91c01hc2tXaWR0aCIsTWUpO2wodGhpcywicHJldmlvdXNNYXNrSGVpZ2h0IixNZSk7bCh0aGlzLCJwcm9maWxlciIpO2wodGhpcywicG9zdFByb2Nlc3NpbmdFbmFibGVkIiwhMCk7bCh0aGlzLCJpbXByb3ZlTWFzayIpO2NvbnN0IGU9bmV3IE9mZnNjcmVlbkNhbnZhcygwLDApLHQ9ZS5nZXRDb250ZXh0KCJ3ZWJnbDIiKTtpZighdCl0aHJvdyJGYWlsIHRvIHJldHJpZXZlIHdlYmdsMiBjb250ZXh0Ijt0aGlzLmNhbnZhcz1lLHRoaXMuY29udGV4dD10LHRoaXMuaW1wcm92ZU1hc2s9bmV3IHpmKHRoaXMuY29udGV4dCxNZSxNZSl9c2V0RmxpY2tlcmluZ09wdGlvbnMoZSl7dGhpcy5pbXByb3ZlTWFzay5zZXRPcHRpb25zKGUpfWVuYWJsZVBvc3RQcm9jZXNzaW5nKCl7dGhpcy5wb3N0UHJvY2Vzc2luZ0VuYWJsZWQ9ITB9ZGlzYWJsZVBvc3RQcm9jZXNzaW5nKCl7dGhpcy5wb3N0UHJvY2Vzc2luZ0VuYWJsZWQ9ITF9YXN5bmMgcHJvZmlsZVdlYmdsKGUpe2NvbnN0IHQ9bmV3IEdmKHRoaXMuY29udGV4dCk7cmV0dXJuIHRoaXMucHJvZmlsZXI9dCx0LnN0YXJ0KCksYXdhaXQgU28oZSksdGhpcy5wcm9maWxlcj12b2lkIDAsdC5zdG9wKCksdC5nZXRSZXNvbHZlZFF1ZXJpZXMoKX1hc3luYyByZW5kZXIoZSx0KXt2YXIgaSxzO2lmKCF0aGlzLnBpcGVsaW5lKXRocm93Im1pc3NpbmcgcGlwZWxpbmUiOyh0aGlzLnByZXZpb3VzSW1hZ2VIZWlnaHQhPT1lLmhlaWdodHx8dGhpcy5wcmV2aW91c0ltYWdlV2lkdGghPT1lLndpZHRoKSYmdGhpcy5yZXNpemVPdXRwdXQoZS53aWR0aCxlLmhlaWdodCksKHRoaXMucHJldmlvdXNNYXNrSGVpZ2h0IT09dC5oZWlnaHR8fHRoaXMucHJldmlvdXNNYXNrV2lkdGghPT10LndpZHRoKSYmKHRoaXMuaW1wcm92ZU1hc2sucmVzaXplT3V0cHV0KHQud2lkdGgsdC5oZWlnaHQpLHRoaXMucHJldmlvdXNNYXNrV2lkdGg9dC53aWR0aCx0aGlzLnByZXZpb3VzTWFza0hlaWdodD10LmhlaWdodCk7Y29uc3Qgbj0icmVuZGVyZXIiOyhpPXRoaXMucHJvZmlsZXIpPT1udWxsfHxpLnB1c2hDb250ZXh0KG4pLHRoaXMuaW1wcm92ZU1hc2suc2V0UHJvZmlsZXIodGhpcy5wcm9maWxlciksdGhpcy5waXBlbGluZS5zZXRQcm9maWxlcih0aGlzLnByb2ZpbGVyKTtsZXQgbz10O3JldHVybiB0aGlzLnBvc3RQcm9jZXNzaW5nRW5hYmxlZCYmKHRoaXMuaW1wcm92ZU1hc2suc2V0RGF0YShlLHQpLHRoaXMuaW1wcm92ZU1hc2sucnVuKCksbz10aGlzLmltcHJvdmVNYXNrLm91dHB1dCksdGhpcy5waXBlbGluZS5zZXREYXRhKGUsbyksYXdhaXQgdGhpcy5waXBlbGluZS5ydW4oKSwocz10aGlzLnByb2ZpbGVyKT09bnVsbHx8cy5wb3BDb250ZXh0KG4pLHRoaXMuY2FudmFzfXJlc2l6ZU91dHB1dChlLHQpe3ZhciBuO3RoaXMuY2FudmFzLndpZHRoPWUsdGhpcy5jYW52YXMuaGVpZ2h0PXQsKG49dGhpcy5waXBlbGluZSk9PW51bGx8fG4ucmVzaXplT3V0cHV0KGUsdCksdGhpcy5wcmV2aW91c0ltYWdlV2lkdGg9ZSx0aGlzLnByZXZpb3VzSW1hZ2VIZWlnaHQ9dH19Y2xhc3MgRm8gZXh0ZW5kcyBMdHtjb25zdHJ1Y3Rvcigpe3N1cGVyKCk7bCh0aGlzLCJwaXBlbGluZSIpO2wodGhpcywiYmFja2dyb3VuZEltYWdlIik7bCh0aGlzLCJiYWNrZ3JvdW5kSW1hZ2VSZXNpemVyQ2FudmFzIik7bCh0aGlzLCJiYWNrZ3JvdW5kSW1hZ2VSZXNpemVyQ29udGV4dCIpO2wodGhpcywiYmFja2dyb3VuZEltYWdlUmVzaXplciIpO3RoaXMucGlwZWxpbmU9bmV3IElvKHRoaXMuY29udGV4dCk7Y29uc3QgdD1uZXcgT2Zmc2NyZWVuQ2FudmFzKDAsMCksbj10LmdldENvbnRleHQoIndlYmdsMiIpO2lmKCFuKXRocm93IkZhaWwgdG8gcmV0cmlldmUgd2ViZ2wgY29udGV4dCI7dGhpcy5iYWNrZ3JvdW5kSW1hZ2VSZXNpemVyQ2FudmFzPXQsdGhpcy5iYWNrZ3JvdW5kSW1hZ2VSZXNpemVyQ29udGV4dD1uLHRoaXMuYmFja2dyb3VuZEltYWdlUmVzaXplcj1uZXcgRWYodGhpcy5iYWNrZ3JvdW5kSW1hZ2VSZXNpemVyQ29udGV4dCwwLDApfXNldEJhY2tncm91bmRJbWFnZSh0KXt0aGlzLmJhY2tncm91bmRJbWFnZT10LHRoaXMudXBkYXRlQmFja2dyb3VuZEltYWdlKCl9dXBkYXRlQmFja2dyb3VuZEltYWdlKCl7Y29uc3R7d2lkdGg6dCxoZWlnaHQ6bn09dGhpcy5jYW52YXM7dGhpcy5iYWNrZ3JvdW5kSW1hZ2VSZXNpemVyLnJlc2l6ZU91dHB1dCh0LG4pLHRoaXMuYmFja2dyb3VuZEltYWdlUmVzaXplci5zZXREYXRhKHRoaXMuYmFja2dyb3VuZEltYWdlKSx0aGlzLmJhY2tncm91bmRJbWFnZVJlc2l6ZXIucnVuKCksdGhpcy5waXBlbGluZS5pbnB1dEJhY2tncm91bmRJbWFnZT10aGlzLmJhY2tncm91bmRJbWFnZVJlc2l6ZXJDYW52YXN9cmVzaXplT3V0cHV0KHQsbil7c3VwZXIucmVzaXplT3V0cHV0KHQsbiksdGhpcy5iYWNrZ3JvdW5kSW1hZ2VSZXNpemVyQ2FudmFzLndpZHRoPXQsdGhpcy5iYWNrZ3JvdW5kSW1hZ2VSZXNpemVyQ2FudmFzLmhlaWdodD1uLHRoaXMuYmFja2dyb3VuZEltYWdlUmVzaXplci5yZXNpemVPdXRwdXQodCxuKSx0aGlzLnVwZGF0ZUJhY2tncm91bmRJbWFnZSgpfX1jbGFzcyAkZiBleHRlbmRzIEZve2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKTtsKHRoaXMsImZyYW1lUmVhZGVyIil9c2V0QmFja2dyb3VuZFZpZGVvKHQpe3RoaXMuZnJhbWVSZWFkZXI9dH1hc3luYyByZW5kZXIodCxuKXtyZXR1cm4gYXdhaXQgdGhpcy5yZWFkTmV4dFZpZGVvRnJhbWUoKSxzdXBlci5yZW5kZXIodCxuKX1hc3luYyByZWFkTmV4dFZpZGVvRnJhbWUoKXt2YXIgbjtjb25zdCB0PWF3YWl0KChuPXRoaXMuZnJhbWVSZWFkZXIpPT1udWxsP3ZvaWQgMDpuLnJlYWQoKSk7aWYodCE9bnVsbCYmdC52YWx1ZSl7Y29uc3Qgbz1hd2FpdCBjcmVhdGVJbWFnZUJpdG1hcCh0LnZhbHVlKTt0aGlzLnNldEJhY2tncm91bmRJbWFnZShvKSx0LnZhbHVlLmNsb3NlKCl9fX1jbGFzcyBQb3tibHVyQmFja2dyb3VuZChlKXtyZXR1cm4gbmV3IGZzKGUpfWJsdXJTaWxob3VldHRlKGUpe3JldHVybiBuZXcgbHMoZSl9aW1hZ2VCYWNrZ3JvdW5kKCl7cmV0dXJuIG5ldyBkc312aWRlb0JhY2tncm91bmQoKXtyZXR1cm4gbmV3ICRmfX12YXIgV2Y9YHByZWNpc2lvbiBtZWRpdW1wIGZsb2F0OwoKdmFyeWluZyB2ZWMyIF90ZXh0dXJlX2Nvb3JkOwoKdW5pZm9ybSB2ZWMyIGNhbnZhczsKdW5pZm9ybSBzYW1wbGVyMkQgdGV4dHVyZTsKdW5pZm9ybSBzYW1wbGVyMkQgbWFzazsKCnZlYzQgbG9vcCgpOwoKdm9pZCBtYWluKCkgeyBnbF9GcmFnQ29sb3IgPSBsb29wKCk7IH0KYCxWZj1gdmFyeWluZyB2ZWMyIF90ZXh0dXJlX2Nvb3JkOwoKYXR0cmlidXRlIHZlYzIgcG9zaXRpb247CmF0dHJpYnV0ZSB2ZWMyIHRleHR1cmVfY29vcmQ7Cgp2b2lkIG1haW4oKSB7CiAgZ2xfUG9zaXRpb24gPSB2ZWM0KHBvc2l0aW9uLCAwLiwgMS4pOwogIF90ZXh0dXJlX2Nvb3JkID0gdGV4dHVyZV9jb29yZDsKfQpgO2NsYXNzIEhmIGV4dGVuZHMgdmV7Z2V0RGVmaW5lcygpe3ZhciBlO3JldHVybntSQURJVVM6KGU9dGhpcy5vcHRpb25zLnJhZGl1cykhPW51bGw/ZToxfX1nZXRGcmFnbWVudFNoYWRlcigpe3JldHVybiBXZit0aGlzLmNyZWF0ZUxvb3BGdW5jdGlvbigpfWdldFZlcnRleFNoYWRlcigpe3JldHVybiBWZn1jcmVhdGVMb29wRnVuY3Rpb24oKXt2YXIgdDtsZXQgZT0odD10aGlzLm9wdGlvbnMucmFkaXVzKSE9bnVsbD90OjE7cmV0dXJuYAoKICAgICAgICB2ZWM0IGxvb3AoKSB7IAogICAgICAgICAgICB2ZWM0IHJlc3VsdCA9IHZlYzQoMCwwLDAsMCk7CiAgICAgICAgICAgIGZsb2F0IGZhY3RvclN1bSA9IDAuOwoKICAgICAgICAgICAgdmVjMiBub3JtYWxpemVkUmFkaXVzID0gdmVjMigtJHtlfS4pIC8gY2FudmFzOwogICAgICAgICAgICB2ZWMyIG5vcm1hbGl6ZWRJbmNyZW1lbnQgPSB2ZWMyKDEuKSAvIGNhbnZhczsKICAgICAgICAgICAgdmVjMiBkaWZmID0gbm9ybWFsaXplZFJhZGl1czsKICAgICAgICAgICAgZmxvYXQgbWF4TGVuZ3RoID0gbGVuZ3RoKG5vcm1hbGl6ZWRSYWRpdXMpOwoKICAgICAgICAgICAgZm9yKGludCB5PS0ke2V9OyB5PCR7ZSsxfTsgKyt5KSB7CiAgICAgICAgICAgICAgICBmb3IoaW50IHg9LSR7ZX07IHg8JHtlKzF9OyArK3gpIHsKICAgICAgICAgICAgICAgICAgICBmbG9hdCBmYWN0b3IgPSAoMS4tIHRleHR1cmUyRChtYXNrLCBfdGV4dHVyZV9jb29yZCArIGRpZmYpLmEpICogKG1heExlbmd0aCAtIGxlbmd0aChkaWZmKSkgLyBtYXhMZW5ndGg7CiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IGZhY3RvciAqIHRleHR1cmUyRCh0ZXh0dXJlLCBfdGV4dHVyZV9jb29yZCArIGRpZmYpOwogICAgICAgICAgICAgICAgICAgIGZhY3RvclN1bSArPSBmYWN0b3I7CiAgICAgICAgICAgICAgICAgICAgZGlmZi54ICs9IG5vcm1hbGl6ZWRJbmNyZW1lbnQueDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGRpZmYueSArPSBub3JtYWxpemVkSW5jcmVtZW50Lnk7CiAgICAgICAgICAgICAgICBkaWZmLnggPSBub3JtYWxpemVkUmFkaXVzLng7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCAvIGZhY3RvclN1bTsKICAgICAgICB9YH19Y29uc3QgamY9MTAsWWY9MixYZj04O2NsYXNzIFFmIGV4dGVuZHMgTnJ7Y29uc3RydWN0b3IodCxuKXtzdXBlcigpO2wodGhpcywiaW5wdXRJbWFnZSIpO2wodGhpcywiaW5wdXRNYXNrIik7bCh0aGlzLCJibHVyIik7dGhpcy5jb250ZXh0PXQsdGhpcy5yYWRpdXM9bjtjb25zdCBvPXtjb250ZXh0OnQsaGVpZ2h0OnQuY2FudmFzLmhlaWdodCx3aWR0aDp0LmNhbnZhcy53aWR0aH07dGhpcy5ibHVyPW5ldyBIZih7Li4ubyxyYWRpdXM6biwuLi50aGlzLmdldEJsdXJUZXh0dXJlU2l6ZSh0LmNhbnZhcy53aWR0aCx0LmNhbnZhcy5oZWlnaHQpfSk7Y29uc3QgaT1uZXcgT3Ioey4uLm8sZGlzYWJsZUZyYW1lYnVmZmVyOiEwfSk7dGhpcy5hZGRTdGVwKHtwcm9ncmFtOnRoaXMuYmx1cixwcmV2ZW50UmVzaXplOiEwLGdldFVuaWZvcm1zOigpPT4oe3RleHR1cmU6QSh0LHRoaXMuaW5wdXRJbWFnZSksbWFzazpBKHQsdGhpcy5pbnB1dE1hc2spfSl9KSx0aGlzLmFkZFN0ZXAoe3Byb2dyYW06aSxnZXRVbmlmb3JtczooKT0+KHtiYWNrZ3JvdW5kOkEodCx0aGlzLmJsdXIub3V0cHV0KSxmb3JlZ3JvdW5kOkEodCx0aGlzLmlucHV0SW1hZ2UpLHRocmVzaG9sZDpBKHQsdGhpcy5pbnB1dE1hc2spfSl9KX1nZXRCbHVyVGV4dHVyZVNpemUodCxuKXtjb25zdCBvPXRoaXMucmFkaXVzPmpmP1hmOllmO3JldHVybnt3aWR0aDpNYXRoLm1heChNZSx0L28pLGhlaWdodDpNYXRoLm1heChNZSxuL28pfX1zZXREYXRhKHQsbil7dGhpcy5pbnB1dEltYWdlPXQsdGhpcy5pbnB1dE1hc2s9bn1yZXNpemVPdXRwdXQodCxuKXtzdXBlci5yZXNpemVPdXRwdXQodCxuKTtjb25zdCBvPXRoaXMuZ2V0Qmx1clRleHR1cmVTaXplKHQsbik7dGhpcy5ibHVyLnJlc2l6ZU91dHB1dChvLndpZHRoLG8uaGVpZ2h0KX19Y2xhc3MgcWYgZXh0ZW5kcyBMdHtjb25zdHJ1Y3Rvcih0KXtzdXBlcigpO2wodGhpcywicGlwZWxpbmUiKTt0aGlzLnBpcGVsaW5lPW5ldyBRZih0aGlzLmNvbnRleHQsdCksdGhpcy5kaXNhYmxlUG9zdFByb2Nlc3NpbmcoKX19Y2xhc3MgS2YgZXh0ZW5kcyBOcntjb25zdHJ1Y3Rvcih0LG4pe3N1cGVyKCk7bCh0aGlzLCJpbnB1dEltYWdlIik7bCh0aGlzLCJpbnB1dE1hc2siKTt0aGlzLmNvbnRleHQ9dDtjb25zdCBvPXtjb250ZXh0OnQsaGVpZ2h0OnQuY2FudmFzLmhlaWdodCx3aWR0aDp0LmNhbnZhcy53aWR0aH0saT1uZXcgUm8oey4uLm8scmFkaXVzOm4sdHlwZTpMci5HQVVTU0lBTn0pLHM9bmV3IE9yKHsuLi5vLGRpc2FibGVGcmFtZWJ1ZmZlcjohMH0pO3RoaXMuYWRkU3RlcCh7cHJvZ3JhbTppLGdldFVuaWZvcm1zOigpPT4oe3RleHR1cmU6QSh0LHRoaXMuaW5wdXRJbWFnZSl9KX0pLHRoaXMuYWRkU3RlcCh7cHJvZ3JhbTpzLGdldFVuaWZvcm1zOigpPT4oe2JhY2tncm91bmQ6QSh0LHRoaXMuaW5wdXRJbWFnZSksZm9yZWdyb3VuZDpBKHQsaS5vdXRwdXQpLHRocmVzaG9sZDpBKHQsdGhpcy5pbnB1dE1hc2spfSl9KX1zZXREYXRhKHQsbil7dGhpcy5pbnB1dEltYWdlPXQsdGhpcy5pbnB1dE1hc2s9bn19Y2xhc3MgSmYgZXh0ZW5kcyBMdHtjb25zdHJ1Y3Rvcih0KXtzdXBlcigpO2wodGhpcywicGlwZWxpbmUiKTt0aGlzLnBpcGVsaW5lPW5ldyBLZih0aGlzLmNvbnRleHQsdCksdGhpcy5kaXNhYmxlUG9zdFByb2Nlc3NpbmcoKX19Y2xhc3MgWmYgZXh0ZW5kcyBJb3tjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyk7bCh0aGlzLCJmcmFtZVJlYWRlciIpO2wodGhpcywicHJlY2lzZU1hc2tFbmFibGVkIiwhMCl9c2V0IHJlYWRlcih0KXt0aGlzLmZyYW1lUmVhZGVyPXR9YXN5bmMgcnVuKCl7dGhpcy5mcmFtZVJlYWRlciYmKGF3YWl0IHRoaXMucmVhZE5leHRWaWRlb0ZyYW1lKCksYXdhaXQgc3VwZXIucnVuKCkpfWFzeW5jIHJlYWROZXh0VmlkZW9GcmFtZSgpe3ZhciBuO2NvbnN0IHQ9YXdhaXQoKG49dGhpcy5mcmFtZVJlYWRlcik9PW51bGw/dm9pZCAwOm4ucmVhZCgpKTt0IT1udWxsJiZ0LnZhbHVlJiYodGhpcy5pbnB1dEJhY2tncm91bmRJbWFnZT1hd2FpdCBjcmVhdGVJbWFnZUJpdG1hcCh0LnZhbHVlKSx0LnZhbHVlLmNsb3NlKCkpfX1jbGFzcyBlbCBleHRlbmRzIEx0e2NvbnN0cnVjdG9yKCl7c3VwZXIoKTtsKHRoaXMsInBpcGVsaW5lIik7dGhpcy5waXBlbGluZT1uZXcgWmYodGhpcy5jb250ZXh0KX1zZXRCYWNrZ3JvdW5kVmlkZW8odCl7dGhpcy5waXBlbGluZS5yZWFkZXI9dH19Y2xhc3Mga297Ymx1ckJhY2tncm91bmQoZSl7cmV0dXJuIG5ldyBxZihlKX1ibHVyU2lsaG91ZXR0ZShlKXtyZXR1cm4gbmV3IEpmKGUpfWltYWdlQmFja2dyb3VuZCgpe3JldHVybiBuZXcgRm99dmlkZW9CYWNrZ3JvdW5kKCl7cmV0dXJuIG5ldyBlbH19Y2xhc3MgdGx7Y29uc3RydWN0b3IoZSl7bCh0aGlzLCJmYWN0b3J5Iik7c3dpdGNoKGUpe2Nhc2UgZ3QuQ0FOVkFTOnRoaXMuZmFjdG9yeT1uZXcgUG87YnJlYWs7Y2FzZSBndC5XRUJHTDp0aGlzLmZhY3Rvcnk9bmV3IGtvO2JyZWFrO2RlZmF1bHQ6Y29uc3QgdD1jcygpO3RoaXMuZmFjdG9yeT10LnN1cHBvcnRlZD9uZXcga286bmV3IFBvfX1ibHVyQmFja2dyb3VuZChlKXtyZXR1cm4gdGhpcy5nZXRGYWN0b3J5KCkuYmx1ckJhY2tncm91bmQoZSl9Ymx1clNpbGhvdWV0dGUoZSl7cmV0dXJuIHRoaXMuZ2V0RmFjdG9yeSgpLmJsdXJTaWxob3VldHRlKGUpfWltYWdlQmFja2dyb3VuZCgpe3JldHVybiB0aGlzLmdldEZhY3RvcnkoKS5pbWFnZUJhY2tncm91bmQoKX12aWRlb0JhY2tncm91bmQoKXtyZXR1cm4gdGhpcy5nZXRGYWN0b3J5KCkudmlkZW9CYWNrZ3JvdW5kKCl9Z2V0RmFjdG9yeSgpe2lmKCF0aGlzLmZhY3RvcnkpdGhyb3ciRmFjdG9yeSBpcyBub3QgaW5pdGlhbGl6ZWQiO3JldHVybiB0aGlzLmZhY3Rvcnl9fWNsYXNzIHJse2NvbnN0cnVjdG9yKCl7bCh0aGlzLCJyZW5kZXJlciIpO2wodGhpcywiYmFja2dyb3VuZFZpZGVvIik7bCh0aGlzLCJiYWNrZ3JvdW5kSW1hZ2UiKX1zZXRCYWNrZ3JvdW5kT3B0aW9ucyhlKXt2YXIgbixvO2NvbnN0IHQ9bmV3IHRsKChuPWUucmVuZGVyaW5nT3B0aW9ucyk9PW51bGw/dm9pZCAwOm4udHlwZSk7c3dpdGNoKGUudHJhbnNmb3JtZXJUeXBlKXtjYXNlIkJhY2tncm91bmRCbHVyIjp0aGlzLnJlbmRlcmVyPXQuYmx1ckJhY2tncm91bmQodGhpcy5nZXRCbHVyU2l6ZShlLnJhZGl1cykpO2JyZWFrO2Nhc2UiU2lsaG91ZXR0ZUJsdXIiOnRoaXMucmVuZGVyZXI9dC5ibHVyU2lsaG91ZXR0ZSh0aGlzLmdldEJsdXJTaXplKGUucmFkaXVzKSk7YnJlYWs7Y2FzZSJWaWRlb0JhY2tncm91bmQiOmNvbnN0IGk9dC52aWRlb0JhY2tncm91bmQoKTt0aGlzLmJhY2tncm91bmRWaWRlbyYmaS5zZXRCYWNrZ3JvdW5kVmlkZW8odGhpcy5iYWNrZ3JvdW5kVmlkZW8pLHRoaXMucmVuZGVyZXI9aTticmVhaztjYXNlIlZpcnR1YWxCYWNrZ3JvdW5kIjpjb25zdCBzPXQuaW1hZ2VCYWNrZ3JvdW5kKCk7dGhpcy5iYWNrZ3JvdW5kSW1hZ2UmJnMuc2V0QmFja2dyb3VuZEltYWdlKHRoaXMuYmFja2dyb3VuZEltYWdlKSx0aGlzLnJlbmRlcmVyPXM7YnJlYWs7ZGVmYXVsdDp0aHJvd2BVbmtub3duIHJlbmRlcmluZyB0eXBlIFske2UudHJhbnNmb3JtZXJUeXBlfV1gfSgobz1lLnJlbmRlcmluZ09wdGlvbnMpPT1udWxsP3ZvaWQgMDpvLnR5cGUpPT09Z3QuV0VCR0wmJihlLnJlbmRlcmluZ09wdGlvbnMuc2VsZmllU2VnbWVudGF0aW9uVHlwZT09PXJyLlBSRUNJU0U/dGhpcy5yZW5kZXJlci5lbmFibGVQb3N0UHJvY2Vzc2luZygpOmUucmVuZGVyaW5nT3B0aW9ucy5zZWxmaWVTZWdtZW50YXRpb25UeXBlPT09cnIuRkFTVCYmdGhpcy5yZW5kZXJlci5kaXNhYmxlUG9zdFByb2Nlc3NpbmcoKSl9c2V0RmxpY2tlcmluZ09wdGlvbnMoZSl7dmFyIHQ7KHQ9dGhpcy5yZW5kZXJlcik9PW51bGx8fHQuc2V0RmxpY2tlcmluZ09wdGlvbnMoZSl9c2V0VmlkZW9CR1JlYWRhYmxlKGUpe3RoaXMuYmFja2dyb3VuZFZpZGVvPWUuZ2V0UmVhZGVyKCk7Y29uc3QgdD10aGlzLnJlbmRlcmVyO3QhPW51bGwmJnQuc2V0QmFja2dyb3VuZFZpZGVvJiZ0LnNldEJhY2tncm91bmRWaWRlbyh0aGlzLmJhY2tncm91bmRWaWRlbyl9YXN5bmMgc2V0VmlydHVhbEJHSW1hZ2UoZSl7Y29uc3QgdD10aGlzLnJlbmRlcmVyO3QhPW51bGwmJnQuc2V0QmFja2dyb3VuZEltYWdlJiZ0LnNldEJhY2tncm91bmRJbWFnZShlKSx0aGlzLmJhY2tncm91bmRJbWFnZT1lfWFzeW5jIHByb2Nlc3MoZSx0KXtpZih0aGlzLnJlbmRlcmVyKXJldHVybiB0aGlzLnJlbmRlcmVyLnJlbmRlcihlLHQpfWFzeW5jIHJlc2l6ZUZvcmVncm91bmQoZSx0KXt9Z2V0Qmx1clNpemUoZT1wdC5Mb3cpe3N3aXRjaChlKXtjYXNlIHB0LkxvdzpyZXR1cm4gNTtjYXNlIHB0LkhpZ2g6cmV0dXJuIDEyfXJldHVybiBlfWFzeW5jIHByb2ZpbGUoZSl7dmFyIHQsbjtyZXR1cm4obj0odD10aGlzLnJlbmRlcmVyKT09bnVsbD92b2lkIDA6dC5wcm9maWxlV2ViZ2woZSkpIT1udWxsP246W119fWNsYXNzIG5se2NvbnN0cnVjdG9yKCl7bCh0aGlzLCJzZWxmaWVTZWdtZW50YXRpb24iLG5ldyB1cyk7bCh0aGlzLCJiYWNrZ3JvdW5kRmlsdGVyIik7bCh0aGlzLCJyZXBvcnRlciIsbmV3IHRzKTtsKHRoaXMsImlzRW5hYmxlZCIsITApO2wodGhpcywiYmFja2dyb3VuZE9wdGlvbnMiKX1hc3luYyBpbml0KGUsdCl7YXdhaXQgdGhpcy5zZWxmaWVTZWdtZW50YXRpb24uaW5pdCh0Lndhc21Bc3NldFVyaVBhdGgsdC50ZmxpdGVBc3NldFVyaVBhdGgpLHRoaXMuYmFja2dyb3VuZEZpbHRlcj1uZXcgcmwsdGhpcy5yZXBvcnQoe3ZhcmlhdGlvbjoiQ3JlYXRlIn0pfWFzeW5jIHRyYW5zZm9ybShlLHQpe3ZhciBhLHU7aWYoIXRoaXMuaXNFbmFibGVkKXJldHVybiB0LmVucXVldWUoZSk7bGV0IG47Y29uc3Qgbz0oYT1lLnRpbWVzdGFtcCkhPW51bGw/YTowLGk9YXdhaXQgY3JlYXRlSW1hZ2VCaXRtYXAoZSkscz1hd2FpdCB0aGlzLnNlbGZpZVNlZ21lbnRhdGlvbi5wcm9jZXNzKGkpO3MmJihuPWF3YWl0KCh1PXRoaXMuYmFja2dyb3VuZEZpbHRlcik9PW51bGw/dm9pZCAwOnUucHJvY2VzcyhpLHMpKSksbj8oZS5jbG9zZSgpLHQuZW5xdWV1ZShuZXcgVmlkZW9GcmFtZShuLHt0aW1lc3RhbXA6byxhbHBoYToiZGlzY2FyZCJ9KSkpOnQuZW5xdWV1ZShlKX1hc3luYyBzZXRCYWNrZ3JvdW5kT3B0aW9ucyhlKXt2YXIgdDt0aGlzLmJhY2tncm91bmRPcHRpb25zPWUsYXdhaXQoKHQ9dGhpcy5iYWNrZ3JvdW5kRmlsdGVyKT09bnVsbD92b2lkIDA6dC5zZXRCYWNrZ3JvdW5kT3B0aW9ucyhlKSksdGhpcy5yZXBvcnQoe3ZhcmlhdGlvbjoiVXBkYXRlIn0pfWFzeW5jIHNldFZpZGVvQkdSZWFkYWJsZShlKXt2YXIgdDthd2FpdCgodD10aGlzLmJhY2tncm91bmRGaWx0ZXIpPT1udWxsP3ZvaWQgMDp0LnNldFZpZGVvQkdSZWFkYWJsZShlKSl9YXN5bmMgc2V0VmlydHVhbEJHSW1hZ2UoZSl7dmFyIHQ7YXdhaXQoKHQ9dGhpcy5iYWNrZ3JvdW5kRmlsdGVyKT09bnVsbD92b2lkIDA6dC5zZXRWaXJ0dWFsQkdJbWFnZShlKSl9c2V0RmxpY2tlcmluZ09wdGlvbnMoZSl7dmFyIHQ7KHQ9dGhpcy5iYWNrZ3JvdW5kRmlsdGVyKT09bnVsbHx8dC5zZXRGbGlja2VyaW5nT3B0aW9ucyhlKSx0aGlzLnJlcG9ydCh7dmFyaWF0aW9uOiJVcGRhdGUifSl9YXN5bmMgcHJvZmlsZShlKXt2YXIgdCxuO3JldHVybihuPSh0PXRoaXMuYmFja2dyb3VuZEZpbHRlcik9PW51bGw/dm9pZCAwOnQucHJvZmlsZShlKSkhPW51bGw/bjpbXX1nZXRUcmFuc2Zvcm1lclR5cGUoKXt2YXIgZSx0O3JldHVybih0PShlPXRoaXMuYmFja2dyb3VuZE9wdGlvbnMpPT1udWxsP3ZvaWQgMDplLnRyYW5zZm9ybWVyVHlwZSkhPW51bGw/dDoiVW5kZWZpbmVkIn1lbmFibGUoKXt0aGlzLmlzRW5hYmxlZD0hMH1kaXNhYmxlKCl7dGhpcy5pc0VuYWJsZWQ9ITF9cmVwb3J0KGUpe3ZhciB0O3RoaXMucmVwb3J0ZXIuc2VuZCh7dmVyc2lvbjpycyxhY3Rpb246Ik1sVHJhbnNmb3JtZXJzIix0cmFuc2Zvcm1lclR5cGU6KHQ9dGhpcy5iYWNrZ3JvdW5kT3B0aW9ucyk9PW51bGw/dm9pZCAwOnQudHJhbnNmb3JtZXJUeXBlLGNvbmZpZzpKU09OLnN0cmluZ2lmeSh0aGlzLmJhY2tncm91bmRPcHRpb25zKSwuLi5lfSl9fWNvbnN0IEdyPWNsYXNze2NvbnN0cnVjdG9yKCl7bCh0aGlzLCJiYWNrZ3JvdW5kVHJhbnNmb3JtZXIiLG5ldyBubCk7bCh0aGlzLCJtZWRpYVByb2Nlc3NvciIsbmV3IGtpKTtsKHRoaXMsInJhdGUiLDMwKTtsKHRoaXMsInJlc29sdmVPbk1lZGlhUHJvY2Vzc29yIik7bCh0aGlzLCJldmVudHNRdWV1ZSIsW10pfWFzeW5jIGluaXQoZSx0KXthd2FpdCB0aGlzLmJhY2tncm91bmRUcmFuc2Zvcm1lci5pbml0KGUsdCksYXdhaXQgdGhpcy5tZWRpYVByb2Nlc3Nvci5zZXRUcmFuc2Zvcm1lcnMoW3RoaXMuYmFja2dyb3VuZFRyYW5zZm9ybWVyXSksdGhpcy5tZWRpYVByb2Nlc3Nvci5zZXRUcmFja0V4cGVjdGVkUmF0ZSh0aGlzLnJhdGUpLHRoaXMubWVkaWFQcm9jZXNzb3Iub25BbnkoKG4sbyk9Pnt0aGlzLnJlc29sdmVPbk1lZGlhUHJvY2Vzc29yPyh0aGlzLnJlc29sdmVPbk1lZGlhUHJvY2Vzc29yKHtuYW1lOm4sZGF0YTpvfSksdGhpcy5yZXNvbHZlT25NZWRpYVByb2Nlc3Nvcj12b2lkIDApOnRoaXMuZXZlbnRzUXVldWUucHVzaCh7bmFtZTpuLGRhdGE6b30pfSl9ZW5hYmxlKCl7dGhpcy5iYWNrZ3JvdW5kVHJhbnNmb3JtZXIuZW5hYmxlKCl9ZGlzYWJsZSgpe3RoaXMuYmFja2dyb3VuZFRyYW5zZm9ybWVyLmRpc2FibGUoKX1hc3luYyBvbk1lZGlhUHJvY2Vzc29yRXZlbnQoKXtyZXR1cm4gYXdhaXQgbmV3IFByb21pc2UoZT0+e3RoaXMuZXZlbnRzUXVldWUubGVuZ3RoPjA/ZSh0aGlzLmV2ZW50c1F1ZXVlLnNoaWZ0KCkpOnRoaXMucmVzb2x2ZU9uTWVkaWFQcm9jZXNzb3I9ZX0pfWFzeW5jIHNldFRyYWNrRXhwZWN0ZWRSYXRlKGUpe3RoaXMucmF0ZT1lLHRoaXMubWVkaWFQcm9jZXNzb3Iuc2V0VHJhY2tFeHBlY3RlZFJhdGUoZSl9YXN5bmMgdHJhbnNmb3JtKGUsdCl7dGhpcy5tZWRpYVByb2Nlc3Nvci50cmFuc2Zvcm0oZSx0KX1hc3luYyBzZXRCYWNrZ3JvdW5kT3B0aW9ucyhlKXt2YXIgdDthd2FpdCgodD10aGlzLmJhY2tncm91bmRUcmFuc2Zvcm1lcik9PW51bGw/dm9pZCAwOnQuc2V0QmFja2dyb3VuZE9wdGlvbnMoZSkpfXNldFZpZGVvQkdSZWFkYWJsZShlKXt0aGlzLmJhY2tncm91bmRUcmFuc2Zvcm1lci5zZXRWaWRlb0JHUmVhZGFibGUoZSl9YXN5bmMgc2V0VmlydHVhbEJHSW1hZ2UoZSl7YXdhaXQgdGhpcy5iYWNrZ3JvdW5kVHJhbnNmb3JtZXIuc2V0VmlydHVhbEJHSW1hZ2UoZSl9YXN5bmMgdGVybWluYXRlKCl7YXdhaXQgdGhpcy5tZWRpYVByb2Nlc3Nvci5kZXN0cm95KCl9c2V0RmxpY2tlcmluZ09wdGlvbnMoZSl7dGhpcy5iYWNrZ3JvdW5kVHJhbnNmb3JtZXIuc2V0RmxpY2tlcmluZ09wdGlvbnMoZSl9c2V0Vm9uYWdlTWV0YWRhdGEoZSl7QWkoZSl9YXN5bmMgcHJvZmlsZShlKXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkoYXdhaXQgdGhpcy5iYWNrZ3JvdW5kVHJhbnNmb3JtZXIucHJvZmlsZShlKSl9fTtsZXQgRG89R3I7KCgpPT57SG8oIlByb2Nlc3NvcldvcmtlciIsR3IpfSkoKX0pKCk7Cg==",f2=typeof window<"u"&&window.Blob&&new Blob([atob(h2)],{type:"text/javascript;charset=utf-8"});function E3(){const i=f2&&(window.URL||window.webkitURL).createObjectURL(f2);try{return i?new Worker(i):new Worker("data:application/javascript;base64,"+h2)}finally{i&&(window.URL||window.webkitURL).revokeObjectURL(i)}}const ms=class extends cr{constructor(r){super();gt(this,"rate",30);gt(this,"worker");gt(this,"config");gt(this,"backgroundOptions");gt(this,"isEnabled",!0);this.config=r}async setTrackExpectedRate(r){var f;await this.startWorker(),await((f=this.worker)==null?void 0:f.setTrackExpectedRate(r))}async setBackgroundOptions(r){this.backgroundOptions=r,await this.updateBackgroundOptions(r)}async transform(r,f){var Z;await this.startWorker(),await((Z=this.worker)==null?void 0:Z.transform(r,f))}async destroy(){var r;await((r=this.worker)==null?void 0:r.terminate()),this.worker=void 0}async setFlickeringOptions(r){var f;await this.startWorker(),await((f=this.worker)==null?void 0:f.setFlickeringOptions(r))}async profile(r){var Z;const f=await((Z=this.worker)==null?void 0:Z.profile(r));return JSON.parse(f!=null?f:"[]")}async enable(){var r;this.isEnabled=!0,await((r=this.worker)==null?void 0:r.enable())}async disable(){var r;this.isEnabled=!1,await((r=this.worker)==null?void 0:r.disable())}async listenWorker(){var r,f;for(;(r=this.worker)!=null&&r.workerContext.worker;){const{name:Z,data:I}=await((f=this.worker)==null?void 0:f.onMediaProcessorEvent());switch(Z){case"error":case"warn":this.emit(Z,I);break;case"pipelineInfo":switch(this.emit(Z,I),I){case"pipeline_ended":case"pipeline_ended_with_error":await this.destroy();return}break}}}async startWorker(){!this.config||this.worker||(this.worker=await pc(ds,E3),this.isEnabled||await this.worker.disable(),await this.worker.init(`worker_${ms.initCount++}`,this.config),this.backgroundOptions&&await this.updateBackgroundOptions(this.backgroundOptions),await this.worker.setVonageMetadata(pi()),await this.setBackgroundOptions(this.config),this.listenWorker())}async updateBackgroundOptions(r){var Z,I,F;await this.startWorker();const{transformerType:f}=r;switch(f){case"VideoBackground":await((Z=this.worker)==null?void 0:Z.setVideoBGReadable(await Es.createVideoReadable(r.backgroundAssetUri)));break;case"VirtualBackground":await((I=this.worker)==null?void 0:I.setVirtualBGImage(await Es.createImageCanvas(r.backgroundAssetUri)));break}await((F=this.worker)==null?void 0:F.setBackgroundOptions(r))}};let fo=ms;gt(fo,"initCount",0);class U3{constructor(n){this.queries=n}async downloadSpeedscope(){this.download(await this.convertToSpeedscope())}download(n){const r=document.createElement("a");r.href=URL.createObjectURL(new Blob([n],{type:"application/json"})),r.download=`profile-${+new Date}.speedscope.json`,document.body.appendChild(r),r.click(),document.body.removeChild(r)}convertToSpeedscope(){const n=[],r={},f=[];let Z=0;for(const F of this.queries){const T=[];for(const J of F)r[J.name]===void 0&&(r[J.name]=n.length,n.push({name:J.name})),T.push({type:J.action==l2.PUSH?"O":"C",frame:r[J.name],at:J.timestamp}),Z=Math.max(Z,J.timestamp+J.duration);f.push({events:T,type:"evented",name:"GPU Profile",unit:"nanoseconds",startValue:0,endValue:Z})}const I={$schema:"https://www.speedscope.app/file-format-schema.json",shared:{frames:n},profiles:f};return JSON.stringify(I,null,2)}}class hs extends cr{constructor(r){super();gt(this,"worker");gt(this,"connector");this.worker=new fo(r),this.connector=new D2(this.worker),this.worker.onAny((f,Z)=>this.emit(f,Z))}async setBackgroundOptions(r){await this.worker.setBackgroundOptions(r)}async enable(){await this.worker.enable()}async disable(){await this.worker.disable()}setTrackExpectedRate(r){this.worker.setTrackExpectedRate(r)}getConnector(){return this.connector}async profile(r){return this.worker.profile(r)}static async profile(r){const f=await Promise.all(this.instances.map(Z=>Z.profile(r)));return new U3(f)}static async create(r){const f=new this(r);return this.instances.push(f),f}}gt(hs,"instances",[]);function B3(){return Zi}function K3(){return vi}function M3(){return Gi}function A3(){return Xi}function z3(){return Wi}function j3(){return Vi}function O3(){return Ri}async function P3(i){return await hs.create(i)}Ue.BackgroundTransformer=d2,Ue.BackgroundTransformerType=Rs,Ue.BlurRadius=_r,Ue.ErrorFunction=Vs,Ue.MediapipeHelper=xi,Ue.PipelineInfoData=yi,Ue.RenderingType=Qr,Ue.VonageMediaProcessor=hs,Ue.WarningType=Ws,Ue.WebglSelfieSegmentationType=gi,Ue.createVonageMediaProcessor=P3,Ue.getSupportedBrowserFeatures=Is,Ue.getVonageFaceDetection=A3,Ue.getVonageFaceMash=z3,Ue.getVonageHands=K3,Ue.getVonageHolistic=M3,Ue.getVonageObjectron=j3,Ue.getVonagePose=O3,Ue.getVonageSelfieSegmentation=B3,Ue.isSupported=ic,Object.defineProperties(Ue,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}})});
|