@vonage/ml-transformers 4.0.1 → 4.2.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/dist/docs/assets/search.js +1 -1
- package/dist/docs/classes/BackgroundTransformer.html +1 -0
- package/dist/docs/classes/MediapipeHelper.html +1 -1
- package/dist/docs/classes/VonageMediaProcessor.html +1 -1
- package/dist/docs/enums/BlurRadius.html +1 -1
- package/dist/docs/enums/ErrorFunction.html +1 -1
- package/dist/docs/enums/PipelineInfoData.html +1 -1
- package/dist/docs/enums/SelfieSegmentationType.html +1 -1
- package/dist/docs/enums/WarningType.html +1 -1
- package/dist/docs/index.html +1 -1
- package/dist/docs/interfaces/FaceDetectionOptions.html +1 -1
- package/dist/docs/interfaces/FaceDetectionResults.html +1 -1
- package/dist/docs/interfaces/FaceMeshOptions.html +1 -1
- package/dist/docs/interfaces/FaceMeshResults.html +1 -1
- package/dist/docs/interfaces/FeatureSupport.html +7 -0
- package/dist/docs/interfaces/HandsOptions.html +1 -1
- package/dist/docs/interfaces/HandsResults.html +1 -1
- package/dist/docs/interfaces/HolisticOptions.html +1 -1
- package/dist/docs/interfaces/HolisticResults.html +1 -1
- package/dist/docs/interfaces/ObjectronOptions.html +1 -1
- package/dist/docs/interfaces/ObjectronResults.html +1 -1
- package/dist/docs/interfaces/PoseOptions.html +1 -1
- package/dist/docs/interfaces/PoseResults.html +1 -1
- package/dist/docs/interfaces/SelfieSegmentationOptions.html +1 -1
- package/dist/docs/interfaces/SelfieSegmentationResults.html +1 -1
- package/dist/docs/interfaces/SupportedBrowserFeatures.html +11 -0
- package/dist/docs/modules.html +8 -5
- package/dist/ml-transformers.es.js +20573 -20543
- package/dist/ml-transformers.min.js +4 -0
- package/dist/ml-transformers.static.js +29539 -0
- package/dist/ml-transformers.umd.js +50 -50
- package/dist/types/main.d.ts +5 -4
- package/dist/types/src/types.d.ts +34 -0
- package/dist/types/src/utils/support.d.ts +9 -3
- package/dist/types/src/wasm/selfie-segmentation/loader.d.ts +1 -0
- package/dist/types/src/wasm/selfie-segmentation/wrapper.d.ts +2 -0
- package/package.json +4 -2
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
(function(
|
|
2
|
-
`),function(T){if(S=T.indexOf(":"),p=qi.trim(T.substr(0,S)).toLowerCase(),y=qi.trim(T.substr(S+1)),p){if(o[p]&&Uu.indexOf(p)>=0)return;p==="set-cookie"?o[p]=(o[p]?o[p]:[]).concat([y]):o[p]=o[p]?o[p]+", "+y:y}}),o},us=On,Bu=us.isStandardBrowserEnv()?function(){var n=/(msie|trident)/i.test(navigator.userAgent),o=document.createElement("a"),p;function y(S){var F=S;return n&&(o.setAttribute("href",F),F=o.href),o.setAttribute("href",F),{href:o.href,protocol:o.protocol?o.protocol.replace(/:$/,""):"",host:o.host,search:o.search?o.search.replace(/^\?/,""):"",hash:o.hash?o.hash.replace(/^#/,""):"",hostname:o.hostname,port:o.port,pathname:o.pathname.charAt(0)==="/"?o.pathname:"/"+o.pathname}}return p=y(window.location.href),function(F){var T=us.isString(F)?y(F):F;return T.protocol===p.protocol&&T.host===p.host}}():function(){return function(){return!0}}();function to(i){this.message=i}to.prototype.toString=function(){return"Cancel"+(this.message?": "+this.message:"")},to.prototype.__CANCEL__=!0;var ni=to,ri=On,Mu=Fu,Au=Hu,ju=os,zu=ku,Pu=Ku,Ou=Bu,eo=ls,_u=oi,Qu=ni,cs=function(n){return new Promise(function(p,y){var S=n.data,F=n.headers,T=n.responseType,k;function rt(){n.cancelToken&&n.cancelToken.unsubscribe(k),n.signal&&n.signal.removeEventListener("abort",k)}ri.isFormData(S)&&delete F["Content-Type"];var z=new XMLHttpRequest;if(n.auth){var st=n.auth.username||"",Gt=n.auth.password?unescape(encodeURIComponent(n.auth.password)):"";F.Authorization="Basic "+btoa(st+":"+Gt)}var Vt=zu(n.baseURL,n.url);z.open(n.method.toUpperCase(),ju(Vt,n.params,n.paramsSerializer),!0),z.timeout=n.timeout;function dt(){if(!!z){var Yt="getAllResponseHeaders"in z?Pu(z.getAllResponseHeaders()):null,Ft=!T||T==="text"||T==="json"?z.responseText:z.response,Mt={data:Ft,status:z.status,statusText:z.statusText,headers:Yt,config:n,request:z};Mu(function(Ae){p(Ae),rt()},function(Ae){y(Ae),rt()},Mt),z=null}}if("onloadend"in z?z.onloadend=dt:z.onreadystatechange=function(){!z||z.readyState!==4||z.status===0&&!(z.responseURL&&z.responseURL.indexOf("file:")===0)||setTimeout(dt)},z.onabort=function(){!z||(y(eo("Request aborted",n,"ECONNABORTED",z)),z=null)},z.onerror=function(){y(eo("Network Error",n,null,z)),z=null},z.ontimeout=function(){var Ft=n.timeout?"timeout of "+n.timeout+"ms exceeded":"timeout exceeded",Mt=n.transitional||_u.transitional;n.timeoutErrorMessage&&(Ft=n.timeoutErrorMessage),y(eo(Ft,n,Mt.clarifyTimeoutError?"ETIMEDOUT":"ECONNABORTED",z)),z=null},ri.isStandardBrowserEnv()){var ht=(n.withCredentials||Ou(Vt))&&n.xsrfCookieName?Au.read(n.xsrfCookieName):void 0;ht&&(F[n.xsrfHeaderName]=ht)}"setRequestHeader"in z&&ri.forEach(F,function(Ft,Mt){typeof S=="undefined"&&Mt.toLowerCase()==="content-type"?delete F[Mt]:z.setRequestHeader(Mt,Ft)}),ri.isUndefined(n.withCredentials)||(z.withCredentials=!!n.withCredentials),T&&T!=="json"&&(z.responseType=n.responseType),typeof n.onDownloadProgress=="function"&&z.addEventListener("progress",n.onDownloadProgress),typeof n.onUploadProgress=="function"&&z.upload&&z.upload.addEventListener("progress",n.onUploadProgress),(n.cancelToken||n.signal)&&(k=function(Yt){!z||(y(!Yt||Yt&&Yt.type?new Qu("canceled"):Yt),z.abort(),z=null)},n.cancelToken&&n.cancelToken.subscribe(k),n.signal&&(n.signal.aborted?k():n.signal.addEventListener("abort",k))),S||(S=null),z.send(S)})},kn=On,as=Tu,Du=ss,$u={"Content-Type":"application/x-www-form-urlencoded"};function ds(i,n){!kn.isUndefined(i)&&kn.isUndefined(i["Content-Type"])&&(i["Content-Type"]=n)}function qu(){var i;return(typeof XMLHttpRequest!="undefined"||typeof process!="undefined"&&Object.prototype.toString.call(process)==="[object process]")&&(i=cs),i}function t2(i,n,o){if(kn.isString(i))try{return(n||JSON.parse)(i),kn.trim(i)}catch(p){if(p.name!=="SyntaxError")throw p}return(o||JSON.stringify)(i)}var ii={transitional:{silentJSONParsing:!0,forcedJSONParsing:!0,clarifyTimeoutError:!1},adapter:qu(),transformRequest:[function(n,o){return as(o,"Accept"),as(o,"Content-Type"),kn.isFormData(n)||kn.isArrayBuffer(n)||kn.isBuffer(n)||kn.isStream(n)||kn.isFile(n)||kn.isBlob(n)?n:kn.isArrayBufferView(n)?n.buffer:kn.isURLSearchParams(n)?(ds(o,"application/x-www-form-urlencoded;charset=utf-8"),n.toString()):kn.isObject(n)||o&&o["Content-Type"]==="application/json"?(ds(o,"application/json"),t2(n)):n}],transformResponse:[function(n){var o=this.transitional||ii.transitional,p=o&&o.silentJSONParsing,y=o&&o.forcedJSONParsing,S=!p&&this.responseType==="json";if(S||y&&kn.isString(n)&&n.length)try{return JSON.parse(n)}catch(F){if(S)throw F.name==="SyntaxError"?Du(F,this,"E_JSON_PARSE"):F}return n}],timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,maxBodyLength:-1,validateStatus:function(n){return n>=200&&n<300},headers:{common:{Accept:"application/json, text/plain, */*"}}};kn.forEach(["delete","get","head"],function(n){ii.headers[n]={}}),kn.forEach(["post","put","patch"],function(n){ii.headers[n]=kn.merge($u)});var oi=ii,e2=On,n2=oi,r2=function(n,o,p){var y=this||n2;return e2.forEach(p,function(F){n=F.call(y,n,o)}),n},hs=function(n){return!!(n&&n.__CANCEL__)},fs=On,no=r2,i2=hs,o2=oi,s2=ni;function ro(i){if(i.cancelToken&&i.cancelToken.throwIfRequested(),i.signal&&i.signal.aborted)throw new s2("canceled")}var l2=function(n){ro(n),n.headers=n.headers||{},n.data=no.call(n,n.data,n.headers,n.transformRequest),n.headers=fs.merge(n.headers.common||{},n.headers[n.method]||{},n.headers),fs.forEach(["delete","get","head","post","put","patch","common"],function(y){delete n.headers[y]});var o=n.adapter||o2.adapter;return o(n).then(function(y){return ro(n),y.data=no.call(n,y.data,y.headers,n.transformResponse),y},function(y){return i2(y)||(ro(n),y&&y.response&&(y.response.data=no.call(n,y.response.data,y.response.headers,n.transformResponse))),Promise.reject(y)})},Dn=On,ms=function(n,o){o=o||{};var p={};function y(z,st){return Dn.isPlainObject(z)&&Dn.isPlainObject(st)?Dn.merge(z,st):Dn.isPlainObject(st)?Dn.merge({},st):Dn.isArray(st)?st.slice():st}function S(z){if(Dn.isUndefined(o[z])){if(!Dn.isUndefined(n[z]))return y(void 0,n[z])}else return y(n[z],o[z])}function F(z){if(!Dn.isUndefined(o[z]))return y(void 0,o[z])}function T(z){if(Dn.isUndefined(o[z])){if(!Dn.isUndefined(n[z]))return y(void 0,n[z])}else return y(void 0,o[z])}function k(z){if(z in o)return y(n[z],o[z]);if(z in n)return y(void 0,n[z])}var rt={url:F,method:F,data:F,baseURL:T,transformRequest:T,transformResponse:T,paramsSerializer:T,timeout:T,timeoutMessage:T,withCredentials:T,adapter:T,responseType:T,xsrfCookieName:T,xsrfHeaderName:T,onUploadProgress:T,onDownloadProgress:T,decompress:T,maxContentLength:T,maxBodyLength:T,transport:T,httpAgent:T,httpsAgent:T,cancelToken:T,socketPath:T,responseEncoding:T,validateStatus:k};return Dn.forEach(Object.keys(n).concat(Object.keys(o)),function(st){var Gt=rt[st]||S,Vt=Gt(st);Dn.isUndefined(Vt)&&Gt!==k||(p[st]=Vt)}),p},ps={version:"0.25.0"},u2=ps.version,io={};["object","boolean","number","function","string","symbol"].forEach(function(i,n){io[i]=function(p){return typeof p===i||"a"+(n<1?"n ":" ")+i}});var bs={};io.transitional=function(n,o,p){function y(S,F){return"[Axios v"+u2+"] Transitional option '"+S+"'"+F+(p?". "+p:"")}return function(S,F,T){if(n===!1)throw new Error(y(F," has been removed"+(o?" in "+o:"")));return o&&!bs[F]&&(bs[F]=!0,console.warn(y(F," has been deprecated since v"+o+" and will be removed in the near future"))),n?n(S,F,T):!0}};function c2(i,n,o){if(typeof i!="object")throw new TypeError("options must be an object");for(var p=Object.keys(i),y=p.length;y-- >0;){var S=p[y],F=n[S];if(F){var T=i[S],k=T===void 0||F(T,S,i);if(k!==!0)throw new TypeError("option "+S+" must be "+k);continue}if(o!==!0)throw Error("Unknown option "+S)}}var a2={assertOptions:c2,validators:io},ys=On,d2=os,gs=Su,Zs=l2,si=ms,vs=a2,xr=vs.validators;function Er(i){this.defaults=i,this.interceptors={request:new gs,response:new gs}}Er.prototype.request=function(n,o){if(typeof n=="string"?(o=o||{},o.url=n):o=n||{},!o.url)throw new Error("Provided config url is not valid");o=si(this.defaults,o),o.method?o.method=o.method.toLowerCase():this.defaults.method?o.method=this.defaults.method.toLowerCase():o.method="get";var p=o.transitional;p!==void 0&&vs.assertOptions(p,{silentJSONParsing:xr.transitional(xr.boolean),forcedJSONParsing:xr.transitional(xr.boolean),clarifyTimeoutError:xr.transitional(xr.boolean)},!1);var y=[],S=!0;this.interceptors.request.forEach(function(Vt){typeof Vt.runWhen=="function"&&Vt.runWhen(o)===!1||(S=S&&Vt.synchronous,y.unshift(Vt.fulfilled,Vt.rejected))});var F=[];this.interceptors.response.forEach(function(Vt){F.push(Vt.fulfilled,Vt.rejected)});var T;if(!S){var k=[Zs,void 0];for(Array.prototype.unshift.apply(k,y),k=k.concat(F),T=Promise.resolve(o);k.length;)T=T.then(k.shift(),k.shift());return T}for(var rt=o;y.length;){var z=y.shift(),st=y.shift();try{rt=z(rt)}catch(Gt){st(Gt);break}}try{T=Zs(rt)}catch(Gt){return Promise.reject(Gt)}for(;F.length;)T=T.then(F.shift(),F.shift());return T},Er.prototype.getUri=function(n){if(!n.url)throw new Error("Provided config url is not valid");return n=si(this.defaults,n),d2(n.url,n.params,n.paramsSerializer).replace(/^\?/,"")},ys.forEach(["delete","get","head","options"],function(n){Er.prototype[n]=function(o,p){return this.request(si(p||{},{method:n,url:o,data:(p||{}).data}))}}),ys.forEach(["post","put","patch"],function(n){Er.prototype[n]=function(o,p,y){return this.request(si(y||{},{method:n,url:o,data:p}))}});var h2=Er,f2=ni;function Ir(i){if(typeof i!="function")throw new TypeError("executor must be a function.");var n;this.promise=new Promise(function(y){n=y});var o=this;this.promise.then(function(p){if(!!o._listeners){var y,S=o._listeners.length;for(y=0;y<S;y++)o._listeners[y](p);o._listeners=null}}),this.promise.then=function(p){var y,S=new Promise(function(F){o.subscribe(F),y=F}).then(p);return S.cancel=function(){o.unsubscribe(y)},S},i(function(y){o.reason||(o.reason=new f2(y),n(o.reason))})}Ir.prototype.throwIfRequested=function(){if(this.reason)throw this.reason},Ir.prototype.subscribe=function(n){if(this.reason){n(this.reason);return}this._listeners?this._listeners.push(n):this._listeners=[n]},Ir.prototype.unsubscribe=function(n){if(!!this._listeners){var o=this._listeners.indexOf(n);o!==-1&&this._listeners.splice(o,1)}},Ir.source=function(){var n,o=new Ir(function(y){n=y});return{token:o,cancel:n}};var m2=Ir,p2=function(n){return function(p){return n.apply(null,p)}},b2=On,y2=function(n){return b2.isObject(n)&&n.isAxiosError===!0},Gs=On,g2=ts,li=h2,Z2=ms,v2=oi;function Xs(i){var n=new li(i),o=g2(li.prototype.request,n);return Gs.extend(o,li.prototype,n),Gs.extend(o,n),o.create=function(y){return Xs(Z2(i,y))},o}var nr=Xs(v2);nr.Axios=li,nr.Cancel=ni,nr.CancelToken=m2,nr.isCancel=hs,nr.VERSION=ps.version,nr.all=function(n){return Promise.all(n)},nr.spread=p2,nr.isAxiosError=y2,Oi.exports=nr,Oi.exports.default=nr;var G2=Oi.exports;class Re{isEmpty(){return!this.isPresent()}static of(n){if(n!=null)return new Ws(n);throw new TypeError("The passed value was null or undefined.")}static ofNonNull(n){return Re.of(n)}static ofNullable(n){return n!=null?new Ws(n):new Vs}static empty(){return new Vs}static from(n){switch(n.kind){case"present":return Re.of(n.value);case"empty":return Re.empty();default:throw new TypeError("The passed value was not an Option type.")}}}class Ws extends Re{constructor(n){super(),this.payload=n}isPresent(){return!0}get(){return this.payload}ifPresent(n){n(this.payload)}ifPresentOrElse(n,o){n(this.payload)}filter(n){return n(this.payload)?this:Re.empty()}map(n){const o=n(this.payload);return Re.ofNullable(o)}flatMap(n){return n(this.payload)}or(n){return this}orElse(n){return this.payload}orElseGet(n){return this.payload}orElseThrow(n){return this.payload}orNull(){return this.payload}orUndefined(){return this.payload}toOption(){return{kind:"present",value:this.payload}}matches(n){return n.present(this.payload)}toJSON(n){return this.payload}}class Vs extends Re{isPresent(){return!1}constructor(){super()}get(){throw new TypeError("The optional is not present.")}ifPresent(n){}ifPresentOrElse(n,o){o()}filter(n){return this}map(n){return Re.empty()}flatMap(n){return Re.empty()}or(n){return n()}orElse(n){return n}orElseGet(n){return this.orElse(n())}orElseThrow(n){throw n()}orNull(){return null}orUndefined(){}toOption(){return{kind:"empty"}}matches(n){return n.empty()}toJSON(n){return null}}const X2="2.0.0";function W2(i){globalThis._vonageMediaProcessorMetadata=i}function Rs(){return globalThis._vonageMediaProcessorMetadata}class $n{constructor(){const n=Rs();this._report={action:Re.empty(),applicationId:Re.ofNullable(n!==void 0&&n!=null?n.appId:null),timestamp:Date.now(),fps:Re.empty(),framesTransformed:Re.empty(),guid:Re.empty(),highestFrameTransformCpu:Re.empty(),message:Re.empty(),source:Re.ofNullable(n!==void 0&&n!=null?n.sourceType:null),transformedFps:Re.empty(),transformerType:Re.empty(),variation:Re.empty(),videoHeight:Re.empty(),videoWidth:Re.empty(),version:X2,error:Re.empty(),proxyUrl:Re.ofNullable(n!==void 0&&n!=null?n.proxyUrl:null)}}action(n){return this._report.action=Re.ofNullable(n),this}framesTransformed(n){return this._report.framesTransformed=Re.ofNullable(n),this}fps(n){return this._report.fps=Re.ofNullable(n),this}guid(n){return this._report.guid=Re.ofNullable(n),this}message(n){return this._report.message=Re.ofNullable(n),this}transformedFps(n){return this._report.transformedFps=Re.ofNullable(n),this}transformerType(n){return this._report.transformerType=Re.ofNullable(n),this}variation(n){return this._report.variation=Re.ofNullable(n),this}videoHeight(n){return this._report.videoHeight=Re.ofNullable(n),this}videoWidth(n){return this._report.videoWidth=Re.ofNullable(n),this}error(n){return this._report.error=Re.ofNullable(n),this}build(){return this._report}}const V2=i=>JSON.stringify(i,(n,o)=>{if(o!==null)return o});class qn{static report(n){return new Promise((o,p)=>{if(n.applicationId.isEmpty()||n.source.isEmpty()){o("success");return}let y=G2.create(),S={timeout:1e4,timeoutErrorMessage:"Request timeout",headers:{"Content-Type":"application/json"}},F="hlg.tokbox.com/prod/logging/vcp_webrtc";if(n.proxyUrl.isEmpty())F="https://"+F;else{let T;n.proxyUrl.get().slice(n.proxyUrl.get().length-1)!=="/"?T=n.proxyUrl.get()+"/":T=n.proxyUrl.get(),F=T+F}y.post(F,V2(n),S).then(T=>{console.log(T),o("success")}).catch(T=>{console.log(T),p(T)})})}}var ui,R2=new Uint8Array(16);function x2(){if(!ui&&(ui=typeof crypto!="undefined"&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto)||typeof msCrypto!="undefined"&&typeof msCrypto.getRandomValues=="function"&&msCrypto.getRandomValues.bind(msCrypto),!ui))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return ui(R2)}var I2=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;function S2(i){return typeof i=="string"&&I2.test(i)}for(var Un=[],oo=0;oo<256;++oo)Un.push((oo+256).toString(16).substr(1));function L2(i){var n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0,o=(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();if(!S2(o))throw TypeError("Stringified UUID is invalid");return o}function xs(i,n,o){i=i||{};var p=i.random||(i.rng||x2)();if(p[6]=p[6]&15|64,p[8]=p[8]&63|128,n){o=o||0;for(var y=0;y<16;++y)n[o+y]=p[y];return n}return L2(p)}const sr=new WeakMap,ci=new WeakMap,kr=new WeakMap,so=Symbol("anyProducer"),Is=Promise.resolve(),ai=Symbol("listenerAdded"),di=Symbol("listenerRemoved");let lo=!1;function Sr(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 Lr(i,n){const o=ci.get(i);return o.has(n)||o.set(n,new Set),o.get(n)}function Ur(i,n){const o=typeof n=="string"||typeof n=="symbol"?n:so,p=kr.get(i);return p.has(o)||p.set(o,new Set),p.get(o)}function T2(i,n,o){const p=kr.get(i);if(p.has(n))for(const y of p.get(n))y.enqueue(o);if(p.has(so)){const y=Promise.all([n,o]);for(const S of p.get(so))S.enqueue(y)}}function Ss(i,n){n=Array.isArray(n)?n:[n];let o=!1,p=()=>{},y=[];const S={enqueue(F){y.push(F),p()},finish(){o=!0,p()}};for(const F of n)Ur(i,F).add(S);return{async next(){return y?y.length===0?o?(y=void 0,this.next()):(await new Promise(F=>{p=F}),this.next()):{done:!1,value:await y.shift()}:{done:!0}},async return(F){y=void 0;for(const T of n)Ur(i,T).delete(S);return p(),arguments.length>0?{done:!0,value:await F}:{done:!0}},[Symbol.asyncIterator](){return this}}}function Ls(i){if(i===void 0)return Ts;if(!Array.isArray(i))throw new TypeError("`methodNames` must be an array of strings");for(const n of i)if(!Ts.includes(n))throw typeof n!="string"?new TypeError("`methodNames` element must be a string"):new Error(`${n} is not Emittery method`);return i}const uo=i=>i===ai||i===di;class br{static mixin(n,o){return o=Ls(o),p=>{if(typeof p!="function")throw new TypeError("`target` must be function");for(const F of o)if(p.prototype[F]!==void 0)throw new Error(`The property \`${F}\` already exists on \`target\``);function y(){return Object.defineProperty(this,n,{enumerable:!1,value:new br}),this[n]}Object.defineProperty(p.prototype,n,{enumerable:!1,get:y});const S=F=>function(...T){return this[n][F](...T)};for(const F of o)Object.defineProperty(p.prototype,F,{enumerable:!1,value:S(F)});return p}}static get isDebugEnabled(){if(typeof process!="object")return lo;const{env:n}=process||{env:{}};return n.DEBUG==="emittery"||n.DEBUG==="*"||lo}static set isDebugEnabled(n){lo=n}constructor(n={}){sr.set(this,new Set),ci.set(this,new Map),kr.set(this,new Map),this.debug=n.debug||{},this.debug.enabled===void 0&&(this.debug.enabled=!1),this.debug.logger||(this.debug.logger=(o,p,y,S)=>{S=JSON.stringify(S),typeof y=="symbol"&&(y=y.toString());const F=new Date,T=`${F.getHours()}:${F.getMinutes()}:${F.getSeconds()}.${F.getMilliseconds()}`;console.log(`[${T}][emittery:${o}][${p}] Event Name: ${y}
|
|
3
|
-
data: ${S}`)})}logIfDebugEnabled(n,o,p){(br.isDebugEnabled||this.debug.enabled)&&this.debug.logger(n,this.debug.name,o,p)}on(n,o){hi(o),n=Array.isArray(n)?n:[n];for(const p of n)Sr(p),Lr(this,p).add(o),this.logIfDebugEnabled("subscribe",p,void 0),uo(p)||this.emit(ai,{eventName:p,listener:o});return this.off.bind(this,n,o)}off(n,o){hi(o),n=Array.isArray(n)?n:[n];for(const p of n)Sr(p),Lr(this,p).delete(o),this.logIfDebugEnabled("unsubscribe",p,void 0),uo(p)||this.emit(di,{eventName:p,listener:o})}once(n){return new Promise(o=>{const p=this.on(n,y=>{p(),o(y)})})}events(n){n=Array.isArray(n)?n:[n];for(const o of n)Sr(o);return Ss(this,n)}async emit(n,o){Sr(n),this.logIfDebugEnabled("emit",n,o),T2(this,n,o);const p=Lr(this,n),y=sr.get(this),S=[...p],F=uo(n)?[]:[...y];await Is,await Promise.all([...S.map(async T=>{if(p.has(T))return T(o)}),...F.map(async T=>{if(y.has(T))return T(n,o)})])}async emitSerial(n,o){Sr(n),this.logIfDebugEnabled("emitSerial",n,o);const p=Lr(this,n),y=sr.get(this),S=[...p],F=[...y];await Is;for(const T of S)p.has(T)&&await T(o);for(const T of F)y.has(T)&&await T(n,o)}onAny(n){return hi(n),this.logIfDebugEnabled("subscribeAny",void 0,void 0),sr.get(this).add(n),this.emit(ai,{listener:n}),this.offAny.bind(this,n)}anyEvent(){return Ss(this)}offAny(n){hi(n),this.logIfDebugEnabled("unsubscribeAny",void 0,void 0),this.emit(di,{listener:n}),sr.get(this).delete(n)}clearListeners(n){n=Array.isArray(n)?n:[n];for(const o of n)if(this.logIfDebugEnabled("clear",o,void 0),typeof o=="string"||typeof o=="symbol"){Lr(this,o).clear();const p=Ur(this,o);for(const y of p)y.finish();p.clear()}else{sr.get(this).clear();for(const p of ci.get(this).values())p.clear();for(const p of kr.get(this).values()){for(const y of p)y.finish();p.clear()}}}listenerCount(n){n=Array.isArray(n)?n:[n];let o=0;for(const p of n){if(typeof p=="string"){o+=sr.get(this).size+Lr(this,p).size+Ur(this,p).size+Ur(this).size;continue}typeof p!="undefined"&&Sr(p),o+=sr.get(this).size;for(const y of ci.get(this).values())o+=y.size;for(const y of kr.get(this).values())o+=y.size}return o}bindMethods(n,o){if(typeof n!="object"||n===null)throw new TypeError("`target` must be an object");o=Ls(o);for(const p of o){if(n[p]!==void 0)throw new Error(`The property \`${p}\` already exists on \`target\``);Object.defineProperty(n,p,{enumerable:!1,value:this[p].bind(this)})}}}const Ts=Object.getOwnPropertyNames(br.prototype).filter(i=>i!=="constructor");Object.defineProperty(br,"listenerAdded",{value:ai,writable:!1,enumerable:!0,configurable:!1}),Object.defineProperty(br,"listenerRemoved",{value:di,writable:!1,enumerable:!0,configurable:!1});var co=br;function Y2(i){return typeof i=="object"&&i!==null&&"message"in i&&typeof i.message=="string"}function w2(i){if(Y2(i))return i;try{return new Error(JSON.stringify(i))}catch{return new Error(String(i))}}function ao(i){return w2(i).message}var Ys=(i=>(i.FPS_DROP="fps_drop",i))(Ys||{}),ws=(i=>(i.start="start",i.transform="transform",i.flush="flush",i))(ws||{}),fi=(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))(fi||{});const F2=500,H2=.8;class C2 extends co{constructor(n,o){super(),this.index_=o,this.uuid_=xs(),this.framesTransformed_=0,this.transformer_=n,this.shouldStop_=!1,this.isFlashed_=!1,this.framesFromSource_=0,this.fps_=0,this.mediaTransformerQosReportStartTimestamp_=0,this.videoHeight_=0,this.videoWidth_=0,this.trackExpectedRate_=-1,this.transformerType_="Custom","getTransformerType"in n&&(this.transformerType_=n.getTransformerType());const p=new $n().action("MediaTransformer").guid(this.uuid_).transformerType(this.transformerType_).variation("Create").build();qn.report(p)}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(o){const p=new $n().action("MediaTransformer").guid(this.uuid_).message(ir.errors.transformer_start).transformerType(this.transformerType_).variation("Error").error(ao(o)).build();qn.report(p);const y={eventMetaData:{transformerIndex:this.index_},error:o,function:"start"};this.emit("error",y)}}async transform(n,o){var p,y,S,F;if(this.mediaTransformerQosReportStartTimestamp_===0&&(this.mediaTransformerQosReportStartTimestamp_=Date.now()),n instanceof VideoFrame&&(this.videoHeight_=(p=n==null?void 0:n.displayHeight)!=null?p:0,this.videoWidth_=(y=n==null?void 0:n.displayWidth)!=null?y:0),++this.framesFromSource_,this.transformer_)if(this.shouldStop_)console.warn("[Pipeline] flush from transform"),n.close(),this.flush(o),o.terminate();else try{await((F=(S=this.transformer_).transform)==null?void 0:F.call(S,n,o)),++this.framesTransformed_,this.framesTransformed_===F2&&this.mediaTransformerQosReport()}catch(T){const k=new $n().action("MediaTransformer").guid(this.uuid_).message(ir.errors.transformer_transform).transformerType(this.transformerType_).variation("Error").error(ao(T)).build();qn.report(k);const rt={eventMetaData:{transformerIndex:this.index_},error:T,function:"transform"};this.emit("error",rt)}}async flush(n){if(this.transformer_&&typeof this.transformer_.flush=="function"&&!this.isFlashed_){this.isFlashed_=!0;try{await this.transformer_.flush(n)}catch(p){const y=new $n().action("MediaTransformer").guid(this.uuid_).message(ir.errors.transformer_flush).transformerType(this.transformerType_).variation("Error").error(ao(p)).build();qn.report(y);const S={eventMetaData:{transformerIndex:this.index_},error:p,function:"flush"};this.emit("error",S)}}this.mediaTransformerQosReport();const o=new $n().action("MediaTransformer").guid(this.uuid_).transformerType(this.transformerType_).variation("Delete").build();qn.report(o)}stop(){console.log("[Pipeline] Stop stream."),this.controller_&&(this.flush(this.controller_),this.controller_.terminate()),this.shouldStop_=!0}mediaTransformerQosReport(){let n=(Date.now()-this.mediaTransformerQosReportStartTimestamp_)/1e3,o=this.framesFromSource_/n,p=this.framesTransformed_/n;if(this.trackExpectedRate_!=-1&&this.trackExpectedRate_*H2>o){const S={eventMetaData:{transformerIndex:this.index_},warningType:"fps_drop",dropInfo:{requested:this.trackExpectedRate_,current:o}};this.emit("warn",S)}const y=new $n().action("MediaTransformer").fps(o).transformedFps(p).framesTransformed(this.framesTransformed_).guid(this.uuid_).transformerType(this.transformerType_).videoHeight(this.videoHeight_).videoWidth(this.videoWidth_).variation("QoS").build();qn.report(y),this.mediaTransformerQosReportStartTimestamp_=0,this.framesFromSource_=0,this.framesTransformed_=0}}class N2 extends co{constructor(n){super(),this.transformers_=[],this.trackExpectedRate_=-1;for(let o=0;o<n.length;o++){let p=new C2(n[o],o);p.on("error",y=>{this.emit("error",y)}),p.on("warn",y=>{this.emit("warn",y)}),this.transformers_.push(p)}}setTrackExpectedRate(n){this.trackExpectedRate_=n;for(let o of this.transformers_)o.setTrackExpectedRate(this.trackExpectedRate_)}async start(n,o){if(!this.transformers_||this.transformers_.length===0){console.log("[Pipeline] No transformers.");return}try{let p=n;for(let y of this.transformers_)n=n.pipeThrough(new TransformStream(y));n.pipeTo(o).then(async()=>{console.log("[Pipeline] Setup."),await o.abort(),await p.cancel(),this.emit("pipelineInfo","pipeline_ended")}).catch(async y=>{n.cancel().then(()=>{console.log("[Pipeline] Shutting down streams after abort.")}).catch(S=>{console.error("[Pipeline] Error from stream transform:",S)}),await o.abort(y),await p.cancel(y),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 J2 extends co{constructor(){super(),this.uuid_=xs(),this.trackExpectedRate_=-1;const n=new $n().action("MediaProcessor").guid(this.uuid_).variation("Create").build();qn.report(n)}setTrackExpectedRate(n){this.trackExpectedRate_=n,this.pipeline_&&this.pipeline_.setTrackExpectedRate(this.trackExpectedRate_)}transform(n,o){return this.readable_=n,this.writable_=o,this.transformInternal()}transformInternal(){return new Promise((n,o)=>{if(!this.transformers_||this.transformers_.length===0){const y=new $n().action("MediaProcessor").guid(this.uuid_).message(ir.errors.transformer_none).variation("Error").build();qn.report(y),o("[MediaProcessor] Need to set transformers.");return}if(!this.readable_){const y=new $n().action("MediaProcessor").guid(this.uuid_).message(ir.errors.readable_null).variation("Error").build();qn.report(y),o("[MediaProcessor] Readable is null.");return}if(!this.writable_){const y=new $n().action("MediaProcessor").guid(this.uuid_).message(ir.errors.writable_null).variation("Error").build();qn.report(y),o("[MediaProcessor] Writable is null.");return}let p=!1;this.pipeline_&&(p=!0,this.pipeline_.clearListeners(),this.pipeline_.destroy()),this.pipeline_=new N2(this.transformers_),this.pipeline_.on("warn",y=>{this.emit("warn",y)}),this.pipeline_.on("error",y=>{this.emit("error",y)}),this.pipeline_.on("pipelineInfo",y=>{p&&(y==="pipeline_started"?y=fi.pipeline_restarted:y==="pipeline_started_with_error"&&(y=fi.pipeline_restarted_with_error)),this.emit("pipelineInfo",y)}),this.trackExpectedRate_!=-1&&this.pipeline_.setTrackExpectedRate(this.trackExpectedRate_),this.pipeline_.start(this.readable_,this.writable_).then(()=>{n()}).catch(y=>{o(y)})})}setTransformers(n){const o=new $n().action("MediaProcessor").guid(this.uuid_).message(ir.updates.transformer_new).variation("Update").build();return qn.report(o),this.transformers_=n,this.readable_&&this.writable_?this.transformInternal():Promise.resolve()}destroy(){return new Promise(n=>{this.pipeline_&&this.pipeline_.destroy();const o=new $n().action("MediaProcessor").guid(this.uuid_).variation("Delete").build();qn.report(o),n()})}}class E2{constructor(){this.processor_=null,this.generator_=null}init(n){return new Promise((o,p)=>{try{this.processor_=new MediaStreamTrackProcessor(n)}catch(y){console.log(`[InsertableStreamHelper] MediaStreamTrackProcessor failed: ${y}`),p(y)}try{n.kind==="audio"?this.generator_=new MediaStreamTrackGenerator({kind:"audio"}):n.kind==="video"?this.generator_=new MediaStreamTrackGenerator({kind:"video"}):p("kind not supported")}catch(y){console.log(`[InsertableStreamHelper] MediaStreamTrackGenerator failed: ${y}`),p(y)}o()})}getReadable(){return this.processor_.readable}getWriteable(){return this.generator_.writable}getProccesorTrack(){return this.generator_}}class k2{constructor(n){this.insertableStreamHelper_=new E2,this.mediaProcessor_=n}setTrack(n){return new Promise((o,p)=>{this.insertableStreamHelper_.init(n).then(()=>{this.mediaProcessor_.transform(this.insertableStreamHelper_.getReadable(),this.insertableStreamHelper_.getWriteable()).then(()=>{o(this.insertableStreamHelper_.getProccesorTrack())}).catch(y=>{p(y)})}).catch(y=>{p(y)})})}destroy(){return new Promise((n,o)=>{this.mediaProcessor_?this.mediaProcessor_.destroy().then(()=>{n()}).catch(p=>{o(p)}):o("no processor")})}}var Kr=(i=>(i.Low="Low",i.High="High",i))(Kr||{});const U2=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]));function K2(){return new Promise(async(i,n)=>{try{await Jr()}catch(o){n(o);return}U2().then(o=>{if(o===!1){n("Your browser does not support WebAssembly features.");return}i()}).catch(o=>{n(o)})})}const mi={};(function(){var i;function n(m){var W=0;return function(){return W<m.length?{done:!1,value:m[W++]}:{done:!0}}}var o=typeof Object.defineProperties=="function"?Object.defineProperty:function(m,W,V){return m==Array.prototype||m==Object.prototype||(m[W]=V.value),m};function p(m){m=[typeof globalThis=="object"&&globalThis,m,typeof window=="object"&&window,typeof self=="object"&&self,typeof global=="object"&&global];for(var W=0;W<m.length;++W){var V=m[W];if(V&&V.Math==Math)return V}throw Error("Cannot find global object")}var y=p(this);function S(m,W){if(W)t:{var V=y;m=m.split(".");for(var E=0;E<m.length-1;E++){var O=m[E];if(!(O in V))break t;V=V[O]}m=m[m.length-1],E=V[m],W=W(E),W!=E&&W!=null&&o(V,m,{configurable:!0,writable:!0,value:W})}}S("Symbol",function(m){function W(lt){if(this instanceof W)throw new TypeError("Symbol is not a constructor");return new V(E+(lt||"")+"_"+O++,lt)}function V(lt,P){this.g=lt,o(this,"description",{configurable:!0,writable:!0,value:P})}if(m)return m;V.prototype.toString=function(){return this.g};var E="jscomp_symbol_"+(1e9*Math.random()>>>0)+"_",O=0;return W}),S("Symbol.iterator",function(m){if(m)return m;m=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=y[W[V]];typeof E=="function"&&typeof E.prototype[m]!="function"&&o(E.prototype,m,{configurable:!0,writable:!0,value:function(){return F(n(this))}})}return m});function F(m){return m={next:m},m[Symbol.iterator]=function(){return this},m}function T(m){var W=typeof Symbol!="undefined"&&Symbol.iterator&&m[Symbol.iterator];return W?W.call(m):{next:n(m)}}function k(m){if(!(m instanceof Array)){m=T(m);for(var W,V=[];!(W=m.next()).done;)V.push(W.value);m=V}return m}var rt=typeof Object.create=="function"?Object.create:function(m){function W(){}return W.prototype=m,new W},z;if(typeof Object.setPrototypeOf=="function")z=Object.setPrototypeOf;else{var st;t:{var Gt={a:!0},Vt={};try{Vt.__proto__=Gt,st=Vt.a;break t}catch{}st=!1}z=st?function(m,W){if(m.__proto__=W,m.__proto__!==W)throw new TypeError(m+" is not extensible");return m}:null}var dt=z;function ht(m,W){if(m.prototype=rt(W.prototype),m.prototype.constructor=m,dt)dt(m,W);else for(var V in W)if(V!="prototype")if(Object.defineProperties){var E=Object.getOwnPropertyDescriptor(W,V);E&&Object.defineProperty(m,V,E)}else m[V]=W[V];m.ea=W.prototype}function Yt(){this.l=!1,this.i=null,this.h=void 0,this.g=1,this.s=this.m=0,this.j=null}function Ft(m){if(m.l)throw new TypeError("Generator is already running");m.l=!0}Yt.prototype.o=function(m){this.h=m};function Mt(m,W){m.j={U:W,V:!0},m.g=m.m||m.s}Yt.prototype.return=function(m){this.j={return:m},this.g=this.s};function _(m,W,V){return m.g=V,{value:W}}function Ae(m){this.g=new Yt,this.h=m}function un(m,W){Ft(m.g);var V=m.g.i;return V?We(m,"return"in V?V.return:function(E){return{value:E,done:!0}},W,m.g.return):(m.g.return(W),Dt(m))}function We(m,W,V,E){try{var O=W.call(m.g.i,V);if(!(O instanceof Object))throw new TypeError("Iterator result "+O+" is not an object");if(!O.done)return m.g.l=!1,O;var lt=O.value}catch(P){return m.g.i=null,Mt(m.g,P),Dt(m)}return m.g.i=null,E.call(m.g,lt),Dt(m)}function Dt(m){for(;m.g.g;)try{var W=m.h(m.g);if(W)return m.g.l=!1,{value:W.value,done:!1}}catch(V){m.g.h=void 0,Mt(m.g,V)}if(m.g.l=!1,m.g.j){if(W=m.g.j,m.g.j=null,W.V)throw W.U;return{value:W.return,done:!0}}return{value:void 0,done:!0}}function Mn(m){this.next=function(W){return Ft(m.g),m.g.i?W=We(m,m.g.i.next,W,m.g.o):(m.g.o(W),W=Dt(m)),W},this.throw=function(W){return Ft(m.g),m.g.i?W=We(m,m.g.i.throw,W,m.g.o):(Mt(m.g,W),W=Dt(m)),W},this.return=function(W){return un(m,W)},this[Symbol.iterator]=function(){return this}}function ae(m,W){return W=new Mn(new Ae(W)),dt&&m.prototype&&dt(W,m.prototype),W}function gt(m,W){m instanceof String&&(m+="");var V=0,E=!1,O={next:function(){if(!E&&V<m.length){var lt=V++;return{value:W(lt,m[lt]),done:!1}}return E=!0,{done:!0,value:void 0}}};return O[Symbol.iterator]=function(){return O},O}var fn=typeof Object.assign=="function"?Object.assign:function(m,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)&&(m[O]=E[O])}return m};S("Object.assign",function(m){return m||fn}),S("Promise",function(m){function W(P){this.h=0,this.i=void 0,this.g=[],this.o=!1;var it=this.j();try{P(it.resolve,it.reject)}catch(bt){it.reject(bt)}}function V(){this.g=null}function E(P){return P instanceof W?P:new W(function(it){it(P)})}if(m)return m;V.prototype.h=function(P){if(this.g==null){this.g=[];var it=this;this.i(function(){it.l()})}this.g.push(P)};var O=y.setTimeout;V.prototype.i=function(P){O(P,0)},V.prototype.l=function(){for(;this.g&&this.g.length;){var P=this.g;this.g=[];for(var it=0;it<P.length;++it){var bt=P[it];P[it]=null;try{bt()}catch(xt){this.j(xt)}}}this.g=null},V.prototype.j=function(P){this.i(function(){throw P})},W.prototype.j=function(){function P(xt){return function(Ut){bt||(bt=!0,xt.call(it,Ut))}}var it=this,bt=!1;return{resolve:P(this.C),reject:P(this.l)}},W.prototype.C=function(P){if(P===this)this.l(new TypeError("A Promise cannot resolve to itself"));else if(P instanceof W)this.F(P);else{t:switch(typeof P){case"object":var it=P!=null;break t;case"function":it=!0;break t;default:it=!1}it?this.u(P):this.m(P)}},W.prototype.u=function(P){var it=void 0;try{it=P.then}catch(bt){this.l(bt);return}typeof it=="function"?this.G(it,P):this.m(P)},W.prototype.l=function(P){this.s(2,P)},W.prototype.m=function(P){this.s(1,P)},W.prototype.s=function(P,it){if(this.h!=0)throw Error("Cannot settle("+P+", "+it+"): Promise already settled in state"+this.h);this.h=P,this.i=it,this.h===2&&this.D(),this.A()},W.prototype.D=function(){var P=this;O(function(){if(P.B()){var it=y.console;typeof it!="undefined"&&it.error(P.i)}},1)},W.prototype.B=function(){if(this.o)return!1;var P=y.CustomEvent,it=y.Event,bt=y.dispatchEvent;return typeof bt=="undefined"?!0:(typeof P=="function"?P=new P("unhandledrejection",{cancelable:!0}):typeof it=="function"?P=new it("unhandledrejection",{cancelable:!0}):(P=y.document.createEvent("CustomEvent"),P.initCustomEvent("unhandledrejection",!1,!0,P)),P.promise=this,P.reason=this.i,bt(P))},W.prototype.A=function(){if(this.g!=null){for(var P=0;P<this.g.length;++P)lt.h(this.g[P]);this.g=null}};var lt=new V;return W.prototype.F=function(P){var it=this.j();P.J(it.resolve,it.reject)},W.prototype.G=function(P,it){var bt=this.j();try{P.call(it,bt.resolve,bt.reject)}catch(xt){bt.reject(xt)}},W.prototype.then=function(P,it){function bt($t,Et){return typeof $t=="function"?function(Tt){try{xt($t(Tt))}catch(kt){Ut(kt)}}:Et}var xt,Ut,Jt=new W(function($t,Et){xt=$t,Ut=Et});return this.J(bt(P,xt),bt(it,Ut)),Jt},W.prototype.catch=function(P){return this.then(void 0,P)},W.prototype.J=function(P,it){function bt(){switch(xt.h){case 1:P(xt.i);break;case 2:it(xt.i);break;default:throw Error("Unexpected state: "+xt.h)}}var xt=this;this.g==null?lt.h(bt):this.g.push(bt),this.o=!0},W.resolve=E,W.reject=function(P){return new W(function(it,bt){bt(P)})},W.race=function(P){return new W(function(it,bt){for(var xt=T(P),Ut=xt.next();!Ut.done;Ut=xt.next())E(Ut.value).J(it,bt)})},W.all=function(P){var it=T(P),bt=it.next();return bt.done?E([]):new W(function(xt,Ut){function Jt(Tt){return function(kt){$t[Tt]=kt,Et--,Et==0&&xt($t)}}var $t=[],Et=0;do $t.push(void 0),Et++,E(bt.value).J(Jt($t.length-1),Ut),bt=it.next();while(!bt.done)})},W}),S("Object.is",function(m){return m||function(W,V){return W===V?W!==0||1/W===1/V:W!==W&&V!==V}}),S("Array.prototype.includes",function(m){return m||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 lt=E[V];if(lt===W||Object.is(lt,W))return!0}return!1}}),S("String.prototype.includes",function(m){return m||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}}),S("Array.prototype.keys",function(m){return m||function(){return gt(this,function(W){return W})}});var An=this||self;function Ve(m,W){m=m.split(".");var V=An;m[0]in V||typeof V.execScript=="undefined"||V.execScript("var "+m[0]);for(var E;m.length&&(E=m.shift());)m.length||W===void 0?V[E]&&V[E]!==Object.prototype[E]?V=V[E]:V=V[E]={}:V[E]=W}function Nt(m,W){return W=String.fromCharCode.apply(null,W),m==null?W:m+W}var Le,nn=typeof TextDecoder!="undefined",Gn,wn=typeof TextEncoder!="undefined";function Rn(m){if(wn)m=(Gn||(Gn=new TextEncoder)).encode(m);else{var W=void 0;W=W===void 0?!1:W;for(var V=0,E=new Uint8Array(3*m.length),O=0;O<m.length;O++){var lt=m.charCodeAt(O);if(128>lt)E[V++]=lt;else{if(2048>lt)E[V++]=lt>>6|192;else{if(55296<=lt&&57343>=lt){if(56319>=lt&&O<m.length){var P=m.charCodeAt(++O);if(56320<=P&&57343>=P){lt=1024*(lt-55296)+P-56320+65536,E[V++]=lt>>18|240,E[V++]=lt>>12&63|128,E[V++]=lt>>6&63|128,E[V++]=lt&63|128;continue}else O--}if(W)throw Error("Found an unpaired surrogate");lt=65533}E[V++]=lt>>12|224,E[V++]=lt>>6&63|128}E[V++]=lt&63|128}}m=E.subarray(0,V)}return m}var Cn={},cn=null;function mn(m,W){W===void 0&&(W=0),je(),W=Cn[W];for(var V=Array(Math.floor(m.length/3)),E=W[64]||"",O=0,lt=0;O<m.length-2;O+=3){var P=m[O],it=m[O+1],bt=m[O+2],xt=W[P>>2];P=W[(P&3)<<4|it>>4],it=W[(it&15)<<2|bt>>6],bt=W[bt&63],V[lt++]=xt+P+it+bt}switch(xt=0,bt=E,m.length-O){case 2:xt=m[O+1],bt=W[(xt&15)<<2]||E;case 1:m=m[O],V[lt]=W[m>>2]+W[(m&3)<<4|xt>>4]+bt+E}return V.join("")}function Jn(m){var W=m.length,V=3*W/4;V%3?V=Math.floor(V):"=.".indexOf(m[W-1])!=-1&&(V="=.".indexOf(m[W-2])!=-1?V-2:V-1);var E=new Uint8Array(V),O=0;return Fn(m,function(lt){E[O++]=lt}),E.subarray(0,O)}function Fn(m,W){function V(bt){for(;E<m.length;){var xt=m.charAt(E++),Ut=cn[xt];if(Ut!=null)return Ut;if(!/^[\s\xa0]*$/.test(xt))throw Error("Unknown base64 encoding at char: "+xt)}return bt}je();for(var E=0;;){var O=V(-1),lt=V(0),P=V(64),it=V(64);if(it===64&&O===-1)break;W(O<<2|lt>>4),P!=64&&(W(lt<<4&240|P>>2),it!=64&&W(P<<6&192|it))}}function je(){if(!cn){cn={};for(var m="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789".split(""),W=["+/=","+/","-_=","-_.","-_"],V=0;5>V;V++){var E=m.concat(W[V].split(""));Cn[V]=E;for(var O=0;O<E.length;O++){var lt=E[O];cn[lt]===void 0&&(cn[lt]=O)}}}}var Be=typeof Uint8Array.prototype.slice=="function",xn;function Xn(m,W,V){return W===V?xn||(xn=new Uint8Array(0)):Be?m.slice(W,V):new Uint8Array(m.subarray(W,V))}var de=0,Se=0;function ze(m,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,m&&ee(this,m)}function ee(m,W){W=W.constructor===Uint8Array?W:W.constructor===ArrayBuffer?new Uint8Array(W):W.constructor===Array?new Uint8Array(W):W.constructor===String?Jn(W):W instanceof Uint8Array?new Uint8Array(W.buffer,W.byteOffset,W.byteLength):new Uint8Array(0),m.h=W,m.j=0,m.i=m.h.length,m.g=m.j}ze.prototype.reset=function(){this.g=this.j};function Xe(m){var W=m.h,V=W[m.g],E=V&127;return 128>V?(m.g+=1,E):(V=W[m.g+1],E|=(V&127)<<7,128>V?(m.g+=2,E):(V=W[m.g+2],E|=(V&127)<<14,128>V?(m.g+=3,E):(V=W[m.g+3],E|=(V&127)<<21,128>V?(m.g+=4,E):(V=W[m.g+4],E|=(V&15)<<28,128>V?(m.g+=5,E>>>0):(m.g+=5,128<=W[m.g++]&&128<=W[m.g++]&&128<=W[m.g++]&&128<=W[m.g++]&&m.g++,E)))))}function rn(m){var W=m.h[m.g],V=m.h[m.g+1],E=m.h[m.g+2],O=m.h[m.g+3];return m.g+=4,V=(W<<0|V<<8|E<<16|O<<24)>>>0,m=2*(V>>31)+1,W=V>>>23&255,V&=8388607,W==255?V?NaN:1/0*m:W==0?m*Math.pow(2,-149)*V:m*Math.pow(2,W-150)*(V+Math.pow(2,23))}var Ue=[];function _t(){this.g=new Uint8Array(64),this.h=0}_t.prototype.push=function(m){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++]=m},_t.prototype.length=function(){return this.h},_t.prototype.end=function(){var m=this.g,W=this.h;return this.h=0,Xn(m,0,W)};function ge(m,W){for(;127<W;)m.push(W&127|128),W>>>=7;m.push(W)}function He(m){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,Ue.length?(V=Ue.pop(),W&&(V.v=W.v),m&&ee(V,m),m=V):m=new ze(m,W),this.g=m,this.m=this.g.g,this.h=this.i=this.l=-1,this.j=!1}He.prototype.reset=function(){this.g.reset(),this.h=this.l=-1};function Bt(m){var W=m.g;if((W=W.g==W.i)||(W=m.j)||(W=m.g,W=W.l||0>W.g||W.g>W.i),W)return!1;m.m=m.g.g,W=Xe(m.g);var V=W&7;return V!=0&&V!=5&&V!=1&&V!=2&&V!=3&&V!=4?(m.j=!0,!1):(m.i=W,m.l=W>>>3,m.h=V,!0)}function xe(m){switch(m.h){case 0:if(m.h!=0)xe(m);else{for(m=m.g;m.h[m.g]&128;)m.g++;m.g++}break;case 1:m.h!=1?xe(m):(m=m.g,m.g+=8);break;case 2:if(m.h!=2)xe(m);else{var W=Xe(m.g);m=m.g,m.g+=W}break;case 5:m.h!=5?xe(m):(m=m.g,m.g+=4);break;case 3:W=m.l;do{if(!Bt(m)){m.j=!0;break}if(m.h==4){m.l!=W&&(m.j=!0);break}xe(m)}while(1);break;default:m.j=!0}}function jt(m,W,V){var E=m.g.i,O=Xe(m.g);return O=m.g.g+O,m.g.i=O,V(W,m),m.g.g=O,m.g.i=E,W}function be(m){var W=Xe(m.g);m=m.g;var V=m.g;m.g+=W,m=m.h;var E;if(nn)(E=Le)||(E=Le=new TextDecoder("utf-8",{fatal:!1})),E=E.decode(m.subarray(V,V+W));else{W=V+W;for(var O=[],lt=null,P,it,bt;V<W;)P=m[V++],128>P?O.push(P):224>P?V>=W?O.push(65533):(it=m[V++],194>P||(it&192)!==128?(V--,O.push(65533)):O.push((P&31)<<6|it&63)):240>P?V>=W-1?O.push(65533):(it=m[V++],(it&192)!==128||P===224&&160>it||P===237&&160<=it||((E=m[V++])&192)!==128?(V--,O.push(65533)):O.push((P&15)<<12|(it&63)<<6|E&63)):244>=P?V>=W-2?O.push(65533):(it=m[V++],(it&192)!==128||(P<<28)+(it-144)>>30!==0||((E=m[V++])&192)!==128||((bt=m[V++])&192)!==128?(V--,O.push(65533)):(P=(P&7)<<18|(it&63)<<12|(E&63)<<6|bt&63,P-=65536,O.push((P>>10&1023)+55296,(P&1023)+56320))):O.push(65533),8192<=O.length&&(lt=Nt(lt,O),O.length=0);E=Nt(lt,O)}return E}function Te(){this.h=[],this.i=0,this.g=new _t}function Qe(m,W){W.length!==0&&(m.h.push(W),m.i+=W.length)}function Ge(m){var W=m.i+m.g.length();if(W===0)return new Uint8Array(0);W=new Uint8Array(W);for(var V=m.h,E=V.length,O=0,lt=0;lt<E;lt++){var P=V[lt];P.length!==0&&(W.set(P,O),O+=P.length)}return V=m.g,E=V.h,E!==0&&(W.set(V.g.subarray(0,E),O),V.h=0),m.h=[W],W}function zt(m,W,V){if(V!=null){ge(m.g,8*W+5),m=m.g;var E=V;E=(V=0>E?1:0)?-E:E,E===0?0<1/E?de=Se=0:(Se=0,de=2147483648):isNaN(E)?(Se=0,de=2147483647):34028234663852886e22<E?(Se=0,de=(V<<31|2139095040)>>>0):11754943508222875e-54>E?(E=Math.round(E/Math.pow(2,-149)),Se=0,de=(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,de=(V<<31|W+127<<23|E)>>>0),V=de,m.push(V>>>0&255),m.push(V>>>8&255),m.push(V>>>16&255),m.push(V>>>24&255)}}var Me=typeof Uint8Array=="function";function Pe(m,W,V){if(m!=null)return typeof m=="object"?Me&&m instanceof Uint8Array?V(m):Ie(m,W,V):W(m)}function Ie(m,W,V){if(Array.isArray(m)){for(var E=Array(m.length),O=0;O<m.length;O++)E[O]=Pe(m[O],W,V);return Array.isArray(m)&&m.W&&Oe(E),E}E={};for(O in m)E[O]=Pe(m[O],W,V);return E}function Wn(m){return typeof m=="number"?isFinite(m)?m:String(m):m}var on={W:{value:!0,configurable:!0}};function Oe(m){return Array.isArray(m)&&!Object.isFrozen(m)&&Object.defineProperties(m,on),m}var sn;function Ze(m,W,V){var E=sn;sn=null,m||(m=E),E=this.constructor.ca,m||(m=E?[E]:[]),this.j=E?0:-1,this.i=null,this.g=m;t:{if(E=this.g.length,m=E-1,E&&(E=this.g[m],E!==null&&typeof E=="object"&&E.constructor===Object)){this.l=m-this.j,this.h=E;break t}W!==void 0&&-1<W?(this.l=Math.max(W,m+1-this.j),this.h=null):this.l=Number.MAX_VALUE}if(V)for(W=0;W<V.length;W++)m=V[W],m<this.l?(m+=this.j,(E=this.g[m])?Oe(E):this.g[m]=Ye):(ve(this),(E=this.h[m])?Oe(E):this.h[m]=Ye)}var Ye=Object.freeze(Oe([]));function ve(m){var W=m.l+m.j;m.g[W]||(m.h=m.g[W]={})}function ne(m,W,V){return W===-1?null:(V===void 0?0:V)||W>=m.l?m.h?m.h[W]:void 0:m.g[W+m.j]}function _e(m){var W=W===void 0?!1:W,V=ne(m,1,W);return V==null&&(V=Ye),V===Ye&&(V=Oe([]),Pt(m,1,V,W)),V}function qt(m,W,V){return m=ne(m,W),m=m==null?m:+m,m==null?V===void 0?0:V:m}function Pt(m,W,V,E){(E===void 0?0:E)||W>=m.l?(ve(m),m.h[W]=V):m.g[W+m.j]=V}function an(m,W){m.i||(m.i={});var V=m.i[1];if(!V){var E=_e(m);V=[];for(var O=0;O<E.length;O++)V[O]=new W(E[O]);m.i[1]=V}return V}function he(m,W,V,E){var O=an(m,V);W=W||new V,m=_e(m),E!=null?(O.splice(E,0,W),m.splice(E,0,Ct(W))):(O.push(W),m.push(Ct(W)))}Ze.prototype.toJSON=function(){var m=Ct(this);return Ie(m,Wn,mn)};function Ct(m,W){if(m.i)for(var V in m.i){var E=m.i[V];if(Array.isArray(E))for(var O=0;O<E.length;O++)E[O]&&Ct(E[O]);else E&&Ct(E)}return m.g}Ze.prototype.toString=function(){return Ct(this).toString()};function Rt(m,W){return m=ne(m,W),m==null?0:m}function re(m,W){return m=ne(m,W),m==null?"":m}function we(m,W){if(m=m.m){Qe(W,W.g.end());for(var V=0;V<m.length;V++)Qe(W,m[V])}}function te(m,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=m.m)?V.push(W):m.m=[W]),!0}function ie(m,W){var V=void 0;return new(V||(V=Promise))(function(E,O){function lt(bt){try{it(W.next(bt))}catch(xt){O(xt)}}function P(bt){try{it(W.throw(bt))}catch(xt){O(xt)}}function it(bt){bt.done?E(bt.value):new V(function(xt){xt(bt.value)}).then(lt,P)}it((W=W.apply(m,void 0)).next())})}function et(m){Ze.call(this,m)}ht(et,Ze);function ot(m,W){for(;Bt(W);)switch(W.i){case 8:var V=Xe(W.g);Pt(m,1,V);break;case 21:V=rn(W.g),Pt(m,2,V);break;case 26:V=be(W),Pt(m,3,V);break;case 34:V=be(W),Pt(m,4,V);break;default:if(!te(m,W))return m}return m}function at(m){Ze.call(this,m,-1,Ot)}ht(at,Ze),at.prototype.addClassification=function(m,W){he(this,m,et,W)};var Ot=[1];function ce(m){Ze.call(this,m)}ht(ce,Ze);function le(m,W){for(;Bt(W);)switch(W.i){case 13:var V=rn(W.g);Pt(m,1,V);break;case 21:V=rn(W.g),Pt(m,2,V);break;case 29:V=rn(W.g),Pt(m,3,V);break;case 37:V=rn(W.g),Pt(m,4,V);break;case 45:V=rn(W.g),Pt(m,5,V);break;default:if(!te(m,W))return m}return m}function Lt(m){Ze.call(this,m,-1,fe)}ht(Lt,Ze);var fe=[1];function Ce(m){Ze.call(this,m)}ht(Ce,Ze);function De(m,W,V){if(V=m.createShader(V===0?m.VERTEX_SHADER:m.FRAGMENT_SHADER),m.shaderSource(V,W),m.compileShader(V),!m.getShaderParameter(V,m.COMPILE_STATUS))throw Error(`Could not compile WebGL shader.
|
|
1
|
+
(function(un,Er){typeof exports=="object"&&typeof module!="undefined"?Er(exports):typeof define=="function"&&define.amd?define(["exports"],Er):(un=typeof globalThis!="undefined"?globalThis:un||self,Er(un["ml-transformers"]={}))})(this,function(un){"use strict";function Er(){return new Promise((i,n)=>{typeof MediaStreamTrackProcessor=="undefined"||typeof MediaStreamTrackGenerator=="undefined"?n("Your browser does not support the MediaStreamTrack API for Insertable Streams of Media."):i()})}class ir{}ir.updates={transformer_new:"New transformer",transformer_null:"Null transformer"},ir.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"};var Oi={exports:{}},ts=function(n,o){return function(){for(var y=new Array(arguments.length),S=0;S<y.length;S++)y[S]=arguments[S];return n.apply(o,y)}},pu=ts,or=Object.prototype.toString;function _i(i){return Array.isArray(i)}function Qi(i){return typeof i=="undefined"}function bu(i){return i!==null&&!Qi(i)&&i.constructor!==null&&!Qi(i.constructor)&&typeof i.constructor.isBuffer=="function"&&i.constructor.isBuffer(i)}function es(i){return or.call(i)==="[object ArrayBuffer]"}function yu(i){return or.call(i)==="[object FormData]"}function gu(i){var n;return typeof ArrayBuffer!="undefined"&&ArrayBuffer.isView?n=ArrayBuffer.isView(i):n=i&&i.buffer&&es(i.buffer),n}function Zu(i){return typeof i=="string"}function vu(i){return typeof i=="number"}function ns(i){return i!==null&&typeof i=="object"}function qr(i){if(or.call(i)!=="[object Object]")return!1;var n=Object.getPrototypeOf(i);return n===null||n===Object.prototype}function Gu(i){return or.call(i)==="[object Date]"}function Xu(i){return or.call(i)==="[object File]"}function Wu(i){return or.call(i)==="[object Blob]"}function rs(i){return or.call(i)==="[object Function]"}function Vu(i){return ns(i)&&rs(i.pipe)}function Ru(i){return or.call(i)==="[object URLSearchParams]"}function xu(i){return i.trim?i.trim():i.replace(/^\s+|\s+$/g,"")}function Iu(){return typeof navigator!="undefined"&&(navigator.product==="ReactNative"||navigator.product==="NativeScript"||navigator.product==="NS")?!1:typeof window!="undefined"&&typeof document!="undefined"}function Di(i,n){if(!(i===null||typeof i=="undefined"))if(typeof i!="object"&&(i=[i]),_i(i))for(var o=0,m=i.length;o<m;o++)n.call(null,i[o],o,i);else for(var y in i)Object.prototype.hasOwnProperty.call(i,y)&&n.call(null,i[y],y,i)}function $i(){var i={};function n(y,S){qr(i[S])&&qr(y)?i[S]=$i(i[S],y):qr(y)?i[S]=$i({},y):_i(y)?i[S]=y.slice():i[S]=y}for(var o=0,m=arguments.length;o<m;o++)Di(arguments[o],n);return i}function Su(i,n,o){return Di(n,function(y,S){o&&typeof y=="function"?i[S]=pu(y,o):i[S]=y}),i}function Tu(i){return i.charCodeAt(0)===65279&&(i=i.slice(1)),i}var On={isArray:_i,isArrayBuffer:es,isBuffer:bu,isFormData:yu,isArrayBufferView:gu,isString:Zu,isNumber:vu,isObject:ns,isPlainObject:qr,isUndefined:Qi,isDate:Gu,isFile:Xu,isBlob:Wu,isFunction:rs,isStream:Vu,isURLSearchParams:Ru,isStandardBrowserEnv:Iu,forEach:Di,merge:$i,extend:Su,trim:xu,stripBOM:Tu},Rr=On;function is(i){return encodeURIComponent(i).replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}var os=function(n,o,m){if(!o)return n;var y;if(m)y=m(o);else if(Rr.isURLSearchParams(o))y=o.toString();else{var S=[];Rr.forEach(o,function(J,rt){J===null||typeof J=="undefined"||(Rr.isArray(J)?rt=rt+"[]":J=[J],Rr.forEach(J,function(st){Rr.isDate(st)?st=st.toISOString():Rr.isObject(st)&&(st=JSON.stringify(st)),S.push(is(rt)+"="+is(st))}))}),y=S.join("&")}if(y){var F=n.indexOf("#");F!==-1&&(n=n.slice(0,F)),n+=(n.indexOf("?")===-1?"?":"&")+y}return n},Lu=On;function ti(){this.handlers=[]}ti.prototype.use=function(n,o,m){return this.handlers.push({fulfilled:n,rejected:o,synchronous:m?m.synchronous:!1,runWhen:m?m.runWhen:null}),this.handlers.length-1},ti.prototype.eject=function(n){this.handlers[n]&&(this.handlers[n]=null)},ti.prototype.forEach=function(n){Lu.forEach(this.handlers,function(m){m!==null&&n(m)})};var Yu=ti,wu=On,Fu=function(n,o){wu.forEach(n,function(y,S){S!==o&&S.toUpperCase()===o.toUpperCase()&&(n[o]=y,delete n[S])})},ss=function(n,o,m,y,S){return n.config=o,m&&(n.code=m),n.request=y,n.response=S,n.isAxiosError=!0,n.toJSON=function(){return{message:this.message,name:this.name,description:this.description,number:this.number,fileName:this.fileName,lineNumber:this.lineNumber,columnNumber:this.columnNumber,stack:this.stack,config:this.config,code:this.code,status:this.response&&this.response.status?this.response.status:null}},n},Hu=ss,ls=function(n,o,m,y,S){var F=new Error(n);return Hu(F,o,m,y,S)},Cu=ls,Nu=function(n,o,m){var y=m.config.validateStatus;!m.status||!y||y(m.status)?n(m):o(Cu("Request failed with status code "+m.status,m.config,null,m.request,m))},ei=On,Eu=ei.isStandardBrowserEnv()?function(){return{write:function(o,m,y,S,F,L){var J=[];J.push(o+"="+encodeURIComponent(m)),ei.isNumber(y)&&J.push("expires="+new Date(y).toGMTString()),ei.isString(S)&&J.push("path="+S),ei.isString(F)&&J.push("domain="+F),L===!0&&J.push("secure"),document.cookie=J.join("; ")},read:function(o){var m=document.cookie.match(new RegExp("(^|;\\s*)("+o+")=([^;]*)"));return m?decodeURIComponent(m[3]):null},remove:function(o){this.write(o,"",Date.now()-864e5)}}}():function(){return{write:function(){},read:function(){return null},remove:function(){}}}(),ku=function(n){return/^([a-z][a-z\d+\-.]*:)?\/\//i.test(n)},Ju=function(n,o){return o?n.replace(/\/+$/,"")+"/"+o.replace(/^\/+/,""):n},Uu=ku,Ku=Ju,Mu=function(n,o){return n&&!Uu(o)?Ku(n,o):o},qi=On,Bu=["age","authorization","content-length","content-type","etag","expires","from","host","if-modified-since","if-unmodified-since","last-modified","location","max-forwards","proxy-authorization","referer","retry-after","user-agent"],Au=function(n){var o={},m,y,S;return n&&qi.forEach(n.split(`
|
|
2
|
+
`),function(L){if(S=L.indexOf(":"),m=qi.trim(L.substr(0,S)).toLowerCase(),y=qi.trim(L.substr(S+1)),m){if(o[m]&&Bu.indexOf(m)>=0)return;m==="set-cookie"?o[m]=(o[m]?o[m]:[]).concat([y]):o[m]=o[m]?o[m]+", "+y:y}}),o},us=On,ju=us.isStandardBrowserEnv()?function(){var n=/(msie|trident)/i.test(navigator.userAgent),o=document.createElement("a"),m;function y(S){var F=S;return n&&(o.setAttribute("href",F),F=o.href),o.setAttribute("href",F),{href:o.href,protocol:o.protocol?o.protocol.replace(/:$/,""):"",host:o.host,search:o.search?o.search.replace(/^\?/,""):"",hash:o.hash?o.hash.replace(/^#/,""):"",hostname:o.hostname,port:o.port,pathname:o.pathname.charAt(0)==="/"?o.pathname:"/"+o.pathname}}return m=y(window.location.href),function(F){var L=us.isString(F)?y(F):F;return L.protocol===m.protocol&&L.host===m.host}}():function(){return function(){return!0}}();function to(i){this.message=i}to.prototype.toString=function(){return"Cancel"+(this.message?": "+this.message:"")},to.prototype.__CANCEL__=!0;var ni=to,ri=On,zu=Nu,Pu=Eu,Ou=os,_u=Mu,Qu=Au,Du=ju,eo=ls,$u=oi,qu=ni,cs=function(n){return new Promise(function(m,y){var S=n.data,F=n.headers,L=n.responseType,J;function rt(){n.cancelToken&&n.cancelToken.unsubscribe(J),n.signal&&n.signal.removeEventListener("abort",J)}ri.isFormData(S)&&delete F["Content-Type"];var z=new XMLHttpRequest;if(n.auth){var st=n.auth.username||"",Gt=n.auth.password?unescape(encodeURIComponent(n.auth.password)):"";F.Authorization="Basic "+btoa(st+":"+Gt)}var Vt=_u(n.baseURL,n.url);z.open(n.method.toUpperCase(),Ou(Vt,n.params,n.paramsSerializer),!0),z.timeout=n.timeout;function dt(){if(!!z){var Yt="getAllResponseHeaders"in z?Qu(z.getAllResponseHeaders()):null,Ft=!L||L==="text"||L==="json"?z.responseText:z.response,Bt={data:Ft,status:z.status,statusText:z.statusText,headers:Yt,config:n,request:z};zu(function(Ae){m(Ae),rt()},function(Ae){y(Ae),rt()},Bt),z=null}}if("onloadend"in z?z.onloadend=dt:z.onreadystatechange=function(){!z||z.readyState!==4||z.status===0&&!(z.responseURL&&z.responseURL.indexOf("file:")===0)||setTimeout(dt)},z.onabort=function(){!z||(y(eo("Request aborted",n,"ECONNABORTED",z)),z=null)},z.onerror=function(){y(eo("Network Error",n,null,z)),z=null},z.ontimeout=function(){var Ft=n.timeout?"timeout of "+n.timeout+"ms exceeded":"timeout exceeded",Bt=n.transitional||$u.transitional;n.timeoutErrorMessage&&(Ft=n.timeoutErrorMessage),y(eo(Ft,n,Bt.clarifyTimeoutError?"ETIMEDOUT":"ECONNABORTED",z)),z=null},ri.isStandardBrowserEnv()){var ht=(n.withCredentials||Du(Vt))&&n.xsrfCookieName?Pu.read(n.xsrfCookieName):void 0;ht&&(F[n.xsrfHeaderName]=ht)}"setRequestHeader"in z&&ri.forEach(F,function(Ft,Bt){typeof S=="undefined"&&Bt.toLowerCase()==="content-type"?delete F[Bt]:z.setRequestHeader(Bt,Ft)}),ri.isUndefined(n.withCredentials)||(z.withCredentials=!!n.withCredentials),L&&L!=="json"&&(z.responseType=n.responseType),typeof n.onDownloadProgress=="function"&&z.addEventListener("progress",n.onDownloadProgress),typeof n.onUploadProgress=="function"&&z.upload&&z.upload.addEventListener("progress",n.onUploadProgress),(n.cancelToken||n.signal)&&(J=function(Yt){!z||(y(!Yt||Yt&&Yt.type?new qu("canceled"):Yt),z.abort(),z=null)},n.cancelToken&&n.cancelToken.subscribe(J),n.signal&&(n.signal.aborted?J():n.signal.addEventListener("abort",J))),S||(S=null),z.send(S)})},Jn=On,as=Fu,t2=ss,e2={"Content-Type":"application/x-www-form-urlencoded"};function ds(i,n){!Jn.isUndefined(i)&&Jn.isUndefined(i["Content-Type"])&&(i["Content-Type"]=n)}function n2(){var i;return(typeof XMLHttpRequest!="undefined"||typeof process!="undefined"&&Object.prototype.toString.call(process)==="[object process]")&&(i=cs),i}function r2(i,n,o){if(Jn.isString(i))try{return(n||JSON.parse)(i),Jn.trim(i)}catch(m){if(m.name!=="SyntaxError")throw m}return(o||JSON.stringify)(i)}var ii={transitional:{silentJSONParsing:!0,forcedJSONParsing:!0,clarifyTimeoutError:!1},adapter:n2(),transformRequest:[function(n,o){return as(o,"Accept"),as(o,"Content-Type"),Jn.isFormData(n)||Jn.isArrayBuffer(n)||Jn.isBuffer(n)||Jn.isStream(n)||Jn.isFile(n)||Jn.isBlob(n)?n:Jn.isArrayBufferView(n)?n.buffer:Jn.isURLSearchParams(n)?(ds(o,"application/x-www-form-urlencoded;charset=utf-8"),n.toString()):Jn.isObject(n)||o&&o["Content-Type"]==="application/json"?(ds(o,"application/json"),r2(n)):n}],transformResponse:[function(n){var o=this.transitional||ii.transitional,m=o&&o.silentJSONParsing,y=o&&o.forcedJSONParsing,S=!m&&this.responseType==="json";if(S||y&&Jn.isString(n)&&n.length)try{return JSON.parse(n)}catch(F){if(S)throw F.name==="SyntaxError"?t2(F,this,"E_JSON_PARSE"):F}return n}],timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,maxBodyLength:-1,validateStatus:function(n){return n>=200&&n<300},headers:{common:{Accept:"application/json, text/plain, */*"}}};Jn.forEach(["delete","get","head"],function(n){ii.headers[n]={}}),Jn.forEach(["post","put","patch"],function(n){ii.headers[n]=Jn.merge(e2)});var oi=ii,i2=On,o2=oi,s2=function(n,o,m){var y=this||o2;return i2.forEach(m,function(F){n=F.call(y,n,o)}),n},hs=function(n){return!!(n&&n.__CANCEL__)},fs=On,no=s2,l2=hs,u2=oi,c2=ni;function ro(i){if(i.cancelToken&&i.cancelToken.throwIfRequested(),i.signal&&i.signal.aborted)throw new c2("canceled")}var a2=function(n){ro(n),n.headers=n.headers||{},n.data=no.call(n,n.data,n.headers,n.transformRequest),n.headers=fs.merge(n.headers.common||{},n.headers[n.method]||{},n.headers),fs.forEach(["delete","get","head","post","put","patch","common"],function(y){delete n.headers[y]});var o=n.adapter||u2.adapter;return o(n).then(function(y){return ro(n),y.data=no.call(n,y.data,y.headers,n.transformResponse),y},function(y){return l2(y)||(ro(n),y&&y.response&&(y.response.data=no.call(n,y.response.data,y.response.headers,n.transformResponse))),Promise.reject(y)})},Dn=On,ms=function(n,o){o=o||{};var m={};function y(z,st){return Dn.isPlainObject(z)&&Dn.isPlainObject(st)?Dn.merge(z,st):Dn.isPlainObject(st)?Dn.merge({},st):Dn.isArray(st)?st.slice():st}function S(z){if(Dn.isUndefined(o[z])){if(!Dn.isUndefined(n[z]))return y(void 0,n[z])}else return y(n[z],o[z])}function F(z){if(!Dn.isUndefined(o[z]))return y(void 0,o[z])}function L(z){if(Dn.isUndefined(o[z])){if(!Dn.isUndefined(n[z]))return y(void 0,n[z])}else return y(void 0,o[z])}function J(z){if(z in o)return y(n[z],o[z]);if(z in n)return y(void 0,n[z])}var rt={url:F,method:F,data:F,baseURL:L,transformRequest:L,transformResponse:L,paramsSerializer:L,timeout:L,timeoutMessage:L,withCredentials:L,adapter:L,responseType:L,xsrfCookieName:L,xsrfHeaderName:L,onUploadProgress:L,onDownloadProgress:L,decompress:L,maxContentLength:L,maxBodyLength:L,transport:L,httpAgent:L,httpsAgent:L,cancelToken:L,socketPath:L,responseEncoding:L,validateStatus:J};return Dn.forEach(Object.keys(n).concat(Object.keys(o)),function(st){var Gt=rt[st]||S,Vt=Gt(st);Dn.isUndefined(Vt)&&Gt!==J||(m[st]=Vt)}),m},ps={version:"0.25.0"},d2=ps.version,io={};["object","boolean","number","function","string","symbol"].forEach(function(i,n){io[i]=function(m){return typeof m===i||"a"+(n<1?"n ":" ")+i}});var bs={};io.transitional=function(n,o,m){function y(S,F){return"[Axios v"+d2+"] Transitional option '"+S+"'"+F+(m?". "+m:"")}return function(S,F,L){if(n===!1)throw new Error(y(F," has been removed"+(o?" in "+o:"")));return o&&!bs[F]&&(bs[F]=!0,console.warn(y(F," has been deprecated since v"+o+" and will be removed in the near future"))),n?n(S,F,L):!0}};function h2(i,n,o){if(typeof i!="object")throw new TypeError("options must be an object");for(var m=Object.keys(i),y=m.length;y-- >0;){var S=m[y],F=n[S];if(F){var L=i[S],J=L===void 0||F(L,S,i);if(J!==!0)throw new TypeError("option "+S+" must be "+J);continue}if(o!==!0)throw Error("Unknown option "+S)}}var f2={assertOptions:h2,validators:io},ys=On,m2=os,gs=Yu,Zs=a2,si=ms,vs=f2,xr=vs.validators;function kr(i){this.defaults=i,this.interceptors={request:new gs,response:new gs}}kr.prototype.request=function(n,o){if(typeof n=="string"?(o=o||{},o.url=n):o=n||{},!o.url)throw new Error("Provided config url is not valid");o=si(this.defaults,o),o.method?o.method=o.method.toLowerCase():this.defaults.method?o.method=this.defaults.method.toLowerCase():o.method="get";var m=o.transitional;m!==void 0&&vs.assertOptions(m,{silentJSONParsing:xr.transitional(xr.boolean),forcedJSONParsing:xr.transitional(xr.boolean),clarifyTimeoutError:xr.transitional(xr.boolean)},!1);var y=[],S=!0;this.interceptors.request.forEach(function(Vt){typeof Vt.runWhen=="function"&&Vt.runWhen(o)===!1||(S=S&&Vt.synchronous,y.unshift(Vt.fulfilled,Vt.rejected))});var F=[];this.interceptors.response.forEach(function(Vt){F.push(Vt.fulfilled,Vt.rejected)});var L;if(!S){var J=[Zs,void 0];for(Array.prototype.unshift.apply(J,y),J=J.concat(F),L=Promise.resolve(o);J.length;)L=L.then(J.shift(),J.shift());return L}for(var rt=o;y.length;){var z=y.shift(),st=y.shift();try{rt=z(rt)}catch(Gt){st(Gt);break}}try{L=Zs(rt)}catch(Gt){return Promise.reject(Gt)}for(;F.length;)L=L.then(F.shift(),F.shift());return L},kr.prototype.getUri=function(n){if(!n.url)throw new Error("Provided config url is not valid");return n=si(this.defaults,n),m2(n.url,n.params,n.paramsSerializer).replace(/^\?/,"")},ys.forEach(["delete","get","head","options"],function(n){kr.prototype[n]=function(o,m){return this.request(si(m||{},{method:n,url:o,data:(m||{}).data}))}}),ys.forEach(["post","put","patch"],function(n){kr.prototype[n]=function(o,m,y){return this.request(si(y||{},{method:n,url:o,data:m}))}});var p2=kr,b2=ni;function Ir(i){if(typeof i!="function")throw new TypeError("executor must be a function.");var n;this.promise=new Promise(function(y){n=y});var o=this;this.promise.then(function(m){if(!!o._listeners){var y,S=o._listeners.length;for(y=0;y<S;y++)o._listeners[y](m);o._listeners=null}}),this.promise.then=function(m){var y,S=new Promise(function(F){o.subscribe(F),y=F}).then(m);return S.cancel=function(){o.unsubscribe(y)},S},i(function(y){o.reason||(o.reason=new b2(y),n(o.reason))})}Ir.prototype.throwIfRequested=function(){if(this.reason)throw this.reason},Ir.prototype.subscribe=function(n){if(this.reason){n(this.reason);return}this._listeners?this._listeners.push(n):this._listeners=[n]},Ir.prototype.unsubscribe=function(n){if(!!this._listeners){var o=this._listeners.indexOf(n);o!==-1&&this._listeners.splice(o,1)}},Ir.source=function(){var n,o=new Ir(function(y){n=y});return{token:o,cancel:n}};var y2=Ir,g2=function(n){return function(m){return n.apply(null,m)}},Z2=On,v2=function(n){return Z2.isObject(n)&&n.isAxiosError===!0},Gs=On,G2=ts,li=p2,X2=ms,W2=oi;function Xs(i){var n=new li(i),o=G2(li.prototype.request,n);return Gs.extend(o,li.prototype,n),Gs.extend(o,n),o.create=function(y){return Xs(X2(i,y))},o}var nr=Xs(W2);nr.Axios=li,nr.Cancel=ni,nr.CancelToken=y2,nr.isCancel=hs,nr.VERSION=ps.version,nr.all=function(n){return Promise.all(n)},nr.spread=g2,nr.isAxiosError=v2,Oi.exports=nr,Oi.exports.default=nr;var V2=Oi.exports;class Re{isEmpty(){return!this.isPresent()}static of(n){if(n!=null)return new Ws(n);throw new TypeError("The passed value was null or undefined.")}static ofNonNull(n){return Re.of(n)}static ofNullable(n){return n!=null?new Ws(n):new Vs}static empty(){return new Vs}static from(n){switch(n.kind){case"present":return Re.of(n.value);case"empty":return Re.empty();default:throw new TypeError("The passed value was not an Option type.")}}}class Ws extends Re{constructor(n){super(),this.payload=n}isPresent(){return!0}get(){return this.payload}ifPresent(n){n(this.payload)}ifPresentOrElse(n,o){n(this.payload)}filter(n){return n(this.payload)?this:Re.empty()}map(n){const o=n(this.payload);return Re.ofNullable(o)}flatMap(n){return n(this.payload)}or(n){return this}orElse(n){return this.payload}orElseGet(n){return this.payload}orElseThrow(n){return this.payload}orNull(){return this.payload}orUndefined(){return this.payload}toOption(){return{kind:"present",value:this.payload}}matches(n){return n.present(this.payload)}toJSON(n){return this.payload}}class Vs extends Re{isPresent(){return!1}constructor(){super()}get(){throw new TypeError("The optional is not present.")}ifPresent(n){}ifPresentOrElse(n,o){o()}filter(n){return this}map(n){return Re.empty()}flatMap(n){return Re.empty()}or(n){return n()}orElse(n){return n}orElseGet(n){return this.orElse(n())}orElseThrow(n){throw n()}orNull(){return null}orUndefined(){}toOption(){return{kind:"empty"}}matches(n){return n.empty()}toJSON(n){return null}}const R2="2.0.0";function x2(i){globalThis._vonageMediaProcessorMetadata=i}function Rs(){return globalThis._vonageMediaProcessorMetadata}class $n{constructor(){const n=Rs();this._report={action:Re.empty(),applicationId:Re.ofNullable(n!==void 0&&n!=null?n.appId:null),timestamp:Date.now(),fps:Re.empty(),framesTransformed:Re.empty(),guid:Re.empty(),highestFrameTransformCpu:Re.empty(),message:Re.empty(),source:Re.ofNullable(n!==void 0&&n!=null?n.sourceType:null),transformedFps:Re.empty(),transformerType:Re.empty(),variation:Re.empty(),videoHeight:Re.empty(),videoWidth:Re.empty(),version:R2,error:Re.empty(),proxyUrl:Re.ofNullable(n!==void 0&&n!=null?n.proxyUrl:null)}}action(n){return this._report.action=Re.ofNullable(n),this}framesTransformed(n){return this._report.framesTransformed=Re.ofNullable(n),this}fps(n){return this._report.fps=Re.ofNullable(n),this}guid(n){return this._report.guid=Re.ofNullable(n),this}message(n){return this._report.message=Re.ofNullable(n),this}transformedFps(n){return this._report.transformedFps=Re.ofNullable(n),this}transformerType(n){return this._report.transformerType=Re.ofNullable(n),this}variation(n){return this._report.variation=Re.ofNullable(n),this}videoHeight(n){return this._report.videoHeight=Re.ofNullable(n),this}videoWidth(n){return this._report.videoWidth=Re.ofNullable(n),this}error(n){return this._report.error=Re.ofNullable(n),this}build(){return this._report}}const I2=i=>JSON.stringify(i,(n,o)=>{if(o!==null)return o});class qn{static report(n){return new Promise((o,m)=>{if(n.applicationId.isEmpty()||n.source.isEmpty()){o("success");return}let y=V2.create(),S={timeout:1e4,timeoutErrorMessage:"Request timeout",headers:{"Content-Type":"application/json"}},F="hlg.tokbox.com/prod/logging/vcp_webrtc";if(n.proxyUrl.isEmpty())F="https://"+F;else{let L;n.proxyUrl.get().slice(n.proxyUrl.get().length-1)!=="/"?L=n.proxyUrl.get()+"/":L=n.proxyUrl.get(),F=L+F}y.post(F,I2(n),S).then(L=>{console.log(L),o("success")}).catch(L=>{console.log(L),m(L)})})}}var ui,S2=new Uint8Array(16);function T2(){if(!ui&&(ui=typeof crypto!="undefined"&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto)||typeof msCrypto!="undefined"&&typeof msCrypto.getRandomValues=="function"&&msCrypto.getRandomValues.bind(msCrypto),!ui))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return ui(S2)}var L2=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;function Y2(i){return typeof i=="string"&&L2.test(i)}for(var Un=[],oo=0;oo<256;++oo)Un.push((oo+256).toString(16).substr(1));function w2(i){var n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0,o=(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();if(!Y2(o))throw TypeError("Stringified UUID is invalid");return o}function xs(i,n,o){i=i||{};var m=i.random||(i.rng||T2)();if(m[6]=m[6]&15|64,m[8]=m[8]&63|128,n){o=o||0;for(var y=0;y<16;++y)n[o+y]=m[y];return n}return w2(m)}const sr=new WeakMap,ci=new WeakMap,Jr=new WeakMap,so=Symbol("anyProducer"),Is=Promise.resolve(),ai=Symbol("listenerAdded"),di=Symbol("listenerRemoved");let lo=!1;function Sr(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 Tr(i,n){const o=ci.get(i);return o.has(n)||o.set(n,new Set),o.get(n)}function Ur(i,n){const o=typeof n=="string"||typeof n=="symbol"?n:so,m=Jr.get(i);return m.has(o)||m.set(o,new Set),m.get(o)}function F2(i,n,o){const m=Jr.get(i);if(m.has(n))for(const y of m.get(n))y.enqueue(o);if(m.has(so)){const y=Promise.all([n,o]);for(const S of m.get(so))S.enqueue(y)}}function Ss(i,n){n=Array.isArray(n)?n:[n];let o=!1,m=()=>{},y=[];const S={enqueue(F){y.push(F),m()},finish(){o=!0,m()}};for(const F of n)Ur(i,F).add(S);return{async next(){return y?y.length===0?o?(y=void 0,this.next()):(await new Promise(F=>{m=F}),this.next()):{done:!1,value:await y.shift()}:{done:!0}},async return(F){y=void 0;for(const L of n)Ur(i,L).delete(S);return m(),arguments.length>0?{done:!0,value:await F}:{done:!0}},[Symbol.asyncIterator](){return this}}}function Ts(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 uo=i=>i===ai||i===di;class br{static mixin(n,o){return o=Ts(o),m=>{if(typeof m!="function")throw new TypeError("`target` must be function");for(const F of o)if(m.prototype[F]!==void 0)throw new Error(`The property \`${F}\` already exists on \`target\``);function y(){return Object.defineProperty(this,n,{enumerable:!1,value:new br}),this[n]}Object.defineProperty(m.prototype,n,{enumerable:!1,get:y});const S=F=>function(...L){return this[n][F](...L)};for(const F of o)Object.defineProperty(m.prototype,F,{enumerable:!1,value:S(F)});return m}}static get isDebugEnabled(){if(typeof process!="object")return lo;const{env:n}=process||{env:{}};return n.DEBUG==="emittery"||n.DEBUG==="*"||lo}static set isDebugEnabled(n){lo=n}constructor(n={}){sr.set(this,new Set),ci.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=(o,m,y,S)=>{S=JSON.stringify(S),typeof y=="symbol"&&(y=y.toString());const F=new Date,L=`${F.getHours()}:${F.getMinutes()}:${F.getSeconds()}.${F.getMilliseconds()}`;console.log(`[${L}][emittery:${o}][${m}] Event Name: ${y}
|
|
3
|
+
data: ${S}`)})}logIfDebugEnabled(n,o,m){(br.isDebugEnabled||this.debug.enabled)&&this.debug.logger(n,this.debug.name,o,m)}on(n,o){hi(o),n=Array.isArray(n)?n:[n];for(const m of n)Sr(m),Tr(this,m).add(o),this.logIfDebugEnabled("subscribe",m,void 0),uo(m)||this.emit(ai,{eventName:m,listener:o});return this.off.bind(this,n,o)}off(n,o){hi(o),n=Array.isArray(n)?n:[n];for(const m of n)Sr(m),Tr(this,m).delete(o),this.logIfDebugEnabled("unsubscribe",m,void 0),uo(m)||this.emit(di,{eventName:m,listener:o})}once(n){return new Promise(o=>{const m=this.on(n,y=>{m(),o(y)})})}events(n){n=Array.isArray(n)?n:[n];for(const o of n)Sr(o);return Ss(this,n)}async emit(n,o){Sr(n),this.logIfDebugEnabled("emit",n,o),F2(this,n,o);const m=Tr(this,n),y=sr.get(this),S=[...m],F=uo(n)?[]:[...y];await Is,await Promise.all([...S.map(async L=>{if(m.has(L))return L(o)}),...F.map(async L=>{if(y.has(L))return L(n,o)})])}async emitSerial(n,o){Sr(n),this.logIfDebugEnabled("emitSerial",n,o);const m=Tr(this,n),y=sr.get(this),S=[...m],F=[...y];await Is;for(const L of S)m.has(L)&&await L(o);for(const L of F)y.has(L)&&await L(n,o)}onAny(n){return hi(n),this.logIfDebugEnabled("subscribeAny",void 0,void 0),sr.get(this).add(n),this.emit(ai,{listener:n}),this.offAny.bind(this,n)}anyEvent(){return Ss(this)}offAny(n){hi(n),this.logIfDebugEnabled("unsubscribeAny",void 0,void 0),this.emit(di,{listener:n}),sr.get(this).delete(n)}clearListeners(n){n=Array.isArray(n)?n:[n];for(const o of n)if(this.logIfDebugEnabled("clear",o,void 0),typeof o=="string"||typeof o=="symbol"){Tr(this,o).clear();const m=Ur(this,o);for(const y of m)y.finish();m.clear()}else{sr.get(this).clear();for(const m of ci.get(this).values())m.clear();for(const m of Jr.get(this).values()){for(const y of m)y.finish();m.clear()}}}listenerCount(n){n=Array.isArray(n)?n:[n];let o=0;for(const m of n){if(typeof m=="string"){o+=sr.get(this).size+Tr(this,m).size+Ur(this,m).size+Ur(this).size;continue}typeof m!="undefined"&&Sr(m),o+=sr.get(this).size;for(const y of ci.get(this).values())o+=y.size;for(const y of Jr.get(this).values())o+=y.size}return o}bindMethods(n,o){if(typeof n!="object"||n===null)throw new TypeError("`target` must be an object");o=Ts(o);for(const m of o){if(n[m]!==void 0)throw new Error(`The property \`${m}\` already exists on \`target\``);Object.defineProperty(n,m,{enumerable:!1,value:this[m].bind(this)})}}}const Ls=Object.getOwnPropertyNames(br.prototype).filter(i=>i!=="constructor");Object.defineProperty(br,"listenerAdded",{value:ai,writable:!1,enumerable:!0,configurable:!1}),Object.defineProperty(br,"listenerRemoved",{value:di,writable:!1,enumerable:!0,configurable:!1});var co=br;function H2(i){return typeof i=="object"&&i!==null&&"message"in i&&typeof i.message=="string"}function C2(i){if(H2(i))return i;try{return new Error(JSON.stringify(i))}catch{return new Error(String(i))}}function ao(i){return C2(i).message}var Ys=(i=>(i.FPS_DROP="fps_drop",i))(Ys||{}),ws=(i=>(i.start="start",i.transform="transform",i.flush="flush",i))(ws||{}),fi=(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))(fi||{});const N2=500,E2=.8;class k2 extends co{constructor(n,o){super(),this.index_=o,this.uuid_=xs(),this.framesTransformed_=0,this.transformer_=n,this.shouldStop_=!1,this.isFlashed_=!1,this.framesFromSource_=0,this.fps_=0,this.mediaTransformerQosReportStartTimestamp_=0,this.videoHeight_=0,this.videoWidth_=0,this.trackExpectedRate_=-1,this.transformerType_="Custom","getTransformerType"in n&&(this.transformerType_=n.getTransformerType());const m=new $n().action("MediaTransformer").guid(this.uuid_).transformerType(this.transformerType_).variation("Create").build();qn.report(m)}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(o){const m=new $n().action("MediaTransformer").guid(this.uuid_).message(ir.errors.transformer_start).transformerType(this.transformerType_).variation("Error").error(ao(o)).build();qn.report(m);const y={eventMetaData:{transformerIndex:this.index_},error:o,function:"start"};this.emit("error",y)}}async transform(n,o){var m,y,S,F;if(this.mediaTransformerQosReportStartTimestamp_===0&&(this.mediaTransformerQosReportStartTimestamp_=Date.now()),n instanceof VideoFrame&&(this.videoHeight_=(m=n==null?void 0:n.displayHeight)!=null?m:0,this.videoWidth_=(y=n==null?void 0:n.displayWidth)!=null?y:0),++this.framesFromSource_,this.transformer_)if(this.shouldStop_)console.warn("[Pipeline] flush from transform"),n.close(),this.flush(o),o.terminate();else try{await((F=(S=this.transformer_).transform)==null?void 0:F.call(S,n,o)),++this.framesTransformed_,this.framesTransformed_===N2&&this.mediaTransformerQosReport()}catch(L){const J=new $n().action("MediaTransformer").guid(this.uuid_).message(ir.errors.transformer_transform).transformerType(this.transformerType_).variation("Error").error(ao(L)).build();qn.report(J);const rt={eventMetaData:{transformerIndex:this.index_},error:L,function:"transform"};this.emit("error",rt)}}async flush(n){if(this.transformer_&&typeof this.transformer_.flush=="function"&&!this.isFlashed_){this.isFlashed_=!0;try{await this.transformer_.flush(n)}catch(m){const y=new $n().action("MediaTransformer").guid(this.uuid_).message(ir.errors.transformer_flush).transformerType(this.transformerType_).variation("Error").error(ao(m)).build();qn.report(y);const S={eventMetaData:{transformerIndex:this.index_},error:m,function:"flush"};this.emit("error",S)}}this.mediaTransformerQosReport();const o=new $n().action("MediaTransformer").guid(this.uuid_).transformerType(this.transformerType_).variation("Delete").build();qn.report(o)}stop(){console.log("[Pipeline] Stop stream."),this.controller_&&(this.flush(this.controller_),this.controller_.terminate()),this.shouldStop_=!0}mediaTransformerQosReport(){let n=(Date.now()-this.mediaTransformerQosReportStartTimestamp_)/1e3,o=this.framesFromSource_/n,m=this.framesTransformed_/n;if(this.trackExpectedRate_!=-1&&this.trackExpectedRate_*E2>o){const S={eventMetaData:{transformerIndex:this.index_},warningType:"fps_drop",dropInfo:{requested:this.trackExpectedRate_,current:o}};this.emit("warn",S)}const y=new $n().action("MediaTransformer").fps(o).transformedFps(m).framesTransformed(this.framesTransformed_).guid(this.uuid_).transformerType(this.transformerType_).videoHeight(this.videoHeight_).videoWidth(this.videoWidth_).variation("QoS").build();qn.report(y),this.mediaTransformerQosReportStartTimestamp_=0,this.framesFromSource_=0,this.framesTransformed_=0}}class J2 extends co{constructor(n){super(),this.transformers_=[],this.trackExpectedRate_=-1;for(let o=0;o<n.length;o++){let m=new k2(n[o],o);m.on("error",y=>{this.emit("error",y)}),m.on("warn",y=>{this.emit("warn",y)}),this.transformers_.push(m)}}setTrackExpectedRate(n){this.trackExpectedRate_=n;for(let o of this.transformers_)o.setTrackExpectedRate(this.trackExpectedRate_)}async start(n,o){if(!this.transformers_||this.transformers_.length===0){console.log("[Pipeline] No transformers.");return}try{let m=n;for(let y of this.transformers_)n=n.pipeThrough(new TransformStream(y));n.pipeTo(o).then(async()=>{console.log("[Pipeline] Setup."),await o.abort(),await m.cancel(),this.emit("pipelineInfo","pipeline_ended")}).catch(async y=>{n.cancel().then(()=>{console.log("[Pipeline] Shutting down streams after abort.")}).catch(S=>{console.error("[Pipeline] Error from stream transform:",S)}),await o.abort(y),await m.cancel(y),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 U2 extends co{constructor(){super(),this.uuid_=xs(),this.trackExpectedRate_=-1;const n=new $n().action("MediaProcessor").guid(this.uuid_).variation("Create").build();qn.report(n)}setTrackExpectedRate(n){this.trackExpectedRate_=n,this.pipeline_&&this.pipeline_.setTrackExpectedRate(this.trackExpectedRate_)}transform(n,o){return this.readable_=n,this.writable_=o,this.transformInternal()}transformInternal(){return new Promise((n,o)=>{if(!this.transformers_||this.transformers_.length===0){const y=new $n().action("MediaProcessor").guid(this.uuid_).message(ir.errors.transformer_none).variation("Error").build();qn.report(y),o("[MediaProcessor] Need to set transformers.");return}if(!this.readable_){const y=new $n().action("MediaProcessor").guid(this.uuid_).message(ir.errors.readable_null).variation("Error").build();qn.report(y),o("[MediaProcessor] Readable is null.");return}if(!this.writable_){const y=new $n().action("MediaProcessor").guid(this.uuid_).message(ir.errors.writable_null).variation("Error").build();qn.report(y),o("[MediaProcessor] Writable is null.");return}let m=!1;this.pipeline_&&(m=!0,this.pipeline_.clearListeners(),this.pipeline_.destroy()),this.pipeline_=new J2(this.transformers_),this.pipeline_.on("warn",y=>{this.emit("warn",y)}),this.pipeline_.on("error",y=>{this.emit("error",y)}),this.pipeline_.on("pipelineInfo",y=>{m&&(y==="pipeline_started"?y=fi.pipeline_restarted:y==="pipeline_started_with_error"&&(y=fi.pipeline_restarted_with_error)),this.emit("pipelineInfo",y)}),this.trackExpectedRate_!=-1&&this.pipeline_.setTrackExpectedRate(this.trackExpectedRate_),this.pipeline_.start(this.readable_,this.writable_).then(()=>{n()}).catch(y=>{o(y)})})}setTransformers(n){const o=new $n().action("MediaProcessor").guid(this.uuid_).message(ir.updates.transformer_new).variation("Update").build();return qn.report(o),this.transformers_=n,this.readable_&&this.writable_?this.transformInternal():Promise.resolve()}destroy(){return new Promise(n=>{this.pipeline_&&this.pipeline_.destroy();const o=new $n().action("MediaProcessor").guid(this.uuid_).variation("Delete").build();qn.report(o),n()})}}class K2{constructor(){this.processor_=null,this.generator_=null}init(n){return new Promise((o,m)=>{try{this.processor_=new MediaStreamTrackProcessor(n)}catch(y){console.log(`[InsertableStreamHelper] MediaStreamTrackProcessor failed: ${y}`),m(y)}try{n.kind==="audio"?this.generator_=new MediaStreamTrackGenerator({kind:"audio"}):n.kind==="video"?this.generator_=new MediaStreamTrackGenerator({kind:"video"}):m("kind not supported")}catch(y){console.log(`[InsertableStreamHelper] MediaStreamTrackGenerator failed: ${y}`),m(y)}o()})}getReadable(){return this.processor_.readable}getWriteable(){return this.generator_.writable}getProccesorTrack(){return this.generator_}}class M2{constructor(n){this.insertableStreamHelper_=new K2,this.mediaProcessor_=n}setTrack(n){return new Promise((o,m)=>{this.insertableStreamHelper_.init(n).then(()=>{this.mediaProcessor_.transform(this.insertableStreamHelper_.getReadable(),this.insertableStreamHelper_.getWriteable()).then(()=>{o(this.insertableStreamHelper_.getProccesorTrack())}).catch(y=>{m(y)})}).catch(y=>{m(y)})})}destroy(){return new Promise((n,o)=>{this.mediaProcessor_?this.mediaProcessor_.destroy().then(()=>{n()}).catch(m=>{o(m)}):o("no processor")})}}var Kr=(i=>(i.Low="Low",i.High="High",i))(Kr||{});const B2=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 mi=function(){var i=typeof document!="undefined"&&document.currentScript?document.currentScript.src:void 0;return function(n){n=n||{};var o=typeof n!="undefined"?n:{},m,y;o.ready=new Promise(function(et,ot){m=et,y=ot});var S={},F;for(F in o)o.hasOwnProperty(F)&&(S[F]=o[F]);var L="./this.program",J=function(et,ot){throw ot},rt=!0,z="";function st(et){return o.locateFile?o.locateFile(et,z):z+et}var Gt;typeof document!="undefined"&&document.currentScript&&(z=document.currentScript.src),i&&(z=i),z.indexOf("blob:")!==0?z=z.substr(0,z.replace(/[?#].*/,"").lastIndexOf("/")+1):z="";var Vt=o.print||console.log.bind(console),dt=o.printErr||console.warn.bind(console);for(F in S)S.hasOwnProperty(F)&&(o[F]=S[F]);S=null,o.arguments&&o.arguments,o.thisProgram&&(L=o.thisProgram),o.quit&&(J=o.quit);var ht;o.wasmBinary&&(ht=o.wasmBinary);var Yt=o.noExitRuntime||!0;typeof WebAssembly!="object"&&de("no native wasm support detected");var Ft,Bt=!1,_=typeof TextDecoder!="undefined"?new TextDecoder("utf8"):void 0;function Ae(et,ot,at){for(var Ot=ot+at,ce=ot;et[ce]&&!(ce>=Ot);)++ce;if(ce-ot>16&&et.subarray&&_)return _.decode(et.subarray(ot,ce));for(var le="";ot<ce;){var Tt=et[ot++];if(!(Tt&128)){le+=String.fromCharCode(Tt);continue}var fe=et[ot++]&63;if((Tt&224)==192){le+=String.fromCharCode((Tt&31)<<6|fe);continue}var Ce=et[ot++]&63;if((Tt&240)==224?Tt=(Tt&15)<<12|fe<<6|Ce:Tt=(Tt&7)<<18|fe<<12|Ce<<6|et[ot++]&63,Tt<65536)le+=String.fromCharCode(Tt);else{var De=Tt-65536;le+=String.fromCharCode(55296|De>>10,56320|De&1023)}}return le}function cn(et,ot){return et?Ae(gt,et,ot):""}function We(et,ot,at){for(var Ot=0;Ot<et.length;++Ot)ae[ot++>>0]=et.charCodeAt(Ot);at||(ae[ot>>0]=0)}function Dt(et,ot){return et%ot>0&&(et+=ot-et%ot),et}var Bn,ae,gt,mn;function An(et){Bn=et,o.HEAP8=ae=new Int8Array(et),o.HEAP16=new Int16Array(et),o.HEAP32=mn=new Int32Array(et),o.HEAPU8=gt=new Uint8Array(et),o.HEAPU16=new Uint16Array(et),o.HEAPU32=new Uint32Array(et),o.HEAPF32=new Float32Array(et),o.HEAPF64=new Float64Array(et)}o.INITIAL_MEMORY;var Ve,Nt=[],Te=[],nn=[],Gn=0;function wn(){return Yt||Gn>0}function Rn(){if(o.preRun)for(typeof o.preRun=="function"&&(o.preRun=[o.preRun]);o.preRun.length;)pn(o.preRun.shift());_t(Nt)}function Cn(){_t(Te)}function an(){if(o.postRun)for(typeof o.postRun=="function"&&(o.postRun=[o.postRun]);o.postRun.length;)Fn(o.postRun.shift());_t(nn)}function pn(et){Nt.unshift(et)}function En(et){Te.unshift(et)}function Fn(et){nn.unshift(et)}var je=0,Me=null;function xn(et){je++,o.monitorRunDependencies&&o.monitorRunDependencies(je)}function Xn(et){if(je--,o.monitorRunDependencies&&o.monitorRunDependencies(je),je==0&&Me){var ot=Me;Me=null,ot()}}o.preloadedImages={},o.preloadedAudios={};function de(et){o.onAbort&&o.onAbort(et),et="Aborted("+et+")",dt(et),Bt=!0,et+=". Build with -s ASSERTIONS=1 for more info.";var ot=new WebAssembly.RuntimeError(et);throw y(ot),ot}var Se="data:application/octet-stream;base64,";function ze(et){return et.startsWith(Se)}var ee;ee="tflite-simd.wasm",ze(ee)||(ee=st(ee));function Xe(et){try{if(et==ee&&ht)return new Uint8Array(ht);if(!Gt)throw"both async and sync fetching of the wasm failed"}catch(ot){de(ot)}}function rn(){return!ht&&rt&&typeof fetch=="function"?fetch(ee,{credentials:"same-origin"}).then(function(et){if(!et.ok)throw"failed to load wasm binary file at '"+ee+"'";return et.arrayBuffer()}).catch(function(){return Xe(ee)}):Promise.resolve().then(function(){return Xe(ee)})}function Ue(){var et={a:he};function ot(Tt,fe){var Ce=Tt.exports;o.asm=Ce,Ft=o.asm.q,An(Ft.buffer),Ve=o.asm.E,En(o.asm.r),Xn()}xn();function at(Tt){ot(Tt.instance)}function Ot(Tt){return rn().then(function(fe){return WebAssembly.instantiate(fe,et)}).then(function(fe){return fe}).then(Tt,function(fe){dt("failed to asynchronously prepare wasm: "+fe),de(fe)})}function ce(){return!ht&&typeof WebAssembly.instantiateStreaming=="function"&&!ze(ee)&&typeof fetch=="function"?fetch(ee,{credentials:"same-origin"}).then(function(Tt){var fe=WebAssembly.instantiateStreaming(Tt,et);return fe.then(at,function(Ce){return dt("wasm streaming compile failed: "+Ce),dt("falling back to ArrayBuffer instantiation"),Ot(at)})}):Ot(at)}if(o.instantiateWasm)try{var le=o.instantiateWasm(et,ot);return le}catch(Tt){return dt("Module.instantiateWasm callback failed with error: "+Tt),!1}return ce().catch(y),{}}function _t(et){for(;et.length>0;){var ot=et.shift();if(typeof ot=="function"){ot(o);continue}var at=ot.func;typeof at=="number"?ot.arg===void 0?Ve.get(at)():Ve.get(at)(ot.arg):at(ot.arg===void 0?null:ot.arg)}}function ge(et,ot,at,Ot){de("Assertion failed: "+cn(et)+", at: "+[ot?cn(ot):"unknown filename",at,Ot?cn(Ot):"unknown function"])}function He(et,ot){de("To use dlopen, you need to use Emscripten's linking support, see https://github.com/emscripten-core/emscripten/wiki/Linking")}function Mt(et,ot){de("To use dlopen, you need to use Emscripten's linking support, see https://github.com/emscripten-core/emscripten/wiki/Linking")}function xe(){de("")}var jt;jt=function(){return performance.now()};var be=!0;function Le(et){return mn[Ct()>>2]=et,et}function Qe(et,ot){var at;if(et===0)at=Date.now();else if((et===1||et===4)&&be)at=jt();else return Le(28),-1;return mn[ot>>2]=at/1e3|0,mn[ot+4>>2]=at%1e3*1e3*1e3|0,0}function Ge(){return 2147483648}function zt(et,ot,at){gt.copyWithin(et,ot,ot+at)}function Be(et){try{return Ft.grow(et-Bn.byteLength+65535>>>16),An(Ft.buffer),1}catch{}}function Pe(et){var ot=gt.length;et=et>>>0;var at=2147483648;if(et>at)return!1;for(var Ot=1;Ot<=4;Ot*=2){var ce=ot*(1+.2/Ot);ce=Math.min(ce,et+100663296);var le=Math.min(at,Dt(Math.max(et,ce),65536)),Tt=Be(le);if(Tt)return!0}return!1}function Ie(et){for(var ot=jt();jt()-ot<et;);}var Wn={};function on(){return L||"./this.program"}function Oe(){if(!Oe.strings){var et=(typeof navigator=="object"&&navigator.languages&&navigator.languages[0]||"C").replace("-","_")+".UTF-8",ot={USER:"web_user",LOGNAME:"web_user",PATH:"/",PWD:"/",HOME:"/home/web_user",LANG:et,_:on()};for(var at in Wn)Wn[at]===void 0?delete ot[at]:ot[at]=Wn[at];var Ot=[];for(var at in ot)Ot.push(at+"="+ot[at]);Oe.strings=Ot}return Oe.strings}var sn={mappings:{},buffers:[null,[],[]],printChar:function(et,ot){var at=sn.buffers[et];ot===0||ot===10?((et===1?Vt:dt)(Ae(at,0)),at.length=0):at.push(ot)},varargs:void 0,get:function(){sn.varargs+=4;var et=mn[sn.varargs-4>>2];return et},getStr:function(et){var ot=cn(et);return ot},get64:function(et,ot){return et}};function Ze(et,ot){var at=0;return Oe().forEach(function(Ot,ce){var le=ot+at;mn[et+ce*4>>2]=le,We(Ot,le),at+=Ot.length+1}),0}function Ye(et,ot){var at=Oe();mn[et>>2]=at.length;var Ot=0;return at.forEach(function(ce){Ot+=ce.length+1}),mn[ot>>2]=Ot,0}function ve(et){te(et)}function ne(et){return 0}function _e(et,ot,at,Ot,ce){}function qt(et,ot,at,Ot){for(var ce=0,le=0;le<at;le++){for(var Tt=mn[ot+le*8>>2],fe=mn[ot+(le*8+4)>>2],Ce=0;Ce<fe;Ce++)sn.printChar(et,gt[Tt+Ce]);ce+=fe}return mn[Ot>>2]=ce,0}function Pt(){if(typeof crypto=="object"&&typeof crypto.getRandomValues=="function"){var et=new Uint8Array(1);return function(){return crypto.getRandomValues(et),et[0]}}else return function(){de("randomDevice")}}function dn(et,ot){dn.randomDevice||(dn.randomDevice=Pt());for(var at=0;at<ot;at++)ae[et+at>>0]=dn.randomDevice();return 0}var he={a:ge,e:He,d:Mt,b:xe,n:Qe,h:Ge,l:zt,m:Pe,p:Ie,f:Ze,g:Ye,j:ve,i:ne,k:_e,c:qt,o:dn};Ue(),o.___wasm_call_ctors=function(){return(o.___wasm_call_ctors=o.asm.r).apply(null,arguments)},o._getModelBufferMemoryOffset=function(){return(o._getModelBufferMemoryOffset=o.asm.s).apply(null,arguments)},o._getInputMemoryOffset=function(){return(o._getInputMemoryOffset=o.asm.t).apply(null,arguments)},o._getInputHeight=function(){return(o._getInputHeight=o.asm.u).apply(null,arguments)},o._getInputWidth=function(){return(o._getInputWidth=o.asm.v).apply(null,arguments)},o._getInputChannelCount=function(){return(o._getInputChannelCount=o.asm.w).apply(null,arguments)},o._getOutputMemoryOffset=function(){return(o._getOutputMemoryOffset=o.asm.x).apply(null,arguments)},o._getOutputHeight=function(){return(o._getOutputHeight=o.asm.y).apply(null,arguments)},o._getOutputWidth=function(){return(o._getOutputWidth=o.asm.z).apply(null,arguments)},o._getOutputChannelCount=function(){return(o._getOutputChannelCount=o.asm.A).apply(null,arguments)},o._loadModel=function(){return(o._loadModel=o.asm.B).apply(null,arguments)},o._runInference=function(){return(o._runInference=o.asm.C).apply(null,arguments)},o._isGPUEnabled=function(){return(o._isGPUEnabled=o.asm.D).apply(null,arguments)};var Ct=o.___errno_location=function(){return(Ct=o.___errno_location=o.asm.F).apply(null,arguments)},Rt;function re(et){this.name="ExitStatus",this.message="Program terminated with exit("+et+")",this.status=et}Me=function et(){Rt||we(),Rt||(Me=et)};function we(et){if(je>0||(Rn(),je>0))return;function ot(){Rt||(Rt=!0,o.calledRun=!0,!Bt&&(Cn(),m(o),o.onRuntimeInitialized&&o.onRuntimeInitialized(),an()))}o.setStatus?(o.setStatus("Running..."),setTimeout(function(){setTimeout(function(){o.setStatus("")},1),ot()},1)):ot()}o.run=we;function te(et,ot){ie(et)}function ie(et){wn()||(o.onExit&&o.onExit(et),Bt=!0),J(et,new re(et))}if(o.preInit)for(typeof o.preInit=="function"&&(o.preInit=[o.preInit]);o.preInit.length>0;)o.preInit.pop()();return we(),n.ready}}();typeof un=="object"&&typeof module=="object"?module.exports=mi:typeof define=="function"&&define.amd?define([],function(){return mi}):typeof un=="object"&&(un.createVonageTFLiteSimdModule=mi);class A2{constructor(){this.isSIMDSupported=!1,this.isThreadsSupported=!1,this.inputWidth=0,this.inputHeight=0,this.inputChannelCount=0,this.inputMemoryOffset=0,this.outputWidth=0,this.outputHeight=0,this.outputChannelCount=0,this.outputMemoryOffset=0}}const j2="https://d3opqjmqzxf057.cloudfront.net/vonage-tensorflow-wasm/tflite-simd-wasm/1.1.3/",z2="https://d3opqjmqzxf057.cloudfront.net/ml/selfie_segmentation/4.0.0/";async function P2(i=j2,n=z2){let o=new A2;var m=new Promise(function(y,S){async function F(){return mi({locateFile:function(rt){return i+rt}})}async function L(J){return new Promise(async(rt,z)=>{const st=J;if(typeof st=="undefined")return z("TFLite backend unavailable: wasmSimd");const Gt="selfie_segmentation_landscape";console.log("Loading tflite model:",Gt);let Vt=n+`${Gt}.tflite`;console.log("TFLite modelUrl: "+Vt);try{const ht=await(await fetch(Vt)).arrayBuffer();console.log("Model buffer size:",ht.byteLength);const Yt=st._getModelBufferMemoryOffset();console.log("Model buffer memory offset:",Yt),console.log("Loading model buffer..."),st.HEAPU8.set(new Uint8Array(ht),Yt);const Ft=st._loadModel(ht.byteLength);if(console.log("Load model result:",Ft),Ft!==0){z("Cannot load model");return}o.inputWidth=st._getInputWidth(),o.inputHeight=st._getInputHeight(),o.inputChannelCount=st._getInputChannelCount(),o.inputMemoryOffset=st._getInputMemoryOffset(),console.log("Input memory offset:",o.inputMemoryOffset),console.log("Input height:",o.inputHeight),console.log("Input width:",o.inputWidth),console.log("Input channels:",o.inputChannelCount),o.outputMemoryOffset=st._getOutputMemoryOffset(),o.outputWidth=st._getOutputWidth(),o.outputHeight=st._getOutputHeight(),o.outputChannelCount=st._getOutputChannelCount(),console.log("Output memory offset:",o.outputMemoryOffset),console.log("Output height:",o.outputHeight),console.log("Output width:",o.outputWidth),console.log("Output channels:",o.outputChannelCount),o.selectedTFLite=st}catch(dt){z(dt);return}rt()})}F().then(J=>{if(J===null)throw console.error("loadTFLite null"),"loadTFLite null";L(J).then(rt=>{y(o)}).catch(rt=>{console.error("loadTFLiteModel error"),S("loadTFLiteModel error")})}).catch(J=>{console.error("loadTFLite error:",J),S("loadTFLite error:"+J)})});return m}class Fs{constructor(){this.canvas=new OffscreenCanvas(0,0),this.context=this.canvas.getContext("2d",{willReadFrequently:!0}),this.pixelCount=0,this.inputOffset=0,this.outputOffset=0}async init(n,o){await this.initWasm(n,o),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,o){this.infos=await P2(n,o)}getOutputDimensions(){var n,o,m,y;return{width:(o=(n=this.infos)==null?void 0:n.outputWidth)!=null?o:0,height:(y=(m=this.infos)==null?void 0:m.outputHeight)!=null?y:0}}async process(n){if(!this.mask||!this.infos)return;const o=this.infos.inputWidth,m=this.infos.inputHeight;this.context.drawImage(n,0,0,n.width,n.height,0,0,o,m);const y=this.context.getImageData(0,0,o,m),S=this.infos.selectedTFLite.HEAPF32;for(let F=0;F<this.pixelCount;F++){const L=this.inputOffset+F*3;S[L]=y.data[F*4]/255,S[L+1]=y.data[F*4+1]/255,S[L+2]=y.data[F*4+2]/255}this.infos.selectedTFLite._runInference();for(let F=0;F<this.pixelCount;F++){const L=this.infos.selectedTFLite.HEAPF32[this.outputOffset+F];this.mask.data[F*4]=this.mask.data[F*4+3]=255*L}return createImageBitmap(this.mask)}isGpuSupported(){var n,o,m;return(m=(o=(n=this.infos)==null?void 0:n.selectedTFLite)==null?void 0:o._isGPUEnabled())!=null?m:!1}}async function O2(i,n){const{wasm:o,insertableStreams:m,simd:y}=await Hs(i,n);if(!o.supported)throw o.message;if(!m.supported)throw m.message;if(!y.supported)throw y.message}async function Hs(i,n){const o=new Fs;await o.initWasm(i,n);const m={wasm:{supported:typeof WebAssembly=="object"&&typeof WebAssembly.instantiate=="function",message:"Your browser does not support WebAssembly features."},simd:{supported:await B2(),message:"Your browser does not support simd features."},insertableStreams:{supported:!0},gpu:{supported:o.isGpuSupported(),message:"Your browser does not support gpu features."}};try{await Er()}catch(y){m.insertableStreams.supported=!1,m.insertableStreams.message=y}return m}const pi={};(function(){var i;function n(p){var W=0;return function(){return W<p.length?{done:!1,value:p[W++]}:{done:!0}}}var o=typeof Object.defineProperties=="function"?Object.defineProperty:function(p,W,V){return p==Array.prototype||p==Object.prototype||(p[W]=V.value),p};function m(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 y=m(this);function S(p,W){if(W)t:{var V=y;p=p.split(".");for(var k=0;k<p.length-1;k++){var O=p[k];if(!(O in V))break t;V=V[O]}p=p[p.length-1],k=V[p],W=W(k),W!=k&&W!=null&&o(V,p,{configurable:!0,writable:!0,value:W})}}S("Symbol",function(p){function W(lt){if(this instanceof W)throw new TypeError("Symbol is not a constructor");return new V(k+(lt||"")+"_"+O++,lt)}function V(lt,P){this.g=lt,o(this,"description",{configurable:!0,writable:!0,value:P})}if(p)return p;V.prototype.toString=function(){return this.g};var k="jscomp_symbol_"+(1e9*Math.random()>>>0)+"_",O=0;return W}),S("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 k=y[W[V]];typeof k=="function"&&typeof k.prototype[p]!="function"&&o(k.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 L(p){var W=typeof Symbol!="undefined"&&Symbol.iterator&&p[Symbol.iterator];return W?W.call(p):{next:n(p)}}function J(p){if(!(p instanceof Array)){p=L(p);for(var W,V=[];!(W=p.next()).done;)V.push(W.value);p=V}return p}var rt=typeof Object.create=="function"?Object.create:function(p){function W(){}return W.prototype=p,new W},z;if(typeof Object.setPrototypeOf=="function")z=Object.setPrototypeOf;else{var st;t:{var Gt={a:!0},Vt={};try{Vt.__proto__=Gt,st=Vt.a;break t}catch{}st=!1}z=st?function(p,W){if(p.__proto__=W,p.__proto__!==W)throw new TypeError(p+" is not extensible");return p}:null}var dt=z;function ht(p,W){if(p.prototype=rt(W.prototype),p.prototype.constructor=p,dt)dt(p,W);else for(var V in W)if(V!="prototype")if(Object.defineProperties){var k=Object.getOwnPropertyDescriptor(W,V);k&&Object.defineProperty(p,V,k)}else p[V]=W[V];p.ea=W.prototype}function Yt(){this.l=!1,this.i=null,this.h=void 0,this.g=1,this.s=this.m=0,this.j=null}function Ft(p){if(p.l)throw new TypeError("Generator is already running");p.l=!0}Yt.prototype.o=function(p){this.h=p};function Bt(p,W){p.j={U:W,V:!0},p.g=p.m||p.s}Yt.prototype.return=function(p){this.j={return:p},this.g=this.s};function _(p,W,V){return p.g=V,{value:W}}function Ae(p){this.g=new Yt,this.h=p}function cn(p,W){Ft(p.g);var V=p.g.i;return V?We(p,"return"in V?V.return:function(k){return{value:k,done:!0}},W,p.g.return):(p.g.return(W),Dt(p))}function We(p,W,V,k){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 lt=O.value}catch(P){return p.g.i=null,Bt(p.g,P),Dt(p)}return p.g.i=null,k.call(p.g,lt),Dt(p)}function Dt(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,Bt(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 Bn(p){this.next=function(W){return Ft(p.g),p.g.i?W=We(p,p.g.i.next,W,p.g.o):(p.g.o(W),W=Dt(p)),W},this.throw=function(W){return Ft(p.g),p.g.i?W=We(p,p.g.i.throw,W,p.g.o):(Bt(p.g,W),W=Dt(p)),W},this.return=function(W){return cn(p,W)},this[Symbol.iterator]=function(){return this}}function ae(p,W){return W=new Bn(new Ae(W)),dt&&p.prototype&&dt(W,p.prototype),W}function gt(p,W){p instanceof String&&(p+="");var V=0,k=!1,O={next:function(){if(!k&&V<p.length){var lt=V++;return{value:W(lt,p[lt]),done:!1}}return k=!0,{done:!0,value:void 0}}};return O[Symbol.iterator]=function(){return O},O}var mn=typeof Object.assign=="function"?Object.assign:function(p,W){for(var V=1;V<arguments.length;V++){var k=arguments[V];if(k)for(var O in k)Object.prototype.hasOwnProperty.call(k,O)&&(p[O]=k[O])}return p};S("Object.assign",function(p){return p||mn}),S("Promise",function(p){function W(P){this.h=0,this.i=void 0,this.g=[],this.o=!1;var it=this.j();try{P(it.resolve,it.reject)}catch(bt){it.reject(bt)}}function V(){this.g=null}function k(P){return P instanceof W?P:new W(function(it){it(P)})}if(p)return p;V.prototype.h=function(P){if(this.g==null){this.g=[];var it=this;this.i(function(){it.l()})}this.g.push(P)};var O=y.setTimeout;V.prototype.i=function(P){O(P,0)},V.prototype.l=function(){for(;this.g&&this.g.length;){var P=this.g;this.g=[];for(var it=0;it<P.length;++it){var bt=P[it];P[it]=null;try{bt()}catch(xt){this.j(xt)}}}this.g=null},V.prototype.j=function(P){this.i(function(){throw P})},W.prototype.j=function(){function P(xt){return function(Ut){bt||(bt=!0,xt.call(it,Ut))}}var it=this,bt=!1;return{resolve:P(this.C),reject:P(this.l)}},W.prototype.C=function(P){if(P===this)this.l(new TypeError("A Promise cannot resolve to itself"));else if(P instanceof W)this.F(P);else{t:switch(typeof P){case"object":var it=P!=null;break t;case"function":it=!0;break t;default:it=!1}it?this.u(P):this.m(P)}},W.prototype.u=function(P){var it=void 0;try{it=P.then}catch(bt){this.l(bt);return}typeof it=="function"?this.G(it,P):this.m(P)},W.prototype.l=function(P){this.s(2,P)},W.prototype.m=function(P){this.s(1,P)},W.prototype.s=function(P,it){if(this.h!=0)throw Error("Cannot settle("+P+", "+it+"): Promise already settled in state"+this.h);this.h=P,this.i=it,this.h===2&&this.D(),this.A()},W.prototype.D=function(){var P=this;O(function(){if(P.B()){var it=y.console;typeof it!="undefined"&&it.error(P.i)}},1)},W.prototype.B=function(){if(this.o)return!1;var P=y.CustomEvent,it=y.Event,bt=y.dispatchEvent;return typeof bt=="undefined"?!0:(typeof P=="function"?P=new P("unhandledrejection",{cancelable:!0}):typeof it=="function"?P=new it("unhandledrejection",{cancelable:!0}):(P=y.document.createEvent("CustomEvent"),P.initCustomEvent("unhandledrejection",!1,!0,P)),P.promise=this,P.reason=this.i,bt(P))},W.prototype.A=function(){if(this.g!=null){for(var P=0;P<this.g.length;++P)lt.h(this.g[P]);this.g=null}};var lt=new V;return W.prototype.F=function(P){var it=this.j();P.J(it.resolve,it.reject)},W.prototype.G=function(P,it){var bt=this.j();try{P.call(it,bt.resolve,bt.reject)}catch(xt){bt.reject(xt)}},W.prototype.then=function(P,it){function bt($t,kt){return typeof $t=="function"?function(Lt){try{xt($t(Lt))}catch(Jt){Ut(Jt)}}:kt}var xt,Ut,Et=new W(function($t,kt){xt=$t,Ut=kt});return this.J(bt(P,xt),bt(it,Ut)),Et},W.prototype.catch=function(P){return this.then(void 0,P)},W.prototype.J=function(P,it){function bt(){switch(xt.h){case 1:P(xt.i);break;case 2:it(xt.i);break;default:throw Error("Unexpected state: "+xt.h)}}var xt=this;this.g==null?lt.h(bt):this.g.push(bt),this.o=!0},W.resolve=k,W.reject=function(P){return new W(function(it,bt){bt(P)})},W.race=function(P){return new W(function(it,bt){for(var xt=L(P),Ut=xt.next();!Ut.done;Ut=xt.next())k(Ut.value).J(it,bt)})},W.all=function(P){var it=L(P),bt=it.next();return bt.done?k([]):new W(function(xt,Ut){function Et(Lt){return function(Jt){$t[Lt]=Jt,kt--,kt==0&&xt($t)}}var $t=[],kt=0;do $t.push(void 0),kt++,k(bt.value).J(Et($t.length-1),Ut),bt=it.next();while(!bt.done)})},W}),S("Object.is",function(p){return p||function(W,V){return W===V?W!==0||1/W===1/V:W!==W&&V!==V}}),S("Array.prototype.includes",function(p){return p||function(W,V){var k=this;k instanceof String&&(k=String(k));var O=k.length;for(V=V||0,0>V&&(V=Math.max(V+O,0));V<O;V++){var lt=k[V];if(lt===W||Object.is(lt,W))return!0}return!1}}),S("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}}),S("Array.prototype.keys",function(p){return p||function(){return gt(this,function(W){return W})}});var An=this||self;function Ve(p,W){p=p.split(".");var V=An;p[0]in V||typeof V.execScript=="undefined"||V.execScript("var "+p[0]);for(var k;p.length&&(k=p.shift());)p.length||W===void 0?V[k]&&V[k]!==Object.prototype[k]?V=V[k]:V=V[k]={}:V[k]=W}function Nt(p,W){return W=String.fromCharCode.apply(null,W),p==null?W:p+W}var Te,nn=typeof TextDecoder!="undefined",Gn,wn=typeof TextEncoder!="undefined";function Rn(p){if(wn)p=(Gn||(Gn=new TextEncoder)).encode(p);else{var W=void 0;W=W===void 0?!1:W;for(var V=0,k=new Uint8Array(3*p.length),O=0;O<p.length;O++){var lt=p.charCodeAt(O);if(128>lt)k[V++]=lt;else{if(2048>lt)k[V++]=lt>>6|192;else{if(55296<=lt&&57343>=lt){if(56319>=lt&&O<p.length){var P=p.charCodeAt(++O);if(56320<=P&&57343>=P){lt=1024*(lt-55296)+P-56320+65536,k[V++]=lt>>18|240,k[V++]=lt>>12&63|128,k[V++]=lt>>6&63|128,k[V++]=lt&63|128;continue}else O--}if(W)throw Error("Found an unpaired surrogate");lt=65533}k[V++]=lt>>12|224,k[V++]=lt>>6&63|128}k[V++]=lt&63|128}}p=k.subarray(0,V)}return p}var Cn={},an=null;function pn(p,W){W===void 0&&(W=0),je(),W=Cn[W];for(var V=Array(Math.floor(p.length/3)),k=W[64]||"",O=0,lt=0;O<p.length-2;O+=3){var P=p[O],it=p[O+1],bt=p[O+2],xt=W[P>>2];P=W[(P&3)<<4|it>>4],it=W[(it&15)<<2|bt>>6],bt=W[bt&63],V[lt++]=xt+P+it+bt}switch(xt=0,bt=k,p.length-O){case 2:xt=p[O+1],bt=W[(xt&15)<<2]||k;case 1:p=p[O],V[lt]=W[p>>2]+W[(p&3)<<4|xt>>4]+bt+k}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 k=new Uint8Array(V),O=0;return Fn(p,function(lt){k[O++]=lt}),k.subarray(0,O)}function Fn(p,W){function V(bt){for(;k<p.length;){var xt=p.charAt(k++),Ut=an[xt];if(Ut!=null)return Ut;if(!/^[\s\xa0]*$/.test(xt))throw Error("Unknown base64 encoding at char: "+xt)}return bt}je();for(var k=0;;){var O=V(-1),lt=V(0),P=V(64),it=V(64);if(it===64&&O===-1)break;W(O<<2|lt>>4),P!=64&&(W(lt<<4&240|P>>2),it!=64&&W(P<<6&192|it))}}function je(){if(!an){an={};for(var p="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789".split(""),W=["+/=","+/","-_=","-_.","-_"],V=0;5>V;V++){var k=p.concat(W[V].split(""));Cn[V]=k;for(var O=0;O<k.length;O++){var lt=k[O];an[lt]===void 0&&(an[lt]=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 de=0,Se=0;function ze(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&&ee(this,p)}function ee(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}ze.prototype.reset=function(){this.g=this.j};function Xe(p){var W=p.h,V=W[p.g],k=V&127;return 128>V?(p.g+=1,k):(V=W[p.g+1],k|=(V&127)<<7,128>V?(p.g+=2,k):(V=W[p.g+2],k|=(V&127)<<14,128>V?(p.g+=3,k):(V=W[p.g+3],k|=(V&127)<<21,128>V?(p.g+=4,k):(V=W[p.g+4],k|=(V&15)<<28,128>V?(p.g+=5,k>>>0):(p.g+=5,128<=W[p.g++]&&128<=W[p.g++]&&128<=W[p.g++]&&128<=W[p.g++]&&p.g++,k)))))}function rn(p){var W=p.h[p.g],V=p.h[p.g+1],k=p.h[p.g+2],O=p.h[p.g+3];return p.g+=4,V=(W<<0|V<<8|k<<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 Ue=[];function _t(){this.g=new Uint8Array(64),this.h=0}_t.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},_t.prototype.length=function(){return this.h},_t.prototype.end=function(){var p=this.g,W=this.h;return this.h=0,Xn(p,0,W)};function ge(p,W){for(;127<W;)p.push(W&127|128),W>>>=7;p.push(W)}function He(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,Ue.length?(V=Ue.pop(),W&&(V.v=W.v),p&&ee(V,p),p=V):p=new ze(p,W),this.g=p,this.m=this.g.g,this.h=this.i=this.l=-1,this.j=!1}He.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=Xe(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=Xe(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 k=p.g.i,O=Xe(p.g);return O=p.g.g+O,p.g.i=O,V(W,p),p.g.g=O,p.g.i=k,W}function be(p){var W=Xe(p.g);p=p.g;var V=p.g;p.g+=W,p=p.h;var k;if(nn)(k=Te)||(k=Te=new TextDecoder("utf-8",{fatal:!1})),k=k.decode(p.subarray(V,V+W));else{W=V+W;for(var O=[],lt=null,P,it,bt;V<W;)P=p[V++],128>P?O.push(P):224>P?V>=W?O.push(65533):(it=p[V++],194>P||(it&192)!==128?(V--,O.push(65533)):O.push((P&31)<<6|it&63)):240>P?V>=W-1?O.push(65533):(it=p[V++],(it&192)!==128||P===224&&160>it||P===237&&160<=it||((k=p[V++])&192)!==128?(V--,O.push(65533)):O.push((P&15)<<12|(it&63)<<6|k&63)):244>=P?V>=W-2?O.push(65533):(it=p[V++],(it&192)!==128||(P<<28)+(it-144)>>30!==0||((k=p[V++])&192)!==128||((bt=p[V++])&192)!==128?(V--,O.push(65533)):(P=(P&7)<<18|(it&63)<<12|(k&63)<<6|bt&63,P-=65536,O.push((P>>10&1023)+55296,(P&1023)+56320))):O.push(65533),8192<=O.length&&(lt=Nt(lt,O),O.length=0);k=Nt(lt,O)}return k}function Le(){this.h=[],this.i=0,this.g=new _t}function Qe(p,W){W.length!==0&&(p.h.push(W),p.i+=W.length)}function Ge(p){var W=p.i+p.g.length();if(W===0)return new Uint8Array(0);W=new Uint8Array(W);for(var V=p.h,k=V.length,O=0,lt=0;lt<k;lt++){var P=V[lt];P.length!==0&&(W.set(P,O),O+=P.length)}return V=p.g,k=V.h,k!==0&&(W.set(V.g.subarray(0,k),O),V.h=0),p.h=[W],W}function zt(p,W,V){if(V!=null){ge(p.g,8*W+5),p=p.g;var k=V;k=(V=0>k?1:0)?-k:k,k===0?0<1/k?de=Se=0:(Se=0,de=2147483648):isNaN(k)?(Se=0,de=2147483647):34028234663852886e22<k?(Se=0,de=(V<<31|2139095040)>>>0):11754943508222875e-54>k?(k=Math.round(k/Math.pow(2,-149)),Se=0,de=(V<<31|k)>>>0):(W=Math.floor(Math.log(k)/Math.LN2),k*=Math.pow(2,-W),k=Math.round(8388608*k)&8388607,Se=0,de=(V<<31|W+127<<23|k)>>>0),V=de,p.push(V>>>0&255),p.push(V>>>8&255),p.push(V>>>16&255),p.push(V>>>24&255)}}var Be=typeof Uint8Array=="function";function Pe(p,W,V){if(p!=null)return typeof p=="object"?Be&&p instanceof Uint8Array?V(p):Ie(p,W,V):W(p)}function Ie(p,W,V){if(Array.isArray(p)){for(var k=Array(p.length),O=0;O<p.length;O++)k[O]=Pe(p[O],W,V);return Array.isArray(p)&&p.W&&Oe(k),k}k={};for(O in p)k[O]=Pe(p[O],W,V);return k}function Wn(p){return typeof p=="number"?isFinite(p)?p:String(p):p}var on={W:{value:!0,configurable:!0}};function Oe(p){return Array.isArray(p)&&!Object.isFrozen(p)&&Object.defineProperties(p,on),p}var sn;function Ze(p,W,V){var k=sn;sn=null,p||(p=k),k=this.constructor.ca,p||(p=k?[k]:[]),this.j=k?0:-1,this.i=null,this.g=p;t:{if(k=this.g.length,p=k-1,k&&(k=this.g[p],k!==null&&typeof k=="object"&&k.constructor===Object)){this.l=p-this.j,this.h=k;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,(k=this.g[p])?Oe(k):this.g[p]=Ye):(ve(this),(k=this.h[p])?Oe(k):this.h[p]=Ye)}var Ye=Object.freeze(Oe([]));function ve(p){var W=p.l+p.j;p.g[W]||(p.h=p.g[W]={})}function ne(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 _e(p){var W=W===void 0?!1:W,V=ne(p,1,W);return V==null&&(V=Ye),V===Ye&&(V=Oe([]),Pt(p,1,V,W)),V}function qt(p,W,V){return p=ne(p,W),p=p==null?p:+p,p==null?V===void 0?0:V:p}function Pt(p,W,V,k){(k===void 0?0:k)||W>=p.l?(ve(p),p.h[W]=V):p.g[W+p.j]=V}function dn(p,W){p.i||(p.i={});var V=p.i[1];if(!V){var k=_e(p);V=[];for(var O=0;O<k.length;O++)V[O]=new W(k[O]);p.i[1]=V}return V}function he(p,W,V,k){var O=dn(p,V);W=W||new V,p=_e(p),k!=null?(O.splice(k,0,W),p.splice(k,0,Ct(W))):(O.push(W),p.push(Ct(W)))}Ze.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 k=p.i[V];if(Array.isArray(k))for(var O=0;O<k.length;O++)k[O]&&Ct(k[O]);else k&&Ct(k)}return p.g}Ze.prototype.toString=function(){return Ct(this).toString()};function Rt(p,W){return p=ne(p,W),p==null?0:p}function re(p,W){return p=ne(p,W),p==null?"":p}function we(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 ie(p,W){var V=void 0;return new(V||(V=Promise))(function(k,O){function lt(bt){try{it(W.next(bt))}catch(xt){O(xt)}}function P(bt){try{it(W.throw(bt))}catch(xt){O(xt)}}function it(bt){bt.done?k(bt.value):new V(function(xt){xt(bt.value)}).then(lt,P)}it((W=W.apply(p,void 0)).next())})}function et(p){Ze.call(this,p)}ht(et,Ze);function ot(p,W){for(;Mt(W);)switch(W.i){case 8:var V=Xe(W.g);Pt(p,1,V);break;case 21:V=rn(W.g),Pt(p,2,V);break;case 26:V=be(W),Pt(p,3,V);break;case 34:V=be(W),Pt(p,4,V);break;default:if(!te(p,W))return p}return p}function at(p){Ze.call(this,p,-1,Ot)}ht(at,Ze),at.prototype.addClassification=function(p,W){he(this,p,et,W)};var Ot=[1];function ce(p){Ze.call(this,p)}ht(ce,Ze);function le(p,W){for(;Mt(W);)switch(W.i){case 13:var V=rn(W.g);Pt(p,1,V);break;case 21:V=rn(W.g),Pt(p,2,V);break;case 29:V=rn(W.g),Pt(p,3,V);break;case 37:V=rn(W.g),Pt(p,4,V);break;case 45:V=rn(W.g),Pt(p,5,V);break;default:if(!te(p,W))return p}return p}function Tt(p){Ze.call(this,p,-1,fe)}ht(Tt,Ze);var fe=[1];function Ce(p){Ze.call(this,p)}ht(Ce,Ze);function De(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.
|
|
4
4
|
|
|
5
|
-
`+
|
|
5
|
+
`+p.getShaderInfoLog(V));return V}function $e(p){return dn(p,et).map(function(W){return{index:Rt(W,1),Y:qt(W,2),label:ne(W,3)!=null?re(W,3):void 0,displayName:ne(W,4)!=null?re(W,4):void 0}})}function hn(p){return{x:qt(p,1),y:qt(p,2),z:qt(p,3),visibility:ne(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 qe(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(k){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),k(p.i)}))}function qe(p,W){var V=p.g;if(p.m===void 0){var k=De(V,`
|
|
6
6
|
attribute vec2 aVertex;
|
|
7
7
|
attribute vec2 aTex;
|
|
8
8
|
varying vec2 vTex;
|
|
@@ -15,28 +15,28 @@
|
|
|
15
15
|
uniform sampler2D sampler0;
|
|
16
16
|
void main(){
|
|
17
17
|
gl_FragColor = texture2D(sampler0, vTex);
|
|
18
|
-
}`,1),lt=V.createProgram();if(V.attachShader(lt,
|
|
18
|
+
}`,1),lt=V.createProgram();if(V.attachShader(lt,k),V.attachShader(lt,O),V.linkProgram(lt),!V.getProgramParameter(lt,V.LINK_STATUS))throw Error(`Could not compile WebGL program.
|
|
19
19
|
|
|
20
|
-
`+V.getProgramInfoLog(lt));E=m.m=lt,V.useProgram(E),O=V.getUniformLocation(E,"sampler0"),m.j={I:V.getAttribLocation(E,"aVertex"),H:V.getAttribLocation(E,"aTex"),da:O},m.s=V.createBuffer(),V.bindBuffer(V.ARRAY_BUFFER,m.s),V.enableVertexAttribArray(m.j.I),V.vertexAttribPointer(m.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),m.o=V.createBuffer(),V.bindBuffer(V.ARRAY_BUFFER,m.o),V.enableVertexAttribArray(m.j.H),V.vertexAttribPointer(m.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=m.j,V.useProgram(m.m),V.canvas.width=W.width,V.canvas.height=W.height,V.viewport(0,0,W.width,W.height),V.activeTexture(V.TEXTURE0),m.h.bindTexture2d(W.glName),V.enableVertexAttribArray(E.I),V.bindBuffer(V.ARRAY_BUFFER,m.s),V.vertexAttribPointer(E.I,2,V.FLOAT,!1,0,0),V.enableVertexAttribArray(E.H),V.bindBuffer(V.ARRAY_BUFFER,m.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),m.h.bindTexture2d(0)}function jn(m){this.g=m}var tn=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 Ne(m,W){return W+m}function gn(m,W){window[m]=W}function In(m){var W=document.createElement("script");return W.setAttribute("src",m),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 ie(this,function m(){return ae(m,function(W){switch(W.g){case 1:return W.m=2,_(W,WebAssembly.instantiate(tn),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(m){if(this.g=m,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=m&&m.locateFile||Ne,typeof window=="object")var W=window.location.pathname.toString().substring(0,window.location.pathname.toString().lastIndexOf("/"))+"/";else if(typeof location!="undefined")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,m.options){W=T(Object.keys(m.options));for(var V=W.next();!V.done;V=W.next()){V=V.value;var E=m.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 en(m,W){return m.g.files===void 0?[]:typeof m.g.files=="function"?m.g.files(W):m.g.files}function Zn(m){return ie(m,function W(){var V=this,E,O,lt,P,it,bt,xt,Ut,Jt,$t,Et;return ae(W,function(Tt){switch(Tt.g){case 1:return E=V,V.R?(O=en(V,V.j),_(Tt,Ke(),2)):Tt.return();case 2:if(lt=Tt.h,typeof window=="object")return gn("createMediapipeSolutionsWasm",{locateFile:V.locateFile}),gn("createMediapipeSolutionsPackedAssets",{locateFile:V.locateFile}),bt=O.filter(function(kt){return kt.data!==void 0}),xt=O.filter(function(kt){return kt.data===void 0}),Ut=Promise.all(bt.map(function(kt){var Qt=ln(E,kt.url);if(kt.path!==void 0){var ue=kt.path;Qt=Qt.then(function(me){return E.overrideFile(ue,me),Promise.resolve(me)})}return Qt})),Jt=Promise.all(xt.map(function(kt){return kt.simd===void 0||kt.simd&<||!kt.simd&&!lt?In(E.locateFile(kt.url,E.S)):Promise.resolve()})).then(function(){return ie(E,function kt(){var Qt,ue,me=this;return ae(kt,function(ye){if(ye.g==1)return Qt=window.createMediapipeSolutionsWasm,ue=window.createMediapipeSolutionsPackedAssets,_(ye,Qt(ue),2);me.h=ye.h,ye.g=0})})}),$t=function(){return ie(E,function kt(){var Qt=this;return ae(kt,function(ue){return Qt.g.graph&&Qt.g.graph.url?ue=_(ue,ln(Qt,Qt.g.graph.url),0):(ue.g=0,ue=void 0),ue})})}(),_(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 P=O.filter(function(kt){return kt.simd===void 0||kt.simd&<||!kt.simd&&!lt}).map(function(kt){return E.locateFile(kt.url,E.S)}),importScripts.apply(null,k(P)),_(Tt,createMediapipeSolutionsWasm(Module),6);case 6:V.h=Tt.h,V.l=new OffscreenCanvas(1,1),V.h.canvas=V.l,it=V.h.GL.createContext(V.l,{antialias:!1,alpha:!1,ba:typeof WebGL2RenderingContext!="undefined"?2:1}),V.h.GL.makeContextCurrent(it),Tt.g=4;break;case 7:if(V.l=document.createElement("canvas"),Et=V.l.getContext("webgl2",{}),!Et&&(Et=V.l.getContext("webgl",{}),!Et))return alert("Failed to create WebGL canvas context when passing video frame."),Tt.return();V.D=Et,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(m){return ie(m,function W(){var V=this,E,O,lt,P,it,bt,xt,Ut;return ae(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,_(Jt,ln(V,V.g.graph.url),3)}for(Jt.g!=2&&(E=Jt.h,V.i.loadGraph(E)),O=T(Object.keys(V.B)),lt=O.next();!lt.done;lt=O.next())P=lt.value,V.i.overrideFile(P,V.B[P]);if(V.B={},V.g.listeners)for(it=T(V.g.listeners),bt=it.next();!bt.done;bt=it.next())xt=bt.value,Qn(V,xt);Ut=V.j,V.j={},V.setOptions(Ut),Jt.g=0})})}i.reset=function(){return ie(this,function m(){var W=this;return ae(m,function(V){W.i&&(W.i.reset(),W.m={},W.s={}),V.g=0})})},i.setOptions=function(m,W){var V=this;if(W=W||this.g.options){for(var E=[],O=[],lt={},P=T(Object.keys(m)),it=P.next();!it.done;lt={K:lt.K,L:lt.L},it=P.next()){var bt=it.value;bt in this.j&&this.j[bt]===m[bt]||(this.j[bt]=m[bt],it=W[bt],it!==void 0&&(it.onChange&&(lt.K=it.onChange,lt.L=m[bt],E.push(function(xt){return function(){return ie(V,function Ut(){var Jt,$t=this;return ae(Ut,function(Et){if(Et.g==1)return _(Et,xt.K(xt.L),2);Jt=Et.h,Jt===!0&&($t.o=!0),Et.g=0})})}}(lt))),it.graphOptionXref&&(bt={valueNumber:it.type===1?m[bt]:0,valueBoolean:it.type===0?m[bt]:!1,valueString:it.type===2?m[bt]:""},it=Object.assign(Object.assign(Object.assign({},{calculatorName:"",calculatorIndex:0}),it.graphOptionXref),bt),O.push(it))))}(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(m){return ie(m,function W(){var V=this,E,O,lt,P,it,bt,xt;return ae(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 lt=O.value,_(Ut,lt(),4);case 4:O=E.next(),Ut.g=3;break;case 5:V.u=void 0;case 2:if(V.A){for(P=new V.h.GraphOptionChangeRequestList,it=T(V.A),bt=it.next();!bt.done;bt=it.next())xt=bt.value,P.push_back(xt);V.i.changeOptions(P),P.delete(),V.A=void 0}V.o=!1,Ut.g=0}})})}i.initialize=function(){return ie(this,function m(){var W=this;return ae(m,function(V){return V.g==1?_(V,Zn(W),2):V.g!=3?_(V,Sn(W),3):_(V,Kn(W),0)})})};function ln(m,W){return ie(m,function V(){var E=this,O,lt;return ae(V,function(P){return W in E.F?P.return(E.F[W]):(O=E.locateFile(W,""),lt=fetch(O).then(function(it){return it.arrayBuffer()}),E.F[W]=lt,P.return(lt))})})}i.overrideFile=function(m,W){this.i?this.i.overrideFile(m,W):this.B[m]=W},i.clearOverriddenFiles=function(){this.B={},this.i&&this.i.clearOverriddenFiles()},i.send=function(m,W){return ie(this,function V(){var E=this,O,lt,P,it,bt,xt,Ut,Jt,$t;return ae(V,function(Et){switch(Et.g){case 1:return E.g.inputs?(O=1e3*(W==null?performance.now():W),_(Et,E.C,2)):Et.return();case 2:return _(Et,E.initialize(),3);case 3:for(lt=new E.h.PacketDataList,P=T(Object.keys(m)),it=P.next();!it.done;it=P.next())if(bt=it.value,xt=E.g.inputs[bt]){t:{var Tt=E,kt=m[bt];switch(xt.type){case"video":var Qt=Tt.m[xt.stream];if(Qt||(Qt=new pn(Tt.h,Tt.D),Tt.m[xt.stream]=Qt),Tt=Qt,Tt.l===0&&(Tt.l=Tt.h.createTexture()),typeof HTMLVideoElement!="undefined"&&kt instanceof HTMLVideoElement){var ue=kt.videoWidth;Qt=kt.videoHeight}else typeof HTMLImageElement!="undefined"&&kt instanceof HTMLImageElement?(ue=kt.naturalWidth,Qt=kt.naturalHeight):(ue=kt.width,Qt=kt.height);Qt={glName:Tt.l,width:ue,height:Qt},ue=Tt.g,ue.canvas.width=Qt.width,ue.canvas.height=Qt.height,ue.activeTexture(ue.TEXTURE0),Tt.h.bindTexture2d(Tt.l),ue.texImage2D(ue.TEXTURE_2D,0,ue.RGBA,ue.RGBA,ue.UNSIGNED_BYTE,kt),Tt.h.bindTexture2d(0),Tt=Qt;break t;case"detections":for(Qt=Tt.m[xt.stream],Qt||(Qt=new jn(Tt.h),Tt.m[xt.stream]=Qt),Tt=Qt,Tt.data||(Tt.data=new Tt.g.DetectionListData),Tt.data.reset(kt.length),Qt=0;Qt<kt.length;++Qt){ue=kt[Qt];var me=Tt.data,ye=me.setBoundingBox,Je=Qt,h=ue.T,g=new Ce;Pt(g,1,h.Z),Pt(g,2,h.$),Pt(g,3,h.height),Pt(g,4,h.width),Pt(g,5,h.rotation),Pt(g,6,h.X);var G=h=new Te;zt(G,1,ne(g,1)),zt(G,2,ne(g,2)),zt(G,3,ne(g,3)),zt(G,4,ne(g,4)),zt(G,5,ne(g,5));var C=ne(g,6);if(C!=null&&C!=null){ge(G.g,48);var B=G.g,Q=C;C=0>Q,Q=Math.abs(Q);var M=Q>>>0;for(Q=Math.floor((Q-M)/4294967296),Q>>>=0,C&&(Q=~Q>>>0,M=(~M>>>0)+1,4294967295<M&&(M=0,Q++,4294967295<Q&&(Q=0))),de=M,Se=Q,C=de,M=Se;0<M||127<C;)B.push(C&127|128),C=(C>>>7|M<<25)>>>0,M>>>=7;B.push(C)}if(we(g,G),h=Ge(h),ye.call(me,Je,h),ue.O)for(me=0;me<ue.O.length;++me)g=ue.O[me],G=!!g.visibility,ye=Tt.data,Je=ye.addNormalizedLandmark,h=Qt,g=Object.assign(Object.assign({},g),{visibility:G?g.visibility:0}),G=new ce,Pt(G,1,g.x),Pt(G,2,g.y),Pt(G,3,g.z),g.visibility&&Pt(G,4,g.visibility),B=g=new Te,zt(B,1,ne(G,1)),zt(B,2,ne(G,2)),zt(B,3,ne(G,3)),zt(B,4,ne(G,4)),zt(B,5,ne(G,5)),we(G,B),g=Ge(g),Je.call(ye,h,g);if(ue.M)for(me=0;me<ue.M.length;++me){if(ye=Tt.data,Je=ye.addClassification,h=Qt,g=ue.M[me],G=new et,Pt(G,2,g.Y),g.index&&Pt(G,1,g.index),g.label&&Pt(G,3,g.label),g.displayName&&Pt(G,4,g.displayName),B=g=new Te,M=ne(G,1),M!=null&&M!=null)if(ge(B.g,8),C=B.g,0<=M)ge(C,M);else{for(Q=0;9>Q;Q++)C.push(M&127|128),M>>=7;C.push(1)}zt(B,2,ne(G,2)),C=ne(G,3),C!=null&&(C=Rn(C),ge(B.g,26),ge(B.g,C.length),Qe(B,B.g.end()),Qe(B,C)),C=ne(G,4),C!=null&&(C=Rn(C),ge(B.g,34),ge(B.g,C.length),Qe(B,B.g.end()),Qe(B,C)),we(G,B),g=Ge(g),Je.call(ye,h,g)}}Tt=Tt.data;break t;default:Tt={}}}switch(Ut=Tt,Jt=xt.stream,xt.type){case"video":lt.pushTexture2d(Object.assign(Object.assign({},Ut),{stream:Jt,timestamp:O}));break;case"detections":$t=Ut,$t.stream=Jt,$t.timestamp=O,lt.pushDetectionList($t);break;default:throw Error("Unknown input config type: '"+xt.type+"'")}}return E.i.send(lt),_(Et,E.C,4);case 4:lt.delete(),Et.g=0}})})};function Ln(m,W,V){return ie(m,function E(){var O,lt,P,it,bt,xt,Ut=this,Jt,$t,Et,Tt,kt,Qt,ue,me;return ae(E,function(ye){switch(ye.g){case 1:if(!V)return ye.return(W);for(O={},lt=0,P=T(Object.keys(V)),it=P.next();!it.done;it=P.next())bt=it.value,xt=V[bt],typeof xt!="string"&&xt.type==="texture"&&W[xt.stream]!==void 0&&++lt;1<lt&&(Ut.G=!1),Jt=T(Object.keys(V)),it=Jt.next();case 2:if(it.done){ye.g=4;break}if($t=it.value,Et=V[$t],typeof Et=="string")return ue=O,me=$t,_(ye,_n(Ut,$t,W[Et]),14);if(Tt=W[Et.stream],Et.type==="detection_list"){if(Tt){for(var Je=Tt.getRectList(),h=Tt.getLandmarksList(),g=Tt.getClassificationsList(),G=[],C=0;C<Je.size();++C){var B=Je.get(C);t:{var Q=new Ce;for(B=new He(B);Bt(B);)switch(B.i){case 13:var M=rn(B.g);Pt(Q,1,M);break;case 21:M=rn(B.g),Pt(Q,2,M);break;case 29:M=rn(B.g),Pt(Q,3,M);break;case 37:M=rn(B.g),Pt(Q,4,M);break;case 45:M=rn(B.g),Pt(Q,5,M);break;case 48:for(var tt=B.g,ct=128,s=0,X=M=0;4>X&&128<=ct;X++)ct=tt.h[tt.g++],s|=(ct&127)<<7*X;if(128<=ct&&(ct=tt.h[tt.g++],s|=(ct&127)<<28,M|=(ct&127)>>4),128<=ct)for(X=0;5>X&&128<=ct;X++)ct=tt.h[tt.g++],M|=(ct&127)<<7*X+3;128>ct?(tt=s>>>0,ct=M>>>0,(M=ct&2147483648)&&(tt=~tt+1>>>0,ct=~ct>>>0,tt==0&&(ct=ct+1>>>0)),tt=4294967296*ct+(tt>>>0),M=M?-tt:tt):(tt.l=!0,M=void 0),Pt(Q,6,M);break;default:if(!te(Q,B))break t}}Q={Z:qt(Q,1),$:qt(Q,2),height:qt(Q,3),width:qt(Q,4),rotation:qt(Q,5,0),X:Rt(Q,6)},M=h.get(C);t:for(B=new Lt,M=new He(M);Bt(M);)switch(M.i){case 10:tt=jt(M,new ce,le),he(B,tt,ce,void 0);break;default:if(!te(B,M))break t}B=an(B,ce).map(dn),tt=g.get(C);t:for(M=new at,tt=new He(tt);Bt(tt);)switch(tt.i){case 10:M.addClassification(jt(tt,new et,ot));break;default:if(!te(M,tt))break t}Q={T:Q,O:B,M:$e(M)},G.push(Q)}Je=G}else Je=[];O[$t]=Je,ye.g=7;break}if(Et.type==="proto_list"){if(Tt){for(Je=Array(Tt.size()),h=0;h<Tt.size();h++)Je[h]=Tt.get(h);Tt.delete()}else Je=[];O[$t]=Je,ye.g=7;break}if(Tt===void 0){ye.g=3;break}if(Et.type==="float_list"){O[$t]=Tt,ye.g=7;break}if(Et.type==="proto"){O[$t]=Tt,ye.g=7;break}if(Et.type!=="texture")throw Error("Unknown output config type: '"+Et.type+"'");return kt=Ut.s[$t],kt||(kt=new pn(Ut.h,Ut.D),Ut.s[$t]=kt),_(ye,Fe(kt,Tt,Ut.G),13);case 13:Qt=ye.h,O[$t]=Qt;case 7:Et.transform&&O[$t]&&(O[$t]=Et.transform(O[$t])),ye.g=3;break;case 14:ue[me]=ye.h;case 3:it=Jt.next(),ye.g=2;break;case 4:return ye.return(O)}})})}function _n(m,W,V){return ie(m,function E(){var O=this,lt;return ae(E,function(P){return typeof V=="number"||V instanceof Uint8Array||V instanceof O.h.Uint8BlobList?P.return(V):V instanceof O.h.Texture2dDataOut?(lt=O.s[W],lt||(lt=new pn(O.h,O.D),O.s[W]=lt),P.return(Fe(lt,V,O.G))):P.return(void 0)})})}function Qn(m,W){for(var V=W.name||"$",E=[].concat(k(W.wants)),O=new m.h.StringList,lt=T(W.wants),P=lt.next();!P.done;P=lt.next())O.push_back(P.value);lt=m.h.PacketListener.implement({onResults:function(it){for(var bt={},xt=0;xt<W.wants.length;++xt)bt[E[xt]]=it.get(xt);var Ut=m.listeners[V];Ut&&(m.C=Ln(m,bt,W.outs).then(function(Jt){Jt=Ut(Jt);for(var $t=0;$t<W.wants.length;++$t){var Et=bt[E[$t]];typeof Et=="object"&&Et.hasOwnProperty&&Et.hasOwnProperty("delete")&&Et.delete()}Jt&&(m.C=Jt)}))}}),m.i.attachMultiListener(O,lt),O.delete()}i.onResults=function(m,W){this.listeners[W||"$"]=m},Ve("Solution",En),Ve("OptionType",{BOOL:0,NUMBER:1,aa:2,0:"BOOL",1:"NUMBER",2:"STRING"});function Tn(m){switch(m===void 0&&(m=0),m){case 1:return"selfie_segmentation_landscape.tflite";default:return"selfie_segmentation.tflite"}}function Hn(m){var W=this;m=m||{},this.g=new En({locateFile:m.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:Tn(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 ie(W,function E(){var O,lt,P=this,it;return ae(E,function(bt){return bt.g==1?(O=Tn(V),lt="third_party/mediapipe/modules/selfie_segmentation/"+O,_(bt,ln(P.g,O),2)):(it=bt.h,P.g.overrideFile(lt,it),bt.return(!0))})})}}}})}i=Hn.prototype,i.close=function(){return this.g.close(),Promise.resolve()},i.onResults=function(m){this.g.onResults(m)},i.initialize=function(){return ie(this,function m(){var W=this;return ae(m,function(V){return _(V,W.g.initialize(),0)})})},i.reset=function(){this.g.reset()},i.send=function(m){return ie(this,function W(){var V=this;return ae(W,function(E){return _(E,V.g.send(m),0)})})},i.setOptions=function(m){this.g.setOptions(m)},Ve("SelfieSegmentation",Hn),Ve("VERSION","0.1.1632777926")}).call(mi);const pi={};(function(){var i;function n(l){var v=0;return function(){return v<l.length?{done:!1,value:l[v++]}:{done:!0}}}var o=typeof Object.defineProperties=="function"?Object.defineProperty:function(l,v,x){return l==Array.prototype||l==Object.prototype||(l[v]=x.value),l};function p(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 y=p(this);function S(l,v){if(v)t:{var x=y;l=l.split(".");for(var L=0;L<l.length-1;L++){var J=l[L];if(!(J in x))break t;x=x[J]}l=l[l.length-1],L=x[l],v=v(L),v!=L&&v!=null&&o(x,l,{configurable:!0,writable:!0,value:v})}}S("Symbol",function(l){function v(r){if(this instanceof v)throw new TypeError("Symbol is not a constructor");return new x(L+(r||"")+"_"+J++,r)}function x(r,d){this.g=r,o(this,"description",{configurable:!0,writable:!0,value:d})}if(l)return l;x.prototype.toString=function(){return this.g};var L="jscomp_symbol_"+(1e9*Math.random()>>>0)+"_",J=0;return v}),S("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 L=y[v[x]];typeof L=="function"&&typeof L.prototype[l]!="function"&&o(L.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!="undefined"&&Symbol.iterator&&l[Symbol.iterator];return v?v.call(l):{next:n(l)}}function k(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 rt=typeof Object.create=="function"?Object.create:function(l){function v(){}return v.prototype=l,new v},z;if(typeof Object.setPrototypeOf=="function")z=Object.setPrototypeOf;else{var st;t:{var Gt={a:!0},Vt={};try{Vt.__proto__=Gt,st=Vt.a;break t}catch{}st=!1}z=st?function(l,v){if(l.__proto__=v,l.__proto__!==v)throw new TypeError(l+" is not extensible");return l}:null}var dt=z;function ht(l,v){if(l.prototype=rt(v.prototype),l.prototype.constructor=l,dt)dt(l,v);else for(var x in v)if(x!="prototype")if(Object.defineProperties){var L=Object.getOwnPropertyDescriptor(v,x);L&&Object.defineProperty(l,x,L)}else l[x]=v[x];l.ra=v.prototype}function Yt(){this.l=!1,this.i=null,this.h=void 0,this.g=1,this.u=this.o=0,this.j=null}function Ft(l){if(l.l)throw new TypeError("Generator is already running");l.l=!0}Yt.prototype.s=function(l){this.h=l};function Mt(l,v){l.j={fa:v,ga:!0},l.g=l.o||l.u}Yt.prototype.return=function(l){this.j={return:l},this.g=this.u};function _(l,v,x){return l.g=x,{value:v}}function Ae(l){this.g=new Yt,this.h=l}function un(l,v){Ft(l.g);var x=l.g.i;return x?We(l,"return"in x?x.return:function(L){return{value:L,done:!0}},v,l.g.return):(l.g.return(v),Dt(l))}function We(l,v,x,L){try{var J=v.call(l.g.i,x);if(!(J instanceof Object))throw new TypeError("Iterator result "+J+" is not an object");if(!J.done)return l.g.l=!1,J;var r=J.value}catch(d){return l.g.i=null,Mt(l.g,d),Dt(l)}return l.g.i=null,L.call(l.g,r),Dt(l)}function Dt(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,Mt(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 Mn(l){this.next=function(v){return Ft(l.g),l.g.i?v=We(l,l.g.i.next,v,l.g.s):(l.g.s(v),v=Dt(l)),v},this.throw=function(v){return Ft(l.g),l.g.i?v=We(l,l.g.i.throw,v,l.g.s):(Mt(l.g,v),v=Dt(l)),v},this.return=function(v){return un(l,v)},this[Symbol.iterator]=function(){return this}}function ae(l){function v(L){return l.next(L)}function x(L){return l.throw(L)}return new Promise(function(L,J){function r(d){d.done?L(d.value):Promise.resolve(d.value).then(v,x).then(r,J)}r(l.next())})}function gt(l){return ae(new Mn(new Ae(l)))}S("Promise",function(l){function v(d){this.h=0,this.i=void 0,this.g=[],this.s=!1;var Z=this.j();try{d(Z.resolve,Z.reject)}catch(e){Z.reject(e)}}function x(){this.g=null}function L(d){return d instanceof v?d:new v(function(Z){Z(d)})}if(l)return l;x.prototype.h=function(d){if(this.g==null){this.g=[];var Z=this;this.i(function(){Z.l()})}this.g.push(d)};var J=y.setTimeout;x.prototype.i=function(d){J(d,0)},x.prototype.l=function(){for(;this.g&&this.g.length;){var d=this.g;this.g=[];for(var Z=0;Z<d.length;++Z){var e=d[Z];d[Z]=null;try{e()}catch(c){this.j(c)}}}this.g=null},x.prototype.j=function(d){this.i(function(){throw d})},v.prototype.j=function(){function d(c){return function(f){e||(e=!0,c.call(Z,f))}}var Z=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 Z=d!=null;break t;case"function":Z=!0;break t;default:Z=!1}Z?this.A(d):this.o(d)}},v.prototype.A=function(d){var Z=void 0;try{Z=d.then}catch(e){this.l(e);return}typeof Z=="function"?this.I(Z,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,Z){if(this.h!=0)throw Error("Cannot settle("+d+", "+Z+"): Promise already settled in state"+this.h);this.h=d,this.i=Z,this.h===2&&this.G(),this.B()},v.prototype.G=function(){var d=this;J(function(){if(d.C()){var Z=y.console;typeof Z!="undefined"&&Z.error(d.i)}},1)},v.prototype.C=function(){if(this.s)return!1;var d=y.CustomEvent,Z=y.Event,e=y.dispatchEvent;return typeof e=="undefined"?!0:(typeof d=="function"?d=new d("unhandledrejection",{cancelable:!0}):typeof Z=="function"?d=new Z("unhandledrejection",{cancelable:!0}):(d=y.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)r.h(this.g[d]);this.g=null}};var r=new x;return v.prototype.H=function(d){var Z=this.j();d.M(Z.resolve,Z.reject)},v.prototype.I=function(d,Z){var e=this.j();try{d.call(Z,e.resolve,e.reject)}catch(c){e.reject(c)}},v.prototype.then=function(d,Z){function e(u,a){return typeof u=="function"?function(b){try{c(u(b))}catch(I){f(I)}}:a}var c,f,t=new v(function(u,a){c=u,f=a});return this.M(e(d,c),e(Z,f)),t},v.prototype.catch=function(d){return this.then(void 0,d)},v.prototype.M=function(d,Z){function e(){switch(c.h){case 1:d(c.i);break;case 2:Z(c.i);break;default:throw Error("Unexpected state: "+c.h)}}var c=this;this.g==null?r.h(e):this.g.push(e),this.s=!0},v.resolve=L,v.reject=function(d){return new v(function(Z,e){e(d)})},v.race=function(d){return new v(function(Z,e){for(var c=T(d),f=c.next();!f.done;f=c.next())L(f.value).M(Z,e)})},v.all=function(d){var Z=T(d),e=Z.next();return e.done?L([]):new v(function(c,f){function t(b){return function(I){u[b]=I,a--,a==0&&c(u)}}var u=[],a=0;do u.push(void 0),a++,L(e.value).M(t(u.length-1),f),e=Z.next();while(!e.done)})},v});function fn(l,v){l instanceof String&&(l+="");var x=0,L=!1,J={next:function(){if(!L&&x<l.length){var r=x++;return{value:v(r,l[r]),done:!1}}return L=!0,{done:!0,value:void 0}}};return J[Symbol.iterator]=function(){return J},J}var An=typeof Object.assign=="function"?Object.assign:function(l,v){for(var x=1;x<arguments.length;x++){var L=arguments[x];if(L)for(var J in L)Object.prototype.hasOwnProperty.call(L,J)&&(l[J]=L[J])}return l};S("Object.assign",function(l){return l||An}),S("Object.is",function(l){return l||function(v,x){return v===x?v!==0||1/v===1/x:v!==v&&x!==x}}),S("Array.prototype.includes",function(l){return l||function(v,x){var L=this;L instanceof String&&(L=String(L));var J=L.length;for(x=x||0,0>x&&(x=Math.max(x+J,0));x<J;x++){var r=L[x];if(r===v||Object.is(r,v))return!0}return!1}}),S("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}}),S("Array.prototype.keys",function(l){return l||function(){return fn(this,function(v){return v})}});var Ve=this||self;function Nt(l,v){l=l.split(".");var x=Ve;l[0]in x||typeof x.execScript=="undefined"||x.execScript("var "+l[0]);for(var L;l.length&&(L=l.shift());)l.length||v===void 0?x[L]&&x[L]!==Object.prototype[L]?x=x[L]:x=x[L]={}:x[L]=v}function Le(){throw Error("Invalid UTF8")}function nn(l,v){return v=String.fromCharCode.apply(null,v),l==null?v:l+v}var Gn,wn=typeof TextDecoder!="undefined",Rn,Cn=typeof TextEncoder!="undefined",cn={},mn=null;function Jn(l){var v;v===void 0&&(v=0),Be(),v=cn[v];for(var x=Array(Math.floor(l.length/3)),L=v[64]||"",J=0,r=0;J<l.length-2;J+=3){var d=l[J],Z=l[J+1],e=l[J+2],c=v[d>>2];d=v[(d&3)<<4|Z>>4],Z=v[(Z&15)<<2|e>>6],e=v[e&63],x[r++]=c+d+Z+e}switch(c=0,e=L,l.length-J){case 2:c=l[J+1],e=v[(c&15)<<2]||L;case 1:l=l[J],x[r]=v[l>>2]+v[(l&3)<<4|c>>4]+e+L}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 L=new Uint8Array(x),J=0;return je(l,function(r){L[J++]=r}),J!==x?L.subarray(0,J):L}function je(l,v){function x(e){for(;L<l.length;){var c=l.charAt(L++),f=mn[c];if(f!=null)return f;if(!/^[\s\xa0]*$/.test(c))throw Error("Unknown base64 encoding at char: "+c)}return e}Be();for(var L=0;;){var J=x(-1),r=x(0),d=x(64),Z=x(64);if(Z===64&&J===-1)break;v(J<<2|r>>4),d!=64&&(v(r<<4&240|d>>2),Z!=64&&v(d<<6&192|Z))}}function Be(){if(!mn){mn={};for(var l="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789".split(""),v=["+/=","+/","-_=","-_.","-_"],x=0;5>x;x++){var L=l.concat(v[x].split(""));cn[x]=L;for(var J=0;J<L.length;J++){var r=L[J];mn[r]===void 0&&(mn[r]=J)}}}}var xn=typeof Uint8Array=="function";function Xn(l){return xn&&l!=null&&l instanceof Uint8Array}var de;function Se(l){if(this.L=l,l!==null&&l.length===0)throw Error("ByteString should be constructed with non-empty values")}var ze=typeof Uint8Array.prototype.slice=="function",ee=0,Xe=0;function rn(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):de||(de=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 Ue(l,v){return Error("Invalid wire type: "+l+" (at position "+v+")")}function _t(){return Error("Failed to read varint, encoding is invalid.")}function ge(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&&He(this,l)}function He(l,v){l.h=rn(v,l.v),l.j=0,l.i=l.h.length,l.g=l.j}ge.prototype.reset=function(){this.g=this.j};function Bt(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],L=x&127;if(128>x)return l.g+=1,Bt(l),L;if(x=v[l.g+1],L|=(x&127)<<7,128>x)return l.g+=2,Bt(l),L;if(x=v[l.g+2],L|=(x&127)<<14,128>x)return l.g+=3,Bt(l),L;if(x=v[l.g+3],L|=(x&127)<<21,128>x)return l.g+=4,Bt(l),L;if(x=v[l.g+4],l.g+=5,L|=(x&15)<<28,128>x)return Bt(l),L;if(128<=v[l.g++]&&128<=v[l.g++]&&128<=v[l.g++]&&128<=v[l.g++]&&128<=v[l.g++])throw _t();return Bt(l),L}var jt=[];function be(){this.g=[]}be.prototype.length=function(){return this.g.length},be.prototype.end=function(){var l=this.g;return this.g=[],l};function Te(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&&He(x,l),l=x):l=new ge(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 Ge(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 Ue(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 zt(l){switch(l.h){case 0:if(l.h!=0)zt(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,Bt(l);break t}throw _t()}break;case 1:l=l.g,l.g+=8,Bt(l);break;case 2:l.h!=2?zt(l):(v=xe(l.g)>>>0,l=l.g,l.g+=v,Bt(l));break;case 5:l=l.g,l.g+=4,Bt(l);break;case 3:v=l.i;do{if(!Ge(l))throw Error("Unmatched start-group tag: stream EOF");if(l.h==4){if(l.i!=v)throw Error("Unmatched end-group tag");break}zt(l)}while(1);break;default:throw Ue(l.h,l.j)}}var Me=[];function Pe(){this.i=[],this.h=0,this.g=new be}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 on=typeof Symbol=="function"&&typeof Symbol()=="symbol"?Symbol(void 0):void 0;function Oe(l,v){Object.isFrozen(l)||(on?l[on]|=v:l.N!==void 0?l.N|=v:Object.defineProperties(l,{N:{value:v,configurable:!0,writable:!0,enumerable:!1}}))}function sn(l){var v;return on?v=l[on]:v=l.N,v==null?0:v}function Ze(l){return Oe(l,1),l}function Ye(l){return Array.isArray(l)?!!(sn(l)&2):!1}function ve(l){if(!Array.isArray(l))throw Error("cannot mark non-array as immutable");Oe(l,2)}function ne(l){return l!==null&&typeof l=="object"&&!Array.isArray(l)&&l.constructor===Object}var _e=Object.freeze(Ze([]));function qt(l){if(Ye(l.m))throw Error("Cannot mutate an immutable Message")}var Pt=typeof Symbol!="undefined"&&typeof Symbol.hasInstance!="undefined";function an(l){return{value:l,configurable:!1,writable:!1,enumerable:!1}}function he(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,L){L=L===void 0?!1:L,qt(l),v<l.i&&!L?l.m[v+l.h]=x:(l.g||(l.g=l.m[l.i+l.h]={}))[v]=x}function Rt(l,v,x,L){x=x===void 0?!0:x,L=L===void 0?!1:L;var J=he(l,v,L);return J==null&&(J=_e),Ye(l.m)?x&&(ve(J),Object.freeze(J)):(J===_e||Ye(J))&&(J=Ze(J.slice()),Ct(l,v,J,L)),J}function re(l,v,x){return l=he(l,v),l=l==null?l:+l,l==null?x===void 0?0:x:l}function we(l,v,x,L){l.j||(l.j={});var J=Ye(l.m),r=l.j[x];if(!r){L=Rt(l,x,!0,L===void 0?!1:L),r=[],J=J||Ye(L);for(var d=0;d<L.length;d++)r[d]=new v(L[d]),J&&ve(r[d].m);J&&(ve(r),Object.freeze(r)),l.j[x]=r}return r}function te(l,v,x,L,J){var r=r===void 0?!1:r;return qt(l),r=we(l,x,v,r),x=L||new x,l=Rt(l,v),J!=null?(r.splice(J,0,x),l.splice(J,0,x.m)):(r.push(x),l.push(x.m)),x}function ie(l,v){return l=he(l,v),l==null?0:l}function et(l,v){return l=he(l,v),l==null?"":l}function ot(l){switch(typeof l){case"number":return isFinite(l)?l:String(l);case"object":if(l&&!Array.isArray(l)){if(Xn(l))return Jn(l);if(l instanceof Se){var v=l.L;return v=v==null||typeof v=="string"?v:xn&&v instanceof Uint8Array?Jn(v):null,(l.L=v)||""}}}return l}function at(l){var v=le;return v=v===void 0?Lt:v,ce(l,v)}function Ot(l,v){if(l!=null){if(Array.isArray(l))l=ce(l,v);else if(ne(l)){var x={},L;for(L in l)x[L]=Ot(l[L],v);l=x}else l=v(l);return l}}function ce(l,v){for(var x=l.slice(),L=0;L<x.length;L++)x[L]=Ot(x[L],v);return Array.isArray(l)&&sn(l)&1&&Ze(x),x}function le(l){return l&&typeof l=="object"&&l.toJSON?l.toJSON():(l=ot(l),Array.isArray(l)?at(l):l)}function Lt(l){return Xn(l)?new Uint8Array(l):l}function fe(l,v,x){l||(l=Ce),Ce=null;var L=this.constructor.h;l||(l=L?[L]:[]),this.h=(L?0:-1)-(this.constructor.g||0),this.j=void 0,this.m=l;t:{if(L=this.m.length,l=L-1,L&&(L=this.m[l],ne(L))){this.i=l-this.h,this.g=L;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,(L=this.m[l])?Array.isArray(L)&&Ze(L):this.m[l]=_e;else{L=this.g||(this.g=this.m[this.i+this.h]={});var J=L[l];J?Array.isArray(J)&&Ze(J):L[l]=_e}}fe.prototype.toJSON=function(){return at(this.m)},fe.prototype.toString=function(){return this.m.toString()};var Ce;function De(){fe.apply(this,arguments)}if(ht(De,fe),Pt){var $e={};Object.defineProperties(De,($e[Symbol.hasInstance]=an(function(){throw Error("Cannot perform instanceof checks for MutableMessage")}),$e))}function dn(l,v,x){if(x){var L={},J;for(J in x){var r=x[J],d=r.ja;d||(L.F=r.pa||r.ha.P,r.ba?(L.U=In(r.ba),d=function(Z){return function(e,c,f){return Z.F(e,c,f,Z.U)}}(L)):r.da?(L.T=Ke(r.X.g,r.da),d=function(Z){return function(e,c,f){return Z.F(e,c,f,Z.T)}}(L)):d=L.F,r.ja=d),d(v,l,r.X),L={F:L.F,U:L.U,T:L.T}}}Wn(v,l)}var pn=Symbol();function Fe(l,v,x){return l[pn]||(l[pn]=function(L,J){return v(L,J,x)})}function qe(l){var v=l[pn];if(!v){var x=m(l);v=function(L,J){return W(L,J,x)},l[pn]=v}return v}function jn(l){var v=l.ba;if(v)return qe(v);if(v=l.oa)return Fe(l.X.g,v,l.da)}function tn(l){var v=jn(l),x=l.X,L=l.ha.O;return v?function(J,r){return L(J,r,x,v)}:function(J,r){return L(J,r,x)}}function Ne(l,v,x,L,J,r){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 Z=d+1;Z<l.length&&typeof l[Z]!="number";)Z++;var e=l[d++];switch(Z-=d,Z){case 0:L(v,x,e);break;case 1:L(v,x,e,l[d++]);break;case 2:J(v,x,e,l[d++],l[d++]);break;case 3:Z=l[d++];var c=l[d++],f=l[d++];Array.isArray(f)?J(v,x,e,Z,c,f):r(v,x,e,Z,c,f);break;case 4:r(v,x,e,l[d++],l[d++],l[d++],l[d++]);break;default:throw Error("unexpected number of binary field arguments: "+Z)}}return v}var gn=Symbol();function In(l){var v=l[gn];if(!v){var x=ln(l);v=function(L,J){return E(L,J,x)},l[gn]=v}return v}function Ke(l,v){var x=l[gn];return x||(x=function(L,J){return dn(L,J,v)},l[gn]=x),x}var En=Symbol();function en(l,v){l.push(v)}function Zn(l,v,x){l.push(v,x.P)}function Sn(l,v,x,L,J){var r=In(J),d=x.P;l.push(v,function(Z,e,c){return d(Z,e,c,L,r)})}function Kn(l,v,x,L,J,r){var d=Ke(L,r),Z=x.P;l.push(v,function(e,c,f){return Z(e,c,f,L,d)})}function ln(l){var v=l[En];return v||Ne(l,l[En]=[],en,Zn,Sn,Kn)}var Ln=Symbol();function _n(l,v){l[0]=v}function Qn(l,v,x,L){var J=x.O;l[v]=L?function(r,d,Z){return J(r,d,Z,L)}:J}function Tn(l,v,x,L,J,r){var d=x.O,Z=qe(J);l[v]=function(e,c,f){return d(e,c,f,L,Z,r)}}function Hn(l,v,x,L,J,r,d){var Z=x.O,e=Fe(L,J,r);l[v]=function(c,f,t){return Z(c,f,t,L,e,d)}}function m(l){var v=l[Ln];return v||Ne(l,l[Ln]={},_n,Qn,Tn,Hn)}function W(l,v,x){for(;Ge(v)&&v.h!=4;){var L=v.i,J=x[L];if(!J){var r=x[0];r&&(r=r[L])&&(J=x[L]=tn(r))}if((!J||!J(v,l,L))&&(J=v,L=l,r=J.j,zt(J),!J.W)){var d=J.g.h;J=J.g.g,J=r===J?de||(de=new Uint8Array(0)):ze?d.slice(r,J):new Uint8Array(d.subarray(r,J)),(r=L.ca)?r.push(J):L.ca=[J]}}return l}function V(l,v,x){if(Me.length){var L=Me.pop();l&&(He(L.g,l),L.i=-1,L.h=-1),l=L}else l=new Qe(l);try{return W(new v,l,m(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>Me.length&&Me.push(l)}}function E(l,v,x){for(var L=x.length,J=L%2==1,r=J?1:0;r<L;r+=2)(0,x[r+1])(v,l,x[r]);dn(l,v,J?x[0]:void 0)}function O(l,v){var x=new Pe;E(l,x,ln(v)),Ie(x,x.g.end()),l=new Uint8Array(x.h),v=x.i;for(var L=v.length,J=0,r=0;r<L;r++){var d=v[r];l.set(d,J),J+=d.length}return x.i=[l],l}function lt(l,v){return{O:l,P:v}}var P=lt(function(l,v,x){if(l.h!==5)return!1;l=l.g;var L=l.h[l.g],J=l.h[l.g+1],r=l.h[l.g+2],d=l.h[l.g+3];return l.g+=4,Bt(l),J=(L<<0|J<<8|r<<16|d<<24)>>>0,l=2*(J>>31)+1,L=J>>>23&255,J&=8388607,Ct(v,x,L==255?J?NaN:1/0*l:L==0?l*Math.pow(2,-149)*J:l*Math.pow(2,L-150)*(J+Math.pow(2,23))),!0},function(l,v,x){if(v=he(v,x),v!=null){Te(l.g,8*x+5),l=l.g;var L=v;L=(x=0>L?1:0)?-L:L,L===0?0<1/L?ee=Xe=0:(Xe=0,ee=2147483648):isNaN(L)?(Xe=0,ee=2147483647):34028234663852886e22<L?(Xe=0,ee=(x<<31|2139095040)>>>0):11754943508222875e-54>L?(L=Math.round(L/Math.pow(2,-149)),Xe=0,ee=(x<<31|L)>>>0):(v=Math.floor(Math.log(L)/Math.LN2),L*=Math.pow(2,-v),L=Math.round(8388608*L),16777216<=L&&++v,Xe=0,ee=(x<<31|v+127<<23|L&8388607)>>>0),x=ee,l.g.push(x>>>0&255),l.g.push(x>>>8&255),l.g.push(x>>>16&255),l.g.push(x>>>24&255)}}),it=lt(function(l,v,x){if(l.h!==0)return!1;for(var L=l.g,J=128,r=0,d=l=0;4>d&&128<=J;d++)J=L.h[L.g++],Bt(L),r|=(J&127)<<7*d;if(128<=J&&(J=L.h[L.g++],Bt(L),r|=(J&127)<<28,l|=(J&127)>>4),128<=J)for(d=0;5>d&&128<=J;d++)J=L.h[L.g++],Bt(L),l|=(J&127)<<7*d+3;if(128>J)L=r>>>0,J=l>>>0,(l=J&2147483648)&&(L=~L+1>>>0,J=~J>>>0,L==0&&(J=J+1>>>0)),L=4294967296*J+(L>>>0);else throw _t();return Ct(v,x,l?-L:L),!0},function(l,v,x){if(v=he(v,x),v!=null&&v!=null){Te(l.g,8*x),l=l.g;var L=v;for(x=0>L,L=Math.abs(L),v=L>>>0,L=Math.floor((L-v)/4294967296),L>>>=0,x&&(L=~L>>>0,v=(~v>>>0)+1,4294967295<v&&(v=0,L++,4294967295<L&&(L=0))),ee=v,Xe=L,x=ee,v=Xe;0<v||127<x;)l.g.push(x&127|128),x=(x>>>7|v<<25)>>>0,v>>>=7;l.g.push(x)}}),bt=lt(function(l,v,x){return l.h!==0?!1:(Ct(v,x,xe(l.g)),!0)},function(l,v,x){if(v=he(v,x),v!=null&&v!=null)if(Te(l.g,8*x),l=l.g,x=v,0<=x)Te(l,x);else{for(v=0;9>v;v++)l.g.push(x&127|128),x>>=7;l.g.push(1)}}),xt=lt(function(l,v,x){if(l.h!==2)return!1;var L=xe(l.g)>>>0;l=l.g;var J=l.g;l.g+=L,Bt(l),l=l.h;var r;if(wn)(r=Gn)||(r=Gn=new TextDecoder("utf-8",{fatal:!0})),r=r.decode(l.subarray(J,J+L));else{L=J+L;for(var d=[],Z=null,e,c,f;J<L;)e=l[J++],128>e?d.push(e):224>e?J>=L?Le():(c=l[J++],194>e||(c&192)!==128?(J--,Le()):d.push((e&31)<<6|c&63)):240>e?J>=L-1?Le():(c=l[J++],(c&192)!==128||e===224&&160>c||e===237&&160<=c||((r=l[J++])&192)!==128?(J--,Le()):d.push((e&15)<<12|(c&63)<<6|r&63)):244>=e?J>=L-2?Le():(c=l[J++],(c&192)!==128||(e<<28)+(c-144)>>30!==0||((r=l[J++])&192)!==128||((f=l[J++])&192)!==128?(J--,Le()):(e=(e&7)<<18|(c&63)<<12|(r&63)<<6|f&63,e-=65536,d.push((e>>10&1023)+55296,(e&1023)+56320))):Le(),8192<=d.length&&(Z=nn(Z,d),d.length=0);r=nn(Z,d)}return Ct(v,x,r),!0},function(l,v,x){if(v=he(v,x),v!=null){var L=!1;if(L=L===void 0?!1:L,Cn){if(L&&/(?:[^\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 J=0,r=new Uint8Array(3*v.length),d=0;d<v.length;d++){var Z=v.charCodeAt(d);if(128>Z)r[J++]=Z;else{if(2048>Z)r[J++]=Z>>6|192;else{if(55296<=Z&&57343>=Z){if(56319>=Z&&d<v.length){var e=v.charCodeAt(++d);if(56320<=e&&57343>=e){Z=1024*(Z-55296)+e-56320+65536,r[J++]=Z>>18|240,r[J++]=Z>>12&63|128,r[J++]=Z>>6&63|128,r[J++]=Z&63|128;continue}else d--}if(L)throw Error("Found an unpaired surrogate");Z=65533}r[J++]=Z>>12|224,r[J++]=Z>>6&63|128}r[J++]=Z&63|128}}v=r.subarray(0,J)}Te(l.g,8*x+2),Te(l.g,v.length),Ie(l,l.g.end()),Ie(l,v)}}),Ut=lt(function(l,v,x,L,J){if(l.h!==2)return!1;v=te(v,x,L),x=l.g.i,L=xe(l.g)>>>0;var r=l.g.g+L,d=r-x;if(0>=d&&(l.g.i=r,J(v,l),d=r-l.g.g),d)throw Error("Message parsing ended unexpectedly. Expected to read "+(L+" bytes, instead read "+(L-d)+" bytes, either the data ended unexpectedly or the message misreported its own length"));return l.g.g=r,l.g.i=x,!0},function(l,v,x,L,J){if(v=we(v,L,x),v!=null)for(L=0;L<v.length;L++){var r=l;Te(r.g,8*x+2);var d=r.g.end();Ie(r,d),d.push(r.h),r=d,J(v[L],l),d=l;var Z=r.pop();for(Z=d.h+d.g.length()-Z;127<Z;)r.push(Z&127|128),Z>>>=7,d.h++;r.push(Z),d.h++}});function Jt(){De.apply(this,arguments)}if(ht(Jt,De),Pt){var $t={};Object.defineProperties(Jt,($t[Symbol.hasInstance]=an(Object[Symbol.hasInstance]),$t))}function Et(l){Jt.call(this,l)}ht(Et,Jt);function Tt(){return[1,bt,2,P,3,xt,4,xt]}function kt(l){Jt.call(this,l,-1,ue)}ht(kt,Jt),kt.prototype.addClassification=function(l,v){return te(this,1,Et,l,v),this};function Qt(){return[1,Ut,Et,Tt]}var ue=[1];function me(l){Jt.call(this,l)}ht(me,Jt);function ye(){return[1,P,2,P,3,P,4,P,5,P]}function Je(l){Jt.call(this,l,-1,g)}ht(Je,Jt);function h(){return[1,Ut,me,ye]}var g=[1];function G(l){Jt.call(this,l)}ht(G,Jt);function C(){return[1,P,2,P,3,P,4,P,5,P,6,it]}function B(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
|
+
`+V.getProgramInfoLog(lt));k=p.m=lt,V.useProgram(k),O=V.getUniformLocation(k,"sampler0"),p.j={I:V.getAttribLocation(k,"aVertex"),H:V.getAttribLocation(k,"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)}k=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(k.I),V.bindBuffer(V.ARRAY_BUFFER,p.s),V.vertexAttribPointer(k.I,2,V.FLOAT,!1,0,0),V.enableVertexAttribArray(k.H),V.bindBuffer(V.ARRAY_BUFFER,p.o),V.vertexAttribPointer(k.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(k.I),V.disableVertexAttribArray(k.H),V.bindBuffer(V.ARRAY_BUFFER,null),p.h.bindTexture2d(0)}function jn(p){this.g=p}var tn=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 Ne(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 ie(this,function p(){return ae(p,function(W){switch(W.g){case 1:return W.m=2,_(W,WebAssembly.instantiate(tn),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 kn(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||Ne,typeof window=="object")var W=window.location.pathname.toString().substring(0,window.location.pathname.toString().lastIndexOf("/"))+"/";else if(typeof location!="undefined")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=L(Object.keys(p.options));for(var V=W.next();!V.done;V=W.next()){V=V.value;var k=p.options[V].default;k!==void 0&&(this.j[V]=typeof k=="function"?k():k)}}}i=kn.prototype,i.close=function(){return this.i&&this.i.delete(),Promise.resolve()};function en(p,W){return p.g.files===void 0?[]:typeof p.g.files=="function"?p.g.files(W):p.g.files}function Zn(p){return ie(p,function W(){var V=this,k,O,lt,P,it,bt,xt,Ut,Et,$t,kt;return ae(W,function(Lt){switch(Lt.g){case 1:return k=V,V.R?(O=en(V,V.j),_(Lt,Ke(),2)):Lt.return();case 2:if(lt=Lt.h,typeof window=="object")return gn("createMediapipeSolutionsWasm",{locateFile:V.locateFile}),gn("createMediapipeSolutionsPackedAssets",{locateFile:V.locateFile}),bt=O.filter(function(Jt){return Jt.data!==void 0}),xt=O.filter(function(Jt){return Jt.data===void 0}),Ut=Promise.all(bt.map(function(Jt){var Qt=ln(k,Jt.url);if(Jt.path!==void 0){var ue=Jt.path;Qt=Qt.then(function(me){return k.overrideFile(ue,me),Promise.resolve(me)})}return Qt})),Et=Promise.all(xt.map(function(Jt){return Jt.simd===void 0||Jt.simd&<||!Jt.simd&&!lt?In(k.locateFile(Jt.url,k.S)):Promise.resolve()})).then(function(){return ie(k,function Jt(){var Qt,ue,me=this;return ae(Jt,function(ye){if(ye.g==1)return Qt=window.createMediapipeSolutionsWasm,ue=window.createMediapipeSolutionsPackedAssets,_(ye,Qt(ue),2);me.h=ye.h,ye.g=0})})}),$t=function(){return ie(k,function Jt(){var Qt=this;return ae(Jt,function(ue){return Qt.g.graph&&Qt.g.graph.url?ue=_(ue,ln(Qt,Qt.g.graph.url),0):(ue.g=0,ue=void 0),ue})})}(),_(Lt,Promise.all([Et,Ut,$t]),7);if(typeof importScripts!="function")throw Error("solutions can only be loaded on a web page or in a web worker");return P=O.filter(function(Jt){return Jt.simd===void 0||Jt.simd&<||!Jt.simd&&!lt}).map(function(Jt){return k.locateFile(Jt.url,k.S)}),importScripts.apply(null,J(P)),_(Lt,createMediapipeSolutionsWasm(Module),6);case 6:V.h=Lt.h,V.l=new OffscreenCanvas(1,1),V.h.canvas=V.l,it=V.h.GL.createContext(V.l,{antialias:!1,alpha:!1,ba:typeof WebGL2RenderingContext!="undefined"?2:1}),V.h.GL.makeContextCurrent(it),Lt.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."),Lt.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,Lt.g=0}})})}function Sn(p){return ie(p,function W(){var V=this,k,O,lt,P,it,bt,xt,Ut;return ae(W,function(Et){if(Et.g==1){if(V.g.graph&&V.g.graph.url&&V.P===V.g.graph.url)return Et.return();if(V.o=!0,!V.g.graph||!V.g.graph.url){Et.g=2;return}return V.P=V.g.graph.url,_(Et,ln(V,V.g.graph.url),3)}for(Et.g!=2&&(k=Et.h,V.i.loadGraph(k)),O=L(Object.keys(V.B)),lt=O.next();!lt.done;lt=O.next())P=lt.value,V.i.overrideFile(P,V.B[P]);if(V.B={},V.g.listeners)for(it=L(V.g.listeners),bt=it.next();!bt.done;bt=it.next())xt=bt.value,Qn(V,xt);Ut=V.j,V.j={},V.setOptions(Ut),Et.g=0})})}i.reset=function(){return ie(this,function p(){var W=this;return ae(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 k=[],O=[],lt={},P=L(Object.keys(p)),it=P.next();!it.done;lt={K:lt.K,L:lt.L},it=P.next()){var bt=it.value;bt in this.j&&this.j[bt]===p[bt]||(this.j[bt]=p[bt],it=W[bt],it!==void 0&&(it.onChange&&(lt.K=it.onChange,lt.L=p[bt],k.push(function(xt){return function(){return ie(V,function Ut(){var Et,$t=this;return ae(Ut,function(kt){if(kt.g==1)return _(kt,xt.K(xt.L),2);Et=kt.h,Et===!0&&($t.o=!0),kt.g=0})})}}(lt))),it.graphOptionXref&&(bt={valueNumber:it.type===1?p[bt]:0,valueBoolean:it.type===0?p[bt]:!1,valueString:it.type===2?p[bt]:""},it=Object.assign(Object.assign(Object.assign({},{calculatorName:"",calculatorIndex:0}),it.graphOptionXref),bt),O.push(it))))}(k.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(k))}};function Kn(p){return ie(p,function W(){var V=this,k,O,lt,P,it,bt,xt;return ae(W,function(Ut){switch(Ut.g){case 1:if(!V.o)return Ut.return();if(!V.u){Ut.g=2;break}k=L(V.u),O=k.next();case 3:if(O.done){Ut.g=5;break}return lt=O.value,_(Ut,lt(),4);case 4:O=k.next(),Ut.g=3;break;case 5:V.u=void 0;case 2:if(V.A){for(P=new V.h.GraphOptionChangeRequestList,it=L(V.A),bt=it.next();!bt.done;bt=it.next())xt=bt.value,P.push_back(xt);V.i.changeOptions(P),P.delete(),V.A=void 0}V.o=!1,Ut.g=0}})})}i.initialize=function(){return ie(this,function p(){var W=this;return ae(p,function(V){return V.g==1?_(V,Zn(W),2):V.g!=3?_(V,Sn(W),3):_(V,Kn(W),0)})})};function ln(p,W){return ie(p,function V(){var k=this,O,lt;return ae(V,function(P){return W in k.F?P.return(k.F[W]):(O=k.locateFile(W,""),lt=fetch(O).then(function(it){return it.arrayBuffer()}),k.F[W]=lt,P.return(lt))})})}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 ie(this,function V(){var k=this,O,lt,P,it,bt,xt,Ut,Et,$t;return ae(V,function(kt){switch(kt.g){case 1:return k.g.inputs?(O=1e3*(W==null?performance.now():W),_(kt,k.C,2)):kt.return();case 2:return _(kt,k.initialize(),3);case 3:for(lt=new k.h.PacketDataList,P=L(Object.keys(p)),it=P.next();!it.done;it=P.next())if(bt=it.value,xt=k.g.inputs[bt]){t:{var Lt=k,Jt=p[bt];switch(xt.type){case"video":var Qt=Lt.m[xt.stream];if(Qt||(Qt=new bn(Lt.h,Lt.D),Lt.m[xt.stream]=Qt),Lt=Qt,Lt.l===0&&(Lt.l=Lt.h.createTexture()),typeof HTMLVideoElement!="undefined"&&Jt instanceof HTMLVideoElement){var ue=Jt.videoWidth;Qt=Jt.videoHeight}else typeof HTMLImageElement!="undefined"&&Jt instanceof HTMLImageElement?(ue=Jt.naturalWidth,Qt=Jt.naturalHeight):(ue=Jt.width,Qt=Jt.height);Qt={glName:Lt.l,width:ue,height:Qt},ue=Lt.g,ue.canvas.width=Qt.width,ue.canvas.height=Qt.height,ue.activeTexture(ue.TEXTURE0),Lt.h.bindTexture2d(Lt.l),ue.texImage2D(ue.TEXTURE_2D,0,ue.RGBA,ue.RGBA,ue.UNSIGNED_BYTE,Jt),Lt.h.bindTexture2d(0),Lt=Qt;break t;case"detections":for(Qt=Lt.m[xt.stream],Qt||(Qt=new jn(Lt.h),Lt.m[xt.stream]=Qt),Lt=Qt,Lt.data||(Lt.data=new Lt.g.DetectionListData),Lt.data.reset(Jt.length),Qt=0;Qt<Jt.length;++Qt){ue=Jt[Qt];var me=Lt.data,ye=me.setBoundingBox,Ee=Qt,h=ue.T,g=new Ce;Pt(g,1,h.Z),Pt(g,2,h.$),Pt(g,3,h.height),Pt(g,4,h.width),Pt(g,5,h.rotation),Pt(g,6,h.X);var G=h=new Le;zt(G,1,ne(g,1)),zt(G,2,ne(g,2)),zt(G,3,ne(g,3)),zt(G,4,ne(g,4)),zt(G,5,ne(g,5));var C=ne(g,6);if(C!=null&&C!=null){ge(G.g,48);var M=G.g,Q=C;C=0>Q,Q=Math.abs(Q);var B=Q>>>0;for(Q=Math.floor((Q-B)/4294967296),Q>>>=0,C&&(Q=~Q>>>0,B=(~B>>>0)+1,4294967295<B&&(B=0,Q++,4294967295<Q&&(Q=0))),de=B,Se=Q,C=de,B=Se;0<B||127<C;)M.push(C&127|128),C=(C>>>7|B<<25)>>>0,B>>>=7;M.push(C)}if(we(g,G),h=Ge(h),ye.call(me,Ee,h),ue.O)for(me=0;me<ue.O.length;++me)g=ue.O[me],G=!!g.visibility,ye=Lt.data,Ee=ye.addNormalizedLandmark,h=Qt,g=Object.assign(Object.assign({},g),{visibility:G?g.visibility:0}),G=new ce,Pt(G,1,g.x),Pt(G,2,g.y),Pt(G,3,g.z),g.visibility&&Pt(G,4,g.visibility),M=g=new Le,zt(M,1,ne(G,1)),zt(M,2,ne(G,2)),zt(M,3,ne(G,3)),zt(M,4,ne(G,4)),zt(M,5,ne(G,5)),we(G,M),g=Ge(g),Ee.call(ye,h,g);if(ue.M)for(me=0;me<ue.M.length;++me){if(ye=Lt.data,Ee=ye.addClassification,h=Qt,g=ue.M[me],G=new et,Pt(G,2,g.Y),g.index&&Pt(G,1,g.index),g.label&&Pt(G,3,g.label),g.displayName&&Pt(G,4,g.displayName),M=g=new Le,B=ne(G,1),B!=null&&B!=null)if(ge(M.g,8),C=M.g,0<=B)ge(C,B);else{for(Q=0;9>Q;Q++)C.push(B&127|128),B>>=7;C.push(1)}zt(M,2,ne(G,2)),C=ne(G,3),C!=null&&(C=Rn(C),ge(M.g,26),ge(M.g,C.length),Qe(M,M.g.end()),Qe(M,C)),C=ne(G,4),C!=null&&(C=Rn(C),ge(M.g,34),ge(M.g,C.length),Qe(M,M.g.end()),Qe(M,C)),we(G,M),g=Ge(g),Ee.call(ye,h,g)}}Lt=Lt.data;break t;default:Lt={}}}switch(Ut=Lt,Et=xt.stream,xt.type){case"video":lt.pushTexture2d(Object.assign(Object.assign({},Ut),{stream:Et,timestamp:O}));break;case"detections":$t=Ut,$t.stream=Et,$t.timestamp=O,lt.pushDetectionList($t);break;default:throw Error("Unknown input config type: '"+xt.type+"'")}}return k.i.send(lt),_(kt,k.C,4);case 4:lt.delete(),kt.g=0}})})};function Tn(p,W,V){return ie(p,function k(){var O,lt,P,it,bt,xt,Ut=this,Et,$t,kt,Lt,Jt,Qt,ue,me;return ae(k,function(ye){switch(ye.g){case 1:if(!V)return ye.return(W);for(O={},lt=0,P=L(Object.keys(V)),it=P.next();!it.done;it=P.next())bt=it.value,xt=V[bt],typeof xt!="string"&&xt.type==="texture"&&W[xt.stream]!==void 0&&++lt;1<lt&&(Ut.G=!1),Et=L(Object.keys(V)),it=Et.next();case 2:if(it.done){ye.g=4;break}if($t=it.value,kt=V[$t],typeof kt=="string")return ue=O,me=$t,_(ye,_n(Ut,$t,W[kt]),14);if(Lt=W[kt.stream],kt.type==="detection_list"){if(Lt){for(var Ee=Lt.getRectList(),h=Lt.getLandmarksList(),g=Lt.getClassificationsList(),G=[],C=0;C<Ee.size();++C){var M=Ee.get(C);t:{var Q=new Ce;for(M=new He(M);Mt(M);)switch(M.i){case 13:var B=rn(M.g);Pt(Q,1,B);break;case 21:B=rn(M.g),Pt(Q,2,B);break;case 29:B=rn(M.g),Pt(Q,3,B);break;case 37:B=rn(M.g),Pt(Q,4,B);break;case 45:B=rn(M.g),Pt(Q,5,B);break;case 48:for(var tt=M.g,ct=128,s=0,X=B=0;4>X&&128<=ct;X++)ct=tt.h[tt.g++],s|=(ct&127)<<7*X;if(128<=ct&&(ct=tt.h[tt.g++],s|=(ct&127)<<28,B|=(ct&127)>>4),128<=ct)for(X=0;5>X&&128<=ct;X++)ct=tt.h[tt.g++],B|=(ct&127)<<7*X+3;128>ct?(tt=s>>>0,ct=B>>>0,(B=ct&2147483648)&&(tt=~tt+1>>>0,ct=~ct>>>0,tt==0&&(ct=ct+1>>>0)),tt=4294967296*ct+(tt>>>0),B=B?-tt:tt):(tt.l=!0,B=void 0),Pt(Q,6,B);break;default:if(!te(Q,M))break t}}Q={Z:qt(Q,1),$:qt(Q,2),height:qt(Q,3),width:qt(Q,4),rotation:qt(Q,5,0),X:Rt(Q,6)},B=h.get(C);t:for(M=new Tt,B=new He(B);Mt(B);)switch(B.i){case 10:tt=jt(B,new ce,le),he(M,tt,ce,void 0);break;default:if(!te(M,B))break t}M=dn(M,ce).map(hn),tt=g.get(C);t:for(B=new at,tt=new He(tt);Mt(tt);)switch(tt.i){case 10:B.addClassification(jt(tt,new et,ot));break;default:if(!te(B,tt))break t}Q={T:Q,O:M,M:$e(B)},G.push(Q)}Ee=G}else Ee=[];O[$t]=Ee,ye.g=7;break}if(kt.type==="proto_list"){if(Lt){for(Ee=Array(Lt.size()),h=0;h<Lt.size();h++)Ee[h]=Lt.get(h);Lt.delete()}else Ee=[];O[$t]=Ee,ye.g=7;break}if(Lt===void 0){ye.g=3;break}if(kt.type==="float_list"){O[$t]=Lt,ye.g=7;break}if(kt.type==="proto"){O[$t]=Lt,ye.g=7;break}if(kt.type!=="texture")throw Error("Unknown output config type: '"+kt.type+"'");return Jt=Ut.s[$t],Jt||(Jt=new bn(Ut.h,Ut.D),Ut.s[$t]=Jt),_(ye,Fe(Jt,Lt,Ut.G),13);case 13:Qt=ye.h,O[$t]=Qt;case 7:kt.transform&&O[$t]&&(O[$t]=kt.transform(O[$t])),ye.g=3;break;case 14:ue[me]=ye.h;case 3:it=Et.next(),ye.g=2;break;case 4:return ye.return(O)}})})}function _n(p,W,V){return ie(p,function k(){var O=this,lt;return ae(k,function(P){return typeof V=="number"||V instanceof Uint8Array||V instanceof O.h.Uint8BlobList?P.return(V):V instanceof O.h.Texture2dDataOut?(lt=O.s[W],lt||(lt=new bn(O.h,O.D),O.s[W]=lt),P.return(Fe(lt,V,O.G))):P.return(void 0)})})}function Qn(p,W){for(var V=W.name||"$",k=[].concat(J(W.wants)),O=new p.h.StringList,lt=L(W.wants),P=lt.next();!P.done;P=lt.next())O.push_back(P.value);lt=p.h.PacketListener.implement({onResults:function(it){for(var bt={},xt=0;xt<W.wants.length;++xt)bt[k[xt]]=it.get(xt);var Ut=p.listeners[V];Ut&&(p.C=Tn(p,bt,W.outs).then(function(Et){Et=Ut(Et);for(var $t=0;$t<W.wants.length;++$t){var kt=bt[k[$t]];typeof kt=="object"&&kt.hasOwnProperty&&kt.hasOwnProperty("delete")&&kt.delete()}Et&&(p.C=Et)}))}}),p.i.attachMultiListener(O,lt),O.delete()}i.onResults=function(p,W){this.listeners[W||"$"]=p},Ve("Solution",kn),Ve("OptionType",{BOOL:0,NUMBER:1,aa:2,0:"BOOL",1:"NUMBER",2:"STRING"});function Ln(p){switch(p===void 0&&(p=0),p){case 1:return"selfie_segmentation_landscape.tflite";default:return"selfie_segmentation.tflite"}}function Hn(p){var W=this;p=p||{},this.g=new kn({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:Ln(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 ie(W,function k(){var O,lt,P=this,it;return ae(k,function(bt){return bt.g==1?(O=Ln(V),lt="third_party/mediapipe/modules/selfie_segmentation/"+O,_(bt,ln(P.g,O),2)):(it=bt.h,P.g.overrideFile(lt,it),bt.return(!0))})})}}}})}i=Hn.prototype,i.close=function(){return this.g.close(),Promise.resolve()},i.onResults=function(p){this.g.onResults(p)},i.initialize=function(){return ie(this,function p(){var W=this;return ae(p,function(V){return _(V,W.g.initialize(),0)})})},i.reset=function(){this.g.reset()},i.send=function(p){return ie(this,function W(){var V=this;return ae(W,function(k){return _(k,V.g.send(p),0)})})},i.setOptions=function(p){this.g.setOptions(p)},Ve("SelfieSegmentation",Hn),Ve("VERSION","0.1.1632777926")}).call(pi);const bi={};(function(){var i;function n(l){var v=0;return function(){return v<l.length?{done:!1,value:l[v++]}:{done:!0}}}var o=typeof Object.defineProperties=="function"?Object.defineProperty:function(l,v,x){return l==Array.prototype||l==Object.prototype||(l[v]=x.value),l};function m(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 y=m(this);function S(l,v){if(v)t:{var x=y;l=l.split(".");for(var T=0;T<l.length-1;T++){var E=l[T];if(!(E in x))break t;x=x[E]}l=l[l.length-1],T=x[l],v=v(T),v!=T&&v!=null&&o(x,l,{configurable:!0,writable:!0,value:v})}}S("Symbol",function(l){function v(r){if(this instanceof v)throw new TypeError("Symbol is not a constructor");return new x(T+(r||"")+"_"+E++,r)}function x(r,d){this.g=r,o(this,"description",{configurable:!0,writable:!0,value:d})}if(l)return l;x.prototype.toString=function(){return this.g};var T="jscomp_symbol_"+(1e9*Math.random()>>>0)+"_",E=0;return v}),S("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 T=y[v[x]];typeof T=="function"&&typeof T.prototype[l]!="function"&&o(T.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 L(l){var v=typeof Symbol!="undefined"&&Symbol.iterator&&l[Symbol.iterator];return v?v.call(l):{next:n(l)}}function J(l){if(!(l instanceof Array)){l=L(l);for(var v,x=[];!(v=l.next()).done;)x.push(v.value);l=x}return l}var rt=typeof Object.create=="function"?Object.create:function(l){function v(){}return v.prototype=l,new v},z;if(typeof Object.setPrototypeOf=="function")z=Object.setPrototypeOf;else{var st;t:{var Gt={a:!0},Vt={};try{Vt.__proto__=Gt,st=Vt.a;break t}catch{}st=!1}z=st?function(l,v){if(l.__proto__=v,l.__proto__!==v)throw new TypeError(l+" is not extensible");return l}:null}var dt=z;function ht(l,v){if(l.prototype=rt(v.prototype),l.prototype.constructor=l,dt)dt(l,v);else for(var x in v)if(x!="prototype")if(Object.defineProperties){var T=Object.getOwnPropertyDescriptor(v,x);T&&Object.defineProperty(l,x,T)}else l[x]=v[x];l.ra=v.prototype}function Yt(){this.l=!1,this.i=null,this.h=void 0,this.g=1,this.u=this.o=0,this.j=null}function Ft(l){if(l.l)throw new TypeError("Generator is already running");l.l=!0}Yt.prototype.s=function(l){this.h=l};function Bt(l,v){l.j={fa:v,ga:!0},l.g=l.o||l.u}Yt.prototype.return=function(l){this.j={return:l},this.g=this.u};function _(l,v,x){return l.g=x,{value:v}}function Ae(l){this.g=new Yt,this.h=l}function cn(l,v){Ft(l.g);var x=l.g.i;return x?We(l,"return"in x?x.return:function(T){return{value:T,done:!0}},v,l.g.return):(l.g.return(v),Dt(l))}function We(l,v,x,T){try{var E=v.call(l.g.i,x);if(!(E instanceof Object))throw new TypeError("Iterator result "+E+" is not an object");if(!E.done)return l.g.l=!1,E;var r=E.value}catch(d){return l.g.i=null,Bt(l.g,d),Dt(l)}return l.g.i=null,T.call(l.g,r),Dt(l)}function Dt(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,Bt(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 Bn(l){this.next=function(v){return Ft(l.g),l.g.i?v=We(l,l.g.i.next,v,l.g.s):(l.g.s(v),v=Dt(l)),v},this.throw=function(v){return Ft(l.g),l.g.i?v=We(l,l.g.i.throw,v,l.g.s):(Bt(l.g,v),v=Dt(l)),v},this.return=function(v){return cn(l,v)},this[Symbol.iterator]=function(){return this}}function ae(l){function v(T){return l.next(T)}function x(T){return l.throw(T)}return new Promise(function(T,E){function r(d){d.done?T(d.value):Promise.resolve(d.value).then(v,x).then(r,E)}r(l.next())})}function gt(l){return ae(new Bn(new Ae(l)))}S("Promise",function(l){function v(d){this.h=0,this.i=void 0,this.g=[],this.s=!1;var Z=this.j();try{d(Z.resolve,Z.reject)}catch(e){Z.reject(e)}}function x(){this.g=null}function T(d){return d instanceof v?d:new v(function(Z){Z(d)})}if(l)return l;x.prototype.h=function(d){if(this.g==null){this.g=[];var Z=this;this.i(function(){Z.l()})}this.g.push(d)};var E=y.setTimeout;x.prototype.i=function(d){E(d,0)},x.prototype.l=function(){for(;this.g&&this.g.length;){var d=this.g;this.g=[];for(var Z=0;Z<d.length;++Z){var e=d[Z];d[Z]=null;try{e()}catch(c){this.j(c)}}}this.g=null},x.prototype.j=function(d){this.i(function(){throw d})},v.prototype.j=function(){function d(c){return function(f){e||(e=!0,c.call(Z,f))}}var Z=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 Z=d!=null;break t;case"function":Z=!0;break t;default:Z=!1}Z?this.A(d):this.o(d)}},v.prototype.A=function(d){var Z=void 0;try{Z=d.then}catch(e){this.l(e);return}typeof Z=="function"?this.I(Z,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,Z){if(this.h!=0)throw Error("Cannot settle("+d+", "+Z+"): Promise already settled in state"+this.h);this.h=d,this.i=Z,this.h===2&&this.G(),this.B()},v.prototype.G=function(){var d=this;E(function(){if(d.C()){var Z=y.console;typeof Z!="undefined"&&Z.error(d.i)}},1)},v.prototype.C=function(){if(this.s)return!1;var d=y.CustomEvent,Z=y.Event,e=y.dispatchEvent;return typeof e=="undefined"?!0:(typeof d=="function"?d=new d("unhandledrejection",{cancelable:!0}):typeof Z=="function"?d=new Z("unhandledrejection",{cancelable:!0}):(d=y.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)r.h(this.g[d]);this.g=null}};var r=new x;return v.prototype.H=function(d){var Z=this.j();d.M(Z.resolve,Z.reject)},v.prototype.I=function(d,Z){var e=this.j();try{d.call(Z,e.resolve,e.reject)}catch(c){e.reject(c)}},v.prototype.then=function(d,Z){function e(u,a){return typeof u=="function"?function(b){try{c(u(b))}catch(I){f(I)}}:a}var c,f,t=new v(function(u,a){c=u,f=a});return this.M(e(d,c),e(Z,f)),t},v.prototype.catch=function(d){return this.then(void 0,d)},v.prototype.M=function(d,Z){function e(){switch(c.h){case 1:d(c.i);break;case 2:Z(c.i);break;default:throw Error("Unexpected state: "+c.h)}}var c=this;this.g==null?r.h(e):this.g.push(e),this.s=!0},v.resolve=T,v.reject=function(d){return new v(function(Z,e){e(d)})},v.race=function(d){return new v(function(Z,e){for(var c=L(d),f=c.next();!f.done;f=c.next())T(f.value).M(Z,e)})},v.all=function(d){var Z=L(d),e=Z.next();return e.done?T([]):new v(function(c,f){function t(b){return function(I){u[b]=I,a--,a==0&&c(u)}}var u=[],a=0;do u.push(void 0),a++,T(e.value).M(t(u.length-1),f),e=Z.next();while(!e.done)})},v});function mn(l,v){l instanceof String&&(l+="");var x=0,T=!1,E={next:function(){if(!T&&x<l.length){var r=x++;return{value:v(r,l[r]),done:!1}}return T=!0,{done:!0,value:void 0}}};return E[Symbol.iterator]=function(){return E},E}var An=typeof Object.assign=="function"?Object.assign:function(l,v){for(var x=1;x<arguments.length;x++){var T=arguments[x];if(T)for(var E in T)Object.prototype.hasOwnProperty.call(T,E)&&(l[E]=T[E])}return l};S("Object.assign",function(l){return l||An}),S("Object.is",function(l){return l||function(v,x){return v===x?v!==0||1/v===1/x:v!==v&&x!==x}}),S("Array.prototype.includes",function(l){return l||function(v,x){var T=this;T instanceof String&&(T=String(T));var E=T.length;for(x=x||0,0>x&&(x=Math.max(x+E,0));x<E;x++){var r=T[x];if(r===v||Object.is(r,v))return!0}return!1}}),S("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}}),S("Array.prototype.keys",function(l){return l||function(){return mn(this,function(v){return v})}});var Ve=this||self;function Nt(l,v){l=l.split(".");var x=Ve;l[0]in x||typeof x.execScript=="undefined"||x.execScript("var "+l[0]);for(var T;l.length&&(T=l.shift());)l.length||v===void 0?x[T]&&x[T]!==Object.prototype[T]?x=x[T]:x=x[T]={}:x[T]=v}function Te(){throw Error("Invalid UTF8")}function nn(l,v){return v=String.fromCharCode.apply(null,v),l==null?v:l+v}var Gn,wn=typeof TextDecoder!="undefined",Rn,Cn=typeof TextEncoder!="undefined",an={},pn=null;function En(l){var v;v===void 0&&(v=0),Me(),v=an[v];for(var x=Array(Math.floor(l.length/3)),T=v[64]||"",E=0,r=0;E<l.length-2;E+=3){var d=l[E],Z=l[E+1],e=l[E+2],c=v[d>>2];d=v[(d&3)<<4|Z>>4],Z=v[(Z&15)<<2|e>>6],e=v[e&63],x[r++]=c+d+Z+e}switch(c=0,e=T,l.length-E){case 2:c=l[E+1],e=v[(c&15)<<2]||T;case 1:l=l[E],x[r]=v[l>>2]+v[(l&3)<<4|c>>4]+e+T}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 T=new Uint8Array(x),E=0;return je(l,function(r){T[E++]=r}),E!==x?T.subarray(0,E):T}function je(l,v){function x(e){for(;T<l.length;){var c=l.charAt(T++),f=pn[c];if(f!=null)return f;if(!/^[\s\xa0]*$/.test(c))throw Error("Unknown base64 encoding at char: "+c)}return e}Me();for(var T=0;;){var E=x(-1),r=x(0),d=x(64),Z=x(64);if(Z===64&&E===-1)break;v(E<<2|r>>4),d!=64&&(v(r<<4&240|d>>2),Z!=64&&v(d<<6&192|Z))}}function Me(){if(!pn){pn={};for(var l="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789".split(""),v=["+/=","+/","-_=","-_.","-_"],x=0;5>x;x++){var T=l.concat(v[x].split(""));an[x]=T;for(var E=0;E<T.length;E++){var r=T[E];pn[r]===void 0&&(pn[r]=E)}}}}var xn=typeof Uint8Array=="function";function Xn(l){return xn&&l!=null&&l instanceof Uint8Array}var de;function Se(l){if(this.L=l,l!==null&&l.length===0)throw Error("ByteString should be constructed with non-empty values")}var ze=typeof Uint8Array.prototype.slice=="function",ee=0,Xe=0;function rn(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):de||(de=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 Ue(l,v){return Error("Invalid wire type: "+l+" (at position "+v+")")}function _t(){return Error("Failed to read varint, encoding is invalid.")}function ge(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&&He(this,l)}function He(l,v){l.h=rn(v,l.v),l.j=0,l.i=l.h.length,l.g=l.j}ge.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],T=x&127;if(128>x)return l.g+=1,Mt(l),T;if(x=v[l.g+1],T|=(x&127)<<7,128>x)return l.g+=2,Mt(l),T;if(x=v[l.g+2],T|=(x&127)<<14,128>x)return l.g+=3,Mt(l),T;if(x=v[l.g+3],T|=(x&127)<<21,128>x)return l.g+=4,Mt(l),T;if(x=v[l.g+4],l.g+=5,T|=(x&15)<<28,128>x)return Mt(l),T;if(128<=v[l.g++]&&128<=v[l.g++]&&128<=v[l.g++]&&128<=v[l.g++]&&128<=v[l.g++])throw _t();return Mt(l),T}var jt=[];function be(){this.g=[]}be.prototype.length=function(){return this.g.length},be.prototype.end=function(){var l=this.g;return this.g=[],l};function Le(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&&He(x,l),l=x):l=new ge(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 Ge(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 Ue(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 zt(l){switch(l.h){case 0:if(l.h!=0)zt(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 _t()}break;case 1:l=l.g,l.g+=8,Mt(l);break;case 2:l.h!=2?zt(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(!Ge(l))throw Error("Unmatched start-group tag: stream EOF");if(l.h==4){if(l.i!=v)throw Error("Unmatched end-group tag");break}zt(l)}while(1);break;default:throw Ue(l.h,l.j)}}var Be=[];function Pe(){this.i=[],this.h=0,this.g=new be}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 on=typeof Symbol=="function"&&typeof Symbol()=="symbol"?Symbol(void 0):void 0;function Oe(l,v){Object.isFrozen(l)||(on?l[on]|=v:l.N!==void 0?l.N|=v:Object.defineProperties(l,{N:{value:v,configurable:!0,writable:!0,enumerable:!1}}))}function sn(l){var v;return on?v=l[on]:v=l.N,v==null?0:v}function Ze(l){return Oe(l,1),l}function Ye(l){return Array.isArray(l)?!!(sn(l)&2):!1}function ve(l){if(!Array.isArray(l))throw Error("cannot mark non-array as immutable");Oe(l,2)}function ne(l){return l!==null&&typeof l=="object"&&!Array.isArray(l)&&l.constructor===Object}var _e=Object.freeze(Ze([]));function qt(l){if(Ye(l.m))throw Error("Cannot mutate an immutable Message")}var Pt=typeof Symbol!="undefined"&&typeof Symbol.hasInstance!="undefined";function dn(l){return{value:l,configurable:!1,writable:!1,enumerable:!1}}function he(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,T){T=T===void 0?!1:T,qt(l),v<l.i&&!T?l.m[v+l.h]=x:(l.g||(l.g=l.m[l.i+l.h]={}))[v]=x}function Rt(l,v,x,T){x=x===void 0?!0:x,T=T===void 0?!1:T;var E=he(l,v,T);return E==null&&(E=_e),Ye(l.m)?x&&(ve(E),Object.freeze(E)):(E===_e||Ye(E))&&(E=Ze(E.slice()),Ct(l,v,E,T)),E}function re(l,v,x){return l=he(l,v),l=l==null?l:+l,l==null?x===void 0?0:x:l}function we(l,v,x,T){l.j||(l.j={});var E=Ye(l.m),r=l.j[x];if(!r){T=Rt(l,x,!0,T===void 0?!1:T),r=[],E=E||Ye(T);for(var d=0;d<T.length;d++)r[d]=new v(T[d]),E&&ve(r[d].m);E&&(ve(r),Object.freeze(r)),l.j[x]=r}return r}function te(l,v,x,T,E){var r=r===void 0?!1:r;return qt(l),r=we(l,x,v,r),x=T||new x,l=Rt(l,v),E!=null?(r.splice(E,0,x),l.splice(E,0,x.m)):(r.push(x),l.push(x.m)),x}function ie(l,v){return l=he(l,v),l==null?0:l}function et(l,v){return l=he(l,v),l==null?"":l}function ot(l){switch(typeof l){case"number":return isFinite(l)?l:String(l);case"object":if(l&&!Array.isArray(l)){if(Xn(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 at(l){var v=le;return v=v===void 0?Tt:v,ce(l,v)}function Ot(l,v){if(l!=null){if(Array.isArray(l))l=ce(l,v);else if(ne(l)){var x={},T;for(T in l)x[T]=Ot(l[T],v);l=x}else l=v(l);return l}}function ce(l,v){for(var x=l.slice(),T=0;T<x.length;T++)x[T]=Ot(x[T],v);return Array.isArray(l)&&sn(l)&1&&Ze(x),x}function le(l){return l&&typeof l=="object"&&l.toJSON?l.toJSON():(l=ot(l),Array.isArray(l)?at(l):l)}function Tt(l){return Xn(l)?new Uint8Array(l):l}function fe(l,v,x){l||(l=Ce),Ce=null;var T=this.constructor.h;l||(l=T?[T]:[]),this.h=(T?0:-1)-(this.constructor.g||0),this.j=void 0,this.m=l;t:{if(T=this.m.length,l=T-1,T&&(T=this.m[l],ne(T))){this.i=l-this.h,this.g=T;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,(T=this.m[l])?Array.isArray(T)&&Ze(T):this.m[l]=_e;else{T=this.g||(this.g=this.m[this.i+this.h]={});var E=T[l];E?Array.isArray(E)&&Ze(E):T[l]=_e}}fe.prototype.toJSON=function(){return at(this.m)},fe.prototype.toString=function(){return this.m.toString()};var Ce;function De(){fe.apply(this,arguments)}if(ht(De,fe),Pt){var $e={};Object.defineProperties(De,($e[Symbol.hasInstance]=dn(function(){throw Error("Cannot perform instanceof checks for MutableMessage")}),$e))}function hn(l,v,x){if(x){var T={},E;for(E in x){var r=x[E],d=r.ja;d||(T.F=r.pa||r.ha.P,r.ba?(T.U=In(r.ba),d=function(Z){return function(e,c,f){return Z.F(e,c,f,Z.U)}}(T)):r.da?(T.T=Ke(r.X.g,r.da),d=function(Z){return function(e,c,f){return Z.F(e,c,f,Z.T)}}(T)):d=T.F,r.ja=d),d(v,l,r.X),T={F:T.F,U:T.U,T:T.T}}}Wn(v,l)}var bn=Symbol();function Fe(l,v,x){return l[bn]||(l[bn]=function(T,E){return v(T,E,x)})}function qe(l){var v=l[bn];if(!v){var x=p(l);v=function(T,E){return W(T,E,x)},l[bn]=v}return v}function jn(l){var v=l.ba;if(v)return qe(v);if(v=l.oa)return Fe(l.X.g,v,l.da)}function tn(l){var v=jn(l),x=l.X,T=l.ha.O;return v?function(E,r){return T(E,r,x,v)}:function(E,r){return T(E,r,x)}}function Ne(l,v,x,T,E,r){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 Z=d+1;Z<l.length&&typeof l[Z]!="number";)Z++;var e=l[d++];switch(Z-=d,Z){case 0:T(v,x,e);break;case 1:T(v,x,e,l[d++]);break;case 2:E(v,x,e,l[d++],l[d++]);break;case 3:Z=l[d++];var c=l[d++],f=l[d++];Array.isArray(f)?E(v,x,e,Z,c,f):r(v,x,e,Z,c,f);break;case 4:r(v,x,e,l[d++],l[d++],l[d++],l[d++]);break;default:throw Error("unexpected number of binary field arguments: "+Z)}}return v}var gn=Symbol();function In(l){var v=l[gn];if(!v){var x=ln(l);v=function(T,E){return k(T,E,x)},l[gn]=v}return v}function Ke(l,v){var x=l[gn];return x||(x=function(T,E){return hn(T,E,v)},l[gn]=x),x}var kn=Symbol();function en(l,v){l.push(v)}function Zn(l,v,x){l.push(v,x.P)}function Sn(l,v,x,T,E){var r=In(E),d=x.P;l.push(v,function(Z,e,c){return d(Z,e,c,T,r)})}function Kn(l,v,x,T,E,r){var d=Ke(T,r),Z=x.P;l.push(v,function(e,c,f){return Z(e,c,f,T,d)})}function ln(l){var v=l[kn];return v||Ne(l,l[kn]=[],en,Zn,Sn,Kn)}var Tn=Symbol();function _n(l,v){l[0]=v}function Qn(l,v,x,T){var E=x.O;l[v]=T?function(r,d,Z){return E(r,d,Z,T)}:E}function Ln(l,v,x,T,E,r){var d=x.O,Z=qe(E);l[v]=function(e,c,f){return d(e,c,f,T,Z,r)}}function Hn(l,v,x,T,E,r,d){var Z=x.O,e=Fe(T,E,r);l[v]=function(c,f,t){return Z(c,f,t,T,e,d)}}function p(l){var v=l[Tn];return v||Ne(l,l[Tn]={},_n,Qn,Ln,Hn)}function W(l,v,x){for(;Ge(v)&&v.h!=4;){var T=v.i,E=x[T];if(!E){var r=x[0];r&&(r=r[T])&&(E=x[T]=tn(r))}if((!E||!E(v,l,T))&&(E=v,T=l,r=E.j,zt(E),!E.W)){var d=E.g.h;E=E.g.g,E=r===E?de||(de=new Uint8Array(0)):ze?d.slice(r,E):new Uint8Array(d.subarray(r,E)),(r=T.ca)?r.push(E):T.ca=[E]}}return l}function V(l,v,x){if(Be.length){var T=Be.pop();l&&(He(T.g,l),T.i=-1,T.h=-1),l=T}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>Be.length&&Be.push(l)}}function k(l,v,x){for(var T=x.length,E=T%2==1,r=E?1:0;r<T;r+=2)(0,x[r+1])(v,l,x[r]);hn(l,v,E?x[0]:void 0)}function O(l,v){var x=new Pe;k(l,x,ln(v)),Ie(x,x.g.end()),l=new Uint8Array(x.h),v=x.i;for(var T=v.length,E=0,r=0;r<T;r++){var d=v[r];l.set(d,E),E+=d.length}return x.i=[l],l}function lt(l,v){return{O:l,P:v}}var P=lt(function(l,v,x){if(l.h!==5)return!1;l=l.g;var T=l.h[l.g],E=l.h[l.g+1],r=l.h[l.g+2],d=l.h[l.g+3];return l.g+=4,Mt(l),E=(T<<0|E<<8|r<<16|d<<24)>>>0,l=2*(E>>31)+1,T=E>>>23&255,E&=8388607,Ct(v,x,T==255?E?NaN:1/0*l:T==0?l*Math.pow(2,-149)*E:l*Math.pow(2,T-150)*(E+Math.pow(2,23))),!0},function(l,v,x){if(v=he(v,x),v!=null){Le(l.g,8*x+5),l=l.g;var T=v;T=(x=0>T?1:0)?-T:T,T===0?0<1/T?ee=Xe=0:(Xe=0,ee=2147483648):isNaN(T)?(Xe=0,ee=2147483647):34028234663852886e22<T?(Xe=0,ee=(x<<31|2139095040)>>>0):11754943508222875e-54>T?(T=Math.round(T/Math.pow(2,-149)),Xe=0,ee=(x<<31|T)>>>0):(v=Math.floor(Math.log(T)/Math.LN2),T*=Math.pow(2,-v),T=Math.round(8388608*T),16777216<=T&&++v,Xe=0,ee=(x<<31|v+127<<23|T&8388607)>>>0),x=ee,l.g.push(x>>>0&255),l.g.push(x>>>8&255),l.g.push(x>>>16&255),l.g.push(x>>>24&255)}}),it=lt(function(l,v,x){if(l.h!==0)return!1;for(var T=l.g,E=128,r=0,d=l=0;4>d&&128<=E;d++)E=T.h[T.g++],Mt(T),r|=(E&127)<<7*d;if(128<=E&&(E=T.h[T.g++],Mt(T),r|=(E&127)<<28,l|=(E&127)>>4),128<=E)for(d=0;5>d&&128<=E;d++)E=T.h[T.g++],Mt(T),l|=(E&127)<<7*d+3;if(128>E)T=r>>>0,E=l>>>0,(l=E&2147483648)&&(T=~T+1>>>0,E=~E>>>0,T==0&&(E=E+1>>>0)),T=4294967296*E+(T>>>0);else throw _t();return Ct(v,x,l?-T:T),!0},function(l,v,x){if(v=he(v,x),v!=null&&v!=null){Le(l.g,8*x),l=l.g;var T=v;for(x=0>T,T=Math.abs(T),v=T>>>0,T=Math.floor((T-v)/4294967296),T>>>=0,x&&(T=~T>>>0,v=(~v>>>0)+1,4294967295<v&&(v=0,T++,4294967295<T&&(T=0))),ee=v,Xe=T,x=ee,v=Xe;0<v||127<x;)l.g.push(x&127|128),x=(x>>>7|v<<25)>>>0,v>>>=7;l.g.push(x)}}),bt=lt(function(l,v,x){return l.h!==0?!1:(Ct(v,x,xe(l.g)),!0)},function(l,v,x){if(v=he(v,x),v!=null&&v!=null)if(Le(l.g,8*x),l=l.g,x=v,0<=x)Le(l,x);else{for(v=0;9>v;v++)l.g.push(x&127|128),x>>=7;l.g.push(1)}}),xt=lt(function(l,v,x){if(l.h!==2)return!1;var T=xe(l.g)>>>0;l=l.g;var E=l.g;l.g+=T,Mt(l),l=l.h;var r;if(wn)(r=Gn)||(r=Gn=new TextDecoder("utf-8",{fatal:!0})),r=r.decode(l.subarray(E,E+T));else{T=E+T;for(var d=[],Z=null,e,c,f;E<T;)e=l[E++],128>e?d.push(e):224>e?E>=T?Te():(c=l[E++],194>e||(c&192)!==128?(E--,Te()):d.push((e&31)<<6|c&63)):240>e?E>=T-1?Te():(c=l[E++],(c&192)!==128||e===224&&160>c||e===237&&160<=c||((r=l[E++])&192)!==128?(E--,Te()):d.push((e&15)<<12|(c&63)<<6|r&63)):244>=e?E>=T-2?Te():(c=l[E++],(c&192)!==128||(e<<28)+(c-144)>>30!==0||((r=l[E++])&192)!==128||((f=l[E++])&192)!==128?(E--,Te()):(e=(e&7)<<18|(c&63)<<12|(r&63)<<6|f&63,e-=65536,d.push((e>>10&1023)+55296,(e&1023)+56320))):Te(),8192<=d.length&&(Z=nn(Z,d),d.length=0);r=nn(Z,d)}return Ct(v,x,r),!0},function(l,v,x){if(v=he(v,x),v!=null){var T=!1;if(T=T===void 0?!1:T,Cn){if(T&&/(?:[^\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 E=0,r=new Uint8Array(3*v.length),d=0;d<v.length;d++){var Z=v.charCodeAt(d);if(128>Z)r[E++]=Z;else{if(2048>Z)r[E++]=Z>>6|192;else{if(55296<=Z&&57343>=Z){if(56319>=Z&&d<v.length){var e=v.charCodeAt(++d);if(56320<=e&&57343>=e){Z=1024*(Z-55296)+e-56320+65536,r[E++]=Z>>18|240,r[E++]=Z>>12&63|128,r[E++]=Z>>6&63|128,r[E++]=Z&63|128;continue}else d--}if(T)throw Error("Found an unpaired surrogate");Z=65533}r[E++]=Z>>12|224,r[E++]=Z>>6&63|128}r[E++]=Z&63|128}}v=r.subarray(0,E)}Le(l.g,8*x+2),Le(l.g,v.length),Ie(l,l.g.end()),Ie(l,v)}}),Ut=lt(function(l,v,x,T,E){if(l.h!==2)return!1;v=te(v,x,T),x=l.g.i,T=xe(l.g)>>>0;var r=l.g.g+T,d=r-x;if(0>=d&&(l.g.i=r,E(v,l),d=r-l.g.g),d)throw Error("Message parsing ended unexpectedly. Expected to read "+(T+" bytes, instead read "+(T-d)+" bytes, either the data ended unexpectedly or the message misreported its own length"));return l.g.g=r,l.g.i=x,!0},function(l,v,x,T,E){if(v=we(v,T,x),v!=null)for(T=0;T<v.length;T++){var r=l;Le(r.g,8*x+2);var d=r.g.end();Ie(r,d),d.push(r.h),r=d,E(v[T],l),d=l;var Z=r.pop();for(Z=d.h+d.g.length()-Z;127<Z;)r.push(Z&127|128),Z>>>=7,d.h++;r.push(Z),d.h++}});function Et(){De.apply(this,arguments)}if(ht(Et,De),Pt){var $t={};Object.defineProperties(Et,($t[Symbol.hasInstance]=dn(Object[Symbol.hasInstance]),$t))}function kt(l){Et.call(this,l)}ht(kt,Et);function Lt(){return[1,bt,2,P,3,xt,4,xt]}function Jt(l){Et.call(this,l,-1,ue)}ht(Jt,Et),Jt.prototype.addClassification=function(l,v){return te(this,1,kt,l,v),this};function Qt(){return[1,Ut,kt,Lt]}var ue=[1];function me(l){Et.call(this,l)}ht(me,Et);function ye(){return[1,P,2,P,3,P,4,P,5,P]}function Ee(l){Et.call(this,l,-1,g)}ht(Ee,Et);function h(){return[1,Ut,me,ye]}var g=[1];function G(l){Et.call(this,l)}ht(G,Et);function C(){return[1,P,2,P,3,P,4,P,5,P,6,it]}function M(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.
|
|
21
21
|
|
|
22
|
-
`+l.getShaderInfoLog(x));return x}function Q(l){return we(l,
|
|
22
|
+
`+l.getShaderInfoLog(x));return x}function Q(l){return we(l,kt,1).map(function(v){return{index:ie(v,1),score:re(v,2),label:he(v,3)!=null?et(v,3):void 0,displayName:he(v,4)!=null?et(v,4):void 0}})}function B(l){return{x:re(l,1),y:re(l,2),z:re(l,3),visibility:he(l,4)!=null?re(l,4):void 0}}function tt(l){return l.map(function(v){return we(V(v,Ee,h),me,1).map(B)})}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(T){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),T(l.i)}))}function X(l,v){var x=l.g;if(l.o===void 0){var T=M(x,`
|
|
23
23
|
attribute vec2 aVertex;
|
|
24
24
|
attribute vec2 aTex;
|
|
25
25
|
varying vec2 vTex;
|
|
26
26
|
void main(void) {
|
|
27
27
|
gl_Position = vec4(aVertex, 0.0, 1.0);
|
|
28
28
|
vTex = aTex;
|
|
29
|
-
}`,0),
|
|
29
|
+
}`,0),E=M(x,`
|
|
30
30
|
precision mediump float;
|
|
31
31
|
varying vec2 vTex;
|
|
32
32
|
uniform sampler2D sampler0;
|
|
33
33
|
void main(){
|
|
34
34
|
gl_FragColor = texture2D(sampler0, vTex);
|
|
35
|
-
}`,1),r=x.createProgram();if(x.attachShader(r,
|
|
35
|
+
}`,1),r=x.createProgram();if(x.attachShader(r,T),x.attachShader(r,E),x.linkProgram(r),!x.getProgramParameter(r,x.LINK_STATUS))throw Error(`Could not compile WebGL program.
|
|
36
36
|
|
|
37
|
-
`+x.getProgramInfoLog(r));L=l.o=r,x.useProgram(L),J=x.getUniformLocation(L,"sampler0"),l.j={K:x.getAttribLocation(L,"aVertex"),J:x.getAttribLocation(L,"aTex"),qa:J},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(J,0)}L=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(L.K),x.bindBuffer(x.ARRAY_BUFFER,l.u),x.vertexAttribPointer(L.K,2,x.FLOAT,!1,0,0),x.enableVertexAttribArray(L.J),x.bindBuffer(x.ARRAY_BUFFER,l.s),x.vertexAttribPointer(L.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(L.K),x.disableVertexAttribArray(L.J),x.bindBuffer(x.ARRAY_BUFFER,null),l.h.bindTexture2d(0)}function R(l){this.g=l}var Y=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 K(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 gt(function(l){switch(l.g){case 1:return l.o=2,_(l,WebAssembly.instantiate(Y),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 q(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!="undefined")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 L=l.options[x].default;L!==void 0&&(this.j[x]=typeof L=="function"?L():L)}}}i=q.prototype,i.close=function(){return this.i&&this.i.delete(),Promise.resolve()};function yt(l){var v,x,L,J,r,d,Z,e,c,f,t;return gt(function(u){switch(u.g){case 1:return l.$?(v=l.g.files===void 0?[]:typeof l.g.files=="function"?l.g.files(l.j):l.g.files,_(u,nt(),2)):u.return();case 2:if(x=u.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}),Z=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 I=a.path;b=b.then(function(w){return l.overrideFile(I,w),Promise.resolve(w)})}return b})),c=Promise.all(Z.map(function(a){return a.simd===void 0||a.simd&&x||!a.simd&&!x?K(l.locateFile(a.url,l.aa)):Promise.resolve()})).then(function(){var a,b,I;return gt(function(w){if(w.g==1)return a=window.createMediapipeSolutionsWasm,b=window.createMediapipeSolutionsPackedAssets,I=l,_(w,a(b),2);I.h=w.h,w.g=0})}),f=function(){return gt(function(a){return l.g.graph&&l.g.graph.url?a=_(a,It(l,l.g.graph.url),0):(a.g=0,a=void 0),a})}(),_(u,Promise.all([c,e,f]),7);if(typeof importScripts!="function")throw Error("solutions can only be loaded on a web page or in a web worker");return L=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,k(L)),J=l,_(u,createMediapipeSolutionsWasm(Module),6);case 6:J.h=u.h,l.l=new OffscreenCanvas(1,1),l.h.canvas=l.l,r=l.h.GL.createContext(l.l,{antialias:!1,alpha:!1,na:typeof WebGL2RenderingContext!="undefined"?2:1}),l.h.GL.makeContextCurrent(r),u.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."),u.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,u.g=0}})}function Xt(l){var v,x,L,J,r,d,Z,e;return gt(function(c){if(c.g==1){if(l.g.graph&&l.g.graph.url&&l.Z===l.g.graph.url)return c.return();if(l.s=!0,!l.g.graph||!l.g.graph.url){c.g=2;return}return l.Z=l.g.graph.url,_(c,It(l,l.g.graph.url),3)}for(c.g!=2&&(v=c.h,l.i.loadGraph(v)),x=T(Object.keys(l.C)),L=x.next();!L.done;L=x.next())J=L.value,l.i.overrideFile(J,l.C[J]);if(l.C={},l.g.listeners)for(r=T(l.g.listeners),d=r.next();!d.done;d=r.next())Z=d.value,St(l,Z);e=l.j,l.j={},l.setOptions(e),c.g=0})}i.reset=function(){var l=this;return gt(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 L=[],J=[],r={},d=T(Object.keys(l)),Z=d.next();!Z.done;r={R:r.R,S:r.S},Z=d.next()){var e=Z.value;e in this.j&&this.j[e]===l[e]||(this.j[e]=l[e],Z=v[e],Z!==void 0&&(Z.onChange&&(r.R=Z.onChange,r.S=l[e],L.push(function(c){return function(){var f;return gt(function(t){if(t.g==1)return _(t,c.R(c.S),2);f=t.h,f===!0&&(x.s=!0),t.g=0})}}(r))),Z.graphOptionXref&&(e={valueNumber:Z.type===1?l[e]:0,valueBoolean:Z.type===0?l[e]:!1,valueString:Z.type===2?l[e]:""},Z=Object.assign(Object.assign(Object.assign({},{calculatorName:"",calculatorIndex:0}),Z.graphOptionXref),e),J.push(Z))))}(L.length!==0||J.length!==0)&&(this.s=!0,this.B=(this.B===void 0?[]:this.B).concat(J),this.A=(this.A===void 0?[]:this.A).concat(L))}};function Kt(l){var v,x,L,J,r,d,Z;return gt(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 L=x.value,_(e,L(),4);case 4:x=v.next(),e.g=3;break;case 5:l.A=void 0;case 2:if(l.B){for(J=new l.h.GraphOptionChangeRequestList,r=T(l.B),d=r.next();!d.done;d=r.next())Z=d.value,J.push_back(Z);l.i.changeOptions(J),J.delete(),l.B=void 0}l.s=!1,e.g=0}})}i.initialize=function(){var l=this;return gt(function(v){return v.g==1?_(v,yt(l),2):v.g!=3?_(v,Xt(l),3):_(v,Kt(l),0)})};function It(l,v){var x,L;return gt(function(J){return v in l.H?J.return(l.H[v]):(x=l.locateFile(v,""),L=fetch(x).then(function(r){return r.arrayBuffer()}),l.H[v]=L,J.return(L))})}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,L,J,r,d,Z,e,c,f,t;return gt(function(u){switch(u.g){case 1:return x.g.inputs?(L=1e3*(v==null?performance.now():v),_(u,x.D,2)):u.return();case 2:return _(u,x.initialize(),3);case 3:for(J=new x.h.PacketDataList,r=T(Object.keys(l)),d=r.next();!d.done;d=r.next())if(Z=d.value,e=x.g.inputs[Z]){t:{var a=l[Z];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!="undefined"&&a instanceof HTMLVideoElement)var I=a.videoWidth,w=a.videoHeight;else typeof HTMLImageElement!="undefined"&&a instanceof HTMLImageElement?(I=a.naturalWidth,w=a.naturalHeight):(I=a.width,w=a.height);w={glName:b.l,width:I,height:w},I=b.g,I.canvas.width=w.width,I.canvas.height=w.height,I.activeTexture(I.TEXTURE0),b.h.bindTexture2d(b.l),I.texImage2D(I.TEXTURE_2D,0,I.RGBA,I.RGBA,I.UNSIGNED_BYTE,a),b.h.bindTexture2d(0),b=w;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),w=0;w<a.length;++w){I=a[w];var H=b.data,U=H.setBoundingBox,j=w,D=I.ea,$=new G;if(Ct($,1,D.ka),Ct($,2,D.la),Ct($,3,D.height),Ct($,4,D.width),Ct($,5,D.rotation),Ct($,6,D.ia),D=O($,C),U.call(H,j,D),I.Y)for(H=0;H<I.Y.length;++H){$=I.Y[H];var ut=!!$.visibility;U=b.data,j=U.addNormalizedLandmark,D=w,$=Object.assign(Object.assign({},$),{visibility:ut?$.visibility:0}),ut=new me,Ct(ut,1,$.x),Ct(ut,2,$.y),Ct(ut,3,$.z),$.visibility&&Ct(ut,4,$.visibility),$=O(ut,ye),j.call(U,D,$)}if(I.V)for(H=0;H<I.V.length;++H)U=b.data,j=U.addClassification,D=w,$=I.V[H],ut=new Et,Ct(ut,2,$.score),$.index&&Ct(ut,1,$.index),$.label&&Ct(ut,3,$.label),$.displayName&&Ct(ut,4,$.displayName),$=O(ut,Tt),j.call(U,D,$)}b=b.data;break t;default:b={}}}switch(c=b,f=e.stream,e.type){case"video":J.pushTexture2d(Object.assign(Object.assign({},c),{stream:f,timestamp:L}));break;case"detections":t=c,t.stream=f,t.timestamp=L,J.pushDetectionList(t);break;default:throw Error("Unknown input config type: '"+e.type+"'")}}return x.i.send(J),_(u,x.D,4);case 4:J.delete(),u.g=0}})};function ft(l,v,x){var L,J,r,d,Z,e,c,f,t,u,a,b,I,w;return gt(function(H){switch(H.g){case 1:if(!x)return H.return(v);for(L={},J=0,r=T(Object.keys(x)),d=r.next();!d.done;d=r.next())Z=d.value,e=x[Z],typeof e!="string"&&e.type==="texture"&&v[e.stream]!==void 0&&++J;1<J&&(l.I=!1),c=T(Object.keys(x)),d=c.next();case 2:if(d.done){H.g=4;break}if(f=d.value,t=x[f],typeof t=="string")return I=L,w=f,_(H,Wt(l,f,v[t]),14);if(u=v[t.stream],t.type==="detection_list"){if(u){for(var U=u.getRectList(),j=u.getLandmarksList(),D=u.getClassificationsList(),$=[],ut=0;ut<U.size();++ut){var mt=V(U.get(ut),G,C);mt={ea:{ka:re(mt,1),la:re(mt,2),height:re(mt,3),width:re(mt,4),rotation:re(mt,5,0),ia:ie(mt,6)},Y:we(V(j.get(ut),Je,h),me,1).map(M),V:Q(V(D.get(ut),kt,Qt))},$.push(mt)}U=$}else U=[];L[f]=U,H.g=7;break}if(t.type==="proto_list"){if(u){for(U=Array(u.size()),j=0;j<u.size();j++)U[j]=u.get(j);u.delete()}else U=[];L[f]=U,H.g=7;break}if(u===void 0){H.g=3;break}if(t.type==="float_list"){L[f]=u,H.g=7;break}if(t.type==="proto"){L[f]=u,H.g=7;break}if(t.type!=="texture")throw Error("Unknown output config type: '"+t.type+"'");return a=l.u[f],a||(a=new ct(l.h,l.G),l.u[f]=a),_(H,s(a,u,l.I),13);case 13:b=H.h,L[f]=b;case 7:t.transform&&L[f]&&(L[f]=t.transform(L[f])),H.g=3;break;case 14:I[w]=H.h;case 3:d=c.next(),H.g=2;break;case 4:return H.return(L)}})}function Wt(l,v,x){var L;return gt(function(J){return typeof x=="number"||x instanceof Uint8Array||x instanceof l.h.Uint8BlobList?J.return(x):x instanceof l.h.Texture2dDataOut?(L=l.u[v],L||(L=new ct(l.h,l.G),l.u[v]=L),J.return(s(L,x,l.I))):J.return(void 0)})}function St(l,v){for(var x=v.name||"$",L=[].concat(k(v.wants)),J=new l.h.StringList,r=T(v.wants),d=r.next();!d.done;d=r.next())J.push_back(d.value);r=l.h.PacketListener.implement({onResults:function(Z){for(var e={},c=0;c<v.wants.length;++c)e[L[c]]=Z.get(c);var f=l.listeners[x];f&&(l.D=ft(l,e,v.outs).then(function(t){t=f(t);for(var u=0;u<v.wants.length;++u){var a=e[L[u]];typeof a=="object"&&a.hasOwnProperty&&a.hasOwnProperty("delete")&&a.delete()}t&&(l.D=t)}))}}),l.i.attachMultiListener(J,r),J.delete()}i.onResults=function(l,v){this.listeners[v||"$"]=l},Nt("Solution",q),Nt("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 q({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:tt},multiHandWorldLandmarks:{type:"proto_list",stream:"multi_hand_world_landmarks",transform:tt},multiHandedness:{type:"proto_list",stream:"multi_handedness",transform:function(x){return x.map(function(L){return Q(V(L,kt,Qt))[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 L,J,r;return gt(function(d){return d.g==1?(L=wt(x),J="third_party/mediapipe/modules/hand_landmark/"+L,_(d,It(v.g,L),2)):(r=d.h,v.g.overrideFile(J,r),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 gt(function(v){return _(v,l.g.initialize(),0)})},i.reset=function(){this.g.reset()},i.send=function(l){var v=this;return gt(function(x){return _(x,v.g.send(l),0)})},i.setOptions=function(l){this.g.setOptions(l)},Nt("Hands",Ht),Nt("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]]),Nt("VERSION","0.4.1646424915")}).call(pi);var bi={};(function(){var i;function n(e){var c=0;return function(){return c<e.length?{done:!1,value:e[c++]}:{done:!0}}}var o=typeof Object.defineProperties=="function"?Object.defineProperty:function(e,c,f){return e==Array.prototype||e==Object.prototype||(e[c]=f.value),e};function p(e){e=[typeof globalThis=="object"&&globalThis,e,typeof window=="object"&&window,typeof self=="object"&&self,typeof global=="object"&&global];for(var c=0;c<e.length;++c){var f=e[c];if(f&&f.Math==Math)return f}throw Error("Cannot find global object")}var y=p(this);function S(e,c){if(c)t:{var f=y;e=e.split(".");for(var t=0;t<e.length-1;t++){var u=e[t];if(!(u in f))break t;f=f[u]}e=e[e.length-1],t=f[e],c=c(t),c!=t&&c!=null&&o(f,e,{configurable:!0,writable:!0,value:c})}}S("Symbol",function(e){function c(a){if(this instanceof c)throw new TypeError("Symbol is not a constructor");return new f(t+(a||"")+"_"+u++,a)}function f(a,b){this.g=a,o(this,"description",{configurable:!0,writable:!0,value:b})}if(e)return e;f.prototype.toString=function(){return this.g};var t="jscomp_symbol_"+(1e9*Math.random()>>>0)+"_",u=0;return c}),S("Symbol.iterator",function(e){if(e)return e;e=Symbol("Symbol.iterator");for(var c="Array Int8Array Uint8Array Uint8ClampedArray Int16Array Uint16Array Int32Array Uint32Array Float32Array Float64Array".split(" "),f=0;f<c.length;f++){var t=y[c[f]];typeof t=="function"&&typeof t.prototype[e]!="function"&&o(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 c=typeof Symbol!="undefined"&&Symbol.iterator&&e[Symbol.iterator];return c?c.call(e):{next:n(e)}}function k(e){if(!(e instanceof Array)){e=T(e);for(var c,f=[];!(c=e.next()).done;)f.push(c.value);e=f}return e}var rt=typeof Object.create=="function"?Object.create:function(e){function c(){}return c.prototype=e,new c},z;if(typeof Object.setPrototypeOf=="function")z=Object.setPrototypeOf;else{var st;t:{var Gt={a:!0},Vt={};try{Vt.__proto__=Gt,st=Vt.a;break t}catch{}st=!1}z=st?function(e,c){if(e.__proto__=c,e.__proto__!==c)throw new TypeError(e+" is not extensible");return e}:null}var dt=z;function ht(e,c){if(e.prototype=rt(c.prototype),e.prototype.constructor=e,dt)dt(e,c);else for(var f in c)if(f!="prototype")if(Object.defineProperties){var t=Object.getOwnPropertyDescriptor(c,f);t&&Object.defineProperty(e,f,t)}else e[f]=c[f];e.da=c.prototype}function Yt(){this.l=!1,this.i=null,this.h=void 0,this.g=1,this.s=this.m=0,this.j=null}function Ft(e){if(e.l)throw new TypeError("Generator is already running");e.l=!0}Yt.prototype.o=function(e){this.h=e};function Mt(e,c){e.j={U:c,V:!0},e.g=e.m||e.s}Yt.prototype.return=function(e){this.j={return:e},this.g=this.s};function _(e,c,f){return e.g=f,{value:c}}function Ae(e){this.g=new Yt,this.h=e}function un(e,c){Ft(e.g);var f=e.g.i;return f?We(e,"return"in f?f.return:function(t){return{value:t,done:!0}},c,e.g.return):(e.g.return(c),Dt(e))}function We(e,c,f,t){try{var u=c.call(e.g.i,f);if(!(u instanceof Object))throw new TypeError("Iterator result "+u+" is not an object");if(!u.done)return e.g.l=!1,u;var a=u.value}catch(b){return e.g.i=null,Mt(e.g,b),Dt(e)}return e.g.i=null,t.call(e.g,a),Dt(e)}function Dt(e){for(;e.g.g;)try{var c=e.h(e.g);if(c)return e.g.l=!1,{value:c.value,done:!1}}catch(f){e.g.h=void 0,Mt(e.g,f)}if(e.g.l=!1,e.g.j){if(c=e.g.j,e.g.j=null,c.V)throw c.U;return{value:c.return,done:!0}}return{value:void 0,done:!0}}function Mn(e){this.next=function(c){return Ft(e.g),e.g.i?c=We(e,e.g.i.next,c,e.g.o):(e.g.o(c),c=Dt(e)),c},this.throw=function(c){return Ft(e.g),e.g.i?c=We(e,e.g.i.throw,c,e.g.o):(Mt(e.g,c),c=Dt(e)),c},this.return=function(c){return un(e,c)},this[Symbol.iterator]=function(){return this}}function ae(e){function c(t){return e.next(t)}function f(t){return e.throw(t)}return new Promise(function(t,u){function a(b){b.done?t(b.value):Promise.resolve(b.value).then(c,f).then(a,u)}a(e.next())})}function gt(e){return ae(new Mn(new Ae(e)))}S("Promise",function(e){function c(b){this.h=0,this.i=void 0,this.g=[],this.o=!1;var I=this.j();try{b(I.resolve,I.reject)}catch(w){I.reject(w)}}function f(){this.g=null}function t(b){return b instanceof c?b:new c(function(I){I(b)})}if(e)return e;f.prototype.h=function(b){if(this.g==null){this.g=[];var I=this;this.i(function(){I.l()})}this.g.push(b)};var u=y.setTimeout;f.prototype.i=function(b){u(b,0)},f.prototype.l=function(){for(;this.g&&this.g.length;){var b=this.g;this.g=[];for(var I=0;I<b.length;++I){var w=b[I];b[I]=null;try{w()}catch(H){this.j(H)}}}this.g=null},f.prototype.j=function(b){this.i(function(){throw b})},c.prototype.j=function(){function b(H){return function(U){w||(w=!0,H.call(I,U))}}var I=this,w=!1;return{resolve:b(this.C),reject:b(this.l)}},c.prototype.C=function(b){if(b===this)this.l(new TypeError("A Promise cannot resolve to itself"));else if(b instanceof c)this.F(b);else{t:switch(typeof b){case"object":var I=b!=null;break t;case"function":I=!0;break t;default:I=!1}I?this.v(b):this.m(b)}},c.prototype.v=function(b){var I=void 0;try{I=b.then}catch(w){this.l(w);return}typeof I=="function"?this.G(I,b):this.m(b)},c.prototype.l=function(b){this.s(2,b)},c.prototype.m=function(b){this.s(1,b)},c.prototype.s=function(b,I){if(this.h!=0)throw Error("Cannot settle("+b+", "+I+"): Promise already settled in state"+this.h);this.h=b,this.i=I,this.h===2&&this.D(),this.A()},c.prototype.D=function(){var b=this;u(function(){if(b.B()){var I=y.console;typeof I!="undefined"&&I.error(b.i)}},1)},c.prototype.B=function(){if(this.o)return!1;var b=y.CustomEvent,I=y.Event,w=y.dispatchEvent;return typeof w=="undefined"?!0:(typeof b=="function"?b=new b("unhandledrejection",{cancelable:!0}):typeof I=="function"?b=new I("unhandledrejection",{cancelable:!0}):(b=y.document.createEvent("CustomEvent"),b.initCustomEvent("unhandledrejection",!1,!0,b)),b.promise=this,b.reason=this.i,w(b))},c.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 f;return c.prototype.F=function(b){var I=this.j();b.J(I.resolve,I.reject)},c.prototype.G=function(b,I){var w=this.j();try{b.call(I,w.resolve,w.reject)}catch(H){w.reject(H)}},c.prototype.then=function(b,I){function w(D,$){return typeof D=="function"?function(ut){try{H(D(ut))}catch(mt){U(mt)}}:$}var H,U,j=new c(function(D,$){H=D,U=$});return this.J(w(b,H),w(I,U)),j},c.prototype.catch=function(b){return this.then(void 0,b)},c.prototype.J=function(b,I){function w(){switch(H.h){case 1:b(H.i);break;case 2:I(H.i);break;default:throw Error("Unexpected state: "+H.h)}}var H=this;this.g==null?a.h(w):this.g.push(w),this.o=!0},c.resolve=t,c.reject=function(b){return new c(function(I,w){w(b)})},c.race=function(b){return new c(function(I,w){for(var H=T(b),U=H.next();!U.done;U=H.next())t(U.value).J(I,w)})},c.all=function(b){var I=T(b),w=I.next();return w.done?t([]):new c(function(H,U){function j(ut){return function(mt){D[ut]=mt,$--,$==0&&H(D)}}var D=[],$=0;do D.push(void 0),$++,t(w.value).J(j(D.length-1),U),w=I.next();while(!w.done)})},c});function fn(e,c){e instanceof String&&(e+="");var f=0,t=!1,u={next:function(){if(!t&&f<e.length){var a=f++;return{value:c(a,e[a]),done:!1}}return t=!0,{done:!0,value:void 0}}};return u[Symbol.iterator]=function(){return u},u}var An=typeof Object.assign=="function"?Object.assign:function(e,c){for(var f=1;f<arguments.length;f++){var t=arguments[f];if(t)for(var u in t)Object.prototype.hasOwnProperty.call(t,u)&&(e[u]=t[u])}return e};S("Object.assign",function(e){return e||An}),S("Object.is",function(e){return e||function(c,f){return c===f?c!==0||1/c===1/f:c!==c&&f!==f}}),S("Array.prototype.includes",function(e){return e||function(c,f){var t=this;t instanceof String&&(t=String(t));var u=t.length;for(f=f||0,0>f&&(f=Math.max(f+u,0));f<u;f++){var a=t[f];if(a===c||Object.is(a,c))return!0}return!1}}),S("String.prototype.includes",function(e){return e||function(c,f){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,f||0)!==-1}}),S("Array.prototype.keys",function(e){return e||function(){return fn(this,function(c){return c})}});var Ve=this||self;function Nt(e,c){e=e.split(".");var f=Ve;e[0]in f||typeof f.execScript=="undefined"||f.execScript("var "+e[0]);for(var t;e.length&&(t=e.shift());)e.length||c===void 0?f[t]&&f[t]!==Object.prototype[t]?f=f[t]:f=f[t]={}:f[t]=c}function Le(e){Ve.setTimeout(function(){throw e},0)}function nn(e){Le(e)}function Gn(e,c){nn(Error("Invalid wire type: "+e+" (at position "+c+")"))}function wn(){nn(Error("Failed to read varint, encoding is invalid."))}function Rn(e,c){return c=String.fromCharCode.apply(null,c),e==null?c:e+c}var Cn,cn=typeof TextDecoder!="undefined",mn,Jn=typeof TextEncoder!="undefined";function Fn(e){if(Jn)e=(mn||(mn=new TextEncoder)).encode(e);else{var c=void 0;c=c===void 0?!1:c;for(var f=0,t=new Uint8Array(3*e.length),u=0;u<e.length;u++){var a=e.charCodeAt(u);if(128>a)t[f++]=a;else{if(2048>a)t[f++]=a>>6|192;else{if(55296<=a&&57343>=a){if(56319>=a&&u<e.length){var b=e.charCodeAt(++u);if(56320<=b&&57343>=b){a=1024*(a-55296)+b-56320+65536,t[f++]=a>>18|240,t[f++]=a>>12&63|128,t[f++]=a>>6&63|128,t[f++]=a&63|128;continue}else u--}if(c)throw Error("Found an unpaired surrogate");a=65533}t[f++]=a>>12|224,t[f++]=a>>6&63|128}t[f++]=a&63|128}}e=t.subarray(0,f)}return e}var je={},Be=null;function xn(e){var c;c===void 0&&(c=0),Se(),c=je[c];for(var f=Array(Math.floor(e.length/3)),t=c[64]||"",u=0,a=0;u<e.length-2;u+=3){var b=e[u],I=e[u+1],w=e[u+2],H=c[b>>2];b=c[(b&3)<<4|I>>4],I=c[(I&15)<<2|w>>6],w=c[w&63],f[a++]=H+b+I+w}switch(H=0,w=t,e.length-u){case 2:H=e[u+1],w=c[(H&15)<<2]||t;case 1:e=e[u],f[a]=c[e>>2]+c[(e&3)<<4|H>>4]+w+t}return f.join("")}function Xn(e){var c=e.length,f=3*c/4;f%3?f=Math.floor(f):"=.".indexOf(e[c-1])!=-1&&(f="=.".indexOf(e[c-2])!=-1?f-2:f-1);var t=new Uint8Array(f),u=0;return de(e,function(a){t[u++]=a}),t.subarray(0,u)}function de(e,c){function f(w){for(;t<e.length;){var H=e.charAt(t++),U=Be[H];if(U!=null)return U;if(!/^[\s\xa0]*$/.test(H))throw Error("Unknown base64 encoding at char: "+H)}return w}Se();for(var t=0;;){var u=f(-1),a=f(0),b=f(64),I=f(64);if(I===64&&u===-1)break;c(u<<2|a>>4),b!=64&&(c(a<<4&240|b>>2),I!=64&&c(b<<6&192|I))}}function Se(){if(!Be){Be={};for(var e="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789".split(""),c=["+/=","+/","-_=","-_.","-_"],f=0;5>f;f++){var t=e.concat(c[f].split(""));je[f]=t;for(var u=0;u<t.length;u++){var a=t[u];Be[a]===void 0&&(Be[a]=u)}}}}var ze=typeof Uint8Array=="function",ee;function Xe(e){if(this.g=e,e!==null&&e.length===0)throw Error("ByteString should be constructed with non-empty values")}Xe.prototype.toJSON=function(){if(this.g==null)var e="";else e=this.g,e=this.g=e==null||typeof e=="string"?e:ze&&e instanceof Uint8Array?xn(e):null;return e};var rn=typeof Uint8Array.prototype.slice=="function";function Ue(e,c,f){return c===f?ee||(ee=new Uint8Array(0)):rn?e.slice(c,f):new Uint8Array(e.subarray(c,f))}var _t=0,ge=0;function He(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===Xe){if(e.g==null)var c=ee||(ee=new Uint8Array(0));else{c=Uint8Array;var f=e.g;f=f==null||ze&&f!=null&&f instanceof Uint8Array?f:typeof f=="string"?Xn(f):null,e=e.g=f,c=new c(e)}return c}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 Bt(e,c){c=c===void 0?{}:c,c=c.u===void 0?!1:c.u,this.h=null,this.g=this.i=this.m=0,this.l=!1,this.u=c,e&&xe(this,e)}function xe(e,c){e.h=He(c),e.m=0,e.i=e.h.length,e.g=e.m}Bt.prototype.reset=function(){this.g=this.m};function jt(e){for(var c=128,f=0,t=0,u=0;4>u&&128<=c;u++)c=e.h[e.g++],f|=(c&127)<<7*u;if(128<=c&&(c=e.h[e.g++],f|=(c&127)<<28,t|=(c&127)>>4),128<=c)for(u=0;5>u&&128<=c;u++)c=e.h[e.g++],t|=(c&127)<<7*u+3;if(128>c)return e=f>>>0,c=t>>>0,(t=c&2147483648)&&(e=~e+1>>>0,c=~c>>>0,e==0&&(c=c+1>>>0)),e=4294967296*c+(e>>>0),t?-e:e;e.l=!0,wn()}function be(e){e.g>e.i&&(e.l=!0,nn(Error("Tried to read past the end of the data "+e.g+" > "+e.i)))}Bt.prototype.j=function(){var e=this.h,c=e[this.g],f=c&127;return 128>c?(this.g+=1,be(this),f):(c=e[this.g+1],f|=(c&127)<<7,128>c?(this.g+=2,be(this),f):(c=e[this.g+2],f|=(c&127)<<14,128>c?(this.g+=3,be(this),f):(c=e[this.g+3],f|=(c&127)<<21,128>c?(this.g+=4,be(this),f):(c=e[this.g+4],f|=(c&15)<<28,128>c?(this.g+=5,be(this),f>>>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,wn(),f):(be(this),f))))))},Bt.prototype.o=function(){var e=this.h[this.g],c=this.h[this.g+1],f=this.h[this.g+2],t=this.h[this.g+3];return this.g+=4,be(this),f=(e<<0|c<<8|f<<16|t<<24)>>>0,e=2*(f>>31)+1,c=f>>>23&255,f&=8388607,c==255?f?NaN:1/0*e:c==0?e*Math.pow(2,-149)*f:e*Math.pow(2,c-150)*(f+Math.pow(2,23))};var Te=[];function Qe(){this.g=new Uint8Array(64),this.h=0}function Ge(e,c){if(!(e.h+1<e.g.length)){var f=e.g;e.g=new Uint8Array(Math.ceil(1+2*e.g.length)),e.g.set(f)}e.g[e.h++]=c}Qe.prototype.length=function(){return this.h},Qe.prototype.end=function(){var e=this.g,c=this.h;return this.h=0,Ue(e,0,c)};function zt(e,c){for(;127<c;)Ge(e,c&127|128),c>>>=7;Ge(e,c)}function Me(e){var c={},f=c.N===void 0?!1:c.N;this.m={u:c.u===void 0?!1:c.u},this.N=f,c=this.m,Te.length?(f=Te.pop(),c&&(f.u=c.u),e&&xe(f,e),e=f):e=new Bt(e,c),this.g=e,this.l=this.g.g,this.h=this.i=-1,this.j=!1}Me.prototype.reset=function(){this.g.reset(),this.h=this.i=-1};function Pe(e){var c=e.g;if((c=c.g==c.i)||(c=e.j)||(c=e.g,c=c.l||0>c.g||c.g>c.i),c)return!1;e.l=e.g.g;var f=e.g.j();return c=f>>>3,f&=7,0<=f&&5>=f?(e.i=c,e.h=f,!0):(e.j=!0,Gn(f,e.l),!1)}function Ie(e){switch(e.h){case 0:if(e.h!=0)Ie(e);else t:{e=e.g;for(var c=e.g,f=0;10>f;f++){if((e.h[c]&128)===0){e.g=c+1,be(e);break t}c++}e.l=!0,wn()}break;case 1:e=e.g,e.g+=8,be(e);break;case 2:e.h!=2?Ie(e):(c=e.g.j(),e=e.g,e.g+=c,be(e));break;case 5:e=e.g,e.g+=4,be(e);break;case 3:c=e.i;do{if(!Pe(e)){e.j=!0,nn(Error("Unmatched start-group tag: stream EOF"));break}if(e.h==4){e.i!=c&&(e.j=!0,nn(Error("Unmatched end-group tag")));break}Ie(e)}while(1);break;default:e.j=!0,Gn(e.h,e.l)}}function Wn(e,c,f){e.N||(e=Ue(e.g.h,f,e.g.g),(f=c.o)?f.push(e):c.o=[e])}function on(e,c,f){var t=e.g.i,u=e.g.j(),a=e.g.g+u;if(e.g.i=a,f(c,e),f=a-e.g.g,f!==0)throw Error("Message parsing ended unexpectedly. Expected to read "+(u+" bytes, instead read "+(u-f)+" bytes, either the data ended unexpectedly or the message misreported its own length"));return e.g.g=a,e.g.i=t,c}function Oe(e,c,f){var t=e.g.j();for(t=e.g.g+t;e.g.g<t;)f.push(c.call(e.g))}var sn=[];function Ze(){this.h=[],this.i=0,this.g=new Qe}function Ye(e,c){c.length!==0&&(e.h.push(c),e.i+=c.length)}function ve(e,c,f){zt(e.g,8*c+2),zt(e.g,f.length),Ye(e,e.g.end()),Ye(e,f)}var ne=typeof Symbol=="function"&&typeof Symbol()=="symbol"?Symbol(void 0):void 0;function _e(e,c){Object.isFrozen(e)||(ne?e[ne]|=c:e.g!==void 0?e.g|=c:Object.defineProperties(e,{g:{value:c,configurable:!0,writable:!0,enumerable:!1}}))}function qt(e){if(!e)return 0;var c;return ne?c=e[ne]:c=e.g,c==null?0:c}function Pt(e){return Array.isArray(e)&&_e(e,1),e}function an(e){if(!Array.isArray(e))throw Error("cannot mark non-array as immutable");_e(e,2)}function he(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 ze&&e!=null&&e instanceof Uint8Array?xn(e):e;default:return e}}function Rt(e,c){if(e!=null)return Array.isArray(e)||he(e)?re(e,c):c(e)}function re(e,c){if(Array.isArray(e)){for(var f=Array(e.length),t=0;t<e.length;t++)f[t]=Rt(e[t],c);return qt(e)&1&&Pt(f),f}f={};for(t in e)f[t]=Rt(e[t],c);return f}var we;function te(e,c,f){var t=we;we=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],he(t))){this.l=e-this.j,this.i=t;break t}c!==void 0&&-1<c?(this.l=Math.max(c,e+1-this.j),this.i=null):this.l=Number.MAX_VALUE}if(f)for(c=0;c<f.length;c++)e=f[c],e<this.l?(e+=this.j,(t=this.h[e])?Pt(t):this.h[e]=ie):(et(this),(t=this.i[e])?Pt(t):this.i[e]=ie)}var ie=Object.freeze(Pt([]));function et(e){var c=e.l+e.j;e.h[c]||(e.i=e.h[c]={})}function ot(e,c,f){return c===-1?null:(f===void 0?0:f)||c>=e.l?e.i?e.i[c]:void 0:e.h[c+e.j]}function at(e,c,f){f=f===void 0?!0:f;var t=t===void 0?!1:t,u=ot(e,c,t);return u==null&&(u=ie),u===ie?(u=Pt([]),Lt(e,c,u,t)):f&&Array.isArray(u)&&qt(u)&2&&(u=u.slice(),Lt(e,c,u,t)),u}function Ot(e){var c=at(e,3,!1);if(e.m||(e.m={}),!e.m[3]){for(var f=0;f<c.length;f++)c[f]=+c[f];e.m[3]=!0}return c}function ce(e,c,f){return e=ot(e,c),e==null?f:e}function le(e,c,f){return e=ot(e,c),e=e==null?e:+e,e==null?f===void 0?0:f:e}function Lt(e,c,f,t){(t===void 0?0:t)||c>=e.l?(et(e),e.i[c]=f):e.h[c+e.j]=f}function fe(e,c,f){if(f===-1)return null;e.g||(e.g={});var t=e.g[f];if(t)return t;var u=ot(e,f,!1);return u==null?t:(c=new c(u),e.g[f]=c)}function Ce(e,c,f){e.g||(e.g={});var t=e.g[f];if(!t){var u=at(e,f,!1);t=[];for(var a=Array.isArray(u)?!!(qt(u)&2):!1,b=0;b<u.length;b++)t[b]=new c(u[b]),a&&an(t[b].h);a&&(an(t),Object.freeze(t)),e.g[f]=t}return t}function De(e,c,f,t,u){var a=Ce(e,t,c);f=f||new t,e=at(e,c),u!=null?(a.splice(u,0,f),e.splice(u,0,$e(f))):(a.push(f),e.push($e(f)))}te.prototype.toJSON=function(){var e=$e(this);return re(e,Ct)};function $e(e){if(e.g)for(var c in e.g){var f=e.g[c];if(Array.isArray(f))for(var t=0;t<f.length;t++)f[t]&&$e(f[t]);else f&&$e(f)}return e.h}te.prototype.toString=function(){return $e(this).toString()};function dn(e,c){if(e=e.o){Ye(c,c.g.end());for(var f=0;f<e.length;f++)Ye(c,e[f])}}function pn(e){var c=e[0];switch(e.length){case 2:var f=e[1];return function(w,H,U){return c(w,H,U,f)};case 3:var t=e[1],u=e[2];return function(w,H,U){return c(w,H,U,t,u)};case 4:var a=e[1],b=e[2],I=e[3];return function(w,H,U){return c(w,H,U,a,b,I)};default:throw Error("unsupported number of parameters, expected [2-4], got "+e.length)}}function Fe(e,c,f){for(;Pe(c)&&c.h!=4;){var t=c.i,u=f[t];if(u){if(Array.isArray(u)&&(u=f[t]=pn(u)),!u(c,e,t)){t=c,u=e;var a=t.l;Ie(t),Wn(t,u,a)}}else t=c,u=e,a=t.l,Ie(t),Wn(t,u,a)}return e}function qe(e,c){var f=new Ze;if(c(e,f),e=f.i+f.g.length(),e===0)f=new Uint8Array(0);else{e=new Uint8Array(e);for(var t=f.h,u=t.length,a=c=0;a<u;a++){var b=t[a];b.length!==0&&(e.set(b,c),c+=b.length)}t=f.g,u=t.h,u!==0&&(e.set(t.g.subarray(0,u),c),t.h=0),f.h=[e],f=e}return f}function jn(e,c,f){if(sn.length){var t=sn.pop();e&&(xe(t.g,e),t.i=-1,t.h=-1),e=t}else e=new Me(e);try{return f(new c,e)}finally{c=e.g,c.h=null,c.m=0,c.i=0,c.g=0,c.l=!1,c.u=!1,e.i=-1,e.h=-1,e.j=!1,100>sn.length&&sn.push(e)}}function tn(e,c,f){if(c=ot(c,f),c!=null){zt(e.g,8*f+5),e=e.g;var t=c;t=(f=0>t?1:0)?-t:t,t===0?0<1/t?_t=ge=0:(ge=0,_t=2147483648):isNaN(t)?(ge=0,_t=2147483647):34028234663852886e22<t?(ge=0,_t=(f<<31|2139095040)>>>0):11754943508222875e-54>t?(t=Math.round(t/Math.pow(2,-149)),ge=0,_t=(f<<31|t)>>>0):(c=Math.floor(Math.log(t)/Math.LN2),t*=Math.pow(2,-c),t=Math.round(8388608*t),16777216<=t&&++c,ge=0,_t=(f<<31|c+127<<23|t&8388607)>>>0),f=_t,Ge(e,f>>>0&255),Ge(e,f>>>8&255),Ge(e,f>>>16&255),Ge(e,f>>>24&255)}}function Ne(e,c,f){return e.h!==5?!1:(Lt(c,f,e.g.o()),!0)}function gn(e,c,f){return e.h!==5&&e.h!==2?!1:(c=at(c,f),e.h==2?Oe(e,Bt.prototype.o,c):c.push(e.g.o()),!0)}function In(e,c,f){return e.h!==0?!1:(Lt(c,f,jt(e.g)),!0)}function Ke(e,c,f){return e.h!==0?!1:(Lt(c,f,e.g.j()),!0)}function En(e,c,f){if(e.h!==2)return!1;var t=e.g.j();e=e.g;var u=e.g;e.g+=t,be(e),e=e.h;var a;if(cn)(a=Cn)||(a=Cn=new TextDecoder("utf-8",{fatal:!1})),a=a.decode(e.subarray(u,u+t));else{t=u+t;for(var b=[],I=null,w,H,U;u<t;)w=e[u++],128>w?b.push(w):224>w?u>=t?b.push(65533):(H=e[u++],194>w||(H&192)!==128?(u--,b.push(65533)):b.push((w&31)<<6|H&63)):240>w?u>=t-1?b.push(65533):(H=e[u++],(H&192)!==128||w===224&&160>H||w===237&&160<=H||((a=e[u++])&192)!==128?(u--,b.push(65533)):b.push((w&15)<<12|(H&63)<<6|a&63)):244>=w?u>=t-2?b.push(65533):(H=e[u++],(H&192)!==128||(w<<28)+(H-144)>>30!==0||((a=e[u++])&192)!==128||((U=e[u++])&192)!==128?(u--,b.push(65533)):(w=(w&7)<<18|(H&63)<<12|(a&63)<<6|U&63,w-=65536,b.push((w>>10&1023)+55296,(w&1023)+56320))):b.push(65533),8192<=b.length&&(I=Rn(I,b),b.length=0);a=Rn(I,b)}return Lt(c,f,a),!0}function en(e,c,f,t,u){if(e.h!==2)return!1;e=on(e,new t,u);var a=a===void 0?!1:a;return c.g||(c.g={}),t=e&&$e(e),c.g[f]=e,Lt(c,f,t,a),!0}function Zn(e,c,f,t,u){return e.h!==2?!1:(e=on(e,new t,u),De(c,f,e,t,void 0),!0)}function Sn(e,c,f){return e.h!==0&&e.h!==2?!1:(c=at(c,f),e.h==2?Oe(e,Bt.prototype.j,c):c.push(e.g.j()),!0)}function Kn(e,c,f){return e.h!==0?!1:(Lt(c,f,jt(e.g)),!0)}function ln(e){te.call(this,e,-1,Qn)}var Ln;ht(ln,te),ln.prototype.getRows=function(){return ot(this,1)},ln.prototype.getCols=function(){return ot(this,2)},ln.prototype.getPackedDataList=function(){return Ot(this)},ln.prototype.getLayout=function(){return ce(this,4,0)};function _n(e,c){return Fe(e,c,Ln||(Ln={1:Ke,2:Ke,3:gn,4:Kn}))}var Qn=[3];function Tn(e){te.call(this,e)}var Hn;ht(Tn,te);function m(e,c){var f=ot(e,1);if(f!=null&&f!=null){zt(c.g,8);var t=c.g;if(0<=f)zt(t,f);else{for(var u=0;9>u;u++)Ge(t,f&127|128),f>>=7;Ge(t,1)}}tn(c,e,2),t=ot(e,3),t!=null&&ve(c,3,Fn(t)),t=ot(e,4),t!=null&&ve(c,4,Fn(t)),dn(e,c)}function W(e,c){return Fe(e,c,Hn||(Hn={1:Ke,2:Ne,3:En,4:En}))}function V(e){te.call(this,e,-1,lt)}var E;ht(V,te),V.prototype.addClassification=function(e,c){return De(this,1,e,Tn,c),this};function O(e,c){return Fe(e,c,E||(E={1:[Zn,Tn,W]}))}var lt=[1];function P(e){te.call(this,e)}var it;ht(P,te);function bt(e,c){tn(c,e,1),tn(c,e,2),tn(c,e,3),tn(c,e,4),tn(c,e,5),dn(e,c)}function xt(e,c){return Fe(e,c,it||(it={1:Ne,2:Ne,3:Ne,4:Ne,5:Ne}))}function Ut(e){te.call(this,e,-1,Et)}var Jt;ht(Ut,te);function $t(e,c){return Fe(e,c,Jt||(Jt={1:[Zn,P,xt]}))}var Et=[1];function Tt(e){te.call(this,e)}var kt;ht(Tt,te);function Qt(e,c){tn(c,e,1),tn(c,e,2),tn(c,e,3),tn(c,e,4),tn(c,e,5);var f=ot(e,6);if(f!=null&&f!=null){zt(c.g,48);var t=c.g,u=f;f=0>u,u=Math.abs(u);var a=u>>>0;for(u=Math.floor((u-a)/4294967296),u>>>=0,f&&(u=~u>>>0,a=(~a>>>0)+1,4294967295<a&&(a=0,u++,4294967295<u&&(u=0))),_t=a,ge=u,f=_t,a=ge;0<a||127<f;)Ge(t,f&127|128),f=(f>>>7|a<<25)>>>0,a>>>=7;Ge(t,f)}dn(e,c)}function ue(e,c){return Fe(e,c,kt||(kt={1:Ne,2:Ne,3:Ne,4:Ne,5:Ne,6:In}))}function me(e){te.call(this,e,-1,h)}var ye;ht(me,te),me.prototype.getVertexType=function(){return ce(this,1,0)},me.prototype.getPrimitiveType=function(){return ce(this,2,0)},me.prototype.getVertexBufferList=function(){return Ot(this)},me.prototype.getIndexBufferList=function(){return at(this,4)};function Je(e,c){return Fe(e,c,ye||(ye={1:Kn,2:Kn,3:gn,4:Sn}))}var h=[3,4];function g(e){te.call(this,e)}var G;ht(g,te),g.prototype.getMesh=function(){return fe(this,me,1)},g.prototype.getPoseTransformMatrix=function(){return fe(this,ln,2)};function C(e,c){return Fe(e,c,G||(G={1:[en,me,Je],2:[en,ln,_n]}))}var B=[[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]],Q=[[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]],tt=[[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(k(B),k(Q),k(M),k(tt),k(ct),k(s));function R(e,c,f){if(f=e.createShader(f===0?e.VERTEX_SHADER:e.FRAGMENT_SHADER),e.shaderSource(f,c),e.compileShader(f),!e.getShaderParameter(f,e.COMPILE_STATUS))throw Error(`Could not compile WebGL shader.
|
|
37
|
+
`+x.getProgramInfoLog(r));T=l.o=r,x.useProgram(T),E=x.getUniformLocation(T,"sampler0"),l.j={K:x.getAttribLocation(T,"aVertex"),J:x.getAttribLocation(T,"aTex"),qa:E},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(E,0)}T=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(T.K),x.bindBuffer(x.ARRAY_BUFFER,l.u),x.vertexAttribPointer(T.K,2,x.FLOAT,!1,0,0),x.enableVertexAttribArray(T.J),x.bindBuffer(x.ARRAY_BUFFER,l.s),x.vertexAttribPointer(T.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(T.K),x.disableVertexAttribArray(T.J),x.bindBuffer(x.ARRAY_BUFFER,null),l.h.bindTexture2d(0)}function R(l){this.g=l}var Y=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 K(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 gt(function(l){switch(l.g){case 1:return l.o=2,_(l,WebAssembly.instantiate(Y),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 q(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!="undefined")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=L(Object.keys(l.options));for(var x=v.next();!x.done;x=v.next()){x=x.value;var T=l.options[x].default;T!==void 0&&(this.j[x]=typeof T=="function"?T():T)}}}i=q.prototype,i.close=function(){return this.i&&this.i.delete(),Promise.resolve()};function yt(l){var v,x,T,E,r,d,Z,e,c,f,t;return gt(function(u){switch(u.g){case 1:return l.$?(v=l.g.files===void 0?[]:typeof l.g.files=="function"?l.g.files(l.j):l.g.files,_(u,nt(),2)):u.return();case 2:if(x=u.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}),Z=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 I=a.path;b=b.then(function(w){return l.overrideFile(I,w),Promise.resolve(w)})}return b})),c=Promise.all(Z.map(function(a){return a.simd===void 0||a.simd&&x||!a.simd&&!x?K(l.locateFile(a.url,l.aa)):Promise.resolve()})).then(function(){var a,b,I;return gt(function(w){if(w.g==1)return a=window.createMediapipeSolutionsWasm,b=window.createMediapipeSolutionsPackedAssets,I=l,_(w,a(b),2);I.h=w.h,w.g=0})}),f=function(){return gt(function(a){return l.g.graph&&l.g.graph.url?a=_(a,It(l,l.g.graph.url),0):(a.g=0,a=void 0),a})}(),_(u,Promise.all([c,e,f]),7);if(typeof importScripts!="function")throw Error("solutions can only be loaded on a web page or in a web worker");return T=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(T)),E=l,_(u,createMediapipeSolutionsWasm(Module),6);case 6:E.h=u.h,l.l=new OffscreenCanvas(1,1),l.h.canvas=l.l,r=l.h.GL.createContext(l.l,{antialias:!1,alpha:!1,na:typeof WebGL2RenderingContext!="undefined"?2:1}),l.h.GL.makeContextCurrent(r),u.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."),u.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,u.g=0}})}function Xt(l){var v,x,T,E,r,d,Z,e;return gt(function(c){if(c.g==1){if(l.g.graph&&l.g.graph.url&&l.Z===l.g.graph.url)return c.return();if(l.s=!0,!l.g.graph||!l.g.graph.url){c.g=2;return}return l.Z=l.g.graph.url,_(c,It(l,l.g.graph.url),3)}for(c.g!=2&&(v=c.h,l.i.loadGraph(v)),x=L(Object.keys(l.C)),T=x.next();!T.done;T=x.next())E=T.value,l.i.overrideFile(E,l.C[E]);if(l.C={},l.g.listeners)for(r=L(l.g.listeners),d=r.next();!d.done;d=r.next())Z=d.value,St(l,Z);e=l.j,l.j={},l.setOptions(e),c.g=0})}i.reset=function(){var l=this;return gt(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 T=[],E=[],r={},d=L(Object.keys(l)),Z=d.next();!Z.done;r={R:r.R,S:r.S},Z=d.next()){var e=Z.value;e in this.j&&this.j[e]===l[e]||(this.j[e]=l[e],Z=v[e],Z!==void 0&&(Z.onChange&&(r.R=Z.onChange,r.S=l[e],T.push(function(c){return function(){var f;return gt(function(t){if(t.g==1)return _(t,c.R(c.S),2);f=t.h,f===!0&&(x.s=!0),t.g=0})}}(r))),Z.graphOptionXref&&(e={valueNumber:Z.type===1?l[e]:0,valueBoolean:Z.type===0?l[e]:!1,valueString:Z.type===2?l[e]:""},Z=Object.assign(Object.assign(Object.assign({},{calculatorName:"",calculatorIndex:0}),Z.graphOptionXref),e),E.push(Z))))}(T.length!==0||E.length!==0)&&(this.s=!0,this.B=(this.B===void 0?[]:this.B).concat(E),this.A=(this.A===void 0?[]:this.A).concat(T))}};function Kt(l){var v,x,T,E,r,d,Z;return gt(function(e){switch(e.g){case 1:if(!l.s)return e.return();if(!l.A){e.g=2;break}v=L(l.A),x=v.next();case 3:if(x.done){e.g=5;break}return T=x.value,_(e,T(),4);case 4:x=v.next(),e.g=3;break;case 5:l.A=void 0;case 2:if(l.B){for(E=new l.h.GraphOptionChangeRequestList,r=L(l.B),d=r.next();!d.done;d=r.next())Z=d.value,E.push_back(Z);l.i.changeOptions(E),E.delete(),l.B=void 0}l.s=!1,e.g=0}})}i.initialize=function(){var l=this;return gt(function(v){return v.g==1?_(v,yt(l),2):v.g!=3?_(v,Xt(l),3):_(v,Kt(l),0)})};function It(l,v){var x,T;return gt(function(E){return v in l.H?E.return(l.H[v]):(x=l.locateFile(v,""),T=fetch(x).then(function(r){return r.arrayBuffer()}),l.H[v]=T,E.return(T))})}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,T,E,r,d,Z,e,c,f,t;return gt(function(u){switch(u.g){case 1:return x.g.inputs?(T=1e3*(v==null?performance.now():v),_(u,x.D,2)):u.return();case 2:return _(u,x.initialize(),3);case 3:for(E=new x.h.PacketDataList,r=L(Object.keys(l)),d=r.next();!d.done;d=r.next())if(Z=d.value,e=x.g.inputs[Z]){t:{var a=l[Z];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!="undefined"&&a instanceof HTMLVideoElement)var I=a.videoWidth,w=a.videoHeight;else typeof HTMLImageElement!="undefined"&&a instanceof HTMLImageElement?(I=a.naturalWidth,w=a.naturalHeight):(I=a.width,w=a.height);w={glName:b.l,width:I,height:w},I=b.g,I.canvas.width=w.width,I.canvas.height=w.height,I.activeTexture(I.TEXTURE0),b.h.bindTexture2d(b.l),I.texImage2D(I.TEXTURE_2D,0,I.RGBA,I.RGBA,I.UNSIGNED_BYTE,a),b.h.bindTexture2d(0),b=w;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),w=0;w<a.length;++w){I=a[w];var H=b.data,U=H.setBoundingBox,j=w,D=I.ea,$=new G;if(Ct($,1,D.ka),Ct($,2,D.la),Ct($,3,D.height),Ct($,4,D.width),Ct($,5,D.rotation),Ct($,6,D.ia),D=O($,C),U.call(H,j,D),I.Y)for(H=0;H<I.Y.length;++H){$=I.Y[H];var ut=!!$.visibility;U=b.data,j=U.addNormalizedLandmark,D=w,$=Object.assign(Object.assign({},$),{visibility:ut?$.visibility:0}),ut=new me,Ct(ut,1,$.x),Ct(ut,2,$.y),Ct(ut,3,$.z),$.visibility&&Ct(ut,4,$.visibility),$=O(ut,ye),j.call(U,D,$)}if(I.V)for(H=0;H<I.V.length;++H)U=b.data,j=U.addClassification,D=w,$=I.V[H],ut=new kt,Ct(ut,2,$.score),$.index&&Ct(ut,1,$.index),$.label&&Ct(ut,3,$.label),$.displayName&&Ct(ut,4,$.displayName),$=O(ut,Lt),j.call(U,D,$)}b=b.data;break t;default:b={}}}switch(c=b,f=e.stream,e.type){case"video":E.pushTexture2d(Object.assign(Object.assign({},c),{stream:f,timestamp:T}));break;case"detections":t=c,t.stream=f,t.timestamp=T,E.pushDetectionList(t);break;default:throw Error("Unknown input config type: '"+e.type+"'")}}return x.i.send(E),_(u,x.D,4);case 4:E.delete(),u.g=0}})};function ft(l,v,x){var T,E,r,d,Z,e,c,f,t,u,a,b,I,w;return gt(function(H){switch(H.g){case 1:if(!x)return H.return(v);for(T={},E=0,r=L(Object.keys(x)),d=r.next();!d.done;d=r.next())Z=d.value,e=x[Z],typeof e!="string"&&e.type==="texture"&&v[e.stream]!==void 0&&++E;1<E&&(l.I=!1),c=L(Object.keys(x)),d=c.next();case 2:if(d.done){H.g=4;break}if(f=d.value,t=x[f],typeof t=="string")return I=T,w=f,_(H,Wt(l,f,v[t]),14);if(u=v[t.stream],t.type==="detection_list"){if(u){for(var U=u.getRectList(),j=u.getLandmarksList(),D=u.getClassificationsList(),$=[],ut=0;ut<U.size();++ut){var mt=V(U.get(ut),G,C);mt={ea:{ka:re(mt,1),la:re(mt,2),height:re(mt,3),width:re(mt,4),rotation:re(mt,5,0),ia:ie(mt,6)},Y:we(V(j.get(ut),Ee,h),me,1).map(B),V:Q(V(D.get(ut),Jt,Qt))},$.push(mt)}U=$}else U=[];T[f]=U,H.g=7;break}if(t.type==="proto_list"){if(u){for(U=Array(u.size()),j=0;j<u.size();j++)U[j]=u.get(j);u.delete()}else U=[];T[f]=U,H.g=7;break}if(u===void 0){H.g=3;break}if(t.type==="float_list"){T[f]=u,H.g=7;break}if(t.type==="proto"){T[f]=u,H.g=7;break}if(t.type!=="texture")throw Error("Unknown output config type: '"+t.type+"'");return a=l.u[f],a||(a=new ct(l.h,l.G),l.u[f]=a),_(H,s(a,u,l.I),13);case 13:b=H.h,T[f]=b;case 7:t.transform&&T[f]&&(T[f]=t.transform(T[f])),H.g=3;break;case 14:I[w]=H.h;case 3:d=c.next(),H.g=2;break;case 4:return H.return(T)}})}function Wt(l,v,x){var T;return gt(function(E){return typeof x=="number"||x instanceof Uint8Array||x instanceof l.h.Uint8BlobList?E.return(x):x instanceof l.h.Texture2dDataOut?(T=l.u[v],T||(T=new ct(l.h,l.G),l.u[v]=T),E.return(s(T,x,l.I))):E.return(void 0)})}function St(l,v){for(var x=v.name||"$",T=[].concat(J(v.wants)),E=new l.h.StringList,r=L(v.wants),d=r.next();!d.done;d=r.next())E.push_back(d.value);r=l.h.PacketListener.implement({onResults:function(Z){for(var e={},c=0;c<v.wants.length;++c)e[T[c]]=Z.get(c);var f=l.listeners[x];f&&(l.D=ft(l,e,v.outs).then(function(t){t=f(t);for(var u=0;u<v.wants.length;++u){var a=e[T[u]];typeof a=="object"&&a.hasOwnProperty&&a.hasOwnProperty("delete")&&a.delete()}t&&(l.D=t)}))}}),l.i.attachMultiListener(E,r),E.delete()}i.onResults=function(l,v){this.listeners[v||"$"]=l},Nt("Solution",q),Nt("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 q({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:tt},multiHandWorldLandmarks:{type:"proto_list",stream:"multi_hand_world_landmarks",transform:tt},multiHandedness:{type:"proto_list",stream:"multi_handedness",transform:function(x){return x.map(function(T){return Q(V(T,Jt,Qt))[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 T,E,r;return gt(function(d){return d.g==1?(T=wt(x),E="third_party/mediapipe/modules/hand_landmark/"+T,_(d,It(v.g,T),2)):(r=d.h,v.g.overrideFile(E,r),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 gt(function(v){return _(v,l.g.initialize(),0)})},i.reset=function(){this.g.reset()},i.send=function(l){var v=this;return gt(function(x){return _(x,v.g.send(l),0)})},i.setOptions=function(l){this.g.setOptions(l)},Nt("Hands",Ht),Nt("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]]),Nt("VERSION","0.4.1646424915")}).call(bi);var yi={};(function(){var i;function n(e){var c=0;return function(){return c<e.length?{done:!1,value:e[c++]}:{done:!0}}}var o=typeof Object.defineProperties=="function"?Object.defineProperty:function(e,c,f){return e==Array.prototype||e==Object.prototype||(e[c]=f.value),e};function m(e){e=[typeof globalThis=="object"&&globalThis,e,typeof window=="object"&&window,typeof self=="object"&&self,typeof global=="object"&&global];for(var c=0;c<e.length;++c){var f=e[c];if(f&&f.Math==Math)return f}throw Error("Cannot find global object")}var y=m(this);function S(e,c){if(c)t:{var f=y;e=e.split(".");for(var t=0;t<e.length-1;t++){var u=e[t];if(!(u in f))break t;f=f[u]}e=e[e.length-1],t=f[e],c=c(t),c!=t&&c!=null&&o(f,e,{configurable:!0,writable:!0,value:c})}}S("Symbol",function(e){function c(a){if(this instanceof c)throw new TypeError("Symbol is not a constructor");return new f(t+(a||"")+"_"+u++,a)}function f(a,b){this.g=a,o(this,"description",{configurable:!0,writable:!0,value:b})}if(e)return e;f.prototype.toString=function(){return this.g};var t="jscomp_symbol_"+(1e9*Math.random()>>>0)+"_",u=0;return c}),S("Symbol.iterator",function(e){if(e)return e;e=Symbol("Symbol.iterator");for(var c="Array Int8Array Uint8Array Uint8ClampedArray Int16Array Uint16Array Int32Array Uint32Array Float32Array Float64Array".split(" "),f=0;f<c.length;f++){var t=y[c[f]];typeof t=="function"&&typeof t.prototype[e]!="function"&&o(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 L(e){var c=typeof Symbol!="undefined"&&Symbol.iterator&&e[Symbol.iterator];return c?c.call(e):{next:n(e)}}function J(e){if(!(e instanceof Array)){e=L(e);for(var c,f=[];!(c=e.next()).done;)f.push(c.value);e=f}return e}var rt=typeof Object.create=="function"?Object.create:function(e){function c(){}return c.prototype=e,new c},z;if(typeof Object.setPrototypeOf=="function")z=Object.setPrototypeOf;else{var st;t:{var Gt={a:!0},Vt={};try{Vt.__proto__=Gt,st=Vt.a;break t}catch{}st=!1}z=st?function(e,c){if(e.__proto__=c,e.__proto__!==c)throw new TypeError(e+" is not extensible");return e}:null}var dt=z;function ht(e,c){if(e.prototype=rt(c.prototype),e.prototype.constructor=e,dt)dt(e,c);else for(var f in c)if(f!="prototype")if(Object.defineProperties){var t=Object.getOwnPropertyDescriptor(c,f);t&&Object.defineProperty(e,f,t)}else e[f]=c[f];e.da=c.prototype}function Yt(){this.l=!1,this.i=null,this.h=void 0,this.g=1,this.s=this.m=0,this.j=null}function Ft(e){if(e.l)throw new TypeError("Generator is already running");e.l=!0}Yt.prototype.o=function(e){this.h=e};function Bt(e,c){e.j={U:c,V:!0},e.g=e.m||e.s}Yt.prototype.return=function(e){this.j={return:e},this.g=this.s};function _(e,c,f){return e.g=f,{value:c}}function Ae(e){this.g=new Yt,this.h=e}function cn(e,c){Ft(e.g);var f=e.g.i;return f?We(e,"return"in f?f.return:function(t){return{value:t,done:!0}},c,e.g.return):(e.g.return(c),Dt(e))}function We(e,c,f,t){try{var u=c.call(e.g.i,f);if(!(u instanceof Object))throw new TypeError("Iterator result "+u+" is not an object");if(!u.done)return e.g.l=!1,u;var a=u.value}catch(b){return e.g.i=null,Bt(e.g,b),Dt(e)}return e.g.i=null,t.call(e.g,a),Dt(e)}function Dt(e){for(;e.g.g;)try{var c=e.h(e.g);if(c)return e.g.l=!1,{value:c.value,done:!1}}catch(f){e.g.h=void 0,Bt(e.g,f)}if(e.g.l=!1,e.g.j){if(c=e.g.j,e.g.j=null,c.V)throw c.U;return{value:c.return,done:!0}}return{value:void 0,done:!0}}function Bn(e){this.next=function(c){return Ft(e.g),e.g.i?c=We(e,e.g.i.next,c,e.g.o):(e.g.o(c),c=Dt(e)),c},this.throw=function(c){return Ft(e.g),e.g.i?c=We(e,e.g.i.throw,c,e.g.o):(Bt(e.g,c),c=Dt(e)),c},this.return=function(c){return cn(e,c)},this[Symbol.iterator]=function(){return this}}function ae(e){function c(t){return e.next(t)}function f(t){return e.throw(t)}return new Promise(function(t,u){function a(b){b.done?t(b.value):Promise.resolve(b.value).then(c,f).then(a,u)}a(e.next())})}function gt(e){return ae(new Bn(new Ae(e)))}S("Promise",function(e){function c(b){this.h=0,this.i=void 0,this.g=[],this.o=!1;var I=this.j();try{b(I.resolve,I.reject)}catch(w){I.reject(w)}}function f(){this.g=null}function t(b){return b instanceof c?b:new c(function(I){I(b)})}if(e)return e;f.prototype.h=function(b){if(this.g==null){this.g=[];var I=this;this.i(function(){I.l()})}this.g.push(b)};var u=y.setTimeout;f.prototype.i=function(b){u(b,0)},f.prototype.l=function(){for(;this.g&&this.g.length;){var b=this.g;this.g=[];for(var I=0;I<b.length;++I){var w=b[I];b[I]=null;try{w()}catch(H){this.j(H)}}}this.g=null},f.prototype.j=function(b){this.i(function(){throw b})},c.prototype.j=function(){function b(H){return function(U){w||(w=!0,H.call(I,U))}}var I=this,w=!1;return{resolve:b(this.C),reject:b(this.l)}},c.prototype.C=function(b){if(b===this)this.l(new TypeError("A Promise cannot resolve to itself"));else if(b instanceof c)this.F(b);else{t:switch(typeof b){case"object":var I=b!=null;break t;case"function":I=!0;break t;default:I=!1}I?this.v(b):this.m(b)}},c.prototype.v=function(b){var I=void 0;try{I=b.then}catch(w){this.l(w);return}typeof I=="function"?this.G(I,b):this.m(b)},c.prototype.l=function(b){this.s(2,b)},c.prototype.m=function(b){this.s(1,b)},c.prototype.s=function(b,I){if(this.h!=0)throw Error("Cannot settle("+b+", "+I+"): Promise already settled in state"+this.h);this.h=b,this.i=I,this.h===2&&this.D(),this.A()},c.prototype.D=function(){var b=this;u(function(){if(b.B()){var I=y.console;typeof I!="undefined"&&I.error(b.i)}},1)},c.prototype.B=function(){if(this.o)return!1;var b=y.CustomEvent,I=y.Event,w=y.dispatchEvent;return typeof w=="undefined"?!0:(typeof b=="function"?b=new b("unhandledrejection",{cancelable:!0}):typeof I=="function"?b=new I("unhandledrejection",{cancelable:!0}):(b=y.document.createEvent("CustomEvent"),b.initCustomEvent("unhandledrejection",!1,!0,b)),b.promise=this,b.reason=this.i,w(b))},c.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 f;return c.prototype.F=function(b){var I=this.j();b.J(I.resolve,I.reject)},c.prototype.G=function(b,I){var w=this.j();try{b.call(I,w.resolve,w.reject)}catch(H){w.reject(H)}},c.prototype.then=function(b,I){function w(D,$){return typeof D=="function"?function(ut){try{H(D(ut))}catch(mt){U(mt)}}:$}var H,U,j=new c(function(D,$){H=D,U=$});return this.J(w(b,H),w(I,U)),j},c.prototype.catch=function(b){return this.then(void 0,b)},c.prototype.J=function(b,I){function w(){switch(H.h){case 1:b(H.i);break;case 2:I(H.i);break;default:throw Error("Unexpected state: "+H.h)}}var H=this;this.g==null?a.h(w):this.g.push(w),this.o=!0},c.resolve=t,c.reject=function(b){return new c(function(I,w){w(b)})},c.race=function(b){return new c(function(I,w){for(var H=L(b),U=H.next();!U.done;U=H.next())t(U.value).J(I,w)})},c.all=function(b){var I=L(b),w=I.next();return w.done?t([]):new c(function(H,U){function j(ut){return function(mt){D[ut]=mt,$--,$==0&&H(D)}}var D=[],$=0;do D.push(void 0),$++,t(w.value).J(j(D.length-1),U),w=I.next();while(!w.done)})},c});function mn(e,c){e instanceof String&&(e+="");var f=0,t=!1,u={next:function(){if(!t&&f<e.length){var a=f++;return{value:c(a,e[a]),done:!1}}return t=!0,{done:!0,value:void 0}}};return u[Symbol.iterator]=function(){return u},u}var An=typeof Object.assign=="function"?Object.assign:function(e,c){for(var f=1;f<arguments.length;f++){var t=arguments[f];if(t)for(var u in t)Object.prototype.hasOwnProperty.call(t,u)&&(e[u]=t[u])}return e};S("Object.assign",function(e){return e||An}),S("Object.is",function(e){return e||function(c,f){return c===f?c!==0||1/c===1/f:c!==c&&f!==f}}),S("Array.prototype.includes",function(e){return e||function(c,f){var t=this;t instanceof String&&(t=String(t));var u=t.length;for(f=f||0,0>f&&(f=Math.max(f+u,0));f<u;f++){var a=t[f];if(a===c||Object.is(a,c))return!0}return!1}}),S("String.prototype.includes",function(e){return e||function(c,f){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,f||0)!==-1}}),S("Array.prototype.keys",function(e){return e||function(){return mn(this,function(c){return c})}});var Ve=this||self;function Nt(e,c){e=e.split(".");var f=Ve;e[0]in f||typeof f.execScript=="undefined"||f.execScript("var "+e[0]);for(var t;e.length&&(t=e.shift());)e.length||c===void 0?f[t]&&f[t]!==Object.prototype[t]?f=f[t]:f=f[t]={}:f[t]=c}function Te(e){Ve.setTimeout(function(){throw e},0)}function nn(e){Te(e)}function Gn(e,c){nn(Error("Invalid wire type: "+e+" (at position "+c+")"))}function wn(){nn(Error("Failed to read varint, encoding is invalid."))}function Rn(e,c){return c=String.fromCharCode.apply(null,c),e==null?c:e+c}var Cn,an=typeof TextDecoder!="undefined",pn,En=typeof TextEncoder!="undefined";function Fn(e){if(En)e=(pn||(pn=new TextEncoder)).encode(e);else{var c=void 0;c=c===void 0?!1:c;for(var f=0,t=new Uint8Array(3*e.length),u=0;u<e.length;u++){var a=e.charCodeAt(u);if(128>a)t[f++]=a;else{if(2048>a)t[f++]=a>>6|192;else{if(55296<=a&&57343>=a){if(56319>=a&&u<e.length){var b=e.charCodeAt(++u);if(56320<=b&&57343>=b){a=1024*(a-55296)+b-56320+65536,t[f++]=a>>18|240,t[f++]=a>>12&63|128,t[f++]=a>>6&63|128,t[f++]=a&63|128;continue}else u--}if(c)throw Error("Found an unpaired surrogate");a=65533}t[f++]=a>>12|224,t[f++]=a>>6&63|128}t[f++]=a&63|128}}e=t.subarray(0,f)}return e}var je={},Me=null;function xn(e){var c;c===void 0&&(c=0),Se(),c=je[c];for(var f=Array(Math.floor(e.length/3)),t=c[64]||"",u=0,a=0;u<e.length-2;u+=3){var b=e[u],I=e[u+1],w=e[u+2],H=c[b>>2];b=c[(b&3)<<4|I>>4],I=c[(I&15)<<2|w>>6],w=c[w&63],f[a++]=H+b+I+w}switch(H=0,w=t,e.length-u){case 2:H=e[u+1],w=c[(H&15)<<2]||t;case 1:e=e[u],f[a]=c[e>>2]+c[(e&3)<<4|H>>4]+w+t}return f.join("")}function Xn(e){var c=e.length,f=3*c/4;f%3?f=Math.floor(f):"=.".indexOf(e[c-1])!=-1&&(f="=.".indexOf(e[c-2])!=-1?f-2:f-1);var t=new Uint8Array(f),u=0;return de(e,function(a){t[u++]=a}),t.subarray(0,u)}function de(e,c){function f(w){for(;t<e.length;){var H=e.charAt(t++),U=Me[H];if(U!=null)return U;if(!/^[\s\xa0]*$/.test(H))throw Error("Unknown base64 encoding at char: "+H)}return w}Se();for(var t=0;;){var u=f(-1),a=f(0),b=f(64),I=f(64);if(I===64&&u===-1)break;c(u<<2|a>>4),b!=64&&(c(a<<4&240|b>>2),I!=64&&c(b<<6&192|I))}}function Se(){if(!Me){Me={};for(var e="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789".split(""),c=["+/=","+/","-_=","-_.","-_"],f=0;5>f;f++){var t=e.concat(c[f].split(""));je[f]=t;for(var u=0;u<t.length;u++){var a=t[u];Me[a]===void 0&&(Me[a]=u)}}}}var ze=typeof Uint8Array=="function",ee;function Xe(e){if(this.g=e,e!==null&&e.length===0)throw Error("ByteString should be constructed with non-empty values")}Xe.prototype.toJSON=function(){if(this.g==null)var e="";else e=this.g,e=this.g=e==null||typeof e=="string"?e:ze&&e instanceof Uint8Array?xn(e):null;return e};var rn=typeof Uint8Array.prototype.slice=="function";function Ue(e,c,f){return c===f?ee||(ee=new Uint8Array(0)):rn?e.slice(c,f):new Uint8Array(e.subarray(c,f))}var _t=0,ge=0;function He(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===Xe){if(e.g==null)var c=ee||(ee=new Uint8Array(0));else{c=Uint8Array;var f=e.g;f=f==null||ze&&f!=null&&f instanceof Uint8Array?f:typeof f=="string"?Xn(f):null,e=e.g=f,c=new c(e)}return c}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,c){c=c===void 0?{}:c,c=c.u===void 0?!1:c.u,this.h=null,this.g=this.i=this.m=0,this.l=!1,this.u=c,e&&xe(this,e)}function xe(e,c){e.h=He(c),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 c=128,f=0,t=0,u=0;4>u&&128<=c;u++)c=e.h[e.g++],f|=(c&127)<<7*u;if(128<=c&&(c=e.h[e.g++],f|=(c&127)<<28,t|=(c&127)>>4),128<=c)for(u=0;5>u&&128<=c;u++)c=e.h[e.g++],t|=(c&127)<<7*u+3;if(128>c)return e=f>>>0,c=t>>>0,(t=c&2147483648)&&(e=~e+1>>>0,c=~c>>>0,e==0&&(c=c+1>>>0)),e=4294967296*c+(e>>>0),t?-e:e;e.l=!0,wn()}function be(e){e.g>e.i&&(e.l=!0,nn(Error("Tried to read past the end of the data "+e.g+" > "+e.i)))}Mt.prototype.j=function(){var e=this.h,c=e[this.g],f=c&127;return 128>c?(this.g+=1,be(this),f):(c=e[this.g+1],f|=(c&127)<<7,128>c?(this.g+=2,be(this),f):(c=e[this.g+2],f|=(c&127)<<14,128>c?(this.g+=3,be(this),f):(c=e[this.g+3],f|=(c&127)<<21,128>c?(this.g+=4,be(this),f):(c=e[this.g+4],f|=(c&15)<<28,128>c?(this.g+=5,be(this),f>>>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,wn(),f):(be(this),f))))))},Mt.prototype.o=function(){var e=this.h[this.g],c=this.h[this.g+1],f=this.h[this.g+2],t=this.h[this.g+3];return this.g+=4,be(this),f=(e<<0|c<<8|f<<16|t<<24)>>>0,e=2*(f>>31)+1,c=f>>>23&255,f&=8388607,c==255?f?NaN:1/0*e:c==0?e*Math.pow(2,-149)*f:e*Math.pow(2,c-150)*(f+Math.pow(2,23))};var Le=[];function Qe(){this.g=new Uint8Array(64),this.h=0}function Ge(e,c){if(!(e.h+1<e.g.length)){var f=e.g;e.g=new Uint8Array(Math.ceil(1+2*e.g.length)),e.g.set(f)}e.g[e.h++]=c}Qe.prototype.length=function(){return this.h},Qe.prototype.end=function(){var e=this.g,c=this.h;return this.h=0,Ue(e,0,c)};function zt(e,c){for(;127<c;)Ge(e,c&127|128),c>>>=7;Ge(e,c)}function Be(e){var c={},f=c.N===void 0?!1:c.N;this.m={u:c.u===void 0?!1:c.u},this.N=f,c=this.m,Le.length?(f=Le.pop(),c&&(f.u=c.u),e&&xe(f,e),e=f):e=new Mt(e,c),this.g=e,this.l=this.g.g,this.h=this.i=-1,this.j=!1}Be.prototype.reset=function(){this.g.reset(),this.h=this.i=-1};function Pe(e){var c=e.g;if((c=c.g==c.i)||(c=e.j)||(c=e.g,c=c.l||0>c.g||c.g>c.i),c)return!1;e.l=e.g.g;var f=e.g.j();return c=f>>>3,f&=7,0<=f&&5>=f?(e.i=c,e.h=f,!0):(e.j=!0,Gn(f,e.l),!1)}function Ie(e){switch(e.h){case 0:if(e.h!=0)Ie(e);else t:{e=e.g;for(var c=e.g,f=0;10>f;f++){if((e.h[c]&128)===0){e.g=c+1,be(e);break t}c++}e.l=!0,wn()}break;case 1:e=e.g,e.g+=8,be(e);break;case 2:e.h!=2?Ie(e):(c=e.g.j(),e=e.g,e.g+=c,be(e));break;case 5:e=e.g,e.g+=4,be(e);break;case 3:c=e.i;do{if(!Pe(e)){e.j=!0,nn(Error("Unmatched start-group tag: stream EOF"));break}if(e.h==4){e.i!=c&&(e.j=!0,nn(Error("Unmatched end-group tag")));break}Ie(e)}while(1);break;default:e.j=!0,Gn(e.h,e.l)}}function Wn(e,c,f){e.N||(e=Ue(e.g.h,f,e.g.g),(f=c.o)?f.push(e):c.o=[e])}function on(e,c,f){var t=e.g.i,u=e.g.j(),a=e.g.g+u;if(e.g.i=a,f(c,e),f=a-e.g.g,f!==0)throw Error("Message parsing ended unexpectedly. Expected to read "+(u+" bytes, instead read "+(u-f)+" bytes, either the data ended unexpectedly or the message misreported its own length"));return e.g.g=a,e.g.i=t,c}function Oe(e,c,f){var t=e.g.j();for(t=e.g.g+t;e.g.g<t;)f.push(c.call(e.g))}var sn=[];function Ze(){this.h=[],this.i=0,this.g=new Qe}function Ye(e,c){c.length!==0&&(e.h.push(c),e.i+=c.length)}function ve(e,c,f){zt(e.g,8*c+2),zt(e.g,f.length),Ye(e,e.g.end()),Ye(e,f)}var ne=typeof Symbol=="function"&&typeof Symbol()=="symbol"?Symbol(void 0):void 0;function _e(e,c){Object.isFrozen(e)||(ne?e[ne]|=c:e.g!==void 0?e.g|=c:Object.defineProperties(e,{g:{value:c,configurable:!0,writable:!0,enumerable:!1}}))}function qt(e){if(!e)return 0;var c;return ne?c=e[ne]:c=e.g,c==null?0:c}function Pt(e){return Array.isArray(e)&&_e(e,1),e}function dn(e){if(!Array.isArray(e))throw Error("cannot mark non-array as immutable");_e(e,2)}function he(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 ze&&e!=null&&e instanceof Uint8Array?xn(e):e;default:return e}}function Rt(e,c){if(e!=null)return Array.isArray(e)||he(e)?re(e,c):c(e)}function re(e,c){if(Array.isArray(e)){for(var f=Array(e.length),t=0;t<e.length;t++)f[t]=Rt(e[t],c);return qt(e)&1&&Pt(f),f}f={};for(t in e)f[t]=Rt(e[t],c);return f}var we;function te(e,c,f){var t=we;we=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],he(t))){this.l=e-this.j,this.i=t;break t}c!==void 0&&-1<c?(this.l=Math.max(c,e+1-this.j),this.i=null):this.l=Number.MAX_VALUE}if(f)for(c=0;c<f.length;c++)e=f[c],e<this.l?(e+=this.j,(t=this.h[e])?Pt(t):this.h[e]=ie):(et(this),(t=this.i[e])?Pt(t):this.i[e]=ie)}var ie=Object.freeze(Pt([]));function et(e){var c=e.l+e.j;e.h[c]||(e.i=e.h[c]={})}function ot(e,c,f){return c===-1?null:(f===void 0?0:f)||c>=e.l?e.i?e.i[c]:void 0:e.h[c+e.j]}function at(e,c,f){f=f===void 0?!0:f;var t=t===void 0?!1:t,u=ot(e,c,t);return u==null&&(u=ie),u===ie?(u=Pt([]),Tt(e,c,u,t)):f&&Array.isArray(u)&&qt(u)&2&&(u=u.slice(),Tt(e,c,u,t)),u}function Ot(e){var c=at(e,3,!1);if(e.m||(e.m={}),!e.m[3]){for(var f=0;f<c.length;f++)c[f]=+c[f];e.m[3]=!0}return c}function ce(e,c,f){return e=ot(e,c),e==null?f:e}function le(e,c,f){return e=ot(e,c),e=e==null?e:+e,e==null?f===void 0?0:f:e}function Tt(e,c,f,t){(t===void 0?0:t)||c>=e.l?(et(e),e.i[c]=f):e.h[c+e.j]=f}function fe(e,c,f){if(f===-1)return null;e.g||(e.g={});var t=e.g[f];if(t)return t;var u=ot(e,f,!1);return u==null?t:(c=new c(u),e.g[f]=c)}function Ce(e,c,f){e.g||(e.g={});var t=e.g[f];if(!t){var u=at(e,f,!1);t=[];for(var a=Array.isArray(u)?!!(qt(u)&2):!1,b=0;b<u.length;b++)t[b]=new c(u[b]),a&&dn(t[b].h);a&&(dn(t),Object.freeze(t)),e.g[f]=t}return t}function De(e,c,f,t,u){var a=Ce(e,t,c);f=f||new t,e=at(e,c),u!=null?(a.splice(u,0,f),e.splice(u,0,$e(f))):(a.push(f),e.push($e(f)))}te.prototype.toJSON=function(){var e=$e(this);return re(e,Ct)};function $e(e){if(e.g)for(var c in e.g){var f=e.g[c];if(Array.isArray(f))for(var t=0;t<f.length;t++)f[t]&&$e(f[t]);else f&&$e(f)}return e.h}te.prototype.toString=function(){return $e(this).toString()};function hn(e,c){if(e=e.o){Ye(c,c.g.end());for(var f=0;f<e.length;f++)Ye(c,e[f])}}function bn(e){var c=e[0];switch(e.length){case 2:var f=e[1];return function(w,H,U){return c(w,H,U,f)};case 3:var t=e[1],u=e[2];return function(w,H,U){return c(w,H,U,t,u)};case 4:var a=e[1],b=e[2],I=e[3];return function(w,H,U){return c(w,H,U,a,b,I)};default:throw Error("unsupported number of parameters, expected [2-4], got "+e.length)}}function Fe(e,c,f){for(;Pe(c)&&c.h!=4;){var t=c.i,u=f[t];if(u){if(Array.isArray(u)&&(u=f[t]=bn(u)),!u(c,e,t)){t=c,u=e;var a=t.l;Ie(t),Wn(t,u,a)}}else t=c,u=e,a=t.l,Ie(t),Wn(t,u,a)}return e}function qe(e,c){var f=new Ze;if(c(e,f),e=f.i+f.g.length(),e===0)f=new Uint8Array(0);else{e=new Uint8Array(e);for(var t=f.h,u=t.length,a=c=0;a<u;a++){var b=t[a];b.length!==0&&(e.set(b,c),c+=b.length)}t=f.g,u=t.h,u!==0&&(e.set(t.g.subarray(0,u),c),t.h=0),f.h=[e],f=e}return f}function jn(e,c,f){if(sn.length){var t=sn.pop();e&&(xe(t.g,e),t.i=-1,t.h=-1),e=t}else e=new Be(e);try{return f(new c,e)}finally{c=e.g,c.h=null,c.m=0,c.i=0,c.g=0,c.l=!1,c.u=!1,e.i=-1,e.h=-1,e.j=!1,100>sn.length&&sn.push(e)}}function tn(e,c,f){if(c=ot(c,f),c!=null){zt(e.g,8*f+5),e=e.g;var t=c;t=(f=0>t?1:0)?-t:t,t===0?0<1/t?_t=ge=0:(ge=0,_t=2147483648):isNaN(t)?(ge=0,_t=2147483647):34028234663852886e22<t?(ge=0,_t=(f<<31|2139095040)>>>0):11754943508222875e-54>t?(t=Math.round(t/Math.pow(2,-149)),ge=0,_t=(f<<31|t)>>>0):(c=Math.floor(Math.log(t)/Math.LN2),t*=Math.pow(2,-c),t=Math.round(8388608*t),16777216<=t&&++c,ge=0,_t=(f<<31|c+127<<23|t&8388607)>>>0),f=_t,Ge(e,f>>>0&255),Ge(e,f>>>8&255),Ge(e,f>>>16&255),Ge(e,f>>>24&255)}}function Ne(e,c,f){return e.h!==5?!1:(Tt(c,f,e.g.o()),!0)}function gn(e,c,f){return e.h!==5&&e.h!==2?!1:(c=at(c,f),e.h==2?Oe(e,Mt.prototype.o,c):c.push(e.g.o()),!0)}function In(e,c,f){return e.h!==0?!1:(Tt(c,f,jt(e.g)),!0)}function Ke(e,c,f){return e.h!==0?!1:(Tt(c,f,e.g.j()),!0)}function kn(e,c,f){if(e.h!==2)return!1;var t=e.g.j();e=e.g;var u=e.g;e.g+=t,be(e),e=e.h;var a;if(an)(a=Cn)||(a=Cn=new TextDecoder("utf-8",{fatal:!1})),a=a.decode(e.subarray(u,u+t));else{t=u+t;for(var b=[],I=null,w,H,U;u<t;)w=e[u++],128>w?b.push(w):224>w?u>=t?b.push(65533):(H=e[u++],194>w||(H&192)!==128?(u--,b.push(65533)):b.push((w&31)<<6|H&63)):240>w?u>=t-1?b.push(65533):(H=e[u++],(H&192)!==128||w===224&&160>H||w===237&&160<=H||((a=e[u++])&192)!==128?(u--,b.push(65533)):b.push((w&15)<<12|(H&63)<<6|a&63)):244>=w?u>=t-2?b.push(65533):(H=e[u++],(H&192)!==128||(w<<28)+(H-144)>>30!==0||((a=e[u++])&192)!==128||((U=e[u++])&192)!==128?(u--,b.push(65533)):(w=(w&7)<<18|(H&63)<<12|(a&63)<<6|U&63,w-=65536,b.push((w>>10&1023)+55296,(w&1023)+56320))):b.push(65533),8192<=b.length&&(I=Rn(I,b),b.length=0);a=Rn(I,b)}return Tt(c,f,a),!0}function en(e,c,f,t,u){if(e.h!==2)return!1;e=on(e,new t,u);var a=a===void 0?!1:a;return c.g||(c.g={}),t=e&&$e(e),c.g[f]=e,Tt(c,f,t,a),!0}function Zn(e,c,f,t,u){return e.h!==2?!1:(e=on(e,new t,u),De(c,f,e,t,void 0),!0)}function Sn(e,c,f){return e.h!==0&&e.h!==2?!1:(c=at(c,f),e.h==2?Oe(e,Mt.prototype.j,c):c.push(e.g.j()),!0)}function Kn(e,c,f){return e.h!==0?!1:(Tt(c,f,jt(e.g)),!0)}function ln(e){te.call(this,e,-1,Qn)}var Tn;ht(ln,te),ln.prototype.getRows=function(){return ot(this,1)},ln.prototype.getCols=function(){return ot(this,2)},ln.prototype.getPackedDataList=function(){return Ot(this)},ln.prototype.getLayout=function(){return ce(this,4,0)};function _n(e,c){return Fe(e,c,Tn||(Tn={1:Ke,2:Ke,3:gn,4:Kn}))}var Qn=[3];function Ln(e){te.call(this,e)}var Hn;ht(Ln,te);function p(e,c){var f=ot(e,1);if(f!=null&&f!=null){zt(c.g,8);var t=c.g;if(0<=f)zt(t,f);else{for(var u=0;9>u;u++)Ge(t,f&127|128),f>>=7;Ge(t,1)}}tn(c,e,2),t=ot(e,3),t!=null&&ve(c,3,Fn(t)),t=ot(e,4),t!=null&&ve(c,4,Fn(t)),hn(e,c)}function W(e,c){return Fe(e,c,Hn||(Hn={1:Ke,2:Ne,3:kn,4:kn}))}function V(e){te.call(this,e,-1,lt)}var k;ht(V,te),V.prototype.addClassification=function(e,c){return De(this,1,e,Ln,c),this};function O(e,c){return Fe(e,c,k||(k={1:[Zn,Ln,W]}))}var lt=[1];function P(e){te.call(this,e)}var it;ht(P,te);function bt(e,c){tn(c,e,1),tn(c,e,2),tn(c,e,3),tn(c,e,4),tn(c,e,5),hn(e,c)}function xt(e,c){return Fe(e,c,it||(it={1:Ne,2:Ne,3:Ne,4:Ne,5:Ne}))}function Ut(e){te.call(this,e,-1,kt)}var Et;ht(Ut,te);function $t(e,c){return Fe(e,c,Et||(Et={1:[Zn,P,xt]}))}var kt=[1];function Lt(e){te.call(this,e)}var Jt;ht(Lt,te);function Qt(e,c){tn(c,e,1),tn(c,e,2),tn(c,e,3),tn(c,e,4),tn(c,e,5);var f=ot(e,6);if(f!=null&&f!=null){zt(c.g,48);var t=c.g,u=f;f=0>u,u=Math.abs(u);var a=u>>>0;for(u=Math.floor((u-a)/4294967296),u>>>=0,f&&(u=~u>>>0,a=(~a>>>0)+1,4294967295<a&&(a=0,u++,4294967295<u&&(u=0))),_t=a,ge=u,f=_t,a=ge;0<a||127<f;)Ge(t,f&127|128),f=(f>>>7|a<<25)>>>0,a>>>=7;Ge(t,f)}hn(e,c)}function ue(e,c){return Fe(e,c,Jt||(Jt={1:Ne,2:Ne,3:Ne,4:Ne,5:Ne,6:In}))}function me(e){te.call(this,e,-1,h)}var ye;ht(me,te),me.prototype.getVertexType=function(){return ce(this,1,0)},me.prototype.getPrimitiveType=function(){return ce(this,2,0)},me.prototype.getVertexBufferList=function(){return Ot(this)},me.prototype.getIndexBufferList=function(){return at(this,4)};function Ee(e,c){return Fe(e,c,ye||(ye={1:Kn,2:Kn,3:gn,4:Sn}))}var h=[3,4];function g(e){te.call(this,e)}var G;ht(g,te),g.prototype.getMesh=function(){return fe(this,me,1)},g.prototype.getPoseTransformMatrix=function(){return fe(this,ln,2)};function C(e,c){return Fe(e,c,G||(G={1:[en,me,Ee],2:[en,ln,_n]}))}var M=[[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]],Q=[[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]],B=[[276,283],[283,282],[282,295],[295,285],[300,293],[293,334],[334,296],[296,336]],tt=[[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(M),J(Q),J(B),J(tt),J(ct),J(s));function R(e,c,f){if(f=e.createShader(f===0?e.VERTEX_SHADER:e.FRAGMENT_SHADER),e.shaderSource(f,c),e.compileShader(f),!e.getShaderParameter(f,e.COMPILE_STATUS))throw Error(`Could not compile WebGL shader.
|
|
38
38
|
|
|
39
|
-
`+e.getShaderInfoLog(f));return f}function Y(e){return Ce(e,
|
|
39
|
+
`+e.getShaderInfoLog(f));return f}function Y(e){return Ce(e,Ln,1).map(function(c){return{index:ce(c,1,0),score:le(c,2),label:ot(c,3)!=null?ce(c,3,""):void 0,displayName:ot(c,4)!=null?ce(c,4,""):void 0}})}function N(e){return{x:le(e,1),y:le(e,2),z:le(e,3),visibility:ot(e,4)!=null?le(e,4):void 0}}function A(e){return Ce(jn(e,Ut,$t),P,1).map(N)}function K(e,c){this.h=e,this.g=c,this.l=0}function nt(e,c,f){return q(e,c),typeof e.g.canvas.transferToImageBitmap=="function"?Promise.resolve(e.g.canvas.transferToImageBitmap()):f?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 q(e,c){var f=e.g;if(e.m===void 0){var t=R(f,`
|
|
40
40
|
attribute vec2 aVertex;
|
|
41
41
|
attribute vec2 aTex;
|
|
42
42
|
varying vec2 vTex;
|
|
@@ -51,9 +51,9 @@
|
|
|
51
51
|
gl_FragColor = texture2D(sampler0, vTex);
|
|
52
52
|
}`,1),a=f.createProgram();if(f.attachShader(a,t),f.attachShader(a,u),f.linkProgram(a),!f.getProgramParameter(a,f.LINK_STATUS))throw Error(`Could not compile WebGL program.
|
|
53
53
|
|
|
54
|
-
`+f.getProgramInfoLog(a));t=e.m=a,f.useProgram(t),u=f.getUniformLocation(t,"sampler0"),e.j={I:f.getAttribLocation(t,"aVertex"),H:f.getAttribLocation(t,"aTex"),ca:u},e.s=f.createBuffer(),f.bindBuffer(f.ARRAY_BUFFER,e.s),f.enableVertexAttribArray(e.j.I),f.vertexAttribPointer(e.j.I,2,f.FLOAT,!1,0,0),f.bufferData(f.ARRAY_BUFFER,new Float32Array([-1,-1,-1,1,1,1,1,-1]),f.STATIC_DRAW),f.bindBuffer(f.ARRAY_BUFFER,null),e.o=f.createBuffer(),f.bindBuffer(f.ARRAY_BUFFER,e.o),f.enableVertexAttribArray(e.j.H),f.vertexAttribPointer(e.j.H,2,f.FLOAT,!1,0,0),f.bufferData(f.ARRAY_BUFFER,new Float32Array([0,1,0,0,1,0,1,1]),f.STATIC_DRAW),f.bindBuffer(f.ARRAY_BUFFER,null),f.uniform1i(u,0)}t=e.j,f.useProgram(e.m),f.canvas.width=c.width,f.canvas.height=c.height,f.viewport(0,0,c.width,c.height),f.activeTexture(f.TEXTURE0),e.h.bindTexture2d(c.glName),f.enableVertexAttribArray(t.I),f.bindBuffer(f.ARRAY_BUFFER,e.s),f.vertexAttribPointer(t.I,2,f.FLOAT,!1,0,0),f.enableVertexAttribArray(t.H),f.bindBuffer(f.ARRAY_BUFFER,e.o),f.vertexAttribPointer(t.H,2,f.FLOAT,!1,0,0),f.bindFramebuffer(f.DRAW_FRAMEBUFFER?f.DRAW_FRAMEBUFFER:f.FRAMEBUFFER,null),f.clearColor(0,0,0,0),f.clear(f.COLOR_BUFFER_BIT),f.colorMask(!0,!0,!0,!0),f.drawArrays(f.TRIANGLE_FAN,0,4),f.disableVertexAttribArray(t.I),f.disableVertexAttribArray(t.H),f.bindBuffer(f.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,c){return c+e}function It(e,c){window[e]=c}function ft(e){var c=document.createElement("script");return c.setAttribute("src",e),c.setAttribute("crossorigin","anonymous"),new Promise(function(f){c.addEventListener("load",function(){f()},!1),c.addEventListener("error",function(){f()},!1),document.body.appendChild(c)})}function Wt(){return gt(function(e){switch(e.g){case 1:return e.m=2,_(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 St(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 c=window.location.pathname.toString().substring(0,window.location.pathname.toString().lastIndexOf("/"))+"/";else if(typeof location!="undefined")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.S=c,e.options){c=T(Object.keys(e.options));for(var f=c.next();!f.done;f=c.next()){f=f.value;var t=e.options[f].default;t!==void 0&&(this.j[f]=typeof t=="function"?t():t)}}}i=St.prototype,i.close=function(){return this.i&&this.i.delete(),Promise.resolve()};function wt(e){var c,f,t,u,a,b,I,w,H,U,j;return gt(function(D){switch(D.g){case 1:return e.R?(c=e.g.files===void 0?[]:typeof e.g.files=="function"?e.g.files(e.j):e.g.files,_(D,Wt(),2)):D.return();case 2:if(f=D.h,typeof window=="object")return It("createMediapipeSolutionsWasm",{locateFile:e.locateFile}),It("createMediapipeSolutionsPackedAssets",{locateFile:e.locateFile}),b=c.filter(function($){return $.data!==void 0}),I=c.filter(function($){return $.data===void 0}),w=Promise.all(b.map(function($){var ut=v(e,$.url);if($.path!==void 0){var mt=$.path;ut=ut.then(function(pt){return e.overrideFile(mt,pt),Promise.resolve(pt)})}return ut})),H=Promise.all(I.map(function($){return $.simd===void 0||$.simd&&f||!$.simd&&!f?ft(e.locateFile($.url,e.S)):Promise.resolve()})).then(function(){var $,ut,mt;return gt(function(pt){if(pt.g==1)return $=window.createMediapipeSolutionsWasm,ut=window.createMediapipeSolutionsPackedAssets,mt=e,_(pt,$(ut),2);mt.h=pt.h,pt.g=0})}),U=function(){return gt(function($){return e.g.graph&&e.g.graph.url?$=_($,v(e,e.g.graph.url),0):($.g=0,$=void 0),$})}(),_(D,Promise.all([H,w,U]),7);if(typeof importScripts!="function")throw Error("solutions can only be loaded on a web page or in a web worker");return t=c.filter(function($){return $.simd===void 0||$.simd&&f||!$.simd&&!f}).map(function($){return e.locateFile($.url,e.S)}),importScripts.apply(null,k(t)),u=e,_(D,createMediapipeSolutionsWasm(Module),6);case 6:u.h=D.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!="undefined"?2:1}),e.h.GL.makeContextCurrent(a),D.g=4;break;case 7:if(e.l=document.createElement("canvas"),j=e.l.getContext("webgl2",{}),!j&&(j=e.l.getContext("webgl",{}),!j))return alert("Failed to create WebGL canvas context when passing video frame."),D.return();e.D=j,e.h.canvas=e.l,e.h.createContext(e.l,!0,!0,{});case 4:e.i=new e.h.SolutionWasm,e.R=!1,D.g=0}})}function Ht(e){var c,f,t,u,a,b,I,w;return gt(function(H){if(H.g==1){if(e.g.graph&&e.g.graph.url&&e.P===e.g.graph.url)return H.return();if(e.o=!0,!e.g.graph||!e.g.graph.url){H.g=2;return}return e.P=e.g.graph.url,_(H,v(e,e.g.graph.url),3)}for(H.g!=2&&(c=H.h,e.i.loadGraph(c)),f=T(Object.keys(e.B)),t=f.next();!t.done;t=f.next())u=t.value,e.i.overrideFile(u,e.B[u]);if(e.B={},e.g.listeners)for(a=T(e.g.listeners),b=a.next();!b.done;b=a.next())I=b.value,J(e,I);w=e.j,e.j={},e.setOptions(w),H.g=0})}i.reset=function(){var e=this;return gt(function(c){e.i&&(e.i.reset(),e.m={},e.s={}),c.g=0})},i.setOptions=function(e,c){var f=this;if(c=c||this.g.options){for(var t=[],u=[],a={},b=T(Object.keys(e)),I=b.next();!I.done;a={K:a.K,L:a.L},I=b.next()){var w=I.value;w in this.j&&this.j[w]===e[w]||(this.j[w]=e[w],I=c[w],I!==void 0&&(I.onChange&&(a.K=I.onChange,a.L=e[w],t.push(function(H){return function(){var U;return gt(function(j){if(j.g==1)return _(j,H.K(H.L),2);U=j.h,U===!0&&(f.o=!0),j.g=0})}}(a))),I.graphOptionXref&&(w={valueNumber:I.type===1?e[w]:0,valueBoolean:I.type===0?e[w]:!1,valueString:I.type===2?e[w]:""},I=Object.assign(Object.assign(Object.assign({},{calculatorName:"",calculatorIndex:0}),I.graphOptionXref),w),u.push(I))))}(t.length!==0||u.length!==0)&&(this.o=!0,this.A=(this.A===void 0?[]:this.A).concat(u),this.v=(this.v===void 0?[]:this.v).concat(t))}};function l(e){var c,f,t,u,a,b,I;return gt(function(w){switch(w.g){case 1:if(!e.o)return w.return();if(!e.v){w.g=2;break}c=T(e.v),f=c.next();case 3:if(f.done){w.g=5;break}return t=f.value,_(w,t(),4);case 4:f=c.next(),w.g=3;break;case 5:e.v=void 0;case 2:if(e.A){for(u=new e.h.GraphOptionChangeRequestList,a=T(e.A),b=a.next();!b.done;b=a.next())I=b.value,u.push_back(I);e.i.changeOptions(u),u.delete(),e.A=void 0}e.o=!1,w.g=0}})}i.initialize=function(){var e=this;return gt(function(c){return c.g==1?_(c,wt(e),2):c.g!=3?_(c,Ht(e),3):_(c,l(e),0)})};function v(e,c){var f,t;return gt(function(u){return c in e.F?u.return(e.F[c]):(f=e.locateFile(c,""),t=fetch(f).then(function(a){return a.arrayBuffer()}),e.F[c]=t,u.return(t))})}i.overrideFile=function(e,c){this.i?this.i.overrideFile(e,c):this.B[e]=c},i.clearOverriddenFiles=function(){this.B={},this.i&&this.i.clearOverriddenFiles()},i.send=function(e,c){var f=this,t,u,a,b,I,w,H,U,j;return gt(function(D){switch(D.g){case 1:return f.g.inputs?(t=1e3*(c==null?performance.now():c),_(D,f.C,2)):D.return();case 2:return _(D,f.initialize(),3);case 3:for(u=new f.h.PacketDataList,a=T(Object.keys(e)),b=a.next();!b.done;b=a.next())if(I=b.value,w=f.g.inputs[I]){t:{var $=e[I];switch(w.type){case"video":var ut=f.m[w.stream];if(ut||(ut=new K(f.h,f.D),f.m[w.stream]=ut),ut.l===0&&(ut.l=ut.h.createTexture()),typeof HTMLVideoElement!="undefined"&&$ instanceof HTMLVideoElement)var mt=$.videoWidth,pt=$.videoHeight;else typeof HTMLImageElement!="undefined"&&$ instanceof HTMLImageElement?(mt=$.naturalWidth,pt=$.naturalHeight):(mt=$.width,pt=$.height);pt={glName:ut.l,width:mt,height:pt},mt=ut.g,mt.canvas.width=pt.width,mt.canvas.height=pt.height,mt.activeTexture(mt.TEXTURE0),ut.h.bindTexture2d(ut.l),mt.texImage2D(mt.TEXTURE_2D,0,mt.RGBA,mt.RGBA,mt.UNSIGNED_BYTE,$),ut.h.bindTexture2d(0),ut=pt;break t;case"detections":for(ut=f.m[w.stream],ut||(ut=new yt(f.h),f.m[w.stream]=ut),ut.data||(ut.data=new ut.g.DetectionListData),ut.data.reset($.length),pt=0;pt<$.length;++pt){mt=$[pt];var vt=ut.data,Zt=vt.setBoundingBox,At=pt,oe=mt.T,se=new Tt;if(Lt(se,1,oe.X),Lt(se,2,oe.Y),Lt(se,3,oe.height),Lt(se,4,oe.width),Lt(se,5,oe.rotation),Lt(se,6,oe.W),oe=qe(se,Qt),Zt.call(vt,At,oe),mt.O)for(vt=0;vt<mt.O.length;++vt){se=mt.O[vt];var Ee=!!se.visibility;Zt=ut.data,At=Zt.addNormalizedLandmark,oe=pt,se=Object.assign(Object.assign({},se),{visibility:Ee?se.visibility:0}),Ee=new P,Lt(Ee,1,se.x),Lt(Ee,2,se.y),Lt(Ee,3,se.z),se.visibility&&Lt(Ee,4,se.visibility),se=qe(Ee,bt),At.call(Zt,oe,se)}if(mt.M)for(vt=0;vt<mt.M.length;++vt)Zt=ut.data,At=Zt.addClassification,oe=pt,se=mt.M[vt],Ee=new Tn,Lt(Ee,2,se.score),se.index&&Lt(Ee,1,se.index),se.label&&Lt(Ee,3,se.label),se.displayName&&Lt(Ee,4,se.displayName),se=qe(Ee,m),At.call(Zt,oe,se)}ut=ut.data;break t;default:ut={}}}switch(H=ut,U=w.stream,w.type){case"video":u.pushTexture2d(Object.assign(Object.assign({},H),{stream:U,timestamp:t}));break;case"detections":j=H,j.stream=U,j.timestamp=t,u.pushDetectionList(j);break;default:throw Error("Unknown input config type: '"+w.type+"'")}}return f.i.send(u),_(D,f.C,4);case 4:u.delete(),D.g=0}})};function x(e,c,f){var t,u,a,b,I,w,H,U,j,D,$,ut,mt,pt;return gt(function(vt){switch(vt.g){case 1:if(!f)return vt.return(c);for(t={},u=0,a=T(Object.keys(f)),b=a.next();!b.done;b=a.next())I=b.value,w=f[I],typeof w!="string"&&w.type==="texture"&&c[w.stream]!==void 0&&++u;1<u&&(e.G=!1),H=T(Object.keys(f)),b=H.next();case 2:if(b.done){vt.g=4;break}if(U=b.value,j=f[U],typeof j=="string")return mt=t,pt=U,_(vt,L(e,U,c[j]),14);if(D=c[j.stream],j.type==="detection_list"){if(D){for(var Zt=D.getRectList(),At=D.getLandmarksList(),oe=D.getClassificationsList(),se=[],Ee=0;Ee<Zt.size();++Ee){var Vn=jn(Zt.get(Ee),Tt,ue);Vn={T:{X:le(Vn,1),Y:le(Vn,2),height:le(Vn,3),width:le(Vn,4),rotation:le(Vn,5,0),W:ce(Vn,6,0)},O:A(At.get(Ee)),M:Y(jn(oe.get(Ee),V,O))},se.push(Vn)}Zt=se}else Zt=[];t[U]=Zt,vt.g=7;break}if(j.type==="proto_list"){if(D){for(Zt=Array(D.size()),At=0;At<D.size();At++)Zt[At]=D.get(At);D.delete()}else Zt=[];t[U]=Zt,vt.g=7;break}if(D===void 0){vt.g=3;break}if(j.type==="float_list"){t[U]=D,vt.g=7;break}if(j.type==="proto"){t[U]=D,vt.g=7;break}if(j.type!=="texture")throw Error("Unknown output config type: '"+j.type+"'");return $=e.s[U],$||($=new K(e.h,e.D),e.s[U]=$),_(vt,nt($,D,e.G),13);case 13:ut=vt.h,t[U]=ut;case 7:j.transform&&t[U]&&(t[U]=j.transform(t[U])),vt.g=3;break;case 14:mt[pt]=vt.h;case 3:b=H.next(),vt.g=2;break;case 4:return vt.return(t)}})}function L(e,c,f){var t;return gt(function(u){return typeof f=="number"||f instanceof Uint8Array||f instanceof e.h.Uint8BlobList?u.return(f):f instanceof e.h.Texture2dDataOut?(t=e.s[c],t||(t=new K(e.h,e.D),e.s[c]=t),u.return(nt(t,f,e.G))):u.return(void 0)})}function J(e,c){for(var f=c.name||"$",t=[].concat(k(c.wants)),u=new e.h.StringList,a=T(c.wants),b=a.next();!b.done;b=a.next())u.push_back(b.value);a=e.h.PacketListener.implement({onResults:function(I){for(var w={},H=0;H<c.wants.length;++H)w[t[H]]=I.get(H);var U=e.listeners[f];U&&(e.C=x(e,w,c.outs).then(function(j){j=U(j);for(var D=0;D<c.wants.length;++D){var $=w[t[D]];typeof $=="object"&&$.hasOwnProperty&&$.hasOwnProperty("delete")&&$.delete()}j&&(e.C=j)}))}}),e.i.attachMultiListener(u,a),u.delete()}i.onResults=function(e,c){this.listeners[c||"$"]=e},Nt("Solution",St),Nt("OptionType",{BOOL:0,NUMBER:1,Z:2,0:"BOOL",1:"NUMBER",2:"STRING"});function r(e){return e.map(d)}function d(e){e=jn(e,g,C);var c=e.getMesh();if(!c)return e;var f=new Float32Array(c.getVertexBufferList());c.getVertexBufferList=function(){return f};var t=new Uint32Array(c.getIndexBufferList());return c.getIndexBufferList=function(){return t},e}function Z(e){var c=this;e=e||{},this.g=new St({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:r}}}],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(f){var t,u,a,b;return gt(function(I){if(I.g==1){switch(t="",f){case 1:t="pose_landmark_full.tflite";break;case 2:t="pose_landmark_heavy.tflite";break;default:t="pose_landmark_lite.tflite"}return u="third_party/mediapipe/modules/pose_landmark/"+t,a=c.g.locateFile(t,""),_(I,fetch(a),3)}return I.g!=2?_(I,I.h.arrayBuffer(),2):(b=I.h,c.g.overrideFile(u,b),_(I,c.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=Z.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 gt(function(c){return _(c,e.g.initialize(),0)})},i.reset=function(){this.g.reset()},i.send=function(e){var c=this;return gt(function(f){return _(f,c.g.send(e),0)})},i.setOptions=function(e){this.g.setOptions(e)},Nt("Holistic",Z),Nt("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}}),Nt("FACEMESH_LIPS",B),Nt("FACEMESH_LEFT_EYE",Q),Nt("FACEMESH_LEFT_EYEBROW",M),Nt("FACEMESH_LEFT_IRIS",[[474,475],[475,476],[476,477],[477,474]]),Nt("FACEMESH_RIGHT_EYE",tt),Nt("FACEMESH_RIGHT_EYEBROW",ct),Nt("FACEMESH_RIGHT_IRIS",[[469,470],[470,471],[471,472],[472,469]]),Nt("FACEMESH_FACE_OVAL",s),Nt("FACEMESH_CONTOURS",X),Nt("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]]),Nt("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]]),Nt("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]]),Nt("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}),Nt("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}),Nt("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}),Nt("POSE_LANDMARKS_NEUTRAL",{NOSE:0}),Nt("matrixDataToMatrix",function(e){for(var c=e.getCols(),f=e.getRows(),t=e.getPackedDataList(),u=[],a=0;a<f;a++)u.push(Array(c));for(a=0;a<f;a++)for(var b=0;b<c;b++){var I=e.getLayout()===1?a*c+b:b*f+a;u[a][b]=t[I]}return u}),Nt("VERSION","0.5.1635989137")}).call(bi);const yi={};(function(){var i;function n(r){var d=0;return function(){return d<r.length?{done:!1,value:r[d++]}:{done:!0}}}var o=typeof Object.defineProperties=="function"?Object.defineProperty:function(r,d,Z){return r==Array.prototype||r==Object.prototype||(r[d]=Z.value),r};function p(r){r=[typeof globalThis=="object"&&globalThis,r,typeof window=="object"&&window,typeof self=="object"&&self,typeof global=="object"&&global];for(var d=0;d<r.length;++d){var Z=r[d];if(Z&&Z.Math==Math)return Z}throw Error("Cannot find global object")}var y=p(this);function S(r,d){if(d)t:{var Z=y;r=r.split(".");for(var e=0;e<r.length-1;e++){var c=r[e];if(!(c in Z))break t;Z=Z[c]}r=r[r.length-1],e=Z[r],d=d(e),d!=e&&d!=null&&o(Z,r,{configurable:!0,writable:!0,value:d})}}S("Symbol",function(r){function d(f){if(this instanceof d)throw new TypeError("Symbol is not a constructor");return new Z(e+(f||"")+"_"+c++,f)}function Z(f,t){this.g=f,o(this,"description",{configurable:!0,writable:!0,value:t})}if(r)return r;Z.prototype.toString=function(){return this.g};var e="jscomp_symbol_"+(1e9*Math.random()>>>0)+"_",c=0;return d}),S("Symbol.iterator",function(r){if(r)return r;r=Symbol("Symbol.iterator");for(var d="Array Int8Array Uint8Array Uint8ClampedArray Int16Array Uint16Array Int32Array Uint32Array Float32Array Float64Array".split(" "),Z=0;Z<d.length;Z++){var e=y[d[Z]];typeof e=="function"&&typeof e.prototype[r]!="function"&&o(e.prototype,r,{configurable:!0,writable:!0,value:function(){return F(n(this))}})}return r});function F(r){return r={next:r},r[Symbol.iterator]=function(){return this},r}function T(r){var d=typeof Symbol!="undefined"&&Symbol.iterator&&r[Symbol.iterator];return d?d.call(r):{next:n(r)}}function k(r){if(!(r instanceof Array)){r=T(r);for(var d,Z=[];!(d=r.next()).done;)Z.push(d.value);r=Z}return r}var rt=typeof Object.create=="function"?Object.create:function(r){function d(){}return d.prototype=r,new d},z;if(typeof Object.setPrototypeOf=="function")z=Object.setPrototypeOf;else{var st;t:{var Gt={a:!0},Vt={};try{Vt.__proto__=Gt,st=Vt.a;break t}catch{}st=!1}z=st?function(r,d){if(r.__proto__=d,r.__proto__!==d)throw new TypeError(r+" is not extensible");return r}:null}var dt=z;function ht(r,d){if(r.prototype=rt(d.prototype),r.prototype.constructor=r,dt)dt(r,d);else for(var Z in d)if(Z!="prototype")if(Object.defineProperties){var e=Object.getOwnPropertyDescriptor(d,Z);e&&Object.defineProperty(r,Z,e)}else r[Z]=d[Z];r.na=d.prototype}function Yt(){this.l=!1,this.i=null,this.h=void 0,this.g=1,this.u=this.o=0,this.j=null}function Ft(r){if(r.l)throw new TypeError("Generator is already running");r.l=!0}Yt.prototype.s=function(r){this.h=r};function Mt(r,d){r.j={da:d,ea:!0},r.g=r.o||r.u}Yt.prototype.return=function(r){this.j={return:r},this.g=this.u};function _(r,d,Z){return r.g=Z,{value:d}}function Ae(r){this.g=new Yt,this.h=r}function un(r,d){Ft(r.g);var Z=r.g.i;return Z?We(r,"return"in Z?Z.return:function(e){return{value:e,done:!0}},d,r.g.return):(r.g.return(d),Dt(r))}function We(r,d,Z,e){try{var c=d.call(r.g.i,Z);if(!(c instanceof Object))throw new TypeError("Iterator result "+c+" is not an object");if(!c.done)return r.g.l=!1,c;var f=c.value}catch(t){return r.g.i=null,Mt(r.g,t),Dt(r)}return r.g.i=null,e.call(r.g,f),Dt(r)}function Dt(r){for(;r.g.g;)try{var d=r.h(r.g);if(d)return r.g.l=!1,{value:d.value,done:!1}}catch(Z){r.g.h=void 0,Mt(r.g,Z)}if(r.g.l=!1,r.g.j){if(d=r.g.j,r.g.j=null,d.ea)throw d.da;return{value:d.return,done:!0}}return{value:void 0,done:!0}}function Mn(r){this.next=function(d){return Ft(r.g),r.g.i?d=We(r,r.g.i.next,d,r.g.s):(r.g.s(d),d=Dt(r)),d},this.throw=function(d){return Ft(r.g),r.g.i?d=We(r,r.g.i.throw,d,r.g.s):(Mt(r.g,d),d=Dt(r)),d},this.return=function(d){return un(r,d)},this[Symbol.iterator]=function(){return this}}function ae(r){function d(e){return r.next(e)}function Z(e){return r.throw(e)}return new Promise(function(e,c){function f(t){t.done?e(t.value):Promise.resolve(t.value).then(d,Z).then(f,c)}f(r.next())})}function gt(r){return ae(new Mn(new Ae(r)))}S("Promise",function(r){function d(t){this.h=0,this.i=void 0,this.g=[],this.s=!1;var u=this.j();try{t(u.resolve,u.reject)}catch(a){u.reject(a)}}function Z(){this.g=null}function e(t){return t instanceof d?t:new d(function(u){u(t)})}if(r)return r;Z.prototype.h=function(t){if(this.g==null){this.g=[];var u=this;this.i(function(){u.l()})}this.g.push(t)};var c=y.setTimeout;Z.prototype.i=function(t){c(t,0)},Z.prototype.l=function(){for(;this.g&&this.g.length;){var t=this.g;this.g=[];for(var u=0;u<t.length;++u){var a=t[u];t[u]=null;try{a()}catch(b){this.j(b)}}}this.g=null},Z.prototype.j=function(t){this.i(function(){throw t})},d.prototype.j=function(){function t(b){return function(I){a||(a=!0,b.call(u,I))}}var u=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 u=t!=null;break t;case"function":u=!0;break t;default:u=!1}u?this.A(t):this.o(t)}},d.prototype.A=function(t){var u=void 0;try{u=t.then}catch(a){this.l(a);return}typeof u=="function"?this.I(u,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,u){if(this.h!=0)throw Error("Cannot settle("+t+", "+u+"): Promise already settled in state"+this.h);this.h=t,this.i=u,this.h===2&&this.G(),this.B()},d.prototype.G=function(){var t=this;c(function(){if(t.C()){var u=y.console;typeof u!="undefined"&&u.error(t.i)}},1)},d.prototype.C=function(){if(this.s)return!1;var t=y.CustomEvent,u=y.Event,a=y.dispatchEvent;return typeof a=="undefined"?!0:(typeof t=="function"?t=new t("unhandledrejection",{cancelable:!0}):typeof u=="function"?t=new u("unhandledrejection",{cancelable:!0}):(t=y.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)f.h(this.g[t]);this.g=null}};var f=new Z;return d.prototype.H=function(t){var u=this.j();t.M(u.resolve,u.reject)},d.prototype.I=function(t,u){var a=this.j();try{t.call(u,a.resolve,a.reject)}catch(b){a.reject(b)}},d.prototype.then=function(t,u){function a(H,U){return typeof H=="function"?function(j){try{b(H(j))}catch(D){I(D)}}:U}var b,I,w=new d(function(H,U){b=H,I=U});return this.M(a(t,b),a(u,I)),w},d.prototype.catch=function(t){return this.then(void 0,t)},d.prototype.M=function(t,u){function a(){switch(b.h){case 1:t(b.i);break;case 2:u(b.i);break;default:throw Error("Unexpected state: "+b.h)}}var b=this;this.g==null?f.h(a):this.g.push(a),this.s=!0},d.resolve=e,d.reject=function(t){return new d(function(u,a){a(t)})},d.race=function(t){return new d(function(u,a){for(var b=T(t),I=b.next();!I.done;I=b.next())e(I.value).M(u,a)})},d.all=function(t){var u=T(t),a=u.next();return a.done?e([]):new d(function(b,I){function w(j){return function(D){H[j]=D,U--,U==0&&b(H)}}var H=[],U=0;do H.push(void 0),U++,e(a.value).M(w(H.length-1),I),a=u.next();while(!a.done)})},d});function fn(r,d){r instanceof String&&(r+="");var Z=0,e=!1,c={next:function(){if(!e&&Z<r.length){var f=Z++;return{value:d(f,r[f]),done:!1}}return e=!0,{done:!0,value:void 0}}};return c[Symbol.iterator]=function(){return c},c}var An=typeof Object.assign=="function"?Object.assign:function(r,d){for(var Z=1;Z<arguments.length;Z++){var e=arguments[Z];if(e)for(var c in e)Object.prototype.hasOwnProperty.call(e,c)&&(r[c]=e[c])}return r};S("Object.assign",function(r){return r||An}),S("Object.is",function(r){return r||function(d,Z){return d===Z?d!==0||1/d===1/Z:d!==d&&Z!==Z}}),S("Array.prototype.includes",function(r){return r||function(d,Z){var e=this;e instanceof String&&(e=String(e));var c=e.length;for(Z=Z||0,0>Z&&(Z=Math.max(Z+c,0));Z<c;Z++){var f=e[Z];if(f===d||Object.is(f,d))return!0}return!1}}),S("String.prototype.includes",function(r){return r||function(d,Z){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,Z||0)!==-1}}),S("Array.prototype.keys",function(r){return r||function(){return fn(this,function(d){return d})}});var Ve=this||self;function Nt(r,d){r=r.split(".");var Z=Ve;r[0]in Z||typeof Z.execScript=="undefined"||Z.execScript("var "+r[0]);for(var e;r.length&&(e=r.shift());)r.length||d===void 0?Z[e]&&Z[e]!==Object.prototype[e]?Z=Z[e]:Z=Z[e]={}:Z[e]=d}function Le(){throw Error("Invalid UTF8")}function nn(r,d){return d=String.fromCharCode.apply(null,d),r==null?d:r+d}var Gn,wn=typeof TextDecoder!="undefined",Rn,Cn=typeof TextEncoder!="undefined",cn={},mn=null;function Jn(r){var d;d===void 0&&(d=0),Be(),d=cn[d];for(var Z=Array(Math.floor(r.length/3)),e=d[64]||"",c=0,f=0;c<r.length-2;c+=3){var t=r[c],u=r[c+1],a=r[c+2],b=d[t>>2];t=d[(t&3)<<4|u>>4],u=d[(u&15)<<2|a>>6],a=d[a&63],Z[f++]=b+t+u+a}switch(b=0,a=e,r.length-c){case 2:b=r[c+1],a=d[(b&15)<<2]||e;case 1:r=r[c],Z[f]=d[r>>2]+d[(r&3)<<4|b>>4]+a+e}return Z.join("")}function Fn(r){var d=r.length,Z=3*d/4;Z%3?Z=Math.floor(Z):"=.".indexOf(r[d-1])!=-1&&(Z="=.".indexOf(r[d-2])!=-1?Z-2:Z-1);var e=new Uint8Array(Z),c=0;return je(r,function(f){e[c++]=f}),c!==Z?e.subarray(0,c):e}function je(r,d){function Z(a){for(;e<r.length;){var b=r.charAt(e++),I=mn[b];if(I!=null)return I;if(!/^[\s\xa0]*$/.test(b))throw Error("Unknown base64 encoding at char: "+b)}return a}Be();for(var e=0;;){var c=Z(-1),f=Z(0),t=Z(64),u=Z(64);if(u===64&&c===-1)break;d(c<<2|f>>4),t!=64&&(d(f<<4&240|t>>2),u!=64&&d(t<<6&192|u))}}function Be(){if(!mn){mn={};for(var r="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789".split(""),d=["+/=","+/","-_=","-_.","-_"],Z=0;5>Z;Z++){var e=r.concat(d[Z].split(""));cn[Z]=e;for(var c=0;c<e.length;c++){var f=e[c];mn[f]===void 0&&(mn[f]=c)}}}}var xn=typeof Uint8Array=="function";function Xn(r){return xn&&r!=null&&r instanceof Uint8Array}var de;function Se(r){if(this.L=r,r!==null&&r.length===0)throw Error("ByteString should be constructed with non-empty values")}var ze=typeof Uint8Array.prototype.slice=="function",ee=0,Xe=0;function rn(r,d){if(r.constructor===Uint8Array)return r;if(r.constructor===ArrayBuffer)return new Uint8Array(r);if(r.constructor===Array)return new Uint8Array(r);if(r.constructor===String)return Fn(r);if(r.constructor===Se)return!d&&(d=r.L)&&d.constructor===Uint8Array?d:(d=r.L,d=d==null||Xn(d)?d:typeof d=="string"?Fn(d):null,(r=r.L=d)?new Uint8Array(r):de||(de=new Uint8Array(0)));if(r instanceof Uint8Array)return new Uint8Array(r.buffer,r.byteOffset,r.byteLength);throw Error("Type not convertible to a Uint8Array, expected a Uint8Array, an ArrayBuffer, a base64 encoded string, or Array of numbers")}function Ue(r,d){return Error("Invalid wire type: "+r+" (at position "+d+")")}function _t(){return Error("Failed to read varint, encoding is invalid.")}function ge(r,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,r&&He(this,r)}function He(r,d){r.h=rn(d,r.v),r.j=0,r.i=r.h.length,r.g=r.j}ge.prototype.reset=function(){this.g=this.j};function Bt(r){if(r.g>r.i)throw Error("Tried to read past the end of the data "+r.g+" > "+r.i)}function xe(r){var d=r.h,Z=d[r.g],e=Z&127;if(128>Z)return r.g+=1,Bt(r),e;if(Z=d[r.g+1],e|=(Z&127)<<7,128>Z)return r.g+=2,Bt(r),e;if(Z=d[r.g+2],e|=(Z&127)<<14,128>Z)return r.g+=3,Bt(r),e;if(Z=d[r.g+3],e|=(Z&127)<<21,128>Z)return r.g+=4,Bt(r),e;if(Z=d[r.g+4],r.g+=5,e|=(Z&15)<<28,128>Z)return Bt(r),e;if(128<=d[r.g++]&&128<=d[r.g++]&&128<=d[r.g++]&&128<=d[r.g++]&&128<=d[r.g++])throw _t();return Bt(r),e}var jt=[];function be(){this.g=[]}be.prototype.length=function(){return this.g.length},be.prototype.end=function(){var r=this.g;return this.g=[],r};function Te(r,d){for(;127<d;)r.g.push(d&127|128),d>>>=7;r.g.push(d)}function Qe(r){var d={},Z=d.W===void 0?!1:d.W;this.l={v:d.v===void 0?!1:d.v},this.W=Z,d=this.l,jt.length?(Z=jt.pop(),d&&(Z.v=d.v),r&&He(Z,r),r=Z):r=new ge(r,d),this.g=r,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 Ge(r){var d=r.g;if(d.g==d.i)return!1;r.j=r.g.g;var Z=xe(r.g)>>>0;if(d=Z>>>3,Z&=7,!(0<=Z&&5>=Z))throw Ue(Z,r.j);if(1>d)throw Error("Invalid field number: "+d+" (at position "+r.j+")");return r.i=d,r.h=Z,!0}function zt(r){switch(r.h){case 0:if(r.h!=0)zt(r);else t:{r=r.g;for(var d=r.g,Z=d+10;d<Z;)if((r.h[d++]&128)===0){r.g=d,Bt(r);break t}throw _t()}break;case 1:r=r.g,r.g+=8,Bt(r);break;case 2:r.h!=2?zt(r):(d=xe(r.g)>>>0,r=r.g,r.g+=d,Bt(r));break;case 5:r=r.g,r.g+=4,Bt(r);break;case 3:d=r.i;do{if(!Ge(r))throw Error("Unmatched start-group tag: stream EOF");if(r.h==4){if(r.i!=d)throw Error("Unmatched end-group tag");break}zt(r)}while(1);break;default:throw Ue(r.h,r.j)}}var Me=[];function Pe(){this.i=[],this.h=0,this.g=new be}function Ie(r,d){d.length!==0&&(r.i.push(d),r.h+=d.length)}function Wn(r,d){if(d=d.ba){Ie(r,r.g.end());for(var Z=0;Z<d.length;Z++)Ie(r,d[Z])}}var on=typeof Symbol=="function"&&typeof Symbol()=="symbol"?Symbol(void 0):void 0;function Oe(r,d){Object.isFrozen(r)||(on?r[on]|=d:r.N!==void 0?r.N|=d:Object.defineProperties(r,{N:{value:d,configurable:!0,writable:!0,enumerable:!1}}))}function sn(r){var d;return on?d=r[on]:d=r.N,d==null?0:d}function Ze(r){return Oe(r,1),r}function Ye(r){return Array.isArray(r)?!!(sn(r)&2):!1}function ve(r){if(!Array.isArray(r))throw Error("cannot mark non-array as immutable");Oe(r,2)}function ne(r){return r!==null&&typeof r=="object"&&!Array.isArray(r)&&r.constructor===Object}var _e=Object.freeze(Ze([]));function qt(r){if(Ye(r.m))throw Error("Cannot mutate an immutable Message")}var Pt=typeof Symbol!="undefined"&&typeof Symbol.hasInstance!="undefined";function an(r){return{value:r,configurable:!1,writable:!1,enumerable:!1}}function he(r,d,Z){return d===-1?null:d>=r.i?r.g?r.g[d]:void 0:(Z===void 0?0:Z)&&r.g&&(Z=r.g[d],Z!=null)?Z:r.m[d+r.h]}function Ct(r,d,Z,e){e=e===void 0?!1:e,qt(r),d<r.i&&!e?r.m[d+r.h]=Z:(r.g||(r.g=r.m[r.i+r.h]={}))[d]=Z}function Rt(r,d,Z,e){Z=Z===void 0?!0:Z,e=e===void 0?!1:e;var c=he(r,d,e);return c==null&&(c=_e),Ye(r.m)?Z&&(ve(c),Object.freeze(c)):(c===_e||Ye(c))&&(c=Ze(c.slice()),Ct(r,d,c,e)),c}function re(r,d,Z){return r=he(r,d),r=r==null?r:+r,r==null?Z===void 0?0:Z:r}function we(r,d,Z,e){r.j||(r.j={});var c=Ye(r.m),f=r.j[Z];if(!f){e=Rt(r,Z,!0,e===void 0?!1:e),f=[],c=c||Ye(e);for(var t=0;t<e.length;t++)f[t]=new d(e[t]),c&&ve(f[t].m);c&&(ve(f),Object.freeze(f)),r.j[Z]=f}return f}function te(r,d,Z,e,c){var f=f===void 0?!1:f;return qt(r),f=we(r,Z,d,f),Z=e||new Z,r=Rt(r,d),c!=null?(f.splice(c,0,Z),r.splice(c,0,Z.m)):(f.push(Z),r.push(Z.m)),Z}function ie(r,d){return r=he(r,d),r==null?0:r}function et(r,d){return r=he(r,d),r==null?"":r}function ot(r){switch(typeof r){case"number":return isFinite(r)?r:String(r);case"object":if(r&&!Array.isArray(r)){if(Xn(r))return Jn(r);if(r instanceof Se){var d=r.L;return d=d==null||typeof d=="string"?d:xn&&d instanceof Uint8Array?Jn(d):null,(r.L=d)||""}}}return r}function at(r){var d=le;return d=d===void 0?Lt:d,ce(r,d)}function Ot(r,d){if(r!=null){if(Array.isArray(r))r=ce(r,d);else if(ne(r)){var Z={},e;for(e in r)Z[e]=Ot(r[e],d);r=Z}else r=d(r);return r}}function ce(r,d){for(var Z=r.slice(),e=0;e<Z.length;e++)Z[e]=Ot(Z[e],d);return Array.isArray(r)&&sn(r)&1&&Ze(Z),Z}function le(r){return r&&typeof r=="object"&&r.toJSON?r.toJSON():(r=ot(r),Array.isArray(r)?at(r):r)}function Lt(r){return Xn(r)?new Uint8Array(r):r}function fe(r,d,Z){r||(r=Ce),Ce=null;var e=this.constructor.h;r||(r=e?[e]:[]),this.h=(e?0:-1)-(this.constructor.g||0),this.j=void 0,this.m=r;t:{if(e=this.m.length,r=e-1,e&&(e=this.m[r],ne(e))){this.i=r-this.h,this.g=e;break t}d!==void 0&&-1<d?(this.i=Math.max(d,r+1-this.h),this.g=void 0):this.i=Number.MAX_VALUE}if(Z)for(d=0;d<Z.length;d++)if(r=Z[d],r<this.i)r+=this.h,(e=this.m[r])?Array.isArray(e)&&Ze(e):this.m[r]=_e;else{e=this.g||(this.g=this.m[this.i+this.h]={});var c=e[r];c?Array.isArray(c)&&Ze(c):e[r]=_e}}fe.prototype.toJSON=function(){return at(this.m)},fe.prototype.toString=function(){return this.m.toString()};var Ce;function De(){fe.apply(this,arguments)}if(ht(De,fe),Pt){var $e={};Object.defineProperties(De,($e[Symbol.hasInstance]=an(function(){throw Error("Cannot perform instanceof checks for MutableMessage")}),$e))}function dn(r,d,Z){if(Z){var e={},c;for(c in Z){var f=Z[c],t=f.ha;t||(e.F=f.la||f.fa.P,f.aa?(e.U=In(f.aa),t=function(u){return function(a,b,I){return u.F(a,b,I,u.U)}}(e)):f.ca?(e.T=Ke(f.X.g,f.ca),t=function(u){return function(a,b,I){return u.F(a,b,I,u.T)}}(e)):t=e.F,f.ha=t),t(d,r,f.X),e={F:e.F,U:e.U,T:e.T}}}Wn(d,r)}var pn=Symbol();function Fe(r,d,Z){return r[pn]||(r[pn]=function(e,c){return d(e,c,Z)})}function qe(r){var d=r[pn];if(!d){var Z=m(r);d=function(e,c){return W(e,c,Z)},r[pn]=d}return d}function jn(r){var d=r.aa;if(d)return qe(d);if(d=r.ka)return Fe(r.X.g,d,r.ca)}function tn(r){var d=jn(r),Z=r.X,e=r.fa.O;return d?function(c,f){return e(c,f,Z,d)}:function(c,f){return e(c,f,Z)}}function Ne(r,d,Z,e,c,f){r=r();var t=0;for(r.length&&typeof r[0]!="number"&&(Z(d,r[0]),t++);t<r.length;){Z=r[t++];for(var u=t+1;u<r.length&&typeof r[u]!="number";)u++;var a=r[t++];switch(u-=t,u){case 0:e(d,Z,a);break;case 1:e(d,Z,a,r[t++]);break;case 2:c(d,Z,a,r[t++],r[t++]);break;case 3:u=r[t++];var b=r[t++],I=r[t++];Array.isArray(I)?c(d,Z,a,u,b,I):f(d,Z,a,u,b,I);break;case 4:f(d,Z,a,r[t++],r[t++],r[t++],r[t++]);break;default:throw Error("unexpected number of binary field arguments: "+u)}}return d}var gn=Symbol();function In(r){var d=r[gn];if(!d){var Z=ln(r);d=function(e,c){return E(e,c,Z)},r[gn]=d}return d}function Ke(r,d){var Z=r[gn];return Z||(Z=function(e,c){return dn(e,c,d)},r[gn]=Z),Z}var En=Symbol();function en(r,d){r.push(d)}function Zn(r,d,Z){r.push(d,Z.P)}function Sn(r,d,Z,e,c){var f=In(c),t=Z.P;r.push(d,function(u,a,b){return t(u,a,b,e,f)})}function Kn(r,d,Z,e,c,f){var t=Ke(e,f),u=Z.P;r.push(d,function(a,b,I){return u(a,b,I,e,t)})}function ln(r){var d=r[En];return d||Ne(r,r[En]=[],en,Zn,Sn,Kn)}var Ln=Symbol();function _n(r,d){r[0]=d}function Qn(r,d,Z,e){var c=Z.O;r[d]=e?function(f,t,u){return c(f,t,u,e)}:c}function Tn(r,d,Z,e,c,f){var t=Z.O,u=qe(c);r[d]=function(a,b,I){return t(a,b,I,e,u,f)}}function Hn(r,d,Z,e,c,f,t){var u=Z.O,a=Fe(e,c,f);r[d]=function(b,I,w){return u(b,I,w,e,a,t)}}function m(r){var d=r[Ln];return d||Ne(r,r[Ln]={},_n,Qn,Tn,Hn)}function W(r,d,Z){for(;Ge(d)&&d.h!=4;){var e=d.i,c=Z[e];if(!c){var f=Z[0];f&&(f=f[e])&&(c=Z[e]=tn(f))}if((!c||!c(d,r,e))&&(c=d,e=r,f=c.j,zt(c),!c.W)){var t=c.g.h;c=c.g.g,c=f===c?de||(de=new Uint8Array(0)):ze?t.slice(f,c):new Uint8Array(t.subarray(f,c)),(f=e.ba)?f.push(c):e.ba=[c]}}return r}function V(r,d,Z){if(Me.length){var e=Me.pop();r&&(He(e.g,r),e.i=-1,e.h=-1),r=e}else r=new Qe(r);try{return W(new d,r,m(Z))}finally{d=r.g,d.h=null,d.j=0,d.i=0,d.g=0,d.v=!1,r.i=-1,r.h=-1,100>Me.length&&Me.push(r)}}function E(r,d,Z){for(var e=Z.length,c=e%2==1,f=c?1:0;f<e;f+=2)(0,Z[f+1])(d,r,Z[f]);dn(r,d,c?Z[0]:void 0)}function O(r,d){var Z=new Pe;E(r,Z,ln(d)),Ie(Z,Z.g.end()),r=new Uint8Array(Z.h),d=Z.i;for(var e=d.length,c=0,f=0;f<e;f++){var t=d[f];r.set(t,c),c+=t.length}return Z.i=[r],r}function lt(r,d){return{O:r,P:d}}var P=lt(function(r,d,Z){if(r.h!==5)return!1;r=r.g;var e=r.h[r.g],c=r.h[r.g+1],f=r.h[r.g+2],t=r.h[r.g+3];return r.g+=4,Bt(r),c=(e<<0|c<<8|f<<16|t<<24)>>>0,r=2*(c>>31)+1,e=c>>>23&255,c&=8388607,Ct(d,Z,e==255?c?NaN:1/0*r:e==0?r*Math.pow(2,-149)*c:r*Math.pow(2,e-150)*(c+Math.pow(2,23))),!0},function(r,d,Z){if(d=he(d,Z),d!=null){Te(r.g,8*Z+5),r=r.g;var e=d;e=(Z=0>e?1:0)?-e:e,e===0?0<1/e?ee=Xe=0:(Xe=0,ee=2147483648):isNaN(e)?(Xe=0,ee=2147483647):34028234663852886e22<e?(Xe=0,ee=(Z<<31|2139095040)>>>0):11754943508222875e-54>e?(e=Math.round(e/Math.pow(2,-149)),Xe=0,ee=(Z<<31|e)>>>0):(d=Math.floor(Math.log(e)/Math.LN2),e*=Math.pow(2,-d),e=Math.round(8388608*e),16777216<=e&&++d,Xe=0,ee=(Z<<31|d+127<<23|e&8388607)>>>0),Z=ee,r.g.push(Z>>>0&255),r.g.push(Z>>>8&255),r.g.push(Z>>>16&255),r.g.push(Z>>>24&255)}}),it=lt(function(r,d,Z){if(r.h!==0)return!1;for(var e=r.g,c=128,f=0,t=r=0;4>t&&128<=c;t++)c=e.h[e.g++],Bt(e),f|=(c&127)<<7*t;if(128<=c&&(c=e.h[e.g++],Bt(e),f|=(c&127)<<28,r|=(c&127)>>4),128<=c)for(t=0;5>t&&128<=c;t++)c=e.h[e.g++],Bt(e),r|=(c&127)<<7*t+3;if(128>c)e=f>>>0,c=r>>>0,(r=c&2147483648)&&(e=~e+1>>>0,c=~c>>>0,e==0&&(c=c+1>>>0)),e=4294967296*c+(e>>>0);else throw _t();return Ct(d,Z,r?-e:e),!0},function(r,d,Z){if(d=he(d,Z),d!=null&&d!=null){Te(r.g,8*Z),r=r.g;var e=d;for(Z=0>e,e=Math.abs(e),d=e>>>0,e=Math.floor((e-d)/4294967296),e>>>=0,Z&&(e=~e>>>0,d=(~d>>>0)+1,4294967295<d&&(d=0,e++,4294967295<e&&(e=0))),ee=d,Xe=e,Z=ee,d=Xe;0<d||127<Z;)r.g.push(Z&127|128),Z=(Z>>>7|d<<25)>>>0,d>>>=7;r.g.push(Z)}}),bt=lt(function(r,d,Z){return r.h!==0?!1:(Ct(d,Z,xe(r.g)),!0)},function(r,d,Z){if(d=he(d,Z),d!=null&&d!=null)if(Te(r.g,8*Z),r=r.g,Z=d,0<=Z)Te(r,Z);else{for(d=0;9>d;d++)r.g.push(Z&127|128),Z>>=7;r.g.push(1)}}),xt=lt(function(r,d,Z){if(r.h!==2)return!1;var e=xe(r.g)>>>0;r=r.g;var c=r.g;r.g+=e,Bt(r),r=r.h;var f;if(wn)(f=Gn)||(f=Gn=new TextDecoder("utf-8",{fatal:!0})),f=f.decode(r.subarray(c,c+e));else{e=c+e;for(var t=[],u=null,a,b,I;c<e;)a=r[c++],128>a?t.push(a):224>a?c>=e?Le():(b=r[c++],194>a||(b&192)!==128?(c--,Le()):t.push((a&31)<<6|b&63)):240>a?c>=e-1?Le():(b=r[c++],(b&192)!==128||a===224&&160>b||a===237&&160<=b||((f=r[c++])&192)!==128?(c--,Le()):t.push((a&15)<<12|(b&63)<<6|f&63)):244>=a?c>=e-2?Le():(b=r[c++],(b&192)!==128||(a<<28)+(b-144)>>30!==0||((f=r[c++])&192)!==128||((I=r[c++])&192)!==128?(c--,Le()):(a=(a&7)<<18|(b&63)<<12|(f&63)<<6|I&63,a-=65536,t.push((a>>10&1023)+55296,(a&1023)+56320))):Le(),8192<=t.length&&(u=nn(u,t),t.length=0);f=nn(u,t)}return Ct(d,Z,f),!0},function(r,d,Z){if(d=he(d,Z),d!=null){var e=!1;if(e=e===void 0?!1:e,Cn){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 c=0,f=new Uint8Array(3*d.length),t=0;t<d.length;t++){var u=d.charCodeAt(t);if(128>u)f[c++]=u;else{if(2048>u)f[c++]=u>>6|192;else{if(55296<=u&&57343>=u){if(56319>=u&&t<d.length){var a=d.charCodeAt(++t);if(56320<=a&&57343>=a){u=1024*(u-55296)+a-56320+65536,f[c++]=u>>18|240,f[c++]=u>>12&63|128,f[c++]=u>>6&63|128,f[c++]=u&63|128;continue}else t--}if(e)throw Error("Found an unpaired surrogate");u=65533}f[c++]=u>>12|224,f[c++]=u>>6&63|128}f[c++]=u&63|128}}d=f.subarray(0,c)}Te(r.g,8*Z+2),Te(r.g,d.length),Ie(r,r.g.end()),Ie(r,d)}}),Ut=lt(function(r,d,Z,e,c){if(r.h!==2)return!1;d=te(d,Z,e),Z=r.g.i,e=xe(r.g)>>>0;var f=r.g.g+e,t=f-Z;if(0>=t&&(r.g.i=f,c(d,r),t=f-r.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 r.g.g=f,r.g.i=Z,!0},function(r,d,Z,e,c){if(d=we(d,e,Z),d!=null)for(e=0;e<d.length;e++){var f=r;Te(f.g,8*Z+2);var t=f.g.end();Ie(f,t),t.push(f.h),f=t,c(d[e],r),t=r;var u=f.pop();for(u=t.h+t.g.length()-u;127<u;)f.push(u&127|128),u>>>=7,t.h++;f.push(u),t.h++}});function Jt(){De.apply(this,arguments)}if(ht(Jt,De),Pt){var $t={};Object.defineProperties(Jt,($t[Symbol.hasInstance]=an(Object[Symbol.hasInstance]),$t))}function Et(r){Jt.call(this,r)}ht(Et,Jt);function Tt(){return[1,bt,2,P,3,xt,4,xt]}function kt(r){Jt.call(this,r,-1,ue)}ht(kt,Jt),kt.prototype.addClassification=function(r,d){return te(this,1,Et,r,d),this};function Qt(){return[1,Ut,Et,Tt]}var ue=[1];function me(r){Jt.call(this,r)}ht(me,Jt);function ye(){return[1,P,2,P,3,P,4,P,5,P]}function Je(r){Jt.call(this,r,-1,g)}ht(Je,Jt);function h(){return[1,Ut,me,ye]}var g=[1];function G(r){Jt.call(this,r)}ht(G,Jt);function C(){return[1,P,2,P,3,P,4,P,5,P,6,it]}var B=[[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]],Q=[[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]],tt=[[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(k(B),k(Q),k(M),k(tt),k(ct),k(s));function R(r,d,Z){if(Z=r.createShader(Z===0?r.VERTEX_SHADER:r.FRAGMENT_SHADER),r.shaderSource(Z,d),r.compileShader(Z),!r.getShaderParameter(Z,r.COMPILE_STATUS))throw Error(`Could not compile WebGL shader.
|
|
54
|
+
`+f.getProgramInfoLog(a));t=e.m=a,f.useProgram(t),u=f.getUniformLocation(t,"sampler0"),e.j={I:f.getAttribLocation(t,"aVertex"),H:f.getAttribLocation(t,"aTex"),ca:u},e.s=f.createBuffer(),f.bindBuffer(f.ARRAY_BUFFER,e.s),f.enableVertexAttribArray(e.j.I),f.vertexAttribPointer(e.j.I,2,f.FLOAT,!1,0,0),f.bufferData(f.ARRAY_BUFFER,new Float32Array([-1,-1,-1,1,1,1,1,-1]),f.STATIC_DRAW),f.bindBuffer(f.ARRAY_BUFFER,null),e.o=f.createBuffer(),f.bindBuffer(f.ARRAY_BUFFER,e.o),f.enableVertexAttribArray(e.j.H),f.vertexAttribPointer(e.j.H,2,f.FLOAT,!1,0,0),f.bufferData(f.ARRAY_BUFFER,new Float32Array([0,1,0,0,1,0,1,1]),f.STATIC_DRAW),f.bindBuffer(f.ARRAY_BUFFER,null),f.uniform1i(u,0)}t=e.j,f.useProgram(e.m),f.canvas.width=c.width,f.canvas.height=c.height,f.viewport(0,0,c.width,c.height),f.activeTexture(f.TEXTURE0),e.h.bindTexture2d(c.glName),f.enableVertexAttribArray(t.I),f.bindBuffer(f.ARRAY_BUFFER,e.s),f.vertexAttribPointer(t.I,2,f.FLOAT,!1,0,0),f.enableVertexAttribArray(t.H),f.bindBuffer(f.ARRAY_BUFFER,e.o),f.vertexAttribPointer(t.H,2,f.FLOAT,!1,0,0),f.bindFramebuffer(f.DRAW_FRAMEBUFFER?f.DRAW_FRAMEBUFFER:f.FRAMEBUFFER,null),f.clearColor(0,0,0,0),f.clear(f.COLOR_BUFFER_BIT),f.colorMask(!0,!0,!0,!0),f.drawArrays(f.TRIANGLE_FAN,0,4),f.disableVertexAttribArray(t.I),f.disableVertexAttribArray(t.H),f.bindBuffer(f.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,c){return c+e}function It(e,c){window[e]=c}function ft(e){var c=document.createElement("script");return c.setAttribute("src",e),c.setAttribute("crossorigin","anonymous"),new Promise(function(f){c.addEventListener("load",function(){f()},!1),c.addEventListener("error",function(){f()},!1),document.body.appendChild(c)})}function Wt(){return gt(function(e){switch(e.g){case 1:return e.m=2,_(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 St(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 c=window.location.pathname.toString().substring(0,window.location.pathname.toString().lastIndexOf("/"))+"/";else if(typeof location!="undefined")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.S=c,e.options){c=L(Object.keys(e.options));for(var f=c.next();!f.done;f=c.next()){f=f.value;var t=e.options[f].default;t!==void 0&&(this.j[f]=typeof t=="function"?t():t)}}}i=St.prototype,i.close=function(){return this.i&&this.i.delete(),Promise.resolve()};function wt(e){var c,f,t,u,a,b,I,w,H,U,j;return gt(function(D){switch(D.g){case 1:return e.R?(c=e.g.files===void 0?[]:typeof e.g.files=="function"?e.g.files(e.j):e.g.files,_(D,Wt(),2)):D.return();case 2:if(f=D.h,typeof window=="object")return It("createMediapipeSolutionsWasm",{locateFile:e.locateFile}),It("createMediapipeSolutionsPackedAssets",{locateFile:e.locateFile}),b=c.filter(function($){return $.data!==void 0}),I=c.filter(function($){return $.data===void 0}),w=Promise.all(b.map(function($){var ut=v(e,$.url);if($.path!==void 0){var mt=$.path;ut=ut.then(function(pt){return e.overrideFile(mt,pt),Promise.resolve(pt)})}return ut})),H=Promise.all(I.map(function($){return $.simd===void 0||$.simd&&f||!$.simd&&!f?ft(e.locateFile($.url,e.S)):Promise.resolve()})).then(function(){var $,ut,mt;return gt(function(pt){if(pt.g==1)return $=window.createMediapipeSolutionsWasm,ut=window.createMediapipeSolutionsPackedAssets,mt=e,_(pt,$(ut),2);mt.h=pt.h,pt.g=0})}),U=function(){return gt(function($){return e.g.graph&&e.g.graph.url?$=_($,v(e,e.g.graph.url),0):($.g=0,$=void 0),$})}(),_(D,Promise.all([H,w,U]),7);if(typeof importScripts!="function")throw Error("solutions can only be loaded on a web page or in a web worker");return t=c.filter(function($){return $.simd===void 0||$.simd&&f||!$.simd&&!f}).map(function($){return e.locateFile($.url,e.S)}),importScripts.apply(null,J(t)),u=e,_(D,createMediapipeSolutionsWasm(Module),6);case 6:u.h=D.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!="undefined"?2:1}),e.h.GL.makeContextCurrent(a),D.g=4;break;case 7:if(e.l=document.createElement("canvas"),j=e.l.getContext("webgl2",{}),!j&&(j=e.l.getContext("webgl",{}),!j))return alert("Failed to create WebGL canvas context when passing video frame."),D.return();e.D=j,e.h.canvas=e.l,e.h.createContext(e.l,!0,!0,{});case 4:e.i=new e.h.SolutionWasm,e.R=!1,D.g=0}})}function Ht(e){var c,f,t,u,a,b,I,w;return gt(function(H){if(H.g==1){if(e.g.graph&&e.g.graph.url&&e.P===e.g.graph.url)return H.return();if(e.o=!0,!e.g.graph||!e.g.graph.url){H.g=2;return}return e.P=e.g.graph.url,_(H,v(e,e.g.graph.url),3)}for(H.g!=2&&(c=H.h,e.i.loadGraph(c)),f=L(Object.keys(e.B)),t=f.next();!t.done;t=f.next())u=t.value,e.i.overrideFile(u,e.B[u]);if(e.B={},e.g.listeners)for(a=L(e.g.listeners),b=a.next();!b.done;b=a.next())I=b.value,E(e,I);w=e.j,e.j={},e.setOptions(w),H.g=0})}i.reset=function(){var e=this;return gt(function(c){e.i&&(e.i.reset(),e.m={},e.s={}),c.g=0})},i.setOptions=function(e,c){var f=this;if(c=c||this.g.options){for(var t=[],u=[],a={},b=L(Object.keys(e)),I=b.next();!I.done;a={K:a.K,L:a.L},I=b.next()){var w=I.value;w in this.j&&this.j[w]===e[w]||(this.j[w]=e[w],I=c[w],I!==void 0&&(I.onChange&&(a.K=I.onChange,a.L=e[w],t.push(function(H){return function(){var U;return gt(function(j){if(j.g==1)return _(j,H.K(H.L),2);U=j.h,U===!0&&(f.o=!0),j.g=0})}}(a))),I.graphOptionXref&&(w={valueNumber:I.type===1?e[w]:0,valueBoolean:I.type===0?e[w]:!1,valueString:I.type===2?e[w]:""},I=Object.assign(Object.assign(Object.assign({},{calculatorName:"",calculatorIndex:0}),I.graphOptionXref),w),u.push(I))))}(t.length!==0||u.length!==0)&&(this.o=!0,this.A=(this.A===void 0?[]:this.A).concat(u),this.v=(this.v===void 0?[]:this.v).concat(t))}};function l(e){var c,f,t,u,a,b,I;return gt(function(w){switch(w.g){case 1:if(!e.o)return w.return();if(!e.v){w.g=2;break}c=L(e.v),f=c.next();case 3:if(f.done){w.g=5;break}return t=f.value,_(w,t(),4);case 4:f=c.next(),w.g=3;break;case 5:e.v=void 0;case 2:if(e.A){for(u=new e.h.GraphOptionChangeRequestList,a=L(e.A),b=a.next();!b.done;b=a.next())I=b.value,u.push_back(I);e.i.changeOptions(u),u.delete(),e.A=void 0}e.o=!1,w.g=0}})}i.initialize=function(){var e=this;return gt(function(c){return c.g==1?_(c,wt(e),2):c.g!=3?_(c,Ht(e),3):_(c,l(e),0)})};function v(e,c){var f,t;return gt(function(u){return c in e.F?u.return(e.F[c]):(f=e.locateFile(c,""),t=fetch(f).then(function(a){return a.arrayBuffer()}),e.F[c]=t,u.return(t))})}i.overrideFile=function(e,c){this.i?this.i.overrideFile(e,c):this.B[e]=c},i.clearOverriddenFiles=function(){this.B={},this.i&&this.i.clearOverriddenFiles()},i.send=function(e,c){var f=this,t,u,a,b,I,w,H,U,j;return gt(function(D){switch(D.g){case 1:return f.g.inputs?(t=1e3*(c==null?performance.now():c),_(D,f.C,2)):D.return();case 2:return _(D,f.initialize(),3);case 3:for(u=new f.h.PacketDataList,a=L(Object.keys(e)),b=a.next();!b.done;b=a.next())if(I=b.value,w=f.g.inputs[I]){t:{var $=e[I];switch(w.type){case"video":var ut=f.m[w.stream];if(ut||(ut=new K(f.h,f.D),f.m[w.stream]=ut),ut.l===0&&(ut.l=ut.h.createTexture()),typeof HTMLVideoElement!="undefined"&&$ instanceof HTMLVideoElement)var mt=$.videoWidth,pt=$.videoHeight;else typeof HTMLImageElement!="undefined"&&$ instanceof HTMLImageElement?(mt=$.naturalWidth,pt=$.naturalHeight):(mt=$.width,pt=$.height);pt={glName:ut.l,width:mt,height:pt},mt=ut.g,mt.canvas.width=pt.width,mt.canvas.height=pt.height,mt.activeTexture(mt.TEXTURE0),ut.h.bindTexture2d(ut.l),mt.texImage2D(mt.TEXTURE_2D,0,mt.RGBA,mt.RGBA,mt.UNSIGNED_BYTE,$),ut.h.bindTexture2d(0),ut=pt;break t;case"detections":for(ut=f.m[w.stream],ut||(ut=new yt(f.h),f.m[w.stream]=ut),ut.data||(ut.data=new ut.g.DetectionListData),ut.data.reset($.length),pt=0;pt<$.length;++pt){mt=$[pt];var vt=ut.data,Zt=vt.setBoundingBox,At=pt,oe=mt.T,se=new Lt;if(Tt(se,1,oe.X),Tt(se,2,oe.Y),Tt(se,3,oe.height),Tt(se,4,oe.width),Tt(se,5,oe.rotation),Tt(se,6,oe.W),oe=qe(se,Qt),Zt.call(vt,At,oe),mt.O)for(vt=0;vt<mt.O.length;++vt){se=mt.O[vt];var ke=!!se.visibility;Zt=ut.data,At=Zt.addNormalizedLandmark,oe=pt,se=Object.assign(Object.assign({},se),{visibility:ke?se.visibility:0}),ke=new P,Tt(ke,1,se.x),Tt(ke,2,se.y),Tt(ke,3,se.z),se.visibility&&Tt(ke,4,se.visibility),se=qe(ke,bt),At.call(Zt,oe,se)}if(mt.M)for(vt=0;vt<mt.M.length;++vt)Zt=ut.data,At=Zt.addClassification,oe=pt,se=mt.M[vt],ke=new Ln,Tt(ke,2,se.score),se.index&&Tt(ke,1,se.index),se.label&&Tt(ke,3,se.label),se.displayName&&Tt(ke,4,se.displayName),se=qe(ke,p),At.call(Zt,oe,se)}ut=ut.data;break t;default:ut={}}}switch(H=ut,U=w.stream,w.type){case"video":u.pushTexture2d(Object.assign(Object.assign({},H),{stream:U,timestamp:t}));break;case"detections":j=H,j.stream=U,j.timestamp=t,u.pushDetectionList(j);break;default:throw Error("Unknown input config type: '"+w.type+"'")}}return f.i.send(u),_(D,f.C,4);case 4:u.delete(),D.g=0}})};function x(e,c,f){var t,u,a,b,I,w,H,U,j,D,$,ut,mt,pt;return gt(function(vt){switch(vt.g){case 1:if(!f)return vt.return(c);for(t={},u=0,a=L(Object.keys(f)),b=a.next();!b.done;b=a.next())I=b.value,w=f[I],typeof w!="string"&&w.type==="texture"&&c[w.stream]!==void 0&&++u;1<u&&(e.G=!1),H=L(Object.keys(f)),b=H.next();case 2:if(b.done){vt.g=4;break}if(U=b.value,j=f[U],typeof j=="string")return mt=t,pt=U,_(vt,T(e,U,c[j]),14);if(D=c[j.stream],j.type==="detection_list"){if(D){for(var Zt=D.getRectList(),At=D.getLandmarksList(),oe=D.getClassificationsList(),se=[],ke=0;ke<Zt.size();++ke){var Vn=jn(Zt.get(ke),Lt,ue);Vn={T:{X:le(Vn,1),Y:le(Vn,2),height:le(Vn,3),width:le(Vn,4),rotation:le(Vn,5,0),W:ce(Vn,6,0)},O:A(At.get(ke)),M:Y(jn(oe.get(ke),V,O))},se.push(Vn)}Zt=se}else Zt=[];t[U]=Zt,vt.g=7;break}if(j.type==="proto_list"){if(D){for(Zt=Array(D.size()),At=0;At<D.size();At++)Zt[At]=D.get(At);D.delete()}else Zt=[];t[U]=Zt,vt.g=7;break}if(D===void 0){vt.g=3;break}if(j.type==="float_list"){t[U]=D,vt.g=7;break}if(j.type==="proto"){t[U]=D,vt.g=7;break}if(j.type!=="texture")throw Error("Unknown output config type: '"+j.type+"'");return $=e.s[U],$||($=new K(e.h,e.D),e.s[U]=$),_(vt,nt($,D,e.G),13);case 13:ut=vt.h,t[U]=ut;case 7:j.transform&&t[U]&&(t[U]=j.transform(t[U])),vt.g=3;break;case 14:mt[pt]=vt.h;case 3:b=H.next(),vt.g=2;break;case 4:return vt.return(t)}})}function T(e,c,f){var t;return gt(function(u){return typeof f=="number"||f instanceof Uint8Array||f instanceof e.h.Uint8BlobList?u.return(f):f instanceof e.h.Texture2dDataOut?(t=e.s[c],t||(t=new K(e.h,e.D),e.s[c]=t),u.return(nt(t,f,e.G))):u.return(void 0)})}function E(e,c){for(var f=c.name||"$",t=[].concat(J(c.wants)),u=new e.h.StringList,a=L(c.wants),b=a.next();!b.done;b=a.next())u.push_back(b.value);a=e.h.PacketListener.implement({onResults:function(I){for(var w={},H=0;H<c.wants.length;++H)w[t[H]]=I.get(H);var U=e.listeners[f];U&&(e.C=x(e,w,c.outs).then(function(j){j=U(j);for(var D=0;D<c.wants.length;++D){var $=w[t[D]];typeof $=="object"&&$.hasOwnProperty&&$.hasOwnProperty("delete")&&$.delete()}j&&(e.C=j)}))}}),e.i.attachMultiListener(u,a),u.delete()}i.onResults=function(e,c){this.listeners[c||"$"]=e},Nt("Solution",St),Nt("OptionType",{BOOL:0,NUMBER:1,Z:2,0:"BOOL",1:"NUMBER",2:"STRING"});function r(e){return e.map(d)}function d(e){e=jn(e,g,C);var c=e.getMesh();if(!c)return e;var f=new Float32Array(c.getVertexBufferList());c.getVertexBufferList=function(){return f};var t=new Uint32Array(c.getIndexBufferList());return c.getIndexBufferList=function(){return t},e}function Z(e){var c=this;e=e||{},this.g=new St({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:r}}}],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(f){var t,u,a,b;return gt(function(I){if(I.g==1){switch(t="",f){case 1:t="pose_landmark_full.tflite";break;case 2:t="pose_landmark_heavy.tflite";break;default:t="pose_landmark_lite.tflite"}return u="third_party/mediapipe/modules/pose_landmark/"+t,a=c.g.locateFile(t,""),_(I,fetch(a),3)}return I.g!=2?_(I,I.h.arrayBuffer(),2):(b=I.h,c.g.overrideFile(u,b),_(I,c.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=Z.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 gt(function(c){return _(c,e.g.initialize(),0)})},i.reset=function(){this.g.reset()},i.send=function(e){var c=this;return gt(function(f){return _(f,c.g.send(e),0)})},i.setOptions=function(e){this.g.setOptions(e)},Nt("Holistic",Z),Nt("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}}),Nt("FACEMESH_LIPS",M),Nt("FACEMESH_LEFT_EYE",Q),Nt("FACEMESH_LEFT_EYEBROW",B),Nt("FACEMESH_LEFT_IRIS",[[474,475],[475,476],[476,477],[477,474]]),Nt("FACEMESH_RIGHT_EYE",tt),Nt("FACEMESH_RIGHT_EYEBROW",ct),Nt("FACEMESH_RIGHT_IRIS",[[469,470],[470,471],[471,472],[472,469]]),Nt("FACEMESH_FACE_OVAL",s),Nt("FACEMESH_CONTOURS",X),Nt("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]]),Nt("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]]),Nt("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]]),Nt("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}),Nt("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}),Nt("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}),Nt("POSE_LANDMARKS_NEUTRAL",{NOSE:0}),Nt("matrixDataToMatrix",function(e){for(var c=e.getCols(),f=e.getRows(),t=e.getPackedDataList(),u=[],a=0;a<f;a++)u.push(Array(c));for(a=0;a<f;a++)for(var b=0;b<c;b++){var I=e.getLayout()===1?a*c+b:b*f+a;u[a][b]=t[I]}return u}),Nt("VERSION","0.5.1635989137")}).call(yi);const gi={};(function(){var i;function n(r){var d=0;return function(){return d<r.length?{done:!1,value:r[d++]}:{done:!0}}}var o=typeof Object.defineProperties=="function"?Object.defineProperty:function(r,d,Z){return r==Array.prototype||r==Object.prototype||(r[d]=Z.value),r};function m(r){r=[typeof globalThis=="object"&&globalThis,r,typeof window=="object"&&window,typeof self=="object"&&self,typeof global=="object"&&global];for(var d=0;d<r.length;++d){var Z=r[d];if(Z&&Z.Math==Math)return Z}throw Error("Cannot find global object")}var y=m(this);function S(r,d){if(d)t:{var Z=y;r=r.split(".");for(var e=0;e<r.length-1;e++){var c=r[e];if(!(c in Z))break t;Z=Z[c]}r=r[r.length-1],e=Z[r],d=d(e),d!=e&&d!=null&&o(Z,r,{configurable:!0,writable:!0,value:d})}}S("Symbol",function(r){function d(f){if(this instanceof d)throw new TypeError("Symbol is not a constructor");return new Z(e+(f||"")+"_"+c++,f)}function Z(f,t){this.g=f,o(this,"description",{configurable:!0,writable:!0,value:t})}if(r)return r;Z.prototype.toString=function(){return this.g};var e="jscomp_symbol_"+(1e9*Math.random()>>>0)+"_",c=0;return d}),S("Symbol.iterator",function(r){if(r)return r;r=Symbol("Symbol.iterator");for(var d="Array Int8Array Uint8Array Uint8ClampedArray Int16Array Uint16Array Int32Array Uint32Array Float32Array Float64Array".split(" "),Z=0;Z<d.length;Z++){var e=y[d[Z]];typeof e=="function"&&typeof e.prototype[r]!="function"&&o(e.prototype,r,{configurable:!0,writable:!0,value:function(){return F(n(this))}})}return r});function F(r){return r={next:r},r[Symbol.iterator]=function(){return this},r}function L(r){var d=typeof Symbol!="undefined"&&Symbol.iterator&&r[Symbol.iterator];return d?d.call(r):{next:n(r)}}function J(r){if(!(r instanceof Array)){r=L(r);for(var d,Z=[];!(d=r.next()).done;)Z.push(d.value);r=Z}return r}var rt=typeof Object.create=="function"?Object.create:function(r){function d(){}return d.prototype=r,new d},z;if(typeof Object.setPrototypeOf=="function")z=Object.setPrototypeOf;else{var st;t:{var Gt={a:!0},Vt={};try{Vt.__proto__=Gt,st=Vt.a;break t}catch{}st=!1}z=st?function(r,d){if(r.__proto__=d,r.__proto__!==d)throw new TypeError(r+" is not extensible");return r}:null}var dt=z;function ht(r,d){if(r.prototype=rt(d.prototype),r.prototype.constructor=r,dt)dt(r,d);else for(var Z in d)if(Z!="prototype")if(Object.defineProperties){var e=Object.getOwnPropertyDescriptor(d,Z);e&&Object.defineProperty(r,Z,e)}else r[Z]=d[Z];r.na=d.prototype}function Yt(){this.l=!1,this.i=null,this.h=void 0,this.g=1,this.u=this.o=0,this.j=null}function Ft(r){if(r.l)throw new TypeError("Generator is already running");r.l=!0}Yt.prototype.s=function(r){this.h=r};function Bt(r,d){r.j={da:d,ea:!0},r.g=r.o||r.u}Yt.prototype.return=function(r){this.j={return:r},this.g=this.u};function _(r,d,Z){return r.g=Z,{value:d}}function Ae(r){this.g=new Yt,this.h=r}function cn(r,d){Ft(r.g);var Z=r.g.i;return Z?We(r,"return"in Z?Z.return:function(e){return{value:e,done:!0}},d,r.g.return):(r.g.return(d),Dt(r))}function We(r,d,Z,e){try{var c=d.call(r.g.i,Z);if(!(c instanceof Object))throw new TypeError("Iterator result "+c+" is not an object");if(!c.done)return r.g.l=!1,c;var f=c.value}catch(t){return r.g.i=null,Bt(r.g,t),Dt(r)}return r.g.i=null,e.call(r.g,f),Dt(r)}function Dt(r){for(;r.g.g;)try{var d=r.h(r.g);if(d)return r.g.l=!1,{value:d.value,done:!1}}catch(Z){r.g.h=void 0,Bt(r.g,Z)}if(r.g.l=!1,r.g.j){if(d=r.g.j,r.g.j=null,d.ea)throw d.da;return{value:d.return,done:!0}}return{value:void 0,done:!0}}function Bn(r){this.next=function(d){return Ft(r.g),r.g.i?d=We(r,r.g.i.next,d,r.g.s):(r.g.s(d),d=Dt(r)),d},this.throw=function(d){return Ft(r.g),r.g.i?d=We(r,r.g.i.throw,d,r.g.s):(Bt(r.g,d),d=Dt(r)),d},this.return=function(d){return cn(r,d)},this[Symbol.iterator]=function(){return this}}function ae(r){function d(e){return r.next(e)}function Z(e){return r.throw(e)}return new Promise(function(e,c){function f(t){t.done?e(t.value):Promise.resolve(t.value).then(d,Z).then(f,c)}f(r.next())})}function gt(r){return ae(new Bn(new Ae(r)))}S("Promise",function(r){function d(t){this.h=0,this.i=void 0,this.g=[],this.s=!1;var u=this.j();try{t(u.resolve,u.reject)}catch(a){u.reject(a)}}function Z(){this.g=null}function e(t){return t instanceof d?t:new d(function(u){u(t)})}if(r)return r;Z.prototype.h=function(t){if(this.g==null){this.g=[];var u=this;this.i(function(){u.l()})}this.g.push(t)};var c=y.setTimeout;Z.prototype.i=function(t){c(t,0)},Z.prototype.l=function(){for(;this.g&&this.g.length;){var t=this.g;this.g=[];for(var u=0;u<t.length;++u){var a=t[u];t[u]=null;try{a()}catch(b){this.j(b)}}}this.g=null},Z.prototype.j=function(t){this.i(function(){throw t})},d.prototype.j=function(){function t(b){return function(I){a||(a=!0,b.call(u,I))}}var u=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 u=t!=null;break t;case"function":u=!0;break t;default:u=!1}u?this.A(t):this.o(t)}},d.prototype.A=function(t){var u=void 0;try{u=t.then}catch(a){this.l(a);return}typeof u=="function"?this.I(u,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,u){if(this.h!=0)throw Error("Cannot settle("+t+", "+u+"): Promise already settled in state"+this.h);this.h=t,this.i=u,this.h===2&&this.G(),this.B()},d.prototype.G=function(){var t=this;c(function(){if(t.C()){var u=y.console;typeof u!="undefined"&&u.error(t.i)}},1)},d.prototype.C=function(){if(this.s)return!1;var t=y.CustomEvent,u=y.Event,a=y.dispatchEvent;return typeof a=="undefined"?!0:(typeof t=="function"?t=new t("unhandledrejection",{cancelable:!0}):typeof u=="function"?t=new u("unhandledrejection",{cancelable:!0}):(t=y.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)f.h(this.g[t]);this.g=null}};var f=new Z;return d.prototype.H=function(t){var u=this.j();t.M(u.resolve,u.reject)},d.prototype.I=function(t,u){var a=this.j();try{t.call(u,a.resolve,a.reject)}catch(b){a.reject(b)}},d.prototype.then=function(t,u){function a(H,U){return typeof H=="function"?function(j){try{b(H(j))}catch(D){I(D)}}:U}var b,I,w=new d(function(H,U){b=H,I=U});return this.M(a(t,b),a(u,I)),w},d.prototype.catch=function(t){return this.then(void 0,t)},d.prototype.M=function(t,u){function a(){switch(b.h){case 1:t(b.i);break;case 2:u(b.i);break;default:throw Error("Unexpected state: "+b.h)}}var b=this;this.g==null?f.h(a):this.g.push(a),this.s=!0},d.resolve=e,d.reject=function(t){return new d(function(u,a){a(t)})},d.race=function(t){return new d(function(u,a){for(var b=L(t),I=b.next();!I.done;I=b.next())e(I.value).M(u,a)})},d.all=function(t){var u=L(t),a=u.next();return a.done?e([]):new d(function(b,I){function w(j){return function(D){H[j]=D,U--,U==0&&b(H)}}var H=[],U=0;do H.push(void 0),U++,e(a.value).M(w(H.length-1),I),a=u.next();while(!a.done)})},d});function mn(r,d){r instanceof String&&(r+="");var Z=0,e=!1,c={next:function(){if(!e&&Z<r.length){var f=Z++;return{value:d(f,r[f]),done:!1}}return e=!0,{done:!0,value:void 0}}};return c[Symbol.iterator]=function(){return c},c}var An=typeof Object.assign=="function"?Object.assign:function(r,d){for(var Z=1;Z<arguments.length;Z++){var e=arguments[Z];if(e)for(var c in e)Object.prototype.hasOwnProperty.call(e,c)&&(r[c]=e[c])}return r};S("Object.assign",function(r){return r||An}),S("Object.is",function(r){return r||function(d,Z){return d===Z?d!==0||1/d===1/Z:d!==d&&Z!==Z}}),S("Array.prototype.includes",function(r){return r||function(d,Z){var e=this;e instanceof String&&(e=String(e));var c=e.length;for(Z=Z||0,0>Z&&(Z=Math.max(Z+c,0));Z<c;Z++){var f=e[Z];if(f===d||Object.is(f,d))return!0}return!1}}),S("String.prototype.includes",function(r){return r||function(d,Z){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,Z||0)!==-1}}),S("Array.prototype.keys",function(r){return r||function(){return mn(this,function(d){return d})}});var Ve=this||self;function Nt(r,d){r=r.split(".");var Z=Ve;r[0]in Z||typeof Z.execScript=="undefined"||Z.execScript("var "+r[0]);for(var e;r.length&&(e=r.shift());)r.length||d===void 0?Z[e]&&Z[e]!==Object.prototype[e]?Z=Z[e]:Z=Z[e]={}:Z[e]=d}function Te(){throw Error("Invalid UTF8")}function nn(r,d){return d=String.fromCharCode.apply(null,d),r==null?d:r+d}var Gn,wn=typeof TextDecoder!="undefined",Rn,Cn=typeof TextEncoder!="undefined",an={},pn=null;function En(r){var d;d===void 0&&(d=0),Me(),d=an[d];for(var Z=Array(Math.floor(r.length/3)),e=d[64]||"",c=0,f=0;c<r.length-2;c+=3){var t=r[c],u=r[c+1],a=r[c+2],b=d[t>>2];t=d[(t&3)<<4|u>>4],u=d[(u&15)<<2|a>>6],a=d[a&63],Z[f++]=b+t+u+a}switch(b=0,a=e,r.length-c){case 2:b=r[c+1],a=d[(b&15)<<2]||e;case 1:r=r[c],Z[f]=d[r>>2]+d[(r&3)<<4|b>>4]+a+e}return Z.join("")}function Fn(r){var d=r.length,Z=3*d/4;Z%3?Z=Math.floor(Z):"=.".indexOf(r[d-1])!=-1&&(Z="=.".indexOf(r[d-2])!=-1?Z-2:Z-1);var e=new Uint8Array(Z),c=0;return je(r,function(f){e[c++]=f}),c!==Z?e.subarray(0,c):e}function je(r,d){function Z(a){for(;e<r.length;){var b=r.charAt(e++),I=pn[b];if(I!=null)return I;if(!/^[\s\xa0]*$/.test(b))throw Error("Unknown base64 encoding at char: "+b)}return a}Me();for(var e=0;;){var c=Z(-1),f=Z(0),t=Z(64),u=Z(64);if(u===64&&c===-1)break;d(c<<2|f>>4),t!=64&&(d(f<<4&240|t>>2),u!=64&&d(t<<6&192|u))}}function Me(){if(!pn){pn={};for(var r="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789".split(""),d=["+/=","+/","-_=","-_.","-_"],Z=0;5>Z;Z++){var e=r.concat(d[Z].split(""));an[Z]=e;for(var c=0;c<e.length;c++){var f=e[c];pn[f]===void 0&&(pn[f]=c)}}}}var xn=typeof Uint8Array=="function";function Xn(r){return xn&&r!=null&&r instanceof Uint8Array}var de;function Se(r){if(this.L=r,r!==null&&r.length===0)throw Error("ByteString should be constructed with non-empty values")}var ze=typeof Uint8Array.prototype.slice=="function",ee=0,Xe=0;function rn(r,d){if(r.constructor===Uint8Array)return r;if(r.constructor===ArrayBuffer)return new Uint8Array(r);if(r.constructor===Array)return new Uint8Array(r);if(r.constructor===String)return Fn(r);if(r.constructor===Se)return!d&&(d=r.L)&&d.constructor===Uint8Array?d:(d=r.L,d=d==null||Xn(d)?d:typeof d=="string"?Fn(d):null,(r=r.L=d)?new Uint8Array(r):de||(de=new Uint8Array(0)));if(r instanceof Uint8Array)return new Uint8Array(r.buffer,r.byteOffset,r.byteLength);throw Error("Type not convertible to a Uint8Array, expected a Uint8Array, an ArrayBuffer, a base64 encoded string, or Array of numbers")}function Ue(r,d){return Error("Invalid wire type: "+r+" (at position "+d+")")}function _t(){return Error("Failed to read varint, encoding is invalid.")}function ge(r,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,r&&He(this,r)}function He(r,d){r.h=rn(d,r.v),r.j=0,r.i=r.h.length,r.g=r.j}ge.prototype.reset=function(){this.g=this.j};function Mt(r){if(r.g>r.i)throw Error("Tried to read past the end of the data "+r.g+" > "+r.i)}function xe(r){var d=r.h,Z=d[r.g],e=Z&127;if(128>Z)return r.g+=1,Mt(r),e;if(Z=d[r.g+1],e|=(Z&127)<<7,128>Z)return r.g+=2,Mt(r),e;if(Z=d[r.g+2],e|=(Z&127)<<14,128>Z)return r.g+=3,Mt(r),e;if(Z=d[r.g+3],e|=(Z&127)<<21,128>Z)return r.g+=4,Mt(r),e;if(Z=d[r.g+4],r.g+=5,e|=(Z&15)<<28,128>Z)return Mt(r),e;if(128<=d[r.g++]&&128<=d[r.g++]&&128<=d[r.g++]&&128<=d[r.g++]&&128<=d[r.g++])throw _t();return Mt(r),e}var jt=[];function be(){this.g=[]}be.prototype.length=function(){return this.g.length},be.prototype.end=function(){var r=this.g;return this.g=[],r};function Le(r,d){for(;127<d;)r.g.push(d&127|128),d>>>=7;r.g.push(d)}function Qe(r){var d={},Z=d.W===void 0?!1:d.W;this.l={v:d.v===void 0?!1:d.v},this.W=Z,d=this.l,jt.length?(Z=jt.pop(),d&&(Z.v=d.v),r&&He(Z,r),r=Z):r=new ge(r,d),this.g=r,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 Ge(r){var d=r.g;if(d.g==d.i)return!1;r.j=r.g.g;var Z=xe(r.g)>>>0;if(d=Z>>>3,Z&=7,!(0<=Z&&5>=Z))throw Ue(Z,r.j);if(1>d)throw Error("Invalid field number: "+d+" (at position "+r.j+")");return r.i=d,r.h=Z,!0}function zt(r){switch(r.h){case 0:if(r.h!=0)zt(r);else t:{r=r.g;for(var d=r.g,Z=d+10;d<Z;)if((r.h[d++]&128)===0){r.g=d,Mt(r);break t}throw _t()}break;case 1:r=r.g,r.g+=8,Mt(r);break;case 2:r.h!=2?zt(r):(d=xe(r.g)>>>0,r=r.g,r.g+=d,Mt(r));break;case 5:r=r.g,r.g+=4,Mt(r);break;case 3:d=r.i;do{if(!Ge(r))throw Error("Unmatched start-group tag: stream EOF");if(r.h==4){if(r.i!=d)throw Error("Unmatched end-group tag");break}zt(r)}while(1);break;default:throw Ue(r.h,r.j)}}var Be=[];function Pe(){this.i=[],this.h=0,this.g=new be}function Ie(r,d){d.length!==0&&(r.i.push(d),r.h+=d.length)}function Wn(r,d){if(d=d.ba){Ie(r,r.g.end());for(var Z=0;Z<d.length;Z++)Ie(r,d[Z])}}var on=typeof Symbol=="function"&&typeof Symbol()=="symbol"?Symbol(void 0):void 0;function Oe(r,d){Object.isFrozen(r)||(on?r[on]|=d:r.N!==void 0?r.N|=d:Object.defineProperties(r,{N:{value:d,configurable:!0,writable:!0,enumerable:!1}}))}function sn(r){var d;return on?d=r[on]:d=r.N,d==null?0:d}function Ze(r){return Oe(r,1),r}function Ye(r){return Array.isArray(r)?!!(sn(r)&2):!1}function ve(r){if(!Array.isArray(r))throw Error("cannot mark non-array as immutable");Oe(r,2)}function ne(r){return r!==null&&typeof r=="object"&&!Array.isArray(r)&&r.constructor===Object}var _e=Object.freeze(Ze([]));function qt(r){if(Ye(r.m))throw Error("Cannot mutate an immutable Message")}var Pt=typeof Symbol!="undefined"&&typeof Symbol.hasInstance!="undefined";function dn(r){return{value:r,configurable:!1,writable:!1,enumerable:!1}}function he(r,d,Z){return d===-1?null:d>=r.i?r.g?r.g[d]:void 0:(Z===void 0?0:Z)&&r.g&&(Z=r.g[d],Z!=null)?Z:r.m[d+r.h]}function Ct(r,d,Z,e){e=e===void 0?!1:e,qt(r),d<r.i&&!e?r.m[d+r.h]=Z:(r.g||(r.g=r.m[r.i+r.h]={}))[d]=Z}function Rt(r,d,Z,e){Z=Z===void 0?!0:Z,e=e===void 0?!1:e;var c=he(r,d,e);return c==null&&(c=_e),Ye(r.m)?Z&&(ve(c),Object.freeze(c)):(c===_e||Ye(c))&&(c=Ze(c.slice()),Ct(r,d,c,e)),c}function re(r,d,Z){return r=he(r,d),r=r==null?r:+r,r==null?Z===void 0?0:Z:r}function we(r,d,Z,e){r.j||(r.j={});var c=Ye(r.m),f=r.j[Z];if(!f){e=Rt(r,Z,!0,e===void 0?!1:e),f=[],c=c||Ye(e);for(var t=0;t<e.length;t++)f[t]=new d(e[t]),c&&ve(f[t].m);c&&(ve(f),Object.freeze(f)),r.j[Z]=f}return f}function te(r,d,Z,e,c){var f=f===void 0?!1:f;return qt(r),f=we(r,Z,d,f),Z=e||new Z,r=Rt(r,d),c!=null?(f.splice(c,0,Z),r.splice(c,0,Z.m)):(f.push(Z),r.push(Z.m)),Z}function ie(r,d){return r=he(r,d),r==null?0:r}function et(r,d){return r=he(r,d),r==null?"":r}function ot(r){switch(typeof r){case"number":return isFinite(r)?r:String(r);case"object":if(r&&!Array.isArray(r)){if(Xn(r))return En(r);if(r instanceof Se){var d=r.L;return d=d==null||typeof d=="string"?d:xn&&d instanceof Uint8Array?En(d):null,(r.L=d)||""}}}return r}function at(r){var d=le;return d=d===void 0?Tt:d,ce(r,d)}function Ot(r,d){if(r!=null){if(Array.isArray(r))r=ce(r,d);else if(ne(r)){var Z={},e;for(e in r)Z[e]=Ot(r[e],d);r=Z}else r=d(r);return r}}function ce(r,d){for(var Z=r.slice(),e=0;e<Z.length;e++)Z[e]=Ot(Z[e],d);return Array.isArray(r)&&sn(r)&1&&Ze(Z),Z}function le(r){return r&&typeof r=="object"&&r.toJSON?r.toJSON():(r=ot(r),Array.isArray(r)?at(r):r)}function Tt(r){return Xn(r)?new Uint8Array(r):r}function fe(r,d,Z){r||(r=Ce),Ce=null;var e=this.constructor.h;r||(r=e?[e]:[]),this.h=(e?0:-1)-(this.constructor.g||0),this.j=void 0,this.m=r;t:{if(e=this.m.length,r=e-1,e&&(e=this.m[r],ne(e))){this.i=r-this.h,this.g=e;break t}d!==void 0&&-1<d?(this.i=Math.max(d,r+1-this.h),this.g=void 0):this.i=Number.MAX_VALUE}if(Z)for(d=0;d<Z.length;d++)if(r=Z[d],r<this.i)r+=this.h,(e=this.m[r])?Array.isArray(e)&&Ze(e):this.m[r]=_e;else{e=this.g||(this.g=this.m[this.i+this.h]={});var c=e[r];c?Array.isArray(c)&&Ze(c):e[r]=_e}}fe.prototype.toJSON=function(){return at(this.m)},fe.prototype.toString=function(){return this.m.toString()};var Ce;function De(){fe.apply(this,arguments)}if(ht(De,fe),Pt){var $e={};Object.defineProperties(De,($e[Symbol.hasInstance]=dn(function(){throw Error("Cannot perform instanceof checks for MutableMessage")}),$e))}function hn(r,d,Z){if(Z){var e={},c;for(c in Z){var f=Z[c],t=f.ha;t||(e.F=f.la||f.fa.P,f.aa?(e.U=In(f.aa),t=function(u){return function(a,b,I){return u.F(a,b,I,u.U)}}(e)):f.ca?(e.T=Ke(f.X.g,f.ca),t=function(u){return function(a,b,I){return u.F(a,b,I,u.T)}}(e)):t=e.F,f.ha=t),t(d,r,f.X),e={F:e.F,U:e.U,T:e.T}}}Wn(d,r)}var bn=Symbol();function Fe(r,d,Z){return r[bn]||(r[bn]=function(e,c){return d(e,c,Z)})}function qe(r){var d=r[bn];if(!d){var Z=p(r);d=function(e,c){return W(e,c,Z)},r[bn]=d}return d}function jn(r){var d=r.aa;if(d)return qe(d);if(d=r.ka)return Fe(r.X.g,d,r.ca)}function tn(r){var d=jn(r),Z=r.X,e=r.fa.O;return d?function(c,f){return e(c,f,Z,d)}:function(c,f){return e(c,f,Z)}}function Ne(r,d,Z,e,c,f){r=r();var t=0;for(r.length&&typeof r[0]!="number"&&(Z(d,r[0]),t++);t<r.length;){Z=r[t++];for(var u=t+1;u<r.length&&typeof r[u]!="number";)u++;var a=r[t++];switch(u-=t,u){case 0:e(d,Z,a);break;case 1:e(d,Z,a,r[t++]);break;case 2:c(d,Z,a,r[t++],r[t++]);break;case 3:u=r[t++];var b=r[t++],I=r[t++];Array.isArray(I)?c(d,Z,a,u,b,I):f(d,Z,a,u,b,I);break;case 4:f(d,Z,a,r[t++],r[t++],r[t++],r[t++]);break;default:throw Error("unexpected number of binary field arguments: "+u)}}return d}var gn=Symbol();function In(r){var d=r[gn];if(!d){var Z=ln(r);d=function(e,c){return k(e,c,Z)},r[gn]=d}return d}function Ke(r,d){var Z=r[gn];return Z||(Z=function(e,c){return hn(e,c,d)},r[gn]=Z),Z}var kn=Symbol();function en(r,d){r.push(d)}function Zn(r,d,Z){r.push(d,Z.P)}function Sn(r,d,Z,e,c){var f=In(c),t=Z.P;r.push(d,function(u,a,b){return t(u,a,b,e,f)})}function Kn(r,d,Z,e,c,f){var t=Ke(e,f),u=Z.P;r.push(d,function(a,b,I){return u(a,b,I,e,t)})}function ln(r){var d=r[kn];return d||Ne(r,r[kn]=[],en,Zn,Sn,Kn)}var Tn=Symbol();function _n(r,d){r[0]=d}function Qn(r,d,Z,e){var c=Z.O;r[d]=e?function(f,t,u){return c(f,t,u,e)}:c}function Ln(r,d,Z,e,c,f){var t=Z.O,u=qe(c);r[d]=function(a,b,I){return t(a,b,I,e,u,f)}}function Hn(r,d,Z,e,c,f,t){var u=Z.O,a=Fe(e,c,f);r[d]=function(b,I,w){return u(b,I,w,e,a,t)}}function p(r){var d=r[Tn];return d||Ne(r,r[Tn]={},_n,Qn,Ln,Hn)}function W(r,d,Z){for(;Ge(d)&&d.h!=4;){var e=d.i,c=Z[e];if(!c){var f=Z[0];f&&(f=f[e])&&(c=Z[e]=tn(f))}if((!c||!c(d,r,e))&&(c=d,e=r,f=c.j,zt(c),!c.W)){var t=c.g.h;c=c.g.g,c=f===c?de||(de=new Uint8Array(0)):ze?t.slice(f,c):new Uint8Array(t.subarray(f,c)),(f=e.ba)?f.push(c):e.ba=[c]}}return r}function V(r,d,Z){if(Be.length){var e=Be.pop();r&&(He(e.g,r),e.i=-1,e.h=-1),r=e}else r=new Qe(r);try{return W(new d,r,p(Z))}finally{d=r.g,d.h=null,d.j=0,d.i=0,d.g=0,d.v=!1,r.i=-1,r.h=-1,100>Be.length&&Be.push(r)}}function k(r,d,Z){for(var e=Z.length,c=e%2==1,f=c?1:0;f<e;f+=2)(0,Z[f+1])(d,r,Z[f]);hn(r,d,c?Z[0]:void 0)}function O(r,d){var Z=new Pe;k(r,Z,ln(d)),Ie(Z,Z.g.end()),r=new Uint8Array(Z.h),d=Z.i;for(var e=d.length,c=0,f=0;f<e;f++){var t=d[f];r.set(t,c),c+=t.length}return Z.i=[r],r}function lt(r,d){return{O:r,P:d}}var P=lt(function(r,d,Z){if(r.h!==5)return!1;r=r.g;var e=r.h[r.g],c=r.h[r.g+1],f=r.h[r.g+2],t=r.h[r.g+3];return r.g+=4,Mt(r),c=(e<<0|c<<8|f<<16|t<<24)>>>0,r=2*(c>>31)+1,e=c>>>23&255,c&=8388607,Ct(d,Z,e==255?c?NaN:1/0*r:e==0?r*Math.pow(2,-149)*c:r*Math.pow(2,e-150)*(c+Math.pow(2,23))),!0},function(r,d,Z){if(d=he(d,Z),d!=null){Le(r.g,8*Z+5),r=r.g;var e=d;e=(Z=0>e?1:0)?-e:e,e===0?0<1/e?ee=Xe=0:(Xe=0,ee=2147483648):isNaN(e)?(Xe=0,ee=2147483647):34028234663852886e22<e?(Xe=0,ee=(Z<<31|2139095040)>>>0):11754943508222875e-54>e?(e=Math.round(e/Math.pow(2,-149)),Xe=0,ee=(Z<<31|e)>>>0):(d=Math.floor(Math.log(e)/Math.LN2),e*=Math.pow(2,-d),e=Math.round(8388608*e),16777216<=e&&++d,Xe=0,ee=(Z<<31|d+127<<23|e&8388607)>>>0),Z=ee,r.g.push(Z>>>0&255),r.g.push(Z>>>8&255),r.g.push(Z>>>16&255),r.g.push(Z>>>24&255)}}),it=lt(function(r,d,Z){if(r.h!==0)return!1;for(var e=r.g,c=128,f=0,t=r=0;4>t&&128<=c;t++)c=e.h[e.g++],Mt(e),f|=(c&127)<<7*t;if(128<=c&&(c=e.h[e.g++],Mt(e),f|=(c&127)<<28,r|=(c&127)>>4),128<=c)for(t=0;5>t&&128<=c;t++)c=e.h[e.g++],Mt(e),r|=(c&127)<<7*t+3;if(128>c)e=f>>>0,c=r>>>0,(r=c&2147483648)&&(e=~e+1>>>0,c=~c>>>0,e==0&&(c=c+1>>>0)),e=4294967296*c+(e>>>0);else throw _t();return Ct(d,Z,r?-e:e),!0},function(r,d,Z){if(d=he(d,Z),d!=null&&d!=null){Le(r.g,8*Z),r=r.g;var e=d;for(Z=0>e,e=Math.abs(e),d=e>>>0,e=Math.floor((e-d)/4294967296),e>>>=0,Z&&(e=~e>>>0,d=(~d>>>0)+1,4294967295<d&&(d=0,e++,4294967295<e&&(e=0))),ee=d,Xe=e,Z=ee,d=Xe;0<d||127<Z;)r.g.push(Z&127|128),Z=(Z>>>7|d<<25)>>>0,d>>>=7;r.g.push(Z)}}),bt=lt(function(r,d,Z){return r.h!==0?!1:(Ct(d,Z,xe(r.g)),!0)},function(r,d,Z){if(d=he(d,Z),d!=null&&d!=null)if(Le(r.g,8*Z),r=r.g,Z=d,0<=Z)Le(r,Z);else{for(d=0;9>d;d++)r.g.push(Z&127|128),Z>>=7;r.g.push(1)}}),xt=lt(function(r,d,Z){if(r.h!==2)return!1;var e=xe(r.g)>>>0;r=r.g;var c=r.g;r.g+=e,Mt(r),r=r.h;var f;if(wn)(f=Gn)||(f=Gn=new TextDecoder("utf-8",{fatal:!0})),f=f.decode(r.subarray(c,c+e));else{e=c+e;for(var t=[],u=null,a,b,I;c<e;)a=r[c++],128>a?t.push(a):224>a?c>=e?Te():(b=r[c++],194>a||(b&192)!==128?(c--,Te()):t.push((a&31)<<6|b&63)):240>a?c>=e-1?Te():(b=r[c++],(b&192)!==128||a===224&&160>b||a===237&&160<=b||((f=r[c++])&192)!==128?(c--,Te()):t.push((a&15)<<12|(b&63)<<6|f&63)):244>=a?c>=e-2?Te():(b=r[c++],(b&192)!==128||(a<<28)+(b-144)>>30!==0||((f=r[c++])&192)!==128||((I=r[c++])&192)!==128?(c--,Te()):(a=(a&7)<<18|(b&63)<<12|(f&63)<<6|I&63,a-=65536,t.push((a>>10&1023)+55296,(a&1023)+56320))):Te(),8192<=t.length&&(u=nn(u,t),t.length=0);f=nn(u,t)}return Ct(d,Z,f),!0},function(r,d,Z){if(d=he(d,Z),d!=null){var e=!1;if(e=e===void 0?!1:e,Cn){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 c=0,f=new Uint8Array(3*d.length),t=0;t<d.length;t++){var u=d.charCodeAt(t);if(128>u)f[c++]=u;else{if(2048>u)f[c++]=u>>6|192;else{if(55296<=u&&57343>=u){if(56319>=u&&t<d.length){var a=d.charCodeAt(++t);if(56320<=a&&57343>=a){u=1024*(u-55296)+a-56320+65536,f[c++]=u>>18|240,f[c++]=u>>12&63|128,f[c++]=u>>6&63|128,f[c++]=u&63|128;continue}else t--}if(e)throw Error("Found an unpaired surrogate");u=65533}f[c++]=u>>12|224,f[c++]=u>>6&63|128}f[c++]=u&63|128}}d=f.subarray(0,c)}Le(r.g,8*Z+2),Le(r.g,d.length),Ie(r,r.g.end()),Ie(r,d)}}),Ut=lt(function(r,d,Z,e,c){if(r.h!==2)return!1;d=te(d,Z,e),Z=r.g.i,e=xe(r.g)>>>0;var f=r.g.g+e,t=f-Z;if(0>=t&&(r.g.i=f,c(d,r),t=f-r.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 r.g.g=f,r.g.i=Z,!0},function(r,d,Z,e,c){if(d=we(d,e,Z),d!=null)for(e=0;e<d.length;e++){var f=r;Le(f.g,8*Z+2);var t=f.g.end();Ie(f,t),t.push(f.h),f=t,c(d[e],r),t=r;var u=f.pop();for(u=t.h+t.g.length()-u;127<u;)f.push(u&127|128),u>>>=7,t.h++;f.push(u),t.h++}});function Et(){De.apply(this,arguments)}if(ht(Et,De),Pt){var $t={};Object.defineProperties(Et,($t[Symbol.hasInstance]=dn(Object[Symbol.hasInstance]),$t))}function kt(r){Et.call(this,r)}ht(kt,Et);function Lt(){return[1,bt,2,P,3,xt,4,xt]}function Jt(r){Et.call(this,r,-1,ue)}ht(Jt,Et),Jt.prototype.addClassification=function(r,d){return te(this,1,kt,r,d),this};function Qt(){return[1,Ut,kt,Lt]}var ue=[1];function me(r){Et.call(this,r)}ht(me,Et);function ye(){return[1,P,2,P,3,P,4,P,5,P]}function Ee(r){Et.call(this,r,-1,g)}ht(Ee,Et);function h(){return[1,Ut,me,ye]}var g=[1];function G(r){Et.call(this,r)}ht(G,Et);function C(){return[1,P,2,P,3,P,4,P,5,P,6,it]}var M=[[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]],Q=[[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]],B=[[276,283],[283,282],[282,295],[295,285],[300,293],[293,334],[334,296],[296,336]],tt=[[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(M),J(Q),J(B),J(tt),J(ct),J(s));function R(r,d,Z){if(Z=r.createShader(Z===0?r.VERTEX_SHADER:r.FRAGMENT_SHADER),r.shaderSource(Z,d),r.compileShader(Z),!r.getShaderParameter(Z,r.COMPILE_STATUS))throw Error(`Could not compile WebGL shader.
|
|
55
55
|
|
|
56
|
-
`+r.getShaderInfoLog(Z));return Z}function Y(r){return we(r,
|
|
56
|
+
`+r.getShaderInfoLog(Z));return Z}function Y(r){return we(r,kt,1).map(function(d){return{index:ie(d,1),ga:re(d,2),label:he(d,3)!=null?et(d,3):void 0,displayName:he(d,4)!=null?et(d,4):void 0}})}function N(r){return{x:re(r,1),y:re(r,2),z:re(r,3),visibility:he(r,4)!=null?re(r,4):void 0}}function A(r,d){this.h=r,this.g=d,this.l=0}function K(r,d,Z){return nt(r,d),typeof r.g.canvas.transferToImageBitmap=="function"?Promise.resolve(r.g.canvas.transferToImageBitmap()):Z?Promise.resolve(r.g.canvas):typeof createImageBitmap=="function"?createImageBitmap(r.g.canvas):(r.i===void 0&&(r.i=document.createElement("canvas")),new Promise(function(e){r.i.height=r.g.canvas.height,r.i.width=r.g.canvas.width,r.i.getContext("2d",{}).drawImage(r.g.canvas,0,0,r.g.canvas.width,r.g.canvas.height),e(r.i)}))}function nt(r,d){var Z=r.g;if(r.o===void 0){var e=R(Z,`
|
|
57
57
|
attribute vec2 aVertex;
|
|
58
58
|
attribute vec2 aTex;
|
|
59
59
|
varying vec2 vTex;
|
|
@@ -68,24 +68,24 @@
|
|
|
68
68
|
gl_FragColor = texture2D(sampler0, vTex);
|
|
69
69
|
}`,1),f=Z.createProgram();if(Z.attachShader(f,e),Z.attachShader(f,c),Z.linkProgram(f),!Z.getProgramParameter(f,Z.LINK_STATUS))throw Error(`Could not compile WebGL program.
|
|
70
70
|
|
|
71
|
-
`+Z.getProgramInfoLog(f));e=r.o=f,Z.useProgram(e),c=Z.getUniformLocation(e,"sampler0"),r.j={K:Z.getAttribLocation(e,"aVertex"),J:Z.getAttribLocation(e,"aTex"),ma:c},r.u=Z.createBuffer(),Z.bindBuffer(Z.ARRAY_BUFFER,r.u),Z.enableVertexAttribArray(r.j.K),Z.vertexAttribPointer(r.j.K,2,Z.FLOAT,!1,0,0),Z.bufferData(Z.ARRAY_BUFFER,new Float32Array([-1,-1,-1,1,1,1,1,-1]),Z.STATIC_DRAW),Z.bindBuffer(Z.ARRAY_BUFFER,null),r.s=Z.createBuffer(),Z.bindBuffer(Z.ARRAY_BUFFER,r.s),Z.enableVertexAttribArray(r.j.J),Z.vertexAttribPointer(r.j.J,2,Z.FLOAT,!1,0,0),Z.bufferData(Z.ARRAY_BUFFER,new Float32Array([0,1,0,0,1,0,1,1]),Z.STATIC_DRAW),Z.bindBuffer(Z.ARRAY_BUFFER,null),Z.uniform1i(c,0)}e=r.j,Z.useProgram(r.o),Z.canvas.width=d.width,Z.canvas.height=d.height,Z.viewport(0,0,d.width,d.height),Z.activeTexture(Z.TEXTURE0),r.h.bindTexture2d(d.glName),Z.enableVertexAttribArray(e.K),Z.bindBuffer(Z.ARRAY_BUFFER,r.u),Z.vertexAttribPointer(e.K,2,Z.FLOAT,!1,0,0),Z.enableVertexAttribArray(e.J),Z.bindBuffer(Z.ARRAY_BUFFER,r.s),Z.vertexAttribPointer(e.J,2,Z.FLOAT,!1,0,0),Z.bindFramebuffer(Z.DRAW_FRAMEBUFFER?Z.DRAW_FRAMEBUFFER:Z.FRAMEBUFFER,null),Z.clearColor(0,0,0,0),Z.clear(Z.COLOR_BUFFER_BIT),Z.colorMask(!0,!0,!0,!0),Z.drawArrays(Z.TRIANGLE_FAN,0,4),Z.disableVertexAttribArray(e.K),Z.disableVertexAttribArray(e.J),Z.bindBuffer(Z.ARRAY_BUFFER,null),r.h.bindTexture2d(0)}function q(r){this.g=r}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(r,d){return d+r}function Kt(r,d){window[r]=d}function It(r){var d=document.createElement("script");return d.setAttribute("src",r),d.setAttribute("crossorigin","anonymous"),new Promise(function(Z){d.addEventListener("load",function(){Z()},!1),d.addEventListener("error",function(){Z()},!1),document.body.appendChild(d)})}function ft(){return gt(function(r){switch(r.g){case 1:return r.o=2,_(r,WebAssembly.instantiate(yt),4);case 4:r.g=3,r.o=0;break;case 2:return r.o=0,r.j=null,r.return(!1);case 3:return r.return(!0)}})}function Wt(r){if(this.g=r,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=r&&r.locateFile||Xt,typeof window=="object")var d=window.location.pathname.toString().substring(0,window.location.pathname.toString().lastIndexOf("/"))+"/";else if(typeof location!="undefined")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,r.options){d=T(Object.keys(r.options));for(var Z=d.next();!Z.done;Z=d.next()){Z=Z.value;var e=r.options[Z].default;e!==void 0&&(this.j[Z]=typeof e=="function"?e():e)}}}i=Wt.prototype,i.close=function(){return this.i&&this.i.delete(),Promise.resolve()};function St(r){var d,Z,e,c,f,t,u,a,b,I,w;return gt(function(H){switch(H.g){case 1:return r.Z?(d=r.g.files===void 0?[]:typeof r.g.files=="function"?r.g.files(r.j):r.g.files,_(H,ft(),2)):H.return();case 2:if(Z=H.h,typeof window=="object")return Kt("createMediapipeSolutionsWasm",{locateFile:r.locateFile}),Kt("createMediapipeSolutionsPackedAssets",{locateFile:r.locateFile}),t=d.filter(function(U){return U.data!==void 0}),u=d.filter(function(U){return U.data===void 0}),a=Promise.all(t.map(function(U){var j=l(r,U.url);if(U.path!==void 0){var D=U.path;j=j.then(function($){return r.overrideFile(D,$),Promise.resolve($)})}return j})),b=Promise.all(u.map(function(U){return U.simd===void 0||U.simd&&Z||!U.simd&&!Z?It(r.locateFile(U.url,r.$)):Promise.resolve()})).then(function(){var U,j,D;return gt(function($){if($.g==1)return U=window.createMediapipeSolutionsWasm,j=window.createMediapipeSolutionsPackedAssets,D=r,_($,U(j),2);D.h=$.h,$.g=0})}),I=function(){return gt(function(U){return r.g.graph&&r.g.graph.url?U=_(U,l(r,r.g.graph.url),0):(U.g=0,U=void 0),U})}(),_(H,Promise.all([b,a,I]),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&&Z||!U.simd&&!Z}).map(function(U){return r.locateFile(U.url,r.$)}),importScripts.apply(null,k(e)),c=r,_(H,createMediapipeSolutionsWasm(Module),6);case 6:c.h=H.h,r.l=new OffscreenCanvas(1,1),r.h.canvas=r.l,f=r.h.GL.createContext(r.l,{antialias:!1,alpha:!1,ja:typeof WebGL2RenderingContext!="undefined"?2:1}),r.h.GL.makeContextCurrent(f),H.g=4;break;case 7:if(r.l=document.createElement("canvas"),w=r.l.getContext("webgl2",{}),!w&&(w=r.l.getContext("webgl",{}),!w))return alert("Failed to create WebGL canvas context when passing video frame."),H.return();r.G=w,r.h.canvas=r.l,r.h.createContext(r.l,!0,!0,{});case 4:r.i=new r.h.SolutionWasm,r.Z=!1,H.g=0}})}function wt(r){var d,Z,e,c,f,t,u,a;return gt(function(b){if(b.g==1){if(r.g.graph&&r.g.graph.url&&r.Y===r.g.graph.url)return b.return();if(r.s=!0,!r.g.graph||!r.g.graph.url){b.g=2;return}return r.Y=r.g.graph.url,_(b,l(r,r.g.graph.url),3)}for(b.g!=2&&(d=b.h,r.i.loadGraph(d)),Z=T(Object.keys(r.C)),e=Z.next();!e.done;e=Z.next())c=e.value,r.i.overrideFile(c,r.C[c]);if(r.C={},r.g.listeners)for(f=T(r.g.listeners),t=f.next();!t.done;t=f.next())u=t.value,L(r,u);a=r.j,r.j={},r.setOptions(a),b.g=0})}i.reset=function(){var r=this;return gt(function(d){r.i&&(r.i.reset(),r.o={},r.u={}),d.g=0})},i.setOptions=function(r,d){var Z=this;if(d=d||this.g.options){for(var e=[],c=[],f={},t=T(Object.keys(r)),u=t.next();!u.done;f={R:f.R,S:f.S},u=t.next()){var a=u.value;a in this.j&&this.j[a]===r[a]||(this.j[a]=r[a],u=d[a],u!==void 0&&(u.onChange&&(f.R=u.onChange,f.S=r[a],e.push(function(b){return function(){var I;return gt(function(w){if(w.g==1)return _(w,b.R(b.S),2);I=w.h,I===!0&&(Z.s=!0),w.g=0})}}(f))),u.graphOptionXref&&(a={valueNumber:u.type===1?r[a]:0,valueBoolean:u.type===0?r[a]:!1,valueString:u.type===2?r[a]:""},u=Object.assign(Object.assign(Object.assign({},{calculatorName:"",calculatorIndex:0}),u.graphOptionXref),a),c.push(u))))}(e.length!==0||c.length!==0)&&(this.s=!0,this.B=(this.B===void 0?[]:this.B).concat(c),this.A=(this.A===void 0?[]:this.A).concat(e))}};function Ht(r){var d,Z,e,c,f,t,u;return gt(function(a){switch(a.g){case 1:if(!r.s)return a.return();if(!r.A){a.g=2;break}d=T(r.A),Z=d.next();case 3:if(Z.done){a.g=5;break}return e=Z.value,_(a,e(),4);case 4:Z=d.next(),a.g=3;break;case 5:r.A=void 0;case 2:if(r.B){for(c=new r.h.GraphOptionChangeRequestList,f=T(r.B),t=f.next();!t.done;t=f.next())u=t.value,c.push_back(u);r.i.changeOptions(c),c.delete(),r.B=void 0}r.s=!1,a.g=0}})}i.initialize=function(){var r=this;return gt(function(d){return d.g==1?_(d,St(r),2):d.g!=3?_(d,wt(r),3):_(d,Ht(r),0)})};function l(r,d){var Z,e;return gt(function(c){return d in r.H?c.return(r.H[d]):(Z=r.locateFile(d,""),e=fetch(Z).then(function(f){return f.arrayBuffer()}),r.H[d]=e,c.return(e))})}i.overrideFile=function(r,d){this.i?this.i.overrideFile(r,d):this.C[r]=d},i.clearOverriddenFiles=function(){this.C={},this.i&&this.i.clearOverriddenFiles()},i.send=function(r,d){var Z=this,e,c,f,t,u,a,b,I,w;return gt(function(H){switch(H.g){case 1:return Z.g.inputs?(e=1e3*(d==null?performance.now():d),_(H,Z.D,2)):H.return();case 2:return _(H,Z.initialize(),3);case 3:for(c=new Z.h.PacketDataList,f=T(Object.keys(r)),t=f.next();!t.done;t=f.next())if(u=t.value,a=Z.g.inputs[u]){t:{var U=r[u];switch(a.type){case"video":var j=Z.o[a.stream];if(j||(j=new A(Z.h,Z.G),Z.o[a.stream]=j),j.l===0&&(j.l=j.h.createTexture()),typeof HTMLVideoElement!="undefined"&&U instanceof HTMLVideoElement)var D=U.videoWidth,$=U.videoHeight;else typeof HTMLImageElement!="undefined"&&U instanceof HTMLImageElement?(D=U.naturalWidth,$=U.naturalHeight):(D=U.width,$=U.height);$={glName:j.l,width:D,height:$},D=j.g,D.canvas.width=$.width,D.canvas.height=$.height,D.activeTexture(D.TEXTURE0),j.h.bindTexture2d(j.l),D.texImage2D(D.TEXTURE_2D,0,D.RGBA,D.RGBA,D.UNSIGNED_BYTE,U),j.h.bindTexture2d(0),j=$;break t;case"detections":for(j=Z.o[a.stream],j||(j=new q(Z.h),Z.o[a.stream]=j),j.data||(j.data=new j.g.DetectionListData),j.data.reset(U.length),$=0;$<U.length;++$){D=U[$];var ut=j.data,mt=ut.setBoundingBox,pt=$,vt=D.boundingBox,Zt=new G;if(Ct(Zt,1,vt.xCenter),Ct(Zt,2,vt.yCenter),Ct(Zt,3,vt.height),Ct(Zt,4,vt.width),Ct(Zt,5,vt.rotation),Ct(Zt,6,vt.rectId),vt=O(Zt,C),mt.call(ut,pt,vt),D.landmarks)for(ut=0;ut<D.landmarks.length;++ut){Zt=D.landmarks[ut];var At=!!Zt.visibility;mt=j.data,pt=mt.addNormalizedLandmark,vt=$,Zt=Object.assign(Object.assign({},Zt),{visibility:At?Zt.visibility:0}),At=new me,Ct(At,1,Zt.x),Ct(At,2,Zt.y),Ct(At,3,Zt.z),Zt.visibility&&Ct(At,4,Zt.visibility),Zt=O(At,ye),pt.call(mt,vt,Zt)}if(D.V)for(ut=0;ut<D.V.length;++ut)mt=j.data,pt=mt.addClassification,vt=$,Zt=D.V[ut],At=new Et,Ct(At,2,Zt.ga),Zt.index&&Ct(At,1,Zt.index),Zt.label&&Ct(At,3,Zt.label),Zt.displayName&&Ct(At,4,Zt.displayName),Zt=O(At,Tt),pt.call(mt,vt,Zt)}j=j.data;break t;default:j={}}}switch(b=j,I=a.stream,a.type){case"video":c.pushTexture2d(Object.assign(Object.assign({},b),{stream:I,timestamp:e}));break;case"detections":w=b,w.stream=I,w.timestamp=e,c.pushDetectionList(w);break;default:throw Error("Unknown input config type: '"+a.type+"'")}}return Z.i.send(c),_(H,Z.D,4);case 4:c.delete(),H.g=0}})};function v(r,d,Z){var e,c,f,t,u,a,b,I,w,H,U,j,D,$;return gt(function(ut){switch(ut.g){case 1:if(!Z)return ut.return(d);for(e={},c=0,f=T(Object.keys(Z)),t=f.next();!t.done;t=f.next())u=t.value,a=Z[u],typeof a!="string"&&a.type==="texture"&&d[a.stream]!==void 0&&++c;1<c&&(r.I=!1),b=T(Object.keys(Z)),t=b.next();case 2:if(t.done){ut.g=4;break}if(I=t.value,w=Z[I],typeof w=="string")return D=e,$=I,_(ut,x(r,I,d[w]),14);if(H=d[w.stream],w.type==="detection_list"){if(H){for(var mt=H.getRectList(),pt=H.getLandmarksList(),vt=H.getClassificationsList(),Zt=[],At=0;At<mt.size();++At){var oe=V(mt.get(At),G,C);oe={boundingBox:{xCenter:re(oe,1),yCenter:re(oe,2),height:re(oe,3),width:re(oe,4),rotation:re(oe,5,0),rectId:ie(oe,6)},landmarks:we(V(pt.get(At),Je,h),me,1).map(N),V:Y(V(vt.get(At),kt,Qt))},Zt.push(oe)}mt=Zt}else mt=[];e[I]=mt,ut.g=7;break}if(w.type==="proto_list"){if(H){for(mt=Array(H.size()),pt=0;pt<H.size();pt++)mt[pt]=H.get(pt);H.delete()}else mt=[];e[I]=mt,ut.g=7;break}if(H===void 0){ut.g=3;break}if(w.type==="float_list"){e[I]=H,ut.g=7;break}if(w.type==="proto"){e[I]=H,ut.g=7;break}if(w.type!=="texture")throw Error("Unknown output config type: '"+w.type+"'");return U=r.u[I],U||(U=new A(r.h,r.G),r.u[I]=U),_(ut,K(U,H,r.I),13);case 13:j=ut.h,e[I]=j;case 7:w.transform&&e[I]&&(e[I]=w.transform(e[I])),ut.g=3;break;case 14:D[$]=ut.h;case 3:t=b.next(),ut.g=2;break;case 4:return ut.return(e)}})}function x(r,d,Z){var e;return gt(function(c){return typeof Z=="number"||Z instanceof Uint8Array||Z instanceof r.h.Uint8BlobList?c.return(Z):Z instanceof r.h.Texture2dDataOut?(e=r.u[d],e||(e=new A(r.h,r.G),r.u[d]=e),c.return(K(e,Z,r.I))):c.return(void 0)})}function L(r,d){for(var Z=d.name||"$",e=[].concat(k(d.wants)),c=new r.h.StringList,f=T(d.wants),t=f.next();!t.done;t=f.next())c.push_back(t.value);f=r.h.PacketListener.implement({onResults:function(u){for(var a={},b=0;b<d.wants.length;++b)a[e[b]]=u.get(b);var I=r.listeners[Z];I&&(r.D=v(r,a,d.outs).then(function(w){w=I(w);for(var H=0;H<d.wants.length;++H){var U=a[e[H]];typeof U=="object"&&U.hasOwnProperty&&U.hasOwnProperty("delete")&&U.delete()}w&&(r.D=w)}))}}),r.i.attachMultiListener(c,f),c.delete()}i.onResults=function(r,d){this.listeners[d||"$"]=r},Nt("Solution",Wt),Nt("OptionType",{BOOL:0,NUMBER:1,ia:2,0:"BOOL",1:"NUMBER",2:"STRING"});function J(r){var d=this;r=r||{};var Z={url:"face_detection_short.binarypb"},e={type:1,graphOptionXref:{calculatorType:"TensorsToDetectionsCalculator",calculatorName:"facedetectionshortrangegpu__facedetectionshortrangecommon__TensorsToDetectionsCalculator",fieldName:"min_score_thresh"}};this.g=new Wt({locateFile:r.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:Z,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(c){var f,t,u,a,b,I;return gt(function(w){switch(w.g){case 1:f=c==="short"?["face_detection_short_range.tflite"]:["face_detection_full_range_sparse.tflite"],t=T(f),u=t.next();case 2:if(u.done){w.g=4;break}return a=u.value,b="third_party/mediapipe/modules/face_detection/"+a,_(w,l(d.g,a),5);case 5:I=w.h,d.g.overrideFile(b,I),u=t.next(),w.g=2;break;case 4:return Z.url=c==="short"?"face_detection_short.binarypb":"face_detection_full.binarypb",e.graphOptionXref.calculatorName=c==="short"?"facedetectionshortrangegpu__facedetectionshortrangecommon__TensorsToDetectionsCalculator":"facedetectionfullrangegpu__facedetectionfullrangecommon__TensorsToDetectionsCalculator",w.return(!0)}})}},minDetectionConfidence:e}})}i=J.prototype,i.close=function(){return this.g.close(),Promise.resolve()},i.onResults=function(r){this.g.onResults(r)},i.initialize=function(){var r=this;return gt(function(d){return _(d,r.g.initialize(),0)})},i.reset=function(){this.g.reset()},i.send=function(r){var d=this;return gt(function(Z){return _(Z,d.g.send(r),0)})},i.setOptions=function(r){this.g.setOptions(r)},Nt("FaceDetection",J),Nt("FACEDETECTION_LIPS",B),Nt("FACEDETECTION_LEFT_EYE",Q),Nt("FACEDETECTION_LEFT_EYEBROW",M),Nt("FACEDETECTION_RIGHT_EYE",tt),Nt("FACEDETECTION_RIGHT_EYEBROW",ct),Nt("FACEDETECTION_FACE_OVAL",s),Nt("FACEDETECTION_CONTOURS",X),Nt("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]]),Nt("VERSION","0.4.1646425229")}).call(yi);const gi={};(function(){var i;function n(h){var g=0;return function(){return g<h.length?{done:!1,value:h[g++]}:{done:!0}}}var o=typeof Object.defineProperties=="function"?Object.defineProperty:function(h,g,G){return h==Array.prototype||h==Object.prototype||(h[g]=G.value),h};function p(h){h=[typeof globalThis=="object"&&globalThis,h,typeof window=="object"&&window,typeof self=="object"&&self,typeof global=="object"&&global];for(var g=0;g<h.length;++g){var G=h[g];if(G&&G.Math==Math)return G}throw Error("Cannot find global object")}var y=p(this);function S(h,g){if(g)t:{var G=y;h=h.split(".");for(var C=0;C<h.length-1;C++){var B=h[C];if(!(B in G))break t;G=G[B]}h=h[h.length-1],C=G[h],g=g(C),g!=C&&g!=null&&o(G,h,{configurable:!0,writable:!0,value:g})}}S("Symbol",function(h){function g(Q){if(this instanceof g)throw new TypeError("Symbol is not a constructor");return new G(C+(Q||"")+"_"+B++,Q)}function G(Q,M){this.g=Q,o(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)+"_",B=0;return g}),S("Symbol.iterator",function(h){if(h)return h;h=Symbol("Symbol.iterator");for(var g="Array Int8Array Uint8Array Uint8ClampedArray Int16Array Uint16Array Int32Array Uint32Array Float32Array Float64Array".split(" "),G=0;G<g.length;G++){var C=y[g[G]];typeof C=="function"&&typeof C.prototype[h]!="function"&&o(C.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 g=typeof Symbol!="undefined"&&Symbol.iterator&&h[Symbol.iterator];return g?g.call(h):{next:n(h)}}function k(h){if(!(h instanceof Array)){h=T(h);for(var g,G=[];!(g=h.next()).done;)G.push(g.value);h=G}return h}var rt=typeof Object.create=="function"?Object.create:function(h){function g(){}return g.prototype=h,new g},z;if(typeof Object.setPrototypeOf=="function")z=Object.setPrototypeOf;else{var st;t:{var Gt={a:!0},Vt={};try{Vt.__proto__=Gt,st=Vt.a;break t}catch{}st=!1}z=st?function(h,g){if(h.__proto__=g,h.__proto__!==g)throw new TypeError(h+" is not extensible");return h}:null}var dt=z;function ht(h,g){if(h.prototype=rt(g.prototype),h.prototype.constructor=h,dt)dt(h,g);else for(var G in g)if(G!="prototype")if(Object.defineProperties){var C=Object.getOwnPropertyDescriptor(g,G);C&&Object.defineProperty(h,G,C)}else h[G]=g[G];h.ea=g.prototype}function Yt(){this.l=!1,this.i=null,this.h=void 0,this.g=1,this.s=this.m=0,this.j=null}function Ft(h){if(h.l)throw new TypeError("Generator is already running");h.l=!0}Yt.prototype.o=function(h){this.h=h};function Mt(h,g){h.j={U:g,V:!0},h.g=h.m||h.s}Yt.prototype.return=function(h){this.j={return:h},this.g=this.s};function _(h,g,G){return h.g=G,{value:g}}function Ae(h){this.g=new Yt,this.h=h}function un(h,g){Ft(h.g);var G=h.g.i;return G?We(h,"return"in G?G.return:function(C){return{value:C,done:!0}},g,h.g.return):(h.g.return(g),Dt(h))}function We(h,g,G,C){try{var B=g.call(h.g.i,G);if(!(B instanceof Object))throw new TypeError("Iterator result "+B+" is not an object");if(!B.done)return h.g.l=!1,B;var Q=B.value}catch(M){return h.g.i=null,Mt(h.g,M),Dt(h)}return h.g.i=null,C.call(h.g,Q),Dt(h)}function Dt(h){for(;h.g.g;)try{var g=h.h(h.g);if(g)return h.g.l=!1,{value:g.value,done:!1}}catch(G){h.g.h=void 0,Mt(h.g,G)}if(h.g.l=!1,h.g.j){if(g=h.g.j,h.g.j=null,g.V)throw g.U;return{value:g.return,done:!0}}return{value:void 0,done:!0}}function Mn(h){this.next=function(g){return Ft(h.g),h.g.i?g=We(h,h.g.i.next,g,h.g.o):(h.g.o(g),g=Dt(h)),g},this.throw=function(g){return Ft(h.g),h.g.i?g=We(h,h.g.i.throw,g,h.g.o):(Mt(h.g,g),g=Dt(h)),g},this.return=function(g){return un(h,g)},this[Symbol.iterator]=function(){return this}}function ae(h,g){return g=new Mn(new Ae(g)),dt&&h.prototype&&dt(g,h.prototype),g}function gt(h,g){h instanceof String&&(h+="");var G=0,C=!1,B={next:function(){if(!C&&G<h.length){var Q=G++;return{value:g(Q,h[Q]),done:!1}}return C=!0,{done:!0,value:void 0}}};return B[Symbol.iterator]=function(){return B},B}var fn=typeof Object.assign=="function"?Object.assign:function(h,g){for(var G=1;G<arguments.length;G++){var C=arguments[G];if(C)for(var B in C)Object.prototype.hasOwnProperty.call(C,B)&&(h[B]=C[B])}return h};S("Object.assign",function(h){return h||fn}),S("Promise",function(h){function g(M){this.h=0,this.i=void 0,this.g=[],this.o=!1;var tt=this.j();try{M(tt.resolve,tt.reject)}catch(ct){tt.reject(ct)}}function G(){this.g=null}function C(M){return M instanceof g?M:new g(function(tt){tt(M)})}if(h)return h;G.prototype.h=function(M){if(this.g==null){this.g=[];var tt=this;this.i(function(){tt.l()})}this.g.push(M)};var B=y.setTimeout;G.prototype.i=function(M){B(M,0)},G.prototype.l=function(){for(;this.g&&this.g.length;){var M=this.g;this.g=[];for(var tt=0;tt<M.length;++tt){var ct=M[tt];M[tt]=null;try{ct()}catch(s){this.j(s)}}}this.g=null},G.prototype.j=function(M){this.i(function(){throw M})},g.prototype.j=function(){function M(s){return function(X){ct||(ct=!0,s.call(tt,X))}}var tt=this,ct=!1;return{resolve:M(this.C),reject:M(this.l)}},g.prototype.C=function(M){if(M===this)this.l(new TypeError("A Promise cannot resolve to itself"));else if(M instanceof g)this.F(M);else{t:switch(typeof M){case"object":var tt=M!=null;break t;case"function":tt=!0;break t;default:tt=!1}tt?this.u(M):this.m(M)}},g.prototype.u=function(M){var tt=void 0;try{tt=M.then}catch(ct){this.l(ct);return}typeof tt=="function"?this.G(tt,M):this.m(M)},g.prototype.l=function(M){this.s(2,M)},g.prototype.m=function(M){this.s(1,M)},g.prototype.s=function(M,tt){if(this.h!=0)throw Error("Cannot settle("+M+", "+tt+"): Promise already settled in state"+this.h);this.h=M,this.i=tt,this.h===2&&this.D(),this.A()},g.prototype.D=function(){var M=this;B(function(){if(M.B()){var tt=y.console;typeof tt!="undefined"&&tt.error(M.i)}},1)},g.prototype.B=function(){if(this.o)return!1;var M=y.CustomEvent,tt=y.Event,ct=y.dispatchEvent;return typeof ct=="undefined"?!0:(typeof M=="function"?M=new M("unhandledrejection",{cancelable:!0}):typeof tt=="function"?M=new tt("unhandledrejection",{cancelable:!0}):(M=y.document.createEvent("CustomEvent"),M.initCustomEvent("unhandledrejection",!1,!0,M)),M.promise=this,M.reason=this.i,ct(M))},g.prototype.A=function(){if(this.g!=null){for(var M=0;M<this.g.length;++M)Q.h(this.g[M]);this.g=null}};var Q=new G;return g.prototype.F=function(M){var tt=this.j();M.J(tt.resolve,tt.reject)},g.prototype.G=function(M,tt){var ct=this.j();try{M.call(tt,ct.resolve,ct.reject)}catch(s){ct.reject(s)}},g.prototype.then=function(M,tt){function ct(Y,N){return typeof Y=="function"?function(A){try{s(Y(A))}catch(K){X(K)}}:N}var s,X,R=new g(function(Y,N){s=Y,X=N});return this.J(ct(M,s),ct(tt,X)),R},g.prototype.catch=function(M){return this.then(void 0,M)},g.prototype.J=function(M,tt){function ct(){switch(s.h){case 1:M(s.i);break;case 2:tt(s.i);break;default:throw Error("Unexpected state: "+s.h)}}var s=this;this.g==null?Q.h(ct):this.g.push(ct),this.o=!0},g.resolve=C,g.reject=function(M){return new g(function(tt,ct){ct(M)})},g.race=function(M){return new g(function(tt,ct){for(var s=T(M),X=s.next();!X.done;X=s.next())C(X.value).J(tt,ct)})},g.all=function(M){var tt=T(M),ct=tt.next();return ct.done?C([]):new g(function(s,X){function R(A){return function(K){Y[A]=K,N--,N==0&&s(Y)}}var Y=[],N=0;do Y.push(void 0),N++,C(ct.value).J(R(Y.length-1),X),ct=tt.next();while(!ct.done)})},g}),S("Object.is",function(h){return h||function(g,G){return g===G?g!==0||1/g===1/G:g!==g&&G!==G}}),S("Array.prototype.includes",function(h){return h||function(g,G){var C=this;C instanceof String&&(C=String(C));var B=C.length;for(G=G||0,0>G&&(G=Math.max(G+B,0));G<B;G++){var Q=C[G];if(Q===g||Object.is(Q,g))return!0}return!1}}),S("String.prototype.includes",function(h){return h||function(g,G){if(this==null)throw new TypeError("The 'this' value for String.prototype.includes must not be null or undefined");if(g instanceof RegExp)throw new TypeError("First argument to String.prototype.includes must not be a regular expression");return this.indexOf(g,G||0)!==-1}}),S("Array.prototype.keys",function(h){return h||function(){return gt(this,function(g){return g})}});var An=this||self;function Ve(h,g){h=h.split(".");var G=An;h[0]in G||typeof G.execScript=="undefined"||G.execScript("var "+h[0]);for(var C;h.length&&(C=h.shift());)h.length||g===void 0?G[C]&&G[C]!==Object.prototype[C]?G=G[C]:G=G[C]={}:G[C]=g}function Nt(h,g){return g=String.fromCharCode.apply(null,g),h==null?g:h+g}var Le,nn=typeof TextDecoder!="undefined",Gn,wn=typeof TextEncoder!="undefined";function Rn(h){if(wn)h=(Gn||(Gn=new TextEncoder)).encode(h);else{var g=void 0;g=g===void 0?!1:g;for(var G=0,C=new Uint8Array(3*h.length),B=0;B<h.length;B++){var Q=h.charCodeAt(B);if(128>Q)C[G++]=Q;else{if(2048>Q)C[G++]=Q>>6|192;else{if(55296<=Q&&57343>=Q){if(56319>=Q&&B<h.length){var M=h.charCodeAt(++B);if(56320<=M&&57343>=M){Q=1024*(Q-55296)+M-56320+65536,C[G++]=Q>>18|240,C[G++]=Q>>12&63|128,C[G++]=Q>>6&63|128,C[G++]=Q&63|128;continue}else B--}if(g)throw Error("Found an unpaired surrogate");Q=65533}C[G++]=Q>>12|224,C[G++]=Q>>6&63|128}C[G++]=Q&63|128}}h=C.subarray(0,G)}return h}var Cn={},cn=null;function mn(h,g){g===void 0&&(g=0),je(),g=Cn[g];for(var G=Array(Math.floor(h.length/3)),C=g[64]||"",B=0,Q=0;B<h.length-2;B+=3){var M=h[B],tt=h[B+1],ct=h[B+2],s=g[M>>2];M=g[(M&3)<<4|tt>>4],tt=g[(tt&15)<<2|ct>>6],ct=g[ct&63],G[Q++]=s+M+tt+ct}switch(s=0,ct=C,h.length-B){case 2:s=h[B+1],ct=g[(s&15)<<2]||C;case 1:h=h[B],G[Q]=g[h>>2]+g[(h&3)<<4|s>>4]+ct+C}return G.join("")}function Jn(h){var g=h.length,G=3*g/4;G%3?G=Math.floor(G):"=.".indexOf(h[g-1])!=-1&&(G="=.".indexOf(h[g-2])!=-1?G-2:G-1);var C=new Uint8Array(G),B=0;return Fn(h,function(Q){C[B++]=Q}),C.subarray(0,B)}function Fn(h,g){function G(ct){for(;C<h.length;){var s=h.charAt(C++),X=cn[s];if(X!=null)return X;if(!/^[\s\xa0]*$/.test(s))throw Error("Unknown base64 encoding at char: "+s)}return ct}je();for(var C=0;;){var B=G(-1),Q=G(0),M=G(64),tt=G(64);if(tt===64&&B===-1)break;g(B<<2|Q>>4),M!=64&&(g(Q<<4&240|M>>2),tt!=64&&g(M<<6&192|tt))}}function je(){if(!cn){cn={};for(var h="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789".split(""),g=["+/=","+/","-_=","-_.","-_"],G=0;5>G;G++){var C=h.concat(g[G].split(""));Cn[G]=C;for(var B=0;B<C.length;B++){var Q=C[B];cn[Q]===void 0&&(cn[Q]=B)}}}}var Be=typeof Uint8Array.prototype.slice=="function",xn;function Xn(h,g,G){return g===G?xn||(xn=new Uint8Array(0)):Be?h.slice(g,G):new Uint8Array(h.subarray(g,G))}var de=0,Se=0;function ze(h,g){g=g===void 0?{}:g,g=g.v===void 0?!1:g.v,this.h=null,this.g=this.j=this.l=0,this.m=!1,this.v=g,h&&ee(this,h)}function ee(h,g){g=g.constructor===Uint8Array?g:g.constructor===ArrayBuffer?new Uint8Array(g):g.constructor===Array?new Uint8Array(g):g.constructor===String?Jn(g):g instanceof Uint8Array?new Uint8Array(g.buffer,g.byteOffset,g.byteLength):new Uint8Array(0),h.h=g,h.l=0,h.j=h.h.length,h.g=h.l}ze.prototype.reset=function(){this.g=this.l};function Xe(h){for(var g=128,G=0,C=0,B=0;4>B&&128<=g;B++)g=h.h[h.g++],G|=(g&127)<<7*B;if(128<=g&&(g=h.h[h.g++],G|=(g&127)<<28,C|=(g&127)>>4),128<=g)for(B=0;5>B&&128<=g;B++)g=h.h[h.g++],C|=(g&127)<<7*B+3;if(128>g)return h=G>>>0,g=C>>>0,(C=g&2147483648)&&(h=~h+1>>>0,g=~g>>>0,h==0&&(g=g+1>>>0)),h=4294967296*g+(h>>>0),C?-h:h;h.m=!0}ze.prototype.i=function(){var h=this.h,g=h[this.g],G=g&127;return 128>g?(this.g+=1,G):(g=h[this.g+1],G|=(g&127)<<7,128>g?(this.g+=2,G):(g=h[this.g+2],G|=(g&127)<<14,128>g?(this.g+=3,G):(g=h[this.g+3],G|=(g&127)<<21,128>g?(this.g+=4,G):(g=h[this.g+4],G|=(g&15)<<28,128>g?(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)))))},ze.prototype.o=function(){var h=this.h[this.g],g=this.h[this.g+1],G=this.h[this.g+2],C=this.h[this.g+3];return this.g+=4,G=(h<<0|g<<8|G<<16|C<<24)>>>0,h=2*(G>>31)+1,g=G>>>23&255,G&=8388607,g==255?G?NaN:1/0*h:g==0?h*Math.pow(2,-149)*G:h*Math.pow(2,g-150)*(G+Math.pow(2,23))};var rn=[];function Ue(){this.g=new Uint8Array(64),this.h=0}Ue.prototype.push=function(h){if(!(this.h+1<this.g.length)){var g=this.g;this.g=new Uint8Array(Math.ceil(1+2*this.g.length)),this.g.set(g)}this.g[this.h++]=h},Ue.prototype.length=function(){return this.h},Ue.prototype.end=function(){var h=this.g,g=this.h;return this.h=0,Xn(h,0,g)};function _t(h,g){for(;127<g;)h.push(g&127|128),g>>>=7;h.push(g)}function ge(h){var g={},G=g.N===void 0?!1:g.N;this.o={v:g.v===void 0?!1:g.v},this.N=G,g=this.o,rn.length?(G=rn.pop(),g&&(G.v=g.v),h&&ee(G,h),h=G):h=new ze(h,g),this.g=h,this.m=this.g.g,this.h=this.i=this.l=-1,this.j=!1}ge.prototype.reset=function(){this.g.reset(),this.h=this.l=-1};function He(h){var g=h.g;if((g=g.g==g.j)||(g=h.j)||(g=h.g,g=g.m||0>g.g||g.g>g.j),g)return!1;h.m=h.g.g,g=h.g.i();var G=g&7;return G!=0&&G!=5&&G!=1&&G!=2&&G!=3&&G!=4?(h.j=!0,!1):(h.i=g,h.l=g>>>3,h.h=G,!0)}function Bt(h){switch(h.h){case 0:if(h.h!=0)Bt(h);else{for(h=h.g;h.h[h.g]&128;)h.g++;h.g++}break;case 1:h.h!=1?Bt(h):(h=h.g,h.g+=8);break;case 2:if(h.h!=2)Bt(h);else{var g=h.g.i();h=h.g,h.g+=g}break;case 5:h.h!=5?Bt(h):(h=h.g,h.g+=4);break;case 3:g=h.l;do{if(!He(h)){h.j=!0;break}if(h.h==4){h.l!=g&&(h.j=!0);break}Bt(h)}while(1);break;default:h.j=!0}}function xe(h,g,G){var C=h.g.j,B=h.g.i(),Q=h.g.g+B;if(h.g.j=Q,G(g,h),G=Q-h.g.g,G!==0)throw Error("Message parsing ended unexpectedly. Expected to read "+B+" bytes, instead read "+(B-G)+" bytes, either the data ended unexpectedly or the message misreported its own length");return h.g.g=Q,h.g.j=C,g}function jt(h){return h.g.o()}function be(h){var g=h.g.i();h=h.g;var G=h.g;h.g+=g,h=h.h;var C;if(nn)(C=Le)||(C=Le=new TextDecoder("utf-8",{fatal:!1})),C=C.decode(h.subarray(G,G+g));else{g=G+g;for(var B=[],Q=null,M,tt,ct;G<g;)M=h[G++],128>M?B.push(M):224>M?G>=g?B.push(65533):(tt=h[G++],194>M||(tt&192)!==128?(G--,B.push(65533)):B.push((M&31)<<6|tt&63)):240>M?G>=g-1?B.push(65533):(tt=h[G++],(tt&192)!==128||M===224&&160>tt||M===237&&160<=tt||((C=h[G++])&192)!==128?(G--,B.push(65533)):B.push((M&15)<<12|(tt&63)<<6|C&63)):244>=M?G>=g-2?B.push(65533):(tt=h[G++],(tt&192)!==128||(M<<28)+(tt-144)>>30!==0||((C=h[G++])&192)!==128||((ct=h[G++])&192)!==128?(G--,B.push(65533)):(M=(M&7)<<18|(tt&63)<<12|(C&63)<<6|ct&63,M-=65536,B.push((M>>10&1023)+55296,(M&1023)+56320))):B.push(65533),8192<=B.length&&(Q=Nt(Q,B),B.length=0);C=Nt(Q,B)}return C}function Te(h,g,G){var C=h.g.i();for(C=h.g.g+C;h.g.g<C;)G.push(g.call(h.g))}function Qe(h,g){h.h==2?Te(h,ze.prototype.o,g):g.push(jt(h))}function Ge(){this.h=[],this.i=0,this.g=new Ue}function zt(h,g){g.length!==0&&(h.h.push(g),h.i+=g.length)}function Me(h){var g=h.i+h.g.length();if(g===0)return new Uint8Array(0);g=new Uint8Array(g);for(var G=h.h,C=G.length,B=0,Q=0;Q<C;Q++){var M=G[Q];M.length!==0&&(g.set(M,B),B+=M.length)}return G=h.g,C=G.h,C!==0&&(g.set(G.g.subarray(0,C),B),G.h=0),h.h=[g],g}function Pe(h,g,G){if(G!=null){_t(h.g,8*g+5),h=h.g;var C=G;C=(G=0>C?1:0)?-C:C,C===0?0<1/C?de=Se=0:(Se=0,de=2147483648):isNaN(C)?(Se=0,de=2147483647):34028234663852886e22<C?(Se=0,de=(G<<31|2139095040)>>>0):11754943508222875e-54>C?(C=Math.round(C/Math.pow(2,-149)),Se=0,de=(G<<31|C)>>>0):(g=Math.floor(Math.log(C)/Math.LN2),C*=Math.pow(2,-g),C=Math.round(8388608*C),16777216<=C&&++g,Se=0,de=(G<<31|g+127<<23|C&8388607)>>>0),G=de,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,g,G){if(h!=null)return typeof h=="object"?Ie&&h instanceof Uint8Array?G(h):on(h,g,G):g(h)}function on(h,g,G){if(Array.isArray(h)){for(var C=Array(h.length),B=0;B<h.length;B++)C[B]=Wn(h[B],g,G);return Array.isArray(h)&&h.W&&Ze(C),C}C={};for(B in h)C[B]=Wn(h[B],g,G);return C}function Oe(h){return typeof h=="number"?isFinite(h)?h:String(h):h}var sn={W:{value:!0,configurable:!0}};function Ze(h){return Array.isArray(h)&&!Object.isFrozen(h)&&Object.defineProperties(h,sn),h}var Ye;function ve(h,g,G){var C=Ye;Ye=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)||Ie&&C instanceof Uint8Array))){this.l=h-this.j,this.i=C;break t}g!==void 0&&-1<g?(this.l=Math.max(g,h+1-this.j),this.i=null):this.l=Number.MAX_VALUE}if(G)for(g=0;g<G.length;g++)h=G[g],h<this.l?(h+=this.j,(C=this.h[h])?Ze(C):this.h[h]=ne):(_e(this),(C=this.i[h])?Ze(C):this.i[h]=ne)}var ne=Object.freeze(Ze([]));function _e(h){var g=h.l+h.j;h.h[g]||(h.i=h.h[g]={})}function qt(h,g,G){return g===-1?null:(G===void 0?0:G)||g>=h.l?h.i?h.i[g]:void 0:h.h[g+h.j]}function Pt(h,g){var G=G===void 0?!1:G,C=qt(h,g,G);return C==null&&(C=ne),C===ne&&(C=Ze([]),Rt(h,g,C,G)),C}function an(h){var g=Pt(h,3);if(h.m||(h.m={}),!h.m[3]){for(var G=0;G<g.length;G++)g[G]=+g[G];h.m[3]=!0}return g}function he(h,g,G){return h=qt(h,g),h==null?G:h}function Ct(h,g,G){return h=qt(h,g),h=h==null?h:+h,h==null?G===void 0?0:G:h}function Rt(h,g,G,C){(C===void 0?0:C)||g>=h.l?(_e(h),h.i[g]=G):h.h[g+h.j]=G}function re(h,g,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 g(C))}return h.g[G]}function we(h,g){h.g||(h.g={});var G=h.g[1];if(!G){var C=Pt(h,1);G=[];for(var B=0;B<C.length;B++)G[B]=new g(C[B]);h.g[1]=G}return G}function te(h,g,G){var C=C===void 0?!1:C;h.g||(h.g={});var B=G&&et(G);h.g[g]=G,Rt(h,g,B,C)}function ie(h,g,G,C){var B=we(h,G);g=g||new G,h=Pt(h,1),C!=null?(B.splice(C,0,g),h.splice(C,0,et(g))):(B.push(g),h.push(et(g)))}ve.prototype.toJSON=function(){var h=et(this);return on(h,Oe,mn)};function et(h,g){if(h.g)for(var G in h.g){var C=h.g[G];if(Array.isArray(C))for(var B=0;B<C.length;B++)C[B]&&et(C[B]);else C&&et(C)}return h.h}ve.prototype.toString=function(){return et(this).toString()};function ot(h,g){if(h=h.o){zt(g,g.g.end());for(var G=0;G<h.length;G++)zt(g,h[G])}}function at(h,g){if(g.h==4)return!1;var G=g.m;return Bt(g),g.N||(g=Xn(g.g.h,G,g.g.g),(G=h.o)?G.push(g):h.o=[g]),!0}function Ot(h){ve.call(this,h,-1,le)}ht(Ot,ve),Ot.prototype.getRows=function(){return qt(this,1)},Ot.prototype.getCols=function(){return qt(this,2)},Ot.prototype.getPackedDataList=function(){return an(this)},Ot.prototype.getLayout=function(){return he(this,4,0)};function ce(h,g){for(;He(g);)switch(g.i){case 8:var G=g.g.i();Rt(h,1,G);break;case 16:G=g.g.i(),Rt(h,2,G);break;case 29:case 26:Qe(g,h.getPackedDataList());break;case 32:G=Xe(g.g),Rt(h,4,G);break;default:if(!at(h,g))return h}return h}var le=[3];function Lt(h,g){var G=void 0;return new(G||(G=Promise))(function(C,B){function Q(ct){try{tt(g.next(ct))}catch(s){B(s)}}function M(ct){try{tt(g.throw(ct))}catch(s){B(s)}}function tt(ct){ct.done?C(ct.value):new G(function(s){s(ct.value)}).then(Q,M)}tt((g=g.apply(h,void 0)).next())})}function fe(h){ve.call(this,h)}ht(fe,ve);function Ce(h,g){for(;He(g);)switch(g.i){case 8:var G=g.g.i();Rt(h,1,G);break;case 21:G=jt(g),Rt(h,2,G);break;case 26:G=be(g),Rt(h,3,G);break;case 34:G=be(g),Rt(h,4,G);break;default:if(!at(h,g))return h}return h}function De(h){ve.call(this,h,-1,$e)}ht(De,ve),De.prototype.addClassification=function(h,g){return ie(this,h,fe,g),this};var $e=[1];function dn(h){ve.call(this,h)}ht(dn,ve);function pn(h,g){for(;He(g);)switch(g.i){case 13:var G=jt(g);Rt(h,1,G);break;case 21:G=jt(g),Rt(h,2,G);break;case 29:G=jt(g),Rt(h,3,G);break;case 37:G=jt(g),Rt(h,4,G);break;case 45:G=jt(g),Rt(h,5,G);break;default:if(!at(h,g))return h}return h}function Fe(h){ve.call(this,h,-1,jn)}ht(Fe,ve);function qe(h){t:{var g=new Fe;for(h=new ge(h);He(h);)switch(h.i){case 10:var G=xe(h,new dn,pn);ie(g,G,dn,void 0);break;default:if(!at(g,h))break t}}return g}var jn=[1];function tn(h){ve.call(this,h)}ht(tn,ve);function Ne(h){ve.call(this,h,-1,In)}ht(Ne,ve),Ne.prototype.getVertexType=function(){return he(this,1,0)},Ne.prototype.getPrimitiveType=function(){return he(this,2,0)},Ne.prototype.getVertexBufferList=function(){return an(this)},Ne.prototype.getIndexBufferList=function(){return Pt(this,4)};function gn(h,g){for(;He(g);)switch(g.i){case 8:var G=Xe(g.g);Rt(h,1,G);break;case 16:G=Xe(g.g),Rt(h,2,G);break;case 29:case 26:Qe(g,h.getVertexBufferList());break;case 32:case 34:G=g;var C=h.getIndexBufferList();G.h==2?Te(G,ze.prototype.i,C):C.push(G.g.i());break;default:if(!at(h,g))return h}return h}var In=[3,4];function Ke(h){ve.call(this,h)}ht(Ke,ve),Ke.prototype.getMesh=function(){return re(this,Ne,1)},Ke.prototype.getPoseTransformMatrix=function(){return re(this,Ot,2)};function En(h){t:{var g=new Ke;for(h=new ge(h);He(h);)switch(h.i){case 10:var G=xe(h,new Ne,gn);te(g,1,G);break;case 18:G=xe(h,new Ot,ce),te(g,2,G);break;default:if(!at(g,h))break t}}return g}function en(h,g,G){if(G=h.createShader(G===0?h.VERTEX_SHADER:h.FRAGMENT_SHADER),h.shaderSource(G,g),h.compileShader(G),!h.getShaderParameter(G,h.COMPILE_STATUS))throw Error(`Could not compile WebGL shader.
|
|
71
|
+
`+Z.getProgramInfoLog(f));e=r.o=f,Z.useProgram(e),c=Z.getUniformLocation(e,"sampler0"),r.j={K:Z.getAttribLocation(e,"aVertex"),J:Z.getAttribLocation(e,"aTex"),ma:c},r.u=Z.createBuffer(),Z.bindBuffer(Z.ARRAY_BUFFER,r.u),Z.enableVertexAttribArray(r.j.K),Z.vertexAttribPointer(r.j.K,2,Z.FLOAT,!1,0,0),Z.bufferData(Z.ARRAY_BUFFER,new Float32Array([-1,-1,-1,1,1,1,1,-1]),Z.STATIC_DRAW),Z.bindBuffer(Z.ARRAY_BUFFER,null),r.s=Z.createBuffer(),Z.bindBuffer(Z.ARRAY_BUFFER,r.s),Z.enableVertexAttribArray(r.j.J),Z.vertexAttribPointer(r.j.J,2,Z.FLOAT,!1,0,0),Z.bufferData(Z.ARRAY_BUFFER,new Float32Array([0,1,0,0,1,0,1,1]),Z.STATIC_DRAW),Z.bindBuffer(Z.ARRAY_BUFFER,null),Z.uniform1i(c,0)}e=r.j,Z.useProgram(r.o),Z.canvas.width=d.width,Z.canvas.height=d.height,Z.viewport(0,0,d.width,d.height),Z.activeTexture(Z.TEXTURE0),r.h.bindTexture2d(d.glName),Z.enableVertexAttribArray(e.K),Z.bindBuffer(Z.ARRAY_BUFFER,r.u),Z.vertexAttribPointer(e.K,2,Z.FLOAT,!1,0,0),Z.enableVertexAttribArray(e.J),Z.bindBuffer(Z.ARRAY_BUFFER,r.s),Z.vertexAttribPointer(e.J,2,Z.FLOAT,!1,0,0),Z.bindFramebuffer(Z.DRAW_FRAMEBUFFER?Z.DRAW_FRAMEBUFFER:Z.FRAMEBUFFER,null),Z.clearColor(0,0,0,0),Z.clear(Z.COLOR_BUFFER_BIT),Z.colorMask(!0,!0,!0,!0),Z.drawArrays(Z.TRIANGLE_FAN,0,4),Z.disableVertexAttribArray(e.K),Z.disableVertexAttribArray(e.J),Z.bindBuffer(Z.ARRAY_BUFFER,null),r.h.bindTexture2d(0)}function q(r){this.g=r}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(r,d){return d+r}function Kt(r,d){window[r]=d}function It(r){var d=document.createElement("script");return d.setAttribute("src",r),d.setAttribute("crossorigin","anonymous"),new Promise(function(Z){d.addEventListener("load",function(){Z()},!1),d.addEventListener("error",function(){Z()},!1),document.body.appendChild(d)})}function ft(){return gt(function(r){switch(r.g){case 1:return r.o=2,_(r,WebAssembly.instantiate(yt),4);case 4:r.g=3,r.o=0;break;case 2:return r.o=0,r.j=null,r.return(!1);case 3:return r.return(!0)}})}function Wt(r){if(this.g=r,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=r&&r.locateFile||Xt,typeof window=="object")var d=window.location.pathname.toString().substring(0,window.location.pathname.toString().lastIndexOf("/"))+"/";else if(typeof location!="undefined")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,r.options){d=L(Object.keys(r.options));for(var Z=d.next();!Z.done;Z=d.next()){Z=Z.value;var e=r.options[Z].default;e!==void 0&&(this.j[Z]=typeof e=="function"?e():e)}}}i=Wt.prototype,i.close=function(){return this.i&&this.i.delete(),Promise.resolve()};function St(r){var d,Z,e,c,f,t,u,a,b,I,w;return gt(function(H){switch(H.g){case 1:return r.Z?(d=r.g.files===void 0?[]:typeof r.g.files=="function"?r.g.files(r.j):r.g.files,_(H,ft(),2)):H.return();case 2:if(Z=H.h,typeof window=="object")return Kt("createMediapipeSolutionsWasm",{locateFile:r.locateFile}),Kt("createMediapipeSolutionsPackedAssets",{locateFile:r.locateFile}),t=d.filter(function(U){return U.data!==void 0}),u=d.filter(function(U){return U.data===void 0}),a=Promise.all(t.map(function(U){var j=l(r,U.url);if(U.path!==void 0){var D=U.path;j=j.then(function($){return r.overrideFile(D,$),Promise.resolve($)})}return j})),b=Promise.all(u.map(function(U){return U.simd===void 0||U.simd&&Z||!U.simd&&!Z?It(r.locateFile(U.url,r.$)):Promise.resolve()})).then(function(){var U,j,D;return gt(function($){if($.g==1)return U=window.createMediapipeSolutionsWasm,j=window.createMediapipeSolutionsPackedAssets,D=r,_($,U(j),2);D.h=$.h,$.g=0})}),I=function(){return gt(function(U){return r.g.graph&&r.g.graph.url?U=_(U,l(r,r.g.graph.url),0):(U.g=0,U=void 0),U})}(),_(H,Promise.all([b,a,I]),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&&Z||!U.simd&&!Z}).map(function(U){return r.locateFile(U.url,r.$)}),importScripts.apply(null,J(e)),c=r,_(H,createMediapipeSolutionsWasm(Module),6);case 6:c.h=H.h,r.l=new OffscreenCanvas(1,1),r.h.canvas=r.l,f=r.h.GL.createContext(r.l,{antialias:!1,alpha:!1,ja:typeof WebGL2RenderingContext!="undefined"?2:1}),r.h.GL.makeContextCurrent(f),H.g=4;break;case 7:if(r.l=document.createElement("canvas"),w=r.l.getContext("webgl2",{}),!w&&(w=r.l.getContext("webgl",{}),!w))return alert("Failed to create WebGL canvas context when passing video frame."),H.return();r.G=w,r.h.canvas=r.l,r.h.createContext(r.l,!0,!0,{});case 4:r.i=new r.h.SolutionWasm,r.Z=!1,H.g=0}})}function wt(r){var d,Z,e,c,f,t,u,a;return gt(function(b){if(b.g==1){if(r.g.graph&&r.g.graph.url&&r.Y===r.g.graph.url)return b.return();if(r.s=!0,!r.g.graph||!r.g.graph.url){b.g=2;return}return r.Y=r.g.graph.url,_(b,l(r,r.g.graph.url),3)}for(b.g!=2&&(d=b.h,r.i.loadGraph(d)),Z=L(Object.keys(r.C)),e=Z.next();!e.done;e=Z.next())c=e.value,r.i.overrideFile(c,r.C[c]);if(r.C={},r.g.listeners)for(f=L(r.g.listeners),t=f.next();!t.done;t=f.next())u=t.value,T(r,u);a=r.j,r.j={},r.setOptions(a),b.g=0})}i.reset=function(){var r=this;return gt(function(d){r.i&&(r.i.reset(),r.o={},r.u={}),d.g=0})},i.setOptions=function(r,d){var Z=this;if(d=d||this.g.options){for(var e=[],c=[],f={},t=L(Object.keys(r)),u=t.next();!u.done;f={R:f.R,S:f.S},u=t.next()){var a=u.value;a in this.j&&this.j[a]===r[a]||(this.j[a]=r[a],u=d[a],u!==void 0&&(u.onChange&&(f.R=u.onChange,f.S=r[a],e.push(function(b){return function(){var I;return gt(function(w){if(w.g==1)return _(w,b.R(b.S),2);I=w.h,I===!0&&(Z.s=!0),w.g=0})}}(f))),u.graphOptionXref&&(a={valueNumber:u.type===1?r[a]:0,valueBoolean:u.type===0?r[a]:!1,valueString:u.type===2?r[a]:""},u=Object.assign(Object.assign(Object.assign({},{calculatorName:"",calculatorIndex:0}),u.graphOptionXref),a),c.push(u))))}(e.length!==0||c.length!==0)&&(this.s=!0,this.B=(this.B===void 0?[]:this.B).concat(c),this.A=(this.A===void 0?[]:this.A).concat(e))}};function Ht(r){var d,Z,e,c,f,t,u;return gt(function(a){switch(a.g){case 1:if(!r.s)return a.return();if(!r.A){a.g=2;break}d=L(r.A),Z=d.next();case 3:if(Z.done){a.g=5;break}return e=Z.value,_(a,e(),4);case 4:Z=d.next(),a.g=3;break;case 5:r.A=void 0;case 2:if(r.B){for(c=new r.h.GraphOptionChangeRequestList,f=L(r.B),t=f.next();!t.done;t=f.next())u=t.value,c.push_back(u);r.i.changeOptions(c),c.delete(),r.B=void 0}r.s=!1,a.g=0}})}i.initialize=function(){var r=this;return gt(function(d){return d.g==1?_(d,St(r),2):d.g!=3?_(d,wt(r),3):_(d,Ht(r),0)})};function l(r,d){var Z,e;return gt(function(c){return d in r.H?c.return(r.H[d]):(Z=r.locateFile(d,""),e=fetch(Z).then(function(f){return f.arrayBuffer()}),r.H[d]=e,c.return(e))})}i.overrideFile=function(r,d){this.i?this.i.overrideFile(r,d):this.C[r]=d},i.clearOverriddenFiles=function(){this.C={},this.i&&this.i.clearOverriddenFiles()},i.send=function(r,d){var Z=this,e,c,f,t,u,a,b,I,w;return gt(function(H){switch(H.g){case 1:return Z.g.inputs?(e=1e3*(d==null?performance.now():d),_(H,Z.D,2)):H.return();case 2:return _(H,Z.initialize(),3);case 3:for(c=new Z.h.PacketDataList,f=L(Object.keys(r)),t=f.next();!t.done;t=f.next())if(u=t.value,a=Z.g.inputs[u]){t:{var U=r[u];switch(a.type){case"video":var j=Z.o[a.stream];if(j||(j=new A(Z.h,Z.G),Z.o[a.stream]=j),j.l===0&&(j.l=j.h.createTexture()),typeof HTMLVideoElement!="undefined"&&U instanceof HTMLVideoElement)var D=U.videoWidth,$=U.videoHeight;else typeof HTMLImageElement!="undefined"&&U instanceof HTMLImageElement?(D=U.naturalWidth,$=U.naturalHeight):(D=U.width,$=U.height);$={glName:j.l,width:D,height:$},D=j.g,D.canvas.width=$.width,D.canvas.height=$.height,D.activeTexture(D.TEXTURE0),j.h.bindTexture2d(j.l),D.texImage2D(D.TEXTURE_2D,0,D.RGBA,D.RGBA,D.UNSIGNED_BYTE,U),j.h.bindTexture2d(0),j=$;break t;case"detections":for(j=Z.o[a.stream],j||(j=new q(Z.h),Z.o[a.stream]=j),j.data||(j.data=new j.g.DetectionListData),j.data.reset(U.length),$=0;$<U.length;++$){D=U[$];var ut=j.data,mt=ut.setBoundingBox,pt=$,vt=D.boundingBox,Zt=new G;if(Ct(Zt,1,vt.xCenter),Ct(Zt,2,vt.yCenter),Ct(Zt,3,vt.height),Ct(Zt,4,vt.width),Ct(Zt,5,vt.rotation),Ct(Zt,6,vt.rectId),vt=O(Zt,C),mt.call(ut,pt,vt),D.landmarks)for(ut=0;ut<D.landmarks.length;++ut){Zt=D.landmarks[ut];var At=!!Zt.visibility;mt=j.data,pt=mt.addNormalizedLandmark,vt=$,Zt=Object.assign(Object.assign({},Zt),{visibility:At?Zt.visibility:0}),At=new me,Ct(At,1,Zt.x),Ct(At,2,Zt.y),Ct(At,3,Zt.z),Zt.visibility&&Ct(At,4,Zt.visibility),Zt=O(At,ye),pt.call(mt,vt,Zt)}if(D.V)for(ut=0;ut<D.V.length;++ut)mt=j.data,pt=mt.addClassification,vt=$,Zt=D.V[ut],At=new kt,Ct(At,2,Zt.ga),Zt.index&&Ct(At,1,Zt.index),Zt.label&&Ct(At,3,Zt.label),Zt.displayName&&Ct(At,4,Zt.displayName),Zt=O(At,Lt),pt.call(mt,vt,Zt)}j=j.data;break t;default:j={}}}switch(b=j,I=a.stream,a.type){case"video":c.pushTexture2d(Object.assign(Object.assign({},b),{stream:I,timestamp:e}));break;case"detections":w=b,w.stream=I,w.timestamp=e,c.pushDetectionList(w);break;default:throw Error("Unknown input config type: '"+a.type+"'")}}return Z.i.send(c),_(H,Z.D,4);case 4:c.delete(),H.g=0}})};function v(r,d,Z){var e,c,f,t,u,a,b,I,w,H,U,j,D,$;return gt(function(ut){switch(ut.g){case 1:if(!Z)return ut.return(d);for(e={},c=0,f=L(Object.keys(Z)),t=f.next();!t.done;t=f.next())u=t.value,a=Z[u],typeof a!="string"&&a.type==="texture"&&d[a.stream]!==void 0&&++c;1<c&&(r.I=!1),b=L(Object.keys(Z)),t=b.next();case 2:if(t.done){ut.g=4;break}if(I=t.value,w=Z[I],typeof w=="string")return D=e,$=I,_(ut,x(r,I,d[w]),14);if(H=d[w.stream],w.type==="detection_list"){if(H){for(var mt=H.getRectList(),pt=H.getLandmarksList(),vt=H.getClassificationsList(),Zt=[],At=0;At<mt.size();++At){var oe=V(mt.get(At),G,C);oe={boundingBox:{xCenter:re(oe,1),yCenter:re(oe,2),height:re(oe,3),width:re(oe,4),rotation:re(oe,5,0),rectId:ie(oe,6)},landmarks:we(V(pt.get(At),Ee,h),me,1).map(N),V:Y(V(vt.get(At),Jt,Qt))},Zt.push(oe)}mt=Zt}else mt=[];e[I]=mt,ut.g=7;break}if(w.type==="proto_list"){if(H){for(mt=Array(H.size()),pt=0;pt<H.size();pt++)mt[pt]=H.get(pt);H.delete()}else mt=[];e[I]=mt,ut.g=7;break}if(H===void 0){ut.g=3;break}if(w.type==="float_list"){e[I]=H,ut.g=7;break}if(w.type==="proto"){e[I]=H,ut.g=7;break}if(w.type!=="texture")throw Error("Unknown output config type: '"+w.type+"'");return U=r.u[I],U||(U=new A(r.h,r.G),r.u[I]=U),_(ut,K(U,H,r.I),13);case 13:j=ut.h,e[I]=j;case 7:w.transform&&e[I]&&(e[I]=w.transform(e[I])),ut.g=3;break;case 14:D[$]=ut.h;case 3:t=b.next(),ut.g=2;break;case 4:return ut.return(e)}})}function x(r,d,Z){var e;return gt(function(c){return typeof Z=="number"||Z instanceof Uint8Array||Z instanceof r.h.Uint8BlobList?c.return(Z):Z instanceof r.h.Texture2dDataOut?(e=r.u[d],e||(e=new A(r.h,r.G),r.u[d]=e),c.return(K(e,Z,r.I))):c.return(void 0)})}function T(r,d){for(var Z=d.name||"$",e=[].concat(J(d.wants)),c=new r.h.StringList,f=L(d.wants),t=f.next();!t.done;t=f.next())c.push_back(t.value);f=r.h.PacketListener.implement({onResults:function(u){for(var a={},b=0;b<d.wants.length;++b)a[e[b]]=u.get(b);var I=r.listeners[Z];I&&(r.D=v(r,a,d.outs).then(function(w){w=I(w);for(var H=0;H<d.wants.length;++H){var U=a[e[H]];typeof U=="object"&&U.hasOwnProperty&&U.hasOwnProperty("delete")&&U.delete()}w&&(r.D=w)}))}}),r.i.attachMultiListener(c,f),c.delete()}i.onResults=function(r,d){this.listeners[d||"$"]=r},Nt("Solution",Wt),Nt("OptionType",{BOOL:0,NUMBER:1,ia:2,0:"BOOL",1:"NUMBER",2:"STRING"});function E(r){var d=this;r=r||{};var Z={url:"face_detection_short.binarypb"},e={type:1,graphOptionXref:{calculatorType:"TensorsToDetectionsCalculator",calculatorName:"facedetectionshortrangegpu__facedetectionshortrangecommon__TensorsToDetectionsCalculator",fieldName:"min_score_thresh"}};this.g=new Wt({locateFile:r.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:Z,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(c){var f,t,u,a,b,I;return gt(function(w){switch(w.g){case 1:f=c==="short"?["face_detection_short_range.tflite"]:["face_detection_full_range_sparse.tflite"],t=L(f),u=t.next();case 2:if(u.done){w.g=4;break}return a=u.value,b="third_party/mediapipe/modules/face_detection/"+a,_(w,l(d.g,a),5);case 5:I=w.h,d.g.overrideFile(b,I),u=t.next(),w.g=2;break;case 4:return Z.url=c==="short"?"face_detection_short.binarypb":"face_detection_full.binarypb",e.graphOptionXref.calculatorName=c==="short"?"facedetectionshortrangegpu__facedetectionshortrangecommon__TensorsToDetectionsCalculator":"facedetectionfullrangegpu__facedetectionfullrangecommon__TensorsToDetectionsCalculator",w.return(!0)}})}},minDetectionConfidence:e}})}i=E.prototype,i.close=function(){return this.g.close(),Promise.resolve()},i.onResults=function(r){this.g.onResults(r)},i.initialize=function(){var r=this;return gt(function(d){return _(d,r.g.initialize(),0)})},i.reset=function(){this.g.reset()},i.send=function(r){var d=this;return gt(function(Z){return _(Z,d.g.send(r),0)})},i.setOptions=function(r){this.g.setOptions(r)},Nt("FaceDetection",E),Nt("FACEDETECTION_LIPS",M),Nt("FACEDETECTION_LEFT_EYE",Q),Nt("FACEDETECTION_LEFT_EYEBROW",B),Nt("FACEDETECTION_RIGHT_EYE",tt),Nt("FACEDETECTION_RIGHT_EYEBROW",ct),Nt("FACEDETECTION_FACE_OVAL",s),Nt("FACEDETECTION_CONTOURS",X),Nt("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]]),Nt("VERSION","0.4.1646425229")}).call(gi);const Zi={};(function(){var i;function n(h){var g=0;return function(){return g<h.length?{done:!1,value:h[g++]}:{done:!0}}}var o=typeof Object.defineProperties=="function"?Object.defineProperty:function(h,g,G){return h==Array.prototype||h==Object.prototype||(h[g]=G.value),h};function m(h){h=[typeof globalThis=="object"&&globalThis,h,typeof window=="object"&&window,typeof self=="object"&&self,typeof global=="object"&&global];for(var g=0;g<h.length;++g){var G=h[g];if(G&&G.Math==Math)return G}throw Error("Cannot find global object")}var y=m(this);function S(h,g){if(g)t:{var G=y;h=h.split(".");for(var C=0;C<h.length-1;C++){var M=h[C];if(!(M in G))break t;G=G[M]}h=h[h.length-1],C=G[h],g=g(C),g!=C&&g!=null&&o(G,h,{configurable:!0,writable:!0,value:g})}}S("Symbol",function(h){function g(Q){if(this instanceof g)throw new TypeError("Symbol is not a constructor");return new G(C+(Q||"")+"_"+M++,Q)}function G(Q,B){this.g=Q,o(this,"description",{configurable:!0,writable:!0,value:B})}if(h)return h;G.prototype.toString=function(){return this.g};var C="jscomp_symbol_"+(1e9*Math.random()>>>0)+"_",M=0;return g}),S("Symbol.iterator",function(h){if(h)return h;h=Symbol("Symbol.iterator");for(var g="Array Int8Array Uint8Array Uint8ClampedArray Int16Array Uint16Array Int32Array Uint32Array Float32Array Float64Array".split(" "),G=0;G<g.length;G++){var C=y[g[G]];typeof C=="function"&&typeof C.prototype[h]!="function"&&o(C.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 L(h){var g=typeof Symbol!="undefined"&&Symbol.iterator&&h[Symbol.iterator];return g?g.call(h):{next:n(h)}}function J(h){if(!(h instanceof Array)){h=L(h);for(var g,G=[];!(g=h.next()).done;)G.push(g.value);h=G}return h}var rt=typeof Object.create=="function"?Object.create:function(h){function g(){}return g.prototype=h,new g},z;if(typeof Object.setPrototypeOf=="function")z=Object.setPrototypeOf;else{var st;t:{var Gt={a:!0},Vt={};try{Vt.__proto__=Gt,st=Vt.a;break t}catch{}st=!1}z=st?function(h,g){if(h.__proto__=g,h.__proto__!==g)throw new TypeError(h+" is not extensible");return h}:null}var dt=z;function ht(h,g){if(h.prototype=rt(g.prototype),h.prototype.constructor=h,dt)dt(h,g);else for(var G in g)if(G!="prototype")if(Object.defineProperties){var C=Object.getOwnPropertyDescriptor(g,G);C&&Object.defineProperty(h,G,C)}else h[G]=g[G];h.ea=g.prototype}function Yt(){this.l=!1,this.i=null,this.h=void 0,this.g=1,this.s=this.m=0,this.j=null}function Ft(h){if(h.l)throw new TypeError("Generator is already running");h.l=!0}Yt.prototype.o=function(h){this.h=h};function Bt(h,g){h.j={U:g,V:!0},h.g=h.m||h.s}Yt.prototype.return=function(h){this.j={return:h},this.g=this.s};function _(h,g,G){return h.g=G,{value:g}}function Ae(h){this.g=new Yt,this.h=h}function cn(h,g){Ft(h.g);var G=h.g.i;return G?We(h,"return"in G?G.return:function(C){return{value:C,done:!0}},g,h.g.return):(h.g.return(g),Dt(h))}function We(h,g,G,C){try{var M=g.call(h.g.i,G);if(!(M instanceof Object))throw new TypeError("Iterator result "+M+" is not an object");if(!M.done)return h.g.l=!1,M;var Q=M.value}catch(B){return h.g.i=null,Bt(h.g,B),Dt(h)}return h.g.i=null,C.call(h.g,Q),Dt(h)}function Dt(h){for(;h.g.g;)try{var g=h.h(h.g);if(g)return h.g.l=!1,{value:g.value,done:!1}}catch(G){h.g.h=void 0,Bt(h.g,G)}if(h.g.l=!1,h.g.j){if(g=h.g.j,h.g.j=null,g.V)throw g.U;return{value:g.return,done:!0}}return{value:void 0,done:!0}}function Bn(h){this.next=function(g){return Ft(h.g),h.g.i?g=We(h,h.g.i.next,g,h.g.o):(h.g.o(g),g=Dt(h)),g},this.throw=function(g){return Ft(h.g),h.g.i?g=We(h,h.g.i.throw,g,h.g.o):(Bt(h.g,g),g=Dt(h)),g},this.return=function(g){return cn(h,g)},this[Symbol.iterator]=function(){return this}}function ae(h,g){return g=new Bn(new Ae(g)),dt&&h.prototype&&dt(g,h.prototype),g}function gt(h,g){h instanceof String&&(h+="");var G=0,C=!1,M={next:function(){if(!C&&G<h.length){var Q=G++;return{value:g(Q,h[Q]),done:!1}}return C=!0,{done:!0,value:void 0}}};return M[Symbol.iterator]=function(){return M},M}var mn=typeof Object.assign=="function"?Object.assign:function(h,g){for(var G=1;G<arguments.length;G++){var C=arguments[G];if(C)for(var M in C)Object.prototype.hasOwnProperty.call(C,M)&&(h[M]=C[M])}return h};S("Object.assign",function(h){return h||mn}),S("Promise",function(h){function g(B){this.h=0,this.i=void 0,this.g=[],this.o=!1;var tt=this.j();try{B(tt.resolve,tt.reject)}catch(ct){tt.reject(ct)}}function G(){this.g=null}function C(B){return B instanceof g?B:new g(function(tt){tt(B)})}if(h)return h;G.prototype.h=function(B){if(this.g==null){this.g=[];var tt=this;this.i(function(){tt.l()})}this.g.push(B)};var M=y.setTimeout;G.prototype.i=function(B){M(B,0)},G.prototype.l=function(){for(;this.g&&this.g.length;){var B=this.g;this.g=[];for(var tt=0;tt<B.length;++tt){var ct=B[tt];B[tt]=null;try{ct()}catch(s){this.j(s)}}}this.g=null},G.prototype.j=function(B){this.i(function(){throw B})},g.prototype.j=function(){function B(s){return function(X){ct||(ct=!0,s.call(tt,X))}}var tt=this,ct=!1;return{resolve:B(this.C),reject:B(this.l)}},g.prototype.C=function(B){if(B===this)this.l(new TypeError("A Promise cannot resolve to itself"));else if(B instanceof g)this.F(B);else{t:switch(typeof B){case"object":var tt=B!=null;break t;case"function":tt=!0;break t;default:tt=!1}tt?this.u(B):this.m(B)}},g.prototype.u=function(B){var tt=void 0;try{tt=B.then}catch(ct){this.l(ct);return}typeof tt=="function"?this.G(tt,B):this.m(B)},g.prototype.l=function(B){this.s(2,B)},g.prototype.m=function(B){this.s(1,B)},g.prototype.s=function(B,tt){if(this.h!=0)throw Error("Cannot settle("+B+", "+tt+"): Promise already settled in state"+this.h);this.h=B,this.i=tt,this.h===2&&this.D(),this.A()},g.prototype.D=function(){var B=this;M(function(){if(B.B()){var tt=y.console;typeof tt!="undefined"&&tt.error(B.i)}},1)},g.prototype.B=function(){if(this.o)return!1;var B=y.CustomEvent,tt=y.Event,ct=y.dispatchEvent;return typeof ct=="undefined"?!0:(typeof B=="function"?B=new B("unhandledrejection",{cancelable:!0}):typeof tt=="function"?B=new tt("unhandledrejection",{cancelable:!0}):(B=y.document.createEvent("CustomEvent"),B.initCustomEvent("unhandledrejection",!1,!0,B)),B.promise=this,B.reason=this.i,ct(B))},g.prototype.A=function(){if(this.g!=null){for(var B=0;B<this.g.length;++B)Q.h(this.g[B]);this.g=null}};var Q=new G;return g.prototype.F=function(B){var tt=this.j();B.J(tt.resolve,tt.reject)},g.prototype.G=function(B,tt){var ct=this.j();try{B.call(tt,ct.resolve,ct.reject)}catch(s){ct.reject(s)}},g.prototype.then=function(B,tt){function ct(Y,N){return typeof Y=="function"?function(A){try{s(Y(A))}catch(K){X(K)}}:N}var s,X,R=new g(function(Y,N){s=Y,X=N});return this.J(ct(B,s),ct(tt,X)),R},g.prototype.catch=function(B){return this.then(void 0,B)},g.prototype.J=function(B,tt){function ct(){switch(s.h){case 1:B(s.i);break;case 2:tt(s.i);break;default:throw Error("Unexpected state: "+s.h)}}var s=this;this.g==null?Q.h(ct):this.g.push(ct),this.o=!0},g.resolve=C,g.reject=function(B){return new g(function(tt,ct){ct(B)})},g.race=function(B){return new g(function(tt,ct){for(var s=L(B),X=s.next();!X.done;X=s.next())C(X.value).J(tt,ct)})},g.all=function(B){var tt=L(B),ct=tt.next();return ct.done?C([]):new g(function(s,X){function R(A){return function(K){Y[A]=K,N--,N==0&&s(Y)}}var Y=[],N=0;do Y.push(void 0),N++,C(ct.value).J(R(Y.length-1),X),ct=tt.next();while(!ct.done)})},g}),S("Object.is",function(h){return h||function(g,G){return g===G?g!==0||1/g===1/G:g!==g&&G!==G}}),S("Array.prototype.includes",function(h){return h||function(g,G){var C=this;C instanceof String&&(C=String(C));var M=C.length;for(G=G||0,0>G&&(G=Math.max(G+M,0));G<M;G++){var Q=C[G];if(Q===g||Object.is(Q,g))return!0}return!1}}),S("String.prototype.includes",function(h){return h||function(g,G){if(this==null)throw new TypeError("The 'this' value for String.prototype.includes must not be null or undefined");if(g instanceof RegExp)throw new TypeError("First argument to String.prototype.includes must not be a regular expression");return this.indexOf(g,G||0)!==-1}}),S("Array.prototype.keys",function(h){return h||function(){return gt(this,function(g){return g})}});var An=this||self;function Ve(h,g){h=h.split(".");var G=An;h[0]in G||typeof G.execScript=="undefined"||G.execScript("var "+h[0]);for(var C;h.length&&(C=h.shift());)h.length||g===void 0?G[C]&&G[C]!==Object.prototype[C]?G=G[C]:G=G[C]={}:G[C]=g}function Nt(h,g){return g=String.fromCharCode.apply(null,g),h==null?g:h+g}var Te,nn=typeof TextDecoder!="undefined",Gn,wn=typeof TextEncoder!="undefined";function Rn(h){if(wn)h=(Gn||(Gn=new TextEncoder)).encode(h);else{var g=void 0;g=g===void 0?!1:g;for(var G=0,C=new Uint8Array(3*h.length),M=0;M<h.length;M++){var Q=h.charCodeAt(M);if(128>Q)C[G++]=Q;else{if(2048>Q)C[G++]=Q>>6|192;else{if(55296<=Q&&57343>=Q){if(56319>=Q&&M<h.length){var B=h.charCodeAt(++M);if(56320<=B&&57343>=B){Q=1024*(Q-55296)+B-56320+65536,C[G++]=Q>>18|240,C[G++]=Q>>12&63|128,C[G++]=Q>>6&63|128,C[G++]=Q&63|128;continue}else M--}if(g)throw Error("Found an unpaired surrogate");Q=65533}C[G++]=Q>>12|224,C[G++]=Q>>6&63|128}C[G++]=Q&63|128}}h=C.subarray(0,G)}return h}var Cn={},an=null;function pn(h,g){g===void 0&&(g=0),je(),g=Cn[g];for(var G=Array(Math.floor(h.length/3)),C=g[64]||"",M=0,Q=0;M<h.length-2;M+=3){var B=h[M],tt=h[M+1],ct=h[M+2],s=g[B>>2];B=g[(B&3)<<4|tt>>4],tt=g[(tt&15)<<2|ct>>6],ct=g[ct&63],G[Q++]=s+B+tt+ct}switch(s=0,ct=C,h.length-M){case 2:s=h[M+1],ct=g[(s&15)<<2]||C;case 1:h=h[M],G[Q]=g[h>>2]+g[(h&3)<<4|s>>4]+ct+C}return G.join("")}function En(h){var g=h.length,G=3*g/4;G%3?G=Math.floor(G):"=.".indexOf(h[g-1])!=-1&&(G="=.".indexOf(h[g-2])!=-1?G-2:G-1);var C=new Uint8Array(G),M=0;return Fn(h,function(Q){C[M++]=Q}),C.subarray(0,M)}function Fn(h,g){function G(ct){for(;C<h.length;){var s=h.charAt(C++),X=an[s];if(X!=null)return X;if(!/^[\s\xa0]*$/.test(s))throw Error("Unknown base64 encoding at char: "+s)}return ct}je();for(var C=0;;){var M=G(-1),Q=G(0),B=G(64),tt=G(64);if(tt===64&&M===-1)break;g(M<<2|Q>>4),B!=64&&(g(Q<<4&240|B>>2),tt!=64&&g(B<<6&192|tt))}}function je(){if(!an){an={};for(var h="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789".split(""),g=["+/=","+/","-_=","-_.","-_"],G=0;5>G;G++){var C=h.concat(g[G].split(""));Cn[G]=C;for(var M=0;M<C.length;M++){var Q=C[M];an[Q]===void 0&&(an[Q]=M)}}}}var Me=typeof Uint8Array.prototype.slice=="function",xn;function Xn(h,g,G){return g===G?xn||(xn=new Uint8Array(0)):Me?h.slice(g,G):new Uint8Array(h.subarray(g,G))}var de=0,Se=0;function ze(h,g){g=g===void 0?{}:g,g=g.v===void 0?!1:g.v,this.h=null,this.g=this.j=this.l=0,this.m=!1,this.v=g,h&&ee(this,h)}function ee(h,g){g=g.constructor===Uint8Array?g:g.constructor===ArrayBuffer?new Uint8Array(g):g.constructor===Array?new Uint8Array(g):g.constructor===String?En(g):g instanceof Uint8Array?new Uint8Array(g.buffer,g.byteOffset,g.byteLength):new Uint8Array(0),h.h=g,h.l=0,h.j=h.h.length,h.g=h.l}ze.prototype.reset=function(){this.g=this.l};function Xe(h){for(var g=128,G=0,C=0,M=0;4>M&&128<=g;M++)g=h.h[h.g++],G|=(g&127)<<7*M;if(128<=g&&(g=h.h[h.g++],G|=(g&127)<<28,C|=(g&127)>>4),128<=g)for(M=0;5>M&&128<=g;M++)g=h.h[h.g++],C|=(g&127)<<7*M+3;if(128>g)return h=G>>>0,g=C>>>0,(C=g&2147483648)&&(h=~h+1>>>0,g=~g>>>0,h==0&&(g=g+1>>>0)),h=4294967296*g+(h>>>0),C?-h:h;h.m=!0}ze.prototype.i=function(){var h=this.h,g=h[this.g],G=g&127;return 128>g?(this.g+=1,G):(g=h[this.g+1],G|=(g&127)<<7,128>g?(this.g+=2,G):(g=h[this.g+2],G|=(g&127)<<14,128>g?(this.g+=3,G):(g=h[this.g+3],G|=(g&127)<<21,128>g?(this.g+=4,G):(g=h[this.g+4],G|=(g&15)<<28,128>g?(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)))))},ze.prototype.o=function(){var h=this.h[this.g],g=this.h[this.g+1],G=this.h[this.g+2],C=this.h[this.g+3];return this.g+=4,G=(h<<0|g<<8|G<<16|C<<24)>>>0,h=2*(G>>31)+1,g=G>>>23&255,G&=8388607,g==255?G?NaN:1/0*h:g==0?h*Math.pow(2,-149)*G:h*Math.pow(2,g-150)*(G+Math.pow(2,23))};var rn=[];function Ue(){this.g=new Uint8Array(64),this.h=0}Ue.prototype.push=function(h){if(!(this.h+1<this.g.length)){var g=this.g;this.g=new Uint8Array(Math.ceil(1+2*this.g.length)),this.g.set(g)}this.g[this.h++]=h},Ue.prototype.length=function(){return this.h},Ue.prototype.end=function(){var h=this.g,g=this.h;return this.h=0,Xn(h,0,g)};function _t(h,g){for(;127<g;)h.push(g&127|128),g>>>=7;h.push(g)}function ge(h){var g={},G=g.N===void 0?!1:g.N;this.o={v:g.v===void 0?!1:g.v},this.N=G,g=this.o,rn.length?(G=rn.pop(),g&&(G.v=g.v),h&&ee(G,h),h=G):h=new ze(h,g),this.g=h,this.m=this.g.g,this.h=this.i=this.l=-1,this.j=!1}ge.prototype.reset=function(){this.g.reset(),this.h=this.l=-1};function He(h){var g=h.g;if((g=g.g==g.j)||(g=h.j)||(g=h.g,g=g.m||0>g.g||g.g>g.j),g)return!1;h.m=h.g.g,g=h.g.i();var G=g&7;return G!=0&&G!=5&&G!=1&&G!=2&&G!=3&&G!=4?(h.j=!0,!1):(h.i=g,h.l=g>>>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 g=h.g.i();h=h.g,h.g+=g}break;case 5:h.h!=5?Mt(h):(h=h.g,h.g+=4);break;case 3:g=h.l;do{if(!He(h)){h.j=!0;break}if(h.h==4){h.l!=g&&(h.j=!0);break}Mt(h)}while(1);break;default:h.j=!0}}function xe(h,g,G){var C=h.g.j,M=h.g.i(),Q=h.g.g+M;if(h.g.j=Q,G(g,h),G=Q-h.g.g,G!==0)throw Error("Message parsing ended unexpectedly. Expected to read "+M+" bytes, instead read "+(M-G)+" bytes, either the data ended unexpectedly or the message misreported its own length");return h.g.g=Q,h.g.j=C,g}function jt(h){return h.g.o()}function be(h){var g=h.g.i();h=h.g;var G=h.g;h.g+=g,h=h.h;var C;if(nn)(C=Te)||(C=Te=new TextDecoder("utf-8",{fatal:!1})),C=C.decode(h.subarray(G,G+g));else{g=G+g;for(var M=[],Q=null,B,tt,ct;G<g;)B=h[G++],128>B?M.push(B):224>B?G>=g?M.push(65533):(tt=h[G++],194>B||(tt&192)!==128?(G--,M.push(65533)):M.push((B&31)<<6|tt&63)):240>B?G>=g-1?M.push(65533):(tt=h[G++],(tt&192)!==128||B===224&&160>tt||B===237&&160<=tt||((C=h[G++])&192)!==128?(G--,M.push(65533)):M.push((B&15)<<12|(tt&63)<<6|C&63)):244>=B?G>=g-2?M.push(65533):(tt=h[G++],(tt&192)!==128||(B<<28)+(tt-144)>>30!==0||((C=h[G++])&192)!==128||((ct=h[G++])&192)!==128?(G--,M.push(65533)):(B=(B&7)<<18|(tt&63)<<12|(C&63)<<6|ct&63,B-=65536,M.push((B>>10&1023)+55296,(B&1023)+56320))):M.push(65533),8192<=M.length&&(Q=Nt(Q,M),M.length=0);C=Nt(Q,M)}return C}function Le(h,g,G){var C=h.g.i();for(C=h.g.g+C;h.g.g<C;)G.push(g.call(h.g))}function Qe(h,g){h.h==2?Le(h,ze.prototype.o,g):g.push(jt(h))}function Ge(){this.h=[],this.i=0,this.g=new Ue}function zt(h,g){g.length!==0&&(h.h.push(g),h.i+=g.length)}function Be(h){var g=h.i+h.g.length();if(g===0)return new Uint8Array(0);g=new Uint8Array(g);for(var G=h.h,C=G.length,M=0,Q=0;Q<C;Q++){var B=G[Q];B.length!==0&&(g.set(B,M),M+=B.length)}return G=h.g,C=G.h,C!==0&&(g.set(G.g.subarray(0,C),M),G.h=0),h.h=[g],g}function Pe(h,g,G){if(G!=null){_t(h.g,8*g+5),h=h.g;var C=G;C=(G=0>C?1:0)?-C:C,C===0?0<1/C?de=Se=0:(Se=0,de=2147483648):isNaN(C)?(Se=0,de=2147483647):34028234663852886e22<C?(Se=0,de=(G<<31|2139095040)>>>0):11754943508222875e-54>C?(C=Math.round(C/Math.pow(2,-149)),Se=0,de=(G<<31|C)>>>0):(g=Math.floor(Math.log(C)/Math.LN2),C*=Math.pow(2,-g),C=Math.round(8388608*C),16777216<=C&&++g,Se=0,de=(G<<31|g+127<<23|C&8388607)>>>0),G=de,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,g,G){if(h!=null)return typeof h=="object"?Ie&&h instanceof Uint8Array?G(h):on(h,g,G):g(h)}function on(h,g,G){if(Array.isArray(h)){for(var C=Array(h.length),M=0;M<h.length;M++)C[M]=Wn(h[M],g,G);return Array.isArray(h)&&h.W&&Ze(C),C}C={};for(M in h)C[M]=Wn(h[M],g,G);return C}function Oe(h){return typeof h=="number"?isFinite(h)?h:String(h):h}var sn={W:{value:!0,configurable:!0}};function Ze(h){return Array.isArray(h)&&!Object.isFrozen(h)&&Object.defineProperties(h,sn),h}var Ye;function ve(h,g,G){var C=Ye;Ye=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)||Ie&&C instanceof Uint8Array))){this.l=h-this.j,this.i=C;break t}g!==void 0&&-1<g?(this.l=Math.max(g,h+1-this.j),this.i=null):this.l=Number.MAX_VALUE}if(G)for(g=0;g<G.length;g++)h=G[g],h<this.l?(h+=this.j,(C=this.h[h])?Ze(C):this.h[h]=ne):(_e(this),(C=this.i[h])?Ze(C):this.i[h]=ne)}var ne=Object.freeze(Ze([]));function _e(h){var g=h.l+h.j;h.h[g]||(h.i=h.h[g]={})}function qt(h,g,G){return g===-1?null:(G===void 0?0:G)||g>=h.l?h.i?h.i[g]:void 0:h.h[g+h.j]}function Pt(h,g){var G=G===void 0?!1:G,C=qt(h,g,G);return C==null&&(C=ne),C===ne&&(C=Ze([]),Rt(h,g,C,G)),C}function dn(h){var g=Pt(h,3);if(h.m||(h.m={}),!h.m[3]){for(var G=0;G<g.length;G++)g[G]=+g[G];h.m[3]=!0}return g}function he(h,g,G){return h=qt(h,g),h==null?G:h}function Ct(h,g,G){return h=qt(h,g),h=h==null?h:+h,h==null?G===void 0?0:G:h}function Rt(h,g,G,C){(C===void 0?0:C)||g>=h.l?(_e(h),h.i[g]=G):h.h[g+h.j]=G}function re(h,g,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 g(C))}return h.g[G]}function we(h,g){h.g||(h.g={});var G=h.g[1];if(!G){var C=Pt(h,1);G=[];for(var M=0;M<C.length;M++)G[M]=new g(C[M]);h.g[1]=G}return G}function te(h,g,G){var C=C===void 0?!1:C;h.g||(h.g={});var M=G&&et(G);h.g[g]=G,Rt(h,g,M,C)}function ie(h,g,G,C){var M=we(h,G);g=g||new G,h=Pt(h,1),C!=null?(M.splice(C,0,g),h.splice(C,0,et(g))):(M.push(g),h.push(et(g)))}ve.prototype.toJSON=function(){var h=et(this);return on(h,Oe,pn)};function et(h,g){if(h.g)for(var G in h.g){var C=h.g[G];if(Array.isArray(C))for(var M=0;M<C.length;M++)C[M]&&et(C[M]);else C&&et(C)}return h.h}ve.prototype.toString=function(){return et(this).toString()};function ot(h,g){if(h=h.o){zt(g,g.g.end());for(var G=0;G<h.length;G++)zt(g,h[G])}}function at(h,g){if(g.h==4)return!1;var G=g.m;return Mt(g),g.N||(g=Xn(g.g.h,G,g.g.g),(G=h.o)?G.push(g):h.o=[g]),!0}function Ot(h){ve.call(this,h,-1,le)}ht(Ot,ve),Ot.prototype.getRows=function(){return qt(this,1)},Ot.prototype.getCols=function(){return qt(this,2)},Ot.prototype.getPackedDataList=function(){return dn(this)},Ot.prototype.getLayout=function(){return he(this,4,0)};function ce(h,g){for(;He(g);)switch(g.i){case 8:var G=g.g.i();Rt(h,1,G);break;case 16:G=g.g.i(),Rt(h,2,G);break;case 29:case 26:Qe(g,h.getPackedDataList());break;case 32:G=Xe(g.g),Rt(h,4,G);break;default:if(!at(h,g))return h}return h}var le=[3];function Tt(h,g){var G=void 0;return new(G||(G=Promise))(function(C,M){function Q(ct){try{tt(g.next(ct))}catch(s){M(s)}}function B(ct){try{tt(g.throw(ct))}catch(s){M(s)}}function tt(ct){ct.done?C(ct.value):new G(function(s){s(ct.value)}).then(Q,B)}tt((g=g.apply(h,void 0)).next())})}function fe(h){ve.call(this,h)}ht(fe,ve);function Ce(h,g){for(;He(g);)switch(g.i){case 8:var G=g.g.i();Rt(h,1,G);break;case 21:G=jt(g),Rt(h,2,G);break;case 26:G=be(g),Rt(h,3,G);break;case 34:G=be(g),Rt(h,4,G);break;default:if(!at(h,g))return h}return h}function De(h){ve.call(this,h,-1,$e)}ht(De,ve),De.prototype.addClassification=function(h,g){return ie(this,h,fe,g),this};var $e=[1];function hn(h){ve.call(this,h)}ht(hn,ve);function bn(h,g){for(;He(g);)switch(g.i){case 13:var G=jt(g);Rt(h,1,G);break;case 21:G=jt(g),Rt(h,2,G);break;case 29:G=jt(g),Rt(h,3,G);break;case 37:G=jt(g),Rt(h,4,G);break;case 45:G=jt(g),Rt(h,5,G);break;default:if(!at(h,g))return h}return h}function Fe(h){ve.call(this,h,-1,jn)}ht(Fe,ve);function qe(h){t:{var g=new Fe;for(h=new ge(h);He(h);)switch(h.i){case 10:var G=xe(h,new hn,bn);ie(g,G,hn,void 0);break;default:if(!at(g,h))break t}}return g}var jn=[1];function tn(h){ve.call(this,h)}ht(tn,ve);function Ne(h){ve.call(this,h,-1,In)}ht(Ne,ve),Ne.prototype.getVertexType=function(){return he(this,1,0)},Ne.prototype.getPrimitiveType=function(){return he(this,2,0)},Ne.prototype.getVertexBufferList=function(){return dn(this)},Ne.prototype.getIndexBufferList=function(){return Pt(this,4)};function gn(h,g){for(;He(g);)switch(g.i){case 8:var G=Xe(g.g);Rt(h,1,G);break;case 16:G=Xe(g.g),Rt(h,2,G);break;case 29:case 26:Qe(g,h.getVertexBufferList());break;case 32:case 34:G=g;var C=h.getIndexBufferList();G.h==2?Le(G,ze.prototype.i,C):C.push(G.g.i());break;default:if(!at(h,g))return h}return h}var In=[3,4];function Ke(h){ve.call(this,h)}ht(Ke,ve),Ke.prototype.getMesh=function(){return re(this,Ne,1)},Ke.prototype.getPoseTransformMatrix=function(){return re(this,Ot,2)};function kn(h){t:{var g=new Ke;for(h=new ge(h);He(h);)switch(h.i){case 10:var G=xe(h,new Ne,gn);te(g,1,G);break;case 18:G=xe(h,new Ot,ce),te(g,2,G);break;default:if(!at(g,h))break t}}return g}function en(h,g,G){if(G=h.createShader(G===0?h.VERTEX_SHADER:h.FRAGMENT_SHADER),h.shaderSource(G,g),h.compileShader(G),!h.getShaderParameter(G,h.COMPILE_STATUS))throw Error(`Could not compile WebGL shader.
|
|
72
72
|
|
|
73
|
-
`+h.getShaderInfoLog(G));return G}function Zn(h){return we(h,fe).map(function(g){return{index:he(g,1,0),Y:Ct(g,2),label:qt(g,3)!=null?he(g,3,""):void 0,displayName:qt(g,4)!=null?he(g,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,g){this.h=h,this.g=g,this.l=0}function ln(h,g,G){return
|
|
73
|
+
`+h.getShaderInfoLog(G));return G}function Zn(h){return we(h,fe).map(function(g){return{index:he(g,1,0),Y:Ct(g,2),label:qt(g,3)!=null?he(g,3,""):void 0,displayName:qt(g,4)!=null?he(g,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,g){this.h=h,this.g=g,this.l=0}function ln(h,g,G){return Tn(h,g),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(C){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),C(h.i)}))}function Tn(h,g){var G=h.g;if(h.m===void 0){var C=en(G,`
|
|
74
74
|
attribute vec2 aVertex;
|
|
75
75
|
attribute vec2 aTex;
|
|
76
76
|
varying vec2 vTex;
|
|
77
77
|
void main(void) {
|
|
78
78
|
gl_Position = vec4(aVertex, 0.0, 1.0);
|
|
79
79
|
vTex = aTex;
|
|
80
|
-
}`,0),
|
|
80
|
+
}`,0),M=en(G,`
|
|
81
81
|
precision mediump float;
|
|
82
82
|
varying vec2 vTex;
|
|
83
83
|
uniform sampler2D sampler0;
|
|
84
84
|
void main(){
|
|
85
85
|
gl_FragColor = texture2D(sampler0, vTex);
|
|
86
|
-
}`,1),Q=G.createProgram();if(G.attachShader(Q,C),G.attachShader(Q,
|
|
86
|
+
}`,1),Q=G.createProgram();if(G.attachShader(Q,C),G.attachShader(Q,M),G.linkProgram(Q),!G.getProgramParameter(Q,G.LINK_STATUS))throw Error(`Could not compile WebGL program.
|
|
87
87
|
|
|
88
|
-
`+G.getProgramInfoLog(Q));C=h.m=Q,G.useProgram(C),B=G.getUniformLocation(C,"sampler0"),h.j={I:G.getAttribLocation(C,"aVertex"),H:G.getAttribLocation(C,"aTex"),da:B},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(B,0)}C=h.j,G.useProgram(h.m),G.canvas.width=g.width,G.canvas.height=g.height,G.viewport(0,0,g.width,g.height),G.activeTexture(G.TEXTURE0),h.h.bindTexture2d(g.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 Tn(h,g){return g+h}function Hn(h,g){window[h]=g}function m(h){var g=document.createElement("script");return g.setAttribute("src",h),g.setAttribute("crossorigin","anonymous"),new Promise(function(G){g.addEventListener("load",function(){G()},!1),g.addEventListener("error",function(){G()},!1),document.body.appendChild(g)})}function W(){return Lt(this,function h(){return ae(h,function(g){switch(g.g){case 1:return g.m=2,_(g,WebAssembly.instantiate(Qn),4);case 4:g.g=3,g.m=0;break;case 2:return g.m=0,g.j=null,g.return(!1);case 3:return g.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||Tn,typeof window=="object")var g=window.location.pathname.toString().substring(0,window.location.pathname.toString().lastIndexOf("/"))+"/";else if(typeof location!="undefined")g=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=g,h.options){g=T(Object.keys(h.options));for(var G=g.next();!G.done;G=g.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,g){return h.g.files===void 0?[]:typeof h.g.files=="function"?h.g.files(g):h.g.files}function O(h){return Lt(h,function g(){var G=this,C,B,Q,M,tt,ct,s,X,R,Y,N;return ae(g,function(A){switch(A.g){case 1:return C=G,G.R?(B=E(G,G.j),_(A,W(),2)):A.return();case 2:if(Q=A.h,typeof window=="object")return Hn("createMediapipeSolutionsWasm",{locateFile:G.locateFile}),Hn("createMediapipeSolutionsPackedAssets",{locateFile:G.locateFile}),ct=B.filter(function(K){return K.data!==void 0}),s=B.filter(function(K){return K.data===void 0}),X=Promise.all(ct.map(function(K){var nt=it(C,K.url);if(K.path!==void 0){var q=K.path;nt=nt.then(function(yt){return C.overrideFile(q,yt),Promise.resolve(yt)})}return nt})),R=Promise.all(s.map(function(K){return K.simd===void 0||K.simd&&Q||!K.simd&&!Q?m(C.locateFile(K.url,C.S)):Promise.resolve()})).then(function(){return Lt(C,function K(){var nt,q,yt=this;return ae(K,function(Xt){if(Xt.g==1)return nt=window.createMediapipeSolutionsWasm,q=window.createMediapipeSolutionsPackedAssets,_(Xt,nt(q),2);yt.h=Xt.h,Xt.g=0})})}),Y=function(){return Lt(C,function K(){var nt=this;return ae(K,function(q){return nt.g.graph&&nt.g.graph.url?q=_(q,it(nt,nt.g.graph.url),0):(q.g=0,q=void 0),q})})}(),_(A,Promise.all([R,X,Y]),7);if(typeof importScripts!="function")throw Error("solutions can only be loaded on a web page or in a web worker");return M=B.filter(function(K){return K.simd===void 0||K.simd&&Q||!K.simd&&!Q}).map(function(K){return C.locateFile(K.url,C.S)}),importScripts.apply(null,k(M)),_(A,createMediapipeSolutionsWasm(Module),6);case 6:G.h=A.h,G.l=new OffscreenCanvas(1,1),G.h.canvas=G.l,tt=G.h.GL.createContext(G.l,{antialias:!1,alpha:!1,ba:typeof WebGL2RenderingContext!="undefined"?2:1}),G.h.GL.makeContextCurrent(tt),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 lt(h){return Lt(h,function g(){var G=this,C,B,Q,M,tt,ct,s,X;return ae(g,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,_(R,it(G,G.g.graph.url),3)}for(R.g!=2&&(C=R.h,G.i.loadGraph(C)),B=T(Object.keys(G.B)),Q=B.next();!Q.done;Q=B.next())M=Q.value,G.i.overrideFile(M,G.B[M]);if(G.B={},G.g.listeners)for(tt=T(G.g.listeners),ct=tt.next();!ct.done;ct=tt.next())s=ct.value,Ut(G,s);X=G.j,G.j={},G.setOptions(X),R.g=0})})}i.reset=function(){return Lt(this,function h(){var g=this;return ae(h,function(G){g.i&&(g.i.reset(),g.m={},g.s={}),G.g=0})})},i.setOptions=function(h,g){var G=this;if(g=g||this.g.options){for(var C=[],B=[],Q={},M=T(Object.keys(h)),tt=M.next();!tt.done;Q={K:Q.K,L:Q.L},tt=M.next()){var ct=tt.value;ct in this.j&&this.j[ct]===h[ct]||(this.j[ct]=h[ct],tt=g[ct],tt!==void 0&&(tt.onChange&&(Q.K=tt.onChange,Q.L=h[ct],C.push(function(s){return function(){return Lt(G,function X(){var R,Y=this;return ae(X,function(N){if(N.g==1)return _(N,s.K(s.L),2);R=N.h,R===!0&&(Y.o=!0),N.g=0})})}}(Q))),tt.graphOptionXref&&(ct={valueNumber:tt.type===1?h[ct]:0,valueBoolean:tt.type===0?h[ct]:!1,valueString:tt.type===2?h[ct]:""},tt=Object.assign(Object.assign(Object.assign({},{calculatorName:"",calculatorIndex:0}),tt.graphOptionXref),ct),B.push(tt))))}(C.length!==0||B.length!==0)&&(this.o=!0,this.A=(this.A===void 0?[]:this.A).concat(B),this.u=(this.u===void 0?[]:this.u).concat(C))}};function P(h){return Lt(h,function g(){var G=this,C,B,Q,M,tt,ct,s;return ae(g,function(X){switch(X.g){case 1:if(!G.o)return X.return();if(!G.u){X.g=2;break}C=T(G.u),B=C.next();case 3:if(B.done){X.g=5;break}return Q=B.value,_(X,Q(),4);case 4:B=C.next(),X.g=3;break;case 5:G.u=void 0;case 2:if(G.A){for(M=new G.h.GraphOptionChangeRequestList,tt=T(G.A),ct=tt.next();!ct.done;ct=tt.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 Lt(this,function h(){var g=this;return ae(h,function(G){return G.g==1?_(G,O(g),2):G.g!=3?_(G,lt(g),3):_(G,P(g),0)})})};function it(h,g){return Lt(h,function G(){var C=this,B,Q;return ae(G,function(M){return g in C.F?M.return(C.F[g]):(B=C.locateFile(g,""),Q=fetch(B).then(function(tt){return tt.arrayBuffer()}),C.F[g]=Q,M.return(Q))})})}i.overrideFile=function(h,g){this.i?this.i.overrideFile(h,g):this.B[h]=g},i.clearOverriddenFiles=function(){this.B={},this.i&&this.i.clearOverriddenFiles()},i.send=function(h,g){return Lt(this,function G(){var C=this,B,Q,M,tt,ct,s,X,R,Y;return ae(G,function(N){switch(N.g){case 1:return C.g.inputs?(B=1e3*(g==null?performance.now():g),_(N,C.C,2)):N.return();case 2:return _(N,C.initialize(),3);case 3:for(Q=new C.h.PacketDataList,M=T(Object.keys(h)),tt=M.next();!tt.done;tt=M.next())if(ct=tt.value,s=C.g.inputs[ct]){t:{var A=C,K=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!="undefined"&&K instanceof HTMLVideoElement){var q=K.videoWidth;nt=K.videoHeight}else typeof HTMLImageElement!="undefined"&&K instanceof HTMLImageElement?(q=K.naturalWidth,nt=K.naturalHeight):(q=K.width,nt=K.height);nt={glName:A.l,width:q,height:nt},q=A.g,q.canvas.width=nt.width,q.canvas.height=nt.height,q.activeTexture(q.TEXTURE0),A.h.bindTexture2d(A.l),q.texImage2D(q.TEXTURE_2D,0,q.RGBA,q.RGBA,q.UNSIGNED_BYTE,K),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(K.length),nt=0;nt<K.length;++nt){q=K[nt];var yt=A.data,Xt=yt.setBoundingBox,Kt=nt,It=q.T,ft=new tn;Rt(ft,1,It.Z),Rt(ft,2,It.$),Rt(ft,3,It.height),Rt(ft,4,It.width),Rt(ft,5,It.rotation),Rt(ft,6,It.X);var Wt=It=new Ge;Pe(Wt,1,qt(ft,1)),Pe(Wt,2,qt(ft,2)),Pe(Wt,3,qt(ft,3)),Pe(Wt,4,qt(ft,4)),Pe(Wt,5,qt(ft,5));var St=qt(ft,6);if(St!=null&&St!=null){_t(Wt.g,48);var wt=Wt.g,Ht=St;St=0>Ht,Ht=Math.abs(Ht);var l=Ht>>>0;for(Ht=Math.floor((Ht-l)/4294967296),Ht>>>=0,St&&(Ht=~Ht>>>0,l=(~l>>>0)+1,4294967295<l&&(l=0,Ht++,4294967295<Ht&&(Ht=0))),de=l,Se=Ht,St=de,l=Se;0<l||127<St;)wt.push(St&127|128),St=(St>>>7|l<<25)>>>0,l>>>=7;wt.push(St)}if(ot(ft,Wt),It=Me(It),Xt.call(yt,Kt,It),q.O)for(yt=0;yt<q.O.length;++yt)ft=q.O[yt],Wt=!!ft.visibility,Xt=A.data,Kt=Xt.addNormalizedLandmark,It=nt,ft=Object.assign(Object.assign({},ft),{visibility:Wt?ft.visibility:0}),Wt=new dn,Rt(Wt,1,ft.x),Rt(Wt,2,ft.y),Rt(Wt,3,ft.z),ft.visibility&&Rt(Wt,4,ft.visibility),wt=ft=new Ge,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)),ot(Wt,wt),ft=Me(ft),Kt.call(Xt,It,ft);if(q.M)for(yt=0;yt<q.M.length;++yt){if(Xt=A.data,Kt=Xt.addClassification,It=nt,ft=q.M[yt],Wt=new fe,Rt(Wt,2,ft.Y),ft.index&&Rt(Wt,1,ft.index),ft.label&&Rt(Wt,3,ft.label),ft.displayName&&Rt(Wt,4,ft.displayName),wt=ft=new Ge,l=qt(Wt,1),l!=null&&l!=null)if(_t(wt.g,8),St=wt.g,0<=l)_t(St,l);else{for(Ht=0;9>Ht;Ht++)St.push(l&127|128),l>>=7;St.push(1)}Pe(wt,2,qt(Wt,2)),St=qt(Wt,3),St!=null&&(St=Rn(St),_t(wt.g,26),_t(wt.g,St.length),zt(wt,wt.g.end()),zt(wt,St)),St=qt(Wt,4),St!=null&&(St=Rn(St),_t(wt.g,34),_t(wt.g,St.length),zt(wt,wt.g.end()),zt(wt,St)),ot(Wt,wt),ft=Me(ft),Kt.call(Xt,It,ft)}}A=A.data;break t;default:A={}}}switch(X=A,R=s.stream,s.type){case"video":Q.pushTexture2d(Object.assign(Object.assign({},X),{stream:R,timestamp:B}));break;case"detections":Y=X,Y.stream=R,Y.timestamp=B,Q.pushDetectionList(Y);break;default:throw Error("Unknown input config type: '"+s.type+"'")}}return C.i.send(Q),_(N,C.C,4);case 4:Q.delete(),N.g=0}})})};function bt(h,g,G){return Lt(h,function C(){var B,Q,M,tt,ct,s,X=this,R,Y,N,A,K,nt,q,yt;return ae(C,function(Xt){switch(Xt.g){case 1:if(!G)return Xt.return(g);for(B={},Q=0,M=T(Object.keys(G)),tt=M.next();!tt.done;tt=M.next())ct=tt.value,s=G[ct],typeof s!="string"&&s.type==="texture"&&g[s.stream]!==void 0&&++Q;1<Q&&(X.G=!1),R=T(Object.keys(G)),tt=R.next();case 2:if(tt.done){Xt.g=4;break}if(Y=tt.value,N=G[Y],typeof N=="string")return q=B,yt=Y,_(Xt,xt(X,Y,g[N]),14);if(A=g[N.stream],N.type==="detection_list"){if(A){for(var Kt=A.getRectList(),It=A.getLandmarksList(),ft=A.getClassificationsList(),Wt=[],St=0;St<Kt.size();++St){var wt=Kt.get(St);t:{var Ht=new tn;for(wt=new ge(wt);He(wt);)switch(wt.i){case 13:var l=jt(wt);Rt(Ht,1,l);break;case 21:l=jt(wt),Rt(Ht,2,l);break;case 29:l=jt(wt),Rt(Ht,3,l);break;case 37:l=jt(wt),Rt(Ht,4,l);break;case 45:l=jt(wt),Rt(Ht,5,l);break;case 48:l=Xe(wt.g),Rt(Ht,6,l);break;default:if(!at(Ht,wt))break t}}Ht={Z:Ct(Ht,1),$:Ct(Ht,2),height:Ct(Ht,3),width:Ct(Ht,4),rotation:Ct(Ht,5,0),X:he(Ht,6,0)},wt=we(qe(It.get(St)),dn).map(Sn);var v=ft.get(St);t:for(l=new De,v=new ge(v);He(v);)switch(v.i){case 10:l.addClassification(xe(v,new fe,Ce));break;default:if(!at(l,v))break t}Ht={T:Ht,O:wt,M:Zn(l)},Wt.push(Ht)}Kt=Wt}else Kt=[];B[Y]=Kt,Xt.g=7;break}if(N.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=[];B[Y]=Kt,Xt.g=7;break}if(A===void 0){Xt.g=3;break}if(N.type==="float_list"){B[Y]=A,Xt.g=7;break}if(N.type==="proto"){B[Y]=A,Xt.g=7;break}if(N.type!=="texture")throw Error("Unknown output config type: '"+N.type+"'");return K=X.s[Y],K||(K=new Kn(X.h,X.D),X.s[Y]=K),_(Xt,ln(K,A,X.G),13);case 13:nt=Xt.h,B[Y]=nt;case 7:N.transform&&B[Y]&&(B[Y]=N.transform(B[Y])),Xt.g=3;break;case 14:q[yt]=Xt.h;case 3:tt=R.next(),Xt.g=2;break;case 4:return Xt.return(B)}})})}function xt(h,g,G){return Lt(h,function C(){var B=this,Q;return ae(C,function(M){return typeof G=="number"||G instanceof Uint8Array||G instanceof B.h.Uint8BlobList?M.return(G):G instanceof B.h.Texture2dDataOut?(Q=B.s[g],Q||(Q=new Kn(B.h,B.D),B.s[g]=Q),M.return(ln(Q,G,B.G))):M.return(void 0)})})}function Ut(h,g){for(var G=g.name||"$",C=[].concat(k(g.wants)),B=new h.h.StringList,Q=T(g.wants),M=Q.next();!M.done;M=Q.next())B.push_back(M.value);Q=h.h.PacketListener.implement({onResults:function(tt){for(var ct={},s=0;s<g.wants.length;++s)ct[C[s]]=tt.get(s);var X=h.listeners[G];X&&(h.C=bt(h,ct,g.outs).then(function(R){R=X(R);for(var Y=0;Y<g.wants.length;++Y){var N=ct[C[Y]];typeof N=="object"&&N.hasOwnProperty&&N.hasOwnProperty("delete")&&N.delete()}R&&(h.C=R)}))}}),h.i.attachMultiListener(B,Q),B.delete()}i.onResults=function(h,g){this.listeners[g||"$"]=h},Ve("Solution",V),Ve("OptionType",{BOOL:0,NUMBER:1,aa:2,0:"BOOL",1:"NUMBER",2:"STRING"});function Jt(h){h=En(h);var g=h.getMesh();if(!g)return h;var G=new Float32Array(g.getVertexBufferList());g.getVertexBufferList=function(){return G};var C=new Uint32Array(g.getIndexBufferList());return g.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(g){return we(qe(g),dn).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"}}}},Et=[[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]],kt=[[276,283],[283,282],[282,295],[295,285],[300,293],[293,334],[334,296],[296,336]],Qt=[[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]],ue=[[46,53],[53,52],[52,65],[65,55],[70,63],[63,105],[105,66],[66,107]],me=[[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]],ye=[].concat(k(Et),k(Tt),k(kt),k(Qt),k(ue),k(me));function Je(h){h=h||{},h=Object.assign(Object.assign({},$t),h),this.g=new V(h)}i=Je.prototype,i.close=function(){return this.g.close(),Promise.resolve()},i.onResults=function(h){this.g.onResults(h)},i.initialize=function(){return Lt(this,function h(){var g=this;return ae(h,function(G){return _(G,g.g.initialize(),0)})})},i.reset=function(){this.g.reset()},i.send=function(h){return Lt(this,function g(){var G=this;return ae(g,function(C){return _(C,G.g.send(h),0)})})},i.setOptions=function(h){this.g.setOptions(h)},Ve("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}}),Ve("FaceMesh",Je),Ve("FACEMESH_LIPS",Et),Ve("FACEMESH_LEFT_EYE",Tt),Ve("FACEMESH_LEFT_EYEBROW",kt),Ve("FACEMESH_LEFT_IRIS",[[474,475],[475,476],[476,477],[477,474]]),Ve("FACEMESH_RIGHT_EYE",Qt),Ve("FACEMESH_RIGHT_EYEBROW",ue),Ve("FACEMESH_RIGHT_IRIS",[[469,470],[470,471],[471,472],[472,469]]),Ve("FACEMESH_FACE_OVAL",me),Ve("FACEMESH_CONTOURS",ye),Ve("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]]),Ve("matrixDataToMatrix",function(h){for(var g=h.getCols(),G=h.getRows(),C=h.getPackedDataList(),B=[],Q=0;Q<G;Q++)B.push(Array(g));for(Q=0;Q<G;Q++)for(var M=0;M<g;M++){var tt=h.getLayout()===1?Q*g+M:M*G+Q;B[Q][M]=C[tt]}return B}),Ve("VERSION","0.4.1633559619")}).call(gi);const Zi={};(function(){var i;function n(t){var u=0;return function(){return u<t.length?{done:!1,value:t[u++]}:{done:!0}}}var o=typeof Object.defineProperties=="function"?Object.defineProperty:function(t,u,a){return t==Array.prototype||t==Object.prototype||(t[u]=a.value),t};function p(t){t=[typeof globalThis=="object"&&globalThis,t,typeof window=="object"&&window,typeof self=="object"&&self,typeof global=="object"&&global];for(var u=0;u<t.length;++u){var a=t[u];if(a&&a.Math==Math)return a}throw Error("Cannot find global object")}var y=p(this);function S(t,u){if(u)t:{var a=y;t=t.split(".");for(var b=0;b<t.length-1;b++){var I=t[b];if(!(I in a))break t;a=a[I]}t=t[t.length-1],b=a[t],u=u(b),u!=b&&u!=null&&o(a,t,{configurable:!0,writable:!0,value:u})}}S("Symbol",function(t){function u(w){if(this instanceof u)throw new TypeError("Symbol is not a constructor");return new a(b+(w||"")+"_"+I++,w)}function a(w,H){this.g=w,o(this,"description",{configurable:!0,writable:!0,value:H})}if(t)return t;a.prototype.toString=function(){return this.g};var b="jscomp_symbol_"+(1e9*Math.random()>>>0)+"_",I=0;return u}),S("Symbol.iterator",function(t){if(t)return t;t=Symbol("Symbol.iterator");for(var u="Array Int8Array Uint8Array Uint8ClampedArray Int16Array Uint16Array Int32Array Uint32Array Float32Array Float64Array".split(" "),a=0;a<u.length;a++){var b=y[u[a]];typeof b=="function"&&typeof b.prototype[t]!="function"&&o(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 u=typeof Symbol!="undefined"&&Symbol.iterator&&t[Symbol.iterator];return u?u.call(t):{next:n(t)}}function k(t){if(!(t instanceof Array)){t=T(t);for(var u,a=[];!(u=t.next()).done;)a.push(u.value);t=a}return t}var rt=typeof Object.create=="function"?Object.create:function(t){function u(){}return u.prototype=t,new u},z;if(typeof Object.setPrototypeOf=="function")z=Object.setPrototypeOf;else{var st;t:{var Gt={a:!0},Vt={};try{Vt.__proto__=Gt,st=Vt.a;break t}catch{}st=!1}z=st?function(t,u){if(t.__proto__=u,t.__proto__!==u)throw new TypeError(t+" is not extensible");return t}:null}var dt=z;function ht(t,u){if(t.prototype=rt(u.prototype),t.prototype.constructor=t,dt)dt(t,u);else for(var a in u)if(a!="prototype")if(Object.defineProperties){var b=Object.getOwnPropertyDescriptor(u,a);b&&Object.defineProperty(t,a,b)}else t[a]=u[a];t.ka=u.prototype}function Yt(){this.l=!1,this.i=null,this.h=void 0,this.g=1,this.s=this.m=0,this.j=null}function Ft(t){if(t.l)throw new TypeError("Generator is already running");t.l=!0}Yt.prototype.o=function(t){this.h=t};function Mt(t,u){t.j={V:u,X:!0},t.g=t.m||t.s}Yt.prototype.return=function(t){this.j={return:t},this.g=this.s};function _(t,u,a){return t.g=a,{value:u}}function Ae(t){this.g=new Yt,this.h=t}function un(t,u){Ft(t.g);var a=t.g.i;return a?We(t,"return"in a?a.return:function(b){return{value:b,done:!0}},u,t.g.return):(t.g.return(u),Dt(t))}function We(t,u,a,b){try{var I=u.call(t.g.i,a);if(!(I instanceof Object))throw new TypeError("Iterator result "+I+" is not an object");if(!I.done)return t.g.l=!1,I;var w=I.value}catch(H){return t.g.i=null,Mt(t.g,H),Dt(t)}return t.g.i=null,b.call(t.g,w),Dt(t)}function Dt(t){for(;t.g.g;)try{var u=t.h(t.g);if(u)return t.g.l=!1,{value:u.value,done:!1}}catch(a){t.g.h=void 0,Mt(t.g,a)}if(t.g.l=!1,t.g.j){if(u=t.g.j,t.g.j=null,u.X)throw u.V;return{value:u.return,done:!0}}return{value:void 0,done:!0}}function Mn(t){this.next=function(u){return Ft(t.g),t.g.i?u=We(t,t.g.i.next,u,t.g.o):(t.g.o(u),u=Dt(t)),u},this.throw=function(u){return Ft(t.g),t.g.i?u=We(t,t.g.i.throw,u,t.g.o):(Mt(t.g,u),u=Dt(t)),u},this.return=function(u){return un(t,u)},this[Symbol.iterator]=function(){return this}}function ae(t){function u(b){return t.next(b)}function a(b){return t.throw(b)}return new Promise(function(b,I){function w(H){H.done?b(H.value):Promise.resolve(H.value).then(u,a).then(w,I)}w(t.next())})}function gt(t){return ae(new Mn(new Ae(t)))}S("Promise",function(t){function u(H){this.h=0,this.i=void 0,this.g=[],this.o=!1;var U=this.j();try{H(U.resolve,U.reject)}catch(j){U.reject(j)}}function a(){this.g=null}function b(H){return H instanceof u?H:new u(function(U){U(H)})}if(t)return t;a.prototype.h=function(H){if(this.g==null){this.g=[];var U=this;this.i(function(){U.l()})}this.g.push(H)};var I=y.setTimeout;a.prototype.i=function(H){I(H,0)},a.prototype.l=function(){for(;this.g&&this.g.length;){var H=this.g;this.g=[];for(var U=0;U<H.length;++U){var j=H[U];H[U]=null;try{j()}catch(D){this.j(D)}}}this.g=null},a.prototype.j=function(H){this.i(function(){throw H})},u.prototype.j=function(){function H(D){return function($){j||(j=!0,D.call(U,$))}}var U=this,j=!1;return{resolve:H(this.D),reject:H(this.l)}},u.prototype.D=function(H){if(H===this)this.l(new TypeError("A Promise cannot resolve to itself"));else if(H instanceof u)this.G(H);else{t:switch(typeof H){case"object":var U=H!=null;break t;case"function":U=!0;break t;default:U=!1}U?this.A(H):this.m(H)}},u.prototype.A=function(H){var U=void 0;try{U=H.then}catch(j){this.l(j);return}typeof U=="function"?this.H(U,H):this.m(H)},u.prototype.l=function(H){this.s(2,H)},u.prototype.m=function(H){this.s(1,H)},u.prototype.s=function(H,U){if(this.h!=0)throw Error("Cannot settle("+H+", "+U+"): Promise already settled in state"+this.h);this.h=H,this.i=U,this.h===2&&this.F(),this.B()},u.prototype.F=function(){var H=this;I(function(){if(H.C()){var U=y.console;typeof U!="undefined"&&U.error(H.i)}},1)},u.prototype.C=function(){if(this.o)return!1;var H=y.CustomEvent,U=y.Event,j=y.dispatchEvent;return typeof j=="undefined"?!0:(typeof H=="function"?H=new H("unhandledrejection",{cancelable:!0}):typeof U=="function"?H=new U("unhandledrejection",{cancelable:!0}):(H=y.document.createEvent("CustomEvent"),H.initCustomEvent("unhandledrejection",!1,!0,H)),H.promise=this,H.reason=this.i,j(H))},u.prototype.B=function(){if(this.g!=null){for(var H=0;H<this.g.length;++H)w.h(this.g[H]);this.g=null}};var w=new a;return u.prototype.G=function(H){var U=this.j();H.K(U.resolve,U.reject)},u.prototype.H=function(H,U){var j=this.j();try{H.call(U,j.resolve,j.reject)}catch(D){j.reject(D)}},u.prototype.then=function(H,U){function j(mt,pt){return typeof mt=="function"?function(vt){try{D(mt(vt))}catch(Zt){$(Zt)}}:pt}var D,$,ut=new u(function(mt,pt){D=mt,$=pt});return this.K(j(H,D),j(U,$)),ut},u.prototype.catch=function(H){return this.then(void 0,H)},u.prototype.K=function(H,U){function j(){switch(D.h){case 1:H(D.i);break;case 2:U(D.i);break;default:throw Error("Unexpected state: "+D.h)}}var D=this;this.g==null?w.h(j):this.g.push(j),this.o=!0},u.resolve=b,u.reject=function(H){return new u(function(U,j){j(H)})},u.race=function(H){return new u(function(U,j){for(var D=T(H),$=D.next();!$.done;$=D.next())b($.value).K(U,j)})},u.all=function(H){var U=T(H),j=U.next();return j.done?b([]):new u(function(D,$){function ut(vt){return function(Zt){mt[vt]=Zt,pt--,pt==0&&D(mt)}}var mt=[],pt=0;do mt.push(void 0),pt++,b(j.value).K(ut(mt.length-1),$),j=U.next();while(!j.done)})},u});function fn(t,u){t instanceof String&&(t+="");var a=0,b=!1,I={next:function(){if(!b&&a<t.length){var w=a++;return{value:u(w,t[w]),done:!1}}return b=!0,{done:!0,value:void 0}}};return I[Symbol.iterator]=function(){return I},I}var An=typeof Object.assign=="function"?Object.assign:function(t,u){for(var a=1;a<arguments.length;a++){var b=arguments[a];if(b)for(var I in b)Object.prototype.hasOwnProperty.call(b,I)&&(t[I]=b[I])}return t};S("Object.assign",function(t){return t||An}),S("Object.is",function(t){return t||function(u,a){return u===a?u!==0||1/u===1/a:u!==u&&a!==a}}),S("Array.prototype.includes",function(t){return t||function(u,a){var b=this;b instanceof String&&(b=String(b));var I=b.length;for(a=a||0,0>a&&(a=Math.max(a+I,0));a<I;a++){var w=b[a];if(w===u||Object.is(w,u))return!0}return!1}}),S("String.prototype.includes",function(t){return t||function(u,a){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,a||0)!==-1}}),S("Array.prototype.keys",function(t){return t||function(){return fn(this,function(u){return u})}});var Ve=this||self;function Nt(t,u){t=t.split(".");var a=Ve;t[0]in a||typeof a.execScript=="undefined"||a.execScript("var "+t[0]);for(var b;t.length&&(b=t.shift());)t.length||u===void 0?a[b]&&a[b]!==Object.prototype[b]?a=a[b]:a=a[b]={}:a[b]=u}function Le(t){throw t}function nn(t,u){Le(Error("Invalid wire type: "+t+" (at position "+u+")"))}function Gn(){Le(Error("Failed to read varint, encoding is invalid."))}function wn(t,u){return u=String.fromCharCode.apply(null,u),t==null?u:t+u}var Rn,Cn=typeof TextDecoder!="undefined",cn,mn=typeof TextEncoder!="undefined";function Jn(t){if(mn)t=(cn||(cn=new TextEncoder)).encode(t);else{var u=void 0;u=u===void 0?!1:u;for(var a=0,b=new Uint8Array(3*t.length),I=0;I<t.length;I++){var w=t.charCodeAt(I);if(128>w)b[a++]=w;else{if(2048>w)b[a++]=w>>6|192;else{if(55296<=w&&57343>=w){if(56319>=w&&I<t.length){var H=t.charCodeAt(++I);if(56320<=H&&57343>=H){w=1024*(w-55296)+H-56320+65536,b[a++]=w>>18|240,b[a++]=w>>12&63|128,b[a++]=w>>6&63|128,b[a++]=w&63|128;continue}else I--}if(u)throw Error("Found an unpaired surrogate");w=65533}b[a++]=w>>12|224,b[a++]=w>>6&63|128}b[a++]=w&63|128}}t=b.subarray(0,a)}return t}var Fn={},je=null;function Be(t){var u;u===void 0&&(u=0),de(),u=Fn[u];for(var a=Array(Math.floor(t.length/3)),b=u[64]||"",I=0,w=0;I<t.length-2;I+=3){var H=t[I],U=t[I+1],j=t[I+2],D=u[H>>2];H=u[(H&3)<<4|U>>4],U=u[(U&15)<<2|j>>6],j=u[j&63],a[w++]=D+H+U+j}switch(D=0,j=b,t.length-I){case 2:D=t[I+1],j=u[(D&15)<<2]||b;case 1:t=t[I],a[w]=u[t>>2]+u[(t&3)<<4|D>>4]+j+b}return a.join("")}function xn(t){var u=t.length,a=3*u/4;a%3?a=Math.floor(a):"=.".indexOf(t[u-1])!=-1&&(a="=.".indexOf(t[u-2])!=-1?a-2:a-1);var b=new Uint8Array(a),I=0;return Xn(t,function(w){b[I++]=w}),b.subarray(0,I)}function Xn(t,u){function a(j){for(;b<t.length;){var D=t.charAt(b++),$=je[D];if($!=null)return $;if(!/^[\s\xa0]*$/.test(D))throw Error("Unknown base64 encoding at char: "+D)}return j}de();for(var b=0;;){var I=a(-1),w=a(0),H=a(64),U=a(64);if(U===64&&I===-1)break;u(I<<2|w>>4),H!=64&&(u(w<<4&240|H>>2),U!=64&&u(H<<6&192|U))}}function de(){if(!je){je={};for(var t="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789".split(""),u=["+/=","+/","-_=","-_.","-_"],a=0;5>a;a++){var b=t.concat(u[a].split(""));Fn[a]=b;for(var I=0;I<b.length;I++){var w=b[I];je[w]===void 0&&(je[w]=I)}}}}var Se=typeof Uint8Array=="function",ze;function ee(t){if(this.g=t,t!==null&&t.length===0)throw Error("ByteString should be constructed with non-empty values")}var Xe=typeof Uint8Array.prototype.slice=="function";function rn(t,u,a){return u===a?ze||(ze=new Uint8Array(0)):Xe?t.slice(u,a):new Uint8Array(t.subarray(u,a))}var Ue=0,_t=0;function ge(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===ee){if(t.g==null)var u=ze||(ze=new Uint8Array(0));else{u=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,u=new u(t)}return u}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 He(t,u){u=u===void 0?{}:u,u=u.v===void 0?!1:u.v,this.h=null,this.g=this.i=this.l=0,this.j=!1,this.v=u,t&&Bt(this,t)}function Bt(t,u){t.h=ge(u),t.l=0,t.i=t.h.length,t.g=t.l}He.prototype.reset=function(){this.g=this.l};function xe(t){for(var u=128,a=0,b=0,I=0;4>I&&128<=u;I++)u=t.h[t.g++],a|=(u&127)<<7*I;if(128<=u&&(u=t.h[t.g++],a|=(u&127)<<28,b|=(u&127)>>4),128<=u)for(I=0;5>I&&128<=u;I++)u=t.h[t.g++],b|=(u&127)<<7*I+3;if(128>u)return t=a>>>0,u=b>>>0,(b=u&2147483648)&&(t=~t+1>>>0,u=~u>>>0,t==0&&(u=u+1>>>0)),t=4294967296*u+(t>>>0),b?-t:t;t.j=!0,Gn()}function jt(t){t.g>t.i&&(t.j=!0,Le(Error("Tried to read past the end of the data "+t.g+" > "+t.i)))}function be(t){var u=t.h,a=u[t.g],b=a&127;return 128>a?(t.g+=1,jt(t),b):(a=u[t.g+1],b|=(a&127)<<7,128>a?(t.g+=2,jt(t),b):(a=u[t.g+2],b|=(a&127)<<14,128>a?(t.g+=3,jt(t),b):(a=u[t.g+3],b|=(a&127)<<21,128>a?(t.g+=4,jt(t),b):(a=u[t.g+4],b|=(a&15)<<28,128>a?(t.g+=5,jt(t),b>>>0):(t.g+=5,128<=u[t.g++]&&128<=u[t.g++]&&128<=u[t.g++]&&128<=u[t.g++]&&128<=u[t.g++]?(t.j=!0,Gn(),b):(jt(t),b))))))}function Te(t){var u=t.h[t.g],a=t.h[t.g+1],b=t.h[t.g+2],I=t.h[t.g+3];return t.g+=4,jt(t),(u<<0|a<<8|b<<16|I<<24)>>>0}He.prototype.m=function(){var t=Te(this),u=2*(t>>31)+1,a=t>>>23&255;return t&=8388607,a==255?t?NaN:1/0*u:a==0?u*Math.pow(2,-149)*t:u*Math.pow(2,a-150)*(t+Math.pow(2,23))};var Qe=[];function Ge(){this.g=new Uint8Array(64),this.h=0}function zt(t,u){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++]=u}Ge.prototype.length=function(){return this.h},Ge.prototype.end=function(){var t=this.g,u=this.h;return this.h=0,rn(t,0,u)};function Me(t,u){for(;127<u;)zt(t,u&127|128),u>>>=7;zt(t,u)}function Pe(t){var u={},a=u.O===void 0?!1:u.O;this.m={v:u.v===void 0?!1:u.v},this.O=a,u=this.m,Qe.length?(a=Qe.pop(),u&&(a.v=u.v),t&&Bt(a,t),t=a):t=new He(t,u),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 u=t.g;if((u=u.g==u.i)||(u=t.j)||(u=t.g,u=u.j||0>u.g||u.g>u.i),u)return!1;t.l=t.g.g;var a=be(t.g);return u=a>>>3,a&=7,0<=a&&5>=a?(t.i=u,t.h=a,!0):(t.j=!0,nn(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 u=t.g,a=0;10>a;a++){if((t.h[u]&128)===0){t.g=u+1,jt(t);break t}u++}t.j=!0,Gn()}break;case 1:t=t.g,t.g+=8,jt(t);break;case 2:t.h!=2?Wn(t):(u=be(t.g),t=t.g,t.g+=u,jt(t));break;case 5:t=t.g,t.g+=4,jt(t);break;case 3:u=t.i;do{if(!Ie(t)){t.j=!0,Le(Error("Unmatched start-group tag: stream EOF"));break}if(t.h==4){t.i!=u&&(t.j=!0,Le(Error("Unmatched end-group tag")));break}Wn(t)}while(1);break;default:t.j=!0,nn(t.h,t.l)}}function on(t,u,a){var b=t.g.i,I=be(t.g),w=t.g.g+I;if(t.g.i=w,a(u,t),a=w-t.g.g,a!==0)throw Error("Message parsing ended unexpectedly. Expected to read "+(I+" bytes, instead read "+(I-a)+" bytes, either the data ended unexpectedly or the message misreported its own length"));return t.g.g=w,t.g.i=b,u}var Oe=[];function sn(){this.h=[],this.i=0,this.g=new Ge}function Ze(t,u){u.length!==0&&(t.h.push(u),t.i+=u.length)}function Ye(t,u,a){Me(t.g,8*u+2),Me(t.g,a.length),Ze(t,t.g.end()),Ze(t,a)}var ve=typeof Symbol=="function"&&typeof Symbol()=="symbol"?Symbol(void 0):void 0;function ne(t){return Object.isFrozen(t)||(ve?t[ve]|=1:t.g!==void 0?t.g|=1:Object.defineProperties(t,{g:{value:1,configurable:!0,writable:!0,enumerable:!1}})),t}function _e(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 Be(t);if(t instanceof ee){if(t.g==null)t="";else{var u=t.g;u=u==null||typeof u=="string"?u:Se&&u instanceof Uint8Array?Be(u):null,t=t.g=u}return t}}return t}function Pt(t,u){if(t!=null)return Array.isArray(t)||_e(t)?an(t,u):u(t)}function an(t,u){if(Array.isArray(t)){for(var a=Array(t.length),b=0;b<t.length;b++)a[b]=Pt(t[b],u);if(u=Array.isArray(t)){var I;ve?I=t[ve]:I=t.g,u=(I==null?0:I)&1}return u&&ne(a),a}I={};for(a in t)I[a]=Pt(t[a],u);return I}function he(t){return t=qt(t),Array.isArray(t)?an(t,he):t}var Ct;function Rt(t,u,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],_e(b))){this.j=t-this.i,this.h=b;break t}u!==void 0&&-1<u?(this.j=Math.max(u,t+1-this.i),this.h=null):this.j=Number.MAX_VALUE}if(a)for(u=0;u<a.length;u++)t=a[u],t<this.j?(t+=this.i,(b=this.u[t])?Array.isArray(b)&&ne(b):this.u[t]=re):(we(this),(b=this.h[t])?Array.isArray(b)&&ne(b):this.h[t]=re)}var re=Object.freeze(ne([]));function we(t){var u=t.j+t.i;t.u[u]||(t.h=t.u[u]={})}function te(t,u,a){return u===-1?null:(a===void 0?0:a)||u>=t.j?t.h?t.h[u]:void 0:t.u[u+t.i]}function ie(t,u,a){a=a===void 0?!1:a;var b=te(t,u,a);return b==null&&(b=re),b===re&&(b=ne(b.slice()),at(t,u,b,a)),b}function et(t,u){var a=ie(t,u);if(t.l||(t.l={}),!t.l[u]){for(var b=0;b<a.length;b++)a[b]=+a[b];t.l[u]=!0}return a}function ot(t,u,a){return t=te(t,u),t=t==null?t:+t,t==null?a===void 0?0:a:t}function at(t,u,a,b){(b===void 0?0:b)||u>=t.j?(we(t),t.h[u]=a):t.u[u+t.i]=a}function Ot(t,u,a,b){a!==b?at(t,u,a):at(t,u,void 0,!1)}function ce(t,u,a){if(a===-1)return null;t.g||(t.g={});var b=t.g[a];if(b)return b;var I=te(t,a,!1);return I==null?b:(u=new u(I),t.g[a]=u)}function le(t,u,a){t.g||(t.g={});var b=t.g[a];if(!b){var I=ie(t,a,!1);b=[];for(var w=0;w<I.length;w++)b[w]=new u(I[w]);t.g[a]=b}return b}function Lt(t,u,a,b,I){var w=le(t,b,u);a=a||new b,t=ie(t,u),I!=null?(w.splice(I,0,a),t.splice(I,0,a.u)):(w.push(a),t.push(a.u))}Rt.prototype.toJSON=function(){return an(this.u,he)},Rt.prototype.toString=function(){return this.u.toString()};function fe(t,u){return t=te(t,u),t==null?0:t}function Ce(t,u){return t=te(t,u),t==null?"":t}function De(t,u){if(t=t.m){Ze(u,u.g.end());for(var a=0;a<t.length;a++)Ze(u,t[a])}}var $e=Symbol();function dn(t,u,a){return t[$e]||(t[$e]=function(b,I){return u(b,I,a)})}function pn(t){var u=t[$e];if(!u){var a=t[tn]||(t[tn]=t());u=function(b,I){return Ne(b,I,a)},t[$e]=u}return u}function Fe(t){var u=t.da;if(u)return pn(u);if(u=t.ia){var a=t.Y;return delete t.Y,dn(t.W.g,u,a)}}function qe(t){var u=Fe(t),a=t.W,b=t.ea;return u?function(I,w){return b(I,w,a,u)}:function(I,w){return b(I,w,a)}}function jn(t){var u=t[0];switch(t.length){case 2:var a=t[1];return function(pt,vt,Zt){return u(pt,vt,Zt,a)};case 3:var b=t[1],I=pn(t[2]);return function(pt,vt,Zt){return u(pt,vt,Zt,b,I)};case 4:var w=t[1],H=t[3],U=pn(t[2]);return function(pt,vt,Zt){return u(pt,vt,Zt,w,U,H)};case 5:var j=t[1],D=dn(j,t[3],t[4]);return function(pt,vt,Zt){return u(pt,vt,Zt,j,D)};case 6:var $=t[1],ut=t[5],mt=dn($,t[3],t[4]);return function(pt,vt,Zt){return u(pt,vt,Zt,$,mt,ut)};default:throw Error("Unsupported number of parameters, expected [2-6], got "+t.length)}}var tn=Symbol();function Ne(t,u,a){for(;Ie(u)&&u.h!=4;){var b=u.i,I=a[b];if(I)Array.isArray(I)&&(I=a[b]=jn(I));else{var w=a[0];w&&(w=w[b])&&(I=a[b]=qe(w))}I&&I(u,t,b)||(I=u,b=t,w=I.l,Wn(I),I.O||(I=rn(I.g.h,w,I.g.g),(w=b.m)?w.push(I):b.m=[I]))}return t}function gn(t,u){var a=new sn;if(u(t,a),t=a.i+a.g.length(),t===0)a=new Uint8Array(0);else{t=new Uint8Array(t);for(var b=a.h,I=b.length,w=u=0;w<I;w++){var H=b[w];H.length!==0&&(t.set(H,u),u+=H.length)}b=a.g,I=b.h,I!==0&&(t.set(b.g.subarray(0,I),u),b.h=0),a.h=[t],a=t}return a}function In(t,u,a){if(Oe.length){var b=Oe.pop();t&&(Bt(b.g,t),b.i=-1,b.h=-1),t=b}else t=new Pe(t);try{var I=new u;return Ne(I,t,a[tn]||(a[tn]=a()))}finally{u=t.g,u.h=null,u.l=0,u.i=0,u.g=0,u.j=!1,u.v=!1,t.i=-1,t.h=-1,t.j=!1,100>Oe.length&&Oe.push(t)}}function Ke(t,u,a){if(u=te(u,a),u!=null){Me(t.g,8*a+5),t=t.g;var b=u;b=(a=0>b?1:0)?-b:b,b===0?0<1/b?Ue=_t=0:(_t=0,Ue=2147483648):isNaN(b)?(_t=0,Ue=2147483647):34028234663852886e22<b?(_t=0,Ue=(a<<31|2139095040)>>>0):11754943508222875e-54>b?(b=Math.round(b/Math.pow(2,-149)),_t=0,Ue=(a<<31|b)>>>0):(u=Math.floor(Math.log(b)/Math.LN2),b*=Math.pow(2,-u),b=Math.round(8388608*b),16777216<=b&&++u,_t=0,Ue=(a<<31|u+127<<23|b&8388607)>>>0),a=Ue,zt(t,a>>>0&255),zt(t,a>>>8&255),zt(t,a>>>16&255),zt(t,a>>>24&255)}}function En(t,u,a){if(t.h!==1)return!1;var b=t.g;t=Te(b);var I=Te(b);b=2*(I>>31)+1;var w=I>>>20&2047;return t=4294967296*(I&1048575)+t,Ot(u,a,w==2047?t?NaN:1/0*b:w==0?b*Math.pow(2,-1074)*t:b*Math.pow(2,w-1075)*(t+4503599627370496),0),!0}function en(t,u,a){return t.h!==5?!1:(at(u,a,t.g.m()),!0)}function Zn(t,u,a){if(t.h!==5&&t.h!==2)return!1;if(u=ie(u,a),t.h==2){a=He.prototype.m;var b=be(t.g);for(b=t.g.g+b;t.g.g<b;)u.push(a.call(t.g))}else u.push(t.g.m());return!0}function Sn(t,u,a){return t.h!==5?!1:(t=t.g.m(),Ot(u,a,t,0),!0)}function Kn(t,u,a){return t.h!==0?!1:(at(u,a,xe(t.g)),!0)}function ln(t,u,a){return t.h!==0?!1:(at(u,a,be(t.g)),!0)}function Ln(t,u,a){return t.h!==0?!1:(t=be(t.g),Ot(u,a,t,0),!0)}function _n(t,u,a){return t.h!==0?!1:(t=!!be(t.g),Ot(u,a,t,!1),!0)}function Qn(t,u,a){if(t.h!==2)return!1;var b=be(t.g);t=t.g;var I=t.g;t.g+=b,jt(t),t=t.h;var w;if(Cn)(w=Rn)||(w=Rn=new TextDecoder("utf-8",{fatal:!1})),w=w.decode(t.subarray(I,I+b));else{b=I+b;for(var H=[],U=null,j,D,$;I<b;)j=t[I++],128>j?H.push(j):224>j?I>=b?H.push(65533):(D=t[I++],194>j||(D&192)!==128?(I--,H.push(65533)):H.push((j&31)<<6|D&63)):240>j?I>=b-1?H.push(65533):(D=t[I++],(D&192)!==128||j===224&&160>D||j===237&&160<=D||((w=t[I++])&192)!==128?(I--,H.push(65533)):H.push((j&15)<<12|(D&63)<<6|w&63)):244>=j?I>=b-2?H.push(65533):(D=t[I++],(D&192)!==128||(j<<28)+(D-144)>>30!==0||((w=t[I++])&192)!==128||(($=t[I++])&192)!==128?(I--,H.push(65533)):(j=(j&7)<<18|(D&63)<<12|(w&63)<<6|$&63,j-=65536,H.push((j>>10&1023)+55296,(j&1023)+56320))):H.push(65533),8192<=H.length&&(U=wn(U,H),H.length=0);w=wn(U,H)}return at(u,a,w),!0}function Tn(t,u,a,b,I){return t.h!==2?!1:(t=on(t,new b,I),u.g||(u.g={}),b=t&&t.u,u.g[a]=t,at(u,a,b,!1),!0)}function Hn(t,u,a,b,I){return t.h!==2?!1:(t=on(t,new b,I),Lt(u,a,t,b,void 0),!0)}function m(t,u,a){return t.h!==0?!1:(at(u,a,xe(t.g)),!0)}function W(t){Rt.call(this,t)}ht(W,Rt);function V(){return{1:ln,2:en,3:Qn,4:Qn}}function E(t,u){var a=te(t,1);if(a!=null&&a!=null){Me(u.g,8);var b=u.g;if(0<=a)Me(b,a);else{for(var I=0;9>I;I++)zt(b,a&127|128),a>>=7;zt(b,1)}}Ke(u,t,2),b=te(t,3),b!=null&&Ye(u,3,Jn(b)),b=te(t,4),b!=null&&Ye(u,4,Jn(b)),De(t,u)}function O(t){Rt.call(this,t,-1,P)}ht(O,Rt),O.prototype.addClassification=function(t,u){return Lt(this,1,t,W,u),this};function lt(){return{1:[Hn,W,V]}}var P=[1];function it(t){Rt.call(this,t)}ht(it,Rt);function bt(){return{1:en,2:en,3:en,4:en,5:en}}function xt(t,u){Ke(u,t,1),Ke(u,t,2),Ke(u,t,3),Ke(u,t,4),Ke(u,t,5),De(t,u)}function Ut(t){Rt.call(this,t,-1,$t)}ht(Ut,Rt);function Jt(){return{1:[Hn,it,bt]}}var $t=[1];function Et(t){Rt.call(this,t)}ht(Et,Rt);function Tt(){return{1:en,2:en,3:en,4:en,5:en,6:Kn}}function kt(t,u){Ke(u,t,1),Ke(u,t,2),Ke(u,t,3),Ke(u,t,4),Ke(u,t,5);var a=te(t,6);if(a!=null&&a!=null){Me(u.g,48);var b=u.g,I=a;a=0>I,I=Math.abs(I);var w=I>>>0;for(I=Math.floor((I-w)/4294967296),I>>>=0,a&&(I=~I>>>0,w=(~w>>>0)+1,4294967295<w&&(w=0,I++,4294967295<I&&(I=0))),Ue=w,_t=I,a=Ue,w=_t;0<w||127<a;)zt(b,a&127|128),a=(a>>>7|w<<25)>>>0,w>>>=7;zt(b,a)}De(t,u)}function Qt(t){Rt.call(this,t,-1,Je)}ht(Qt,Rt);function ue(){return{1:m,2:m,3:Zn,4:[Tn,me,ye],5:ln,6:ln,7:Zn,8:Zn,9:Zn}}function me(t){Rt.call(this,t)}ht(me,Rt);function ye(){return{1:en,2:en,3:en}}var Je=[3,7,8,9];function h(t){Rt.call(this,t)}ht(h,Rt);function g(){return{1:Sn,2:Sn,3:Sn}}function G(t){Rt.call(this,t)}ht(G,Rt);function C(){return{1:Sn,2:Sn,3:Sn}}function B(t){Rt.call(this,t)}ht(B,Rt);function Q(){return{1:Ln,2:[Tn,G,C],3:[Tn,h,g],4:_n}}function M(t){Rt.call(this,t,-1,ct)}ht(M,Rt);function tt(){return{1:Ln,2:[Hn,B,Q],3:Sn,4:Zn,5:Zn,6:Zn}}var ct=[2,4,5,6];function s(t){Rt.call(this,t,-1,R)}ht(s,Rt);function X(){return{1:Ln,2:[Hn,M,tt],3:[Tn,Qt,ue],4:En,5:Zn,6:Zn}}var R=[2,5,6];function Y(t,u,a){if(a=t.createShader(a===0?t.VERTEX_SHADER:t.FRAGMENT_SHADER),t.shaderSource(a,u),t.compileShader(a),!t.getShaderParameter(a,t.COMPILE_STATUS))throw Error(`Could not compile WebGL shader.
|
|
88
|
+
`+G.getProgramInfoLog(Q));C=h.m=Q,G.useProgram(C),M=G.getUniformLocation(C,"sampler0"),h.j={I:G.getAttribLocation(C,"aVertex"),H:G.getAttribLocation(C,"aTex"),da:M},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(M,0)}C=h.j,G.useProgram(h.m),G.canvas.width=g.width,G.canvas.height=g.height,G.viewport(0,0,g.width,g.height),G.activeTexture(G.TEXTURE0),h.h.bindTexture2d(g.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 Ln(h,g){return g+h}function Hn(h,g){window[h]=g}function p(h){var g=document.createElement("script");return g.setAttribute("src",h),g.setAttribute("crossorigin","anonymous"),new Promise(function(G){g.addEventListener("load",function(){G()},!1),g.addEventListener("error",function(){G()},!1),document.body.appendChild(g)})}function W(){return Tt(this,function h(){return ae(h,function(g){switch(g.g){case 1:return g.m=2,_(g,WebAssembly.instantiate(Qn),4);case 4:g.g=3,g.m=0;break;case 2:return g.m=0,g.j=null,g.return(!1);case 3:return g.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||Ln,typeof window=="object")var g=window.location.pathname.toString().substring(0,window.location.pathname.toString().lastIndexOf("/"))+"/";else if(typeof location!="undefined")g=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=g,h.options){g=L(Object.keys(h.options));for(var G=g.next();!G.done;G=g.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 k(h,g){return h.g.files===void 0?[]:typeof h.g.files=="function"?h.g.files(g):h.g.files}function O(h){return Tt(h,function g(){var G=this,C,M,Q,B,tt,ct,s,X,R,Y,N;return ae(g,function(A){switch(A.g){case 1:return C=G,G.R?(M=k(G,G.j),_(A,W(),2)):A.return();case 2:if(Q=A.h,typeof window=="object")return Hn("createMediapipeSolutionsWasm",{locateFile:G.locateFile}),Hn("createMediapipeSolutionsPackedAssets",{locateFile:G.locateFile}),ct=M.filter(function(K){return K.data!==void 0}),s=M.filter(function(K){return K.data===void 0}),X=Promise.all(ct.map(function(K){var nt=it(C,K.url);if(K.path!==void 0){var q=K.path;nt=nt.then(function(yt){return C.overrideFile(q,yt),Promise.resolve(yt)})}return nt})),R=Promise.all(s.map(function(K){return K.simd===void 0||K.simd&&Q||!K.simd&&!Q?p(C.locateFile(K.url,C.S)):Promise.resolve()})).then(function(){return Tt(C,function K(){var nt,q,yt=this;return ae(K,function(Xt){if(Xt.g==1)return nt=window.createMediapipeSolutionsWasm,q=window.createMediapipeSolutionsPackedAssets,_(Xt,nt(q),2);yt.h=Xt.h,Xt.g=0})})}),Y=function(){return Tt(C,function K(){var nt=this;return ae(K,function(q){return nt.g.graph&&nt.g.graph.url?q=_(q,it(nt,nt.g.graph.url),0):(q.g=0,q=void 0),q})})}(),_(A,Promise.all([R,X,Y]),7);if(typeof importScripts!="function")throw Error("solutions can only be loaded on a web page or in a web worker");return B=M.filter(function(K){return K.simd===void 0||K.simd&&Q||!K.simd&&!Q}).map(function(K){return C.locateFile(K.url,C.S)}),importScripts.apply(null,J(B)),_(A,createMediapipeSolutionsWasm(Module),6);case 6:G.h=A.h,G.l=new OffscreenCanvas(1,1),G.h.canvas=G.l,tt=G.h.GL.createContext(G.l,{antialias:!1,alpha:!1,ba:typeof WebGL2RenderingContext!="undefined"?2:1}),G.h.GL.makeContextCurrent(tt),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 lt(h){return Tt(h,function g(){var G=this,C,M,Q,B,tt,ct,s,X;return ae(g,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,_(R,it(G,G.g.graph.url),3)}for(R.g!=2&&(C=R.h,G.i.loadGraph(C)),M=L(Object.keys(G.B)),Q=M.next();!Q.done;Q=M.next())B=Q.value,G.i.overrideFile(B,G.B[B]);if(G.B={},G.g.listeners)for(tt=L(G.g.listeners),ct=tt.next();!ct.done;ct=tt.next())s=ct.value,Ut(G,s);X=G.j,G.j={},G.setOptions(X),R.g=0})})}i.reset=function(){return Tt(this,function h(){var g=this;return ae(h,function(G){g.i&&(g.i.reset(),g.m={},g.s={}),G.g=0})})},i.setOptions=function(h,g){var G=this;if(g=g||this.g.options){for(var C=[],M=[],Q={},B=L(Object.keys(h)),tt=B.next();!tt.done;Q={K:Q.K,L:Q.L},tt=B.next()){var ct=tt.value;ct in this.j&&this.j[ct]===h[ct]||(this.j[ct]=h[ct],tt=g[ct],tt!==void 0&&(tt.onChange&&(Q.K=tt.onChange,Q.L=h[ct],C.push(function(s){return function(){return Tt(G,function X(){var R,Y=this;return ae(X,function(N){if(N.g==1)return _(N,s.K(s.L),2);R=N.h,R===!0&&(Y.o=!0),N.g=0})})}}(Q))),tt.graphOptionXref&&(ct={valueNumber:tt.type===1?h[ct]:0,valueBoolean:tt.type===0?h[ct]:!1,valueString:tt.type===2?h[ct]:""},tt=Object.assign(Object.assign(Object.assign({},{calculatorName:"",calculatorIndex:0}),tt.graphOptionXref),ct),M.push(tt))))}(C.length!==0||M.length!==0)&&(this.o=!0,this.A=(this.A===void 0?[]:this.A).concat(M),this.u=(this.u===void 0?[]:this.u).concat(C))}};function P(h){return Tt(h,function g(){var G=this,C,M,Q,B,tt,ct,s;return ae(g,function(X){switch(X.g){case 1:if(!G.o)return X.return();if(!G.u){X.g=2;break}C=L(G.u),M=C.next();case 3:if(M.done){X.g=5;break}return Q=M.value,_(X,Q(),4);case 4:M=C.next(),X.g=3;break;case 5:G.u=void 0;case 2:if(G.A){for(B=new G.h.GraphOptionChangeRequestList,tt=L(G.A),ct=tt.next();!ct.done;ct=tt.next())s=ct.value,B.push_back(s);G.i.changeOptions(B),B.delete(),G.A=void 0}G.o=!1,X.g=0}})})}i.initialize=function(){return Tt(this,function h(){var g=this;return ae(h,function(G){return G.g==1?_(G,O(g),2):G.g!=3?_(G,lt(g),3):_(G,P(g),0)})})};function it(h,g){return Tt(h,function G(){var C=this,M,Q;return ae(G,function(B){return g in C.F?B.return(C.F[g]):(M=C.locateFile(g,""),Q=fetch(M).then(function(tt){return tt.arrayBuffer()}),C.F[g]=Q,B.return(Q))})})}i.overrideFile=function(h,g){this.i?this.i.overrideFile(h,g):this.B[h]=g},i.clearOverriddenFiles=function(){this.B={},this.i&&this.i.clearOverriddenFiles()},i.send=function(h,g){return Tt(this,function G(){var C=this,M,Q,B,tt,ct,s,X,R,Y;return ae(G,function(N){switch(N.g){case 1:return C.g.inputs?(M=1e3*(g==null?performance.now():g),_(N,C.C,2)):N.return();case 2:return _(N,C.initialize(),3);case 3:for(Q=new C.h.PacketDataList,B=L(Object.keys(h)),tt=B.next();!tt.done;tt=B.next())if(ct=tt.value,s=C.g.inputs[ct]){t:{var A=C,K=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!="undefined"&&K instanceof HTMLVideoElement){var q=K.videoWidth;nt=K.videoHeight}else typeof HTMLImageElement!="undefined"&&K instanceof HTMLImageElement?(q=K.naturalWidth,nt=K.naturalHeight):(q=K.width,nt=K.height);nt={glName:A.l,width:q,height:nt},q=A.g,q.canvas.width=nt.width,q.canvas.height=nt.height,q.activeTexture(q.TEXTURE0),A.h.bindTexture2d(A.l),q.texImage2D(q.TEXTURE_2D,0,q.RGBA,q.RGBA,q.UNSIGNED_BYTE,K),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(K.length),nt=0;nt<K.length;++nt){q=K[nt];var yt=A.data,Xt=yt.setBoundingBox,Kt=nt,It=q.T,ft=new tn;Rt(ft,1,It.Z),Rt(ft,2,It.$),Rt(ft,3,It.height),Rt(ft,4,It.width),Rt(ft,5,It.rotation),Rt(ft,6,It.X);var Wt=It=new Ge;Pe(Wt,1,qt(ft,1)),Pe(Wt,2,qt(ft,2)),Pe(Wt,3,qt(ft,3)),Pe(Wt,4,qt(ft,4)),Pe(Wt,5,qt(ft,5));var St=qt(ft,6);if(St!=null&&St!=null){_t(Wt.g,48);var wt=Wt.g,Ht=St;St=0>Ht,Ht=Math.abs(Ht);var l=Ht>>>0;for(Ht=Math.floor((Ht-l)/4294967296),Ht>>>=0,St&&(Ht=~Ht>>>0,l=(~l>>>0)+1,4294967295<l&&(l=0,Ht++,4294967295<Ht&&(Ht=0))),de=l,Se=Ht,St=de,l=Se;0<l||127<St;)wt.push(St&127|128),St=(St>>>7|l<<25)>>>0,l>>>=7;wt.push(St)}if(ot(ft,Wt),It=Be(It),Xt.call(yt,Kt,It),q.O)for(yt=0;yt<q.O.length;++yt)ft=q.O[yt],Wt=!!ft.visibility,Xt=A.data,Kt=Xt.addNormalizedLandmark,It=nt,ft=Object.assign(Object.assign({},ft),{visibility:Wt?ft.visibility:0}),Wt=new hn,Rt(Wt,1,ft.x),Rt(Wt,2,ft.y),Rt(Wt,3,ft.z),ft.visibility&&Rt(Wt,4,ft.visibility),wt=ft=new Ge,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)),ot(Wt,wt),ft=Be(ft),Kt.call(Xt,It,ft);if(q.M)for(yt=0;yt<q.M.length;++yt){if(Xt=A.data,Kt=Xt.addClassification,It=nt,ft=q.M[yt],Wt=new fe,Rt(Wt,2,ft.Y),ft.index&&Rt(Wt,1,ft.index),ft.label&&Rt(Wt,3,ft.label),ft.displayName&&Rt(Wt,4,ft.displayName),wt=ft=new Ge,l=qt(Wt,1),l!=null&&l!=null)if(_t(wt.g,8),St=wt.g,0<=l)_t(St,l);else{for(Ht=0;9>Ht;Ht++)St.push(l&127|128),l>>=7;St.push(1)}Pe(wt,2,qt(Wt,2)),St=qt(Wt,3),St!=null&&(St=Rn(St),_t(wt.g,26),_t(wt.g,St.length),zt(wt,wt.g.end()),zt(wt,St)),St=qt(Wt,4),St!=null&&(St=Rn(St),_t(wt.g,34),_t(wt.g,St.length),zt(wt,wt.g.end()),zt(wt,St)),ot(Wt,wt),ft=Be(ft),Kt.call(Xt,It,ft)}}A=A.data;break t;default:A={}}}switch(X=A,R=s.stream,s.type){case"video":Q.pushTexture2d(Object.assign(Object.assign({},X),{stream:R,timestamp:M}));break;case"detections":Y=X,Y.stream=R,Y.timestamp=M,Q.pushDetectionList(Y);break;default:throw Error("Unknown input config type: '"+s.type+"'")}}return C.i.send(Q),_(N,C.C,4);case 4:Q.delete(),N.g=0}})})};function bt(h,g,G){return Tt(h,function C(){var M,Q,B,tt,ct,s,X=this,R,Y,N,A,K,nt,q,yt;return ae(C,function(Xt){switch(Xt.g){case 1:if(!G)return Xt.return(g);for(M={},Q=0,B=L(Object.keys(G)),tt=B.next();!tt.done;tt=B.next())ct=tt.value,s=G[ct],typeof s!="string"&&s.type==="texture"&&g[s.stream]!==void 0&&++Q;1<Q&&(X.G=!1),R=L(Object.keys(G)),tt=R.next();case 2:if(tt.done){Xt.g=4;break}if(Y=tt.value,N=G[Y],typeof N=="string")return q=M,yt=Y,_(Xt,xt(X,Y,g[N]),14);if(A=g[N.stream],N.type==="detection_list"){if(A){for(var Kt=A.getRectList(),It=A.getLandmarksList(),ft=A.getClassificationsList(),Wt=[],St=0;St<Kt.size();++St){var wt=Kt.get(St);t:{var Ht=new tn;for(wt=new ge(wt);He(wt);)switch(wt.i){case 13:var l=jt(wt);Rt(Ht,1,l);break;case 21:l=jt(wt),Rt(Ht,2,l);break;case 29:l=jt(wt),Rt(Ht,3,l);break;case 37:l=jt(wt),Rt(Ht,4,l);break;case 45:l=jt(wt),Rt(Ht,5,l);break;case 48:l=Xe(wt.g),Rt(Ht,6,l);break;default:if(!at(Ht,wt))break t}}Ht={Z:Ct(Ht,1),$:Ct(Ht,2),height:Ct(Ht,3),width:Ct(Ht,4),rotation:Ct(Ht,5,0),X:he(Ht,6,0)},wt=we(qe(It.get(St)),hn).map(Sn);var v=ft.get(St);t:for(l=new De,v=new ge(v);He(v);)switch(v.i){case 10:l.addClassification(xe(v,new fe,Ce));break;default:if(!at(l,v))break t}Ht={T:Ht,O:wt,M:Zn(l)},Wt.push(Ht)}Kt=Wt}else Kt=[];M[Y]=Kt,Xt.g=7;break}if(N.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=[];M[Y]=Kt,Xt.g=7;break}if(A===void 0){Xt.g=3;break}if(N.type==="float_list"){M[Y]=A,Xt.g=7;break}if(N.type==="proto"){M[Y]=A,Xt.g=7;break}if(N.type!=="texture")throw Error("Unknown output config type: '"+N.type+"'");return K=X.s[Y],K||(K=new Kn(X.h,X.D),X.s[Y]=K),_(Xt,ln(K,A,X.G),13);case 13:nt=Xt.h,M[Y]=nt;case 7:N.transform&&M[Y]&&(M[Y]=N.transform(M[Y])),Xt.g=3;break;case 14:q[yt]=Xt.h;case 3:tt=R.next(),Xt.g=2;break;case 4:return Xt.return(M)}})})}function xt(h,g,G){return Tt(h,function C(){var M=this,Q;return ae(C,function(B){return typeof G=="number"||G instanceof Uint8Array||G instanceof M.h.Uint8BlobList?B.return(G):G instanceof M.h.Texture2dDataOut?(Q=M.s[g],Q||(Q=new Kn(M.h,M.D),M.s[g]=Q),B.return(ln(Q,G,M.G))):B.return(void 0)})})}function Ut(h,g){for(var G=g.name||"$",C=[].concat(J(g.wants)),M=new h.h.StringList,Q=L(g.wants),B=Q.next();!B.done;B=Q.next())M.push_back(B.value);Q=h.h.PacketListener.implement({onResults:function(tt){for(var ct={},s=0;s<g.wants.length;++s)ct[C[s]]=tt.get(s);var X=h.listeners[G];X&&(h.C=bt(h,ct,g.outs).then(function(R){R=X(R);for(var Y=0;Y<g.wants.length;++Y){var N=ct[C[Y]];typeof N=="object"&&N.hasOwnProperty&&N.hasOwnProperty("delete")&&N.delete()}R&&(h.C=R)}))}}),h.i.attachMultiListener(M,Q),M.delete()}i.onResults=function(h,g){this.listeners[g||"$"]=h},Ve("Solution",V),Ve("OptionType",{BOOL:0,NUMBER:1,aa:2,0:"BOOL",1:"NUMBER",2:"STRING"});function Et(h){h=kn(h);var g=h.getMesh();if(!g)return h;var G=new Float32Array(g.getVertexBufferList());g.getVertexBufferList=function(){return G};var C=new Uint32Array(g.getIndexBufferList());return g.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(Et)}},multiFaceLandmarks:{type:"proto_list",stream:"multi_face_landmarks",transform:function(h){return h.map(function(g){return we(qe(g),hn).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"}}}},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]],Lt=[[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]],Jt=[[276,283],[283,282],[282,295],[295,285],[300,293],[293,334],[334,296],[296,336]],Qt=[[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]],ue=[[46,53],[53,52],[52,65],[65,55],[70,63],[63,105],[105,66],[66,107]],me=[[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]],ye=[].concat(J(kt),J(Lt),J(Jt),J(Qt),J(ue),J(me));function Ee(h){h=h||{},h=Object.assign(Object.assign({},$t),h),this.g=new V(h)}i=Ee.prototype,i.close=function(){return this.g.close(),Promise.resolve()},i.onResults=function(h){this.g.onResults(h)},i.initialize=function(){return Tt(this,function h(){var g=this;return ae(h,function(G){return _(G,g.g.initialize(),0)})})},i.reset=function(){this.g.reset()},i.send=function(h){return Tt(this,function g(){var G=this;return ae(g,function(C){return _(C,G.g.send(h),0)})})},i.setOptions=function(h){this.g.setOptions(h)},Ve("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}}),Ve("FaceMesh",Ee),Ve("FACEMESH_LIPS",kt),Ve("FACEMESH_LEFT_EYE",Lt),Ve("FACEMESH_LEFT_EYEBROW",Jt),Ve("FACEMESH_LEFT_IRIS",[[474,475],[475,476],[476,477],[477,474]]),Ve("FACEMESH_RIGHT_EYE",Qt),Ve("FACEMESH_RIGHT_EYEBROW",ue),Ve("FACEMESH_RIGHT_IRIS",[[469,470],[470,471],[471,472],[472,469]]),Ve("FACEMESH_FACE_OVAL",me),Ve("FACEMESH_CONTOURS",ye),Ve("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]]),Ve("matrixDataToMatrix",function(h){for(var g=h.getCols(),G=h.getRows(),C=h.getPackedDataList(),M=[],Q=0;Q<G;Q++)M.push(Array(g));for(Q=0;Q<G;Q++)for(var B=0;B<g;B++){var tt=h.getLayout()===1?Q*g+B:B*G+Q;M[Q][B]=C[tt]}return M}),Ve("VERSION","0.4.1633559619")}).call(Zi);const vi={};(function(){var i;function n(t){var u=0;return function(){return u<t.length?{done:!1,value:t[u++]}:{done:!0}}}var o=typeof Object.defineProperties=="function"?Object.defineProperty:function(t,u,a){return t==Array.prototype||t==Object.prototype||(t[u]=a.value),t};function m(t){t=[typeof globalThis=="object"&&globalThis,t,typeof window=="object"&&window,typeof self=="object"&&self,typeof global=="object"&&global];for(var u=0;u<t.length;++u){var a=t[u];if(a&&a.Math==Math)return a}throw Error("Cannot find global object")}var y=m(this);function S(t,u){if(u)t:{var a=y;t=t.split(".");for(var b=0;b<t.length-1;b++){var I=t[b];if(!(I in a))break t;a=a[I]}t=t[t.length-1],b=a[t],u=u(b),u!=b&&u!=null&&o(a,t,{configurable:!0,writable:!0,value:u})}}S("Symbol",function(t){function u(w){if(this instanceof u)throw new TypeError("Symbol is not a constructor");return new a(b+(w||"")+"_"+I++,w)}function a(w,H){this.g=w,o(this,"description",{configurable:!0,writable:!0,value:H})}if(t)return t;a.prototype.toString=function(){return this.g};var b="jscomp_symbol_"+(1e9*Math.random()>>>0)+"_",I=0;return u}),S("Symbol.iterator",function(t){if(t)return t;t=Symbol("Symbol.iterator");for(var u="Array Int8Array Uint8Array Uint8ClampedArray Int16Array Uint16Array Int32Array Uint32Array Float32Array Float64Array".split(" "),a=0;a<u.length;a++){var b=y[u[a]];typeof b=="function"&&typeof b.prototype[t]!="function"&&o(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 L(t){var u=typeof Symbol!="undefined"&&Symbol.iterator&&t[Symbol.iterator];return u?u.call(t):{next:n(t)}}function J(t){if(!(t instanceof Array)){t=L(t);for(var u,a=[];!(u=t.next()).done;)a.push(u.value);t=a}return t}var rt=typeof Object.create=="function"?Object.create:function(t){function u(){}return u.prototype=t,new u},z;if(typeof Object.setPrototypeOf=="function")z=Object.setPrototypeOf;else{var st;t:{var Gt={a:!0},Vt={};try{Vt.__proto__=Gt,st=Vt.a;break t}catch{}st=!1}z=st?function(t,u){if(t.__proto__=u,t.__proto__!==u)throw new TypeError(t+" is not extensible");return t}:null}var dt=z;function ht(t,u){if(t.prototype=rt(u.prototype),t.prototype.constructor=t,dt)dt(t,u);else for(var a in u)if(a!="prototype")if(Object.defineProperties){var b=Object.getOwnPropertyDescriptor(u,a);b&&Object.defineProperty(t,a,b)}else t[a]=u[a];t.ka=u.prototype}function Yt(){this.l=!1,this.i=null,this.h=void 0,this.g=1,this.s=this.m=0,this.j=null}function Ft(t){if(t.l)throw new TypeError("Generator is already running");t.l=!0}Yt.prototype.o=function(t){this.h=t};function Bt(t,u){t.j={V:u,X:!0},t.g=t.m||t.s}Yt.prototype.return=function(t){this.j={return:t},this.g=this.s};function _(t,u,a){return t.g=a,{value:u}}function Ae(t){this.g=new Yt,this.h=t}function cn(t,u){Ft(t.g);var a=t.g.i;return a?We(t,"return"in a?a.return:function(b){return{value:b,done:!0}},u,t.g.return):(t.g.return(u),Dt(t))}function We(t,u,a,b){try{var I=u.call(t.g.i,a);if(!(I instanceof Object))throw new TypeError("Iterator result "+I+" is not an object");if(!I.done)return t.g.l=!1,I;var w=I.value}catch(H){return t.g.i=null,Bt(t.g,H),Dt(t)}return t.g.i=null,b.call(t.g,w),Dt(t)}function Dt(t){for(;t.g.g;)try{var u=t.h(t.g);if(u)return t.g.l=!1,{value:u.value,done:!1}}catch(a){t.g.h=void 0,Bt(t.g,a)}if(t.g.l=!1,t.g.j){if(u=t.g.j,t.g.j=null,u.X)throw u.V;return{value:u.return,done:!0}}return{value:void 0,done:!0}}function Bn(t){this.next=function(u){return Ft(t.g),t.g.i?u=We(t,t.g.i.next,u,t.g.o):(t.g.o(u),u=Dt(t)),u},this.throw=function(u){return Ft(t.g),t.g.i?u=We(t,t.g.i.throw,u,t.g.o):(Bt(t.g,u),u=Dt(t)),u},this.return=function(u){return cn(t,u)},this[Symbol.iterator]=function(){return this}}function ae(t){function u(b){return t.next(b)}function a(b){return t.throw(b)}return new Promise(function(b,I){function w(H){H.done?b(H.value):Promise.resolve(H.value).then(u,a).then(w,I)}w(t.next())})}function gt(t){return ae(new Bn(new Ae(t)))}S("Promise",function(t){function u(H){this.h=0,this.i=void 0,this.g=[],this.o=!1;var U=this.j();try{H(U.resolve,U.reject)}catch(j){U.reject(j)}}function a(){this.g=null}function b(H){return H instanceof u?H:new u(function(U){U(H)})}if(t)return t;a.prototype.h=function(H){if(this.g==null){this.g=[];var U=this;this.i(function(){U.l()})}this.g.push(H)};var I=y.setTimeout;a.prototype.i=function(H){I(H,0)},a.prototype.l=function(){for(;this.g&&this.g.length;){var H=this.g;this.g=[];for(var U=0;U<H.length;++U){var j=H[U];H[U]=null;try{j()}catch(D){this.j(D)}}}this.g=null},a.prototype.j=function(H){this.i(function(){throw H})},u.prototype.j=function(){function H(D){return function($){j||(j=!0,D.call(U,$))}}var U=this,j=!1;return{resolve:H(this.D),reject:H(this.l)}},u.prototype.D=function(H){if(H===this)this.l(new TypeError("A Promise cannot resolve to itself"));else if(H instanceof u)this.G(H);else{t:switch(typeof H){case"object":var U=H!=null;break t;case"function":U=!0;break t;default:U=!1}U?this.A(H):this.m(H)}},u.prototype.A=function(H){var U=void 0;try{U=H.then}catch(j){this.l(j);return}typeof U=="function"?this.H(U,H):this.m(H)},u.prototype.l=function(H){this.s(2,H)},u.prototype.m=function(H){this.s(1,H)},u.prototype.s=function(H,U){if(this.h!=0)throw Error("Cannot settle("+H+", "+U+"): Promise already settled in state"+this.h);this.h=H,this.i=U,this.h===2&&this.F(),this.B()},u.prototype.F=function(){var H=this;I(function(){if(H.C()){var U=y.console;typeof U!="undefined"&&U.error(H.i)}},1)},u.prototype.C=function(){if(this.o)return!1;var H=y.CustomEvent,U=y.Event,j=y.dispatchEvent;return typeof j=="undefined"?!0:(typeof H=="function"?H=new H("unhandledrejection",{cancelable:!0}):typeof U=="function"?H=new U("unhandledrejection",{cancelable:!0}):(H=y.document.createEvent("CustomEvent"),H.initCustomEvent("unhandledrejection",!1,!0,H)),H.promise=this,H.reason=this.i,j(H))},u.prototype.B=function(){if(this.g!=null){for(var H=0;H<this.g.length;++H)w.h(this.g[H]);this.g=null}};var w=new a;return u.prototype.G=function(H){var U=this.j();H.K(U.resolve,U.reject)},u.prototype.H=function(H,U){var j=this.j();try{H.call(U,j.resolve,j.reject)}catch(D){j.reject(D)}},u.prototype.then=function(H,U){function j(mt,pt){return typeof mt=="function"?function(vt){try{D(mt(vt))}catch(Zt){$(Zt)}}:pt}var D,$,ut=new u(function(mt,pt){D=mt,$=pt});return this.K(j(H,D),j(U,$)),ut},u.prototype.catch=function(H){return this.then(void 0,H)},u.prototype.K=function(H,U){function j(){switch(D.h){case 1:H(D.i);break;case 2:U(D.i);break;default:throw Error("Unexpected state: "+D.h)}}var D=this;this.g==null?w.h(j):this.g.push(j),this.o=!0},u.resolve=b,u.reject=function(H){return new u(function(U,j){j(H)})},u.race=function(H){return new u(function(U,j){for(var D=L(H),$=D.next();!$.done;$=D.next())b($.value).K(U,j)})},u.all=function(H){var U=L(H),j=U.next();return j.done?b([]):new u(function(D,$){function ut(vt){return function(Zt){mt[vt]=Zt,pt--,pt==0&&D(mt)}}var mt=[],pt=0;do mt.push(void 0),pt++,b(j.value).K(ut(mt.length-1),$),j=U.next();while(!j.done)})},u});function mn(t,u){t instanceof String&&(t+="");var a=0,b=!1,I={next:function(){if(!b&&a<t.length){var w=a++;return{value:u(w,t[w]),done:!1}}return b=!0,{done:!0,value:void 0}}};return I[Symbol.iterator]=function(){return I},I}var An=typeof Object.assign=="function"?Object.assign:function(t,u){for(var a=1;a<arguments.length;a++){var b=arguments[a];if(b)for(var I in b)Object.prototype.hasOwnProperty.call(b,I)&&(t[I]=b[I])}return t};S("Object.assign",function(t){return t||An}),S("Object.is",function(t){return t||function(u,a){return u===a?u!==0||1/u===1/a:u!==u&&a!==a}}),S("Array.prototype.includes",function(t){return t||function(u,a){var b=this;b instanceof String&&(b=String(b));var I=b.length;for(a=a||0,0>a&&(a=Math.max(a+I,0));a<I;a++){var w=b[a];if(w===u||Object.is(w,u))return!0}return!1}}),S("String.prototype.includes",function(t){return t||function(u,a){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,a||0)!==-1}}),S("Array.prototype.keys",function(t){return t||function(){return mn(this,function(u){return u})}});var Ve=this||self;function Nt(t,u){t=t.split(".");var a=Ve;t[0]in a||typeof a.execScript=="undefined"||a.execScript("var "+t[0]);for(var b;t.length&&(b=t.shift());)t.length||u===void 0?a[b]&&a[b]!==Object.prototype[b]?a=a[b]:a=a[b]={}:a[b]=u}function Te(t){throw t}function nn(t,u){Te(Error("Invalid wire type: "+t+" (at position "+u+")"))}function Gn(){Te(Error("Failed to read varint, encoding is invalid."))}function wn(t,u){return u=String.fromCharCode.apply(null,u),t==null?u:t+u}var Rn,Cn=typeof TextDecoder!="undefined",an,pn=typeof TextEncoder!="undefined";function En(t){if(pn)t=(an||(an=new TextEncoder)).encode(t);else{var u=void 0;u=u===void 0?!1:u;for(var a=0,b=new Uint8Array(3*t.length),I=0;I<t.length;I++){var w=t.charCodeAt(I);if(128>w)b[a++]=w;else{if(2048>w)b[a++]=w>>6|192;else{if(55296<=w&&57343>=w){if(56319>=w&&I<t.length){var H=t.charCodeAt(++I);if(56320<=H&&57343>=H){w=1024*(w-55296)+H-56320+65536,b[a++]=w>>18|240,b[a++]=w>>12&63|128,b[a++]=w>>6&63|128,b[a++]=w&63|128;continue}else I--}if(u)throw Error("Found an unpaired surrogate");w=65533}b[a++]=w>>12|224,b[a++]=w>>6&63|128}b[a++]=w&63|128}}t=b.subarray(0,a)}return t}var Fn={},je=null;function Me(t){var u;u===void 0&&(u=0),de(),u=Fn[u];for(var a=Array(Math.floor(t.length/3)),b=u[64]||"",I=0,w=0;I<t.length-2;I+=3){var H=t[I],U=t[I+1],j=t[I+2],D=u[H>>2];H=u[(H&3)<<4|U>>4],U=u[(U&15)<<2|j>>6],j=u[j&63],a[w++]=D+H+U+j}switch(D=0,j=b,t.length-I){case 2:D=t[I+1],j=u[(D&15)<<2]||b;case 1:t=t[I],a[w]=u[t>>2]+u[(t&3)<<4|D>>4]+j+b}return a.join("")}function xn(t){var u=t.length,a=3*u/4;a%3?a=Math.floor(a):"=.".indexOf(t[u-1])!=-1&&(a="=.".indexOf(t[u-2])!=-1?a-2:a-1);var b=new Uint8Array(a),I=0;return Xn(t,function(w){b[I++]=w}),b.subarray(0,I)}function Xn(t,u){function a(j){for(;b<t.length;){var D=t.charAt(b++),$=je[D];if($!=null)return $;if(!/^[\s\xa0]*$/.test(D))throw Error("Unknown base64 encoding at char: "+D)}return j}de();for(var b=0;;){var I=a(-1),w=a(0),H=a(64),U=a(64);if(U===64&&I===-1)break;u(I<<2|w>>4),H!=64&&(u(w<<4&240|H>>2),U!=64&&u(H<<6&192|U))}}function de(){if(!je){je={};for(var t="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789".split(""),u=["+/=","+/","-_=","-_.","-_"],a=0;5>a;a++){var b=t.concat(u[a].split(""));Fn[a]=b;for(var I=0;I<b.length;I++){var w=b[I];je[w]===void 0&&(je[w]=I)}}}}var Se=typeof Uint8Array=="function",ze;function ee(t){if(this.g=t,t!==null&&t.length===0)throw Error("ByteString should be constructed with non-empty values")}var Xe=typeof Uint8Array.prototype.slice=="function";function rn(t,u,a){return u===a?ze||(ze=new Uint8Array(0)):Xe?t.slice(u,a):new Uint8Array(t.subarray(u,a))}var Ue=0,_t=0;function ge(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===ee){if(t.g==null)var u=ze||(ze=new Uint8Array(0));else{u=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,u=new u(t)}return u}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 He(t,u){u=u===void 0?{}:u,u=u.v===void 0?!1:u.v,this.h=null,this.g=this.i=this.l=0,this.j=!1,this.v=u,t&&Mt(this,t)}function Mt(t,u){t.h=ge(u),t.l=0,t.i=t.h.length,t.g=t.l}He.prototype.reset=function(){this.g=this.l};function xe(t){for(var u=128,a=0,b=0,I=0;4>I&&128<=u;I++)u=t.h[t.g++],a|=(u&127)<<7*I;if(128<=u&&(u=t.h[t.g++],a|=(u&127)<<28,b|=(u&127)>>4),128<=u)for(I=0;5>I&&128<=u;I++)u=t.h[t.g++],b|=(u&127)<<7*I+3;if(128>u)return t=a>>>0,u=b>>>0,(b=u&2147483648)&&(t=~t+1>>>0,u=~u>>>0,t==0&&(u=u+1>>>0)),t=4294967296*u+(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 be(t){var u=t.h,a=u[t.g],b=a&127;return 128>a?(t.g+=1,jt(t),b):(a=u[t.g+1],b|=(a&127)<<7,128>a?(t.g+=2,jt(t),b):(a=u[t.g+2],b|=(a&127)<<14,128>a?(t.g+=3,jt(t),b):(a=u[t.g+3],b|=(a&127)<<21,128>a?(t.g+=4,jt(t),b):(a=u[t.g+4],b|=(a&15)<<28,128>a?(t.g+=5,jt(t),b>>>0):(t.g+=5,128<=u[t.g++]&&128<=u[t.g++]&&128<=u[t.g++]&&128<=u[t.g++]&&128<=u[t.g++]?(t.j=!0,Gn(),b):(jt(t),b))))))}function Le(t){var u=t.h[t.g],a=t.h[t.g+1],b=t.h[t.g+2],I=t.h[t.g+3];return t.g+=4,jt(t),(u<<0|a<<8|b<<16|I<<24)>>>0}He.prototype.m=function(){var t=Le(this),u=2*(t>>31)+1,a=t>>>23&255;return t&=8388607,a==255?t?NaN:1/0*u:a==0?u*Math.pow(2,-149)*t:u*Math.pow(2,a-150)*(t+Math.pow(2,23))};var Qe=[];function Ge(){this.g=new Uint8Array(64),this.h=0}function zt(t,u){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++]=u}Ge.prototype.length=function(){return this.h},Ge.prototype.end=function(){var t=this.g,u=this.h;return this.h=0,rn(t,0,u)};function Be(t,u){for(;127<u;)zt(t,u&127|128),u>>>=7;zt(t,u)}function Pe(t){var u={},a=u.O===void 0?!1:u.O;this.m={v:u.v===void 0?!1:u.v},this.O=a,u=this.m,Qe.length?(a=Qe.pop(),u&&(a.v=u.v),t&&Mt(a,t),t=a):t=new He(t,u),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 u=t.g;if((u=u.g==u.i)||(u=t.j)||(u=t.g,u=u.j||0>u.g||u.g>u.i),u)return!1;t.l=t.g.g;var a=be(t.g);return u=a>>>3,a&=7,0<=a&&5>=a?(t.i=u,t.h=a,!0):(t.j=!0,nn(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 u=t.g,a=0;10>a;a++){if((t.h[u]&128)===0){t.g=u+1,jt(t);break t}u++}t.j=!0,Gn()}break;case 1:t=t.g,t.g+=8,jt(t);break;case 2:t.h!=2?Wn(t):(u=be(t.g),t=t.g,t.g+=u,jt(t));break;case 5:t=t.g,t.g+=4,jt(t);break;case 3:u=t.i;do{if(!Ie(t)){t.j=!0,Te(Error("Unmatched start-group tag: stream EOF"));break}if(t.h==4){t.i!=u&&(t.j=!0,Te(Error("Unmatched end-group tag")));break}Wn(t)}while(1);break;default:t.j=!0,nn(t.h,t.l)}}function on(t,u,a){var b=t.g.i,I=be(t.g),w=t.g.g+I;if(t.g.i=w,a(u,t),a=w-t.g.g,a!==0)throw Error("Message parsing ended unexpectedly. Expected to read "+(I+" bytes, instead read "+(I-a)+" bytes, either the data ended unexpectedly or the message misreported its own length"));return t.g.g=w,t.g.i=b,u}var Oe=[];function sn(){this.h=[],this.i=0,this.g=new Ge}function Ze(t,u){u.length!==0&&(t.h.push(u),t.i+=u.length)}function Ye(t,u,a){Be(t.g,8*u+2),Be(t.g,a.length),Ze(t,t.g.end()),Ze(t,a)}var ve=typeof Symbol=="function"&&typeof Symbol()=="symbol"?Symbol(void 0):void 0;function ne(t){return Object.isFrozen(t)||(ve?t[ve]|=1:t.g!==void 0?t.g|=1:Object.defineProperties(t,{g:{value:1,configurable:!0,writable:!0,enumerable:!1}})),t}function _e(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 ee){if(t.g==null)t="";else{var u=t.g;u=u==null||typeof u=="string"?u:Se&&u instanceof Uint8Array?Me(u):null,t=t.g=u}return t}}return t}function Pt(t,u){if(t!=null)return Array.isArray(t)||_e(t)?dn(t,u):u(t)}function dn(t,u){if(Array.isArray(t)){for(var a=Array(t.length),b=0;b<t.length;b++)a[b]=Pt(t[b],u);if(u=Array.isArray(t)){var I;ve?I=t[ve]:I=t.g,u=(I==null?0:I)&1}return u&&ne(a),a}I={};for(a in t)I[a]=Pt(t[a],u);return I}function he(t){return t=qt(t),Array.isArray(t)?dn(t,he):t}var Ct;function Rt(t,u,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],_e(b))){this.j=t-this.i,this.h=b;break t}u!==void 0&&-1<u?(this.j=Math.max(u,t+1-this.i),this.h=null):this.j=Number.MAX_VALUE}if(a)for(u=0;u<a.length;u++)t=a[u],t<this.j?(t+=this.i,(b=this.u[t])?Array.isArray(b)&&ne(b):this.u[t]=re):(we(this),(b=this.h[t])?Array.isArray(b)&&ne(b):this.h[t]=re)}var re=Object.freeze(ne([]));function we(t){var u=t.j+t.i;t.u[u]||(t.h=t.u[u]={})}function te(t,u,a){return u===-1?null:(a===void 0?0:a)||u>=t.j?t.h?t.h[u]:void 0:t.u[u+t.i]}function ie(t,u,a){a=a===void 0?!1:a;var b=te(t,u,a);return b==null&&(b=re),b===re&&(b=ne(b.slice()),at(t,u,b,a)),b}function et(t,u){var a=ie(t,u);if(t.l||(t.l={}),!t.l[u]){for(var b=0;b<a.length;b++)a[b]=+a[b];t.l[u]=!0}return a}function ot(t,u,a){return t=te(t,u),t=t==null?t:+t,t==null?a===void 0?0:a:t}function at(t,u,a,b){(b===void 0?0:b)||u>=t.j?(we(t),t.h[u]=a):t.u[u+t.i]=a}function Ot(t,u,a,b){a!==b?at(t,u,a):at(t,u,void 0,!1)}function ce(t,u,a){if(a===-1)return null;t.g||(t.g={});var b=t.g[a];if(b)return b;var I=te(t,a,!1);return I==null?b:(u=new u(I),t.g[a]=u)}function le(t,u,a){t.g||(t.g={});var b=t.g[a];if(!b){var I=ie(t,a,!1);b=[];for(var w=0;w<I.length;w++)b[w]=new u(I[w]);t.g[a]=b}return b}function Tt(t,u,a,b,I){var w=le(t,b,u);a=a||new b,t=ie(t,u),I!=null?(w.splice(I,0,a),t.splice(I,0,a.u)):(w.push(a),t.push(a.u))}Rt.prototype.toJSON=function(){return dn(this.u,he)},Rt.prototype.toString=function(){return this.u.toString()};function fe(t,u){return t=te(t,u),t==null?0:t}function Ce(t,u){return t=te(t,u),t==null?"":t}function De(t,u){if(t=t.m){Ze(u,u.g.end());for(var a=0;a<t.length;a++)Ze(u,t[a])}}var $e=Symbol();function hn(t,u,a){return t[$e]||(t[$e]=function(b,I){return u(b,I,a)})}function bn(t){var u=t[$e];if(!u){var a=t[tn]||(t[tn]=t());u=function(b,I){return Ne(b,I,a)},t[$e]=u}return u}function Fe(t){var u=t.da;if(u)return bn(u);if(u=t.ia){var a=t.Y;return delete t.Y,hn(t.W.g,u,a)}}function qe(t){var u=Fe(t),a=t.W,b=t.ea;return u?function(I,w){return b(I,w,a,u)}:function(I,w){return b(I,w,a)}}function jn(t){var u=t[0];switch(t.length){case 2:var a=t[1];return function(pt,vt,Zt){return u(pt,vt,Zt,a)};case 3:var b=t[1],I=bn(t[2]);return function(pt,vt,Zt){return u(pt,vt,Zt,b,I)};case 4:var w=t[1],H=t[3],U=bn(t[2]);return function(pt,vt,Zt){return u(pt,vt,Zt,w,U,H)};case 5:var j=t[1],D=hn(j,t[3],t[4]);return function(pt,vt,Zt){return u(pt,vt,Zt,j,D)};case 6:var $=t[1],ut=t[5],mt=hn($,t[3],t[4]);return function(pt,vt,Zt){return u(pt,vt,Zt,$,mt,ut)};default:throw Error("Unsupported number of parameters, expected [2-6], got "+t.length)}}var tn=Symbol();function Ne(t,u,a){for(;Ie(u)&&u.h!=4;){var b=u.i,I=a[b];if(I)Array.isArray(I)&&(I=a[b]=jn(I));else{var w=a[0];w&&(w=w[b])&&(I=a[b]=qe(w))}I&&I(u,t,b)||(I=u,b=t,w=I.l,Wn(I),I.O||(I=rn(I.g.h,w,I.g.g),(w=b.m)?w.push(I):b.m=[I]))}return t}function gn(t,u){var a=new sn;if(u(t,a),t=a.i+a.g.length(),t===0)a=new Uint8Array(0);else{t=new Uint8Array(t);for(var b=a.h,I=b.length,w=u=0;w<I;w++){var H=b[w];H.length!==0&&(t.set(H,u),u+=H.length)}b=a.g,I=b.h,I!==0&&(t.set(b.g.subarray(0,I),u),b.h=0),a.h=[t],a=t}return a}function In(t,u,a){if(Oe.length){var b=Oe.pop();t&&(Mt(b.g,t),b.i=-1,b.h=-1),t=b}else t=new Pe(t);try{var I=new u;return Ne(I,t,a[tn]||(a[tn]=a()))}finally{u=t.g,u.h=null,u.l=0,u.i=0,u.g=0,u.j=!1,u.v=!1,t.i=-1,t.h=-1,t.j=!1,100>Oe.length&&Oe.push(t)}}function Ke(t,u,a){if(u=te(u,a),u!=null){Be(t.g,8*a+5),t=t.g;var b=u;b=(a=0>b?1:0)?-b:b,b===0?0<1/b?Ue=_t=0:(_t=0,Ue=2147483648):isNaN(b)?(_t=0,Ue=2147483647):34028234663852886e22<b?(_t=0,Ue=(a<<31|2139095040)>>>0):11754943508222875e-54>b?(b=Math.round(b/Math.pow(2,-149)),_t=0,Ue=(a<<31|b)>>>0):(u=Math.floor(Math.log(b)/Math.LN2),b*=Math.pow(2,-u),b=Math.round(8388608*b),16777216<=b&&++u,_t=0,Ue=(a<<31|u+127<<23|b&8388607)>>>0),a=Ue,zt(t,a>>>0&255),zt(t,a>>>8&255),zt(t,a>>>16&255),zt(t,a>>>24&255)}}function kn(t,u,a){if(t.h!==1)return!1;var b=t.g;t=Le(b);var I=Le(b);b=2*(I>>31)+1;var w=I>>>20&2047;return t=4294967296*(I&1048575)+t,Ot(u,a,w==2047?t?NaN:1/0*b:w==0?b*Math.pow(2,-1074)*t:b*Math.pow(2,w-1075)*(t+4503599627370496),0),!0}function en(t,u,a){return t.h!==5?!1:(at(u,a,t.g.m()),!0)}function Zn(t,u,a){if(t.h!==5&&t.h!==2)return!1;if(u=ie(u,a),t.h==2){a=He.prototype.m;var b=be(t.g);for(b=t.g.g+b;t.g.g<b;)u.push(a.call(t.g))}else u.push(t.g.m());return!0}function Sn(t,u,a){return t.h!==5?!1:(t=t.g.m(),Ot(u,a,t,0),!0)}function Kn(t,u,a){return t.h!==0?!1:(at(u,a,xe(t.g)),!0)}function ln(t,u,a){return t.h!==0?!1:(at(u,a,be(t.g)),!0)}function Tn(t,u,a){return t.h!==0?!1:(t=be(t.g),Ot(u,a,t,0),!0)}function _n(t,u,a){return t.h!==0?!1:(t=!!be(t.g),Ot(u,a,t,!1),!0)}function Qn(t,u,a){if(t.h!==2)return!1;var b=be(t.g);t=t.g;var I=t.g;t.g+=b,jt(t),t=t.h;var w;if(Cn)(w=Rn)||(w=Rn=new TextDecoder("utf-8",{fatal:!1})),w=w.decode(t.subarray(I,I+b));else{b=I+b;for(var H=[],U=null,j,D,$;I<b;)j=t[I++],128>j?H.push(j):224>j?I>=b?H.push(65533):(D=t[I++],194>j||(D&192)!==128?(I--,H.push(65533)):H.push((j&31)<<6|D&63)):240>j?I>=b-1?H.push(65533):(D=t[I++],(D&192)!==128||j===224&&160>D||j===237&&160<=D||((w=t[I++])&192)!==128?(I--,H.push(65533)):H.push((j&15)<<12|(D&63)<<6|w&63)):244>=j?I>=b-2?H.push(65533):(D=t[I++],(D&192)!==128||(j<<28)+(D-144)>>30!==0||((w=t[I++])&192)!==128||(($=t[I++])&192)!==128?(I--,H.push(65533)):(j=(j&7)<<18|(D&63)<<12|(w&63)<<6|$&63,j-=65536,H.push((j>>10&1023)+55296,(j&1023)+56320))):H.push(65533),8192<=H.length&&(U=wn(U,H),H.length=0);w=wn(U,H)}return at(u,a,w),!0}function Ln(t,u,a,b,I){return t.h!==2?!1:(t=on(t,new b,I),u.g||(u.g={}),b=t&&t.u,u.g[a]=t,at(u,a,b,!1),!0)}function Hn(t,u,a,b,I){return t.h!==2?!1:(t=on(t,new b,I),Tt(u,a,t,b,void 0),!0)}function p(t,u,a){return t.h!==0?!1:(at(u,a,xe(t.g)),!0)}function W(t){Rt.call(this,t)}ht(W,Rt);function V(){return{1:ln,2:en,3:Qn,4:Qn}}function k(t,u){var a=te(t,1);if(a!=null&&a!=null){Be(u.g,8);var b=u.g;if(0<=a)Be(b,a);else{for(var I=0;9>I;I++)zt(b,a&127|128),a>>=7;zt(b,1)}}Ke(u,t,2),b=te(t,3),b!=null&&Ye(u,3,En(b)),b=te(t,4),b!=null&&Ye(u,4,En(b)),De(t,u)}function O(t){Rt.call(this,t,-1,P)}ht(O,Rt),O.prototype.addClassification=function(t,u){return Tt(this,1,t,W,u),this};function lt(){return{1:[Hn,W,V]}}var P=[1];function it(t){Rt.call(this,t)}ht(it,Rt);function bt(){return{1:en,2:en,3:en,4:en,5:en}}function xt(t,u){Ke(u,t,1),Ke(u,t,2),Ke(u,t,3),Ke(u,t,4),Ke(u,t,5),De(t,u)}function Ut(t){Rt.call(this,t,-1,$t)}ht(Ut,Rt);function Et(){return{1:[Hn,it,bt]}}var $t=[1];function kt(t){Rt.call(this,t)}ht(kt,Rt);function Lt(){return{1:en,2:en,3:en,4:en,5:en,6:Kn}}function Jt(t,u){Ke(u,t,1),Ke(u,t,2),Ke(u,t,3),Ke(u,t,4),Ke(u,t,5);var a=te(t,6);if(a!=null&&a!=null){Be(u.g,48);var b=u.g,I=a;a=0>I,I=Math.abs(I);var w=I>>>0;for(I=Math.floor((I-w)/4294967296),I>>>=0,a&&(I=~I>>>0,w=(~w>>>0)+1,4294967295<w&&(w=0,I++,4294967295<I&&(I=0))),Ue=w,_t=I,a=Ue,w=_t;0<w||127<a;)zt(b,a&127|128),a=(a>>>7|w<<25)>>>0,w>>>=7;zt(b,a)}De(t,u)}function Qt(t){Rt.call(this,t,-1,Ee)}ht(Qt,Rt);function ue(){return{1:p,2:p,3:Zn,4:[Ln,me,ye],5:ln,6:ln,7:Zn,8:Zn,9:Zn}}function me(t){Rt.call(this,t)}ht(me,Rt);function ye(){return{1:en,2:en,3:en}}var Ee=[3,7,8,9];function h(t){Rt.call(this,t)}ht(h,Rt);function g(){return{1:Sn,2:Sn,3:Sn}}function G(t){Rt.call(this,t)}ht(G,Rt);function C(){return{1:Sn,2:Sn,3:Sn}}function M(t){Rt.call(this,t)}ht(M,Rt);function Q(){return{1:Tn,2:[Ln,G,C],3:[Ln,h,g],4:_n}}function B(t){Rt.call(this,t,-1,ct)}ht(B,Rt);function tt(){return{1:Tn,2:[Hn,M,Q],3:Sn,4:Zn,5:Zn,6:Zn}}var ct=[2,4,5,6];function s(t){Rt.call(this,t,-1,R)}ht(s,Rt);function X(){return{1:Tn,2:[Hn,B,tt],3:[Ln,Qt,ue],4:kn,5:Zn,6:Zn}}var R=[2,5,6];function Y(t,u,a){if(a=t.createShader(a===0?t.VERTEX_SHADER:t.FRAGMENT_SHADER),t.shaderSource(a,u),t.compileShader(a),!t.getShaderParameter(a,t.COMPILE_STATUS))throw Error(`Could not compile WebGL shader.
|
|
89
89
|
|
|
90
90
|
`+t.getShaderInfoLog(a));return a}function N(t){return le(t,W,1).map(function(u){return{index:fe(u,1),$:ot(u,2),label:te(u,3)!=null?Ce(u,3):void 0,displayName:te(u,4)!=null?Ce(u,4):void 0}})}function A(t){return{x:ot(t,1),y:ot(t,2),z:ot(t,3),visibility:te(t,4)!=null?ot(t,4):void 0}}function K(t,u){this.h=t,this.g=u,this.l=0}function nt(t,u,a){return q(t,u),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 q(t,u){var a=t.g;if(t.m===void 0){var b=Y(a,`
|
|
91
91
|
attribute vec2 aVertex;
|
|
@@ -102,9 +102,9 @@
|
|
|
102
102
|
gl_FragColor = texture2D(sampler0, vTex);
|
|
103
103
|
}`,1),w=a.createProgram();if(a.attachShader(w,b),a.attachShader(w,I),a.linkProgram(w),!a.getProgramParameter(w,a.LINK_STATUS))throw Error(`Could not compile WebGL program.
|
|
104
104
|
|
|
105
|
-
`+a.getProgramInfoLog(w));b=t.m=w,a.useProgram(b),I=a.getUniformLocation(b,"sampler0"),t.j={J:a.getAttribLocation(b,"aVertex"),I:a.getAttribLocation(b,"aTex"),ja:I},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(I,0)}b=t.j,a.useProgram(t.m),a.canvas.width=u.width,a.canvas.height=u.height,a.viewport(0,0,u.width,u.height),a.activeTexture(a.TEXTURE0),t.h.bindTexture2d(u.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,u){return u+t}function It(t,u){window[t]=u}function ft(t){var u=document.createElement("script");return u.setAttribute("src",t),u.setAttribute("crossorigin","anonymous"),new Promise(function(a){u.addEventListener("load",function(){a()},!1),u.addEventListener("error",function(){a()},!1),document.body.appendChild(u)})}function Wt(){return gt(function(t){switch(t.g){case 1:return t.m=2,_(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 St(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 u=window.location.pathname.toString().substring(0,window.location.pathname.toString().lastIndexOf("/"))+"/";else if(typeof location!="undefined")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.T=u,t.options){u=T(Object.keys(t.options));for(var a=u.next();!a.done;a=u.next()){a=a.value;var b=t.options[a].default;b!==void 0&&(this.j[a]=typeof b=="function"?b():b)}}}i=St.prototype,i.close=function(){return this.i&&this.i.delete(),Promise.resolve()};function wt(t){var u,a,b,I,w,H,U,j,D,$,ut;return gt(function(mt){switch(mt.g){case 1:return t.S?(u=t.g.files===void 0?[]:typeof t.g.files=="function"?t.g.files(t.j):t.g.files,_(mt,Wt(),2)):mt.return();case 2:if(a=mt.h,typeof window=="object")return It("createMediapipeSolutionsWasm",{locateFile:t.locateFile}),It("createMediapipeSolutionsPackedAssets",{locateFile:t.locateFile}),H=u.filter(function(pt){return pt.data!==void 0}),U=u.filter(function(pt){return pt.data===void 0}),j=Promise.all(H.map(function(pt){var vt=v(t,pt.url);if(pt.path!==void 0){var Zt=pt.path;vt=vt.then(function(At){return t.overrideFile(Zt,At),Promise.resolve(At)})}return vt})),D=Promise.all(U.map(function(pt){return pt.simd===void 0||pt.simd&&a||!pt.simd&&!a?ft(t.locateFile(pt.url,t.T)):Promise.resolve()})).then(function(){var pt,vt,Zt;return gt(function(At){if(At.g==1)return pt=window.createMediapipeSolutionsWasm,vt=window.createMediapipeSolutionsPackedAssets,Zt=t,_(At,pt(vt),2);Zt.h=At.h,At.g=0})}),$=function(){return gt(function(pt){return t.g.graph&&t.g.graph.url?pt=_(pt,v(t,t.g.graph.url),0):(pt.g=0,pt=void 0),pt})}(),_(mt,Promise.all([D,j,$]),7);if(typeof importScripts!="function")throw Error("solutions can only be loaded on a web page or in a web worker");return b=u.filter(function(pt){return pt.simd===void 0||pt.simd&&a||!pt.simd&&!a}).map(function(pt){return t.locateFile(pt.url,t.T)}),importScripts.apply(null,k(b)),I=t,_(mt,createMediapipeSolutionsWasm(Module),6);case 6:I.h=mt.h,t.l=new OffscreenCanvas(1,1),t.h.canvas=t.l,w=t.h.GL.createContext(t.l,{antialias:!1,alpha:!1,ga:typeof WebGL2RenderingContext!="undefined"?2:1}),t.h.GL.makeContextCurrent(w),mt.g=4;break;case 7:if(t.l=document.createElement("canvas"),ut=t.l.getContext("webgl2",{}),!ut&&(ut=t.l.getContext("webgl",{}),!ut))return alert("Failed to create WebGL canvas context when passing video frame."),mt.return();t.F=ut,t.h.canvas=t.l,t.h.createContext(t.l,!0,!0,{});case 4:t.i=new t.h.SolutionWasm,t.S=!1,mt.g=0}})}function Ht(t){var u,a,b,I,w,H,U,j;return gt(function(D){if(D.g==1){if(t.g.graph&&t.g.graph.url&&t.R===t.g.graph.url)return D.return();if(t.o=!0,!t.g.graph||!t.g.graph.url){D.g=2;return}return t.R=t.g.graph.url,_(D,v(t,t.g.graph.url),3)}for(D.g!=2&&(u=D.h,t.i.loadGraph(u)),a=T(Object.keys(t.C)),b=a.next();!b.done;b=a.next())I=b.value,t.i.overrideFile(I,t.C[I]);if(t.C={},t.g.listeners)for(w=T(t.g.listeners),H=w.next();!H.done;H=w.next())U=H.value,J(t,U);j=t.j,t.j={},t.setOptions(j),D.g=0})}i.reset=function(){var t=this;return gt(function(u){t.i&&(t.i.reset(),t.m={},t.s={}),u.g=0})},i.setOptions=function(t,u){var a=this;if(u=u||this.g.options){for(var b=[],I=[],w={},H=T(Object.keys(t)),U=H.next();!U.done;w={L:w.L,M:w.M},U=H.next()){var j=U.value;j in this.j&&this.j[j]===t[j]||(this.j[j]=t[j],U=u[j],U!==void 0&&(U.onChange&&(w.L=U.onChange,w.M=t[j],b.push(function(D){return function(){var $;return gt(function(ut){if(ut.g==1)return _(ut,D.L(D.M),2);$=ut.h,$===!0&&(a.o=!0),ut.g=0})}}(w))),U.graphOptionXref&&(j={valueNumber:U.type===1?t[j]:0,valueBoolean:U.type===0?t[j]:!1,valueString:U.type===2?t[j]:""},U=Object.assign(Object.assign(Object.assign({},{calculatorName:"",calculatorIndex:0}),U.graphOptionXref),j),I.push(U))))}(b.length!==0||I.length!==0)&&(this.o=!0,this.B=(this.B===void 0?[]:this.B).concat(I),this.A=(this.A===void 0?[]:this.A).concat(b))}};function l(t){var u,a,b,I,w,H,U;return gt(function(j){switch(j.g){case 1:if(!t.o)return j.return();if(!t.A){j.g=2;break}u=T(t.A),a=u.next();case 3:if(a.done){j.g=5;break}return b=a.value,_(j,b(),4);case 4:a=u.next(),j.g=3;break;case 5:t.A=void 0;case 2:if(t.B){for(I=new t.h.GraphOptionChangeRequestList,w=T(t.B),H=w.next();!H.done;H=w.next())U=H.value,I.push_back(U);t.i.changeOptions(I),I.delete(),t.B=void 0}t.o=!1,j.g=0}})}i.initialize=function(){var t=this;return gt(function(u){return u.g==1?_(u,wt(t),2):u.g!=3?_(u,Ht(t),3):_(u,l(t),0)})};function v(t,u){var a,b;return gt(function(I){return u in t.G?I.return(t.G[u]):(a=t.locateFile(u,""),b=fetch(a).then(function(w){return w.arrayBuffer()}),t.G[u]=b,I.return(b))})}i.overrideFile=function(t,u){this.i?this.i.overrideFile(t,u):this.C[t]=u},i.clearOverriddenFiles=function(){this.C={},this.i&&this.i.clearOverriddenFiles()},i.send=function(t,u){var a=this,b,I,w,H,U,j,D,$,ut;return gt(function(mt){switch(mt.g){case 1:return a.g.inputs?(b=1e3*(u==null?performance.now():u),_(mt,a.D,2)):mt.return();case 2:return _(mt,a.initialize(),3);case 3:for(I=new a.h.PacketDataList,w=T(Object.keys(t)),H=w.next();!H.done;H=w.next())if(U=H.value,j=a.g.inputs[U]){t:{var pt=t[U];switch(j.type){case"video":var vt=a.m[j.stream];if(vt||(vt=new K(a.h,a.F),a.m[j.stream]=vt),vt.l===0&&(vt.l=vt.h.createTexture()),typeof HTMLVideoElement!="undefined"&&pt instanceof HTMLVideoElement)var Zt=pt.videoWidth,At=pt.videoHeight;else typeof HTMLImageElement!="undefined"&&pt instanceof HTMLImageElement?(Zt=pt.naturalWidth,At=pt.naturalHeight):(Zt=pt.width,At=pt.height);At={glName:vt.l,width:Zt,height:At},Zt=vt.g,Zt.canvas.width=At.width,Zt.canvas.height=At.height,Zt.activeTexture(Zt.TEXTURE0),vt.h.bindTexture2d(vt.l),Zt.texImage2D(Zt.TEXTURE_2D,0,Zt.RGBA,Zt.RGBA,Zt.UNSIGNED_BYTE,pt),vt.h.bindTexture2d(0),vt=At;break t;case"detections":for(vt=a.m[j.stream],vt||(vt=new yt(a.h),a.m[j.stream]=vt),vt.data||(vt.data=new vt.g.DetectionListData),vt.data.reset(pt.length),At=0;At<pt.length;++At){Zt=pt[At];var oe=vt.data,se=oe.setBoundingBox,Ee=At,Vn=Zt.U,ke=new Et;if(at(ke,1,Vn.aa),at(ke,2,Vn.ba),at(ke,3,Vn.height),at(ke,4,Vn.width),at(ke,5,Vn.rotation),at(ke,6,Vn.Z),Vn=gn(ke,kt),se.call(oe,Ee,Vn),Zt.P)for(oe=0;oe<Zt.P.length;++oe){ke=Zt.P[oe];var Nn=!!ke.visibility;se=vt.data,Ee=se.addNormalizedLandmark,Vn=At,ke=Object.assign(Object.assign({},ke),{visibility:Nn?ke.visibility:0}),Nn=new it,at(Nn,1,ke.x),at(Nn,2,ke.y),at(Nn,3,ke.z),ke.visibility&&at(Nn,4,ke.visibility),ke=gn(Nn,xt),Ee.call(se,Vn,ke)}if(Zt.N)for(oe=0;oe<Zt.N.length;++oe)se=vt.data,Ee=se.addClassification,Vn=At,ke=Zt.N[oe],Nn=new W,at(Nn,2,ke.$),ke.index&&at(Nn,1,ke.index),ke.label&&at(Nn,3,ke.label),ke.displayName&&at(Nn,4,ke.displayName),ke=gn(Nn,E),Ee.call(se,Vn,ke)}vt=vt.data;break t;default:vt={}}}switch(D=vt,$=j.stream,j.type){case"video":I.pushTexture2d(Object.assign(Object.assign({},D),{stream:$,timestamp:b}));break;case"detections":ut=D,ut.stream=$,ut.timestamp=b,I.pushDetectionList(ut);break;default:throw Error("Unknown input config type: '"+j.type+"'")}}return a.i.send(I),_(mt,a.D,4);case 4:I.delete(),mt.g=0}})};function x(t,u,a){var b,I,w,H,U,j,D,$,ut,mt,pt,vt,Zt,At;return gt(function(oe){switch(oe.g){case 1:if(!a)return oe.return(u);for(b={},I=0,w=T(Object.keys(a)),H=w.next();!H.done;H=w.next())U=H.value,j=a[U],typeof j!="string"&&j.type==="texture"&&u[j.stream]!==void 0&&++I;1<I&&(t.H=!1),D=T(Object.keys(a)),H=D.next();case 2:if(H.done){oe.g=4;break}if($=H.value,ut=a[$],typeof ut=="string")return Zt=b,At=$,_(oe,L(t,$,u[ut]),14);if(mt=u[ut.stream],ut.type==="detection_list"){if(mt){for(var se=mt.getRectList(),Ee=mt.getLandmarksList(),Vn=mt.getClassificationsList(),ke=[],Nn=0;Nn<se.size();++Nn){var pr=In(se.get(Nn),Et,Tt);pr={U:{aa:ot(pr,1),ba:ot(pr,2),height:ot(pr,3),width:ot(pr,4),rotation:ot(pr,5,0),Z:fe(pr,6)},P:le(In(Ee.get(Nn),Ut,Jt),it,1).map(A),N:N(In(Vn.get(Nn),O,lt))},ke.push(pr)}se=ke}else se=[];b[$]=se,oe.g=7;break}if(ut.type==="proto_list"){if(mt){for(se=Array(mt.size()),Ee=0;Ee<mt.size();Ee++)se[Ee]=mt.get(Ee);mt.delete()}else se=[];b[$]=se,oe.g=7;break}if(mt===void 0){oe.g=3;break}if(ut.type==="float_list"){b[$]=mt,oe.g=7;break}if(ut.type==="proto"){b[$]=mt,oe.g=7;break}if(ut.type!=="texture")throw Error("Unknown output config type: '"+ut.type+"'");return pt=t.s[$],pt||(pt=new K(t.h,t.F),t.s[$]=pt),_(oe,nt(pt,mt,t.H),13);case 13:vt=oe.h,b[$]=vt;case 7:ut.transform&&b[$]&&(b[$]=ut.transform(b[$])),oe.g=3;break;case 14:Zt[At]=oe.h;case 3:H=D.next(),oe.g=2;break;case 4:return oe.return(b)}})}function L(t,u,a){var b;return gt(function(I){return typeof a=="number"||a instanceof Uint8Array||a instanceof t.h.Uint8BlobList?I.return(a):a instanceof t.h.Texture2dDataOut?(b=t.s[u],b||(b=new K(t.h,t.F),t.s[u]=b),I.return(nt(b,a,t.H))):I.return(void 0)})}function J(t,u){for(var a=u.name||"$",b=[].concat(k(u.wants)),I=new t.h.StringList,w=T(u.wants),H=w.next();!H.done;H=w.next())I.push_back(H.value);w=t.h.PacketListener.implement({onResults:function(U){for(var j={},D=0;D<u.wants.length;++D)j[b[D]]=U.get(D);var $=t.listeners[a];$&&(t.D=x(t,j,u.outs).then(function(ut){ut=$(ut);for(var mt=0;mt<u.wants.length;++mt){var pt=j[b[mt]];typeof pt=="object"&&pt.hasOwnProperty&&pt.hasOwnProperty("delete")&&pt.delete()}ut&&(t.D=ut)}))}}),t.i.attachMultiListener(I,w),I.delete()}i.onResults=function(t,u){this.listeners[u||"$"]=t},Nt("Solution",St),Nt("OptionType",{BOOL:0,NUMBER:1,ca:2,0:"BOOL",1:"NUMBER",2:"STRING"});function r(t){var u=fe(t,1),a=ce(t,h,3);return a={x:ot(a,1),y:ot(a,2),depth:ot(a,3)},t=ce(t,G,2),{id:u,point2d:a,point3d:{x:ot(t,1),y:ot(t,2),z:ot(t,3)}}}function d(t){var u=In(t,s,X);t=[],u=le(u,M,2);for(var a=0;a<u.length;a++)t.push({id:fe(u[a],1),keypoints:le(u[a],B,2).map(r),visibility:ot(u[a],3),scale:et(u[a],6),translation:et(u[a],5),rotation:et(u[a],4)});return t}function Z(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 c={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 f(t){var u=this;t=t||{},this.g=new St({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,I,w,H;return gt(function(U){return U.g==1?(b=a,u.g.setOptions({allowedLabels:e(b)},c),I=Z(b),w="object_detection_3d.tflite",_(U,v(u.g,I),2)):(H=U.h,u.g.overrideFile(w,H),U.return(!0))})}},focalLength:{default:[1,1],onChange:function(a){var b;return gt(function(I){return b=a,u.h=b,u.g.setOptions({focalX:b[0],focalY:b[1]},c),I.return(!0)})}},principalPoint:{default:[0,0],onChange:function(a){var b;return gt(function(I){return b=a,u.i=b,u.g.setOptions({principalX:b[0],principalY:b[1]},c),I.return(!0)})}},imageSize:{onChange:function(a){var b,I,w,H;return gt(function(U){if(u.h===void 0||u.i===void 0)return console.error('"focalLength" and "principalPoint" must be set if setting image size'),U.return();b=a,I=[b[0]/2,b[1]/2],w=[u.h[0]/I[0],u.h[1]/I[1]],H=[u.i[0]/I[0],u.i[1]/I[1]],u.setOptions({focalLength:w,principalPoint:H}),U.g=0})}}}})}i=f.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 gt(function(u){return _(u,t.g.initialize(),0)})},i.reset=function(){this.g.reset()},i.send=function(t){var u=this;return gt(function(a){return _(a,u.g.send(t),0)})},i.setOptions=function(t){this.g.setOptions(t)},Nt("Objectron",f),Nt("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]]),Nt("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}),Nt("VERSION","0.4.1636596145")}).call(Zi);const vi={};(function(){var i;function n(s){var X=0;return function(){return X<s.length?{done:!1,value:s[X++]}:{done:!0}}}var o=typeof Object.defineProperties=="function"?Object.defineProperty:function(s,X,R){return s==Array.prototype||s==Object.prototype||(s[X]=R.value),s};function p(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 y=p(this);function S(s,X){if(X)t:{var R=y;s=s.split(".");for(var Y=0;Y<s.length-1;Y++){var N=s[Y];if(!(N in R))break t;R=R[N]}s=s[s.length-1],Y=R[s],X=X(Y),X!=Y&&X!=null&&o(R,s,{configurable:!0,writable:!0,value:X})}}S("Symbol",function(s){function X(A){if(this instanceof X)throw new TypeError("Symbol is not a constructor");return new R(Y+(A||"")+"_"+N++,A)}function R(A,K){this.g=A,o(this,"description",{configurable:!0,writable:!0,value:K})}if(s)return s;R.prototype.toString=function(){return this.g};var Y="jscomp_symbol_"+(1e9*Math.random()>>>0)+"_",N=0;return X}),S("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 Y=y[X[R]];typeof Y=="function"&&typeof Y.prototype[s]!="function"&&o(Y.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!="undefined"&&Symbol.iterator&&s[Symbol.iterator];return X?X.call(s):{next:n(s)}}function k(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 rt=typeof Object.create=="function"?Object.create:function(s){function X(){}return X.prototype=s,new X},z;if(typeof Object.setPrototypeOf=="function")z=Object.setPrototypeOf;else{var st;t:{var Gt={a:!0},Vt={};try{Vt.__proto__=Gt,st=Vt.a;break t}catch{}st=!1}z=st?function(s,X){if(s.__proto__=X,s.__proto__!==X)throw new TypeError(s+" is not extensible");return s}:null}var dt=z;function ht(s,X){if(s.prototype=rt(X.prototype),s.prototype.constructor=s,dt)dt(s,X);else for(var R in X)if(R!="prototype")if(Object.defineProperties){var Y=Object.getOwnPropertyDescriptor(X,R);Y&&Object.defineProperty(s,R,Y)}else s[R]=X[R];s.ea=X.prototype}function Yt(){this.l=!1,this.i=null,this.h=void 0,this.g=1,this.s=this.m=0,this.j=null}function Ft(s){if(s.l)throw new TypeError("Generator is already running");s.l=!0}Yt.prototype.o=function(s){this.h=s};function Mt(s,X){s.j={U:X,V:!0},s.g=s.m||s.s}Yt.prototype.return=function(s){this.j={return:s},this.g=this.s};function _(s,X,R){return s.g=R,{value:X}}function Ae(s){this.g=new Yt,this.h=s}function un(s,X){Ft(s.g);var R=s.g.i;return R?We(s,"return"in R?R.return:function(Y){return{value:Y,done:!0}},X,s.g.return):(s.g.return(X),Dt(s))}function We(s,X,R,Y){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(K){return s.g.i=null,Mt(s.g,K),Dt(s)}return s.g.i=null,Y.call(s.g,A),Dt(s)}function Dt(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,Mt(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 Mn(s){this.next=function(X){return Ft(s.g),s.g.i?X=We(s,s.g.i.next,X,s.g.o):(s.g.o(X),X=Dt(s)),X},this.throw=function(X){return Ft(s.g),s.g.i?X=We(s,s.g.i.throw,X,s.g.o):(Mt(s.g,X),X=Dt(s)),X},this.return=function(X){return un(s,X)},this[Symbol.iterator]=function(){return this}}function ae(s){function X(Y){return s.next(Y)}function R(Y){return s.throw(Y)}return new Promise(function(Y,N){function A(K){K.done?Y(K.value):Promise.resolve(K.value).then(X,R).then(A,N)}A(s.next())})}function gt(s){return ae(new Mn(new Ae(s)))}S("Promise",function(s){function X(K){this.h=0,this.i=void 0,this.g=[],this.o=!1;var nt=this.j();try{K(nt.resolve,nt.reject)}catch(q){nt.reject(q)}}function R(){this.g=null}function Y(K){return K instanceof X?K:new X(function(nt){nt(K)})}if(s)return s;R.prototype.h=function(K){if(this.g==null){this.g=[];var nt=this;this.i(function(){nt.l()})}this.g.push(K)};var N=y.setTimeout;R.prototype.i=function(K){N(K,0)},R.prototype.l=function(){for(;this.g&&this.g.length;){var K=this.g;this.g=[];for(var nt=0;nt<K.length;++nt){var q=K[nt];K[nt]=null;try{q()}catch(yt){this.j(yt)}}}this.g=null},R.prototype.j=function(K){this.i(function(){throw K})},X.prototype.j=function(){function K(yt){return function(Xt){q||(q=!0,yt.call(nt,Xt))}}var nt=this,q=!1;return{resolve:K(this.C),reject:K(this.l)}},X.prototype.C=function(K){if(K===this)this.l(new TypeError("A Promise cannot resolve to itself"));else if(K instanceof X)this.F(K);else{t:switch(typeof K){case"object":var nt=K!=null;break t;case"function":nt=!0;break t;default:nt=!1}nt?this.v(K):this.m(K)}},X.prototype.v=function(K){var nt=void 0;try{nt=K.then}catch(q){this.l(q);return}typeof nt=="function"?this.G(nt,K):this.m(K)},X.prototype.l=function(K){this.s(2,K)},X.prototype.m=function(K){this.s(1,K)},X.prototype.s=function(K,nt){if(this.h!=0)throw Error("Cannot settle("+K+", "+nt+"): Promise already settled in state"+this.h);this.h=K,this.i=nt,this.h===2&&this.D(),this.A()},X.prototype.D=function(){var K=this;N(function(){if(K.B()){var nt=y.console;typeof nt!="undefined"&&nt.error(K.i)}},1)},X.prototype.B=function(){if(this.o)return!1;var K=y.CustomEvent,nt=y.Event,q=y.dispatchEvent;return typeof q=="undefined"?!0:(typeof K=="function"?K=new K("unhandledrejection",{cancelable:!0}):typeof nt=="function"?K=new nt("unhandledrejection",{cancelable:!0}):(K=y.document.createEvent("CustomEvent"),K.initCustomEvent("unhandledrejection",!1,!0,K)),K.promise=this,K.reason=this.i,q(K))},X.prototype.A=function(){if(this.g!=null){for(var K=0;K<this.g.length;++K)A.h(this.g[K]);this.g=null}};var A=new R;return X.prototype.F=function(K){var nt=this.j();K.J(nt.resolve,nt.reject)},X.prototype.G=function(K,nt){var q=this.j();try{K.call(nt,q.resolve,q.reject)}catch(yt){q.reject(yt)}},X.prototype.then=function(K,nt){function q(It,ft){return typeof It=="function"?function(Wt){try{yt(It(Wt))}catch(St){Xt(St)}}:ft}var yt,Xt,Kt=new X(function(It,ft){yt=It,Xt=ft});return this.J(q(K,yt),q(nt,Xt)),Kt},X.prototype.catch=function(K){return this.then(void 0,K)},X.prototype.J=function(K,nt){function q(){switch(yt.h){case 1:K(yt.i);break;case 2:nt(yt.i);break;default:throw Error("Unexpected state: "+yt.h)}}var yt=this;this.g==null?A.h(q):this.g.push(q),this.o=!0},X.resolve=Y,X.reject=function(K){return new X(function(nt,q){q(K)})},X.race=function(K){return new X(function(nt,q){for(var yt=T(K),Xt=yt.next();!Xt.done;Xt=yt.next())Y(Xt.value).J(nt,q)})},X.all=function(K){var nt=T(K),q=nt.next();return q.done?Y([]):new X(function(yt,Xt){function Kt(Wt){return function(St){It[Wt]=St,ft--,ft==0&&yt(It)}}var It=[],ft=0;do It.push(void 0),ft++,Y(q.value).J(Kt(It.length-1),Xt),q=nt.next();while(!q.done)})},X});function fn(s,X){s instanceof String&&(s+="");var R=0,Y=!1,N={next:function(){if(!Y&&R<s.length){var A=R++;return{value:X(A,s[A]),done:!1}}return Y=!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 Y=arguments[R];if(Y)for(var N in Y)Object.prototype.hasOwnProperty.call(Y,N)&&(s[N]=Y[N])}return s};S("Object.assign",function(s){return s||An}),S("Object.is",function(s){return s||function(X,R){return X===R?X!==0||1/X===1/R:X!==X&&R!==R}}),S("Array.prototype.includes",function(s){return s||function(X,R){var Y=this;Y instanceof String&&(Y=String(Y));var N=Y.length;for(R=R||0,0>R&&(R=Math.max(R+N,0));R<N;R++){var A=Y[R];if(A===X||Object.is(A,X))return!0}return!1}}),S("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}}),S("Array.prototype.keys",function(s){return s||function(){return fn(this,function(X){return X})}});var Ve=this||self;function Nt(s,X){s=s.split(".");var R=Ve;s[0]in R||typeof R.execScript=="undefined"||R.execScript("var "+s[0]);for(var Y;s.length&&(Y=s.shift());)s.length||X===void 0?R[Y]&&R[Y]!==Object.prototype[Y]?R=R[Y]:R=R[Y]={}:R[Y]=X}function Le(s){Ve.setTimeout(function(){throw s},0)}function nn(s){Le(s)}function Gn(s,X){nn(Error("Invalid wire type: "+s+" (at position "+X+")"))}function wn(){nn(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 Cn,cn=typeof TextDecoder!="undefined",mn,Jn=typeof TextEncoder!="undefined";function Fn(s){if(Jn)s=(mn||(mn=new TextEncoder)).encode(s);else{var X=void 0;X=X===void 0?!1:X;for(var R=0,Y=new Uint8Array(3*s.length),N=0;N<s.length;N++){var A=s.charCodeAt(N);if(128>A)Y[R++]=A;else{if(2048>A)Y[R++]=A>>6|192;else{if(55296<=A&&57343>=A){if(56319>=A&&N<s.length){var K=s.charCodeAt(++N);if(56320<=K&&57343>=K){A=1024*(A-55296)+K-56320+65536,Y[R++]=A>>18|240,Y[R++]=A>>12&63|128,Y[R++]=A>>6&63|128,Y[R++]=A&63|128;continue}else N--}if(X)throw Error("Found an unpaired surrogate");A=65533}Y[R++]=A>>12|224,Y[R++]=A>>6&63|128}Y[R++]=A&63|128}}s=Y.subarray(0,R)}return s}var je={},Be=null;function xn(s){var X;X===void 0&&(X=0),Se(),X=je[X];for(var R=Array(Math.floor(s.length/3)),Y=X[64]||"",N=0,A=0;N<s.length-2;N+=3){var K=s[N],nt=s[N+1],q=s[N+2],yt=X[K>>2];K=X[(K&3)<<4|nt>>4],nt=X[(nt&15)<<2|q>>6],q=X[q&63],R[A++]=yt+K+nt+q}switch(yt=0,q=Y,s.length-N){case 2:yt=s[N+1],q=X[(yt&15)<<2]||Y;case 1:s=s[N],R[A]=X[s>>2]+X[(s&3)<<4|yt>>4]+q+Y}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 Y=new Uint8Array(R),N=0;return de(s,function(A){Y[N++]=A}),Y.subarray(0,N)}function de(s,X){function R(q){for(;Y<s.length;){var yt=s.charAt(Y++),Xt=Be[yt];if(Xt!=null)return Xt;if(!/^[\s\xa0]*$/.test(yt))throw Error("Unknown base64 encoding at char: "+yt)}return q}Se();for(var Y=0;;){var N=R(-1),A=R(0),K=R(64),nt=R(64);if(nt===64&&N===-1)break;X(N<<2|A>>4),K!=64&&(X(A<<4&240|K>>2),nt!=64&&X(K<<6&192|nt))}}function Se(){if(!Be){Be={};for(var s="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789".split(""),X=["+/=","+/","-_=","-_.","-_"],R=0;5>R;R++){var Y=s.concat(X[R].split(""));je[R]=Y;for(var N=0;N<Y.length;N++){var A=Y[N];Be[A]===void 0&&(Be[A]=N)}}}}var ze=typeof Uint8Array=="function",ee;function Xe(s){if(this.g=s,s!==null&&s.length===0)throw Error("ByteString should be constructed with non-empty values")}Xe.prototype.toJSON=function(){if(this.g==null)var s="";else s=this.g,s=this.g=s==null||typeof s=="string"?s:ze&&s instanceof Uint8Array?xn(s):null;return s};var rn=typeof Uint8Array.prototype.slice=="function";function Ue(s,X,R){return X===R?ee||(ee=new Uint8Array(0)):rn?s.slice(X,R):new Uint8Array(s.subarray(X,R))}var _t=0,ge=0;function He(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===Xe){if(s.g==null)var X=ee||(ee=new Uint8Array(0));else{X=Uint8Array;var R=s.g;R=R==null||ze&&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 Bt(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=He(X),s.l=0,s.i=s.h.length,s.g=s.l}Bt.prototype.reset=function(){this.g=this.l};function jt(s){s.g>s.i&&(s.j=!0,nn(Error("Tried to read past the end of the data "+s.g+" > "+s.i)))}function be(s){var X=s.h,R=X[s.g],Y=R&127;return 128>R?(s.g+=1,jt(s),Y):(R=X[s.g+1],Y|=(R&127)<<7,128>R?(s.g+=2,jt(s),Y):(R=X[s.g+2],Y|=(R&127)<<14,128>R?(s.g+=3,jt(s),Y):(R=X[s.g+3],Y|=(R&127)<<21,128>R?(s.g+=4,jt(s),Y):(R=X[s.g+4],Y|=(R&15)<<28,128>R?(s.g+=5,jt(s),Y>>>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,wn(),Y):(jt(s),Y))))))}var Te=[];function Qe(){this.g=new Uint8Array(64),this.h=0}function Ge(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,Ue(s,0,X)};function zt(s,X){for(;127<X;)Ge(s,X&127|128),X>>>=7;Ge(s,X)}function Me(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,Te.length?(R=Te.pop(),X&&(R.u=X.u),s&&xe(R,s),s=R):s=new Bt(s,X),this.g=s,this.l=this.g.g,this.h=this.i=-1,this.j=!1}Me.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=be(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,wn()}break;case 1:s=s.g,s.g+=8,jt(s);break;case 2:s.h!=2?Ie(s):(X=be(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,nn(Error("Unmatched start-group tag: stream EOF"));break}if(s.h==4){s.i!=X&&(s.j=!0,nn(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=Ue(s.g.h,R,s.g.g),(R=X.m)?R.push(s):X.m=[s])}var on=[];function Oe(){this.h=[],this.i=0,this.g=new Qe}function sn(s,X){X.length!==0&&(s.h.push(X),s.i+=X.length)}function Ze(s,X,R){zt(s.g,8*X+2),zt(s.g,R.length),sn(s,s.g.end()),sn(s,R)}var Ye=typeof Symbol=="function"&&typeof Symbol()=="symbol"?Symbol(void 0):void 0;function ve(s,X){Object.isFrozen(s)||(Ye?s[Ye]|=X:s.g!==void 0?s.g|=X:Object.defineProperties(s,{g:{value:X,configurable:!0,writable:!0,enumerable:!1}}))}function ne(s){if(!s)return 0;var X;return Ye?X=s[Ye]:X=s.g,X==null?0:X}function _e(s){return Array.isArray(s)&&ve(s,1),s}function qt(s){if(!Array.isArray(s))throw Error("cannot mark non-array as immutable");ve(s,2)}function Pt(s){return s!==null&&typeof s=="object"&&s.constructor===Object}function an(s){switch(typeof s){case"number":return isFinite(s)?s:String(s);case"object":return ze&&s!=null&&s instanceof Uint8Array?xn(s):s;default:return s}}function he(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),Y=0;Y<s.length;Y++)R[Y]=he(s[Y],X);return ne(s)&1&&_e(R),R}R={};for(Y in s)R[Y]=he(s[Y],X);return R}var Rt;function re(s,X,R){var Y=Rt;Rt=null,s||(s=Y),Y=this.constructor.ca,s||(s=Y?[Y]:[]),this.j=(Y?0:-1)-(this.constructor.aa||0),this.i=null,this.g=s;t:{if(Y=this.g.length,s=Y-1,Y&&(Y=this.g[s],Pt(Y))){this.l=s-this.j,this.h=Y;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,(Y=this.g[s])?_e(Y):this.g[s]=we):(te(this),(Y=this.h[s])?_e(Y):this.h[s]=we)}var we=Object.freeze(_e([]));function te(s){var X=s.l+s.j;s.g[X]||(s.h=s.g[X]={})}function ie(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 et(s,X,R){R=R===void 0?!0:R;var Y=Y===void 0?!1:Y,N=ie(s,X,Y);return N==null&&(N=we),N===we?(N=_e([]),at(s,X,N,Y)):R&&Array.isArray(N)&&ne(N)&2&&(N=N.slice(),at(s,X,N,Y)),N}function ot(s,X,R){return s=ie(s,X),s=s==null?s:+s,s==null?R===void 0?0:R:s}function at(s,X,R,Y){(Y===void 0?0:Y)||X>=s.l?(te(s),s.h[X]=R):s.g[X+s.j]=R}function Ot(s,X,R){s.i||(s.i={});var Y=s.i[R];if(!Y){var N=et(s,R,!1);Y=[];for(var A=Array.isArray(N)?!!(ne(N)&2):!1,K=0;K<N.length;K++)Y[K]=new X(N[K]),A&&qt(Y[K].g);A&&(qt(Y),Object.freeze(Y)),s.i[R]=Y}return Y}function ce(s,X,R,Y,N){var A=Ot(s,Y,X);R=R||new Y,s=et(s,X),N!=null?(A.splice(N,0,R),s.splice(N,0,le(R))):(A.push(R),s.push(le(R)))}re.prototype.toJSON=function(){var s=le(this);return Ct(s,an)};function le(s){if(s.i)for(var X in s.i){var R=s.i[X];if(Array.isArray(R))for(var Y=0;Y<R.length;Y++)R[Y]&&le(R[Y]);else R&&le(R)}return s.g}re.prototype.toString=function(){return le(this).toString()};function Lt(s,X){return s=ie(s,X),s==null?0:s}function fe(s,X){return s=ie(s,X),s==null?"":s}function Ce(s,X){if(s=s.m){sn(X,X.g.end());for(var R=0;R<s.length;R++)sn(X,s[R])}}function De(s){var X=s[0];switch(s.length){case 2:var R=s[1];return function(q,yt,Xt){return X(q,yt,Xt,R)};case 3:var Y=s[1],N=s[2];return function(q,yt,Xt){return X(q,yt,Xt,Y,N)};case 4:var A=s[1],K=s[2],nt=s[3];return function(q,yt,Xt){return X(q,yt,Xt,A,K,nt)};default:throw Error("unsupported number of parameters, expected [2-4], got "+s.length)}}function $e(s,X,R){for(;Pe(X)&&X.h!=4;){var Y=X.i,N=R[Y];if(N){if(Array.isArray(N)&&(N=R[Y]=De(N)),!N(X,s,Y)){Y=X,N=s;var A=Y.l;Ie(Y),Wn(Y,N,A)}}else Y=X,N=s,A=Y.l,Ie(Y),Wn(Y,N,A)}return s}function dn(s,X){var R=new Oe;if(X(s,R),s=R.i+R.g.length(),s===0)R=new Uint8Array(0);else{s=new Uint8Array(s);for(var Y=R.h,N=Y.length,A=X=0;A<N;A++){var K=Y[A];K.length!==0&&(s.set(K,X),X+=K.length)}Y=R.g,N=Y.h,N!==0&&(s.set(Y.g.subarray(0,N),X),Y.h=0),R.h=[s],R=s}return R}function pn(s,X,R){if(on.length){var Y=on.pop();s&&(xe(Y.g,s),Y.i=-1,Y.h=-1),s=Y}else s=new Me(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>on.length&&on.push(s)}}function Fe(s,X,R){if(X=ie(X,R),X!=null){zt(s.g,8*R+5),s=s.g;var Y=X;Y=(R=0>Y?1:0)?-Y:Y,Y===0?0<1/Y?_t=ge=0:(ge=0,_t=2147483648):isNaN(Y)?(ge=0,_t=2147483647):34028234663852886e22<Y?(ge=0,_t=(R<<31|2139095040)>>>0):11754943508222875e-54>Y?(Y=Math.round(Y/Math.pow(2,-149)),ge=0,_t=(R<<31|Y)>>>0):(X=Math.floor(Math.log(Y)/Math.LN2),Y*=Math.pow(2,-X),Y=Math.round(8388608*Y),16777216<=Y&&++X,ge=0,_t=(R<<31|X+127<<23|Y&8388607)>>>0),R=_t,Ge(s,R>>>0&255),Ge(s,R>>>8&255),Ge(s,R>>>16&255),Ge(s,R>>>24&255)}}function qe(s,X,R){if(s.h!==5)return!1;s=s.g;var Y=s.h[s.g],N=s.h[s.g+1],A=s.h[s.g+2],K=s.h[s.g+3];return s.g+=4,jt(s),N=(Y<<0|N<<8|A<<16|K<<24)>>>0,s=2*(N>>31)+1,Y=N>>>23&255,N&=8388607,at(X,R,Y==255?N?NaN:1/0*s:Y==0?s*Math.pow(2,-149)*N:s*Math.pow(2,Y-150)*(N+Math.pow(2,23))),!0}function jn(s,X,R){if(s.h!==0)return!1;for(var Y=s.g,N=128,A=0,K=s=0;4>K&&128<=N;K++)N=Y.h[Y.g++],A|=(N&127)<<7*K;if(128<=N&&(N=Y.h[Y.g++],A|=(N&127)<<28,s|=(N&127)>>4),128<=N)for(K=0;5>K&&128<=N;K++)N=Y.h[Y.g++],s|=(N&127)<<7*K+3;return 128>N?(Y=A>>>0,N=s>>>0,(s=N&2147483648)&&(Y=~Y+1>>>0,N=~N>>>0,Y==0&&(N=N+1>>>0)),Y=4294967296*N+(Y>>>0),s=s?-Y:Y):(Y.j=!0,wn(),s=void 0),at(X,R,s),!0}function tn(s,X,R){return s.h!==0?!1:(at(X,R,be(s.g)),!0)}function Ne(s,X,R){if(s.h!==2)return!1;var Y=be(s.g);s=s.g;var N=s.g;s.g+=Y,jt(s),s=s.h;var A;if(cn)(A=Cn)||(A=Cn=new TextDecoder("utf-8",{fatal:!1})),A=A.decode(s.subarray(N,N+Y));else{Y=N+Y;for(var K=[],nt=null,q,yt,Xt;N<Y;)q=s[N++],128>q?K.push(q):224>q?N>=Y?K.push(65533):(yt=s[N++],194>q||(yt&192)!==128?(N--,K.push(65533)):K.push((q&31)<<6|yt&63)):240>q?N>=Y-1?K.push(65533):(yt=s[N++],(yt&192)!==128||q===224&&160>yt||q===237&&160<=yt||((A=s[N++])&192)!==128?(N--,K.push(65533)):K.push((q&15)<<12|(yt&63)<<6|A&63)):244>=q?N>=Y-2?K.push(65533):(yt=s[N++],(yt&192)!==128||(q<<28)+(yt-144)>>30!==0||((A=s[N++])&192)!==128||((Xt=s[N++])&192)!==128?(N--,K.push(65533)):(q=(q&7)<<18|(yt&63)<<12|(A&63)<<6|Xt&63,q-=65536,K.push((q>>10&1023)+55296,(q&1023)+56320))):K.push(65533),8192<=K.length&&(nt=Rn(nt,K),K.length=0);A=Rn(nt,K)}return at(X,R,A),!0}function gn(s,X,R,Y,N){if(s.h!==2)return!1;var A=new Y,K=s.g.i,nt=be(s.g),q=s.g.g+nt;if(s.g.i=q,N(A,s),N=q-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=q,s.g.i=K,ce(X,R,A,Y,void 0),!0}function In(s){re.call(this,s)}var Ke;ht(In,re);function En(s,X){var R=ie(s,1);if(R!=null&&R!=null){zt(X.g,8);var Y=X.g;if(0<=R)zt(Y,R);else{for(var N=0;9>N;N++)Ge(Y,R&127|128),R>>=7;Ge(Y,1)}}Fe(X,s,2),Y=ie(s,3),Y!=null&&Ze(X,3,Fn(Y)),Y=ie(s,4),Y!=null&&Ze(X,4,Fn(Y)),Ce(s,X)}function en(s,X){return $e(s,X,Ke||(Ke={1:tn,2:qe,3:Ne,4:Ne}))}function Zn(s){re.call(this,s,-1,ln)}var Sn;ht(Zn,re),Zn.prototype.addClassification=function(s,X){return ce(this,1,s,In,X),this};function Kn(s,X){return $e(s,X,Sn||(Sn={1:[gn,In,en]}))}var ln=[1];function Ln(s){re.call(this,s)}var _n;ht(Ln,re);function Qn(s,X){Fe(X,s,1),Fe(X,s,2),Fe(X,s,3),Fe(X,s,4),Fe(X,s,5),Ce(s,X)}function Tn(s,X){return $e(s,X,_n||(_n={1:qe,2:qe,3:qe,4:qe,5:qe}))}function Hn(s){re.call(this,s,-1,V)}var m;ht(Hn,re);function W(s,X){return $e(s,X,m||(m={1:[gn,Ln,Tn]}))}var V=[1];function E(s){re.call(this,s)}var O;ht(E,re);function lt(s,X){Fe(X,s,1),Fe(X,s,2),Fe(X,s,3),Fe(X,s,4),Fe(X,s,5);var R=ie(s,6);if(R!=null&&R!=null){zt(X.g,48);var Y=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))),_t=A,ge=N,R=_t,A=ge;0<A||127<R;)Ge(Y,R&127|128),R=(R>>>7|A<<25)>>>0,A>>>=7;Ge(Y,R)}Ce(s,X)}function P(s,X){return $e(s,X,O||(O={1:qe,2:qe,3:qe,4:qe,5:qe,6:jn}))}function it(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
|
+
`+a.getProgramInfoLog(w));b=t.m=w,a.useProgram(b),I=a.getUniformLocation(b,"sampler0"),t.j={J:a.getAttribLocation(b,"aVertex"),I:a.getAttribLocation(b,"aTex"),ja:I},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(I,0)}b=t.j,a.useProgram(t.m),a.canvas.width=u.width,a.canvas.height=u.height,a.viewport(0,0,u.width,u.height),a.activeTexture(a.TEXTURE0),t.h.bindTexture2d(u.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,u){return u+t}function It(t,u){window[t]=u}function ft(t){var u=document.createElement("script");return u.setAttribute("src",t),u.setAttribute("crossorigin","anonymous"),new Promise(function(a){u.addEventListener("load",function(){a()},!1),u.addEventListener("error",function(){a()},!1),document.body.appendChild(u)})}function Wt(){return gt(function(t){switch(t.g){case 1:return t.m=2,_(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 St(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 u=window.location.pathname.toString().substring(0,window.location.pathname.toString().lastIndexOf("/"))+"/";else if(typeof location!="undefined")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.T=u,t.options){u=L(Object.keys(t.options));for(var a=u.next();!a.done;a=u.next()){a=a.value;var b=t.options[a].default;b!==void 0&&(this.j[a]=typeof b=="function"?b():b)}}}i=St.prototype,i.close=function(){return this.i&&this.i.delete(),Promise.resolve()};function wt(t){var u,a,b,I,w,H,U,j,D,$,ut;return gt(function(mt){switch(mt.g){case 1:return t.S?(u=t.g.files===void 0?[]:typeof t.g.files=="function"?t.g.files(t.j):t.g.files,_(mt,Wt(),2)):mt.return();case 2:if(a=mt.h,typeof window=="object")return It("createMediapipeSolutionsWasm",{locateFile:t.locateFile}),It("createMediapipeSolutionsPackedAssets",{locateFile:t.locateFile}),H=u.filter(function(pt){return pt.data!==void 0}),U=u.filter(function(pt){return pt.data===void 0}),j=Promise.all(H.map(function(pt){var vt=v(t,pt.url);if(pt.path!==void 0){var Zt=pt.path;vt=vt.then(function(At){return t.overrideFile(Zt,At),Promise.resolve(At)})}return vt})),D=Promise.all(U.map(function(pt){return pt.simd===void 0||pt.simd&&a||!pt.simd&&!a?ft(t.locateFile(pt.url,t.T)):Promise.resolve()})).then(function(){var pt,vt,Zt;return gt(function(At){if(At.g==1)return pt=window.createMediapipeSolutionsWasm,vt=window.createMediapipeSolutionsPackedAssets,Zt=t,_(At,pt(vt),2);Zt.h=At.h,At.g=0})}),$=function(){return gt(function(pt){return t.g.graph&&t.g.graph.url?pt=_(pt,v(t,t.g.graph.url),0):(pt.g=0,pt=void 0),pt})}(),_(mt,Promise.all([D,j,$]),7);if(typeof importScripts!="function")throw Error("solutions can only be loaded on a web page or in a web worker");return b=u.filter(function(pt){return pt.simd===void 0||pt.simd&&a||!pt.simd&&!a}).map(function(pt){return t.locateFile(pt.url,t.T)}),importScripts.apply(null,J(b)),I=t,_(mt,createMediapipeSolutionsWasm(Module),6);case 6:I.h=mt.h,t.l=new OffscreenCanvas(1,1),t.h.canvas=t.l,w=t.h.GL.createContext(t.l,{antialias:!1,alpha:!1,ga:typeof WebGL2RenderingContext!="undefined"?2:1}),t.h.GL.makeContextCurrent(w),mt.g=4;break;case 7:if(t.l=document.createElement("canvas"),ut=t.l.getContext("webgl2",{}),!ut&&(ut=t.l.getContext("webgl",{}),!ut))return alert("Failed to create WebGL canvas context when passing video frame."),mt.return();t.F=ut,t.h.canvas=t.l,t.h.createContext(t.l,!0,!0,{});case 4:t.i=new t.h.SolutionWasm,t.S=!1,mt.g=0}})}function Ht(t){var u,a,b,I,w,H,U,j;return gt(function(D){if(D.g==1){if(t.g.graph&&t.g.graph.url&&t.R===t.g.graph.url)return D.return();if(t.o=!0,!t.g.graph||!t.g.graph.url){D.g=2;return}return t.R=t.g.graph.url,_(D,v(t,t.g.graph.url),3)}for(D.g!=2&&(u=D.h,t.i.loadGraph(u)),a=L(Object.keys(t.C)),b=a.next();!b.done;b=a.next())I=b.value,t.i.overrideFile(I,t.C[I]);if(t.C={},t.g.listeners)for(w=L(t.g.listeners),H=w.next();!H.done;H=w.next())U=H.value,E(t,U);j=t.j,t.j={},t.setOptions(j),D.g=0})}i.reset=function(){var t=this;return gt(function(u){t.i&&(t.i.reset(),t.m={},t.s={}),u.g=0})},i.setOptions=function(t,u){var a=this;if(u=u||this.g.options){for(var b=[],I=[],w={},H=L(Object.keys(t)),U=H.next();!U.done;w={L:w.L,M:w.M},U=H.next()){var j=U.value;j in this.j&&this.j[j]===t[j]||(this.j[j]=t[j],U=u[j],U!==void 0&&(U.onChange&&(w.L=U.onChange,w.M=t[j],b.push(function(D){return function(){var $;return gt(function(ut){if(ut.g==1)return _(ut,D.L(D.M),2);$=ut.h,$===!0&&(a.o=!0),ut.g=0})}}(w))),U.graphOptionXref&&(j={valueNumber:U.type===1?t[j]:0,valueBoolean:U.type===0?t[j]:!1,valueString:U.type===2?t[j]:""},U=Object.assign(Object.assign(Object.assign({},{calculatorName:"",calculatorIndex:0}),U.graphOptionXref),j),I.push(U))))}(b.length!==0||I.length!==0)&&(this.o=!0,this.B=(this.B===void 0?[]:this.B).concat(I),this.A=(this.A===void 0?[]:this.A).concat(b))}};function l(t){var u,a,b,I,w,H,U;return gt(function(j){switch(j.g){case 1:if(!t.o)return j.return();if(!t.A){j.g=2;break}u=L(t.A),a=u.next();case 3:if(a.done){j.g=5;break}return b=a.value,_(j,b(),4);case 4:a=u.next(),j.g=3;break;case 5:t.A=void 0;case 2:if(t.B){for(I=new t.h.GraphOptionChangeRequestList,w=L(t.B),H=w.next();!H.done;H=w.next())U=H.value,I.push_back(U);t.i.changeOptions(I),I.delete(),t.B=void 0}t.o=!1,j.g=0}})}i.initialize=function(){var t=this;return gt(function(u){return u.g==1?_(u,wt(t),2):u.g!=3?_(u,Ht(t),3):_(u,l(t),0)})};function v(t,u){var a,b;return gt(function(I){return u in t.G?I.return(t.G[u]):(a=t.locateFile(u,""),b=fetch(a).then(function(w){return w.arrayBuffer()}),t.G[u]=b,I.return(b))})}i.overrideFile=function(t,u){this.i?this.i.overrideFile(t,u):this.C[t]=u},i.clearOverriddenFiles=function(){this.C={},this.i&&this.i.clearOverriddenFiles()},i.send=function(t,u){var a=this,b,I,w,H,U,j,D,$,ut;return gt(function(mt){switch(mt.g){case 1:return a.g.inputs?(b=1e3*(u==null?performance.now():u),_(mt,a.D,2)):mt.return();case 2:return _(mt,a.initialize(),3);case 3:for(I=new a.h.PacketDataList,w=L(Object.keys(t)),H=w.next();!H.done;H=w.next())if(U=H.value,j=a.g.inputs[U]){t:{var pt=t[U];switch(j.type){case"video":var vt=a.m[j.stream];if(vt||(vt=new K(a.h,a.F),a.m[j.stream]=vt),vt.l===0&&(vt.l=vt.h.createTexture()),typeof HTMLVideoElement!="undefined"&&pt instanceof HTMLVideoElement)var Zt=pt.videoWidth,At=pt.videoHeight;else typeof HTMLImageElement!="undefined"&&pt instanceof HTMLImageElement?(Zt=pt.naturalWidth,At=pt.naturalHeight):(Zt=pt.width,At=pt.height);At={glName:vt.l,width:Zt,height:At},Zt=vt.g,Zt.canvas.width=At.width,Zt.canvas.height=At.height,Zt.activeTexture(Zt.TEXTURE0),vt.h.bindTexture2d(vt.l),Zt.texImage2D(Zt.TEXTURE_2D,0,Zt.RGBA,Zt.RGBA,Zt.UNSIGNED_BYTE,pt),vt.h.bindTexture2d(0),vt=At;break t;case"detections":for(vt=a.m[j.stream],vt||(vt=new yt(a.h),a.m[j.stream]=vt),vt.data||(vt.data=new vt.g.DetectionListData),vt.data.reset(pt.length),At=0;At<pt.length;++At){Zt=pt[At];var oe=vt.data,se=oe.setBoundingBox,ke=At,Vn=Zt.U,Je=new kt;if(at(Je,1,Vn.aa),at(Je,2,Vn.ba),at(Je,3,Vn.height),at(Je,4,Vn.width),at(Je,5,Vn.rotation),at(Je,6,Vn.Z),Vn=gn(Je,Jt),se.call(oe,ke,Vn),Zt.P)for(oe=0;oe<Zt.P.length;++oe){Je=Zt.P[oe];var Nn=!!Je.visibility;se=vt.data,ke=se.addNormalizedLandmark,Vn=At,Je=Object.assign(Object.assign({},Je),{visibility:Nn?Je.visibility:0}),Nn=new it,at(Nn,1,Je.x),at(Nn,2,Je.y),at(Nn,3,Je.z),Je.visibility&&at(Nn,4,Je.visibility),Je=gn(Nn,xt),ke.call(se,Vn,Je)}if(Zt.N)for(oe=0;oe<Zt.N.length;++oe)se=vt.data,ke=se.addClassification,Vn=At,Je=Zt.N[oe],Nn=new W,at(Nn,2,Je.$),Je.index&&at(Nn,1,Je.index),Je.label&&at(Nn,3,Je.label),Je.displayName&&at(Nn,4,Je.displayName),Je=gn(Nn,k),ke.call(se,Vn,Je)}vt=vt.data;break t;default:vt={}}}switch(D=vt,$=j.stream,j.type){case"video":I.pushTexture2d(Object.assign(Object.assign({},D),{stream:$,timestamp:b}));break;case"detections":ut=D,ut.stream=$,ut.timestamp=b,I.pushDetectionList(ut);break;default:throw Error("Unknown input config type: '"+j.type+"'")}}return a.i.send(I),_(mt,a.D,4);case 4:I.delete(),mt.g=0}})};function x(t,u,a){var b,I,w,H,U,j,D,$,ut,mt,pt,vt,Zt,At;return gt(function(oe){switch(oe.g){case 1:if(!a)return oe.return(u);for(b={},I=0,w=L(Object.keys(a)),H=w.next();!H.done;H=w.next())U=H.value,j=a[U],typeof j!="string"&&j.type==="texture"&&u[j.stream]!==void 0&&++I;1<I&&(t.H=!1),D=L(Object.keys(a)),H=D.next();case 2:if(H.done){oe.g=4;break}if($=H.value,ut=a[$],typeof ut=="string")return Zt=b,At=$,_(oe,T(t,$,u[ut]),14);if(mt=u[ut.stream],ut.type==="detection_list"){if(mt){for(var se=mt.getRectList(),ke=mt.getLandmarksList(),Vn=mt.getClassificationsList(),Je=[],Nn=0;Nn<se.size();++Nn){var pr=In(se.get(Nn),kt,Lt);pr={U:{aa:ot(pr,1),ba:ot(pr,2),height:ot(pr,3),width:ot(pr,4),rotation:ot(pr,5,0),Z:fe(pr,6)},P:le(In(ke.get(Nn),Ut,Et),it,1).map(A),N:N(In(Vn.get(Nn),O,lt))},Je.push(pr)}se=Je}else se=[];b[$]=se,oe.g=7;break}if(ut.type==="proto_list"){if(mt){for(se=Array(mt.size()),ke=0;ke<mt.size();ke++)se[ke]=mt.get(ke);mt.delete()}else se=[];b[$]=se,oe.g=7;break}if(mt===void 0){oe.g=3;break}if(ut.type==="float_list"){b[$]=mt,oe.g=7;break}if(ut.type==="proto"){b[$]=mt,oe.g=7;break}if(ut.type!=="texture")throw Error("Unknown output config type: '"+ut.type+"'");return pt=t.s[$],pt||(pt=new K(t.h,t.F),t.s[$]=pt),_(oe,nt(pt,mt,t.H),13);case 13:vt=oe.h,b[$]=vt;case 7:ut.transform&&b[$]&&(b[$]=ut.transform(b[$])),oe.g=3;break;case 14:Zt[At]=oe.h;case 3:H=D.next(),oe.g=2;break;case 4:return oe.return(b)}})}function T(t,u,a){var b;return gt(function(I){return typeof a=="number"||a instanceof Uint8Array||a instanceof t.h.Uint8BlobList?I.return(a):a instanceof t.h.Texture2dDataOut?(b=t.s[u],b||(b=new K(t.h,t.F),t.s[u]=b),I.return(nt(b,a,t.H))):I.return(void 0)})}function E(t,u){for(var a=u.name||"$",b=[].concat(J(u.wants)),I=new t.h.StringList,w=L(u.wants),H=w.next();!H.done;H=w.next())I.push_back(H.value);w=t.h.PacketListener.implement({onResults:function(U){for(var j={},D=0;D<u.wants.length;++D)j[b[D]]=U.get(D);var $=t.listeners[a];$&&(t.D=x(t,j,u.outs).then(function(ut){ut=$(ut);for(var mt=0;mt<u.wants.length;++mt){var pt=j[b[mt]];typeof pt=="object"&&pt.hasOwnProperty&&pt.hasOwnProperty("delete")&&pt.delete()}ut&&(t.D=ut)}))}}),t.i.attachMultiListener(I,w),I.delete()}i.onResults=function(t,u){this.listeners[u||"$"]=t},Nt("Solution",St),Nt("OptionType",{BOOL:0,NUMBER:1,ca:2,0:"BOOL",1:"NUMBER",2:"STRING"});function r(t){var u=fe(t,1),a=ce(t,h,3);return a={x:ot(a,1),y:ot(a,2),depth:ot(a,3)},t=ce(t,G,2),{id:u,point2d:a,point3d:{x:ot(t,1),y:ot(t,2),z:ot(t,3)}}}function d(t){var u=In(t,s,X);t=[],u=le(u,B,2);for(var a=0;a<u.length;a++)t.push({id:fe(u[a],1),keypoints:le(u[a],M,2).map(r),visibility:ot(u[a],3),scale:et(u[a],6),translation:et(u[a],5),rotation:et(u[a],4)});return t}function Z(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 c={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 f(t){var u=this;t=t||{},this.g=new St({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,I,w,H;return gt(function(U){return U.g==1?(b=a,u.g.setOptions({allowedLabels:e(b)},c),I=Z(b),w="object_detection_3d.tflite",_(U,v(u.g,I),2)):(H=U.h,u.g.overrideFile(w,H),U.return(!0))})}},focalLength:{default:[1,1],onChange:function(a){var b;return gt(function(I){return b=a,u.h=b,u.g.setOptions({focalX:b[0],focalY:b[1]},c),I.return(!0)})}},principalPoint:{default:[0,0],onChange:function(a){var b;return gt(function(I){return b=a,u.i=b,u.g.setOptions({principalX:b[0],principalY:b[1]},c),I.return(!0)})}},imageSize:{onChange:function(a){var b,I,w,H;return gt(function(U){if(u.h===void 0||u.i===void 0)return console.error('"focalLength" and "principalPoint" must be set if setting image size'),U.return();b=a,I=[b[0]/2,b[1]/2],w=[u.h[0]/I[0],u.h[1]/I[1]],H=[u.i[0]/I[0],u.i[1]/I[1]],u.setOptions({focalLength:w,principalPoint:H}),U.g=0})}}}})}i=f.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 gt(function(u){return _(u,t.g.initialize(),0)})},i.reset=function(){this.g.reset()},i.send=function(t){var u=this;return gt(function(a){return _(a,u.g.send(t),0)})},i.setOptions=function(t){this.g.setOptions(t)},Nt("Objectron",f),Nt("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]]),Nt("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}),Nt("VERSION","0.4.1636596145")}).call(vi);const Gi={};(function(){var i;function n(s){var X=0;return function(){return X<s.length?{done:!1,value:s[X++]}:{done:!0}}}var o=typeof Object.defineProperties=="function"?Object.defineProperty:function(s,X,R){return s==Array.prototype||s==Object.prototype||(s[X]=R.value),s};function m(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 y=m(this);function S(s,X){if(X)t:{var R=y;s=s.split(".");for(var Y=0;Y<s.length-1;Y++){var N=s[Y];if(!(N in R))break t;R=R[N]}s=s[s.length-1],Y=R[s],X=X(Y),X!=Y&&X!=null&&o(R,s,{configurable:!0,writable:!0,value:X})}}S("Symbol",function(s){function X(A){if(this instanceof X)throw new TypeError("Symbol is not a constructor");return new R(Y+(A||"")+"_"+N++,A)}function R(A,K){this.g=A,o(this,"description",{configurable:!0,writable:!0,value:K})}if(s)return s;R.prototype.toString=function(){return this.g};var Y="jscomp_symbol_"+(1e9*Math.random()>>>0)+"_",N=0;return X}),S("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 Y=y[X[R]];typeof Y=="function"&&typeof Y.prototype[s]!="function"&&o(Y.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 L(s){var X=typeof Symbol!="undefined"&&Symbol.iterator&&s[Symbol.iterator];return X?X.call(s):{next:n(s)}}function J(s){if(!(s instanceof Array)){s=L(s);for(var X,R=[];!(X=s.next()).done;)R.push(X.value);s=R}return s}var rt=typeof Object.create=="function"?Object.create:function(s){function X(){}return X.prototype=s,new X},z;if(typeof Object.setPrototypeOf=="function")z=Object.setPrototypeOf;else{var st;t:{var Gt={a:!0},Vt={};try{Vt.__proto__=Gt,st=Vt.a;break t}catch{}st=!1}z=st?function(s,X){if(s.__proto__=X,s.__proto__!==X)throw new TypeError(s+" is not extensible");return s}:null}var dt=z;function ht(s,X){if(s.prototype=rt(X.prototype),s.prototype.constructor=s,dt)dt(s,X);else for(var R in X)if(R!="prototype")if(Object.defineProperties){var Y=Object.getOwnPropertyDescriptor(X,R);Y&&Object.defineProperty(s,R,Y)}else s[R]=X[R];s.ea=X.prototype}function Yt(){this.l=!1,this.i=null,this.h=void 0,this.g=1,this.s=this.m=0,this.j=null}function Ft(s){if(s.l)throw new TypeError("Generator is already running");s.l=!0}Yt.prototype.o=function(s){this.h=s};function Bt(s,X){s.j={U:X,V:!0},s.g=s.m||s.s}Yt.prototype.return=function(s){this.j={return:s},this.g=this.s};function _(s,X,R){return s.g=R,{value:X}}function Ae(s){this.g=new Yt,this.h=s}function cn(s,X){Ft(s.g);var R=s.g.i;return R?We(s,"return"in R?R.return:function(Y){return{value:Y,done:!0}},X,s.g.return):(s.g.return(X),Dt(s))}function We(s,X,R,Y){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(K){return s.g.i=null,Bt(s.g,K),Dt(s)}return s.g.i=null,Y.call(s.g,A),Dt(s)}function Dt(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,Bt(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 Bn(s){this.next=function(X){return Ft(s.g),s.g.i?X=We(s,s.g.i.next,X,s.g.o):(s.g.o(X),X=Dt(s)),X},this.throw=function(X){return Ft(s.g),s.g.i?X=We(s,s.g.i.throw,X,s.g.o):(Bt(s.g,X),X=Dt(s)),X},this.return=function(X){return cn(s,X)},this[Symbol.iterator]=function(){return this}}function ae(s){function X(Y){return s.next(Y)}function R(Y){return s.throw(Y)}return new Promise(function(Y,N){function A(K){K.done?Y(K.value):Promise.resolve(K.value).then(X,R).then(A,N)}A(s.next())})}function gt(s){return ae(new Bn(new Ae(s)))}S("Promise",function(s){function X(K){this.h=0,this.i=void 0,this.g=[],this.o=!1;var nt=this.j();try{K(nt.resolve,nt.reject)}catch(q){nt.reject(q)}}function R(){this.g=null}function Y(K){return K instanceof X?K:new X(function(nt){nt(K)})}if(s)return s;R.prototype.h=function(K){if(this.g==null){this.g=[];var nt=this;this.i(function(){nt.l()})}this.g.push(K)};var N=y.setTimeout;R.prototype.i=function(K){N(K,0)},R.prototype.l=function(){for(;this.g&&this.g.length;){var K=this.g;this.g=[];for(var nt=0;nt<K.length;++nt){var q=K[nt];K[nt]=null;try{q()}catch(yt){this.j(yt)}}}this.g=null},R.prototype.j=function(K){this.i(function(){throw K})},X.prototype.j=function(){function K(yt){return function(Xt){q||(q=!0,yt.call(nt,Xt))}}var nt=this,q=!1;return{resolve:K(this.C),reject:K(this.l)}},X.prototype.C=function(K){if(K===this)this.l(new TypeError("A Promise cannot resolve to itself"));else if(K instanceof X)this.F(K);else{t:switch(typeof K){case"object":var nt=K!=null;break t;case"function":nt=!0;break t;default:nt=!1}nt?this.v(K):this.m(K)}},X.prototype.v=function(K){var nt=void 0;try{nt=K.then}catch(q){this.l(q);return}typeof nt=="function"?this.G(nt,K):this.m(K)},X.prototype.l=function(K){this.s(2,K)},X.prototype.m=function(K){this.s(1,K)},X.prototype.s=function(K,nt){if(this.h!=0)throw Error("Cannot settle("+K+", "+nt+"): Promise already settled in state"+this.h);this.h=K,this.i=nt,this.h===2&&this.D(),this.A()},X.prototype.D=function(){var K=this;N(function(){if(K.B()){var nt=y.console;typeof nt!="undefined"&&nt.error(K.i)}},1)},X.prototype.B=function(){if(this.o)return!1;var K=y.CustomEvent,nt=y.Event,q=y.dispatchEvent;return typeof q=="undefined"?!0:(typeof K=="function"?K=new K("unhandledrejection",{cancelable:!0}):typeof nt=="function"?K=new nt("unhandledrejection",{cancelable:!0}):(K=y.document.createEvent("CustomEvent"),K.initCustomEvent("unhandledrejection",!1,!0,K)),K.promise=this,K.reason=this.i,q(K))},X.prototype.A=function(){if(this.g!=null){for(var K=0;K<this.g.length;++K)A.h(this.g[K]);this.g=null}};var A=new R;return X.prototype.F=function(K){var nt=this.j();K.J(nt.resolve,nt.reject)},X.prototype.G=function(K,nt){var q=this.j();try{K.call(nt,q.resolve,q.reject)}catch(yt){q.reject(yt)}},X.prototype.then=function(K,nt){function q(It,ft){return typeof It=="function"?function(Wt){try{yt(It(Wt))}catch(St){Xt(St)}}:ft}var yt,Xt,Kt=new X(function(It,ft){yt=It,Xt=ft});return this.J(q(K,yt),q(nt,Xt)),Kt},X.prototype.catch=function(K){return this.then(void 0,K)},X.prototype.J=function(K,nt){function q(){switch(yt.h){case 1:K(yt.i);break;case 2:nt(yt.i);break;default:throw Error("Unexpected state: "+yt.h)}}var yt=this;this.g==null?A.h(q):this.g.push(q),this.o=!0},X.resolve=Y,X.reject=function(K){return new X(function(nt,q){q(K)})},X.race=function(K){return new X(function(nt,q){for(var yt=L(K),Xt=yt.next();!Xt.done;Xt=yt.next())Y(Xt.value).J(nt,q)})},X.all=function(K){var nt=L(K),q=nt.next();return q.done?Y([]):new X(function(yt,Xt){function Kt(Wt){return function(St){It[Wt]=St,ft--,ft==0&&yt(It)}}var It=[],ft=0;do It.push(void 0),ft++,Y(q.value).J(Kt(It.length-1),Xt),q=nt.next();while(!q.done)})},X});function mn(s,X){s instanceof String&&(s+="");var R=0,Y=!1,N={next:function(){if(!Y&&R<s.length){var A=R++;return{value:X(A,s[A]),done:!1}}return Y=!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 Y=arguments[R];if(Y)for(var N in Y)Object.prototype.hasOwnProperty.call(Y,N)&&(s[N]=Y[N])}return s};S("Object.assign",function(s){return s||An}),S("Object.is",function(s){return s||function(X,R){return X===R?X!==0||1/X===1/R:X!==X&&R!==R}}),S("Array.prototype.includes",function(s){return s||function(X,R){var Y=this;Y instanceof String&&(Y=String(Y));var N=Y.length;for(R=R||0,0>R&&(R=Math.max(R+N,0));R<N;R++){var A=Y[R];if(A===X||Object.is(A,X))return!0}return!1}}),S("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}}),S("Array.prototype.keys",function(s){return s||function(){return mn(this,function(X){return X})}});var Ve=this||self;function Nt(s,X){s=s.split(".");var R=Ve;s[0]in R||typeof R.execScript=="undefined"||R.execScript("var "+s[0]);for(var Y;s.length&&(Y=s.shift());)s.length||X===void 0?R[Y]&&R[Y]!==Object.prototype[Y]?R=R[Y]:R=R[Y]={}:R[Y]=X}function Te(s){Ve.setTimeout(function(){throw s},0)}function nn(s){Te(s)}function Gn(s,X){nn(Error("Invalid wire type: "+s+" (at position "+X+")"))}function wn(){nn(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 Cn,an=typeof TextDecoder!="undefined",pn,En=typeof TextEncoder!="undefined";function Fn(s){if(En)s=(pn||(pn=new TextEncoder)).encode(s);else{var X=void 0;X=X===void 0?!1:X;for(var R=0,Y=new Uint8Array(3*s.length),N=0;N<s.length;N++){var A=s.charCodeAt(N);if(128>A)Y[R++]=A;else{if(2048>A)Y[R++]=A>>6|192;else{if(55296<=A&&57343>=A){if(56319>=A&&N<s.length){var K=s.charCodeAt(++N);if(56320<=K&&57343>=K){A=1024*(A-55296)+K-56320+65536,Y[R++]=A>>18|240,Y[R++]=A>>12&63|128,Y[R++]=A>>6&63|128,Y[R++]=A&63|128;continue}else N--}if(X)throw Error("Found an unpaired surrogate");A=65533}Y[R++]=A>>12|224,Y[R++]=A>>6&63|128}Y[R++]=A&63|128}}s=Y.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)),Y=X[64]||"",N=0,A=0;N<s.length-2;N+=3){var K=s[N],nt=s[N+1],q=s[N+2],yt=X[K>>2];K=X[(K&3)<<4|nt>>4],nt=X[(nt&15)<<2|q>>6],q=X[q&63],R[A++]=yt+K+nt+q}switch(yt=0,q=Y,s.length-N){case 2:yt=s[N+1],q=X[(yt&15)<<2]||Y;case 1:s=s[N],R[A]=X[s>>2]+X[(s&3)<<4|yt>>4]+q+Y}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 Y=new Uint8Array(R),N=0;return de(s,function(A){Y[N++]=A}),Y.subarray(0,N)}function de(s,X){function R(q){for(;Y<s.length;){var yt=s.charAt(Y++),Xt=Me[yt];if(Xt!=null)return Xt;if(!/^[\s\xa0]*$/.test(yt))throw Error("Unknown base64 encoding at char: "+yt)}return q}Se();for(var Y=0;;){var N=R(-1),A=R(0),K=R(64),nt=R(64);if(nt===64&&N===-1)break;X(N<<2|A>>4),K!=64&&(X(A<<4&240|K>>2),nt!=64&&X(K<<6&192|nt))}}function Se(){if(!Me){Me={};for(var s="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789".split(""),X=["+/=","+/","-_=","-_.","-_"],R=0;5>R;R++){var Y=s.concat(X[R].split(""));je[R]=Y;for(var N=0;N<Y.length;N++){var A=Y[N];Me[A]===void 0&&(Me[A]=N)}}}}var ze=typeof Uint8Array=="function",ee;function Xe(s){if(this.g=s,s!==null&&s.length===0)throw Error("ByteString should be constructed with non-empty values")}Xe.prototype.toJSON=function(){if(this.g==null)var s="";else s=this.g,s=this.g=s==null||typeof s=="string"?s:ze&&s instanceof Uint8Array?xn(s):null;return s};var rn=typeof Uint8Array.prototype.slice=="function";function Ue(s,X,R){return X===R?ee||(ee=new Uint8Array(0)):rn?s.slice(X,R):new Uint8Array(s.subarray(X,R))}var _t=0,ge=0;function He(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===Xe){if(s.g==null)var X=ee||(ee=new Uint8Array(0));else{X=Uint8Array;var R=s.g;R=R==null||ze&&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=He(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,nn(Error("Tried to read past the end of the data "+s.g+" > "+s.i)))}function be(s){var X=s.h,R=X[s.g],Y=R&127;return 128>R?(s.g+=1,jt(s),Y):(R=X[s.g+1],Y|=(R&127)<<7,128>R?(s.g+=2,jt(s),Y):(R=X[s.g+2],Y|=(R&127)<<14,128>R?(s.g+=3,jt(s),Y):(R=X[s.g+3],Y|=(R&127)<<21,128>R?(s.g+=4,jt(s),Y):(R=X[s.g+4],Y|=(R&15)<<28,128>R?(s.g+=5,jt(s),Y>>>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,wn(),Y):(jt(s),Y))))))}var Le=[];function Qe(){this.g=new Uint8Array(64),this.h=0}function Ge(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,Ue(s,0,X)};function zt(s,X){for(;127<X;)Ge(s,X&127|128),X>>>=7;Ge(s,X)}function Be(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,Le.length?(R=Le.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}Be.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=be(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,wn()}break;case 1:s=s.g,s.g+=8,jt(s);break;case 2:s.h!=2?Ie(s):(X=be(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,nn(Error("Unmatched start-group tag: stream EOF"));break}if(s.h==4){s.i!=X&&(s.j=!0,nn(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=Ue(s.g.h,R,s.g.g),(R=X.m)?R.push(s):X.m=[s])}var on=[];function Oe(){this.h=[],this.i=0,this.g=new Qe}function sn(s,X){X.length!==0&&(s.h.push(X),s.i+=X.length)}function Ze(s,X,R){zt(s.g,8*X+2),zt(s.g,R.length),sn(s,s.g.end()),sn(s,R)}var Ye=typeof Symbol=="function"&&typeof Symbol()=="symbol"?Symbol(void 0):void 0;function ve(s,X){Object.isFrozen(s)||(Ye?s[Ye]|=X:s.g!==void 0?s.g|=X:Object.defineProperties(s,{g:{value:X,configurable:!0,writable:!0,enumerable:!1}}))}function ne(s){if(!s)return 0;var X;return Ye?X=s[Ye]:X=s.g,X==null?0:X}function _e(s){return Array.isArray(s)&&ve(s,1),s}function qt(s){if(!Array.isArray(s))throw Error("cannot mark non-array as immutable");ve(s,2)}function Pt(s){return s!==null&&typeof s=="object"&&s.constructor===Object}function dn(s){switch(typeof s){case"number":return isFinite(s)?s:String(s);case"object":return ze&&s!=null&&s instanceof Uint8Array?xn(s):s;default:return s}}function he(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),Y=0;Y<s.length;Y++)R[Y]=he(s[Y],X);return ne(s)&1&&_e(R),R}R={};for(Y in s)R[Y]=he(s[Y],X);return R}var Rt;function re(s,X,R){var Y=Rt;Rt=null,s||(s=Y),Y=this.constructor.ca,s||(s=Y?[Y]:[]),this.j=(Y?0:-1)-(this.constructor.aa||0),this.i=null,this.g=s;t:{if(Y=this.g.length,s=Y-1,Y&&(Y=this.g[s],Pt(Y))){this.l=s-this.j,this.h=Y;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,(Y=this.g[s])?_e(Y):this.g[s]=we):(te(this),(Y=this.h[s])?_e(Y):this.h[s]=we)}var we=Object.freeze(_e([]));function te(s){var X=s.l+s.j;s.g[X]||(s.h=s.g[X]={})}function ie(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 et(s,X,R){R=R===void 0?!0:R;var Y=Y===void 0?!1:Y,N=ie(s,X,Y);return N==null&&(N=we),N===we?(N=_e([]),at(s,X,N,Y)):R&&Array.isArray(N)&&ne(N)&2&&(N=N.slice(),at(s,X,N,Y)),N}function ot(s,X,R){return s=ie(s,X),s=s==null?s:+s,s==null?R===void 0?0:R:s}function at(s,X,R,Y){(Y===void 0?0:Y)||X>=s.l?(te(s),s.h[X]=R):s.g[X+s.j]=R}function Ot(s,X,R){s.i||(s.i={});var Y=s.i[R];if(!Y){var N=et(s,R,!1);Y=[];for(var A=Array.isArray(N)?!!(ne(N)&2):!1,K=0;K<N.length;K++)Y[K]=new X(N[K]),A&&qt(Y[K].g);A&&(qt(Y),Object.freeze(Y)),s.i[R]=Y}return Y}function ce(s,X,R,Y,N){var A=Ot(s,Y,X);R=R||new Y,s=et(s,X),N!=null?(A.splice(N,0,R),s.splice(N,0,le(R))):(A.push(R),s.push(le(R)))}re.prototype.toJSON=function(){var s=le(this);return Ct(s,dn)};function le(s){if(s.i)for(var X in s.i){var R=s.i[X];if(Array.isArray(R))for(var Y=0;Y<R.length;Y++)R[Y]&&le(R[Y]);else R&&le(R)}return s.g}re.prototype.toString=function(){return le(this).toString()};function Tt(s,X){return s=ie(s,X),s==null?0:s}function fe(s,X){return s=ie(s,X),s==null?"":s}function Ce(s,X){if(s=s.m){sn(X,X.g.end());for(var R=0;R<s.length;R++)sn(X,s[R])}}function De(s){var X=s[0];switch(s.length){case 2:var R=s[1];return function(q,yt,Xt){return X(q,yt,Xt,R)};case 3:var Y=s[1],N=s[2];return function(q,yt,Xt){return X(q,yt,Xt,Y,N)};case 4:var A=s[1],K=s[2],nt=s[3];return function(q,yt,Xt){return X(q,yt,Xt,A,K,nt)};default:throw Error("unsupported number of parameters, expected [2-4], got "+s.length)}}function $e(s,X,R){for(;Pe(X)&&X.h!=4;){var Y=X.i,N=R[Y];if(N){if(Array.isArray(N)&&(N=R[Y]=De(N)),!N(X,s,Y)){Y=X,N=s;var A=Y.l;Ie(Y),Wn(Y,N,A)}}else Y=X,N=s,A=Y.l,Ie(Y),Wn(Y,N,A)}return s}function hn(s,X){var R=new Oe;if(X(s,R),s=R.i+R.g.length(),s===0)R=new Uint8Array(0);else{s=new Uint8Array(s);for(var Y=R.h,N=Y.length,A=X=0;A<N;A++){var K=Y[A];K.length!==0&&(s.set(K,X),X+=K.length)}Y=R.g,N=Y.h,N!==0&&(s.set(Y.g.subarray(0,N),X),Y.h=0),R.h=[s],R=s}return R}function bn(s,X,R){if(on.length){var Y=on.pop();s&&(xe(Y.g,s),Y.i=-1,Y.h=-1),s=Y}else s=new Be(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>on.length&&on.push(s)}}function Fe(s,X,R){if(X=ie(X,R),X!=null){zt(s.g,8*R+5),s=s.g;var Y=X;Y=(R=0>Y?1:0)?-Y:Y,Y===0?0<1/Y?_t=ge=0:(ge=0,_t=2147483648):isNaN(Y)?(ge=0,_t=2147483647):34028234663852886e22<Y?(ge=0,_t=(R<<31|2139095040)>>>0):11754943508222875e-54>Y?(Y=Math.round(Y/Math.pow(2,-149)),ge=0,_t=(R<<31|Y)>>>0):(X=Math.floor(Math.log(Y)/Math.LN2),Y*=Math.pow(2,-X),Y=Math.round(8388608*Y),16777216<=Y&&++X,ge=0,_t=(R<<31|X+127<<23|Y&8388607)>>>0),R=_t,Ge(s,R>>>0&255),Ge(s,R>>>8&255),Ge(s,R>>>16&255),Ge(s,R>>>24&255)}}function qe(s,X,R){if(s.h!==5)return!1;s=s.g;var Y=s.h[s.g],N=s.h[s.g+1],A=s.h[s.g+2],K=s.h[s.g+3];return s.g+=4,jt(s),N=(Y<<0|N<<8|A<<16|K<<24)>>>0,s=2*(N>>31)+1,Y=N>>>23&255,N&=8388607,at(X,R,Y==255?N?NaN:1/0*s:Y==0?s*Math.pow(2,-149)*N:s*Math.pow(2,Y-150)*(N+Math.pow(2,23))),!0}function jn(s,X,R){if(s.h!==0)return!1;for(var Y=s.g,N=128,A=0,K=s=0;4>K&&128<=N;K++)N=Y.h[Y.g++],A|=(N&127)<<7*K;if(128<=N&&(N=Y.h[Y.g++],A|=(N&127)<<28,s|=(N&127)>>4),128<=N)for(K=0;5>K&&128<=N;K++)N=Y.h[Y.g++],s|=(N&127)<<7*K+3;return 128>N?(Y=A>>>0,N=s>>>0,(s=N&2147483648)&&(Y=~Y+1>>>0,N=~N>>>0,Y==0&&(N=N+1>>>0)),Y=4294967296*N+(Y>>>0),s=s?-Y:Y):(Y.j=!0,wn(),s=void 0),at(X,R,s),!0}function tn(s,X,R){return s.h!==0?!1:(at(X,R,be(s.g)),!0)}function Ne(s,X,R){if(s.h!==2)return!1;var Y=be(s.g);s=s.g;var N=s.g;s.g+=Y,jt(s),s=s.h;var A;if(an)(A=Cn)||(A=Cn=new TextDecoder("utf-8",{fatal:!1})),A=A.decode(s.subarray(N,N+Y));else{Y=N+Y;for(var K=[],nt=null,q,yt,Xt;N<Y;)q=s[N++],128>q?K.push(q):224>q?N>=Y?K.push(65533):(yt=s[N++],194>q||(yt&192)!==128?(N--,K.push(65533)):K.push((q&31)<<6|yt&63)):240>q?N>=Y-1?K.push(65533):(yt=s[N++],(yt&192)!==128||q===224&&160>yt||q===237&&160<=yt||((A=s[N++])&192)!==128?(N--,K.push(65533)):K.push((q&15)<<12|(yt&63)<<6|A&63)):244>=q?N>=Y-2?K.push(65533):(yt=s[N++],(yt&192)!==128||(q<<28)+(yt-144)>>30!==0||((A=s[N++])&192)!==128||((Xt=s[N++])&192)!==128?(N--,K.push(65533)):(q=(q&7)<<18|(yt&63)<<12|(A&63)<<6|Xt&63,q-=65536,K.push((q>>10&1023)+55296,(q&1023)+56320))):K.push(65533),8192<=K.length&&(nt=Rn(nt,K),K.length=0);A=Rn(nt,K)}return at(X,R,A),!0}function gn(s,X,R,Y,N){if(s.h!==2)return!1;var A=new Y,K=s.g.i,nt=be(s.g),q=s.g.g+nt;if(s.g.i=q,N(A,s),N=q-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=q,s.g.i=K,ce(X,R,A,Y,void 0),!0}function In(s){re.call(this,s)}var Ke;ht(In,re);function kn(s,X){var R=ie(s,1);if(R!=null&&R!=null){zt(X.g,8);var Y=X.g;if(0<=R)zt(Y,R);else{for(var N=0;9>N;N++)Ge(Y,R&127|128),R>>=7;Ge(Y,1)}}Fe(X,s,2),Y=ie(s,3),Y!=null&&Ze(X,3,Fn(Y)),Y=ie(s,4),Y!=null&&Ze(X,4,Fn(Y)),Ce(s,X)}function en(s,X){return $e(s,X,Ke||(Ke={1:tn,2:qe,3:Ne,4:Ne}))}function Zn(s){re.call(this,s,-1,ln)}var Sn;ht(Zn,re),Zn.prototype.addClassification=function(s,X){return ce(this,1,s,In,X),this};function Kn(s,X){return $e(s,X,Sn||(Sn={1:[gn,In,en]}))}var ln=[1];function Tn(s){re.call(this,s)}var _n;ht(Tn,re);function Qn(s,X){Fe(X,s,1),Fe(X,s,2),Fe(X,s,3),Fe(X,s,4),Fe(X,s,5),Ce(s,X)}function Ln(s,X){return $e(s,X,_n||(_n={1:qe,2:qe,3:qe,4:qe,5:qe}))}function Hn(s){re.call(this,s,-1,V)}var p;ht(Hn,re);function W(s,X){return $e(s,X,p||(p={1:[gn,Tn,Ln]}))}var V=[1];function k(s){re.call(this,s)}var O;ht(k,re);function lt(s,X){Fe(X,s,1),Fe(X,s,2),Fe(X,s,3),Fe(X,s,4),Fe(X,s,5);var R=ie(s,6);if(R!=null&&R!=null){zt(X.g,48);var Y=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))),_t=A,ge=N,R=_t,A=ge;0<A||127<R;)Ge(Y,R&127|128),R=(R>>>7|A<<25)>>>0,A>>>=7;Ge(Y,R)}Ce(s,X)}function P(s,X){return $e(s,X,O||(O={1:qe,2:qe,3:qe,4:qe,5:qe,6:jn}))}function it(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.
|
|
106
106
|
|
|
107
|
-
`+s.getShaderInfoLog(R));return R}function bt(s){return Ot(s,In,1).map(function(X){return{index:
|
|
107
|
+
`+s.getShaderInfoLog(R));return R}function bt(s){return Ot(s,In,1).map(function(X){return{index:Tt(X,1),X:ot(X,2),label:ie(X,3)!=null?fe(X,3):void 0,displayName:ie(X,4)!=null?fe(X,4):void 0}})}function xt(s){return{x:ot(s,1),y:ot(s,2),z:ot(s,3),visibility:ie(s,4)!=null?ot(s,4):void 0}}function Ut(s){return Ot(bn(s,Hn,W),Tn,1).map(xt)}function Et(s,X){this.h=s,this.g=X,this.l=0}function $t(s,X,R){return kt(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(Y){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),Y(s.i)}))}function kt(s,X){var R=s.g;if(s.m===void 0){var Y=it(R,`
|
|
108
108
|
attribute vec2 aVertex;
|
|
109
109
|
attribute vec2 aTex;
|
|
110
110
|
varying vec2 vTex;
|
|
@@ -119,19 +119,19 @@
|
|
|
119
119
|
gl_FragColor = texture2D(sampler0, vTex);
|
|
120
120
|
}`,1),A=R.createProgram();if(R.attachShader(A,Y),R.attachShader(A,N),R.linkProgram(A),!R.getProgramParameter(A,R.LINK_STATUS))throw Error(`Could not compile WebGL program.
|
|
121
121
|
|
|
122
|
-
`+R.getProgramInfoLog(A));Y=s.m=A,R.useProgram(Y),N=R.getUniformLocation(Y,"sampler0"),s.j={I:R.getAttribLocation(Y,"aVertex"),H:R.getAttribLocation(Y,"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)}Y=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(Y.I),R.bindBuffer(R.ARRAY_BUFFER,s.s),R.vertexAttribPointer(Y.I,2,R.FLOAT,!1,0,0),R.enableVertexAttribArray(Y.H),R.bindBuffer(R.ARRAY_BUFFER,s.o),R.vertexAttribPointer(Y.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(Y.I),R.disableVertexAttribArray(Y.H),R.bindBuffer(R.ARRAY_BUFFER,null),s.h.bindTexture2d(0)}function Tt(s){this.g=s}var kt=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 Qt(s,X){return X+s}function ue(s,X){window[s]=X}function me(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 ye(){return gt(function(s){switch(s.g){case 1:return s.m=2,_(s,WebAssembly.instantiate(kt),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 Je(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||Qt,typeof window=="object")var X=window.location.pathname.toString().substring(0,window.location.pathname.toString().lastIndexOf("/"))+"/";else if(typeof location!="undefined")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 Y=s.options[R].default;Y!==void 0&&(this.j[R]=typeof Y=="function"?Y():Y)}}}i=Je.prototype,i.close=function(){return this.i&&this.i.delete(),Promise.resolve()};function h(s){var X,R,Y,N,A,K,nt,q,yt,Xt,Kt;return gt(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,_(It,ye(),2)):It.return();case 2:if(R=It.h,typeof window=="object")return ue("createMediapipeSolutionsWasm",{locateFile:s.locateFile}),ue("createMediapipeSolutionsPackedAssets",{locateFile:s.locateFile}),K=X.filter(function(ft){return ft.data!==void 0}),nt=X.filter(function(ft){return ft.data===void 0}),q=Promise.all(K.map(function(ft){var Wt=C(s,ft.url);if(ft.path!==void 0){var St=ft.path;Wt=Wt.then(function(wt){return s.overrideFile(St,wt),Promise.resolve(wt)})}return Wt})),yt=Promise.all(nt.map(function(ft){return ft.simd===void 0||ft.simd&&R||!ft.simd&&!R?me(s.locateFile(ft.url,s.S)):Promise.resolve()})).then(function(){var ft,Wt,St;return gt(function(wt){if(wt.g==1)return ft=window.createMediapipeSolutionsWasm,Wt=window.createMediapipeSolutionsPackedAssets,St=s,_(wt,ft(Wt),2);St.h=wt.h,wt.g=0})}),Xt=function(){return gt(function(ft){return s.g.graph&&s.g.graph.url?ft=_(ft,C(s,s.g.graph.url),0):(ft.g=0,ft=void 0),ft})}(),_(It,Promise.all([yt,q,Xt]),7);if(typeof importScripts!="function")throw Error("solutions can only be loaded on a web page or in a web worker");return Y=X.filter(function(ft){return ft.simd===void 0||ft.simd&&R||!ft.simd&&!R}).map(function(ft){return s.locateFile(ft.url,s.S)}),importScripts.apply(null,k(Y)),N=s,_(It,createMediapipeSolutionsWasm(Module),6);case 6:N.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!="undefined"?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 g(s){var X,R,Y,N,A,K,nt,q;return gt(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,_(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)),Y=R.next();!Y.done;Y=R.next())N=Y.value,s.i.overrideFile(N,s.B[N]);if(s.B={},s.g.listeners)for(A=T(s.g.listeners),K=A.next();!K.done;K=A.next())nt=K.value,M(s,nt);q=s.j,s.j={},s.setOptions(q),yt.g=0})}i.reset=function(){var s=this;return gt(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 Y=[],N=[],A={},K=T(Object.keys(s)),nt=K.next();!nt.done;A={K:A.K,L:A.L},nt=K.next()){var q=nt.value;q in this.j&&this.j[q]===s[q]||(this.j[q]=s[q],nt=X[q],nt!==void 0&&(nt.onChange&&(A.K=nt.onChange,A.L=s[q],Y.push(function(yt){return function(){var Xt;return gt(function(Kt){if(Kt.g==1)return _(Kt,yt.K(yt.L),2);Xt=Kt.h,Xt===!0&&(R.o=!0),Kt.g=0})}}(A))),nt.graphOptionXref&&(q={valueNumber:nt.type===1?s[q]:0,valueBoolean:nt.type===0?s[q]:!1,valueString:nt.type===2?s[q]:""},nt=Object.assign(Object.assign(Object.assign({},{calculatorName:"",calculatorIndex:0}),nt.graphOptionXref),q),N.push(nt))))}(Y.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(Y))}};function G(s){var X,R,Y,N,A,K,nt;return gt(function(q){switch(q.g){case 1:if(!s.o)return q.return();if(!s.v){q.g=2;break}X=T(s.v),R=X.next();case 3:if(R.done){q.g=5;break}return Y=R.value,_(q,Y(),4);case 4:R=X.next(),q.g=3;break;case 5:s.v=void 0;case 2:if(s.A){for(N=new s.h.GraphOptionChangeRequestList,A=T(s.A),K=A.next();!K.done;K=A.next())nt=K.value,N.push_back(nt);s.i.changeOptions(N),N.delete(),s.A=void 0}s.o=!1,q.g=0}})}i.initialize=function(){var s=this;return gt(function(X){return X.g==1?_(X,h(s),2):X.g!=3?_(X,g(s),3):_(X,G(s),0)})};function C(s,X){var R,Y;return gt(function(N){return X in s.F?N.return(s.F[X]):(R=s.locateFile(X,""),Y=fetch(R).then(function(A){return A.arrayBuffer()}),s.F[X]=Y,N.return(Y))})}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,Y,N,A,K,nt,q,yt,Xt,Kt;return gt(function(It){switch(It.g){case 1:return R.g.inputs?(Y=1e3*(X==null?performance.now():X),_(It,R.C,2)):It.return();case 2:return _(It,R.initialize(),3);case 3:for(N=new R.h.PacketDataList,A=T(Object.keys(s)),K=A.next();!K.done;K=A.next())if(nt=K.value,q=R.g.inputs[nt]){t:{var ft=s[nt];switch(q.type){case"video":var Wt=R.m[q.stream];if(Wt||(Wt=new Jt(R.h,R.D),R.m[q.stream]=Wt),Wt.l===0&&(Wt.l=Wt.h.createTexture()),typeof HTMLVideoElement!="undefined"&&ft instanceof HTMLVideoElement)var St=ft.videoWidth,wt=ft.videoHeight;else typeof HTMLImageElement!="undefined"&&ft instanceof HTMLImageElement?(St=ft.naturalWidth,wt=ft.naturalHeight):(St=ft.width,wt=ft.height);wt={glName:Wt.l,width:St,height:wt},St=Wt.g,St.canvas.width=wt.width,St.canvas.height=wt.height,St.activeTexture(St.TEXTURE0),Wt.h.bindTexture2d(Wt.l),St.texImage2D(St.TEXTURE_2D,0,St.RGBA,St.RGBA,St.UNSIGNED_BYTE,ft),Wt.h.bindTexture2d(0),Wt=wt;break t;case"detections":for(Wt=R.m[q.stream],Wt||(Wt=new Tt(R.h),R.m[q.stream]=Wt),Wt.data||(Wt.data=new Wt.g.DetectionListData),Wt.data.reset(ft.length),wt=0;wt<ft.length;++wt){St=ft[wt];var Ht=Wt.data,l=Ht.setBoundingBox,v=wt,x=St.T,L=new E;if(at(L,1,x.Y),at(L,2,x.Z),at(L,3,x.height),at(L,4,x.width),at(L,5,x.rotation),at(L,6,x.W),x=dn(L,lt),l.call(Ht,v,x),St.O)for(Ht=0;Ht<St.O.length;++Ht){L=St.O[Ht];var J=!!L.visibility;l=Wt.data,v=l.addNormalizedLandmark,x=wt,L=Object.assign(Object.assign({},L),{visibility:J?L.visibility:0}),J=new Ln,at(J,1,L.x),at(J,2,L.y),at(J,3,L.z),L.visibility&&at(J,4,L.visibility),L=dn(J,Qn),v.call(l,x,L)}if(St.M)for(Ht=0;Ht<St.M.length;++Ht)l=Wt.data,v=l.addClassification,x=wt,L=St.M[Ht],J=new In,at(J,2,L.X),L.index&&at(J,1,L.index),L.label&&at(J,3,L.label),L.displayName&&at(J,4,L.displayName),L=dn(J,En),v.call(l,x,L)}Wt=Wt.data;break t;default:Wt={}}}switch(yt=Wt,Xt=q.stream,q.type){case"video":N.pushTexture2d(Object.assign(Object.assign({},yt),{stream:Xt,timestamp:Y}));break;case"detections":Kt=yt,Kt.stream=Xt,Kt.timestamp=Y,N.pushDetectionList(Kt);break;default:throw Error("Unknown input config type: '"+q.type+"'")}}return R.i.send(N),_(It,R.C,4);case 4:N.delete(),It.g=0}})};function B(s,X,R){var Y,N,A,K,nt,q,yt,Xt,Kt,It,ft,Wt,St,wt;return gt(function(Ht){switch(Ht.g){case 1:if(!R)return Ht.return(X);for(Y={},N=0,A=T(Object.keys(R)),K=A.next();!K.done;K=A.next())nt=K.value,q=R[nt],typeof q!="string"&&q.type==="texture"&&X[q.stream]!==void 0&&++N;1<N&&(s.G=!1),yt=T(Object.keys(R)),K=yt.next();case 2:if(K.done){Ht.g=4;break}if(Xt=K.value,Kt=R[Xt],typeof Kt=="string")return St=Y,wt=Xt,_(Ht,Q(s,Xt,X[Kt]),14);if(It=X[Kt.stream],Kt.type==="detection_list"){if(It){for(var l=It.getRectList(),v=It.getLandmarksList(),x=It.getClassificationsList(),L=[],J=0;J<l.size();++J){var r=pn(l.get(J),E,P);r={T:{Y:ot(r,1),Z:ot(r,2),height:ot(r,3),width:ot(r,4),rotation:ot(r,5,0),W:Lt(r,6)},O:Ut(v.get(J)),M:bt(pn(x.get(J),Zn,Kn))},L.push(r)}l=L}else l=[];Y[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=[];Y[Xt]=l,Ht.g=7;break}if(It===void 0){Ht.g=3;break}if(Kt.type==="float_list"){Y[Xt]=It,Ht.g=7;break}if(Kt.type==="proto"){Y[Xt]=It,Ht.g=7;break}if(Kt.type!=="texture")throw Error("Unknown output config type: '"+Kt.type+"'");return ft=s.s[Xt],ft||(ft=new Jt(s.h,s.D),s.s[Xt]=ft),_(Ht,$t(ft,It,s.G),13);case 13:Wt=Ht.h,Y[Xt]=Wt;case 7:Kt.transform&&Y[Xt]&&(Y[Xt]=Kt.transform(Y[Xt])),Ht.g=3;break;case 14:St[wt]=Ht.h;case 3:K=yt.next(),Ht.g=2;break;case 4:return Ht.return(Y)}})}function Q(s,X,R){var Y;return gt(function(N){return typeof R=="number"||R instanceof Uint8Array||R instanceof s.h.Uint8BlobList?N.return(R):R instanceof s.h.Texture2dDataOut?(Y=s.s[X],Y||(Y=new Jt(s.h,s.D),s.s[X]=Y),N.return($t(Y,R,s.G))):N.return(void 0)})}function M(s,X){for(var R=X.name||"$",Y=[].concat(k(X.wants)),N=new s.h.StringList,A=T(X.wants),K=A.next();!K.done;K=A.next())N.push_back(K.value);A=s.h.PacketListener.implement({onResults:function(nt){for(var q={},yt=0;yt<X.wants.length;++yt)q[Y[yt]]=nt.get(yt);var Xt=s.listeners[R];Xt&&(s.C=B(s,q,X.outs).then(function(Kt){Kt=Xt(Kt);for(var It=0;It<X.wants.length;++It){var ft=q[Y[It]];typeof ft=="object"&&ft.hasOwnProperty&&ft.hasOwnProperty("delete")&&ft.delete()}Kt&&(s.C=Kt)}))}}),s.i.attachMultiListener(N,A),N.delete()}i.onResults=function(s,X){this.listeners[X||"$"]=s},Nt("Solution",Je),Nt("OptionType",{BOOL:0,NUMBER:1,$:2,0:"BOOL",1:"NUMBER",2:"STRING"});function tt(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 Je({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:tt(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 Y,N,A;return gt(function(K){return K.g==1?(Y=tt(R),N="third_party/mediapipe/modules/pose_landmark/"+Y,_(K,C(X.g,Y),2)):(A=K.h,X.g.overrideFile(N,A),K.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 gt(function(X){return _(X,s.g.initialize(),0)})},i.send=function(s,X){var R=this;return gt(function(Y){return _(Y,R.g.send(s,X),0)})},i.setOptions=function(s){this.g.setOptions(s)},Nt("Pose",ct),Nt("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]]),Nt("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}),Nt("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}),Nt("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}),Nt("POSE_LANDMARKS_NEUTRAL",{NOSE:0}),Nt("VERSION","0.5.1635988162")}).call(vi);const lr=class{constructor(){this.mediapipeMap_=new Map}getVersion(i){switch(i){case"face_detection":return yi.VERSION;case"face_mesh":return gi.VERSION;case"hands":return pi.VERSION;case"holistic":return bi.VERSION;case"objectron":return Zi.VERSION;case"selfie_segmentation":return mi.VERSION;case"pose":return vi.VERSION;default:return""}}initialize(i){return new Promise(async(n,o)=>{if(i.mediaPipeModelConfigArray.length==0){o("no model was selected");return}for(let p=0;p<i.mediaPipeModelConfigArray.length;p++){const y=i.mediaPipeModelConfigArray[p];if(this.mediapipeMap_.has(y.modelType)){o("setting same type is not supported");return}if(typeof y.listener!="function"){o(`[${y.modelType}] ResultsListener must be provided`);return}let S;switch(y.modelType){case"face_mesh":S=new gi.FaceMesh({locateFile:(F,T)=>(y.assetsUri||lr.defaultAssetsBaseUrl+"face_mesh/"+this.getVersion("face_mesh"))+"/"+F});break;case"face_detection":S=new yi.FaceDetection({locateFile:(F,T)=>(y.assetsUri||lr.defaultAssetsBaseUrl+"face_detection/"+this.getVersion("face_detection"))+"/"+F});break;case"hands":S=new pi.Hands({locateFile:(F,T)=>(y.assetsUri||lr.defaultAssetsBaseUrl+"hands/"+this.getVersion("hands"))+"/"+F});break;case"holistic":S=new bi.Holistic({locateFile:(F,T)=>(y.assetsUri||lr.defaultAssetsBaseUrl+"holistic/"+this.getVersion("holistic"))+"/"+F});break;case"objectron":S=new Zi.Objectron({locateFile:(F,T)=>(y.assetsUri||lr.defaultAssetsBaseUrl+"objectron/"+this.getVersion("objectron"))+"/"+F});break;case"selfie_segmentation":S=new mi.SelfieSegmentation({locateFile:(F,T)=>(y.assetsUri||lr.defaultAssetsBaseUrl+"selfie_segmentation/"+this.getVersion("selfie_segmentation"))+"/"+F});break;case"pose":S=new vi.Pose({locateFile:(F,T)=>(y.assetsUri||lr.defaultAssetsBaseUrl+"pose/"+this.getVersion("pose"))+"/"+F});break;default:o("unknown model type");return}S.onResults(y.listener),y.options&&S.setOptions(y.options);try{await S.initialize(),this.mediapipeMap_.set(y.modelType,S)}catch(F){o(F);return}}n()})}close(i){return new Promise((n,o)=>{let p=[];if(i){let y=this.mediapipeMap_.get(i);if(y)this.mediapipeMap_.delete(i),p.push(y.close());else{o("model not exit");return}}else{for(const[y,S]of this.mediapipeMap_.entries())p.push(S.close());this.mediapipeMap_.clear()}Promise.all(p).then(()=>{n()}).catch(y=>{o(y)})})}send(i,n){return new Promise((o,p)=>{let y=[];if(n){let S=this.mediapipeMap_.get(n);if(S)y.push(S.send({image:i}));else{p("model not exit");return}}else for(const[S,F]of this.mediapipeMap_.entries())y.push(F.send({image:i}));Promise.all(y).then(()=>{o()}).catch(S=>{p(S)})})}reset(i){if(i){let n=this.mediapipeMap_.get(i);n&&typeof n.reset=="function"&&n.reset()}else for(const[n,o]of this.mediapipeMap_.entries())o&&typeof o.reset=="function"&&o.reset()}};let Fs=lr;Fs.defaultAssetsBaseUrl="https://d3opqjmqzxf057.cloudfront.net/ml/mediapipe/";const ur=new WeakMap,Gi=new WeakMap,Br=new WeakMap,ho=Symbol("anyProducer"),Hs=Promise.resolve(),Xi=Symbol("listenerAdded"),Wi=Symbol("listenerRemoved");let fo=!1;function Tr(i){if(typeof i!="string"&&typeof i!="symbol")throw new TypeError("eventName must be a string or a symbol")}function Vi(i){if(typeof i!="function")throw new TypeError("listener must be a function")}function Yr(i,n){const o=Gi.get(i);return o.has(n)||o.set(n,new Set),o.get(n)}function Mr(i,n){const o=typeof n=="string"||typeof n=="symbol"?n:ho,p=Br.get(i);return p.has(o)||p.set(o,new Set),p.get(o)}function B2(i,n,o){const p=Br.get(i);if(p.has(n))for(const y of p.get(n))y.enqueue(o);if(p.has(ho)){const y=Promise.all([n,o]);for(const S of p.get(ho))S.enqueue(y)}}function Cs(i,n){n=Array.isArray(n)?n:[n];let o=!1,p=()=>{},y=[];const S={enqueue(F){y.push(F),p()},finish(){o=!0,p()}};for(const F of n)Mr(i,F).add(S);return{async next(){return y?y.length===0?o?(y=void 0,this.next()):(await new Promise(F=>{p=F}),this.next()):{done:!1,value:await y.shift()}:{done:!0}},async return(F){y=void 0;for(const T of n)Mr(i,T).delete(S);return p(),arguments.length>0?{done:!0,value:await F}:{done:!0}},[Symbol.asyncIterator](){return this}}}function Ns(i){if(i===void 0)return Js;if(!Array.isArray(i))throw new TypeError("`methodNames` must be an array of strings");for(const n of i)if(!Js.includes(n))throw typeof n!="string"?new TypeError("`methodNames` element must be a string"):new Error(`${n} is not Emittery method`);return i}const mo=i=>i===Xi||i===Wi;class yr{static mixin(n,o){return o=Ns(o),p=>{if(typeof p!="function")throw new TypeError("`target` must be function");for(const F of o)if(p.prototype[F]!==void 0)throw new Error(`The property \`${F}\` already exists on \`target\``);function y(){return Object.defineProperty(this,n,{enumerable:!1,value:new yr}),this[n]}Object.defineProperty(p.prototype,n,{enumerable:!1,get:y});const S=F=>function(...T){return this[n][F](...T)};for(const F of o)Object.defineProperty(p.prototype,F,{enumerable:!1,value:S(F)});return p}}static get isDebugEnabled(){if(typeof process!="object")return fo;const{env:n}=process||{env:{}};return n.DEBUG==="emittery"||n.DEBUG==="*"||fo}static set isDebugEnabled(n){fo=n}constructor(n={}){ur.set(this,new Set),Gi.set(this,new Map),Br.set(this,new Map),this.debug=n.debug||{},this.debug.enabled===void 0&&(this.debug.enabled=!1),this.debug.logger||(this.debug.logger=(o,p,y,S)=>{try{S=JSON.stringify(S)}catch{S=`Object with the following keys failed to stringify: ${Object.keys(S).join(",")}`}typeof y=="symbol"&&(y=y.toString());const F=new Date,T=`${F.getHours()}:${F.getMinutes()}:${F.getSeconds()}.${F.getMilliseconds()}`;console.log(`[${T}][emittery:${o}][${p}] Event Name: ${y}
|
|
123
|
-
data: ${S}`)})}logIfDebugEnabled(n,o,
|
|
122
|
+
`+R.getProgramInfoLog(A));Y=s.m=A,R.useProgram(Y),N=R.getUniformLocation(Y,"sampler0"),s.j={I:R.getAttribLocation(Y,"aVertex"),H:R.getAttribLocation(Y,"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)}Y=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(Y.I),R.bindBuffer(R.ARRAY_BUFFER,s.s),R.vertexAttribPointer(Y.I,2,R.FLOAT,!1,0,0),R.enableVertexAttribArray(Y.H),R.bindBuffer(R.ARRAY_BUFFER,s.o),R.vertexAttribPointer(Y.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(Y.I),R.disableVertexAttribArray(Y.H),R.bindBuffer(R.ARRAY_BUFFER,null),s.h.bindTexture2d(0)}function Lt(s){this.g=s}var Jt=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 Qt(s,X){return X+s}function ue(s,X){window[s]=X}function me(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 ye(){return gt(function(s){switch(s.g){case 1:return s.m=2,_(s,WebAssembly.instantiate(Jt),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 Ee(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||Qt,typeof window=="object")var X=window.location.pathname.toString().substring(0,window.location.pathname.toString().lastIndexOf("/"))+"/";else if(typeof location!="undefined")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=L(Object.keys(s.options));for(var R=X.next();!R.done;R=X.next()){R=R.value;var Y=s.options[R].default;Y!==void 0&&(this.j[R]=typeof Y=="function"?Y():Y)}}}i=Ee.prototype,i.close=function(){return this.i&&this.i.delete(),Promise.resolve()};function h(s){var X,R,Y,N,A,K,nt,q,yt,Xt,Kt;return gt(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,_(It,ye(),2)):It.return();case 2:if(R=It.h,typeof window=="object")return ue("createMediapipeSolutionsWasm",{locateFile:s.locateFile}),ue("createMediapipeSolutionsPackedAssets",{locateFile:s.locateFile}),K=X.filter(function(ft){return ft.data!==void 0}),nt=X.filter(function(ft){return ft.data===void 0}),q=Promise.all(K.map(function(ft){var Wt=C(s,ft.url);if(ft.path!==void 0){var St=ft.path;Wt=Wt.then(function(wt){return s.overrideFile(St,wt),Promise.resolve(wt)})}return Wt})),yt=Promise.all(nt.map(function(ft){return ft.simd===void 0||ft.simd&&R||!ft.simd&&!R?me(s.locateFile(ft.url,s.S)):Promise.resolve()})).then(function(){var ft,Wt,St;return gt(function(wt){if(wt.g==1)return ft=window.createMediapipeSolutionsWasm,Wt=window.createMediapipeSolutionsPackedAssets,St=s,_(wt,ft(Wt),2);St.h=wt.h,wt.g=0})}),Xt=function(){return gt(function(ft){return s.g.graph&&s.g.graph.url?ft=_(ft,C(s,s.g.graph.url),0):(ft.g=0,ft=void 0),ft})}(),_(It,Promise.all([yt,q,Xt]),7);if(typeof importScripts!="function")throw Error("solutions can only be loaded on a web page or in a web worker");return Y=X.filter(function(ft){return ft.simd===void 0||ft.simd&&R||!ft.simd&&!R}).map(function(ft){return s.locateFile(ft.url,s.S)}),importScripts.apply(null,J(Y)),N=s,_(It,createMediapipeSolutionsWasm(Module),6);case 6:N.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!="undefined"?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 g(s){var X,R,Y,N,A,K,nt,q;return gt(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,_(yt,C(s,s.g.graph.url),3)}for(yt.g!=2&&(X=yt.h,s.i.loadGraph(X)),R=L(Object.keys(s.B)),Y=R.next();!Y.done;Y=R.next())N=Y.value,s.i.overrideFile(N,s.B[N]);if(s.B={},s.g.listeners)for(A=L(s.g.listeners),K=A.next();!K.done;K=A.next())nt=K.value,B(s,nt);q=s.j,s.j={},s.setOptions(q),yt.g=0})}i.reset=function(){var s=this;return gt(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 Y=[],N=[],A={},K=L(Object.keys(s)),nt=K.next();!nt.done;A={K:A.K,L:A.L},nt=K.next()){var q=nt.value;q in this.j&&this.j[q]===s[q]||(this.j[q]=s[q],nt=X[q],nt!==void 0&&(nt.onChange&&(A.K=nt.onChange,A.L=s[q],Y.push(function(yt){return function(){var Xt;return gt(function(Kt){if(Kt.g==1)return _(Kt,yt.K(yt.L),2);Xt=Kt.h,Xt===!0&&(R.o=!0),Kt.g=0})}}(A))),nt.graphOptionXref&&(q={valueNumber:nt.type===1?s[q]:0,valueBoolean:nt.type===0?s[q]:!1,valueString:nt.type===2?s[q]:""},nt=Object.assign(Object.assign(Object.assign({},{calculatorName:"",calculatorIndex:0}),nt.graphOptionXref),q),N.push(nt))))}(Y.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(Y))}};function G(s){var X,R,Y,N,A,K,nt;return gt(function(q){switch(q.g){case 1:if(!s.o)return q.return();if(!s.v){q.g=2;break}X=L(s.v),R=X.next();case 3:if(R.done){q.g=5;break}return Y=R.value,_(q,Y(),4);case 4:R=X.next(),q.g=3;break;case 5:s.v=void 0;case 2:if(s.A){for(N=new s.h.GraphOptionChangeRequestList,A=L(s.A),K=A.next();!K.done;K=A.next())nt=K.value,N.push_back(nt);s.i.changeOptions(N),N.delete(),s.A=void 0}s.o=!1,q.g=0}})}i.initialize=function(){var s=this;return gt(function(X){return X.g==1?_(X,h(s),2):X.g!=3?_(X,g(s),3):_(X,G(s),0)})};function C(s,X){var R,Y;return gt(function(N){return X in s.F?N.return(s.F[X]):(R=s.locateFile(X,""),Y=fetch(R).then(function(A){return A.arrayBuffer()}),s.F[X]=Y,N.return(Y))})}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,Y,N,A,K,nt,q,yt,Xt,Kt;return gt(function(It){switch(It.g){case 1:return R.g.inputs?(Y=1e3*(X==null?performance.now():X),_(It,R.C,2)):It.return();case 2:return _(It,R.initialize(),3);case 3:for(N=new R.h.PacketDataList,A=L(Object.keys(s)),K=A.next();!K.done;K=A.next())if(nt=K.value,q=R.g.inputs[nt]){t:{var ft=s[nt];switch(q.type){case"video":var Wt=R.m[q.stream];if(Wt||(Wt=new Et(R.h,R.D),R.m[q.stream]=Wt),Wt.l===0&&(Wt.l=Wt.h.createTexture()),typeof HTMLVideoElement!="undefined"&&ft instanceof HTMLVideoElement)var St=ft.videoWidth,wt=ft.videoHeight;else typeof HTMLImageElement!="undefined"&&ft instanceof HTMLImageElement?(St=ft.naturalWidth,wt=ft.naturalHeight):(St=ft.width,wt=ft.height);wt={glName:Wt.l,width:St,height:wt},St=Wt.g,St.canvas.width=wt.width,St.canvas.height=wt.height,St.activeTexture(St.TEXTURE0),Wt.h.bindTexture2d(Wt.l),St.texImage2D(St.TEXTURE_2D,0,St.RGBA,St.RGBA,St.UNSIGNED_BYTE,ft),Wt.h.bindTexture2d(0),Wt=wt;break t;case"detections":for(Wt=R.m[q.stream],Wt||(Wt=new Lt(R.h),R.m[q.stream]=Wt),Wt.data||(Wt.data=new Wt.g.DetectionListData),Wt.data.reset(ft.length),wt=0;wt<ft.length;++wt){St=ft[wt];var Ht=Wt.data,l=Ht.setBoundingBox,v=wt,x=St.T,T=new k;if(at(T,1,x.Y),at(T,2,x.Z),at(T,3,x.height),at(T,4,x.width),at(T,5,x.rotation),at(T,6,x.W),x=hn(T,lt),l.call(Ht,v,x),St.O)for(Ht=0;Ht<St.O.length;++Ht){T=St.O[Ht];var E=!!T.visibility;l=Wt.data,v=l.addNormalizedLandmark,x=wt,T=Object.assign(Object.assign({},T),{visibility:E?T.visibility:0}),E=new Tn,at(E,1,T.x),at(E,2,T.y),at(E,3,T.z),T.visibility&&at(E,4,T.visibility),T=hn(E,Qn),v.call(l,x,T)}if(St.M)for(Ht=0;Ht<St.M.length;++Ht)l=Wt.data,v=l.addClassification,x=wt,T=St.M[Ht],E=new In,at(E,2,T.X),T.index&&at(E,1,T.index),T.label&&at(E,3,T.label),T.displayName&&at(E,4,T.displayName),T=hn(E,kn),v.call(l,x,T)}Wt=Wt.data;break t;default:Wt={}}}switch(yt=Wt,Xt=q.stream,q.type){case"video":N.pushTexture2d(Object.assign(Object.assign({},yt),{stream:Xt,timestamp:Y}));break;case"detections":Kt=yt,Kt.stream=Xt,Kt.timestamp=Y,N.pushDetectionList(Kt);break;default:throw Error("Unknown input config type: '"+q.type+"'")}}return R.i.send(N),_(It,R.C,4);case 4:N.delete(),It.g=0}})};function M(s,X,R){var Y,N,A,K,nt,q,yt,Xt,Kt,It,ft,Wt,St,wt;return gt(function(Ht){switch(Ht.g){case 1:if(!R)return Ht.return(X);for(Y={},N=0,A=L(Object.keys(R)),K=A.next();!K.done;K=A.next())nt=K.value,q=R[nt],typeof q!="string"&&q.type==="texture"&&X[q.stream]!==void 0&&++N;1<N&&(s.G=!1),yt=L(Object.keys(R)),K=yt.next();case 2:if(K.done){Ht.g=4;break}if(Xt=K.value,Kt=R[Xt],typeof Kt=="string")return St=Y,wt=Xt,_(Ht,Q(s,Xt,X[Kt]),14);if(It=X[Kt.stream],Kt.type==="detection_list"){if(It){for(var l=It.getRectList(),v=It.getLandmarksList(),x=It.getClassificationsList(),T=[],E=0;E<l.size();++E){var r=bn(l.get(E),k,P);r={T:{Y:ot(r,1),Z:ot(r,2),height:ot(r,3),width:ot(r,4),rotation:ot(r,5,0),W:Tt(r,6)},O:Ut(v.get(E)),M:bt(bn(x.get(E),Zn,Kn))},T.push(r)}l=T}else l=[];Y[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=[];Y[Xt]=l,Ht.g=7;break}if(It===void 0){Ht.g=3;break}if(Kt.type==="float_list"){Y[Xt]=It,Ht.g=7;break}if(Kt.type==="proto"){Y[Xt]=It,Ht.g=7;break}if(Kt.type!=="texture")throw Error("Unknown output config type: '"+Kt.type+"'");return ft=s.s[Xt],ft||(ft=new Et(s.h,s.D),s.s[Xt]=ft),_(Ht,$t(ft,It,s.G),13);case 13:Wt=Ht.h,Y[Xt]=Wt;case 7:Kt.transform&&Y[Xt]&&(Y[Xt]=Kt.transform(Y[Xt])),Ht.g=3;break;case 14:St[wt]=Ht.h;case 3:K=yt.next(),Ht.g=2;break;case 4:return Ht.return(Y)}})}function Q(s,X,R){var Y;return gt(function(N){return typeof R=="number"||R instanceof Uint8Array||R instanceof s.h.Uint8BlobList?N.return(R):R instanceof s.h.Texture2dDataOut?(Y=s.s[X],Y||(Y=new Et(s.h,s.D),s.s[X]=Y),N.return($t(Y,R,s.G))):N.return(void 0)})}function B(s,X){for(var R=X.name||"$",Y=[].concat(J(X.wants)),N=new s.h.StringList,A=L(X.wants),K=A.next();!K.done;K=A.next())N.push_back(K.value);A=s.h.PacketListener.implement({onResults:function(nt){for(var q={},yt=0;yt<X.wants.length;++yt)q[Y[yt]]=nt.get(yt);var Xt=s.listeners[R];Xt&&(s.C=M(s,q,X.outs).then(function(Kt){Kt=Xt(Kt);for(var It=0;It<X.wants.length;++It){var ft=q[Y[It]];typeof ft=="object"&&ft.hasOwnProperty&&ft.hasOwnProperty("delete")&&ft.delete()}Kt&&(s.C=Kt)}))}}),s.i.attachMultiListener(N,A),N.delete()}i.onResults=function(s,X){this.listeners[X||"$"]=s},Nt("Solution",Ee),Nt("OptionType",{BOOL:0,NUMBER:1,$:2,0:"BOOL",1:"NUMBER",2:"STRING"});function tt(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 Ee({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:tt(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 Y,N,A;return gt(function(K){return K.g==1?(Y=tt(R),N="third_party/mediapipe/modules/pose_landmark/"+Y,_(K,C(X.g,Y),2)):(A=K.h,X.g.overrideFile(N,A),K.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 gt(function(X){return _(X,s.g.initialize(),0)})},i.send=function(s,X){var R=this;return gt(function(Y){return _(Y,R.g.send(s,X),0)})},i.setOptions=function(s){this.g.setOptions(s)},Nt("Pose",ct),Nt("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]]),Nt("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}),Nt("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}),Nt("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}),Nt("POSE_LANDMARKS_NEUTRAL",{NOSE:0}),Nt("VERSION","0.5.1635988162")}).call(Gi);const lr=class{constructor(){this.mediapipeMap_=new Map}getVersion(i){switch(i){case"face_detection":return gi.VERSION;case"face_mesh":return Zi.VERSION;case"hands":return bi.VERSION;case"holistic":return yi.VERSION;case"objectron":return vi.VERSION;case"selfie_segmentation":return pi.VERSION;case"pose":return Gi.VERSION;default:return""}}initialize(i){return new Promise(async(n,o)=>{if(i.mediaPipeModelConfigArray.length==0){o("no model was selected");return}for(let m=0;m<i.mediaPipeModelConfigArray.length;m++){const y=i.mediaPipeModelConfigArray[m];if(this.mediapipeMap_.has(y.modelType)){o("setting same type is not supported");return}if(typeof y.listener!="function"){o(`[${y.modelType}] ResultsListener must be provided`);return}let S;switch(y.modelType){case"face_mesh":S=new Zi.FaceMesh({locateFile:(F,L)=>(y.assetsUri||lr.defaultAssetsBaseUrl+"face_mesh/"+this.getVersion("face_mesh"))+"/"+F});break;case"face_detection":S=new gi.FaceDetection({locateFile:(F,L)=>(y.assetsUri||lr.defaultAssetsBaseUrl+"face_detection/"+this.getVersion("face_detection"))+"/"+F});break;case"hands":S=new bi.Hands({locateFile:(F,L)=>(y.assetsUri||lr.defaultAssetsBaseUrl+"hands/"+this.getVersion("hands"))+"/"+F});break;case"holistic":S=new yi.Holistic({locateFile:(F,L)=>(y.assetsUri||lr.defaultAssetsBaseUrl+"holistic/"+this.getVersion("holistic"))+"/"+F});break;case"objectron":S=new vi.Objectron({locateFile:(F,L)=>(y.assetsUri||lr.defaultAssetsBaseUrl+"objectron/"+this.getVersion("objectron"))+"/"+F});break;case"selfie_segmentation":S=new pi.SelfieSegmentation({locateFile:(F,L)=>(y.assetsUri||lr.defaultAssetsBaseUrl+"selfie_segmentation/"+this.getVersion("selfie_segmentation"))+"/"+F});break;case"pose":S=new Gi.Pose({locateFile:(F,L)=>(y.assetsUri||lr.defaultAssetsBaseUrl+"pose/"+this.getVersion("pose"))+"/"+F});break;default:o("unknown model type");return}S.onResults(y.listener),y.options&&S.setOptions(y.options);try{await S.initialize(),this.mediapipeMap_.set(y.modelType,S)}catch(F){o(F);return}}n()})}close(i){return new Promise((n,o)=>{let m=[];if(i){let y=this.mediapipeMap_.get(i);if(y)this.mediapipeMap_.delete(i),m.push(y.close());else{o("model not exit");return}}else{for(const[y,S]of this.mediapipeMap_.entries())m.push(S.close());this.mediapipeMap_.clear()}Promise.all(m).then(()=>{n()}).catch(y=>{o(y)})})}send(i,n){return new Promise((o,m)=>{let y=[];if(n){let S=this.mediapipeMap_.get(n);if(S)y.push(S.send({image:i}));else{m("model not exit");return}}else for(const[S,F]of this.mediapipeMap_.entries())y.push(F.send({image:i}));Promise.all(y).then(()=>{o()}).catch(S=>{m(S)})})}reset(i){if(i){let n=this.mediapipeMap_.get(i);n&&typeof n.reset=="function"&&n.reset()}else for(const[n,o]of this.mediapipeMap_.entries())o&&typeof o.reset=="function"&&o.reset()}};let Cs=lr;Cs.defaultAssetsBaseUrl="https://d3opqjmqzxf057.cloudfront.net/ml/mediapipe/";const ur=new WeakMap,Xi=new WeakMap,Mr=new WeakMap,ho=Symbol("anyProducer"),Ns=Promise.resolve(),Wi=Symbol("listenerAdded"),Vi=Symbol("listenerRemoved");let fo=!1;function Lr(i){if(typeof i!="string"&&typeof i!="symbol")throw new TypeError("eventName must be a string or a symbol")}function Ri(i){if(typeof i!="function")throw new TypeError("listener must be a function")}function Yr(i,n){const o=Xi.get(i);return o.has(n)||o.set(n,new Set),o.get(n)}function Br(i,n){const o=typeof n=="string"||typeof n=="symbol"?n:ho,m=Mr.get(i);return m.has(o)||m.set(o,new Set),m.get(o)}function _2(i,n,o){const m=Mr.get(i);if(m.has(n))for(const y of m.get(n))y.enqueue(o);if(m.has(ho)){const y=Promise.all([n,o]);for(const S of m.get(ho))S.enqueue(y)}}function Es(i,n){n=Array.isArray(n)?n:[n];let o=!1,m=()=>{},y=[];const S={enqueue(F){y.push(F),m()},finish(){o=!0,m()}};for(const F of n)Br(i,F).add(S);return{async next(){return y?y.length===0?o?(y=void 0,this.next()):(await new Promise(F=>{m=F}),this.next()):{done:!1,value:await y.shift()}:{done:!0}},async return(F){y=void 0;for(const L of n)Br(i,L).delete(S);return m(),arguments.length>0?{done:!0,value:await F}:{done:!0}},[Symbol.asyncIterator](){return this}}}function ks(i){if(i===void 0)return Js;if(!Array.isArray(i))throw new TypeError("`methodNames` must be an array of strings");for(const n of i)if(!Js.includes(n))throw typeof n!="string"?new TypeError("`methodNames` element must be a string"):new Error(`${n} is not Emittery method`);return i}const mo=i=>i===Wi||i===Vi;class yr{static mixin(n,o){return o=ks(o),m=>{if(typeof m!="function")throw new TypeError("`target` must be function");for(const F of o)if(m.prototype[F]!==void 0)throw new Error(`The property \`${F}\` already exists on \`target\``);function y(){return Object.defineProperty(this,n,{enumerable:!1,value:new yr}),this[n]}Object.defineProperty(m.prototype,n,{enumerable:!1,get:y});const S=F=>function(...L){return this[n][F](...L)};for(const F of o)Object.defineProperty(m.prototype,F,{enumerable:!1,value:S(F)});return m}}static get isDebugEnabled(){if(typeof process!="object")return fo;const{env:n}=process||{env:{}};return n.DEBUG==="emittery"||n.DEBUG==="*"||fo}static set isDebugEnabled(n){fo=n}constructor(n={}){ur.set(this,new Set),Xi.set(this,new Map),Mr.set(this,new Map),this.debug=n.debug||{},this.debug.enabled===void 0&&(this.debug.enabled=!1),this.debug.logger||(this.debug.logger=(o,m,y,S)=>{try{S=JSON.stringify(S)}catch{S=`Object with the following keys failed to stringify: ${Object.keys(S).join(",")}`}typeof y=="symbol"&&(y=y.toString());const F=new Date,L=`${F.getHours()}:${F.getMinutes()}:${F.getSeconds()}.${F.getMilliseconds()}`;console.log(`[${L}][emittery:${o}][${m}] Event Name: ${y}
|
|
123
|
+
data: ${S}`)})}logIfDebugEnabled(n,o,m){(yr.isDebugEnabled||this.debug.enabled)&&this.debug.logger(n,this.debug.name,o,m)}on(n,o){Ri(o),n=Array.isArray(n)?n:[n];for(const m of n)Lr(m),Yr(this,m).add(o),this.logIfDebugEnabled("subscribe",m,void 0),mo(m)||this.emit(Wi,{eventName:m,listener:o});return this.off.bind(this,n,o)}off(n,o){Ri(o),n=Array.isArray(n)?n:[n];for(const m of n)Lr(m),Yr(this,m).delete(o),this.logIfDebugEnabled("unsubscribe",m,void 0),mo(m)||this.emit(Vi,{eventName:m,listener:o})}once(n){return new Promise(o=>{const m=this.on(n,y=>{m(),o(y)})})}events(n){n=Array.isArray(n)?n:[n];for(const o of n)Lr(o);return Es(this,n)}async emit(n,o){Lr(n),this.logIfDebugEnabled("emit",n,o),_2(this,n,o);const m=Yr(this,n),y=ur.get(this),S=[...m],F=mo(n)?[]:[...y];await Ns,await Promise.all([...S.map(async L=>{if(m.has(L))return L(o)}),...F.map(async L=>{if(y.has(L))return L(n,o)})])}async emitSerial(n,o){Lr(n),this.logIfDebugEnabled("emitSerial",n,o);const m=Yr(this,n),y=ur.get(this),S=[...m],F=[...y];await Ns;for(const L of S)m.has(L)&&await L(o);for(const L of F)y.has(L)&&await L(n,o)}onAny(n){return Ri(n),this.logIfDebugEnabled("subscribeAny",void 0,void 0),ur.get(this).add(n),this.emit(Wi,{listener:n}),this.offAny.bind(this,n)}anyEvent(){return Es(this)}offAny(n){Ri(n),this.logIfDebugEnabled("unsubscribeAny",void 0,void 0),this.emit(Vi,{listener:n}),ur.get(this).delete(n)}clearListeners(n){n=Array.isArray(n)?n:[n];for(const o of n)if(this.logIfDebugEnabled("clear",o,void 0),typeof o=="string"||typeof o=="symbol"){Yr(this,o).clear();const m=Br(this,o);for(const y of m)y.finish();m.clear()}else{ur.get(this).clear();for(const m of Xi.get(this).values())m.clear();for(const m of Mr.get(this).values()){for(const y of m)y.finish();m.clear()}}}listenerCount(n){n=Array.isArray(n)?n:[n];let o=0;for(const m of n){if(typeof m=="string"){o+=ur.get(this).size+Yr(this,m).size+Br(this,m).size+Br(this).size;continue}typeof m!="undefined"&&Lr(m),o+=ur.get(this).size;for(const y of Xi.get(this).values())o+=y.size;for(const y of Mr.get(this).values())o+=y.size}return o}bindMethods(n,o){if(typeof n!="object"||n===null)throw new TypeError("`target` must be an object");o=ks(o);for(const m of o){if(n[m]!==void 0)throw new Error(`The property \`${m}\` already exists on \`target\``);Object.defineProperty(n,m,{enumerable:!1,value:this[m].bind(this)})}}}const Js=Object.getOwnPropertyNames(yr.prototype).filter(i=>i!=="constructor");Object.defineProperty(yr,"listenerAdded",{value:Wi,writable:!1,enumerable:!0,configurable:!1}),Object.defineProperty(yr,"listenerRemoved",{value:Vi,writable:!1,enumerable:!0,configurable:!1});var Us=yr,gr=(i=>(i[i.INIT=0]="INIT",i[i.FORWARD=1]="FORWARD",i[i.TERMINATE=2]="TERMINATE",i))(gr||{});function Ks(i){return[ImageBitmap,ReadableStream,WritableStream].some(n=>i instanceof n)}let Q2=0;function po(i,n,o,m,y){const S=Q2++;return i.postMessage({id:S,type:n,functionName:o,args:m},m.filter(F=>Ks(F))),new Promise(F=>{y.set(S,F)})}async function D2(i,n,o){const m=new n;if(m.addEventListener("message",({data:y})=>{var S;(S=o.get(y.id))==null||S(y.result),o.delete(y.id)}),!await po(m,gr.INIT,"",[i.workerId],o))throw"Failed to instantiate workerized class";return m}async function $2(i,n,o){const m={};return Object.getOwnPropertyNames(i.prototype).forEach(y=>{m[y]=(...S)=>po(n,gr.FORWARD,y,S,o)}),m.terminate=async(...y)=>{const S=await po(n,gr.TERMINATE,"",y,o);return n.terminate(),m.worker=void 0,S},m.worker=n,m}async function q2(i,n){const o=new Map,m=await D2(i,n,o);return $2(i,m,o)}function bo(i,n){const{id:o}=i,m=Array.isArray(n)?n:[n];postMessage({id:o,result:n},m.filter(y=>Ks(y)))}async function tc(i,n){const{functionName:o,args:m}=i;if(!n.instance)throw"instance not initialized";if(!o)throw"missing function name to call";if(!n.instance[o])throw`undefined function [${o}] in class ${n.instance.constructor.workerId}`;bo(i,await n.instance[o](...m!=null?m:[]))}function Ms(){return typeof WorkerGlobalScope<"u"&&self instanceof WorkerGlobalScope}const Bs={};function ec(i,n){n.workerId=i,Ms()&&(Bs[n.workerId]=n)}function nc(i,n){if(!i.args)throw"Missing className while initializing worker";const[o]=i.args,m=Bs[o];if(m)n.instance=new m(i.args.slice(1));else throw`unknown worker class ${o}`;bo(i,typeof n.instance!==void 0)}async function rc(i,n){const{args:o}=i;if(!n.instance)throw"instance not initialized";let m;n.instance.terminate&&(m=await n.instance.terminate(...o!=null?o:[])),bo(i,m)}function ic(){const i={};onmessage=async n=>{const o=n.data;switch(o.type){case gr.INIT:nc(o,i);break;case gr.FORWARD:tc(o,i);break;case gr.TERMINATE:rc(o,i);break}}}Ms()&&ic();class As{static async createVideoReadable(n){return new Promise((o,m)=>{const y=document.createElement("video");let S=new AbortController,F=new AbortController;y.addEventListener("canplay",()=>{S.abort(),y.muted=!0,y.loop=!0,y.play().then(()=>{try{const L=y.captureStream(),J=new MediaStreamTrackProcessor(L.getVideoTracks()[0]);o(J.readable)}catch(L){m(L)}})},{once:!0,signal:F.signal}),y.addEventListener("error",L=>{F.abort(),m("loading error:"+L)},{once:!0,signal:S.signal}),y.crossOrigin="anonymous",y.src=n})}static async createImageCanvas(n){const m=await(await fetch(n)).blob();return await createImageBitmap(m)}}/* @license twgl.js 5.0.4 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,Ar=5121,go=5122,Zo=5123,vo=5124,Go=5125,Xo=5126,$2=32819,q2=32820,tc=33635,ec=5131,nc=33640,rc=35899,ic=35902,oc=36269,sc=34042,Ms={};{const i=Ms;i[yo]=Int8Array,i[Ar]=Uint8Array,i[go]=Int16Array,i[Zo]=Uint16Array,i[vo]=Int32Array,i[Go]=Uint32Array,i[Xo]=Float32Array,i[$2]=Uint16Array,i[q2]=Uint16Array,i[tc]=Uint16Array,i[ec]=Uint16Array,i[nc]=Uint32Array,i[rc]=Uint32Array,i[ic]=Uint32Array,i[oc]=Uint32Array,i[sc]=Uint32Array}function Wo(i){if(i instanceof Int8Array)return yo;if(i instanceof Uint8Array||i instanceof Uint8ClampedArray)return Ar;if(i instanceof Int16Array)return go;if(i instanceof Uint16Array)return Zo;if(i instanceof Int32Array)return vo;if(i instanceof Uint32Array)return Go;if(i instanceof Float32Array)return Xo;throw new Error("unsupported typed array type")}function lc(i){if(i===Int8Array)return yo;if(i===Uint8Array||i===Uint8ClampedArray)return Ar;if(i===Int16Array)return go;if(i===Uint16Array)return Zo;if(i===Int32Array)return vo;if(i===Uint32Array)return Go;if(i===Float32Array)return Xo;throw new Error("unsupported typed array type")}function uc(i){const n=Ms[i];if(!n)throw new Error("unknown gl type");return n}const Ri=typeof SharedArrayBuffer!="undefined"?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 As(...i){console.error(...i)}const js=new Map;function jr(i,n){if(!i||typeof i!="object")return!1;let o=js.get(n);o||(o=new WeakMap,js.set(n,o));let p=o.get(i);if(p===void 0){const y=Object.prototype.toString.call(i);p=y.substring(8,y.length-1)===n,o.set(i,p)}return p}function cc(i,n){return typeof WebGLBuffer!="undefined"&&jr(n,"WebGLBuffer")}function ac(i,n){return typeof WebGLRenderbuffer!="undefined"&&jr(n,"WebGLRenderbuffer")}function dc(i,n){return typeof WebGLShader!="undefined"&&jr(n,"WebGLShader")}function Vo(i,n){return typeof WebGLTexture!="undefined"&&jr(n,"WebGLTexture")}function hc(i,n){return typeof WebGLSampler!="undefined"&&jr(n,"WebGLSampler")}const zs=35044,Zr=34962,fc=34963,mc=34660,pc=5120,bc=5121,yc=5122,gc=5123,Zc=5124,vc=5125,Gc=5126,Ps={attribPrefix:""};function Xc(i,n,o,p,y){i.bindBuffer(n,o),i.bufferData(n,p,y||zs)}function Os(i,n,o,p){if(cc(i,n))return n;o=o||Zr;const y=i.createBuffer();return Xc(i,o,y,n,p),y}function _s(i){return i==="indices"}function Wc(i){return i instanceof Int8Array||i instanceof Uint8Array}function Vc(i){return i===Int8Array||i===Uint8Array}function Rc(i){return i.length?i:i.data}const xc=/coord|texture/i,Ic=/color|colour/i;function Qs(i,n){let o;if(xc.test(i)?o=2:Ic.test(i)?o=4:o=3,n%o>0)throw new Error(`Can not guess numComponents for attribute '${i}'. Tried ${o} but ${n} values is not evenly divisible by ${o}. You should specify it.`);return o}function Sc(i,n){return i.numComponents||i.size||Qs(n,Rc(i).length)}function Ds(i,n){if(Ri(i))return i;if(Ri(i.data))return i.data;Array.isArray(i)&&(i={data:i});let o=i.type;return o||(_s(n)?o=Uint16Array:o=Float32Array),new o(i.data)}function Lc(i,n){const o={};return Object.keys(n).forEach(function(p){if(!_s(p)){const y=n[p],S=y.attrib||y.name||y.attribName||Ps.attribPrefix+p;if(y.value){if(!Array.isArray(y.value)&&!Ri(y.value))throw new Error("array.value is not array or typedarray");o[S]={value:y.value}}else{let F,T,k,rt;if(y.buffer&&y.buffer instanceof WebGLBuffer)F=y.buffer,rt=y.numComponents||y.size,T=y.type,k=y.normalize;else if(typeof y=="number"||typeof y.data=="number"){const z=y.data||y,st=y.type||Float32Array,Gt=z*st.BYTES_PER_ELEMENT;T=lc(st),k=y.normalize!==void 0?y.normalize:Vc(st),rt=y.numComponents||y.size||Qs(p,z),F=i.createBuffer(),i.bindBuffer(Zr,F),i.bufferData(Zr,Gt,y.drawType||zs)}else{const z=Ds(y,p);F=Os(i,z,void 0,y.drawType),T=Wo(z),k=y.normalize!==void 0?y.normalize:Wc(z),rt=Sc(y,p)}o[S]={buffer:F,numComponents:rt,type:T,normalize:k,stride:y.stride||0,offset:y.offset||0,divisor:y.divisor===void 0?void 0:y.divisor,drawType:y.drawType}}}}),i.bindBuffer(Zr,null),o}function Tc(i,n){return n===pc||n===bc?1:n===yc||n===gc?2:n===Zc||n===vc||n===Gc?4:0}const Ro=["position","positions","a_position"];function Yc(i,n){let o,p;for(p=0;p<Ro.length&&(o=Ro[p],!(o in n||(o=Ps.attribPrefix+o,o in n)));++p);p===Ro.length&&(o=Object.keys(n)[0]);const y=n[o];if(!y.buffer)return 1;i.bindBuffer(Zr,y.buffer);const S=i.getBufferParameter(Zr,mc);i.bindBuffer(Zr,null);const F=Tc(i,y.type),T=S/F,k=y.numComponents||y.size,rt=T/k;if(rt%1!==0)throw new Error(`numComponents ${k} not correct for length ${length}`);return rt}function wc(i,n,o){const p=Lc(i,n),y=Object.assign({},o||{});y.attribs=Object.assign({},o?o.attribs:{},p);const S=n.indices;if(S){const F=Ds(S,"indices");y.indices=Os(i,F,fc),y.numElements=F.length,y.elementType=Wo(F)}else y.numElements||(y.numElements=Yc(i,y.attribs));return y}function zr(i){return!!i.texStorage2D}const $s=function(){const i={},n={};function o(p){const y=p.constructor.name;if(!i[y]){for(const S in p)if(typeof p[S]=="number"){const F=n[p[S]];n[p[S]]=F?`${F} | ${S}`:S}i[y]=!0}}return function(y,S){return o(y),n[S]||(typeof S=="number"?`0x${S.toString(16)}`:S)}}(),cr={textureColor:new Uint8Array([128,192,255,255]),textureOptions:{},crossOrigin:void 0},Pr=Ri,qs=function(){let i;return function(){return i=i||(typeof document!="undefined"&&document.createElement?document.createElement("canvas").getContext("2d"):null),i}}(),tl=6406,rr=6407,vn=6408,el=6409,nl=6410,Or=6402,rl=34041,xi=33071,Fc=9728,Hc=9729,ar=3553,dr=34067,vr=32879,Gr=35866,xo=34069,Cc=34070,Nc=34071,Jc=34072,Ec=34073,kc=34074,Io=10241,So=10240,Ii=10242,Si=10243,il=32882,Uc=33082,Kc=33083,Bc=33084,Mc=33085,Lo=3317,ol=3314,sl=32878,ll=3316,ul=3315,cl=32877,Ac=37443,jc=37441,zc=37440,Pc=33321,Oc=36756,_c=33325,Qc=33326,Dc=33330,$c=33329,qc=33338,t1=33337,e1=33340,n1=33339,r1=33323,i1=36757,o1=33327,s1=33328,l1=33336,u1=33335,c1=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,L1=36759,T1=32855,Y1=32854,w1=32857,F1=34842,H1=34836,C1=36220,N1=36238,J1=36975,E1=36214,k1=36232,U1=36226,K1=36208,B1=33189,M1=33190,A1=36012,j1=36013,z1=35056,hr=5120,yn=5121,Li=5122,wr=5123,Ti=5124,Xr=5125,Bn=5126,al=32819,dl=32820,hl=33635,tr=5131,_r=36193,To=33640,P1=35899,O1=35902,_1=36269,Q1=34042,Yi=33319,Fr=33320,wi=6403,Hr=36244,Cr=36248,Wr=36249;let Yo;function Fi(i){if(!Yo){const n={};n[tl]={textureFormat:tl,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[1,2,2,4],type:[yn,tr,_r,Bn]},n[el]={textureFormat:el,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[1,2,2,4],type:[yn,tr,_r,Bn]},n[nl]={textureFormat:nl,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[2,4,4,8],type:[yn,tr,_r,Bn]},n[rr]={textureFormat:rr,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[3,6,6,12,2],type:[yn,tr,_r,Bn,hl]},n[vn]={textureFormat:vn,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[4,8,8,16,2,2],type:[yn,tr,_r,Bn,al,dl]},n[Or]={textureFormat:Or,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[2,4],type:[Xr,wr]},n[Pc]={textureFormat:wi,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[1],type:[yn]},n[Oc]={textureFormat:wi,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[1],type:[hr]},n[_c]={textureFormat:wi,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[4,2],type:[Bn,tr]},n[Qc]={textureFormat:wi,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[4],type:[Bn]},n[Dc]={textureFormat:Hr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[1],type:[yn]},n[$c]={textureFormat:Hr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[1],type:[hr]},n[c1]={textureFormat:Hr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[2],type:[wr]},n[a1]={textureFormat:Hr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[2],type:[Li]},n[d1]={textureFormat:Hr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[Xr]},n[h1]={textureFormat:Hr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[Ti]},n[r1]={textureFormat:Yi,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[2],type:[yn]},n[i1]={textureFormat:Yi,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[2],type:[hr]},n[o1]={textureFormat:Yi,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[8,4],type:[Bn,tr]},n[s1]={textureFormat:Yi,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[8],type:[Bn]},n[l1]={textureFormat:Fr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[2],type:[yn]},n[u1]={textureFormat:Fr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[2],type:[hr]},n[qc]={textureFormat:Fr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[wr]},n[t1]={textureFormat:Fr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[Li]},n[e1]={textureFormat:Fr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[8],type:[Xr]},n[n1]={textureFormat:Fr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[8],type:[Ti]},n[f1]={textureFormat:rr,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[3],type:[yn]},n[m1]={textureFormat:rr,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[3],type:[yn]},n[p1]={textureFormat:rr,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[3,2],type:[yn,hl]},n[b1]={textureFormat:rr,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[3],type:[hr]},n[y1]={textureFormat:rr,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[12,6,4],type:[Bn,tr,P1]},n[g1]={textureFormat:rr,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[12,6,4],type:[Bn,tr,O1]},n[Z1]={textureFormat:rr,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[12,6],type:[Bn,tr]},n[v1]={textureFormat:rr,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[12],type:[Bn]},n[G1]={textureFormat:Cr,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[3],type:[yn]},n[X1]={textureFormat:Cr,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[3],type:[hr]},n[W1]={textureFormat:Cr,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[6],type:[wr]},n[V1]={textureFormat:Cr,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[6],type:[Li]},n[R1]={textureFormat:Cr,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[12],type:[Xr]},n[x1]={textureFormat:Cr,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[12],type:[Ti]},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[L1]={textureFormat:vn,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[4],type:[hr]},n[T1]={textureFormat:vn,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[4,2,4],type:[yn,dl,To]},n[Y1]={textureFormat:vn,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[4,2],type:[yn,al]},n[w1]={textureFormat:vn,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[4],type:[To]},n[F1]={textureFormat:vn,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[16,8],type:[Bn,tr]},n[H1]={textureFormat:vn,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[16],type:[Bn]},n[C1]={textureFormat:Wr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[yn]},n[N1]={textureFormat:Wr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[hr]},n[J1]={textureFormat:Wr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[To]},n[E1]={textureFormat:Wr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[8],type:[wr]},n[k1]={textureFormat:Wr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[8],type:[Li]},n[U1]={textureFormat:Wr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[16],type:[Ti]},n[K1]={textureFormat:Wr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[16],type:[Xr]},n[B1]={textureFormat:Or,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[2,4],type:[wr,Xr]},n[M1]={textureFormat:Or,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[Xr]},n[A1]={textureFormat:Or,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[Bn]},n[z1]={textureFormat:rl,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[Q1]},n[j1]={textureFormat:rl,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[_1]},Object.keys(n).forEach(function(o){const p=n[o];p.bytesPerElementMap={},p.bytesPerElement.forEach(function(y,S){const F=p.type[S];p.bytesPerElementMap[F]=y})}),Yo=n}return Yo[i]}function D1(i,n){const o=Fi(i);if(!o)throw"unknown internal format";const p=o.bytesPerElementMap[n];if(p===void 0)throw"unknown internal format";return p}function Qr(i){const n=Fi(i);if(!n)throw"unknown internal format";return{format:n.textureFormat,type:n.type[0]}}function fl(i){return(i&i-1)===0}function $1(i,n,o,p){if(!zr(i))return fl(n)&&fl(o);const y=Fi(p);if(!y)throw"unknown internal format";return y.colorRenderable&&y.textureFilterable}function q1(i){const n=Fi(i);if(!n)throw"unknown internal format";return n.textureFilterable}function ta(i,n,o){return Pr(n)?Wo(n):o||yn}function Hi(i,n,o,p,y){if(y%1!==0)throw"can't guess dimensions";if(!o&&!p){const S=Math.sqrt(y/(n===dr?6:1));S%1===0?(o=S,p=S):(o=y,p=1)}else if(p){if(!o&&(o=y/p,o%1))throw"can't guess dimensions"}else if(p=y/o,p%1)throw"can't guess dimensions";return{width:o,height:p}}function Nr(i,n){n.colorspaceConversion!==void 0&&i.pixelStorei(Ac,n.colorspaceConversion),n.premultiplyAlpha!==void 0&&i.pixelStorei(jc,n.premultiplyAlpha),n.flipY!==void 0&&i.pixelStorei(zc,n.flipY)}function ml(i){i.pixelStorei(Lo,4),zr(i)&&(i.pixelStorei(ol,0),i.pixelStorei(sl,0),i.pixelStorei(ll,0),i.pixelStorei(ul,0),i.pixelStorei(cl,0))}function ea(i,n,o,p){p.minMag&&(o.call(i,n,Io,p.minMag),o.call(i,n,So,p.minMag)),p.min&&o.call(i,n,Io,p.min),p.mag&&o.call(i,n,So,p.mag),p.wrap&&(o.call(i,n,Ii,p.wrap),o.call(i,n,Si,p.wrap),(n===vr||hc(i,n))&&o.call(i,n,il,p.wrap)),p.wrapR&&o.call(i,n,il,p.wrapR),p.wrapS&&o.call(i,n,Ii,p.wrapS),p.wrapT&&o.call(i,n,Si,p.wrapT),p.minLod&&o.call(i,n,Uc,p.minLod),p.maxLod&&o.call(i,n,Kc,p.maxLod),p.baseLevel&&o.call(i,n,Bc,p.baseLevel),p.maxLevel&&o.call(i,n,Mc,p.maxLevel)}function pl(i,n,o){const p=o.target||ar;i.bindTexture(p,n),ea(i,p,i.texParameteri,o)}function na(i){return i=i||cr.textureColor,Pr(i)?i:new Uint8Array([i[0]*255,i[1]*255,i[2]*255,i[3]*255])}function wo(i,n,o,p,y,S){o=o||cr.textureOptions,S=S||vn;const F=o.target||ar;if(p=p||o.width,y=y||o.height,i.bindTexture(F,n),$1(i,p,y,S))i.generateMipmap(F);else{const T=q1(S)?Hc:Fc;i.texParameteri(F,Io,T),i.texParameteri(F,So,T),i.texParameteri(F,Ii,xi),i.texParameteri(F,Si,xi)}}function Dr(i){return i.auto===!0||i.auto===void 0&&i.level===void 0}function Fo(i,n){return n=n||{},n.cubeFaceOrder||[xo,Cc,Nc,Jc,Ec,kc]}function Ho(i,n){const p=Fo(i,n).map(function(y,S){return{face:y,ndx:S}});return p.sort(function(y,S){return y.face-S.face}),p}function bl(i,n,o,p){p=p||cr.textureOptions;const y=p.target||ar,S=p.level||0;let F=o.width,T=o.height;const k=p.internalFormat||p.format||vn,rt=Qr(k),z=p.format||rt.format,st=p.type||rt.type;if(Nr(i,p),i.bindTexture(y,n),y===dr){const Gt=o.width,Vt=o.height;let dt,ht;if(Gt/6===Vt)dt=Vt,ht=[0,0,1,0,2,0,3,0,4,0,5,0];else if(Vt/6===Gt)dt=Gt,ht=[0,0,0,1,0,2,0,3,0,4,0,5];else if(Gt/3===Vt/2)dt=Gt/3,ht=[0,0,1,0,2,0,0,1,1,1,2,1];else if(Gt/2===Vt/3)dt=Gt/2,ht=[0,0,1,0,0,1,1,1,0,2,1,2];else throw"can't figure out cube map from element: "+(o.src?o.src:o.nodeName);const Yt=qs();Yt?(Yt.canvas.width=dt,Yt.canvas.height=dt,F=dt,T=dt,Ho(i,p).forEach(function(Ft){const Mt=ht[Ft.ndx*2+0]*dt,_=ht[Ft.ndx*2+1]*dt;Yt.drawImage(o,Mt,_,dt,dt,0,0,dt,dt),i.texImage2D(Ft.face,S,k,z,st,Yt.canvas)}),Yt.canvas.width=1,Yt.canvas.height=1):typeof createImageBitmap!="undefined"&&(F=dt,T=dt,Ho(i,p).forEach(function(Ft){const Mt=ht[Ft.ndx*2+0]*dt,_=ht[Ft.ndx*2+1]*dt;i.texImage2D(Ft.face,S,k,dt,dt,0,z,st,null),createImageBitmap(o,Mt,_,dt,dt,{premultiplyAlpha:"none",colorSpaceConversion:"none"}).then(function(Ae){Nr(i,p),i.bindTexture(y,n),i.texImage2D(Ft.face,S,k,z,st,Ae),Dr(p)&&wo(i,n,p,F,T,k)})}))}else if(y===vr||y===Gr){const Gt=Math.min(o.width,o.height),Vt=Math.max(o.width,o.height),dt=Vt/Gt;if(dt%1!==0)throw"can not compute 3D dimensions of element";const ht=o.width===Vt?1:0,Yt=o.height===Vt?1:0;i.pixelStorei(Lo,1),i.pixelStorei(ol,o.width),i.pixelStorei(sl,0),i.pixelStorei(cl,0),i.texImage3D(y,S,k,Gt,Gt,Gt,0,z,st,null);for(let Ft=0;Ft<dt;++Ft){const Mt=Ft*Gt*ht,_=Ft*Gt*Yt;i.pixelStorei(ll,Mt),i.pixelStorei(ul,_),i.texSubImage3D(y,S,0,0,Ft,Gt,Gt,1,z,st,o)}ml(i)}else i.texImage2D(y,S,k,z,st,o);Dr(p)&&wo(i,n,p,F,T,k),pl(i,n,p)}function $r(){}function ra(i){if(typeof document!="undefined"){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,o){o=o||$r;let p;if(n=n!==void 0?n:cr.crossOrigin,n=ia(i,n),typeof Image!="undefined"){p=new Image,n!==void 0&&(p.crossOrigin=n);const y=function(){p.removeEventListener("error",S),p.removeEventListener("load",F),p=null},S=function(){const k="couldn't load image: "+i;As(k),o(k,p),y()},F=function(){o(null,p),y()};return p.addEventListener("error",S),p.addEventListener("load",F),p.src=i,p}else if(typeof ImageBitmap!="undefined"){let y,S;const F=function(){o(y,S)},T={};n&&(T.mode="cors"),fetch(i,T).then(function(k){if(!k.ok)throw k;return k.blob()}).then(function(k){return createImageBitmap(k,{premultiplyAlpha:"none",colorSpaceConversion:"none"})}).then(function(k){S=k,setTimeout(F)}).catch(function(k){y=k,setTimeout(F)}),p=null}return p}function yl(i){return typeof ImageBitmap!="undefined"&&i instanceof ImageBitmap||typeof ImageData!="undefined"&&i instanceof ImageData||typeof HTMLElement!="undefined"&&i instanceof HTMLElement}function Co(i,n,o){return yl(i)?(setTimeout(function(){o(null,i)}),i):oa(i,n,o)}function No(i,n,o){o=o||cr.textureOptions;const p=o.target||ar;if(i.bindTexture(p,n),o.color===!1)return;const y=na(o.color);if(p===dr)for(let S=0;S<6;++S)i.texImage2D(xo+S,0,vn,1,1,0,vn,yn,y);else p===vr||p===Gr?i.texImage3D(p,0,vn,1,1,1,0,vn,yn,y):i.texImage2D(p,0,vn,1,1,0,vn,yn,y)}function sa(i,n,o,p){return p=p||$r,o=o||cr.textureOptions,No(i,n,o),o=Object.assign({},o),Co(o.src,o.crossOrigin,function(S,F){S?p(S,n,F):(bl(i,n,F,o),p(null,n,F))})}function la(i,n,o,p){p=p||$r;const y=o.src;if(y.length!==6)throw"there must be 6 urls for a cubemap";const S=o.level||0,F=o.internalFormat||o.format||vn,T=Qr(F),k=o.format||T.format,rt=o.type||yn,z=o.target||ar;if(z!==dr)throw"target must be TEXTURE_CUBE_MAP";No(i,n,o),o=Object.assign({},o);let st=6;const Gt=[],Vt=Fo(i,o);let dt;function ht(Yt){return function(Ft,Mt){--st,Ft?Gt.push(Ft):Mt.width!==Mt.height?Gt.push("cubemap face img is not a square: "+Mt.src):(Nr(i,o),i.bindTexture(z,n),st===5?Fo().forEach(function(_){i.texImage2D(_,S,F,k,rt,Mt)}):i.texImage2D(Yt,S,F,k,rt,Mt),Dr(o)&&i.generateMipmap(z)),st===0&&p(Gt.length?Gt:void 0,n,dt)}}dt=y.map(function(Yt,Ft){return Co(Yt,o.crossOrigin,ht(Vt[Ft]))})}function ua(i,n,o,p){p=p||$r;const y=o.src,S=o.internalFormat||o.format||vn,F=Qr(S),T=o.format||F.format,k=o.type||yn,rt=o.target||Gr;if(rt!==vr&&rt!==Gr)throw"target must be TEXTURE_3D or TEXTURE_2D_ARRAY";No(i,n,o),o=Object.assign({},o);let z=y.length;const st=[];let Gt;const Vt=o.level||0;let dt=o.width,ht=o.height;const Yt=y.length;let Ft=!0;function Mt(_){return function(Ae,un){if(--z,Ae)st.push(Ae);else{if(Nr(i,o),i.bindTexture(rt,n),Ft){Ft=!1,dt=o.width||un.width,ht=o.height||un.height,i.texImage3D(rt,Vt,S,dt,ht,Yt,0,T,k,null);for(let We=0;We<Yt;++We)i.texSubImage3D(rt,Vt,0,0,We,dt,ht,1,T,k,un)}else{let We=un,Dt;(un.width!==dt||un.height!==ht)&&(Dt=qs(),We=Dt.canvas,Dt.canvas.width=dt,Dt.canvas.height=ht,Dt.drawImage(un,0,0,dt,ht)),i.texSubImage3D(rt,Vt,0,0,_,dt,ht,1,T,k,We),Dt&&We===Dt.canvas&&(Dt.canvas.width=0,Dt.canvas.height=0)}Dr(o)&&i.generateMipmap(rt)}z===0&&p(st.length?st:void 0,n,Gt)}}Gt=y.map(function(_,Ae){return Co(_,o.crossOrigin,Mt(Ae))})}function ca(i,n,o,p){p=p||cr.textureOptions;const y=p.target||ar;i.bindTexture(y,n);let S=p.width,F=p.height,T=p.depth;const k=p.level||0,rt=p.internalFormat||p.format||vn,z=Qr(rt),st=p.format||z.format,Gt=p.type||ta(i,o,z.type);if(Pr(o))o instanceof Uint8ClampedArray&&(o=new Uint8Array(o.buffer));else{const Yt=uc(Gt);o=new Yt(o)}const Vt=D1(rt,Gt),dt=o.byteLength/Vt;if(dt%1)throw"length wrong size for format: "+$s(i,st);let ht;if(y===vr||y===Gr)if(!S&&!F&&!T){const Yt=Math.cbrt(dt);if(Yt%1!==0)throw"can't guess cube size of array of numElements: "+dt;S=Yt,F=Yt,T=Yt}else S&&(!F||!T)?(ht=Hi(i,y,F,T,dt/S),F=ht.width,T=ht.height):F&&(!S||!T)?(ht=Hi(i,y,S,T,dt/F),S=ht.width,T=ht.height):(ht=Hi(i,y,S,F,dt/T),S=ht.width,F=ht.height);else ht=Hi(i,y,S,F,dt),S=ht.width,F=ht.height;if(ml(i),i.pixelStorei(Lo,p.unpackAlignment||1),Nr(i,p),y===dr){const Yt=Vt/o.BYTES_PER_ELEMENT,Ft=dt/6*Yt;Ho(i,p).forEach(Mt=>{const _=Ft*Mt.ndx,Ae=o.subarray(_,_+Ft);i.texImage2D(Mt.face,k,rt,S,F,0,st,Gt,Ae)})}else y===vr||y===Gr?i.texImage3D(y,k,rt,S,F,T,0,st,Gt,o):i.texImage2D(y,k,rt,S,F,0,st,Gt,o);return{width:S,height:F,depth:T,type:Gt}}function aa(i,n,o){const p=o.target||ar;i.bindTexture(p,n);const y=o.level||0,S=o.internalFormat||o.format||vn,F=Qr(S),T=o.format||F.format,k=o.type||F.type;if(Nr(i,o),p===dr)for(let rt=0;rt<6;++rt)i.texImage2D(xo+rt,y,S,o.width,o.height,0,T,k,null);else p===vr||p===Gr?i.texImage3D(p,y,S,o.width,o.height,o.depth,0,T,k,null):i.texImage2D(p,y,S,o.width,o.height,0,T,k,null)}function gl(i,n,o){o=o||$r,n=n||cr.textureOptions;const p=i.createTexture(),y=n.target||ar;let S=n.width||1,F=n.height||1;const T=n.internalFormat||vn;i.bindTexture(y,p),y===dr&&(i.texParameteri(y,Ii,xi),i.texParameteri(y,Si,xi));let k=n.src;if(k)if(typeof k=="function"&&(k=k(i,n)),typeof k=="string")sa(i,p,n,o);else if(Pr(k)||Array.isArray(k)&&(typeof k[0]=="number"||Array.isArray(k[0])||Pr(k[0]))){const rt=ca(i,p,k,n);S=rt.width,F=rt.height}else Array.isArray(k)&&(typeof k[0]=="string"||yl(k[0]))?y===dr?la(i,p,n,o):ua(i,p,n,o):(bl(i,p,k,n),S=k.width,F=k.height);else aa(i,p,n);return Dr(n)&&wo(i,p,n,S,F,T),pl(i,p,n),p}const Ci=As;function Zl(i){return typeof document!="undefined"&&document.getElementById?document.getElementById(i):null}const Ni=33984,Ji=34962,da=34963,ha=35713,fa=35714,ma=35632,pa=35633,ba=35981,vl=35718,ya=35721,ga=35971,Za=35382,va=35396,Ga=35398,Xa=35392,Wa=35395,Ei=5126,Gl=35664,Xl=35665,Wl=35666,Jo=5124,Vl=35667,Rl=35668,xl=35669,Il=35670,Sl=35671,Ll=35672,Tl=35673,Yl=35674,wl=35675,Fl=35676,Va=35678,Ra=35680,xa=35679,Ia=35682,Sa=35685,La=35686,Ta=35687,Ya=35688,wa=35689,Fa=35690,Ha=36289,Ca=36292,Na=36293,Eo=5125,Hl=36294,Cl=36295,Nl=36296,Ja=36298,Ea=36299,ka=36300,Ua=36303,Ka=36306,Ba=36307,Ma=36308,Aa=36311,ki=3553,Ui=34067,ko=32879,Ki=35866,pe={};function Jl(i,n){return pe[n].bindPoint}function ja(i,n){return function(o){i.uniform1f(n,o)}}function za(i,n){return function(o){i.uniform1fv(n,o)}}function Pa(i,n){return function(o){i.uniform2fv(n,o)}}function Oa(i,n){return function(o){i.uniform3fv(n,o)}}function _a(i,n){return function(o){i.uniform4fv(n,o)}}function El(i,n){return function(o){i.uniform1i(n,o)}}function kl(i,n){return function(o){i.uniform1iv(n,o)}}function Ul(i,n){return function(o){i.uniform2iv(n,o)}}function Kl(i,n){return function(o){i.uniform3iv(n,o)}}function Bl(i,n){return function(o){i.uniform4iv(n,o)}}function Qa(i,n){return function(o){i.uniform1ui(n,o)}}function Da(i,n){return function(o){i.uniform1uiv(n,o)}}function $a(i,n){return function(o){i.uniform2uiv(n,o)}}function qa(i,n){return function(o){i.uniform3uiv(n,o)}}function t0(i,n){return function(o){i.uniform4uiv(n,o)}}function e0(i,n){return function(o){i.uniformMatrix2fv(n,!1,o)}}function n0(i,n){return function(o){i.uniformMatrix3fv(n,!1,o)}}function r0(i,n){return function(o){i.uniformMatrix4fv(n,!1,o)}}function i0(i,n){return function(o){i.uniformMatrix2x3fv(n,!1,o)}}function o0(i,n){return function(o){i.uniformMatrix3x2fv(n,!1,o)}}function s0(i,n){return function(o){i.uniformMatrix2x4fv(n,!1,o)}}function l0(i,n){return function(o){i.uniformMatrix4x2fv(n,!1,o)}}function u0(i,n){return function(o){i.uniformMatrix3x4fv(n,!1,o)}}function c0(i,n){return function(o){i.uniformMatrix4x3fv(n,!1,o)}}function zn(i,n,o,p){const y=Jl(i,n);return zr(i)?function(S){let F,T;Vo(i,S)?(F=S,T=null):(F=S.texture,T=S.sampler),i.uniform1i(p,o),i.activeTexture(Ni+o),i.bindTexture(y,F),i.bindSampler(o,T)}:function(S){i.uniform1i(p,o),i.activeTexture(Ni+o),i.bindTexture(y,S)}}function Pn(i,n,o,p,y){const S=Jl(i,n),F=new Int32Array(y);for(let T=0;T<y;++T)F[T]=o+T;return zr(i)?function(T){i.uniform1iv(p,F),T.forEach(function(k,rt){i.activeTexture(Ni+F[rt]);let z,st;Vo(i,k)?(z=k,st=null):(z=k.texture,st=k.sampler),i.bindSampler(o,st),i.bindTexture(S,z)})}:function(T){i.uniform1iv(p,F),T.forEach(function(k,rt){i.activeTexture(Ni+F[rt]),i.bindTexture(S,k)})}}pe[Ei]={Type:Float32Array,size:4,setter:ja,arraySetter:za},pe[Gl]={Type:Float32Array,size:8,setter:Pa,cols:2},pe[Xl]={Type:Float32Array,size:12,setter:Oa,cols:3},pe[Wl]={Type:Float32Array,size:16,setter:_a,cols:4},pe[Jo]={Type:Int32Array,size:4,setter:El,arraySetter:kl},pe[Vl]={Type:Int32Array,size:8,setter:Ul,cols:2},pe[Rl]={Type:Int32Array,size:12,setter:Kl,cols:3},pe[xl]={Type:Int32Array,size:16,setter:Bl,cols:4},pe[Eo]={Type:Uint32Array,size:4,setter:Qa,arraySetter:Da},pe[Hl]={Type:Uint32Array,size:8,setter:$a,cols:2},pe[Cl]={Type:Uint32Array,size:12,setter:qa,cols:3},pe[Nl]={Type:Uint32Array,size:16,setter:t0,cols:4},pe[Il]={Type:Uint32Array,size:4,setter:El,arraySetter:kl},pe[Sl]={Type:Uint32Array,size:8,setter:Ul,cols:2},pe[Ll]={Type:Uint32Array,size:12,setter:Kl,cols:3},pe[Tl]={Type:Uint32Array,size:16,setter:Bl,cols:4},pe[Yl]={Type:Float32Array,size:32,setter:e0,rows:2,cols:2},pe[wl]={Type:Float32Array,size:48,setter:n0,rows:3,cols:3},pe[Fl]={Type:Float32Array,size:64,setter:r0,rows:4,cols:4},pe[Sa]={Type:Float32Array,size:32,setter:i0,rows:2,cols:3},pe[La]={Type:Float32Array,size:32,setter:s0,rows:2,cols:4},pe[Ta]={Type:Float32Array,size:48,setter:o0,rows:3,cols:2},pe[Ya]={Type:Float32Array,size:48,setter:u0,rows:3,cols:4},pe[wa]={Type:Float32Array,size:64,setter:l0,rows:4,cols:2},pe[Fa]={Type:Float32Array,size:64,setter:c0,rows:4,cols:3},pe[Va]={Type:null,size:0,setter:zn,arraySetter:Pn,bindPoint:ki},pe[Ra]={Type:null,size:0,setter:zn,arraySetter:Pn,bindPoint:Ui},pe[xa]={Type:null,size:0,setter:zn,arraySetter:Pn,bindPoint:ko},pe[Ia]={Type:null,size:0,setter:zn,arraySetter:Pn,bindPoint:ki},pe[Ha]={Type:null,size:0,setter:zn,arraySetter:Pn,bindPoint:Ki},pe[Ca]={Type:null,size:0,setter:zn,arraySetter:Pn,bindPoint:Ki},pe[Na]={Type:null,size:0,setter:zn,arraySetter:Pn,bindPoint:Ui},pe[Ja]={Type:null,size:0,setter:zn,arraySetter:Pn,bindPoint:ki},pe[Ea]={Type:null,size:0,setter:zn,arraySetter:Pn,bindPoint:ko},pe[ka]={Type:null,size:0,setter:zn,arraySetter:Pn,bindPoint:Ui},pe[Ua]={Type:null,size:0,setter:zn,arraySetter:Pn,bindPoint:Ki},pe[Ka]={Type:null,size:0,setter:zn,arraySetter:Pn,bindPoint:ki},pe[Ba]={Type:null,size:0,setter:zn,arraySetter:Pn,bindPoint:ko},pe[Ma]={Type:null,size:0,setter:zn,arraySetter:Pn,bindPoint:Ui},pe[Aa]={Type:null,size:0,setter:zn,arraySetter:Pn,bindPoint:Ki};function Bi(i,n){return function(o){if(o.value)switch(i.disableVertexAttribArray(n),o.value.length){case 4:i.vertexAttrib4fv(n,o.value);break;case 3:i.vertexAttrib3fv(n,o.value);break;case 2:i.vertexAttrib2fv(n,o.value);break;case 1:i.vertexAttrib1fv(n,o.value);break;default:throw new Error("the length of a float constant value must be between 1 and 4!")}else i.bindBuffer(Ji,o.buffer),i.enableVertexAttribArray(n),i.vertexAttribPointer(n,o.numComponents||o.size,o.type||Ei,o.normalize||!1,o.stride||0,o.offset||0),i.vertexAttribDivisor&&i.vertexAttribDivisor(n,o.divisor||0)}}function fr(i,n){return function(o){if(o.value)if(i.disableVertexAttribArray(n),o.value.length===4)i.vertexAttrib4iv(n,o.value);else throw new Error("The length of an integer constant value must be 4!");else i.bindBuffer(Ji,o.buffer),i.enableVertexAttribArray(n),i.vertexAttribIPointer(n,o.numComponents||o.size,o.type||Jo,o.stride||0,o.offset||0),i.vertexAttribDivisor&&i.vertexAttribDivisor(n,o.divisor||0)}}function Mi(i,n){return function(o){if(o.value)if(i.disableVertexAttribArray(n),o.value.length===4)i.vertexAttrib4uiv(n,o.value);else throw new Error("The length of an unsigned integer constant value must be 4!");else i.bindBuffer(Ji,o.buffer),i.enableVertexAttribArray(n),i.vertexAttribIPointer(n,o.numComponents||o.size,o.type||Eo,o.stride||0,o.offset||0),i.vertexAttribDivisor&&i.vertexAttribDivisor(n,o.divisor||0)}}function Uo(i,n,o){const p=o.size,y=o.count;return function(S){i.bindBuffer(Ji,S.buffer);const F=S.size||S.numComponents||p,T=F/y,k=S.type||Ei,z=pe[k].size*F,st=S.normalize||!1,Gt=S.offset||0,Vt=z/y;for(let dt=0;dt<y;++dt)i.enableVertexAttribArray(n+dt),i.vertexAttribPointer(n+dt,T,k,st,z,Gt+Vt*dt),i.vertexAttribDivisor&&i.vertexAttribDivisor(n+dt,S.divisor||0)}}const Yn={};Yn[Ei]={size:4,setter:Bi},Yn[Gl]={size:8,setter:Bi},Yn[Xl]={size:12,setter:Bi},Yn[Wl]={size:16,setter:Bi},Yn[Jo]={size:4,setter:fr},Yn[Vl]={size:8,setter:fr},Yn[Rl]={size:12,setter:fr},Yn[xl]={size:16,setter:fr},Yn[Eo]={size:4,setter:Mi},Yn[Hl]={size:8,setter:Mi},Yn[Cl]={size:12,setter:Mi},Yn[Nl]={size:16,setter:Mi},Yn[Il]={size:4,setter:fr},Yn[Sl]={size:8,setter:fr},Yn[Ll]={size:12,setter:fr},Yn[Tl]={size:16,setter:fr},Yn[Yl]={size:4,setter:Uo,count:2},Yn[wl]={size:9,setter:Uo,count:3},Yn[Fl]={size:16,setter:Uo,count:4};const a0=/ERROR:\s*\d+:(\d+)/gi;function d0(i,n="",o=0){const p=[...n.matchAll(a0)],y=new Map(p.map((S,F)=>{const T=parseInt(S[1]),k=p[F+1],rt=k?k.index:n.length,z=n.substring(S.index,rt);return[T-1,z]}));return i.split(`
|
|
126
|
-
`).map((S,F)=>{const
|
|
125
|
+
see: http://github.com/greggman/twgl.js for details */const yo=5120,Ar=5121,go=5122,Zo=5123,vo=5124,Go=5125,Xo=5126,oc=32819,sc=32820,lc=33635,uc=5131,cc=33640,ac=35899,dc=35902,hc=36269,fc=34042,js={};{const i=js;i[yo]=Int8Array,i[Ar]=Uint8Array,i[go]=Int16Array,i[Zo]=Uint16Array,i[vo]=Int32Array,i[Go]=Uint32Array,i[Xo]=Float32Array,i[oc]=Uint16Array,i[sc]=Uint16Array,i[lc]=Uint16Array,i[uc]=Uint16Array,i[cc]=Uint32Array,i[ac]=Uint32Array,i[dc]=Uint32Array,i[hc]=Uint32Array,i[fc]=Uint32Array}function Wo(i){if(i instanceof Int8Array)return yo;if(i instanceof Uint8Array||i instanceof Uint8ClampedArray)return Ar;if(i instanceof Int16Array)return go;if(i instanceof Uint16Array)return Zo;if(i instanceof Int32Array)return vo;if(i instanceof Uint32Array)return Go;if(i instanceof Float32Array)return Xo;throw new Error("unsupported typed array type")}function mc(i){if(i===Int8Array)return yo;if(i===Uint8Array||i===Uint8ClampedArray)return Ar;if(i===Int16Array)return go;if(i===Uint16Array)return Zo;if(i===Int32Array)return vo;if(i===Uint32Array)return Go;if(i===Float32Array)return Xo;throw new Error("unsupported typed array type")}function pc(i){const n=js[i];if(!n)throw new Error("unknown gl type");return n}const xi=typeof SharedArrayBuffer!="undefined"?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 zs(...i){console.error(...i)}const Ps=new Map;function jr(i,n){if(!i||typeof i!="object")return!1;let o=Ps.get(n);o||(o=new WeakMap,Ps.set(n,o));let m=o.get(i);if(m===void 0){const y=Object.prototype.toString.call(i);m=y.substring(8,y.length-1)===n,o.set(i,m)}return m}function bc(i,n){return typeof WebGLBuffer!="undefined"&&jr(n,"WebGLBuffer")}function yc(i,n){return typeof WebGLRenderbuffer!="undefined"&&jr(n,"WebGLRenderbuffer")}function gc(i,n){return typeof WebGLShader!="undefined"&&jr(n,"WebGLShader")}function Vo(i,n){return typeof WebGLTexture!="undefined"&&jr(n,"WebGLTexture")}function Zc(i,n){return typeof WebGLSampler!="undefined"&&jr(n,"WebGLSampler")}const Os=35044,Zr=34962,vc=34963,Gc=34660,Xc=5120,Wc=5121,Vc=5122,Rc=5123,xc=5124,Ic=5125,Sc=5126,_s={attribPrefix:""};function Tc(i,n,o,m,y){i.bindBuffer(n,o),i.bufferData(n,m,y||Os)}function Qs(i,n,o,m){if(bc(i,n))return n;o=o||Zr;const y=i.createBuffer();return Tc(i,o,y,n,m),y}function Ds(i){return i==="indices"}function Lc(i){return i instanceof Int8Array||i instanceof Uint8Array}function Yc(i){return i===Int8Array||i===Uint8Array}function wc(i){return i.length?i:i.data}const Fc=/coord|texture/i,Hc=/color|colour/i;function $s(i,n){let o;if(Fc.test(i)?o=2:Hc.test(i)?o=4:o=3,n%o>0)throw new Error(`Can not guess numComponents for attribute '${i}'. Tried ${o} but ${n} values is not evenly divisible by ${o}. You should specify it.`);return o}function Cc(i,n){return i.numComponents||i.size||$s(n,wc(i).length)}function qs(i,n){if(xi(i))return i;if(xi(i.data))return i.data;Array.isArray(i)&&(i={data:i});let o=i.type;return o||(Ds(n)?o=Uint16Array:o=Float32Array),new o(i.data)}function Nc(i,n){const o={};return Object.keys(n).forEach(function(m){if(!Ds(m)){const y=n[m],S=y.attrib||y.name||y.attribName||_s.attribPrefix+m;if(y.value){if(!Array.isArray(y.value)&&!xi(y.value))throw new Error("array.value is not array or typedarray");o[S]={value:y.value}}else{let F,L,J,rt;if(y.buffer&&y.buffer instanceof WebGLBuffer)F=y.buffer,rt=y.numComponents||y.size,L=y.type,J=y.normalize;else if(typeof y=="number"||typeof y.data=="number"){const z=y.data||y,st=y.type||Float32Array,Gt=z*st.BYTES_PER_ELEMENT;L=mc(st),J=y.normalize!==void 0?y.normalize:Yc(st),rt=y.numComponents||y.size||$s(m,z),F=i.createBuffer(),i.bindBuffer(Zr,F),i.bufferData(Zr,Gt,y.drawType||Os)}else{const z=qs(y,m);F=Qs(i,z,void 0,y.drawType),L=Wo(z),J=y.normalize!==void 0?y.normalize:Lc(z),rt=Cc(y,m)}o[S]={buffer:F,numComponents:rt,type:L,normalize:J,stride:y.stride||0,offset:y.offset||0,divisor:y.divisor===void 0?void 0:y.divisor,drawType:y.drawType}}}}),i.bindBuffer(Zr,null),o}function Ec(i,n){return n===Xc||n===Wc?1:n===Vc||n===Rc?2:n===xc||n===Ic||n===Sc?4:0}const Ro=["position","positions","a_position"];function kc(i,n){let o,m;for(m=0;m<Ro.length&&(o=Ro[m],!(o in n||(o=_s.attribPrefix+o,o in n)));++m);m===Ro.length&&(o=Object.keys(n)[0]);const y=n[o];if(!y.buffer)return 1;i.bindBuffer(Zr,y.buffer);const S=i.getBufferParameter(Zr,Gc);i.bindBuffer(Zr,null);const F=Ec(i,y.type),L=S/F,J=y.numComponents||y.size,rt=L/J;if(rt%1!==0)throw new Error(`numComponents ${J} not correct for length ${length}`);return rt}function Jc(i,n,o){const m=Nc(i,n),y=Object.assign({},o||{});y.attribs=Object.assign({},o?o.attribs:{},m);const S=n.indices;if(S){const F=qs(S,"indices");y.indices=Qs(i,F,vc),y.numElements=F.length,y.elementType=Wo(F)}else y.numElements||(y.numElements=kc(i,y.attribs));return y}function zr(i){return!!i.texStorage2D}const tl=function(){const i={},n={};function o(m){const y=m.constructor.name;if(!i[y]){for(const S in m)if(typeof m[S]=="number"){const F=n[m[S]];n[m[S]]=F?`${F} | ${S}`:S}i[y]=!0}}return function(y,S){return o(y),n[S]||(typeof S=="number"?`0x${S.toString(16)}`:S)}}(),cr={textureColor:new Uint8Array([128,192,255,255]),textureOptions:{},crossOrigin:void 0},Pr=xi,el=function(){let i;return function(){return i=i||(typeof document!="undefined"&&document.createElement?document.createElement("canvas").getContext("2d"):null),i}}(),nl=6406,rr=6407,vn=6408,rl=6409,il=6410,Or=6402,ol=34041,Ii=33071,Uc=9728,Kc=9729,ar=3553,dr=34067,vr=32879,Gr=35866,xo=34069,Mc=34070,Bc=34071,Ac=34072,jc=34073,zc=34074,Io=10241,So=10240,Si=10242,Ti=10243,sl=32882,Pc=33082,Oc=33083,_c=33084,Qc=33085,To=3317,ll=3314,ul=32878,cl=3316,al=3315,dl=32877,Dc=37443,$c=37441,qc=37440,t1=33321,e1=36756,n1=33325,r1=33326,i1=33330,o1=33329,s1=33338,l1=33337,u1=33340,c1=33339,a1=33323,d1=36757,h1=33327,f1=33328,m1=33336,p1=33335,b1=33332,y1=33331,g1=33334,Z1=33333,v1=32849,G1=35905,X1=36194,W1=36758,V1=35898,R1=35901,x1=34843,I1=34837,S1=36221,T1=36239,L1=36215,Y1=36233,w1=36209,F1=36227,H1=32856,C1=35907,N1=36759,E1=32855,k1=32854,J1=32857,U1=34842,K1=34836,M1=36220,B1=36238,A1=36975,j1=36214,z1=36232,P1=36226,O1=36208,_1=33189,Q1=33190,D1=36012,$1=36013,q1=35056,hr=5120,yn=5121,Li=5122,wr=5123,Yi=5124,Xr=5125,Mn=5126,hl=32819,fl=32820,ml=33635,tr=5131,_r=36193,Lo=33640,ta=35899,ea=35902,na=36269,ra=34042,wi=33319,Fr=33320,Fi=6403,Hr=36244,Cr=36248,Wr=36249;let Yo;function Hi(i){if(!Yo){const n={};n[nl]={textureFormat:nl,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[1,2,2,4],type:[yn,tr,_r,Mn]},n[rl]={textureFormat:rl,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[1,2,2,4],type:[yn,tr,_r,Mn]},n[il]={textureFormat:il,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[2,4,4,8],type:[yn,tr,_r,Mn]},n[rr]={textureFormat:rr,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[3,6,6,12,2],type:[yn,tr,_r,Mn,ml]},n[vn]={textureFormat:vn,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[4,8,8,16,2,2],type:[yn,tr,_r,Mn,hl,fl]},n[Or]={textureFormat:Or,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[2,4],type:[Xr,wr]},n[t1]={textureFormat:Fi,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[1],type:[yn]},n[e1]={textureFormat:Fi,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[1],type:[hr]},n[n1]={textureFormat:Fi,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[4,2],type:[Mn,tr]},n[r1]={textureFormat:Fi,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[4],type:[Mn]},n[i1]={textureFormat:Hr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[1],type:[yn]},n[o1]={textureFormat:Hr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[1],type:[hr]},n[b1]={textureFormat:Hr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[2],type:[wr]},n[y1]={textureFormat:Hr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[2],type:[Li]},n[g1]={textureFormat:Hr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[Xr]},n[Z1]={textureFormat:Hr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[Yi]},n[a1]={textureFormat:wi,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[2],type:[yn]},n[d1]={textureFormat:wi,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[2],type:[hr]},n[h1]={textureFormat:wi,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[8,4],type:[Mn,tr]},n[f1]={textureFormat:wi,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[8],type:[Mn]},n[m1]={textureFormat:Fr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[2],type:[yn]},n[p1]={textureFormat:Fr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[2],type:[hr]},n[s1]={textureFormat:Fr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[wr]},n[l1]={textureFormat:Fr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[Li]},n[u1]={textureFormat:Fr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[8],type:[Xr]},n[c1]={textureFormat:Fr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[8],type:[Yi]},n[v1]={textureFormat:rr,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[3],type:[yn]},n[G1]={textureFormat:rr,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[3],type:[yn]},n[X1]={textureFormat:rr,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[3,2],type:[yn,ml]},n[W1]={textureFormat:rr,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[3],type:[hr]},n[V1]={textureFormat:rr,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[12,6,4],type:[Mn,tr,ta]},n[R1]={textureFormat:rr,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[12,6,4],type:[Mn,tr,ea]},n[x1]={textureFormat:rr,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[12,6],type:[Mn,tr]},n[I1]={textureFormat:rr,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[12],type:[Mn]},n[S1]={textureFormat:Cr,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[3],type:[yn]},n[T1]={textureFormat:Cr,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[3],type:[hr]},n[L1]={textureFormat:Cr,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[6],type:[wr]},n[Y1]={textureFormat:Cr,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[6],type:[Li]},n[w1]={textureFormat:Cr,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[12],type:[Xr]},n[F1]={textureFormat:Cr,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[12],type:[Yi]},n[H1]={textureFormat:vn,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[4],type:[yn]},n[C1]={textureFormat:vn,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[4],type:[yn]},n[N1]={textureFormat:vn,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[4],type:[hr]},n[E1]={textureFormat:vn,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[4,2,4],type:[yn,fl,Lo]},n[k1]={textureFormat:vn,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[4,2],type:[yn,hl]},n[J1]={textureFormat:vn,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[4],type:[Lo]},n[U1]={textureFormat:vn,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[16,8],type:[Mn,tr]},n[K1]={textureFormat:vn,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[16],type:[Mn]},n[M1]={textureFormat:Wr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[yn]},n[B1]={textureFormat:Wr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[hr]},n[A1]={textureFormat:Wr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[Lo]},n[j1]={textureFormat:Wr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[8],type:[wr]},n[z1]={textureFormat:Wr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[8],type:[Li]},n[P1]={textureFormat:Wr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[16],type:[Yi]},n[O1]={textureFormat:Wr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[16],type:[Xr]},n[_1]={textureFormat:Or,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[2,4],type:[wr,Xr]},n[Q1]={textureFormat:Or,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[Xr]},n[D1]={textureFormat:Or,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[Mn]},n[q1]={textureFormat:ol,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[ra]},n[$1]={textureFormat:ol,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[na]},Object.keys(n).forEach(function(o){const m=n[o];m.bytesPerElementMap={},m.bytesPerElement.forEach(function(y,S){const F=m.type[S];m.bytesPerElementMap[F]=y})}),Yo=n}return Yo[i]}function ia(i,n){const o=Hi(i);if(!o)throw"unknown internal format";const m=o.bytesPerElementMap[n];if(m===void 0)throw"unknown internal format";return m}function Qr(i){const n=Hi(i);if(!n)throw"unknown internal format";return{format:n.textureFormat,type:n.type[0]}}function pl(i){return(i&i-1)===0}function oa(i,n,o,m){if(!zr(i))return pl(n)&&pl(o);const y=Hi(m);if(!y)throw"unknown internal format";return y.colorRenderable&&y.textureFilterable}function sa(i){const n=Hi(i);if(!n)throw"unknown internal format";return n.textureFilterable}function la(i,n,o){return Pr(n)?Wo(n):o||yn}function Ci(i,n,o,m,y){if(y%1!==0)throw"can't guess dimensions";if(!o&&!m){const S=Math.sqrt(y/(n===dr?6:1));S%1===0?(o=S,m=S):(o=y,m=1)}else if(m){if(!o&&(o=y/m,o%1))throw"can't guess dimensions"}else if(m=y/o,m%1)throw"can't guess dimensions";return{width:o,height:m}}function Nr(i,n){n.colorspaceConversion!==void 0&&i.pixelStorei(Dc,n.colorspaceConversion),n.premultiplyAlpha!==void 0&&i.pixelStorei($c,n.premultiplyAlpha),n.flipY!==void 0&&i.pixelStorei(qc,n.flipY)}function bl(i){i.pixelStorei(To,4),zr(i)&&(i.pixelStorei(ll,0),i.pixelStorei(ul,0),i.pixelStorei(cl,0),i.pixelStorei(al,0),i.pixelStorei(dl,0))}function ua(i,n,o,m){m.minMag&&(o.call(i,n,Io,m.minMag),o.call(i,n,So,m.minMag)),m.min&&o.call(i,n,Io,m.min),m.mag&&o.call(i,n,So,m.mag),m.wrap&&(o.call(i,n,Si,m.wrap),o.call(i,n,Ti,m.wrap),(n===vr||Zc(i,n))&&o.call(i,n,sl,m.wrap)),m.wrapR&&o.call(i,n,sl,m.wrapR),m.wrapS&&o.call(i,n,Si,m.wrapS),m.wrapT&&o.call(i,n,Ti,m.wrapT),m.minLod&&o.call(i,n,Pc,m.minLod),m.maxLod&&o.call(i,n,Oc,m.maxLod),m.baseLevel&&o.call(i,n,_c,m.baseLevel),m.maxLevel&&o.call(i,n,Qc,m.maxLevel)}function yl(i,n,o){const m=o.target||ar;i.bindTexture(m,n),ua(i,m,i.texParameteri,o)}function ca(i){return i=i||cr.textureColor,Pr(i)?i:new Uint8Array([i[0]*255,i[1]*255,i[2]*255,i[3]*255])}function wo(i,n,o,m,y,S){o=o||cr.textureOptions,S=S||vn;const F=o.target||ar;if(m=m||o.width,y=y||o.height,i.bindTexture(F,n),oa(i,m,y,S))i.generateMipmap(F);else{const L=sa(S)?Kc:Uc;i.texParameteri(F,Io,L),i.texParameteri(F,So,L),i.texParameteri(F,Si,Ii),i.texParameteri(F,Ti,Ii)}}function Dr(i){return i.auto===!0||i.auto===void 0&&i.level===void 0}function Fo(i,n){return n=n||{},n.cubeFaceOrder||[xo,Mc,Bc,Ac,jc,zc]}function Ho(i,n){const m=Fo(i,n).map(function(y,S){return{face:y,ndx:S}});return m.sort(function(y,S){return y.face-S.face}),m}function gl(i,n,o,m){m=m||cr.textureOptions;const y=m.target||ar,S=m.level||0;let F=o.width,L=o.height;const J=m.internalFormat||m.format||vn,rt=Qr(J),z=m.format||rt.format,st=m.type||rt.type;if(Nr(i,m),i.bindTexture(y,n),y===dr){const Gt=o.width,Vt=o.height;let dt,ht;if(Gt/6===Vt)dt=Vt,ht=[0,0,1,0,2,0,3,0,4,0,5,0];else if(Vt/6===Gt)dt=Gt,ht=[0,0,0,1,0,2,0,3,0,4,0,5];else if(Gt/3===Vt/2)dt=Gt/3,ht=[0,0,1,0,2,0,0,1,1,1,2,1];else if(Gt/2===Vt/3)dt=Gt/2,ht=[0,0,1,0,0,1,1,1,0,2,1,2];else throw"can't figure out cube map from element: "+(o.src?o.src:o.nodeName);const Yt=el();Yt?(Yt.canvas.width=dt,Yt.canvas.height=dt,F=dt,L=dt,Ho(i,m).forEach(function(Ft){const Bt=ht[Ft.ndx*2+0]*dt,_=ht[Ft.ndx*2+1]*dt;Yt.drawImage(o,Bt,_,dt,dt,0,0,dt,dt),i.texImage2D(Ft.face,S,J,z,st,Yt.canvas)}),Yt.canvas.width=1,Yt.canvas.height=1):typeof createImageBitmap!="undefined"&&(F=dt,L=dt,Ho(i,m).forEach(function(Ft){const Bt=ht[Ft.ndx*2+0]*dt,_=ht[Ft.ndx*2+1]*dt;i.texImage2D(Ft.face,S,J,dt,dt,0,z,st,null),createImageBitmap(o,Bt,_,dt,dt,{premultiplyAlpha:"none",colorSpaceConversion:"none"}).then(function(Ae){Nr(i,m),i.bindTexture(y,n),i.texImage2D(Ft.face,S,J,z,st,Ae),Dr(m)&&wo(i,n,m,F,L,J)})}))}else if(y===vr||y===Gr){const Gt=Math.min(o.width,o.height),Vt=Math.max(o.width,o.height),dt=Vt/Gt;if(dt%1!==0)throw"can not compute 3D dimensions of element";const ht=o.width===Vt?1:0,Yt=o.height===Vt?1:0;i.pixelStorei(To,1),i.pixelStorei(ll,o.width),i.pixelStorei(ul,0),i.pixelStorei(dl,0),i.texImage3D(y,S,J,Gt,Gt,Gt,0,z,st,null);for(let Ft=0;Ft<dt;++Ft){const Bt=Ft*Gt*ht,_=Ft*Gt*Yt;i.pixelStorei(cl,Bt),i.pixelStorei(al,_),i.texSubImage3D(y,S,0,0,Ft,Gt,Gt,1,z,st,o)}bl(i)}else i.texImage2D(y,S,J,z,st,o);Dr(m)&&wo(i,n,m,F,L,J),yl(i,n,m)}function $r(){}function aa(i){if(typeof document!="undefined"){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 da(i,n){return n===void 0&&!aa(i)?"anonymous":n}function ha(i,n,o){o=o||$r;let m;if(n=n!==void 0?n:cr.crossOrigin,n=da(i,n),typeof Image!="undefined"){m=new Image,n!==void 0&&(m.crossOrigin=n);const y=function(){m.removeEventListener("error",S),m.removeEventListener("load",F),m=null},S=function(){const J="couldn't load image: "+i;zs(J),o(J,m),y()},F=function(){o(null,m),y()};return m.addEventListener("error",S),m.addEventListener("load",F),m.src=i,m}else if(typeof ImageBitmap!="undefined"){let y,S;const F=function(){o(y,S)},L={};n&&(L.mode="cors"),fetch(i,L).then(function(J){if(!J.ok)throw J;return J.blob()}).then(function(J){return createImageBitmap(J,{premultiplyAlpha:"none",colorSpaceConversion:"none"})}).then(function(J){S=J,setTimeout(F)}).catch(function(J){y=J,setTimeout(F)}),m=null}return m}function Zl(i){return typeof ImageBitmap!="undefined"&&i instanceof ImageBitmap||typeof ImageData!="undefined"&&i instanceof ImageData||typeof HTMLElement!="undefined"&&i instanceof HTMLElement}function Co(i,n,o){return Zl(i)?(setTimeout(function(){o(null,i)}),i):ha(i,n,o)}function No(i,n,o){o=o||cr.textureOptions;const m=o.target||ar;if(i.bindTexture(m,n),o.color===!1)return;const y=ca(o.color);if(m===dr)for(let S=0;S<6;++S)i.texImage2D(xo+S,0,vn,1,1,0,vn,yn,y);else m===vr||m===Gr?i.texImage3D(m,0,vn,1,1,1,0,vn,yn,y):i.texImage2D(m,0,vn,1,1,0,vn,yn,y)}function fa(i,n,o,m){return m=m||$r,o=o||cr.textureOptions,No(i,n,o),o=Object.assign({},o),Co(o.src,o.crossOrigin,function(S,F){S?m(S,n,F):(gl(i,n,F,o),m(null,n,F))})}function ma(i,n,o,m){m=m||$r;const y=o.src;if(y.length!==6)throw"there must be 6 urls for a cubemap";const S=o.level||0,F=o.internalFormat||o.format||vn,L=Qr(F),J=o.format||L.format,rt=o.type||yn,z=o.target||ar;if(z!==dr)throw"target must be TEXTURE_CUBE_MAP";No(i,n,o),o=Object.assign({},o);let st=6;const Gt=[],Vt=Fo(i,o);let dt;function ht(Yt){return function(Ft,Bt){--st,Ft?Gt.push(Ft):Bt.width!==Bt.height?Gt.push("cubemap face img is not a square: "+Bt.src):(Nr(i,o),i.bindTexture(z,n),st===5?Fo().forEach(function(_){i.texImage2D(_,S,F,J,rt,Bt)}):i.texImage2D(Yt,S,F,J,rt,Bt),Dr(o)&&i.generateMipmap(z)),st===0&&m(Gt.length?Gt:void 0,n,dt)}}dt=y.map(function(Yt,Ft){return Co(Yt,o.crossOrigin,ht(Vt[Ft]))})}function pa(i,n,o,m){m=m||$r;const y=o.src,S=o.internalFormat||o.format||vn,F=Qr(S),L=o.format||F.format,J=o.type||yn,rt=o.target||Gr;if(rt!==vr&&rt!==Gr)throw"target must be TEXTURE_3D or TEXTURE_2D_ARRAY";No(i,n,o),o=Object.assign({},o);let z=y.length;const st=[];let Gt;const Vt=o.level||0;let dt=o.width,ht=o.height;const Yt=y.length;let Ft=!0;function Bt(_){return function(Ae,cn){if(--z,Ae)st.push(Ae);else{if(Nr(i,o),i.bindTexture(rt,n),Ft){Ft=!1,dt=o.width||cn.width,ht=o.height||cn.height,i.texImage3D(rt,Vt,S,dt,ht,Yt,0,L,J,null);for(let We=0;We<Yt;++We)i.texSubImage3D(rt,Vt,0,0,We,dt,ht,1,L,J,cn)}else{let We=cn,Dt;(cn.width!==dt||cn.height!==ht)&&(Dt=el(),We=Dt.canvas,Dt.canvas.width=dt,Dt.canvas.height=ht,Dt.drawImage(cn,0,0,dt,ht)),i.texSubImage3D(rt,Vt,0,0,_,dt,ht,1,L,J,We),Dt&&We===Dt.canvas&&(Dt.canvas.width=0,Dt.canvas.height=0)}Dr(o)&&i.generateMipmap(rt)}z===0&&m(st.length?st:void 0,n,Gt)}}Gt=y.map(function(_,Ae){return Co(_,o.crossOrigin,Bt(Ae))})}function ba(i,n,o,m){m=m||cr.textureOptions;const y=m.target||ar;i.bindTexture(y,n);let S=m.width,F=m.height,L=m.depth;const J=m.level||0,rt=m.internalFormat||m.format||vn,z=Qr(rt),st=m.format||z.format,Gt=m.type||la(i,o,z.type);if(Pr(o))o instanceof Uint8ClampedArray&&(o=new Uint8Array(o.buffer));else{const Yt=pc(Gt);o=new Yt(o)}const Vt=ia(rt,Gt),dt=o.byteLength/Vt;if(dt%1)throw"length wrong size for format: "+tl(i,st);let ht;if(y===vr||y===Gr)if(!S&&!F&&!L){const Yt=Math.cbrt(dt);if(Yt%1!==0)throw"can't guess cube size of array of numElements: "+dt;S=Yt,F=Yt,L=Yt}else S&&(!F||!L)?(ht=Ci(i,y,F,L,dt/S),F=ht.width,L=ht.height):F&&(!S||!L)?(ht=Ci(i,y,S,L,dt/F),S=ht.width,L=ht.height):(ht=Ci(i,y,S,F,dt/L),S=ht.width,F=ht.height);else ht=Ci(i,y,S,F,dt),S=ht.width,F=ht.height;if(bl(i),i.pixelStorei(To,m.unpackAlignment||1),Nr(i,m),y===dr){const Yt=Vt/o.BYTES_PER_ELEMENT,Ft=dt/6*Yt;Ho(i,m).forEach(Bt=>{const _=Ft*Bt.ndx,Ae=o.subarray(_,_+Ft);i.texImage2D(Bt.face,J,rt,S,F,0,st,Gt,Ae)})}else y===vr||y===Gr?i.texImage3D(y,J,rt,S,F,L,0,st,Gt,o):i.texImage2D(y,J,rt,S,F,0,st,Gt,o);return{width:S,height:F,depth:L,type:Gt}}function ya(i,n,o){const m=o.target||ar;i.bindTexture(m,n);const y=o.level||0,S=o.internalFormat||o.format||vn,F=Qr(S),L=o.format||F.format,J=o.type||F.type;if(Nr(i,o),m===dr)for(let rt=0;rt<6;++rt)i.texImage2D(xo+rt,y,S,o.width,o.height,0,L,J,null);else m===vr||m===Gr?i.texImage3D(m,y,S,o.width,o.height,o.depth,0,L,J,null):i.texImage2D(m,y,S,o.width,o.height,0,L,J,null)}function vl(i,n,o){o=o||$r,n=n||cr.textureOptions;const m=i.createTexture(),y=n.target||ar;let S=n.width||1,F=n.height||1;const L=n.internalFormat||vn;i.bindTexture(y,m),y===dr&&(i.texParameteri(y,Si,Ii),i.texParameteri(y,Ti,Ii));let J=n.src;if(J)if(typeof J=="function"&&(J=J(i,n)),typeof J=="string")fa(i,m,n,o);else if(Pr(J)||Array.isArray(J)&&(typeof J[0]=="number"||Array.isArray(J[0])||Pr(J[0]))){const rt=ba(i,m,J,n);S=rt.width,F=rt.height}else Array.isArray(J)&&(typeof J[0]=="string"||Zl(J[0]))?y===dr?ma(i,m,n,o):pa(i,m,n,o):(gl(i,m,J,n),S=J.width,F=J.height);else ya(i,m,n);return Dr(n)&&wo(i,m,n,S,F,L),yl(i,m,n),m}const Ni=zs;function Gl(i){return typeof document!="undefined"&&document.getElementById?document.getElementById(i):null}const Ei=33984,ki=34962,ga=34963,Za=35713,va=35714,Ga=35632,Xa=35633,Wa=35981,Xl=35718,Va=35721,Ra=35971,xa=35382,Ia=35396,Sa=35398,Ta=35392,La=35395,Ji=5126,Wl=35664,Vl=35665,Rl=35666,Eo=5124,xl=35667,Il=35668,Sl=35669,Tl=35670,Ll=35671,Yl=35672,wl=35673,Fl=35674,Hl=35675,Cl=35676,Ya=35678,wa=35680,Fa=35679,Ha=35682,Ca=35685,Na=35686,Ea=35687,ka=35688,Ja=35689,Ua=35690,Ka=36289,Ma=36292,Ba=36293,ko=5125,Nl=36294,El=36295,kl=36296,Aa=36298,ja=36299,za=36300,Pa=36303,Oa=36306,_a=36307,Qa=36308,Da=36311,Ui=3553,Ki=34067,Jo=32879,Mi=35866,pe={};function Jl(i,n){return pe[n].bindPoint}function $a(i,n){return function(o){i.uniform1f(n,o)}}function qa(i,n){return function(o){i.uniform1fv(n,o)}}function t0(i,n){return function(o){i.uniform2fv(n,o)}}function e0(i,n){return function(o){i.uniform3fv(n,o)}}function n0(i,n){return function(o){i.uniform4fv(n,o)}}function Ul(i,n){return function(o){i.uniform1i(n,o)}}function Kl(i,n){return function(o){i.uniform1iv(n,o)}}function Ml(i,n){return function(o){i.uniform2iv(n,o)}}function Bl(i,n){return function(o){i.uniform3iv(n,o)}}function Al(i,n){return function(o){i.uniform4iv(n,o)}}function r0(i,n){return function(o){i.uniform1ui(n,o)}}function i0(i,n){return function(o){i.uniform1uiv(n,o)}}function o0(i,n){return function(o){i.uniform2uiv(n,o)}}function s0(i,n){return function(o){i.uniform3uiv(n,o)}}function l0(i,n){return function(o){i.uniform4uiv(n,o)}}function u0(i,n){return function(o){i.uniformMatrix2fv(n,!1,o)}}function c0(i,n){return function(o){i.uniformMatrix3fv(n,!1,o)}}function a0(i,n){return function(o){i.uniformMatrix4fv(n,!1,o)}}function d0(i,n){return function(o){i.uniformMatrix2x3fv(n,!1,o)}}function h0(i,n){return function(o){i.uniformMatrix3x2fv(n,!1,o)}}function f0(i,n){return function(o){i.uniformMatrix2x4fv(n,!1,o)}}function m0(i,n){return function(o){i.uniformMatrix4x2fv(n,!1,o)}}function p0(i,n){return function(o){i.uniformMatrix3x4fv(n,!1,o)}}function b0(i,n){return function(o){i.uniformMatrix4x3fv(n,!1,o)}}function zn(i,n,o,m){const y=Jl(i,n);return zr(i)?function(S){let F,L;Vo(i,S)?(F=S,L=null):(F=S.texture,L=S.sampler),i.uniform1i(m,o),i.activeTexture(Ei+o),i.bindTexture(y,F),i.bindSampler(o,L)}:function(S){i.uniform1i(m,o),i.activeTexture(Ei+o),i.bindTexture(y,S)}}function Pn(i,n,o,m,y){const S=Jl(i,n),F=new Int32Array(y);for(let L=0;L<y;++L)F[L]=o+L;return zr(i)?function(L){i.uniform1iv(m,F),L.forEach(function(J,rt){i.activeTexture(Ei+F[rt]);let z,st;Vo(i,J)?(z=J,st=null):(z=J.texture,st=J.sampler),i.bindSampler(o,st),i.bindTexture(S,z)})}:function(L){i.uniform1iv(m,F),L.forEach(function(J,rt){i.activeTexture(Ei+F[rt]),i.bindTexture(S,J)})}}pe[Ji]={Type:Float32Array,size:4,setter:$a,arraySetter:qa},pe[Wl]={Type:Float32Array,size:8,setter:t0,cols:2},pe[Vl]={Type:Float32Array,size:12,setter:e0,cols:3},pe[Rl]={Type:Float32Array,size:16,setter:n0,cols:4},pe[Eo]={Type:Int32Array,size:4,setter:Ul,arraySetter:Kl},pe[xl]={Type:Int32Array,size:8,setter:Ml,cols:2},pe[Il]={Type:Int32Array,size:12,setter:Bl,cols:3},pe[Sl]={Type:Int32Array,size:16,setter:Al,cols:4},pe[ko]={Type:Uint32Array,size:4,setter:r0,arraySetter:i0},pe[Nl]={Type:Uint32Array,size:8,setter:o0,cols:2},pe[El]={Type:Uint32Array,size:12,setter:s0,cols:3},pe[kl]={Type:Uint32Array,size:16,setter:l0,cols:4},pe[Tl]={Type:Uint32Array,size:4,setter:Ul,arraySetter:Kl},pe[Ll]={Type:Uint32Array,size:8,setter:Ml,cols:2},pe[Yl]={Type:Uint32Array,size:12,setter:Bl,cols:3},pe[wl]={Type:Uint32Array,size:16,setter:Al,cols:4},pe[Fl]={Type:Float32Array,size:32,setter:u0,rows:2,cols:2},pe[Hl]={Type:Float32Array,size:48,setter:c0,rows:3,cols:3},pe[Cl]={Type:Float32Array,size:64,setter:a0,rows:4,cols:4},pe[Ca]={Type:Float32Array,size:32,setter:d0,rows:2,cols:3},pe[Na]={Type:Float32Array,size:32,setter:f0,rows:2,cols:4},pe[Ea]={Type:Float32Array,size:48,setter:h0,rows:3,cols:2},pe[ka]={Type:Float32Array,size:48,setter:p0,rows:3,cols:4},pe[Ja]={Type:Float32Array,size:64,setter:m0,rows:4,cols:2},pe[Ua]={Type:Float32Array,size:64,setter:b0,rows:4,cols:3},pe[Ya]={Type:null,size:0,setter:zn,arraySetter:Pn,bindPoint:Ui},pe[wa]={Type:null,size:0,setter:zn,arraySetter:Pn,bindPoint:Ki},pe[Fa]={Type:null,size:0,setter:zn,arraySetter:Pn,bindPoint:Jo},pe[Ha]={Type:null,size:0,setter:zn,arraySetter:Pn,bindPoint:Ui},pe[Ka]={Type:null,size:0,setter:zn,arraySetter:Pn,bindPoint:Mi},pe[Ma]={Type:null,size:0,setter:zn,arraySetter:Pn,bindPoint:Mi},pe[Ba]={Type:null,size:0,setter:zn,arraySetter:Pn,bindPoint:Ki},pe[Aa]={Type:null,size:0,setter:zn,arraySetter:Pn,bindPoint:Ui},pe[ja]={Type:null,size:0,setter:zn,arraySetter:Pn,bindPoint:Jo},pe[za]={Type:null,size:0,setter:zn,arraySetter:Pn,bindPoint:Ki},pe[Pa]={Type:null,size:0,setter:zn,arraySetter:Pn,bindPoint:Mi},pe[Oa]={Type:null,size:0,setter:zn,arraySetter:Pn,bindPoint:Ui},pe[_a]={Type:null,size:0,setter:zn,arraySetter:Pn,bindPoint:Jo},pe[Qa]={Type:null,size:0,setter:zn,arraySetter:Pn,bindPoint:Ki},pe[Da]={Type:null,size:0,setter:zn,arraySetter:Pn,bindPoint:Mi};function Bi(i,n){return function(o){if(o.value)switch(i.disableVertexAttribArray(n),o.value.length){case 4:i.vertexAttrib4fv(n,o.value);break;case 3:i.vertexAttrib3fv(n,o.value);break;case 2:i.vertexAttrib2fv(n,o.value);break;case 1:i.vertexAttrib1fv(n,o.value);break;default:throw new Error("the length of a float constant value must be between 1 and 4!")}else i.bindBuffer(ki,o.buffer),i.enableVertexAttribArray(n),i.vertexAttribPointer(n,o.numComponents||o.size,o.type||Ji,o.normalize||!1,o.stride||0,o.offset||0),i.vertexAttribDivisor&&i.vertexAttribDivisor(n,o.divisor||0)}}function fr(i,n){return function(o){if(o.value)if(i.disableVertexAttribArray(n),o.value.length===4)i.vertexAttrib4iv(n,o.value);else throw new Error("The length of an integer constant value must be 4!");else i.bindBuffer(ki,o.buffer),i.enableVertexAttribArray(n),i.vertexAttribIPointer(n,o.numComponents||o.size,o.type||Eo,o.stride||0,o.offset||0),i.vertexAttribDivisor&&i.vertexAttribDivisor(n,o.divisor||0)}}function Ai(i,n){return function(o){if(o.value)if(i.disableVertexAttribArray(n),o.value.length===4)i.vertexAttrib4uiv(n,o.value);else throw new Error("The length of an unsigned integer constant value must be 4!");else i.bindBuffer(ki,o.buffer),i.enableVertexAttribArray(n),i.vertexAttribIPointer(n,o.numComponents||o.size,o.type||ko,o.stride||0,o.offset||0),i.vertexAttribDivisor&&i.vertexAttribDivisor(n,o.divisor||0)}}function Uo(i,n,o){const m=o.size,y=o.count;return function(S){i.bindBuffer(ki,S.buffer);const F=S.size||S.numComponents||m,L=F/y,J=S.type||Ji,z=pe[J].size*F,st=S.normalize||!1,Gt=S.offset||0,Vt=z/y;for(let dt=0;dt<y;++dt)i.enableVertexAttribArray(n+dt),i.vertexAttribPointer(n+dt,L,J,st,z,Gt+Vt*dt),i.vertexAttribDivisor&&i.vertexAttribDivisor(n+dt,S.divisor||0)}}const Yn={};Yn[Ji]={size:4,setter:Bi},Yn[Wl]={size:8,setter:Bi},Yn[Vl]={size:12,setter:Bi},Yn[Rl]={size:16,setter:Bi},Yn[Eo]={size:4,setter:fr},Yn[xl]={size:8,setter:fr},Yn[Il]={size:12,setter:fr},Yn[Sl]={size:16,setter:fr},Yn[ko]={size:4,setter:Ai},Yn[Nl]={size:8,setter:Ai},Yn[El]={size:12,setter:Ai},Yn[kl]={size:16,setter:Ai},Yn[Tl]={size:4,setter:fr},Yn[Ll]={size:8,setter:fr},Yn[Yl]={size:12,setter:fr},Yn[wl]={size:16,setter:fr},Yn[Fl]={size:4,setter:Uo,count:2},Yn[Hl]={size:9,setter:Uo,count:3},Yn[Cl]={size:16,setter:Uo,count:4};const y0=/ERROR:\s*\d+:(\d+)/gi;function g0(i,n="",o=0){const m=[...n.matchAll(y0)],y=new Map(m.map((S,F)=>{const L=parseInt(S[1]),J=m[F+1],rt=J?J.index:n.length,z=n.substring(S.index,rt);return[L-1,z]}));return i.split(`
|
|
126
|
+
`).map((S,F)=>{const L=y.get(F);return`${F+1+o}: ${S}${L?`
|
|
127
127
|
|
|
128
|
-
^^^ ${
|
|
129
|
-
`)}const
|
|
128
|
+
^^^ ${L}`:""}`}).join(`
|
|
129
|
+
`)}const jl=/^[ \t]*\n/;function zl(i){let n=0;return jl.test(i)&&(n=1,i=i.replace(jl,"")),{lineOffset:n,shaderSource:i}}function Pl(i,n){return i.errorCallback(n),i.callback&&setTimeout(()=>{i.callback(`${n}
|
|
130
130
|
${i.errors.join(`
|
|
131
|
-
`)}`)}),null}function
|
|
132
|
-
Error compiling ${
|
|
133
|
-
`);F||((o.errorCallback||
|
|
134
|
-
`;return n}run(n){const o=Date.now();let
|
|
131
|
+
`)}`)}),null}function Ol(i,n,o,m){const y=i.createShader(o);return i.shaderSource(y,zl(n).shaderSource),i.compileShader(y),!m.callback&&!Z0(i,o,y,m.errorCallback)?(i.deleteShader(y),null):y}function Z0(i,n,o,m){m=m||Ni;const y=i.getShaderParameter(o,Za);if(!y){const S=i.getShaderInfoLog(o),{lineOffset:F,shaderSource:L}=zl(i.getShaderSource(o));m(`${g0(L,S,F)}
|
|
132
|
+
Error compiling ${tl(i,n)}: ${S}`)}return y}function Ko(i,n,o){let m,y,S;if(typeof n=="function"&&(o=n,n=void 0),typeof i=="function")o=i,i=void 0;else if(i&&!Array.isArray(i)){if(i.errorCallback&&i.errors)return i;const rt=i;o=rt.errorCallback,i=rt.attribLocations,m=rt.transformFeedbackVaryings,y=rt.transformFeedbackMode,S=rt.callback}const F=o||Ni,L=[],J={errorCallback(rt,...z){L.push(rt),F(rt,...z)},transformFeedbackVaryings:m,transformFeedbackMode:y,callback:S,errors:L};if(i){let rt={};Array.isArray(i)?i.forEach(function(z,st){rt[z]=n?n[st]:st}):rt=i,J.attribLocations=rt}return J}const _l=["VERTEX_SHADER","FRAGMENT_SHADER"];function v0(i,n){if(n.indexOf("frag")>=0)return Ga;if(n.indexOf("vert")>=0)return Xa}function Ql(i,n){n.forEach(function(o){i.deleteShader(o)})}const G0=(i=0)=>new Promise(n=>setTimeout(n,i));function X0(i,n,o,m,y){const S=Ko(o,m,y),F=[],L=[];for(let z=0;z<n.length;++z){let st=n[z];if(typeof st=="string"){const Gt=Gl(st),Vt=Gt?Gt.text:st;let dt=i[_l[z]];Gt&&Gt.type&&(dt=v0(i,Gt.type)||dt),st=Ol(i,Vt,dt,S),L.push(st)}gc(i,st)&&F.push(st)}if(F.length!==n.length)return Ql(i,L),Pl(S,"not enough shaders for program");const J=i.createProgram();F.forEach(function(z){i.attachShader(J,z)}),S.attribLocations&&Object.keys(S.attribLocations).forEach(function(z){i.bindAttribLocation(J,S.attribLocations[z],z)});let rt=S.transformFeedbackVaryings;return rt&&(rt.attribs&&(rt=rt.attribs),Array.isArray(rt)||(rt=Object.keys(rt)),i.transformFeedbackVaryings(J,rt,S.transformFeedbackMode||Wa)),i.linkProgram(J),S.callback?(W0(i,J,S),null):Dl(i,J,S.errorCallback)?J:(i.deleteProgram(J),Ql(i,L),null)}async function W0(i,n,o){const m=i.getExtension("KHR_parallel_shader_compile"),y=m?(J,rt)=>J.getProgramParameter(rt,m.COMPLETION_STATUS_KHR):()=>!0;let S=0;do await G0(S),S=1e3/60;while(!y(i,n));const F=Dl(i,n,o.errorCallback),L=F?void 0:o.errors.join(`
|
|
133
|
+
`);F||((o.errorCallback||Ni)(L),i.deleteProgram(n),n=null),o.callback(L,n)}function Dl(i,n,o){o=o||Ni;const m=i.getProgramParameter(n,va);if(!m){const y=i.getProgramInfoLog(n);o(`Error in program linking: ${y}`)}return m}function V0(i,n,o,m,y){const S=Ko(o,m,y),F=[];for(let L=0;L<n.length;++L){const J=Ol(i,n[L],i[_l[L]],S);if(!S.callback&&!J)return null;F.push(J)}return X0(i,F,S)}function $l(i){const n=i.name;return n.startsWith("gl_")||n.startsWith("webgl_")}const R0=/(\.|\[|]|\w+)/g,x0=i=>i>="0"&&i<="9";function I0(i,n,o,m){const y=i.split(R0).filter(L=>L!=="");let S=0,F="";for(;;){const L=y[S++];F+=L;const J=x0(L[0]),rt=J?parseInt(L):L;if(J&&(F+=y[S++]),S===y.length){o[rt]=n;break}else{const st=y[S++],Gt=st==="[",Vt=o[rt]||(Gt?[]:{});o[rt]=Vt,o=Vt,m[F]=m[F]||function(dt){return function(ht){ql(dt,ht)}}(Vt),F+=st}}}function S0(i,n){let o=0;function m(L,J,rt){const z=J.name.endsWith("[0]"),st=J.type,Gt=pe[st];if(!Gt)throw new Error(`unknown type: 0x${st.toString(16)}`);let Vt;if(Gt.bindPoint){const dt=o;o+=J.size,z?Vt=Gt.arraySetter(i,st,dt,rt,J.size):Vt=Gt.setter(i,st,dt,rt,J.size)}else Gt.arraySetter&&z?Vt=Gt.arraySetter(i,rt):Vt=Gt.setter(i,rt);return Vt.location=rt,Vt}const y={},S={},F=i.getProgramParameter(n,Xl);for(let L=0;L<F;++L){const J=i.getActiveUniform(n,L);if($l(J))continue;let rt=J.name;rt.endsWith("[0]")&&(rt=rt.substr(0,rt.length-3));const z=i.getUniformLocation(n,J.name);if(z){const st=m(n,J,z);y[rt]=st,I0(rt,st,S,y)}}return y}function T0(i,n){const o={},m=i.getProgramParameter(n,Ra);for(let y=0;y<m;++y){const S=i.getTransformFeedbackVarying(n,y);o[S.name]={index:y,type:S.type,size:S.size}}return o}function L0(i,n){const o=i.getProgramParameter(n,Xl),m=[],y=[];for(let L=0;L<o;++L){y.push(L),m.push({});const J=i.getActiveUniform(n,L);m[L].name=J.name}[["UNIFORM_TYPE","type"],["UNIFORM_SIZE","size"],["UNIFORM_BLOCK_INDEX","blockNdx"],["UNIFORM_OFFSET","offset"]].forEach(function(L){const J=L[0],rt=L[1];i.getActiveUniforms(n,y,i[J]).forEach(function(z,st){m[st][rt]=z})});const S={},F=i.getProgramParameter(n,xa);for(let L=0;L<F;++L){const J=i.getActiveUniformBlockName(n,L),rt={index:i.getUniformBlockIndex(n,J),usedByVertexShader:i.getActiveUniformBlockParameter(n,L,Ia),usedByFragmentShader:i.getActiveUniformBlockParameter(n,L,Sa),size:i.getActiveUniformBlockParameter(n,L,Ta),uniformIndices:i.getActiveUniformBlockParameter(n,L,La)};rt.used=rt.usedByVertexShader||rt.usedByFragmentShader,S[J]=rt}return{blockSpecs:S,uniformData:m}}function ql(i,n){for(const o in n){const m=i[o];typeof m=="function"?m(n[o]):ql(i[o],n[o])}}function tu(i,...n){const o=i.uniformSetters||i,m=n.length;for(let y=0;y<m;++y){const S=n[y];if(Array.isArray(S)){const F=S.length;for(let L=0;L<F;++L)tu(o,S[L])}else for(const F in S){const L=o[F];L&&L(S[F])}}}function Y0(i,n){const o={},m=i.getProgramParameter(n,Va);for(let y=0;y<m;++y){const S=i.getActiveAttrib(n,y);if($l(S))continue;const F=i.getAttribLocation(n,S.name),L=Yn[S.type],J=L.setter(i,F,L);J.location=F,o[S.name]=J}return o}function w0(i,n){for(const o in n){const m=i[o];m&&m(n[o])}}function F0(i,n,o){o.vertexArrayObject?i.bindVertexArray(o.vertexArrayObject):(w0(n.attribSetters||n,o.attribs),o.indices&&i.bindBuffer(ga,o.indices))}function eu(i,n){const o=S0(i,n),m=Y0(i,n),y={program:n,uniformSetters:o,attribSetters:m};return zr(i)&&(y.uniformBlockSpec=L0(i,n),y.transformFeedbackInfo=T0(i,n)),y}const H0=/\s|{|}|;/;function C0(i,n,o,m,y){const S=Ko(o,m,y),F=[];if(n=n.map(function(rt){if(!H0.test(rt)){const z=Gl(rt);if(z)rt=z.text;else{const st=`no element with id: ${rt}`;S.errorCallback(st),F.push(st)}}return rt}),F.length)return Pl(S,"");const L=S.callback;L&&(S.callback=(rt,z)=>{let st;rt||(st=eu(i,z)),L(rt,st)});const J=V0(i,n,S);return J?eu(i,J):null}const N0=4,nu=5123;function E0(i,n,o,m,y,S){o=o===void 0?N0:o;const F=n.indices,L=n.elementType,J=m===void 0?n.numElements:m;y=y===void 0?0:y,L||F?S!==void 0?i.drawElementsInstanced(o,J,L===void 0?nu:n.elementType,y,S):i.drawElements(o,J,L===void 0?nu:n.elementType,y):S!==void 0?i.drawArraysInstanced(o,y,J,S):i.drawArrays(o,y,J)}const ru=36160,ji=36161,k0=3553,J0=5121,U0=6402,K0=6408,M0=33190,B0=36012,A0=35056,j0=36013,z0=32854,P0=32855,O0=36194,iu=33189,ou=6401,su=36168,Mo=34041,Bo=36064,zi=36096,lu=36128,Ao=33306,jo=33071,zo=9729,_0=[{format:K0,type:J0,min:zo,wrap:jo},{format:Mo}],er={};er[Mo]=Ao,er[ou]=lu,er[su]=lu,er[U0]=zi,er[iu]=zi,er[M0]=zi,er[B0]=zi,er[A0]=Ao,er[j0]=Ao;function Q0(i,n){return er[i]||er[n]}const mr={};mr[z0]=!0,mr[P0]=!0,mr[O0]=!0,mr[Mo]=!0,mr[iu]=!0,mr[ou]=!0,mr[su]=!0;function D0(i){return mr[i]}const $0=32;function q0(i){return i>=Bo&&i<Bo+$0}function Pi(i,n,o,m){const y=ru,S=i.createFramebuffer();i.bindFramebuffer(y,S),o=o||i.drawingBufferWidth,m=m||i.drawingBufferHeight,n=n||_0;const F=[],L={framebuffer:S,attachments:[],width:o,height:m};return n.forEach(function(J,rt){let z=J.attachment;const st=J.samples,Gt=J.format;let Vt=J.attachmentPoint||Q0(Gt,J.internalFormat);if(Vt||(Vt=Bo+rt),q0(Vt)&&F.push(Vt),!z)if(st!==void 0||D0(Gt))z=i.createRenderbuffer(),i.bindRenderbuffer(ji,z),st>1?i.renderbufferStorageMultisample(ji,st,Gt,o,m):i.renderbufferStorage(ji,Gt,o,m);else{const dt=Object.assign({},J);dt.width=o,dt.height=m,dt.auto===void 0&&(dt.auto=!1,dt.min=dt.min||dt.minMag||zo,dt.mag=dt.mag||dt.minMag||zo,dt.wrapS=dt.wrapS||dt.wrap||jo,dt.wrapT=dt.wrapT||dt.wrap||jo),z=vl(i,dt)}if(yc(i,z))i.framebufferRenderbuffer(y,Vt,ji,z);else if(Vo(i,z))J.layer!==void 0?i.framebufferTextureLayer(y,Vt,z,J.level||0,J.layer):i.framebufferTexture2D(y,Vt,J.target||k0,z,J.level||0);else throw new Error("unknown attachment type");L.attachments.push(z)}),i.drawBuffers&&i.drawBuffers(F),L}function t3(i,n,o){o=o||ru,n?(i.bindFramebuffer(o,n.framebuffer),i.viewport(0,0,n.width,n.height)):(i.bindFramebuffer(o,null),i.viewport(0,0,i.drawingBufferWidth,i.drawingBufferHeight))}function fn(i,n){return n instanceof WebGLTexture?n:vl(i,{src:n,wrap:i.CLAMP_TO_EDGE})}class Vr{constructor(n){const{context:o,width:m,height:y}=n;this.context=o,this.options=n;const S=this.buildDefines();this.programInfo=C0(this.context,[S+this.getVertexShader(),S+this.getFragmentShader()]),this.bufferInfo=Jc(this.context,this.getBuffers()),this.fbi=Pi(this.context,[{format:this.context.RGBA,type:this.context.UNSIGNED_BYTE,min:this.context.LINEAR,wrap:this.context.CLAMP_TO_EDGE}],m,y),this.output=this.fbi.attachments[0]}resizeOutput(n,o){this.fbi=Pi(this.context,[{format:this.context.RGBA,type:this.context.UNSIGNED_BYTE,min:this.context.LINEAR,wrap:this.context.CLAMP_TO_EDGE}],n,o),this.options.width=n,this.options.height=o,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 o=this.getDefines();for(let m in o)n+=`#define ${m} ${o[m].toFixed(1)}
|
|
134
|
+
`;return n}run(n){const o=Date.now();let m=0;this.lastRun&&(m=(o-this.lastRun)/1e3),this.lastRun=o,this.context.viewport(0,0,this.context.canvas.width,this.context.canvas.height),this.context.useProgram(this.programInfo.program),F0(this.context,this.programInfo,this.bufferInfo),tu(this.programInfo,{delta:m,canvas:[this.context.canvas.width,this.context.canvas.height],...n}),t3(this.context,this.options.disableFramebuffer?null:this.fbi),E0(this.context,this.bufferInfo)}}var e3=`precision mediump float;
|
|
135
135
|
|
|
136
136
|
varying vec2 _texture_coord;
|
|
137
137
|
|
|
@@ -142,7 +142,7 @@ uniform sampler2D mask;
|
|
|
142
142
|
vec4 loop();
|
|
143
143
|
|
|
144
144
|
void main() { gl_FragColor = loop(); }
|
|
145
|
-
`,
|
|
145
|
+
`,n3=`varying vec2 _texture_coord;
|
|
146
146
|
|
|
147
147
|
attribute vec2 position;
|
|
148
148
|
attribute vec2 texture_coord;
|
|
@@ -151,7 +151,7 @@ void main() {
|
|
|
151
151
|
gl_Position = vec4(position, 0., 1.);
|
|
152
152
|
_texture_coord = texture_coord;
|
|
153
153
|
}
|
|
154
|
-
`;class
|
|
154
|
+
`;class r3 extends Vr{getDefines(){var n;return{RADIUS:(n=this.options.radius)!=null?n:1}}getFragmentShader(){return e3+this.createLoopFunction()}getVertexShader(){return n3}createLoopFunction(){var o;let n=(o=this.options.radius)!=null?o:1;return`
|
|
155
155
|
|
|
156
156
|
vec4 loop() {
|
|
157
157
|
vec4 result = vec4(0,0,0,0);
|
|
@@ -173,7 +173,7 @@ void main() {
|
|
|
173
173
|
diff.x = normalizedRadius.x;
|
|
174
174
|
}
|
|
175
175
|
return result / factorSum;
|
|
176
|
-
}`}}var
|
|
176
|
+
}`}}var i3=`precision mediump float;
|
|
177
177
|
|
|
178
178
|
varying vec2 _texture_coord;
|
|
179
179
|
|
|
@@ -188,7 +188,7 @@ void main() {
|
|
|
188
188
|
gl_FragColor = foregroundColor * tresholdColor.a +
|
|
189
189
|
backgroundColor * (1. - tresholdColor.a);
|
|
190
190
|
}
|
|
191
|
-
|
|
191
|
+
`,o3=`varying vec2 _texture_coord;
|
|
192
192
|
|
|
193
193
|
attribute vec2 position;
|
|
194
194
|
attribute vec2 texture_coord;
|
|
@@ -198,7 +198,7 @@ void main() {
|
|
|
198
198
|
_texture_coord = texture_coord;
|
|
199
199
|
_texture_coord.y = 1. - texture_coord.y;
|
|
200
200
|
}
|
|
201
|
-
`;class Po extends Vr{getFragmentShader(){return
|
|
201
|
+
`;class Po extends Vr{getFragmentShader(){return i3}getVertexShader(){return o3}}class Oo{constructor(){this.steps=[]}addStep(n){this.steps.push(n)}async run(){for(const n of this.steps)n.program.run(n.getUniforms())}resizeOutput(n,o){for(const m of this.steps)m.program.resizeOutput(n,o)}}class _o extends Oo{constructor(){super(...arguments),this.preciseMaskEnabled=!1}}class s3 extends _o{constructor(n,o){super(),this.context=n;const m={context:n,height:n.canvas.height,width:n.canvas.width},y=new r3({...m,radius:o}),S=new Po({...m,disableFramebuffer:!0});this.addStep({program:y,getUniforms:()=>({texture:fn(n,this.inputImage),mask:fn(n,this.inputMask)})}),this.addStep({program:S,getUniforms:()=>({background:fn(n,y.output),foreground:fn(n,this.inputImage),threshold:fn(n,this.inputMask)})})}setData(n,o){this.inputImage=n,this.inputMask=o}}class uu extends _o{constructor(n){super(),this.context=n,this.preciseMaskEnabled=!0;const o={context:n,height:n.canvas.height,width:n.canvas.width},m=new Po({...o,disableFramebuffer:!0});this.addStep({program:m,getUniforms:()=>({background:fn(n,this.inputBackgroundImage),foreground:fn(n,this.inputImage),threshold:fn(n,this.inputMask)})})}setData(n,o){this.inputImage=n,this.inputMask=o}}class l3 extends uu{constructor(){super(...arguments),this.preciseMaskEnabled=!0}set inputVideo(n){this.frameReader=n.getReader(),this.readNextVideoFrame()}async run(){this.frameReader&&(await super.run(),this.readNextVideoFrame())}async readNextVideoFrame(){var o;const n=await((o=this.frameReader)==null?void 0:o.read());n!=null&&n.value&&(this.inputBackgroundImage=await createImageBitmap(n.value),n.value.close())}}var u3=`precision mediump float;
|
|
202
202
|
|
|
203
203
|
varying vec2 _texture_coord;
|
|
204
204
|
|
|
@@ -208,7 +208,7 @@ uniform sampler2D texture;
|
|
|
208
208
|
vec4 loop();
|
|
209
209
|
|
|
210
210
|
void main() { gl_FragColor = loop(); }
|
|
211
|
-
`,
|
|
211
|
+
`,c3=`varying vec2 _texture_coord;
|
|
212
212
|
|
|
213
213
|
attribute vec2 position;
|
|
214
214
|
attribute vec2 texture_coord;
|
|
@@ -217,7 +217,7 @@ void main() {
|
|
|
217
217
|
gl_Position = vec4(position, 0., 1.);
|
|
218
218
|
_texture_coord = texture_coord;
|
|
219
219
|
}
|
|
220
|
-
`,Qo=(i=>(i[i.LINEAR=0]="LINEAR",i[i.GAUSSIAN=1]="GAUSSIAN",i))(Qo||{});class
|
|
220
|
+
`,Qo=(i=>(i[i.LINEAR=0]="LINEAR",i[i.GAUSSIAN=1]="GAUSSIAN",i))(Qo||{});class cu extends Vr{getDefines(){var n;return{RADIUS:(n=this.options.radius)!=null?n:1}}getFragmentShader(){return u3+this.createLoopFunction()}getVertexShader(){return c3}createLoopFunction(){var o;let n=(o=this.options.radius)!=null?o:1;return`
|
|
221
221
|
|
|
222
222
|
vec4 loop() {
|
|
223
223
|
vec4 result = vec4(0,0,0,0);
|
|
@@ -238,7 +238,7 @@ void main() {
|
|
|
238
238
|
diff.x = normalizedRadius.x;
|
|
239
239
|
}
|
|
240
240
|
return result / factorSum;
|
|
241
|
-
}`}getFactor(n,o){switch(this.options.type){case 1:return this.getLinearFactor(n,o);case 0:default:return this.getLinearFactor(n,o)}}getLinearFactor(n,o){return 1}getGaussianFactor(n,o){var
|
|
241
|
+
}`}getFactor(n,o){switch(this.options.type){case 1:return this.getLinearFactor(n,o);case 0:default:return this.getLinearFactor(n,o)}}getLinearFactor(n,o){return 1}getGaussianFactor(n,o){var J;const m=Math.PI*2,y=Math.max((J=this.options.radius)!=null?J:1,1),S=1/(m*y**2),F=-(n**2+o**2),L=S*F;return S*Math.E**L}}class a3 extends _o{constructor(n,o){super(),this.context=n;const m={context:n,height:n.canvas.height,width:n.canvas.width},y=new cu({...m,radius:o,type:Qo.GAUSSIAN}),S=new Po({...m,disableFramebuffer:!0});this.addStep({program:y,getUniforms:()=>({texture:fn(n,this.inputImage)})}),this.addStep({program:S,getUniforms:()=>({background:fn(n,this.inputImage),foreground:fn(n,y.output),threshold:fn(n,this.inputMask)})})}setData(n,o){this.inputImage=n,this.inputMask=o}}class Do extends Vr{constructor(n){super(n),this.fbi2=Pi(n.context,[{format:n.context.RGBA,type:n.context.UNSIGNED_BYTE,min:n.context.LINEAR,mag:n.context.LINEAR,wrap:n.context.CLAMP_TO_EDGE}],n.width,n.height)}run(n){const o=this.fbi;this.fbi=this.fbi2,this.fbi2=o,this.output=this.fbi.attachments[0],super.run({...n,previous_rendering:this.fbi2.attachments[0]})}resizeOutput(n,o){super.resizeOutput(n,o),this.fbi2=Pi(this.context,[{format:this.context.RGBA,type:this.context.UNSIGNED_BYTE,min:this.context.LINEAR,wrap:this.context.CLAMP_TO_EDGE}],n,o)}}var d3=`precision mediump float;
|
|
242
242
|
|
|
243
243
|
varying vec2 _texture_coord;
|
|
244
244
|
|
|
@@ -291,7 +291,7 @@ void main() {
|
|
|
291
291
|
gl_FragColor *= (1. - threshold);
|
|
292
292
|
}
|
|
293
293
|
}
|
|
294
|
-
`,
|
|
294
|
+
`,h3=`varying vec2 _texture_coord;
|
|
295
295
|
|
|
296
296
|
attribute vec2 position;
|
|
297
297
|
attribute vec2 texture_coord;
|
|
@@ -300,7 +300,7 @@ void main() {
|
|
|
300
300
|
gl_Position = vec4(position, 0., 1.);
|
|
301
301
|
_texture_coord = texture_coord;
|
|
302
302
|
}
|
|
303
|
-
`;class
|
|
303
|
+
`;class f3 extends Do{getFragmentShader(){return d3}getVertexShader(){return h3}}var m3=`#version 300 es
|
|
304
304
|
// https://github.com/Volcomix/virtual-background/blob/main/src/pipelines/webgl2/jointBilateralFilterStage.ts
|
|
305
305
|
|
|
306
306
|
precision highp float;
|
|
@@ -346,14 +346,14 @@ void main() {
|
|
|
346
346
|
}
|
|
347
347
|
newVal /= totalWeight;
|
|
348
348
|
outColor = vec4(vec3(0.), newVal);
|
|
349
|
-
}`,
|
|
349
|
+
}`,p3=`#version 300 es
|
|
350
350
|
in vec2 position;
|
|
351
351
|
in vec2 texture_coord;
|
|
352
352
|
out vec2 _texture_coord;
|
|
353
353
|
void main() {
|
|
354
354
|
gl_Position = vec4(position, 0.0, 1.0);
|
|
355
355
|
_texture_coord = texture_coord;
|
|
356
|
-
}`;class
|
|
356
|
+
}`;class b3 extends Vr{getFragmentShader(){return m3}getVertexShader(){return p3}}var y3=`precision mediump float;
|
|
357
357
|
|
|
358
358
|
varying vec2 _texture_coord;
|
|
359
359
|
|
|
@@ -375,7 +375,7 @@ void main() {
|
|
|
375
375
|
gl_FragColor = texture2D(texture, _texture_coord);
|
|
376
376
|
}
|
|
377
377
|
}
|
|
378
|
-
`,
|
|
378
|
+
`,g3=`varying vec2 _texture_coord;
|
|
379
379
|
|
|
380
380
|
attribute vec2 position;
|
|
381
381
|
attribute vec2 texture_coord;
|
|
@@ -384,7 +384,7 @@ void main() {
|
|
|
384
384
|
gl_Position = vec4(position, 0., 1.);
|
|
385
385
|
_texture_coord = texture_coord;
|
|
386
386
|
}
|
|
387
|
-
`;class
|
|
387
|
+
`;class Z3 extends Vr{getFragmentShader(){return y3}getVertexShader(){return g3}}var v3=`precision mediump float;
|
|
388
388
|
|
|
389
389
|
varying vec2 _texture_coord;
|
|
390
390
|
|
|
@@ -403,7 +403,7 @@ void main() {
|
|
|
403
403
|
|
|
404
404
|
gl_FragColor = color;
|
|
405
405
|
}
|
|
406
|
-
`,
|
|
406
|
+
`,G3=`varying vec2 _texture_coord;
|
|
407
407
|
|
|
408
408
|
attribute vec2 position;
|
|
409
409
|
attribute vec2 texture_coord;
|
|
@@ -412,7 +412,7 @@ void main() {
|
|
|
412
412
|
gl_Position = vec4(position, 0., 1.);
|
|
413
413
|
_texture_coord = texture_coord;
|
|
414
414
|
}
|
|
415
|
-
`;class
|
|
415
|
+
`;class X3 extends Do{getFragmentShader(){return v3}getVertexShader(){return G3}}var W3=`precision mediump float;
|
|
416
416
|
|
|
417
417
|
varying vec2 _texture_coord;
|
|
418
418
|
|
|
@@ -426,7 +426,7 @@ void main() {
|
|
|
426
426
|
gl_FragColor = inputs_color;
|
|
427
427
|
}
|
|
428
428
|
}
|
|
429
|
-
`,
|
|
429
|
+
`,V3=`varying vec2 _texture_coord;
|
|
430
430
|
|
|
431
431
|
attribute vec2 position;
|
|
432
432
|
attribute vec2 texture_coord;
|
|
@@ -435,13 +435,13 @@ void main() {
|
|
|
435
435
|
gl_Position = vec4(position, 0., 1.);
|
|
436
436
|
_texture_coord = texture_coord;
|
|
437
437
|
}
|
|
438
|
-
`;class
|
|
438
|
+
`;class R3 extends Do{getFragmentShader(){return W3}getVertexShader(){return V3}}class x3 extends Oo{constructor(n,o,m){super(),this.context=n,this.options={currentThresholdMinimum:0,currentThresholdMaximum:1,previousThresholdMinimum:0,previousThresholdMaximum:1,thresholdMinimum:0,thresholdMaximum:1,thresholdFactor:1};const y={context:n,height:m,width:o},S=new f3(y),F=new cu({...y,radius:1,type:Qo.GAUSSIAN}),L=new R3(y),J=new X3(y),rt=new Z3(y),z=new b3({...y}),st=.66,Gt=640,Vt=480,dt=256,ht=144;let Yt=1;Yt*=Math.max(Gt/dt,Vt/ht);const Ft=Math.max(1,Math.sqrt(Yt)*st),Bt=1/Gt,_=1/Vt;this.addStep({program:S,getUniforms:()=>({image_now:fn(n,this.inputImage),image_before:fn(n,this.previousInputImage),mask_now:fn(n,this.inputMask),mask_before:fn(n,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:L,getUniforms:()=>({inputs:fn(n,this.inputMask),threshold:fn(n,S.output)})}),this.addStep({program:rt,getUniforms:()=>({texture:fn(n,L.output)})}),this.addStep({program:J,getUniforms:()=>({texture:fn(n,rt.output)})}),this.addStep({program:F,getUniforms:()=>({texture:fn(n,J.output)})}),this.addStep({program:z,getUniforms:()=>({input_frame:fn(n,this.inputImage),segmentation_mask:fn(n,this.inputMask),threshold:fn(n,F.output),texel_size:[Bt,_],step:Ft,radius:Yt,offset:Ft>1?Ft*.5:0,sigma_texel:Math.max(Bt,_)*Yt,sigma_color:.1})}),this.output=z.output}setData(n,o){this.previousInputImage=this.inputImage?this.inputImage:n,this.previousInputMask=this.inputMask?this.inputMask:o,this.inputImage=n,this.inputMask=o}setOptions(n){this.options=n}}var I3=`precision mediump float;
|
|
439
439
|
|
|
440
440
|
varying vec2 _texture_coord;
|
|
441
441
|
uniform sampler2D texture;
|
|
442
442
|
|
|
443
443
|
void main() { gl_FragColor = texture2D(texture, _texture_coord); }
|
|
444
|
-
`,
|
|
444
|
+
`,S3=`varying vec2 _texture_coord;
|
|
445
445
|
|
|
446
446
|
attribute vec2 position;
|
|
447
447
|
attribute vec2 texture_coord;
|
|
@@ -454,4 +454,4 @@ void main() {
|
|
|
454
454
|
_texture_coord.y = 1. - texture_coord.y;
|
|
455
455
|
}
|
|
456
456
|
}
|
|
457
|
-
`;class X3 extends Vr{getFragmentShader(){return v3}getVertexShader(){return G3}}class W3 extends Oo{constructor(n,o,p){super(),this.context=n;const y={context:n,height:p,width:o};this.addStep({program:new X3({...y,disableFramebuffer:!0}),getUniforms:()=>({texture:hn(n,this.inputImage),invert_y:!0})})}setData(n){this.inputImage=n}}class V3{constructor(n){this.canvas=new OffscreenCanvas(0,0),this.context=this.canvas.getContext("webgl2"),this.canvas.width=n.width,this.canvas.height=n.height,this.resize=new W3(this.context,n.width,n.height)}resizeForeground(n,o){this.canvas.width=n,this.canvas.height=o,this.resize.resizeOutput(n,o)}async process(n){var o,p;return this.canvas.width=this.canvas.width,(o=this.resize)==null||o.setData(n),(p=this.resize)==null||p.run(),this.canvas}}class R3{constructor(n){this.canvas=new OffscreenCanvas(0,0),this.context=this.canvas.getContext("webgl2"),this.canvas.width=n.foregroundWidth,this.canvas.height=n.foregroundHeight,this.improveMaskSegmentation=new Z3(this.context,n.maskWidth,n.maskHeight),this.backgroundImage=new su(this.context),this.backgroundVideo=new t3(this.context),this.backgroundResizer=new V3({width:n.foregroundWidth,height:n.foregroundHeight})}setBackgroundOptions(n){switch(n.transformerType){case"BackgroundBlur":this.activePipeline=new q0(this.context,this.getBlurSize(n.radius));break;case"SilhouetteBlur":this.activePipeline=new r3(this.context,this.getBlurSize(n.radius));break;case"VideoBackground":this.activePipeline=this.backgroundVideo;break;case"VirtualBackground":this.activePipeline=this.backgroundImage;break}this.options=n}setFlickeringOptions(n){var o;(o=this.improveMaskSegmentation)==null||o.setOptions(n)}setVideoBGReadable(n){this.backgroundVideo.inputVideo=n}async setVirtualBGImage(n){this.virtualBGImage=n,this.backgroundImage.inputBackgroundImage=await this.backgroundResizer.process(n)}async process(n,o){var p,y,S,F,T;if(this.activePipeline&&n.width&&(o==null?void 0:o.width)){let k=o;(((p=this.options)==null?void 0:p.selfieSegmentationType)&&((y=this.options)==null?void 0:y.selfieSegmentationType)==="PRECISE"||!((S=this.options)!=null&&S.selfieSegmentationType)&&this.activePipeline.preciseMaskEnabled)&&(this.improveMaskSegmentation.setData(n,o),this.improveMaskSegmentation.run(),k=this.improveMaskSegmentation.output),(F=this.activePipeline)==null||F.setData(n,k),(T=this.activePipeline)==null||T.run()}}async resizeForeground(n,o){var p;this.canvas.width=n,this.canvas.height=o,this.backgroundImage.resizeOutput(n,o),this.backgroundVideo.resizeOutput(n,o),this.backgroundResizer.resizeForeground(n,o),(p=this.activePipeline)==null||p.resizeOutput(n,o),this.virtualBGImage&&(this.backgroundImage.inputBackgroundImage=await this.backgroundResizer.process(this.virtualBGImage))}getBlurSize(n=Kr.Low){switch(n){case Kr.Low:return 5;case Kr.High:return 12}return n}}var Pi=function(){var i=typeof document!="undefined"&&document.currentScript?document.currentScript.src:void 0;return function(n){n=n||{};var o=typeof n!="undefined"?n:{},p,y;o.ready=new Promise(function(et,ot){p=et,y=ot});var S={},F;for(F in o)o.hasOwnProperty(F)&&(S[F]=o[F]);var T="./this.program",k=function(et,ot){throw ot},rt=!0,z="";function st(et){return o.locateFile?o.locateFile(et,z):z+et}var Gt;typeof document!="undefined"&&document.currentScript&&(z=document.currentScript.src),i&&(z=i),z.indexOf("blob:")!==0?z=z.substr(0,z.replace(/[?#].*/,"").lastIndexOf("/")+1):z="";var Vt=o.print||console.log.bind(console),dt=o.printErr||console.warn.bind(console);for(F in S)S.hasOwnProperty(F)&&(o[F]=S[F]);S=null,o.arguments&&o.arguments,o.thisProgram&&(T=o.thisProgram),o.quit&&(k=o.quit);var ht;o.wasmBinary&&(ht=o.wasmBinary);var Yt=o.noExitRuntime||!0;typeof WebAssembly!="object"&&de("no native wasm support detected");var Ft,Mt=!1,_=typeof TextDecoder!="undefined"?new TextDecoder("utf8"):void 0;function Ae(et,ot,at){for(var Ot=ot+at,ce=ot;et[ce]&&!(ce>=Ot);)++ce;if(ce-ot>16&&et.subarray&&_)return _.decode(et.subarray(ot,ce));for(var le="";ot<ce;){var Lt=et[ot++];if(!(Lt&128)){le+=String.fromCharCode(Lt);continue}var fe=et[ot++]&63;if((Lt&224)==192){le+=String.fromCharCode((Lt&31)<<6|fe);continue}var Ce=et[ot++]&63;if((Lt&240)==224?Lt=(Lt&15)<<12|fe<<6|Ce:Lt=(Lt&7)<<18|fe<<12|Ce<<6|et[ot++]&63,Lt<65536)le+=String.fromCharCode(Lt);else{var De=Lt-65536;le+=String.fromCharCode(55296|De>>10,56320|De&1023)}}return le}function un(et,ot){return et?Ae(gt,et,ot):""}function We(et,ot,at){for(var Ot=0;Ot<et.length;++Ot)ae[ot++>>0]=et.charCodeAt(Ot);at||(ae[ot>>0]=0)}function Dt(et,ot){return et%ot>0&&(et+=ot-et%ot),et}var Mn,ae,gt,fn;function An(et){Mn=et,o.HEAP8=ae=new Int8Array(et),o.HEAP16=new Int16Array(et),o.HEAP32=fn=new Int32Array(et),o.HEAPU8=gt=new Uint8Array(et),o.HEAPU16=new Uint16Array(et),o.HEAPU32=new Uint32Array(et),o.HEAPF32=new Float32Array(et),o.HEAPF64=new Float64Array(et)}o.INITIAL_MEMORY;var Ve,Nt=[],Le=[],nn=[],Gn=0;function wn(){return Yt||Gn>0}function Rn(){if(o.preRun)for(typeof o.preRun=="function"&&(o.preRun=[o.preRun]);o.preRun.length;)mn(o.preRun.shift());_t(Nt)}function Cn(){_t(Le)}function cn(){if(o.postRun)for(typeof o.postRun=="function"&&(o.postRun=[o.postRun]);o.postRun.length;)Fn(o.postRun.shift());_t(nn)}function mn(et){Nt.unshift(et)}function Jn(et){Le.unshift(et)}function Fn(et){nn.unshift(et)}var je=0,Be=null;function xn(et){je++,o.monitorRunDependencies&&o.monitorRunDependencies(je)}function Xn(et){if(je--,o.monitorRunDependencies&&o.monitorRunDependencies(je),je==0&&Be){var ot=Be;Be=null,ot()}}o.preloadedImages={},o.preloadedAudios={};function de(et){o.onAbort&&o.onAbort(et),et="Aborted("+et+")",dt(et),Mt=!0,et+=". Build with -s ASSERTIONS=1 for more info.";var ot=new WebAssembly.RuntimeError(et);throw y(ot),ot}var Se="data:application/octet-stream;base64,";function ze(et){return et.startsWith(Se)}var ee;ee="tflite-simd.wasm",ze(ee)||(ee=st(ee));function Xe(et){try{if(et==ee&&ht)return new Uint8Array(ht);if(!Gt)throw"both async and sync fetching of the wasm failed"}catch(ot){de(ot)}}function rn(){return!ht&&rt&&typeof fetch=="function"?fetch(ee,{credentials:"same-origin"}).then(function(et){if(!et.ok)throw"failed to load wasm binary file at '"+ee+"'";return et.arrayBuffer()}).catch(function(){return Xe(ee)}):Promise.resolve().then(function(){return Xe(ee)})}function Ue(){var et={a:he};function ot(Lt,fe){var Ce=Lt.exports;o.asm=Ce,Ft=o.asm.q,An(Ft.buffer),Ve=o.asm.D,Jn(o.asm.r),Xn()}xn();function at(Lt){ot(Lt.instance)}function Ot(Lt){return rn().then(function(fe){return WebAssembly.instantiate(fe,et)}).then(function(fe){return fe}).then(Lt,function(fe){dt("failed to asynchronously prepare wasm: "+fe),de(fe)})}function ce(){return!ht&&typeof WebAssembly.instantiateStreaming=="function"&&!ze(ee)&&typeof fetch=="function"?fetch(ee,{credentials:"same-origin"}).then(function(Lt){var fe=WebAssembly.instantiateStreaming(Lt,et);return fe.then(at,function(Ce){return dt("wasm streaming compile failed: "+Ce),dt("falling back to ArrayBuffer instantiation"),Ot(at)})}):Ot(at)}if(o.instantiateWasm)try{var le=o.instantiateWasm(et,ot);return le}catch(Lt){return dt("Module.instantiateWasm callback failed with error: "+Lt),!1}return ce().catch(y),{}}function _t(et){for(;et.length>0;){var ot=et.shift();if(typeof ot=="function"){ot(o);continue}var at=ot.func;typeof at=="number"?ot.arg===void 0?Ve.get(at)():Ve.get(at)(ot.arg):at(ot.arg===void 0?null:ot.arg)}}function ge(et,ot,at,Ot){de("Assertion failed: "+un(et)+", at: "+[ot?un(ot):"unknown filename",at,Ot?un(Ot):"unknown function"])}function He(et,ot){de("To use dlopen, you need to use Emscripten's linking support, see https://github.com/emscripten-core/emscripten/wiki/Linking")}function Bt(et,ot){de("To use dlopen, you need to use Emscripten's linking support, see https://github.com/emscripten-core/emscripten/wiki/Linking")}function xe(){de("")}var jt;jt=function(){return performance.now()};var be=!0;function Te(et){return fn[Ct()>>2]=et,et}function Qe(et,ot){var at;if(et===0)at=Date.now();else if((et===1||et===4)&&be)at=jt();else return Te(28),-1;return fn[ot>>2]=at/1e3|0,fn[ot+4>>2]=at%1e3*1e3*1e3|0,0}function Ge(){return 2147483648}function zt(et,ot,at){gt.copyWithin(et,ot,ot+at)}function Me(et){try{return Ft.grow(et-Mn.byteLength+65535>>>16),An(Ft.buffer),1}catch{}}function Pe(et){var ot=gt.length;et=et>>>0;var at=2147483648;if(et>at)return!1;for(var Ot=1;Ot<=4;Ot*=2){var ce=ot*(1+.2/Ot);ce=Math.min(ce,et+100663296);var le=Math.min(at,Dt(Math.max(et,ce),65536)),Lt=Me(le);if(Lt)return!0}return!1}function Ie(et){for(var ot=jt();jt()-ot<et;);}var Wn={};function on(){return T||"./this.program"}function Oe(){if(!Oe.strings){var et=(typeof navigator=="object"&&navigator.languages&&navigator.languages[0]||"C").replace("-","_")+".UTF-8",ot={USER:"web_user",LOGNAME:"web_user",PATH:"/",PWD:"/",HOME:"/home/web_user",LANG:et,_:on()};for(var at in Wn)Wn[at]===void 0?delete ot[at]:ot[at]=Wn[at];var Ot=[];for(var at in ot)Ot.push(at+"="+ot[at]);Oe.strings=Ot}return Oe.strings}var sn={mappings:{},buffers:[null,[],[]],printChar:function(et,ot){var at=sn.buffers[et];ot===0||ot===10?((et===1?Vt:dt)(Ae(at,0)),at.length=0):at.push(ot)},varargs:void 0,get:function(){sn.varargs+=4;var et=fn[sn.varargs-4>>2];return et},getStr:function(et){var ot=un(et);return ot},get64:function(et,ot){return et}};function Ze(et,ot){var at=0;return Oe().forEach(function(Ot,ce){var le=ot+at;fn[et+ce*4>>2]=le,We(Ot,le),at+=Ot.length+1}),0}function Ye(et,ot){var at=Oe();fn[et>>2]=at.length;var Ot=0;return at.forEach(function(ce){Ot+=ce.length+1}),fn[ot>>2]=Ot,0}function ve(et){te(et)}function ne(et){return 0}function _e(et,ot,at,Ot,ce){}function qt(et,ot,at,Ot){for(var ce=0,le=0;le<at;le++){for(var Lt=fn[ot+le*8>>2],fe=fn[ot+(le*8+4)>>2],Ce=0;Ce<fe;Ce++)sn.printChar(et,gt[Lt+Ce]);ce+=fe}return fn[Ot>>2]=ce,0}function Pt(){if(typeof crypto=="object"&&typeof crypto.getRandomValues=="function"){var et=new Uint8Array(1);return function(){return crypto.getRandomValues(et),et[0]}}else return function(){de("randomDevice")}}function an(et,ot){an.randomDevice||(an.randomDevice=Pt());for(var at=0;at<ot;at++)ae[et+at>>0]=an.randomDevice();return 0}var he={a:ge,e:He,d:Bt,b:xe,n:Qe,h:Ge,l:zt,m:Pe,p:Ie,f:Ze,g:Ye,j:ve,i:ne,k:_e,c:qt,o:an};Ue(),o.___wasm_call_ctors=function(){return(o.___wasm_call_ctors=o.asm.r).apply(null,arguments)},o._getModelBufferMemoryOffset=function(){return(o._getModelBufferMemoryOffset=o.asm.s).apply(null,arguments)},o._getInputMemoryOffset=function(){return(o._getInputMemoryOffset=o.asm.t).apply(null,arguments)},o._getInputHeight=function(){return(o._getInputHeight=o.asm.u).apply(null,arguments)},o._getInputWidth=function(){return(o._getInputWidth=o.asm.v).apply(null,arguments)},o._getInputChannelCount=function(){return(o._getInputChannelCount=o.asm.w).apply(null,arguments)},o._getOutputMemoryOffset=function(){return(o._getOutputMemoryOffset=o.asm.x).apply(null,arguments)},o._getOutputHeight=function(){return(o._getOutputHeight=o.asm.y).apply(null,arguments)},o._getOutputWidth=function(){return(o._getOutputWidth=o.asm.z).apply(null,arguments)},o._getOutputChannelCount=function(){return(o._getOutputChannelCount=o.asm.A).apply(null,arguments)},o._loadModel=function(){return(o._loadModel=o.asm.B).apply(null,arguments)},o._runInference=function(){return(o._runInference=o.asm.C).apply(null,arguments)};var Ct=o.___errno_location=function(){return(Ct=o.___errno_location=o.asm.E).apply(null,arguments)},Rt;function re(et){this.name="ExitStatus",this.message="Program terminated with exit("+et+")",this.status=et}Be=function et(){Rt||we(),Rt||(Be=et)};function we(et){if(je>0||(Rn(),je>0))return;function ot(){Rt||(Rt=!0,o.calledRun=!0,!Mt&&(Cn(),p(o),o.onRuntimeInitialized&&o.onRuntimeInitialized(),cn()))}o.setStatus?(o.setStatus("Running..."),setTimeout(function(){setTimeout(function(){o.setStatus("")},1),ot()},1)):ot()}o.run=we;function te(et,ot){ie(et)}function ie(et){wn()||(o.onExit&&o.onExit(et),Mt=!0),k(et,new re(et))}if(o.preInit)for(typeof o.preInit=="function"&&(o.preInit=[o.preInit]);o.preInit.length>0;)o.preInit.pop()();return we(),n.ready}}();typeof bn=="object"&&typeof module=="object"?module.exports=Pi:typeof define=="function"&&define.amd?define([],function(){return Pi}):typeof bn=="object"&&(bn.createVonageTFLiteSimdModule=Pi);class x3{constructor(){this.isSIMDSupported=!1,this.isThreadsSupported=!1,this.inputWidth=0,this.inputHeight=0,this.inputChannelCount=0,this.inputMemoryOffset=0,this.outputWidth=0,this.outputHeight=0,this.outputChannelCount=0,this.outputMemoryOffset=0}}const I3="https://d3opqjmqzxf057.cloudfront.net/ml/selfie_segmentation/4.0.0/",S3="https://d3opqjmqzxf057.cloudfront.net/ml/selfie_segmentation/4.0.0/";async function L3(i=I3,n=S3){let o=new x3;var p=new Promise(function(y,S){async function F(){return Pi({locateFile:function(rt){return i+rt}})}async function T(k){return new Promise(async(rt,z)=>{const st=k;if(typeof st=="undefined")return z("TFLite backend unavailable: wasmSimd");const Gt="selfie_segmentation_landscape";console.log("Loading tflite model:",Gt);let Vt=n+`${Gt}.tflite`;console.log("TFLite modelUrl: "+Vt);try{const ht=await(await fetch(Vt)).arrayBuffer();console.log("Model buffer size:",ht.byteLength);const Yt=st._getModelBufferMemoryOffset();console.log("Model buffer memory offset:",Yt),console.log("Loading model buffer..."),st.HEAPU8.set(new Uint8Array(ht),Yt);const Ft=st._loadModel(ht.byteLength);if(console.log("Load model result:",Ft),Ft!==0){z("Cannot load model");return}o.inputWidth=st._getInputWidth(),o.inputHeight=st._getInputHeight(),o.inputChannelCount=st._getInputChannelCount(),o.inputMemoryOffset=st._getInputMemoryOffset(),console.log("Input memory offset:",o.inputMemoryOffset),console.log("Input height:",o.inputHeight),console.log("Input width:",o.inputWidth),console.log("Input channels:",o.inputChannelCount),o.outputMemoryOffset=st._getOutputMemoryOffset(),o.outputWidth=st._getOutputWidth(),o.outputHeight=st._getOutputHeight(),o.outputChannelCount=st._getOutputChannelCount(),console.log("Output memory offset:",o.outputMemoryOffset),console.log("Output height:",o.outputHeight),console.log("Output width:",o.outputWidth),console.log("Output channels:",o.outputChannelCount),o.selectedTFLite=st}catch(dt){z(dt);return}rt()})}F().then(k=>{if(k===null)throw console.error("loadTFLite null"),"loadTFLite null";T(k).then(rt=>{y(o)}).catch(rt=>{console.error("loadTFLiteModel error"),S("loadTFLiteModel error")})}).catch(k=>{console.error("loadTFLite error:",k),S("loadTFLite error:"+k)})});return p}class T3{constructor(){this.canvas=new OffscreenCanvas(0,0),this.context=this.canvas.getContext("2d",{willReadFrequently:!0}),this.pixelCount=0,this.inputOffset=0,this.outputOffset=0}async init(n,o){this.infos=await L3(n,o),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)}getOutputDimensions(){var n,o,p,y;return{width:(o=(n=this.infos)==null?void 0:n.outputWidth)!=null?o:0,height:(y=(p=this.infos)==null?void 0:p.outputHeight)!=null?y:0}}async process(n){if(!this.mask||!this.infos)return;const o=this.infos.inputWidth,p=this.infos.inputHeight;this.context.drawImage(n,0,0,n.width,n.height,0,0,o,p);const y=this.context.getImageData(0,0,o,p),S=this.infos.selectedTFLite.HEAPF32;for(let F=0;F<this.pixelCount;F++){const T=this.inputOffset+F*3;S[T]=y.data[F*4]/255,S[T+1]=y.data[F*4+1]/255,S[T+2]=y.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)}}class Y3{constructor(){this.selfieSegmentation=new T3,this.previousDimensions={width:0,height:0}}async init(n){await this.selfieSegmentation.init(n.wasmAssetUriPath,n.tfliteAssetUriPath);const{width:o,height:p}=this.selfieSegmentation.getOutputDimensions();this.backgroundFilter=new R3({foregroundWidth:1,foregroundHeight:1,maskWidth:o,maskHeight:p})}async transform(n,o){var S,F,T,k;const p=await createImageBitmap(n),y=await this.selfieSegmentation.process(p);y?((p.width!==this.previousDimensions.width||p.height!==this.previousDimensions.height)&&(this.previousDimensions.width=p.width,this.previousDimensions.height=p.height,await((S=this.backgroundFilter)==null?void 0:S.resizeForeground(p.width,p.height))),await((F=this.backgroundFilter)==null?void 0:F.process(p,y)),n.close(),o.enqueue(new VideoFrame((T=this.backgroundFilter)==null?void 0:T.canvas,{timestamp:(k=n.timestamp)!=null?k:0,alpha:"discard"}))):o.enqueue(n)}async setBackgroundOptions(n){var o;await((o=this.backgroundFilter)==null?void 0:o.setBackgroundOptions(n))}async setVideoBGReadable(n){var o;await((o=this.backgroundFilter)==null?void 0:o.setVideoBGReadable(n))}async setVirtualBGImage(n){var o;await((o=this.backgroundFilter)==null?void 0:o.setVirtualBGImage(n))}setFlickeringOptions(n){var o;(o=this.backgroundFilter)==null||o.setFlickeringOptions(n)}}const qo=class{constructor(){this.backgroundTransformer=new Y3,this.mediaProcessor=new J2,this.rate=30}async init(n){await this.backgroundTransformer.init(n),await this.mediaProcessor.setTransformers([this.backgroundTransformer]),this.mediaProcessor.setTrackExpectedRate(this.rate),this.mediaProcessor.onAny((o,p)=>{var y;(y=this.resolveOnMediaProcessor)==null||y.call(this,{name:o,data:p})})}async onMediaProcessorEvent(){return await new Promise(n=>this.resolveOnMediaProcessor=n)}async setTrackExpectedRate(n){this.rate=n,this.mediaProcessor.setTrackExpectedRate(n)}async transform(n,o){this.mediaProcessor.transform(n,o)}async setBackgroundOptions(n){var o;await((o=this.backgroundTransformer)==null?void 0:o.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){W2(n)}};let $o=qo;(()=>{O2("ProcessorWorker",qo)})();const uu="KGZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO3ZhciBIZT0ocj0+KHJbci5JTklUPTBdPSJJTklUIixyW3IuRk9SV0FSRD0xXT0iRk9SV0FSRCIscltyLlRFUk1JTkFURT0yXT0iVEVSTUlOQVRFIixyKSkoSGV8fHt9KTtmdW5jdGlvbiBqaShyKXtyZXR1cm5bSW1hZ2VCaXRtYXAsUmVhZGFibGVTdHJlYW0sV3JpdGFibGVTdHJlYW1dLnNvbWUoZT0+ciBpbnN0YW5jZW9mIGUpfWZ1bmN0aW9uIE90KHIsZSl7Y29uc3R7aWQ6dH09cixuPUFycmF5LmlzQXJyYXkoZSk/ZTpbZV07cG9zdE1lc3NhZ2Uoe2lkOnQscmVzdWx0OmV9LG4uZmlsdGVyKGk9PmppKGkpKSl9YXN5bmMgZnVuY3Rpb24gcWkocixlKXtjb25zdHtmdW5jdGlvbk5hbWU6dCxhcmdzOm59PXI7aWYoIWUuaW5zdGFuY2UpdGhyb3ciaW5zdGFuY2Ugbm90IGluaXRpYWxpemVkIjtpZighdCl0aHJvdyJtaXNzaW5nIGZ1bmN0aW9uIG5hbWUgdG8gY2FsbCI7aWYoIWUuaW5zdGFuY2VbdF0pdGhyb3dgdW5kZWZpbmVkIGZ1bmN0aW9uIFske3R9XSBpbiBjbGFzcyAke2UuaW5zdGFuY2UuY29uc3RydWN0b3Iud29ya2VySWR9YDtPdChyLGF3YWl0IGUuaW5zdGFuY2VbdF0oLi4ubiE9bnVsbD9uOltdKSl9ZnVuY3Rpb24ga3IoKXtyZXR1cm4gdHlwZW9mIFdvcmtlckdsb2JhbFNjb3BlPCJ1IiYmc2VsZiBpbnN0YW5jZW9mIFdvcmtlckdsb2JhbFNjb3BlfWNvbnN0IExyPXt9O2Z1bmN0aW9uIFhpKHIsZSl7ZS53b3JrZXJJZD1yLGtyKCkmJihMcltlLndvcmtlcklkXT1lKX1mdW5jdGlvbiBZaShyLGUpe2lmKCFyLmFyZ3MpdGhyb3ciTWlzc2luZyBjbGFzc05hbWUgd2hpbGUgaW5pdGlhbGl6aW5nIHdvcmtlciI7Y29uc3RbdF09ci5hcmdzLG49THJbdF07aWYobillLmluc3RhbmNlPW5ldyBuKHIuYXJncy5zbGljZSgxKSk7ZWxzZSB0aHJvd2B1bmtub3duIHdvcmtlciBjbGFzcyAke3R9YDtPdChyLHR5cGVvZiBlLmluc3RhbmNlIT09dm9pZCAwKX1hc3luYyBmdW5jdGlvbiBLaShyLGUpe2NvbnN0e2FyZ3M6dH09cjtpZighZS5pbnN0YW5jZSl0aHJvdyJpbnN0YW5jZSBub3QgaW5pdGlhbGl6ZWQiO2xldCBuO2UuaW5zdGFuY2UudGVybWluYXRlJiYobj1hd2FpdCBlLmluc3RhbmNlLnRlcm1pbmF0ZSguLi50IT1udWxsP3Q6W10pKSxPdChyLG4pfWZ1bmN0aW9uIEppKCl7Y29uc3Qgcj17fTtvbm1lc3NhZ2U9YXN5bmMgZT0+e2NvbnN0IHQ9ZS5kYXRhO3N3aXRjaCh0LnR5cGUpe2Nhc2UgSGUuSU5JVDpZaSh0LHIpO2JyZWFrO2Nhc2UgSGUuRk9SV0FSRDpxaSh0LHIpO2JyZWFrO2Nhc2UgSGUuVEVSTUlOQVRFOktpKHQscik7YnJlYWt9fX1rcigpJiZKaSgpO2NsYXNzIFp7fVoudXBkYXRlcz17dHJhbnNmb3JtZXJfbmV3OiJOZXcgdHJhbnNmb3JtZXIiLHRyYW5zZm9ybWVyX251bGw6Ik51bGwgdHJhbnNmb3JtZXIifSxaLmVycm9ycz17dHJhbnNmb3JtZXJfbm9uZToiTm8gdHJhbnNmb3JtZXJzIHByb3ZpZGVkIix0cmFuc2Zvcm1lcl9zdGFydDoiQ2Fubm90IHN0YXJ0IHRyYW5zZm9ybWVyIix0cmFuc2Zvcm1lcl90cmFuc2Zvcm06IkNhbm5vdCB0cmFuc2Zvcm0gZnJhbWUiLHRyYW5zZm9ybWVyX2ZsdXNoOiJDYW5ub3QgZmx1c2ggdHJhbnNmb3JtZXIiLHJlYWRhYmxlX251bGw6IlJlYWRhYmxlIGlzIG51bGwiLHdyaXRhYmxlX251bGw6IldyaXRhYmxlIGlzIG51bGwifTt2YXIgTXQ9e2V4cG9ydHM6e319LCRyPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKCl7Zm9yKHZhciBpPW5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoKSxvPTA7bzxpLmxlbmd0aDtvKyspaVtvXT1hcmd1bWVudHNbb107cmV0dXJuIGUuYXBwbHkodCxpKX19LFFpPSRyLHRlPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7ZnVuY3Rpb24gTnQocil7cmV0dXJuIEFycmF5LmlzQXJyYXkocil9ZnVuY3Rpb24gVXQocil7cmV0dXJuIHR5cGVvZiByPT0idW5kZWZpbmVkIn1mdW5jdGlvbiBaaShyKXtyZXR1cm4gciE9PW51bGwmJiFVdChyKSYmci5jb25zdHJ1Y3RvciE9PW51bGwmJiFVdChyLmNvbnN0cnVjdG9yKSYmdHlwZW9mIHIuY29uc3RydWN0b3IuaXNCdWZmZXI9PSJmdW5jdGlvbiImJnIuY29uc3RydWN0b3IuaXNCdWZmZXIocil9ZnVuY3Rpb24genIocil7cmV0dXJuIHRlLmNhbGwocik9PT0iW29iamVjdCBBcnJheUJ1ZmZlcl0ifWZ1bmN0aW9uIGVvKHIpe3JldHVybiB0ZS5jYWxsKHIpPT09IltvYmplY3QgRm9ybURhdGFdIn1mdW5jdGlvbiB0byhyKXt2YXIgZTtyZXR1cm4gdHlwZW9mIEFycmF5QnVmZmVyIT0idW5kZWZpbmVkIiYmQXJyYXlCdWZmZXIuaXNWaWV3P2U9QXJyYXlCdWZmZXIuaXNWaWV3KHIpOmU9ciYmci5idWZmZXImJnpyKHIuYnVmZmVyKSxlfWZ1bmN0aW9uIHJvKHIpe3JldHVybiB0eXBlb2Ygcj09InN0cmluZyJ9ZnVuY3Rpb24gbm8ocil7cmV0dXJuIHR5cGVvZiByPT0ibnVtYmVyIn1mdW5jdGlvbiBHcihyKXtyZXR1cm4gciE9PW51bGwmJnR5cGVvZiByPT0ib2JqZWN0In1mdW5jdGlvbiBWZShyKXtpZih0ZS5jYWxsKHIpIT09IltvYmplY3QgT2JqZWN0XSIpcmV0dXJuITE7dmFyIGU9T2JqZWN0LmdldFByb3RvdHlwZU9mKHIpO3JldHVybiBlPT09bnVsbHx8ZT09PU9iamVjdC5wcm90b3R5cGV9ZnVuY3Rpb24gaW8ocil7cmV0dXJuIHRlLmNhbGwocik9PT0iW29iamVjdCBEYXRlXSJ9ZnVuY3Rpb24gb28ocil7cmV0dXJuIHRlLmNhbGwocik9PT0iW29iamVjdCBGaWxlXSJ9ZnVuY3Rpb24gc28ocil7cmV0dXJuIHRlLmNhbGwocik9PT0iW29iamVjdCBCbG9iXSJ9ZnVuY3Rpb24gSHIocil7cmV0dXJuIHRlLmNhbGwocik9PT0iW29iamVjdCBGdW5jdGlvbl0ifWZ1bmN0aW9uIGFvKHIpe3JldHVybiBHcihyKSYmSHIoci5waXBlKX1mdW5jdGlvbiB1byhyKXtyZXR1cm4gdGUuY2FsbChyKT09PSJbb2JqZWN0IFVSTFNlYXJjaFBhcmFtc10ifWZ1bmN0aW9uIGNvKHIpe3JldHVybiByLnRyaW0/ci50cmltKCk6ci5yZXBsYWNlKC9eXHMrfFxzKyQvZywiIil9ZnVuY3Rpb24gZm8oKXtyZXR1cm4gdHlwZW9mIG5hdmlnYXRvciE9InVuZGVmaW5lZCImJihuYXZpZ2F0b3IucHJvZHVjdD09PSJSZWFjdE5hdGl2ZSJ8fG5hdmlnYXRvci5wcm9kdWN0PT09Ik5hdGl2ZVNjcmlwdCJ8fG5hdmlnYXRvci5wcm9kdWN0PT09Ik5TIik/ITE6dHlwZW9mIHdpbmRvdyE9InVuZGVmaW5lZCImJnR5cGVvZiBkb2N1bWVudCE9InVuZGVmaW5lZCJ9ZnVuY3Rpb24gQnQocixlKXtpZighKHI9PT1udWxsfHx0eXBlb2Ygcj09InVuZGVmaW5lZCIpKWlmKHR5cGVvZiByIT0ib2JqZWN0IiYmKHI9W3JdKSxOdChyKSlmb3IodmFyIHQ9MCxuPXIubGVuZ3RoO3Q8bjt0KyspZS5jYWxsKG51bGwsclt0XSx0LHIpO2Vsc2UgZm9yKHZhciBpIGluIHIpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsaSkmJmUuY2FsbChudWxsLHJbaV0saSxyKX1mdW5jdGlvbiBrdCgpe3ZhciByPXt9O2Z1bmN0aW9uIGUoaSxvKXtWZShyW29dKSYmVmUoaSk/cltvXT1rdChyW29dLGkpOlZlKGkpP3Jbb109a3Qoe30saSk6TnQoaSk/cltvXT1pLnNsaWNlKCk6cltvXT1pfWZvcih2YXIgdD0wLG49YXJndW1lbnRzLmxlbmd0aDt0PG47dCsrKUJ0KGFyZ3VtZW50c1t0XSxlKTtyZXR1cm4gcn1mdW5jdGlvbiBsbyhyLGUsdCl7cmV0dXJuIEJ0KGUsZnVuY3Rpb24oaSxvKXt0JiZ0eXBlb2YgaT09ImZ1bmN0aW9uIj9yW29dPVFpKGksdCk6cltvXT1pfSkscn1mdW5jdGlvbiBtbyhyKXtyZXR1cm4gci5jaGFyQ29kZUF0KDApPT09NjUyNzkmJihyPXIuc2xpY2UoMSkpLHJ9dmFyICQ9e2lzQXJyYXk6TnQsaXNBcnJheUJ1ZmZlcjp6cixpc0J1ZmZlcjpaaSxpc0Zvcm1EYXRhOmVvLGlzQXJyYXlCdWZmZXJWaWV3OnRvLGlzU3RyaW5nOnJvLGlzTnVtYmVyOm5vLGlzT2JqZWN0OkdyLGlzUGxhaW5PYmplY3Q6VmUsaXNVbmRlZmluZWQ6VXQsaXNEYXRlOmlvLGlzRmlsZTpvbyxpc0Jsb2I6c28saXNGdW5jdGlvbjpIcixpc1N0cmVhbTphbyxpc1VSTFNlYXJjaFBhcmFtczp1byxpc1N0YW5kYXJkQnJvd3NlckVudjpmbyxmb3JFYWNoOkJ0LG1lcmdlOmt0LGV4dGVuZDpsbyx0cmltOmNvLHN0cmlwQk9NOm1vfSx4ZT0kO2Z1bmN0aW9uIFZyKHIpe3JldHVybiBlbmNvZGVVUklDb21wb25lbnQocikucmVwbGFjZSgvJTNBL2dpLCI6IikucmVwbGFjZSgvJTI0L2csIiQiKS5yZXBsYWNlKC8lMkMvZ2ksIiwiKS5yZXBsYWNlKC8lMjAvZywiKyIpLnJlcGxhY2UoLyU1Qi9naSwiWyIpLnJlcGxhY2UoLyU1RC9naSwiXSIpfXZhciBXcj1mdW5jdGlvbihlLHQsbil7aWYoIXQpcmV0dXJuIGU7dmFyIGk7aWYobilpPW4odCk7ZWxzZSBpZih4ZS5pc1VSTFNlYXJjaFBhcmFtcyh0KSlpPXQudG9TdHJpbmcoKTtlbHNle3ZhciBvPVtdO3hlLmZvckVhY2godCxmdW5jdGlvbih1LGYpe3U9PT1udWxsfHx0eXBlb2YgdT09InVuZGVmaW5lZCJ8fCh4ZS5pc0FycmF5KHUpP2Y9ZisiW10iOnU9W3VdLHhlLmZvckVhY2godSxmdW5jdGlvbihkKXt4ZS5pc0RhdGUoZCk/ZD1kLnRvSVNPU3RyaW5nKCk6eGUuaXNPYmplY3QoZCkmJihkPUpTT04uc3RyaW5naWZ5KGQpKSxvLnB1c2goVnIoZikrIj0iK1ZyKGQpKX0pKX0pLGk9by5qb2luKCImIil9aWYoaSl7dmFyIHM9ZS5pbmRleE9mKCIjIik7cyE9PS0xJiYoZT1lLnNsaWNlKDAscykpLGUrPShlLmluZGV4T2YoIj8iKT09PS0xPyI/IjoiJiIpK2l9cmV0dXJuIGV9LGhvPSQ7ZnVuY3Rpb24gV2UoKXt0aGlzLmhhbmRsZXJzPVtdfVdlLnByb3RvdHlwZS51c2U9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiB0aGlzLmhhbmRsZXJzLnB1c2goe2Z1bGZpbGxlZDplLHJlamVjdGVkOnQsc3luY2hyb25vdXM6bj9uLnN5bmNocm9ub3VzOiExLHJ1bldoZW46bj9uLnJ1bldoZW46bnVsbH0pLHRoaXMuaGFuZGxlcnMubGVuZ3RoLTF9LFdlLnByb3RvdHlwZS5lamVjdD1mdW5jdGlvbihlKXt0aGlzLmhhbmRsZXJzW2VdJiYodGhpcy5oYW5kbGVyc1tlXT1udWxsKX0sV2UucHJvdG90eXBlLmZvckVhY2g9ZnVuY3Rpb24oZSl7aG8uZm9yRWFjaCh0aGlzLmhhbmRsZXJzLGZ1bmN0aW9uKG4pe24hPT1udWxsJiZlKG4pfSl9O3ZhciBwbz1XZSx5bz0kLF9vPWZ1bmN0aW9uKGUsdCl7eW8uZm9yRWFjaChlLGZ1bmN0aW9uKGksbyl7byE9PXQmJm8udG9VcHBlckNhc2UoKT09PXQudG9VcHBlckNhc2UoKSYmKGVbdF09aSxkZWxldGUgZVtvXSl9KX0sanI9ZnVuY3Rpb24oZSx0LG4saSxvKXtyZXR1cm4gZS5jb25maWc9dCxuJiYoZS5jb2RlPW4pLGUucmVxdWVzdD1pLGUucmVzcG9uc2U9byxlLmlzQXhpb3NFcnJvcj0hMCxlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybnttZXNzYWdlOnRoaXMubWVzc2FnZSxuYW1lOnRoaXMubmFtZSxkZXNjcmlwdGlvbjp0aGlzLmRlc2NyaXB0aW9uLG51bWJlcjp0aGlzLm51bWJlcixmaWxlTmFtZTp0aGlzLmZpbGVOYW1lLGxpbmVOdW1iZXI6dGhpcy5saW5lTnVtYmVyLGNvbHVtbk51bWJlcjp0aGlzLmNvbHVtbk51bWJlcixzdGFjazp0aGlzLnN0YWNrLGNvbmZpZzp0aGlzLmNvbmZpZyxjb2RlOnRoaXMuY29kZSxzdGF0dXM6dGhpcy5yZXNwb25zZSYmdGhpcy5yZXNwb25zZS5zdGF0dXM/dGhpcy5yZXNwb25zZS5zdGF0dXM6bnVsbH19LGV9LHhvPWpyLHFyPWZ1bmN0aW9uKGUsdCxuLGksbyl7dmFyIHM9bmV3IEVycm9yKGUpO3JldHVybiB4byhzLHQsbixpLG8pfSxibz1xcixnbz1mdW5jdGlvbihlLHQsbil7dmFyIGk9bi5jb25maWcudmFsaWRhdGVTdGF0dXM7IW4uc3RhdHVzfHwhaXx8aShuLnN0YXR1cyk/ZShuKTp0KGJvKCJSZXF1ZXN0IGZhaWxlZCB3aXRoIHN0YXR1cyBjb2RlICIrbi5zdGF0dXMsbi5jb25maWcsbnVsbCxuLnJlcXVlc3QsbikpfSxqZT0kLHZvPWplLmlzU3RhbmRhcmRCcm93c2VyRW52KCk/ZnVuY3Rpb24oKXtyZXR1cm57d3JpdGU6ZnVuY3Rpb24odCxuLGksbyxzLGEpe3ZhciB1PVtdO3UucHVzaCh0KyI9IitlbmNvZGVVUklDb21wb25lbnQobikpLGplLmlzTnVtYmVyKGkpJiZ1LnB1c2goImV4cGlyZXM9IituZXcgRGF0ZShpKS50b0dNVFN0cmluZygpKSxqZS5pc1N0cmluZyhvKSYmdS5wdXNoKCJwYXRoPSIrbyksamUuaXNTdHJpbmcocykmJnUucHVzaCgiZG9tYWluPSIrcyksYT09PSEwJiZ1LnB1c2goInNlY3VyZSIpLGRvY3VtZW50LmNvb2tpZT11LmpvaW4oIjsgIil9LHJlYWQ6ZnVuY3Rpb24odCl7dmFyIG49ZG9jdW1lbnQuY29va2llLm1hdGNoKG5ldyBSZWdFeHAoIihefDtcXHMqKSgiK3QrIik9KFteO10qKSIpKTtyZXR1cm4gbj9kZWNvZGVVUklDb21wb25lbnQoblszXSk6bnVsbH0scmVtb3ZlOmZ1bmN0aW9uKHQpe3RoaXMud3JpdGUodCwiIixEYXRlLm5vdygpLTg2NGU1KX19fSgpOmZ1bmN0aW9uKCl7cmV0dXJue3dyaXRlOmZ1bmN0aW9uKCl7fSxyZWFkOmZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9LHJlbW92ZTpmdW5jdGlvbigpe319fSgpLEVvPWZ1bmN0aW9uKGUpe3JldHVybi9eKFthLXpdW2EtelxkK1wtLl0qOik/XC9cLy9pLnRlc3QoZSl9LFRvPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQ/ZS5yZXBsYWNlKC9cLyskLywiIikrIi8iK3QucmVwbGFjZSgvXlwvKy8sIiIpOmV9LEFvPUVvLHdvPVRvLFJvPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUmJiFBbyh0KT93byhlLHQpOnR9LEx0PSQsU289WyJhZ2UiLCJhdXRob3JpemF0aW9uIiwiY29udGVudC1sZW5ndGgiLCJjb250ZW50LXR5cGUiLCJldGFnIiwiZXhwaXJlcyIsImZyb20iLCJob3N0IiwiaWYtbW9kaWZpZWQtc2luY2UiLCJpZi11bm1vZGlmaWVkLXNpbmNlIiwibGFzdC1tb2RpZmllZCIsImxvY2F0aW9uIiwibWF4LWZvcndhcmRzIiwicHJveHktYXV0aG9yaXphdGlvbiIsInJlZmVyZXIiLCJyZXRyeS1hZnRlciIsInVzZXItYWdlbnQiXSxJbz1mdW5jdGlvbihlKXt2YXIgdD17fSxuLGksbztyZXR1cm4gZSYmTHQuZm9yRWFjaChlLnNwbGl0KGAKYCksZnVuY3Rpb24oYSl7aWYobz1hLmluZGV4T2YoIjoiKSxuPUx0LnRyaW0oYS5zdWJzdHIoMCxvKSkudG9Mb3dlckNhc2UoKSxpPUx0LnRyaW0oYS5zdWJzdHIobysxKSksbil7aWYodFtuXSYmU28uaW5kZXhPZihuKT49MClyZXR1cm47bj09PSJzZXQtY29va2llIj90W25dPSh0W25dP3Rbbl06W10pLmNvbmNhdChbaV0pOnRbbl09dFtuXT90W25dKyIsICIraTppfX0pLHR9LFhyPSQsRm89WHIuaXNTdGFuZGFyZEJyb3dzZXJFbnYoKT9mdW5jdGlvbigpe3ZhciBlPS8obXNpZXx0cmlkZW50KS9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCksdD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIiksbjtmdW5jdGlvbiBpKG8pe3ZhciBzPW87cmV0dXJuIGUmJih0LnNldEF0dHJpYnV0ZSgiaHJlZiIscykscz10LmhyZWYpLHQuc2V0QXR0cmlidXRlKCJocmVmIixzKSx7aHJlZjp0LmhyZWYscHJvdG9jb2w6dC5wcm90b2NvbD90LnByb3RvY29sLnJlcGxhY2UoLzokLywiIik6IiIsaG9zdDp0Lmhvc3Qsc2VhcmNoOnQuc2VhcmNoP3Quc2VhcmNoLnJlcGxhY2UoL15cPy8sIiIpOiIiLGhhc2g6dC5oYXNoP3QuaGFzaC5yZXBsYWNlKC9eIy8sIiIpOiIiLGhvc3RuYW1lOnQuaG9zdG5hbWUscG9ydDp0LnBvcnQscGF0aG5hbWU6dC5wYXRobmFtZS5jaGFyQXQoMCk9PT0iLyI/dC5wYXRobmFtZToiLyIrdC5wYXRobmFtZX19cmV0dXJuIG49aSh3aW5kb3cubG9jYXRpb24uaHJlZiksZnVuY3Rpb24ocyl7dmFyIGE9WHIuaXNTdHJpbmcocyk/aShzKTpzO3JldHVybiBhLnByb3RvY29sPT09bi5wcm90b2NvbCYmYS5ob3N0PT09bi5ob3N0fX0oKTpmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiEwfX0oKTtmdW5jdGlvbiAkdChyKXt0aGlzLm1lc3NhZ2U9cn0kdC5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4iQ2FuY2VsIisodGhpcy5tZXNzYWdlPyI6ICIrdGhpcy5tZXNzYWdlOiIiKX0sJHQucHJvdG90eXBlLl9fQ0FOQ0VMX189ITA7dmFyIHFlPSR0LFhlPSQsUG89Z28sRG89dm8sQ289V3IsT289Um8sTW89SW8sTm89Rm8senQ9cXIsVW89S2UsQm89cWUsWXI9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKG4saSl7dmFyIG89ZS5kYXRhLHM9ZS5oZWFkZXJzLGE9ZS5yZXNwb25zZVR5cGUsdTtmdW5jdGlvbiBmKCl7ZS5jYW5jZWxUb2tlbiYmZS5jYW5jZWxUb2tlbi51bnN1YnNjcmliZSh1KSxlLnNpZ25hbCYmZS5zaWduYWwucmVtb3ZlRXZlbnRMaXN0ZW5lcigiYWJvcnQiLHUpfVhlLmlzRm9ybURhdGEobykmJmRlbGV0ZSBzWyJDb250ZW50LVR5cGUiXTt2YXIgYz1uZXcgWE1MSHR0cFJlcXVlc3Q7aWYoZS5hdXRoKXt2YXIgZD1lLmF1dGgudXNlcm5hbWV8fCIiLHA9ZS5hdXRoLnBhc3N3b3JkP3VuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChlLmF1dGgucGFzc3dvcmQpKToiIjtzLkF1dGhvcml6YXRpb249IkJhc2ljICIrYnRvYShkKyI6IitwKX12YXIgeT1PbyhlLmJhc2VVUkwsZS51cmwpO2Mub3BlbihlLm1ldGhvZC50b1VwcGVyQ2FzZSgpLENvKHksZS5wYXJhbXMsZS5wYXJhbXNTZXJpYWxpemVyKSwhMCksYy50aW1lb3V0PWUudGltZW91dDtmdW5jdGlvbiBtKCl7aWYoISFjKXt2YXIgYj0iZ2V0QWxsUmVzcG9uc2VIZWFkZXJzImluIGM/TW8oYy5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKSk6bnVsbCxnPSFhfHxhPT09InRleHQifHxhPT09Impzb24iP2MucmVzcG9uc2VUZXh0OmMucmVzcG9uc2UsVD17ZGF0YTpnLHN0YXR1czpjLnN0YXR1cyxzdGF0dXNUZXh0OmMuc3RhdHVzVGV4dCxoZWFkZXJzOmIsY29uZmlnOmUscmVxdWVzdDpjfTtQbyhmdW5jdGlvbihMKXtuKEwpLGYoKX0sZnVuY3Rpb24oTCl7aShMKSxmKCl9LFQpLGM9bnVsbH19aWYoIm9ubG9hZGVuZCJpbiBjP2Mub25sb2FkZW5kPW06Yy5vbnJlYWR5c3RhdGVjaGFuZ2U9ZnVuY3Rpb24oKXshY3x8Yy5yZWFkeVN0YXRlIT09NHx8Yy5zdGF0dXM9PT0wJiYhKGMucmVzcG9uc2VVUkwmJmMucmVzcG9uc2VVUkwuaW5kZXhPZigiZmlsZToiKT09PTApfHxzZXRUaW1lb3V0KG0pfSxjLm9uYWJvcnQ9ZnVuY3Rpb24oKXshY3x8KGkoenQoIlJlcXVlc3QgYWJvcnRlZCIsZSwiRUNPTk5BQk9SVEVEIixjKSksYz1udWxsKX0sYy5vbmVycm9yPWZ1bmN0aW9uKCl7aSh6dCgiTmV0d29yayBFcnJvciIsZSxudWxsLGMpKSxjPW51bGx9LGMub250aW1lb3V0PWZ1bmN0aW9uKCl7dmFyIGc9ZS50aW1lb3V0PyJ0aW1lb3V0IG9mICIrZS50aW1lb3V0KyJtcyBleGNlZWRlZCI6InRpbWVvdXQgZXhjZWVkZWQiLFQ9ZS50cmFuc2l0aW9uYWx8fFVvLnRyYW5zaXRpb25hbDtlLnRpbWVvdXRFcnJvck1lc3NhZ2UmJihnPWUudGltZW91dEVycm9yTWVzc2FnZSksaSh6dChnLGUsVC5jbGFyaWZ5VGltZW91dEVycm9yPyJFVElNRURPVVQiOiJFQ09OTkFCT1JURUQiLGMpKSxjPW51bGx9LFhlLmlzU3RhbmRhcmRCcm93c2VyRW52KCkpe3ZhciBfPShlLndpdGhDcmVkZW50aWFsc3x8Tm8oeSkpJiZlLnhzcmZDb29raWVOYW1lP0RvLnJlYWQoZS54c3JmQ29va2llTmFtZSk6dm9pZCAwO18mJihzW2UueHNyZkhlYWRlck5hbWVdPV8pfSJzZXRSZXF1ZXN0SGVhZGVyImluIGMmJlhlLmZvckVhY2gocyxmdW5jdGlvbihnLFQpe3R5cGVvZiBvPT0idW5kZWZpbmVkIiYmVC50b0xvd2VyQ2FzZSgpPT09ImNvbnRlbnQtdHlwZSI/ZGVsZXRlIHNbVF06Yy5zZXRSZXF1ZXN0SGVhZGVyKFQsZyl9KSxYZS5pc1VuZGVmaW5lZChlLndpdGhDcmVkZW50aWFscyl8fChjLndpdGhDcmVkZW50aWFscz0hIWUud2l0aENyZWRlbnRpYWxzKSxhJiZhIT09Impzb24iJiYoYy5yZXNwb25zZVR5cGU9ZS5yZXNwb25zZVR5cGUpLHR5cGVvZiBlLm9uRG93bmxvYWRQcm9ncmVzcz09ImZ1bmN0aW9uIiYmYy5hZGRFdmVudExpc3RlbmVyKCJwcm9ncmVzcyIsZS5vbkRvd25sb2FkUHJvZ3Jlc3MpLHR5cGVvZiBlLm9uVXBsb2FkUHJvZ3Jlc3M9PSJmdW5jdGlvbiImJmMudXBsb2FkJiZjLnVwbG9hZC5hZGRFdmVudExpc3RlbmVyKCJwcm9ncmVzcyIsZS5vblVwbG9hZFByb2dyZXNzKSwoZS5jYW5jZWxUb2tlbnx8ZS5zaWduYWwpJiYodT1mdW5jdGlvbihiKXshY3x8KGkoIWJ8fGImJmIudHlwZT9uZXcgQm8oImNhbmNlbGVkIik6YiksYy5hYm9ydCgpLGM9bnVsbCl9LGUuY2FuY2VsVG9rZW4mJmUuY2FuY2VsVG9rZW4uc3Vic2NyaWJlKHUpLGUuc2lnbmFsJiYoZS5zaWduYWwuYWJvcnRlZD91KCk6ZS5zaWduYWwuYWRkRXZlbnRMaXN0ZW5lcigiYWJvcnQiLHUpKSksb3x8KG89bnVsbCksYy5zZW5kKG8pfSl9LEM9JCxLcj1fbyxrbz1qcixMbz17IkNvbnRlbnQtVHlwZSI6ImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCJ9O2Z1bmN0aW9uIEpyKHIsZSl7IUMuaXNVbmRlZmluZWQocikmJkMuaXNVbmRlZmluZWQoclsiQ29udGVudC1UeXBlIl0pJiYoclsiQ29udGVudC1UeXBlIl09ZSl9ZnVuY3Rpb24gJG8oKXt2YXIgcjtyZXR1cm4odHlwZW9mIFhNTEh0dHBSZXF1ZXN0IT0idW5kZWZpbmVkInx8dHlwZW9mIHByb2Nlc3MhPSJ1bmRlZmluZWQiJiZPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwocHJvY2Vzcyk9PT0iW29iamVjdCBwcm9jZXNzXSIpJiYocj1Zcikscn1mdW5jdGlvbiB6byhyLGUsdCl7aWYoQy5pc1N0cmluZyhyKSl0cnl7cmV0dXJuKGV8fEpTT04ucGFyc2UpKHIpLEMudHJpbShyKX1jYXRjaChuKXtpZihuLm5hbWUhPT0iU3ludGF4RXJyb3IiKXRocm93IG59cmV0dXJuKHR8fEpTT04uc3RyaW5naWZ5KShyKX12YXIgWWU9e3RyYW5zaXRpb25hbDp7c2lsZW50SlNPTlBhcnNpbmc6ITAsZm9yY2VkSlNPTlBhcnNpbmc6ITAsY2xhcmlmeVRpbWVvdXRFcnJvcjohMX0sYWRhcHRlcjokbygpLHRyYW5zZm9ybVJlcXVlc3Q6W2Z1bmN0aW9uKGUsdCl7cmV0dXJuIEtyKHQsIkFjY2VwdCIpLEtyKHQsIkNvbnRlbnQtVHlwZSIpLEMuaXNGb3JtRGF0YShlKXx8Qy5pc0FycmF5QnVmZmVyKGUpfHxDLmlzQnVmZmVyKGUpfHxDLmlzU3RyZWFtKGUpfHxDLmlzRmlsZShlKXx8Qy5pc0Jsb2IoZSk/ZTpDLmlzQXJyYXlCdWZmZXJWaWV3KGUpP2UuYnVmZmVyOkMuaXNVUkxTZWFyY2hQYXJhbXMoZSk/KEpyKHQsImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZDtjaGFyc2V0PXV0Zi04IiksZS50b1N0cmluZygpKTpDLmlzT2JqZWN0KGUpfHx0JiZ0WyJDb250ZW50LVR5cGUiXT09PSJhcHBsaWNhdGlvbi9qc29uIj8oSnIodCwiYXBwbGljYXRpb24vanNvbiIpLHpvKGUpKTplfV0sdHJhbnNmb3JtUmVzcG9uc2U6W2Z1bmN0aW9uKGUpe3ZhciB0PXRoaXMudHJhbnNpdGlvbmFsfHxZZS50cmFuc2l0aW9uYWwsbj10JiZ0LnNpbGVudEpTT05QYXJzaW5nLGk9dCYmdC5mb3JjZWRKU09OUGFyc2luZyxvPSFuJiZ0aGlzLnJlc3BvbnNlVHlwZT09PSJqc29uIjtpZihvfHxpJiZDLmlzU3RyaW5nKGUpJiZlLmxlbmd0aCl0cnl7cmV0dXJuIEpTT04ucGFyc2UoZSl9Y2F0Y2gocyl7aWYobyl0aHJvdyBzLm5hbWU9PT0iU3ludGF4RXJyb3IiP2tvKHMsdGhpcywiRV9KU09OX1BBUlNFIik6c31yZXR1cm4gZX1dLHRpbWVvdXQ6MCx4c3JmQ29va2llTmFtZToiWFNSRi1UT0tFTiIseHNyZkhlYWRlck5hbWU6IlgtWFNSRi1UT0tFTiIsbWF4Q29udGVudExlbmd0aDotMSxtYXhCb2R5TGVuZ3RoOi0xLHZhbGlkYXRlU3RhdHVzOmZ1bmN0aW9uKGUpe3JldHVybiBlPj0yMDAmJmU8MzAwfSxoZWFkZXJzOntjb21tb246e0FjY2VwdDoiYXBwbGljYXRpb24vanNvbiwgdGV4dC9wbGFpbiwgKi8qIn19fTtDLmZvckVhY2goWyJkZWxldGUiLCJnZXQiLCJoZWFkIl0sZnVuY3Rpb24oZSl7WWUuaGVhZGVyc1tlXT17fX0pLEMuZm9yRWFjaChbInBvc3QiLCJwdXQiLCJwYXRjaCJdLGZ1bmN0aW9uKGUpe1llLmhlYWRlcnNbZV09Qy5tZXJnZShMbyl9KTt2YXIgS2U9WWUsR289JCxIbz1LZSxWbz1mdW5jdGlvbihlLHQsbil7dmFyIGk9dGhpc3x8SG87cmV0dXJuIEdvLmZvckVhY2gobixmdW5jdGlvbihzKXtlPXMuY2FsbChpLGUsdCl9KSxlfSxRcj1mdW5jdGlvbihlKXtyZXR1cm4hIShlJiZlLl9fQ0FOQ0VMX18pfSxacj0kLEd0PVZvLFdvPVFyLGpvPUtlLHFvPXFlO2Z1bmN0aW9uIEh0KHIpe2lmKHIuY2FuY2VsVG9rZW4mJnIuY2FuY2VsVG9rZW4udGhyb3dJZlJlcXVlc3RlZCgpLHIuc2lnbmFsJiZyLnNpZ25hbC5hYm9ydGVkKXRocm93IG5ldyBxbygiY2FuY2VsZWQiKX12YXIgWG89ZnVuY3Rpb24oZSl7SHQoZSksZS5oZWFkZXJzPWUuaGVhZGVyc3x8e30sZS5kYXRhPUd0LmNhbGwoZSxlLmRhdGEsZS5oZWFkZXJzLGUudHJhbnNmb3JtUmVxdWVzdCksZS5oZWFkZXJzPVpyLm1lcmdlKGUuaGVhZGVycy5jb21tb258fHt9LGUuaGVhZGVyc1tlLm1ldGhvZF18fHt9LGUuaGVhZGVycyksWnIuZm9yRWFjaChbImRlbGV0ZSIsImdldCIsImhlYWQiLCJwb3N0IiwicHV0IiwicGF0Y2giLCJjb21tb24iXSxmdW5jdGlvbihpKXtkZWxldGUgZS5oZWFkZXJzW2ldfSk7dmFyIHQ9ZS5hZGFwdGVyfHxqby5hZGFwdGVyO3JldHVybiB0KGUpLnRoZW4oZnVuY3Rpb24oaSl7cmV0dXJuIEh0KGUpLGkuZGF0YT1HdC5jYWxsKGUsaS5kYXRhLGkuaGVhZGVycyxlLnRyYW5zZm9ybVJlc3BvbnNlKSxpfSxmdW5jdGlvbihpKXtyZXR1cm4gV28oaSl8fChIdChlKSxpJiZpLnJlc3BvbnNlJiYoaS5yZXNwb25zZS5kYXRhPUd0LmNhbGwoZSxpLnJlc3BvbnNlLmRhdGEsaS5yZXNwb25zZS5oZWFkZXJzLGUudHJhbnNmb3JtUmVzcG9uc2UpKSksUHJvbWlzZS5yZWplY3QoaSl9KX0sej0kLGVuPWZ1bmN0aW9uKGUsdCl7dD10fHx7fTt2YXIgbj17fTtmdW5jdGlvbiBpKGMsZCl7cmV0dXJuIHouaXNQbGFpbk9iamVjdChjKSYmei5pc1BsYWluT2JqZWN0KGQpP3oubWVyZ2UoYyxkKTp6LmlzUGxhaW5PYmplY3QoZCk/ei5tZXJnZSh7fSxkKTp6LmlzQXJyYXkoZCk/ZC5zbGljZSgpOmR9ZnVuY3Rpb24gbyhjKXtpZih6LmlzVW5kZWZpbmVkKHRbY10pKXtpZighei5pc1VuZGVmaW5lZChlW2NdKSlyZXR1cm4gaSh2b2lkIDAsZVtjXSl9ZWxzZSByZXR1cm4gaShlW2NdLHRbY10pfWZ1bmN0aW9uIHMoYyl7aWYoIXouaXNVbmRlZmluZWQodFtjXSkpcmV0dXJuIGkodm9pZCAwLHRbY10pfWZ1bmN0aW9uIGEoYyl7aWYoei5pc1VuZGVmaW5lZCh0W2NdKSl7aWYoIXouaXNVbmRlZmluZWQoZVtjXSkpcmV0dXJuIGkodm9pZCAwLGVbY10pfWVsc2UgcmV0dXJuIGkodm9pZCAwLHRbY10pfWZ1bmN0aW9uIHUoYyl7aWYoYyBpbiB0KXJldHVybiBpKGVbY10sdFtjXSk7aWYoYyBpbiBlKXJldHVybiBpKHZvaWQgMCxlW2NdKX12YXIgZj17dXJsOnMsbWV0aG9kOnMsZGF0YTpzLGJhc2VVUkw6YSx0cmFuc2Zvcm1SZXF1ZXN0OmEsdHJhbnNmb3JtUmVzcG9uc2U6YSxwYXJhbXNTZXJpYWxpemVyOmEsdGltZW91dDphLHRpbWVvdXRNZXNzYWdlOmEsd2l0aENyZWRlbnRpYWxzOmEsYWRhcHRlcjphLHJlc3BvbnNlVHlwZTphLHhzcmZDb29raWVOYW1lOmEseHNyZkhlYWRlck5hbWU6YSxvblVwbG9hZFByb2dyZXNzOmEsb25Eb3dubG9hZFByb2dyZXNzOmEsZGVjb21wcmVzczphLG1heENvbnRlbnRMZW5ndGg6YSxtYXhCb2R5TGVuZ3RoOmEsdHJhbnNwb3J0OmEsaHR0cEFnZW50OmEsaHR0cHNBZ2VudDphLGNhbmNlbFRva2VuOmEsc29ja2V0UGF0aDphLHJlc3BvbnNlRW5jb2Rpbmc6YSx2YWxpZGF0ZVN0YXR1czp1fTtyZXR1cm4gei5mb3JFYWNoKE9iamVjdC5rZXlzKGUpLmNvbmNhdChPYmplY3Qua2V5cyh0KSksZnVuY3Rpb24oZCl7dmFyIHA9ZltkXXx8byx5PXAoZCk7ei5pc1VuZGVmaW5lZCh5KSYmcCE9PXV8fChuW2RdPXkpfSksbn0sdG49e3ZlcnNpb246IjAuMjUuMCJ9LFlvPXRuLnZlcnNpb24sVnQ9e307WyJvYmplY3QiLCJib29sZWFuIiwibnVtYmVyIiwiZnVuY3Rpb24iLCJzdHJpbmciLCJzeW1ib2wiXS5mb3JFYWNoKGZ1bmN0aW9uKHIsZSl7VnRbcl09ZnVuY3Rpb24obil7cmV0dXJuIHR5cGVvZiBuPT09cnx8ImEiKyhlPDE/Im4gIjoiICIpK3J9fSk7dmFyIHJuPXt9O1Z0LnRyYW5zaXRpb25hbD1mdW5jdGlvbihlLHQsbil7ZnVuY3Rpb24gaShvLHMpe3JldHVybiJbQXhpb3MgdiIrWW8rIl0gVHJhbnNpdGlvbmFsIG9wdGlvbiAnIitvKyInIitzKyhuPyIuICIrbjoiIil9cmV0dXJuIGZ1bmN0aW9uKG8scyxhKXtpZihlPT09ITEpdGhyb3cgbmV3IEVycm9yKGkocywiIGhhcyBiZWVuIHJlbW92ZWQiKyh0PyIgaW4gIit0OiIiKSkpO3JldHVybiB0JiYhcm5bc10mJihybltzXT0hMCxjb25zb2xlLndhcm4oaShzLCIgaGFzIGJlZW4gZGVwcmVjYXRlZCBzaW5jZSB2Iit0KyIgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgbmVhciBmdXR1cmUiKSkpLGU/ZShvLHMsYSk6ITB9fTtmdW5jdGlvbiBLbyhyLGUsdCl7aWYodHlwZW9mIHIhPSJvYmplY3QiKXRocm93IG5ldyBUeXBlRXJyb3IoIm9wdGlvbnMgbXVzdCBiZSBhbiBvYmplY3QiKTtmb3IodmFyIG49T2JqZWN0LmtleXMociksaT1uLmxlbmd0aDtpLS0gPjA7KXt2YXIgbz1uW2ldLHM9ZVtvXTtpZihzKXt2YXIgYT1yW29dLHU9YT09PXZvaWQgMHx8cyhhLG8scik7aWYodSE9PSEwKXRocm93IG5ldyBUeXBlRXJyb3IoIm9wdGlvbiAiK28rIiBtdXN0IGJlICIrdSk7Y29udGludWV9aWYodCE9PSEwKXRocm93IEVycm9yKCJVbmtub3duIG9wdGlvbiAiK28pfX12YXIgSm89e2Fzc2VydE9wdGlvbnM6S28sdmFsaWRhdG9yczpWdH0sbm49JCxRbz1Xcixvbj1wbyxzbj1YbyxKZT1lbixhbj1KbyxiZT1hbi52YWxpZGF0b3JzO2Z1bmN0aW9uIEllKHIpe3RoaXMuZGVmYXVsdHM9cix0aGlzLmludGVyY2VwdG9ycz17cmVxdWVzdDpuZXcgb24scmVzcG9uc2U6bmV3IG9ufX1JZS5wcm90b3R5cGUucmVxdWVzdD1mdW5jdGlvbihlLHQpe2lmKHR5cGVvZiBlPT0ic3RyaW5nIj8odD10fHx7fSx0LnVybD1lKTp0PWV8fHt9LCF0LnVybCl0aHJvdyBuZXcgRXJyb3IoIlByb3ZpZGVkIGNvbmZpZyB1cmwgaXMgbm90IHZhbGlkIik7dD1KZSh0aGlzLmRlZmF1bHRzLHQpLHQubWV0aG9kP3QubWV0aG9kPXQubWV0aG9kLnRvTG93ZXJDYXNlKCk6dGhpcy5kZWZhdWx0cy5tZXRob2Q/dC5tZXRob2Q9dGhpcy5kZWZhdWx0cy5tZXRob2QudG9Mb3dlckNhc2UoKTp0Lm1ldGhvZD0iZ2V0Ijt2YXIgbj10LnRyYW5zaXRpb25hbDtuIT09dm9pZCAwJiZhbi5hc3NlcnRPcHRpb25zKG4se3NpbGVudEpTT05QYXJzaW5nOmJlLnRyYW5zaXRpb25hbChiZS5ib29sZWFuKSxmb3JjZWRKU09OUGFyc2luZzpiZS50cmFuc2l0aW9uYWwoYmUuYm9vbGVhbiksY2xhcmlmeVRpbWVvdXRFcnJvcjpiZS50cmFuc2l0aW9uYWwoYmUuYm9vbGVhbil9LCExKTt2YXIgaT1bXSxvPSEwO3RoaXMuaW50ZXJjZXB0b3JzLnJlcXVlc3QuZm9yRWFjaChmdW5jdGlvbih5KXt0eXBlb2YgeS5ydW5XaGVuPT0iZnVuY3Rpb24iJiZ5LnJ1bldoZW4odCk9PT0hMXx8KG89byYmeS5zeW5jaHJvbm91cyxpLnVuc2hpZnQoeS5mdWxmaWxsZWQseS5yZWplY3RlZCkpfSk7dmFyIHM9W107dGhpcy5pbnRlcmNlcHRvcnMucmVzcG9uc2UuZm9yRWFjaChmdW5jdGlvbih5KXtzLnB1c2goeS5mdWxmaWxsZWQseS5yZWplY3RlZCl9KTt2YXIgYTtpZighbyl7dmFyIHU9W3NuLHZvaWQgMF07Zm9yKEFycmF5LnByb3RvdHlwZS51bnNoaWZ0LmFwcGx5KHUsaSksdT11LmNvbmNhdChzKSxhPVByb21pc2UucmVzb2x2ZSh0KTt1Lmxlbmd0aDspYT1hLnRoZW4odS5zaGlmdCgpLHUuc2hpZnQoKSk7cmV0dXJuIGF9Zm9yKHZhciBmPXQ7aS5sZW5ndGg7KXt2YXIgYz1pLnNoaWZ0KCksZD1pLnNoaWZ0KCk7dHJ5e2Y9YyhmKX1jYXRjaChwKXtkKHApO2JyZWFrfX10cnl7YT1zbihmKX1jYXRjaChwKXtyZXR1cm4gUHJvbWlzZS5yZWplY3QocCl9Zm9yKDtzLmxlbmd0aDspYT1hLnRoZW4ocy5zaGlmdCgpLHMuc2hpZnQoKSk7cmV0dXJuIGF9LEllLnByb3RvdHlwZS5nZXRVcmk9ZnVuY3Rpb24oZSl7aWYoIWUudXJsKXRocm93IG5ldyBFcnJvcigiUHJvdmlkZWQgY29uZmlnIHVybCBpcyBub3QgdmFsaWQiKTtyZXR1cm4gZT1KZSh0aGlzLmRlZmF1bHRzLGUpLFFvKGUudXJsLGUucGFyYW1zLGUucGFyYW1zU2VyaWFsaXplcikucmVwbGFjZSgvXlw/LywiIil9LG5uLmZvckVhY2goWyJkZWxldGUiLCJnZXQiLCJoZWFkIiwib3B0aW9ucyJdLGZ1bmN0aW9uKGUpe0llLnByb3RvdHlwZVtlXT1mdW5jdGlvbih0LG4pe3JldHVybiB0aGlzLnJlcXVlc3QoSmUobnx8e30se21ldGhvZDplLHVybDp0LGRhdGE6KG58fHt9KS5kYXRhfSkpfX0pLG5uLmZvckVhY2goWyJwb3N0IiwicHV0IiwicGF0Y2giXSxmdW5jdGlvbihlKXtJZS5wcm90b3R5cGVbZV09ZnVuY3Rpb24odCxuLGkpe3JldHVybiB0aGlzLnJlcXVlc3QoSmUoaXx8e30se21ldGhvZDplLHVybDp0LGRhdGE6bn0pKX19KTt2YXIgWm89SWUsZXM9cWU7ZnVuY3Rpb24gZ2Uocil7aWYodHlwZW9mIHIhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcigiZXhlY3V0b3IgbXVzdCBiZSBhIGZ1bmN0aW9uLiIpO3ZhciBlO3RoaXMucHJvbWlzZT1uZXcgUHJvbWlzZShmdW5jdGlvbihpKXtlPWl9KTt2YXIgdD10aGlzO3RoaXMucHJvbWlzZS50aGVuKGZ1bmN0aW9uKG4pe2lmKCEhdC5fbGlzdGVuZXJzKXt2YXIgaSxvPXQuX2xpc3RlbmVycy5sZW5ndGg7Zm9yKGk9MDtpPG87aSsrKXQuX2xpc3RlbmVyc1tpXShuKTt0Ll9saXN0ZW5lcnM9bnVsbH19KSx0aGlzLnByb21pc2UudGhlbj1mdW5jdGlvbihuKXt2YXIgaSxvPW5ldyBQcm9taXNlKGZ1bmN0aW9uKHMpe3Quc3Vic2NyaWJlKHMpLGk9c30pLnRoZW4obik7cmV0dXJuIG8uY2FuY2VsPWZ1bmN0aW9uKCl7dC51bnN1YnNjcmliZShpKX0sb30scihmdW5jdGlvbihpKXt0LnJlYXNvbnx8KHQucmVhc29uPW5ldyBlcyhpKSxlKHQucmVhc29uKSl9KX1nZS5wcm90b3R5cGUudGhyb3dJZlJlcXVlc3RlZD1mdW5jdGlvbigpe2lmKHRoaXMucmVhc29uKXRocm93IHRoaXMucmVhc29ufSxnZS5wcm90b3R5cGUuc3Vic2NyaWJlPWZ1bmN0aW9uKGUpe2lmKHRoaXMucmVhc29uKXtlKHRoaXMucmVhc29uKTtyZXR1cm59dGhpcy5fbGlzdGVuZXJzP3RoaXMuX2xpc3RlbmVycy5wdXNoKGUpOnRoaXMuX2xpc3RlbmVycz1bZV19LGdlLnByb3RvdHlwZS51bnN1YnNjcmliZT1mdW5jdGlvbihlKXtpZighIXRoaXMuX2xpc3RlbmVycyl7dmFyIHQ9dGhpcy5fbGlzdGVuZXJzLmluZGV4T2YoZSk7dCE9PS0xJiZ0aGlzLl9saXN0ZW5lcnMuc3BsaWNlKHQsMSl9fSxnZS5zb3VyY2U9ZnVuY3Rpb24oKXt2YXIgZSx0PW5ldyBnZShmdW5jdGlvbihpKXtlPWl9KTtyZXR1cm57dG9rZW46dCxjYW5jZWw6ZX19O3ZhciB0cz1nZSxycz1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIGUuYXBwbHkobnVsbCxuKX19LG5zPSQsaXM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5zLmlzT2JqZWN0KGUpJiZlLmlzQXhpb3NFcnJvcj09PSEwfSx1bj0kLG9zPSRyLFFlPVpvLHNzPWVuLGFzPUtlO2Z1bmN0aW9uIGNuKHIpe3ZhciBlPW5ldyBRZShyKSx0PW9zKFFlLnByb3RvdHlwZS5yZXF1ZXN0LGUpO3JldHVybiB1bi5leHRlbmQodCxRZS5wcm90b3R5cGUsZSksdW4uZXh0ZW5kKHQsZSksdC5jcmVhdGU9ZnVuY3Rpb24oaSl7cmV0dXJuIGNuKHNzKHIsaSkpfSx0fXZhciBLPWNuKGFzKTtLLkF4aW9zPVFlLEsuQ2FuY2VsPXFlLEsuQ2FuY2VsVG9rZW49dHMsSy5pc0NhbmNlbD1RcixLLlZFUlNJT049dG4udmVyc2lvbixLLmFsbD1mdW5jdGlvbihlKXtyZXR1cm4gUHJvbWlzZS5hbGwoZSl9LEsuc3ByZWFkPXJzLEsuaXNBeGlvc0Vycm9yPWlzLE10LmV4cG9ydHM9SyxNdC5leHBvcnRzLmRlZmF1bHQ9Szt2YXIgdXM9TXQuZXhwb3J0cztjbGFzcyBFe2lzRW1wdHkoKXtyZXR1cm4hdGhpcy5pc1ByZXNlbnQoKX1zdGF0aWMgb2YoZSl7aWYoZSE9bnVsbClyZXR1cm4gbmV3IGZuKGUpO3Rocm93IG5ldyBUeXBlRXJyb3IoIlRoZSBwYXNzZWQgdmFsdWUgd2FzIG51bGwgb3IgdW5kZWZpbmVkLiIpfXN0YXRpYyBvZk5vbk51bGwoZSl7cmV0dXJuIEUub2YoZSl9c3RhdGljIG9mTnVsbGFibGUoZSl7cmV0dXJuIGUhPW51bGw/bmV3IGZuKGUpOm5ldyBsbn1zdGF0aWMgZW1wdHkoKXtyZXR1cm4gbmV3IGxufXN0YXRpYyBmcm9tKGUpe3N3aXRjaChlLmtpbmQpe2Nhc2UicHJlc2VudCI6cmV0dXJuIEUub2YoZS52YWx1ZSk7Y2FzZSJlbXB0eSI6cmV0dXJuIEUuZW1wdHkoKTtkZWZhdWx0OnRocm93IG5ldyBUeXBlRXJyb3IoIlRoZSBwYXNzZWQgdmFsdWUgd2FzIG5vdCBhbiBPcHRpb24gdHlwZS4iKX19fWNsYXNzIGZuIGV4dGVuZHMgRXtjb25zdHJ1Y3RvcihlKXtzdXBlcigpLHRoaXMucGF5bG9hZD1lfWlzUHJlc2VudCgpe3JldHVybiEwfWdldCgpe3JldHVybiB0aGlzLnBheWxvYWR9aWZQcmVzZW50KGUpe2UodGhpcy5wYXlsb2FkKX1pZlByZXNlbnRPckVsc2UoZSx0KXtlKHRoaXMucGF5bG9hZCl9ZmlsdGVyKGUpe3JldHVybiBlKHRoaXMucGF5bG9hZCk/dGhpczpFLmVtcHR5KCl9bWFwKGUpe2NvbnN0IHQ9ZSh0aGlzLnBheWxvYWQpO3JldHVybiBFLm9mTnVsbGFibGUodCl9ZmxhdE1hcChlKXtyZXR1cm4gZSh0aGlzLnBheWxvYWQpfW9yKGUpe3JldHVybiB0aGlzfW9yRWxzZShlKXtyZXR1cm4gdGhpcy5wYXlsb2FkfW9yRWxzZUdldChlKXtyZXR1cm4gdGhpcy5wYXlsb2FkfW9yRWxzZVRocm93KGUpe3JldHVybiB0aGlzLnBheWxvYWR9b3JOdWxsKCl7cmV0dXJuIHRoaXMucGF5bG9hZH1vclVuZGVmaW5lZCgpe3JldHVybiB0aGlzLnBheWxvYWR9dG9PcHRpb24oKXtyZXR1cm57a2luZDoicHJlc2VudCIsdmFsdWU6dGhpcy5wYXlsb2FkfX1tYXRjaGVzKGUpe3JldHVybiBlLnByZXNlbnQodGhpcy5wYXlsb2FkKX10b0pTT04oZSl7cmV0dXJuIHRoaXMucGF5bG9hZH19Y2xhc3MgbG4gZXh0ZW5kcyBFe2lzUHJlc2VudCgpe3JldHVybiExfWNvbnN0cnVjdG9yKCl7c3VwZXIoKX1nZXQoKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJUaGUgb3B0aW9uYWwgaXMgbm90IHByZXNlbnQuIil9aWZQcmVzZW50KGUpe31pZlByZXNlbnRPckVsc2UoZSx0KXt0KCl9ZmlsdGVyKGUpe3JldHVybiB0aGlzfW1hcChlKXtyZXR1cm4gRS5lbXB0eSgpfWZsYXRNYXAoZSl7cmV0dXJuIEUuZW1wdHkoKX1vcihlKXtyZXR1cm4gZSgpfW9yRWxzZShlKXtyZXR1cm4gZX1vckVsc2VHZXQoZSl7cmV0dXJuIHRoaXMub3JFbHNlKGUoKSl9b3JFbHNlVGhyb3coZSl7dGhyb3cgZSgpfW9yTnVsbCgpe3JldHVybiBudWxsfW9yVW5kZWZpbmVkKCl7fXRvT3B0aW9uKCl7cmV0dXJue2tpbmQ6ImVtcHR5In19bWF0Y2hlcyhlKXtyZXR1cm4gZS5lbXB0eSgpfXRvSlNPTihlKXtyZXR1cm4gbnVsbH19Y29uc3QgY3M9IjIuMC4wIjtmdW5jdGlvbiBmcyhyKXtnbG9iYWxUaGlzLl92b25hZ2VNZWRpYVByb2Nlc3Nvck1ldGFkYXRhPXJ9ZnVuY3Rpb24gbHMoKXtyZXR1cm4gZ2xvYmFsVGhpcy5fdm9uYWdlTWVkaWFQcm9jZXNzb3JNZXRhZGF0YX1jbGFzcyBHe2NvbnN0cnVjdG9yKCl7Y29uc3QgZT1scygpO3RoaXMuX3JlcG9ydD17YWN0aW9uOkUuZW1wdHkoKSxhcHBsaWNhdGlvbklkOkUub2ZOdWxsYWJsZShlIT09dm9pZCAwJiZlIT1udWxsP2UuYXBwSWQ6bnVsbCksdGltZXN0YW1wOkRhdGUubm93KCksZnBzOkUuZW1wdHkoKSxmcmFtZXNUcmFuc2Zvcm1lZDpFLmVtcHR5KCksZ3VpZDpFLmVtcHR5KCksaGlnaGVzdEZyYW1lVHJhbnNmb3JtQ3B1OkUuZW1wdHkoKSxtZXNzYWdlOkUuZW1wdHkoKSxzb3VyY2U6RS5vZk51bGxhYmxlKGUhPT12b2lkIDAmJmUhPW51bGw/ZS5zb3VyY2VUeXBlOm51bGwpLHRyYW5zZm9ybWVkRnBzOkUuZW1wdHkoKSx0cmFuc2Zvcm1lclR5cGU6RS5lbXB0eSgpLHZhcmlhdGlvbjpFLmVtcHR5KCksdmlkZW9IZWlnaHQ6RS5lbXB0eSgpLHZpZGVvV2lkdGg6RS5lbXB0eSgpLHZlcnNpb246Y3MsZXJyb3I6RS5lbXB0eSgpLHByb3h5VXJsOkUub2ZOdWxsYWJsZShlIT09dm9pZCAwJiZlIT1udWxsP2UucHJveHlVcmw6bnVsbCl9fWFjdGlvbihlKXtyZXR1cm4gdGhpcy5fcmVwb3J0LmFjdGlvbj1FLm9mTnVsbGFibGUoZSksdGhpc31mcmFtZXNUcmFuc2Zvcm1lZChlKXtyZXR1cm4gdGhpcy5fcmVwb3J0LmZyYW1lc1RyYW5zZm9ybWVkPUUub2ZOdWxsYWJsZShlKSx0aGlzfWZwcyhlKXtyZXR1cm4gdGhpcy5fcmVwb3J0LmZwcz1FLm9mTnVsbGFibGUoZSksdGhpc31ndWlkKGUpe3JldHVybiB0aGlzLl9yZXBvcnQuZ3VpZD1FLm9mTnVsbGFibGUoZSksdGhpc31tZXNzYWdlKGUpe3JldHVybiB0aGlzLl9yZXBvcnQubWVzc2FnZT1FLm9mTnVsbGFibGUoZSksdGhpc310cmFuc2Zvcm1lZEZwcyhlKXtyZXR1cm4gdGhpcy5fcmVwb3J0LnRyYW5zZm9ybWVkRnBzPUUub2ZOdWxsYWJsZShlKSx0aGlzfXRyYW5zZm9ybWVyVHlwZShlKXtyZXR1cm4gdGhpcy5fcmVwb3J0LnRyYW5zZm9ybWVyVHlwZT1FLm9mTnVsbGFibGUoZSksdGhpc312YXJpYXRpb24oZSl7cmV0dXJuIHRoaXMuX3JlcG9ydC52YXJpYXRpb249RS5vZk51bGxhYmxlKGUpLHRoaXN9dmlkZW9IZWlnaHQoZSl7cmV0dXJuIHRoaXMuX3JlcG9ydC52aWRlb0hlaWdodD1FLm9mTnVsbGFibGUoZSksdGhpc312aWRlb1dpZHRoKGUpe3JldHVybiB0aGlzLl9yZXBvcnQudmlkZW9XaWR0aD1FLm9mTnVsbGFibGUoZSksdGhpc31lcnJvcihlKXtyZXR1cm4gdGhpcy5fcmVwb3J0LmVycm9yPUUub2ZOdWxsYWJsZShlKSx0aGlzfWJ1aWxkKCl7cmV0dXJuIHRoaXMuX3JlcG9ydH19Y29uc3QgZHM9cj0+SlNPTi5zdHJpbmdpZnkociwoZSx0KT0+e2lmKHQhPT1udWxsKXJldHVybiB0fSk7Y2xhc3MgSHtzdGF0aWMgcmVwb3J0KGUpe3JldHVybiBuZXcgUHJvbWlzZSgodCxuKT0+e2lmKGUuYXBwbGljYXRpb25JZC5pc0VtcHR5KCl8fGUuc291cmNlLmlzRW1wdHkoKSl7dCgic3VjY2VzcyIpO3JldHVybn1sZXQgaT11cy5jcmVhdGUoKSxvPXt0aW1lb3V0OjFlNCx0aW1lb3V0RXJyb3JNZXNzYWdlOiJSZXF1ZXN0IHRpbWVvdXQiLGhlYWRlcnM6eyJDb250ZW50LVR5cGUiOiJhcHBsaWNhdGlvbi9qc29uIn19LHM9ImhsZy50b2tib3guY29tL3Byb2QvbG9nZ2luZy92Y3Bfd2VicnRjIjtpZihlLnByb3h5VXJsLmlzRW1wdHkoKSlzPSJodHRwczovLyIrcztlbHNle2xldCBhO2UucHJveHlVcmwuZ2V0KCkuc2xpY2UoZS5wcm94eVVybC5nZXQoKS5sZW5ndGgtMSkhPT0iLyI/YT1lLnByb3h5VXJsLmdldCgpKyIvIjphPWUucHJveHlVcmwuZ2V0KCkscz1hK3N9aS5wb3N0KHMsZHMoZSksbykudGhlbihhPT57Y29uc29sZS5sb2coYSksdCgic3VjY2VzcyIpfSkuY2F0Y2goYT0+e2NvbnNvbGUubG9nKGEpLG4oYSl9KX0pfX12YXIgWmUsbXM9bmV3IFVpbnQ4QXJyYXkoMTYpO2Z1bmN0aW9uIGhzKCl7aWYoIVplJiYoWmU9dHlwZW9mIGNyeXB0byE9InVuZGVmaW5lZCImJmNyeXB0by5nZXRSYW5kb21WYWx1ZXMmJmNyeXB0by5nZXRSYW5kb21WYWx1ZXMuYmluZChjcnlwdG8pfHx0eXBlb2YgbXNDcnlwdG8hPSJ1bmRlZmluZWQiJiZ0eXBlb2YgbXNDcnlwdG8uZ2V0UmFuZG9tVmFsdWVzPT0iZnVuY3Rpb24iJiZtc0NyeXB0by5nZXRSYW5kb21WYWx1ZXMuYmluZChtc0NyeXB0byksIVplKSl0aHJvdyBuZXcgRXJyb3IoImNyeXB0by5nZXRSYW5kb21WYWx1ZXMoKSBub3Qgc3VwcG9ydGVkLiBTZWUgaHR0cHM6Ly9naXRodWIuY29tL3V1aWRqcy91dWlkI2dldHJhbmRvbXZhbHVlcy1ub3Qtc3VwcG9ydGVkIik7cmV0dXJuIFplKG1zKX12YXIgcHM9L14oPzpbMC05YS1mXXs4fS1bMC05YS1mXXs0fS1bMS01XVswLTlhLWZdezN9LVs4OWFiXVswLTlhLWZdezN9LVswLTlhLWZdezEyfXwwMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDApJC9pO2Z1bmN0aW9uIHlzKHIpe3JldHVybiB0eXBlb2Ygcj09InN0cmluZyImJnBzLnRlc3Qocil9Zm9yKHZhciBPPVtdLFd0PTA7V3Q8MjU2OysrV3QpTy5wdXNoKChXdCsyNTYpLnRvU3RyaW5nKDE2KS5zdWJzdHIoMSkpO2Z1bmN0aW9uIF9zKHIpe3ZhciBlPWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTowLHQ9KE9bcltlKzBdXStPW3JbZSsxXV0rT1tyW2UrMl1dK09bcltlKzNdXSsiLSIrT1tyW2UrNF1dK09bcltlKzVdXSsiLSIrT1tyW2UrNl1dK09bcltlKzddXSsiLSIrT1tyW2UrOF1dK09bcltlKzldXSsiLSIrT1tyW2UrMTBdXStPW3JbZSsxMV1dK09bcltlKzEyXV0rT1tyW2UrMTNdXStPW3JbZSsxNF1dK09bcltlKzE1XV0pLnRvTG93ZXJDYXNlKCk7aWYoIXlzKHQpKXRocm93IFR5cGVFcnJvcigiU3RyaW5naWZpZWQgVVVJRCBpcyBpbnZhbGlkIik7cmV0dXJuIHR9ZnVuY3Rpb24gZG4ocixlLHQpe3I9cnx8e307dmFyIG49ci5yYW5kb218fChyLnJuZ3x8aHMpKCk7aWYobls2XT1uWzZdJjE1fDY0LG5bOF09bls4XSY2M3wxMjgsZSl7dD10fHwwO2Zvcih2YXIgaT0wO2k8MTY7KytpKWVbdCtpXT1uW2ldO3JldHVybiBlfXJldHVybiBfcyhuKX1jb25zdCByZT1uZXcgV2Vha01hcCxldD1uZXcgV2Vha01hcCxGZT1uZXcgV2Vha01hcCxqdD1TeW1ib2woImFueVByb2R1Y2VyIiksbW49UHJvbWlzZS5yZXNvbHZlKCksdHQ9U3ltYm9sKCJsaXN0ZW5lckFkZGVkIikscnQ9U3ltYm9sKCJsaXN0ZW5lclJlbW92ZWQiKTtsZXQgcXQ9ITE7ZnVuY3Rpb24gdmUocil7aWYodHlwZW9mIHIhPSJzdHJpbmciJiZ0eXBlb2YgciE9InN5bWJvbCIpdGhyb3cgbmV3IFR5cGVFcnJvcigiZXZlbnROYW1lIG11c3QgYmUgYSBzdHJpbmcgb3IgYSBzeW1ib2wiKX1mdW5jdGlvbiBudChyKXtpZih0eXBlb2YgciE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgVHlwZUVycm9yKCJsaXN0ZW5lciBtdXN0IGJlIGEgZnVuY3Rpb24iKX1mdW5jdGlvbiBFZShyLGUpe2NvbnN0IHQ9ZXQuZ2V0KHIpO3JldHVybiB0LmhhcyhlKXx8dC5zZXQoZSxuZXcgU2V0KSx0LmdldChlKX1mdW5jdGlvbiBQZShyLGUpe2NvbnN0IHQ9dHlwZW9mIGU9PSJzdHJpbmcifHx0eXBlb2YgZT09InN5bWJvbCI/ZTpqdCxuPUZlLmdldChyKTtyZXR1cm4gbi5oYXModCl8fG4uc2V0KHQsbmV3IFNldCksbi5nZXQodCl9ZnVuY3Rpb24geHMocixlLHQpe2NvbnN0IG49RmUuZ2V0KHIpO2lmKG4uaGFzKGUpKWZvcihjb25zdCBpIG9mIG4uZ2V0KGUpKWkuZW5xdWV1ZSh0KTtpZihuLmhhcyhqdCkpe2NvbnN0IGk9UHJvbWlzZS5hbGwoW2UsdF0pO2Zvcihjb25zdCBvIG9mIG4uZ2V0KGp0KSlvLmVucXVldWUoaSl9fWZ1bmN0aW9uIGhuKHIsZSl7ZT1BcnJheS5pc0FycmF5KGUpP2U6W2VdO2xldCB0PSExLG49KCk9Pnt9LGk9W107Y29uc3Qgbz17ZW5xdWV1ZShzKXtpLnB1c2gocyksbigpfSxmaW5pc2goKXt0PSEwLG4oKX19O2Zvcihjb25zdCBzIG9mIGUpUGUocixzKS5hZGQobyk7cmV0dXJue2FzeW5jIG5leHQoKXtyZXR1cm4gaT9pLmxlbmd0aD09PTA/dD8oaT12b2lkIDAsdGhpcy5uZXh0KCkpOihhd2FpdCBuZXcgUHJvbWlzZShzPT57bj1zfSksdGhpcy5uZXh0KCkpOntkb25lOiExLHZhbHVlOmF3YWl0IGkuc2hpZnQoKX06e2RvbmU6ITB9fSxhc3luYyByZXR1cm4ocyl7aT12b2lkIDA7Zm9yKGNvbnN0IGEgb2YgZSlQZShyLGEpLmRlbGV0ZShvKTtyZXR1cm4gbigpLGFyZ3VtZW50cy5sZW5ndGg+MD97ZG9uZTohMCx2YWx1ZTphd2FpdCBzfTp7ZG9uZTohMH19LFtTeW1ib2wuYXN5bmNJdGVyYXRvcl0oKXtyZXR1cm4gdGhpc319fWZ1bmN0aW9uIHBuKHIpe2lmKHI9PT12b2lkIDApcmV0dXJuIHluO2lmKCFBcnJheS5pc0FycmF5KHIpKXRocm93IG5ldyBUeXBlRXJyb3IoImBtZXRob2ROYW1lc2AgbXVzdCBiZSBhbiBhcnJheSBvZiBzdHJpbmdzIik7Zm9yKGNvbnN0IGUgb2YgcilpZigheW4uaW5jbHVkZXMoZSkpdGhyb3cgdHlwZW9mIGUhPSJzdHJpbmciP25ldyBUeXBlRXJyb3IoImBtZXRob2ROYW1lc2AgZWxlbWVudCBtdXN0IGJlIGEgc3RyaW5nIik6bmV3IEVycm9yKGAke2V9IGlzIG5vdCBFbWl0dGVyeSBtZXRob2RgKTtyZXR1cm4gcn1jb25zdCBYdD1yPT5yPT09dHR8fHI9PT1ydDtjbGFzcyBmZXtzdGF0aWMgbWl4aW4oZSx0KXtyZXR1cm4gdD1wbih0KSxuPT57aWYodHlwZW9mIG4hPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcigiYHRhcmdldGAgbXVzdCBiZSBmdW5jdGlvbiIpO2Zvcihjb25zdCBzIG9mIHQpaWYobi5wcm90b3R5cGVbc10hPT12b2lkIDApdGhyb3cgbmV3IEVycm9yKGBUaGUgcHJvcGVydHkgXGAke3N9XGAgYWxyZWFkeSBleGlzdHMgb24gXGB0YXJnZXRcYGApO2Z1bmN0aW9uIGkoKXtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsZSx7ZW51bWVyYWJsZTohMSx2YWx1ZTpuZXcgZmV9KSx0aGlzW2VdfU9iamVjdC5kZWZpbmVQcm9wZXJ0eShuLnByb3RvdHlwZSxlLHtlbnVtZXJhYmxlOiExLGdldDppfSk7Y29uc3Qgbz1zPT5mdW5jdGlvbiguLi5hKXtyZXR1cm4gdGhpc1tlXVtzXSguLi5hKX07Zm9yKGNvbnN0IHMgb2YgdClPYmplY3QuZGVmaW5lUHJvcGVydHkobi5wcm90b3R5cGUscyx7ZW51bWVyYWJsZTohMSx2YWx1ZTpvKHMpfSk7cmV0dXJuIG59fXN0YXRpYyBnZXQgaXNEZWJ1Z0VuYWJsZWQoKXtpZih0eXBlb2YgcHJvY2VzcyE9Im9iamVjdCIpcmV0dXJuIHF0O2NvbnN0e2VudjplfT1wcm9jZXNzfHx7ZW52Ont9fTtyZXR1cm4gZS5ERUJVRz09PSJlbWl0dGVyeSJ8fGUuREVCVUc9PT0iKiJ8fHF0fXN0YXRpYyBzZXQgaXNEZWJ1Z0VuYWJsZWQoZSl7cXQ9ZX1jb25zdHJ1Y3RvcihlPXt9KXtyZS5zZXQodGhpcyxuZXcgU2V0KSxldC5zZXQodGhpcyxuZXcgTWFwKSxGZS5zZXQodGhpcyxuZXcgTWFwKSx0aGlzLmRlYnVnPWUuZGVidWd8fHt9LHRoaXMuZGVidWcuZW5hYmxlZD09PXZvaWQgMCYmKHRoaXMuZGVidWcuZW5hYmxlZD0hMSksdGhpcy5kZWJ1Zy5sb2dnZXJ8fCh0aGlzLmRlYnVnLmxvZ2dlcj0odCxuLGksbyk9PntvPUpTT04uc3RyaW5naWZ5KG8pLHR5cGVvZiBpPT0ic3ltYm9sIiYmKGk9aS50b1N0cmluZygpKTtjb25zdCBzPW5ldyBEYXRlLGE9YCR7cy5nZXRIb3VycygpfToke3MuZ2V0TWludXRlcygpfToke3MuZ2V0U2Vjb25kcygpfS4ke3MuZ2V0TWlsbGlzZWNvbmRzKCl9YDtjb25zb2xlLmxvZyhgWyR7YX1dW2VtaXR0ZXJ5OiR7dH1dWyR7bn1dIEV2ZW50IE5hbWU6ICR7aX0KCWRhdGE6ICR7b31gKX0pfWxvZ0lmRGVidWdFbmFibGVkKGUsdCxuKXsoZmUuaXNEZWJ1Z0VuYWJsZWR8fHRoaXMuZGVidWcuZW5hYmxlZCkmJnRoaXMuZGVidWcubG9nZ2VyKGUsdGhpcy5kZWJ1Zy5uYW1lLHQsbil9b24oZSx0KXtudCh0KSxlPUFycmF5LmlzQXJyYXkoZSk/ZTpbZV07Zm9yKGNvbnN0IG4gb2YgZSl2ZShuKSxFZSh0aGlzLG4pLmFkZCh0KSx0aGlzLmxvZ0lmRGVidWdFbmFibGVkKCJzdWJzY3JpYmUiLG4sdm9pZCAwKSxYdChuKXx8dGhpcy5lbWl0KHR0LHtldmVudE5hbWU6bixsaXN0ZW5lcjp0fSk7cmV0dXJuIHRoaXMub2ZmLmJpbmQodGhpcyxlLHQpfW9mZihlLHQpe250KHQpLGU9QXJyYXkuaXNBcnJheShlKT9lOltlXTtmb3IoY29uc3QgbiBvZiBlKXZlKG4pLEVlKHRoaXMsbikuZGVsZXRlKHQpLHRoaXMubG9nSWZEZWJ1Z0VuYWJsZWQoInVuc3Vic2NyaWJlIixuLHZvaWQgMCksWHQobil8fHRoaXMuZW1pdChydCx7ZXZlbnROYW1lOm4sbGlzdGVuZXI6dH0pfW9uY2UoZSl7cmV0dXJuIG5ldyBQcm9taXNlKHQ9Pntjb25zdCBuPXRoaXMub24oZSxpPT57bigpLHQoaSl9KX0pfWV2ZW50cyhlKXtlPUFycmF5LmlzQXJyYXkoZSk/ZTpbZV07Zm9yKGNvbnN0IHQgb2YgZSl2ZSh0KTtyZXR1cm4gaG4odGhpcyxlKX1hc3luYyBlbWl0KGUsdCl7dmUoZSksdGhpcy5sb2dJZkRlYnVnRW5hYmxlZCgiZW1pdCIsZSx0KSx4cyh0aGlzLGUsdCk7Y29uc3Qgbj1FZSh0aGlzLGUpLGk9cmUuZ2V0KHRoaXMpLG89Wy4uLm5dLHM9WHQoZSk/W106Wy4uLmldO2F3YWl0IG1uLGF3YWl0IFByb21pc2UuYWxsKFsuLi5vLm1hcChhc3luYyBhPT57aWYobi5oYXMoYSkpcmV0dXJuIGEodCl9KSwuLi5zLm1hcChhc3luYyBhPT57aWYoaS5oYXMoYSkpcmV0dXJuIGEoZSx0KX0pXSl9YXN5bmMgZW1pdFNlcmlhbChlLHQpe3ZlKGUpLHRoaXMubG9nSWZEZWJ1Z0VuYWJsZWQoImVtaXRTZXJpYWwiLGUsdCk7Y29uc3Qgbj1FZSh0aGlzLGUpLGk9cmUuZ2V0KHRoaXMpLG89Wy4uLm5dLHM9Wy4uLmldO2F3YWl0IG1uO2Zvcihjb25zdCBhIG9mIG8pbi5oYXMoYSkmJmF3YWl0IGEodCk7Zm9yKGNvbnN0IGEgb2YgcylpLmhhcyhhKSYmYXdhaXQgYShlLHQpfW9uQW55KGUpe3JldHVybiBudChlKSx0aGlzLmxvZ0lmRGVidWdFbmFibGVkKCJzdWJzY3JpYmVBbnkiLHZvaWQgMCx2b2lkIDApLHJlLmdldCh0aGlzKS5hZGQoZSksdGhpcy5lbWl0KHR0LHtsaXN0ZW5lcjplfSksdGhpcy5vZmZBbnkuYmluZCh0aGlzLGUpfWFueUV2ZW50KCl7cmV0dXJuIGhuKHRoaXMpfW9mZkFueShlKXtudChlKSx0aGlzLmxvZ0lmRGVidWdFbmFibGVkKCJ1bnN1YnNjcmliZUFueSIsdm9pZCAwLHZvaWQgMCksdGhpcy5lbWl0KHJ0LHtsaXN0ZW5lcjplfSkscmUuZ2V0KHRoaXMpLmRlbGV0ZShlKX1jbGVhckxpc3RlbmVycyhlKXtlPUFycmF5LmlzQXJyYXkoZSk/ZTpbZV07Zm9yKGNvbnN0IHQgb2YgZSlpZih0aGlzLmxvZ0lmRGVidWdFbmFibGVkKCJjbGVhciIsdCx2b2lkIDApLHR5cGVvZiB0PT0ic3RyaW5nInx8dHlwZW9mIHQ9PSJzeW1ib2wiKXtFZSh0aGlzLHQpLmNsZWFyKCk7Y29uc3Qgbj1QZSh0aGlzLHQpO2Zvcihjb25zdCBpIG9mIG4paS5maW5pc2goKTtuLmNsZWFyKCl9ZWxzZXtyZS5nZXQodGhpcykuY2xlYXIoKTtmb3IoY29uc3QgbiBvZiBldC5nZXQodGhpcykudmFsdWVzKCkpbi5jbGVhcigpO2Zvcihjb25zdCBuIG9mIEZlLmdldCh0aGlzKS52YWx1ZXMoKSl7Zm9yKGNvbnN0IGkgb2YgbilpLmZpbmlzaCgpO24uY2xlYXIoKX19fWxpc3RlbmVyQ291bnQoZSl7ZT1BcnJheS5pc0FycmF5KGUpP2U6W2VdO2xldCB0PTA7Zm9yKGNvbnN0IG4gb2YgZSl7aWYodHlwZW9mIG49PSJzdHJpbmciKXt0Kz1yZS5nZXQodGhpcykuc2l6ZStFZSh0aGlzLG4pLnNpemUrUGUodGhpcyxuKS5zaXplK1BlKHRoaXMpLnNpemU7Y29udGludWV9dHlwZW9mIG4hPSJ1bmRlZmluZWQiJiZ2ZShuKSx0Kz1yZS5nZXQodGhpcykuc2l6ZTtmb3IoY29uc3QgaSBvZiBldC5nZXQodGhpcykudmFsdWVzKCkpdCs9aS5zaXplO2Zvcihjb25zdCBpIG9mIEZlLmdldCh0aGlzKS52YWx1ZXMoKSl0Kz1pLnNpemV9cmV0dXJuIHR9YmluZE1ldGhvZHMoZSx0KXtpZih0eXBlb2YgZSE9Im9iamVjdCJ8fGU9PT1udWxsKXRocm93IG5ldyBUeXBlRXJyb3IoImB0YXJnZXRgIG11c3QgYmUgYW4gb2JqZWN0Iik7dD1wbih0KTtmb3IoY29uc3QgbiBvZiB0KXtpZihlW25dIT09dm9pZCAwKXRocm93IG5ldyBFcnJvcihgVGhlIHByb3BlcnR5IFxgJHtufVxgIGFscmVhZHkgZXhpc3RzIG9uIFxgdGFyZ2V0XGBgKTtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxuLHtlbnVtZXJhYmxlOiExLHZhbHVlOnRoaXNbbl0uYmluZCh0aGlzKX0pfX19Y29uc3QgeW49T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoZmUucHJvdG90eXBlKS5maWx0ZXIocj0+ciE9PSJjb25zdHJ1Y3RvciIpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShmZSwibGlzdGVuZXJBZGRlZCIse3ZhbHVlOnR0LHdyaXRhYmxlOiExLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiExfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGZlLCJsaXN0ZW5lclJlbW92ZWQiLHt2YWx1ZTpydCx3cml0YWJsZTohMSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMX0pO3ZhciBZdD1mZTtmdW5jdGlvbiBicyhyKXtyZXR1cm4gdHlwZW9mIHI9PSJvYmplY3QiJiZyIT09bnVsbCYmIm1lc3NhZ2UiaW4gciYmdHlwZW9mIHIubWVzc2FnZT09InN0cmluZyJ9ZnVuY3Rpb24gZ3Mocil7aWYoYnMocikpcmV0dXJuIHI7dHJ5e3JldHVybiBuZXcgRXJyb3IoSlNPTi5zdHJpbmdpZnkocikpfWNhdGNoe3JldHVybiBuZXcgRXJyb3IoU3RyaW5nKHIpKX19ZnVuY3Rpb24gS3Qocil7cmV0dXJuIGdzKHIpLm1lc3NhZ2V9dmFyIEp0PShyPT4oci5waXBlbGluZV9lbmRlZD0icGlwZWxpbmVfZW5kZWQiLHIucGlwZWxpbmVfZW5kZWRfd2l0aF9lcnJvcj0icGlwZWxpbmVfZW5kZWRfd2l0aF9lcnJvciIsci5waXBlbGluZV9zdGFydGVkPSJwaXBlbGluZV9zdGFydGVkIixyLnBpcGVsaW5lX3N0YXJ0ZWRfd2l0aF9lcnJvcj0icGlwZWxpbmVfc3RhcnRlZF93aXRoX2Vycm9yIixyLnBpcGVsaW5lX3Jlc3RhcnRlZD0icGlwZWxpbmVfcmVzdGFydGVkIixyLnBpcGVsaW5lX3Jlc3RhcnRlZF93aXRoX2Vycm9yPSJwaXBlbGluZV9yZXN0YXJ0ZWRfd2l0aF9lcnJvciIscikpKEp0fHx7fSk7Y29uc3QgdnM9NTAwLEVzPS44O2NsYXNzIFRzIGV4dGVuZHMgWXR7Y29uc3RydWN0b3IoZSx0KXtzdXBlcigpLHRoaXMuaW5kZXhfPXQsdGhpcy51dWlkXz1kbigpLHRoaXMuZnJhbWVzVHJhbnNmb3JtZWRfPTAsdGhpcy50cmFuc2Zvcm1lcl89ZSx0aGlzLnNob3VsZFN0b3BfPSExLHRoaXMuaXNGbGFzaGVkXz0hMSx0aGlzLmZyYW1lc0Zyb21Tb3VyY2VfPTAsdGhpcy5mcHNfPTAsdGhpcy5tZWRpYVRyYW5zZm9ybWVyUW9zUmVwb3J0U3RhcnRUaW1lc3RhbXBfPTAsdGhpcy52aWRlb0hlaWdodF89MCx0aGlzLnZpZGVvV2lkdGhfPTAsdGhpcy50cmFja0V4cGVjdGVkUmF0ZV89LTEsdGhpcy50cmFuc2Zvcm1lclR5cGVfPSJDdXN0b20iLCJnZXRUcmFuc2Zvcm1lclR5cGUiaW4gZSYmKHRoaXMudHJhbnNmb3JtZXJUeXBlXz1lLmdldFRyYW5zZm9ybWVyVHlwZSgpKTtjb25zdCBuPW5ldyBHKCkuYWN0aW9uKCJNZWRpYVRyYW5zZm9ybWVyIikuZ3VpZCh0aGlzLnV1aWRfKS50cmFuc2Zvcm1lclR5cGUodGhpcy50cmFuc2Zvcm1lclR5cGVfKS52YXJpYXRpb24oIkNyZWF0ZSIpLmJ1aWxkKCk7SC5yZXBvcnQobil9c2V0VHJhY2tFeHBlY3RlZFJhdGUoZSl7dGhpcy50cmFja0V4cGVjdGVkUmF0ZV89ZX1hc3luYyBzdGFydChlKXtpZih0aGlzLmNvbnRyb2xsZXJfPWUsdGhpcy50cmFuc2Zvcm1lcl8mJnR5cGVvZiB0aGlzLnRyYW5zZm9ybWVyXy5zdGFydD09ImZ1bmN0aW9uIil0cnl7YXdhaXQgdGhpcy50cmFuc2Zvcm1lcl8uc3RhcnQoZSl9Y2F0Y2godCl7Y29uc3Qgbj1uZXcgRygpLmFjdGlvbigiTWVkaWFUcmFuc2Zvcm1lciIpLmd1aWQodGhpcy51dWlkXykubWVzc2FnZShaLmVycm9ycy50cmFuc2Zvcm1lcl9zdGFydCkudHJhbnNmb3JtZXJUeXBlKHRoaXMudHJhbnNmb3JtZXJUeXBlXykudmFyaWF0aW9uKCJFcnJvciIpLmVycm9yKEt0KHQpKS5idWlsZCgpO0gucmVwb3J0KG4pO2NvbnN0IGk9e2V2ZW50TWV0YURhdGE6e3RyYW5zZm9ybWVySW5kZXg6dGhpcy5pbmRleF99LGVycm9yOnQsZnVuY3Rpb246InN0YXJ0In07dGhpcy5lbWl0KCJlcnJvciIsaSl9fWFzeW5jIHRyYW5zZm9ybShlLHQpe3ZhciBuLGksbyxzO2lmKHRoaXMubWVkaWFUcmFuc2Zvcm1lclFvc1JlcG9ydFN0YXJ0VGltZXN0YW1wXz09PTAmJih0aGlzLm1lZGlhVHJhbnNmb3JtZXJRb3NSZXBvcnRTdGFydFRpbWVzdGFtcF89RGF0ZS5ub3coKSksZSBpbnN0YW5jZW9mIFZpZGVvRnJhbWUmJih0aGlzLnZpZGVvSGVpZ2h0Xz0obj1lPT1udWxsP3ZvaWQgMDplLmRpc3BsYXlIZWlnaHQpIT1udWxsP246MCx0aGlzLnZpZGVvV2lkdGhfPShpPWU9PW51bGw/dm9pZCAwOmUuZGlzcGxheVdpZHRoKSE9bnVsbD9pOjApLCsrdGhpcy5mcmFtZXNGcm9tU291cmNlXyx0aGlzLnRyYW5zZm9ybWVyXylpZih0aGlzLnNob3VsZFN0b3BfKWNvbnNvbGUud2FybigiW1BpcGVsaW5lXSBmbHVzaCBmcm9tIHRyYW5zZm9ybSIpLGUuY2xvc2UoKSx0aGlzLmZsdXNoKHQpLHQudGVybWluYXRlKCk7ZWxzZSB0cnl7YXdhaXQoKHM9KG89dGhpcy50cmFuc2Zvcm1lcl8pLnRyYW5zZm9ybSk9PW51bGw/dm9pZCAwOnMuY2FsbChvLGUsdCkpLCsrdGhpcy5mcmFtZXNUcmFuc2Zvcm1lZF8sdGhpcy5mcmFtZXNUcmFuc2Zvcm1lZF89PT12cyYmdGhpcy5tZWRpYVRyYW5zZm9ybWVyUW9zUmVwb3J0KCl9Y2F0Y2goYSl7Y29uc3QgdT1uZXcgRygpLmFjdGlvbigiTWVkaWFUcmFuc2Zvcm1lciIpLmd1aWQodGhpcy51dWlkXykubWVzc2FnZShaLmVycm9ycy50cmFuc2Zvcm1lcl90cmFuc2Zvcm0pLnRyYW5zZm9ybWVyVHlwZSh0aGlzLnRyYW5zZm9ybWVyVHlwZV8pLnZhcmlhdGlvbigiRXJyb3IiKS5lcnJvcihLdChhKSkuYnVpbGQoKTtILnJlcG9ydCh1KTtjb25zdCBmPXtldmVudE1ldGFEYXRhOnt0cmFuc2Zvcm1lckluZGV4OnRoaXMuaW5kZXhffSxlcnJvcjphLGZ1bmN0aW9uOiJ0cmFuc2Zvcm0ifTt0aGlzLmVtaXQoImVycm9yIixmKX19YXN5bmMgZmx1c2goZSl7aWYodGhpcy50cmFuc2Zvcm1lcl8mJnR5cGVvZiB0aGlzLnRyYW5zZm9ybWVyXy5mbHVzaD09ImZ1bmN0aW9uIiYmIXRoaXMuaXNGbGFzaGVkXyl7dGhpcy5pc0ZsYXNoZWRfPSEwO3RyeXthd2FpdCB0aGlzLnRyYW5zZm9ybWVyXy5mbHVzaChlKX1jYXRjaChuKXtjb25zdCBpPW5ldyBHKCkuYWN0aW9uKCJNZWRpYVRyYW5zZm9ybWVyIikuZ3VpZCh0aGlzLnV1aWRfKS5tZXNzYWdlKFouZXJyb3JzLnRyYW5zZm9ybWVyX2ZsdXNoKS50cmFuc2Zvcm1lclR5cGUodGhpcy50cmFuc2Zvcm1lclR5cGVfKS52YXJpYXRpb24oIkVycm9yIikuZXJyb3IoS3QobikpLmJ1aWxkKCk7SC5yZXBvcnQoaSk7Y29uc3Qgbz17ZXZlbnRNZXRhRGF0YTp7dHJhbnNmb3JtZXJJbmRleDp0aGlzLmluZGV4X30sZXJyb3I6bixmdW5jdGlvbjoiZmx1c2gifTt0aGlzLmVtaXQoImVycm9yIixvKX19dGhpcy5tZWRpYVRyYW5zZm9ybWVyUW9zUmVwb3J0KCk7Y29uc3QgdD1uZXcgRygpLmFjdGlvbigiTWVkaWFUcmFuc2Zvcm1lciIpLmd1aWQodGhpcy51dWlkXykudHJhbnNmb3JtZXJUeXBlKHRoaXMudHJhbnNmb3JtZXJUeXBlXykudmFyaWF0aW9uKCJEZWxldGUiKS5idWlsZCgpO0gucmVwb3J0KHQpfXN0b3AoKXtjb25zb2xlLmxvZygiW1BpcGVsaW5lXSBTdG9wIHN0cmVhbS4iKSx0aGlzLmNvbnRyb2xsZXJfJiYodGhpcy5mbHVzaCh0aGlzLmNvbnRyb2xsZXJfKSx0aGlzLmNvbnRyb2xsZXJfLnRlcm1pbmF0ZSgpKSx0aGlzLnNob3VsZFN0b3BfPSEwfW1lZGlhVHJhbnNmb3JtZXJRb3NSZXBvcnQoKXtsZXQgZT0oRGF0ZS5ub3coKS10aGlzLm1lZGlhVHJhbnNmb3JtZXJRb3NSZXBvcnRTdGFydFRpbWVzdGFtcF8pLzFlMyx0PXRoaXMuZnJhbWVzRnJvbVNvdXJjZV8vZSxuPXRoaXMuZnJhbWVzVHJhbnNmb3JtZWRfL2U7aWYodGhpcy50cmFja0V4cGVjdGVkUmF0ZV8hPS0xJiZ0aGlzLnRyYWNrRXhwZWN0ZWRSYXRlXypFcz50KXtjb25zdCBvPXtldmVudE1ldGFEYXRhOnt0cmFuc2Zvcm1lckluZGV4OnRoaXMuaW5kZXhffSx3YXJuaW5nVHlwZToiZnBzX2Ryb3AiLGRyb3BJbmZvOntyZXF1ZXN0ZWQ6dGhpcy50cmFja0V4cGVjdGVkUmF0ZV8sY3VycmVudDp0fX07dGhpcy5lbWl0KCJ3YXJuIixvKX1jb25zdCBpPW5ldyBHKCkuYWN0aW9uKCJNZWRpYVRyYW5zZm9ybWVyIikuZnBzKHQpLnRyYW5zZm9ybWVkRnBzKG4pLmZyYW1lc1RyYW5zZm9ybWVkKHRoaXMuZnJhbWVzVHJhbnNmb3JtZWRfKS5ndWlkKHRoaXMudXVpZF8pLnRyYW5zZm9ybWVyVHlwZSh0aGlzLnRyYW5zZm9ybWVyVHlwZV8pLnZpZGVvSGVpZ2h0KHRoaXMudmlkZW9IZWlnaHRfKS52aWRlb1dpZHRoKHRoaXMudmlkZW9XaWR0aF8pLnZhcmlhdGlvbigiUW9TIikuYnVpbGQoKTtILnJlcG9ydChpKSx0aGlzLm1lZGlhVHJhbnNmb3JtZXJRb3NSZXBvcnRTdGFydFRpbWVzdGFtcF89MCx0aGlzLmZyYW1lc0Zyb21Tb3VyY2VfPTAsdGhpcy5mcmFtZXNUcmFuc2Zvcm1lZF89MH19Y2xhc3MgQXMgZXh0ZW5kcyBZdHtjb25zdHJ1Y3RvcihlKXtzdXBlcigpLHRoaXMudHJhbnNmb3JtZXJzXz1bXSx0aGlzLnRyYWNrRXhwZWN0ZWRSYXRlXz0tMTtmb3IobGV0IHQ9MDt0PGUubGVuZ3RoO3QrKyl7bGV0IG49bmV3IFRzKGVbdF0sdCk7bi5vbigiZXJyb3IiLGk9Pnt0aGlzLmVtaXQoImVycm9yIixpKX0pLG4ub24oIndhcm4iLGk9Pnt0aGlzLmVtaXQoIndhcm4iLGkpfSksdGhpcy50cmFuc2Zvcm1lcnNfLnB1c2gobil9fXNldFRyYWNrRXhwZWN0ZWRSYXRlKGUpe3RoaXMudHJhY2tFeHBlY3RlZFJhdGVfPWU7Zm9yKGxldCB0IG9mIHRoaXMudHJhbnNmb3JtZXJzXyl0LnNldFRyYWNrRXhwZWN0ZWRSYXRlKHRoaXMudHJhY2tFeHBlY3RlZFJhdGVfKX1hc3luYyBzdGFydChlLHQpe2lmKCF0aGlzLnRyYW5zZm9ybWVyc198fHRoaXMudHJhbnNmb3JtZXJzXy5sZW5ndGg9PT0wKXtjb25zb2xlLmxvZygiW1BpcGVsaW5lXSBObyB0cmFuc2Zvcm1lcnMuIik7cmV0dXJufXRyeXtsZXQgbj1lO2ZvcihsZXQgaSBvZiB0aGlzLnRyYW5zZm9ybWVyc18pZT1lLnBpcGVUaHJvdWdoKG5ldyBUcmFuc2Zvcm1TdHJlYW0oaSkpO2UucGlwZVRvKHQpLnRoZW4oYXN5bmMoKT0+e2NvbnNvbGUubG9nKCJbUGlwZWxpbmVdIFNldHVwLiIpLGF3YWl0IHQuYWJvcnQoKSxhd2FpdCBuLmNhbmNlbCgpLHRoaXMuZW1pdCgicGlwZWxpbmVJbmZvIiwicGlwZWxpbmVfZW5kZWQiKX0pLmNhdGNoKGFzeW5jIGk9PntlLmNhbmNlbCgpLnRoZW4oKCk9Pntjb25zb2xlLmxvZygiW1BpcGVsaW5lXSBTaHV0dGluZyBkb3duIHN0cmVhbXMgYWZ0ZXIgYWJvcnQuIil9KS5jYXRjaChvPT57Y29uc29sZS5lcnJvcigiW1BpcGVsaW5lXSBFcnJvciBmcm9tIHN0cmVhbSB0cmFuc2Zvcm06IixvKX0pLGF3YWl0IHQuYWJvcnQoaSksYXdhaXQgbi5jYW5jZWwoaSksdGhpcy5lbWl0KCJwaXBlbGluZUluZm8iLCJwaXBlbGluZV9lbmRlZF93aXRoX2Vycm9yIil9KX1jYXRjaHt0aGlzLmVtaXQoInBpcGVsaW5lSW5mbyIsInBpcGVsaW5lX3N0YXJ0ZWRfd2l0aF9lcnJvciIpLHRoaXMuZGVzdHJveSgpO3JldHVybn10aGlzLmVtaXQoInBpcGVsaW5lSW5mbyIsInBpcGVsaW5lX3N0YXJ0ZWQiKSxjb25zb2xlLmxvZygiW1BpcGVsaW5lXSBQaXBlbGluZSBzdGFydGVkLiIpfWFzeW5jIGRlc3Ryb3koKXtjb25zb2xlLmxvZygiW1BpcGVsaW5lXSBEZXN0cm95aW5nIFBpcGVsaW5lLiIpO2ZvcihsZXQgZSBvZiB0aGlzLnRyYW5zZm9ybWVyc18pZS5zdG9wKCl9fWNsYXNzIHdzIGV4dGVuZHMgWXR7Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMudXVpZF89ZG4oKSx0aGlzLnRyYWNrRXhwZWN0ZWRSYXRlXz0tMTtjb25zdCBlPW5ldyBHKCkuYWN0aW9uKCJNZWRpYVByb2Nlc3NvciIpLmd1aWQodGhpcy51dWlkXykudmFyaWF0aW9uKCJDcmVhdGUiKS5idWlsZCgpO0gucmVwb3J0KGUpfXNldFRyYWNrRXhwZWN0ZWRSYXRlKGUpe3RoaXMudHJhY2tFeHBlY3RlZFJhdGVfPWUsdGhpcy5waXBlbGluZV8mJnRoaXMucGlwZWxpbmVfLnNldFRyYWNrRXhwZWN0ZWRSYXRlKHRoaXMudHJhY2tFeHBlY3RlZFJhdGVfKX10cmFuc2Zvcm0oZSx0KXtyZXR1cm4gdGhpcy5yZWFkYWJsZV89ZSx0aGlzLndyaXRhYmxlXz10LHRoaXMudHJhbnNmb3JtSW50ZXJuYWwoKX10cmFuc2Zvcm1JbnRlcm5hbCgpe3JldHVybiBuZXcgUHJvbWlzZSgoZSx0KT0+e2lmKCF0aGlzLnRyYW5zZm9ybWVyc198fHRoaXMudHJhbnNmb3JtZXJzXy5sZW5ndGg9PT0wKXtjb25zdCBpPW5ldyBHKCkuYWN0aW9uKCJNZWRpYVByb2Nlc3NvciIpLmd1aWQodGhpcy51dWlkXykubWVzc2FnZShaLmVycm9ycy50cmFuc2Zvcm1lcl9ub25lKS52YXJpYXRpb24oIkVycm9yIikuYnVpbGQoKTtILnJlcG9ydChpKSx0KCJbTWVkaWFQcm9jZXNzb3JdIE5lZWQgdG8gc2V0IHRyYW5zZm9ybWVycy4iKTtyZXR1cm59aWYoIXRoaXMucmVhZGFibGVfKXtjb25zdCBpPW5ldyBHKCkuYWN0aW9uKCJNZWRpYVByb2Nlc3NvciIpLmd1aWQodGhpcy51dWlkXykubWVzc2FnZShaLmVycm9ycy5yZWFkYWJsZV9udWxsKS52YXJpYXRpb24oIkVycm9yIikuYnVpbGQoKTtILnJlcG9ydChpKSx0KCJbTWVkaWFQcm9jZXNzb3JdIFJlYWRhYmxlIGlzIG51bGwuIik7cmV0dXJufWlmKCF0aGlzLndyaXRhYmxlXyl7Y29uc3QgaT1uZXcgRygpLmFjdGlvbigiTWVkaWFQcm9jZXNzb3IiKS5ndWlkKHRoaXMudXVpZF8pLm1lc3NhZ2UoWi5lcnJvcnMud3JpdGFibGVfbnVsbCkudmFyaWF0aW9uKCJFcnJvciIpLmJ1aWxkKCk7SC5yZXBvcnQoaSksdCgiW01lZGlhUHJvY2Vzc29yXSBXcml0YWJsZSBpcyBudWxsLiIpO3JldHVybn1sZXQgbj0hMTt0aGlzLnBpcGVsaW5lXyYmKG49ITAsdGhpcy5waXBlbGluZV8uY2xlYXJMaXN0ZW5lcnMoKSx0aGlzLnBpcGVsaW5lXy5kZXN0cm95KCkpLHRoaXMucGlwZWxpbmVfPW5ldyBBcyh0aGlzLnRyYW5zZm9ybWVyc18pLHRoaXMucGlwZWxpbmVfLm9uKCJ3YXJuIixpPT57dGhpcy5lbWl0KCJ3YXJuIixpKX0pLHRoaXMucGlwZWxpbmVfLm9uKCJlcnJvciIsaT0+e3RoaXMuZW1pdCgiZXJyb3IiLGkpfSksdGhpcy5waXBlbGluZV8ub24oInBpcGVsaW5lSW5mbyIsaT0+e24mJihpPT09InBpcGVsaW5lX3N0YXJ0ZWQiP2k9SnQucGlwZWxpbmVfcmVzdGFydGVkOmk9PT0icGlwZWxpbmVfc3RhcnRlZF93aXRoX2Vycm9yIiYmKGk9SnQucGlwZWxpbmVfcmVzdGFydGVkX3dpdGhfZXJyb3IpKSx0aGlzLmVtaXQoInBpcGVsaW5lSW5mbyIsaSl9KSx0aGlzLnRyYWNrRXhwZWN0ZWRSYXRlXyE9LTEmJnRoaXMucGlwZWxpbmVfLnNldFRyYWNrRXhwZWN0ZWRSYXRlKHRoaXMudHJhY2tFeHBlY3RlZFJhdGVfKSx0aGlzLnBpcGVsaW5lXy5zdGFydCh0aGlzLnJlYWRhYmxlXyx0aGlzLndyaXRhYmxlXykudGhlbigoKT0+e2UoKX0pLmNhdGNoKGk9Pnt0KGkpfSl9KX1zZXRUcmFuc2Zvcm1lcnMoZSl7Y29uc3QgdD1uZXcgRygpLmFjdGlvbigiTWVkaWFQcm9jZXNzb3IiKS5ndWlkKHRoaXMudXVpZF8pLm1lc3NhZ2UoWi51cGRhdGVzLnRyYW5zZm9ybWVyX25ldykudmFyaWF0aW9uKCJVcGRhdGUiKS5idWlsZCgpO3JldHVybiBILnJlcG9ydCh0KSx0aGlzLnRyYW5zZm9ybWVyc189ZSx0aGlzLnJlYWRhYmxlXyYmdGhpcy53cml0YWJsZV8/dGhpcy50cmFuc2Zvcm1JbnRlcm5hbCgpOlByb21pc2UucmVzb2x2ZSgpfWRlc3Ryb3koKXtyZXR1cm4gbmV3IFByb21pc2UoZT0+e3RoaXMucGlwZWxpbmVfJiZ0aGlzLnBpcGVsaW5lXy5kZXN0cm95KCk7Y29uc3QgdD1uZXcgRygpLmFjdGlvbigiTWVkaWFQcm9jZXNzb3IiKS5ndWlkKHRoaXMudXVpZF8pLnZhcmlhdGlvbigiRGVsZXRlIikuYnVpbGQoKTtILnJlcG9ydCh0KSxlKCl9KX19dmFyIGl0PShyPT4oci5Mb3c9IkxvdyIsci5IaWdoPSJIaWdoIixyKSkoaXR8fHt9KTsvKiBAbGljZW5zZSB0d2dsLmpzIDUuMC40IENvcHlyaWdodCAoYykgMjAxNSwgR3JlZ2cgVGF2YXJlcyBBbGwgUmlnaHRzIFJlc2VydmVkLgpBdmFpbGFibGUgdmlhIHRoZSBNSVQgbGljZW5zZS4Kc2VlOiBodHRwOi8vZ2l0aHViLmNvbS9ncmVnZ21hbi90d2dsLmpzIGZvciBkZXRhaWxzICovY29uc3QgUXQ9NTEyMCxEZT01MTIxLFp0PTUxMjIsZXI9NTEyMyx0cj01MTI0LHJyPTUxMjUsbnI9NTEyNixScz0zMjgxOSxTcz0zMjgyMCxJcz0zMzYzNSxGcz01MTMxLFBzPTMzNjQwLERzPTM1ODk5LENzPTM1OTAyLE9zPTM2MjY5LE1zPTM0MDQyLF9uPXt9O3tjb25zdCByPV9uO3JbUXRdPUludDhBcnJheSxyW0RlXT1VaW50OEFycmF5LHJbWnRdPUludDE2QXJyYXkscltlcl09VWludDE2QXJyYXksclt0cl09SW50MzJBcnJheSxyW3JyXT1VaW50MzJBcnJheSxyW25yXT1GbG9hdDMyQXJyYXkscltSc109VWludDE2QXJyYXkscltTc109VWludDE2QXJyYXkscltJc109VWludDE2QXJyYXkscltGc109VWludDE2QXJyYXkscltQc109VWludDMyQXJyYXkscltEc109VWludDMyQXJyYXkscltDc109VWludDMyQXJyYXkscltPc109VWludDMyQXJyYXkscltNc109VWludDMyQXJyYXl9ZnVuY3Rpb24gaXIocil7aWYociBpbnN0YW5jZW9mIEludDhBcnJheSlyZXR1cm4gUXQ7aWYociBpbnN0YW5jZW9mIFVpbnQ4QXJyYXl8fHIgaW5zdGFuY2VvZiBVaW50OENsYW1wZWRBcnJheSlyZXR1cm4gRGU7aWYociBpbnN0YW5jZW9mIEludDE2QXJyYXkpcmV0dXJuIFp0O2lmKHIgaW5zdGFuY2VvZiBVaW50MTZBcnJheSlyZXR1cm4gZXI7aWYociBpbnN0YW5jZW9mIEludDMyQXJyYXkpcmV0dXJuIHRyO2lmKHIgaW5zdGFuY2VvZiBVaW50MzJBcnJheSlyZXR1cm4gcnI7aWYociBpbnN0YW5jZW9mIEZsb2F0MzJBcnJheSlyZXR1cm4gbnI7dGhyb3cgbmV3IEVycm9yKCJ1bnN1cHBvcnRlZCB0eXBlZCBhcnJheSB0eXBlIil9ZnVuY3Rpb24gTnMocil7aWYocj09PUludDhBcnJheSlyZXR1cm4gUXQ7aWYocj09PVVpbnQ4QXJyYXl8fHI9PT1VaW50OENsYW1wZWRBcnJheSlyZXR1cm4gRGU7aWYocj09PUludDE2QXJyYXkpcmV0dXJuIFp0O2lmKHI9PT1VaW50MTZBcnJheSlyZXR1cm4gZXI7aWYocj09PUludDMyQXJyYXkpcmV0dXJuIHRyO2lmKHI9PT1VaW50MzJBcnJheSlyZXR1cm4gcnI7aWYocj09PUZsb2F0MzJBcnJheSlyZXR1cm4gbnI7dGhyb3cgbmV3IEVycm9yKCJ1bnN1cHBvcnRlZCB0eXBlZCBhcnJheSB0eXBlIil9ZnVuY3Rpb24gVXMocil7Y29uc3QgZT1fbltyXTtpZighZSl0aHJvdyBuZXcgRXJyb3IoInVua25vd24gZ2wgdHlwZSIpO3JldHVybiBlfWNvbnN0IG90PXR5cGVvZiBTaGFyZWRBcnJheUJ1ZmZlciE9InVuZGVmaW5lZCI/ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuYnVmZmVyJiYoZS5idWZmZXIgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcnx8ZS5idWZmZXIgaW5zdGFuY2VvZiBTaGFyZWRBcnJheUJ1ZmZlcil9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLmJ1ZmZlciYmZS5idWZmZXIgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcn07ZnVuY3Rpb24geG4oLi4ucil7Y29uc29sZS5lcnJvciguLi5yKX1jb25zdCBibj1uZXcgTWFwO2Z1bmN0aW9uIENlKHIsZSl7aWYoIXJ8fHR5cGVvZiByIT0ib2JqZWN0IilyZXR1cm4hMTtsZXQgdD1ibi5nZXQoZSk7dHx8KHQ9bmV3IFdlYWtNYXAsYm4uc2V0KGUsdCkpO2xldCBuPXQuZ2V0KHIpO2lmKG49PT12b2lkIDApe2NvbnN0IGk9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHIpO249aS5zdWJzdHJpbmcoOCxpLmxlbmd0aC0xKT09PWUsdC5zZXQocixuKX1yZXR1cm4gbn1mdW5jdGlvbiBCcyhyLGUpe3JldHVybiB0eXBlb2YgV2ViR0xCdWZmZXIhPSJ1bmRlZmluZWQiJiZDZShlLCJXZWJHTEJ1ZmZlciIpfWZ1bmN0aW9uIGtzKHIsZSl7cmV0dXJuIHR5cGVvZiBXZWJHTFJlbmRlcmJ1ZmZlciE9InVuZGVmaW5lZCImJkNlKGUsIldlYkdMUmVuZGVyYnVmZmVyIil9ZnVuY3Rpb24gTHMocixlKXtyZXR1cm4gdHlwZW9mIFdlYkdMU2hhZGVyIT0idW5kZWZpbmVkIiYmQ2UoZSwiV2ViR0xTaGFkZXIiKX1mdW5jdGlvbiBvcihyLGUpe3JldHVybiB0eXBlb2YgV2ViR0xUZXh0dXJlIT0idW5kZWZpbmVkIiYmQ2UoZSwiV2ViR0xUZXh0dXJlIil9ZnVuY3Rpb24gJHMocixlKXtyZXR1cm4gdHlwZW9mIFdlYkdMU2FtcGxlciE9InVuZGVmaW5lZCImJkNlKGUsIldlYkdMU2FtcGxlciIpfWNvbnN0IGduPTM1MDQ0LGxlPTM0OTYyLHpzPTM0OTYzLEdzPTM0NjYwLEhzPTUxMjAsVnM9NTEyMSxXcz01MTIyLGpzPTUxMjMscXM9NTEyNCxYcz01MTI1LFlzPTUxMjYsdm49e2F0dHJpYlByZWZpeDoiIn07ZnVuY3Rpb24gS3MocixlLHQsbixpKXtyLmJpbmRCdWZmZXIoZSx0KSxyLmJ1ZmZlckRhdGEoZSxuLGl8fGduKX1mdW5jdGlvbiBFbihyLGUsdCxuKXtpZihCcyhyLGUpKXJldHVybiBlO3Q9dHx8bGU7Y29uc3QgaT1yLmNyZWF0ZUJ1ZmZlcigpO3JldHVybiBLcyhyLHQsaSxlLG4pLGl9ZnVuY3Rpb24gVG4ocil7cmV0dXJuIHI9PT0iaW5kaWNlcyJ9ZnVuY3Rpb24gSnMocil7cmV0dXJuIHIgaW5zdGFuY2VvZiBJbnQ4QXJyYXl8fHIgaW5zdGFuY2VvZiBVaW50OEFycmF5fWZ1bmN0aW9uIFFzKHIpe3JldHVybiByPT09SW50OEFycmF5fHxyPT09VWludDhBcnJheX1mdW5jdGlvbiBacyhyKXtyZXR1cm4gci5sZW5ndGg/cjpyLmRhdGF9Y29uc3QgZWE9L2Nvb3JkfHRleHR1cmUvaSx0YT0vY29sb3J8Y29sb3VyL2k7ZnVuY3Rpb24gQW4ocixlKXtsZXQgdDtpZihlYS50ZXN0KHIpP3Q9Mjp0YS50ZXN0KHIpP3Q9NDp0PTMsZSV0PjApdGhyb3cgbmV3IEVycm9yKGBDYW4gbm90IGd1ZXNzIG51bUNvbXBvbmVudHMgZm9yIGF0dHJpYnV0ZSAnJHtyfScuIFRyaWVkICR7dH0gYnV0ICR7ZX0gdmFsdWVzIGlzIG5vdCBldmVubHkgZGl2aXNpYmxlIGJ5ICR7dH0uIFlvdSBzaG91bGQgc3BlY2lmeSBpdC5gKTtyZXR1cm4gdH1mdW5jdGlvbiByYShyLGUpe3JldHVybiByLm51bUNvbXBvbmVudHN8fHIuc2l6ZXx8QW4oZSxacyhyKS5sZW5ndGgpfWZ1bmN0aW9uIHduKHIsZSl7aWYob3QocikpcmV0dXJuIHI7aWYob3Qoci5kYXRhKSlyZXR1cm4gci5kYXRhO0FycmF5LmlzQXJyYXkocikmJihyPXtkYXRhOnJ9KTtsZXQgdD1yLnR5cGU7cmV0dXJuIHR8fChUbihlKT90PVVpbnQxNkFycmF5OnQ9RmxvYXQzMkFycmF5KSxuZXcgdChyLmRhdGEpfWZ1bmN0aW9uIG5hKHIsZSl7Y29uc3QgdD17fTtyZXR1cm4gT2JqZWN0LmtleXMoZSkuZm9yRWFjaChmdW5jdGlvbihuKXtpZighVG4obikpe2NvbnN0IGk9ZVtuXSxvPWkuYXR0cmlifHxpLm5hbWV8fGkuYXR0cmliTmFtZXx8dm4uYXR0cmliUHJlZml4K247aWYoaS52YWx1ZSl7aWYoIUFycmF5LmlzQXJyYXkoaS52YWx1ZSkmJiFvdChpLnZhbHVlKSl0aHJvdyBuZXcgRXJyb3IoImFycmF5LnZhbHVlIGlzIG5vdCBhcnJheSBvciB0eXBlZGFycmF5Iik7dFtvXT17dmFsdWU6aS52YWx1ZX19ZWxzZXtsZXQgcyxhLHUsZjtpZihpLmJ1ZmZlciYmaS5idWZmZXIgaW5zdGFuY2VvZiBXZWJHTEJ1ZmZlcilzPWkuYnVmZmVyLGY9aS5udW1Db21wb25lbnRzfHxpLnNpemUsYT1pLnR5cGUsdT1pLm5vcm1hbGl6ZTtlbHNlIGlmKHR5cGVvZiBpPT0ibnVtYmVyInx8dHlwZW9mIGkuZGF0YT09Im51bWJlciIpe2NvbnN0IGM9aS5kYXRhfHxpLGQ9aS50eXBlfHxGbG9hdDMyQXJyYXkscD1jKmQuQllURVNfUEVSX0VMRU1FTlQ7YT1OcyhkKSx1PWkubm9ybWFsaXplIT09dm9pZCAwP2kubm9ybWFsaXplOlFzKGQpLGY9aS5udW1Db21wb25lbnRzfHxpLnNpemV8fEFuKG4sYykscz1yLmNyZWF0ZUJ1ZmZlcigpLHIuYmluZEJ1ZmZlcihsZSxzKSxyLmJ1ZmZlckRhdGEobGUscCxpLmRyYXdUeXBlfHxnbil9ZWxzZXtjb25zdCBjPXduKGksbik7cz1FbihyLGMsdm9pZCAwLGkuZHJhd1R5cGUpLGE9aXIoYyksdT1pLm5vcm1hbGl6ZSE9PXZvaWQgMD9pLm5vcm1hbGl6ZTpKcyhjKSxmPXJhKGksbil9dFtvXT17YnVmZmVyOnMsbnVtQ29tcG9uZW50czpmLHR5cGU6YSxub3JtYWxpemU6dSxzdHJpZGU6aS5zdHJpZGV8fDAsb2Zmc2V0Omkub2Zmc2V0fHwwLGRpdmlzb3I6aS5kaXZpc29yPT09dm9pZCAwP3ZvaWQgMDppLmRpdmlzb3IsZHJhd1R5cGU6aS5kcmF3VHlwZX19fX0pLHIuYmluZEJ1ZmZlcihsZSxudWxsKSx0fWZ1bmN0aW9uIGlhKHIsZSl7cmV0dXJuIGU9PT1Ic3x8ZT09PVZzPzE6ZT09PVdzfHxlPT09anM/MjplPT09cXN8fGU9PT1Yc3x8ZT09PVlzPzQ6MH1jb25zdCBzcj1bInBvc2l0aW9uIiwicG9zaXRpb25zIiwiYV9wb3NpdGlvbiJdO2Z1bmN0aW9uIG9hKHIsZSl7bGV0IHQsbjtmb3Iobj0wO248c3IubGVuZ3RoJiYodD1zcltuXSwhKHQgaW4gZXx8KHQ9dm4uYXR0cmliUHJlZml4K3QsdCBpbiBlKSkpOysrbik7bj09PXNyLmxlbmd0aCYmKHQ9T2JqZWN0LmtleXMoZSlbMF0pO2NvbnN0IGk9ZVt0XTtpZighaS5idWZmZXIpcmV0dXJuIDE7ci5iaW5kQnVmZmVyKGxlLGkuYnVmZmVyKTtjb25zdCBvPXIuZ2V0QnVmZmVyUGFyYW1ldGVyKGxlLEdzKTtyLmJpbmRCdWZmZXIobGUsbnVsbCk7Y29uc3Qgcz1pYShyLGkudHlwZSksYT1vL3MsdT1pLm51bUNvbXBvbmVudHN8fGkuc2l6ZSxmPWEvdTtpZihmJTEhPT0wKXRocm93IG5ldyBFcnJvcihgbnVtQ29tcG9uZW50cyAke3V9IG5vdCBjb3JyZWN0IGZvciBsZW5ndGggJHtsZW5ndGh9YCk7cmV0dXJuIGZ9ZnVuY3Rpb24gc2EocixlLHQpe2NvbnN0IG49bmEocixlKSxpPU9iamVjdC5hc3NpZ24oe30sdHx8e30pO2kuYXR0cmlicz1PYmplY3QuYXNzaWduKHt9LHQ/dC5hdHRyaWJzOnt9LG4pO2NvbnN0IG89ZS5pbmRpY2VzO2lmKG8pe2NvbnN0IHM9d24obywiaW5kaWNlcyIpO2kuaW5kaWNlcz1FbihyLHMsenMpLGkubnVtRWxlbWVudHM9cy5sZW5ndGgsaS5lbGVtZW50VHlwZT1pcihzKX1lbHNlIGkubnVtRWxlbWVudHN8fChpLm51bUVsZW1lbnRzPW9hKHIsaS5hdHRyaWJzKSk7cmV0dXJuIGl9ZnVuY3Rpb24gT2Uocil7cmV0dXJuISFyLnRleFN0b3JhZ2UyRH1jb25zdCBSbj1mdW5jdGlvbigpe2NvbnN0IHI9e30sZT17fTtmdW5jdGlvbiB0KG4pe2NvbnN0IGk9bi5jb25zdHJ1Y3Rvci5uYW1lO2lmKCFyW2ldKXtmb3IoY29uc3QgbyBpbiBuKWlmKHR5cGVvZiBuW29dPT0ibnVtYmVyIil7Y29uc3Qgcz1lW25bb11dO2VbbltvXV09cz9gJHtzfSB8ICR7b31gOm99cltpXT0hMH19cmV0dXJuIGZ1bmN0aW9uKGksbyl7cmV0dXJuIHQoaSksZVtvXXx8KHR5cGVvZiBvPT0ibnVtYmVyIj9gMHgke28udG9TdHJpbmcoMTYpfWA6byl9fSgpLG5lPXt0ZXh0dXJlQ29sb3I6bmV3IFVpbnQ4QXJyYXkoWzEyOCwxOTIsMjU1LDI1NV0pLHRleHR1cmVPcHRpb25zOnt9LGNyb3NzT3JpZ2luOnZvaWQgMH0sTWU9b3QsU249ZnVuY3Rpb24oKXtsZXQgcjtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gcj1yfHwodHlwZW9mIGRvY3VtZW50IT0idW5kZWZpbmVkIiYmZG9jdW1lbnQuY3JlYXRlRWxlbWVudD9kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKS5nZXRDb250ZXh0KCIyZCIpOm51bGwpLHJ9fSgpLEluPTY0MDYsSj02NDA3LEk9NjQwOCxGbj02NDA5LFBuPTY0MTAsTmU9NjQwMixEbj0zNDA0MSxzdD0zMzA3MSxhYT05NzI4LHVhPTk3MjksaWU9MzU1MyxvZT0zNDA2NyxkZT0zMjg3OSxtZT0zNTg2Nixhcj0zNDA2OSxjYT0zNDA3MCxmYT0zNDA3MSxsYT0zNDA3MixkYT0zNDA3MyxtYT0zNDA3NCx1cj0xMDI0MSxjcj0xMDI0MCxhdD0xMDI0Mix1dD0xMDI0MyxDbj0zMjg4MixoYT0zMzA4MixwYT0zMzA4Myx5YT0zMzA4NCxfYT0zMzA4NSxmcj0zMzE3LE9uPTMzMTQsTW49MzI4NzgsTm49MzMxNixVbj0zMzE1LEJuPTMyODc3LHhhPTM3NDQzLGJhPTM3NDQxLGdhPTM3NDQwLHZhPTMzMzIxLEVhPTM2NzU2LFRhPTMzMzI1LEFhPTMzMzI2LHdhPTMzMzMwLFJhPTMzMzI5LFNhPTMzMzM4LElhPTMzMzM3LEZhPTMzMzQwLFBhPTMzMzM5LERhPTMzMzIzLENhPTM2NzU3LE9hPTMzMzI3LE1hPTMzMzI4LE5hPTMzMzM2LFVhPTMzMzM1LEJhPTMzMzMyLGthPTMzMzMxLExhPTMzMzM0LCRhPTMzMzMzLHphPTMyODQ5LEdhPTM1OTA1LEhhPTM2MTk0LFZhPTM2NzU4LFdhPTM1ODk4LGphPTM1OTAxLHFhPTM0ODQzLFhhPTM0ODM3LFlhPTM2MjIxLEthPTM2MjM5LEphPTM2MjE1LFFhPTM2MjMzLFphPTM2MjA5LGV1PTM2MjI3LHR1PTMyODU2LHJ1PTM1OTA3LG51PTM2NzU5LGl1PTMyODU1LG91PTMyODU0LHN1PTMyODU3LGF1PTM0ODQyLHV1PTM0ODM2LGN1PTM2MjIwLGZ1PTM2MjM4LGx1PTM2OTc1LGR1PTM2MjE0LG11PTM2MjMyLGh1PTM2MjI2LHB1PTM2MjA4LHl1PTMzMTg5LF91PTMzMTkwLHh1PTM2MDEyLGJ1PTM2MDEzLGd1PTM1MDU2LHNlPTUxMjAsUz01MTIxLGN0PTUxMjIsVGU9NTEyMyxmdD01MTI0LGhlPTUxMjUsTj01MTI2LGtuPTMyODE5LExuPTMyODIwLCRuPTMzNjM1LFc9NTEzMSxVZT0zNjE5Myxscj0zMzY0MCx2dT0zNTg5OSxFdT0zNTkwMixUdT0zNjI2OSxBdT0zNDA0MixsdD0zMzMxOSxBZT0zMzMyMCxkdD02NDAzLHdlPTM2MjQ0LFJlPTM2MjQ4LHBlPTM2MjQ5O2xldCBkcjtmdW5jdGlvbiBtdChyKXtpZighZHIpe2NvbnN0IGU9e307ZVtJbl09e3RleHR1cmVGb3JtYXQ6SW4sY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiEwLGJ5dGVzUGVyRWxlbWVudDpbMSwyLDIsNF0sdHlwZTpbUyxXLFVlLE5dfSxlW0ZuXT17dGV4dHVyZUZvcm1hdDpGbixjb2xvclJlbmRlcmFibGU6ITAsdGV4dHVyZUZpbHRlcmFibGU6ITAsYnl0ZXNQZXJFbGVtZW50OlsxLDIsMiw0XSx0eXBlOltTLFcsVWUsTl19LGVbUG5dPXt0ZXh0dXJlRm9ybWF0OlBuLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMCxieXRlc1BlckVsZW1lbnQ6WzIsNCw0LDhdLHR5cGU6W1MsVyxVZSxOXX0sZVtKXT17dGV4dHVyZUZvcm1hdDpKLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMCxieXRlc1BlckVsZW1lbnQ6WzMsNiw2LDEyLDJdLHR5cGU6W1MsVyxVZSxOLCRuXX0sZVtJXT17dGV4dHVyZUZvcm1hdDpJLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMCxieXRlc1BlckVsZW1lbnQ6WzQsOCw4LDE2LDIsMl0sdHlwZTpbUyxXLFVlLE4sa24sTG5dfSxlW05lXT17dGV4dHVyZUZvcm1hdDpOZSxjb2xvclJlbmRlcmFibGU6ITAsdGV4dHVyZUZpbHRlcmFibGU6ITEsYnl0ZXNQZXJFbGVtZW50OlsyLDRdLHR5cGU6W2hlLFRlXX0sZVt2YV09e3RleHR1cmVGb3JtYXQ6ZHQsY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiEwLGJ5dGVzUGVyRWxlbWVudDpbMV0sdHlwZTpbU119LGVbRWFdPXt0ZXh0dXJlRm9ybWF0OmR0LGNvbG9yUmVuZGVyYWJsZTohMSx0ZXh0dXJlRmlsdGVyYWJsZTohMCxieXRlc1BlckVsZW1lbnQ6WzFdLHR5cGU6W3NlXX0sZVtUYV09e3RleHR1cmVGb3JtYXQ6ZHQsY29sb3JSZW5kZXJhYmxlOiExLHRleHR1cmVGaWx0ZXJhYmxlOiEwLGJ5dGVzUGVyRWxlbWVudDpbNCwyXSx0eXBlOltOLFddfSxlW0FhXT17dGV4dHVyZUZvcm1hdDpkdCxjb2xvclJlbmRlcmFibGU6ITEsdGV4dHVyZUZpbHRlcmFibGU6ITEsYnl0ZXNQZXJFbGVtZW50Ols0XSx0eXBlOltOXX0sZVt3YV09e3RleHR1cmVGb3JtYXQ6d2UsY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiExLGJ5dGVzUGVyRWxlbWVudDpbMV0sdHlwZTpbU119LGVbUmFdPXt0ZXh0dXJlRm9ybWF0OndlLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzFdLHR5cGU6W3NlXX0sZVtCYV09e3RleHR1cmVGb3JtYXQ6d2UsY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiExLGJ5dGVzUGVyRWxlbWVudDpbMl0sdHlwZTpbVGVdfSxlW2thXT17dGV4dHVyZUZvcm1hdDp3ZSxjb2xvclJlbmRlcmFibGU6ITAsdGV4dHVyZUZpbHRlcmFibGU6ITEsYnl0ZXNQZXJFbGVtZW50OlsyXSx0eXBlOltjdF19LGVbTGFdPXt0ZXh0dXJlRm9ybWF0OndlLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzRdLHR5cGU6W2hlXX0sZVskYV09e3RleHR1cmVGb3JtYXQ6d2UsY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiExLGJ5dGVzUGVyRWxlbWVudDpbNF0sdHlwZTpbZnRdfSxlW0RhXT17dGV4dHVyZUZvcm1hdDpsdCxjb2xvclJlbmRlcmFibGU6ITAsdGV4dHVyZUZpbHRlcmFibGU6ITAsYnl0ZXNQZXJFbGVtZW50OlsyXSx0eXBlOltTXX0sZVtDYV09e3RleHR1cmVGb3JtYXQ6bHQsY29sb3JSZW5kZXJhYmxlOiExLHRleHR1cmVGaWx0ZXJhYmxlOiEwLGJ5dGVzUGVyRWxlbWVudDpbMl0sdHlwZTpbc2VdfSxlW09hXT17dGV4dHVyZUZvcm1hdDpsdCxjb2xvclJlbmRlcmFibGU6ITEsdGV4dHVyZUZpbHRlcmFibGU6ITAsYnl0ZXNQZXJFbGVtZW50Ols4LDRdLHR5cGU6W04sV119LGVbTWFdPXt0ZXh0dXJlRm9ybWF0Omx0LGNvbG9yUmVuZGVyYWJsZTohMSx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzhdLHR5cGU6W05dfSxlW05hXT17dGV4dHVyZUZvcm1hdDpBZSxjb2xvclJlbmRlcmFibGU6ITAsdGV4dHVyZUZpbHRlcmFibGU6ITEsYnl0ZXNQZXJFbGVtZW50OlsyXSx0eXBlOltTXX0sZVtVYV09e3RleHR1cmVGb3JtYXQ6QWUsY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiExLGJ5dGVzUGVyRWxlbWVudDpbMl0sdHlwZTpbc2VdfSxlW1NhXT17dGV4dHVyZUZvcm1hdDpBZSxjb2xvclJlbmRlcmFibGU6ITAsdGV4dHVyZUZpbHRlcmFibGU6ITEsYnl0ZXNQZXJFbGVtZW50Ols0XSx0eXBlOltUZV19LGVbSWFdPXt0ZXh0dXJlRm9ybWF0OkFlLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzRdLHR5cGU6W2N0XX0sZVtGYV09e3RleHR1cmVGb3JtYXQ6QWUsY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiExLGJ5dGVzUGVyRWxlbWVudDpbOF0sdHlwZTpbaGVdfSxlW1BhXT17dGV4dHVyZUZvcm1hdDpBZSxjb2xvclJlbmRlcmFibGU6ITAsdGV4dHVyZUZpbHRlcmFibGU6ITEsYnl0ZXNQZXJFbGVtZW50Ols4XSx0eXBlOltmdF19LGVbemFdPXt0ZXh0dXJlRm9ybWF0OkosY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiEwLGJ5dGVzUGVyRWxlbWVudDpbM10sdHlwZTpbU119LGVbR2FdPXt0ZXh0dXJlRm9ybWF0OkosY29sb3JSZW5kZXJhYmxlOiExLHRleHR1cmVGaWx0ZXJhYmxlOiEwLGJ5dGVzUGVyRWxlbWVudDpbM10sdHlwZTpbU119LGVbSGFdPXt0ZXh0dXJlRm9ybWF0OkosY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiEwLGJ5dGVzUGVyRWxlbWVudDpbMywyXSx0eXBlOltTLCRuXX0sZVtWYV09e3RleHR1cmVGb3JtYXQ6Sixjb2xvclJlbmRlcmFibGU6ITEsdGV4dHVyZUZpbHRlcmFibGU6ITAsYnl0ZXNQZXJFbGVtZW50OlszXSx0eXBlOltzZV19LGVbV2FdPXt0ZXh0dXJlRm9ybWF0OkosY29sb3JSZW5kZXJhYmxlOiExLHRleHR1cmVGaWx0ZXJhYmxlOiEwLGJ5dGVzUGVyRWxlbWVudDpbMTIsNiw0XSx0eXBlOltOLFcsdnVdfSxlW2phXT17dGV4dHVyZUZvcm1hdDpKLGNvbG9yUmVuZGVyYWJsZTohMSx0ZXh0dXJlRmlsdGVyYWJsZTohMCxieXRlc1BlckVsZW1lbnQ6WzEyLDYsNF0sdHlwZTpbTixXLEV1XX0sZVtxYV09e3RleHR1cmVGb3JtYXQ6Sixjb2xvclJlbmRlcmFibGU6ITEsdGV4dHVyZUZpbHRlcmFibGU6ITAsYnl0ZXNQZXJFbGVtZW50OlsxMiw2XSx0eXBlOltOLFddfSxlW1hhXT17dGV4dHVyZUZvcm1hdDpKLGNvbG9yUmVuZGVyYWJsZTohMSx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzEyXSx0eXBlOltOXX0sZVtZYV09e3RleHR1cmVGb3JtYXQ6UmUsY29sb3JSZW5kZXJhYmxlOiExLHRleHR1cmVGaWx0ZXJhYmxlOiExLGJ5dGVzUGVyRWxlbWVudDpbM10sdHlwZTpbU119LGVbS2FdPXt0ZXh0dXJlRm9ybWF0OlJlLGNvbG9yUmVuZGVyYWJsZTohMSx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzNdLHR5cGU6W3NlXX0sZVtKYV09e3RleHR1cmVGb3JtYXQ6UmUsY29sb3JSZW5kZXJhYmxlOiExLHRleHR1cmVGaWx0ZXJhYmxlOiExLGJ5dGVzUGVyRWxlbWVudDpbNl0sdHlwZTpbVGVdfSxlW1FhXT17dGV4dHVyZUZvcm1hdDpSZSxjb2xvclJlbmRlcmFibGU6ITEsdGV4dHVyZUZpbHRlcmFibGU6ITEsYnl0ZXNQZXJFbGVtZW50Ols2XSx0eXBlOltjdF19LGVbWmFdPXt0ZXh0dXJlRm9ybWF0OlJlLGNvbG9yUmVuZGVyYWJsZTohMSx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzEyXSx0eXBlOltoZV19LGVbZXVdPXt0ZXh0dXJlRm9ybWF0OlJlLGNvbG9yUmVuZGVyYWJsZTohMSx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzEyXSx0eXBlOltmdF19LGVbdHVdPXt0ZXh0dXJlRm9ybWF0OkksY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiEwLGJ5dGVzUGVyRWxlbWVudDpbNF0sdHlwZTpbU119LGVbcnVdPXt0ZXh0dXJlRm9ybWF0OkksY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiEwLGJ5dGVzUGVyRWxlbWVudDpbNF0sdHlwZTpbU119LGVbbnVdPXt0ZXh0dXJlRm9ybWF0OkksY29sb3JSZW5kZXJhYmxlOiExLHRleHR1cmVGaWx0ZXJhYmxlOiEwLGJ5dGVzUGVyRWxlbWVudDpbNF0sdHlwZTpbc2VdfSxlW2l1XT17dGV4dHVyZUZvcm1hdDpJLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMCxieXRlc1BlckVsZW1lbnQ6WzQsMiw0XSx0eXBlOltTLExuLGxyXX0sZVtvdV09e3RleHR1cmVGb3JtYXQ6SSxjb2xvclJlbmRlcmFibGU6ITAsdGV4dHVyZUZpbHRlcmFibGU6ITAsYnl0ZXNQZXJFbGVtZW50Ols0LDJdLHR5cGU6W1Msa25dfSxlW3N1XT17dGV4dHVyZUZvcm1hdDpJLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMCxieXRlc1BlckVsZW1lbnQ6WzRdLHR5cGU6W2xyXX0sZVthdV09e3RleHR1cmVGb3JtYXQ6SSxjb2xvclJlbmRlcmFibGU6ITEsdGV4dHVyZUZpbHRlcmFibGU6ITAsYnl0ZXNQZXJFbGVtZW50OlsxNiw4XSx0eXBlOltOLFddfSxlW3V1XT17dGV4dHVyZUZvcm1hdDpJLGNvbG9yUmVuZGVyYWJsZTohMSx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzE2XSx0eXBlOltOXX0sZVtjdV09e3RleHR1cmVGb3JtYXQ6cGUsY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiExLGJ5dGVzUGVyRWxlbWVudDpbNF0sdHlwZTpbU119LGVbZnVdPXt0ZXh0dXJlRm9ybWF0OnBlLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzRdLHR5cGU6W3NlXX0sZVtsdV09e3RleHR1cmVGb3JtYXQ6cGUsY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiExLGJ5dGVzUGVyRWxlbWVudDpbNF0sdHlwZTpbbHJdfSxlW2R1XT17dGV4dHVyZUZvcm1hdDpwZSxjb2xvclJlbmRlcmFibGU6ITAsdGV4dHVyZUZpbHRlcmFibGU6ITEsYnl0ZXNQZXJFbGVtZW50Ols4XSx0eXBlOltUZV19LGVbbXVdPXt0ZXh0dXJlRm9ybWF0OnBlLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzhdLHR5cGU6W2N0XX0sZVtodV09e3RleHR1cmVGb3JtYXQ6cGUsY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiExLGJ5dGVzUGVyRWxlbWVudDpbMTZdLHR5cGU6W2Z0XX0sZVtwdV09e3RleHR1cmVGb3JtYXQ6cGUsY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiExLGJ5dGVzUGVyRWxlbWVudDpbMTZdLHR5cGU6W2hlXX0sZVt5dV09e3RleHR1cmVGb3JtYXQ6TmUsY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiExLGJ5dGVzUGVyRWxlbWVudDpbMiw0XSx0eXBlOltUZSxoZV19LGVbX3VdPXt0ZXh0dXJlRm9ybWF0Ok5lLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzRdLHR5cGU6W2hlXX0sZVt4dV09e3RleHR1cmVGb3JtYXQ6TmUsY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiExLGJ5dGVzUGVyRWxlbWVudDpbNF0sdHlwZTpbTl19LGVbZ3VdPXt0ZXh0dXJlRm9ybWF0OkRuLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzRdLHR5cGU6W0F1XX0sZVtidV09e3RleHR1cmVGb3JtYXQ6RG4sY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiExLGJ5dGVzUGVyRWxlbWVudDpbNF0sdHlwZTpbVHVdfSxPYmplY3Qua2V5cyhlKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe2NvbnN0IG49ZVt0XTtuLmJ5dGVzUGVyRWxlbWVudE1hcD17fSxuLmJ5dGVzUGVyRWxlbWVudC5mb3JFYWNoKGZ1bmN0aW9uKGksbyl7Y29uc3Qgcz1uLnR5cGVbb107bi5ieXRlc1BlckVsZW1lbnRNYXBbc109aX0pfSksZHI9ZX1yZXR1cm4gZHJbcl19ZnVuY3Rpb24gd3UocixlKXtjb25zdCB0PW10KHIpO2lmKCF0KXRocm93InVua25vd24gaW50ZXJuYWwgZm9ybWF0Ijtjb25zdCBuPXQuYnl0ZXNQZXJFbGVtZW50TWFwW2VdO2lmKG49PT12b2lkIDApdGhyb3cidW5rbm93biBpbnRlcm5hbCBmb3JtYXQiO3JldHVybiBufWZ1bmN0aW9uIEJlKHIpe2NvbnN0IGU9bXQocik7aWYoIWUpdGhyb3cidW5rbm93biBpbnRlcm5hbCBmb3JtYXQiO3JldHVybntmb3JtYXQ6ZS50ZXh0dXJlRm9ybWF0LHR5cGU6ZS50eXBlWzBdfX1mdW5jdGlvbiB6bihyKXtyZXR1cm4ociZyLTEpPT09MH1mdW5jdGlvbiBSdShyLGUsdCxuKXtpZighT2UocikpcmV0dXJuIHpuKGUpJiZ6bih0KTtjb25zdCBpPW10KG4pO2lmKCFpKXRocm93InVua25vd24gaW50ZXJuYWwgZm9ybWF0IjtyZXR1cm4gaS5jb2xvclJlbmRlcmFibGUmJmkudGV4dHVyZUZpbHRlcmFibGV9ZnVuY3Rpb24gU3Uocil7Y29uc3QgZT1tdChyKTtpZighZSl0aHJvdyJ1bmtub3duIGludGVybmFsIGZvcm1hdCI7cmV0dXJuIGUudGV4dHVyZUZpbHRlcmFibGV9ZnVuY3Rpb24gSXUocixlLHQpe3JldHVybiBNZShlKT9pcihlKTp0fHxTfWZ1bmN0aW9uIGh0KHIsZSx0LG4saSl7aWYoaSUxIT09MCl0aHJvdyJjYW4ndCBndWVzcyBkaW1lbnNpb25zIjtpZighdCYmIW4pe2NvbnN0IG89TWF0aC5zcXJ0KGkvKGU9PT1vZT82OjEpKTtvJTE9PT0wPyh0PW8sbj1vKToodD1pLG49MSl9ZWxzZSBpZihuKXtpZighdCYmKHQ9aS9uLHQlMSkpdGhyb3ciY2FuJ3QgZ3Vlc3MgZGltZW5zaW9ucyJ9ZWxzZSBpZihuPWkvdCxuJTEpdGhyb3ciY2FuJ3QgZ3Vlc3MgZGltZW5zaW9ucyI7cmV0dXJue3dpZHRoOnQsaGVpZ2h0Om59fWZ1bmN0aW9uIFNlKHIsZSl7ZS5jb2xvcnNwYWNlQ29udmVyc2lvbiE9PXZvaWQgMCYmci5waXhlbFN0b3JlaSh4YSxlLmNvbG9yc3BhY2VDb252ZXJzaW9uKSxlLnByZW11bHRpcGx5QWxwaGEhPT12b2lkIDAmJnIucGl4ZWxTdG9yZWkoYmEsZS5wcmVtdWx0aXBseUFscGhhKSxlLmZsaXBZIT09dm9pZCAwJiZyLnBpeGVsU3RvcmVpKGdhLGUuZmxpcFkpfWZ1bmN0aW9uIEduKHIpe3IucGl4ZWxTdG9yZWkoZnIsNCksT2UocikmJihyLnBpeGVsU3RvcmVpKE9uLDApLHIucGl4ZWxTdG9yZWkoTW4sMCksci5waXhlbFN0b3JlaShObiwwKSxyLnBpeGVsU3RvcmVpKFVuLDApLHIucGl4ZWxTdG9yZWkoQm4sMCkpfWZ1bmN0aW9uIEZ1KHIsZSx0LG4pe24ubWluTWFnJiYodC5jYWxsKHIsZSx1cixuLm1pbk1hZyksdC5jYWxsKHIsZSxjcixuLm1pbk1hZykpLG4ubWluJiZ0LmNhbGwocixlLHVyLG4ubWluKSxuLm1hZyYmdC5jYWxsKHIsZSxjcixuLm1hZyksbi53cmFwJiYodC5jYWxsKHIsZSxhdCxuLndyYXApLHQuY2FsbChyLGUsdXQsbi53cmFwKSwoZT09PWRlfHwkcyhyLGUpKSYmdC5jYWxsKHIsZSxDbixuLndyYXApKSxuLndyYXBSJiZ0LmNhbGwocixlLENuLG4ud3JhcFIpLG4ud3JhcFMmJnQuY2FsbChyLGUsYXQsbi53cmFwUyksbi53cmFwVCYmdC5jYWxsKHIsZSx1dCxuLndyYXBUKSxuLm1pbkxvZCYmdC5jYWxsKHIsZSxoYSxuLm1pbkxvZCksbi5tYXhMb2QmJnQuY2FsbChyLGUscGEsbi5tYXhMb2QpLG4uYmFzZUxldmVsJiZ0LmNhbGwocixlLHlhLG4uYmFzZUxldmVsKSxuLm1heExldmVsJiZ0LmNhbGwocixlLF9hLG4ubWF4TGV2ZWwpfWZ1bmN0aW9uIEhuKHIsZSx0KXtjb25zdCBuPXQudGFyZ2V0fHxpZTtyLmJpbmRUZXh0dXJlKG4sZSksRnUocixuLHIudGV4UGFyYW1ldGVyaSx0KX1mdW5jdGlvbiBQdShyKXtyZXR1cm4gcj1yfHxuZS50ZXh0dXJlQ29sb3IsTWUocik/cjpuZXcgVWludDhBcnJheShbclswXSoyNTUsclsxXSoyNTUsclsyXSoyNTUsclszXSoyNTVdKX1mdW5jdGlvbiBtcihyLGUsdCxuLGksbyl7dD10fHxuZS50ZXh0dXJlT3B0aW9ucyxvPW98fEk7Y29uc3Qgcz10LnRhcmdldHx8aWU7aWYobj1ufHx0LndpZHRoLGk9aXx8dC5oZWlnaHQsci5iaW5kVGV4dHVyZShzLGUpLFJ1KHIsbixpLG8pKXIuZ2VuZXJhdGVNaXBtYXAocyk7ZWxzZXtjb25zdCBhPVN1KG8pP3VhOmFhO3IudGV4UGFyYW1ldGVyaShzLHVyLGEpLHIudGV4UGFyYW1ldGVyaShzLGNyLGEpLHIudGV4UGFyYW1ldGVyaShzLGF0LHN0KSxyLnRleFBhcmFtZXRlcmkocyx1dCxzdCl9fWZ1bmN0aW9uIGtlKHIpe3JldHVybiByLmF1dG89PT0hMHx8ci5hdXRvPT09dm9pZCAwJiZyLmxldmVsPT09dm9pZCAwfWZ1bmN0aW9uIGhyKHIsZSl7cmV0dXJuIGU9ZXx8e30sZS5jdWJlRmFjZU9yZGVyfHxbYXIsY2EsZmEsbGEsZGEsbWFdfWZ1bmN0aW9uIHByKHIsZSl7Y29uc3Qgbj1ocihyLGUpLm1hcChmdW5jdGlvbihpLG8pe3JldHVybntmYWNlOmksbmR4Om99fSk7cmV0dXJuIG4uc29ydChmdW5jdGlvbihpLG8pe3JldHVybiBpLmZhY2Utby5mYWNlfSksbn1mdW5jdGlvbiBWbihyLGUsdCxuKXtuPW58fG5lLnRleHR1cmVPcHRpb25zO2NvbnN0IGk9bi50YXJnZXR8fGllLG89bi5sZXZlbHx8MDtsZXQgcz10LndpZHRoLGE9dC5oZWlnaHQ7Y29uc3QgdT1uLmludGVybmFsRm9ybWF0fHxuLmZvcm1hdHx8SSxmPUJlKHUpLGM9bi5mb3JtYXR8fGYuZm9ybWF0LGQ9bi50eXBlfHxmLnR5cGU7aWYoU2UocixuKSxyLmJpbmRUZXh0dXJlKGksZSksaT09PW9lKXtjb25zdCBwPXQud2lkdGgseT10LmhlaWdodDtsZXQgbSxfO2lmKHAvNj09PXkpbT15LF89WzAsMCwxLDAsMiwwLDMsMCw0LDAsNSwwXTtlbHNlIGlmKHkvNj09PXApbT1wLF89WzAsMCwwLDEsMCwyLDAsMywwLDQsMCw1XTtlbHNlIGlmKHAvMz09PXkvMiltPXAvMyxfPVswLDAsMSwwLDIsMCwwLDEsMSwxLDIsMV07ZWxzZSBpZihwLzI9PT15LzMpbT1wLzIsXz1bMCwwLDEsMCwwLDEsMSwxLDAsMiwxLDJdO2Vsc2UgdGhyb3ciY2FuJ3QgZmlndXJlIG91dCBjdWJlIG1hcCBmcm9tIGVsZW1lbnQ6ICIrKHQuc3JjP3Quc3JjOnQubm9kZU5hbWUpO2NvbnN0IGI9U24oKTtiPyhiLmNhbnZhcy53aWR0aD1tLGIuY2FudmFzLmhlaWdodD1tLHM9bSxhPW0scHIocixuKS5mb3JFYWNoKGZ1bmN0aW9uKGcpe2NvbnN0IFQ9X1tnLm5keCoyKzBdKm0sRj1fW2cubmR4KjIrMV0qbTtiLmRyYXdJbWFnZSh0LFQsRixtLG0sMCwwLG0sbSksci50ZXhJbWFnZTJEKGcuZmFjZSxvLHUsYyxkLGIuY2FudmFzKX0pLGIuY2FudmFzLndpZHRoPTEsYi5jYW52YXMuaGVpZ2h0PTEpOnR5cGVvZiBjcmVhdGVJbWFnZUJpdG1hcCE9InVuZGVmaW5lZCImJihzPW0sYT1tLHByKHIsbikuZm9yRWFjaChmdW5jdGlvbihnKXtjb25zdCBUPV9bZy5uZHgqMiswXSptLEY9X1tnLm5keCoyKzFdKm07ci50ZXhJbWFnZTJEKGcuZmFjZSxvLHUsbSxtLDAsYyxkLG51bGwpLGNyZWF0ZUltYWdlQml0bWFwKHQsVCxGLG0sbSx7cHJlbXVsdGlwbHlBbHBoYToibm9uZSIsY29sb3JTcGFjZUNvbnZlcnNpb246Im5vbmUifSkudGhlbihmdW5jdGlvbihMKXtTZShyLG4pLHIuYmluZFRleHR1cmUoaSxlKSxyLnRleEltYWdlMkQoZy5mYWNlLG8sdSxjLGQsTCksa2UobikmJm1yKHIsZSxuLHMsYSx1KX0pfSkpfWVsc2UgaWYoaT09PWRlfHxpPT09bWUpe2NvbnN0IHA9TWF0aC5taW4odC53aWR0aCx0LmhlaWdodCkseT1NYXRoLm1heCh0LndpZHRoLHQuaGVpZ2h0KSxtPXkvcDtpZihtJTEhPT0wKXRocm93ImNhbiBub3QgY29tcHV0ZSAzRCBkaW1lbnNpb25zIG9mIGVsZW1lbnQiO2NvbnN0IF89dC53aWR0aD09PXk/MTowLGI9dC5oZWlnaHQ9PT15PzE6MDtyLnBpeGVsU3RvcmVpKGZyLDEpLHIucGl4ZWxTdG9yZWkoT24sdC53aWR0aCksci5waXhlbFN0b3JlaShNbiwwKSxyLnBpeGVsU3RvcmVpKEJuLDApLHIudGV4SW1hZ2UzRChpLG8sdSxwLHAscCwwLGMsZCxudWxsKTtmb3IobGV0IGc9MDtnPG07KytnKXtjb25zdCBUPWcqcCpfLEY9ZypwKmI7ci5waXhlbFN0b3JlaShObixUKSxyLnBpeGVsU3RvcmVpKFVuLEYpLHIudGV4U3ViSW1hZ2UzRChpLG8sMCwwLGcscCxwLDEsYyxkLHQpfUduKHIpfWVsc2Ugci50ZXhJbWFnZTJEKGksbyx1LGMsZCx0KTtrZShuKSYmbXIocixlLG4scyxhLHUpLEhuKHIsZSxuKX1mdW5jdGlvbiBMZSgpe31mdW5jdGlvbiBEdShyKXtpZih0eXBlb2YgZG9jdW1lbnQhPSJ1bmRlZmluZWQiKXtjb25zdCBlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKTtyZXR1cm4gZS5ocmVmPXIsZS5ob3N0bmFtZT09PWxvY2F0aW9uLmhvc3RuYW1lJiZlLnBvcnQ9PT1sb2NhdGlvbi5wb3J0JiZlLnByb3RvY29sPT09bG9jYXRpb24ucHJvdG9jb2x9ZWxzZXtjb25zdCBlPW5ldyBVUkwobG9jYXRpb24uaHJlZikub3JpZ2luO3JldHVybiBuZXcgVVJMKHIsbG9jYXRpb24uaHJlZikub3JpZ2luPT09ZX19ZnVuY3Rpb24gQ3UocixlKXtyZXR1cm4gZT09PXZvaWQgMCYmIUR1KHIpPyJhbm9ueW1vdXMiOmV9ZnVuY3Rpb24gT3UocixlLHQpe3Q9dHx8TGU7bGV0IG47aWYoZT1lIT09dm9pZCAwP2U6bmUuY3Jvc3NPcmlnaW4sZT1DdShyLGUpLHR5cGVvZiBJbWFnZSE9InVuZGVmaW5lZCIpe249bmV3IEltYWdlLGUhPT12b2lkIDAmJihuLmNyb3NzT3JpZ2luPWUpO2NvbnN0IGk9ZnVuY3Rpb24oKXtuLnJlbW92ZUV2ZW50TGlzdGVuZXIoImVycm9yIixvKSxuLnJlbW92ZUV2ZW50TGlzdGVuZXIoImxvYWQiLHMpLG49bnVsbH0sbz1mdW5jdGlvbigpe2NvbnN0IHU9ImNvdWxkbid0IGxvYWQgaW1hZ2U6ICIrcjt4bih1KSx0KHUsbiksaSgpfSxzPWZ1bmN0aW9uKCl7dChudWxsLG4pLGkoKX07cmV0dXJuIG4uYWRkRXZlbnRMaXN0ZW5lcigiZXJyb3IiLG8pLG4uYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIscyksbi5zcmM9cixufWVsc2UgaWYodHlwZW9mIEltYWdlQml0bWFwIT0idW5kZWZpbmVkIil7bGV0IGksbztjb25zdCBzPWZ1bmN0aW9uKCl7dChpLG8pfSxhPXt9O2UmJihhLm1vZGU9ImNvcnMiKSxmZXRjaChyLGEpLnRoZW4oZnVuY3Rpb24odSl7aWYoIXUub2spdGhyb3cgdTtyZXR1cm4gdS5ibG9iKCl9KS50aGVuKGZ1bmN0aW9uKHUpe3JldHVybiBjcmVhdGVJbWFnZUJpdG1hcCh1LHtwcmVtdWx0aXBseUFscGhhOiJub25lIixjb2xvclNwYWNlQ29udmVyc2lvbjoibm9uZSJ9KX0pLnRoZW4oZnVuY3Rpb24odSl7bz11LHNldFRpbWVvdXQocyl9KS5jYXRjaChmdW5jdGlvbih1KXtpPXUsc2V0VGltZW91dChzKX0pLG49bnVsbH1yZXR1cm4gbn1mdW5jdGlvbiBXbihyKXtyZXR1cm4gdHlwZW9mIEltYWdlQml0bWFwIT0idW5kZWZpbmVkIiYmciBpbnN0YW5jZW9mIEltYWdlQml0bWFwfHx0eXBlb2YgSW1hZ2VEYXRhIT0idW5kZWZpbmVkIiYmciBpbnN0YW5jZW9mIEltYWdlRGF0YXx8dHlwZW9mIEhUTUxFbGVtZW50IT0idW5kZWZpbmVkIiYmciBpbnN0YW5jZW9mIEhUTUxFbGVtZW50fWZ1bmN0aW9uIHlyKHIsZSx0KXtyZXR1cm4gV24ocik/KHNldFRpbWVvdXQoZnVuY3Rpb24oKXt0KG51bGwscil9KSxyKTpPdShyLGUsdCl9ZnVuY3Rpb24gX3IocixlLHQpe3Q9dHx8bmUudGV4dHVyZU9wdGlvbnM7Y29uc3Qgbj10LnRhcmdldHx8aWU7aWYoci5iaW5kVGV4dHVyZShuLGUpLHQuY29sb3I9PT0hMSlyZXR1cm47Y29uc3QgaT1QdSh0LmNvbG9yKTtpZihuPT09b2UpZm9yKGxldCBvPTA7bzw2OysrbylyLnRleEltYWdlMkQoYXIrbywwLEksMSwxLDAsSSxTLGkpO2Vsc2Ugbj09PWRlfHxuPT09bWU/ci50ZXhJbWFnZTNEKG4sMCxJLDEsMSwxLDAsSSxTLGkpOnIudGV4SW1hZ2UyRChuLDAsSSwxLDEsMCxJLFMsaSl9ZnVuY3Rpb24gTXUocixlLHQsbil7cmV0dXJuIG49bnx8TGUsdD10fHxuZS50ZXh0dXJlT3B0aW9ucyxfcihyLGUsdCksdD1PYmplY3QuYXNzaWduKHt9LHQpLHlyKHQuc3JjLHQuY3Jvc3NPcmlnaW4sZnVuY3Rpb24obyxzKXtvP24obyxlLHMpOihWbihyLGUscyx0KSxuKG51bGwsZSxzKSl9KX1mdW5jdGlvbiBOdShyLGUsdCxuKXtuPW58fExlO2NvbnN0IGk9dC5zcmM7aWYoaS5sZW5ndGghPT02KXRocm93InRoZXJlIG11c3QgYmUgNiB1cmxzIGZvciBhIGN1YmVtYXAiO2NvbnN0IG89dC5sZXZlbHx8MCxzPXQuaW50ZXJuYWxGb3JtYXR8fHQuZm9ybWF0fHxJLGE9QmUocyksdT10LmZvcm1hdHx8YS5mb3JtYXQsZj10LnR5cGV8fFMsYz10LnRhcmdldHx8aWU7aWYoYyE9PW9lKXRocm93InRhcmdldCBtdXN0IGJlIFRFWFRVUkVfQ1VCRV9NQVAiO19yKHIsZSx0KSx0PU9iamVjdC5hc3NpZ24oe30sdCk7bGV0IGQ9Njtjb25zdCBwPVtdLHk9aHIocix0KTtsZXQgbTtmdW5jdGlvbiBfKGIpe3JldHVybiBmdW5jdGlvbihnLFQpey0tZCxnP3AucHVzaChnKTpULndpZHRoIT09VC5oZWlnaHQ/cC5wdXNoKCJjdWJlbWFwIGZhY2UgaW1nIGlzIG5vdCBhIHNxdWFyZTogIitULnNyYyk6KFNlKHIsdCksci5iaW5kVGV4dHVyZShjLGUpLGQ9PT01P2hyKCkuZm9yRWFjaChmdW5jdGlvbihGKXtyLnRleEltYWdlMkQoRixvLHMsdSxmLFQpfSk6ci50ZXhJbWFnZTJEKGIsbyxzLHUsZixUKSxrZSh0KSYmci5nZW5lcmF0ZU1pcG1hcChjKSksZD09PTAmJm4ocC5sZW5ndGg/cDp2b2lkIDAsZSxtKX19bT1pLm1hcChmdW5jdGlvbihiLGcpe3JldHVybiB5cihiLHQuY3Jvc3NPcmlnaW4sXyh5W2ddKSl9KX1mdW5jdGlvbiBVdShyLGUsdCxuKXtuPW58fExlO2NvbnN0IGk9dC5zcmMsbz10LmludGVybmFsRm9ybWF0fHx0LmZvcm1hdHx8SSxzPUJlKG8pLGE9dC5mb3JtYXR8fHMuZm9ybWF0LHU9dC50eXBlfHxTLGY9dC50YXJnZXR8fG1lO2lmKGYhPT1kZSYmZiE9PW1lKXRocm93InRhcmdldCBtdXN0IGJlIFRFWFRVUkVfM0Qgb3IgVEVYVFVSRV8yRF9BUlJBWSI7X3IocixlLHQpLHQ9T2JqZWN0LmFzc2lnbih7fSx0KTtsZXQgYz1pLmxlbmd0aDtjb25zdCBkPVtdO2xldCBwO2NvbnN0IHk9dC5sZXZlbHx8MDtsZXQgbT10LndpZHRoLF89dC5oZWlnaHQ7Y29uc3QgYj1pLmxlbmd0aDtsZXQgZz0hMDtmdW5jdGlvbiBUKEYpe3JldHVybiBmdW5jdGlvbihMLFYpe2lmKC0tYyxMKWQucHVzaChMKTtlbHNle2lmKFNlKHIsdCksci5iaW5kVGV4dHVyZShmLGUpLGcpe2c9ITEsbT10LndpZHRofHxWLndpZHRoLF89dC5oZWlnaHR8fFYuaGVpZ2h0LHIudGV4SW1hZ2UzRChmLHksbyxtLF8sYiwwLGEsdSxudWxsKTtmb3IobGV0IGVlPTA7ZWU8YjsrK2VlKXIudGV4U3ViSW1hZ2UzRChmLHksMCwwLGVlLG0sXywxLGEsdSxWKX1lbHNle2xldCBlZT1WLHE7KFYud2lkdGghPT1tfHxWLmhlaWdodCE9PV8pJiYocT1TbigpLGVlPXEuY2FudmFzLHEuY2FudmFzLndpZHRoPW0scS5jYW52YXMuaGVpZ2h0PV8scS5kcmF3SW1hZ2UoViwwLDAsbSxfKSksci50ZXhTdWJJbWFnZTNEKGYseSwwLDAsRixtLF8sMSxhLHUsZWUpLHEmJmVlPT09cS5jYW52YXMmJihxLmNhbnZhcy53aWR0aD0wLHEuY2FudmFzLmhlaWdodD0wKX1rZSh0KSYmci5nZW5lcmF0ZU1pcG1hcChmKX1jPT09MCYmbihkLmxlbmd0aD9kOnZvaWQgMCxlLHApfX1wPWkubWFwKGZ1bmN0aW9uKEYsTCl7cmV0dXJuIHlyKEYsdC5jcm9zc09yaWdpbixUKEwpKX0pfWZ1bmN0aW9uIEJ1KHIsZSx0LG4pe249bnx8bmUudGV4dHVyZU9wdGlvbnM7Y29uc3QgaT1uLnRhcmdldHx8aWU7ci5iaW5kVGV4dHVyZShpLGUpO2xldCBvPW4ud2lkdGgscz1uLmhlaWdodCxhPW4uZGVwdGg7Y29uc3QgdT1uLmxldmVsfHwwLGY9bi5pbnRlcm5hbEZvcm1hdHx8bi5mb3JtYXR8fEksYz1CZShmKSxkPW4uZm9ybWF0fHxjLmZvcm1hdCxwPW4udHlwZXx8SXUocix0LGMudHlwZSk7aWYoTWUodCkpdCBpbnN0YW5jZW9mIFVpbnQ4Q2xhbXBlZEFycmF5JiYodD1uZXcgVWludDhBcnJheSh0LmJ1ZmZlcikpO2Vsc2V7Y29uc3QgYj1VcyhwKTt0PW5ldyBiKHQpfWNvbnN0IHk9d3UoZixwKSxtPXQuYnl0ZUxlbmd0aC95O2lmKG0lMSl0aHJvdyJsZW5ndGggd3Jvbmcgc2l6ZSBmb3IgZm9ybWF0OiAiK1JuKHIsZCk7bGV0IF87aWYoaT09PWRlfHxpPT09bWUpaWYoIW8mJiFzJiYhYSl7Y29uc3QgYj1NYXRoLmNicnQobSk7aWYoYiUxIT09MCl0aHJvdyJjYW4ndCBndWVzcyBjdWJlIHNpemUgb2YgYXJyYXkgb2YgbnVtRWxlbWVudHM6ICIrbTtvPWIscz1iLGE9Yn1lbHNlIG8mJighc3x8IWEpPyhfPWh0KHIsaSxzLGEsbS9vKSxzPV8ud2lkdGgsYT1fLmhlaWdodCk6cyYmKCFvfHwhYSk/KF89aHQocixpLG8sYSxtL3MpLG89Xy53aWR0aCxhPV8uaGVpZ2h0KTooXz1odChyLGksbyxzLG0vYSksbz1fLndpZHRoLHM9Xy5oZWlnaHQpO2Vsc2UgXz1odChyLGksbyxzLG0pLG89Xy53aWR0aCxzPV8uaGVpZ2h0O2lmKEduKHIpLHIucGl4ZWxTdG9yZWkoZnIsbi51bnBhY2tBbGlnbm1lbnR8fDEpLFNlKHIsbiksaT09PW9lKXtjb25zdCBiPXkvdC5CWVRFU19QRVJfRUxFTUVOVCxnPW0vNipiO3ByKHIsbikuZm9yRWFjaChUPT57Y29uc3QgRj1nKlQubmR4LEw9dC5zdWJhcnJheShGLEYrZyk7ci50ZXhJbWFnZTJEKFQuZmFjZSx1LGYsbyxzLDAsZCxwLEwpfSl9ZWxzZSBpPT09ZGV8fGk9PT1tZT9yLnRleEltYWdlM0QoaSx1LGYsbyxzLGEsMCxkLHAsdCk6ci50ZXhJbWFnZTJEKGksdSxmLG8scywwLGQscCx0KTtyZXR1cm57d2lkdGg6byxoZWlnaHQ6cyxkZXB0aDphLHR5cGU6cH19ZnVuY3Rpb24ga3UocixlLHQpe2NvbnN0IG49dC50YXJnZXR8fGllO3IuYmluZFRleHR1cmUobixlKTtjb25zdCBpPXQubGV2ZWx8fDAsbz10LmludGVybmFsRm9ybWF0fHx0LmZvcm1hdHx8SSxzPUJlKG8pLGE9dC5mb3JtYXR8fHMuZm9ybWF0LHU9dC50eXBlfHxzLnR5cGU7aWYoU2Uocix0KSxuPT09b2UpZm9yKGxldCBmPTA7Zjw2OysrZilyLnRleEltYWdlMkQoYXIrZixpLG8sdC53aWR0aCx0LmhlaWdodCwwLGEsdSxudWxsKTtlbHNlIG49PT1kZXx8bj09PW1lP3IudGV4SW1hZ2UzRChuLGksbyx0LndpZHRoLHQuaGVpZ2h0LHQuZGVwdGgsMCxhLHUsbnVsbCk6ci50ZXhJbWFnZTJEKG4saSxvLHQud2lkdGgsdC5oZWlnaHQsMCxhLHUsbnVsbCl9ZnVuY3Rpb24gam4ocixlLHQpe3Q9dHx8TGUsZT1lfHxuZS50ZXh0dXJlT3B0aW9ucztjb25zdCBuPXIuY3JlYXRlVGV4dHVyZSgpLGk9ZS50YXJnZXR8fGllO2xldCBvPWUud2lkdGh8fDEscz1lLmhlaWdodHx8MTtjb25zdCBhPWUuaW50ZXJuYWxGb3JtYXR8fEk7ci5iaW5kVGV4dHVyZShpLG4pLGk9PT1vZSYmKHIudGV4UGFyYW1ldGVyaShpLGF0LHN0KSxyLnRleFBhcmFtZXRlcmkoaSx1dCxzdCkpO2xldCB1PWUuc3JjO2lmKHUpaWYodHlwZW9mIHU9PSJmdW5jdGlvbiImJih1PXUocixlKSksdHlwZW9mIHU9PSJzdHJpbmciKU11KHIsbixlLHQpO2Vsc2UgaWYoTWUodSl8fEFycmF5LmlzQXJyYXkodSkmJih0eXBlb2YgdVswXT09Im51bWJlciJ8fEFycmF5LmlzQXJyYXkodVswXSl8fE1lKHVbMF0pKSl7Y29uc3QgZj1CdShyLG4sdSxlKTtvPWYud2lkdGgscz1mLmhlaWdodH1lbHNlIEFycmF5LmlzQXJyYXkodSkmJih0eXBlb2YgdVswXT09InN0cmluZyJ8fFduKHVbMF0pKT9pPT09b2U/TnUocixuLGUsdCk6VXUocixuLGUsdCk6KFZuKHIsbix1LGUpLG89dS53aWR0aCxzPXUuaGVpZ2h0KTtlbHNlIGt1KHIsbixlKTtyZXR1cm4ga2UoZSkmJm1yKHIsbixlLG8scyxhKSxIbihyLG4sZSksbn1jb25zdCBwdD14bjtmdW5jdGlvbiBxbihyKXtyZXR1cm4gdHlwZW9mIGRvY3VtZW50IT0idW5kZWZpbmVkIiYmZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQ/ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQocik6bnVsbH1jb25zdCB5dD0zMzk4NCxfdD0zNDk2MixMdT0zNDk2MywkdT0zNTcxMyx6dT0zNTcxNCxHdT0zNTYzMixIdT0zNTYzMyxWdT0zNTk4MSxYbj0zNTcxOCxXdT0zNTcyMSxqdT0zNTk3MSxxdT0zNTM4MixYdT0zNTM5NixZdT0zNTM5OCxLdT0zNTM5MixKdT0zNTM5NSx4dD01MTI2LFluPTM1NjY0LEtuPTM1NjY1LEpuPTM1NjY2LHhyPTUxMjQsUW49MzU2NjcsWm49MzU2NjgsZWk9MzU2NjksdGk9MzU2NzAscmk9MzU2NzEsbmk9MzU2NzIsaWk9MzU2NzMsb2k9MzU2NzQsc2k9MzU2NzUsYWk9MzU2NzYsUXU9MzU2NzgsWnU9MzU2ODAsZWM9MzU2NzksdGM9MzU2ODIscmM9MzU2ODUsbmM9MzU2ODYsaWM9MzU2ODcsb2M9MzU2ODgsc2M9MzU2ODksYWM9MzU2OTAsdWM9MzYyODksY2M9MzYyOTIsZmM9MzYyOTMsYnI9NTEyNSx1aT0zNjI5NCxjaT0zNjI5NSxmaT0zNjI5NixsYz0zNjI5OCxkYz0zNjI5OSxtYz0zNjMwMCxoYz0zNjMwMyxwYz0zNjMwNix5Yz0zNjMwNyxfYz0zNjMwOCx4Yz0zNjMxMSxidD0zNTUzLGd0PTM0MDY3LGdyPTMyODc5LHZ0PTM1ODY2LHY9e307ZnVuY3Rpb24gbGkocixlKXtyZXR1cm4gdltlXS5iaW5kUG9pbnR9ZnVuY3Rpb24gYmMocixlKXtyZXR1cm4gZnVuY3Rpb24odCl7ci51bmlmb3JtMWYoZSx0KX19ZnVuY3Rpb24gZ2MocixlKXtyZXR1cm4gZnVuY3Rpb24odCl7ci51bmlmb3JtMWZ2KGUsdCl9fWZ1bmN0aW9uIHZjKHIsZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3IudW5pZm9ybTJmdihlLHQpfX1mdW5jdGlvbiBFYyhyLGUpe3JldHVybiBmdW5jdGlvbih0KXtyLnVuaWZvcm0zZnYoZSx0KX19ZnVuY3Rpb24gVGMocixlKXtyZXR1cm4gZnVuY3Rpb24odCl7ci51bmlmb3JtNGZ2KGUsdCl9fWZ1bmN0aW9uIGRpKHIsZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3IudW5pZm9ybTFpKGUsdCl9fWZ1bmN0aW9uIG1pKHIsZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3IudW5pZm9ybTFpdihlLHQpfX1mdW5jdGlvbiBoaShyLGUpe3JldHVybiBmdW5jdGlvbih0KXtyLnVuaWZvcm0yaXYoZSx0KX19ZnVuY3Rpb24gcGkocixlKXtyZXR1cm4gZnVuY3Rpb24odCl7ci51bmlmb3JtM2l2KGUsdCl9fWZ1bmN0aW9uIHlpKHIsZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3IudW5pZm9ybTRpdihlLHQpfX1mdW5jdGlvbiBBYyhyLGUpe3JldHVybiBmdW5jdGlvbih0KXtyLnVuaWZvcm0xdWkoZSx0KX19ZnVuY3Rpb24gd2MocixlKXtyZXR1cm4gZnVuY3Rpb24odCl7ci51bmlmb3JtMXVpdihlLHQpfX1mdW5jdGlvbiBSYyhyLGUpe3JldHVybiBmdW5jdGlvbih0KXtyLnVuaWZvcm0ydWl2KGUsdCl9fWZ1bmN0aW9uIFNjKHIsZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3IudW5pZm9ybTN1aXYoZSx0KX19ZnVuY3Rpb24gSWMocixlKXtyZXR1cm4gZnVuY3Rpb24odCl7ci51bmlmb3JtNHVpdihlLHQpfX1mdW5jdGlvbiBGYyhyLGUpe3JldHVybiBmdW5jdGlvbih0KXtyLnVuaWZvcm1NYXRyaXgyZnYoZSwhMSx0KX19ZnVuY3Rpb24gUGMocixlKXtyZXR1cm4gZnVuY3Rpb24odCl7ci51bmlmb3JtTWF0cml4M2Z2KGUsITEsdCl9fWZ1bmN0aW9uIERjKHIsZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3IudW5pZm9ybU1hdHJpeDRmdihlLCExLHQpfX1mdW5jdGlvbiBDYyhyLGUpe3JldHVybiBmdW5jdGlvbih0KXtyLnVuaWZvcm1NYXRyaXgyeDNmdihlLCExLHQpfX1mdW5jdGlvbiBPYyhyLGUpe3JldHVybiBmdW5jdGlvbih0KXtyLnVuaWZvcm1NYXRyaXgzeDJmdihlLCExLHQpfX1mdW5jdGlvbiBNYyhyLGUpe3JldHVybiBmdW5jdGlvbih0KXtyLnVuaWZvcm1NYXRyaXgyeDRmdihlLCExLHQpfX1mdW5jdGlvbiBOYyhyLGUpe3JldHVybiBmdW5jdGlvbih0KXtyLnVuaWZvcm1NYXRyaXg0eDJmdihlLCExLHQpfX1mdW5jdGlvbiBVYyhyLGUpe3JldHVybiBmdW5jdGlvbih0KXtyLnVuaWZvcm1NYXRyaXgzeDRmdihlLCExLHQpfX1mdW5jdGlvbiBCYyhyLGUpe3JldHVybiBmdW5jdGlvbih0KXtyLnVuaWZvcm1NYXRyaXg0eDNmdihlLCExLHQpfX1mdW5jdGlvbiBCKHIsZSx0LG4pe2NvbnN0IGk9bGkocixlKTtyZXR1cm4gT2Uocik/ZnVuY3Rpb24obyl7bGV0IHMsYTtvcihyLG8pPyhzPW8sYT1udWxsKToocz1vLnRleHR1cmUsYT1vLnNhbXBsZXIpLHIudW5pZm9ybTFpKG4sdCksci5hY3RpdmVUZXh0dXJlKHl0K3QpLHIuYmluZFRleHR1cmUoaSxzKSxyLmJpbmRTYW1wbGVyKHQsYSl9OmZ1bmN0aW9uKG8pe3IudW5pZm9ybTFpKG4sdCksci5hY3RpdmVUZXh0dXJlKHl0K3QpLHIuYmluZFRleHR1cmUoaSxvKX19ZnVuY3Rpb24gayhyLGUsdCxuLGkpe2NvbnN0IG89bGkocixlKSxzPW5ldyBJbnQzMkFycmF5KGkpO2ZvcihsZXQgYT0wO2E8aTsrK2Epc1thXT10K2E7cmV0dXJuIE9lKHIpP2Z1bmN0aW9uKGEpe3IudW5pZm9ybTFpdihuLHMpLGEuZm9yRWFjaChmdW5jdGlvbih1LGYpe3IuYWN0aXZlVGV4dHVyZSh5dCtzW2ZdKTtsZXQgYyxkO29yKHIsdSk/KGM9dSxkPW51bGwpOihjPXUudGV4dHVyZSxkPXUuc2FtcGxlciksci5iaW5kU2FtcGxlcih0LGQpLHIuYmluZFRleHR1cmUobyxjKX0pfTpmdW5jdGlvbihhKXtyLnVuaWZvcm0xaXYobixzKSxhLmZvckVhY2goZnVuY3Rpb24odSxmKXtyLmFjdGl2ZVRleHR1cmUoeXQrc1tmXSksci5iaW5kVGV4dHVyZShvLHUpfSl9fXZbeHRdPXtUeXBlOkZsb2F0MzJBcnJheSxzaXplOjQsc2V0dGVyOmJjLGFycmF5U2V0dGVyOmdjfSx2W1luXT17VHlwZTpGbG9hdDMyQXJyYXksc2l6ZTo4LHNldHRlcjp2Yyxjb2xzOjJ9LHZbS25dPXtUeXBlOkZsb2F0MzJBcnJheSxzaXplOjEyLHNldHRlcjpFYyxjb2xzOjN9LHZbSm5dPXtUeXBlOkZsb2F0MzJBcnJheSxzaXplOjE2LHNldHRlcjpUYyxjb2xzOjR9LHZbeHJdPXtUeXBlOkludDMyQXJyYXksc2l6ZTo0LHNldHRlcjpkaSxhcnJheVNldHRlcjptaX0sdltRbl09e1R5cGU6SW50MzJBcnJheSxzaXplOjgsc2V0dGVyOmhpLGNvbHM6Mn0sdltabl09e1R5cGU6SW50MzJBcnJheSxzaXplOjEyLHNldHRlcjpwaSxjb2xzOjN9LHZbZWldPXtUeXBlOkludDMyQXJyYXksc2l6ZToxNixzZXR0ZXI6eWksY29sczo0fSx2W2JyXT17VHlwZTpVaW50MzJBcnJheSxzaXplOjQsc2V0dGVyOkFjLGFycmF5U2V0dGVyOndjfSx2W3VpXT17VHlwZTpVaW50MzJBcnJheSxzaXplOjgsc2V0dGVyOlJjLGNvbHM6Mn0sdltjaV09e1R5cGU6VWludDMyQXJyYXksc2l6ZToxMixzZXR0ZXI6U2MsY29sczozfSx2W2ZpXT17VHlwZTpVaW50MzJBcnJheSxzaXplOjE2LHNldHRlcjpJYyxjb2xzOjR9LHZbdGldPXtUeXBlOlVpbnQzMkFycmF5LHNpemU6NCxzZXR0ZXI6ZGksYXJyYXlTZXR0ZXI6bWl9LHZbcmldPXtUeXBlOlVpbnQzMkFycmF5LHNpemU6OCxzZXR0ZXI6aGksY29sczoyfSx2W25pXT17VHlwZTpVaW50MzJBcnJheSxzaXplOjEyLHNldHRlcjpwaSxjb2xzOjN9LHZbaWldPXtUeXBlOlVpbnQzMkFycmF5LHNpemU6MTYsc2V0dGVyOnlpLGNvbHM6NH0sdltvaV09e1R5cGU6RmxvYXQzMkFycmF5LHNpemU6MzIsc2V0dGVyOkZjLHJvd3M6Mixjb2xzOjJ9LHZbc2ldPXtUeXBlOkZsb2F0MzJBcnJheSxzaXplOjQ4LHNldHRlcjpQYyxyb3dzOjMsY29sczozfSx2W2FpXT17VHlwZTpGbG9hdDMyQXJyYXksc2l6ZTo2NCxzZXR0ZXI6RGMscm93czo0LGNvbHM6NH0sdltyY109e1R5cGU6RmxvYXQzMkFycmF5LHNpemU6MzIsc2V0dGVyOkNjLHJvd3M6Mixjb2xzOjN9LHZbbmNdPXtUeXBlOkZsb2F0MzJBcnJheSxzaXplOjMyLHNldHRlcjpNYyxyb3dzOjIsY29sczo0fSx2W2ljXT17VHlwZTpGbG9hdDMyQXJyYXksc2l6ZTo0OCxzZXR0ZXI6T2Mscm93czozLGNvbHM6Mn0sdltvY109e1R5cGU6RmxvYXQzMkFycmF5LHNpemU6NDgsc2V0dGVyOlVjLHJvd3M6Myxjb2xzOjR9LHZbc2NdPXtUeXBlOkZsb2F0MzJBcnJheSxzaXplOjY0LHNldHRlcjpOYyxyb3dzOjQsY29sczoyfSx2W2FjXT17VHlwZTpGbG9hdDMyQXJyYXksc2l6ZTo2NCxzZXR0ZXI6QmMscm93czo0LGNvbHM6M30sdltRdV09e1R5cGU6bnVsbCxzaXplOjAsc2V0dGVyOkIsYXJyYXlTZXR0ZXI6ayxiaW5kUG9pbnQ6YnR9LHZbWnVdPXtUeXBlOm51bGwsc2l6ZTowLHNldHRlcjpCLGFycmF5U2V0dGVyOmssYmluZFBvaW50Omd0fSx2W2VjXT17VHlwZTpudWxsLHNpemU6MCxzZXR0ZXI6QixhcnJheVNldHRlcjprLGJpbmRQb2ludDpncn0sdlt0Y109e1R5cGU6bnVsbCxzaXplOjAsc2V0dGVyOkIsYXJyYXlTZXR0ZXI6ayxiaW5kUG9pbnQ6YnR9LHZbdWNdPXtUeXBlOm51bGwsc2l6ZTowLHNldHRlcjpCLGFycmF5U2V0dGVyOmssYmluZFBvaW50OnZ0fSx2W2NjXT17VHlwZTpudWxsLHNpemU6MCxzZXR0ZXI6QixhcnJheVNldHRlcjprLGJpbmRQb2ludDp2dH0sdltmY109e1R5cGU6bnVsbCxzaXplOjAsc2V0dGVyOkIsYXJyYXlTZXR0ZXI6ayxiaW5kUG9pbnQ6Z3R9LHZbbGNdPXtUeXBlOm51bGwsc2l6ZTowLHNldHRlcjpCLGFycmF5U2V0dGVyOmssYmluZFBvaW50OmJ0fSx2W2RjXT17VHlwZTpudWxsLHNpemU6MCxzZXR0ZXI6QixhcnJheVNldHRlcjprLGJpbmRQb2ludDpncn0sdlttY109e1R5cGU6bnVsbCxzaXplOjAsc2V0dGVyOkIsYXJyYXlTZXR0ZXI6ayxiaW5kUG9pbnQ6Z3R9LHZbaGNdPXtUeXBlOm51bGwsc2l6ZTowLHNldHRlcjpCLGFycmF5U2V0dGVyOmssYmluZFBvaW50OnZ0fSx2W3BjXT17VHlwZTpudWxsLHNpemU6MCxzZXR0ZXI6QixhcnJheVNldHRlcjprLGJpbmRQb2ludDpidH0sdlt5Y109e1R5cGU6bnVsbCxzaXplOjAsc2V0dGVyOkIsYXJyYXlTZXR0ZXI6ayxiaW5kUG9pbnQ6Z3J9LHZbX2NdPXtUeXBlOm51bGwsc2l6ZTowLHNldHRlcjpCLGFycmF5U2V0dGVyOmssYmluZFBvaW50Omd0fSx2W3hjXT17VHlwZTpudWxsLHNpemU6MCxzZXR0ZXI6QixhcnJheVNldHRlcjprLGJpbmRQb2ludDp2dH07ZnVuY3Rpb24gRXQocixlKXtyZXR1cm4gZnVuY3Rpb24odCl7aWYodC52YWx1ZSlzd2l0Y2goci5kaXNhYmxlVmVydGV4QXR0cmliQXJyYXkoZSksdC52YWx1ZS5sZW5ndGgpe2Nhc2UgNDpyLnZlcnRleEF0dHJpYjRmdihlLHQudmFsdWUpO2JyZWFrO2Nhc2UgMzpyLnZlcnRleEF0dHJpYjNmdihlLHQudmFsdWUpO2JyZWFrO2Nhc2UgMjpyLnZlcnRleEF0dHJpYjJmdihlLHQudmFsdWUpO2JyZWFrO2Nhc2UgMTpyLnZlcnRleEF0dHJpYjFmdihlLHQudmFsdWUpO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJ0aGUgbGVuZ3RoIG9mIGEgZmxvYXQgY29uc3RhbnQgdmFsdWUgbXVzdCBiZSBiZXR3ZWVuIDEgYW5kIDQhIil9ZWxzZSByLmJpbmRCdWZmZXIoX3QsdC5idWZmZXIpLHIuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoZSksci52ZXJ0ZXhBdHRyaWJQb2ludGVyKGUsdC5udW1Db21wb25lbnRzfHx0LnNpemUsdC50eXBlfHx4dCx0Lm5vcm1hbGl6ZXx8ITEsdC5zdHJpZGV8fDAsdC5vZmZzZXR8fDApLHIudmVydGV4QXR0cmliRGl2aXNvciYmci52ZXJ0ZXhBdHRyaWJEaXZpc29yKGUsdC5kaXZpc29yfHwwKX19ZnVuY3Rpb24gYWUocixlKXtyZXR1cm4gZnVuY3Rpb24odCl7aWYodC52YWx1ZSlpZihyLmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShlKSx0LnZhbHVlLmxlbmd0aD09PTQpci52ZXJ0ZXhBdHRyaWI0aXYoZSx0LnZhbHVlKTtlbHNlIHRocm93IG5ldyBFcnJvcigiVGhlIGxlbmd0aCBvZiBhbiBpbnRlZ2VyIGNvbnN0YW50IHZhbHVlIG11c3QgYmUgNCEiKTtlbHNlIHIuYmluZEJ1ZmZlcihfdCx0LmJ1ZmZlciksci5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShlKSxyLnZlcnRleEF0dHJpYklQb2ludGVyKGUsdC5udW1Db21wb25lbnRzfHx0LnNpemUsdC50eXBlfHx4cix0LnN0cmlkZXx8MCx0Lm9mZnNldHx8MCksci52ZXJ0ZXhBdHRyaWJEaXZpc29yJiZyLnZlcnRleEF0dHJpYkRpdmlzb3IoZSx0LmRpdmlzb3J8fDApfX1mdW5jdGlvbiBUdChyLGUpe3JldHVybiBmdW5jdGlvbih0KXtpZih0LnZhbHVlKWlmKHIuZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KGUpLHQudmFsdWUubGVuZ3RoPT09NClyLnZlcnRleEF0dHJpYjR1aXYoZSx0LnZhbHVlKTtlbHNlIHRocm93IG5ldyBFcnJvcigiVGhlIGxlbmd0aCBvZiBhbiB1bnNpZ25lZCBpbnRlZ2VyIGNvbnN0YW50IHZhbHVlIG11c3QgYmUgNCEiKTtlbHNlIHIuYmluZEJ1ZmZlcihfdCx0LmJ1ZmZlciksci5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShlKSxyLnZlcnRleEF0dHJpYklQb2ludGVyKGUsdC5udW1Db21wb25lbnRzfHx0LnNpemUsdC50eXBlfHxicix0LnN0cmlkZXx8MCx0Lm9mZnNldHx8MCksci52ZXJ0ZXhBdHRyaWJEaXZpc29yJiZyLnZlcnRleEF0dHJpYkRpdmlzb3IoZSx0LmRpdmlzb3J8fDApfX1mdW5jdGlvbiB2cihyLGUsdCl7Y29uc3Qgbj10LnNpemUsaT10LmNvdW50O3JldHVybiBmdW5jdGlvbihvKXtyLmJpbmRCdWZmZXIoX3Qsby5idWZmZXIpO2NvbnN0IHM9by5zaXplfHxvLm51bUNvbXBvbmVudHN8fG4sYT1zL2ksdT1vLnR5cGV8fHh0LGM9dlt1XS5zaXplKnMsZD1vLm5vcm1hbGl6ZXx8ITEscD1vLm9mZnNldHx8MCx5PWMvaTtmb3IobGV0IG09MDttPGk7KyttKXIuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoZSttKSxyLnZlcnRleEF0dHJpYlBvaW50ZXIoZSttLGEsdSxkLGMscCt5Km0pLHIudmVydGV4QXR0cmliRGl2aXNvciYmci52ZXJ0ZXhBdHRyaWJEaXZpc29yKGUrbSxvLmRpdmlzb3J8fDApfX1jb25zdCBQPXt9O1BbeHRdPXtzaXplOjQsc2V0dGVyOkV0fSxQW1luXT17c2l6ZTo4LHNldHRlcjpFdH0sUFtLbl09e3NpemU6MTIsc2V0dGVyOkV0fSxQW0puXT17c2l6ZToxNixzZXR0ZXI6RXR9LFBbeHJdPXtzaXplOjQsc2V0dGVyOmFlfSxQW1FuXT17c2l6ZTo4LHNldHRlcjphZX0sUFtabl09e3NpemU6MTIsc2V0dGVyOmFlfSxQW2VpXT17c2l6ZToxNixzZXR0ZXI6YWV9LFBbYnJdPXtzaXplOjQsc2V0dGVyOlR0fSxQW3VpXT17c2l6ZTo4LHNldHRlcjpUdH0sUFtjaV09e3NpemU6MTIsc2V0dGVyOlR0fSxQW2ZpXT17c2l6ZToxNixzZXR0ZXI6VHR9LFBbdGldPXtzaXplOjQsc2V0dGVyOmFlfSxQW3JpXT17c2l6ZTo4LHNldHRlcjphZX0sUFtuaV09e3NpemU6MTIsc2V0dGVyOmFlfSxQW2lpXT17c2l6ZToxNixzZXR0ZXI6YWV9LFBbb2ldPXtzaXplOjQsc2V0dGVyOnZyLGNvdW50OjJ9LFBbc2ldPXtzaXplOjksc2V0dGVyOnZyLGNvdW50OjN9LFBbYWldPXtzaXplOjE2LHNldHRlcjp2cixjb3VudDo0fTtjb25zdCBrYz0vRVJST1I6XHMqXGQrOihcZCspL2dpO2Z1bmN0aW9uIExjKHIsZT0iIix0PTApe2NvbnN0IG49Wy4uLmUubWF0Y2hBbGwoa2MpXSxpPW5ldyBNYXAobi5tYXAoKG8scyk9Pntjb25zdCBhPXBhcnNlSW50KG9bMV0pLHU9bltzKzFdLGY9dT91LmluZGV4OmUubGVuZ3RoLGM9ZS5zdWJzdHJpbmcoby5pbmRleCxmKTtyZXR1cm5bYS0xLGNdfSkpO3JldHVybiByLnNwbGl0KGAKYCkubWFwKChvLHMpPT57Y29uc3QgYT1pLmdldChzKTtyZXR1cm5gJHtzKzErdH06ICR7b30ke2E/YAoKXl5eICR7YX1gOiIifWB9KS5qb2luKGAKYCl9Y29uc3QgX2k9L15bIFx0XSpcbi87ZnVuY3Rpb24geGkocil7bGV0IGU9MDtyZXR1cm4gX2kudGVzdChyKSYmKGU9MSxyPXIucmVwbGFjZShfaSwiIikpLHtsaW5lT2Zmc2V0OmUsc2hhZGVyU291cmNlOnJ9fWZ1bmN0aW9uIGJpKHIsZSl7cmV0dXJuIHIuZXJyb3JDYWxsYmFjayhlKSxyLmNhbGxiYWNrJiZzZXRUaW1lb3V0KCgpPT57ci5jYWxsYmFjayhgJHtlfQoke3IuZXJyb3JzLmpvaW4oYApgKX1gKX0pLG51bGx9ZnVuY3Rpb24gZ2kocixlLHQsbil7Y29uc3QgaT1yLmNyZWF0ZVNoYWRlcih0KTtyZXR1cm4gci5zaGFkZXJTb3VyY2UoaSx4aShlKS5zaGFkZXJTb3VyY2UpLHIuY29tcGlsZVNoYWRlcihpKSwhbi5jYWxsYmFjayYmISRjKHIsdCxpLG4uZXJyb3JDYWxsYmFjayk/KHIuZGVsZXRlU2hhZGVyKGkpLG51bGwpOml9ZnVuY3Rpb24gJGMocixlLHQsbil7bj1ufHxwdDtjb25zdCBpPXIuZ2V0U2hhZGVyUGFyYW1ldGVyKHQsJHUpO2lmKCFpKXtjb25zdCBvPXIuZ2V0U2hhZGVySW5mb0xvZyh0KSx7bGluZU9mZnNldDpzLHNoYWRlclNvdXJjZTphfT14aShyLmdldFNoYWRlclNvdXJjZSh0KSk7bihgJHtMYyhhLG8scyl9CkVycm9yIGNvbXBpbGluZyAke1JuKHIsZSl9OiAke299YCl9cmV0dXJuIGl9ZnVuY3Rpb24gRXIocixlLHQpe2xldCBuLGksbztpZih0eXBlb2YgZT09ImZ1bmN0aW9uIiYmKHQ9ZSxlPXZvaWQgMCksdHlwZW9mIHI9PSJmdW5jdGlvbiIpdD1yLHI9dm9pZCAwO2Vsc2UgaWYociYmIUFycmF5LmlzQXJyYXkocikpe2lmKHIuZXJyb3JDYWxsYmFjayYmci5lcnJvcnMpcmV0dXJuIHI7Y29uc3QgZj1yO3Q9Zi5lcnJvckNhbGxiYWNrLHI9Zi5hdHRyaWJMb2NhdGlvbnMsbj1mLnRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZ3MsaT1mLnRyYW5zZm9ybUZlZWRiYWNrTW9kZSxvPWYuY2FsbGJhY2t9Y29uc3Qgcz10fHxwdCxhPVtdLHU9e2Vycm9yQ2FsbGJhY2soZiwuLi5jKXthLnB1c2goZikscyhmLC4uLmMpfSx0cmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdzOm4sdHJhbnNmb3JtRmVlZGJhY2tNb2RlOmksY2FsbGJhY2s6byxlcnJvcnM6YX07aWYocil7bGV0IGY9e307QXJyYXkuaXNBcnJheShyKT9yLmZvckVhY2goZnVuY3Rpb24oYyxkKXtmW2NdPWU/ZVtkXTpkfSk6Zj1yLHUuYXR0cmliTG9jYXRpb25zPWZ9cmV0dXJuIHV9Y29uc3Qgdmk9WyJWRVJURVhfU0hBREVSIiwiRlJBR01FTlRfU0hBREVSIl07ZnVuY3Rpb24gemMocixlKXtpZihlLmluZGV4T2YoImZyYWciKT49MClyZXR1cm4gR3U7aWYoZS5pbmRleE9mKCJ2ZXJ0Iik+PTApcmV0dXJuIEh1fWZ1bmN0aW9uIEVpKHIsZSl7ZS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3IuZGVsZXRlU2hhZGVyKHQpfSl9Y29uc3QgR2M9KHI9MCk9Pm5ldyBQcm9taXNlKGU9PnNldFRpbWVvdXQoZSxyKSk7ZnVuY3Rpb24gSGMocixlLHQsbixpKXtjb25zdCBvPUVyKHQsbixpKSxzPVtdLGE9W107Zm9yKGxldCBjPTA7YzxlLmxlbmd0aDsrK2Mpe2xldCBkPWVbY107aWYodHlwZW9mIGQ9PSJzdHJpbmciKXtjb25zdCBwPXFuKGQpLHk9cD9wLnRleHQ6ZDtsZXQgbT1yW3ZpW2NdXTtwJiZwLnR5cGUmJihtPXpjKHIscC50eXBlKXx8bSksZD1naShyLHksbSxvKSxhLnB1c2goZCl9THMocixkKSYmcy5wdXNoKGQpfWlmKHMubGVuZ3RoIT09ZS5sZW5ndGgpcmV0dXJuIEVpKHIsYSksYmkobywibm90IGVub3VnaCBzaGFkZXJzIGZvciBwcm9ncmFtIik7Y29uc3QgdT1yLmNyZWF0ZVByb2dyYW0oKTtzLmZvckVhY2goZnVuY3Rpb24oYyl7ci5hdHRhY2hTaGFkZXIodSxjKX0pLG8uYXR0cmliTG9jYXRpb25zJiZPYmplY3Qua2V5cyhvLmF0dHJpYkxvY2F0aW9ucykuZm9yRWFjaChmdW5jdGlvbihjKXtyLmJpbmRBdHRyaWJMb2NhdGlvbih1LG8uYXR0cmliTG9jYXRpb25zW2NdLGMpfSk7bGV0IGY9by50cmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdzO3JldHVybiBmJiYoZi5hdHRyaWJzJiYoZj1mLmF0dHJpYnMpLEFycmF5LmlzQXJyYXkoZil8fChmPU9iamVjdC5rZXlzKGYpKSxyLnRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZ3ModSxmLG8udHJhbnNmb3JtRmVlZGJhY2tNb2RlfHxWdSkpLHIubGlua1Byb2dyYW0odSksby5jYWxsYmFjaz8oVmMocix1LG8pLG51bGwpOlRpKHIsdSxvLmVycm9yQ2FsbGJhY2spP3U6KHIuZGVsZXRlUHJvZ3JhbSh1KSxFaShyLGEpLG51bGwpfWFzeW5jIGZ1bmN0aW9uIFZjKHIsZSx0KXtjb25zdCBuPXIuZ2V0RXh0ZW5zaW9uKCJLSFJfcGFyYWxsZWxfc2hhZGVyX2NvbXBpbGUiKSxpPW4/KHUsZik9PnUuZ2V0UHJvZ3JhbVBhcmFtZXRlcihmLG4uQ09NUExFVElPTl9TVEFUVVNfS0hSKTooKT0+ITA7bGV0IG89MDtkbyBhd2FpdCBHYyhvKSxvPTFlMy82MDt3aGlsZSghaShyLGUpKTtjb25zdCBzPVRpKHIsZSx0LmVycm9yQ2FsbGJhY2spLGE9cz92b2lkIDA6dC5lcnJvcnMuam9pbihgCmApO3N8fCgodC5lcnJvckNhbGxiYWNrfHxwdCkoYSksci5kZWxldGVQcm9ncmFtKGUpLGU9bnVsbCksdC5jYWxsYmFjayhhLGUpfWZ1bmN0aW9uIFRpKHIsZSx0KXt0PXR8fHB0O2NvbnN0IG49ci5nZXRQcm9ncmFtUGFyYW1ldGVyKGUsenUpO2lmKCFuKXtjb25zdCBpPXIuZ2V0UHJvZ3JhbUluZm9Mb2coZSk7dChgRXJyb3IgaW4gcHJvZ3JhbSBsaW5raW5nOiAke2l9YCl9cmV0dXJuIG59ZnVuY3Rpb24gV2MocixlLHQsbixpKXtjb25zdCBvPUVyKHQsbixpKSxzPVtdO2ZvcihsZXQgYT0wO2E8ZS5sZW5ndGg7KythKXtjb25zdCB1PWdpKHIsZVthXSxyW3ZpW2FdXSxvKTtpZighby5jYWxsYmFjayYmIXUpcmV0dXJuIG51bGw7cy5wdXNoKHUpfXJldHVybiBIYyhyLHMsbyl9ZnVuY3Rpb24gQWkocil7Y29uc3QgZT1yLm5hbWU7cmV0dXJuIGUuc3RhcnRzV2l0aCgiZ2xfIil8fGUuc3RhcnRzV2l0aCgid2ViZ2xfIil9Y29uc3QgamM9LyhcLnxcW3xdfFx3KykvZyxxYz1yPT5yPj0iMCImJnI8PSI5IjtmdW5jdGlvbiBYYyhyLGUsdCxuKXtjb25zdCBpPXIuc3BsaXQoamMpLmZpbHRlcihhPT5hIT09IiIpO2xldCBvPTAscz0iIjtmb3IoOzspe2NvbnN0IGE9aVtvKytdO3MrPWE7Y29uc3QgdT1xYyhhWzBdKSxmPXU/cGFyc2VJbnQoYSk6YTtpZih1JiYocys9aVtvKytdKSxvPT09aS5sZW5ndGgpe3RbZl09ZTticmVha31lbHNle2NvbnN0IGQ9aVtvKytdLHA9ZD09PSJbIix5PXRbZl18fChwP1tdOnt9KTt0W2ZdPXksdD15LG5bc109bltzXXx8ZnVuY3Rpb24obSl7cmV0dXJuIGZ1bmN0aW9uKF8pe3dpKG0sXyl9fSh5KSxzKz1kfX19ZnVuY3Rpb24gWWMocixlKXtsZXQgdD0wO2Z1bmN0aW9uIG4oYSx1LGYpe2NvbnN0IGM9dS5uYW1lLmVuZHNXaXRoKCJbMF0iKSxkPXUudHlwZSxwPXZbZF07aWYoIXApdGhyb3cgbmV3IEVycm9yKGB1bmtub3duIHR5cGU6IDB4JHtkLnRvU3RyaW5nKDE2KX1gKTtsZXQgeTtpZihwLmJpbmRQb2ludCl7Y29uc3QgbT10O3QrPXUuc2l6ZSxjP3k9cC5hcnJheVNldHRlcihyLGQsbSxmLHUuc2l6ZSk6eT1wLnNldHRlcihyLGQsbSxmLHUuc2l6ZSl9ZWxzZSBwLmFycmF5U2V0dGVyJiZjP3k9cC5hcnJheVNldHRlcihyLGYpOnk9cC5zZXR0ZXIocixmKTtyZXR1cm4geS5sb2NhdGlvbj1mLHl9Y29uc3QgaT17fSxvPXt9LHM9ci5nZXRQcm9ncmFtUGFyYW1ldGVyKGUsWG4pO2ZvcihsZXQgYT0wO2E8czsrK2Epe2NvbnN0IHU9ci5nZXRBY3RpdmVVbmlmb3JtKGUsYSk7aWYoQWkodSkpY29udGludWU7bGV0IGY9dS5uYW1lO2YuZW5kc1dpdGgoIlswXSIpJiYoZj1mLnN1YnN0cigwLGYubGVuZ3RoLTMpKTtjb25zdCBjPXIuZ2V0VW5pZm9ybUxvY2F0aW9uKGUsdS5uYW1lKTtpZihjKXtjb25zdCBkPW4oZSx1LGMpO2lbZl09ZCxYYyhmLGQsbyxpKX19cmV0dXJuIGl9ZnVuY3Rpb24gS2MocixlKXtjb25zdCB0PXt9LG49ci5nZXRQcm9ncmFtUGFyYW1ldGVyKGUsanUpO2ZvcihsZXQgaT0wO2k8bjsrK2kpe2NvbnN0IG89ci5nZXRUcmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmcoZSxpKTt0W28ubmFtZV09e2luZGV4OmksdHlwZTpvLnR5cGUsc2l6ZTpvLnNpemV9fXJldHVybiB0fWZ1bmN0aW9uIEpjKHIsZSl7Y29uc3QgdD1yLmdldFByb2dyYW1QYXJhbWV0ZXIoZSxYbiksbj1bXSxpPVtdO2ZvcihsZXQgYT0wO2E8dDsrK2Epe2kucHVzaChhKSxuLnB1c2goe30pO2NvbnN0IHU9ci5nZXRBY3RpdmVVbmlmb3JtKGUsYSk7blthXS5uYW1lPXUubmFtZX1bWyJVTklGT1JNX1RZUEUiLCJ0eXBlIl0sWyJVTklGT1JNX1NJWkUiLCJzaXplIl0sWyJVTklGT1JNX0JMT0NLX0lOREVYIiwiYmxvY2tOZHgiXSxbIlVOSUZPUk1fT0ZGU0VUIiwib2Zmc2V0Il1dLmZvckVhY2goZnVuY3Rpb24oYSl7Y29uc3QgdT1hWzBdLGY9YVsxXTtyLmdldEFjdGl2ZVVuaWZvcm1zKGUsaSxyW3VdKS5mb3JFYWNoKGZ1bmN0aW9uKGMsZCl7bltkXVtmXT1jfSl9KTtjb25zdCBvPXt9LHM9ci5nZXRQcm9ncmFtUGFyYW1ldGVyKGUscXUpO2ZvcihsZXQgYT0wO2E8czsrK2Epe2NvbnN0IHU9ci5nZXRBY3RpdmVVbmlmb3JtQmxvY2tOYW1lKGUsYSksZj17aW5kZXg6ci5nZXRVbmlmb3JtQmxvY2tJbmRleChlLHUpLHVzZWRCeVZlcnRleFNoYWRlcjpyLmdldEFjdGl2ZVVuaWZvcm1CbG9ja1BhcmFtZXRlcihlLGEsWHUpLHVzZWRCeUZyYWdtZW50U2hhZGVyOnIuZ2V0QWN0aXZlVW5pZm9ybUJsb2NrUGFyYW1ldGVyKGUsYSxZdSksc2l6ZTpyLmdldEFjdGl2ZVVuaWZvcm1CbG9ja1BhcmFtZXRlcihlLGEsS3UpLHVuaWZvcm1JbmRpY2VzOnIuZ2V0QWN0aXZlVW5pZm9ybUJsb2NrUGFyYW1ldGVyKGUsYSxKdSl9O2YudXNlZD1mLnVzZWRCeVZlcnRleFNoYWRlcnx8Zi51c2VkQnlGcmFnbWVudFNoYWRlcixvW3VdPWZ9cmV0dXJue2Jsb2NrU3BlY3M6byx1bmlmb3JtRGF0YTpufX1mdW5jdGlvbiB3aShyLGUpe2Zvcihjb25zdCB0IGluIGUpe2NvbnN0IG49clt0XTt0eXBlb2Ygbj09ImZ1bmN0aW9uIj9uKGVbdF0pOndpKHJbdF0sZVt0XSl9fWZ1bmN0aW9uIFJpKHIsLi4uZSl7Y29uc3QgdD1yLnVuaWZvcm1TZXR0ZXJzfHxyLG49ZS5sZW5ndGg7Zm9yKGxldCBpPTA7aTxuOysraSl7Y29uc3Qgbz1lW2ldO2lmKEFycmF5LmlzQXJyYXkobykpe2NvbnN0IHM9by5sZW5ndGg7Zm9yKGxldCBhPTA7YTxzOysrYSlSaSh0LG9bYV0pfWVsc2UgZm9yKGNvbnN0IHMgaW4gbyl7Y29uc3QgYT10W3NdO2EmJmEob1tzXSl9fX1mdW5jdGlvbiBRYyhyLGUpe2NvbnN0IHQ9e30sbj1yLmdldFByb2dyYW1QYXJhbWV0ZXIoZSxXdSk7Zm9yKGxldCBpPTA7aTxuOysraSl7Y29uc3Qgbz1yLmdldEFjdGl2ZUF0dHJpYihlLGkpO2lmKEFpKG8pKWNvbnRpbnVlO2NvbnN0IHM9ci5nZXRBdHRyaWJMb2NhdGlvbihlLG8ubmFtZSksYT1QW28udHlwZV0sdT1hLnNldHRlcihyLHMsYSk7dS5sb2NhdGlvbj1zLHRbby5uYW1lXT11fXJldHVybiB0fWZ1bmN0aW9uIFpjKHIsZSl7Zm9yKGNvbnN0IHQgaW4gZSl7Y29uc3Qgbj1yW3RdO24mJm4oZVt0XSl9fWZ1bmN0aW9uIGVmKHIsZSx0KXt0LnZlcnRleEFycmF5T2JqZWN0P3IuYmluZFZlcnRleEFycmF5KHQudmVydGV4QXJyYXlPYmplY3QpOihaYyhlLmF0dHJpYlNldHRlcnN8fGUsdC5hdHRyaWJzKSx0LmluZGljZXMmJnIuYmluZEJ1ZmZlcihMdSx0LmluZGljZXMpKX1mdW5jdGlvbiBTaShyLGUpe2NvbnN0IHQ9WWMocixlKSxuPVFjKHIsZSksaT17cHJvZ3JhbTplLHVuaWZvcm1TZXR0ZXJzOnQsYXR0cmliU2V0dGVyczpufTtyZXR1cm4gT2UocikmJihpLnVuaWZvcm1CbG9ja1NwZWM9SmMocixlKSxpLnRyYW5zZm9ybUZlZWRiYWNrSW5mbz1LYyhyLGUpKSxpfWNvbnN0IHRmPS9cc3x7fH18Oy87ZnVuY3Rpb24gcmYocixlLHQsbixpKXtjb25zdCBvPUVyKHQsbixpKSxzPVtdO2lmKGU9ZS5tYXAoZnVuY3Rpb24oZil7aWYoIXRmLnRlc3QoZikpe2NvbnN0IGM9cW4oZik7aWYoYylmPWMudGV4dDtlbHNle2NvbnN0IGQ9YG5vIGVsZW1lbnQgd2l0aCBpZDogJHtmfWA7by5lcnJvckNhbGxiYWNrKGQpLHMucHVzaChkKX19cmV0dXJuIGZ9KSxzLmxlbmd0aClyZXR1cm4gYmkobywiIik7Y29uc3QgYT1vLmNhbGxiYWNrO2EmJihvLmNhbGxiYWNrPShmLGMpPT57bGV0IGQ7Znx8KGQ9U2kocixjKSksYShmLGQpfSk7Y29uc3QgdT1XYyhyLGUsbyk7cmV0dXJuIHU/U2kocix1KTpudWxsfWNvbnN0IG5mPTQsSWk9NTEyMztmdW5jdGlvbiBvZihyLGUsdCxuLGksbyl7dD10PT09dm9pZCAwP25mOnQ7Y29uc3Qgcz1lLmluZGljZXMsYT1lLmVsZW1lbnRUeXBlLHU9bj09PXZvaWQgMD9lLm51bUVsZW1lbnRzOm47aT1pPT09dm9pZCAwPzA6aSxhfHxzP28hPT12b2lkIDA/ci5kcmF3RWxlbWVudHNJbnN0YW5jZWQodCx1LGE9PT12b2lkIDA/SWk6ZS5lbGVtZW50VHlwZSxpLG8pOnIuZHJhd0VsZW1lbnRzKHQsdSxhPT09dm9pZCAwP0lpOmUuZWxlbWVudFR5cGUsaSk6byE9PXZvaWQgMD9yLmRyYXdBcnJheXNJbnN0YW5jZWQodCxpLHUsbyk6ci5kcmF3QXJyYXlzKHQsaSx1KX1jb25zdCBGaT0zNjE2MCxBdD0zNjE2MSxzZj0zNTUzLGFmPTUxMjEsdWY9NjQwMixjZj02NDA4LGZmPTMzMTkwLGxmPTM2MDEyLGRmPTM1MDU2LG1mPTM2MDEzLGhmPTMyODU0LHBmPTMyODU1LHlmPTM2MTk0LFBpPTMzMTg5LERpPTY0MDEsQ2k9MzYxNjgsVHI9MzQwNDEsQXI9MzYwNjQsd3Q9MzYwOTYsT2k9MzYxMjgsd3I9MzMzMDYsUnI9MzMwNzEsU3I9OTcyOSxfZj1be2Zvcm1hdDpjZix0eXBlOmFmLG1pbjpTcix3cmFwOlJyfSx7Zm9ybWF0OlRyfV0saj17fTtqW1RyXT13cixqW0RpXT1PaSxqW0NpXT1PaSxqW3VmXT13dCxqW1BpXT13dCxqW2ZmXT13dCxqW2xmXT13dCxqW2RmXT13cixqW21mXT13cjtmdW5jdGlvbiB4ZihyLGUpe3JldHVybiBqW3JdfHxqW2VdfWNvbnN0IHVlPXt9O3VlW2hmXT0hMCx1ZVtwZl09ITAsdWVbeWZdPSEwLHVlW1RyXT0hMCx1ZVtQaV09ITAsdWVbRGldPSEwLHVlW0NpXT0hMDtmdW5jdGlvbiBiZihyKXtyZXR1cm4gdWVbcl19Y29uc3QgZ2Y9MzI7ZnVuY3Rpb24gdmYocil7cmV0dXJuIHI+PUFyJiZyPEFyK2dmfWZ1bmN0aW9uIFJ0KHIsZSx0LG4pe2NvbnN0IGk9Rmksbz1yLmNyZWF0ZUZyYW1lYnVmZmVyKCk7ci5iaW5kRnJhbWVidWZmZXIoaSxvKSx0PXR8fHIuZHJhd2luZ0J1ZmZlcldpZHRoLG49bnx8ci5kcmF3aW5nQnVmZmVySGVpZ2h0LGU9ZXx8X2Y7Y29uc3Qgcz1bXSxhPXtmcmFtZWJ1ZmZlcjpvLGF0dGFjaG1lbnRzOltdLHdpZHRoOnQsaGVpZ2h0Om59O3JldHVybiBlLmZvckVhY2goZnVuY3Rpb24odSxmKXtsZXQgYz11LmF0dGFjaG1lbnQ7Y29uc3QgZD11LnNhbXBsZXMscD11LmZvcm1hdDtsZXQgeT11LmF0dGFjaG1lbnRQb2ludHx8eGYocCx1LmludGVybmFsRm9ybWF0KTtpZih5fHwoeT1BcitmKSx2Zih5KSYmcy5wdXNoKHkpLCFjKWlmKGQhPT12b2lkIDB8fGJmKHApKWM9ci5jcmVhdGVSZW5kZXJidWZmZXIoKSxyLmJpbmRSZW5kZXJidWZmZXIoQXQsYyksZD4xP3IucmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlKEF0LGQscCx0LG4pOnIucmVuZGVyYnVmZmVyU3RvcmFnZShBdCxwLHQsbik7ZWxzZXtjb25zdCBtPU9iamVjdC5hc3NpZ24oe30sdSk7bS53aWR0aD10LG0uaGVpZ2h0PW4sbS5hdXRvPT09dm9pZCAwJiYobS5hdXRvPSExLG0ubWluPW0ubWlufHxtLm1pbk1hZ3x8U3IsbS5tYWc9bS5tYWd8fG0ubWluTWFnfHxTcixtLndyYXBTPW0ud3JhcFN8fG0ud3JhcHx8UnIsbS53cmFwVD1tLndyYXBUfHxtLndyYXB8fFJyKSxjPWpuKHIsbSl9aWYoa3MocixjKSlyLmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKGkseSxBdCxjKTtlbHNlIGlmKG9yKHIsYykpdS5sYXllciE9PXZvaWQgMD9yLmZyYW1lYnVmZmVyVGV4dHVyZUxheWVyKGkseSxjLHUubGV2ZWx8fDAsdS5sYXllcik6ci5mcmFtZWJ1ZmZlclRleHR1cmUyRChpLHksdS50YXJnZXR8fHNmLGMsdS5sZXZlbHx8MCk7ZWxzZSB0aHJvdyBuZXcgRXJyb3IoInVua25vd24gYXR0YWNobWVudCB0eXBlIik7YS5hdHRhY2htZW50cy5wdXNoKGMpfSksci5kcmF3QnVmZmVycyYmci5kcmF3QnVmZmVycyhzKSxhfWZ1bmN0aW9uIEVmKHIsZSx0KXt0PXR8fEZpLGU/KHIuYmluZEZyYW1lYnVmZmVyKHQsZS5mcmFtZWJ1ZmZlciksci52aWV3cG9ydCgwLDAsZS53aWR0aCxlLmhlaWdodCkpOihyLmJpbmRGcmFtZWJ1ZmZlcih0LG51bGwpLHIudmlld3BvcnQoMCwwLHIuZHJhd2luZ0J1ZmZlcldpZHRoLHIuZHJhd2luZ0J1ZmZlckhlaWdodCkpfWZ1bmN0aW9uIFIocixlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIFdlYkdMVGV4dHVyZT9lOmpuKHIse3NyYzplLHdyYXA6ci5DTEFNUF9UT19FREdFfSl9Y2xhc3MgeWV7Y29uc3RydWN0b3IoZSl7Y29uc3R7Y29udGV4dDp0LHdpZHRoOm4saGVpZ2h0Oml9PWU7dGhpcy5jb250ZXh0PXQsdGhpcy5vcHRpb25zPWU7Y29uc3Qgbz10aGlzLmJ1aWxkRGVmaW5lcygpO3RoaXMucHJvZ3JhbUluZm89cmYodGhpcy5jb250ZXh0LFtvK3RoaXMuZ2V0VmVydGV4U2hhZGVyKCksbyt0aGlzLmdldEZyYWdtZW50U2hhZGVyKCldKSx0aGlzLmJ1ZmZlckluZm89c2EodGhpcy5jb250ZXh0LHRoaXMuZ2V0QnVmZmVycygpKSx0aGlzLmZiaT1SdCh0aGlzLmNvbnRleHQsW3tmb3JtYXQ6dGhpcy5jb250ZXh0LlJHQkEsdHlwZTp0aGlzLmNvbnRleHQuVU5TSUdORURfQllURSxtaW46dGhpcy5jb250ZXh0LkxJTkVBUix3cmFwOnRoaXMuY29udGV4dC5DTEFNUF9UT19FREdFfV0sbixpKSx0aGlzLm91dHB1dD10aGlzLmZiaS5hdHRhY2htZW50c1swXX1yZXNpemVPdXRwdXQoZSx0KXt0aGlzLmZiaT1SdCh0aGlzLmNvbnRleHQsW3tmb3JtYXQ6dGhpcy5jb250ZXh0LlJHQkEsdHlwZTp0aGlzLmNvbnRleHQuVU5TSUdORURfQllURSxtaW46dGhpcy5jb250ZXh0LkxJTkVBUix3cmFwOnRoaXMuY29udGV4dC5DTEFNUF9UT19FREdFfV0sZSx0KSx0aGlzLm9wdGlvbnMud2lkdGg9ZSx0aGlzLm9wdGlvbnMuaGVpZ2h0PXQsdGhpcy5vdXRwdXQ9dGhpcy5mYmkuYXR0YWNobWVudHNbMF19Z2V0RGVmaW5lcygpe3JldHVybnt9fWdldEJ1ZmZlcnMoKXtyZXR1cm57cG9zaXRpb246e251bUNvbXBvbmVudHM6MixkYXRhOlstMSwtMSwtMSwxLDEsLTEsMSwxLC0xLDEsMSwtMV19LHRleHR1cmVfY29vcmQ6e251bUNvbXBvbmVudHM6MixkYXRhOlswLDAsMCwxLDEsMCwxLDEsMCwxLDEsMF19fX1idWlsZERlZmluZXMoKXtsZXQgZT0iIjtjb25zdCB0PXRoaXMuZ2V0RGVmaW5lcygpO2ZvcihsZXQgbiBpbiB0KWUrPWAjZGVmaW5lICR7bn0gJHt0W25dLnRvRml4ZWQoMSl9CmA7cmV0dXJuIGV9cnVuKGUpe2NvbnN0IHQ9RGF0ZS5ub3coKTtsZXQgbj0wO3RoaXMubGFzdFJ1biYmKG49KHQtdGhpcy5sYXN0UnVuKS8xZTMpLHRoaXMubGFzdFJ1bj10LHRoaXMuY29udGV4dC52aWV3cG9ydCgwLDAsdGhpcy5jb250ZXh0LmNhbnZhcy53aWR0aCx0aGlzLmNvbnRleHQuY2FudmFzLmhlaWdodCksdGhpcy5jb250ZXh0LnVzZVByb2dyYW0odGhpcy5wcm9ncmFtSW5mby5wcm9ncmFtKSxlZih0aGlzLmNvbnRleHQsdGhpcy5wcm9ncmFtSW5mbyx0aGlzLmJ1ZmZlckluZm8pLFJpKHRoaXMucHJvZ3JhbUluZm8se2RlbHRhOm4sY2FudmFzOlt0aGlzLmNvbnRleHQuY2FudmFzLndpZHRoLHRoaXMuY29udGV4dC5jYW52YXMuaGVpZ2h0XSwuLi5lfSksRWYodGhpcy5jb250ZXh0LHRoaXMub3B0aW9ucy5kaXNhYmxlRnJhbWVidWZmZXI/bnVsbDp0aGlzLmZiaSksb2YodGhpcy5jb250ZXh0LHRoaXMuYnVmZmVySW5mbyl9fXZhciBUZj1gcHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7Cgp2YXJ5aW5nIHZlYzIgX3RleHR1cmVfY29vcmQ7Cgp1bmlmb3JtIHZlYzIgY2FudmFzOwp1bmlmb3JtIHNhbXBsZXIyRCB0ZXh0dXJlOwp1bmlmb3JtIHNhbXBsZXIyRCBtYXNrOwoKdmVjNCBsb29wKCk7Cgp2b2lkIG1haW4oKSB7IGdsX0ZyYWdDb2xvciA9IGxvb3AoKTsgfQpgLEFmPWB2YXJ5aW5nIHZlYzIgX3RleHR1cmVfY29vcmQ7CgphdHRyaWJ1dGUgdmVjMiBwb3NpdGlvbjsKYXR0cmlidXRlIHZlYzIgdGV4dHVyZV9jb29yZDsKCnZvaWQgbWFpbigpIHsKICBnbF9Qb3NpdGlvbiA9IHZlYzQocG9zaXRpb24sIDAuLCAxLik7CiAgX3RleHR1cmVfY29vcmQgPSB0ZXh0dXJlX2Nvb3JkOwp9CmA7Y2xhc3Mgd2YgZXh0ZW5kcyB5ZXtnZXREZWZpbmVzKCl7dmFyIGU7cmV0dXJue1JBRElVUzooZT10aGlzLm9wdGlvbnMucmFkaXVzKSE9bnVsbD9lOjF9fWdldEZyYWdtZW50U2hhZGVyKCl7cmV0dXJuIFRmK3RoaXMuY3JlYXRlTG9vcEZ1bmN0aW9uKCl9Z2V0VmVydGV4U2hhZGVyKCl7cmV0dXJuIEFmfWNyZWF0ZUxvb3BGdW5jdGlvbigpe3ZhciB0O2xldCBlPSh0PXRoaXMub3B0aW9ucy5yYWRpdXMpIT1udWxsP3Q6MTtyZXR1cm5gCgogICAgICAgIHZlYzQgbG9vcCgpIHsgCiAgICAgICAgICAgIHZlYzQgcmVzdWx0ID0gdmVjNCgwLDAsMCwwKTsKICAgICAgICAgICAgZmxvYXQgZmFjdG9yU3VtID0gMC47CgogICAgICAgICAgICB2ZWMyIG5vcm1hbGl6ZWRSYWRpdXMgPSB2ZWMyKC0ke2V9LikgLyBjYW52YXM7CiAgICAgICAgICAgIHZlYzIgbm9ybWFsaXplZEluY3JlbWVudCA9IHZlYzIoMS4pIC8gY2FudmFzOwogICAgICAgICAgICB2ZWMyIGRpZmYgPSBub3JtYWxpemVkUmFkaXVzOwogICAgICAgICAgICBmbG9hdCBtYXhMZW5ndGggPSBsZW5ndGgobm9ybWFsaXplZFJhZGl1cyk7CgogICAgICAgICAgICBmb3IoaW50IHk9LSR7ZX07IHk8JHtlKzF9OyArK3kpIHsKICAgICAgICAgICAgICAgIGZvcihpbnQgeD0tJHtlfTsgeDwke2UrMX07ICsreCkgewogICAgICAgICAgICAgICAgICAgIGZsb2F0IGZhY3RvciA9ICgxLi0gdGV4dHVyZTJEKG1hc2ssIF90ZXh0dXJlX2Nvb3JkICsgZGlmZikuYSkgKiAobWF4TGVuZ3RoIC0gbGVuZ3RoKGRpZmYpKSAvIG1heExlbmd0aDsKICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gZmFjdG9yICogdGV4dHVyZTJEKHRleHR1cmUsIF90ZXh0dXJlX2Nvb3JkICsgZGlmZik7CiAgICAgICAgICAgICAgICAgICAgZmFjdG9yU3VtICs9IGZhY3RvcjsKICAgICAgICAgICAgICAgICAgICBkaWZmLnggKz0gbm9ybWFsaXplZEluY3JlbWVudC54OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZGlmZi55ICs9IG5vcm1hbGl6ZWRJbmNyZW1lbnQueTsKICAgICAgICAgICAgICAgIGRpZmYueCA9IG5vcm1hbGl6ZWRSYWRpdXMueDsKICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm4gcmVzdWx0IC8gZmFjdG9yU3VtOwogICAgICAgIH1gfX12YXIgUmY9YHByZWNpc2lvbiBtZWRpdW1wIGZsb2F0OwoKdmFyeWluZyB2ZWMyIF90ZXh0dXJlX2Nvb3JkOwoKdW5pZm9ybSBzYW1wbGVyMkQgYmFja2dyb3VuZDsKdW5pZm9ybSBzYW1wbGVyMkQgZm9yZWdyb3VuZDsKdW5pZm9ybSBzYW1wbGVyMkQgdGhyZXNob2xkOwoKdm9pZCBtYWluKCkgewogIHZlYzQgYmFja2dyb3VuZENvbG9yID0gdGV4dHVyZTJEKGJhY2tncm91bmQsIF90ZXh0dXJlX2Nvb3JkKTsKICB2ZWM0IGZvcmVncm91bmRDb2xvciA9IHRleHR1cmUyRChmb3JlZ3JvdW5kLCBfdGV4dHVyZV9jb29yZCk7CiAgdmVjNCB0cmVzaG9sZENvbG9yID0gdGV4dHVyZTJEKHRocmVzaG9sZCwgX3RleHR1cmVfY29vcmQpOwogIGdsX0ZyYWdDb2xvciA9IGZvcmVncm91bmRDb2xvciAqIHRyZXNob2xkQ29sb3IuYSArCiAgICAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yICogKDEuIC0gdHJlc2hvbGRDb2xvci5hKTsKfQpgLFNmPWB2YXJ5aW5nIHZlYzIgX3RleHR1cmVfY29vcmQ7CgphdHRyaWJ1dGUgdmVjMiBwb3NpdGlvbjsKYXR0cmlidXRlIHZlYzIgdGV4dHVyZV9jb29yZDsKCnZvaWQgbWFpbigpIHsKICBnbF9Qb3NpdGlvbiA9IHZlYzQocG9zaXRpb24sIDAuLCAxLik7CiAgX3RleHR1cmVfY29vcmQgPSB0ZXh0dXJlX2Nvb3JkOwogIF90ZXh0dXJlX2Nvb3JkLnkgPSAxLiAtIHRleHR1cmVfY29vcmQueTsKfQpgO2NsYXNzIElyIGV4dGVuZHMgeWV7Z2V0RnJhZ21lbnRTaGFkZXIoKXtyZXR1cm4gUmZ9Z2V0VmVydGV4U2hhZGVyKCl7cmV0dXJuIFNmfX1jbGFzcyBGcntjb25zdHJ1Y3Rvcigpe3RoaXMuc3RlcHM9W119YWRkU3RlcChlKXt0aGlzLnN0ZXBzLnB1c2goZSl9YXN5bmMgcnVuKCl7Zm9yKGNvbnN0IGUgb2YgdGhpcy5zdGVwcyllLnByb2dyYW0ucnVuKGUuZ2V0VW5pZm9ybXMoKSl9cmVzaXplT3V0cHV0KGUsdCl7Zm9yKGNvbnN0IG4gb2YgdGhpcy5zdGVwcyluLnByb2dyYW0ucmVzaXplT3V0cHV0KGUsdCl9fWNsYXNzIFByIGV4dGVuZHMgRnJ7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMucHJlY2lzZU1hc2tFbmFibGVkPSExfX1jbGFzcyBJZiBleHRlbmRzIFBye2NvbnN0cnVjdG9yKGUsdCl7c3VwZXIoKSx0aGlzLmNvbnRleHQ9ZTtjb25zdCBuPXtjb250ZXh0OmUsaGVpZ2h0OmUuY2FudmFzLmhlaWdodCx3aWR0aDplLmNhbnZhcy53aWR0aH0saT1uZXcgd2Yoey4uLm4scmFkaXVzOnR9KSxvPW5ldyBJcih7Li4ubixkaXNhYmxlRnJhbWVidWZmZXI6ITB9KTt0aGlzLmFkZFN0ZXAoe3Byb2dyYW06aSxnZXRVbmlmb3JtczooKT0+KHt0ZXh0dXJlOlIoZSx0aGlzLmlucHV0SW1hZ2UpLG1hc2s6UihlLHRoaXMuaW5wdXRNYXNrKX0pfSksdGhpcy5hZGRTdGVwKHtwcm9ncmFtOm8sZ2V0VW5pZm9ybXM6KCk9Pih7YmFja2dyb3VuZDpSKGUsaS5vdXRwdXQpLGZvcmVncm91bmQ6UihlLHRoaXMuaW5wdXRJbWFnZSksdGhyZXNob2xkOlIoZSx0aGlzLmlucHV0TWFzayl9KX0pfXNldERhdGEoZSx0KXt0aGlzLmlucHV0SW1hZ2U9ZSx0aGlzLmlucHV0TWFzaz10fX1jbGFzcyBNaSBleHRlbmRzIFBye2NvbnN0cnVjdG9yKGUpe3N1cGVyKCksdGhpcy5jb250ZXh0PWUsdGhpcy5wcmVjaXNlTWFza0VuYWJsZWQ9ITA7Y29uc3QgdD17Y29udGV4dDplLGhlaWdodDplLmNhbnZhcy5oZWlnaHQsd2lkdGg6ZS5jYW52YXMud2lkdGh9LG49bmV3IElyKHsuLi50LGRpc2FibGVGcmFtZWJ1ZmZlcjohMH0pO3RoaXMuYWRkU3RlcCh7cHJvZ3JhbTpuLGdldFVuaWZvcm1zOigpPT4oe2JhY2tncm91bmQ6UihlLHRoaXMuaW5wdXRCYWNrZ3JvdW5kSW1hZ2UpLGZvcmVncm91bmQ6UihlLHRoaXMuaW5wdXRJbWFnZSksdGhyZXNob2xkOlIoZSx0aGlzLmlucHV0TWFzayl9KX0pfXNldERhdGEoZSx0KXt0aGlzLmlucHV0SW1hZ2U9ZSx0aGlzLmlucHV0TWFzaz10fX1jbGFzcyBGZiBleHRlbmRzIE1pe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLnByZWNpc2VNYXNrRW5hYmxlZD0hMH1zZXQgaW5wdXRWaWRlbyhlKXt0aGlzLmZyYW1lUmVhZGVyPWUuZ2V0UmVhZGVyKCksdGhpcy5yZWFkTmV4dFZpZGVvRnJhbWUoKX1hc3luYyBydW4oKXt0aGlzLmZyYW1lUmVhZGVyJiYoYXdhaXQgc3VwZXIucnVuKCksdGhpcy5yZWFkTmV4dFZpZGVvRnJhbWUoKSl9YXN5bmMgcmVhZE5leHRWaWRlb0ZyYW1lKCl7dmFyIHQ7Y29uc3QgZT1hd2FpdCgodD10aGlzLmZyYW1lUmVhZGVyKT09bnVsbD92b2lkIDA6dC5yZWFkKCkpO2UhPW51bGwmJmUudmFsdWUmJih0aGlzLmlucHV0QmFja2dyb3VuZEltYWdlPWF3YWl0IGNyZWF0ZUltYWdlQml0bWFwKGUudmFsdWUpLGUudmFsdWUuY2xvc2UoKSl9fXZhciBQZj1gcHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7Cgp2YXJ5aW5nIHZlYzIgX3RleHR1cmVfY29vcmQ7Cgp1bmlmb3JtIHZlYzIgY2FudmFzOwp1bmlmb3JtIHNhbXBsZXIyRCB0ZXh0dXJlOwoKdmVjNCBsb29wKCk7Cgp2b2lkIG1haW4oKSB7IGdsX0ZyYWdDb2xvciA9IGxvb3AoKTsgfQpgLERmPWB2YXJ5aW5nIHZlYzIgX3RleHR1cmVfY29vcmQ7CgphdHRyaWJ1dGUgdmVjMiBwb3NpdGlvbjsKYXR0cmlidXRlIHZlYzIgdGV4dHVyZV9jb29yZDsKCnZvaWQgbWFpbigpIHsKICBnbF9Qb3NpdGlvbiA9IHZlYzQocG9zaXRpb24sIDAuLCAxLik7CiAgX3RleHR1cmVfY29vcmQgPSB0ZXh0dXJlX2Nvb3JkOwp9CmAsRHI9KHI9PihyW3IuTElORUFSPTBdPSJMSU5FQVIiLHJbci5HQVVTU0lBTj0xXT0iR0FVU1NJQU4iLHIpKShEcnx8e30pO2NsYXNzIE5pIGV4dGVuZHMgeWV7Z2V0RGVmaW5lcygpe3ZhciBlO3JldHVybntSQURJVVM6KGU9dGhpcy5vcHRpb25zLnJhZGl1cykhPW51bGw/ZToxfX1nZXRGcmFnbWVudFNoYWRlcigpe3JldHVybiBQZit0aGlzLmNyZWF0ZUxvb3BGdW5jdGlvbigpfWdldFZlcnRleFNoYWRlcigpe3JldHVybiBEZn1jcmVhdGVMb29wRnVuY3Rpb24oKXt2YXIgdDtsZXQgZT0odD10aGlzLm9wdGlvbnMucmFkaXVzKSE9bnVsbD90OjE7cmV0dXJuYAoKICAgICAgICB2ZWM0IGxvb3AoKSB7IAogICAgICAgICAgICB2ZWM0IHJlc3VsdCA9IHZlYzQoMCwwLDAsMCk7CiAgICAgICAgICAgIGZsb2F0IGZhY3RvclN1bSA9IDAuOwoKICAgICAgICAgICAgdmVjMiBub3JtYWxpemVkUmFkaXVzID0gdmVjMigtJHtlfS4pIC8gY2FudmFzOwogICAgICAgICAgICB2ZWMyIG5vcm1hbGl6ZWRJbmNyZW1lbnQgPSB2ZWMyKDEuKSAvIGNhbnZhczsKICAgICAgICAgICAgdmVjMiBkaWZmID0gbm9ybWFsaXplZFJhZGl1czsKCiAgICAgICAgICAgIGZvcihpbnQgeT0tJHtlfTsgeTwke2UrMX07ICsreSkgewogICAgICAgICAgICAgICAgZm9yKGludCB4PS0ke2V9OyB4PCR7ZSsxfTsgKyt4KSB7CiAgICAgICAgICAgICAgICAgICAgZmxvYXQgZmFjdG9yID0gMS47CiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IGZhY3RvciAqIHRleHR1cmUyRCh0ZXh0dXJlLCBfdGV4dHVyZV9jb29yZCArIGRpZmYpOwogICAgICAgICAgICAgICAgICAgIGZhY3RvclN1bSArPSBmYWN0b3I7CiAgICAgICAgICAgICAgICAgICAgZGlmZi54ICs9IG5vcm1hbGl6ZWRJbmNyZW1lbnQueDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGRpZmYueSArPSBub3JtYWxpemVkSW5jcmVtZW50Lnk7CiAgICAgICAgICAgICAgICBkaWZmLnggPSBub3JtYWxpemVkUmFkaXVzLng7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCAvIGZhY3RvclN1bTsKICAgICAgICB9YH1nZXRGYWN0b3IoZSx0KXtzd2l0Y2godGhpcy5vcHRpb25zLnR5cGUpe2Nhc2UgMTpyZXR1cm4gdGhpcy5nZXRMaW5lYXJGYWN0b3IoZSx0KTtjYXNlIDA6ZGVmYXVsdDpyZXR1cm4gdGhpcy5nZXRMaW5lYXJGYWN0b3IoZSx0KX19Z2V0TGluZWFyRmFjdG9yKGUsdCl7cmV0dXJuIDF9Z2V0R2F1c3NpYW5GYWN0b3IoZSx0KXt2YXIgdTtjb25zdCBuPU1hdGguUEkqMixpPU1hdGgubWF4KCh1PXRoaXMub3B0aW9ucy5yYWRpdXMpIT1udWxsP3U6MSwxKSxvPTEvKG4qaSoqMikscz0tKGUqKjIrdCoqMiksYT1vKnM7cmV0dXJuIG8qTWF0aC5FKiphfX1jbGFzcyBDZiBleHRlbmRzIFBye2NvbnN0cnVjdG9yKGUsdCl7c3VwZXIoKSx0aGlzLmNvbnRleHQ9ZTtjb25zdCBuPXtjb250ZXh0OmUsaGVpZ2h0OmUuY2FudmFzLmhlaWdodCx3aWR0aDplLmNhbnZhcy53aWR0aH0saT1uZXcgTmkoey4uLm4scmFkaXVzOnQsdHlwZTpEci5HQVVTU0lBTn0pLG89bmV3IElyKHsuLi5uLGRpc2FibGVGcmFtZWJ1ZmZlcjohMH0pO3RoaXMuYWRkU3RlcCh7cHJvZ3JhbTppLGdldFVuaWZvcm1zOigpPT4oe3RleHR1cmU6UihlLHRoaXMuaW5wdXRJbWFnZSl9KX0pLHRoaXMuYWRkU3RlcCh7cHJvZ3JhbTpvLGdldFVuaWZvcm1zOigpPT4oe2JhY2tncm91bmQ6UihlLHRoaXMuaW5wdXRJbWFnZSksZm9yZWdyb3VuZDpSKGUsaS5vdXRwdXQpLHRocmVzaG9sZDpSKGUsdGhpcy5pbnB1dE1hc2spfSl9KX1zZXREYXRhKGUsdCl7dGhpcy5pbnB1dEltYWdlPWUsdGhpcy5pbnB1dE1hc2s9dH19Y2xhc3MgQ3IgZXh0ZW5kcyB5ZXtjb25zdHJ1Y3RvcihlKXtzdXBlcihlKSx0aGlzLmZiaTI9UnQoZS5jb250ZXh0LFt7Zm9ybWF0OmUuY29udGV4dC5SR0JBLHR5cGU6ZS5jb250ZXh0LlVOU0lHTkVEX0JZVEUsbWluOmUuY29udGV4dC5MSU5FQVIsbWFnOmUuY29udGV4dC5MSU5FQVIsd3JhcDplLmNvbnRleHQuQ0xBTVBfVE9fRURHRX1dLGUud2lkdGgsZS5oZWlnaHQpfXJ1bihlKXtjb25zdCB0PXRoaXMuZmJpO3RoaXMuZmJpPXRoaXMuZmJpMix0aGlzLmZiaTI9dCx0aGlzLm91dHB1dD10aGlzLmZiaS5hdHRhY2htZW50c1swXSxzdXBlci5ydW4oey4uLmUscHJldmlvdXNfcmVuZGVyaW5nOnRoaXMuZmJpMi5hdHRhY2htZW50c1swXX0pfXJlc2l6ZU91dHB1dChlLHQpe3N1cGVyLnJlc2l6ZU91dHB1dChlLHQpLHRoaXMuZmJpMj1SdCh0aGlzLmNvbnRleHQsW3tmb3JtYXQ6dGhpcy5jb250ZXh0LlJHQkEsdHlwZTp0aGlzLmNvbnRleHQuVU5TSUdORURfQllURSxtaW46dGhpcy5jb250ZXh0LkxJTkVBUix3cmFwOnRoaXMuY29udGV4dC5DTEFNUF9UT19FREdFfV0sZSx0KX19dmFyIE9mPWBwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsKCnZhcnlpbmcgdmVjMiBfdGV4dHVyZV9jb29yZDsKCi8vIHVuaWZvcm0gZmxvYXQgdHJlc2hvbGQ7CnVuaWZvcm0gc2FtcGxlcjJEIGltYWdlX25vdzsKdW5pZm9ybSBzYW1wbGVyMkQgaW1hZ2VfYmVmb3JlOwp1bmlmb3JtIHNhbXBsZXIyRCBtYXNrX25vdzsKdW5pZm9ybSBzYW1wbGVyMkQgbWFza19iZWZvcmU7CnVuaWZvcm0gc2FtcGxlcjJEIHByZXZpb3VzX3JlbmRlcmluZzsKdW5pZm9ybSB2ZWMyIGNhbnZhczsKCnVuaWZvcm0gZmxvYXQgZGVsdGE7CgpmbG9hdCBjdXJyZW50X2ZhY3RvciA9IDAuNjk7CmZsb2F0IHByZXZpb3VzX2ZhY3RvciA9IDAuNzQ7CmZsb2F0IHRocmVzaG9sZF9hY3RpdmF0aW9uID0gMC41NDsKCmZsb2F0IG1hcChmbG9hdCB2YWx1ZSwgZmxvYXQgbWluMSwgZmxvYXQgbWF4MSwgZmxvYXQgbWluMiwgZmxvYXQgbWF4MikgewogIHJldHVybiBtaW4yICsgKHZhbHVlIC0gbWluMSkgKiAobWF4MiAtIG1pbjIpIC8gKG1heDEgLSBtaW4xKTsKfQoKZmxvYXQgZ2V0VGhyZXNob2xkKCkgewogIHZlYzQgY29sb3IgPSB2ZWM0KDAuKTsKICBmb3IgKGZsb2F0IHkgPSAtNi47IHkgPCA3LjsgeSArPSAxLikgewogICAgZm9yIChmbG9hdCB4ID0gLTYuOyB4IDwgNy47IHggKz0gMS4pIHsKICAgICAgdmVjNCBpbWFnZV9ub3dfY29sb3IgPQogICAgICAgICAgdGV4dHVyZTJEKGltYWdlX25vdywgX3RleHR1cmVfY29vcmQgKyB2ZWMyKHgsIHkpIC8gY2FudmFzKTsKICAgICAgdmVjNCBpbWFnZV9iZWZvcmVfY29sb3IgPQogICAgICAgICAgdGV4dHVyZTJEKGltYWdlX2JlZm9yZSwgX3RleHR1cmVfY29vcmQgKyB2ZWMyKHgsIHkpIC8gY2FudmFzKTsKICAgICAgY29sb3IgKz0gYWJzKGltYWdlX2JlZm9yZV9jb2xvciAtIGltYWdlX25vd19jb2xvcik7CiAgICB9CiAgfQogIHJldHVybiAoY29sb3IueCArIGNvbG9yLnkgKyBjb2xvci56KSAvICgzLiAqIDkuKTsKfQoKdm9pZCBtYWluKCkgewogIGZsb2F0IHRyZXNob2xkX2lucHV0ID0gLjQ7CiAgZmxvYXQgdHJlc2hvbGRfcHJldmlvdXNfcmVuZGVyaW5nID0gLjk4OwoKICB2ZWM0IG1hc2tfbm93X2NvbG9yID0gdGV4dHVyZTJEKG1hc2tfbm93LCBfdGV4dHVyZV9jb29yZCk7CiAgdmVjNCBtYXNrX2JlZm9yZV9jb2xvciA9IHRleHR1cmUyRChtYXNrX2JlZm9yZSwgX3RleHR1cmVfY29vcmQpOwogIHZlYzQgcHJldmlvdXNfcmVuZGVyaW5nX2NvbG9yID0gdGV4dHVyZTJEKHByZXZpb3VzX3JlbmRlcmluZywgX3RleHR1cmVfY29vcmQpOwoKICB2ZWMzIG1hc2tfZGlmZiA9IGFicyhtYXNrX2JlZm9yZV9jb2xvci54eXogLSBtYXNrX25vd19jb2xvci54eXopOwogIGZsb2F0IGZsaWNrZXJpbmcgPSBtYXNrX2RpZmYueDsKICBmbG9hdCB0aHJlc2hvbGQgPSBnZXRUaHJlc2hvbGQoKTsKICBpZiAodGhyZXNob2xkIDwgdGhyZXNob2xkX2FjdGl2YXRpb24pIHsKICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoZmxpY2tlcmluZywgMC4sIDAuLCAxLikgKiBjdXJyZW50X2ZhY3RvciArCiAgICAgICAgICAgICAgICAgICBwcmV2aW91c19yZW5kZXJpbmdfY29sb3IgKiBwcmV2aW91c19mYWN0b3I7CiAgICBnbF9GcmFnQ29sb3IgKj0gKDEuIC0gdGhyZXNob2xkKTsKICB9Cn0KYCxNZj1gdmFyeWluZyB2ZWMyIF90ZXh0dXJlX2Nvb3JkOwoKYXR0cmlidXRlIHZlYzIgcG9zaXRpb247CmF0dHJpYnV0ZSB2ZWMyIHRleHR1cmVfY29vcmQ7Cgp2b2lkIG1haW4oKSB7CiAgZ2xfUG9zaXRpb24gPSB2ZWM0KHBvc2l0aW9uLCAwLiwgMS4pOwogIF90ZXh0dXJlX2Nvb3JkID0gdGV4dHVyZV9jb29yZDsKfQpgO2NsYXNzIE5mIGV4dGVuZHMgQ3J7Z2V0RnJhZ21lbnRTaGFkZXIoKXtyZXR1cm4gT2Z9Z2V0VmVydGV4U2hhZGVyKCl7cmV0dXJuIE1mfX12YXIgVWY9YCN2ZXJzaW9uIDMwMCBlcwovLyBodHRwczovL2dpdGh1Yi5jb20vVm9sY29taXgvdmlydHVhbC1iYWNrZ3JvdW5kL2Jsb2IvbWFpbi9zcmMvcGlwZWxpbmVzL3dlYmdsMi9qb2ludEJpbGF0ZXJhbEZpbHRlclN0YWdlLnRzCgpwcmVjaXNpb24gaGlnaHAgZmxvYXQ7CnVuaWZvcm0gc2FtcGxlcjJEIGlucHV0X2ZyYW1lOwp1bmlmb3JtIHNhbXBsZXIyRCBzZWdtZW50YXRpb25fbWFzazsKdW5pZm9ybSBzYW1wbGVyMkQgdGhyZXNob2xkOwp1bmlmb3JtIHZlYzIgdGV4ZWxfc2l6ZTsKdW5pZm9ybSBmbG9hdCBzdGVwOwp1bmlmb3JtIGZsb2F0IHJhZGl1czsKdW5pZm9ybSBmbG9hdCBvZmZzZXQ7CnVuaWZvcm0gZmxvYXQgc2lnbWFfdGV4ZWw7CnVuaWZvcm0gZmxvYXQgc2lnbWFfY29sb3I7CgppbiB2ZWMyIF90ZXh0dXJlX2Nvb3JkOwpvdXQgdmVjNCBvdXRDb2xvcjsKCmZsb2F0IGdhdXNzaWFuKGZsb2F0IHgsIGZsb2F0IHNpZ21hKSB7CiAgZmxvYXQgY29lZmYgPSAtMC41IC8gKHNpZ21hICogc2lnbWEgKiA0LjAgKyAxLjBlLTYpOwogIHJldHVybiBleHAoKHggKiB4KSAqIGNvZWZmKTsKfQoKdm9pZCBtYWluKCkgewogIHZlYzIgY2VudGVyQ29vcmQgPSBfdGV4dHVyZV9jb29yZDsKICB2ZWMzIGNlbnRlckNvbG9yID0gdGV4dHVyZShpbnB1dF9mcmFtZSwgY2VudGVyQ29vcmQpLnJnYjsKICBmbG9hdCBuZXdWYWwgPSAwLjA7CiAgZmxvYXQgc3BhY2VXZWlnaHQgPSAwLjA7CiAgZmxvYXQgY29sb3JXZWlnaHQgPSAwLjA7CiAgZmxvYXQgdG90YWxXZWlnaHQgPSAwLjA7CiAgLy8gU3Vic2FtcGxlIGtlcm5lbCBzcGFjZS4KICBmb3IgKGZsb2F0IGkgPSAtcmFkaXVzICsgb2Zmc2V0OyBpIDw9IHJhZGl1czsgaSArPSBzdGVwKSB7CiAgICBmb3IgKGZsb2F0IGogPSAtcmFkaXVzICsgb2Zmc2V0OyBqIDw9IHJhZGl1czsgaiArPSBzdGVwKSB7CiAgICAgIHZlYzIgc2hpZnQgPSB2ZWMyKGosIGkpICogdGV4ZWxfc2l6ZTsKICAgICAgdmVjMiBjb29yZCA9IHZlYzIoY2VudGVyQ29vcmQgKyBzaGlmdCk7CiAgICAgIHZlYzMgZnJhbWVDb2xvciA9IHRleHR1cmUoaW5wdXRfZnJhbWUsIGNvb3JkKS5yZ2I7CiAgICAgIGZsb2F0IHRocmVzaG9sZCA9IHRleHR1cmUodGhyZXNob2xkLCBjb29yZCkuYTsKICAgICAgZmxvYXQgb3V0VmFsID0gdGV4dHVyZShzZWdtZW50YXRpb25fbWFzaywgY29vcmQpLmE7CgogICAgICBzcGFjZVdlaWdodCA9IGdhdXNzaWFuKGRpc3RhbmNlKGNlbnRlckNvb3JkLCBjb29yZCksIHNpZ21hX3RleGVsKTsKICAgICAgY29sb3JXZWlnaHQgPSBnYXVzc2lhbihkaXN0YW5jZShjZW50ZXJDb2xvciwgZnJhbWVDb2xvciksIHNpZ21hX2NvbG9yKTsKICAgICAgdG90YWxXZWlnaHQgKz0gc3BhY2VXZWlnaHQgKiBjb2xvcldlaWdodDsKICAgICAgbmV3VmFsICs9IHNwYWNlV2VpZ2h0ICogY29sb3JXZWlnaHQgKiBvdXRWYWwgKiB0aHJlc2hvbGQ7CiAgICB9CiAgfQogIG5ld1ZhbCAvPSB0b3RhbFdlaWdodDsKICBvdXRDb2xvciA9IHZlYzQodmVjMygwLiksIG5ld1ZhbCk7Cn1gLEJmPWAjdmVyc2lvbiAzMDAgZXMKaW4gdmVjMiBwb3NpdGlvbjsKaW4gdmVjMiB0ZXh0dXJlX2Nvb3JkOwpvdXQgdmVjMiBfdGV4dHVyZV9jb29yZDsKdm9pZCBtYWluKCkgewogIGdsX1Bvc2l0aW9uID0gdmVjNChwb3NpdGlvbiwgMC4wLCAxLjApOwogIF90ZXh0dXJlX2Nvb3JkID0gdGV4dHVyZV9jb29yZDsKfWA7Y2xhc3Mga2YgZXh0ZW5kcyB5ZXtnZXRGcmFnbWVudFNoYWRlcigpe3JldHVybiBVZn1nZXRWZXJ0ZXhTaGFkZXIoKXtyZXR1cm4gQmZ9fXZhciBMZj1gcHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7Cgp2YXJ5aW5nIHZlYzIgX3RleHR1cmVfY29vcmQ7Cgp1bmlmb3JtIHZlYzIgY2FudmFzOwp1bmlmb3JtIHNhbXBsZXIyRCB0ZXh0dXJlOwoKdm9pZCBtYWluKCkgewogIGludCBjb3VudCA9IDA7CiAgZm9yIChmbG9hdCB5ID0gLTEuOyB5IDwgMi47IHkgKz0gMS4pIHsKICAgIGZvciAoZmxvYXQgeCA9IC0xLjsgeCA8IDIuOyB4ICs9IDEuKSB7CiAgICAgIHZlYzIgY29vcmQgPSBfdGV4dHVyZV9jb29yZCArIHZlYzIoeSwgeCkgLyBjYW52YXM7CiAgICAgIHZlYzQgY29sb3IgPSB0ZXh0dXJlMkQodGV4dHVyZSwgY29vcmQpOwogICAgICBpZiAoY29sb3IuciA+IC4xKSB7CiAgICAgICAgY291bnQrKzsKICAgICAgfQogICAgfQogIH0KICBpZiAoY291bnQgPiA1KSB7CiAgICBnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQodGV4dHVyZSwgX3RleHR1cmVfY29vcmQpOwogIH0KfQpgLCRmPWB2YXJ5aW5nIHZlYzIgX3RleHR1cmVfY29vcmQ7CgphdHRyaWJ1dGUgdmVjMiBwb3NpdGlvbjsKYXR0cmlidXRlIHZlYzIgdGV4dHVyZV9jb29yZDsKCnZvaWQgbWFpbigpIHsKICBnbF9Qb3NpdGlvbiA9IHZlYzQocG9zaXRpb24sIDAuLCAxLik7CiAgX3RleHR1cmVfY29vcmQgPSB0ZXh0dXJlX2Nvb3JkOwp9CmA7Y2xhc3MgemYgZXh0ZW5kcyB5ZXtnZXRGcmFnbWVudFNoYWRlcigpe3JldHVybiBMZn1nZXRWZXJ0ZXhTaGFkZXIoKXtyZXR1cm4gJGZ9fXZhciBHZj1gcHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7Cgp2YXJ5aW5nIHZlYzIgX3RleHR1cmVfY29vcmQ7Cgp1bmlmb3JtIHZlYzIgY2FudmFzOwp1bmlmb3JtIHNhbXBsZXIyRCB0ZXh0dXJlOwoKdm9pZCBtYWluKCkgewogIHZlYzQgY29sb3IgPSB0ZXh0dXJlMkQodGV4dHVyZSwgX3RleHR1cmVfY29vcmQpOwogIGZvciAoZmxvYXQgeSA9IC0yLjsgeSA8IDMuOyB5ICs9IDEuKSB7CiAgICBmb3IgKGZsb2F0IHggPSAtMi47IHggPCAzLjsgeCArPSAxLikgewogICAgICB2ZWMyIGNvb3JkID0gX3RleHR1cmVfY29vcmQ7CiAgICAgIGNvb3JkICs9IHZlYzIoeSwgeCkgLyBjYW52YXM7CiAgICAgIGNvbG9yICs9IHRleHR1cmUyRCh0ZXh0dXJlLCBjb29yZCkgKiAoMS4gLyA0Lik7CiAgICB9CiAgfQoKICBnbF9GcmFnQ29sb3IgPSBjb2xvcjsKfQpgLEhmPWB2YXJ5aW5nIHZlYzIgX3RleHR1cmVfY29vcmQ7CgphdHRyaWJ1dGUgdmVjMiBwb3NpdGlvbjsKYXR0cmlidXRlIHZlYzIgdGV4dHVyZV9jb29yZDsKCnZvaWQgbWFpbigpIHsKICBnbF9Qb3NpdGlvbiA9IHZlYzQocG9zaXRpb24sIDAuLCAxLik7CiAgX3RleHR1cmVfY29vcmQgPSB0ZXh0dXJlX2Nvb3JkOwp9CmA7Y2xhc3MgVmYgZXh0ZW5kcyBDcntnZXRGcmFnbWVudFNoYWRlcigpe3JldHVybiBHZn1nZXRWZXJ0ZXhTaGFkZXIoKXtyZXR1cm4gSGZ9fXZhciBXZj1gcHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7Cgp2YXJ5aW5nIHZlYzIgX3RleHR1cmVfY29vcmQ7Cgp1bmlmb3JtIHNhbXBsZXIyRCB0aHJlc2hvbGQ7CnVuaWZvcm0gc2FtcGxlcjJEIGlucHV0czsKCnZvaWQgbWFpbigpIHsKICB2ZWM0IGlucHV0c19jb2xvciA9IHRleHR1cmUyRChpbnB1dHMsIF90ZXh0dXJlX2Nvb3JkKTsKICB2ZWM0IHRocmVzaG9sZF9jb2xvciA9IHRleHR1cmUyRCh0aHJlc2hvbGQsIF90ZXh0dXJlX2Nvb3JkKTsKICBpZiAodGhyZXNob2xkX2NvbG9yLnIgPCAuMSAmJiBpbnB1dHNfY29sb3IuciA+IC41KSB7CiAgICBnbF9GcmFnQ29sb3IgPSBpbnB1dHNfY29sb3I7CiAgfQp9CmAsamY9YHZhcnlpbmcgdmVjMiBfdGV4dHVyZV9jb29yZDsKCmF0dHJpYnV0ZSB2ZWMyIHBvc2l0aW9uOwphdHRyaWJ1dGUgdmVjMiB0ZXh0dXJlX2Nvb3JkOwoKdm9pZCBtYWluKCkgewogIGdsX1Bvc2l0aW9uID0gdmVjNChwb3NpdGlvbiwgMC4sIDEuKTsKICBfdGV4dHVyZV9jb29yZCA9IHRleHR1cmVfY29vcmQ7Cn0KYDtjbGFzcyBxZiBleHRlbmRzIENye2dldEZyYWdtZW50U2hhZGVyKCl7cmV0dXJuIFdmfWdldFZlcnRleFNoYWRlcigpe3JldHVybiBqZn19Y2xhc3MgWGYgZXh0ZW5kcyBGcntjb25zdHJ1Y3RvcihlLHQsbil7c3VwZXIoKSx0aGlzLmNvbnRleHQ9ZSx0aGlzLm9wdGlvbnM9e2N1cnJlbnRUaHJlc2hvbGRNaW5pbXVtOjAsY3VycmVudFRocmVzaG9sZE1heGltdW06MSxwcmV2aW91c1RocmVzaG9sZE1pbmltdW06MCxwcmV2aW91c1RocmVzaG9sZE1heGltdW06MSx0aHJlc2hvbGRNaW5pbXVtOjAsdGhyZXNob2xkTWF4aW11bToxLHRocmVzaG9sZEZhY3RvcjoxfTtjb25zdCBpPXtjb250ZXh0OmUsaGVpZ2h0Om4sd2lkdGg6dH0sbz1uZXcgTmYoaSkscz1uZXcgTmkoey4uLmkscmFkaXVzOjEsdHlwZTpEci5HQVVTU0lBTn0pLGE9bmV3IHFmKGkpLHU9bmV3IFZmKGkpLGY9bmV3IHpmKGkpLGM9bmV3IGtmKHsuLi5pfSksZD0uNjYscD02NDAseT00ODAsbT0yNTYsXz0xNDQ7bGV0IGI9MTtiKj1NYXRoLm1heChwL20seS9fKTtjb25zdCBnPU1hdGgubWF4KDEsTWF0aC5zcXJ0KGIpKmQpLFQ9MS9wLEY9MS95O3RoaXMuYWRkU3RlcCh7cHJvZ3JhbTpvLGdldFVuaWZvcm1zOigpPT4oe2ltYWdlX25vdzpSKGUsdGhpcy5pbnB1dEltYWdlKSxpbWFnZV9iZWZvcmU6UihlLHRoaXMucHJldmlvdXNJbnB1dEltYWdlKSxtYXNrX25vdzpSKGUsdGhpcy5pbnB1dE1hc2spLG1hc2tfYmVmb3JlOlIoZSx0aGlzLnByZXZpb3VzSW5wdXRNYXNrKSxjdXJyZW50X3RocmVzaG9sZF9taW5pbXVtOnRoaXMub3B0aW9ucy5jdXJyZW50VGhyZXNob2xkTWluaW11bSxjdXJyZW50X3RocmVzaG9sZF9tYXhpbXVtOnRoaXMub3B0aW9ucy5jdXJyZW50VGhyZXNob2xkTWF4aW11bSxwcmV2aW91c190aHJlc2hvbGRfbWluaW11bTp0aGlzLm9wdGlvbnMucHJldmlvdXNUaHJlc2hvbGRNaW5pbXVtLHByZXZpb3VzX3RocmVzaG9sZF9tYXhpbXVtOnRoaXMub3B0aW9ucy5wcmV2aW91c1RocmVzaG9sZE1heGltdW0sdGhyZXNob2xkX21pbmltdW06dGhpcy5vcHRpb25zLnRocmVzaG9sZE1pbmltdW0sdGhyZXNob2xkX21heGltdW06dGhpcy5vcHRpb25zLnRocmVzaG9sZE1heGltdW0sdGhyZXNob2xkX2ZhY3Rvcjp0aGlzLm9wdGlvbnMudGhyZXNob2xkRmFjdG9yfSl9KSx0aGlzLmFkZFN0ZXAoe3Byb2dyYW06YSxnZXRVbmlmb3JtczooKT0+KHtpbnB1dHM6UihlLHRoaXMuaW5wdXRNYXNrKSx0aHJlc2hvbGQ6UihlLG8ub3V0cHV0KX0pfSksdGhpcy5hZGRTdGVwKHtwcm9ncmFtOmYsZ2V0VW5pZm9ybXM6KCk9Pih7dGV4dHVyZTpSKGUsYS5vdXRwdXQpfSl9KSx0aGlzLmFkZFN0ZXAoe3Byb2dyYW06dSxnZXRVbmlmb3JtczooKT0+KHt0ZXh0dXJlOlIoZSxmLm91dHB1dCl9KX0pLHRoaXMuYWRkU3RlcCh7cHJvZ3JhbTpzLGdldFVuaWZvcm1zOigpPT4oe3RleHR1cmU6UihlLHUub3V0cHV0KX0pfSksdGhpcy5hZGRTdGVwKHtwcm9ncmFtOmMsZ2V0VW5pZm9ybXM6KCk9Pih7aW5wdXRfZnJhbWU6UihlLHRoaXMuaW5wdXRJbWFnZSksc2VnbWVudGF0aW9uX21hc2s6UihlLHRoaXMuaW5wdXRNYXNrKSx0aHJlc2hvbGQ6UihlLHMub3V0cHV0KSx0ZXhlbF9zaXplOltULEZdLHN0ZXA6ZyxyYWRpdXM6YixvZmZzZXQ6Zz4xP2cqLjU6MCxzaWdtYV90ZXhlbDpNYXRoLm1heChULEYpKmIsc2lnbWFfY29sb3I6LjF9KX0pLHRoaXMub3V0cHV0PWMub3V0cHV0fXNldERhdGEoZSx0KXt0aGlzLnByZXZpb3VzSW5wdXRJbWFnZT10aGlzLmlucHV0SW1hZ2U/dGhpcy5pbnB1dEltYWdlOmUsdGhpcy5wcmV2aW91c0lucHV0TWFzaz10aGlzLmlucHV0TWFzaz90aGlzLmlucHV0TWFzazp0LHRoaXMuaW5wdXRJbWFnZT1lLHRoaXMuaW5wdXRNYXNrPXR9c2V0T3B0aW9ucyhlKXt0aGlzLm9wdGlvbnM9ZX19dmFyIFlmPWBwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsKCnZhcnlpbmcgdmVjMiBfdGV4dHVyZV9jb29yZDsKdW5pZm9ybSBzYW1wbGVyMkQgdGV4dHVyZTsKCnZvaWQgbWFpbigpIHsgZ2xfRnJhZ0NvbG9yID0gdGV4dHVyZTJEKHRleHR1cmUsIF90ZXh0dXJlX2Nvb3JkKTsgfQpgLEtmPWB2YXJ5aW5nIHZlYzIgX3RleHR1cmVfY29vcmQ7CgphdHRyaWJ1dGUgdmVjMiBwb3NpdGlvbjsKYXR0cmlidXRlIHZlYzIgdGV4dHVyZV9jb29yZDsKdW5pZm9ybSBib29sIGludmVydF95OwoKdm9pZCBtYWluKCkgewogIGdsX1Bvc2l0aW9uID0gdmVjNChwb3NpdGlvbiwgMC4sIDEuKTsKICBfdGV4dHVyZV9jb29yZCA9IHRleHR1cmVfY29vcmQ7CiAgaWYgKGludmVydF95KSB7CiAgICBfdGV4dHVyZV9jb29yZC55ID0gMS4gLSB0ZXh0dXJlX2Nvb3JkLnk7CiAgfQp9CmA7Y2xhc3MgSmYgZXh0ZW5kcyB5ZXtnZXRGcmFnbWVudFNoYWRlcigpe3JldHVybiBZZn1nZXRWZXJ0ZXhTaGFkZXIoKXtyZXR1cm4gS2Z9fWNsYXNzIFFmIGV4dGVuZHMgRnJ7Y29uc3RydWN0b3IoZSx0LG4pe3N1cGVyKCksdGhpcy5jb250ZXh0PWU7Y29uc3QgaT17Y29udGV4dDplLGhlaWdodDpuLHdpZHRoOnR9O3RoaXMuYWRkU3RlcCh7cHJvZ3JhbTpuZXcgSmYoey4uLmksZGlzYWJsZUZyYW1lYnVmZmVyOiEwfSksZ2V0VW5pZm9ybXM6KCk9Pih7dGV4dHVyZTpSKGUsdGhpcy5pbnB1dEltYWdlKSxpbnZlcnRfeTohMH0pfSl9c2V0RGF0YShlKXt0aGlzLmlucHV0SW1hZ2U9ZX19Y2xhc3MgWmZ7Y29uc3RydWN0b3IoZSl7dGhpcy5jYW52YXM9bmV3IE9mZnNjcmVlbkNhbnZhcygwLDApLHRoaXMuY29udGV4dD10aGlzLmNhbnZhcy5nZXRDb250ZXh0KCJ3ZWJnbDIiKSx0aGlzLmNhbnZhcy53aWR0aD1lLndpZHRoLHRoaXMuY2FudmFzLmhlaWdodD1lLmhlaWdodCx0aGlzLnJlc2l6ZT1uZXcgUWYodGhpcy5jb250ZXh0LGUud2lkdGgsZS5oZWlnaHQpfXJlc2l6ZUZvcmVncm91bmQoZSx0KXt0aGlzLmNhbnZhcy53aWR0aD1lLHRoaXMuY2FudmFzLmhlaWdodD10LHRoaXMucmVzaXplLnJlc2l6ZU91dHB1dChlLHQpfWFzeW5jIHByb2Nlc3MoZSl7dmFyIHQsbjtyZXR1cm4gdGhpcy5jYW52YXMud2lkdGg9dGhpcy5jYW52YXMud2lkdGgsKHQ9dGhpcy5yZXNpemUpPT1udWxsfHx0LnNldERhdGEoZSksKG49dGhpcy5yZXNpemUpPT1udWxsfHxuLnJ1bigpLHRoaXMuY2FudmFzfX1jbGFzcyBlbHtjb25zdHJ1Y3RvcihlKXt0aGlzLmNhbnZhcz1uZXcgT2Zmc2NyZWVuQ2FudmFzKDAsMCksdGhpcy5jb250ZXh0PXRoaXMuY2FudmFzLmdldENvbnRleHQoIndlYmdsMiIpLHRoaXMuY2FudmFzLndpZHRoPWUuZm9yZWdyb3VuZFdpZHRoLHRoaXMuY2FudmFzLmhlaWdodD1lLmZvcmVncm91bmRIZWlnaHQsdGhpcy5pbXByb3ZlTWFza1NlZ21lbnRhdGlvbj1uZXcgWGYodGhpcy5jb250ZXh0LGUubWFza1dpZHRoLGUubWFza0hlaWdodCksdGhpcy5iYWNrZ3JvdW5kSW1hZ2U9bmV3IE1pKHRoaXMuY29udGV4dCksdGhpcy5iYWNrZ3JvdW5kVmlkZW89bmV3IEZmKHRoaXMuY29udGV4dCksdGhpcy5iYWNrZ3JvdW5kUmVzaXplcj1uZXcgWmYoe3dpZHRoOmUuZm9yZWdyb3VuZFdpZHRoLGhlaWdodDplLmZvcmVncm91bmRIZWlnaHR9KX1zZXRCYWNrZ3JvdW5kT3B0aW9ucyhlKXtzd2l0Y2goZS50cmFuc2Zvcm1lclR5cGUpe2Nhc2UiQmFja2dyb3VuZEJsdXIiOnRoaXMuYWN0aXZlUGlwZWxpbmU9bmV3IElmKHRoaXMuY29udGV4dCx0aGlzLmdldEJsdXJTaXplKGUucmFkaXVzKSk7YnJlYWs7Y2FzZSJTaWxob3VldHRlQmx1ciI6dGhpcy5hY3RpdmVQaXBlbGluZT1uZXcgQ2YodGhpcy5jb250ZXh0LHRoaXMuZ2V0Qmx1clNpemUoZS5yYWRpdXMpKTticmVhaztjYXNlIlZpZGVvQmFja2dyb3VuZCI6dGhpcy5hY3RpdmVQaXBlbGluZT10aGlzLmJhY2tncm91bmRWaWRlbzticmVhaztjYXNlIlZpcnR1YWxCYWNrZ3JvdW5kIjp0aGlzLmFjdGl2ZVBpcGVsaW5lPXRoaXMuYmFja2dyb3VuZEltYWdlO2JyZWFrfXRoaXMub3B0aW9ucz1lfXNldEZsaWNrZXJpbmdPcHRpb25zKGUpe3ZhciB0Oyh0PXRoaXMuaW1wcm92ZU1hc2tTZWdtZW50YXRpb24pPT1udWxsfHx0LnNldE9wdGlvbnMoZSl9c2V0VmlkZW9CR1JlYWRhYmxlKGUpe3RoaXMuYmFja2dyb3VuZFZpZGVvLmlucHV0VmlkZW89ZX1hc3luYyBzZXRWaXJ0dWFsQkdJbWFnZShlKXt0aGlzLnZpcnR1YWxCR0ltYWdlPWUsdGhpcy5iYWNrZ3JvdW5kSW1hZ2UuaW5wdXRCYWNrZ3JvdW5kSW1hZ2U9YXdhaXQgdGhpcy5iYWNrZ3JvdW5kUmVzaXplci5wcm9jZXNzKGUpfWFzeW5jIHByb2Nlc3MoZSx0KXt2YXIgbixpLG8scyxhO2lmKHRoaXMuYWN0aXZlUGlwZWxpbmUmJmUud2lkdGgmJih0PT1udWxsP3ZvaWQgMDp0LndpZHRoKSl7bGV0IHU9dDsoKChuPXRoaXMub3B0aW9ucyk9PW51bGw/dm9pZCAwOm4uc2VsZmllU2VnbWVudGF0aW9uVHlwZSkmJigoaT10aGlzLm9wdGlvbnMpPT1udWxsP3ZvaWQgMDppLnNlbGZpZVNlZ21lbnRhdGlvblR5cGUpPT09IlBSRUNJU0UifHwhKChvPXRoaXMub3B0aW9ucykhPW51bGwmJm8uc2VsZmllU2VnbWVudGF0aW9uVHlwZSkmJnRoaXMuYWN0aXZlUGlwZWxpbmUucHJlY2lzZU1hc2tFbmFibGVkKSYmKHRoaXMuaW1wcm92ZU1hc2tTZWdtZW50YXRpb24uc2V0RGF0YShlLHQpLHRoaXMuaW1wcm92ZU1hc2tTZWdtZW50YXRpb24ucnVuKCksdT10aGlzLmltcHJvdmVNYXNrU2VnbWVudGF0aW9uLm91dHB1dCksKHM9dGhpcy5hY3RpdmVQaXBlbGluZSk9PW51bGx8fHMuc2V0RGF0YShlLHUpLChhPXRoaXMuYWN0aXZlUGlwZWxpbmUpPT1udWxsfHxhLnJ1bigpfX1hc3luYyByZXNpemVGb3JlZ3JvdW5kKGUsdCl7dmFyIG47dGhpcy5jYW52YXMud2lkdGg9ZSx0aGlzLmNhbnZhcy5oZWlnaHQ9dCx0aGlzLmJhY2tncm91bmRJbWFnZS5yZXNpemVPdXRwdXQoZSx0KSx0aGlzLmJhY2tncm91bmRWaWRlby5yZXNpemVPdXRwdXQoZSx0KSx0aGlzLmJhY2tncm91bmRSZXNpemVyLnJlc2l6ZUZvcmVncm91bmQoZSx0KSwobj10aGlzLmFjdGl2ZVBpcGVsaW5lKT09bnVsbHx8bi5yZXNpemVPdXRwdXQoZSx0KSx0aGlzLnZpcnR1YWxCR0ltYWdlJiYodGhpcy5iYWNrZ3JvdW5kSW1hZ2UuaW5wdXRCYWNrZ3JvdW5kSW1hZ2U9YXdhaXQgdGhpcy5iYWNrZ3JvdW5kUmVzaXplci5wcm9jZXNzKHRoaXMudmlydHVhbEJHSW1hZ2UpKX1nZXRCbHVyU2l6ZShlPWl0Lkxvdyl7c3dpdGNoKGUpe2Nhc2UgaXQuTG93OnJldHVybiA1O2Nhc2UgaXQuSGlnaDpyZXR1cm4gMTJ9cmV0dXJuIGV9fXZhciBTdD1mdW5jdGlvbigpe3ZhciByPXR5cGVvZiBkb2N1bWVudCE9InVuZGVmaW5lZCImJmRvY3VtZW50LmN1cnJlbnRTY3JpcHQ/ZG9jdW1lbnQuY3VycmVudFNjcmlwdC5zcmM6dm9pZCAwO3JldHVybiBmdW5jdGlvbihlKXtlPWV8fHt9O3ZhciB0PXR5cGVvZiBlIT0idW5kZWZpbmVkIj9lOnt9LG4saTt0LnJlYWR5PW5ldyBQcm9taXNlKGZ1bmN0aW9uKGwsaCl7bj1sLGk9aH0pO3ZhciBvPXt9LHM7Zm9yKHMgaW4gdCl0Lmhhc093blByb3BlcnR5KHMpJiYob1tzXT10W3NdKTt2YXIgYT0iLi90aGlzLnByb2dyYW0iLHU9ZnVuY3Rpb24obCxoKXt0aHJvdyBofSxmPSEwLGM9IiI7ZnVuY3Rpb24gZChsKXtyZXR1cm4gdC5sb2NhdGVGaWxlP3QubG9jYXRlRmlsZShsLGMpOmMrbH12YXIgcDt0eXBlb2YgZG9jdW1lbnQhPSJ1bmRlZmluZWQiJiZkb2N1bWVudC5jdXJyZW50U2NyaXB0JiYoYz1kb2N1bWVudC5jdXJyZW50U2NyaXB0LnNyYyksciYmKGM9ciksYy5pbmRleE9mKCJibG9iOiIpIT09MD9jPWMuc3Vic3RyKDAsYy5yZXBsYWNlKC9bPyNdLiovLCIiKS5sYXN0SW5kZXhPZigiLyIpKzEpOmM9IiI7dmFyIHk9dC5wcmludHx8Y29uc29sZS5sb2cuYmluZChjb25zb2xlKSxtPXQucHJpbnRFcnJ8fGNvbnNvbGUud2Fybi5iaW5kKGNvbnNvbGUpO2ZvcihzIGluIG8pby5oYXNPd25Qcm9wZXJ0eShzKSYmKHRbc109b1tzXSk7bz1udWxsLHQuYXJndW1lbnRzJiZ0LmFyZ3VtZW50cyx0LnRoaXNQcm9ncmFtJiYoYT10LnRoaXNQcm9ncmFtKSx0LnF1aXQmJih1PXQucXVpdCk7dmFyIF87dC53YXNtQmluYXJ5JiYoXz10Lndhc21CaW5hcnkpO3ZhciBiPXQubm9FeGl0UnVudGltZXx8ITA7dHlwZW9mIFdlYkFzc2VtYmx5IT0ib2JqZWN0IiYmY2UoIm5vIG5hdGl2ZSB3YXNtIHN1cHBvcnQgZGV0ZWN0ZWQiKTt2YXIgZyxUPSExLEY9dHlwZW9mIFRleHREZWNvZGVyIT0idW5kZWZpbmVkIj9uZXcgVGV4dERlY29kZXIoInV0ZjgiKTp2b2lkIDA7ZnVuY3Rpb24gTChsLGgseCl7Zm9yKHZhciBBPWgreCxEPWg7bFtEXSYmIShEPj1BKTspKytEO2lmKEQtaD4xNiYmbC5zdWJhcnJheSYmRilyZXR1cm4gRi5kZWNvZGUobC5zdWJhcnJheShoLEQpKTtmb3IodmFyIE09IiI7aDxEOyl7dmFyIHc9bFtoKytdO2lmKCEodyYxMjgpKXtNKz1TdHJpbmcuZnJvbUNoYXJDb2RlKHcpO2NvbnRpbnVlfXZhciBVPWxbaCsrXSY2MztpZigodyYyMjQpPT0xOTIpe00rPVN0cmluZy5mcm9tQ2hhckNvZGUoKHcmMzEpPDw2fFUpO2NvbnRpbnVlfXZhciBRPWxbaCsrXSY2MztpZigodyYyNDApPT0yMjQ/dz0odyYxNSk8PDEyfFU8PDZ8UTp3PSh3JjcpPDwxOHxVPDwxMnxRPDw2fGxbaCsrXSY2Myx3PDY1NTM2KU0rPVN0cmluZy5mcm9tQ2hhckNvZGUodyk7ZWxzZXt2YXIgV2k9dy02NTUzNjtNKz1TdHJpbmcuZnJvbUNoYXJDb2RlKDU1Mjk2fFdpPj4xMCw1NjMyMHxXaSYxMDIzKX19cmV0dXJuIE19ZnVuY3Rpb24gVihsLGgpe3JldHVybiBsP0woJGUsbCxoKToiIn1mdW5jdGlvbiBlZShsLGgseCl7Zm9yKHZhciBBPTA7QTxsLmxlbmd0aDsrK0EpSXRbaCsrPj4wXT1sLmNoYXJDb2RlQXQoQSk7eHx8KEl0W2g+PjBdPTApfWZ1bmN0aW9uIHEobCxoKXtyZXR1cm4gbCVoPjAmJihsKz1oLWwlaCksbH12YXIgQmksSXQsJGUsWDtmdW5jdGlvbiBraShsKXtCaT1sLHQuSEVBUDg9SXQ9bmV3IEludDhBcnJheShsKSx0LkhFQVAxNj1uZXcgSW50MTZBcnJheShsKSx0LkhFQVAzMj1YPW5ldyBJbnQzMkFycmF5KGwpLHQuSEVBUFU4PSRlPW5ldyBVaW50OEFycmF5KGwpLHQuSEVBUFUxNj1uZXcgVWludDE2QXJyYXkobCksdC5IRUFQVTMyPW5ldyBVaW50MzJBcnJheShsKSx0LkhFQVBGMzI9bmV3IEZsb2F0MzJBcnJheShsKSx0LkhFQVBGNjQ9bmV3IEZsb2F0NjRBcnJheShsKX10LklOSVRJQUxfTUVNT1JZO3ZhciBNcixMaT1bXSwkaT1bXSx6aT1bXSxhbD0wO2Z1bmN0aW9uIHVsKCl7cmV0dXJuIGJ8fGFsPjB9ZnVuY3Rpb24gY2woKXtpZih0LnByZVJ1bilmb3IodHlwZW9mIHQucHJlUnVuPT0iZnVuY3Rpb24iJiYodC5wcmVSdW49W3QucHJlUnVuXSk7dC5wcmVSdW4ubGVuZ3RoOylkbCh0LnByZVJ1bi5zaGlmdCgpKTtOcihMaSl9ZnVuY3Rpb24gZmwoKXtOcigkaSl9ZnVuY3Rpb24gbGwoKXtpZih0LnBvc3RSdW4pZm9yKHR5cGVvZiB0LnBvc3RSdW49PSJmdW5jdGlvbiImJih0LnBvc3RSdW49W3QucG9zdFJ1bl0pO3QucG9zdFJ1bi5sZW5ndGg7KWhsKHQucG9zdFJ1bi5zaGlmdCgpKTtOcih6aSl9ZnVuY3Rpb24gZGwobCl7TGkudW5zaGlmdChsKX1mdW5jdGlvbiBtbChsKXskaS51bnNoaWZ0KGwpfWZ1bmN0aW9uIGhsKGwpe3ppLnVuc2hpZnQobCl9dmFyIF9lPTAsemU9bnVsbDtmdW5jdGlvbiBwbChsKXtfZSsrLHQubW9uaXRvclJ1bkRlcGVuZGVuY2llcyYmdC5tb25pdG9yUnVuRGVwZW5kZW5jaWVzKF9lKX1mdW5jdGlvbiB5bChsKXtpZihfZS0tLHQubW9uaXRvclJ1bkRlcGVuZGVuY2llcyYmdC5tb25pdG9yUnVuRGVwZW5kZW5jaWVzKF9lKSxfZT09MCYmemUpe3ZhciBoPXplO3plPW51bGwsaCgpfX10LnByZWxvYWRlZEltYWdlcz17fSx0LnByZWxvYWRlZEF1ZGlvcz17fTtmdW5jdGlvbiBjZShsKXt0Lm9uQWJvcnQmJnQub25BYm9ydChsKSxsPSJBYm9ydGVkKCIrbCsiKSIsbShsKSxUPSEwLGwrPSIuIEJ1aWxkIHdpdGggLXMgQVNTRVJUSU9OUz0xIGZvciBtb3JlIGluZm8uIjt2YXIgaD1uZXcgV2ViQXNzZW1ibHkuUnVudGltZUVycm9yKGwpO3Rocm93IGkoaCksaH12YXIgX2w9ImRhdGE6YXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtO2Jhc2U2NCwiO2Z1bmN0aW9uIEdpKGwpe3JldHVybiBsLnN0YXJ0c1dpdGgoX2wpfXZhciBZO1k9InRmbGl0ZS1zaW1kLndhc20iLEdpKFkpfHwoWT1kKFkpKTtmdW5jdGlvbiBIaShsKXt0cnl7aWYobD09WSYmXylyZXR1cm4gbmV3IFVpbnQ4QXJyYXkoXyk7aWYoIXApdGhyb3ciYm90aCBhc3luYyBhbmQgc3luYyBmZXRjaGluZyBvZiB0aGUgd2FzbSBmYWlsZWQifWNhdGNoKGgpe2NlKGgpfX1mdW5jdGlvbiB4bCgpe3JldHVybiFfJiZmJiZ0eXBlb2YgZmV0Y2g9PSJmdW5jdGlvbiI/ZmV0Y2goWSx7Y3JlZGVudGlhbHM6InNhbWUtb3JpZ2luIn0pLnRoZW4oZnVuY3Rpb24obCl7aWYoIWwub2spdGhyb3ciZmFpbGVkIHRvIGxvYWQgd2FzbSBiaW5hcnkgZmlsZSBhdCAnIitZKyInIjtyZXR1cm4gbC5hcnJheUJ1ZmZlcigpfSkuY2F0Y2goZnVuY3Rpb24oKXtyZXR1cm4gSGkoWSl9KTpQcm9taXNlLnJlc29sdmUoKS50aGVuKGZ1bmN0aW9uKCl7cmV0dXJuIEhpKFkpfSl9ZnVuY3Rpb24gYmwoKXt2YXIgbD17YTokbH07ZnVuY3Rpb24gaCh3LFUpe3ZhciBRPXcuZXhwb3J0czt0LmFzbT1RLGc9dC5hc20ucSxraShnLmJ1ZmZlciksTXI9dC5hc20uRCxtbCh0LmFzbS5yKSx5bCgpfXBsKCk7ZnVuY3Rpb24geCh3KXtoKHcuaW5zdGFuY2UpfWZ1bmN0aW9uIEEodyl7cmV0dXJuIHhsKCkudGhlbihmdW5jdGlvbihVKXtyZXR1cm4gV2ViQXNzZW1ibHkuaW5zdGFudGlhdGUoVSxsKX0pLnRoZW4oZnVuY3Rpb24oVSl7cmV0dXJuIFV9KS50aGVuKHcsZnVuY3Rpb24oVSl7bSgiZmFpbGVkIHRvIGFzeW5jaHJvbm91c2x5IHByZXBhcmUgd2FzbTogIitVKSxjZShVKX0pfWZ1bmN0aW9uIEQoKXtyZXR1cm4hXyYmdHlwZW9mIFdlYkFzc2VtYmx5Lmluc3RhbnRpYXRlU3RyZWFtaW5nPT0iZnVuY3Rpb24iJiYhR2koWSkmJnR5cGVvZiBmZXRjaD09ImZ1bmN0aW9uIj9mZXRjaChZLHtjcmVkZW50aWFsczoic2FtZS1vcmlnaW4ifSkudGhlbihmdW5jdGlvbih3KXt2YXIgVT1XZWJBc3NlbWJseS5pbnN0YW50aWF0ZVN0cmVhbWluZyh3LGwpO3JldHVybiBVLnRoZW4oeCxmdW5jdGlvbihRKXtyZXR1cm4gbSgid2FzbSBzdHJlYW1pbmcgY29tcGlsZSBmYWlsZWQ6ICIrUSksbSgiZmFsbGluZyBiYWNrIHRvIEFycmF5QnVmZmVyIGluc3RhbnRpYXRpb24iKSxBKHgpfSl9KTpBKHgpfWlmKHQuaW5zdGFudGlhdGVXYXNtKXRyeXt2YXIgTT10Lmluc3RhbnRpYXRlV2FzbShsLGgpO3JldHVybiBNfWNhdGNoKHcpe3JldHVybiBtKCJNb2R1bGUuaW5zdGFudGlhdGVXYXNtIGNhbGxiYWNrIGZhaWxlZCB3aXRoIGVycm9yOiAiK3cpLCExfXJldHVybiBEKCkuY2F0Y2goaSkse319ZnVuY3Rpb24gTnIobCl7Zm9yKDtsLmxlbmd0aD4wOyl7dmFyIGg9bC5zaGlmdCgpO2lmKHR5cGVvZiBoPT0iZnVuY3Rpb24iKXtoKHQpO2NvbnRpbnVlfXZhciB4PWguZnVuYzt0eXBlb2YgeD09Im51bWJlciI/aC5hcmc9PT12b2lkIDA/TXIuZ2V0KHgpKCk6TXIuZ2V0KHgpKGguYXJnKTp4KGguYXJnPT09dm9pZCAwP251bGw6aC5hcmcpfX1mdW5jdGlvbiBnbChsLGgseCxBKXtjZSgiQXNzZXJ0aW9uIGZhaWxlZDogIitWKGwpKyIsIGF0OiAiK1toP1YoaCk6InVua25vd24gZmlsZW5hbWUiLHgsQT9WKEEpOiJ1bmtub3duIGZ1bmN0aW9uIl0pfWZ1bmN0aW9uIHZsKGwsaCl7Y2UoIlRvIHVzZSBkbG9wZW4sIHlvdSBuZWVkIHRvIHVzZSBFbXNjcmlwdGVuJ3MgbGlua2luZyBzdXBwb3J0LCBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2Vtc2NyaXB0ZW4tY29yZS9lbXNjcmlwdGVuL3dpa2kvTGlua2luZyIpfWZ1bmN0aW9uIEVsKGwsaCl7Y2UoIlRvIHVzZSBkbG9wZW4sIHlvdSBuZWVkIHRvIHVzZSBFbXNjcmlwdGVuJ3MgbGlua2luZyBzdXBwb3J0LCBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2Vtc2NyaXB0ZW4tY29yZS9lbXNjcmlwdGVuL3dpa2kvTGlua2luZyIpfWZ1bmN0aW9uIFRsKCl7Y2UoIiIpfXZhciBGdDtGdD1mdW5jdGlvbigpe3JldHVybiBwZXJmb3JtYW5jZS5ub3coKX07dmFyIEFsPSEwO2Z1bmN0aW9uIHdsKGwpe3JldHVybiBYW1ZpKCk+PjJdPWwsbH1mdW5jdGlvbiBSbChsLGgpe3ZhciB4O2lmKGw9PT0wKXg9RGF0ZS5ub3coKTtlbHNlIGlmKChsPT09MXx8bD09PTQpJiZBbCl4PUZ0KCk7ZWxzZSByZXR1cm4gd2woMjgpLC0xO3JldHVybiBYW2g+PjJdPXgvMWUzfDAsWFtoKzQ+PjJdPXglMWUzKjFlMyoxZTN8MCwwfWZ1bmN0aW9uIFNsKCl7cmV0dXJuIDIxNDc0ODM2NDh9ZnVuY3Rpb24gSWwobCxoLHgpeyRlLmNvcHlXaXRoaW4obCxoLGgreCl9ZnVuY3Rpb24gRmwobCl7dHJ5e3JldHVybiBnLmdyb3cobC1CaS5ieXRlTGVuZ3RoKzY1NTM1Pj4+MTYpLGtpKGcuYnVmZmVyKSwxfWNhdGNoe319ZnVuY3Rpb24gUGwobCl7dmFyIGg9JGUubGVuZ3RoO2w9bD4+PjA7dmFyIHg9MjE0NzQ4MzY0ODtpZihsPngpcmV0dXJuITE7Zm9yKHZhciBBPTE7QTw9NDtBKj0yKXt2YXIgRD1oKigxKy4yL0EpO0Q9TWF0aC5taW4oRCxsKzEwMDY2MzI5Nik7dmFyIE09TWF0aC5taW4oeCxxKE1hdGgubWF4KGwsRCksNjU1MzYpKSx3PUZsKE0pO2lmKHcpcmV0dXJuITB9cmV0dXJuITF9ZnVuY3Rpb24gRGwobCl7Zm9yKHZhciBoPUZ0KCk7RnQoKS1oPGw7KTt9dmFyIFVyPXt9O2Z1bmN0aW9uIENsKCl7cmV0dXJuIGF8fCIuL3RoaXMucHJvZ3JhbSJ9ZnVuY3Rpb24gR2UoKXtpZighR2Uuc3RyaW5ncyl7dmFyIGw9KHR5cGVvZiBuYXZpZ2F0b3I9PSJvYmplY3QiJiZuYXZpZ2F0b3IubGFuZ3VhZ2VzJiZuYXZpZ2F0b3IubGFuZ3VhZ2VzWzBdfHwiQyIpLnJlcGxhY2UoIi0iLCJfIikrIi5VVEYtOCIsaD17VVNFUjoid2ViX3VzZXIiLExPR05BTUU6IndlYl91c2VyIixQQVRIOiIvIixQV0Q6Ii8iLEhPTUU6Ii9ob21lL3dlYl91c2VyIixMQU5HOmwsXzpDbCgpfTtmb3IodmFyIHggaW4gVXIpVXJbeF09PT12b2lkIDA/ZGVsZXRlIGhbeF06aFt4XT1Vclt4XTt2YXIgQT1bXTtmb3IodmFyIHggaW4gaClBLnB1c2goeCsiPSIraFt4XSk7R2Uuc3RyaW5ncz1BfXJldHVybiBHZS5zdHJpbmdzfXZhciBQdD17bWFwcGluZ3M6e30sYnVmZmVyczpbbnVsbCxbXSxbXV0scHJpbnRDaGFyOmZ1bmN0aW9uKGwsaCl7dmFyIHg9UHQuYnVmZmVyc1tsXTtoPT09MHx8aD09PTEwPygobD09PTE/eTptKShMKHgsMCkpLHgubGVuZ3RoPTApOngucHVzaChoKX0sdmFyYXJnczp2b2lkIDAsZ2V0OmZ1bmN0aW9uKCl7UHQudmFyYXJncys9NDt2YXIgbD1YW1B0LnZhcmFyZ3MtND4+Ml07cmV0dXJuIGx9LGdldFN0cjpmdW5jdGlvbihsKXt2YXIgaD1WKGwpO3JldHVybiBofSxnZXQ2NDpmdW5jdGlvbihsLGgpe3JldHVybiBsfX07ZnVuY3Rpb24gT2wobCxoKXt2YXIgeD0wO3JldHVybiBHZSgpLmZvckVhY2goZnVuY3Rpb24oQSxEKXt2YXIgTT1oK3g7WFtsK0QqND4+Ml09TSxlZShBLE0pLHgrPUEubGVuZ3RoKzF9KSwwfWZ1bmN0aW9uIE1sKGwsaCl7dmFyIHg9R2UoKTtYW2w+PjJdPXgubGVuZ3RoO3ZhciBBPTA7cmV0dXJuIHguZm9yRWFjaChmdW5jdGlvbihEKXtBKz1ELmxlbmd0aCsxfSksWFtoPj4yXT1BLDB9ZnVuY3Rpb24gTmwobCl7R2wobCl9ZnVuY3Rpb24gVWwobCl7cmV0dXJuIDB9ZnVuY3Rpb24gQmwobCxoLHgsQSxEKXt9ZnVuY3Rpb24ga2wobCxoLHgsQSl7Zm9yKHZhciBEPTAsTT0wO008eDtNKyspe2Zvcih2YXIgdz1YW2grTSo4Pj4yXSxVPVhbaCsoTSo4KzQpPj4yXSxRPTA7UTxVO1ErKylQdC5wcmludENoYXIobCwkZVt3K1FdKTtEKz1VfXJldHVybiBYW0E+PjJdPUQsMH1mdW5jdGlvbiBMbCgpe2lmKHR5cGVvZiBjcnlwdG89PSJvYmplY3QiJiZ0eXBlb2YgY3J5cHRvLmdldFJhbmRvbVZhbHVlcz09ImZ1bmN0aW9uIil7dmFyIGw9bmV3IFVpbnQ4QXJyYXkoMSk7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGNyeXB0by5nZXRSYW5kb21WYWx1ZXMobCksbFswXX19ZWxzZSByZXR1cm4gZnVuY3Rpb24oKXtjZSgicmFuZG9tRGV2aWNlIil9fWZ1bmN0aW9uIER0KGwsaCl7RHQucmFuZG9tRGV2aWNlfHwoRHQucmFuZG9tRGV2aWNlPUxsKCkpO2Zvcih2YXIgeD0wO3g8aDt4KyspSXRbbCt4Pj4wXT1EdC5yYW5kb21EZXZpY2UoKTtyZXR1cm4gMH12YXIgJGw9e2E6Z2wsZTp2bCxkOkVsLGI6VGwsbjpSbCxoOlNsLGw6SWwsbTpQbCxwOkRsLGY6T2wsZzpNbCxqOk5sLGk6VWwsazpCbCxjOmtsLG86RHR9O2JsKCksdC5fX193YXNtX2NhbGxfY3RvcnM9ZnVuY3Rpb24oKXtyZXR1cm4odC5fX193YXNtX2NhbGxfY3RvcnM9dC5hc20ucikuYXBwbHkobnVsbCxhcmd1bWVudHMpfSx0Ll9nZXRNb2RlbEJ1ZmZlck1lbW9yeU9mZnNldD1mdW5jdGlvbigpe3JldHVybih0Ll9nZXRNb2RlbEJ1ZmZlck1lbW9yeU9mZnNldD10LmFzbS5zKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LHQuX2dldElucHV0TWVtb3J5T2Zmc2V0PWZ1bmN0aW9uKCl7cmV0dXJuKHQuX2dldElucHV0TWVtb3J5T2Zmc2V0PXQuYXNtLnQpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sdC5fZ2V0SW5wdXRIZWlnaHQ9ZnVuY3Rpb24oKXtyZXR1cm4odC5fZ2V0SW5wdXRIZWlnaHQ9dC5hc20udSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfSx0Ll9nZXRJbnB1dFdpZHRoPWZ1bmN0aW9uKCl7cmV0dXJuKHQuX2dldElucHV0V2lkdGg9dC5hc20udikuYXBwbHkobnVsbCxhcmd1bWVudHMpfSx0Ll9nZXRJbnB1dENoYW5uZWxDb3VudD1mdW5jdGlvbigpe3JldHVybih0Ll9nZXRJbnB1dENoYW5uZWxDb3VudD10LmFzbS53KS5hcHBseShudWxsLGFyZ3VtZW50cyl9LHQuX2dldE91dHB1dE1lbW9yeU9mZnNldD1mdW5jdGlvbigpe3JldHVybih0Ll9nZXRPdXRwdXRNZW1vcnlPZmZzZXQ9dC5hc20ueCkuYXBwbHkobnVsbCxhcmd1bWVudHMpfSx0Ll9nZXRPdXRwdXRIZWlnaHQ9ZnVuY3Rpb24oKXtyZXR1cm4odC5fZ2V0T3V0cHV0SGVpZ2h0PXQuYXNtLnkpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sdC5fZ2V0T3V0cHV0V2lkdGg9ZnVuY3Rpb24oKXtyZXR1cm4odC5fZ2V0T3V0cHV0V2lkdGg9dC5hc20ueikuYXBwbHkobnVsbCxhcmd1bWVudHMpfSx0Ll9nZXRPdXRwdXRDaGFubmVsQ291bnQ9ZnVuY3Rpb24oKXtyZXR1cm4odC5fZ2V0T3V0cHV0Q2hhbm5lbENvdW50PXQuYXNtLkEpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sdC5fbG9hZE1vZGVsPWZ1bmN0aW9uKCl7cmV0dXJuKHQuX2xvYWRNb2RlbD10LmFzbS5CKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LHQuX3J1bkluZmVyZW5jZT1mdW5jdGlvbigpe3JldHVybih0Ll9ydW5JbmZlcmVuY2U9dC5hc20uQykuYXBwbHkobnVsbCxhcmd1bWVudHMpfTt2YXIgVmk9dC5fX19lcnJub19sb2NhdGlvbj1mdW5jdGlvbigpe3JldHVybihWaT10Ll9fX2Vycm5vX2xvY2F0aW9uPXQuYXNtLkUpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sQ3Q7ZnVuY3Rpb24gemwobCl7dGhpcy5uYW1lPSJFeGl0U3RhdHVzIix0aGlzLm1lc3NhZ2U9IlByb2dyYW0gdGVybWluYXRlZCB3aXRoIGV4aXQoIitsKyIpIix0aGlzLnN0YXR1cz1sfXplPWZ1bmN0aW9uIGwoKXtDdHx8QnIoKSxDdHx8KHplPWwpfTtmdW5jdGlvbiBCcihsKXtpZihfZT4wfHwoY2woKSxfZT4wKSlyZXR1cm47ZnVuY3Rpb24gaCgpe0N0fHwoQ3Q9ITAsdC5jYWxsZWRSdW49ITAsIVQmJihmbCgpLG4odCksdC5vblJ1bnRpbWVJbml0aWFsaXplZCYmdC5vblJ1bnRpbWVJbml0aWFsaXplZCgpLGxsKCkpKX10LnNldFN0YXR1cz8odC5zZXRTdGF0dXMoIlJ1bm5pbmcuLi4iKSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7c2V0VGltZW91dChmdW5jdGlvbigpe3Quc2V0U3RhdHVzKCIiKX0sMSksaCgpfSwxKSk6aCgpfXQucnVuPUJyO2Z1bmN0aW9uIEdsKGwsaCl7SGwobCl9ZnVuY3Rpb24gSGwobCl7dWwoKXx8KHQub25FeGl0JiZ0Lm9uRXhpdChsKSxUPSEwKSx1KGwsbmV3IHpsKGwpKX1pZih0LnByZUluaXQpZm9yKHR5cGVvZiB0LnByZUluaXQ9PSJmdW5jdGlvbiImJih0LnByZUluaXQ9W3QucHJlSW5pdF0pO3QucHJlSW5pdC5sZW5ndGg+MDspdC5wcmVJbml0LnBvcCgpKCk7cmV0dXJuIEJyKCksZS5yZWFkeX19KCk7dHlwZW9mIGV4cG9ydHM9PSJvYmplY3QiJiZ0eXBlb2YgbW9kdWxlPT0ib2JqZWN0Ij9tb2R1bGUuZXhwb3J0cz1TdDp0eXBlb2YgZGVmaW5lPT0iZnVuY3Rpb24iJiZkZWZpbmUuYW1kP2RlZmluZShbXSxmdW5jdGlvbigpe3JldHVybiBTdH0pOnR5cGVvZiBleHBvcnRzPT0ib2JqZWN0IiYmKGV4cG9ydHMuY3JlYXRlVm9uYWdlVEZMaXRlU2ltZE1vZHVsZT1TdCk7Y2xhc3MgdGx7Y29uc3RydWN0b3IoKXt0aGlzLmlzU0lNRFN1cHBvcnRlZD0hMSx0aGlzLmlzVGhyZWFkc1N1cHBvcnRlZD0hMSx0aGlzLmlucHV0V2lkdGg9MCx0aGlzLmlucHV0SGVpZ2h0PTAsdGhpcy5pbnB1dENoYW5uZWxDb3VudD0wLHRoaXMuaW5wdXRNZW1vcnlPZmZzZXQ9MCx0aGlzLm91dHB1dFdpZHRoPTAsdGhpcy5vdXRwdXRIZWlnaHQ9MCx0aGlzLm91dHB1dENoYW5uZWxDb3VudD0wLHRoaXMub3V0cHV0TWVtb3J5T2Zmc2V0PTB9fWNvbnN0IHJsPSJodHRwczovL2Qzb3Bxam1xenhmMDU3LmNsb3VkZnJvbnQubmV0L21sL3NlbGZpZV9zZWdtZW50YXRpb24vNC4wLjAvIixubD0iaHR0cHM6Ly9kM29wcWptcXp4ZjA1Ny5jbG91ZGZyb250Lm5ldC9tbC9zZWxmaWVfc2VnbWVudGF0aW9uLzQuMC4wLyI7YXN5bmMgZnVuY3Rpb24gaWwocj1ybCxlPW5sKXtsZXQgdD1uZXcgdGw7dmFyIG49bmV3IFByb21pc2UoZnVuY3Rpb24oaSxvKXthc3luYyBmdW5jdGlvbiBzKCl7cmV0dXJuIFN0KHtsb2NhdGVGaWxlOmZ1bmN0aW9uKGYpe3JldHVybiByK2Z9fSl9YXN5bmMgZnVuY3Rpb24gYSh1KXtyZXR1cm4gbmV3IFByb21pc2UoYXN5bmMoZixjKT0+e2NvbnN0IGQ9dTtpZih0eXBlb2YgZD09InVuZGVmaW5lZCIpcmV0dXJuIGMoIlRGTGl0ZSBiYWNrZW5kIHVuYXZhaWxhYmxlOiB3YXNtU2ltZCIpO2NvbnN0IHA9InNlbGZpZV9zZWdtZW50YXRpb25fbGFuZHNjYXBlIjtjb25zb2xlLmxvZygiTG9hZGluZyB0ZmxpdGUgbW9kZWw6IixwKTtsZXQgeT1lK2Ake3B9LnRmbGl0ZWA7Y29uc29sZS5sb2coIlRGTGl0ZSBtb2RlbFVybDogIit5KTt0cnl7Y29uc3QgXz1hd2FpdChhd2FpdCBmZXRjaCh5KSkuYXJyYXlCdWZmZXIoKTtjb25zb2xlLmxvZygiTW9kZWwgYnVmZmVyIHNpemU6IixfLmJ5dGVMZW5ndGgpO2NvbnN0IGI9ZC5fZ2V0TW9kZWxCdWZmZXJNZW1vcnlPZmZzZXQoKTtjb25zb2xlLmxvZygiTW9kZWwgYnVmZmVyIG1lbW9yeSBvZmZzZXQ6IixiKSxjb25zb2xlLmxvZygiTG9hZGluZyBtb2RlbCBidWZmZXIuLi4iKSxkLkhFQVBVOC5zZXQobmV3IFVpbnQ4QXJyYXkoXyksYik7Y29uc3QgZz1kLl9sb2FkTW9kZWwoXy5ieXRlTGVuZ3RoKTtpZihjb25zb2xlLmxvZygiTG9hZCBtb2RlbCByZXN1bHQ6IixnKSxnIT09MCl7YygiQ2Fubm90IGxvYWQgbW9kZWwiKTtyZXR1cm59dC5pbnB1dFdpZHRoPWQuX2dldElucHV0V2lkdGgoKSx0LmlucHV0SGVpZ2h0PWQuX2dldElucHV0SGVpZ2h0KCksdC5pbnB1dENoYW5uZWxDb3VudD1kLl9nZXRJbnB1dENoYW5uZWxDb3VudCgpLHQuaW5wdXRNZW1vcnlPZmZzZXQ9ZC5fZ2V0SW5wdXRNZW1vcnlPZmZzZXQoKSxjb25zb2xlLmxvZygiSW5wdXQgbWVtb3J5IG9mZnNldDoiLHQuaW5wdXRNZW1vcnlPZmZzZXQpLGNvbnNvbGUubG9nKCJJbnB1dCBoZWlnaHQ6Iix0LmlucHV0SGVpZ2h0KSxjb25zb2xlLmxvZygiSW5wdXQgd2lkdGg6Iix0LmlucHV0V2lkdGgpLGNvbnNvbGUubG9nKCJJbnB1dCBjaGFubmVsczoiLHQuaW5wdXRDaGFubmVsQ291bnQpLHQub3V0cHV0TWVtb3J5T2Zmc2V0PWQuX2dldE91dHB1dE1lbW9yeU9mZnNldCgpLHQub3V0cHV0V2lkdGg9ZC5fZ2V0T3V0cHV0V2lkdGgoKSx0Lm91dHB1dEhlaWdodD1kLl9nZXRPdXRwdXRIZWlnaHQoKSx0Lm91dHB1dENoYW5uZWxDb3VudD1kLl9nZXRPdXRwdXRDaGFubmVsQ291bnQoKSxjb25zb2xlLmxvZygiT3V0cHV0IG1lbW9yeSBvZmZzZXQ6Iix0Lm91dHB1dE1lbW9yeU9mZnNldCksY29uc29sZS5sb2coIk91dHB1dCBoZWlnaHQ6Iix0Lm91dHB1dEhlaWdodCksY29uc29sZS5sb2coIk91dHB1dCB3aWR0aDoiLHQub3V0cHV0V2lkdGgpLGNvbnNvbGUubG9nKCJPdXRwdXQgY2hhbm5lbHM6Iix0Lm91dHB1dENoYW5uZWxDb3VudCksdC5zZWxlY3RlZFRGTGl0ZT1kfWNhdGNoKG0pe2MobSk7cmV0dXJufWYoKX0pfXMoKS50aGVuKHU9PntpZih1PT09bnVsbCl0aHJvdyBjb25zb2xlLmVycm9yKCJsb2FkVEZMaXRlIG51bGwiKSwibG9hZFRGTGl0ZSBudWxsIjthKHUpLnRoZW4oZj0+e2kodCl9KS5jYXRjaChmPT57Y29uc29sZS5lcnJvcigibG9hZFRGTGl0ZU1vZGVsIGVycm9yIiksbygibG9hZFRGTGl0ZU1vZGVsIGVycm9yIil9KX0pLmNhdGNoKHU9Pntjb25zb2xlLmVycm9yKCJsb2FkVEZMaXRlIGVycm9yOiIsdSksbygibG9hZFRGTGl0ZSBlcnJvcjoiK3UpfSl9KTtyZXR1cm4gbn1jbGFzcyBvbHtjb25zdHJ1Y3Rvcigpe3RoaXMuY2FudmFzPW5ldyBPZmZzY3JlZW5DYW52YXMoMCwwKSx0aGlzLmNvbnRleHQ9dGhpcy5jYW52YXMuZ2V0Q29udGV4dCgiMmQiLHt3aWxsUmVhZEZyZXF1ZW50bHk6ITB9KSx0aGlzLnBpeGVsQ291bnQ9MCx0aGlzLmlucHV0T2Zmc2V0PTAsdGhpcy5vdXRwdXRPZmZzZXQ9MH1hc3luYyBpbml0KGUsdCl7dGhpcy5pbmZvcz1hd2FpdCBpbChlLHQpLHRoaXMuaW5mb3MmJih0aGlzLmNhbnZhcy53aWR0aD10aGlzLmluZm9zLmlucHV0V2lkdGgsdGhpcy5jYW52YXMuaGVpZ2h0PXRoaXMuaW5mb3MuaW5wdXRIZWlnaHQsdGhpcy5waXhlbENvdW50PXRoaXMuaW5mb3MuaW5wdXRXaWR0aCp0aGlzLmluZm9zLmlucHV0SGVpZ2h0LHRoaXMubWFzaz1uZXcgSW1hZ2VEYXRhKHRoaXMuaW5mb3MuaW5wdXRXaWR0aCx0aGlzLmluZm9zLmlucHV0SGVpZ2h0KSx0aGlzLmlucHV0T2Zmc2V0PXRoaXMuaW5mb3MuaW5wdXRNZW1vcnlPZmZzZXQvNCx0aGlzLm91dHB1dE9mZnNldD10aGlzLmluZm9zLm91dHB1dE1lbW9yeU9mZnNldC80KX1nZXRPdXRwdXREaW1lbnNpb25zKCl7dmFyIGUsdCxuLGk7cmV0dXJue3dpZHRoOih0PShlPXRoaXMuaW5mb3MpPT1udWxsP3ZvaWQgMDplLm91dHB1dFdpZHRoKSE9bnVsbD90OjAsaGVpZ2h0OihpPShuPXRoaXMuaW5mb3MpPT1udWxsP3ZvaWQgMDpuLm91dHB1dEhlaWdodCkhPW51bGw/aTowfX1hc3luYyBwcm9jZXNzKGUpe2lmKCF0aGlzLm1hc2t8fCF0aGlzLmluZm9zKXJldHVybjtjb25zdCB0PXRoaXMuaW5mb3MuaW5wdXRXaWR0aCxuPXRoaXMuaW5mb3MuaW5wdXRIZWlnaHQ7dGhpcy5jb250ZXh0LmRyYXdJbWFnZShlLDAsMCxlLndpZHRoLGUuaGVpZ2h0LDAsMCx0LG4pO2NvbnN0IGk9dGhpcy5jb250ZXh0LmdldEltYWdlRGF0YSgwLDAsdCxuKSxvPXRoaXMuaW5mb3Muc2VsZWN0ZWRURkxpdGUuSEVBUEYzMjtmb3IobGV0IHM9MDtzPHRoaXMucGl4ZWxDb3VudDtzKyspe2NvbnN0IGE9dGhpcy5pbnB1dE9mZnNldCtzKjM7b1thXT1pLmRhdGFbcyo0XS8yNTUsb1thKzFdPWkuZGF0YVtzKjQrMV0vMjU1LG9bYSsyXT1pLmRhdGFbcyo0KzJdLzI1NX10aGlzLmluZm9zLnNlbGVjdGVkVEZMaXRlLl9ydW5JbmZlcmVuY2UoKTtmb3IobGV0IHM9MDtzPHRoaXMucGl4ZWxDb3VudDtzKyspe2NvbnN0IGE9dGhpcy5pbmZvcy5zZWxlY3RlZFRGTGl0ZS5IRUFQRjMyW3RoaXMub3V0cHV0T2Zmc2V0K3NdO3RoaXMubWFzay5kYXRhW3MqNF09dGhpcy5tYXNrLmRhdGFbcyo0KzNdPTI1NSphfXJldHVybiBjcmVhdGVJbWFnZUJpdG1hcCh0aGlzLm1hc2spfX1jbGFzcyBzbHtjb25zdHJ1Y3Rvcigpe3RoaXMuc2VsZmllU2VnbWVudGF0aW9uPW5ldyBvbCx0aGlzLnByZXZpb3VzRGltZW5zaW9ucz17d2lkdGg6MCxoZWlnaHQ6MH19YXN5bmMgaW5pdChlKXthd2FpdCB0aGlzLnNlbGZpZVNlZ21lbnRhdGlvbi5pbml0KGUud2FzbUFzc2V0VXJpUGF0aCxlLnRmbGl0ZUFzc2V0VXJpUGF0aCk7Y29uc3R7d2lkdGg6dCxoZWlnaHQ6bn09dGhpcy5zZWxmaWVTZWdtZW50YXRpb24uZ2V0T3V0cHV0RGltZW5zaW9ucygpO3RoaXMuYmFja2dyb3VuZEZpbHRlcj1uZXcgZWwoe2ZvcmVncm91bmRXaWR0aDoxLGZvcmVncm91bmRIZWlnaHQ6MSxtYXNrV2lkdGg6dCxtYXNrSGVpZ2h0Om59KX1hc3luYyB0cmFuc2Zvcm0oZSx0KXt2YXIgbyxzLGEsdTtjb25zdCBuPWF3YWl0IGNyZWF0ZUltYWdlQml0bWFwKGUpLGk9YXdhaXQgdGhpcy5zZWxmaWVTZWdtZW50YXRpb24ucHJvY2VzcyhuKTtpPygobi53aWR0aCE9PXRoaXMucHJldmlvdXNEaW1lbnNpb25zLndpZHRofHxuLmhlaWdodCE9PXRoaXMucHJldmlvdXNEaW1lbnNpb25zLmhlaWdodCkmJih0aGlzLnByZXZpb3VzRGltZW5zaW9ucy53aWR0aD1uLndpZHRoLHRoaXMucHJldmlvdXNEaW1lbnNpb25zLmhlaWdodD1uLmhlaWdodCxhd2FpdCgobz10aGlzLmJhY2tncm91bmRGaWx0ZXIpPT1udWxsP3ZvaWQgMDpvLnJlc2l6ZUZvcmVncm91bmQobi53aWR0aCxuLmhlaWdodCkpKSxhd2FpdCgocz10aGlzLmJhY2tncm91bmRGaWx0ZXIpPT1udWxsP3ZvaWQgMDpzLnByb2Nlc3MobixpKSksZS5jbG9zZSgpLHQuZW5xdWV1ZShuZXcgVmlkZW9GcmFtZSgoYT10aGlzLmJhY2tncm91bmRGaWx0ZXIpPT1udWxsP3ZvaWQgMDphLmNhbnZhcyx7dGltZXN0YW1wOih1PWUudGltZXN0YW1wKSE9bnVsbD91OjAsYWxwaGE6ImRpc2NhcmQifSkpKTp0LmVucXVldWUoZSl9YXN5bmMgc2V0QmFja2dyb3VuZE9wdGlvbnMoZSl7dmFyIHQ7YXdhaXQoKHQ9dGhpcy5iYWNrZ3JvdW5kRmlsdGVyKT09bnVsbD92b2lkIDA6dC5zZXRCYWNrZ3JvdW5kT3B0aW9ucyhlKSl9YXN5bmMgc2V0VmlkZW9CR1JlYWRhYmxlKGUpe3ZhciB0O2F3YWl0KCh0PXRoaXMuYmFja2dyb3VuZEZpbHRlcik9PW51bGw/dm9pZCAwOnQuc2V0VmlkZW9CR1JlYWRhYmxlKGUpKX1hc3luYyBzZXRWaXJ0dWFsQkdJbWFnZShlKXt2YXIgdDthd2FpdCgodD10aGlzLmJhY2tncm91bmRGaWx0ZXIpPT1udWxsP3ZvaWQgMDp0LnNldFZpcnR1YWxCR0ltYWdlKGUpKX1zZXRGbGlja2VyaW5nT3B0aW9ucyhlKXt2YXIgdDsodD10aGlzLmJhY2tncm91bmRGaWx0ZXIpPT1udWxsfHx0LnNldEZsaWNrZXJpbmdPcHRpb25zKGUpfX1jb25zdCBPcj1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuYmFja2dyb3VuZFRyYW5zZm9ybWVyPW5ldyBzbCx0aGlzLm1lZGlhUHJvY2Vzc29yPW5ldyB3cyx0aGlzLnJhdGU9MzB9YXN5bmMgaW5pdChlKXthd2FpdCB0aGlzLmJhY2tncm91bmRUcmFuc2Zvcm1lci5pbml0KGUpLGF3YWl0IHRoaXMubWVkaWFQcm9jZXNzb3Iuc2V0VHJhbnNmb3JtZXJzKFt0aGlzLmJhY2tncm91bmRUcmFuc2Zvcm1lcl0pLHRoaXMubWVkaWFQcm9jZXNzb3Iuc2V0VHJhY2tFeHBlY3RlZFJhdGUodGhpcy5yYXRlKSx0aGlzLm1lZGlhUHJvY2Vzc29yLm9uQW55KCh0LG4pPT57dmFyIGk7KGk9dGhpcy5yZXNvbHZlT25NZWRpYVByb2Nlc3Nvcik9PW51bGx8fGkuY2FsbCh0aGlzLHtuYW1lOnQsZGF0YTpufSl9KX1hc3luYyBvbk1lZGlhUHJvY2Vzc29yRXZlbnQoKXtyZXR1cm4gYXdhaXQgbmV3IFByb21pc2UoZT0+dGhpcy5yZXNvbHZlT25NZWRpYVByb2Nlc3Nvcj1lKX1hc3luYyBzZXRUcmFja0V4cGVjdGVkUmF0ZShlKXt0aGlzLnJhdGU9ZSx0aGlzLm1lZGlhUHJvY2Vzc29yLnNldFRyYWNrRXhwZWN0ZWRSYXRlKGUpfWFzeW5jIHRyYW5zZm9ybShlLHQpe3RoaXMubWVkaWFQcm9jZXNzb3IudHJhbnNmb3JtKGUsdCl9YXN5bmMgc2V0QmFja2dyb3VuZE9wdGlvbnMoZSl7dmFyIHQ7YXdhaXQoKHQ9dGhpcy5iYWNrZ3JvdW5kVHJhbnNmb3JtZXIpPT1udWxsP3ZvaWQgMDp0LnNldEJhY2tncm91bmRPcHRpb25zKGUpKX1zZXRWaWRlb0JHUmVhZGFibGUoZSl7dGhpcy5iYWNrZ3JvdW5kVHJhbnNmb3JtZXIuc2V0VmlkZW9CR1JlYWRhYmxlKGUpfWFzeW5jIHNldFZpcnR1YWxCR0ltYWdlKGUpe2F3YWl0IHRoaXMuYmFja2dyb3VuZFRyYW5zZm9ybWVyLnNldFZpcnR1YWxCR0ltYWdlKGUpfWFzeW5jIHRlcm1pbmF0ZSgpe2F3YWl0IHRoaXMubWVkaWFQcm9jZXNzb3IuZGVzdHJveSgpfXNldEZsaWNrZXJpbmdPcHRpb25zKGUpe3RoaXMuYmFja2dyb3VuZFRyYW5zZm9ybWVyLnNldEZsaWNrZXJpbmdPcHRpb25zKGUpfXNldFZvbmFnZU1ldGFkYXRhKGUpe2ZzKGUpfX07bGV0IFVpPU9yOygoKT0+e1hpKCJQcm9jZXNzb3JXb3JrZXIiLE9yKX0pKCl9KSgpOwo=",cu=typeof window!="undefined"&&window.Blob&&new Blob([atob(uu)],{type:"text/javascript;charset=utf-8"});function w3(){const i=cu&&(window.URL||window.webkitURL).createObjectURL(cu);try{return i?new Worker(i,{}):new Worker("data:application/javascript;base64,"+uu,{type:"module"})}finally{i&&(window.URL||window.webkitURL).revokeObjectURL(i)}}class F3 extends Es{constructor(){super(...arguments),this.rate=30}async init(n){this.worker=await z2($o,w3),await this.worker.init(n),await this.worker.setVonageMetadata(Rs()),await this.setBackgroundOptions(n),this.listenWorker()}async setTrackExpectedRate(n){var o;await((o=this.worker)==null?void 0:o.setTrackExpectedRate(n))}async setBackgroundOptions(n){var p,y,S;const{transformerType:o}=n;switch(o){case"VideoBackground":await((p=this.worker)==null?void 0:p.setVideoBGReadable(await Bs.createVideoReadable(n.backgroundAssetUri)));break;case"VirtualBackground":await((y=this.worker)==null?void 0:y.setVirtualBGImage(await Bs.createImageCanvas(n.backgroundAssetUri)));break}await((S=this.worker)==null?void 0:S.setBackgroundOptions(n))}async transform(n,o){var p;await((p=this.worker)==null?void 0:p.transform(n,o))}async destroy(){var n;await((n=this.worker)==null?void 0:n.terminate())}async setFlickeringOptions(n){var o;await((o=this.worker)==null?void 0:o.setFlickeringOptions(n))}async listenWorker(){var n,o,p;for(;(n=this.worker)!=null&&n.worker;){const{name:y,data:S}=await((o=this.worker)==null?void 0:o.onMediaProcessorEvent());switch(y){case"error":case"warn":this.emit(y,S);break;case"pipelineInfo":switch(this.emit(y,S),S){case"pipeline_ended":case"pipeline_ended_with_error":await((p=this.worker)==null?void 0:p.terminate());return}break}}}}class au extends Es{constructor(){super(),this.worker=new F3,this.connector=new k2(this.worker)}async init(n){await this.worker.init(n),this.worker.onAny((o,p)=>this.emit(o,p))}async setBackgroundOptions(n){await this.worker.setBackgroundOptions(n)}setTrackExpectedRate(n){this.worker.setTrackExpectedRate(n)}getConnector(){return this.connector}static async create(n){const o=new this;return await o.init(n),o}}function H3(){return mi}function C3(){return pi}function N3(){return bi}function J3(){return yi}function E3(){return gi}function k3(){return Zi}function U3(){return vi}var du=(i=>(i.FAST="FAST",i.PRECISE="PRECISE",i))(du||{});async function K3(i){return await au.create(i)}bn.BlurRadius=Kr,bn.ErrorFunction=ws,bn.MediapipeHelper=Fs,bn.PipelineInfoData=fi,bn.SelfieSegmentationType=du,bn.VonageMediaProcessor=au,bn.WarningType=Ys,bn.createVonageMediaProcessor=K3,bn.getVonageFaceDetection=J3,bn.getVonageFaceMash=E3,bn.getVonageHands=C3,bn.getVonageHolistic=N3,bn.getVonageObjectron=k3,bn.getVonagePose=U3,bn.getVonageSelfieSegmentation=H3,bn.isSupported=K2,Object.defineProperties(bn,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}})});
|
|
457
|
+
`;class T3 extends Vr{getFragmentShader(){return I3}getVertexShader(){return S3}}class L3 extends Oo{constructor(n,o,m){super(),this.context=n;const y={context:n,height:m,width:o};this.addStep({program:new T3({...y,disableFramebuffer:!0}),getUniforms:()=>({texture:fn(n,this.inputImage),invert_y:!0})})}setData(n){this.inputImage=n}}class Y3{constructor(n){this.canvas=new OffscreenCanvas(0,0),this.context=this.canvas.getContext("webgl2"),this.canvas.width=n.width,this.canvas.height=n.height,this.resize=new L3(this.context,n.width,n.height)}resizeForeground(n,o){this.canvas.width=n,this.canvas.height=o,this.resize.resizeOutput(n,o)}async process(n){var o,m;return this.canvas.width=this.canvas.width,(o=this.resize)==null||o.setData(n),(m=this.resize)==null||m.run(),this.canvas}}class w3{constructor(n){this.canvas=new OffscreenCanvas(0,0),this.context=this.canvas.getContext("webgl2"),this.canvas.width=n.foregroundWidth,this.canvas.height=n.foregroundHeight,this.improveMaskSegmentation=new x3(this.context,n.maskWidth,n.maskHeight),this.backgroundImage=new uu(this.context),this.backgroundVideo=new l3(this.context),this.backgroundResizer=new Y3({width:n.foregroundWidth,height:n.foregroundHeight})}setBackgroundOptions(n){switch(n.transformerType){case"BackgroundBlur":this.activePipeline=new s3(this.context,this.getBlurSize(n.radius));break;case"SilhouetteBlur":this.activePipeline=new a3(this.context,this.getBlurSize(n.radius));break;case"VideoBackground":this.activePipeline=this.backgroundVideo;break;case"VirtualBackground":this.activePipeline=this.backgroundImage;break}this.options=n}setFlickeringOptions(n){var o;(o=this.improveMaskSegmentation)==null||o.setOptions(n)}setVideoBGReadable(n){this.backgroundVideo.inputVideo=n}async setVirtualBGImage(n){this.virtualBGImage=n,this.backgroundImage.inputBackgroundImage=await this.backgroundResizer.process(n)}async process(n,o){var m,y,S,F,L;if(this.activePipeline&&n.width&&(o==null?void 0:o.width)){let J=o;(((m=this.options)==null?void 0:m.selfieSegmentationType)&&((y=this.options)==null?void 0:y.selfieSegmentationType)==="PRECISE"||!((S=this.options)!=null&&S.selfieSegmentationType)&&this.activePipeline.preciseMaskEnabled)&&(this.improveMaskSegmentation.setData(n,o),this.improveMaskSegmentation.run(),J=this.improveMaskSegmentation.output),(F=this.activePipeline)==null||F.setData(n,J),(L=this.activePipeline)==null||L.run()}}async resizeForeground(n,o){var m;this.canvas.width=n,this.canvas.height=o,this.backgroundImage.resizeOutput(n,o),this.backgroundVideo.resizeOutput(n,o),this.backgroundResizer.resizeForeground(n,o),(m=this.activePipeline)==null||m.resizeOutput(n,o),this.virtualBGImage&&(this.backgroundImage.inputBackgroundImage=await this.backgroundResizer.process(this.virtualBGImage))}getBlurSize(n=Kr.Low){switch(n){case Kr.Low:return 5;case Kr.High:return 12}return n}}class au{constructor(){this.selfieSegmentation=new Fs,this.previousDimensions={width:0,height:0}}async init(n){await this.selfieSegmentation.init(n.wasmAssetUriPath,n.tfliteAssetUriPath);const{width:o,height:m}=this.selfieSegmentation.getOutputDimensions();this.backgroundFilter=new w3({foregroundWidth:1,foregroundHeight:1,maskWidth:o,maskHeight:m})}async transform(n,o){var S,F,L,J;const m=await createImageBitmap(n),y=await this.selfieSegmentation.process(m);y?((m.width!==this.previousDimensions.width||m.height!==this.previousDimensions.height)&&(this.previousDimensions.width=m.width,this.previousDimensions.height=m.height,await((S=this.backgroundFilter)==null?void 0:S.resizeForeground(m.width,m.height))),await((F=this.backgroundFilter)==null?void 0:F.process(m,y)),n.close(),o.enqueue(new VideoFrame((L=this.backgroundFilter)==null?void 0:L.canvas,{timestamp:(J=n.timestamp)!=null?J:0,alpha:"discard"}))):o.enqueue(n)}async setBackgroundOptions(n){var o;await((o=this.backgroundFilter)==null?void 0:o.setBackgroundOptions(n))}async setVideoBGReadable(n){var o;await((o=this.backgroundFilter)==null?void 0:o.setVideoBGReadable(n))}async setVirtualBGImage(n){var o;await((o=this.backgroundFilter)==null?void 0:o.setVirtualBGImage(n))}setFlickeringOptions(n){var o;(o=this.backgroundFilter)==null||o.setFlickeringOptions(n)}}const qo=class{constructor(){this.backgroundTransformer=new au,this.mediaProcessor=new U2,this.rate=30}async init(n){await this.backgroundTransformer.init(n),await this.mediaProcessor.setTransformers([this.backgroundTransformer]),this.mediaProcessor.setTrackExpectedRate(this.rate),this.mediaProcessor.onAny((o,m)=>{var y;(y=this.resolveOnMediaProcessor)==null||y.call(this,{name:o,data:m})})}async onMediaProcessorEvent(){return await new Promise(n=>this.resolveOnMediaProcessor=n)}async setTrackExpectedRate(n){this.rate=n,this.mediaProcessor.setTrackExpectedRate(n)}async transform(n,o){this.mediaProcessor.transform(n,o)}async setBackgroundOptions(n){var o;await((o=this.backgroundTransformer)==null?void 0:o.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){x2(n)}};let $o=qo;(()=>{ec("ProcessorWorker",qo)})();const du="KGZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO3ZhciBIZT0ocj0+KHJbci5JTklUPTBdPSJJTklUIixyW3IuRk9SV0FSRD0xXT0iRk9SV0FSRCIscltyLlRFUk1JTkFURT0yXT0iVEVSTUlOQVRFIixyKSkoSGV8fHt9KTtmdW5jdGlvbiBqaShyKXtyZXR1cm5bSW1hZ2VCaXRtYXAsUmVhZGFibGVTdHJlYW0sV3JpdGFibGVTdHJlYW1dLnNvbWUoZT0+ciBpbnN0YW5jZW9mIGUpfWZ1bmN0aW9uIE90KHIsZSl7Y29uc3R7aWQ6dH09cixuPUFycmF5LmlzQXJyYXkoZSk/ZTpbZV07cG9zdE1lc3NhZ2Uoe2lkOnQscmVzdWx0OmV9LG4uZmlsdGVyKGk9PmppKGkpKSl9YXN5bmMgZnVuY3Rpb24gcWkocixlKXtjb25zdHtmdW5jdGlvbk5hbWU6dCxhcmdzOm59PXI7aWYoIWUuaW5zdGFuY2UpdGhyb3ciaW5zdGFuY2Ugbm90IGluaXRpYWxpemVkIjtpZighdCl0aHJvdyJtaXNzaW5nIGZ1bmN0aW9uIG5hbWUgdG8gY2FsbCI7aWYoIWUuaW5zdGFuY2VbdF0pdGhyb3dgdW5kZWZpbmVkIGZ1bmN0aW9uIFske3R9XSBpbiBjbGFzcyAke2UuaW5zdGFuY2UuY29uc3RydWN0b3Iud29ya2VySWR9YDtPdChyLGF3YWl0IGUuaW5zdGFuY2VbdF0oLi4ubiE9bnVsbD9uOltdKSl9ZnVuY3Rpb24ga3IoKXtyZXR1cm4gdHlwZW9mIFdvcmtlckdsb2JhbFNjb3BlPCJ1IiYmc2VsZiBpbnN0YW5jZW9mIFdvcmtlckdsb2JhbFNjb3BlfWNvbnN0IExyPXt9O2Z1bmN0aW9uIFhpKHIsZSl7ZS53b3JrZXJJZD1yLGtyKCkmJihMcltlLndvcmtlcklkXT1lKX1mdW5jdGlvbiBZaShyLGUpe2lmKCFyLmFyZ3MpdGhyb3ciTWlzc2luZyBjbGFzc05hbWUgd2hpbGUgaW5pdGlhbGl6aW5nIHdvcmtlciI7Y29uc3RbdF09ci5hcmdzLG49THJbdF07aWYobillLmluc3RhbmNlPW5ldyBuKHIuYXJncy5zbGljZSgxKSk7ZWxzZSB0aHJvd2B1bmtub3duIHdvcmtlciBjbGFzcyAke3R9YDtPdChyLHR5cGVvZiBlLmluc3RhbmNlIT09dm9pZCAwKX1hc3luYyBmdW5jdGlvbiBLaShyLGUpe2NvbnN0e2FyZ3M6dH09cjtpZighZS5pbnN0YW5jZSl0aHJvdyJpbnN0YW5jZSBub3QgaW5pdGlhbGl6ZWQiO2xldCBuO2UuaW5zdGFuY2UudGVybWluYXRlJiYobj1hd2FpdCBlLmluc3RhbmNlLnRlcm1pbmF0ZSguLi50IT1udWxsP3Q6W10pKSxPdChyLG4pfWZ1bmN0aW9uIEppKCl7Y29uc3Qgcj17fTtvbm1lc3NhZ2U9YXN5bmMgZT0+e2NvbnN0IHQ9ZS5kYXRhO3N3aXRjaCh0LnR5cGUpe2Nhc2UgSGUuSU5JVDpZaSh0LHIpO2JyZWFrO2Nhc2UgSGUuRk9SV0FSRDpxaSh0LHIpO2JyZWFrO2Nhc2UgSGUuVEVSTUlOQVRFOktpKHQscik7YnJlYWt9fX1rcigpJiZKaSgpO2NsYXNzIFp7fVoudXBkYXRlcz17dHJhbnNmb3JtZXJfbmV3OiJOZXcgdHJhbnNmb3JtZXIiLHRyYW5zZm9ybWVyX251bGw6Ik51bGwgdHJhbnNmb3JtZXIifSxaLmVycm9ycz17dHJhbnNmb3JtZXJfbm9uZToiTm8gdHJhbnNmb3JtZXJzIHByb3ZpZGVkIix0cmFuc2Zvcm1lcl9zdGFydDoiQ2Fubm90IHN0YXJ0IHRyYW5zZm9ybWVyIix0cmFuc2Zvcm1lcl90cmFuc2Zvcm06IkNhbm5vdCB0cmFuc2Zvcm0gZnJhbWUiLHRyYW5zZm9ybWVyX2ZsdXNoOiJDYW5ub3QgZmx1c2ggdHJhbnNmb3JtZXIiLHJlYWRhYmxlX251bGw6IlJlYWRhYmxlIGlzIG51bGwiLHdyaXRhYmxlX251bGw6IldyaXRhYmxlIGlzIG51bGwifTt2YXIgTXQ9e2V4cG9ydHM6e319LCRyPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKCl7Zm9yKHZhciBpPW5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoKSxvPTA7bzxpLmxlbmd0aDtvKyspaVtvXT1hcmd1bWVudHNbb107cmV0dXJuIGUuYXBwbHkodCxpKX19LFFpPSRyLHRlPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7ZnVuY3Rpb24gTnQocil7cmV0dXJuIEFycmF5LmlzQXJyYXkocil9ZnVuY3Rpb24gVXQocil7cmV0dXJuIHR5cGVvZiByPT0idW5kZWZpbmVkIn1mdW5jdGlvbiBaaShyKXtyZXR1cm4gciE9PW51bGwmJiFVdChyKSYmci5jb25zdHJ1Y3RvciE9PW51bGwmJiFVdChyLmNvbnN0cnVjdG9yKSYmdHlwZW9mIHIuY29uc3RydWN0b3IuaXNCdWZmZXI9PSJmdW5jdGlvbiImJnIuY29uc3RydWN0b3IuaXNCdWZmZXIocil9ZnVuY3Rpb24gR3Iocil7cmV0dXJuIHRlLmNhbGwocik9PT0iW29iamVjdCBBcnJheUJ1ZmZlcl0ifWZ1bmN0aW9uIGVvKHIpe3JldHVybiB0ZS5jYWxsKHIpPT09IltvYmplY3QgRm9ybURhdGFdIn1mdW5jdGlvbiB0byhyKXt2YXIgZTtyZXR1cm4gdHlwZW9mIEFycmF5QnVmZmVyIT0idW5kZWZpbmVkIiYmQXJyYXlCdWZmZXIuaXNWaWV3P2U9QXJyYXlCdWZmZXIuaXNWaWV3KHIpOmU9ciYmci5idWZmZXImJkdyKHIuYnVmZmVyKSxlfWZ1bmN0aW9uIHJvKHIpe3JldHVybiB0eXBlb2Ygcj09InN0cmluZyJ9ZnVuY3Rpb24gbm8ocil7cmV0dXJuIHR5cGVvZiByPT0ibnVtYmVyIn1mdW5jdGlvbiB6cihyKXtyZXR1cm4gciE9PW51bGwmJnR5cGVvZiByPT0ib2JqZWN0In1mdW5jdGlvbiBWZShyKXtpZih0ZS5jYWxsKHIpIT09IltvYmplY3QgT2JqZWN0XSIpcmV0dXJuITE7dmFyIGU9T2JqZWN0LmdldFByb3RvdHlwZU9mKHIpO3JldHVybiBlPT09bnVsbHx8ZT09PU9iamVjdC5wcm90b3R5cGV9ZnVuY3Rpb24gaW8ocil7cmV0dXJuIHRlLmNhbGwocik9PT0iW29iamVjdCBEYXRlXSJ9ZnVuY3Rpb24gb28ocil7cmV0dXJuIHRlLmNhbGwocik9PT0iW29iamVjdCBGaWxlXSJ9ZnVuY3Rpb24gc28ocil7cmV0dXJuIHRlLmNhbGwocik9PT0iW29iamVjdCBCbG9iXSJ9ZnVuY3Rpb24gSHIocil7cmV0dXJuIHRlLmNhbGwocik9PT0iW29iamVjdCBGdW5jdGlvbl0ifWZ1bmN0aW9uIGFvKHIpe3JldHVybiB6cihyKSYmSHIoci5waXBlKX1mdW5jdGlvbiB1byhyKXtyZXR1cm4gdGUuY2FsbChyKT09PSJbb2JqZWN0IFVSTFNlYXJjaFBhcmFtc10ifWZ1bmN0aW9uIGNvKHIpe3JldHVybiByLnRyaW0/ci50cmltKCk6ci5yZXBsYWNlKC9eXHMrfFxzKyQvZywiIil9ZnVuY3Rpb24gZm8oKXtyZXR1cm4gdHlwZW9mIG5hdmlnYXRvciE9InVuZGVmaW5lZCImJihuYXZpZ2F0b3IucHJvZHVjdD09PSJSZWFjdE5hdGl2ZSJ8fG5hdmlnYXRvci5wcm9kdWN0PT09Ik5hdGl2ZVNjcmlwdCJ8fG5hdmlnYXRvci5wcm9kdWN0PT09Ik5TIik/ITE6dHlwZW9mIHdpbmRvdyE9InVuZGVmaW5lZCImJnR5cGVvZiBkb2N1bWVudCE9InVuZGVmaW5lZCJ9ZnVuY3Rpb24gQnQocixlKXtpZighKHI9PT1udWxsfHx0eXBlb2Ygcj09InVuZGVmaW5lZCIpKWlmKHR5cGVvZiByIT0ib2JqZWN0IiYmKHI9W3JdKSxOdChyKSlmb3IodmFyIHQ9MCxuPXIubGVuZ3RoO3Q8bjt0KyspZS5jYWxsKG51bGwsclt0XSx0LHIpO2Vsc2UgZm9yKHZhciBpIGluIHIpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsaSkmJmUuY2FsbChudWxsLHJbaV0saSxyKX1mdW5jdGlvbiBrdCgpe3ZhciByPXt9O2Z1bmN0aW9uIGUoaSxvKXtWZShyW29dKSYmVmUoaSk/cltvXT1rdChyW29dLGkpOlZlKGkpP3Jbb109a3Qoe30saSk6TnQoaSk/cltvXT1pLnNsaWNlKCk6cltvXT1pfWZvcih2YXIgdD0wLG49YXJndW1lbnRzLmxlbmd0aDt0PG47dCsrKUJ0KGFyZ3VtZW50c1t0XSxlKTtyZXR1cm4gcn1mdW5jdGlvbiBsbyhyLGUsdCl7cmV0dXJuIEJ0KGUsZnVuY3Rpb24oaSxvKXt0JiZ0eXBlb2YgaT09ImZ1bmN0aW9uIj9yW29dPVFpKGksdCk6cltvXT1pfSkscn1mdW5jdGlvbiBtbyhyKXtyZXR1cm4gci5jaGFyQ29kZUF0KDApPT09NjUyNzkmJihyPXIuc2xpY2UoMSkpLHJ9dmFyICQ9e2lzQXJyYXk6TnQsaXNBcnJheUJ1ZmZlcjpHcixpc0J1ZmZlcjpaaSxpc0Zvcm1EYXRhOmVvLGlzQXJyYXlCdWZmZXJWaWV3OnRvLGlzU3RyaW5nOnJvLGlzTnVtYmVyOm5vLGlzT2JqZWN0OnpyLGlzUGxhaW5PYmplY3Q6VmUsaXNVbmRlZmluZWQ6VXQsaXNEYXRlOmlvLGlzRmlsZTpvbyxpc0Jsb2I6c28saXNGdW5jdGlvbjpIcixpc1N0cmVhbTphbyxpc1VSTFNlYXJjaFBhcmFtczp1byxpc1N0YW5kYXJkQnJvd3NlckVudjpmbyxmb3JFYWNoOkJ0LG1lcmdlOmt0LGV4dGVuZDpsbyx0cmltOmNvLHN0cmlwQk9NOm1vfSx4ZT0kO2Z1bmN0aW9uIFZyKHIpe3JldHVybiBlbmNvZGVVUklDb21wb25lbnQocikucmVwbGFjZSgvJTNBL2dpLCI6IikucmVwbGFjZSgvJTI0L2csIiQiKS5yZXBsYWNlKC8lMkMvZ2ksIiwiKS5yZXBsYWNlKC8lMjAvZywiKyIpLnJlcGxhY2UoLyU1Qi9naSwiWyIpLnJlcGxhY2UoLyU1RC9naSwiXSIpfXZhciBXcj1mdW5jdGlvbihlLHQsbil7aWYoIXQpcmV0dXJuIGU7dmFyIGk7aWYobilpPW4odCk7ZWxzZSBpZih4ZS5pc1VSTFNlYXJjaFBhcmFtcyh0KSlpPXQudG9TdHJpbmcoKTtlbHNle3ZhciBvPVtdO3hlLmZvckVhY2godCxmdW5jdGlvbih1LGYpe3U9PT1udWxsfHx0eXBlb2YgdT09InVuZGVmaW5lZCJ8fCh4ZS5pc0FycmF5KHUpP2Y9ZisiW10iOnU9W3VdLHhlLmZvckVhY2godSxmdW5jdGlvbihkKXt4ZS5pc0RhdGUoZCk/ZD1kLnRvSVNPU3RyaW5nKCk6eGUuaXNPYmplY3QoZCkmJihkPUpTT04uc3RyaW5naWZ5KGQpKSxvLnB1c2goVnIoZikrIj0iK1ZyKGQpKX0pKX0pLGk9by5qb2luKCImIil9aWYoaSl7dmFyIHM9ZS5pbmRleE9mKCIjIik7cyE9PS0xJiYoZT1lLnNsaWNlKDAscykpLGUrPShlLmluZGV4T2YoIj8iKT09PS0xPyI/IjoiJiIpK2l9cmV0dXJuIGV9LGhvPSQ7ZnVuY3Rpb24gV2UoKXt0aGlzLmhhbmRsZXJzPVtdfVdlLnByb3RvdHlwZS51c2U9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiB0aGlzLmhhbmRsZXJzLnB1c2goe2Z1bGZpbGxlZDplLHJlamVjdGVkOnQsc3luY2hyb25vdXM6bj9uLnN5bmNocm9ub3VzOiExLHJ1bldoZW46bj9uLnJ1bldoZW46bnVsbH0pLHRoaXMuaGFuZGxlcnMubGVuZ3RoLTF9LFdlLnByb3RvdHlwZS5lamVjdD1mdW5jdGlvbihlKXt0aGlzLmhhbmRsZXJzW2VdJiYodGhpcy5oYW5kbGVyc1tlXT1udWxsKX0sV2UucHJvdG90eXBlLmZvckVhY2g9ZnVuY3Rpb24oZSl7aG8uZm9yRWFjaCh0aGlzLmhhbmRsZXJzLGZ1bmN0aW9uKG4pe24hPT1udWxsJiZlKG4pfSl9O3ZhciBwbz1XZSx5bz0kLF9vPWZ1bmN0aW9uKGUsdCl7eW8uZm9yRWFjaChlLGZ1bmN0aW9uKGksbyl7byE9PXQmJm8udG9VcHBlckNhc2UoKT09PXQudG9VcHBlckNhc2UoKSYmKGVbdF09aSxkZWxldGUgZVtvXSl9KX0sanI9ZnVuY3Rpb24oZSx0LG4saSxvKXtyZXR1cm4gZS5jb25maWc9dCxuJiYoZS5jb2RlPW4pLGUucmVxdWVzdD1pLGUucmVzcG9uc2U9byxlLmlzQXhpb3NFcnJvcj0hMCxlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybnttZXNzYWdlOnRoaXMubWVzc2FnZSxuYW1lOnRoaXMubmFtZSxkZXNjcmlwdGlvbjp0aGlzLmRlc2NyaXB0aW9uLG51bWJlcjp0aGlzLm51bWJlcixmaWxlTmFtZTp0aGlzLmZpbGVOYW1lLGxpbmVOdW1iZXI6dGhpcy5saW5lTnVtYmVyLGNvbHVtbk51bWJlcjp0aGlzLmNvbHVtbk51bWJlcixzdGFjazp0aGlzLnN0YWNrLGNvbmZpZzp0aGlzLmNvbmZpZyxjb2RlOnRoaXMuY29kZSxzdGF0dXM6dGhpcy5yZXNwb25zZSYmdGhpcy5yZXNwb25zZS5zdGF0dXM/dGhpcy5yZXNwb25zZS5zdGF0dXM6bnVsbH19LGV9LHhvPWpyLHFyPWZ1bmN0aW9uKGUsdCxuLGksbyl7dmFyIHM9bmV3IEVycm9yKGUpO3JldHVybiB4byhzLHQsbixpLG8pfSxibz1xcixnbz1mdW5jdGlvbihlLHQsbil7dmFyIGk9bi5jb25maWcudmFsaWRhdGVTdGF0dXM7IW4uc3RhdHVzfHwhaXx8aShuLnN0YXR1cyk/ZShuKTp0KGJvKCJSZXF1ZXN0IGZhaWxlZCB3aXRoIHN0YXR1cyBjb2RlICIrbi5zdGF0dXMsbi5jb25maWcsbnVsbCxuLnJlcXVlc3QsbikpfSxqZT0kLHZvPWplLmlzU3RhbmRhcmRCcm93c2VyRW52KCk/ZnVuY3Rpb24oKXtyZXR1cm57d3JpdGU6ZnVuY3Rpb24odCxuLGksbyxzLGEpe3ZhciB1PVtdO3UucHVzaCh0KyI9IitlbmNvZGVVUklDb21wb25lbnQobikpLGplLmlzTnVtYmVyKGkpJiZ1LnB1c2goImV4cGlyZXM9IituZXcgRGF0ZShpKS50b0dNVFN0cmluZygpKSxqZS5pc1N0cmluZyhvKSYmdS5wdXNoKCJwYXRoPSIrbyksamUuaXNTdHJpbmcocykmJnUucHVzaCgiZG9tYWluPSIrcyksYT09PSEwJiZ1LnB1c2goInNlY3VyZSIpLGRvY3VtZW50LmNvb2tpZT11LmpvaW4oIjsgIil9LHJlYWQ6ZnVuY3Rpb24odCl7dmFyIG49ZG9jdW1lbnQuY29va2llLm1hdGNoKG5ldyBSZWdFeHAoIihefDtcXHMqKSgiK3QrIik9KFteO10qKSIpKTtyZXR1cm4gbj9kZWNvZGVVUklDb21wb25lbnQoblszXSk6bnVsbH0scmVtb3ZlOmZ1bmN0aW9uKHQpe3RoaXMud3JpdGUodCwiIixEYXRlLm5vdygpLTg2NGU1KX19fSgpOmZ1bmN0aW9uKCl7cmV0dXJue3dyaXRlOmZ1bmN0aW9uKCl7fSxyZWFkOmZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9LHJlbW92ZTpmdW5jdGlvbigpe319fSgpLEVvPWZ1bmN0aW9uKGUpe3JldHVybi9eKFthLXpdW2EtelxkK1wtLl0qOik/XC9cLy9pLnRlc3QoZSl9LFRvPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQ/ZS5yZXBsYWNlKC9cLyskLywiIikrIi8iK3QucmVwbGFjZSgvXlwvKy8sIiIpOmV9LEFvPUVvLHdvPVRvLFJvPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUmJiFBbyh0KT93byhlLHQpOnR9LEx0PSQsU289WyJhZ2UiLCJhdXRob3JpemF0aW9uIiwiY29udGVudC1sZW5ndGgiLCJjb250ZW50LXR5cGUiLCJldGFnIiwiZXhwaXJlcyIsImZyb20iLCJob3N0IiwiaWYtbW9kaWZpZWQtc2luY2UiLCJpZi11bm1vZGlmaWVkLXNpbmNlIiwibGFzdC1tb2RpZmllZCIsImxvY2F0aW9uIiwibWF4LWZvcndhcmRzIiwicHJveHktYXV0aG9yaXphdGlvbiIsInJlZmVyZXIiLCJyZXRyeS1hZnRlciIsInVzZXItYWdlbnQiXSxJbz1mdW5jdGlvbihlKXt2YXIgdD17fSxuLGksbztyZXR1cm4gZSYmTHQuZm9yRWFjaChlLnNwbGl0KGAKYCksZnVuY3Rpb24oYSl7aWYobz1hLmluZGV4T2YoIjoiKSxuPUx0LnRyaW0oYS5zdWJzdHIoMCxvKSkudG9Mb3dlckNhc2UoKSxpPUx0LnRyaW0oYS5zdWJzdHIobysxKSksbil7aWYodFtuXSYmU28uaW5kZXhPZihuKT49MClyZXR1cm47bj09PSJzZXQtY29va2llIj90W25dPSh0W25dP3Rbbl06W10pLmNvbmNhdChbaV0pOnRbbl09dFtuXT90W25dKyIsICIraTppfX0pLHR9LFhyPSQsRm89WHIuaXNTdGFuZGFyZEJyb3dzZXJFbnYoKT9mdW5jdGlvbigpe3ZhciBlPS8obXNpZXx0cmlkZW50KS9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCksdD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIiksbjtmdW5jdGlvbiBpKG8pe3ZhciBzPW87cmV0dXJuIGUmJih0LnNldEF0dHJpYnV0ZSgiaHJlZiIscykscz10LmhyZWYpLHQuc2V0QXR0cmlidXRlKCJocmVmIixzKSx7aHJlZjp0LmhyZWYscHJvdG9jb2w6dC5wcm90b2NvbD90LnByb3RvY29sLnJlcGxhY2UoLzokLywiIik6IiIsaG9zdDp0Lmhvc3Qsc2VhcmNoOnQuc2VhcmNoP3Quc2VhcmNoLnJlcGxhY2UoL15cPy8sIiIpOiIiLGhhc2g6dC5oYXNoP3QuaGFzaC5yZXBsYWNlKC9eIy8sIiIpOiIiLGhvc3RuYW1lOnQuaG9zdG5hbWUscG9ydDp0LnBvcnQscGF0aG5hbWU6dC5wYXRobmFtZS5jaGFyQXQoMCk9PT0iLyI/dC5wYXRobmFtZToiLyIrdC5wYXRobmFtZX19cmV0dXJuIG49aSh3aW5kb3cubG9jYXRpb24uaHJlZiksZnVuY3Rpb24ocyl7dmFyIGE9WHIuaXNTdHJpbmcocyk/aShzKTpzO3JldHVybiBhLnByb3RvY29sPT09bi5wcm90b2NvbCYmYS5ob3N0PT09bi5ob3N0fX0oKTpmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiEwfX0oKTtmdW5jdGlvbiAkdChyKXt0aGlzLm1lc3NhZ2U9cn0kdC5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4iQ2FuY2VsIisodGhpcy5tZXNzYWdlPyI6ICIrdGhpcy5tZXNzYWdlOiIiKX0sJHQucHJvdG90eXBlLl9fQ0FOQ0VMX189ITA7dmFyIHFlPSR0LFhlPSQsUG89Z28sRG89dm8sQ289V3IsT289Um8sTW89SW8sTm89Rm8sR3Q9cXIsVW89S2UsQm89cWUsWXI9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKG4saSl7dmFyIG89ZS5kYXRhLHM9ZS5oZWFkZXJzLGE9ZS5yZXNwb25zZVR5cGUsdTtmdW5jdGlvbiBmKCl7ZS5jYW5jZWxUb2tlbiYmZS5jYW5jZWxUb2tlbi51bnN1YnNjcmliZSh1KSxlLnNpZ25hbCYmZS5zaWduYWwucmVtb3ZlRXZlbnRMaXN0ZW5lcigiYWJvcnQiLHUpfVhlLmlzRm9ybURhdGEobykmJmRlbGV0ZSBzWyJDb250ZW50LVR5cGUiXTt2YXIgYz1uZXcgWE1MSHR0cFJlcXVlc3Q7aWYoZS5hdXRoKXt2YXIgZD1lLmF1dGgudXNlcm5hbWV8fCIiLHA9ZS5hdXRoLnBhc3N3b3JkP3VuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChlLmF1dGgucGFzc3dvcmQpKToiIjtzLkF1dGhvcml6YXRpb249IkJhc2ljICIrYnRvYShkKyI6IitwKX12YXIgeT1PbyhlLmJhc2VVUkwsZS51cmwpO2Mub3BlbihlLm1ldGhvZC50b1VwcGVyQ2FzZSgpLENvKHksZS5wYXJhbXMsZS5wYXJhbXNTZXJpYWxpemVyKSwhMCksYy50aW1lb3V0PWUudGltZW91dDtmdW5jdGlvbiBtKCl7aWYoISFjKXt2YXIgYj0iZ2V0QWxsUmVzcG9uc2VIZWFkZXJzImluIGM/TW8oYy5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKSk6bnVsbCxnPSFhfHxhPT09InRleHQifHxhPT09Impzb24iP2MucmVzcG9uc2VUZXh0OmMucmVzcG9uc2UsVD17ZGF0YTpnLHN0YXR1czpjLnN0YXR1cyxzdGF0dXNUZXh0OmMuc3RhdHVzVGV4dCxoZWFkZXJzOmIsY29uZmlnOmUscmVxdWVzdDpjfTtQbyhmdW5jdGlvbihMKXtuKEwpLGYoKX0sZnVuY3Rpb24oTCl7aShMKSxmKCl9LFQpLGM9bnVsbH19aWYoIm9ubG9hZGVuZCJpbiBjP2Mub25sb2FkZW5kPW06Yy5vbnJlYWR5c3RhdGVjaGFuZ2U9ZnVuY3Rpb24oKXshY3x8Yy5yZWFkeVN0YXRlIT09NHx8Yy5zdGF0dXM9PT0wJiYhKGMucmVzcG9uc2VVUkwmJmMucmVzcG9uc2VVUkwuaW5kZXhPZigiZmlsZToiKT09PTApfHxzZXRUaW1lb3V0KG0pfSxjLm9uYWJvcnQ9ZnVuY3Rpb24oKXshY3x8KGkoR3QoIlJlcXVlc3QgYWJvcnRlZCIsZSwiRUNPTk5BQk9SVEVEIixjKSksYz1udWxsKX0sYy5vbmVycm9yPWZ1bmN0aW9uKCl7aShHdCgiTmV0d29yayBFcnJvciIsZSxudWxsLGMpKSxjPW51bGx9LGMub250aW1lb3V0PWZ1bmN0aW9uKCl7dmFyIGc9ZS50aW1lb3V0PyJ0aW1lb3V0IG9mICIrZS50aW1lb3V0KyJtcyBleGNlZWRlZCI6InRpbWVvdXQgZXhjZWVkZWQiLFQ9ZS50cmFuc2l0aW9uYWx8fFVvLnRyYW5zaXRpb25hbDtlLnRpbWVvdXRFcnJvck1lc3NhZ2UmJihnPWUudGltZW91dEVycm9yTWVzc2FnZSksaShHdChnLGUsVC5jbGFyaWZ5VGltZW91dEVycm9yPyJFVElNRURPVVQiOiJFQ09OTkFCT1JURUQiLGMpKSxjPW51bGx9LFhlLmlzU3RhbmRhcmRCcm93c2VyRW52KCkpe3ZhciBfPShlLndpdGhDcmVkZW50aWFsc3x8Tm8oeSkpJiZlLnhzcmZDb29raWVOYW1lP0RvLnJlYWQoZS54c3JmQ29va2llTmFtZSk6dm9pZCAwO18mJihzW2UueHNyZkhlYWRlck5hbWVdPV8pfSJzZXRSZXF1ZXN0SGVhZGVyImluIGMmJlhlLmZvckVhY2gocyxmdW5jdGlvbihnLFQpe3R5cGVvZiBvPT0idW5kZWZpbmVkIiYmVC50b0xvd2VyQ2FzZSgpPT09ImNvbnRlbnQtdHlwZSI/ZGVsZXRlIHNbVF06Yy5zZXRSZXF1ZXN0SGVhZGVyKFQsZyl9KSxYZS5pc1VuZGVmaW5lZChlLndpdGhDcmVkZW50aWFscyl8fChjLndpdGhDcmVkZW50aWFscz0hIWUud2l0aENyZWRlbnRpYWxzKSxhJiZhIT09Impzb24iJiYoYy5yZXNwb25zZVR5cGU9ZS5yZXNwb25zZVR5cGUpLHR5cGVvZiBlLm9uRG93bmxvYWRQcm9ncmVzcz09ImZ1bmN0aW9uIiYmYy5hZGRFdmVudExpc3RlbmVyKCJwcm9ncmVzcyIsZS5vbkRvd25sb2FkUHJvZ3Jlc3MpLHR5cGVvZiBlLm9uVXBsb2FkUHJvZ3Jlc3M9PSJmdW5jdGlvbiImJmMudXBsb2FkJiZjLnVwbG9hZC5hZGRFdmVudExpc3RlbmVyKCJwcm9ncmVzcyIsZS5vblVwbG9hZFByb2dyZXNzKSwoZS5jYW5jZWxUb2tlbnx8ZS5zaWduYWwpJiYodT1mdW5jdGlvbihiKXshY3x8KGkoIWJ8fGImJmIudHlwZT9uZXcgQm8oImNhbmNlbGVkIik6YiksYy5hYm9ydCgpLGM9bnVsbCl9LGUuY2FuY2VsVG9rZW4mJmUuY2FuY2VsVG9rZW4uc3Vic2NyaWJlKHUpLGUuc2lnbmFsJiYoZS5zaWduYWwuYWJvcnRlZD91KCk6ZS5zaWduYWwuYWRkRXZlbnRMaXN0ZW5lcigiYWJvcnQiLHUpKSksb3x8KG89bnVsbCksYy5zZW5kKG8pfSl9LEM9JCxLcj1fbyxrbz1qcixMbz17IkNvbnRlbnQtVHlwZSI6ImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCJ9O2Z1bmN0aW9uIEpyKHIsZSl7IUMuaXNVbmRlZmluZWQocikmJkMuaXNVbmRlZmluZWQoclsiQ29udGVudC1UeXBlIl0pJiYoclsiQ29udGVudC1UeXBlIl09ZSl9ZnVuY3Rpb24gJG8oKXt2YXIgcjtyZXR1cm4odHlwZW9mIFhNTEh0dHBSZXF1ZXN0IT0idW5kZWZpbmVkInx8dHlwZW9mIHByb2Nlc3MhPSJ1bmRlZmluZWQiJiZPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwocHJvY2Vzcyk9PT0iW29iamVjdCBwcm9jZXNzXSIpJiYocj1Zcikscn1mdW5jdGlvbiBHbyhyLGUsdCl7aWYoQy5pc1N0cmluZyhyKSl0cnl7cmV0dXJuKGV8fEpTT04ucGFyc2UpKHIpLEMudHJpbShyKX1jYXRjaChuKXtpZihuLm5hbWUhPT0iU3ludGF4RXJyb3IiKXRocm93IG59cmV0dXJuKHR8fEpTT04uc3RyaW5naWZ5KShyKX12YXIgWWU9e3RyYW5zaXRpb25hbDp7c2lsZW50SlNPTlBhcnNpbmc6ITAsZm9yY2VkSlNPTlBhcnNpbmc6ITAsY2xhcmlmeVRpbWVvdXRFcnJvcjohMX0sYWRhcHRlcjokbygpLHRyYW5zZm9ybVJlcXVlc3Q6W2Z1bmN0aW9uKGUsdCl7cmV0dXJuIEtyKHQsIkFjY2VwdCIpLEtyKHQsIkNvbnRlbnQtVHlwZSIpLEMuaXNGb3JtRGF0YShlKXx8Qy5pc0FycmF5QnVmZmVyKGUpfHxDLmlzQnVmZmVyKGUpfHxDLmlzU3RyZWFtKGUpfHxDLmlzRmlsZShlKXx8Qy5pc0Jsb2IoZSk/ZTpDLmlzQXJyYXlCdWZmZXJWaWV3KGUpP2UuYnVmZmVyOkMuaXNVUkxTZWFyY2hQYXJhbXMoZSk/KEpyKHQsImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZDtjaGFyc2V0PXV0Zi04IiksZS50b1N0cmluZygpKTpDLmlzT2JqZWN0KGUpfHx0JiZ0WyJDb250ZW50LVR5cGUiXT09PSJhcHBsaWNhdGlvbi9qc29uIj8oSnIodCwiYXBwbGljYXRpb24vanNvbiIpLEdvKGUpKTplfV0sdHJhbnNmb3JtUmVzcG9uc2U6W2Z1bmN0aW9uKGUpe3ZhciB0PXRoaXMudHJhbnNpdGlvbmFsfHxZZS50cmFuc2l0aW9uYWwsbj10JiZ0LnNpbGVudEpTT05QYXJzaW5nLGk9dCYmdC5mb3JjZWRKU09OUGFyc2luZyxvPSFuJiZ0aGlzLnJlc3BvbnNlVHlwZT09PSJqc29uIjtpZihvfHxpJiZDLmlzU3RyaW5nKGUpJiZlLmxlbmd0aCl0cnl7cmV0dXJuIEpTT04ucGFyc2UoZSl9Y2F0Y2gocyl7aWYobyl0aHJvdyBzLm5hbWU9PT0iU3ludGF4RXJyb3IiP2tvKHMsdGhpcywiRV9KU09OX1BBUlNFIik6c31yZXR1cm4gZX1dLHRpbWVvdXQ6MCx4c3JmQ29va2llTmFtZToiWFNSRi1UT0tFTiIseHNyZkhlYWRlck5hbWU6IlgtWFNSRi1UT0tFTiIsbWF4Q29udGVudExlbmd0aDotMSxtYXhCb2R5TGVuZ3RoOi0xLHZhbGlkYXRlU3RhdHVzOmZ1bmN0aW9uKGUpe3JldHVybiBlPj0yMDAmJmU8MzAwfSxoZWFkZXJzOntjb21tb246e0FjY2VwdDoiYXBwbGljYXRpb24vanNvbiwgdGV4dC9wbGFpbiwgKi8qIn19fTtDLmZvckVhY2goWyJkZWxldGUiLCJnZXQiLCJoZWFkIl0sZnVuY3Rpb24oZSl7WWUuaGVhZGVyc1tlXT17fX0pLEMuZm9yRWFjaChbInBvc3QiLCJwdXQiLCJwYXRjaCJdLGZ1bmN0aW9uKGUpe1llLmhlYWRlcnNbZV09Qy5tZXJnZShMbyl9KTt2YXIgS2U9WWUsem89JCxIbz1LZSxWbz1mdW5jdGlvbihlLHQsbil7dmFyIGk9dGhpc3x8SG87cmV0dXJuIHpvLmZvckVhY2gobixmdW5jdGlvbihzKXtlPXMuY2FsbChpLGUsdCl9KSxlfSxRcj1mdW5jdGlvbihlKXtyZXR1cm4hIShlJiZlLl9fQ0FOQ0VMX18pfSxacj0kLHp0PVZvLFdvPVFyLGpvPUtlLHFvPXFlO2Z1bmN0aW9uIEh0KHIpe2lmKHIuY2FuY2VsVG9rZW4mJnIuY2FuY2VsVG9rZW4udGhyb3dJZlJlcXVlc3RlZCgpLHIuc2lnbmFsJiZyLnNpZ25hbC5hYm9ydGVkKXRocm93IG5ldyBxbygiY2FuY2VsZWQiKX12YXIgWG89ZnVuY3Rpb24oZSl7SHQoZSksZS5oZWFkZXJzPWUuaGVhZGVyc3x8e30sZS5kYXRhPXp0LmNhbGwoZSxlLmRhdGEsZS5oZWFkZXJzLGUudHJhbnNmb3JtUmVxdWVzdCksZS5oZWFkZXJzPVpyLm1lcmdlKGUuaGVhZGVycy5jb21tb258fHt9LGUuaGVhZGVyc1tlLm1ldGhvZF18fHt9LGUuaGVhZGVycyksWnIuZm9yRWFjaChbImRlbGV0ZSIsImdldCIsImhlYWQiLCJwb3N0IiwicHV0IiwicGF0Y2giLCJjb21tb24iXSxmdW5jdGlvbihpKXtkZWxldGUgZS5oZWFkZXJzW2ldfSk7dmFyIHQ9ZS5hZGFwdGVyfHxqby5hZGFwdGVyO3JldHVybiB0KGUpLnRoZW4oZnVuY3Rpb24oaSl7cmV0dXJuIEh0KGUpLGkuZGF0YT16dC5jYWxsKGUsaS5kYXRhLGkuaGVhZGVycyxlLnRyYW5zZm9ybVJlc3BvbnNlKSxpfSxmdW5jdGlvbihpKXtyZXR1cm4gV28oaSl8fChIdChlKSxpJiZpLnJlc3BvbnNlJiYoaS5yZXNwb25zZS5kYXRhPXp0LmNhbGwoZSxpLnJlc3BvbnNlLmRhdGEsaS5yZXNwb25zZS5oZWFkZXJzLGUudHJhbnNmb3JtUmVzcG9uc2UpKSksUHJvbWlzZS5yZWplY3QoaSl9KX0sRz0kLGVuPWZ1bmN0aW9uKGUsdCl7dD10fHx7fTt2YXIgbj17fTtmdW5jdGlvbiBpKGMsZCl7cmV0dXJuIEcuaXNQbGFpbk9iamVjdChjKSYmRy5pc1BsYWluT2JqZWN0KGQpP0cubWVyZ2UoYyxkKTpHLmlzUGxhaW5PYmplY3QoZCk/Ry5tZXJnZSh7fSxkKTpHLmlzQXJyYXkoZCk/ZC5zbGljZSgpOmR9ZnVuY3Rpb24gbyhjKXtpZihHLmlzVW5kZWZpbmVkKHRbY10pKXtpZighRy5pc1VuZGVmaW5lZChlW2NdKSlyZXR1cm4gaSh2b2lkIDAsZVtjXSl9ZWxzZSByZXR1cm4gaShlW2NdLHRbY10pfWZ1bmN0aW9uIHMoYyl7aWYoIUcuaXNVbmRlZmluZWQodFtjXSkpcmV0dXJuIGkodm9pZCAwLHRbY10pfWZ1bmN0aW9uIGEoYyl7aWYoRy5pc1VuZGVmaW5lZCh0W2NdKSl7aWYoIUcuaXNVbmRlZmluZWQoZVtjXSkpcmV0dXJuIGkodm9pZCAwLGVbY10pfWVsc2UgcmV0dXJuIGkodm9pZCAwLHRbY10pfWZ1bmN0aW9uIHUoYyl7aWYoYyBpbiB0KXJldHVybiBpKGVbY10sdFtjXSk7aWYoYyBpbiBlKXJldHVybiBpKHZvaWQgMCxlW2NdKX12YXIgZj17dXJsOnMsbWV0aG9kOnMsZGF0YTpzLGJhc2VVUkw6YSx0cmFuc2Zvcm1SZXF1ZXN0OmEsdHJhbnNmb3JtUmVzcG9uc2U6YSxwYXJhbXNTZXJpYWxpemVyOmEsdGltZW91dDphLHRpbWVvdXRNZXNzYWdlOmEsd2l0aENyZWRlbnRpYWxzOmEsYWRhcHRlcjphLHJlc3BvbnNlVHlwZTphLHhzcmZDb29raWVOYW1lOmEseHNyZkhlYWRlck5hbWU6YSxvblVwbG9hZFByb2dyZXNzOmEsb25Eb3dubG9hZFByb2dyZXNzOmEsZGVjb21wcmVzczphLG1heENvbnRlbnRMZW5ndGg6YSxtYXhCb2R5TGVuZ3RoOmEsdHJhbnNwb3J0OmEsaHR0cEFnZW50OmEsaHR0cHNBZ2VudDphLGNhbmNlbFRva2VuOmEsc29ja2V0UGF0aDphLHJlc3BvbnNlRW5jb2Rpbmc6YSx2YWxpZGF0ZVN0YXR1czp1fTtyZXR1cm4gRy5mb3JFYWNoKE9iamVjdC5rZXlzKGUpLmNvbmNhdChPYmplY3Qua2V5cyh0KSksZnVuY3Rpb24oZCl7dmFyIHA9ZltkXXx8byx5PXAoZCk7Ry5pc1VuZGVmaW5lZCh5KSYmcCE9PXV8fChuW2RdPXkpfSksbn0sdG49e3ZlcnNpb246IjAuMjUuMCJ9LFlvPXRuLnZlcnNpb24sVnQ9e307WyJvYmplY3QiLCJib29sZWFuIiwibnVtYmVyIiwiZnVuY3Rpb24iLCJzdHJpbmciLCJzeW1ib2wiXS5mb3JFYWNoKGZ1bmN0aW9uKHIsZSl7VnRbcl09ZnVuY3Rpb24obil7cmV0dXJuIHR5cGVvZiBuPT09cnx8ImEiKyhlPDE/Im4gIjoiICIpK3J9fSk7dmFyIHJuPXt9O1Z0LnRyYW5zaXRpb25hbD1mdW5jdGlvbihlLHQsbil7ZnVuY3Rpb24gaShvLHMpe3JldHVybiJbQXhpb3MgdiIrWW8rIl0gVHJhbnNpdGlvbmFsIG9wdGlvbiAnIitvKyInIitzKyhuPyIuICIrbjoiIil9cmV0dXJuIGZ1bmN0aW9uKG8scyxhKXtpZihlPT09ITEpdGhyb3cgbmV3IEVycm9yKGkocywiIGhhcyBiZWVuIHJlbW92ZWQiKyh0PyIgaW4gIit0OiIiKSkpO3JldHVybiB0JiYhcm5bc10mJihybltzXT0hMCxjb25zb2xlLndhcm4oaShzLCIgaGFzIGJlZW4gZGVwcmVjYXRlZCBzaW5jZSB2Iit0KyIgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgbmVhciBmdXR1cmUiKSkpLGU/ZShvLHMsYSk6ITB9fTtmdW5jdGlvbiBLbyhyLGUsdCl7aWYodHlwZW9mIHIhPSJvYmplY3QiKXRocm93IG5ldyBUeXBlRXJyb3IoIm9wdGlvbnMgbXVzdCBiZSBhbiBvYmplY3QiKTtmb3IodmFyIG49T2JqZWN0LmtleXMociksaT1uLmxlbmd0aDtpLS0gPjA7KXt2YXIgbz1uW2ldLHM9ZVtvXTtpZihzKXt2YXIgYT1yW29dLHU9YT09PXZvaWQgMHx8cyhhLG8scik7aWYodSE9PSEwKXRocm93IG5ldyBUeXBlRXJyb3IoIm9wdGlvbiAiK28rIiBtdXN0IGJlICIrdSk7Y29udGludWV9aWYodCE9PSEwKXRocm93IEVycm9yKCJVbmtub3duIG9wdGlvbiAiK28pfX12YXIgSm89e2Fzc2VydE9wdGlvbnM6S28sdmFsaWRhdG9yczpWdH0sbm49JCxRbz1Xcixvbj1wbyxzbj1YbyxKZT1lbixhbj1KbyxiZT1hbi52YWxpZGF0b3JzO2Z1bmN0aW9uIEllKHIpe3RoaXMuZGVmYXVsdHM9cix0aGlzLmludGVyY2VwdG9ycz17cmVxdWVzdDpuZXcgb24scmVzcG9uc2U6bmV3IG9ufX1JZS5wcm90b3R5cGUucmVxdWVzdD1mdW5jdGlvbihlLHQpe2lmKHR5cGVvZiBlPT0ic3RyaW5nIj8odD10fHx7fSx0LnVybD1lKTp0PWV8fHt9LCF0LnVybCl0aHJvdyBuZXcgRXJyb3IoIlByb3ZpZGVkIGNvbmZpZyB1cmwgaXMgbm90IHZhbGlkIik7dD1KZSh0aGlzLmRlZmF1bHRzLHQpLHQubWV0aG9kP3QubWV0aG9kPXQubWV0aG9kLnRvTG93ZXJDYXNlKCk6dGhpcy5kZWZhdWx0cy5tZXRob2Q/dC5tZXRob2Q9dGhpcy5kZWZhdWx0cy5tZXRob2QudG9Mb3dlckNhc2UoKTp0Lm1ldGhvZD0iZ2V0Ijt2YXIgbj10LnRyYW5zaXRpb25hbDtuIT09dm9pZCAwJiZhbi5hc3NlcnRPcHRpb25zKG4se3NpbGVudEpTT05QYXJzaW5nOmJlLnRyYW5zaXRpb25hbChiZS5ib29sZWFuKSxmb3JjZWRKU09OUGFyc2luZzpiZS50cmFuc2l0aW9uYWwoYmUuYm9vbGVhbiksY2xhcmlmeVRpbWVvdXRFcnJvcjpiZS50cmFuc2l0aW9uYWwoYmUuYm9vbGVhbil9LCExKTt2YXIgaT1bXSxvPSEwO3RoaXMuaW50ZXJjZXB0b3JzLnJlcXVlc3QuZm9yRWFjaChmdW5jdGlvbih5KXt0eXBlb2YgeS5ydW5XaGVuPT0iZnVuY3Rpb24iJiZ5LnJ1bldoZW4odCk9PT0hMXx8KG89byYmeS5zeW5jaHJvbm91cyxpLnVuc2hpZnQoeS5mdWxmaWxsZWQseS5yZWplY3RlZCkpfSk7dmFyIHM9W107dGhpcy5pbnRlcmNlcHRvcnMucmVzcG9uc2UuZm9yRWFjaChmdW5jdGlvbih5KXtzLnB1c2goeS5mdWxmaWxsZWQseS5yZWplY3RlZCl9KTt2YXIgYTtpZighbyl7dmFyIHU9W3NuLHZvaWQgMF07Zm9yKEFycmF5LnByb3RvdHlwZS51bnNoaWZ0LmFwcGx5KHUsaSksdT11LmNvbmNhdChzKSxhPVByb21pc2UucmVzb2x2ZSh0KTt1Lmxlbmd0aDspYT1hLnRoZW4odS5zaGlmdCgpLHUuc2hpZnQoKSk7cmV0dXJuIGF9Zm9yKHZhciBmPXQ7aS5sZW5ndGg7KXt2YXIgYz1pLnNoaWZ0KCksZD1pLnNoaWZ0KCk7dHJ5e2Y9YyhmKX1jYXRjaChwKXtkKHApO2JyZWFrfX10cnl7YT1zbihmKX1jYXRjaChwKXtyZXR1cm4gUHJvbWlzZS5yZWplY3QocCl9Zm9yKDtzLmxlbmd0aDspYT1hLnRoZW4ocy5zaGlmdCgpLHMuc2hpZnQoKSk7cmV0dXJuIGF9LEllLnByb3RvdHlwZS5nZXRVcmk9ZnVuY3Rpb24oZSl7aWYoIWUudXJsKXRocm93IG5ldyBFcnJvcigiUHJvdmlkZWQgY29uZmlnIHVybCBpcyBub3QgdmFsaWQiKTtyZXR1cm4gZT1KZSh0aGlzLmRlZmF1bHRzLGUpLFFvKGUudXJsLGUucGFyYW1zLGUucGFyYW1zU2VyaWFsaXplcikucmVwbGFjZSgvXlw/LywiIil9LG5uLmZvckVhY2goWyJkZWxldGUiLCJnZXQiLCJoZWFkIiwib3B0aW9ucyJdLGZ1bmN0aW9uKGUpe0llLnByb3RvdHlwZVtlXT1mdW5jdGlvbih0LG4pe3JldHVybiB0aGlzLnJlcXVlc3QoSmUobnx8e30se21ldGhvZDplLHVybDp0LGRhdGE6KG58fHt9KS5kYXRhfSkpfX0pLG5uLmZvckVhY2goWyJwb3N0IiwicHV0IiwicGF0Y2giXSxmdW5jdGlvbihlKXtJZS5wcm90b3R5cGVbZV09ZnVuY3Rpb24odCxuLGkpe3JldHVybiB0aGlzLnJlcXVlc3QoSmUoaXx8e30se21ldGhvZDplLHVybDp0LGRhdGE6bn0pKX19KTt2YXIgWm89SWUsZXM9cWU7ZnVuY3Rpb24gZ2Uocil7aWYodHlwZW9mIHIhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcigiZXhlY3V0b3IgbXVzdCBiZSBhIGZ1bmN0aW9uLiIpO3ZhciBlO3RoaXMucHJvbWlzZT1uZXcgUHJvbWlzZShmdW5jdGlvbihpKXtlPWl9KTt2YXIgdD10aGlzO3RoaXMucHJvbWlzZS50aGVuKGZ1bmN0aW9uKG4pe2lmKCEhdC5fbGlzdGVuZXJzKXt2YXIgaSxvPXQuX2xpc3RlbmVycy5sZW5ndGg7Zm9yKGk9MDtpPG87aSsrKXQuX2xpc3RlbmVyc1tpXShuKTt0Ll9saXN0ZW5lcnM9bnVsbH19KSx0aGlzLnByb21pc2UudGhlbj1mdW5jdGlvbihuKXt2YXIgaSxvPW5ldyBQcm9taXNlKGZ1bmN0aW9uKHMpe3Quc3Vic2NyaWJlKHMpLGk9c30pLnRoZW4obik7cmV0dXJuIG8uY2FuY2VsPWZ1bmN0aW9uKCl7dC51bnN1YnNjcmliZShpKX0sb30scihmdW5jdGlvbihpKXt0LnJlYXNvbnx8KHQucmVhc29uPW5ldyBlcyhpKSxlKHQucmVhc29uKSl9KX1nZS5wcm90b3R5cGUudGhyb3dJZlJlcXVlc3RlZD1mdW5jdGlvbigpe2lmKHRoaXMucmVhc29uKXRocm93IHRoaXMucmVhc29ufSxnZS5wcm90b3R5cGUuc3Vic2NyaWJlPWZ1bmN0aW9uKGUpe2lmKHRoaXMucmVhc29uKXtlKHRoaXMucmVhc29uKTtyZXR1cm59dGhpcy5fbGlzdGVuZXJzP3RoaXMuX2xpc3RlbmVycy5wdXNoKGUpOnRoaXMuX2xpc3RlbmVycz1bZV19LGdlLnByb3RvdHlwZS51bnN1YnNjcmliZT1mdW5jdGlvbihlKXtpZighIXRoaXMuX2xpc3RlbmVycyl7dmFyIHQ9dGhpcy5fbGlzdGVuZXJzLmluZGV4T2YoZSk7dCE9PS0xJiZ0aGlzLl9saXN0ZW5lcnMuc3BsaWNlKHQsMSl9fSxnZS5zb3VyY2U9ZnVuY3Rpb24oKXt2YXIgZSx0PW5ldyBnZShmdW5jdGlvbihpKXtlPWl9KTtyZXR1cm57dG9rZW46dCxjYW5jZWw6ZX19O3ZhciB0cz1nZSxycz1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIGUuYXBwbHkobnVsbCxuKX19LG5zPSQsaXM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5zLmlzT2JqZWN0KGUpJiZlLmlzQXhpb3NFcnJvcj09PSEwfSx1bj0kLG9zPSRyLFFlPVpvLHNzPWVuLGFzPUtlO2Z1bmN0aW9uIGNuKHIpe3ZhciBlPW5ldyBRZShyKSx0PW9zKFFlLnByb3RvdHlwZS5yZXF1ZXN0LGUpO3JldHVybiB1bi5leHRlbmQodCxRZS5wcm90b3R5cGUsZSksdW4uZXh0ZW5kKHQsZSksdC5jcmVhdGU9ZnVuY3Rpb24oaSl7cmV0dXJuIGNuKHNzKHIsaSkpfSx0fXZhciBLPWNuKGFzKTtLLkF4aW9zPVFlLEsuQ2FuY2VsPXFlLEsuQ2FuY2VsVG9rZW49dHMsSy5pc0NhbmNlbD1RcixLLlZFUlNJT049dG4udmVyc2lvbixLLmFsbD1mdW5jdGlvbihlKXtyZXR1cm4gUHJvbWlzZS5hbGwoZSl9LEsuc3ByZWFkPXJzLEsuaXNBeGlvc0Vycm9yPWlzLE10LmV4cG9ydHM9SyxNdC5leHBvcnRzLmRlZmF1bHQ9Szt2YXIgdXM9TXQuZXhwb3J0cztjbGFzcyBFe2lzRW1wdHkoKXtyZXR1cm4hdGhpcy5pc1ByZXNlbnQoKX1zdGF0aWMgb2YoZSl7aWYoZSE9bnVsbClyZXR1cm4gbmV3IGZuKGUpO3Rocm93IG5ldyBUeXBlRXJyb3IoIlRoZSBwYXNzZWQgdmFsdWUgd2FzIG51bGwgb3IgdW5kZWZpbmVkLiIpfXN0YXRpYyBvZk5vbk51bGwoZSl7cmV0dXJuIEUub2YoZSl9c3RhdGljIG9mTnVsbGFibGUoZSl7cmV0dXJuIGUhPW51bGw/bmV3IGZuKGUpOm5ldyBsbn1zdGF0aWMgZW1wdHkoKXtyZXR1cm4gbmV3IGxufXN0YXRpYyBmcm9tKGUpe3N3aXRjaChlLmtpbmQpe2Nhc2UicHJlc2VudCI6cmV0dXJuIEUub2YoZS52YWx1ZSk7Y2FzZSJlbXB0eSI6cmV0dXJuIEUuZW1wdHkoKTtkZWZhdWx0OnRocm93IG5ldyBUeXBlRXJyb3IoIlRoZSBwYXNzZWQgdmFsdWUgd2FzIG5vdCBhbiBPcHRpb24gdHlwZS4iKX19fWNsYXNzIGZuIGV4dGVuZHMgRXtjb25zdHJ1Y3RvcihlKXtzdXBlcigpLHRoaXMucGF5bG9hZD1lfWlzUHJlc2VudCgpe3JldHVybiEwfWdldCgpe3JldHVybiB0aGlzLnBheWxvYWR9aWZQcmVzZW50KGUpe2UodGhpcy5wYXlsb2FkKX1pZlByZXNlbnRPckVsc2UoZSx0KXtlKHRoaXMucGF5bG9hZCl9ZmlsdGVyKGUpe3JldHVybiBlKHRoaXMucGF5bG9hZCk/dGhpczpFLmVtcHR5KCl9bWFwKGUpe2NvbnN0IHQ9ZSh0aGlzLnBheWxvYWQpO3JldHVybiBFLm9mTnVsbGFibGUodCl9ZmxhdE1hcChlKXtyZXR1cm4gZSh0aGlzLnBheWxvYWQpfW9yKGUpe3JldHVybiB0aGlzfW9yRWxzZShlKXtyZXR1cm4gdGhpcy5wYXlsb2FkfW9yRWxzZUdldChlKXtyZXR1cm4gdGhpcy5wYXlsb2FkfW9yRWxzZVRocm93KGUpe3JldHVybiB0aGlzLnBheWxvYWR9b3JOdWxsKCl7cmV0dXJuIHRoaXMucGF5bG9hZH1vclVuZGVmaW5lZCgpe3JldHVybiB0aGlzLnBheWxvYWR9dG9PcHRpb24oKXtyZXR1cm57a2luZDoicHJlc2VudCIsdmFsdWU6dGhpcy5wYXlsb2FkfX1tYXRjaGVzKGUpe3JldHVybiBlLnByZXNlbnQodGhpcy5wYXlsb2FkKX10b0pTT04oZSl7cmV0dXJuIHRoaXMucGF5bG9hZH19Y2xhc3MgbG4gZXh0ZW5kcyBFe2lzUHJlc2VudCgpe3JldHVybiExfWNvbnN0cnVjdG9yKCl7c3VwZXIoKX1nZXQoKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJUaGUgb3B0aW9uYWwgaXMgbm90IHByZXNlbnQuIil9aWZQcmVzZW50KGUpe31pZlByZXNlbnRPckVsc2UoZSx0KXt0KCl9ZmlsdGVyKGUpe3JldHVybiB0aGlzfW1hcChlKXtyZXR1cm4gRS5lbXB0eSgpfWZsYXRNYXAoZSl7cmV0dXJuIEUuZW1wdHkoKX1vcihlKXtyZXR1cm4gZSgpfW9yRWxzZShlKXtyZXR1cm4gZX1vckVsc2VHZXQoZSl7cmV0dXJuIHRoaXMub3JFbHNlKGUoKSl9b3JFbHNlVGhyb3coZSl7dGhyb3cgZSgpfW9yTnVsbCgpe3JldHVybiBudWxsfW9yVW5kZWZpbmVkKCl7fXRvT3B0aW9uKCl7cmV0dXJue2tpbmQ6ImVtcHR5In19bWF0Y2hlcyhlKXtyZXR1cm4gZS5lbXB0eSgpfXRvSlNPTihlKXtyZXR1cm4gbnVsbH19Y29uc3QgY3M9IjIuMC4wIjtmdW5jdGlvbiBmcyhyKXtnbG9iYWxUaGlzLl92b25hZ2VNZWRpYVByb2Nlc3Nvck1ldGFkYXRhPXJ9ZnVuY3Rpb24gbHMoKXtyZXR1cm4gZ2xvYmFsVGhpcy5fdm9uYWdlTWVkaWFQcm9jZXNzb3JNZXRhZGF0YX1jbGFzcyB6e2NvbnN0cnVjdG9yKCl7Y29uc3QgZT1scygpO3RoaXMuX3JlcG9ydD17YWN0aW9uOkUuZW1wdHkoKSxhcHBsaWNhdGlvbklkOkUub2ZOdWxsYWJsZShlIT09dm9pZCAwJiZlIT1udWxsP2UuYXBwSWQ6bnVsbCksdGltZXN0YW1wOkRhdGUubm93KCksZnBzOkUuZW1wdHkoKSxmcmFtZXNUcmFuc2Zvcm1lZDpFLmVtcHR5KCksZ3VpZDpFLmVtcHR5KCksaGlnaGVzdEZyYW1lVHJhbnNmb3JtQ3B1OkUuZW1wdHkoKSxtZXNzYWdlOkUuZW1wdHkoKSxzb3VyY2U6RS5vZk51bGxhYmxlKGUhPT12b2lkIDAmJmUhPW51bGw/ZS5zb3VyY2VUeXBlOm51bGwpLHRyYW5zZm9ybWVkRnBzOkUuZW1wdHkoKSx0cmFuc2Zvcm1lclR5cGU6RS5lbXB0eSgpLHZhcmlhdGlvbjpFLmVtcHR5KCksdmlkZW9IZWlnaHQ6RS5lbXB0eSgpLHZpZGVvV2lkdGg6RS5lbXB0eSgpLHZlcnNpb246Y3MsZXJyb3I6RS5lbXB0eSgpLHByb3h5VXJsOkUub2ZOdWxsYWJsZShlIT09dm9pZCAwJiZlIT1udWxsP2UucHJveHlVcmw6bnVsbCl9fWFjdGlvbihlKXtyZXR1cm4gdGhpcy5fcmVwb3J0LmFjdGlvbj1FLm9mTnVsbGFibGUoZSksdGhpc31mcmFtZXNUcmFuc2Zvcm1lZChlKXtyZXR1cm4gdGhpcy5fcmVwb3J0LmZyYW1lc1RyYW5zZm9ybWVkPUUub2ZOdWxsYWJsZShlKSx0aGlzfWZwcyhlKXtyZXR1cm4gdGhpcy5fcmVwb3J0LmZwcz1FLm9mTnVsbGFibGUoZSksdGhpc31ndWlkKGUpe3JldHVybiB0aGlzLl9yZXBvcnQuZ3VpZD1FLm9mTnVsbGFibGUoZSksdGhpc31tZXNzYWdlKGUpe3JldHVybiB0aGlzLl9yZXBvcnQubWVzc2FnZT1FLm9mTnVsbGFibGUoZSksdGhpc310cmFuc2Zvcm1lZEZwcyhlKXtyZXR1cm4gdGhpcy5fcmVwb3J0LnRyYW5zZm9ybWVkRnBzPUUub2ZOdWxsYWJsZShlKSx0aGlzfXRyYW5zZm9ybWVyVHlwZShlKXtyZXR1cm4gdGhpcy5fcmVwb3J0LnRyYW5zZm9ybWVyVHlwZT1FLm9mTnVsbGFibGUoZSksdGhpc312YXJpYXRpb24oZSl7cmV0dXJuIHRoaXMuX3JlcG9ydC52YXJpYXRpb249RS5vZk51bGxhYmxlKGUpLHRoaXN9dmlkZW9IZWlnaHQoZSl7cmV0dXJuIHRoaXMuX3JlcG9ydC52aWRlb0hlaWdodD1FLm9mTnVsbGFibGUoZSksdGhpc312aWRlb1dpZHRoKGUpe3JldHVybiB0aGlzLl9yZXBvcnQudmlkZW9XaWR0aD1FLm9mTnVsbGFibGUoZSksdGhpc31lcnJvcihlKXtyZXR1cm4gdGhpcy5fcmVwb3J0LmVycm9yPUUub2ZOdWxsYWJsZShlKSx0aGlzfWJ1aWxkKCl7cmV0dXJuIHRoaXMuX3JlcG9ydH19Y29uc3QgZHM9cj0+SlNPTi5zdHJpbmdpZnkociwoZSx0KT0+e2lmKHQhPT1udWxsKXJldHVybiB0fSk7Y2xhc3MgSHtzdGF0aWMgcmVwb3J0KGUpe3JldHVybiBuZXcgUHJvbWlzZSgodCxuKT0+e2lmKGUuYXBwbGljYXRpb25JZC5pc0VtcHR5KCl8fGUuc291cmNlLmlzRW1wdHkoKSl7dCgic3VjY2VzcyIpO3JldHVybn1sZXQgaT11cy5jcmVhdGUoKSxvPXt0aW1lb3V0OjFlNCx0aW1lb3V0RXJyb3JNZXNzYWdlOiJSZXF1ZXN0IHRpbWVvdXQiLGhlYWRlcnM6eyJDb250ZW50LVR5cGUiOiJhcHBsaWNhdGlvbi9qc29uIn19LHM9ImhsZy50b2tib3guY29tL3Byb2QvbG9nZ2luZy92Y3Bfd2VicnRjIjtpZihlLnByb3h5VXJsLmlzRW1wdHkoKSlzPSJodHRwczovLyIrcztlbHNle2xldCBhO2UucHJveHlVcmwuZ2V0KCkuc2xpY2UoZS5wcm94eVVybC5nZXQoKS5sZW5ndGgtMSkhPT0iLyI/YT1lLnByb3h5VXJsLmdldCgpKyIvIjphPWUucHJveHlVcmwuZ2V0KCkscz1hK3N9aS5wb3N0KHMsZHMoZSksbykudGhlbihhPT57Y29uc29sZS5sb2coYSksdCgic3VjY2VzcyIpfSkuY2F0Y2goYT0+e2NvbnNvbGUubG9nKGEpLG4oYSl9KX0pfX12YXIgWmUsbXM9bmV3IFVpbnQ4QXJyYXkoMTYpO2Z1bmN0aW9uIGhzKCl7aWYoIVplJiYoWmU9dHlwZW9mIGNyeXB0byE9InVuZGVmaW5lZCImJmNyeXB0by5nZXRSYW5kb21WYWx1ZXMmJmNyeXB0by5nZXRSYW5kb21WYWx1ZXMuYmluZChjcnlwdG8pfHx0eXBlb2YgbXNDcnlwdG8hPSJ1bmRlZmluZWQiJiZ0eXBlb2YgbXNDcnlwdG8uZ2V0UmFuZG9tVmFsdWVzPT0iZnVuY3Rpb24iJiZtc0NyeXB0by5nZXRSYW5kb21WYWx1ZXMuYmluZChtc0NyeXB0byksIVplKSl0aHJvdyBuZXcgRXJyb3IoImNyeXB0by5nZXRSYW5kb21WYWx1ZXMoKSBub3Qgc3VwcG9ydGVkLiBTZWUgaHR0cHM6Ly9naXRodWIuY29tL3V1aWRqcy91dWlkI2dldHJhbmRvbXZhbHVlcy1ub3Qtc3VwcG9ydGVkIik7cmV0dXJuIFplKG1zKX12YXIgcHM9L14oPzpbMC05YS1mXXs4fS1bMC05YS1mXXs0fS1bMS01XVswLTlhLWZdezN9LVs4OWFiXVswLTlhLWZdezN9LVswLTlhLWZdezEyfXwwMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDApJC9pO2Z1bmN0aW9uIHlzKHIpe3JldHVybiB0eXBlb2Ygcj09InN0cmluZyImJnBzLnRlc3Qocil9Zm9yKHZhciBPPVtdLFd0PTA7V3Q8MjU2OysrV3QpTy5wdXNoKChXdCsyNTYpLnRvU3RyaW5nKDE2KS5zdWJzdHIoMSkpO2Z1bmN0aW9uIF9zKHIpe3ZhciBlPWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTowLHQ9KE9bcltlKzBdXStPW3JbZSsxXV0rT1tyW2UrMl1dK09bcltlKzNdXSsiLSIrT1tyW2UrNF1dK09bcltlKzVdXSsiLSIrT1tyW2UrNl1dK09bcltlKzddXSsiLSIrT1tyW2UrOF1dK09bcltlKzldXSsiLSIrT1tyW2UrMTBdXStPW3JbZSsxMV1dK09bcltlKzEyXV0rT1tyW2UrMTNdXStPW3JbZSsxNF1dK09bcltlKzE1XV0pLnRvTG93ZXJDYXNlKCk7aWYoIXlzKHQpKXRocm93IFR5cGVFcnJvcigiU3RyaW5naWZpZWQgVVVJRCBpcyBpbnZhbGlkIik7cmV0dXJuIHR9ZnVuY3Rpb24gZG4ocixlLHQpe3I9cnx8e307dmFyIG49ci5yYW5kb218fChyLnJuZ3x8aHMpKCk7aWYobls2XT1uWzZdJjE1fDY0LG5bOF09bls4XSY2M3wxMjgsZSl7dD10fHwwO2Zvcih2YXIgaT0wO2k8MTY7KytpKWVbdCtpXT1uW2ldO3JldHVybiBlfXJldHVybiBfcyhuKX1jb25zdCByZT1uZXcgV2Vha01hcCxldD1uZXcgV2Vha01hcCxGZT1uZXcgV2Vha01hcCxqdD1TeW1ib2woImFueVByb2R1Y2VyIiksbW49UHJvbWlzZS5yZXNvbHZlKCksdHQ9U3ltYm9sKCJsaXN0ZW5lckFkZGVkIikscnQ9U3ltYm9sKCJsaXN0ZW5lclJlbW92ZWQiKTtsZXQgcXQ9ITE7ZnVuY3Rpb24gdmUocil7aWYodHlwZW9mIHIhPSJzdHJpbmciJiZ0eXBlb2YgciE9InN5bWJvbCIpdGhyb3cgbmV3IFR5cGVFcnJvcigiZXZlbnROYW1lIG11c3QgYmUgYSBzdHJpbmcgb3IgYSBzeW1ib2wiKX1mdW5jdGlvbiBudChyKXtpZih0eXBlb2YgciE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgVHlwZUVycm9yKCJsaXN0ZW5lciBtdXN0IGJlIGEgZnVuY3Rpb24iKX1mdW5jdGlvbiBFZShyLGUpe2NvbnN0IHQ9ZXQuZ2V0KHIpO3JldHVybiB0LmhhcyhlKXx8dC5zZXQoZSxuZXcgU2V0KSx0LmdldChlKX1mdW5jdGlvbiBQZShyLGUpe2NvbnN0IHQ9dHlwZW9mIGU9PSJzdHJpbmcifHx0eXBlb2YgZT09InN5bWJvbCI/ZTpqdCxuPUZlLmdldChyKTtyZXR1cm4gbi5oYXModCl8fG4uc2V0KHQsbmV3IFNldCksbi5nZXQodCl9ZnVuY3Rpb24geHMocixlLHQpe2NvbnN0IG49RmUuZ2V0KHIpO2lmKG4uaGFzKGUpKWZvcihjb25zdCBpIG9mIG4uZ2V0KGUpKWkuZW5xdWV1ZSh0KTtpZihuLmhhcyhqdCkpe2NvbnN0IGk9UHJvbWlzZS5hbGwoW2UsdF0pO2Zvcihjb25zdCBvIG9mIG4uZ2V0KGp0KSlvLmVucXVldWUoaSl9fWZ1bmN0aW9uIGhuKHIsZSl7ZT1BcnJheS5pc0FycmF5KGUpP2U6W2VdO2xldCB0PSExLG49KCk9Pnt9LGk9W107Y29uc3Qgbz17ZW5xdWV1ZShzKXtpLnB1c2gocyksbigpfSxmaW5pc2goKXt0PSEwLG4oKX19O2Zvcihjb25zdCBzIG9mIGUpUGUocixzKS5hZGQobyk7cmV0dXJue2FzeW5jIG5leHQoKXtyZXR1cm4gaT9pLmxlbmd0aD09PTA/dD8oaT12b2lkIDAsdGhpcy5uZXh0KCkpOihhd2FpdCBuZXcgUHJvbWlzZShzPT57bj1zfSksdGhpcy5uZXh0KCkpOntkb25lOiExLHZhbHVlOmF3YWl0IGkuc2hpZnQoKX06e2RvbmU6ITB9fSxhc3luYyByZXR1cm4ocyl7aT12b2lkIDA7Zm9yKGNvbnN0IGEgb2YgZSlQZShyLGEpLmRlbGV0ZShvKTtyZXR1cm4gbigpLGFyZ3VtZW50cy5sZW5ndGg+MD97ZG9uZTohMCx2YWx1ZTphd2FpdCBzfTp7ZG9uZTohMH19LFtTeW1ib2wuYXN5bmNJdGVyYXRvcl0oKXtyZXR1cm4gdGhpc319fWZ1bmN0aW9uIHBuKHIpe2lmKHI9PT12b2lkIDApcmV0dXJuIHluO2lmKCFBcnJheS5pc0FycmF5KHIpKXRocm93IG5ldyBUeXBlRXJyb3IoImBtZXRob2ROYW1lc2AgbXVzdCBiZSBhbiBhcnJheSBvZiBzdHJpbmdzIik7Zm9yKGNvbnN0IGUgb2YgcilpZigheW4uaW5jbHVkZXMoZSkpdGhyb3cgdHlwZW9mIGUhPSJzdHJpbmciP25ldyBUeXBlRXJyb3IoImBtZXRob2ROYW1lc2AgZWxlbWVudCBtdXN0IGJlIGEgc3RyaW5nIik6bmV3IEVycm9yKGAke2V9IGlzIG5vdCBFbWl0dGVyeSBtZXRob2RgKTtyZXR1cm4gcn1jb25zdCBYdD1yPT5yPT09dHR8fHI9PT1ydDtjbGFzcyBmZXtzdGF0aWMgbWl4aW4oZSx0KXtyZXR1cm4gdD1wbih0KSxuPT57aWYodHlwZW9mIG4hPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcigiYHRhcmdldGAgbXVzdCBiZSBmdW5jdGlvbiIpO2Zvcihjb25zdCBzIG9mIHQpaWYobi5wcm90b3R5cGVbc10hPT12b2lkIDApdGhyb3cgbmV3IEVycm9yKGBUaGUgcHJvcGVydHkgXGAke3N9XGAgYWxyZWFkeSBleGlzdHMgb24gXGB0YXJnZXRcYGApO2Z1bmN0aW9uIGkoKXtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsZSx7ZW51bWVyYWJsZTohMSx2YWx1ZTpuZXcgZmV9KSx0aGlzW2VdfU9iamVjdC5kZWZpbmVQcm9wZXJ0eShuLnByb3RvdHlwZSxlLHtlbnVtZXJhYmxlOiExLGdldDppfSk7Y29uc3Qgbz1zPT5mdW5jdGlvbiguLi5hKXtyZXR1cm4gdGhpc1tlXVtzXSguLi5hKX07Zm9yKGNvbnN0IHMgb2YgdClPYmplY3QuZGVmaW5lUHJvcGVydHkobi5wcm90b3R5cGUscyx7ZW51bWVyYWJsZTohMSx2YWx1ZTpvKHMpfSk7cmV0dXJuIG59fXN0YXRpYyBnZXQgaXNEZWJ1Z0VuYWJsZWQoKXtpZih0eXBlb2YgcHJvY2VzcyE9Im9iamVjdCIpcmV0dXJuIHF0O2NvbnN0e2VudjplfT1wcm9jZXNzfHx7ZW52Ont9fTtyZXR1cm4gZS5ERUJVRz09PSJlbWl0dGVyeSJ8fGUuREVCVUc9PT0iKiJ8fHF0fXN0YXRpYyBzZXQgaXNEZWJ1Z0VuYWJsZWQoZSl7cXQ9ZX1jb25zdHJ1Y3RvcihlPXt9KXtyZS5zZXQodGhpcyxuZXcgU2V0KSxldC5zZXQodGhpcyxuZXcgTWFwKSxGZS5zZXQodGhpcyxuZXcgTWFwKSx0aGlzLmRlYnVnPWUuZGVidWd8fHt9LHRoaXMuZGVidWcuZW5hYmxlZD09PXZvaWQgMCYmKHRoaXMuZGVidWcuZW5hYmxlZD0hMSksdGhpcy5kZWJ1Zy5sb2dnZXJ8fCh0aGlzLmRlYnVnLmxvZ2dlcj0odCxuLGksbyk9PntvPUpTT04uc3RyaW5naWZ5KG8pLHR5cGVvZiBpPT0ic3ltYm9sIiYmKGk9aS50b1N0cmluZygpKTtjb25zdCBzPW5ldyBEYXRlLGE9YCR7cy5nZXRIb3VycygpfToke3MuZ2V0TWludXRlcygpfToke3MuZ2V0U2Vjb25kcygpfS4ke3MuZ2V0TWlsbGlzZWNvbmRzKCl9YDtjb25zb2xlLmxvZyhgWyR7YX1dW2VtaXR0ZXJ5OiR7dH1dWyR7bn1dIEV2ZW50IE5hbWU6ICR7aX0KCWRhdGE6ICR7b31gKX0pfWxvZ0lmRGVidWdFbmFibGVkKGUsdCxuKXsoZmUuaXNEZWJ1Z0VuYWJsZWR8fHRoaXMuZGVidWcuZW5hYmxlZCkmJnRoaXMuZGVidWcubG9nZ2VyKGUsdGhpcy5kZWJ1Zy5uYW1lLHQsbil9b24oZSx0KXtudCh0KSxlPUFycmF5LmlzQXJyYXkoZSk/ZTpbZV07Zm9yKGNvbnN0IG4gb2YgZSl2ZShuKSxFZSh0aGlzLG4pLmFkZCh0KSx0aGlzLmxvZ0lmRGVidWdFbmFibGVkKCJzdWJzY3JpYmUiLG4sdm9pZCAwKSxYdChuKXx8dGhpcy5lbWl0KHR0LHtldmVudE5hbWU6bixsaXN0ZW5lcjp0fSk7cmV0dXJuIHRoaXMub2ZmLmJpbmQodGhpcyxlLHQpfW9mZihlLHQpe250KHQpLGU9QXJyYXkuaXNBcnJheShlKT9lOltlXTtmb3IoY29uc3QgbiBvZiBlKXZlKG4pLEVlKHRoaXMsbikuZGVsZXRlKHQpLHRoaXMubG9nSWZEZWJ1Z0VuYWJsZWQoInVuc3Vic2NyaWJlIixuLHZvaWQgMCksWHQobil8fHRoaXMuZW1pdChydCx7ZXZlbnROYW1lOm4sbGlzdGVuZXI6dH0pfW9uY2UoZSl7cmV0dXJuIG5ldyBQcm9taXNlKHQ9Pntjb25zdCBuPXRoaXMub24oZSxpPT57bigpLHQoaSl9KX0pfWV2ZW50cyhlKXtlPUFycmF5LmlzQXJyYXkoZSk/ZTpbZV07Zm9yKGNvbnN0IHQgb2YgZSl2ZSh0KTtyZXR1cm4gaG4odGhpcyxlKX1hc3luYyBlbWl0KGUsdCl7dmUoZSksdGhpcy5sb2dJZkRlYnVnRW5hYmxlZCgiZW1pdCIsZSx0KSx4cyh0aGlzLGUsdCk7Y29uc3Qgbj1FZSh0aGlzLGUpLGk9cmUuZ2V0KHRoaXMpLG89Wy4uLm5dLHM9WHQoZSk/W106Wy4uLmldO2F3YWl0IG1uLGF3YWl0IFByb21pc2UuYWxsKFsuLi5vLm1hcChhc3luYyBhPT57aWYobi5oYXMoYSkpcmV0dXJuIGEodCl9KSwuLi5zLm1hcChhc3luYyBhPT57aWYoaS5oYXMoYSkpcmV0dXJuIGEoZSx0KX0pXSl9YXN5bmMgZW1pdFNlcmlhbChlLHQpe3ZlKGUpLHRoaXMubG9nSWZEZWJ1Z0VuYWJsZWQoImVtaXRTZXJpYWwiLGUsdCk7Y29uc3Qgbj1FZSh0aGlzLGUpLGk9cmUuZ2V0KHRoaXMpLG89Wy4uLm5dLHM9Wy4uLmldO2F3YWl0IG1uO2Zvcihjb25zdCBhIG9mIG8pbi5oYXMoYSkmJmF3YWl0IGEodCk7Zm9yKGNvbnN0IGEgb2YgcylpLmhhcyhhKSYmYXdhaXQgYShlLHQpfW9uQW55KGUpe3JldHVybiBudChlKSx0aGlzLmxvZ0lmRGVidWdFbmFibGVkKCJzdWJzY3JpYmVBbnkiLHZvaWQgMCx2b2lkIDApLHJlLmdldCh0aGlzKS5hZGQoZSksdGhpcy5lbWl0KHR0LHtsaXN0ZW5lcjplfSksdGhpcy5vZmZBbnkuYmluZCh0aGlzLGUpfWFueUV2ZW50KCl7cmV0dXJuIGhuKHRoaXMpfW9mZkFueShlKXtudChlKSx0aGlzLmxvZ0lmRGVidWdFbmFibGVkKCJ1bnN1YnNjcmliZUFueSIsdm9pZCAwLHZvaWQgMCksdGhpcy5lbWl0KHJ0LHtsaXN0ZW5lcjplfSkscmUuZ2V0KHRoaXMpLmRlbGV0ZShlKX1jbGVhckxpc3RlbmVycyhlKXtlPUFycmF5LmlzQXJyYXkoZSk/ZTpbZV07Zm9yKGNvbnN0IHQgb2YgZSlpZih0aGlzLmxvZ0lmRGVidWdFbmFibGVkKCJjbGVhciIsdCx2b2lkIDApLHR5cGVvZiB0PT0ic3RyaW5nInx8dHlwZW9mIHQ9PSJzeW1ib2wiKXtFZSh0aGlzLHQpLmNsZWFyKCk7Y29uc3Qgbj1QZSh0aGlzLHQpO2Zvcihjb25zdCBpIG9mIG4paS5maW5pc2goKTtuLmNsZWFyKCl9ZWxzZXtyZS5nZXQodGhpcykuY2xlYXIoKTtmb3IoY29uc3QgbiBvZiBldC5nZXQodGhpcykudmFsdWVzKCkpbi5jbGVhcigpO2Zvcihjb25zdCBuIG9mIEZlLmdldCh0aGlzKS52YWx1ZXMoKSl7Zm9yKGNvbnN0IGkgb2YgbilpLmZpbmlzaCgpO24uY2xlYXIoKX19fWxpc3RlbmVyQ291bnQoZSl7ZT1BcnJheS5pc0FycmF5KGUpP2U6W2VdO2xldCB0PTA7Zm9yKGNvbnN0IG4gb2YgZSl7aWYodHlwZW9mIG49PSJzdHJpbmciKXt0Kz1yZS5nZXQodGhpcykuc2l6ZStFZSh0aGlzLG4pLnNpemUrUGUodGhpcyxuKS5zaXplK1BlKHRoaXMpLnNpemU7Y29udGludWV9dHlwZW9mIG4hPSJ1bmRlZmluZWQiJiZ2ZShuKSx0Kz1yZS5nZXQodGhpcykuc2l6ZTtmb3IoY29uc3QgaSBvZiBldC5nZXQodGhpcykudmFsdWVzKCkpdCs9aS5zaXplO2Zvcihjb25zdCBpIG9mIEZlLmdldCh0aGlzKS52YWx1ZXMoKSl0Kz1pLnNpemV9cmV0dXJuIHR9YmluZE1ldGhvZHMoZSx0KXtpZih0eXBlb2YgZSE9Im9iamVjdCJ8fGU9PT1udWxsKXRocm93IG5ldyBUeXBlRXJyb3IoImB0YXJnZXRgIG11c3QgYmUgYW4gb2JqZWN0Iik7dD1wbih0KTtmb3IoY29uc3QgbiBvZiB0KXtpZihlW25dIT09dm9pZCAwKXRocm93IG5ldyBFcnJvcihgVGhlIHByb3BlcnR5IFxgJHtufVxgIGFscmVhZHkgZXhpc3RzIG9uIFxgdGFyZ2V0XGBgKTtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxuLHtlbnVtZXJhYmxlOiExLHZhbHVlOnRoaXNbbl0uYmluZCh0aGlzKX0pfX19Y29uc3QgeW49T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoZmUucHJvdG90eXBlKS5maWx0ZXIocj0+ciE9PSJjb25zdHJ1Y3RvciIpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShmZSwibGlzdGVuZXJBZGRlZCIse3ZhbHVlOnR0LHdyaXRhYmxlOiExLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiExfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGZlLCJsaXN0ZW5lclJlbW92ZWQiLHt2YWx1ZTpydCx3cml0YWJsZTohMSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMX0pO3ZhciBZdD1mZTtmdW5jdGlvbiBicyhyKXtyZXR1cm4gdHlwZW9mIHI9PSJvYmplY3QiJiZyIT09bnVsbCYmIm1lc3NhZ2UiaW4gciYmdHlwZW9mIHIubWVzc2FnZT09InN0cmluZyJ9ZnVuY3Rpb24gZ3Mocil7aWYoYnMocikpcmV0dXJuIHI7dHJ5e3JldHVybiBuZXcgRXJyb3IoSlNPTi5zdHJpbmdpZnkocikpfWNhdGNoe3JldHVybiBuZXcgRXJyb3IoU3RyaW5nKHIpKX19ZnVuY3Rpb24gS3Qocil7cmV0dXJuIGdzKHIpLm1lc3NhZ2V9dmFyIEp0PShyPT4oci5waXBlbGluZV9lbmRlZD0icGlwZWxpbmVfZW5kZWQiLHIucGlwZWxpbmVfZW5kZWRfd2l0aF9lcnJvcj0icGlwZWxpbmVfZW5kZWRfd2l0aF9lcnJvciIsci5waXBlbGluZV9zdGFydGVkPSJwaXBlbGluZV9zdGFydGVkIixyLnBpcGVsaW5lX3N0YXJ0ZWRfd2l0aF9lcnJvcj0icGlwZWxpbmVfc3RhcnRlZF93aXRoX2Vycm9yIixyLnBpcGVsaW5lX3Jlc3RhcnRlZD0icGlwZWxpbmVfcmVzdGFydGVkIixyLnBpcGVsaW5lX3Jlc3RhcnRlZF93aXRoX2Vycm9yPSJwaXBlbGluZV9yZXN0YXJ0ZWRfd2l0aF9lcnJvciIscikpKEp0fHx7fSk7Y29uc3QgdnM9NTAwLEVzPS44O2NsYXNzIFRzIGV4dGVuZHMgWXR7Y29uc3RydWN0b3IoZSx0KXtzdXBlcigpLHRoaXMuaW5kZXhfPXQsdGhpcy51dWlkXz1kbigpLHRoaXMuZnJhbWVzVHJhbnNmb3JtZWRfPTAsdGhpcy50cmFuc2Zvcm1lcl89ZSx0aGlzLnNob3VsZFN0b3BfPSExLHRoaXMuaXNGbGFzaGVkXz0hMSx0aGlzLmZyYW1lc0Zyb21Tb3VyY2VfPTAsdGhpcy5mcHNfPTAsdGhpcy5tZWRpYVRyYW5zZm9ybWVyUW9zUmVwb3J0U3RhcnRUaW1lc3RhbXBfPTAsdGhpcy52aWRlb0hlaWdodF89MCx0aGlzLnZpZGVvV2lkdGhfPTAsdGhpcy50cmFja0V4cGVjdGVkUmF0ZV89LTEsdGhpcy50cmFuc2Zvcm1lclR5cGVfPSJDdXN0b20iLCJnZXRUcmFuc2Zvcm1lclR5cGUiaW4gZSYmKHRoaXMudHJhbnNmb3JtZXJUeXBlXz1lLmdldFRyYW5zZm9ybWVyVHlwZSgpKTtjb25zdCBuPW5ldyB6KCkuYWN0aW9uKCJNZWRpYVRyYW5zZm9ybWVyIikuZ3VpZCh0aGlzLnV1aWRfKS50cmFuc2Zvcm1lclR5cGUodGhpcy50cmFuc2Zvcm1lclR5cGVfKS52YXJpYXRpb24oIkNyZWF0ZSIpLmJ1aWxkKCk7SC5yZXBvcnQobil9c2V0VHJhY2tFeHBlY3RlZFJhdGUoZSl7dGhpcy50cmFja0V4cGVjdGVkUmF0ZV89ZX1hc3luYyBzdGFydChlKXtpZih0aGlzLmNvbnRyb2xsZXJfPWUsdGhpcy50cmFuc2Zvcm1lcl8mJnR5cGVvZiB0aGlzLnRyYW5zZm9ybWVyXy5zdGFydD09ImZ1bmN0aW9uIil0cnl7YXdhaXQgdGhpcy50cmFuc2Zvcm1lcl8uc3RhcnQoZSl9Y2F0Y2godCl7Y29uc3Qgbj1uZXcgeigpLmFjdGlvbigiTWVkaWFUcmFuc2Zvcm1lciIpLmd1aWQodGhpcy51dWlkXykubWVzc2FnZShaLmVycm9ycy50cmFuc2Zvcm1lcl9zdGFydCkudHJhbnNmb3JtZXJUeXBlKHRoaXMudHJhbnNmb3JtZXJUeXBlXykudmFyaWF0aW9uKCJFcnJvciIpLmVycm9yKEt0KHQpKS5idWlsZCgpO0gucmVwb3J0KG4pO2NvbnN0IGk9e2V2ZW50TWV0YURhdGE6e3RyYW5zZm9ybWVySW5kZXg6dGhpcy5pbmRleF99LGVycm9yOnQsZnVuY3Rpb246InN0YXJ0In07dGhpcy5lbWl0KCJlcnJvciIsaSl9fWFzeW5jIHRyYW5zZm9ybShlLHQpe3ZhciBuLGksbyxzO2lmKHRoaXMubWVkaWFUcmFuc2Zvcm1lclFvc1JlcG9ydFN0YXJ0VGltZXN0YW1wXz09PTAmJih0aGlzLm1lZGlhVHJhbnNmb3JtZXJRb3NSZXBvcnRTdGFydFRpbWVzdGFtcF89RGF0ZS5ub3coKSksZSBpbnN0YW5jZW9mIFZpZGVvRnJhbWUmJih0aGlzLnZpZGVvSGVpZ2h0Xz0obj1lPT1udWxsP3ZvaWQgMDplLmRpc3BsYXlIZWlnaHQpIT1udWxsP246MCx0aGlzLnZpZGVvV2lkdGhfPShpPWU9PW51bGw/dm9pZCAwOmUuZGlzcGxheVdpZHRoKSE9bnVsbD9pOjApLCsrdGhpcy5mcmFtZXNGcm9tU291cmNlXyx0aGlzLnRyYW5zZm9ybWVyXylpZih0aGlzLnNob3VsZFN0b3BfKWNvbnNvbGUud2FybigiW1BpcGVsaW5lXSBmbHVzaCBmcm9tIHRyYW5zZm9ybSIpLGUuY2xvc2UoKSx0aGlzLmZsdXNoKHQpLHQudGVybWluYXRlKCk7ZWxzZSB0cnl7YXdhaXQoKHM9KG89dGhpcy50cmFuc2Zvcm1lcl8pLnRyYW5zZm9ybSk9PW51bGw/dm9pZCAwOnMuY2FsbChvLGUsdCkpLCsrdGhpcy5mcmFtZXNUcmFuc2Zvcm1lZF8sdGhpcy5mcmFtZXNUcmFuc2Zvcm1lZF89PT12cyYmdGhpcy5tZWRpYVRyYW5zZm9ybWVyUW9zUmVwb3J0KCl9Y2F0Y2goYSl7Y29uc3QgdT1uZXcgeigpLmFjdGlvbigiTWVkaWFUcmFuc2Zvcm1lciIpLmd1aWQodGhpcy51dWlkXykubWVzc2FnZShaLmVycm9ycy50cmFuc2Zvcm1lcl90cmFuc2Zvcm0pLnRyYW5zZm9ybWVyVHlwZSh0aGlzLnRyYW5zZm9ybWVyVHlwZV8pLnZhcmlhdGlvbigiRXJyb3IiKS5lcnJvcihLdChhKSkuYnVpbGQoKTtILnJlcG9ydCh1KTtjb25zdCBmPXtldmVudE1ldGFEYXRhOnt0cmFuc2Zvcm1lckluZGV4OnRoaXMuaW5kZXhffSxlcnJvcjphLGZ1bmN0aW9uOiJ0cmFuc2Zvcm0ifTt0aGlzLmVtaXQoImVycm9yIixmKX19YXN5bmMgZmx1c2goZSl7aWYodGhpcy50cmFuc2Zvcm1lcl8mJnR5cGVvZiB0aGlzLnRyYW5zZm9ybWVyXy5mbHVzaD09ImZ1bmN0aW9uIiYmIXRoaXMuaXNGbGFzaGVkXyl7dGhpcy5pc0ZsYXNoZWRfPSEwO3RyeXthd2FpdCB0aGlzLnRyYW5zZm9ybWVyXy5mbHVzaChlKX1jYXRjaChuKXtjb25zdCBpPW5ldyB6KCkuYWN0aW9uKCJNZWRpYVRyYW5zZm9ybWVyIikuZ3VpZCh0aGlzLnV1aWRfKS5tZXNzYWdlKFouZXJyb3JzLnRyYW5zZm9ybWVyX2ZsdXNoKS50cmFuc2Zvcm1lclR5cGUodGhpcy50cmFuc2Zvcm1lclR5cGVfKS52YXJpYXRpb24oIkVycm9yIikuZXJyb3IoS3QobikpLmJ1aWxkKCk7SC5yZXBvcnQoaSk7Y29uc3Qgbz17ZXZlbnRNZXRhRGF0YTp7dHJhbnNmb3JtZXJJbmRleDp0aGlzLmluZGV4X30sZXJyb3I6bixmdW5jdGlvbjoiZmx1c2gifTt0aGlzLmVtaXQoImVycm9yIixvKX19dGhpcy5tZWRpYVRyYW5zZm9ybWVyUW9zUmVwb3J0KCk7Y29uc3QgdD1uZXcgeigpLmFjdGlvbigiTWVkaWFUcmFuc2Zvcm1lciIpLmd1aWQodGhpcy51dWlkXykudHJhbnNmb3JtZXJUeXBlKHRoaXMudHJhbnNmb3JtZXJUeXBlXykudmFyaWF0aW9uKCJEZWxldGUiKS5idWlsZCgpO0gucmVwb3J0KHQpfXN0b3AoKXtjb25zb2xlLmxvZygiW1BpcGVsaW5lXSBTdG9wIHN0cmVhbS4iKSx0aGlzLmNvbnRyb2xsZXJfJiYodGhpcy5mbHVzaCh0aGlzLmNvbnRyb2xsZXJfKSx0aGlzLmNvbnRyb2xsZXJfLnRlcm1pbmF0ZSgpKSx0aGlzLnNob3VsZFN0b3BfPSEwfW1lZGlhVHJhbnNmb3JtZXJRb3NSZXBvcnQoKXtsZXQgZT0oRGF0ZS5ub3coKS10aGlzLm1lZGlhVHJhbnNmb3JtZXJRb3NSZXBvcnRTdGFydFRpbWVzdGFtcF8pLzFlMyx0PXRoaXMuZnJhbWVzRnJvbVNvdXJjZV8vZSxuPXRoaXMuZnJhbWVzVHJhbnNmb3JtZWRfL2U7aWYodGhpcy50cmFja0V4cGVjdGVkUmF0ZV8hPS0xJiZ0aGlzLnRyYWNrRXhwZWN0ZWRSYXRlXypFcz50KXtjb25zdCBvPXtldmVudE1ldGFEYXRhOnt0cmFuc2Zvcm1lckluZGV4OnRoaXMuaW5kZXhffSx3YXJuaW5nVHlwZToiZnBzX2Ryb3AiLGRyb3BJbmZvOntyZXF1ZXN0ZWQ6dGhpcy50cmFja0V4cGVjdGVkUmF0ZV8sY3VycmVudDp0fX07dGhpcy5lbWl0KCJ3YXJuIixvKX1jb25zdCBpPW5ldyB6KCkuYWN0aW9uKCJNZWRpYVRyYW5zZm9ybWVyIikuZnBzKHQpLnRyYW5zZm9ybWVkRnBzKG4pLmZyYW1lc1RyYW5zZm9ybWVkKHRoaXMuZnJhbWVzVHJhbnNmb3JtZWRfKS5ndWlkKHRoaXMudXVpZF8pLnRyYW5zZm9ybWVyVHlwZSh0aGlzLnRyYW5zZm9ybWVyVHlwZV8pLnZpZGVvSGVpZ2h0KHRoaXMudmlkZW9IZWlnaHRfKS52aWRlb1dpZHRoKHRoaXMudmlkZW9XaWR0aF8pLnZhcmlhdGlvbigiUW9TIikuYnVpbGQoKTtILnJlcG9ydChpKSx0aGlzLm1lZGlhVHJhbnNmb3JtZXJRb3NSZXBvcnRTdGFydFRpbWVzdGFtcF89MCx0aGlzLmZyYW1lc0Zyb21Tb3VyY2VfPTAsdGhpcy5mcmFtZXNUcmFuc2Zvcm1lZF89MH19Y2xhc3MgQXMgZXh0ZW5kcyBZdHtjb25zdHJ1Y3RvcihlKXtzdXBlcigpLHRoaXMudHJhbnNmb3JtZXJzXz1bXSx0aGlzLnRyYWNrRXhwZWN0ZWRSYXRlXz0tMTtmb3IobGV0IHQ9MDt0PGUubGVuZ3RoO3QrKyl7bGV0IG49bmV3IFRzKGVbdF0sdCk7bi5vbigiZXJyb3IiLGk9Pnt0aGlzLmVtaXQoImVycm9yIixpKX0pLG4ub24oIndhcm4iLGk9Pnt0aGlzLmVtaXQoIndhcm4iLGkpfSksdGhpcy50cmFuc2Zvcm1lcnNfLnB1c2gobil9fXNldFRyYWNrRXhwZWN0ZWRSYXRlKGUpe3RoaXMudHJhY2tFeHBlY3RlZFJhdGVfPWU7Zm9yKGxldCB0IG9mIHRoaXMudHJhbnNmb3JtZXJzXyl0LnNldFRyYWNrRXhwZWN0ZWRSYXRlKHRoaXMudHJhY2tFeHBlY3RlZFJhdGVfKX1hc3luYyBzdGFydChlLHQpe2lmKCF0aGlzLnRyYW5zZm9ybWVyc198fHRoaXMudHJhbnNmb3JtZXJzXy5sZW5ndGg9PT0wKXtjb25zb2xlLmxvZygiW1BpcGVsaW5lXSBObyB0cmFuc2Zvcm1lcnMuIik7cmV0dXJufXRyeXtsZXQgbj1lO2ZvcihsZXQgaSBvZiB0aGlzLnRyYW5zZm9ybWVyc18pZT1lLnBpcGVUaHJvdWdoKG5ldyBUcmFuc2Zvcm1TdHJlYW0oaSkpO2UucGlwZVRvKHQpLnRoZW4oYXN5bmMoKT0+e2NvbnNvbGUubG9nKCJbUGlwZWxpbmVdIFNldHVwLiIpLGF3YWl0IHQuYWJvcnQoKSxhd2FpdCBuLmNhbmNlbCgpLHRoaXMuZW1pdCgicGlwZWxpbmVJbmZvIiwicGlwZWxpbmVfZW5kZWQiKX0pLmNhdGNoKGFzeW5jIGk9PntlLmNhbmNlbCgpLnRoZW4oKCk9Pntjb25zb2xlLmxvZygiW1BpcGVsaW5lXSBTaHV0dGluZyBkb3duIHN0cmVhbXMgYWZ0ZXIgYWJvcnQuIil9KS5jYXRjaChvPT57Y29uc29sZS5lcnJvcigiW1BpcGVsaW5lXSBFcnJvciBmcm9tIHN0cmVhbSB0cmFuc2Zvcm06IixvKX0pLGF3YWl0IHQuYWJvcnQoaSksYXdhaXQgbi5jYW5jZWwoaSksdGhpcy5lbWl0KCJwaXBlbGluZUluZm8iLCJwaXBlbGluZV9lbmRlZF93aXRoX2Vycm9yIil9KX1jYXRjaHt0aGlzLmVtaXQoInBpcGVsaW5lSW5mbyIsInBpcGVsaW5lX3N0YXJ0ZWRfd2l0aF9lcnJvciIpLHRoaXMuZGVzdHJveSgpO3JldHVybn10aGlzLmVtaXQoInBpcGVsaW5lSW5mbyIsInBpcGVsaW5lX3N0YXJ0ZWQiKSxjb25zb2xlLmxvZygiW1BpcGVsaW5lXSBQaXBlbGluZSBzdGFydGVkLiIpfWFzeW5jIGRlc3Ryb3koKXtjb25zb2xlLmxvZygiW1BpcGVsaW5lXSBEZXN0cm95aW5nIFBpcGVsaW5lLiIpO2ZvcihsZXQgZSBvZiB0aGlzLnRyYW5zZm9ybWVyc18pZS5zdG9wKCl9fWNsYXNzIHdzIGV4dGVuZHMgWXR7Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMudXVpZF89ZG4oKSx0aGlzLnRyYWNrRXhwZWN0ZWRSYXRlXz0tMTtjb25zdCBlPW5ldyB6KCkuYWN0aW9uKCJNZWRpYVByb2Nlc3NvciIpLmd1aWQodGhpcy51dWlkXykudmFyaWF0aW9uKCJDcmVhdGUiKS5idWlsZCgpO0gucmVwb3J0KGUpfXNldFRyYWNrRXhwZWN0ZWRSYXRlKGUpe3RoaXMudHJhY2tFeHBlY3RlZFJhdGVfPWUsdGhpcy5waXBlbGluZV8mJnRoaXMucGlwZWxpbmVfLnNldFRyYWNrRXhwZWN0ZWRSYXRlKHRoaXMudHJhY2tFeHBlY3RlZFJhdGVfKX10cmFuc2Zvcm0oZSx0KXtyZXR1cm4gdGhpcy5yZWFkYWJsZV89ZSx0aGlzLndyaXRhYmxlXz10LHRoaXMudHJhbnNmb3JtSW50ZXJuYWwoKX10cmFuc2Zvcm1JbnRlcm5hbCgpe3JldHVybiBuZXcgUHJvbWlzZSgoZSx0KT0+e2lmKCF0aGlzLnRyYW5zZm9ybWVyc198fHRoaXMudHJhbnNmb3JtZXJzXy5sZW5ndGg9PT0wKXtjb25zdCBpPW5ldyB6KCkuYWN0aW9uKCJNZWRpYVByb2Nlc3NvciIpLmd1aWQodGhpcy51dWlkXykubWVzc2FnZShaLmVycm9ycy50cmFuc2Zvcm1lcl9ub25lKS52YXJpYXRpb24oIkVycm9yIikuYnVpbGQoKTtILnJlcG9ydChpKSx0KCJbTWVkaWFQcm9jZXNzb3JdIE5lZWQgdG8gc2V0IHRyYW5zZm9ybWVycy4iKTtyZXR1cm59aWYoIXRoaXMucmVhZGFibGVfKXtjb25zdCBpPW5ldyB6KCkuYWN0aW9uKCJNZWRpYVByb2Nlc3NvciIpLmd1aWQodGhpcy51dWlkXykubWVzc2FnZShaLmVycm9ycy5yZWFkYWJsZV9udWxsKS52YXJpYXRpb24oIkVycm9yIikuYnVpbGQoKTtILnJlcG9ydChpKSx0KCJbTWVkaWFQcm9jZXNzb3JdIFJlYWRhYmxlIGlzIG51bGwuIik7cmV0dXJufWlmKCF0aGlzLndyaXRhYmxlXyl7Y29uc3QgaT1uZXcgeigpLmFjdGlvbigiTWVkaWFQcm9jZXNzb3IiKS5ndWlkKHRoaXMudXVpZF8pLm1lc3NhZ2UoWi5lcnJvcnMud3JpdGFibGVfbnVsbCkudmFyaWF0aW9uKCJFcnJvciIpLmJ1aWxkKCk7SC5yZXBvcnQoaSksdCgiW01lZGlhUHJvY2Vzc29yXSBXcml0YWJsZSBpcyBudWxsLiIpO3JldHVybn1sZXQgbj0hMTt0aGlzLnBpcGVsaW5lXyYmKG49ITAsdGhpcy5waXBlbGluZV8uY2xlYXJMaXN0ZW5lcnMoKSx0aGlzLnBpcGVsaW5lXy5kZXN0cm95KCkpLHRoaXMucGlwZWxpbmVfPW5ldyBBcyh0aGlzLnRyYW5zZm9ybWVyc18pLHRoaXMucGlwZWxpbmVfLm9uKCJ3YXJuIixpPT57dGhpcy5lbWl0KCJ3YXJuIixpKX0pLHRoaXMucGlwZWxpbmVfLm9uKCJlcnJvciIsaT0+e3RoaXMuZW1pdCgiZXJyb3IiLGkpfSksdGhpcy5waXBlbGluZV8ub24oInBpcGVsaW5lSW5mbyIsaT0+e24mJihpPT09InBpcGVsaW5lX3N0YXJ0ZWQiP2k9SnQucGlwZWxpbmVfcmVzdGFydGVkOmk9PT0icGlwZWxpbmVfc3RhcnRlZF93aXRoX2Vycm9yIiYmKGk9SnQucGlwZWxpbmVfcmVzdGFydGVkX3dpdGhfZXJyb3IpKSx0aGlzLmVtaXQoInBpcGVsaW5lSW5mbyIsaSl9KSx0aGlzLnRyYWNrRXhwZWN0ZWRSYXRlXyE9LTEmJnRoaXMucGlwZWxpbmVfLnNldFRyYWNrRXhwZWN0ZWRSYXRlKHRoaXMudHJhY2tFeHBlY3RlZFJhdGVfKSx0aGlzLnBpcGVsaW5lXy5zdGFydCh0aGlzLnJlYWRhYmxlXyx0aGlzLndyaXRhYmxlXykudGhlbigoKT0+e2UoKX0pLmNhdGNoKGk9Pnt0KGkpfSl9KX1zZXRUcmFuc2Zvcm1lcnMoZSl7Y29uc3QgdD1uZXcgeigpLmFjdGlvbigiTWVkaWFQcm9jZXNzb3IiKS5ndWlkKHRoaXMudXVpZF8pLm1lc3NhZ2UoWi51cGRhdGVzLnRyYW5zZm9ybWVyX25ldykudmFyaWF0aW9uKCJVcGRhdGUiKS5idWlsZCgpO3JldHVybiBILnJlcG9ydCh0KSx0aGlzLnRyYW5zZm9ybWVyc189ZSx0aGlzLnJlYWRhYmxlXyYmdGhpcy53cml0YWJsZV8/dGhpcy50cmFuc2Zvcm1JbnRlcm5hbCgpOlByb21pc2UucmVzb2x2ZSgpfWRlc3Ryb3koKXtyZXR1cm4gbmV3IFByb21pc2UoZT0+e3RoaXMucGlwZWxpbmVfJiZ0aGlzLnBpcGVsaW5lXy5kZXN0cm95KCk7Y29uc3QgdD1uZXcgeigpLmFjdGlvbigiTWVkaWFQcm9jZXNzb3IiKS5ndWlkKHRoaXMudXVpZF8pLnZhcmlhdGlvbigiRGVsZXRlIikuYnVpbGQoKTtILnJlcG9ydCh0KSxlKCl9KX19dmFyIGl0PShyPT4oci5Mb3c9IkxvdyIsci5IaWdoPSJIaWdoIixyKSkoaXR8fHt9KTsvKiBAbGljZW5zZSB0d2dsLmpzIDUuMC40IENvcHlyaWdodCAoYykgMjAxNSwgR3JlZ2cgVGF2YXJlcyBBbGwgUmlnaHRzIFJlc2VydmVkLgpBdmFpbGFibGUgdmlhIHRoZSBNSVQgbGljZW5zZS4Kc2VlOiBodHRwOi8vZ2l0aHViLmNvbS9ncmVnZ21hbi90d2dsLmpzIGZvciBkZXRhaWxzICovY29uc3QgUXQ9NTEyMCxEZT01MTIxLFp0PTUxMjIsZXI9NTEyMyx0cj01MTI0LHJyPTUxMjUsbnI9NTEyNixScz0zMjgxOSxTcz0zMjgyMCxJcz0zMzYzNSxGcz01MTMxLFBzPTMzNjQwLERzPTM1ODk5LENzPTM1OTAyLE9zPTM2MjY5LE1zPTM0MDQyLF9uPXt9O3tjb25zdCByPV9uO3JbUXRdPUludDhBcnJheSxyW0RlXT1VaW50OEFycmF5LHJbWnRdPUludDE2QXJyYXkscltlcl09VWludDE2QXJyYXksclt0cl09SW50MzJBcnJheSxyW3JyXT1VaW50MzJBcnJheSxyW25yXT1GbG9hdDMyQXJyYXkscltSc109VWludDE2QXJyYXkscltTc109VWludDE2QXJyYXkscltJc109VWludDE2QXJyYXkscltGc109VWludDE2QXJyYXkscltQc109VWludDMyQXJyYXkscltEc109VWludDMyQXJyYXkscltDc109VWludDMyQXJyYXkscltPc109VWludDMyQXJyYXkscltNc109VWludDMyQXJyYXl9ZnVuY3Rpb24gaXIocil7aWYociBpbnN0YW5jZW9mIEludDhBcnJheSlyZXR1cm4gUXQ7aWYociBpbnN0YW5jZW9mIFVpbnQ4QXJyYXl8fHIgaW5zdGFuY2VvZiBVaW50OENsYW1wZWRBcnJheSlyZXR1cm4gRGU7aWYociBpbnN0YW5jZW9mIEludDE2QXJyYXkpcmV0dXJuIFp0O2lmKHIgaW5zdGFuY2VvZiBVaW50MTZBcnJheSlyZXR1cm4gZXI7aWYociBpbnN0YW5jZW9mIEludDMyQXJyYXkpcmV0dXJuIHRyO2lmKHIgaW5zdGFuY2VvZiBVaW50MzJBcnJheSlyZXR1cm4gcnI7aWYociBpbnN0YW5jZW9mIEZsb2F0MzJBcnJheSlyZXR1cm4gbnI7dGhyb3cgbmV3IEVycm9yKCJ1bnN1cHBvcnRlZCB0eXBlZCBhcnJheSB0eXBlIil9ZnVuY3Rpb24gTnMocil7aWYocj09PUludDhBcnJheSlyZXR1cm4gUXQ7aWYocj09PVVpbnQ4QXJyYXl8fHI9PT1VaW50OENsYW1wZWRBcnJheSlyZXR1cm4gRGU7aWYocj09PUludDE2QXJyYXkpcmV0dXJuIFp0O2lmKHI9PT1VaW50MTZBcnJheSlyZXR1cm4gZXI7aWYocj09PUludDMyQXJyYXkpcmV0dXJuIHRyO2lmKHI9PT1VaW50MzJBcnJheSlyZXR1cm4gcnI7aWYocj09PUZsb2F0MzJBcnJheSlyZXR1cm4gbnI7dGhyb3cgbmV3IEVycm9yKCJ1bnN1cHBvcnRlZCB0eXBlZCBhcnJheSB0eXBlIil9ZnVuY3Rpb24gVXMocil7Y29uc3QgZT1fbltyXTtpZighZSl0aHJvdyBuZXcgRXJyb3IoInVua25vd24gZ2wgdHlwZSIpO3JldHVybiBlfWNvbnN0IG90PXR5cGVvZiBTaGFyZWRBcnJheUJ1ZmZlciE9InVuZGVmaW5lZCI/ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuYnVmZmVyJiYoZS5idWZmZXIgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcnx8ZS5idWZmZXIgaW5zdGFuY2VvZiBTaGFyZWRBcnJheUJ1ZmZlcil9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLmJ1ZmZlciYmZS5idWZmZXIgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcn07ZnVuY3Rpb24geG4oLi4ucil7Y29uc29sZS5lcnJvciguLi5yKX1jb25zdCBibj1uZXcgTWFwO2Z1bmN0aW9uIENlKHIsZSl7aWYoIXJ8fHR5cGVvZiByIT0ib2JqZWN0IilyZXR1cm4hMTtsZXQgdD1ibi5nZXQoZSk7dHx8KHQ9bmV3IFdlYWtNYXAsYm4uc2V0KGUsdCkpO2xldCBuPXQuZ2V0KHIpO2lmKG49PT12b2lkIDApe2NvbnN0IGk9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHIpO249aS5zdWJzdHJpbmcoOCxpLmxlbmd0aC0xKT09PWUsdC5zZXQocixuKX1yZXR1cm4gbn1mdW5jdGlvbiBCcyhyLGUpe3JldHVybiB0eXBlb2YgV2ViR0xCdWZmZXIhPSJ1bmRlZmluZWQiJiZDZShlLCJXZWJHTEJ1ZmZlciIpfWZ1bmN0aW9uIGtzKHIsZSl7cmV0dXJuIHR5cGVvZiBXZWJHTFJlbmRlcmJ1ZmZlciE9InVuZGVmaW5lZCImJkNlKGUsIldlYkdMUmVuZGVyYnVmZmVyIil9ZnVuY3Rpb24gTHMocixlKXtyZXR1cm4gdHlwZW9mIFdlYkdMU2hhZGVyIT0idW5kZWZpbmVkIiYmQ2UoZSwiV2ViR0xTaGFkZXIiKX1mdW5jdGlvbiBvcihyLGUpe3JldHVybiB0eXBlb2YgV2ViR0xUZXh0dXJlIT0idW5kZWZpbmVkIiYmQ2UoZSwiV2ViR0xUZXh0dXJlIil9ZnVuY3Rpb24gJHMocixlKXtyZXR1cm4gdHlwZW9mIFdlYkdMU2FtcGxlciE9InVuZGVmaW5lZCImJkNlKGUsIldlYkdMU2FtcGxlciIpfWNvbnN0IGduPTM1MDQ0LGxlPTM0OTYyLEdzPTM0OTYzLHpzPTM0NjYwLEhzPTUxMjAsVnM9NTEyMSxXcz01MTIyLGpzPTUxMjMscXM9NTEyNCxYcz01MTI1LFlzPTUxMjYsdm49e2F0dHJpYlByZWZpeDoiIn07ZnVuY3Rpb24gS3MocixlLHQsbixpKXtyLmJpbmRCdWZmZXIoZSx0KSxyLmJ1ZmZlckRhdGEoZSxuLGl8fGduKX1mdW5jdGlvbiBFbihyLGUsdCxuKXtpZihCcyhyLGUpKXJldHVybiBlO3Q9dHx8bGU7Y29uc3QgaT1yLmNyZWF0ZUJ1ZmZlcigpO3JldHVybiBLcyhyLHQsaSxlLG4pLGl9ZnVuY3Rpb24gVG4ocil7cmV0dXJuIHI9PT0iaW5kaWNlcyJ9ZnVuY3Rpb24gSnMocil7cmV0dXJuIHIgaW5zdGFuY2VvZiBJbnQ4QXJyYXl8fHIgaW5zdGFuY2VvZiBVaW50OEFycmF5fWZ1bmN0aW9uIFFzKHIpe3JldHVybiByPT09SW50OEFycmF5fHxyPT09VWludDhBcnJheX1mdW5jdGlvbiBacyhyKXtyZXR1cm4gci5sZW5ndGg/cjpyLmRhdGF9Y29uc3QgZWE9L2Nvb3JkfHRleHR1cmUvaSx0YT0vY29sb3J8Y29sb3VyL2k7ZnVuY3Rpb24gQW4ocixlKXtsZXQgdDtpZihlYS50ZXN0KHIpP3Q9Mjp0YS50ZXN0KHIpP3Q9NDp0PTMsZSV0PjApdGhyb3cgbmV3IEVycm9yKGBDYW4gbm90IGd1ZXNzIG51bUNvbXBvbmVudHMgZm9yIGF0dHJpYnV0ZSAnJHtyfScuIFRyaWVkICR7dH0gYnV0ICR7ZX0gdmFsdWVzIGlzIG5vdCBldmVubHkgZGl2aXNpYmxlIGJ5ICR7dH0uIFlvdSBzaG91bGQgc3BlY2lmeSBpdC5gKTtyZXR1cm4gdH1mdW5jdGlvbiByYShyLGUpe3JldHVybiByLm51bUNvbXBvbmVudHN8fHIuc2l6ZXx8QW4oZSxacyhyKS5sZW5ndGgpfWZ1bmN0aW9uIHduKHIsZSl7aWYob3QocikpcmV0dXJuIHI7aWYob3Qoci5kYXRhKSlyZXR1cm4gci5kYXRhO0FycmF5LmlzQXJyYXkocikmJihyPXtkYXRhOnJ9KTtsZXQgdD1yLnR5cGU7cmV0dXJuIHR8fChUbihlKT90PVVpbnQxNkFycmF5OnQ9RmxvYXQzMkFycmF5KSxuZXcgdChyLmRhdGEpfWZ1bmN0aW9uIG5hKHIsZSl7Y29uc3QgdD17fTtyZXR1cm4gT2JqZWN0LmtleXMoZSkuZm9yRWFjaChmdW5jdGlvbihuKXtpZighVG4obikpe2NvbnN0IGk9ZVtuXSxvPWkuYXR0cmlifHxpLm5hbWV8fGkuYXR0cmliTmFtZXx8dm4uYXR0cmliUHJlZml4K247aWYoaS52YWx1ZSl7aWYoIUFycmF5LmlzQXJyYXkoaS52YWx1ZSkmJiFvdChpLnZhbHVlKSl0aHJvdyBuZXcgRXJyb3IoImFycmF5LnZhbHVlIGlzIG5vdCBhcnJheSBvciB0eXBlZGFycmF5Iik7dFtvXT17dmFsdWU6aS52YWx1ZX19ZWxzZXtsZXQgcyxhLHUsZjtpZihpLmJ1ZmZlciYmaS5idWZmZXIgaW5zdGFuY2VvZiBXZWJHTEJ1ZmZlcilzPWkuYnVmZmVyLGY9aS5udW1Db21wb25lbnRzfHxpLnNpemUsYT1pLnR5cGUsdT1pLm5vcm1hbGl6ZTtlbHNlIGlmKHR5cGVvZiBpPT0ibnVtYmVyInx8dHlwZW9mIGkuZGF0YT09Im51bWJlciIpe2NvbnN0IGM9aS5kYXRhfHxpLGQ9aS50eXBlfHxGbG9hdDMyQXJyYXkscD1jKmQuQllURVNfUEVSX0VMRU1FTlQ7YT1OcyhkKSx1PWkubm9ybWFsaXplIT09dm9pZCAwP2kubm9ybWFsaXplOlFzKGQpLGY9aS5udW1Db21wb25lbnRzfHxpLnNpemV8fEFuKG4sYykscz1yLmNyZWF0ZUJ1ZmZlcigpLHIuYmluZEJ1ZmZlcihsZSxzKSxyLmJ1ZmZlckRhdGEobGUscCxpLmRyYXdUeXBlfHxnbil9ZWxzZXtjb25zdCBjPXduKGksbik7cz1FbihyLGMsdm9pZCAwLGkuZHJhd1R5cGUpLGE9aXIoYyksdT1pLm5vcm1hbGl6ZSE9PXZvaWQgMD9pLm5vcm1hbGl6ZTpKcyhjKSxmPXJhKGksbil9dFtvXT17YnVmZmVyOnMsbnVtQ29tcG9uZW50czpmLHR5cGU6YSxub3JtYWxpemU6dSxzdHJpZGU6aS5zdHJpZGV8fDAsb2Zmc2V0Omkub2Zmc2V0fHwwLGRpdmlzb3I6aS5kaXZpc29yPT09dm9pZCAwP3ZvaWQgMDppLmRpdmlzb3IsZHJhd1R5cGU6aS5kcmF3VHlwZX19fX0pLHIuYmluZEJ1ZmZlcihsZSxudWxsKSx0fWZ1bmN0aW9uIGlhKHIsZSl7cmV0dXJuIGU9PT1Ic3x8ZT09PVZzPzE6ZT09PVdzfHxlPT09anM/MjplPT09cXN8fGU9PT1Yc3x8ZT09PVlzPzQ6MH1jb25zdCBzcj1bInBvc2l0aW9uIiwicG9zaXRpb25zIiwiYV9wb3NpdGlvbiJdO2Z1bmN0aW9uIG9hKHIsZSl7bGV0IHQsbjtmb3Iobj0wO248c3IubGVuZ3RoJiYodD1zcltuXSwhKHQgaW4gZXx8KHQ9dm4uYXR0cmliUHJlZml4K3QsdCBpbiBlKSkpOysrbik7bj09PXNyLmxlbmd0aCYmKHQ9T2JqZWN0LmtleXMoZSlbMF0pO2NvbnN0IGk9ZVt0XTtpZighaS5idWZmZXIpcmV0dXJuIDE7ci5iaW5kQnVmZmVyKGxlLGkuYnVmZmVyKTtjb25zdCBvPXIuZ2V0QnVmZmVyUGFyYW1ldGVyKGxlLHpzKTtyLmJpbmRCdWZmZXIobGUsbnVsbCk7Y29uc3Qgcz1pYShyLGkudHlwZSksYT1vL3MsdT1pLm51bUNvbXBvbmVudHN8fGkuc2l6ZSxmPWEvdTtpZihmJTEhPT0wKXRocm93IG5ldyBFcnJvcihgbnVtQ29tcG9uZW50cyAke3V9IG5vdCBjb3JyZWN0IGZvciBsZW5ndGggJHtsZW5ndGh9YCk7cmV0dXJuIGZ9ZnVuY3Rpb24gc2EocixlLHQpe2NvbnN0IG49bmEocixlKSxpPU9iamVjdC5hc3NpZ24oe30sdHx8e30pO2kuYXR0cmlicz1PYmplY3QuYXNzaWduKHt9LHQ/dC5hdHRyaWJzOnt9LG4pO2NvbnN0IG89ZS5pbmRpY2VzO2lmKG8pe2NvbnN0IHM9d24obywiaW5kaWNlcyIpO2kuaW5kaWNlcz1FbihyLHMsR3MpLGkubnVtRWxlbWVudHM9cy5sZW5ndGgsaS5lbGVtZW50VHlwZT1pcihzKX1lbHNlIGkubnVtRWxlbWVudHN8fChpLm51bUVsZW1lbnRzPW9hKHIsaS5hdHRyaWJzKSk7cmV0dXJuIGl9ZnVuY3Rpb24gT2Uocil7cmV0dXJuISFyLnRleFN0b3JhZ2UyRH1jb25zdCBSbj1mdW5jdGlvbigpe2NvbnN0IHI9e30sZT17fTtmdW5jdGlvbiB0KG4pe2NvbnN0IGk9bi5jb25zdHJ1Y3Rvci5uYW1lO2lmKCFyW2ldKXtmb3IoY29uc3QgbyBpbiBuKWlmKHR5cGVvZiBuW29dPT0ibnVtYmVyIil7Y29uc3Qgcz1lW25bb11dO2VbbltvXV09cz9gJHtzfSB8ICR7b31gOm99cltpXT0hMH19cmV0dXJuIGZ1bmN0aW9uKGksbyl7cmV0dXJuIHQoaSksZVtvXXx8KHR5cGVvZiBvPT0ibnVtYmVyIj9gMHgke28udG9TdHJpbmcoMTYpfWA6byl9fSgpLG5lPXt0ZXh0dXJlQ29sb3I6bmV3IFVpbnQ4QXJyYXkoWzEyOCwxOTIsMjU1LDI1NV0pLHRleHR1cmVPcHRpb25zOnt9LGNyb3NzT3JpZ2luOnZvaWQgMH0sTWU9b3QsU249ZnVuY3Rpb24oKXtsZXQgcjtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gcj1yfHwodHlwZW9mIGRvY3VtZW50IT0idW5kZWZpbmVkIiYmZG9jdW1lbnQuY3JlYXRlRWxlbWVudD9kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKS5nZXRDb250ZXh0KCIyZCIpOm51bGwpLHJ9fSgpLEluPTY0MDYsSj02NDA3LEk9NjQwOCxGbj02NDA5LFBuPTY0MTAsTmU9NjQwMixEbj0zNDA0MSxzdD0zMzA3MSxhYT05NzI4LHVhPTk3MjksaWU9MzU1MyxvZT0zNDA2NyxkZT0zMjg3OSxtZT0zNTg2Nixhcj0zNDA2OSxjYT0zNDA3MCxmYT0zNDA3MSxsYT0zNDA3MixkYT0zNDA3MyxtYT0zNDA3NCx1cj0xMDI0MSxjcj0xMDI0MCxhdD0xMDI0Mix1dD0xMDI0MyxDbj0zMjg4MixoYT0zMzA4MixwYT0zMzA4Myx5YT0zMzA4NCxfYT0zMzA4NSxmcj0zMzE3LE9uPTMzMTQsTW49MzI4NzgsTm49MzMxNixVbj0zMzE1LEJuPTMyODc3LHhhPTM3NDQzLGJhPTM3NDQxLGdhPTM3NDQwLHZhPTMzMzIxLEVhPTM2NzU2LFRhPTMzMzI1LEFhPTMzMzI2LHdhPTMzMzMwLFJhPTMzMzI5LFNhPTMzMzM4LElhPTMzMzM3LEZhPTMzMzQwLFBhPTMzMzM5LERhPTMzMzIzLENhPTM2NzU3LE9hPTMzMzI3LE1hPTMzMzI4LE5hPTMzMzM2LFVhPTMzMzM1LEJhPTMzMzMyLGthPTMzMzMxLExhPTMzMzM0LCRhPTMzMzMzLEdhPTMyODQ5LHphPTM1OTA1LEhhPTM2MTk0LFZhPTM2NzU4LFdhPTM1ODk4LGphPTM1OTAxLHFhPTM0ODQzLFhhPTM0ODM3LFlhPTM2MjIxLEthPTM2MjM5LEphPTM2MjE1LFFhPTM2MjMzLFphPTM2MjA5LGV1PTM2MjI3LHR1PTMyODU2LHJ1PTM1OTA3LG51PTM2NzU5LGl1PTMyODU1LG91PTMyODU0LHN1PTMyODU3LGF1PTM0ODQyLHV1PTM0ODM2LGN1PTM2MjIwLGZ1PTM2MjM4LGx1PTM2OTc1LGR1PTM2MjE0LG11PTM2MjMyLGh1PTM2MjI2LHB1PTM2MjA4LHl1PTMzMTg5LF91PTMzMTkwLHh1PTM2MDEyLGJ1PTM2MDEzLGd1PTM1MDU2LHNlPTUxMjAsUz01MTIxLGN0PTUxMjIsVGU9NTEyMyxmdD01MTI0LGhlPTUxMjUsTj01MTI2LGtuPTMyODE5LExuPTMyODIwLCRuPTMzNjM1LFc9NTEzMSxVZT0zNjE5Myxscj0zMzY0MCx2dT0zNTg5OSxFdT0zNTkwMixUdT0zNjI2OSxBdT0zNDA0MixsdD0zMzMxOSxBZT0zMzMyMCxkdD02NDAzLHdlPTM2MjQ0LFJlPTM2MjQ4LHBlPTM2MjQ5O2xldCBkcjtmdW5jdGlvbiBtdChyKXtpZighZHIpe2NvbnN0IGU9e307ZVtJbl09e3RleHR1cmVGb3JtYXQ6SW4sY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiEwLGJ5dGVzUGVyRWxlbWVudDpbMSwyLDIsNF0sdHlwZTpbUyxXLFVlLE5dfSxlW0ZuXT17dGV4dHVyZUZvcm1hdDpGbixjb2xvclJlbmRlcmFibGU6ITAsdGV4dHVyZUZpbHRlcmFibGU6ITAsYnl0ZXNQZXJFbGVtZW50OlsxLDIsMiw0XSx0eXBlOltTLFcsVWUsTl19LGVbUG5dPXt0ZXh0dXJlRm9ybWF0OlBuLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMCxieXRlc1BlckVsZW1lbnQ6WzIsNCw0LDhdLHR5cGU6W1MsVyxVZSxOXX0sZVtKXT17dGV4dHVyZUZvcm1hdDpKLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMCxieXRlc1BlckVsZW1lbnQ6WzMsNiw2LDEyLDJdLHR5cGU6W1MsVyxVZSxOLCRuXX0sZVtJXT17dGV4dHVyZUZvcm1hdDpJLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMCxieXRlc1BlckVsZW1lbnQ6WzQsOCw4LDE2LDIsMl0sdHlwZTpbUyxXLFVlLE4sa24sTG5dfSxlW05lXT17dGV4dHVyZUZvcm1hdDpOZSxjb2xvclJlbmRlcmFibGU6ITAsdGV4dHVyZUZpbHRlcmFibGU6ITEsYnl0ZXNQZXJFbGVtZW50OlsyLDRdLHR5cGU6W2hlLFRlXX0sZVt2YV09e3RleHR1cmVGb3JtYXQ6ZHQsY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiEwLGJ5dGVzUGVyRWxlbWVudDpbMV0sdHlwZTpbU119LGVbRWFdPXt0ZXh0dXJlRm9ybWF0OmR0LGNvbG9yUmVuZGVyYWJsZTohMSx0ZXh0dXJlRmlsdGVyYWJsZTohMCxieXRlc1BlckVsZW1lbnQ6WzFdLHR5cGU6W3NlXX0sZVtUYV09e3RleHR1cmVGb3JtYXQ6ZHQsY29sb3JSZW5kZXJhYmxlOiExLHRleHR1cmVGaWx0ZXJhYmxlOiEwLGJ5dGVzUGVyRWxlbWVudDpbNCwyXSx0eXBlOltOLFddfSxlW0FhXT17dGV4dHVyZUZvcm1hdDpkdCxjb2xvclJlbmRlcmFibGU6ITEsdGV4dHVyZUZpbHRlcmFibGU6ITEsYnl0ZXNQZXJFbGVtZW50Ols0XSx0eXBlOltOXX0sZVt3YV09e3RleHR1cmVGb3JtYXQ6d2UsY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiExLGJ5dGVzUGVyRWxlbWVudDpbMV0sdHlwZTpbU119LGVbUmFdPXt0ZXh0dXJlRm9ybWF0OndlLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzFdLHR5cGU6W3NlXX0sZVtCYV09e3RleHR1cmVGb3JtYXQ6d2UsY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiExLGJ5dGVzUGVyRWxlbWVudDpbMl0sdHlwZTpbVGVdfSxlW2thXT17dGV4dHVyZUZvcm1hdDp3ZSxjb2xvclJlbmRlcmFibGU6ITAsdGV4dHVyZUZpbHRlcmFibGU6ITEsYnl0ZXNQZXJFbGVtZW50OlsyXSx0eXBlOltjdF19LGVbTGFdPXt0ZXh0dXJlRm9ybWF0OndlLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzRdLHR5cGU6W2hlXX0sZVskYV09e3RleHR1cmVGb3JtYXQ6d2UsY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiExLGJ5dGVzUGVyRWxlbWVudDpbNF0sdHlwZTpbZnRdfSxlW0RhXT17dGV4dHVyZUZvcm1hdDpsdCxjb2xvclJlbmRlcmFibGU6ITAsdGV4dHVyZUZpbHRlcmFibGU6ITAsYnl0ZXNQZXJFbGVtZW50OlsyXSx0eXBlOltTXX0sZVtDYV09e3RleHR1cmVGb3JtYXQ6bHQsY29sb3JSZW5kZXJhYmxlOiExLHRleHR1cmVGaWx0ZXJhYmxlOiEwLGJ5dGVzUGVyRWxlbWVudDpbMl0sdHlwZTpbc2VdfSxlW09hXT17dGV4dHVyZUZvcm1hdDpsdCxjb2xvclJlbmRlcmFibGU6ITEsdGV4dHVyZUZpbHRlcmFibGU6ITAsYnl0ZXNQZXJFbGVtZW50Ols4LDRdLHR5cGU6W04sV119LGVbTWFdPXt0ZXh0dXJlRm9ybWF0Omx0LGNvbG9yUmVuZGVyYWJsZTohMSx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzhdLHR5cGU6W05dfSxlW05hXT17dGV4dHVyZUZvcm1hdDpBZSxjb2xvclJlbmRlcmFibGU6ITAsdGV4dHVyZUZpbHRlcmFibGU6ITEsYnl0ZXNQZXJFbGVtZW50OlsyXSx0eXBlOltTXX0sZVtVYV09e3RleHR1cmVGb3JtYXQ6QWUsY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiExLGJ5dGVzUGVyRWxlbWVudDpbMl0sdHlwZTpbc2VdfSxlW1NhXT17dGV4dHVyZUZvcm1hdDpBZSxjb2xvclJlbmRlcmFibGU6ITAsdGV4dHVyZUZpbHRlcmFibGU6ITEsYnl0ZXNQZXJFbGVtZW50Ols0XSx0eXBlOltUZV19LGVbSWFdPXt0ZXh0dXJlRm9ybWF0OkFlLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzRdLHR5cGU6W2N0XX0sZVtGYV09e3RleHR1cmVGb3JtYXQ6QWUsY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiExLGJ5dGVzUGVyRWxlbWVudDpbOF0sdHlwZTpbaGVdfSxlW1BhXT17dGV4dHVyZUZvcm1hdDpBZSxjb2xvclJlbmRlcmFibGU6ITAsdGV4dHVyZUZpbHRlcmFibGU6ITEsYnl0ZXNQZXJFbGVtZW50Ols4XSx0eXBlOltmdF19LGVbR2FdPXt0ZXh0dXJlRm9ybWF0OkosY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiEwLGJ5dGVzUGVyRWxlbWVudDpbM10sdHlwZTpbU119LGVbemFdPXt0ZXh0dXJlRm9ybWF0OkosY29sb3JSZW5kZXJhYmxlOiExLHRleHR1cmVGaWx0ZXJhYmxlOiEwLGJ5dGVzUGVyRWxlbWVudDpbM10sdHlwZTpbU119LGVbSGFdPXt0ZXh0dXJlRm9ybWF0OkosY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiEwLGJ5dGVzUGVyRWxlbWVudDpbMywyXSx0eXBlOltTLCRuXX0sZVtWYV09e3RleHR1cmVGb3JtYXQ6Sixjb2xvclJlbmRlcmFibGU6ITEsdGV4dHVyZUZpbHRlcmFibGU6ITAsYnl0ZXNQZXJFbGVtZW50OlszXSx0eXBlOltzZV19LGVbV2FdPXt0ZXh0dXJlRm9ybWF0OkosY29sb3JSZW5kZXJhYmxlOiExLHRleHR1cmVGaWx0ZXJhYmxlOiEwLGJ5dGVzUGVyRWxlbWVudDpbMTIsNiw0XSx0eXBlOltOLFcsdnVdfSxlW2phXT17dGV4dHVyZUZvcm1hdDpKLGNvbG9yUmVuZGVyYWJsZTohMSx0ZXh0dXJlRmlsdGVyYWJsZTohMCxieXRlc1BlckVsZW1lbnQ6WzEyLDYsNF0sdHlwZTpbTixXLEV1XX0sZVtxYV09e3RleHR1cmVGb3JtYXQ6Sixjb2xvclJlbmRlcmFibGU6ITEsdGV4dHVyZUZpbHRlcmFibGU6ITAsYnl0ZXNQZXJFbGVtZW50OlsxMiw2XSx0eXBlOltOLFddfSxlW1hhXT17dGV4dHVyZUZvcm1hdDpKLGNvbG9yUmVuZGVyYWJsZTohMSx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzEyXSx0eXBlOltOXX0sZVtZYV09e3RleHR1cmVGb3JtYXQ6UmUsY29sb3JSZW5kZXJhYmxlOiExLHRleHR1cmVGaWx0ZXJhYmxlOiExLGJ5dGVzUGVyRWxlbWVudDpbM10sdHlwZTpbU119LGVbS2FdPXt0ZXh0dXJlRm9ybWF0OlJlLGNvbG9yUmVuZGVyYWJsZTohMSx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzNdLHR5cGU6W3NlXX0sZVtKYV09e3RleHR1cmVGb3JtYXQ6UmUsY29sb3JSZW5kZXJhYmxlOiExLHRleHR1cmVGaWx0ZXJhYmxlOiExLGJ5dGVzUGVyRWxlbWVudDpbNl0sdHlwZTpbVGVdfSxlW1FhXT17dGV4dHVyZUZvcm1hdDpSZSxjb2xvclJlbmRlcmFibGU6ITEsdGV4dHVyZUZpbHRlcmFibGU6ITEsYnl0ZXNQZXJFbGVtZW50Ols2XSx0eXBlOltjdF19LGVbWmFdPXt0ZXh0dXJlRm9ybWF0OlJlLGNvbG9yUmVuZGVyYWJsZTohMSx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzEyXSx0eXBlOltoZV19LGVbZXVdPXt0ZXh0dXJlRm9ybWF0OlJlLGNvbG9yUmVuZGVyYWJsZTohMSx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzEyXSx0eXBlOltmdF19LGVbdHVdPXt0ZXh0dXJlRm9ybWF0OkksY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiEwLGJ5dGVzUGVyRWxlbWVudDpbNF0sdHlwZTpbU119LGVbcnVdPXt0ZXh0dXJlRm9ybWF0OkksY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiEwLGJ5dGVzUGVyRWxlbWVudDpbNF0sdHlwZTpbU119LGVbbnVdPXt0ZXh0dXJlRm9ybWF0OkksY29sb3JSZW5kZXJhYmxlOiExLHRleHR1cmVGaWx0ZXJhYmxlOiEwLGJ5dGVzUGVyRWxlbWVudDpbNF0sdHlwZTpbc2VdfSxlW2l1XT17dGV4dHVyZUZvcm1hdDpJLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMCxieXRlc1BlckVsZW1lbnQ6WzQsMiw0XSx0eXBlOltTLExuLGxyXX0sZVtvdV09e3RleHR1cmVGb3JtYXQ6SSxjb2xvclJlbmRlcmFibGU6ITAsdGV4dHVyZUZpbHRlcmFibGU6ITAsYnl0ZXNQZXJFbGVtZW50Ols0LDJdLHR5cGU6W1Msa25dfSxlW3N1XT17dGV4dHVyZUZvcm1hdDpJLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMCxieXRlc1BlckVsZW1lbnQ6WzRdLHR5cGU6W2xyXX0sZVthdV09e3RleHR1cmVGb3JtYXQ6SSxjb2xvclJlbmRlcmFibGU6ITEsdGV4dHVyZUZpbHRlcmFibGU6ITAsYnl0ZXNQZXJFbGVtZW50OlsxNiw4XSx0eXBlOltOLFddfSxlW3V1XT17dGV4dHVyZUZvcm1hdDpJLGNvbG9yUmVuZGVyYWJsZTohMSx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzE2XSx0eXBlOltOXX0sZVtjdV09e3RleHR1cmVGb3JtYXQ6cGUsY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiExLGJ5dGVzUGVyRWxlbWVudDpbNF0sdHlwZTpbU119LGVbZnVdPXt0ZXh0dXJlRm9ybWF0OnBlLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzRdLHR5cGU6W3NlXX0sZVtsdV09e3RleHR1cmVGb3JtYXQ6cGUsY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiExLGJ5dGVzUGVyRWxlbWVudDpbNF0sdHlwZTpbbHJdfSxlW2R1XT17dGV4dHVyZUZvcm1hdDpwZSxjb2xvclJlbmRlcmFibGU6ITAsdGV4dHVyZUZpbHRlcmFibGU6ITEsYnl0ZXNQZXJFbGVtZW50Ols4XSx0eXBlOltUZV19LGVbbXVdPXt0ZXh0dXJlRm9ybWF0OnBlLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzhdLHR5cGU6W2N0XX0sZVtodV09e3RleHR1cmVGb3JtYXQ6cGUsY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiExLGJ5dGVzUGVyRWxlbWVudDpbMTZdLHR5cGU6W2Z0XX0sZVtwdV09e3RleHR1cmVGb3JtYXQ6cGUsY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiExLGJ5dGVzUGVyRWxlbWVudDpbMTZdLHR5cGU6W2hlXX0sZVt5dV09e3RleHR1cmVGb3JtYXQ6TmUsY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiExLGJ5dGVzUGVyRWxlbWVudDpbMiw0XSx0eXBlOltUZSxoZV19LGVbX3VdPXt0ZXh0dXJlRm9ybWF0Ok5lLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzRdLHR5cGU6W2hlXX0sZVt4dV09e3RleHR1cmVGb3JtYXQ6TmUsY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiExLGJ5dGVzUGVyRWxlbWVudDpbNF0sdHlwZTpbTl19LGVbZ3VdPXt0ZXh0dXJlRm9ybWF0OkRuLGNvbG9yUmVuZGVyYWJsZTohMCx0ZXh0dXJlRmlsdGVyYWJsZTohMSxieXRlc1BlckVsZW1lbnQ6WzRdLHR5cGU6W0F1XX0sZVtidV09e3RleHR1cmVGb3JtYXQ6RG4sY29sb3JSZW5kZXJhYmxlOiEwLHRleHR1cmVGaWx0ZXJhYmxlOiExLGJ5dGVzUGVyRWxlbWVudDpbNF0sdHlwZTpbVHVdfSxPYmplY3Qua2V5cyhlKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe2NvbnN0IG49ZVt0XTtuLmJ5dGVzUGVyRWxlbWVudE1hcD17fSxuLmJ5dGVzUGVyRWxlbWVudC5mb3JFYWNoKGZ1bmN0aW9uKGksbyl7Y29uc3Qgcz1uLnR5cGVbb107bi5ieXRlc1BlckVsZW1lbnRNYXBbc109aX0pfSksZHI9ZX1yZXR1cm4gZHJbcl19ZnVuY3Rpb24gd3UocixlKXtjb25zdCB0PW10KHIpO2lmKCF0KXRocm93InVua25vd24gaW50ZXJuYWwgZm9ybWF0Ijtjb25zdCBuPXQuYnl0ZXNQZXJFbGVtZW50TWFwW2VdO2lmKG49PT12b2lkIDApdGhyb3cidW5rbm93biBpbnRlcm5hbCBmb3JtYXQiO3JldHVybiBufWZ1bmN0aW9uIEJlKHIpe2NvbnN0IGU9bXQocik7aWYoIWUpdGhyb3cidW5rbm93biBpbnRlcm5hbCBmb3JtYXQiO3JldHVybntmb3JtYXQ6ZS50ZXh0dXJlRm9ybWF0LHR5cGU6ZS50eXBlWzBdfX1mdW5jdGlvbiBHbihyKXtyZXR1cm4ociZyLTEpPT09MH1mdW5jdGlvbiBSdShyLGUsdCxuKXtpZighT2UocikpcmV0dXJuIEduKGUpJiZHbih0KTtjb25zdCBpPW10KG4pO2lmKCFpKXRocm93InVua25vd24gaW50ZXJuYWwgZm9ybWF0IjtyZXR1cm4gaS5jb2xvclJlbmRlcmFibGUmJmkudGV4dHVyZUZpbHRlcmFibGV9ZnVuY3Rpb24gU3Uocil7Y29uc3QgZT1tdChyKTtpZighZSl0aHJvdyJ1bmtub3duIGludGVybmFsIGZvcm1hdCI7cmV0dXJuIGUudGV4dHVyZUZpbHRlcmFibGV9ZnVuY3Rpb24gSXUocixlLHQpe3JldHVybiBNZShlKT9pcihlKTp0fHxTfWZ1bmN0aW9uIGh0KHIsZSx0LG4saSl7aWYoaSUxIT09MCl0aHJvdyJjYW4ndCBndWVzcyBkaW1lbnNpb25zIjtpZighdCYmIW4pe2NvbnN0IG89TWF0aC5zcXJ0KGkvKGU9PT1vZT82OjEpKTtvJTE9PT0wPyh0PW8sbj1vKToodD1pLG49MSl9ZWxzZSBpZihuKXtpZighdCYmKHQ9aS9uLHQlMSkpdGhyb3ciY2FuJ3QgZ3Vlc3MgZGltZW5zaW9ucyJ9ZWxzZSBpZihuPWkvdCxuJTEpdGhyb3ciY2FuJ3QgZ3Vlc3MgZGltZW5zaW9ucyI7cmV0dXJue3dpZHRoOnQsaGVpZ2h0Om59fWZ1bmN0aW9uIFNlKHIsZSl7ZS5jb2xvcnNwYWNlQ29udmVyc2lvbiE9PXZvaWQgMCYmci5waXhlbFN0b3JlaSh4YSxlLmNvbG9yc3BhY2VDb252ZXJzaW9uKSxlLnByZW11bHRpcGx5QWxwaGEhPT12b2lkIDAmJnIucGl4ZWxTdG9yZWkoYmEsZS5wcmVtdWx0aXBseUFscGhhKSxlLmZsaXBZIT09dm9pZCAwJiZyLnBpeGVsU3RvcmVpKGdhLGUuZmxpcFkpfWZ1bmN0aW9uIHpuKHIpe3IucGl4ZWxTdG9yZWkoZnIsNCksT2UocikmJihyLnBpeGVsU3RvcmVpKE9uLDApLHIucGl4ZWxTdG9yZWkoTW4sMCksci5waXhlbFN0b3JlaShObiwwKSxyLnBpeGVsU3RvcmVpKFVuLDApLHIucGl4ZWxTdG9yZWkoQm4sMCkpfWZ1bmN0aW9uIEZ1KHIsZSx0LG4pe24ubWluTWFnJiYodC5jYWxsKHIsZSx1cixuLm1pbk1hZyksdC5jYWxsKHIsZSxjcixuLm1pbk1hZykpLG4ubWluJiZ0LmNhbGwocixlLHVyLG4ubWluKSxuLm1hZyYmdC5jYWxsKHIsZSxjcixuLm1hZyksbi53cmFwJiYodC5jYWxsKHIsZSxhdCxuLndyYXApLHQuY2FsbChyLGUsdXQsbi53cmFwKSwoZT09PWRlfHwkcyhyLGUpKSYmdC5jYWxsKHIsZSxDbixuLndyYXApKSxuLndyYXBSJiZ0LmNhbGwocixlLENuLG4ud3JhcFIpLG4ud3JhcFMmJnQuY2FsbChyLGUsYXQsbi53cmFwUyksbi53cmFwVCYmdC5jYWxsKHIsZSx1dCxuLndyYXBUKSxuLm1pbkxvZCYmdC5jYWxsKHIsZSxoYSxuLm1pbkxvZCksbi5tYXhMb2QmJnQuY2FsbChyLGUscGEsbi5tYXhMb2QpLG4uYmFzZUxldmVsJiZ0LmNhbGwocixlLHlhLG4uYmFzZUxldmVsKSxuLm1heExldmVsJiZ0LmNhbGwocixlLF9hLG4ubWF4TGV2ZWwpfWZ1bmN0aW9uIEhuKHIsZSx0KXtjb25zdCBuPXQudGFyZ2V0fHxpZTtyLmJpbmRUZXh0dXJlKG4sZSksRnUocixuLHIudGV4UGFyYW1ldGVyaSx0KX1mdW5jdGlvbiBQdShyKXtyZXR1cm4gcj1yfHxuZS50ZXh0dXJlQ29sb3IsTWUocik/cjpuZXcgVWludDhBcnJheShbclswXSoyNTUsclsxXSoyNTUsclsyXSoyNTUsclszXSoyNTVdKX1mdW5jdGlvbiBtcihyLGUsdCxuLGksbyl7dD10fHxuZS50ZXh0dXJlT3B0aW9ucyxvPW98fEk7Y29uc3Qgcz10LnRhcmdldHx8aWU7aWYobj1ufHx0LndpZHRoLGk9aXx8dC5oZWlnaHQsci5iaW5kVGV4dHVyZShzLGUpLFJ1KHIsbixpLG8pKXIuZ2VuZXJhdGVNaXBtYXAocyk7ZWxzZXtjb25zdCBhPVN1KG8pP3VhOmFhO3IudGV4UGFyYW1ldGVyaShzLHVyLGEpLHIudGV4UGFyYW1ldGVyaShzLGNyLGEpLHIudGV4UGFyYW1ldGVyaShzLGF0LHN0KSxyLnRleFBhcmFtZXRlcmkocyx1dCxzdCl9fWZ1bmN0aW9uIGtlKHIpe3JldHVybiByLmF1dG89PT0hMHx8ci5hdXRvPT09dm9pZCAwJiZyLmxldmVsPT09dm9pZCAwfWZ1bmN0aW9uIGhyKHIsZSl7cmV0dXJuIGU9ZXx8e30sZS5jdWJlRmFjZU9yZGVyfHxbYXIsY2EsZmEsbGEsZGEsbWFdfWZ1bmN0aW9uIHByKHIsZSl7Y29uc3Qgbj1ocihyLGUpLm1hcChmdW5jdGlvbihpLG8pe3JldHVybntmYWNlOmksbmR4Om99fSk7cmV0dXJuIG4uc29ydChmdW5jdGlvbihpLG8pe3JldHVybiBpLmZhY2Utby5mYWNlfSksbn1mdW5jdGlvbiBWbihyLGUsdCxuKXtuPW58fG5lLnRleHR1cmVPcHRpb25zO2NvbnN0IGk9bi50YXJnZXR8fGllLG89bi5sZXZlbHx8MDtsZXQgcz10LndpZHRoLGE9dC5oZWlnaHQ7Y29uc3QgdT1uLmludGVybmFsRm9ybWF0fHxuLmZvcm1hdHx8SSxmPUJlKHUpLGM9bi5mb3JtYXR8fGYuZm9ybWF0LGQ9bi50eXBlfHxmLnR5cGU7aWYoU2UocixuKSxyLmJpbmRUZXh0dXJlKGksZSksaT09PW9lKXtjb25zdCBwPXQud2lkdGgseT10LmhlaWdodDtsZXQgbSxfO2lmKHAvNj09PXkpbT15LF89WzAsMCwxLDAsMiwwLDMsMCw0LDAsNSwwXTtlbHNlIGlmKHkvNj09PXApbT1wLF89WzAsMCwwLDEsMCwyLDAsMywwLDQsMCw1XTtlbHNlIGlmKHAvMz09PXkvMiltPXAvMyxfPVswLDAsMSwwLDIsMCwwLDEsMSwxLDIsMV07ZWxzZSBpZihwLzI9PT15LzMpbT1wLzIsXz1bMCwwLDEsMCwwLDEsMSwxLDAsMiwxLDJdO2Vsc2UgdGhyb3ciY2FuJ3QgZmlndXJlIG91dCBjdWJlIG1hcCBmcm9tIGVsZW1lbnQ6ICIrKHQuc3JjP3Quc3JjOnQubm9kZU5hbWUpO2NvbnN0IGI9U24oKTtiPyhiLmNhbnZhcy53aWR0aD1tLGIuY2FudmFzLmhlaWdodD1tLHM9bSxhPW0scHIocixuKS5mb3JFYWNoKGZ1bmN0aW9uKGcpe2NvbnN0IFQ9X1tnLm5keCoyKzBdKm0sRj1fW2cubmR4KjIrMV0qbTtiLmRyYXdJbWFnZSh0LFQsRixtLG0sMCwwLG0sbSksci50ZXhJbWFnZTJEKGcuZmFjZSxvLHUsYyxkLGIuY2FudmFzKX0pLGIuY2FudmFzLndpZHRoPTEsYi5jYW52YXMuaGVpZ2h0PTEpOnR5cGVvZiBjcmVhdGVJbWFnZUJpdG1hcCE9InVuZGVmaW5lZCImJihzPW0sYT1tLHByKHIsbikuZm9yRWFjaChmdW5jdGlvbihnKXtjb25zdCBUPV9bZy5uZHgqMiswXSptLEY9X1tnLm5keCoyKzFdKm07ci50ZXhJbWFnZTJEKGcuZmFjZSxvLHUsbSxtLDAsYyxkLG51bGwpLGNyZWF0ZUltYWdlQml0bWFwKHQsVCxGLG0sbSx7cHJlbXVsdGlwbHlBbHBoYToibm9uZSIsY29sb3JTcGFjZUNvbnZlcnNpb246Im5vbmUifSkudGhlbihmdW5jdGlvbihMKXtTZShyLG4pLHIuYmluZFRleHR1cmUoaSxlKSxyLnRleEltYWdlMkQoZy5mYWNlLG8sdSxjLGQsTCksa2UobikmJm1yKHIsZSxuLHMsYSx1KX0pfSkpfWVsc2UgaWYoaT09PWRlfHxpPT09bWUpe2NvbnN0IHA9TWF0aC5taW4odC53aWR0aCx0LmhlaWdodCkseT1NYXRoLm1heCh0LndpZHRoLHQuaGVpZ2h0KSxtPXkvcDtpZihtJTEhPT0wKXRocm93ImNhbiBub3QgY29tcHV0ZSAzRCBkaW1lbnNpb25zIG9mIGVsZW1lbnQiO2NvbnN0IF89dC53aWR0aD09PXk/MTowLGI9dC5oZWlnaHQ9PT15PzE6MDtyLnBpeGVsU3RvcmVpKGZyLDEpLHIucGl4ZWxTdG9yZWkoT24sdC53aWR0aCksci5waXhlbFN0b3JlaShNbiwwKSxyLnBpeGVsU3RvcmVpKEJuLDApLHIudGV4SW1hZ2UzRChpLG8sdSxwLHAscCwwLGMsZCxudWxsKTtmb3IobGV0IGc9MDtnPG07KytnKXtjb25zdCBUPWcqcCpfLEY9ZypwKmI7ci5waXhlbFN0b3JlaShObixUKSxyLnBpeGVsU3RvcmVpKFVuLEYpLHIudGV4U3ViSW1hZ2UzRChpLG8sMCwwLGcscCxwLDEsYyxkLHQpfXpuKHIpfWVsc2Ugci50ZXhJbWFnZTJEKGksbyx1LGMsZCx0KTtrZShuKSYmbXIocixlLG4scyxhLHUpLEhuKHIsZSxuKX1mdW5jdGlvbiBMZSgpe31mdW5jdGlvbiBEdShyKXtpZih0eXBlb2YgZG9jdW1lbnQhPSJ1bmRlZmluZWQiKXtjb25zdCBlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKTtyZXR1cm4gZS5ocmVmPXIsZS5ob3N0bmFtZT09PWxvY2F0aW9uLmhvc3RuYW1lJiZlLnBvcnQ9PT1sb2NhdGlvbi5wb3J0JiZlLnByb3RvY29sPT09bG9jYXRpb24ucHJvdG9jb2x9ZWxzZXtjb25zdCBlPW5ldyBVUkwobG9jYXRpb24uaHJlZikub3JpZ2luO3JldHVybiBuZXcgVVJMKHIsbG9jYXRpb24uaHJlZikub3JpZ2luPT09ZX19ZnVuY3Rpb24gQ3UocixlKXtyZXR1cm4gZT09PXZvaWQgMCYmIUR1KHIpPyJhbm9ueW1vdXMiOmV9ZnVuY3Rpb24gT3UocixlLHQpe3Q9dHx8TGU7bGV0IG47aWYoZT1lIT09dm9pZCAwP2U6bmUuY3Jvc3NPcmlnaW4sZT1DdShyLGUpLHR5cGVvZiBJbWFnZSE9InVuZGVmaW5lZCIpe249bmV3IEltYWdlLGUhPT12b2lkIDAmJihuLmNyb3NzT3JpZ2luPWUpO2NvbnN0IGk9ZnVuY3Rpb24oKXtuLnJlbW92ZUV2ZW50TGlzdGVuZXIoImVycm9yIixvKSxuLnJlbW92ZUV2ZW50TGlzdGVuZXIoImxvYWQiLHMpLG49bnVsbH0sbz1mdW5jdGlvbigpe2NvbnN0IHU9ImNvdWxkbid0IGxvYWQgaW1hZ2U6ICIrcjt4bih1KSx0KHUsbiksaSgpfSxzPWZ1bmN0aW9uKCl7dChudWxsLG4pLGkoKX07cmV0dXJuIG4uYWRkRXZlbnRMaXN0ZW5lcigiZXJyb3IiLG8pLG4uYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIscyksbi5zcmM9cixufWVsc2UgaWYodHlwZW9mIEltYWdlQml0bWFwIT0idW5kZWZpbmVkIil7bGV0IGksbztjb25zdCBzPWZ1bmN0aW9uKCl7dChpLG8pfSxhPXt9O2UmJihhLm1vZGU9ImNvcnMiKSxmZXRjaChyLGEpLnRoZW4oZnVuY3Rpb24odSl7aWYoIXUub2spdGhyb3cgdTtyZXR1cm4gdS5ibG9iKCl9KS50aGVuKGZ1bmN0aW9uKHUpe3JldHVybiBjcmVhdGVJbWFnZUJpdG1hcCh1LHtwcmVtdWx0aXBseUFscGhhOiJub25lIixjb2xvclNwYWNlQ29udmVyc2lvbjoibm9uZSJ9KX0pLnRoZW4oZnVuY3Rpb24odSl7bz11LHNldFRpbWVvdXQocyl9KS5jYXRjaChmdW5jdGlvbih1KXtpPXUsc2V0VGltZW91dChzKX0pLG49bnVsbH1yZXR1cm4gbn1mdW5jdGlvbiBXbihyKXtyZXR1cm4gdHlwZW9mIEltYWdlQml0bWFwIT0idW5kZWZpbmVkIiYmciBpbnN0YW5jZW9mIEltYWdlQml0bWFwfHx0eXBlb2YgSW1hZ2VEYXRhIT0idW5kZWZpbmVkIiYmciBpbnN0YW5jZW9mIEltYWdlRGF0YXx8dHlwZW9mIEhUTUxFbGVtZW50IT0idW5kZWZpbmVkIiYmciBpbnN0YW5jZW9mIEhUTUxFbGVtZW50fWZ1bmN0aW9uIHlyKHIsZSx0KXtyZXR1cm4gV24ocik/KHNldFRpbWVvdXQoZnVuY3Rpb24oKXt0KG51bGwscil9KSxyKTpPdShyLGUsdCl9ZnVuY3Rpb24gX3IocixlLHQpe3Q9dHx8bmUudGV4dHVyZU9wdGlvbnM7Y29uc3Qgbj10LnRhcmdldHx8aWU7aWYoci5iaW5kVGV4dHVyZShuLGUpLHQuY29sb3I9PT0hMSlyZXR1cm47Y29uc3QgaT1QdSh0LmNvbG9yKTtpZihuPT09b2UpZm9yKGxldCBvPTA7bzw2OysrbylyLnRleEltYWdlMkQoYXIrbywwLEksMSwxLDAsSSxTLGkpO2Vsc2Ugbj09PWRlfHxuPT09bWU/ci50ZXhJbWFnZTNEKG4sMCxJLDEsMSwxLDAsSSxTLGkpOnIudGV4SW1hZ2UyRChuLDAsSSwxLDEsMCxJLFMsaSl9ZnVuY3Rpb24gTXUocixlLHQsbil7cmV0dXJuIG49bnx8TGUsdD10fHxuZS50ZXh0dXJlT3B0aW9ucyxfcihyLGUsdCksdD1PYmplY3QuYXNzaWduKHt9LHQpLHlyKHQuc3JjLHQuY3Jvc3NPcmlnaW4sZnVuY3Rpb24obyxzKXtvP24obyxlLHMpOihWbihyLGUscyx0KSxuKG51bGwsZSxzKSl9KX1mdW5jdGlvbiBOdShyLGUsdCxuKXtuPW58fExlO2NvbnN0IGk9dC5zcmM7aWYoaS5sZW5ndGghPT02KXRocm93InRoZXJlIG11c3QgYmUgNiB1cmxzIGZvciBhIGN1YmVtYXAiO2NvbnN0IG89dC5sZXZlbHx8MCxzPXQuaW50ZXJuYWxGb3JtYXR8fHQuZm9ybWF0fHxJLGE9QmUocyksdT10LmZvcm1hdHx8YS5mb3JtYXQsZj10LnR5cGV8fFMsYz10LnRhcmdldHx8aWU7aWYoYyE9PW9lKXRocm93InRhcmdldCBtdXN0IGJlIFRFWFRVUkVfQ1VCRV9NQVAiO19yKHIsZSx0KSx0PU9iamVjdC5hc3NpZ24oe30sdCk7bGV0IGQ9Njtjb25zdCBwPVtdLHk9aHIocix0KTtsZXQgbTtmdW5jdGlvbiBfKGIpe3JldHVybiBmdW5jdGlvbihnLFQpey0tZCxnP3AucHVzaChnKTpULndpZHRoIT09VC5oZWlnaHQ/cC5wdXNoKCJjdWJlbWFwIGZhY2UgaW1nIGlzIG5vdCBhIHNxdWFyZTogIitULnNyYyk6KFNlKHIsdCksci5iaW5kVGV4dHVyZShjLGUpLGQ9PT01P2hyKCkuZm9yRWFjaChmdW5jdGlvbihGKXtyLnRleEltYWdlMkQoRixvLHMsdSxmLFQpfSk6ci50ZXhJbWFnZTJEKGIsbyxzLHUsZixUKSxrZSh0KSYmci5nZW5lcmF0ZU1pcG1hcChjKSksZD09PTAmJm4ocC5sZW5ndGg/cDp2b2lkIDAsZSxtKX19bT1pLm1hcChmdW5jdGlvbihiLGcpe3JldHVybiB5cihiLHQuY3Jvc3NPcmlnaW4sXyh5W2ddKSl9KX1mdW5jdGlvbiBVdShyLGUsdCxuKXtuPW58fExlO2NvbnN0IGk9dC5zcmMsbz10LmludGVybmFsRm9ybWF0fHx0LmZvcm1hdHx8SSxzPUJlKG8pLGE9dC5mb3JtYXR8fHMuZm9ybWF0LHU9dC50eXBlfHxTLGY9dC50YXJnZXR8fG1lO2lmKGYhPT1kZSYmZiE9PW1lKXRocm93InRhcmdldCBtdXN0IGJlIFRFWFRVUkVfM0Qgb3IgVEVYVFVSRV8yRF9BUlJBWSI7X3IocixlLHQpLHQ9T2JqZWN0LmFzc2lnbih7fSx0KTtsZXQgYz1pLmxlbmd0aDtjb25zdCBkPVtdO2xldCBwO2NvbnN0IHk9dC5sZXZlbHx8MDtsZXQgbT10LndpZHRoLF89dC5oZWlnaHQ7Y29uc3QgYj1pLmxlbmd0aDtsZXQgZz0hMDtmdW5jdGlvbiBUKEYpe3JldHVybiBmdW5jdGlvbihMLFYpe2lmKC0tYyxMKWQucHVzaChMKTtlbHNle2lmKFNlKHIsdCksci5iaW5kVGV4dHVyZShmLGUpLGcpe2c9ITEsbT10LndpZHRofHxWLndpZHRoLF89dC5oZWlnaHR8fFYuaGVpZ2h0LHIudGV4SW1hZ2UzRChmLHksbyxtLF8sYiwwLGEsdSxudWxsKTtmb3IobGV0IGVlPTA7ZWU8YjsrK2VlKXIudGV4U3ViSW1hZ2UzRChmLHksMCwwLGVlLG0sXywxLGEsdSxWKX1lbHNle2xldCBlZT1WLHE7KFYud2lkdGghPT1tfHxWLmhlaWdodCE9PV8pJiYocT1TbigpLGVlPXEuY2FudmFzLHEuY2FudmFzLndpZHRoPW0scS5jYW52YXMuaGVpZ2h0PV8scS5kcmF3SW1hZ2UoViwwLDAsbSxfKSksci50ZXhTdWJJbWFnZTNEKGYseSwwLDAsRixtLF8sMSxhLHUsZWUpLHEmJmVlPT09cS5jYW52YXMmJihxLmNhbnZhcy53aWR0aD0wLHEuY2FudmFzLmhlaWdodD0wKX1rZSh0KSYmci5nZW5lcmF0ZU1pcG1hcChmKX1jPT09MCYmbihkLmxlbmd0aD9kOnZvaWQgMCxlLHApfX1wPWkubWFwKGZ1bmN0aW9uKEYsTCl7cmV0dXJuIHlyKEYsdC5jcm9zc09yaWdpbixUKEwpKX0pfWZ1bmN0aW9uIEJ1KHIsZSx0LG4pe249bnx8bmUudGV4dHVyZU9wdGlvbnM7Y29uc3QgaT1uLnRhcmdldHx8aWU7ci5iaW5kVGV4dHVyZShpLGUpO2xldCBvPW4ud2lkdGgscz1uLmhlaWdodCxhPW4uZGVwdGg7Y29uc3QgdT1uLmxldmVsfHwwLGY9bi5pbnRlcm5hbEZvcm1hdHx8bi5mb3JtYXR8fEksYz1CZShmKSxkPW4uZm9ybWF0fHxjLmZvcm1hdCxwPW4udHlwZXx8SXUocix0LGMudHlwZSk7aWYoTWUodCkpdCBpbnN0YW5jZW9mIFVpbnQ4Q2xhbXBlZEFycmF5JiYodD1uZXcgVWludDhBcnJheSh0LmJ1ZmZlcikpO2Vsc2V7Y29uc3QgYj1VcyhwKTt0PW5ldyBiKHQpfWNvbnN0IHk9d3UoZixwKSxtPXQuYnl0ZUxlbmd0aC95O2lmKG0lMSl0aHJvdyJsZW5ndGggd3Jvbmcgc2l6ZSBmb3IgZm9ybWF0OiAiK1JuKHIsZCk7bGV0IF87aWYoaT09PWRlfHxpPT09bWUpaWYoIW8mJiFzJiYhYSl7Y29uc3QgYj1NYXRoLmNicnQobSk7aWYoYiUxIT09MCl0aHJvdyJjYW4ndCBndWVzcyBjdWJlIHNpemUgb2YgYXJyYXkgb2YgbnVtRWxlbWVudHM6ICIrbTtvPWIscz1iLGE9Yn1lbHNlIG8mJighc3x8IWEpPyhfPWh0KHIsaSxzLGEsbS9vKSxzPV8ud2lkdGgsYT1fLmhlaWdodCk6cyYmKCFvfHwhYSk/KF89aHQocixpLG8sYSxtL3MpLG89Xy53aWR0aCxhPV8uaGVpZ2h0KTooXz1odChyLGksbyxzLG0vYSksbz1fLndpZHRoLHM9Xy5oZWlnaHQpO2Vsc2UgXz1odChyLGksbyxzLG0pLG89Xy53aWR0aCxzPV8uaGVpZ2h0O2lmKHpuKHIpLHIucGl4ZWxTdG9yZWkoZnIsbi51bnBhY2tBbGlnbm1lbnR8fDEpLFNlKHIsbiksaT09PW9lKXtjb25zdCBiPXkvdC5CWVRFU19QRVJfRUxFTUVOVCxnPW0vNipiO3ByKHIsbikuZm9yRWFjaChUPT57Y29uc3QgRj1nKlQubmR4LEw9dC5zdWJhcnJheShGLEYrZyk7ci50ZXhJbWFnZTJEKFQuZmFjZSx1LGYsbyxzLDAsZCxwLEwpfSl9ZWxzZSBpPT09ZGV8fGk9PT1tZT9yLnRleEltYWdlM0QoaSx1LGYsbyxzLGEsMCxkLHAsdCk6ci50ZXhJbWFnZTJEKGksdSxmLG8scywwLGQscCx0KTtyZXR1cm57d2lkdGg6byxoZWlnaHQ6cyxkZXB0aDphLHR5cGU6cH19ZnVuY3Rpb24ga3UocixlLHQpe2NvbnN0IG49dC50YXJnZXR8fGllO3IuYmluZFRleHR1cmUobixlKTtjb25zdCBpPXQubGV2ZWx8fDAsbz10LmludGVybmFsRm9ybWF0fHx0LmZvcm1hdHx8SSxzPUJlKG8pLGE9dC5mb3JtYXR8fHMuZm9ybWF0LHU9dC50eXBlfHxzLnR5cGU7aWYoU2Uocix0KSxuPT09b2UpZm9yKGxldCBmPTA7Zjw2OysrZilyLnRleEltYWdlMkQoYXIrZixpLG8sdC53aWR0aCx0LmhlaWdodCwwLGEsdSxudWxsKTtlbHNlIG49PT1kZXx8bj09PW1lP3IudGV4SW1hZ2UzRChuLGksbyx0LndpZHRoLHQuaGVpZ2h0LHQuZGVwdGgsMCxhLHUsbnVsbCk6ci50ZXhJbWFnZTJEKG4saSxvLHQud2lkdGgsdC5oZWlnaHQsMCxhLHUsbnVsbCl9ZnVuY3Rpb24gam4ocixlLHQpe3Q9dHx8TGUsZT1lfHxuZS50ZXh0dXJlT3B0aW9ucztjb25zdCBuPXIuY3JlYXRlVGV4dHVyZSgpLGk9ZS50YXJnZXR8fGllO2xldCBvPWUud2lkdGh8fDEscz1lLmhlaWdodHx8MTtjb25zdCBhPWUuaW50ZXJuYWxGb3JtYXR8fEk7ci5iaW5kVGV4dHVyZShpLG4pLGk9PT1vZSYmKHIudGV4UGFyYW1ldGVyaShpLGF0LHN0KSxyLnRleFBhcmFtZXRlcmkoaSx1dCxzdCkpO2xldCB1PWUuc3JjO2lmKHUpaWYodHlwZW9mIHU9PSJmdW5jdGlvbiImJih1PXUocixlKSksdHlwZW9mIHU9PSJzdHJpbmciKU11KHIsbixlLHQpO2Vsc2UgaWYoTWUodSl8fEFycmF5LmlzQXJyYXkodSkmJih0eXBlb2YgdVswXT09Im51bWJlciJ8fEFycmF5LmlzQXJyYXkodVswXSl8fE1lKHVbMF0pKSl7Y29uc3QgZj1CdShyLG4sdSxlKTtvPWYud2lkdGgscz1mLmhlaWdodH1lbHNlIEFycmF5LmlzQXJyYXkodSkmJih0eXBlb2YgdVswXT09InN0cmluZyJ8fFduKHVbMF0pKT9pPT09b2U/TnUocixuLGUsdCk6VXUocixuLGUsdCk6KFZuKHIsbix1LGUpLG89dS53aWR0aCxzPXUuaGVpZ2h0KTtlbHNlIGt1KHIsbixlKTtyZXR1cm4ga2UoZSkmJm1yKHIsbixlLG8scyxhKSxIbihyLG4sZSksbn1jb25zdCBwdD14bjtmdW5jdGlvbiBxbihyKXtyZXR1cm4gdHlwZW9mIGRvY3VtZW50IT0idW5kZWZpbmVkIiYmZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQ/ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQocik6bnVsbH1jb25zdCB5dD0zMzk4NCxfdD0zNDk2MixMdT0zNDk2MywkdT0zNTcxMyxHdT0zNTcxNCx6dT0zNTYzMixIdT0zNTYzMyxWdT0zNTk4MSxYbj0zNTcxOCxXdT0zNTcyMSxqdT0zNTk3MSxxdT0zNTM4MixYdT0zNTM5NixZdT0zNTM5OCxLdT0zNTM5MixKdT0zNTM5NSx4dD01MTI2LFluPTM1NjY0LEtuPTM1NjY1LEpuPTM1NjY2LHhyPTUxMjQsUW49MzU2NjcsWm49MzU2NjgsZWk9MzU2NjksdGk9MzU2NzAscmk9MzU2NzEsbmk9MzU2NzIsaWk9MzU2NzMsb2k9MzU2NzQsc2k9MzU2NzUsYWk9MzU2NzYsUXU9MzU2NzgsWnU9MzU2ODAsZWM9MzU2NzksdGM9MzU2ODIscmM9MzU2ODUsbmM9MzU2ODYsaWM9MzU2ODcsb2M9MzU2ODgsc2M9MzU2ODksYWM9MzU2OTAsdWM9MzYyODksY2M9MzYyOTIsZmM9MzYyOTMsYnI9NTEyNSx1aT0zNjI5NCxjaT0zNjI5NSxmaT0zNjI5NixsYz0zNjI5OCxkYz0zNjI5OSxtYz0zNjMwMCxoYz0zNjMwMyxwYz0zNjMwNix5Yz0zNjMwNyxfYz0zNjMwOCx4Yz0zNjMxMSxidD0zNTUzLGd0PTM0MDY3LGdyPTMyODc5LHZ0PTM1ODY2LHY9e307ZnVuY3Rpb24gbGkocixlKXtyZXR1cm4gdltlXS5iaW5kUG9pbnR9ZnVuY3Rpb24gYmMocixlKXtyZXR1cm4gZnVuY3Rpb24odCl7ci51bmlmb3JtMWYoZSx0KX19ZnVuY3Rpb24gZ2MocixlKXtyZXR1cm4gZnVuY3Rpb24odCl7ci51bmlmb3JtMWZ2KGUsdCl9fWZ1bmN0aW9uIHZjKHIsZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3IudW5pZm9ybTJmdihlLHQpfX1mdW5jdGlvbiBFYyhyLGUpe3JldHVybiBmdW5jdGlvbih0KXtyLnVuaWZvcm0zZnYoZSx0KX19ZnVuY3Rpb24gVGMocixlKXtyZXR1cm4gZnVuY3Rpb24odCl7ci51bmlmb3JtNGZ2KGUsdCl9fWZ1bmN0aW9uIGRpKHIsZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3IudW5pZm9ybTFpKGUsdCl9fWZ1bmN0aW9uIG1pKHIsZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3IudW5pZm9ybTFpdihlLHQpfX1mdW5jdGlvbiBoaShyLGUpe3JldHVybiBmdW5jdGlvbih0KXtyLnVuaWZvcm0yaXYoZSx0KX19ZnVuY3Rpb24gcGkocixlKXtyZXR1cm4gZnVuY3Rpb24odCl7ci51bmlmb3JtM2l2KGUsdCl9fWZ1bmN0aW9uIHlpKHIsZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3IudW5pZm9ybTRpdihlLHQpfX1mdW5jdGlvbiBBYyhyLGUpe3JldHVybiBmdW5jdGlvbih0KXtyLnVuaWZvcm0xdWkoZSx0KX19ZnVuY3Rpb24gd2MocixlKXtyZXR1cm4gZnVuY3Rpb24odCl7ci51bmlmb3JtMXVpdihlLHQpfX1mdW5jdGlvbiBSYyhyLGUpe3JldHVybiBmdW5jdGlvbih0KXtyLnVuaWZvcm0ydWl2KGUsdCl9fWZ1bmN0aW9uIFNjKHIsZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3IudW5pZm9ybTN1aXYoZSx0KX19ZnVuY3Rpb24gSWMocixlKXtyZXR1cm4gZnVuY3Rpb24odCl7ci51bmlmb3JtNHVpdihlLHQpfX1mdW5jdGlvbiBGYyhyLGUpe3JldHVybiBmdW5jdGlvbih0KXtyLnVuaWZvcm1NYXRyaXgyZnYoZSwhMSx0KX19ZnVuY3Rpb24gUGMocixlKXtyZXR1cm4gZnVuY3Rpb24odCl7ci51bmlmb3JtTWF0cml4M2Z2KGUsITEsdCl9fWZ1bmN0aW9uIERjKHIsZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3IudW5pZm9ybU1hdHJpeDRmdihlLCExLHQpfX1mdW5jdGlvbiBDYyhyLGUpe3JldHVybiBmdW5jdGlvbih0KXtyLnVuaWZvcm1NYXRyaXgyeDNmdihlLCExLHQpfX1mdW5jdGlvbiBPYyhyLGUpe3JldHVybiBmdW5jdGlvbih0KXtyLnVuaWZvcm1NYXRyaXgzeDJmdihlLCExLHQpfX1mdW5jdGlvbiBNYyhyLGUpe3JldHVybiBmdW5jdGlvbih0KXtyLnVuaWZvcm1NYXRyaXgyeDRmdihlLCExLHQpfX1mdW5jdGlvbiBOYyhyLGUpe3JldHVybiBmdW5jdGlvbih0KXtyLnVuaWZvcm1NYXRyaXg0eDJmdihlLCExLHQpfX1mdW5jdGlvbiBVYyhyLGUpe3JldHVybiBmdW5jdGlvbih0KXtyLnVuaWZvcm1NYXRyaXgzeDRmdihlLCExLHQpfX1mdW5jdGlvbiBCYyhyLGUpe3JldHVybiBmdW5jdGlvbih0KXtyLnVuaWZvcm1NYXRyaXg0eDNmdihlLCExLHQpfX1mdW5jdGlvbiBCKHIsZSx0LG4pe2NvbnN0IGk9bGkocixlKTtyZXR1cm4gT2Uocik/ZnVuY3Rpb24obyl7bGV0IHMsYTtvcihyLG8pPyhzPW8sYT1udWxsKToocz1vLnRleHR1cmUsYT1vLnNhbXBsZXIpLHIudW5pZm9ybTFpKG4sdCksci5hY3RpdmVUZXh0dXJlKHl0K3QpLHIuYmluZFRleHR1cmUoaSxzKSxyLmJpbmRTYW1wbGVyKHQsYSl9OmZ1bmN0aW9uKG8pe3IudW5pZm9ybTFpKG4sdCksci5hY3RpdmVUZXh0dXJlKHl0K3QpLHIuYmluZFRleHR1cmUoaSxvKX19ZnVuY3Rpb24gayhyLGUsdCxuLGkpe2NvbnN0IG89bGkocixlKSxzPW5ldyBJbnQzMkFycmF5KGkpO2ZvcihsZXQgYT0wO2E8aTsrK2Epc1thXT10K2E7cmV0dXJuIE9lKHIpP2Z1bmN0aW9uKGEpe3IudW5pZm9ybTFpdihuLHMpLGEuZm9yRWFjaChmdW5jdGlvbih1LGYpe3IuYWN0aXZlVGV4dHVyZSh5dCtzW2ZdKTtsZXQgYyxkO29yKHIsdSk/KGM9dSxkPW51bGwpOihjPXUudGV4dHVyZSxkPXUuc2FtcGxlciksci5iaW5kU2FtcGxlcih0LGQpLHIuYmluZFRleHR1cmUobyxjKX0pfTpmdW5jdGlvbihhKXtyLnVuaWZvcm0xaXYobixzKSxhLmZvckVhY2goZnVuY3Rpb24odSxmKXtyLmFjdGl2ZVRleHR1cmUoeXQrc1tmXSksci5iaW5kVGV4dHVyZShvLHUpfSl9fXZbeHRdPXtUeXBlOkZsb2F0MzJBcnJheSxzaXplOjQsc2V0dGVyOmJjLGFycmF5U2V0dGVyOmdjfSx2W1luXT17VHlwZTpGbG9hdDMyQXJyYXksc2l6ZTo4LHNldHRlcjp2Yyxjb2xzOjJ9LHZbS25dPXtUeXBlOkZsb2F0MzJBcnJheSxzaXplOjEyLHNldHRlcjpFYyxjb2xzOjN9LHZbSm5dPXtUeXBlOkZsb2F0MzJBcnJheSxzaXplOjE2LHNldHRlcjpUYyxjb2xzOjR9LHZbeHJdPXtUeXBlOkludDMyQXJyYXksc2l6ZTo0LHNldHRlcjpkaSxhcnJheVNldHRlcjptaX0sdltRbl09e1R5cGU6SW50MzJBcnJheSxzaXplOjgsc2V0dGVyOmhpLGNvbHM6Mn0sdltabl09e1R5cGU6SW50MzJBcnJheSxzaXplOjEyLHNldHRlcjpwaSxjb2xzOjN9LHZbZWldPXtUeXBlOkludDMyQXJyYXksc2l6ZToxNixzZXR0ZXI6eWksY29sczo0fSx2W2JyXT17VHlwZTpVaW50MzJBcnJheSxzaXplOjQsc2V0dGVyOkFjLGFycmF5U2V0dGVyOndjfSx2W3VpXT17VHlwZTpVaW50MzJBcnJheSxzaXplOjgsc2V0dGVyOlJjLGNvbHM6Mn0sdltjaV09e1R5cGU6VWludDMyQXJyYXksc2l6ZToxMixzZXR0ZXI6U2MsY29sczozfSx2W2ZpXT17VHlwZTpVaW50MzJBcnJheSxzaXplOjE2LHNldHRlcjpJYyxjb2xzOjR9LHZbdGldPXtUeXBlOlVpbnQzMkFycmF5LHNpemU6NCxzZXR0ZXI6ZGksYXJyYXlTZXR0ZXI6bWl9LHZbcmldPXtUeXBlOlVpbnQzMkFycmF5LHNpemU6OCxzZXR0ZXI6aGksY29sczoyfSx2W25pXT17VHlwZTpVaW50MzJBcnJheSxzaXplOjEyLHNldHRlcjpwaSxjb2xzOjN9LHZbaWldPXtUeXBlOlVpbnQzMkFycmF5LHNpemU6MTYsc2V0dGVyOnlpLGNvbHM6NH0sdltvaV09e1R5cGU6RmxvYXQzMkFycmF5LHNpemU6MzIsc2V0dGVyOkZjLHJvd3M6Mixjb2xzOjJ9LHZbc2ldPXtUeXBlOkZsb2F0MzJBcnJheSxzaXplOjQ4LHNldHRlcjpQYyxyb3dzOjMsY29sczozfSx2W2FpXT17VHlwZTpGbG9hdDMyQXJyYXksc2l6ZTo2NCxzZXR0ZXI6RGMscm93czo0LGNvbHM6NH0sdltyY109e1R5cGU6RmxvYXQzMkFycmF5LHNpemU6MzIsc2V0dGVyOkNjLHJvd3M6Mixjb2xzOjN9LHZbbmNdPXtUeXBlOkZsb2F0MzJBcnJheSxzaXplOjMyLHNldHRlcjpNYyxyb3dzOjIsY29sczo0fSx2W2ljXT17VHlwZTpGbG9hdDMyQXJyYXksc2l6ZTo0OCxzZXR0ZXI6T2Mscm93czozLGNvbHM6Mn0sdltvY109e1R5cGU6RmxvYXQzMkFycmF5LHNpemU6NDgsc2V0dGVyOlVjLHJvd3M6Myxjb2xzOjR9LHZbc2NdPXtUeXBlOkZsb2F0MzJBcnJheSxzaXplOjY0LHNldHRlcjpOYyxyb3dzOjQsY29sczoyfSx2W2FjXT17VHlwZTpGbG9hdDMyQXJyYXksc2l6ZTo2NCxzZXR0ZXI6QmMscm93czo0LGNvbHM6M30sdltRdV09e1R5cGU6bnVsbCxzaXplOjAsc2V0dGVyOkIsYXJyYXlTZXR0ZXI6ayxiaW5kUG9pbnQ6YnR9LHZbWnVdPXtUeXBlOm51bGwsc2l6ZTowLHNldHRlcjpCLGFycmF5U2V0dGVyOmssYmluZFBvaW50Omd0fSx2W2VjXT17VHlwZTpudWxsLHNpemU6MCxzZXR0ZXI6QixhcnJheVNldHRlcjprLGJpbmRQb2ludDpncn0sdlt0Y109e1R5cGU6bnVsbCxzaXplOjAsc2V0dGVyOkIsYXJyYXlTZXR0ZXI6ayxiaW5kUG9pbnQ6YnR9LHZbdWNdPXtUeXBlOm51bGwsc2l6ZTowLHNldHRlcjpCLGFycmF5U2V0dGVyOmssYmluZFBvaW50OnZ0fSx2W2NjXT17VHlwZTpudWxsLHNpemU6MCxzZXR0ZXI6QixhcnJheVNldHRlcjprLGJpbmRQb2ludDp2dH0sdltmY109e1R5cGU6bnVsbCxzaXplOjAsc2V0dGVyOkIsYXJyYXlTZXR0ZXI6ayxiaW5kUG9pbnQ6Z3R9LHZbbGNdPXtUeXBlOm51bGwsc2l6ZTowLHNldHRlcjpCLGFycmF5U2V0dGVyOmssYmluZFBvaW50OmJ0fSx2W2RjXT17VHlwZTpudWxsLHNpemU6MCxzZXR0ZXI6QixhcnJheVNldHRlcjprLGJpbmRQb2ludDpncn0sdlttY109e1R5cGU6bnVsbCxzaXplOjAsc2V0dGVyOkIsYXJyYXlTZXR0ZXI6ayxiaW5kUG9pbnQ6Z3R9LHZbaGNdPXtUeXBlOm51bGwsc2l6ZTowLHNldHRlcjpCLGFycmF5U2V0dGVyOmssYmluZFBvaW50OnZ0fSx2W3BjXT17VHlwZTpudWxsLHNpemU6MCxzZXR0ZXI6QixhcnJheVNldHRlcjprLGJpbmRQb2ludDpidH0sdlt5Y109e1R5cGU6bnVsbCxzaXplOjAsc2V0dGVyOkIsYXJyYXlTZXR0ZXI6ayxiaW5kUG9pbnQ6Z3J9LHZbX2NdPXtUeXBlOm51bGwsc2l6ZTowLHNldHRlcjpCLGFycmF5U2V0dGVyOmssYmluZFBvaW50Omd0fSx2W3hjXT17VHlwZTpudWxsLHNpemU6MCxzZXR0ZXI6QixhcnJheVNldHRlcjprLGJpbmRQb2ludDp2dH07ZnVuY3Rpb24gRXQocixlKXtyZXR1cm4gZnVuY3Rpb24odCl7aWYodC52YWx1ZSlzd2l0Y2goci5kaXNhYmxlVmVydGV4QXR0cmliQXJyYXkoZSksdC52YWx1ZS5sZW5ndGgpe2Nhc2UgNDpyLnZlcnRleEF0dHJpYjRmdihlLHQudmFsdWUpO2JyZWFrO2Nhc2UgMzpyLnZlcnRleEF0dHJpYjNmdihlLHQudmFsdWUpO2JyZWFrO2Nhc2UgMjpyLnZlcnRleEF0dHJpYjJmdihlLHQudmFsdWUpO2JyZWFrO2Nhc2UgMTpyLnZlcnRleEF0dHJpYjFmdihlLHQudmFsdWUpO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJ0aGUgbGVuZ3RoIG9mIGEgZmxvYXQgY29uc3RhbnQgdmFsdWUgbXVzdCBiZSBiZXR3ZWVuIDEgYW5kIDQhIil9ZWxzZSByLmJpbmRCdWZmZXIoX3QsdC5idWZmZXIpLHIuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoZSksci52ZXJ0ZXhBdHRyaWJQb2ludGVyKGUsdC5udW1Db21wb25lbnRzfHx0LnNpemUsdC50eXBlfHx4dCx0Lm5vcm1hbGl6ZXx8ITEsdC5zdHJpZGV8fDAsdC5vZmZzZXR8fDApLHIudmVydGV4QXR0cmliRGl2aXNvciYmci52ZXJ0ZXhBdHRyaWJEaXZpc29yKGUsdC5kaXZpc29yfHwwKX19ZnVuY3Rpb24gYWUocixlKXtyZXR1cm4gZnVuY3Rpb24odCl7aWYodC52YWx1ZSlpZihyLmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShlKSx0LnZhbHVlLmxlbmd0aD09PTQpci52ZXJ0ZXhBdHRyaWI0aXYoZSx0LnZhbHVlKTtlbHNlIHRocm93IG5ldyBFcnJvcigiVGhlIGxlbmd0aCBvZiBhbiBpbnRlZ2VyIGNvbnN0YW50IHZhbHVlIG11c3QgYmUgNCEiKTtlbHNlIHIuYmluZEJ1ZmZlcihfdCx0LmJ1ZmZlciksci5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShlKSxyLnZlcnRleEF0dHJpYklQb2ludGVyKGUsdC5udW1Db21wb25lbnRzfHx0LnNpemUsdC50eXBlfHx4cix0LnN0cmlkZXx8MCx0Lm9mZnNldHx8MCksci52ZXJ0ZXhBdHRyaWJEaXZpc29yJiZyLnZlcnRleEF0dHJpYkRpdmlzb3IoZSx0LmRpdmlzb3J8fDApfX1mdW5jdGlvbiBUdChyLGUpe3JldHVybiBmdW5jdGlvbih0KXtpZih0LnZhbHVlKWlmKHIuZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KGUpLHQudmFsdWUubGVuZ3RoPT09NClyLnZlcnRleEF0dHJpYjR1aXYoZSx0LnZhbHVlKTtlbHNlIHRocm93IG5ldyBFcnJvcigiVGhlIGxlbmd0aCBvZiBhbiB1bnNpZ25lZCBpbnRlZ2VyIGNvbnN0YW50IHZhbHVlIG11c3QgYmUgNCEiKTtlbHNlIHIuYmluZEJ1ZmZlcihfdCx0LmJ1ZmZlciksci5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShlKSxyLnZlcnRleEF0dHJpYklQb2ludGVyKGUsdC5udW1Db21wb25lbnRzfHx0LnNpemUsdC50eXBlfHxicix0LnN0cmlkZXx8MCx0Lm9mZnNldHx8MCksci52ZXJ0ZXhBdHRyaWJEaXZpc29yJiZyLnZlcnRleEF0dHJpYkRpdmlzb3IoZSx0LmRpdmlzb3J8fDApfX1mdW5jdGlvbiB2cihyLGUsdCl7Y29uc3Qgbj10LnNpemUsaT10LmNvdW50O3JldHVybiBmdW5jdGlvbihvKXtyLmJpbmRCdWZmZXIoX3Qsby5idWZmZXIpO2NvbnN0IHM9by5zaXplfHxvLm51bUNvbXBvbmVudHN8fG4sYT1zL2ksdT1vLnR5cGV8fHh0LGM9dlt1XS5zaXplKnMsZD1vLm5vcm1hbGl6ZXx8ITEscD1vLm9mZnNldHx8MCx5PWMvaTtmb3IobGV0IG09MDttPGk7KyttKXIuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoZSttKSxyLnZlcnRleEF0dHJpYlBvaW50ZXIoZSttLGEsdSxkLGMscCt5Km0pLHIudmVydGV4QXR0cmliRGl2aXNvciYmci52ZXJ0ZXhBdHRyaWJEaXZpc29yKGUrbSxvLmRpdmlzb3J8fDApfX1jb25zdCBQPXt9O1BbeHRdPXtzaXplOjQsc2V0dGVyOkV0fSxQW1luXT17c2l6ZTo4LHNldHRlcjpFdH0sUFtLbl09e3NpemU6MTIsc2V0dGVyOkV0fSxQW0puXT17c2l6ZToxNixzZXR0ZXI6RXR9LFBbeHJdPXtzaXplOjQsc2V0dGVyOmFlfSxQW1FuXT17c2l6ZTo4LHNldHRlcjphZX0sUFtabl09e3NpemU6MTIsc2V0dGVyOmFlfSxQW2VpXT17c2l6ZToxNixzZXR0ZXI6YWV9LFBbYnJdPXtzaXplOjQsc2V0dGVyOlR0fSxQW3VpXT17c2l6ZTo4LHNldHRlcjpUdH0sUFtjaV09e3NpemU6MTIsc2V0dGVyOlR0fSxQW2ZpXT17c2l6ZToxNixzZXR0ZXI6VHR9LFBbdGldPXtzaXplOjQsc2V0dGVyOmFlfSxQW3JpXT17c2l6ZTo4LHNldHRlcjphZX0sUFtuaV09e3NpemU6MTIsc2V0dGVyOmFlfSxQW2lpXT17c2l6ZToxNixzZXR0ZXI6YWV9LFBbb2ldPXtzaXplOjQsc2V0dGVyOnZyLGNvdW50OjJ9LFBbc2ldPXtzaXplOjksc2V0dGVyOnZyLGNvdW50OjN9LFBbYWldPXtzaXplOjE2LHNldHRlcjp2cixjb3VudDo0fTtjb25zdCBrYz0vRVJST1I6XHMqXGQrOihcZCspL2dpO2Z1bmN0aW9uIExjKHIsZT0iIix0PTApe2NvbnN0IG49Wy4uLmUubWF0Y2hBbGwoa2MpXSxpPW5ldyBNYXAobi5tYXAoKG8scyk9Pntjb25zdCBhPXBhcnNlSW50KG9bMV0pLHU9bltzKzFdLGY9dT91LmluZGV4OmUubGVuZ3RoLGM9ZS5zdWJzdHJpbmcoby5pbmRleCxmKTtyZXR1cm5bYS0xLGNdfSkpO3JldHVybiByLnNwbGl0KGAKYCkubWFwKChvLHMpPT57Y29uc3QgYT1pLmdldChzKTtyZXR1cm5gJHtzKzErdH06ICR7b30ke2E/YAoKXl5eICR7YX1gOiIifWB9KS5qb2luKGAKYCl9Y29uc3QgX2k9L15bIFx0XSpcbi87ZnVuY3Rpb24geGkocil7bGV0IGU9MDtyZXR1cm4gX2kudGVzdChyKSYmKGU9MSxyPXIucmVwbGFjZShfaSwiIikpLHtsaW5lT2Zmc2V0OmUsc2hhZGVyU291cmNlOnJ9fWZ1bmN0aW9uIGJpKHIsZSl7cmV0dXJuIHIuZXJyb3JDYWxsYmFjayhlKSxyLmNhbGxiYWNrJiZzZXRUaW1lb3V0KCgpPT57ci5jYWxsYmFjayhgJHtlfQoke3IuZXJyb3JzLmpvaW4oYApgKX1gKX0pLG51bGx9ZnVuY3Rpb24gZ2kocixlLHQsbil7Y29uc3QgaT1yLmNyZWF0ZVNoYWRlcih0KTtyZXR1cm4gci5zaGFkZXJTb3VyY2UoaSx4aShlKS5zaGFkZXJTb3VyY2UpLHIuY29tcGlsZVNoYWRlcihpKSwhbi5jYWxsYmFjayYmISRjKHIsdCxpLG4uZXJyb3JDYWxsYmFjayk/KHIuZGVsZXRlU2hhZGVyKGkpLG51bGwpOml9ZnVuY3Rpb24gJGMocixlLHQsbil7bj1ufHxwdDtjb25zdCBpPXIuZ2V0U2hhZGVyUGFyYW1ldGVyKHQsJHUpO2lmKCFpKXtjb25zdCBvPXIuZ2V0U2hhZGVySW5mb0xvZyh0KSx7bGluZU9mZnNldDpzLHNoYWRlclNvdXJjZTphfT14aShyLmdldFNoYWRlclNvdXJjZSh0KSk7bihgJHtMYyhhLG8scyl9CkVycm9yIGNvbXBpbGluZyAke1JuKHIsZSl9OiAke299YCl9cmV0dXJuIGl9ZnVuY3Rpb24gRXIocixlLHQpe2xldCBuLGksbztpZih0eXBlb2YgZT09ImZ1bmN0aW9uIiYmKHQ9ZSxlPXZvaWQgMCksdHlwZW9mIHI9PSJmdW5jdGlvbiIpdD1yLHI9dm9pZCAwO2Vsc2UgaWYociYmIUFycmF5LmlzQXJyYXkocikpe2lmKHIuZXJyb3JDYWxsYmFjayYmci5lcnJvcnMpcmV0dXJuIHI7Y29uc3QgZj1yO3Q9Zi5lcnJvckNhbGxiYWNrLHI9Zi5hdHRyaWJMb2NhdGlvbnMsbj1mLnRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZ3MsaT1mLnRyYW5zZm9ybUZlZWRiYWNrTW9kZSxvPWYuY2FsbGJhY2t9Y29uc3Qgcz10fHxwdCxhPVtdLHU9e2Vycm9yQ2FsbGJhY2soZiwuLi5jKXthLnB1c2goZikscyhmLC4uLmMpfSx0cmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdzOm4sdHJhbnNmb3JtRmVlZGJhY2tNb2RlOmksY2FsbGJhY2s6byxlcnJvcnM6YX07aWYocil7bGV0IGY9e307QXJyYXkuaXNBcnJheShyKT9yLmZvckVhY2goZnVuY3Rpb24oYyxkKXtmW2NdPWU/ZVtkXTpkfSk6Zj1yLHUuYXR0cmliTG9jYXRpb25zPWZ9cmV0dXJuIHV9Y29uc3Qgdmk9WyJWRVJURVhfU0hBREVSIiwiRlJBR01FTlRfU0hBREVSIl07ZnVuY3Rpb24gR2MocixlKXtpZihlLmluZGV4T2YoImZyYWciKT49MClyZXR1cm4genU7aWYoZS5pbmRleE9mKCJ2ZXJ0Iik+PTApcmV0dXJuIEh1fWZ1bmN0aW9uIEVpKHIsZSl7ZS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3IuZGVsZXRlU2hhZGVyKHQpfSl9Y29uc3QgemM9KHI9MCk9Pm5ldyBQcm9taXNlKGU9PnNldFRpbWVvdXQoZSxyKSk7ZnVuY3Rpb24gSGMocixlLHQsbixpKXtjb25zdCBvPUVyKHQsbixpKSxzPVtdLGE9W107Zm9yKGxldCBjPTA7YzxlLmxlbmd0aDsrK2Mpe2xldCBkPWVbY107aWYodHlwZW9mIGQ9PSJzdHJpbmciKXtjb25zdCBwPXFuKGQpLHk9cD9wLnRleHQ6ZDtsZXQgbT1yW3ZpW2NdXTtwJiZwLnR5cGUmJihtPUdjKHIscC50eXBlKXx8bSksZD1naShyLHksbSxvKSxhLnB1c2goZCl9THMocixkKSYmcy5wdXNoKGQpfWlmKHMubGVuZ3RoIT09ZS5sZW5ndGgpcmV0dXJuIEVpKHIsYSksYmkobywibm90IGVub3VnaCBzaGFkZXJzIGZvciBwcm9ncmFtIik7Y29uc3QgdT1yLmNyZWF0ZVByb2dyYW0oKTtzLmZvckVhY2goZnVuY3Rpb24oYyl7ci5hdHRhY2hTaGFkZXIodSxjKX0pLG8uYXR0cmliTG9jYXRpb25zJiZPYmplY3Qua2V5cyhvLmF0dHJpYkxvY2F0aW9ucykuZm9yRWFjaChmdW5jdGlvbihjKXtyLmJpbmRBdHRyaWJMb2NhdGlvbih1LG8uYXR0cmliTG9jYXRpb25zW2NdLGMpfSk7bGV0IGY9by50cmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdzO3JldHVybiBmJiYoZi5hdHRyaWJzJiYoZj1mLmF0dHJpYnMpLEFycmF5LmlzQXJyYXkoZil8fChmPU9iamVjdC5rZXlzKGYpKSxyLnRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZ3ModSxmLG8udHJhbnNmb3JtRmVlZGJhY2tNb2RlfHxWdSkpLHIubGlua1Byb2dyYW0odSksby5jYWxsYmFjaz8oVmMocix1LG8pLG51bGwpOlRpKHIsdSxvLmVycm9yQ2FsbGJhY2spP3U6KHIuZGVsZXRlUHJvZ3JhbSh1KSxFaShyLGEpLG51bGwpfWFzeW5jIGZ1bmN0aW9uIFZjKHIsZSx0KXtjb25zdCBuPXIuZ2V0RXh0ZW5zaW9uKCJLSFJfcGFyYWxsZWxfc2hhZGVyX2NvbXBpbGUiKSxpPW4/KHUsZik9PnUuZ2V0UHJvZ3JhbVBhcmFtZXRlcihmLG4uQ09NUExFVElPTl9TVEFUVVNfS0hSKTooKT0+ITA7bGV0IG89MDtkbyBhd2FpdCB6YyhvKSxvPTFlMy82MDt3aGlsZSghaShyLGUpKTtjb25zdCBzPVRpKHIsZSx0LmVycm9yQ2FsbGJhY2spLGE9cz92b2lkIDA6dC5lcnJvcnMuam9pbihgCmApO3N8fCgodC5lcnJvckNhbGxiYWNrfHxwdCkoYSksci5kZWxldGVQcm9ncmFtKGUpLGU9bnVsbCksdC5jYWxsYmFjayhhLGUpfWZ1bmN0aW9uIFRpKHIsZSx0KXt0PXR8fHB0O2NvbnN0IG49ci5nZXRQcm9ncmFtUGFyYW1ldGVyKGUsR3UpO2lmKCFuKXtjb25zdCBpPXIuZ2V0UHJvZ3JhbUluZm9Mb2coZSk7dChgRXJyb3IgaW4gcHJvZ3JhbSBsaW5raW5nOiAke2l9YCl9cmV0dXJuIG59ZnVuY3Rpb24gV2MocixlLHQsbixpKXtjb25zdCBvPUVyKHQsbixpKSxzPVtdO2ZvcihsZXQgYT0wO2E8ZS5sZW5ndGg7KythKXtjb25zdCB1PWdpKHIsZVthXSxyW3ZpW2FdXSxvKTtpZighby5jYWxsYmFjayYmIXUpcmV0dXJuIG51bGw7cy5wdXNoKHUpfXJldHVybiBIYyhyLHMsbyl9ZnVuY3Rpb24gQWkocil7Y29uc3QgZT1yLm5hbWU7cmV0dXJuIGUuc3RhcnRzV2l0aCgiZ2xfIil8fGUuc3RhcnRzV2l0aCgid2ViZ2xfIil9Y29uc3QgamM9LyhcLnxcW3xdfFx3KykvZyxxYz1yPT5yPj0iMCImJnI8PSI5IjtmdW5jdGlvbiBYYyhyLGUsdCxuKXtjb25zdCBpPXIuc3BsaXQoamMpLmZpbHRlcihhPT5hIT09IiIpO2xldCBvPTAscz0iIjtmb3IoOzspe2NvbnN0IGE9aVtvKytdO3MrPWE7Y29uc3QgdT1xYyhhWzBdKSxmPXU/cGFyc2VJbnQoYSk6YTtpZih1JiYocys9aVtvKytdKSxvPT09aS5sZW5ndGgpe3RbZl09ZTticmVha31lbHNle2NvbnN0IGQ9aVtvKytdLHA9ZD09PSJbIix5PXRbZl18fChwP1tdOnt9KTt0W2ZdPXksdD15LG5bc109bltzXXx8ZnVuY3Rpb24obSl7cmV0dXJuIGZ1bmN0aW9uKF8pe3dpKG0sXyl9fSh5KSxzKz1kfX19ZnVuY3Rpb24gWWMocixlKXtsZXQgdD0wO2Z1bmN0aW9uIG4oYSx1LGYpe2NvbnN0IGM9dS5uYW1lLmVuZHNXaXRoKCJbMF0iKSxkPXUudHlwZSxwPXZbZF07aWYoIXApdGhyb3cgbmV3IEVycm9yKGB1bmtub3duIHR5cGU6IDB4JHtkLnRvU3RyaW5nKDE2KX1gKTtsZXQgeTtpZihwLmJpbmRQb2ludCl7Y29uc3QgbT10O3QrPXUuc2l6ZSxjP3k9cC5hcnJheVNldHRlcihyLGQsbSxmLHUuc2l6ZSk6eT1wLnNldHRlcihyLGQsbSxmLHUuc2l6ZSl9ZWxzZSBwLmFycmF5U2V0dGVyJiZjP3k9cC5hcnJheVNldHRlcihyLGYpOnk9cC5zZXR0ZXIocixmKTtyZXR1cm4geS5sb2NhdGlvbj1mLHl9Y29uc3QgaT17fSxvPXt9LHM9ci5nZXRQcm9ncmFtUGFyYW1ldGVyKGUsWG4pO2ZvcihsZXQgYT0wO2E8czsrK2Epe2NvbnN0IHU9ci5nZXRBY3RpdmVVbmlmb3JtKGUsYSk7aWYoQWkodSkpY29udGludWU7bGV0IGY9dS5uYW1lO2YuZW5kc1dpdGgoIlswXSIpJiYoZj1mLnN1YnN0cigwLGYubGVuZ3RoLTMpKTtjb25zdCBjPXIuZ2V0VW5pZm9ybUxvY2F0aW9uKGUsdS5uYW1lKTtpZihjKXtjb25zdCBkPW4oZSx1LGMpO2lbZl09ZCxYYyhmLGQsbyxpKX19cmV0dXJuIGl9ZnVuY3Rpb24gS2MocixlKXtjb25zdCB0PXt9LG49ci5nZXRQcm9ncmFtUGFyYW1ldGVyKGUsanUpO2ZvcihsZXQgaT0wO2k8bjsrK2kpe2NvbnN0IG89ci5nZXRUcmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmcoZSxpKTt0W28ubmFtZV09e2luZGV4OmksdHlwZTpvLnR5cGUsc2l6ZTpvLnNpemV9fXJldHVybiB0fWZ1bmN0aW9uIEpjKHIsZSl7Y29uc3QgdD1yLmdldFByb2dyYW1QYXJhbWV0ZXIoZSxYbiksbj1bXSxpPVtdO2ZvcihsZXQgYT0wO2E8dDsrK2Epe2kucHVzaChhKSxuLnB1c2goe30pO2NvbnN0IHU9ci5nZXRBY3RpdmVVbmlmb3JtKGUsYSk7blthXS5uYW1lPXUubmFtZX1bWyJVTklGT1JNX1RZUEUiLCJ0eXBlIl0sWyJVTklGT1JNX1NJWkUiLCJzaXplIl0sWyJVTklGT1JNX0JMT0NLX0lOREVYIiwiYmxvY2tOZHgiXSxbIlVOSUZPUk1fT0ZGU0VUIiwib2Zmc2V0Il1dLmZvckVhY2goZnVuY3Rpb24oYSl7Y29uc3QgdT1hWzBdLGY9YVsxXTtyLmdldEFjdGl2ZVVuaWZvcm1zKGUsaSxyW3VdKS5mb3JFYWNoKGZ1bmN0aW9uKGMsZCl7bltkXVtmXT1jfSl9KTtjb25zdCBvPXt9LHM9ci5nZXRQcm9ncmFtUGFyYW1ldGVyKGUscXUpO2ZvcihsZXQgYT0wO2E8czsrK2Epe2NvbnN0IHU9ci5nZXRBY3RpdmVVbmlmb3JtQmxvY2tOYW1lKGUsYSksZj17aW5kZXg6ci5nZXRVbmlmb3JtQmxvY2tJbmRleChlLHUpLHVzZWRCeVZlcnRleFNoYWRlcjpyLmdldEFjdGl2ZVVuaWZvcm1CbG9ja1BhcmFtZXRlcihlLGEsWHUpLHVzZWRCeUZyYWdtZW50U2hhZGVyOnIuZ2V0QWN0aXZlVW5pZm9ybUJsb2NrUGFyYW1ldGVyKGUsYSxZdSksc2l6ZTpyLmdldEFjdGl2ZVVuaWZvcm1CbG9ja1BhcmFtZXRlcihlLGEsS3UpLHVuaWZvcm1JbmRpY2VzOnIuZ2V0QWN0aXZlVW5pZm9ybUJsb2NrUGFyYW1ldGVyKGUsYSxKdSl9O2YudXNlZD1mLnVzZWRCeVZlcnRleFNoYWRlcnx8Zi51c2VkQnlGcmFnbWVudFNoYWRlcixvW3VdPWZ9cmV0dXJue2Jsb2NrU3BlY3M6byx1bmlmb3JtRGF0YTpufX1mdW5jdGlvbiB3aShyLGUpe2Zvcihjb25zdCB0IGluIGUpe2NvbnN0IG49clt0XTt0eXBlb2Ygbj09ImZ1bmN0aW9uIj9uKGVbdF0pOndpKHJbdF0sZVt0XSl9fWZ1bmN0aW9uIFJpKHIsLi4uZSl7Y29uc3QgdD1yLnVuaWZvcm1TZXR0ZXJzfHxyLG49ZS5sZW5ndGg7Zm9yKGxldCBpPTA7aTxuOysraSl7Y29uc3Qgbz1lW2ldO2lmKEFycmF5LmlzQXJyYXkobykpe2NvbnN0IHM9by5sZW5ndGg7Zm9yKGxldCBhPTA7YTxzOysrYSlSaSh0LG9bYV0pfWVsc2UgZm9yKGNvbnN0IHMgaW4gbyl7Y29uc3QgYT10W3NdO2EmJmEob1tzXSl9fX1mdW5jdGlvbiBRYyhyLGUpe2NvbnN0IHQ9e30sbj1yLmdldFByb2dyYW1QYXJhbWV0ZXIoZSxXdSk7Zm9yKGxldCBpPTA7aTxuOysraSl7Y29uc3Qgbz1yLmdldEFjdGl2ZUF0dHJpYihlLGkpO2lmKEFpKG8pKWNvbnRpbnVlO2NvbnN0IHM9ci5nZXRBdHRyaWJMb2NhdGlvbihlLG8ubmFtZSksYT1QW28udHlwZV0sdT1hLnNldHRlcihyLHMsYSk7dS5sb2NhdGlvbj1zLHRbby5uYW1lXT11fXJldHVybiB0fWZ1bmN0aW9uIFpjKHIsZSl7Zm9yKGNvbnN0IHQgaW4gZSl7Y29uc3Qgbj1yW3RdO24mJm4oZVt0XSl9fWZ1bmN0aW9uIGVmKHIsZSx0KXt0LnZlcnRleEFycmF5T2JqZWN0P3IuYmluZFZlcnRleEFycmF5KHQudmVydGV4QXJyYXlPYmplY3QpOihaYyhlLmF0dHJpYlNldHRlcnN8fGUsdC5hdHRyaWJzKSx0LmluZGljZXMmJnIuYmluZEJ1ZmZlcihMdSx0LmluZGljZXMpKX1mdW5jdGlvbiBTaShyLGUpe2NvbnN0IHQ9WWMocixlKSxuPVFjKHIsZSksaT17cHJvZ3JhbTplLHVuaWZvcm1TZXR0ZXJzOnQsYXR0cmliU2V0dGVyczpufTtyZXR1cm4gT2UocikmJihpLnVuaWZvcm1CbG9ja1NwZWM9SmMocixlKSxpLnRyYW5zZm9ybUZlZWRiYWNrSW5mbz1LYyhyLGUpKSxpfWNvbnN0IHRmPS9cc3x7fH18Oy87ZnVuY3Rpb24gcmYocixlLHQsbixpKXtjb25zdCBvPUVyKHQsbixpKSxzPVtdO2lmKGU9ZS5tYXAoZnVuY3Rpb24oZil7aWYoIXRmLnRlc3QoZikpe2NvbnN0IGM9cW4oZik7aWYoYylmPWMudGV4dDtlbHNle2NvbnN0IGQ9YG5vIGVsZW1lbnQgd2l0aCBpZDogJHtmfWA7by5lcnJvckNhbGxiYWNrKGQpLHMucHVzaChkKX19cmV0dXJuIGZ9KSxzLmxlbmd0aClyZXR1cm4gYmkobywiIik7Y29uc3QgYT1vLmNhbGxiYWNrO2EmJihvLmNhbGxiYWNrPShmLGMpPT57bGV0IGQ7Znx8KGQ9U2kocixjKSksYShmLGQpfSk7Y29uc3QgdT1XYyhyLGUsbyk7cmV0dXJuIHU/U2kocix1KTpudWxsfWNvbnN0IG5mPTQsSWk9NTEyMztmdW5jdGlvbiBvZihyLGUsdCxuLGksbyl7dD10PT09dm9pZCAwP25mOnQ7Y29uc3Qgcz1lLmluZGljZXMsYT1lLmVsZW1lbnRUeXBlLHU9bj09PXZvaWQgMD9lLm51bUVsZW1lbnRzOm47aT1pPT09dm9pZCAwPzA6aSxhfHxzP28hPT12b2lkIDA/ci5kcmF3RWxlbWVudHNJbnN0YW5jZWQodCx1LGE9PT12b2lkIDA/SWk6ZS5lbGVtZW50VHlwZSxpLG8pOnIuZHJhd0VsZW1lbnRzKHQsdSxhPT09dm9pZCAwP0lpOmUuZWxlbWVudFR5cGUsaSk6byE9PXZvaWQgMD9yLmRyYXdBcnJheXNJbnN0YW5jZWQodCxpLHUsbyk6ci5kcmF3QXJyYXlzKHQsaSx1KX1jb25zdCBGaT0zNjE2MCxBdD0zNjE2MSxzZj0zNTUzLGFmPTUxMjEsdWY9NjQwMixjZj02NDA4LGZmPTMzMTkwLGxmPTM2MDEyLGRmPTM1MDU2LG1mPTM2MDEzLGhmPTMyODU0LHBmPTMyODU1LHlmPTM2MTk0LFBpPTMzMTg5LERpPTY0MDEsQ2k9MzYxNjgsVHI9MzQwNDEsQXI9MzYwNjQsd3Q9MzYwOTYsT2k9MzYxMjgsd3I9MzMzMDYsUnI9MzMwNzEsU3I9OTcyOSxfZj1be2Zvcm1hdDpjZix0eXBlOmFmLG1pbjpTcix3cmFwOlJyfSx7Zm9ybWF0OlRyfV0saj17fTtqW1RyXT13cixqW0RpXT1PaSxqW0NpXT1PaSxqW3VmXT13dCxqW1BpXT13dCxqW2ZmXT13dCxqW2xmXT13dCxqW2RmXT13cixqW21mXT13cjtmdW5jdGlvbiB4ZihyLGUpe3JldHVybiBqW3JdfHxqW2VdfWNvbnN0IHVlPXt9O3VlW2hmXT0hMCx1ZVtwZl09ITAsdWVbeWZdPSEwLHVlW1RyXT0hMCx1ZVtQaV09ITAsdWVbRGldPSEwLHVlW0NpXT0hMDtmdW5jdGlvbiBiZihyKXtyZXR1cm4gdWVbcl19Y29uc3QgZ2Y9MzI7ZnVuY3Rpb24gdmYocil7cmV0dXJuIHI+PUFyJiZyPEFyK2dmfWZ1bmN0aW9uIFJ0KHIsZSx0LG4pe2NvbnN0IGk9Rmksbz1yLmNyZWF0ZUZyYW1lYnVmZmVyKCk7ci5iaW5kRnJhbWVidWZmZXIoaSxvKSx0PXR8fHIuZHJhd2luZ0J1ZmZlcldpZHRoLG49bnx8ci5kcmF3aW5nQnVmZmVySGVpZ2h0LGU9ZXx8X2Y7Y29uc3Qgcz1bXSxhPXtmcmFtZWJ1ZmZlcjpvLGF0dGFjaG1lbnRzOltdLHdpZHRoOnQsaGVpZ2h0Om59O3JldHVybiBlLmZvckVhY2goZnVuY3Rpb24odSxmKXtsZXQgYz11LmF0dGFjaG1lbnQ7Y29uc3QgZD11LnNhbXBsZXMscD11LmZvcm1hdDtsZXQgeT11LmF0dGFjaG1lbnRQb2ludHx8eGYocCx1LmludGVybmFsRm9ybWF0KTtpZih5fHwoeT1BcitmKSx2Zih5KSYmcy5wdXNoKHkpLCFjKWlmKGQhPT12b2lkIDB8fGJmKHApKWM9ci5jcmVhdGVSZW5kZXJidWZmZXIoKSxyLmJpbmRSZW5kZXJidWZmZXIoQXQsYyksZD4xP3IucmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlKEF0LGQscCx0LG4pOnIucmVuZGVyYnVmZmVyU3RvcmFnZShBdCxwLHQsbik7ZWxzZXtjb25zdCBtPU9iamVjdC5hc3NpZ24oe30sdSk7bS53aWR0aD10LG0uaGVpZ2h0PW4sbS5hdXRvPT09dm9pZCAwJiYobS5hdXRvPSExLG0ubWluPW0ubWlufHxtLm1pbk1hZ3x8U3IsbS5tYWc9bS5tYWd8fG0ubWluTWFnfHxTcixtLndyYXBTPW0ud3JhcFN8fG0ud3JhcHx8UnIsbS53cmFwVD1tLndyYXBUfHxtLndyYXB8fFJyKSxjPWpuKHIsbSl9aWYoa3MocixjKSlyLmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKGkseSxBdCxjKTtlbHNlIGlmKG9yKHIsYykpdS5sYXllciE9PXZvaWQgMD9yLmZyYW1lYnVmZmVyVGV4dHVyZUxheWVyKGkseSxjLHUubGV2ZWx8fDAsdS5sYXllcik6ci5mcmFtZWJ1ZmZlclRleHR1cmUyRChpLHksdS50YXJnZXR8fHNmLGMsdS5sZXZlbHx8MCk7ZWxzZSB0aHJvdyBuZXcgRXJyb3IoInVua25vd24gYXR0YWNobWVudCB0eXBlIik7YS5hdHRhY2htZW50cy5wdXNoKGMpfSksci5kcmF3QnVmZmVycyYmci5kcmF3QnVmZmVycyhzKSxhfWZ1bmN0aW9uIEVmKHIsZSx0KXt0PXR8fEZpLGU/KHIuYmluZEZyYW1lYnVmZmVyKHQsZS5mcmFtZWJ1ZmZlciksci52aWV3cG9ydCgwLDAsZS53aWR0aCxlLmhlaWdodCkpOihyLmJpbmRGcmFtZWJ1ZmZlcih0LG51bGwpLHIudmlld3BvcnQoMCwwLHIuZHJhd2luZ0J1ZmZlcldpZHRoLHIuZHJhd2luZ0J1ZmZlckhlaWdodCkpfWZ1bmN0aW9uIFIocixlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIFdlYkdMVGV4dHVyZT9lOmpuKHIse3NyYzplLHdyYXA6ci5DTEFNUF9UT19FREdFfSl9Y2xhc3MgeWV7Y29uc3RydWN0b3IoZSl7Y29uc3R7Y29udGV4dDp0LHdpZHRoOm4saGVpZ2h0Oml9PWU7dGhpcy5jb250ZXh0PXQsdGhpcy5vcHRpb25zPWU7Y29uc3Qgbz10aGlzLmJ1aWxkRGVmaW5lcygpO3RoaXMucHJvZ3JhbUluZm89cmYodGhpcy5jb250ZXh0LFtvK3RoaXMuZ2V0VmVydGV4U2hhZGVyKCksbyt0aGlzLmdldEZyYWdtZW50U2hhZGVyKCldKSx0aGlzLmJ1ZmZlckluZm89c2EodGhpcy5jb250ZXh0LHRoaXMuZ2V0QnVmZmVycygpKSx0aGlzLmZiaT1SdCh0aGlzLmNvbnRleHQsW3tmb3JtYXQ6dGhpcy5jb250ZXh0LlJHQkEsdHlwZTp0aGlzLmNvbnRleHQuVU5TSUdORURfQllURSxtaW46dGhpcy5jb250ZXh0LkxJTkVBUix3cmFwOnRoaXMuY29udGV4dC5DTEFNUF9UT19FREdFfV0sbixpKSx0aGlzLm91dHB1dD10aGlzLmZiaS5hdHRhY2htZW50c1swXX1yZXNpemVPdXRwdXQoZSx0KXt0aGlzLmZiaT1SdCh0aGlzLmNvbnRleHQsW3tmb3JtYXQ6dGhpcy5jb250ZXh0LlJHQkEsdHlwZTp0aGlzLmNvbnRleHQuVU5TSUdORURfQllURSxtaW46dGhpcy5jb250ZXh0LkxJTkVBUix3cmFwOnRoaXMuY29udGV4dC5DTEFNUF9UT19FREdFfV0sZSx0KSx0aGlzLm9wdGlvbnMud2lkdGg9ZSx0aGlzLm9wdGlvbnMuaGVpZ2h0PXQsdGhpcy5vdXRwdXQ9dGhpcy5mYmkuYXR0YWNobWVudHNbMF19Z2V0RGVmaW5lcygpe3JldHVybnt9fWdldEJ1ZmZlcnMoKXtyZXR1cm57cG9zaXRpb246e251bUNvbXBvbmVudHM6MixkYXRhOlstMSwtMSwtMSwxLDEsLTEsMSwxLC0xLDEsMSwtMV19LHRleHR1cmVfY29vcmQ6e251bUNvbXBvbmVudHM6MixkYXRhOlswLDAsMCwxLDEsMCwxLDEsMCwxLDEsMF19fX1idWlsZERlZmluZXMoKXtsZXQgZT0iIjtjb25zdCB0PXRoaXMuZ2V0RGVmaW5lcygpO2ZvcihsZXQgbiBpbiB0KWUrPWAjZGVmaW5lICR7bn0gJHt0W25dLnRvRml4ZWQoMSl9CmA7cmV0dXJuIGV9cnVuKGUpe2NvbnN0IHQ9RGF0ZS5ub3coKTtsZXQgbj0wO3RoaXMubGFzdFJ1biYmKG49KHQtdGhpcy5sYXN0UnVuKS8xZTMpLHRoaXMubGFzdFJ1bj10LHRoaXMuY29udGV4dC52aWV3cG9ydCgwLDAsdGhpcy5jb250ZXh0LmNhbnZhcy53aWR0aCx0aGlzLmNvbnRleHQuY2FudmFzLmhlaWdodCksdGhpcy5jb250ZXh0LnVzZVByb2dyYW0odGhpcy5wcm9ncmFtSW5mby5wcm9ncmFtKSxlZih0aGlzLmNvbnRleHQsdGhpcy5wcm9ncmFtSW5mbyx0aGlzLmJ1ZmZlckluZm8pLFJpKHRoaXMucHJvZ3JhbUluZm8se2RlbHRhOm4sY2FudmFzOlt0aGlzLmNvbnRleHQuY2FudmFzLndpZHRoLHRoaXMuY29udGV4dC5jYW52YXMuaGVpZ2h0XSwuLi5lfSksRWYodGhpcy5jb250ZXh0LHRoaXMub3B0aW9ucy5kaXNhYmxlRnJhbWVidWZmZXI/bnVsbDp0aGlzLmZiaSksb2YodGhpcy5jb250ZXh0LHRoaXMuYnVmZmVySW5mbyl9fXZhciBUZj1gcHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7Cgp2YXJ5aW5nIHZlYzIgX3RleHR1cmVfY29vcmQ7Cgp1bmlmb3JtIHZlYzIgY2FudmFzOwp1bmlmb3JtIHNhbXBsZXIyRCB0ZXh0dXJlOwp1bmlmb3JtIHNhbXBsZXIyRCBtYXNrOwoKdmVjNCBsb29wKCk7Cgp2b2lkIG1haW4oKSB7IGdsX0ZyYWdDb2xvciA9IGxvb3AoKTsgfQpgLEFmPWB2YXJ5aW5nIHZlYzIgX3RleHR1cmVfY29vcmQ7CgphdHRyaWJ1dGUgdmVjMiBwb3NpdGlvbjsKYXR0cmlidXRlIHZlYzIgdGV4dHVyZV9jb29yZDsKCnZvaWQgbWFpbigpIHsKICBnbF9Qb3NpdGlvbiA9IHZlYzQocG9zaXRpb24sIDAuLCAxLik7CiAgX3RleHR1cmVfY29vcmQgPSB0ZXh0dXJlX2Nvb3JkOwp9CmA7Y2xhc3Mgd2YgZXh0ZW5kcyB5ZXtnZXREZWZpbmVzKCl7dmFyIGU7cmV0dXJue1JBRElVUzooZT10aGlzLm9wdGlvbnMucmFkaXVzKSE9bnVsbD9lOjF9fWdldEZyYWdtZW50U2hhZGVyKCl7cmV0dXJuIFRmK3RoaXMuY3JlYXRlTG9vcEZ1bmN0aW9uKCl9Z2V0VmVydGV4U2hhZGVyKCl7cmV0dXJuIEFmfWNyZWF0ZUxvb3BGdW5jdGlvbigpe3ZhciB0O2xldCBlPSh0PXRoaXMub3B0aW9ucy5yYWRpdXMpIT1udWxsP3Q6MTtyZXR1cm5gCgogICAgICAgIHZlYzQgbG9vcCgpIHsgCiAgICAgICAgICAgIHZlYzQgcmVzdWx0ID0gdmVjNCgwLDAsMCwwKTsKICAgICAgICAgICAgZmxvYXQgZmFjdG9yU3VtID0gMC47CgogICAgICAgICAgICB2ZWMyIG5vcm1hbGl6ZWRSYWRpdXMgPSB2ZWMyKC0ke2V9LikgLyBjYW52YXM7CiAgICAgICAgICAgIHZlYzIgbm9ybWFsaXplZEluY3JlbWVudCA9IHZlYzIoMS4pIC8gY2FudmFzOwogICAgICAgICAgICB2ZWMyIGRpZmYgPSBub3JtYWxpemVkUmFkaXVzOwogICAgICAgICAgICBmbG9hdCBtYXhMZW5ndGggPSBsZW5ndGgobm9ybWFsaXplZFJhZGl1cyk7CgogICAgICAgICAgICBmb3IoaW50IHk9LSR7ZX07IHk8JHtlKzF9OyArK3kpIHsKICAgICAgICAgICAgICAgIGZvcihpbnQgeD0tJHtlfTsgeDwke2UrMX07ICsreCkgewogICAgICAgICAgICAgICAgICAgIGZsb2F0IGZhY3RvciA9ICgxLi0gdGV4dHVyZTJEKG1hc2ssIF90ZXh0dXJlX2Nvb3JkICsgZGlmZikuYSkgKiAobWF4TGVuZ3RoIC0gbGVuZ3RoKGRpZmYpKSAvIG1heExlbmd0aDsKICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gZmFjdG9yICogdGV4dHVyZTJEKHRleHR1cmUsIF90ZXh0dXJlX2Nvb3JkICsgZGlmZik7CiAgICAgICAgICAgICAgICAgICAgZmFjdG9yU3VtICs9IGZhY3RvcjsKICAgICAgICAgICAgICAgICAgICBkaWZmLnggKz0gbm9ybWFsaXplZEluY3JlbWVudC54OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZGlmZi55ICs9IG5vcm1hbGl6ZWRJbmNyZW1lbnQueTsKICAgICAgICAgICAgICAgIGRpZmYueCA9IG5vcm1hbGl6ZWRSYWRpdXMueDsKICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm4gcmVzdWx0IC8gZmFjdG9yU3VtOwogICAgICAgIH1gfX12YXIgUmY9YHByZWNpc2lvbiBtZWRpdW1wIGZsb2F0OwoKdmFyeWluZyB2ZWMyIF90ZXh0dXJlX2Nvb3JkOwoKdW5pZm9ybSBzYW1wbGVyMkQgYmFja2dyb3VuZDsKdW5pZm9ybSBzYW1wbGVyMkQgZm9yZWdyb3VuZDsKdW5pZm9ybSBzYW1wbGVyMkQgdGhyZXNob2xkOwoKdm9pZCBtYWluKCkgewogIHZlYzQgYmFja2dyb3VuZENvbG9yID0gdGV4dHVyZTJEKGJhY2tncm91bmQsIF90ZXh0dXJlX2Nvb3JkKTsKICB2ZWM0IGZvcmVncm91bmRDb2xvciA9IHRleHR1cmUyRChmb3JlZ3JvdW5kLCBfdGV4dHVyZV9jb29yZCk7CiAgdmVjNCB0cmVzaG9sZENvbG9yID0gdGV4dHVyZTJEKHRocmVzaG9sZCwgX3RleHR1cmVfY29vcmQpOwogIGdsX0ZyYWdDb2xvciA9IGZvcmVncm91bmRDb2xvciAqIHRyZXNob2xkQ29sb3IuYSArCiAgICAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yICogKDEuIC0gdHJlc2hvbGRDb2xvci5hKTsKfQpgLFNmPWB2YXJ5aW5nIHZlYzIgX3RleHR1cmVfY29vcmQ7CgphdHRyaWJ1dGUgdmVjMiBwb3NpdGlvbjsKYXR0cmlidXRlIHZlYzIgdGV4dHVyZV9jb29yZDsKCnZvaWQgbWFpbigpIHsKICBnbF9Qb3NpdGlvbiA9IHZlYzQocG9zaXRpb24sIDAuLCAxLik7CiAgX3RleHR1cmVfY29vcmQgPSB0ZXh0dXJlX2Nvb3JkOwogIF90ZXh0dXJlX2Nvb3JkLnkgPSAxLiAtIHRleHR1cmVfY29vcmQueTsKfQpgO2NsYXNzIElyIGV4dGVuZHMgeWV7Z2V0RnJhZ21lbnRTaGFkZXIoKXtyZXR1cm4gUmZ9Z2V0VmVydGV4U2hhZGVyKCl7cmV0dXJuIFNmfX1jbGFzcyBGcntjb25zdHJ1Y3Rvcigpe3RoaXMuc3RlcHM9W119YWRkU3RlcChlKXt0aGlzLnN0ZXBzLnB1c2goZSl9YXN5bmMgcnVuKCl7Zm9yKGNvbnN0IGUgb2YgdGhpcy5zdGVwcyllLnByb2dyYW0ucnVuKGUuZ2V0VW5pZm9ybXMoKSl9cmVzaXplT3V0cHV0KGUsdCl7Zm9yKGNvbnN0IG4gb2YgdGhpcy5zdGVwcyluLnByb2dyYW0ucmVzaXplT3V0cHV0KGUsdCl9fWNsYXNzIFByIGV4dGVuZHMgRnJ7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMucHJlY2lzZU1hc2tFbmFibGVkPSExfX1jbGFzcyBJZiBleHRlbmRzIFBye2NvbnN0cnVjdG9yKGUsdCl7c3VwZXIoKSx0aGlzLmNvbnRleHQ9ZTtjb25zdCBuPXtjb250ZXh0OmUsaGVpZ2h0OmUuY2FudmFzLmhlaWdodCx3aWR0aDplLmNhbnZhcy53aWR0aH0saT1uZXcgd2Yoey4uLm4scmFkaXVzOnR9KSxvPW5ldyBJcih7Li4ubixkaXNhYmxlRnJhbWVidWZmZXI6ITB9KTt0aGlzLmFkZFN0ZXAoe3Byb2dyYW06aSxnZXRVbmlmb3JtczooKT0+KHt0ZXh0dXJlOlIoZSx0aGlzLmlucHV0SW1hZ2UpLG1hc2s6UihlLHRoaXMuaW5wdXRNYXNrKX0pfSksdGhpcy5hZGRTdGVwKHtwcm9ncmFtOm8sZ2V0VW5pZm9ybXM6KCk9Pih7YmFja2dyb3VuZDpSKGUsaS5vdXRwdXQpLGZvcmVncm91bmQ6UihlLHRoaXMuaW5wdXRJbWFnZSksdGhyZXNob2xkOlIoZSx0aGlzLmlucHV0TWFzayl9KX0pfXNldERhdGEoZSx0KXt0aGlzLmlucHV0SW1hZ2U9ZSx0aGlzLmlucHV0TWFzaz10fX1jbGFzcyBNaSBleHRlbmRzIFBye2NvbnN0cnVjdG9yKGUpe3N1cGVyKCksdGhpcy5jb250ZXh0PWUsdGhpcy5wcmVjaXNlTWFza0VuYWJsZWQ9ITA7Y29uc3QgdD17Y29udGV4dDplLGhlaWdodDplLmNhbnZhcy5oZWlnaHQsd2lkdGg6ZS5jYW52YXMud2lkdGh9LG49bmV3IElyKHsuLi50LGRpc2FibGVGcmFtZWJ1ZmZlcjohMH0pO3RoaXMuYWRkU3RlcCh7cHJvZ3JhbTpuLGdldFVuaWZvcm1zOigpPT4oe2JhY2tncm91bmQ6UihlLHRoaXMuaW5wdXRCYWNrZ3JvdW5kSW1hZ2UpLGZvcmVncm91bmQ6UihlLHRoaXMuaW5wdXRJbWFnZSksdGhyZXNob2xkOlIoZSx0aGlzLmlucHV0TWFzayl9KX0pfXNldERhdGEoZSx0KXt0aGlzLmlucHV0SW1hZ2U9ZSx0aGlzLmlucHV0TWFzaz10fX1jbGFzcyBGZiBleHRlbmRzIE1pe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLnByZWNpc2VNYXNrRW5hYmxlZD0hMH1zZXQgaW5wdXRWaWRlbyhlKXt0aGlzLmZyYW1lUmVhZGVyPWUuZ2V0UmVhZGVyKCksdGhpcy5yZWFkTmV4dFZpZGVvRnJhbWUoKX1hc3luYyBydW4oKXt0aGlzLmZyYW1lUmVhZGVyJiYoYXdhaXQgc3VwZXIucnVuKCksdGhpcy5yZWFkTmV4dFZpZGVvRnJhbWUoKSl9YXN5bmMgcmVhZE5leHRWaWRlb0ZyYW1lKCl7dmFyIHQ7Y29uc3QgZT1hd2FpdCgodD10aGlzLmZyYW1lUmVhZGVyKT09bnVsbD92b2lkIDA6dC5yZWFkKCkpO2UhPW51bGwmJmUudmFsdWUmJih0aGlzLmlucHV0QmFja2dyb3VuZEltYWdlPWF3YWl0IGNyZWF0ZUltYWdlQml0bWFwKGUudmFsdWUpLGUudmFsdWUuY2xvc2UoKSl9fXZhciBQZj1gcHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7Cgp2YXJ5aW5nIHZlYzIgX3RleHR1cmVfY29vcmQ7Cgp1bmlmb3JtIHZlYzIgY2FudmFzOwp1bmlmb3JtIHNhbXBsZXIyRCB0ZXh0dXJlOwoKdmVjNCBsb29wKCk7Cgp2b2lkIG1haW4oKSB7IGdsX0ZyYWdDb2xvciA9IGxvb3AoKTsgfQpgLERmPWB2YXJ5aW5nIHZlYzIgX3RleHR1cmVfY29vcmQ7CgphdHRyaWJ1dGUgdmVjMiBwb3NpdGlvbjsKYXR0cmlidXRlIHZlYzIgdGV4dHVyZV9jb29yZDsKCnZvaWQgbWFpbigpIHsKICBnbF9Qb3NpdGlvbiA9IHZlYzQocG9zaXRpb24sIDAuLCAxLik7CiAgX3RleHR1cmVfY29vcmQgPSB0ZXh0dXJlX2Nvb3JkOwp9CmAsRHI9KHI9PihyW3IuTElORUFSPTBdPSJMSU5FQVIiLHJbci5HQVVTU0lBTj0xXT0iR0FVU1NJQU4iLHIpKShEcnx8e30pO2NsYXNzIE5pIGV4dGVuZHMgeWV7Z2V0RGVmaW5lcygpe3ZhciBlO3JldHVybntSQURJVVM6KGU9dGhpcy5vcHRpb25zLnJhZGl1cykhPW51bGw/ZToxfX1nZXRGcmFnbWVudFNoYWRlcigpe3JldHVybiBQZit0aGlzLmNyZWF0ZUxvb3BGdW5jdGlvbigpfWdldFZlcnRleFNoYWRlcigpe3JldHVybiBEZn1jcmVhdGVMb29wRnVuY3Rpb24oKXt2YXIgdDtsZXQgZT0odD10aGlzLm9wdGlvbnMucmFkaXVzKSE9bnVsbD90OjE7cmV0dXJuYAoKICAgICAgICB2ZWM0IGxvb3AoKSB7IAogICAgICAgICAgICB2ZWM0IHJlc3VsdCA9IHZlYzQoMCwwLDAsMCk7CiAgICAgICAgICAgIGZsb2F0IGZhY3RvclN1bSA9IDAuOwoKICAgICAgICAgICAgdmVjMiBub3JtYWxpemVkUmFkaXVzID0gdmVjMigtJHtlfS4pIC8gY2FudmFzOwogICAgICAgICAgICB2ZWMyIG5vcm1hbGl6ZWRJbmNyZW1lbnQgPSB2ZWMyKDEuKSAvIGNhbnZhczsKICAgICAgICAgICAgdmVjMiBkaWZmID0gbm9ybWFsaXplZFJhZGl1czsKCiAgICAgICAgICAgIGZvcihpbnQgeT0tJHtlfTsgeTwke2UrMX07ICsreSkgewogICAgICAgICAgICAgICAgZm9yKGludCB4PS0ke2V9OyB4PCR7ZSsxfTsgKyt4KSB7CiAgICAgICAgICAgICAgICAgICAgZmxvYXQgZmFjdG9yID0gMS47CiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IGZhY3RvciAqIHRleHR1cmUyRCh0ZXh0dXJlLCBfdGV4dHVyZV9jb29yZCArIGRpZmYpOwogICAgICAgICAgICAgICAgICAgIGZhY3RvclN1bSArPSBmYWN0b3I7CiAgICAgICAgICAgICAgICAgICAgZGlmZi54ICs9IG5vcm1hbGl6ZWRJbmNyZW1lbnQueDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGRpZmYueSArPSBub3JtYWxpemVkSW5jcmVtZW50Lnk7CiAgICAgICAgICAgICAgICBkaWZmLnggPSBub3JtYWxpemVkUmFkaXVzLng7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCAvIGZhY3RvclN1bTsKICAgICAgICB9YH1nZXRGYWN0b3IoZSx0KXtzd2l0Y2godGhpcy5vcHRpb25zLnR5cGUpe2Nhc2UgMTpyZXR1cm4gdGhpcy5nZXRMaW5lYXJGYWN0b3IoZSx0KTtjYXNlIDA6ZGVmYXVsdDpyZXR1cm4gdGhpcy5nZXRMaW5lYXJGYWN0b3IoZSx0KX19Z2V0TGluZWFyRmFjdG9yKGUsdCl7cmV0dXJuIDF9Z2V0R2F1c3NpYW5GYWN0b3IoZSx0KXt2YXIgdTtjb25zdCBuPU1hdGguUEkqMixpPU1hdGgubWF4KCh1PXRoaXMub3B0aW9ucy5yYWRpdXMpIT1udWxsP3U6MSwxKSxvPTEvKG4qaSoqMikscz0tKGUqKjIrdCoqMiksYT1vKnM7cmV0dXJuIG8qTWF0aC5FKiphfX1jbGFzcyBDZiBleHRlbmRzIFBye2NvbnN0cnVjdG9yKGUsdCl7c3VwZXIoKSx0aGlzLmNvbnRleHQ9ZTtjb25zdCBuPXtjb250ZXh0OmUsaGVpZ2h0OmUuY2FudmFzLmhlaWdodCx3aWR0aDplLmNhbnZhcy53aWR0aH0saT1uZXcgTmkoey4uLm4scmFkaXVzOnQsdHlwZTpEci5HQVVTU0lBTn0pLG89bmV3IElyKHsuLi5uLGRpc2FibGVGcmFtZWJ1ZmZlcjohMH0pO3RoaXMuYWRkU3RlcCh7cHJvZ3JhbTppLGdldFVuaWZvcm1zOigpPT4oe3RleHR1cmU6UihlLHRoaXMuaW5wdXRJbWFnZSl9KX0pLHRoaXMuYWRkU3RlcCh7cHJvZ3JhbTpvLGdldFVuaWZvcm1zOigpPT4oe2JhY2tncm91bmQ6UihlLHRoaXMuaW5wdXRJbWFnZSksZm9yZWdyb3VuZDpSKGUsaS5vdXRwdXQpLHRocmVzaG9sZDpSKGUsdGhpcy5pbnB1dE1hc2spfSl9KX1zZXREYXRhKGUsdCl7dGhpcy5pbnB1dEltYWdlPWUsdGhpcy5pbnB1dE1hc2s9dH19Y2xhc3MgQ3IgZXh0ZW5kcyB5ZXtjb25zdHJ1Y3RvcihlKXtzdXBlcihlKSx0aGlzLmZiaTI9UnQoZS5jb250ZXh0LFt7Zm9ybWF0OmUuY29udGV4dC5SR0JBLHR5cGU6ZS5jb250ZXh0LlVOU0lHTkVEX0JZVEUsbWluOmUuY29udGV4dC5MSU5FQVIsbWFnOmUuY29udGV4dC5MSU5FQVIsd3JhcDplLmNvbnRleHQuQ0xBTVBfVE9fRURHRX1dLGUud2lkdGgsZS5oZWlnaHQpfXJ1bihlKXtjb25zdCB0PXRoaXMuZmJpO3RoaXMuZmJpPXRoaXMuZmJpMix0aGlzLmZiaTI9dCx0aGlzLm91dHB1dD10aGlzLmZiaS5hdHRhY2htZW50c1swXSxzdXBlci5ydW4oey4uLmUscHJldmlvdXNfcmVuZGVyaW5nOnRoaXMuZmJpMi5hdHRhY2htZW50c1swXX0pfXJlc2l6ZU91dHB1dChlLHQpe3N1cGVyLnJlc2l6ZU91dHB1dChlLHQpLHRoaXMuZmJpMj1SdCh0aGlzLmNvbnRleHQsW3tmb3JtYXQ6dGhpcy5jb250ZXh0LlJHQkEsdHlwZTp0aGlzLmNvbnRleHQuVU5TSUdORURfQllURSxtaW46dGhpcy5jb250ZXh0LkxJTkVBUix3cmFwOnRoaXMuY29udGV4dC5DTEFNUF9UT19FREdFfV0sZSx0KX19dmFyIE9mPWBwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsKCnZhcnlpbmcgdmVjMiBfdGV4dHVyZV9jb29yZDsKCi8vIHVuaWZvcm0gZmxvYXQgdHJlc2hvbGQ7CnVuaWZvcm0gc2FtcGxlcjJEIGltYWdlX25vdzsKdW5pZm9ybSBzYW1wbGVyMkQgaW1hZ2VfYmVmb3JlOwp1bmlmb3JtIHNhbXBsZXIyRCBtYXNrX25vdzsKdW5pZm9ybSBzYW1wbGVyMkQgbWFza19iZWZvcmU7CnVuaWZvcm0gc2FtcGxlcjJEIHByZXZpb3VzX3JlbmRlcmluZzsKdW5pZm9ybSB2ZWMyIGNhbnZhczsKCnVuaWZvcm0gZmxvYXQgZGVsdGE7CgpmbG9hdCBjdXJyZW50X2ZhY3RvciA9IDAuNjk7CmZsb2F0IHByZXZpb3VzX2ZhY3RvciA9IDAuNzQ7CmZsb2F0IHRocmVzaG9sZF9hY3RpdmF0aW9uID0gMC41NDsKCmZsb2F0IG1hcChmbG9hdCB2YWx1ZSwgZmxvYXQgbWluMSwgZmxvYXQgbWF4MSwgZmxvYXQgbWluMiwgZmxvYXQgbWF4MikgewogIHJldHVybiBtaW4yICsgKHZhbHVlIC0gbWluMSkgKiAobWF4MiAtIG1pbjIpIC8gKG1heDEgLSBtaW4xKTsKfQoKZmxvYXQgZ2V0VGhyZXNob2xkKCkgewogIHZlYzQgY29sb3IgPSB2ZWM0KDAuKTsKICBmb3IgKGZsb2F0IHkgPSAtNi47IHkgPCA3LjsgeSArPSAxLikgewogICAgZm9yIChmbG9hdCB4ID0gLTYuOyB4IDwgNy47IHggKz0gMS4pIHsKICAgICAgdmVjNCBpbWFnZV9ub3dfY29sb3IgPQogICAgICAgICAgdGV4dHVyZTJEKGltYWdlX25vdywgX3RleHR1cmVfY29vcmQgKyB2ZWMyKHgsIHkpIC8gY2FudmFzKTsKICAgICAgdmVjNCBpbWFnZV9iZWZvcmVfY29sb3IgPQogICAgICAgICAgdGV4dHVyZTJEKGltYWdlX2JlZm9yZSwgX3RleHR1cmVfY29vcmQgKyB2ZWMyKHgsIHkpIC8gY2FudmFzKTsKICAgICAgY29sb3IgKz0gYWJzKGltYWdlX2JlZm9yZV9jb2xvciAtIGltYWdlX25vd19jb2xvcik7CiAgICB9CiAgfQogIHJldHVybiAoY29sb3IueCArIGNvbG9yLnkgKyBjb2xvci56KSAvICgzLiAqIDkuKTsKfQoKdm9pZCBtYWluKCkgewogIGZsb2F0IHRyZXNob2xkX2lucHV0ID0gLjQ7CiAgZmxvYXQgdHJlc2hvbGRfcHJldmlvdXNfcmVuZGVyaW5nID0gLjk4OwoKICB2ZWM0IG1hc2tfbm93X2NvbG9yID0gdGV4dHVyZTJEKG1hc2tfbm93LCBfdGV4dHVyZV9jb29yZCk7CiAgdmVjNCBtYXNrX2JlZm9yZV9jb2xvciA9IHRleHR1cmUyRChtYXNrX2JlZm9yZSwgX3RleHR1cmVfY29vcmQpOwogIHZlYzQgcHJldmlvdXNfcmVuZGVyaW5nX2NvbG9yID0gdGV4dHVyZTJEKHByZXZpb3VzX3JlbmRlcmluZywgX3RleHR1cmVfY29vcmQpOwoKICB2ZWMzIG1hc2tfZGlmZiA9IGFicyhtYXNrX2JlZm9yZV9jb2xvci54eXogLSBtYXNrX25vd19jb2xvci54eXopOwogIGZsb2F0IGZsaWNrZXJpbmcgPSBtYXNrX2RpZmYueDsKICBmbG9hdCB0aHJlc2hvbGQgPSBnZXRUaHJlc2hvbGQoKTsKICBpZiAodGhyZXNob2xkIDwgdGhyZXNob2xkX2FjdGl2YXRpb24pIHsKICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoZmxpY2tlcmluZywgMC4sIDAuLCAxLikgKiBjdXJyZW50X2ZhY3RvciArCiAgICAgICAgICAgICAgICAgICBwcmV2aW91c19yZW5kZXJpbmdfY29sb3IgKiBwcmV2aW91c19mYWN0b3I7CiAgICBnbF9GcmFnQ29sb3IgKj0gKDEuIC0gdGhyZXNob2xkKTsKICB9Cn0KYCxNZj1gdmFyeWluZyB2ZWMyIF90ZXh0dXJlX2Nvb3JkOwoKYXR0cmlidXRlIHZlYzIgcG9zaXRpb247CmF0dHJpYnV0ZSB2ZWMyIHRleHR1cmVfY29vcmQ7Cgp2b2lkIG1haW4oKSB7CiAgZ2xfUG9zaXRpb24gPSB2ZWM0KHBvc2l0aW9uLCAwLiwgMS4pOwogIF90ZXh0dXJlX2Nvb3JkID0gdGV4dHVyZV9jb29yZDsKfQpgO2NsYXNzIE5mIGV4dGVuZHMgQ3J7Z2V0RnJhZ21lbnRTaGFkZXIoKXtyZXR1cm4gT2Z9Z2V0VmVydGV4U2hhZGVyKCl7cmV0dXJuIE1mfX12YXIgVWY9YCN2ZXJzaW9uIDMwMCBlcwovLyBodHRwczovL2dpdGh1Yi5jb20vVm9sY29taXgvdmlydHVhbC1iYWNrZ3JvdW5kL2Jsb2IvbWFpbi9zcmMvcGlwZWxpbmVzL3dlYmdsMi9qb2ludEJpbGF0ZXJhbEZpbHRlclN0YWdlLnRzCgpwcmVjaXNpb24gaGlnaHAgZmxvYXQ7CnVuaWZvcm0gc2FtcGxlcjJEIGlucHV0X2ZyYW1lOwp1bmlmb3JtIHNhbXBsZXIyRCBzZWdtZW50YXRpb25fbWFzazsKdW5pZm9ybSBzYW1wbGVyMkQgdGhyZXNob2xkOwp1bmlmb3JtIHZlYzIgdGV4ZWxfc2l6ZTsKdW5pZm9ybSBmbG9hdCBzdGVwOwp1bmlmb3JtIGZsb2F0IHJhZGl1czsKdW5pZm9ybSBmbG9hdCBvZmZzZXQ7CnVuaWZvcm0gZmxvYXQgc2lnbWFfdGV4ZWw7CnVuaWZvcm0gZmxvYXQgc2lnbWFfY29sb3I7CgppbiB2ZWMyIF90ZXh0dXJlX2Nvb3JkOwpvdXQgdmVjNCBvdXRDb2xvcjsKCmZsb2F0IGdhdXNzaWFuKGZsb2F0IHgsIGZsb2F0IHNpZ21hKSB7CiAgZmxvYXQgY29lZmYgPSAtMC41IC8gKHNpZ21hICogc2lnbWEgKiA0LjAgKyAxLjBlLTYpOwogIHJldHVybiBleHAoKHggKiB4KSAqIGNvZWZmKTsKfQoKdm9pZCBtYWluKCkgewogIHZlYzIgY2VudGVyQ29vcmQgPSBfdGV4dHVyZV9jb29yZDsKICB2ZWMzIGNlbnRlckNvbG9yID0gdGV4dHVyZShpbnB1dF9mcmFtZSwgY2VudGVyQ29vcmQpLnJnYjsKICBmbG9hdCBuZXdWYWwgPSAwLjA7CiAgZmxvYXQgc3BhY2VXZWlnaHQgPSAwLjA7CiAgZmxvYXQgY29sb3JXZWlnaHQgPSAwLjA7CiAgZmxvYXQgdG90YWxXZWlnaHQgPSAwLjA7CiAgLy8gU3Vic2FtcGxlIGtlcm5lbCBzcGFjZS4KICBmb3IgKGZsb2F0IGkgPSAtcmFkaXVzICsgb2Zmc2V0OyBpIDw9IHJhZGl1czsgaSArPSBzdGVwKSB7CiAgICBmb3IgKGZsb2F0IGogPSAtcmFkaXVzICsgb2Zmc2V0OyBqIDw9IHJhZGl1czsgaiArPSBzdGVwKSB7CiAgICAgIHZlYzIgc2hpZnQgPSB2ZWMyKGosIGkpICogdGV4ZWxfc2l6ZTsKICAgICAgdmVjMiBjb29yZCA9IHZlYzIoY2VudGVyQ29vcmQgKyBzaGlmdCk7CiAgICAgIHZlYzMgZnJhbWVDb2xvciA9IHRleHR1cmUoaW5wdXRfZnJhbWUsIGNvb3JkKS5yZ2I7CiAgICAgIGZsb2F0IHRocmVzaG9sZCA9IHRleHR1cmUodGhyZXNob2xkLCBjb29yZCkuYTsKICAgICAgZmxvYXQgb3V0VmFsID0gdGV4dHVyZShzZWdtZW50YXRpb25fbWFzaywgY29vcmQpLmE7CgogICAgICBzcGFjZVdlaWdodCA9IGdhdXNzaWFuKGRpc3RhbmNlKGNlbnRlckNvb3JkLCBjb29yZCksIHNpZ21hX3RleGVsKTsKICAgICAgY29sb3JXZWlnaHQgPSBnYXVzc2lhbihkaXN0YW5jZShjZW50ZXJDb2xvciwgZnJhbWVDb2xvciksIHNpZ21hX2NvbG9yKTsKICAgICAgdG90YWxXZWlnaHQgKz0gc3BhY2VXZWlnaHQgKiBjb2xvcldlaWdodDsKICAgICAgbmV3VmFsICs9IHNwYWNlV2VpZ2h0ICogY29sb3JXZWlnaHQgKiBvdXRWYWwgKiB0aHJlc2hvbGQ7CiAgICB9CiAgfQogIG5ld1ZhbCAvPSB0b3RhbFdlaWdodDsKICBvdXRDb2xvciA9IHZlYzQodmVjMygwLiksIG5ld1ZhbCk7Cn1gLEJmPWAjdmVyc2lvbiAzMDAgZXMKaW4gdmVjMiBwb3NpdGlvbjsKaW4gdmVjMiB0ZXh0dXJlX2Nvb3JkOwpvdXQgdmVjMiBfdGV4dHVyZV9jb29yZDsKdm9pZCBtYWluKCkgewogIGdsX1Bvc2l0aW9uID0gdmVjNChwb3NpdGlvbiwgMC4wLCAxLjApOwogIF90ZXh0dXJlX2Nvb3JkID0gdGV4dHVyZV9jb29yZDsKfWA7Y2xhc3Mga2YgZXh0ZW5kcyB5ZXtnZXRGcmFnbWVudFNoYWRlcigpe3JldHVybiBVZn1nZXRWZXJ0ZXhTaGFkZXIoKXtyZXR1cm4gQmZ9fXZhciBMZj1gcHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7Cgp2YXJ5aW5nIHZlYzIgX3RleHR1cmVfY29vcmQ7Cgp1bmlmb3JtIHZlYzIgY2FudmFzOwp1bmlmb3JtIHNhbXBsZXIyRCB0ZXh0dXJlOwoKdm9pZCBtYWluKCkgewogIGludCBjb3VudCA9IDA7CiAgZm9yIChmbG9hdCB5ID0gLTEuOyB5IDwgMi47IHkgKz0gMS4pIHsKICAgIGZvciAoZmxvYXQgeCA9IC0xLjsgeCA8IDIuOyB4ICs9IDEuKSB7CiAgICAgIHZlYzIgY29vcmQgPSBfdGV4dHVyZV9jb29yZCArIHZlYzIoeSwgeCkgLyBjYW52YXM7CiAgICAgIHZlYzQgY29sb3IgPSB0ZXh0dXJlMkQodGV4dHVyZSwgY29vcmQpOwogICAgICBpZiAoY29sb3IuciA+IC4xKSB7CiAgICAgICAgY291bnQrKzsKICAgICAgfQogICAgfQogIH0KICBpZiAoY291bnQgPiA1KSB7CiAgICBnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQodGV4dHVyZSwgX3RleHR1cmVfY29vcmQpOwogIH0KfQpgLCRmPWB2YXJ5aW5nIHZlYzIgX3RleHR1cmVfY29vcmQ7CgphdHRyaWJ1dGUgdmVjMiBwb3NpdGlvbjsKYXR0cmlidXRlIHZlYzIgdGV4dHVyZV9jb29yZDsKCnZvaWQgbWFpbigpIHsKICBnbF9Qb3NpdGlvbiA9IHZlYzQocG9zaXRpb24sIDAuLCAxLik7CiAgX3RleHR1cmVfY29vcmQgPSB0ZXh0dXJlX2Nvb3JkOwp9CmA7Y2xhc3MgR2YgZXh0ZW5kcyB5ZXtnZXRGcmFnbWVudFNoYWRlcigpe3JldHVybiBMZn1nZXRWZXJ0ZXhTaGFkZXIoKXtyZXR1cm4gJGZ9fXZhciB6Zj1gcHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7Cgp2YXJ5aW5nIHZlYzIgX3RleHR1cmVfY29vcmQ7Cgp1bmlmb3JtIHZlYzIgY2FudmFzOwp1bmlmb3JtIHNhbXBsZXIyRCB0ZXh0dXJlOwoKdm9pZCBtYWluKCkgewogIHZlYzQgY29sb3IgPSB0ZXh0dXJlMkQodGV4dHVyZSwgX3RleHR1cmVfY29vcmQpOwogIGZvciAoZmxvYXQgeSA9IC0yLjsgeSA8IDMuOyB5ICs9IDEuKSB7CiAgICBmb3IgKGZsb2F0IHggPSAtMi47IHggPCAzLjsgeCArPSAxLikgewogICAgICB2ZWMyIGNvb3JkID0gX3RleHR1cmVfY29vcmQ7CiAgICAgIGNvb3JkICs9IHZlYzIoeSwgeCkgLyBjYW52YXM7CiAgICAgIGNvbG9yICs9IHRleHR1cmUyRCh0ZXh0dXJlLCBjb29yZCkgKiAoMS4gLyA0Lik7CiAgICB9CiAgfQoKICBnbF9GcmFnQ29sb3IgPSBjb2xvcjsKfQpgLEhmPWB2YXJ5aW5nIHZlYzIgX3RleHR1cmVfY29vcmQ7CgphdHRyaWJ1dGUgdmVjMiBwb3NpdGlvbjsKYXR0cmlidXRlIHZlYzIgdGV4dHVyZV9jb29yZDsKCnZvaWQgbWFpbigpIHsKICBnbF9Qb3NpdGlvbiA9IHZlYzQocG9zaXRpb24sIDAuLCAxLik7CiAgX3RleHR1cmVfY29vcmQgPSB0ZXh0dXJlX2Nvb3JkOwp9CmA7Y2xhc3MgVmYgZXh0ZW5kcyBDcntnZXRGcmFnbWVudFNoYWRlcigpe3JldHVybiB6Zn1nZXRWZXJ0ZXhTaGFkZXIoKXtyZXR1cm4gSGZ9fXZhciBXZj1gcHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7Cgp2YXJ5aW5nIHZlYzIgX3RleHR1cmVfY29vcmQ7Cgp1bmlmb3JtIHNhbXBsZXIyRCB0aHJlc2hvbGQ7CnVuaWZvcm0gc2FtcGxlcjJEIGlucHV0czsKCnZvaWQgbWFpbigpIHsKICB2ZWM0IGlucHV0c19jb2xvciA9IHRleHR1cmUyRChpbnB1dHMsIF90ZXh0dXJlX2Nvb3JkKTsKICB2ZWM0IHRocmVzaG9sZF9jb2xvciA9IHRleHR1cmUyRCh0aHJlc2hvbGQsIF90ZXh0dXJlX2Nvb3JkKTsKICBpZiAodGhyZXNob2xkX2NvbG9yLnIgPCAuMSAmJiBpbnB1dHNfY29sb3IuciA+IC41KSB7CiAgICBnbF9GcmFnQ29sb3IgPSBpbnB1dHNfY29sb3I7CiAgfQp9CmAsamY9YHZhcnlpbmcgdmVjMiBfdGV4dHVyZV9jb29yZDsKCmF0dHJpYnV0ZSB2ZWMyIHBvc2l0aW9uOwphdHRyaWJ1dGUgdmVjMiB0ZXh0dXJlX2Nvb3JkOwoKdm9pZCBtYWluKCkgewogIGdsX1Bvc2l0aW9uID0gdmVjNChwb3NpdGlvbiwgMC4sIDEuKTsKICBfdGV4dHVyZV9jb29yZCA9IHRleHR1cmVfY29vcmQ7Cn0KYDtjbGFzcyBxZiBleHRlbmRzIENye2dldEZyYWdtZW50U2hhZGVyKCl7cmV0dXJuIFdmfWdldFZlcnRleFNoYWRlcigpe3JldHVybiBqZn19Y2xhc3MgWGYgZXh0ZW5kcyBGcntjb25zdHJ1Y3RvcihlLHQsbil7c3VwZXIoKSx0aGlzLmNvbnRleHQ9ZSx0aGlzLm9wdGlvbnM9e2N1cnJlbnRUaHJlc2hvbGRNaW5pbXVtOjAsY3VycmVudFRocmVzaG9sZE1heGltdW06MSxwcmV2aW91c1RocmVzaG9sZE1pbmltdW06MCxwcmV2aW91c1RocmVzaG9sZE1heGltdW06MSx0aHJlc2hvbGRNaW5pbXVtOjAsdGhyZXNob2xkTWF4aW11bToxLHRocmVzaG9sZEZhY3RvcjoxfTtjb25zdCBpPXtjb250ZXh0OmUsaGVpZ2h0Om4sd2lkdGg6dH0sbz1uZXcgTmYoaSkscz1uZXcgTmkoey4uLmkscmFkaXVzOjEsdHlwZTpEci5HQVVTU0lBTn0pLGE9bmV3IHFmKGkpLHU9bmV3IFZmKGkpLGY9bmV3IEdmKGkpLGM9bmV3IGtmKHsuLi5pfSksZD0uNjYscD02NDAseT00ODAsbT0yNTYsXz0xNDQ7bGV0IGI9MTtiKj1NYXRoLm1heChwL20seS9fKTtjb25zdCBnPU1hdGgubWF4KDEsTWF0aC5zcXJ0KGIpKmQpLFQ9MS9wLEY9MS95O3RoaXMuYWRkU3RlcCh7cHJvZ3JhbTpvLGdldFVuaWZvcm1zOigpPT4oe2ltYWdlX25vdzpSKGUsdGhpcy5pbnB1dEltYWdlKSxpbWFnZV9iZWZvcmU6UihlLHRoaXMucHJldmlvdXNJbnB1dEltYWdlKSxtYXNrX25vdzpSKGUsdGhpcy5pbnB1dE1hc2spLG1hc2tfYmVmb3JlOlIoZSx0aGlzLnByZXZpb3VzSW5wdXRNYXNrKSxjdXJyZW50X3RocmVzaG9sZF9taW5pbXVtOnRoaXMub3B0aW9ucy5jdXJyZW50VGhyZXNob2xkTWluaW11bSxjdXJyZW50X3RocmVzaG9sZF9tYXhpbXVtOnRoaXMub3B0aW9ucy5jdXJyZW50VGhyZXNob2xkTWF4aW11bSxwcmV2aW91c190aHJlc2hvbGRfbWluaW11bTp0aGlzLm9wdGlvbnMucHJldmlvdXNUaHJlc2hvbGRNaW5pbXVtLHByZXZpb3VzX3RocmVzaG9sZF9tYXhpbXVtOnRoaXMub3B0aW9ucy5wcmV2aW91c1RocmVzaG9sZE1heGltdW0sdGhyZXNob2xkX21pbmltdW06dGhpcy5vcHRpb25zLnRocmVzaG9sZE1pbmltdW0sdGhyZXNob2xkX21heGltdW06dGhpcy5vcHRpb25zLnRocmVzaG9sZE1heGltdW0sdGhyZXNob2xkX2ZhY3Rvcjp0aGlzLm9wdGlvbnMudGhyZXNob2xkRmFjdG9yfSl9KSx0aGlzLmFkZFN0ZXAoe3Byb2dyYW06YSxnZXRVbmlmb3JtczooKT0+KHtpbnB1dHM6UihlLHRoaXMuaW5wdXRNYXNrKSx0aHJlc2hvbGQ6UihlLG8ub3V0cHV0KX0pfSksdGhpcy5hZGRTdGVwKHtwcm9ncmFtOmYsZ2V0VW5pZm9ybXM6KCk9Pih7dGV4dHVyZTpSKGUsYS5vdXRwdXQpfSl9KSx0aGlzLmFkZFN0ZXAoe3Byb2dyYW06dSxnZXRVbmlmb3JtczooKT0+KHt0ZXh0dXJlOlIoZSxmLm91dHB1dCl9KX0pLHRoaXMuYWRkU3RlcCh7cHJvZ3JhbTpzLGdldFVuaWZvcm1zOigpPT4oe3RleHR1cmU6UihlLHUub3V0cHV0KX0pfSksdGhpcy5hZGRTdGVwKHtwcm9ncmFtOmMsZ2V0VW5pZm9ybXM6KCk9Pih7aW5wdXRfZnJhbWU6UihlLHRoaXMuaW5wdXRJbWFnZSksc2VnbWVudGF0aW9uX21hc2s6UihlLHRoaXMuaW5wdXRNYXNrKSx0aHJlc2hvbGQ6UihlLHMub3V0cHV0KSx0ZXhlbF9zaXplOltULEZdLHN0ZXA6ZyxyYWRpdXM6YixvZmZzZXQ6Zz4xP2cqLjU6MCxzaWdtYV90ZXhlbDpNYXRoLm1heChULEYpKmIsc2lnbWFfY29sb3I6LjF9KX0pLHRoaXMub3V0cHV0PWMub3V0cHV0fXNldERhdGEoZSx0KXt0aGlzLnByZXZpb3VzSW5wdXRJbWFnZT10aGlzLmlucHV0SW1hZ2U/dGhpcy5pbnB1dEltYWdlOmUsdGhpcy5wcmV2aW91c0lucHV0TWFzaz10aGlzLmlucHV0TWFzaz90aGlzLmlucHV0TWFzazp0LHRoaXMuaW5wdXRJbWFnZT1lLHRoaXMuaW5wdXRNYXNrPXR9c2V0T3B0aW9ucyhlKXt0aGlzLm9wdGlvbnM9ZX19dmFyIFlmPWBwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsKCnZhcnlpbmcgdmVjMiBfdGV4dHVyZV9jb29yZDsKdW5pZm9ybSBzYW1wbGVyMkQgdGV4dHVyZTsKCnZvaWQgbWFpbigpIHsgZ2xfRnJhZ0NvbG9yID0gdGV4dHVyZTJEKHRleHR1cmUsIF90ZXh0dXJlX2Nvb3JkKTsgfQpgLEtmPWB2YXJ5aW5nIHZlYzIgX3RleHR1cmVfY29vcmQ7CgphdHRyaWJ1dGUgdmVjMiBwb3NpdGlvbjsKYXR0cmlidXRlIHZlYzIgdGV4dHVyZV9jb29yZDsKdW5pZm9ybSBib29sIGludmVydF95OwoKdm9pZCBtYWluKCkgewogIGdsX1Bvc2l0aW9uID0gdmVjNChwb3NpdGlvbiwgMC4sIDEuKTsKICBfdGV4dHVyZV9jb29yZCA9IHRleHR1cmVfY29vcmQ7CiAgaWYgKGludmVydF95KSB7CiAgICBfdGV4dHVyZV9jb29yZC55ID0gMS4gLSB0ZXh0dXJlX2Nvb3JkLnk7CiAgfQp9CmA7Y2xhc3MgSmYgZXh0ZW5kcyB5ZXtnZXRGcmFnbWVudFNoYWRlcigpe3JldHVybiBZZn1nZXRWZXJ0ZXhTaGFkZXIoKXtyZXR1cm4gS2Z9fWNsYXNzIFFmIGV4dGVuZHMgRnJ7Y29uc3RydWN0b3IoZSx0LG4pe3N1cGVyKCksdGhpcy5jb250ZXh0PWU7Y29uc3QgaT17Y29udGV4dDplLGhlaWdodDpuLHdpZHRoOnR9O3RoaXMuYWRkU3RlcCh7cHJvZ3JhbTpuZXcgSmYoey4uLmksZGlzYWJsZUZyYW1lYnVmZmVyOiEwfSksZ2V0VW5pZm9ybXM6KCk9Pih7dGV4dHVyZTpSKGUsdGhpcy5pbnB1dEltYWdlKSxpbnZlcnRfeTohMH0pfSl9c2V0RGF0YShlKXt0aGlzLmlucHV0SW1hZ2U9ZX19Y2xhc3MgWmZ7Y29uc3RydWN0b3IoZSl7dGhpcy5jYW52YXM9bmV3IE9mZnNjcmVlbkNhbnZhcygwLDApLHRoaXMuY29udGV4dD10aGlzLmNhbnZhcy5nZXRDb250ZXh0KCJ3ZWJnbDIiKSx0aGlzLmNhbnZhcy53aWR0aD1lLndpZHRoLHRoaXMuY2FudmFzLmhlaWdodD1lLmhlaWdodCx0aGlzLnJlc2l6ZT1uZXcgUWYodGhpcy5jb250ZXh0LGUud2lkdGgsZS5oZWlnaHQpfXJlc2l6ZUZvcmVncm91bmQoZSx0KXt0aGlzLmNhbnZhcy53aWR0aD1lLHRoaXMuY2FudmFzLmhlaWdodD10LHRoaXMucmVzaXplLnJlc2l6ZU91dHB1dChlLHQpfWFzeW5jIHByb2Nlc3MoZSl7dmFyIHQsbjtyZXR1cm4gdGhpcy5jYW52YXMud2lkdGg9dGhpcy5jYW52YXMud2lkdGgsKHQ9dGhpcy5yZXNpemUpPT1udWxsfHx0LnNldERhdGEoZSksKG49dGhpcy5yZXNpemUpPT1udWxsfHxuLnJ1bigpLHRoaXMuY2FudmFzfX1jbGFzcyBlbHtjb25zdHJ1Y3RvcihlKXt0aGlzLmNhbnZhcz1uZXcgT2Zmc2NyZWVuQ2FudmFzKDAsMCksdGhpcy5jb250ZXh0PXRoaXMuY2FudmFzLmdldENvbnRleHQoIndlYmdsMiIpLHRoaXMuY2FudmFzLndpZHRoPWUuZm9yZWdyb3VuZFdpZHRoLHRoaXMuY2FudmFzLmhlaWdodD1lLmZvcmVncm91bmRIZWlnaHQsdGhpcy5pbXByb3ZlTWFza1NlZ21lbnRhdGlvbj1uZXcgWGYodGhpcy5jb250ZXh0LGUubWFza1dpZHRoLGUubWFza0hlaWdodCksdGhpcy5iYWNrZ3JvdW5kSW1hZ2U9bmV3IE1pKHRoaXMuY29udGV4dCksdGhpcy5iYWNrZ3JvdW5kVmlkZW89bmV3IEZmKHRoaXMuY29udGV4dCksdGhpcy5iYWNrZ3JvdW5kUmVzaXplcj1uZXcgWmYoe3dpZHRoOmUuZm9yZWdyb3VuZFdpZHRoLGhlaWdodDplLmZvcmVncm91bmRIZWlnaHR9KX1zZXRCYWNrZ3JvdW5kT3B0aW9ucyhlKXtzd2l0Y2goZS50cmFuc2Zvcm1lclR5cGUpe2Nhc2UiQmFja2dyb3VuZEJsdXIiOnRoaXMuYWN0aXZlUGlwZWxpbmU9bmV3IElmKHRoaXMuY29udGV4dCx0aGlzLmdldEJsdXJTaXplKGUucmFkaXVzKSk7YnJlYWs7Y2FzZSJTaWxob3VldHRlQmx1ciI6dGhpcy5hY3RpdmVQaXBlbGluZT1uZXcgQ2YodGhpcy5jb250ZXh0LHRoaXMuZ2V0Qmx1clNpemUoZS5yYWRpdXMpKTticmVhaztjYXNlIlZpZGVvQmFja2dyb3VuZCI6dGhpcy5hY3RpdmVQaXBlbGluZT10aGlzLmJhY2tncm91bmRWaWRlbzticmVhaztjYXNlIlZpcnR1YWxCYWNrZ3JvdW5kIjp0aGlzLmFjdGl2ZVBpcGVsaW5lPXRoaXMuYmFja2dyb3VuZEltYWdlO2JyZWFrfXRoaXMub3B0aW9ucz1lfXNldEZsaWNrZXJpbmdPcHRpb25zKGUpe3ZhciB0Oyh0PXRoaXMuaW1wcm92ZU1hc2tTZWdtZW50YXRpb24pPT1udWxsfHx0LnNldE9wdGlvbnMoZSl9c2V0VmlkZW9CR1JlYWRhYmxlKGUpe3RoaXMuYmFja2dyb3VuZFZpZGVvLmlucHV0VmlkZW89ZX1hc3luYyBzZXRWaXJ0dWFsQkdJbWFnZShlKXt0aGlzLnZpcnR1YWxCR0ltYWdlPWUsdGhpcy5iYWNrZ3JvdW5kSW1hZ2UuaW5wdXRCYWNrZ3JvdW5kSW1hZ2U9YXdhaXQgdGhpcy5iYWNrZ3JvdW5kUmVzaXplci5wcm9jZXNzKGUpfWFzeW5jIHByb2Nlc3MoZSx0KXt2YXIgbixpLG8scyxhO2lmKHRoaXMuYWN0aXZlUGlwZWxpbmUmJmUud2lkdGgmJih0PT1udWxsP3ZvaWQgMDp0LndpZHRoKSl7bGV0IHU9dDsoKChuPXRoaXMub3B0aW9ucyk9PW51bGw/dm9pZCAwOm4uc2VsZmllU2VnbWVudGF0aW9uVHlwZSkmJigoaT10aGlzLm9wdGlvbnMpPT1udWxsP3ZvaWQgMDppLnNlbGZpZVNlZ21lbnRhdGlvblR5cGUpPT09IlBSRUNJU0UifHwhKChvPXRoaXMub3B0aW9ucykhPW51bGwmJm8uc2VsZmllU2VnbWVudGF0aW9uVHlwZSkmJnRoaXMuYWN0aXZlUGlwZWxpbmUucHJlY2lzZU1hc2tFbmFibGVkKSYmKHRoaXMuaW1wcm92ZU1hc2tTZWdtZW50YXRpb24uc2V0RGF0YShlLHQpLHRoaXMuaW1wcm92ZU1hc2tTZWdtZW50YXRpb24ucnVuKCksdT10aGlzLmltcHJvdmVNYXNrU2VnbWVudGF0aW9uLm91dHB1dCksKHM9dGhpcy5hY3RpdmVQaXBlbGluZSk9PW51bGx8fHMuc2V0RGF0YShlLHUpLChhPXRoaXMuYWN0aXZlUGlwZWxpbmUpPT1udWxsfHxhLnJ1bigpfX1hc3luYyByZXNpemVGb3JlZ3JvdW5kKGUsdCl7dmFyIG47dGhpcy5jYW52YXMud2lkdGg9ZSx0aGlzLmNhbnZhcy5oZWlnaHQ9dCx0aGlzLmJhY2tncm91bmRJbWFnZS5yZXNpemVPdXRwdXQoZSx0KSx0aGlzLmJhY2tncm91bmRWaWRlby5yZXNpemVPdXRwdXQoZSx0KSx0aGlzLmJhY2tncm91bmRSZXNpemVyLnJlc2l6ZUZvcmVncm91bmQoZSx0KSwobj10aGlzLmFjdGl2ZVBpcGVsaW5lKT09bnVsbHx8bi5yZXNpemVPdXRwdXQoZSx0KSx0aGlzLnZpcnR1YWxCR0ltYWdlJiYodGhpcy5iYWNrZ3JvdW5kSW1hZ2UuaW5wdXRCYWNrZ3JvdW5kSW1hZ2U9YXdhaXQgdGhpcy5iYWNrZ3JvdW5kUmVzaXplci5wcm9jZXNzKHRoaXMudmlydHVhbEJHSW1hZ2UpKX1nZXRCbHVyU2l6ZShlPWl0Lkxvdyl7c3dpdGNoKGUpe2Nhc2UgaXQuTG93OnJldHVybiA1O2Nhc2UgaXQuSGlnaDpyZXR1cm4gMTJ9cmV0dXJuIGV9fXZhciBTdD1mdW5jdGlvbigpe3ZhciByPXR5cGVvZiBkb2N1bWVudCE9InVuZGVmaW5lZCImJmRvY3VtZW50LmN1cnJlbnRTY3JpcHQ/ZG9jdW1lbnQuY3VycmVudFNjcmlwdC5zcmM6dm9pZCAwO3JldHVybiBmdW5jdGlvbihlKXtlPWV8fHt9O3ZhciB0PXR5cGVvZiBlIT0idW5kZWZpbmVkIj9lOnt9LG4saTt0LnJlYWR5PW5ldyBQcm9taXNlKGZ1bmN0aW9uKGwsaCl7bj1sLGk9aH0pO3ZhciBvPXt9LHM7Zm9yKHMgaW4gdCl0Lmhhc093blByb3BlcnR5KHMpJiYob1tzXT10W3NdKTt2YXIgYT0iLi90aGlzLnByb2dyYW0iLHU9ZnVuY3Rpb24obCxoKXt0aHJvdyBofSxmPSEwLGM9IiI7ZnVuY3Rpb24gZChsKXtyZXR1cm4gdC5sb2NhdGVGaWxlP3QubG9jYXRlRmlsZShsLGMpOmMrbH12YXIgcDt0eXBlb2YgZG9jdW1lbnQhPSJ1bmRlZmluZWQiJiZkb2N1bWVudC5jdXJyZW50U2NyaXB0JiYoYz1kb2N1bWVudC5jdXJyZW50U2NyaXB0LnNyYyksciYmKGM9ciksYy5pbmRleE9mKCJibG9iOiIpIT09MD9jPWMuc3Vic3RyKDAsYy5yZXBsYWNlKC9bPyNdLiovLCIiKS5sYXN0SW5kZXhPZigiLyIpKzEpOmM9IiI7dmFyIHk9dC5wcmludHx8Y29uc29sZS5sb2cuYmluZChjb25zb2xlKSxtPXQucHJpbnRFcnJ8fGNvbnNvbGUud2Fybi5iaW5kKGNvbnNvbGUpO2ZvcihzIGluIG8pby5oYXNPd25Qcm9wZXJ0eShzKSYmKHRbc109b1tzXSk7bz1udWxsLHQuYXJndW1lbnRzJiZ0LmFyZ3VtZW50cyx0LnRoaXNQcm9ncmFtJiYoYT10LnRoaXNQcm9ncmFtKSx0LnF1aXQmJih1PXQucXVpdCk7dmFyIF87dC53YXNtQmluYXJ5JiYoXz10Lndhc21CaW5hcnkpO3ZhciBiPXQubm9FeGl0UnVudGltZXx8ITA7dHlwZW9mIFdlYkFzc2VtYmx5IT0ib2JqZWN0IiYmY2UoIm5vIG5hdGl2ZSB3YXNtIHN1cHBvcnQgZGV0ZWN0ZWQiKTt2YXIgZyxUPSExLEY9dHlwZW9mIFRleHREZWNvZGVyIT0idW5kZWZpbmVkIj9uZXcgVGV4dERlY29kZXIoInV0ZjgiKTp2b2lkIDA7ZnVuY3Rpb24gTChsLGgseCl7Zm9yKHZhciBBPWgreCxEPWg7bFtEXSYmIShEPj1BKTspKytEO2lmKEQtaD4xNiYmbC5zdWJhcnJheSYmRilyZXR1cm4gRi5kZWNvZGUobC5zdWJhcnJheShoLEQpKTtmb3IodmFyIE09IiI7aDxEOyl7dmFyIHc9bFtoKytdO2lmKCEodyYxMjgpKXtNKz1TdHJpbmcuZnJvbUNoYXJDb2RlKHcpO2NvbnRpbnVlfXZhciBVPWxbaCsrXSY2MztpZigodyYyMjQpPT0xOTIpe00rPVN0cmluZy5mcm9tQ2hhckNvZGUoKHcmMzEpPDw2fFUpO2NvbnRpbnVlfXZhciBRPWxbaCsrXSY2MztpZigodyYyNDApPT0yMjQ/dz0odyYxNSk8PDEyfFU8PDZ8UTp3PSh3JjcpPDwxOHxVPDwxMnxRPDw2fGxbaCsrXSY2Myx3PDY1NTM2KU0rPVN0cmluZy5mcm9tQ2hhckNvZGUodyk7ZWxzZXt2YXIgV2k9dy02NTUzNjtNKz1TdHJpbmcuZnJvbUNoYXJDb2RlKDU1Mjk2fFdpPj4xMCw1NjMyMHxXaSYxMDIzKX19cmV0dXJuIE19ZnVuY3Rpb24gVihsLGgpe3JldHVybiBsP0woJGUsbCxoKToiIn1mdW5jdGlvbiBlZShsLGgseCl7Zm9yKHZhciBBPTA7QTxsLmxlbmd0aDsrK0EpSXRbaCsrPj4wXT1sLmNoYXJDb2RlQXQoQSk7eHx8KEl0W2g+PjBdPTApfWZ1bmN0aW9uIHEobCxoKXtyZXR1cm4gbCVoPjAmJihsKz1oLWwlaCksbH12YXIgQmksSXQsJGUsWDtmdW5jdGlvbiBraShsKXtCaT1sLHQuSEVBUDg9SXQ9bmV3IEludDhBcnJheShsKSx0LkhFQVAxNj1uZXcgSW50MTZBcnJheShsKSx0LkhFQVAzMj1YPW5ldyBJbnQzMkFycmF5KGwpLHQuSEVBUFU4PSRlPW5ldyBVaW50OEFycmF5KGwpLHQuSEVBUFUxNj1uZXcgVWludDE2QXJyYXkobCksdC5IRUFQVTMyPW5ldyBVaW50MzJBcnJheShsKSx0LkhFQVBGMzI9bmV3IEZsb2F0MzJBcnJheShsKSx0LkhFQVBGNjQ9bmV3IEZsb2F0NjRBcnJheShsKX10LklOSVRJQUxfTUVNT1JZO3ZhciBNcixMaT1bXSwkaT1bXSxHaT1bXSxhbD0wO2Z1bmN0aW9uIHVsKCl7cmV0dXJuIGJ8fGFsPjB9ZnVuY3Rpb24gY2woKXtpZih0LnByZVJ1bilmb3IodHlwZW9mIHQucHJlUnVuPT0iZnVuY3Rpb24iJiYodC5wcmVSdW49W3QucHJlUnVuXSk7dC5wcmVSdW4ubGVuZ3RoOylkbCh0LnByZVJ1bi5zaGlmdCgpKTtOcihMaSl9ZnVuY3Rpb24gZmwoKXtOcigkaSl9ZnVuY3Rpb24gbGwoKXtpZih0LnBvc3RSdW4pZm9yKHR5cGVvZiB0LnBvc3RSdW49PSJmdW5jdGlvbiImJih0LnBvc3RSdW49W3QucG9zdFJ1bl0pO3QucG9zdFJ1bi5sZW5ndGg7KWhsKHQucG9zdFJ1bi5zaGlmdCgpKTtOcihHaSl9ZnVuY3Rpb24gZGwobCl7TGkudW5zaGlmdChsKX1mdW5jdGlvbiBtbChsKXskaS51bnNoaWZ0KGwpfWZ1bmN0aW9uIGhsKGwpe0dpLnVuc2hpZnQobCl9dmFyIF9lPTAsR2U9bnVsbDtmdW5jdGlvbiBwbChsKXtfZSsrLHQubW9uaXRvclJ1bkRlcGVuZGVuY2llcyYmdC5tb25pdG9yUnVuRGVwZW5kZW5jaWVzKF9lKX1mdW5jdGlvbiB5bChsKXtpZihfZS0tLHQubW9uaXRvclJ1bkRlcGVuZGVuY2llcyYmdC5tb25pdG9yUnVuRGVwZW5kZW5jaWVzKF9lKSxfZT09MCYmR2Upe3ZhciBoPUdlO0dlPW51bGwsaCgpfX10LnByZWxvYWRlZEltYWdlcz17fSx0LnByZWxvYWRlZEF1ZGlvcz17fTtmdW5jdGlvbiBjZShsKXt0Lm9uQWJvcnQmJnQub25BYm9ydChsKSxsPSJBYm9ydGVkKCIrbCsiKSIsbShsKSxUPSEwLGwrPSIuIEJ1aWxkIHdpdGggLXMgQVNTRVJUSU9OUz0xIGZvciBtb3JlIGluZm8uIjt2YXIgaD1uZXcgV2ViQXNzZW1ibHkuUnVudGltZUVycm9yKGwpO3Rocm93IGkoaCksaH12YXIgX2w9ImRhdGE6YXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtO2Jhc2U2NCwiO2Z1bmN0aW9uIHppKGwpe3JldHVybiBsLnN0YXJ0c1dpdGgoX2wpfXZhciBZO1k9InRmbGl0ZS1zaW1kLndhc20iLHppKFkpfHwoWT1kKFkpKTtmdW5jdGlvbiBIaShsKXt0cnl7aWYobD09WSYmXylyZXR1cm4gbmV3IFVpbnQ4QXJyYXkoXyk7aWYoIXApdGhyb3ciYm90aCBhc3luYyBhbmQgc3luYyBmZXRjaGluZyBvZiB0aGUgd2FzbSBmYWlsZWQifWNhdGNoKGgpe2NlKGgpfX1mdW5jdGlvbiB4bCgpe3JldHVybiFfJiZmJiZ0eXBlb2YgZmV0Y2g9PSJmdW5jdGlvbiI/ZmV0Y2goWSx7Y3JlZGVudGlhbHM6InNhbWUtb3JpZ2luIn0pLnRoZW4oZnVuY3Rpb24obCl7aWYoIWwub2spdGhyb3ciZmFpbGVkIHRvIGxvYWQgd2FzbSBiaW5hcnkgZmlsZSBhdCAnIitZKyInIjtyZXR1cm4gbC5hcnJheUJ1ZmZlcigpfSkuY2F0Y2goZnVuY3Rpb24oKXtyZXR1cm4gSGkoWSl9KTpQcm9taXNlLnJlc29sdmUoKS50aGVuKGZ1bmN0aW9uKCl7cmV0dXJuIEhpKFkpfSl9ZnVuY3Rpb24gYmwoKXt2YXIgbD17YTokbH07ZnVuY3Rpb24gaCh3LFUpe3ZhciBRPXcuZXhwb3J0czt0LmFzbT1RLGc9dC5hc20ucSxraShnLmJ1ZmZlciksTXI9dC5hc20uRSxtbCh0LmFzbS5yKSx5bCgpfXBsKCk7ZnVuY3Rpb24geCh3KXtoKHcuaW5zdGFuY2UpfWZ1bmN0aW9uIEEodyl7cmV0dXJuIHhsKCkudGhlbihmdW5jdGlvbihVKXtyZXR1cm4gV2ViQXNzZW1ibHkuaW5zdGFudGlhdGUoVSxsKX0pLnRoZW4oZnVuY3Rpb24oVSl7cmV0dXJuIFV9KS50aGVuKHcsZnVuY3Rpb24oVSl7bSgiZmFpbGVkIHRvIGFzeW5jaHJvbm91c2x5IHByZXBhcmUgd2FzbTogIitVKSxjZShVKX0pfWZ1bmN0aW9uIEQoKXtyZXR1cm4hXyYmdHlwZW9mIFdlYkFzc2VtYmx5Lmluc3RhbnRpYXRlU3RyZWFtaW5nPT0iZnVuY3Rpb24iJiYhemkoWSkmJnR5cGVvZiBmZXRjaD09ImZ1bmN0aW9uIj9mZXRjaChZLHtjcmVkZW50aWFsczoic2FtZS1vcmlnaW4ifSkudGhlbihmdW5jdGlvbih3KXt2YXIgVT1XZWJBc3NlbWJseS5pbnN0YW50aWF0ZVN0cmVhbWluZyh3LGwpO3JldHVybiBVLnRoZW4oeCxmdW5jdGlvbihRKXtyZXR1cm4gbSgid2FzbSBzdHJlYW1pbmcgY29tcGlsZSBmYWlsZWQ6ICIrUSksbSgiZmFsbGluZyBiYWNrIHRvIEFycmF5QnVmZmVyIGluc3RhbnRpYXRpb24iKSxBKHgpfSl9KTpBKHgpfWlmKHQuaW5zdGFudGlhdGVXYXNtKXRyeXt2YXIgTT10Lmluc3RhbnRpYXRlV2FzbShsLGgpO3JldHVybiBNfWNhdGNoKHcpe3JldHVybiBtKCJNb2R1bGUuaW5zdGFudGlhdGVXYXNtIGNhbGxiYWNrIGZhaWxlZCB3aXRoIGVycm9yOiAiK3cpLCExfXJldHVybiBEKCkuY2F0Y2goaSkse319ZnVuY3Rpb24gTnIobCl7Zm9yKDtsLmxlbmd0aD4wOyl7dmFyIGg9bC5zaGlmdCgpO2lmKHR5cGVvZiBoPT0iZnVuY3Rpb24iKXtoKHQpO2NvbnRpbnVlfXZhciB4PWguZnVuYzt0eXBlb2YgeD09Im51bWJlciI/aC5hcmc9PT12b2lkIDA/TXIuZ2V0KHgpKCk6TXIuZ2V0KHgpKGguYXJnKTp4KGguYXJnPT09dm9pZCAwP251bGw6aC5hcmcpfX1mdW5jdGlvbiBnbChsLGgseCxBKXtjZSgiQXNzZXJ0aW9uIGZhaWxlZDogIitWKGwpKyIsIGF0OiAiK1toP1YoaCk6InVua25vd24gZmlsZW5hbWUiLHgsQT9WKEEpOiJ1bmtub3duIGZ1bmN0aW9uIl0pfWZ1bmN0aW9uIHZsKGwsaCl7Y2UoIlRvIHVzZSBkbG9wZW4sIHlvdSBuZWVkIHRvIHVzZSBFbXNjcmlwdGVuJ3MgbGlua2luZyBzdXBwb3J0LCBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2Vtc2NyaXB0ZW4tY29yZS9lbXNjcmlwdGVuL3dpa2kvTGlua2luZyIpfWZ1bmN0aW9uIEVsKGwsaCl7Y2UoIlRvIHVzZSBkbG9wZW4sIHlvdSBuZWVkIHRvIHVzZSBFbXNjcmlwdGVuJ3MgbGlua2luZyBzdXBwb3J0LCBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2Vtc2NyaXB0ZW4tY29yZS9lbXNjcmlwdGVuL3dpa2kvTGlua2luZyIpfWZ1bmN0aW9uIFRsKCl7Y2UoIiIpfXZhciBGdDtGdD1mdW5jdGlvbigpe3JldHVybiBwZXJmb3JtYW5jZS5ub3coKX07dmFyIEFsPSEwO2Z1bmN0aW9uIHdsKGwpe3JldHVybiBYW1ZpKCk+PjJdPWwsbH1mdW5jdGlvbiBSbChsLGgpe3ZhciB4O2lmKGw9PT0wKXg9RGF0ZS5ub3coKTtlbHNlIGlmKChsPT09MXx8bD09PTQpJiZBbCl4PUZ0KCk7ZWxzZSByZXR1cm4gd2woMjgpLC0xO3JldHVybiBYW2g+PjJdPXgvMWUzfDAsWFtoKzQ+PjJdPXglMWUzKjFlMyoxZTN8MCwwfWZ1bmN0aW9uIFNsKCl7cmV0dXJuIDIxNDc0ODM2NDh9ZnVuY3Rpb24gSWwobCxoLHgpeyRlLmNvcHlXaXRoaW4obCxoLGgreCl9ZnVuY3Rpb24gRmwobCl7dHJ5e3JldHVybiBnLmdyb3cobC1CaS5ieXRlTGVuZ3RoKzY1NTM1Pj4+MTYpLGtpKGcuYnVmZmVyKSwxfWNhdGNoe319ZnVuY3Rpb24gUGwobCl7dmFyIGg9JGUubGVuZ3RoO2w9bD4+PjA7dmFyIHg9MjE0NzQ4MzY0ODtpZihsPngpcmV0dXJuITE7Zm9yKHZhciBBPTE7QTw9NDtBKj0yKXt2YXIgRD1oKigxKy4yL0EpO0Q9TWF0aC5taW4oRCxsKzEwMDY2MzI5Nik7dmFyIE09TWF0aC5taW4oeCxxKE1hdGgubWF4KGwsRCksNjU1MzYpKSx3PUZsKE0pO2lmKHcpcmV0dXJuITB9cmV0dXJuITF9ZnVuY3Rpb24gRGwobCl7Zm9yKHZhciBoPUZ0KCk7RnQoKS1oPGw7KTt9dmFyIFVyPXt9O2Z1bmN0aW9uIENsKCl7cmV0dXJuIGF8fCIuL3RoaXMucHJvZ3JhbSJ9ZnVuY3Rpb24gemUoKXtpZighemUuc3RyaW5ncyl7dmFyIGw9KHR5cGVvZiBuYXZpZ2F0b3I9PSJvYmplY3QiJiZuYXZpZ2F0b3IubGFuZ3VhZ2VzJiZuYXZpZ2F0b3IubGFuZ3VhZ2VzWzBdfHwiQyIpLnJlcGxhY2UoIi0iLCJfIikrIi5VVEYtOCIsaD17VVNFUjoid2ViX3VzZXIiLExPR05BTUU6IndlYl91c2VyIixQQVRIOiIvIixQV0Q6Ii8iLEhPTUU6Ii9ob21lL3dlYl91c2VyIixMQU5HOmwsXzpDbCgpfTtmb3IodmFyIHggaW4gVXIpVXJbeF09PT12b2lkIDA/ZGVsZXRlIGhbeF06aFt4XT1Vclt4XTt2YXIgQT1bXTtmb3IodmFyIHggaW4gaClBLnB1c2goeCsiPSIraFt4XSk7emUuc3RyaW5ncz1BfXJldHVybiB6ZS5zdHJpbmdzfXZhciBQdD17bWFwcGluZ3M6e30sYnVmZmVyczpbbnVsbCxbXSxbXV0scHJpbnRDaGFyOmZ1bmN0aW9uKGwsaCl7dmFyIHg9UHQuYnVmZmVyc1tsXTtoPT09MHx8aD09PTEwPygobD09PTE/eTptKShMKHgsMCkpLHgubGVuZ3RoPTApOngucHVzaChoKX0sdmFyYXJnczp2b2lkIDAsZ2V0OmZ1bmN0aW9uKCl7UHQudmFyYXJncys9NDt2YXIgbD1YW1B0LnZhcmFyZ3MtND4+Ml07cmV0dXJuIGx9LGdldFN0cjpmdW5jdGlvbihsKXt2YXIgaD1WKGwpO3JldHVybiBofSxnZXQ2NDpmdW5jdGlvbihsLGgpe3JldHVybiBsfX07ZnVuY3Rpb24gT2wobCxoKXt2YXIgeD0wO3JldHVybiB6ZSgpLmZvckVhY2goZnVuY3Rpb24oQSxEKXt2YXIgTT1oK3g7WFtsK0QqND4+Ml09TSxlZShBLE0pLHgrPUEubGVuZ3RoKzF9KSwwfWZ1bmN0aW9uIE1sKGwsaCl7dmFyIHg9emUoKTtYW2w+PjJdPXgubGVuZ3RoO3ZhciBBPTA7cmV0dXJuIHguZm9yRWFjaChmdW5jdGlvbihEKXtBKz1ELmxlbmd0aCsxfSksWFtoPj4yXT1BLDB9ZnVuY3Rpb24gTmwobCl7emwobCl9ZnVuY3Rpb24gVWwobCl7cmV0dXJuIDB9ZnVuY3Rpb24gQmwobCxoLHgsQSxEKXt9ZnVuY3Rpb24ga2wobCxoLHgsQSl7Zm9yKHZhciBEPTAsTT0wO008eDtNKyspe2Zvcih2YXIgdz1YW2grTSo4Pj4yXSxVPVhbaCsoTSo4KzQpPj4yXSxRPTA7UTxVO1ErKylQdC5wcmludENoYXIobCwkZVt3K1FdKTtEKz1VfXJldHVybiBYW0E+PjJdPUQsMH1mdW5jdGlvbiBMbCgpe2lmKHR5cGVvZiBjcnlwdG89PSJvYmplY3QiJiZ0eXBlb2YgY3J5cHRvLmdldFJhbmRvbVZhbHVlcz09ImZ1bmN0aW9uIil7dmFyIGw9bmV3IFVpbnQ4QXJyYXkoMSk7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGNyeXB0by5nZXRSYW5kb21WYWx1ZXMobCksbFswXX19ZWxzZSByZXR1cm4gZnVuY3Rpb24oKXtjZSgicmFuZG9tRGV2aWNlIil9fWZ1bmN0aW9uIER0KGwsaCl7RHQucmFuZG9tRGV2aWNlfHwoRHQucmFuZG9tRGV2aWNlPUxsKCkpO2Zvcih2YXIgeD0wO3g8aDt4KyspSXRbbCt4Pj4wXT1EdC5yYW5kb21EZXZpY2UoKTtyZXR1cm4gMH12YXIgJGw9e2E6Z2wsZTp2bCxkOkVsLGI6VGwsbjpSbCxoOlNsLGw6SWwsbTpQbCxwOkRsLGY6T2wsZzpNbCxqOk5sLGk6VWwsazpCbCxjOmtsLG86RHR9O2JsKCksdC5fX193YXNtX2NhbGxfY3RvcnM9ZnVuY3Rpb24oKXtyZXR1cm4odC5fX193YXNtX2NhbGxfY3RvcnM9dC5hc20ucikuYXBwbHkobnVsbCxhcmd1bWVudHMpfSx0Ll9nZXRNb2RlbEJ1ZmZlck1lbW9yeU9mZnNldD1mdW5jdGlvbigpe3JldHVybih0Ll9nZXRNb2RlbEJ1ZmZlck1lbW9yeU9mZnNldD10LmFzbS5zKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LHQuX2dldElucHV0TWVtb3J5T2Zmc2V0PWZ1bmN0aW9uKCl7cmV0dXJuKHQuX2dldElucHV0TWVtb3J5T2Zmc2V0PXQuYXNtLnQpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sdC5fZ2V0SW5wdXRIZWlnaHQ9ZnVuY3Rpb24oKXtyZXR1cm4odC5fZ2V0SW5wdXRIZWlnaHQ9dC5hc20udSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfSx0Ll9nZXRJbnB1dFdpZHRoPWZ1bmN0aW9uKCl7cmV0dXJuKHQuX2dldElucHV0V2lkdGg9dC5hc20udikuYXBwbHkobnVsbCxhcmd1bWVudHMpfSx0Ll9nZXRJbnB1dENoYW5uZWxDb3VudD1mdW5jdGlvbigpe3JldHVybih0Ll9nZXRJbnB1dENoYW5uZWxDb3VudD10LmFzbS53KS5hcHBseShudWxsLGFyZ3VtZW50cyl9LHQuX2dldE91dHB1dE1lbW9yeU9mZnNldD1mdW5jdGlvbigpe3JldHVybih0Ll9nZXRPdXRwdXRNZW1vcnlPZmZzZXQ9dC5hc20ueCkuYXBwbHkobnVsbCxhcmd1bWVudHMpfSx0Ll9nZXRPdXRwdXRIZWlnaHQ9ZnVuY3Rpb24oKXtyZXR1cm4odC5fZ2V0T3V0cHV0SGVpZ2h0PXQuYXNtLnkpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sdC5fZ2V0T3V0cHV0V2lkdGg9ZnVuY3Rpb24oKXtyZXR1cm4odC5fZ2V0T3V0cHV0V2lkdGg9dC5hc20ueikuYXBwbHkobnVsbCxhcmd1bWVudHMpfSx0Ll9nZXRPdXRwdXRDaGFubmVsQ291bnQ9ZnVuY3Rpb24oKXtyZXR1cm4odC5fZ2V0T3V0cHV0Q2hhbm5lbENvdW50PXQuYXNtLkEpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sdC5fbG9hZE1vZGVsPWZ1bmN0aW9uKCl7cmV0dXJuKHQuX2xvYWRNb2RlbD10LmFzbS5CKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LHQuX3J1bkluZmVyZW5jZT1mdW5jdGlvbigpe3JldHVybih0Ll9ydW5JbmZlcmVuY2U9dC5hc20uQykuYXBwbHkobnVsbCxhcmd1bWVudHMpfSx0Ll9pc0dQVUVuYWJsZWQ9ZnVuY3Rpb24oKXtyZXR1cm4odC5faXNHUFVFbmFibGVkPXQuYXNtLkQpLmFwcGx5KG51bGwsYXJndW1lbnRzKX07dmFyIFZpPXQuX19fZXJybm9fbG9jYXRpb249ZnVuY3Rpb24oKXtyZXR1cm4oVmk9dC5fX19lcnJub19sb2NhdGlvbj10LmFzbS5GKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LEN0O2Z1bmN0aW9uIEdsKGwpe3RoaXMubmFtZT0iRXhpdFN0YXR1cyIsdGhpcy5tZXNzYWdlPSJQcm9ncmFtIHRlcm1pbmF0ZWQgd2l0aCBleGl0KCIrbCsiKSIsdGhpcy5zdGF0dXM9bH1HZT1mdW5jdGlvbiBsKCl7Q3R8fEJyKCksQ3R8fChHZT1sKX07ZnVuY3Rpb24gQnIobCl7aWYoX2U+MHx8KGNsKCksX2U+MCkpcmV0dXJuO2Z1bmN0aW9uIGgoKXtDdHx8KEN0PSEwLHQuY2FsbGVkUnVuPSEwLCFUJiYoZmwoKSxuKHQpLHQub25SdW50aW1lSW5pdGlhbGl6ZWQmJnQub25SdW50aW1lSW5pdGlhbGl6ZWQoKSxsbCgpKSl9dC5zZXRTdGF0dXM/KHQuc2V0U3RhdHVzKCJSdW5uaW5nLi4uIiksc2V0VGltZW91dChmdW5jdGlvbigpe3NldFRpbWVvdXQoZnVuY3Rpb24oKXt0LnNldFN0YXR1cygiIil9LDEpLGgoKX0sMSkpOmgoKX10LnJ1bj1CcjtmdW5jdGlvbiB6bChsLGgpe0hsKGwpfWZ1bmN0aW9uIEhsKGwpe3VsKCl8fCh0Lm9uRXhpdCYmdC5vbkV4aXQobCksVD0hMCksdShsLG5ldyBHbChsKSl9aWYodC5wcmVJbml0KWZvcih0eXBlb2YgdC5wcmVJbml0PT0iZnVuY3Rpb24iJiYodC5wcmVJbml0PVt0LnByZUluaXRdKTt0LnByZUluaXQubGVuZ3RoPjA7KXQucHJlSW5pdC5wb3AoKSgpO3JldHVybiBCcigpLGUucmVhZHl9fSgpO3R5cGVvZiBleHBvcnRzPT0ib2JqZWN0IiYmdHlwZW9mIG1vZHVsZT09Im9iamVjdCI/bW9kdWxlLmV4cG9ydHM9U3Q6dHlwZW9mIGRlZmluZT09ImZ1bmN0aW9uIiYmZGVmaW5lLmFtZD9kZWZpbmUoW10sZnVuY3Rpb24oKXtyZXR1cm4gU3R9KTp0eXBlb2YgZXhwb3J0cz09Im9iamVjdCImJihleHBvcnRzLmNyZWF0ZVZvbmFnZVRGTGl0ZVNpbWRNb2R1bGU9U3QpO2NsYXNzIHRse2NvbnN0cnVjdG9yKCl7dGhpcy5pc1NJTURTdXBwb3J0ZWQ9ITEsdGhpcy5pc1RocmVhZHNTdXBwb3J0ZWQ9ITEsdGhpcy5pbnB1dFdpZHRoPTAsdGhpcy5pbnB1dEhlaWdodD0wLHRoaXMuaW5wdXRDaGFubmVsQ291bnQ9MCx0aGlzLmlucHV0TWVtb3J5T2Zmc2V0PTAsdGhpcy5vdXRwdXRXaWR0aD0wLHRoaXMub3V0cHV0SGVpZ2h0PTAsdGhpcy5vdXRwdXRDaGFubmVsQ291bnQ9MCx0aGlzLm91dHB1dE1lbW9yeU9mZnNldD0wfX1jb25zdCBybD0iaHR0cHM6Ly9kM29wcWptcXp4ZjA1Ny5jbG91ZGZyb250Lm5ldC92b25hZ2UtdGVuc29yZmxvdy13YXNtL3RmbGl0ZS1zaW1kLXdhc20vMS4xLjMvIixubD0iaHR0cHM6Ly9kM29wcWptcXp4ZjA1Ny5jbG91ZGZyb250Lm5ldC9tbC9zZWxmaWVfc2VnbWVudGF0aW9uLzQuMC4wLyI7YXN5bmMgZnVuY3Rpb24gaWwocj1ybCxlPW5sKXtsZXQgdD1uZXcgdGw7dmFyIG49bmV3IFByb21pc2UoZnVuY3Rpb24oaSxvKXthc3luYyBmdW5jdGlvbiBzKCl7cmV0dXJuIFN0KHtsb2NhdGVGaWxlOmZ1bmN0aW9uKGYpe3JldHVybiByK2Z9fSl9YXN5bmMgZnVuY3Rpb24gYSh1KXtyZXR1cm4gbmV3IFByb21pc2UoYXN5bmMoZixjKT0+e2NvbnN0IGQ9dTtpZih0eXBlb2YgZD09InVuZGVmaW5lZCIpcmV0dXJuIGMoIlRGTGl0ZSBiYWNrZW5kIHVuYXZhaWxhYmxlOiB3YXNtU2ltZCIpO2NvbnN0IHA9InNlbGZpZV9zZWdtZW50YXRpb25fbGFuZHNjYXBlIjtjb25zb2xlLmxvZygiTG9hZGluZyB0ZmxpdGUgbW9kZWw6IixwKTtsZXQgeT1lK2Ake3B9LnRmbGl0ZWA7Y29uc29sZS5sb2coIlRGTGl0ZSBtb2RlbFVybDogIit5KTt0cnl7Y29uc3QgXz1hd2FpdChhd2FpdCBmZXRjaCh5KSkuYXJyYXlCdWZmZXIoKTtjb25zb2xlLmxvZygiTW9kZWwgYnVmZmVyIHNpemU6IixfLmJ5dGVMZW5ndGgpO2NvbnN0IGI9ZC5fZ2V0TW9kZWxCdWZmZXJNZW1vcnlPZmZzZXQoKTtjb25zb2xlLmxvZygiTW9kZWwgYnVmZmVyIG1lbW9yeSBvZmZzZXQ6IixiKSxjb25zb2xlLmxvZygiTG9hZGluZyBtb2RlbCBidWZmZXIuLi4iKSxkLkhFQVBVOC5zZXQobmV3IFVpbnQ4QXJyYXkoXyksYik7Y29uc3QgZz1kLl9sb2FkTW9kZWwoXy5ieXRlTGVuZ3RoKTtpZihjb25zb2xlLmxvZygiTG9hZCBtb2RlbCByZXN1bHQ6IixnKSxnIT09MCl7YygiQ2Fubm90IGxvYWQgbW9kZWwiKTtyZXR1cm59dC5pbnB1dFdpZHRoPWQuX2dldElucHV0V2lkdGgoKSx0LmlucHV0SGVpZ2h0PWQuX2dldElucHV0SGVpZ2h0KCksdC5pbnB1dENoYW5uZWxDb3VudD1kLl9nZXRJbnB1dENoYW5uZWxDb3VudCgpLHQuaW5wdXRNZW1vcnlPZmZzZXQ9ZC5fZ2V0SW5wdXRNZW1vcnlPZmZzZXQoKSxjb25zb2xlLmxvZygiSW5wdXQgbWVtb3J5IG9mZnNldDoiLHQuaW5wdXRNZW1vcnlPZmZzZXQpLGNvbnNvbGUubG9nKCJJbnB1dCBoZWlnaHQ6Iix0LmlucHV0SGVpZ2h0KSxjb25zb2xlLmxvZygiSW5wdXQgd2lkdGg6Iix0LmlucHV0V2lkdGgpLGNvbnNvbGUubG9nKCJJbnB1dCBjaGFubmVsczoiLHQuaW5wdXRDaGFubmVsQ291bnQpLHQub3V0cHV0TWVtb3J5T2Zmc2V0PWQuX2dldE91dHB1dE1lbW9yeU9mZnNldCgpLHQub3V0cHV0V2lkdGg9ZC5fZ2V0T3V0cHV0V2lkdGgoKSx0Lm91dHB1dEhlaWdodD1kLl9nZXRPdXRwdXRIZWlnaHQoKSx0Lm91dHB1dENoYW5uZWxDb3VudD1kLl9nZXRPdXRwdXRDaGFubmVsQ291bnQoKSxjb25zb2xlLmxvZygiT3V0cHV0IG1lbW9yeSBvZmZzZXQ6Iix0Lm91dHB1dE1lbW9yeU9mZnNldCksY29uc29sZS5sb2coIk91dHB1dCBoZWlnaHQ6Iix0Lm91dHB1dEhlaWdodCksY29uc29sZS5sb2coIk91dHB1dCB3aWR0aDoiLHQub3V0cHV0V2lkdGgpLGNvbnNvbGUubG9nKCJPdXRwdXQgY2hhbm5lbHM6Iix0Lm91dHB1dENoYW5uZWxDb3VudCksdC5zZWxlY3RlZFRGTGl0ZT1kfWNhdGNoKG0pe2MobSk7cmV0dXJufWYoKX0pfXMoKS50aGVuKHU9PntpZih1PT09bnVsbCl0aHJvdyBjb25zb2xlLmVycm9yKCJsb2FkVEZMaXRlIG51bGwiKSwibG9hZFRGTGl0ZSBudWxsIjthKHUpLnRoZW4oZj0+e2kodCl9KS5jYXRjaChmPT57Y29uc29sZS5lcnJvcigibG9hZFRGTGl0ZU1vZGVsIGVycm9yIiksbygibG9hZFRGTGl0ZU1vZGVsIGVycm9yIil9KX0pLmNhdGNoKHU9Pntjb25zb2xlLmVycm9yKCJsb2FkVEZMaXRlIGVycm9yOiIsdSksbygibG9hZFRGTGl0ZSBlcnJvcjoiK3UpfSl9KTtyZXR1cm4gbn1jbGFzcyBvbHtjb25zdHJ1Y3Rvcigpe3RoaXMuY2FudmFzPW5ldyBPZmZzY3JlZW5DYW52YXMoMCwwKSx0aGlzLmNvbnRleHQ9dGhpcy5jYW52YXMuZ2V0Q29udGV4dCgiMmQiLHt3aWxsUmVhZEZyZXF1ZW50bHk6ITB9KSx0aGlzLnBpeGVsQ291bnQ9MCx0aGlzLmlucHV0T2Zmc2V0PTAsdGhpcy5vdXRwdXRPZmZzZXQ9MH1hc3luYyBpbml0KGUsdCl7YXdhaXQgdGhpcy5pbml0V2FzbShlLHQpLHRoaXMuaW5mb3MmJih0aGlzLmNhbnZhcy53aWR0aD10aGlzLmluZm9zLmlucHV0V2lkdGgsdGhpcy5jYW52YXMuaGVpZ2h0PXRoaXMuaW5mb3MuaW5wdXRIZWlnaHQsdGhpcy5waXhlbENvdW50PXRoaXMuaW5mb3MuaW5wdXRXaWR0aCp0aGlzLmluZm9zLmlucHV0SGVpZ2h0LHRoaXMubWFzaz1uZXcgSW1hZ2VEYXRhKHRoaXMuaW5mb3MuaW5wdXRXaWR0aCx0aGlzLmluZm9zLmlucHV0SGVpZ2h0KSx0aGlzLmlucHV0T2Zmc2V0PXRoaXMuaW5mb3MuaW5wdXRNZW1vcnlPZmZzZXQvNCx0aGlzLm91dHB1dE9mZnNldD10aGlzLmluZm9zLm91dHB1dE1lbW9yeU9mZnNldC80KX1hc3luYyBpbml0V2FzbShlLHQpe3RoaXMuaW5mb3M9YXdhaXQgaWwoZSx0KX1nZXRPdXRwdXREaW1lbnNpb25zKCl7dmFyIGUsdCxuLGk7cmV0dXJue3dpZHRoOih0PShlPXRoaXMuaW5mb3MpPT1udWxsP3ZvaWQgMDplLm91dHB1dFdpZHRoKSE9bnVsbD90OjAsaGVpZ2h0OihpPShuPXRoaXMuaW5mb3MpPT1udWxsP3ZvaWQgMDpuLm91dHB1dEhlaWdodCkhPW51bGw/aTowfX1hc3luYyBwcm9jZXNzKGUpe2lmKCF0aGlzLm1hc2t8fCF0aGlzLmluZm9zKXJldHVybjtjb25zdCB0PXRoaXMuaW5mb3MuaW5wdXRXaWR0aCxuPXRoaXMuaW5mb3MuaW5wdXRIZWlnaHQ7dGhpcy5jb250ZXh0LmRyYXdJbWFnZShlLDAsMCxlLndpZHRoLGUuaGVpZ2h0LDAsMCx0LG4pO2NvbnN0IGk9dGhpcy5jb250ZXh0LmdldEltYWdlRGF0YSgwLDAsdCxuKSxvPXRoaXMuaW5mb3Muc2VsZWN0ZWRURkxpdGUuSEVBUEYzMjtmb3IobGV0IHM9MDtzPHRoaXMucGl4ZWxDb3VudDtzKyspe2NvbnN0IGE9dGhpcy5pbnB1dE9mZnNldCtzKjM7b1thXT1pLmRhdGFbcyo0XS8yNTUsb1thKzFdPWkuZGF0YVtzKjQrMV0vMjU1LG9bYSsyXT1pLmRhdGFbcyo0KzJdLzI1NX10aGlzLmluZm9zLnNlbGVjdGVkVEZMaXRlLl9ydW5JbmZlcmVuY2UoKTtmb3IobGV0IHM9MDtzPHRoaXMucGl4ZWxDb3VudDtzKyspe2NvbnN0IGE9dGhpcy5pbmZvcy5zZWxlY3RlZFRGTGl0ZS5IRUFQRjMyW3RoaXMub3V0cHV0T2Zmc2V0K3NdO3RoaXMubWFzay5kYXRhW3MqNF09dGhpcy5tYXNrLmRhdGFbcyo0KzNdPTI1NSphfXJldHVybiBjcmVhdGVJbWFnZUJpdG1hcCh0aGlzLm1hc2spfWlzR3B1U3VwcG9ydGVkKCl7dmFyIGUsdCxuO3JldHVybihuPSh0PShlPXRoaXMuaW5mb3MpPT1udWxsP3ZvaWQgMDplLnNlbGVjdGVkVEZMaXRlKT09bnVsbD92b2lkIDA6dC5faXNHUFVFbmFibGVkKCkpIT1udWxsP246ITF9fWNsYXNzIHNse2NvbnN0cnVjdG9yKCl7dGhpcy5zZWxmaWVTZWdtZW50YXRpb249bmV3IG9sLHRoaXMucHJldmlvdXNEaW1lbnNpb25zPXt3aWR0aDowLGhlaWdodDowfX1hc3luYyBpbml0KGUpe2F3YWl0IHRoaXMuc2VsZmllU2VnbWVudGF0aW9uLmluaXQoZS53YXNtQXNzZXRVcmlQYXRoLGUudGZsaXRlQXNzZXRVcmlQYXRoKTtjb25zdHt3aWR0aDp0LGhlaWdodDpufT10aGlzLnNlbGZpZVNlZ21lbnRhdGlvbi5nZXRPdXRwdXREaW1lbnNpb25zKCk7dGhpcy5iYWNrZ3JvdW5kRmlsdGVyPW5ldyBlbCh7Zm9yZWdyb3VuZFdpZHRoOjEsZm9yZWdyb3VuZEhlaWdodDoxLG1hc2tXaWR0aDp0LG1hc2tIZWlnaHQ6bn0pfWFzeW5jIHRyYW5zZm9ybShlLHQpe3ZhciBvLHMsYSx1O2NvbnN0IG49YXdhaXQgY3JlYXRlSW1hZ2VCaXRtYXAoZSksaT1hd2FpdCB0aGlzLnNlbGZpZVNlZ21lbnRhdGlvbi5wcm9jZXNzKG4pO2k/KChuLndpZHRoIT09dGhpcy5wcmV2aW91c0RpbWVuc2lvbnMud2lkdGh8fG4uaGVpZ2h0IT09dGhpcy5wcmV2aW91c0RpbWVuc2lvbnMuaGVpZ2h0KSYmKHRoaXMucHJldmlvdXNEaW1lbnNpb25zLndpZHRoPW4ud2lkdGgsdGhpcy5wcmV2aW91c0RpbWVuc2lvbnMuaGVpZ2h0PW4uaGVpZ2h0LGF3YWl0KChvPXRoaXMuYmFja2dyb3VuZEZpbHRlcik9PW51bGw/dm9pZCAwOm8ucmVzaXplRm9yZWdyb3VuZChuLndpZHRoLG4uaGVpZ2h0KSkpLGF3YWl0KChzPXRoaXMuYmFja2dyb3VuZEZpbHRlcik9PW51bGw/dm9pZCAwOnMucHJvY2VzcyhuLGkpKSxlLmNsb3NlKCksdC5lbnF1ZXVlKG5ldyBWaWRlb0ZyYW1lKChhPXRoaXMuYmFja2dyb3VuZEZpbHRlcik9PW51bGw/dm9pZCAwOmEuY2FudmFzLHt0aW1lc3RhbXA6KHU9ZS50aW1lc3RhbXApIT1udWxsP3U6MCxhbHBoYToiZGlzY2FyZCJ9KSkpOnQuZW5xdWV1ZShlKX1hc3luYyBzZXRCYWNrZ3JvdW5kT3B0aW9ucyhlKXt2YXIgdDthd2FpdCgodD10aGlzLmJhY2tncm91bmRGaWx0ZXIpPT1udWxsP3ZvaWQgMDp0LnNldEJhY2tncm91bmRPcHRpb25zKGUpKX1hc3luYyBzZXRWaWRlb0JHUmVhZGFibGUoZSl7dmFyIHQ7YXdhaXQoKHQ9dGhpcy5iYWNrZ3JvdW5kRmlsdGVyKT09bnVsbD92b2lkIDA6dC5zZXRWaWRlb0JHUmVhZGFibGUoZSkpfWFzeW5jIHNldFZpcnR1YWxCR0ltYWdlKGUpe3ZhciB0O2F3YWl0KCh0PXRoaXMuYmFja2dyb3VuZEZpbHRlcik9PW51bGw/dm9pZCAwOnQuc2V0VmlydHVhbEJHSW1hZ2UoZSkpfXNldEZsaWNrZXJpbmdPcHRpb25zKGUpe3ZhciB0Oyh0PXRoaXMuYmFja2dyb3VuZEZpbHRlcik9PW51bGx8fHQuc2V0RmxpY2tlcmluZ09wdGlvbnMoZSl9fWNvbnN0IE9yPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5iYWNrZ3JvdW5kVHJhbnNmb3JtZXI9bmV3IHNsLHRoaXMubWVkaWFQcm9jZXNzb3I9bmV3IHdzLHRoaXMucmF0ZT0zMH1hc3luYyBpbml0KGUpe2F3YWl0IHRoaXMuYmFja2dyb3VuZFRyYW5zZm9ybWVyLmluaXQoZSksYXdhaXQgdGhpcy5tZWRpYVByb2Nlc3Nvci5zZXRUcmFuc2Zvcm1lcnMoW3RoaXMuYmFja2dyb3VuZFRyYW5zZm9ybWVyXSksdGhpcy5tZWRpYVByb2Nlc3Nvci5zZXRUcmFja0V4cGVjdGVkUmF0ZSh0aGlzLnJhdGUpLHRoaXMubWVkaWFQcm9jZXNzb3Iub25BbnkoKHQsbik9Pnt2YXIgaTsoaT10aGlzLnJlc29sdmVPbk1lZGlhUHJvY2Vzc29yKT09bnVsbHx8aS5jYWxsKHRoaXMse25hbWU6dCxkYXRhOm59KX0pfWFzeW5jIG9uTWVkaWFQcm9jZXNzb3JFdmVudCgpe3JldHVybiBhd2FpdCBuZXcgUHJvbWlzZShlPT50aGlzLnJlc29sdmVPbk1lZGlhUHJvY2Vzc29yPWUpfWFzeW5jIHNldFRyYWNrRXhwZWN0ZWRSYXRlKGUpe3RoaXMucmF0ZT1lLHRoaXMubWVkaWFQcm9jZXNzb3Iuc2V0VHJhY2tFeHBlY3RlZFJhdGUoZSl9YXN5bmMgdHJhbnNmb3JtKGUsdCl7dGhpcy5tZWRpYVByb2Nlc3Nvci50cmFuc2Zvcm0oZSx0KX1hc3luYyBzZXRCYWNrZ3JvdW5kT3B0aW9ucyhlKXt2YXIgdDthd2FpdCgodD10aGlzLmJhY2tncm91bmRUcmFuc2Zvcm1lcik9PW51bGw/dm9pZCAwOnQuc2V0QmFja2dyb3VuZE9wdGlvbnMoZSkpfXNldFZpZGVvQkdSZWFkYWJsZShlKXt0aGlzLmJhY2tncm91bmRUcmFuc2Zvcm1lci5zZXRWaWRlb0JHUmVhZGFibGUoZSl9YXN5bmMgc2V0VmlydHVhbEJHSW1hZ2UoZSl7YXdhaXQgdGhpcy5iYWNrZ3JvdW5kVHJhbnNmb3JtZXIuc2V0VmlydHVhbEJHSW1hZ2UoZSl9YXN5bmMgdGVybWluYXRlKCl7YXdhaXQgdGhpcy5tZWRpYVByb2Nlc3Nvci5kZXN0cm95KCl9c2V0RmxpY2tlcmluZ09wdGlvbnMoZSl7dGhpcy5iYWNrZ3JvdW5kVHJhbnNmb3JtZXIuc2V0RmxpY2tlcmluZ09wdGlvbnMoZSl9c2V0Vm9uYWdlTWV0YWRhdGEoZSl7ZnMoZSl9fTtsZXQgVWk9T3I7KCgpPT57WGkoIlByb2Nlc3NvcldvcmtlciIsT3IpfSkoKX0pKCk7Cg==",hu=typeof window!="undefined"&&window.Blob&&new Blob([atob(du)],{type:"text/javascript;charset=utf-8"});function F3(){const i=hu&&(window.URL||window.webkitURL).createObjectURL(hu);try{return i?new Worker(i,{}):new Worker("data:application/javascript;base64,"+du,{type:"module"})}finally{i&&(window.URL||window.webkitURL).revokeObjectURL(i)}}class H3 extends Us{constructor(){super(...arguments),this.rate=30}async init(n){this.worker=await q2($o,F3),await this.worker.init(n),await this.worker.setVonageMetadata(Rs()),await this.setBackgroundOptions(n),this.listenWorker()}async setTrackExpectedRate(n){var o;await((o=this.worker)==null?void 0:o.setTrackExpectedRate(n))}async setBackgroundOptions(n){var m,y,S;const{transformerType:o}=n;switch(o){case"VideoBackground":await((m=this.worker)==null?void 0:m.setVideoBGReadable(await As.createVideoReadable(n.backgroundAssetUri)));break;case"VirtualBackground":await((y=this.worker)==null?void 0:y.setVirtualBGImage(await As.createImageCanvas(n.backgroundAssetUri)));break}await((S=this.worker)==null?void 0:S.setBackgroundOptions(n))}async transform(n,o){var m;await((m=this.worker)==null?void 0:m.transform(n,o))}async destroy(){var n;await((n=this.worker)==null?void 0:n.terminate())}async setFlickeringOptions(n){var o;await((o=this.worker)==null?void 0:o.setFlickeringOptions(n))}async listenWorker(){var n,o,m;for(;(n=this.worker)!=null&&n.worker;){const{name:y,data:S}=await((o=this.worker)==null?void 0:o.onMediaProcessorEvent());switch(y){case"error":case"warn":this.emit(y,S);break;case"pipelineInfo":switch(this.emit(y,S),S){case"pipeline_ended":case"pipeline_ended_with_error":await((m=this.worker)==null?void 0:m.terminate());return}break}}}}class fu extends Us{constructor(){super(),this.worker=new H3,this.connector=new M2(this.worker)}async init(n){await this.worker.init(n),this.worker.onAny((o,m)=>this.emit(o,m))}async setBackgroundOptions(n){await this.worker.setBackgroundOptions(n)}setTrackExpectedRate(n){this.worker.setTrackExpectedRate(n)}getConnector(){return this.connector}static async create(n){const o=new this;return await o.init(n),o}}function C3(){return pi}function N3(){return bi}function E3(){return yi}function k3(){return gi}function J3(){return Zi}function U3(){return vi}function K3(){return Gi}var mu=(i=>(i.FAST="FAST",i.PRECISE="PRECISE",i))(mu||{});async function M3(i){return await fu.create(i)}un.BackgroundTransformer=au,un.BlurRadius=Kr,un.ErrorFunction=ws,un.MediapipeHelper=Cs,un.PipelineInfoData=fi,un.SelfieSegmentationType=mu,un.VonageMediaProcessor=fu,un.WarningType=Ys,un.createVonageMediaProcessor=M3,un.getSupportedBrowserFeatures=Hs,un.getVonageFaceDetection=k3,un.getVonageFaceMash=J3,un.getVonageHands=N3,un.getVonageHolistic=E3,un.getVonageObjectron=U3,un.getVonagePose=K3,un.getVonageSelfieSegmentation=C3,un.isSupported=O2,Object.defineProperties(un,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}})});
|